diff --git a/src/Makefile b/src/Makefile index 233414ed4..79f32b6f9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -146,6 +146,11 @@ VARIO = YES # Values = YES, NO SDCARD = NO +# RTCLOCK +# Values = YES, NO +# default = YES (means enabled when available) +RTCLOCK = YES + # BLUETOOTH # Values = YES, NO BLUETOOTH = NO @@ -452,46 +457,71 @@ endif RUN_FROM_FLASH = 1 -ifeq ($(PCB), X9D) - # X9D, so ... +ifeq ($(PCB), ACT) + # ACT, so ... OPT = 2 - CPPDEFS += -DPCBX9D -DCPUARM -DEEPROM_VARIANT=0 -DAUDIO -DHAPTIC -DPXX -DDSM2 -DDSM2_PPM -DROTARY_ENCODERS=1 -DLCD212 + CPPDEFS += -DPCBACT -DCPUARM -DEEPROM_VARIANT=0 -DAUDIO -DHAPTIC -DPXX -DDSM2 -DDSM2_PPM -DROTARY_ENCODERS=1 -DLCD260 EXTRAINCDIRS += sky9x CoOS/kernel CoOS/portable + EXTRAINCDIRS += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include BOARDSRC = board_x9d.cpp EXTRABOARDSRC += x9d/lcd_driver.cpp SRC += sky9x/core_cm3.c sky9x/board_lowlevel.c sky9x/crt.c sky9x/vectors_sam3s.c - SRC += CoOS/kernel/core.c CoOS/kernel/hook.c CoOS/kernel/task.c CoOS/kernel/event.c CoOS/kernel/time.c CoOS/kernel/timer.c CoOS/kernel/flag.c CoOS/kernel/mutex.c CoOS/kernel/serviceReq.c CoOS/portable/GCC/port.c CoOS/portable/arch.c - SRC += sky9x/usb/device/core/USBD_UDP.c sky9x/usb/device/core/USBDDriver.c - SRC += sky9x/usb/device/massstorage/MSDDriver.c sky9x/usb/device/massstorage/MSDDStateMachine.c sky9x/usb/device/massstorage/MSDLun.c sky9x/usb/device/massstorage/MSDDriverDescriptors.c sky9x/usb/device/massstorage/SBCMethods.c - SRC += sky9x/usb/common/core/USBEndpointDescriptor.c sky9x/usb/common/core/USBGenericRequest.c sky9x/usb/common/core/USBFeatureRequest.c sky9x/usb/common/core/USBInterfaceRequest.c sky9x/usb/common/core/USBGetDescriptorRequest.c sky9x/usb/common/core/USBSetAddressRequest.c sky9x/usb/common/core/USBSetConfigurationRequest.c sky9x/usb/common/core/USBConfigurationDescriptor.c sky9x/usb/common/core/USBGenericDescriptor.c - SRC += sky9x/MEDSdcard.c +# SRC += CoOS/kernel/core.c CoOS/kernel/hook.c CoOS/kernel/task.c CoOS/kernel/event.c CoOS/kernel/time.c CoOS/kernel/timer.c CoOS/kernel/flag.c CoOS/kernel/mutex.c CoOS/kernel/serviceReq.c CoOS/portable/GCC/port.c CoOS/portable/arch.c +# SRC += sky9x/usb/device/core/USBD_UDP.c sky9x/usb/device/core/USBDDriver.c +# SRC += sky9x/usb/device/massstorage/MSDDriver.c sky9x/usb/device/massstorage/MSDDStateMachine.c sky9x/usb/device/massstorage/MSDLun.c sky9x/usb/device/massstorage/MSDDriverDescriptors.c sky9x/usb/device/massstorage/SBCMethods.c +# SRC += sky9x/usb/common/core/USBEndpointDescriptor.c sky9x/usb/common/core/USBGenericRequest.c sky9x/usb/common/core/USBFeatureRequest.c sky9x/usb/common/core/USBInterfaceRequest.c sky9x/usb/common/core/USBGetDescriptorRequest.c sky9x/usb/common/core/USBSetAddressRequest.c sky9x/usb/common/core/USBSetConfigurationRequest.c sky9x/usb/common/core/USBConfigurationDescriptor.c sky9x/usb/common/core/USBGenericDescriptor.c +# SRC += sky9x/MEDSdcard.c EEPROMSRC = eeprom_arm.cpp eeprom_conversions.cpp PULSESSRC = pulses_arm.cpp - CPPSRC += sky9x/audio.cpp haptic.cpp - CPPSRC += sky9x/sound_driver.cpp sky9x/sdcard_driver.cpp +# CPPSRC += sky9x/audio.cpp haptic.cpp +# CPPSRC += sky9x/sound_driver.cpp sky9x/sdcard_driver.cpp CPPSRC += bmp.cpp monitors_views.cpp ifeq ($(SDCARD), YES) - EXTRABOARDSRC += FatFs/ff.c FatFs/fattime.c FatFs/option/ccsbcs.c sky9x/diskio.cpp + EXTRABOARDSRC += FatFs/ff.c FatFs/fattime.c FatFs/option/ccsbcs.c # sky9x/diskio.cpp CPPDEFS += -DVOICE EXTRAINCDIRS += FatFs FatFs/option endif - - ifeq ($(BLUETOOTH), YES) - CPPDEFS += -DBLUETOOTH - CPPSRC += sky9x/bluetooth.cpp - endif - + ifeq ($(DEBUG), YES) CPPSRC += sky9x/debug.cpp SRC += sky9x/syscalls.c endif endif +ifeq ($(PCB), X9D) + # X9D, so ... + OPT = 2 + CPPDEFS += -DPCBX9D -DCPUARM -DEEPROM_VARIANT=0 -DAUDIO -DPXX -DDSM2 -DDSM2_PPM -DROTARY_ENCODERS=1 -DLCD212 + EXTRAINCDIRS += sky9x CoOS/kernel CoOS/portable + EXTRAINCDIRS += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include + BOARDSRC = board_x9d.cpp + EXTRABOARDSRC += x9d/lcd_driver.cpp x9d/aspi.cpp + SRC += CoOS/kernel/core.c CoOS/kernel/hook.c CoOS/kernel/task.c CoOS/kernel/event.c CoOS/kernel/time.c CoOS/kernel/timer.c CoOS/kernel/flag.c CoOS/kernel/mutex.c CoOS/kernel/serviceReq.c CoOS/portable/GCC/port.c CoOS/portable/arch.c + EEPROMSRC = eeprom_arm.cpp eeprom_conversions.cpp + PULSESSRC = pulses_arm.cpp + CPPSRC += sky9x/audio.cpp + CPPSRC += x9d/eeprom_driver.cpp x9d/pulses_driver.cpp x9d/keys_driver.cpp x9d/audio_driver.cpp + CPPSRC += bmp.cpp monitors_views.cpp + SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c + SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c + + ifeq ($(SDCARD), YES) + EXTRABOARDSRC += FatFs/ff.c FatFs/fattime.c FatFs/option/ccsbcs.c x9d/diskio.cpp + CPPDEFS += -DVOICE + EXTRAINCDIRS += FatFs FatFs/option + endif + + ifeq ($(RTCLOCK), YES) + CPPDEFS += -DRTCLOCK + CPPSRC += rtc.cpp x9d/rtc_driver.cpp + endif +endif + ifeq ($(PCB), SKY9X) # SKY9X, so ... OPT = 2 - CPPDEFS += -DPCBSKY9X -DCPUARM -DEEPROM_VARIANT=0 -DAUDIO -DHAPTIC -DRTCLOCK -DPXX -DDSM2 -DDSM2_PPM -DROTARY_ENCODERS=1 + CPPDEFS += -DPCBSKY9X -DCPUARM -DEEPROM_VARIANT=0 -DAUDIO -DHAPTIC -DPXX -DDSM2 -DDSM2_PPM -DROTARY_ENCODERS=1 EXTRAINCDIRS += sky9x CoOS/kernel CoOS/portable BOARDSRC = board_sky9x.cpp EXTRABOARDSRC += sky9x/lcd_driver.cpp @@ -503,9 +533,8 @@ ifeq ($(PCB), SKY9X) SRC += sky9x/MEDSdcard.c EEPROMSRC = eeprom_arm.cpp eeprom_conversions.cpp PULSESSRC = pulses_arm.cpp - CPPSRC += rtc.cpp sky9x/rtc_driver.cpp CPPSRC += sky9x/audio.cpp haptic.cpp - CPPSRC += sky9x/sound_driver.cpp sky9x/haptic_driver.cpp sky9x/sdcard_driver.cpp sky9x/massstorage.cpp + CPPSRC += sky9x/eeprom_driver.cpp sky9x/pulses_driver.cpp sky9x/keys_driver.cpp sky9x/audio_driver.cpp sky9x/haptic_driver.cpp sky9x/sdcard_driver.cpp sky9x/massstorage.cpp ifeq ($(SDCARD), YES) EXTRAINCDIRS += FatFs FatFs/option @@ -513,6 +542,11 @@ ifeq ($(PCB), SKY9X) CPPDEFS += -DVOICE endif + ifeq ($(RTCLOCK), YES) + CPPDEFS += -DRTCLOCK + CPPSRC += rtc.cpp sky9x/rtc_driver.cpp + endif + ifeq ($(BLUETOOTH), YES) CPPDEFS += -DBLUETOOTH CPPSRC += sky9x/bluetooth.cpp diff --git a/src/beeper.h b/src/beeper.h index a49b19312..aa71e0724 100644 --- a/src/beeper.h +++ b/src/beeper.h @@ -87,6 +87,9 @@ extern void beep(uint8_t val); #define IS_AUDIO_BUSY() (g_beepCnt || beepAgain || beepOn) #define AUDIO_RESET() +#define PLAY_PHASE_OFF(phase) +#define PLAY_PHASE_ON(phase) + #if !defined(CPUARM) inline void AUDIO_HEARTBEAT() { diff --git a/src/board_sky9x.cpp b/src/board_sky9x.cpp index f81422a5a..d2e3130ce 100644 --- a/src/board_sky9x.cpp +++ b/src/board_sky9x.cpp @@ -762,128 +762,6 @@ void board_init() } #endif -// keys: -// KEY_EXIT PA31 (PC24) -// KEY_MENU PB6 (PB5) -// KEY_DOWN LCD5 PC3 (PC5) -// KEY_UP LCD6 PC2 (PC1) -// KEY_RIGHT LCD4 PC4 (PC4) -// KEY_LEFT LCD3 PC5 (PC3) -// Reqd. bit 6 LEFT, 5 RIGHT, 4 UP, 3 DOWN 2 EXIT 1 MENU -// LCD pins 5 DOWN, 4 RIGHT, 3 LEFT, 1 UP -uint32_t read_keys() -{ - register uint32_t x; - register uint32_t y; - - x = lcdLock ? lcdInputs : PIOC->PIO_PDSR; // 6 LEFT, 5 RIGHT, 4 DOWN, 3 UP () - x <<= 1; - -#if defined(REVA) - y = (x & 0x00000060); - if (x & 0x00000008) - y |= 0x10; - if (x & 0x00000010) - y |= 0x08; - if (PIOA->PIO_PDSR & 0x80000000) - y |= 0x04; // EXIT - if (PIOB->PIO_PDSR & 0x000000040) - y |= 0x02; // MENU -#else - y = (x & 0x00000020); // RIGHT - if (x & 0x00000004) - y |= 0x02 << KEY_UP; // UP - if (x & 0x00000010) - y |= 0x02 << KEY_LEFT; // LEFT - if (x & 0x00000040) - y |= 0x02 << KEY_DOWN; // DOWN - if (x & 0x02000000) - y |= 0x02 << KEY_EXIT; // EXIT - if (PIOB->PIO_PDSR & 0x000000020) - y |= 0x02 << KEY_MENU; // MENU -#endif - - return y ; -} - -uint32_t read_trims() -{ - uint32_t trims; - uint32_t trima; - - trims = 0; - - trima = PIOA->PIO_PDSR; - -// TRIM_LH_DOWN PA7 (PA23) -#if defined(REVA) - if ( ( trima & 0x0080 ) == 0 ) -#else - if ((trima & 0x00800000) == 0) -#endif - { - trims |= 1; - } - -// TRIM_LV_DOWN PA27 (PA24) -#if defined(REVA) - if ( ( trima & 0x08000000 ) == 0 ) -#else - if ((trima & 0x01000000) == 0) -#endif - { - trims |= 4; - } - -// TRIM_RV_UP PA30 (PA1) -#if defined(REVA) - if ( ( trima & 0x40000000 ) == 0 ) -#else - if ((trima & 0x00000002) == 0) -#endif - { - trims |= 0x20; - } - -// TRIM_RH_DOWN PA29 (PA0) -#if defined(REVA) - if ( ( trima & 0x20000000 ) == 0 ) -#else - if ((trima & 0x00000001) == 0) -#endif - { - trims |= 0x40; - } - -// TRIM_LH_UP PB4 - if ((PIOB->PIO_PDSR & 0x10) == 0) { - trims |= 2; - } - - trima = PIOC->PIO_PDSR; -// TRIM_LV_UP PC28 - if ((trima & 0x10000000) == 0) { - trims |= 8; - } - -// TRIM_RV_DOWN PC10 - if ((trima & 0x00000400) == 0) { - trims |= 0x10; - } - -// TRIM_RH_UP PC9 - if ((trima & 0x00000200) == 0) { - trims |= 0x80; - } - - return trims; -} - -uint8_t keyDown() -{ - return ~read_keys() & 0x7E ; -} - extern uint32_t keyState(EnumKeys enuk) { register uint32_t a ; @@ -1000,29 +878,6 @@ void read_9_adc() } } -void readKeysAndTrims() -{ - register uint32_t i; - -#if defined(ROTARY_ENCODERS) - keys[BTN_REa].input(!(PIOB->PIO_PDSR & 0x40), BTN_REa); -#endif - - uint8_t enuk = KEY_MENU; - uint8_t in = ~read_keys(); - for (i = 1; i < 7; i++) { - keys[enuk].input(in & (1 << i), (EnumKeys) enuk); - ++enuk; - } - - in = read_trims(); - - for (i = 1; i < 256; i <<= 1) { - keys[enuk].input(in & i, (EnumKeys) enuk); - ++enuk; - } -} - #define RX_UART_BUFFER_SIZE 32 struct t_rxUartBuffer @@ -1176,7 +1031,7 @@ uint16_t getCurrent() static uint32_t Current_sum ; static uint8_t Current_count ; - Current_sum += anaIn(NUMBER_ANALOG-1); // TODO enum + Current_sum += anaIn(8); // TODO enum if (++Current_count >= 50) { Current = Current_sum / 5 ; Current_sum = 0 ; diff --git a/src/board_sky9x.h b/src/board_sky9x.h index 523e5b25c..69339ee2e 100644 --- a/src/board_sky9x.h +++ b/src/board_sky9x.h @@ -36,7 +36,7 @@ #include #include "sky9x/board.h" -#include "sky9x/sound_driver.h" +#include "sky9x/audio_driver.h" #include "sky9x/haptic_driver.h" #include "sky9x/debug.h" @@ -84,8 +84,8 @@ uint8_t getTemperature(); #define strcpy_P strcpy #define strcat_P strcat -extern uint32_t read_keys(); -#define KEYS_PRESSED() (~read_keys()) +extern uint32_t readKeys(); +#define KEYS_PRESSED() (~readKeys()) #define DBLKEYS_PRESSED_RGT_LFT(i) ((in & (0x20 + 0x40)) == (0x20 + 0x40)) #define DBLKEYS_PRESSED_UP_DWN(i) ((in & (0x10 + 0x08)) == (0x10 + 0x08)) #define DBLKEYS_PRESSED_RGT_UP(i) ((in & (0x20 + 0x10)) == (0x20 + 0x10)) @@ -99,6 +99,8 @@ extern uint32_t Current_used; extern uint16_t sessionTimer; #endif +void soft_power_off(); + #if defined(REVC) #define BOOTLOADER_REQUEST() (usbPlugged()) #else @@ -111,4 +113,12 @@ extern uint16_t sessionTimer; void setSticksGain(uint8_t gains); +uint32_t spi_operation( register uint8_t *tx, register uint8_t *rx, register uint32_t count ); + +#define wdt_disable() +#define wdt_enable(x) WDT->WDT_MR = 0x3FFF217F; +#define wdt_reset() WDT->WDT_CR = 0xA5000001 + +#define setBacklight(xx) PWM->PWM_CH_NUM[0].PWM_CDTYUPD = xx; + #endif diff --git a/src/board_x9d.cpp b/src/board_x9d.cpp index 3ec7c3edc..344bf1a3a 100644 --- a/src/board_x9d.cpp +++ b/src/board_x9d.cpp @@ -32,876 +32,112 @@ */ #include "open9x.h" -#include "sky9x/board.h" -uint32_t Master_frequency ; -volatile uint32_t Tenms ; +uint16_t Analog_values[NUMBER_ANALOG] ; +uint8_t temperature = 0; // Raw temp reading +uint8_t maxTemperature = 0 ; // Raw temp reading +volatile uint32_t Tenms ; // TODO to remove everywhere / use a #define -/** Console baudrate 9600. */ -#define CONSOLE_BAUDRATE 9600 -/** Usart Hw interface used by the console (UART0). */ -#define CONSOLE_USART UART0 -/** Usart Hw ID used by the console (UART0). */ -#define CONSOLE_ID ID_UART0 -/** Pins description corresponding to Rxd,Txd, (UART pins) */ -#define CONSOLE_PINS {PINS_UART} - -/** Second serial baudrate 9600. */ -#define SECOND_BAUDRATE 9600 -/** Usart Hw interface used by the console (UART0). */ -#define SECOND_USART USART0 -/** Usart Hw ID used by the console (UART0). */ -#define SECOND_ID ID_USART0 -/** Pins description corresponding to Rxd,Txd, (UART pins) */ -#define SECOND_PINS {PINS_USART0} - -#define CPU_INT int32_t -#define CPU_UINT uint32_t - -#if !defined(REVA) inline void init_soft_power() { - // Configure RF_power (PC17) - configure_pins( PIO_PC17, PIN_ENABLE | PIN_INPUT | PIN_PORTC | PIN_NO_PULLUP | PIN_PULLDOWN ) ; - configure_pins( PIO_PA8, PIN_ENABLE | PIN_INPUT | PIN_PORTA | PIN_PULLUP ) ; // Enable bit A8 (Soft Power) } -#endif uint32_t check_soft_power() { -#ifdef SIMU return e_power_on; -#else - if ( PIOC->PIO_PDSR & PIO_PC17 ) // Power on - { - return e_power_on ; - } - - if (usbPlugged()) - { - return e_power_usb ; // Detected USB - } - - if ( PIOA->PIO_PDSR & PIO_PA8 ) // Trainer plugged in - { - return e_power_trainer ; - } - - return e_power_off; -#endif } // turn off soft power void soft_power_off() { - configure_pins( PIO_PA8, PIN_ENABLE | PIN_OUTPUT | PIN_LOW | PIN_PORTA | PIN_NO_PULLUP ) ; } -extern "C" void sam_boot( void ) ; - -// Prototype -// Free pins (PA16 is stock buzzer) -// PA23, PA24, PA25, PB7, PB13 -// PC20, PC21(labelled 17), PC22, PC24 -// REVB -// PA25, use for stock buzzer -// PB14, PB6 -// PC21, PC19, PC15 (PPM2 output) -inline void config_free_pins() +uint8_t getTemperature() { -#if defined(REVA) - register Pio * pioptr = PIOA ; - pioptr->PIO_PER = 0x03800000L ; // Enable bits A25,24,23 - pioptr->PIO_ODR = 0x03800000L ; // Set as input - pioptr->PIO_PUER = 0x03800000L ; // Enable pullups - - pioptr = PIOB ; - pioptr->PIO_PER = 0x00002080L ; // Enable bits B13, 7 - pioptr->PIO_ODR = 0x00002080L ; // Set as input - pioptr->PIO_PUER = 0x00002080L ; // Enable pullups - - pioptr = PIOC ; - pioptr->PIO_PER = 0x01700000L ; // Enable bits C24,22,21,20 - pioptr->PIO_ODR = 0x01700000L ; // Set as input - pioptr->PIO_PUER = 0x01700000L ; // Enable pullups -#else - configure_pins( PIO_PB14, PIN_ENABLE | PIN_INPUT | PIN_PORTB | PIN_PULLUP ) ; -#endif + return temperature + g_eeGeneral.temperatureCalib; } -// Assumes PMC has already enabled clocks to ports -inline void setup_switches() +uint32_t keyState(EnumKeys enuk) { -#if defined(REVA) - register Pio *pioptr = PIOA ; - pioptr->PIO_PER = 0xF8008184 ; // Enable bits - pioptr->PIO_ODR = 0xF8008184 ; // Set bits input - pioptr->PIO_PUER = 0xF8008184 ; // Set bits with pullups + register uint32_t a = GPIOB->IDR; - pioptr = PIOB ; - pioptr->PIO_PER = 0x00000010 ; // Enable bits - pioptr->PIO_ODR = 0x00000010 ; // Set bits input - pioptr->PIO_PUER = 0x00000010 ; // Set bits with pullups - - pioptr = PIOC ; - pioptr->PIO_PER = 0x10014900 ; // Enable bits - pioptr->PIO_ODR = 0x10014900 ; // Set bits input - pioptr->PIO_PUER = 0x10014900 ; // Set bits with pullups -#else - configure_pins( 0x01808087, PIN_ENABLE | PIN_INPUT | PIN_PORTA | PIN_PULLUP ) ; - configure_pins( 0x00000030, PIN_ENABLE | PIN_INPUT | PIN_PORTB | PIN_PULLUP ) ; - configure_pins( 0x91114900, PIN_ENABLE | PIN_INPUT | PIN_PORTC | PIN_PULLUP ) ; -#endif -} - -#ifdef SIMU -#define end_ppm_capture() -#define sam_boot() -#else - -inline void UART3_Configure( uint32_t baudrate, uint32_t masterClock) -{ -// const Pin pPins[] = CONSOLE_PINS; - register Uart *pUart = BT_USART; - - /* Configure PIO */ - configure_pins( (PIO_PB2 | PIO_PB3), PIN_PERIPHERAL | PIN_INPUT | PIN_PER_A | PIN_PORTB | PIN_NO_PULLUP ) ; - - /* Configure PMC */ - PMC->PMC_PCER0 = 1 << BT_ID; - - /* Reset and disable receiver & transmitter */ - pUart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX - | UART_CR_RXDIS | UART_CR_TXDIS; - - /* Configure mode */ - pUart->UART_MR = 0x800 ; // NORMAL, No Parity - - /* Configure baudrate */ - /* Asynchronous, no oversampling */ - pUart->UART_BRGR = ( (masterClock / baudrate) + 8 ) / 16; - - /* Disable PDC channel */ - pUart->UART_PTCR = UART_PTCR_RXTDIS | UART_PTCR_TXTDIS; - - /* Enable receiver and transmitter */ - pUart->UART_CR = UART_CR_RXEN | UART_CR_TXEN; - -#if 0 - pUart->UART_IER = UART_IER_RXRDY ; - NVIC_EnableIRQ(UART1_IRQn) ; -#endif -} - -void UART3_Stop() -{ - BT_USART->UART_IDR = UART_IDR_RXRDY ; - NVIC_DisableIRQ(UART1_IRQn) ; -} - -// USART0 configuration -// Work in Progress, UNTESTED -// Uses PA5 and PA6 (RXD and TXD) -inline void UART2_Configure( uint32_t baudrate, uint32_t masterClock) -{ -//// const Pin pPins[] = CONSOLE_PINS; - register Usart *pUsart = SECOND_USART; - - /* Configure PIO */ - configure_pins( (PIO_PA5 | PIO_PA6), PIN_PERIPHERAL | PIN_INPUT | PIN_PER_A | PIN_PORTA | PIN_NO_PULLUP ) ; - -// /* Configure PMC */ - PMC->PMC_PCER0 = 1 << SECOND_ID; - -// /* Reset and disable receiver & transmitter */ - pUsart->US_CR = US_CR_RSTRX | US_CR_RSTTX - | US_CR_RXDIS | US_CR_TXDIS; - -// /* Configure mode */ - pUsart->US_MR = 0x000008C0 ; // NORMAL, No Parity, 8 bit - -// /* Configure baudrate */ -// /* Asynchronous, no oversampling */ - pUsart->US_BRGR = (masterClock / baudrate) / 16; - -// /* Disable PDC channel */ - pUsart->US_PTCR = US_PTCR_RXTDIS | US_PTCR_TXTDIS; - -// /* Enable receiver and transmitter */ - pUsart->US_CR = US_CR_RXEN | US_CR_TXEN; -} - -// Starts TIMER0 at full speed (MCK/2) for delay timing -// @ 36MHz this is 18MHz -// This was 6 MHz, we may need to slow it to TIMER_CLOCK2 (MCK/8=4.5 MHz) -inline void start_timer0() -{ - register Tc *ptc ; - - // Enable peripheral clock TC0 = bit 23 thru TC5 = bit 28 - PMC->PMC_PCER0 |= 0x00800000L ; // Enable peripheral clock to TC0 - - ptc = TC0 ; // Tc block 0 (TC0-2) - ptc->TC_BCR = 0 ; // No sync - ptc->TC_BMR = 2 ; - ptc->TC_CHANNEL[0].TC_CMR = 0x00008001 ; // Waveform mode MCK/8 for 36MHz osc. - ptc->TC_CHANNEL[0].TC_RC = 0xFFF0 ; - ptc->TC_CHANNEL[0].TC_RA = 0 ; - ptc->TC_CHANNEL[0].TC_CMR = 0x00008040 ; // 0000 0000 0000 0000 1000 0000 0100 0000, stop at regC - ptc->TC_CHANNEL[0].TC_CCR = 5 ; // Enable clock and trigger it (may only need trigger) -} - -// TIMER2 at 200Hz, provides 5mS for sound and 10mS tick on interrupt -// Starts TIMER2 at 200Hz, commentd out drive of TIOA2 (A26, EXT2) -inline void start_timer2() -{ - register Tc *ptc ; - register uint32_t timer ; - - // Enable peripheral clock TC0 = bit 23 thru TC5 = bit 28 - PMC->PMC_PCER0 |= 0x02000000L ; // Enable peripheral clock to TC2 - - timer = Master_frequency / 12800 / 2; // MCK/128 and 200 Hz - - ptc = TC0 ; // Tc block 0 (TC0-2) - ptc->TC_BCR = 0 ; // No sync - ptc->TC_BMR = 0 ; - ptc->TC_CHANNEL[2].TC_CMR = 0x00008000 ; // Waveform mode - ptc->TC_CHANNEL[2].TC_RC = timer ; // 10 Hz - ptc->TC_CHANNEL[2].TC_RA = timer >> 1 ; - ptc->TC_CHANNEL[2].TC_CMR = 0x0009C003 ; // 0000 0000 0000 1001 1100 0000 0000 0011 - ptc->TC_CHANNEL[2].TC_CCR = 5 ; // Enable clock and trigger it (may only need trigger) - - NVIC_EnableIRQ(TC2_IRQn) ; - TC0->TC_CHANNEL[2].TC_IER = TC_IER0_CPCS ; -} - -// Start TIMER3 for input capture -inline void start_timer3() -{ - register Tc *ptc ; - - // Enable peripheral clock TC0 = bit 23 thru TC5 = bit 28 - PMC->PMC_PCER0 |= 0x04000000L ; // Enable peripheral clock to TC3 - - ptc = TC1 ; // Tc block 1 (TC3-5) - ptc->TC_BCR = 0 ; // No sync - ptc->TC_BMR = 2 ; - ptc->TC_CHANNEL[0].TC_CMR = 0x00000000 ; // Capture mode - ptc->TC_CHANNEL[0].TC_CMR = 0x00090005 ; // 0000 0000 0000 1001 0000 0000 0000 0101, XC0, A rise, b fall - ptc->TC_CHANNEL[0].TC_CCR = 5 ; // Enable clock and trigger it (may only need trigger) - - configure_pins( PIO_PC23, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_PULLUP ) ; - - NVIC_SetPriority( TC3_IRQn, 14 ) ; // Low priority interrupt - NVIC_EnableIRQ(TC3_IRQn) ; - ptc->TC_CHANNEL[0].TC_IER = TC_IER0_LDRAS ; -} - -// Start Timer4 to provide 0.5uS clock for input capture -void start_timer4() -{ - register Tc *ptc ; - register uint32_t timer ; - - timer = Master_frequency / (2*2000000) ; // MCK/2 and 2MHz - - // Enable peripheral clock TC0 = bit 23 thru TC5 = bit 28 - PMC->PMC_PCER0 |= 0x08000000L ; // Enable peripheral clock to TC4 - - ptc = TC1 ; // Tc block 1 (TC3-5) - ptc->TC_BCR = 0 ; // No sync - ptc->TC_BMR = 0 ; - ptc->TC_CHANNEL[1].TC_CMR = 0x00008000 ; // Waveform mode - ptc->TC_CHANNEL[1].TC_RC = timer ; - ptc->TC_CHANNEL[1].TC_RA = timer >> 1 ; - ptc->TC_CHANNEL[1].TC_CMR = 0x0009C000 ; // 0000 0000 0000 1001 1100 0000 0100 0000 - // MCK/2, set @ RA, Clear @ RC waveform - ptc->TC_CHANNEL[1].TC_CCR = 5 ; // Enable clock and trigger it (may only need trigger) -} - -// Timer3 used for PPM_IN pulse width capture. Counter running at 16MHz / 8 = 2MHz -// equating to one count every half millisecond. (2 counts = 1ms). Control channel -// count delta values thus can range from about 1600 to 4400 counts (800us to 2200us), -// corresponding to a PPM signal in the range 0.8ms to 2.2ms (1.5ms at center). -// (The timer is free-running and is thus not reset to zero at each capture interval.) -// Timer 4 generates the 2MHz clock to clock Timer 3 - -extern "C" void TC3_IRQHandler() //capture ppm in at 2MHz -{ - uint16_t capture ; - static uint16_t lastCapt ; - - capture = TC1->TC_CHANNEL[0].TC_RA ; - (void) TC1->TC_CHANNEL[0].TC_SR ; // Acknowledgethe interrupt - - uint16_t val = (capture - lastCapt) / 2; - - // G: We process g_ppmIns immediately here, to make servo movement as smooth as possible - // while under trainee control - if (val>4000 && val < 16000) // G: Prioritize reset pulse. (Needed when less than 8 incoming pulses) - ppmInState = 1; // triggered - else - { - if (ppmInState && ppmInState<=8) - { - if (val>800 && val<2200) // if valid pulse-width range - { - g_ppmIns[ppmInState++ - 1] = - (int16_t)(val - 1500)*(g_eeGeneral.PPM_Multiplier+10)/10; //+-500 != 512, but close enough. - } - else - ppmInState = 0; // not triggered - } - } - - lastCapt = capture; -} - -void start_ppm_capture() -{ - start_timer4() ; - start_timer3() ; -} - -void end_ppm_capture() -{ - TC1->TC_CHANNEL[0].TC_IDR = TC_IDR0_LDRAS ; - NVIC_DisableIRQ(TC3_IRQn) ; -} - -extern "C" void TC2_IRQHandler() -{ - register uint32_t dummy; - static uint32_t pre_scale ; // Used to get 10 Hz counter - - /* Clear status bit to acknowledge interrupt */ - dummy = TC0->TC_CHANNEL[2].TC_SR; - (void) dummy ; // Discard value - prevents compiler warning - - HAPTIC_HEARTBEAT(); - AUDIO_HEARTBEAT(); - - if ( ++pre_scale >= 2 ) { - Tenms |= 1 ; // 10 mS has passed - if ( Buzzer_count ) { - if ( --Buzzer_count == 0 ) - buzzer_off() ; - } - pre_scale = 0 ; - per10ms(); - } -} - -// Settings for mode register ADC_MR -// USEQ off - silicon problem, doesn't work -// TRANSFER = 1 -// TRACKTIM = 4 (5 clock periods) -// ANACH = 0 -// SETTLING = 1 (not used if ANACH = 0) -// STARTUP = 1 (8 clock periods) -// PRESCAL = 3.6 MHz clock (between 1 and 20MHz) -// FREERUN = 0 -// FWUP = 0 -// SLEEP = 0 -// LOWRES = 0 -// TRGSEL = 0 -// TRGEN = 0 (software trigger only) -inline void init_adc() -{ - register Adc *padc ; - register uint32_t timer ; - - timer = ( Master_frequency / (3600000*2) ) << 8 ; - // Enable peripheral clock ADC = bit 29 - PMC->PMC_PCER0 |= 0x20000000L ; // Enable peripheral clock to ADC - padc = ADC ; - padc->ADC_MR = 0x14110000 | timer ; // 0001 0100 0001 0001 xxxx xxxx 0000 0000 - padc->ADC_ACR = ADC_ACR_TSON ; // Turn on temp sensor -#if defined(REVA) - padc->ADC_CHER = 0x0000E23E ; // channels 1,2,3,4,5,9,13,14,15 -#else - padc->ADC_CHER = 0x0000E33E ; // channels 1,2,3,4,5,8,9,13,14,15 -#endif - padc->ADC_CGR = 0 ; // Gain = 1, all channels - padc->ADC_COR = 0 ; // Single ended, 0 offset, all channels -} - -// PWM used for PPM generation, and LED Backlight -// Output pin PB5 not used, PA17 used as PWMH3 peripheral C -// PWM peripheral ID = 31 (0x80000000) -// Ensure PB5 is three state/input, used on REVB for MENU KEY - -// Configure PWM3 as PPM drive, -// PWM0 is LED backlight PWM on PWMH0 -// This is PC18 peripheral B, Also enable PC22 peripheral B, this is PPM-JACK (PWML3) -// -// REVB board: -// PWML2, output as peripheral C on PA16, is for HAPTIC -// For testing, just drive it out with PWM -// PWML1 for PPM2 output as peripheral B on PC15 -// For testing, just drive it out with PWM -void init_pwm() -{ - register Pwm *pwmptr ; - register uint32_t timer ; - - PMC->PMC_PCER0 |= ( 1 << ID_PWM ) ; // Enable peripheral clock to PWM - - MATRIX->CCFG_SYSIO |= 0x00000020L ; // Disable TDO let PB5 work! - - /* Configure PIO */ -#if defined(REVA) - register Pio *pioptr = PIOB ; - pioptr->PIO_PER = 0x00000020L ; // Enable bit B5 - pioptr->PIO_ODR = 0x00000020L ; // set as input -#else - configure_pins( PIO_PA16, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_C | PIN_PORTA | PIN_NO_PULLUP ) ; -#endif - - configure_pins( PIO_PC18, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; - -#if !defined(REVA) - configure_pins( PIO_PC15, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; - configure_pins( PIO_PC22, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; -#endif - - // Configure clock - depends on MCK frequency - timer = Master_frequency / 2000000 ; - timer |= ( Master_frequency / ( 32* 10000 ) ) << 16 ; - timer &= 0x00FF00FF ; - - pwmptr = PWM ; - pwmptr->PWM_CLK = 0x05000000 | timer ; // MCK for DIVA, DIVA = 18 gives 0.5uS clock period @35MHz // MCK/32 / timer = 10000Hz for CLKB - - // PWM0 for LED backlight - pwmptr->PWM_CH_NUM[0].PWM_CMR = 0x0000000C ; // CLKB - pwmptr->PWM_CH_NUM[0].PWM_CPDR = 100 ; // Period - pwmptr->PWM_CH_NUM[0].PWM_CPDRUPD = 100 ; // Period - pwmptr->PWM_CH_NUM[0].PWM_CDTY = 40 ; // Duty - pwmptr->PWM_CH_NUM[0].PWM_CDTYUPD = 40 ; // Duty - pwmptr->PWM_ENA = PWM_ENA_CHID0 ; // Enable channel 0 - -#if !defined(REVA) - // PWM1 for PPM2 output 100Hz test - pwmptr->PWM_CH_NUM[1].PWM_CMR = 0x0000000C ; // CLKB - pwmptr->PWM_CH_NUM[1].PWM_CPDR = 100 ; // Period - pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = 100 ; // Period - pwmptr->PWM_CH_NUM[1].PWM_CDTY = 40 ; // Duty - pwmptr->PWM_CH_NUM[1].PWM_CDTYUPD = 40 ; // Duty - pwmptr->PWM_ENA = PWM_ENA_CHID1 ; // Enable channel 1 -#endif - -#if !defined(REVA) - // PWM2 for HAPTIC drive 100Hz test - pwmptr->PWM_CH_NUM[2].PWM_CMR = 0x0000000C ; // CLKB - pwmptr->PWM_CH_NUM[2].PWM_CPDR = 100 ; // Period - pwmptr->PWM_CH_NUM[2].PWM_CPDRUPD = 100 ; // Period - pwmptr->PWM_CH_NUM[2].PWM_CDTY = 40 ; // Duty - pwmptr->PWM_CH_NUM[2].PWM_CDTYUPD = 40 ; // Duty - pwmptr->PWM_OOV &= ~0x00040000 ; // Force low - pwmptr->PWM_OSS = 0x00040000 ; // Force low - // pwmptr->PWM_ENA = PWM_ENA_CHID2 ; // Enable channel 2 // TODO on REVA? -#endif -} - -// LCD i/o pins -// LCD_RES PC27 -// LCD_CS1 PC26 -// LCD_E PC12 -// LCD_RnW PC13 -// LCD_A0 PC15 -// LCD_D0 PC0 -// LCD_D1 PC7 -// LCD_D2 PC6 -// LCD_D3 PC5 -// LCD_D4 PC4 -// LCD_D5 PC3 -// LCD_D6 PC2 -// LCD_D7 PC1 - -#define LCD_DATA 0x000000FFL -#if defined(REVA) -#define LCD_A0 0x00008000L -#else -#define LCD_A0 0x00000080L -#endif -#define LCD_RnW 0x00002000L -#define LCD_E 0x00001000L -#define LCD_CS1 0x04000000L -#define LCD_RES 0x08000000L - -void configure_pins( uint32_t pins, uint16_t config ) -{ - register Pio *pioptr ; - - pioptr = PIOA + ( ( config & PIN_PORT_MASK ) >> 6) ; - if ( config & PIN_PULLUP ) - { - pioptr->PIO_PPDDR = pins ; - pioptr->PIO_PUER = pins ; - } - else - { - pioptr->PIO_PUDR = pins ; - } - - if ( config & PIN_PULLDOWN ) - { - pioptr->PIO_PUDR = pins ; - pioptr->PIO_PPDER = pins ; - } - else - { - pioptr->PIO_PPDDR = pins ; - } - - if ( config & PIN_HIGH ) - { - pioptr->PIO_SODR = pins ; - } - else - { - pioptr->PIO_CODR = pins ; - } - - if ( config & PIN_INPUT ) - { - pioptr->PIO_ODR = pins ; - } - else - { - pioptr->PIO_OER = pins ; - } - - if ( config & PIN_PERI_MASK_L ) - { - pioptr->PIO_ABCDSR[0] |= pins ; - } - else - { - pioptr->PIO_ABCDSR[0] &= ~pins ; - } - if ( config & PIN_PERI_MASK_H ) - { - pioptr->PIO_ABCDSR[1] |= pins ; - } - else - { - pioptr->PIO_ABCDSR[1] &= ~pins ; - } - - if ( config & PIN_ENABLE ) - { - pioptr->PIO_PER = pins ; - } - else - { - pioptr->PIO_PDR = pins ; - } -} - -void board_init() -{ - // register uint32_t goto_usb ; - register Pio *pioptr ; - // Debug variable - // uint32_t both_on ; - - MATRIX->CCFG_SYSIO |= 0x000000F0L ; // Disable syspins, enable B4,5,6,7 - - PMC->PMC_PCER0 = (1<PIO_PER = PIO_PA21 ; // Enable bit A21 (EXT3) - pioptr->PIO_OER = PIO_PA21 ; // Set bit A21 as output - pioptr->PIO_SODR = PIO_PA21 ; // Set bit A21 ON -#else - init_soft_power() ; -#endif - - // pioptr->PIO_PUER = 0x80000000 ; // Enable pullup on bit A31 (EXIT) - // pioptr->PIO_PER = 0x80000000 ; // Enable bit A31 - - pioptr = PIOC ; - pioptr->PIO_PER = PIO_PC25 ; // Enable bit C25 (USB-detect) - // pioptr->PIO_OER = 0x80000000L ; // Set bit C31 as output - // pioptr->PIO_SODR = 0x80000000L ; // Set bit C31 - -#if defined(REVA) - // Configure RF_power (PC17) and PPM-jack-in (PC19), neither need pullups - pioptr->PIO_PER = 0x000A0000L ; // Enable bit C19, C17 - pioptr->PIO_ODR = 0x000A0000L ; // Set bits C19 and C17 as input -#endif - - config_free_pins() ; - - // Next section configures the key inputs on the LCD data -#if defined(REVA) - pioptr->PIO_PER = 0x0000003DL ; // Enable bits 2,3,4,5, 0 - pioptr->PIO_OER = PIO_PC0 ; // Set bit 0 output - pioptr->PIO_ODR = 0x0000003CL ; // Set bits 2, 3, 4, 5 input - pioptr->PIO_PUER = 0x0000003CL ; // Set bits 2, 3, 4, 5 with pullups -#else - pioptr->PIO_PER = 0x0000003BL ; // Enable bits 1,3,4,5, 0 - pioptr->PIO_OER = PIO_PC0 ; // Set bit 0 output - pioptr->PIO_ODR = 0x0000003AL ; // Set bits 1, 3, 4, 5 input - pioptr->PIO_PUER = 0x0000003AL ; // Set bits 1, 3, 4, 5 with pullups -#endif - - pioptr = PIOB ; -#if defined(REVA) - pioptr->PIO_PUER = PIO_PB6 ; // Enable pullup on bit B6 (MENU) - pioptr->PIO_PER = PIO_PB6 ; // Enable bit B6 -#else - pioptr->PIO_PUER = PIO_PB5 ; // Enable pullup on bit B5 (MENU) - pioptr->PIO_PER = PIO_PB5 ; // Enable bit B5 -#endif - - setup_switches() ; - - // Enable PCK2 on PB3, This is for testing of Timer 2 working - // It will be used as serial data to the Bluetooth module - pioptr->PIO_ABCDSR[0] |= PIO_PB3 ; // Peripheral B - pioptr->PIO_ABCDSR[1] &= ~PIO_PB3 ; // Peripheral B - pioptr->PIO_PDR = PIO_PB3 ; // Assign to peripheral - PMC->PMC_SCER |= 0x0400 ; // PCK2 enabled - PMC->PMC_PCK[2] = 2 ; // PCK2 is PLLA - - DEBUG_UART_Configure( 9600, Master_frequency ) ; - UART2_Configure( 9600, Master_frequency ) ; // Testing - UART3_Configure( 9600, Master_frequency ) ; // TODO not needed, done after ... - - start_timer2() ; - start_timer0() ; - init_adc() ; - init_pwm() ; - - __enable_irq() ; - - startSound() ; - - codecsInit(); - - eeprom_init(); - - init_SDcard(); - -} -#endif - -// keys: -// KEY_EXIT PA31 (PC24) -// KEY_MENU PB6 (PB5) -// KEY_DOWN LCD5 PC3 (PC5) -// KEY_UP LCD6 PC2 (PC1) -// KEY_RIGHT LCD4 PC4 (PC4) -// KEY_LEFT LCD3 PC5 (PC3) -// Reqd. bit 6 LEFT, 5 RIGHT, 4 UP, 3 DOWN 2 EXIT 1 MENU -// LCD pins 5 DOWN, 4 RIGHT, 3 LEFT, 1 UP -uint32_t read_keys() -{ - register uint32_t x; - register uint32_t y; - - x = PIOC->PIO_PDSR; // 6 LEFT, 5 RIGHT, 4 DOWN, 3 UP () - x <<= 1; - - y = 0; - if (x & 0x00000020) - y |= 0x02 << KEY_PLUS; - if (x & 0x00000004) - y |= 0x02 << KEY_MENU; - if (x & 0x00000010) - y |= 0x02 << KEY_MINUS; - if (x & 0x00000040) - y |= 0x02 << KEY_PAGE; - if (x & 0x02000000) - y |= 0x02 << KEY_EXIT; - if (PIOB->PIO_PDSR & 0x000000020) - y |= 0x02 << KEY_ENTER; - - return y ; -} - -uint32_t read_trims() -{ - uint32_t trims; - uint32_t trima; - - trims = 0; - - trima = PIOA->PIO_PDSR; - -// TRIM_LH_DOWN PA7 (PA23) -#if defined(REVA) - if ( ( trima & 0x0080 ) == 0 ) -#else - if ((trima & 0x00800000) == 0) -#endif - { - trims |= 1; - } - -// TRIM_LV_DOWN PA27 (PA24) -#if defined(REVA) - if ( ( trima & 0x08000000 ) == 0 ) -#else - if ((trima & 0x01000000) == 0) -#endif - { - trims |= 4; - } - -// TRIM_RV_UP PA30 (PA1) -#if defined(REVA) - if ( ( trima & 0x40000000 ) == 0 ) -#else - if ((trima & 0x00000002) == 0) -#endif - { - trims |= 0x20; - } - -// TRIM_RH_DOWN PA29 (PA0) -#if defined(REVA) - if ( ( trima & 0x20000000 ) == 0 ) -#else - if ((trima & 0x00000001) == 0) -#endif - { - trims |= 0x40; - } - -// TRIM_LH_UP PB4 - if ((PIOB->PIO_PDSR & 0x10) == 0) { - trims |= 2; - } - - trima = PIOC->PIO_PDSR; -// TRIM_LV_UP PC28 - if ((trima & 0x10000000) == 0) { - trims |= 8; - } - -// TRIM_RV_DOWN PC10 - if ((trima & 0x00000400) == 0) { - trims |= 0x10; - } - -// TRIM_RH_UP PC9 - if ((trima & 0x00000200) == 0) { - trims |= 0x80; - } - - return trims; -} - -uint8_t keyDown() -{ - return ~read_keys() & 0x7E ; -} - -extern uint32_t keyState(EnumKeys enuk) -{ - register uint32_t c ; - - CPU_UINT xxx = 0; + register uint32_t xxx = 0; if (enuk < (int) DIM(keys)) return keys[enuk].state() ? 1 : 0; - c = PIOC->PIO_PDSR ; - - // printf("c=%x\n", c); fflush(stdout); - switch ((uint8_t) enuk) { case SW_SA0: - xxx = !(c & 0x80000000); + xxx = ~a & (1<<31); break; - case SW_SA2: - xxx = c & 0x80000000; + xxx = a & (1<<31); break; case SW_SB0: - xxx = !(c & 0x08000000) && !(c & 0x04000000); + xxx = !(a & ((1<<26) | (1<<27))); break; - case SW_SB1: - xxx = (c & 0x08000000) && !(c & 0x04000000); + xxx = (a & (1<<27)) && (~a & (1<<26)); break; - case SW_SB2: - xxx = !(c & 0x08000000) && (c & 0x04000000); + xxx = (~a & (1<<27)) && (a & (1<<26)); break; case SW_SC0: - xxx = !(c & 0x00800000) && !(c & 0x00400000); + xxx = !(a & ((1<<22) | (1<<23))); break; - case SW_SC1: - xxx = (c & 0x00800000) && !(c & 0x00400000); + xxx = (a & (1<<23)) && (~a & (1<<22)); break; - case SW_SC2: - xxx = !(c & 0x00800000) && (c & 0x00400000); + xxx = (~a & (1<<23)) && (a & (1<<22)); break; case SW_SD0: - xxx = !(c & 0x00200000) && !(c & 0x00100000); + xxx = !(a & ((1<<20) | (1<<21))); break; - case SW_SD1: - xxx = (c & 0x00200000) && !(c & 0x00100000); + xxx = (a & (1<<21)) && (~a & (1<<20)); break; - case SW_SD2: - xxx = !(c & 0x00200000) && (c & 0x00100000); + xxx = (~a & (1<<21)) && (a & (1<<20)); break; case SW_SE0: - xxx = !(c & 0x00080000) && !(c & 0x00040000); + xxx = !(a & ((1<<18) | (1<<19))); break; - case SW_SE1: - xxx = (c & 0x00080000) && !(c & 0x00040000); + xxx = (a & (1<<19)) && (~a & (1<<18)); break; - case SW_SE2: - xxx = !(c & 0x00080000) && (c & 0x00040000); + xxx = (~a & (1<<19)) && (a & (1<<18)); break; case SW_SF0: - xxx = !(c & 0x00020000) && !(c & 0x00010000); + xxx = !(a & ((1<<16) | (1<<17))); break; - case SW_SF1: - xxx = (c & 0x00020000) && !(c & 0x00010000); + xxx = (a & (1<<17)) && (~a & (1<<16)); break; - case SW_SF2: - xxx = !(c & 0x00020000) && (c & 0x00010000); + xxx = (~a & (1<<17)) && (a & (1<<16)); break; case SW_SG0: - xxx = !(c & 0x00008000) && !(c & 0x00004000); + xxx = !(a & ((1<<14) | (1<<15))); break; - case SW_SG1: - xxx = (c & 0x00008000) && !(c & 0x00004000); + xxx = (a & (1<<15)) && (~a & (1<<14)); break; - case SW_SG2: - xxx = !(c & 0x00008000) && (c & 0x00004000); + xxx = (~a & (1<<15)) && (a & (1<<14)); break; case SW_SH0: - xxx = !(c & 0x00002000); + xxx = ~a & (1<<13); break; - case SW_SH2: - xxx = c & 0x00002000; + xxx = a & (1<<13); break; default: @@ -911,243 +147,31 @@ extern uint32_t keyState(EnumKeys enuk) if (xxx) { return 1; } + return 0; } -uint16_t Analog_values[NUMBER_ANALOG] ; -uint8_t temperature = 0; // Raw temp reading -uint8_t maxTemperature = 0 ; // Raw temp reading - -// Read 8 (9 for REVB) ADC channels -// Documented bug, must do them 1 by 1 +// TODO change this function! void read_9_adc() { - register Adc *padc; - register uint32_t y; - register uint32_t x; - - padc = ADC; - y = padc->ADC_ISR; // Clear EOC flags - for (y = NUMBER_ANALOG+1; --y > 0;) { - padc->ADC_CR = 2; // Start conversion - x = 0; - while ((padc->ADC_ISR & 0x01000000) == 0) { - // wait for DRDY flag - if (++x > 1000000) { - break; // Software timeout - } - } - x = padc->ADC_LCDR; // Clear DRSY flag - } - // Next bit may be done using the PDC - Analog_values[0] = ADC->ADC_CDR1; - Analog_values[1] = ADC->ADC_CDR2; - Analog_values[2] = ADC->ADC_CDR3; - Analog_values[3] = ADC->ADC_CDR4; - Analog_values[4] = ADC->ADC_CDR5; - Analog_values[5] = ADC->ADC_CDR9; - Analog_values[6] = ADC->ADC_CDR13; - Analog_values[7] = ADC->ADC_CDR14; - -#if defined(REVA) - Analog_values[8] = ADC->ADC_CDR8 ; -#endif - - temperature = (((int32_t)temperature * 7) + ((((int32_t)ADC->ADC_CDR15 - 838) * 621) >> 11)) >> 3; // Filter it - if (get_tmr10ms() >= 100 && temperature > maxTemperature) { - maxTemperature = temperature; - } } -void readKeysAndTrims() +void start_ppm_capture() { - register uint32_t i; - -#if defined(ROTARY_ENCODERS) - keys[BTN_REa].input(!(PIOB->PIO_PDSR & 0x40), BTN_REa); -#endif - - uint8_t enuk = KEY_MENU; - uint8_t in = ~read_keys(); - for (i = 1; i < 7; i++) { - keys[enuk].input(in & (1 << i), (EnumKeys) enuk); - ++enuk; - } - - in = read_trims(); - - for (i = 1; i < 256; i <<= 1) { - keys[enuk].input(in & i, (EnumKeys) enuk); - ++enuk; - } -} - -#define RX_UART_BUFFER_SIZE 32 - -struct t_rxUartBuffer -{ - uint8_t fifo[RX_UART_BUFFER_SIZE] ; - uint8_t *outPtr ; -} ; - -struct t_rxUartBuffer TelemetryInBuffer[2] ; -uint32_t TelemetryActiveBuffer ; - -void startPdcUsartReceive() -{ - register Usart *pUsart = SECOND_USART; - - TelemetryInBuffer[0].outPtr = TelemetryInBuffer[0].fifo ; - TelemetryInBuffer[1].outPtr = TelemetryInBuffer[1].fifo ; -#ifndef SIMU - // TODO because of the 64bits cast ... - pUsart->US_RPR = (uint32_t)TelemetryInBuffer[0].fifo ; - pUsart->US_RNPR = (uint32_t)TelemetryInBuffer[1].fifo ; -#endif - pUsart->US_RCR = RX_UART_BUFFER_SIZE ; - pUsart->US_RNCR = RX_UART_BUFFER_SIZE ; - pUsart->US_PTCR = US_PTCR_RXTEN ; - TelemetryActiveBuffer = 0 ; -} - -void endPdcUsartReceive() -{ - register Usart *pUsart = SECOND_USART; - - pUsart->US_PTCR = US_PTCR_RXTDIS ; -} - -void rxPdcUsart( void (*pChProcess)(uint8_t x) ) -{ -#if !defined(SIMU) - register Usart *pUsart = SECOND_USART; - uint8_t *ptr ; - uint8_t *endPtr ; -// uint32_t bufIndex ; -// uint32_t i ; - uint32_t j ; - - //Find out where the DMA has got to - __disable_irq() ; - pUsart->US_PTCR = US_PTCR_RXTDIS ; // Freeze DMA - ptr = (uint8_t *)pUsart->US_RPR ; - j = pUsart->US_RNCR ; - pUsart->US_PTCR = US_PTCR_RXTEN ; // DMA active again - __enable_irq() ; - - endPtr = ptr - 1 ; - ptr = TelemetryInBuffer[TelemetryActiveBuffer].outPtr ; - if ( j == 0 ) // First buf is full - { - endPtr = &TelemetryInBuffer[TelemetryActiveBuffer].fifo[RX_UART_BUFFER_SIZE-1] ; // last byte - } - while ( ptr <= endPtr ) - { - (*pChProcess)(*ptr++) ; - } - TelemetryInBuffer[TelemetryActiveBuffer].outPtr = ptr ; - if ( j == 0 ) // First buf is full - { - TelemetryInBuffer[TelemetryActiveBuffer].outPtr = TelemetryInBuffer[TelemetryActiveBuffer].fifo ; - pUsart->US_RNPR = (uint32_t)TelemetryInBuffer[TelemetryActiveBuffer].fifo ; - pUsart->US_RNCR = RX_UART_BUFFER_SIZE ; - TelemetryActiveBuffer ^= 1 ; // Other buffer is active - rxPdcUsart( pChProcess ) ; // Get any chars from second buffer - } -#endif -} - -uint32_t txPdcUsart( uint8_t *buffer, uint32_t size ) -{ - register Usart *pUsart = SECOND_USART; - - if ( pUsart->US_TNCR == 0 ) - { -#ifndef SIMU - pUsart->US_TNPR = (uint32_t)buffer ; -#endif - pUsart->US_TNCR = size ; - pUsart->US_PTCR = US_PTCR_TXTEN ; - return 1 ; - } - return 0 ; -} - -uint32_t txPdcPending() -{ - register Usart *pUsart = SECOND_USART; - uint32_t x ; - - __disable_irq() ; - pUsart->US_PTCR = US_PTCR_TXTDIS ; // Freeze DMA - x = pUsart->US_TNCR ; // Total - x += pUsart->US_TCR ; // Still to send - pUsart->US_PTCR = US_PTCR_TXTEN ; // DMA active again - __enable_irq() ; - - return x ; -} - -void end_bt_tx_interrupt() -{ - Uart *pUart = BT_USART ; - pUart->UART_IDR = UART_IDR_TXBUFE ; - NVIC_DisableIRQ(UART1_IRQn) ; } void usbBootloader() { - // This might be replaced by a software reset - // Any interrupts that have been enabled must be disabled here - // BEFORE calling sam_boot() - endPdcUsartReceive() ; // Terminate any serial reception - end_bt_tx_interrupt() ; - end_ppm_capture() ; - end_spi() ; - end_sound() ; - - TC0->TC_CHANNEL[2].TC_IDR = TC_IDR0_CPCS ; - TC0->TC_CHANNEL[0].TC_CCR = TC_CCR0_CLKDIS ; - TC0->TC_CHANNEL[1].TC_CCR = TC_CCR0_CLKDIS ; - TC0->TC_CHANNEL[2].TC_CCR = TC_CCR0_CLKDIS ; - TC1->TC_CHANNEL[0].TC_CCR = TC_CCR0_CLKDIS ; - TC1->TC_CHANNEL[1].TC_CCR = TC_CCR0_CLKDIS ; - TC1->TC_CHANNEL[2].TC_CCR = TC_CCR0_CLKDIS ; - PWM->PWM_DIS = PWM_DIS_CHID0 | PWM_DIS_CHID1 | PWM_DIS_CHID2 | PWM_DIS_CHID3 ; // Disable all - NVIC_DisableIRQ(TC2_IRQn) ; - - disable_main_ppm() ; - // PWM->PWM_IDR1 = PWM_IDR1_CHID3 ; - // NVIC_DisableIRQ(PWM_IRQn) ; - disable_ssc() ; - - DEBUG_UART_Stop(); - UART3_Stop(); - - sam_boot() ; } -#if !defined(REVA) -uint16_t getCurrent() +void usbMassStorage() { - static uint16_t Current ; - static uint32_t Current_sum ; - static uint8_t Current_count ; +} - Current_sum += anaIn(NUMBER_ANALOG-1); - if (++Current_count >= 50) { - Current = Current_sum / 5 ; - Current_sum = 0 ; - Current_count = 0 ; - } - - uint32_t current_scale = 488 + g_eeGeneral.currentCalib ; - return (current_scale * Current) / 8192; +#if !defined(SIMU) +void board_init() +{ } #endif -uint8_t getTemperature() -{ - return temperature + g_eeGeneral.temperatureCalib; -} diff --git a/src/board_x9d.h b/src/board_x9d.h index 9e7196249..a1c510aa9 100644 --- a/src/board_x9d.h +++ b/src/board_x9d.h @@ -35,15 +35,22 @@ #define board_sky9x_h #include -#include "sky9x/board.h" -#include "sky9x/sound_driver.h" -#include "sky9x/haptic_driver.h" -#include "sky9x/debug.h" -#if defined(BLUETOOTH) -#include "sky9x/bluetooth.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx.h" + +#include "x9d/hal.h" +#include "x9d/aspi.h" + +#include "x9d/audio_driver.h" + +// TODO elsewhere +#if !defined(SIMU) +#define SD_IS_HC() (1) #endif + extern "C" { extern void init_SDcard(); extern void sdInit(); @@ -53,26 +60,9 @@ extern void sdInit(); void usbMassStorage(); -#define PIN_ENABLE 0x001 -#define PIN_PERIPHERAL 0x000 -#define PIN_INPUT 0x002 -#define PIN_OUTPUT 0x000 -#define PIN_PULLUP 0x004 -#define PIN_NO_PULLUP 0x000 -#define PIN_PULLDOWN 0x008 -#define PIN_NO_PULLDOWN 0x000 -#define PIN_PERI_MASK_L 0x010 -#define PIN_PERI_MASK_H 0x020 -#define PIN_PER_A 0x000 -#define PIN_PER_B 0x010 -#define PIN_PER_C 0x020 -#define PIN_PER_D 0x030 -#define PIN_PORT_MASK 0x0C0 -#define PIN_PORTA 0x000 -#define PIN_PORTB 0x040 -#define PIN_PORTC 0x080 -#define PIN_LOW 0x000 -#define PIN_HIGH 0x100 +void setVolume( register uint8_t volume ); +#define JACK_PPM_OUT() +#define JACK_PPM_IN() void configure_pins( uint32_t pins, uint16_t config ); uint16_t getCurrent(); @@ -81,32 +71,39 @@ extern uint8_t temperature ; // Raw temp reading extern uint8_t maxTemperature ; // Raw temp reading uint8_t getTemperature(); +extern int32_t Card_state; +extern volatile uint32_t Card_initialized; +#define SD_ST_DATA 9 +#define SD_ST_MOUNTED 10 + +#define SD_GET_SIZE_MB() (0) +#define SD_GET_BLOCKNR() (0) +#define SD_GET_SPEED() (0) + +void soft_power_off(); + #define strcpy_P strcpy #define strcat_P strcat -extern uint32_t read_keys(); -#define KEYS_PRESSED() (~read_keys()) +extern uint32_t readKeys(); +#define KEYS_PRESSED() (~readKeys()) #define DBLKEYS_PRESSED_RGT_LFT(i) ((in & (0x20 + 0x40)) == (0x20 + 0x40)) #define DBLKEYS_PRESSED_UP_DWN(i) ((in & (0x10 + 0x08)) == (0x10 + 0x08)) #define DBLKEYS_PRESSED_RGT_UP(i) ((in & (0x20 + 0x10)) == (0x20 + 0x10)) #define DBLKEYS_PRESSED_LFT_DWN(i) ((in & (0x40 + 0x08)) == (0x40 + 0x08)) -#if !defined(REVA) -extern uint16_t Current_analogue; -extern uint16_t Current_max; -extern uint32_t Current_accumulator; -extern uint32_t Current_used; extern uint16_t sessionTimer; + +#define BOOTLOADER_REQUEST() (0/*usbPlugged()*/) + +#define SLAVE_MODE() (0/*check_soft_power() == e_power_trainer*/) + +#if !defined(SIMU) +#define wdt_disable() +#define wdt_enable(x) +#define wdt_reset() #endif -#if defined(REVC) -#define BOOTLOADER_REQUEST() (usbPlugged()) -#else -#define BOOTLOADER_REQUEST() (check_soft_power() == e_power_usb) -#endif - -#define SLAVE_MODE() (check_soft_power() == e_power_trainer) -#define JACK_PPM_OUT() PIOC->PIO_PDR = PIO_PC22 -#define JACK_PPM_IN() PIOC->PIO_PER = PIO_PC22 +#define setBacklight(xx) #endif diff --git a/src/eeprom_arm.cpp b/src/eeprom_arm.cpp index a518453c9..3401bfe1c 100644 --- a/src/eeprom_arm.cpp +++ b/src/eeprom_arm.cpp @@ -1,7 +1,24 @@ /* - * Author - Erez Raviv + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer * - * Based on th9x -> http://code.google.com/p/th9x/ + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -19,7 +36,7 @@ #include "inttypes.h" #include "string.h" -volatile uint32_t Spi_complete ; +volatile uint32_t Spi_complete; // TODO in the driver ? uint8_t s_eeDirtyMsk; uint16_t s_eeDirtyTime10ms; @@ -40,10 +57,10 @@ uint16_t s_eeDirtyTime10ms; // These may not be needed, or might just be smaller +// TODO in the driver ? uint8_t Spi_tx_buf[24] ; uint8_t Spi_rx_buf[24] ; - struct t_file_entry File_system[MAX_MODELS+1] ; char ModelNames[MAX_MODELS][sizeof(g_model.name)] ; // Allow for general @@ -60,6 +77,8 @@ uint32_t Eeprom32_data_size ; #define EE_NOWAIT 1 +void init_spi(); + void eeDirty(uint8_t msk) { s_eeDirtyMsk |= msk; @@ -155,113 +174,6 @@ void eeSwapModels(uint8_t id1, uint8_t id2) eeWaitFinished(); } -uint32_t spi_PDC_action( register uint8_t *command, register uint8_t *tx, register uint8_t *rx, register uint32_t comlen, register uint32_t count ) -{ -#ifndef SIMU - - register Spi *spiptr ; - register uint32_t condition ; - static uint8_t discard_rx_command[4] ; - -// PMC->PMC_PCER0 |= 0x00200000L ; // Enable peripheral clock to SPI - - Spi_complete = 0 ; - if ( comlen > 4 ) - { - Spi_complete = 1 ; - return 0x4FFFF ; - } - condition = SPI_SR_TXEMPTY ; - spiptr = SPI ; - spiptr->SPI_CR = 1 ; // Enable - (void) spiptr->SPI_RDR ; // Dump any rx data - (void) spiptr->SPI_SR ; // Clear error flags - spiptr->SPI_RPR = (uint32_t)discard_rx_command ; - spiptr->SPI_RCR = comlen ; - if ( rx ) - { - spiptr->SPI_RNPR = (uint32_t)rx ; - spiptr->SPI_RNCR = count ; - condition = SPI_SR_RXBUFF ; - } - spiptr->SPI_TPR = (uint32_t)command ; - spiptr->SPI_TCR = comlen ; - if ( tx ) - { - spiptr->SPI_TNPR = (uint32_t)tx ; - } - else - { - spiptr->SPI_TNPR = (uint32_t)rx ; - } - spiptr->SPI_TNCR = count ; - - spiptr->SPI_PTCR = SPI_PTCR_RXTEN | SPI_PTCR_TXTEN ; // Start transfers - - // Wait for things to get started, avoids early interrupt - for ( count = 0 ; count < 1000 ; count += 1 ) - { - if ( ( spiptr->SPI_SR & SPI_SR_TXEMPTY ) == 0 ) - { - break ; - } - } - spiptr->SPI_IER = condition ; - -#endif - - return 0 ; -} - -uint32_t eeprom_write_one( uint8_t byte, uint8_t count ) -{ -#ifndef SIMU - register Spi *spiptr; - register uint32_t result; - - spiptr = SPI; - spiptr->SPI_CR = 1; // Enable - (void) spiptr->SPI_RDR; // Dump any rx data - - spiptr->SPI_TDR = byte; - - result = 0; - while ((spiptr->SPI_SR & SPI_SR_RDRF) == 0) { - // wait for received - if (++result > 10000) { - break; - } - } - if (count == 0) { - spiptr->SPI_CR = 2; // Disable - return spiptr->SPI_RDR; - } - (void) spiptr->SPI_RDR; // Dump the rx data - spiptr->SPI_TDR = 0; - result = 0; - while ((spiptr->SPI_SR & SPI_SR_RDRF) == 0) { - // wait for received - if (++result > 10000) { - break; - } - } - spiptr->SPI_CR = 2; // Disable - return spiptr->SPI_RDR ; -#else - return !Spi_complete; -#endif -} - -void eeprom_write_enable() -{ - eeprom_write_one( 6, 0 ) ; -} - -uint32_t eeprom_read_status() -{ - return eeprom_write_one( 5, 1 ) ; -} - // Read eeprom data starting at random address void read32_eeprom_data(uint32_t eeAddress, register uint8_t *buffer, uint32_t size, uint32_t immediate) { @@ -470,7 +382,7 @@ void eeLoadModel(uint8_t id) memset(&g_model, 0, sizeof(g_model)); -#ifdef SIMU +#if defined(SIMU) if (size > 0 && size != sizeof(g_model)) { printf("Model data read=%d bytes vs %d bytes\n", size, (int)sizeof(ModelData)); } @@ -567,125 +479,6 @@ void eeReadAll() stickMode = g_eeGeneral.stickMode; // TODO common! } -uint32_t spi_operation( register uint8_t *tx, register uint8_t *rx, register uint32_t count ) -{ - register Spi *spiptr; - register uint32_t result; - -// PMC->PMC_PCER0 |= 0x00200000L ; // Enable peripheral clock to SPI - - result = 0; - spiptr = SPI; - spiptr->SPI_CR = 1; // Enable - (void) spiptr->SPI_RDR; // Dump any rx data - while (count) { - result = 0; - while ((spiptr->SPI_SR & SPI_SR_TXEMPTY) == 0) { - // wait - if (++result > 10000) { - result = 0xFFFF; - break; - } - } - if (result > 10000) { - break; - } -// if ( count == 1 ) -// { -// spiptr->SPI_CR = SPI_CR_LASTXFER ; // LastXfer bit -// } - spiptr->SPI_TDR = *tx++; - result = 0; - while ((spiptr->SPI_SR & SPI_SR_RDRF) == 0) { - // wait for received - if (++result > 10000) { - result = 0x2FFFF; - break; - } - } - if (result > 10000) { - break; - } - *rx++ = spiptr->SPI_RDR; - count -= 1; - } - if (result <= 10000) { - result = 0; - } - spiptr->SPI_CR = 2; // Disable - -// Power save -// PMC->PMC_PCER0 &= ~0x00200000L ; // Disable peripheral clock to SPI - - return result ; -} - -// SPI i/f to EEPROM (4Mb) -// Peripheral ID 21 (0x00200000) -// Connections: -// SS PA11 (peripheral A) -// MISO PA12 (peripheral A) -// MOSI PA13 (peripheral A) -// SCK PA14 (peripheral A) -// Set clock to 3 MHz, AT25 device is rated to 70MHz, 18MHz would be better -void init_spi() -{ - register Spi *spiptr ; - register uint32_t timer ; - register uint8_t *p ; - uint8_t spi_buf[4] ; - - PMC->PMC_PCER0 |= 0x00200000L ; // Enable peripheral clock to SPI - /* Configure PIO */ - configure_pins( 0x00007800, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_A | PIN_PORTA | PIN_NO_PULLUP ) ; - - spiptr = SPI ; - timer = ( Master_frequency / 3000000 ) << 8 ; // Baud rate 3Mb/s - spiptr->SPI_MR = 0x14000011 ; // 0001 0100 0000 0000 0000 0000 0001 0001 Master - spiptr->SPI_CSR[0] = 0x01180009 | timer ; // 0000 0001 0001 1000 xxxx xxxx 0000 1001 - NVIC_EnableIRQ(SPI_IRQn) ; - - p = spi_buf ; - -// *p = 0x39 ; // Unprotect sector command -// *(p+1) = 0 ; -// *(p+2) = 0 ; -// *(p+3) = 0 ; // 3 bytes address - -// spi_operation( p, spi_buf, 4 ) ; - - eeprom_write_enable() ; - - *p = 1 ; // Write status register command - *(p+1) = 0 ; - spi_operation( p, spi_buf, 2 ) ; -} - -#ifndef SIMU -extern "C" void SPI_IRQHandler() -{ - register Spi *spiptr ; - - spiptr = SPI ; - SPI->SPI_IDR = 0x07FF ; // All interrupts off - spiptr->SPI_CR = 2 ; // Disable - (void) spiptr->SPI_RDR ; // Dump any rx data - (void) spiptr->SPI_SR ; // Clear error flags - spiptr->SPI_PTCR = SPI_PTCR_RXTDIS | SPI_PTCR_TXTDIS ; // Stop tramsfers - Spi_complete = 1 ; // Indicate completion - -// Power save -// PMC->PMC_PCER0 &= ~0x00200000L ; // Disable peripheral clock to SPI -} -#endif - -void end_spi() -{ - SPI->SPI_CR = 2 ; // Disable - SPI->SPI_IDR = 0x07FF ; // All interrupts off - NVIC_DisableIRQ(SPI_IRQn) ; -} - void eeWaitFinished() { while (Eeprom32_process_state != E32_IDLE) { @@ -901,27 +694,12 @@ void ee32_read_model_names() void eeprom_init() { #ifndef SIMU - init_spi() ; + init_spi(); #endif fill_file_index() ; Eeprom32_process_state = E32_IDLE ; } -uint32_t unprotect_eeprom() -{ - register uint8_t *p; - - eeprom_write_enable(); - - p = Spi_tx_buf; - *p = 0x39; // Unprotect sector command - *(p + 1) = 0; - *(p + 2) = 0; - *(p + 3) = 0; // 3 bytes address - - return spi_operation( p, Spi_rx_buf, 4 ) ; -} - #if defined(SDCARD) const pm_char * eeBackupModel(uint8_t i_fileSrc) { diff --git a/src/eeprom_arm.h b/src/eeprom_arm.h index 06a203170..e871b7c52 100644 --- a/src/eeprom_arm.h +++ b/src/eeprom_arm.h @@ -83,7 +83,10 @@ extern ModelData g_model; extern uint8_t Spi_tx_buf[] ; extern uint8_t Spi_rx_buf[] ; +void eeprom_write_enable(); +uint32_t eeprom_read_status(); void read32_eeprom_data(uint32_t eeAddress, register uint8_t *buffer, uint32_t size, uint32_t immediate=0); +uint32_t spi_PDC_action( register uint8_t *command, register uint8_t *tx, register uint8_t *rx, register uint32_t comlen, register uint32_t count ); #if defined(SDCARD) const pm_char * eeBackupModel(uint8_t i_fileSrc); diff --git a/src/frsky.cpp b/src/frsky.cpp index 4a363a2fe..91daee8a2 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -577,7 +577,9 @@ ISR(USART0_RX_vect) #if defined(CPUARM) void frskyTransmitBuffer( uint32_t size ) { +#if defined(PCBSKY9X) txPdcUsart( frskyTxBuffer, size ) ; +#endif } #else void frskyTransmitBuffer() @@ -607,8 +609,10 @@ void frskyPushValue(uint8_t *&ptr, uint8_t value) inline void FRSKY10mspoll(void) { +#if defined(PCBSKY9X) if (txPdcPending()) return; // we only have one buffer. If it's in use, then we can't send yet. +#endif uint8_t *ptr = &frskyTxBuffer[0]; @@ -702,7 +706,7 @@ inline void FRSKY10mspoll(void) NOINLINE void check_frsky() { -#if defined(CPUARM) +#if defined(PCBSKY9X) rxPdcUsart(processSerialData); // Receive serial data here #endif @@ -869,7 +873,9 @@ void FRSKY_Init(void) // clear frsky variables resetTelemetry(); -#if defined(CPUARM) +#if defined(PCBX9D) + // TODO +#elif defined(PCBSKY9X) startPdcUsartReceive() ; #elif !defined(SIMU) diff --git a/src/lcd.h b/src/lcd.h index 7e9fb4bdc..be62c97da 100644 --- a/src/lcd.h +++ b/src/lcd.h @@ -34,7 +34,13 @@ #ifndef lcd_h #define lcd_h -#if defined(LCD212) +#if defined(LCD260) +#define DISPLAY_W 260 +#define DISPLAY_H 75 +#define xcoord_t uint16_t +#define CENTER "\015" +#define CENTER_OFS (7*FW-FW/2) +#elif defined(LCD212) #define DISPLAY_W 212 #define DISPLAY_H 64 #define xcoord_t uint16_t diff --git a/src/main_views.cpp b/src/main_views.cpp index 6781cbbbd..bb101bd33 100644 --- a/src/main_views.cpp +++ b/src/main_views.cpp @@ -219,9 +219,11 @@ void displayVoltage() if (g_vbat100mV > g_eeGeneral.vBatWarn && g_eeGeneral.temperatureWarn && getTemperature() >= g_eeGeneral.temperatureWarn) { putsTelemetryValue(6*FW-1, 3*FH, getTemperature(), UNIT_DEGREES, BLINK|INVERS|DBLSIZE); } +#if defined(PCBSKY9X) else if (g_vbat100mV > g_eeGeneral.vBatWarn && g_eeGeneral.mAhWarn && (g_eeGeneral.mAhUsed + Current_used * (488 + g_eeGeneral.currentCalib)/8192/36) / 500 >= g_eeGeneral.mAhWarn) { putsTelemetryValue(7*FW-1, 3*FH, (g_eeGeneral.mAhUsed + Current_used*(488 + g_eeGeneral.currentCalib)/8192/36)/10, UNIT_MAH, BLINK|INVERS|DBLSIZE); } +#endif else { LcdFlags att = (g_vbat100mV <= g_eeGeneral.vBatWarn ? BLINK|INVERS : 0) | MIDSIZE; putsVBat(VBATT_X-1, VBATT_Y, att|NO_UNIT); diff --git a/src/open9x.cpp b/src/open9x.cpp index 6f5d3603b..e59f3090d 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -243,7 +243,7 @@ void per10ms() /* Update global Date/Time every 100 per10ms cycles */ if (++g_ms100 == 100) { g_rtcTime++; // inc global unix timestamp one second -#if defined(CPUARM) +#if defined(PCBSKY9X) if (g_rtcTime < 60 || rtc_count<5) { rtc_init(); rtc_count++; @@ -1496,15 +1496,15 @@ uint8_t checkTrim(uint8_t event) #endif } -#if defined(CPUARM) && !defined(REVA) +#if defined(PCBSKY9X) && !defined(REVA) uint16_t Current_analogue; uint16_t Current_max; uint32_t Current_accumulator; uint32_t Current_used; +#endif + +#if defined(CPUARM) && !defined(REVA) uint16_t sessionTimer; -#define NUMBER_ANALOG 9 -#else -#define NUMBER_ANALOG 8 #endif #if !defined(SIMU) @@ -1535,13 +1535,15 @@ uint16_t anaIn(uint8_t chan) // ana-in: 3 1 2 0 4 5 6 7 //static pm_char crossAna[] PROGMEM ={4,2,3,1,5,6,7,0}; // wenn schon Tabelle, dann muss sich auch lohnen // Google Translate (German): // if table already, then it must also be worthwhile -#if defined(CPUARM) - static const uint8_t crossAna[]={1,5,7,0,4,6,2,3,8}; -#if !defined(REVA) + +#if defined(PCBSKY9X) && !defined(REVA) if (chan == 8) { return Current_analogue ; } #endif + +#if defined(CPUARM) + static const uint8_t crossAna[]={1,5,7,0,4,6,2,3}; #else static const pm_char crossAna[] PROGMEM ={3,1,2,0,4,5,6,7}; #endif @@ -1558,6 +1560,7 @@ void getADC() uint16_t temp[NUMBER_ANALOG] = { 0 }; for( y = 0; y < 4; y += 1 ) { + // TODO change this function! read_9_adc(); for( x = 0; x < NUMBER_ANALOG; x += 1 ) { @@ -1956,7 +1959,8 @@ void evalFunctions() { MASK_FUNC_TYPE newActiveFunctions = 0; -#if defined(ROTARY_ENCODERS) && defined(GVARS) +#if defined(ROTARY_ENCODERS) && defined(GVARS) && !defined(PCBX9D) + // TODO modify the PCBX9D ifdef static rotenc_t rePreviousValues[ROTARY_ENCODERS]; #endif @@ -2131,7 +2135,8 @@ void evalFunctions() if (FSW_PARAM(sd) >= MIXSRC_TrimRud-1 && FSW_PARAM(sd) <= MIXSRC_TrimAil-1) { trimGvar[FSW_PARAM(sd)-MIXSRC_TrimRud+1] = sd->func-FUNC_ADJUST_GV1; } -#if defined(ROTARY_ENCODERS) +#if defined(ROTARY_ENCODERS) && !defined(PCBX9D) + // TODO modify these ifdef else if (FSW_PARAM(sd) >= MIXSRC_REa-1 && FSW_PARAM(sd) < MIXSRC_TrimRud-1) { int8_t scroll = rePreviousValues[FSW_PARAM(sd)-MIXSRC_REa+1] - (g_rotenc[FSW_PARAM(sd)-MIXSRC_REa+1] / ROTARY_ENCODER_GRANULARITY); if (scroll) { @@ -2180,7 +2185,8 @@ void evalFunctions() activeFunctions = newActiveFunctions; -#if defined(ROTARY_ENCODERS) && defined(GVARS) +#if defined(ROTARY_ENCODERS) && defined(GVARS) && !defined(PCBX9D) + // TODO review #ifdef PCBX9D for (uint8_t i=0; i> 5 ; if (Current_analogue > Current_max) Current_max = Current_analogue ; @@ -2537,13 +2543,13 @@ FORCEINLINE void doMixerCalculations() static uint16_t fp_act[MAX_PHASES] = {0}; static uint16_t delta = 0; static ACTIVE_PHASES_TYPE s_fade_flight_phases = 0; - static uint8_t s_last_phase = 255; + static uint8_t s_last_phase = 255; // TODO reinit everything here when the model changes, no??? uint8_t phase = getFlightPhase(); int32_t weight = 0; if (s_last_phase != phase) { - // PLAY_PHASE_OFF(s_last_phase); - // PLAY_PHASE_ON(phase); + if (s_last_phase != 255) PLAY_PHASE_OFF(s_last_phase); + PLAY_PHASE_ON(phase); if (s_last_phase == 255) { fp_act[phase] = MAX_ACT; @@ -2849,7 +2855,9 @@ void perMain() #if defined(CPUARM) if (!Tenms) return; Tenms = 0 ; +#endif +#if defined(PCBSKY9X) Current_accumulator += Current_analogue ; static uint32_t OneSecTimer; if (++OneSecTimer >= 100) { @@ -2920,7 +2928,7 @@ void perMain() if (counter-- == 0) { counter = 10; #if defined(PCBX9D) - int32_t instant_vbat = anaIn(8); + int32_t instant_vbat = anaIn(7); instant_vbat = ( instant_vbat + instant_vbat*(g_eeGeneral.vBatCalib)/128 ) * 4191 ; instant_vbat /= 55296 ; #elif defined(PCBSKY9X) @@ -2956,6 +2964,8 @@ void perMain() else if (g_eeGeneral.temperatureWarn && getTemperature() >= g_eeGeneral.temperatureWarn) { AUDIO_TX_TEMP_HIGH(); } +#endif +#if defined(PCBSKY9X) else if (g_eeGeneral.mAhWarn && (g_eeGeneral.mAhUsed + Current_used * (488 + g_eeGeneral.currentCalib)/8192/36) / 500 >= g_eeGeneral.mAhWarn) { AUDIO_TX_MAH_HIGH(); } @@ -3348,7 +3358,7 @@ inline void open9xInit(OPEN9X_INIT_ARGS) #if defined(CPUARM) setVolume(g_eeGeneral.speakerVolume); - PWM->PWM_CH_NUM[0].PWM_CDTYUPD = g_eeGeneral.backlightBright; + setBacklight(g_eeGeneral.backlightBright); #elif defined(VOICE) SET_VOLUME(g_eeGeneral.speakerVolume+7); #endif @@ -3473,11 +3483,15 @@ void menusTask(void * pdata) saveTimers(); +#if defined(PCBSKY9X) uint32_t mAhUsed = g_eeGeneral.mAhUsed + Current_used * (488 + g_eeGeneral.currentCalib) / 8192 / 36; if (g_eeGeneral.mAhUsed != mAhUsed) g_eeGeneral.mAhUsed = mAhUsed; +#endif + if (sessionTimer > 0) g_eeGeneral.globalTimer += sessionTimer; + g_eeGeneral.unexpectedShutdown = 0; eeDirty(EE_GENERAL); diff --git a/src/open9x.h b/src/open9x.h index 3b929f008..a85caaea7 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -178,9 +178,6 @@ typedef const int8_t pm_int8_t; #define pgm_read_adr(x) *(x) #define cli() #define sei() -#define wdt_disable() -#define wdt_enable(x) WDT->WDT_MR = 0x3FFF217F; -#define wdt_reset() WDT->WDT_CR = 0xA5000001 extern void board_init(); #else #include @@ -768,17 +765,19 @@ enum PerOutMode { e_perout_mode_noinput = e_perout_mode_notrainer+e_perout_mode_notrims+e_perout_mode_nosticks }; -#ifdef SIMU +#if defined(SIMU) #ifndef FORCEINLINE #define FORCEINLINE #endif #ifndef NOINLINE #define NOINLINE #endif +#define CONVERT_PTR(x) ((uint32_t)(uint64_t)(x)) #else #define FORCEINLINE inline __attribute__ ((always_inline)) #define NOINLINE __attribute__ ((noinline)) #define SIMU_SLEEP(x) +#define CONVERT_PTR(x) ((uint32_t)(x)) #endif // Fiddle to force compiler to use a pointer @@ -877,7 +876,9 @@ extern uint8_t s_traceWr; extern int8_t s_traceCnt; #endif -#if defined(CPUARM) +#if defined(PCBX9D) +static inline uint16_t getTmr2MHz() { return 0; } +#elif defined(PCBSKY9X) static inline uint16_t getTmr2MHz() { return TC1->TC_CHANNEL[0].TC_CV; } #else uint16_t getTmr16KHz(); @@ -920,16 +921,23 @@ void getADC(); extern void backlightOn(); -#if defined (CPUARM) +#if defined(PCBSKY9X) && !defined(REVA) +#define NUMBER_ANALOG 9 +#else +#define NUMBER_ANALOG 8 +#endif + +#if defined(PCBSKY9X) +// TODO remove +void read_9_adc(void); +#endif + +#if defined(PCBX9D) +#define __BACKLIGHT_ON +#define __BACKLIGHT_OFF +#elif defined (PCBSKY9X) #define __BACKLIGHT_ON (PWM->PWM_CH_NUM[0].PWM_CDTY = g_eeGeneral.backlightBright) #define __BACKLIGHT_OFF (PWM->PWM_CH_NUM[0].PWM_CDTY = 100) -#if defined(REVA) -#define NUMBER_ANALOG 8 -#else -#define NUMBER_ANALOG 9 -#endif -extern uint16_t Analog_values[NUMBER_ANALOG] ; -void read_9_adc(void ) ; #elif defined (PCBGRUVIN9X) #define SPEAKER_ON TCCR0A |= (1 << COM0A0) #define SPEAKER_OFF TCCR0A &= ~(1 << COM0A0) @@ -1348,11 +1356,10 @@ void putsTelemetryValue(uint8_t x, uint8_t y, int16_t val, uint8_t unit, uint8_t #if defined(CPUARM) uint8_t zlen(const char *str, uint8_t size); char * strcat_zchar(char * dest, char * name, uint8_t size, const char *defaultName, uint8_t defaultNameSize, uint8_t defaultIdx); -#define strcat_modelname(dest, idx) strcat_zchar(dest, ModelNames[idx], sizeof(g_model.name), STR_MODEL, PSIZE(TR_MODEL), idx+1) -#define strcat_phasename_default(dest, idx) strcat_zchar(dest, NULL, 0, STR_FP, PSIZE(TR_FP), idx+1) -#define strcat_phasename_nodefault(dest, idx) strcat_zchar(dest, g_model.phaseData[idx].name, sizeof(PhaseData), NULL, 0, 0) -#define strcat_mixername_default(dest, idx) strcat_zchar(dest, NULL, 0, STR_MIX, PSIZE(TR_MIX), idx+1) -#define strcat_mixername_nodefault(dest, idx) strcat_zchar(dest, g_model.mixData[idx].name, sizeof(MixData), NULL, 0, 0) +#define strcat_modelname(dest, idx) strcat_zchar(dest, ModelNames[idx], LEN_MODEL_NAME, STR_MODEL, PSIZE(TR_MODEL), idx+1) +#define strcat_phasename_default(dest, idx) strcat_zchar(dest, NULL, 0, STR_FP, PSIZE(TR_FP), idx) +#define strcat_phasename_nodefault(dest, idx) strcat_zchar(dest, g_model.phaseData[idx].name, LEN_FP_NAME, NULL, 0, 0) +#define strcat_mixername_nodefault(dest, idx) strcat_zchar(dest, g_model.mixData[idx].name, LEN_EXPOMIX_NAME, NULL, 0, 0) #define ZLEN(s) zlen(s, sizeof(s)) #endif diff --git a/src/pulses_arm.cpp b/src/pulses_arm.cpp index 5f2b56826..cd1761366 100644 --- a/src/pulses_arm.cpp +++ b/src/pulses_arm.cpp @@ -60,87 +60,17 @@ void setupPulsesPPM(); void setupPulsesDsm2(uint8_t chns); void setupPulsesPXX(); -static void init_main_ppm( uint32_t period, uint32_t out_enable ) -{ - register Pio *pioptr ; - register Pwm *pwmptr ; - - setupPulsesPPM() ; - - if ( out_enable ) - { - pioptr = PIOA ; - pioptr->PIO_ABCDSR[0] &= ~PIO_PA17 ; // Peripheral C - pioptr->PIO_ABCDSR[1] |= PIO_PA17 ; // Peripheral C - pioptr->PIO_PDR = PIO_PA17 ; // Disable bit A17 Assign to peripheral - } - - pwmptr = PWM ; - // PWM3 for PPM output - pwmptr->PWM_CH_NUM[3].PWM_CMR = 0x0000000B ; // CLKA - if (g_model.pulsePol) - pwmptr->PWM_CH_NUM[3].PWM_CMR |= 0x00000200 ; // CPOL - pwmptr->PWM_CH_NUM[3].PWM_CPDR = period ; // Period in half uS - pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = period ; // Period in half uS - pwmptr->PWM_CH_NUM[3].PWM_CDTY = g_model.ppmDelay*100+600; // Duty in half uS - pwmptr->PWM_CH_NUM[3].PWM_CDTYUPD = g_model.ppmDelay*100+600; // Duty in half uS - pwmptr->PWM_ENA = PWM_ENA_CHID3 ; // Enable channel 3 - - NVIC_EnableIRQ(PWM_IRQn) ; - pwmptr->PWM_IER1 = PWM_IER1_CHID3 ; -} - -void disable_main_ppm() -{ - register Pio *pioptr ; - - pioptr = PIOA ; - pioptr->PIO_PER = PIO_PA17 ; // Assign A17 to PIO - - PWM->PWM_IDR1 = PWM_IDR1_CHID3 ; - NVIC_DisableIRQ(PWM_IRQn) ; -} - -// Initialise the SSC to allow PXX output. -// TD is on PA17, peripheral A -void init_ssc() -{ - register Ssc *sscptr ; - - PMC->PMC_PCER0 |= 0x00400000L ; // Enable peripheral clock to SSC - - configure_pins( PIO_PA17, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_A | PIN_PORTA | PIN_NO_PULLUP ) ; - - sscptr = SSC ; - sscptr->SSC_CMR = Master_frequency / (125000*2) ; // 8uS per bit - sscptr->SSC_TCMR = 0 ; // 0000 0000 0000 0000 0000 0000 0000 0000 - sscptr->SSC_TFMR = 0x00000027 ; // 0000 0000 0000 0000 0000 0000 1010 0111 (8 bit data, lsb) - sscptr->SSC_CR = SSC_CR_TXEN ; -} - -void disable_ssc() -{ - register Pio *pioptr ; - register Ssc *sscptr ; - - // Revert back to pwm output - pioptr = PIOA ; - pioptr->PIO_PER = PIO_PA17 ; // Assign A17 to PIO - - sscptr = SSC ; - sscptr->SSC_CR = SSC_CR_TXDIS ; -} - void startPulses() { - init_main_ppm( 3000, 1 ) ; // Default for now, initial period 1.5 mS, output on + init_main_ppm(3000, 1) ; // Default for now, initial period 1.5 mS, output on } void setupPulsesPPM() // Don't enable interrupts through here { - register Pwm *pwmptr; +#if !defined(PCBX9D) + register Pwm *pwmptr = PWM; +#endif - pwmptr = PWM; // Now set up pulses int16_t PPM_range = g_model.extendedLimits ? 640 * 2 : 512 * 2; //range of 0.7..1.7msec @@ -152,11 +82,13 @@ void setupPulsesPPM() // Don't enable interrupts through here ptr = Pulses; uint32_t p = 8 + g_model.ppmNCH * 2; //Channels *2 +#if !defined(PCBX9D) pwmptr->PWM_CH_NUM[3].PWM_CDTYUPD = (g_model.ppmDelay * 50 + 300) * 2; //Stoplen *2 if (g_model.pulsePol) pwmptr->PWM_CH_NUM[3].PWM_CMR |= 0x00000200 ; // CPOL else pwmptr->PWM_CH_NUM[3].PWM_CMR &= ~0x00000200 ; // CPOL +#endif uint32_t rest = 22500u * 2; //Minimum Framelen=22.5 ms rest += (int32_t(g_model.ppmFrameLength)) * 1000; @@ -405,6 +337,7 @@ void setupPulsesDsm2(uint8_t chns) } } +#if !defined(SIMU) && !defined(PCBX9D) extern "C" void PWM_IRQHandler(void) { register Pwm *pwmptr; @@ -418,24 +351,21 @@ extern "C" void PWM_IRQHandler(void) case PROTO_PXX: // Alternate periods of 15.5mS and 2.5 mS period = pwmptr->PWM_CH_NUM[3].PWM_CPDR; - if (period == 5000) // 2.5 mS - { + if (period == 5000) { // 2.5 mS period = 15500 * 2; } else { period = 5000; } pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = period; // Period in half uS - if (period != 5000) // 2.5 mS - { + if (period != 5000) { // 2.5 mS setupPulses(); } else { + // Kick off serial output here sscptr = SSC; -#ifndef SIMU sscptr->SSC_TPR = (uint32_t) Bit_pulses; -#endif sscptr->SSC_TCR = Serial_byte_count; sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers } @@ -459,9 +389,7 @@ extern "C" void PWM_IRQHandler(void) else { // Kick off serial output here sscptr = SSC; -#ifndef SIMU sscptr->SSC_TPR = (uint32_t) Bit_pulses; -#endif sscptr->SSC_TCR = Serial_byte_count; sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers } @@ -478,6 +406,7 @@ extern "C" void PWM_IRQHandler(void) } } } +#endif void setupPulses() { diff --git a/src/pulses_arm.h b/src/pulses_arm.h index 81fa5d298..3abd735a1 100644 --- a/src/pulses_arm.h +++ b/src/pulses_arm.h @@ -42,7 +42,10 @@ inline bool pulsesStarted() { return s_current_protocol != 255; } inline void pausePulses() { s_pulses_paused = true; } inline void resumePulses() { s_pulses_paused = false; } +void init_main_ppm(uint32_t period, uint32_t out_enable); void disable_main_ppm(); + +void init_ssc(); void disable_ssc(); #endif diff --git a/src/simpgmspace.cpp b/src/simpgmspace.cpp index 2551e91cb..33a46d850 100644 --- a/src/simpgmspace.cpp +++ b/src/simpgmspace.cpp @@ -43,13 +43,19 @@ uint16_t dummyport16; const char *eepromFile = NULL; FILE *fp = NULL; -#if defined(CPUARM) +#if defined(PCBX9D) +GPIO_TypeDef gpiob; +GPIO_TypeDef gpioc; +#elif defined(PCBSKY9X) Pio Pioa, Piob, Pioc; Pwm pwm; Twi Twio; Usart Usart0; Dacc dacc; Adc Adc0; +#endif + +#if defined(CPUARM) uint32_t eeprom_pointer; char* eeprom_buffer_data; volatile int32_t eeprom_buffer_size; @@ -82,93 +88,94 @@ sem_t *eeprom_write_sem; break; #endif + void setSwitch(int8_t swtch) { switch (swtch) { #if defined(PCBX9D) case DSW(SW_SA0): - PIOC->PIO_PDSR &= ~(1<<31); + GPIOB->IDR &= ~(1<<31); break; case DSW(SW_SA2): - PIOC->PIO_PDSR |= (1<<31); + GPIOB->IDR |= (1<<31); break; case DSW(SW_SB0): - PIOC->PIO_PDSR &= ~(1<<26); - PIOC->PIO_PDSR &= ~(1<<27); + GPIOB->IDR &= ~(1<<26); + GPIOB->IDR &= ~(1<<27); break; case DSW(SW_SB1): - PIOC->PIO_PDSR |= (1<<27); - PIOC->PIO_PDSR &= ~(1<<26); + GPIOB->IDR |= (1<<27); + GPIOB->IDR &= ~(1<<26); break; case DSW(SW_SB2): - PIOC->PIO_PDSR |= (1<<26); - PIOC->PIO_PDSR &= ~(1<<27); + GPIOB->IDR |= (1<<26); + GPIOB->IDR &= ~(1<<27); break; case DSW(SW_SC0): - PIOC->PIO_PDSR &= ~(1<<22); - PIOC->PIO_PDSR &= ~(1<<23); + GPIOB->IDR &= ~(1<<22); + GPIOB->IDR &= ~(1<<23); break; case DSW(SW_SC1): - PIOC->PIO_PDSR |= (1<<23); - PIOC->PIO_PDSR &= ~(1<<22); + GPIOB->IDR |= (1<<23); + GPIOB->IDR &= ~(1<<22); break; case DSW(SW_SC2): - PIOC->PIO_PDSR |= (1<<22); - PIOC->PIO_PDSR &= ~(1<<23); + GPIOB->IDR |= (1<<22); + GPIOB->IDR &= ~(1<<23); break; case DSW(SW_SD0): - PIOC->PIO_PDSR &= ~(1<<20); - PIOC->PIO_PDSR &= ~(1<<21); + GPIOB->IDR &= ~(1<<20); + GPIOB->IDR &= ~(1<<21); break; case DSW(SW_SD1): - PIOC->PIO_PDSR |= (1<<21); - PIOC->PIO_PDSR &= ~(1<<20); + GPIOB->IDR |= (1<<21); + GPIOB->IDR &= ~(1<<20); break; case DSW(SW_SD2): - PIOC->PIO_PDSR |= (1<<20); - PIOC->PIO_PDSR &= ~(1<<21); + GPIOB->IDR |= (1<<20); + GPIOB->IDR &= ~(1<<21); break; case DSW(SW_SE0): - PIOC->PIO_PDSR &= ~(1<<18); - PIOC->PIO_PDSR &= ~(1<<19); + GPIOB->IDR &= ~(1<<18); + GPIOB->IDR &= ~(1<<19); break; case DSW(SW_SE1): - PIOC->PIO_PDSR |= (1<<19); - PIOC->PIO_PDSR &= ~(1<<18); + GPIOB->IDR |= (1<<19); + GPIOB->IDR &= ~(1<<18); break; case DSW(SW_SE2): - PIOC->PIO_PDSR |= (1<<18); - PIOC->PIO_PDSR &= ~(1<<19); + GPIOB->IDR |= (1<<18); + GPIOB->IDR &= ~(1<<19); break; case DSW(SW_SF0): - PIOC->PIO_PDSR &= ~(1<<16); - PIOC->PIO_PDSR &= ~(1<<17); + GPIOB->IDR &= ~(1<<16); + GPIOB->IDR &= ~(1<<17); break; case DSW(SW_SF1): - PIOC->PIO_PDSR |= (1<<17); - PIOC->PIO_PDSR &= ~(1<<16); + GPIOB->IDR |= (1<<17); + GPIOB->IDR &= ~(1<<16); break; case DSW(SW_SF2): - PIOC->PIO_PDSR |= (1<<16); - PIOC->PIO_PDSR &= ~(1<<17); + GPIOB->IDR |= (1<<16); + GPIOB->IDR &= ~(1<<17); break; case DSW(SW_SG0): - PIOC->PIO_PDSR &= ~(1<<14); - PIOC->PIO_PDSR &= ~(1<<15); + GPIOB->IDR &= ~(1<<14); + GPIOB->IDR &= ~(1<<15); break; case DSW(SW_SG1): - PIOC->PIO_PDSR |= (1<<15); - PIOC->PIO_PDSR &= ~(1<<14); + GPIOB->IDR |= (1<<15); + GPIOB->IDR &= ~(1<<14); break; case DSW(SW_SG2): - PIOC->PIO_PDSR |= (1<<14); - PIOC->PIO_PDSR &= ~(1<<15); + GPIOB->IDR |= (1<<14); + GPIOB->IDR &= ~(1<<15); break; case DSW(SW_SH0): - PIOC->PIO_PDSR &= ~(1<<13); + GPIOB->IDR &= ~(1<<13); break; case DSW(SW_SH2): - PIOC->PIO_PDSR |= (1<<13); + GPIOB->IDR |= (1<<13); break; #elif defined(PCBSKY9X) case DSW(SW_ID0): @@ -325,6 +332,10 @@ void *main_thread(void *) checkLowEEPROM(); #endif +#if defined(CPUARM) + eeLoadModel(g_eeGeneral.currModel); +#endif + checkTHR(); checkSwitches(); checkAlarm(); @@ -439,7 +450,7 @@ FATFS g_FATFS_Obj; FRESULT f_stat (const TCHAR * path, FILINFO *) { struct stat tmp; - // printf("f_stat(%s)\n", path); fflush(stdout); + printf("f_stat(%s)\n", path); fflush(stdout); return stat(path, &tmp) ? FR_INVALID_NAME : FR_OK; } diff --git a/src/simpgmspace.h b/src/simpgmspace.h index 305b4221a..af09db075 100644 --- a/src/simpgmspace.h +++ b/src/simpgmspace.h @@ -95,8 +95,14 @@ typedef const uint8_t pm_uint8_t; typedef const int16_t pm_int16_t; typedef const int8_t pm_int8_t; -extern sem_t *eeprom_write_sem; -#if defined(CPUARM) +#if defined(PCBX9D) +extern GPIO_TypeDef gpiob; +#undef GPIOB +#define GPIOB (&gpiob) +extern GPIO_TypeDef gpioc; +#undef GPIOC +#define GPIOC (&gpioc) +#elif defined(PCBSKY9X) extern Pio Pioa, Piob, Pioc; extern Twi Twio; extern Dacc dacc; @@ -119,6 +125,10 @@ extern Adc Adc0; extern Pwm pwm; #undef PWM #define PWM (&pwm) +#endif + +extern sem_t *eeprom_write_sem; +#if defined(CPUARM) extern uint32_t eeprom_pointer; extern char* eeprom_buffer_data; extern volatile int32_t eeprom_buffer_size; diff --git a/src/simu.cpp b/src/simu.cpp index 5bbc51c6e..e75c75897 100644 --- a/src/simu.cpp +++ b/src/simu.cpp @@ -47,6 +47,60 @@ #define H2 H*2 int g_snapshot_idx = 0; +uint64_t toto = 0; + +#if defined(PCBX9D) +#define ERSKY9X_RETURN_PIO GPIOC->IDR +#define ERSKY9X_RETURN_MASK 0x20 +#define ERSKY9X_EXIT_PIO GPIOC->IDR +#define ERSKY9X_EXIT_MASK (0x01000000) +#define ERSKY9X_UP_MASK 0x00 +#define ERSKY9X_DOWN_MASK 0x00 +#define ERSKY9X_RIGHT_PIO GPIOC->IDR +#define ERSKY9X_RIGHT_MASK 0x10 +#define ERSKY9X_LEFT_PIO GPIOC->IDR +#define ERSKY9X_LEFT_MASK 0x08 +#define KEY_MENU_PIO GPIOC->IDR +#define KEY_MENU_MASK 0x02 +#define KEY_PAGE_PIO GPIOC->IDR +#define KEY_PAGE_MASK 0x40 +#elif defined(PCBSKY9X) && defined(REVA) +#define ERSKY9X_RETURN_PIO PIOB->PIO_PDSR +#define ERSKY9X_RETURN_MASK (0x40) +#define ERSKY9X_EXIT_PIO PIOA->PIO_PDSR +#define ERSKY9X_EXIT_MASK (0x80000000) +#define ERSKY9X_UP_MASK (0x08 >> 1) +#define ERSKY9X_RIGHT_PIO PIOC->PIO_PDSR +#define ERSKY9X_RIGHT_MASK (0x20 >> 1) +#define ERSKY9X_DOWN_MASK (0x10 >> 1) +#define ERSKY9X_LEFT_PIO PIOC->PIO_PDSR +#define ERSKY9X_LEFT_MASK (0x40 >> 1) +#elif defined(PCBSKY9X) +#define ERSKY9X_RETURN_PIO PIOB->PIO_PDSR +#define ERSKY9X_RETURN_MASK (0x20) +#define ERSKY9X_EXIT_MASK (0x01000000) +#define ERSKY9X_EXIT_PIO PIOC->PIO_PDSR +#define ERSKY9X_UP_MASK (0x04 >> 1) +#define ERSKY9X_RIGHT_PIO PIOC->PIO_PDSR +#define ERSKY9X_RIGHT_MASK (0x20 >> 1) +#define ERSKY9X_DOWN_MASK (0x40 >> 1) +#define ERSKY9X_LEFT_PIO PIOC->PIO_PDSR +#define ERSKY9X_LEFT_MASK (0x10 >> 1) +#define ERSKY9X_MENU_MASK (0x04 >> 1) +#else +// TODO to remove +#define ERSKY9X_RETURN_PIO toto +#define ERSKY9X_RETURN_MASK toto +#define ERSKY9X_EXIT_MASK toto +#define ERSKY9X_EXIT_PIO toto +#define ERSKY9X_UP_MASK toto +#define ERSKY9X_RIGHT_PIO toto +#define ERSKY9X_RIGHT_MASK toto +#define ERSKY9X_DOWN_MASK toto +#define ERSKY9X_LEFT_PIO toto +#define ERSKY9X_LEFT_MASK toto +#define ERSKY9X_MENU_MASK toto +#endif class Open9xSim: public FXMainWindow { @@ -239,48 +293,36 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*) if(hasFocus()) { -#if defined(PCBSKY9X) && defined(REVA) -#define ERSKY9X_RETURN_MASK (0x40) -#define ERSKY9X_EXIT_MASK (0x80000000) -#define ERSKY9X_EXIT_PIO PIOA -#define ERSKY9X_UP_MASK (0x08 >> 1) -#define ERSKY9X_RIGHT_MASK (0x20 >> 1) -#define ERSKY9X_DOWN_MASK (0x10 >> 1) -#define ERSKY9X_LEFT_MASK (0x40 >> 1) -#else -#define ERSKY9X_RETURN_MASK (0x20) -#define ERSKY9X_EXIT_MASK (0x01000000) -#define ERSKY9X_EXIT_PIO PIOC -#define ERSKY9X_UP_MASK (0x04 >> 1) -#define ERSKY9X_RIGHT_MASK (0x20 >> 1) -#define ERSKY9X_DOWN_MASK (0x40 >> 1) -#define ERSKY9X_LEFT_MASK (0x10 >> 1) -#define ERSKY9X_MENU_MASK (0x04 >> 1) -#define ERSKY9X_PAGE_MASK (0x40 >> 1) -#endif static uint64_t keys1[]={ - KEY_Return, INP_B_KEY_MEN, INP_L_KEY_MEN, (uint64_t)PIOB, ERSKY9X_RETURN_MASK, - KEY_BackSpace, INP_B_KEY_EXT, INP_L_KEY_EXT, (uint64_t)ERSKY9X_EXIT_PIO, ERSKY9X_EXIT_MASK, - KEY_KP_0, INP_B_KEY_EXT, INP_L_KEY_EXT, (uint64_t)ERSKY9X_EXIT_PIO, ERSKY9X_EXIT_MASK, - KEY_Right, INP_B_KEY_RGT, INP_L_KEY_RGT, (uint64_t)PIOC, ERSKY9X_RIGHT_MASK, - KEY_Left, INP_B_KEY_LFT, INP_L_KEY_LFT, (uint64_t)PIOC, ERSKY9X_LEFT_MASK, +// TODO change everything here! + KEY_Return, INP_B_KEY_MEN, INP_L_KEY_MEN, (uint64_t)&ERSKY9X_RETURN_PIO, ERSKY9X_RETURN_MASK, + KEY_BackSpace, INP_B_KEY_EXT, INP_L_KEY_EXT, (uint64_t)&ERSKY9X_EXIT_PIO, ERSKY9X_EXIT_MASK, + KEY_KP_0, INP_B_KEY_EXT, INP_L_KEY_EXT, (uint64_t)&ERSKY9X_EXIT_PIO, ERSKY9X_EXIT_MASK, + KEY_Right, INP_B_KEY_RGT, INP_L_KEY_RGT, (uint64_t)&ERSKY9X_RIGHT_PIO, ERSKY9X_RIGHT_MASK, + KEY_Left, INP_B_KEY_LFT, INP_L_KEY_LFT, (uint64_t)&ERSKY9X_LEFT_PIO, ERSKY9X_LEFT_MASK, #if defined(PCBX9D) - KEY_Page_Up, INP_B_KEY_MEN, INP_L_KEY_MEN, (uint64_t)PIOC, ERSKY9X_MENU_MASK, - KEY_Page_Down, INP_B_KEY_EXT, INP_L_KEY_EXT, (uint64_t)PIOC, ERSKY9X_PAGE_MASK, + KEY_Page_Up, INP_B_KEY_MEN, INP_L_KEY_MEN, (uint64_t)&KEY_MENU_PIO, KEY_MENU_MASK, + KEY_Page_Down, INP_B_KEY_EXT, INP_L_KEY_EXT, (uint64_t)&KEY_PAGE_PIO, KEY_PAGE_MASK, #else KEY_Up, INP_B_KEY_UP, INP_L_KEY_UP, (uint64_t)PIOC, ERSKY9X_UP_MASK, KEY_Down, INP_B_KEY_DWN, INP_L_KEY_DWN, (uint64_t)PIOC, ERSKY9X_DOWN_MASK, #endif }; -#if defined(CPUARM) - PIOC->PIO_PDSR |= ERSKY9X_DOWN_MASK | ERSKY9X_UP_MASK | ERSKY9X_RIGHT_MASK | ERSKY9X_LEFT_MASK ; - ERSKY9X_EXIT_PIO->PIO_PDSR |= ERSKY9X_EXIT_MASK; - PIOB->PIO_PDSR |= ERSKY9X_RETURN_MASK; -// PIOA->PIO_PDSR = 0xFFFFFFFF; - temperature = 31; +#if defined(PCBSKY9X) Coproc_temp = 23; Coproc_maxtemp = 28; +#endif + +#if defined(CPUARM) + ERSKY9X_RIGHT_PIO |= ERSKY9X_DOWN_MASK | ERSKY9X_UP_MASK | ERSKY9X_RIGHT_MASK | ERSKY9X_LEFT_MASK ; + ERSKY9X_EXIT_PIO |= ERSKY9X_EXIT_MASK; + ERSKY9X_RETURN_PIO |= ERSKY9X_RETURN_MASK; +#if defined(PCBX9D) + KEY_MENU_PIO |= KEY_MENU_MASK; + KEY_PAGE_PIO |= KEY_PAGE_MASK; +#endif + temperature = 31; maxTemperature = 42; #elif defined(PCBGRUVIN9X) uint8_t pin = (pinl & ~0x3f); @@ -291,7 +333,7 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*) for(unsigned i=0; igetKeyState(keys1[i])) { #if defined(CPUARM) - ((Pio*)keys1[i+3])->PIO_PDSR &= ~(keys1[i+4]); + *((uint32_t*)keys1[i+3]) &= ~(keys1[i+4]); #elif defined(PCBGRUVIN9X) pin |= (1<PIO_PDSR |= (0x00800000 | 0x01000000 | 0x00000002 | 0x00000001); PIOB->PIO_PDSR |= (0x00000050); PIOC->PIO_PDSR |= (0x10000000 | 0x00000400 | 0x00000200); @@ -327,7 +369,7 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*) for(unsigned i=0; igetKeyState(keys2[i])) { -#if defined(CPUARM) +#if defined(PCBSKY9X) switch(i) { case 6: PIOA->PIO_PDSR &= ~0x00800000; @@ -425,7 +467,10 @@ void Open9xSim::refreshDiplay() { if (lcd_refresh) { lcd_refresh = false; -#if defined(CPUARM) +#if defined(PCBX9D) + if (1) + // TODO here a define +#elif defined(PCBSKY9X) if (PWM->PWM_CH_NUM[0].PWM_CDTY != 100) #elif defined(PCBGRUVIN9X) if (portc & 1<> 24); +#if defined(SIMU) + printf("isAudioFileAvailable(%08x)\n", i); fflush(stdout); +#endif + if (category == SYSTEM_AUDIO_CATEGORY) { if (sdAvailableSystemAudioFiles & ((uint32_t)1 << i)) { strcpy(filename, SYSTEM_SOUNDS_PATH "/"); @@ -154,7 +155,6 @@ bool isAudioFileAvailable(uint32_t i, char * filename) return true; } } -#if 0 else if (category == PHASE_AUDIO_CATEGORY) { uint8_t index = (i >> 16) & 0xFF; uint8_t event = i & 0xFF; @@ -162,7 +162,7 @@ bool isAudioFileAvailable(uint32_t i, char * filename) strcpy(filename, SOUNDS_PATH "/"); char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); *str++ = '/'; - char * tmp = strcat_phasename_nodefault(str, i); + char * tmp = strcat_phasename_nodefault(str, index); if (tmp != str) { strcpy(tmp, suffixes[event]); strcat(tmp, SOUNDS_EXT); @@ -173,7 +173,7 @@ bool isAudioFileAvailable(uint32_t i, char * filename) strcpy(filename, SOUNDS_PATH "/"); char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); *str++ = '/'; - char * tmp = strcat_phasename_default(str, i); + char * tmp = strcat_phasename_default(str, index); if (tmp != str) { strcpy(tmp, suffixes[event]); strcat(tmp, SOUNDS_EXT); @@ -188,18 +188,7 @@ bool isAudioFileAvailable(uint32_t i, char * filename) strcpy(filename, SOUNDS_PATH "/"); char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); *str++ = '/'; - char * tmp = strcat_mixername_nodefault(str, i); - if (tmp != str) { - strcpy(tmp, suffixes[event]); - strcat(tmp, SOUNDS_EXT); - return true; - } - } - else if ((sdAvailableMixerAudioFiles[index] >> 4) & (1 << event)) { - strcpy(filename, SOUNDS_PATH "/"); - char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); - *str++ = '/'; - char * tmp = strcat_mixername_default(str, i); + char * tmp = strcat_mixername_nodefault(str, index); if (tmp != str) { strcpy(tmp, suffixes[event]); strcat(tmp, SOUNDS_EXT); @@ -207,7 +196,7 @@ bool isAudioFileAvailable(uint32_t i, char * filename) } } } -#endif + return false; } #else @@ -381,11 +370,11 @@ void AudioQueue::sdWakeup(AudioContext & context) } read /= 2; - register Dacc *dacptr = DACC; +#if defined(PCBSKY9X) + register Dacc *dacptr = DACC; if (read) { state = AUDIO_PLAYING_WAV; - if (dacptr->DACC_ISR & DACC_ISR_TXBUFE) { dacptr->DACC_TPR = CONVERT_PTR(wavSamplesBuffer); dacptr->DACC_TCR = read; @@ -403,7 +392,6 @@ void AudioQueue::sdWakeup(AudioContext & context) CoSetTmrCnt(audioTimer, (WAV_BUFFER_SIZE * 500) / context.pcmFreq, 0); CoStartTmr(audioTimer); } - wavSamplesBuffer += WAV_BUFFER_SIZE; if (wavSamplesBuffer >= wavSamplesArray + 3 * WAV_BUFFER_SIZE) wavSamplesBuffer = wavSamplesArray; @@ -412,6 +400,7 @@ void AudioQueue::sdWakeup(AudioContext & context) state = AUDIO_RESUMING; CoSetFlag(audioFlag); } +#endif } } else { @@ -439,11 +428,13 @@ void AudioQueue::wakeup() if (state != AUDIO_PLAYING_TONE) { state = AUDIO_PLAYING_TONE; +#if !defined(PCBX9D) register Dacc *dacptr = DACC; dacptr->DACC_TPR = CONVERT_PTR(Sine_values); dacptr->DACC_TNPR = CONVERT_PTR(Sine_values); dacptr->DACC_TCR = 50 ; // words, 100 16 bit values dacptr->DACC_TNCR = 50 ; // words, 100 16 bit values +#endif } setFrequency(fragment.freq * 6100 / 4); @@ -483,11 +474,13 @@ void AudioQueue::wakeup() else if (ridx == widx && prioIdx < 0 && backgroundContext.fragment.duration > 0) { if (state != AUDIO_PLAYING_TONE) { state = AUDIO_PLAYING_TONE; +#if !defined(PCBX9D) register Dacc *dacptr = DACC; dacptr->DACC_TPR = CONVERT_PTR(Sine_values); dacptr->DACC_TNPR = CONVERT_PTR(Sine_values); dacptr->DACC_TCR = 50 ; // words, 100 16 bit values dacptr->DACC_TNCR = 50 ; // words, 100 16 bit values +#endif } CoSetTmrCnt(audioTimer, backgroundContext.fragment.duration*2, 0); backgroundContext.fragment.duration = 0; diff --git a/src/sky9x/audio.h b/src/sky9x/audio.h index ded6f41db..4c0366ca2 100644 --- a/src/sky9x/audio.h +++ b/src/sky9x/audio.h @@ -190,10 +190,8 @@ extern void pushPrompt(uint16_t prompt, uint8_t id=0); #define PLAY_FILE(f, flags, id) audioQueue.playFile((f), (flags), (id)) #define STOP_PLAY(id) audioQueue.stopPlay((id)) #define AUDIO_RESET() audioQueue.reset() -#define PLAY_PHASE_OFF(phase) -// do { char filename[42/*TODO check*/]; if (isAudioFileAvailable((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_OFF, filename)) audioQueue.playFile(filename); } while (0) -#define PLAY_PHASE_ON(phase) -// do { char filename[42]; if (isAudioFileAvailable((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_ON, filename)) audioQueue.playFile(filename); } while (0) +#define PLAY_PHASE_OFF(phase) do { char filename[64]; if (isAudioFileAvailable((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_OFF, filename)) audioQueue.playFile(filename); } while (0) +#define PLAY_PHASE_ON(phase) do { char filename[64]; if (isAudioFileAvailable((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_ON, filename)) audioQueue.playFile(filename); } while (0) extern void refreshSystemAudioFiles(); extern void refreshModelAudioFiles(); diff --git a/src/sky9x/sound_driver.cpp b/src/sky9x/audio_driver.cpp similarity index 84% rename from src/sky9x/sound_driver.cpp rename to src/sky9x/audio_driver.cpp index bfd8bdfc8..9e700fdd2 100644 --- a/src/sky9x/sound_driver.cpp +++ b/src/sky9x/audio_driver.cpp @@ -1,36 +1,35 @@ -/**************************************************************************** -* Copyright (c) 2011 by Michael Blandford. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* 3. Neither the name of the author nor the names of its contributors may -* be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -* THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -* SUCH DAMAGE. -* -**************************************************************************** -* History: -* -****************************************************************************/ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ #include "../open9x.h" diff --git a/src/sky9x/audio_driver.h b/src/sky9x/audio_driver.h new file mode 100644 index 000000000..a734c3289 --- /dev/null +++ b/src/sky9x/audio_driver.h @@ -0,0 +1,75 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef audio_driver_h +#define audio_driver_h + +#define NUM_VOL_LEVELS 24 + +extern void startSound( void ) ; +extern void buzzer_on( void ) ; +extern void buzzer_off( void ) ; +extern void buzzer_sound( uint8_t time ) ; +extern void setFrequency( uint32_t frequency ) ; +extern uint32_t getFrequency(); +extern void start_timer1( void ) ; +extern void initDac( void ) ; +extern void end_sound( void ) ; +extern void write_coprocessor( uint8_t *ptr, uint32_t count ) ; +extern void read_coprocessor( bool onlytemp=false ) ; +extern uint8_t Coproc_read ; +extern int8_t Coproc_valid ; +extern int8_t Coproc_temp ; +extern int8_t Coproc_maxtemp ; + +extern uint16_t *nextAudioData; +extern uint16_t nextAudioSize; + +inline void toneStart() +{ + PMC->PMC_PCER0 |= 0x40000000L ; // Enable peripheral clock to DAC + DACC->DACC_IER = DACC_IER_ENDTX ; +} + +inline void toneStop() +{ + DACC->DACC_IDR = DACC_IDR_ENDTX ; // Disable interrupt +} + +extern volatile uint8_t Buzzer_count ; + +extern void init_twi( void ) ; +extern void setVolume( register uint8_t volume ) ; +extern "C" void TWI0_IRQHandler (void) ; + +#endif diff --git a/src/sky9x/board.h b/src/sky9x/board.h index ae9a3346b..2eda35247 100644 --- a/src/sky9x/board.h +++ b/src/sky9x/board.h @@ -39,17 +39,14 @@ #include #include "chip.h" -#ifdef REVA +#if defined(REVA) #include "AT91SAM3S2.h" #else #include "AT91SAM3S4.h" #endif -#ifdef SIMU -#define CONVERT_PTR(x) ((uint32_t)(uint64_t)(x)) -#else +#if !defined(SIMU) #include "core_cm3.h" -#define CONVERT_PTR(x) ((uint32_t)(x)) #endif //------------------------------------------------------------------------------ diff --git a/src/sky9x/eeprom_driver.cpp b/src/sky9x/eeprom_driver.cpp new file mode 100644 index 000000000..70c85587d --- /dev/null +++ b/src/sky9x/eeprom_driver.cpp @@ -0,0 +1,271 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "../open9x.h" + +uint32_t spi_PDC_action( register uint8_t *command, register uint8_t *tx, register uint8_t *rx, register uint32_t comlen, register uint32_t count ) +{ +#ifndef SIMU + + register Spi *spiptr ; + register uint32_t condition ; + static uint8_t discard_rx_command[4] ; + +// PMC->PMC_PCER0 |= 0x00200000L ; // Enable peripheral clock to SPI + + Spi_complete = 0 ; + if ( comlen > 4 ) + { + Spi_complete = 1 ; + return 0x4FFFF ; + } + condition = SPI_SR_TXEMPTY ; + spiptr = SPI ; + spiptr->SPI_CR = 1 ; // Enable + (void) spiptr->SPI_RDR ; // Dump any rx data + (void) spiptr->SPI_SR ; // Clear error flags + spiptr->SPI_RPR = (uint32_t)discard_rx_command ; + spiptr->SPI_RCR = comlen ; + if ( rx ) + { + spiptr->SPI_RNPR = (uint32_t)rx ; + spiptr->SPI_RNCR = count ; + condition = SPI_SR_RXBUFF ; + } + spiptr->SPI_TPR = (uint32_t)command ; + spiptr->SPI_TCR = comlen ; + if ( tx ) + { + spiptr->SPI_TNPR = (uint32_t)tx ; + } + else + { + spiptr->SPI_TNPR = (uint32_t)rx ; + } + spiptr->SPI_TNCR = count ; + + spiptr->SPI_PTCR = SPI_PTCR_RXTEN | SPI_PTCR_TXTEN ; // Start transfers + + // Wait for things to get started, avoids early interrupt + for ( count = 0 ; count < 1000 ; count += 1 ) + { + if ( ( spiptr->SPI_SR & SPI_SR_TXEMPTY ) == 0 ) + { + break ; + } + } + spiptr->SPI_IER = condition ; + +#endif + + return 0 ; +} + +uint32_t spi_operation( register uint8_t *tx, register uint8_t *rx, register uint32_t count ) +{ + register Spi *spiptr; + register uint32_t result; + + result = 0; + spiptr = SPI; + spiptr->SPI_CR = 1; // Enable + (void) spiptr->SPI_RDR; // Dump any rx data + + while (count) { + result = 0; + while ((spiptr->SPI_SR & SPI_SR_TXEMPTY) == 0) { + // wait + if (++result > 10000) { + result = 0xFFFF; + break; + } + } + if (result > 10000) { + break; + } + + spiptr->SPI_TDR = *tx++; + result = 0; + while ((spiptr->SPI_SR & SPI_SR_RDRF) == 0) { + // wait for received + if (++result > 10000) { + result = 0x2FFFF; + break; + } + } + if (result > 10000) { + break; + } + *rx++ = spiptr->SPI_RDR; + count -= 1; + } + if (result <= 10000) { + result = 0; + } + spiptr->SPI_CR = 2; // Disable + + return result ; +} + +uint32_t eeprom_write_one(uint8_t byte, uint8_t count) +{ +#ifndef SIMU + register Spi *spiptr; + register uint32_t result; + + spiptr = SPI; + spiptr->SPI_CR = 1; // Enable + (void) spiptr->SPI_RDR; // Dump any rx data + + spiptr->SPI_TDR = byte; + + result = 0; + while ((spiptr->SPI_SR & SPI_SR_RDRF) == 0) { + // wait for received + if (++result > 10000) { + break; + } + } + if (count == 0) { + spiptr->SPI_CR = 2; // Disable + return spiptr->SPI_RDR; + } + (void) spiptr->SPI_RDR; // Dump the rx data + spiptr->SPI_TDR = 0; + result = 0; + while ((spiptr->SPI_SR & SPI_SR_RDRF) == 0) { + // wait for received + if (++result > 10000) { + break; + } + } + spiptr->SPI_CR = 2; // Disable + return spiptr->SPI_RDR ; +#else + return !Spi_complete; +#endif +} + +void eeprom_write_enable() +{ + eeprom_write_one(6, 0); +} + +uint32_t eeprom_read_status() +{ + return eeprom_write_one(5, 1); +} + +// SPI i/f to EEPROM (4Mb) +// Peripheral ID 21 (0x00200000) +// Connections: +// SS PA11 (peripheral A) +// MISO PA12 (peripheral A) +// MOSI PA13 (peripheral A) +// SCK PA14 (peripheral A) +// Set clock to 3 MHz, AT25 device is rated to 70MHz, 18MHz would be better +void init_spi() +{ + register Spi *spiptr ; + register uint32_t timer ; + register uint8_t *p ; + uint8_t spi_buf[4] ; + + PMC->PMC_PCER0 |= 0x00200000L ; // Enable peripheral clock to SPI + /* Configure PIO */ + configure_pins( 0x00007800, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_A | PIN_PORTA | PIN_NO_PULLUP ) ; + + spiptr = SPI ; + timer = ( Master_frequency / 3000000 ) << 8 ; // Baud rate 3Mb/s + spiptr->SPI_MR = 0x14000011 ; // 0001 0100 0000 0000 0000 0000 0001 0001 Master + spiptr->SPI_CSR[0] = 0x01180009 | timer ; // 0000 0001 0001 1000 xxxx xxxx 0000 1001 + NVIC_EnableIRQ(SPI_IRQn) ; + + p = spi_buf ; + +// *p = 0x39 ; // Unprotect sector command +// *(p+1) = 0 ; +// *(p+2) = 0 ; +// *(p+3) = 0 ; // 3 bytes address + +// spi_operation( p, spi_buf, 4 ) ; + + eeprom_write_enable() ; + + *p = 1 ; // Write status register command + *(p+1) = 0 ; + spi_operation( p, spi_buf, 2 ) ; +} + +#ifndef SIMU +extern "C" void SPI_IRQHandler() +{ + register Spi *spiptr ; + + spiptr = SPI ; + SPI->SPI_IDR = 0x07FF ; // All interrupts off + spiptr->SPI_CR = 2 ; // Disable + (void) spiptr->SPI_RDR ; // Dump any rx data + (void) spiptr->SPI_SR ; // Clear error flags + spiptr->SPI_PTCR = SPI_PTCR_RXTDIS | SPI_PTCR_TXTDIS ; // Stop tramsfers + Spi_complete = 1 ; // Indicate completion + +// Power save +// PMC->PMC_PCER0 &= ~0x00200000L ; // Disable peripheral clock to SPI +} +#endif + +void end_spi() +{ + SPI->SPI_CR = 2 ; // Disable + SPI->SPI_IDR = 0x07FF ; // All interrupts off + NVIC_DisableIRQ(SPI_IRQn) ; +} + +#if 0 +uint32_t unprotect_eeprom() +{ + register uint8_t *p; + + eeprom_write_enable(); + + p = Spi_tx_buf; + *p = 0x39; // Unprotect sector command + *(p + 1) = 0; + *(p + 2) = 0; + *(p + 3) = 0; // 3 bytes address + + return spi_operation( p, Spi_rx_buf, 4 ) ; +} +#endif + diff --git a/src/sky9x/haptic_driver.h b/src/sky9x/haptic_driver.h index 032b9f622..6608e7ac3 100644 --- a/src/sky9x/haptic_driver.h +++ b/src/sky9x/haptic_driver.h @@ -31,5 +31,10 @@ * */ +#ifndef haptic_driver_h +#define haptic_driver_h + extern void hapticOff(void) ; extern void hapticOn( uint32_t pwmPercent ) ; + +#endif diff --git a/src/sky9x/keys_driver.cpp b/src/sky9x/keys_driver.cpp new file mode 100644 index 000000000..3a6fcdf3b --- /dev/null +++ b/src/sky9x/keys_driver.cpp @@ -0,0 +1,180 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "../open9x.h" + + +// keys: +// KEY_EXIT PA31 (PC24) +// KEY_MENU PB6 (PB5) +// KEY_DOWN LCD5 PC3 (PC5) +// KEY_UP LCD6 PC2 (PC1) +// KEY_RIGHT LCD4 PC4 (PC4) +// KEY_LEFT LCD3 PC5 (PC3) +// Reqd. bit 6 LEFT, 5 RIGHT, 4 UP, 3 DOWN 2 EXIT 1 MENU +// LCD pins 5 DOWN, 4 RIGHT, 3 LEFT, 1 UP +uint32_t readKeys() +{ + register uint32_t x; + register uint32_t y; + + x = lcdLock ? lcdInputs : PIOC->PIO_PDSR; // 6 LEFT, 5 RIGHT, 4 DOWN, 3 UP () + x <<= 1; + +#if defined(REVA) + y = (x & 0x00000060); + if (x & 0x00000008) + y |= 0x10; + if (x & 0x00000010) + y |= 0x08; + if (PIOA->PIO_PDSR & 0x80000000) + y |= 0x04; // EXIT + if (PIOB->PIO_PDSR & 0x000000040) + y |= 0x02; // MENU +#else + y = (x & 0x00000020); // RIGHT + if (x & 0x00000004) + y |= 0x02 << KEY_UP; // UP + if (x & 0x00000010) + y |= 0x02 << KEY_LEFT; // LEFT + if (x & 0x00000040) + y |= 0x02 << KEY_DOWN; // DOWN + if (x & 0x02000000) + y |= 0x02 << KEY_EXIT; // EXIT + if (PIOB->PIO_PDSR & 0x000000020) + y |= 0x02 << KEY_MENU; // MENU +#endif + + return y ; +} + +uint32_t readTrims() +{ + uint32_t trims; + uint32_t trima; + + trims = 0; + + trima = PIOA->PIO_PDSR; + +// TRIM_LH_DOWN PA7 (PA23) +#if defined(REVA) + if ( ( trima & 0x0080 ) == 0 ) +#else + if ((trima & 0x00800000) == 0) +#endif + { + trims |= 1; + } + +// TRIM_LV_DOWN PA27 (PA24) +#if defined(REVA) + if ( ( trima & 0x08000000 ) == 0 ) +#else + if ((trima & 0x01000000) == 0) +#endif + { + trims |= 4; + } + +// TRIM_RV_UP PA30 (PA1) +#if defined(REVA) + if ( ( trima & 0x40000000 ) == 0 ) +#else + if ((trima & 0x00000002) == 0) +#endif + { + trims |= 0x20; + } + +// TRIM_RH_DOWN PA29 (PA0) +#if defined(REVA) + if ( ( trima & 0x20000000 ) == 0 ) +#else + if ((trima & 0x00000001) == 0) +#endif + { + trims |= 0x40; + } + +// TRIM_LH_UP PB4 + if ((PIOB->PIO_PDSR & 0x10) == 0) { + trims |= 2; + } + + trima = PIOC->PIO_PDSR; +// TRIM_LV_UP PC28 + if ((trima & 0x10000000) == 0) { + trims |= 8; + } + +// TRIM_RV_DOWN PC10 + if ((trima & 0x00000400) == 0) { + trims |= 0x10; + } + +// TRIM_RH_UP PC9 + if ((trima & 0x00000200) == 0) { + trims |= 0x80; + } + + return trims; +} + +uint8_t keyDown() +{ + return ~readKeys() & 0x7E ; +} + +void readKeysAndTrims() +{ + register uint32_t i; + +#if defined(ROTARY_ENCODERS) + keys[BTN_REa].input(!(PIOB->PIO_PDSR & 0x40), BTN_REa); +#endif + + uint8_t enuk = KEY_MENU; + uint8_t in = ~readKeys(); + for (i = 1; i < 7; i++) { + keys[enuk].input(in & (1 << i), (EnumKeys) enuk); + ++enuk; + } + + in = readTrims(); + + for (i = 1; i < 256; i <<= 1) { + keys[enuk].input(in & i, (EnumKeys) enuk); + ++enuk; + } +} diff --git a/src/sky9x/pulses_driver.cpp b/src/sky9x/pulses_driver.cpp new file mode 100644 index 000000000..344f87343 --- /dev/null +++ b/src/sky9x/pulses_driver.cpp @@ -0,0 +1,108 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "../open9x.h" + +// TODO illogical in the driver :( +void setupPulsesPPM(); + +void init_main_ppm( uint32_t period, uint32_t out_enable ) +{ + register Pio *pioptr ; + register Pwm *pwmptr ; + + setupPulsesPPM() ; + + if ( out_enable ) + { + pioptr = PIOA ; + pioptr->PIO_ABCDSR[0] &= ~PIO_PA17 ; // Peripheral C + pioptr->PIO_ABCDSR[1] |= PIO_PA17 ; // Peripheral C + pioptr->PIO_PDR = PIO_PA17 ; // Disable bit A17 Assign to peripheral + } + + pwmptr = PWM ; + // PWM3 for PPM output + pwmptr->PWM_CH_NUM[3].PWM_CMR = 0x0000000B ; // CLKA + if (g_model.pulsePol) + pwmptr->PWM_CH_NUM[3].PWM_CMR |= 0x00000200 ; // CPOL + pwmptr->PWM_CH_NUM[3].PWM_CPDR = period ; // Period in half uS + pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = period ; // Period in half uS + pwmptr->PWM_CH_NUM[3].PWM_CDTY = g_model.ppmDelay*100+600; // Duty in half uS + pwmptr->PWM_CH_NUM[3].PWM_CDTYUPD = g_model.ppmDelay*100+600; // Duty in half uS + pwmptr->PWM_ENA = PWM_ENA_CHID3 ; // Enable channel 3 + + NVIC_EnableIRQ(PWM_IRQn) ; + pwmptr->PWM_IER1 = PWM_IER1_CHID3 ; +} + +void disable_main_ppm() +{ + register Pio *pioptr ; + + pioptr = PIOA ; + pioptr->PIO_PER = PIO_PA17 ; // Assign A17 to PIO + + PWM->PWM_IDR1 = PWM_IDR1_CHID3 ; + NVIC_DisableIRQ(PWM_IRQn) ; +} + +// Initialise the SSC to allow PXX output. +// TD is on PA17, peripheral A +void init_ssc() +{ + register Ssc *sscptr ; + + PMC->PMC_PCER0 |= 0x00400000L ; // Enable peripheral clock to SSC + + configure_pins( PIO_PA17, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_A | PIN_PORTA | PIN_NO_PULLUP ) ; + + sscptr = SSC ; + sscptr->SSC_CMR = Master_frequency / (125000*2) ; // 8uS per bit + sscptr->SSC_TCMR = 0 ; // 0000 0000 0000 0000 0000 0000 0000 0000 + sscptr->SSC_TFMR = 0x00000027 ; // 0000 0000 0000 0000 0000 0000 1010 0111 (8 bit data, lsb) + sscptr->SSC_CR = SSC_CR_TXEN ; +} + +void disable_ssc() +{ + register Pio *pioptr ; + register Ssc *sscptr ; + + // Revert back to pwm output + pioptr = PIOA ; + pioptr->PIO_PER = PIO_PA17 ; // Assign A17 to PIO + + sscptr = SSC ; + sscptr->SSC_CR = SSC_CR_TXDIS ; +} diff --git a/src/sky9x/sound_driver.h b/src/sky9x/sound_driver.h deleted file mode 100644 index a0373a75a..000000000 --- a/src/sky9x/sound_driver.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -* Copyright (c) 2011 by Michael Blandford. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* 3. Neither the name of the author nor the names of its contributors may -* be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -* THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -* SUCH DAMAGE. -* -**************************************************************************** -* History: -* -****************************************************************************/ - -#ifndef sound_driver_h -#define sound_driver_h - -#define NUM_VOL_LEVELS 24 - -extern void startSound( void ) ; -extern void buzzer_on( void ) ; -extern void buzzer_off( void ) ; -extern void buzzer_sound( uint8_t time ) ; -extern void setFrequency( uint32_t frequency ) ; -extern uint32_t getFrequency(); -extern void start_timer1( void ) ; -extern void initDac( void ) ; -extern void end_sound( void ) ; -extern void write_coprocessor( uint8_t *ptr, uint32_t count ) ; -extern void read_coprocessor( bool onlytemp=false ) ; -extern uint8_t Coproc_read ; -extern int8_t Coproc_valid ; -extern int8_t Coproc_temp ; -extern int8_t Coproc_maxtemp ; - -extern uint16_t *nextAudioData; -extern uint16_t nextAudioSize; - -inline void toneStart() -{ - PMC->PMC_PCER0 |= 0x40000000L ; // Enable peripheral clock to DAC - DACC->DACC_IER = DACC_IER_ENDTX ; -} - -inline void toneStop() -{ - DACC->DACC_IDR = DACC_IDR_ENDTX ; // Disable interrupt -} - -extern volatile uint8_t Buzzer_count ; - -extern void init_twi( void ) ; -extern void setVolume( register uint8_t volume ) ; -extern "C" void TWI0_IRQHandler (void) ; - -#endif diff --git a/src/statistics_views.cpp b/src/statistics_views.cpp index c0863564e..e22ca0332 100644 --- a/src/statistics_views.cpp +++ b/src/statistics_views.cpp @@ -97,7 +97,9 @@ void menuStatisticsDebug(uint8_t event) g_eeGeneral.mAhUsed = 0; g_eeGeneral.globalTimer = 0; eeDirty(EE_GENERAL); +#if defined(PCBSKY9X) Current_used = 0; +#endif sessionTimer = 0; killEvents(event); AUDIO_KEYPAD_UP(); @@ -120,8 +122,7 @@ void menuStatisticsDebug(uint8_t event) return; } -#if defined(CPUARM) -#if !defined(REVA) +#if defined(PCBSKY9X) && !defined(REVA) lcd_putsLeft(1*FH, STR_CPU_CURRENT); putsTelemetryValue(MENU_DEBUG_COL_OFS, 1*FH, getCurrent(), UNIT_MILLIAMPS, 0); uint32_t current_scale = 488 + g_eeGeneral.currentCalib; @@ -131,21 +132,32 @@ void menuStatisticsDebug(uint8_t event) putsTelemetryValue(MENU_DEBUG_COL_OFS, 2*FH, g_eeGeneral.mAhUsed + Current_used*current_scale/8192/36, UNIT_MAH, PREC1); putsTime(17*FW, 2*FH, g_eeGeneral.globalTimer + sessionTimer, 0, 0); #endif + +#if defined(CPUARM) lcd_putsLeft(3*FH, STR_CPU_TEMP); putsTelemetryValue(MENU_DEBUG_COL_OFS, 3*FH, getTemperature(), UNIT_DEGREES, 0); putsTelemetryValue(20*FW+2, 3*FH, maxTemperature+g_eeGeneral.temperatureCalib, UNIT_DEGREES, 0); +#endif + +#if defined(PCBSKY9X) lcd_putsLeft(4*FH, STR_COPROC_TEMP); + if (Coproc_read==0) { lcd_putsAtt(9*FW+2, 4*FH, PSTR("Co Proc NACK"),INVERS); - } else if (Coproc_read==0x81) { + } + else if (Coproc_read==0x81) { lcd_putsAtt(9*FW+2, 4*FH, PSTR("Inst.TinyApp"),INVERS); - } else if (Coproc_read<3) { + } + else if (Coproc_read<3) { lcd_putsAtt(9*FW+2, 4*FH, PSTR("Upgr.TinyApp"),INVERS); - } else { + } + else { putsTelemetryValue(MENU_DEBUG_COL_OFS, 4*FH, Coproc_temp, UNIT_DEGREES, 0); putsTelemetryValue(20*FW+2, 4*FH, Coproc_maxtemp, UNIT_DEGREES, 0); } +#endif +#if defined(CPUARM) lcd_putsLeft(5*FH, STR_TMIXMAXMS); lcd_outdezAtt(MENU_DEBUG_COL_OFS, 5*FH, (maxMixerDuration)/20, PREC2); @@ -167,6 +179,7 @@ void menuStatisticsDebug(uint8_t event) lcd_putsLeft(5*FH, STR_FREESTACKMINB); lcd_outdezAtt(14*FW, 5*FH, stack_free(), UNSIGN) ; #endif + lcd_puts(3*FW, 7*FH+1, STR_MENUTORESET); lcd_status_line(); } diff --git a/src/stock/audio.h b/src/stock/audio.h index 3894acd83..2b6ee4b5e 100644 --- a/src/stock/audio.h +++ b/src/stock/audio.h @@ -31,6 +31,9 @@ * */ +#ifndef audio_h +#define audio_h + #if defined(PCBSTD) #define SPEAKER_ON BUZZER_ON #define SPEAKER_OFF toneFreq=0; BUZZER_OFF @@ -107,46 +110,51 @@ extern audioQueue audio; void audioDefevent(uint8_t e); -#define AUDIO_KEYPAD_UP() audioDefevent(AU_KEYPAD_UP) -#define AUDIO_KEYPAD_DOWN() audioDefevent(AU_KEYPAD_DOWN) -#define AUDIO_MENUS() audioDefevent(AU_MENUS) -#define AUDIO_WARNING1() audioDefevent(AU_WARNING1) -#define AUDIO_WARNING2() audioDefevent(AU_WARNING2) -#define AUDIO_ERROR() audioDefevent(AU_ERROR) +#define AUDIO_KEYPAD_UP() audioDefevent(AU_KEYPAD_UP) +#define AUDIO_KEYPAD_DOWN() audioDefevent(AU_KEYPAD_DOWN) +#define AUDIO_MENUS() audioDefevent(AU_MENUS) +#define AUDIO_WARNING1() audioDefevent(AU_WARNING1) +#define AUDIO_WARNING2() audioDefevent(AU_WARNING2) +#define AUDIO_ERROR() audioDefevent(AU_ERROR) #if defined(VOICE) -#define AUDIO_TADA() pushPrompt(PROMPT_SYSTEM_BASE+AU_TADA) +#define AUDIO_TADA() pushPrompt(PROMPT_SYSTEM_BASE+AU_TADA) #define AUDIO_TX_BATTERY_LOW() pushPrompt(PROMPT_SYSTEM_BASE+AU_TX_BATTERY_LOW) -#define AUDIO_INACTIVITY() pushPrompt(PROMPT_SYSTEM_BASE+AU_INACTIVITY) +#define AUDIO_INACTIVITY() pushPrompt(PROMPT_SYSTEM_BASE+AU_INACTIVITY) #define AUDIO_ERROR_MESSAGE(e) pushPrompt(PROMPT_SYSTEM_BASE+(e)) -#define AUDIO_TIMER_30() pushPrompt(PROMPT_SYSTEM_BASE+AU_TIMER_30) -#define AUDIO_TIMER_20() pushPrompt(PROMPT_SYSTEM_BASE+AU_TIMER_20) -#define AUDIO_TIMER_10() pushPrompt(PROMPT_SYSTEM_BASE+AU_TIMER_10) -#define AUDIO_TIMER_LT3(x) pushPrompt(PROMPT_SYSTEM_BASE+AU_TIMER_LT3) +#define AUDIO_TIMER_30() pushPrompt(PROMPT_SYSTEM_BASE+AU_TIMER_30) +#define AUDIO_TIMER_20() pushPrompt(PROMPT_SYSTEM_BASE+AU_TIMER_20) +#define AUDIO_TIMER_10() pushPrompt(PROMPT_SYSTEM_BASE+AU_TIMER_10) +#define AUDIO_TIMER_LT3(x) pushPrompt(PROMPT_SYSTEM_BASE+AU_TIMER_LT3) #else #define AUDIO_TADA() #define AUDIO_TX_BATTERY_LOW() audioDefevent(AU_TX_BATTERY_LOW) -#define AUDIO_INACTIVITY() audioDefevent(AU_INACTIVITY) +#define AUDIO_INACTIVITY() audioDefevent(AU_INACTIVITY) #define AUDIO_ERROR_MESSAGE(e) audioDefevent(AU_ERROR) -#define AUDIO_TIMER_30() audioDefevent(AU_TIMER_30) -#define AUDIO_TIMER_20() audioDefevent(AU_TIMER_20) -#define AUDIO_TIMER_10() audioDefevent(AU_TIMER_10) -#define AUDIO_TIMER_LT3(x) audioDefevent(AU_TIMER_LT3) +#define AUDIO_TIMER_30() audioDefevent(AU_TIMER_30) +#define AUDIO_TIMER_20() audioDefevent(AU_TIMER_20) +#define AUDIO_TIMER_10() audioDefevent(AU_TIMER_10) +#define AUDIO_TIMER_LT3(x) audioDefevent(AU_TIMER_LT3) #endif -#define AUDIO_MINUTE_BEEP() audioDefevent(AU_WARNING1) -#define AUDIO_MIX_WARNING_1() audioDefevent(AU_MIX_WARNING_1) -#define AUDIO_MIX_WARNING_2() audioDefevent(AU_MIX_WARNING_2) -#define AUDIO_MIX_WARNING_3() audioDefevent(AU_MIX_WARNING_3) +#define AUDIO_MINUTE_BEEP() audioDefevent(AU_WARNING1) +#define AUDIO_MIX_WARNING_1() audioDefevent(AU_MIX_WARNING_1) +#define AUDIO_MIX_WARNING_2() audioDefevent(AU_MIX_WARNING_2) +#define AUDIO_MIX_WARNING_3() audioDefevent(AU_MIX_WARNING_3) #define AUDIO_POT_STICK_MIDDLE() audioDefevent(AU_POT_STICK_MIDDLE) -#define AUDIO_VARIO_UP() audioDefevent(AU_KEYPAD_UP) -#define AUDIO_VARIO_DOWN() audioDefevent(AU_KEYPAD_DOWN) -#define AUDIO_TRIM_MIDDLE(f) audio.event(AU_TRIM_MIDDLE, f) -#define AUDIO_TRIM_END(f) AUDIO_TRIM_MIDDLE(f) -#define AUDIO_TRIM(event, f) audio.event(AU_TRIM_MOVE, f) -#define AUDIO_PLAY(p) audio.event(p) -#define AUDIO_VARIO(f, t) audio.play(f, t, 0, PLAY_BACKGROUND) +#define AUDIO_VARIO_UP() audioDefevent(AU_KEYPAD_UP) +#define AUDIO_VARIO_DOWN() audioDefevent(AU_KEYPAD_DOWN) +#define AUDIO_TRIM_MIDDLE(f) audio.event(AU_TRIM_MIDDLE, f) +#define AUDIO_TRIM_END(f) AUDIO_TRIM_MIDDLE(f) +#define AUDIO_TRIM(event, f) audio.event(AU_TRIM_MOVE, f) +#define AUDIO_PLAY(p) audio.event(p) +#define AUDIO_VARIO(f, t) audio.play(f, t, 0, PLAY_BACKGROUND) -#define AUDIO_DRIVER() audio.driver() -#define AUDIO_HEARTBEAT() audio.heartbeat() -#define IS_AUDIO_BUSY() audio.busy() +#define AUDIO_DRIVER() audio.driver() +#define AUDIO_HEARTBEAT() audio.heartbeat() +#define IS_AUDIO_BUSY() audio.busy() #define AUDIO_RESET() + +#define PLAY_PHASE_OFF(phase) +#define PLAY_PHASE_ON(phase) + +#endif diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf new file mode 100644 index 000000000..e04afaee6 Binary files /dev/null and b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf differ diff --git a/src/x9d/stm32f2xx.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h similarity index 98% rename from src/x9d/stm32f2xx.h rename to src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h index e0470a703..774f6abd9 100644 --- a/src/x9d/stm32f2xx.h +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h @@ -52,7 +52,10 @@ #ifndef __STM32F2xx_H #define __STM32F2xx_H -//#include "stm32f2xx_conf.h" + +// TODO added by BSS +#define assert_param(xx) + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ @@ -94,7 +97,7 @@ can define the HSE value in your toolchain compiler preprocessor. */ #if !defined (HSE_VALUE) - #define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */ + #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */ /** @@ -6919,7 +6922,6 @@ typedef struct /** * @} */ -//编译器设置中define #ifdef USE_STDPERIPH_DRIVER #include "stm32f2xx_conf.h" diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include/system_stm32f2xx.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include/system_stm32f2xx.h new file mode 100644 index 000000000..427b22255 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include/system_stm32f2xx.h @@ -0,0 +1,105 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.h + * @author MCD Application Team + * @version V1.1.3 + * @date 05-March-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Header File. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** + * @brief Define to prevent recursive inclusion + */ +#ifndef __SYSTEM_STM32F2XX_H +#define __SYSTEM_STM32F2XX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/** @addtogroup STM32F2xx_System_Includes + * @{ + */ + +/** + * @} + */ + + +/** @addtogroup STM32F2xx_System_Exported_types + * @{ + */ + +extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ + + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Exported_Constants + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Exported_Functions + * @{ + */ + +extern void SystemInit(void); +extern void SystemCoreClockUpdate(void); +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /*__SYSTEM_STM32F2XX_H */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Release_Notes.html b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Release_Notes.html new file mode 100644 index 000000000..c3d97b13f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Release_Notes.html @@ -0,0 +1,146 @@ + + + + + + + +Release Notes for STM32F2xx CMSIS + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
Back to Release page
+

Release +Notes for STM32F2xx CMSIS

+

Copyright 2012 STMicroelectronics

+

+
+

 

+ + + + + + +
+

Contents

+
    +
  1. STM32F2xx CMSIS +update History
  2. +
  3. License
  4. +
+ +

STM32F2xx CMSIS +update History

V1.1.3 / 05-March-2012

+

Main +Changes

+ +
  • All source files: license disclaimer text update and add link to the License file on ST Internet.

V1.1.2 / 28-December-2011

Main +Changes

+
  • All source files: update disclaimer to add reference to the new license agreement
  • stm32f2xx.h
    • Correct bit definition: RCC_AHB2RSTR_HSAHRST changed to RCC_AHB2RSTR_HASHRST

V1.1.1 / 14-November-2011

Main +Changes

+
  • stm32f2xx.h
    • Add missing bits definition for DAC CR register
    • Add missing bits definition for FSMC BTR1, BTR2, BTR3, BWTR1, BWTR2, BWTR3 and BWTR4 registers
  • Add startup file for TASKING toolchain

V1.1.0 / 23-September-2011

Main +Changes

+
  • stm32f2xx.h
    • Add define for Cortex-M3 revision __CM3_REV
    • Allow +modification of some constants by the application code, definition of +these constants is now bracketed by              #if !defined. The concerned constant are HSE_VALUE, HSI_VALUE and HSE_STARTUP_TIMEOUT.
    • Fix include of stm32f2xx_conf.h file, change "stm32f2xx_conf.h " by "stm32f2xx_conf.h"
    • Correct MII_RMII_SEL bit (in SYSCFG_PMC register) value to 0x00800000
    • Correct RCC_CFGR_PPRE2_DIV16 bit (in RCC_CFGR register) value to 0x0000E000
    • Correct some bits definition to be in line with naming used in the Reference Manual (RM0033)
      • GPIO_OTYPER_IDR_x changed to GPIO_IDR_IDR_x
      • GPIO_OTYPER_ODR_x changed to GPIO_ODR_ODR_x
      • SYSCFG_PMC_MII_RMII changed to SYSCFG_PMC_MII_RMII_SEL
      • RCC_APB2RSTR_SPI1 changed to RCC_APB2RSTR_SPI1RST
      • DBGMCU_APB1_FZ_DBG_IWDEG_STOP changed to DBGMCU_APB1_FZ_DBG_IWDG_STOP
    • GPIO_TypeDef structure: in the comment change AFR[2] address mapping to 0x20-0x24 instead of 0x24-0x28

V1.0.0 / 18-April-2011

Main +Changes

+
  • First official release for STM32F2xx devices
  • stm32f2xx.h
    • Add SYSCFG CMPCR register and bits definition 
    • Peripheral register's definitions: add description and address offset of each register
  • Add startup_stm32f2xx.s startup files for "gcc_ride7" and "TrueSTUDIO" compilers

V1.0.0RC1 / 11-March-2011

Main +Changes

+
  • Official version (V1.0.0) Release Candidate 1
  • stm32f2xx.h
    • Update file's header comments
    • Change "RNG_CR_IM" by "RNG_CR_IE"
    • Update "ETH_MACMIIAR_CR" bits definition
  • system_stm32f2xx.c
    • Implement SystemInit_ExtMemCtl() function
    • Change everywhere "STM3220F_EVAL" by "STM322xG_EVAL"
      • Update SystemCoreClockUpdate() function's header comments
+ +
    +
+

License

+ + +

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless +required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See +the License for the specific language governing permissions and +limitations under the License.
+
+
+

For +complete documentation on STM32 Microcontrollers +visit www.st.com/STM32

+
+

+
+
+

 

+
+ \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/TASKING/cstart_thumb2.asm b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/TASKING/cstart_thumb2.asm new file mode 100644 index 000000000..28f43aab0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/TASKING/cstart_thumb2.asm @@ -0,0 +1,140 @@ + + +;; NOTE: To allow the use of this file for both ARMv6M and ARMv7M, +;; we will only use 16-bit Thumb intructions. + + .extern _lc_ub_stack ; usr/sys mode stack pointer + .extern _lc_ue_stack ; symbol required by debugger + .extern _lc_ub_table ; ROM to RAM copy table + .extern main + .extern _Exit + .extern exit + .weak exit + .global __get_argcv + .weak __get_argcv + .extern __argcvbuf + .weak __argcvbuf + ;;.extern __init_hardware + .extern SystemInit + + .if @defined('__PROF_ENABLE__') + .extern __prof_init + .endif + .if @defined('__POSIX__') + .extern posix_main + .extern _posix_boot_stack_top + .endif + + .global _START + + .section .text.cstart + + .thumb +_START: + ;; anticipate possible ROM/RAM remapping + ;; by loading the 'real' program address + ldr r1,=_Next + bx r1 +_Next: + ;; initialize the stack pointer + ldr r1,=_lc_ub_stack ; TODO: make this part of the vector table + mov sp,r1 + + ;; call a user function which initializes function. + bl SystemInit + + ;; copy initialized sections from ROM to RAM + ;; and clear uninitialized data sections in RAM + + ldr r3,=_lc_ub_table + movs r0,#0 +cploop: + ldr r4,[r3,#0] ; load type + ldr r5,[r3,#4] ; dst address + ldr r6,[r3,#8] ; src address + ldr r7,[r3,#12] ; size + + cmp r4,#1 + beq copy + cmp r4,#2 + beq clear + b done + +copy: + subs r7,r7,#1 + ldrb r1,[r6,r7] + strb r1,[r5,r7] + bne copy + + adds r3,r3,#16 + b cploop + +clear: + subs r7,r7,#1 + strb r0,[r5,r7] + bne clear + + adds r3,r3,#16 + b cploop + +done: + + .if @defined('__POSIX__') + + ;; posix stack buffer for system upbringing + ldr r0,=_posix_boot_stack_top + ldr r0, [r0] + mov sp,r0 + + .else + + ;; load r10 with end of USR/SYS stack, which is + ;; needed in case stack overflow checking is on + ;; NOTE: use 16-bit instructions only, for ARMv6M + ldr r0,=_lc_ue_stack + mov r10,r0 + + .endif + + .if @defined('__PROF_ENABLE__') + bl __prof_init + .endif + + .if @defined('__POSIX__') + ;; call posix_main with no arguments + bl posix_main + .else + ;; retrieve argc and argv (default argv[0]==NULL & argc==0) + bl __get_argcv + ldr r1,=__argcvbuf + ;; call main + bl main + .endif + + ;; call exit using the return value from main() + ;; Note. Calling exit will also run all functions + ;; that were supplied through atexit(). + bl exit + +__get_argcv: ; weak definition + movs r0,#0 + bx lr + + .ltorg + .endsec + + .calls '_START', ' ' + .calls '_START','__init_vector_table' + .if @defined('__PROF_ENABLE__') + .calls '_START','__prof_init' + .endif + .if @defined('__POSIX__') + .calls '_START','posix_main' + .else + .calls '_START','__get_argcv' + .calls '_START','main' + .endif + .calls '_START','exit' + .calls '_START','',0 + + .end diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/TrueSTUDIO/startup_stm32f2xx.s b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/TrueSTUDIO/startup_stm32f2xx.s new file mode 100644 index 000000000..20fd155c6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/TrueSTUDIO/startup_stm32f2xx.s @@ -0,0 +1,514 @@ +/** + ****************************************************************************** + * @file startup_stm32f2xx.s + * @author MCD Application Team + * @version V1.1.3 + * @date 05-March-2012 + * @brief STM32F2xx Devices vector table for Atollic TrueSTUDIO toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the system clock and the external SRAM mounted on + * STM322xG-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m3 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_IRQHandler /* PVD through EXTI Line detection */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_IRQHandler /* EXTI Line0 */ + .word EXTI1_IRQHandler /* EXTI Line1 */ + .word EXTI2_IRQHandler /* EXTI Line2 */ + .word EXTI3_IRQHandler /* EXTI Line3 */ + .word EXTI4_IRQHandler /* EXTI Line4 */ + .word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .word CAN1_TX_IRQHandler /* CAN1 TX */ + .word CAN1_RX0_IRQHandler /* CAN1 RX0 */ + .word CAN1_RX1_IRQHandler /* CAN1 RX1 */ + .word CAN1_SCE_IRQHandler /* CAN1 SCE */ + .word EXTI9_5_IRQHandler /* External Line[9:5]s */ + .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */ + .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */ + .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word TIM4_IRQHandler /* TIM4 */ + .word I2C1_EV_IRQHandler /* I2C1 Event */ + .word I2C1_ER_IRQHandler /* I2C1 Error */ + .word I2C2_EV_IRQHandler /* I2C2 Event */ + .word I2C2_ER_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word USART3_IRQHandler /* USART3 */ + .word EXTI15_10_IRQHandler /* External Line[15:10]s */ + .word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */ + .word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */ + .word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */ + .word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */ + .word TIM8_CC_IRQHandler /* TIM8 Capture Compare */ + .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .word FSMC_IRQHandler /* FSMC */ + .word SDIO_IRQHandler /* SDIO */ + .word TIM5_IRQHandler /* TIM5 */ + .word SPI3_IRQHandler /* SPI3 */ + .word UART4_IRQHandler /* UART4 */ + .word UART5_IRQHandler /* UART5 */ + .word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */ + .word TIM7_IRQHandler /* TIM7 */ + .word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .word ETH_IRQHandler /* Ethernet */ + .word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */ + .word CAN2_TX_IRQHandler /* CAN2 TX */ + .word CAN2_RX0_IRQHandler /* CAN2 RX0 */ + .word CAN2_RX1_IRQHandler /* CAN2 RX1 */ + .word CAN2_SCE_IRQHandler /* CAN2 SCE */ + .word OTG_FS_IRQHandler /* USB OTG FS */ + .word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EV_IRQHandler /* I2C3 event */ + .word I2C3_ER_IRQHandler /* I2C3 error */ + .word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */ + .word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */ + .word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */ + .word OTG_HS_IRQHandler /* USB OTG HS */ + .word DCMI_IRQHandler /* DCMI */ + .word CRYP_IRQHandler /* CRYP crypto */ + .word HASH_RNG_IRQHandler /* Hash and Rng */ + + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Stream0_IRQHandler + .thumb_set DMA1_Stream0_IRQHandler,Default_Handler + + .weak DMA1_Stream1_IRQHandler + .thumb_set DMA1_Stream1_IRQHandler,Default_Handler + + .weak DMA1_Stream2_IRQHandler + .thumb_set DMA1_Stream2_IRQHandler,Default_Handler + + .weak DMA1_Stream3_IRQHandler + .thumb_set DMA1_Stream3_IRQHandler,Default_Handler + + .weak DMA1_Stream4_IRQHandler + .thumb_set DMA1_Stream4_IRQHandler,Default_Handler + + .weak DMA1_Stream5_IRQHandler + .thumb_set DMA1_Stream5_IRQHandler,Default_Handler + + .weak DMA1_Stream6_IRQHandler + .thumb_set DMA1_Stream6_IRQHandler,Default_Handler + + .weak ADC_IRQHandler + .thumb_set ADC_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak DMA1_Stream7_IRQHandler + .thumb_set DMA1_Stream7_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Stream0_IRQHandler + .thumb_set DMA2_Stream0_IRQHandler,Default_Handler + + .weak DMA2_Stream1_IRQHandler + .thumb_set DMA2_Stream1_IRQHandler,Default_Handler + + .weak DMA2_Stream2_IRQHandler + .thumb_set DMA2_Stream2_IRQHandler,Default_Handler + + .weak DMA2_Stream3_IRQHandler + .thumb_set DMA2_Stream3_IRQHandler,Default_Handler + + .weak DMA2_Stream4_IRQHandler + .thumb_set DMA2_Stream4_IRQHandler,Default_Handler + + .weak ETH_IRQHandler + .thumb_set ETH_IRQHandler,Default_Handler + + .weak ETH_WKUP_IRQHandler + .thumb_set ETH_WKUP_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler,Default_Handler + + .weak CAN2_SCE_IRQHandler + .thumb_set CAN2_SCE_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler,Default_Handler + + .weak DMA2_Stream5_IRQHandler + .thumb_set DMA2_Stream5_IRQHandler,Default_Handler + + .weak DMA2_Stream6_IRQHandler + .thumb_set DMA2_Stream6_IRQHandler,Default_Handler + + .weak DMA2_Stream7_IRQHandler + .thumb_set DMA2_Stream7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_OUT_IRQHandler + .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_IN_IRQHandler + .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler + + .weak OTG_HS_WKUP_IRQHandler + .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler + + .weak OTG_HS_IRQHandler + .thumb_set OTG_HS_IRQHandler,Default_Handler + + .weak DCMI_IRQHandler + .thumb_set DCMI_IRQHandler,Default_Handler + + .weak CRYP_IRQHandler + .thumb_set CRYP_IRQHandler,Default_Handler + + .weak HASH_RNG_IRQHandler + .thumb_set HASH_RNG_IRQHandler,Default_Handler + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/arm/startup_stm32f2xx.s b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/arm/startup_stm32f2xx.s new file mode 100644 index 000000000..95ac1fe1f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/arm/startup_stm32f2xx.s @@ -0,0 +1,429 @@ +;******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** +;* File Name : startup_stm32f2xx.s +;* Author : MCD Application Team +;* Version : V1.1.3 +;* Date : 05-March-2012 +;* Description : STM32F2xx devices vector table for MDK-ARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the system clock and the external SRAM mounted on +;* STM322xG-EVAL board to be used as data memory (optional, +;* to be enabled by user) +;* - Branches to main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; +; Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); +; You may not use this file except in compliance with the License. +; You may obtain a copy of the License at: +; +; http://www.st.com/software_license_agreement_liberty_v2 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD FSMC_IRQHandler ; FSMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out + DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In + DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI + DCD OTG_HS_IRQHandler ; USB OTG HS + DCD DCMI_IRQHandler ; DCMI + DCD CRYP_IRQHandler ; CRYP crypto + DCD HASH_RNG_IRQHandler ; Hash and Rng +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Stream0_IRQHandler [WEAK] + EXPORT DMA1_Stream1_IRQHandler [WEAK] + EXPORT DMA1_Stream2_IRQHandler [WEAK] + EXPORT DMA1_Stream3_IRQHandler [WEAK] + EXPORT DMA1_Stream4_IRQHandler [WEAK] + EXPORT DMA1_Stream5_IRQHandler [WEAK] + EXPORT DMA1_Stream6_IRQHandler [WEAK] + EXPORT ADC_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM10_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK] + EXPORT TIM8_UP_TIM13_IRQHandler [WEAK] + EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK] + EXPORT TIM8_CC_IRQHandler [WEAK] + EXPORT DMA1_Stream7_IRQHandler [WEAK] + EXPORT FSMC_IRQHandler [WEAK] + EXPORT SDIO_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Stream0_IRQHandler [WEAK] + EXPORT DMA2_Stream1_IRQHandler [WEAK] + EXPORT DMA2_Stream2_IRQHandler [WEAK] + EXPORT DMA2_Stream3_IRQHandler [WEAK] + EXPORT DMA2_Stream4_IRQHandler [WEAK] + EXPORT ETH_IRQHandler [WEAK] + EXPORT ETH_WKUP_IRQHandler [WEAK] + EXPORT CAN2_TX_IRQHandler [WEAK] + EXPORT CAN2_RX0_IRQHandler [WEAK] + EXPORT CAN2_RX1_IRQHandler [WEAK] + EXPORT CAN2_SCE_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + EXPORT DMA2_Stream5_IRQHandler [WEAK] + EXPORT DMA2_Stream6_IRQHandler [WEAK] + EXPORT DMA2_Stream7_IRQHandler [WEAK] + EXPORT USART6_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_OUT_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_IN_IRQHandler [WEAK] + EXPORT OTG_HS_WKUP_IRQHandler [WEAK] + EXPORT OTG_HS_IRQHandler [WEAK] + EXPORT DCMI_IRQHandler [WEAK] + EXPORT CRYP_IRQHandler [WEAK] + EXPORT HASH_RNG_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Stream0_IRQHandler +DMA1_Stream1_IRQHandler +DMA1_Stream2_IRQHandler +DMA1_Stream3_IRQHandler +DMA1_Stream4_IRQHandler +DMA1_Stream5_IRQHandler +DMA1_Stream6_IRQHandler +ADC_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM9_IRQHandler +TIM1_UP_TIM10_IRQHandler +TIM1_TRG_COM_TIM11_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +OTG_FS_WKUP_IRQHandler +TIM8_BRK_TIM12_IRQHandler +TIM8_UP_TIM13_IRQHandler +TIM8_TRG_COM_TIM14_IRQHandler +TIM8_CC_IRQHandler +DMA1_Stream7_IRQHandler +FSMC_IRQHandler +SDIO_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler +DMA2_Stream0_IRQHandler +DMA2_Stream1_IRQHandler +DMA2_Stream2_IRQHandler +DMA2_Stream3_IRQHandler +DMA2_Stream4_IRQHandler +ETH_IRQHandler +ETH_WKUP_IRQHandler +CAN2_TX_IRQHandler +CAN2_RX0_IRQHandler +CAN2_RX1_IRQHandler +CAN2_SCE_IRQHandler +OTG_FS_IRQHandler +DMA2_Stream5_IRQHandler +DMA2_Stream6_IRQHandler +DMA2_Stream7_IRQHandler +USART6_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +OTG_HS_EP1_OUT_IRQHandler +OTG_HS_EP1_IN_IRQHandler +OTG_HS_WKUP_IRQHandler +OTG_HS_IRQHandler +DCMI_IRQHandler +CRYP_IRQHandler +HASH_RNG_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***** diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s new file mode 100644 index 000000000..65757dd85 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s @@ -0,0 +1,512 @@ +/** + ****************************************************************************** + * @file startup_stm32f2xx.s + * @author MCD Application Team + * @version V1.1.3 + * @date 05-March-2012 + * @brief STM32F2xx Devices vector table for RIDE7 toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the system clock and the external SRAM mounted on + * STM322xG-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m3 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_IRQHandler /* PVD through EXTI Line detection */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_IRQHandler /* EXTI Line0 */ + .word EXTI1_IRQHandler /* EXTI Line1 */ + .word EXTI2_IRQHandler /* EXTI Line2 */ + .word EXTI3_IRQHandler /* EXTI Line3 */ + .word EXTI4_IRQHandler /* EXTI Line4 */ + .word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .word CAN1_TX_IRQHandler /* CAN1 TX */ + .word CAN1_RX0_IRQHandler /* CAN1 RX0 */ + .word CAN1_RX1_IRQHandler /* CAN1 RX1 */ + .word CAN1_SCE_IRQHandler /* CAN1 SCE */ + .word EXTI9_5_IRQHandler /* External Line[9:5]s */ + .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */ + .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */ + .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word TIM4_IRQHandler /* TIM4 */ + .word I2C1_EV_IRQHandler /* I2C1 Event */ + .word I2C1_ER_IRQHandler /* I2C1 Error */ + .word I2C2_EV_IRQHandler /* I2C2 Event */ + .word I2C2_ER_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word USART3_IRQHandler /* USART3 */ + .word EXTI15_10_IRQHandler /* External Line[15:10]s */ + .word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */ + .word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */ + .word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */ + .word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */ + .word TIM8_CC_IRQHandler /* TIM8 Capture Compare */ + .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .word FSMC_IRQHandler /* FSMC */ + .word SDIO_IRQHandler /* SDIO */ + .word TIM5_IRQHandler /* TIM5 */ + .word SPI3_IRQHandler /* SPI3 */ + .word UART4_IRQHandler /* UART4 */ + .word UART5_IRQHandler /* UART5 */ + .word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */ + .word TIM7_IRQHandler /* TIM7 */ + .word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .word ETH_IRQHandler /* Ethernet */ + .word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */ + .word CAN2_TX_IRQHandler /* CAN2 TX */ + .word CAN2_RX0_IRQHandler /* CAN2 RX0 */ + .word CAN2_RX1_IRQHandler /* CAN2 RX1 */ + .word CAN2_SCE_IRQHandler /* CAN2 SCE */ + .word OTG_FS_IRQHandler /* USB OTG FS */ + .word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EV_IRQHandler /* I2C3 event */ + .word I2C3_ER_IRQHandler /* I2C3 error */ + .word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */ + .word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */ + .word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */ + .word OTG_HS_IRQHandler /* USB OTG HS */ + .word DCMI_IRQHandler /* DCMI */ + .word CRYP_IRQHandler /* CRYP crypto */ + .word HASH_RNG_IRQHandler /* Hash and Rng */ + + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Stream0_IRQHandler + .thumb_set DMA1_Stream0_IRQHandler,Default_Handler + + .weak DMA1_Stream1_IRQHandler + .thumb_set DMA1_Stream1_IRQHandler,Default_Handler + + .weak DMA1_Stream2_IRQHandler + .thumb_set DMA1_Stream2_IRQHandler,Default_Handler + + .weak DMA1_Stream3_IRQHandler + .thumb_set DMA1_Stream3_IRQHandler,Default_Handler + + .weak DMA1_Stream4_IRQHandler + .thumb_set DMA1_Stream4_IRQHandler,Default_Handler + + .weak DMA1_Stream5_IRQHandler + .thumb_set DMA1_Stream5_IRQHandler,Default_Handler + + .weak DMA1_Stream6_IRQHandler + .thumb_set DMA1_Stream6_IRQHandler,Default_Handler + + .weak ADC_IRQHandler + .thumb_set ADC_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak DMA1_Stream7_IRQHandler + .thumb_set DMA1_Stream7_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Stream0_IRQHandler + .thumb_set DMA2_Stream0_IRQHandler,Default_Handler + + .weak DMA2_Stream1_IRQHandler + .thumb_set DMA2_Stream1_IRQHandler,Default_Handler + + .weak DMA2_Stream2_IRQHandler + .thumb_set DMA2_Stream2_IRQHandler,Default_Handler + + .weak DMA2_Stream3_IRQHandler + .thumb_set DMA2_Stream3_IRQHandler,Default_Handler + + .weak DMA2_Stream4_IRQHandler + .thumb_set DMA2_Stream4_IRQHandler,Default_Handler + + .weak ETH_IRQHandler + .thumb_set ETH_IRQHandler,Default_Handler + + .weak ETH_WKUP_IRQHandler + .thumb_set ETH_WKUP_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler,Default_Handler + + .weak CAN2_SCE_IRQHandler + .thumb_set CAN2_SCE_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler,Default_Handler + + .weak DMA2_Stream5_IRQHandler + .thumb_set DMA2_Stream5_IRQHandler,Default_Handler + + .weak DMA2_Stream6_IRQHandler + .thumb_set DMA2_Stream6_IRQHandler,Default_Handler + + .weak DMA2_Stream7_IRQHandler + .thumb_set DMA2_Stream7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_OUT_IRQHandler + .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_IN_IRQHandler + .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler + + .weak OTG_HS_WKUP_IRQHandler + .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler + + .weak OTG_HS_IRQHandler + .thumb_set OTG_HS_IRQHandler,Default_Handler + + .weak DCMI_IRQHandler + .thumb_set DCMI_IRQHandler,Default_Handler + + .weak CRYP_IRQHandler + .thumb_set CRYP_IRQHandler,Default_Handler + + .weak HASH_RNG_IRQHandler + .thumb_set HASH_RNG_IRQHandler,Default_Handler + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/iar/startup_stm32f2xx.s b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/iar/startup_stm32f2xx.s new file mode 100644 index 000000000..ba2457912 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/iar/startup_stm32f2xx.s @@ -0,0 +1,629 @@ +;/******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** +;* File Name : startup_stm32f2xx.s +;* Author : MCD Application Team +;* Version : V1.1.3 +;* Date : 05-March-2012 +;* Description : STM32F2xx devices vector table for EWARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* - Configure the system clock and the external SRAM mounted on +;* STM322xG-EVAL board to be used as data memory (optional, +;* to be enabled by user) +;* - Branches to main in the C library (which eventually +;* calls main()). +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); +;* You may not use this file except in compliance with the License. +;* You may obtain a copy of the License at: +;* +;* http://www.st.com/software_license_agreement_liberty_v2 +;* +;* Unless required by applicable law or agreed to in writing, software +;* distributed under the License is distributed on an "AS IS" BASIS, +;* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;* See the License for the specific language governing permissions and +;* limitations under the License. +;* +;*******************************************************************************/ +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD FSMC_IRQHandler ; FSMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out + DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In + DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI + DCD OTG_HS_IRQHandler ; USB OTG HS + DCD DCMI_IRQHandler ; DCMI + DCD CRYP_IRQHandler ; CRYP crypto + DCD HASH_RNG_IRQHandler ; Hash and Rng + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMP_STAMP_IRQHandler + SECTION .text:CODE:REORDER(1) +TAMP_STAMP_IRQHandler + B TAMP_STAMP_IRQHandler + + PUBWEAK RTC_WKUP_IRQHandler + SECTION .text:CODE:REORDER(1) +RTC_WKUP_IRQHandler + B RTC_WKUP_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Stream0_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream0_IRQHandler + B DMA1_Stream0_IRQHandler + + PUBWEAK DMA1_Stream1_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream1_IRQHandler + B DMA1_Stream1_IRQHandler + + PUBWEAK DMA1_Stream2_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream2_IRQHandler + B DMA1_Stream2_IRQHandler + + PUBWEAK DMA1_Stream3_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream3_IRQHandler + B DMA1_Stream3_IRQHandler + + PUBWEAK DMA1_Stream4_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream4_IRQHandler + B DMA1_Stream4_IRQHandler + + PUBWEAK DMA1_Stream5_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream5_IRQHandler + B DMA1_Stream5_IRQHandler + + PUBWEAK DMA1_Stream6_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream6_IRQHandler + B DMA1_Stream6_IRQHandler + + PUBWEAK ADC_IRQHandler + SECTION .text:CODE:REORDER(1) +ADC_IRQHandler + B ADC_IRQHandler + + PUBWEAK CAN1_TX_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN1_TX_IRQHandler + B CAN1_TX_IRQHandler + + PUBWEAK CAN1_RX0_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN1_RX0_IRQHandler + B CAN1_RX0_IRQHandler + + PUBWEAK CAN1_RX1_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN1_RX1_IRQHandler + B CAN1_RX1_IRQHandler + + PUBWEAK CAN1_SCE_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN1_SCE_IRQHandler + B CAN1_SCE_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_TIM9_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM1_BRK_TIM9_IRQHandler + B TIM1_BRK_TIM9_IRQHandler + + PUBWEAK TIM1_UP_TIM10_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM1_UP_TIM10_IRQHandler + B TIM1_UP_TIM10_IRQHandler + + PUBWEAK TIM1_TRG_COM_TIM11_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM1_TRG_COM_TIM11_IRQHandler + B TIM1_TRG_COM_TIM11_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK USART3_IRQHandler + SECTION .text:CODE:REORDER(1) +USART3_IRQHandler + B USART3_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTC_Alarm_IRQHandler + SECTION .text:CODE:REORDER(1) +RTC_Alarm_IRQHandler + B RTC_Alarm_IRQHandler + + PUBWEAK OTG_FS_WKUP_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_FS_WKUP_IRQHandler + B OTG_FS_WKUP_IRQHandler + + PUBWEAK TIM8_BRK_TIM12_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM8_BRK_TIM12_IRQHandler + B TIM8_BRK_TIM12_IRQHandler + + PUBWEAK TIM8_UP_TIM13_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM8_UP_TIM13_IRQHandler + B TIM8_UP_TIM13_IRQHandler + + PUBWEAK TIM8_TRG_COM_TIM14_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM8_TRG_COM_TIM14_IRQHandler + B TIM8_TRG_COM_TIM14_IRQHandler + + PUBWEAK TIM8_CC_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM8_CC_IRQHandler + B TIM8_CC_IRQHandler + + PUBWEAK DMA1_Stream7_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream7_IRQHandler + B DMA1_Stream7_IRQHandler + + PUBWEAK FSMC_IRQHandler + SECTION .text:CODE:REORDER(1) +FSMC_IRQHandler + B FSMC_IRQHandler + + PUBWEAK SDIO_IRQHandler + SECTION .text:CODE:REORDER(1) +SDIO_IRQHandler + B SDIO_IRQHandler + + PUBWEAK TIM5_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM5_IRQHandler + B TIM5_IRQHandler + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + PUBWEAK TIM6_DAC_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM6_DAC_IRQHandler + B TIM6_DAC_IRQHandler + + PUBWEAK TIM7_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM7_IRQHandler + B TIM7_IRQHandler + + PUBWEAK DMA2_Stream0_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream0_IRQHandler + B DMA2_Stream0_IRQHandler + + PUBWEAK DMA2_Stream1_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream1_IRQHandler + B DMA2_Stream1_IRQHandler + + PUBWEAK DMA2_Stream2_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream2_IRQHandler + B DMA2_Stream2_IRQHandler + + PUBWEAK DMA2_Stream3_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream3_IRQHandler + B DMA2_Stream3_IRQHandler + + PUBWEAK DMA2_Stream4_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream4_IRQHandler + B DMA2_Stream4_IRQHandler + + PUBWEAK ETH_IRQHandler + SECTION .text:CODE:REORDER(1) +ETH_IRQHandler + B ETH_IRQHandler + + PUBWEAK ETH_WKUP_IRQHandler + SECTION .text:CODE:REORDER(1) +ETH_WKUP_IRQHandler + B ETH_WKUP_IRQHandler + + PUBWEAK CAN2_TX_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN2_TX_IRQHandler + B CAN2_TX_IRQHandler + + PUBWEAK CAN2_RX0_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN2_RX0_IRQHandler + B CAN2_RX0_IRQHandler + + PUBWEAK CAN2_RX1_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN2_RX1_IRQHandler + B CAN2_RX1_IRQHandler + + PUBWEAK CAN2_SCE_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN2_SCE_IRQHandler + B CAN2_SCE_IRQHandler + + PUBWEAK OTG_FS_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_FS_IRQHandler + B OTG_FS_IRQHandler + + PUBWEAK DMA2_Stream5_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream5_IRQHandler + B DMA2_Stream5_IRQHandler + + PUBWEAK DMA2_Stream6_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream6_IRQHandler + B DMA2_Stream6_IRQHandler + + PUBWEAK DMA2_Stream7_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream7_IRQHandler + B DMA2_Stream7_IRQHandler + + PUBWEAK USART6_IRQHandler + SECTION .text:CODE:REORDER(1) +USART6_IRQHandler + B USART6_IRQHandler + + PUBWEAK I2C3_EV_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C3_EV_IRQHandler + B I2C3_EV_IRQHandler + + PUBWEAK I2C3_ER_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C3_ER_IRQHandler + B I2C3_ER_IRQHandler + + PUBWEAK OTG_HS_EP1_OUT_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_HS_EP1_OUT_IRQHandler + B OTG_HS_EP1_OUT_IRQHandler + + PUBWEAK OTG_HS_EP1_IN_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_HS_EP1_IN_IRQHandler + B OTG_HS_EP1_IN_IRQHandler + + PUBWEAK OTG_HS_WKUP_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_HS_WKUP_IRQHandler + B OTG_HS_WKUP_IRQHandler + + PUBWEAK OTG_HS_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_HS_IRQHandler + B OTG_HS_IRQHandler + + PUBWEAK DCMI_IRQHandler + SECTION .text:CODE:REORDER(1) +DCMI_IRQHandler + B DCMI_IRQHandler + + PUBWEAK CRYP_IRQHandler + SECTION .text:CODE:REORDER(1) +CRYP_IRQHandler + B CRYP_IRQHandler + + PUBWEAK HASH_RNG_IRQHandler + SECTION .text:CODE:REORDER(1) +HASH_RNG_IRQHandler + B HASH_RNG_IRQHandler + + END +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/system_stm32f2xx.c new file mode 100644 index 000000000..cdc57fbd6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.3 + * @date 05-March-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS-SVD_Schema_1_0.xsd b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS-SVD_Schema_1_0.xsd new file mode 100644 index 000000000..17ace6a5e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS-SVD_Schema_1_0.xsd @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_CM4_SIMD.htm b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_CM4_SIMD.htm new file mode 100644 index 000000000..7275e0ef2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_CM4_SIMD.htm @@ -0,0 +1,3809 @@ + + + + CMSIS: Cortex-M4 SIMD Instructions + + + + + + +

CMSIS Support for Cortex-M4 SIMD Instructions

+ +

This file describes the Cortex-M4 SIMD instructions supported by CMSIS.

+

Version: 1.00 - 25. November 2010

+ +

Information in this file, the accompany manuals, and software is
+ Copyright � ARM Ltd.
All rights reserved. +

+ +
+ +

Revision History

+
    +
  • Revision 0.01 - January 2010: Initial version
  • +
  • Revision 0.02 - June 2010: added __QADD, __QSUB
  • +
  • Revision 1.00 - November 2010:
  • +
+ +
+ +

Contents

+ +
    +
  1. About
  2. +
  3. Cortex-M4 SIMD instruction support
  4. +
  5. Examples
  6. +
+ + + +

 

+

About

+

+ CMSIS provides for the Cortex-M4 a set of functions supporting Cortex-M4 SIMD instructions. +

+ +

 

+

Cortex-M4 SIMD instruction support

+

CMSIS supports the following functions for Cortex-M4 instructions: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameMnemonicDescription
__SADD8SADD8GE setting quad 8-bit signed addition
__QADD8QADD8Q setting quad 8-bit saturating addition
__SHADD8SHADD8Quad 8-bit signed addition with halved results
__UADD8UADD8GE setting quad 8-bit unsigned addition
__UQADD8UQADD8Quad 8-bit unsigned saturating addition
__UHADD8UHADD8Quad 8-bit unsigned addition with halved results
__SSUB8SSUB8GE setting quad 8-bit signed subtraction
__QSUB8QSUB8Q setting quad 8-bit saturating subtract
__SHSUB8SHSUB8Quad 8-bit signed subtraction with halved results
__USUB8USUB8GE setting quad 8-bit unsigned subtract
__UQSUB8UQSUB8Quad 8-bit unsigned saturating subtraction
__UHSUB8UHSUB8Quad 8-bit unsigned subtraction with halved results
__SADD16SADD16GE setting dual 16-bit signed addition
__QADD16QADD16Q setting dual 16-bit saturating addition
__SHADD16SHADD16Dual 16-bit signed addition with halved results
__UADD16UADD16GE setting dual 16-bit unsigned addition
__UQADD16UQADD16Dual 16-bit unsigned saturating addition
__UHADD16UHADD16Dual 16-bit unsigned addition with halved results
__SSUB16SSUB16GE setting dual 16-bit signed subtraction
__QSUB16QSUB16Q setting dual 16-bit saturating subtract
__SHSUB16SHSUB16Dual 16-bit signed subtraction with halved results
__USUB16USUB16GE setting dual 16-bit unsigned subtract
__UQSUB16UQSUB16Dual 16-bit unsigned saturating subtraction
__UHSUB16UHSUB16Dual 16-bit unsigned subtraction with halved results
__SASXSASXGE setting dual 16-bit addition and subtraction with exchange
__QASXQASXQ setting dual 16-bit add and subtract with exchange
__SHASXSHASXDual 16-bit signed addition and subtraction with halved results
__UASXUASXGE setting dual 16-bit unsigned addition and subtraction with exchange
__UQASXUQASXDual 16-bit unsigned saturating addition and subtraction with exchange
__UHASXUHASXDual 16-bit unsigned addition and subtraction with halved results and exchange
__SSAXSSAXGE setting dual 16-bit signed subtraction and addition with exchange
__QSAXQSAXQ setting dual 16-bit subtract and add with exchange
__SHSAXSHSAXDual 16-bit signed subtraction and addition with halved results
__USAXUSAXGE setting dual 16-bit unsigned subtract and add with exchange
__UQSAXUQSAXDual 16-bit unsigned saturating subtraction and addition with exchange
__UHSAXUHSAXDual 16-bit unsigned subtraction and addition with halved results and exchange
__USAD8USAD8Unsigned sum of quad 8-bit unsigned absolute difference
__USADA8USADA8Unsigned sum of quad 8-bit unsigned absolute difference with 32-bit accumulate
__SSAT16SSAT16Q setting dual 16-bit saturate
__USAT16USAT16Q setting dual 16-bit unsigned saturate
__UXTB16UXTB16Dual extract 8-bits and zero-extend to 16-bits
__UXTAB16UXTAB16Extracted 16-bit to 32-bit unsigned addition
__SXTB16SXTB16Dual extract 8-bits and sign extend each to 16-bits
__SXTAB16SXTAB16Dual extracted 8-bit to 16-bit signed addition
__SMUADSMUADQ setting sum of dual 16-bit signed multiply
__SMUADXSMUADXQ setting sum of dual 16-bit signed multiply with exchange
__SMLADSMLADQ setting dual 16-bit signed multiply with single 32-bit accumulator
__SMLADXSMLADXQ setting pre-exchanged dual 16-bit signed multiply with single 32-bit accumulator
__SMLALDSMLALDDual 16-bit signed multiply with single 64-bit accumulator
__SMLALDXSMLALDXDual 16-bit signed multiply with exchange with single 64-bit accumulator
__SMUSDSMUSDDual 16-bit signed multiply returning difference
__SMUSDXSMUSDXDual 16-bit signed multiply with exchange returning difference
__SMLSDSMLSDQ setting dual 16-bit signed multiply subtract with 32-bit accumulate
__SMLSDXSMLSDXQ setting dual 16-bit signed multiply with exchange subtract with 32-bit accumulate
__SMLSLDSMLSLDQ setting dual 16-bit signed multiply subtract with 64-bit accumulate
__SMLSLDXSMLSLDXQ setting dual 16-bit signed multiply with exchange subtract with 64-bit accumulate
__SELSELSelect bytes based on GE bits
__QADDQADDQ setting saturating add
__QSUBQSUB/td> + Q setting saturating subtract
+ + + + +

Function __SADD8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SADD8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four 8-bit signed integer additions.
+ The GE bits in the APSR are set according to the results of the additions. +
Parameter +
    +
  • val1: first four 8-bit summands.
  • +
  • val2: second four 8-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the addition of the first bytes from each operand, in the first byte of the return value.
  • +
  • the addition of the second bytes of each operand, in the second byte of the return value.
  • +
  • the addition of the third bytes of each operand, in the third byte of the return value.
  • +
  • the addition of the fourth bytes of each operand, in the fourth byte of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[7:0] ≥ 0 then APSR.GE[0] = 1 else 0
  • +
  • if res[15:8] ≥ 0 then APSR.GE[1] = 1 else 0
  • +
  • if res[23:16] ≥ 0 then APSR.GE[2] = 1 else 0
  • +
  • if res[31:24] ≥ 0 then APSR.GE[3] = 1 else 0
  • +
+
Operation +
+res[7:0]   = val1[7:0]   + val2[7:0]
+res[15:8]  = val1[15:8]  + val2[15:8]
+res[23:16] = val1[23:16] + val2[23:16]
+res[31:24] = val1[31:24] + val2[31:24]
+
+ +

Function __QADD8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __QADD8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four 8-bit integer additions, saturating the results to + the 8-bit signed integer range -27 ≤ x ≤ 27 - 1. +
Parameter +
    +
  • val1: first four 8-bit summands.
  • +
  • val2: second four 8-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the saturated addition of the first byte of each operand in the first byte of the return value.
  • +
  • the saturated addition of the second byte of each operand in the second byte of the return value.
  • +
  • the saturated addition of the third byte of each operand in the third byte of the return value.
  • +
  • the saturated addition of the fourth byte of each operand in the fourth byte of the return value.
  • +
+

The returned results are saturated to the 16-bit signed integer range -27 ≤ x ≤ 27 - 1. +

+
Operation +
+res[7:0]   = val1[7:0]   + val2[7:0]
+res[15:8]  = val1[15:8]  + val2[15:8]
+res[23:16] = val1[23:16] + val2[23:16]
+res[31:24] = val1[31:24] + val2[31:24]
+
+ +

Function __SHADD8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SHADD8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four signed 8-bit integer additions, halving the results. +
Parameter +
    +
  • val1: first four 8-bit summands.
  • +
  • val2: second four 8-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved addition of the first bytes from each operand, in the first byte of the return value.
  • +
  • the halved addition of the second bytes from each operand, in the second byte of the return value.
  • +
  • the halved addition fo the third bytes from each operand, in the third byte of the return value.
  • +
  • the halved addition of the fourth bytes from each operand, in the fourth byte of the return value.
  • +
+
Operation +
+res[7:0]   = (val1[7:0]   + val2[7:0])   >> 1
+res[15:8]  = (val1[15:8]  + val2[15:8])  >> 1
+res[23:16] = (val1[23:16] + val2[23:16]) >> 1
+res[31:24] = (val1[31:24] + val2[31:24]) >> 1
+
+ +

Function __UADD8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UADD8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four unsigned 8-bit integer additions.
+ The GE bits in the APSR are set according to the results. +
Parameter +
    +
  • val1: first four 8-bit summands for each addition.
  • +
  • val2: second four 8-bit summands for each addition.
  • +
+
Return Value +

The function returns:

+
    +
  • the addition of the first bytes in each operand, in the first byte of the return value.
  • +
  • the addition of the second bytes in each operand, in the second byte of the return value.
  • +
  • the addition of the third bytes in each operand, in the third byte of the return value.
  • +
  • the addition of the fourth bytes in each operand, in the fourth byte of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[7:0] ≥ 0x100 then APSR.GE[0] = 1 else 0
  • +
  • if res[15:8] ≥ 0x100 then APSR.GE[1] = 1 else 0
  • +
  • if res[23:16] ≥ 0x100 then APSR.GE[2] = 1 else 0
  • +
  • if res[31:24] ≥ 0x100 then APSR.GE[3] = 1 else 0
  • +
+
Operation +
+res[7:0]   = val1[7:0]   + val2[7:0]
+res[15:8]  = val1[15:8]  + val2[15:8]
+res[23:16] = val1[23:16] + val2[23:16]
+res[31:24] = val1[31:24] + val2[31:24]
+
+ +

Function __UQADD8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UQADD8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four unsigned 8-bit integer additions, saturating the + results to the 8-bit unsigned integer range 0 ≤ x ≤ 28 - 1. +
Parameter +
    +
  • val1: first four 8-bit summands.
  • +
  • val2: second four 8-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the addition of the first bytes in each operand, in the first byte of the return value.
  • +
  • the addition of the second bytes in each operand, in the second byte of the return value.
  • +
  • the addition of the third bytes in each operand, in the third byte of the return value.
  • +
  • the addition of the fourth bytes in each operand, in the fourth byte of the return value.
  • +
+

The results are saturated to the 8-bit unsigned integer range 0 ≤ x ≤ 28 - 1. +

+
Operation +
+res[7:0]   = val1[7:0]   + val2[7:0]
+res[15:8]  = val1[15:8]  + val2[15:8]
+res[23:16] = val1[23:16] + val2[23:16]
+res[31:24] = val1[31:24] + val2[31:24]
+
+ +

Function __UHADD8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UHADD8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four unsigned 8-bit integer additions, halving the results. +
Parameter +
    +
  • val1: first four 8-bit summands.
  • +
  • val2: second four 8-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved addition of the first bytes in each operand, in the first byte of the return value.
  • +
  • the halved addition of the second bytes in each operand, in the second byte of the return value.
  • +
  • the halved addition of the third bytes in each operand, in the third byte of the return value.
  • +
  • the halved addition of the fourth bytes in each operand, in the fourth byte of the return value.
  • +
+
Operation +
+res[7:0]   = (val1[7:0]   + val2[7:0])   >> 1
+res[15:8]  = (val1[15:8]  + val2[15:8])  >> 1
+res[23:16] = (val1[23:16] + val2[23:16]) >> 1
+res[31:24] = (val1[31:24] + val2[31:24]) >> 1
+
+ +

Function __SSUB8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SSUB8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four 8-bit signed integer subtractions.
+ The GE bits in the APSR are set according to the results. +
Parameter +
    +
  • val1: first four 8-bit operands of each subtraction.
  • +
  • val2: second four 8-bit operands of each subtraction.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the first byte in the second operand from the first byte in the + first operand, in the first bytes of the return value.
  • +
  • the subtraction of the second byte in the second operand from the second byte in + the first operand, in the second byte of the return value.
  • +
  • the subtraction of the third byte in the second operand from the third byte in the + first operand, in the third byte of the return value.
  • +
  • the subtraction of the fourth byte in the second operand from the fourth byte in + the first operand, in the fourth byte of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation. If res is the return value, then: +

+
    +
  • if res[8:0] ≥ 0 then APSR.GE[0] = 1 else 0
  • +
  • if res[15:8] ≥ 0 then APSR.GE[1] = 1 else 0
  • +
  • if res[23:16] ≥ 0 then APSR.GE[2] = 1 else 0
  • +
  • if res[31:24] ≥ 0 then APSR.GE[3] = 1 else 0
  • +
+
Operation +
+res[7:0]   = val1[7:0]   - val2[7:0]
+res[15:8]  = val1[15:8]  - val2[15:8]
+res[23:16] = val1[23:16] - val2[23:16]
+res[31:24] = val1[31:24] - val2[31:24]
+
+ +

Function __QSUB8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __QADD8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four 8-bit integer subtractions, saturating the results + to the 8-bit signed integer range -27 ≤ x ≤ 27 - 1. +
Parameter +
    +
  • val1: first four 8-bit operands.
  • +
  • val2: second four 8-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the first byte in the second operand from the first byte in the + first operand, in the first byte of the return value.
  • +
  • the subtraction of the second byte in the second operand from the second byte in + the first operand, in the second byte of the return value.
  • +
  • the subtraction of the third byte in the second operand from the third byte in the + first operand, in the third byte of the return value.
  • +
  • the subtraction of the fourth byte in the second operand from the fourth byte in + the first operand, in the fourth byte of the return value.
  • +
+

The returned results are saturated to the 8-bit signed integer range -27 ≤ x ≤ 27 - 1. +

+
Operation +
+res[7:0]   = val1[7:0]   - val2[7:0]
+res[15:8]  = val1[15:8]  - val2[15:8]
+res[23:16] = val1[23:16] - val2[23:16]
+res[31:24] = val1[31:24] - val2[31:24]
+
+ +

Function __SHSUB8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SHSUB8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four signed 8-bit integer subtractions, halving the + results. +
Parameter +
    +
  • val1: first four 8-bit operands.
  • +
  • val2: second four 8-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved subtraction of the first byte in the second operand from the first byte + in the first operand, in the first byte of the return value.
  • +
  • the halved subtraction of the second byte in the second operand from the second + byte in the first operand, in the second byte of the return value.
  • +
  • the halved subtraction of the third byte in the second operand from the third byte + in the first operand, in the third byte of the return value.
  • +
  • the halved subtraction of the fourth byte in the second operand from the fourth + byte in the first operand, in the fourth byte of the return value.
  • +
+
Operation +
+res[7:0]   = (val1[7:0]   - val2[7:0])  >> 1
+res[15:8]  = (val1[15:8]  - val2[15:8]) >> 1
+res[23:16] = (val1[23:16] - val2[23:16] >> 1
+res[31:24] = (val1[31:24] - val2[31:24] >> 1
+
+ +

Function __USUB8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __USUB8(uint32_t val1, uint32_t val2);
+
DescriptionThis function It enables you to perform four 8-bit unsigned integer subtractions.
+ The GE bits in the APSR are set according to the results. +
Parameter +
    +
  • val1: first four 8-bit operands.
  • +
  • val2: second four 8-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the first byte in the second operand from the first byte in the + first operand, in the first byte of the return value.
  • +
  • the subtraction of the second byte in the second operand from the second byte in + the first operand, in the second byte of the return value.
  • +
  • the subtraction of the third byte in the second operand from the third byte in the + first operand, in the third byte of the return value.
  • +
  • the subtraction of the fourth byte in the second operand from the fourth byte in + the first operand, in the fourth byte of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[7:0] ≥ 0 then APSR.GE[0] = 1 else 0
  • +
  • if res[15:8] ≥ 0 then APSR.GE[1] = 1 else 0
  • +
  • if res[23:16] ≥ 0 then APSR.GE[2] = 1 else 0
  • +
  • if res[31:24] ≥ 0 then APSR.GE[3] = 1 else 0
  • +
+
Operation +
+res[7:0]   = val1[7:0]   - val2[7:0]
+res[15:8]  = val1[15:8]  - val2[15:8]
+res[23:16] = val1[23:16] - val2[23:16]
+res[31:24] = val1[31:24] - val2[31:24]
+
+ +

Function __UQSUB8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UQSUB8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four unsigned 8-bit integer subtractions, saturating + the results to the 8-bit unsigned integer range 0 ≤ x ≤ 28 - 1. +
Parameter +
    +
  • val1: first four 8-bit operands.
  • +
  • val2: second four 8-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the first byte in the second operand from the first byte in the + first operand, in the first byte of the return value.
  • +
  • the subtraction of the second byte in the second operand from the second byte in + the first operand, in the second byte of the return value.
  • +
  • the subtraction of the third byte in the second operand from the third byte in the + first operand, in the third byte of the return value.
  • +
  • the subtraction of the fourth byte in the second operand from the fourth byte in + the first operand, in the fourth byte of the return value.
  • +
+

The results are saturated to the 8-bit unsigned integer range 0 ≤ x ≤ 28 - 1. +

+
Operation +
+res[7:0]   = val1[7:0]   - val2[7:0]
+res[15:8]  = val1[15:8]  - val2[15:8]
+res[23:16] = val1[23:16] - val2[23:16]
+res[31:24] = val1[31:24] - val2[31:24]
+
+ +

Function __UHSUB8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UHSUB8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four unsigned 8-bit integer subtractions, halving the + results. +
Parameter +
    +
  • val1: first four 8-bit operands.
  • +
  • val2: second four 8-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved subtraction of the first byte in the second operand from the first byte + in the first operand, in the first byte of the return value.
  • +
  • the halved subtraction of the second byte in the second operand from the second + byte in the first operand, in the second byte of the return value.
  • +
  • the halved subtraction of the third byte in the second operand from the third byte + in the first operand, in the third byte of the return value.
  • +
  • the halved subtraction of the fourth byte in the second operand from the fourth + byte in the first operand, in the fourth byte of the return value.
  • +
+
Operation +
+res[7:0]   = (val1[7:0]   - val2[7:0])   >> 1
+res[15:8]  = (val1[15:8]  - val2[15:8])  >> 1
+res[23:16] = (val1[23:16] - val2[23:16]) >> 1
+res[31:24] = (val1[31:24] - val2[31:24]) >> 1
+
+ +

Function __SADD16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SADD16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two 16-bit signed integer additions.
+ The GE bits in the APSR are set according to the results of the additions. +
Parameter +
    +
  • val1: first two 16-bit summands.
  • +
  • val2: second two 16-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the addition of the low halfwords in the low halfword of the return value.
  • +
  • the addition of the high halfwords in the high halfword of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00
  • +
  • if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00
  • +
+
Operation +
+res[15:0]  = val1[15:0]  + val2[15:0]
+res[31:16] = val1[31:16] + val2[31:16]
+
+ +

Function __QADD16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __QADD16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two 16-bit integer arithmetic additions in parallel, + saturating the results to the 16-bit signed integer range -215 ≤ x ≤ 215 - 1. +
Parameter +
    +
  • val1: first two 16-bit summands.
  • +
  • val2: second two 16-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the saturated addition of the low halfwords in the low halfword of the return value.
  • +
  • the saturated addition of the high halfwords in the high halfword of the return value.
  • +
+

The returned results are saturated to the 16-bit signed integer + range -215 ≤ x ≤ 215 - 1 +

+
Operation +
+res[15:0]  = val1[15:0]  + val2[15:0]
+res[16:31] = val1[31:16] + val2[31:16]
+
+ +

Function __SHADD16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SHADD16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two signed 16-bit integer additions, halving the + results. +
Parameter +
    +
  • val1: first two 16-bit summands.
  • +
  • val2: second two 16-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved addition of the low halfwords from each operand, in the low halfword + of the return value.
  • +
  • the halved addition of the high halfwords from each operand, in the high halfword + of the return value.
  • +
+
Operation +
+res[15:0]  = (val1[15:0]  + val2[15:0])  >> 1
+res[31:16] = (val1[31:16] + val2[31:16]) >> 1
+
+ +

Function __UADD16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UADD16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two 16-bit unsigned integer additions.
+ The GE bits in the APSR are set according to the results. +
Parameter +
    +
  • val1: first two 16-bit summands for each addition.
  • +
  • val2: second two 16-bit summands for each addition.
  • +
+
Return Value +

The function returns:

+
    +
  • the addition of the low halfwords in each operand, in the low halfword of the + return value.
  • +
  • the addition of the high halfwords in each operand, in the high halfword of the + return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[15:0] ≥ 0x10000 then APSR.GE[0] = 11 else 00
  • +
  • if res[31:16] ≥ 0x10000 then APSR.GE[1] = 11 else 00
  • +
+
Operation +
+res[15:0]  = val1[15:0]  + val2[15:0]
+res[31:16] = val1[31:16] + val2[31:16]
+
+ +

Function __UQADD16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UQADD16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two unsigned 16-bit integer additions, saturating the + results to the 16-bit unsigned integer range 0 ≤ x ≤ 216 - 1. +
Parameter +
    +
  • val1: first two 16-bit summands.
  • +
  • val2: second two 16-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the addition of the low halfword in the first operand and the low halfword in the + second operand, in the low halfword of the return value.
  • +
  • the addition of the high halfword in the first operand and the high halfword in the + second operand, in the high halfword of the return value.
  • +
+

The results are saturated to the 16-bit unsigned integer + range 0 ≤ x ≤ 216 - 1. +

+
Operation +
+res[15:0]  = val1[15:0]  + val2[15:0]
+res[31:16] = val1[31:16] + val2[31:16]
+
+ +

Function __UHADD16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UHADD16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two unsigned 16-bit integer additions, halving the + results. +
Parameter +
    +
  • val1: first two 16-bit summands.
  • +
  • val2: second two 16-bit summands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved addition of the low halfwords in each operand, in the low halfword of + the return value.
  • +
  • the halved addition of the high halfwords in each operand, in the high halfword + of the return value.
  • +
+
Operation +
+res[15:0]  = (val1[15:0]  + val2[15:0])  >> 1
+res[31:16] = (val1[31:16] + val2[31:16]) >> 1
+
+ +

Function __SSUB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SSUB16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two 16-bit signed integer subtractions.
+ The GE bits in the APSR are set according to the results. +
Parameter +
    +
  • val1: first two 16-bit operands of each subtraction.
  • +
  • val2: second two 16-bit operands of each subtraction.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the low halfword in the second operand from the low halfword + in the first operand, in the low halfword of the return value.
  • +
  • the subtraction of the high halfword in the second operand from the high halfword + in the first operand, in the high halfword of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00
  • +
  • if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00
  • +
+
Operation +
+res[15:0]  = val1[15:0]  - val2[15:0]
+res[31:16] = val1[31:16] - val2[31:16]
+
+ +

Function __QSUB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __QSUB16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two 16-bit integer subtractions, saturating the + results to the 16-bit signed integer range -215 ≤ x ≤ 215 - 1. +
Parameter +
    +
  • val1: first two 16-bit operands.
  • +
  • val2: second two 16-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the saturated subtraction of the low halfword in the second operand from the low + halfword in the first operand, in the low halfword of the returned result.
  • +
  • the saturated subtraction of the high halfword in the second operand from the high + halfword in the first operand, in the high halfword of the returned result.
  • +
+

The returned results are saturated to the 16-bit signed integer + range -215 ≤ x ≤ 215 - 1. +

+
Operation +
+res[15:0]  = val1[15:0]  - val2[15:0]
+res[31:16] = val1[31:16] - val2[31:16]
+
+ +

Function __SHSUB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SHSUB16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two signed 16-bit integer subtractions, halving the + results. +
Parameter +
    +
  • val1: first two 16-bit operands.
  • +
  • val2: second two 16-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved subtraction of the low halfword in the second operand from the low + halfword in the first operand, in the low halfword of the return value.
  • +
  • the halved subtraction of the high halfword in the second operand from the high + halfword in the first operand, in the high halfword of the return value.
  • +
+
Operation +
+res[15:0]  = (val1[15:0]  - val2[15:0])  >> 1
+res[31:16] = (val1[31:16] - val2[31:16]) >> 1
+
+ +

Function __USUB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __USUB16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two 16-bit unsigned integer subtractions.
+ The GE bits in the APSR are set according to the results. +
Parameter +
    +
  • val1: first two 16-bit operands.
  • +
  • val2: second two 16-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the low halfword in the second operand from the low halfword + in the first operand, in the low halfword of the return value.
  • +
  • the subtraction of the high halfword in the second operand from the high halfword + in the first operand, in the high halfword of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00
  • +
  • if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00
  • +
+
Operation +
+res[15:0]  = val1[15:0]  - val2[15:0]
+res[31:16] = val1[31:16] - val2[31:16]
+
+ +

Function __UQSUB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UQSUB16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two unsigned 16-bit integer subtractions, saturating + the results to the 16-bit unsigned integer range 0 ≤ x ≤ 216 - 1. +
Parameter +
    +
  • val1: first two 16-bit operands for each subtraction.
  • +
  • val2: second two 16-bit operands for each subtraction.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the low halfword in the second operand from the low halfword + in the first operand, in the low halfword of the return value.
  • +
  • the subtraction of the high halfword in the second operand from the high halfword + in the first operand, in the high halfword of the return value.
  • +
+

The results are saturated to the 16-bit unsigned integer range 0 ≤ x ≤ 216 - 1. +

+
Operation +
+res[15:0]  = val1[15:0]  - val2[15:0]
+res[31:16] = val1[31:16] - val2[31:16]
+
+ +

Function __UHSUB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UHSUB16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two unsigned 16-bit integer subtractions, halving + the results. +
Parameter +
    +
  • val1: first two 16-bit operands.
  • +
  • val2: second two 16-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved subtraction of the low halfword in the second operand from the low + halfword in the first operand, in the low halfword of the return value.
  • +
  • the halved subtraction of the high halfword in the second operand from the high + halfword in the first operand, in the high halfword of the return value.
  • +
+
Operation +
+res[15:0]  = (val1[15:0]  - val2[15:0])  >> 1
+res[31:16] = (val1[31:16] - val2[31:16]) >> 1
+
+ +

Function __SASX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SASX(uint32_t val1, uint32_t val2);
+
DescriptionThis function inserts an SASX instruction into the instruction stream generated by the + compiler. It enables you to exchange the halfwords of the second operand, add the high + halfwords and subtract the low halfwords.
+ The GE bits in the APRS are set according to the results. +
Parameter +
    +
  • val1: first operand for the subtraction in the low halfword, and the + first operand for the addition in the high halfword.
  • +
  • val2: second operand for the subtraction in the high halfword, and the + second operand for the addition in the low halfword.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the high halfword in the second operand from the low halfword + in the first operand, in the low halfword of the return value.
  • +
  • the addition of the high halfword in the first operand and the low halfword in the + second operand, in the high halfword of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00
  • +
  • if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00
  • +
+
Operation +
+res[15:0]  = val1[15:0] - val2[31:16]
+res[31:16] = val1[31:16] + val2[15:0]
+
+ +

Function __QASX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __QASX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the halfwords of the one operand, then add the high + halfwords and subtract the low halfwords, saturating the results to the 16-bit signed + integer range -215 ≤ x ≤ 215 - 1. +
Parameter +
    +
  • val1: first operand for the subtraction in the low halfword, and the + first operand for the addition in the high halfword.
  • +
  • val2: second operand for the subtraction in the high halfword, and the + second operand for the addition in the low halfword.
  • +
+
Return Value +

The function returns:

+
    +
  • the saturated subtraction of the high halfword in the second operand from the low + halfword in the first operand, in the low halfword of the return value.
  • +
  • the saturated addition of the high halfword in the first operand and the low + halfword in the second operand, in the high halfword of the return value.
  • +
+

The returned results are saturated to the 16-bit signed integer + range -215 ≤ x ≤ 215 - 1. +

+
Operation +
+res[15:0]  = val1[15:0]  - val2[31:16]
+res[31:16] = val1[31:16] + val2[15:0]
+
+ +

Function __SHASX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SHASX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the two halfwords of one operand, perform one + signed 16-bit integer addition and one signed 16-bit subtraction, and halve the results. +
Parameter +
    +
  • val1: first 16-bit operands.
  • +
  • val2: second 16-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved subtraction of the high halfword in the second operand from the low + halfword in the first operand, in the low halfword of the return value.
  • +
  • the halved subtraction of the low halfword in the second operand from the high + halfword in the first operand, in the high halfword of the return value.
  • +
+
Operation +
+res[15:0]  = (val1[15:0]  - val2[31:16]) >> 1
+res[31:16] = (val1[31:16] - val2[15:0])  >> 1
+
+ +

Function __UASX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UASX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the two halfwords of the second operand, add the + high halfwords and subtract the low halfwords.
+ The GE bits in the APSR are set according to the results. +
Parameter +
    +
  • val1: first operand for the subtraction in the low halfword, and the + first operand for the addition in the high halfword.
  • +
  • val2: second operand for the subtraction in the high halfword and the + second operand for the addition in the low halfword.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the high halfword in the second operand from the low halfword + in the first operand, in the low halfword of the return value.
  • +
  • the addition of the high halfword in the first operand and the low halfword in the + second operand, in the high halfword of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00
  • +
  • if res[31:16] ≥ 0x10000 then APSR.GE[3:2] = 11 else 00
  • +
+
Operation +
+res[15:0]  = val1[15:0]  - val2[31:16]
+res[31:16] = val1[31:16] + val2[15:0]
+
+ +

Function __UQASX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UQASX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the halfwords of the second operand and perform + one unsigned 16-bit integer addition and one unsigned 16-bit subtraction, saturating the + results to the 16-bit unsigned integer range 0 ≤ x ≤ 216 - 1. +
Parameter +
    +
  • val1: first two 16-bit operands.
  • +
  • val2: second two 16-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the subtraction of the high halfword in the second operand from the low halfword + in the first operand, in the low halfword of the return value.
  • +
  • the subtraction of the low halfword in the second operand from the high halfword + in the first operand, in the high halfword of the return value.
  • +
+

The results are saturated to the 16-bit unsigned integer + range 0 ≤ x ≤ 216 - 1. +

+
Operation +
+res[15:0]  = val1[15:0]  - val2[31:16]
+res[31:16] = val1[31:16] + val2[15:0]
+
+ +

Function __UHASX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UHASX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the halfwords of the second operand, add the high + halfwords and subtract the low halfwords, halving the results. +
Parameter +
    +
  • val1: first operand for the subtraction in the low halfword, and the + first operand for the addition in the high halfword.
  • +
  • val2: second operand for the subtraction in the high halfword, and the + second operand for the addition in the low halfword.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved subtraction of the high halfword in the second operand from the low + halfword in the first operand.
  • +
  • the halved addition of the high halfword in the first operand and the low halfword + in the second operand.
  • +
+
Operation +
+res[15:0]  = (val1[15:0]  - val2[31:16]) >> 1
+res[31:16] = (val1[31:16] + val2[15:0])  >> 1
+
+ +

Function __SSAX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SSAX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the two halfwords of one operand and perform one + 16-bit integer subtraction and one 16-bit addition.
+ The GE bits in the APSR are set according to the results. +
Parameter +
    +
  • val1: first operand for the addition in the low halfword, and the first + operand for the subtraction in the high halfword.
  • +
  • val2: second operand for the addition in the high halfword, and the + second operand for the subtraction in the low halfword.
  • +
+
Return Value +

The function returns:

+
    +
  • the addition of the low halfword in the first operand and the high halfword in the + second operand, in the low halfword of the return value.
  • +
  • the subtraction of the low halfword in the second operand from the high halfword + in the first operand, in the high halfword of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00
  • +
  • if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00
  • +
+
Operation +
+res[15:0]  = val1[15:0]  + val2[31:16]
+res[31:16] = val1[31:16] - val2[15:0]
+
+ +

Function __QSAX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __QSAX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the halfwords of one operand, then subtract the + high halfwords and add the low halfwords, saturating the results to the 16-bit signed + integer range -215 ≤ x ≤ 215 - 1. +
Parameter +
    +
  • val1: first operand for the addition in the low halfword, and the first + operand for the subtraction in the high halfword.
  • +
  • val2: second operand for the addition in the high halfword, and the + second operand for the subtraction in the low halfword.
  • +
+
Return Value +

The function returns:

+
    +
  • the saturated addition of the low halfword of the first operand and the high + halfword of the second operand, in the low halfword of the return value.
  • +
  • the saturated subtraction of the low halfword of the second operand from the high + halfword of the first operand, in the high halfword of the return value.
  • +
+

The returned results are saturated to the 16-bit signed integer + range -215 ≤ x ≤ 215 - 1. +

+
Operation +
+res[15:0]  = val1[15:0]  + val2[31:16]
+res[31:16] = val1[31:16] - val2[15:0]
+
+ +

Function __SHSAX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SHSAX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the two halfwords of one operand, perform one + signed 16-bit integer subtraction and one signed 16-bit addition, and halve the results. +
Parameter +
    +
  • val1: first 16-bit operands.
  • +
  • val2: second 16-bit operands.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved addition of the low halfword in the first operand and the high halfword + in the second operand, in the low halfword of the return value.
  • +
  • the halved subtraction of the low halfword in the second operand from the high + halfword in the first operand, in the high halfword of the return value.
  • +
+
Operation +
+res[15:0]  = (val1[15:0]  + val2[31:16]) >> 1
+res[31:16] = (val1[31:16] - val2[15:0])  >> 1
+
+ +

Function __USAX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __USAX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the halfwords of the second operand, subtract the + high halfwords and add the low halfwords.
+ The GE bits in the APSR are set according to the results. +
Parameter +
    +
  • val1: first operand for the addition in the low halfword, and the first + operand for the subtraction in the high halfword.
  • +
  • val2: second operand for the addition in the high halfword, and the + second operand for the subtraction in the low halfword.
  • +
+
Return Value +

The function returns:

+
    +
  • the addition of the low halfword in the first operand and the high halfword in the + second operand, in the low halfword of the return value.
  • +
  • the subtraction of the low halfword in the second operand from the high halfword + in the first operand, in the high halfword of the return value.
  • +
+

Each bit in APSR.GE is set or cleared for each byte in the return value, depending on + the results of the operation.
+ If res is the return value, then: +

+
    +
  • if res[15:0] ≥ 0x10000 then APSR.GE[1:0] = 11 else 00
  • +
  • if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00
  • +
+
Operation +
+res[15:0]  = val1[15:0]  + val2[31:16]
+res[31:16] = val1[31:16] - val2[15:0]
+
+ +

Function __UQSAX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UQSAX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the halfwords of the second operand and perform + one unsigned 16-bit integer subtraction and one unsigned 16-bit addition, saturating the + results to the 16-bit unsigned integer range 0 ≤ x ≤ 216 - 1. +
Parameter +
    +
  • val1: first 16-bit operand for the addition in the low halfword, and the + first 16-bit operand for the subtraction in the high halfword.
  • +
  • val2: second 16-bit halfword for the addition in the high halfword, + and the second 16-bit halfword for the subtraction in the low halfword.
  • +
+
Return Value +

The function returns:

+
    +
  • the addition of the low halfword in the first operand and the high halfword in the + second operand, in the low halfword of the return value.
  • +
  • the subtraction of the low halfword in the second operand from the high halfword + in the first operand, in the high halfword of the return value.
  • +
+

The results are saturated to the 16-bit unsigned integer + range 0 ≤ x ≤ 216 - 1. +

+
Operation +
+res[15:0]  = val1[15:0]  + val2[31:16]
+res[31:16] = val1[31:16] - val2[15:0]
+
+ +

Function __UHSAX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UHSAX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to exchange the halfwords of the second operand, subtract the + high halfwords and add the low halfwords, halving the results. +
Parameter +
    +
  • val1: first operand for the addition in the low halfword, and the first + operand for the subtraction in the high halfword.
  • +
  • val2: second operand for the addition in the high halfword, and the + second operand for the subtraction in the low halfword.
  • +
+
Return Value +

The function returns:

+
    +
  • the halved addition of the high halfword in the second operand and the low + halfword in the first operand, in the low halfword of the return value.
  • +
  • the halved subtraction of the low halfword in the second operand from the high + halfword in the first operand, in the high halfword of the return value.
  • +
+
Operation +
+res[15:0]  = (val1[15:0]  + val2[31:16]) >> 1
+res[31:16] = (val1[31:16] - val2[15:0])  >> 1
+
+ +

Function __USAD8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __USAD8(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform four unsigned 8-bit subtractions, and add the + absolute values of the differences together, returning the result as a single unsigned + integer. +
Parameter +
    +
  • val1: first four 8-bit operands for the subtractions.
  • +
  • val2: second four 8-bit operands for the subtractions.
  • +
+
Return Value +

The function returns the sum of the absolute differences of:

+
    +
  • the subtraction of the first byte in the second operand from the first byte in the + first operand.
  • +
  • the subtraction of the second byte in the second operand from the second byte in + the first operand.
  • +
  • the subtraction of the third byte in the second operand from the third byte in the + first operand.
  • +
  • the subtraction of the fourth byte in the second operand from the fourth byte in + the first operand.
  • +
+

The sum is returned as a single unsigned integer.

+
Operation +
+absdiff1  = val1[7:0]   - val2[7:0]
+absdiff2  = val1[15:8]  - val2[15:8]
+absdiff3  = val1[23:16] - val2[23:16]
+absdiff4  = val1[31:24] - val2[31:24]
+res[31:0] = absdiff1 + absdiff2 + absdiff3 + absdiff4
+
+ +

Function __USADA8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __USADA8(uint32_t val1, uint32_t val2, uint32_t val3);
+
DescriptionThis function enables you to perform four unsigned 8-bit subtractions, and add the + absolute values of the differences to a 32-bit accumulate operand. +
Parameter +
    +
  • val1: first four 8-bit operands for the subtractions.
  • +
  • val2: second four 8-bit operands for the subtractions.
  • +
  • val3: accumulation value.
  • +
+
Return Value +

The function returns the sum of the absolute differences of the following + bytes, added to the accumulation value:

+
    +
  • the subtraction of the first byte in the second operand from the first byte in the + first operand.
  • +
  • the subtraction of the second byte in the second operand from the second byte in + the first operand.
  • +
  • the subtraction of the third byte in the second operand from the third byte in the + first operand.
  • +
  • the subtraction of the fourth byte in the second operand from the fourth byte in + the first operand.
  • +
+
Operation +
+absdiff1  = val1[7:0]   - val2[7:0]
+absdiff2  = val1[15:8]  - val2[15:8]
+absdiff3  = val1[23:16] - val2[23:16]
+absdiff4  = val1[31:24] - val2[31:24]
+sum       = absdiff1 + absdiff2 + absdiff3 + absdiff4
+res[31:0] = sum[31:0] + val3[31:0]
+
+ +

Function __SSAT16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SSAT16(uint32_t val1, const uint32_t val2);
+
DescriptionThis function enables you to saturate two signed 16-bit values to a selected signed range.
+ The Q bit is set if either operation saturates. +
Parameter +
    +
  • val1: two signed 16-bit values to be saturated.
  • +
  • val2: bit position for saturation, an integral constant expression in the + range 1 to 16.
  • +
+
Return Value +

The function returns:

+
    +
  • the signed saturation of the low halfword in val1, saturated to the bit position + specified in val2 and returned in the low halfword of the return value.
  • +
  • the signed saturation of the high halfword in val1, saturated to the bit position + specified in val2 and returned in the high halfword of the return value.
  • +
+
Operation +
+Saturate halfwords in val1 to the signed range specified by the bit position in val2
+
+ +

Function __USAT16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __USAT16(uint32_t val1, const uint32_t val2);
+
DescriptionThis function enables you to saturate two signed 16-bit values to a selected unsigned + range.
+ The Q bit is set if either operation saturates. +
Parameter +
    +
  • val1: two 16-bit values that are to be saturated.
  • +
  • val2: bit position for saturation, and must be an integral constant + expression in the range 0 to 15.
  • +
+
Return Value +

The function returns the saturation of the two signed 16-bit values, as non-negative values.

+
    +
  • the saturation of the low halfword in val1, saturated to the bit position + specified in val2 and returned in the low halfword of the return value.
  • +
  • the saturation of the high halfword in val1, saturated to the bit position + specified in val2 and returned in the high halfword of the return value.
  • +
+
Operation +
+Saturate halfwords in val1 to the unsigned range specified by the bit position in val2
+
+ +

Function __UXTB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UXTB16(uint32_t val);
+
DescriptionThis function enables you to extract two 8-bit values from an operand and zero-extend + them to 16 bits each. +
Parameter +
    +
  • val1: two 8-bit values in val[7:0] and val[23:16] to be sign-extended.
  • +
+
Return Value +

The function returns the 8-bit values zero-extended to 16-bit values.

+
    +
  • zero-extended value of val[7:0] in the low halfword of the return value.
  • +
  • zero-extended value of val[23:16] in the high halfword of the return value.
  • +
+
Operation +
+res[15:0]  = ZeroExtended(val[7:0]  )
+res[31:16] = ZeroExtended(val[23:16])
+
+ +

Function __UXTAB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __UXTAB16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to extract two 8-bit values from one operand, zero-extend them + to 16 bits each, and add the results to two 16-bit values from another operand. +
Parameter +
    +
  • val1: value added to the zero-extended to 16-bit values.
  • +
  • val2: two 8-bit values to be extracted and zero-extended.
  • +
+
Return Value +

The function returns the 8-bit values in val2, zero-extended to 16-bit values + and added to val1.

+
Operation +
+res[15:0]  = ZeroExt(val2[7:0]   to 16 bits) + val1[15:0]
+res[31:16] = ZeroExt(val2[31:16] to 16 bits) + val1[31:16]
+
+ +

Function __SXTB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SXTB16(uint32_t val);
+
DescriptionThis function enables you to extract two 8-bit values from an operand and sign-extend + them to 16 bits each. +
Parameter +
    +
  • val1: two 8-bit values in val[7:0] and val[23:16] to be sign-extended.
  • +
+
Return Value +

The function returns the 8-bit values sign-extended to 16-bit values.

+
    +
  • sign-extended value of val[7:0] in the low halfword of the return value.
  • +
  • sign-extended value of val[23:16] in the high halfword of the return value.
  • +
+
Operation +
+res[15:0]  = SignExtended(val[7:0]
+res[31:16] = SignExtended(val[23:16]
+
+ +

Function __SXTAB16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SXTAB16(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to extract two 8-bit values from the second operand (at bit + positions [7:0] and [23:16]), sign-extend them to 16-bits each, and add the results to the + first operand. +
Parameter +
    +
  • val1: values added to the zero-extended to 16-bit values.
  • +
  • val2: two 8-bit values to be extracted and zero-extended.
  • +
+
Return Value +

The function returns the addition of val1 and val2, where the 8-bit values in + val2[7:0] and val2[23:16] have been extracted and sign-extended prior to the addition.

+
Operation +
+res[15:0]  = val1[15:0]  + SignExtended(val2[7:0])
+res[31:16] = val1[31:16] + SignExtended(val2[23:16])
+
+ +

Function __SMUAD

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SMUAD(uint32_t val1, uint32_t val2);
+
DescriptionThis function It enables you to perform two 16-bit signed multiplications, adding the + products together.
+ The Q bit is set if the addition overflows. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
+
Return Value +

The function returns the sum of the products of the two 16-bit signed multiplications.

+
Operation +
+p1 = val1[15:0]  * val2[15:0]
+p2 = val1[31:16] * val2[31:16]
+res[31:0] = p1 + p2
+
+ +

Function __SMUADX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SMUADX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two 16-bit signed multiplications with exchanged + halfwords of the second operand, adding the products together.
+ The Q bit is set if the addition overflows. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
+
Return Value +

The function returns the sum of the products of the two 16-bit signed multiplications with exchanged + halfwords of the second operand.

+
Operation +
+p1 = val1[15:0]  * val2[31:16]
+p2 = val1[31:16] * val2[15:0]
+res[31:0] = p1 + p2
+
+ +

Function __SMLAD

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SMLAD(uint32_t val1, uint32_t val2, uint32_t val3);
+
DescriptionThis function enables you to perform two signed 16-bit multiplications, adding both + results to a 32-bit accumulate operand.
+ The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
  • val2: accumulate value.
  • +
+
Return Value +

The function returns the product of each multiplication added to the accumulate + value, as a 32-bit integer.

+
Operation +
+p1 = val1[15:0]  * val2[15:0]
+p2 = val1[31:16] * val2[31:16]
+res[31:0] = p1 + p2 + val3[31:0]
+
+ +

Function __SMLADX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SMLADX(uint32_t val1, uint32_t val2, uint32_t val3);
+
DescriptionThis function enables you to perform two signed 16-bit multiplications with exchanged + halfwords of the second operand, adding both results to a 32-bit accumulate operand.
+ The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
  • val2: accumulate value.
  • +
+
Return Value +

The function returns the product of each multiplication with exchanged + halfwords of the second operand added to the accumulate value, as a 32-bit integer.

+
Operation +
+p1 = val1[15:0]  * val2[31:16]
+p2 = val1[31:16] * val2[15:0]
+res[31:0] = p1 + p2 + val3[31:0]
+
+ +

Function __SMLALD

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint64_t __SMLALD(uint32_t val1, uint32_t val2, uint64_t val3);
+
DescriptionThis function enables you to perform two signed 16-bit multiplications, adding both + results to a 64-bit accumulate operand. Overflow is only possible as a result of the 64-bit + addition. This overflow is not detected if it occurs. Instead, the result wraps around + modulo264. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
  • val2: accumulate value.
  • +
+
Return Value +

The function returns the product of each multiplication added to the accumulate value.

+
Operation +
+p1 = val1[15:0]  * val2[15:0]
+p2 = val1[31:16] * val2[31:16]
+sum = p1 + p2 + val3[63:32][31:0]
+res[63:32] = sum[63:32]
+res[31:0]  = sum[31:0]
+
+ +

Function __SMLALDX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+unsigned long long __SMLALDX(uint32_t val1, uint32_t val2, unsigned long long val3);
+
DescriptionThis function enables you to exchange the halfwords of the second operand, and perform + two signed 16-bit multiplications, adding both results to a 64-bit accumulate operand. + Overflow is only possible as a result of the 64-bit addition. This overflow is not detected + if it occurs. Instead, the result wraps around modulo264. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
  • val2: accumulate value.
  • +
+
Return Value +

The function returns the product of each multiplication added to the accumulate value.

+
Operation +
+p1 = val1[15:0]  * val2[31:16]
+p2 = val1[31:16] * val2[15:0]
+sum = p1 + p2 + val3[63:32][31:0]
+res[63:32] = sum[63:32]
+res[31:0] = sum[31:0]
+
+ +

Function __SMUSD

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SMUSD(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two 16-bit signed multiplications, taking the + difference of the products by subtracting the high halfword product from the low + halfword product. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
+
Return Value +

The function returns the difference of the products of the two 16-bit signed multiplications.

+
Operation +
+p1 = val1[15:0]  * val2[15:0]
+p2 = val1[31:16] * val2[31:16]
+res[31:0] = p1 - p2
+
+ +

Function __SMUSDX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SMUSDX(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to perform two 16-bit signed multiplications, subtracting one + of the products from the other. The halfwords of the second operand are exchanged + before performing the arithmetic. This produces top * bottom and bottom * top + multiplication. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
+
Return Value +

The function returns the difference of the products of the two 16-bit signed multiplications.

+
Operation +
+p1 = val1[15:0]  * val2[31:16]
+p2 = val1[31:16] * val2[15:0]
+res[31:0] = p1 - p2
+
+ +

Function __SMLSD

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SMLSD(uint32_t val1, uint32_t val2, uint32_t val3);
+
DescriptionThis function enables you to perform two 16-bit signed multiplications, take the + difference of the products, subtracting the high halfword product from the low halfword + product, and add the difference to a 32-bit accumulate operand.
+ The Q bit is set if the accumulation overflows. Overflow cannot occur during the multiplications or the + subtraction. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
  • val3: accumulate value.
  • +
+
Return Value +

The function returns the difference of the product of each multiplication, added + to the accumulate value.

+
Operation +
+p1 = val1[15:0]  * val2[15:0]
+p2 = val1[31:16] * val2[31:16]
+res[31:0] = p1 - p2 + val3[31:0]
+
+ +

Function __SMLSDX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SMLSDX(uint32_t val1, uint32_t val2, uint32_t val3);
+
DescriptionThis function enables you to exchange the halfwords in the second operand, then perform + two 16-bit signed multiplications. The difference of the products is added to a 32-bit + accumulate operand.
+ The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications or the subtraction. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
  • val3: accumulate value.
  • +
+
Return Value +

The function returns the difference of the product of each multiplication, added + to the accumulate value.

+
Operation +
+p1 = val1[15:0]  * val2[31:16]
+p2 = val1[31:16] * val2[15:0]
+res[31:0] = p1 - p2 + val3[31:0]
+
+ +

Function __SMLSLD

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint64_t __SMLSLD(uint32_t val1, uint32_t val2, uint64_t val3);
+
DescriptionThis function It enables you to perform two 16-bit signed multiplications, take the + difference of the products, subtracting the high halfword product from the low halfword + product, and add the difference to a 64-bit accumulate operand. Overflow cannot occur + during the multiplications or the subtraction. Overflow can occur as a result of the 64-bit + addition, and this overflow is not detected. Instead, the result wraps round to + modulo264. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
  • val3: accumulate value.
  • +
+
Return Value +

The function returns the difference of the product of each multiplication, + added to the accumulate value.

+
Operation +
+p1 = val1[15:0]  * val2[15:0]
+p2 = val1[31:16] * val2[31:16]
+res[63:0] = p1 - p2 + val3[63:0]
+
+ +

Function __SMLSLDX

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+unsigned long long __SMLSLDX(uint32_t val1, uint32_t val2, unsigned long long val3);
+
DescriptionThis function enables you to exchange the halfwords of the second operand, perform two + 16-bit multiplications, adding the difference of the products to a 64-bit accumulate + operand. Overflow cannot occur during the multiplications or the subtraction. Overflow + can occur as a result of the 64-bit addition, and this overflow is not detected. Instead, + the result wraps round to modulo264. +
Parameter +
    +
  • val1: first 16-bit operands for each multiplication.
  • +
  • val2: second 16-bit operands for each multiplication.
  • +
  • val3: accumulate value.
  • +
+
Return Value +

The function returns the difference of the product of each multiplication, + added to the accumulate value.

+
Operation +
+p1 = val1[15:0]  * val2[31:16]
+p2 = val1[31:16] * val2[15:0]
+res[63:0] = p1 - p2 + val3[63:0]
+
+ + +

Function __SEL

+ + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __SEL(uint32_t val1, uint32_t val2);
+
DescriptionThis function inserts a SEL instruction into the instruction stream generated by the + compiler. It enables you to select bytes from the input parameters, whereby the bytes + that are selected depend upon the results of previous SIMD instruction function. The + results of previous SIMD instruction function are represented by the Greater than or + Equal flags in the Application Program Status Register (APSR). + The __SEL function works equally well on both halfword and byte operand function + results. This is because halfword operand operations set two (duplicate) GE bits per + value. +
Parameter +
    +
  • val1: four selectable 8-bit values.
  • +
  • val2: four selectable 8-bit values.
  • +
+
Return Value +

The function selects bytes from the input parameters and returns them in the + return value, res, according to the following criteria:

+
    +
  • if APSR.GE[0] == 1 then res[7:0] = val1[7:0] else res[7:0] = val2[7:0]
  • +
  • if APSR.GE[1] == 1 then res[15:8] = val1[15:8] else res[15:8] = val2[15:8]
  • +
  • if APSR.GE[2] == 1 then res[23:16] = val1[23:16] else res[23:16] = val2[23:16]
  • +
  • if APSR.GE[3] == 1 then res[31;24] = val1[31:24] else res = val2[31:24]
  • +
+
+ +

Function __QADD

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __QADD(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to obtain the saturating add of two integers.
+ The Q bit is set if the operation saturates. +
Parameter +
    +
  • val1: first summand of the saturating add operation.
  • +
  • val2: second summand of the saturating add operation.
  • +
+
Return Value +

The function returns the saturating addition of val1 and val2.

+
Operation +
+res[31:0] = SAT(val1 + SAT(val2 * 2))
+
+ +

Function __QSUB

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary +
+uint32_t __QSUB(uint32_t val1, uint32_t val2);
+
DescriptionThis function enables you to obtain the saturating subtraction of two integers.
+ The Q bit is set if the operation saturates. +
Parameter +
    +
  • val1: minuend of the saturating subtraction operation.
  • +
  • val2: subtrahend of the saturating subtraction operation.
  • +
+
Return Value +

The function returns the saturating subtraction of val1 and val2.

+
Operation +
+res[31:0] = SAT(val1 - SAT(val2 * 2))
+
+ + + +

 

+

Examples

+

Following are some coding examples using the SIMD functions: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
AdditionAdd two values using SIMD function
SubtractionSubtract two values using SIMD function
MultiplicationPerforming a multiplication using SIMD function
+ + +

Addition

+ + + + + + + +
Example +
+uint32_t add_halfwords(uint32_t val1, uint32_t val2)
+{
+   uint32_t res;
+   res = __SADD16(val1, val2);
+   return res;
+}
+
+ +

Subtraction

+ + + + + + + +
Example +
+uint32_t sub_halfwords(uint32_t val1, uint32_t val2)
+{
+  uint32_t res;
+  res = __SSUB16(val1, val2);
+  return res;
+}
+
+ +

Multiplication

+ + + + + + + +
Example +
+uint32_t dual_mul_add_products(uint32_t val1, uint32_t val2)
+{
+  uint32_t res;
+  res = __SMUAD(val1, val2);
+  return res;
+}
+
+ + + + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_Core.htm b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_Core.htm new file mode 100644 index 000000000..aff81c9bc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_Core.htm @@ -0,0 +1,1470 @@ + + + + CMSIS: Cortex Microcontroller Software Interface Standard + + + +

Cortex Microcontroller Software Interface Standard

+ +

This file describes the Cortex Microcontroller Software Interface Standard (CMSIS).

+

Version: 2.10 - July 2011

+ +

Information in this file, the accompany manuals, and software is
+ Copyright � ARM Ltd.
All rights reserved. +

+ +
+ +

Revision History

+
    +
  • Version 1.00: initial release.
  • +
  • Version 1.01: added __LDREXx, __STREXx, and __CLREX.
  • +
  • Version 1.02: added Cortex-M0.
  • +
  • Version 1.10: second review.
  • +
  • Version 1.20: third review.
  • +
  • Version 1.30 PRE-RELEASE: reworked Startup Concept, additional Debug Functionality.
  • +
  • Version 1.30 2nd PRE-RELEASE: changed folder structure, added doxyGen comments, added Bit definitions.
  • +
  • Version 1.30: updated Device Support Packages.
  • +
  • Version 2.00: added Cortex-M4 support.
  • +
  • Version 2.01: internal review.
  • +
  • Version 2.02: updated Device Specific Defines
  • +
  • Version 2.10: reworked core include files
  • +
+ +
+ +

Contents

+ +
    +
  1. About
  2. +
  3. Coding Rules and Conventions
  4. +
  5. CMSIS Files
  6. +
  7. Core Peripheral Access Layer
  8. +
  9. CMSIS Example
  10. +
  11. CMSIS MISRA-C:2004 Compliance Exceptions
  12. +
+ +

About

+ +

+ The Cortex Microcontroller Software Interface Standard (CMSIS) answers the challenges + that are faced when software components are deployed to physical microcontroller devices based on a + Cortex-M0 or Cortex-M3 processor. The CMSIS will be also expanded to future Cortex-M + processor cores (the term Cortex-M is used to indicate that). The CMSIS is defined in close co-operation + with various silicon and software vendors and provides a common approach to interface to peripherals, + real-time operating systems, and middleware components. +

+ +

ARM provides as part of the CMSIS the following software layers that are +available for various compiler implementations:

+
    +
  • Core Peripheral Access Layer: contains name definitions, + address definitions and helper functions to + access core registers and peripherals. It defines also a device + independent interface for RTOS Kernels that includes debug channel + definitions.
  • +
+ +

These software layers are expanded by Silicon partners with:

+
    +
  • Device Peripheral Access Layer: provides definitions + for all device peripherals
  • +
  • Access Functions for Peripherals (optional): provides + additional helper functions for peripherals
  • +
+ +

CMSIS defines for a Cortex-M Microcontroller System:

+
    +
  • A common way to access peripheral registers + and a common way to define exception vectors.
  • +
  • The register names of the Core + Peripherals and the names of the Core + Exception Vectors.
  • +
  • An device independent interface for RTOS Kernels including a debug + channel.
  • +
+ +

+ By using CMSIS compliant software components, the user can easier re-use template code. + CMSIS is intended to enable the combination of software components from multiple middleware vendors. +

+ +

Coding Rules and Conventions

+ +

+ The following section describes the coding rules and conventions used in the CMSIS + implementation. It contains also information about data types and version number information. +

+ +

Essentials

+
    +
  • The CMSIS C code conforms to MISRA 2004 rules. In case of MISRA violations, + there are disable and enable sequences for PC-LINT inserted.
  • +
  • ANSI standard data types defined in the ANSI C header file + <stdint.h> are used.
  • +
  • #define constants that include expressions must be enclosed by + parenthesis.
  • +
  • Variables and parameters have a complete data type.
  • +
  • All functions in the Core Peripheral Access Layer are + re-entrant.
  • +
  • The Core Peripheral Access Layer has no blocking code + (which means that wait/query loops are done at other software layers).
  • +
  • For each exception/interrupt there is definition for: +
      +
    • an exception/interrupt handler with the postfix _Handler + (for exceptions) or _IRQHandler (for interrupts).
    • +
    • a default exception/interrupt handler (weak definition) that contains an endless loop.
    • +
    • a #define of the interrupt number with the postfix _IRQn.
    • +
  • +
+ +

Recommendations

+ +

The CMSIS recommends the following conventions for identifiers.

+
    +
  • CAPITAL names to identify Core Registers, Peripheral Registers, and CPU Instructions.
  • +
  • CamelCase names to identify peripherals access functions and interrupts.
  • +
  • PERIPHERAL_ prefix to identify functions that belong to specify peripherals.
  • +
  • Doxygen comments for all functions are included as described under Function Comments below.
  • +
+ +Comments + +
    +
  • Comments use the ANSI C90 style (/* comment */) or C++ style + (// comment). It is assumed that the programming tools support today + consistently the C++ comment style.
  • +
  • Function Comments provide for each function the following information: +
      +
    • one-line brief function overview.
    • +
    • detailed parameter explanation.
    • +
    • detailed information about return values.
    • +
    • detailed description of the actual function.
    • +
    +

    Doxygen Example:

    +
    +/** 
    + * @brief  Enable Interrupt in NVIC Interrupt Controller
    + * @param  IRQn  interrupt number that specifies the interrupt
    + * @return none.
    + * Enable the specified interrupt in the NVIC Interrupt Controller.
    + * Other settings of the interrupt such as priority are not affected.
    + */
    +
  • +
+ +

Data Types and IO Type Qualifiers

+ +

+ The Cortex-M HAL uses the standard types from the standard ANSI C header file + <stdint.h>. IO Type Qualifiers are used to specify the access + to peripheral variables. IO Type Qualifiers are indented to be used for automatic generation of + debug information of peripheral registers. +

+ + + + + + + + + + + + + + + + + + + + + + + + +
IO Type Qualifier#defineDescription
__Ivolatile constRead access only
__OvolatileWrite access only
__IOvolatileRead and write access
+ +

CMSIS Version Number

+

+ File core_cm4.h contains the version number of the CMSIS with the following define: +

+ +
+#define __CM4_CMSIS_VERSION_MAIN  (0x02)      /* [31:16] main version       */
+#define __CM4_CMSIS_VERSION_SUB   (0x10)      /* [15:0]  sub version        */
+#define __CM4_CMSIS_VERSION       ((__CM4_CMSIS_VERSION_MAIN << 16) | __CM4_CMSIS_VERSION_SUB)
+ +

+ File core_cm3.h contains the version number of the CMSIS with the following define: +

+ +
+#define __CM3_CMSIS_VERSION_MAIN  (0x02)      /* [31:16] main version       */
+#define __CM3_CMSIS_VERSION_SUB   (0x10)      /* [15:0]  sub version        */
+#define __CM3_CMSIS_VERSION       ((__CM3_CMSIS_VERSION_MAIN << 16) | __CM3_CMSIS_VERSION_SUB)
+ +

+ File core_cm0.h contains the version number of the CMSIS with the following define: +

+ +
+#define __CM0_CMSIS_VERSION_MAIN  (0x02)      /* [31:16] main version       */
+#define __CM0_CMSIS_VERSION_SUB   (0x10)      /* [15:0]  sub version        */
+#define __CM0_CMSIS_VERSION       ((__CM0_CMSIS_VERSION_MAIN << 16) | __CM0_CMSIS_VERSION_SUB)
+ + +

CMSIS Cortex Core

+

+ File core_cm4.h contains the type of the CMSIS Cortex-M with the following define: +

+ +
+#define __CORTEX_M                (0x04)
+ +

+ File core_cm3.h contains the type of the CMSIS Cortex-M with the following define: +

+ +
+#define __CORTEX_M                (0x03)
+ +

+ File core_cm0.h contains the type of the CMSIS Cortex-M with the following define: +

+ +
+#define __CORTEX_M                (0x00)
+ + +

CMSIS Files

+

+ This section describes the Files provided in context with the CMSIS to access the Cortex-M + hardware and peripherals. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileProviderDescription
device.hDevice specific (provided by silicon partner)Defines the peripherals for the actual device. The file may use + several other include files to define the peripherals of the actual device.
core_cm0.hARM (for RealView ARMCC, IAR, and GNU GCC)Defines the core peripherals for the Cortex-M0 CPU and core peripherals.
core_cm3.hARM (for RealView ARMCC, IAR, and GNU GCC)Defines the core peripherals for the Cortex-M3 CPU and core peripherals.
core_cm4.hARM (for RealView ARMCC, IAR, and GNU GCC)Defines the core peripherals for the Cortex-M4 CPU and core peripherals.
core_cm4_simd.hARM (for RealView ARMCC, IAR, and GNU GCC)Defines the Cortex-M4 Core SIMD functions.
core_cmFunc.hARM (for RealView ARMCC, IAR, and GNU GCC)Defines the Cortex-M Core Register access functions.
core_cmInstr.hARM (for RealView ARMCC, IAR, and GNU GCC)Defines the Cortex-M Core instructions.
startup_deviceARM (adapted by compiler partner / silicon partner)Provides the Cortex-M startup code and the complete (device specific) Interrupt Vector Table
system_deviceARM (adapted by silicon partner)Provides a device specific configuration file for the device. It configures the device initializes + typically the oscillator (PLL) that is part of the microcontroller device
+ +

device.h

+ +

+ The file device.h is provided by the silicon vendor and is the + central include file that the application programmer is using in + the C source code. This file contains: +

+
    +
  • +

    Interrupt Number Definition: provides interrupt numbers + (IRQn) for all core and device specific exceptions and interrupts.

    +
  • +
  • +

    Configuration for core_cm0.h / core_cm3.h / core_cm4.h: reflects the + actual configuration of the Cortex-M processor that is part of the actual + device. As such the file core_cm0.h / core_cm3.h / core_cm4.h is included that + implements access to processor registers and core peripherals.

    +
  • +
  • +

    Device Peripheral Access Layer: provides definitions + for all device peripherals. It contains all data structures and the address + mapping for the device specific peripherals.

    +
  • +
  • Access Functions for Peripherals (optional): provides + additional helper functions for peripherals that are useful for programming + of these peripherals. Access Functions may be provided as inline functions + or can be extern references to a device specific library provided by the + silicon vendor.
  • +
+ + +

Interrupt Number Definition

+ +

To access the device specific interrupts the device.h file defines IRQn +numbers for the complete device using a enum typedef as shown below:

+
+typedef enum IRQn
+{
+/******  Cortex-M3 Processor Exceptions/Interrupt Numbers ************************************************/
+  NonMaskableInt_IRQn             = -14,      /*!< 2 Non Maskable Interrupt                              */
+  HardFault_IRQn                  = -13,      /*!< 3 Cortex-M3 Hard Fault Interrupt                      */
+  MemoryManagement_IRQn           = -12,      /*!< 4 Cortex-M3 Memory Management Interrupt               */
+  BusFault_IRQn                   = -11,      /*!< 5 Cortex-M3 Bus Fault Interrupt                       */
+  UsageFault_IRQn                 = -10,      /*!< 6 Cortex-M3 Usage Fault Interrupt                     */
+  SVCall_IRQn                     = -5,       /*!< 11 Cortex-M3 SV Call Interrupt                        */
+  DebugMonitor_IRQn               = -4,       /*!< 12 Cortex-M3 Debug Monitor Interrupt                  */
+  PendSV_IRQn                     = -2,       /*!< 14 Cortex-M3 Pend SV Interrupt                        */
+  SysTick_IRQn                    = -1,       /*!< 15 Cortex-M3 System Tick Interrupt                    */
+/******  STM32 specific Interrupt Numbers ****************************************************************/
+  WWDG_STM_IRQn                   = 0,        /*!< Window WatchDog Interrupt                             */
+  PVD_STM_IRQn                    = 1,        /*!< PVD through EXTI Line detection Interrupt             */
+  :
+  :
+  } IRQn_Type;
+ + +

Device Specific Defines

+

+ The following device implementation specific defines are set in the device header file and are + used for the Cortex-M core configuration options. Some configuration options are reflected + in the CMSIS layer using the #define settings described below. +

+

+ Several features in core_cm#.h are configured by the following defines + that must be defined before #include <core_cm#.h> + preprocessor command. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#defineCoreValueDescription
__CM0_REVM00x0000Core revision number ([15:8] revision number, [7:0] patch number)
__CM3_REVM30x0101 | 0x0200Core revision number ([15:8] revision number, [7:0] patch number)
__CM4_REVM40x0000Core revision number ([15:8] revision number, [7:0] patch number)
__NVIC_PRIO_BITSM0, M3, M42 .. 8Number of priority bits implemented in the NVIC (device specific)
__MPU_PRESENTM0, M3, M40 | 1Defines if a MPU is present or not
__FPU_PRESENTM40 | 1Defines if a FPU is present or not
__Vendor_SysTickConfigM0, M3, M40 | 1When this define is setup to 1, the SysTickConfig function + in core_cm3.h is excluded. In this case the device.h + file must contain a vendor specific implementation of this function.
+ + +

Device Peripheral Access Layer

+

+ Each peripheral uses a prefix which consists of <device abbreviation>_ + and <peripheral name>_ to identify peripheral registers that access this + specific peripheral. The intention of this is to avoid name collisions caused + due to short names. If more than one peripheral of the same type exists, + identifiers have a postfix (digit or letter). For example: +

+
    +
  • <device abbreviation>_UART_Type: defines the generic register layout for all UART channels in a device. +
    +typedef struct
    +{
    +  union {
    +  __I  uint8_t  RBR;                     /*!< Offset: 0x000 (R/ )  Receiver Buffer Register    */
    +  __O  uint8_t  THR;                     /*!< Offset: 0x000 ( /W)  Transmit Holding Register   */
    +  __IO uint8_t  DLL;                     /*!< Offset: 0x000 (R/W)  Divisor Latch LSB           */
    +       uint32_t RESERVED0;
    +  };
    +  union {
    +  __IO uint8_t  DLM;                     /*!< Offset: 0x004 (R/W)  Divisor Latch MSB           */
    +  __IO uint32_t IER;                     /*!< Offset: 0x004 (R/W)  Interrupt Enable Register   */
    +  };
    +  union {
    +  __I  uint32_t IIR;                     /*!< Offset: 0x008 (R/ )  Interrupt ID Register       */
    +  __O  uint8_t  FCR;                     /*!< Offset: 0x008 ( /W)  FIFO Control Register       */
    +  };
    +  __IO uint8_t  LCR;                     /*!< Offset: 0x00C (R/W)  Line Control Register       */
    +       uint8_t  RESERVED1[7];
    +  __I  uint8_t  LSR;                     /*!< Offset: 0x014 (R/ )  Line Status Register        */
    +       uint8_t  RESERVED2[7];
    +  __IO uint8_t  SCR;                     /*!< Offset: 0x01C (R/W)  Scratch Pad Register        */
    +       uint8_t  RESERVED3[3];
    +  __IO uint32_t ACR;                     /*!< Offset: 0x020 (R/W)  Autobaud Control Register   */
    +  __IO uint8_t  ICR;                     /*!< Offset: 0x024 (R/W)  IrDA Control Register       */
    +       uint8_t  RESERVED4[3];
    +  __IO uint8_t  FDR;                     /*!< Offset: 0x028 (R/W)  Fractional Divider Register */
    +       uint8_t  RESERVED5[7];
    +  __IO uint8_t  TER;                     /*!< Offset: 0x030 (R/W)  Transmit Enable Register    */
    +       uint8_t  RESERVED6[39];
    +  __I  uint8_t  FIFOLVL;                 /*!< Offset: 0x058 (R/ )  FIFO Level Register         */
    +} LPC_UART_TypeDef;
    +
  • +
  • <device abbreviation>_UART1: is a pointer to a register structure that refers to a specific UART. + For example UART1->THR is the transmit holding register of UART1. +
    +#define LPC_UART2             ((LPC_UART_TypeDef      *) LPC_UART2_BASE    )
    +#define LPC_UART3             ((LPC_UART_TypeDef      *) LPC_UART3_BASE    )
    +
  • +
+ +
Minimal Requiements
+

+ To access the peripheral registers and related function in a device the files device.h + and core_cm0.h / core_cm3.h defines as a minimum: +

+
    +
  • The Register Layout Typedef for each peripheral that defines all register names. + Names that start with RESERVE are used to introduce space into the structure to adjust the addresses of + the peripheral registers. For example: +
    +typedef struct
    +{
    +  __IO uint32_t CTRL;                    /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
    +  __IO uint32_t LOAD;                    /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register       */
    +  __IO uint32_t VAL;                     /*!< Offset: 0x008 (R/W)  SysTick Current Value Register      */
    +  __I  uint32_t CALIB;                   /*!< Offset: 0x00C (R/ )  SysTick Calibration Register        */
    +} SysTick_Type;
    +
  • + +
  • + Base Address for each peripheral (in case of multiple peripherals + that use the same register layout typedef multiple base addresses are defined). For example: +
    +#define SysTick_BASE (SCS_BASE + 0x0010)            /* SysTick Base Address */
    +
  • + +
  • + Access Definition for each peripheral (in case of multiple peripherals that use + the same register layout typedef multiple access definitions exist, i.e. LPC_UART0, + LPC_UART2). For Example: +
    +#define SysTick ((SysTick_Type *) SysTick_BASE)     /* SysTick access definition */
    +
  • +
+ +

+ These definitions allow to access the peripheral registers from user code with simple assignments like: +

+
SysTick->CTRL = 0;
+ +
Optional Features
+

In addition the device.h file may define:

+
    +
  • + #define constants that simplify access to the peripheral registers. + These constant define bit-positions or other specific patterns are that required for the + programming of the peripheral registers. The identifiers used start with + <device abbreviation>_ and <peripheral name>_. + It is recommended to use CAPITAL letters for such #define constants. +
  • +
  • + Functions that perform more complex functions with the peripheral (i.e. status query before + a sending register is accessed). Again these function start with + <device abbreviation>_ and <peripheral name>_. +
  • +
+ +

core_cm0.h

+

+ File core_cm0.h describes the data structures for the Cortex-M0 core peripherals and does + the address mapping of this structures. It also provides basic access to the Cortex-M0 core registers + and core peripherals with efficient functions (defined as static inline). +

+

This file implement the Core Peripheral Access Layer for a Cortex-M0.

+

The define __CMSIS_GENERIC allows to use core_cm0.h in generic + library projects that are device independent. Only core relevant types and defines are used.

+ +

core_cm3.h

+

+ File core_cm3.h describes the data structures for the Cortex-M3 core peripherals and does + the address mapping of this structures. It also provides basic access to the Cortex-M3 core registers + and core peripherals with efficient functions (defined as static inline). +

+

This file implement the Core Peripheral Access Layer for a Cortex-M3.

+

The define __CMSIS_GENERIC allows to use core_cm3.h in generic + library projects that are device independent. Only core relevant types and defines are used.

+ +

core_cm4.h, core_cm4_simd.h

+

+ File core_cm4.h describes the data structures for the Cortex-M4 core peripherals and does + the address mapping of this structures. It also provides basic access to the Cortex-M4 core registers + and core peripherals with efficient functions (defined as static inline). +

+

+ File core_cm4_simd.h defines Cortex-M4 SIMD instructions. +

+

Together these files implement the Core Peripheral Access Layer for a Cortex-M4.

+

The define __CMSIS_GENERIC allows to use core_cm4.h in generic + library projects that are device independent. Only core relevant types and defines are used.

+ +

core_cmFunc.h and core_cmInstr.h

+

+ File core_cmFunc.h defines the Cortex-M Core Register access functions (defined as static inline). +

+

+ File core_cmInstr.h defines the Cortex-M Core instructions (defined as static inline). +

+

These files are part of the Core Peripheral Access Layer for a Cortex-M.

+ +

startup_device

+

+ A template file for startup_device is provided by ARM for each supported + compiler. It is adapted by the silicon vendor to include interrupt vectors for all device specific + interrupt handlers. Each interrupt handler is defined as weak function + to an dummy handler. Therefore the interrupt handler can be directly used in application software + without any requirements to adapt the startup_device file. +

+

+ The following exception names are fixed and define the start of the vector table for a Cortex-M0: +

+
+__Vectors       DCD     __initial_sp              ; Top of Stack
+                DCD     Reset_Handler             ; Reset Handler
+                DCD     NMI_Handler               ; NMI Handler
+                DCD     HardFault_Handler         ; Hard Fault Handler
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     SVC_Handler               ; SVCall Handler
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     PendSV_Handler            ; PendSV Handler
+                DCD     SysTick_Handler           ; SysTick Handler
+ +

+ The following exception names are fixed and define the start of the vector table for a Cortex-M3: +

+
+__Vectors       DCD     __initial_sp              ; Top of Stack
+                DCD     Reset_Handler             ; Reset Handler
+                DCD     NMI_Handler               ; NMI Handler
+                DCD     HardFault_Handler         ; Hard Fault Handler
+                DCD     MemManage_Handler         ; MPU Fault Handler
+                DCD     BusFault_Handler          ; Bus Fault Handler
+                DCD     UsageFault_Handler        ; Usage Fault Handler
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     SVC_Handler               ; SVCall Handler
+                DCD     DebugMon_Handler          ; Debug Monitor Handler
+                DCD     0                         ; Reserved
+                DCD     PendSV_Handler            ; PendSV Handler
+                DCD     SysTick_Handler           ; SysTick Handler
+ +

+ In the following examples for device specific interrupts are shown: +

+
+; External Interrupts
+                DCD     WWDG_IRQHandler           ; Window Watchdog
+                DCD     PVD_IRQHandler            ; PVD through EXTI Line detect
+                DCD     TAMPER_IRQHandler         ; Tamper
+ +

+ Device specific interrupts must have a dummy function that can be overwritten in user code. + Below is an example for this dummy function. +

+
+Default_Handler PROC
+                EXPORT WWDG_IRQHandler   [WEAK]
+                EXPORT PVD_IRQHandler    [WEAK]
+                EXPORT TAMPER_IRQHandler [WEAK]
+                :
+                :
+                WWDG_IRQHandler
+                PVD_IRQHandler
+                TAMPER_IRQHandler
+                :
+                :
+                B .
+                ENDP
+ +

+ The user application may simply define an interrupt handler function by using the handler name + as shown below. +

+
+void WWDG_IRQHandler(void)
+{
+  :
+  :
+}
+ + +

system_device.c

+

+ A template file for system_device.c is provided by ARM but adapted by + the silicon vendor to match their actual device. As a minimum requirement + this file must provide a device specific system configuration function and a global variable + that contains the system frequency. It configures the device and initializes typically the + oscillator (PLL) that is part of the microcontroller device. +

+

+ The file system_device.c must provide + as a minimum requirement the SystemInit function as shown below. +

+ + + + + + + + + + + + + + + + +
Function DefinitionDescription
void SystemInit (void)Setup the microcontroller system. Typically this function configures the + oscillator (PLL) that is part of the microcontroller device. For systems + with variable clock speed it also updates the variable SystemCoreClock.
+ SystemInit is called from startup_device file.
void SystemCoreClockUpdate (void)Updates the variable SystemCoreClock and must be called whenever the + core clock is changed during program execution. SystemCoreClockUpdate() + evaluates the clock register settings and calculates the current core clock. +
+ +

+ Also part of the file system_device.c + is the variable SystemCoreClock which contains the current CPU clock speed shown below. +

+ + + + + + + + + + + + +
Variable DefinitionDescription
uint32_t SystemCoreClockContains the system core clock (which is the system clock frequency supplied + to the SysTick timer and the processor core clock). This variable can be + used by the user application to setup the SysTick timer or configure other + parameters. It may also be used by debugger to query the frequency of the + debug timer or configure the trace clock speed.
+ SystemCoreClock is initialized with a correct predefined value.

+ The compiler must be configured to avoid the removal of this variable in + case that the application program is not using it. It is important for + debug systems that the variable is physically present in memory so that + it can be examined to configure the debugger.
+ +

Note

+
    +
  • The above definitions are the minimum requirements for the file + system_device.c. This + file may export more functions or variables that provide a more flexible + configuration of the microcontroller system.

    +
  • +
+ + +

Core Peripheral Access Layer

+ +

Cortex-M Core Register Access

+

+ The following functions are defined in core_cm0.h / core_cm3.h + and provide access to Cortex-M core registers. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Function DefinitionCoreCore RegisterDescription
void __enable_irq (void)M0, M3, M4PRIMASK = 0Global Interrupt enable (using the instruction CPSIE i)
void __disable_irq (void)M0, M3, M4PRIMASK = 1Global Interrupt disable (using the instruction CPSID i)
uint32_t __get_CONTROL (void)M0, M3, M4return CONTROLReturn Control Register Value (using the instruction MRS)
void __set_CONTROL (uint32_t value)M0, M3, M4CONTROL = valueSet CONTROL register value (using the instruction MSR)
uint32_t __get_IPSR (void)M0, M3, M4return IPSRReturn IPSR Register Value (using the instruction MRS)
uint32_t __get_APSR (void)M0, M3, M4return APSRReturn APSR Register Value (using the instruction MRS)
uint32_t __get_xPSR (void)M0, M3, M4return xPSRReturn xPSR Register Value (using the instruction MRS)
uint32_t __get_PSP (void)M0, M3, M4return PSPReturn Process Stack Pointer (using the instruction MRS)
void __set_PSP (uint32_t TopOfProcStack)>M0, M3, M4PSP = TopOfProcStackSet Process Stack Pointer value (using the instruction MSR)
uint32_t __get_MSP (void)M0, M3, M4return MSPReturn Main Stack Pointer (using the instruction MRS)
void __set_MSP (uint32_t TopOfMainStack)M0, M3, M4MSP = TopOfMainStackSet Main Stack Pointer (using the instruction MSR)
uint32_t __get_PRIMASK (void)M0, M3, M4return PRIMASKReturn Priority Mask Register (using the instruction MRS)
void __set_PRIMASK (uint32_t value)M0, M3, M4PRIMASK = valueAssign value to Priority Mask Register (using the instruction MSR)
void __enable_fault_irq (void)M3, M4FAULTMASK = 0Global Fault exception and Interrupt enable (using the instruction CPSIE f)
void __disable_fault_irq (void)M3, M4FAULTMASK = 1Global Fault exception and Interrupt disable (using the instruction CPSID f)
uint32_t __get_BASEPRI (void)M3, M4return BASEPRIReturn Base Priority (using the instruction MRS)
void __set_BASEPRI (uint32_t value)M3, M4BASEPRI = valueSet Base Priority (using the instruction MSR)
uint32_t __get_FAULTMASK (void)M3, M4return FAULTMASKReturn Fault Mask Register (using the instruction MRS)
void __set_FAULTMASK (uint32_t value)M3, M4FAULTMASK = valueAssign value to Fault Mask Register (using the instruction MSR)
uint32_t __get_FPSCR (void)M4return FPSCRReturn Floating Point Status / Control Register
void __set_FPSCR (uint32_t value)M4FPSCR = valueAssign value to Floating Point Status / Control Register
+ +

Cortex-M Instruction Access

+

+ The following functions are defined in core_cm0.h / core_cm3.hand + generate specific Cortex-M instructions. The functions are implemented in the file + core_cm0.c / core_cm3.c. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCoreGenerated CPU InstructionDescription
void __NOP (void)M0, M3, M4NOPNo Operation
void __WFI (void)M0, M3, M4WFIWait for Interrupt
void __WFE (void)M0, M3, M4WFEWait for Event
void __SEV (void)M0, M3, M4SEVSet Event
void __ISB (void)M0, M3, M4ISBInstruction Synchronization Barrier
void __DSB (void)M0, M3, M4DSBData Synchronization Barrier
void __DMB (void)M0, M3, M4DMBData Memory Barrier
uint32_t __REV (uint32_t value)M0, M3, M4REVReverse byte order in integer value.
uint32_t __REV16 (uint16_t value)M0, M3, M4REV16Reverse byte order in unsigned short value.
sint32_t __REVSH (sint16_t value)M0, M3, M4REVSHReverse byte order in signed short value with sign extension to integer.
uint32_t __RBIT (uint32_t value)M3, M4RBITReverse bit order of value
uint8_t __LDREXB (uint8_t *addr)M3, M4LDREXBLoad exclusive byte
uint16_t __LDREXH (uint16_t *addr)M3, M4LDREXHLoad exclusive half-word
uint32_t __LDREXW (uint32_t *addr)M3, M4LDREXWLoad exclusive word
uint8_t __STREXB (uint8_t value, uint8_t *addr)M3, M4STREXBStore exclusive byte
uint16_t __STREXH (uint16_t value, uint16_t *addr)M3, M4STREXHStore exclusive half-word
uint32_t __STREXW (uint32_t value, uint32_t *addr)M3, M4STREXWStore exclusive word
void __CLREX (void)M3, M4CLREXRemove the exclusive lock created by __LDREXB, __LDREXH, or __LDREXW
void __SSAT (void)M3, M4SSATsaturate a signed value
void __USAT (void)M3, M4USATsaturate an unsigned value
+ + +

NVIC Access Functions

+

+ The CMSIS provides access to the NVIC via the register interface structure and several helper + functions that simplify the setup of the NVIC. The CMSIS HAL uses IRQ numbers (IRQn) to + identify the interrupts. The first device interrupt has the IRQn value 0. Therefore negative + IRQn values are used for processor core exceptions. +

+

+ For the IRQn values of core exceptions the file device.h provides + the following enum names. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Core Exception enum ValueCoreIRQnDescription
NonMaskableInt_IRQnM0, M3, M4-14Cortex-M Non Maskable Interrupt
HardFault_IRQnM0, M3, M4-13Cortex-M Hard Fault Interrupt
MemoryManagement_IRQnM3, M4-12Cortex-M Memory Management Interrupt
BusFault_IRQnM3, M4-11Cortex-M Bus Fault Interrupt
UsageFault_IRQnM3, M4-10Cortex-M Usage Fault Interrupt
SVCall_IRQnM0, M3, M4-5Cortex-M SV Call Interrupt
DebugMonitor_IRQnM3, M4-4Cortex-M Debug Monitor Interrupt
PendSV_IRQnM0, M3, M4-2Cortex-M Pend SV Interrupt
SysTick_IRQnM0, M3, M4-1Cortex-M System Tick Interrupt
+ +

The following functions simplify the setup of the NVIC. +The functions are defined as static inline.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCoreParameterDescription
void NVIC_SetPriorityGrouping (uint32_t PriorityGroup)M3, M4Priority Grouping ValueSet the Priority Grouping (Groups . Subgroups)
uint32_t NVIC_GetPriorityGrouping (void)M3, M4(void)Get the Priority Grouping (Groups . Subgroups)
void NVIC_EnableIRQ (IRQn_Type IRQn)M0, M3, M4IRQ NumberEnable IRQn
void NVIC_DisableIRQ (IRQn_Type IRQn)M0, M3, M4IRQ NumberDisable IRQn
uint32_t NVIC_GetPendingIRQ (IRQn_Type IRQn)M0, M3, M4IRQ NumberReturn 1 if IRQn is pending else 0
void NVIC_SetPendingIRQ (IRQn_Type IRQn)M0, M3, M4IRQ NumberSet IRQn Pending
void NVIC_ClearPendingIRQ (IRQn_Type IRQn)M0, M3, M4IRQ NumberClear IRQn Pending Status
uint32_t NVIC_GetActive (IRQn_Type IRQn)M3, M4IRQ NumberReturn 1 if IRQn is active else 0
void NVIC_SetPriority (
+   IRQn_Type IRQn,
+   uint32_t priority)
M0, M3, M4IRQ Number, PrioritySet Priority for IRQn
+ (not threadsafe for Cortex-M0)
uint32_t NVIC_GetPriority (IRQn_Type IRQn)M0, M3, M4IRQ NumberGet Priority for IRQn
uint32_t NVIC_EncodePriority (
+   uint32_t PriorityGroup,
+   uint32_t PreemptPriority,
+   uint32_t SubPriority)
M3, M4IRQ Number,
+ Priority Group,
+ Preemptive Priority,
+ Sub Priority
Encode priority for given group, preemptive and sub priority
void NVIC_DecodePriority (
+   uint32_t Priority,
+   uint32_t PriorityGroup,
+   uint32_t* pPreemptPriority,
+   uint32_t* pSubPriority)
M3, M4
+ Priority,
+ Priority Group,
+ pointer to Preempt. Priority,
+ pointer to Sub Priority
Decode given priority to group, preemptive and sub priority
void NVIC_SystemReset (void)M0, M3, M4(void)Resets the System
+

Note

+
    +
  • The processor exceptions have negative enum values. Device specific interrupts + have positive enum values and start with 0. The values are defined in + device.h file. +

    +
  • +
  • The values for PreemptPriority and SubPriority + used in functions NVIC_EncodePriority and NVIC_DecodePriority + depend on the available __NVIC_PRIO_BITS implemented in the NVIC. +

    +
  • +
+ + +

SysTick Configuration Function

+ +

The following function is used to configure the SysTick timer and start the +SysTick interrupt.

+ + + + + + + + + + + + + + +
NameParameterDescription
uint32_t SysTickConfig (uint32_t ticks)ticks is SysTick counter reload valueSetup the SysTick timer and enable the SysTick interrupt. After this + call the SysTick timer creates interrupts with the specified time interval.

+ Return: 0 when successful, 1 on failure.
+
+ + +

Cortex-M3 / Cortex-M4 ITM Debug Access

+ +

The Cortex-M3 / Cortex-M4 incorporates the Instrumented Trace Macrocell (ITM) that +provides together with the Serial Viewer Output trace capabilities for the +microcontroller system. The ITM has 32 communication channels; two ITM +communication channels are used by CMSIS to output the following information:

+
    +
  • ITM Channel 0: implements the ITM_SendChar function + which can be used for printf-style output via the debug interface.
  • +
  • ITM Channel 31: is reserved for the RTOS kernel and can be used for + kernel awareness debugging.
  • +
+

Note

+
    +
  • The ITM channel 31 is selected for the RTOS kernel since some kernels + may use the Privileged level for program execution. ITM + channels have 4 groups with 8 channels each, whereby each group can be + configured for access rights in the Unprivileged level. The ITM channel 0 + may be therefore enabled for the user task whereas ITM channel 31 may be + accessible only in Privileged level from the RTOS kernel itself.

    +
  • +
+ +

The prototype of the ITM_SendChar routine is shown in the +table below.

+ + + + + + + + + + + + + + +
NameParameterDescription
void uint32_t ITM_SendChar(uint32_t chr)character to outputThe function outputs a character via the ITM channel 0. The + function returns when no debugger is connected that has booked the + output. It is blocking when a debugger is connected, but the + previous character send is not transmitted.

+ Return: the input character 'chr'. +
+ +

+ Example for the usage of the ITM Channel 31 for RTOS Kernels: +

+
+  // check if debugger connected and ITM channel enabled for tracing
+  if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA) &&
+  (ITM->TCR & ITM_TCR_ITMENA) &&
+  (ITM->TER & (1UL << 31))) {
+    // transmit trace data
+    while (ITM->PORT31_U32 == 0);
+    ITM->PORT[31].u8 = task_id;      // id of next task
+    while (ITM->PORT[31].u32 == 0);
+    ITM->PORT[31].u32 = task_status; // status information
+  }
+ + +

Cortex-M3 additional Debug Access

+ +

CMSIS provides additional debug functions to enlarge the Cortex-M3 Debug Access. +Data can be transmitted via a certain global buffer variable towards the target system.

+ +

The buffer variable and the prototypes of the additional functions are shown in the +table below.

+ + + + + + + + + + + + + + + + + + + + + + + + +
NameParameterDescription
extern volatile int ITM_RxBuffer Buffer to transmit data towards debug system.

+ Value 0x5AA55AA5 indicates that buffer is empty.
int ITM_ReceiveChar (void)noneThe nonblocking functions returns the character stored in + ITM_RxBuffer.

+ Return: -1 indicates that no character was received.
int ITM_CheckChar (void)noneThe function checks if a character is available in ITM_RxBuffer.

+ Return: 1 indicates that a character is available, 0 indicates that + no character is available.
+ + +

CMSIS Example

+

+ The following section shows a typical example for using the CMSIS layer in user applications. + The example is based on a STM32F10x Device. +

+
+#include "stm32f10x.h"
+
+volatile uint32_t msTicks;                       /* timeTicks counter */
+
+void SysTick_Handler(void) {
+  msTicks++;                                     /* increment timeTicks counter */
+}
+
+__INLINE static void Delay (uint32_t dlyTicks) {
+  uint32_t curTicks = msTicks;
+
+  while ((msTicks - curTicks) < dlyTicks);
+}
+
+__INLINE static void LED_Config(void) {
+  ;                                              /* Configure the LEDs */
+}
+
+__INLINE static void LED_On (uint32_t led) {
+  ;                                              /* Turn On  LED */
+}
+
+__INLINE static void LED_Off (uint32_t led) {
+  ;                                              /* Turn Off LED */
+}
+
+int main (void) {
+  if (SysTick_Config (SystemCoreClock / 1000)) { /* Setup SysTick for 1 msec interrupts */
+    ;                                            /* Handle Error */
+    while (1);
+  }
+  
+  LED_Config();                                  /* configure the LEDs */                            
+ 
+  while(1) {
+    LED_On (0x100);                              /* Turn  on the LED   */
+    Delay (100);                                 /* delay  100 Msec    */
+    LED_Off (0x100);                             /* Turn off the LED   */
+    Delay (100);                                 /* delay  100 Msec    */
+  }
+}
+ + +

CMSIS MISRA-C:2004 Compliance Exceptions

+

+ CMSIS violates following MISRA-C2004 Rules: +

+
    +
  • Violates MISRA 2004 Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'.
  • + +
  • Violates MISRA 2004 Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers.
  • + +
  • Violates MISRA 2004 Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code.
  • +
+ +

  

+ + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_DebugSupport.htm b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_DebugSupport.htm new file mode 100644 index 000000000..96cc60ddb --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_DebugSupport.htm @@ -0,0 +1,240 @@ + + + +CMSIS Debug Support + + + + + + + + +

CMSIS Debug Support

+

This file describes the CMSIS Debug support available with CMSIS (starting V1.30).

+

Version: 1.02 - 25. July 2011

+ +

Information in this file, the accompany manuals, and software is
+ Copyright � ARM Ltd.
All rights reserved. +

+ +
+ +

Revision History

+
    +
  • Version 1.00: Initial Release.
  • +
  • Version 1.01: Internal Review.
  • +
  • Version 1.02: Removed product specific information.
  • +
+ +
+ +

Contents

+ +
    +
  1. About
  2. +
  3. Cortex-M3 / Cortex-M4 ITM Debug Access
  4. +
  5. Debug IN / OUT functions
  6. +
  7. ITM Debug Support in Debugger
  8. +
+ +

 

+

About

+

+ CMSIS provides for Cortex-M3 / Cortex-M4 processor based microcontrollers debug support via the Instrumented Trace Macrocell (ITM). + This document describes the available CMSIS Debug functions and the used methods. +

+ +

 

+

Cortex-M3 / Cortex-M4 ITM Debug Access

+

+ The Cortex-M3 incorporates the Instrumented Trace Macrocell (ITM) that provides together with + the Serial Viewer Output trace capabilities for the microcontroller system. The ITM has + 32 communication channels which are able to transmit 32 / 16 / 8 bit values; two ITM + communication channels are used by CMSIS to output the following information: +

+
    +
  • ITM Channel 0: used for printf-style output via the debug interface.
  • +
  • ITM Channel 31: is reserved for RTOS kernel awareness debugging.
  • +
+ +

 

+

Debug IN / OUT functions

+

CMSIS provides following debug functions:

+
    +
  • ITM_SendChar (uses ITM channel 0)
  • +
  • ITM_ReceiveChar (uses global variable)
  • +
  • ITM_CheckChar (uses global variable)
  • +
+ +

ITM_SendChar

+

+ ITM_SendChar is used to transmit a character over ITM channel 0 from + the microcontroller system to the debug system.
+ Only a 8 bit value is transmitted. +

+
+static __INLINE uint32_t ITM_SendChar (uint32_t ch)
+{
+  /* check if debugger connected and ITM channel enabled for tracing */
+  if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA)  &&
+      (ITM->TCR & ITM_TCR_ITMENA)                  &&
+      (ITM->TER & (1UL << 0))  ) 
+  {
+    while (ITM->PORT[0].u32 == 0);
+    ITM->PORT[0].u8 = (uint8_t)ch;
+  }  
+  return (ch);
+}
+ +

ITM_ReceiveChar

+

+ ITM communication channel is only capable for OUT direction. For IN direction + a global variable is used. A simple mechanism detects if a character is received. + The project to test need to be build with debug information. +

+ +

+ The global variable ITM_RxBuffer is used to transmit a 8 bit value from debug system + to microcontroller system. ITM_RxBuffer is 32 bit wide to + ensure a proper handshake. +

+
+extern volatile int32_t ITM_RxBuffer;                    /* variable to receive characters                             */
+
+

+ A dedicated bit pattern is used to determine if ITM_RxBuffer is empty + or contains a valid value. +

+
+#define                 ITM_RXBUFFER_EMPTY    0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */
+
+

+ ITM_ReceiveChar is used to receive a 8 bit value from the debug system. The function is nonblocking. + It returns the received character or '-1' if no character was available. +

+
+static __INLINE int32_t ITM_ReceiveChar (void) {
+  int32_t ch = -1;                               /* no character available */
+
+  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {
+    ch = ITM_RxBuffer;
+    ITM_RxBuffer = ITM_RXBUFFER_EMPTY;       /* ready for next character */
+  }
+  
+  return (ch); 
+}
+
+ +

ITM_CheckChar

+

+ ITM_CheckChar is used to check if a character is received. +

+
+static __INLINE int32_t ITM_CheckChar (void) {
+
+  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
+    return (0);                                 /* no character available */
+  } else {
+    return (1);                                 /*    character available */
+  }
+}
+ + +

 

+

ITM Debug Support in a Debugger

+

+ The Debugger shall offer a dedicated console window for printf style debug input and output using the CMSIS defined ITM methods described above. +

+

Direction: Microcontroller -> Debugger:

+
    +
  • + at the beginning of a debug session the debugger shall enable ITM trace on channel 0 and continuously snoop for channel 0 data on the ITM trace + stream it receives from the Microcontroller's CoreSight ITM unit +
  • +
  • + data received via the ITM communication channel 0 is interpreted as charater and gets redirected into the dedicated Console Window +
  • +
+ +

Direction: Debugger -> Microcontroller:

+
    +
  • + at the beginning of a debug session the debugger shall seek for the presence of the global variable named ITM_RxBuffer in the debug + information of the application being loaded +
  • +
  • + strings entered into the Console Window are written by the debugger as a stream of char values via the variable ITM_RxBuffer. +
  • +
  • + the debugger writes the next character into the ITM_RxBuffer only once the value has been read and the ITM_RXBUFFER_EMPTY value being set. + (refer to: ITM_ReceiveChar()). +
+ + + + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_History.htm b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_History.htm new file mode 100644 index 000000000..a906ae99c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_History.htm @@ -0,0 +1,472 @@ + + + +CMSIS Version History + + + + + + + + +

CMSIS Version History

+

This document describes the changes between the different CMSIS versions.

+

Version: 2.10 - July 2011

+ +

Information in this file, the accompany manuals, and software is
+ Copyright � ARM Ltd.
All rights reserved. +

+ +
+ + +

Contents

+ +
    +
  1. Used Toolchains
  2. +
  3. Changes to version V2.00
  4. +
  5. Changes to version V1.30
  6. +
  7. Changes to version V1.20
  8. +
  9. Open Points
  10. +
  11. Limitations
  12. +
+ + +

Used Toolchains

+

+ Following toolchains have been used for test / verification:. +

+
    +
  • ARM: MDK-ARM Version 4.21
  • +
  • GNU: Sourcery G++ Lite Edition for ARM 2010.09-51
  • +
  • IAR: IAR Embedded Workbench Kickstart Edition V6.10
  • +
+ + +

Changes to version V2.00

+ +

Added CMSIS DSP Software Library support for Cortex-M0 based MCUs

+

+ The CMSIS DSP Software Library provides now also libraries and examples for Cortex-M0. +

+

+ For more information refer to CMSIS DSP Library documentation. +

+ +

Added big endian support for DSP library

+

+ The CMSIS DSP Software Library provides now also pre-build libraries + and projects for big endian devices. +

+

+ For more information refer to CMSIS DSP Library documentation. +

+ + +

Simplified folder structure for CMSIS include files

+

+ All CMSIS core include files as well as the DSP-Library header files are located in + a single folder ./CMSIS/Include. +

+ +

Changed folder structure for Device Support packages

+

+ Device Support packages are expected to be in folder ./Device located at the + same level as ./CMSIS. +

+

The new Device folder contains the following subfolders:

+
    +
  • Device
  • +
      +
    • <Vendor> +
        +
      • <Device> | <Device Series> +
          +
        • Include
          + <device>.h
          + system_<device>.h
          +
        • +
        • Source +
            +
          • Templates
            + system_<device>.c
            +
              +
            • <Toolchain>
              + startup_<device>.s
              +
            • +
            • <Toolchain>
            • +
            • ...
            • +
            +
          • +
          +
        • +
        +
      • <Device> | <Device Series>
      • +
      • ...
      • +
      +
    • +
    • <Vendor>
    • +
    • ...
    • +
    + +
+

Template files are application specific files and are required to be copied to the project prior to use!

+ +

Removed CMSIS core source files

+

+ The CMSIS core source files core_cm0.c, core_cm3.c, core_cm4.c + containing helper functions for older ARM compiler versions got removed. +

+

+ For the ARM Compiler Toolchain version V4.0.677 or later is + required!

+ + +

Changes to version V1.30

+ +

Added CMSIS DSP Software Library

+

+ The CMSIS DSP Software Library is a suite of common signal processing functions targeted + to Cortex-M processor based microcontrollers. Even though the code has been specifically + optimized towards using the extended DSP instruction set of the Cortex-M4 processor, + the library can be compiled for any Cortex-M processor. +

+

+ For more information see CMSIS DSP Library documentation. +

+ +

Added CMSIS System View Description

+

+ The CMSIS System View Description answers the challenges of accurate, detailed and + timely device aware peripheral debugging support for Cortex Microcontroller based + devices by the software development tools vendor community. +

+

+ Silicon vendors shall create and maintain a formalized description of the debug view + for all the peripherals contained in their Cortex Microcontroller based devices. + Tool vendors use such descriptions to establish device specific debug support in + their debugging tools. +

+

+ A standardized System View Description shall provide a common approach to + capturing peripheral debug related information in a machine readable files. +

+

+ For more information see CMSIS System View Description. +

+ +

Added Cortex-M4 Core Support

+

+ Additional folder CM4, containing the Cortex-M4 core support files, has been added. +

+
    +
  • CM0
  • +
  • CM3
  • +
  • CM4 +
      +
    • CoreSupport
    • +
    • DeviceSupport
    • +
    +
  • +
+ +

New naming for Core Support Files

+

+ The new Core Support Files are: +

+
    +
  • core_cm#.h (# = 0, 3, 4)
  • +
  • core_cmFunc.h (Cortex-M Core Register access functions)
  • +
  • core_cmInstr.h (Cortex-M Core instructions)
  • +
  • core_cm4_simd.h (Cortex-M4 SIMD instructions)
  • +
+ +

Changes to version V1.20

+ +

Removed CMSIS Middelware packages

+

+ CMSIS Middleware is removed and no longer focus of CMSIS. +

+ +

SystemFrequency renamed to SystemCoreClock

+

+ The variable name SystemCoreClock is more precise than SystemFrequency + because the variable holds the clock value at which the core is running. +

+ +

Changed startup concept

+

+ The old startup concept (calling SystemInit_ExtMemCtl from startup file and calling SystemInit + from main) has the weakness that it does not work for controllers which need a already + configuerd clock system to configure the external memory controller. +

+ +
Changed startup concept
+
    +
  • + SystemInit() is called from startup file before premain. +
  • +
  • + SystemInit() configures the clock system and also configures + an existing external memory controller. +
  • +
  • + SystemInit() must not use global variables. +
  • +
  • + SystemCoreClock is initialized with a correct predefined value. +
  • +
  • + Additional function void SystemCoreClockUpdate (void) is provided.
    + SystemCoreClockUpdate() updates the variable SystemCoreClock + and must be called whenever the core clock is changed.
    + SystemCoreClockUpdate() evaluates the clock register settings and calculates + the current core clock. +
  • +
+ + +

Advanced Debug Functions

+

+ ITM communication channel is only capable for OUT direction. To allow also communication for + IN direction a simple concept is provided. +

+
    +
  • + Global variable volatile int ITM_RxBuffer used for IN data. +
  • +
  • + Function int ITM_CheckChar (void) checks if a new character is available. +
  • +
  • + Function int ITM_ReceiveChar (void) retrieves the new character. +
  • +
+ +

+ For detailed explanation see file CMSIS debug support.htm. +

+ + +

Core Register Bit Definitions

+

+ Files core_cm3.h and core_cm0.h contain now bit definitions for Core Registers. The name for the + defines correspond with the Cortex-M Technical Reference Manual. +

+

+ e.g. SysTick structure with bit definitions +

+
+/** \brief  Structure type to access the System Timer (SysTick).
+ */
+typedef struct
+{
+  __IO uint32_t CTRL;                    /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
+  __IO uint32_t LOAD;                    /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register       */
+  __IO uint32_t VAL;                     /*!< Offset: 0x008 (R/W)  SysTick Current Value Register      */
+  __I  uint32_t CALIB;                   /*!< Offset: 0x00C (R/ )  SysTick Calibration Register        */
+} SysTick_Type;
+
+/* SysTick Control / Status Register Definitions */
+#define SysTick_CTRL_COUNTFLAG_Pos         16                                             /*!< SysTick CTRL: COUNTFLAG Position */
+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */
+
+#define SysTick_CTRL_CLKSOURCE_Pos          2                                             /*!< SysTick CTRL: CLKSOURCE Position */
+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */
+
+#define SysTick_CTRL_TICKINT_Pos            1                                             /*!< SysTick CTRL: TICKINT Position */
+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */
+
+#define SysTick_CTRL_ENABLE_Pos             0                                             /*!< SysTick CTRL: ENABLE Position */
+#define SysTick_CTRL_ENABLE_Msk            (1UL << SysTick_CTRL_ENABLE_Pos)               /*!< SysTick CTRL: ENABLE Mask */
+
+/* SysTick Reload Register Definitions */
+#define SysTick_LOAD_RELOAD_Pos             0                                             /*!< SysTick LOAD: RELOAD Position */
+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos)        /*!< SysTick LOAD: RELOAD Mask */
+
+/* SysTick Current Register Definitions */
+#define SysTick_VAL_CURRENT_Pos             0                                             /*!< SysTick VAL: CURRENT Position */
+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos)        /*!< SysTick VAL: CURRENT Mask */
+
+/* SysTick Calibration Register Definitions */
+#define SysTick_CALIB_NOREF_Pos            31                                             /*!< SysTick CALIB: NOREF Position */
+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */
+
+#define SysTick_CALIB_SKEW_Pos             30                                             /*!< SysTick CALIB: SKEW Position */
+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */
+
+#define SysTick_CALIB_TENMS_Pos             0                                             /*!< SysTick CALIB: TENMS Position */
+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos)        /*!< SysTick CALIB: TENMS Mask */
+
+/*@} end of group CMSIS_SysTick */
+ +

DoxyGen Tags

+

+ DoxyGen tags in files core_cm3.[c,h] and core_cm0.[c,h] are reworked to create proper documentation + using DoxyGen. +

+ +

Folder Structure

+

+ The folder structure is changed to differentiate the single support packages. +

+ +
    +
  • CM0
  • +
  • CM3 +
      +
    • CoreSupport
    • +
    • DeviceSupport
    • +
        +
      • Vendor +
          +
        • Device +
            +
          • Startup +
              +
            • Toolchain
            • +
            • Toolchain
            • +
            • ...
            • +
            +
          • +
          +
        • +
        • Device
        • +
        • ...
        • +
        +
      • +
      • Vendor
      • +
      • ...
      • +
      + +
    • Example (optional) +
        +
      • Toolchain +
          +
        • Device
        • +
        • Device
        • +
        • ...
        • +
        +
      • +
      • Toolchain
      • +
      • ...
      • +
      +
    • +
    +
  • + +
  • Documentation
  • +
+ +

Open Points

+

+ Following points need to be clarified and solved: +

+
    +
  • +

    + Equivalent C and Assembler startup files. +

    +

    + Is there a need for having C startup files although assembler startup files are + very efficient and do not need to be changed? +

    +

  • +
  • +

    + Placing of HEAP in external RAM. +

    +

    + It must be possible to place HEAP in external RAM if the device supports an + external memory controller. +

    +
  • +
  • +

    + Placing of STACK /HEAP. +

    +

    + STACK should always be placed at the end of internal RAM. +

    +

    + If HEAP is placed in internal RAM than it should be placed after RW ZI section. +

    +
  • +
+ + +

Limitations

+

+ The following limitations are not covered with the current CMSIS version: +

+
    +
  • + No C startup files are available. +
  • +
+ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_Logo_Final.jpg b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_Logo_Final.jpg new file mode 100644 index 000000000..e04560175 Binary files /dev/null and b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_Logo_Final.jpg differ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_System_View_Description.htm b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_System_View_Description.htm new file mode 100644 index 000000000..fe5d71f88 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Documentation/CMSIS_System_View_Description.htm @@ -0,0 +1,1157 @@ + + + + CMSIS - SVD: Cortex Microcontroller Software Interface Standard - System View Description + + + + + + +

Cortex Microcontroller Software Interface Standard
+System View Description

+ +

This file describes the Cortex Microcontroller Software +Interface Standard - System View Description (CMSIS - SVD) concept and syntax.

+

Version: 1.02 - 27. July 2011

+ +

Information in this file, the accompany manuals, and software is
+ Copyright � ARM Ltd.
All rights reserved. +

+ +
+ +

Revision History

+
    +
  • Version 0.91: initial proposal.
  • +
  • Version 0.92: revised proposal considering forum feedback (e.g. consider + IP-XACT constructs and naming scheme)
  • +
  • Version 1.0: new elements: peripheral version, vendor specific + extension section, interrupt mapping information, global peripheral disable + condition, naming of register arrays, enhanced naming schemes, etc.
  • +
  • Version 1.0: SVD versioning and updated schema file
  • +
  • Version 1.01: Error corrections in the example code. "include" has been removed. Restricted to one device per file.
  • +
  • Version 1.02: Adding the use case of device header file generation.
  • +
+ +

 

+ +
+ +

Contents

+ +
    +
  1. About
  2. +
  3. Motivation
  4. +
  5. Requirements
  6. +
  7. Format
  8. +
  9. Example
  10. +
  11. Questions & Answers
  12. +
+ +

About

+ +

+ The Cortex Microcontroller Software Interface Standard - System View + Description (CMSIS - SVD) answers the challenges + of accurate, detailed and timely device aware peripheral debugging support for Cortex + Microcontroller based devices by the software development + tools vendor community. +

+

+ Silicon vendors shall create and maintain a formalized description of the + debug view for all the peripherals contained in their Cortex + Microcontroller based devices. Tool vendors use such descriptions to + establish device specific debug support in their debugging tools with minimal turn around times and + manageable effort. Device support across many development tools  is + essential for silicon provider in order to promote new devices and device + variants entering the market. Device aware debug views provide fast and + convenient access to all registers and fields as well as a detailed + description. This enables software developer to + develop and debug code most efficiently and adopt new devices early and + quickly.

+

+ A standardized System View Description shall provide a common approach to + capturing peripheral debug related information in a machine readable files. + The scope of the contained information is agreed to match the level usually + provided by silicon vendors in their device reference manuals, however in a + formalized XML based format. There + are other description languages already available. IP-XACT from the SPIRIT + consortium is a prominent example. IP-XACT covers the register description + sufficiently, however it comprises many other aspects of the devices like + ports, bus-protocols, modeling, tool flows, etc. making a direct use of + IP-XACT too complex. The design of the SVD language is + taking some guidance from IP-XACT thus allowing straight forward conversion + from IP-XACT to CMSIS-SVD where IP-XACT device information is already + available.

+

+ In a second step the CMSIS-SVD description shall be used for automatically + generating CMSIS compliant a device header file. This enables the + information in the header file to be consistent with what the debugger will + display and CMSIS compliant by construction. The header file generation will + require some additional pieces of information and therefore a future version + of the description will need to include some extensions for this purpose.

+

+ Device aware debugging support is only one aspect of device + support essential to software development environments, however it is one of + the most time consuming and error prone ones.

+

Motivation

+

+ +The software developer of microcontroller devices is faced with a growing number +of devices with an ever increasing number of peripheral blocks providing a wide +range of distinct and complex functionality. The development of drivers for +these peripherals is in the critical path of every project. Modern debuggers are supporting the software developer in getting the +software to run according to the requirements. A debugger providing peripheral awareness improves the +ability to access and interpret complex configuration and status information of +peripherals. Even though this is only one aspect of device support within microcontroller +development environments it is essential for the successful and timely adoption +of development tools and the device by the market.

+

Today software development environments address device aware +debugging in various ways. They either use documents or proprietary file formats +as input for providing peripheral views in the debuggers. +Extracting peripheral information from written documentation is a very time +consuming, tedious and error prone task. Having a file containing peripheral specific information to generate peripheral views +is going to make device support more affordable, reliable and timely. +The challenge for the tool providers is the support of many +different and incompatible file formats from a growing number of silicon vendors. +For silicon vendors it is time consuming and costly to engage with many tool +provider in order to achieve device support in a wide range of development +environments.

+

Standardizing on a System View Description aims to ease this challenge +by agreeing on a formal XML-based file format. In conjunction with supporting web server infrastructure silicon partner +shall upload and maintain such descriptions in a tool vendor agnostic device +database, hosted e.g. by the web server infrastructure + +cmsis.arm.com . Access control to sensitive information is managed on a per user +basis. This allows silicon vendors to upload information for devices that have +not been made public. 

+

Such an approach provides benefits for silicon and tool vendors as well as +software developers of Cortex-M based microcontroller devices

+
    +
  • timely and accurate device support provided by a whole range of tool providers
  • +
  • tool providers become more efficient in supporting a multitude of devices + and device variants
  • +
  • less interaction required between silicon vendors and the + tool providers
  • +
  • silicon provider has control over and maintains the System View + Description during the life cycle of the device
  • +
  • high quality device support in terms of completeness and correctness of + device aware debugging
  • +
  • improved productivity and user experience for the software developer
  • +
+

Requirements

+

The debug description shall capture the information about all +the peripherals contained in a specific device. This section describes which +items of information are deemed relevant for a debugger. Silicon vendors are expected to +provide the System View Description for their devices, matching the information +contained in device reference manuals. The System View Description shall be suitable for straight forward +generation from existing databases like IP-XACT descriptions or SIDSC. The size +of device description is a concern and therefore redundancy in the description +shall be avoided. The size of SVD files affects the efficiency of +distribution as well as the loading time by the development tools. Last but not least manual editing of SVD files shall be possible for +the purpose of customization by SW developers.

+

Required content of the description

+

From a programmer's perspective a peripheral can be seen as a set of registers +with unique names being mapped to fixed addresses allocated +within a defined range of an address space.

+

From a debugger's point of view read accesses to a physical register need to be +executed in order to display its current value. The debugger executes a write +access to a register when a user edits its value. For this purpose the debugger +needs to know about the following additional attributes:

+
    +
  • minimal addressable unit = smallest series of bits + identified by a unique address (e.g. byte-addressable memory)
  • +
  • register size = number of bits forming a register (ARM Cortex-M usually + 32 bits)
  • +
  • access permission = read and write, read only, + write only
  • +
  • access side effects = accesses by the debugger must + be avoided if it has side effects. Some side effects may be + reversed by the debugger to compensate for the side effect
  • +
+

In many cases peripheral registers are partitioned into chunks of bits of +distinct functionality. In this document these chunks are referred to as +field. Each +register that consists of fields shall  be described by a list +of uniquely named fields (Note: field names are not required to be +unique across registers). In order for a debugger to extract the +value of a field from the corresponding register the following attributes are required:

+
    +
  • most significant bit = highest bit position of the + bit-field in the corresponding register
  • +
  • least significant bit = lowest bit position of the + bit-field within the corresponding register
  • +
  • access permission = read and write, read only, + write only
  • +
+

An enumerated value maps a number to a specific descriptive string +representing the semantics of the value of a field. The debugger displays the +descriptive string rather than the number to simplify the access to the +information thus +avoiding the necessity of a look-up in the device reference manual. Each item of +an enumerated value has the following attributes:

+
    +
  • value = value of the bit-field that corresponds to + the string attribute
  • +
  • name = short string that describes the semantics of a + field when the corresponding value is set
  • +
  • description = detailed description of the semantics + of the field when the corresponding value is set
  • +
+

The hierarchical structure of the description looks like this:

+

Device =

+
    +
  • +

     Peripherals

    +
      +
    • +

      Peripheral

      +
        +
      • +

        Registers

        +
          +
        • +

          + Register

          +
            +
          • +

            + Fields

            +
              +
            • +

              Field

              +
                +
              • +

                Enumerated Values

                +
                  +
                • +

                  Enumerated Value

                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+ +

One file can only contain a description for a single device or device family +sharing the identical description. Devices consists of a one or more peripherals. +Each peripheral contains +one or more registers, where each register may consist of one or more fields. +The values of a field maybe represented through descriptive strings and detailed +descriptions, the enumerated values.

+

In many cases there are multiple +instances of the same peripheral in a device (e.g. Timer0, Timer1, etc.). For +this reason the description has the concept of deriving a peripheral from a peripheral +that has already been described. The attribute derivedFrom specifies +such a relationship. +Similarly registers or fields can be reused within the device description. The +grouping of  peripherals providing +similar functionality (e.g. Simple Timer, Complex Timer) is controlled via the element groupName. +All peripherals associated with the same group name are collectively listed under this group +in the order they have been specified in the file. +Collecting  +similar or related peripherals into peripheral groups helps structuring the list +of peripherals e.g. in a drop down menu (tool dependent). Devices with a large +set of peripherals will benefit from this additional level of structure.

+

Each of the items (i.e. Device, Peripheral, Register and +Field) owns an description element containing verbose information about +the respective element. The description field plays +an important part in improving the software development productivity. Instead of +searching through the reference manual the detailed explanation from the manual +could become immediately accessible from within the development environment.

+

Details about the exact display format and layout of the peripheral view are +considered beyond the scope of the description. It is up to the tool vendor to +visualize the contained information appropriately. The +silicon vendor provides details about the device's peripherals that is commonly available.

+

System View Description files need to be validated for:

+
    +
  1. syntactical correctness using XML-Schema checking utilities
  2. +
  3. consistency  of the provided information (e.g. multiple registers mapped to the same address, + all registers located within the specified address ranges of a + peripheral, all fields are within the range of the register + size, etc.) by a utility developed by ARM (SVDConv.exe)
  4. +
  5.  semantical correctness of the System View Description + against the silicon specification executed by the silicon vendor
  6. +
+

The SVD description format was extended by numerous elements during the +review period targeting version 1.0 and new extensions are expected for future +versions of this format. A new section named "vendorExtensions" has been added +to the end of the top level to allow silicon vendors and tool partners to +innovate and expand the description in order to overcome limitations of the +current specification until these can be incorporated into new versions of +CMSIS-SVD.
+

+ +

 Format

+ +

+ The following section describes the SVD file format in detail. Each subsection + defines a single hierarchy level of the description and lists all mandatory + and optional language elements for that specific level including type + information for each element. Each element is discussed in more detail and a + brief snippet is provided as an example. The sequence of elements shown + below is binding. Optional elements are highlighted in green, blue elements + are mandatory unless they have been already specified globally on a higher + level.

+

+ An XML-schema file is provided alongside this document for syntactical + checking of descriptions being developed.

+

<device schemaVersion="xs:decimal" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="CMSIS-SVD_Schema_1_0.xsd">

+

   <name>xs:Name</name>
+   <version>xs:string</version>
+   <description>xs:string</description>
+
   <addressUnitBits>scaledNonNegativeInteger</addressUnitBits>
+   <width>scaledNonNegativeInteger </width>

+
+   <size>scaledNonNegativeInteger</size>
+
   <access>accessType</access>
+   <resetValue>scaledNonNegativeInteger</resetValue>
+   <resetMask>scaledNonNegativeInteger</resetMask>

+

   <peripherals>
+      ...
+   </peripherals>
+   <vendorExtensions>
+      ...
+    </vendorExtensions>

+

</device>

+

The device provides the outermost frame of the description. All other +elements like peripherals, registers and fields are described inside of this scope. A device contains one or more peripherals. +The optional elements size, access, resetValue and resetMask are used as default values throughout the +device description unless they get overruled on a lower level of the description +(e.g. peripheral or register).

+

Mandatory items:

+

name = the unique name string is used to identify the device. +All devices of a silicon vendor are required to have a unique name. In case an +SVD description covers a family or series of devices, the name of the series or +family is placed here. The device names of the members of the series or family +are listed in <memberDevices>

+

description = string describing main features of a device +(e.g. CPU, clock frequency, peripheral overview, etc.)

+

version = the string is defining the version of the +description for this device. Silicon vendors will maintain the description +throughout the lifecycle of the device and need to ensure that all updated and +released copies have a unique version string indicating the order in which. Note: this must not be used for +detailing the version of the device.

+

 

+

addressUnitBits = defines the number of data bits for each address +increment. The value for Cortex-M based devices is  8 (byte-addressable).

+

width = defines the number of bits for the maximum single +transfer size allowed by the bus interface hence the maximum size of a single +register that can be defined for the address space. This information is relevant +for debuggers when determining the size of debug transfers. The expected value +for Cortex-M based devices is 32.

+

peripherals = next level of description (see next section +for details)

+

Optional Items:

+

size = defines the default bit-width of registers contained +in the device. This element can be overruled by re-specifying the size element on a lower level of the +description.

+

access = defines the default access permissions for all +registers in the device. The allowed tokens are:
+  - read-only: read access is permitted. Write operations have an undefined +result.
+  - write-only: write access is permitted. Read operations have an +undefined result.
+  -read-write: both read and write accesses are permitted. Writes affect +the state of the register and reads return a value related to the register
+  -writeOnce: only the first write after reset has an effect on the +register. Read operations deliver undefined results
+  -read-writeOnce: Read operations deliver a result related to the register +content. Only the first write access to this register after a reset will have an +effect on the register content.

+

resetValue = defines the default value of all registers +after a reset. There are scenarios where SW developers need to know, what the +reset value of a register or field is. Even though listed as optional on this +level of the description, silicon vendors should ensure that this information is +provided for all registers.

+

resetMask = defines those bit positions set to one to be +taken from resetValue element. All other elements are undefined. If a register +does not have a defined reset value the resetMask needs to be set to 0.

+

vendorExtensions = the content and format of this section of +the description is unspecified. Silicon vendors may choose to provide additional +information. The assumption is that by default this section is completely +ignored by the debugger. It is up to the silicon vendor to specify the content +of this section and share the specification with the tool vendors. The new +elements shall be considered for a future version of the description format.

+

Example:

+
<device schemaVersion="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="CMSIS-SVD_Schema_1_0.xsd" >
+  <name>CMSIS_Cortex-M3</name>
+  <version>0.1</version>
+  <description>ARM Cortex-M3 based Microcontroller demonstration device</description>
+  <addressUnitBits>8</addressUnitBits>
+  <width>32</width>
+  <size>32</size>
+  <access>read-write</access>
+  <resetValue>0</resetValue>
+  <resetMask>0xffffffff</resetMask>
+
  <peripherals>
+    ...
+  </peripherals>
+</device>
+

The device description above is at version 0.1 and uniquely identifies the +device by the name "CMSIS_Cortex-M3". The peripherals are memory mapped in a +byte-addressable address space with a bus width of 32 bits. The default size of +the registers contained in the peripherals is set to 32 bits. Unless redefined +for specific peripherals, registers or fields all registers are read-write +accessible. A reset value of 0 valid for all 32 bits as specified by the reset +mask is set for all registers unless overruled at a lower level of the description.

+
+

<peripherals>

+

   <peripheral>
+     ...
+   </peripheral>

+

     ...

+

   <peripheral>
+     ...
+   </peripheral>

+

</peripherals>

+

This construct sets the frame for all peripherals and peripheral groups contained in a device. This +creates a container element which ease-up processing with languages like Java.

+
+

<peripheral derivedFrom="xs:Name">

+

   <name>xs:Name</name>
+   <version>xs:string</name>
+   <description>xs:string </description>
+   <groupName>xs:string</groupName>
+   <prependToName>xs:string</prependToName>
+   <appendToName>xs:string</appendToName>

+   <disableCondition>xs:string</disableCondition>
+   <baseAddress>scaledNonNegativeInteger</baseAddress>
+   <size>scaledNonNegativeInteger</size>
+
   <access>accessType</access>
+   <resetValue>scaledNonNegativeInteger</resetValue>
+   <resetMask>scaledNonNegativeInteger</resetMask>

+

   <addressBlock>
+      <offset>
scaledNonNegativeInteger</offset>
+      <size>
scaledNonNegativeInteger</size>
+      <usage>usageType</usage>
+   </addressBlock>
+
   ...
+
  <addressBlock>
+      <offset>
scaledNonNegativeInteger</offset>
+      <size>
scaledNonNegativeInteger</size>
+      <usage>usageType</usage>
+   </addressBlock>
+   <interrupt>
+      <name>xs:string</name>
+      <value>scaledNonNegativeInteger</value>
+   </interrupt>

+
   <registers>
+   ...
+   </registers>

+

</peripheral>

+

A peripheral encloses the description of one or more registers belonging to +this named peripheral. The address range allocated in the address space for this +peripheral is defined through one or more address ranges. An address range is +specified relative to the base address of the peripheral. This information +allows to display a memory map overview for all peripherals. Please note that +such a memory map does not contain any information for memories and unoccupied +address ranges.

+

Mandatory items:

+

name = name string used to identify the peripheral. Peripheral +names are required to be unique within the scope of a device.

+

baseAddress = lowest address reserved or used by the peripheral

+

description = string providing an overview of the purpose +and functionality of the peripheral

+

addressBlock = a peripheral may occupy one or more disparate +blocks in the address space. An addressBlock is a complex element consisting of +the mandatory elements:
+    offset: specifying the start address of an address block. It +is calculated from the sum of baseAddress and offset
+    size: specifying the number of addressUnitBits being covered +by this address block. The end address of an address block is the sum of start +address and the size - 1.
+    usage: the usage element is of usageType specifying +if the addresses within the specified address block is used for +registers or buffer or is reserved. +
+Note: registers must not be allocated +to an address within a reserved or buffer address range.

+

registers = next lower level of description (see next section +for details)

+

Optional items:

+

derivedFrom = this attribute specifies the name of a peripheral +that has already been described for this device. The description of that device +will be copied. It is mandatory to overwrite the name as well as the +addressOffset. All other specified information will overwrite the respective +elements in the copy.

+

version = the string specifies the version of this +peripheral description.

+

disableCondition = C language compliant logical expression +resulting in a true or false result. If "true" the refresh of the display +for this peripheral is disabled +and related accesses by the debugger are suppressed. Only constants and references to other registers +contained in the description are allowed:  +<peripheral>-><register>-><field> (e.g.: (System->ClockControl->apbEnable == 0)). +Only the following operators are allowed [&&,||, ==, !=, >>, <<, &, |]. Warning! +This feature must only be use in case accesses from the debugger to registers of +un-clocked peripherals result in severe debugging failures. SVD is intended to +be fully static information and not include any run-time computation or +functions such capabilities may be added by the tools but is considered beyond +the scope of this description language.

+

prependToName = all register names of this peripheral have +their names prepended with the string specified

+

appendToName = all register names of this peripheral have +their names appended with the string specified

+

size = defines the default bit-width of registers contained +in the device. This element can be overruled by re-specifying the size element on a lower level of the +description.

+

access = defines the default access permissions for all +registers in the peripheral. The value can be reset on a lower level of the +description. The allowed tokens are:
+  - read-only: read access is permitted. Write operations have an undefined +result.
+  - write-only: write access is permitted. Read operations have an +undefined result.
+  -read-write: both read and write accesses are permitted. Writes affect +the state of the register and reads return a value related to the register
+  -writeOnce: only the first write after reset has an effect on the +register. Read operations deliver undefined results
+  -read-writeOnce: Read operations deliver a result related to the register +content. Only the first write access to this register after a reset will have an +effect on the register content.

+

resetValue = defines the default value of all registers +after a reset but can be set for individual registers and fields on a lower +level of the description.

+

resetMask = defines those bit positions set to one to be +taken from resetValue element. All other elements are undefined. This is the +default value for the whole peripheral but can be readjusted on lower levels. If +a register does not have a defined reset value the resetMask needs to be set to +0.

+

interrupt = is a complex type that consists of the name of +the interrupt and the associated enumeration value. A peripheral can also have +multiple associated interrupts. This entry is mainly intended for information +only purposes in order to display the interrupts and respective interrupt +numbers associated with a peripheral.

+

Example:

+
... 
+    <peripheral>
+       <name>Timer0</name>
+       <version>1.0.32</version>
+       <description>Timer 0 is a simple 16 bit timer counting down ... </description>
+       <baseAddress>0x40000000</baseAddress>
+       <addressBlock>
+         <offset>0x0</offset>
+         <size>0x400</size>
+         <usage>registers</usage>
+       </addressBlock>
+       <interrupt><name>TIM0_INT</name><value>34</value></interrupt>
+       <registers>
+         ...
+       </registers>
+    </peripheral>
+    <peripheral derivedFrom="Timer0">
+      <name>Timer1</name>
+      <baseAddress>0x40000400</baseAddress>
+    </peripheral>
+
+...
+
+

<registers> ... </registers>

+

This construct sets the frame for all registers contained in a peripheral. +This creates container elements which ease-up processing with languages like Java.

+
+

<register derivedFrom=xs:Name>

+

   <dim>scaledNonNegativeInteger</dim>
+   <dimIncrement>scaledNonNegativeInteger</dimIncrement>
+   <dimIndex>xs:string</dimIndex>

+   <name>xs:Name</name>
+   <displayName>xs:string</displayName>
+
   <description>xs:string</description>
+   <alternateGroup>xs:Name</alternateGroup>
+
   <addressOffset>scaledNonNegativeInteger +</addressOffset>
+    <size>scaledNonNegativeInteger</size>
+
   <access>accessType</access>
+  
<resetValue>scaledNonNegativeInteger</resetValue>
+   <resetMask>scaledNonNegativeInteger</resetMask>
+
+
   <modifiedWriteValues>writeValueType</modifiedWriteValues>
+   <writeConstraint>writeConstraintType</writeConstraint>
+   <readAction>readActionType </readAction>

+
   <fields>
+      ...
+   </fields>

+

</register>

+

The definition of registers is the central part of the description. A +register may use its complete size for a single purpose and therefore not +consist of fields. Otherwise the description +of fields is mandatory.

+

Mandatory items:
+

+

name = name string used to identify the register. Register +names are required to be unique within the scope of a peripheral.

+

description = string describing the details of the register.

+

addressOffset = value defining the address of the register relative to +the baseAddress defined by the peripheral the register belongs to.
+

+

The following elements can be omitted if the corresponding value has been set +on a higher level of the description and matches the value required for this register:

+

size =value defining the bit-width of the register

+

access = predefined tokens: read-only, write-only, read-write, +writeOnce, read-writeOnce strings defining the allowed +accesses for this register.

+

resetValue = element defining the value of the register +immediately after a reset.

+

resetMask= element specifying those bits of the resetValue that +are defined (bit positions containing a 0 bit are ignored, bit +positions containing a 1 bit are taken from the corresponding bit position of +the resetValue). If a register does not have a defined reset value the resetMask +needs to be set to 0.

+

Optional items:

+

dim = if this field is specified the value defines the +number of elements in an array of registers.

+

dimIncrement = if dim is specified this element becomes +mandatory and specifies the address increment in between +two neighboring registers of the register array in the address map.

+

dimIndex = this element specifies the substrings within the +register array names that will replace the %s within the register name. By +default the index is a decimal value starting with 0 for the first register. +Examples:
+   <dim>6</dim> <dimIncrement>4</dimIncrement> <dimIndex>A,B,C,D,E,Z</dimIndex> +<name>GPIO_%s_CTRL</name> ...
+   => GPIO_A_CTRL, GPIO_B_CTRL, GPIO_C_CTRL, GPIO_D_CTRL, GPIO_E_CTRL, +GPIO_Z_CTRL
+   <dim>4</dim> <dimIncrement>4</dimIncrement> <dimIndex>3-6</dimIndex> +<name>IRQ%s</name> ...
+   => IRQ3, IRQ4, IRQ5, IRQ6                 

+

displayName = when used, this is the string being used by a +graphical frontend to visualize the register otherwise the name element is used. +Note: the display name may contain special characters and white spaces. It also +uses "%s" as the place holder for the dimIndex substring.

+

alternateGroup = when used, this element specifies a name of +a group that all alternate register with the same name a associated with. At the +same time it indicates that there is a register description allocating the same +absolute address in the address space.

+

modifiedWriteValues = element to describe the manipulation of +data written to a register. If not specified the value written to the field is the +value stored in the field. The other options are bitwise operations:
+  oneToClear: write data bits of one shall clear (set to zero) the +corresponding bit in the register
+  oneToSet: write data bits of one shall set (set to one) the +corresponding bit in the register
+  oneToToggle: write data bits of one shall toggle (invert) the +corresponding bit in the register
+  zeroToClear: write data bits of zero shall clear (set to zero) +the corresponding bit in the register
+  zeroToSet: write data bits of zero shall set (set to one) the +corresponding bit in the register
+  zeroToToggle: write data bits of zero shall toggle (invert) the +corresponding bit in the register
+  clear: after a write operation all bits in the field are cleared (set to +zero)
+  set: after a write operation all bits in the field are set (set to one)
+  modify: after a write operation all bit in the field may be modified +(default)

+

writeConstraint: has a set of options:
+  writeAsRead = if true only the last read value can be written
+  useEnumeratedValues = if true only those values listed in the +enumeratedValues list are considered valid write values
+  minimum = specifies the smallest number to be written to the +register
+  maximum = specifies the largest number to be written to the +register

+

readAction: if set it specifies the side effect following +read operations. If not set the register is not modified following a read +operations. The defined side effects are:
+  clear: indicates that the register is cleared (set to zero) +following a read operation
+  set: indicates that the register is set (set to ones) following a +read operation
+  modify: indicates that the register is modified in some way +after a read operation
+  modifyExternal: indicates that one or more dependent resources +other than the current register +are immediately affected by a read (it is recommended that the register +description specifies these dependencies). Debuggers are not expected to read +this register location unless explicitly instructed by user.

+

fields = next lower level of description (see next section +for details).

+

Optional attribute:

+

derivedFrom = specifies the name of the register to be +replicated. Elements being specified underneath will override the values specified +from the register being derived from. Note that it is mandatory to overwrite at +least name and addressOffset.

+

Example:

+
... 
+       <register>
+         <name>TimerCtrl0</name>
+         <description>Timer Control Register</description>
+         <addressOffset>0x0</addressOffset>
+         <access>read-write</access>
+         <resetValue>0x00008001</resetValue>
+         <resetMask>0x0000ffff</resetMask>
+         <size>32<size>
+         <fields>
+           ...
+         </fields>
+       </register>
+       <register derivedFrom="TimerCtrl0">
+         <name>TimerCtrl1</name>
+         <addressOffset>0x4<addressOffset>
+       </register>
+...
+
+

<fields> ... </fields>

+

This construct sets the frame for all fields contained in a register. +This creates container elements which ease-up processing with languages like Java.

+
+

 <field derivedFrom="xs:Name">

+

   <name>xs:Name</name>
+ 
  <description>xs:string</description>
+   +<bitOffset>scaledNonNegativeInteger</bitOffset> +<bitWidth>scaledNonNegativeInteger</bitWidth>
+  
or
+   <lsb>scaledNonNegativeInteger</lsb> <msb>scaledNonNegativeInteger</msb>
+  
or
+   <bitRange>pattern</bitRange>
+   <access>accessType</access>
+
   <modifiedWriteValues>writeValueType</modifiedWriteValues>
+   <writeConstraint>writeConstraintType</writeConstraint>
+   <readAction>readActionType </readAction>

+ 
  <enumeratedValues>
+      ...
+   </enumeratedValues>

+

</field>

+

A bit-field has a name that is unique for the register it belongs to. The +position and size within the register is either described by the combination of +the least significant bit's position (lsb) and the most significant bit's +position (msb) or the lsb and the size, specifying the bit-width of the +field.  A field may define an enumeratedValue in order to make the display +more intuitive to read.

+

Mandatory items:

+

name = name string used to identify the field. Field names +are required to be unique within the scope of a register.
+

+

description = string describing the details of the register.
+

+

There are 3 ways to describe a field to be used mutually exclusive:
+a) specifying bitOffset and bitWidth (IP-XACT like)
+b) specifying lsb and msb of the field.
+c) specifying a bit range in the format "[<msb>:<lsb>]"

+

bitOffset = value defining the position of the least significant bit +of the field within the register it belongs to.
+bitWidth = value defining the bit-width of the bitfield within the +register it belongs to.
+

+

+lsb = value defining the bit position of the least significant +bit within the register it belongs to.
+msb = value defining the bit position of the most significant +bit within the register it belongs to. +

+

bitRange = a string in the format: [<msb>:<lsb>]
+

+

Optional items:

+

derivedFrom = the field is cloned +from a previously defined field with a unique name.

+

access = predefined strings defining the allowed +accesses for this register: read-only, write-only, read-write, writeOnce, +read-writeOnce. Can be omitted if it matches the access permission set for the parent register.

+

enumeratedValues = next lower level of description (see next section +for details)

+

modifiedWriteValues = element to describe the manipulation of +data written to a field. If not specified the value written to the field is the +value stored in the field. The other options are bitwise operations:
+  oneToClear: write data bit of one shall clear (set to zero) the +corresponding bit in the field
+  oneToSet: write data bit of one shall set (set to one) the corresponding +bit in the field
+  oneToToggle: write data bit of one shall toggle (invert) the +corresponding bit in the field
+  zeroToClear: write data bit of zero shall clear (set to zero) the +corresponding bit in the field
+  zeroToSet: write data bit of zero shall set (set to one) the +corresponding bit in the field
+  zeroToToggle: write data bit of zero shall toggle (invert) the +corresponding bit in the field
+  clear: after a write operation all bits in the field are cleared (set to +zero)
+  set: after a write operation all bits in the field are set (set to one)
+  modify: after a write operation all bit in the field may be modified +(default)

+

writeConstraint: has a set of options:
+  writeAsRead = if true only the last read value can be written
+  useEnumeratedValues = if true only those values listed in the +enumeratedValues list are considered valid write values
+  minimum = specifies the smallest number to be written to the field
+  maximum = specifies the largest number to be written to the field

+

readAction: if set it specifies the side effect following +read operations. If not set the field is not modified following a read +operations. The defined side effects are:
+  clear: indicates that the field is cleared (set to zero) +following a read operation
+  set: indicates that the field is set (set to ones) following a +read operation
+  modify: indicates that the field is modified in some way after a +read operation  +
+  modifyExternal: indicates that one or more dependent resources +other than this field are immediately affected by a read (it is recommended that +the field description specifies these dependencies). Debuggers are not expected +to read the field unless explicitly instructed by user.

+

Example:

+
...
+         <field>
+           <name>TimerCtrl0_IntSel</name>
+           <description>Select interrupt line that is triggered by timer overflow.</description>
+	   <bitOffset>1</bitOffset>
+           <bitWidth>3</bitWidth>
+           <access>read-write</access>
+	   <resetValue>0x0</resetValue>
+           <modifiedWriteValues>oneToSet</modifiedWriteValues>
+           <writeConstraint>
+              <range>
+                <minimum>0</minimum>
+                <maximum>5</maximum>
+              </range>
+           </writeConstraint>
+           <readAction>clear</readAction>
+ 
+           <enumeratedValues>
+              ...
+           </enumeratedValues>
+         </field>
+...
+
+

<enumeratedValues +derivedFrom="xs:Name">

+

   <name>xs:Name</name>
+   <usage>usageType</usage>

+   <enumeratedValue>
+      ...
+   </enumeratedValue>

+

      ... 

+

   <enumeratedValue>
+      ...
+   </enumeratedValue>

+

</enumeratedValues>

+

An enumerated value provides one or more enumeration items (enumeratedValue), defining a map +between all possible values of the bit-field it belongs to and the corresponding +human readable semantics of that value.

+

Mandatory items:
+enumeratedValue = next lower level of description (see next section +for details)

+

Optional items:
+derivedFrom = the enumeratedValues can be copied or derived +from a previously defined enumeratedValue that has been given a unique name.
+name = name string to identify an enumeratedValue. Named +enumeratedValues need to be unique in the scope of a device in order to be reusable +throughout the description of a device.
+usage = possible values are read, write or +read-write. This allows to specify two different enumerated values +depending whether it is to be used for a read or a write access. If not specified the enueratedValues are valid for read and write.

+

Example:

+
...
+           <enumeratedValues>
+              <name>TimerIntSelect</name>
+              <usage>read-write</usage>
+              <enumeratedValue>
+                <name>disabled</name>
+                <description>disabled bit</description>
+                <value>0</value>
+              </enumeratedValue>
+              ...
+              <enumeratedValue>
+                <name>reserved</name>
+	        <description>reserved values. Do not use</description>
+                <isDefault>true</isDefault>
+              </enumeratedValue>
+           </enumeratedValues>
+...
+
+

<enumeratedValue>

+

   <name>xs:name</name>
+   <description>xs:string</description>
+
   <value>scaledNonNegativeInteger</value>
+   +
or
+   <
isDefault>xs:boolean</isDefault>
+

+

</enumeratedValue>

+

An enumeratedValue defines a map between a value and the string reading the +corresponding human readable semantics for that value in a brief and a detailed +version

+

Mandatory items:

+

name= brief string verbally describing the semantics of the value +defined for this enumeratedValue. E.g. used for display in visualization of a bit-field +instead of the value.

+

+value = defines the constant of the bit-field that the name +corresponds to.

+

isDefault = defines the name and description for all other +values that are not explicitly listed

+

Optional item:

+

description = extended string verbally describing the semantics +of the value defined for this enumeratedValue in full detail.

+

Example:

+
...
+         <enumeratedValue>
+            <name>disabled</name>
+            <description>Timer does not generate interrupts</description>
+            <value>0</value>
+         </enumeratedValue>
+         ...
+         <enumeratedValue>
+            <name>enabled</name>
+            <description>Timer does not generate interrupts</description>
+            <isDefault>true</isDefault>
+         </enumeratedValue>
+
+...
+
+

Names

+

Names shall comply with ANSI C variable naming restrictions.

+

Constants

+

Number constants shall be entered in hexadecimal, decimal or binary format.

+
    +
  • hexadecimal is indicated by a leading "0x"
  • +
  • binary format is indicated by a leading  "#"
  • +
  • all other formats are interpreted as decimal numbers
  • +
  • the value tag in enumeratedValue accepts do not care bits + represented by "x"
  • +
+

Comments

+

Comments have the standard XML format "<!--" starts a comment + "-->" terminates a comment

+

Example

+
+<?xml version="1.0" encoding="utf-8"?>
+ 
+<device schemaVersion="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="CMSIS-SVD_Schema_1_0.xsd" >
+  <name>Cortex_M3_Sample</name>
+  <version>0.1</version>
+  <description>ARM Cortex-M3 based Microcontroller dummy device</description>
+  <!-- Bus Interface Properties -->
+  <!-- Cortex-M3 is byte addressable -->
+  <addressUnitBits>8</addressUnitBits>
+  <!-- the maximum data bit width accessible within a single transfer is 32bits -->
+  <width>32</width>
+
+  <!-- Register Default Properties -->
+  <!-- the size of the registers is set to a bit width of 32. This can be overruled for individual peripherals and/or registers -->
+  <size>32</size>
+  <!-- the access to all registers is set to be readable and writeable. This can be overruled for individual peripherals and/or registers -->
+  <access>read-write</access>
+  <!-- for demonstration purposes the resetValue for all registers of the device is set to be 0. This can be overruled within the description -->
+  <resetValue>0</resetValue>
+  <!-- the resetMask = 0 specifies that by default no register of this device has a defined reset value -->
+  <resetMask>0</resetMask>
+
+  <peripherals>
+    <peripheral>
+      <name>Timer0</name>
+      <description>A simple 16 bit timer counting down ... </description>
+      <groupName>Timer</groupName>
+      <baseAddress>0x40000000</baseAddress>
+      <!-- the first addressBlock is occupied by registers. The second block is reserved -> no access permission -->
+      <addressBlock>
+        <offset>0</offset>
+        <size>0x8</size>
+        <usage>registers</usage>
+      </addressBlock>
+      <addressBlock>
+        <offset>0x8</offset>
+        <size>0x3f8</size>
+        <usage>reserved</usage>
+      </addressBlock>
+      <interrupt>
+        <name>TIM0_IRQn</name>
+        <value>34</value>
+      </interrupt>
+      <registers>
+        <register> 
+          <name>TimerCtrl0</name>
+          <!-- the display name is an unrestricted string. -->
+          <displayName>Timer Ctrl 0</displayName>
+          <description>Timer Control Register</description>
+          <addressOffset>0x0</addressOffset>
+          <!-- size=32, access=read-write, resetValue=0x0, resetMask=0xffffffff, volatile=false -->
+          <fields>
+            <field>
+              <name>TimerCtrl0_En</name>
+              <description>Enable Bit activates the timer.</description>
+              <!-- Spirit like bit range description: [0:0] -->
+              <bitOffset>0</bitOffset>
+              <bitWidth>1</bitWidth>
+              <!-- Writing 1 enables, writing 0 has no effect -->
+	      <modifiedWriteValues>oneToSet</modifiedWriteValues>
+              <!-- The write constraint is defined to be that only the values provided by the enumeratedValues below are allowed -->
+              <writeConstraint>
+                <useEnumeratedValues>true</useEnumeratedValues>
+              </writeConstraint>
+              <!-- there is no side effect on reads, therefore <readAction> is not set -->
+              <!-- oneBitEnable named enumeration that can be reused in other parts of the description -->
+              <enumeratedValues>
+                <name>oneBitEnable</name>
+                <!-- the same enumerated Values are used for read and write. This default is assumed when this tag is missing -->
+                <usage>read-write</usage>
+                <enumeratedValue>
+                  <name>enabled</name>
+                  <description>Timer is enabled and active</description>
+                  <value>0x0</value>
+                </enumeratedValue>
+                <enumeratedValue>
+                  <name>disabled</name>
+                  <description>Timer is disabled and inactive</description>
+                  <value>0x1</value>
+                </enumeratedValue>
+              </enumeratedValues>
+            </field>
+            <field>
+              <name>TimerCtrl0_Dis</name>
+              <description>Disable Bit deactivates the timer.</description>
+              <!-- Spirit like bit range description: [1:1] -->
+              <bitOffset>1</bitOffset>
+              <bitWidth>1</bitWidth>
+              <!-- Writing 1 sets, writing 0 has no effect -->
+	      <modifiedWriteValues>oneToSet</modifiedWriteValues>
+              <!-- The write constraint is defined to be that only the values provided by the enumeratedValues below are allowed -->
+              <writeConstraint>
+                <useEnumeratedValues>true</useEnumeratedValues>
+              </writeConstraint>
+              <!-- there is no side effect on reads, therefore <readAction> is not set -->
+              <!-- oneBitEnable named enumeration that can be reused in other parts of the description -->
+              <enumeratedValues derivedFrom="oneBitEnable"></enumeratedValues>
+            </field>
+            <field>
+              <name>TimerCtrl0_Int</name>
+              <description>Select interrupt line that is triggered by timer overflow.</description>
+              <!-- the position of the bit field is described in the bitRange style. -->
+              <bitRange>[4:2]</bitRange>
+              <enumeratedValues>
+                <enumeratedValue>
+                  <name>disabled</name>
+                  <description>Timer does not generate interrupts</description>
+                  <value>0</value>
+                </enumeratedValue>
+                <enumeratedValue>
+                  <name>int 0</name>
+                  <description>Timer does generate interrupts on interrupt line 0</description>
+                  <value>1</value>
+                </enumeratedValue>
+                <enumeratedValue>
+                  <name>int 1</name>
+                  <description>Timer does generate interrupts on interrupt line 1</description>
+                  <value>2</value>
+                </enumeratedValue>
+                <enumeratedValue>
+                  <name>int 2</name>
+                  <description>Timer does generate interrupts on interrupt line 2</description>
+                  <value>3</value>
+                </enumeratedValue>
+                <enumeratedValue>
+                  <name>int 3</name>
+                  <description>Timer does generate interrupts on interrupt line 3</description>
+                  <value>4</value>
+                </enumeratedValue>
+                <enumeratedValue>
+                  <name>int 4</name>
+                  <description>Timer does generate interrupts on interrupt line 4</description>
+                  <value>5</value>
+                </enumeratedValue>
+                <!-- this is the default element. All the valid value not listed above (6,7) have the following name and description -->
+                <enumeratedValue>
+                  <name>reserved</name>
+                  <description>Timer is configured incorrectly and the functionality is considered unpredictable</description>
+                  <isDefault>true</isDefault>
+                </enumeratedValue>
+              </enumeratedValues>
+            </field>
+          </fields>
+        </register>
+        <register>
+          <name>TimerCounter0</name>
+          <description>Timer0 16 Bit Counter Register</description>
+          <addressOffset>0x4</addressOffset>
+          <size>16</size>
+        </register>
+        <!-- a copy of the counter register TimerCounter0 with the name="TimerCounter1" and the addressOffset="0x8" -->
+        <register derivedFrom="TimerCounter0">
+          <name>TimerCounter1</name>
+          <addressOffset>0x6</addressOffset>
+        </register>
+        <!-- ... this is a restricted demo example and a real timer peripheral would have more register to be complete -->
+      </registers>
+    </peripheral>
+    <!-- a copy of Timer0 with the name="Timer1 and the baseAddress="0x40000400" -->
+    <peripheral derivedFrom="Timer0">
+      <name>Timer1</name>
+      <baseAddress>0x40000400</baseAddress>
+      <interrupt>
+        <name>TIM1_IRQn</name>
+        <value>35</value>
+      </interrupt>
+    </peripheral>
+  </peripherals>
+</device>
+ +

Questions & Answers

+

Is there any relation between the System View Description and the CMSIS +standard?

+

Initiallly there was no immediate link but both initiatives had a common goal: +Create a sound software development eco-system for Cortex-M based +Microcontroller, giving the customers the free choice of devices and software +development environments and all resources required for a successful product +development in a single location. Meanwhile we have started to generate +CMSIS compliant device header files from the same CMSIS-SVD description. We will +introduce a small number of additional description tags in the next version of +the specification. The benefit is the synchronization between symbols used in +the application and the symbols displayed by the debugger. 

+

Why does the format not provide constructs like macros and +conditional statements?

+

It is assumed that the description is generated from other sources and +therefore such concepts would only complicate the language unnecessarily. It is +recommended to use a standard C pre-processor to generate the debug description +format from a redundancy optimized description.

+

Do we need to consider endianess in the description?

+

This should be specified on a device configuration level and is not specific +to the visualization of peripheral details in a System View. Endianess becomes +relevant when using bit fields in the CMSIS compliant device header file.

+

Is the System View Description limited to Cortex-M based devices ?

+ + +

There may have been assumptions made about the structure of the device due to +it being developed around a Cortex-M processor. E.g. that all peripherals are +assumed to be memory mapped and to reside in a single address space. It is quite +likely that the description format may also serve other architectures +sufficiently. There is no intent to limit the format to Cortex-M +processor based devices.

+ + + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/arm_common_tables.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/arm_common_tables.h new file mode 100644 index 000000000..34f910f9b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/arm_common_tables.h @@ -0,0 +1,35 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010 ARM Limited. All rights reserved. +* +* $Date: 11. November 2010 +* $Revision: V1.0.2 +* +* Project: CMSIS DSP Library +* Title: arm_common_tables.h +* +* Description: This file has extern declaration for common tables like Bitreverse, reciprocal etc which are used across different functions +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Version 1.0.2 2010/11/11 +* Documentation updated. +* +* Version 1.0.1 2010/10/05 +* Production release and review comments incorporated. +* +* Version 1.0.0 2010/09/20 +* Production release and review comments incorporated. +* -------------------------------------------------------------------- */ + +#ifndef _ARM_COMMON_TABLES_H +#define _ARM_COMMON_TABLES_H + +#include "arm_math.h" + +extern uint16_t armBitRevTable[256]; +extern q15_t armRecipTableQ15[64]; +extern q31_t armRecipTableQ31[64]; +extern const q31_t realCoefAQ31[1024]; +extern const q31_t realCoefBQ31[1024]; + +#endif /* ARM_COMMON_TABLES_H */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/arm_math.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/arm_math.h new file mode 100644 index 000000000..d8901db15 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/arm_math.h @@ -0,0 +1,7051 @@ +/* ---------------------------------------------------------------------- + * Copyright (C) 2010 ARM Limited. All rights reserved. + * + * $Date: 15. July 2011 + * $Revision: V1.0.10 + * + * Project: CMSIS DSP Library + * Title: arm_math.h + * + * Description: Public header file for CMSIS DSP Library + * + * Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 + * + * Version 1.0.10 2011/7/15 + * Big Endian support added and Merged M0 and M3/M4 Source code. + * + * Version 1.0.3 2010/11/29 + * Re-organized the CMSIS folders and updated documentation. + * + * Version 1.0.2 2010/11/11 + * Documentation updated. + * + * Version 1.0.1 2010/10/05 + * Production release and review comments incorporated. + * + * Version 1.0.0 2010/09/20 + * Production release and review comments incorporated. + * -------------------------------------------------------------------- */ + +/** + \mainpage CMSIS DSP Software Library + * + * Introduction + * + * This user manual describes the CMSIS DSP software library, + * a suite of common signal processing functions for use on Cortex-M processor based devices. + * + * The library is divided into a number of modules each covering a specific category: + * - Basic math functions + * - Fast math functions + * - Complex math functions + * - Filters + * - Matrix functions + * - Transforms + * - Motor control functions + * - Statistical functions + * - Support functions + * - Interpolation functions + * + * The library has separate functions for operating on 8-bit integers, 16-bit integers, + * 32-bit integer and 32-bit floating-point values. + * + * Processor Support + * + * The library is completely written in C and is fully CMSIS compliant. + * High performance is achieved through maximum use of Cortex-M4 intrinsics. + * + * The supplied library source code also builds and runs on the Cortex-M3 and Cortex-M0 processor, + * with the DSP intrinsics being emulated through software. + * + * + * Toolchain Support + * + * The library has been developed and tested with MDK-ARM version 4.21. + * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly. + * + * Using the Library + * + * The library installer contains prebuilt versions of the libraries in the Lib folder. + * - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4) + * - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4) + * - arm_cortexM4l_math.lib (Little endian on Cortex-M4) + * - arm_cortexM4b_math.lib (Big endian on Cortex-M4) + * - arm_cortexM3l_math.lib (Little endian on Cortex-M3) + * - arm_cortexM3b_math.lib (Big endian on Cortex-M3) + * - arm_cortexM0l_math.lib (Little endian on Cortex-M0) + * - arm_cortexM0b_math.lib (Big endian on Cortex-M3) + * + * The library functions are declared in the public file arm_math.h which is placed in the Include folder. + * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single + * public header file arm_math.h for Cortex-M4/M3/M0 with little endian and big endian. Same header file will be used for floating point unit(FPU) variants. + * Define the appropriate pre processor MACRO ARM_MATH_CM4 or ARM_MATH_CM3 or + * ARM_MATH_CM0 depending on the target processor in the application. + * + * Examples + * + * The library ships with a number of examples which demonstrate how to use the library functions. + * + * Building the Library + * + * The library installer contains project files to re build libraries on MDK Tool chain in the CMSIS\DSP_Lib\Source\ARM folder. + * - arm_cortexM0b_math.uvproj + * - arm_cortexM0l_math.uvproj + * - arm_cortexM3b_math.uvproj + * - arm_cortexM3l_math.uvproj + * - arm_cortexM4b_math.uvproj + * - arm_cortexM4l_math.uvproj + * - arm_cortexM4bf_math.uvproj + * - arm_cortexM4lf_math.uvproj + * + * Each library project have differant pre-processor macros. + * + * ARM_MATH_CMx: + * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target + * and ARM_MATH_CM0 for building library on cortex-M0 target. + * + * ARM_MATH_BIG_ENDIAN: + * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets. + * + * ARM_MATH_MATRIX_CHECK: + * Define macro for checking on the input and output sizes of matrices + * + * ARM_MATH_ROUNDING: + * Define macro for rounding on support functions + * + * __FPU_PRESENT: + * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for M4bf and M4lf libraries + * + * + * The project can be built by opening the appropriate project in MDK-ARM 4.21 chain and defining the optional pre processor MACROs detailed above. + * + * Copyright Notice + * + * Copyright (C) 2010 ARM Limited. All rights reserved. + */ + + +/** + * @defgroup groupMath Basic Math Functions + */ + +/** + * @defgroup groupFastMath Fast Math Functions + * This set of functions provides a fast approximation to sine, cosine, and square root. + * As compared to most of the other functions in the CMSIS math library, the fast math functions + * operate on individual values and not arrays. + * There are separate functions for Q15, Q31, and floating-point data. + * + */ + +/** + * @defgroup groupCmplxMath Complex Math Functions + * This set of functions operates on complex data vectors. + * The data in the complex arrays is stored in an interleaved fashion + * (real, imag, real, imag, ...). + * In the API functions, the number of samples in a complex array refers + * to the number of complex values; the array contains twice this number of + * real values. + */ + +/** + * @defgroup groupFilters Filtering Functions + */ + +/** + * @defgroup groupMatrix Matrix Functions + * + * This set of functions provides basic matrix math operations. + * The functions operate on matrix data structures. For example, + * the type + * definition for the floating-point matrix structure is shown + * below: + *
+ *     typedef struct
+ *     {
+ *       uint16_t numRows;     // number of rows of the matrix.
+ *       uint16_t numCols;     // number of columns of the matrix.
+ *       float32_t *pData;     // points to the data of the matrix.
+ *     } arm_matrix_instance_f32;
+ * 
+ * There are similar definitions for Q15 and Q31 data types. + * + * The structure specifies the size of the matrix and then points to + * an array of data. The array is of size numRows X numCols + * and the values are arranged in row order. That is, the + * matrix element (i, j) is stored at: + *
+ *     pData[i*numCols + j]
+ * 
+ * + * \par Init Functions + * There is an associated initialization function for each type of matrix + * data structure. + * The initialization function sets the values of the internal structure fields. + * Refer to the function arm_mat_init_f32(), arm_mat_init_q31() + * and arm_mat_init_q15() for floating-point, Q31 and Q15 types, respectively. + * + * \par + * Use of the initialization function is optional. However, if initialization function is used + * then the instance structure cannot be placed into a const data section. + * To place the instance structure in a const data + * section, manually initialize the data structure. For example: + *
+ * arm_matrix_instance_f32 S = {nRows, nColumns, pData};
+ * arm_matrix_instance_q31 S = {nRows, nColumns, pData};
+ * arm_matrix_instance_q15 S = {nRows, nColumns, pData};
+ * 
+ * where nRows specifies the number of rows, nColumns + * specifies the number of columns, and pData points to the + * data array. + * + * \par Size Checking + * By default all of the matrix functions perform size checking on the input and + * output matrices. For example, the matrix addition function verifies that the + * two input matrices and the output matrix all have the same number of rows and + * columns. If the size check fails the functions return: + *
+ *     ARM_MATH_SIZE_MISMATCH
+ * 
+ * Otherwise the functions return + *
+ *     ARM_MATH_SUCCESS
+ * 
+ * There is some overhead associated with this matrix size checking. + * The matrix size checking is enabled via the #define + *
+ *     ARM_MATH_MATRIX_CHECK
+ * 
+ * within the library project settings. By default this macro is defined + * and size checking is enabled. By changing the project settings and + * undefining this macro size checking is eliminated and the functions + * run a bit faster. With size checking disabled the functions always + * return ARM_MATH_SUCCESS. + */ + +/** + * @defgroup groupTransforms Transform Functions + */ + +/** + * @defgroup groupController Controller Functions + */ + +/** + * @defgroup groupStats Statistics Functions + */ +/** + * @defgroup groupSupport Support Functions + */ + +/** + * @defgroup groupInterpolation Interpolation Functions + * These functions perform 1- and 2-dimensional interpolation of data. + * Linear interpolation is used for 1-dimensional data and + * bilinear interpolation is used for 2-dimensional data. + */ + +/** + * @defgroup groupExamples Examples + */ +#ifndef _ARM_MATH_H +#define _ARM_MATH_H + +#define __CMSIS_GENERIC /* disable NVIC and Systick functions */ + +#if defined (ARM_MATH_CM4) + #include "core_cm4.h" +#elif defined (ARM_MATH_CM3) + #include "core_cm3.h" +#elif defined (ARM_MATH_CM0) + #include "core_cm0.h" +#else +#include "ARMCM4.h" +#warning "Define either ARM_MATH_CM4 OR ARM_MATH_CM3...By Default building on ARM_MATH_CM4....." +#endif + +#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */ +#include "string.h" + #include "math.h" +#ifdef __cplusplus +extern "C" +{ +#endif + + + /** + * @brief Macros required for reciprocal calculation in Normalized LMS + */ + +#define DELTA_Q31 (0x100) +#define DELTA_Q15 0x5 +#define INDEX_MASK 0x0000003F +#define PI 3.14159265358979f + + /** + * @brief Macros required for SINE and COSINE Fast math approximations + */ + +#define TABLE_SIZE 256 +#define TABLE_SPACING_Q31 0x800000 +#define TABLE_SPACING_Q15 0x80 + + /** + * @brief Macros required for SINE and COSINE Controller functions + */ + /* 1.31(q31) Fixed value of 2/360 */ + /* -1 to +1 is divided into 360 values so total spacing is (2/360) */ +#define INPUT_SPACING 0xB60B61 + + + /** + * @brief Error status returned by some functions in the library. + */ + + typedef enum + { + ARM_MATH_SUCCESS = 0, /**< No error */ + ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */ + ARM_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */ + ARM_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation. */ + ARM_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */ + ARM_MATH_SINGULAR = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */ + ARM_MATH_TEST_FAILURE = -6 /**< Test Failed */ + } arm_status; + + /** + * @brief 8-bit fractional data type in 1.7 format. + */ + typedef int8_t q7_t; + + /** + * @brief 16-bit fractional data type in 1.15 format. + */ + typedef int16_t q15_t; + + /** + * @brief 32-bit fractional data type in 1.31 format. + */ + typedef int32_t q31_t; + + /** + * @brief 64-bit fractional data type in 1.63 format. + */ + typedef int64_t q63_t; + + /** + * @brief 32-bit floating-point type definition. + */ + typedef float float32_t; + + /** + * @brief 64-bit floating-point type definition. + */ + typedef double float64_t; + + /** + * @brief definition to read/write two 16 bit values. + */ +#define __SIMD32(addr) (*(int32_t **) & (addr)) + +#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0) + /** + * @brief definition to pack two 16 bit values. + */ +#define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \ + (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000) ) + +#endif + + + /** + * @brief definition to pack four 8 bit values. + */ +#ifndef ARM_MATH_BIG_ENDIAN + +#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v3) << 24) & (int32_t)0xFF000000) ) +#else + +#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v0) << 24) & (int32_t)0xFF000000) ) + +#endif + + + /** + * @brief Clips Q63 to Q31 values. + */ + static __INLINE q31_t clip_q63_to_q31( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFFFFFF ^ ((q31_t) (x >> 63)))) : (q31_t) x; + } + + /** + * @brief Clips Q63 to Q15 values. + */ + static __INLINE q15_t clip_q63_to_q15( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFF ^ ((q15_t) (x >> 63)))) : (q15_t) (x >> 15); + } + + /** + * @brief Clips Q31 to Q7 values. + */ + static __INLINE q7_t clip_q31_to_q7( + q31_t x) + { + return ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ? + ((0x7F ^ ((q7_t) (x >> 31)))) : (q7_t) x; + } + + /** + * @brief Clips Q31 to Q15 values. + */ + static __INLINE q15_t clip_q31_to_q15( + q31_t x) + { + return ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ? + ((0x7FFF ^ ((q15_t) (x >> 31)))) : (q15_t) x; + } + + /** + * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format. + */ + + static __INLINE q63_t mult32x64( + q63_t x, + q31_t y) + { + return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) + + (((q63_t) (x >> 32) * y))); + } + + +#if defined (ARM_MATH_CM0) && defined ( __CC_ARM ) +#define __CLZ __clz +#endif + +#if defined (ARM_MATH_CM0) && ((defined (__ICCARM__)) ||(defined (__GNUC__)) || defined (__TASKING__) ) + + static __INLINE uint32_t __CLZ(q31_t data); + + + static __INLINE uint32_t __CLZ(q31_t data) + { + uint32_t count = 0; + uint32_t mask = 0x80000000; + + while((data & mask) == 0) + { + count += 1u; + mask = mask >> 1u; + } + + return(count); + + } + +#endif + + /** + * @brief Function to Calculates 1/in(reciprocal) value of Q31 Data type. + */ + + static __INLINE uint32_t arm_recip_q31( + q31_t in, + q31_t * dst, + q31_t * pRecipTable) + { + + uint32_t out, tempVal; + uint32_t index, i; + uint32_t signBits; + + if(in > 0) + { + signBits = __CLZ(in) - 1; + } + else + { + signBits = __CLZ(-in) - 1; + } + + /* Convert input sample to 1.31 format */ + in = in << signBits; + + /* calculation of index for initial approximated Val */ + index = (uint32_t) (in >> 24u); + index = (index & INDEX_MASK); + + /* 1.31 with exp 1 */ + out = pRecipTable[index]; + + /* calculation of reciprocal value */ + /* running approximation for two iterations */ + for (i = 0u; i < 2u; i++) + { + tempVal = (q31_t) (((q63_t) in * out) >> 31u); + tempVal = 0x7FFFFFFF - tempVal; + /* 1.31 with exp 1 */ + //out = (q31_t) (((q63_t) out * tempVal) >> 30u); + out = (q31_t) clip_q63_to_q31(((q63_t) out * tempVal) >> 30u); + } + + /* write output */ + *dst = out; + + /* return num of signbits of out = 1/in value */ + return (signBits + 1u); + + } + + /** + * @brief Function to Calculates 1/in(reciprocal) value of Q15 Data type. + */ + static __INLINE uint32_t arm_recip_q15( + q15_t in, + q15_t * dst, + q15_t * pRecipTable) + { + + uint32_t out = 0, tempVal = 0; + uint32_t index = 0, i = 0; + uint32_t signBits = 0; + + if(in > 0) + { + signBits = __CLZ(in) - 17; + } + else + { + signBits = __CLZ(-in) - 17; + } + + /* Convert input sample to 1.15 format */ + in = in << signBits; + + /* calculation of index for initial approximated Val */ + index = in >> 8; + index = (index & INDEX_MASK); + + /* 1.15 with exp 1 */ + out = pRecipTable[index]; + + /* calculation of reciprocal value */ + /* running approximation for two iterations */ + for (i = 0; i < 2; i++) + { + tempVal = (q15_t) (((q31_t) in * out) >> 15); + tempVal = 0x7FFF - tempVal; + /* 1.15 with exp 1 */ + out = (q15_t) (((q31_t) out * tempVal) >> 14); + } + + /* write output */ + *dst = out; + + /* return num of signbits of out = 1/in value */ + return (signBits + 1); + + } + + + /* + * @brief C custom defined intrinisic function for only M0 processors + */ +#if defined(ARM_MATH_CM0) + + static __INLINE q31_t __SSAT( + q31_t x, + uint32_t y) + { + int32_t posMax, negMin; + uint32_t i; + + posMax = 1; + for (i = 0; i < (y - 1); i++) + { + posMax = posMax * 2; + } + + if(x > 0) + { + posMax = (posMax - 1); + + if(x > posMax) + { + x = posMax; + } + } + else + { + negMin = -posMax; + + if(x < negMin) + { + x = negMin; + } + } + return (x); + + + } + +#endif /* end of ARM_MATH_CM0 */ + + + + /* + * @brief C custom defined intrinsic function for M3 and M0 processors + */ +#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0) + + /* + * @brief C custom defined QADD8 for M3 and M0 processors + */ + static __INLINE q31_t __QADD8( + q31_t x, + q31_t y) + { + + q31_t sum; + q7_t r, s, t, u; + + r = (char) x; + s = (char) y; + + r = __SSAT((q31_t) (r + s), 8); + s = __SSAT(((q31_t) (((x << 16) >> 24) + ((y << 16) >> 24))), 8); + t = __SSAT(((q31_t) (((x << 8) >> 24) + ((y << 8) >> 24))), 8); + u = __SSAT(((q31_t) ((x >> 24) + (y >> 24))), 8); + + sum = (((q31_t) u << 24) & 0xFF000000) | (((q31_t) t << 16) & 0x00FF0000) | + (((q31_t) s << 8) & 0x0000FF00) | (r & 0x000000FF); + + return sum; + + } + + /* + * @brief C custom defined QSUB8 for M3 and M0 processors + */ + static __INLINE q31_t __QSUB8( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s, t, u; + + r = (char) x; + s = (char) y; + + r = __SSAT((r - s), 8); + s = __SSAT(((q31_t) (((x << 16) >> 24) - ((y << 16) >> 24))), 8) << 8; + t = __SSAT(((q31_t) (((x << 8) >> 24) - ((y << 8) >> 24))), 8) << 16; + u = __SSAT(((q31_t) ((x >> 24) - (y >> 24))), 8) << 24; + + sum = + (u & 0xFF000000) | (t & 0x00FF0000) | (s & 0x0000FF00) | (r & 0x000000FF); + + return sum; + } + + /* + * @brief C custom defined QADD16 for M3 and M0 processors + */ + + /* + * @brief C custom defined QADD16 for M3 and M0 processors + */ + static __INLINE q31_t __QADD16( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = __SSAT(r + s, 16); + s = __SSAT(((q31_t) ((x >> 16) + (y >> 16))), 16) << 16; + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + + } + + /* + * @brief C custom defined SHADD16 for M3 and M0 processors + */ + static __INLINE q31_t __SHADD16( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = ((r >> 1) + (s >> 1)); + s = ((q31_t) ((x >> 17) + (y >> 17))) << 16; + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + + } + + /* + * @brief C custom defined QSUB16 for M3 and M0 processors + */ + static __INLINE q31_t __QSUB16( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = __SSAT(r - s, 16); + s = __SSAT(((q31_t) ((x >> 16) - (y >> 16))), 16) << 16; + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + } + + /* + * @brief C custom defined SHSUB16 for M3 and M0 processors + */ + static __INLINE q31_t __SHSUB16( + q31_t x, + q31_t y) + { + + q31_t diff; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = ((r >> 1) - (s >> 1)); + s = (((x >> 17) - (y >> 17)) << 16); + + diff = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return diff; + } + + /* + * @brief C custom defined QASX for M3 and M0 processors + */ + static __INLINE q31_t __QASX( + q31_t x, + q31_t y) + { + + q31_t sum = 0; + + sum = ((sum + clip_q31_to_q15((q31_t) ((short) (x >> 16) + (short) y))) << 16) + + clip_q31_to_q15((q31_t) ((short) x - (short) (y >> 16))); + + return sum; + } + + /* + * @brief C custom defined SHASX for M3 and M0 processors + */ + static __INLINE q31_t __SHASX( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = ((r >> 1) - (y >> 17)); + s = (((x >> 17) + (s >> 1)) << 16); + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + } + + + /* + * @brief C custom defined QSAX for M3 and M0 processors + */ + static __INLINE q31_t __QSAX( + q31_t x, + q31_t y) + { + + q31_t sum = 0; + + sum = ((sum + clip_q31_to_q15((q31_t) ((short) (x >> 16) - (short) y))) << 16) + + clip_q31_to_q15((q31_t) ((short) x + (short) (y >> 16))); + + return sum; + } + + /* + * @brief C custom defined SHSAX for M3 and M0 processors + */ + static __INLINE q31_t __SHSAX( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = ((r >> 1) + (y >> 17)); + s = (((x >> 17) - (s >> 1)) << 16); + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + } + + /* + * @brief C custom defined SMUSDX for M3 and M0 processors + */ + static __INLINE q31_t __SMUSDX( + q31_t x, + q31_t y) + { + + return ((q31_t)(((short) x * (short) (y >> 16)) - + ((short) (x >> 16) * (short) y))); + } + + /* + * @brief C custom defined SMUADX for M3 and M0 processors + */ + static __INLINE q31_t __SMUADX( + q31_t x, + q31_t y) + { + + return ((q31_t)(((short) x * (short) (y >> 16)) + + ((short) (x >> 16) * (short) y))); + } + + /* + * @brief C custom defined QADD for M3 and M0 processors + */ + static __INLINE q31_t __QADD( + q31_t x, + q31_t y) + { + return clip_q63_to_q31((q63_t) x + y); + } + + /* + * @brief C custom defined QSUB for M3 and M0 processors + */ + static __INLINE q31_t __QSUB( + q31_t x, + q31_t y) + { + return clip_q63_to_q31((q63_t) x - y); + } + + /* + * @brief C custom defined SMLAD for M3 and M0 processors + */ + static __INLINE q31_t __SMLAD( + q31_t x, + q31_t y, + q31_t sum) + { + + return (sum + ((short) (x >> 16) * (short) (y >> 16)) + + ((short) x * (short) y)); + } + + /* + * @brief C custom defined SMLADX for M3 and M0 processors + */ + static __INLINE q31_t __SMLADX( + q31_t x, + q31_t y, + q31_t sum) + { + + return (sum + ((short) (x >> 16) * (short) (y)) + + ((short) x * (short) (y >> 16))); + } + + /* + * @brief C custom defined SMLSDX for M3 and M0 processors + */ + static __INLINE q31_t __SMLSDX( + q31_t x, + q31_t y, + q31_t sum) + { + + return (sum - ((short) (x >> 16) * (short) (y)) + + ((short) x * (short) (y >> 16))); + } + + /* + * @brief C custom defined SMLALD for M3 and M0 processors + */ + static __INLINE q63_t __SMLALD( + q31_t x, + q31_t y, + q63_t sum) + { + + return (sum + ((short) (x >> 16) * (short) (y >> 16)) + + ((short) x * (short) y)); + } + + /* + * @brief C custom defined SMLALDX for M3 and M0 processors + */ + static __INLINE q63_t __SMLALDX( + q31_t x, + q31_t y, + q63_t sum) + { + + return (sum + ((short) (x >> 16) * (short) y)) + + ((short) x * (short) (y >> 16)); + } + + /* + * @brief C custom defined SMUAD for M3 and M0 processors + */ + static __INLINE q31_t __SMUAD( + q31_t x, + q31_t y) + { + + return (((x >> 16) * (y >> 16)) + + (((x << 16) >> 16) * ((y << 16) >> 16))); + } + + /* + * @brief C custom defined SMUSD for M3 and M0 processors + */ + static __INLINE q31_t __SMUSD( + q31_t x, + q31_t y) + { + + return (-((x >> 16) * (y >> 16)) + + (((x << 16) >> 16) * ((y << 16) >> 16))); + } + + + + +#endif /* (ARM_MATH_CM3) || defined (ARM_MATH_CM0) */ + + + /** + * @brief Instance structure for the Q7 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q7; + + /** + * @brief Instance structure for the Q15 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_f32; + + + /** + * @brief Processing function for the Q7 FIR filter. + * @param[in] *S points to an instance of the Q7 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_q7( + const arm_fir_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q7 FIR filter. + * @param[in,out] *S points to an instance of the Q7 FIR structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed. + * @return none + */ + void arm_fir_init_q7( + arm_fir_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 FIR filter. + * @param[in] *S points to an instance of the Q15 FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_fast_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q15 FIR filter. + * @param[in,out] *S points to an instance of the Q15 FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. Must be even and greater than or equal to 4. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if + * numTaps is not a supported value. + */ + + arm_status arm_fir_init_q15( + arm_fir_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR filter. + * @param[in] *S points to an instance of the Q31 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_fast_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 FIR filter. + * @param[in,out] *S points to an instance of the Q31 FIR structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return none. + */ + void arm_fir_init_q31( + arm_fir_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the floating-point FIR filter. + * @param[in] *S points to an instance of the floating-point FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_f32( + const arm_fir_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point FIR filter. + * @param[in,out] *S points to an instance of the floating-point FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return none. + */ + void arm_fir_init_f32( + arm_fir_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q15 Biquad cascade filter. + */ + typedef struct + { + int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q15_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + q15_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + + } arm_biquad_casd_df1_inst_q15; + + + /** + * @brief Instance structure for the Q31 Biquad cascade filter. + */ + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q31_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + q31_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + + } arm_biquad_casd_df1_inst_q31; + + /** + * @brief Instance structure for the floating-point Biquad cascade filter. + */ + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + + + } arm_biquad_casd_df1_inst_f32; + + + + /** + * @brief Processing function for the Q15 Biquad cascade filter. + * @param[in] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q15 Biquad cascade filter. + * @param[in,out] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format + * @return none + */ + + void arm_biquad_cascade_df1_init_q15( + arm_biquad_casd_df1_inst_q15 * S, + uint8_t numStages, + q15_t * pCoeffs, + q15_t * pState, + int8_t postShift); + + + /** + * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_fast_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 Biquad cascade filter + * @param[in] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_fast_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 Biquad cascade filter. + * @param[in,out] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format + * @return none + */ + + void arm_biquad_cascade_df1_init_q31( + arm_biquad_casd_df1_inst_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q31_t * pState, + int8_t postShift); + + /** + * @brief Processing function for the floating-point Biquad cascade filter. + * @param[in] *S points to an instance of the floating-point Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_f32( + const arm_biquad_casd_df1_inst_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point Biquad cascade filter. + * @param[in,out] *S points to an instance of the floating-point Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + */ + + void arm_biquad_cascade_df1_init_f32( + arm_biquad_casd_df1_inst_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + /** + * @brief Instance structure for the floating-point matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + float32_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_f32; + + /** + * @brief Instance structure for the Q15 matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q15_t *pData; /**< points to the data of the matrix. */ + + } arm_matrix_instance_q15; + + /** + * @brief Instance structure for the Q31 matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q31_t *pData; /**< points to the data of the matrix. */ + + } arm_matrix_instance_q31; + + + + /** + * @brief Floating-point matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_add_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_add_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_add_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_trans_f32( + const arm_matrix_instance_f32 * pSrc, + arm_matrix_instance_f32 * pDst); + + + /** + * @brief Q15 matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_trans_q15( + const arm_matrix_instance_q15 * pSrc, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_trans_q31( + const arm_matrix_instance_q31 * pSrc, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); + + /** + * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @param[in] *pState points to the array for storing intermediate results + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_fast_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); + + /** + * @brief Q31 matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + /** + * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_fast_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_sub_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_sub_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_sub_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + /** + * @brief Floating-point matrix scaling. + * @param[in] *pSrc points to the input matrix + * @param[in] scale scale factor + * @param[out] *pDst points to the output matrix + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_scale_f32( + const arm_matrix_instance_f32 * pSrc, + float32_t scale, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix scaling. + * @param[in] *pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to output matrix + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_scale_q15( + const arm_matrix_instance_q15 * pSrc, + q15_t scaleFract, + int32_t shift, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix scaling. + * @param[in] *pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_scale_q31( + const arm_matrix_instance_q31 * pSrc, + q31_t scaleFract, + int32_t shift, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Q31 matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + + void arm_mat_init_q31( + arm_matrix_instance_q31 * S, + uint16_t nRows, + uint16_t nColumns, + q31_t *pData); + + /** + * @brief Q15 matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + + void arm_mat_init_q15( + arm_matrix_instance_q15 * S, + uint16_t nRows, + uint16_t nColumns, + q15_t *pData); + + /** + * @brief Floating-point matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + + void arm_mat_init_f32( + arm_matrix_instance_f32 * S, + uint16_t nRows, + uint16_t nColumns, + float32_t *pData); + + + + /** + * @brief Instance structure for the Q15 PID Control. + */ + typedef struct + { + q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + #ifdef ARM_MATH_CM0 + q15_t A1; + q15_t A2; + #else + q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/ + #endif + q15_t state[3]; /**< The state array of length 3. */ + q15_t Kp; /**< The proportional gain. */ + q15_t Ki; /**< The integral gain. */ + q15_t Kd; /**< The derivative gain. */ + } arm_pid_instance_q15; + + /** + * @brief Instance structure for the Q31 PID Control. + */ + typedef struct + { + q31_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + q31_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + q31_t A2; /**< The derived gain, A2 = Kd . */ + q31_t state[3]; /**< The state array of length 3. */ + q31_t Kp; /**< The proportional gain. */ + q31_t Ki; /**< The integral gain. */ + q31_t Kd; /**< The derivative gain. */ + + } arm_pid_instance_q31; + + /** + * @brief Instance structure for the floating-point PID Control. + */ + typedef struct + { + float32_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + float32_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + float32_t A2; /**< The derived gain, A2 = Kd . */ + float32_t state[3]; /**< The state array of length 3. */ + float32_t Kp; /**< The proportional gain. */ + float32_t Ki; /**< The integral gain. */ + float32_t Kd; /**< The derivative gain. */ + } arm_pid_instance_f32; + + + + /** + * @brief Initialization function for the floating-point PID Control. + * @param[in,out] *S points to an instance of the PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + * @return none. + */ + void arm_pid_init_f32( + arm_pid_instance_f32 * S, + int32_t resetStateFlag); + + /** + * @brief Reset function for the floating-point PID Control. + * @param[in,out] *S is an instance of the floating-point PID Control structure + * @return none + */ + void arm_pid_reset_f32( + arm_pid_instance_f32 * S); + + + /** + * @brief Initialization function for the Q31 PID Control. + * @param[in,out] *S points to an instance of the Q15 PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + * @return none. + */ + void arm_pid_init_q31( + arm_pid_instance_q31 * S, + int32_t resetStateFlag); + + + /** + * @brief Reset function for the Q31 PID Control. + * @param[in,out] *S points to an instance of the Q31 PID Control structure + * @return none + */ + + void arm_pid_reset_q31( + arm_pid_instance_q31 * S); + + /** + * @brief Initialization function for the Q15 PID Control. + * @param[in,out] *S points to an instance of the Q15 PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + * @return none. + */ + void arm_pid_init_q15( + arm_pid_instance_q15 * S, + int32_t resetStateFlag); + + /** + * @brief Reset function for the Q15 PID Control. + * @param[in,out] *S points to an instance of the q15 PID Control structure + * @return none + */ + void arm_pid_reset_q15( + arm_pid_instance_q15 * S); + + + /** + * @brief Instance structure for the floating-point Linear Interpolate function. + */ + typedef struct + { + uint32_t nValues; + float32_t x1; + float32_t xSpacing; + float32_t *pYData; /**< pointer to the table of Y values */ + } arm_linear_interp_instance_f32; + + /** + * @brief Instance structure for the floating-point bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + float32_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_f32; + + /** + * @brief Instance structure for the Q31 bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q31_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q31; + + /** + * @brief Instance structure for the Q15 bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q15_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q15; + + /** + * @brief Instance structure for the Q15 bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q7_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q7; + + + /** + * @brief Q7 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Floating-point vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q15 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q15_t *pTwiddle; /**< points to the twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q15; + + /** + * @brief Instance structure for the Q31 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q31_t *pTwiddle; /**< points to the twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q31; + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + float32_t *pTwiddle; /**< points to the twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float32_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix4_instance_f32; + + /** + * @brief Processing function for the Q15 CFFT/CIFFT. + * @param[in] *S points to an instance of the Q15 CFFT/CIFFT structure. + * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place. + * @return none. + */ + + void arm_cfft_radix4_q15( + const arm_cfft_radix4_instance_q15 * S, + q15_t * pSrc); + + /** + * @brief Initialization function for the Q15 CFFT/CIFFT. + * @param[in,out] *S points to an instance of the Q15 CFFT/CIFFT structure. + * @param[in] fftLen length of the FFT. + * @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. + * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. + */ + + arm_status arm_cfft_radix4_init_q15( + arm_cfft_radix4_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Processing function for the Q31 CFFT/CIFFT. + * @param[in] *S points to an instance of the Q31 CFFT/CIFFT structure. + * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place. + * @return none. + */ + + void arm_cfft_radix4_q31( + const arm_cfft_radix4_instance_q31 * S, + q31_t * pSrc); + + /** + * @brief Initialization function for the Q31 CFFT/CIFFT. + * @param[in,out] *S points to an instance of the Q31 CFFT/CIFFT structure. + * @param[in] fftLen length of the FFT. + * @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. + * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. + */ + + arm_status arm_cfft_radix4_init_q31( + arm_cfft_radix4_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Processing function for the floating-point CFFT/CIFFT. + * @param[in] *S points to an instance of the floating-point CFFT/CIFFT structure. + * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place. + * @return none. + */ + + void arm_cfft_radix4_f32( + const arm_cfft_radix4_instance_f32 * S, + float32_t * pSrc); + + /** + * @brief Initialization function for the floating-point CFFT/CIFFT. + * @param[in,out] *S points to an instance of the floating-point CFFT/CIFFT structure. + * @param[in] fftLen length of the FFT. + * @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. + * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. + */ + + arm_status arm_cfft_radix4_init_f32( + arm_cfft_radix4_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + + + /*---------------------------------------------------------------------- + * Internal functions prototypes FFT function + ----------------------------------------------------------------------*/ + + /** + * @brief Core function for the floating-point CFFT butterfly process. + * @param[in, out] *pSrc points to the in-place buffer of floating-point data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef points to the twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + + void arm_radix4_butterfly_f32( + float32_t * pSrc, + uint16_t fftLen, + float32_t * pCoef, + uint16_t twidCoefModifier); + + /** + * @brief Core function for the floating-point CIFFT butterfly process. + * @param[in, out] *pSrc points to the in-place buffer of floating-point data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef points to twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @param[in] onebyfftLen value of 1/fftLen. + * @return none. + */ + + void arm_radix4_butterfly_inverse_f32( + float32_t * pSrc, + uint16_t fftLen, + float32_t * pCoef, + uint16_t twidCoefModifier, + float32_t onebyfftLen); + + /** + * @brief In-place bit reversal function. + * @param[in, out] *pSrc points to the in-place buffer of floating-point data type. + * @param[in] fftSize length of the FFT. + * @param[in] bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table. + * @param[in] *pBitRevTab points to the bit reversal table. + * @return none. + */ + + void arm_bitreversal_f32( + float32_t *pSrc, + uint16_t fftSize, + uint16_t bitRevFactor, + uint16_t *pBitRevTab); + + /** + * @brief Core function for the Q31 CFFT butterfly process. + * @param[in, out] *pSrc points to the in-place buffer of Q31 data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef points to twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + + void arm_radix4_butterfly_q31( + q31_t *pSrc, + uint32_t fftLen, + q31_t *pCoef, + uint32_t twidCoefModifier); + + /** + * @brief Core function for the Q31 CIFFT butterfly process. + * @param[in, out] *pSrc points to the in-place buffer of Q31 data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef points to twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + + void arm_radix4_butterfly_inverse_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pCoef, + uint32_t twidCoefModifier); + + /** + * @brief In-place bit reversal function. + * @param[in, out] *pSrc points to the in-place buffer of Q31 data type. + * @param[in] fftLen length of the FFT. + * @param[in] bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table + * @param[in] *pBitRevTab points to bit reversal table. + * @return none. + */ + + void arm_bitreversal_q31( + q31_t * pSrc, + uint32_t fftLen, + uint16_t bitRevFactor, + uint16_t *pBitRevTab); + + /** + * @brief Core function for the Q15 CFFT butterfly process. + * @param[in, out] *pSrc16 points to the in-place buffer of Q15 data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef16 points to twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + + void arm_radix4_butterfly_q15( + q15_t *pSrc16, + uint32_t fftLen, + q15_t *pCoef16, + uint32_t twidCoefModifier); + + /** + * @brief Core function for the Q15 CIFFT butterfly process. + * @param[in, out] *pSrc16 points to the in-place buffer of Q15 data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef16 points to twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + + void arm_radix4_butterfly_inverse_q15( + q15_t *pSrc16, + uint32_t fftLen, + q15_t *pCoef16, + uint32_t twidCoefModifier); + + /** + * @brief In-place bit reversal function. + * @param[in, out] *pSrc points to the in-place buffer of Q15 data type. + * @param[in] fftLen length of the FFT. + * @param[in] bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table + * @param[in] *pBitRevTab points to bit reversal table. + * @return none. + */ + + void arm_bitreversal_q15( + q15_t * pSrc, + uint32_t fftLen, + uint16_t bitRevFactor, + uint16_t *pBitRevTab); + + /** + * @brief Instance structure for the Q15 RFFT/RIFFT function. + */ + + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint32_t fftLenBy2; /**< length of the complex FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_q15; + + /** + * @brief Instance structure for the Q31 RFFT/RIFFT function. + */ + + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint32_t fftLenBy2; /**< length of the complex FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_q31; + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ + + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint16_t fftLenBy2; /**< length of the complex FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_f32; + + /** + * @brief Processing function for the Q15 RFFT/RIFFT. + * @param[in] *S points to an instance of the Q15 RFFT/RIFFT structure. + * @param[in] *pSrc points to the input buffer. + * @param[out] *pDst points to the output buffer. + * @return none. + */ + + void arm_rfft_q15( + const arm_rfft_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst); + + /** + * @brief Initialization function for the Q15 RFFT/RIFFT. + * @param[in, out] *S points to an instance of the Q15 RFFT/RIFFT structure. + * @param[in] *S_CFFT points to an instance of the Q15 CFFT/CIFFT structure. + * @param[in] fftLenReal length of the FFT. + * @param[in] ifftFlagR flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. + * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported value. + */ + + arm_status arm_rfft_init_q15( + arm_rfft_instance_q15 * S, + arm_cfft_radix4_instance_q15 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + /** + * @brief Processing function for the Q31 RFFT/RIFFT. + * @param[in] *S points to an instance of the Q31 RFFT/RIFFT structure. + * @param[in] *pSrc points to the input buffer. + * @param[out] *pDst points to the output buffer. + * @return none. + */ + + void arm_rfft_q31( + const arm_rfft_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst); + + /** + * @brief Initialization function for the Q31 RFFT/RIFFT. + * @param[in, out] *S points to an instance of the Q31 RFFT/RIFFT structure. + * @param[in, out] *S_CFFT points to an instance of the Q31 CFFT/CIFFT structure. + * @param[in] fftLenReal length of the FFT. + * @param[in] ifftFlagR flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. + * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported value. + */ + + arm_status arm_rfft_init_q31( + arm_rfft_instance_q31 * S, + arm_cfft_radix4_instance_q31 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + /** + * @brief Initialization function for the floating-point RFFT/RIFFT. + * @param[in,out] *S points to an instance of the floating-point RFFT/RIFFT structure. + * @param[in,out] *S_CFFT points to an instance of the floating-point CFFT/CIFFT structure. + * @param[in] fftLenReal length of the FFT. + * @param[in] ifftFlagR flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. + * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported value. + */ + + arm_status arm_rfft_init_f32( + arm_rfft_instance_f32 * S, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + /** + * @brief Processing function for the floating-point RFFT/RIFFT. + * @param[in] *S points to an instance of the floating-point RFFT/RIFFT structure. + * @param[in] *pSrc points to the input buffer. + * @param[out] *pDst points to the output buffer. + * @return none. + */ + + void arm_rfft_f32( + const arm_rfft_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst); + + /** + * @brief Instance structure for the floating-point DCT4/IDCT4 function. + */ + + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + float32_t normalize; /**< normalizing factor. */ + float32_t *pTwiddle; /**< points to the twiddle factor table. */ + float32_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_f32; + + /** + * @brief Initialization function for the floating-point DCT4/IDCT4. + * @param[in,out] *S points to an instance of floating-point DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of floating-point RFFT/RIFFT structure. + * @param[in] *S_CFFT points to an instance of floating-point CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported transform length. + */ + + arm_status arm_dct4_init_f32( + arm_dct4_instance_f32 * S, + arm_rfft_instance_f32 * S_RFFT, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint16_t N, + uint16_t Nby2, + float32_t normalize); + + /** + * @brief Processing function for the floating-point DCT4/IDCT4. + * @param[in] *S points to an instance of the floating-point DCT4/IDCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + + void arm_dct4_f32( + const arm_dct4_instance_f32 * S, + float32_t * pState, + float32_t * pInlineBuffer); + + /** + * @brief Instance structure for the Q31 DCT4/IDCT4 function. + */ + + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q31_t normalize; /**< normalizing factor. */ + q31_t *pTwiddle; /**< points to the twiddle factor table. */ + q31_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q31; + + /** + * @brief Initialization function for the Q31 DCT4/IDCT4. + * @param[in,out] *S points to an instance of Q31 DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of Q31 RFFT/RIFFT structure + * @param[in] *S_CFFT points to an instance of Q31 CFFT/CIFFT structure + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + + arm_status arm_dct4_init_q31( + arm_dct4_instance_q31 * S, + arm_rfft_instance_q31 * S_RFFT, + arm_cfft_radix4_instance_q31 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q31_t normalize); + + /** + * @brief Processing function for the Q31 DCT4/IDCT4. + * @param[in] *S points to an instance of the Q31 DCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + + void arm_dct4_q31( + const arm_dct4_instance_q31 * S, + q31_t * pState, + q31_t * pInlineBuffer); + + /** + * @brief Instance structure for the Q15 DCT4/IDCT4 function. + */ + + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q15_t normalize; /**< normalizing factor. */ + q15_t *pTwiddle; /**< points to the twiddle factor table. */ + q15_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q15; + + /** + * @brief Initialization function for the Q15 DCT4/IDCT4. + * @param[in,out] *S points to an instance of Q15 DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of Q15 RFFT/RIFFT structure. + * @param[in] *S_CFFT points to an instance of Q15 CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + + arm_status arm_dct4_init_q15( + arm_dct4_instance_q15 * S, + arm_rfft_instance_q15 * S_RFFT, + arm_cfft_radix4_instance_q15 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q15_t normalize); + + /** + * @brief Processing function for the Q15 DCT4/IDCT4. + * @param[in] *S points to an instance of the Q15 DCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + + void arm_dct4_q15( + const arm_dct4_instance_q15 * S, + q15_t * pState, + q15_t * pInlineBuffer); + + /** + * @brief Floating-point vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Q7 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Floating-point vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Q7 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a floating-point vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scale scale factor to be applied + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_f32( + float32_t * pSrc, + float32_t scale, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a Q7 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_q7( + q7_t * pSrc, + q7_t scaleFract, + int8_t shift, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a Q15 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_q15( + q15_t * pSrc, + q15_t scaleFract, + int8_t shift, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a Q31 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_q31( + q31_t * pSrc, + q31_t scaleFract, + int8_t shift, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Q7 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Floating-point vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Dot product of floating-point vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_f32( + float32_t * pSrcA, + float32_t * pSrcB, + uint32_t blockSize, + float32_t * result); + + /** + * @brief Dot product of Q7 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_q7( + q7_t * pSrcA, + q7_t * pSrcB, + uint32_t blockSize, + q31_t * result); + + /** + * @brief Dot product of Q15 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_q15( + q15_t * pSrcA, + q15_t * pSrcB, + uint32_t blockSize, + q63_t * result); + + /** + * @brief Dot product of Q31 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_q31( + q31_t * pSrcA, + q31_t * pSrcB, + uint32_t blockSize, + q63_t * result); + + /** + * @brief Shifts the elements of a Q7 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_shift_q7( + q7_t * pSrc, + int8_t shiftBits, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Shifts the elements of a Q15 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_shift_q15( + q15_t * pSrc, + int8_t shiftBits, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Shifts the elements of a Q31 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_shift_q31( + q31_t * pSrc, + int8_t shiftBits, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_f32( + float32_t * pSrc, + float32_t offset, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_q7( + q7_t * pSrc, + q7_t offset, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_q15( + q15_t * pSrc, + q15_t offset, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_q31( + q31_t * pSrc, + q31_t offset, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + /** + * @brief Copies the elements of a floating-point vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Copies the elements of a Q7 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Copies the elements of a Q15 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Copies the elements of a Q31 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + /** + * @brief Fills a constant value into a floating-point vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_f32( + float32_t value, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Fills a constant value into a Q7 vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_q7( + q7_t value, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Fills a constant value into a Q15 vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_q15( + q15_t value, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Fills a constant value into a Q31 vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_q31( + q31_t value, + q31_t * pDst, + uint32_t blockSize); + +/** + * @brief Convolution of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); + +/** + * @brief Convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Convolution of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + /** + * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + /** + * @brief Convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); + + /** + * @brief Partial convolution of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + /** + * @brief Partial convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + /** + * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + /** + * @brief Partial convolution of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + /** + * @brief Partial convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Instance structure for the Q15 FIR decimator. + */ + + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR decimator. + */ + + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + + } arm_fir_decimate_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR decimator. + */ + + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + + } arm_fir_decimate_instance_f32; + + + + /** + * @brief Processing function for the floating-point FIR decimator. + * @param[in] *S points to an instance of the floating-point FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_f32( + const arm_fir_decimate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point FIR decimator. + * @param[in,out] *S points to an instance of the floating-point FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + + arm_status arm_fir_decimate_init_f32( + arm_fir_decimate_instance_f32 * S, + uint16_t numTaps, + uint8_t M, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q15 FIR decimator. + * @param[in] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_fast_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + + /** + * @brief Initialization function for the Q15 FIR decimator. + * @param[in,out] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + + arm_status arm_fir_decimate_init_q15( + arm_fir_decimate_instance_q15 * S, + uint16_t numTaps, + uint8_t M, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR decimator. + * @param[in] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_q31( + const arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_fast_q31( + arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 FIR decimator. + * @param[in,out] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + + arm_status arm_fir_decimate_init_q31( + arm_fir_decimate_instance_q31 * S, + uint16_t numTaps, + uint8_t M, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + + + /** + * @brief Instance structure for the Q15 FIR interpolator. + */ + + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q15_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR interpolator. + */ + + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q31_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR interpolator. + */ + + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + float32_t *pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */ + } arm_fir_interpolate_instance_f32; + + + /** + * @brief Processing function for the Q15 FIR interpolator. + * @param[in] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_interpolate_q15( + const arm_fir_interpolate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 FIR interpolator. + * @param[in,out] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + + arm_status arm_fir_interpolate_init_q15( + arm_fir_interpolate_instance_q15 * S, + uint8_t L, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR interpolator. + * @param[in] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_interpolate_q31( + const arm_fir_interpolate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 FIR interpolator. + * @param[in,out] *S points to an instance of the Q31 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + + arm_status arm_fir_interpolate_init_q31( + arm_fir_interpolate_instance_q31 * S, + uint8_t L, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the floating-point FIR interpolator. + * @param[in] *S points to an instance of the floating-point FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_interpolate_f32( + const arm_fir_interpolate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point FIR interpolator. + * @param[in,out] *S points to an instance of the floating-point FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + + arm_status arm_fir_interpolate_init_f32( + arm_fir_interpolate_instance_f32 * S, + uint8_t L, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + /** + * @brief Instance structure for the high precision Q31 Biquad cascade filter. + */ + + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q63_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ + q31_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */ + + } arm_biquad_cas_df1_32x64_ins_q31; + + + /** + * @param[in] *S points to an instance of the high precision Q31 Biquad cascade filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cas_df1_32x64_q31( + const arm_biquad_cas_df1_32x64_ins_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @param[in,out] *S points to an instance of the high precision Q31 Biquad cascade filter structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift shift to be applied to the output. Varies according to the coefficients format + * @return none + */ + + void arm_biquad_cas_df1_32x64_init_q31( + arm_biquad_cas_df1_32x64_ins_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q63_t * pState, + uint8_t postShift); + + + + /** + * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. + */ + + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ + float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_df2T_instance_f32; + + + /** + * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in] *S points to an instance of the filter data structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df2T_f32( + const arm_biquad_cascade_df2T_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] *S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + */ + + void arm_biquad_cascade_df2T_init_f32( + arm_biquad_cascade_df2T_instance_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + + /** + * @brief Instance structure for the Q15 FIR lattice filter. + */ + + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR lattice filter. + */ + + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR lattice filter. + */ + + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_f32; + + /** + * @brief Initialization function for the Q15 FIR lattice filter. + * @param[in] *S points to an instance of the Q15 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + + void arm_fir_lattice_init_q15( + arm_fir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pCoeffs, + q15_t * pState); + + + /** + * @brief Processing function for the Q15 FIR lattice filter. + * @param[in] *S points to an instance of the Q15 FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_lattice_q15( + const arm_fir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 FIR lattice filter. + * @param[in] *S points to an instance of the Q31 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + + void arm_fir_lattice_init_q31( + arm_fir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pCoeffs, + q31_t * pState); + + + /** + * @brief Processing function for the Q31 FIR lattice filter. + * @param[in] *S points to an instance of the Q31 FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_fir_lattice_q31( + const arm_fir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + +/** + * @brief Initialization function for the floating-point FIR lattice filter. + * @param[in] *S points to an instance of the floating-point FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + + void arm_fir_lattice_init_f32( + arm_fir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + /** + * @brief Processing function for the floating-point FIR lattice filter. + * @param[in] *S points to an instance of the floating-point FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_fir_lattice_f32( + const arm_fir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Instance structure for the Q15 IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q15_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q15_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q15; + + /** + * @brief Instance structure for the Q31 IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q31_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q31_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q31; + + /** + * @brief Instance structure for the floating-point IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + float32_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + float32_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_f32; + + /** + * @brief Processing function for the floating-point IIR lattice filter. + * @param[in] *S points to an instance of the floating-point IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_f32( + const arm_iir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point IIR lattice filter. + * @param[in] *S points to an instance of the floating-point IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize-1. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_init_f32( + arm_iir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t *pkCoeffs, + float32_t *pvCoeffs, + float32_t *pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 IIR lattice filter. + * @param[in] *S points to an instance of the Q31 IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_q31( + const arm_iir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 IIR lattice filter. + * @param[in] *S points to an instance of the Q31 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_init_q31( + arm_iir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t *pkCoeffs, + q31_t *pvCoeffs, + q31_t *pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 IIR lattice filter. + * @param[in] *S points to an instance of the Q15 IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_q15( + const arm_iir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + +/** + * @brief Initialization function for the Q15 IIR lattice filter. + * @param[in] *S points to an instance of the fixed-point Q15 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process per call. + * @return none. + */ + + void arm_iir_lattice_init_q15( + arm_iir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t *pkCoeffs, + q15_t *pvCoeffs, + q15_t *pState, + uint32_t blockSize); + + /** + * @brief Instance structure for the floating-point LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that controls filter coefficient updates. */ + } arm_lms_instance_f32; + + /** + * @brief Processing function for floating-point LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_f32( + const arm_lms_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for floating-point LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to the coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_init_f32( + arm_lms_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); + + /** + * @brief Instance structure for the Q15 LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + } arm_lms_instance_q15; + + + /** + * @brief Initialization function for the Q15 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to the coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_init_q15( + arm_lms_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint32_t postShift); + + /** + * @brief Processing function for Q15 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_q15( + const arm_lms_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q31 LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + + } arm_lms_instance_q31; + + /** + * @brief Processing function for Q31 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_q31( + const arm_lms_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for Q31 LMS filter. + * @param[in] *S points to an instance of the Q31 LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_init_q31( + arm_lms_instance_q31 * S, + uint16_t numTaps, + q31_t *pCoeffs, + q31_t *pState, + q31_t mu, + uint32_t blockSize, + uint32_t postShift); + + /** + * @brief Instance structure for the floating-point normalized LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that control filter coefficient updates. */ + float32_t energy; /**< saves previous frame energy. */ + float32_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_f32; + + /** + * @brief Processing function for floating-point normalized LMS filter. + * @param[in] *S points to an instance of the floating-point normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_f32( + arm_lms_norm_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for floating-point normalized LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_init_f32( + arm_lms_norm_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q31 normalized LMS filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + q31_t *recipTable; /**< points to the reciprocal initial value table. */ + q31_t energy; /**< saves previous frame energy. */ + q31_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q31; + + /** + * @brief Processing function for Q31 normalized LMS filter. + * @param[in] *S points to an instance of the Q31 normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_q31( + arm_lms_norm_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for Q31 normalized LMS filter. + * @param[in] *S points to an instance of the Q31 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_norm_init_q31( + arm_lms_norm_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint8_t postShift); + + /** + * @brief Instance structure for the Q15 normalized LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< Number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + q15_t *recipTable; /**< Points to the reciprocal initial value table. */ + q15_t energy; /**< saves previous frame energy. */ + q15_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q15; + + /** + * @brief Processing function for Q15 normalized LMS filter. + * @param[in] *S points to an instance of the Q15 normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_q15( + arm_lms_norm_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); + + + /** + * @brief Initialization function for Q15 normalized LMS filter. + * @param[in] *S points to an instance of the Q15 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_norm_init_q15( + arm_lms_norm_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint8_t postShift); + + /** + * @brief Correlation of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); + + /** + * @brief Correlation of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Correlation of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + /** + * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + /** + * @brief Correlation of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); + + /** + * @brief Instance structure for the floating-point sparse FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + float32_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_f32; + + /** + * @brief Instance structure for the Q31 sparse FIR filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q31_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q31; + + /** + * @brief Instance structure for the Q15 sparse FIR filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q15_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q15; + + /** + * @brief Instance structure for the Q7 sparse FIR filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q7; + + /** + * @brief Processing function for the floating-point sparse FIR filter. + * @param[in] *S points to an instance of the floating-point sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_f32( + arm_fir_sparse_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + float32_t * pScratchIn, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point sparse FIR filter. + * @param[in,out] *S points to an instance of the floating-point sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_f32( + arm_fir_sparse_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 sparse FIR filter. + * @param[in] *S points to an instance of the Q31 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_q31( + arm_fir_sparse_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + q31_t * pScratchIn, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q31 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_q31( + arm_fir_sparse_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + /** + * @brief Processing function for the Q15 sparse FIR filter. + * @param[in] *S points to an instance of the Q15 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] *pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_q15( + arm_fir_sparse_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + q15_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q15 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_q15( + arm_fir_sparse_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + /** + * @brief Processing function for the Q7 sparse FIR filter. + * @param[in] *S points to an instance of the Q7 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] *pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_q7( + arm_fir_sparse_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + q7_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q7 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q7 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_q7( + arm_fir_sparse_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + int32_t *pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + + /* + * @brief Floating-point sin_cos function. + * @param[in] theta input value in degrees + * @param[out] *pSinVal points to the processed sine output. + * @param[out] *pCosVal points to the processed cos output. + * @return none. + */ + + void arm_sin_cos_f32( + float32_t theta, + float32_t *pSinVal, + float32_t *pCcosVal); + + /* + * @brief Q31 sin_cos function. + * @param[in] theta scaled input value in degrees + * @param[out] *pSinVal points to the processed sine output. + * @param[out] *pCosVal points to the processed cosine output. + * @return none. + */ + + void arm_sin_cos_q31( + q31_t theta, + q31_t *pSinVal, + q31_t *pCosVal); + + + /** + * @brief Floating-point complex conjugate. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_conj_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex conjugate. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_conj_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex conjugate. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_conj_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + + + /** + * @brief Floating-point complex magnitude squared + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_squared_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex magnitude squared + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_squared_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex magnitude squared + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_squared_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + + /** + * @ingroup groupController + */ + + /** + * @defgroup PID PID Motor Control + * + * A Proportional Integral Derivative (PID) controller is a generic feedback control + * loop mechanism widely used in industrial control systems. + * A PID controller is the most commonly used type of feedback controller. + * + * This set of functions implements (PID) controllers + * for Q15, Q31, and floating-point data types. The functions operate on a single sample + * of data and each call to the function returns a single processed value. + * S points to an instance of the PID control data structure. in + * is the input sample value. The functions return the output value. + * + * \par Algorithm: + *
+   *    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
+   *    A0 = Kp + Ki + Kd
+   *    A1 = (-Kp ) - (2 * Kd )
+   *    A2 = Kd  
+ * + * \par + * where \c Kp is proportional constant, \c Ki is Integral constant and \c Kd is Derivative constant + * + * \par + * \image html PID.gif "Proportional Integral Derivative Controller" + * + * \par + * The PID controller calculates an "error" value as the difference between + * the measured output and the reference input. + * The controller attempts to minimize the error by adjusting the process control inputs. + * The proportional value determines the reaction to the current error, + * the integral value determines the reaction based on the sum of recent errors, + * and the derivative value determines the reaction based on the rate at which the error has been changing. + * + * \par Instance Structure + * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure. + * A separate instance structure must be defined for each PID Controller. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Reset Functions + * There is also an associated reset function for each data type which clears the state array. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains. + * - Zeros out the values in the state buffer. + * + * \par + * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function. + * + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the PID Controller functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup PID + * @{ + */ + + /** + * @brief Process function for the floating-point PID Control. + * @param[in,out] *S is an instance of the floating-point PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + */ + + + static __INLINE float32_t arm_pid_f32( + arm_pid_instance_f32 * S, + float32_t in) + { + float32_t out; + + /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2] */ + out = (S->A0 * in) + + (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]); + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @brief Process function for the Q31 PID Control. + * @param[in,out] *S points to an instance of the Q31 PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions. + * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. + */ + + static __INLINE q31_t arm_pid_q31( + arm_pid_instance_q31 * S, + q31_t in) + { + q63_t acc; + q31_t out; + + /* acc = A0 * x[n] */ + acc = (q63_t) S->A0 * in; + + /* acc += A1 * x[n-1] */ + acc += (q63_t) S->A1 * S->state[0]; + + /* acc += A2 * x[n-2] */ + acc += (q63_t) S->A2 * S->state[1]; + + /* convert output to 1.31 format to add y[n-1] */ + out = (q31_t) (acc >> 31u); + + /* out += y[n-1] */ + out += S->state[2]; + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @brief Process function for the Q15 PID Control. + * @param[in,out] *S points to an instance of the Q15 PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + * Lastly, the accumulator is saturated to yield a result in 1.15 format. + */ + + static __INLINE q15_t arm_pid_q15( + arm_pid_instance_q15 * S, + q15_t in) + { + q63_t acc; + q15_t out; + + /* Implementation of PID controller */ + + #ifdef ARM_MATH_CM0 + + /* acc = A0 * x[n] */ + acc = ((q31_t) S->A0 )* in ; + + #else + + /* acc = A0 * x[n] */ + acc = (q31_t) __SMUAD(S->A0, in); + + #endif + + #ifdef ARM_MATH_CM0 + + /* acc += A1 * x[n-1] + A2 * x[n-2] */ + acc += (q31_t) S->A1 * S->state[0] ; + acc += (q31_t) S->A2 * S->state[1] ; + + #else + + /* acc += A1 * x[n-1] + A2 * x[n-2] */ + acc = __SMLALD(S->A1, (q31_t)__SIMD32(S->state), acc); + + #endif + + /* acc += y[n-1] */ + acc += (q31_t) S->state[2] << 15; + + /* saturate the output */ + out = (q15_t) (__SSAT((acc >> 15), 16)); + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @} end of PID group + */ + + + /** + * @brief Floating-point matrix inverse. + * @param[in] *src points to the instance of the input floating-point matrix structure. + * @param[out] *dst points to the instance of the output floating-point matrix structure. + * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. + * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. + */ + + arm_status arm_mat_inverse_f32( + const arm_matrix_instance_f32 * src, + arm_matrix_instance_f32 * dst); + + + + /** + * @ingroup groupController + */ + + + /** + * @defgroup clarke Vector Clarke Transform + * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector. + * Generally the Clarke transform uses three-phase currents Ia, Ib and Ic to calculate currents + * in the two-phase orthogonal stator axis Ialpha and Ibeta. + * When Ialpha is superposed with Ia as shown in the figure below + * \image html clarke.gif Stator current space vector and its components in (a,b). + * and Ia + Ib + Ic = 0, in this condition Ialpha and Ibeta + * can be calculated using only Ia and Ib. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html clarkeFormula.gif + * where Ia and Ib are the instantaneous stator phases and + * pIalpha and pIbeta are the two coordinates of time invariant vector. + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Clarke transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup clarke + * @{ + */ + + /** + * + * @brief Floating-point Clarke transform + * @param[in] Ia input three-phase coordinate a + * @param[in] Ib input three-phase coordinate b + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @return none. + */ + + static __INLINE void arm_clarke_f32( + float32_t Ia, + float32_t Ib, + float32_t * pIalpha, + float32_t * pIbeta) + { + /* Calculate pIalpha using the equation, pIalpha = Ia */ + *pIalpha = Ia; + + /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */ + *pIbeta = ((float32_t) 0.57735026919 * Ia + (float32_t) 1.15470053838 * Ib); + + } + + /** + * @brief Clarke transform for Q31 version + * @param[in] Ia input three-phase coordinate a + * @param[in] Ib input three-phase coordinate b + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition, hence there is no risk of overflow. + */ + + static __INLINE void arm_clarke_q31( + q31_t Ia, + q31_t Ib, + q31_t * pIalpha, + q31_t * pIbeta) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + + /* Calculating pIalpha from Ia by equation pIalpha = Ia */ + *pIalpha = Ia; + + /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */ + product1 = (q31_t) (((q63_t) Ia * 0x24F34E8B) >> 30); + + /* Intermediate product is calculated by (2/sqrt(3) * Ib) */ + product2 = (q31_t) (((q63_t) Ib * 0x49E69D16) >> 30); + + /* pIbeta is calculated by adding the intermediate products */ + *pIbeta = __QADD(product1, product2); + } + + /** + * @} end of clarke group + */ + + /** + * @brief Converts the elements of the Q7 vector to Q31 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_q7_to_q31( + q7_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + + + /** + * @ingroup groupController + */ + + /** + * @defgroup inv_clarke Vector Inverse Clarke Transform + * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html clarkeInvFormula.gif + * where pIa and pIb are the instantaneous stator phases and + * Ialpha and Ibeta are the two coordinates of time invariant vector. + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Clarke transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup inv_clarke + * @{ + */ + + /** + * @brief Floating-point Inverse Clarke transform + * @param[in] Ialpha input two-phase orthogonal vector axis alpha + * @param[in] Ibeta input two-phase orthogonal vector axis beta + * @param[out] *pIa points to output three-phase coordinate a + * @param[out] *pIb points to output three-phase coordinate b + * @return none. + */ + + + static __INLINE void arm_inv_clarke_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pIa, + float32_t * pIb) + { + /* Calculating pIa from Ialpha by equation pIa = Ialpha */ + *pIa = Ialpha; + + /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */ + *pIb = -0.5 * Ialpha + (float32_t) 0.8660254039 *Ibeta; + + } + + /** + * @brief Inverse Clarke transform for Q31 version + * @param[in] Ialpha input two-phase orthogonal vector axis alpha + * @param[in] Ibeta input two-phase orthogonal vector axis beta + * @param[out] *pIa points to output three-phase coordinate a + * @param[out] *pIb points to output three-phase coordinate b + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the subtraction, hence there is no risk of overflow. + */ + + static __INLINE void arm_inv_clarke_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pIa, + q31_t * pIb) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + + /* Calculating pIa from Ialpha by equation pIa = Ialpha */ + *pIa = Ialpha; + + /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */ + product1 = (q31_t) (((q63_t) (Ialpha) * (0x40000000)) >> 31); + + /* Intermediate product is calculated by (1/sqrt(3) * pIb) */ + product2 = (q31_t) (((q63_t) (Ibeta) * (0x6ED9EBA1)) >> 31); + + /* pIb is calculated by subtracting the products */ + *pIb = __QSUB(product2, product1); + + } + + /** + * @} end of inv_clarke group + */ + + /** + * @brief Converts the elements of the Q7 vector to Q15 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_q7_to_q15( + q7_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + + /** + * @ingroup groupController + */ + + /** + * @defgroup park Vector Park Transform + * + * Forward Park transform converts the input two-coordinate vector to flux and torque components. + * The Park transform can be used to realize the transformation of the Ialpha and the Ibeta currents + * from the stationary to the moving reference frame and control the spatial relationship between + * the stator vector current and rotor flux vector. + * If we consider the d axis aligned with the rotor flux, the diagram below shows the + * current vector and the relationship from the two reference frames: + * \image html park.gif "Stator current space vector and its component in (a,b) and in the d,q rotating reference frame" + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html parkFormula.gif + * where Ialpha and Ibeta are the stator vector components, + * pId and pIq are rotor vector components and cosVal and sinVal are the + * cosine and sine values of theta (rotor flux position). + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Park transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup park + * @{ + */ + + /** + * @brief Floating-point Park transform + * @param[in] Ialpha input two-phase vector coordinate alpha + * @param[in] Ibeta input two-phase vector coordinate beta + * @param[out] *pId points to output rotor reference frame d + * @param[out] *pIq points to output rotor reference frame q + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + * + * The function implements the forward Park transform. + * + */ + + static __INLINE void arm_park_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pId, + float32_t * pIq, + float32_t sinVal, + float32_t cosVal) + { + /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */ + *pId = Ialpha * cosVal + Ibeta * sinVal; + + /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */ + *pIq = -Ialpha * sinVal + Ibeta * cosVal; + + } + + /** + * @brief Park transform for Q31 version + * @param[in] Ialpha input two-phase vector coordinate alpha + * @param[in] Ibeta input two-phase vector coordinate beta + * @param[out] *pId points to output rotor reference frame d + * @param[out] *pIq points to output rotor reference frame q + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition and subtraction, hence there is no risk of overflow. + */ + + + static __INLINE void arm_park_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pId, + q31_t * pIq, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ + + /* Intermediate product is calculated by (Ialpha * cosVal) */ + product1 = (q31_t) (((q63_t) (Ialpha) * (cosVal)) >> 31); + + /* Intermediate product is calculated by (Ibeta * sinVal) */ + product2 = (q31_t) (((q63_t) (Ibeta) * (sinVal)) >> 31); + + + /* Intermediate product is calculated by (Ialpha * sinVal) */ + product3 = (q31_t) (((q63_t) (Ialpha) * (sinVal)) >> 31); + + /* Intermediate product is calculated by (Ibeta * cosVal) */ + product4 = (q31_t) (((q63_t) (Ibeta) * (cosVal)) >> 31); + + /* Calculate pId by adding the two intermediate products 1 and 2 */ + *pId = __QADD(product1, product2); + + /* Calculate pIq by subtracting the two intermediate products 3 from 4 */ + *pIq = __QSUB(product4, product3); + } + + /** + * @} end of park group + */ + + /** + * @brief Converts the elements of the Q7 vector to floating-point vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q7_to_float( + q7_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @ingroup groupController + */ + + /** + * @defgroup inv_park Vector Inverse Park transform + * Inverse Park transform converts the input flux and torque components to two-coordinate vector. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html parkInvFormula.gif + * where pIalpha and pIbeta are the stator vector components, + * Id and Iq are rotor vector components and cosVal and sinVal are the + * cosine and sine values of theta (rotor flux position). + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Park transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup inv_park + * @{ + */ + + /** + * @brief Floating-point Inverse Park transform + * @param[in] Id input coordinate of rotor reference frame d + * @param[in] Iq input coordinate of rotor reference frame q + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + */ + + static __INLINE void arm_inv_park_f32( + float32_t Id, + float32_t Iq, + float32_t * pIalpha, + float32_t * pIbeta, + float32_t sinVal, + float32_t cosVal) + { + /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */ + *pIalpha = Id * cosVal - Iq * sinVal; + + /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */ + *pIbeta = Id * sinVal + Iq * cosVal; + + } + + + /** + * @brief Inverse Park transform for Q31 version + * @param[in] Id input coordinate of rotor reference frame d + * @param[in] Iq input coordinate of rotor reference frame q + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition, hence there is no risk of overflow. + */ + + + static __INLINE void arm_inv_park_q31( + q31_t Id, + q31_t Iq, + q31_t * pIalpha, + q31_t * pIbeta, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ + + /* Intermediate product is calculated by (Id * cosVal) */ + product1 = (q31_t) (((q63_t) (Id) * (cosVal)) >> 31); + + /* Intermediate product is calculated by (Iq * sinVal) */ + product2 = (q31_t) (((q63_t) (Iq) * (sinVal)) >> 31); + + + /* Intermediate product is calculated by (Id * sinVal) */ + product3 = (q31_t) (((q63_t) (Id) * (sinVal)) >> 31); + + /* Intermediate product is calculated by (Iq * cosVal) */ + product4 = (q31_t) (((q63_t) (Iq) * (cosVal)) >> 31); + + /* Calculate pIalpha by using the two intermediate products 1 and 2 */ + *pIalpha = __QSUB(product1, product2); + + /* Calculate pIbeta by using the two intermediate products 3 and 4 */ + *pIbeta = __QADD(product4, product3); + + } + + /** + * @} end of Inverse park group + */ + + + /** + * @brief Converts the elements of the Q31 vector to floating-point vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q31_to_float( + q31_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @ingroup groupInterpolation + */ + + /** + * @defgroup LinearInterpolate Linear Interpolation + * + * Linear interpolation is a method of curve fitting using linear polynomials. + * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line + * + * \par + * \image html LinearInterp.gif "Linear interpolation" + * + * \par + * A Linear Interpolate function calculates an output value(y), for the input(x) + * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values) + * + * \par Algorithm: + *
+   *       y = y0 + (x - x0) * ((y1 - y0)/(x1-x0))
+   *       where x0, x1 are nearest values of input x
+   *             y0, y1 are nearest values to output y
+   * 
+ * + * \par + * This set of functions implements Linear interpolation process + * for Q7, Q15, Q31, and floating-point data types. The functions operate on a single + * sample of data and each call to the function returns a single processed value. + * S points to an instance of the Linear Interpolate function data structure. + * x is the input sample value. The functions returns the output value. + * + * \par + * if x is outside of the table boundary, Linear interpolation returns first value of the table + * if x is below input range and returns last value of table if x is above range. + */ + + /** + * @addtogroup LinearInterpolate + * @{ + */ + + /** + * @brief Process function for the floating-point Linear Interpolation Function. + * @param[in,out] *S is an instance of the floating-point Linear Interpolation structure + * @param[in] x input sample to process + * @return y processed output sample. + * + */ + + static __INLINE float32_t arm_linear_interp_f32( + arm_linear_interp_instance_f32 * S, + float32_t x) + { + + float32_t y; + float32_t x0, x1; /* Nearest input values */ + float32_t y0, y1; /* Nearest output values */ + float32_t xSpacing = S->xSpacing; /* spacing between input values */ + int32_t i; /* Index variable */ + float32_t *pYData = S->pYData; /* pointer to output table */ + + /* Calculation of index */ + i = (x - S->x1) / xSpacing; + + if(i < 0) + { + /* Iniatilize output for below specified range as least output value of table */ + y = pYData[0]; + } + else if(i >= S->nValues) + { + /* Iniatilize output for above specified range as last output value of table */ + y = pYData[S->nValues-1]; + } + else + { + /* Calculation of nearest input values */ + x0 = S->x1 + i * xSpacing; + x1 = S->x1 + (i +1) * xSpacing; + + /* Read of nearest output values */ + y0 = pYData[i]; + y1 = pYData[i + 1]; + + /* Calculation of output */ + y = y0 + (x - x0) * ((y1 - y0)/(x1-x0)); + + } + + /* returns output value */ + return (y); + } + + /** + * + * @brief Process function for the Q31 Linear Interpolation Function. + * @param[in] *pYData pointer to Q31 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + * + */ + + + static __INLINE q31_t arm_linear_interp_q31(q31_t *pYData, + q31_t x, uint32_t nValues) + { + q31_t y; /* output */ + q31_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + int32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + index = ((x & 0xFFF00000) >> 20); + + if(index >= (nValues - 1)) + { + return(pYData[nValues - 1]); + } + else if(index < 0) + { + return(pYData[0]); + } + else + { + + /* 20 bits for the fractional part */ + /* shift left by 11 to keep fract in 1.31 format */ + fract = (x & 0x000FFFFF) << 11; + + /* Read two nearest output values from the index in 1.31(q31) format */ + y0 = pYData[index]; + y1 = pYData[index + 1u]; + + /* Calculation of y0 * (1-fract) and y is in 2.30 format */ + y = ((q31_t) ((q63_t) y0 * (0x7FFFFFFF - fract) >> 32)); + + /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */ + y += ((q31_t) (((q63_t) y1 * fract) >> 32)); + + /* Convert y to 1.31 format */ + return (y << 1u); + + } + + } + + /** + * + * @brief Process function for the Q15 Linear Interpolation Function. + * @param[in] *pYData pointer to Q15 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + * + */ + + + static __INLINE q15_t arm_linear_interp_q15(q15_t *pYData, q31_t x, uint32_t nValues) + { + q63_t y; /* output */ + q15_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + int32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + index = ((x & 0xFFF00000) >> 20u); + + if(index >= (nValues - 1)) + { + return(pYData[nValues - 1]); + } + else if(index < 0) + { + return(pYData[0]); + } + else + { + /* 20 bits for the fractional part */ + /* fract is in 12.20 format */ + fract = (x & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y0 = pYData[index]; + y1 = pYData[index + 1u]; + + /* Calculation of y0 * (1-fract) and y is in 13.35 format */ + y = ((q63_t) y0 * (0xFFFFF - fract)); + + /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */ + y += ((q63_t) y1 * (fract)); + + /* convert y to 1.15 format */ + return (y >> 20); + } + + + } + + /** + * + * @brief Process function for the Q7 Linear Interpolation Function. + * @param[in] *pYData pointer to Q7 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + */ + + + static __INLINE q7_t arm_linear_interp_q7(q7_t *pYData, q31_t x, uint32_t nValues) + { + q31_t y; /* output */ + q7_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + int32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + index = ((x & 0xFFF00000) >> 20u); + + + if(index >= (nValues - 1)) + { + return(pYData[nValues - 1]); + } + else if(index < 0) + { + return(pYData[0]); + } + else + { + + /* 20 bits for the fractional part */ + /* fract is in 12.20 format */ + fract = (x & 0x000FFFFF); + + /* Read two nearest output values from the index and are in 1.7(q7) format */ + y0 = pYData[index]; + y1 = pYData[index + 1u]; + + /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */ + y = ((y0 * (0xFFFFF - fract))); + + /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */ + y += (y1 * fract); + + /* convert y to 1.7(q7) format */ + return (y >> 20u); + + } + + } + /** + * @} end of LinearInterpolate group + */ + + /** + * @brief Fast approximation to the trigonometric sine function for floating-point data. + * @param[in] x input value in radians. + * @return sin(x). + */ + + float32_t arm_sin_f32( + float32_t x); + + /** + * @brief Fast approximation to the trigonometric sine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + */ + + q31_t arm_sin_q31( + q31_t x); + + /** + * @brief Fast approximation to the trigonometric sine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + */ + + q15_t arm_sin_q15( + q15_t x); + + /** + * @brief Fast approximation to the trigonometric cosine function for floating-point data. + * @param[in] x input value in radians. + * @return cos(x). + */ + + float32_t arm_cos_f32( + float32_t x); + + /** + * @brief Fast approximation to the trigonometric cosine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + */ + + q31_t arm_cos_q31( + q31_t x); + + /** + * @brief Fast approximation to the trigonometric cosine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + */ + + q15_t arm_cos_q15( + q15_t x); + + + /** + * @ingroup groupFastMath + */ + + + /** + * @defgroup SQRT Square Root + * + * Computes the square root of a number. + * There are separate functions for Q15, Q31, and floating-point data types. + * The square root function is computed using the Newton-Raphson algorithm. + * This is an iterative algorithm of the form: + *
+   *      x1 = x0 - f(x0)/f'(x0)
+   * 
+ * where x1 is the current estimate, + * x0 is the previous estimate and + * f'(x0) is the derivative of f() evaluated at x0. + * For the square root function, the algorithm reduces to: + *
+   *     x0 = in/2                         [initial guess]
+   *     x1 = 1/2 * ( x0 + in / x0)        [each iteration]
+   * 
+ */ + + + /** + * @addtogroup SQRT + * @{ + */ + + /** + * @brief Floating-point square root function. + * @param[in] in input value. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + + static __INLINE arm_status arm_sqrt_f32( + float32_t in, float32_t *pOut) + { + if(in > 0) + { + +// #if __FPU_USED + #if (__FPU_USED == 1) && defined ( __CC_ARM ) + *pOut = __sqrtf(in); + #else + *pOut = sqrtf(in); + #endif + + return (ARM_MATH_SUCCESS); + } + else + { + *pOut = 0.0f; + return (ARM_MATH_ARGUMENT_ERROR); + } + + } + + + /** + * @brief Q31 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + arm_status arm_sqrt_q31( + q31_t in, q31_t *pOut); + + /** + * @brief Q15 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + arm_status arm_sqrt_q15( + q15_t in, q15_t *pOut); + + /** + * @} end of SQRT group + */ + + + + + + + /** + * @brief floating-point Circular write function. + */ + + static __INLINE void arm_circularWrite_f32( + int32_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const int32_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = wOffset; + } + + + + /** + * @brief floating-point Circular Read function. + */ + static __INLINE void arm_circularRead_f32( + int32_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + int32_t * dst, + int32_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (int32_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + /** + * @brief Q15 Circular write function. + */ + + static __INLINE void arm_circularWrite_q15( + q15_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q15_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = wOffset; + } + + + + /** + * @brief Q15 Circular Read function. + */ + static __INLINE void arm_circularRead_q15( + q15_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q15_t * dst, + q15_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (q15_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update wOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + + /** + * @brief Q7 Circular write function. + */ + + static __INLINE void arm_circularWrite_q7( + q7_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q7_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = wOffset; + } + + + + /** + * @brief Q7 Circular Read function. + */ + static __INLINE void arm_circularRead_q7( + q7_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q7_t * dst, + q7_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (q7_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + + /** + * @brief Sum of the squares of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_q31( + q31_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + /** + * @brief Sum of the squares of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Sum of the squares of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_q15( + q15_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + /** + * @brief Sum of the squares of the elements of a Q7 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_q7( + q7_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Mean value of a Q7 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_mean_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult); + + /** + * @brief Mean value of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + void arm_mean_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Mean value of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + void arm_mean_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Mean value of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + void arm_mean_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Variance of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_var_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Variance of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_var_q31( + q31_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + /** + * @brief Variance of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_var_q15( + q15_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Root Mean Square of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_rms_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Root Mean Square of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_rms_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Root Mean Square of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_rms_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Standard deviation of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_std_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Standard deviation of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_std_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Standard deviation of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_std_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Floating-point complex magnitude + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex magnitude + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex magnitude + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex dot product + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] *realResult real part of the result returned here + * @param[out] *imagResult imaginary part of the result returned here + * @return none. + */ + + void arm_cmplx_dot_prod_q15( + q15_t * pSrcA, + q15_t * pSrcB, + uint32_t numSamples, + q31_t * realResult, + q31_t * imagResult); + + /** + * @brief Q31 complex dot product + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] *realResult real part of the result returned here + * @param[out] *imagResult imaginary part of the result returned here + * @return none. + */ + + void arm_cmplx_dot_prod_q31( + q31_t * pSrcA, + q31_t * pSrcB, + uint32_t numSamples, + q63_t * realResult, + q63_t * imagResult); + + /** + * @brief Floating-point complex dot product + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] *realResult real part of the result returned here + * @param[out] *imagResult imaginary part of the result returned here + * @return none. + */ + + void arm_cmplx_dot_prod_f32( + float32_t * pSrcA, + float32_t * pSrcB, + uint32_t numSamples, + float32_t * realResult, + float32_t * imagResult); + + /** + * @brief Q15 complex-by-real multiplication + * @param[in] *pSrcCmplx points to the complex input vector + * @param[in] *pSrcReal points to the real input vector + * @param[out] *pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + * @return none. + */ + + void arm_cmplx_mult_real_q15( + q15_t * pSrcCmplx, + q15_t * pSrcReal, + q15_t * pCmplxDst, + uint32_t numSamples); + + /** + * @brief Q31 complex-by-real multiplication + * @param[in] *pSrcCmplx points to the complex input vector + * @param[in] *pSrcReal points to the real input vector + * @param[out] *pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + * @return none. + */ + + void arm_cmplx_mult_real_q31( + q31_t * pSrcCmplx, + q31_t * pSrcReal, + q31_t * pCmplxDst, + uint32_t numSamples); + + /** + * @brief Floating-point complex-by-real multiplication + * @param[in] *pSrcCmplx points to the complex input vector + * @param[in] *pSrcReal points to the real input vector + * @param[out] *pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + * @return none. + */ + + void arm_cmplx_mult_real_f32( + float32_t * pSrcCmplx, + float32_t * pSrcReal, + float32_t * pCmplxDst, + uint32_t numSamples); + + /** + * @brief Minimum value of a Q7 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *result is output pointer + * @param[in] index is the array index of the minimum value in the input buffer. + * @return none. + */ + + void arm_min_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * result, + uint32_t * index); + + /** + * @brief Minimum value of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output pointer + * @param[in] *pIndex is the array index of the minimum value in the input buffer. + * @return none. + */ + + void arm_min_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); + + /** + * @brief Minimum value of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output pointer + * @param[out] *pIndex is the array index of the minimum value in the input buffer. + * @return none. + */ + void arm_min_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); + + /** + * @brief Minimum value of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output pointer + * @param[out] *pIndex is the array index of the minimum value in the input buffer. + * @return none. + */ + + void arm_min_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a Q7 vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a Q15 vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a Q31 vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a floating-point vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); + + /** + * @brief Q15 complex-by-complex multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_mult_cmplx_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex-by-complex multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_mult_cmplx_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Floating-point complex-by-complex multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_mult_cmplx_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Converts the elements of the floating-point vector to Q31 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q31 output vector + * @param[in] blockSize length of the input vector + * @return none. + */ + void arm_float_to_q31( + float32_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the floating-point vector to Q15 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q15 output vector + * @param[in] blockSize length of the input vector + * @return none + */ + void arm_float_to_q15( + float32_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the floating-point vector to Q7 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q7 output vector + * @param[in] blockSize length of the input vector + * @return none + */ + void arm_float_to_q7( + float32_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q31 vector to Q15 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q31_to_q15( + q31_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the Q31 vector to Q7 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q31_to_q7( + q31_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the Q15 vector to floating-point vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q15_to_float( + q15_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q15 vector to Q31 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q15_to_q31( + q15_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q15 vector to Q7 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q15_to_q7( + q15_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @ingroup groupInterpolation + */ + + /** + * @defgroup BilinearInterpolate Bilinear Interpolation + * + * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid. + * The underlying function f(x, y) is sampled on a regular grid and the interpolation process + * determines values between the grid points. + * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension. + * Bilinear interpolation is often used in image processing to rescale images. + * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types. + * + * Algorithm + * \par + * The instance structure used by the bilinear interpolation functions describes a two dimensional data table. + * For floating-point, the instance structure is defined as: + *
+   *   typedef struct
+   *   {
+   *     uint16_t numRows;
+   *     uint16_t numCols;
+   *     float32_t *pData;
+   * } arm_bilinear_interp_instance_f32;
+   * 
+ * + * \par + * where numRows specifies the number of rows in the table; + * numCols specifies the number of columns in the table; + * and pData points to an array of size numRows*numCols values. + * The data table pTable is organized in row order and the supplied data values fall on integer indexes. + * That is, table element (x,y) is located at pTable[x + y*numCols] where x and y are integers. + * + * \par + * Let (x, y) specify the desired interpolation point. Then define: + *
+   *     XF = floor(x)
+   *     YF = floor(y)
+   * 
+ * \par + * The interpolated output point is computed as: + *
+   *  f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))
+   *           + f(XF+1, YF) * (x-XF)*(1-(y-YF))
+   *           + f(XF, YF+1) * (1-(x-XF))*(y-YF)
+   *           + f(XF+1, YF+1) * (x-XF)*(y-YF)
+   * 
+ * Note that the coordinates (x, y) contain integer and fractional components. + * The integer components specify which portion of the table to use while the + * fractional components control the interpolation processor. + * + * \par + * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output. + */ + + /** + * @addtogroup BilinearInterpolate + * @{ + */ + + /** + * + * @brief Floating-point bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate. + * @param[in] Y interpolation coordinate. + * @return out interpolated value. + */ + + + static __INLINE float32_t arm_bilinear_interp_f32( + const arm_bilinear_interp_instance_f32 * S, + float32_t X, + float32_t Y) + { + float32_t out; + float32_t f00, f01, f10, f11; + float32_t *pData = S->pData; + int32_t xIndex, yIndex, index; + float32_t xdiff, ydiff; + float32_t b1, b2, b3, b4; + + xIndex = (int32_t) X; + yIndex = (int32_t) Y; + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(xIndex < 0 || xIndex > (S->numRows-1) || yIndex < 0 || yIndex > ( S->numCols-1)) + { + return(0); + } + + /* Calculation of index for two nearest points in X-direction */ + index = (xIndex - 1) + (yIndex-1) * S->numCols ; + + + /* Read two nearest points in X-direction */ + f00 = pData[index]; + f01 = pData[index + 1]; + + /* Calculation of index for two nearest points in Y-direction */ + index = (xIndex-1) + (yIndex) * S->numCols; + + + /* Read two nearest points in Y-direction */ + f10 = pData[index]; + f11 = pData[index + 1]; + + /* Calculation of intermediate values */ + b1 = f00; + b2 = f01 - f00; + b3 = f10 - f00; + b4 = f00 - f01 - f10 + f11; + + /* Calculation of fractional part in X */ + xdiff = X - xIndex; + + /* Calculation of fractional part in Y */ + ydiff = Y - yIndex; + + /* Calculation of bi-linear interpolated output */ + out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff; + + /* return to application */ + return (out); + + } + + /** + * + * @brief Q31 bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + + static __INLINE q31_t arm_bilinear_interp_q31( + arm_bilinear_interp_instance_q31 * S, + q31_t X, + q31_t Y) + { + q31_t out; /* Temporary output */ + q31_t acc = 0; /* output */ + q31_t xfract, yfract; /* X, Y fractional parts */ + q31_t x1, x2, y1, y2; /* Nearest output values */ + int32_t rI, cI; /* Row and column indices */ + q31_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & 0xFFF00000) >> 20u); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & 0xFFF00000) >> 20u); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows-1) || cI < 0 || cI > ( S->numCols-1)) + { + return(0); + } + + /* 20 bits for the fractional part */ + /* shift left xfract by 11 to keep 1.31 format */ + xfract = (X & 0x000FFFFF) << 11u; + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + nCols * (cI)]; + x2 = pYData[(rI) + nCols * (cI) + 1u]; + + /* 20 bits for the fractional part */ + /* shift left yfract by 11 to keep 1.31 format */ + yfract = (Y & 0x000FFFFF) << 11u; + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + nCols * (cI + 1)]; + y2 = pYData[(rI) + nCols * (cI + 1) + 1u]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */ + out = ((q31_t) (((q63_t) x1 * (0x7FFFFFFF - xfract)) >> 32)); + acc = ((q31_t) (((q63_t) out * (0x7FFFFFFF - yfract)) >> 32)); + + /* x2 * (xfract) * (1-yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) x2 * (0x7FFFFFFF - yfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (xfract) >> 32)); + + /* y1 * (1 - xfract) * (yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) y1 * (0x7FFFFFFF - xfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); + + /* y2 * (xfract) * (yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) y2 * (xfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); + + /* Convert acc to 1.31(q31) format */ + return (acc << 2u); + + } + + /** + * @brief Q15 bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + + static __INLINE q15_t arm_bilinear_interp_q15( + arm_bilinear_interp_instance_q15 * S, + q31_t X, + q31_t Y) + { + q63_t acc = 0; /* output */ + q31_t out; /* Temporary output */ + q15_t x1, x2, y1, y2; /* Nearest output values */ + q31_t xfract, yfract; /* X, Y fractional parts */ + int32_t rI, cI; /* Row and column indices */ + q15_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & 0xFFF00000) >> 20); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & 0xFFF00000) >> 20); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows-1) || cI < 0 || cI > ( S->numCols-1)) + { + return(0); + } + + /* 20 bits for the fractional part */ + /* xfract should be in 12.20 format */ + xfract = (X & 0x000FFFFF); + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + nCols * (cI)]; + x2 = pYData[(rI) + nCols * (cI) + 1u]; + + + /* 20 bits for the fractional part */ + /* yfract should be in 12.20 format */ + yfract = (Y & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + nCols * (cI + 1)]; + y2 = pYData[(rI) + nCols * (cI + 1) + 1u]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */ + + /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */ + /* convert 13.35 to 13.31 by right shifting and out is in 1.31 */ + out = (q31_t) (((q63_t) x1 * (0xFFFFF - xfract)) >> 4u); + acc = ((q63_t) out * (0xFFFFF - yfract)); + + /* x2 * (xfract) * (1-yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) x2 * (0xFFFFF - yfract)) >> 4u); + acc += ((q63_t) out * (xfract)); + + /* y1 * (1 - xfract) * (yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) y1 * (0xFFFFF - xfract)) >> 4u); + acc += ((q63_t) out * (yfract)); + + /* y2 * (xfract) * (yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) y2 * (xfract)) >> 4u); + acc += ((q63_t) out * (yfract)); + + /* acc is in 13.51 format and down shift acc by 36 times */ + /* Convert out to 1.15 format */ + return (acc >> 36); + + } + + /** + * @brief Q7 bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + + static __INLINE q7_t arm_bilinear_interp_q7( + arm_bilinear_interp_instance_q7 * S, + q31_t X, + q31_t Y) + { + q63_t acc = 0; /* output */ + q31_t out; /* Temporary output */ + q31_t xfract, yfract; /* X, Y fractional parts */ + q7_t x1, x2, y1, y2; /* Nearest output values */ + int32_t rI, cI; /* Row and column indices */ + q7_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & 0xFFF00000) >> 20); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & 0xFFF00000) >> 20); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows-1) || cI < 0 || cI > ( S->numCols-1)) + { + return(0); + } + + /* 20 bits for the fractional part */ + /* xfract should be in 12.20 format */ + xfract = (X & 0x000FFFFF); + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + nCols * (cI)]; + x2 = pYData[(rI) + nCols * (cI) + 1u]; + + + /* 20 bits for the fractional part */ + /* yfract should be in 12.20 format */ + yfract = (Y & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + nCols * (cI + 1)]; + y2 = pYData[(rI) + nCols * (cI + 1) + 1u]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */ + out = ((x1 * (0xFFFFF - xfract))); + acc = (((q63_t) out * (0xFFFFF - yfract))); + + /* x2 * (xfract) * (1-yfract) in 2.22 and adding to acc */ + out = ((x2 * (0xFFFFF - yfract))); + acc += (((q63_t) out * (xfract))); + + /* y1 * (1 - xfract) * (yfract) in 2.22 and adding to acc */ + out = ((y1 * (0xFFFFF - xfract))); + acc += (((q63_t) out * (yfract))); + + /* y2 * (xfract) * (yfract) in 2.22 and adding to acc */ + out = ((y2 * (yfract))); + acc += (((q63_t) out * (xfract))); + + /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */ + return (acc >> 40); + + } + + /** + * @} end of BilinearInterpolate group + */ + + + + + + +#ifdef __cplusplus +} +#endif + + +#endif /* _ARM_MATH_H */ + + +/** + * + * End of file. + */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm0.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm0.h new file mode 100644 index 000000000..edd522173 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm0.h @@ -0,0 +1,665 @@ +/**************************************************************************//** + * @file core_cm0.h + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File + * @version V2.10 + * @date 19. July 2011 + * + * @note + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + + +/** \mainpage CMSIS Cortex-M0 + + This documentation describes the CMSIS Cortex-M Core Peripheral Access Layer. + It consists of: + + - Cortex-M Core Register Definitions + - Cortex-M functions + - Cortex-M instructions + + The CMSIS Cortex-M0 Core Peripheral Access Layer contains C and assembly functions that ease + access to the Cortex-M Core + */ + +/** \defgroup CMSIS_MISRA_Exceptions CMSIS MISRA-C:2004 Compliance Exceptions + CMSIS violates following MISRA-C2004 Rules: + + - Violates MISRA 2004 Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + - Violates MISRA 2004 Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + - Violates MISRA 2004 Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \defgroup CMSIS_core_definitions CMSIS Core Definitions + This file defines all structures and symbols for CMSIS core: + - CMSIS version number + - Cortex-M core + - Cortex-M core Revision Number + @{ + */ + +/* CMSIS CM0 definitions */ +#define __CM0_CMSIS_VERSION_MAIN (0x02) /*!< [31:16] CMSIS HAL main version */ +#define __CM0_CMSIS_VERSION_SUB (0x10) /*!< [15:0] CMSIS HAL sub version */ +#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16) | __CM0_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x00) /*!< Cortex core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + +#endif + +/*!< __FPU_USED to be checked prior to making use of FPU specific registers and functions */ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + /* add preprocessor checks */ +#endif + +#include /*!< standard types definitions */ +#include "core_cmInstr.h" /*!< Core Instruction Access */ +#include "core_cmFunc.h" /*!< Core Function Access */ + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000 + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +#ifdef __cplusplus + #define __I volatile /*!< defines 'read only' permissions */ +#else + #define __I volatile const /*!< defines 'read only' permissions */ +#endif +#define __O volatile /*!< defines 'write only' permissions */ +#define __IO volatile /*!< defines 'read / write' permissions */ + +/*@} end of group CMSIS_core_definitions */ + + + +/******************************************************************************* + * Register Abstraction + ******************************************************************************/ +/** \defgroup CMSIS_core_register CMSIS Core Register + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE CMSIS Core + Type definitions for the Cortex-M Core Registers + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC CMSIS NVIC + Type definitions for the Cortex-M NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31]; + __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31]; + __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31]; + __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31]; + uint32_t RESERVED4[64]; + __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB CMSIS SCB + Type definitions for the Cortex-M System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick CMSIS SysTick + Type definitions for the Cortex-M System Timer Registers + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug CMSIS Core Debug + Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP + and not via processor. Therefore they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + @{ + */ + +/* Memory mapping of Cortex-M0 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface CMSIS Core Function Interface + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions CMSIS Core NVIC Functions + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) +#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) +#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) + + +/** \brief Enable External Interrupt + + This function enables a device specific interrupt in the NVIC interrupt controller. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the external interrupt to enable + */ +static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Disable External Interrupt + + This function disables a device specific interrupt in the NVIC interrupt controller. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the external interrupt to disable + */ +static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Get Pending Interrupt + + This function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Number of the interrupt for get pending + \return 0 Interrupt status is not pending + \return 1 Interrupt status is pending + */ +static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + + +/** \brief Set Pending Interrupt + + This function sets the pending bit for the specified interrupt. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the interrupt for set pending + */ +static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Clear Pending Interrupt + + This function clears the pending bit for the specified interrupt. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the interrupt for clear pending + */ +static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Set Interrupt Priority + + This function sets the priority for the specified interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + Note: The priority cannot be set for every core interrupt. + + \param [in] IRQn Number of the interrupt for set priority + \param [in] priority Priority to set + */ +static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } + else { + NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } +} + + +/** \brief Get Interrupt Priority + + This function reads the priority for the specified interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + The returned priority value is automatically aligned to the implemented + priority bits of the microcontroller. + + \param [in] IRQn Number of the interrupt for get priority + \return Interrupt Priority + */ +static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ + else { + return((uint32_t)((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief System Reset + + This function initiate a system reset request to reset the MCU. + */ +static __INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions CMSIS Core SysTick Functions + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + This function initialises the system tick timer and its interrupt and start the system tick timer. + Counter is in free running mode to generate periodical interrupts. + + \param [in] ticks Number of ticks between two interrupts + \return 0 Function succeeded + \return 1 Function failed + */ +static __INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm3.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm3.h new file mode 100644 index 000000000..c15e10ae2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm3.h @@ -0,0 +1,1236 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V2.10 + * @date 19. July 2011 + * + * @note + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + + +/** \mainpage CMSIS Cortex-M3 + + This documentation describes the CMSIS Cortex-M Core Peripheral Access Layer. + It consists of: + + - Cortex-M Core Register Definitions + - Cortex-M functions + - Cortex-M instructions + + The CMSIS Cortex-M3 Core Peripheral Access Layer contains C and assembly functions that ease + access to the Cortex-M Core + */ + +/** \defgroup CMSIS_MISRA_Exceptions CMSIS MISRA-C:2004 Compliance Exceptions + CMSIS violates following MISRA-C2004 Rules: + + - Violates MISRA 2004 Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + - Violates MISRA 2004 Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + - Violates MISRA 2004 Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \defgroup CMSIS_core_definitions CMSIS Core Definitions + This file defines all structures and symbols for CMSIS core: + - CMSIS version number + - Cortex-M core + - Cortex-M core Revision Number + @{ + */ + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (0x02) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x10) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03) /*!< Cortex core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + +#endif + +/*!< __FPU_USED to be checked prior to making use of FPU specific registers and functions */ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + /* add preprocessor checks */ +#endif + +#include /*!< standard types definitions */ +#include "core_cmInstr.h" /*!< Core Instruction Access */ +#include "core_cmFunc.h" /*!< Core Function Access */ + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200 + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +#ifdef __cplusplus + #define __I volatile /*!< defines 'read only' permissions */ +#else + #define __I volatile const /*!< defines 'read only' permissions */ +#endif +#define __O volatile /*!< defines 'write only' permissions */ +#define __IO volatile /*!< defines 'read / write' permissions */ + +/*@} end of group CMSIS_core_definitions */ + + + +/******************************************************************************* + * Register Abstraction + ******************************************************************************/ +/** \defgroup CMSIS_core_register CMSIS Core Register + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE CMSIS Core + Type definitions for the Cortex-M Core Registers + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC CMSIS NVIC + Type definitions for the Cortex-M NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB CMSIS SCB + Type definitions for the Cortex-M System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB CMSIS System Control and ID Register not in the SCB + Type definitions for the Cortex-M System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick CMSIS SysTick + Type definitions for the Cortex-M System Timer Registers + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM CMSIS ITM + Type definitions for the Cortex-M Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_TXENA_Pos 3 /*!< ITM TCR: TXENA Position */ +#define ITM_TCR_TXENA_Msk (1UL << ITM_TCR_TXENA_Pos) /*!< ITM TCR: TXENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU CMSIS MPU + Type definitions for the Cortex-M Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug CMSIS Core Debug + Type definitions for the Cortex-M Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + @{ + */ + +/* Memory mapping of Cortex-M3 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface CMSIS Core Function Interface + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions CMSIS Core NVIC Functions + @{ + */ + +/** \brief Set Priority Grouping + + This function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field + */ +static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + This function gets the priority grouping from NVIC Interrupt Controller. + Priority grouping is SCB->AIRCR [10:8] PRIGROUP field. + + \return Priority grouping field + */ +static __INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + This function enables a device specific interrupt in the NVIC interrupt controller. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the external interrupt to enable + */ +static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + This function disables a device specific interrupt in the NVIC interrupt controller. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the external interrupt to disable + */ +static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + This function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Number of the interrupt for get pending + \return 0 Interrupt status is not pending + \return 1 Interrupt status is pending + */ +static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + This function sets the pending bit for the specified interrupt. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the interrupt for set pending + */ +static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + This function clears the pending bit for the specified interrupt. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the interrupt for clear pending + */ +static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + This function reads the active register in NVIC and returns the active bit. + \param [in] IRQn Number of the interrupt for get active + \return 0 Interrupt status is not active + \return 1 Interrupt status is active + */ +static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + This function sets the priority for the specified interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + Note: The priority cannot be set for every core interrupt. + + \param [in] IRQn Number of the interrupt for set priority + \param [in] priority Priority to set + */ +static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + This function reads the priority for the specified interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + The returned priority value is automatically aligned to the implemented + priority bits of the microcontroller. + + \param [in] IRQn Number of the interrupt for get priority + \return Interrupt Priority + */ +static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + This function encodes the priority for an interrupt with the given priority group, + preemptive priority value and sub priority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + The returned priority value can be used for NVIC_SetPriority(...) function + + \param [in] PriorityGroup Used priority group + \param [in] PreemptPriority Preemptive priority value (starting from 0) + \param [in] SubPriority Sub priority value (starting from 0) + \return Encoded priority for the interrupt + */ +static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + This function decodes an interrupt priority value with the given priority group to + preemptive priority value and sub priority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + The priority value can be retrieved with NVIC_GetPriority(...) function + + \param [in] Priority Priority value + \param [in] PriorityGroup Used priority group + \param [out] pPreemptPriority Preemptive priority value (starting from 0) + \param [out] pSubPriority Sub priority value (starting from 0) + */ +static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + This function initiate a system reset request to reset the MCU. + */ +static __INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions CMSIS Core SysTick Functions + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + This function initialises the system tick timer and its interrupt and start the system tick timer. + Counter is in free running mode to generate periodical interrupts. + + \param [in] ticks Number of ticks between two interrupts + \return 0 Function succeeded + \return 1 Function failed + */ +static __INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions CMSIS Core Debug Functions + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< external variable to receive characters */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< value identifying ITM_RxBuffer is ready for next character */ + + +/** \brief ITM Send Character + + This function transmits a character via the ITM channel 0. + It just returns when no debugger is connected that has booked the output. + It is blocking when a debugger is connected, but the previous character send is not transmitted. + + \param [in] ch Character to transmit + \return Character to transmit + */ +static __INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */ + (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + This function inputs a character via external variable ITM_RxBuffer. + It just returns when no debugger is connected that has booked the output. + It is blocking when a debugger is connected, but the previous character send is not transmitted. + + \return Received character + \return -1 No character received + */ +static __INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + This function checks external variable ITM_RxBuffer whether a character is available or not. + It returns '1' if a character is available and '0' if no character is available. + + \return 0 No character available + \return 1 Character available + */ +static __INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm4.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm4.h new file mode 100644 index 000000000..76bf8292a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm4.h @@ -0,0 +1,1378 @@ +/**************************************************************************//** + * @file core_cm4.h + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File + * @version V2.10 + * @date 19. July 2011 + * + * @note + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + + +/** \mainpage CMSIS Cortex-M4 + + This documentation describes the CMSIS Cortex-M Core Peripheral Access Layer. + It consists of: + + - Cortex-M Core Register Definitions + - Cortex-M functions + - Cortex-M instructions + - Cortex-M SIMD instructions + + The CMSIS Cortex-M4 Core Peripheral Access Layer contains C and assembly functions that ease + access to the Cortex-M Core + */ + +/** \defgroup CMSIS_MISRA_Exceptions CMSIS MISRA-C:2004 Compliance Exceptions + CMSIS violates following MISRA-C2004 Rules: + + - Violates MISRA 2004 Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + - Violates MISRA 2004 Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + - Violates MISRA 2004 Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \defgroup CMSIS_core_definitions CMSIS Core Definitions + This file defines all structures and symbols for CMSIS core: + - CMSIS version number + - Cortex-M core + - Cortex-M core Revision Number + @{ + */ + +/* CMSIS CM4 definitions */ +#define __CM4_CMSIS_VERSION_MAIN (0x02) /*!< [31:16] CMSIS HAL main version */ +#define __CM4_CMSIS_VERSION_SUB (0x10) /*!< [15:0] CMSIS HAL sub version */ +#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16) | __CM4_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x04) /*!< Cortex core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + +#endif + +/*!< __FPU_USED to be checked prior to making use of FPU specific registers and functions */ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __TASKING__ ) + /* add preprocessor checks to define __FPU_USED */ + #define __FPU_USED 0 +#endif + +#include /*!< standard types definitions */ +#include /*!< Core Instruction Access */ +#include /*!< Core Function Access */ +#include /*!< Compiler specific SIMD Intrinsics */ + +#endif /* __CORE_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000 + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0 + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +#ifdef __cplusplus + #define __I volatile /*!< defines 'read only' permissions */ +#else + #define __I volatile const /*!< defines 'read only' permissions */ +#endif +#define __O volatile /*!< defines 'write only' permissions */ +#define __IO volatile /*!< defines 'read / write' permissions */ + +/*@} end of group CMSIS_core_definitions */ + + + +/******************************************************************************* + * Register Abstraction + ******************************************************************************/ +/** \defgroup CMSIS_core_register CMSIS Core Register + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE CMSIS Core + Type definitions for the Cortex-M Core Registers + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC CMSIS NVIC + Type definitions for the Cortex-M NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB CMSIS SCB + Type definitions for the Cortex-M System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB CMSIS System Control and ID Register not in the SCB + Type definitions for the Cortex-M System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9 /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8 /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick CMSIS SysTick + Type definitions for the Cortex-M System Timer Registers + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM CMSIS ITM + Type definitions for the Cortex-M Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_TXENA_Pos 3 /*!< ITM TCR: TXENA Position */ +#define ITM_TCR_TXENA_Msk (1UL << ITM_TCR_TXENA_Pos) /*!< ITM TCR: TXENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU CMSIS MPU + Type definitions for the Cortex-M Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if (__FPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_FPU CMSIS FPU + Type definitions for the Cortex-M Floating Point Unit (FPU) + @{ + */ + +/** \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __IO uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IO uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IO uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __I uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __I uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register */ +#define FPU_FPCCR_ASPEN_Pos 31 /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30 /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8 /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6 /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5 /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4 /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3 /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1 /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0 /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL << FPU_FPCCR_LSPACT_Pos) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register */ +#define FPU_FPCAR_ADDRESS_Pos 3 /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register */ +#define FPU_FPDSCR_AHP_Pos 26 /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25 /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24 /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22 /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28 /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24 /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20 /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16 /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12 /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8 /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4 /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0 /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL << FPU_MVFR0_A_SIMD_registers_Pos) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28 /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24 /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4 /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0 /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL << FPU_MVFR1_FtZ_mode_Pos) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug CMSIS Core Debug + Type definitions for the Cortex-M Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + @{ + */ + +/* Memory mapping of Cortex-M4 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#if (__FPU_PRESENT == 1) + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface CMSIS Core Function Interface + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions CMSIS Core NVIC Functions + @{ + */ + +/** \brief Set Priority Grouping + + This function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field + */ +static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + This function gets the priority grouping from NVIC Interrupt Controller. + Priority grouping is SCB->AIRCR [10:8] PRIGROUP field. + + \return Priority grouping field + */ +static __INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + This function enables a device specific interrupt in the NVIC interrupt controller. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the external interrupt to enable + */ +static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ +/* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */ + NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + This function disables a device specific interrupt in the NVIC interrupt controller. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the external interrupt to disable + */ +static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + This function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Number of the interrupt for get pending + \return 0 Interrupt status is not pending + \return 1 Interrupt status is pending + */ +static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + This function sets the pending bit for the specified interrupt. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the interrupt for set pending + */ +static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + This function clears the pending bit for the specified interrupt. + The interrupt number cannot be a negative value. + + \param [in] IRQn Number of the interrupt for clear pending + */ +static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + This function reads the active register in NVIC and returns the active bit. + \param [in] IRQn Number of the interrupt for get active + \return 0 Interrupt status is not active + \return 1 Interrupt status is active + */ +static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + This function sets the priority for the specified interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + Note: The priority cannot be set for every core interrupt. + + \param [in] IRQn Number of the interrupt for set priority + \param [in] priority Priority to set + */ +static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + This function reads the priority for the specified interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + The returned priority value is automatically aligned to the implemented + priority bits of the microcontroller. + + \param [in] IRQn Number of the interrupt for get priority + \return Interrupt Priority + */ +static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + This function encodes the priority for an interrupt with the given priority group, + preemptive priority value and sub priority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + The returned priority value can be used for NVIC_SetPriority(...) function + + \param [in] PriorityGroup Used priority group + \param [in] PreemptPriority Preemptive priority value (starting from 0) + \param [in] SubPriority Sub priority value (starting from 0) + \return Encoded priority for the interrupt + */ +static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + This function decodes an interrupt priority value with the given priority group to + preemptive priority value and sub priority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + The priority value can be retrieved with NVIC_GetPriority(...) function + + \param [in] Priority Priority value + \param [in] PriorityGroup Used priority group + \param [out] pPreemptPriority Preemptive priority value (starting from 0) + \param [out] pSubPriority Sub priority value (starting from 0) + */ +static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + This function initiate a system reset request to reset the MCU. + */ +static __INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions CMSIS Core SysTick Functions + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + This function initialises the system tick timer and its interrupt and start the system tick timer. + Counter is in free running mode to generate periodical interrupts. + + \param [in] ticks Number of ticks between two interrupts + \return 0 Function succeeded + \return 1 Function failed + */ +static __INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions CMSIS Core Debug Functions + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< external variable to receive characters */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< value identifying ITM_RxBuffer is ready for next character */ + + +/** \brief ITM Send Character + + This function transmits a character via the ITM channel 0. + It just returns when no debugger is connected that has booked the output. + It is blocking when a debugger is connected, but the previous character send is not transmitted. + + \param [in] ch Character to transmit + \return Character to transmit + */ +static __INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */ + (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + This function inputs a character via external variable ITM_RxBuffer. + It just returns when no debugger is connected that has booked the output. + It is blocking when a debugger is connected, but the previous character send is not transmitted. + + \return Received character + \return -1 No character received + */ +static __INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + This function checks external variable ITM_RxBuffer whether a character is available or not. + It returns '1' if a character is available and '0' if no character is available. + + \return 0 No character available + \return 1 Character available + */ +static __INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + +#endif /* __CORE_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm4_simd.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm4_simd.h new file mode 100644 index 000000000..479188696 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cm4_simd.h @@ -0,0 +1,701 @@ +/**************************************************************************//** + * @file core_cm4_simd.h + * @brief CMSIS Cortex-M4 SIMD Header File + * @version V2.10 + * @date 19. July 2011 + * + * @note + * Copyright (C) 2010-2011 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM4_SIMD_H +#define __CORE_CM4_SIMD_H + + +/******************************************************************************* + * Hardware Abstraction Layer + ******************************************************************************/ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +/*------ CM4 SOMD Intrinsics -----------------------------------------------------*/ +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#include + +/*------ CM4 SIMDDSP Intrinsics -----------------------------------------------------*/ +/* intrinsic __SADD8 see intrinsics.h */ +/* intrinsic __QADD8 see intrinsics.h */ +/* intrinsic __SHADD8 see intrinsics.h */ +/* intrinsic __UADD8 see intrinsics.h */ +/* intrinsic __UQADD8 see intrinsics.h */ +/* intrinsic __UHADD8 see intrinsics.h */ +/* intrinsic __SSUB8 see intrinsics.h */ +/* intrinsic __QSUB8 see intrinsics.h */ +/* intrinsic __SHSUB8 see intrinsics.h */ +/* intrinsic __USUB8 see intrinsics.h */ +/* intrinsic __UQSUB8 see intrinsics.h */ +/* intrinsic __UHSUB8 see intrinsics.h */ +/* intrinsic __SADD16 see intrinsics.h */ +/* intrinsic __QADD16 see intrinsics.h */ +/* intrinsic __SHADD16 see intrinsics.h */ +/* intrinsic __UADD16 see intrinsics.h */ +/* intrinsic __UQADD16 see intrinsics.h */ +/* intrinsic __UHADD16 see intrinsics.h */ +/* intrinsic __SSUB16 see intrinsics.h */ +/* intrinsic __QSUB16 see intrinsics.h */ +/* intrinsic __SHSUB16 see intrinsics.h */ +/* intrinsic __USUB16 see intrinsics.h */ +/* intrinsic __UQSUB16 see intrinsics.h */ +/* intrinsic __UHSUB16 see intrinsics.h */ +/* intrinsic __SASX see intrinsics.h */ +/* intrinsic __QASX see intrinsics.h */ +/* intrinsic __SHASX see intrinsics.h */ +/* intrinsic __UASX see intrinsics.h */ +/* intrinsic __UQASX see intrinsics.h */ +/* intrinsic __UHASX see intrinsics.h */ +/* intrinsic __SSAX see intrinsics.h */ +/* intrinsic __QSAX see intrinsics.h */ +/* intrinsic __SHSAX see intrinsics.h */ +/* intrinsic __USAX see intrinsics.h */ +/* intrinsic __UQSAX see intrinsics.h */ +/* intrinsic __UHSAX see intrinsics.h */ +/* intrinsic __USAD8 see intrinsics.h */ +/* intrinsic __USADA8 see intrinsics.h */ +/* intrinsic __SSAT16 see intrinsics.h */ +/* intrinsic __USAT16 see intrinsics.h */ +/* intrinsic __UXTB16 see intrinsics.h */ +/* intrinsic __SXTB16 see intrinsics.h */ +/* intrinsic __UXTAB16 see intrinsics.h */ +/* intrinsic __SXTAB16 see intrinsics.h */ +/* intrinsic __SMUAD see intrinsics.h */ +/* intrinsic __SMUADX see intrinsics.h */ +/* intrinsic __SMLAD see intrinsics.h */ +/* intrinsic __SMLADX see intrinsics.h */ +/* intrinsic __SMLALD see intrinsics.h */ +/* intrinsic __SMLALDX see intrinsics.h */ +/* intrinsic __SMUSD see intrinsics.h */ +/* intrinsic __SMUSDX see intrinsics.h */ +/* intrinsic __SMLSD see intrinsics.h */ +/* intrinsic __SMLSDX see intrinsics.h */ +/* intrinsic __SMLSLD see intrinsics.h */ +/* intrinsic __SMLSLDX see intrinsics.h */ +/* intrinsic __SEL see intrinsics.h */ +/* intrinsic __QADD see intrinsics.h */ +/* intrinsic __QSUB see intrinsics.h */ +/* intrinsic __PKHBT see intrinsics.h */ +/* intrinsic __PKHTB see intrinsics.h */ + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SMLALD(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +#define __SMLALDX(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SMLSLD(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +#define __SMLSLDX(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __QADD(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) static __INLINE uint32_t __QSUB(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ + + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +/* not yet supported */ +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + +#endif + +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CORE_CM4_SIMD_H */ + +#ifdef __cplusplus +} +#endif diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cmFunc.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cmFunc.h new file mode 100644 index 000000000..c999b1c83 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cmFunc.h @@ -0,0 +1,609 @@ +/**************************************************************************//** + * @file core_cmFunc.h + * @brief CMSIS Cortex-M Core Function Access Header File + * @version V2.10 + * @date 26. July 2011 + * + * @note + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + +#ifndef __CORE_CMFUNC_H +#define __CORE_CMFUNC_H + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + +/* intrinsic void __enable_irq(); */ +/* intrinsic void __disable_irq(); */ + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +static __INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +static __INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + + +/** \brief Get ISPR Register + + This function returns the content of the ISPR Register. + + \return ISPR Register value + */ +static __INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +static __INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +static __INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +static __INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +static __INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +static __INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +static __INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +static __INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +static __INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +static __INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +static __INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xff); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +static __INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +static __INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +static __INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +static __INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#endif +} + +#endif /* (__CORTEX_M == 0x04) */ + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#include + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** \brief Enable IRQ Interrupts + + This function enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) static __INLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i"); +} + + +/** \brief Disable IRQ Interrupts + + This function disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) static __INLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i"); +} + + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__attribute__( ( always_inline ) ) static __INLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) ); +} + + +/** \brief Get ISPR Register + + This function returns the content of the ISPR Register. + + \return ISPR Register value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_PSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) static __INLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) ); +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_MSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) static __INLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) ); +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__attribute__( ( always_inline ) ) static __INLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) ); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) static __INLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f"); +} + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) static __INLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f"); +} + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); + return(result); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__attribute__( ( always_inline ) ) static __INLINE void __set_BASEPRI(uint32_t value) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (value) ); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__attribute__( ( always_inline ) ) static __INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) ); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + uint32_t result; + + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + return(result); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__attribute__( ( always_inline ) ) static __INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) ); +#endif +} + +#endif /* (__CORTEX_M == 0x04) */ + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ + +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all instrinsics, + * Including the CMSIS ones. + */ + +#endif + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +#endif /* __CORE_CMFUNC_H */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cmInstr.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cmInstr.h new file mode 100644 index 000000000..ceb4f8756 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Include/core_cmInstr.h @@ -0,0 +1,585 @@ +/**************************************************************************//** + * @file core_cmInstr.h + * @brief CMSIS Cortex-M Core Instruction Access Header File + * @version V2.10 + * @date 19. July 2011 + * + * @note + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + +#ifndef __CORE_CMINSTR_H +#define __CORE_CMINSTR_H + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +static __INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} + + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +static __INLINE __ASM int32_t __REVSH(int32_t value) +{ + revsh r0, r0 + bx lr +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __rbit + + +/** \brief LDR Exclusive (8 bit) + + This function performs a exclusive LDR command for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) + + +/** \brief LDR Exclusive (16 bit) + + This function performs a exclusive LDR command for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) + + +/** \brief LDR Exclusive (32 bit) + + This function performs a exclusive LDR command for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) + + +/** \brief STR Exclusive (8 bit) + + This function performs a exclusive STR command for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (16 bit) + + This function performs a exclusive STR command for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (32 bit) + + This function performs a exclusive STR command for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW(value, ptr) __strex(value, ptr) + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +#define __CLREX __clrex + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + +#endif /* (__CORTEX_M >= 0x03) */ + + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#include + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +__attribute__( ( always_inline ) ) static __INLINE void __NOP(void) +{ + __ASM volatile ("nop"); +} + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) static __INLINE void __WFI(void) +{ + __ASM volatile ("wfi"); +} + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) static __INLINE void __WFE(void) +{ + __ASM volatile ("wfe"); +} + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +__attribute__( ( always_inline ) ) static __INLINE void __SEV(void) +{ + __ASM volatile ("sev"); +} + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +__attribute__( ( always_inline ) ) static __INLINE void __ISB(void) +{ + __ASM volatile ("isb"); +} + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__attribute__( ( always_inline ) ) static __INLINE void __DSB(void) +{ + __ASM volatile ("dsb"); +} + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__attribute__( ( always_inline ) ) static __INLINE void __DMB(void) +{ + __ASM volatile ("dmb"); +} + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __REV(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) static __INLINE int32_t __REVSH(int32_t value) +{ + uint32_t result; + + __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief LDR Exclusive (8 bit) + + This function performs a exclusive LDR command for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__( ( always_inline ) ) static __INLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint8_t result; + + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + + +/** \brief LDR Exclusive (16 bit) + + This function performs a exclusive LDR command for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__( ( always_inline ) ) static __INLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint16_t result; + + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + + +/** \brief LDR Exclusive (32 bit) + + This function performs a exclusive LDR command for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + + +/** \brief STR Exclusive (8 bit) + + This function performs a exclusive STR command for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +/** \brief STR Exclusive (16 bit) + + This function performs a exclusive STR command for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +/** \brief STR Exclusive (32 bit) + + This function performs a exclusive STR command for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) static __INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +__attribute__( ( always_inline ) ) static __INLINE void __CLREX(void) +{ + __ASM volatile ("clrex"); +} + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__attribute__( ( always_inline ) ) static __INLINE uint8_t __CLZ(uint32_t value) +{ + uint8_t result; + + __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ + +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + +#endif + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + +#endif /* __CORE_CMINSTR_H */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/README.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/README.txt new file mode 100644 index 000000000..cc69e2ca2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/README.txt @@ -0,0 +1,34 @@ +* ------------------------------------------------------------------- +* Copyright (C) 2011 ARM Limited. All rights reserved. +* +* Date: 25 July 2011 +* Revision: V2.10 +* +* Project: Cortex Microcontroller Software Interface Standard (CMSIS) +* Title: Release Note for CMSIS +* +* ------------------------------------------------------------------- + + +NOTE - Open the index.html file to access CMSIS documentation + + +The Cortex Microcontroller Software Interface Standard (CMSIS) provides a single standard across all +Cortex-Mx processor series vendors. It enables code re-use and code sharing across software projects +and reduces time-to-market for new embedded applications. + +CMSIS is released under the terms of the end user license agreement ("CMSIS END USER LICENCE AGREEMENT.pdf"). +Any user of the software package is bound to the terms and conditions of the end user license agreement. + + +You will find the following sub-directories: + +Documentation - Contains CMSIS documentation. + +DSP_Lib - MDK project files, Examples and source files etc.. to build the + CMSIS DSP Software Library for Cortex-M0, Cortex-M3, Cortex-M4 processors. + +Include - CMSIS Core Support and CMSIS DSP Include Files. + +Lib - CMSIS DSP Binaries +--- \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/index.htm b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/index.htm new file mode 100644 index 000000000..40e52b373 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/index.htm @@ -0,0 +1,115 @@ + + + +CMSIS Release Notes + + + + + + + + +

CMSIS Release Notes

+

Release Notes for CMSIS V2.00

+

November 2010

+ +

Information in this file, the accompany manuals, and software is
+ Copyright � ARM Ltd.
All rights reserved. +

+

+ +
+ +

Contents

+ + + + + + + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/Release_Notes.html b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/Release_Notes.html new file mode 100644 index 000000000..2fea2a827 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/Release_Notes.html @@ -0,0 +1,968 @@ + + + + + + + + +Release Notes for STM32F2xx Standard Peripherals Library Drivers + + + + + +
+ +

 

+ +
+ + + + + +
+ + + + + + + +
+

Back to Release page

+
+

Release Notes for STM32F2xx Standard + Peripherals Library Drivers

+

Copyright + 2012 STMicroelectronics

+

+
+

 

+ + + + +
+

Contents

+
    +
  1. STM32F2xx Standard Peripherals Library Drivers + update History
  2. +
  3. License
  4. +
+

STM32F2xx + Standard Peripherals Library Drivers  update History

V1.1.2 / 05-March-2012

+

Main +Changes

+ +
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • stm32f2xx_dcmi.c
    • DCMI_GetFlagStatus() function: fix test condition on RISR register, use if (dcmireg == 0x00) instead of if (dcmireg == 0x01)
  • stm32f2xx_pwr.c
    • PWR_PVDLevelConfig() +function: remove value of the voltage threshold corresponding to each +PVD detection level, user should refer to the electrical +characteristics of the STM32 device datasheet to have the correct +value

V1.1.1 / 28-December-2011

Main +Changes

+
  • All source files: update disclaimer to add reference to the new license agreement

V1.1.0 / 07-October-2011

Main +Changes

+
  • stm32f2xx_sdio.h/.c
    • SDIO_SetPowerState() function: fix POWER register configuration, only one access (for read or write) is allowed
  • stm32f2xx_usart.h/.c
    • Update procedure to check on overrun error interrupt pending bit, defines for the following flag are added:
      • USART_IT_ORE_RX: this flag is set if overrun error interrupt occurs and RXNEIE bit is set
      • USART_IT_ORE_ER: this flag is set if overrun error interrupt occurs and EIE bit is set
  • stm32f2xx_i2c.h
    • Add test on I2C3 in IS_I2C_ALL_PERIPH() macro
  • stm32f2xx_tim.c
    • TIM_UpdateRequestConfig(): correct function header's comment 
    • TIM_ICInit(): add assert macros to test if the passed TIM parameter has channel 2, 3 or 4
  • stm32f2xx_rtc.c
    • Remove useless code from RTC_GetDate() function

V1.0.0 / 18-April-2011

Main +Changes

+
  • First official release for STM32F2xx devices
  • All drivers
    • Update file and function's header comments to add more explanation and fix Doxygen tags formatting
  • stm32f2xx_syscfg.h/.c
    • Add 2 functions for Compensation Cell management:
      void SYSCFG_CompensationCellCmd(FunctionalState NewState);
      FlagStatus SYSCFG_GetCompensationCellStatus(void);
  • stm32f2xx_rtc.h
    • RTC_DateTypeDef structure: change RTC_Month and RTC_WeekDay members size to 8bit (instead of 32bit)

V1.0.0RC1 / 18-March-2011

Main +Changes

+
  • Official version (V1.0.0) Release Candidate 1
  • All drivers
    • Add more comments and information about how to use the driver and the functions API
    • Delete registers definition from stm32f2xx_ppp.c and use defines within stm32f2xx.h file
  • stm32f2xx_rcc.h/.c
    • RCC_PLLConfig() function updated to support only Silicon RevisionB and RevisionY (PLLR parameter removed)
  • stm32f2xx_spi.c
    • I2S_Init() function updated to support only the I2S clock scheme available in Silicon RevisionB and RevisionY
  • stm32f2xx_can.h/.c
    • Add 5 new functions
      • 3 +new functions controlling the counter errors: CAN_GetLastErrorCode(), +CAN_GetReceiveErrorCounter() and CAN_GetLSBTransmitErrorCounter()
      • 1 new function to select the CAN operating mode: CAN_OperatingModeRequest()
      • 1 new function to support CAN TT mode: CAN_TTComModeCmd()
        +
    • CAN_TransmitStatus() function updated to support all CAN transmit intermediate states
  • stm32f2xx_adc.h/.c
    • Name of the possible values of ADC_DMAAccessMode parameter modified as below:
      ADC_DMAAccessMode_HalfWord        -> ADC_DMAAccessMode_1 
      ADC_DMAAccessMode_TwoHalfWords -> ADC_DMAAccessMode_2
      ADC_DMAAccessMode_TwoBytes       -> ADC_DMAAccessMode_3
    • ADC_MultiModeDMARequestAfterLastTransferCmd(): the 1st parameter ADCx removed 
  • stm32f2xx_cryp.h/.c
    • CRYP_GetITStatus() function coding updated
    • Add 2 functions for CRYP Context swapping:
      ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave, CRYP_KeyInitTypeDef* CRYP_KeyInitStruct);
      void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore);
    • Name of the possible values of CRYP_DMAReq parameter modified as below:
      CRYP_DMAReq_Rx -> CRYP_DMAReq_DataIN
      CRYP_DMAReq_Tx -> CRYP_DMAReq_DataOUT 
  • Add three drivers to provide high level functions for AES, DES and TDES:
    • stm32f2xx_cryp_aes.c: provides high level functions to encrypt and decrypt an input message using AES in ECB/CBC/CTR modes
    • stm32f2xx_cryp_des.c: provides high level functions to encrypt and decrypt an input message using DES in ECB/CBC modes
    • stm32f2xx_cryp_tdes.c: provides high level functions to encrypt and decrypt an input message using TDES in ECB/CBC modes
    • These drivers uses the stm32f2xx_cryp.c/.h driver to access the STM32F2xx CRYP peripheral
  • stm32f2xx_hash.h/.c
    • HASH_GetITStatus() function coding updated
    • Add 2 functions for HASH Context swapping:
      void HASH_ContextSaving(HASH_Context* HASH_ContextSave);
      void HASH_ContextRestoring(HASH_Context* HASH_ContextRestore)
  • Add two drivers to provide high level functions for SHA1 and MD5:
    • stm32f2xx_hash_sha1.c: provides high level functions to compute the HASH SHA1 and HMAC SHA1 Digest of an input message
    • stm32f2xx_hash_md5.c: provides high level functions to compute the HASH MD5 and HMAC MD5 Digest of an input message
    • These drivers uses the stm32f2xx_hash.c/.h driver to access the STM32F2xx HASH peripheral
  • stm32f2xx_rng.h/.c
    • RNG_GetITStatus() function coding updated
    • Add new function:
      void RNG_ClearFlag(uint8_t RNG_FLAG);
  • stm32f2xx_gpio.h
    • Change the name of the parameter GPIO_Mode_AIN by GPIO_Mode_AN
  • stm32f2xx_rtc.h/.c
    • Rename the function RTC_DigitalCalibConfig() to RTC_CoarseCalibConfig() (no change on the parameter name)
    • Rename the function RTC_DigitalCalibCmd() to RTC_CoarseCalibCmd() (no change on the parameter name)
    • Add 3 functions:
      void RTC_DateStructInit(RTC_DateTypeDef* RTC_DateStruct);
      void RTC_TimeStructInit(RTC_TimeTypeDef* RTC_TimeStruct);
      void RTC_AlarmStructInit(RTC_AlarmTypeDef* RTC_AlarmStruct);
       
  • stm32f2xx_flash.h/.c
    • Name of the possible values of OB_BOR parameter modified as below:
      OB_BOR_Level_3    -> OB_BOR_LEVEL3
      OB_BOR_Level_2    -> OB_BOR_LEVEL2
      OB_BOR_Level_1    -> OB_BOR_LEVEL1
      OB_BOR_Level_Off  -> OB_BOR_OFF
    • FLASH_OB_GetBOR() function updated to return the BOR level value as defined in OPTCR register
  • stm32f2xx_i2c.h/.c
    • Add 1 new function:
      • I2C_NACKPositionConfig(): +This function configures the same bit (POS) as I2C_PECPositionConfig() +but is intended to be used in I2C mode while I2C_PECPositionConfig() is +intended to used in SMBUS mode.
  • stm32f2xx_tim.h
    • Change the TIM_DMABurstLength_xBytes definitions to TIM_DMABurstLength_xTansfers
+

License

+

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless +required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See +the License for the specific language governing permissions and +limitations under the License.
+
+
+

For + complete documentation on STM32 + Microcontrollers visit www.st.com/STM32

+
+

+
+ +
+ +

 

+ +
+ + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/misc.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/misc.h new file mode 100644 index 000000000..aec4c361b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/misc.h @@ -0,0 +1,178 @@ +/** + ****************************************************************************** + * @file misc.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the miscellaneous + * firmware library functions (add-on to CMSIS functions). + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MISC_H +#define __MISC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup MISC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief NVIC Init Structure definition + */ + +typedef struct +{ + uint8_t NVIC_IRQChannel; /*!< Specifies the IRQ channel to be enabled or disabled. + This parameter can be an enumerator of @ref IRQn_Type + enumeration (For the complete STM32 Devices IRQ Channels + list, please refer to stm32f2xx.h file) */ + + uint8_t NVIC_IRQChannelPreemptionPriority; /*!< Specifies the pre-emption priority for the IRQ channel + specified in NVIC_IRQChannel. This parameter can be a value + between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table + A lower priority value indicates a higher priority */ + + uint8_t NVIC_IRQChannelSubPriority; /*!< Specifies the subpriority level for the IRQ channel specified + in NVIC_IRQChannel. This parameter can be a value + between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table + A lower priority value indicates a higher priority */ + + FunctionalState NVIC_IRQChannelCmd; /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel + will be enabled or disabled. + This parameter can be set either to ENABLE or DISABLE */ +} NVIC_InitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup MISC_Exported_Constants + * @{ + */ + +/** @defgroup MISC_Vector_Table_Base + * @{ + */ + +#define NVIC_VectTab_RAM ((uint32_t)0x20000000) +#define NVIC_VectTab_FLASH ((uint32_t)0x08000000) +#define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \ + ((VECTTAB) == NVIC_VectTab_FLASH)) +/** + * @} + */ + +/** @defgroup MISC_System_Low_Power + * @{ + */ + +#define NVIC_LP_SEVONPEND ((uint8_t)0x10) +#define NVIC_LP_SLEEPDEEP ((uint8_t)0x04) +#define NVIC_LP_SLEEPONEXIT ((uint8_t)0x02) +#define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \ + ((LP) == NVIC_LP_SLEEPDEEP) || \ + ((LP) == NVIC_LP_SLEEPONEXIT)) +/** + * @} + */ + +/** @defgroup MISC_Preemption_Priority_Group + * @{ + */ + +#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority + 4 bits for subpriority */ +#define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority + 3 bits for subpriority */ +#define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority + 2 bits for subpriority */ +#define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority + 1 bits for subpriority */ +#define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority + 0 bits for subpriority */ + +#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \ + ((GROUP) == NVIC_PriorityGroup_1) || \ + ((GROUP) == NVIC_PriorityGroup_2) || \ + ((GROUP) == NVIC_PriorityGroup_3) || \ + ((GROUP) == NVIC_PriorityGroup_4)) + +#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10) + +#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10) + +#define IS_NVIC_OFFSET(OFFSET) ((OFFSET) < 0x000FFFFF) + +/** + * @} + */ + +/** @defgroup MISC_SysTick_clock_source + * @{ + */ + +#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB) +#define SysTick_CLKSource_HCLK ((uint32_t)0x00000004) +#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \ + ((SOURCE) == SysTick_CLKSource_HCLK_Div8)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); +void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); +void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset); +void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState); +void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource); + +#ifdef __cplusplus +} +#endif + +#endif /* __MISC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_adc.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_adc.h new file mode 100644 index 000000000..e8a52b318 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_adc.h @@ -0,0 +1,649 @@ +/** + ****************************************************************************** + * @file stm32f2xx_adc.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the ADC firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_ADC_H +#define __STM32F2xx_ADC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup ADC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief ADC Init structure definition + */ +typedef struct +{ + uint32_t ADC_Resolution; /*!< Configures the ADC resolution dual mode. + This parameter can be a value of @ref ADC_resolution */ + FunctionalState ADC_ScanConvMode; /*!< Specifies whether the conversion + is performed in Scan (multichannels) + or Single (one channel) mode. + This parameter can be set to ENABLE or DISABLE */ + FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion + is performed in Continuous or Single mode. + This parameter can be set to ENABLE or DISABLE. */ + uint32_t ADC_ExternalTrigConvEdge; /*!< Select the external trigger edge and + enable the trigger of a regular group. + This parameter can be a value of + @ref ADC_external_trigger_edge_for_regular_channels_conversion */ + uint32_t ADC_ExternalTrigConv; /*!< Select the external event used to trigger + the start of conversion of a regular group. + This parameter can be a value of + @ref ADC_extrenal_trigger_sources_for_regular_channels_conversion */ + uint32_t ADC_DataAlign; /*!< Specifies whether the ADC data alignment + is left or right. This parameter can be + a value of @ref ADC_data_align */ + uint8_t ADC_NbrOfConversion; /*!< Specifies the number of ADC conversions + that will be done using the sequencer for + regular channel group. + This parameter must range from 1 to 16. */ +}ADC_InitTypeDef; + +/** + * @brief ADC Common Init structure definition + */ +typedef struct +{ + uint32_t ADC_Mode; /*!< Configures the ADC to operate in + independent or multi mode. + This parameter can be a value of @ref ADC_Common_mode */ + uint32_t ADC_Prescaler; /*!< Select the frequency of the clock + to the ADC. The clock is common for all the ADCs. + This parameter can be a value of @ref ADC_Prescaler */ + uint32_t ADC_DMAAccessMode; /*!< Configures the Direct memory access + mode for multi ADC mode. + This parameter can be a value of + @ref ADC_Direct_memory_access_mode_for_multi_mode */ + uint32_t ADC_TwoSamplingDelay; /*!< Configures the Delay between 2 sampling phases. + This parameter can be a value of + @ref ADC_delay_between_2_sampling_phases */ + +}ADC_CommonInitTypeDef; + + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup ADC_Exported_Constants + * @{ + */ +#define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC1) || \ + ((PERIPH) == ADC2) || \ + ((PERIPH) == ADC3)) + +/** @defgroup ADC_Common_mode + * @{ + */ +#define ADC_Mode_Independent ((uint32_t)0x00000000) +#define ADC_DualMode_RegSimult_InjecSimult ((uint32_t)0x00000001) +#define ADC_DualMode_RegSimult_AlterTrig ((uint32_t)0x00000002) +#define ADC_DualMode_InjecSimult ((uint32_t)0x00000005) +#define ADC_DualMode_RegSimult ((uint32_t)0x00000006) +#define ADC_DualMode_Interl ((uint32_t)0x00000007) +#define ADC_DualMode_AlterTrig ((uint32_t)0x00000009) +#define ADC_TripleMode_RegSimult_InjecSimult ((uint32_t)0x00000011) +#define ADC_TripleMode_RegSimult_AlterTrig ((uint32_t)0x00000012) +#define ADC_TripleMode_InjecSimult ((uint32_t)0x00000015) +#define ADC_TripleMode_RegSimult ((uint32_t)0x00000016) +#define ADC_TripleMode_Interl ((uint32_t)0x00000017) +#define ADC_TripleMode_AlterTrig ((uint32_t)0x00000019) +#define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Independent) || \ + ((MODE) == ADC_DualMode_RegSimult_InjecSimult) || \ + ((MODE) == ADC_DualMode_RegSimult_AlterTrig) || \ + ((MODE) == ADC_DualMode_InjecSimult) || \ + ((MODE) == ADC_DualMode_RegSimult) || \ + ((MODE) == ADC_DualMode_Interl) || \ + ((MODE) == ADC_DualMode_AlterTrig) || \ + ((MODE) == ADC_TripleMode_RegSimult_InjecSimult) || \ + ((MODE) == ADC_TripleMode_RegSimult_AlterTrig) || \ + ((MODE) == ADC_TripleMode_InjecSimult) || \ + ((MODE) == ADC_TripleMode_RegSimult) || \ + ((MODE) == ADC_TripleMode_Interl) || \ + ((MODE) == ADC_TripleMode_AlterTrig)) +/** + * @} + */ + + +/** @defgroup ADC_Prescaler + * @{ + */ +#define ADC_Prescaler_Div2 ((uint32_t)0x00000000) +#define ADC_Prescaler_Div4 ((uint32_t)0x00010000) +#define ADC_Prescaler_Div6 ((uint32_t)0x00020000) +#define ADC_Prescaler_Div8 ((uint32_t)0x00030000) +#define IS_ADC_PRESCALER(PRESCALER) (((PRESCALER) == ADC_Prescaler_Div2) || \ + ((PRESCALER) == ADC_Prescaler_Div4) || \ + ((PRESCALER) == ADC_Prescaler_Div6) || \ + ((PRESCALER) == ADC_Prescaler_Div8)) +/** + * @} + */ + + +/** @defgroup ADC_Direct_memory_access_mode_for_multi_mode + * @{ + */ +#define ADC_DMAAccessMode_Disabled ((uint32_t)0x00000000) /* DMA mode disabled */ +#define ADC_DMAAccessMode_1 ((uint32_t)0x00004000) /* DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)*/ +#define ADC_DMAAccessMode_2 ((uint32_t)0x00008000) /* DMA mode 2 enabled (2 / 3 half-words by pairs - 2&1 then 1&3 then 3&2)*/ +#define ADC_DMAAccessMode_3 ((uint32_t)0x0000C000) /* DMA mode 3 enabled (2 / 3 bytes by pairs - 2&1 then 1&3 then 3&2) */ +#define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAAccessMode_Disabled) || \ + ((MODE) == ADC_DMAAccessMode_1) || \ + ((MODE) == ADC_DMAAccessMode_2) || \ + ((MODE) == ADC_DMAAccessMode_3)) + +/** + * @} + */ + + +/** @defgroup ADC_delay_between_2_sampling_phases + * @{ + */ +#define ADC_TwoSamplingDelay_5Cycles ((uint32_t)0x00000000) +#define ADC_TwoSamplingDelay_6Cycles ((uint32_t)0x00000100) +#define ADC_TwoSamplingDelay_7Cycles ((uint32_t)0x00000200) +#define ADC_TwoSamplingDelay_8Cycles ((uint32_t)0x00000300) +#define ADC_TwoSamplingDelay_9Cycles ((uint32_t)0x00000400) +#define ADC_TwoSamplingDelay_10Cycles ((uint32_t)0x00000500) +#define ADC_TwoSamplingDelay_11Cycles ((uint32_t)0x00000600) +#define ADC_TwoSamplingDelay_12Cycles ((uint32_t)0x00000700) +#define ADC_TwoSamplingDelay_13Cycles ((uint32_t)0x00000800) +#define ADC_TwoSamplingDelay_14Cycles ((uint32_t)0x00000900) +#define ADC_TwoSamplingDelay_15Cycles ((uint32_t)0x00000A00) +#define ADC_TwoSamplingDelay_16Cycles ((uint32_t)0x00000B00) +#define ADC_TwoSamplingDelay_17Cycles ((uint32_t)0x00000C00) +#define ADC_TwoSamplingDelay_18Cycles ((uint32_t)0x00000D00) +#define ADC_TwoSamplingDelay_19Cycles ((uint32_t)0x00000E00) +#define ADC_TwoSamplingDelay_20Cycles ((uint32_t)0x00000F00) +#define IS_ADC_SAMPLING_DELAY(DELAY) (((DELAY) == ADC_TwoSamplingDelay_5Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_6Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_7Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_8Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_9Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_10Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_11Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_12Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_13Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_14Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_15Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_16Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_17Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_18Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_19Cycles) || \ + ((DELAY) == ADC_TwoSamplingDelay_20Cycles)) + +/** + * @} + */ + + +/** @defgroup ADC_resolution + * @{ + */ +#define ADC_Resolution_12b ((uint32_t)0x00000000) +#define ADC_Resolution_10b ((uint32_t)0x01000000) +#define ADC_Resolution_8b ((uint32_t)0x02000000) +#define ADC_Resolution_6b ((uint32_t)0x03000000) +#define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_Resolution_12b) || \ + ((RESOLUTION) == ADC_Resolution_10b) || \ + ((RESOLUTION) == ADC_Resolution_8b) || \ + ((RESOLUTION) == ADC_Resolution_6b)) + +/** + * @} + */ + + +/** @defgroup ADC_external_trigger_edge_for_regular_channels_conversion + * @{ + */ +#define ADC_ExternalTrigConvEdge_None ((uint32_t)0x00000000) +#define ADC_ExternalTrigConvEdge_Rising ((uint32_t)0x10000000) +#define ADC_ExternalTrigConvEdge_Falling ((uint32_t)0x20000000) +#define ADC_ExternalTrigConvEdge_RisingFalling ((uint32_t)0x30000000) +#define IS_ADC_EXT_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigConvEdge_None) || \ + ((EDGE) == ADC_ExternalTrigConvEdge_Rising) || \ + ((EDGE) == ADC_ExternalTrigConvEdge_Falling) || \ + ((EDGE) == ADC_ExternalTrigConvEdge_RisingFalling)) +/** + * @} + */ + + +/** @defgroup ADC_extrenal_trigger_sources_for_regular_channels_conversion + * @{ + */ +#define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000) +#define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x01000000) +#define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x02000000) +#define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x03000000) +#define ADC_ExternalTrigConv_T2_CC3 ((uint32_t)0x04000000) +#define ADC_ExternalTrigConv_T2_CC4 ((uint32_t)0x05000000) +#define ADC_ExternalTrigConv_T2_TRGO ((uint32_t)0x06000000) +#define ADC_ExternalTrigConv_T3_CC1 ((uint32_t)0x07000000) +#define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x08000000) +#define ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x09000000) +#define ADC_ExternalTrigConv_T5_CC1 ((uint32_t)0x0A000000) +#define ADC_ExternalTrigConv_T5_CC2 ((uint32_t)0x0B000000) +#define ADC_ExternalTrigConv_T5_CC3 ((uint32_t)0x0C000000) +#define ADC_ExternalTrigConv_T8_CC1 ((uint32_t)0x0D000000) +#define ADC_ExternalTrigConv_T8_TRGO ((uint32_t)0x0E000000) +#define ADC_ExternalTrigConv_Ext_IT11 ((uint32_t)0x0F000000) +#define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_ExternalTrigConv_T1_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T1_CC2) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T1_CC3) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T2_CC2) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T2_CC3) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T2_CC4) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T2_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T5_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T5_CC2) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T5_CC3) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T8_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T8_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_Ext_IT11)) +/** + * @} + */ + + +/** @defgroup ADC_data_align + * @{ + */ +#define ADC_DataAlign_Right ((uint32_t)0x00000000) +#define ADC_DataAlign_Left ((uint32_t)0x00000800) +#define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DataAlign_Right) || \ + ((ALIGN) == ADC_DataAlign_Left)) +/** + * @} + */ + + +/** @defgroup ADC_channels + * @{ + */ +#define ADC_Channel_0 ((uint8_t)0x00) +#define ADC_Channel_1 ((uint8_t)0x01) +#define ADC_Channel_2 ((uint8_t)0x02) +#define ADC_Channel_3 ((uint8_t)0x03) +#define ADC_Channel_4 ((uint8_t)0x04) +#define ADC_Channel_5 ((uint8_t)0x05) +#define ADC_Channel_6 ((uint8_t)0x06) +#define ADC_Channel_7 ((uint8_t)0x07) +#define ADC_Channel_8 ((uint8_t)0x08) +#define ADC_Channel_9 ((uint8_t)0x09) +#define ADC_Channel_10 ((uint8_t)0x0A) +#define ADC_Channel_11 ((uint8_t)0x0B) +#define ADC_Channel_12 ((uint8_t)0x0C) +#define ADC_Channel_13 ((uint8_t)0x0D) +#define ADC_Channel_14 ((uint8_t)0x0E) +#define ADC_Channel_15 ((uint8_t)0x0F) +#define ADC_Channel_16 ((uint8_t)0x10) +#define ADC_Channel_17 ((uint8_t)0x11) +#define ADC_Channel_18 ((uint8_t)0x12) + +#define ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16) +#define ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17) +#define ADC_Channel_Vbat ((uint8_t)ADC_Channel_18) + +#define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_Channel_0) || \ + ((CHANNEL) == ADC_Channel_1) || \ + ((CHANNEL) == ADC_Channel_2) || \ + ((CHANNEL) == ADC_Channel_3) || \ + ((CHANNEL) == ADC_Channel_4) || \ + ((CHANNEL) == ADC_Channel_5) || \ + ((CHANNEL) == ADC_Channel_6) || \ + ((CHANNEL) == ADC_Channel_7) || \ + ((CHANNEL) == ADC_Channel_8) || \ + ((CHANNEL) == ADC_Channel_9) || \ + ((CHANNEL) == ADC_Channel_10) || \ + ((CHANNEL) == ADC_Channel_11) || \ + ((CHANNEL) == ADC_Channel_12) || \ + ((CHANNEL) == ADC_Channel_13) || \ + ((CHANNEL) == ADC_Channel_14) || \ + ((CHANNEL) == ADC_Channel_15) || \ + ((CHANNEL) == ADC_Channel_16) || \ + ((CHANNEL) == ADC_Channel_17) || \ + ((CHANNEL) == ADC_Channel_18)) +/** + * @} + */ + + +/** @defgroup ADC_sampling_times + * @{ + */ +#define ADC_SampleTime_3Cycles ((uint8_t)0x00) +#define ADC_SampleTime_15Cycles ((uint8_t)0x01) +#define ADC_SampleTime_28Cycles ((uint8_t)0x02) +#define ADC_SampleTime_56Cycles ((uint8_t)0x03) +#define ADC_SampleTime_84Cycles ((uint8_t)0x04) +#define ADC_SampleTime_112Cycles ((uint8_t)0x05) +#define ADC_SampleTime_144Cycles ((uint8_t)0x06) +#define ADC_SampleTime_480Cycles ((uint8_t)0x07) +#define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_3Cycles) || \ + ((TIME) == ADC_SampleTime_15Cycles) || \ + ((TIME) == ADC_SampleTime_28Cycles) || \ + ((TIME) == ADC_SampleTime_56Cycles) || \ + ((TIME) == ADC_SampleTime_84Cycles) || \ + ((TIME) == ADC_SampleTime_112Cycles) || \ + ((TIME) == ADC_SampleTime_144Cycles) || \ + ((TIME) == ADC_SampleTime_480Cycles)) +/** + * @} + */ + + +/** @defgroup ADC_external_trigger_edge_for_injected_channels_conversion + * @{ + */ +#define ADC_ExternalTrigInjecConvEdge_None ((uint32_t)0x00000000) +#define ADC_ExternalTrigInjecConvEdge_Rising ((uint32_t)0x00100000) +#define ADC_ExternalTrigInjecConvEdge_Falling ((uint32_t)0x00200000) +#define ADC_ExternalTrigInjecConvEdge_RisingFalling ((uint32_t)0x00300000) +#define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigInjecConvEdge_None) || \ + ((EDGE) == ADC_ExternalTrigInjecConvEdge_Rising) || \ + ((EDGE) == ADC_ExternalTrigInjecConvEdge_Falling) || \ + ((EDGE) == ADC_ExternalTrigInjecConvEdge_RisingFalling)) + +/** + * @} + */ + + +/** @defgroup ADC_extrenal_trigger_sources_for_injected_channels_conversion + * @{ + */ +#define ADC_ExternalTrigInjecConv_T1_CC4 ((uint32_t)0x00000000) +#define ADC_ExternalTrigInjecConv_T1_TRGO ((uint32_t)0x00010000) +#define ADC_ExternalTrigInjecConv_T2_CC1 ((uint32_t)0x00020000) +#define ADC_ExternalTrigInjecConv_T2_TRGO ((uint32_t)0x00030000) +#define ADC_ExternalTrigInjecConv_T3_CC2 ((uint32_t)0x00040000) +#define ADC_ExternalTrigInjecConv_T3_CC4 ((uint32_t)0x00050000) +#define ADC_ExternalTrigInjecConv_T4_CC1 ((uint32_t)0x00060000) +#define ADC_ExternalTrigInjecConv_T4_CC2 ((uint32_t)0x00070000) +#define ADC_ExternalTrigInjecConv_T4_CC3 ((uint32_t)0x00080000) +#define ADC_ExternalTrigInjecConv_T4_TRGO ((uint32_t)0x00090000) +#define ADC_ExternalTrigInjecConv_T5_CC4 ((uint32_t)0x000A0000) +#define ADC_ExternalTrigInjecConv_T5_TRGO ((uint32_t)0x000B0000) +#define ADC_ExternalTrigInjecConv_T8_CC2 ((uint32_t)0x000C0000) +#define ADC_ExternalTrigInjecConv_T8_CC3 ((uint32_t)0x000D0000) +#define ADC_ExternalTrigInjecConv_T8_CC4 ((uint32_t)0x000E0000) +#define ADC_ExternalTrigInjecConv_Ext_IT15 ((uint32_t)0x000F0000) +#define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_ExternalTrigInjecConv_T1_CC4) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T1_TRGO) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_CC1) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_TRGO) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC2) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC4) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC1) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC2) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC3) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_TRGO) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_CC4) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_TRGO) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC2) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC3) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC4) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_Ext_IT15)) +/** + * @} + */ + + +/** @defgroup ADC_injected_channel_selection + * @{ + */ +#define ADC_InjectedChannel_1 ((uint8_t)0x14) +#define ADC_InjectedChannel_2 ((uint8_t)0x18) +#define ADC_InjectedChannel_3 ((uint8_t)0x1C) +#define ADC_InjectedChannel_4 ((uint8_t)0x20) +#define IS_ADC_INJECTED_CHANNEL(CHANNEL) (((CHANNEL) == ADC_InjectedChannel_1) || \ + ((CHANNEL) == ADC_InjectedChannel_2) || \ + ((CHANNEL) == ADC_InjectedChannel_3) || \ + ((CHANNEL) == ADC_InjectedChannel_4)) +/** + * @} + */ + + +/** @defgroup ADC_analog_watchdog_selection + * @{ + */ +#define ADC_AnalogWatchdog_SingleRegEnable ((uint32_t)0x00800200) +#define ADC_AnalogWatchdog_SingleInjecEnable ((uint32_t)0x00400200) +#define ADC_AnalogWatchdog_SingleRegOrInjecEnable ((uint32_t)0x00C00200) +#define ADC_AnalogWatchdog_AllRegEnable ((uint32_t)0x00800000) +#define ADC_AnalogWatchdog_AllInjecEnable ((uint32_t)0x00400000) +#define ADC_AnalogWatchdog_AllRegAllInjecEnable ((uint32_t)0x00C00000) +#define ADC_AnalogWatchdog_None ((uint32_t)0x00000000) +#define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_AnalogWatchdog_SingleRegEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_SingleInjecEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_SingleRegOrInjecEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_AllRegEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_AllInjecEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_AllRegAllInjecEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_None)) +/** + * @} + */ + + +/** @defgroup ADC_interrupts_definition + * @{ + */ +#define ADC_IT_EOC ((uint16_t)0x0205) +#define ADC_IT_AWD ((uint16_t)0x0106) +#define ADC_IT_JEOC ((uint16_t)0x0407) +#define ADC_IT_OVR ((uint16_t)0x201A) +#define IS_ADC_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD) || \ + ((IT) == ADC_IT_JEOC)|| ((IT) == ADC_IT_OVR)) +/** + * @} + */ + + +/** @defgroup ADC_flags_definition + * @{ + */ +#define ADC_FLAG_AWD ((uint8_t)0x01) +#define ADC_FLAG_EOC ((uint8_t)0x02) +#define ADC_FLAG_JEOC ((uint8_t)0x04) +#define ADC_FLAG_JSTRT ((uint8_t)0x08) +#define ADC_FLAG_STRT ((uint8_t)0x10) +#define ADC_FLAG_OVR ((uint8_t)0x20) + +#define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xC0) == 0x00) && ((FLAG) != 0x00)) +#define IS_ADC_GET_FLAG(FLAG) (((FLAG) == ADC_FLAG_AWD) || \ + ((FLAG) == ADC_FLAG_EOC) || \ + ((FLAG) == ADC_FLAG_JEOC) || \ + ((FLAG)== ADC_FLAG_JSTRT) || \ + ((FLAG) == ADC_FLAG_STRT) || \ + ((FLAG)== ADC_FLAG_OVR)) +/** + * @} + */ + + +/** @defgroup ADC_thresholds + * @{ + */ +#define IS_ADC_THRESHOLD(THRESHOLD) ((THRESHOLD) <= 0xFFF) +/** + * @} + */ + + +/** @defgroup ADC_injected_offset + * @{ + */ +#define IS_ADC_OFFSET(OFFSET) ((OFFSET) <= 0xFFF) +/** + * @} + */ + + +/** @defgroup ADC_injected_length + * @{ + */ +#define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x4)) +/** + * @} + */ + + +/** @defgroup ADC_injected_rank + * @{ + */ +#define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x4)) +/** + * @} + */ + + +/** @defgroup ADC_regular_length + * @{ + */ +#define IS_ADC_REGULAR_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x10)) +/** + * @} + */ + + +/** @defgroup ADC_regular_rank + * @{ + */ +#define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x10)) +/** + * @} + */ + + +/** @defgroup ADC_regular_discontinuous_mode_number + * @{ + */ +#define IS_ADC_REGULAR_DISC_NUMBER(NUMBER) (((NUMBER) >= 0x1) && ((NUMBER) <= 0x8)) +/** + * @} + */ + + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the ADC configuration to the default reset state *****/ +void ADC_DeInit(void); + +/* Initialization and Configuration functions *********************************/ +void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); +void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct); +void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); +void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); +void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState); + +/* Analog Watchdog configuration functions ************************************/ +void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog); +void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold); +void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel); + +/* Temperature Sensor, Vrefint and VBAT management functions ******************/ +void ADC_TempSensorVrefintCmd(FunctionalState NewState); +void ADC_VBATCmd(FunctionalState NewState); + +/* Regular Channels Configuration functions ***********************************/ +void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); +void ADC_SoftwareStartConv(ADC_TypeDef* ADCx); +FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx); +void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number); +void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); +uint32_t ADC_GetMultiModeConversionValue(void); + +/* Regular Channels DMA Configuration functions *******************************/ +void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState); + +/* Injected channels Configuration functions **********************************/ +void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); +void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length); +void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset); +void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv); +void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge); +void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx); +FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx); +void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel); + +/* Interrupts and flags management functions **********************************/ +void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState); +FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); +void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); +ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT); +void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_ADC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_can.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_can.h new file mode 100644 index 000000000..42cfdedf8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_can.h @@ -0,0 +1,644 @@ +/** + ****************************************************************************** + * @file stm32f2xx_can.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the CAN firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CAN_H +#define __STM32F2xx_CAN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup CAN + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +#define IS_CAN_ALL_PERIPH(PERIPH) (((PERIPH) == CAN1) || \ + ((PERIPH) == CAN2)) + +/** + * @brief CAN init structure definition + */ +typedef struct +{ + uint16_t CAN_Prescaler; /*!< Specifies the length of a time quantum. + It ranges from 1 to 1024. */ + + uint8_t CAN_Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ + + uint8_t CAN_SJW; /*!< Specifies the maximum number of time quanta + the CAN hardware is allowed to lengthen or + shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ + + uint8_t CAN_BS1; /*!< Specifies the number of time quanta in Bit + Segment 1. This parameter can be a value of + @ref CAN_time_quantum_in_bit_segment_1 */ + + uint8_t CAN_BS2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ + + FunctionalState CAN_TTCM; /*!< Enable or disable the time triggered communication mode. + This parameter can be set either to ENABLE or DISABLE. */ + + FunctionalState CAN_ABOM; /*!< Enable or disable the automatic bus-off management. + This parameter can be set either to ENABLE or DISABLE. */ + + FunctionalState CAN_AWUM; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set either to ENABLE or DISABLE. */ + + FunctionalState CAN_NART; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set either to ENABLE or DISABLE. */ + + FunctionalState CAN_RFLM; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set either to ENABLE or DISABLE. */ + + FunctionalState CAN_TXFP; /*!< Enable or disable the transmit FIFO priority. + This parameter can be set either to ENABLE or DISABLE. */ +} CAN_InitTypeDef; + +/** + * @brief CAN filter init structure definition + */ +typedef struct +{ + uint16_t CAN_FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit + configuration, first one for a 16-bit configuration). + This parameter can be a value between 0x0000 and 0xFFFF */ + + uint16_t CAN_FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit + configuration, second one for a 16-bit configuration). + This parameter can be a value between 0x0000 and 0xFFFF */ + + uint16_t CAN_FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, + according to the mode (MSBs for a 32-bit configuration, + first one for a 16-bit configuration). + This parameter can be a value between 0x0000 and 0xFFFF */ + + uint16_t CAN_FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, + according to the mode (LSBs for a 32-bit configuration, + second one for a 16-bit configuration). + This parameter can be a value between 0x0000 and 0xFFFF */ + + uint16_t CAN_FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter. + This parameter can be a value of @ref CAN_filter_FIFO */ + + uint8_t CAN_FilterNumber; /*!< Specifies the filter which will be initialized. It ranges from 0 to 13. */ + + uint8_t CAN_FilterMode; /*!< Specifies the filter mode to be initialized. + This parameter can be a value of @ref CAN_filter_mode */ + + uint8_t CAN_FilterScale; /*!< Specifies the filter scale. + This parameter can be a value of @ref CAN_filter_scale */ + + FunctionalState CAN_FilterActivation; /*!< Enable or disable the filter. + This parameter can be set either to ENABLE or DISABLE. */ +} CAN_FilterInitTypeDef; + +/** + * @brief CAN Tx message structure definition + */ +typedef struct +{ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter can be a value between 0 to 0x7FF. */ + + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter can be a value between 0 to 0x1FFFFFFF. */ + + uint8_t IDE; /*!< Specifies the type of identifier for the message that + will be transmitted. This parameter can be a value + of @ref CAN_identifier_type */ + + uint8_t RTR; /*!< Specifies the type of frame for the message that will + be transmitted. This parameter can be a value of + @ref CAN_remote_transmission_request */ + + uint8_t DLC; /*!< Specifies the length of the frame that will be + transmitted. This parameter can be a value between + 0 to 8 */ + + uint8_t Data[8]; /*!< Contains the data to be transmitted. It ranges from 0 + to 0xFF. */ +} CanTxMsg; + +/** + * @brief CAN Rx message structure definition + */ +typedef struct +{ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter can be a value between 0 to 0x7FF. */ + + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter can be a value between 0 to 0x1FFFFFFF. */ + + uint8_t IDE; /*!< Specifies the type of identifier for the message that + will be received. This parameter can be a value of + @ref CAN_identifier_type */ + + uint8_t RTR; /*!< Specifies the type of frame for the received message. + This parameter can be a value of + @ref CAN_remote_transmission_request */ + + uint8_t DLC; /*!< Specifies the length of the frame that will be received. + This parameter can be a value between 0 to 8 */ + + uint8_t Data[8]; /*!< Contains the data to be received. It ranges from 0 to + 0xFF. */ + + uint8_t FMI; /*!< Specifies the index of the filter the message stored in + the mailbox passes through. This parameter can be a + value between 0 to 0xFF */ +} CanRxMsg; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup CAN_Exported_Constants + * @{ + */ + +/** @defgroup CAN_InitStatus + * @{ + */ + +#define CAN_InitStatus_Failed ((uint8_t)0x00) /*!< CAN initialization failed */ +#define CAN_InitStatus_Success ((uint8_t)0x01) /*!< CAN initialization OK */ + + +/* Legacy defines */ +#define CANINITFAILED CAN_InitStatus_Failed +#define CANINITOK CAN_InitStatus_Success +/** + * @} + */ + +/** @defgroup CAN_operating_mode + * @{ + */ + +#define CAN_Mode_Normal ((uint8_t)0x00) /*!< normal mode */ +#define CAN_Mode_LoopBack ((uint8_t)0x01) /*!< loopback mode */ +#define CAN_Mode_Silent ((uint8_t)0x02) /*!< silent mode */ +#define CAN_Mode_Silent_LoopBack ((uint8_t)0x03) /*!< loopback combined with silent mode */ + +#define IS_CAN_MODE(MODE) (((MODE) == CAN_Mode_Normal) || \ + ((MODE) == CAN_Mode_LoopBack)|| \ + ((MODE) == CAN_Mode_Silent) || \ + ((MODE) == CAN_Mode_Silent_LoopBack)) +/** + * @} + */ + + + /** + * @defgroup CAN_operating_mode + * @{ + */ +#define CAN_OperatingMode_Initialization ((uint8_t)0x00) /*!< Initialization mode */ +#define CAN_OperatingMode_Normal ((uint8_t)0x01) /*!< Normal mode */ +#define CAN_OperatingMode_Sleep ((uint8_t)0x02) /*!< sleep mode */ + + +#define IS_CAN_OPERATING_MODE(MODE) (((MODE) == CAN_OperatingMode_Initialization) ||\ + ((MODE) == CAN_OperatingMode_Normal)|| \ + ((MODE) == CAN_OperatingMode_Sleep)) +/** + * @} + */ + +/** + * @defgroup CAN_operating_mode_status + * @{ + */ + +#define CAN_ModeStatus_Failed ((uint8_t)0x00) /*!< CAN entering the specific mode failed */ +#define CAN_ModeStatus_Success ((uint8_t)!CAN_ModeStatus_Failed) /*!< CAN entering the specific mode Succeed */ +/** + * @} + */ + +/** @defgroup CAN_synchronisation_jump_width + * @{ + */ +#define CAN_SJW_1tq ((uint8_t)0x00) /*!< 1 time quantum */ +#define CAN_SJW_2tq ((uint8_t)0x01) /*!< 2 time quantum */ +#define CAN_SJW_3tq ((uint8_t)0x02) /*!< 3 time quantum */ +#define CAN_SJW_4tq ((uint8_t)0x03) /*!< 4 time quantum */ + +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1tq) || ((SJW) == CAN_SJW_2tq)|| \ + ((SJW) == CAN_SJW_3tq) || ((SJW) == CAN_SJW_4tq)) +/** + * @} + */ + +/** @defgroup CAN_time_quantum_in_bit_segment_1 + * @{ + */ +#define CAN_BS1_1tq ((uint8_t)0x00) /*!< 1 time quantum */ +#define CAN_BS1_2tq ((uint8_t)0x01) /*!< 2 time quantum */ +#define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */ +#define CAN_BS1_4tq ((uint8_t)0x03) /*!< 4 time quantum */ +#define CAN_BS1_5tq ((uint8_t)0x04) /*!< 5 time quantum */ +#define CAN_BS1_6tq ((uint8_t)0x05) /*!< 6 time quantum */ +#define CAN_BS1_7tq ((uint8_t)0x06) /*!< 7 time quantum */ +#define CAN_BS1_8tq ((uint8_t)0x07) /*!< 8 time quantum */ +#define CAN_BS1_9tq ((uint8_t)0x08) /*!< 9 time quantum */ +#define CAN_BS1_10tq ((uint8_t)0x09) /*!< 10 time quantum */ +#define CAN_BS1_11tq ((uint8_t)0x0A) /*!< 11 time quantum */ +#define CAN_BS1_12tq ((uint8_t)0x0B) /*!< 12 time quantum */ +#define CAN_BS1_13tq ((uint8_t)0x0C) /*!< 13 time quantum */ +#define CAN_BS1_14tq ((uint8_t)0x0D) /*!< 14 time quantum */ +#define CAN_BS1_15tq ((uint8_t)0x0E) /*!< 15 time quantum */ +#define CAN_BS1_16tq ((uint8_t)0x0F) /*!< 16 time quantum */ + +#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16tq) +/** + * @} + */ + +/** @defgroup CAN_time_quantum_in_bit_segment_2 + * @{ + */ +#define CAN_BS2_1tq ((uint8_t)0x00) /*!< 1 time quantum */ +#define CAN_BS2_2tq ((uint8_t)0x01) /*!< 2 time quantum */ +#define CAN_BS2_3tq ((uint8_t)0x02) /*!< 3 time quantum */ +#define CAN_BS2_4tq ((uint8_t)0x03) /*!< 4 time quantum */ +#define CAN_BS2_5tq ((uint8_t)0x04) /*!< 5 time quantum */ +#define CAN_BS2_6tq ((uint8_t)0x05) /*!< 6 time quantum */ +#define CAN_BS2_7tq ((uint8_t)0x06) /*!< 7 time quantum */ +#define CAN_BS2_8tq ((uint8_t)0x07) /*!< 8 time quantum */ + +#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8tq) +/** + * @} + */ + +/** @defgroup CAN_clock_prescaler + * @{ + */ +#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024)) +/** + * @} + */ + +/** @defgroup CAN_filter_number + * @{ + */ +#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27) +/** + * @} + */ + +/** @defgroup CAN_filter_mode + * @{ + */ +#define CAN_FilterMode_IdMask ((uint8_t)0x00) /*!< identifier/mask mode */ +#define CAN_FilterMode_IdList ((uint8_t)0x01) /*!< identifier list mode */ + +#define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FilterMode_IdMask) || \ + ((MODE) == CAN_FilterMode_IdList)) +/** + * @} + */ + +/** @defgroup CAN_filter_scale + * @{ + */ +#define CAN_FilterScale_16bit ((uint8_t)0x00) /*!< Two 16-bit filters */ +#define CAN_FilterScale_32bit ((uint8_t)0x01) /*!< One 32-bit filter */ + +#define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FilterScale_16bit) || \ + ((SCALE) == CAN_FilterScale_32bit)) +/** + * @} + */ + +/** @defgroup CAN_filter_FIFO + * @{ + */ +#define CAN_Filter_FIFO0 ((uint8_t)0x00) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_Filter_FIFO1 ((uint8_t)0x01) /*!< Filter FIFO 1 assignment for filter x */ +#define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FilterFIFO0) || \ + ((FIFO) == CAN_FilterFIFO1)) + +/* Legacy defines */ +#define CAN_FilterFIFO0 CAN_Filter_FIFO0 +#define CAN_FilterFIFO1 CAN_Filter_FIFO1 +/** + * @} + */ + +/** @defgroup CAN_Start_bank_filter_for_slave_CAN + * @{ + */ +#define IS_CAN_BANKNUMBER(BANKNUMBER) (((BANKNUMBER) >= 1) && ((BANKNUMBER) <= 27)) +/** + * @} + */ + +/** @defgroup CAN_Tx + * @{ + */ +#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02)) +#define IS_CAN_STDID(STDID) ((STDID) <= ((uint32_t)0x7FF)) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= ((uint32_t)0x1FFFFFFF)) +#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08)) +/** + * @} + */ + +/** @defgroup CAN_identifier_type + * @{ + */ +#define CAN_Id_Standard ((uint32_t)0x00000000) /*!< Standard Id */ +#define CAN_Id_Extended ((uint32_t)0x00000004) /*!< Extended Id */ +#define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_Id_Standard) || \ + ((IDTYPE) == CAN_Id_Extended)) + +/* Legacy defines */ +#define CAN_ID_STD CAN_Id_Standard +#define CAN_ID_EXT CAN_Id_Extended +/** + * @} + */ + +/** @defgroup CAN_remote_transmission_request + * @{ + */ +#define CAN_RTR_Data ((uint32_t)0x00000000) /*!< Data frame */ +#define CAN_RTR_Remote ((uint32_t)0x00000002) /*!< Remote frame */ +#define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_Data) || ((RTR) == CAN_RTR_Remote)) + +/* Legacy defines */ +#define CAN_RTR_DATA CAN_RTR_Data +#define CAN_RTR_REMOTE CAN_RTR_Remote +/** + * @} + */ + +/** @defgroup CAN_transmit_constants + * @{ + */ +#define CAN_TxStatus_Failed ((uint8_t)0x00)/*!< CAN transmission failed */ +#define CAN_TxStatus_Ok ((uint8_t)0x01) /*!< CAN transmission succeeded */ +#define CAN_TxStatus_Pending ((uint8_t)0x02) /*!< CAN transmission pending */ +#define CAN_TxStatus_NoMailBox ((uint8_t)0x04) /*!< CAN cell did not provide + an empty mailbox */ +/* Legacy defines */ +#define CANTXFAILED CAN_TxStatus_Failed +#define CANTXOK CAN_TxStatus_Ok +#define CANTXPENDING CAN_TxStatus_Pending +#define CAN_NO_MB CAN_TxStatus_NoMailBox +/** + * @} + */ + +/** @defgroup CAN_receive_FIFO_number_constants + * @{ + */ +#define CAN_FIFO0 ((uint8_t)0x00) /*!< CAN FIFO 0 used to receive */ +#define CAN_FIFO1 ((uint8_t)0x01) /*!< CAN FIFO 1 used to receive */ + +#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) +/** + * @} + */ + +/** @defgroup CAN_sleep_constants + * @{ + */ +#define CAN_Sleep_Failed ((uint8_t)0x00) /*!< CAN did not enter the sleep mode */ +#define CAN_Sleep_Ok ((uint8_t)0x01) /*!< CAN entered the sleep mode */ + +/* Legacy defines */ +#define CANSLEEPFAILED CAN_Sleep_Failed +#define CANSLEEPOK CAN_Sleep_Ok +/** + * @} + */ + +/** @defgroup CAN_wake_up_constants + * @{ + */ +#define CAN_WakeUp_Failed ((uint8_t)0x00) /*!< CAN did not leave the sleep mode */ +#define CAN_WakeUp_Ok ((uint8_t)0x01) /*!< CAN leaved the sleep mode */ + +/* Legacy defines */ +#define CANWAKEUPFAILED CAN_WakeUp_Failed +#define CANWAKEUPOK CAN_WakeUp_Ok +/** + * @} + */ + +/** + * @defgroup CAN_Error_Code_constants + * @{ + */ +#define CAN_ErrorCode_NoErr ((uint8_t)0x00) /*!< No Error */ +#define CAN_ErrorCode_StuffErr ((uint8_t)0x10) /*!< Stuff Error */ +#define CAN_ErrorCode_FormErr ((uint8_t)0x20) /*!< Form Error */ +#define CAN_ErrorCode_ACKErr ((uint8_t)0x30) /*!< Acknowledgment Error */ +#define CAN_ErrorCode_BitRecessiveErr ((uint8_t)0x40) /*!< Bit Recessive Error */ +#define CAN_ErrorCode_BitDominantErr ((uint8_t)0x50) /*!< Bit Dominant Error */ +#define CAN_ErrorCode_CRCErr ((uint8_t)0x60) /*!< CRC Error */ +#define CAN_ErrorCode_SoftwareSetErr ((uint8_t)0x70) /*!< Software Set Error */ +/** + * @} + */ + +/** @defgroup CAN_flags + * @{ + */ +/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() + and CAN_ClearFlag() functions. */ +/* If the flag is 0x1XXXXXXX, it means that it can only be used with + CAN_GetFlagStatus() function. */ + +/* Transmit Flags */ +#define CAN_FLAG_RQCP0 ((uint32_t)0x38000001) /*!< Request MailBox0 Flag */ +#define CAN_FLAG_RQCP1 ((uint32_t)0x38000100) /*!< Request MailBox1 Flag */ +#define CAN_FLAG_RQCP2 ((uint32_t)0x38010000) /*!< Request MailBox2 Flag */ + +/* Receive Flags */ +#define CAN_FLAG_FMP0 ((uint32_t)0x12000003) /*!< FIFO 0 Message Pending Flag */ +#define CAN_FLAG_FF0 ((uint32_t)0x32000008) /*!< FIFO 0 Full Flag */ +#define CAN_FLAG_FOV0 ((uint32_t)0x32000010) /*!< FIFO 0 Overrun Flag */ +#define CAN_FLAG_FMP1 ((uint32_t)0x14000003) /*!< FIFO 1 Message Pending Flag */ +#define CAN_FLAG_FF1 ((uint32_t)0x34000008) /*!< FIFO 1 Full Flag */ +#define CAN_FLAG_FOV1 ((uint32_t)0x34000010) /*!< FIFO 1 Overrun Flag */ + +/* Operating Mode Flags */ +#define CAN_FLAG_WKU ((uint32_t)0x31000008) /*!< Wake up Flag */ +#define CAN_FLAG_SLAK ((uint32_t)0x31000012) /*!< Sleep acknowledge Flag */ +/* @note When SLAK interrupt is disabled (SLKIE=0), no polling on SLAKI is possible. + In this case the SLAK bit can be polled.*/ + +/* Error Flags */ +#define CAN_FLAG_EWG ((uint32_t)0x10F00001) /*!< Error Warning Flag */ +#define CAN_FLAG_EPV ((uint32_t)0x10F00002) /*!< Error Passive Flag */ +#define CAN_FLAG_BOF ((uint32_t)0x10F00004) /*!< Bus-Off Flag */ +#define CAN_FLAG_LEC ((uint32_t)0x30F00070) /*!< Last error code Flag */ + +#define IS_CAN_GET_FLAG(FLAG) (((FLAG) == CAN_FLAG_LEC) || ((FLAG) == CAN_FLAG_BOF) || \ + ((FLAG) == CAN_FLAG_EPV) || ((FLAG) == CAN_FLAG_EWG) || \ + ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_FOV0) || \ + ((FLAG) == CAN_FLAG_FF0) || ((FLAG) == CAN_FLAG_FMP0) || \ + ((FLAG) == CAN_FLAG_FOV1) || ((FLAG) == CAN_FLAG_FF1) || \ + ((FLAG) == CAN_FLAG_FMP1) || ((FLAG) == CAN_FLAG_RQCP2) || \ + ((FLAG) == CAN_FLAG_RQCP1)|| ((FLAG) == CAN_FLAG_RQCP0) || \ + ((FLAG) == CAN_FLAG_SLAK )) + +#define IS_CAN_CLEAR_FLAG(FLAG)(((FLAG) == CAN_FLAG_LEC) || ((FLAG) == CAN_FLAG_RQCP2) || \ + ((FLAG) == CAN_FLAG_RQCP1) || ((FLAG) == CAN_FLAG_RQCP0) || \ + ((FLAG) == CAN_FLAG_FF0) || ((FLAG) == CAN_FLAG_FOV0) ||\ + ((FLAG) == CAN_FLAG_FF1) || ((FLAG) == CAN_FLAG_FOV1) || \ + ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_SLAK)) +/** + * @} + */ + + +/** @defgroup CAN_interrupts + * @{ + */ +#define CAN_IT_TME ((uint32_t)0x00000001) /*!< Transmit mailbox empty Interrupt*/ + +/* Receive Interrupts */ +#define CAN_IT_FMP0 ((uint32_t)0x00000002) /*!< FIFO 0 message pending Interrupt*/ +#define CAN_IT_FF0 ((uint32_t)0x00000004) /*!< FIFO 0 full Interrupt*/ +#define CAN_IT_FOV0 ((uint32_t)0x00000008) /*!< FIFO 0 overrun Interrupt*/ +#define CAN_IT_FMP1 ((uint32_t)0x00000010) /*!< FIFO 1 message pending Interrupt*/ +#define CAN_IT_FF1 ((uint32_t)0x00000020) /*!< FIFO 1 full Interrupt*/ +#define CAN_IT_FOV1 ((uint32_t)0x00000040) /*!< FIFO 1 overrun Interrupt*/ + +/* Operating Mode Interrupts */ +#define CAN_IT_WKU ((uint32_t)0x00010000) /*!< Wake-up Interrupt*/ +#define CAN_IT_SLK ((uint32_t)0x00020000) /*!< Sleep acknowledge Interrupt*/ + +/* Error Interrupts */ +#define CAN_IT_EWG ((uint32_t)0x00000100) /*!< Error warning Interrupt*/ +#define CAN_IT_EPV ((uint32_t)0x00000200) /*!< Error passive Interrupt*/ +#define CAN_IT_BOF ((uint32_t)0x00000400) /*!< Bus-off Interrupt*/ +#define CAN_IT_LEC ((uint32_t)0x00000800) /*!< Last error code Interrupt*/ +#define CAN_IT_ERR ((uint32_t)0x00008000) /*!< Error Interrupt*/ + +/* Flags named as Interrupts : kept only for FW compatibility */ +#define CAN_IT_RQCP0 CAN_IT_TME +#define CAN_IT_RQCP1 CAN_IT_TME +#define CAN_IT_RQCP2 CAN_IT_TME + + +#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ + ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ + ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ + ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ + ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ + ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ + ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) + +#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ + ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ + ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ + ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ + ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ + ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the CAN configuration to the default reset state *****/ +void CAN_DeInit(CAN_TypeDef* CANx); + +/* Initialization and Configuration functions *********************************/ +uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct); +void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct); +void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct); +void CAN_SlaveStartBank(uint8_t CAN_BankNumber); +void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState); +void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState); + +/* CAN Frames Transmission functions ******************************************/ +uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage); +uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox); +void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox); + +/* CAN Frames Reception functions *********************************************/ +void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage); +void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber); +uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber); + +/* Operation modes functions **************************************************/ +uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode); +uint8_t CAN_Sleep(CAN_TypeDef* CANx); +uint8_t CAN_WakeUp(CAN_TypeDef* CANx); + +/* CAN Bus Error management functions *****************************************/ +uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx); +uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx); +uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx); + +/* Interrupts and flags management functions **********************************/ +void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState); +FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG); +void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG); +ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT); +void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_CAN_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_crc.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_crc.h new file mode 100644 index 000000000..725c581f5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_crc.h @@ -0,0 +1,83 @@ +/** + ****************************************************************************** + * @file stm32f2xx_crc.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the CRC firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CRC_H +#define __STM32F2xx_CRC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup CRC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup CRC_Exported_Constants + * @{ + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +void CRC_ResetDR(void); +uint32_t CRC_CalcCRC(uint32_t Data); +uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength); +uint32_t CRC_GetCRC(void); +void CRC_SetIDRegister(uint8_t IDValue); +uint8_t CRC_GetIDRegister(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_CRC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_cryp.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_cryp.h new file mode 100644 index 000000000..893e92586 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_cryp.h @@ -0,0 +1,344 @@ +/** + ****************************************************************************** + * @file stm32f2xx_cryp.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the Cryptographic + * processor(CRYP) firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CRYP_H +#define __STM32F2xx_CRYP_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup CRYP + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief CRYP Init structure definition + */ +typedef struct +{ + uint16_t CRYP_AlgoDir; /*!< Encrypt or Decrypt. This parameter can be a + value of @ref CRYP_Algorithm_Direction */ + uint16_t CRYP_AlgoMode; /*!< TDES-ECB, TDES-CBC, DES-ECB, DES-CBC, AES-ECB, + AES-CBC, AES-CTR, AES-Key. This parameter can be + a value of @ref CRYP_Algorithm_Mode */ + uint16_t CRYP_DataType; /*!< 32-bit data, 16-bit data, bit data or bit-string. + This parameter can be a value of @ref CRYP_Data_Type */ + uint16_t CRYP_KeySize; /*!< Used only in AES mode only : 128, 192 or 256 bit + key length. This parameter can be a value of + @ref CRYP_Key_Size_for_AES_only */ +}CRYP_InitTypeDef; + +/** + * @brief CRYP Key(s) structure definition + */ +typedef struct +{ + uint32_t CRYP_Key0Left; /*!< Key 0 Left */ + uint32_t CRYP_Key0Right; /*!< Key 0 Right */ + uint32_t CRYP_Key1Left; /*!< Key 1 left */ + uint32_t CRYP_Key1Right; /*!< Key 1 Right */ + uint32_t CRYP_Key2Left; /*!< Key 2 left */ + uint32_t CRYP_Key2Right; /*!< Key 2 Right */ + uint32_t CRYP_Key3Left; /*!< Key 3 left */ + uint32_t CRYP_Key3Right; /*!< Key 3 Right */ +}CRYP_KeyInitTypeDef; +/** + * @brief CRYP Initialization Vectors (IV) structure definition + */ +typedef struct +{ + uint32_t CRYP_IV0Left; /*!< Init Vector 0 Left */ + uint32_t CRYP_IV0Right; /*!< Init Vector 0 Right */ + uint32_t CRYP_IV1Left; /*!< Init Vector 1 left */ + uint32_t CRYP_IV1Right; /*!< Init Vector 1 Right */ +}CRYP_IVInitTypeDef; + +/** + * @brief CRYP context swapping structure definition + */ +typedef struct +{ + /*!< Configuration */ + uint32_t CR_bits9to2; + /*!< KEY */ + uint32_t CRYP_IV0LR; + uint32_t CRYP_IV0RR; + uint32_t CRYP_IV1LR; + uint32_t CRYP_IV1RR; + /*!< IV */ + uint32_t CRYP_K0LR; + uint32_t CRYP_K0RR; + uint32_t CRYP_K1LR; + uint32_t CRYP_K1RR; + uint32_t CRYP_K2LR; + uint32_t CRYP_K2RR; + uint32_t CRYP_K3LR; + uint32_t CRYP_K3RR; +}CRYP_Context; + + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup CRYP_Exported_Constants + * @{ + */ + +/** @defgroup CRYP_Algorithm_Direction + * @{ + */ +#define CRYP_AlgoDir_Encrypt ((uint16_t)0x0000) +#define CRYP_AlgoDir_Decrypt ((uint16_t)0x0004) +#define IS_CRYP_ALGODIR(ALGODIR) (((ALGODIR) == CRYP_AlgoDir_Encrypt) || \ + ((ALGODIR) == CRYP_AlgoDir_Decrypt)) + +/** + * @} + */ + +/** @defgroup CRYP_Algorithm_Mode + * @{ + */ + +/*!< TDES Modes */ +#define CRYP_AlgoMode_TDES_ECB ((uint16_t)0x0000) +#define CRYP_AlgoMode_TDES_CBC ((uint16_t)0x0008) + +/*!< DES Modes */ +#define CRYP_AlgoMode_DES_ECB ((uint16_t)0x0010) +#define CRYP_AlgoMode_DES_CBC ((uint16_t)0x0018) + +/*!< AES Modes */ +#define CRYP_AlgoMode_AES_ECB ((uint16_t)0x0020) +#define CRYP_AlgoMode_AES_CBC ((uint16_t)0x0028) +#define CRYP_AlgoMode_AES_CTR ((uint16_t)0x0030) +#define CRYP_AlgoMode_AES_Key ((uint16_t)0x0038) + +#define IS_CRYP_ALGOMODE(ALGOMODE) (((ALGOMODE) == CRYP_AlgoMode_TDES_ECB) || \ + ((ALGOMODE) == CRYP_AlgoMode_TDES_CBC)|| \ + ((ALGOMODE) == CRYP_AlgoMode_DES_ECB)|| \ + ((ALGOMODE) == CRYP_AlgoMode_DES_CBC) || \ + ((ALGOMODE) == CRYP_AlgoMode_AES_ECB) || \ + ((ALGOMODE) == CRYP_AlgoMode_AES_CBC) || \ + ((ALGOMODE) == CRYP_AlgoMode_AES_CTR) || \ + ((ALGOMODE) == CRYP_AlgoMode_AES_Key)) +/** + * @} + */ + +/** @defgroup CRYP_Data_Type + * @{ + */ +#define CRYP_DataType_32b ((uint16_t)0x0000) +#define CRYP_DataType_16b ((uint16_t)0x0040) +#define CRYP_DataType_8b ((uint16_t)0x0080) +#define CRYP_DataType_1b ((uint16_t)0x00C0) +#define IS_CRYP_DATATYPE(DATATYPE) (((DATATYPE) == CRYP_DataType_32b) || \ + ((DATATYPE) == CRYP_DataType_16b)|| \ + ((DATATYPE) == CRYP_DataType_8b)|| \ + ((DATATYPE) == CRYP_DataType_1b)) +/** + * @} + */ + +/** @defgroup CRYP_Key_Size_for_AES_only + * @{ + */ +#define CRYP_KeySize_128b ((uint16_t)0x0000) +#define CRYP_KeySize_192b ((uint16_t)0x0100) +#define CRYP_KeySize_256b ((uint16_t)0x0200) +#define IS_CRYP_KEYSIZE(KEYSIZE) (((KEYSIZE) == CRYP_KeySize_128b)|| \ + ((KEYSIZE) == CRYP_KeySize_192b)|| \ + ((KEYSIZE) == CRYP_KeySize_256b)) +/** + * @} + */ + +/** @defgroup CRYP_flags_definition + * @{ + */ +#define CRYP_FLAG_BUSY ((uint8_t)0x10) /*!< The CRYP core is currently + processing a block of data + or a key preparation (for + AES decryption). */ +#define CRYP_FLAG_IFEM ((uint8_t)0x01) /*!< Input Fifo Empty */ +#define CRYP_FLAG_IFNF ((uint8_t)0x02) /*!< Input Fifo is Not Full */ +#define CRYP_FLAG_INRIS ((uint8_t)0x22) /*!< Raw interrupt pending */ +#define CRYP_FLAG_OFNE ((uint8_t)0x04) /*!< Input Fifo service raw + interrupt status */ +#define CRYP_FLAG_OFFU ((uint8_t)0x08) /*!< Output Fifo is Full */ +#define CRYP_FLAG_OUTRIS ((uint8_t)0x21) /*!< Output Fifo service raw + interrupt status */ + +#define IS_CRYP_GET_FLAG(FLAG) (((FLAG) == CRYP_FLAG_IFEM) || \ + ((FLAG) == CRYP_FLAG_IFNF) || \ + ((FLAG) == CRYP_FLAG_OFNE) || \ + ((FLAG) == CRYP_FLAG_OFFU) || \ + ((FLAG) == CRYP_FLAG_BUSY) || \ + ((FLAG) == CRYP_FLAG_OUTRIS)|| \ + ((FLAG) == CRYP_FLAG_INRIS)) +/** + * @} + */ + +/** @defgroup CRYP_interrupts_definition + * @{ + */ +#define CRYP_IT_INI ((uint8_t)0x01) /*!< IN Fifo Interrupt */ +#define CRYP_IT_OUTI ((uint8_t)0x02) /*!< OUT Fifo Interrupt */ +#define IS_CRYP_CONFIG_IT(IT) ((((IT) & (uint8_t)0xFC) == 0x00) && ((IT) != 0x00)) +#define IS_CRYP_GET_IT(IT) (((IT) == CRYP_IT_INI) || ((IT) == CRYP_IT_OUTI)) + +/** + * @} + */ + +/** @defgroup CRYP_Encryption_Decryption_modes_definition + * @{ + */ +#define MODE_ENCRYPT ((uint8_t)0x01) +#define MODE_DECRYPT ((uint8_t)0x00) + +/** + * @} + */ + +/** @defgroup CRYP_DMA_transfer_requests + * @{ + */ +#define CRYP_DMAReq_DataIN ((uint8_t)0x01) +#define CRYP_DMAReq_DataOUT ((uint8_t)0x02) +#define IS_CRYP_DMAREQ(DMAREQ) ((((DMAREQ) & (uint8_t)0xFC) == 0x00) && ((DMAREQ) != 0x00)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the CRYP configuration to the default reset state ****/ +void CRYP_DeInit(void); + +/* CRYP Initialization and Configuration functions ****************************/ +void CRYP_Init(CRYP_InitTypeDef* CRYP_InitStruct); +void CRYP_StructInit(CRYP_InitTypeDef* CRYP_InitStruct); +void CRYP_KeyInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); +void CRYP_KeyStructInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); +void CRYP_IVInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct); +void CRYP_IVStructInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct); +void CRYP_Cmd(FunctionalState NewState); + +/* CRYP Data processing functions *********************************************/ +void CRYP_DataIn(uint32_t Data); +uint32_t CRYP_DataOut(void); +void CRYP_FIFOFlush(void); + +/* CRYP Context swapping functions ********************************************/ +ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave, + CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); +void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore); + +/* CRYP's DMA interface function **********************************************/ +void CRYP_DMACmd(uint8_t CRYP_DMAReq, FunctionalState NewState); + +/* Interrupts and flags management functions **********************************/ +void CRYP_ITConfig(uint8_t CRYP_IT, FunctionalState NewState); +ITStatus CRYP_GetITStatus(uint8_t CRYP_IT); +FlagStatus CRYP_GetFlagStatus(uint8_t CRYP_FLAG); + +/* High Level AES functions **************************************************/ +ErrorStatus CRYP_AES_ECB(uint8_t Mode, + uint8_t *Key, uint16_t Keysize, + uint8_t *Input, uint32_t Ilength, + uint8_t *Output); + +ErrorStatus CRYP_AES_CBC(uint8_t Mode, + uint8_t InitVectors[16], + uint8_t *Key, uint16_t Keysize, + uint8_t *Input, uint32_t Ilength, + uint8_t *Output); + +ErrorStatus CRYP_AES_CTR(uint8_t Mode, + uint8_t InitVectors[16], + uint8_t *Key, uint16_t Keysize, + uint8_t *Input, uint32_t Ilength, + uint8_t *Output); + +/* High Level TDES functions **************************************************/ +ErrorStatus CRYP_TDES_ECB(uint8_t Mode, + uint8_t Key[24], + uint8_t *Input, uint32_t Ilength, + uint8_t *Output); + +ErrorStatus CRYP_TDES_CBC(uint8_t Mode, + uint8_t Key[24], + uint8_t InitVectors[8], + uint8_t *Input, uint32_t Ilength, + uint8_t *Output); + +/* High Level DES functions **************************************************/ +ErrorStatus CRYP_DES_ECB(uint8_t Mode, + uint8_t Key[8], + uint8_t *Input, uint32_t Ilength, + uint8_t *Output); + +ErrorStatus CRYP_DES_CBC(uint8_t Mode, + uint8_t Key[8], + uint8_t InitVectors[8], + uint8_t *Input,uint32_t Ilength, + uint8_t *Output); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_CRYP_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dac.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dac.h new file mode 100644 index 000000000..f5e1c3355 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dac.h @@ -0,0 +1,304 @@ +/** + ****************************************************************************** + * @file stm32f2xx_dac.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the DAC firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_DAC_H +#define __STM32F2xx_DAC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup DAC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief DAC Init structure definition + */ + +typedef struct +{ + uint32_t DAC_Trigger; /*!< Specifies the external trigger for the selected DAC channel. + This parameter can be a value of @ref DAC_trigger_selection */ + + uint32_t DAC_WaveGeneration; /*!< Specifies whether DAC channel noise waves or triangle waves + are generated, or whether no wave is generated. + This parameter can be a value of @ref DAC_wave_generation */ + + uint32_t DAC_LFSRUnmask_TriangleAmplitude; /*!< Specifies the LFSR mask for noise wave generation or + the maximum amplitude triangle generation for the DAC channel. + This parameter can be a value of @ref DAC_lfsrunmask_triangleamplitude */ + + uint32_t DAC_OutputBuffer; /*!< Specifies whether the DAC channel output buffer is enabled or disabled. + This parameter can be a value of @ref DAC_output_buffer */ +}DAC_InitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup DAC_Exported_Constants + * @{ + */ + +/** @defgroup DAC_trigger_selection + * @{ + */ + +#define DAC_Trigger_None ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC1_DHRxxxx register + has been loaded, and not by external trigger */ +#define DAC_Trigger_T2_TRGO ((uint32_t)0x00000024) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_T4_TRGO ((uint32_t)0x0000002C) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_T5_TRGO ((uint32_t)0x0000001C) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_T6_TRGO ((uint32_t)0x00000004) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_T7_TRGO ((uint32_t)0x00000014) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_T8_TRGO ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel */ + +#define DAC_Trigger_Ext_IT9 ((uint32_t)0x00000034) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_Software ((uint32_t)0x0000003C) /*!< Conversion started by software trigger for DAC channel */ + +#define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_Trigger_None) || \ + ((TRIGGER) == DAC_Trigger_T6_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T8_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T7_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T5_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T2_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T4_TRGO) || \ + ((TRIGGER) == DAC_Trigger_Ext_IT9) || \ + ((TRIGGER) == DAC_Trigger_Software)) + +/** + * @} + */ + +/** @defgroup DAC_wave_generation + * @{ + */ + +#define DAC_WaveGeneration_None ((uint32_t)0x00000000) +#define DAC_WaveGeneration_Noise ((uint32_t)0x00000040) +#define DAC_WaveGeneration_Triangle ((uint32_t)0x00000080) +#define IS_DAC_GENERATE_WAVE(WAVE) (((WAVE) == DAC_WaveGeneration_None) || \ + ((WAVE) == DAC_WaveGeneration_Noise) || \ + ((WAVE) == DAC_WaveGeneration_Triangle)) +/** + * @} + */ + +/** @defgroup DAC_lfsrunmask_triangleamplitude + * @{ + */ + +#define DAC_LFSRUnmask_Bit0 ((uint32_t)0x00000000) /*!< Unmask DAC channel LFSR bit0 for noise wave generation */ +#define DAC_LFSRUnmask_Bits1_0 ((uint32_t)0x00000100) /*!< Unmask DAC channel LFSR bit[1:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits2_0 ((uint32_t)0x00000200) /*!< Unmask DAC channel LFSR bit[2:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits3_0 ((uint32_t)0x00000300) /*!< Unmask DAC channel LFSR bit[3:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits4_0 ((uint32_t)0x00000400) /*!< Unmask DAC channel LFSR bit[4:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits5_0 ((uint32_t)0x00000500) /*!< Unmask DAC channel LFSR bit[5:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits6_0 ((uint32_t)0x00000600) /*!< Unmask DAC channel LFSR bit[6:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits7_0 ((uint32_t)0x00000700) /*!< Unmask DAC channel LFSR bit[7:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits8_0 ((uint32_t)0x00000800) /*!< Unmask DAC channel LFSR bit[8:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits9_0 ((uint32_t)0x00000900) /*!< Unmask DAC channel LFSR bit[9:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits10_0 ((uint32_t)0x00000A00) /*!< Unmask DAC channel LFSR bit[10:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits11_0 ((uint32_t)0x00000B00) /*!< Unmask DAC channel LFSR bit[11:0] for noise wave generation */ +#define DAC_TriangleAmplitude_1 ((uint32_t)0x00000000) /*!< Select max triangle amplitude of 1 */ +#define DAC_TriangleAmplitude_3 ((uint32_t)0x00000100) /*!< Select max triangle amplitude of 3 */ +#define DAC_TriangleAmplitude_7 ((uint32_t)0x00000200) /*!< Select max triangle amplitude of 7 */ +#define DAC_TriangleAmplitude_15 ((uint32_t)0x00000300) /*!< Select max triangle amplitude of 15 */ +#define DAC_TriangleAmplitude_31 ((uint32_t)0x00000400) /*!< Select max triangle amplitude of 31 */ +#define DAC_TriangleAmplitude_63 ((uint32_t)0x00000500) /*!< Select max triangle amplitude of 63 */ +#define DAC_TriangleAmplitude_127 ((uint32_t)0x00000600) /*!< Select max triangle amplitude of 127 */ +#define DAC_TriangleAmplitude_255 ((uint32_t)0x00000700) /*!< Select max triangle amplitude of 255 */ +#define DAC_TriangleAmplitude_511 ((uint32_t)0x00000800) /*!< Select max triangle amplitude of 511 */ +#define DAC_TriangleAmplitude_1023 ((uint32_t)0x00000900) /*!< Select max triangle amplitude of 1023 */ +#define DAC_TriangleAmplitude_2047 ((uint32_t)0x00000A00) /*!< Select max triangle amplitude of 2047 */ +#define DAC_TriangleAmplitude_4095 ((uint32_t)0x00000B00) /*!< Select max triangle amplitude of 4095 */ + +#define IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(VALUE) (((VALUE) == DAC_LFSRUnmask_Bit0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits1_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits2_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits3_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits4_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits5_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits6_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits7_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits8_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits9_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits10_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits11_0) || \ + ((VALUE) == DAC_TriangleAmplitude_1) || \ + ((VALUE) == DAC_TriangleAmplitude_3) || \ + ((VALUE) == DAC_TriangleAmplitude_7) || \ + ((VALUE) == DAC_TriangleAmplitude_15) || \ + ((VALUE) == DAC_TriangleAmplitude_31) || \ + ((VALUE) == DAC_TriangleAmplitude_63) || \ + ((VALUE) == DAC_TriangleAmplitude_127) || \ + ((VALUE) == DAC_TriangleAmplitude_255) || \ + ((VALUE) == DAC_TriangleAmplitude_511) || \ + ((VALUE) == DAC_TriangleAmplitude_1023) || \ + ((VALUE) == DAC_TriangleAmplitude_2047) || \ + ((VALUE) == DAC_TriangleAmplitude_4095)) +/** + * @} + */ + +/** @defgroup DAC_output_buffer + * @{ + */ + +#define DAC_OutputBuffer_Enable ((uint32_t)0x00000000) +#define DAC_OutputBuffer_Disable ((uint32_t)0x00000002) +#define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OutputBuffer_Enable) || \ + ((STATE) == DAC_OutputBuffer_Disable)) +/** + * @} + */ + +/** @defgroup DAC_Channel_selection + * @{ + */ + +#define DAC_Channel_1 ((uint32_t)0x00000000) +#define DAC_Channel_2 ((uint32_t)0x00000010) +#define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_Channel_1) || \ + ((CHANNEL) == DAC_Channel_2)) +/** + * @} + */ + +/** @defgroup DAC_data_alignement + * @{ + */ + +#define DAC_Align_12b_R ((uint32_t)0x00000000) +#define DAC_Align_12b_L ((uint32_t)0x00000004) +#define DAC_Align_8b_R ((uint32_t)0x00000008) +#define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_Align_12b_R) || \ + ((ALIGN) == DAC_Align_12b_L) || \ + ((ALIGN) == DAC_Align_8b_R)) +/** + * @} + */ + +/** @defgroup DAC_wave_generation + * @{ + */ + +#define DAC_Wave_Noise ((uint32_t)0x00000040) +#define DAC_Wave_Triangle ((uint32_t)0x00000080) +#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_Wave_Noise) || \ + ((WAVE) == DAC_Wave_Triangle)) +/** + * @} + */ + +/** @defgroup DAC_data + * @{ + */ + +#define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0) +/** + * @} + */ + +/** @defgroup DAC_interrupts_definition + * @{ + */ +#define DAC_IT_DMAUDR ((uint32_t)0x00002000) +#define IS_DAC_IT(IT) (((IT) == DAC_IT_DMAUDR)) + +/** + * @} + */ + +/** @defgroup DAC_flags_definition + * @{ + */ + +#define DAC_FLAG_DMAUDR ((uint32_t)0x00002000) +#define IS_DAC_FLAG(FLAG) (((FLAG) == DAC_FLAG_DMAUDR)) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the DAC configuration to the default reset state *****/ +void DAC_DeInit(void); + +/* DAC channels configuration: trigger, output buffer, data format functions */ +void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct); +void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct); +void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState); +void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState); +void DAC_DualSoftwareTriggerCmd(FunctionalState NewState); +void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState); +void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data); +void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data); +void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1); +uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel); + +/* DMA management functions ***************************************************/ +void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState); + +/* Interrupts and flags management functions **********************************/ +void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState); +FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG); +void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG); +ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT); +void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_DAC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dbgmcu.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dbgmcu.h new file mode 100644 index 000000000..2a5baa58a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dbgmcu.h @@ -0,0 +1,109 @@ +/** + ****************************************************************************** + * @file stm32f2xx_dbgmcu.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the DBGMCU firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_DBGMCU_H +#define __STM32F2xx_DBGMCU_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup DBGMCU + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup DBGMCU_Exported_Constants + * @{ + */ +#define DBGMCU_SLEEP ((uint32_t)0x00000001) +#define DBGMCU_STOP ((uint32_t)0x00000002) +#define DBGMCU_STANDBY ((uint32_t)0x00000004) +#define IS_DBGMCU_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFFF8) == 0x00) && ((PERIPH) != 0x00)) + +#define DBGMCU_TIM2_STOP ((uint32_t)0x00000001) +#define DBGMCU_TIM3_STOP ((uint32_t)0x00000002) +#define DBGMCU_TIM4_STOP ((uint32_t)0x00000004) +#define DBGMCU_TIM5_STOP ((uint32_t)0x00000008) +#define DBGMCU_TIM6_STOP ((uint32_t)0x00000010) +#define DBGMCU_TIM7_STOP ((uint32_t)0x00000020) +#define DBGMCU_TIM12_STOP ((uint32_t)0x00000040) +#define DBGMCU_TIM13_STOP ((uint32_t)0x00000080) +#define DBGMCU_TIM14_STOP ((uint32_t)0x00000100) +#define DBGMCU_RTC_STOP ((uint32_t)0x00000400) +#define DBGMCU_WWDG_STOP ((uint32_t)0x00000800) +#define DBGMCU_IWDG_STOP ((uint32_t)0x00001000) +#define DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00200000) +#define DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00400000) +#define DBGMCU_I2C3_SMBUS_TIMEOUT ((uint32_t)0x00800000) +#define DBGMCU_CAN1_STOP ((uint32_t)0x02000000) +#define DBGMCU_CAN2_STOP ((uint32_t)0x04000000) +#define IS_DBGMCU_APB1PERIPH(PERIPH) ((((PERIPH) & 0xF91FE200) == 0x00) && ((PERIPH) != 0x00)) + +#define DBGMCU_TIM1_STOP ((uint32_t)0x00000001) +#define DBGMCU_TIM8_STOP ((uint32_t)0x00000002) +#define DBGMCU_TIM9_STOP ((uint32_t)0x00010000) +#define DBGMCU_TIM10_STOP ((uint32_t)0x00020000) +#define DBGMCU_TIM11_STOP ((uint32_t)0x00040000) +#define IS_DBGMCU_APB2PERIPH(PERIPH) ((((PERIPH) & 0xFFF8FFFC) == 0x00) && ((PERIPH) != 0x00)) +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +uint32_t DBGMCU_GetREVID(void); +uint32_t DBGMCU_GetDEVID(void); +void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState); +void DBGMCU_APB1PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState); +void DBGMCU_APB2PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_DBGMCU_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dcmi.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dcmi.h new file mode 100644 index 000000000..eb3212674 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dcmi.h @@ -0,0 +1,312 @@ +/** + ****************************************************************************** + * @file stm32f2xx_dcmi.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the DCMI firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_DCMI_H +#define __STM32F2xx_DCMI_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup DCMI + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** + * @brief DCMI Init structure definition + */ +typedef struct +{ + uint16_t DCMI_CaptureMode; /*!< Specifies the Capture Mode: Continuous or Snapshot. + This parameter can be a value of @ref DCMI_Capture_Mode */ + + uint16_t DCMI_SynchroMode; /*!< Specifies the Synchronization Mode: Hardware or Embedded. + This parameter can be a value of @ref DCMI_Synchronization_Mode */ + + uint16_t DCMI_PCKPolarity; /*!< Specifies the Pixel clock polarity: Falling or Rising. + This parameter can be a value of @ref DCMI_PIXCK_Polarity */ + + uint16_t DCMI_VSPolarity; /*!< Specifies the Vertical synchronization polarity: High or Low. + This parameter can be a value of @ref DCMI_VSYNC_Polarity */ + + uint16_t DCMI_HSPolarity; /*!< Specifies the Horizontal synchronization polarity: High or Low. + This parameter can be a value of @ref DCMI_HSYNC_Polarity */ + + uint16_t DCMI_CaptureRate; /*!< Specifies the frequency of frame capture: All, 1/2 or 1/4. + This parameter can be a value of @ref DCMI_Capture_Rate */ + + uint16_t DCMI_ExtendedDataMode; /*!< Specifies the data width: 8-bit, 10-bit, 12-bit or 14-bit. + This parameter can be a value of @ref DCMI_Extended_Data_Mode */ +} DCMI_InitTypeDef; + +/** + * @brief DCMI CROP Init structure definition + */ +typedef struct +{ + uint16_t DCMI_VerticalStartLine; /*!< Specifies the Vertical start line count from which the image capture + will start. This parameter can be a value between 0x00 and 0x1FFF */ + + uint16_t DCMI_HorizontalOffsetCount; /*!< Specifies the number of pixel clocks to count before starting a capture. + This parameter can be a value between 0x00 and 0x3FFF */ + + uint16_t DCMI_VerticalLineCount; /*!< Specifies the number of lines to be captured from the starting point. + This parameter can be a value between 0x00 and 0x3FFF */ + + uint16_t DCMI_CaptureCount; /*!< Specifies the number of pixel clocks to be captured from the starting + point on the same line. + This parameter can be a value between 0x00 and 0x3FFF */ +} DCMI_CROPInitTypeDef; + +/** + * @brief DCMI Embedded Synchronisation CODE Init structure definition + */ +typedef struct +{ + uint8_t DCMI_FrameStartCode; /*!< Specifies the code of the frame start delimiter. */ + uint8_t DCMI_LineStartCode; /*!< Specifies the code of the line start delimiter. */ + uint8_t DCMI_LineEndCode; /*!< Specifies the code of the line end delimiter. */ + uint8_t DCMI_FrameEndCode; /*!< Specifies the code of the frame end delimiter. */ +} DCMI_CodesInitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup DCMI_Exported_Constants + * @{ + */ + +/** @defgroup DCMI_Capture_Mode + * @{ + */ +#define DCMI_CaptureMode_Continuous ((uint16_t)0x0000) /*!< The received data are transferred continuously + into the destination memory through the DMA */ +#define DCMI_CaptureMode_SnapShot ((uint16_t)0x0002) /*!< Once activated, the interface waits for the start of + frame and then transfers a single frame through the DMA */ +#define IS_DCMI_CAPTURE_MODE(MODE)(((MODE) == DCMI_CaptureMode_Continuous) || \ + ((MODE) == DCMI_CaptureMode_SnapShot)) +/** + * @} + */ + + +/** @defgroup DCMI_Synchronization_Mode + * @{ + */ +#define DCMI_SynchroMode_Hardware ((uint16_t)0x0000) /*!< Hardware synchronization data capture (frame/line start/stop) + is synchronized with the HSYNC/VSYNC signals */ +#define DCMI_SynchroMode_Embedded ((uint16_t)0x0010) /*!< Embedded synchronization data capture is synchronized with + synchronization codes embedded in the data flow */ +#define IS_DCMI_SYNCHRO(MODE)(((MODE) == DCMI_SynchroMode_Hardware) || \ + ((MODE) == DCMI_SynchroMode_Embedded)) +/** + * @} + */ + + +/** @defgroup DCMI_PIXCK_Polarity + * @{ + */ +#define DCMI_PCKPolarity_Falling ((uint16_t)0x0000) /*!< Pixel clock active on Falling edge */ +#define DCMI_PCKPolarity_Rising ((uint16_t)0x0020) /*!< Pixel clock active on Rising edge */ +#define IS_DCMI_PCKPOLARITY(POLARITY)(((POLARITY) == DCMI_PCKPolarity_Falling) || \ + ((POLARITY) == DCMI_PCKPolarity_Rising)) +/** + * @} + */ + + +/** @defgroup DCMI_VSYNC_Polarity + * @{ + */ +#define DCMI_VSPolarity_Low ((uint16_t)0x0000) /*!< Vertical synchronization active Low */ +#define DCMI_VSPolarity_High ((uint16_t)0x0080) /*!< Vertical synchronization active High */ +#define IS_DCMI_VSPOLARITY(POLARITY)(((POLARITY) == DCMI_VSPolarity_Low) || \ + ((POLARITY) == DCMI_VSPolarity_High)) +/** + * @} + */ + + +/** @defgroup DCMI_HSYNC_Polarity + * @{ + */ +#define DCMI_HSPolarity_Low ((uint16_t)0x0000) /*!< Horizontal synchronization active Low */ +#define DCMI_HSPolarity_High ((uint16_t)0x0040) /*!< Horizontal synchronization active High */ +#define IS_DCMI_HSPOLARITY(POLARITY)(((POLARITY) == DCMI_HSPolarity_Low) || \ + ((POLARITY) == DCMI_HSPolarity_High)) +/** + * @} + */ + + +/** @defgroup DCMI_Capture_Rate + * @{ + */ +#define DCMI_CaptureRate_All_Frame ((uint16_t)0x0000) /*!< All frames are captured */ +#define DCMI_CaptureRate_1of2_Frame ((uint16_t)0x0100) /*!< Every alternate frame captured */ +#define DCMI_CaptureRate_1of4_Frame ((uint16_t)0x0200) /*!< One frame in 4 frames captured */ +#define IS_DCMI_CAPTURE_RATE(RATE) (((RATE) == DCMI_CaptureRate_All_Frame) || \ + ((RATE) == DCMI_CaptureRate_1of2_Frame) ||\ + ((RATE) == DCMI_CaptureRate_1of4_Frame)) +/** + * @} + */ + + +/** @defgroup DCMI_Extended_Data_Mode + * @{ + */ +#define DCMI_ExtendedDataMode_8b ((uint16_t)0x0000) /*!< Interface captures 8-bit data on every pixel clock */ +#define DCMI_ExtendedDataMode_10b ((uint16_t)0x0400) /*!< Interface captures 10-bit data on every pixel clock */ +#define DCMI_ExtendedDataMode_12b ((uint16_t)0x0800) /*!< Interface captures 12-bit data on every pixel clock */ +#define DCMI_ExtendedDataMode_14b ((uint16_t)0x0C00) /*!< Interface captures 14-bit data on every pixel clock */ +#define IS_DCMI_EXTENDED_DATA(DATA)(((DATA) == DCMI_ExtendedDataMode_8b) || \ + ((DATA) == DCMI_ExtendedDataMode_10b) ||\ + ((DATA) == DCMI_ExtendedDataMode_12b) ||\ + ((DATA) == DCMI_ExtendedDataMode_14b)) +/** + * @} + */ + + +/** @defgroup DCMI_interrupt_sources + * @{ + */ +#define DCMI_IT_FRAME ((uint16_t)0x0001) +#define DCMI_IT_OVF ((uint16_t)0x0002) +#define DCMI_IT_ERR ((uint16_t)0x0004) +#define DCMI_IT_VSYNC ((uint16_t)0x0008) +#define DCMI_IT_LINE ((uint16_t)0x0010) +#define IS_DCMI_CONFIG_IT(IT) ((((IT) & (uint16_t)0xFFE0) == 0x0000) && ((IT) != 0x0000)) +#define IS_DCMI_GET_IT(IT) (((IT) == DCMI_IT_FRAME) || \ + ((IT) == DCMI_IT_OVF) || \ + ((IT) == DCMI_IT_ERR) || \ + ((IT) == DCMI_IT_VSYNC) || \ + ((IT) == DCMI_IT_LINE)) +/** + * @} + */ + + +/** @defgroup DCMI_Flags + * @{ + */ +/** + * @brief DCMI SR register + */ +#define DCMI_FLAG_HSYNC ((uint16_t)0x2001) +#define DCMI_FLAG_VSYNC ((uint16_t)0x2002) +#define DCMI_FLAG_FNE ((uint16_t)0x2004) +/** + * @brief DCMI RISR register + */ +#define DCMI_FLAG_FRAMERI ((uint16_t)0x0001) +#define DCMI_FLAG_OVFRI ((uint16_t)0x0002) +#define DCMI_FLAG_ERRRI ((uint16_t)0x0004) +#define DCMI_FLAG_VSYNCRI ((uint16_t)0x0008) +#define DCMI_FLAG_LINERI ((uint16_t)0x0010) +/** + * @brief DCMI MISR register + */ +#define DCMI_FLAG_FRAMEMI ((uint16_t)0x1001) +#define DCMI_FLAG_OVFMI ((uint16_t)0x1002) +#define DCMI_FLAG_ERRMI ((uint16_t)0x1004) +#define DCMI_FLAG_VSYNCMI ((uint16_t)0x1008) +#define DCMI_FLAG_LINEMI ((uint16_t)0x1010) +#define IS_DCMI_GET_FLAG(FLAG) (((FLAG) == DCMI_FLAG_HSYNC) || \ + ((FLAG) == DCMI_FLAG_VSYNC) || \ + ((FLAG) == DCMI_FLAG_FNE) || \ + ((FLAG) == DCMI_FLAG_FRAMERI) || \ + ((FLAG) == DCMI_FLAG_OVFRI) || \ + ((FLAG) == DCMI_FLAG_ERRRI) || \ + ((FLAG) == DCMI_FLAG_VSYNCRI) || \ + ((FLAG) == DCMI_FLAG_LINERI) || \ + ((FLAG) == DCMI_FLAG_FRAMEMI) || \ + ((FLAG) == DCMI_FLAG_OVFMI) || \ + ((FLAG) == DCMI_FLAG_ERRMI) || \ + ((FLAG) == DCMI_FLAG_VSYNCMI) || \ + ((FLAG) == DCMI_FLAG_LINEMI)) + +#define IS_DCMI_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFFE0) == 0x0000) && ((FLAG) != 0x0000)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the DCMI configuration to the default reset state ****/ +void DCMI_DeInit(void); + +/* Initialization and Configuration functions *********************************/ +void DCMI_Init(DCMI_InitTypeDef* DCMI_InitStruct); +void DCMI_StructInit(DCMI_InitTypeDef* DCMI_InitStruct); +void DCMI_CROPConfig(DCMI_CROPInitTypeDef* DCMI_CROPInitStruct); +void DCMI_CROPCmd(FunctionalState NewState); +void DCMI_SetEmbeddedSynchroCodes(DCMI_CodesInitTypeDef* DCMI_CodesInitStruct); +void DCMI_JPEGCmd(FunctionalState NewState); + +/* Image capture functions ****************************************************/ +void DCMI_Cmd(FunctionalState NewState); +void DCMI_CaptureCmd(FunctionalState NewState); +uint32_t DCMI_ReadData(void); + +/* Interrupts and flags management functions **********************************/ +void DCMI_ITConfig(uint16_t DCMI_IT, FunctionalState NewState); +FlagStatus DCMI_GetFlagStatus(uint16_t DCMI_FLAG); +void DCMI_ClearFlag(uint16_t DCMI_FLAG); +ITStatus DCMI_GetITStatus(uint16_t DCMI_IT); +void DCMI_ClearITPendingBit(uint16_t DCMI_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_DCMI_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dma.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dma.h new file mode 100644 index 000000000..94c7dff40 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dma.h @@ -0,0 +1,609 @@ +/** + ****************************************************************************** + * @file stm32f2xx_dma.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the DMA firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_DMA_H +#define __STM32F2xx_DMA_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup DMA + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief DMA Init structure definition + */ + +typedef struct +{ + uint32_t DMA_Channel; /*!< Specifies the channel used for the specified stream. + This parameter can be a value of @ref DMA_channel */ + + uint32_t DMA_PeripheralBaseAddr; /*!< Specifies the peripheral base address for DMAy Streamx. */ + + uint32_t DMA_Memory0BaseAddr; /*!< Specifies the memory 0 base address for DMAy Streamx. + This memory is the default memory used when double buffer mode is + not enabled. */ + + uint32_t DMA_DIR; /*!< Specifies if the data will be transferred from memory to peripheral, + from memory to memory or from peripheral to memory. + This parameter can be a value of @ref DMA_data_transfer_direction */ + + uint32_t DMA_BufferSize; /*!< Specifies the buffer size, in data unit, of the specified Stream. + The data unit is equal to the configuration set in DMA_PeripheralDataSize + or DMA_MemoryDataSize members depending in the transfer direction. */ + + uint32_t DMA_PeripheralInc; /*!< Specifies whether the Peripheral address register should be incremented or not. + This parameter can be a value of @ref DMA_peripheral_incremented_mode */ + + uint32_t DMA_MemoryInc; /*!< Specifies whether the memory address register should be incremented or not. + This parameter can be a value of @ref DMA_memory_incremented_mode */ + + uint32_t DMA_PeripheralDataSize; /*!< Specifies the Peripheral data width. + This parameter can be a value of @ref DMA_peripheral_data_size */ + + uint32_t DMA_MemoryDataSize; /*!< Specifies the Memory data width. + This parameter can be a value of @ref DMA_memory_data_size */ + + uint32_t DMA_Mode; /*!< Specifies the operation mode of the DMAy Streamx. + This parameter can be a value of @ref DMA_circular_normal_mode + @note The circular buffer mode cannot be used if the memory-to-memory + data transfer is configured on the selected Stream */ + + uint32_t DMA_Priority; /*!< Specifies the software priority for the DMAy Streamx. + This parameter can be a value of @ref DMA_priority_level */ + + uint32_t DMA_FIFOMode; /*!< Specifies if the FIFO mode or Direct mode will be used for the specified Stream. + This parameter can be a value of @ref DMA_fifo_direct_mode + @note The Direct mode (FIFO mode disabled) cannot be used if the + memory-to-memory data transfer is configured on the selected Stream */ + + uint32_t DMA_FIFOThreshold; /*!< Specifies the FIFO threshold level. + This parameter can be a value of @ref DMA_fifo_threshold_level */ + + uint32_t DMA_MemoryBurst; /*!< Specifies the Burst transfer configuration for the memory transfers. + It specifies the amount of data to be transferred in a single non interruptable + transaction. This parameter can be a value of @ref DMA_memory_burst + @note The burst mode is possible only if the address Increment mode is enabled. */ + + uint32_t DMA_PeripheralBurst; /*!< Specifies the Burst transfer configuration for the peripheral transfers. + It specifies the amount of data to be transferred in a single non interruptable + transaction. This parameter can be a value of @ref DMA_peripheral_burst + @note The burst mode is possible only if the address Increment mode is enabled. */ +}DMA_InitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Constants + * @{ + */ + +#define IS_DMA_ALL_PERIPH(PERIPH) (((PERIPH) == DMA1_Stream0) || \ + ((PERIPH) == DMA1_Stream1) || \ + ((PERIPH) == DMA1_Stream2) || \ + ((PERIPH) == DMA1_Stream3) || \ + ((PERIPH) == DMA1_Stream4) || \ + ((PERIPH) == DMA1_Stream5) || \ + ((PERIPH) == DMA1_Stream6) || \ + ((PERIPH) == DMA1_Stream7) || \ + ((PERIPH) == DMA2_Stream0) || \ + ((PERIPH) == DMA2_Stream1) || \ + ((PERIPH) == DMA2_Stream2) || \ + ((PERIPH) == DMA2_Stream3) || \ + ((PERIPH) == DMA2_Stream4) || \ + ((PERIPH) == DMA2_Stream5) || \ + ((PERIPH) == DMA2_Stream6) || \ + ((PERIPH) == DMA2_Stream7)) + +#define IS_DMA_ALL_CONTROLLER(CONTROLLER) (((CONTROLLER) == DMA1) || \ + ((CONTROLLER) == DMA2)) + +/** @defgroup DMA_channel + * @{ + */ +#define DMA_Channel_0 ((uint32_t)0x00000000) +#define DMA_Channel_1 ((uint32_t)0x02000000) +#define DMA_Channel_2 ((uint32_t)0x04000000) +#define DMA_Channel_3 ((uint32_t)0x06000000) +#define DMA_Channel_4 ((uint32_t)0x08000000) +#define DMA_Channel_5 ((uint32_t)0x0A000000) +#define DMA_Channel_6 ((uint32_t)0x0C000000) +#define DMA_Channel_7 ((uint32_t)0x0E000000) + +#define IS_DMA_CHANNEL(CHANNEL) (((CHANNEL) == DMA_Channel_0) || \ + ((CHANNEL) == DMA_Channel_1) || \ + ((CHANNEL) == DMA_Channel_2) || \ + ((CHANNEL) == DMA_Channel_3) || \ + ((CHANNEL) == DMA_Channel_4) || \ + ((CHANNEL) == DMA_Channel_5) || \ + ((CHANNEL) == DMA_Channel_6) || \ + ((CHANNEL) == DMA_Channel_7)) +/** + * @} + */ + + +/** @defgroup DMA_data_transfer_direction + * @{ + */ +#define DMA_DIR_PeripheralToMemory ((uint32_t)0x00000000) +#define DMA_DIR_MemoryToPeripheral ((uint32_t)0x00000040) +#define DMA_DIR_MemoryToMemory ((uint32_t)0x00000080) + +#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_DIR_PeripheralToMemory ) || \ + ((DIRECTION) == DMA_DIR_MemoryToPeripheral) || \ + ((DIRECTION) == DMA_DIR_MemoryToMemory)) +/** + * @} + */ + + +/** @defgroup DMA_data_buffer_size + * @{ + */ +#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000)) +/** + * @} + */ + + +/** @defgroup DMA_peripheral_incremented_mode + * @{ + */ +#define DMA_PeripheralInc_Enable ((uint32_t)0x00000200) +#define DMA_PeripheralInc_Disable ((uint32_t)0x00000000) + +#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PeripheralInc_Enable) || \ + ((STATE) == DMA_PeripheralInc_Disable)) +/** + * @} + */ + + +/** @defgroup DMA_memory_incremented_mode + * @{ + */ +#define DMA_MemoryInc_Enable ((uint32_t)0x00000400) +#define DMA_MemoryInc_Disable ((uint32_t)0x00000000) + +#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MemoryInc_Enable) || \ + ((STATE) == DMA_MemoryInc_Disable)) +/** + * @} + */ + + +/** @defgroup DMA_peripheral_data_size + * @{ + */ +#define DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000) +#define DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000800) +#define DMA_PeripheralDataSize_Word ((uint32_t)0x00001000) + +#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PeripheralDataSize_Byte) || \ + ((SIZE) == DMA_PeripheralDataSize_HalfWord) || \ + ((SIZE) == DMA_PeripheralDataSize_Word)) +/** + * @} + */ + + +/** @defgroup DMA_memory_data_size + * @{ + */ +#define DMA_MemoryDataSize_Byte ((uint32_t)0x00000000) +#define DMA_MemoryDataSize_HalfWord ((uint32_t)0x00002000) +#define DMA_MemoryDataSize_Word ((uint32_t)0x00004000) + +#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MemoryDataSize_Byte) || \ + ((SIZE) == DMA_MemoryDataSize_HalfWord) || \ + ((SIZE) == DMA_MemoryDataSize_Word )) +/** + * @} + */ + + +/** @defgroup DMA_circular_normal_mode + * @{ + */ +#define DMA_Mode_Normal ((uint32_t)0x00000000) +#define DMA_Mode_Circular ((uint32_t)0x00000100) + +#define IS_DMA_MODE(MODE) (((MODE) == DMA_Mode_Normal ) || \ + ((MODE) == DMA_Mode_Circular)) +/** + * @} + */ + + +/** @defgroup DMA_priority_level + * @{ + */ +#define DMA_Priority_Low ((uint32_t)0x00000000) +#define DMA_Priority_Medium ((uint32_t)0x00010000) +#define DMA_Priority_High ((uint32_t)0x00020000) +#define DMA_Priority_VeryHigh ((uint32_t)0x00030000) + +#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_Priority_Low ) || \ + ((PRIORITY) == DMA_Priority_Medium) || \ + ((PRIORITY) == DMA_Priority_High) || \ + ((PRIORITY) == DMA_Priority_VeryHigh)) +/** + * @} + */ + + +/** @defgroup DMA_fifo_direct_mode + * @{ + */ +#define DMA_FIFOMode_Disable ((uint32_t)0x00000000) +#define DMA_FIFOMode_Enable ((uint32_t)0x00000004) + +#define IS_DMA_FIFO_MODE_STATE(STATE) (((STATE) == DMA_FIFOMode_Disable ) || \ + ((STATE) == DMA_FIFOMode_Enable)) +/** + * @} + */ + + +/** @defgroup DMA_fifo_threshold_level + * @{ + */ +#define DMA_FIFOThreshold_1QuarterFull ((uint32_t)0x00000000) +#define DMA_FIFOThreshold_HalfFull ((uint32_t)0x00000001) +#define DMA_FIFOThreshold_3QuartersFull ((uint32_t)0x00000002) +#define DMA_FIFOThreshold_Full ((uint32_t)0x00000003) + +#define IS_DMA_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == DMA_FIFOThreshold_1QuarterFull ) || \ + ((THRESHOLD) == DMA_FIFOThreshold_HalfFull) || \ + ((THRESHOLD) == DMA_FIFOThreshold_3QuartersFull) || \ + ((THRESHOLD) == DMA_FIFOThreshold_Full)) +/** + * @} + */ + + +/** @defgroup DMA_memory_burst + * @{ + */ +#define DMA_MemoryBurst_Single ((uint32_t)0x00000000) +#define DMA_MemoryBurst_INC4 ((uint32_t)0x00800000) +#define DMA_MemoryBurst_INC8 ((uint32_t)0x01000000) +#define DMA_MemoryBurst_INC16 ((uint32_t)0x01800000) + +#define IS_DMA_MEMORY_BURST(BURST) (((BURST) == DMA_MemoryBurst_Single) || \ + ((BURST) == DMA_MemoryBurst_INC4) || \ + ((BURST) == DMA_MemoryBurst_INC8) || \ + ((BURST) == DMA_MemoryBurst_INC16)) +/** + * @} + */ + + +/** @defgroup DMA_peripheral_burst + * @{ + */ +#define DMA_PeripheralBurst_Single ((uint32_t)0x00000000) +#define DMA_PeripheralBurst_INC4 ((uint32_t)0x00200000) +#define DMA_PeripheralBurst_INC8 ((uint32_t)0x00400000) +#define DMA_PeripheralBurst_INC16 ((uint32_t)0x00600000) + +#define IS_DMA_PERIPHERAL_BURST(BURST) (((BURST) == DMA_PeripheralBurst_Single) || \ + ((BURST) == DMA_PeripheralBurst_INC4) || \ + ((BURST) == DMA_PeripheralBurst_INC8) || \ + ((BURST) == DMA_PeripheralBurst_INC16)) +/** + * @} + */ + + +/** @defgroup DMA_fifo_status_level + * @{ + */ +#define DMA_FIFOStatus_Less1QuarterFull ((uint32_t)0x00000000 << 3) +#define DMA_FIFOStatus_1QuarterFull ((uint32_t)0x00000001 << 3) +#define DMA_FIFOStatus_HalfFull ((uint32_t)0x00000002 << 3) +#define DMA_FIFOStatus_3QuartersFull ((uint32_t)0x00000003 << 3) +#define DMA_FIFOStatus_Empty ((uint32_t)0x00000004 << 3) +#define DMA_FIFOStatus_Full ((uint32_t)0x00000005 << 3) + +#define IS_DMA_FIFO_STATUS(STATUS) (((STATUS) == DMA_FIFOStatus_Less1QuarterFull ) || \ + ((STATUS) == DMA_FIFOStatus_HalfFull) || \ + ((STATUS) == DMA_FIFOStatus_1QuarterFull) || \ + ((STATUS) == DMA_FIFOStatus_3QuartersFull) || \ + ((STATUS) == DMA_FIFOStatus_Full) || \ + ((STATUS) == DMA_FIFOStatus_Empty)) +/** + * @} + */ + +/** @defgroup DMA_flags_definition + * @{ + */ +#define DMA_FLAG_FEIF0 ((uint32_t)0x10800001) +#define DMA_FLAG_DMEIF0 ((uint32_t)0x10800004) +#define DMA_FLAG_TEIF0 ((uint32_t)0x10000008) +#define DMA_FLAG_HTIF0 ((uint32_t)0x10000010) +#define DMA_FLAG_TCIF0 ((uint32_t)0x10000020) +#define DMA_FLAG_FEIF1 ((uint32_t)0x10000040) +#define DMA_FLAG_DMEIF1 ((uint32_t)0x10000100) +#define DMA_FLAG_TEIF1 ((uint32_t)0x10000200) +#define DMA_FLAG_HTIF1 ((uint32_t)0x10000400) +#define DMA_FLAG_TCIF1 ((uint32_t)0x10000800) +#define DMA_FLAG_FEIF2 ((uint32_t)0x10010000) +#define DMA_FLAG_DMEIF2 ((uint32_t)0x10040000) +#define DMA_FLAG_TEIF2 ((uint32_t)0x10080000) +#define DMA_FLAG_HTIF2 ((uint32_t)0x10100000) +#define DMA_FLAG_TCIF2 ((uint32_t)0x10200000) +#define DMA_FLAG_FEIF3 ((uint32_t)0x10400000) +#define DMA_FLAG_DMEIF3 ((uint32_t)0x11000000) +#define DMA_FLAG_TEIF3 ((uint32_t)0x12000000) +#define DMA_FLAG_HTIF3 ((uint32_t)0x14000000) +#define DMA_FLAG_TCIF3 ((uint32_t)0x18000000) +#define DMA_FLAG_FEIF4 ((uint32_t)0x20000001) +#define DMA_FLAG_DMEIF4 ((uint32_t)0x20000004) +#define DMA_FLAG_TEIF4 ((uint32_t)0x20000008) +#define DMA_FLAG_HTIF4 ((uint32_t)0x20000010) +#define DMA_FLAG_TCIF4 ((uint32_t)0x20000020) +#define DMA_FLAG_FEIF5 ((uint32_t)0x20000040) +#define DMA_FLAG_DMEIF5 ((uint32_t)0x20000100) +#define DMA_FLAG_TEIF5 ((uint32_t)0x20000200) +#define DMA_FLAG_HTIF5 ((uint32_t)0x20000400) +#define DMA_FLAG_TCIF5 ((uint32_t)0x20000800) +#define DMA_FLAG_FEIF6 ((uint32_t)0x20010000) +#define DMA_FLAG_DMEIF6 ((uint32_t)0x20040000) +#define DMA_FLAG_TEIF6 ((uint32_t)0x20080000) +#define DMA_FLAG_HTIF6 ((uint32_t)0x20100000) +#define DMA_FLAG_TCIF6 ((uint32_t)0x20200000) +#define DMA_FLAG_FEIF7 ((uint32_t)0x20400000) +#define DMA_FLAG_DMEIF7 ((uint32_t)0x21000000) +#define DMA_FLAG_TEIF7 ((uint32_t)0x22000000) +#define DMA_FLAG_HTIF7 ((uint32_t)0x24000000) +#define DMA_FLAG_TCIF7 ((uint32_t)0x28000000) + +#define IS_DMA_CLEAR_FLAG(FLAG) ((((FLAG) & 0x30000000) != 0x30000000) && (((FLAG) & 0x30000000) != 0) && \ + (((FLAG) & 0xC082F082) == 0x00) && ((FLAG) != 0x00)) + +#define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA_FLAG_TCIF0) || ((FLAG) == DMA_FLAG_HTIF0) || \ + ((FLAG) == DMA_FLAG_TEIF0) || ((FLAG) == DMA_FLAG_DMEIF0) || \ + ((FLAG) == DMA_FLAG_FEIF0) || ((FLAG) == DMA_FLAG_TCIF1) || \ + ((FLAG) == DMA_FLAG_HTIF1) || ((FLAG) == DMA_FLAG_TEIF1) || \ + ((FLAG) == DMA_FLAG_DMEIF1) || ((FLAG) == DMA_FLAG_FEIF1) || \ + ((FLAG) == DMA_FLAG_TCIF2) || ((FLAG) == DMA_FLAG_HTIF2) || \ + ((FLAG) == DMA_FLAG_TEIF2) || ((FLAG) == DMA_FLAG_DMEIF2) || \ + ((FLAG) == DMA_FLAG_FEIF2) || ((FLAG) == DMA_FLAG_TCIF3) || \ + ((FLAG) == DMA_FLAG_HTIF3) || ((FLAG) == DMA_FLAG_TEIF3) || \ + ((FLAG) == DMA_FLAG_DMEIF3) || ((FLAG) == DMA_FLAG_FEIF3) || \ + ((FLAG) == DMA_FLAG_TCIF4) || ((FLAG) == DMA_FLAG_HTIF4) || \ + ((FLAG) == DMA_FLAG_TEIF4) || ((FLAG) == DMA_FLAG_DMEIF4) || \ + ((FLAG) == DMA_FLAG_FEIF4) || ((FLAG) == DMA_FLAG_TCIF5) || \ + ((FLAG) == DMA_FLAG_HTIF5) || ((FLAG) == DMA_FLAG_TEIF5) || \ + ((FLAG) == DMA_FLAG_DMEIF5) || ((FLAG) == DMA_FLAG_FEIF5) || \ + ((FLAG) == DMA_FLAG_TCIF6) || ((FLAG) == DMA_FLAG_HTIF6) || \ + ((FLAG) == DMA_FLAG_TEIF6) || ((FLAG) == DMA_FLAG_DMEIF6) || \ + ((FLAG) == DMA_FLAG_FEIF6) || ((FLAG) == DMA_FLAG_TCIF7) || \ + ((FLAG) == DMA_FLAG_HTIF7) || ((FLAG) == DMA_FLAG_TEIF7) || \ + ((FLAG) == DMA_FLAG_DMEIF7) || ((FLAG) == DMA_FLAG_FEIF7)) +/** + * @} + */ + + +/** @defgroup DMA_interrupt_enable_definitions + * @{ + */ +#define DMA_IT_TC ((uint32_t)0x00000010) +#define DMA_IT_HT ((uint32_t)0x00000008) +#define DMA_IT_TE ((uint32_t)0x00000004) +#define DMA_IT_DME ((uint32_t)0x00000002) +#define DMA_IT_FE ((uint32_t)0x00000080) + +#define IS_DMA_CONFIG_IT(IT) ((((IT) & 0xFFFFFF61) == 0x00) && ((IT) != 0x00)) +/** + * @} + */ + + +/** @defgroup DMA_interrupts_definitions + * @{ + */ +#define DMA_IT_FEIF0 ((uint32_t)0x90000001) +#define DMA_IT_DMEIF0 ((uint32_t)0x10001004) +#define DMA_IT_TEIF0 ((uint32_t)0x10002008) +#define DMA_IT_HTIF0 ((uint32_t)0x10004010) +#define DMA_IT_TCIF0 ((uint32_t)0x10008020) +#define DMA_IT_FEIF1 ((uint32_t)0x90000040) +#define DMA_IT_DMEIF1 ((uint32_t)0x10001100) +#define DMA_IT_TEIF1 ((uint32_t)0x10002200) +#define DMA_IT_HTIF1 ((uint32_t)0x10004400) +#define DMA_IT_TCIF1 ((uint32_t)0x10008800) +#define DMA_IT_FEIF2 ((uint32_t)0x90010000) +#define DMA_IT_DMEIF2 ((uint32_t)0x10041000) +#define DMA_IT_TEIF2 ((uint32_t)0x10082000) +#define DMA_IT_HTIF2 ((uint32_t)0x10104000) +#define DMA_IT_TCIF2 ((uint32_t)0x10208000) +#define DMA_IT_FEIF3 ((uint32_t)0x90400000) +#define DMA_IT_DMEIF3 ((uint32_t)0x11001000) +#define DMA_IT_TEIF3 ((uint32_t)0x12002000) +#define DMA_IT_HTIF3 ((uint32_t)0x14004000) +#define DMA_IT_TCIF3 ((uint32_t)0x18008000) +#define DMA_IT_FEIF4 ((uint32_t)0xA0000001) +#define DMA_IT_DMEIF4 ((uint32_t)0x20001004) +#define DMA_IT_TEIF4 ((uint32_t)0x20002008) +#define DMA_IT_HTIF4 ((uint32_t)0x20004010) +#define DMA_IT_TCIF4 ((uint32_t)0x20008020) +#define DMA_IT_FEIF5 ((uint32_t)0xA0000040) +#define DMA_IT_DMEIF5 ((uint32_t)0x20001100) +#define DMA_IT_TEIF5 ((uint32_t)0x20002200) +#define DMA_IT_HTIF5 ((uint32_t)0x20004400) +#define DMA_IT_TCIF5 ((uint32_t)0x20008800) +#define DMA_IT_FEIF6 ((uint32_t)0xA0010000) +#define DMA_IT_DMEIF6 ((uint32_t)0x20041000) +#define DMA_IT_TEIF6 ((uint32_t)0x20082000) +#define DMA_IT_HTIF6 ((uint32_t)0x20104000) +#define DMA_IT_TCIF6 ((uint32_t)0x20208000) +#define DMA_IT_FEIF7 ((uint32_t)0xA0400000) +#define DMA_IT_DMEIF7 ((uint32_t)0x21001000) +#define DMA_IT_TEIF7 ((uint32_t)0x22002000) +#define DMA_IT_HTIF7 ((uint32_t)0x24004000) +#define DMA_IT_TCIF7 ((uint32_t)0x28008000) + +#define IS_DMA_CLEAR_IT(IT) ((((IT) & 0x30000000) != 0x30000000) && \ + (((IT) & 0x30000000) != 0) && ((IT) != 0x00) && \ + (((IT) & 0x40820082) == 0x00)) + +#define IS_DMA_GET_IT(IT) (((IT) == DMA_IT_TCIF0) || ((IT) == DMA_IT_HTIF0) || \ + ((IT) == DMA_IT_TEIF0) || ((IT) == DMA_IT_DMEIF0) || \ + ((IT) == DMA_IT_FEIF0) || ((IT) == DMA_IT_TCIF1) || \ + ((IT) == DMA_IT_HTIF1) || ((IT) == DMA_IT_TEIF1) || \ + ((IT) == DMA_IT_DMEIF1)|| ((IT) == DMA_IT_FEIF1) || \ + ((IT) == DMA_IT_TCIF2) || ((IT) == DMA_IT_HTIF2) || \ + ((IT) == DMA_IT_TEIF2) || ((IT) == DMA_IT_DMEIF2) || \ + ((IT) == DMA_IT_FEIF2) || ((IT) == DMA_IT_TCIF3) || \ + ((IT) == DMA_IT_HTIF3) || ((IT) == DMA_IT_TEIF3) || \ + ((IT) == DMA_IT_DMEIF3)|| ((IT) == DMA_IT_FEIF3) || \ + ((IT) == DMA_IT_TCIF4) || ((IT) == DMA_IT_HTIF4) || \ + ((IT) == DMA_IT_TEIF4) || ((IT) == DMA_IT_DMEIF4) || \ + ((IT) == DMA_IT_FEIF4) || ((IT) == DMA_IT_TCIF5) || \ + ((IT) == DMA_IT_HTIF5) || ((IT) == DMA_IT_TEIF5) || \ + ((IT) == DMA_IT_DMEIF5)|| ((IT) == DMA_IT_FEIF5) || \ + ((IT) == DMA_IT_TCIF6) || ((IT) == DMA_IT_HTIF6) || \ + ((IT) == DMA_IT_TEIF6) || ((IT) == DMA_IT_DMEIF6) || \ + ((IT) == DMA_IT_FEIF6) || ((IT) == DMA_IT_TCIF7) || \ + ((IT) == DMA_IT_HTIF7) || ((IT) == DMA_IT_TEIF7) || \ + ((IT) == DMA_IT_DMEIF7)|| ((IT) == DMA_IT_FEIF7)) +/** + * @} + */ + + +/** @defgroup DMA_peripheral_increment_offset + * @{ + */ +#define DMA_PINCOS_Psize ((uint32_t)0x00000000) +#define DMA_PINCOS_WordAligned ((uint32_t)0x00008000) + +#define IS_DMA_PINCOS_SIZE(SIZE) (((SIZE) == DMA_PINCOS_Psize) || \ + ((SIZE) == DMA_PINCOS_WordAligned)) +/** + * @} + */ + + +/** @defgroup DMA_flow_controller_definitions + * @{ + */ +#define DMA_FlowCtrl_Memory ((uint32_t)0x00000000) +#define DMA_FlowCtrl_Peripheral ((uint32_t)0x00000020) + +#define IS_DMA_FLOW_CTRL(CTRL) (((CTRL) == DMA_FlowCtrl_Memory) || \ + ((CTRL) == DMA_FlowCtrl_Peripheral)) +/** + * @} + */ + + +/** @defgroup DMA_memory_targets_definitions + * @{ + */ +#define DMA_Memory_0 ((uint32_t)0x00000000) +#define DMA_Memory_1 ((uint32_t)0x00080000) + +#define IS_DMA_CURRENT_MEM(MEM) (((MEM) == DMA_Memory_0) || ((MEM) == DMA_Memory_1)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the DMA configuration to the default reset state *****/ +void DMA_DeInit(DMA_Stream_TypeDef* DMAy_Streamx); + +/* Initialization and Configuration functions *********************************/ +void DMA_Init(DMA_Stream_TypeDef* DMAy_Streamx, DMA_InitTypeDef* DMA_InitStruct); +void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct); +void DMA_Cmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); + +/* Optional Configuration functions *******************************************/ +void DMA_PeriphIncOffsetSizeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_Pincos); +void DMA_FlowControllerConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FlowCtrl); + +/* Data Counter functions *****************************************************/ +void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter); +uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx); + +/* Double Buffer mode functions ***********************************************/ +void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t Memory1BaseAddr, + uint32_t DMA_CurrentMemory); +void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); +void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t MemoryBaseAddr, + uint32_t DMA_MemoryTarget); +uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx); + +/* Interrupts and flags management functions **********************************/ +FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx); +uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx); +FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); +void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); +void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState); +ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); +void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_DMA_H */ + +/** + * @} + */ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_exti.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_exti.h new file mode 100644 index 000000000..186e87f08 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_exti.h @@ -0,0 +1,183 @@ +/** + ****************************************************************************** + * @file stm32f2xx_exti.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the EXTI firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_EXTI_H +#define __STM32F2xx_EXTI_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup EXTI + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief EXTI mode enumeration + */ + +typedef enum +{ + EXTI_Mode_Interrupt = 0x00, + EXTI_Mode_Event = 0x04 +}EXTIMode_TypeDef; + +#define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Interrupt) || ((MODE) == EXTI_Mode_Event)) + +/** + * @brief EXTI Trigger enumeration + */ + +typedef enum +{ + EXTI_Trigger_Rising = 0x08, + EXTI_Trigger_Falling = 0x0C, + EXTI_Trigger_Rising_Falling = 0x10 +}EXTITrigger_TypeDef; + +#define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \ + ((TRIGGER) == EXTI_Trigger_Falling) || \ + ((TRIGGER) == EXTI_Trigger_Rising_Falling)) +/** + * @brief EXTI Init Structure definition + */ + +typedef struct +{ + uint32_t EXTI_Line; /*!< Specifies the EXTI lines to be enabled or disabled. + This parameter can be any combination value of @ref EXTI_Lines */ + + EXTIMode_TypeDef EXTI_Mode; /*!< Specifies the mode for the EXTI lines. + This parameter can be a value of @ref EXTIMode_TypeDef */ + + EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines. + This parameter can be a value of @ref EXTITrigger_TypeDef */ + + FunctionalState EXTI_LineCmd; /*!< Specifies the new state of the selected EXTI lines. + This parameter can be set either to ENABLE or DISABLE */ +}EXTI_InitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup EXTI_Exported_Constants + * @{ + */ + +/** @defgroup EXTI_Lines + * @{ + */ + +#define EXTI_Line0 ((uint32_t)0x00001) /*!< External interrupt line 0 */ +#define EXTI_Line1 ((uint32_t)0x00002) /*!< External interrupt line 1 */ +#define EXTI_Line2 ((uint32_t)0x00004) /*!< External interrupt line 2 */ +#define EXTI_Line3 ((uint32_t)0x00008) /*!< External interrupt line 3 */ +#define EXTI_Line4 ((uint32_t)0x00010) /*!< External interrupt line 4 */ +#define EXTI_Line5 ((uint32_t)0x00020) /*!< External interrupt line 5 */ +#define EXTI_Line6 ((uint32_t)0x00040) /*!< External interrupt line 6 */ +#define EXTI_Line7 ((uint32_t)0x00080) /*!< External interrupt line 7 */ +#define EXTI_Line8 ((uint32_t)0x00100) /*!< External interrupt line 8 */ +#define EXTI_Line9 ((uint32_t)0x00200) /*!< External interrupt line 9 */ +#define EXTI_Line10 ((uint32_t)0x00400) /*!< External interrupt line 10 */ +#define EXTI_Line11 ((uint32_t)0x00800) /*!< External interrupt line 11 */ +#define EXTI_Line12 ((uint32_t)0x01000) /*!< External interrupt line 12 */ +#define EXTI_Line13 ((uint32_t)0x02000) /*!< External interrupt line 13 */ +#define EXTI_Line14 ((uint32_t)0x04000) /*!< External interrupt line 14 */ +#define EXTI_Line15 ((uint32_t)0x08000) /*!< External interrupt line 15 */ +#define EXTI_Line16 ((uint32_t)0x10000) /*!< External interrupt line 16 Connected to the PVD Output */ +#define EXTI_Line17 ((uint32_t)0x20000) /*!< External interrupt line 17 Connected to the RTC Alarm event */ +#define EXTI_Line18 ((uint32_t)0x40000) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */ +#define EXTI_Line19 ((uint32_t)0x80000) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */ +#define EXTI_Line20 ((uint32_t)0x00100000) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */ +#define EXTI_Line21 ((uint32_t)0x00200000) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */ +#define EXTI_Line22 ((uint32_t)0x00400000) /*!< External interrupt line 22 Connected to the RTC Wakeup event */ + +#define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFF800000) == 0x00) && ((LINE) != (uint16_t)0x00)) + +#define IS_GET_EXTI_LINE(LINE) (((LINE) == EXTI_Line0) || ((LINE) == EXTI_Line1) || \ + ((LINE) == EXTI_Line2) || ((LINE) == EXTI_Line3) || \ + ((LINE) == EXTI_Line4) || ((LINE) == EXTI_Line5) || \ + ((LINE) == EXTI_Line6) || ((LINE) == EXTI_Line7) || \ + ((LINE) == EXTI_Line8) || ((LINE) == EXTI_Line9) || \ + ((LINE) == EXTI_Line10) || ((LINE) == EXTI_Line11) || \ + ((LINE) == EXTI_Line12) || ((LINE) == EXTI_Line13) || \ + ((LINE) == EXTI_Line14) || ((LINE) == EXTI_Line15) || \ + ((LINE) == EXTI_Line16) || ((LINE) == EXTI_Line17) || \ + ((LINE) == EXTI_Line18) || ((LINE) == EXTI_Line19) || \ + ((LINE) == EXTI_Line20) || ((LINE) == EXTI_Line21) ||\ + ((LINE) == EXTI_Line22)) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the EXTI configuration to the default reset state *****/ +void EXTI_DeInit(void); + +/* Initialization and Configuration functions *********************************/ +void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); +void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct); +void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); + +/* Interrupts and flags management functions **********************************/ +FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line); +void EXTI_ClearFlag(uint32_t EXTI_Line); +ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); +void EXTI_ClearITPendingBit(uint32_t EXTI_Line); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_EXTI_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_flash.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_flash.h new file mode 100644 index 000000000..8ea12def4 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_flash.h @@ -0,0 +1,340 @@ +/** + ****************************************************************************** + * @file stm32f2xx_flash.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the FLASH + * firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_FLASH_H +#define __STM32F2xx_FLASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup FLASH + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** + * @brief FLASH Status + */ +typedef enum +{ + FLASH_BUSY = 1, + FLASH_ERROR_PGS, + FLASH_ERROR_PGP, + FLASH_ERROR_PGA, + FLASH_ERROR_WRP, + FLASH_ERROR_PROGRAM, + FLASH_ERROR_OPERATION, + FLASH_COMPLETE +}FLASH_Status; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup FLASH_Exported_Constants + * @{ + */ + +/** @defgroup Flash_Latency + * @{ + */ +#define FLASH_Latency_0 ((uint8_t)0x0000) /*!< FLASH Zero Latency cycle */ +#define FLASH_Latency_1 ((uint8_t)0x0001) /*!< FLASH One Latency cycle */ +#define FLASH_Latency_2 ((uint8_t)0x0002) /*!< FLASH Two Latency cycles */ +#define FLASH_Latency_3 ((uint8_t)0x0003) /*!< FLASH Three Latency cycles */ +#define FLASH_Latency_4 ((uint8_t)0x0004) /*!< FLASH Four Latency cycles */ +#define FLASH_Latency_5 ((uint8_t)0x0005) /*!< FLASH Five Latency cycles */ +#define FLASH_Latency_6 ((uint8_t)0x0006) /*!< FLASH Six Latency cycles */ +#define FLASH_Latency_7 ((uint8_t)0x0007) /*!< FLASH Seven Latency cycles */ + +#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_Latency_0) || \ + ((LATENCY) == FLASH_Latency_1) || \ + ((LATENCY) == FLASH_Latency_2) || \ + ((LATENCY) == FLASH_Latency_3) || \ + ((LATENCY) == FLASH_Latency_4) || \ + ((LATENCY) == FLASH_Latency_5) || \ + ((LATENCY) == FLASH_Latency_6) || \ + ((LATENCY) == FLASH_Latency_7)) +/** + * @} + */ + +/** @defgroup FLASH_Voltage_Range + * @{ + */ +#define VoltageRange_1 ((uint8_t)0x00) /*!< Device operating range: 1.8V to 2.1V */ +#define VoltageRange_2 ((uint8_t)0x01) /*!= 0x08000000) && ((ADDRESS) < 0x080FFFFF)) ||\ + (((ADDRESS) >= 0x1FFF7800) && ((ADDRESS) < 0x1FFF7A0F))) +/** + * @} + */ + +/** @defgroup Option_Bytes_Write_Protection + * @{ + */ +#define OB_WRP_Sector_0 ((uint32_t)0x00000001) /*!< Write protection of Sector0 */ +#define OB_WRP_Sector_1 ((uint32_t)0x00000002) /*!< Write protection of Sector1 */ +#define OB_WRP_Sector_2 ((uint32_t)0x00000004) /*!< Write protection of Sector2 */ +#define OB_WRP_Sector_3 ((uint32_t)0x00000008) /*!< Write protection of Sector3 */ +#define OB_WRP_Sector_4 ((uint32_t)0x00000010) /*!< Write protection of Sector4 */ +#define OB_WRP_Sector_5 ((uint32_t)0x00000020) /*!< Write protection of Sector5 */ +#define OB_WRP_Sector_6 ((uint32_t)0x00000040) /*!< Write protection of Sector6 */ +#define OB_WRP_Sector_7 ((uint32_t)0x00000080) /*!< Write protection of Sector7 */ +#define OB_WRP_Sector_8 ((uint32_t)0x00000100) /*!< Write protection of Sector8 */ +#define OB_WRP_Sector_9 ((uint32_t)0x00000200) /*!< Write protection of Sector9 */ +#define OB_WRP_Sector_10 ((uint32_t)0x00000400) /*!< Write protection of Sector10 */ +#define OB_WRP_Sector_11 ((uint32_t)0x00000800) /*!< Write protection of Sector11 */ +#define OB_WRP_Sector_All ((uint32_t)0x00000FFF) /*!< Write protection of all Sectors */ + +#define IS_OB_WRP(SECTOR)((((SECTOR) & (uint32_t)0xFFFFF000) == 0x00000000) && ((SECTOR) != 0x00000000)) +/** + * @} + */ + +/** @defgroup FLASH_Option_Bytes_Read_Protection + * @{ + */ +#define OB_RDP_Level_0 ((uint8_t)0xAA) +#define OB_RDP_Level_1 ((uint8_t)0x55) +/*#define OB_RDP_Level_2 ((uint8_t)0xCC)*/ /*!< Warning: When enabling read protection level 2 + it's no more possible to go back to level 1 or 0 */ +#define IS_OB_RDP(LEVEL) (((LEVEL) == OB_RDP_Level_0)||\ + ((LEVEL) == OB_RDP_Level_1))/*||\ + ((LEVEL) == OB_RDP_Level_2))*/ +/** + * @} + */ + +/** @defgroup FLASH_Option_Bytes_IWatchdog + * @{ + */ +#define OB_IWDG_SW ((uint8_t)0x20) /*!< Software IWDG selected */ +#define OB_IWDG_HW ((uint8_t)0x00) /*!< Hardware IWDG selected */ +#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) +/** + * @} + */ + +/** @defgroup FLASH_Option_Bytes_nRST_STOP + * @{ + */ +#define OB_STOP_NoRST ((uint8_t)0x40) /*!< No reset generated when entering in STOP */ +#define OB_STOP_RST ((uint8_t)0x00) /*!< Reset generated when entering in STOP */ +#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NoRST) || ((SOURCE) == OB_STOP_RST)) +/** + * @} + */ + + +/** @defgroup FLASH_Option_Bytes_nRST_STDBY + * @{ + */ +#define OB_STDBY_NoRST ((uint8_t)0x80) /*!< No reset generated when entering in STANDBY */ +#define OB_STDBY_RST ((uint8_t)0x00) /*!< Reset generated when entering in STANDBY */ +#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NoRST) || ((SOURCE) == OB_STDBY_RST)) +/** + * @} + */ + +/** @defgroup FLASH_BOR_Reset_Level + * @{ + */ +#define OB_BOR_LEVEL3 ((uint8_t)0x00) /*!< Supply voltage ranges from 2.70 to 3.60 V */ +#define OB_BOR_LEVEL2 ((uint8_t)0x04) /*!< Supply voltage ranges from 2.40 to 2.70 V */ +#define OB_BOR_LEVEL1 ((uint8_t)0x08) /*!< Supply voltage ranges from 2.10 to 2.40 V */ +#define OB_BOR_OFF ((uint8_t)0x0C) /*!< Supply voltage ranges from 1.62 to 2.10 V */ +#define IS_OB_BOR(LEVEL) (((LEVEL) == OB_BOR_LEVEL1) || ((LEVEL) == OB_BOR_LEVEL2) ||\ + ((LEVEL) == OB_BOR_LEVEL3) || ((LEVEL) == OB_BOR_OFF)) +/** + * @} + */ + +/** @defgroup FLASH_Interrupts + * @{ + */ +#define FLASH_IT_EOP ((uint32_t)0x01000000) /*!< End of FLASH Operation Interrupt source */ +#define FLASH_IT_ERR ((uint32_t)0x02000000) /*!< Error Interrupt source */ +#define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0xFCFFFFFF) == 0x00000000) && ((IT) != 0x00000000)) +/** + * @} + */ + +/** @defgroup FLASH_Flags + * @{ + */ +#define FLASH_FLAG_EOP ((uint32_t)0x00000001) /*!< FLASH End of Operation flag */ +#define FLASH_FLAG_OPERR ((uint32_t)0x00000002) /*!< FLASH operation Error flag */ +#define FLASH_FLAG_WRPERR ((uint32_t)0x00000010) /*!< FLASH Write protected error flag */ +#define FLASH_FLAG_PGAERR ((uint32_t)0x00000020) /*!< FLASH Programming Alignment error flag */ +#define FLASH_FLAG_PGPERR ((uint32_t)0x00000040) /*!< FLASH Programming Parallelism error flag */ +#define FLASH_FLAG_PGSERR ((uint32_t)0x00000080) /*!< FLASH Programming Sequence error flag */ +#define FLASH_FLAG_BSY ((uint32_t)0x00010000) /*!< FLASH Busy flag */ +#define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFF0C) == 0x00000000) && ((FLAG) != 0x00000000)) +#define IS_FLASH_GET_FLAG(FLAG) (((FLAG) == FLASH_FLAG_EOP) || ((FLAG) == FLASH_FLAG_OPERR) || \ + ((FLAG) == FLASH_FLAG_WRPERR) || ((FLAG) == FLASH_FLAG_PGAERR) || \ + ((FLAG) == FLASH_FLAG_PGPERR) || ((FLAG) == FLASH_FLAG_PGSERR) || \ + ((FLAG) == FLASH_FLAG_BSY)) +/** + * @} + */ + +/** @defgroup FLASH_Program_Parallelism + * @{ + */ +#define FLASH_PSIZE_BYTE ((uint32_t)0x00000000) +#define FLASH_PSIZE_HALF_WORD ((uint32_t)0x00000100) +#define FLASH_PSIZE_WORD ((uint32_t)0x00000200) +#define FLASH_PSIZE_DOUBLE_WORD ((uint32_t)0x00000300) +#define CR_PSIZE_MASK ((uint32_t)0xFFFFFCFF) +/** + * @} + */ + +/** @defgroup FLASH_Keys + * @{ + */ +#define RDP_KEY ((uint16_t)0x00A5) +#define FLASH_KEY1 ((uint32_t)0x45670123) +#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) +#define FLASH_OPT_KEY1 ((uint32_t)0x08192A3B) +#define FLASH_OPT_KEY2 ((uint32_t)0x4C5D6E7F) +/** + * @} + */ + +/** + * @brief ACR register byte 0 (Bits[8:0]) base address + */ +#define ACR_BYTE0_ADDRESS ((uint32_t)0x40023C00) +/** + * @brief OPTCR register byte 3 (Bits[24:16]) base address + */ +#define OPTCR_BYTE0_ADDRESS ((uint32_t)0x40023C14) +#define OPTCR_BYTE1_ADDRESS ((uint32_t)0x40023C15) +#define OPTCR_BYTE2_ADDRESS ((uint32_t)0x40023C16) + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* FLASH Interface configuration functions ************************************/ +void FLASH_SetLatency(uint32_t FLASH_Latency); +void FLASH_PrefetchBufferCmd(FunctionalState NewState); +void FLASH_InstructionCacheCmd(FunctionalState NewState); +void FLASH_DataCacheCmd(FunctionalState NewState); +void FLASH_InstructionCacheReset(void); +void FLASH_DataCacheReset(void); + +/* FLASH Memory Programming functions *****************************************/ +void FLASH_Unlock(void); +void FLASH_Lock(void); +FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange); +FLASH_Status FLASH_EraseAllSectors(uint8_t VoltageRange); +FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data); +FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); +FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data); +FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data); + +/* Option Bytes Programming functions *****************************************/ +void FLASH_OB_Unlock(void); +void FLASH_OB_Lock(void); +void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState); +void FLASH_OB_RDPConfig(uint8_t OB_RDP); +void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY); +void FLASH_OB_BORConfig(uint8_t OB_BOR); +FLASH_Status FLASH_OB_Launch(void); +uint8_t FLASH_OB_GetUser(void); +uint16_t FLASH_OB_GetWRP(void); +FlagStatus FLASH_OB_GetRDP(void); +uint8_t FLASH_OB_GetBOR(void); + +/* Interrupts and flags management functions **********************************/ +void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState); +FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG); +void FLASH_ClearFlag(uint32_t FLASH_FLAG); +FLASH_Status FLASH_GetStatus(void); +FLASH_Status FLASH_WaitForLastOperation(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_FLASH_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_fsmc.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_fsmc.h new file mode 100644 index 000000000..65ffc3269 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_fsmc.h @@ -0,0 +1,675 @@ +/** + ****************************************************************************** + * @file stm32f2xx_fsmc.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the FSMC firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_FSMC_H +#define __STM32F2xx_FSMC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup FSMC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief Timing parameters For NOR/SRAM Banks + */ +typedef struct +{ + uint32_t FSMC_AddressSetupTime; /*!< Defines the number of HCLK cycles to configure + the duration of the address setup time. + This parameter can be a value between 0 and 0xF. + @note This parameter is not used with synchronous NOR Flash memories. */ + + uint32_t FSMC_AddressHoldTime; /*!< Defines the number of HCLK cycles to configure + the duration of the address hold time. + This parameter can be a value between 0 and 0xF. + @note This parameter is not used with synchronous NOR Flash memories.*/ + + uint32_t FSMC_DataSetupTime; /*!< Defines the number of HCLK cycles to configure + the duration of the data setup time. + This parameter can be a value between 0 and 0xFF. + @note This parameter is used for SRAMs, ROMs and asynchronous multiplexed NOR Flash memories. */ + + uint32_t FSMC_BusTurnAroundDuration; /*!< Defines the number of HCLK cycles to configure + the duration of the bus turnaround. + This parameter can be a value between 0 and 0xF. + @note This parameter is only used for multiplexed NOR Flash memories. */ + + uint32_t FSMC_CLKDivision; /*!< Defines the period of CLK clock output signal, expressed in number of HCLK cycles. + This parameter can be a value between 1 and 0xF. + @note This parameter is not used for asynchronous NOR Flash, SRAM or ROM accesses. */ + + uint32_t FSMC_DataLatency; /*!< Defines the number of memory clock cycles to issue + to the memory before getting the first data. + The parameter value depends on the memory type as shown below: + - It must be set to 0 in case of a CRAM + - It is don't care in asynchronous NOR, SRAM or ROM accesses + - It may assume a value between 0 and 0xF in NOR Flash memories + with synchronous burst mode enable */ + + uint32_t FSMC_AccessMode; /*!< Specifies the asynchronous access mode. + This parameter can be a value of @ref FSMC_Access_Mode */ +}FSMC_NORSRAMTimingInitTypeDef; + +/** + * @brief FSMC NOR/SRAM Init structure definition + */ +typedef struct +{ + uint32_t FSMC_Bank; /*!< Specifies the NOR/SRAM memory bank that will be used. + This parameter can be a value of @ref FSMC_NORSRAM_Bank */ + + uint32_t FSMC_DataAddressMux; /*!< Specifies whether the address and data values are + multiplexed on the databus or not. + This parameter can be a value of @ref FSMC_Data_Address_Bus_Multiplexing */ + + uint32_t FSMC_MemoryType; /*!< Specifies the type of external memory attached to + the corresponding memory bank. + This parameter can be a value of @ref FSMC_Memory_Type */ + + uint32_t FSMC_MemoryDataWidth; /*!< Specifies the external memory device width. + This parameter can be a value of @ref FSMC_Data_Width */ + + uint32_t FSMC_BurstAccessMode; /*!< Enables or disables the burst access mode for Flash memory, + valid only with synchronous burst Flash memories. + This parameter can be a value of @ref FSMC_Burst_Access_Mode */ + + uint32_t FSMC_AsynchronousWait; /*!< Enables or disables wait signal during asynchronous transfers, + valid only with asynchronous Flash memories. + This parameter can be a value of @ref FSMC_AsynchronousWait */ + + uint32_t FSMC_WaitSignalPolarity; /*!< Specifies the wait signal polarity, valid only when accessing + the Flash memory in burst mode. + This parameter can be a value of @ref FSMC_Wait_Signal_Polarity */ + + uint32_t FSMC_WrapMode; /*!< Enables or disables the Wrapped burst access mode for Flash + memory, valid only when accessing Flash memories in burst mode. + This parameter can be a value of @ref FSMC_Wrap_Mode */ + + uint32_t FSMC_WaitSignalActive; /*!< Specifies if the wait signal is asserted by the memory one + clock cycle before the wait state or during the wait state, + valid only when accessing memories in burst mode. + This parameter can be a value of @ref FSMC_Wait_Timing */ + + uint32_t FSMC_WriteOperation; /*!< Enables or disables the write operation in the selected bank by the FSMC. + This parameter can be a value of @ref FSMC_Write_Operation */ + + uint32_t FSMC_WaitSignal; /*!< Enables or disables the wait-state insertion via wait + signal, valid for Flash memory access in burst mode. + This parameter can be a value of @ref FSMC_Wait_Signal */ + + uint32_t FSMC_ExtendedMode; /*!< Enables or disables the extended mode. + This parameter can be a value of @ref FSMC_Extended_Mode */ + + uint32_t FSMC_WriteBurst; /*!< Enables or disables the write burst operation. + This parameter can be a value of @ref FSMC_Write_Burst */ + + FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct; /*!< Timing Parameters for write and read access if the ExtendedMode is not used*/ + + FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct; /*!< Timing Parameters for write access if the ExtendedMode is used*/ +}FSMC_NORSRAMInitTypeDef; + +/** + * @brief Timing parameters For FSMC NAND and PCCARD Banks + */ +typedef struct +{ + uint32_t FSMC_SetupTime; /*!< Defines the number of HCLK cycles to setup address before + the command assertion for NAND-Flash read or write access + to common/Attribute or I/O memory space (depending on + the memory space timing to be configured). + This parameter can be a value between 0 and 0xFF.*/ + + uint32_t FSMC_WaitSetupTime; /*!< Defines the minimum number of HCLK cycles to assert the + command for NAND-Flash read or write access to + common/Attribute or I/O memory space (depending on the + memory space timing to be configured). + This parameter can be a number between 0x00 and 0xFF */ + + uint32_t FSMC_HoldSetupTime; /*!< Defines the number of HCLK clock cycles to hold address + (and data for write access) after the command deassertion + for NAND-Flash read or write access to common/Attribute + or I/O memory space (depending on the memory space timing + to be configured). + This parameter can be a number between 0x00 and 0xFF */ + + uint32_t FSMC_HiZSetupTime; /*!< Defines the number of HCLK clock cycles during which the + databus is kept in HiZ after the start of a NAND-Flash + write access to common/Attribute or I/O memory space (depending + on the memory space timing to be configured). + This parameter can be a number between 0x00 and 0xFF */ +}FSMC_NAND_PCCARDTimingInitTypeDef; + +/** + * @brief FSMC NAND Init structure definition + */ +typedef struct +{ + uint32_t FSMC_Bank; /*!< Specifies the NAND memory bank that will be used. + This parameter can be a value of @ref FSMC_NAND_Bank */ + + uint32_t FSMC_Waitfeature; /*!< Enables or disables the Wait feature for the NAND Memory Bank. + This parameter can be any value of @ref FSMC_Wait_feature */ + + uint32_t FSMC_MemoryDataWidth; /*!< Specifies the external memory device width. + This parameter can be any value of @ref FSMC_Data_Width */ + + uint32_t FSMC_ECC; /*!< Enables or disables the ECC computation. + This parameter can be any value of @ref FSMC_ECC */ + + uint32_t FSMC_ECCPageSize; /*!< Defines the page size for the extended ECC. + This parameter can be any value of @ref FSMC_ECC_Page_Size */ + + uint32_t FSMC_TCLRSetupTime; /*!< Defines the number of HCLK cycles to configure the + delay between CLE low and RE low. + This parameter can be a value between 0 and 0xFF. */ + + uint32_t FSMC_TARSetupTime; /*!< Defines the number of HCLK cycles to configure the + delay between ALE low and RE low. + This parameter can be a number between 0x0 and 0xFF */ + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_CommonSpaceTimingStruct; /*!< FSMC Common Space Timing */ + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_AttributeSpaceTimingStruct; /*!< FSMC Attribute Space Timing */ +}FSMC_NANDInitTypeDef; + +/** + * @brief FSMC PCCARD Init structure definition + */ + +typedef struct +{ + uint32_t FSMC_Waitfeature; /*!< Enables or disables the Wait feature for the Memory Bank. + This parameter can be any value of @ref FSMC_Wait_feature */ + + uint32_t FSMC_TCLRSetupTime; /*!< Defines the number of HCLK cycles to configure the + delay between CLE low and RE low. + This parameter can be a value between 0 and 0xFF. */ + + uint32_t FSMC_TARSetupTime; /*!< Defines the number of HCLK cycles to configure the + delay between ALE low and RE low. + This parameter can be a number between 0x0 and 0xFF */ + + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_CommonSpaceTimingStruct; /*!< FSMC Common Space Timing */ + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_AttributeSpaceTimingStruct; /*!< FSMC Attribute Space Timing */ + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_IOSpaceTimingStruct; /*!< FSMC IO Space Timing */ +}FSMC_PCCARDInitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup FSMC_Exported_Constants + * @{ + */ + +/** @defgroup FSMC_NORSRAM_Bank + * @{ + */ +#define FSMC_Bank1_NORSRAM1 ((uint32_t)0x00000000) +#define FSMC_Bank1_NORSRAM2 ((uint32_t)0x00000002) +#define FSMC_Bank1_NORSRAM3 ((uint32_t)0x00000004) +#define FSMC_Bank1_NORSRAM4 ((uint32_t)0x00000006) +/** + * @} + */ + +/** @defgroup FSMC_NAND_Bank + * @{ + */ +#define FSMC_Bank2_NAND ((uint32_t)0x00000010) +#define FSMC_Bank3_NAND ((uint32_t)0x00000100) +/** + * @} + */ + +/** @defgroup FSMC_PCCARD_Bank + * @{ + */ +#define FSMC_Bank4_PCCARD ((uint32_t)0x00001000) +/** + * @} + */ + +#define IS_FSMC_NORSRAM_BANK(BANK) (((BANK) == FSMC_Bank1_NORSRAM1) || \ + ((BANK) == FSMC_Bank1_NORSRAM2) || \ + ((BANK) == FSMC_Bank1_NORSRAM3) || \ + ((BANK) == FSMC_Bank1_NORSRAM4)) + +#define IS_FSMC_NAND_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \ + ((BANK) == FSMC_Bank3_NAND)) + +#define IS_FSMC_GETFLAG_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \ + ((BANK) == FSMC_Bank3_NAND) || \ + ((BANK) == FSMC_Bank4_PCCARD)) + +#define IS_FSMC_IT_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \ + ((BANK) == FSMC_Bank3_NAND) || \ + ((BANK) == FSMC_Bank4_PCCARD)) + +/** @defgroup FSMC_NOR_SRAM_Controller + * @{ + */ + +/** @defgroup FSMC_Data_Address_Bus_Multiplexing + * @{ + */ + +#define FSMC_DataAddressMux_Disable ((uint32_t)0x00000000) +#define FSMC_DataAddressMux_Enable ((uint32_t)0x00000002) +#define IS_FSMC_MUX(MUX) (((MUX) == FSMC_DataAddressMux_Disable) || \ + ((MUX) == FSMC_DataAddressMux_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_Memory_Type + * @{ + */ + +#define FSMC_MemoryType_SRAM ((uint32_t)0x00000000) +#define FSMC_MemoryType_PSRAM ((uint32_t)0x00000004) +#define FSMC_MemoryType_NOR ((uint32_t)0x00000008) +#define IS_FSMC_MEMORY(MEMORY) (((MEMORY) == FSMC_MemoryType_SRAM) || \ + ((MEMORY) == FSMC_MemoryType_PSRAM)|| \ + ((MEMORY) == FSMC_MemoryType_NOR)) +/** + * @} + */ + +/** @defgroup FSMC_Data_Width + * @{ + */ + +#define FSMC_MemoryDataWidth_8b ((uint32_t)0x00000000) +#define FSMC_MemoryDataWidth_16b ((uint32_t)0x00000010) +#define IS_FSMC_MEMORY_WIDTH(WIDTH) (((WIDTH) == FSMC_MemoryDataWidth_8b) || \ + ((WIDTH) == FSMC_MemoryDataWidth_16b)) +/** + * @} + */ + +/** @defgroup FSMC_Burst_Access_Mode + * @{ + */ + +#define FSMC_BurstAccessMode_Disable ((uint32_t)0x00000000) +#define FSMC_BurstAccessMode_Enable ((uint32_t)0x00000100) +#define IS_FSMC_BURSTMODE(STATE) (((STATE) == FSMC_BurstAccessMode_Disable) || \ + ((STATE) == FSMC_BurstAccessMode_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_AsynchronousWait + * @{ + */ +#define FSMC_AsynchronousWait_Disable ((uint32_t)0x00000000) +#define FSMC_AsynchronousWait_Enable ((uint32_t)0x00008000) +#define IS_FSMC_ASYNWAIT(STATE) (((STATE) == FSMC_AsynchronousWait_Disable) || \ + ((STATE) == FSMC_AsynchronousWait_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_Wait_Signal_Polarity + * @{ + */ +#define FSMC_WaitSignalPolarity_Low ((uint32_t)0x00000000) +#define FSMC_WaitSignalPolarity_High ((uint32_t)0x00000200) +#define IS_FSMC_WAIT_POLARITY(POLARITY) (((POLARITY) == FSMC_WaitSignalPolarity_Low) || \ + ((POLARITY) == FSMC_WaitSignalPolarity_High)) +/** + * @} + */ + +/** @defgroup FSMC_Wrap_Mode + * @{ + */ +#define FSMC_WrapMode_Disable ((uint32_t)0x00000000) +#define FSMC_WrapMode_Enable ((uint32_t)0x00000400) +#define IS_FSMC_WRAP_MODE(MODE) (((MODE) == FSMC_WrapMode_Disable) || \ + ((MODE) == FSMC_WrapMode_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_Wait_Timing + * @{ + */ +#define FSMC_WaitSignalActive_BeforeWaitState ((uint32_t)0x00000000) +#define FSMC_WaitSignalActive_DuringWaitState ((uint32_t)0x00000800) +#define IS_FSMC_WAIT_SIGNAL_ACTIVE(ACTIVE) (((ACTIVE) == FSMC_WaitSignalActive_BeforeWaitState) || \ + ((ACTIVE) == FSMC_WaitSignalActive_DuringWaitState)) +/** + * @} + */ + +/** @defgroup FSMC_Write_Operation + * @{ + */ +#define FSMC_WriteOperation_Disable ((uint32_t)0x00000000) +#define FSMC_WriteOperation_Enable ((uint32_t)0x00001000) +#define IS_FSMC_WRITE_OPERATION(OPERATION) (((OPERATION) == FSMC_WriteOperation_Disable) || \ + ((OPERATION) == FSMC_WriteOperation_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_Wait_Signal + * @{ + */ +#define FSMC_WaitSignal_Disable ((uint32_t)0x00000000) +#define FSMC_WaitSignal_Enable ((uint32_t)0x00002000) +#define IS_FSMC_WAITE_SIGNAL(SIGNAL) (((SIGNAL) == FSMC_WaitSignal_Disable) || \ + ((SIGNAL) == FSMC_WaitSignal_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_Extended_Mode + * @{ + */ +#define FSMC_ExtendedMode_Disable ((uint32_t)0x00000000) +#define FSMC_ExtendedMode_Enable ((uint32_t)0x00004000) + +#define IS_FSMC_EXTENDED_MODE(MODE) (((MODE) == FSMC_ExtendedMode_Disable) || \ + ((MODE) == FSMC_ExtendedMode_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_Write_Burst + * @{ + */ + +#define FSMC_WriteBurst_Disable ((uint32_t)0x00000000) +#define FSMC_WriteBurst_Enable ((uint32_t)0x00080000) +#define IS_FSMC_WRITE_BURST(BURST) (((BURST) == FSMC_WriteBurst_Disable) || \ + ((BURST) == FSMC_WriteBurst_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_Address_Setup_Time + * @{ + */ +#define IS_FSMC_ADDRESS_SETUP_TIME(TIME) ((TIME) <= 0xF) +/** + * @} + */ + +/** @defgroup FSMC_Address_Hold_Time + * @{ + */ +#define IS_FSMC_ADDRESS_HOLD_TIME(TIME) ((TIME) <= 0xF) +/** + * @} + */ + +/** @defgroup FSMC_Data_Setup_Time + * @{ + */ +#define IS_FSMC_DATASETUP_TIME(TIME) (((TIME) > 0) && ((TIME) <= 0xFF)) +/** + * @} + */ + +/** @defgroup FSMC_Bus_Turn_around_Duration + * @{ + */ +#define IS_FSMC_TURNAROUND_TIME(TIME) ((TIME) <= 0xF) +/** + * @} + */ + +/** @defgroup FSMC_CLK_Division + * @{ + */ +#define IS_FSMC_CLK_DIV(DIV) ((DIV) <= 0xF) +/** + * @} + */ + +/** @defgroup FSMC_Data_Latency + * @{ + */ +#define IS_FSMC_DATA_LATENCY(LATENCY) ((LATENCY) <= 0xF) +/** + * @} + */ + +/** @defgroup FSMC_Access_Mode + * @{ + */ +#define FSMC_AccessMode_A ((uint32_t)0x00000000) +#define FSMC_AccessMode_B ((uint32_t)0x10000000) +#define FSMC_AccessMode_C ((uint32_t)0x20000000) +#define FSMC_AccessMode_D ((uint32_t)0x30000000) +#define IS_FSMC_ACCESS_MODE(MODE) (((MODE) == FSMC_AccessMode_A) || \ + ((MODE) == FSMC_AccessMode_B) || \ + ((MODE) == FSMC_AccessMode_C) || \ + ((MODE) == FSMC_AccessMode_D)) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup FSMC_NAND_PCCARD_Controller + * @{ + */ + +/** @defgroup FSMC_Wait_feature + * @{ + */ +#define FSMC_Waitfeature_Disable ((uint32_t)0x00000000) +#define FSMC_Waitfeature_Enable ((uint32_t)0x00000002) +#define IS_FSMC_WAIT_FEATURE(FEATURE) (((FEATURE) == FSMC_Waitfeature_Disable) || \ + ((FEATURE) == FSMC_Waitfeature_Enable)) +/** + * @} + */ + + +/** @defgroup FSMC_ECC + * @{ + */ +#define FSMC_ECC_Disable ((uint32_t)0x00000000) +#define FSMC_ECC_Enable ((uint32_t)0x00000040) +#define IS_FSMC_ECC_STATE(STATE) (((STATE) == FSMC_ECC_Disable) || \ + ((STATE) == FSMC_ECC_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_ECC_Page_Size + * @{ + */ +#define FSMC_ECCPageSize_256Bytes ((uint32_t)0x00000000) +#define FSMC_ECCPageSize_512Bytes ((uint32_t)0x00020000) +#define FSMC_ECCPageSize_1024Bytes ((uint32_t)0x00040000) +#define FSMC_ECCPageSize_2048Bytes ((uint32_t)0x00060000) +#define FSMC_ECCPageSize_4096Bytes ((uint32_t)0x00080000) +#define FSMC_ECCPageSize_8192Bytes ((uint32_t)0x000A0000) +#define IS_FSMC_ECCPAGE_SIZE(SIZE) (((SIZE) == FSMC_ECCPageSize_256Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_512Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_1024Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_2048Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_4096Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_8192Bytes)) +/** + * @} + */ + +/** @defgroup FSMC_TCLR_Setup_Time + * @{ + */ +#define IS_FSMC_TCLR_TIME(TIME) ((TIME) <= 0xFF) +/** + * @} + */ + +/** @defgroup FSMC_TAR_Setup_Time + * @{ + */ +#define IS_FSMC_TAR_TIME(TIME) ((TIME) <= 0xFF) +/** + * @} + */ + +/** @defgroup FSMC_Setup_Time + * @{ + */ +#define IS_FSMC_SETUP_TIME(TIME) ((TIME) <= 0xFF) +/** + * @} + */ + +/** @defgroup FSMC_Wait_Setup_Time + * @{ + */ +#define IS_FSMC_WAIT_TIME(TIME) ((TIME) <= 0xFF) +/** + * @} + */ + +/** @defgroup FSMC_Hold_Setup_Time + * @{ + */ +#define IS_FSMC_HOLD_TIME(TIME) ((TIME) <= 0xFF) +/** + * @} + */ + +/** @defgroup FSMC_HiZ_Setup_Time + * @{ + */ +#define IS_FSMC_HIZ_TIME(TIME) ((TIME) <= 0xFF) +/** + * @} + */ + +/** @defgroup FSMC_Interrupt_sources + * @{ + */ +#define FSMC_IT_RisingEdge ((uint32_t)0x00000008) +#define FSMC_IT_Level ((uint32_t)0x00000010) +#define FSMC_IT_FallingEdge ((uint32_t)0x00000020) +#define IS_FSMC_IT(IT) ((((IT) & (uint32_t)0xFFFFFFC7) == 0x00000000) && ((IT) != 0x00000000)) +#define IS_FSMC_GET_IT(IT) (((IT) == FSMC_IT_RisingEdge) || \ + ((IT) == FSMC_IT_Level) || \ + ((IT) == FSMC_IT_FallingEdge)) +/** + * @} + */ + +/** @defgroup FSMC_Flags + * @{ + */ +#define FSMC_FLAG_RisingEdge ((uint32_t)0x00000001) +#define FSMC_FLAG_Level ((uint32_t)0x00000002) +#define FSMC_FLAG_FallingEdge ((uint32_t)0x00000004) +#define FSMC_FLAG_FEMPT ((uint32_t)0x00000040) +#define IS_FSMC_GET_FLAG(FLAG) (((FLAG) == FSMC_FLAG_RisingEdge) || \ + ((FLAG) == FSMC_FLAG_Level) || \ + ((FLAG) == FSMC_FLAG_FallingEdge) || \ + ((FLAG) == FSMC_FLAG_FEMPT)) + +#define IS_FSMC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFFF8) == 0x00000000) && ((FLAG) != 0x00000000)) +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* NOR/SRAM Controller functions **********************************************/ +void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank); +void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); +void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); +void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState); + +/* NAND Controller functions **************************************************/ +void FSMC_NANDDeInit(uint32_t FSMC_Bank); +void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct); +void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct); +void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState); +void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState); +uint32_t FSMC_GetECC(uint32_t FSMC_Bank); + +/* PCCARD Controller functions ************************************************/ +void FSMC_PCCARDDeInit(void); +void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct); +void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct); +void FSMC_PCCARDCmd(FunctionalState NewState); + +/* Interrupts and flags management functions **********************************/ +void FSMC_ITConfig(uint32_t FSMC_Bank, uint32_t FSMC_IT, FunctionalState NewState); +FlagStatus FSMC_GetFlagStatus(uint32_t FSMC_Bank, uint32_t FSMC_FLAG); +void FSMC_ClearFlag(uint32_t FSMC_Bank, uint32_t FSMC_FLAG); +ITStatus FSMC_GetITStatus(uint32_t FSMC_Bank, uint32_t FSMC_IT); +void FSMC_ClearITPendingBit(uint32_t FSMC_Bank, uint32_t FSMC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_FSMC_H */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_gpio.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_gpio.h new file mode 100644 index 000000000..2300207eb --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_gpio.h @@ -0,0 +1,411 @@ +/** + ****************************************************************************** + * @file stm32f2xx_gpio.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the GPIO firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_GPIO_H +#define __STM32F2xx_GPIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup GPIO + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \ + ((PERIPH) == GPIOB) || \ + ((PERIPH) == GPIOC) || \ + ((PERIPH) == GPIOD) || \ + ((PERIPH) == GPIOE) || \ + ((PERIPH) == GPIOF) || \ + ((PERIPH) == GPIOG) || \ + ((PERIPH) == GPIOH) || \ + ((PERIPH) == GPIOI)) + +/** + * @brief GPIO Configuration Mode enumeration + */ +typedef enum +{ + GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */ + GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */ + GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */ + GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */ +}GPIOMode_TypeDef; +#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN) || ((MODE) == GPIO_Mode_OUT) || \ + ((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN)) + +/** + * @brief GPIO Output type enumeration + */ +typedef enum +{ + GPIO_OType_PP = 0x00, + GPIO_OType_OD = 0x01 +}GPIOOType_TypeDef; +#define IS_GPIO_OTYPE(OTYPE) (((OTYPE) == GPIO_OType_PP) || ((OTYPE) == GPIO_OType_OD)) + + +/** + * @brief GPIO Output Maximum frequency enumeration + */ +typedef enum +{ + GPIO_Speed_2MHz = 0x00, /*!< Low speed */ + GPIO_Speed_25MHz = 0x01, /*!< Medium speed */ + GPIO_Speed_50MHz = 0x02, /*!< Fast speed */ + GPIO_Speed_100MHz = 0x03 /*!< High speed on 30 pF (80 MHz Output max speed on 15 pF) */ +}GPIOSpeed_TypeDef; +#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_2MHz) || ((SPEED) == GPIO_Speed_25MHz) || \ + ((SPEED) == GPIO_Speed_50MHz)|| ((SPEED) == GPIO_Speed_100MHz)) + +/** + * @brief GPIO Configuration PullUp PullDown enumeration + */ +typedef enum +{ + GPIO_PuPd_NOPULL = 0x00, + GPIO_PuPd_UP = 0x01, + GPIO_PuPd_DOWN = 0x02 +}GPIOPuPd_TypeDef; +#define IS_GPIO_PUPD(PUPD) (((PUPD) == GPIO_PuPd_NOPULL) || ((PUPD) == GPIO_PuPd_UP) || \ + ((PUPD) == GPIO_PuPd_DOWN)) + +/** + * @brief GPIO Bit SET and Bit RESET enumeration + */ +typedef enum +{ + Bit_RESET = 0, + Bit_SET +}BitAction; +#define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET)) + + +/** + * @brief GPIO Init structure definition + */ +typedef struct +{ + uint32_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured. + This parameter can be any value of @ref GPIO_pins_define */ + + GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins. + This parameter can be a value of @ref GPIOMode_TypeDef */ + + GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins. + This parameter can be a value of @ref GPIOSpeed_TypeDef */ + + GPIOOType_TypeDef GPIO_OType; /*!< Specifies the operating output type for the selected pins. + This parameter can be a value of @ref GPIOOType_TypeDef */ + + GPIOPuPd_TypeDef GPIO_PuPd; /*!< Specifies the operating Pull-up/Pull down for the selected pins. + This parameter can be a value of @ref GPIOPuPd_TypeDef */ +}GPIO_InitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup GPIO_Exported_Constants + * @{ + */ + +/** @defgroup GPIO_pins_define + * @{ + */ +#define GPIO_Pin_0 ((uint16_t)0x0001) /* Pin 0 selected */ +#define GPIO_Pin_1 ((uint16_t)0x0002) /* Pin 1 selected */ +#define GPIO_Pin_2 ((uint16_t)0x0004) /* Pin 2 selected */ +#define GPIO_Pin_3 ((uint16_t)0x0008) /* Pin 3 selected */ +#define GPIO_Pin_4 ((uint16_t)0x0010) /* Pin 4 selected */ +#define GPIO_Pin_5 ((uint16_t)0x0020) /* Pin 5 selected */ +#define GPIO_Pin_6 ((uint16_t)0x0040) /* Pin 6 selected */ +#define GPIO_Pin_7 ((uint16_t)0x0080) /* Pin 7 selected */ +#define GPIO_Pin_8 ((uint16_t)0x0100) /* Pin 8 selected */ +#define GPIO_Pin_9 ((uint16_t)0x0200) /* Pin 9 selected */ +#define GPIO_Pin_10 ((uint16_t)0x0400) /* Pin 10 selected */ +#define GPIO_Pin_11 ((uint16_t)0x0800) /* Pin 11 selected */ +#define GPIO_Pin_12 ((uint16_t)0x1000) /* Pin 12 selected */ +#define GPIO_Pin_13 ((uint16_t)0x2000) /* Pin 13 selected */ +#define GPIO_Pin_14 ((uint16_t)0x4000) /* Pin 14 selected */ +#define GPIO_Pin_15 ((uint16_t)0x8000) /* Pin 15 selected */ +#define GPIO_Pin_All ((uint16_t)0xFFFF) /* All pins selected */ + +#define IS_GPIO_PIN(PIN) ((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00)) +#define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \ + ((PIN) == GPIO_Pin_1) || \ + ((PIN) == GPIO_Pin_2) || \ + ((PIN) == GPIO_Pin_3) || \ + ((PIN) == GPIO_Pin_4) || \ + ((PIN) == GPIO_Pin_5) || \ + ((PIN) == GPIO_Pin_6) || \ + ((PIN) == GPIO_Pin_7) || \ + ((PIN) == GPIO_Pin_8) || \ + ((PIN) == GPIO_Pin_9) || \ + ((PIN) == GPIO_Pin_10) || \ + ((PIN) == GPIO_Pin_11) || \ + ((PIN) == GPIO_Pin_12) || \ + ((PIN) == GPIO_Pin_13) || \ + ((PIN) == GPIO_Pin_14) || \ + ((PIN) == GPIO_Pin_15)) +/** + * @} + */ + + +/** @defgroup GPIO_Pin_sources + * @{ + */ +#define GPIO_PinSource0 ((uint8_t)0x00) +#define GPIO_PinSource1 ((uint8_t)0x01) +#define GPIO_PinSource2 ((uint8_t)0x02) +#define GPIO_PinSource3 ((uint8_t)0x03) +#define GPIO_PinSource4 ((uint8_t)0x04) +#define GPIO_PinSource5 ((uint8_t)0x05) +#define GPIO_PinSource6 ((uint8_t)0x06) +#define GPIO_PinSource7 ((uint8_t)0x07) +#define GPIO_PinSource8 ((uint8_t)0x08) +#define GPIO_PinSource9 ((uint8_t)0x09) +#define GPIO_PinSource10 ((uint8_t)0x0A) +#define GPIO_PinSource11 ((uint8_t)0x0B) +#define GPIO_PinSource12 ((uint8_t)0x0C) +#define GPIO_PinSource13 ((uint8_t)0x0D) +#define GPIO_PinSource14 ((uint8_t)0x0E) +#define GPIO_PinSource15 ((uint8_t)0x0F) + +#define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \ + ((PINSOURCE) == GPIO_PinSource1) || \ + ((PINSOURCE) == GPIO_PinSource2) || \ + ((PINSOURCE) == GPIO_PinSource3) || \ + ((PINSOURCE) == GPIO_PinSource4) || \ + ((PINSOURCE) == GPIO_PinSource5) || \ + ((PINSOURCE) == GPIO_PinSource6) || \ + ((PINSOURCE) == GPIO_PinSource7) || \ + ((PINSOURCE) == GPIO_PinSource8) || \ + ((PINSOURCE) == GPIO_PinSource9) || \ + ((PINSOURCE) == GPIO_PinSource10) || \ + ((PINSOURCE) == GPIO_PinSource11) || \ + ((PINSOURCE) == GPIO_PinSource12) || \ + ((PINSOURCE) == GPIO_PinSource13) || \ + ((PINSOURCE) == GPIO_PinSource14) || \ + ((PINSOURCE) == GPIO_PinSource15)) +/** + * @} + */ + +/** @defgroup GPIO_Alternat_function_selection_define + * @{ + */ +/** + * @brief AF 0 selection + */ +#define GPIO_AF_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF_OTG_FS ((uint8_t)0xA) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF_OTG_HS ((uint8_t)0xA) /* OTG_HS Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF_FSMC ((uint8_t)0xC) /* FSMC Alternate Function mapping */ +#define GPIO_AF_OTG_HS_FS ((uint8_t)0xC) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF_SDIO ((uint8_t)0xC) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF_RTC_50Hz) || ((AF) == GPIO_AF_TIM14) || \ + ((AF) == GPIO_AF_MCO) || ((AF) == GPIO_AF_TAMPER) || \ + ((AF) == GPIO_AF_SWJ) || ((AF) == GPIO_AF_TRACE) || \ + ((AF) == GPIO_AF_TIM1) || ((AF) == GPIO_AF_TIM2) || \ + ((AF) == GPIO_AF_TIM3) || ((AF) == GPIO_AF_TIM4) || \ + ((AF) == GPIO_AF_TIM5) || ((AF) == GPIO_AF_TIM8) || \ + ((AF) == GPIO_AF_I2C1) || ((AF) == GPIO_AF_I2C2) || \ + ((AF) == GPIO_AF_I2C3) || ((AF) == GPIO_AF_SPI1) || \ + ((AF) == GPIO_AF_SPI2) || ((AF) == GPIO_AF_TIM13) || \ + ((AF) == GPIO_AF_SPI3) || ((AF) == GPIO_AF_TIM14) || \ + ((AF) == GPIO_AF_USART1) || ((AF) == GPIO_AF_USART2) || \ + ((AF) == GPIO_AF_USART3) || ((AF) == GPIO_AF_UART4) || \ + ((AF) == GPIO_AF_UART5) || ((AF) == GPIO_AF_USART6) || \ + ((AF) == GPIO_AF_CAN1) || ((AF) == GPIO_AF_CAN2) || \ + ((AF) == GPIO_AF_OTG_FS) || ((AF) == GPIO_AF_OTG_HS) || \ + ((AF) == GPIO_AF_ETH) || ((AF) == GPIO_AF_FSMC) || \ + ((AF) == GPIO_AF_OTG_HS_FS) || ((AF) == GPIO_AF_SDIO) || \ + ((AF) == GPIO_AF_DCMI) || ((AF) == GPIO_AF_EVENTOUT)) +/** + * @} + */ + +/** @defgroup GPIO_Legacy + * @{ + */ + +#define GPIO_Mode_AIN GPIO_Mode_AN + +#define GPIO_AF_OTG1_FS GPIO_AF_OTG_FS +#define GPIO_AF_OTG2_HS GPIO_AF_OTG_HS +#define GPIO_AF_OTG2_FS GPIO_AF_OTG_HS_FS + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the GPIO configuration to the default reset state ****/ +void GPIO_DeInit(GPIO_TypeDef* GPIOx); + +/* Initialization and Configuration functions *********************************/ +void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); +void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); +void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); + +/* GPIO Read and Write functions **********************************************/ +uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); +uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); +void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); +void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); +void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); + +/* GPIO Alternate functions configuration function ****************************/ +void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_GPIO_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_hash.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_hash.h new file mode 100644 index 000000000..62445fe33 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_hash.h @@ -0,0 +1,250 @@ +/** + ****************************************************************************** + * @file stm32f2xx_hash.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the HASH + * firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_HASH_H +#define __STM32F2xx_HASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup HASH + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief HASH Init structure definition + */ +typedef struct +{ + uint32_t HASH_AlgoSelection; /*!< SHA-1 or MD5. This parameter can be a value + of @ref HASH_Algo_Selection */ + uint32_t HASH_AlgoMode; /*!< HASH or HMAC. This parameter can be a value + of @ref HASH_processor_Algorithm_Mode */ + uint32_t HASH_DataType; /*!< 32-bit data, 16-bit data, 8-bit data or + bit-string. This parameter can be a value of + @ref HASH_Data_Type */ + uint32_t HASH_HMACKeyType; /*!< HMAC Short key or HMAC Long Key. This parameter + can be a value of @ref HASH_HMAC_Long_key_only_for_HMAC_mode */ +}HASH_InitTypeDef; + +/** + * @brief HASH message digest result structure definition + */ +typedef struct +{ + uint32_t Data[5]; /*!< Message digest result : 5x 32bit words for SHA1 or + 4x 32bit words for MD5 */ +} HASH_MsgDigest; + +/** + * @brief HASH context swapping structure definition + */ +typedef struct +{ + uint32_t HASH_IMR; + uint32_t HASH_STR; + uint32_t HASH_CR; + uint32_t HASH_CSR[51]; +}HASH_Context; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup HASH_Exported_Constants + * @{ + */ + +/** @defgroup HASH_Algo_Selection + * @{ + */ +#define HASH_AlgoSelection_SHA1 ((uint16_t)0x0000) /*!< HASH function is SHA1 */ +#define HASH_AlgoSelection_MD5 ((uint16_t)0x0080) /*!< HASH function is MD5 */ + +#define IS_HASH_ALGOSELECTION(ALGOSELECTION) (((ALGOSELECTION) == HASH_AlgoSelection_SHA1) || \ + ((ALGOSELECTION) == HASH_AlgoSelection_MD5)) +/** + * @} + */ + +/** @defgroup HASH_processor_Algorithm_Mode + * @{ + */ +#define HASH_AlgoMode_HASH ((uint16_t)0x0000) /*!< Algorithm is HASH */ +#define HASH_AlgoMode_HMAC ((uint16_t)0x0040) /*!< Algorithm is HMAC */ + +#define IS_HASH_ALGOMODE(ALGOMODE) (((ALGOMODE) == HASH_AlgoMode_HASH) || \ + ((ALGOMODE) == HASH_AlgoMode_HMAC)) +/** + * @} + */ + +/** @defgroup HASH_Data_Type + * @{ + */ +#define HASH_DataType_32b ((uint16_t)0x0000) +#define HASH_DataType_16b ((uint16_t)0x0010) +#define HASH_DataType_8b ((uint16_t)0x0020) +#define HASH_DataType_1b ((uint16_t)0x0030) + +#define IS_HASH_DATATYPE(DATATYPE) (((DATATYPE) == HASH_DataType_32b)|| \ + ((DATATYPE) == HASH_DataType_16b)|| \ + ((DATATYPE) == HASH_DataType_8b)|| \ + ((DATATYPE) == HASH_DataType_1b)) +/** + * @} + */ + +/** @defgroup HASH_HMAC_Long_key_only_for_HMAC_mode + * @{ + */ +#define HASH_HMACKeyType_ShortKey ((uint32_t)0x00000000) /*!< HMAC Key is <= 64 bytes */ +#define HASH_HMACKeyType_LongKey ((uint32_t)0x00010000) /*!< HMAC Key is > 64 bytes */ + +#define IS_HASH_HMAC_KEYTYPE(KEYTYPE) (((KEYTYPE) == HASH_HMACKeyType_ShortKey) || \ + ((KEYTYPE) == HASH_HMACKeyType_LongKey)) +/** + * @} + */ + +/** @defgroup Number_of_valid_bits_in_last_word_of_the_message + * @{ + */ +#define IS_HASH_VALIDBITSNUMBER(VALIDBITS) ((VALIDBITS) <= 0x1F) + +/** + * @} + */ + +/** @defgroup HASH_interrupts_definition + * @{ + */ +#define HASH_IT_DINI ((uint8_t)0x01) /*!< A new block can be entered into the input buffer (DIN)*/ +#define HASH_IT_DCI ((uint8_t)0x02) /*!< Digest calculation complete */ + +#define IS_HASH_IT(IT) ((((IT) & (uint8_t)0xFC) == 0x00) && ((IT) != 0x00)) +#define IS_HASH_GET_IT(IT) (((IT) == HASH_IT_DINI) || ((IT) == HASH_IT_DCI)) + +/** + * @} + */ + +/** @defgroup HASH_flags_definition + * @{ + */ +#define HASH_FLAG_DINIS ((uint16_t)0x0001) /*!< 16 locations are free in the DIN : A new block can be entered into the input buffer.*/ +#define HASH_FLAG_DCIS ((uint16_t)0x0002) /*!< Digest calculation complete */ +#define HASH_FLAG_DMAS ((uint16_t)0x0004) /*!< DMA interface is enabled (DMAE=1) or a transfer is ongoing */ +#define HASH_FLAG_BUSY ((uint16_t)0x0008) /*!< The hash core is Busy : processing a block of data */ +#define HASH_FLAG_DINNE ((uint16_t)0x1000) /*!< DIN not empty : The input buffer contains at least one word of data */ + +#define IS_HASH_GET_FLAG(FLAG) (((FLAG) == HASH_FLAG_DINIS) || \ + ((FLAG) == HASH_FLAG_DCIS) || \ + ((FLAG) == HASH_FLAG_DMAS) || \ + ((FLAG) == HASH_FLAG_BUSY) || \ + ((FLAG) == HASH_FLAG_DINNE)) + +#define IS_HASH_CLEAR_FLAG(FLAG)(((FLAG) == HASH_FLAG_DINIS) || \ + ((FLAG) == HASH_FLAG_DCIS)) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the HASH configuration to the default reset state ****/ +void HASH_DeInit(void); + +/* HASH Configuration function ************************************************/ +void HASH_Init(HASH_InitTypeDef* HASH_InitStruct); +void HASH_StructInit(HASH_InitTypeDef* HASH_InitStruct); +void HASH_Reset(void); + +/* HASH Message Digest generation functions ***********************************/ +void HASH_DataIn(uint32_t Data); +uint8_t HASH_GetInFIFOWordsNbr(void); +void HASH_SetLastWordValidBitsNbr(uint16_t ValidNumber); +void HASH_StartDigest(void); +void HASH_GetDigest(HASH_MsgDigest* HASH_MessageDigest); + +/* HASH Context swapping functions ********************************************/ +void HASH_SaveContext(HASH_Context* HASH_ContextSave); +void HASH_RestoreContext(HASH_Context* HASH_ContextRestore); + +/* HASH's DMA interface function **********************************************/ +void HASH_DMACmd(FunctionalState NewState); + +/* HASH Interrupts and flags management functions *****************************/ +void HASH_ITConfig(uint8_t HASH_IT, FunctionalState NewState); +FlagStatus HASH_GetFlagStatus(uint16_t HASH_FLAG); +void HASH_ClearFlag(uint16_t HASH_FLAG); +ITStatus HASH_GetITStatus(uint8_t HASH_IT); +void HASH_ClearITPendingBit(uint8_t HASH_IT); + +/* High Level SHA1 functions **************************************************/ +ErrorStatus HASH_SHA1(uint8_t *Input, uint32_t Ilen, uint8_t Output[20]); +ErrorStatus HMAC_SHA1(uint8_t *Key, uint32_t Keylen, + uint8_t *Input, uint32_t Ilen, + uint8_t Output[20]); + +/* High Level MD5 functions ***************************************************/ +ErrorStatus HASH_MD5(uint8_t *Input, uint32_t Ilen, uint8_t Output[16]); +ErrorStatus HMAC_MD5(uint8_t *Key, uint32_t Keylen, + uint8_t *Input, uint32_t Ilen, + uint8_t Output[16]); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_HASH_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_i2c.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_i2c.h new file mode 100644 index 000000000..bd3388845 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_i2c.h @@ -0,0 +1,698 @@ +/** + ****************************************************************************** + * @file stm32f2xx_i2c.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the I2C firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_I2C_H +#define __STM32F2xx_I2C_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup I2C + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief I2C Init structure definition + */ + +typedef struct +{ + uint32_t I2C_ClockSpeed; /*!< Specifies the clock frequency. + This parameter must be set to a value lower than 400kHz */ + + uint16_t I2C_Mode; /*!< Specifies the I2C mode. + This parameter can be a value of @ref I2C_mode */ + + uint16_t I2C_DutyCycle; /*!< Specifies the I2C fast mode duty cycle. + This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */ + + uint16_t I2C_OwnAddress1; /*!< Specifies the first device own address. + This parameter can be a 7-bit or 10-bit address. */ + + uint16_t I2C_Ack; /*!< Enables or disables the acknowledgement. + This parameter can be a value of @ref I2C_acknowledgement */ + + uint16_t I2C_AcknowledgedAddress; /*!< Specifies if 7-bit or 10-bit address is acknowledged. + This parameter can be a value of @ref I2C_acknowledged_address */ +}I2C_InitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + + +/** @defgroup I2C_Exported_Constants + * @{ + */ + +#define IS_I2C_ALL_PERIPH(PERIPH) (((PERIPH) == I2C1) || \ + ((PERIPH) == I2C2) || \ + ((PERIPH) == I2C3)) +/** @defgroup I2C_mode + * @{ + */ + +#define I2C_Mode_I2C ((uint16_t)0x0000) +#define I2C_Mode_SMBusDevice ((uint16_t)0x0002) +#define I2C_Mode_SMBusHost ((uint16_t)0x000A) +#define IS_I2C_MODE(MODE) (((MODE) == I2C_Mode_I2C) || \ + ((MODE) == I2C_Mode_SMBusDevice) || \ + ((MODE) == I2C_Mode_SMBusHost)) +/** + * @} + */ + +/** @defgroup I2C_duty_cycle_in_fast_mode + * @{ + */ + +#define I2C_DutyCycle_16_9 ((uint16_t)0x4000) /*!< I2C fast mode Tlow/Thigh = 16/9 */ +#define I2C_DutyCycle_2 ((uint16_t)0xBFFF) /*!< I2C fast mode Tlow/Thigh = 2 */ +#define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DutyCycle_16_9) || \ + ((CYCLE) == I2C_DutyCycle_2)) +/** + * @} + */ + +/** @defgroup I2C_acknowledgement + * @{ + */ + +#define I2C_Ack_Enable ((uint16_t)0x0400) +#define I2C_Ack_Disable ((uint16_t)0x0000) +#define IS_I2C_ACK_STATE(STATE) (((STATE) == I2C_Ack_Enable) || \ + ((STATE) == I2C_Ack_Disable)) +/** + * @} + */ + +/** @defgroup I2C_transfer_direction + * @{ + */ + +#define I2C_Direction_Transmitter ((uint8_t)0x00) +#define I2C_Direction_Receiver ((uint8_t)0x01) +#define IS_I2C_DIRECTION(DIRECTION) (((DIRECTION) == I2C_Direction_Transmitter) || \ + ((DIRECTION) == I2C_Direction_Receiver)) +/** + * @} + */ + +/** @defgroup I2C_acknowledged_address + * @{ + */ + +#define I2C_AcknowledgedAddress_7bit ((uint16_t)0x4000) +#define I2C_AcknowledgedAddress_10bit ((uint16_t)0xC000) +#define IS_I2C_ACKNOWLEDGE_ADDRESS(ADDRESS) (((ADDRESS) == I2C_AcknowledgedAddress_7bit) || \ + ((ADDRESS) == I2C_AcknowledgedAddress_10bit)) +/** + * @} + */ + +/** @defgroup I2C_registers + * @{ + */ + +#define I2C_Register_CR1 ((uint8_t)0x00) +#define I2C_Register_CR2 ((uint8_t)0x04) +#define I2C_Register_OAR1 ((uint8_t)0x08) +#define I2C_Register_OAR2 ((uint8_t)0x0C) +#define I2C_Register_DR ((uint8_t)0x10) +#define I2C_Register_SR1 ((uint8_t)0x14) +#define I2C_Register_SR2 ((uint8_t)0x18) +#define I2C_Register_CCR ((uint8_t)0x1C) +#define I2C_Register_TRISE ((uint8_t)0x20) +#define IS_I2C_REGISTER(REGISTER) (((REGISTER) == I2C_Register_CR1) || \ + ((REGISTER) == I2C_Register_CR2) || \ + ((REGISTER) == I2C_Register_OAR1) || \ + ((REGISTER) == I2C_Register_OAR2) || \ + ((REGISTER) == I2C_Register_DR) || \ + ((REGISTER) == I2C_Register_SR1) || \ + ((REGISTER) == I2C_Register_SR2) || \ + ((REGISTER) == I2C_Register_CCR) || \ + ((REGISTER) == I2C_Register_TRISE)) +/** + * @} + */ + +/** @defgroup I2C_NACK_position + * @{ + */ + +#define I2C_NACKPosition_Next ((uint16_t)0x0800) +#define I2C_NACKPosition_Current ((uint16_t)0xF7FF) +#define IS_I2C_NACK_POSITION(POSITION) (((POSITION) == I2C_NACKPosition_Next) || \ + ((POSITION) == I2C_NACKPosition_Current)) +/** + * @} + */ + +/** @defgroup I2C_SMBus_alert_pin_level + * @{ + */ + +#define I2C_SMBusAlert_Low ((uint16_t)0x2000) +#define I2C_SMBusAlert_High ((uint16_t)0xDFFF) +#define IS_I2C_SMBUS_ALERT(ALERT) (((ALERT) == I2C_SMBusAlert_Low) || \ + ((ALERT) == I2C_SMBusAlert_High)) +/** + * @} + */ + +/** @defgroup I2C_PEC_position + * @{ + */ + +#define I2C_PECPosition_Next ((uint16_t)0x0800) +#define I2C_PECPosition_Current ((uint16_t)0xF7FF) +#define IS_I2C_PEC_POSITION(POSITION) (((POSITION) == I2C_PECPosition_Next) || \ + ((POSITION) == I2C_PECPosition_Current)) +/** + * @} + */ + +/** @defgroup I2C_interrupts_definition + * @{ + */ + +#define I2C_IT_BUF ((uint16_t)0x0400) +#define I2C_IT_EVT ((uint16_t)0x0200) +#define I2C_IT_ERR ((uint16_t)0x0100) +#define IS_I2C_CONFIG_IT(IT) ((((IT) & (uint16_t)0xF8FF) == 0x00) && ((IT) != 0x00)) +/** + * @} + */ + +/** @defgroup I2C_interrupts_definition + * @{ + */ + +#define I2C_IT_SMBALERT ((uint32_t)0x01008000) +#define I2C_IT_TIMEOUT ((uint32_t)0x01004000) +#define I2C_IT_PECERR ((uint32_t)0x01001000) +#define I2C_IT_OVR ((uint32_t)0x01000800) +#define I2C_IT_AF ((uint32_t)0x01000400) +#define I2C_IT_ARLO ((uint32_t)0x01000200) +#define I2C_IT_BERR ((uint32_t)0x01000100) +#define I2C_IT_TXE ((uint32_t)0x06000080) +#define I2C_IT_RXNE ((uint32_t)0x06000040) +#define I2C_IT_STOPF ((uint32_t)0x02000010) +#define I2C_IT_ADD10 ((uint32_t)0x02000008) +#define I2C_IT_BTF ((uint32_t)0x02000004) +#define I2C_IT_ADDR ((uint32_t)0x02000002) +#define I2C_IT_SB ((uint32_t)0x02000001) + +#define IS_I2C_CLEAR_IT(IT) ((((IT) & (uint16_t)0x20FF) == 0x00) && ((IT) != (uint16_t)0x00)) + +#define IS_I2C_GET_IT(IT) (((IT) == I2C_IT_SMBALERT) || ((IT) == I2C_IT_TIMEOUT) || \ + ((IT) == I2C_IT_PECERR) || ((IT) == I2C_IT_OVR) || \ + ((IT) == I2C_IT_AF) || ((IT) == I2C_IT_ARLO) || \ + ((IT) == I2C_IT_BERR) || ((IT) == I2C_IT_TXE) || \ + ((IT) == I2C_IT_RXNE) || ((IT) == I2C_IT_STOPF) || \ + ((IT) == I2C_IT_ADD10) || ((IT) == I2C_IT_BTF) || \ + ((IT) == I2C_IT_ADDR) || ((IT) == I2C_IT_SB)) +/** + * @} + */ + +/** @defgroup I2C_flags_definition + * @{ + */ + +/** + * @brief SR2 register flags + */ + +#define I2C_FLAG_DUALF ((uint32_t)0x00800000) +#define I2C_FLAG_SMBHOST ((uint32_t)0x00400000) +#define I2C_FLAG_SMBDEFAULT ((uint32_t)0x00200000) +#define I2C_FLAG_GENCALL ((uint32_t)0x00100000) +#define I2C_FLAG_TRA ((uint32_t)0x00040000) +#define I2C_FLAG_BUSY ((uint32_t)0x00020000) +#define I2C_FLAG_MSL ((uint32_t)0x00010000) + +/** + * @brief SR1 register flags + */ + +#define I2C_FLAG_SMBALERT ((uint32_t)0x10008000) +#define I2C_FLAG_TIMEOUT ((uint32_t)0x10004000) +#define I2C_FLAG_PECERR ((uint32_t)0x10001000) +#define I2C_FLAG_OVR ((uint32_t)0x10000800) +#define I2C_FLAG_AF ((uint32_t)0x10000400) +#define I2C_FLAG_ARLO ((uint32_t)0x10000200) +#define I2C_FLAG_BERR ((uint32_t)0x10000100) +#define I2C_FLAG_TXE ((uint32_t)0x10000080) +#define I2C_FLAG_RXNE ((uint32_t)0x10000040) +#define I2C_FLAG_STOPF ((uint32_t)0x10000010) +#define I2C_FLAG_ADD10 ((uint32_t)0x10000008) +#define I2C_FLAG_BTF ((uint32_t)0x10000004) +#define I2C_FLAG_ADDR ((uint32_t)0x10000002) +#define I2C_FLAG_SB ((uint32_t)0x10000001) + +#define IS_I2C_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0x20FF) == 0x00) && ((FLAG) != (uint16_t)0x00)) + +#define IS_I2C_GET_FLAG(FLAG) (((FLAG) == I2C_FLAG_DUALF) || ((FLAG) == I2C_FLAG_SMBHOST) || \ + ((FLAG) == I2C_FLAG_SMBDEFAULT) || ((FLAG) == I2C_FLAG_GENCALL) || \ + ((FLAG) == I2C_FLAG_TRA) || ((FLAG) == I2C_FLAG_BUSY) || \ + ((FLAG) == I2C_FLAG_MSL) || ((FLAG) == I2C_FLAG_SMBALERT) || \ + ((FLAG) == I2C_FLAG_TIMEOUT) || ((FLAG) == I2C_FLAG_PECERR) || \ + ((FLAG) == I2C_FLAG_OVR) || ((FLAG) == I2C_FLAG_AF) || \ + ((FLAG) == I2C_FLAG_ARLO) || ((FLAG) == I2C_FLAG_BERR) || \ + ((FLAG) == I2C_FLAG_TXE) || ((FLAG) == I2C_FLAG_RXNE) || \ + ((FLAG) == I2C_FLAG_STOPF) || ((FLAG) == I2C_FLAG_ADD10) || \ + ((FLAG) == I2C_FLAG_BTF) || ((FLAG) == I2C_FLAG_ADDR) || \ + ((FLAG) == I2C_FLAG_SB)) +/** + * @} + */ + +/** @defgroup I2C_Events + * @{ + */ + +/** + =============================================================================== + I2C Master Events (Events grouped in order of communication) + =============================================================================== + */ + +/** + * @brief Communication start + * + * After sending the START condition (I2C_GenerateSTART() function) the master + * has to wait for this event. It means that the Start condition has been correctly + * released on the I2C bus (the bus is free, no other devices is communicating). + * + */ +/* --EV5 */ +#define I2C_EVENT_MASTER_MODE_SELECT ((uint32_t)0x00030001) /* BUSY, MSL and SB flag */ + +/** + * @brief Address Acknowledge + * + * After checking on EV5 (start condition correctly released on the bus), the + * master sends the address of the slave(s) with which it will communicate + * (I2C_Send7bitAddress() function, it also determines the direction of the communication: + * Master transmitter or Receiver). Then the master has to wait that a slave acknowledges + * his address. If an acknowledge is sent on the bus, one of the following events will + * be set: + * + * 1) In case of Master Receiver (7-bit addressing): the I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED + * event is set. + * + * 2) In case of Master Transmitter (7-bit addressing): the I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED + * is set + * + * 3) In case of 10-Bit addressing mode, the master (just after generating the START + * and checking on EV5) has to send the header of 10-bit addressing mode (I2C_SendData() + * function). Then master should wait on EV9. It means that the 10-bit addressing + * header has been correctly sent on the bus. Then master should send the second part of + * the 10-bit address (LSB) using the function I2C_Send7bitAddress(). Then master + * should wait for event EV6. + * + */ + +/* --EV6 */ +#define I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ((uint32_t)0x00070082) /* BUSY, MSL, ADDR, TXE and TRA flags */ +#define I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ((uint32_t)0x00030002) /* BUSY, MSL and ADDR flags */ +/* --EV9 */ +#define I2C_EVENT_MASTER_MODE_ADDRESS10 ((uint32_t)0x00030008) /* BUSY, MSL and ADD10 flags */ + +/** + * @brief Communication events + * + * If a communication is established (START condition generated and slave address + * acknowledged) then the master has to check on one of the following events for + * communication procedures: + * + * 1) Master Receiver mode: The master has to wait on the event EV7 then to read + * the data received from the slave (I2C_ReceiveData() function). + * + * 2) Master Transmitter mode: The master has to send data (I2C_SendData() + * function) then to wait on event EV8 or EV8_2. + * These two events are similar: + * - EV8 means that the data has been written in the data register and is + * being shifted out. + * - EV8_2 means that the data has been physically shifted out and output + * on the bus. + * In most cases, using EV8 is sufficient for the application. + * Using EV8_2 leads to a slower communication but ensure more reliable test. + * EV8_2 is also more suitable than EV8 for testing on the last data transmission + * (before Stop condition generation). + * + * @note In case the user software does not guarantee that this event EV7 is + * managed before the current byte end of transfer, then user may check on EV7 + * and BTF flag at the same time (ie. (I2C_EVENT_MASTER_BYTE_RECEIVED | I2C_FLAG_BTF)). + * In this case the communication may be slower. + * + */ + +/* Master RECEIVER mode -----------------------------*/ +/* --EV7 */ +#define I2C_EVENT_MASTER_BYTE_RECEIVED ((uint32_t)0x00030040) /* BUSY, MSL and RXNE flags */ + +/* Master TRANSMITTER mode --------------------------*/ +/* --EV8 */ +#define I2C_EVENT_MASTER_BYTE_TRANSMITTING ((uint32_t)0x00070080) /* TRA, BUSY, MSL, TXE flags */ +/* --EV8_2 */ +#define I2C_EVENT_MASTER_BYTE_TRANSMITTED ((uint32_t)0x00070084) /* TRA, BUSY, MSL, TXE and BTF flags */ + + +/** + =============================================================================== + I2C Slave Events (Events grouped in order of communication) + =============================================================================== + */ + + +/** + * @brief Communication start events + * + * Wait on one of these events at the start of the communication. It means that + * the I2C peripheral detected a Start condition on the bus (generated by master + * device) followed by the peripheral address. The peripheral generates an ACK + * condition on the bus (if the acknowledge feature is enabled through function + * I2C_AcknowledgeConfig()) and the events listed above are set : + * + * 1) In normal case (only one address managed by the slave), when the address + * sent by the master matches the own address of the peripheral (configured by + * I2C_OwnAddress1 field) the I2C_EVENT_SLAVE_XXX_ADDRESS_MATCHED event is set + * (where XXX could be TRANSMITTER or RECEIVER). + * + * 2) In case the address sent by the master matches the second address of the + * peripheral (configured by the function I2C_OwnAddress2Config() and enabled + * by the function I2C_DualAddressCmd()) the events I2C_EVENT_SLAVE_XXX_SECONDADDRESS_MATCHED + * (where XXX could be TRANSMITTER or RECEIVER) are set. + * + * 3) In case the address sent by the master is General Call (address 0x00) and + * if the General Call is enabled for the peripheral (using function I2C_GeneralCallCmd()) + * the following event is set I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED. + * + */ + +/* --EV1 (all the events below are variants of EV1) */ +/* 1) Case of One Single Address managed by the slave */ +#define I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED ((uint32_t)0x00020002) /* BUSY and ADDR flags */ +#define I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED ((uint32_t)0x00060082) /* TRA, BUSY, TXE and ADDR flags */ + +/* 2) Case of Dual address managed by the slave */ +#define I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED ((uint32_t)0x00820000) /* DUALF and BUSY flags */ +#define I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((uint32_t)0x00860080) /* DUALF, TRA, BUSY and TXE flags */ + +/* 3) Case of General Call enabled for the slave */ +#define I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED ((uint32_t)0x00120000) /* GENCALL and BUSY flags */ + +/** + * @brief Communication events + * + * Wait on one of these events when EV1 has already been checked and: + * + * - Slave RECEIVER mode: + * - EV2: When the application is expecting a data byte to be received. + * - EV4: When the application is expecting the end of the communication: master + * sends a stop condition and data transmission is stopped. + * + * - Slave Transmitter mode: + * - EV3: When a byte has been transmitted by the slave and the application is expecting + * the end of the byte transmission. The two events I2C_EVENT_SLAVE_BYTE_TRANSMITTED and + * I2C_EVENT_SLAVE_BYTE_TRANSMITTING are similar. The second one can optionally be + * used when the user software doesn't guarantee the EV3 is managed before the + * current byte end of transfer. + * - EV3_2: When the master sends a NACK in order to tell slave that data transmission + * shall end (before sending the STOP condition). In this case slave has to stop sending + * data bytes and expect a Stop condition on the bus. + * + * @note In case the user software does not guarantee that the event EV2 is + * managed before the current byte end of transfer, then user may check on EV2 + * and BTF flag at the same time (ie. (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_BTF)). + * In this case the communication may be slower. + * + */ + +/* Slave RECEIVER mode --------------------------*/ +/* --EV2 */ +#define I2C_EVENT_SLAVE_BYTE_RECEIVED ((uint32_t)0x00020040) /* BUSY and RXNE flags */ +/* --EV4 */ +#define I2C_EVENT_SLAVE_STOP_DETECTED ((uint32_t)0x00000010) /* STOPF flag */ + +/* Slave TRANSMITTER mode -----------------------*/ +/* --EV3 */ +#define I2C_EVENT_SLAVE_BYTE_TRANSMITTED ((uint32_t)0x00060084) /* TRA, BUSY, TXE and BTF flags */ +#define I2C_EVENT_SLAVE_BYTE_TRANSMITTING ((uint32_t)0x00060080) /* TRA, BUSY and TXE flags */ +/* --EV3_2 */ +#define I2C_EVENT_SLAVE_ACK_FAILURE ((uint32_t)0x00000400) /* AF flag */ + +/* + =============================================================================== + End of Events Description + =============================================================================== + */ + +#define IS_I2C_EVENT(EVENT) (((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_BYTE_RECEIVED) || \ + ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF)) || \ + ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL)) || \ + ((EVENT) == I2C_EVENT_SLAVE_BYTE_TRANSMITTED) || \ + ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF)) || \ + ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL)) || \ + ((EVENT) == I2C_EVENT_SLAVE_STOP_DETECTED) || \ + ((EVENT) == I2C_EVENT_MASTER_MODE_SELECT) || \ + ((EVENT) == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) || \ + ((EVENT) == I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) || \ + ((EVENT) == I2C_EVENT_MASTER_BYTE_RECEIVED) || \ + ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTED) || \ + ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTING) || \ + ((EVENT) == I2C_EVENT_MASTER_MODE_ADDRESS10) || \ + ((EVENT) == I2C_EVENT_SLAVE_ACK_FAILURE)) +/** + * @} + */ + +/** @defgroup I2C_own_address1 + * @{ + */ + +#define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x3FF) +/** + * @} + */ + +/** @defgroup I2C_clock_speed + * @{ + */ + +#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) >= 0x1) && ((SPEED) <= 400000)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the I2C configuration to the default reset state *****/ +void I2C_DeInit(I2C_TypeDef* I2Cx); + +/* Initialization and Configuration functions *********************************/ +void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct); +void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct); +void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction); +void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address); +void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle); +void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition); +void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert); +void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); + +/* Data transfers functions ***************************************************/ +void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data); +uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx); + +/* PEC management functions ***************************************************/ +void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition); +void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState); +uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx); + +/* DMA transfers management functions *****************************************/ +void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); + +/* Interrupts, events and flags management functions **************************/ +uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register); +void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState); + +/* + =============================================================================== + I2C State Monitoring Functions + =============================================================================== + This I2C driver provides three different ways for I2C state monitoring + depending on the application requirements and constraints: + + + 1. Basic state monitoring (Using I2C_CheckEvent() function) + ----------------------------------------------------------- + It compares the status registers (SR1 and SR2) content to a given event + (can be the combination of one or more flags). + It returns SUCCESS if the current status includes the given flags + and returns ERROR if one or more flags are missing in the current status. + + - When to use + - This function is suitable for most applications as well as for startup + activity since the events are fully described in the product reference + manual (RM0033). + - It is also suitable for users who need to define their own events. + + - Limitations + - If an error occurs (ie. error flags are set besides to the monitored + flags), the I2C_CheckEvent() function may return SUCCESS despite + the communication hold or corrupted real state. + In this case, it is advised to use error interrupts to monitor + the error events and handle them in the interrupt IRQ handler. + + Note + For error management, it is advised to use the following functions: + - I2C_ITConfig() to configure and enable the error interrupts (I2C_IT_ERR). + - I2Cx_ER_IRQHandler() which is called when the error interrupt occurs. + Where x is the peripheral instance (I2C1, I2C2 ...) + - I2C_GetFlagStatus() or I2C_GetITStatus() to be called into the + I2Cx_ER_IRQHandler() function in order to determine which error occurred. + - I2C_ClearFlag() or I2C_ClearITPendingBit() and/or I2C_SoftwareResetCmd() + and/or I2C_GenerateStop() in order to clear the error flag and source + and return to correct communication status. + + + 2. Advanced state monitoring (Using the function I2C_GetLastEvent()) + -------------------------------------------------------------------- + Using the function I2C_GetLastEvent() which returns the image of both status + registers in a single word (uint32_t) (Status Register 2 value is shifted left + by 16 bits and concatenated to Status Register 1). + + - When to use + - This function is suitable for the same applications above but it + allows to overcome the mentioned limitation of I2C_GetFlagStatus() + function. + - The returned value could be compared to events already defined in + this file or to custom values defined by user. + This function is suitable when multiple flags are monitored at the + same time. + - At the opposite of I2C_CheckEvent() function, this function allows + user to choose when an event is accepted (when all events flags are + set and no other flags are set or just when the needed flags are set + like I2C_CheckEvent() function. + + - Limitations + - User may need to define his own events. + - Same remark concerning the error management is applicable for this + function if user decides to check only regular communication flags + (and ignores error flags). + + + 3. Flag-based state monitoring (Using the function I2C_GetFlagStatus()) + ----------------------------------------------------------------------- + + Using the function I2C_GetFlagStatus() which simply returns the status of + one single flag (ie. I2C_FLAG_RXNE ...). + + - When to use + - This function could be used for specific applications or in debug + phase. + - It is suitable when only one flag checking is needed (most I2C + events are monitored through multiple flags). + - Limitations: + - When calling this function, the Status register is accessed. + Some flags are cleared when the status register is accessed. + So checking the status of one Flag, may clear other ones. + - Function may need to be called twice or more in order to monitor + one single event. + */ + +/* + =============================================================================== + 1. Basic state monitoring + =============================================================================== + */ +ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT); +/* + =============================================================================== + 2. Advanced state monitoring + =============================================================================== + */ +uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx); +/* + =============================================================================== + 3. Flag-based state monitoring + =============================================================================== + */ +FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); + + +void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); +ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT); +void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_I2C_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_iwdg.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_iwdg.h new file mode 100644 index 000000000..e689bd763 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_iwdg.h @@ -0,0 +1,131 @@ +/** + ****************************************************************************** + * @file stm32f2xx_iwdg.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the IWDG + * firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IWDG_H +#define __STM32F2xx_IWDG_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup IWDG + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup IWDG_Exported_Constants + * @{ + */ + +/** @defgroup IWDG_WriteAccess + * @{ + */ +#define IWDG_WriteAccess_Enable ((uint16_t)0x5555) +#define IWDG_WriteAccess_Disable ((uint16_t)0x0000) +#define IS_IWDG_WRITE_ACCESS(ACCESS) (((ACCESS) == IWDG_WriteAccess_Enable) || \ + ((ACCESS) == IWDG_WriteAccess_Disable)) +/** + * @} + */ + +/** @defgroup IWDG_prescaler + * @{ + */ +#define IWDG_Prescaler_4 ((uint8_t)0x00) +#define IWDG_Prescaler_8 ((uint8_t)0x01) +#define IWDG_Prescaler_16 ((uint8_t)0x02) +#define IWDG_Prescaler_32 ((uint8_t)0x03) +#define IWDG_Prescaler_64 ((uint8_t)0x04) +#define IWDG_Prescaler_128 ((uint8_t)0x05) +#define IWDG_Prescaler_256 ((uint8_t)0x06) +#define IS_IWDG_PRESCALER(PRESCALER) (((PRESCALER) == IWDG_Prescaler_4) || \ + ((PRESCALER) == IWDG_Prescaler_8) || \ + ((PRESCALER) == IWDG_Prescaler_16) || \ + ((PRESCALER) == IWDG_Prescaler_32) || \ + ((PRESCALER) == IWDG_Prescaler_64) || \ + ((PRESCALER) == IWDG_Prescaler_128)|| \ + ((PRESCALER) == IWDG_Prescaler_256)) +/** + * @} + */ + +/** @defgroup IWDG_Flag + * @{ + */ +#define IWDG_FLAG_PVU ((uint16_t)0x0001) +#define IWDG_FLAG_RVU ((uint16_t)0x0002) +#define IS_IWDG_FLAG(FLAG) (((FLAG) == IWDG_FLAG_PVU) || ((FLAG) == IWDG_FLAG_RVU)) +#define IS_IWDG_RELOAD(RELOAD) ((RELOAD) <= 0xFFF) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Prescaler and Counter configuration functions ******************************/ +void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess); +void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); +void IWDG_SetReload(uint16_t Reload); +void IWDG_ReloadCounter(void); + +/* IWDG activation function ***************************************************/ +void IWDG_Enable(void); + +/* Flag management function ***************************************************/ +FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IWDG_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_pwr.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_pwr.h new file mode 100644 index 000000000..7a9cf3ec5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_pwr.h @@ -0,0 +1,166 @@ +/** + ****************************************************************************** + * @file stm32f2xx_pwr.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the PWR firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_PWR_H +#define __STM32F2xx_PWR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup PWR + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup PWR_Exported_Constants + * @{ + */ + +/** @defgroup PWR_PVD_detection_level + * @{ + */ + +#define PWR_PVDLevel_0 PWR_CR_PLS_LEV0 +#define PWR_PVDLevel_1 PWR_CR_PLS_LEV1 +#define PWR_PVDLevel_2 PWR_CR_PLS_LEV2 +#define PWR_PVDLevel_3 PWR_CR_PLS_LEV3 +#define PWR_PVDLevel_4 PWR_CR_PLS_LEV4 +#define PWR_PVDLevel_5 PWR_CR_PLS_LEV5 +#define PWR_PVDLevel_6 PWR_CR_PLS_LEV6 +#define PWR_PVDLevel_7 PWR_CR_PLS_LEV7 + +#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLevel_0) || ((LEVEL) == PWR_PVDLevel_1)|| \ + ((LEVEL) == PWR_PVDLevel_2) || ((LEVEL) == PWR_PVDLevel_3)|| \ + ((LEVEL) == PWR_PVDLevel_4) || ((LEVEL) == PWR_PVDLevel_5)|| \ + ((LEVEL) == PWR_PVDLevel_6) || ((LEVEL) == PWR_PVDLevel_7)) +/** + * @} + */ + + +/** @defgroup PWR_Regulator_state_in_STOP_mode + * @{ + */ + +#define PWR_Regulator_ON ((uint32_t)0x00000000) +#define PWR_Regulator_LowPower PWR_CR_LPDS +#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_Regulator_ON) || \ + ((REGULATOR) == PWR_Regulator_LowPower)) +/** + * @} + */ + +/** @defgroup PWR_STOP_mode_entry + * @{ + */ + +#define PWR_STOPEntry_WFI ((uint8_t)0x01) +#define PWR_STOPEntry_WFE ((uint8_t)0x02) +#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPEntry_WFI) || ((ENTRY) == PWR_STOPEntry_WFE)) + +/** + * @} + */ + +/** @defgroup PWR_Flag + * @{ + */ + +#define PWR_FLAG_WU PWR_CSR_WUF +#define PWR_FLAG_SB PWR_CSR_SBF +#define PWR_FLAG_PVDO PWR_CSR_PVDO +#define PWR_FLAG_BRR PWR_CSR_BRR + +#define IS_PWR_GET_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB) || \ + ((FLAG) == PWR_FLAG_PVDO) || ((FLAG) == PWR_FLAG_BRR)) + +#define IS_PWR_CLEAR_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the PWR configuration to the default reset state ******/ +void PWR_DeInit(void); + +/* Backup Domain Access function **********************************************/ +void PWR_BackupAccessCmd(FunctionalState NewState); + +/* PVD configuration functions ************************************************/ +void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); +void PWR_PVDCmd(FunctionalState NewState); + +/* WakeUp pins configuration functions ****************************************/ +void PWR_WakeUpPinCmd(FunctionalState NewState); + +/* Backup Regulator configuration functions ***********************************/ +void PWR_BackupRegulatorCmd(FunctionalState NewState); + +/* FLASH Power Down configuration functions ***********************************/ +void PWR_FlashPowerDownCmd(FunctionalState NewState); + +/* Low Power modes configuration functions ************************************/ +void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); +void PWR_EnterSTANDBYMode(void); + +/* Flags management functions *************************************************/ +FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); +void PWR_ClearFlag(uint32_t PWR_FLAG); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_PWR_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rcc.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rcc.h new file mode 100644 index 000000000..cfe0f0bc6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rcc.h @@ -0,0 +1,515 @@ +/** + ****************************************************************************** + * @file stm32f2xx_rcc.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the RCC firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_RCC_H +#define __STM32F2xx_RCC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup RCC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +typedef struct +{ + uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency expressed in Hz */ + uint32_t HCLK_Frequency; /*!< HCLK clock frequency expressed in Hz */ + uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency expressed in Hz */ + uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency expressed in Hz */ +}RCC_ClocksTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Constants + * @{ + */ + +/** @defgroup RCC_HSE_configuration + * @{ + */ +#define RCC_HSE_OFF ((uint8_t)0x00) +#define RCC_HSE_ON ((uint8_t)0x01) +#define RCC_HSE_Bypass ((uint8_t)0x05) +#define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \ + ((HSE) == RCC_HSE_Bypass)) +/** + * @} + */ + +/** @defgroup RCC_PLL_Clock_Source + * @{ + */ +#define RCC_PLLSource_HSI ((uint32_t)0x00000000) +#define RCC_PLLSource_HSE ((uint32_t)0x00400000) +#define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI) || \ + ((SOURCE) == RCC_PLLSource_HSE)) +#define IS_RCC_PLLM_VALUE(VALUE) ((VALUE) <= 63) +#define IS_RCC_PLLN_VALUE(VALUE) ((192 <= (VALUE)) && ((VALUE) <= 432)) +#define IS_RCC_PLLP_VALUE(VALUE) (((VALUE) == 2) || ((VALUE) == 4) || ((VALUE) == 6) || ((VALUE) == 8)) +#define IS_RCC_PLLQ_VALUE(VALUE) ((4 <= (VALUE)) && ((VALUE) <= 15)) + +#define IS_RCC_PLLI2SN_VALUE(VALUE) ((192 <= (VALUE)) && ((VALUE) <= 432)) +#define IS_RCC_PLLI2SR_VALUE(VALUE) ((2 <= (VALUE)) && ((VALUE) <= 7)) +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source + * @{ + */ +#define RCC_SYSCLKSource_HSI ((uint32_t)0x00000000) +#define RCC_SYSCLKSource_HSE ((uint32_t)0x00000001) +#define RCC_SYSCLKSource_PLLCLK ((uint32_t)0x00000002) +#define IS_RCC_SYSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSource_HSI) || \ + ((SOURCE) == RCC_SYSCLKSource_HSE) || \ + ((SOURCE) == RCC_SYSCLKSource_PLLCLK)) +/** + * @} + */ + +/** @defgroup RCC_AHB_Clock_Source + * @{ + */ +#define RCC_SYSCLK_Div1 ((uint32_t)0x00000000) +#define RCC_SYSCLK_Div2 ((uint32_t)0x00000080) +#define RCC_SYSCLK_Div4 ((uint32_t)0x00000090) +#define RCC_SYSCLK_Div8 ((uint32_t)0x000000A0) +#define RCC_SYSCLK_Div16 ((uint32_t)0x000000B0) +#define RCC_SYSCLK_Div64 ((uint32_t)0x000000C0) +#define RCC_SYSCLK_Div128 ((uint32_t)0x000000D0) +#define RCC_SYSCLK_Div256 ((uint32_t)0x000000E0) +#define RCC_SYSCLK_Div512 ((uint32_t)0x000000F0) +#define IS_RCC_HCLK(HCLK) (((HCLK) == RCC_SYSCLK_Div1) || ((HCLK) == RCC_SYSCLK_Div2) || \ + ((HCLK) == RCC_SYSCLK_Div4) || ((HCLK) == RCC_SYSCLK_Div8) || \ + ((HCLK) == RCC_SYSCLK_Div16) || ((HCLK) == RCC_SYSCLK_Div64) || \ + ((HCLK) == RCC_SYSCLK_Div128) || ((HCLK) == RCC_SYSCLK_Div256) || \ + ((HCLK) == RCC_SYSCLK_Div512)) +/** + * @} + */ + +/** @defgroup RCC_APB1_APB2_Clock_Source + * @{ + */ +#define RCC_HCLK_Div1 ((uint32_t)0x00000000) +#define RCC_HCLK_Div2 ((uint32_t)0x00001000) +#define RCC_HCLK_Div4 ((uint32_t)0x00001400) +#define RCC_HCLK_Div8 ((uint32_t)0x00001800) +#define RCC_HCLK_Div16 ((uint32_t)0x00001C00) +#define IS_RCC_PCLK(PCLK) (((PCLK) == RCC_HCLK_Div1) || ((PCLK) == RCC_HCLK_Div2) || \ + ((PCLK) == RCC_HCLK_Div4) || ((PCLK) == RCC_HCLK_Div8) || \ + ((PCLK) == RCC_HCLK_Div16)) +/** + * @} + */ + +/** @defgroup RCC_Interrupt_Source + * @{ + */ +#define RCC_IT_LSIRDY ((uint8_t)0x01) +#define RCC_IT_LSERDY ((uint8_t)0x02) +#define RCC_IT_HSIRDY ((uint8_t)0x04) +#define RCC_IT_HSERDY ((uint8_t)0x08) +#define RCC_IT_PLLRDY ((uint8_t)0x10) +#define RCC_IT_PLLI2SRDY ((uint8_t)0x20) +#define RCC_IT_CSS ((uint8_t)0x80) +#define IS_RCC_IT(IT) ((((IT) & (uint8_t)0xC0) == 0x00) && ((IT) != 0x00)) +#define IS_RCC_GET_IT(IT) (((IT) == RCC_IT_LSIRDY) || ((IT) == RCC_IT_LSERDY) || \ + ((IT) == RCC_IT_HSIRDY) || ((IT) == RCC_IT_HSERDY) || \ + ((IT) == RCC_IT_PLLRDY) || ((IT) == RCC_IT_CSS) || \ + ((IT) == RCC_IT_PLLI2SRDY)) +#define IS_RCC_CLEAR_IT(IT) ((((IT) & (uint8_t)0x40) == 0x00) && ((IT) != 0x00)) +/** + * @} + */ + +/** @defgroup RCC_LSE_Configuration + * @{ + */ +#define RCC_LSE_OFF ((uint8_t)0x00) +#define RCC_LSE_ON ((uint8_t)0x01) +#define RCC_LSE_Bypass ((uint8_t)0x04) +#define IS_RCC_LSE(LSE) (((LSE) == RCC_LSE_OFF) || ((LSE) == RCC_LSE_ON) || \ + ((LSE) == RCC_LSE_Bypass)) +/** + * @} + */ + +/** @defgroup RCC_RTC_Clock_Source + * @{ + */ +#define RCC_RTCCLKSource_LSE ((uint32_t)0x00000100) +#define RCC_RTCCLKSource_LSI ((uint32_t)0x00000200) +#define RCC_RTCCLKSource_HSE_Div2 ((uint32_t)0x00020300) +#define RCC_RTCCLKSource_HSE_Div3 ((uint32_t)0x00030300) +#define RCC_RTCCLKSource_HSE_Div4 ((uint32_t)0x00040300) +#define RCC_RTCCLKSource_HSE_Div5 ((uint32_t)0x00050300) +#define RCC_RTCCLKSource_HSE_Div6 ((uint32_t)0x00060300) +#define RCC_RTCCLKSource_HSE_Div7 ((uint32_t)0x00070300) +#define RCC_RTCCLKSource_HSE_Div8 ((uint32_t)0x00080300) +#define RCC_RTCCLKSource_HSE_Div9 ((uint32_t)0x00090300) +#define RCC_RTCCLKSource_HSE_Div10 ((uint32_t)0x000A0300) +#define RCC_RTCCLKSource_HSE_Div11 ((uint32_t)0x000B0300) +#define RCC_RTCCLKSource_HSE_Div12 ((uint32_t)0x000C0300) +#define RCC_RTCCLKSource_HSE_Div13 ((uint32_t)0x000D0300) +#define RCC_RTCCLKSource_HSE_Div14 ((uint32_t)0x000E0300) +#define RCC_RTCCLKSource_HSE_Div15 ((uint32_t)0x000F0300) +#define RCC_RTCCLKSource_HSE_Div16 ((uint32_t)0x00100300) +#define RCC_RTCCLKSource_HSE_Div17 ((uint32_t)0x00110300) +#define RCC_RTCCLKSource_HSE_Div18 ((uint32_t)0x00120300) +#define RCC_RTCCLKSource_HSE_Div19 ((uint32_t)0x00130300) +#define RCC_RTCCLKSource_HSE_Div20 ((uint32_t)0x00140300) +#define RCC_RTCCLKSource_HSE_Div21 ((uint32_t)0x00150300) +#define RCC_RTCCLKSource_HSE_Div22 ((uint32_t)0x00160300) +#define RCC_RTCCLKSource_HSE_Div23 ((uint32_t)0x00170300) +#define RCC_RTCCLKSource_HSE_Div24 ((uint32_t)0x00180300) +#define RCC_RTCCLKSource_HSE_Div25 ((uint32_t)0x00190300) +#define RCC_RTCCLKSource_HSE_Div26 ((uint32_t)0x001A0300) +#define RCC_RTCCLKSource_HSE_Div27 ((uint32_t)0x001B0300) +#define RCC_RTCCLKSource_HSE_Div28 ((uint32_t)0x001C0300) +#define RCC_RTCCLKSource_HSE_Div29 ((uint32_t)0x001D0300) +#define RCC_RTCCLKSource_HSE_Div30 ((uint32_t)0x001E0300) +#define RCC_RTCCLKSource_HSE_Div31 ((uint32_t)0x001F0300) +#define IS_RCC_RTCCLK_SOURCE(SOURCE) (((SOURCE) == RCC_RTCCLKSource_LSE) || \ + ((SOURCE) == RCC_RTCCLKSource_LSI) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div2) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div3) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div4) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div5) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div6) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div7) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div8) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div9) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div10) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div11) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div12) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div13) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div14) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div15) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div16) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div17) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div18) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div19) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div20) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div21) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div22) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div23) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div24) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div25) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div26) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div27) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div28) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div29) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div30) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div31)) +/** + * @} + */ + +/** @defgroup RCC_I2S_Clock_Source + * @{ + */ +#define RCC_I2S2CLKSource_PLLI2S ((uint8_t)0x00) +#define RCC_I2S2CLKSource_Ext ((uint8_t)0x01) + +#define IS_RCC_I2SCLK_SOURCE(SOURCE) (((SOURCE) == RCC_I2S2CLKSource_PLLI2S) || ((SOURCE) == RCC_I2S2CLKSource_Ext)) +/** + * @} + */ + +/** @defgroup RCC_AHB1_Peripherals + * @{ + */ +#define RCC_AHB1Periph_GPIOA ((uint32_t)0x00000001) +#define RCC_AHB1Periph_GPIOB ((uint32_t)0x00000002) +#define RCC_AHB1Periph_GPIOC ((uint32_t)0x00000004) +#define RCC_AHB1Periph_GPIOD ((uint32_t)0x00000008) +#define RCC_AHB1Periph_GPIOE ((uint32_t)0x00000010) +#define RCC_AHB1Periph_GPIOF ((uint32_t)0x00000020) +#define RCC_AHB1Periph_GPIOG ((uint32_t)0x00000040) +#define RCC_AHB1Periph_GPIOH ((uint32_t)0x00000080) +#define RCC_AHB1Periph_GPIOI ((uint32_t)0x00000100) +#define RCC_AHB1Periph_CRC ((uint32_t)0x00001000) +#define RCC_AHB1Periph_FLITF ((uint32_t)0x00008000) +#define RCC_AHB1Periph_SRAM1 ((uint32_t)0x00010000) +#define RCC_AHB1Periph_SRAM2 ((uint32_t)0x00020000) +#define RCC_AHB1Periph_BKPSRAM ((uint32_t)0x00040000) +#define RCC_AHB1Periph_DMA1 ((uint32_t)0x00200000) +#define RCC_AHB1Periph_DMA2 ((uint32_t)0x00400000) +#define RCC_AHB1Periph_ETH_MAC ((uint32_t)0x02000000) +#define RCC_AHB1Periph_ETH_MAC_Tx ((uint32_t)0x04000000) +#define RCC_AHB1Periph_ETH_MAC_Rx ((uint32_t)0x08000000) +#define RCC_AHB1Periph_ETH_MAC_PTP ((uint32_t)0x10000000) +#define RCC_AHB1Periph_OTG_HS ((uint32_t)0x20000000) +#define RCC_AHB1Periph_OTG_HS_ULPI ((uint32_t)0x40000000) +#define IS_RCC_AHB1_CLOCK_PERIPH(PERIPH) ((((PERIPH) & 0x819BEE00) == 0x00) && ((PERIPH) != 0x00)) +#define IS_RCC_AHB1_RESET_PERIPH(PERIPH) ((((PERIPH) & 0xDD9FEE00) == 0x00) && ((PERIPH) != 0x00)) +#define IS_RCC_AHB1_LPMODE_PERIPH(PERIPH) ((((PERIPH) & 0x81986E00) == 0x00) && ((PERIPH) != 0x00)) +/** + * @} + */ + +/** @defgroup RCC_AHB2_Peripherals + * @{ + */ +#define RCC_AHB2Periph_DCMI ((uint32_t)0x00000001) +#define RCC_AHB2Periph_CRYP ((uint32_t)0x00000010) +#define RCC_AHB2Periph_HASH ((uint32_t)0x00000020) +#define RCC_AHB2Periph_RNG ((uint32_t)0x00000040) +#define RCC_AHB2Periph_OTG_FS ((uint32_t)0x00000080) +#define IS_RCC_AHB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFF0E) == 0x00) && ((PERIPH) != 0x00)) +/** + * @} + */ + +/** @defgroup RCC_AHB3_Peripherals + * @{ + */ +#define RCC_AHB3Periph_FSMC ((uint32_t)0x00000001) +#define IS_RCC_AHB3_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFFFE) == 0x00) && ((PERIPH) != 0x00)) +/** + * @} + */ + +/** @defgroup RCC_APB1_Peripherals + * @{ + */ +#define RCC_APB1Periph_TIM2 ((uint32_t)0x00000001) +#define RCC_APB1Periph_TIM3 ((uint32_t)0x00000002) +#define RCC_APB1Periph_TIM4 ((uint32_t)0x00000004) +#define RCC_APB1Periph_TIM5 ((uint32_t)0x00000008) +#define RCC_APB1Periph_TIM6 ((uint32_t)0x00000010) +#define RCC_APB1Periph_TIM7 ((uint32_t)0x00000020) +#define RCC_APB1Periph_TIM12 ((uint32_t)0x00000040) +#define RCC_APB1Periph_TIM13 ((uint32_t)0x00000080) +#define RCC_APB1Periph_TIM14 ((uint32_t)0x00000100) +#define RCC_APB1Periph_WWDG ((uint32_t)0x00000800) +#define RCC_APB1Periph_SPI2 ((uint32_t)0x00004000) +#define RCC_APB1Periph_SPI3 ((uint32_t)0x00008000) +#define RCC_APB1Periph_USART2 ((uint32_t)0x00020000) +#define RCC_APB1Periph_USART3 ((uint32_t)0x00040000) +#define RCC_APB1Periph_UART4 ((uint32_t)0x00080000) +#define RCC_APB1Periph_UART5 ((uint32_t)0x00100000) +#define RCC_APB1Periph_I2C1 ((uint32_t)0x00200000) +#define RCC_APB1Periph_I2C2 ((uint32_t)0x00400000) +#define RCC_APB1Periph_I2C3 ((uint32_t)0x00800000) +#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000) +#define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000) +#define RCC_APB1Periph_PWR ((uint32_t)0x10000000) +#define RCC_APB1Periph_DAC ((uint32_t)0x20000000) +#define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0xC9013600) == 0x00) && ((PERIPH) != 0x00)) +/** + * @} + */ + +/** @defgroup RCC_APB2_Peripherals + * @{ + */ +#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000001) +#define RCC_APB2Periph_TIM8 ((uint32_t)0x00000002) +#define RCC_APB2Periph_USART1 ((uint32_t)0x00000010) +#define RCC_APB2Periph_USART6 ((uint32_t)0x00000020) +#define RCC_APB2Periph_ADC ((uint32_t)0x00000100) +#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000100) +#define RCC_APB2Periph_ADC2 ((uint32_t)0x00000200) +#define RCC_APB2Periph_ADC3 ((uint32_t)0x00000400) +#define RCC_APB2Periph_SDIO ((uint32_t)0x00000800) +#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000) +#define RCC_APB2Periph_SYSCFG ((uint32_t)0x00004000) +#define RCC_APB2Periph_TIM9 ((uint32_t)0x00010000) +#define RCC_APB2Periph_TIM10 ((uint32_t)0x00020000) +#define RCC_APB2Periph_TIM11 ((uint32_t)0x00040000) +#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFF8A0CC) == 0x00) && ((PERIPH) != 0x00)) +#define IS_RCC_APB2_RESET_PERIPH(PERIPH) ((((PERIPH) & 0xFFF8A6CC) == 0x00) && ((PERIPH) != 0x00)) +/** + * @} + */ + +/** @defgroup RCC_MCO1_Clock_Source_Prescaler + * @{ + */ +#define RCC_MCO1Source_HSI ((uint32_t)0x00000000) +#define RCC_MCO1Source_LSE ((uint32_t)0x00200000) +#define RCC_MCO1Source_HSE ((uint32_t)0x00400000) +#define RCC_MCO1Source_PLLCLK ((uint32_t)0x00600000) +#define RCC_MCO1Div_1 ((uint32_t)0x00000000) +#define RCC_MCO1Div_2 ((uint32_t)0x04000000) +#define RCC_MCO1Div_3 ((uint32_t)0x05000000) +#define RCC_MCO1Div_4 ((uint32_t)0x06000000) +#define RCC_MCO1Div_5 ((uint32_t)0x07000000) +#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1Source_HSI) || ((SOURCE) == RCC_MCO1Source_LSE) || \ + ((SOURCE) == RCC_MCO1Source_HSE) || ((SOURCE) == RCC_MCO1Source_PLLCLK)) + +#define IS_RCC_MCO1DIV(DIV) (((DIV) == RCC_MCO1Div_1) || ((DIV) == RCC_MCO1Div_2) || \ + ((DIV) == RCC_MCO1Div_3) || ((DIV) == RCC_MCO1Div_4) || \ + ((DIV) == RCC_MCO1Div_5)) +/** + * @} + */ + +/** @defgroup RCC_MCO2_Clock_Source_Prescaler + * @{ + */ +#define RCC_MCO2Source_SYSCLK ((uint32_t)0x00000000) +#define RCC_MCO2Source_PLLI2SCLK ((uint32_t)0x40000000) +#define RCC_MCO2Source_HSE ((uint32_t)0x80000000) +#define RCC_MCO2Source_PLLCLK ((uint32_t)0xC0000000) +#define RCC_MCO2Div_1 ((uint32_t)0x00000000) +#define RCC_MCO2Div_2 ((uint32_t)0x20000000) +#define RCC_MCO2Div_3 ((uint32_t)0x28000000) +#define RCC_MCO2Div_4 ((uint32_t)0x30000000) +#define RCC_MCO2Div_5 ((uint32_t)0x38000000) +#define IS_RCC_MCO2SOURCE(SOURCE) (((SOURCE) == RCC_MCO2Source_SYSCLK) || ((SOURCE) == RCC_MCO2Source_PLLI2SCLK)|| \ + ((SOURCE) == RCC_MCO2Source_HSE) || ((SOURCE) == RCC_MCO2Source_PLLCLK)) + +#define IS_RCC_MCO2DIV(DIV) (((DIV) == RCC_MCO2Div_1) || ((DIV) == RCC_MCO2Div_2) || \ + ((DIV) == RCC_MCO2Div_3) || ((DIV) == RCC_MCO2Div_4) || \ + ((DIV) == RCC_MCO2Div_5)) +/** + * @} + */ + +/** @defgroup RCC_Flag + * @{ + */ +#define RCC_FLAG_HSIRDY ((uint8_t)0x21) +#define RCC_FLAG_HSERDY ((uint8_t)0x31) +#define RCC_FLAG_PLLRDY ((uint8_t)0x39) +#define RCC_FLAG_PLLI2SRDY ((uint8_t)0x3B) +#define RCC_FLAG_LSERDY ((uint8_t)0x41) +#define RCC_FLAG_LSIRDY ((uint8_t)0x61) +#define RCC_FLAG_BORRST ((uint8_t)0x79) +#define RCC_FLAG_PINRST ((uint8_t)0x7A) +#define RCC_FLAG_PORRST ((uint8_t)0x7B) +#define RCC_FLAG_SFTRST ((uint8_t)0x7C) +#define RCC_FLAG_IWDGRST ((uint8_t)0x7D) +#define RCC_FLAG_WWDGRST ((uint8_t)0x7E) +#define RCC_FLAG_LPWRRST ((uint8_t)0x7F) +#define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \ + ((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \ + ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_BORRST) || \ + ((FLAG) == RCC_FLAG_PINRST) || ((FLAG) == RCC_FLAG_PORRST) || \ + ((FLAG) == RCC_FLAG_SFTRST) || ((FLAG) == RCC_FLAG_IWDGRST)|| \ + ((FLAG) == RCC_FLAG_WWDGRST)|| ((FLAG) == RCC_FLAG_LPWRRST)|| \ + ((FLAG) == RCC_FLAG_PLLI2SRDY)) +#define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1F) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the RCC clock configuration to the default reset state */ +void RCC_DeInit(void); + +/* Internal/external clocks, PLL, CSS and MCO configuration functions *********/ +void RCC_HSEConfig(uint8_t RCC_HSE); +ErrorStatus RCC_WaitForHSEStartUp(void); +void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue); +void RCC_HSICmd(FunctionalState NewState); +void RCC_LSEConfig(uint8_t RCC_LSE); +void RCC_LSICmd(FunctionalState NewState); + +void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ); +void RCC_PLLCmd(FunctionalState NewState); +void RCC_PLLI2SConfig(uint32_t PLLI2SN, uint32_t PLLI2SR); +void RCC_PLLI2SCmd(FunctionalState NewState); + +void RCC_ClockSecuritySystemCmd(FunctionalState NewState); +void RCC_MCO1Config(uint32_t RCC_MCO1Source, uint32_t RCC_MCO1Div); +void RCC_MCO2Config(uint32_t RCC_MCO2Source, uint32_t RCC_MCO2Div); + +/* System, AHB and APB busses clocks configuration functions ******************/ +void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource); +uint8_t RCC_GetSYSCLKSource(void); +void RCC_HCLKConfig(uint32_t RCC_SYSCLK); +void RCC_PCLK1Config(uint32_t RCC_HCLK); +void RCC_PCLK2Config(uint32_t RCC_HCLK); +void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks); + +/* Peripheral clocks configuration functions **********************************/ +void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource); +void RCC_RTCCLKCmd(FunctionalState NewState); +void RCC_BackupResetCmd(FunctionalState NewState); +void RCC_I2SCLKConfig(uint32_t RCC_I2SCLKSource); + +void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState); +void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState); +void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState); +void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); +void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); + +void RCC_AHB1PeriphResetCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState); +void RCC_AHB2PeriphResetCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState); +void RCC_AHB3PeriphResetCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState); +void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); +void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); + +void RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState); +void RCC_AHB2PeriphClockLPModeCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState); +void RCC_AHB3PeriphClockLPModeCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState); +void RCC_APB1PeriphClockLPModeCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); +void RCC_APB2PeriphClockLPModeCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); + +/* Interrupts and flags management functions **********************************/ +void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState); +FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG); +void RCC_ClearFlag(void); +ITStatus RCC_GetITStatus(uint8_t RCC_IT); +void RCC_ClearITPendingBit(uint8_t RCC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_RCC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rng.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rng.h new file mode 100644 index 000000000..c2b52e686 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rng.h @@ -0,0 +1,120 @@ +/** + ****************************************************************************** + * @file stm32f2xx_rng.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the Random + * Number Generator(RNG) firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_RNG_H +#define __STM32F2xx_RNG_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup RNG + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup RNG_Exported_Constants + * @{ + */ + +/** @defgroup RNG_flags_definition + * @{ + */ +#define RNG_FLAG_DRDY ((uint8_t)0x0001) /*!< Data ready */ +#define RNG_FLAG_CECS ((uint8_t)0x0002) /*!< Clock error current status */ +#define RNG_FLAG_SECS ((uint8_t)0x0004) /*!< Seed error current status */ + +#define IS_RNG_GET_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_DRDY) || \ + ((RNG_FLAG) == RNG_FLAG_CECS) || \ + ((RNG_FLAG) == RNG_FLAG_SECS)) +#define IS_RNG_CLEAR_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_CECS) || \ + ((RNG_FLAG) == RNG_FLAG_SECS)) +/** + * @} + */ + +/** @defgroup RNG_interrupts_definition + * @{ + */ +#define RNG_IT_CEI ((uint8_t)0x20) /*!< Clock error interrupt */ +#define RNG_IT_SEI ((uint8_t)0x40) /*!< Seed error interrupt */ + +#define IS_RNG_IT(IT) ((((IT) & (uint8_t)0x9F) == 0x00) && ((IT) != 0x00)) +#define IS_RNG_GET_IT(RNG_IT) (((RNG_IT) == RNG_IT_CEI) || ((RNG_IT) == RNG_IT_SEI)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the RNG configuration to the default reset state *****/ +void RNG_DeInit(void); + +/* Configuration function *****************************************************/ +void RNG_Cmd(FunctionalState NewState); + +/* Get 32 bit Random number function ******************************************/ +uint32_t RNG_GetRandomNumber(void); + +/* Interrupts and flags management functions **********************************/ +void RNG_ITConfig(FunctionalState NewState); +FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG); +void RNG_ClearFlag(uint8_t RNG_FLAG); +ITStatus RNG_GetITStatus(uint8_t RNG_IT); +void RNG_ClearITPendingBit(uint8_t RNG_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_RNG_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rtc.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rtc.h new file mode 100644 index 000000000..3cb7e2020 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rtc.h @@ -0,0 +1,650 @@ +/** + ****************************************************************************** + * @file stm32f2xx_rtc.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the RTC firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_RTC_H +#define __STM32F2xx_RTC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup RTC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief RTC Init structures definition + */ +typedef struct +{ + uint32_t RTC_HourFormat; /*!< Specifies the RTC Hour Format. + This parameter can be a value of @ref RTC_Hour_Formats */ + + uint32_t RTC_AsynchPrediv; /*!< Specifies the RTC Asynchronous Predivider value. + This parameter must be set to a value lower than 0x7F */ + + uint32_t RTC_SynchPrediv; /*!< Specifies the RTC Synchronous Predivider value. + This parameter must be set to a value lower than 0x1FFF */ +}RTC_InitTypeDef; + +/** + * @brief RTC Time structure definition + */ +typedef struct +{ + uint8_t RTC_Hours; /*!< Specifies the RTC Time Hour. + This parameter must be set to a value in the 0-12 range + if the RTC_HourFormat_12 is selected or 0-23 range if + the RTC_HourFormat_24 is selected. */ + + uint8_t RTC_Minutes; /*!< Specifies the RTC Time Minutes. + This parameter must be set to a value in the 0-59 range. */ + + uint8_t RTC_Seconds; /*!< Specifies the RTC Time Seconds. + This parameter must be set to a value in the 0-59 range. */ + + uint8_t RTC_H12; /*!< Specifies the RTC AM/PM Time. + This parameter can be a value of @ref RTC_AM_PM_Definitions */ +}RTC_TimeTypeDef; + +/** + * @brief RTC Date structure definition + */ +typedef struct +{ + uint8_t RTC_WeekDay; /*!< Specifies the RTC Date WeekDay. + This parameter can be a value of @ref RTC_WeekDay_Definitions */ + + uint8_t RTC_Month; /*!< Specifies the RTC Date Month (in BCD format). + This parameter can be a value of @ref RTC_Month_Date_Definitions */ + + uint8_t RTC_Date; /*!< Specifies the RTC Date. + This parameter must be set to a value in the 1-31 range. */ + + uint8_t RTC_Year; /*!< Specifies the RTC Date Year. + This parameter must be set to a value in the 0-99 range. */ +}RTC_DateTypeDef; + +/** + * @brief RTC Alarm structure definition + */ +typedef struct +{ + RTC_TimeTypeDef RTC_AlarmTime; /*!< Specifies the RTC Alarm Time members. */ + + uint32_t RTC_AlarmMask; /*!< Specifies the RTC Alarm Masks. + This parameter can be a value of @ref RTC_AlarmMask_Definitions */ + + uint32_t RTC_AlarmDateWeekDaySel; /*!< Specifies the RTC Alarm is on Date or WeekDay. + This parameter can be a value of @ref RTC_AlarmDateWeekDay_Definitions */ + + uint8_t RTC_AlarmDateWeekDay; /*!< Specifies the RTC Alarm Date/WeekDay. + If the Alarm Date is selected, this parameter + must be set to a value in the 1-31 range. + If the Alarm WeekDay is selected, this + parameter can be a value of @ref RTC_WeekDay_Definitions */ +}RTC_AlarmTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup RTC_Exported_Constants + * @{ + */ + + +/** @defgroup RTC_Hour_Formats + * @{ + */ +#define RTC_HourFormat_24 ((uint32_t)0x00000000) +#define RTC_HourFormat_12 ((uint32_t)0x00000040) +#define IS_RTC_HOUR_FORMAT(FORMAT) (((FORMAT) == RTC_HourFormat_12) || \ + ((FORMAT) == RTC_HourFormat_24)) +/** + * @} + */ + +/** @defgroup RTC_Asynchronous_Predivider + * @{ + */ +#define IS_RTC_ASYNCH_PREDIV(PREDIV) ((PREDIV) <= 0x7F) + +/** + * @} + */ + + +/** @defgroup RTC_Synchronous_Predivider + * @{ + */ +#define IS_RTC_SYNCH_PREDIV(PREDIV) ((PREDIV) <= 0x1FFF) + +/** + * @} + */ + +/** @defgroup RTC_Time_Definitions + * @{ + */ +#define IS_RTC_HOUR12(HOUR) (((HOUR) > 0) && ((HOUR) <= 12)) +#define IS_RTC_HOUR24(HOUR) ((HOUR) <= 23) +#define IS_RTC_MINUTES(MINUTES) ((MINUTES) <= 59) +#define IS_RTC_SECONDS(SECONDS) ((SECONDS) <= 59) + +/** + * @} + */ + +/** @defgroup RTC_AM_PM_Definitions + * @{ + */ +#define RTC_H12_AM ((uint8_t)0x00) +#define RTC_H12_PM ((uint8_t)0x40) +#define IS_RTC_H12(PM) (((PM) == RTC_H12_AM) || ((PM) == RTC_H12_PM)) + +/** + * @} + */ + +/** @defgroup RTC_Year_Date_Definitions + * @{ + */ +#define IS_RTC_YEAR(YEAR) ((YEAR) <= 99) + +/** + * @} + */ + +/** @defgroup RTC_Month_Date_Definitions + * @{ + */ + +/* Coded in BCD format */ +#define RTC_Month_January ((uint8_t)0x01) +#define RTC_Month_February ((uint8_t)0x02) +#define RTC_Month_March ((uint8_t)0x03) +#define RTC_Month_April ((uint8_t)0x04) +#define RTC_Month_May ((uint8_t)0x05) +#define RTC_Month_June ((uint8_t)0x06) +#define RTC_Month_July ((uint8_t)0x07) +#define RTC_Month_August ((uint8_t)0x08) +#define RTC_Month_September ((uint8_t)0x09) +#define RTC_Month_October ((uint8_t)0x10) +#define RTC_Month_November ((uint8_t)0x11) +#define RTC_Month_December ((uint8_t)0x12) +#define IS_RTC_MONTH(MONTH) (((MONTH) >= 1) && ((MONTH) <= 12)) +#define IS_RTC_DATE(DATE) (((DATE) >= 1) && ((DATE) <= 31)) + +/** + * @} + */ + +/** @defgroup RTC_WeekDay_Definitions + * @{ + */ + +#define RTC_Weekday_Monday ((uint8_t)0x01) +#define RTC_Weekday_Tuesday ((uint8_t)0x02) +#define RTC_Weekday_Wednesday ((uint8_t)0x03) +#define RTC_Weekday_Thursday ((uint8_t)0x04) +#define RTC_Weekday_Friday ((uint8_t)0x05) +#define RTC_Weekday_Saturday ((uint8_t)0x06) +#define RTC_Weekday_Sunday ((uint8_t)0x07) +#define IS_RTC_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_Weekday_Monday) || \ + ((WEEKDAY) == RTC_Weekday_Tuesday) || \ + ((WEEKDAY) == RTC_Weekday_Wednesday) || \ + ((WEEKDAY) == RTC_Weekday_Thursday) || \ + ((WEEKDAY) == RTC_Weekday_Friday) || \ + ((WEEKDAY) == RTC_Weekday_Saturday) || \ + ((WEEKDAY) == RTC_Weekday_Sunday)) +/** + * @} + */ + + +/** @defgroup RTC_Alarm_Definitions + * @{ + */ +#define IS_RTC_ALARM_DATE_WEEKDAY_DATE(DATE) (((DATE) > 0) && ((DATE) <= 31)) +#define IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_Weekday_Monday) || \ + ((WEEKDAY) == RTC_Weekday_Tuesday) || \ + ((WEEKDAY) == RTC_Weekday_Wednesday) || \ + ((WEEKDAY) == RTC_Weekday_Thursday) || \ + ((WEEKDAY) == RTC_Weekday_Friday) || \ + ((WEEKDAY) == RTC_Weekday_Saturday) || \ + ((WEEKDAY) == RTC_Weekday_Sunday)) + +/** + * @} + */ + + +/** @defgroup RTC_AlarmDateWeekDay_Definitions + * @{ + */ +#define RTC_AlarmDateWeekDaySel_Date ((uint32_t)0x00000000) +#define RTC_AlarmDateWeekDaySel_WeekDay ((uint32_t)0x40000000) + +#define IS_RTC_ALARM_DATE_WEEKDAY_SEL(SEL) (((SEL) == RTC_AlarmDateWeekDaySel_Date) || \ + ((SEL) == RTC_AlarmDateWeekDaySel_WeekDay)) + +/** + * @} + */ + + +/** @defgroup RTC_AlarmMask_Definitions + * @{ + */ +#define RTC_AlarmMask_None ((uint32_t)0x00000000) +#define RTC_AlarmMask_DateWeekDay ((uint32_t)0x80000000) +#define RTC_AlarmMask_Hours ((uint32_t)0x00800000) +#define RTC_AlarmMask_Minutes ((uint32_t)0x00008000) +#define RTC_AlarmMask_Seconds ((uint32_t)0x00000080) +#define RTC_AlarmMask_All ((uint32_t)0x80808080) +#define IS_ALARM_MASK(MASK) (((MASK) & 0x7F7F7F7F) == (uint32_t)RESET) + +/** + * @} + */ + +/** @defgroup RTC_Alarms_Definitions + * @{ + */ +#define RTC_Alarm_A ((uint32_t)0x00000100) +#define RTC_Alarm_B ((uint32_t)0x00000200) +#define IS_RTC_ALARM(ALARM) (((ALARM) == RTC_Alarm_A) || ((ALARM) == RTC_Alarm_B)) +#define IS_RTC_CMD_ALARM(ALARM) (((ALARM) & (RTC_Alarm_A | RTC_Alarm_B)) != (uint32_t)RESET) + +/** + * @} + */ + +/** @defgroup RTC_Wakeup_Timer_Definitions + * @{ + */ +#define RTC_WakeUpClock_RTCCLK_Div16 ((uint32_t)0x00000000) +#define RTC_WakeUpClock_RTCCLK_Div8 ((uint32_t)0x00000001) +#define RTC_WakeUpClock_RTCCLK_Div4 ((uint32_t)0x00000002) +#define RTC_WakeUpClock_RTCCLK_Div2 ((uint32_t)0x00000003) +#define RTC_WakeUpClock_CK_SPRE_16bits ((uint32_t)0x00000004) +#define RTC_WakeUpClock_CK_SPRE_17bits ((uint32_t)0x00000006) +#define IS_RTC_WAKEUP_CLOCK(CLOCK) (((CLOCK) == RTC_WakeUpClock_RTCCLK_Div16) || \ + ((CLOCK) == RTC_WakeUpClock_RTCCLK_Div8) || \ + ((CLOCK) == RTC_WakeUpClock_RTCCLK_Div4) || \ + ((CLOCK) == RTC_WakeUpClock_RTCCLK_Div2) || \ + ((CLOCK) == RTC_WakeUpClock_CK_SPRE_16bits) || \ + ((CLOCK) == RTC_WakeUpClock_CK_SPRE_17bits)) +#define IS_RTC_WAKEUP_COUNTER(COUNTER) ((COUNTER) <= 0xFFFF) +/** + * @} + */ + +/** @defgroup RTC_Time_Stamp_Edges_definitions + * @{ + */ +#define RTC_TimeStampEdge_Rising ((uint32_t)0x00000000) +#define RTC_TimeStampEdge_Falling ((uint32_t)0x00000008) +#define IS_RTC_TIMESTAMP_EDGE(EDGE) (((EDGE) == RTC_TimeStampEdge_Rising) || \ + ((EDGE) == RTC_TimeStampEdge_Falling)) +/** + * @} + */ + +/** @defgroup RTC_Output_selection_Definitions + * @{ + */ +#define RTC_Output_Disable ((uint32_t)0x00000000) +#define RTC_Output_AlarmA ((uint32_t)0x00200000) +#define RTC_Output_AlarmB ((uint32_t)0x00400000) +#define RTC_Output_WakeUp ((uint32_t)0x00600000) + +#define IS_RTC_OUTPUT(OUTPUT) (((OUTPUT) == RTC_Output_Disable) || \ + ((OUTPUT) == RTC_Output_AlarmA) || \ + ((OUTPUT) == RTC_Output_AlarmB) || \ + ((OUTPUT) == RTC_Output_WakeUp)) + +/** + * @} + */ + +/** @defgroup RTC_Output_Polarity_Definitions + * @{ + */ +#define RTC_OutputPolarity_High ((uint32_t)0x00000000) +#define RTC_OutputPolarity_Low ((uint32_t)0x00100000) +#define IS_RTC_OUTPUT_POL(POL) (((POL) == RTC_OutputPolarity_High) || \ + ((POL) == RTC_OutputPolarity_Low)) +/** + * @} + */ + + +/** @defgroup RTC_Digital_Calibration_Definitions + * @{ + */ +#define RTC_CalibSign_Positive ((uint32_t)0x00000000) +#define RTC_CalibSign_Negative ((uint32_t)0x00000080) +#define IS_RTC_CALIB_SIGN(SIGN) (((SIGN) == RTC_CalibSign_Positive) || \ + ((SIGN) == RTC_CalibSign_Negative)) +#define IS_RTC_CALIB_VALUE(VALUE) ((VALUE) < 0x20) + +/** + * @} + */ + + +/** @defgroup RTC_DayLightSaving_Definitions + * @{ + */ +#define RTC_DayLightSaving_SUB1H ((uint32_t)0x00020000) +#define RTC_DayLightSaving_ADD1H ((uint32_t)0x00010000) +#define IS_RTC_DAYLIGHT_SAVING(SAVE) (((SAVE) == RTC_DayLightSaving_SUB1H) || \ + ((SAVE) == RTC_DayLightSaving_ADD1H)) + +#define RTC_StoreOperation_Reset ((uint32_t)0x00000000) +#define RTC_StoreOperation_Set ((uint32_t)0x00040000) +#define IS_RTC_STORE_OPERATION(OPERATION) (((OPERATION) == RTC_StoreOperation_Reset) || \ + ((OPERATION) == RTC_StoreOperation_Set)) +/** + * @} + */ + +/** @defgroup RTC_Tamper_Trigger_Definitions + * @{ + */ +#define RTC_TamperTrigger_RisingEdge ((uint32_t)0x00000000) +#define RTC_TamperTrigger_FallingEdge ((uint32_t)0x00000001) +#define IS_RTC_TAMPER_TRIGGER(TRIGGER) (((TRIGGER) == RTC_TamperTrigger_RisingEdge) || \ + ((TRIGGER) == RTC_TamperTrigger_FallingEdge)) + +/** + * @} + */ + +/** @defgroup RTC_Tamper_Pins_Definitions + * @{ + */ +#define RTC_Tamper_1 RTC_TAFCR_TAMP1E +#define IS_RTC_TAMPER(TAMPER) (((TAMPER) == RTC_Tamper_1)) + +/** + * @} + */ + +/** @defgroup RTC_Tamper_Pin_Selection + * @{ + */ +#define RTC_TamperPin_PC13 ((uint32_t)0x00000000) +#define RTC_TamperPin_PI8 ((uint32_t)0x00010000) +#define IS_RTC_TAMPER_PIN(PIN) (((PIN) == RTC_TamperPin_PC13) || \ + ((PIN) == RTC_TamperPin_PI8)) +/** + * @} + */ + +/** @defgroup RTC_TimeStamp_Pin_Selection + * @{ + */ +#define RTC_TimeStampPin_PC13 ((uint32_t)0x00000000) +#define RTC_TimeStampPin_PI8 ((uint32_t)0x00020000) +#define IS_RTC_TIMESTAMP_PIN(PIN) (((PIN) == RTC_TimeStampPin_PC13) || \ + ((PIN) == RTC_TimeStampPin_PI8)) +/** + * @} + */ + +/** @defgroup RTC_Output_Type_ALARM_OUT + * @{ + */ +#define RTC_OutputType_OpenDrain ((uint32_t)0x00000000) +#define RTC_OutputType_PushPull ((uint32_t)0x00040000) +#define IS_RTC_OUTPUT_TYPE(TYPE) (((TYPE) == RTC_OutputType_OpenDrain) || \ + ((TYPE) == RTC_OutputType_PushPull)) + +/** + * @} + */ + +/** @defgroup RTC_Backup_Registers_Definitions + * @{ + */ + +#define RTC_BKP_DR0 ((uint32_t)0x00000000) +#define RTC_BKP_DR1 ((uint32_t)0x00000001) +#define RTC_BKP_DR2 ((uint32_t)0x00000002) +#define RTC_BKP_DR3 ((uint32_t)0x00000003) +#define RTC_BKP_DR4 ((uint32_t)0x00000004) +#define RTC_BKP_DR5 ((uint32_t)0x00000005) +#define RTC_BKP_DR6 ((uint32_t)0x00000006) +#define RTC_BKP_DR7 ((uint32_t)0x00000007) +#define RTC_BKP_DR8 ((uint32_t)0x00000008) +#define RTC_BKP_DR9 ((uint32_t)0x00000009) +#define RTC_BKP_DR10 ((uint32_t)0x0000000A) +#define RTC_BKP_DR11 ((uint32_t)0x0000000B) +#define RTC_BKP_DR12 ((uint32_t)0x0000000C) +#define RTC_BKP_DR13 ((uint32_t)0x0000000D) +#define RTC_BKP_DR14 ((uint32_t)0x0000000E) +#define RTC_BKP_DR15 ((uint32_t)0x0000000F) +#define RTC_BKP_DR16 ((uint32_t)0x00000010) +#define RTC_BKP_DR17 ((uint32_t)0x00000011) +#define RTC_BKP_DR18 ((uint32_t)0x00000012) +#define RTC_BKP_DR19 ((uint32_t)0x00000013) +#define IS_RTC_BKP(BKP) (((BKP) == RTC_BKP_DR0) || \ + ((BKP) == RTC_BKP_DR1) || \ + ((BKP) == RTC_BKP_DR2) || \ + ((BKP) == RTC_BKP_DR3) || \ + ((BKP) == RTC_BKP_DR4) || \ + ((BKP) == RTC_BKP_DR5) || \ + ((BKP) == RTC_BKP_DR6) || \ + ((BKP) == RTC_BKP_DR7) || \ + ((BKP) == RTC_BKP_DR8) || \ + ((BKP) == RTC_BKP_DR9) || \ + ((BKP) == RTC_BKP_DR10) || \ + ((BKP) == RTC_BKP_DR11) || \ + ((BKP) == RTC_BKP_DR12) || \ + ((BKP) == RTC_BKP_DR13) || \ + ((BKP) == RTC_BKP_DR14) || \ + ((BKP) == RTC_BKP_DR15) || \ + ((BKP) == RTC_BKP_DR16) || \ + ((BKP) == RTC_BKP_DR17) || \ + ((BKP) == RTC_BKP_DR18) || \ + ((BKP) == RTC_BKP_DR19)) +/** + * @} + */ + +/** @defgroup RTC_Input_parameter_format_definitions + * @{ + */ +#define RTC_Format_BIN ((uint32_t)0x000000000) +#define RTC_Format_BCD ((uint32_t)0x000000001) +#define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_Format_BIN) || ((FORMAT) == RTC_Format_BCD)) + +/** + * @} + */ + +/** @defgroup RTC_Flags_Definitions + * @{ + */ +#define RTC_FLAG_TAMP1F ((uint32_t)0x00002000) +#define RTC_FLAG_TSOVF ((uint32_t)0x00001000) +#define RTC_FLAG_TSF ((uint32_t)0x00000800) +#define RTC_FLAG_WUTF ((uint32_t)0x00000400) +#define RTC_FLAG_ALRBF ((uint32_t)0x00000200) +#define RTC_FLAG_ALRAF ((uint32_t)0x00000100) +#define RTC_FLAG_INITF ((uint32_t)0x00000040) +#define RTC_FLAG_RSF ((uint32_t)0x00000020) +#define RTC_FLAG_INITS ((uint32_t)0x00000010) +#define RTC_FLAG_WUTWF ((uint32_t)0x00000004) +#define RTC_FLAG_ALRBWF ((uint32_t)0x00000002) +#define RTC_FLAG_ALRAWF ((uint32_t)0x00000001) +#define IS_RTC_GET_FLAG(FLAG) (((FLAG) == RTC_FLAG_TSOVF) || ((FLAG) == RTC_FLAG_TSF) || \ + ((FLAG) == RTC_FLAG_WUTF) || ((FLAG) == RTC_FLAG_ALRBF) || \ + ((FLAG) == RTC_FLAG_ALRAF) || ((FLAG) == RTC_FLAG_INITF) || \ + ((FLAG) == RTC_FLAG_RSF) || ((FLAG) == RTC_FLAG_WUTWF) || \ + ((FLAG) == RTC_FLAG_ALRBWF) || ((FLAG) == RTC_FLAG_ALRAWF) || \ + ((FLAG) == RTC_FLAG_TAMP1F)) +#define IS_RTC_CLEAR_FLAG(FLAG) (((FLAG) != (uint32_t)RESET) && (((FLAG) & 0xFFFFC0DF) == (uint32_t)RESET)) + +/** + * @} + */ + +/** @defgroup RTC_Interrupts_Definitions + * @{ + */ +#define RTC_IT_TS ((uint32_t)0x00008000) +#define RTC_IT_WUT ((uint32_t)0x00004000) +#define RTC_IT_ALRB ((uint32_t)0x00002000) +#define RTC_IT_ALRA ((uint32_t)0x00001000) +#define RTC_IT_TAMP ((uint32_t)0x00000004) /* Used only to Enable the Tamper Interrupt */ +#define RTC_IT_TAMP1 ((uint32_t)0x00020000) + +#define IS_RTC_CONFIG_IT(IT) (((IT) != (uint32_t)RESET) && (((IT) & 0xFFFF0FFB) == (uint32_t)RESET)) +#define IS_RTC_GET_IT(IT) (((IT) == RTC_IT_TS) || ((IT) == RTC_IT_WUT) || \ + ((IT) == RTC_IT_ALRB) || ((IT) == RTC_IT_ALRA) || \ + ((IT) == RTC_IT_TAMP1)) +#define IS_RTC_CLEAR_IT(IT) (((IT) != (uint32_t)RESET) && (((IT) & 0xFFFD0FFF) == (uint32_t)RESET)) + +/** + * @} + */ + +/** @defgroup RTC_Legacy + * @{ + */ +#define RTC_DigitalCalibConfig RTC_CoarseCalibConfig +#define RTC_DigitalCalibCmd RTC_CoarseCalibCmd + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the RTC configuration to the default reset state *****/ +ErrorStatus RTC_DeInit(void); + +/* Initialization and Configuration functions *********************************/ +ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct); +void RTC_StructInit(RTC_InitTypeDef* RTC_InitStruct); +void RTC_WriteProtectionCmd(FunctionalState NewState); +ErrorStatus RTC_EnterInitMode(void); +void RTC_ExitInitMode(void); +ErrorStatus RTC_WaitForSynchro(void); +ErrorStatus RTC_RefClockCmd(FunctionalState NewState); + +/* Time and Date configuration functions **************************************/ +ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct); +void RTC_TimeStructInit(RTC_TimeTypeDef* RTC_TimeStruct); +void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct); +ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct); +void RTC_DateStructInit(RTC_DateTypeDef* RTC_DateStruct); +void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct); + +/* Alarms (Alarm A and Alarm B) configuration functions **********************/ +void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct); +void RTC_AlarmStructInit(RTC_AlarmTypeDef* RTC_AlarmStruct); +void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct); +ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm, FunctionalState NewState); + +/* WakeUp Timer configuration functions ***************************************/ +void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock); +void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter); +uint32_t RTC_GetWakeUpCounter(void); +ErrorStatus RTC_WakeUpCmd(FunctionalState NewState); + +/* Daylight Saving configuration functions ************************************/ +void RTC_DayLightSavingConfig(uint32_t RTC_DayLightSaving, uint32_t RTC_StoreOperation); +uint32_t RTC_GetStoreOperation(void); + +/* Output pin Configuration function ******************************************/ +void RTC_OutputConfig(uint32_t RTC_Output, uint32_t RTC_OutputPolarity); + +/* Coarse Calibration configuration functions *********************************/ +ErrorStatus RTC_CoarseCalibConfig(uint32_t RTC_CalibSign, uint32_t Value); +ErrorStatus RTC_CoarseCalibCmd(FunctionalState NewState); +void RTC_CalibOutputCmd(FunctionalState NewState); + +/* TimeStamp configuration functions ******************************************/ +void RTC_TimeStampCmd(uint32_t RTC_TimeStampEdge, FunctionalState NewState); +void RTC_GetTimeStamp(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_StampTimeStruct, + RTC_DateTypeDef* RTC_StampDateStruct); + +/* Tampers configuration functions ********************************************/ +void RTC_TamperTriggerConfig(uint32_t RTC_Tamper, uint32_t RTC_TamperTrigger); +void RTC_TamperCmd(uint32_t RTC_Tamper, FunctionalState NewState); + +/* Backup Data Registers configuration functions ******************************/ +void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data); +uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR); + +/* RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration + functions ******************************************************************/ +void RTC_TamperPinSelection(uint32_t RTC_TamperPin); +void RTC_TimeStampPinSelection(uint32_t RTC_TimeStampPin); +void RTC_OutputTypeConfig(uint32_t RTC_OutputType); + +/* Interrupts and flags management functions **********************************/ +void RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState); +FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG); +void RTC_ClearFlag(uint32_t RTC_FLAG); +ITStatus RTC_GetITStatus(uint32_t RTC_IT); +void RTC_ClearITPendingBit(uint32_t RTC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_RTC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_sdio.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_sdio.h new file mode 100644 index 000000000..16efdeeb2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_sdio.h @@ -0,0 +1,536 @@ +/** + ****************************************************************************** + * @file stm32f2xx_sdio.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the SDIO firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_SDIO_H +#define __STM32F2xx_SDIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup SDIO + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +typedef struct +{ + uint32_t SDIO_ClockEdge; /*!< Specifies the clock transition on which the bit capture is made. + This parameter can be a value of @ref SDIO_Clock_Edge */ + + uint32_t SDIO_ClockBypass; /*!< Specifies whether the SDIO Clock divider bypass is + enabled or disabled. + This parameter can be a value of @ref SDIO_Clock_Bypass */ + + uint32_t SDIO_ClockPowerSave; /*!< Specifies whether SDIO Clock output is enabled or + disabled when the bus is idle. + This parameter can be a value of @ref SDIO_Clock_Power_Save */ + + uint32_t SDIO_BusWide; /*!< Specifies the SDIO bus width. + This parameter can be a value of @ref SDIO_Bus_Wide */ + + uint32_t SDIO_HardwareFlowControl; /*!< Specifies whether the SDIO hardware flow control is enabled or disabled. + This parameter can be a value of @ref SDIO_Hardware_Flow_Control */ + + uint8_t SDIO_ClockDiv; /*!< Specifies the clock frequency of the SDIO controller. + This parameter can be a value between 0x00 and 0xFF. */ + +} SDIO_InitTypeDef; + +typedef struct +{ + uint32_t SDIO_Argument; /*!< Specifies the SDIO command argument which is sent + to a card as part of a command message. If a command + contains an argument, it must be loaded into this register + before writing the command to the command register */ + + uint32_t SDIO_CmdIndex; /*!< Specifies the SDIO command index. It must be lower than 0x40. */ + + uint32_t SDIO_Response; /*!< Specifies the SDIO response type. + This parameter can be a value of @ref SDIO_Response_Type */ + + uint32_t SDIO_Wait; /*!< Specifies whether SDIO wait-for-interrupt request is enabled or disabled. + This parameter can be a value of @ref SDIO_Wait_Interrupt_State */ + + uint32_t SDIO_CPSM; /*!< Specifies whether SDIO Command path state machine (CPSM) + is enabled or disabled. + This parameter can be a value of @ref SDIO_CPSM_State */ +} SDIO_CmdInitTypeDef; + +typedef struct +{ + uint32_t SDIO_DataTimeOut; /*!< Specifies the data timeout period in card bus clock periods. */ + + uint32_t SDIO_DataLength; /*!< Specifies the number of data bytes to be transferred. */ + + uint32_t SDIO_DataBlockSize; /*!< Specifies the data block size for block transfer. + This parameter can be a value of @ref SDIO_Data_Block_Size */ + + uint32_t SDIO_TransferDir; /*!< Specifies the data transfer direction, whether the transfer + is a read or write. + This parameter can be a value of @ref SDIO_Transfer_Direction */ + + uint32_t SDIO_TransferMode; /*!< Specifies whether data transfer is in stream or block mode. + This parameter can be a value of @ref SDIO_Transfer_Type */ + + uint32_t SDIO_DPSM; /*!< Specifies whether SDIO Data path state machine (DPSM) + is enabled or disabled. + This parameter can be a value of @ref SDIO_DPSM_State */ +} SDIO_DataInitTypeDef; + + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup SDIO_Exported_Constants + * @{ + */ + +/** @defgroup SDIO_Clock_Edge + * @{ + */ + +#define SDIO_ClockEdge_Rising ((uint32_t)0x00000000) +#define SDIO_ClockEdge_Falling ((uint32_t)0x00002000) +#define IS_SDIO_CLOCK_EDGE(EDGE) (((EDGE) == SDIO_ClockEdge_Rising) || \ + ((EDGE) == SDIO_ClockEdge_Falling)) +/** + * @} + */ + +/** @defgroup SDIO_Clock_Bypass + * @{ + */ + +#define SDIO_ClockBypass_Disable ((uint32_t)0x00000000) +#define SDIO_ClockBypass_Enable ((uint32_t)0x00000400) +#define IS_SDIO_CLOCK_BYPASS(BYPASS) (((BYPASS) == SDIO_ClockBypass_Disable) || \ + ((BYPASS) == SDIO_ClockBypass_Enable)) +/** + * @} + */ + +/** @defgroup SDIO_Clock_Power_Save + * @{ + */ + +#define SDIO_ClockPowerSave_Disable ((uint32_t)0x00000000) +#define SDIO_ClockPowerSave_Enable ((uint32_t)0x00000200) +#define IS_SDIO_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDIO_ClockPowerSave_Disable) || \ + ((SAVE) == SDIO_ClockPowerSave_Enable)) +/** + * @} + */ + +/** @defgroup SDIO_Bus_Wide + * @{ + */ + +#define SDIO_BusWide_1b ((uint32_t)0x00000000) +#define SDIO_BusWide_4b ((uint32_t)0x00000800) +#define SDIO_BusWide_8b ((uint32_t)0x00001000) +#define IS_SDIO_BUS_WIDE(WIDE) (((WIDE) == SDIO_BusWide_1b) || ((WIDE) == SDIO_BusWide_4b) || \ + ((WIDE) == SDIO_BusWide_8b)) + +/** + * @} + */ + +/** @defgroup SDIO_Hardware_Flow_Control + * @{ + */ + +#define SDIO_HardwareFlowControl_Disable ((uint32_t)0x00000000) +#define SDIO_HardwareFlowControl_Enable ((uint32_t)0x00004000) +#define IS_SDIO_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDIO_HardwareFlowControl_Disable) || \ + ((CONTROL) == SDIO_HardwareFlowControl_Enable)) +/** + * @} + */ + +/** @defgroup SDIO_Power_State + * @{ + */ + +#define SDIO_PowerState_OFF ((uint32_t)0x00000000) +#define SDIO_PowerState_ON ((uint32_t)0x00000003) +#define IS_SDIO_POWER_STATE(STATE) (((STATE) == SDIO_PowerState_OFF) || ((STATE) == SDIO_PowerState_ON)) +/** + * @} + */ + + +/** @defgroup SDIO_Interrupt_sources + * @{ + */ + +#define SDIO_IT_CCRCFAIL ((uint32_t)0x00000001) +#define SDIO_IT_DCRCFAIL ((uint32_t)0x00000002) +#define SDIO_IT_CTIMEOUT ((uint32_t)0x00000004) +#define SDIO_IT_DTIMEOUT ((uint32_t)0x00000008) +#define SDIO_IT_TXUNDERR ((uint32_t)0x00000010) +#define SDIO_IT_RXOVERR ((uint32_t)0x00000020) +#define SDIO_IT_CMDREND ((uint32_t)0x00000040) +#define SDIO_IT_CMDSENT ((uint32_t)0x00000080) +#define SDIO_IT_DATAEND ((uint32_t)0x00000100) +#define SDIO_IT_STBITERR ((uint32_t)0x00000200) +#define SDIO_IT_DBCKEND ((uint32_t)0x00000400) +#define SDIO_IT_CMDACT ((uint32_t)0x00000800) +#define SDIO_IT_TXACT ((uint32_t)0x00001000) +#define SDIO_IT_RXACT ((uint32_t)0x00002000) +#define SDIO_IT_TXFIFOHE ((uint32_t)0x00004000) +#define SDIO_IT_RXFIFOHF ((uint32_t)0x00008000) +#define SDIO_IT_TXFIFOF ((uint32_t)0x00010000) +#define SDIO_IT_RXFIFOF ((uint32_t)0x00020000) +#define SDIO_IT_TXFIFOE ((uint32_t)0x00040000) +#define SDIO_IT_RXFIFOE ((uint32_t)0x00080000) +#define SDIO_IT_TXDAVL ((uint32_t)0x00100000) +#define SDIO_IT_RXDAVL ((uint32_t)0x00200000) +#define SDIO_IT_SDIOIT ((uint32_t)0x00400000) +#define SDIO_IT_CEATAEND ((uint32_t)0x00800000) +#define IS_SDIO_IT(IT) ((((IT) & (uint32_t)0xFF000000) == 0x00) && ((IT) != (uint32_t)0x00)) +/** + * @} + */ + +/** @defgroup SDIO_Command_Index + * @{ + */ + +#define IS_SDIO_CMD_INDEX(INDEX) ((INDEX) < 0x40) +/** + * @} + */ + +/** @defgroup SDIO_Response_Type + * @{ + */ + +#define SDIO_Response_No ((uint32_t)0x00000000) +#define SDIO_Response_Short ((uint32_t)0x00000040) +#define SDIO_Response_Long ((uint32_t)0x000000C0) +#define IS_SDIO_RESPONSE(RESPONSE) (((RESPONSE) == SDIO_Response_No) || \ + ((RESPONSE) == SDIO_Response_Short) || \ + ((RESPONSE) == SDIO_Response_Long)) +/** + * @} + */ + +/** @defgroup SDIO_Wait_Interrupt_State + * @{ + */ + +#define SDIO_Wait_No ((uint32_t)0x00000000) /*!< SDIO No Wait, TimeOut is enabled */ +#define SDIO_Wait_IT ((uint32_t)0x00000100) /*!< SDIO Wait Interrupt Request */ +#define SDIO_Wait_Pend ((uint32_t)0x00000200) /*!< SDIO Wait End of transfer */ +#define IS_SDIO_WAIT(WAIT) (((WAIT) == SDIO_Wait_No) || ((WAIT) == SDIO_Wait_IT) || \ + ((WAIT) == SDIO_Wait_Pend)) +/** + * @} + */ + +/** @defgroup SDIO_CPSM_State + * @{ + */ + +#define SDIO_CPSM_Disable ((uint32_t)0x00000000) +#define SDIO_CPSM_Enable ((uint32_t)0x00000400) +#define IS_SDIO_CPSM(CPSM) (((CPSM) == SDIO_CPSM_Enable) || ((CPSM) == SDIO_CPSM_Disable)) +/** + * @} + */ + +/** @defgroup SDIO_Response_Registers + * @{ + */ + +#define SDIO_RESP1 ((uint32_t)0x00000000) +#define SDIO_RESP2 ((uint32_t)0x00000004) +#define SDIO_RESP3 ((uint32_t)0x00000008) +#define SDIO_RESP4 ((uint32_t)0x0000000C) +#define IS_SDIO_RESP(RESP) (((RESP) == SDIO_RESP1) || ((RESP) == SDIO_RESP2) || \ + ((RESP) == SDIO_RESP3) || ((RESP) == SDIO_RESP4)) +/** + * @} + */ + +/** @defgroup SDIO_Data_Length + * @{ + */ + +#define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFF) +/** + * @} + */ + +/** @defgroup SDIO_Data_Block_Size + * @{ + */ + +#define SDIO_DataBlockSize_1b ((uint32_t)0x00000000) +#define SDIO_DataBlockSize_2b ((uint32_t)0x00000010) +#define SDIO_DataBlockSize_4b ((uint32_t)0x00000020) +#define SDIO_DataBlockSize_8b ((uint32_t)0x00000030) +#define SDIO_DataBlockSize_16b ((uint32_t)0x00000040) +#define SDIO_DataBlockSize_32b ((uint32_t)0x00000050) +#define SDIO_DataBlockSize_64b ((uint32_t)0x00000060) +#define SDIO_DataBlockSize_128b ((uint32_t)0x00000070) +#define SDIO_DataBlockSize_256b ((uint32_t)0x00000080) +#define SDIO_DataBlockSize_512b ((uint32_t)0x00000090) +#define SDIO_DataBlockSize_1024b ((uint32_t)0x000000A0) +#define SDIO_DataBlockSize_2048b ((uint32_t)0x000000B0) +#define SDIO_DataBlockSize_4096b ((uint32_t)0x000000C0) +#define SDIO_DataBlockSize_8192b ((uint32_t)0x000000D0) +#define SDIO_DataBlockSize_16384b ((uint32_t)0x000000E0) +#define IS_SDIO_BLOCK_SIZE(SIZE) (((SIZE) == SDIO_DataBlockSize_1b) || \ + ((SIZE) == SDIO_DataBlockSize_2b) || \ + ((SIZE) == SDIO_DataBlockSize_4b) || \ + ((SIZE) == SDIO_DataBlockSize_8b) || \ + ((SIZE) == SDIO_DataBlockSize_16b) || \ + ((SIZE) == SDIO_DataBlockSize_32b) || \ + ((SIZE) == SDIO_DataBlockSize_64b) || \ + ((SIZE) == SDIO_DataBlockSize_128b) || \ + ((SIZE) == SDIO_DataBlockSize_256b) || \ + ((SIZE) == SDIO_DataBlockSize_512b) || \ + ((SIZE) == SDIO_DataBlockSize_1024b) || \ + ((SIZE) == SDIO_DataBlockSize_2048b) || \ + ((SIZE) == SDIO_DataBlockSize_4096b) || \ + ((SIZE) == SDIO_DataBlockSize_8192b) || \ + ((SIZE) == SDIO_DataBlockSize_16384b)) +/** + * @} + */ + +/** @defgroup SDIO_Transfer_Direction + * @{ + */ + +#define SDIO_TransferDir_ToCard ((uint32_t)0x00000000) +#define SDIO_TransferDir_ToSDIO ((uint32_t)0x00000002) +#define IS_SDIO_TRANSFER_DIR(DIR) (((DIR) == SDIO_TransferDir_ToCard) || \ + ((DIR) == SDIO_TransferDir_ToSDIO)) +/** + * @} + */ + +/** @defgroup SDIO_Transfer_Type + * @{ + */ + +#define SDIO_TransferMode_Block ((uint32_t)0x00000000) +#define SDIO_TransferMode_Stream ((uint32_t)0x00000004) +#define IS_SDIO_TRANSFER_MODE(MODE) (((MODE) == SDIO_TransferMode_Stream) || \ + ((MODE) == SDIO_TransferMode_Block)) +/** + * @} + */ + +/** @defgroup SDIO_DPSM_State + * @{ + */ + +#define SDIO_DPSM_Disable ((uint32_t)0x00000000) +#define SDIO_DPSM_Enable ((uint32_t)0x00000001) +#define IS_SDIO_DPSM(DPSM) (((DPSM) == SDIO_DPSM_Enable) || ((DPSM) == SDIO_DPSM_Disable)) +/** + * @} + */ + +/** @defgroup SDIO_Flags + * @{ + */ + +#define SDIO_FLAG_CCRCFAIL ((uint32_t)0x00000001) +#define SDIO_FLAG_DCRCFAIL ((uint32_t)0x00000002) +#define SDIO_FLAG_CTIMEOUT ((uint32_t)0x00000004) +#define SDIO_FLAG_DTIMEOUT ((uint32_t)0x00000008) +#define SDIO_FLAG_TXUNDERR ((uint32_t)0x00000010) +#define SDIO_FLAG_RXOVERR ((uint32_t)0x00000020) +#define SDIO_FLAG_CMDREND ((uint32_t)0x00000040) +#define SDIO_FLAG_CMDSENT ((uint32_t)0x00000080) +#define SDIO_FLAG_DATAEND ((uint32_t)0x00000100) +#define SDIO_FLAG_STBITERR ((uint32_t)0x00000200) +#define SDIO_FLAG_DBCKEND ((uint32_t)0x00000400) +#define SDIO_FLAG_CMDACT ((uint32_t)0x00000800) +#define SDIO_FLAG_TXACT ((uint32_t)0x00001000) +#define SDIO_FLAG_RXACT ((uint32_t)0x00002000) +#define SDIO_FLAG_TXFIFOHE ((uint32_t)0x00004000) +#define SDIO_FLAG_RXFIFOHF ((uint32_t)0x00008000) +#define SDIO_FLAG_TXFIFOF ((uint32_t)0x00010000) +#define SDIO_FLAG_RXFIFOF ((uint32_t)0x00020000) +#define SDIO_FLAG_TXFIFOE ((uint32_t)0x00040000) +#define SDIO_FLAG_RXFIFOE ((uint32_t)0x00080000) +#define SDIO_FLAG_TXDAVL ((uint32_t)0x00100000) +#define SDIO_FLAG_RXDAVL ((uint32_t)0x00200000) +#define SDIO_FLAG_SDIOIT ((uint32_t)0x00400000) +#define SDIO_FLAG_CEATAEND ((uint32_t)0x00800000) +#define IS_SDIO_FLAG(FLAG) (((FLAG) == SDIO_FLAG_CCRCFAIL) || \ + ((FLAG) == SDIO_FLAG_DCRCFAIL) || \ + ((FLAG) == SDIO_FLAG_CTIMEOUT) || \ + ((FLAG) == SDIO_FLAG_DTIMEOUT) || \ + ((FLAG) == SDIO_FLAG_TXUNDERR) || \ + ((FLAG) == SDIO_FLAG_RXOVERR) || \ + ((FLAG) == SDIO_FLAG_CMDREND) || \ + ((FLAG) == SDIO_FLAG_CMDSENT) || \ + ((FLAG) == SDIO_FLAG_DATAEND) || \ + ((FLAG) == SDIO_FLAG_STBITERR) || \ + ((FLAG) == SDIO_FLAG_DBCKEND) || \ + ((FLAG) == SDIO_FLAG_CMDACT) || \ + ((FLAG) == SDIO_FLAG_TXACT) || \ + ((FLAG) == SDIO_FLAG_RXACT) || \ + ((FLAG) == SDIO_FLAG_TXFIFOHE) || \ + ((FLAG) == SDIO_FLAG_RXFIFOHF) || \ + ((FLAG) == SDIO_FLAG_TXFIFOF) || \ + ((FLAG) == SDIO_FLAG_RXFIFOF) || \ + ((FLAG) == SDIO_FLAG_TXFIFOE) || \ + ((FLAG) == SDIO_FLAG_RXFIFOE) || \ + ((FLAG) == SDIO_FLAG_TXDAVL) || \ + ((FLAG) == SDIO_FLAG_RXDAVL) || \ + ((FLAG) == SDIO_FLAG_SDIOIT) || \ + ((FLAG) == SDIO_FLAG_CEATAEND)) + +#define IS_SDIO_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFF3FF800) == 0x00) && ((FLAG) != (uint32_t)0x00)) + +#define IS_SDIO_GET_IT(IT) (((IT) == SDIO_IT_CCRCFAIL) || \ + ((IT) == SDIO_IT_DCRCFAIL) || \ + ((IT) == SDIO_IT_CTIMEOUT) || \ + ((IT) == SDIO_IT_DTIMEOUT) || \ + ((IT) == SDIO_IT_TXUNDERR) || \ + ((IT) == SDIO_IT_RXOVERR) || \ + ((IT) == SDIO_IT_CMDREND) || \ + ((IT) == SDIO_IT_CMDSENT) || \ + ((IT) == SDIO_IT_DATAEND) || \ + ((IT) == SDIO_IT_STBITERR) || \ + ((IT) == SDIO_IT_DBCKEND) || \ + ((IT) == SDIO_IT_CMDACT) || \ + ((IT) == SDIO_IT_TXACT) || \ + ((IT) == SDIO_IT_RXACT) || \ + ((IT) == SDIO_IT_TXFIFOHE) || \ + ((IT) == SDIO_IT_RXFIFOHF) || \ + ((IT) == SDIO_IT_TXFIFOF) || \ + ((IT) == SDIO_IT_RXFIFOF) || \ + ((IT) == SDIO_IT_TXFIFOE) || \ + ((IT) == SDIO_IT_RXFIFOE) || \ + ((IT) == SDIO_IT_TXDAVL) || \ + ((IT) == SDIO_IT_RXDAVL) || \ + ((IT) == SDIO_IT_SDIOIT) || \ + ((IT) == SDIO_IT_CEATAEND)) + +#define IS_SDIO_CLEAR_IT(IT) ((((IT) & (uint32_t)0xFF3FF800) == 0x00) && ((IT) != (uint32_t)0x00)) + +/** + * @} + */ + +/** @defgroup SDIO_Read_Wait_Mode + * @{ + */ + +#define SDIO_ReadWaitMode_CLK ((uint32_t)0x00000000) +#define SDIO_ReadWaitMode_DATA2 ((uint32_t)0x00000001) +#define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_ReadWaitMode_CLK) || \ + ((MODE) == SDIO_ReadWaitMode_DATA2)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/* Function used to set the SDIO configuration to the default reset state ****/ +void SDIO_DeInit(void); + +/* Initialization and Configuration functions *********************************/ +void SDIO_Init(SDIO_InitTypeDef* SDIO_InitStruct); +void SDIO_StructInit(SDIO_InitTypeDef* SDIO_InitStruct); +void SDIO_ClockCmd(FunctionalState NewState); +void SDIO_SetPowerState(uint32_t SDIO_PowerState); +uint32_t SDIO_GetPowerState(void); + +/* Command path state machine (CPSM) management functions *********************/ +void SDIO_SendCommand(SDIO_CmdInitTypeDef *SDIO_CmdInitStruct); +void SDIO_CmdStructInit(SDIO_CmdInitTypeDef* SDIO_CmdInitStruct); +uint8_t SDIO_GetCommandResponse(void); +uint32_t SDIO_GetResponse(uint32_t SDIO_RESP); + +/* Data path state machine (DPSM) management functions ************************/ +void SDIO_DataConfig(SDIO_DataInitTypeDef* SDIO_DataInitStruct); +void SDIO_DataStructInit(SDIO_DataInitTypeDef* SDIO_DataInitStruct); +uint32_t SDIO_GetDataCounter(void); +uint32_t SDIO_ReadData(void); +void SDIO_WriteData(uint32_t Data); +uint32_t SDIO_GetFIFOCount(void); + +/* SDIO IO Cards mode management functions ************************************/ +void SDIO_StartSDIOReadWait(FunctionalState NewState); +void SDIO_StopSDIOReadWait(FunctionalState NewState); +void SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode); +void SDIO_SetSDIOOperation(FunctionalState NewState); +void SDIO_SendSDIOSuspendCmd(FunctionalState NewState); + +/* CE-ATA mode management functions *******************************************/ +void SDIO_CommandCompletionCmd(FunctionalState NewState); +void SDIO_CEATAITCmd(FunctionalState NewState); +void SDIO_SendCEATACmd(FunctionalState NewState); + +/* DMA transfers management functions *****************************************/ +void SDIO_DMACmd(FunctionalState NewState); + +/* Interrupts and flags management functions **********************************/ +void SDIO_ITConfig(uint32_t SDIO_IT, FunctionalState NewState); +FlagStatus SDIO_GetFlagStatus(uint32_t SDIO_FLAG); +void SDIO_ClearFlag(uint32_t SDIO_FLAG); +ITStatus SDIO_GetITStatus(uint32_t SDIO_IT); +void SDIO_ClearITPendingBit(uint32_t SDIO_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_SDIO_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_spi.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_spi.h new file mode 100644 index 000000000..594dfd631 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_spi.h @@ -0,0 +1,526 @@ +/** + ****************************************************************************** + * @file stm32f2xx_spi.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the SPI + * firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_SPI_H +#define __STM32F2xx_SPI_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup SPI + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief SPI Init structure definition + */ + +typedef struct +{ + uint16_t SPI_Direction; /*!< Specifies the SPI unidirectional or bidirectional data mode. + This parameter can be a value of @ref SPI_data_direction */ + + uint16_t SPI_Mode; /*!< Specifies the SPI operating mode. + This parameter can be a value of @ref SPI_mode */ + + uint16_t SPI_DataSize; /*!< Specifies the SPI data size. + This parameter can be a value of @ref SPI_data_size */ + + uint16_t SPI_CPOL; /*!< Specifies the serial clock steady state. + This parameter can be a value of @ref SPI_Clock_Polarity */ + + uint16_t SPI_CPHA; /*!< Specifies the clock active edge for the bit capture. + This parameter can be a value of @ref SPI_Clock_Phase */ + + uint16_t SPI_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_Slave_Select_management */ + + uint16_t SPI_BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be + used to configure the transmit and receive SCK clock. + This parameter can be a value of @ref SPI_BaudRate_Prescaler + @note The communication clock is derived from the master + clock. The slave clock does not need to be set. */ + + uint16_t SPI_FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit. + This parameter can be a value of @ref SPI_MSB_LSB_transmission */ + + uint16_t SPI_CRCPolynomial; /*!< Specifies the polynomial used for the CRC calculation. */ +}SPI_InitTypeDef; + +/** + * @brief I2S Init structure definition + */ + +typedef struct +{ + + uint16_t I2S_Mode; /*!< Specifies the I2S operating mode. + This parameter can be a value of @ref I2S_Mode */ + + uint16_t I2S_Standard; /*!< Specifies the standard used for the I2S communication. + This parameter can be a value of @ref I2S_Standard */ + + uint16_t I2S_DataFormat; /*!< Specifies the data format for the I2S communication. + This parameter can be a value of @ref I2S_Data_Format */ + + uint16_t I2S_MCLKOutput; /*!< Specifies whether the I2S MCLK output is enabled or not. + This parameter can be a value of @ref I2S_MCLK_Output */ + + uint32_t I2S_AudioFreq; /*!< Specifies the frequency selected for the I2S communication. + This parameter can be a value of @ref I2S_Audio_Frequency */ + + uint16_t I2S_CPOL; /*!< Specifies the idle state of the I2S clock. + This parameter can be a value of @ref I2S_Clock_Polarity */ +}I2S_InitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup SPI_Exported_Constants + * @{ + */ + +#define IS_SPI_ALL_PERIPH(PERIPH) (((PERIPH) == SPI1) || \ + ((PERIPH) == SPI2) || \ + ((PERIPH) == SPI3)) + +#define IS_SPI_23_PERIPH(PERIPH) (((PERIPH) == SPI2) || \ + ((PERIPH) == SPI3)) + +/** @defgroup SPI_data_direction + * @{ + */ + +#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000) +#define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400) +#define SPI_Direction_1Line_Rx ((uint16_t)0x8000) +#define SPI_Direction_1Line_Tx ((uint16_t)0xC000) +#define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \ + ((MODE) == SPI_Direction_2Lines_RxOnly) || \ + ((MODE) == SPI_Direction_1Line_Rx) || \ + ((MODE) == SPI_Direction_1Line_Tx)) +/** + * @} + */ + +/** @defgroup SPI_mode + * @{ + */ + +#define SPI_Mode_Master ((uint16_t)0x0104) +#define SPI_Mode_Slave ((uint16_t)0x0000) +#define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \ + ((MODE) == SPI_Mode_Slave)) +/** + * @} + */ + +/** @defgroup SPI_data_size + * @{ + */ + +#define SPI_DataSize_16b ((uint16_t)0x0800) +#define SPI_DataSize_8b ((uint16_t)0x0000) +#define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_16b) || \ + ((DATASIZE) == SPI_DataSize_8b)) +/** + * @} + */ + +/** @defgroup SPI_Clock_Polarity + * @{ + */ + +#define SPI_CPOL_Low ((uint16_t)0x0000) +#define SPI_CPOL_High ((uint16_t)0x0002) +#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \ + ((CPOL) == SPI_CPOL_High)) +/** + * @} + */ + +/** @defgroup SPI_Clock_Phase + * @{ + */ + +#define SPI_CPHA_1Edge ((uint16_t)0x0000) +#define SPI_CPHA_2Edge ((uint16_t)0x0001) +#define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \ + ((CPHA) == SPI_CPHA_2Edge)) +/** + * @} + */ + +/** @defgroup SPI_Slave_Select_management + * @{ + */ + +#define SPI_NSS_Soft ((uint16_t)0x0200) +#define SPI_NSS_Hard ((uint16_t)0x0000) +#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \ + ((NSS) == SPI_NSS_Hard)) +/** + * @} + */ + +/** @defgroup SPI_BaudRate_Prescaler + * @{ + */ + +#define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000) +#define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008) +#define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010) +#define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018) +#define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020) +#define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028) +#define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030) +#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038) +#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_4) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_8) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_16) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_32) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_64) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_128) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_256)) +/** + * @} + */ + +/** @defgroup SPI_MSB_LSB_transmission + * @{ + */ + +#define SPI_FirstBit_MSB ((uint16_t)0x0000) +#define SPI_FirstBit_LSB ((uint16_t)0x0080) +#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \ + ((BIT) == SPI_FirstBit_LSB)) +/** + * @} + */ + +/** @defgroup SPI_I2S_Mode + * @{ + */ + +#define I2S_Mode_SlaveTx ((uint16_t)0x0000) +#define I2S_Mode_SlaveRx ((uint16_t)0x0100) +#define I2S_Mode_MasterTx ((uint16_t)0x0200) +#define I2S_Mode_MasterRx ((uint16_t)0x0300) +#define IS_I2S_MODE(MODE) (((MODE) == I2S_Mode_SlaveTx) || \ + ((MODE) == I2S_Mode_SlaveRx) || \ + ((MODE) == I2S_Mode_MasterTx)|| \ + ((MODE) == I2S_Mode_MasterRx)) +/** + * @} + */ + + +/** @defgroup SPI_I2S_Standard + * @{ + */ + +#define I2S_Standard_Phillips ((uint16_t)0x0000) +#define I2S_Standard_MSB ((uint16_t)0x0010) +#define I2S_Standard_LSB ((uint16_t)0x0020) +#define I2S_Standard_PCMShort ((uint16_t)0x0030) +#define I2S_Standard_PCMLong ((uint16_t)0x00B0) +#define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_Standard_Phillips) || \ + ((STANDARD) == I2S_Standard_MSB) || \ + ((STANDARD) == I2S_Standard_LSB) || \ + ((STANDARD) == I2S_Standard_PCMShort) || \ + ((STANDARD) == I2S_Standard_PCMLong)) +/** + * @} + */ + +/** @defgroup SPI_I2S_Data_Format + * @{ + */ + +#define I2S_DataFormat_16b ((uint16_t)0x0000) +#define I2S_DataFormat_16bextended ((uint16_t)0x0001) +#define I2S_DataFormat_24b ((uint16_t)0x0003) +#define I2S_DataFormat_32b ((uint16_t)0x0005) +#define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DataFormat_16b) || \ + ((FORMAT) == I2S_DataFormat_16bextended) || \ + ((FORMAT) == I2S_DataFormat_24b) || \ + ((FORMAT) == I2S_DataFormat_32b)) +/** + * @} + */ + +/** @defgroup SPI_I2S_MCLK_Output + * @{ + */ + +#define I2S_MCLKOutput_Enable ((uint16_t)0x0200) +#define I2S_MCLKOutput_Disable ((uint16_t)0x0000) +#define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOutput_Enable) || \ + ((OUTPUT) == I2S_MCLKOutput_Disable)) +/** + * @} + */ + +/** @defgroup SPI_I2S_Audio_Frequency + * @{ + */ + +#define I2S_AudioFreq_192k ((uint32_t)192000) +#define I2S_AudioFreq_96k ((uint32_t)96000) +#define I2S_AudioFreq_48k ((uint32_t)48000) +#define I2S_AudioFreq_44k ((uint32_t)44100) +#define I2S_AudioFreq_32k ((uint32_t)32000) +#define I2S_AudioFreq_22k ((uint32_t)22050) +#define I2S_AudioFreq_16k ((uint32_t)16000) +#define I2S_AudioFreq_11k ((uint32_t)11025) +#define I2S_AudioFreq_8k ((uint32_t)8000) +#define I2S_AudioFreq_Default ((uint32_t)2) + +#define IS_I2S_AUDIO_FREQ(FREQ) ((((FREQ) >= I2S_AudioFreq_8k) && \ + ((FREQ) <= I2S_AudioFreq_192k)) || \ + ((FREQ) == I2S_AudioFreq_Default)) +/** + * @} + */ + +/** @defgroup SPI_I2S_Clock_Polarity + * @{ + */ + +#define I2S_CPOL_Low ((uint16_t)0x0000) +#define I2S_CPOL_High ((uint16_t)0x0008) +#define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_Low) || \ + ((CPOL) == I2S_CPOL_High)) +/** + * @} + */ + +/** @defgroup SPI_I2S_DMA_transfer_requests + * @{ + */ + +#define SPI_I2S_DMAReq_Tx ((uint16_t)0x0002) +#define SPI_I2S_DMAReq_Rx ((uint16_t)0x0001) +#define IS_SPI_I2S_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFFFC) == 0x00) && ((DMAREQ) != 0x00)) +/** + * @} + */ + +/** @defgroup SPI_NSS_internal_software_management + * @{ + */ + +#define SPI_NSSInternalSoft_Set ((uint16_t)0x0100) +#define SPI_NSSInternalSoft_Reset ((uint16_t)0xFEFF) +#define IS_SPI_NSS_INTERNAL(INTERNAL) (((INTERNAL) == SPI_NSSInternalSoft_Set) || \ + ((INTERNAL) == SPI_NSSInternalSoft_Reset)) +/** + * @} + */ + +/** @defgroup SPI_CRC_Transmit_Receive + * @{ + */ + +#define SPI_CRC_Tx ((uint8_t)0x00) +#define SPI_CRC_Rx ((uint8_t)0x01) +#define IS_SPI_CRC(CRC) (((CRC) == SPI_CRC_Tx) || ((CRC) == SPI_CRC_Rx)) +/** + * @} + */ + +/** @defgroup SPI_direction_transmit_receive + * @{ + */ + +#define SPI_Direction_Rx ((uint16_t)0xBFFF) +#define SPI_Direction_Tx ((uint16_t)0x4000) +#define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \ + ((DIRECTION) == SPI_Direction_Tx)) +/** + * @} + */ + +/** @defgroup SPI_I2S_interrupts_definition + * @{ + */ + +#define SPI_I2S_IT_TXE ((uint8_t)0x71) +#define SPI_I2S_IT_RXNE ((uint8_t)0x60) +#define SPI_I2S_IT_ERR ((uint8_t)0x50) +#define I2S_IT_UDR ((uint8_t)0x53) +#define SPI_I2S_IT_TIFRFE ((uint8_t)0x58) + +#define IS_SPI_I2S_CONFIG_IT(IT) (((IT) == SPI_I2S_IT_TXE) || \ + ((IT) == SPI_I2S_IT_RXNE) || \ + ((IT) == SPI_I2S_IT_ERR)) + +#define SPI_I2S_IT_OVR ((uint8_t)0x56) +#define SPI_IT_MODF ((uint8_t)0x55) +#define SPI_IT_CRCERR ((uint8_t)0x54) + +#define IS_SPI_I2S_CLEAR_IT(IT) (((IT) == SPI_IT_CRCERR)) + +#define IS_SPI_I2S_GET_IT(IT) (((IT) == SPI_I2S_IT_RXNE)|| ((IT) == SPI_I2S_IT_TXE) || \ + ((IT) == SPI_IT_CRCERR) || ((IT) == SPI_IT_MODF) || \ + ((IT) == SPI_I2S_IT_OVR) || ((IT) == I2S_IT_UDR) ||\ + ((IT) == SPI_I2S_IT_TIFRFE)) +/** + * @} + */ + +/** @defgroup SPI_I2S_flags_definition + * @{ + */ + +#define SPI_I2S_FLAG_RXNE ((uint16_t)0x0001) +#define SPI_I2S_FLAG_TXE ((uint16_t)0x0002) +#define I2S_FLAG_CHSIDE ((uint16_t)0x0004) +#define I2S_FLAG_UDR ((uint16_t)0x0008) +#define SPI_FLAG_CRCERR ((uint16_t)0x0010) +#define SPI_FLAG_MODF ((uint16_t)0x0020) +#define SPI_I2S_FLAG_OVR ((uint16_t)0x0040) +#define SPI_I2S_FLAG_BSY ((uint16_t)0x0080) +#define SPI_I2S_FLAG_TIFRFE ((uint16_t)0x0100) + +#define IS_SPI_I2S_CLEAR_FLAG(FLAG) (((FLAG) == SPI_FLAG_CRCERR)) +#define IS_SPI_I2S_GET_FLAG(FLAG) (((FLAG) == SPI_I2S_FLAG_BSY) || ((FLAG) == SPI_I2S_FLAG_OVR) || \ + ((FLAG) == SPI_FLAG_MODF) || ((FLAG) == SPI_FLAG_CRCERR) || \ + ((FLAG) == I2S_FLAG_UDR) || ((FLAG) == I2S_FLAG_CHSIDE) || \ + ((FLAG) == SPI_I2S_FLAG_TXE) || ((FLAG) == SPI_I2S_FLAG_RXNE)|| \ + ((FLAG) == SPI_I2S_FLAG_TIFRFE)) +/** + * @} + */ + +/** @defgroup SPI_CRC_polynomial + * @{ + */ + +#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1) +/** + * @} + */ + +/** @defgroup SPI_I2S_Legacy + * @{ + */ + +#define SPI_DMAReq_Tx SPI_I2S_DMAReq_Tx +#define SPI_DMAReq_Rx SPI_I2S_DMAReq_Rx +#define SPI_IT_TXE SPI_I2S_IT_TXE +#define SPI_IT_RXNE SPI_I2S_IT_RXNE +#define SPI_IT_ERR SPI_I2S_IT_ERR +#define SPI_IT_OVR SPI_I2S_IT_OVR +#define SPI_FLAG_RXNE SPI_I2S_FLAG_RXNE +#define SPI_FLAG_TXE SPI_I2S_FLAG_TXE +#define SPI_FLAG_OVR SPI_I2S_FLAG_OVR +#define SPI_FLAG_BSY SPI_I2S_FLAG_BSY +#define SPI_DeInit SPI_I2S_DeInit +#define SPI_ITConfig SPI_I2S_ITConfig +#define SPI_DMACmd SPI_I2S_DMACmd +#define SPI_SendData SPI_I2S_SendData +#define SPI_ReceiveData SPI_I2S_ReceiveData +#define SPI_GetFlagStatus SPI_I2S_GetFlagStatus +#define SPI_ClearFlag SPI_I2S_ClearFlag +#define SPI_GetITStatus SPI_I2S_GetITStatus +#define SPI_ClearITPendingBit SPI_I2S_ClearITPendingBit +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the SPI configuration to the default reset state *****/ +void SPI_I2S_DeInit(SPI_TypeDef* SPIx); + +/* Initialization and Configuration functions *********************************/ +void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct); +void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct); +void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct); +void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct); +void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize); +void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction); +void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft); +void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void SPI_TIModeCmd(SPI_TypeDef* SPIx, FunctionalState NewState); + +/* Data transfers functions ***************************************************/ +void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data); +uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx); + +/* Hardware CRC Calculation functions *****************************************/ +void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState); +void SPI_TransmitCRC(SPI_TypeDef* SPIx); +uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC); +uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx); + +/* DMA transfers management functions *****************************************/ +void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState); + +/* Interrupts and flags management functions **********************************/ +void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); +FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); +void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); +ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); +void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_SPI_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_syscfg.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_syscfg.h new file mode 100644 index 000000000..ab45e12a0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_syscfg.h @@ -0,0 +1,179 @@ +/** + ****************************************************************************** + * @file stm32f2xx_syscfg.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the SYSCFG firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_SYSCFG_H +#define __STM32F2xx_SYSCFG_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup SYSCFG + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup SYSCFG_Exported_Constants + * @{ + */ + +/** @defgroup SYSCFG_EXTI_Port_Sources + * @{ + */ +#define EXTI_PortSourceGPIOA ((uint8_t)0x00) +#define EXTI_PortSourceGPIOB ((uint8_t)0x01) +#define EXTI_PortSourceGPIOC ((uint8_t)0x02) +#define EXTI_PortSourceGPIOD ((uint8_t)0x03) +#define EXTI_PortSourceGPIOE ((uint8_t)0x04) +#define EXTI_PortSourceGPIOF ((uint8_t)0x05) +#define EXTI_PortSourceGPIOG ((uint8_t)0x06) +#define EXTI_PortSourceGPIOH ((uint8_t)0x07) +#define EXTI_PortSourceGPIOI ((uint8_t)0x08) + +#define IS_EXTI_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == EXTI_PortSourceGPIOA) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOB) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOC) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOD) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOE) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOF) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOG) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOH) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOI)) +/** + * @} + */ + + +/** @defgroup SYSCFG_EXTI_Pin_Sources + * @{ + */ +#define EXTI_PinSource0 ((uint8_t)0x00) +#define EXTI_PinSource1 ((uint8_t)0x01) +#define EXTI_PinSource2 ((uint8_t)0x02) +#define EXTI_PinSource3 ((uint8_t)0x03) +#define EXTI_PinSource4 ((uint8_t)0x04) +#define EXTI_PinSource5 ((uint8_t)0x05) +#define EXTI_PinSource6 ((uint8_t)0x06) +#define EXTI_PinSource7 ((uint8_t)0x07) +#define EXTI_PinSource8 ((uint8_t)0x08) +#define EXTI_PinSource9 ((uint8_t)0x09) +#define EXTI_PinSource10 ((uint8_t)0x0A) +#define EXTI_PinSource11 ((uint8_t)0x0B) +#define EXTI_PinSource12 ((uint8_t)0x0C) +#define EXTI_PinSource13 ((uint8_t)0x0D) +#define EXTI_PinSource14 ((uint8_t)0x0E) +#define EXTI_PinSource15 ((uint8_t)0x0F) +#define IS_EXTI_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == EXTI_PinSource0) || \ + ((PINSOURCE) == EXTI_PinSource1) || \ + ((PINSOURCE) == EXTI_PinSource2) || \ + ((PINSOURCE) == EXTI_PinSource3) || \ + ((PINSOURCE) == EXTI_PinSource4) || \ + ((PINSOURCE) == EXTI_PinSource5) || \ + ((PINSOURCE) == EXTI_PinSource6) || \ + ((PINSOURCE) == EXTI_PinSource7) || \ + ((PINSOURCE) == EXTI_PinSource8) || \ + ((PINSOURCE) == EXTI_PinSource9) || \ + ((PINSOURCE) == EXTI_PinSource10) || \ + ((PINSOURCE) == EXTI_PinSource11) || \ + ((PINSOURCE) == EXTI_PinSource12) || \ + ((PINSOURCE) == EXTI_PinSource13) || \ + ((PINSOURCE) == EXTI_PinSource14) || \ + ((PINSOURCE) == EXTI_PinSource15)) +/** + * @} + */ + + +/** @defgroup SYSCFG_Memory_Remap_Config + * @{ + */ +#define SYSCFG_MemoryRemap_Flash ((uint8_t)0x00) +#define SYSCFG_MemoryRemap_SystemFlash ((uint8_t)0x01) +#define SYSCFG_MemoryRemap_FSMC ((uint8_t)0x02) +#define SYSCFG_MemoryRemap_SRAM ((uint8_t)0x03) + +#define IS_SYSCFG_MEMORY_REMAP_CONFING(REMAP) (((REMAP) == SYSCFG_MemoryRemap_Flash) || \ + ((REMAP) == SYSCFG_MemoryRemap_SystemFlash) || \ + ((REMAP) == SYSCFG_MemoryRemap_SRAM) || \ + ((REMAP) == SYSCFG_MemoryRemap_FSMC)) +/** + * @} + */ + + +/** @defgroup SYSCFG_ETHERNET_Media_Interface + * @{ + */ +#define SYSCFG_ETH_MediaInterface_MII ((uint32_t)0x00000000) +#define SYSCFG_ETH_MediaInterface_RMII ((uint32_t)0x00000001) + +#define IS_SYSCFG_ETH_MEDIA_INTERFACE(INTERFACE) (((INTERFACE) == SYSCFG_ETH_MediaInterface_MII) || \ + ((INTERFACE) == SYSCFG_ETH_MediaInterface_RMII)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +void SYSCFG_DeInit(void); +void SYSCFG_MemoryRemapConfig(uint8_t SYSCFG_MemoryRemap); +void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex); +void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface); +void SYSCFG_CompensationCellCmd(FunctionalState NewState); +FlagStatus SYSCFG_GetCompensationCellStatus(void); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_SYSCFG_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_tim.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_tim.h new file mode 100644 index 000000000..62590b64c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_tim.h @@ -0,0 +1,1150 @@ +/** + ****************************************************************************** + * @file stm32f2xx_tim.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the TIM firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_TIM_H +#define __STM32F2xx_TIM_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup TIM + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief TIM Time Base Init structure definition + * @note This structure is used with all TIMx except for TIM6 and TIM7. + */ + +typedef struct +{ + uint16_t TIM_Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. + This parameter can be a number between 0x0000 and 0xFFFF */ + + uint16_t TIM_CounterMode; /*!< Specifies the counter mode. + This parameter can be a value of @ref TIM_Counter_Mode */ + + uint32_t TIM_Period; /*!< Specifies the period value to be loaded into the active + Auto-Reload Register at the next update event. + This parameter must be a number between 0x0000 and 0xFFFF. */ + + uint16_t TIM_ClockDivision; /*!< Specifies the clock division. + This parameter can be a value of @ref TIM_Clock_Division_CKD */ + + uint8_t TIM_RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter + reaches zero, an update event is generated and counting restarts + from the RCR value (N). + This means in PWM mode that (N+1) corresponds to: + - the number of PWM periods in edge-aligned mode + - the number of half PWM period in center-aligned mode + This parameter must be a number between 0x00 and 0xFF. + @note This parameter is valid only for TIM1 and TIM8. */ +} TIM_TimeBaseInitTypeDef; + +/** + * @brief TIM Output Compare Init structure definition + */ + +typedef struct +{ + uint16_t TIM_OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint16_t TIM_OutputState; /*!< Specifies the TIM Output Compare state. + This parameter can be a value of @ref TIM_Output_Compare_State */ + + uint16_t TIM_OutputNState; /*!< Specifies the TIM complementary Output Compare state. + This parameter can be a value of @ref TIM_Output_Compare_N_State + @note This parameter is valid only for TIM1 and TIM8. */ + + uint32_t TIM_Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between 0x0000 and 0xFFFF */ + + uint16_t TIM_OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint16_t TIM_OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for TIM1 and TIM8. */ + + uint16_t TIM_OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for TIM1 and TIM8. */ + + uint16_t TIM_OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for TIM1 and TIM8. */ +} TIM_OCInitTypeDef; + +/** + * @brief TIM Input Capture Init structure definition + */ + +typedef struct +{ + + uint16_t TIM_Channel; /*!< Specifies the TIM channel. + This parameter can be a value of @ref TIM_Channel */ + + uint16_t TIM_ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint16_t TIM_ICSelection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint16_t TIM_ICPrescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint16_t TIM_ICFilter; /*!< Specifies the input capture filter. + This parameter can be a number between 0x0 and 0xF */ +} TIM_ICInitTypeDef; + +/** + * @brief BDTR structure definition + * @note This structure is used only with TIM1 and TIM8. + */ + +typedef struct +{ + + uint16_t TIM_OSSRState; /*!< Specifies the Off-State selection used in Run mode. + This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */ + + uint16_t TIM_OSSIState; /*!< Specifies the Off-State used in Idle state. + This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */ + + uint16_t TIM_LOCKLevel; /*!< Specifies the LOCK level parameters. + This parameter can be a value of @ref TIM_Lock_level */ + + uint16_t TIM_DeadTime; /*!< Specifies the delay time between the switching-off and the + switching-on of the outputs. + This parameter can be a number between 0x00 and 0xFF */ + + uint16_t TIM_Break; /*!< Specifies whether the TIM Break input is enabled or not. + This parameter can be a value of @ref TIM_Break_Input_enable_disable */ + + uint16_t TIM_BreakPolarity; /*!< Specifies the TIM Break Input pin polarity. + This parameter can be a value of @ref TIM_Break_Polarity */ + + uint16_t TIM_AutomaticOutput; /*!< Specifies whether the TIM Automatic Output feature is enabled or not. + This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ +} TIM_BDTRInitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup TIM_Exported_constants + * @{ + */ + +#define IS_TIM_ALL_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ + ((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM4) || \ + ((PERIPH) == TIM5) || \ + ((PERIPH) == TIM6) || \ + ((PERIPH) == TIM7) || \ + ((PERIPH) == TIM8) || \ + ((PERIPH) == TIM9) || \ + ((PERIPH) == TIM10) || \ + ((PERIPH) == TIM11) || \ + ((PERIPH) == TIM12) || \ + (((PERIPH) == TIM13) || \ + ((PERIPH) == TIM14))) +/* LIST1: TIM1, TIM2, TIM3, TIM4, TIM5, TIM8, TIM9, TIM10, TIM11, TIM12, TIM13 and TIM14 */ +#define IS_TIM_LIST1_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ + ((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM4) || \ + ((PERIPH) == TIM5) || \ + ((PERIPH) == TIM8) || \ + ((PERIPH) == TIM9) || \ + ((PERIPH) == TIM10) || \ + ((PERIPH) == TIM11) || \ + ((PERIPH) == TIM12) || \ + ((PERIPH) == TIM13) || \ + ((PERIPH) == TIM14)) + +/* LIST2: TIM1, TIM2, TIM3, TIM4, TIM5, TIM8, TIM9 and TIM12 */ +#define IS_TIM_LIST2_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ + ((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM4) || \ + ((PERIPH) == TIM5) || \ + ((PERIPH) == TIM8) || \ + ((PERIPH) == TIM9) || \ + ((PERIPH) == TIM12)) +/* LIST3: TIM1, TIM2, TIM3, TIM4, TIM5 and TIM8 */ +#define IS_TIM_LIST3_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ + ((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM4) || \ + ((PERIPH) == TIM5) || \ + ((PERIPH) == TIM8)) +/* LIST4: TIM1 and TIM8 */ +#define IS_TIM_LIST4_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ + ((PERIPH) == TIM8)) +/* LIST5: TIM1, TIM2, TIM3, TIM4, TIM5, TIM6, TIM7 and TIM8 */ +#define IS_TIM_LIST5_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ + ((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM4) || \ + ((PERIPH) == TIM5) || \ + ((PERIPH) == TIM6) || \ + ((PERIPH) == TIM7) || \ + ((PERIPH) == TIM8)) +/* LIST6: TIM2, TIM5 and TIM11 */ +#define IS_TIM_LIST6_PERIPH(TIMx)(((TIMx) == TIM2) || \ + ((TIMx) == TIM5) || \ + ((TIMx) == TIM11)) + +/** @defgroup TIM_Output_Compare_and_PWM_modes + * @{ + */ + +#define TIM_OCMode_Timing ((uint16_t)0x0000) +#define TIM_OCMode_Active ((uint16_t)0x0010) +#define TIM_OCMode_Inactive ((uint16_t)0x0020) +#define TIM_OCMode_Toggle ((uint16_t)0x0030) +#define TIM_OCMode_PWM1 ((uint16_t)0x0060) +#define TIM_OCMode_PWM2 ((uint16_t)0x0070) +#define IS_TIM_OC_MODE(MODE) (((MODE) == TIM_OCMode_Timing) || \ + ((MODE) == TIM_OCMode_Active) || \ + ((MODE) == TIM_OCMode_Inactive) || \ + ((MODE) == TIM_OCMode_Toggle)|| \ + ((MODE) == TIM_OCMode_PWM1) || \ + ((MODE) == TIM_OCMode_PWM2)) +#define IS_TIM_OCM(MODE) (((MODE) == TIM_OCMode_Timing) || \ + ((MODE) == TIM_OCMode_Active) || \ + ((MODE) == TIM_OCMode_Inactive) || \ + ((MODE) == TIM_OCMode_Toggle)|| \ + ((MODE) == TIM_OCMode_PWM1) || \ + ((MODE) == TIM_OCMode_PWM2) || \ + ((MODE) == TIM_ForcedAction_Active) || \ + ((MODE) == TIM_ForcedAction_InActive)) +/** + * @} + */ + +/** @defgroup TIM_One_Pulse_Mode + * @{ + */ + +#define TIM_OPMode_Single ((uint16_t)0x0008) +#define TIM_OPMode_Repetitive ((uint16_t)0x0000) +#define IS_TIM_OPM_MODE(MODE) (((MODE) == TIM_OPMode_Single) || \ + ((MODE) == TIM_OPMode_Repetitive)) +/** + * @} + */ + +/** @defgroup TIM_Channel + * @{ + */ + +#define TIM_Channel_1 ((uint16_t)0x0000) +#define TIM_Channel_2 ((uint16_t)0x0004) +#define TIM_Channel_3 ((uint16_t)0x0008) +#define TIM_Channel_4 ((uint16_t)0x000C) + +#define IS_TIM_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \ + ((CHANNEL) == TIM_Channel_2) || \ + ((CHANNEL) == TIM_Channel_3) || \ + ((CHANNEL) == TIM_Channel_4)) + +#define IS_TIM_PWMI_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \ + ((CHANNEL) == TIM_Channel_2)) +#define IS_TIM_COMPLEMENTARY_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \ + ((CHANNEL) == TIM_Channel_2) || \ + ((CHANNEL) == TIM_Channel_3)) +/** + * @} + */ + +/** @defgroup TIM_Clock_Division_CKD + * @{ + */ + +#define TIM_CKD_DIV1 ((uint16_t)0x0000) +#define TIM_CKD_DIV2 ((uint16_t)0x0100) +#define TIM_CKD_DIV4 ((uint16_t)0x0200) +#define IS_TIM_CKD_DIV(DIV) (((DIV) == TIM_CKD_DIV1) || \ + ((DIV) == TIM_CKD_DIV2) || \ + ((DIV) == TIM_CKD_DIV4)) +/** + * @} + */ + +/** @defgroup TIM_Counter_Mode + * @{ + */ + +#define TIM_CounterMode_Up ((uint16_t)0x0000) +#define TIM_CounterMode_Down ((uint16_t)0x0010) +#define TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020) +#define TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040) +#define TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060) +#define IS_TIM_COUNTER_MODE(MODE) (((MODE) == TIM_CounterMode_Up) || \ + ((MODE) == TIM_CounterMode_Down) || \ + ((MODE) == TIM_CounterMode_CenterAligned1) || \ + ((MODE) == TIM_CounterMode_CenterAligned2) || \ + ((MODE) == TIM_CounterMode_CenterAligned3)) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Polarity + * @{ + */ + +#define TIM_OCPolarity_High ((uint16_t)0x0000) +#define TIM_OCPolarity_Low ((uint16_t)0x0002) +#define IS_TIM_OC_POLARITY(POLARITY) (((POLARITY) == TIM_OCPolarity_High) || \ + ((POLARITY) == TIM_OCPolarity_Low)) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Polarity + * @{ + */ + +#define TIM_OCNPolarity_High ((uint16_t)0x0000) +#define TIM_OCNPolarity_Low ((uint16_t)0x0008) +#define IS_TIM_OCN_POLARITY(POLARITY) (((POLARITY) == TIM_OCNPolarity_High) || \ + ((POLARITY) == TIM_OCNPolarity_Low)) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_State + * @{ + */ + +#define TIM_OutputState_Disable ((uint16_t)0x0000) +#define TIM_OutputState_Enable ((uint16_t)0x0001) +#define IS_TIM_OUTPUT_STATE(STATE) (((STATE) == TIM_OutputState_Disable) || \ + ((STATE) == TIM_OutputState_Enable)) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_State + * @{ + */ + +#define TIM_OutputNState_Disable ((uint16_t)0x0000) +#define TIM_OutputNState_Enable ((uint16_t)0x0004) +#define IS_TIM_OUTPUTN_STATE(STATE) (((STATE) == TIM_OutputNState_Disable) || \ + ((STATE) == TIM_OutputNState_Enable)) +/** + * @} + */ + +/** @defgroup TIM_Capture_Compare_State + * @{ + */ + +#define TIM_CCx_Enable ((uint16_t)0x0001) +#define TIM_CCx_Disable ((uint16_t)0x0000) +#define IS_TIM_CCX(CCX) (((CCX) == TIM_CCx_Enable) || \ + ((CCX) == TIM_CCx_Disable)) +/** + * @} + */ + +/** @defgroup TIM_Capture_Compare_N_State + * @{ + */ + +#define TIM_CCxN_Enable ((uint16_t)0x0004) +#define TIM_CCxN_Disable ((uint16_t)0x0000) +#define IS_TIM_CCXN(CCXN) (((CCXN) == TIM_CCxN_Enable) || \ + ((CCXN) == TIM_CCxN_Disable)) +/** + * @} + */ + +/** @defgroup TIM_Break_Input_enable_disable + * @{ + */ + +#define TIM_Break_Enable ((uint16_t)0x1000) +#define TIM_Break_Disable ((uint16_t)0x0000) +#define IS_TIM_BREAK_STATE(STATE) (((STATE) == TIM_Break_Enable) || \ + ((STATE) == TIM_Break_Disable)) +/** + * @} + */ + +/** @defgroup TIM_Break_Polarity + * @{ + */ + +#define TIM_BreakPolarity_Low ((uint16_t)0x0000) +#define TIM_BreakPolarity_High ((uint16_t)0x2000) +#define IS_TIM_BREAK_POLARITY(POLARITY) (((POLARITY) == TIM_BreakPolarity_Low) || \ + ((POLARITY) == TIM_BreakPolarity_High)) +/** + * @} + */ + +/** @defgroup TIM_AOE_Bit_Set_Reset + * @{ + */ + +#define TIM_AutomaticOutput_Enable ((uint16_t)0x4000) +#define TIM_AutomaticOutput_Disable ((uint16_t)0x0000) +#define IS_TIM_AUTOMATIC_OUTPUT_STATE(STATE) (((STATE) == TIM_AutomaticOutput_Enable) || \ + ((STATE) == TIM_AutomaticOutput_Disable)) +/** + * @} + */ + +/** @defgroup TIM_Lock_level + * @{ + */ + +#define TIM_LOCKLevel_OFF ((uint16_t)0x0000) +#define TIM_LOCKLevel_1 ((uint16_t)0x0100) +#define TIM_LOCKLevel_2 ((uint16_t)0x0200) +#define TIM_LOCKLevel_3 ((uint16_t)0x0300) +#define IS_TIM_LOCK_LEVEL(LEVEL) (((LEVEL) == TIM_LOCKLevel_OFF) || \ + ((LEVEL) == TIM_LOCKLevel_1) || \ + ((LEVEL) == TIM_LOCKLevel_2) || \ + ((LEVEL) == TIM_LOCKLevel_3)) +/** + * @} + */ + +/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state + * @{ + */ + +#define TIM_OSSIState_Enable ((uint16_t)0x0400) +#define TIM_OSSIState_Disable ((uint16_t)0x0000) +#define IS_TIM_OSSI_STATE(STATE) (((STATE) == TIM_OSSIState_Enable) || \ + ((STATE) == TIM_OSSIState_Disable)) +/** + * @} + */ + +/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state + * @{ + */ + +#define TIM_OSSRState_Enable ((uint16_t)0x0800) +#define TIM_OSSRState_Disable ((uint16_t)0x0000) +#define IS_TIM_OSSR_STATE(STATE) (((STATE) == TIM_OSSRState_Enable) || \ + ((STATE) == TIM_OSSRState_Disable)) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Idle_State + * @{ + */ + +#define TIM_OCIdleState_Set ((uint16_t)0x0100) +#define TIM_OCIdleState_Reset ((uint16_t)0x0000) +#define IS_TIM_OCIDLE_STATE(STATE) (((STATE) == TIM_OCIdleState_Set) || \ + ((STATE) == TIM_OCIdleState_Reset)) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Idle_State + * @{ + */ + +#define TIM_OCNIdleState_Set ((uint16_t)0x0200) +#define TIM_OCNIdleState_Reset ((uint16_t)0x0000) +#define IS_TIM_OCNIDLE_STATE(STATE) (((STATE) == TIM_OCNIdleState_Set) || \ + ((STATE) == TIM_OCNIdleState_Reset)) +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Polarity + * @{ + */ + +#define TIM_ICPolarity_Rising ((uint16_t)0x0000) +#define TIM_ICPolarity_Falling ((uint16_t)0x0002) +#define TIM_ICPolarity_BothEdge ((uint16_t)0x000A) +#define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \ + ((POLARITY) == TIM_ICPolarity_Falling)|| \ + ((POLARITY) == TIM_ICPolarity_BothEdge)) +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Selection + * @{ + */ + +#define TIM_ICSelection_DirectTI ((uint16_t)0x0001) /*!< TIM Input 1, 2, 3 or 4 is selected to be + connected to IC1, IC2, IC3 or IC4, respectively */ +#define TIM_ICSelection_IndirectTI ((uint16_t)0x0002) /*!< TIM Input 1, 2, 3 or 4 is selected to be + connected to IC2, IC1, IC4 or IC3, respectively. */ +#define TIM_ICSelection_TRC ((uint16_t)0x0003) /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */ +#define IS_TIM_IC_SELECTION(SELECTION) (((SELECTION) == TIM_ICSelection_DirectTI) || \ + ((SELECTION) == TIM_ICSelection_IndirectTI) || \ + ((SELECTION) == TIM_ICSelection_TRC)) +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Prescaler + * @{ + */ + +#define TIM_ICPSC_DIV1 ((uint16_t)0x0000) /*!< Capture performed each time an edge is detected on the capture input. */ +#define TIM_ICPSC_DIV2 ((uint16_t)0x0004) /*!< Capture performed once every 2 events. */ +#define TIM_ICPSC_DIV4 ((uint16_t)0x0008) /*!< Capture performed once every 4 events. */ +#define TIM_ICPSC_DIV8 ((uint16_t)0x000C) /*!< Capture performed once every 8 events. */ +#define IS_TIM_IC_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ICPSC_DIV1) || \ + ((PRESCALER) == TIM_ICPSC_DIV2) || \ + ((PRESCALER) == TIM_ICPSC_DIV4) || \ + ((PRESCALER) == TIM_ICPSC_DIV8)) +/** + * @} + */ + +/** @defgroup TIM_interrupt_sources + * @{ + */ + +#define TIM_IT_Update ((uint16_t)0x0001) +#define TIM_IT_CC1 ((uint16_t)0x0002) +#define TIM_IT_CC2 ((uint16_t)0x0004) +#define TIM_IT_CC3 ((uint16_t)0x0008) +#define TIM_IT_CC4 ((uint16_t)0x0010) +#define TIM_IT_COM ((uint16_t)0x0020) +#define TIM_IT_Trigger ((uint16_t)0x0040) +#define TIM_IT_Break ((uint16_t)0x0080) +#define IS_TIM_IT(IT) ((((IT) & (uint16_t)0xFF00) == 0x0000) && ((IT) != 0x0000)) + +#define IS_TIM_GET_IT(IT) (((IT) == TIM_IT_Update) || \ + ((IT) == TIM_IT_CC1) || \ + ((IT) == TIM_IT_CC2) || \ + ((IT) == TIM_IT_CC3) || \ + ((IT) == TIM_IT_CC4) || \ + ((IT) == TIM_IT_COM) || \ + ((IT) == TIM_IT_Trigger) || \ + ((IT) == TIM_IT_Break)) +/** + * @} + */ + +/** @defgroup TIM_DMA_Base_address + * @{ + */ + +#define TIM_DMABase_CR1 ((uint16_t)0x0000) +#define TIM_DMABase_CR2 ((uint16_t)0x0001) +#define TIM_DMABase_SMCR ((uint16_t)0x0002) +#define TIM_DMABase_DIER ((uint16_t)0x0003) +#define TIM_DMABase_SR ((uint16_t)0x0004) +#define TIM_DMABase_EGR ((uint16_t)0x0005) +#define TIM_DMABase_CCMR1 ((uint16_t)0x0006) +#define TIM_DMABase_CCMR2 ((uint16_t)0x0007) +#define TIM_DMABase_CCER ((uint16_t)0x0008) +#define TIM_DMABase_CNT ((uint16_t)0x0009) +#define TIM_DMABase_PSC ((uint16_t)0x000A) +#define TIM_DMABase_ARR ((uint16_t)0x000B) +#define TIM_DMABase_RCR ((uint16_t)0x000C) +#define TIM_DMABase_CCR1 ((uint16_t)0x000D) +#define TIM_DMABase_CCR2 ((uint16_t)0x000E) +#define TIM_DMABase_CCR3 ((uint16_t)0x000F) +#define TIM_DMABase_CCR4 ((uint16_t)0x0010) +#define TIM_DMABase_BDTR ((uint16_t)0x0011) +#define TIM_DMABase_DCR ((uint16_t)0x0012) +#define TIM_DMABase_OR ((uint16_t)0x0013) +#define IS_TIM_DMA_BASE(BASE) (((BASE) == TIM_DMABase_CR1) || \ + ((BASE) == TIM_DMABase_CR2) || \ + ((BASE) == TIM_DMABase_SMCR) || \ + ((BASE) == TIM_DMABase_DIER) || \ + ((BASE) == TIM_DMABase_SR) || \ + ((BASE) == TIM_DMABase_EGR) || \ + ((BASE) == TIM_DMABase_CCMR1) || \ + ((BASE) == TIM_DMABase_CCMR2) || \ + ((BASE) == TIM_DMABase_CCER) || \ + ((BASE) == TIM_DMABase_CNT) || \ + ((BASE) == TIM_DMABase_PSC) || \ + ((BASE) == TIM_DMABase_ARR) || \ + ((BASE) == TIM_DMABase_RCR) || \ + ((BASE) == TIM_DMABase_CCR1) || \ + ((BASE) == TIM_DMABase_CCR2) || \ + ((BASE) == TIM_DMABase_CCR3) || \ + ((BASE) == TIM_DMABase_CCR4) || \ + ((BASE) == TIM_DMABase_BDTR) || \ + ((BASE) == TIM_DMABase_DCR) || \ + ((BASE) == TIM_DMABase_OR)) +/** + * @} + */ + +/** @defgroup TIM_DMA_Burst_Length + * @{ + */ + +#define TIM_DMABurstLength_1Transfer ((uint16_t)0x0000) +#define TIM_DMABurstLength_2Transfers ((uint16_t)0x0100) +#define TIM_DMABurstLength_3Transfers ((uint16_t)0x0200) +#define TIM_DMABurstLength_4Transfers ((uint16_t)0x0300) +#define TIM_DMABurstLength_5Transfers ((uint16_t)0x0400) +#define TIM_DMABurstLength_6Transfers ((uint16_t)0x0500) +#define TIM_DMABurstLength_7Transfers ((uint16_t)0x0600) +#define TIM_DMABurstLength_8Transfers ((uint16_t)0x0700) +#define TIM_DMABurstLength_9Transfers ((uint16_t)0x0800) +#define TIM_DMABurstLength_10Transfers ((uint16_t)0x0900) +#define TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00) +#define TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00) +#define TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00) +#define TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00) +#define TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00) +#define TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00) +#define TIM_DMABurstLength_17Transfers ((uint16_t)0x1000) +#define TIM_DMABurstLength_18Transfers ((uint16_t)0x1100) +#define IS_TIM_DMA_LENGTH(LENGTH) (((LENGTH) == TIM_DMABurstLength_1Transfer) || \ + ((LENGTH) == TIM_DMABurstLength_2Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_3Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_4Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_5Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_6Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_7Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_8Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_9Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_10Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_11Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_12Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_13Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_14Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_15Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_16Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_17Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_18Transfers)) +/** + * @} + */ + +/** @defgroup TIM_DMA_sources + * @{ + */ + +#define TIM_DMA_Update ((uint16_t)0x0100) +#define TIM_DMA_CC1 ((uint16_t)0x0200) +#define TIM_DMA_CC2 ((uint16_t)0x0400) +#define TIM_DMA_CC3 ((uint16_t)0x0800) +#define TIM_DMA_CC4 ((uint16_t)0x1000) +#define TIM_DMA_COM ((uint16_t)0x2000) +#define TIM_DMA_Trigger ((uint16_t)0x4000) +#define IS_TIM_DMA_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0x80FF) == 0x0000) && ((SOURCE) != 0x0000)) + +/** + * @} + */ + +/** @defgroup TIM_External_Trigger_Prescaler + * @{ + */ + +#define TIM_ExtTRGPSC_OFF ((uint16_t)0x0000) +#define TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000) +#define TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000) +#define TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000) +#define IS_TIM_EXT_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ExtTRGPSC_OFF) || \ + ((PRESCALER) == TIM_ExtTRGPSC_DIV2) || \ + ((PRESCALER) == TIM_ExtTRGPSC_DIV4) || \ + ((PRESCALER) == TIM_ExtTRGPSC_DIV8)) +/** + * @} + */ + +/** @defgroup TIM_Internal_Trigger_Selection + * @{ + */ + +#define TIM_TS_ITR0 ((uint16_t)0x0000) +#define TIM_TS_ITR1 ((uint16_t)0x0010) +#define TIM_TS_ITR2 ((uint16_t)0x0020) +#define TIM_TS_ITR3 ((uint16_t)0x0030) +#define TIM_TS_TI1F_ED ((uint16_t)0x0040) +#define TIM_TS_TI1FP1 ((uint16_t)0x0050) +#define TIM_TS_TI2FP2 ((uint16_t)0x0060) +#define TIM_TS_ETRF ((uint16_t)0x0070) +#define IS_TIM_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ + ((SELECTION) == TIM_TS_ITR1) || \ + ((SELECTION) == TIM_TS_ITR2) || \ + ((SELECTION) == TIM_TS_ITR3) || \ + ((SELECTION) == TIM_TS_TI1F_ED) || \ + ((SELECTION) == TIM_TS_TI1FP1) || \ + ((SELECTION) == TIM_TS_TI2FP2) || \ + ((SELECTION) == TIM_TS_ETRF)) +#define IS_TIM_INTERNAL_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ + ((SELECTION) == TIM_TS_ITR1) || \ + ((SELECTION) == TIM_TS_ITR2) || \ + ((SELECTION) == TIM_TS_ITR3)) +/** + * @} + */ + +/** @defgroup TIM_TIx_External_Clock_Source + * @{ + */ + +#define TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050) +#define TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060) +#define TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040) + +/** + * @} + */ + +/** @defgroup TIM_External_Trigger_Polarity + * @{ + */ +#define TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000) +#define TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000) +#define IS_TIM_EXT_POLARITY(POLARITY) (((POLARITY) == TIM_ExtTRGPolarity_Inverted) || \ + ((POLARITY) == TIM_ExtTRGPolarity_NonInverted)) +/** + * @} + */ + +/** @defgroup TIM_Prescaler_Reload_Mode + * @{ + */ + +#define TIM_PSCReloadMode_Update ((uint16_t)0x0000) +#define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001) +#define IS_TIM_PRESCALER_RELOAD(RELOAD) (((RELOAD) == TIM_PSCReloadMode_Update) || \ + ((RELOAD) == TIM_PSCReloadMode_Immediate)) +/** + * @} + */ + +/** @defgroup TIM_Forced_Action + * @{ + */ + +#define TIM_ForcedAction_Active ((uint16_t)0x0050) +#define TIM_ForcedAction_InActive ((uint16_t)0x0040) +#define IS_TIM_FORCED_ACTION(ACTION) (((ACTION) == TIM_ForcedAction_Active) || \ + ((ACTION) == TIM_ForcedAction_InActive)) +/** + * @} + */ + +/** @defgroup TIM_Encoder_Mode + * @{ + */ + +#define TIM_EncoderMode_TI1 ((uint16_t)0x0001) +#define TIM_EncoderMode_TI2 ((uint16_t)0x0002) +#define TIM_EncoderMode_TI12 ((uint16_t)0x0003) +#define IS_TIM_ENCODER_MODE(MODE) (((MODE) == TIM_EncoderMode_TI1) || \ + ((MODE) == TIM_EncoderMode_TI2) || \ + ((MODE) == TIM_EncoderMode_TI12)) +/** + * @} + */ + + +/** @defgroup TIM_Event_Source + * @{ + */ + +#define TIM_EventSource_Update ((uint16_t)0x0001) +#define TIM_EventSource_CC1 ((uint16_t)0x0002) +#define TIM_EventSource_CC2 ((uint16_t)0x0004) +#define TIM_EventSource_CC3 ((uint16_t)0x0008) +#define TIM_EventSource_CC4 ((uint16_t)0x0010) +#define TIM_EventSource_COM ((uint16_t)0x0020) +#define TIM_EventSource_Trigger ((uint16_t)0x0040) +#define TIM_EventSource_Break ((uint16_t)0x0080) +#define IS_TIM_EVENT_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0xFF00) == 0x0000) && ((SOURCE) != 0x0000)) + +/** + * @} + */ + +/** @defgroup TIM_Update_Source + * @{ + */ + +#define TIM_UpdateSource_Global ((uint16_t)0x0000) /*!< Source of update is the counter overflow/underflow + or the setting of UG bit, or an update generation + through the slave mode controller. */ +#define TIM_UpdateSource_Regular ((uint16_t)0x0001) /*!< Source of update is counter overflow/underflow. */ +#define IS_TIM_UPDATE_SOURCE(SOURCE) (((SOURCE) == TIM_UpdateSource_Global) || \ + ((SOURCE) == TIM_UpdateSource_Regular)) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Preload_State + * @{ + */ + +#define TIM_OCPreload_Enable ((uint16_t)0x0008) +#define TIM_OCPreload_Disable ((uint16_t)0x0000) +#define IS_TIM_OCPRELOAD_STATE(STATE) (((STATE) == TIM_OCPreload_Enable) || \ + ((STATE) == TIM_OCPreload_Disable)) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Fast_State + * @{ + */ + +#define TIM_OCFast_Enable ((uint16_t)0x0004) +#define TIM_OCFast_Disable ((uint16_t)0x0000) +#define IS_TIM_OCFAST_STATE(STATE) (((STATE) == TIM_OCFast_Enable) || \ + ((STATE) == TIM_OCFast_Disable)) + +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Clear_State + * @{ + */ + +#define TIM_OCClear_Enable ((uint16_t)0x0080) +#define TIM_OCClear_Disable ((uint16_t)0x0000) +#define IS_TIM_OCCLEAR_STATE(STATE) (((STATE) == TIM_OCClear_Enable) || \ + ((STATE) == TIM_OCClear_Disable)) +/** + * @} + */ + +/** @defgroup TIM_Trigger_Output_Source + * @{ + */ + +#define TIM_TRGOSource_Reset ((uint16_t)0x0000) +#define TIM_TRGOSource_Enable ((uint16_t)0x0010) +#define TIM_TRGOSource_Update ((uint16_t)0x0020) +#define TIM_TRGOSource_OC1 ((uint16_t)0x0030) +#define TIM_TRGOSource_OC1Ref ((uint16_t)0x0040) +#define TIM_TRGOSource_OC2Ref ((uint16_t)0x0050) +#define TIM_TRGOSource_OC3Ref ((uint16_t)0x0060) +#define TIM_TRGOSource_OC4Ref ((uint16_t)0x0070) +#define IS_TIM_TRGO_SOURCE(SOURCE) (((SOURCE) == TIM_TRGOSource_Reset) || \ + ((SOURCE) == TIM_TRGOSource_Enable) || \ + ((SOURCE) == TIM_TRGOSource_Update) || \ + ((SOURCE) == TIM_TRGOSource_OC1) || \ + ((SOURCE) == TIM_TRGOSource_OC1Ref) || \ + ((SOURCE) == TIM_TRGOSource_OC2Ref) || \ + ((SOURCE) == TIM_TRGOSource_OC3Ref) || \ + ((SOURCE) == TIM_TRGOSource_OC4Ref)) +/** + * @} + */ + +/** @defgroup TIM_Slave_Mode + * @{ + */ + +#define TIM_SlaveMode_Reset ((uint16_t)0x0004) +#define TIM_SlaveMode_Gated ((uint16_t)0x0005) +#define TIM_SlaveMode_Trigger ((uint16_t)0x0006) +#define TIM_SlaveMode_External1 ((uint16_t)0x0007) +#define IS_TIM_SLAVE_MODE(MODE) (((MODE) == TIM_SlaveMode_Reset) || \ + ((MODE) == TIM_SlaveMode_Gated) || \ + ((MODE) == TIM_SlaveMode_Trigger) || \ + ((MODE) == TIM_SlaveMode_External1)) +/** + * @} + */ + +/** @defgroup TIM_Master_Slave_Mode + * @{ + */ + +#define TIM_MasterSlaveMode_Enable ((uint16_t)0x0080) +#define TIM_MasterSlaveMode_Disable ((uint16_t)0x0000) +#define IS_TIM_MSM_STATE(STATE) (((STATE) == TIM_MasterSlaveMode_Enable) || \ + ((STATE) == TIM_MasterSlaveMode_Disable)) +/** + * @} + */ +/** @defgroup TIM_Remap + * @{ + */ + +#define TIM2_TIM8_TRGO ((uint16_t)0x0000) +#define TIM2_ETH_PTP ((uint16_t)0x0400) +#define TIM2_USBFS_SOF ((uint16_t)0x0800) +#define TIM2_USBHS_SOF ((uint16_t)0x0C00) + +#define TIM5_GPIO ((uint16_t)0x0000) +#define TIM5_LSI ((uint16_t)0x0040) +#define TIM5_LSE ((uint16_t)0x0080) +#define TIM5_RTC ((uint16_t)0x00C0) + +#define TIM11_GPIO ((uint16_t)0x0000) +#define TIM11_HSE ((uint16_t)0x0002) + +#define IS_TIM_REMAP(TIM_REMAP) (((TIM_REMAP) == TIM2_TIM8_TRGO)||\ + ((TIM_REMAP) == TIM2_ETH_PTP)||\ + ((TIM_REMAP) == TIM2_USBFS_SOF)||\ + ((TIM_REMAP) == TIM2_USBHS_SOF)||\ + ((TIM_REMAP) == TIM5_GPIO)||\ + ((TIM_REMAP) == TIM5_LSI)||\ + ((TIM_REMAP) == TIM5_LSE)||\ + ((TIM_REMAP) == TIM5_RTC)||\ + ((TIM_REMAP) == TIM11_GPIO)||\ + ((TIM_REMAP) == TIM11_HSE)) + +/** + * @} + */ +/** @defgroup TIM_Flags + * @{ + */ + +#define TIM_FLAG_Update ((uint16_t)0x0001) +#define TIM_FLAG_CC1 ((uint16_t)0x0002) +#define TIM_FLAG_CC2 ((uint16_t)0x0004) +#define TIM_FLAG_CC3 ((uint16_t)0x0008) +#define TIM_FLAG_CC4 ((uint16_t)0x0010) +#define TIM_FLAG_COM ((uint16_t)0x0020) +#define TIM_FLAG_Trigger ((uint16_t)0x0040) +#define TIM_FLAG_Break ((uint16_t)0x0080) +#define TIM_FLAG_CC1OF ((uint16_t)0x0200) +#define TIM_FLAG_CC2OF ((uint16_t)0x0400) +#define TIM_FLAG_CC3OF ((uint16_t)0x0800) +#define TIM_FLAG_CC4OF ((uint16_t)0x1000) +#define IS_TIM_GET_FLAG(FLAG) (((FLAG) == TIM_FLAG_Update) || \ + ((FLAG) == TIM_FLAG_CC1) || \ + ((FLAG) == TIM_FLAG_CC2) || \ + ((FLAG) == TIM_FLAG_CC3) || \ + ((FLAG) == TIM_FLAG_CC4) || \ + ((FLAG) == TIM_FLAG_COM) || \ + ((FLAG) == TIM_FLAG_Trigger) || \ + ((FLAG) == TIM_FLAG_Break) || \ + ((FLAG) == TIM_FLAG_CC1OF) || \ + ((FLAG) == TIM_FLAG_CC2OF) || \ + ((FLAG) == TIM_FLAG_CC3OF) || \ + ((FLAG) == TIM_FLAG_CC4OF)) + +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Filer_Value + * @{ + */ + +#define IS_TIM_IC_FILTER(ICFILTER) ((ICFILTER) <= 0xF) +/** + * @} + */ + +/** @defgroup TIM_External_Trigger_Filter + * @{ + */ + +#define IS_TIM_EXT_FILTER(EXTFILTER) ((EXTFILTER) <= 0xF) +/** + * @} + */ + +/** @defgroup TIM_Legacy + * @{ + */ + +#define TIM_DMABurstLength_1Byte TIM_DMABurstLength_1Transfer +#define TIM_DMABurstLength_2Bytes TIM_DMABurstLength_2Transfers +#define TIM_DMABurstLength_3Bytes TIM_DMABurstLength_3Transfers +#define TIM_DMABurstLength_4Bytes TIM_DMABurstLength_4Transfers +#define TIM_DMABurstLength_5Bytes TIM_DMABurstLength_5Transfers +#define TIM_DMABurstLength_6Bytes TIM_DMABurstLength_6Transfers +#define TIM_DMABurstLength_7Bytes TIM_DMABurstLength_7Transfers +#define TIM_DMABurstLength_8Bytes TIM_DMABurstLength_8Transfers +#define TIM_DMABurstLength_9Bytes TIM_DMABurstLength_9Transfers +#define TIM_DMABurstLength_10Bytes TIM_DMABurstLength_10Transfers +#define TIM_DMABurstLength_11Bytes TIM_DMABurstLength_11Transfers +#define TIM_DMABurstLength_12Bytes TIM_DMABurstLength_12Transfers +#define TIM_DMABurstLength_13Bytes TIM_DMABurstLength_13Transfers +#define TIM_DMABurstLength_14Bytes TIM_DMABurstLength_14Transfers +#define TIM_DMABurstLength_15Bytes TIM_DMABurstLength_15Transfers +#define TIM_DMABurstLength_16Bytes TIM_DMABurstLength_16Transfers +#define TIM_DMABurstLength_17Bytes TIM_DMABurstLength_17Transfers +#define TIM_DMABurstLength_18Bytes TIM_DMABurstLength_18Transfers +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* TimeBase management ********************************************************/ +void TIM_DeInit(TIM_TypeDef* TIMx); +void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); +void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); +void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode); +void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode); +void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter); +void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload); +uint32_t TIM_GetCounter(TIM_TypeDef* TIMx); +uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx); +void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource); +void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode); +void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD); +void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); + +/* Output Compare management **************************************************/ +void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode); +void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1); +void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2); +void TIM_SetCompare3(TIM_TypeDef* TIMx, uint32_t Compare3); +void TIM_SetCompare4(TIM_TypeDef* TIMx, uint32_t Compare4); +void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); +void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); +void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); +void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx); +void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN); + +/* Input Capture management ***************************************************/ +void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); +void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct); +void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); +uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx); +uint32_t TIM_GetCapture2(TIM_TypeDef* TIMx); +uint32_t TIM_GetCapture3(TIM_TypeDef* TIMx); +uint32_t TIM_GetCapture4(TIM_TypeDef* TIMx); +void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); + +/* Advanced-control timers (TIM1 and TIM8) specific features ******************/ +void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct); +void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct); +void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState); + +/* Interrupts, DMA and flags management ***************************************/ +void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); +void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource); +FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); +void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); +ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT); +void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT); +void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength); +void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState); +void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState); + +/* Clocks management **********************************************************/ +void TIM_InternalClockConfig(TIM_TypeDef* TIMx); +void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); +void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, + uint16_t TIM_ICPolarity, uint16_t ICFilter); +void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter); +void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, + uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter); + +/* Synchronization management *************************************************/ +void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); +void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource); +void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); +void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode); +void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter); + +/* Specific interface management **********************************************/ +void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, + uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity); +void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState); + +/* Specific remapping management **********************************************/ +void TIM_RemapConfig(TIM_TypeDef* TIMx, uint16_t TIM_Remap); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F2xx_TIM_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_usart.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_usart.h new file mode 100644 index 000000000..dd27ac1f3 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_usart.h @@ -0,0 +1,429 @@ +/** + ****************************************************************************** + * @file stm32f2xx_usart.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the USART + * firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_USART_H +#define __STM32F2xx_USART_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup USART + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief USART Init Structure definition + */ + +typedef struct +{ + uint32_t USART_BaudRate; /*!< This member configures the USART communication baud rate. + The baud rate is computed using the following formula: + - IntegerDivider = ((PCLKx) / (8 * (OVR8+1) * (USART_InitStruct->USART_BaudRate))) + - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 8 * (OVR8+1)) + 0.5 + Where OVR8 is the "oversampling by 8 mode" configuration bit in the CR1 register. */ + + uint16_t USART_WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. + This parameter can be a value of @ref USART_Word_Length */ + + uint16_t USART_StopBits; /*!< Specifies the number of stop bits transmitted. + This parameter can be a value of @ref USART_Stop_Bits */ + + uint16_t USART_Parity; /*!< Specifies the parity mode. + This parameter can be a value of @ref USART_Parity + @note When parity is enabled, the computed parity is inserted + at the MSB position of the transmitted data (9th bit when + the word length is set to 9 data bits; 8th bit when the + word length is set to 8 data bits). */ + + uint16_t USART_Mode; /*!< Specifies wether the Receive or Transmit mode is enabled or disabled. + This parameter can be a value of @ref USART_Mode */ + + uint16_t USART_HardwareFlowControl; /*!< Specifies wether the hardware flow control mode is enabled + or disabled. + This parameter can be a value of @ref USART_Hardware_Flow_Control */ +} USART_InitTypeDef; + +/** + * @brief USART Clock Init Structure definition + */ + +typedef struct +{ + + uint16_t USART_Clock; /*!< Specifies whether the USART clock is enabled or disabled. + This parameter can be a value of @ref USART_Clock */ + + uint16_t USART_CPOL; /*!< Specifies the steady state of the serial clock. + This parameter can be a value of @ref USART_Clock_Polarity */ + + uint16_t USART_CPHA; /*!< Specifies the clock transition on which the bit capture is made. + This parameter can be a value of @ref USART_Clock_Phase */ + + uint16_t USART_LastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted + data bit (MSB) has to be output on the SCLK pin in synchronous mode. + This parameter can be a value of @ref USART_Last_Bit */ +} USART_ClockInitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup USART_Exported_Constants + * @{ + */ + +#define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == USART1) || \ + ((PERIPH) == USART2) || \ + ((PERIPH) == USART3) || \ + ((PERIPH) == UART4) || \ + ((PERIPH) == UART5) || \ + ((PERIPH) == USART6)) + +#define IS_USART_1236_PERIPH(PERIPH) (((PERIPH) == USART1) || \ + ((PERIPH) == USART2) || \ + ((PERIPH) == USART3) || \ + ((PERIPH) == USART6)) + +/** @defgroup USART_Word_Length + * @{ + */ + +#define USART_WordLength_8b ((uint16_t)0x0000) +#define USART_WordLength_9b ((uint16_t)0x1000) + +#define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WordLength_8b) || \ + ((LENGTH) == USART_WordLength_9b)) +/** + * @} + */ + +/** @defgroup USART_Stop_Bits + * @{ + */ + +#define USART_StopBits_1 ((uint16_t)0x0000) +#define USART_StopBits_0_5 ((uint16_t)0x1000) +#define USART_StopBits_2 ((uint16_t)0x2000) +#define USART_StopBits_1_5 ((uint16_t)0x3000) +#define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \ + ((STOPBITS) == USART_StopBits_0_5) || \ + ((STOPBITS) == USART_StopBits_2) || \ + ((STOPBITS) == USART_StopBits_1_5)) +/** + * @} + */ + +/** @defgroup USART_Parity + * @{ + */ + +#define USART_Parity_No ((uint16_t)0x0000) +#define USART_Parity_Even ((uint16_t)0x0400) +#define USART_Parity_Odd ((uint16_t)0x0600) +#define IS_USART_PARITY(PARITY) (((PARITY) == USART_Parity_No) || \ + ((PARITY) == USART_Parity_Even) || \ + ((PARITY) == USART_Parity_Odd)) +/** + * @} + */ + +/** @defgroup USART_Mode + * @{ + */ + +#define USART_Mode_Rx ((uint16_t)0x0004) +#define USART_Mode_Tx ((uint16_t)0x0008) +#define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFF3) == 0x00) && ((MODE) != (uint16_t)0x00)) +/** + * @} + */ + +/** @defgroup USART_Hardware_Flow_Control + * @{ + */ +#define USART_HardwareFlowControl_None ((uint16_t)0x0000) +#define USART_HardwareFlowControl_RTS ((uint16_t)0x0100) +#define USART_HardwareFlowControl_CTS ((uint16_t)0x0200) +#define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300) +#define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\ + (((CONTROL) == USART_HardwareFlowControl_None) || \ + ((CONTROL) == USART_HardwareFlowControl_RTS) || \ + ((CONTROL) == USART_HardwareFlowControl_CTS) || \ + ((CONTROL) == USART_HardwareFlowControl_RTS_CTS)) +/** + * @} + */ + +/** @defgroup USART_Clock + * @{ + */ +#define USART_Clock_Disable ((uint16_t)0x0000) +#define USART_Clock_Enable ((uint16_t)0x0800) +#define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_Clock_Disable) || \ + ((CLOCK) == USART_Clock_Enable)) +/** + * @} + */ + +/** @defgroup USART_Clock_Polarity + * @{ + */ + +#define USART_CPOL_Low ((uint16_t)0x0000) +#define USART_CPOL_High ((uint16_t)0x0400) +#define IS_USART_CPOL(CPOL) (((CPOL) == USART_CPOL_Low) || ((CPOL) == USART_CPOL_High)) + +/** + * @} + */ + +/** @defgroup USART_Clock_Phase + * @{ + */ + +#define USART_CPHA_1Edge ((uint16_t)0x0000) +#define USART_CPHA_2Edge ((uint16_t)0x0200) +#define IS_USART_CPHA(CPHA) (((CPHA) == USART_CPHA_1Edge) || ((CPHA) == USART_CPHA_2Edge)) + +/** + * @} + */ + +/** @defgroup USART_Last_Bit + * @{ + */ + +#define USART_LastBit_Disable ((uint16_t)0x0000) +#define USART_LastBit_Enable ((uint16_t)0x0100) +#define IS_USART_LASTBIT(LASTBIT) (((LASTBIT) == USART_LastBit_Disable) || \ + ((LASTBIT) == USART_LastBit_Enable)) +/** + * @} + */ + +/** @defgroup USART_Interrupt_definition + * @{ + */ + +#define USART_IT_PE ((uint16_t)0x0028) +#define USART_IT_TXE ((uint16_t)0x0727) +#define USART_IT_TC ((uint16_t)0x0626) +#define USART_IT_RXNE ((uint16_t)0x0525) +#define USART_IT_ORE_RX ((uint16_t)0x0325) /* In case interrupt is generated if the RXNEIE bit is set */ +#define USART_IT_IDLE ((uint16_t)0x0424) +#define USART_IT_LBD ((uint16_t)0x0846) +#define USART_IT_CTS ((uint16_t)0x096A) +#define USART_IT_ERR ((uint16_t)0x0060) +#define USART_IT_ORE_ER ((uint16_t)0x0360) /* In case interrupt is generated if the EIE bit is set */ +#define USART_IT_NE ((uint16_t)0x0260) +#define USART_IT_FE ((uint16_t)0x0160) + +/** @defgroup USART_Legacy + * @{ + */ +#define USART_IT_ORE USART_IT_ORE_ER +/** + * @} + */ + +#define IS_USART_CONFIG_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \ + ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \ + ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \ + ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ERR)) +#define IS_USART_GET_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \ + ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \ + ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \ + ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ORE) || \ + ((IT) == USART_IT_ORE_RX) || ((IT) == USART_IT_ORE_ER) || \ + ((IT) == USART_IT_NE) || ((IT) == USART_IT_FE)) +#define IS_USART_CLEAR_IT(IT) (((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \ + ((IT) == USART_IT_LBD) || ((IT) == USART_IT_CTS)) +/** + * @} + */ + +/** @defgroup USART_DMA_Requests + * @{ + */ + +#define USART_DMAReq_Tx ((uint16_t)0x0080) +#define USART_DMAReq_Rx ((uint16_t)0x0040) +#define IS_USART_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFF3F) == 0x00) && ((DMAREQ) != (uint16_t)0x00)) + +/** + * @} + */ + +/** @defgroup USART_WakeUp_methods + * @{ + */ + +#define USART_WakeUp_IdleLine ((uint16_t)0x0000) +#define USART_WakeUp_AddressMark ((uint16_t)0x0800) +#define IS_USART_WAKEUP(WAKEUP) (((WAKEUP) == USART_WakeUp_IdleLine) || \ + ((WAKEUP) == USART_WakeUp_AddressMark)) +/** + * @} + */ + +/** @defgroup USART_LIN_Break_Detection_Length + * @{ + */ + +#define USART_LINBreakDetectLength_10b ((uint16_t)0x0000) +#define USART_LINBreakDetectLength_11b ((uint16_t)0x0020) +#define IS_USART_LIN_BREAK_DETECT_LENGTH(LENGTH) \ + (((LENGTH) == USART_LINBreakDetectLength_10b) || \ + ((LENGTH) == USART_LINBreakDetectLength_11b)) +/** + * @} + */ + +/** @defgroup USART_IrDA_Low_Power + * @{ + */ + +#define USART_IrDAMode_LowPower ((uint16_t)0x0004) +#define USART_IrDAMode_Normal ((uint16_t)0x0000) +#define IS_USART_IRDA_MODE(MODE) (((MODE) == USART_IrDAMode_LowPower) || \ + ((MODE) == USART_IrDAMode_Normal)) +/** + * @} + */ + +/** @defgroup USART_Flags + * @{ + */ + +#define USART_FLAG_CTS ((uint16_t)0x0200) +#define USART_FLAG_LBD ((uint16_t)0x0100) +#define USART_FLAG_TXE ((uint16_t)0x0080) +#define USART_FLAG_TC ((uint16_t)0x0040) +#define USART_FLAG_RXNE ((uint16_t)0x0020) +#define USART_FLAG_IDLE ((uint16_t)0x0010) +#define USART_FLAG_ORE ((uint16_t)0x0008) +#define USART_FLAG_NE ((uint16_t)0x0004) +#define USART_FLAG_FE ((uint16_t)0x0002) +#define USART_FLAG_PE ((uint16_t)0x0001) +#define IS_USART_FLAG(FLAG) (((FLAG) == USART_FLAG_PE) || ((FLAG) == USART_FLAG_TXE) || \ + ((FLAG) == USART_FLAG_TC) || ((FLAG) == USART_FLAG_RXNE) || \ + ((FLAG) == USART_FLAG_IDLE) || ((FLAG) == USART_FLAG_LBD) || \ + ((FLAG) == USART_FLAG_CTS) || ((FLAG) == USART_FLAG_ORE) || \ + ((FLAG) == USART_FLAG_NE) || ((FLAG) == USART_FLAG_FE)) + +#define IS_USART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFC9F) == 0x00) && ((FLAG) != (uint16_t)0x00)) + +#define IS_USART_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) < 7500001)) +#define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF) +#define IS_USART_DATA(DATA) ((DATA) <= 0x1FF) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the USART configuration to the default reset state ***/ +void USART_DeInit(USART_TypeDef* USARTx); + +/* Initialization and Configuration functions *********************************/ +void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); +void USART_StructInit(USART_InitTypeDef* USART_InitStruct); +void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct); +void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct); +void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler); +void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState); + +/* Data transfers functions ***************************************************/ +void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); +uint16_t USART_ReceiveData(USART_TypeDef* USARTx); + +/* Multi-Processor Communication functions ************************************/ +void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address); +void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp); +void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState); + +/* LIN mode functions *********************************************************/ +void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength); +void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_SendBreak(USART_TypeDef* USARTx); + +/* Half-duplex mode function **************************************************/ +void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState); + +/* Smartcard mode functions ***************************************************/ +void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime); + +/* IrDA mode functions ********************************************************/ +void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode); +void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState); + +/* DMA transfers management functions *****************************************/ +void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); + +/* Interrupts and flags management functions **********************************/ +void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState); +FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); +void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); +ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); +void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_USART_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_wwdg.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_wwdg.h new file mode 100644 index 000000000..c4c1969dc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_wwdg.h @@ -0,0 +1,111 @@ +/** + ****************************************************************************** + * @file stm32f2xx_wwdg.h + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file contains all the functions prototypes for the WWDG firmware + * library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_WWDG_H +#define __STM32F2xx_WWDG_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup WWDG + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup WWDG_Exported_Constants + * @{ + */ + +/** @defgroup WWDG_Prescaler + * @{ + */ + +#define WWDG_Prescaler_1 ((uint32_t)0x00000000) +#define WWDG_Prescaler_2 ((uint32_t)0x00000080) +#define WWDG_Prescaler_4 ((uint32_t)0x00000100) +#define WWDG_Prescaler_8 ((uint32_t)0x00000180) +#define IS_WWDG_PRESCALER(PRESCALER) (((PRESCALER) == WWDG_Prescaler_1) || \ + ((PRESCALER) == WWDG_Prescaler_2) || \ + ((PRESCALER) == WWDG_Prescaler_4) || \ + ((PRESCALER) == WWDG_Prescaler_8)) +#define IS_WWDG_WINDOW_VALUE(VALUE) ((VALUE) <= 0x7F) +#define IS_WWDG_COUNTER(COUNTER) (((COUNTER) >= 0x40) && ((COUNTER) <= 0x7F)) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/* Function used to set the WWDG configuration to the default reset state ****/ +void WWDG_DeInit(void); + +/* Prescaler, Refresh window and Counter configuration functions **************/ +void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); +void WWDG_SetWindowValue(uint8_t WindowValue); +void WWDG_EnableIT(void); +void WWDG_SetCounter(uint8_t Counter); + +/* WWDG activation function ***************************************************/ +void WWDG_Enable(uint8_t Counter); + +/* Interrupts and flags management functions **********************************/ +FlagStatus WWDG_GetFlagStatus(void); +void WWDG_ClearFlag(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_WWDG_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/misc.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/misc.c new file mode 100644 index 000000000..7555a3d89 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/misc.c @@ -0,0 +1,249 @@ +/** + ****************************************************************************** + * @file misc.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides all the miscellaneous firmware functions (add-on + * to CMSIS functions). + * + * @verbatim + * + * =================================================================== + * How to configure Interrupts using driver + * =================================================================== + * + * This section provide functions allowing to configure the NVIC interrupts (IRQ). + * The Cortex-M3 exceptions are managed by CMSIS functions. + * + * 1. Configure the NVIC Priority Grouping using NVIC_PriorityGroupConfig() + * function according to the following table. + + * The table below gives the allowed values of the pre-emption priority and subpriority according + * to the Priority Grouping configuration performed by NVIC_PriorityGroupConfig function + * ========================================================================================================================== + * NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description + * ========================================================================================================================== + * NVIC_PriorityGroup_0 | 0 | 0-15 | 0 bits for pre-emption priority + * | | | 4 bits for subpriority + * -------------------------------------------------------------------------------------------------------------------------- + * NVIC_PriorityGroup_1 | 0-1 | 0-7 | 1 bits for pre-emption priority + * | | | 3 bits for subpriority + * -------------------------------------------------------------------------------------------------------------------------- + * NVIC_PriorityGroup_2 | 0-3 | 0-3 | 2 bits for pre-emption priority + * | | | 2 bits for subpriority + * -------------------------------------------------------------------------------------------------------------------------- + * NVIC_PriorityGroup_3 | 0-7 | 0-1 | 3 bits for pre-emption priority + * | | | 1 bits for subpriority + * -------------------------------------------------------------------------------------------------------------------------- + * NVIC_PriorityGroup_4 | 0-15 | 0 | 4 bits for pre-emption priority + * | | | 0 bits for subpriority + * ========================================================================================================================== + * + * 2. Enable and Configure the priority of the selected IRQ Channels using NVIC_Init() + * + * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. + * The pending IRQ priority will be managed only by the subpriority. + * + * @note IRQ priority order (sorted by highest to lowest priority): + * - Lowest pre-emption priority + * - Lowest subpriority + * - Lowest hardware priority (IRQ number) + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "misc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup MISC + * @brief MISC driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup MISC_Private_Functions + * @{ + */ + +/** + * @brief Configures the priority grouping: pre-emption priority and subpriority. + * @param NVIC_PriorityGroup: specifies the priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority + * 4 bits for subpriority + * @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority + * 3 bits for subpriority + * @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority + * 2 bits for subpriority + * @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority + * 1 bits for subpriority + * @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority + * 0 bits for subpriority + * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. + * The pending IRQ priority will be managed only by the subpriority. + * @retval None + */ +void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup)); + + /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */ + SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup; +} + +/** + * @brief Initializes the NVIC peripheral according to the specified + * parameters in the NVIC_InitStruct. + * @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig() + * function should be called before. + * @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains + * the configuration information for the specified NVIC peripheral. + * @retval None + */ +void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) +{ + uint8_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F; + + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd)); + assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority)); + assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority)); + + if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE) + { + /* Compute the Corresponding IRQ Priority --------------------------------*/ + tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08; + tmppre = (0x4 - tmppriority); + tmpsub = tmpsub >> tmppriority; + + tmppriority = NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre; + tmppriority |= (uint8_t)(NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub); + + tmppriority = tmppriority << 0x04; + + NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority; + + /* Enable the Selected IRQ Channels --------------------------------------*/ + NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = + (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); + } + else + { + /* Disable the Selected IRQ Channels -------------------------------------*/ + NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = + (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); + } +} + +/** + * @brief Sets the vector table location and Offset. + * @param NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory. + * This parameter can be one of the following values: + * @arg NVIC_VectTab_RAM: Vector Table in internal SRAM. + * @arg NVIC_VectTab_FLASH: Vector Table in internal FLASH. + * @param Offset: Vector Table base offset field. This value must be a multiple of 0x200. + * @retval None + */ +void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset) +{ + /* Check the parameters */ + assert_param(IS_NVIC_VECTTAB(NVIC_VectTab)); + assert_param(IS_NVIC_OFFSET(Offset)); + + SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80); +} + +/** + * @brief Selects the condition for the system to enter low power mode. + * @param LowPowerMode: Specifies the new mode for the system to enter low power mode. + * This parameter can be one of the following values: + * @arg NVIC_LP_SEVONPEND: Low Power SEV on Pend. + * @arg NVIC_LP_SLEEPDEEP: Low Power DEEPSLEEP request. + * @arg NVIC_LP_SLEEPONEXIT: Low Power Sleep on Exit. + * @param NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_NVIC_LP(LowPowerMode)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + SCB->SCR |= LowPowerMode; + } + else + { + SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode); + } +} + +/** + * @brief Configures the SysTick clock source. + * @param SysTick_CLKSource: specifies the SysTick clock source. + * This parameter can be one of the following values: + * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source. + * @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source. + * @retval None + */ +void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource) +{ + /* Check the parameters */ + assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); + if (SysTick_CLKSource == SysTick_CLKSource_HCLK) + { + SysTick->CTRL |= SysTick_CLKSource_HCLK; + } + else + { + SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_adc.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_adc.c new file mode 100644 index 000000000..e1d05597a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_adc.c @@ -0,0 +1,1748 @@ +/** + ****************************************************************************** + * @file stm32f2xx_adc.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Analog to Digital Convertor (ADC) peripheral: + * - Initialization and Configuration (in addition to ADC multi mode + * selection) + * - Analog Watchdog configuration + * - Temperature Sensor & Vrefint (Voltage Reference internal) & VBAT + * management + * - Regular Channels Configuration + * - Regular Channels DMA Configuration + * - Injected channels Configuration + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + + * 1. Enable the ADC interface clock using + * RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADCx, ENABLE); + * + * 2. ADC pins configuration + * - Enable the clock for the ADC GPIOs using the following function: + * RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); + * - Configure these ADC pins in analog mode using GPIO_Init(); + * + * 3. Configure the ADC Prescaler, conversion resolution and data + * alignment using the ADC_Init() function. + * 4. Activate the ADC peripheral using ADC_Cmd() function. + * + * Regular channels group configuration + * ==================================== + * - To configure the ADC regular channels group features, use + * ADC_Init() and ADC_RegularChannelConfig() functions. + * - To activate the continuous mode, use the ADC_continuousModeCmd() + * function. + * - To configurate and activate the Discontinuous mode, use the + * ADC_DiscModeChannelCountConfig() and ADC_DiscModeCmd() functions. + * - To read the ADC converted values, use the ADC_GetConversionValue() + * function. + * + * Multi mode ADCs Regular channels configuration + * =============================================== + * - Refer to "Regular channels group configuration" description to + * configure the ADC1, ADC2 and ADC3 regular channels. + * - Select the Multi mode ADC regular channels features (dual or + * triple mode) using ADC_CommonInit() function and configure + * the DMA mode using ADC_MultiModeDMARequestAfterLastTransferCmd() + * functions. + * - Read the ADCs converted values using the + * ADC_GetMultiModeConversionValue() function. + * + * DMA for Regular channels group features configuration + * ====================================================== + * - To enable the DMA mode for regular channels group, use the + * ADC_DMACmd() function. + * - To enable the generation of DMA requests continuously at the end + * of the last DMA transfer, use the ADC_DMARequestAfterLastTransferCmd() + * function. + * + * Injected channels group configuration + * ===================================== + * - To configure the ADC Injected channels group features, use + * ADC_InjectedChannelConfig() and ADC_InjectedSequencerLengthConfig() + * functions. + * - To activate the continuous mode, use the ADC_continuousModeCmd() + * function. + * - To activate the Injected Discontinuous mode, use the + * ADC_InjectedDiscModeCmd() function. + * - To activate the AutoInjected mode, use the ADC_AutoInjectedConvCmd() + * function. + * - To read the ADC converted values, use the ADC_GetInjectedConversionValue() + * function. + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup ADC + * @brief ADC driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* ADC DISCNUM mask */ +#define CR1_DISCNUM_RESET ((uint32_t)0xFFFF1FFF) + +/* ADC AWDCH mask */ +#define CR1_AWDCH_RESET ((uint32_t)0xFFFFFFE0) + +/* ADC Analog watchdog enable mode mask */ +#define CR1_AWDMode_RESET ((uint32_t)0xFF3FFDFF) + +/* CR1 register Mask */ +#define CR1_CLEAR_MASK ((uint32_t)0xFCFFFEFF) + +/* ADC EXTEN mask */ +#define CR2_EXTEN_RESET ((uint32_t)0xCFFFFFFF) + +/* ADC JEXTEN mask */ +#define CR2_JEXTEN_RESET ((uint32_t)0xFFCFFFFF) + +/* ADC JEXTSEL mask */ +#define CR2_JEXTSEL_RESET ((uint32_t)0xFFF0FFFF) + +/* CR2 register Mask */ +#define CR2_CLEAR_MASK ((uint32_t)0xC0FFF7FD) + +/* ADC SQx mask */ +#define SQR3_SQ_SET ((uint32_t)0x0000001F) +#define SQR2_SQ_SET ((uint32_t)0x0000001F) +#define SQR1_SQ_SET ((uint32_t)0x0000001F) + +/* ADC L Mask */ +#define SQR1_L_RESET ((uint32_t)0xFF0FFFFF) + +/* ADC JSQx mask */ +#define JSQR_JSQ_SET ((uint32_t)0x0000001F) + +/* ADC JL mask */ +#define JSQR_JL_SET ((uint32_t)0x00300000) +#define JSQR_JL_RESET ((uint32_t)0xFFCFFFFF) + +/* ADC SMPx mask */ +#define SMPR1_SMP_SET ((uint32_t)0x00000007) +#define SMPR2_SMP_SET ((uint32_t)0x00000007) + +/* ADC JDRx registers offset */ +#define JDR_OFFSET ((uint8_t)0x28) + +/* ADC CDR register base address */ +#define CDR_ADDRESS ((uint32_t)0x40012308) + +/* ADC CCR register Mask */ +#define CR_CLEAR_MASK ((uint32_t)0xFFFC30E0) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup ADC_Private_Functions + * @{ + */ + +/** @defgroup ADC_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + This section provides functions allowing to: + - Initialize and configure the ADC Prescaler + - ADC Conversion Resolution (12bit..6bit) + - Scan Conversion Mode (multichannels or one channel) for regular group + - ADC Continuous Conversion Mode (Continuous or Single conversion) for + regular group + - External trigger Edge and source of regular group, + - Converted data alignment (left or right) + - The number of ADC conversions that will be done using the sequencer for + regular channel group + - Multi ADC mode selection + - Direct memory access mode selection for multi ADC mode + - Delay between 2 sampling phases (used in dual or triple interleaved modes) + - Enable or disable the ADC peripheral + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes all ADCs peripherals registers to their default reset + * values. + * @param None + * @retval None + */ +void ADC_DeInit(void) +{ + /* Enable all ADCs reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC, ENABLE); + + /* Release all ADCs from reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC, DISABLE); +} + +/** + * @brief Initializes the ADCx peripheral according to the specified parameters + * in the ADC_InitStruct. + * @note This function is used to configure the global features of the ADC ( + * Resolution and Data Alignment), however, the rest of the configuration + * parameters are specific to the regular channels group (scan mode + * activation, continuous mode activation, External trigger source and + * edge, number of conversion in the regular channels group sequencer). + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_InitStruct: pointer to an ADC_InitTypeDef structure that contains + * the configuration information for the specified ADC peripheral. + * @retval None + */ +void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct) +{ + uint32_t tmpreg1 = 0; + uint8_t tmpreg2 = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_RESOLUTION(ADC_InitStruct->ADC_Resolution)); + assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ScanConvMode)); + assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ContinuousConvMode)); + assert_param(IS_ADC_EXT_TRIG_EDGE(ADC_InitStruct->ADC_ExternalTrigConvEdge)); + assert_param(IS_ADC_EXT_TRIG(ADC_InitStruct->ADC_ExternalTrigConv)); + assert_param(IS_ADC_DATA_ALIGN(ADC_InitStruct->ADC_DataAlign)); + assert_param(IS_ADC_REGULAR_LENGTH(ADC_InitStruct->ADC_NbrOfConversion)); + + /*---------------------------- ADCx CR1 Configuration -----------------*/ + /* Get the ADCx CR1 value */ + tmpreg1 = ADCx->CR1; + + /* Clear RES and SCAN bits */ + tmpreg1 &= CR1_CLEAR_MASK; + + /* Configure ADCx: scan conversion mode and resolution */ + /* Set SCAN bit according to ADC_ScanConvMode value */ + /* Set RES bit according to ADC_Resolution value */ + tmpreg1 |= (uint32_t)(((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8) | \ + ADC_InitStruct->ADC_Resolution); + /* Write to ADCx CR1 */ + ADCx->CR1 = tmpreg1; + /*---------------------------- ADCx CR2 Configuration -----------------*/ + /* Get the ADCx CR2 value */ + tmpreg1 = ADCx->CR2; + + /* Clear CONT, ALIGN, EXTEN and EXTSEL bits */ + tmpreg1 &= CR2_CLEAR_MASK; + + /* Configure ADCx: external trigger event and edge, data alignment and + continuous conversion mode */ + /* Set ALIGN bit according to ADC_DataAlign value */ + /* Set EXTEN bits according to ADC_ExternalTrigConvEdge value */ + /* Set EXTSEL bits according to ADC_ExternalTrigConv value */ + /* Set CONT bit according to ADC_ContinuousConvMode value */ + tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | \ + ADC_InitStruct->ADC_ExternalTrigConv | + ADC_InitStruct->ADC_ExternalTrigConvEdge | \ + ((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1)); + + /* Write to ADCx CR2 */ + ADCx->CR2 = tmpreg1; + /*---------------------------- ADCx SQR1 Configuration -----------------*/ + /* Get the ADCx SQR1 value */ + tmpreg1 = ADCx->SQR1; + + /* Clear L bits */ + tmpreg1 &= SQR1_L_RESET; + + /* Configure ADCx: regular channel sequence length */ + /* Set L bits according to ADC_NbrOfConversion value */ + tmpreg2 |= (uint8_t)(ADC_InitStruct->ADC_NbrOfConversion - (uint8_t)1); + tmpreg1 |= ((uint32_t)tmpreg2 << 20); + + /* Write to ADCx SQR1 */ + ADCx->SQR1 = tmpreg1; +} + +/** + * @brief Fills each ADC_InitStruct member with its default value. + * @note This function is used to initialize the global features of the ADC ( + * Resolution and Data Alignment), however, the rest of the configuration + * parameters are specific to the regular channels group (scan mode + * activation, continuous mode activation, External trigger source and + * edge, number of conversion in the regular channels group sequencer). + * @param ADC_InitStruct: pointer to an ADC_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct) +{ + /* Initialize the ADC_Mode member */ + ADC_InitStruct->ADC_Resolution = ADC_Resolution_12b; + + /* initialize the ADC_ScanConvMode member */ + ADC_InitStruct->ADC_ScanConvMode = DISABLE; + + /* Initialize the ADC_ContinuousConvMode member */ + ADC_InitStruct->ADC_ContinuousConvMode = DISABLE; + + /* Initialize the ADC_ExternalTrigConvEdge member */ + ADC_InitStruct->ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; + + /* Initialize the ADC_ExternalTrigConv member */ + ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + + /* Initialize the ADC_DataAlign member */ + ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right; + + /* Initialize the ADC_NbrOfConversion member */ + ADC_InitStruct->ADC_NbrOfConversion = 1; +} + +/** + * @brief Initializes the ADCs peripherals according to the specified parameters + * in the ADC_CommonInitStruct. + * @param ADC_CommonInitStruct: pointer to an ADC_CommonInitTypeDef structure + * that contains the configuration information for All ADCs peripherals. + * @retval None + */ +void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct) +{ + uint32_t tmpreg1 = 0; + /* Check the parameters */ + assert_param(IS_ADC_MODE(ADC_CommonInitStruct->ADC_Mode)); + assert_param(IS_ADC_PRESCALER(ADC_CommonInitStruct->ADC_Prescaler)); + assert_param(IS_ADC_DMA_ACCESS_MODE(ADC_CommonInitStruct->ADC_DMAAccessMode)); + assert_param(IS_ADC_SAMPLING_DELAY(ADC_CommonInitStruct->ADC_TwoSamplingDelay)); + /*---------------------------- ADC CCR Configuration -----------------*/ + /* Get the ADC CCR value */ + tmpreg1 = ADC->CCR; + + /* Clear MULTI, DELAY, DMA and ADCPRE bits */ + tmpreg1 &= CR_CLEAR_MASK; + + /* Configure ADCx: Multi mode, Delay between two sampling time, ADC prescaler, + and DMA access mode for multimode */ + /* Set MULTI bits according to ADC_Mode value */ + /* Set ADCPRE bits according to ADC_Prescaler value */ + /* Set DMA bits according to ADC_DMAAccessMode value */ + /* Set DELAY bits according to ADC_TwoSamplingDelay value */ + tmpreg1 |= (uint32_t)(ADC_CommonInitStruct->ADC_Mode | + ADC_CommonInitStruct->ADC_Prescaler | + ADC_CommonInitStruct->ADC_DMAAccessMode | + ADC_CommonInitStruct->ADC_TwoSamplingDelay); + + /* Write to ADC CCR */ + ADC->CCR = tmpreg1; +} + +/** + * @brief Fills each ADC_CommonInitStruct member with its default value. + * @param ADC_CommonInitStruct: pointer to an ADC_CommonInitTypeDef structure + * which will be initialized. + * @retval None + */ +void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct) +{ + /* Initialize the ADC_Mode member */ + ADC_CommonInitStruct->ADC_Mode = ADC_Mode_Independent; + + /* initialize the ADC_Prescaler member */ + ADC_CommonInitStruct->ADC_Prescaler = ADC_Prescaler_Div2; + + /* Initialize the ADC_DMAAccessMode member */ + ADC_CommonInitStruct->ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; + + /* Initialize the ADC_TwoSamplingDelay member */ + ADC_CommonInitStruct->ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; +} + +/** + * @brief Enables or disables the specified ADC peripheral. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the ADCx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Set the ADON bit to wake up the ADC from power down mode */ + ADCx->CR2 |= (uint32_t)ADC_CR2_ADON; + } + else + { + /* Disable the selected ADC peripheral */ + ADCx->CR2 &= (uint32_t)(~ADC_CR2_ADON); + } +} +/** + * @} + */ + +/** @defgroup ADC_Group2 Analog Watchdog configuration functions + * @brief Analog Watchdog configuration functions + * +@verbatim + =============================================================================== + Analog Watchdog configuration functions + =============================================================================== + + This section provides functions allowing to configure the Analog Watchdog + (AWD) feature in the ADC. + + A typical configuration Analog Watchdog is done following these steps : + 1. the ADC guarded channel(s) is (are) selected using the + ADC_AnalogWatchdogSingleChannelConfig() function. + 2. The Analog watchdog lower and higher threshold are configured using the + ADC_AnalogWatchdogThresholdsConfig() function. + 3. The Analog watchdog is enabled and configured to enable the check, on one + or more channels, using the ADC_AnalogWatchdogCmd() function. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the analog watchdog on single/all regular or + * injected channels + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_AnalogWatchdog: the ADC analog watchdog configuration. + * This parameter can be one of the following values: + * @arg ADC_AnalogWatchdog_SingleRegEnable: Analog watchdog on a single regular channel + * @arg ADC_AnalogWatchdog_SingleInjecEnable: Analog watchdog on a single injected channel + * @arg ADC_AnalogWatchdog_SingleRegOrInjecEnable: Analog watchdog on a single regular or injected channel + * @arg ADC_AnalogWatchdog_AllRegEnable: Analog watchdog on all regular channel + * @arg ADC_AnalogWatchdog_AllInjecEnable: Analog watchdog on all injected channel + * @arg ADC_AnalogWatchdog_AllRegAllInjecEnable: Analog watchdog on all regular and injected channels + * @arg ADC_AnalogWatchdog_None: No channel guarded by the analog watchdog + * @retval None + */ +void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_ANALOG_WATCHDOG(ADC_AnalogWatchdog)); + + /* Get the old register value */ + tmpreg = ADCx->CR1; + + /* Clear AWDEN, JAWDEN and AWDSGL bits */ + tmpreg &= CR1_AWDMode_RESET; + + /* Set the analog watchdog enable mode */ + tmpreg |= ADC_AnalogWatchdog; + + /* Store the new register value */ + ADCx->CR1 = tmpreg; +} + +/** + * @brief Configures the high and low thresholds of the analog watchdog. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param HighThreshold: the ADC analog watchdog High threshold value. + * This parameter must be a 12-bit value. + * @param LowThreshold: the ADC analog watchdog Low threshold value. + * This parameter must be a 12-bit value. + * @retval None + */ +void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, + uint16_t LowThreshold) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_THRESHOLD(HighThreshold)); + assert_param(IS_ADC_THRESHOLD(LowThreshold)); + + /* Set the ADCx high threshold */ + ADCx->HTR = HighThreshold; + + /* Set the ADCx low threshold */ + ADCx->LTR = LowThreshold; +} + +/** + * @brief Configures the analog watchdog guarded single channel + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_Channel: the ADC channel to configure for the analog watchdog. + * This parameter can be one of the following values: + * @arg ADC_Channel_0: ADC Channel0 selected + * @arg ADC_Channel_1: ADC Channel1 selected + * @arg ADC_Channel_2: ADC Channel2 selected + * @arg ADC_Channel_3: ADC Channel3 selected + * @arg ADC_Channel_4: ADC Channel4 selected + * @arg ADC_Channel_5: ADC Channel5 selected + * @arg ADC_Channel_6: ADC Channel6 selected + * @arg ADC_Channel_7: ADC Channel7 selected + * @arg ADC_Channel_8: ADC Channel8 selected + * @arg ADC_Channel_9: ADC Channel9 selected + * @arg ADC_Channel_10: ADC Channel10 selected + * @arg ADC_Channel_11: ADC Channel11 selected + * @arg ADC_Channel_12: ADC Channel12 selected + * @arg ADC_Channel_13: ADC Channel13 selected + * @arg ADC_Channel_14: ADC Channel14 selected + * @arg ADC_Channel_15: ADC Channel15 selected + * @arg ADC_Channel_16: ADC Channel16 selected + * @arg ADC_Channel_17: ADC Channel17 selected + * @arg ADC_Channel_18: ADC Channel18 selected + * @retval None + */ +void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CHANNEL(ADC_Channel)); + + /* Get the old register value */ + tmpreg = ADCx->CR1; + + /* Clear the Analog watchdog channel select bits */ + tmpreg &= CR1_AWDCH_RESET; + + /* Set the Analog watchdog channel */ + tmpreg |= ADC_Channel; + + /* Store the new register value */ + ADCx->CR1 = tmpreg; +} +/** + * @} + */ + +/** @defgroup ADC_Group3 Temperature Sensor, Vrefint (Voltage Reference internal) + * and VBAT (Voltage BATtery) management functions + * @brief Temperature Sensor, Vrefint and VBAT management functions + * +@verbatim + =============================================================================== + Temperature Sensor, Vrefint and VBAT management functions + =============================================================================== + + This section provides functions allowing to enable/ disable the internal + connections between the ADC and the Temperature Sensor, the Vrefint and the + Vbat sources. + + A typical configuration to get the Temperature sensor and Vrefint channels + voltages is done following these steps : + 1. Enable the internal connection of Temperature sensor and Vrefint sources + with the ADC channels using ADC_TempSensorVrefintCmd() function. + 2. Select the ADC_Channel_TempSensor and/or ADC_Channel_Vrefint using + ADC_RegularChannelConfig() or ADC_InjectedChannelConfig() functions + 3. Get the voltage values, using ADC_GetConversionValue() or + ADC_GetInjectedConversionValue(). + + A typical configuration to get the VBAT channel voltage is done following + these steps : + 1. Enable the internal connection of VBAT source with the ADC channel using + ADC_VBATCmd() function. + 2. Select the ADC_Channel_Vbat using ADC_RegularChannelConfig() or + ADC_InjectedChannelConfig() functions + 3. Get the voltage value, using ADC_GetConversionValue() or + ADC_GetInjectedConversionValue(). + +@endverbatim + * @{ + */ + + +/** + * @brief Enables or disables the temperature sensor and Vrefint channels. + * @param NewState: new state of the temperature sensor and Vrefint channels. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_TempSensorVrefintCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the temperature sensor and Vrefint channel*/ + ADC->CCR |= (uint32_t)ADC_CCR_TSVREFE; + } + else + { + /* Disable the temperature sensor and Vrefint channel*/ + ADC->CCR &= (uint32_t)(~ADC_CCR_TSVREFE); + } +} + +/** + * @brief Enables or disables the VBAT (Voltage Battery) channel. + * @param NewState: new state of the VBAT channel. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_VBATCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the VBAT channel*/ + ADC->CCR |= (uint32_t)ADC_CCR_VBATE; + } + else + { + /* Disable the VBAT channel*/ + ADC->CCR &= (uint32_t)(~ADC_CCR_VBATE); + } +} + +/** + * @} + */ + +/** @defgroup ADC_Group4 Regular Channels Configuration functions + * @brief Regular Channels Configuration functions + * +@verbatim + =============================================================================== + Regular Channels Configuration functions + =============================================================================== + + This section provides functions allowing to manage the ADC's regular channels, + it is composed of 2 sub sections : + + 1. Configuration and management functions for regular channels: This subsection + provides functions allowing to configure the ADC regular channels : + - Configure the rank in the regular group sequencer for each channel + - Configure the sampling time for each channel + - select the conversion Trigger for regular channels + - select the desired EOC event behavior configuration + - Activate the continuous Mode (*) + - Activate the Discontinuous Mode + Please Note that the following features for regular channels are configurated + using the ADC_Init() function : + - scan mode activation + - continuous mode activation (**) + - External trigger source + - External trigger edge + - number of conversion in the regular channels group sequencer. + + @note (*) and (**) are performing the same configuration + + 2. Get the conversion data: This subsection provides an important function in + the ADC peripheral since it returns the converted data of the current + regular channel. When the Conversion value is read, the EOC Flag is + automatically cleared. + + @note For multi ADC mode, the last ADC1, ADC2 and ADC3 regular conversions + results data (in the selected multi mode) can be returned in the same + time using ADC_GetMultiModeConversionValue() function. + + +@endverbatim + * @{ + */ +/** + * @brief Configures for the selected ADC regular channel its corresponding + * rank in the sequencer and its sample time. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_Channel: the ADC channel to configure. + * This parameter can be one of the following values: + * @arg ADC_Channel_0: ADC Channel0 selected + * @arg ADC_Channel_1: ADC Channel1 selected + * @arg ADC_Channel_2: ADC Channel2 selected + * @arg ADC_Channel_3: ADC Channel3 selected + * @arg ADC_Channel_4: ADC Channel4 selected + * @arg ADC_Channel_5: ADC Channel5 selected + * @arg ADC_Channel_6: ADC Channel6 selected + * @arg ADC_Channel_7: ADC Channel7 selected + * @arg ADC_Channel_8: ADC Channel8 selected + * @arg ADC_Channel_9: ADC Channel9 selected + * @arg ADC_Channel_10: ADC Channel10 selected + * @arg ADC_Channel_11: ADC Channel11 selected + * @arg ADC_Channel_12: ADC Channel12 selected + * @arg ADC_Channel_13: ADC Channel13 selected + * @arg ADC_Channel_14: ADC Channel14 selected + * @arg ADC_Channel_15: ADC Channel15 selected + * @arg ADC_Channel_16: ADC Channel16 selected + * @arg ADC_Channel_17: ADC Channel17 selected + * @arg ADC_Channel_18: ADC Channel18 selected + * @param Rank: The rank in the regular group sequencer. + * This parameter must be between 1 to 16. + * @param ADC_SampleTime: The sample time value to be set for the selected channel. + * This parameter can be one of the following values: + * @arg ADC_SampleTime_3Cycles: Sample time equal to 3 cycles + * @arg ADC_SampleTime_15Cycles: Sample time equal to 15 cycles + * @arg ADC_SampleTime_28Cycles: Sample time equal to 28 cycles + * @arg ADC_SampleTime_56Cycles: Sample time equal to 56 cycles + * @arg ADC_SampleTime_84Cycles: Sample time equal to 84 cycles + * @arg ADC_SampleTime_112Cycles: Sample time equal to 112 cycles + * @arg ADC_SampleTime_144Cycles: Sample time equal to 144 cycles + * @arg ADC_SampleTime_480Cycles: Sample time equal to 480 cycles + * @retval None + */ +void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) +{ + uint32_t tmpreg1 = 0, tmpreg2 = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CHANNEL(ADC_Channel)); + assert_param(IS_ADC_REGULAR_RANK(Rank)); + assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime)); + + /* if ADC_Channel_10 ... ADC_Channel_18 is selected */ + if (ADC_Channel > ADC_Channel_9) + { + /* Get the old register value */ + tmpreg1 = ADCx->SMPR1; + + /* Calculate the mask to clear */ + tmpreg2 = SMPR1_SMP_SET << (3 * (ADC_Channel - 10)); + + /* Clear the old sample time */ + tmpreg1 &= ~tmpreg2; + + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10)); + + /* Set the new sample time */ + tmpreg1 |= tmpreg2; + + /* Store the new register value */ + ADCx->SMPR1 = tmpreg1; + } + else /* ADC_Channel include in ADC_Channel_[0..9] */ + { + /* Get the old register value */ + tmpreg1 = ADCx->SMPR2; + + /* Calculate the mask to clear */ + tmpreg2 = SMPR2_SMP_SET << (3 * ADC_Channel); + + /* Clear the old sample time */ + tmpreg1 &= ~tmpreg2; + + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); + + /* Set the new sample time */ + tmpreg1 |= tmpreg2; + + /* Store the new register value */ + ADCx->SMPR2 = tmpreg1; + } + /* For Rank 1 to 6 */ + if (Rank < 7) + { + /* Get the old register value */ + tmpreg1 = ADCx->SQR3; + + /* Calculate the mask to clear */ + tmpreg2 = SQR3_SQ_SET << (5 * (Rank - 1)); + + /* Clear the old SQx bits for the selected rank */ + tmpreg1 &= ~tmpreg2; + + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1)); + + /* Set the SQx bits for the selected rank */ + tmpreg1 |= tmpreg2; + + /* Store the new register value */ + ADCx->SQR3 = tmpreg1; + } + /* For Rank 7 to 12 */ + else if (Rank < 13) + { + /* Get the old register value */ + tmpreg1 = ADCx->SQR2; + + /* Calculate the mask to clear */ + tmpreg2 = SQR2_SQ_SET << (5 * (Rank - 7)); + + /* Clear the old SQx bits for the selected rank */ + tmpreg1 &= ~tmpreg2; + + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 7)); + + /* Set the SQx bits for the selected rank */ + tmpreg1 |= tmpreg2; + + /* Store the new register value */ + ADCx->SQR2 = tmpreg1; + } + /* For Rank 13 to 16 */ + else + { + /* Get the old register value */ + tmpreg1 = ADCx->SQR1; + + /* Calculate the mask to clear */ + tmpreg2 = SQR1_SQ_SET << (5 * (Rank - 13)); + + /* Clear the old SQx bits for the selected rank */ + tmpreg1 &= ~tmpreg2; + + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 13)); + + /* Set the SQx bits for the selected rank */ + tmpreg1 |= tmpreg2; + + /* Store the new register value */ + ADCx->SQR1 = tmpreg1; + } +} + +/** + * @brief Enables the selected ADC software start conversion of the regular channels. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval None + */ +void ADC_SoftwareStartConv(ADC_TypeDef* ADCx) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + + /* Enable the selected ADC conversion for regular group */ + ADCx->CR2 |= (uint32_t)ADC_CR2_SWSTART; +} + +/** + * @brief Gets the selected ADC Software start regular conversion Status. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval The new state of ADC software start conversion (SET or RESET). + */ +FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + + /* Check the status of SWSTART bit */ + if ((ADCx->CR2 & ADC_CR2_JSWSTART) != (uint32_t)RESET) + { + /* SWSTART bit is set */ + bitstatus = SET; + } + else + { + /* SWSTART bit is reset */ + bitstatus = RESET; + } + + /* Return the SWSTART bit status */ + return bitstatus; +} + + +/** + * @brief Enables or disables the EOC on each regular channel conversion + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC EOC flag rising + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected ADC EOC rising on each regular channel conversion */ + ADCx->CR2 |= (uint32_t)ADC_CR2_EOCS; + } + else + { + /* Disable the selected ADC EOC rising on each regular channel conversion */ + ADCx->CR2 &= (uint32_t)(~ADC_CR2_EOCS); + } +} + +/** + * @brief Enables or disables the ADC continuous conversion mode + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC continuous conversion mode + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected ADC continuous conversion mode */ + ADCx->CR2 |= (uint32_t)ADC_CR2_CONT; + } + else + { + /* Disable the selected ADC continuous conversion mode */ + ADCx->CR2 &= (uint32_t)(~ADC_CR2_CONT); + } +} + +/** + * @brief Configures the discontinuous mode for the selected ADC regular group + * channel. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param Number: specifies the discontinuous mode regular channel count value. + * This number must be between 1 and 8. + * @retval None + */ +void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number) +{ + uint32_t tmpreg1 = 0; + uint32_t tmpreg2 = 0; + + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_REGULAR_DISC_NUMBER(Number)); + + /* Get the old register value */ + tmpreg1 = ADCx->CR1; + + /* Clear the old discontinuous mode channel count */ + tmpreg1 &= CR1_DISCNUM_RESET; + + /* Set the discontinuous mode channel count */ + tmpreg2 = Number - 1; + tmpreg1 |= tmpreg2 << 13; + + /* Store the new register value */ + ADCx->CR1 = tmpreg1; +} + +/** + * @brief Enables or disables the discontinuous mode on regular group channel + * for the specified ADC + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC discontinuous mode on + * regular group channel. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected ADC regular discontinuous mode */ + ADCx->CR1 |= (uint32_t)ADC_CR1_DISCEN; + } + else + { + /* Disable the selected ADC regular discontinuous mode */ + ADCx->CR1 &= (uint32_t)(~ADC_CR1_DISCEN); + } +} + +/** + * @brief Returns the last ADCx conversion result data for regular channel. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval The Data conversion value. + */ +uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + + /* Return the selected ADC conversion value */ + return (uint16_t) ADCx->DR; +} + +/** + * @brief Returns the last ADC1, ADC2 and ADC3 regular conversions results + * data in the selected multi mode. + * @param None + * @retval The Data conversion value. + * @note In dual mode, the value returned by this function is as following + * Data[15:0] : these bits contain the regular data of ADC1. + * Data[31:16]: these bits contain the regular data of ADC2. + * @note In triple mode, the value returned by this function is as following + * Data[15:0] : these bits contain alternatively the regular data of ADC1, ADC3 and ADC2. + * Data[31:16]: these bits contain alternatively the regular data of ADC2, ADC1 and ADC3. + */ +uint32_t ADC_GetMultiModeConversionValue(void) +{ + /* Return the multi mode conversion value */ + return (*(__IO uint32_t *) CDR_ADDRESS); +} +/** + * @} + */ + +/** @defgroup ADC_Group5 Regular Channels DMA Configuration functions + * @brief Regular Channels DMA Configuration functions + * +@verbatim + =============================================================================== + Regular Channels DMA Configuration functions + =============================================================================== + + This section provides functions allowing to configure the DMA for ADC regular + channels. + Since converted regular channel values are stored into a unique data register, + it is useful to use DMA for conversion of more than one regular channel. This + avoids the loss of the data already stored in the ADC Data register. + + When the DMA mode is enabled (using the ADC_DMACmd() function), after each + conversion of a regular channel, a DMA request is generated. + + Depending on the "DMA disable selection for Independent ADC mode" + configuration (using the ADC_DMARequestAfterLastTransferCmd() function), + at the end of the last DMA transfer, two possibilities are allowed: + - No new DMA request is issued to the DMA controller (feature DISABLED) + - Requests can continue to be generated (feature ENABLED). + + Depending on the "DMA disable selection for multi ADC mode" configuration + (using the void ADC_MultiModeDMARequestAfterLastTransferCmd() function), + at the end of the last DMA transfer, two possibilities are allowed: + - No new DMA request is issued to the DMA controller (feature DISABLED) + - Requests can continue to be generated (feature ENABLED). + +@endverbatim + * @{ + */ + + /** + * @brief Enables or disables the specified ADC DMA request. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC DMA transfer. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC DMA request */ + ADCx->CR2 |= (uint32_t)ADC_CR2_DMA; + } + else + { + /* Disable the selected ADC DMA request */ + ADCx->CR2 &= (uint32_t)(~ADC_CR2_DMA); + } +} + +/** + * @brief Enables or disables the ADC DMA request after last transfer (Single-ADC mode) + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC DMA request after last transfer. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC DMA request after last transfer */ + ADCx->CR2 |= (uint32_t)ADC_CR2_DDS; + } + else + { + /* Disable the selected ADC DMA request after last transfer */ + ADCx->CR2 &= (uint32_t)(~ADC_CR2_DDS); + } +} + +/** + * @brief Enables or disables the ADC DMA request after last transfer in multi ADC mode + * @param NewState: new state of the selected ADC DMA request after last transfer. + * This parameter can be: ENABLE or DISABLE. + * @note if Enabled, DMA requests are issued as long as data are converted and + * DMA mode for multi ADC mode (selected using ADC_CommonInit() function + * by ADC_CommonInitStruct.ADC_DMAAccessMode structure member) is + * ADC_DMAAccessMode_1, ADC_DMAAccessMode_2 or ADC_DMAAccessMode_3. + * @retval None + */ +void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC DMA request after last transfer */ + ADC->CCR |= (uint32_t)ADC_CCR_DDS; + } + else + { + /* Disable the selected ADC DMA request after last transfer */ + ADC->CCR &= (uint32_t)(~ADC_CCR_DDS); + } +} +/** + * @} + */ + +/** @defgroup ADC_Group6 Injected channels Configuration functions + * @brief Injected channels Configuration functions + * +@verbatim + =============================================================================== + Injected channels Configuration functions + =============================================================================== + + This section provide functions allowing to configure the ADC Injected channels, + it is composed of 2 sub sections : + + 1. Configuration functions for Injected channels: This subsection provides + functions allowing to configure the ADC injected channels : + - Configure the rank in the injected group sequencer for each channel + - Configure the sampling time for each channel + - Activate the Auto injected Mode + - Activate the Discontinuous Mode + - scan mode activation + - External/software trigger source + - External trigger edge + - injected channels sequencer. + + 2. Get the Specified Injected channel conversion data: This subsection + provides an important function in the ADC peripheral since it returns the + converted data of the specific injected channel. + +@endverbatim + * @{ + */ +/** + * @brief Configures for the selected ADC injected channel its corresponding + * rank in the sequencer and its sample time. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_Channel: the ADC channel to configure. + * This parameter can be one of the following values: + * @arg ADC_Channel_0: ADC Channel0 selected + * @arg ADC_Channel_1: ADC Channel1 selected + * @arg ADC_Channel_2: ADC Channel2 selected + * @arg ADC_Channel_3: ADC Channel3 selected + * @arg ADC_Channel_4: ADC Channel4 selected + * @arg ADC_Channel_5: ADC Channel5 selected + * @arg ADC_Channel_6: ADC Channel6 selected + * @arg ADC_Channel_7: ADC Channel7 selected + * @arg ADC_Channel_8: ADC Channel8 selected + * @arg ADC_Channel_9: ADC Channel9 selected + * @arg ADC_Channel_10: ADC Channel10 selected + * @arg ADC_Channel_11: ADC Channel11 selected + * @arg ADC_Channel_12: ADC Channel12 selected + * @arg ADC_Channel_13: ADC Channel13 selected + * @arg ADC_Channel_14: ADC Channel14 selected + * @arg ADC_Channel_15: ADC Channel15 selected + * @arg ADC_Channel_16: ADC Channel16 selected + * @arg ADC_Channel_17: ADC Channel17 selected + * @arg ADC_Channel_18: ADC Channel18 selected + * @param Rank: The rank in the injected group sequencer. + * This parameter must be between 1 to 4. + * @param ADC_SampleTime: The sample time value to be set for the selected channel. + * This parameter can be one of the following values: + * @arg ADC_SampleTime_3Cycles: Sample time equal to 3 cycles + * @arg ADC_SampleTime_15Cycles: Sample time equal to 15 cycles + * @arg ADC_SampleTime_28Cycles: Sample time equal to 28 cycles + * @arg ADC_SampleTime_56Cycles: Sample time equal to 56 cycles + * @arg ADC_SampleTime_84Cycles: Sample time equal to 84 cycles + * @arg ADC_SampleTime_112Cycles: Sample time equal to 112 cycles + * @arg ADC_SampleTime_144Cycles: Sample time equal to 144 cycles + * @arg ADC_SampleTime_480Cycles: Sample time equal to 480 cycles + * @retval None + */ +void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) +{ + uint32_t tmpreg1 = 0, tmpreg2 = 0, tmpreg3 = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CHANNEL(ADC_Channel)); + assert_param(IS_ADC_INJECTED_RANK(Rank)); + assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime)); + /* if ADC_Channel_10 ... ADC_Channel_18 is selected */ + if (ADC_Channel > ADC_Channel_9) + { + /* Get the old register value */ + tmpreg1 = ADCx->SMPR1; + /* Calculate the mask to clear */ + tmpreg2 = SMPR1_SMP_SET << (3*(ADC_Channel - 10)); + /* Clear the old sample time */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_SampleTime << (3*(ADC_Channel - 10)); + /* Set the new sample time */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->SMPR1 = tmpreg1; + } + else /* ADC_Channel include in ADC_Channel_[0..9] */ + { + /* Get the old register value */ + tmpreg1 = ADCx->SMPR2; + /* Calculate the mask to clear */ + tmpreg2 = SMPR2_SMP_SET << (3 * ADC_Channel); + /* Clear the old sample time */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); + /* Set the new sample time */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->SMPR2 = tmpreg1; + } + /* Rank configuration */ + /* Get the old register value */ + tmpreg1 = ADCx->JSQR; + /* Get JL value: Number = JL+1 */ + tmpreg3 = (tmpreg1 & JSQR_JL_SET)>> 20; + /* Calculate the mask to clear: ((Rank-1)+(4-JL-1)) */ + tmpreg2 = JSQR_JSQ_SET << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1))); + /* Clear the old JSQx bits for the selected rank */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set: ((Rank-1)+(4-JL-1)) */ + tmpreg2 = (uint32_t)ADC_Channel << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1))); + /* Set the JSQx bits for the selected rank */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->JSQR = tmpreg1; +} + +/** + * @brief Configures the sequencer length for injected channels + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param Length: The sequencer length. + * This parameter must be a number between 1 to 4. + * @retval None + */ +void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length) +{ + uint32_t tmpreg1 = 0; + uint32_t tmpreg2 = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_INJECTED_LENGTH(Length)); + + /* Get the old register value */ + tmpreg1 = ADCx->JSQR; + + /* Clear the old injected sequence length JL bits */ + tmpreg1 &= JSQR_JL_RESET; + + /* Set the injected sequence length JL bits */ + tmpreg2 = Length - 1; + tmpreg1 |= tmpreg2 << 20; + + /* Store the new register value */ + ADCx->JSQR = tmpreg1; +} + +/** + * @brief Set the injected channels conversion value offset + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_InjectedChannel: the ADC injected channel to set its offset. + * This parameter can be one of the following values: + * @arg ADC_InjectedChannel_1: Injected Channel1 selected + * @arg ADC_InjectedChannel_2: Injected Channel2 selected + * @arg ADC_InjectedChannel_3: Injected Channel3 selected + * @arg ADC_InjectedChannel_4: Injected Channel4 selected + * @param Offset: the offset value for the selected ADC injected channel + * This parameter must be a 12bit value. + * @retval None + */ +void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset) +{ + __IO uint32_t tmp = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel)); + assert_param(IS_ADC_OFFSET(Offset)); + + tmp = (uint32_t)ADCx; + tmp += ADC_InjectedChannel; + + /* Set the selected injected channel data offset */ + *(__IO uint32_t *) tmp = (uint32_t)Offset; +} + + /** + * @brief Configures the ADCx external trigger for injected channels conversion. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_ExternalTrigInjecConv: specifies the ADC trigger to start injected conversion. + * This parameter can be one of the following values: + * @arg ADC_ExternalTrigInjecConv_T1_CC4: Timer1 capture compare4 selected + * @arg ADC_ExternalTrigInjecConv_T1_TRGO: Timer1 TRGO event selected + * @arg ADC_ExternalTrigInjecConv_T2_CC1: Timer2 capture compare1 selected + * @arg ADC_ExternalTrigInjecConv_T2_TRGO: Timer2 TRGO event selected + * @arg ADC_ExternalTrigInjecConv_T3_CC2: Timer3 capture compare2 selected + * @arg ADC_ExternalTrigInjecConv_T3_CC4: Timer3 capture compare4 selected + * @arg ADC_ExternalTrigInjecConv_T4_CC1: Timer4 capture compare1 selected + * @arg ADC_ExternalTrigInjecConv_T4_CC2: Timer4 capture compare2 selected + * @arg ADC_ExternalTrigInjecConv_T4_CC3: Timer4 capture compare3 selected + * @arg ADC_ExternalTrigInjecConv_T4_TRGO: Timer4 TRGO event selected + * @arg ADC_ExternalTrigInjecConv_T5_CC4: Timer5 capture compare4 selected + * @arg ADC_ExternalTrigInjecConv_T5_TRGO: Timer5 TRGO event selected + * @arg ADC_ExternalTrigInjecConv_T8_CC2: Timer8 capture compare2 selected + * @arg ADC_ExternalTrigInjecConv_T8_CC3: Timer8 capture compare3 selected + * @arg ADC_ExternalTrigInjecConv_T8_CC4: Timer8 capture compare4 selected + * @arg ADC_ExternalTrigInjecConv_Ext_IT15: External interrupt line 15 event selected + * @retval None + */ +void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_EXT_INJEC_TRIG(ADC_ExternalTrigInjecConv)); + + /* Get the old register value */ + tmpreg = ADCx->CR2; + + /* Clear the old external event selection for injected group */ + tmpreg &= CR2_JEXTSEL_RESET; + + /* Set the external event selection for injected group */ + tmpreg |= ADC_ExternalTrigInjecConv; + + /* Store the new register value */ + ADCx->CR2 = tmpreg; +} + +/** + * @brief Configures the ADCx external trigger edge for injected channels conversion. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_ExternalTrigInjecConvEdge: specifies the ADC external trigger edge + * to start injected conversion. + * This parameter can be one of the following values: + * @arg ADC_ExternalTrigInjecConvEdge_None: external trigger disabled for + * injected conversion + * @arg ADC_ExternalTrigInjecConvEdge_Rising: detection on rising edge + * @arg ADC_ExternalTrigInjecConvEdge_Falling: detection on falling edge + * @arg ADC_ExternalTrigInjecConvEdge_RisingFalling: detection on both rising + * and falling edge + * @retval None + */ +void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_EXT_INJEC_TRIG_EDGE(ADC_ExternalTrigInjecConvEdge)); + /* Get the old register value */ + tmpreg = ADCx->CR2; + /* Clear the old external trigger edge for injected group */ + tmpreg &= CR2_JEXTEN_RESET; + /* Set the new external trigger edge for injected group */ + tmpreg |= ADC_ExternalTrigInjecConvEdge; + /* Store the new register value */ + ADCx->CR2 = tmpreg; +} + +/** + * @brief Enables the selected ADC software start conversion of the injected channels. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval None + */ +void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Enable the selected ADC conversion for injected group */ + ADCx->CR2 |= (uint32_t)ADC_CR2_JSWSTART; +} + +/** + * @brief Gets the selected ADC Software start injected conversion Status. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval The new state of ADC software start injected conversion (SET or RESET). + */ +FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + + /* Check the status of JSWSTART bit */ + if ((ADCx->CR2 & ADC_CR2_JSWSTART) != (uint32_t)RESET) + { + /* JSWSTART bit is set */ + bitstatus = SET; + } + else + { + /* JSWSTART bit is reset */ + bitstatus = RESET; + } + /* Return the JSWSTART bit status */ + return bitstatus; +} + +/** + * @brief Enables or disables the selected ADC automatic injected group + * conversion after regular one. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC auto injected conversion + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC automatic injected group conversion */ + ADCx->CR1 |= (uint32_t)ADC_CR1_JAUTO; + } + else + { + /* Disable the selected ADC automatic injected group conversion */ + ADCx->CR1 &= (uint32_t)(~ADC_CR1_JAUTO); + } +} + +/** + * @brief Enables or disables the discontinuous mode for injected group + * channel for the specified ADC + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC discontinuous mode on injected + * group channel. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC injected discontinuous mode */ + ADCx->CR1 |= (uint32_t)ADC_CR1_JDISCEN; + } + else + { + /* Disable the selected ADC injected discontinuous mode */ + ADCx->CR1 &= (uint32_t)(~ADC_CR1_JDISCEN); + } +} + +/** + * @brief Returns the ADC injected channel conversion result + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_InjectedChannel: the converted ADC injected channel. + * This parameter can be one of the following values: + * @arg ADC_InjectedChannel_1: Injected Channel1 selected + * @arg ADC_InjectedChannel_2: Injected Channel2 selected + * @arg ADC_InjectedChannel_3: Injected Channel3 selected + * @arg ADC_InjectedChannel_4: Injected Channel4 selected + * @retval The Data conversion value. + */ +uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel)); + + tmp = (uint32_t)ADCx; + tmp += ADC_InjectedChannel + JDR_OFFSET; + + /* Returns the selected injected channel conversion data value */ + return (uint16_t) (*(__IO uint32_t*) tmp); +} +/** + * @} + */ + +/** @defgroup ADC_Group7 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + + This section provides functions allowing to configure the ADC Interrupts and + to get the status and clear flags and Interrupts pending bits. + + Each ADC provides 4 Interrupts sources and 6 Flags which can be divided into + 3 groups: + + I. Flags and Interrupts for ADC regular channels + ================================================= + Flags : + ---------- + 1. ADC_FLAG_OVR : Overrun detection when regular converted data are lost + + 2. ADC_FLAG_EOC : Regular channel end of conversion ==> to indicate (depending + on EOCS bit, managed by ADC_EOCOnEachRegularChannelCmd() ) the end of: + ==> a regular CHANNEL conversion + ==> sequence of regular GROUP conversions . + + 3. ADC_FLAG_STRT: Regular channel start ==> to indicate when regular CHANNEL + conversion starts. + + Interrupts : + ------------ + 1. ADC_IT_OVR : specifies the interrupt source for Overrun detection event. + 2. ADC_IT_EOC : specifies the interrupt source for Regular channel end of + conversion event. + + + II. Flags and Interrupts for ADC Injected channels + ================================================= + Flags : + ---------- + 1. ADC_FLAG_JEOC : Injected channel end of conversion ==> to indicate at + the end of injected GROUP conversion + + 2. ADC_FLAG_JSTRT: Injected channel start ==> to indicate hardware when + injected GROUP conversion starts. + + Interrupts : + ------------ + 1. ADC_IT_JEOC : specifies the interrupt source for Injected channel end of + conversion event. + + III. General Flags and Interrupts for the ADC + ================================================= + Flags : + ---------- + 1. ADC_FLAG_AWD: Analog watchdog ==> to indicate if the converted voltage + crosses the programmed thresholds values. + + Interrupts : + ------------ + 1. ADC_IT_AWD : specifies the interrupt source for Analog watchdog event. + + + The user should identify which mode will be used in his application to manage + the ADC controller events: Polling mode or Interrupt mode. + + In the Polling Mode it is advised to use the following functions: + - ADC_GetFlagStatus() : to check if flags events occur. + - ADC_ClearFlag() : to clear the flags events. + + In the Interrupt Mode it is advised to use the following functions: + - ADC_ITConfig() : to enable or disable the interrupt source. + - ADC_GetITStatus() : to check if Interrupt occurs. + - ADC_ClearITPendingBit() : to clear the Interrupt pending Bit + (corresponding Flag). +@endverbatim + * @{ + */ +/** + * @brief Enables or disables the specified ADC interrupts. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_IT: specifies the ADC interrupt sources to be enabled or disabled. + * This parameter can be one of the following values: + * @arg ADC_IT_EOC: End of conversion interrupt mask + * @arg ADC_IT_AWD: Analog watchdog interrupt mask + * @arg ADC_IT_JEOC: End of injected conversion interrupt mask + * @arg ADC_IT_OVR: Overrun interrupt enable + * @param NewState: new state of the specified ADC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState) +{ + uint32_t itmask = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_ADC_IT(ADC_IT)); + + /* Get the ADC IT index */ + itmask = (uint8_t)ADC_IT; + itmask = (uint32_t)0x01 << itmask; + + if (NewState != DISABLE) + { + /* Enable the selected ADC interrupts */ + ADCx->CR1 |= itmask; + } + else + { + /* Disable the selected ADC interrupts */ + ADCx->CR1 &= (~(uint32_t)itmask); + } +} + +/** + * @brief Checks whether the specified ADC flag is set or not. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg ADC_FLAG_AWD: Analog watchdog flag + * @arg ADC_FLAG_EOC: End of conversion flag + * @arg ADC_FLAG_JEOC: End of injected group conversion flag + * @arg ADC_FLAG_JSTRT: Start of injected group conversion flag + * @arg ADC_FLAG_STRT: Start of regular group conversion flag + * @arg ADC_FLAG_OVR: Overrun flag + * @retval The new state of ADC_FLAG (SET or RESET). + */ +FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_GET_FLAG(ADC_FLAG)); + + /* Check the status of the specified ADC flag */ + if ((ADCx->SR & ADC_FLAG) != (uint8_t)RESET) + { + /* ADC_FLAG is set */ + bitstatus = SET; + } + else + { + /* ADC_FLAG is reset */ + bitstatus = RESET; + } + /* Return the ADC_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the ADCx's pending flags. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg ADC_FLAG_AWD: Analog watchdog flag + * @arg ADC_FLAG_EOC: End of conversion flag + * @arg ADC_FLAG_JEOC: End of injected group conversion flag + * @arg ADC_FLAG_JSTRT: Start of injected group conversion flag + * @arg ADC_FLAG_STRT: Start of regular group conversion flag + * @arg ADC_FLAG_OVR: Overrun flag + * @retval None + */ +void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG)); + + /* Clear the selected ADC flags */ + ADCx->SR = ~(uint32_t)ADC_FLAG; +} + +/** + * @brief Checks whether the specified ADC interrupt has occurred or not. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_IT: specifies the ADC interrupt source to check. + * This parameter can be one of the following values: + * @arg ADC_IT_EOC: End of conversion interrupt mask + * @arg ADC_IT_AWD: Analog watchdog interrupt mask + * @arg ADC_IT_JEOC: End of injected conversion interrupt mask + * @arg ADC_IT_OVR: Overrun interrupt mask + * @retval The new state of ADC_IT (SET or RESET). + */ +ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT) +{ + ITStatus bitstatus = RESET; + uint32_t itmask = 0, enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_IT(ADC_IT)); + + /* Get the ADC IT index */ + itmask = ADC_IT >> 8; + + /* Get the ADC_IT enable bit status */ + enablestatus = (ADCx->CR1 & ((uint32_t)0x01 << (uint8_t)ADC_IT)) ; + + /* Check the status of the specified ADC interrupt */ + if (((ADCx->SR & itmask) != (uint32_t)RESET) && enablestatus) + { + /* ADC_IT is set */ + bitstatus = SET; + } + else + { + /* ADC_IT is reset */ + bitstatus = RESET; + } + /* Return the ADC_IT status */ + return bitstatus; +} + +/** + * @brief Clears the ADCx's interrupt pending bits. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_IT: specifies the ADC interrupt pending bit to clear. + * This parameter can be one of the following values: + * @arg ADC_IT_EOC: End of conversion interrupt mask + * @arg ADC_IT_AWD: Analog watchdog interrupt mask + * @arg ADC_IT_JEOC: End of injected conversion interrupt mask + * @arg ADC_IT_OVR: Overrun interrupt mask + * @retval None + */ +void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT) +{ + uint8_t itmask = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_IT(ADC_IT)); + /* Get the ADC IT index */ + itmask = (uint8_t)(ADC_IT >> 8); + /* Clear the selected ADC interrupt pending bits */ + ADCx->SR = ~(uint32_t)itmask; +} +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_can.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_can.c new file mode 100644 index 000000000..5198acee5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_can.c @@ -0,0 +1,1704 @@ +/** + ****************************************************************************** + * @file stm32f2xx_can.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Controller area network (CAN) peripheral: + * - Initialization and Configuration + * - CAN Frames Transmission + * - CAN Frames Reception + * - Operation modes switch + * - Error management + * - Interrupts and flags + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + + * 1. Enable the CAN controller interface clock using + * RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); for CAN1 + * and RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE); for CAN2 + * @note In case you are using CAN2 only, you have to enable the CAN1 clock. + * + * 2. CAN pins configuration + * - Enable the clock for the CAN GPIOs using the following function: + * RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); + * - Connect the involved CAN pins to AF9 using the following function + * GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_CANx); + * - Configure these CAN pins in alternate function mode by calling + * the function GPIO_Init(); + * + * 3. Initialise and configure the CAN using CAN_Init() and + * CAN_FilterInit() functions. + * + * 4. Transmit the desired CAN frame using CAN_Transmit() function. + * + * 5. Check the transmission of a CAN frame using CAN_TransmitStatus() + * function. + * + * 6. Cancel the transmission of a CAN frame using CAN_CancelTransmit() + * function. + * + * 7. Receive a CAN frame using CAN_Recieve() function. + * + * 8. Release the receive FIFOs using CAN_FIFORelease() function. + * + * 9. Return the number of pending received frames using + * CAN_MessagePending() function. + * + * 10. To control CAN events you can use one of the following two methods: + * - Check on CAN flags using the CAN_GetFlagStatus() function. + * - Use CAN interrupts through the function CAN_ITConfig() at + * initialization phase and CAN_GetITStatus() function into + * interrupt routines to check if the event has occurred or not. + * After checking on a flag you should clear it using CAN_ClearFlag() + * function. And after checking on an interrupt event you should + * clear it using CAN_ClearITPendingBit() function. + * + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_can.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup CAN + * @brief CAN driver modules + * @{ + */ +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* CAN Master Control Register bits */ +#define MCR_DBF ((uint32_t)0x00010000) /* software master reset */ + +/* CAN Mailbox Transmit Request */ +#define TMIDxR_TXRQ ((uint32_t)0x00000001) /* Transmit mailbox request */ + +/* CAN Filter Master Register bits */ +#define FMR_FINIT ((uint32_t)0x00000001) /* Filter init mode */ + +/* Time out for INAK bit */ +#define INAK_TIMEOUT ((uint32_t)0x0000FFFF) +/* Time out for SLAK bit */ +#define SLAK_TIMEOUT ((uint32_t)0x0000FFFF) + +/* Flags in TSR register */ +#define CAN_FLAGS_TSR ((uint32_t)0x08000000) +/* Flags in RF1R register */ +#define CAN_FLAGS_RF1R ((uint32_t)0x04000000) +/* Flags in RF0R register */ +#define CAN_FLAGS_RF0R ((uint32_t)0x02000000) +/* Flags in MSR register */ +#define CAN_FLAGS_MSR ((uint32_t)0x01000000) +/* Flags in ESR register */ +#define CAN_FLAGS_ESR ((uint32_t)0x00F00000) + +/* Mailboxes definition */ +#define CAN_TXMAILBOX_0 ((uint8_t)0x00) +#define CAN_TXMAILBOX_1 ((uint8_t)0x01) +#define CAN_TXMAILBOX_2 ((uint8_t)0x02) + +#define CAN_MODE_MASK ((uint32_t) 0x00000003) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit); + +/** @defgroup CAN_Private_Functions + * @{ + */ + +/** @defgroup CAN_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + This section provides functions allowing to + - Initialize the CAN peripherals : Prescaler, operating mode, the maximum number + of time quanta to perform resynchronization, the number of time quanta in + Bit Segment 1 and 2 and many other modes. + Refer to @ref CAN_InitTypeDef for more details. + - Configures the CAN reception filter. + - Select the start bank filter for slave CAN. + - Enables or disables the Debug Freeze mode for CAN + - Enables or disables the CAN Time Trigger Operation communication mode + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the CAN peripheral registers to their default reset values. + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @retval None. + */ +void CAN_DeInit(CAN_TypeDef* CANx) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + if (CANx == CAN1) + { + /* Enable CAN1 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, ENABLE); + /* Release CAN1 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, DISABLE); + } + else + { + /* Enable CAN2 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN2, ENABLE); + /* Release CAN2 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN2, DISABLE); + } +} + +/** + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @param CAN_InitStruct: pointer to a CAN_InitTypeDef structure that contains + * the configuration information for the CAN peripheral. + * @retval Constant indicates initialization succeed which will be + * CAN_InitStatus_Failed or CAN_InitStatus_Success. + */ +uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct) +{ + uint8_t InitStatus = CAN_InitStatus_Failed; + uint32_t wait_ack = 0x00000000; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TTCM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_ABOM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_AWUM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_NART)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_RFLM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TXFP)); + assert_param(IS_CAN_MODE(CAN_InitStruct->CAN_Mode)); + assert_param(IS_CAN_SJW(CAN_InitStruct->CAN_SJW)); + assert_param(IS_CAN_BS1(CAN_InitStruct->CAN_BS1)); + assert_param(IS_CAN_BS2(CAN_InitStruct->CAN_BS2)); + assert_param(IS_CAN_PRESCALER(CAN_InitStruct->CAN_Prescaler)); + + /* Exit from sleep mode */ + CANx->MCR &= (~(uint32_t)CAN_MCR_SLEEP); + + /* Request initialisation */ + CANx->MCR |= CAN_MCR_INRQ ; + + /* Wait the acknowledge */ + while (((CANx->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT)) + { + wait_ack++; + } + + /* Check acknowledge */ + if ((CANx->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) + { + InitStatus = CAN_InitStatus_Failed; + } + else + { + /* Set the time triggered communication mode */ + if (CAN_InitStruct->CAN_TTCM == ENABLE) + { + CANx->MCR |= CAN_MCR_TTCM; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_TTCM; + } + + /* Set the automatic bus-off management */ + if (CAN_InitStruct->CAN_ABOM == ENABLE) + { + CANx->MCR |= CAN_MCR_ABOM; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_ABOM; + } + + /* Set the automatic wake-up mode */ + if (CAN_InitStruct->CAN_AWUM == ENABLE) + { + CANx->MCR |= CAN_MCR_AWUM; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_AWUM; + } + + /* Set the no automatic retransmission */ + if (CAN_InitStruct->CAN_NART == ENABLE) + { + CANx->MCR |= CAN_MCR_NART; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_NART; + } + + /* Set the receive FIFO locked mode */ + if (CAN_InitStruct->CAN_RFLM == ENABLE) + { + CANx->MCR |= CAN_MCR_RFLM; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_RFLM; + } + + /* Set the transmit FIFO priority */ + if (CAN_InitStruct->CAN_TXFP == ENABLE) + { + CANx->MCR |= CAN_MCR_TXFP; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_TXFP; + } + + /* Set the bit timing register */ + CANx->BTR = (uint32_t)((uint32_t)CAN_InitStruct->CAN_Mode << 30) | \ + ((uint32_t)CAN_InitStruct->CAN_SJW << 24) | \ + ((uint32_t)CAN_InitStruct->CAN_BS1 << 16) | \ + ((uint32_t)CAN_InitStruct->CAN_BS2 << 20) | \ + ((uint32_t)CAN_InitStruct->CAN_Prescaler - 1); + + /* Request leave initialisation */ + CANx->MCR &= ~(uint32_t)CAN_MCR_INRQ; + + /* Wait the acknowledge */ + wait_ack = 0; + + while (((CANx->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT)) + { + wait_ack++; + } + + /* ...and check acknowledged */ + if ((CANx->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) + { + InitStatus = CAN_InitStatus_Failed; + } + else + { + InitStatus = CAN_InitStatus_Success ; + } + } + + /* At this step, return the status of initialization */ + return InitStatus; +} + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param CAN_FilterInitStruct: pointer to a CAN_FilterInitTypeDef structure that + * contains the configuration information. + * @retval None + */ +void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct) +{ + uint32_t filter_number_bit_pos = 0; + /* Check the parameters */ + assert_param(IS_CAN_FILTER_NUMBER(CAN_FilterInitStruct->CAN_FilterNumber)); + assert_param(IS_CAN_FILTER_MODE(CAN_FilterInitStruct->CAN_FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(CAN_FilterInitStruct->CAN_FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(CAN_FilterInitStruct->CAN_FilterFIFOAssignment)); + assert_param(IS_FUNCTIONAL_STATE(CAN_FilterInitStruct->CAN_FilterActivation)); + + filter_number_bit_pos = ((uint32_t)1) << CAN_FilterInitStruct->CAN_FilterNumber; + + /* Initialisation mode for the filter */ + CAN1->FMR |= FMR_FINIT; + + /* Filter Deactivation */ + CAN1->FA1R &= ~(uint32_t)filter_number_bit_pos; + + /* Filter Scale */ + if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_16bit) + { + /* 16-bit scale for the filter */ + CAN1->FS1R &= ~(uint32_t)filter_number_bit_pos; + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 = + ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow) << 16) | + (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 = + ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) | + (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh); + } + + if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_32bit) + { + /* 32-bit scale for the filter */ + CAN1->FS1R |= filter_number_bit_pos; + /* 32-bit identifier or First 32-bit identifier */ + CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 = + ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh) << 16) | + (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow); + /* 32-bit mask or Second 32-bit identifier */ + CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 = + ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) | + (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow); + } + + /* Filter Mode */ + if (CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdMask) + { + /*Id/Mask mode for the filter*/ + CAN1->FM1R &= ~(uint32_t)filter_number_bit_pos; + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /*Identifier list mode for the filter*/ + CAN1->FM1R |= (uint32_t)filter_number_bit_pos; + } + + /* Filter FIFO assignment */ + if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CAN1->FFA1R &= ~(uint32_t)filter_number_bit_pos; + } + + if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO1) + { + /* FIFO 1 assignation for the filter */ + CAN1->FFA1R |= (uint32_t)filter_number_bit_pos; + } + + /* Filter activation */ + if (CAN_FilterInitStruct->CAN_FilterActivation == ENABLE) + { + CAN1->FA1R |= filter_number_bit_pos; + } + + /* Leave the initialisation mode for the filter */ + CAN1->FMR &= ~FMR_FINIT; +} + +/** + * @brief Fills each CAN_InitStruct member with its default value. + * @param CAN_InitStruct: pointer to a CAN_InitTypeDef structure which ill be initialized. + * @retval None + */ +void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct) +{ + /* Reset CAN init structure parameters values */ + + /* Initialize the time triggered communication mode */ + CAN_InitStruct->CAN_TTCM = DISABLE; + + /* Initialize the automatic bus-off management */ + CAN_InitStruct->CAN_ABOM = DISABLE; + + /* Initialize the automatic wake-up mode */ + CAN_InitStruct->CAN_AWUM = DISABLE; + + /* Initialize the no automatic retransmission */ + CAN_InitStruct->CAN_NART = DISABLE; + + /* Initialize the receive FIFO locked mode */ + CAN_InitStruct->CAN_RFLM = DISABLE; + + /* Initialize the transmit FIFO priority */ + CAN_InitStruct->CAN_TXFP = DISABLE; + + /* Initialize the CAN_Mode member */ + CAN_InitStruct->CAN_Mode = CAN_Mode_Normal; + + /* Initialize the CAN_SJW member */ + CAN_InitStruct->CAN_SJW = CAN_SJW_1tq; + + /* Initialize the CAN_BS1 member */ + CAN_InitStruct->CAN_BS1 = CAN_BS1_4tq; + + /* Initialize the CAN_BS2 member */ + CAN_InitStruct->CAN_BS2 = CAN_BS2_3tq; + + /* Initialize the CAN_Prescaler member */ + CAN_InitStruct->CAN_Prescaler = 1; +} + +/** + * @brief Select the start bank filter for slave CAN. + * @param CAN_BankNumber: Select the start slave bank filter from 1..27. + * @retval None + */ +void CAN_SlaveStartBank(uint8_t CAN_BankNumber) +{ + /* Check the parameters */ + assert_param(IS_CAN_BANKNUMBER(CAN_BankNumber)); + + /* Enter Initialisation mode for the filter */ + CAN1->FMR |= FMR_FINIT; + + /* Select the start slave bank */ + CAN1->FMR &= (uint32_t)0xFFFFC0F1 ; + CAN1->FMR |= (uint32_t)(CAN_BankNumber)<<8; + + /* Leave Initialisation mode for the filter */ + CAN1->FMR &= ~FMR_FINIT; +} + +/** + * @brief Enables or disables the DBG Freeze for CAN. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param NewState: new state of the CAN peripheral. + * This parameter can be: ENABLE (CAN reception/transmission is frozen + * during debug. Reception FIFOs can still be accessed/controlled normally) + * or DISABLE (CAN is working during debug). + * @retval None + */ +void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable Debug Freeze */ + CANx->MCR |= MCR_DBF; + } + else + { + /* Disable Debug Freeze */ + CANx->MCR &= ~MCR_DBF; + } +} + + +/** + * @brief Enables or disables the CAN Time TriggerOperation communication mode. + * @note DLC must be programmed as 8 in order Time Stamp (2 bytes) to be + * sent over the CAN bus. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param NewState: Mode new state. This parameter can be: ENABLE or DISABLE. + * When enabled, Time stamp (TIME[15:0]) value is sent in the last two + * data bytes of the 8-byte message: TIME[7:0] in data byte 6 and TIME[15:8] + * in data byte 7. + * @retval None + */ +void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the TTCM mode */ + CANx->MCR |= CAN_MCR_TTCM; + + /* Set TGT bits */ + CANx->sTxMailBox[0].TDTR |= ((uint32_t)CAN_TDT0R_TGT); + CANx->sTxMailBox[1].TDTR |= ((uint32_t)CAN_TDT1R_TGT); + CANx->sTxMailBox[2].TDTR |= ((uint32_t)CAN_TDT2R_TGT); + } + else + { + /* Disable the TTCM mode */ + CANx->MCR &= (uint32_t)(~(uint32_t)CAN_MCR_TTCM); + + /* Reset TGT bits */ + CANx->sTxMailBox[0].TDTR &= ((uint32_t)~CAN_TDT0R_TGT); + CANx->sTxMailBox[1].TDTR &= ((uint32_t)~CAN_TDT1R_TGT); + CANx->sTxMailBox[2].TDTR &= ((uint32_t)~CAN_TDT2R_TGT); + } +} +/** + * @} + */ + + +/** @defgroup CAN_Group2 CAN Frames Transmission functions + * @brief CAN Frames Transmission functions + * +@verbatim + =============================================================================== + CAN Frames Transmission functions + =============================================================================== + This section provides functions allowing to + - Initiate and transmit a CAN frame message (if there is an empty mailbox). + - Check the transmission status of a CAN Frame + - Cancel a transmit request + +@endverbatim + * @{ + */ + +/** + * @brief Initiates and transmits a CAN frame message. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param TxMessage: pointer to a structure which contains CAN Id, CAN DLC and CAN data. + * @retval The number of the mailbox that is used for transmission or + * CAN_TxStatus_NoMailBox if there is no empty mailbox. + */ +uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage) +{ + uint8_t transmit_mailbox = 0; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_IDTYPE(TxMessage->IDE)); + assert_param(IS_CAN_RTR(TxMessage->RTR)); + assert_param(IS_CAN_DLC(TxMessage->DLC)); + + /* Select one empty transmit mailbox */ + if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) + { + transmit_mailbox = 0; + } + else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) + { + transmit_mailbox = 1; + } + else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2) + { + transmit_mailbox = 2; + } + else + { + transmit_mailbox = CAN_TxStatus_NoMailBox; + } + + if (transmit_mailbox != CAN_TxStatus_NoMailBox) + { + /* Set up the Id */ + CANx->sTxMailBox[transmit_mailbox].TIR &= TMIDxR_TXRQ; + if (TxMessage->IDE == CAN_Id_Standard) + { + assert_param(IS_CAN_STDID(TxMessage->StdId)); + CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) | \ + TxMessage->RTR); + } + else + { + assert_param(IS_CAN_EXTID(TxMessage->ExtId)); + CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \ + TxMessage->IDE | \ + TxMessage->RTR); + } + + /* Set up the DLC */ + TxMessage->DLC &= (uint8_t)0x0000000F; + CANx->sTxMailBox[transmit_mailbox].TDTR &= (uint32_t)0xFFFFFFF0; + CANx->sTxMailBox[transmit_mailbox].TDTR |= TxMessage->DLC; + + /* Set up the data field */ + CANx->sTxMailBox[transmit_mailbox].TDLR = (((uint32_t)TxMessage->Data[3] << 24) | + ((uint32_t)TxMessage->Data[2] << 16) | + ((uint32_t)TxMessage->Data[1] << 8) | + ((uint32_t)TxMessage->Data[0])); + CANx->sTxMailBox[transmit_mailbox].TDHR = (((uint32_t)TxMessage->Data[7] << 24) | + ((uint32_t)TxMessage->Data[6] << 16) | + ((uint32_t)TxMessage->Data[5] << 8) | + ((uint32_t)TxMessage->Data[4])); + /* Request transmission */ + CANx->sTxMailBox[transmit_mailbox].TIR |= TMIDxR_TXRQ; + } + return transmit_mailbox; +} + +/** + * @brief Checks the transmission status of a CAN Frame. + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @param TransmitMailbox: the number of the mailbox that is used for transmission. + * @retval CAN_TxStatus_Ok if the CAN driver transmits the message, + * CAN_TxStatus_Failed in an other case. + */ +uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox) +{ + uint32_t state = 0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_TRANSMITMAILBOX(TransmitMailbox)); + + switch (TransmitMailbox) + { + case (CAN_TXMAILBOX_0): + state = CANx->TSR & (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0); + break; + case (CAN_TXMAILBOX_1): + state = CANx->TSR & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1); + break; + case (CAN_TXMAILBOX_2): + state = CANx->TSR & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2); + break; + default: + state = CAN_TxStatus_Failed; + break; + } + switch (state) + { + /* transmit pending */ + case (0x0): state = CAN_TxStatus_Pending; + break; + /* transmit failed */ + case (CAN_TSR_RQCP0 | CAN_TSR_TME0): state = CAN_TxStatus_Failed; + break; + case (CAN_TSR_RQCP1 | CAN_TSR_TME1): state = CAN_TxStatus_Failed; + break; + case (CAN_TSR_RQCP2 | CAN_TSR_TME2): state = CAN_TxStatus_Failed; + break; + /* transmit succeeded */ + case (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0):state = CAN_TxStatus_Ok; + break; + case (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1):state = CAN_TxStatus_Ok; + break; + case (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2):state = CAN_TxStatus_Ok; + break; + default: state = CAN_TxStatus_Failed; + break; + } + return (uint8_t) state; +} + +/** + * @brief Cancels a transmit request. + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @param Mailbox: Mailbox number. + * @retval None + */ +void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_TRANSMITMAILBOX(Mailbox)); + /* abort transmission */ + switch (Mailbox) + { + case (CAN_TXMAILBOX_0): CANx->TSR |= CAN_TSR_ABRQ0; + break; + case (CAN_TXMAILBOX_1): CANx->TSR |= CAN_TSR_ABRQ1; + break; + case (CAN_TXMAILBOX_2): CANx->TSR |= CAN_TSR_ABRQ2; + break; + default: + break; + } +} +/** + * @} + */ + + +/** @defgroup CAN_Group3 CAN Frames Reception functions + * @brief CAN Frames Reception functions + * +@verbatim + =============================================================================== + CAN Frames Reception functions + =============================================================================== + This section provides functions allowing to + - Receive a correct CAN frame + - Release a specified receive FIFO (2 FIFOs are available) + - Return the number of the pending received CAN frames + +@endverbatim + * @{ + */ + +/** + * @brief Receives a correct CAN frame. + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @param FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. + * @param RxMessage: pointer to a structure receive frame which contains CAN Id, + * CAN DLC, CAN data and FMI number. + * @retval None + */ +void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_FIFO(FIFONumber)); + /* Get the Id */ + RxMessage->IDE = (uint8_t)0x04 & CANx->sFIFOMailBox[FIFONumber].RIR; + if (RxMessage->IDE == CAN_Id_Standard) + { + RxMessage->StdId = (uint32_t)0x000007FF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 21); + } + else + { + RxMessage->ExtId = (uint32_t)0x1FFFFFFF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 3); + } + + RxMessage->RTR = (uint8_t)0x02 & CANx->sFIFOMailBox[FIFONumber].RIR; + /* Get the DLC */ + RxMessage->DLC = (uint8_t)0x0F & CANx->sFIFOMailBox[FIFONumber].RDTR; + /* Get the FMI */ + RxMessage->FMI = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDTR >> 8); + /* Get the data field */ + RxMessage->Data[0] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDLR; + RxMessage->Data[1] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 8); + RxMessage->Data[2] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 16); + RxMessage->Data[3] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 24); + RxMessage->Data[4] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDHR; + RxMessage->Data[5] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 8); + RxMessage->Data[6] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 16); + RxMessage->Data[7] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 24); + /* Release the FIFO */ + /* Release FIFO0 */ + if (FIFONumber == CAN_FIFO0) + { + CANx->RF0R |= CAN_RF0R_RFOM0; + } + /* Release FIFO1 */ + else /* FIFONumber == CAN_FIFO1 */ + { + CANx->RF1R |= CAN_RF1R_RFOM1; + } +} + +/** + * @brief Releases the specified receive FIFO. + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @param FIFONumber: FIFO to release, CAN_FIFO0 or CAN_FIFO1. + * @retval None + */ +void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_FIFO(FIFONumber)); + /* Release FIFO0 */ + if (FIFONumber == CAN_FIFO0) + { + CANx->RF0R |= CAN_RF0R_RFOM0; + } + /* Release FIFO1 */ + else /* FIFONumber == CAN_FIFO1 */ + { + CANx->RF1R |= CAN_RF1R_RFOM1; + } +} + +/** + * @brief Returns the number of pending received messages. + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @param FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. + * @retval NbMessage : which is the number of pending message. + */ +uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber) +{ + uint8_t message_pending=0; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_FIFO(FIFONumber)); + if (FIFONumber == CAN_FIFO0) + { + message_pending = (uint8_t)(CANx->RF0R&(uint32_t)0x03); + } + else if (FIFONumber == CAN_FIFO1) + { + message_pending = (uint8_t)(CANx->RF1R&(uint32_t)0x03); + } + else + { + message_pending = 0; + } + return message_pending; +} +/** + * @} + */ + + +/** @defgroup CAN_Group4 CAN Operation modes functions + * @brief CAN Operation modes functions + * +@verbatim + =============================================================================== + CAN Operation modes functions + =============================================================================== + This section provides functions allowing to select the CAN Operation modes + - sleep mode + - normal mode + - initialization mode + +@endverbatim + * @{ + */ + + +/** + * @brief Selects the CAN Operation mode. + * @param CAN_OperatingMode: CAN Operating Mode. + * This parameter can be one of @ref CAN_OperatingMode_TypeDef enumeration. + * @retval status of the requested mode which can be + * - CAN_ModeStatus_Failed: CAN failed entering the specific mode + * - CAN_ModeStatus_Success: CAN Succeed entering the specific mode + */ +uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode) +{ + uint8_t status = CAN_ModeStatus_Failed; + + /* Timeout for INAK or also for SLAK bits*/ + uint32_t timeout = INAK_TIMEOUT; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_OPERATING_MODE(CAN_OperatingMode)); + + if (CAN_OperatingMode == CAN_OperatingMode_Initialization) + { + /* Request initialisation */ + CANx->MCR = (uint32_t)((CANx->MCR & (uint32_t)(~(uint32_t)CAN_MCR_SLEEP)) | CAN_MCR_INRQ); + + /* Wait the acknowledge */ + while (((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_INAK) && (timeout != 0)) + { + timeout--; + } + if ((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_INAK) + { + status = CAN_ModeStatus_Failed; + } + else + { + status = CAN_ModeStatus_Success; + } + } + else if (CAN_OperatingMode == CAN_OperatingMode_Normal) + { + /* Request leave initialisation and sleep mode and enter Normal mode */ + CANx->MCR &= (uint32_t)(~(CAN_MCR_SLEEP|CAN_MCR_INRQ)); + + /* Wait the acknowledge */ + while (((CANx->MSR & CAN_MODE_MASK) != 0) && (timeout!=0)) + { + timeout--; + } + if ((CANx->MSR & CAN_MODE_MASK) != 0) + { + status = CAN_ModeStatus_Failed; + } + else + { + status = CAN_ModeStatus_Success; + } + } + else if (CAN_OperatingMode == CAN_OperatingMode_Sleep) + { + /* Request Sleep mode */ + CANx->MCR = (uint32_t)((CANx->MCR & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP); + + /* Wait the acknowledge */ + while (((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_SLAK) && (timeout!=0)) + { + timeout--; + } + if ((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_SLAK) + { + status = CAN_ModeStatus_Failed; + } + else + { + status = CAN_ModeStatus_Success; + } + } + else + { + status = CAN_ModeStatus_Failed; + } + + return (uint8_t) status; +} + +/** + * @brief Enters the Sleep (low power) mode. + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @retval CAN_Sleep_Ok if sleep entered, CAN_Sleep_Failed otherwise. + */ +uint8_t CAN_Sleep(CAN_TypeDef* CANx) +{ + uint8_t sleepstatus = CAN_Sleep_Failed; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Request Sleep mode */ + CANx->MCR = (((CANx->MCR) & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP); + + /* Sleep mode status */ + if ((CANx->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) == CAN_MSR_SLAK) + { + /* Sleep mode not entered */ + sleepstatus = CAN_Sleep_Ok; + } + /* return sleep mode status */ + return (uint8_t)sleepstatus; +} + +/** + * @brief Wakes up the CAN peripheral from sleep mode . + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @retval CAN_WakeUp_Ok if sleep mode left, CAN_WakeUp_Failed otherwise. + */ +uint8_t CAN_WakeUp(CAN_TypeDef* CANx) +{ + uint32_t wait_slak = SLAK_TIMEOUT; + uint8_t wakeupstatus = CAN_WakeUp_Failed; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Wake up request */ + CANx->MCR &= ~(uint32_t)CAN_MCR_SLEEP; + + /* Sleep mode status */ + while(((CANx->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK)&&(wait_slak!=0x00)) + { + wait_slak--; + } + if((CANx->MSR & CAN_MSR_SLAK) != CAN_MSR_SLAK) + { + /* wake up done : Sleep mode exited */ + wakeupstatus = CAN_WakeUp_Ok; + } + /* return wakeup status */ + return (uint8_t)wakeupstatus; +} +/** + * @} + */ + + +/** @defgroup CAN_Group5 CAN Bus Error management functions + * @brief CAN Bus Error management functions + * +@verbatim + =============================================================================== + CAN Bus Error management functions + =============================================================================== + This section provides functions allowing to + - Return the CANx's last error code (LEC) + - Return the CANx Receive Error Counter (REC) + - Return the LSB of the 9-bit CANx Transmit Error Counter(TEC). + + @note If TEC is greater than 255, The CAN is in bus-off state. + @note if REC or TEC are greater than 96, an Error warning flag occurs. + @note if REC or TEC are greater than 127, an Error Passive Flag occurs. + +@endverbatim + * @{ + */ + +/** + * @brief Returns the CANx's last error code (LEC). + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @retval Error code: + * - CAN_ERRORCODE_NoErr: No Error + * - CAN_ERRORCODE_StuffErr: Stuff Error + * - CAN_ERRORCODE_FormErr: Form Error + * - CAN_ERRORCODE_ACKErr : Acknowledgment Error + * - CAN_ERRORCODE_BitRecessiveErr: Bit Recessive Error + * - CAN_ERRORCODE_BitDominantErr: Bit Dominant Error + * - CAN_ERRORCODE_CRCErr: CRC Error + * - CAN_ERRORCODE_SoftwareSetErr: Software Set Error + */ +uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx) +{ + uint8_t errorcode=0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Get the error code*/ + errorcode = (((uint8_t)CANx->ESR) & (uint8_t)CAN_ESR_LEC); + + /* Return the error code*/ + return errorcode; +} + +/** + * @brief Returns the CANx Receive Error Counter (REC). + * @note In case of an error during reception, this counter is incremented + * by 1 or by 8 depending on the error condition as defined by the CAN + * standard. After every successful reception, the counter is + * decremented by 1 or reset to 120 if its value was higher than 128. + * When the counter value exceeds 127, the CAN controller enters the + * error passive state. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @retval CAN Receive Error Counter. + */ +uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx) +{ + uint8_t counter=0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Get the Receive Error Counter*/ + counter = (uint8_t)((CANx->ESR & CAN_ESR_REC)>> 24); + + /* Return the Receive Error Counter*/ + return counter; +} + + +/** + * @brief Returns the LSB of the 9-bit CANx Transmit Error Counter(TEC). + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @retval LSB of the 9-bit CAN Transmit Error Counter. + */ +uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx) +{ + uint8_t counter=0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Get the LSB of the 9-bit CANx Transmit Error Counter(TEC) */ + counter = (uint8_t)((CANx->ESR & CAN_ESR_TEC)>> 16); + + /* Return the LSB of the 9-bit CANx Transmit Error Counter(TEC) */ + return counter; +} +/** + * @} + */ + +/** @defgroup CAN_Group6 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + + This section provides functions allowing to configure the CAN Interrupts and + to get the status and clear flags and Interrupts pending bits. + + The CAN provides 14 Interrupts sources and 15 Flags: + + =============== + Flags : + =============== + The 15 flags can be divided on 4 groups: + + A. Transmit Flags + ----------------------- + CAN_FLAG_RQCP0, + CAN_FLAG_RQCP1, + CAN_FLAG_RQCP2 : Request completed MailBoxes 0, 1 and 2 Flags + Set when when the last request (transmit or abort) has + been performed. + + B. Receive Flags + ----------------------- + + CAN_FLAG_FMP0, + CAN_FLAG_FMP1 : FIFO 0 and 1 Message Pending Flags + set to signal that messages are pending in the receive + FIFO. + These Flags are cleared only by hardware. + + CAN_FLAG_FF0, + CAN_FLAG_FF1 : FIFO 0 and 1 Full Flags + set when three messages are stored in the selected + FIFO. + + CAN_FLAG_FOV0 + CAN_FLAG_FOV1 : FIFO 0 and 1 Overrun Flags + set when a new message has been received and passed + the filter while the FIFO was full. + + C. Operating Mode Flags + ----------------------- + CAN_FLAG_WKU : Wake up Flag + set to signal that a SOF bit has been detected while + the CAN hardware was in Sleep mode. + + CAN_FLAG_SLAK : Sleep acknowledge Flag + Set to signal that the CAN has entered Sleep Mode. + + D. Error Flags + ----------------------- + CAN_FLAG_EWG : Error Warning Flag + Set when the warning limit has been reached (Receive + Error Counter or Transmit Error Counter greater than 96). + This Flag is cleared only by hardware. + + CAN_FLAG_EPV : Error Passive Flag + Set when the Error Passive limit has been reached + (Receive Error Counter or Transmit Error Counter + greater than 127). + This Flag is cleared only by hardware. + + CAN_FLAG_BOF : Bus-Off Flag + set when CAN enters the bus-off state. The bus-off + state is entered on TEC overflow, greater than 255. + This Flag is cleared only by hardware. + + CAN_FLAG_LEC : Last error code Flag + set If a message has been transferred (reception or + transmission) with error, and the error code is hold. + + =============== + Interrupts : + =============== + The 14 interrupts can be divided on 4 groups: + + A. Transmit interrupt + ----------------------- + CAN_IT_TME : Transmit mailbox empty Interrupt + if enabled, this interrupt source is pending when + no transmit request are pending for Tx mailboxes. + + B. Receive Interrupts + ----------------------- + CAN_IT_FMP0, + CAN_IT_FMP1 : FIFO 0 and FIFO1 message pending Interrupts + if enabled, these interrupt sources are pending when + messages are pending in the receive FIFO. + The corresponding interrupt pending bits are cleared + only by hardware. + + CAN_IT_FF0, + CAN_IT_FF1 : FIFO 0 and FIFO1 full Interrupts + if enabled, these interrupt sources are pending when + three messages are stored in the selected FIFO. + + CAN_IT_FOV0, + CAN_IT_FOV1 : FIFO 0 and FIFO1 overrun Interrupts + if enabled, these interrupt sources are pending when + a new message has been received and passed the filter + while the FIFO was full. + + C. Operating Mode Interrupts + ------------------------------- + CAN_IT_WKU : Wake-up Interrupt + if enabled, this interrupt source is pending when + a SOF bit has been detected while the CAN hardware was + in Sleep mode. + + CAN_IT_SLK : Sleep acknowledge Interrupt + if enabled, this interrupt source is pending when + the CAN has entered Sleep Mode. + + D. Error Interrupts + ----------------------- + CAN_IT_EWG : Error warning Interrupt + if enabled, this interrupt source is pending when + the warning limit has been reached (Receive Error + Counter or Transmit Error Counter=96). + + CAN_IT_EPV : Error passive Interrupt + if enabled, this interrupt source is pending when + the Error Passive limit has been reached (Receive + Error Counter or Transmit Error Counter>127). + + CAN_IT_BOF : Bus-off Interrupt + if enabled, this interrupt source is pending when + CAN enters the bus-off state. The bus-off state is + entered on TEC overflow, greater than 255. + This Flag is cleared only by hardware. + + CAN_IT_LEC : Last error code Interrupt + if enabled, this interrupt source is pending when + a message has been transferred (reception or + transmission) with error, and the error code is hold. + + CAN_IT_ERR : Error Interrupt + if enabled, this interrupt source is pending when + an error condition is pending. + + + Managing the CAN controller events : + ------------------------------------ + The user should identify which mode will be used in his application to manage + the CAN controller events: Polling mode or Interrupt mode. + + 1. In the Polling Mode it is advised to use the following functions: + - CAN_GetFlagStatus() : to check if flags events occur. + - CAN_ClearFlag() : to clear the flags events. + + + + 2. In the Interrupt Mode it is advised to use the following functions: + - CAN_ITConfig() : to enable or disable the interrupt source. + - CAN_GetITStatus() : to check if Interrupt occurs. + - CAN_ClearITPendingBit() : to clear the Interrupt pending Bit (corresponding Flag). + @note This function has no impact on CAN_IT_FMP0 and CAN_IT_FMP1 Interrupts + pending bits since there are cleared only by hardware. + +@endverbatim + * @{ + */ +/** + * @brief Enables or disables the specified CANx interrupts. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_IT: specifies the CAN interrupt sources to be enabled or disabled. + * This parameter can be: + * @arg CAN_IT_TME: Transmit mailbox empty Interrupt + * @arg CAN_IT_FMP0: FIFO 0 message pending Interrupt + * @arg CAN_IT_FF0: FIFO 0 full Interrupt + * @arg CAN_IT_FOV0: FIFO 0 overrun Interrupt + * @arg CAN_IT_FMP1: FIFO 1 message pending Interrupt + * @arg CAN_IT_FF1: FIFO 1 full Interrupt + * @arg CAN_IT_FOV1: FIFO 1 overrun Interrupt + * @arg CAN_IT_WKU: Wake-up Interrupt + * @arg CAN_IT_SLK: Sleep acknowledge Interrupt + * @arg CAN_IT_EWG: Error warning Interrupt + * @arg CAN_IT_EPV: Error passive Interrupt + * @arg CAN_IT_BOF: Bus-off Interrupt + * @arg CAN_IT_LEC: Last error code Interrupt + * @arg CAN_IT_ERR: Error Interrupt + * @param NewState: new state of the CAN interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_IT(CAN_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected CANx interrupt */ + CANx->IER |= CAN_IT; + } + else + { + /* Disable the selected CANx interrupt */ + CANx->IER &= ~CAN_IT; + } +} +/** + * @brief Checks whether the specified CAN flag is set or not. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg CAN_FLAG_RQCP0: Request MailBox0 Flag + * @arg CAN_FLAG_RQCP1: Request MailBox1 Flag + * @arg CAN_FLAG_RQCP2: Request MailBox2 Flag + * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag + * @arg CAN_FLAG_FF0: FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag + * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag + * @arg CAN_FLAG_FF1: FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKU: Wake up Flag + * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag + * @arg CAN_FLAG_EWG: Error Warning Flag + * @arg CAN_FLAG_EPV: Error Passive Flag + * @arg CAN_FLAG_BOF: Bus-Off Flag + * @arg CAN_FLAG_LEC: Last error code Flag + * @retval The new state of CAN_FLAG (SET or RESET). + */ +FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG) +{ + FlagStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_GET_FLAG(CAN_FLAG)); + + + if((CAN_FLAG & CAN_FLAGS_ESR) != (uint32_t)RESET) + { + /* Check the status of the specified CAN flag */ + if ((CANx->ESR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + else if((CAN_FLAG & CAN_FLAGS_MSR) != (uint32_t)RESET) + { + /* Check the status of the specified CAN flag */ + if ((CANx->MSR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + else if((CAN_FLAG & CAN_FLAGS_TSR) != (uint32_t)RESET) + { + /* Check the status of the specified CAN flag */ + if ((CANx->TSR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + else if((CAN_FLAG & CAN_FLAGS_RF0R) != (uint32_t)RESET) + { + /* Check the status of the specified CAN flag */ + if ((CANx->RF0R & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + else /* If(CAN_FLAG & CAN_FLAGS_RF1R != (uint32_t)RESET) */ + { + /* Check the status of the specified CAN flag */ + if ((uint32_t)(CANx->RF1R & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + /* Return the CAN_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the CAN's pending flags. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_FLAG: specifies the flag to clear. + * This parameter can be one of the following values: + * @arg CAN_FLAG_RQCP0: Request MailBox0 Flag + * @arg CAN_FLAG_RQCP1: Request MailBox1 Flag + * @arg CAN_FLAG_RQCP2: Request MailBox2 Flag + * @arg CAN_FLAG_FF0: FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKU: Wake up Flag + * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag + * @arg CAN_FLAG_LEC: Last error code Flag + * @retval None + */ +void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG) +{ + uint32_t flagtmp=0; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_CLEAR_FLAG(CAN_FLAG)); + + if (CAN_FLAG == CAN_FLAG_LEC) /* ESR register */ + { + /* Clear the selected CAN flags */ + CANx->ESR = (uint32_t)RESET; + } + else /* MSR or TSR or RF0R or RF1R */ + { + flagtmp = CAN_FLAG & 0x000FFFFF; + + if ((CAN_FLAG & CAN_FLAGS_RF0R)!=(uint32_t)RESET) + { + /* Receive Flags */ + CANx->RF0R = (uint32_t)(flagtmp); + } + else if ((CAN_FLAG & CAN_FLAGS_RF1R)!=(uint32_t)RESET) + { + /* Receive Flags */ + CANx->RF1R = (uint32_t)(flagtmp); + } + else if ((CAN_FLAG & CAN_FLAGS_TSR)!=(uint32_t)RESET) + { + /* Transmit Flags */ + CANx->TSR = (uint32_t)(flagtmp); + } + else /* If((CAN_FLAG & CAN_FLAGS_MSR)!=(uint32_t)RESET) */ + { + /* Operating mode Flags */ + CANx->MSR = (uint32_t)(flagtmp); + } + } +} + +/** + * @brief Checks whether the specified CANx interrupt has occurred or not. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_IT: specifies the CAN interrupt source to check. + * This parameter can be one of the following values: + * @arg CAN_IT_TME: Transmit mailbox empty Interrupt + * @arg CAN_IT_FMP0: FIFO 0 message pending Interrupt + * @arg CAN_IT_FF0: FIFO 0 full Interrupt + * @arg CAN_IT_FOV0: FIFO 0 overrun Interrupt + * @arg CAN_IT_FMP1: FIFO 1 message pending Interrupt + * @arg CAN_IT_FF1: FIFO 1 full Interrupt + * @arg CAN_IT_FOV1: FIFO 1 overrun Interrupt + * @arg CAN_IT_WKU: Wake-up Interrupt + * @arg CAN_IT_SLK: Sleep acknowledge Interrupt + * @arg CAN_IT_EWG: Error warning Interrupt + * @arg CAN_IT_EPV: Error passive Interrupt + * @arg CAN_IT_BOF: Bus-off Interrupt + * @arg CAN_IT_LEC: Last error code Interrupt + * @arg CAN_IT_ERR: Error Interrupt + * @retval The current state of CAN_IT (SET or RESET). + */ +ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT) +{ + ITStatus itstatus = RESET; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_IT(CAN_IT)); + + /* check the interrupt enable bit */ + if((CANx->IER & CAN_IT) != RESET) + { + /* in case the Interrupt is enabled, .... */ + switch (CAN_IT) + { + case CAN_IT_TME: + /* Check CAN_TSR_RQCPx bits */ + itstatus = CheckITStatus(CANx->TSR, CAN_TSR_RQCP0|CAN_TSR_RQCP1|CAN_TSR_RQCP2); + break; + case CAN_IT_FMP0: + /* Check CAN_RF0R_FMP0 bit */ + itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FMP0); + break; + case CAN_IT_FF0: + /* Check CAN_RF0R_FULL0 bit */ + itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FULL0); + break; + case CAN_IT_FOV0: + /* Check CAN_RF0R_FOVR0 bit */ + itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FOVR0); + break; + case CAN_IT_FMP1: + /* Check CAN_RF1R_FMP1 bit */ + itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FMP1); + break; + case CAN_IT_FF1: + /* Check CAN_RF1R_FULL1 bit */ + itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FULL1); + break; + case CAN_IT_FOV1: + /* Check CAN_RF1R_FOVR1 bit */ + itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FOVR1); + break; + case CAN_IT_WKU: + /* Check CAN_MSR_WKUI bit */ + itstatus = CheckITStatus(CANx->MSR, CAN_MSR_WKUI); + break; + case CAN_IT_SLK: + /* Check CAN_MSR_SLAKI bit */ + itstatus = CheckITStatus(CANx->MSR, CAN_MSR_SLAKI); + break; + case CAN_IT_EWG: + /* Check CAN_ESR_EWGF bit */ + itstatus = CheckITStatus(CANx->ESR, CAN_ESR_EWGF); + break; + case CAN_IT_EPV: + /* Check CAN_ESR_EPVF bit */ + itstatus = CheckITStatus(CANx->ESR, CAN_ESR_EPVF); + break; + case CAN_IT_BOF: + /* Check CAN_ESR_BOFF bit */ + itstatus = CheckITStatus(CANx->ESR, CAN_ESR_BOFF); + break; + case CAN_IT_LEC: + /* Check CAN_ESR_LEC bit */ + itstatus = CheckITStatus(CANx->ESR, CAN_ESR_LEC); + break; + case CAN_IT_ERR: + /* Check CAN_MSR_ERRI bit */ + itstatus = CheckITStatus(CANx->MSR, CAN_MSR_ERRI); + break; + default: + /* in case of error, return RESET */ + itstatus = RESET; + break; + } + } + else + { + /* in case the Interrupt is not enabled, return RESET */ + itstatus = RESET; + } + + /* Return the CAN_IT status */ + return itstatus; +} + +/** + * @brief Clears the CANx's interrupt pending bits. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_IT: specifies the interrupt pending bit to clear. + * This parameter can be one of the following values: + * @arg CAN_IT_TME: Transmit mailbox empty Interrupt + * @arg CAN_IT_FF0: FIFO 0 full Interrupt + * @arg CAN_IT_FOV0: FIFO 0 overrun Interrupt + * @arg CAN_IT_FF1: FIFO 1 full Interrupt + * @arg CAN_IT_FOV1: FIFO 1 overrun Interrupt + * @arg CAN_IT_WKU: Wake-up Interrupt + * @arg CAN_IT_SLK: Sleep acknowledge Interrupt + * @arg CAN_IT_EWG: Error warning Interrupt + * @arg CAN_IT_EPV: Error passive Interrupt + * @arg CAN_IT_BOF: Bus-off Interrupt + * @arg CAN_IT_LEC: Last error code Interrupt + * @arg CAN_IT_ERR: Error Interrupt + * @retval None + */ +void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_CLEAR_IT(CAN_IT)); + + switch (CAN_IT) + { + case CAN_IT_TME: + /* Clear CAN_TSR_RQCPx (rc_w1)*/ + CANx->TSR = CAN_TSR_RQCP0|CAN_TSR_RQCP1|CAN_TSR_RQCP2; + break; + case CAN_IT_FF0: + /* Clear CAN_RF0R_FULL0 (rc_w1)*/ + CANx->RF0R = CAN_RF0R_FULL0; + break; + case CAN_IT_FOV0: + /* Clear CAN_RF0R_FOVR0 (rc_w1)*/ + CANx->RF0R = CAN_RF0R_FOVR0; + break; + case CAN_IT_FF1: + /* Clear CAN_RF1R_FULL1 (rc_w1)*/ + CANx->RF1R = CAN_RF1R_FULL1; + break; + case CAN_IT_FOV1: + /* Clear CAN_RF1R_FOVR1 (rc_w1)*/ + CANx->RF1R = CAN_RF1R_FOVR1; + break; + case CAN_IT_WKU: + /* Clear CAN_MSR_WKUI (rc_w1)*/ + CANx->MSR = CAN_MSR_WKUI; + break; + case CAN_IT_SLK: + /* Clear CAN_MSR_SLAKI (rc_w1)*/ + CANx->MSR = CAN_MSR_SLAKI; + break; + case CAN_IT_EWG: + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + /* @note the corresponding Flag is cleared by hardware depending on the CAN Bus status*/ + break; + case CAN_IT_EPV: + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + /* @note the corresponding Flag is cleared by hardware depending on the CAN Bus status*/ + break; + case CAN_IT_BOF: + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + /* @note the corresponding Flag is cleared by hardware depending on the CAN Bus status*/ + break; + case CAN_IT_LEC: + /* Clear LEC bits */ + CANx->ESR = RESET; + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + break; + case CAN_IT_ERR: + /*Clear LEC bits */ + CANx->ESR = RESET; + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + /* @note BOFF, EPVF and EWGF Flags are cleared by hardware depending on the CAN Bus status*/ + break; + default: + break; + } +} + /** + * @} + */ + +/** + * @brief Checks whether the CAN interrupt has occurred or not. + * @param CAN_Reg: specifies the CAN interrupt register to check. + * @param It_Bit: specifies the interrupt source bit to check. + * @retval The new state of the CAN Interrupt (SET or RESET). + */ +static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit) +{ + ITStatus pendingbitstatus = RESET; + + if ((CAN_Reg & It_Bit) != (uint32_t)RESET) + { + /* CAN_IT is set */ + pendingbitstatus = SET; + } + else + { + /* CAN_IT is reset */ + pendingbitstatus = RESET; + } + return pendingbitstatus; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_crc.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_crc.c new file mode 100644 index 000000000..450875963 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_crc.c @@ -0,0 +1,133 @@ +/** + ****************************************************************************** + * @file stm32f2xx_crc.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides all the CRC firmware functions. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_crc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup CRC + * @brief CRC driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup CRC_Private_Functions + * @{ + */ + +/** + * @brief Resets the CRC Data register (DR). + * @param None + * @retval None + */ +void CRC_ResetDR(void) +{ + /* Reset CRC generator */ + CRC->CR = CRC_CR_RESET; +} + +/** + * @brief Computes the 32-bit CRC of a given data word(32-bit). + * @param Data: data word(32-bit) to compute its CRC + * @retval 32-bit CRC + */ +uint32_t CRC_CalcCRC(uint32_t Data) +{ + CRC->DR = Data; + + return (CRC->DR); +} + +/** + * @brief Computes the 32-bit CRC of a given buffer of data word(32-bit). + * @param pBuffer: pointer to the buffer containing the data to be computed + * @param BufferLength: length of the buffer to be computed + * @retval 32-bit CRC + */ +uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength) +{ + uint32_t index = 0; + + for(index = 0; index < BufferLength; index++) + { + CRC->DR = pBuffer[index]; + } + return (CRC->DR); +} + +/** + * @brief Returns the current CRC value. + * @param None + * @retval 32-bit CRC + */ +uint32_t CRC_GetCRC(void) +{ + return (CRC->DR); +} + +/** + * @brief Stores a 8-bit data in the Independent Data(ID) register. + * @param IDValue: 8-bit value to be stored in the ID register + * @retval None + */ +void CRC_SetIDRegister(uint8_t IDValue) +{ + CRC->IDR = IDValue; +} + +/** + * @brief Returns the 8-bit data stored in the Independent Data(ID) register + * @param None + * @retval 8-bit value of the ID register + */ +uint8_t CRC_GetIDRegister(void) +{ + return (CRC->IDR); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp.c new file mode 100644 index 000000000..d78bf55a8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp.c @@ -0,0 +1,856 @@ +/** + ****************************************************************************** + * @file stm32f2xx_cryp.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Cryptographic processor (CRYP) peripheral: + * - Initialization and Configuration functions + * - Data treatment functions + * - Context swapping functions + * - DMA interface function + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable the CRYP controller clock using + * RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); function. + * + * 2. Initialise the CRYP using CRYP_Init(), CRYP_KeyInit() and if + * needed CRYP_IVInit(). + * + * 3. Flush the IN and OUT FIFOs by using CRYP_FIFOFlush() function. + * + * 4. Enable the CRYP controller using the CRYP_Cmd() function. + * + * 5. If using DMA for Data input and output transfer, + * Activate the needed DMA Requests using CRYP_DMACmd() function + + * 6. If DMA is not used for data transfer, use CRYP_DataIn() and + * CRYP_DataOut() functions to enter data to IN FIFO and get result + * from OUT FIFO. + * + * 7. To control CRYP events you can use one of the following + * two methods: + * - Check on CRYP flags using the CRYP_GetFlagStatus() function. + * - Use CRYP interrupts through the function CRYP_ITConfig() at + * initialization phase and CRYP_GetITStatus() function into + * interrupt routines in processing phase. + * + * 8. Save and restore Cryptographic processor context using + * CRYP_SaveContext() and CRYP_RestoreContext() functions. + * + * + * =================================================================== + * Procedure to perform an encryption or a decryption + * =================================================================== + * + * Initialization + * =============== + * 1. Initialize the peripheral using CRYP_Init(), CRYP_KeyInit() and + * CRYP_IVInit functions: + * - Configure the key size (128-, 192- or 256-bit, in the AES only) + * - Enter the symmetric key + * - Configure the data type + * - In case of decryption in AES-ECB or AES-CBC, you must prepare + * the key: configure the key preparation mode. Then Enable the CRYP + * peripheral using CRYP_Cmd() function: the BUSY flag is set. + * Wait until BUSY flag is reset : the key is prepared for decryption + * - Configure the algorithm and chaining (the DES/TDES in ECB/CBC, the + * AES in ECB/CBC/CTR) + * - Configure the direction (encryption/decryption). + * - Write the initialization vectors (in CBC or CTR modes only) + * + * 2. Flush the IN and OUT FIFOs using the CRYP_FIFOFlush() function + * + * + * Basic Processing mode (polling mode) + * ==================================== + * 1. Enable the cryptographic processor using CRYP_Cmd() function. + * + * 2. Write the first blocks in the input FIFO (2 to 8 words) using + * CRYP_DataIn() function. + * + * 3. Repeat the following sequence until the complete message has been + * processed: + * + * a) Wait for flag CRYP_FLAG_OFNE occurs (using CRYP_GetFlagStatus() + * function), then read the OUT-FIFO using CRYP_DataOut() function + * (1 block or until the FIFO is empty) + * + * b) Wait for flag CRYP_FLAG_IFNF occurs, (using CRYP_GetFlagStatus() + * function then write the IN FIFO using CRYP_DataIn() function + * (1 block or until the FIFO is full) + * + * 4. At the end of the processing, CRYP_FLAG_BUSY flag will be reset and + * both FIFOs are empty (CRYP_FLAG_IFEM is set and CRYP_FLAG_OFNE is + * reset). You can disable the peripheral using CRYP_Cmd() function. + * + * Interrupts Processing mode + * =========================== + * In this mode, Processing is done when the data are transferred by the + * CPU during interrupts. + * + * 1. Enable the interrupts CRYP_IT_INI and CRYP_IT_OUTI using + * CRYP_ITConfig() function. + * + * 2. Enable the cryptographic processor using CRYP_Cmd() function. + * + * 3. In the CRYP_IT_INI interrupt handler : load the input message into the + * IN FIFO using CRYP_DataIn() function . You can load 2 or 4 words at a + * time, or load data until the IN FIFO is full. When the last word of + * the message has been entered into the IN FIFO, disable the CRYP_IT_INI + * interrupt (using CRYP_ITConfig() function). + * + * 4. In the CRYP_IT_OUTI interrupt handler : read the output message from + * the OUT FIFO using CRYP_DataOut() function. You can read 1 block (2 or + * 4 words) at a time or read data until the FIFO is empty. + * When the last word has been read, INIM=0, BUSY=0 and both FIFOs are + * empty (CRYP_FLAG_IFEM is set and CRYP_FLAG_OFNE is reset). + * You can disable the CRYP_IT_OUTI interrupt (using CRYP_ITConfig() + * function) and you can disable the peripheral using CRYP_Cmd() function. + * + * DMA Processing mode + * ==================== + * In this mode, Processing is done when the DMA is used to transfer the + * data from/to the memory. + * + * 1. Configure the DMA controller to transfer the input data from the + * memory using DMA_Init() function. + * The transfer length is the length of the message. + * As message padding is not managed by the peripheral, the message + * length must be an entire number of blocks. The data are transferred + * in burst mode. The burst length is 4 words in the AES and 2 or 4 + * words in the DES/TDES. The DMA should be configured to set an + * interrupt on transfer completion of the output data to indicate that + * the processing is finished. + * Refer to DMA peripheral driver for more details. + * + * 2. Enable the cryptographic processor using CRYP_Cmd() function. + * Enable the DMA requests CRYP_DMAReq_DataIN and CRYP_DMAReq_DataOUT + * using CRYP_DMACmd() function. + * + * 3. All the transfers and processing are managed by the DMA and the + * cryptographic processor. The DMA transfer complete interrupt indicates + * that the processing is complete. Both FIFOs are normally empty and + * CRYP_FLAG_BUSY flag is reset. + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup CRYP + * @brief CRYP driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define FLAG_MASK ((uint8_t)0x20) +#define MAX_TIMEOUT ((uint16_t)0xFFFF) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup CRYP_Private_Functions + * @{ + */ + +/** @defgroup CRYP_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + This section provides functions allowing to + - Initialize the cryptographic Processor using CRYP_Init() function + - Encrypt or Decrypt + - mode : TDES-ECB, TDES-CBC, + DES-ECB, DES-CBC, + AES-ECB, AES-CBC, AES-CTR, AES-Key + - DataType : 32-bit data, 16-bit data, bit data or bit-string + - Key Size (only in AES modes) + - Configure the Encrypt or Decrypt Key using CRYP_KeyInit() function + - Configure the Initialization Vectors(IV) for CBC and CTR modes using + CRYP_IVInit() function. + - Flushes the IN and OUT FIFOs : using CRYP_FIFOFlush() function. + - Enable or disable the CRYP Processor using CRYP_Cmd() function + + +@endverbatim + * @{ + */ +/** + * @brief Deinitializes the CRYP peripheral registers to their default reset values + * @param None + * @retval None + */ +void CRYP_DeInit(void) +{ + /* Enable CRYP reset state */ + RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_CRYP, ENABLE); + + /* Release CRYP from reset state */ + RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_CRYP, DISABLE); +} + +/** + * @brief Initializes the CRYP peripheral according to the specified parameters + * in the CRYP_InitStruct. + * @param CRYP_InitStruct: pointer to a CRYP_InitTypeDef structure that contains + * the configuration information for the CRYP peripheral. + * @retval None + */ +void CRYP_Init(CRYP_InitTypeDef* CRYP_InitStruct) +{ + /* Check the parameters */ + assert_param(IS_CRYP_ALGOMODE(CRYP_InitStruct->CRYP_AlgoMode)); + assert_param(IS_CRYP_DATATYPE(CRYP_InitStruct->CRYP_DataType)); + assert_param(IS_CRYP_ALGODIR(CRYP_InitStruct->CRYP_AlgoDir)); + + /* Select Algorithm mode*/ + CRYP->CR &= ~CRYP_CR_ALGOMODE; + CRYP->CR |= CRYP_InitStruct->CRYP_AlgoMode; + + /* Select dataType */ + CRYP->CR &= ~CRYP_CR_DATATYPE; + CRYP->CR |= CRYP_InitStruct->CRYP_DataType; + + /* select Key size (used only with AES algorithm) */ + if ((CRYP_InitStruct->CRYP_AlgoMode == CRYP_AlgoMode_AES_ECB) || + (CRYP_InitStruct->CRYP_AlgoMode == CRYP_AlgoMode_AES_CBC) || + (CRYP_InitStruct->CRYP_AlgoMode == CRYP_AlgoMode_AES_CTR) || + (CRYP_InitStruct->CRYP_AlgoMode == CRYP_AlgoMode_AES_Key)) + { + assert_param(IS_CRYP_KEYSIZE(CRYP_InitStruct->CRYP_KeySize)); + CRYP->CR &= ~CRYP_CR_KEYSIZE; + CRYP->CR |= CRYP_InitStruct->CRYP_KeySize; /* Key size and value must be + configured once the key has + been prepared */ + } + + /* Select data Direction */ + CRYP->CR &= ~CRYP_CR_ALGODIR; + CRYP->CR |= CRYP_InitStruct->CRYP_AlgoDir; +} + +/** + * @brief Fills each CRYP_InitStruct member with its default value. + * @param CRYP_InitStruct: pointer to a CRYP_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void CRYP_StructInit(CRYP_InitTypeDef* CRYP_InitStruct) +{ + /* Initialize the CRYP_AlgoDir member */ + CRYP_InitStruct->CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; + + /* initialize the CRYP_AlgoMode member */ + CRYP_InitStruct->CRYP_AlgoMode = CRYP_AlgoMode_TDES_ECB; + + /* initialize the CRYP_DataType member */ + CRYP_InitStruct->CRYP_DataType = CRYP_DataType_32b; + + /* Initialize the CRYP_KeySize member */ + CRYP_InitStruct->CRYP_KeySize = CRYP_KeySize_128b; +} + +/** + * @brief Initializes the CRYP Keys according to the specified parameters in + * the CRYP_KeyInitStruct. + * @param CRYP_KeyInitStruct: pointer to a CRYP_KeyInitTypeDef structure that + * contains the configuration information for the CRYP Keys. + * @retval None + */ +void CRYP_KeyInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct) +{ + /* Key Initialisation */ + CRYP->K0LR = CRYP_KeyInitStruct->CRYP_Key0Left; + CRYP->K0RR = CRYP_KeyInitStruct->CRYP_Key0Right; + CRYP->K1LR = CRYP_KeyInitStruct->CRYP_Key1Left; + CRYP->K1RR = CRYP_KeyInitStruct->CRYP_Key1Right; + CRYP->K2LR = CRYP_KeyInitStruct->CRYP_Key2Left; + CRYP->K2RR = CRYP_KeyInitStruct->CRYP_Key2Right; + CRYP->K3LR = CRYP_KeyInitStruct->CRYP_Key3Left; + CRYP->K3RR = CRYP_KeyInitStruct->CRYP_Key3Right; +} + +/** + * @brief Fills each CRYP_KeyInitStruct member with its default value. + * @param CRYP_KeyInitStruct: pointer to a CRYP_KeyInitTypeDef structure + * which will be initialized. + * @retval None + */ +void CRYP_KeyStructInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct) +{ + CRYP_KeyInitStruct->CRYP_Key0Left = 0; + CRYP_KeyInitStruct->CRYP_Key0Right = 0; + CRYP_KeyInitStruct->CRYP_Key1Left = 0; + CRYP_KeyInitStruct->CRYP_Key1Right = 0; + CRYP_KeyInitStruct->CRYP_Key2Left = 0; + CRYP_KeyInitStruct->CRYP_Key2Right = 0; + CRYP_KeyInitStruct->CRYP_Key3Left = 0; + CRYP_KeyInitStruct->CRYP_Key3Right = 0; +} +/** + * @brief Initializes the CRYP Initialization Vectors(IV) according to the + * specified parameters in the CRYP_IVInitStruct. + * @param CRYP_IVInitStruct: pointer to a CRYP_IVInitTypeDef structure that contains + * the configuration information for the CRYP Initialization Vectors(IV). + * @retval None + */ +void CRYP_IVInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct) +{ + CRYP->IV0LR = CRYP_IVInitStruct->CRYP_IV0Left; + CRYP->IV0RR = CRYP_IVInitStruct->CRYP_IV0Right; + CRYP->IV1LR = CRYP_IVInitStruct->CRYP_IV1Left; + CRYP->IV1RR = CRYP_IVInitStruct->CRYP_IV1Right; +} + +/** + * @brief Fills each CRYP_IVInitStruct member with its default value. + * @param CRYP_IVInitStruct: pointer to a CRYP_IVInitTypeDef Initialization + * Vectors(IV) structure which will be initialized. + * @retval None + */ +void CRYP_IVStructInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct) +{ + CRYP_IVInitStruct->CRYP_IV0Left = 0; + CRYP_IVInitStruct->CRYP_IV0Right = 0; + CRYP_IVInitStruct->CRYP_IV1Left = 0; + CRYP_IVInitStruct->CRYP_IV1Right = 0; +} + +/** + * @brief Flushes the IN and OUT FIFOs (that is read and write pointers of the + * FIFOs are reset) + * @note The FIFOs must be flushed only when BUSY flag is reset. + * @param None + * @retval None + */ +void CRYP_FIFOFlush(void) +{ + /* Reset the read and write pointers of the FIFOs */ + CRYP->CR |= CRYP_CR_FFLUSH; +} + +/** + * @brief Enables or disables the CRYP peripheral. + * @param NewState: new state of the CRYP peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void CRYP_Cmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the Cryptographic processor */ + CRYP->CR |= CRYP_CR_CRYPEN; + } + else + { + /* Disable the Cryptographic processor */ + CRYP->CR &= ~CRYP_CR_CRYPEN; + } +} +/** + * @} + */ + +/** @defgroup CRYP_Group2 CRYP Data processing functions + * @brief CRYP Data processing functions + * +@verbatim + =============================================================================== + CRYP Data processing functions + =============================================================================== + This section provides functions allowing the encryption and decryption + operations: + - Enter data to be treated in the IN FIFO : using CRYP_DataIn() function. + - Get the data result from the OUT FIFO : using CRYP_DataOut() function. + +@endverbatim + * @{ + */ + +/** + * @brief Writes data in the Data Input register (DIN). + * @note After the DIN register has been read once or several times, + * the FIFO must be flushed (using CRYP_FIFOFlush() function). + * @param Data: data to write in Data Input register + * @retval None + */ +void CRYP_DataIn(uint32_t Data) +{ + CRYP->DR = Data; +} + +/** + * @brief Returns the last data entered into the output FIFO. + * @param None + * @retval Last data entered into the output FIFO. + */ +uint32_t CRYP_DataOut(void) +{ + return CRYP->DOUT; +} +/** + * @} + */ + +/** @defgroup CRYP_Group3 Context swapping functions + * @brief Context swapping functions + * +@verbatim + =============================================================================== + Context swapping functions + =============================================================================== + + This section provides functions allowing to save and store CRYP Context + + It is possible to interrupt an encryption/ decryption/ key generation process + to perform another processing with a higher priority, and to complete the + interrupted process later on, when the higher-priority task is complete. To do + so, the context of the interrupted task must be saved from the CRYP registers + to memory, and then be restored from memory to the CRYP registers. + + 1. To save the current context, use CRYP_SaveContext() function + 2. To restore the saved context, use CRYP_RestoreContext() function + + +@endverbatim + * @{ + */ + +/** + * @brief Saves the CRYP peripheral Context. + * @note This function stops DMA transfer before to save the context. After + * restoring the context, you have to enable the DMA again (if the DMA + * was previously used). + * @param CRYP_ContextSave: pointer to a CRYP_Context structure that contains + * the repository for current context. + * @param CRYP_KeyInitStruct: pointer to a CRYP_KeyInitTypeDef structure that + * contains the configuration information for the CRYP Keys. + * @retval None + */ +ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave, + CRYP_KeyInitTypeDef* CRYP_KeyInitStruct) +{ + __IO uint32_t timeout = 0; + uint32_t ckeckmask = 0, bitstatus; + ErrorStatus status = ERROR; + + /* Stop DMA transfers on the IN FIFO by clearing the DIEN bit in the CRYP_DMACR */ + CRYP->DMACR &= ~(uint32_t)CRYP_DMACR_DIEN; + + /* Wait until both the IN and OUT FIFOs are empty + (IFEM=1 and OFNE=0 in the CRYP_SR register) and the + BUSY bit is cleared. */ + + if ((CRYP->CR & (uint32_t)(CRYP_CR_ALGOMODE_TDES_ECB | CRYP_CR_ALGOMODE_TDES_CBC)) != (uint32_t)0 )/* TDES */ + { + ckeckmask = CRYP_SR_IFEM | CRYP_SR_BUSY ; + } + else /* AES or DES */ + { + ckeckmask = CRYP_SR_IFEM | CRYP_SR_BUSY | CRYP_SR_OFNE; + } + + do + { + bitstatus = CRYP->SR & ckeckmask; + timeout++; + } + while ((timeout != MAX_TIMEOUT) && (bitstatus != CRYP_SR_IFEM)); + + if ((CRYP->SR & ckeckmask) != CRYP_SR_IFEM) + { + status = ERROR; + } + else + { + /* Stop DMA transfers on the OUT FIFO by + - writing the DOEN bit to 0 in the CRYP_DMACR register + - and clear the CRYPEN bit. */ + + CRYP->DMACR &= ~(uint32_t)CRYP_DMACR_DOEN; + CRYP->CR &= ~(uint32_t)CRYP_CR_CRYPEN; + + /* Save the current configuration (bits [9:2] in the CRYP_CR register) */ + CRYP_ContextSave->CR_bits9to2 = CRYP->CR & (CRYP_CR_KEYSIZE | + CRYP_CR_DATATYPE | + CRYP_CR_ALGOMODE | + CRYP_CR_ALGODIR); + + /* and, if not in ECB mode, the initialization vectors. */ + CRYP_ContextSave->CRYP_IV0LR = CRYP->IV0LR; + CRYP_ContextSave->CRYP_IV0RR = CRYP->IV0RR; + CRYP_ContextSave->CRYP_IV1LR = CRYP->IV1LR; + CRYP_ContextSave->CRYP_IV1RR = CRYP->IV1RR; + + /* save The key value */ + CRYP_ContextSave->CRYP_K0LR = CRYP_KeyInitStruct->CRYP_Key0Left; + CRYP_ContextSave->CRYP_K0RR = CRYP_KeyInitStruct->CRYP_Key0Right; + CRYP_ContextSave->CRYP_K1LR = CRYP_KeyInitStruct->CRYP_Key1Left; + CRYP_ContextSave->CRYP_K1RR = CRYP_KeyInitStruct->CRYP_Key1Right; + CRYP_ContextSave->CRYP_K2LR = CRYP_KeyInitStruct->CRYP_Key2Left; + CRYP_ContextSave->CRYP_K2RR = CRYP_KeyInitStruct->CRYP_Key2Right; + CRYP_ContextSave->CRYP_K3LR = CRYP_KeyInitStruct->CRYP_Key3Left; + CRYP_ContextSave->CRYP_K3RR = CRYP_KeyInitStruct->CRYP_Key3Right; + + /* When needed, save the DMA status (pointers for IN and OUT messages, + number of remaining bytes, etc.) */ + + status = SUCCESS; + } + + return status; +} + +/** + * @brief Restores the CRYP peripheral Context. + * @note Since teh DMA transfer is stopped in CRYP_SaveContext() function, + * after restoring the context, you have to enable the DMA again (if the + * DMA was previously used). + * @param CRYP_ContextRestore: pointer to a CRYP_Context structure that contains + * the repository for saved context. + * @note The data that were saved during context saving must be rewrited into + * the IN FIFO. + * @retval None + */ +void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore) +{ + + /* Configure the processor with the saved configuration */ + CRYP->CR = CRYP_ContextRestore->CR_bits9to2; + + /* restore The key value */ + CRYP->K0LR = CRYP_ContextRestore->CRYP_K0LR; + CRYP->K0RR = CRYP_ContextRestore->CRYP_K0RR; + CRYP->K1LR = CRYP_ContextRestore->CRYP_K1LR; + CRYP->K1RR = CRYP_ContextRestore->CRYP_K1RR; + CRYP->K2LR = CRYP_ContextRestore->CRYP_K2LR; + CRYP->K2RR = CRYP_ContextRestore->CRYP_K2RR; + CRYP->K3LR = CRYP_ContextRestore->CRYP_K3LR; + CRYP->K3RR = CRYP_ContextRestore->CRYP_K3RR; + + /* and the initialization vectors. */ + CRYP->IV0LR = CRYP_ContextRestore->CRYP_IV0LR; + CRYP->IV0RR = CRYP_ContextRestore->CRYP_IV0RR; + CRYP->IV1LR = CRYP_ContextRestore->CRYP_IV1LR; + CRYP->IV1RR = CRYP_ContextRestore->CRYP_IV1RR; + + /* Enable the cryptographic processor */ + CRYP->CR |= CRYP_CR_CRYPEN; +} +/** + * @} + */ + +/** @defgroup CRYP_Group4 CRYP's DMA interface Configuration function + * @brief CRYP's DMA interface Configuration function + * +@verbatim + =============================================================================== + CRYP's DMA interface Configuration function + =============================================================================== + + This section provides functions allowing to configure the DMA interface for + CRYP data input and output transfer. + + When the DMA mode is enabled (using the CRYP_DMACmd() function), data can be + transferred: + - From memory to the CRYP IN FIFO using the DMA peripheral by enabling + the CRYP_DMAReq_DataIN request. + - From the CRYP OUT FIFO to the memory using the DMA peripheral by enabling + the CRYP_DMAReq_DataOUT request. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the CRYP DMA interface. + * @param CRYP_DMAReq: specifies the CRYP DMA transfer request to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg CRYP_DMAReq_DataOUT: DMA for outgoing(Tx) data transfer + * @arg CRYP_DMAReq_DataIN: DMA for incoming(Rx) data transfer + * @param NewState: new state of the selected CRYP DMA transfer request. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void CRYP_DMACmd(uint8_t CRYP_DMAReq, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CRYP_DMAREQ(CRYP_DMAReq)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected CRYP DMA request */ + CRYP->DMACR |= CRYP_DMAReq; + } + else + { + /* Disable the selected CRYP DMA request */ + CRYP->DMACR &= (uint8_t)~CRYP_DMAReq; + } +} +/** + * @} + */ + +/** @defgroup CRYP_Group5 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + + This section provides functions allowing to configure the CRYP Interrupts and + to get the status and Interrupts pending bits. + + The CRYP provides 2 Interrupts sources and 7 Flags: + + Flags : + ------- + + 1. CRYP_FLAG_IFEM : Set when Input FIFO is empty. + This Flag is cleared only by hardware. + + 2. CRYP_FLAG_IFNF : Set when Input FIFO is not full. + This Flag is cleared only by hardware. + + + 3. CRYP_FLAG_INRIS : Set when Input FIFO Raw interrupt is pending + it gives the raw interrupt state prior to masking + of the input FIFO service interrupt. + This Flag is cleared only by hardware. + + 4. CRYP_FLAG_OFNE : Set when Output FIFO not empty. + This Flag is cleared only by hardware. + + 5. CRYP_FLAG_OFFU : Set when Output FIFO is full. + This Flag is cleared only by hardware. + + 6. CRYP_FLAG_OUTRIS : Set when Output FIFO Raw interrupt is pending + it gives the raw interrupt state prior to masking + of the output FIFO service interrupt. + This Flag is cleared only by hardware. + + 7. CRYP_FLAG_BUSY : Set when the CRYP core is currently processing a + block of data or a key preparation (for AES + decryption). + This Flag is cleared only by hardware. + To clear it, the CRYP core must be disabled and the + last processing has completed. + + Interrupts : + ------------ + + 1. CRYP_IT_INI : The input FIFO service interrupt is asserted when there + are less than 4 words in the input FIFO. + This interrupt is associated to CRYP_FLAG_INRIS flag. + + @note This interrupt is cleared by performing write operations + to the input FIFO until it holds 4 or more words. The + input FIFO service interrupt INMIS is enabled with the + CRYP enable bit. Consequently, when CRYP is disabled, the + INMIS signal is low even if the input FIFO is empty. + + + + 2. CRYP_IT_OUTI : The output FIFO service interrupt is asserted when there + is one or more (32-bit word) data items in the output FIFO. + This interrupt is associated to CRYP_FLAG_OUTRIS flag. + + @note This interrupt is cleared by reading data from the output + FIFO until there is no valid (32-bit) word left (that is, + the interrupt follows the state of the OFNE (output FIFO + not empty) flag). + + + Managing the CRYP controller events : + ------------------------------------ + The user should identify which mode will be used in his application to manage + the CRYP controller events: Polling mode or Interrupt mode. + + 1. In the Polling Mode it is advised to use the following functions: + - CRYP_GetFlagStatus() : to check if flags events occur. + + @note The CRYPT flags do not need to be cleared since they are cleared as + soon as the associated event are reset. + + + 2. In the Interrupt Mode it is advised to use the following functions: + - CRYP_ITConfig() : to enable or disable the interrupt source. + - CRYP_GetITStatus() : to check if Interrupt occurs. + + @note The CRYPT interrupts have no pending bits, the interrupt is cleared as + soon as the associated event is reset. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified CRYP interrupts. + * @param CRYP_IT: specifies the CRYP interrupt source to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg CRYP_IT_INI: Input FIFO interrupt + * @arg CRYP_IT_OUTI: Output FIFO interrupt + * @param NewState: new state of the specified CRYP interrupt. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void CRYP_ITConfig(uint8_t CRYP_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CRYP_CONFIG_IT(CRYP_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected CRYP interrupt */ + CRYP->IMSCR |= CRYP_IT; + } + else + { + /* Disable the selected CRYP interrupt */ + CRYP->IMSCR &= (uint8_t)~CRYP_IT; + } +} + +/** + * @brief Checks whether the specified CRYP interrupt has occurred or not. + * @note This function checks the status of the masked interrupt (i.e the + * interrupt should be previously enabled). + * @param CRYP_IT: specifies the CRYP (masked) interrupt source to check. + * This parameter can be one of the following values: + * @arg CRYP_IT_INI: Input FIFO interrupt + * @arg CRYP_IT_OUTI: Output FIFO interrupt + * @retval The new state of CRYP_IT (SET or RESET). + */ +ITStatus CRYP_GetITStatus(uint8_t CRYP_IT) +{ + ITStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_CRYP_GET_IT(CRYP_IT)); + + /* Check the status of the specified CRYP interrupt */ + if ((CRYP->MISR & CRYP_IT) != (uint8_t)RESET) + { + /* CRYP_IT is set */ + bitstatus = SET; + } + else + { + /* CRYP_IT is reset */ + bitstatus = RESET; + } + /* Return the CRYP_IT status */ + return bitstatus; +} + +/** + * @brief Checks whether the specified CRYP flag is set or not. + * @param CRYP_FLAG: specifies the CRYP flag to check. + * This parameter can be one of the following values: + * @arg CRYP_FLAG_IFEM: Input FIFO Empty flag. + * @arg CRYP_FLAG_IFNF: Input FIFO Not Full flag. + * @arg CRYP_FLAG_OFNE: Output FIFO Not Empty flag. + * @arg CRYP_FLAG_OFFU: Output FIFO Full flag. + * @arg CRYP_FLAG_BUSY: Busy flag. + * @arg CRYP_FLAG_OUTRIS: Output FIFO raw interrupt flag. + * @arg CRYP_FLAG_INRIS: Input FIFO raw interrupt flag. + * @retval The new state of CRYP_FLAG (SET or RESET). + */ +FlagStatus CRYP_GetFlagStatus(uint8_t CRYP_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t tempreg = 0; + + /* Check the parameters */ + assert_param(IS_CRYP_GET_FLAG(CRYP_FLAG)); + + /* check if the FLAG is in RISR register */ + if ((CRYP_FLAG & FLAG_MASK) != 0x00) + { + tempreg = CRYP->RISR; + } + else /* The FLAG is in SR register */ + { + tempreg = CRYP->SR; + } + + + /* Check the status of the specified CRYP flag */ + if ((tempreg & CRYP_FLAG ) != (uint8_t)RESET) + { + /* CRYP_FLAG is set */ + bitstatus = SET; + } + else + { + /* CRYP_FLAG is reset */ + bitstatus = RESET; + } + + /* Return the CRYP_FLAG status */ + return bitstatus; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_aes.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_aes.c new file mode 100644 index 000000000..25520e8f8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_aes.c @@ -0,0 +1,644 @@ +/** + ****************************************************************************** + * @file stm32f2xx_cryp_aes.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides high level functions to encrypt and decrypt an + * input message using AES in ECB/CBC/CTR modes. + * It uses the stm32f2xx_cryp.c/.h drivers to access the STM32F2xx CRYP + * peripheral. + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable The CRYP controller clock using + * RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); function. + * + * 2. Encrypt and decrypt using AES in ECB Mode using CRYP_AES_ECB() + * function. + * + * 3. Encrypt and decrypt using AES in CBC Mode using CRYP_AES_CBC() + * function. + * + * 4. Encrypt and decrypt using AES in CTR Mode using CRYP_AES_CTR() + * function. + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_cryp.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup CRYP + * @brief CRYP driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define AESBUSY_TIMEOUT ((uint32_t) 0x00010000) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup CRYP_Private_Functions + * @{ + */ + +/** @defgroup CRYP_Group6 High Level AES functions + * @brief High Level AES functions + * +@verbatim + =============================================================================== + High Level AES functions + =============================================================================== + + +@endverbatim + * @{ + */ + +/** + * @brief Encrypt and decrypt using AES in ECB Mode + * @param Mode: encryption or decryption Mode. + * This parameter can be one of the following values: + * @arg MODE_ENCRYPT: Encryption + * @arg MODE_DECRYPT: Decryption + * @param Key: Key used for AES algorithm. + * @param Keysize: length of the Key, must be a 128, 192 or 256. + * @param Input: pointer to the Input buffer. + * @param Ilength: length of the Input buffer, must be a multiple of 16. + * @param Output: pointer to the returned buffer. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: Operation done + * - ERROR: Operation failed + */ +ErrorStatus CRYP_AES_ECB(uint8_t Mode, uint8_t* Key, uint16_t Keysize, + uint8_t* Input, uint32_t Ilength, uint8_t* Output) +{ + CRYP_InitTypeDef AES_CRYP_InitStructure; + CRYP_KeyInitTypeDef AES_CRYP_KeyInitStructure; + __IO uint32_t counter = 0; + uint32_t busystatus = 0; + ErrorStatus status = SUCCESS; + uint32_t keyaddr = (uint32_t)Key; + uint32_t inputaddr = (uint32_t)Input; + uint32_t outputaddr = (uint32_t)Output; + uint32_t i = 0; + + /* Crypto structures initialisation*/ + CRYP_KeyStructInit(&AES_CRYP_KeyInitStructure); + + switch(Keysize) + { + case 128: + AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_128b; + AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); + break; + case 192: + AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_192b; + AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); + break; + case 256: + AES_CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_256b; + AES_CRYP_KeyInitStructure.CRYP_Key0Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key0Right= __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + AES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); + break; + default: + break; + } + + /*------------------ AES Decryption ------------------*/ + if(Mode == MODE_DECRYPT) /* AES decryption */ + { + /* Flush IN/OUT FIFOs */ + CRYP_FIFOFlush(); + + /* Crypto Init for Key preparation for decryption process */ + AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; + AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_Key; + AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_32b; + CRYP_Init(&AES_CRYP_InitStructure); + + /* Key Initialisation */ + CRYP_KeyInit(&AES_CRYP_KeyInitStructure); + + /* Enable Crypto processor */ + CRYP_Cmd(ENABLE); + + /* wait until the Busy flag is RESET */ + do + { + busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY); + counter++; + }while ((counter != AESBUSY_TIMEOUT) && (busystatus != RESET)); + + if (busystatus != RESET) + { + status = ERROR; + } + else + { + /* Crypto Init for decryption process */ + AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; + } + } + /*------------------ AES Encryption ------------------*/ + else /* AES encryption */ + { + + CRYP_KeyInit(&AES_CRYP_KeyInitStructure); + + /* Crypto Init for Encryption process */ + AES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; + } + + AES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_ECB; + AES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; + CRYP_Init(&AES_CRYP_InitStructure); + + /* Flush IN/OUT FIFOs */ + CRYP_FIFOFlush(); + + /* Enable Crypto processor */ + CRYP_Cmd(ENABLE); + + for(i=0; ((i
© COPYRIGHT 2012 STMicroelectronics
+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_cryp.h" + + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup CRYP + * @brief CRYP driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define DESBUSY_TIMEOUT ((uint32_t) 0x00010000) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + + +/** @defgroup CRYP_Private_Functions + * @{ + */ + +/** @defgroup CRYP_Group8 High Level DES functions + * @brief High Level DES functions + * +@verbatim + =============================================================================== + High Level DES functions + =============================================================================== +@endverbatim + * @{ + */ + +/** + * @brief Encrypt and decrypt using DES in ECB Mode + * @param Mode: encryption or decryption Mode. + * This parameter can be one of the following values: + * @arg MODE_ENCRYPT: Encryption + * @arg MODE_DECRYPT: Decryption + * @param Key: Key used for DES algorithm. + * @param Ilength: length of the Input buffer, must be a multiple of 8. + * @param Input: pointer to the Input buffer. + * @param Output: pointer to the returned buffer. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: Operation done + * - ERROR: Operation failed + */ +ErrorStatus CRYP_DES_ECB(uint8_t Mode, uint8_t Key[8], uint8_t *Input, + uint32_t Ilength, uint8_t *Output) +{ + CRYP_InitTypeDef DES_CRYP_InitStructure; + CRYP_KeyInitTypeDef DES_CRYP_KeyInitStructure; + __IO uint32_t counter = 0; + uint32_t busystatus = 0; + ErrorStatus status = SUCCESS; + uint32_t keyaddr = (uint32_t)Key; + uint32_t inputaddr = (uint32_t)Input; + uint32_t outputaddr = (uint32_t)Output; + uint32_t i = 0; + + /* Crypto structures initialisation*/ + CRYP_KeyStructInit(&DES_CRYP_KeyInitStructure); + + /* Crypto Init for Encryption process */ + if( Mode == MODE_ENCRYPT ) /* DES encryption */ + { + DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; + } + else/* if( Mode == MODE_DECRYPT )*/ /* DES decryption */ + { + DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; + } + + DES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_DES_ECB; + DES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; + CRYP_Init(&DES_CRYP_InitStructure); + + /* Key Initialisation */ + DES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + DES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); + CRYP_KeyInit(& DES_CRYP_KeyInitStructure); + + /* Flush IN/OUT FIFO */ + CRYP_FIFOFlush(); + + /* Enable Crypto processor */ + CRYP_Cmd(ENABLE); + + for(i=0; ((i
© COPYRIGHT 2012 STMicroelectronics
+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_cryp.h" + + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup CRYP + * @brief CRYP driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define TDESBUSY_TIMEOUT ((uint32_t) 0x00010000) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + + +/** @defgroup CRYP_Private_Functions + * @{ + */ + +/** @defgroup CRYP_Group7 High Level TDES functions + * @brief High Level TDES functions + * +@verbatim + =============================================================================== + High Level TDES functions + =============================================================================== + + +@endverbatim + * @{ + */ + +/** + * @brief Encrypt and decrypt using TDES in ECB Mode + * @param Mode: encryption or decryption Mode. + * This parameter can be one of the following values: + * @arg MODE_ENCRYPT: Encryption + * @arg MODE_DECRYPT: Decryption + * @param Key: Key used for TDES algorithm. + * @param Ilength: length of the Input buffer, must be a multiple of 8. + * @param Input: pointer to the Input buffer. + * @param Output: pointer to the returned buffer. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: Operation done + * - ERROR: Operation failed + */ +ErrorStatus CRYP_TDES_ECB(uint8_t Mode, uint8_t Key[24], uint8_t *Input, + uint32_t Ilength, uint8_t *Output) +{ + CRYP_InitTypeDef TDES_CRYP_InitStructure; + CRYP_KeyInitTypeDef TDES_CRYP_KeyInitStructure; + __IO uint32_t counter = 0; + uint32_t busystatus = 0; + ErrorStatus status = SUCCESS; + uint32_t keyaddr = (uint32_t)Key; + uint32_t inputaddr = (uint32_t)Input; + uint32_t outputaddr = (uint32_t)Output; + uint32_t i = 0; + + /* Crypto structures initialisation*/ + CRYP_KeyStructInit(&TDES_CRYP_KeyInitStructure); + + /* Crypto Init for Encryption process */ + if(Mode == MODE_ENCRYPT) /* TDES encryption */ + { + TDES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; + } + else /*if(Mode == MODE_DECRYPT)*/ /* TDES decryption */ + { + TDES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; + } + + TDES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_TDES_ECB; + TDES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b; + CRYP_Init(&TDES_CRYP_InitStructure); + + /* Key Initialisation */ + TDES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + TDES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + TDES_CRYP_KeyInitStructure.CRYP_Key2Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + TDES_CRYP_KeyInitStructure.CRYP_Key2Right= __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + TDES_CRYP_KeyInitStructure.CRYP_Key3Left = __REV(*(uint32_t*)(keyaddr)); + keyaddr+=4; + TDES_CRYP_KeyInitStructure.CRYP_Key3Right= __REV(*(uint32_t*)(keyaddr)); + CRYP_KeyInit(& TDES_CRYP_KeyInitStructure); + + /* Flush IN/OUT FIFO */ + CRYP_FIFOFlush(); + + /* Enable Crypto processor */ + CRYP_Cmd(ENABLE); + + for(i=0; ((i
© COPYRIGHT 2012 STMicroelectronics
+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_dac.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup DAC + * @brief DAC driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* CR register Mask */ +#define CR_CLEAR_MASK ((uint32_t)0x00000FFE) + +/* DAC Dual Channels SWTRIG masks */ +#define DUAL_SWTRIG_SET ((uint32_t)0x00000003) +#define DUAL_SWTRIG_RESET ((uint32_t)0xFFFFFFFC) + +/* DHR registers offsets */ +#define DHR12R1_OFFSET ((uint32_t)0x00000008) +#define DHR12R2_OFFSET ((uint32_t)0x00000014) +#define DHR12RD_OFFSET ((uint32_t)0x00000020) + +/* DOR register offset */ +#define DOR_OFFSET ((uint32_t)0x0000002C) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup DAC_Private_Functions + * @{ + */ + +/** @defgroup DAC_Group1 DAC channels configuration + * @brief DAC channels configuration: trigger, output buffer, data format + * +@verbatim + =============================================================================== + DAC channels configuration: trigger, output buffer, data format + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the DAC peripheral registers to their default reset values. + * @param None + * @retval None + */ +void DAC_DeInit(void) +{ + /* Enable DAC reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, ENABLE); + /* Release DAC from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, DISABLE); +} + +/** + * @brief Initializes the DAC peripheral according to the specified parameters + * in the DAC_InitStruct. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_InitStruct: pointer to a DAC_InitTypeDef structure that contains + * the configuration information for the specified DAC channel. + * @retval None + */ +void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct) +{ + uint32_t tmpreg1 = 0, tmpreg2 = 0; + + /* Check the DAC parameters */ + assert_param(IS_DAC_TRIGGER(DAC_InitStruct->DAC_Trigger)); + assert_param(IS_DAC_GENERATE_WAVE(DAC_InitStruct->DAC_WaveGeneration)); + assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude)); + assert_param(IS_DAC_OUTPUT_BUFFER_STATE(DAC_InitStruct->DAC_OutputBuffer)); + +/*---------------------------- DAC CR Configuration --------------------------*/ + /* Get the DAC CR value */ + tmpreg1 = DAC->CR; + /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */ + tmpreg1 &= ~(CR_CLEAR_MASK << DAC_Channel); + /* Configure for the selected DAC channel: buffer output, trigger, + wave generation, mask/amplitude for wave generation */ + /* Set TSELx and TENx bits according to DAC_Trigger value */ + /* Set WAVEx bits according to DAC_WaveGeneration value */ + /* Set MAMPx bits according to DAC_LFSRUnmask_TriangleAmplitude value */ + /* Set BOFFx bit according to DAC_OutputBuffer value */ + tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration | + DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | \ + DAC_InitStruct->DAC_OutputBuffer); + /* Calculate CR register value depending on DAC_Channel */ + tmpreg1 |= tmpreg2 << DAC_Channel; + /* Write to DAC CR */ + DAC->CR = tmpreg1; +} + +/** + * @brief Fills each DAC_InitStruct member with its default value. + * @param DAC_InitStruct: pointer to a DAC_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct) +{ +/*--------------- Reset DAC init structure parameters values -----------------*/ + /* Initialize the DAC_Trigger member */ + DAC_InitStruct->DAC_Trigger = DAC_Trigger_None; + /* Initialize the DAC_WaveGeneration member */ + DAC_InitStruct->DAC_WaveGeneration = DAC_WaveGeneration_None; + /* Initialize the DAC_LFSRUnmask_TriangleAmplitude member */ + DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; + /* Initialize the DAC_OutputBuffer member */ + DAC_InitStruct->DAC_OutputBuffer = DAC_OutputBuffer_Enable; +} + +/** + * @brief Enables or disables the specified DAC channel. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param NewState: new state of the DAC channel. + * This parameter can be: ENABLE or DISABLE. + * @note When the DAC channel is enabled the trigger source can no more be modified. + * @retval None + */ +void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected DAC channel */ + DAC->CR |= (DAC_CR_EN1 << DAC_Channel); + } + else + { + /* Disable the selected DAC channel */ + DAC->CR &= (~(DAC_CR_EN1 << DAC_Channel)); + } +} + +/** + * @brief Enables or disables the selected DAC channel software trigger. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param NewState: new state of the selected DAC channel software trigger. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable software trigger for the selected DAC channel */ + DAC->SWTRIGR |= (uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4); + } + else + { + /* Disable software trigger for the selected DAC channel */ + DAC->SWTRIGR &= ~((uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4)); + } +} + +/** + * @brief Enables or disables simultaneously the two DAC channels software triggers. + * @param NewState: new state of the DAC channels software triggers. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_DualSoftwareTriggerCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable software trigger for both DAC channels */ + DAC->SWTRIGR |= DUAL_SWTRIG_SET; + } + else + { + /* Disable software trigger for both DAC channels */ + DAC->SWTRIGR &= DUAL_SWTRIG_RESET; + } +} + +/** + * @brief Enables or disables the selected DAC channel wave generation. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_Wave: specifies the wave type to enable or disable. + * This parameter can be one of the following values: + * @arg DAC_Wave_Noise: noise wave generation + * @arg DAC_Wave_Triangle: triangle wave generation + * @param NewState: new state of the selected DAC channel wave generation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_WAVE(DAC_Wave)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected wave generation for the selected DAC channel */ + DAC->CR |= DAC_Wave << DAC_Channel; + } + else + { + /* Disable the selected wave generation for the selected DAC channel */ + DAC->CR &= ~(DAC_Wave << DAC_Channel); + } +} + +/** + * @brief Set the specified data holding register value for DAC channel1. + * @param DAC_Align: Specifies the data alignment for DAC channel1. + * This parameter can be one of the following values: + * @arg DAC_Align_8b_R: 8bit right data alignment selected + * @arg DAC_Align_12b_L: 12bit left data alignment selected + * @arg DAC_Align_12b_R: 12bit right data alignment selected + * @param Data: Data to be loaded in the selected data holding register. + * @retval None + */ +void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_DAC_ALIGN(DAC_Align)); + assert_param(IS_DAC_DATA(Data)); + + tmp = (uint32_t)DAC_BASE; + tmp += DHR12R1_OFFSET + DAC_Align; + + /* Set the DAC channel1 selected data holding register */ + *(__IO uint32_t *) tmp = Data; +} + +/** + * @brief Set the specified data holding register value for DAC channel2. + * @param DAC_Align: Specifies the data alignment for DAC channel2. + * This parameter can be one of the following values: + * @arg DAC_Align_8b_R: 8bit right data alignment selected + * @arg DAC_Align_12b_L: 12bit left data alignment selected + * @arg DAC_Align_12b_R: 12bit right data alignment selected + * @param Data: Data to be loaded in the selected data holding register. + * @retval None + */ +void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_DAC_ALIGN(DAC_Align)); + assert_param(IS_DAC_DATA(Data)); + + tmp = (uint32_t)DAC_BASE; + tmp += DHR12R2_OFFSET + DAC_Align; + + /* Set the DAC channel2 selected data holding register */ + *(__IO uint32_t *)tmp = Data; +} + +/** + * @brief Set the specified data holding register value for dual channel DAC. + * @param DAC_Align: Specifies the data alignment for dual channel DAC. + * This parameter can be one of the following values: + * @arg DAC_Align_8b_R: 8bit right data alignment selected + * @arg DAC_Align_12b_L: 12bit left data alignment selected + * @arg DAC_Align_12b_R: 12bit right data alignment selected + * @param Data2: Data for DAC Channel2 to be loaded in the selected data holding register. + * @param Data1: Data for DAC Channel1 to be loaded in the selected data holding register. + * @note In dual mode, a unique register access is required to write in both + * DAC channels at the same time. + * @retval None + */ +void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1) +{ + uint32_t data = 0, tmp = 0; + + /* Check the parameters */ + assert_param(IS_DAC_ALIGN(DAC_Align)); + assert_param(IS_DAC_DATA(Data1)); + assert_param(IS_DAC_DATA(Data2)); + + /* Calculate and set dual DAC data holding register value */ + if (DAC_Align == DAC_Align_8b_R) + { + data = ((uint32_t)Data2 << 8) | Data1; + } + else + { + data = ((uint32_t)Data2 << 16) | Data1; + } + + tmp = (uint32_t)DAC_BASE; + tmp += DHR12RD_OFFSET + DAC_Align; + + /* Set the dual DAC selected data holding register */ + *(__IO uint32_t *)tmp = data; +} + +/** + * @brief Returns the last data output value of the selected DAC channel. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @retval The selected DAC channel data output value. + */ +uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + + tmp = (uint32_t) DAC_BASE ; + tmp += DOR_OFFSET + ((uint32_t)DAC_Channel >> 2); + + /* Returns the DAC channel data output register value */ + return (uint16_t) (*(__IO uint32_t*) tmp); +} +/** + * @} + */ + +/** @defgroup DAC_Group2 DMA management functions + * @brief DMA management functions + * +@verbatim + =============================================================================== + DMA management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified DAC channel DMA request. + * @note When enabled DMA1 is generated when an external trigger (EXTI Line9, + * TIM2, TIM4, TIM5, TIM6, TIM7 or TIM8 but not a software trigger) occurs. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param NewState: new state of the selected DAC channel DMA request. + * This parameter can be: ENABLE or DISABLE. + * @note The DAC channel1 is mapped on DMA1 Stream 5 channel7 which must be + * already configured. + * @note The DAC channel2 is mapped on DMA1 Stream 6 channel7 which must be + * already configured. + * @retval None + */ +void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected DAC channel DMA request */ + DAC->CR |= (DAC_CR_DMAEN1 << DAC_Channel); + } + else + { + /* Disable the selected DAC channel DMA request */ + DAC->CR &= (~(DAC_CR_DMAEN1 << DAC_Channel)); + } +} +/** + * @} + */ + +/** @defgroup DAC_Group3 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified DAC interrupts. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_IT: specifies the DAC interrupt sources to be enabled or disabled. + * This parameter can be the following values: + * @arg DAC_IT_DMAUDR: DMA underrun interrupt mask + * @note The DMA underrun occurs when a second external trigger arrives before the + * acknowledgement for the first external trigger is received (first request). + * @param NewState: new state of the specified DAC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_DAC_IT(DAC_IT)); + + if (NewState != DISABLE) + { + /* Enable the selected DAC interrupts */ + DAC->CR |= (DAC_IT << DAC_Channel); + } + else + { + /* Disable the selected DAC interrupts */ + DAC->CR &= (~(uint32_t)(DAC_IT << DAC_Channel)); + } +} + +/** + * @brief Checks whether the specified DAC flag is set or not. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_FLAG: specifies the flag to check. + * This parameter can be only of the following value: + * @arg DAC_FLAG_DMAUDR: DMA underrun flag + * @note The DMA underrun occurs when a second external trigger arrives before the + * acknowledgement for the first external trigger is received (first request). + * @retval The new state of DAC_FLAG (SET or RESET). + */ +FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_FLAG(DAC_FLAG)); + + /* Check the status of the specified DAC flag */ + if ((DAC->SR & (DAC_FLAG << DAC_Channel)) != (uint8_t)RESET) + { + /* DAC_FLAG is set */ + bitstatus = SET; + } + else + { + /* DAC_FLAG is reset */ + bitstatus = RESET; + } + /* Return the DAC_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the DAC channel's pending flags. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_FLAG: specifies the flag to clear. + * This parameter can be of the following value: + * @arg DAC_FLAG_DMAUDR: DMA underrun flag + * @note The DMA underrun occurs when a second external trigger arrives before the + * acknowledgement for the first external trigger is received (first request). + * @retval None + */ +void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_FLAG(DAC_FLAG)); + + /* Clear the selected DAC flags */ + DAC->SR = (DAC_FLAG << DAC_Channel); +} + +/** + * @brief Checks whether the specified DAC interrupt has occurred or not. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_IT: specifies the DAC interrupt source to check. + * This parameter can be the following values: + * @arg DAC_IT_DMAUDR: DMA underrun interrupt mask + * @note The DMA underrun occurs when a second external trigger arrives before the + * acknowledgement for the first external trigger is received (first request). + * @retval The new state of DAC_IT (SET or RESET). + */ +ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT) +{ + ITStatus bitstatus = RESET; + uint32_t enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_IT(DAC_IT)); + + /* Get the DAC_IT enable bit status */ + enablestatus = (DAC->CR & (DAC_IT << DAC_Channel)) ; + + /* Check the status of the specified DAC interrupt */ + if (((DAC->SR & (DAC_IT << DAC_Channel)) != (uint32_t)RESET) && enablestatus) + { + /* DAC_IT is set */ + bitstatus = SET; + } + else + { + /* DAC_IT is reset */ + bitstatus = RESET; + } + /* Return the DAC_IT status */ + return bitstatus; +} + +/** + * @brief Clears the DAC channel's interrupt pending bits. + * @param DAC_Channel: The selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_IT: specifies the DAC interrupt pending bit to clear. + * This parameter can be the following values: + * @arg DAC_IT_DMAUDR: DMA underrun interrupt mask + * @note The DMA underrun occurs when a second external trigger arrives before the + * acknowledgement for the first external trigger is received (first request). + * @retval None + */ +void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_IT(DAC_IT)); + + /* Clear the selected DAC interrupt pending bits */ + DAC->SR = (DAC_IT << DAC_Channel); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dbgmcu.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dbgmcu.c new file mode 100644 index 000000000..08000ceaf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dbgmcu.c @@ -0,0 +1,180 @@ +/** + ****************************************************************************** + * @file stm32f2xx_dbgmcu.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides all the DBGMCU firmware functions. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_dbgmcu.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup DBGMCU + * @brief DBGMCU driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define IDCODE_DEVID_MASK ((uint32_t)0x00000FFF) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup DBGMCU_Private_Functions + * @{ + */ + +/** + * @brief Returns the device revision identifier. + * @param None + * @retval Device revision identifier + */ +uint32_t DBGMCU_GetREVID(void) +{ + return(DBGMCU->IDCODE >> 16); +} + +/** + * @brief Returns the device identifier. + * @param None + * @retval Device identifier + */ +uint32_t DBGMCU_GetDEVID(void) +{ + return(DBGMCU->IDCODE & IDCODE_DEVID_MASK); +} + +/** + * @brief Configures low power mode behavior when the MCU is in Debug mode. + * @param DBGMCU_Periph: specifies the low power mode. + * This parameter can be any combination of the following values: + * @arg DBGMCU_SLEEP: Keep debugger connection during SLEEP mode + * @arg DBGMCU_STOP: Keep debugger connection during STOP mode + * @arg DBGMCU_STANDBY: Keep debugger connection during STANDBY mode + * @param NewState: new state of the specified low power mode in Debug mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DBGMCU_PERIPH(DBGMCU_Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + DBGMCU->CR |= DBGMCU_Periph; + } + else + { + DBGMCU->CR &= ~DBGMCU_Periph; + } +} + +/** + * @brief Configures APB1 peripheral behavior when the MCU is in Debug mode. + * @param DBGMCU_Periph: specifies the APB1 peripheral. + * This parameter can be any combination of the following values: + * @arg DBGMCU_TIM2_STOP: TIM2 counter stopped when Core is halted + * @arg DBGMCU_TIM3_STOP: TIM3 counter stopped when Core is halted + * @arg DBGMCU_TIM4_STOP: TIM4 counter stopped when Core is halted + * @arg DBGMCU_TIM5_STOP: TIM5 counter stopped when Core is halted + * @arg DBGMCU_TIM6_STOP: TIM6 counter stopped when Core is halted + * @arg DBGMCU_TIM7_STOP: TIM7 counter stopped when Core is halted + * @arg DBGMCU_TIM12_STOP: TIM12 counter stopped when Core is halted + * @arg DBGMCU_TIM13_STOP: TIM13 counter stopped when Core is halted + * @arg DBGMCU_TIM14_STOP: TIM14 counter stopped when Core is halted + * @arg DBGMCU_RTC_STOP: RTC Wakeup counter stopped when Core is halted. + * @arg DBGMCU_WWDG_STOP: Debug WWDG stopped when Core is halted + * @arg DBGMCU_IWDG_STOP: Debug IWDG stopped when Core is halted + * @arg DBGMCU_I2C1_SMBUS_TIMEOUT: I2C1 SMBUS timeout mode stopped when Core is halted + * @arg DBGMCU_I2C2_SMBUS_TIMEOUT: I2C2 SMBUS timeout mode stopped when Core is halted + * @arg DBGMCU_I2C3_SMBUS_TIMEOUT: I2C3 SMBUS timeout mode stopped when Core is halted + * @arg DBGMCU_CAN2_STOP: Debug CAN1 stopped when Core is halted + * @arg DBGMCU_CAN1_STOP: Debug CAN2 stopped when Core is halted + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DBGMCU_APB1PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DBGMCU_APB1PERIPH(DBGMCU_Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + DBGMCU->APB1FZ |= DBGMCU_Periph; + } + else + { + DBGMCU->APB1FZ &= ~DBGMCU_Periph; + } +} + +/** + * @brief Configures APB2 peripheral behavior when the MCU is in Debug mode. + * @param DBGMCU_Periph: specifies the APB2 peripheral. + * This parameter can be any combination of the following values: + * @arg DBGMCU_TIM1_STOP: TIM1 counter stopped when Core is halted + * @arg DBGMCU_TIM8_STOP: TIM8 counter stopped when Core is halted + * @arg DBGMCU_TIM9_STOP: TIM9 counter stopped when Core is halted + * @arg DBGMCU_TIM10_STOP: TIM10 counter stopped when Core is halted + * @arg DBGMCU_TIM11_STOP: TIM11 counter stopped when Core is halted + * @param NewState: new state of the specified peripheral in Debug mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DBGMCU_APB2PeriphConfig(uint32_t DBGMCU_Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DBGMCU_APB2PERIPH(DBGMCU_Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + DBGMCU->APB2FZ |= DBGMCU_Periph; + } + else + { + DBGMCU->APB2FZ &= ~DBGMCU_Periph; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dcmi.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dcmi.c new file mode 100644 index 000000000..09685a624 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dcmi.c @@ -0,0 +1,540 @@ +/** + ****************************************************************************** + * @file stm32f2xx_dcmi.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the DCMI peripheral: + * - Initialization and Configuration + * - Image capture functions + * - Interrupts and flags management + * + * @verbatim + * + * + * =================================================================== + * How to use this driver + * =================================================================== + * + * The sequence below describes how to use this driver to capture image + * from a camera module connected to the DCMI Interface. + * This sequence does not take into account the configuration of the + * camera module, which should be made before to configure and enable + * the DCMI to capture images. + * + * 1. Enable the clock for the DCMI and associated GPIOs using the following functions: + * RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI, ENABLE); + * RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); + * + * 2. DCMI pins configuration + * - Connect the involved DCMI pins to AF13 using the following function + * GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_DCMI); + * - Configure these DCMI pins in alternate function mode by calling the function + * GPIO_Init(); + * + * 3. Declare a DCMI_InitTypeDef structure, for example: + * DCMI_InitTypeDef DCMI_InitStructure; + * and fill the DCMI_InitStructure variable with the allowed values + * of the structure member. + * + * 4. Initialize the DCMI interface by calling the function + * DCMI_Init(&DCMI_InitStructure); + * + * 5. Configure the DMA2_Stream1 channel1 to transfer Data from DCMI DR + * register to the destination memory buffer. + * + * 6. Enable DCMI interface using the function + * DCMI_Cmd(ENABLE); + * + * 7. Start the image capture using the function + * DCMI_CaptureCmd(ENABLE); + * + * 8. At this stage the DCMI interface waits for the first start of frame, + * then a DMA request is generated continuously/once (depending on the + * mode used, Continuous/Snapshot) to transfer the received data into + * the destination memory. + * + * @note If you need to capture only a rectangular window from the received + * image, you have to use the DCMI_CROPConfig() function to configure + * the coordinates and size of the window to be captured, then enable + * the Crop feature using DCMI_CROPCmd(ENABLE); + * In this case, the Crop configuration should be made before to enable + * and start the DCMI interface. + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup DCMI + * @brief DCMI driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup DCMI_Private_Functions + * @{ + */ + +/** @defgroup DCMI_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the DCMI registers to their default reset values. + * @param None + * @retval None + */ +void DCMI_DeInit(void) +{ + DCMI->CR = 0x0; + DCMI->IER = 0x0; + DCMI->ICR = 0x1F; + DCMI->ESCR = 0x0; + DCMI->ESUR = 0x0; + DCMI->CWSTRTR = 0x0; + DCMI->CWSIZER = 0x0; +} + +/** + * @brief Initializes the DCMI according to the specified parameters in the DCMI_InitStruct. + * @param DCMI_InitStruct: pointer to a DCMI_InitTypeDef structure that contains + * the configuration information for the DCMI. + * @retval None + */ +void DCMI_Init(DCMI_InitTypeDef* DCMI_InitStruct) +{ + uint32_t temp = 0x0; + + /* Check the parameters */ + assert_param(IS_DCMI_CAPTURE_MODE(DCMI_InitStruct->DCMI_CaptureMode)); + assert_param(IS_DCMI_SYNCHRO(DCMI_InitStruct->DCMI_SynchroMode)); + assert_param(IS_DCMI_PCKPOLARITY(DCMI_InitStruct->DCMI_PCKPolarity)); + assert_param(IS_DCMI_VSPOLARITY(DCMI_InitStruct->DCMI_VSPolarity)); + assert_param(IS_DCMI_HSPOLARITY(DCMI_InitStruct->DCMI_HSPolarity)); + assert_param(IS_DCMI_CAPTURE_RATE(DCMI_InitStruct->DCMI_CaptureRate)); + assert_param(IS_DCMI_EXTENDED_DATA(DCMI_InitStruct->DCMI_ExtendedDataMode)); + + /* The DCMI configuration registers should be programmed correctly before + enabling the CR_ENABLE Bit and the CR_CAPTURE Bit */ + DCMI->CR &= ~(DCMI_CR_ENABLE | DCMI_CR_CAPTURE); + + /* Reset the old DCMI configuration */ + temp = DCMI->CR; + + temp &= ~((uint32_t)DCMI_CR_CM | DCMI_CR_ESS | DCMI_CR_PCKPOL | + DCMI_CR_HSPOL | DCMI_CR_VSPOL | DCMI_CR_FCRC_0 | + DCMI_CR_FCRC_1 | DCMI_CR_EDM_0 | DCMI_CR_EDM_1); + + /* Sets the new configuration of the DCMI peripheral */ + temp |= ((uint32_t)DCMI_InitStruct->DCMI_CaptureMode | + DCMI_InitStruct->DCMI_SynchroMode | + DCMI_InitStruct->DCMI_PCKPolarity | + DCMI_InitStruct->DCMI_VSPolarity | + DCMI_InitStruct->DCMI_HSPolarity | + DCMI_InitStruct->DCMI_CaptureRate | + DCMI_InitStruct->DCMI_ExtendedDataMode); + + DCMI->CR = temp; +} + +/** + * @brief Fills each DCMI_InitStruct member with its default value. + * @param DCMI_InitStruct : pointer to a DCMI_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void DCMI_StructInit(DCMI_InitTypeDef* DCMI_InitStruct) +{ + /* Set the default configuration */ + DCMI_InitStruct->DCMI_CaptureMode = DCMI_CaptureMode_Continuous; + DCMI_InitStruct->DCMI_SynchroMode = DCMI_SynchroMode_Hardware; + DCMI_InitStruct->DCMI_PCKPolarity = DCMI_PCKPolarity_Falling; + DCMI_InitStruct->DCMI_VSPolarity = DCMI_VSPolarity_Low; + DCMI_InitStruct->DCMI_HSPolarity = DCMI_HSPolarity_Low; + DCMI_InitStruct->DCMI_CaptureRate = DCMI_CaptureRate_All_Frame; + DCMI_InitStruct->DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b; +} + +/** + * @brief Initializes the DCMI peripheral CROP mode according to the specified + * parameters in the DCMI_CROPInitStruct. + * @note This function should be called before to enable and start the DCMI interface. + * @param DCMI_CROPInitStruct: pointer to a DCMI_CROPInitTypeDef structure that + * contains the configuration information for the DCMI peripheral CROP mode. + * @retval None + */ +void DCMI_CROPConfig(DCMI_CROPInitTypeDef* DCMI_CROPInitStruct) +{ + /* Sets the CROP window coordinates */ + DCMI->CWSTRTR = (uint32_t)((uint32_t)DCMI_CROPInitStruct->DCMI_HorizontalOffsetCount | + ((uint32_t)DCMI_CROPInitStruct->DCMI_VerticalStartLine << 16)); + + /* Sets the CROP window size */ + DCMI->CWSIZER = (uint32_t)(DCMI_CROPInitStruct->DCMI_CaptureCount | + ((uint32_t)DCMI_CROPInitStruct->DCMI_VerticalLineCount << 16)); +} + +/** + * @brief Enables or disables the DCMI Crop feature. + * @note This function should be called before to enable and start the DCMI interface. + * @param NewState: new state of the DCMI Crop feature. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DCMI_CROPCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the DCMI Crop feature */ + DCMI->CR |= (uint32_t)DCMI_CR_CROP; + } + else + { + /* Disable the DCMI Crop feature */ + DCMI->CR &= ~(uint32_t)DCMI_CR_CROP; + } +} + +/** + * @brief Sets the embedded synchronization codes + * @param DCMI_CodesInitTypeDef: pointer to a DCMI_CodesInitTypeDef structure that + * contains the embedded synchronization codes for the DCMI peripheral. + * @retval None + */ +void DCMI_SetEmbeddedSynchroCodes(DCMI_CodesInitTypeDef* DCMI_CodesInitStruct) +{ + DCMI->ESCR = (uint32_t)(DCMI_CodesInitStruct->DCMI_FrameStartCode | + ((uint32_t)DCMI_CodesInitStruct->DCMI_LineStartCode << 8)| + ((uint32_t)DCMI_CodesInitStruct->DCMI_LineEndCode << 16)| + ((uint32_t)DCMI_CodesInitStruct->DCMI_FrameEndCode << 24)); +} + +/** + * @brief Enables or disables the DCMI JPEG format. + * @note The Crop and Embedded Synchronization features cannot be used in this mode. + * @param NewState: new state of the DCMI JPEG format. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DCMI_JPEGCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the DCMI JPEG format */ + DCMI->CR |= (uint32_t)DCMI_CR_JPEG; + } + else + { + /* Disable the DCMI JPEG format */ + DCMI->CR &= ~(uint32_t)DCMI_CR_JPEG; + } +} +/** + * @} + */ + +/** @defgroup DCMI_Group2 Image capture functions + * @brief Image capture functions + * +@verbatim + =============================================================================== + Image capture functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the DCMI interface. + * @param NewState: new state of the DCMI interface. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DCMI_Cmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the DCMI by setting ENABLE bit */ + DCMI->CR |= (uint32_t)DCMI_CR_ENABLE; + } + else + { + /* Disable the DCMI by clearing ENABLE bit */ + DCMI->CR &= ~(uint32_t)DCMI_CR_ENABLE; + } +} + +/** + * @brief Enables or disables the DCMI Capture. + * @param NewState: new state of the DCMI capture. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DCMI_CaptureCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the DCMI Capture */ + DCMI->CR |= (uint32_t)DCMI_CR_CAPTURE; + } + else + { + /* Disable the DCMI Capture */ + DCMI->CR &= ~(uint32_t)DCMI_CR_CAPTURE; + } +} + +/** + * @brief Reads the data stored in the DR register. + * @param None + * @retval Data register value + */ +uint32_t DCMI_ReadData(void) +{ + return DCMI->DR; +} +/** + * @} + */ + +/** @defgroup DCMI_Group3 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the DCMI interface interrupts. + * @param DCMI_IT: specifies the DCMI interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg DCMI_IT_FRAME: Frame capture complete interrupt mask + * @arg DCMI_IT_OVF: Overflow interrupt mask + * @arg DCMI_IT_ERR: Synchronization error interrupt mask + * @arg DCMI_IT_VSYNC: VSYNC interrupt mask + * @arg DCMI_IT_LINE: Line interrupt mask + * @param NewState: new state of the specified DCMI interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DCMI_ITConfig(uint16_t DCMI_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DCMI_CONFIG_IT(DCMI_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the Interrupt sources */ + DCMI->IER |= DCMI_IT; + } + else + { + /* Disable the Interrupt sources */ + DCMI->IER &= (uint16_t)(~DCMI_IT); + } +} + +/** + * @brief Checks whether the DCMI interface flag is set or not. + * @param DCMI_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg DCMI_FLAG_FRAMERI: Frame capture complete Raw flag mask + * @arg DCMI_FLAG_OVFRI: Overflow Raw flag mask + * @arg DCMI_FLAG_ERRRI: Synchronization error Raw flag mask + * @arg DCMI_FLAG_VSYNCRI: VSYNC Raw flag mask + * @arg DCMI_FLAG_LINERI: Line Raw flag mask + * @arg DCMI_FLAG_FRAMEMI: Frame capture complete Masked flag mask + * @arg DCMI_FLAG_OVFMI: Overflow Masked flag mask + * @arg DCMI_FLAG_ERRMI: Synchronization error Masked flag mask + * @arg DCMI_FLAG_VSYNCMI: VSYNC Masked flag mask + * @arg DCMI_FLAG_LINEMI: Line Masked flag mask + * @arg DCMI_FLAG_HSYNC: HSYNC flag mask + * @arg DCMI_FLAG_VSYNC: VSYNC flag mask + * @arg DCMI_FLAG_FNE: Fifo not empty flag mask + * @retval The new state of DCMI_FLAG (SET or RESET). + */ +FlagStatus DCMI_GetFlagStatus(uint16_t DCMI_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t dcmireg, tempreg = 0; + + /* Check the parameters */ + assert_param(IS_DCMI_GET_FLAG(DCMI_FLAG)); + + /* Get the DCMI register index */ + dcmireg = (((uint16_t)DCMI_FLAG) >> 12); + + if (dcmireg == 0x00) /* The FLAG is in RISR register */ + { + tempreg= DCMI->RISR; + } + else if (dcmireg == 0x02) /* The FLAG is in SR register */ + { + tempreg = DCMI->SR; + } + else /* The FLAG is in MISR register */ + { + tempreg = DCMI->MISR; + } + + if ((tempreg & DCMI_FLAG) != (uint16_t)RESET ) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the DCMI_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the DCMI's pending flags. + * @param DCMI_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg DCMI_FLAG_FRAMERI: Frame capture complete Raw flag mask + * @arg DCMI_FLAG_OVFRI: Overflow Raw flag mask + * @arg DCMI_FLAG_ERRRI: Synchronization error Raw flag mask + * @arg DCMI_FLAG_VSYNCRI: VSYNC Raw flag mask + * @arg DCMI_FLAG_LINERI: Line Raw flag mask + * @retval None + */ +void DCMI_ClearFlag(uint16_t DCMI_FLAG) +{ + /* Check the parameters */ + assert_param(IS_DCMI_CLEAR_FLAG(DCMI_FLAG)); + + /* Clear the flag by writing in the ICR register 1 in the corresponding + Flag position*/ + + DCMI->ICR = DCMI_FLAG; +} + +/** + * @brief Checks whether the DCMI interrupt has occurred or not. + * @param DCMI_IT: specifies the DCMI interrupt source to check. + * This parameter can be one of the following values: + * @arg DCMI_IT_FRAME: Frame capture complete interrupt mask + * @arg DCMI_IT_OVF: Overflow interrupt mask + * @arg DCMI_IT_ERR: Synchronization error interrupt mask + * @arg DCMI_IT_VSYNC: VSYNC interrupt mask + * @arg DCMI_IT_LINE: Line interrupt mask + * @retval The new state of DCMI_IT (SET or RESET). + */ +ITStatus DCMI_GetITStatus(uint16_t DCMI_IT) +{ + ITStatus bitstatus = RESET; + uint32_t itstatus = 0; + + /* Check the parameters */ + assert_param(IS_DCMI_GET_IT(DCMI_IT)); + + itstatus = DCMI->MISR & DCMI_IT; /* Only masked interrupts are checked */ + + if ((itstatus != (uint16_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the DCMI's interrupt pending bits. + * @param DCMI_IT: specifies the DCMI interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg DCMI_IT_FRAME: Frame capture complete interrupt mask + * @arg DCMI_IT_OVF: Overflow interrupt mask + * @arg DCMI_IT_ERR: Synchronization error interrupt mask + * @arg DCMI_IT_VSYNC: VSYNC interrupt mask + * @arg DCMI_IT_LINE: Line interrupt mask + * @retval None + */ +void DCMI_ClearITPendingBit(uint16_t DCMI_IT) +{ + /* Clear the interrupt pending Bit by writing in the ICR register 1 in the + corresponding pending Bit position*/ + + DCMI->ICR = DCMI_IT; +} +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dma.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dma.c new file mode 100644 index 000000000..9e8ec04cf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dma.c @@ -0,0 +1,1289 @@ +/** + ****************************************************************************** + * @file stm32f2xx_dma.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Direct Memory Access controller (DMA): + * - Initialization and Configuration + * - Data Counter + * - Double Buffer mode configuration and command + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable The DMA controller clock using RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA1, ENABLE) + * function for DMA1 or using RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA2, ENABLE) + * function for DMA2. + * + * 2. Enable and configure the peripheral to be connected to the DMA Stream + * (except for internal SRAM / FLASH memories: no initialization is + * necessary). + * + * 3. For a given Stream, program the required configuration through following parameters: + * Source and Destination addresses, Transfer Direction, Transfer size, Source and Destination + * data formats, Circular or Normal mode, Stream Priority level, Source and Destination + * Incrementation mode, FIFO mode and its Threshold (if needed), Burst mode for Source and/or + * Destination (if needed) using the DMA_Init() function. + * To avoid filling un-nesecessary fields, you can call DMA_StructInit() function + * to initialize a given structure with default values (reset values), the modify + * only necessary fields (ie. Source and Destination addresses, Transfer size and Data Formats). + * + * 4. Enable the NVIC and the corresponding interrupt(s) using the function + * DMA_ITConfig() if you need to use DMA interrupts. + * + * 5. Optionally, if the Circular mode is enabled, you can use the Double buffer mode by configuring + * the second Memory address and the first Memory to be used through the function + * DMA_DoubleBufferModeConfig(). Then enable the Double buffer mode through the function + * DMA_DoubleBufferModeCmd(). These operations must be done before step 6. + * + * 6. Enable the DMA stream using the DMA_Cmd() function. + * + * 7. Activate the needed Stream Request using PPP_DMACmd() function for + * any PPP peripheral except internal SRAM and FLASH (ie. SPI, USART ...) + * The function allowing this operation is provided in each PPP peripheral + * driver (ie. SPI_DMACmd for SPI peripheral). + * Once the Stream is enabled, it is not possible to modify its configuration + * unless the stream is stopped and disabled. + * After enabling the Stream, it is advised to monitor the EN bit status using + * the function DMA_GetCmdStatus(). In case of configuration errors or bus errors + * this bit will remain reset and all transfers on this Stream will remain on hold. + * + * 8. Optionally, you can configure the number of data to be transferred + * when the Stream is disabled (ie. after each Transfer Complete event + * or when a Transfer Error occurs) using the function DMA_SetCurrDataCounter(). + * And you can get the number of remaining data to be transferred using + * the function DMA_GetCurrDataCounter() at run time (when the DMA Stream is + * enabled and running). + * + * 9. To control DMA events you can use one of the following + * two methods: + * a- Check on DMA Stream flags using the function DMA_GetFlagStatus(). + * b- Use DMA interrupts through the function DMA_ITConfig() at initialization + * phase and DMA_GetITStatus() function into interrupt routines in + * communication phase. + * After checking on a flag you should clear it using DMA_ClearFlag() + * function. And after checking on an interrupt event you should + * clear it using DMA_ClearITPendingBit() function. + * + * 10. Optionally, if Circular mode and Double Buffer mode are enabled, you can modify + * the Memory Addresses using the function DMA_MemoryTargetConfig(). Make sure that + * the Memory Address to be modified is not the one currently in use by DMA Stream. + * This condition can be monitored using the function DMA_GetCurrentMemoryTarget(). + * + * 11. Optionally, Pause-Resume operations may be performed: + * The DMA_Cmd() function may be used to perform Pause-Resume operation. When a + * transfer is ongoing, calling this function to disable the Stream will cause the + * transfer to be paused. All configuration registers and the number of remaining + * data will be preserved. When calling again this function to re-enable the Stream, + * the transfer will be resumed from the point where it was paused. + * + * @note Memory-to-Memory transfer is possible by setting the address of the memory into + * the Peripheral registers. In this mode, Circular mode and Double Buffer mode + * are not allowed. + * + * @note The FIFO is used mainly to reduce bus usage and to allow data packing/unpacking: it is + * possible to set different Data Sizes for the Peripheral and the Memory (ie. you can set + * Half-Word data size for the peripheral to access its data register and set Word data size + * for the Memory to gain in access time. Each two Half-words will be packed and written in + * a single access to a Word in the Memory). + * + * @note When FIFO is disabled, it is not allowed to configure different Data Sizes for Source + * and Destination. In this case the Peripheral Data Size will be applied to both Source + * and Destination. + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_dma.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup DMA + * @brief DMA driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* Masks Definition */ +#define TRANSFER_IT_ENABLE_MASK (uint32_t)(DMA_SxCR_TCIE | DMA_SxCR_HTIE | \ + DMA_SxCR_TEIE | DMA_SxCR_DMEIE) + +#define DMA_Stream0_IT_MASK (uint32_t)(DMA_LISR_FEIF0 | DMA_LISR_DMEIF0 | \ + DMA_LISR_TEIF0 | DMA_LISR_HTIF0 | \ + DMA_LISR_TCIF0) + +#define DMA_Stream1_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK << 6) +#define DMA_Stream2_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK << 16) +#define DMA_Stream3_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK << 22) +#define DMA_Stream4_IT_MASK (uint32_t)(DMA_Stream0_IT_MASK | (uint32_t)0x20000000) +#define DMA_Stream5_IT_MASK (uint32_t)(DMA_Stream1_IT_MASK | (uint32_t)0x20000000) +#define DMA_Stream6_IT_MASK (uint32_t)(DMA_Stream2_IT_MASK | (uint32_t)0x20000000) +#define DMA_Stream7_IT_MASK (uint32_t)(DMA_Stream3_IT_MASK | (uint32_t)0x20000000) +#define TRANSFER_IT_MASK (uint32_t)0x0F3C0F3C +#define HIGH_ISR_MASK (uint32_t)0x20000000 +#define RESERVED_MASK (uint32_t)0x0F7D0F7D + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + + +/** @defgroup DMA_Private_Functions + * @{ + */ + +/** @defgroup DMA_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + + This subsection provides functions allowing to initialize the DMA Stream source + and destination addresses, incrementation and data sizes, transfer direction, + buffer size, circular/normal mode selection, memory-to-memory mode selection + and Stream priority value. + + The DMA_Init() function follows the DMA configuration procedures as described in + reference manual (RM0033) except the first point: waiting on EN bit to be reset. + This condition should be checked by user application using the function DMA_GetCmdStatus() + before calling the DMA_Init() function. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitialize the DMAy Streamx registers to their default reset values. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @retval None + */ +void DMA_DeInit(DMA_Stream_TypeDef* DMAy_Streamx) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + + /* Disable the selected DMAy Streamx */ + DMAy_Streamx->CR &= ~((uint32_t)DMA_SxCR_EN); + + /* Reset DMAy Streamx control register */ + DMAy_Streamx->CR = 0; + + /* Reset DMAy Streamx Number of Data to Transfer register */ + DMAy_Streamx->NDTR = 0; + + /* Reset DMAy Streamx peripheral address register */ + DMAy_Streamx->PAR = 0; + + /* Reset DMAy Streamx memory 0 address register */ + DMAy_Streamx->M0AR = 0; + + /* Reset DMAy Streamx memory 1 address register */ + DMAy_Streamx->M1AR = 0; + + /* Reset DMAy Streamx FIFO control register */ + DMAy_Streamx->FCR = (uint32_t)0x00000021; + + /* Reset interrupt pending bits for the selected stream */ + if (DMAy_Streamx == DMA1_Stream0) + { + /* Reset interrupt pending bits for DMA1 Stream0 */ + DMA1->LIFCR = DMA_Stream0_IT_MASK; + } + else if (DMAy_Streamx == DMA1_Stream1) + { + /* Reset interrupt pending bits for DMA1 Stream1 */ + DMA1->LIFCR = DMA_Stream1_IT_MASK; + } + else if (DMAy_Streamx == DMA1_Stream2) + { + /* Reset interrupt pending bits for DMA1 Stream2 */ + DMA1->LIFCR = DMA_Stream2_IT_MASK; + } + else if (DMAy_Streamx == DMA1_Stream3) + { + /* Reset interrupt pending bits for DMA1 Stream3 */ + DMA1->LIFCR = DMA_Stream3_IT_MASK; + } + else if (DMAy_Streamx == DMA1_Stream4) + { + /* Reset interrupt pending bits for DMA1 Stream4 */ + DMA1->HIFCR = DMA_Stream4_IT_MASK; + } + else if (DMAy_Streamx == DMA1_Stream5) + { + /* Reset interrupt pending bits for DMA1 Stream5 */ + DMA1->HIFCR = DMA_Stream5_IT_MASK; + } + else if (DMAy_Streamx == DMA1_Stream6) + { + /* Reset interrupt pending bits for DMA1 Stream6 */ + DMA1->HIFCR = (uint32_t)DMA_Stream6_IT_MASK; + } + else if (DMAy_Streamx == DMA1_Stream7) + { + /* Reset interrupt pending bits for DMA1 Stream7 */ + DMA1->HIFCR = DMA_Stream7_IT_MASK; + } + else if (DMAy_Streamx == DMA2_Stream0) + { + /* Reset interrupt pending bits for DMA2 Stream0 */ + DMA2->LIFCR = DMA_Stream0_IT_MASK; + } + else if (DMAy_Streamx == DMA2_Stream1) + { + /* Reset interrupt pending bits for DMA2 Stream1 */ + DMA2->LIFCR = DMA_Stream1_IT_MASK; + } + else if (DMAy_Streamx == DMA2_Stream2) + { + /* Reset interrupt pending bits for DMA2 Stream2 */ + DMA2->LIFCR = DMA_Stream2_IT_MASK; + } + else if (DMAy_Streamx == DMA2_Stream3) + { + /* Reset interrupt pending bits for DMA2 Stream3 */ + DMA2->LIFCR = DMA_Stream3_IT_MASK; + } + else if (DMAy_Streamx == DMA2_Stream4) + { + /* Reset interrupt pending bits for DMA2 Stream4 */ + DMA2->HIFCR = DMA_Stream4_IT_MASK; + } + else if (DMAy_Streamx == DMA2_Stream5) + { + /* Reset interrupt pending bits for DMA2 Stream5 */ + DMA2->HIFCR = DMA_Stream5_IT_MASK; + } + else if (DMAy_Streamx == DMA2_Stream6) + { + /* Reset interrupt pending bits for DMA2 Stream6 */ + DMA2->HIFCR = DMA_Stream6_IT_MASK; + } + else + { + if (DMAy_Streamx == DMA2_Stream7) + { + /* Reset interrupt pending bits for DMA2 Stream7 */ + DMA2->HIFCR = DMA_Stream7_IT_MASK; + } + } +} + +/** + * @brief Initializes the DMAy Streamx according to the specified parameters in + * the DMA_InitStruct structure. + * @note Before calling this function, it is recommended to check that the Stream + * is actually disabled using the function DMA_GetCmdStatus(). + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param DMA_InitStruct: pointer to a DMA_InitTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval None + */ +void DMA_Init(DMA_Stream_TypeDef* DMAy_Streamx, DMA_InitTypeDef* DMA_InitStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_CHANNEL(DMA_InitStruct->DMA_Channel)); + assert_param(IS_DMA_DIRECTION(DMA_InitStruct->DMA_DIR)); + assert_param(IS_DMA_BUFFER_SIZE(DMA_InitStruct->DMA_BufferSize)); + assert_param(IS_DMA_PERIPHERAL_INC_STATE(DMA_InitStruct->DMA_PeripheralInc)); + assert_param(IS_DMA_MEMORY_INC_STATE(DMA_InitStruct->DMA_MemoryInc)); + assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(DMA_InitStruct->DMA_PeripheralDataSize)); + assert_param(IS_DMA_MEMORY_DATA_SIZE(DMA_InitStruct->DMA_MemoryDataSize)); + assert_param(IS_DMA_MODE(DMA_InitStruct->DMA_Mode)); + assert_param(IS_DMA_PRIORITY(DMA_InitStruct->DMA_Priority)); + assert_param(IS_DMA_FIFO_MODE_STATE(DMA_InitStruct->DMA_FIFOMode)); + assert_param(IS_DMA_FIFO_THRESHOLD(DMA_InitStruct->DMA_FIFOThreshold)); + assert_param(IS_DMA_MEMORY_BURST(DMA_InitStruct->DMA_MemoryBurst)); + assert_param(IS_DMA_PERIPHERAL_BURST(DMA_InitStruct->DMA_PeripheralBurst)); + + /*------------------------- DMAy Streamx CR Configuration ------------------*/ + /* Get the DMAy_Streamx CR value */ + tmpreg = DMAy_Streamx->CR; + + /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */ + tmpreg &= ((uint32_t)~(DMA_SxCR_CHSEL | DMA_SxCR_MBURST | DMA_SxCR_PBURST | \ + DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \ + DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \ + DMA_SxCR_DIR)); + + /* Configure DMAy Streamx: */ + /* Set CHSEL bits according to DMA_CHSEL value */ + /* Set DIR bits according to DMA_DIR value */ + /* Set PINC bit according to DMA_PeripheralInc value */ + /* Set MINC bit according to DMA_MemoryInc value */ + /* Set PSIZE bits according to DMA_PeripheralDataSize value */ + /* Set MSIZE bits according to DMA_MemoryDataSize value */ + /* Set CIRC bit according to DMA_Mode value */ + /* Set PL bits according to DMA_Priority value */ + /* Set MBURST bits according to DMA_MemoryBurst value */ + /* Set PBURST bits according to DMA_PeripheralBurst value */ + tmpreg |= DMA_InitStruct->DMA_Channel | DMA_InitStruct->DMA_DIR | + DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc | + DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize | + DMA_InitStruct->DMA_Mode | DMA_InitStruct->DMA_Priority | + DMA_InitStruct->DMA_MemoryBurst | DMA_InitStruct->DMA_PeripheralBurst; + + /* Write to DMAy Streamx CR register */ + DMAy_Streamx->CR = tmpreg; + + /*------------------------- DMAy Streamx FCR Configuration -----------------*/ + /* Get the DMAy_Streamx FCR value */ + tmpreg = DMAy_Streamx->FCR; + + /* Clear DMDIS and FTH bits */ + tmpreg &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH); + + /* Configure DMAy Streamx FIFO: + Set DMDIS bits according to DMA_FIFOMode value + Set FTH bits according to DMA_FIFOThreshold value */ + tmpreg |= DMA_InitStruct->DMA_FIFOMode | DMA_InitStruct->DMA_FIFOThreshold; + + /* Write to DMAy Streamx CR */ + DMAy_Streamx->FCR = tmpreg; + + /*------------------------- DMAy Streamx NDTR Configuration ----------------*/ + /* Write to DMAy Streamx NDTR register */ + DMAy_Streamx->NDTR = DMA_InitStruct->DMA_BufferSize; + + /*------------------------- DMAy Streamx PAR Configuration -----------------*/ + /* Write to DMAy Streamx PAR */ + DMAy_Streamx->PAR = DMA_InitStruct->DMA_PeripheralBaseAddr; + + /*------------------------- DMAy Streamx M0AR Configuration ----------------*/ + /* Write to DMAy Streamx M0AR */ + DMAy_Streamx->M0AR = DMA_InitStruct->DMA_Memory0BaseAddr; +} + +/** + * @brief Fills each DMA_InitStruct member with its default value. + * @param DMA_InitStruct : pointer to a DMA_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct) +{ + /*-------------- Reset DMA init structure parameters values ----------------*/ + /* Initialize the DMA_Channel member */ + DMA_InitStruct->DMA_Channel = 0; + + /* Initialize the DMA_PeripheralBaseAddr member */ + DMA_InitStruct->DMA_PeripheralBaseAddr = 0; + + /* Initialize the DMA_Memory0BaseAddr member */ + DMA_InitStruct->DMA_Memory0BaseAddr = 0; + + /* Initialize the DMA_DIR member */ + DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralToMemory; + + /* Initialize the DMA_BufferSize member */ + DMA_InitStruct->DMA_BufferSize = 0; + + /* Initialize the DMA_PeripheralInc member */ + DMA_InitStruct->DMA_PeripheralInc = DMA_PeripheralInc_Disable; + + /* Initialize the DMA_MemoryInc member */ + DMA_InitStruct->DMA_MemoryInc = DMA_MemoryInc_Disable; + + /* Initialize the DMA_PeripheralDataSize member */ + DMA_InitStruct->DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + + /* Initialize the DMA_MemoryDataSize member */ + DMA_InitStruct->DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + + /* Initialize the DMA_Mode member */ + DMA_InitStruct->DMA_Mode = DMA_Mode_Normal; + + /* Initialize the DMA_Priority member */ + DMA_InitStruct->DMA_Priority = DMA_Priority_Low; + + /* Initialize the DMA_FIFOMode member */ + DMA_InitStruct->DMA_FIFOMode = DMA_FIFOMode_Disable; + + /* Initialize the DMA_FIFOThreshold member */ + DMA_InitStruct->DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; + + /* Initialize the DMA_MemoryBurst member */ + DMA_InitStruct->DMA_MemoryBurst = DMA_MemoryBurst_Single; + + /* Initialize the DMA_PeripheralBurst member */ + DMA_InitStruct->DMA_PeripheralBurst = DMA_PeripheralBurst_Single; +} + +/** + * @brief Enables or disables the specified DMAy Streamx. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param NewState: new state of the DMAy Streamx. + * This parameter can be: ENABLE or DISABLE. + * + * @note This function may be used to perform Pause-Resume operation. When a + * transfer is ongoing, calling this function to disable the Stream will + * cause the transfer to be paused. All configuration registers and the + * number of remaining data will be preserved. When calling again this + * function to re-enable the Stream, the transfer will be resumed from + * the point where it was paused. + * + * @note After configuring the DMA Stream (DMA_Init() function) and enabling the + * stream, it is recommended to check (or wait until) the DMA Stream is + * effectively enabled. A Stream may remain disabled if a configuration + * parameter is wrong. + * After disabling a DMA Stream, it is also recommended to check (or wait + * until) the DMA Stream is effectively disabled. If a Stream is disabled + * while a data transfer is ongoing, the current data will be transferred + * and the Stream will be effectively disabled only after the transfer of + * this single data is finished. + * + * @retval None + */ +void DMA_Cmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected DMAy Streamx by setting EN bit */ + DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_EN; + } + else + { + /* Disable the selected DMAy Streamx by clearing EN bit */ + DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_EN; + } +} + +/** + * @brief Configures, when the PINC (Peripheral Increment address mode) bit is + * set, if the peripheral address should be incremented with the data + * size (configured with PSIZE bits) or by a fixed offset equal to 4 + * (32-bit aligned addresses). + * + * @note This function has no effect if the Peripheral Increment mode is disabled. + * + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param DMA_Pincos: specifies the Peripheral increment offset size. + * This parameter can be one of the following values: + * @arg DMA_PINCOS_Psize: Peripheral address increment is done + * accordingly to PSIZE parameter. + * @arg DMA_PINCOS_WordAligned: Peripheral address increment offset is + * fixed to 4 (32-bit aligned addresses). + * @retval None + */ +void DMA_PeriphIncOffsetSizeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_Pincos) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_PINCOS_SIZE(DMA_Pincos)); + + /* Check the needed Peripheral increment offset */ + if(DMA_Pincos != DMA_PINCOS_Psize) + { + /* Configure DMA_SxCR_PINCOS bit with the input parameter */ + DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_PINCOS; + } + else + { + /* Clear the PINCOS bit: Peripheral address incremented according to PSIZE */ + DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_PINCOS; + } +} + +/** + * @brief Configures, when the DMAy Streamx is disabled, the flow controller for + * the next transactions (Peripheral or Memory). + * + * @note Before enabling this feature, check if the used peripheral supports + * the Flow Controller mode or not. + * + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param DMA_FlowCtrl: specifies the DMA flow controller. + * This parameter can be one of the following values: + * @arg DMA_FlowCtrl_Memory: DMAy_Streamx transactions flow controller is + * the DMA controller. + * @arg DMA_FlowCtrl_Peripheral: DMAy_Streamx transactions flow controller + * is the peripheral. + * @retval None + */ +void DMA_FlowControllerConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FlowCtrl) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_FLOW_CTRL(DMA_FlowCtrl)); + + /* Check the needed flow controller */ + if(DMA_FlowCtrl != DMA_FlowCtrl_Memory) + { + /* Configure DMA_SxCR_PFCTRL bit with the input parameter */ + DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_PFCTRL; + } + else + { + /* Clear the PFCTRL bit: Memory is the flow controller */ + DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_PFCTRL; + } +} +/** + * @} + */ + +/** @defgroup DMA_Group2 Data Counter functions + * @brief Data Counter functions + * +@verbatim + =============================================================================== + Data Counter functions + =============================================================================== + + This subsection provides function allowing to configure and read the buffer size + (number of data to be transferred). + + The DMA data counter can be written only when the DMA Stream is disabled + (ie. after transfer complete event). + + The following function can be used to write the Stream data counter value: + - void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter); + +@note It is advised to use this function rather than DMA_Init() in situations where + only the Data buffer needs to be reloaded. + +@note If the Source and Destination Data Sizes are different, then the value written in + data counter, expressing the number of transfers, is relative to the number of + transfers from the Peripheral point of view. + ie. If Memory data size is Word, Peripheral data size is Half-Words, then the value + to be configured in the data counter is the number of Half-Words to be transferred + from/to the peripheral. + + The DMA data counter can be read to indicate the number of remaining transfers for + the relative DMA Stream. This counter is decremented at the end of each data + transfer and when the transfer is complete: + - If Normal mode is selected: the counter is set to 0. + - If Circular mode is selected: the counter is reloaded with the initial value + (configured before enabling the DMA Stream) + + The following function can be used to read the Stream data counter value: + - uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx); + +@endverbatim + * @{ + */ + +/** + * @brief Writes the number of data units to be transferred on the DMAy Streamx. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param Counter: Number of data units to be transferred (from 0 to 65535) + * Number of data items depends only on the Peripheral data format. + * + * @note If Peripheral data format is Bytes: number of data units is equal + * to total number of bytes to be transferred. + * + * @note If Peripheral data format is Half-Word: number of data units is + * equal to total number of bytes to be transferred / 2. + * + * @note If Peripheral data format is Word: number of data units is equal + * to total number of bytes to be transferred / 4. + * + * @note In Memory-to-Memory transfer mode, the memory buffer pointed by + * DMAy_SxPAR register is considered as Peripheral. + * + * @retval The number of remaining data units in the current DMAy Streamx transfer. + */ +void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + + /* Write the number of data units to be transferred */ + DMAy_Streamx->NDTR = (uint16_t)Counter; +} + +/** + * @brief Returns the number of remaining data units in the current DMAy Streamx transfer. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @retval The number of remaining data units in the current DMAy Streamx transfer. + */ +uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + + /* Return the number of remaining data units for DMAy Streamx */ + return ((uint16_t)(DMAy_Streamx->NDTR)); +} +/** + * @} + */ + +/** @defgroup DMA_Group3 Double Buffer mode functions + * @brief Double Buffer mode functions + * +@verbatim + =============================================================================== + Double Buffer mode functions + =============================================================================== + + This subsection provides function allowing to configure and control the double + buffer mode parameters. + + The Double Buffer mode can be used only when Circular mode is enabled. + The Double Buffer mode cannot be used when transferring data from Memory to Memory. + + The Double Buffer mode allows to set two different Memory addresses from/to which + the DMA controller will access alternatively (after completing transfer to/from target + memory 0, it will start transfer to/from target memory 1). + This allows to reduce software overhead for double buffering and reduce the CPU + access time. + + Two functions must be called before calling the DMA_Init() function: + - void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t Memory1BaseAddr, + uint32_t DMA_CurrentMemory); + - void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); + + DMA_DoubleBufferModeConfig() is called to configure the Memory 1 base address and the first + Memory target from/to which the transfer will start after enabling the DMA Stream. + Then DMA_DoubleBufferModeCmd() must be called to enable the Double Buffer mode (or disable + it when it should not be used). + + + Two functions can be called dynamically when the transfer is ongoing (or when the DMA Stream is + stopped) to modify on of the target Memories addresses or to check wich Memory target is currently + used: + - void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t MemoryBaseAddr, + uint32_t DMA_MemoryTarget); + - uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx); + + DMA_MemoryTargetConfig() can be called to modify the base address of one of the two target Memories. + The Memory of which the base address will be modified must not be currently be used by the DMA Stream + (ie. if the DMA Stream is currently transferring from Memory 1 then you can only modify base address + of target Memory 0 and vice versa). + To check this condition, it is recommended to use the function DMA_GetCurrentMemoryTarget() which + returns the index of the Memory target currently in use by the DMA Stream. + +@endverbatim + * @{ + */ + +/** + * @brief Configures, when the DMAy Streamx is disabled, the double buffer mode + * and the current memory target. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param Memory1BaseAddr: the base address of the second buffer (Memory 1) + * @param DMA_CurrentMemory: specifies which memory will be first buffer for + * the transactions when the Stream will be enabled. + * This parameter can be one of the following values: + * @arg DMA_Memory_0: Memory 0 is the current buffer. + * @arg DMA_Memory_1: Memory 1 is the current buffer. + * + * @note Memory0BaseAddr is set by the DMA structure configuration in DMA_Init(). + * + * @retval None + */ +void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t Memory1BaseAddr, + uint32_t DMA_CurrentMemory) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_CURRENT_MEM(DMA_CurrentMemory)); + + if (DMA_CurrentMemory != DMA_Memory_0) + { + /* Set Memory 1 as current memory address */ + DMAy_Streamx->CR |= (uint32_t)(DMA_SxCR_CT); + } + else + { + /* Set Memory 0 as current memory address */ + DMAy_Streamx->CR &= ~(uint32_t)(DMA_SxCR_CT); + } + + /* Write to DMAy Streamx M1AR */ + DMAy_Streamx->M1AR = Memory1BaseAddr; +} + +/** + * @brief Enables or disables the double buffer mode for the selected DMA stream. + * @note This function can be called only when the DMA Stream is disabled. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param NewState: new state of the DMAy Streamx double buffer mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Configure the Double Buffer mode */ + if (NewState != DISABLE) + { + /* Enable the Double buffer mode */ + DMAy_Streamx->CR |= (uint32_t)DMA_SxCR_DBM; + } + else + { + /* Disable the Double buffer mode */ + DMAy_Streamx->CR &= ~(uint32_t)DMA_SxCR_DBM; + } +} + +/** + * @brief Configures the Memory address for the next buffer transfer in double + * buffer mode (for dynamic use). This function can be called when the + * DMA Stream is enabled and when the transfer is ongoing. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param MemoryBaseAddr: The base address of the target memory buffer + * @param DMA_MemoryTarget: Next memory target to be used. + * This parameter can be one of the following values: + * @arg DMA_Memory_0: To use the memory address 0 + * @arg DMA_Memory_1: To use the memory address 1 + * + * @note It is not allowed to modify the Base Address of a target Memory when + * this target is involved in the current transfer. ie. If the DMA Stream + * is currently transferring to/from Memory 1, then it not possible to + * modify Base address of Memory 1, but it is possible to modify Base + * address of Memory 0. + * To know which Memory is currently used, you can use the function + * DMA_GetCurrentMemoryTarget(). + * + * @retval None + */ +void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t MemoryBaseAddr, + uint32_t DMA_MemoryTarget) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_CURRENT_MEM(DMA_MemoryTarget)); + + /* Check the Memory target to be configured */ + if (DMA_MemoryTarget != DMA_Memory_0) + { + /* Write to DMAy Streamx M1AR */ + DMAy_Streamx->M1AR = MemoryBaseAddr; + } + else + { + /* Write to DMAy Streamx M0AR */ + DMAy_Streamx->M0AR = MemoryBaseAddr; + } +} + +/** + * @brief Returns the current memory target used by double buffer transfer. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @retval The memory target number: 0 for Memory0 or 1 for Memory1. + */ +uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx) +{ + uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + + /* Get the current memory target */ + if ((DMAy_Streamx->CR & DMA_SxCR_CT) != 0) + { + /* Current memory buffer used is Memory 1 */ + tmp = 1; + } + else + { + /* Current memory buffer used is Memory 0 */ + tmp = 0; + } + return tmp; +} +/** + * @} + */ + +/** @defgroup DMA_Group4 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + + This subsection provides functions allowing to + - Check the DMA enable status + - Check the FIFO status + - Configure the DMA Interrupts sources and check or clear the flags or pending bits status. + + 1. DMA Enable status: + After configuring the DMA Stream (DMA_Init() function) and enabling the stream, + it is recommended to check (or wait until) the DMA Stream is effectively enabled. + A Stream may remain disabled if a configuration parameter is wrong. + After disabling a DMA Stream, it is also recommended to check (or wait until) the DMA + Stream is effectively disabled. If a Stream is disabled while a data transfer is ongoing, + the current data will be transferred and the Stream will be effectively disabled only after + this data transfer completion. + To monitor this state it is possible to use the following function: + - FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx); + + 2. FIFO Status: + It is possible to monitor the FIFO status when a transfer is ongoing using the following + function: + - uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx); + + 3. DMA Interrupts and Flags: + The user should identify which mode will be used in his application to manage the + DMA controller events: Polling mode or Interrupt mode. + + Polling Mode + ============= + Each DMA stream can be managed through 4 event Flags: + (x : DMA Stream number ) + 1. DMA_FLAG_FEIFx : to indicate that a FIFO Mode Transfer Error event occurred. + 2. DMA_FLAG_DMEIFx : to indicate that a Direct Mode Transfer Error event occurred. + 3. DMA_FLAG_TEIFx : to indicate that a Transfer Error event occurred. + 4. DMA_FLAG_HTIFx : to indicate that a Half-Transfer Complete event occurred. + 5. DMA_FLAG_TCIFx : to indicate that a Transfer Complete event occurred . + + In this Mode it is advised to use the following functions: + - FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); + - void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); + + Interrupt Mode + =============== + Each DMA Stream can be managed through 4 Interrupts: + + Interrupt Source + ---------------- + 1. DMA_IT_FEIFx : specifies the interrupt source for the FIFO Mode Transfer Error event. + 2. DMA_IT_DMEIFx : specifies the interrupt source for the Direct Mode Transfer Error event. + 3. DMA_IT_TEIFx : specifies the interrupt source for the Transfer Error event. + 4. DMA_IT_HTIFx : specifies the interrupt source for the Half-Transfer Complete event. + 5. DMA_IT_TCIFx : specifies the interrupt source for the a Transfer Complete event. + + In this Mode it is advised to use the following functions: + - void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState); + - ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); + - void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); + +@endverbatim + * @{ + */ + +/** + * @brief Returns the status of EN bit for the specified DMAy Streamx. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * + * @note After configuring the DMA Stream (DMA_Init() function) and enabling + * the stream, it is recommended to check (or wait until) the DMA Stream + * is effectively enabled. A Stream may remain disabled if a configuration + * parameter is wrong. + * After disabling a DMA Stream, it is also recommended to check (or wait + * until) the DMA Stream is effectively disabled. If a Stream is disabled + * while a data transfer is ongoing, the current data will be transferred + * and the Stream will be effectively disabled only after the transfer + * of this single data is finished. + * + * @retval Current state of the DMAy Streamx (ENABLE or DISABLE). + */ +FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx) +{ + FunctionalState state = DISABLE; + + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + + if ((DMAy_Streamx->CR & (uint32_t)DMA_SxCR_EN) != 0) + { + /* The selected DMAy Streamx EN bit is set (DMA is still transferring) */ + state = ENABLE; + } + else + { + /* The selected DMAy Streamx EN bit is cleared (DMA is disabled and + all transfers are complete) */ + state = DISABLE; + } + return state; +} + +/** + * @brief Returns the current DMAy Streamx FIFO filled level. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @retval The FIFO filling state. + * - DMA_FIFOStatus_Less1QuarterFull: when FIFO is less than 1 quarter-full + * and not empty. + * - DMA_FIFOStatus_1QuarterFull: if more than 1 quarter-full. + * - DMA_FIFOStatus_HalfFull: if more than 1 half-full. + * - DMA_FIFOStatus_3QuartersFull: if more than 3 quarters-full. + * - DMA_FIFOStatus_Empty: when FIFO is empty + * - DMA_FIFOStatus_Full: when FIFO is full + */ +uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + + /* Get the FIFO level bits */ + tmpreg = (uint32_t)((DMAy_Streamx->FCR & DMA_SxFCR_FS)); + + return tmpreg; +} + +/** + * @brief Checks whether the specified DMAy Streamx flag is set or not. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param DMA_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg DMA_FLAG_TCIFx: Streamx transfer complete flag + * @arg DMA_FLAG_HTIFx: Streamx half transfer complete flag + * @arg DMA_FLAG_TEIFx: Streamx transfer error flag + * @arg DMA_FLAG_DMEIFx: Streamx direct mode error flag + * @arg DMA_FLAG_FEIFx: Streamx FIFO error flag + * Where x can be 0 to 7 to select the DMA Stream. + * @retval The new state of DMA_FLAG (SET or RESET). + */ +FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG) +{ + FlagStatus bitstatus = RESET; + DMA_TypeDef* DMAy; + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_GET_FLAG(DMA_FLAG)); + + /* Determine the DMA to which belongs the stream */ + if (DMAy_Streamx < DMA2_Stream0) + { + /* DMAy_Streamx belongs to DMA1 */ + DMAy = DMA1; + } + else + { + /* DMAy_Streamx belongs to DMA2 */ + DMAy = DMA2; + } + + /* Check if the flag is in HISR or LISR */ + if ((DMA_FLAG & HIGH_ISR_MASK) != (uint32_t)RESET) + { + /* Get DMAy HISR register value */ + tmpreg = DMAy->HISR; + } + else + { + /* Get DMAy LISR register value */ + tmpreg = DMAy->LISR; + } + + /* Mask the reserved bits */ + tmpreg &= (uint32_t)RESERVED_MASK; + + /* Check the status of the specified DMA flag */ + if ((tmpreg & DMA_FLAG) != (uint32_t)RESET) + { + /* DMA_FLAG is set */ + bitstatus = SET; + } + else + { + /* DMA_FLAG is reset */ + bitstatus = RESET; + } + + /* Return the DMA_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the DMAy Streamx's pending flags. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param DMA_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCIFx: Streamx transfer complete flag + * @arg DMA_FLAG_HTIFx: Streamx half transfer complete flag + * @arg DMA_FLAG_TEIFx: Streamx transfer error flag + * @arg DMA_FLAG_DMEIFx: Streamx direct mode error flag + * @arg DMA_FLAG_FEIFx: Streamx FIFO error flag + * Where x can be 0 to 7 to select the DMA Stream. + * @retval None + */ +void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG) +{ + DMA_TypeDef* DMAy; + + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_CLEAR_FLAG(DMA_FLAG)); + + /* Determine the DMA to which belongs the stream */ + if (DMAy_Streamx < DMA2_Stream0) + { + /* DMAy_Streamx belongs to DMA1 */ + DMAy = DMA1; + } + else + { + /* DMAy_Streamx belongs to DMA2 */ + DMAy = DMA2; + } + + /* Check if LIFCR or HIFCR register is targeted */ + if ((DMA_FLAG & HIGH_ISR_MASK) != (uint32_t)RESET) + { + /* Set DMAy HIFCR register clear flag bits */ + DMAy->HIFCR = (uint32_t)(DMA_FLAG & RESERVED_MASK); + } + else + { + /* Set DMAy LIFCR register clear flag bits */ + DMAy->LIFCR = (uint32_t)(DMA_FLAG & RESERVED_MASK); + } +} + +/** + * @brief Enables or disables the specified DMAy Streamx interrupts. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param DMA_IT: specifies the DMA interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask + * @arg DMA_IT_HT: Half transfer complete interrupt mask + * @arg DMA_IT_TE: Transfer error interrupt mask + * @arg DMA_IT_FE: FIFO error interrupt mask + * @param NewState: new state of the specified DMA interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_CONFIG_IT(DMA_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Check if the DMA_IT parameter contains a FIFO interrupt */ + if ((DMA_IT & DMA_IT_FE) != 0) + { + if (NewState != DISABLE) + { + /* Enable the selected DMA FIFO interrupts */ + DMAy_Streamx->FCR |= (uint32_t)DMA_IT_FE; + } + else + { + /* Disable the selected DMA FIFO interrupts */ + DMAy_Streamx->FCR &= ~(uint32_t)DMA_IT_FE; + } + } + + /* Check if the DMA_IT parameter contains a Transfer interrupt */ + if (DMA_IT != DMA_IT_FE) + { + if (NewState != DISABLE) + { + /* Enable the selected DMA transfer interrupts */ + DMAy_Streamx->CR |= (uint32_t)(DMA_IT & TRANSFER_IT_ENABLE_MASK); + } + else + { + /* Disable the selected DMA transfer interrupts */ + DMAy_Streamx->CR &= ~(uint32_t)(DMA_IT & TRANSFER_IT_ENABLE_MASK); + } + } +} + +/** + * @brief Checks whether the specified DMAy Streamx interrupt has occurred or not. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param DMA_IT: specifies the DMA interrupt source to check. + * This parameter can be one of the following values: + * @arg DMA_IT_TCIFx: Streamx transfer complete interrupt + * @arg DMA_IT_HTIFx: Streamx half transfer complete interrupt + * @arg DMA_IT_TEIFx: Streamx transfer error interrupt + * @arg DMA_IT_DMEIFx: Streamx direct mode error interrupt + * @arg DMA_IT_FEIFx: Streamx FIFO error interrupt + * Where x can be 0 to 7 to select the DMA Stream. + * @retval The new state of DMA_IT (SET or RESET). + */ +ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT) +{ + ITStatus bitstatus = RESET; + DMA_TypeDef* DMAy; + uint32_t tmpreg = 0, enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_GET_IT(DMA_IT)); + + /* Determine the DMA to which belongs the stream */ + if (DMAy_Streamx < DMA2_Stream0) + { + /* DMAy_Streamx belongs to DMA1 */ + DMAy = DMA1; + } + else + { + /* DMAy_Streamx belongs to DMA2 */ + DMAy = DMA2; + } + + /* Check if the interrupt enable bit is in the CR or FCR register */ + if ((DMA_IT & TRANSFER_IT_MASK) != (uint32_t)RESET) + { + /* Get the interrupt enable position mask in CR register */ + tmpreg = (uint32_t)((DMA_IT >> 11) & TRANSFER_IT_ENABLE_MASK); + + /* Check the enable bit in CR register */ + enablestatus = (uint32_t)(DMAy_Streamx->CR & tmpreg); + } + else + { + /* Check the enable bit in FCR register */ + enablestatus = (uint32_t)(DMAy_Streamx->FCR & DMA_IT_FE); + } + + /* Check if the interrupt pending flag is in LISR or HISR */ + if ((DMA_IT & HIGH_ISR_MASK) != (uint32_t)RESET) + { + /* Get DMAy HISR register value */ + tmpreg = DMAy->HISR ; + } + else + { + /* Get DMAy LISR register value */ + tmpreg = DMAy->LISR ; + } + + /* mask all reserved bits */ + tmpreg &= (uint32_t)RESERVED_MASK; + + /* Check the status of the specified DMA interrupt */ + if (((tmpreg & DMA_IT) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) + { + /* DMA_IT is set */ + bitstatus = SET; + } + else + { + /* DMA_IT is reset */ + bitstatus = RESET; + } + + /* Return the DMA_IT status */ + return bitstatus; +} + +/** + * @brief Clears the DMAy Streamx's interrupt pending bits. + * @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0 + * to 7 to select the DMA Stream. + * @param DMA_IT: specifies the DMA interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg DMA_IT_TCIFx: Streamx transfer complete interrupt + * @arg DMA_IT_HTIFx: Streamx half transfer complete interrupt + * @arg DMA_IT_TEIFx: Streamx transfer error interrupt + * @arg DMA_IT_DMEIFx: Streamx direct mode error interrupt + * @arg DMA_IT_FEIFx: Streamx FIFO error interrupt + * Where x can be 0 to 7 to select the DMA Stream. + * @retval None + */ +void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT) +{ + DMA_TypeDef* DMAy; + + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx)); + assert_param(IS_DMA_CLEAR_IT(DMA_IT)); + + /* Determine the DMA to which belongs the stream */ + if (DMAy_Streamx < DMA2_Stream0) + { + /* DMAy_Streamx belongs to DMA1 */ + DMAy = DMA1; + } + else + { + /* DMAy_Streamx belongs to DMA2 */ + DMAy = DMA2; + } + + /* Check if LIFCR or HIFCR register is targeted */ + if ((DMA_IT & HIGH_ISR_MASK) != (uint32_t)RESET) + { + /* Set DMAy HIFCR register clear interrupt bits */ + DMAy->HIFCR = (uint32_t)(DMA_IT & RESERVED_MASK); + } + else + { + /* Set DMAy LIFCR register clear interrupt bits */ + DMAy->LIFCR = (uint32_t)(DMA_IT & RESERVED_MASK); + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_exti.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_exti.c new file mode 100644 index 000000000..2964a84a6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_exti.c @@ -0,0 +1,312 @@ +/** + ****************************************************************************** + * @file stm32f2xx_exti.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the EXTI peripheral: + * - Initialization and Configuration + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * EXTI features + * =================================================================== + * + * External interrupt/event lines are mapped as following: + * 1- All available GPIO pins are connected to the 16 external + * interrupt/event lines from EXTI0 to EXTI15. + * 2- EXTI line 16 is connected to the PVD Output + * 3- EXTI line 17 is connected to the RTC Alarm event + * 4- EXTI line 18 is connected to the USB OTG FS Wakeup from suspend event + * 5- EXTI line 19 is connected to the Ethernet Wakeup event + * 6- EXTI line 20 is connected to the USB OTG HS (configured in FS) Wakeup event + * 7- EXTI line 21 is connected to the RTC Tamper and Time Stamp events + * 8- EXTI line 22 is connected to the RTC Wakeup event + * + * =================================================================== + * How to use this driver + * =================================================================== + * + * In order to use an I/O pin as an external interrupt source, follow + * steps below: + * 1- Configure the I/O in input mode using GPIO_Init() + * 2- Select the input source pin for the EXTI line using SYSCFG_EXTILineConfig() + * 3- Select the mode(interrupt, event) and configure the trigger + * selection (Rising, falling or both) using EXTI_Init() + * 4- Configure NVIC IRQ channel mapped to the EXTI line using NVIC_Init() + * + * @note SYSCFG APB clock must be enabled to get write access to SYSCFG_EXTICRx + * registers using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_exti.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup EXTI + * @brief EXTI driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +#define EXTI_LINENONE ((uint32_t)0x00000) /* No interrupt selected */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup EXTI_Private_Functions + * @{ + */ + +/** @defgroup EXTI_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the EXTI peripheral registers to their default reset values. + * @param None + * @retval None + */ +void EXTI_DeInit(void) +{ + EXTI->IMR = 0x00000000; + EXTI->EMR = 0x00000000; + EXTI->RTSR = 0x00000000; + EXTI->FTSR = 0x00000000; + EXTI->PR = 0x007FFFFF; +} + +/** + * @brief Initializes the EXTI peripheral according to the specified + * parameters in the EXTI_InitStruct. + * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure + * that contains the configuration information for the EXTI peripheral. + * @retval None + */ +void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct) +{ + uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode)); + assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger)); + assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line)); + assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd)); + + tmp = (uint32_t)EXTI_BASE; + + if (EXTI_InitStruct->EXTI_LineCmd != DISABLE) + { + /* Clear EXTI line configuration */ + EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line; + EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line; + + tmp += EXTI_InitStruct->EXTI_Mode; + + *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; + + /* Clear Rising Falling edge configuration */ + EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line; + EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line; + + /* Select the trigger for the selected external interrupts */ + if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling) + { + /* Rising Falling edge */ + EXTI->RTSR |= EXTI_InitStruct->EXTI_Line; + EXTI->FTSR |= EXTI_InitStruct->EXTI_Line; + } + else + { + tmp = (uint32_t)EXTI_BASE; + tmp += EXTI_InitStruct->EXTI_Trigger; + + *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; + } + } + else + { + tmp += EXTI_InitStruct->EXTI_Mode; + + /* Disable the selected external lines */ + *(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line; + } +} + +/** + * @brief Fills each EXTI_InitStruct member with its reset value. + * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct) +{ + EXTI_InitStruct->EXTI_Line = EXTI_LINENONE; + EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling; + EXTI_InitStruct->EXTI_LineCmd = DISABLE; +} + +/** + * @brief Generates a Software interrupt on selected EXTI line. + * @param EXTI_Line: specifies the EXTI line on which the software interrupt + * will be generated. + * This parameter can be any combination of EXTI_Linex where x can be (0..22) + * @retval None + */ +void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line) +{ + /* Check the parameters */ + assert_param(IS_EXTI_LINE(EXTI_Line)); + + EXTI->SWIER |= EXTI_Line; +} + +/** + * @} + */ + +/** @defgroup EXTI_Group2 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Checks whether the specified EXTI line flag is set or not. + * @param EXTI_Line: specifies the EXTI line flag to check. + * This parameter can be EXTI_Linex where x can be(0..22) + * @retval The new state of EXTI_Line (SET or RESET). + */ +FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_GET_EXTI_LINE(EXTI_Line)); + + if ((EXTI->PR & EXTI_Line) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the EXTI's line pending flags. + * @param EXTI_Line: specifies the EXTI lines flags to clear. + * This parameter can be any combination of EXTI_Linex where x can be (0..22) + * @retval None + */ +void EXTI_ClearFlag(uint32_t EXTI_Line) +{ + /* Check the parameters */ + assert_param(IS_EXTI_LINE(EXTI_Line)); + + EXTI->PR = EXTI_Line; +} + +/** + * @brief Checks whether the specified EXTI line is asserted or not. + * @param EXTI_Line: specifies the EXTI line to check. + * This parameter can be EXTI_Linex where x can be(0..22) + * @retval The new state of EXTI_Line (SET or RESET). + */ +ITStatus EXTI_GetITStatus(uint32_t EXTI_Line) +{ + ITStatus bitstatus = RESET; + uint32_t enablestatus = 0; + /* Check the parameters */ + assert_param(IS_GET_EXTI_LINE(EXTI_Line)); + + enablestatus = EXTI->IMR & EXTI_Line; + if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the EXTI's line pending bits. + * @param EXTI_Line: specifies the EXTI lines to clear. + * This parameter can be any combination of EXTI_Linex where x can be (0..22) + * @retval None + */ +void EXTI_ClearITPendingBit(uint32_t EXTI_Line) +{ + /* Check the parameters */ + assert_param(IS_EXTI_LINE(EXTI_Line)); + + EXTI->PR = EXTI_Line; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_flash.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_flash.c new file mode 100644 index 000000000..59a2c8d5b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_flash.c @@ -0,0 +1,1060 @@ +/** + ****************************************************************************** + * @file stm32f2xx_flash.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the FLASH peripheral: + * - FLASH Interface configuration + * - FLASH Memory Programming + * - Option Bytes Programming + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * + * This driver provides functions to configure and program the FLASH + * memory of all STM32F2xx devices. + * These functions are split in 4 groups: + * + * 1. FLASH Interface configuration functions: this group includes the + * management of the following features: + * - Set the latency + * - Enable/Disable the prefetch buffer + * - Enable/Disable the Instruction cache and the Data cache + * - Reset the Instruction cache and the Data cache + * + * 2. FLASH Memory Programming functions: this group includes all needed + * functions to erase and program the main memory: + * - Lock and Unlock the FLASH interface + * - Erase function: Erase sector, erase all sectors + * - Program functions: byte, half word, word and double word + * + * 3. Option Bytes Programming functions: this group includes all needed + * functions to manage the Option Bytes: + * - Set/Reset the write protection + * - Set the Read protection Level + * - Set the BOR level + * - Program the user Option Bytes + * - Launch the Option Bytes loader + * + * 4. Interrupts and flags management functions: this group + * includes all needed functions to: + * - Enable/Disable the FLASH interrupt sources + * - Get flags status + * - Clear flags + * - Get FLASH operation status + * - Wait for last FLASH operation + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_flash.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup FLASH + * @brief FLASH driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define SECTOR_MASK ((uint32_t)0xFFFFFF07) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup FLASH_Private_Functions + * @{ + */ + +/** @defgroup FLASH_Group1 FLASH Interface configuration functions + * @brief FLASH Interface configuration functions + * + +@verbatim + =============================================================================== + FLASH Interface configuration functions + =============================================================================== + + This group includes the following functions: + - void FLASH_SetLatency(uint32_t FLASH_Latency) + To correctly read data from FLASH memory, the number of wait states (LATENCY) + must be correctly programmed according to the frequency of the CPU clock + (HCLK) and the supply voltage of the device. + +-------------------------------------------------------------------------------------+ + | Latency | HCLK clock frequency (MHz) | + | |---------------------------------------------------------------------| + | | voltage range | voltage range | voltage range | voltage range | + | | 2.7 V - 3.6 V | 2.4 V - 2.7 V | 2.1 V - 2.4 V | 1.8 V - 2.1 V | + |---------------|----------------|----------------|-----------------|-----------------| + |0WS(1CPU cycle)|0 < HCLK <= 30 |0 < HCLK <= 24 |0 < HCLK <= 18 |0 < HCLK <= 16 | + |---------------|----------------|----------------|-----------------|-----------------| + |1WS(2CPU cycle)|30 < HCLK <= 60 |24 < HCLK <= 48 |18 < HCLK <= 36 |16 < HCLK <= 32 | + |---------------|----------------|----------------|-----------------|-----------------| + |2WS(3CPU cycle)|60 < HCLK <= 90 |48 < HCLK <= 72 |36 < HCLK <= 54 |32 < HCLK <= 48 | + |---------------|----------------|----------------|-----------------|-----------------| + |3WS(4CPU cycle)|90 < HCLK <= 120|72 < HCLK <= 96 |54 < HCLK <= 72 |48 < HCLK <= 64 | + |---------------|----------------|----------------|-----------------|-----------------| + |4WS(5CPU cycle)| NA |96 < HCLK <= 120|72 < HCLK <= 90 |64 < HCLK <= 80 | + |---------------|----------------|----------------|-----------------|-----------------| + |5WS(6CPU cycle)| NA | NA |90 < HCLK <= 108 |80 < HCLK <= 96 | + |---------------|----------------|----------------|-----------------|-----------------| + |6WS(7CPU cycle)| NA | NA |108 < HCLK <= 120|96 < HCLK <= 112 | + |---------------|----------------|----------------|-----------------|-----------------| + |7WS(8CPU cycle)| NA | NA | NA |112 < HCLK <= 120| + |***************|****************|****************|*****************|*****************|*****************************+ + | | voltage range | voltage range | voltage range | voltage range | voltage range 2.7 V - 3.6 V | + | | 2.7 V - 3.6 V | 2.4 V - 2.7 V | 2.1 V - 2.4 V | 1.8 V - 2.1 V | with External Vpp = 9V | + |---------------|----------------|----------------|-----------------|-----------------|-----------------------------| + |Max Parallelism| x32 | x16 | x8 | x64 | + |---------------|----------------|----------------|-----------------|-----------------|-----------------------------| + |PSIZE[1:0] | 10 | 01 | 00 | 11 | + +-------------------------------------------------------------------------------------------------------------------+ + + - void FLASH_PrefetchBufferCmd(FunctionalState NewState) + - void FLASH_InstructionCacheCmd(FunctionalState NewState) + - void FLASH_DataCacheCmd(FunctionalState NewState) + - void FLASH_InstructionCacheReset(void) + - void FLASH_DataCacheReset(void) + + The unlock sequence is not needed for these functions. + +@endverbatim + * @{ + */ + +/** + * @brief Sets the code latency value. + * @param FLASH_Latency: specifies the FLASH Latency value. + * This parameter can be one of the following values: + * @arg FLASH_Latency_0: FLASH Zero Latency cycle + * @arg FLASH_Latency_1: FLASH One Latency cycle + * @arg FLASH_Latency_2: FLASH Two Latency cycles + * @arg FLASH_Latency_3: FLASH Three Latency cycles + * @arg FLASH_Latency_4: FLASH Four Latency cycles + * @arg FLASH_Latency_5: FLASH Five Latency cycles + * @arg FLASH_Latency_6: FLASH Six Latency cycles + * @arg FLASH_Latency_7: FLASH Seven Latency cycles + * @retval None + */ +void FLASH_SetLatency(uint32_t FLASH_Latency) +{ + /* Check the parameters */ + assert_param(IS_FLASH_LATENCY(FLASH_Latency)); + + /* Perform Byte access to FLASH_ACR[8:0] to set the Latency value */ + *(__IO uint8_t *)ACR_BYTE0_ADDRESS = (uint8_t)FLASH_Latency; +} + +/** + * @brief Enables or disables the Prefetch Buffer. + * @param NewState: new state of the Prefetch Buffer. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FLASH_PrefetchBufferCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Enable or disable the Prefetch Buffer */ + if(NewState != DISABLE) + { + FLASH->ACR |= FLASH_ACR_PRFTEN; + } + else + { + FLASH->ACR &= (~FLASH_ACR_PRFTEN); + } +} + +/** + * @brief Enables or disables the Instruction Cache feature. + * @param NewState: new state of the Instruction Cache. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FLASH_InstructionCacheCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if(NewState != DISABLE) + { + FLASH->ACR |= FLASH_ACR_ICEN; + } + else + { + FLASH->ACR &= (~FLASH_ACR_ICEN); + } +} + +/** + * @brief Enables or disables the Data Cache feature. + * @param NewState: new state of the Data Cache. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FLASH_DataCacheCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if(NewState != DISABLE) + { + FLASH->ACR |= FLASH_ACR_DCEN; + } + else + { + FLASH->ACR &= (~FLASH_ACR_DCEN); + } +} + +/** + * @brief Resets the Instruction Cache. + * @note This function must be used only when the Instruction Cache is disabled. + * @param None + * @retval None + */ +void FLASH_InstructionCacheReset(void) +{ + FLASH->ACR |= FLASH_ACR_ICRST; +} + +/** + * @brief Resets the Data Cache. + * @note This function must be used only when the Data Cache is disabled. + * @param None + * @retval None + */ +void FLASH_DataCacheReset(void) +{ + FLASH->ACR |= FLASH_ACR_DCRST; +} + +/** + * @} + */ + +/** @defgroup FLASH_Group2 FLASH Memory Programming functions + * @brief FLASH Memory Programming functions + * +@verbatim + =============================================================================== + FLASH Memory Programming functions + =============================================================================== + + This group includes the following functions: + - void FLASH_Unlock(void) + - void FLASH_Lock(void) + - FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange) + - FLASH_Status FLASH_EraseAllSectors(uint8_t VoltageRange) + - FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data) + - FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) + - FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) + - FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data) + + Any operation of erase or program should follow these steps: + 1. Call the FLASH_Unlock() function to enable the FLASH control register access + + 2. Call the desired function to erase sector(s) or program data + + 3. Call the FLASH_Lock() function to disable the FLASH control register access + (recommended to protect the FLASH memory against possible unwanted operation) + +@endverbatim + * @{ + */ + +/** + * @brief Unlocks the FLASH control register access + * @param None + * @retval None + */ +void FLASH_Unlock(void) +{ + if((FLASH->CR & FLASH_CR_LOCK) != RESET) + { + /* Authorize the FLASH Registers access */ + FLASH->KEYR = FLASH_KEY1; + FLASH->KEYR = FLASH_KEY2; + } +} + +/** + * @brief Locks the FLASH control register access + * @param None + * @retval None + */ +void FLASH_Lock(void) +{ + /* Set the LOCK Bit to lock the FLASH Registers access */ + FLASH->CR |= FLASH_CR_LOCK; +} + +/** + * @brief Erases a specified FLASH Sector. + * + * @param FLASH_Sector: The Sector number to be erased. + * This parameter can be a value between FLASH_Sector_0 and FLASH_Sector_11 + * + * @param VoltageRange: The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg VoltageRange_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg VoltageRange_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg VoltageRange_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg VoltageRange_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, + * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. + */ +FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange) +{ + uint32_t tmp_psize = 0x0; + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_FLASH_SECTOR(FLASH_Sector)); + assert_param(IS_VOLTAGERANGE(VoltageRange)); + + if(VoltageRange == VoltageRange_1) + { + tmp_psize = FLASH_PSIZE_BYTE; + } + else if(VoltageRange == VoltageRange_2) + { + tmp_psize = FLASH_PSIZE_HALF_WORD; + } + else if(VoltageRange == VoltageRange_3) + { + tmp_psize = FLASH_PSIZE_WORD; + } + else + { + tmp_psize = FLASH_PSIZE_DOUBLE_WORD; + } + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase the sector */ + FLASH->CR &= CR_PSIZE_MASK; + FLASH->CR |= tmp_psize; + FLASH->CR &= SECTOR_MASK; + FLASH->CR |= FLASH_CR_SER | FLASH_Sector; + FLASH->CR |= FLASH_CR_STRT; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + /* if the erase operation is completed, disable the SER Bit */ + FLASH->CR &= (~FLASH_CR_SER); + FLASH->CR &= SECTOR_MASK; + } + /* Return the Erase Status */ + return status; +} + +/** + * @brief Erases all FLASH Sectors. + * + * @param VoltageRange: The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg VoltageRange_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg VoltageRange_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg VoltageRange_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg VoltageRange_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, + * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. + */ +FLASH_Status FLASH_EraseAllSectors(uint8_t VoltageRange) +{ + uint32_t tmp_psize = 0x0; + FLASH_Status status = FLASH_COMPLETE; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + assert_param(IS_VOLTAGERANGE(VoltageRange)); + + if(VoltageRange == VoltageRange_1) + { + tmp_psize = FLASH_PSIZE_BYTE; + } + else if(VoltageRange == VoltageRange_2) + { + tmp_psize = FLASH_PSIZE_HALF_WORD; + } + else if(VoltageRange == VoltageRange_3) + { + tmp_psize = FLASH_PSIZE_WORD; + } + else + { + tmp_psize = FLASH_PSIZE_DOUBLE_WORD; + } + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase all sectors */ + FLASH->CR &= CR_PSIZE_MASK; + FLASH->CR |= tmp_psize; + FLASH->CR |= FLASH_CR_MER; + FLASH->CR |= FLASH_CR_STRT; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + /* if the erase operation is completed, disable the MER Bit */ + FLASH->CR &= (~FLASH_CR_MER); + + } + /* Return the Erase Status */ + return status; +} + +/** + * @brief Programs a double word (64-bit) at a specified address. + * @note This function must be used when the device voltage range is from + * 2.7V to 3.6V and an External Vpp is present. + * @param Address: specifies the address to be programmed. + * @param Data: specifies the data to be programmed. + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, + * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. + */ +FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new data */ + FLASH->CR &= CR_PSIZE_MASK; + FLASH->CR |= FLASH_PSIZE_DOUBLE_WORD; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint64_t*)Address = Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + /* if the program operation is completed, disable the PG Bit */ + FLASH->CR &= (~FLASH_CR_PG); + } + /* Return the Program Status */ + return status; +} + +/** + * @brief Programs a word (32-bit) at a specified address. + * @param Address: specifies the address to be programmed. + * This parameter can be any address in Program memory zone or in OTP zone. + * @note This function must be used when the device voltage range is from 2.7V to 3.6V. + * @param Data: specifies the data to be programmed. + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, + * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. + */ +FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new data */ + FLASH->CR &= CR_PSIZE_MASK; + FLASH->CR |= FLASH_PSIZE_WORD; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint32_t*)Address = Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + /* if the program operation is completed, disable the PG Bit */ + FLASH->CR &= (~FLASH_CR_PG); + } + /* Return the Program Status */ + return status; +} + +/** + * @brief Programs a half word (16-bit) at a specified address. + * @note This function must be used when the device voltage range is from 2.1V to 3.6V. + * @param Address: specifies the address to be programmed. + * This parameter can be any address in Program memory zone or in OTP zone. + * @param Data: specifies the data to be programmed. + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, + * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. + */ +FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new data */ + FLASH->CR &= CR_PSIZE_MASK; + FLASH->CR |= FLASH_PSIZE_HALF_WORD; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint16_t*)Address = Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + /* if the program operation is completed, disable the PG Bit */ + FLASH->CR &= (~FLASH_CR_PG); + } + /* Return the Program Status */ + return status; +} + +/** + * @brief Programs a byte (8-bit) at a specified address. + * @note This function can be used within all the device supply voltage ranges. + * @param Address: specifies the address to be programmed. + * This parameter can be any address in Program memory zone or in OTP zone. + * @param Data: specifies the data to be programmed. + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, + * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. + */ +FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new data */ + FLASH->CR &= CR_PSIZE_MASK; + FLASH->CR |= FLASH_PSIZE_BYTE; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint8_t*)Address = Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + /* if the program operation is completed, disable the PG Bit */ + FLASH->CR &= (~FLASH_CR_PG); + } + + /* Return the Program Status */ + return status; +} + +/** + * @} + */ + +/** @defgroup FLASH_Group3 Option Bytes Programming functions + * @brief Option Bytes Programming functions + * +@verbatim + =============================================================================== + Option Bytes Programming functions + =============================================================================== + + This group includes the following functions: + - void FLASH_OB_Unlock(void) + - void FLASH_OB_Lock(void) + - void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) + - void FLASH_OB_RDPConfig(uint8_t OB_RDP) + - void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) + - void FLASH_OB_BORConfig(uint8_t OB_BOR) + - FLASH_Status FLASH_ProgramOTP(uint32_t Address, uint32_t Data) + - FLASH_Status FLASH_OB_Launch(void) + - uint32_t FLASH_OB_GetUser(void) + - uint8_t FLASH_OB_GetWRP(void) + - uint8_t FLASH_OB_GetRDP(void) + - uint8_t FLASH_OB_GetBOR(void) + + Any operation of erase or program should follow these steps: + 1. Call the FLASH_OB_Unlock() function to enable the FLASH option control register access + + 2. Call one or several functions to program the desired Option Bytes: + - void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) => to Enable/Disable + the desired sector write protection + - void FLASH_OB_RDPConfig(uint8_t OB_RDP) => to set the desired read Protection Level + - void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) => to configure + the user Option Bytes. + - void FLASH_OB_BORConfig(uint8_t OB_BOR) => to set the BOR Level + + 3. Once all needed Option Bytes to be programmed are correctly written, call the + FLASH_OB_Launch() function to launch the Option Bytes programming process. + + @note When changing the IWDG mode from HW to SW or from SW to HW, a system + reset is needed to make the change effective. + + 4. Call the FLASH_OB_Lock() function to disable the FLASH option control register + access (recommended to protect the Option Bytes against possible unwanted operations) + +@endverbatim + * @{ + */ + +/** + * @brief Unlocks the FLASH Option Control Registers access. + * @param None + * @retval None + */ +void FLASH_OB_Unlock(void) +{ + if((FLASH->OPTCR & FLASH_OPTCR_OPTLOCK) != RESET) + { + /* Authorizes the Option Byte register programming */ + FLASH->OPTKEYR = FLASH_OPT_KEY1; + FLASH->OPTKEYR = FLASH_OPT_KEY2; + } +} + +/** + * @brief Locks the FLASH Option Control Registers access. + * @param None + * @retval None + */ +void FLASH_OB_Lock(void) +{ + /* Set the OPTLOCK Bit to lock the FLASH Option Byte Registers access */ + FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK; +} + +/** + * @brief Enables or disables the write protection of the desired sectors + * @param OB_WRP: specifies the sector(s) to be write protected or unprotected. + * This parameter can be one of the following values: + * @arg OB_WRP: A value between OB_WRP_Sector0 and OB_WRP_Sector11 + * @arg OB_WRP_Sector_All + * @param Newstate: new state of the Write Protection. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_OB_WRP(OB_WRP)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + status = FLASH_WaitForLastOperation(); + + if(status == FLASH_COMPLETE) + { + if(NewState != DISABLE) + { + *(__IO uint16_t*)OPTCR_BYTE2_ADDRESS &= (~OB_WRP); + } + else + { + *(__IO uint16_t*)OPTCR_BYTE2_ADDRESS |= (uint16_t)OB_WRP; + } + } +} + +/** + * @brief Sets the read protection level. + * @param OB_RDP: specifies the read protection level. + * This parameter can be one of the following values: + * @arg OB_RDP_Level_0: No protection + * @arg OB_RDP_Level_1: Read protection of the memory + * @arg OB_RDP_Level_2: Full chip protection + * + * !!!Warning!!! When enabling OB_RDP level 2 it's no more possible to go back to level 1 or 0 + * + * @retval None + */ +void FLASH_OB_RDPConfig(uint8_t OB_RDP) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_OB_RDP(OB_RDP)); + + status = FLASH_WaitForLastOperation(); + + if(status == FLASH_COMPLETE) + { + *(__IO uint8_t*)OPTCR_BYTE1_ADDRESS = OB_RDP; + + } +} + +/** + * @brief Programs the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. + * @param OB_IWDG: Selects the IWDG mode + * This parameter can be one of the following values: + * @arg OB_IWDG_SW: Software IWDG selected + * @arg OB_IWDG_HW: Hardware IWDG selected + * @param OB_STOP: Reset event when entering STOP mode. + * This parameter can be one of the following values: + * @arg OB_STOP_NoRST: No reset generated when entering in STOP + * @arg OB_STOP_RST: Reset generated when entering in STOP + * @param OB_STDBY: Reset event when entering Standby mode. + * This parameter can be one of the following values: + * @arg OB_STDBY_NoRST: No reset generated when entering in STANDBY + * @arg OB_STDBY_RST: Reset generated when entering in STANDBY + * @retval None + */ +void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) +{ + uint8_t optiontmp = 0xFF; + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_OB_IWDG_SOURCE(OB_IWDG)); + assert_param(IS_OB_STOP_SOURCE(OB_STOP)); + assert_param(IS_OB_STDBY_SOURCE(OB_STDBY)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + if(status == FLASH_COMPLETE) + { + /* Mask OPTLOCK, OPTSTRT and BOR_LEV bits */ + optiontmp = (uint8_t)((*(__IO uint8_t *)OPTCR_BYTE0_ADDRESS) & (uint8_t)0x0F); + + /* Update User Option Byte */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS = OB_IWDG | (uint8_t)(OB_STDBY | (uint8_t)(OB_STOP | ((uint8_t)optiontmp))); + } +} + +/** + * @brief Sets the BOR Level. + * @param OB_BOR: specifies the Option Bytes BOR Reset Level. + * This parameter can be one of the following values: + * @arg OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V + * @arg OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V + * @arg OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V + * @arg OB_BOR_OFF: Supply voltage ranges from 1.62 to 2.1 V + * @retval None + */ +void FLASH_OB_BORConfig(uint8_t OB_BOR) +{ + /* Check the parameters */ + assert_param(IS_OB_BOR(OB_BOR)); + + /* Set the BOR Level */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS &= (~FLASH_OPTCR_BOR_LEV); + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= OB_BOR; + +} + +/** + * @brief Launch the option byte loading. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, + * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. + */ +FLASH_Status FLASH_OB_Launch(void) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Set the OPTSTRT bit in OPTCR register */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= FLASH_OPTCR_OPTSTRT; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(); + + return status; +} + +/** + * @brief Returns the FLASH User Option Bytes values. + * @param None + * @retval The FLASH User Option Bytes values: IWDG_SW(Bit0), RST_STOP(Bit1) + * and RST_STDBY(Bit2). + */ +uint8_t FLASH_OB_GetUser(void) +{ + /* Return the User Option Byte */ + return (uint8_t)(FLASH->OPTCR >> 5); +} + +/** + * @brief Returns the FLASH Write Protection Option Bytes value. + * @param None + * @retval The FLASH Write Protection Option Bytes value + */ +uint16_t FLASH_OB_GetWRP(void) +{ + /* Return the FLASH write protection Register value */ + return (*(__IO uint16_t *)(OPTCR_BYTE2_ADDRESS)); +} + +/** + * @brief Returns the FLASH Read Protection level. + * @param None + * @retval FLASH ReadOut Protection Status: + * - SET, when OB_RDP_Level_1 or OB_RDP_Level_2 is set + * - RESET, when OB_RDP_Level_0 is set + */ +FlagStatus FLASH_OB_GetRDP(void) +{ + FlagStatus readstatus = RESET; + + if ((*(__IO uint8_t*)(OPTCR_BYTE1_ADDRESS) != (uint8_t)OB_RDP_Level_0)) + { + readstatus = SET; + } + else + { + readstatus = RESET; + } + return readstatus; +} + +/** + * @brief Returns the FLASH BOR level. + * @param None + * @retval The FLASH BOR level: + * - OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V + * - OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V + * - OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V + * - OB_BOR_OFF : Supply voltage ranges from 1.62 to 2.1 V + */ +uint8_t FLASH_OB_GetBOR(void) +{ + /* Return the FLASH BOR level */ + return (uint8_t)(*(__IO uint8_t *)(OPTCR_BYTE0_ADDRESS) & (uint8_t)0x0C); +} + +/** + * @} + */ + +/** @defgroup FLASH_Group4 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified FLASH interrupts. + * @param FLASH_IT: specifies the FLASH interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg FLASH_IT_ERR: FLASH Error Interrupt + * @arg FLASH_IT_EOP: FLASH end of operation Interrupt + * @retval None + */ +void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FLASH_IT(FLASH_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if(NewState != DISABLE) + { + /* Enable the interrupt sources */ + FLASH->CR |= FLASH_IT; + } + else + { + /* Disable the interrupt sources */ + FLASH->CR &= ~(uint32_t)FLASH_IT; + } +} + +/** + * @brief Checks whether the specified FLASH flag is set or not. + * @param FLASH_FLAG: specifies the FLASH flag to check. + * This parameter can be one of the following values: + * @arg FLASH_FLAG_EOP: FLASH End of Operation flag + * @arg FLASH_FLAG_OPERR: FLASH operation Error flag + * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag + * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag + * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag + * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag + * @arg FLASH_FLAG_BSY: FLASH Busy flag + * @retval The new state of FLASH_FLAG (SET or RESET). + */ +FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_FLASH_GET_FLAG(FLASH_FLAG)); + + if((FLASH->SR & FLASH_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the new state of FLASH_FLAG (SET or RESET) */ + return bitstatus; +} + +/** + * @brief Clears the FLASH's pending flags. + * @param FLASH_FLAG: specifies the FLASH flags to clear. + * This parameter can be any combination of the following values: + * @arg FLASH_FLAG_EOP: FLASH End of Operation flag + * @arg FLASH_FLAG_OPERR: FLASH operation Error flag + * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag + * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag + * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag + * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag + * @retval None + */ +void FLASH_ClearFlag(uint32_t FLASH_FLAG) +{ + /* Check the parameters */ + assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG)); + + /* Clear the flags */ + FLASH->SR = FLASH_FLAG; +} + +/** + * @brief Returns the FLASH Status. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, + * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. + */ +FLASH_Status FLASH_GetStatus(void) +{ + FLASH_Status flashstatus = FLASH_COMPLETE; + + if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY) + { + flashstatus = FLASH_BUSY; + } + else + { + if((FLASH->SR & FLASH_FLAG_WRPERR) != (uint32_t)0x00) + { + flashstatus = FLASH_ERROR_WRP; + } + else + { + if((FLASH->SR & (uint32_t)0xEF) != (uint32_t)0x00) + { + flashstatus = FLASH_ERROR_PROGRAM; + } + else + { + if((FLASH->SR & FLASH_FLAG_OPERR) != (uint32_t)0x00) + { + flashstatus = FLASH_ERROR_OPERATION; + } + else + { + flashstatus = FLASH_COMPLETE; + } + } + } + } + /* Return the FLASH Status */ + return flashstatus; +} + +/** + * @brief Waits for a FLASH operation to complete. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM, + * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE. + */ +FLASH_Status FLASH_WaitForLastOperation(void) +{ + __IO FLASH_Status status = FLASH_COMPLETE; + + /* Check for the FLASH Status */ + status = FLASH_GetStatus(); + + /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset. + Even if the FLASH operation fails, the BUSY flag will be reset and an error + flag will be set */ + while(status == FLASH_BUSY) + { + status = FLASH_GetStatus(); + } + /* Return the operation status */ + return status; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_fsmc.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_fsmc.c new file mode 100644 index 000000000..84a38f064 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_fsmc.c @@ -0,0 +1,987 @@ +/** + ****************************************************************************** + * @file stm32f2xx_fsmc.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the FSMC peripheral: + * - Interface with SRAM, PSRAM, NOR and OneNAND memories + * - Interface with NAND memories + * - Interface with 16-bit PC Card compatible memories + * - Interrupts and flags management + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup FSMC + * @brief FSMC driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* --------------------- FSMC registers bit mask ---------------------------- */ +/* FSMC BCRx Mask */ +#define BCR_MBKEN_SET ((uint32_t)0x00000001) +#define BCR_MBKEN_RESET ((uint32_t)0x000FFFFE) +#define BCR_FACCEN_SET ((uint32_t)0x00000040) + +/* FSMC PCRx Mask */ +#define PCR_PBKEN_SET ((uint32_t)0x00000004) +#define PCR_PBKEN_RESET ((uint32_t)0x000FFFFB) +#define PCR_ECCEN_SET ((uint32_t)0x00000040) +#define PCR_ECCEN_RESET ((uint32_t)0x000FFFBF) +#define PCR_MEMORYTYPE_NAND ((uint32_t)0x00000008) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup FSMC_Private_Functions + * @{ + */ + +/** @defgroup FSMC_Group1 NOR/SRAM Controller functions + * @brief NOR/SRAM Controller functions + * +@verbatim + =============================================================================== + NOR/SRAM Controller functions + =============================================================================== + + The following sequence should be followed to configure the FSMC to interface with + SRAM, PSRAM, NOR or OneNAND memory connected to the NOR/SRAM Bank: + + 1. Enable the clock for the FSMC and associated GPIOs using the following functions: + RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); + + 2. FSMC pins configuration + - Connect the involved FSMC pins to AF12 using the following function + GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC); + - Configure these FSMC pins in alternate function mode by calling the function + GPIO_Init(); + + 3. Declare a FSMC_NORSRAMInitTypeDef structure, for example: + FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; + and fill the FSMC_NORSRAMInitStructure variable with the allowed values of + the structure member. + + 4. Initialize the NOR/SRAM Controller by calling the function + FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); + + 5. Then enable the NOR/SRAM Bank, for example: + FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE); + + 6. At this stage you can read/write from/to the memory connected to the NOR/SRAM Bank. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the FSMC NOR/SRAM Banks registers to their default + * reset values. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank1_NORSRAM1: FSMC Bank1 NOR/SRAM1 + * @arg FSMC_Bank1_NORSRAM2: FSMC Bank1 NOR/SRAM2 + * @arg FSMC_Bank1_NORSRAM3: FSMC Bank1 NOR/SRAM3 + * @arg FSMC_Bank1_NORSRAM4: FSMC Bank1 NOR/SRAM4 + * @retval None + */ +void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank) +{ + /* Check the parameter */ + assert_param(IS_FSMC_NORSRAM_BANK(FSMC_Bank)); + + /* FSMC_Bank1_NORSRAM1 */ + if(FSMC_Bank == FSMC_Bank1_NORSRAM1) + { + FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030DB; + } + /* FSMC_Bank1_NORSRAM2, FSMC_Bank1_NORSRAM3 or FSMC_Bank1_NORSRAM4 */ + else + { + FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030D2; + } + FSMC_Bank1->BTCR[FSMC_Bank + 1] = 0x0FFFFFFF; + FSMC_Bank1E->BWTR[FSMC_Bank] = 0x0FFFFFFF; +} + +/** + * @brief Initializes the FSMC NOR/SRAM Banks according to the specified + * parameters in the FSMC_NORSRAMInitStruct. + * @param FSMC_NORSRAMInitStruct : pointer to a FSMC_NORSRAMInitTypeDef structure + * that contains the configuration information for the FSMC NOR/SRAM + * specified Banks. + * @retval None + */ +void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct) +{ + /* Check the parameters */ + assert_param(IS_FSMC_NORSRAM_BANK(FSMC_NORSRAMInitStruct->FSMC_Bank)); + assert_param(IS_FSMC_MUX(FSMC_NORSRAMInitStruct->FSMC_DataAddressMux)); + assert_param(IS_FSMC_MEMORY(FSMC_NORSRAMInitStruct->FSMC_MemoryType)); + assert_param(IS_FSMC_MEMORY_WIDTH(FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth)); + assert_param(IS_FSMC_BURSTMODE(FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode)); + assert_param(IS_FSMC_ASYNWAIT(FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait)); + assert_param(IS_FSMC_WAIT_POLARITY(FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity)); + assert_param(IS_FSMC_WRAP_MODE(FSMC_NORSRAMInitStruct->FSMC_WrapMode)); + assert_param(IS_FSMC_WAIT_SIGNAL_ACTIVE(FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive)); + assert_param(IS_FSMC_WRITE_OPERATION(FSMC_NORSRAMInitStruct->FSMC_WriteOperation)); + assert_param(IS_FSMC_WAITE_SIGNAL(FSMC_NORSRAMInitStruct->FSMC_WaitSignal)); + assert_param(IS_FSMC_EXTENDED_MODE(FSMC_NORSRAMInitStruct->FSMC_ExtendedMode)); + assert_param(IS_FSMC_WRITE_BURST(FSMC_NORSRAMInitStruct->FSMC_WriteBurst)); + assert_param(IS_FSMC_ADDRESS_SETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime)); + assert_param(IS_FSMC_ADDRESS_HOLD_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime)); + assert_param(IS_FSMC_DATASETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime)); + assert_param(IS_FSMC_TURNAROUND_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration)); + assert_param(IS_FSMC_CLK_DIV(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision)); + assert_param(IS_FSMC_DATA_LATENCY(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency)); + assert_param(IS_FSMC_ACCESS_MODE(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode)); + + /* Bank1 NOR/SRAM control register configuration */ + FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] = + (uint32_t)FSMC_NORSRAMInitStruct->FSMC_DataAddressMux | + FSMC_NORSRAMInitStruct->FSMC_MemoryType | + FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth | + FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode | + FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait | + FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity | + FSMC_NORSRAMInitStruct->FSMC_WrapMode | + FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive | + FSMC_NORSRAMInitStruct->FSMC_WriteOperation | + FSMC_NORSRAMInitStruct->FSMC_WaitSignal | + FSMC_NORSRAMInitStruct->FSMC_ExtendedMode | + FSMC_NORSRAMInitStruct->FSMC_WriteBurst; + if(FSMC_NORSRAMInitStruct->FSMC_MemoryType == FSMC_MemoryType_NOR) + { + FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] |= (uint32_t)BCR_FACCEN_SET; + } + /* Bank1 NOR/SRAM timing register configuration */ + FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank+1] = + (uint32_t)FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime << 4) | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime << 8) | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration << 16) | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision << 20) | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency << 24) | + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode; + + + /* Bank1 NOR/SRAM timing register for write configuration, if extended mode is used */ + if(FSMC_NORSRAMInitStruct->FSMC_ExtendedMode == FSMC_ExtendedMode_Enable) + { + assert_param(IS_FSMC_ADDRESS_SETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime)); + assert_param(IS_FSMC_ADDRESS_HOLD_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime)); + assert_param(IS_FSMC_DATASETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime)); + assert_param(IS_FSMC_CLK_DIV(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision)); + assert_param(IS_FSMC_DATA_LATENCY(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency)); + assert_param(IS_FSMC_ACCESS_MODE(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode)); + FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] = + (uint32_t)FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime | + (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime << 4 )| + (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime << 8) | + (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision << 20) | + (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency << 24) | + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode; + } + else + { + FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] = 0x0FFFFFFF; + } +} + +/** + * @brief Fills each FSMC_NORSRAMInitStruct member with its default value. + * @param FSMC_NORSRAMInitStruct: pointer to a FSMC_NORSRAMInitTypeDef structure + * which will be initialized. + * @retval None + */ +void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct) +{ + /* Reset NOR/SRAM Init structure parameters values */ + FSMC_NORSRAMInitStruct->FSMC_Bank = FSMC_Bank1_NORSRAM1; + FSMC_NORSRAMInitStruct->FSMC_DataAddressMux = FSMC_DataAddressMux_Enable; + FSMC_NORSRAMInitStruct->FSMC_MemoryType = FSMC_MemoryType_SRAM; + FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; + FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStruct->FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStruct->FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStruct->FSMC_WaitSignal = FSMC_WaitSignal_Enable; + FSMC_NORSRAMInitStruct->FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStruct->FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime = 0xFF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode = FSMC_AccessMode_A; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime = 0xFF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_BusTurnAroundDuration = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode = FSMC_AccessMode_A; +} + +/** + * @brief Enables or disables the specified NOR/SRAM Memory Bank. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank1_NORSRAM1: FSMC Bank1 NOR/SRAM1 + * @arg FSMC_Bank1_NORSRAM2: FSMC Bank1 NOR/SRAM2 + * @arg FSMC_Bank1_NORSRAM3: FSMC Bank1 NOR/SRAM3 + * @arg FSMC_Bank1_NORSRAM4: FSMC Bank1 NOR/SRAM4 + * @param NewState: new state of the FSMC_Bank. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState) +{ + assert_param(IS_FSMC_NORSRAM_BANK(FSMC_Bank)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected NOR/SRAM Bank by setting the PBKEN bit in the BCRx register */ + FSMC_Bank1->BTCR[FSMC_Bank] |= BCR_MBKEN_SET; + } + else + { + /* Disable the selected NOR/SRAM Bank by clearing the PBKEN bit in the BCRx register */ + FSMC_Bank1->BTCR[FSMC_Bank] &= BCR_MBKEN_RESET; + } +} +/** + * @} + */ + +/** @defgroup FSMC_Group2 NAND Controller functions + * @brief NAND Controller functions + * +@verbatim + =============================================================================== + NAND Controller functions + =============================================================================== + + The following sequence should be followed to configure the FSMC to interface with + 8-bit or 16-bit NAND memory connected to the NAND Bank: + + 1. Enable the clock for the FSMC and associated GPIOs using the following functions: + RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); + + 2. FSMC pins configuration + - Connect the involved FSMC pins to AF12 using the following function + GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC); + - Configure these FSMC pins in alternate function mode by calling the function + GPIO_Init(); + + 3. Declare a FSMC_NANDInitTypeDef structure, for example: + FSMC_NANDInitTypeDef FSMC_NANDInitStructure; + and fill the FSMC_NANDInitStructure variable with the allowed values of + the structure member. + + 4. Initialize the NAND Controller by calling the function + FSMC_NANDInit(&FSMC_NANDInitStructure); + + 5. Then enable the NAND Bank, for example: + FSMC_NANDCmd(FSMC_Bank3_NAND, ENABLE); + + 6. At this stage you can read/write from/to the memory connected to the NAND Bank. + +@note To enable the Error Correction Code (ECC), you have to use the function + FSMC_NANDECCCmd(FSMC_Bank3_NAND, ENABLE); + and to get the current ECC value you have to use the function + ECCval = FSMC_GetECC(FSMC_Bank3_NAND); + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the FSMC NAND Banks registers to their default reset values. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @retval None + */ +void FSMC_NANDDeInit(uint32_t FSMC_Bank) +{ + /* Check the parameter */ + assert_param(IS_FSMC_NAND_BANK(FSMC_Bank)); + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + /* Set the FSMC_Bank2 registers to their reset values */ + FSMC_Bank2->PCR2 = 0x00000018; + FSMC_Bank2->SR2 = 0x00000040; + FSMC_Bank2->PMEM2 = 0xFCFCFCFC; + FSMC_Bank2->PATT2 = 0xFCFCFCFC; + } + /* FSMC_Bank3_NAND */ + else + { + /* Set the FSMC_Bank3 registers to their reset values */ + FSMC_Bank3->PCR3 = 0x00000018; + FSMC_Bank3->SR3 = 0x00000040; + FSMC_Bank3->PMEM3 = 0xFCFCFCFC; + FSMC_Bank3->PATT3 = 0xFCFCFCFC; + } +} + +/** + * @brief Initializes the FSMC NAND Banks according to the specified parameters + * in the FSMC_NANDInitStruct. + * @param FSMC_NANDInitStruct : pointer to a FSMC_NANDInitTypeDef structure that + * contains the configuration information for the FSMC NAND specified Banks. + * @retval None + */ +void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct) +{ + uint32_t tmppcr = 0x00000000, tmppmem = 0x00000000, tmppatt = 0x00000000; + + /* Check the parameters */ + assert_param( IS_FSMC_NAND_BANK(FSMC_NANDInitStruct->FSMC_Bank)); + assert_param( IS_FSMC_WAIT_FEATURE(FSMC_NANDInitStruct->FSMC_Waitfeature)); + assert_param( IS_FSMC_MEMORY_WIDTH(FSMC_NANDInitStruct->FSMC_MemoryDataWidth)); + assert_param( IS_FSMC_ECC_STATE(FSMC_NANDInitStruct->FSMC_ECC)); + assert_param( IS_FSMC_ECCPAGE_SIZE(FSMC_NANDInitStruct->FSMC_ECCPageSize)); + assert_param( IS_FSMC_TCLR_TIME(FSMC_NANDInitStruct->FSMC_TCLRSetupTime)); + assert_param( IS_FSMC_TAR_TIME(FSMC_NANDInitStruct->FSMC_TARSetupTime)); + assert_param(IS_FSMC_SETUP_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime)); + assert_param(IS_FSMC_SETUP_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime)); + + /* Set the tmppcr value according to FSMC_NANDInitStruct parameters */ + tmppcr = (uint32_t)FSMC_NANDInitStruct->FSMC_Waitfeature | + PCR_MEMORYTYPE_NAND | + FSMC_NANDInitStruct->FSMC_MemoryDataWidth | + FSMC_NANDInitStruct->FSMC_ECC | + FSMC_NANDInitStruct->FSMC_ECCPageSize | + (FSMC_NANDInitStruct->FSMC_TCLRSetupTime << 9 )| + (FSMC_NANDInitStruct->FSMC_TARSetupTime << 13); + + /* Set tmppmem value according to FSMC_CommonSpaceTimingStructure parameters */ + tmppmem = (uint32_t)FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime | + (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime << 24); + + /* Set tmppatt value according to FSMC_AttributeSpaceTimingStructure parameters */ + tmppatt = (uint32_t)FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime | + (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime << 24); + + if(FSMC_NANDInitStruct->FSMC_Bank == FSMC_Bank2_NAND) + { + /* FSMC_Bank2_NAND registers configuration */ + FSMC_Bank2->PCR2 = tmppcr; + FSMC_Bank2->PMEM2 = tmppmem; + FSMC_Bank2->PATT2 = tmppatt; + } + else + { + /* FSMC_Bank3_NAND registers configuration */ + FSMC_Bank3->PCR3 = tmppcr; + FSMC_Bank3->PMEM3 = tmppmem; + FSMC_Bank3->PATT3 = tmppatt; + } +} + + +/** + * @brief Fills each FSMC_NANDInitStruct member with its default value. + * @param FSMC_NANDInitStruct: pointer to a FSMC_NANDInitTypeDef structure which + * will be initialized. + * @retval None + */ +void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct) +{ + /* Reset NAND Init structure parameters values */ + FSMC_NANDInitStruct->FSMC_Bank = FSMC_Bank2_NAND; + FSMC_NANDInitStruct->FSMC_Waitfeature = FSMC_Waitfeature_Disable; + FSMC_NANDInitStruct->FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; + FSMC_NANDInitStruct->FSMC_ECC = FSMC_ECC_Disable; + FSMC_NANDInitStruct->FSMC_ECCPageSize = FSMC_ECCPageSize_256Bytes; + FSMC_NANDInitStruct->FSMC_TCLRSetupTime = 0x0; + FSMC_NANDInitStruct->FSMC_TARSetupTime = 0x0; + FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; +} + +/** + * @brief Enables or disables the specified NAND Memory Bank. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @param NewState: new state of the FSMC_Bank. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState) +{ + assert_param(IS_FSMC_NAND_BANK(FSMC_Bank)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected NAND Bank by setting the PBKEN bit in the PCRx register */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->PCR2 |= PCR_PBKEN_SET; + } + else + { + FSMC_Bank3->PCR3 |= PCR_PBKEN_SET; + } + } + else + { + /* Disable the selected NAND Bank by clearing the PBKEN bit in the PCRx register */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->PCR2 &= PCR_PBKEN_RESET; + } + else + { + FSMC_Bank3->PCR3 &= PCR_PBKEN_RESET; + } + } +} +/** + * @brief Enables or disables the FSMC NAND ECC feature. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @param NewState: new state of the FSMC NAND ECC feature. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState) +{ + assert_param(IS_FSMC_NAND_BANK(FSMC_Bank)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected NAND Bank ECC function by setting the ECCEN bit in the PCRx register */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->PCR2 |= PCR_ECCEN_SET; + } + else + { + FSMC_Bank3->PCR3 |= PCR_ECCEN_SET; + } + } + else + { + /* Disable the selected NAND Bank ECC function by clearing the ECCEN bit in the PCRx register */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->PCR2 &= PCR_ECCEN_RESET; + } + else + { + FSMC_Bank3->PCR3 &= PCR_ECCEN_RESET; + } + } +} + +/** + * @brief Returns the error correction code register value. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @retval The Error Correction Code (ECC) value. + */ +uint32_t FSMC_GetECC(uint32_t FSMC_Bank) +{ + uint32_t eccval = 0x00000000; + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + /* Get the ECCR2 register value */ + eccval = FSMC_Bank2->ECCR2; + } + else + { + /* Get the ECCR3 register value */ + eccval = FSMC_Bank3->ECCR3; + } + /* Return the error correction code value */ + return(eccval); +} +/** + * @} + */ + +/** @defgroup FSMC_Group3 PCCARD Controller functions + * @brief PCCARD Controller functions + * +@verbatim + =============================================================================== + PCCARD Controller functions + =============================================================================== + + The following sequence should be followed to configure the FSMC to interface with + 16-bit PC Card compatible memory connected to the PCCARD Bank: + + 1. Enable the clock for the FSMC and associated GPIOs using the following functions: + RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); + + 2. FSMC pins configuration + - Connect the involved FSMC pins to AF12 using the following function + GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC); + - Configure these FSMC pins in alternate function mode by calling the function + GPIO_Init(); + + 3. Declare a FSMC_PCCARDInitTypeDef structure, for example: + FSMC_PCCARDInitTypeDef FSMC_PCCARDInitStructure; + and fill the FSMC_PCCARDInitStructure variable with the allowed values of + the structure member. + + 4. Initialize the PCCARD Controller by calling the function + FSMC_PCCARDInit(&FSMC_PCCARDInitStructure); + + 5. Then enable the PCCARD Bank: + FSMC_PCCARDCmd(ENABLE); + + 6. At this stage you can read/write from/to the memory connected to the PCCARD Bank. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the FSMC PCCARD Bank registers to their default reset values. + * @param None + * @retval None + */ +void FSMC_PCCARDDeInit(void) +{ + /* Set the FSMC_Bank4 registers to their reset values */ + FSMC_Bank4->PCR4 = 0x00000018; + FSMC_Bank4->SR4 = 0x00000000; + FSMC_Bank4->PMEM4 = 0xFCFCFCFC; + FSMC_Bank4->PATT4 = 0xFCFCFCFC; + FSMC_Bank4->PIO4 = 0xFCFCFCFC; +} + +/** + * @brief Initializes the FSMC PCCARD Bank according to the specified parameters + * in the FSMC_PCCARDInitStruct. + * @param FSMC_PCCARDInitStruct : pointer to a FSMC_PCCARDInitTypeDef structure + * that contains the configuration information for the FSMC PCCARD Bank. + * @retval None + */ +void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct) +{ + /* Check the parameters */ + assert_param(IS_FSMC_WAIT_FEATURE(FSMC_PCCARDInitStruct->FSMC_Waitfeature)); + assert_param(IS_FSMC_TCLR_TIME(FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime)); + assert_param(IS_FSMC_TAR_TIME(FSMC_PCCARDInitStruct->FSMC_TARSetupTime)); + + assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime)); + + assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime)); + assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime)); + + /* Set the PCR4 register value according to FSMC_PCCARDInitStruct parameters */ + FSMC_Bank4->PCR4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_Waitfeature | + FSMC_MemoryDataWidth_16b | + (FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime << 9) | + (FSMC_PCCARDInitStruct->FSMC_TARSetupTime << 13); + + /* Set PMEM4 register value according to FSMC_CommonSpaceTimingStructure parameters */ + FSMC_Bank4->PMEM4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime | + (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime << 24); + + /* Set PATT4 register value according to FSMC_AttributeSpaceTimingStructure parameters */ + FSMC_Bank4->PATT4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime | + (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime << 24); + + /* Set PIO4 register value according to FSMC_IOSpaceTimingStructure parameters */ + FSMC_Bank4->PIO4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime | + (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime << 24); +} + +/** + * @brief Fills each FSMC_PCCARDInitStruct member with its default value. + * @param FSMC_PCCARDInitStruct: pointer to a FSMC_PCCARDInitTypeDef structure + * which will be initialized. + * @retval None + */ +void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct) +{ + /* Reset PCCARD Init structure parameters values */ + FSMC_PCCARDInitStruct->FSMC_Waitfeature = FSMC_Waitfeature_Disable; + FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime = 0x0; + FSMC_PCCARDInitStruct->FSMC_TARSetupTime = 0x0; + FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; +} + +/** + * @brief Enables or disables the PCCARD Memory Bank. + * @param NewState: new state of the PCCARD Memory Bank. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_PCCARDCmd(FunctionalState NewState) +{ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the PCCARD Bank by setting the PBKEN bit in the PCR4 register */ + FSMC_Bank4->PCR4 |= PCR_PBKEN_SET; + } + else + { + /* Disable the PCCARD Bank by clearing the PBKEN bit in the PCR4 register */ + FSMC_Bank4->PCR4 &= PCR_PBKEN_RESET; + } +} +/** + * @} + */ + +/** @defgroup FSMC_Group4 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified FSMC interrupts. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_IT: specifies the FSMC interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt. + * @arg FSMC_IT_Level: Level edge detection interrupt. + * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt. + * @param NewState: new state of the specified FSMC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_ITConfig(uint32_t FSMC_Bank, uint32_t FSMC_IT, FunctionalState NewState) +{ + assert_param(IS_FSMC_IT_BANK(FSMC_Bank)); + assert_param(IS_FSMC_IT(FSMC_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected FSMC_Bank2 interrupts */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->SR2 |= FSMC_IT; + } + /* Enable the selected FSMC_Bank3 interrupts */ + else if (FSMC_Bank == FSMC_Bank3_NAND) + { + FSMC_Bank3->SR3 |= FSMC_IT; + } + /* Enable the selected FSMC_Bank4 interrupts */ + else + { + FSMC_Bank4->SR4 |= FSMC_IT; + } + } + else + { + /* Disable the selected FSMC_Bank2 interrupts */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + + FSMC_Bank2->SR2 &= (uint32_t)~FSMC_IT; + } + /* Disable the selected FSMC_Bank3 interrupts */ + else if (FSMC_Bank == FSMC_Bank3_NAND) + { + FSMC_Bank3->SR3 &= (uint32_t)~FSMC_IT; + } + /* Disable the selected FSMC_Bank4 interrupts */ + else + { + FSMC_Bank4->SR4 &= (uint32_t)~FSMC_IT; + } + } +} + +/** + * @brief Checks whether the specified FSMC flag is set or not. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg FSMC_FLAG_RisingEdge: Rising edge detection Flag. + * @arg FSMC_FLAG_Level: Level detection Flag. + * @arg FSMC_FLAG_FallingEdge: Falling edge detection Flag. + * @arg FSMC_FLAG_FEMPT: Fifo empty Flag. + * @retval The new state of FSMC_FLAG (SET or RESET). + */ +FlagStatus FSMC_GetFlagStatus(uint32_t FSMC_Bank, uint32_t FSMC_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t tmpsr = 0x00000000; + + /* Check the parameters */ + assert_param(IS_FSMC_GETFLAG_BANK(FSMC_Bank)); + assert_param(IS_FSMC_GET_FLAG(FSMC_FLAG)); + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + tmpsr = FSMC_Bank2->SR2; + } + else if(FSMC_Bank == FSMC_Bank3_NAND) + { + tmpsr = FSMC_Bank3->SR3; + } + /* FSMC_Bank4_PCCARD*/ + else + { + tmpsr = FSMC_Bank4->SR4; + } + + /* Get the flag status */ + if ((tmpsr & FSMC_FLAG) != (uint16_t)RESET ) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** + * @brief Clears the FSMC's pending flags. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg FSMC_FLAG_RisingEdge: Rising edge detection Flag. + * @arg FSMC_FLAG_Level: Level detection Flag. + * @arg FSMC_FLAG_FallingEdge: Falling edge detection Flag. + * @retval None + */ +void FSMC_ClearFlag(uint32_t FSMC_Bank, uint32_t FSMC_FLAG) +{ + /* Check the parameters */ + assert_param(IS_FSMC_GETFLAG_BANK(FSMC_Bank)); + assert_param(IS_FSMC_CLEAR_FLAG(FSMC_FLAG)) ; + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->SR2 &= ~FSMC_FLAG; + } + else if(FSMC_Bank == FSMC_Bank3_NAND) + { + FSMC_Bank3->SR3 &= ~FSMC_FLAG; + } + /* FSMC_Bank4_PCCARD*/ + else + { + FSMC_Bank4->SR4 &= ~FSMC_FLAG; + } +} + +/** + * @brief Checks whether the specified FSMC interrupt has occurred or not. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_IT: specifies the FSMC interrupt source to check. + * This parameter can be one of the following values: + * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt. + * @arg FSMC_IT_Level: Level edge detection interrupt. + * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt. + * @retval The new state of FSMC_IT (SET or RESET). + */ +ITStatus FSMC_GetITStatus(uint32_t FSMC_Bank, uint32_t FSMC_IT) +{ + ITStatus bitstatus = RESET; + uint32_t tmpsr = 0x0, itstatus = 0x0, itenable = 0x0; + + /* Check the parameters */ + assert_param(IS_FSMC_IT_BANK(FSMC_Bank)); + assert_param(IS_FSMC_GET_IT(FSMC_IT)); + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + tmpsr = FSMC_Bank2->SR2; + } + else if(FSMC_Bank == FSMC_Bank3_NAND) + { + tmpsr = FSMC_Bank3->SR3; + } + /* FSMC_Bank4_PCCARD*/ + else + { + tmpsr = FSMC_Bank4->SR4; + } + + itstatus = tmpsr & FSMC_IT; + + itenable = tmpsr & (FSMC_IT >> 3); + if ((itstatus != (uint32_t)RESET) && (itenable != (uint32_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the FSMC's interrupt pending bits. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_IT: specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt. + * @arg FSMC_IT_Level: Level edge detection interrupt. + * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt. + * @retval None + */ +void FSMC_ClearITPendingBit(uint32_t FSMC_Bank, uint32_t FSMC_IT) +{ + /* Check the parameters */ + assert_param(IS_FSMC_IT_BANK(FSMC_Bank)); + assert_param(IS_FSMC_IT(FSMC_IT)); + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->SR2 &= ~(FSMC_IT >> 3); + } + else if(FSMC_Bank == FSMC_Bank3_NAND) + { + FSMC_Bank3->SR3 &= ~(FSMC_IT >> 3); + } + /* FSMC_Bank4_PCCARD*/ + else + { + FSMC_Bank4->SR4 &= ~(FSMC_IT >> 3); + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c new file mode 100644 index 000000000..aaf8dcb4d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c @@ -0,0 +1,566 @@ +/** + ****************************************************************************** + * @file stm32f2xx_gpio.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the GPIO peripheral: + * - Initialization and Configuration + * - GPIO Read and Write + * - GPIO Alternate functions configuration + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable the GPIO AHB clock using the following function + * RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); + * + * 2. Configure the GPIO pin(s) using GPIO_Init() + * Four possible configuration are available for each pin: + * - Input: Floating, Pull-up, Pull-down. + * - Output: Push-Pull (Pull-up, Pull-down or no Pull) + * Open Drain (Pull-up, Pull-down or no Pull). + * In output mode, the speed is configurable: 2 MHz, 25 MHz, + * 50 MHz or 100 MHz. + * - Alternate Function: Push-Pull (Pull-up, Pull-down or no Pull) + * Open Drain (Pull-up, Pull-down or no Pull). + * - Analog: required mode when a pin is to be used as ADC channel + * or DAC output. + * + * 3- Peripherals alternate function: + * - For ADC and DAC, configure the desired pin in analog mode using + * GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN; + * - For other peripherals (TIM, USART...): + * - Connect the pin to the desired peripherals' Alternate + * Function (AF) using GPIO_PinAFConfig() function + * - Configure the desired pin in alternate function mode using + * GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF + * - Select the type, pull-up/pull-down and output speed via + * GPIO_PuPd, GPIO_OType and GPIO_Speed members + * - Call GPIO_Init() function + * + * 4. To get the level of a pin configured in input mode use GPIO_ReadInputDataBit() + * + * 5. To set/reset the level of a pin configured in output mode use + * GPIO_SetBits()/GPIO_ResetBits() + * + * 6. During and just after reset, the alternate functions are not + * active and the GPIO pins are configured in input floating mode + * (except JTAG pins). + * + * 7. The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as + * general-purpose (PC14 and PC15, respectively) when the LSE + * oscillator is off. The LSE has priority over the GPIO function. + * + * 8. The HSE oscillator pins OSC_IN/OSC_OUT can be used as + * general-purpose PH0 and PH1, respectively, when the HSE + * oscillator is off. The HSE has priority over the GPIO function. + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup GPIO + * @brief GPIO driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup GPIO_Private_Functions + * @{ + */ + +/** @defgroup GPIO_Group1 Initialization and Configuration + * @brief Initialization and Configuration + * +@verbatim + =============================================================================== + Initialization and Configuration + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the GPIOx peripheral registers to their default reset values. + * @note By default, The GPIO pins are configured in input floating mode (except JTAG pins). + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @retval None + */ +void GPIO_DeInit(GPIO_TypeDef* GPIOx) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + if (GPIOx == GPIOA) + { + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, ENABLE); + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, DISABLE); + } + else if (GPIOx == GPIOB) + { + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, ENABLE); + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, DISABLE); + } + else if (GPIOx == GPIOC) + { + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, ENABLE); + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, DISABLE); + } + else if (GPIOx == GPIOD) + { + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, ENABLE); + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, DISABLE); + } + else if (GPIOx == GPIOE) + { + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, ENABLE); + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, DISABLE); + } + else if (GPIOx == GPIOF) + { + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, ENABLE); + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, DISABLE); + } + else if (GPIOx == GPIOG) + { + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, ENABLE); + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, DISABLE); + } + else if (GPIOx == GPIOH) + { + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, ENABLE); + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, DISABLE); + } + else + { + if (GPIOx == GPIOI) + { + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, ENABLE); + RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, DISABLE); + } + } +} + +/** + * @brief Initializes the GPIOx peripheral according to the specified parameters in the GPIO_InitStruct. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that contains + * the configuration information for the specified GPIO peripheral. + * @retval None + */ +void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) +{ + uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin)); + assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode)); + assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd)); + + /* -------------------------Configure the port pins---------------- */ + /*-- GPIO Mode Configuration --*/ + for (pinpos = 0x00; pinpos < 0x10; pinpos++) + { + pos = ((uint32_t)0x01) << pinpos; + /* Get the port pins position */ + currentpin = (GPIO_InitStruct->GPIO_Pin) & pos; + + if (currentpin == pos) + { + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2)); + GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2)); + + if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF)) + { + /* Check Speed mode parameters */ + assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed)); + + /* Speed mode configuration */ + GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2)); + GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2)); + + /* Check Output mode parameters */ + assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType)); + + /* Output mode configuration*/ + GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)) ; + GPIOx->OTYPER |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos)); + } + + /* Pull-up Pull down resistor configuration*/ + GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2)); + GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2)); + } + } +} + +/** + * @brief Fills each GPIO_InitStruct member with its default value. + * @param GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure which will be initialized. + * @retval None + */ +void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct) +{ + /* Reset GPIO init structure parameters values */ + GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All; + GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStruct->GPIO_OType = GPIO_OType_PP; + GPIO_InitStruct->GPIO_PuPd = GPIO_PuPd_NOPULL; +} + +/** + * @brief Locks GPIO Pins configuration registers. + * @note The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, + * GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH. + * @note The configuration of the locked GPIO pins can no longer be modified + * until the next reset. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bit to be locked. + * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). + * @retval None + */ +void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + __IO uint32_t tmp = 0x00010000; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + tmp |= GPIO_Pin; + /* Set LCKK bit */ + GPIOx->LCKR = tmp; + /* Reset LCKK bit */ + GPIOx->LCKR = GPIO_Pin; + /* Set LCKK bit */ + GPIOx->LCKR = tmp; + /* Read LCKK bit*/ + tmp = GPIOx->LCKR; + /* Read LCKK bit*/ + tmp = GPIOx->LCKR; +} + +/** + * @} + */ + +/** @defgroup GPIO_Group2 GPIO Read and Write + * @brief GPIO Read and Write + * +@verbatim + =============================================================================== + GPIO Read and Write + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Reads the specified input port pin. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bit to read. + * This parameter can be GPIO_Pin_x where x can be (0..15). + * @retval The input port pin value. + */ +uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint8_t bitstatus = 0x00; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); + + if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET) + { + bitstatus = (uint8_t)Bit_SET; + } + else + { + bitstatus = (uint8_t)Bit_RESET; + } + return bitstatus; +} + +/** + * @brief Reads the specified GPIO input data port. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @retval GPIO input data port value. + */ +uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + return ((uint16_t)GPIOx->IDR); +} + +/** + * @brief Reads the specified output data port bit. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bit to read. + * This parameter can be GPIO_Pin_x where x can be (0..15). + * @retval The output port pin value. + */ +uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint8_t bitstatus = 0x00; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); + + if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET) + { + bitstatus = (uint8_t)Bit_SET; + } + else + { + bitstatus = (uint8_t)Bit_RESET; + } + return bitstatus; +} + +/** + * @brief Reads the specified GPIO output data port. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @retval GPIO output data port value. + */ +uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + return ((uint16_t)GPIOx->ODR); +} + +/** + * @brief Sets the selected data port bits. + * @note This functions uses GPIOx_BSRR register to allow atomic read/modify + * accesses. In this way, there is no risk of an IRQ occurring between + * the read and the modify access. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bits to be written. + * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). + * @retval None + */ +void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + GPIOx->BSRRL = GPIO_Pin; +} + +/** + * @brief Clears the selected data port bits. + * @note This functions uses GPIOx_BSRR register to allow atomic read/modify + * accesses. In this way, there is no risk of an IRQ occurring between + * the read and the modify access. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bits to be written. + * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). + * @retval None + */ +void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + GPIOx->BSRRH = GPIO_Pin; +} + +/** + * @brief Sets or clears the selected data port bit. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bit to be written. + * This parameter can be one of GPIO_Pin_x where x can be (0..15). + * @param BitVal: specifies the value to be written to the selected bit. + * This parameter can be one of the BitAction enum values: + * @arg Bit_RESET: to clear the port pin + * @arg Bit_SET: to set the port pin + * @retval None + */ +void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); + assert_param(IS_GPIO_BIT_ACTION(BitVal)); + + if (BitVal != Bit_RESET) + { + GPIOx->BSRRL = GPIO_Pin; + } + else + { + GPIOx->BSRRH = GPIO_Pin ; + } +} + +/** + * @brief Writes data to the specified GPIO data port. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param PortVal: specifies the value to be written to the port output data register. + * @retval None + */ +void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + GPIOx->ODR = PortVal; +} + +/** + * @brief Toggles the specified GPIO pins.. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param GPIO_Pin: Specifies the pins to be toggled. + * @retval None + */ +void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + GPIOx->ODR ^= GPIO_Pin; +} + +/** + * @} + */ + +/** @defgroup GPIO_Group3 GPIO Alternate functions configuration function + * @brief GPIO Alternate functions configuration function + * +@verbatim + =============================================================================== + GPIO Alternate functions configuration function + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Changes the mapping of the specified pin. + * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. + * @param GPIO_PinSource: specifies the pin for the Alternate function. + * This parameter can be GPIO_PinSourcex where x can be (0..15). + * @param GPIO_AFSelection: selects the pin to used as Alternate function. + * This parameter can be one of the following values: + * @arg GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin to AF0 (default after reset) + * @arg GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2) to AF0 (default after reset) + * @arg GPIO_AF_TAMPER: Connect TAMPER pins (TAMPER_1 and TAMPER_2) to AF0 (default after reset) + * @arg GPIO_AF_SWJ: Connect SWJ pins (SWD and JTAG)to AF0 (default after reset) + * @arg GPIO_AF_TRACE: Connect TRACE pins to AF0 (default after reset) + * @arg GPIO_AF_TIM1: Connect TIM1 pins to AF1 + * @arg GPIO_AF_TIM2: Connect TIM2 pins to AF1 + * @arg GPIO_AF_TIM3: Connect TIM3 pins to AF2 + * @arg GPIO_AF_TIM4: Connect TIM4 pins to AF2 + * @arg GPIO_AF_TIM5: Connect TIM5 pins to AF2 + * @arg GPIO_AF_TIM8: Connect TIM8 pins to AF3 + * @arg GPIO_AF_TIM9: Connect TIM9 pins to AF3 + * @arg GPIO_AF_TIM10: Connect TIM10 pins to AF3 + * @arg GPIO_AF_TIM11: Connect TIM11 pins to AF3 + * @arg GPIO_AF_I2C1: Connect I2C1 pins to AF4 + * @arg GPIO_AF_I2C2: Connect I2C2 pins to AF4 + * @arg GPIO_AF_I2C3: Connect I2C3 pins to AF4 + * @arg GPIO_AF_SPI1: Connect SPI1 pins to AF5 + * @arg GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5 + * @arg GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6 + * @arg GPIO_AF_USART1: Connect USART1 pins to AF7 + * @arg GPIO_AF_USART2: Connect USART2 pins to AF7 + * @arg GPIO_AF_USART3: Connect USART3 pins to AF7 + * @arg GPIO_AF_UART4: Connect UART4 pins to AF8 + * @arg GPIO_AF_UART5: Connect UART5 pins to AF8 + * @arg GPIO_AF_USART6: Connect USART6 pins to AF8 + * @arg GPIO_AF_CAN1: Connect CAN1 pins to AF9 + * @arg GPIO_AF_CAN2: Connect CAN2 pins to AF9 + * @arg GPIO_AF_TIM12: Connect TIM12 pins to AF9 + * @arg GPIO_AF_TIM13: Connect TIM13 pins to AF9 + * @arg GPIO_AF_TIM14: Connect TIM14 pins to AF9 + * @arg GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10 + * @arg GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10 + * @arg GPIO_AF_ETH: Connect ETHERNET pins to AF11 + * @arg GPIO_AF_FSMC: Connect FSMC pins to AF12 + * @arg GPIO_AF_OTG_HS_FS: Connect OTG HS (configured in FS) pins to AF12 + * @arg GPIO_AF_SDIO: Connect SDIO pins to AF12 + * @arg GPIO_AF_DCMI: Connect DCMI pins to AF13 + * @arg GPIO_AF_EVENTOUT: Connect EVENTOUT pins to AF15 + * @retval None + */ +void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) +{ + uint32_t temp = 0x00; + uint32_t temp_2 = 0x00; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource)); + assert_param(IS_GPIO_AF(GPIO_AF)); + + temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ; + GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ; + temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp; + GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash.c new file mode 100644 index 000000000..74ac28047 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash.c @@ -0,0 +1,706 @@ +/** + ****************************************************************************** + * @file stm32f2xx_hash.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the HASH / HMAC Processor (HASH) peripheral: + * - Initialization and Configuration functions + * - Message Digest generation functions + * - context swapping functions + * - DMA interface function + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * HASH operation : + * ---------------- + * 1. Enable the HASH controller clock using + * RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE) function. + * + * 2. Initialise the HASH using HASH_Init() function. + * + * 3 . Reset the HASH processor core, so that the HASH will be ready + * to compute he message digest of a new message by using + * HASH_Reset() function. + * + * 4. Enable the HASH controller using the HASH_Cmd() function. + * + * 5. if using DMA for Data input transfer, Activate the DMA Request + * using HASH_DMACmd() function + * + * 6. if DMA is not used for data transfer, use HASH_DataIn() function + * to enter data to IN FIFO. + * + * + * 7. Configure the Number of valid bits in last word of the message + * using HASH_SetLastWordValidBitsNbr() function. + * + * 8. if the message length is not an exact multiple of 512 bits, + * then the function HASH_StartDigest() must be called to + * launch the computation of the final digest. + * + * 9. Once computed, the digest can be read using HASH_GetDigest() + * function. + * + * 10. To control HASH events you can use one of the following + * two methods: + * a- Check on HASH flags using the HASH_GetFlagStatus() function. + * b- Use HASH interrupts through the function HASH_ITConfig() at + * initialization phase and HASH_GetITStatus() function into + * interrupt routines in hashing phase. + * After checking on a flag you should clear it using HASH_ClearFlag() + * function. And after checking on an interrupt event you should + * clear it using HASH_ClearITPendingBit() function. + * + * 11. Save and restore hash processor context using + * HASH_SaveContext() and HASH_RestoreContext() functions. + * + * + * + * HMAC operation : + * ---------------- + * The HMAC algorithm is used for message authentication, by + * irreversibly binding the message being processed to a key chosen + * by the user. + * For HMAC specifications, refer to "HMAC: keyed-hashing for message + * authentication, H. Krawczyk, M. Bellare, R. Canetti, February 1997" + * + * Basically, the HMAC algorithm consists of two nested hash operations: + * HMAC(message) = Hash[((key | pad) XOR 0x5C) | Hash(((key | pad) XOR 0x36) | message)] + * where: + * - "pad" is a sequence of zeroes needed to extend the key to the + * length of the underlying hash function data block (that is + * 512 bits for both the SHA-1 and MD5 hash algorithms) + * - "|" represents the concatenation operator + * + * + * To compute the HMAC, four different phases are required: + * + * 1. Initialise the HASH using HASH_Init() function to do HMAC + * operation. + * + * 2. The key (to be used for the inner hash function) is then given + * to the core. This operation follows the same mechanism as the + * one used to send the message in the hash operation (that is, + * by HASH_DataIn() function and, finally, + * HASH_StartDigest() function. + * + * 3. Once the last word has been entered and computation has started, + * the hash processor elaborates the key. It is then ready to + * accept the message text using the same mechanism as the one + * used to send the message in the hash operation. + * + * 4. After the first hash round, the hash processor returns "ready" + * to indicate that it is ready to receive the key to be used for + * the outer hash function (normally, this key is the same as the + * one used for the inner hash function). When the last word of + * the key is entered and computation starts, the HMAC result is + * made available using HASH_GetDigest() function. + * + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_hash.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup HASH + * @brief HASH driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup HASH_Private_Functions + * @{ + */ + +/** @defgroup HASH_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + This section provides functions allowing to + - Initialize the HASH peripheral + - Configure the HASH Processor + - MD5/SHA1, + - HASH/HMAC, + - datatype + - HMAC Key (if mode = HMAC) + - Reset the HASH Processor + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the HASH peripheral registers to their default reset values + * @param None + * @retval None + */ +void HASH_DeInit(void) +{ + /* Enable HASH reset state */ + RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_HASH, ENABLE); + /* Release HASH from reset state */ + RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_HASH, DISABLE); +} + +/** + * @brief Initializes the HASH peripheral according to the specified parameters + * in the HASH_InitStruct structure. + * @note the hash processor is reset when calling this function so that the + * HASH will be ready to compute the message digest of a new message. + * There is no need to call HASH_Reset() function. + * @param HASH_InitStruct: pointer to a HASH_InitTypeDef structure that contains + * the configuration information for the HASH peripheral. + * @note The field HASH_HMACKeyType in HASH_InitTypeDef must be filled only + * if the algorithm mode is HMAC. + * @retval None + */ +void HASH_Init(HASH_InitTypeDef* HASH_InitStruct) +{ + /* Check the parameters */ + assert_param(IS_HASH_ALGOSELECTION(HASH_InitStruct->HASH_AlgoSelection)); + assert_param(IS_HASH_DATATYPE(HASH_InitStruct->HASH_DataType)); + assert_param(IS_HASH_ALGOMODE(HASH_InitStruct->HASH_AlgoMode)); + + /* Configure the Algorithm used, algorithm mode and the datatype */ + HASH->CR &= ~ (HASH_CR_ALGO | HASH_CR_DATATYPE | HASH_CR_MODE); + HASH->CR |= (HASH_InitStruct->HASH_AlgoSelection | \ + HASH_InitStruct->HASH_DataType | \ + HASH_InitStruct->HASH_AlgoMode); + + /* if algorithm mode is HMAC, set the Key */ + if(HASH_InitStruct->HASH_AlgoMode == HASH_AlgoMode_HMAC) + { + assert_param(IS_HASH_HMAC_KEYTYPE(HASH_InitStruct->HASH_HMACKeyType)); + HASH->CR &= ~HASH_CR_LKEY; + HASH->CR |= HASH_InitStruct->HASH_HMACKeyType; + } + + /* Reset the HASH processor core, so that the HASH will be ready to compute + the message digest of a new message */ + HASH->CR |= HASH_CR_INIT; +} + +/** + * @brief Fills each HASH_InitStruct member with its default value. + * @param HASH_InitStruct : pointer to a HASH_InitTypeDef structure which will + * be initialized. + * @note The default values set are : Processor mode is HASH, Algorithm selected is SHA1, + * Data type selected is 32b and HMAC Key Type is short key. + * @retval None + */ +void HASH_StructInit(HASH_InitTypeDef* HASH_InitStruct) +{ + /* Initialize the HASH_AlgoSelection member */ + HASH_InitStruct->HASH_AlgoSelection = HASH_AlgoSelection_SHA1; + + /* Initialize the HASH_AlgoMode member */ + HASH_InitStruct->HASH_AlgoMode = HASH_AlgoMode_HASH; + + /* Initialize the HASH_DataType member */ + HASH_InitStruct->HASH_DataType = HASH_DataType_32b; + + /* Initialize the HASH_HMACKeyType member */ + HASH_InitStruct->HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; +} + +/** + * @brief Resets the HASH processor core, so that the HASH will be ready + * to compute the message digest of a new message. + * @note Calling this function will clear the HASH_SR_DCIS (Digest calculation + * completion interrupt status) bit corresponding to HASH_IT_DCI + * interrupt and HASH_FLAG_DCIS flag. + * @param None + * @retval None + */ +void HASH_Reset(void) +{ + /* Reset the HASH processor core */ + HASH->CR |= HASH_CR_INIT; +} +/** + * @} + */ + +/** @defgroup HASH_Group2 Message Digest generation functions + * @brief Message Digest generation functions + * +@verbatim + =============================================================================== + Message Digest generation functions + =============================================================================== + This section provides functions allowing the generation of message digest: + - Push data in the IN FIFO : using HASH_DataIn() + - Get the number of words set in IN FIFO, use HASH_GetInFIFOWordsNbr() + - set the last word valid bits number using HASH_SetLastWordValidBitsNbr() + - start digest calculation : using HASH_StartDigest() + - Get the Digest message : using HASH_GetDigest() + +@endverbatim + * @{ + */ + + +/** + * @brief Configure the Number of valid bits in last word of the message + * @param ValidNumber: Number of valid bits in last word of the message. + * This parameter must be a number between 0 and 0x1F. + * - 0x00: All 32 bits of the last data written are valid + * - 0x01: Only bit [0] of the last data written is valid + * - 0x02: Only bits[1:0] of the last data written are valid + * - 0x03: Only bits[2:0] of the last data written are valid + * - ... + * - 0x1F: Only bits[30:0] of the last data written are valid + * @note The Number of valid bits must be set before to start the message + * digest competition (in Hash and HMAC) and key treatment(in HMAC). + * @retval None + */ +void HASH_SetLastWordValidBitsNbr(uint16_t ValidNumber) +{ + /* Check the parameters */ + assert_param(IS_HASH_VALIDBITSNUMBER(ValidNumber)); + + /* Configure the Number of valid bits in last word of the message */ + HASH->STR &= ~(HASH_STR_NBW); + HASH->STR |= ValidNumber; +} + +/** + * @brief Writes data in the Data Input FIFO + * @param Data: new data of the message to be processed. + * @retval None + */ +void HASH_DataIn(uint32_t Data) +{ + /* Write in the DIN register a new data */ + HASH->DIN = Data; +} + +/** + * @brief Returns the number of words already pushed into the IN FIFO. + * @param None + * @retval The value of words already pushed into the IN FIFO. + */ +uint8_t HASH_GetInFIFOWordsNbr(void) +{ + /* Return the value of NBW bits */ + return ((HASH->CR & HASH_CR_NBW) >> 8); +} + +/** + * @brief Provides the message digest result. + * @note In MD5 mode, Data[4] filed of HASH_MsgDigest structure is not used + * and is read as zero. + * @param HASH_MessageDigest: pointer to a HASH_MsgDigest structure which will + * hold the message digest result + * @retval None + */ +void HASH_GetDigest(HASH_MsgDigest* HASH_MessageDigest) +{ + /* Get the data field */ + HASH_MessageDigest->Data[0] = HASH->HR[0]; + HASH_MessageDigest->Data[1] = HASH->HR[1]; + HASH_MessageDigest->Data[2] = HASH->HR[2]; + HASH_MessageDigest->Data[3] = HASH->HR[3]; + HASH_MessageDigest->Data[4] = HASH->HR[4]; +} + +/** + * @brief Starts the message padding and calculation of the final message + * @param None + * @retval None + */ +void HASH_StartDigest(void) +{ + /* Start the Digest calculation */ + HASH->STR |= HASH_STR_DCAL; +} +/** + * @} + */ + +/** @defgroup HASH_Group3 Context swapping functions + * @brief Context swapping functions + * +@verbatim + =============================================================================== + Context swapping functions + =============================================================================== + + This section provides functions allowing to save and store HASH Context + + It is possible to interrupt a HASH/HMAC process to perform another processing + with a higher priority, and to complete the interrupted process later on, when + the higher priority task is complete. To do so, the context of the interrupted + task must be saved from the HASH registers to memory, and then be restored + from memory to the HASH registers. + + 1. To save the current context, use HASH_SaveContext() function + 2. To restore the saved context, use HASH_RestoreContext() function + + +@endverbatim + * @{ + */ + +/** + * @brief Save the Hash peripheral Context. + * @note The context can be saved only when no block is currently being + * processed. So user must wait for DINIS = 1 (the last block has been + * processed and the input FIFO is empty) or NBW != 0 (the FIFO is not + * full and no processing is ongoing). + * @param HASH_ContextSave: pointer to a HASH_Context structure that contains + * the repository for current context. + * @retval None + */ +void HASH_SaveContext(HASH_Context* HASH_ContextSave) +{ + uint8_t i = 0; + + /* save context registers */ + HASH_ContextSave->HASH_IMR = HASH->IMR; + HASH_ContextSave->HASH_STR = HASH->STR; + HASH_ContextSave->HASH_CR = HASH->CR; + for(i=0; i<=50;i++) + { + HASH_ContextSave->HASH_CSR[i] = HASH->CSR[i]; + } +} + +/** + * @brief Restore the Hash peripheral Context. + * @note After calling this function, user can restart the processing from the + * point where it has been interrupted. + * @param HASH_ContextRestore: pointer to a HASH_Context structure that contains + * the repository for saved context. + * @retval None + */ +void HASH_RestoreContext(HASH_Context* HASH_ContextRestore) +{ + uint8_t i = 0; + + /* restore context registers */ + HASH->IMR = HASH_ContextRestore->HASH_IMR; + HASH->STR = HASH_ContextRestore->HASH_STR; + HASH->CR = HASH_ContextRestore->HASH_CR; + + /* Initialize the hash processor */ + HASH->CR |= HASH_CR_INIT; + + /* continue restoring context registers */ + for(i=0; i<=50;i++) + { + HASH->CSR[i] = HASH_ContextRestore->HASH_CSR[i]; + } +} +/** + * @} + */ + +/** @defgroup HASH_Group4 HASH's DMA interface Configuration function + * @brief HASH's DMA interface Configuration function + * +@verbatim + =============================================================================== + HASH's DMA interface Configuration function + =============================================================================== + + This section provides functions allowing to configure the DMA interface for + HASH/ HMAC data input transfer. + + When the DMA mode is enabled (using the HASH_DMACmd() function), data can be + sent to the IN FIFO using the DMA peripheral. + + + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the HASH DMA interface. + * @note The DMA is disabled by hardware after the end of transfer. + * @param NewState: new state of the selected HASH DMA transfer request. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void HASH_DMACmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the HASH DMA request */ + HASH->CR |= HASH_CR_DMAE; + } + else + { + /* Disable the HASH DMA request */ + HASH->CR &= ~HASH_CR_DMAE; + } +} +/** + * @} + */ + +/** @defgroup HASH_Group5 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + + This section provides functions allowing to configure the HASH Interrupts and + to get the status and clear flags and Interrupts pending bits. + + The HASH provides 2 Interrupts sources and 5 Flags: + + Flags : + ---------- + 1. HASH_FLAG_DINIS : set when 16 locations are free in the Data IN FIFO + which means that a new block (512 bit) can be entered + into the input buffer. + + 2. HASH_FLAG_DCIS : set when Digest calculation is complete + + 3. HASH_FLAG_DMAS : set when HASH's DMA interface is enabled (DMAE=1) or + a transfer is ongoing. + This Flag is cleared only by hardware. + + 4. HASH_FLAG_BUSY : set when The hash core is processing a block of data + This Flag is cleared only by hardware. + + 5. HASH_FLAG_DINNE : set when Data IN FIFO is not empty which means that + the Data IN FIFO contains at least one word of data. + This Flag is cleared only by hardware. + + Interrupts : + ------------ + + 1. HASH_IT_DINI : if enabled, this interrupt source is pending when 16 + locations are free in the Data IN FIFO which means that + a new block (512 bit) can be entered into the input buffer. + This interrupt source is cleared using + HASH_ClearITPendingBit(HASH_IT_DINI) function. + + 2. HASH_IT_DCI : if enabled, this interrupt source is pending when Digest + calculation is complete. + This interrupt source is cleared using + HASH_ClearITPendingBit(HASH_IT_DCI) function. + + Managing the HASH controller events : + ------------------------------------ + The user should identify which mode will be used in his application to manage + the HASH controller events: Polling mode or Interrupt mode. + + 1. In the Polling Mode it is advised to use the following functions: + - HASH_GetFlagStatus() : to check if flags events occur. + - HASH_ClearFlag() : to clear the flags events. + + 2. In the Interrupt Mode it is advised to use the following functions: + - HASH_ITConfig() : to enable or disable the interrupt source. + - HASH_GetITStatus() : to check if Interrupt occurs. + - HASH_ClearITPendingBit() : to clear the Interrupt pending Bit + (corresponding Flag). + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified HASH interrupts. + * @param HASH_IT: specifies the HASH interrupt source to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg HASH_IT_DINI: Data Input interrupt + * @arg HASH_IT_DCI: Digest Calculation Completion Interrupt + * @param NewState: new state of the specified HASH interrupt. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void HASH_ITConfig(uint8_t HASH_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_HASH_IT(HASH_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected HASH interrupt */ + HASH->IMR |= HASH_IT; + } + else + { + /* Disable the selected HASH interrupt */ + HASH->IMR &= (uint8_t) ~HASH_IT; + } +} + +/** + * @brief Checks whether the specified HASH flag is set or not. + * @param HASH_FLAG: specifies the HASH flag to check. + * This parameter can be one of the following values: + * @arg HASH_FLAG_DINIS: Data input interrupt status flag + * @arg HASH_FLAG_DCIS: Digest calculation completion interrupt status flag + * @arg HASH_FLAG_BUSY: Busy flag + * @arg HASH_FLAG_DMAS: DMAS Status flag + * @arg HASH_FLAG_DINNE: Data Input register (DIN) not empty status flag + * @retval The new state of HASH_FLAG (SET or RESET) + */ +FlagStatus HASH_GetFlagStatus(uint16_t HASH_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t tempreg = 0; + + /* Check the parameters */ + assert_param(IS_HASH_GET_FLAG(HASH_FLAG)); + + /* check if the FLAG is in CR register */ + if ((HASH_FLAG & HASH_FLAG_DINNE) != (uint16_t)RESET ) + { + tempreg = HASH->CR; + } + else /* The FLAG is in SR register */ + { + tempreg = HASH->SR; + } + + /* Check the status of the specified HASH flag */ + if ((tempreg & HASH_FLAG) != (uint16_t)RESET) + { + /* HASH is set */ + bitstatus = SET; + } + else + { + /* HASH_FLAG is reset */ + bitstatus = RESET; + } + + /* Return the HASH_FLAG status */ + return bitstatus; +} +/** + * @brief Clears the HASH flags. + * @param HASH_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg HASH_FLAG_DINIS: Data Input Flag + * @arg HASH_FLAG_DCIS: Digest Calculation Completion Flag + * @retval None + */ +void HASH_ClearFlag(uint16_t HASH_FLAG) +{ + /* Check the parameters */ + assert_param(IS_HASH_CLEAR_FLAG(HASH_FLAG)); + + /* Clear the selected HASH flags */ + HASH->SR = ~(uint32_t)HASH_FLAG; +} +/** + * @brief Checks whether the specified HASH interrupt has occurred or not. + * @param HASH_IT: specifies the HASH interrupt source to check. + * This parameter can be one of the following values: + * @arg HASH_IT_DINI: Data Input interrupt + * @arg HASH_IT_DCI: Digest Calculation Completion Interrupt + * @retval The new state of HASH_IT (SET or RESET). + */ +ITStatus HASH_GetITStatus(uint8_t HASH_IT) +{ + ITStatus bitstatus = RESET; + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_HASH_GET_IT(HASH_IT)); + + + /* Check the status of the specified HASH interrupt */ + tmpreg = HASH->SR; + + if (((HASH->IMR & tmpreg) & HASH_IT) != RESET) + { + /* HASH_IT is set */ + bitstatus = SET; + } + else + { + /* HASH_IT is reset */ + bitstatus = RESET; + } + /* Return the HASH_IT status */ + return bitstatus; +} + +/** + * @brief Clears the HASH interrupt pending bit(s). + * @param HASH_IT: specifies the HASH interrupt pending bit(s) to clear. + * This parameter can be any combination of the following values: + * @arg HASH_IT_DINI: Data Input interrupt + * @arg HASH_IT_DCI: Digest Calculation Completion Interrupt + * @retval None + */ +void HASH_ClearITPendingBit(uint8_t HASH_IT) +{ + /* Check the parameters */ + assert_param(IS_HASH_IT(HASH_IT)); + + /* Clear the selected HASH interrupt pending bit */ + HASH->SR = (uint8_t)~HASH_IT; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash_md5.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash_md5.c new file mode 100644 index 000000000..6cb343737 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash_md5.c @@ -0,0 +1,320 @@ +/** + ****************************************************************************** + * @file stm32f2xx_hash_md5.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides high level functions to compute the HASH MD5 and + * HMAC MD5 Digest of an input message. + * It uses the stm32f2xx_hash.c/.h drivers to access the STM32F2xx HASH + * peripheral. + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable The HASH controller clock using + * RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE); function. + * + * 2. Calculate the HASH MD5 Digest using HASH_MD5() function. + * + * 3. Calculate the HMAC MD5 Digest using HMAC_MD5() function. + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_hash.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup HASH + * @brief HASH driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define MD5BUSY_TIMEOUT ((uint32_t) 0x00010000) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup HASH_Private_Functions + * @{ + */ + +/** @defgroup HASH_Group7 High Level MD5 functions + * @brief High Level MD5 Hash and HMAC functions + * +@verbatim + =============================================================================== + High Level MD5 Hash and HMAC functions + =============================================================================== + + +@endverbatim + * @{ + */ + +/** + * @brief Compute the HASH MD5 digest. + * @param Input: pointer to the Input buffer to be treated. + * @param Ilen: length of the Input buffer. + * @param Output: the returned digest + * @retval An ErrorStatus enumeration value: + * - SUCCESS: digest computation done + * - ERROR: digest computation failed + */ +ErrorStatus HASH_MD5(uint8_t *Input, uint32_t Ilen, uint8_t Output[16]) +{ + HASH_InitTypeDef MD5_HASH_InitStructure; + HASH_MsgDigest MD5_MessageDigest; + __IO uint16_t nbvalidbitsdata = 0; + uint32_t i = 0; + __IO uint32_t counter = 0; + uint32_t busystatus = 0; + ErrorStatus status = SUCCESS; + uint32_t inputaddr = (uint32_t)Input; + uint32_t outputaddr = (uint32_t)Output; + + + /* Number of valid bits in last word of the Input data */ + nbvalidbitsdata = 8 * (Ilen % 4); + + /* HASH peripheral initialization */ + HASH_DeInit(); + + /* HASH Configuration */ + MD5_HASH_InitStructure.HASH_AlgoSelection = HASH_AlgoSelection_MD5; + MD5_HASH_InitStructure.HASH_AlgoMode = HASH_AlgoMode_HASH; + MD5_HASH_InitStructure.HASH_DataType = HASH_DataType_8b; + HASH_Init(&MD5_HASH_InitStructure); + + /* Configure the number of valid bits in last word of the data */ + HASH_SetLastWordValidBitsNbr(nbvalidbitsdata); + + /* Write the Input block in the IN FIFO */ + for(i=0; i 64) + { + /* HMAC long Key */ + MD5_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_LongKey; + } + else + { + /* HMAC short Key */ + MD5_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; + } + HASH_Init(&MD5_HASH_InitStructure); + + /* Configure the number of valid bits in last word of the Key */ + HASH_SetLastWordValidBitsNbr(nbvalidbitskey); + + /* Write the Key */ + for(i=0; i
© COPYRIGHT 2012 STMicroelectronics
+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_hash.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup HASH + * @brief HASH driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define SHA1BUSY_TIMEOUT ((uint32_t) 0x00010000) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup HASH_Private_Functions + * @{ + */ + +/** @defgroup HASH_Group6 High Level SHA1 functions + * @brief High Level SHA1 Hash and HMAC functions + * +@verbatim + =============================================================================== + High Level SHA1 Hash and HMAC functions + =============================================================================== + + +@endverbatim + * @{ + */ + +/** + * @brief Compute the HASH SHA1 digest. + * @param Input: pointer to the Input buffer to be treated. + * @param Ilen: length of the Input buffer. + * @param Output: the returned digest + * @retval An ErrorStatus enumeration value: + * - SUCCESS: digest computation done + * - ERROR: digest computation failed + */ +ErrorStatus HASH_SHA1(uint8_t *Input, uint32_t Ilen, uint8_t Output[20]) +{ + HASH_InitTypeDef SHA1_HASH_InitStructure; + HASH_MsgDigest SHA1_MessageDigest; + __IO uint16_t nbvalidbitsdata = 0; + uint32_t i = 0; + __IO uint32_t counter = 0; + uint32_t busystatus = 0; + ErrorStatus status = SUCCESS; + uint32_t inputaddr = (uint32_t)Input; + uint32_t outputaddr = (uint32_t)Output; + + /* Number of valid bits in last word of the Input data */ + nbvalidbitsdata = 8 * (Ilen % 4); + + /* HASH peripheral initialization */ + HASH_DeInit(); + + /* HASH Configuration */ + SHA1_HASH_InitStructure.HASH_AlgoSelection = HASH_AlgoSelection_SHA1; + SHA1_HASH_InitStructure.HASH_AlgoMode = HASH_AlgoMode_HASH; + SHA1_HASH_InitStructure.HASH_DataType = HASH_DataType_8b; + HASH_Init(&SHA1_HASH_InitStructure); + + /* Configure the number of valid bits in last word of the data */ + HASH_SetLastWordValidBitsNbr(nbvalidbitsdata); + + /* Write the Input block in the IN FIFO */ + for(i=0; i 64) + { + /* HMAC long Key */ + SHA1_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_LongKey; + } + else + { + /* HMAC short Key */ + SHA1_HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; + } + HASH_Init(&SHA1_HASH_InitStructure); + + /* Configure the number of valid bits in last word of the Key */ + HASH_SetLastWordValidBitsNbr(nbvalidbitskey); + + /* Write the Key */ + for(i=0; iGPIO_Mode = GPIO_Mode_AF + * - Select the type, pull-up/pull-down and output speed via + * GPIO_PuPd, GPIO_OType and GPIO_Speed members + * - Call GPIO_Init() function + * Recommended configuration is Push-Pull, Pull-up, Open-Drain. + * Add an external pull up if necessary (typically 4.7 KOhm). + * + * 4. Program the Mode, duty cycle , Own address, Ack, Speed and Acknowledged + * Address using the I2C_Init() function. + * + * 5. Optionally you can enable/configure the following parameters without + * re-initialization (i.e there is no need to call again I2C_Init() function): + * - Enable the acknowledge feature using I2C_AcknowledgeConfig() function + * - Enable the dual addressing mode using I2C_DualAddressCmd() function + * - Enable the general call using the I2C_GeneralCallCmd() function + * - Enable the clock stretching using I2C_StretchClockCmd() function + * - Enable the fast mode duty cycle using the I2C_FastModeDutyCycleConfig() + * function. + * - Configure the NACK position for Master Receiver mode in case of + * 2 bytes reception using the function I2C_NACKPositionConfig(). + * - Enable the PEC Calculation using I2C_CalculatePEC() function + * - For SMBus Mode: + * - Enable the Address Resolution Protocol (ARP) using I2C_ARPCmd() function + * - Configure the SMBusAlert pin using I2C_SMBusAlertConfig() function + * + * 6. Enable the NVIC and the corresponding interrupt using the function + * I2C_ITConfig() if you need to use interrupt mode. + * + * 7. When using the DMA mode + * - Configure the DMA using DMA_Init() function + * - Active the needed channel Request using I2C_DMACmd() or + * I2C_DMALastTransferCmd() function. + * @note When using DMA mode, I2C interrupts may be used at the same time to + * control the communication flow (Start/Stop/Ack... events and errors). + * + * 8. Enable the I2C using the I2C_Cmd() function. + * + * 9. Enable the DMA using the DMA_Cmd() function when using DMA mode in the + * transfers. + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup I2C + * @brief I2C driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +#define CR1_CLEAR_MASK ((uint16_t)0xFBF5) /*I2C_ClockSpeed)); + assert_param(IS_I2C_MODE(I2C_InitStruct->I2C_Mode)); + assert_param(IS_I2C_DUTY_CYCLE(I2C_InitStruct->I2C_DutyCycle)); + assert_param(IS_I2C_OWN_ADDRESS1(I2C_InitStruct->I2C_OwnAddress1)); + assert_param(IS_I2C_ACK_STATE(I2C_InitStruct->I2C_Ack)); + assert_param(IS_I2C_ACKNOWLEDGE_ADDRESS(I2C_InitStruct->I2C_AcknowledgedAddress)); + +/*---------------------------- I2Cx CR2 Configuration ------------------------*/ + /* Get the I2Cx CR2 value */ + tmpreg = I2Cx->CR2; + /* Clear frequency FREQ[5:0] bits */ + tmpreg &= (uint16_t)~((uint16_t)I2C_CR2_FREQ); + /* Get pclk1 frequency value */ + RCC_GetClocksFreq(&rcc_clocks); + pclk1 = rcc_clocks.PCLK1_Frequency; + /* Set frequency bits depending on pclk1 value */ + freqrange = (uint16_t)(pclk1 / 1000000); + tmpreg |= freqrange; + /* Write to I2Cx CR2 */ + I2Cx->CR2 = tmpreg; + +/*---------------------------- I2Cx CCR Configuration ------------------------*/ + /* Disable the selected I2C peripheral to configure TRISE */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_PE); + /* Reset tmpreg value */ + /* Clear F/S, DUTY and CCR[11:0] bits */ + tmpreg = 0; + + /* Configure speed in standard mode */ + if (I2C_InitStruct->I2C_ClockSpeed <= 100000) + { + /* Standard mode speed calculate */ + result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed << 1)); + /* Test if CCR value is under 0x4*/ + if (result < 0x04) + { + /* Set minimum allowed value */ + result = 0x04; + } + /* Set speed value for standard mode */ + tmpreg |= result; + /* Set Maximum Rise Time for standard mode */ + I2Cx->TRISE = freqrange + 1; + } + /* Configure speed in fast mode */ + /* To use the I2C at 400 KHz (in fast mode), the PCLK1 frequency (I2C peripheral + input clock) must be a multiple of 10 MHz */ + else /*(I2C_InitStruct->I2C_ClockSpeed <= 400000)*/ + { + if (I2C_InitStruct->I2C_DutyCycle == I2C_DutyCycle_2) + { + /* Fast mode speed calculate: Tlow/Thigh = 2 */ + result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed * 3)); + } + else /*I2C_InitStruct->I2C_DutyCycle == I2C_DutyCycle_16_9*/ + { + /* Fast mode speed calculate: Tlow/Thigh = 16/9 */ + result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed * 25)); + /* Set DUTY bit */ + result |= I2C_DutyCycle_16_9; + } + + /* Test if CCR value is under 0x1*/ + if ((result & I2C_CCR_CCR) == 0) + { + /* Set minimum allowed value */ + result |= (uint16_t)0x0001; + } + /* Set speed value and set F/S bit for fast mode */ + tmpreg |= (uint16_t)(result | I2C_CCR_FS); + /* Set Maximum Rise Time for fast mode */ + I2Cx->TRISE = (uint16_t)(((freqrange * (uint16_t)300) / (uint16_t)1000) + (uint16_t)1); + } + + /* Write to I2Cx CCR */ + I2Cx->CCR = tmpreg; + /* Enable the selected I2C peripheral */ + I2Cx->CR1 |= I2C_CR1_PE; + +/*---------------------------- I2Cx CR1 Configuration ------------------------*/ + /* Get the I2Cx CR1 value */ + tmpreg = I2Cx->CR1; + /* Clear ACK, SMBTYPE and SMBUS bits */ + tmpreg &= CR1_CLEAR_MASK; + /* Configure I2Cx: mode and acknowledgement */ + /* Set SMBTYPE and SMBUS bits according to I2C_Mode value */ + /* Set ACK bit according to I2C_Ack value */ + tmpreg |= (uint16_t)((uint32_t)I2C_InitStruct->I2C_Mode | I2C_InitStruct->I2C_Ack); + /* Write to I2Cx CR1 */ + I2Cx->CR1 = tmpreg; + +/*---------------------------- I2Cx OAR1 Configuration -----------------------*/ + /* Set I2Cx Own Address1 and acknowledged address */ + I2Cx->OAR1 = (I2C_InitStruct->I2C_AcknowledgedAddress | I2C_InitStruct->I2C_OwnAddress1); +} + +/** + * @brief Fills each I2C_InitStruct member with its default value. + * @param I2C_InitStruct: pointer to an I2C_InitTypeDef structure which will be initialized. + * @retval None + */ +void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct) +{ +/*---------------- Reset I2C init structure parameters values ----------------*/ + /* initialize the I2C_ClockSpeed member */ + I2C_InitStruct->I2C_ClockSpeed = 5000; + /* Initialize the I2C_Mode member */ + I2C_InitStruct->I2C_Mode = I2C_Mode_I2C; + /* Initialize the I2C_DutyCycle member */ + I2C_InitStruct->I2C_DutyCycle = I2C_DutyCycle_2; + /* Initialize the I2C_OwnAddress1 member */ + I2C_InitStruct->I2C_OwnAddress1 = 0; + /* Initialize the I2C_Ack member */ + I2C_InitStruct->I2C_Ack = I2C_Ack_Disable; + /* Initialize the I2C_AcknowledgedAddress member */ + I2C_InitStruct->I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +} + +/** + * @brief Enables or disables the specified I2C peripheral. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2Cx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C peripheral */ + I2Cx->CR1 |= I2C_CR1_PE; + } + else + { + /* Disable the selected I2C peripheral */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_PE); + } +} + +/** + * @brief Generates I2Cx communication START condition. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2C START condition generation. + * This parameter can be: ENABLE or DISABLE. + * @retval None. + */ +void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Generate a START condition */ + I2Cx->CR1 |= I2C_CR1_START; + } + else + { + /* Disable the START condition generation */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_START); + } +} + +/** + * @brief Generates I2Cx communication STOP condition. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2C STOP condition generation. + * This parameter can be: ENABLE or DISABLE. + * @retval None. + */ +void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Generate a STOP condition */ + I2Cx->CR1 |= I2C_CR1_STOP; + } + else + { + /* Disable the STOP condition generation */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_STOP); + } +} + +/** + * @brief Transmits the address byte to select the slave device. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param Address: specifies the slave address which will be transmitted + * @param I2C_Direction: specifies whether the I2C device will be a Transmitter + * or a Receiver. + * This parameter can be one of the following values + * @arg I2C_Direction_Transmitter: Transmitter mode + * @arg I2C_Direction_Receiver: Receiver mode + * @retval None. + */ +void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_DIRECTION(I2C_Direction)); + /* Test on the direction to set/reset the read/write bit */ + if (I2C_Direction != I2C_Direction_Transmitter) + { + /* Set the address bit0 for read */ + Address |= I2C_OAR1_ADD0; + } + else + { + /* Reset the address bit0 for write */ + Address &= (uint8_t)~((uint8_t)I2C_OAR1_ADD0); + } + /* Send the address */ + I2Cx->DR = Address; +} + +/** + * @brief Enables or disables the specified I2C acknowledge feature. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2C Acknowledgement. + * This parameter can be: ENABLE or DISABLE. + * @retval None. + */ +void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the acknowledgement */ + I2Cx->CR1 |= I2C_CR1_ACK; + } + else + { + /* Disable the acknowledgement */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ACK); + } +} + +/** + * @brief Configures the specified I2C own address2. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param Address: specifies the 7bit I2C own address2. + * @retval None. + */ +void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address) +{ + uint16_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + + /* Get the old register value */ + tmpreg = I2Cx->OAR2; + + /* Reset I2Cx Own address2 bit [7:1] */ + tmpreg &= (uint16_t)~((uint16_t)I2C_OAR2_ADD2); + + /* Set I2Cx Own address2 */ + tmpreg |= (uint16_t)((uint16_t)Address & (uint16_t)0x00FE); + + /* Store the new register value */ + I2Cx->OAR2 = tmpreg; +} + +/** + * @brief Enables or disables the specified I2C dual addressing mode. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2C dual addressing mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable dual addressing mode */ + I2Cx->OAR2 |= I2C_OAR2_ENDUAL; + } + else + { + /* Disable dual addressing mode */ + I2Cx->OAR2 &= (uint16_t)~((uint16_t)I2C_OAR2_ENDUAL); + } +} + +/** + * @brief Enables or disables the specified I2C general call feature. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2C General call. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable generall call */ + I2Cx->CR1 |= I2C_CR1_ENGC; + } + else + { + /* Disable generall call */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ENGC); + } +} + +/** + * @brief Enables or disables the specified I2C software reset. + * @note When software reset is enabled, the I2C IOs are released (this can + * be useful to recover from bus errors). + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2C software reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Peripheral under reset */ + I2Cx->CR1 |= I2C_CR1_SWRST; + } + else + { + /* Peripheral not under reset */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_SWRST); + } +} + +/** + * @brief Enables or disables the specified I2C Clock stretching. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2Cx Clock stretching. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState == DISABLE) + { + /* Enable the selected I2C Clock stretching */ + I2Cx->CR1 |= I2C_CR1_NOSTRETCH; + } + else + { + /* Disable the selected I2C Clock stretching */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_NOSTRETCH); + } +} + +/** + * @brief Selects the specified I2C fast mode duty cycle. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_DutyCycle: specifies the fast mode duty cycle. + * This parameter can be one of the following values: + * @arg I2C_DutyCycle_2: I2C fast mode Tlow/Thigh = 2 + * @arg I2C_DutyCycle_16_9: I2C fast mode Tlow/Thigh = 16/9 + * @retval None + */ +void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_DUTY_CYCLE(I2C_DutyCycle)); + if (I2C_DutyCycle != I2C_DutyCycle_16_9) + { + /* I2C fast mode Tlow/Thigh=2 */ + I2Cx->CCR &= I2C_DutyCycle_2; + } + else + { + /* I2C fast mode Tlow/Thigh=16/9 */ + I2Cx->CCR |= I2C_DutyCycle_16_9; + } +} + +/** + * @brief Selects the specified I2C NACK position in master receiver mode. + * @note This function is useful in I2C Master Receiver mode when the number + * of data to be received is equal to 2. In this case, this function + * should be called (with parameter I2C_NACKPosition_Next) before data + * reception starts,as described in the 2-byte reception procedure + * recommended in Reference Manual in Section: Master receiver. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_NACKPosition: specifies the NACK position. + * This parameter can be one of the following values: + * @arg I2C_NACKPosition_Next: indicates that the next byte will be the last + * received byte. + * @arg I2C_NACKPosition_Current: indicates that current byte is the last + * received byte. + * + * @note This function configures the same bit (POS) as I2C_PECPositionConfig() + * but is intended to be used in I2C mode while I2C_PECPositionConfig() + * is intended to used in SMBUS mode. + * + * @retval None + */ +void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_NACK_POSITION(I2C_NACKPosition)); + + /* Check the input parameter */ + if (I2C_NACKPosition == I2C_NACKPosition_Next) + { + /* Next byte in shift register is the last received byte */ + I2Cx->CR1 |= I2C_NACKPosition_Next; + } + else + { + /* Current byte in shift register is the last received byte */ + I2Cx->CR1 &= I2C_NACKPosition_Current; + } +} + +/** + * @brief Drives the SMBusAlert pin high or low for the specified I2C. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_SMBusAlert: specifies SMBAlert pin level. + * This parameter can be one of the following values: + * @arg I2C_SMBusAlert_Low: SMBAlert pin driven low + * @arg I2C_SMBusAlert_High: SMBAlert pin driven high + * @retval None + */ +void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_SMBUS_ALERT(I2C_SMBusAlert)); + if (I2C_SMBusAlert == I2C_SMBusAlert_Low) + { + /* Drive the SMBusAlert pin Low */ + I2Cx->CR1 |= I2C_SMBusAlert_Low; + } + else + { + /* Drive the SMBusAlert pin High */ + I2Cx->CR1 &= I2C_SMBusAlert_High; + } +} + +/** + * @brief Enables or disables the specified I2C ARP. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2Cx ARP. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C ARP */ + I2Cx->CR1 |= I2C_CR1_ENARP; + } + else + { + /* Disable the selected I2C ARP */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ENARP); + } +} +/** + * @} + */ + +/** @defgroup I2C_Group2 Data transfers functions + * @brief Data transfers functions + * +@verbatim + =============================================================================== + Data transfers functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Sends a data byte through the I2Cx peripheral. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param Data: Byte to be transmitted.. + * @retval None + */ +void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Write in the DR register the data to be sent */ + I2Cx->DR = Data; +} + +/** + * @brief Returns the most recent received data by the I2Cx peripheral. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @retval The value of the received data. + */ +uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Return the data in the DR register */ + return (uint8_t)I2Cx->DR; +} + +/** + * @} + */ + +/** @defgroup I2C_Group3 PEC management functions + * @brief PEC management functions + * +@verbatim + =============================================================================== + PEC management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified I2C PEC transfer. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2C PEC transmission. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C PEC transmission */ + I2Cx->CR1 |= I2C_CR1_PEC; + } + else + { + /* Disable the selected I2C PEC transmission */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_PEC); + } +} + +/** + * @brief Selects the specified I2C PEC position. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_PECPosition: specifies the PEC position. + * This parameter can be one of the following values: + * @arg I2C_PECPosition_Next: indicates that the next byte is PEC + * @arg I2C_PECPosition_Current: indicates that current byte is PEC + * + * @note This function configures the same bit (POS) as I2C_NACKPositionConfig() + * but is intended to be used in SMBUS mode while I2C_NACKPositionConfig() + * is intended to used in I2C mode. + * + * @retval None + */ +void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_PEC_POSITION(I2C_PECPosition)); + if (I2C_PECPosition == I2C_PECPosition_Next) + { + /* Next byte in shift register is PEC */ + I2Cx->CR1 |= I2C_PECPosition_Next; + } + else + { + /* Current byte in shift register is PEC */ + I2Cx->CR1 &= I2C_PECPosition_Current; + } +} + +/** + * @brief Enables or disables the PEC value calculation of the transferred bytes. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2Cx PEC value calculation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C PEC calculation */ + I2Cx->CR1 |= I2C_CR1_ENPEC; + } + else + { + /* Disable the selected I2C PEC calculation */ + I2Cx->CR1 &= (uint16_t)~((uint16_t)I2C_CR1_ENPEC); + } +} + +/** + * @brief Returns the PEC value for the specified I2C. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @retval The PEC value. + */ +uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Return the selected I2C PEC value */ + return ((I2Cx->SR2) >> 8); +} + +/** + * @} + */ + +/** @defgroup I2C_Group4 DMA transfers management functions + * @brief DMA transfers management functions + * +@verbatim + =============================================================================== + DMA transfers management functions + =============================================================================== + This section provides functions allowing to configure the I2C DMA channels + requests. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified I2C DMA requests. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2C DMA transfer. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C DMA requests */ + I2Cx->CR2 |= I2C_CR2_DMAEN; + } + else + { + /* Disable the selected I2C DMA requests */ + I2Cx->CR2 &= (uint16_t)~((uint16_t)I2C_CR2_DMAEN); + } +} + +/** + * @brief Specifies that the next DMA transfer is the last one. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param NewState: new state of the I2C DMA last transfer. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Next DMA transfer is the last transfer */ + I2Cx->CR2 |= I2C_CR2_LAST; + } + else + { + /* Next DMA transfer is not the last transfer */ + I2Cx->CR2 &= (uint16_t)~((uint16_t)I2C_CR2_LAST); + } +} + +/** + * @} + */ + +/** @defgroup I2C_Group5 Interrupts events and flags management functions + * @brief Interrupts, events and flags management functions + * +@verbatim + =============================================================================== + Interrupts, events and flags management functions + =============================================================================== + This section provides functions allowing to configure the I2C Interrupts + sources and check or clear the flags or pending bits status. + The user should identify which mode will be used in his application to manage + the communication: Polling mode, Interrupt mode or DMA mode. + + =============================================================================== + I2C State Monitoring Functions + =============================================================================== + This I2C driver provides three different ways for I2C state monitoring + depending on the application requirements and constraints: + + + 1. Basic state monitoring (Using I2C_CheckEvent() function) + ----------------------------------------------------------- + It compares the status registers (SR1 and SR2) content to a given event + (can be the combination of one or more flags). + It returns SUCCESS if the current status includes the given flags + and returns ERROR if one or more flags are missing in the current status. + + - When to use + - This function is suitable for most applications as well as for startup + activity since the events are fully described in the product reference + manual (RM0033). + - It is also suitable for users who need to define their own events. + + - Limitations + - If an error occurs (ie. error flags are set besides to the monitored + flags), the I2C_CheckEvent() function may return SUCCESS despite + the communication hold or corrupted real state. + In this case, it is advised to use error interrupts to monitor + the error events and handle them in the interrupt IRQ handler. + + @note + For error management, it is advised to use the following functions: + - I2C_ITConfig() to configure and enable the error interrupts (I2C_IT_ERR). + - I2Cx_ER_IRQHandler() which is called when the error interrupt occurs. + Where x is the peripheral instance (I2C1, I2C2 ...) + - I2C_GetFlagStatus() or I2C_GetITStatus() to be called into the + I2Cx_ER_IRQHandler() function in order to determine which error occurred. + - I2C_ClearFlag() or I2C_ClearITPendingBit() and/or I2C_SoftwareResetCmd() + and/or I2C_GenerateStop() in order to clear the error flag and source + and return to correct communication status. + + + 2. Advanced state monitoring (Using the function I2C_GetLastEvent()) + -------------------------------------------------------------------- + Using the function I2C_GetLastEvent() which returns the image of both status + registers in a single word (uint32_t) (Status Register 2 value is shifted left + by 16 bits and concatenated to Status Register 1). + + - When to use + - This function is suitable for the same applications above but it + allows to overcome the mentioned limitation of I2C_GetFlagStatus() + function. + - The returned value could be compared to events already defined in + the library (stm32f2xx_i2c.h) or to custom values defined by user. + This function is suitable when multiple flags are monitored at the + same time. + - At the opposite of I2C_CheckEvent() function, this function allows + user to choose when an event is accepted (when all events flags are + set and no other flags are set or just when the needed flags are set + like I2C_CheckEvent() function. + + - Limitations + - User may need to define his own events. + - Same remark concerning the error management is applicable for this + function if user decides to check only regular communication flags + (and ignores error flags). + + + 3. Flag-based state monitoring (Using the function I2C_GetFlagStatus()) + ----------------------------------------------------------------------- + + Using the function I2C_GetFlagStatus() which simply returns the status of + one single flag (ie. I2C_FLAG_RXNE ...). + + - When to use + - This function could be used for specific applications or in debug + phase. + - It is suitable when only one flag checking is needed (most I2C + events are monitored through multiple flags). + - Limitations: + - When calling this function, the Status register is accessed. + Some flags are cleared when the status register is accessed. + So checking the status of one Flag, may clear other ones. + - Function may need to be called twice or more in order to monitor + one single event. + + For detailed description of Events, please refer to section I2C_Events in + stm32f2xx_i2c.h file. + +@endverbatim + * @{ + */ + +/** + * @brief Reads the specified I2C register and returns its value. + * @param I2C_Register: specifies the register to read. + * This parameter can be one of the following values: + * @arg I2C_Register_CR1: CR1 register. + * @arg I2C_Register_CR2: CR2 register. + * @arg I2C_Register_OAR1: OAR1 register. + * @arg I2C_Register_OAR2: OAR2 register. + * @arg I2C_Register_DR: DR register. + * @arg I2C_Register_SR1: SR1 register. + * @arg I2C_Register_SR2: SR2 register. + * @arg I2C_Register_CCR: CCR register. + * @arg I2C_Register_TRISE: TRISE register. + * @retval The value of the read register. + */ +uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_REGISTER(I2C_Register)); + + tmp = (uint32_t) I2Cx; + tmp += I2C_Register; + + /* Return the selected register value */ + return (*(__IO uint16_t *) tmp); +} + +/** + * @brief Enables or disables the specified I2C interrupts. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_IT: specifies the I2C interrupts sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg I2C_IT_BUF: Buffer interrupt mask + * @arg I2C_IT_EVT: Event interrupt mask + * @arg I2C_IT_ERR: Error interrupt mask + * @param NewState: new state of the specified I2C interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_I2C_CONFIG_IT(I2C_IT)); + + if (NewState != DISABLE) + { + /* Enable the selected I2C interrupts */ + I2Cx->CR2 |= I2C_IT; + } + else + { + /* Disable the selected I2C interrupts */ + I2Cx->CR2 &= (uint16_t)~I2C_IT; + } +} + +/* + =============================================================================== + 1. Basic state monitoring + =============================================================================== + */ + +/** + * @brief Checks whether the last I2Cx Event is equal to the one passed + * as parameter. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_EVENT: specifies the event to be checked. + * This parameter can be one of the following values: + * @arg I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED: EV1 + * @arg I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED: EV1 + * @arg I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED: EV1 + * @arg I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED: EV1 + * @arg I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED: EV1 + * @arg I2C_EVENT_SLAVE_BYTE_RECEIVED: EV2 + * @arg (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF): EV2 + * @arg (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL): EV2 + * @arg I2C_EVENT_SLAVE_BYTE_TRANSMITTED: EV3 + * @arg (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF): EV3 + * @arg (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL): EV3 + * @arg I2C_EVENT_SLAVE_ACK_FAILURE: EV3_2 + * @arg I2C_EVENT_SLAVE_STOP_DETECTED: EV4 + * @arg I2C_EVENT_MASTER_MODE_SELECT: EV5 + * @arg I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED: EV6 + * @arg I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED: EV6 + * @arg I2C_EVENT_MASTER_BYTE_RECEIVED: EV7 + * @arg I2C_EVENT_MASTER_BYTE_TRANSMITTING: EV8 + * @arg I2C_EVENT_MASTER_BYTE_TRANSMITTED: EV8_2 + * @arg I2C_EVENT_MASTER_MODE_ADDRESS10: EV9 + * + * @note For detailed description of Events, please refer to section I2C_Events + * in stm32f2xx_i2c.h file. + * + * @retval An ErrorStatus enumeration value: + * - SUCCESS: Last event is equal to the I2C_EVENT + * - ERROR: Last event is different from the I2C_EVENT + */ +ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT) +{ + uint32_t lastevent = 0; + uint32_t flag1 = 0, flag2 = 0; + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_EVENT(I2C_EVENT)); + + /* Read the I2Cx status register */ + flag1 = I2Cx->SR1; + flag2 = I2Cx->SR2; + flag2 = flag2 << 16; + + /* Get the last event value from I2C status register */ + lastevent = (flag1 | flag2) & FLAG_MASK; + + /* Check whether the last event contains the I2C_EVENT */ + if ((lastevent & I2C_EVENT) == I2C_EVENT) + { + /* SUCCESS: last event is equal to I2C_EVENT */ + status = SUCCESS; + } + else + { + /* ERROR: last event is different from I2C_EVENT */ + status = ERROR; + } + /* Return status */ + return status; +} + +/* + =============================================================================== + 2. Advanced state monitoring + =============================================================================== + */ + +/** + * @brief Returns the last I2Cx Event. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * + * @note For detailed description of Events, please refer to section I2C_Events + * in stm32f2xx_i2c.h file. + * + * @retval The last event + */ +uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx) +{ + uint32_t lastevent = 0; + uint32_t flag1 = 0, flag2 = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + + /* Read the I2Cx status register */ + flag1 = I2Cx->SR1; + flag2 = I2Cx->SR2; + flag2 = flag2 << 16; + + /* Get the last event value from I2C status register */ + lastevent = (flag1 | flag2) & FLAG_MASK; + + /* Return status */ + return lastevent; +} + +/* + =============================================================================== + 3. Flag-based state monitoring + =============================================================================== + */ + +/** + * @brief Checks whether the specified I2C flag is set or not. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg I2C_FLAG_DUALF: Dual flag (Slave mode) + * @arg I2C_FLAG_SMBHOST: SMBus host header (Slave mode) + * @arg I2C_FLAG_SMBDEFAULT: SMBus default header (Slave mode) + * @arg I2C_FLAG_GENCALL: General call header flag (Slave mode) + * @arg I2C_FLAG_TRA: Transmitter/Receiver flag + * @arg I2C_FLAG_BUSY: Bus busy flag + * @arg I2C_FLAG_MSL: Master/Slave flag + * @arg I2C_FLAG_SMBALERT: SMBus Alert flag + * @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag + * @arg I2C_FLAG_PECERR: PEC error in reception flag + * @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode) + * @arg I2C_FLAG_AF: Acknowledge failure flag + * @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode) + * @arg I2C_FLAG_BERR: Bus error flag + * @arg I2C_FLAG_TXE: Data register empty flag (Transmitter) + * @arg I2C_FLAG_RXNE: Data register not empty (Receiver) flag + * @arg I2C_FLAG_STOPF: Stop detection flag (Slave mode) + * @arg I2C_FLAG_ADD10: 10-bit header sent flag (Master mode) + * @arg I2C_FLAG_BTF: Byte transfer finished flag + * @arg I2C_FLAG_ADDR: Address sent flag (Master mode) "ADSL" + * Address matched flag (Slave mode)"ENDAD" + * @arg I2C_FLAG_SB: Start bit flag (Master mode) + * @retval The new state of I2C_FLAG (SET or RESET). + */ +FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG) +{ + FlagStatus bitstatus = RESET; + __IO uint32_t i2creg = 0, i2cxbase = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_GET_FLAG(I2C_FLAG)); + + /* Get the I2Cx peripheral base address */ + i2cxbase = (uint32_t)I2Cx; + + /* Read flag register index */ + i2creg = I2C_FLAG >> 28; + + /* Get bit[23:0] of the flag */ + I2C_FLAG &= FLAG_MASK; + + if(i2creg != 0) + { + /* Get the I2Cx SR1 register address */ + i2cxbase += 0x14; + } + else + { + /* Flag in I2Cx SR2 Register */ + I2C_FLAG = (uint32_t)(I2C_FLAG >> 16); + /* Get the I2Cx SR2 register address */ + i2cxbase += 0x18; + } + + if(((*(__IO uint32_t *)i2cxbase) & I2C_FLAG) != (uint32_t)RESET) + { + /* I2C_FLAG is set */ + bitstatus = SET; + } + else + { + /* I2C_FLAG is reset */ + bitstatus = RESET; + } + + /* Return the I2C_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the I2Cx's pending flags. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg I2C_FLAG_SMBALERT: SMBus Alert flag + * @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag + * @arg I2C_FLAG_PECERR: PEC error in reception flag + * @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode) + * @arg I2C_FLAG_AF: Acknowledge failure flag + * @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode) + * @arg I2C_FLAG_BERR: Bus error flag + * + * @note STOPF (STOP detection) is cleared by software sequence: a read operation + * to I2C_SR1 register (I2C_GetFlagStatus()) followed by a write operation + * to I2C_CR1 register (I2C_Cmd() to re-enable the I2C peripheral). + * @note ADD10 (10-bit header sent) is cleared by software sequence: a read + * operation to I2C_SR1 (I2C_GetFlagStatus()) followed by writing the + * second byte of the address in DR register. + * @note BTF (Byte Transfer Finished) is cleared by software sequence: a read + * operation to I2C_SR1 register (I2C_GetFlagStatus()) followed by a + * read/write to I2C_DR register (I2C_SendData()). + * @note ADDR (Address sent) is cleared by software sequence: a read operation to + * I2C_SR1 register (I2C_GetFlagStatus()) followed by a read operation to + * I2C_SR2 register ((void)(I2Cx->SR2)). + * @note SB (Start Bit) is cleared software sequence: a read operation to I2C_SR1 + * register (I2C_GetFlagStatus()) followed by a write operation to I2C_DR + * register (I2C_SendData()). + * + * @retval None + */ +void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG) +{ + uint32_t flagpos = 0; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_CLEAR_FLAG(I2C_FLAG)); + /* Get the I2C flag position */ + flagpos = I2C_FLAG & FLAG_MASK; + /* Clear the selected I2C flag */ + I2Cx->SR1 = (uint16_t)~flagpos; +} + +/** + * @brief Checks whether the specified I2C interrupt has occurred or not. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_IT: specifies the interrupt source to check. + * This parameter can be one of the following values: + * @arg I2C_IT_SMBALERT: SMBus Alert flag + * @arg I2C_IT_TIMEOUT: Timeout or Tlow error flag + * @arg I2C_IT_PECERR: PEC error in reception flag + * @arg I2C_IT_OVR: Overrun/Underrun flag (Slave mode) + * @arg I2C_IT_AF: Acknowledge failure flag + * @arg I2C_IT_ARLO: Arbitration lost flag (Master mode) + * @arg I2C_IT_BERR: Bus error flag + * @arg I2C_IT_TXE: Data register empty flag (Transmitter) + * @arg I2C_IT_RXNE: Data register not empty (Receiver) flag + * @arg I2C_IT_STOPF: Stop detection flag (Slave mode) + * @arg I2C_IT_ADD10: 10-bit header sent flag (Master mode) + * @arg I2C_IT_BTF: Byte transfer finished flag + * @arg I2C_IT_ADDR: Address sent flag (Master mode) "ADSL" + * Address matched flag (Slave mode)"ENDAD" + * @arg I2C_IT_SB: Start bit flag (Master mode) + * @retval The new state of I2C_IT (SET or RESET). + */ +ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT) +{ + ITStatus bitstatus = RESET; + uint32_t enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_GET_IT(I2C_IT)); + + /* Check if the interrupt source is enabled or not */ + enablestatus = (uint32_t)(((I2C_IT & ITEN_MASK) >> 16) & (I2Cx->CR2)) ; + + /* Get bit[23:0] of the flag */ + I2C_IT &= FLAG_MASK; + + /* Check the status of the specified I2C flag */ + if (((I2Cx->SR1 & I2C_IT) != (uint32_t)RESET) && enablestatus) + { + /* I2C_IT is set */ + bitstatus = SET; + } + else + { + /* I2C_IT is reset */ + bitstatus = RESET; + } + /* Return the I2C_IT status */ + return bitstatus; +} + +/** + * @brief Clears the I2Cx's interrupt pending bits. + * @param I2Cx: where x can be 1, 2 or 3 to select the I2C peripheral. + * @param I2C_IT: specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg I2C_IT_SMBALERT: SMBus Alert interrupt + * @arg I2C_IT_TIMEOUT: Timeout or Tlow error interrupt + * @arg I2C_IT_PECERR: PEC error in reception interrupt + * @arg I2C_IT_OVR: Overrun/Underrun interrupt (Slave mode) + * @arg I2C_IT_AF: Acknowledge failure interrupt + * @arg I2C_IT_ARLO: Arbitration lost interrupt (Master mode) + * @arg I2C_IT_BERR: Bus error interrupt + * + * @note STOPF (STOP detection) is cleared by software sequence: a read operation + * to I2C_SR1 register (I2C_GetITStatus()) followed by a write operation to + * I2C_CR1 register (I2C_Cmd() to re-enable the I2C peripheral). + * @note ADD10 (10-bit header sent) is cleared by software sequence: a read + * operation to I2C_SR1 (I2C_GetITStatus()) followed by writing the second + * byte of the address in I2C_DR register. + * @note BTF (Byte Transfer Finished) is cleared by software sequence: a read + * operation to I2C_SR1 register (I2C_GetITStatus()) followed by a + * read/write to I2C_DR register (I2C_SendData()). + * @note ADDR (Address sent) is cleared by software sequence: a read operation to + * I2C_SR1 register (I2C_GetITStatus()) followed by a read operation to + * I2C_SR2 register ((void)(I2Cx->SR2)). + * @note SB (Start Bit) is cleared by software sequence: a read operation to + * I2C_SR1 register (I2C_GetITStatus()) followed by a write operation to + * I2C_DR register (I2C_SendData()). + * @retval None + */ +void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT) +{ + uint32_t flagpos = 0; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_CLEAR_IT(I2C_IT)); + + /* Get the I2C flag position */ + flagpos = I2C_IT & FLAG_MASK; + + /* Clear the selected I2C flag */ + I2Cx->SR1 = (uint16_t)~flagpos; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_iwdg.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_iwdg.c new file mode 100644 index 000000000..de89eac04 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_iwdg.c @@ -0,0 +1,269 @@ +/** + ****************************************************************************** + * @file stm32f2xx_iwdg.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Independent watchdog (IWDG) peripheral: + * - Prescaler and Counter configuration + * - IWDG activation + * - Flag management + * + * @verbatim + * + * =================================================================== + * IWDG features + * =================================================================== + * + * The IWDG can be started by either software or hardware (configurable + * through option byte). + * + * The IWDG is clocked by its own dedicated low-speed clock (LSI) and + * thus stays active even if the main clock fails. + * Once the IWDG is started, the LSI is forced ON and cannot be disabled + * (LSI cannot be disabled too), and the counter starts counting down from + * the reset value of 0xFFF. When it reaches the end of count value (0x000) + * a system reset is generated. + * The IWDG counter should be reloaded at regular intervals to prevent + * an MCU reset. + * + * The IWDG is implemented in the VDD voltage domain that is still functional + * in STOP and STANDBY mode (IWDG reset can wake-up from STANDBY). + * + * IWDGRST flag in RCC_CSR register can be used to inform when a IWDG + * reset occurs. + * + * Min-max timeout value @32KHz (LSI): ~125us / ~32.7s + * The IWDG timeout may vary due to LSI frequency dispersion. STM32F2xx + * devices provide the capability to measure the LSI frequency (LSI clock + * connected internally to TIM5 CH4 input capture). The measured value + * can be used to have an IWDG timeout with an acceptable accuracy. + * For more information, please refer to the STM32F2xx Reference manual + * + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable write access to IWDG_PR and IWDG_RLR registers using + * IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable) function + * + * 2. Configure the IWDG prescaler using IWDG_SetPrescaler() function + * + * 3. Configure the IWDG counter value using IWDG_SetReload() function. + * This value will be loaded in the IWDG counter each time the counter + * is reloaded, then the IWDG will start counting down from this value. + * + * 4. Start the IWDG using IWDG_Enable() function, when the IWDG is used + * in software mode (no need to enable the LSI, it will be enabled + * by hardware) + * + * 5. Then the application program must reload the IWDG counter at regular + * intervals during normal operation to prevent an MCU reset, using + * IWDG_ReloadCounter() function. + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_iwdg.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup IWDG + * @brief IWDG driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* KR register bit mask */ +#define KR_KEY_RELOAD ((uint16_t)0xAAAA) +#define KR_KEY_ENABLE ((uint16_t)0xCCCC) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup IWDG_Private_Functions + * @{ + */ + +/** @defgroup IWDG_Group1 Prescaler and Counter configuration functions + * @brief Prescaler and Counter configuration functions + * +@verbatim + =============================================================================== + Prescaler and Counter configuration functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables write access to IWDG_PR and IWDG_RLR registers. + * @param IWDG_WriteAccess: new state of write access to IWDG_PR and IWDG_RLR registers. + * This parameter can be one of the following values: + * @arg IWDG_WriteAccess_Enable: Enable write access to IWDG_PR and IWDG_RLR registers + * @arg IWDG_WriteAccess_Disable: Disable write access to IWDG_PR and IWDG_RLR registers + * @retval None + */ +void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess) +{ + /* Check the parameters */ + assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess)); + IWDG->KR = IWDG_WriteAccess; +} + +/** + * @brief Sets IWDG Prescaler value. + * @param IWDG_Prescaler: specifies the IWDG Prescaler value. + * This parameter can be one of the following values: + * @arg IWDG_Prescaler_4: IWDG prescaler set to 4 + * @arg IWDG_Prescaler_8: IWDG prescaler set to 8 + * @arg IWDG_Prescaler_16: IWDG prescaler set to 16 + * @arg IWDG_Prescaler_32: IWDG prescaler set to 32 + * @arg IWDG_Prescaler_64: IWDG prescaler set to 64 + * @arg IWDG_Prescaler_128: IWDG prescaler set to 128 + * @arg IWDG_Prescaler_256: IWDG prescaler set to 256 + * @retval None + */ +void IWDG_SetPrescaler(uint8_t IWDG_Prescaler) +{ + /* Check the parameters */ + assert_param(IS_IWDG_PRESCALER(IWDG_Prescaler)); + IWDG->PR = IWDG_Prescaler; +} + +/** + * @brief Sets IWDG Reload value. + * @param Reload: specifies the IWDG Reload value. + * This parameter must be a number between 0 and 0x0FFF. + * @retval None + */ +void IWDG_SetReload(uint16_t Reload) +{ + /* Check the parameters */ + assert_param(IS_IWDG_RELOAD(Reload)); + IWDG->RLR = Reload; +} + +/** + * @brief Reloads IWDG counter with value defined in the reload register + * (write access to IWDG_PR and IWDG_RLR registers disabled). + * @param None + * @retval None + */ +void IWDG_ReloadCounter(void) +{ + IWDG->KR = KR_KEY_RELOAD; +} + +/** + * @} + */ + +/** @defgroup IWDG_Group2 IWDG activation function + * @brief IWDG activation function + * +@verbatim + =============================================================================== + IWDG activation function + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables IWDG (write access to IWDG_PR and IWDG_RLR registers disabled). + * @param None + * @retval None + */ +void IWDG_Enable(void) +{ + IWDG->KR = KR_KEY_ENABLE; +} + +/** + * @} + */ + +/** @defgroup IWDG_Group3 Flag management function + * @brief Flag management function + * +@verbatim + =============================================================================== + Flag management function + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Checks whether the specified IWDG flag is set or not. + * @param IWDG_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg IWDG_FLAG_PVU: Prescaler Value Update on going + * @arg IWDG_FLAG_RVU: Reload Value Update on going + * @retval The new state of IWDG_FLAG (SET or RESET). + */ +FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_IWDG_FLAG(IWDG_FLAG)); + if ((IWDG->SR & IWDG_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_pwr.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_pwr.c new file mode 100644 index 000000000..1c84cf75d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_pwr.c @@ -0,0 +1,620 @@ +/** + ****************************************************************************** + * @file stm32f2xx_pwr.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Power Controller (PWR) peripheral: + * - Backup Domain Access + * - PVD configuration + * - WakeUp pin configuration + * - Backup Regulator configuration + * - FLASH Power Down configuration + * - Low Power modes configuration + * - Flags management + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup PWR + * @brief PWR driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* --------- PWR registers bit address in the alias region ---------- */ +#define PWR_OFFSET (PWR_BASE - PERIPH_BASE) + +/* --- CR Register ---*/ + +/* Alias word address of DBP bit */ +#define CR_OFFSET (PWR_OFFSET + 0x00) +#define DBP_BitNumber 0x08 +#define CR_DBP_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (DBP_BitNumber * 4)) + +/* Alias word address of PVDE bit */ +#define PVDE_BitNumber 0x04 +#define CR_PVDE_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PVDE_BitNumber * 4)) + +/* Alias word address of FPDS bit */ +#define FPDS_BitNumber 0x09 +#define CR_FPDS_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (FPDS_BitNumber * 4)) + +/* --- CSR Register ---*/ + +/* Alias word address of EWUP bit */ +#define CSR_OFFSET (PWR_OFFSET + 0x04) +#define EWUP_BitNumber 0x08 +#define CSR_EWUP_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (EWUP_BitNumber * 4)) + +/* Alias word address of BRE bit */ +#define BRE_BitNumber 0x09 +#define CSR_BRE_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (BRE_BitNumber * 4)) + +/* ------------------ PWR registers bit mask ------------------------ */ + +/* CR register bit mask */ +#define CR_DS_MASK ((uint32_t)0xFFFFFFFC) +#define CR_PLS_MASK ((uint32_t)0xFFFFFF1F) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup PWR_Private_Functions + * @{ + */ + +/** @defgroup PWR_Group1 Backup Domain Access function + * @brief Backup Domain Access function + * +@verbatim + =============================================================================== + Backup Domain Access function + =============================================================================== + + After reset, the backup domain (RTC registers, RTC backup data + registers and backup SRAM) is protected against possible unwanted + write accesses. + To enable access to the RTC Domain and RTC registers, proceed as follows: + - Enable the Power Controller (PWR) APB1 interface clock using the + RCC_APB1PeriphClockCmd() function. + - Enable access to RTC domain using the PWR_BackupAccessCmd() function. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the PWR peripheral registers to their default reset values. + * @param None + * @retval None + */ +void PWR_DeInit(void) +{ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, DISABLE); +} + +/** + * @brief Enables or disables access to the backup domain (RTC registers, RTC + * backup data registers and backup SRAM). + * @note If the HSE divided by 2, 3, ..31 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @param NewState: new state of the access to the backup domain. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void PWR_BackupAccessCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CR_DBP_BB = (uint32_t)NewState; +} + +/** + * @} + */ + +/** @defgroup PWR_Group2 PVD configuration functions + * @brief PVD configuration functions + * +@verbatim + =============================================================================== + PVD configuration functions + =============================================================================== + + - The PVD is used to monitor the VDD power supply by comparing it to a threshold + selected by the PVD Level (PLS[2:0] bits in the PWR_CR). + - A PVDO flag is available to indicate if VDD/VDDA is higher or lower than the + PVD threshold. This event is internally connected to the EXTI line16 + and can generate an interrupt if enabled through the EXTI registers. + - The PVD is stopped in Standby mode. + +@endverbatim + * @{ + */ + +/** + * @brief Configures the voltage threshold detected by the Power Voltage Detector(PVD). + * @param PWR_PVDLevel: specifies the PVD detection level + * This parameter can be one of the following values: + * @arg PWR_PVDLevel_0 + * @arg PWR_PVDLevel_1 + * @arg PWR_PVDLevel_2 + * @arg PWR_PVDLevel_3 + * @arg PWR_PVDLevel_4 + * @arg PWR_PVDLevel_5 + * @arg PWR_PVDLevel_6 + * @arg PWR_PVDLevel_7 + * @note Refer to the electrical characteristics of your device datasheet for + * more details about the voltage threshold corresponding to each + * detection level. + * @retval None + */ +void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_PWR_PVD_LEVEL(PWR_PVDLevel)); + + tmpreg = PWR->CR; + + /* Clear PLS[7:5] bits */ + tmpreg &= CR_PLS_MASK; + + /* Set PLS[7:5] bits according to PWR_PVDLevel value */ + tmpreg |= PWR_PVDLevel; + + /* Store the new value */ + PWR->CR = tmpreg; +} + +/** + * @brief Enables or disables the Power Voltage Detector(PVD). + * @param NewState: new state of the PVD. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void PWR_PVDCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)NewState; +} + +/** + * @} + */ + +/** @defgroup PWR_Group3 WakeUp pin configuration functions + * @brief WakeUp pin configuration functions + * +@verbatim + =============================================================================== + WakeUp pin configuration functions + =============================================================================== + + - WakeUp pin is used to wakeup the system from Standby mode. This pin is + forced in input pull down configuration and is active on rising edges. + - There is only one WakeUp pin: WakeUp Pin 1 on PA.00. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the WakeUp Pin functionality. + * @param NewState: new state of the WakeUp Pin functionality. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void PWR_WakeUpPinCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CSR_EWUP_BB = (uint32_t)NewState; +} + +/** + * @} + */ + +/** @defgroup PWR_Group4 Backup Regulator configuration functions + * @brief Backup Regulator configuration functions + * +@verbatim + =============================================================================== + Backup Regulator configuration functions + =============================================================================== + + - The backup domain includes 4 Kbytes of backup SRAM accessible only from the + CPU, and address in 32-bit, 16-bit or 8-bit mode. Its content is retained + even in Standby or VBAT mode when the low power backup regulator is enabled. + It can be considered as an internal EEPROM when VBAT is always present. + You can use the PWR_BackupRegulatorCmd() function to enable the low power + backup regulator and use the PWR_GetFlagStatus(PWR_FLAG_BRR) to check if it is + ready or not. + + - When the backup domain is supplied by VDD (analog switch connected to VDD) + the backup SRAM is powered from VDD which replaces the VBAT power supply to + save battery life. + + - The backup SRAM is not mass erased by an tamper event. It is read protected + to prevent confidential data, such as cryptographic private key, from being + accessed. The backup SRAM can be erased only through the Flash interface when + a protection level change from level 1 to level 0 is requested. + Refer to the description of Read protection (RDP) in the Flash programming manual. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the Backup Regulator. + * @param NewState: new state of the Backup Regulator. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void PWR_BackupRegulatorCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CSR_BRE_BB = (uint32_t)NewState; +} + +/** + * @} + */ + +/** @defgroup PWR_Group5 FLASH Power Down configuration functions + * @brief FLASH Power Down configuration functions + * +@verbatim + =============================================================================== + FLASH Power Down configuration functions + =============================================================================== + + - By setting the FPDS bit in the PWR_CR register by using the PWR_FlashPowerDownCmd() + function, the Flash memory also enters power down mode when the device enters + Stop mode. When the Flash memory is in power down mode, an additional startup + delay is incurred when waking up from Stop mode. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the Flash Power Down in STOP mode. + * @param NewState: new state of the Flash power mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void PWR_FlashPowerDownCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CR_FPDS_BB = (uint32_t)NewState; +} + +/** + * @} + */ + +/** @defgroup PWR_Group6 Low Power modes configuration functions + * @brief Low Power modes configuration functions + * +@verbatim + =============================================================================== + Low Power modes configuration functions + =============================================================================== + + The devices feature 3 low-power modes: + - Sleep mode: Cortex-M3 core stopped, peripherals kept running. + - Stop mode: all clocks are stopped, regulator running, regulator in low power mode + - Standby mode: 1.2V domain powered off. + + Sleep mode + =========== + - Entry: + - The Sleep mode is entered by using the __WFI() or __WFE() functions. + - Exit: + - Any peripheral interrupt acknowledged by the nested vectored interrupt + controller (NVIC) can wake up the device from Sleep mode. + + Stop mode + ========== + In Stop mode, all clocks in the 1.2V domain are stopped, the PLL, the HSI, + and the HSE RC oscillators are disabled. Internal SRAM and register contents + are preserved. + The voltage regulator can be configured either in normal or low-power mode. + To minimize the consumption In Stop mode, FLASH can be powered off before + entering the Stop mode. It can be switched on again by software after exiting + the Stop mode using the PWR_FlashPowerDownCmd() function. + + - Entry: + - The Stop mode is entered using the PWR_EnterSTOPMode(PWR_Regulator_LowPower,) + function with regulator in LowPower or with Regulator ON. + - Exit: + - Any EXTI Line (Internal or External) configured in Interrupt/Event mode. + + Standby mode + ============ + The Standby mode allows to achieve the lowest power consumption. It is based + on the Cortex-M3 deepsleep mode, with the voltage regulator disabled. + The 1.2V domain is consequently powered off. The PLL, the HSI oscillator and + the HSE oscillator are also switched off. SRAM and register contents are lost + except for the RTC registers, RTC backup registers, backup SRAM and Standby + circuitry. + + The voltage regulator is OFF. + + - Entry: + - The Standby mode is entered using the PWR_EnterSTANDBYMode() function. + - Exit: + - WKUP pin rising edge, RTC alarm (Alarm A and Alarm B), RTC wakeup, + tamper event, time-stamp event, external reset in NRST pin, IWDG reset. + + Auto-wakeup (AWU) from low-power mode + ===================================== + The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC + Wakeup event, a tamper event, a time-stamp event, or a comparator event, + without depending on an external interrupt (Auto-wakeup mode). + + - RTC auto-wakeup (AWU) from the Stop mode + ---------------------------------------- + + - To wake up from the Stop mode with an RTC alarm event, it is necessary to: + - Configure the EXTI Line 17 to be sensitive to rising edges (Interrupt + or Event modes) using the EXTI_Init() function. + - Enable the RTC Alarm Interrupt using the RTC_ITConfig() function + - Configure the RTC to generate the RTC alarm using the RTC_SetAlarm() + and RTC_AlarmCmd() functions. + - To wake up from the Stop mode with an RTC Tamper or time stamp event, it + is necessary to: + - Configure the EXTI Line 21 to be sensitive to rising edges (Interrupt + or Event modes) using the EXTI_Init() function. + - Enable the RTC Tamper or time stamp Interrupt using the RTC_ITConfig() + function + - Configure the RTC to detect the tamper or time stamp event using the + RTC_TimeStampConfig(), RTC_TamperTriggerConfig() and RTC_TamperCmd() + functions. + - To wake up from the Stop mode with an RTC WakeUp event, it is necessary to: + - Configure the EXTI Line 22 to be sensitive to rising edges (Interrupt + or Event modes) using the EXTI_Init() function. + - Enable the RTC WakeUp Interrupt using the RTC_ITConfig() function + - Configure the RTC to generate the RTC WakeUp event using the RTC_WakeUpClockConfig(), + RTC_SetWakeUpCounter() and RTC_WakeUpCmd() functions. + + - RTC auto-wakeup (AWU) from the Standby mode + ------------------------------------------- + - To wake up from the Standby mode with an RTC alarm event, it is necessary to: + - Enable the RTC Alarm Interrupt using the RTC_ITConfig() function + - Configure the RTC to generate the RTC alarm using the RTC_SetAlarm() + and RTC_AlarmCmd() functions. + - To wake up from the Standby mode with an RTC Tamper or time stamp event, it + is necessary to: + - Enable the RTC Tamper or time stamp Interrupt using the RTC_ITConfig() + function + - Configure the RTC to detect the tamper or time stamp event using the + RTC_TimeStampConfig(), RTC_TamperTriggerConfig() and RTC_TamperCmd() + functions. + - To wake up from the Standby mode with an RTC WakeUp event, it is necessary to: + - Enable the RTC WakeUp Interrupt using the RTC_ITConfig() function + - Configure the RTC to generate the RTC WakeUp event using the RTC_WakeUpClockConfig(), + RTC_SetWakeUpCounter() and RTC_WakeUpCmd() functions. + +@endverbatim + * @{ + */ + +/** + * @brief Enters STOP mode. + * + * @note In Stop mode, all I/O pins keep the same state as in Run mode. + * @note When exiting Stop mode by issuing an interrupt or a wakeup event, + * the HSI RC oscillator is selected as system clock. + * @note When the voltage regulator operates in low power mode, an additional + * startup delay is incurred when waking up from Stop mode. + * By keeping the internal regulator ON during Stop mode, the consumption + * is higher although the startup time is reduced. + * + * @param PWR_Regulator: specifies the regulator state in STOP mode. + * This parameter can be one of the following values: + * @arg PWR_Regulator_ON: STOP mode with regulator ON + * @arg PWR_Regulator_LowPower: STOP mode with regulator in low power mode + * @param PWR_STOPEntry: specifies if STOP mode in entered with WFI or WFE instruction. + * This parameter can be one of the following values: + * @arg PWR_STOPEntry_WFI: enter STOP mode with WFI instruction + * @arg PWR_STOPEntry_WFE: enter STOP mode with WFE instruction + * @retval None + */ +void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(PWR_Regulator)); + assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry)); + + /* Select the regulator state in STOP mode ---------------------------------*/ + tmpreg = PWR->CR; + /* Clear PDDS and LPDSR bits */ + tmpreg &= CR_DS_MASK; + + /* Set LPDSR bit according to PWR_Regulator value */ + tmpreg |= PWR_Regulator; + + /* Store the new value */ + PWR->CR = tmpreg; + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* Select STOP mode entry --------------------------------------------------*/ + if(PWR_STOPEntry == PWR_STOPEntry_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __WFE(); + } + /* Reset SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); +} + +/** + * @brief Enters STANDBY mode. + * @note In Standby mode, all I/O pins are high impedance except for: + * - Reset pad (still available) + * - RTC_AF1 pin (PC13) if configured for tamper, time-stamp, RTC + * Alarm out, or RTC clock calibration out. + * - RTC_AF2 pin (PI8) if configured for tamper or time-stamp. + * - WKUP pin 1 (PA0) if enabled. + * @param None + * @retval None + */ +void PWR_EnterSTANDBYMode(void) +{ + /* Clear Wakeup flag */ + PWR->CR |= PWR_CR_CWUF; + + /* Select STANDBY mode */ + PWR->CR |= PWR_CR_PDDS; + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + +/* This option is used to ensure that store operations are completed */ +#if defined ( __CC_ARM ) + __force_stores(); +#endif + /* Request Wait For Interrupt */ + __WFI(); +} + +/** + * @} + */ + +/** @defgroup PWR_Group7 Flags management functions + * @brief Flags management functions + * +@verbatim + =============================================================================== + Flags management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Checks whether the specified PWR flag is set or not. + * @param PWR_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event + * was received from the WKUP pin or from the RTC alarm (Alarm A + * or Alarm B), RTC Tamper event, RTC TimeStamp event or RTC Wakeup. + * An additional wakeup event is detected if the WKUP pin is enabled + * (by setting the EWUP bit) when the WKUP pin level is already high. + * @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was + * resumed from StandBy mode. + * @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled + * by the PWR_PVDCmd() function. The PVD is stopped by Standby mode + * For this reason, this bit is equal to 0 after Standby or reset + * until the PVDE bit is set. + * @arg PWR_FLAG_BRR: Backup regulator ready flag. This bit is not reset + * when the device wakes up from Standby mode or by a system reset + * or power reset. + * @retval The new state of PWR_FLAG (SET or RESET). + */ +FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG) +{ + FlagStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_PWR_GET_FLAG(PWR_FLAG)); + + if ((PWR->CSR & PWR_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** + * @brief Clears the PWR's pending flags. + * @param PWR_FLAG: specifies the flag to clear. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag + * @arg PWR_FLAG_SB: StandBy flag + * @retval None + */ +void PWR_ClearFlag(uint32_t PWR_FLAG) +{ + /* Check the parameters */ + assert_param(IS_PWR_CLEAR_FLAG(PWR_FLAG)); + + PWR->CR |= PWR_FLAG << 2; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c new file mode 100644 index 000000000..a668c5a37 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c @@ -0,0 +1,1817 @@ +/** + ****************************************************************************** + * @file stm32f2xx_rcc.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Reset and clock control (RCC) peripheral: + * - Internal/external clocks, PLL, CSS and MCO configuration + * - System, AHB and APB busses clocks configuration + * - Peripheral clocks configuration + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * RCC specific features + * =================================================================== + * + * After reset the device is running from Internal High Speed oscillator + * (HSI 16MHz) with Flash 0 wait state, Flash prefetch buffer, D-Cache + * and I-Cache are disabled, and all peripherals are off except internal + * SRAM, Flash and JTAG. + * - There is no prescaler on High speed (AHB) and Low speed (APB) busses; + * all peripherals mapped on these busses are running at HSI speed. + * - The clock for all peripherals is switched off, except the SRAM and FLASH. + * - All GPIOs are in input floating state, except the JTAG pins which + * are assigned to be used for debug purpose. + * + * Once the device started from reset, the user application has to: + * - Configure the clock source to be used to drive the System clock + * (if the application needs higher frequency/performance) + * - Configure the System clock frequency and Flash settings + * - Configure the AHB and APB busses prescalers + * - Enable the clock for the peripheral(s) to be used + * - Configure the clock source(s) for peripherals which clocks are not + * derived from the System clock (I2S, RTC, ADC, USB OTG FS/SDIO/RNG) + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup RCC + * @brief RCC driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* ------------ RCC registers bit address in the alias region ----------- */ +#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) +/* --- CR Register ---*/ +/* Alias word address of HSION bit */ +#define CR_OFFSET (RCC_OFFSET + 0x00) +#define HSION_BitNumber 0x00 +#define CR_HSION_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (HSION_BitNumber * 4)) +/* Alias word address of CSSON bit */ +#define CSSON_BitNumber 0x13 +#define CR_CSSON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (CSSON_BitNumber * 4)) +/* Alias word address of PLLON bit */ +#define PLLON_BitNumber 0x18 +#define CR_PLLON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLLON_BitNumber * 4)) +/* Alias word address of PLLI2SON bit */ +#define PLLI2SON_BitNumber 0x1A +#define CR_PLLI2SON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLLI2SON_BitNumber * 4)) + +/* --- CFGR Register ---*/ +/* Alias word address of I2SSRC bit */ +#define CFGR_OFFSET (RCC_OFFSET + 0x08) +#define I2SSRC_BitNumber 0x17 +#define CFGR_I2SSRC_BB (PERIPH_BB_BASE + (CFGR_OFFSET * 32) + (I2SSRC_BitNumber * 4)) + +/* --- BDCR Register ---*/ +/* Alias word address of RTCEN bit */ +#define BDCR_OFFSET (RCC_OFFSET + 0x70) +#define RTCEN_BitNumber 0x0F +#define BDCR_RTCEN_BB (PERIPH_BB_BASE + (BDCR_OFFSET * 32) + (RTCEN_BitNumber * 4)) +/* Alias word address of BDRST bit */ +#define BDRST_BitNumber 0x10 +#define BDCR_BDRST_BB (PERIPH_BB_BASE + (BDCR_OFFSET * 32) + (BDRST_BitNumber * 4)) +/* --- CSR Register ---*/ +/* Alias word address of LSION bit */ +#define CSR_OFFSET (RCC_OFFSET + 0x74) +#define LSION_BitNumber 0x00 +#define CSR_LSION_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (LSION_BitNumber * 4)) +/* ---------------------- RCC registers bit mask ------------------------ */ +/* CFGR register bit mask */ +#define CFGR_MCO2_RESET_MASK ((uint32_t)0x07FFFFFF) +#define CFGR_MCO1_RESET_MASK ((uint32_t)0xF89FFFFF) + +/* RCC Flag Mask */ +#define FLAG_MASK ((uint8_t)0x1F) + +/* CR register byte 3 (Bits[23:16]) base address */ +#define CR_BYTE3_ADDRESS ((uint32_t)0x40023802) + +/* CIR register byte 2 (Bits[15:8]) base address */ +#define CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + 0x0C + 0x01)) + +/* CIR register byte 3 (Bits[23:16]) base address */ +#define CIR_BYTE3_ADDRESS ((uint32_t)(RCC_BASE + 0x0C + 0x02)) + +/* BDCR register base address */ +#define BDCR_ADDRESS (PERIPH_BASE + BDCR_OFFSET) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup RCC_Private_Functions + * @{ + */ + +/** @defgroup RCC_Group1 Internal and external clocks, PLL, CSS and MCO configuration functions + * @brief Internal and external clocks, PLL, CSS and MCO configuration functions + * +@verbatim + =============================================================================== + Internal/external clocks, PLL, CSS and MCO configuration functions + =============================================================================== + + This section provide functions allowing to configure the internal/external clocks, + PLLs, CSS and MCO pins. + + 1. HSI (high-speed internal), 16 MHz factory-trimmed RC used directly or through + the PLL as System clock source. + + 2. LSI (low-speed internal), 32 KHz low consumption RC used as IWDG and/or RTC + clock source. + + 3. HSE (high-speed external), 4 to 26 MHz crystal oscillator used directly or + through the PLL as System clock source. Can be used also as RTC clock source. + + 4. LSE (low-speed external), 32 KHz oscillator used as RTC clock source. + + 5. PLL (clocked by HSI or HSE), featuring two different output clocks: + - The first output is used to generate the high speed system clock (up to 120 MHz) + - The second output is used to generate the clock for the USB OTG FS (48 MHz), + the random analog generator (<=48 MHz) and the SDIO (<= 48 MHz). + + 6. PLLI2S (clocked by HSI or HSE), used to generate an accurate clock to achieve + high-quality audio performance on the I2S interface. + + 7. CSS (Clock security system), once enable and if a HSE clock failure occurs + (HSE used directly or through PLL as System clock source), the System clock + is automatically switched to HSI and an interrupt is generated if enabled. + The interrupt is linked to the Cortex-M3 NMI (Non-Maskable Interrupt) + exception vector. + + 8. MCO1 (microcontroller clock output), used to output HSI, LSE, HSE or PLL + clock (through a configurable prescaler) on PA8 pin. + + 9. MCO2 (microcontroller clock output), used to output HSE, PLL, SYSCLK or PLLI2S + clock (through a configurable prescaler) on PC9 pin. + +@endverbatim + * @{ + */ + +/** + * @brief Resets the RCC clock configuration to the default reset state. + * @note The default reset state of the clock configuration is given below: + * - HSI ON and used as system clock source + * - HSE, PLL and PLLI2S OFF + * - AHB, APB1 and APB2 prescaler set to 1. + * - CSS, MCO1 and MCO2 OFF + * - All interrupts disabled + * @note This function doesn't modify the configuration of the + * - Peripheral clocks + * - LSI, LSE and RTC clocks + * @param None + * @retval None + */ +void RCC_DeInit(void) +{ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; +} + +/** + * @brief Configures the External High Speed oscillator (HSE). + * @note After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application + * software should wait on HSERDY flag to be set indicating that HSE clock + * is stable and can be used to clock the PLL and/or system clock. + * @note HSE state can not be changed if it is used directly or through the + * PLL as system clock. In this case, you have to select another source + * of the system clock then change the HSE state (ex. disable it). + * @note The HSE is stopped by hardware when entering STOP and STANDBY modes. + * @note This function reset the CSSON bit, so if the Clock security system(CSS) + * was previously enabled you have to enable it again after calling this + * function. + * @param RCC_HSE: specifies the new state of the HSE. + * This parameter can be one of the following values: + * @arg RCC_HSE_OFF: turn OFF the HSE oscillator, HSERDY flag goes low after + * 6 HSE oscillator clock cycles. + * @arg RCC_HSE_ON: turn ON the HSE oscillator + * @arg RCC_HSE_Bypass: HSE oscillator bypassed with external clock + * @retval None + */ +void RCC_HSEConfig(uint8_t RCC_HSE) +{ + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_HSE)); + + /* Reset HSEON and HSEBYP bits before configuring the HSE ------------------*/ + *(__IO uint8_t *) CR_BYTE3_ADDRESS = RCC_HSE_OFF; + + /* Set the new HSE configuration -------------------------------------------*/ + *(__IO uint8_t *) CR_BYTE3_ADDRESS = RCC_HSE; +} + +/** + * @brief Waits for HSE start-up. + * @note This functions waits on HSERDY flag to be set and return SUCCESS if + * this flag is set, otherwise returns ERROR if the timeout is reached + * and this flag is not set. The timeout value is defined by the constant + * HSE_STARTUP_TIMEOUT in stm32f2xx.h file. You can tailor it depending + * on the HSE crystal used in your application. + * @param None + * @retval An ErrorStatus enumeration value: + * - SUCCESS: HSE oscillator is stable and ready to use + * - ERROR: HSE oscillator not yet ready + */ +ErrorStatus RCC_WaitForHSEStartUp(void) +{ + __IO uint32_t startupcounter = 0; + ErrorStatus status = ERROR; + FlagStatus hsestatus = RESET; + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + hsestatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY); + startupcounter++; + } while((startupcounter != HSE_STARTUP_TIMEOUT) && (hsestatus == RESET)); + + if (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET) + { + status = SUCCESS; + } + else + { + status = ERROR; + } + return (status); +} + +/** + * @brief Adjusts the Internal High Speed oscillator (HSI) calibration value. + * @note The calibration is used to compensate for the variations in voltage + * and temperature that influence the frequency of the internal HSI RC. + * @param HSICalibrationValue: specifies the calibration trimming value. + * This parameter must be a number between 0 and 0x1F. + * @retval None + */ +void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_CALIBRATION_VALUE(HSICalibrationValue)); + + tmpreg = RCC->CR; + + /* Clear HSITRIM[4:0] bits */ + tmpreg &= ~RCC_CR_HSITRIM; + + /* Set the HSITRIM[4:0] bits according to HSICalibrationValue value */ + tmpreg |= (uint32_t)HSICalibrationValue << 3; + + /* Store the new value */ + RCC->CR = tmpreg; +} + +/** + * @brief Enables or disables the Internal High Speed oscillator (HSI). + * @note The HSI is stopped by hardware when entering STOP and STANDBY modes. + * It is used (enabled by hardware) as system clock source after startup + * from Reset, wakeup from STOP and STANDBY mode, or in case of failure + * of the HSE used directly or indirectly as system clock (if the Clock + * Security System CSS is enabled). + * @note HSI can not be stopped if it is used as system clock source. In this case, + * you have to select another source of the system clock then stop the HSI. + * @note After enabling the HSI, the application software should wait on HSIRDY + * flag to be set indicating that HSI clock is stable and can be used as + * system clock source. + * @param NewState: new state of the HSI. + * This parameter can be: ENABLE or DISABLE. + * @note When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator + * clock cycles. + * @retval None + */ +void RCC_HSICmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CR_HSION_BB = (uint32_t)NewState; +} + +/** + * @brief Configures the External Low Speed oscillator (LSE). + * @note As the LSE is in the Backup domain and write access is denied to + * this domain after reset, you have to enable write access using + * PWR_BackupAccessCmd(ENABLE) function before to configure the LSE + * (to be done once after reset). + * @note After enabling the LSE (RCC_LSE_ON or RCC_LSE_Bypass), the application + * software should wait on LSERDY flag to be set indicating that LSE clock + * is stable and can be used to clock the RTC. + * @param RCC_LSE: specifies the new state of the LSE. + * This parameter can be one of the following values: + * @arg RCC_LSE_OFF: turn OFF the LSE oscillator, LSERDY flag goes low after + * 6 LSE oscillator clock cycles. + * @arg RCC_LSE_ON: turn ON the LSE oscillator + * @arg RCC_LSE_Bypass: LSE oscillator bypassed with external clock + * @retval None + */ +void RCC_LSEConfig(uint8_t RCC_LSE) +{ + /* Check the parameters */ + assert_param(IS_RCC_LSE(RCC_LSE)); + + /* Reset LSEON and LSEBYP bits before configuring the LSE ------------------*/ + /* Reset LSEON bit */ + *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF; + + /* Reset LSEBYP bit */ + *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF; + + /* Configure LSE (RCC_LSE_OFF is already covered by the code section above) */ + switch (RCC_LSE) + { + case RCC_LSE_ON: + /* Set LSEON bit */ + *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_ON; + break; + case RCC_LSE_Bypass: + /* Set LSEBYP and LSEON bits */ + *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON; + break; + default: + break; + } +} + +/** + * @brief Enables or disables the Internal Low Speed oscillator (LSI). + * @note After enabling the LSI, the application software should wait on + * LSIRDY flag to be set indicating that LSI clock is stable and can + * be used to clock the IWDG and/or the RTC. + * @note LSI can not be disabled if the IWDG is running. + * @param NewState: new state of the LSI. + * This parameter can be: ENABLE or DISABLE. + * @note When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator + * clock cycles. + * @retval None + */ +void RCC_LSICmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CSR_LSION_BB = (uint32_t)NewState; +} + +/** + * @brief Configures the main PLL clock source, multiplication and division factors. + * @note This function must be used only when the main PLL is disabled. + * + * @param RCC_PLLSource: specifies the PLL entry clock source. + * This parameter can be one of the following values: + * @arg RCC_PLLSource_HSI: HSI oscillator clock selected as PLL clock entry + * @arg RCC_PLLSource_HSE: HSE oscillator clock selected as PLL clock entry + * @note This clock source (RCC_PLLSource) is common for the main PLL and PLLI2S. + * + * @param PLLM: specifies the division factor for PLL VCO input clock + * This parameter must be a number between 0 and 63. + * @note You have to set the PLLM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 2 MHz to limit PLL jitter. + * + * @param PLLN: specifies the multiplication factor for PLL VCO output clock + * This parameter must be a number between 192 and 432. + * @note You have to set the PLLN parameter correctly to ensure that the VCO + * output frequency is between 192 and 432 MHz. + * + * @param PLLP: specifies the division factor for main system clock (SYSCLK) + * This parameter must be a number in the range {2, 4, 6, or 8}. + * @note You have to set the PLLP parameter correctly to not exceed 120 MHz on + * the System clock frequency. + * + * @param PLLQ: specifies the division factor for OTG FS, SDIO and RNG clocks + * This parameter must be a number between 4 and 15. + * @note If the USB OTG FS is used in your application, you have to set the + * PLLQ parameter correctly to have 48 MHz clock for the USB. However, + * the SDIO and RNG need a frequency lower than or equal to 48 MHz to work + * correctly. + * + * @retval None + */ +void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ) +{ + /* Check the parameters */ + assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource)); + assert_param(IS_RCC_PLLM_VALUE(PLLM)); + assert_param(IS_RCC_PLLN_VALUE(PLLN)); + assert_param(IS_RCC_PLLP_VALUE(PLLP)); + assert_param(IS_RCC_PLLQ_VALUE(PLLQ)); + + RCC->PLLCFGR = PLLM | (PLLN << 6) | (((PLLP >> 1) -1) << 16) | (RCC_PLLSource) | + (PLLQ << 24); +} + +/** + * @brief Enables or disables the main PLL. + * @note After enabling the main PLL, the application software should wait on + * PLLRDY flag to be set indicating that PLL clock is stable and can + * be used as system clock source. + * @note The main PLL can not be disabled if it is used as system clock source + * @note The main PLL is disabled by hardware when entering STOP and STANDBY modes. + * @param NewState: new state of the main PLL. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_PLLCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CR_PLLON_BB = (uint32_t)NewState; +} + +/** + * @brief Configures the PLLI2S clock multiplication and division factors. + * + * @note PLLI2S is available only in Silicon RevisionB and RevisionY. + * @note This function must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * RCC_PLLConfig function ) + * + * @param PLLI2SN: specifies the multiplication factor for PLLI2S VCO output clock + * This parameter must be a number between 192 and 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between 192 and 432 MHz. + * + * @param PLLI2SR: specifies the division factor for I2S clock + * This parameter must be a number between 2 and 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + * + * @retval None + */ +void RCC_PLLI2SConfig(uint32_t PLLI2SN, uint32_t PLLI2SR) +{ + /* Check the parameters */ + assert_param(IS_RCC_PLLI2SN_VALUE(PLLI2SN)); + assert_param(IS_RCC_PLLI2SR_VALUE(PLLI2SR)); + + RCC->PLLI2SCFGR = (PLLI2SN << 6) | (PLLI2SR << 28); +} + +/** + * @brief Enables or disables the PLLI2S. + * @note PLLI2S is available only in RevisionB and RevisionY + * @note The PLLI2S is disabled by hardware when entering STOP and STANDBY modes. + * @param NewState: new state of the PLLI2S. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_PLLI2SCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CR_PLLI2SON_BB = (uint32_t)NewState; +} + +/** + * @brief Enables or disables the Clock Security System. + * @note If a failure is detected on the HSE oscillator clock, this oscillator + * is automatically disabled and an interrupt is generated to inform the + * software about the failure (Clock Security System Interrupt, CSSI), + * allowing the MCU to perform rescue operations. The CSSI is linked to + * the Cortex-M3 NMI (Non-Maskable Interrupt) exception vector. + * @param NewState: new state of the Clock Security System. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_ClockSecuritySystemCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CR_CSSON_BB = (uint32_t)NewState; +} + +/** + * @brief Selects the clock source to output on MCO1 pin(PA8). + * @note PA8 should be configured in alternate function mode. + * @param RCC_MCO1Source: specifies the clock source to output. + * This parameter can be one of the following values: + * @arg RCC_MCO1Source_HSI: HSI clock selected as MCO1 source + * @arg RCC_MCO1Source_LSE: LSE clock selected as MCO1 source + * @arg RCC_MCO1Source_HSE: HSE clock selected as MCO1 source + * @arg RCC_MCO1Source_PLLCLK: main PLL clock selected as MCO1 source + * @param RCC_MCO1Div: specifies the MCO1 prescaler. + * This parameter can be one of the following values: + * @arg RCC_MCO1Div_1: no division applied to MCO1 clock + * @arg RCC_MCO1Div_2: division by 2 applied to MCO1 clock + * @arg RCC_MCO1Div_3: division by 3 applied to MCO1 clock + * @arg RCC_MCO1Div_4: division by 4 applied to MCO1 clock + * @arg RCC_MCO1Div_5: division by 5 applied to MCO1 clock + * @retval None + */ +void RCC_MCO1Config(uint32_t RCC_MCO1Source, uint32_t RCC_MCO1Div) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_MCO1SOURCE(RCC_MCO1Source)); + assert_param(IS_RCC_MCO1DIV(RCC_MCO1Div)); + + tmpreg = RCC->CFGR; + + /* Clear MCO1[1:0] and MCO1PRE[2:0] bits */ + tmpreg &= CFGR_MCO1_RESET_MASK; + + /* Select MCO1 clock source and prescaler */ + tmpreg |= RCC_MCO1Source | RCC_MCO1Div; + + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @brief Selects the clock source to output on MCO2 pin(PC9). + * @note PC9 should be configured in alternate function mode. + * @param RCC_MCO2Source: specifies the clock source to output. + * This parameter can be one of the following values: + * @arg RCC_MCO2Source_SYSCLK: System clock (SYSCLK) selected as MCO2 source + * @arg RCC_MCO2Source_PLLI2SCLK: PLLI2S clock selected as MCO2 source + * @arg RCC_MCO2Source_HSE: HSE clock selected as MCO2 source + * @arg RCC_MCO2Source_PLLCLK: main PLL clock selected as MCO2 source + * @param RCC_MCO2Div: specifies the MCO2 prescaler. + * This parameter can be one of the following values: + * @arg RCC_MCO2Div_1: no division applied to MCO2 clock + * @arg RCC_MCO2Div_2: division by 2 applied to MCO2 clock + * @arg RCC_MCO2Div_3: division by 3 applied to MCO2 clock + * @arg RCC_MCO2Div_4: division by 4 applied to MCO2 clock + * @arg RCC_MCO2Div_5: division by 5 applied to MCO2 clock + * @retval None + */ +void RCC_MCO2Config(uint32_t RCC_MCO2Source, uint32_t RCC_MCO2Div) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_MCO2SOURCE(RCC_MCO2Source)); + assert_param(IS_RCC_MCO2DIV(RCC_MCO2Div)); + + tmpreg = RCC->CFGR; + + /* Clear MCO2 and MCO2PRE[2:0] bits */ + tmpreg &= CFGR_MCO2_RESET_MASK; + + /* Select MCO2 clock source and prescaler */ + tmpreg |= RCC_MCO2Source | RCC_MCO2Div; + + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @} + */ + +/** @defgroup RCC_Group2 System AHB and APB busses clocks configuration functions + * @brief System, AHB and APB busses clocks configuration functions + * +@verbatim + =============================================================================== + System, AHB and APB busses clocks configuration functions + =============================================================================== + + This section provide functions allowing to configure the System, AHB, APB1 and + APB2 busses clocks. + + 1. Several clock sources can be used to drive the System clock (SYSCLK): HSI, + HSE and PLL. + The AHB clock (HCLK) is derived from System clock through configurable prescaler + and used to clock the CPU, memory and peripherals mapped on AHB bus (DMA, GPIO...). + APB1 (PCLK1) and APB2 (PCLK2) clocks are derived from AHB clock through + configurable prescalers and used to clock the peripherals mapped on these busses. + You can use "RCC_GetClocksFreq()" function to retrieve the frequencies of these clocks. + +@note All the peripheral clocks are derived from the System clock (SYSCLK) except: + - I2S: the I2S clock can be derived either from a specific PLL (PLLI2S) or + from an external clock mapped on the I2S_CKIN pin. + You have to use RCC_I2SCLKConfig() function to configure this clock. + - RTC: the RTC clock can be derived either from the LSI, LSE or HSE clock + divided by 2 to 31. You have to use RCC_RTCCLKConfig() and RCC_RTCCLKCmd() + functions to configure this clock. + - USB OTG FS, SDIO and RTC: USB OTG FS require a frequency equal to 48 MHz + to work correctly, while the SDIO require a frequency equal or lower than + to 48. This clock is derived of the main PLL through PLLQ divider. + - IWDG clock which is always the LSI clock. + + 2. The maximum frequency of the SYSCLK and HCLK is 120 MHz, PCLK2 60 MHz and PCLK1 30 MHz. + Depending on the device voltage range, the maximum frequency should be + adapted accordingly: + +-------------------------------------------------------------------------------------+ + | Latency | HCLK clock frequency (MHz) | + | |---------------------------------------------------------------------| + | | voltage range | voltage range | voltage range | voltage range | + | | 2.7 V - 3.6 V | 2.4 V - 2.7 V | 2.1 V - 2.4 V | 1.8 V - 2.1 V | + |---------------|----------------|----------------|-----------------|-----------------| + |0WS(1CPU cycle)|0 < HCLK <= 30 |0 < HCLK <= 24 |0 < HCLK <= 18 |0 < HCLK <= 16 | + |---------------|----------------|----------------|-----------------|-----------------| + |1WS(2CPU cycle)|30 < HCLK <= 60 |24 < HCLK <= 48 |18 < HCLK <= 36 |16 < HCLK <= 32 | + |---------------|----------------|----------------|-----------------|-----------------| + |2WS(3CPU cycle)|60 < HCLK <= 90 |48 < HCLK <= 72 |36 < HCLK <= 54 |32 < HCLK <= 48 | + |---------------|----------------|----------------|-----------------|-----------------| + |3WS(4CPU cycle)|90 < HCLK <= 120|72 < HCLK <= 96 |54 < HCLK <= 72 |48 < HCLK <= 64 | + |---------------|----------------|----------------|-----------------|-----------------| + |4WS(5CPU cycle)| NA |96 < HCLK <= 120|72 < HCLK <= 90 |64 < HCLK <= 80 | + |---------------|----------------|----------------|-----------------|-----------------| + |5WS(6CPU cycle)| NA | NA |90 < HCLK <= 108 |80 < HCLK <= 96 | + |---------------|----------------|----------------|-----------------|-----------------| + |6WS(7CPU cycle)| NA | NA |108 < HCLK <= 120|96 < HCLK <= 112 | + |---------------|----------------|----------------|-----------------|-----------------| + |7WS(8CPU cycle)| NA | NA | NA |112 < HCLK <= 120| + +-------------------------------------------------------------------------------------+ + + +@endverbatim + * @{ + */ + +/** + * @brief Configures the system clock (SYSCLK). + * @note The HSI is used (enabled by hardware) as system clock source after + * startup from Reset, wake-up from STOP and STANDBY mode, or in case + * of failure of the HSE used directly or indirectly as system clock + * (if the Clock Security System CSS is enabled). + * @note A switch from one clock source to another occurs only if the target + * clock source is ready (clock stable after startup delay or PLL locked). + * If a clock source which is not yet ready is selected, the switch will + * occur when the clock source will be ready. + * You can use RCC_GetSYSCLKSource() function to know which clock is + * currently used as system clock source. + * @param RCC_SYSCLKSource: specifies the clock source used as system clock. + * This parameter can be one of the following values: + * @arg RCC_SYSCLKSource_HSI: HSI selected as system clock source + * @arg RCC_SYSCLKSource_HSE: HSE selected as system clock source + * @arg RCC_SYSCLKSource_PLLCLK: PLL selected as system clock source + * @retval None + */ +void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource)); + + tmpreg = RCC->CFGR; + + /* Clear SW[1:0] bits */ + tmpreg &= ~RCC_CFGR_SW; + + /* Set SW[1:0] bits according to RCC_SYSCLKSource value */ + tmpreg |= RCC_SYSCLKSource; + + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @brief Returns the clock source used as system clock. + * @param None + * @retval The clock source used as system clock. The returned value can be one + * of the following: + * - 0x00: HSI used as system clock + * - 0x04: HSE used as system clock + * - 0x08: PLL used as system clock + */ +uint8_t RCC_GetSYSCLKSource(void) +{ + return ((uint8_t)(RCC->CFGR & RCC_CFGR_SWS)); +} + +/** + * @brief Configures the AHB clock (HCLK). + * @note Depending on the device voltage range, the software has to set correctly + * these bits to ensure that HCLK not exceed the maximum allowed frequency + * (for more details refer to section above + * "CPU, AHB and APB busses clocks configuration functions") + * @param RCC_SYSCLK: defines the AHB clock divider. This clock is derived from + * the system clock (SYSCLK). + * This parameter can be one of the following values: + * @arg RCC_SYSCLK_Div1: AHB clock = SYSCLK + * @arg RCC_SYSCLK_Div2: AHB clock = SYSCLK/2 + * @arg RCC_SYSCLK_Div4: AHB clock = SYSCLK/4 + * @arg RCC_SYSCLK_Div8: AHB clock = SYSCLK/8 + * @arg RCC_SYSCLK_Div16: AHB clock = SYSCLK/16 + * @arg RCC_SYSCLK_Div64: AHB clock = SYSCLK/64 + * @arg RCC_SYSCLK_Div128: AHB clock = SYSCLK/128 + * @arg RCC_SYSCLK_Div256: AHB clock = SYSCLK/256 + * @arg RCC_SYSCLK_Div512: AHB clock = SYSCLK/512 + * @retval None + */ +void RCC_HCLKConfig(uint32_t RCC_SYSCLK) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_HCLK(RCC_SYSCLK)); + + tmpreg = RCC->CFGR; + + /* Clear HPRE[3:0] bits */ + tmpreg &= ~RCC_CFGR_HPRE; + + /* Set HPRE[3:0] bits according to RCC_SYSCLK value */ + tmpreg |= RCC_SYSCLK; + + /* Store the new value */ + RCC->CFGR = tmpreg; +} + + +/** + * @brief Configures the Low Speed APB clock (PCLK1). + * @param RCC_HCLK: defines the APB1 clock divider. This clock is derived from + * the AHB clock (HCLK). + * This parameter can be one of the following values: + * @arg RCC_HCLK_Div1: APB1 clock = HCLK + * @arg RCC_HCLK_Div2: APB1 clock = HCLK/2 + * @arg RCC_HCLK_Div4: APB1 clock = HCLK/4 + * @arg RCC_HCLK_Div8: APB1 clock = HCLK/8 + * @arg RCC_HCLK_Div16: APB1 clock = HCLK/16 + * @retval None + */ +void RCC_PCLK1Config(uint32_t RCC_HCLK) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_PCLK(RCC_HCLK)); + + tmpreg = RCC->CFGR; + + /* Clear PPRE1[2:0] bits */ + tmpreg &= ~RCC_CFGR_PPRE1; + + /* Set PPRE1[2:0] bits according to RCC_HCLK value */ + tmpreg |= RCC_HCLK; + + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @brief Configures the High Speed APB clock (PCLK2). + * @param RCC_HCLK: defines the APB2 clock divider. This clock is derived from + * the AHB clock (HCLK). + * This parameter can be one of the following values: + * @arg RCC_HCLK_Div1: APB2 clock = HCLK + * @arg RCC_HCLK_Div2: APB2 clock = HCLK/2 + * @arg RCC_HCLK_Div4: APB2 clock = HCLK/4 + * @arg RCC_HCLK_Div8: APB2 clock = HCLK/8 + * @arg RCC_HCLK_Div16: APB2 clock = HCLK/16 + * @retval None + */ +void RCC_PCLK2Config(uint32_t RCC_HCLK) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_PCLK(RCC_HCLK)); + + tmpreg = RCC->CFGR; + + /* Clear PPRE2[2:0] bits */ + tmpreg &= ~RCC_CFGR_PPRE2; + + /* Set PPRE2[2:0] bits according to RCC_HCLK value */ + tmpreg |= RCC_HCLK << 3; + + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @brief Returns the frequencies of different on chip clocks; SYSCLK, HCLK, + * PCLK1 and PCLK2. + * + * @note The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(*) + * @note If SYSCLK source is HSE, function returns values based on HSE_VALUE(**) + * @note If SYSCLK source is PLL, function returns values based on HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * @note (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * @note (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * @note The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param RCC_Clocks: pointer to a RCC_ClocksTypeDef structure which will hold + * the clocks frequencies. + * + * @note This function can be used by the user application to compute the + * baudrate for the communication peripherals or configure other parameters. + * @note Each time SYSCLK, HCLK, PCLK1 and/or PCLK2 clock changes, this function + * must be called to update the structure's field. Otherwise, any + * configuration based on this function will be incorrect. + * + * @retval None + */ +void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) +{ + uint32_t tmp = 0, presc = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN + SYSCLK = PLL_VCO / PLLP + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + RCC_Clocks->SYSCLK_Frequency = pllvco/pllp; + break; + default: + RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; + break; + } + /* Compute HCLK, PCLK1 and PCLK2 clocks frequencies ------------------------*/ + + /* Get HCLK prescaler */ + tmp = RCC->CFGR & RCC_CFGR_HPRE; + tmp = tmp >> 4; + presc = APBAHBPrescTable[tmp]; + /* HCLK clock frequency */ + RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc; + + /* Get PCLK1 prescaler */ + tmp = RCC->CFGR & RCC_CFGR_PPRE1; + tmp = tmp >> 10; + presc = APBAHBPrescTable[tmp]; + /* PCLK1 clock frequency */ + RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc; + + /* Get PCLK2 prescaler */ + tmp = RCC->CFGR & RCC_CFGR_PPRE2; + tmp = tmp >> 13; + presc = APBAHBPrescTable[tmp]; + /* PCLK2 clock frequency */ + RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc; +} + +/** + * @} + */ + +/** @defgroup RCC_Group3 Peripheral clocks configuration functions + * @brief Peripheral clocks configuration functions + * +@verbatim + =============================================================================== + Peripheral clocks configuration functions + =============================================================================== + + This section provide functions allowing to configure the Peripheral clocks. + + 1. The RTC clock which is derived from the LSI, LSE or HSE clock divided by 2 to 31. + + 2. After restart from Reset or wakeup from STANDBY, all peripherals are off + except internal SRAM, Flash and JTAG. Before to start using a peripheral you + have to enable its interface clock. You can do this using RCC_AHBPeriphClockCmd() + , RCC_APB2PeriphClockCmd() and RCC_APB1PeriphClockCmd() functions. + + 3. To reset the peripherals configuration (to the default state after device reset) + you can use RCC_AHBPeriphResetCmd(), RCC_APB2PeriphResetCmd() and + RCC_APB1PeriphResetCmd() functions. + + 4. To further reduce power consumption in SLEEP mode the peripheral clocks can + be disabled prior to executing the WFI or WFE instructions. You can do this + using RCC_AHBPeriphClockLPModeCmd(), RCC_APB2PeriphClockLPModeCmd() and + RCC_APB1PeriphClockLPModeCmd() functions. + +@endverbatim + * @{ + */ + +/** + * @brief Configures the RTC clock (RTCCLK). + * @note As the RTC clock configuration bits are in the Backup domain and write + * access is denied to this domain after reset, you have to enable write + * access using PWR_BackupAccessCmd(ENABLE) function before to configure + * the RTC clock source (to be done once after reset). + * @note Once the RTC clock is configured it can't be changed unless the + * Backup domain is reset using RCC_BackupResetCmd() function, or by + * a Power On Reset (POR). + * + * @param RCC_RTCCLKSource: specifies the RTC clock source. + * This parameter can be one of the following values: + * @arg RCC_RTCCLKSource_LSE: LSE selected as RTC clock + * @arg RCC_RTCCLKSource_LSI: LSI selected as RTC clock + * @arg RCC_RTCCLKSource_HSE_Divx: HSE clock divided by x selected + * as RTC clock, where x:[2,31] + * + * @note If the LSE or LSI is used as RTC clock source, the RTC continues to + * work in STOP and STANDBY modes, and can be used as wakeup source. + * However, when the HSE clock is used as RTC clock source, the RTC + * cannot be used in STOP and STANDBY modes. + * @note The maximum input clock frequency for RTC is 1MHz (when using HSE as + * RTC clock source). + * + * @retval None + */ +void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_RTCCLK_SOURCE(RCC_RTCCLKSource)); + + if ((RCC_RTCCLKSource & 0x00000300) == 0x00000300) + { /* If HSE is selected as RTC clock source, configure HSE division factor for RTC clock */ + tmpreg = RCC->CFGR; + + /* Clear RTCPRE[4:0] bits */ + tmpreg &= ~RCC_CFGR_RTCPRE; + + /* Configure HSE division factor for RTC clock */ + tmpreg |= (RCC_RTCCLKSource & 0xFFFFCFF); + + /* Store the new value */ + RCC->CFGR = tmpreg; + } + + /* Select the RTC clock source */ + RCC->BDCR |= (RCC_RTCCLKSource & 0x00000FFF); +} + +/** + * @brief Enables or disables the RTC clock. + * @note This function must be used only after the RTC clock source was selected + * using the RCC_RTCCLKConfig function. + * @param NewState: new state of the RTC clock. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_RTCCLKCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) BDCR_RTCEN_BB = (uint32_t)NewState; +} + +/** + * @brief Forces or releases the Backup domain reset. + * @note This function resets the RTC peripheral (including the backup registers) + * and the RTC clock source selection in RCC_CSR register. + * @note The BKPSRAM is not affected by this reset. + * @param NewState: new state of the Backup domain reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_BackupResetCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) BDCR_BDRST_BB = (uint32_t)NewState; +} + +/** + * @brief Configures the I2S clock source (I2SCLK). + * + * @note This function must be called before enabling the I2S APB clock. + * @note This function applies only to Silicon RevisionB and RevisionY. + * + * @param RCC_I2SCLKSource: specifies the I2S clock source. + * This parameter can be one of the following values: + * @arg RCC_I2S2CLKSource_PLLI2S: PLLI2S clock used as I2S clock source + * @arg RCC_I2S2CLKSource_Ext: External clock mapped on the I2S_CKIN pin + * used as I2S clock source + * @retval None + */ +void RCC_I2SCLKConfig(uint32_t RCC_I2SCLKSource) +{ + /* Check the parameters */ + assert_param(IS_RCC_I2SCLK_SOURCE(RCC_I2SCLKSource)); + + *(__IO uint32_t *) CFGR_I2SSRC_BB = RCC_I2SCLKSource; +} + +/** + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @param RCC_AHBPeriph: specifies the AHB1 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_AHB1Periph_GPIOA: GPIOA clock + * @arg RCC_AHB1Periph_GPIOB: GPIOB clock + * @arg RCC_AHB1Periph_GPIOC: GPIOC clock + * @arg RCC_AHB1Periph_GPIOD: GPIOD clock + * @arg RCC_AHB1Periph_GPIOE: GPIOE clock + * @arg RCC_AHB1Periph_GPIOF: GPIOF clock + * @arg RCC_AHB1Periph_GPIOG: GPIOG clock + * @arg RCC_AHB1Periph_GPIOG: GPIOG clock + * @arg RCC_AHB1Periph_GPIOI: GPIOI clock + * @arg RCC_AHB1Periph_CRC: CRC clock + * @arg RCC_AHB1Periph_BKPSRAM: BKPSRAM interface clock + * @arg RCC_AHB1Periph_DMA1: DMA1 clock + * @arg RCC_AHB1Periph_DMA2: DMA2 clock + * @arg RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock + * @arg RCC_AHB1Periph_ETH_MAC_Tx: Ethernet Transmission clock + * @arg RCC_AHB1Periph_ETH_MAC_Rx: Ethernet Reception clock + * @arg RCC_AHB1Periph_ETH_MAC_PTP: Ethernet PTP clock + * @arg RCC_AHB1Periph_OTG_HS: USB OTG HS clock + * @arg RCC_AHB1Periph_OTG_HS_ULPI: USB OTG HS ULPI clock + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph)); + + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->AHB1ENR |= RCC_AHB1Periph; + } + else + { + RCC->AHB1ENR &= ~RCC_AHB1Periph; + } +} + +/** + * @brief Enables or disables the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @param RCC_AHBPeriph: specifies the AHB2 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_AHB2Periph_DCMI: DCMI clock + * @arg RCC_AHB2Periph_CRYP: CRYP clock + * @arg RCC_AHB2Periph_HASH: HASH clock + * @arg RCC_AHB2Periph_RNG: RNG clock + * @arg RCC_AHB2Periph_OTG_FS: USB OTG FS clock + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->AHB2ENR |= RCC_AHB2Periph; + } + else + { + RCC->AHB2ENR &= ~RCC_AHB2Periph; + } +} + +/** + * @brief Enables or disables the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @param RCC_AHBPeriph: specifies the AHB3 peripheral to gates its clock. + * This parameter must be: RCC_AHB3Periph_FSMC + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB3_PERIPH(RCC_AHB3Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->AHB3ENR |= RCC_AHB3Periph; + } + else + { + RCC->AHB3ENR &= ~RCC_AHB3Periph; + } +} + +/** + * @brief Enables or disables the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @param RCC_APB1Periph: specifies the APB1 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_APB1Periph_TIM2: TIM2 clock + * @arg RCC_APB1Periph_TIM3: TIM3 clock + * @arg RCC_APB1Periph_TIM4: TIM4 clock + * @arg RCC_APB1Periph_TIM5: TIM5 clock + * @arg RCC_APB1Periph_TIM6: TIM6 clock + * @arg RCC_APB1Periph_TIM7: TIM7 clock + * @arg RCC_APB1Periph_TIM12: TIM12 clock + * @arg RCC_APB1Periph_TIM13: TIM13 clock + * @arg RCC_APB1Periph_TIM14: TIM14 clock + * @arg RCC_APB1Periph_WWDG: WWDG clock + * @arg RCC_APB1Periph_SPI2: SPI2 clock + * @arg RCC_APB1Periph_SPI3: SPI3 clock + * @arg RCC_APB1Periph_USART2: USART2 clock + * @arg RCC_APB1Periph_USART3: USART3 clock + * @arg RCC_APB1Periph_UART4: UART4 clock + * @arg RCC_APB1Periph_UART5: UART5 clock + * @arg RCC_APB1Periph_I2C1: I2C1 clock + * @arg RCC_APB1Periph_I2C2: I2C2 clock + * @arg RCC_APB1Periph_I2C3: I2C3 clock + * @arg RCC_APB1Periph_CAN1: CAN1 clock + * @arg RCC_APB1Periph_CAN2: CAN2 clock + * @arg RCC_APB1Periph_PWR: PWR clock + * @arg RCC_APB1Periph_DAC: DAC clock + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->APB1ENR |= RCC_APB1Periph; + } + else + { + RCC->APB1ENR &= ~RCC_APB1Periph; + } +} + +/** + * @brief Enables or disables the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_APB2Periph_TIM1: TIM1 clock + * @arg RCC_APB2Periph_TIM8: TIM8 clock + * @arg RCC_APB2Periph_USART1: USART1 clock + * @arg RCC_APB2Periph_USART6: USART6 clock + * @arg RCC_APB2Periph_ADC1: ADC1 clock + * @arg RCC_APB2Periph_ADC2: ADC2 clock + * @arg RCC_APB2Periph_ADC3: ADC3 clock + * @arg RCC_APB2Periph_SDIO: SDIO clock + * @arg RCC_APB2Periph_SPI1: SPI1 clock + * @arg RCC_APB2Periph_SYSCFG: SYSCFG clock + * @arg RCC_APB2Periph_TIM9: TIM9 clock + * @arg RCC_APB2Periph_TIM10: TIM10 clock + * @arg RCC_APB2Periph_TIM11: TIM11 clock + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->APB2ENR |= RCC_APB2Periph; + } + else + { + RCC->APB2ENR &= ~RCC_APB2Periph; + } +} + +/** + * @brief Forces or releases AHB1 peripheral reset. + * @param RCC_AHB1Periph: specifies the AHB1 peripheral to reset. + * This parameter can be any combination of the following values: + * @arg RCC_AHB1Periph_GPIOA: GPIOA clock + * @arg RCC_AHB1Periph_GPIOB: GPIOB clock + * @arg RCC_AHB1Periph_GPIOC: GPIOC clock + * @arg RCC_AHB1Periph_GPIOD: GPIOD clock + * @arg RCC_AHB1Periph_GPIOE: GPIOE clock + * @arg RCC_AHB1Periph_GPIOF: GPIOF clock + * @arg RCC_AHB1Periph_GPIOG: GPIOG clock + * @arg RCC_AHB1Periph_GPIOG: GPIOG clock + * @arg RCC_AHB1Periph_GPIOI: GPIOI clock + * @arg RCC_AHB1Periph_CRC: CRC clock + * @arg RCC_AHB1Periph_DMA1: DMA1 clock + * @arg RCC_AHB1Periph_DMA2: DMA2 clock + * @arg RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock + * @arg RCC_AHB1Periph_OTG_HS: USB OTG HS clock + * + * @param NewState: new state of the specified peripheral reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHB1PeriphResetCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB1_RESET_PERIPH(RCC_AHB1Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->AHB1RSTR |= RCC_AHB1Periph; + } + else + { + RCC->AHB1RSTR &= ~RCC_AHB1Periph; + } +} + +/** + * @brief Forces or releases AHB2 peripheral reset. + * @param RCC_AHB2Periph: specifies the AHB2 peripheral to reset. + * This parameter can be any combination of the following values: + * @arg RCC_AHB2Periph_DCMI: DCMI clock + * @arg RCC_AHB2Periph_CRYP: CRYP clock + * @arg RCC_AHB2Periph_HASH: HASH clock + * @arg RCC_AHB2Periph_RNG: RNG clock + * @arg RCC_AHB2Periph_OTG_FS: USB OTG FS clock + * @param NewState: new state of the specified peripheral reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHB2PeriphResetCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->AHB2RSTR |= RCC_AHB2Periph; + } + else + { + RCC->AHB2RSTR &= ~RCC_AHB2Periph; + } +} + +/** + * @brief Forces or releases AHB3 peripheral reset. + * @param RCC_AHB3Periph: specifies the AHB3 peripheral to reset. + * This parameter must be: RCC_AHB3Periph_FSMC + * @param NewState: new state of the specified peripheral reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHB3PeriphResetCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB3_PERIPH(RCC_AHB3Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->AHB3RSTR |= RCC_AHB3Periph; + } + else + { + RCC->AHB3RSTR &= ~RCC_AHB3Periph; + } +} + +/** + * @brief Forces or releases Low Speed APB (APB1) peripheral reset. + * @param RCC_APB1Periph: specifies the APB1 peripheral to reset. + * This parameter can be any combination of the following values: + * @arg RCC_APB1Periph_TIM2: TIM2 clock + * @arg RCC_APB1Periph_TIM3: TIM3 clock + * @arg RCC_APB1Periph_TIM4: TIM4 clock + * @arg RCC_APB1Periph_TIM5: TIM5 clock + * @arg RCC_APB1Periph_TIM6: TIM6 clock + * @arg RCC_APB1Periph_TIM7: TIM7 clock + * @arg RCC_APB1Periph_TIM12: TIM12 clock + * @arg RCC_APB1Periph_TIM13: TIM13 clock + * @arg RCC_APB1Periph_TIM14: TIM14 clock + * @arg RCC_APB1Periph_WWDG: WWDG clock + * @arg RCC_APB1Periph_SPI2: SPI2 clock + * @arg RCC_APB1Periph_SPI3: SPI3 clock + * @arg RCC_APB1Periph_USART2: USART2 clock + * @arg RCC_APB1Periph_USART3: USART3 clock + * @arg RCC_APB1Periph_UART4: UART4 clock + * @arg RCC_APB1Periph_UART5: UART5 clock + * @arg RCC_APB1Periph_I2C1: I2C1 clock + * @arg RCC_APB1Periph_I2C2: I2C2 clock + * @arg RCC_APB1Periph_I2C3: I2C3 clock + * @arg RCC_APB1Periph_CAN1: CAN1 clock + * @arg RCC_APB1Periph_CAN2: CAN2 clock + * @arg RCC_APB1Periph_PWR: PWR clock + * @arg RCC_APB1Periph_DAC: DAC clock + * @param NewState: new state of the specified peripheral reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB1RSTR |= RCC_APB1Periph; + } + else + { + RCC->APB1RSTR &= ~RCC_APB1Periph; + } +} + +/** + * @brief Forces or releases High Speed APB (APB2) peripheral reset. + * @param RCC_APB2Periph: specifies the APB2 peripheral to reset. + * This parameter can be any combination of the following values: + * @arg RCC_APB2Periph_TIM1: TIM1 clock + * @arg RCC_APB2Periph_TIM8: TIM8 clock + * @arg RCC_APB2Periph_USART1: USART1 clock + * @arg RCC_APB2Periph_USART6: USART6 clock + * @arg RCC_APB2Periph_ADC1: ADC1 clock + * @arg RCC_APB2Periph_ADC2: ADC2 clock + * @arg RCC_APB2Periph_ADC3: ADC3 clock + * @arg RCC_APB2Periph_SDIO: SDIO clock + * @arg RCC_APB2Periph_SPI1: SPI1 clock + * @arg RCC_APB2Periph_SYSCFG: SYSCFG clock + * @arg RCC_APB2Periph_TIM9: TIM9 clock + * @arg RCC_APB2Periph_TIM10: TIM10 clock + * @arg RCC_APB2Periph_TIM11: TIM11 clock + * @param NewState: new state of the specified peripheral reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB2_RESET_PERIPH(RCC_APB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB2RSTR |= RCC_APB2Periph; + } + else + { + RCC->APB2RSTR &= ~RCC_APB2Periph; + } +} + +/** + * @brief Enables or disables the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @param RCC_AHBPeriph: specifies the AHB1 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_AHB1Periph_GPIOA: GPIOA clock + * @arg RCC_AHB1Periph_GPIOB: GPIOB clock + * @arg RCC_AHB1Periph_GPIOC: GPIOC clock + * @arg RCC_AHB1Periph_GPIOD: GPIOD clock + * @arg RCC_AHB1Periph_GPIOE: GPIOE clock + * @arg RCC_AHB1Periph_GPIOF: GPIOF clock + * @arg RCC_AHB1Periph_GPIOG: GPIOG clock + * @arg RCC_AHB1Periph_GPIOG: GPIOG clock + * @arg RCC_AHB1Periph_GPIOI: GPIOI clock + * @arg RCC_AHB1Periph_CRC: CRC clock + * @arg RCC_AHB1Periph_BKPSRAM: BKPSRAM interface clock + * @arg RCC_AHB1Periph_DMA1: DMA1 clock + * @arg RCC_AHB1Periph_DMA2: DMA2 clock + * @arg RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock + * @arg RCC_AHB1Periph_ETH_MAC_Tx: Ethernet Transmission clock + * @arg RCC_AHB1Periph_ETH_MAC_Rx: Ethernet Reception clock + * @arg RCC_AHB1Periph_ETH_MAC_PTP: Ethernet PTP clock + * @arg RCC_AHB1Periph_OTG_HS: USB OTG HS clock + * @arg RCC_AHB1Periph_OTG_HS_ULPI: USB OTG HS ULPI clock + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB1_LPMODE_PERIPH(RCC_AHB1Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->AHB1LPENR |= RCC_AHB1Periph; + } + else + { + RCC->AHB1LPENR &= ~RCC_AHB1Periph; + } +} + +/** + * @brief Enables or disables the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @param RCC_AHBPeriph: specifies the AHB2 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_AHB2Periph_DCMI: DCMI clock + * @arg RCC_AHB2Periph_CRYP: CRYP clock + * @arg RCC_AHB2Periph_HASH: HASH clock + * @arg RCC_AHB2Periph_RNG: RNG clock + * @arg RCC_AHB2Periph_OTG_FS: USB OTG FS clock + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHB2PeriphClockLPModeCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->AHB2LPENR |= RCC_AHB2Periph; + } + else + { + RCC->AHB2LPENR &= ~RCC_AHB2Periph; + } +} + +/** + * @brief Enables or disables the AHB3 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @param RCC_AHBPeriph: specifies the AHB3 peripheral to gates its clock. + * This parameter must be: RCC_AHB3Periph_FSMC + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHB3PeriphClockLPModeCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB3_PERIPH(RCC_AHB3Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->AHB3LPENR |= RCC_AHB3Periph; + } + else + { + RCC->AHB3LPENR &= ~RCC_AHB3Periph; + } +} + +/** + * @brief Enables or disables the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @param RCC_APB1Periph: specifies the APB1 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_APB1Periph_TIM2: TIM2 clock + * @arg RCC_APB1Periph_TIM3: TIM3 clock + * @arg RCC_APB1Periph_TIM4: TIM4 clock + * @arg RCC_APB1Periph_TIM5: TIM5 clock + * @arg RCC_APB1Periph_TIM6: TIM6 clock + * @arg RCC_APB1Periph_TIM7: TIM7 clock + * @arg RCC_APB1Periph_TIM12: TIM12 clock + * @arg RCC_APB1Periph_TIM13: TIM13 clock + * @arg RCC_APB1Periph_TIM14: TIM14 clock + * @arg RCC_APB1Periph_WWDG: WWDG clock + * @arg RCC_APB1Periph_SPI2: SPI2 clock + * @arg RCC_APB1Periph_SPI3: SPI3 clock + * @arg RCC_APB1Periph_USART2: USART2 clock + * @arg RCC_APB1Periph_USART3: USART3 clock + * @arg RCC_APB1Periph_UART4: UART4 clock + * @arg RCC_APB1Periph_UART5: UART5 clock + * @arg RCC_APB1Periph_I2C1: I2C1 clock + * @arg RCC_APB1Periph_I2C2: I2C2 clock + * @arg RCC_APB1Periph_I2C3: I2C3 clock + * @arg RCC_APB1Periph_CAN1: CAN1 clock + * @arg RCC_APB1Periph_CAN2: CAN2 clock + * @arg RCC_APB1Periph_PWR: PWR clock + * @arg RCC_APB1Periph_DAC: DAC clock + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB1PeriphClockLPModeCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB1LPENR |= RCC_APB1Periph; + } + else + { + RCC->APB1LPENR &= ~RCC_APB1Periph; + } +} + +/** + * @brief Enables or disables the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_APB2Periph_TIM1: TIM1 clock + * @arg RCC_APB2Periph_TIM8: TIM8 clock + * @arg RCC_APB2Periph_USART1: USART1 clock + * @arg RCC_APB2Periph_USART6: USART6 clock + * @arg RCC_APB2Periph_ADC1: ADC1 clock + * @arg RCC_APB2Periph_ADC2: ADC2 clock + * @arg RCC_APB2Periph_ADC3: ADC3 clock + * @arg RCC_APB2Periph_SDIO: SDIO clock + * @arg RCC_APB2Periph_SPI1: SPI1 clock + * @arg RCC_APB2Periph_SYSCFG: SYSCFG clock + * @arg RCC_APB2Periph_TIM9: TIM9 clock + * @arg RCC_APB2Periph_TIM10: TIM10 clock + * @arg RCC_APB2Periph_TIM11: TIM11 clock + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB2PeriphClockLPModeCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB2LPENR |= RCC_APB2Periph; + } + else + { + RCC->APB2LPENR &= ~RCC_APB2Periph; + } +} + +/** + * @} + */ + +/** @defgroup RCC_Group4 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified RCC interrupts. + * @param RCC_IT: specifies the RCC interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt + * @arg RCC_IT_LSERDY: LSE ready interrupt + * @arg RCC_IT_HSIRDY: HSI ready interrupt + * @arg RCC_IT_HSERDY: HSE ready interrupt + * @arg RCC_IT_PLLRDY: main PLL ready interrupt + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt + * @param NewState: new state of the specified RCC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_IT(RCC_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Perform Byte access to RCC_CIR[14:8] bits to enable the selected interrupts */ + *(__IO uint8_t *) CIR_BYTE2_ADDRESS |= RCC_IT; + } + else + { + /* Perform Byte access to RCC_CIR[14:8] bits to disable the selected interrupts */ + *(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT; + } +} + +/** + * @brief Checks whether the specified RCC flag is set or not. + * @param RCC_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready + * @arg RCC_FLAG_HSERDY: HSE oscillator clock ready + * @arg RCC_FLAG_PLLRDY: main PLL clock ready + * @arg RCC_FLAG_PLLI2SRDY: PLLI2S clock ready + * @arg RCC_FLAG_LSERDY: LSE oscillator clock ready + * @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready + * @arg RCC_FLAG_BORRST: POR/PDR or BOR reset + * @arg RCC_FLAG_PINRST: Pin reset + * @arg RCC_FLAG_PORRST: POR/PDR reset + * @arg RCC_FLAG_SFTRST: Software reset + * @arg RCC_FLAG_IWDGRST: Independent Watchdog reset + * @arg RCC_FLAG_WWDGRST: Window Watchdog reset + * @arg RCC_FLAG_LPWRRST: Low Power reset + * @retval The new state of RCC_FLAG (SET or RESET). + */ +FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG) +{ + uint32_t tmp = 0; + uint32_t statusreg = 0; + FlagStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_RCC_FLAG(RCC_FLAG)); + + /* Get the RCC register index */ + tmp = RCC_FLAG >> 5; + if (tmp == 1) /* The flag to check is in CR register */ + { + statusreg = RCC->CR; + } + else if (tmp == 2) /* The flag to check is in BDCR register */ + { + statusreg = RCC->BDCR; + } + else /* The flag to check is in CSR register */ + { + statusreg = RCC->CSR; + } + + /* Get the flag position */ + tmp = RCC_FLAG & FLAG_MASK; + if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** + * @brief Clears the RCC reset flags. + * The reset flags are: RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST, + * RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST + * @param None + * @retval None + */ +void RCC_ClearFlag(void) +{ + /* Set RMVF bit to clear the reset flags */ + RCC->CSR |= RCC_CSR_RMVF; +} + +/** + * @brief Checks whether the specified RCC interrupt has occurred or not. + * @param RCC_IT: specifies the RCC interrupt source to check. + * This parameter can be one of the following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt + * @arg RCC_IT_LSERDY: LSE ready interrupt + * @arg RCC_IT_HSIRDY: HSI ready interrupt + * @arg RCC_IT_HSERDY: HSE ready interrupt + * @arg RCC_IT_PLLRDY: main PLL ready interrupt + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt + * @arg RCC_IT_CSS: Clock Security System interrupt + * @retval The new state of RCC_IT (SET or RESET). + */ +ITStatus RCC_GetITStatus(uint8_t RCC_IT) +{ + ITStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_RCC_GET_IT(RCC_IT)); + + /* Check the status of the specified RCC interrupt */ + if ((RCC->CIR & RCC_IT) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the RCC_IT status */ + return bitstatus; +} + +/** + * @brief Clears the RCC's interrupt pending bits. + * @param RCC_IT: specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt + * @arg RCC_IT_LSERDY: LSE ready interrupt + * @arg RCC_IT_HSIRDY: HSI ready interrupt + * @arg RCC_IT_HSERDY: HSE ready interrupt + * @arg RCC_IT_PLLRDY: main PLL ready interrupt + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt + * @arg RCC_IT_CSS: Clock Security System interrupt + * @retval None + */ +void RCC_ClearITPendingBit(uint8_t RCC_IT) +{ + /* Check the parameters */ + assert_param(IS_RCC_CLEAR_IT(RCC_IT)); + + /* Perform Byte access to RCC_CIR[23:16] bits to clear the selected interrupt + pending bits */ + *(__IO uint8_t *) CIR_BYTE3_ADDRESS = RCC_IT; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rng.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rng.c new file mode 100644 index 000000000..99d88b22d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rng.c @@ -0,0 +1,405 @@ +/** + ****************************************************************************** + * @file stm32f2xx_rng.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Random Number Generator (RNG) peripheral: + * - Initialization and Configuration + * - Get 32 bit Random number + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable The RNG controller clock using + * RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE) function. + * + * 2. Activate the RNG peripheral using RNG_Cmd() function. + * + * 3. Wait until the 32 bit Random number Generator contains a valid + * random data (using polling/interrupt mode). For more details, + * refer to "Interrupts and flags management functions" module + * description. + * + * 4. Get the 32 bit Random number using RNG_GetRandomNumber() function + * + * 5. To get another 32 bit Random number, go to step 3. + * + * + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup RNG + * @brief RNG driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup RNG_Private_Functions + * @{ + */ + +/** @defgroup RNG_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + This section provides functions allowing to + - Initialize the RNG peripheral + - Enable or disable the RNG peripheral + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the RNG peripheral registers to their default reset values. + * @param None + * @retval None + */ +void RNG_DeInit(void) +{ + /* Enable RNG reset state */ + RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, ENABLE); + + /* Release RNG from reset state */ + RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, DISABLE); +} + +/** + * @brief Enables or disables the RNG peripheral. + * @param NewState: new state of the RNG peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RNG_Cmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the RNG */ + RNG->CR |= RNG_CR_RNGEN; + } + else + { + /* Disable the RNG */ + RNG->CR &= ~RNG_CR_RNGEN; + } +} +/** + * @} + */ + +/** @defgroup RNG_Group2 Get 32 bit Random number function + * @brief Get 32 bit Random number function + * + +@verbatim + =============================================================================== + Get 32 bit Random number function + =============================================================================== + This section provides a function allowing to get the 32 bit Random number + + @note Before to call this function you have to wait till DRDY flag is set, + using RNG_GetFlagStatus(RNG_FLAG_DRDY) function. + +@endverbatim + * @{ + */ + + +/** + * @brief Returns a 32-bit random number. + * + * @note Before to call this function you have to wait till DRDY (data ready) + * flag is set, using RNG_GetFlagStatus(RNG_FLAG_DRDY) function. + * @note Each time the the Random number data is read (using RNG_GetRandomNumber() + * function), the RNG_FLAG_DRDY flag is automatically cleared. + * @note In the case of a seed error, the generation of random numbers is + * interrupted for as long as the SECS bit is '1'. If a number is + * available in the RNG_DR register, it must not be used because it may + * not have enough entropy. In this case, it is recommended to clear the + * SEIS bit(using RNG_ClearFlag(RNG_FLAG_SECS) function), then disable + * and enable the RNG peripheral (using RNG_Cmd() function) to + * reinitialize and restart the RNG. + * @note In the case of a clock error, the RNG is no more able to generate + * random numbers because the PLL48CLK clock is not correct. User have + * to check that the clock controller is correctly configured to provide + * the RNG clock and clear the CEIS bit (using RNG_ClearFlag(RNG_FLAG_CECS) + * function) . The clock error has no impact on the previously generated + * random numbers, and the RNG_DR register contents can be used. + * + * @param None + * @retval 32-bit random number. + */ +uint32_t RNG_GetRandomNumber(void) +{ + /* Return the 32 bit random number from the DR register */ + return RNG->DR; +} + + +/** + * @} + */ + +/** @defgroup RNG_Group3 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + + This section provides functions allowing to configure the RNG Interrupts and + to get the status and clear flags and Interrupts pending bits. + + The RNG provides 3 Interrupts sources and 3 Flags: + + Flags : + ---------- + 1. RNG_FLAG_DRDY : In the case of the RNG_DR register contains valid + random data. it is cleared by reading the valid data + (using RNG_GetRandomNumber() function). + + 2. RNG_FLAG_CECS : In the case of a seed error detection. + + 3. RNG_FLAG_SECS : In the case of a clock error detection. + + + Interrupts : + ------------ + if enabled, an RNG interrupt is pending : + + 1. In the case of the RNG_DR register contains valid random data. + This interrupt source is cleared once the RNG_DR register has been read + (using RNG_GetRandomNumber() function) until a new valid value is + computed. + + or + 2. In the case of a seed error : One of the following faulty sequences has + been detected: + - More than 64 consecutive bits at the same value (0 or 1) + - More than 32 consecutive alternance of 0 and 1 (0101010101...01) + This interrupt source is cleared using RNG_ClearITPendingBit(RNG_IT_SEI) + function. + + or + 3. In the case of a clock error : the PLL48CLK (RNG peripheral clock source) + was not correctly detected (fPLL48CLK< fHCLK/16). + This interrupt source is cleared using RNG_ClearITPendingBit(RNG_IT_CEI) + function. + @note In this case, User have to check that the clock controller is + correctly configured to provide the RNG clock. + + Managing the RNG controller events : + ------------------------------------ + The user should identify which mode will be used in his application to manage + the RNG controller events: Polling mode or Interrupt mode. + + 1. In the Polling Mode it is advised to use the following functions: + - RNG_GetFlagStatus() : to check if flags events occur. + - RNG_ClearFlag() : to clear the flags events. + + @note RNG_FLAG_DRDY can not be cleared by RNG_ClearFlag(). it is cleared only + by reading the Random number data. + + 2. In the Interrupt Mode it is advised to use the following functions: + - RNG_ITConfig() : to enable or disable the interrupt source. + - RNG_GetITStatus() : to check if Interrupt occurs. + - RNG_ClearITPendingBit() : to clear the Interrupt pending Bit + (corresponding Flag). + + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the RNG interrupt. + * @note The RNG provides 3 interrupt sources, + * - Computed data is ready event (DRDY), and + * - Seed error Interrupt (SEI) and + * - Clock error Interrupt (CEI), + * all these interrupts sources are enabled by setting the IE bit in + * CR register. However, each interrupt have its specific status bit + * (see RNG_GetITStatus() function) and clear bit except the DRDY event + * (see RNG_ClearITPendingBit() function). + * @param NewState: new state of the RNG interrupt. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RNG_ITConfig(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the RNG interrupt */ + RNG->CR |= RNG_CR_IE; + } + else + { + /* Disable the RNG interrupt */ + RNG->CR &= ~RNG_CR_IE; + } +} + +/** + * @brief Checks whether the specified RNG flag is set or not. + * @param RNG_FLAG: specifies the RNG flag to check. + * This parameter can be one of the following values: + * @arg RNG_FLAG_DRDY: Data Ready flag. + * @arg RNG_FLAG_CECS: Clock Error Current flag. + * @arg RNG_FLAG_SECS: Seed Error Current flag. + * @retval The new state of RNG_FLAG (SET or RESET). + */ +FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_RNG_GET_FLAG(RNG_FLAG)); + + /* Check the status of the specified RNG flag */ + if ((RNG->SR & RNG_FLAG) != (uint8_t)RESET) + { + /* RNG_FLAG is set */ + bitstatus = SET; + } + else + { + /* RNG_FLAG is reset */ + bitstatus = RESET; + } + /* Return the RNG_FLAG status */ + return bitstatus; +} + + +/** + * @brief Clears the RNG flags. + * @param RNG_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg RNG_FLAG_CECS: Clock Error Current flag. + * @arg RNG_FLAG_SECS: Seed Error Current flag. + * @note RNG_FLAG_DRDY can not be cleared by RNG_ClearFlag() function. + * This flag is cleared only by reading the Random number data (using + * RNG_GetRandomNumber() function). + * @retval None + */ +void RNG_ClearFlag(uint8_t RNG_FLAG) +{ + /* Check the parameters */ + assert_param(IS_RNG_CLEAR_FLAG(RNG_FLAG)); + /* Clear the selected RNG flags */ + RNG->SR = ~(uint32_t)(((uint32_t)RNG_FLAG) << 4); +} + +/** + * @brief Checks whether the specified RNG interrupt has occurred or not. + * @param RNG_IT: specifies the RNG interrupt source to check. + * This parameter can be one of the following values: + * @arg RNG_IT_CEI: Clock Error Interrupt. + * @arg RNG_IT_SEI: Seed Error Interrupt. + * @retval The new state of RNG_IT (SET or RESET). + */ +ITStatus RNG_GetITStatus(uint8_t RNG_IT) +{ + ITStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_RNG_GET_IT(RNG_IT)); + + /* Check the status of the specified RNG interrupt */ + if ((RNG->SR & RNG_IT) != (uint8_t)RESET) + { + /* RNG_IT is set */ + bitstatus = SET; + } + else + { + /* RNG_IT is reset */ + bitstatus = RESET; + } + /* Return the RNG_IT status */ + return bitstatus; +} + + +/** + * @brief Clears the RNG interrupt pending bit(s). + * @param RNG_IT: specifies the RNG interrupt pending bit(s) to clear. + * This parameter can be any combination of the following values: + * @arg RNG_IT_CEI: Clock Error Interrupt. + * @arg RNG_IT_SEI: Seed Error Interrupt. + * @retval None + */ +void RNG_ClearITPendingBit(uint8_t RNG_IT) +{ + /* Check the parameters */ + assert_param(IS_RNG_IT(RNG_IT)); + + /* Clear the selected RNG interrupt pending bit */ + RNG->SR = (uint8_t)~RNG_IT; +} +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rtc.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rtc.c new file mode 100644 index 000000000..7ec11f0e2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rtc.c @@ -0,0 +1,2244 @@ +/** + ****************************************************************************** + * @file stm32f2xx_rtc.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Real-Time Clock (RTC) peripheral: + * - Initialization + * - Calendar (Time and Date) configuration + * - Alarms (Alarm A and Alarm B) configuration + * - WakeUp Timer configuration + * - Daylight Saving configuration + * - Output pin Configuration + * - Coarse Calibration configuration + * - TimeStamp configuration + * - Tampers configuration + * - Backup Data Registers configuration + * - RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * Backup Domain Operating Condition + * =================================================================== + * The real-time clock (RTC), the RTC backup registers, and the backup + * SRAM (BKP SRAM) can be powered from the VBAT voltage when the main + * VDD supply is powered off. + * To retain the content of the RTC backup registers, backup SRAM, + * and supply the RTC when VDD is turned off, VBAT pin can be connected + * to an optional standby voltage supplied by a battery or by another + * source. + * + * To allow the RTC to operate even when the main digital supply (VDD) + * is turned off, the VBAT pin powers the following blocks: + * 1 - The RTC + * 2 - The LSE oscillator + * 3 - The backup SRAM when the low power backup regulator is enabled + * 4 - PC13 to PC15 I/Os, plus PI8 I/O (when available) + * + * When the backup domain is supplied by VDD (analog switch connected + * to VDD), the following functions are available: + * 1 - PC14 and PC15 can be used as either GPIO or LSE pins + * 2 - PC13 can be used as a GPIO or as the RTC_AF1 pin + * 3 - PI8 can be used as a GPIO or as the RTC_AF2 pin + * + * When the backup domain is supplied by VBAT (analog switch connected + * to VBAT because VDD is not present), the following functions are available: + * 1 - PC14 and PC15 can be used as LSE pins only + * 2 - PC13 can be used as the RTC_AF1 pin + * 3 - PI8 can be used as the RTC_AF2 pin + * + * =================================================================== + * Backup Domain Reset + * =================================================================== + * The backup domain reset sets all RTC registers and the RCC_BDCR + * register to their reset values. The BKPSRAM is not affected by this + * reset. The only way of resetting the BKPSRAM is through the Flash + * interface by requesting a protection level change from 1 to 0. + * A backup domain reset is generated when one of the following events + * occurs: + * 1 - Software reset, triggered by setting the BDRST bit in the + * RCC Backup domain control register (RCC_BDCR). You can use the + * RCC_BackupResetCmd(). + * 2 - VDD or VBAT power on, if both supplies have previously been + * powered off. + * + * =================================================================== + * Backup Domain Access + * =================================================================== + * After reset, the backup domain (RTC registers, RTC backup data + * registers and backup SRAM) is protected against possible unwanted + * write accesses. + * To enable access to the RTC Domain and RTC registers, proceed as follows: + * - Enable the Power Controller (PWR) APB1 interface clock using the + * RCC_APB1PeriphClockCmd() function. + * - Enable access to RTC domain using the PWR_BackupAccessCmd() function. + * - Select the RTC clock source using the RCC_RTCCLKConfig() function. + * - Enable RTC Clock using the RCC_RTCCLKCmd() function. + * + * =================================================================== + * RTC Driver: how to use it + * =================================================================== + * - Enable the RTC domain access (see description in the section above) + * - Configure the RTC Prescaler (Asynchronous and Synchronous) and + * RTC hour format using the RTC_Init() function. + * + * Time and Date configuration + * =========================== + * - To configure the RTC Calendar (Time and Date) use the RTC_SetTime() + * and RTC_SetDate() functions. + * - To read the RTC Calendar, use the RTC_GetTime() and RTC_GetDate() + * functions. + * - Use the RTC_DayLightSavingConfig() function to add or sub one + * hour to the RTC Calendar. + * + * Alarm configuration + * =================== + * - To configure the RTC Alarm use the RTC_SetAlarm() function. + * - Enable the selected RTC Alarm using the RTC_AlarmCmd() function + * - To read the RTC Alarm, use the RTC_GetAlarm() function. + * + * RTC Wakeup configuration + * ======================== + * - Configure the RTC Wakeup Clock source use the RTC_WakeUpClockConfig() + * function. + * - Configure the RTC WakeUp Counter using the RTC_SetWakeUpCounter() + * function + * - Enable the RTC WakeUp using the RTC_WakeUpCmd() function + * - To read the RTC WakeUp Counter register, use the RTC_GetWakeUpCounter() + * function. + * + * Outputs configuration + * ===================== + * The RTC has 2 different outputs: + * - AFO_ALARM: this output is used to manage the RTC Alarm A, Alarm B + * and WaKeUp signals. + * To output the selected RTC signal on RTC_AF1 pin, use the + * RTC_OutputConfig() function. + * - AFO_CALIB: this output is used to manage the RTC Clock divided + * by 64 (512Hz) signal. + * To output the RTC Clock on RTC_AF1 pin, use the RTC_CalibOutputCmd() + * function. + * + * Coarse Calibration configuration + * ================================= + * - Configure the RTC Coarse Calibration Value and the corresponding + * sign using the RTC_CoarseCalibConfig() function. + * - Enable the RTC Coarse Calibration using the RTC_CoarseCalibCmd() + * function + * + * TimeStamp configuration + * ======================= + * - Configure the RTC_AF1 trigger and enables the RTC TimeStamp + * using the RTC_TimeStampCmd() function. + * - To read the RTC TimeStamp Time and Date register, use the + * RTC_GetTimeStamp() function. + * - The TAMPER1 alternate function can be mapped either to RTC_AF1(PC13) + * or RTC_AF2 (PI8) depending on the value of TAMP1INSEL bit in + * RTC_TAFCR register. You can use the RTC_TamperPinSelection() + * function to select the corresponding pin. + * + * Tamper configuration + * ==================== + * - Configure the RTC Tamper trigger using the RTC_TamperConfig() + * function. + * - Enable the RTC Tamper using the RTC_TamperCmd() function. + * - The TIMESTAMP alternate function can be mapped to either RTC_AF1 + * or RTC_AF2 depending on the value of the TSINSEL bit in the + * RTC_TAFCR register. You can use the RTC_TimeStampPinSelection() + * function to select the corresponding pin. + * + * Backup Data Registers configuration + * =================================== + * - To write to the RTC Backup Data registers, use the RTC_WriteBackupRegister() + * function. + * - To read the RTC Backup Data registers, use the RTC_ReadBackupRegister() + * function. + * + * =================================================================== + * RTC and low power modes + * =================================================================== + * The MCU can be woken up from a low power mode by an RTC alternate + * function. + * The RTC alternate functions are the RTC alarms (Alarm A and Alarm B), + * RTC wakeup, RTC tamper event detection and RTC time stamp event detection. + * These RTC alternate functions can wake up the system from the Stop + * and Standby lowpower modes. + * The system can also wake up from low power modes without depending + * on an external interrupt (Auto-wakeup mode), by using the RTC alarm + * or the RTC wakeup events. + * The RTC provides a programmable time base for waking up from the + * Stop or Standby mode at regular intervals. + * Wakeup from STOP and Standby modes is possible only when the RTC + * clock source is LSE or LSI. + * + * =================================================================== + * Selection of RTC_AF1 alternate functions + * =================================================================== + * The RTC_AF1 pin (PC13) can be used for the following purposes: + * - AFO_ALARM output + * - AFO_CALIB output + * - AFI_TAMPER + * - AFI_TIMESTAMP + * + * +-------------------------------------------------------------------------------------------------------------+ + * | Pin |AFO_ALARM |AFO_CALIB |AFI_TAMPER |AFI_TIMESTAMP | TAMP1INSEL | TSINSEL |ALARMOUTTYPE | + * | configuration | ENABLED | ENABLED | ENABLED | ENABLED |TAMPER1 pin |TIMESTAMP pin | AFO_ALARM | + * | and function | | | | | selection | selection |Configuration | + * |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| + * | Alarm out | | | | | Don't | Don't | | + * | output OD | 1 |Don't care|Don't care | Don't care | care | care | 0 | + * |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| + * | Alarm out | | | | | Don't | Don't | | + * | output PP | 1 |Don't care|Don't care | Don't care | care | care | 1 | + * |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| + * | Calibration out | | | | | Don't | Don't | | + * | output PP | 0 | 1 |Don't care | Don't care | care | care | Don't care | + * |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| + * | TAMPER input | | | | | | Don't | | + * | floating | 0 | 0 | 1 | 0 | 0 | care | Don't care | + * |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| + * | TIMESTAMP and | | | | | | | | + * | TAMPER input | 0 | 0 | 1 | 1 | 0 | 0 | Don't care | + * | floating | | | | | | | | + * |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| + * | TIMESTAMP input | | | | | Don't | | | + * | floating | 0 | 0 | 0 | 1 | care | 0 | Don't care | + * |-----------------|----------|----------|-----------|--------------|------------|--------------|--------------| + * | Standard GPIO | 0 | 0 | 0 | 0 | Don't care | Don't care | Don't care | + * +-------------------------------------------------------------------------------------------------------------+ + * + * + * =================================================================== + * Selection of RTC_AF2 alternate functions + * =================================================================== + * The RTC_AF2 pin (PI8) can be used for the following purposes: + * - AFI_TAMPER + * - AFI_TIMESTAMP + * + * +---------------------------------------------------------------------------------------+ + * | Pin |AFI_TAMPER |AFI_TIMESTAMP | TAMP1INSEL | TSINSEL |ALARMOUTTYPE | + * | configuration | ENABLED | ENABLED |TAMPER1 pin |TIMESTAMP pin | AFO_ALARM | + * | and function | | | selection | selection |Configuration | + * |-----------------|-----------|--------------|------------|--------------|--------------| + * | TAMPER input | | | | Don't | | + * | floating | 1 | 0 | 1 | care | Don't care | + * |-----------------|-----------|--------------|------------|--------------|--------------| + * | TIMESTAMP and | | | | | | + * | TAMPER input | 1 | 1 | 1 | 1 | Don't care | + * | floating | | | | | | + * |-----------------|-----------|--------------|------------|--------------|--------------| + * | TIMESTAMP input | | | Don't | | | + * | floating | 0 | 1 | care | 1 | Don't care | + * |-----------------|-----------|--------------|------------|--------------|--------------| + * | Standard GPIO | 0 | 0 | Don't care | Don't care | Don't care | + * +---------------------------------------------------------------------------------------+ + * + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup RTC + * @brief RTC driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* Masks Definition */ +#define RTC_TR_RESERVED_MASK ((uint32_t)0x007F7F7F) +#define RTC_DR_RESERVED_MASK ((uint32_t)0x00FFFF3F) +#define RTC_INIT_MASK ((uint32_t)0xFFFFFFFF) +#define RTC_RSF_MASK ((uint32_t)0xFFFFFF5F) +#define RTC_FLAGS_MASK ((uint32_t)(RTC_FLAG_TSOVF | RTC_FLAG_TSF | RTC_FLAG_WUTF | \ + RTC_FLAG_ALRBF | RTC_FLAG_ALRAF | RTC_FLAG_INITF | \ + RTC_FLAG_RSF | RTC_FLAG_INITS | RTC_FLAG_WUTWF | \ + RTC_FLAG_ALRBWF | RTC_FLAG_ALRAWF | RTC_FLAG_TAMP1F )) + +#define INITMODE_TIMEOUT ((uint32_t) 0x00010000) +#define SYNCHRO_TIMEOUT ((uint32_t) 0x00008000) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +static uint8_t RTC_ByteToBcd2(uint8_t Value); +static uint8_t RTC_Bcd2ToByte(uint8_t Value); + +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup RTC_Private_Functions + * @{ + */ + +/** @defgroup RTC_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + + This section provide functions allowing to initialize and configure the RTC + Prescaler (Synchronous and Asynchronous), RTC Hour format, disable RTC registers + Write protection, enter and exit the RTC initialization mode, RTC registers + synchronization check and reference clock detection enable. + + 1. The RTC Prescaler is programmed to generate the RTC 1Hz time base. It is + split into 2 programmable prescalers to minimize power consumption. + - A 7-bit asynchronous prescaler and A 13-bit synchronous prescaler. + - When both prescalers are used, it is recommended to configure the asynchronous + prescaler to a high value to minimize consumption. + + 2. All RTC registers are Write protected. Writing to the RTC registers + is enabled by writing a key into the Write Protection register, RTC_WPR. + + 3. To Configure the RTC Calendar, user application should enter initialization + mode. In this mode, the calendar counter is stopped and its value can be + updated. When the initialization sequence is complete, the calendar restarts + counting after 4 RTCCLK cycles. + + 4. To read the calendar through the shadow registers after Calendar initialization, + calendar update or after wakeup from low power modes the software must first + clear the RSF flag. The software must then wait until it is set again before + reading the calendar, which means that the calendar registers have been + correctly copied into the RTC_TR and RTC_DR shadow registers. + The RTC_WaitForSynchro() function implements the above software sequence + (RSF clear and RSF check). + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the RTC registers to their default reset values. + * @note This function doesn't reset the RTC Clock source and RTC Backup Data + * registers. + * @param None + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC registers are deinitialized + * - ERROR: RTC registers are not deinitialized + */ +ErrorStatus RTC_DeInit(void) +{ + __IO uint32_t wutcounter = 0x00; + uint32_t wutwfstatus = 0x00; + ErrorStatus status = ERROR; + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Set Initialization mode */ + if (RTC_EnterInitMode() == ERROR) + { + status = ERROR; + } + else + { + /* Reset TR, DR and CR registers */ + RTC->TR = (uint32_t)0x00000000; + RTC->DR = (uint32_t)0x00002101; + /* Reset All CR bits except CR[2:0] */ + RTC->CR &= (uint32_t)0x00000007; + + /* Wait till RTC WUTWF flag is set and if Time out is reached exit */ + do + { + wutwfstatus = RTC->ISR & RTC_ISR_WUTWF; + wutcounter++; + } while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00)); + + if ((RTC->ISR & RTC_ISR_WUTWF) == RESET) + { + status = ERROR; + } + else + { + /* Reset all RTC CR register bits */ + RTC->CR &= (uint32_t)0x00000000; + RTC->WUTR = (uint32_t)0x0000FFFF; + RTC->PRER = (uint32_t)0x007F00FF; + RTC->CALIBR = (uint32_t)0x00000000; + RTC->ALRMAR = (uint32_t)0x00000000; + RTC->ALRMBR = (uint32_t)0x00000000; + + /* Reset ISR register and exit initialization mode */ + RTC->ISR = (uint32_t)0x00000000; + + /* Reset Tamper and alternate functions configuration register */ + RTC->TAFCR = 0x00000000; + + if(RTC_WaitForSynchro() == ERROR) + { + status = ERROR; + } + else + { + status = SUCCESS; + } + } + } + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return status; +} + +/** + * @brief Initializes the RTC registers according to the specified parameters + * in RTC_InitStruct. + * @param RTC_InitStruct: pointer to a RTC_InitTypeDef structure that contains + * the configuration information for the RTC peripheral. + * @note The RTC Prescaler register is write protected and can be written in + * initialization mode only. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC registers are initialized + * - ERROR: RTC registers are not initialized + */ +ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct) +{ + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_RTC_HOUR_FORMAT(RTC_InitStruct->RTC_HourFormat)); + assert_param(IS_RTC_ASYNCH_PREDIV(RTC_InitStruct->RTC_AsynchPrediv)); + assert_param(IS_RTC_SYNCH_PREDIV(RTC_InitStruct->RTC_SynchPrediv)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Set Initialization mode */ + if (RTC_EnterInitMode() == ERROR) + { + status = ERROR; + } + else + { + /* Clear RTC CR FMT Bit */ + RTC->CR &= ((uint32_t)~(RTC_CR_FMT)); + /* Set RTC_CR register */ + RTC->CR |= ((uint32_t)(RTC_InitStruct->RTC_HourFormat)); + + /* Configure the RTC PRER */ + RTC->PRER = (uint32_t)(RTC_InitStruct->RTC_SynchPrediv); + RTC->PRER |= (uint32_t)(RTC_InitStruct->RTC_AsynchPrediv << 16); + + /* Exit Initialization mode */ + RTC_ExitInitMode(); + + status = SUCCESS; + } + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return status; +} + +/** + * @brief Fills each RTC_InitStruct member with its default value. + * @param RTC_InitStruct: pointer to a RTC_InitTypeDef structure which will be + * initialized. + * @retval None + */ +void RTC_StructInit(RTC_InitTypeDef* RTC_InitStruct) +{ + /* Initialize the RTC_HourFormat member */ + RTC_InitStruct->RTC_HourFormat = RTC_HourFormat_24; + + /* Initialize the RTC_AsynchPrediv member */ + RTC_InitStruct->RTC_AsynchPrediv = (uint32_t)0x7F; + + /* Initialize the RTC_SynchPrediv member */ + RTC_InitStruct->RTC_SynchPrediv = (uint32_t)0xFF; +} + +/** + * @brief Enables or disables the RTC registers write protection. + * @note All the RTC registers are write protected except for RTC_ISR[13:8], + * RTC_TAFCR and RTC_BKPxR. + * @note Writing a wrong key reactivates the write protection. + * @note The protection mechanism is not affected by system reset. + * @param NewState: new state of the write protection. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RTC_WriteProtectionCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + } + else + { + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + } +} + +/** + * @brief Enters the RTC Initialization mode. + * @note The RTC Initialization mode is write protected, use the + * RTC_WriteProtectionCmd(DISABLE) before calling this function. + * @param None + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC is in Init mode + * - ERROR: RTC is not in Init mode + */ +ErrorStatus RTC_EnterInitMode(void) +{ + __IO uint32_t initcounter = 0x00; + ErrorStatus status = ERROR; + uint32_t initstatus = 0x00; + + /* Check if the Initialization mode is set */ + if ((RTC->ISR & RTC_ISR_INITF) == (uint32_t)RESET) + { + /* Set the Initialization mode */ + RTC->ISR = (uint32_t)RTC_INIT_MASK; + + /* Wait till RTC is in INIT state and if Time out is reached exit */ + do + { + initstatus = RTC->ISR & RTC_ISR_INITF; + initcounter++; + } while((initcounter != INITMODE_TIMEOUT) && (initstatus == 0x00)); + + if ((RTC->ISR & RTC_ISR_INITF) != RESET) + { + status = SUCCESS; + } + else + { + status = ERROR; + } + } + else + { + status = SUCCESS; + } + + return (status); +} + +/** + * @brief Exits the RTC Initialization mode. + * @note When the initialization sequence is complete, the calendar restarts + * counting after 4 RTCCLK cycles. + * @note The RTC Initialization mode is write protected, use the + * RTC_WriteProtectionCmd(DISABLE) before calling this function. + * @param None + * @retval None + */ +void RTC_ExitInitMode(void) +{ + /* Exit Initialization mode */ + RTC->ISR &= (uint32_t)~RTC_ISR_INIT; +} + +/** + * @brief Waits until the RTC Time and Date registers (RTC_TR and RTC_DR) are + * synchronized with RTC APB clock. + * @note The RTC Resynchronization mode is write protected, use the + * RTC_WriteProtectionCmd(DISABLE) before calling this function. + * @note To read the calendar through the shadow registers after Calendar + * initialization, calendar update or after wakeup from low power modes + * the software must first clear the RSF flag. + * The software must then wait until it is set again before reading + * the calendar, which means that the calendar registers have been + * correctly copied into the RTC_TR and RTC_DR shadow registers. + * @param None + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC registers are synchronised + * - ERROR: RTC registers are not synchronised + */ +ErrorStatus RTC_WaitForSynchro(void) +{ + __IO uint32_t synchrocounter = 0; + ErrorStatus status = ERROR; + uint32_t synchrostatus = 0x00; + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Clear RSF flag */ + RTC->ISR &= (uint32_t)RTC_RSF_MASK; + + /* Wait the registers to be synchronised */ + do + { + synchrostatus = RTC->ISR & RTC_ISR_RSF; + synchrocounter++; + } while((synchrocounter != SYNCHRO_TIMEOUT) && (synchrostatus == 0x00)); + + if ((RTC->ISR & RTC_ISR_RSF) != RESET) + { + status = SUCCESS; + } + else + { + status = ERROR; + } + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return (status); +} + +/** + * @brief Enables or disables the RTC reference clock detection. + * @param NewState: new state of the RTC reference clock. + * This parameter can be: ENABLE or DISABLE. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC reference clock detection is enabled + * - ERROR: RTC reference clock detection is disabled + */ +ErrorStatus RTC_RefClockCmd(FunctionalState NewState) +{ + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Set Initialization mode */ + if (RTC_EnterInitMode() == ERROR) + { + status = ERROR; + } + else + { + if (NewState != DISABLE) + { + /* Enable the RTC reference clock detection */ + RTC->CR |= RTC_CR_REFCKON; + } + else + { + /* Disable the RTC reference clock detection */ + RTC->CR &= ~RTC_CR_REFCKON; + } + /* Exit Initialization mode */ + RTC_ExitInitMode(); + + status = SUCCESS; + } + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return status; +} + +/** + * @} + */ + +/** @defgroup RTC_Group2 Time and Date configuration functions + * @brief Time and Date configuration functions + * +@verbatim + =============================================================================== + Time and Date configuration functions + =============================================================================== + + This section provide functions allowing to program and read the RTC Calendar + (Time and Date). + +@endverbatim + * @{ + */ + +/** + * @brief Set the RTC current time. + * @param RTC_Format: specifies the format of the entered parameters. + * This parameter can be one of the following values: + * @arg RTC_Format_BIN: Binary data format + * @arg RTC_Format_BCD: BCD data format + * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that contains + * the time configuration information for the RTC. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC Time register is configured + * - ERROR: RTC Time register is not configured + */ +ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct) +{ + uint32_t tmpreg = 0; + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_RTC_FORMAT(RTC_Format)); + + if (RTC_Format == RTC_Format_BIN) + { + if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) + { + assert_param(IS_RTC_HOUR12(RTC_TimeStruct->RTC_Hours)); + assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12)); + } + else + { + RTC_TimeStruct->RTC_H12 = 0x00; + assert_param(IS_RTC_HOUR24(RTC_TimeStruct->RTC_Hours)); + } + assert_param(IS_RTC_MINUTES(RTC_TimeStruct->RTC_Minutes)); + assert_param(IS_RTC_SECONDS(RTC_TimeStruct->RTC_Seconds)); + } + else + { + if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) + { + tmpreg = RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours); + assert_param(IS_RTC_HOUR12(tmpreg)); + assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12)); + } + else + { + RTC_TimeStruct->RTC_H12 = 0x00; + assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours))); + } + assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes))); + assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds))); + } + + /* Check the input parameters format */ + if (RTC_Format != RTC_Format_BIN) + { + tmpreg = (((uint32_t)(RTC_TimeStruct->RTC_Hours) << 16) | \ + ((uint32_t)(RTC_TimeStruct->RTC_Minutes) << 8) | \ + ((uint32_t)RTC_TimeStruct->RTC_Seconds) | \ + ((uint32_t)(RTC_TimeStruct->RTC_H12) << 16)); + } + else + { + tmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Hours) << 16) | \ + ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Minutes) << 8) | \ + ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Seconds)) | \ + (((uint32_t)RTC_TimeStruct->RTC_H12) << 16)); + } + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Set Initialization mode */ + if (RTC_EnterInitMode() == ERROR) + { + status = ERROR; + } + else + { + /* Set the RTC_TR register */ + RTC->TR = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK); + + /* Exit Initialization mode */ + RTC_ExitInitMode(); + + if(RTC_WaitForSynchro() == ERROR) + { + status = ERROR; + } + else + { + status = SUCCESS; + } + + } + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return status; +} + +/** + * @brief Fills each RTC_TimeStruct member with its default value + * (Time = 00h:00min:00sec). + * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure which will be + * initialized. + * @retval None + */ +void RTC_TimeStructInit(RTC_TimeTypeDef* RTC_TimeStruct) +{ + /* Time = 00h:00min:00sec */ + RTC_TimeStruct->RTC_H12 = RTC_H12_AM; + RTC_TimeStruct->RTC_Hours = 0; + RTC_TimeStruct->RTC_Minutes = 0; + RTC_TimeStruct->RTC_Seconds = 0; +} + +/** + * @brief Get the RTC current Time. + * @param RTC_Format: specifies the format of the returned parameters. + * This parameter can be one of the following values: + * @arg RTC_Format_BIN: Binary data format + * @arg RTC_Format_BCD: BCD data format + * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that will + * contain the returned current time configuration. + * @retval None + */ +void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RTC_FORMAT(RTC_Format)); + + /* Get the RTC_TR register */ + tmpreg = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK); + + /* Fill the structure fields with the read parameters */ + RTC_TimeStruct->RTC_Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16); + RTC_TimeStruct->RTC_Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8); + RTC_TimeStruct->RTC_Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU)); + RTC_TimeStruct->RTC_H12 = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16); + + /* Check the input parameters format */ + if (RTC_Format == RTC_Format_BIN) + { + /* Convert the structure parameters to Binary format */ + RTC_TimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours); + RTC_TimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes); + RTC_TimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds); + } +} + +/** + * @brief Set the RTC current date. + * @param RTC_Format: specifies the format of the entered parameters. + * This parameter can be one of the following values: + * @arg RTC_Format_BIN: Binary data format + * @arg RTC_Format_BCD: BCD data format + * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that contains + * the date configuration information for the RTC. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC Date register is configured + * - ERROR: RTC Date register is not configured + */ +ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct) +{ + uint32_t tmpreg = 0; + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_RTC_FORMAT(RTC_Format)); + + if ((RTC_Format == RTC_Format_BIN) && ((RTC_DateStruct->RTC_Month & 0x10) == 0x10)) + { + RTC_DateStruct->RTC_Month = (RTC_DateStruct->RTC_Month & (uint32_t)~(0x10)) + 0x0A; + } + if (RTC_Format == RTC_Format_BIN) + { + assert_param(IS_RTC_YEAR(RTC_DateStruct->RTC_Year)); + assert_param(IS_RTC_MONTH(RTC_DateStruct->RTC_Month)); + assert_param(IS_RTC_DATE(RTC_DateStruct->RTC_Date)); + } + else + { + assert_param(IS_RTC_YEAR(RTC_Bcd2ToByte(RTC_DateStruct->RTC_Year))); + tmpreg = RTC_Bcd2ToByte(RTC_DateStruct->RTC_Month); + assert_param(IS_RTC_MONTH(tmpreg)); + tmpreg = RTC_Bcd2ToByte(RTC_DateStruct->RTC_Date); + assert_param(IS_RTC_DATE(tmpreg)); + } + assert_param(IS_RTC_WEEKDAY(RTC_DateStruct->RTC_WeekDay)); + + /* Check the input parameters format */ + if (RTC_Format != RTC_Format_BIN) + { + tmpreg = ((((uint32_t)RTC_DateStruct->RTC_Year) << 16) | \ + (((uint32_t)RTC_DateStruct->RTC_Month) << 8) | \ + ((uint32_t)RTC_DateStruct->RTC_Date) | \ + (((uint32_t)RTC_DateStruct->RTC_WeekDay) << 13)); + } + else + { + tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Year) << 16) | \ + ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Month) << 8) | \ + ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Date)) | \ + ((uint32_t)RTC_DateStruct->RTC_WeekDay << 13)); + } + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Set Initialization mode */ + if (RTC_EnterInitMode() == ERROR) + { + status = ERROR; + } + else + { + /* Set the RTC_DR register */ + RTC->DR = (uint32_t)(tmpreg & RTC_DR_RESERVED_MASK); + + /* Exit Initialization mode */ + RTC_ExitInitMode(); + + if(RTC_WaitForSynchro() == ERROR) + { + status = ERROR; + } + else + { + status = SUCCESS; + } + } + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return status; +} + +/** + * @brief Fills each RTC_DateStruct member with its default value + * (Monday, January 01 xx00). + * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure which will be + * initialized. + * @retval None + */ +void RTC_DateStructInit(RTC_DateTypeDef* RTC_DateStruct) +{ + /* Monday, January 01 xx00 */ + RTC_DateStruct->RTC_WeekDay = RTC_Weekday_Monday; + RTC_DateStruct->RTC_Date = 1; + RTC_DateStruct->RTC_Month = RTC_Month_January; + RTC_DateStruct->RTC_Year = 0; +} + +/** + * @brief Get the RTC current date. + * @param RTC_Format: specifies the format of the returned parameters. + * This parameter can be one of the following values: + * @arg RTC_Format_BIN: Binary data format + * @arg RTC_Format_BCD: BCD data format + * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that will + * contain the returned current date configuration. + * @retval None + */ +void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RTC_FORMAT(RTC_Format)); + + /* Get the RTC_TR register */ + tmpreg = (uint32_t)(RTC->DR & RTC_DR_RESERVED_MASK); + + /* Fill the structure fields with the read parameters */ + RTC_DateStruct->RTC_Year = (uint8_t)((tmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16); + RTC_DateStruct->RTC_Month = (uint8_t)((tmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8); + RTC_DateStruct->RTC_Date = (uint8_t)(tmpreg & (RTC_DR_DT | RTC_DR_DU)); + RTC_DateStruct->RTC_WeekDay = (uint8_t)((tmpreg & (RTC_DR_WDU)) >> 13); + + /* Check the input parameters format */ + if (RTC_Format == RTC_Format_BIN) + { + /* Convert the structure parameters to Binary format */ + RTC_DateStruct->RTC_Year = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Year); + RTC_DateStruct->RTC_Month = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Month); + RTC_DateStruct->RTC_Date = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Date); + } +} + +/** + * @} + */ + +/** @defgroup RTC_Group3 Alarms configuration functions + * @brief Alarms (Alarm A and Alarm B) configuration functions + * +@verbatim + =============================================================================== + Alarms (Alarm A and Alarm B) configuration functions + =============================================================================== + + This section provide functions allowing to program and read the RTC Alarms. + +@endverbatim + * @{ + */ + +/** + * @brief Set the specified RTC Alarm. + * @note The Alarm register can only be written when the corresponding Alarm + * is disabled (Use the RTC_AlarmCmd(DISABLE)). + * @param RTC_Format: specifies the format of the returned parameters. + * This parameter can be one of the following values: + * @arg RTC_Format_BIN: Binary data format + * @arg RTC_Format_BCD: BCD data format + * @param RTC_Alarm: specifies the alarm to be configured. + * This parameter can be one of the following values: + * @arg RTC_Alarm_A: to select Alarm A + * @arg RTC_Alarm_B: to select Alarm B + * @param RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that + * contains the alarm configuration parameters. + * @retval None + */ +void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RTC_FORMAT(RTC_Format)); + assert_param(IS_RTC_ALARM(RTC_Alarm)); + assert_param(IS_ALARM_MASK(RTC_AlarmStruct->RTC_AlarmMask)); + assert_param(IS_RTC_ALARM_DATE_WEEKDAY_SEL(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel)); + + if (RTC_Format == RTC_Format_BIN) + { + if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) + { + assert_param(IS_RTC_HOUR12(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours)); + assert_param(IS_RTC_H12(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12)); + } + else + { + RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = 0x00; + assert_param(IS_RTC_HOUR24(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours)); + } + assert_param(IS_RTC_MINUTES(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes)); + assert_param(IS_RTC_SECONDS(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds)); + + if(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel == RTC_AlarmDateWeekDaySel_Date) + { + assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(RTC_AlarmStruct->RTC_AlarmDateWeekDay)); + } + else + { + assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(RTC_AlarmStruct->RTC_AlarmDateWeekDay)); + } + } + else + { + if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET) + { + tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours); + assert_param(IS_RTC_HOUR12(tmpreg)); + assert_param(IS_RTC_H12(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12)); + } + else + { + RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = 0x00; + assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours))); + } + + assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes))); + assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds))); + + if(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel == RTC_AlarmDateWeekDaySel_Date) + { + tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay); + assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(tmpreg)); + } + else + { + tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay); + assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(tmpreg)); + } + } + + /* Check the input parameters format */ + if (RTC_Format != RTC_Format_BIN) + { + tmpreg = (((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours) << 16) | \ + ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes) << 8) | \ + ((uint32_t)RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds) | \ + ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12) << 16) | \ + ((uint32_t)(RTC_AlarmStruct->RTC_AlarmDateWeekDay) << 24) | \ + ((uint32_t)RTC_AlarmStruct->RTC_AlarmDateWeekDaySel) | \ + ((uint32_t)RTC_AlarmStruct->RTC_AlarmMask)); + } + else + { + tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours) << 16) | \ + ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes) << 8) | \ + ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds)) | \ + ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12) << 16) | \ + ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmDateWeekDay) << 24) | \ + ((uint32_t)RTC_AlarmStruct->RTC_AlarmDateWeekDaySel) | \ + ((uint32_t)RTC_AlarmStruct->RTC_AlarmMask)); + } + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Configure the Alarm register */ + if (RTC_Alarm == RTC_Alarm_A) + { + RTC->ALRMAR = (uint32_t)tmpreg; + } + else + { + RTC->ALRMBR = (uint32_t)tmpreg; + } + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; +} + +/** + * @brief Fills each RTC_AlarmStruct member with its default value + * (Time = 00h:00mn:00sec / Date = 1st day of the month/Mask = + * all fields are masked). + * @param RTC_AlarmStruct: pointer to a @ref RTC_AlarmTypeDef structure which + * will be initialized. + * @retval None + */ +void RTC_AlarmStructInit(RTC_AlarmTypeDef* RTC_AlarmStruct) +{ + /* Alarm Time Settings : Time = 00h:00mn:00sec */ + RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = RTC_H12_AM; + RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = 0; + RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = 0; + RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = 0; + + /* Alarm Date Settings : Date = 1st day of the month */ + RTC_AlarmStruct->RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; + RTC_AlarmStruct->RTC_AlarmDateWeekDay = 1; + + /* Alarm Masks Settings : Mask = all fields are not masked */ + RTC_AlarmStruct->RTC_AlarmMask = RTC_AlarmMask_None; +} + +/** + * @brief Get the RTC Alarm value and masks. + * @param RTC_Format: specifies the format of the output parameters. + * This parameter can be one of the following values: + * @arg RTC_Format_BIN: Binary data format + * @arg RTC_Format_BCD: BCD data format + * @param RTC_Alarm: specifies the alarm to be read. + * This parameter can be one of the following values: + * @arg RTC_Alarm_A: to select Alarm A + * @arg RTC_Alarm_B: to select Alarm B + * @param RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that will + * contains the output alarm configuration values. + * @retval None + */ +void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RTC_FORMAT(RTC_Format)); + assert_param(IS_RTC_ALARM(RTC_Alarm)); + + /* Get the RTC_ALRMxR register */ + if (RTC_Alarm == RTC_Alarm_A) + { + tmpreg = (uint32_t)(RTC->ALRMAR); + } + else + { + tmpreg = (uint32_t)(RTC->ALRMBR); + } + + /* Fill the structure with the read parameters */ + RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = (uint32_t)((tmpreg & (RTC_ALRMAR_HT | \ + RTC_ALRMAR_HU)) >> 16); + RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = (uint32_t)((tmpreg & (RTC_ALRMAR_MNT | \ + RTC_ALRMAR_MNU)) >> 8); + RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = (uint32_t)(tmpreg & (RTC_ALRMAR_ST | \ + RTC_ALRMAR_SU)); + RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = (uint32_t)((tmpreg & RTC_ALRMAR_PM) >> 16); + RTC_AlarmStruct->RTC_AlarmDateWeekDay = (uint32_t)((tmpreg & (RTC_ALRMAR_DT | RTC_ALRMAR_DU)) >> 24); + RTC_AlarmStruct->RTC_AlarmDateWeekDaySel = (uint32_t)(tmpreg & RTC_ALRMAR_WDSEL); + RTC_AlarmStruct->RTC_AlarmMask = (uint32_t)(tmpreg & RTC_AlarmMask_All); + + if (RTC_Format == RTC_Format_BIN) + { + RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = RTC_Bcd2ToByte(RTC_AlarmStruct-> \ + RTC_AlarmTime.RTC_Hours); + RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = RTC_Bcd2ToByte(RTC_AlarmStruct-> \ + RTC_AlarmTime.RTC_Minutes); + RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = RTC_Bcd2ToByte(RTC_AlarmStruct-> \ + RTC_AlarmTime.RTC_Seconds); + RTC_AlarmStruct->RTC_AlarmDateWeekDay = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay); + } +} + +/** + * @brief Enables or disables the specified RTC Alarm. + * @param RTC_Alarm: specifies the alarm to be configured. + * This parameter can be any combination of the following values: + * @arg RTC_Alarm_A: to select Alarm A + * @arg RTC_Alarm_B: to select Alarm B + * @param NewState: new state of the specified alarm. + * This parameter can be: ENABLE or DISABLE. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC Alarm is enabled/disabled + * - ERROR: RTC Alarm is not enabled/disabled + */ +ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm, FunctionalState NewState) +{ + __IO uint32_t alarmcounter = 0x00; + uint32_t alarmstatus = 0x00; + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_RTC_CMD_ALARM(RTC_Alarm)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Configure the Alarm state */ + if (NewState != DISABLE) + { + RTC->CR |= (uint32_t)RTC_Alarm; + + status = SUCCESS; + } + else + { + /* Disable the Alarm in RTC_CR register */ + RTC->CR &= (uint32_t)~RTC_Alarm; + + /* Wait till RTC ALRxWF flag is set and if Time out is reached exit */ + do + { + alarmstatus = RTC->ISR & (RTC_Alarm >> 8); + alarmcounter++; + } while((alarmcounter != INITMODE_TIMEOUT) && (alarmstatus == 0x00)); + + if ((RTC->ISR & (RTC_Alarm >> 8)) == RESET) + { + status = ERROR; + } + else + { + status = SUCCESS; + } + } + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return status; +} + +/** + * @} + */ + +/** @defgroup RTC_Group4 WakeUp Timer configuration functions + * @brief WakeUp Timer configuration functions + * +@verbatim + =============================================================================== + WakeUp Timer configuration functions + =============================================================================== + + This section provide functions allowing to program and read the RTC WakeUp. + +@endverbatim + * @{ + */ + +/** + * @brief Configures the RTC Wakeup clock source. + * @note The WakeUp Clock source can only be changed when the RTC WakeUp + * is disabled (Use the RTC_WakeUpCmd(DISABLE)). + * @param RTC_WakeUpClock: Wakeup Clock source. + * This parameter can be one of the following values: + * @arg RTC_WakeUpClock_RTCCLK_Div16: RTC Wakeup Counter Clock = RTCCLK/16 + * @arg RTC_WakeUpClock_RTCCLK_Div8: RTC Wakeup Counter Clock = RTCCLK/8 + * @arg RTC_WakeUpClock_RTCCLK_Div4: RTC Wakeup Counter Clock = RTCCLK/4 + * @arg RTC_WakeUpClock_RTCCLK_Div2: RTC Wakeup Counter Clock = RTCCLK/2 + * @arg RTC_WakeUpClock_CK_SPRE_16bits: RTC Wakeup Counter Clock = CK_SPRE + * @arg RTC_WakeUpClock_CK_SPRE_17bits: RTC Wakeup Counter Clock = CK_SPRE + * @retval None + */ +void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock) +{ + /* Check the parameters */ + assert_param(IS_RTC_WAKEUP_CLOCK(RTC_WakeUpClock)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Clear the Wakeup Timer clock source bits in CR register */ + RTC->CR &= (uint32_t)~RTC_CR_WUCKSEL; + + /* Configure the clock source */ + RTC->CR |= (uint32_t)RTC_WakeUpClock; + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; +} + +/** + * @brief Configures the RTC Wakeup counter. + * @note The RTC WakeUp counter can only be written when the RTC WakeUp + * is disabled (Use the RTC_WakeUpCmd(DISABLE)). + * @param RTC_WakeUpCounter: specifies the WakeUp counter. + * This parameter can be a value from 0x0000 to 0xFFFF. + * @retval None + */ +void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter) +{ + /* Check the parameters */ + assert_param(IS_RTC_WAKEUP_COUNTER(RTC_WakeUpCounter)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Configure the Wakeup Timer counter */ + RTC->WUTR = (uint32_t)RTC_WakeUpCounter; + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; +} + +/** + * @brief Returns the RTC WakeUp timer counter value. + * @param None + * @retval The RTC WakeUp Counter value. + */ +uint32_t RTC_GetWakeUpCounter(void) +{ + /* Get the counter value */ + return ((uint32_t)(RTC->WUTR & RTC_WUTR_WUT)); +} + +/** + * @brief Enables or Disables the RTC WakeUp timer. + * @param NewState: new state of the WakeUp timer. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +ErrorStatus RTC_WakeUpCmd(FunctionalState NewState) +{ + __IO uint32_t wutcounter = 0x00; + uint32_t wutwfstatus = 0x00; + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + if (NewState != DISABLE) + { + /* Enable the Wakeup Timer */ + RTC->CR |= (uint32_t)RTC_CR_WUTE; + status = SUCCESS; + } + else + { + /* Disable the Wakeup Timer */ + RTC->CR &= (uint32_t)~RTC_CR_WUTE; + /* Wait till RTC WUTWF flag is set and if Time out is reached exit */ + do + { + wutwfstatus = RTC->ISR & RTC_ISR_WUTWF; + wutcounter++; + } while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00)); + + if ((RTC->ISR & RTC_ISR_WUTWF) == RESET) + { + status = ERROR; + } + else + { + status = SUCCESS; + } + } + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return status; +} + +/** + * @} + */ + +/** @defgroup RTC_Group5 Daylight Saving configuration functions + * @brief Daylight Saving configuration functions + * +@verbatim + =============================================================================== + Daylight Saving configuration functions + =============================================================================== + + This section provide functions allowing to configure the RTC DayLight Saving. + +@endverbatim + * @{ + */ + +/** + * @brief Adds or substract one hour from the current time. + * @param RTC_DayLightSaveOperation: the value of hour adjustment. + * This parameter can be one of the following values: + * @arg RTC_DayLightSaving_SUB1H: Substract one hour (winter time) + * @arg RTC_DayLightSaving_ADD1H: Add one hour (summer time) + * @param RTC_StoreOperation: Specifies the value to be written in the BCK bit + * in CR register to store the operation. + * This parameter can be one of the following values: + * @arg RTC_StoreOperation_Reset: BCK Bit Reset + * @arg RTC_StoreOperation_Set: BCK Bit Set + * @retval None + */ +void RTC_DayLightSavingConfig(uint32_t RTC_DayLightSaving, uint32_t RTC_StoreOperation) +{ + /* Check the parameters */ + assert_param(IS_RTC_DAYLIGHT_SAVING(RTC_DayLightSaving)); + assert_param(IS_RTC_STORE_OPERATION(RTC_StoreOperation)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Clear the bits to be configured */ + RTC->CR &= (uint32_t)~(RTC_CR_BCK); + + /* Configure the RTC_CR register */ + RTC->CR |= (uint32_t)(RTC_DayLightSaving | RTC_StoreOperation); + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; +} + +/** + * @brief Returns the RTC Day Light Saving stored operation. + * @param None + * @retval RTC Day Light Saving stored operation. + * - RTC_StoreOperation_Reset + * - RTC_StoreOperation_Set + */ +uint32_t RTC_GetStoreOperation(void) +{ + return (RTC->CR & RTC_CR_BCK); +} + +/** + * @} + */ + +/** @defgroup RTC_Group6 Output pin Configuration function + * @brief Output pin Configuration function + * +@verbatim + =============================================================================== + Output pin Configuration function + =============================================================================== + + This section provide functions allowing to configure the RTC Output source. + +@endverbatim + * @{ + */ + +/** + * @brief Configures the RTC output source (AFO_ALARM). + * @param RTC_Output: Specifies which signal will be routed to the RTC output. + * This parameter can be one of the following values: + * @arg RTC_Output_Disable: No output selected + * @arg RTC_Output_AlarmA: signal of AlarmA mapped to output + * @arg RTC_Output_AlarmB: signal of AlarmB mapped to output + * @arg RTC_Output_WakeUp: signal of WakeUp mapped to output + * @param RTC_OutputPolarity: Specifies the polarity of the output signal. + * This parameter can be one of the following: + * @arg RTC_OutputPolarity_High: The output pin is high when the + * ALRAF/ALRBF/WUTF is high (depending on OSEL) + * @arg RTC_OutputPolarity_Low: The output pin is low when the + * ALRAF/ALRBF/WUTF is high (depending on OSEL) + * @retval None + */ +void RTC_OutputConfig(uint32_t RTC_Output, uint32_t RTC_OutputPolarity) +{ + /* Check the parameters */ + assert_param(IS_RTC_OUTPUT(RTC_Output)); + assert_param(IS_RTC_OUTPUT_POL(RTC_OutputPolarity)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Clear the bits to be configured */ + RTC->CR &= (uint32_t)~(RTC_CR_OSEL | RTC_CR_POL); + + /* Configure the output selection and polarity */ + RTC->CR |= (uint32_t)(RTC_Output | RTC_OutputPolarity); + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; +} + +/** + * @} + */ + +/** @defgroup RTC_Group7 Coarse Calibration configuration functions + * @brief Coarse Calibration configuration functions + * +@verbatim + =============================================================================== + Coarse Calibration configuration functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Configures the Coarse calibration parameters. + * @param RTC_CalibSign: specifies the sign of the coarse calibration value. + * This parameter can be one of the following values: + * @arg RTC_CalibSign_Positive: The value sign is positive + * @arg RTC_CalibSign_Negative: The value sign is negative + * @param Value: value of coarse calibration expressed in ppm (coded on 5 bits). + * + * @note This Calibration value should be between 0 and 63 when using negative + * sign with a 2-ppm step. + * + * @note This Calibration value should be between 0 and 126 when using positive + * sign with a 4-ppm step. + * + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC Coarse calibration are initialized + * - ERROR: RTC Coarse calibration are not initialized + */ +ErrorStatus RTC_CoarseCalibConfig(uint32_t RTC_CalibSign, uint32_t Value) +{ + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_RTC_CALIB_SIGN(RTC_CalibSign)); + assert_param(IS_RTC_CALIB_VALUE(Value)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Set Initialization mode */ + if (RTC_EnterInitMode() == ERROR) + { + status = ERROR; + } + else + { + /* Set the coarse calibration value */ + RTC->CALIBR = (uint32_t)(RTC_CalibSign | Value); + /* Exit Initialization mode */ + RTC_ExitInitMode(); + + status = SUCCESS; + } + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return status; +} + +/** + * @brief Enables or disables the Coarse calibration process. + * @param NewState: new state of the Coarse calibration. + * This parameter can be: ENABLE or DISABLE. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RTC Coarse calibration are enabled/disabled + * - ERROR: RTC Coarse calibration are not enabled/disabled + */ +ErrorStatus RTC_CoarseCalibCmd(FunctionalState NewState) +{ + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Set Initialization mode */ + if (RTC_EnterInitMode() == ERROR) + { + status = ERROR; + } + else + { + if (NewState != DISABLE) + { + /* Enable the Coarse Calibration */ + RTC->CR |= (uint32_t)RTC_CR_DCE; + } + else + { + /* Disable the Coarse Calibration */ + RTC->CR &= (uint32_t)~RTC_CR_DCE; + } + /* Exit Initialization mode */ + RTC_ExitInitMode(); + + status = SUCCESS; + } + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; + + return status; +} + +/** + * @brief Enables or disables the RTC clock to be output through the relative pin. + * @param NewState: new state of the digital calibration Output. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RTC_CalibOutputCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + if (NewState != DISABLE) + { + /* Enable the RTC clock output */ + RTC->CR |= (uint32_t)RTC_CR_COE; + } + else + { + /* Disable the RTC clock output */ + RTC->CR &= (uint32_t)~RTC_CR_COE; + } + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; +} + +/** + * @} + */ + + +/** @defgroup RTC_Group8 TimeStamp configuration functions + * @brief TimeStamp configuration functions + * +@verbatim + =============================================================================== + TimeStamp configuration functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or Disables the RTC TimeStamp functionality with the + * specified time stamp pin stimulating edge. + * @param RTC_TimeStampEdge: Specifies the pin edge on which the TimeStamp is + * activated. + * This parameter can be one of the following: + * @arg RTC_TimeStampEdge_Rising: the Time stamp event occurs on the rising + * edge of the related pin. + * @arg RTC_TimeStampEdge_Falling: the Time stamp event occurs on the + * falling edge of the related pin. + * @param NewState: new state of the TimeStamp. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RTC_TimeStampCmd(uint32_t RTC_TimeStampEdge, FunctionalState NewState) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RTC_TIMESTAMP_EDGE(RTC_TimeStampEdge)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Get the RTC_CR register and clear the bits to be configured */ + tmpreg = (uint32_t)(RTC->CR & (uint32_t)~(RTC_CR_TSEDGE | RTC_CR_TSE)); + + /* Get the new configuration */ + if (NewState != DISABLE) + { + tmpreg |= (uint32_t)(RTC_TimeStampEdge | RTC_CR_TSE); + } + else + { + tmpreg |= (uint32_t)(RTC_TimeStampEdge); + } + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + /* Configure the Time Stamp TSEDGE and Enable bits */ + RTC->CR = (uint32_t)tmpreg; + + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; +} + +/** + * @brief Get the RTC TimeStamp value and masks. + * @param RTC_Format: specifies the format of the output parameters. + * This parameter can be one of the following values: + * @arg RTC_Format_BIN: Binary data format + * @arg RTC_Format_BCD: BCD data format + * @param RTC_StampTimeStruct: pointer to a RTC_TimeTypeDef structure that will + * contains the TimeStamp time values. + * @param RTC_StampDateStruct: pointer to a RTC_DateTypeDef structure that will + * contains the TimeStamp date values. + * @retval None + */ +void RTC_GetTimeStamp(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_StampTimeStruct, + RTC_DateTypeDef* RTC_StampDateStruct) +{ + uint32_t tmptime = 0, tmpdate = 0; + + /* Check the parameters */ + assert_param(IS_RTC_FORMAT(RTC_Format)); + + /* Get the TimeStamp time and date registers values */ + tmptime = (uint32_t)(RTC->TSTR & RTC_TR_RESERVED_MASK); + tmpdate = (uint32_t)(RTC->TSDR & RTC_DR_RESERVED_MASK); + + /* Fill the Time structure fields with the read parameters */ + RTC_StampTimeStruct->RTC_Hours = (uint8_t)((tmptime & (RTC_TR_HT | RTC_TR_HU)) >> 16); + RTC_StampTimeStruct->RTC_Minutes = (uint8_t)((tmptime & (RTC_TR_MNT | RTC_TR_MNU)) >> 8); + RTC_StampTimeStruct->RTC_Seconds = (uint8_t)(tmptime & (RTC_TR_ST | RTC_TR_SU)); + RTC_StampTimeStruct->RTC_H12 = (uint8_t)((tmptime & (RTC_TR_PM)) >> 16); + + /* Fill the Date structure fields with the read parameters */ + RTC_StampDateStruct->RTC_Year = 0; + RTC_StampDateStruct->RTC_Month = (uint8_t)((tmpdate & (RTC_DR_MT | RTC_DR_MU)) >> 8); + RTC_StampDateStruct->RTC_Date = (uint8_t)(tmpdate & (RTC_DR_DT | RTC_DR_DU)); + RTC_StampDateStruct->RTC_WeekDay = (uint8_t)((tmpdate & (RTC_DR_WDU)) >> 13); + + /* Check the input parameters format */ + if (RTC_Format == RTC_Format_BIN) + { + /* Convert the Time structure parameters to Binary format */ + RTC_StampTimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Hours); + RTC_StampTimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Minutes); + RTC_StampTimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Seconds); + + /* Convert the Date structure parameters to Binary format */ + RTC_StampDateStruct->RTC_Month = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_Month); + RTC_StampDateStruct->RTC_Date = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_Date); + RTC_StampDateStruct->RTC_WeekDay = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_WeekDay); + } +} + +/** + * @} + */ + +/** @defgroup RTC_Group9 Tampers configuration functions + * @brief Tampers configuration functions + * +@verbatim + =============================================================================== + Tampers configuration functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Configures the select Tamper pin edge. + * @param RTC_Tamper: Selected tamper pin. + * This parameter can be RTC_Tamper_1. + * @param RTC_TamperTrigger: Specifies the trigger on the tamper pin that + * stimulates tamper event. + * This parameter can be one of the following values: + * @arg RTC_TamperTrigger_RisingEdge: Rising Edge of the tamper pin causes tamper event. + * @arg RTC_TamperTrigger_FallingEdge: Falling Edge of the tamper pin causes tamper event. + * @retval None + */ +void RTC_TamperTriggerConfig(uint32_t RTC_Tamper, uint32_t RTC_TamperTrigger) +{ + /* Check the parameters */ + assert_param(IS_RTC_TAMPER(RTC_Tamper)); + assert_param(IS_RTC_TAMPER_TRIGGER(RTC_TamperTrigger)); + + if (RTC_TamperTrigger == RTC_TamperTrigger_RisingEdge) + { + /* Configure the RTC_TAFCR register */ + RTC->TAFCR &= (uint32_t)((uint32_t)~(RTC_Tamper << 1)); + } + else + { + /* Configure the RTC_TAFCR register */ + RTC->TAFCR |= (uint32_t)(RTC_Tamper << 1); + } +} + +/** + * @brief Enables or Disables the Tamper detection. + * @param RTC_Tamper: Selected tamper pin. + * This parameter can be RTC_Tamper_1. + * @param NewState: new state of the tamper pin. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RTC_TamperCmd(uint32_t RTC_Tamper, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RTC_TAMPER(RTC_Tamper)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected Tamper pin */ + RTC->TAFCR |= (uint32_t)RTC_Tamper; + } + else + { + /* Disable the selected Tamper pin */ + RTC->TAFCR &= (uint32_t)~RTC_Tamper; + } +} + +/** + * @} + */ + +/** @defgroup RTC_Group10 Backup Data Registers configuration functions + * @brief Backup Data Registers configuration functions + * +@verbatim + =============================================================================== + Backup Data Registers configuration functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Writes a data in a specified RTC Backup data register. + * @param RTC_BKP_DR: RTC Backup data Register number. + * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to + * specify the register. + * @param Data: Data to be written in the specified RTC Backup data register. + * @retval None + */ +void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_RTC_BKP(RTC_BKP_DR)); + + tmp = RTC_BASE + 0x50; + tmp += (RTC_BKP_DR * 4); + + /* Write the specified register */ + *(__IO uint32_t *)tmp = (uint32_t)Data; +} + +/** + * @brief Reads data from the specified RTC Backup data Register. + * @param RTC_BKP_DR: RTC Backup data Register number. + * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to + * specify the register. + * @retval None + */ +uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_RTC_BKP(RTC_BKP_DR)); + + tmp = RTC_BASE + 0x50; + tmp += (RTC_BKP_DR * 4); + + /* Read the specified register */ + return (*(__IO uint32_t *)tmp); +} + +/** + * @} + */ + +/** @defgroup RTC_Group11 RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration functions + * @brief RTC Tamper and TimeStamp Pins Selection and Output Type Config + * configuration functions + * +@verbatim + =============================================================================== + RTC Tamper and TimeStamp Pins Selection and Output Type Config configuration + functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Selects the RTC Tamper Pin. + * @param RTC_TamperPin: specifies the RTC Tamper Pin. + * This parameter can be one of the following values: + * @arg RTC_TamperPin_PC13: PC13 is selected as RTC Tamper Pin. + * @arg RTC_TamperPin_PI8: PI8 is selected as RTC Tamper Pin. + * @retval None + */ +void RTC_TamperPinSelection(uint32_t RTC_TamperPin) +{ + /* Check the parameters */ + assert_param(IS_RTC_TAMPER_PIN(RTC_TamperPin)); + + RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPINSEL); + RTC->TAFCR |= (uint32_t)(RTC_TamperPin); +} + +/** + * @brief Selects the RTC TimeStamp Pin. + * @param RTC_TimeStampPin: specifies the RTC TimeStamp Pin. + * This parameter can be one of the following values: + * @arg RTC_TimeStampPin_PC13: PC13 is selected as RTC TimeStamp Pin. + * @arg RTC_TimeStampPin_PI8: PI8 is selected as RTC TimeStamp Pin. + * @retval None + */ +void RTC_TimeStampPinSelection(uint32_t RTC_TimeStampPin) +{ + /* Check the parameters */ + assert_param(IS_RTC_TIMESTAMP_PIN(RTC_TimeStampPin)); + + RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TSINSEL); + RTC->TAFCR |= (uint32_t)(RTC_TimeStampPin); +} + +/** + * @brief Configures the RTC Output Pin mode. + * @param RTC_OutputType: specifies the RTC Output (PC13) pin mode. + * This parameter can be one of the following values: + * @arg RTC_OutputType_OpenDrain: RTC Output (PC13) is configured in + * Open Drain mode. + * @arg RTC_OutputType_PushPull: RTC Output (PC13) is configured in + * Push Pull mode. + * @retval None + */ +void RTC_OutputTypeConfig(uint32_t RTC_OutputType) +{ + /* Check the parameters */ + assert_param(IS_RTC_OUTPUT_TYPE(RTC_OutputType)); + + RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_ALARMOUTTYPE); + RTC->TAFCR |= (uint32_t)(RTC_OutputType); +} + +/** + * @} + */ + +/** @defgroup RTC_Group12 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + All RTC interrupts are connected to the EXTI controller. + + - To enable the RTC Alarm interrupt, the following sequence is required: + - Configure and enable the EXTI Line 17 in interrupt mode and select the rising + edge sensitivity using the EXTI_Init() function. + - Configure and enable the RTC_Alarm IRQ channel in the NVIC using the NVIC_Init() + function. + - Configure the RTC to generate RTC alarms (Alarm A and/or Alarm B) using + the RTC_SetAlarm() and RTC_AlarmCmd() functions. + + - To enable the RTC Wakeup interrupt, the following sequence is required: + - Configure and enable the EXTI Line 22 in interrupt mode and select the rising + edge sensitivity using the EXTI_Init() function. + - Configure and enable the RTC_WKUP IRQ channel in the NVIC using the NVIC_Init() + function. + - Configure the RTC to generate the RTC wakeup timer event using the + RTC_WakeUpClockConfig(), RTC_SetWakeUpCounter() and RTC_WakeUpCmd() functions. + + - To enable the RTC Tamper interrupt, the following sequence is required: + - Configure and enable the EXTI Line 21 in interrupt mode and select the rising + edge sensitivity using the EXTI_Init() function. + - Configure and enable the TAMP_STAMP IRQ channel in the NVIC using the NVIC_Init() + function. + - Configure the RTC to detect the RTC tamper event using the + RTC_TamperTriggerConfig() and RTC_TamperCmd() functions. + + - To enable the RTC TimeStamp interrupt, the following sequence is required: + - Configure and enable the EXTI Line 21 in interrupt mode and select the rising + edge sensitivity using the EXTI_Init() function. + - Configure and enable the TAMP_STAMP IRQ channel in the NVIC using the NVIC_Init() + function. + - Configure the RTC to detect the RTC time-stamp event using the + RTC_TimeStampCmd() functions. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified RTC interrupts. + * @param RTC_IT: specifies the RTC interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg RTC_IT_TS: Time Stamp interrupt mask + * @arg RTC_IT_WUT: WakeUp Timer interrupt mask + * @arg RTC_IT_ALRB: Alarm B interrupt mask + * @arg RTC_IT_ALRA: Alarm A interrupt mask + * @arg RTC_IT_TAMP: Tamper event interrupt mask + * @param NewState: new state of the specified RTC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RTC_CONFIG_IT(RTC_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* Disable the write protection for RTC registers */ + RTC->WPR = 0xCA; + RTC->WPR = 0x53; + + if (NewState != DISABLE) + { + /* Configure the Interrupts in the RTC_CR register */ + RTC->CR |= (uint32_t)(RTC_IT & ~RTC_TAFCR_TAMPIE); + /* Configure the Tamper Interrupt in the RTC_TAFCR */ + RTC->TAFCR |= (uint32_t)(RTC_IT & RTC_TAFCR_TAMPIE); + } + else + { + /* Configure the Interrupts in the RTC_CR register */ + RTC->CR &= (uint32_t)~(RTC_IT & (uint32_t)~RTC_TAFCR_TAMPIE); + /* Configure the Tamper Interrupt in the RTC_TAFCR */ + RTC->TAFCR &= (uint32_t)~(RTC_IT & RTC_TAFCR_TAMPIE); + } + /* Enable the write protection for RTC registers */ + RTC->WPR = 0xFF; +} + +/** + * @brief Checks whether the specified RTC flag is set or not. + * @param RTC_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg RTC_FLAG_TAMP1F: Tamper 1 event flag + * @arg RTC_FLAG_TSOVF: Time Stamp OverFlow flag + * @arg RTC_FLAG_TSF: Time Stamp event flag + * @arg RTC_FLAG_WUTF: WakeUp Timer flag + * @arg RTC_FLAG_ALRBF: Alarm B flag + * @arg RTC_FLAG_ALRAF: Alarm A flag + * @arg RTC_FLAG_INITF: Initialization mode flag + * @arg RTC_FLAG_RSF: Registers Synchronized flag + * @arg RTC_FLAG_INITS: Registers Configured flag + * @arg RTC_FLAG_WUTWF: WakeUp Timer Write flag + * @arg RTC_FLAG_ALRBWF: Alarm B Write flag + * @arg RTC_FLAG_ALRAWF: Alarm A write flag + * @retval The new state of RTC_FLAG (SET or RESET). + */ +FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RTC_GET_FLAG(RTC_FLAG)); + + /* Get all the flags */ + tmpreg = (uint32_t)(RTC->ISR & RTC_FLAGS_MASK); + + /* Return the status of the flag */ + if ((tmpreg & RTC_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the RTC's pending flags. + * @param RTC_FLAG: specifies the RTC flag to clear. + * This parameter can be any combination of the following values: + * @arg RTC_FLAG_TAMP1F: Tamper 1 event flag + * @arg RTC_FLAG_TSOVF: Time Stamp Overflow flag + * @arg RTC_FLAG_TSF: Time Stamp event flag + * @arg RTC_FLAG_WUTF: WakeUp Timer flag + * @arg RTC_FLAG_ALRBF: Alarm B flag + * @arg RTC_FLAG_ALRAF: Alarm A flag + * @arg RTC_FLAG_RSF: Registers Synchronized flag + * @retval None + */ +void RTC_ClearFlag(uint32_t RTC_FLAG) +{ + /* Check the parameters */ + assert_param(IS_RTC_CLEAR_FLAG(RTC_FLAG)); + + /* Clear the Flags in the RTC_ISR register */ + RTC->ISR = (uint32_t)((uint32_t)(~((RTC_FLAG | RTC_ISR_INIT)& 0x0000FFFF) | (uint32_t)(RTC->ISR & RTC_ISR_INIT))); +} + +/** + * @brief Checks whether the specified RTC interrupt has occurred or not. + * @param RTC_IT: specifies the RTC interrupt source to check. + * This parameter can be one of the following values: + * @arg RTC_IT_TS: Time Stamp interrupt + * @arg RTC_IT_WUT: WakeUp Timer interrupt + * @arg RTC_IT_ALRB: Alarm B interrupt + * @arg RTC_IT_ALRA: Alarm A interrupt + * @arg RTC_IT_TAMP1: Tamper 1 event interrupt + * @retval The new state of RTC_IT (SET or RESET). + */ +ITStatus RTC_GetITStatus(uint32_t RTC_IT) +{ + ITStatus bitstatus = RESET; + uint32_t tmpreg = 0, enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_RTC_GET_IT(RTC_IT)); + + /* Get the TAMPER Interrupt enable bit and pending bit */ + tmpreg = (uint32_t)(RTC->TAFCR & (RTC_TAFCR_TAMPIE)); + + /* Get the Interrupt enable Status */ + enablestatus = (uint32_t)((RTC->CR & RTC_IT) | (tmpreg & (RTC_IT >> 15))); + + /* Get the Interrupt pending bit */ + tmpreg = (uint32_t)((RTC->ISR & (uint32_t)(RTC_IT >> 4))); + + /* Get the status of the Interrupt */ + if ((enablestatus != (uint32_t)RESET) && ((tmpreg & 0x0000FFFF) != (uint32_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the RTC's interrupt pending bits. + * @param RTC_IT: specifies the RTC interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg RTC_IT_TS: Time Stamp interrupt + * @arg RTC_IT_WUT: WakeUp Timer interrupt + * @arg RTC_IT_ALRB: Alarm B interrupt + * @arg RTC_IT_ALRA: Alarm A interrupt + * @arg RTC_IT_TAMP1: Tamper 1 event interrupt + * @retval None + */ +void RTC_ClearITPendingBit(uint32_t RTC_IT) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RTC_CLEAR_IT(RTC_IT)); + + /* Get the RTC_ISR Interrupt pending bits mask */ + tmpreg = (uint32_t)(RTC_IT >> 4); + + /* Clear the interrupt pending bits in the RTC_ISR register */ + RTC->ISR = (uint32_t)((uint32_t)(~((tmpreg | RTC_ISR_INIT)& 0x0000FFFF) | (uint32_t)(RTC->ISR & RTC_ISR_INIT))); +} + +/** + * @} + */ + +/** + * @brief Converts a 2 digit decimal to BCD format. + * @param Value: Byte to be converted. + * @retval Converted byte + */ +static uint8_t RTC_ByteToBcd2(uint8_t Value) +{ + uint8_t bcdhigh = 0; + + while (Value >= 10) + { + bcdhigh++; + Value -= 10; + } + + return ((uint8_t)(bcdhigh << 4) | Value); +} + +/** + * @brief Convert from 2 digit BCD to Binary. + * @param Value: BCD value to be converted. + * @retval Converted word + */ +static uint8_t RTC_Bcd2ToByte(uint8_t Value) +{ + uint8_t tmp = 0; + tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10; + return (tmp + (Value & (uint8_t)0x0F)); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_sdio.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_sdio.c new file mode 100644 index 000000000..515b24652 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_sdio.c @@ -0,0 +1,1010 @@ +/** + ****************************************************************************** + * @file stm32f2xx_sdio.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Secure digital input/output interface (SDIO) + * peripheral: + * - Initialization and Configuration + * - Command path state machine (CPSM) management + * - Data path state machine (DPSM) management + * - SDIO IO Cards mode management + * - CE-ATA mode management + * - DMA transfers management + * - Interrupts and flags management + * + * @verbatim + * + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. The SDIO clock (SDIOCLK = 48 MHz) is coming from a specific output + * of PLL (PLL48CLK). Before to start working with SDIO peripheral + * make sure that the PLL is well configured. + * The SDIO peripheral uses two clock signals: + * - SDIO adapter clock (SDIOCLK = 48 MHz) + * - APB2 bus clock (PCLK2) + * PCLK2 and SDIO_CK clock frequencies must respect the following condition: + * Frequenc(PCLK2) >= (3 / 8 x Frequency(SDIO_CK)) + * + * 2. Enable peripheral clock using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE). + * + * 3. According to the SDIO mode, enable the GPIO clocks using + * RCC_AHB1PeriphClockCmd() function. + * The I/O can be one of the following configurations: + * - 1-bit data length: SDIO_CMD, SDIO_CK and D0. + * - 4-bit data length: SDIO_CMD, SDIO_CK and D[3:0]. + * - 8-bit data length: SDIO_CMD, SDIO_CK and D[7:0]. + * + * 4. Peripheral's alternate function: + * - Connect the pin to the desired peripherals' Alternate + * Function (AF) using GPIO_PinAFConfig() function + * - Configure the desired pin in alternate function by: + * GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF + * - Select the type, pull-up/pull-down and output speed via + * GPIO_PuPd, GPIO_OType and GPIO_Speed members + * - Call GPIO_Init() function + * + * 5. Program the Clock Edge, Clock Bypass, Clock Power Save, Bus Wide, + * hardware, flow control and the Clock Divider using the SDIO_Init() + * function. + * + * 6. Enable the Power ON State using the SDIO_SetPowerState(SDIO_PowerState_ON) + * function. + * + * 7. Enable the clock using the SDIO_ClockCmd() function. + * + * 8. Enable the NVIC and the corresponding interrupt using the function + * SDIO_ITConfig() if you need to use interrupt mode. + * + * 9. When using the DMA mode + * - Configure the DMA using DMA_Init() function + * - Active the needed channel Request using SDIO_DMACmd() function + * + * 10. Enable the DMA using the DMA_Cmd() function, when using DMA mode. + * + * 11. To control the CPSM (Command Path State Machine) and send + * commands to the card use the SDIO_SendCommand(), + * SDIO_GetCommandResponse() and SDIO_GetResponse() functions. + * First, user has to fill the command structure (pointer to + * SDIO_CmdInitTypeDef) according to the selected command to be sent. + * The parameters that should be filled are: + * - Command Argument + * - Command Index + * - Command Response type + * - Command Wait + * - CPSM Status (Enable or Disable) + * + * To check if the command is well received, read the SDIO_CMDRESP + * register using the SDIO_GetCommandResponse(). + * The SDIO responses registers (SDIO_RESP1 to SDIO_RESP2), use the + * SDIO_GetResponse() function. + * + * 12. To control the DPSM (Data Path State Machine) and send/receive + * data to/from the card use the SDIO_DataConfig(), SDIO_GetDataCounter(), + * SDIO_ReadData(), SDIO_WriteData() and SDIO_GetFIFOCount() functions. + * + * Read Operations + * --------------- + * a) First, user has to fill the data structure (pointer to + * SDIO_DataInitTypeDef) according to the selected data type to + * be received. + * The parameters that should be filled are: + * - Data TimeOut + * - Data Length + * - Data Block size + * - Data Transfer direction: should be from card (To SDIO) + * - Data Transfer mode + * - DPSM Status (Enable or Disable) + * + * b) Configure the SDIO resources to receive the data from the card + * according to selected transfer mode (Refer to Step 8, 9 and 10). + * + * c) Send the selected Read command (refer to step 11). + * + * d) Use the SDIO flags/interrupts to check the transfer status. + * + * Write Operations + * --------------- + * a) First, user has to fill the data structure (pointer to + * SDIO_DataInitTypeDef) according to the selected data type to + * be received. + * The parameters that should be filled are: + * - Data TimeOut + * - Data Length + * - Data Block size + * - Data Transfer direction: should be to card (To CARD) + * - Data Transfer mode + * - DPSM Status (Enable or Disable) + * + * b) Configure the SDIO resources to send the data to the card + * according to selected transfer mode (Refer to Step 8, 9 and 10). + * + * c) Send the selected Write command (refer to step 11). + * + * d) Use the SDIO flags/interrupts to check the transfer status. + * + * + * @endverbatim + * + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup SDIO + * @brief SDIO driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* ------------ SDIO registers bit address in the alias region ----------- */ +#define SDIO_OFFSET (SDIO_BASE - PERIPH_BASE) + +/* --- CLKCR Register ---*/ +/* Alias word address of CLKEN bit */ +#define CLKCR_OFFSET (SDIO_OFFSET + 0x04) +#define CLKEN_BitNumber 0x08 +#define CLKCR_CLKEN_BB (PERIPH_BB_BASE + (CLKCR_OFFSET * 32) + (CLKEN_BitNumber * 4)) + +/* --- CMD Register ---*/ +/* Alias word address of SDIOSUSPEND bit */ +#define CMD_OFFSET (SDIO_OFFSET + 0x0C) +#define SDIOSUSPEND_BitNumber 0x0B +#define CMD_SDIOSUSPEND_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (SDIOSUSPEND_BitNumber * 4)) + +/* Alias word address of ENCMDCOMPL bit */ +#define ENCMDCOMPL_BitNumber 0x0C +#define CMD_ENCMDCOMPL_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (ENCMDCOMPL_BitNumber * 4)) + +/* Alias word address of NIEN bit */ +#define NIEN_BitNumber 0x0D +#define CMD_NIEN_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (NIEN_BitNumber * 4)) + +/* Alias word address of ATACMD bit */ +#define ATACMD_BitNumber 0x0E +#define CMD_ATACMD_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (ATACMD_BitNumber * 4)) + +/* --- DCTRL Register ---*/ +/* Alias word address of DMAEN bit */ +#define DCTRL_OFFSET (SDIO_OFFSET + 0x2C) +#define DMAEN_BitNumber 0x03 +#define DCTRL_DMAEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (DMAEN_BitNumber * 4)) + +/* Alias word address of RWSTART bit */ +#define RWSTART_BitNumber 0x08 +#define DCTRL_RWSTART_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTART_BitNumber * 4)) + +/* Alias word address of RWSTOP bit */ +#define RWSTOP_BitNumber 0x09 +#define DCTRL_RWSTOP_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTOP_BitNumber * 4)) + +/* Alias word address of RWMOD bit */ +#define RWMOD_BitNumber 0x0A +#define DCTRL_RWMOD_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWMOD_BitNumber * 4)) + +/* Alias word address of SDIOEN bit */ +#define SDIOEN_BitNumber 0x0B +#define DCTRL_SDIOEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (SDIOEN_BitNumber * 4)) + +/* ---------------------- SDIO registers bit mask ------------------------ */ +/* --- CLKCR Register ---*/ +/* CLKCR register clear mask */ +#define CLKCR_CLEAR_MASK ((uint32_t)0xFFFF8100) + +/* --- PWRCTRL Register ---*/ +/* SDIO PWRCTRL Mask */ +#define PWR_PWRCTRL_MASK ((uint32_t)0xFFFFFFFC) + +/* --- DCTRL Register ---*/ +/* SDIO DCTRL Clear Mask */ +#define DCTRL_CLEAR_MASK ((uint32_t)0xFFFFFF08) + +/* --- CMD Register ---*/ +/* CMD Register clear mask */ +#define CMD_CLEAR_MASK ((uint32_t)0xFFFFF800) + +/* SDIO RESP Registers Address */ +#define SDIO_RESP_ADDR ((uint32_t)(SDIO_BASE + 0x14)) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup SDIO_Private_Functions + * @{ + */ + +/** @defgroup SDIO_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the SDIO peripheral registers to their default reset values. + * @param None + * @retval None + */ +void SDIO_DeInit(void) +{ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, DISABLE); +} + +/** + * @brief Initializes the SDIO peripheral according to the specified + * parameters in the SDIO_InitStruct. + * @param SDIO_InitStruct : pointer to a SDIO_InitTypeDef structure + * that contains the configuration information for the SDIO peripheral. + * @retval None + */ +void SDIO_Init(SDIO_InitTypeDef* SDIO_InitStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_SDIO_CLOCK_EDGE(SDIO_InitStruct->SDIO_ClockEdge)); + assert_param(IS_SDIO_CLOCK_BYPASS(SDIO_InitStruct->SDIO_ClockBypass)); + assert_param(IS_SDIO_CLOCK_POWER_SAVE(SDIO_InitStruct->SDIO_ClockPowerSave)); + assert_param(IS_SDIO_BUS_WIDE(SDIO_InitStruct->SDIO_BusWide)); + assert_param(IS_SDIO_HARDWARE_FLOW_CONTROL(SDIO_InitStruct->SDIO_HardwareFlowControl)); + +/*---------------------------- SDIO CLKCR Configuration ------------------------*/ + /* Get the SDIO CLKCR value */ + tmpreg = SDIO->CLKCR; + + /* Clear CLKDIV, PWRSAV, BYPASS, WIDBUS, NEGEDGE, HWFC_EN bits */ + tmpreg &= CLKCR_CLEAR_MASK; + + /* Set CLKDIV bits according to SDIO_ClockDiv value */ + /* Set PWRSAV bit according to SDIO_ClockPowerSave value */ + /* Set BYPASS bit according to SDIO_ClockBypass value */ + /* Set WIDBUS bits according to SDIO_BusWide value */ + /* Set NEGEDGE bits according to SDIO_ClockEdge value */ + /* Set HWFC_EN bits according to SDIO_HardwareFlowControl value */ + tmpreg |= (SDIO_InitStruct->SDIO_ClockDiv | SDIO_InitStruct->SDIO_ClockPowerSave | + SDIO_InitStruct->SDIO_ClockBypass | SDIO_InitStruct->SDIO_BusWide | + SDIO_InitStruct->SDIO_ClockEdge | SDIO_InitStruct->SDIO_HardwareFlowControl); + + /* Write to SDIO CLKCR */ + SDIO->CLKCR = tmpreg; +} + +/** + * @brief Fills each SDIO_InitStruct member with its default value. + * @param SDIO_InitStruct: pointer to an SDIO_InitTypeDef structure which + * will be initialized. + * @retval None + */ +void SDIO_StructInit(SDIO_InitTypeDef* SDIO_InitStruct) +{ + /* SDIO_InitStruct members default value */ + SDIO_InitStruct->SDIO_ClockDiv = 0x00; + SDIO_InitStruct->SDIO_ClockEdge = SDIO_ClockEdge_Rising; + SDIO_InitStruct->SDIO_ClockBypass = SDIO_ClockBypass_Disable; + SDIO_InitStruct->SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; + SDIO_InitStruct->SDIO_BusWide = SDIO_BusWide_1b; + SDIO_InitStruct->SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; +} + +/** + * @brief Enables or disables the SDIO Clock. + * @param NewState: new state of the SDIO Clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_ClockCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CLKCR_CLKEN_BB = (uint32_t)NewState; +} + +/** + * @brief Sets the power status of the controller. + * @param SDIO_PowerState: new state of the Power state. + * This parameter can be one of the following values: + * @arg SDIO_PowerState_OFF: SDIO Power OFF + * @arg SDIO_PowerState_ON: SDIO Power ON + * @retval None + */ +void SDIO_SetPowerState(uint32_t SDIO_PowerState) +{ + /* Check the parameters */ + assert_param(IS_SDIO_POWER_STATE(SDIO_PowerState)); + + SDIO->POWER = SDIO_PowerState; +} + +/** + * @brief Gets the power status of the controller. + * @param None + * @retval Power status of the controller. The returned value can be one of the + * following values: + * - 0x00: Power OFF + * - 0x02: Power UP + * - 0x03: Power ON + */ +uint32_t SDIO_GetPowerState(void) +{ + return (SDIO->POWER & (~PWR_PWRCTRL_MASK)); +} + +/** + * @} + */ + +/** @defgroup SDIO_Group2 Command path state machine (CPSM) management functions + * @brief Command path state machine (CPSM) management functions + * +@verbatim + =============================================================================== + Command path state machine (CPSM) management functions + =============================================================================== + + This section provide functions allowing to program and read the Command path + state machine (CPSM). + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the SDIO Command according to the specified + * parameters in the SDIO_CmdInitStruct and send the command. + * @param SDIO_CmdInitStruct : pointer to a SDIO_CmdInitTypeDef + * structure that contains the configuration information for the SDIO + * command. + * @retval None + */ +void SDIO_SendCommand(SDIO_CmdInitTypeDef *SDIO_CmdInitStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_SDIO_CMD_INDEX(SDIO_CmdInitStruct->SDIO_CmdIndex)); + assert_param(IS_SDIO_RESPONSE(SDIO_CmdInitStruct->SDIO_Response)); + assert_param(IS_SDIO_WAIT(SDIO_CmdInitStruct->SDIO_Wait)); + assert_param(IS_SDIO_CPSM(SDIO_CmdInitStruct->SDIO_CPSM)); + +/*---------------------------- SDIO ARG Configuration ------------------------*/ + /* Set the SDIO Argument value */ + SDIO->ARG = SDIO_CmdInitStruct->SDIO_Argument; + +/*---------------------------- SDIO CMD Configuration ------------------------*/ + /* Get the SDIO CMD value */ + tmpreg = SDIO->CMD; + /* Clear CMDINDEX, WAITRESP, WAITINT, WAITPEND, CPSMEN bits */ + tmpreg &= CMD_CLEAR_MASK; + /* Set CMDINDEX bits according to SDIO_CmdIndex value */ + /* Set WAITRESP bits according to SDIO_Response value */ + /* Set WAITINT and WAITPEND bits according to SDIO_Wait value */ + /* Set CPSMEN bits according to SDIO_CPSM value */ + tmpreg |= (uint32_t)SDIO_CmdInitStruct->SDIO_CmdIndex | SDIO_CmdInitStruct->SDIO_Response + | SDIO_CmdInitStruct->SDIO_Wait | SDIO_CmdInitStruct->SDIO_CPSM; + + /* Write to SDIO CMD */ + SDIO->CMD = tmpreg; +} + +/** + * @brief Fills each SDIO_CmdInitStruct member with its default value. + * @param SDIO_CmdInitStruct: pointer to an SDIO_CmdInitTypeDef + * structure which will be initialized. + * @retval None + */ +void SDIO_CmdStructInit(SDIO_CmdInitTypeDef* SDIO_CmdInitStruct) +{ + /* SDIO_CmdInitStruct members default value */ + SDIO_CmdInitStruct->SDIO_Argument = 0x00; + SDIO_CmdInitStruct->SDIO_CmdIndex = 0x00; + SDIO_CmdInitStruct->SDIO_Response = SDIO_Response_No; + SDIO_CmdInitStruct->SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStruct->SDIO_CPSM = SDIO_CPSM_Disable; +} + +/** + * @brief Returns command index of last command for which response received. + * @param None + * @retval Returns the command index of the last command response received. + */ +uint8_t SDIO_GetCommandResponse(void) +{ + return (uint8_t)(SDIO->RESPCMD); +} + +/** + * @brief Returns response received from the card for the last command. + * @param SDIO_RESP: Specifies the SDIO response register. + * This parameter can be one of the following values: + * @arg SDIO_RESP1: Response Register 1 + * @arg SDIO_RESP2: Response Register 2 + * @arg SDIO_RESP3: Response Register 3 + * @arg SDIO_RESP4: Response Register 4 + * @retval The Corresponding response register value. + */ +uint32_t SDIO_GetResponse(uint32_t SDIO_RESP) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_SDIO_RESP(SDIO_RESP)); + + tmp = SDIO_RESP_ADDR + SDIO_RESP; + + return (*(__IO uint32_t *) tmp); +} + +/** + * @} + */ + +/** @defgroup SDIO_Group3 Data path state machine (DPSM) management functions + * @brief Data path state machine (DPSM) management functions + * +@verbatim + =============================================================================== + Data path state machine (DPSM) management functions + =============================================================================== + + This section provide functions allowing to program and read the Data path + state machine (DPSM). + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the SDIO data path according to the specified + * parameters in the SDIO_DataInitStruct. + * @param SDIO_DataInitStruct : pointer to a SDIO_DataInitTypeDef structure + * that contains the configuration information for the SDIO command. + * @retval None + */ +void SDIO_DataConfig(SDIO_DataInitTypeDef* SDIO_DataInitStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_SDIO_DATA_LENGTH(SDIO_DataInitStruct->SDIO_DataLength)); + assert_param(IS_SDIO_BLOCK_SIZE(SDIO_DataInitStruct->SDIO_DataBlockSize)); + assert_param(IS_SDIO_TRANSFER_DIR(SDIO_DataInitStruct->SDIO_TransferDir)); + assert_param(IS_SDIO_TRANSFER_MODE(SDIO_DataInitStruct->SDIO_TransferMode)); + assert_param(IS_SDIO_DPSM(SDIO_DataInitStruct->SDIO_DPSM)); + +/*---------------------------- SDIO DTIMER Configuration ---------------------*/ + /* Set the SDIO Data TimeOut value */ + SDIO->DTIMER = SDIO_DataInitStruct->SDIO_DataTimeOut; + +/*---------------------------- SDIO DLEN Configuration -----------------------*/ + /* Set the SDIO DataLength value */ + SDIO->DLEN = SDIO_DataInitStruct->SDIO_DataLength; + +/*---------------------------- SDIO DCTRL Configuration ----------------------*/ + /* Get the SDIO DCTRL value */ + tmpreg = SDIO->DCTRL; + /* Clear DEN, DTMODE, DTDIR and DBCKSIZE bits */ + tmpreg &= DCTRL_CLEAR_MASK; + /* Set DEN bit according to SDIO_DPSM value */ + /* Set DTMODE bit according to SDIO_TransferMode value */ + /* Set DTDIR bit according to SDIO_TransferDir value */ + /* Set DBCKSIZE bits according to SDIO_DataBlockSize value */ + tmpreg |= (uint32_t)SDIO_DataInitStruct->SDIO_DataBlockSize | SDIO_DataInitStruct->SDIO_TransferDir + | SDIO_DataInitStruct->SDIO_TransferMode | SDIO_DataInitStruct->SDIO_DPSM; + + /* Write to SDIO DCTRL */ + SDIO->DCTRL = tmpreg; +} + +/** + * @brief Fills each SDIO_DataInitStruct member with its default value. + * @param SDIO_DataInitStruct: pointer to an SDIO_DataInitTypeDef structure + * which will be initialized. + * @retval None + */ +void SDIO_DataStructInit(SDIO_DataInitTypeDef* SDIO_DataInitStruct) +{ + /* SDIO_DataInitStruct members default value */ + SDIO_DataInitStruct->SDIO_DataTimeOut = 0xFFFFFFFF; + SDIO_DataInitStruct->SDIO_DataLength = 0x00; + SDIO_DataInitStruct->SDIO_DataBlockSize = SDIO_DataBlockSize_1b; + SDIO_DataInitStruct->SDIO_TransferDir = SDIO_TransferDir_ToCard; + SDIO_DataInitStruct->SDIO_TransferMode = SDIO_TransferMode_Block; + SDIO_DataInitStruct->SDIO_DPSM = SDIO_DPSM_Disable; +} + +/** + * @brief Returns number of remaining data bytes to be transferred. + * @param None + * @retval Number of remaining data bytes to be transferred + */ +uint32_t SDIO_GetDataCounter(void) +{ + return SDIO->DCOUNT; +} + +/** + * @brief Read one data word from Rx FIFO. + * @param None + * @retval Data received + */ +uint32_t SDIO_ReadData(void) +{ + return SDIO->FIFO; +} + +/** + * @brief Write one data word to Tx FIFO. + * @param Data: 32-bit data word to write. + * @retval None + */ +void SDIO_WriteData(uint32_t Data) +{ + SDIO->FIFO = Data; +} + +/** + * @brief Returns the number of words left to be written to or read from FIFO. + * @param None + * @retval Remaining number of words. + */ +uint32_t SDIO_GetFIFOCount(void) +{ + return SDIO->FIFOCNT; +} + +/** + * @} + */ + +/** @defgroup SDIO_Group4 SDIO IO Cards mode management functions + * @brief SDIO IO Cards mode management functions + * +@verbatim + =============================================================================== + SDIO IO Cards mode management functions + =============================================================================== + + This section provide functions allowing to program and read the SDIO IO Cards. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the SD I/O Read Wait operation. + * @param NewState: new state of the Start SDIO Read Wait operation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_StartSDIOReadWait(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) DCTRL_RWSTART_BB = (uint32_t) NewState; +} + +/** + * @brief Stops the SD I/O Read Wait operation. + * @param NewState: new state of the Stop SDIO Read Wait operation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_StopSDIOReadWait(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) DCTRL_RWSTOP_BB = (uint32_t) NewState; +} + +/** + * @brief Sets one of the two options of inserting read wait interval. + * @param SDIO_ReadWaitMode: SD I/O Read Wait operation mode. + * This parameter can be: + * @arg SDIO_ReadWaitMode_CLK: Read Wait control by stopping SDIOCLK + * @arg SDIO_ReadWaitMode_DATA2: Read Wait control using SDIO_DATA2 + * @retval None + */ +void SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode) +{ + /* Check the parameters */ + assert_param(IS_SDIO_READWAIT_MODE(SDIO_ReadWaitMode)); + + *(__IO uint32_t *) DCTRL_RWMOD_BB = SDIO_ReadWaitMode; +} + +/** + * @brief Enables or disables the SD I/O Mode Operation. + * @param NewState: new state of SDIO specific operation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_SetSDIOOperation(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) DCTRL_SDIOEN_BB = (uint32_t)NewState; +} + +/** + * @brief Enables or disables the SD I/O Mode suspend command sending. + * @param NewState: new state of the SD I/O Mode suspend command. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_SendSDIOSuspendCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CMD_SDIOSUSPEND_BB = (uint32_t)NewState; +} + +/** + * @} + */ + +/** @defgroup SDIO_Group5 CE-ATA mode management functions + * @brief CE-ATA mode management functions + * +@verbatim + =============================================================================== + CE-ATA mode management functions + =============================================================================== + + This section provide functions allowing to program and read the CE-ATA card. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the command completion signal. + * @param NewState: new state of command completion signal. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_CommandCompletionCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CMD_ENCMDCOMPL_BB = (uint32_t)NewState; +} + +/** + * @brief Enables or disables the CE-ATA interrupt. + * @param NewState: new state of CE-ATA interrupt. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_CEATAITCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CMD_NIEN_BB = (uint32_t)((~((uint32_t)NewState)) & ((uint32_t)0x1)); +} + +/** + * @brief Sends CE-ATA command (CMD61). + * @param NewState: new state of CE-ATA command. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_SendCEATACmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CMD_ATACMD_BB = (uint32_t)NewState; +} + +/** + * @} + */ + +/** @defgroup SDIO_Group6 DMA transfers management functions + * @brief DMA transfers management functions + * +@verbatim + =============================================================================== + DMA transfers management functions + =============================================================================== + + This section provide functions allowing to program SDIO DMA transfer. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the SDIO DMA request. + * @param NewState: new state of the selected SDIO DMA request. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_DMACmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) DCTRL_DMAEN_BB = (uint32_t)NewState; +} + +/** + * @} + */ + +/** @defgroup SDIO_Group7 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the SDIO interrupts. + * @param SDIO_IT: specifies the SDIO interrupt sources to be enabled or disabled. + * This parameter can be one or a combination of the following values: + * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt + * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt + * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt + * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt + * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt + * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt + * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt + * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt + * @arg SDIO_IT_DATAEND: Data end (data counter, SDIDCOUNT, is zero) interrupt + * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide + * bus mode interrupt + * @arg SDIO_IT_DBCKEND: Data block sent/received (CRC check passed) interrupt + * @arg SDIO_IT_CMDACT: Command transfer in progress interrupt + * @arg SDIO_IT_TXACT: Data transmit in progress interrupt + * @arg SDIO_IT_RXACT: Data receive in progress interrupt + * @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt + * @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt + * @arg SDIO_IT_TXFIFOF: Transmit FIFO full interrupt + * @arg SDIO_IT_RXFIFOF: Receive FIFO full interrupt + * @arg SDIO_IT_TXFIFOE: Transmit FIFO empty interrupt + * @arg SDIO_IT_RXFIFOE: Receive FIFO empty interrupt + * @arg SDIO_IT_TXDAVL: Data available in transmit FIFO interrupt + * @arg SDIO_IT_RXDAVL: Data available in receive FIFO interrupt + * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt + * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61 interrupt + * @param NewState: new state of the specified SDIO interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_ITConfig(uint32_t SDIO_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SDIO_IT(SDIO_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the SDIO interrupts */ + SDIO->MASK |= SDIO_IT; + } + else + { + /* Disable the SDIO interrupts */ + SDIO->MASK &= ~SDIO_IT; + } +} + +/** + * @brief Checks whether the specified SDIO flag is set or not. + * @param SDIO_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed) + * @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed) + * @arg SDIO_FLAG_CTIMEOUT: Command response timeout + * @arg SDIO_FLAG_DTIMEOUT: Data timeout + * @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error + * @arg SDIO_FLAG_RXOVERR: Received FIFO overrun error + * @arg SDIO_FLAG_CMDREND: Command response received (CRC check passed) + * @arg SDIO_FLAG_CMDSENT: Command sent (no response required) + * @arg SDIO_FLAG_DATAEND: Data end (data counter, SDIDCOUNT, is zero) + * @arg SDIO_FLAG_STBITERR: Start bit not detected on all data signals in wide bus mode. + * @arg SDIO_FLAG_DBCKEND: Data block sent/received (CRC check passed) + * @arg SDIO_FLAG_CMDACT: Command transfer in progress + * @arg SDIO_FLAG_TXACT: Data transmit in progress + * @arg SDIO_FLAG_RXACT: Data receive in progress + * @arg SDIO_FLAG_TXFIFOHE: Transmit FIFO Half Empty + * @arg SDIO_FLAG_RXFIFOHF: Receive FIFO Half Full + * @arg SDIO_FLAG_TXFIFOF: Transmit FIFO full + * @arg SDIO_FLAG_RXFIFOF: Receive FIFO full + * @arg SDIO_FLAG_TXFIFOE: Transmit FIFO empty + * @arg SDIO_FLAG_RXFIFOE: Receive FIFO empty + * @arg SDIO_FLAG_TXDAVL: Data available in transmit FIFO + * @arg SDIO_FLAG_RXDAVL: Data available in receive FIFO + * @arg SDIO_FLAG_SDIOIT: SD I/O interrupt received + * @arg SDIO_FLAG_CEATAEND: CE-ATA command completion signal received for CMD61 + * @retval The new state of SDIO_FLAG (SET or RESET). + */ +FlagStatus SDIO_GetFlagStatus(uint32_t SDIO_FLAG) +{ + FlagStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_SDIO_FLAG(SDIO_FLAG)); + + if ((SDIO->STA & SDIO_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the SDIO's pending flags. + * @param SDIO_FLAG: specifies the flag to clear. + * This parameter can be one or a combination of the following values: + * @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed) + * @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed) + * @arg SDIO_FLAG_CTIMEOUT: Command response timeout + * @arg SDIO_FLAG_DTIMEOUT: Data timeout + * @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error + * @arg SDIO_FLAG_RXOVERR: Received FIFO overrun error + * @arg SDIO_FLAG_CMDREND: Command response received (CRC check passed) + * @arg SDIO_FLAG_CMDSENT: Command sent (no response required) + * @arg SDIO_FLAG_DATAEND: Data end (data counter, SDIDCOUNT, is zero) + * @arg SDIO_FLAG_STBITERR: Start bit not detected on all data signals in wide bus mode + * @arg SDIO_FLAG_DBCKEND: Data block sent/received (CRC check passed) + * @arg SDIO_FLAG_SDIOIT: SD I/O interrupt received + * @arg SDIO_FLAG_CEATAEND: CE-ATA command completion signal received for CMD61 + * @retval None + */ +void SDIO_ClearFlag(uint32_t SDIO_FLAG) +{ + /* Check the parameters */ + assert_param(IS_SDIO_CLEAR_FLAG(SDIO_FLAG)); + + SDIO->ICR = SDIO_FLAG; +} + +/** + * @brief Checks whether the specified SDIO interrupt has occurred or not. + * @param SDIO_IT: specifies the SDIO interrupt source to check. + * This parameter can be one of the following values: + * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt + * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt + * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt + * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt + * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt + * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt + * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt + * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt + * @arg SDIO_IT_DATAEND: Data end (data counter, SDIDCOUNT, is zero) interrupt + * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide + * bus mode interrupt + * @arg SDIO_IT_DBCKEND: Data block sent/received (CRC check passed) interrupt + * @arg SDIO_IT_CMDACT: Command transfer in progress interrupt + * @arg SDIO_IT_TXACT: Data transmit in progress interrupt + * @arg SDIO_IT_RXACT: Data receive in progress interrupt + * @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt + * @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt + * @arg SDIO_IT_TXFIFOF: Transmit FIFO full interrupt + * @arg SDIO_IT_RXFIFOF: Receive FIFO full interrupt + * @arg SDIO_IT_TXFIFOE: Transmit FIFO empty interrupt + * @arg SDIO_IT_RXFIFOE: Receive FIFO empty interrupt + * @arg SDIO_IT_TXDAVL: Data available in transmit FIFO interrupt + * @arg SDIO_IT_RXDAVL: Data available in receive FIFO interrupt + * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt + * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61 interrupt + * @retval The new state of SDIO_IT (SET or RESET). + */ +ITStatus SDIO_GetITStatus(uint32_t SDIO_IT) +{ + ITStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_SDIO_GET_IT(SDIO_IT)); + if ((SDIO->STA & SDIO_IT) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the SDIO's interrupt pending bits. + * @param SDIO_IT: specifies the interrupt pending bit to clear. + * This parameter can be one or a combination of the following values: + * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt + * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt + * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt + * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt + * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt + * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt + * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt + * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt + * @arg SDIO_IT_DATAEND: Data end (data counter, SDIO_DCOUNT, is zero) interrupt + * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide + * bus mode interrupt + * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt + * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61 + * @retval None + */ +void SDIO_ClearITPendingBit(uint32_t SDIO_IT) +{ + /* Check the parameters */ + assert_param(IS_SDIO_CLEAR_IT(SDIO_IT)); + + SDIO->ICR = SDIO_IT; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c new file mode 100644 index 000000000..033475e68 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c @@ -0,0 +1,1183 @@ +/** + ****************************************************************************** + * @file stm32f2xx_spi.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Serial peripheral interface (SPI): + * - Initialization and Configuration + * - Data transfers functions + * - Hardware CRC Calculation + * - DMA transfers management + * - Interrupts and flags management + * + * @verbatim + * + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable peripheral clock using the following functions + * RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE) for SPI1 + * RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE) for SPI2 + * RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI3. + * + * 2. Enable SCK, MOSI, MISO and NSS GPIO clocks using RCC_AHB1PeriphClockCmd() + * function. + * In I2S mode, if an external clock source is used then the I2S CKIN pin GPIO + * clock should also be enabled. + * + * 3. Peripherals alternate function: + * - Connect the pin to the desired peripherals' Alternate + * Function (AF) using GPIO_PinAFConfig() function + * - Configure the desired pin in alternate function by: + * GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF + * - Select the type, pull-up/pull-down and output speed via + * GPIO_PuPd, GPIO_OType and GPIO_Speed members + * - Call GPIO_Init() function + * In I2S mode, if an external clock source is used then the I2S CKIN pin + * should be also configured in Alternate function Push-pull pull-up mode. + * + * 4. Program the Polarity, Phase, First Data, Baud Rate Prescaler, Slave + * Management, Peripheral Mode and CRC Polynomial values using the SPI_Init() + * function. + * In I2S mode, program the Mode, Standard, Data Format, MCLK Output, Audio + * frequency and Polarity using I2S_Init() function. + * For I2S mode, make sure that either: + * - I2S PLL is configured using the functions RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S), + * RCC_PLLI2SCmd(ENABLE) and RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY). + * or + * - External clock source is configured using the function + * RCC_I2SCLKConfig(RCC_I2S2CLKSource_Ext) and after setting correctly the define constant + * I2S_EXTERNAL_CLOCK_VAL in the stm32f2xx_conf.h file. + * + * 5. Enable the NVIC and the corresponding interrupt using the function + * SPI_ITConfig() if you need to use interrupt mode. + * + * 6. When using the DMA mode + * - Configure the DMA using DMA_Init() function + * - Active the needed channel Request using SPI_I2S_DMACmd() function + * + * 7. Enable the SPI using the SPI_Cmd() function or enable the I2S using + * I2S_Cmd(). + * + * 8. Enable the DMA using the DMA_Cmd() function when using DMA mode. + * + * 9. Optionally, you can enable/configure the following parameters without + * re-initialization (i.e there is no need to call again SPI_Init() function): + * - When bidirectional mode (SPI_Direction_1Line_Rx or SPI_Direction_1Line_Tx) + * is programmed as Data direction parameter using the SPI_Init() function + * it can be possible to switch between SPI_Direction_Tx or SPI_Direction_Rx + * using the SPI_BiDirectionalLineConfig() function. + * - When SPI_NSS_Soft is selected as Slave Select Management parameter + * using the SPI_Init() function it can be possible to manage the + * NSS internal signal using the SPI_NSSInternalSoftwareConfig() function. + * - Reconfigure the data size using the SPI_DataSizeConfig() function + * - Enable or disable the SS output using the SPI_SSOutputCmd() function + * + * 10. To use the CRC Hardware calculation feature refer to the Peripheral + * CRC hardware Calculation subsection. + * + * + * @note This driver supports only the I2S clock scheme available in Silicon + * RevisionB and RevisionY. + * + * @note In I2S mode: if an external clock is used as source clock for the I2S, + * then the define I2S_EXTERNAL_CLOCK_VAL in file stm32f2xx_conf.h should + * be enabled and set to the value of the source clock frequency (in Hz). + * + * @note In SPI mode: To use the SPI TI mode, call the function SPI_TIModeCmd() + * just after calling the function SPI_Init(). + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_spi.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup SPI + * @brief SPI driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* SPI registers Masks */ +#define CR1_CLEAR_MASK ((uint16_t)0x3040) +#define I2SCFGR_CLEAR_MASK ((uint16_t)0xF040) + +/* RCC PLLs masks */ +#define PLLCFGR_PPLR_MASK ((uint32_t)0x70000000) +#define PLLCFGR_PPLN_MASK ((uint32_t)0x00007FC0) + +#define SPI_CR2_FRF ((uint16_t)0x0010) +#define SPI_SR_TIFRFE ((uint16_t)0x0100) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup SPI_Private_Functions + * @{ + */ + +/** @defgroup SPI_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + + This section provides a set of functions allowing to initialize the SPI Direction, + SPI Mode, SPI Data Size, SPI Polarity, SPI Phase, SPI NSS Management, SPI Baud + Rate Prescaler, SPI First Bit and SPI CRC Polynomial. + + The SPI_Init() function follows the SPI configuration procedures for Master mode + and Slave mode (details for these procedures are available in reference manual + (RM0033)). + +@endverbatim + * @{ + */ + +/** + * @brief Deinitialize the SPIx peripheral registers to their default reset values. + * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2 or 3 + * in SPI mode or 2 or 3 in I2S mode. + * @retval None + */ +void SPI_I2S_DeInit(SPI_TypeDef* SPIx) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + if (SPIx == SPI1) + { + /* Enable SPI1 reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE); + /* Release SPI1 from reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE); + } + else if (SPIx == SPI2) + { + /* Enable SPI2 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE); + /* Release SPI2 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, DISABLE); + } + else + { + if (SPIx == SPI3) + { + /* Enable SPI3 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE); + /* Release SPI3 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, DISABLE); + } + } +} + +/** + * @brief Initializes the SPIx peripheral according to the specified + * parameters in the SPI_InitStruct. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_InitStruct: pointer to a SPI_InitTypeDef structure that + * contains the configuration information for the specified SPI peripheral. + * @retval None + */ +void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct) +{ + uint16_t tmpreg = 0; + + /* check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Check the SPI parameters */ + assert_param(IS_SPI_DIRECTION_MODE(SPI_InitStruct->SPI_Direction)); + assert_param(IS_SPI_MODE(SPI_InitStruct->SPI_Mode)); + assert_param(IS_SPI_DATASIZE(SPI_InitStruct->SPI_DataSize)); + assert_param(IS_SPI_CPOL(SPI_InitStruct->SPI_CPOL)); + assert_param(IS_SPI_CPHA(SPI_InitStruct->SPI_CPHA)); + assert_param(IS_SPI_NSS(SPI_InitStruct->SPI_NSS)); + assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_InitStruct->SPI_BaudRatePrescaler)); + assert_param(IS_SPI_FIRST_BIT(SPI_InitStruct->SPI_FirstBit)); + assert_param(IS_SPI_CRC_POLYNOMIAL(SPI_InitStruct->SPI_CRCPolynomial)); + +/*---------------------------- SPIx CR1 Configuration ------------------------*/ + /* Get the SPIx CR1 value */ + tmpreg = SPIx->CR1; + /* Clear BIDIMode, BIDIOE, RxONLY, SSM, SSI, LSBFirst, BR, MSTR, CPOL and CPHA bits */ + tmpreg &= CR1_CLEAR_MASK; + /* Configure SPIx: direction, NSS management, first transmitted bit, BaudRate prescaler + master/salve mode, CPOL and CPHA */ + /* Set BIDImode, BIDIOE and RxONLY bits according to SPI_Direction value */ + /* Set SSM, SSI and MSTR bits according to SPI_Mode and SPI_NSS values */ + /* Set LSBFirst bit according to SPI_FirstBit value */ + /* Set BR bits according to SPI_BaudRatePrescaler value */ + /* Set CPOL bit according to SPI_CPOL value */ + /* Set CPHA bit according to SPI_CPHA value */ + tmpreg |= (uint16_t)((uint32_t)SPI_InitStruct->SPI_Direction | SPI_InitStruct->SPI_Mode | + SPI_InitStruct->SPI_DataSize | SPI_InitStruct->SPI_CPOL | + SPI_InitStruct->SPI_CPHA | SPI_InitStruct->SPI_NSS | + SPI_InitStruct->SPI_BaudRatePrescaler | SPI_InitStruct->SPI_FirstBit); + /* Write to SPIx CR1 */ + SPIx->CR1 = tmpreg; + + /* Activate the SPI mode (Reset I2SMOD bit in I2SCFGR register) */ + SPIx->I2SCFGR &= (uint16_t)~((uint16_t)SPI_I2SCFGR_I2SMOD); +/*---------------------------- SPIx CRCPOLY Configuration --------------------*/ + /* Write to SPIx CRCPOLY */ + SPIx->CRCPR = SPI_InitStruct->SPI_CRCPolynomial; +} + +/** + * @brief Initializes the SPIx peripheral according to the specified + * parameters in the I2S_InitStruct. + * @param SPIx: where x can be 2 or 3 to select the SPI peripheral (configured in I2S mode). + * @param I2S_InitStruct: pointer to an I2S_InitTypeDef structure that + * contains the configuration information for the specified SPI peripheral + * configured in I2S mode. + * + * @note The function calculates the optimal prescaler needed to obtain the most + * accurate audio frequency (depending on the I2S clock source, the PLL values + * and the product configuration). But in case the prescaler value is greater + * than 511, the default value (0x02) will be configured instead. + * + * @note if an external clock is used as source clock for the I2S, then the define + * I2S_EXTERNAL_CLOCK_VAL in file stm32f2xx_conf.h should be enabled and set + * to the value of the the source clock frequency (in Hz). + * + * @retval None + */ +void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct) +{ + uint16_t tmpreg = 0, i2sdiv = 2, i2sodd = 0, packetlength = 1; + uint32_t tmp = 0, i2sclk = 0; +#ifndef I2S_EXTERNAL_CLOCK_VAL + uint32_t pllm = 0, plln = 0, pllr = 0; +#endif /* I2S_EXTERNAL_CLOCK_VAL */ + + /* Check the I2S parameters */ + assert_param(IS_SPI_23_PERIPH(SPIx)); + assert_param(IS_I2S_MODE(I2S_InitStruct->I2S_Mode)); + assert_param(IS_I2S_STANDARD(I2S_InitStruct->I2S_Standard)); + assert_param(IS_I2S_DATA_FORMAT(I2S_InitStruct->I2S_DataFormat)); + assert_param(IS_I2S_MCLK_OUTPUT(I2S_InitStruct->I2S_MCLKOutput)); + assert_param(IS_I2S_AUDIO_FREQ(I2S_InitStruct->I2S_AudioFreq)); + assert_param(IS_I2S_CPOL(I2S_InitStruct->I2S_CPOL)); + +/*----------------------- SPIx I2SCFGR & I2SPR Configuration -----------------*/ + /* Clear I2SMOD, I2SE, I2SCFG, PCMSYNC, I2SSTD, CKPOL, DATLEN and CHLEN bits */ + SPIx->I2SCFGR &= I2SCFGR_CLEAR_MASK; + SPIx->I2SPR = 0x0002; + + /* Get the I2SCFGR register value */ + tmpreg = SPIx->I2SCFGR; + + /* If the default value has to be written, reinitialize i2sdiv and i2sodd*/ + if(I2S_InitStruct->I2S_AudioFreq == I2S_AudioFreq_Default) + { + i2sodd = (uint16_t)0; + i2sdiv = (uint16_t)2; + } + /* If the requested audio frequency is not the default, compute the prescaler */ + else + { + /* Check the frame length (For the Prescaler computing) *******************/ + if(I2S_InitStruct->I2S_DataFormat == I2S_DataFormat_16b) + { + /* Packet length is 16 bits */ + packetlength = 1; + } + else + { + /* Packet length is 32 bits */ + packetlength = 2; + } + + /* Get I2S source Clock frequency (only in Silicon RevisionB and RevisionY) */ + + /* If an external I2S clock has to be used, this define should be set + in the project configuration or in the stm32f2xx_conf.h file */ + #ifdef I2S_EXTERNAL_CLOCK_VAL + /* Set external clock as I2S clock source */ + if ((RCC->CFGR & RCC_CFGR_I2SSRC) == 0) + { + RCC->CFGR |= (uint32_t)RCC_CFGR_I2SSRC; + } + + /* Set the I2S clock to the external clock value */ + i2sclk = I2S_EXTERNAL_CLOCK_VAL; + + #else /* There is no define for External I2S clock source */ + /* Set PLLI2S as I2S clock source */ + if ((RCC->CFGR & RCC_CFGR_I2SSRC) != 0) + { + RCC->CFGR &= ~(uint32_t)RCC_CFGR_I2SSRC; + } + + /* Get the PLLI2SN value */ + plln = (uint32_t)(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6) & \ + (RCC_PLLI2SCFGR_PLLI2SN >> 6)); + + /* Get the PLLI2SR value */ + pllr = (uint32_t)(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28) & \ + (RCC_PLLI2SCFGR_PLLI2SR >> 28)); + + /* Get the PLLM value */ + pllm = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM); + + /* Get the I2S source clock value */ + i2sclk = (uint32_t)(((HSE_VALUE / pllm) * plln) / pllr); + #endif /* I2S_EXTERNAL_CLOCK_VAL */ + + /* Compute the Real divider depending on the MCLK output state, with a floating point */ + if(I2S_InitStruct->I2S_MCLKOutput == I2S_MCLKOutput_Enable) + { + /* MCLK output is enabled */ + tmp = (uint16_t)(((((i2sclk / 256) * 10) / I2S_InitStruct->I2S_AudioFreq)) + 5); + } + else + { + /* MCLK output is disabled */ + tmp = (uint16_t)(((((i2sclk / (32 * packetlength)) *10 ) / I2S_InitStruct->I2S_AudioFreq)) + 5); + } + + /* Remove the flatting point */ + tmp = tmp / 10; + + /* Check the parity of the divider */ + i2sodd = (uint16_t)(tmp & (uint16_t)0x0001); + + /* Compute the i2sdiv prescaler */ + i2sdiv = (uint16_t)((tmp - i2sodd) / 2); + + /* Get the Mask for the Odd bit (SPI_I2SPR[8]) register */ + i2sodd = (uint16_t) (i2sodd << 8); + } + + /* Test if the divider is 1 or 0 or greater than 0xFF */ + if ((i2sdiv < 2) || (i2sdiv > 0xFF)) + { + /* Set the default values */ + i2sdiv = 2; + i2sodd = 0; + } + + /* Write to SPIx I2SPR register the computed value */ + SPIx->I2SPR = (uint16_t)((uint16_t)i2sdiv | (uint16_t)(i2sodd | (uint16_t)I2S_InitStruct->I2S_MCLKOutput)); + + /* Configure the I2S with the SPI_InitStruct values */ + tmpreg |= (uint16_t)((uint16_t)SPI_I2SCFGR_I2SMOD | (uint16_t)(I2S_InitStruct->I2S_Mode | \ + (uint16_t)(I2S_InitStruct->I2S_Standard | (uint16_t)(I2S_InitStruct->I2S_DataFormat | \ + (uint16_t)I2S_InitStruct->I2S_CPOL)))); + + /* Write to SPIx I2SCFGR */ + SPIx->I2SCFGR = tmpreg; +} + +/** + * @brief Fills each SPI_InitStruct member with its default value. + * @param SPI_InitStruct: pointer to a SPI_InitTypeDef structure which will be initialized. + * @retval None + */ +void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct) +{ +/*--------------- Reset SPI init structure parameters values -----------------*/ + /* Initialize the SPI_Direction member */ + SPI_InitStruct->SPI_Direction = SPI_Direction_2Lines_FullDuplex; + /* initialize the SPI_Mode member */ + SPI_InitStruct->SPI_Mode = SPI_Mode_Slave; + /* initialize the SPI_DataSize member */ + SPI_InitStruct->SPI_DataSize = SPI_DataSize_8b; + /* Initialize the SPI_CPOL member */ + SPI_InitStruct->SPI_CPOL = SPI_CPOL_Low; + /* Initialize the SPI_CPHA member */ + SPI_InitStruct->SPI_CPHA = SPI_CPHA_1Edge; + /* Initialize the SPI_NSS member */ + SPI_InitStruct->SPI_NSS = SPI_NSS_Hard; + /* Initialize the SPI_BaudRatePrescaler member */ + SPI_InitStruct->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; + /* Initialize the SPI_FirstBit member */ + SPI_InitStruct->SPI_FirstBit = SPI_FirstBit_MSB; + /* Initialize the SPI_CRCPolynomial member */ + SPI_InitStruct->SPI_CRCPolynomial = 7; +} + +/** + * @brief Fills each I2S_InitStruct member with its default value. + * @param I2S_InitStruct: pointer to a I2S_InitTypeDef structure which will be initialized. + * @retval None + */ +void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct) +{ +/*--------------- Reset I2S init structure parameters values -----------------*/ + /* Initialize the I2S_Mode member */ + I2S_InitStruct->I2S_Mode = I2S_Mode_SlaveTx; + + /* Initialize the I2S_Standard member */ + I2S_InitStruct->I2S_Standard = I2S_Standard_Phillips; + + /* Initialize the I2S_DataFormat member */ + I2S_InitStruct->I2S_DataFormat = I2S_DataFormat_16b; + + /* Initialize the I2S_MCLKOutput member */ + I2S_InitStruct->I2S_MCLKOutput = I2S_MCLKOutput_Disable; + + /* Initialize the I2S_AudioFreq member */ + I2S_InitStruct->I2S_AudioFreq = I2S_AudioFreq_Default; + + /* Initialize the I2S_CPOL member */ + I2S_InitStruct->I2S_CPOL = I2S_CPOL_Low; +} + +/** + * @brief Enables or disables the specified SPI peripheral. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param NewState: new state of the SPIx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected SPI peripheral */ + SPIx->CR1 |= SPI_CR1_SPE; + } + else + { + /* Disable the selected SPI peripheral */ + SPIx->CR1 &= (uint16_t)~((uint16_t)SPI_CR1_SPE); + } +} + +/** + * @brief Enables or disables the specified SPI peripheral (in I2S mode). + * @param SPIx: where x can be 2 or 3 to select the SPI peripheral. + * @param NewState: new state of the SPIx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_23_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected SPI peripheral (in I2S mode) */ + SPIx->I2SCFGR |= SPI_I2SCFGR_I2SE; + } + else + { + /* Disable the selected SPI peripheral in I2S mode */ + SPIx->I2SCFGR &= (uint16_t)~((uint16_t)SPI_I2SCFGR_I2SE); + } +} + +/** + * @brief Configures the data size for the selected SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_DataSize: specifies the SPI data size. + * This parameter can be one of the following values: + * @arg SPI_DataSize_16b: Set data frame format to 16bit + * @arg SPI_DataSize_8b: Set data frame format to 8bit + * @retval None + */ +void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_DATASIZE(SPI_DataSize)); + /* Clear DFF bit */ + SPIx->CR1 &= (uint16_t)~SPI_DataSize_16b; + /* Set new DFF bit value */ + SPIx->CR1 |= SPI_DataSize; +} + +/** + * @brief Selects the data transfer direction in bidirectional mode for the specified SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_Direction: specifies the data transfer direction in bidirectional mode. + * This parameter can be one of the following values: + * @arg SPI_Direction_Tx: Selects Tx transmission direction + * @arg SPI_Direction_Rx: Selects Rx receive direction + * @retval None + */ +void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_DIRECTION(SPI_Direction)); + if (SPI_Direction == SPI_Direction_Tx) + { + /* Set the Tx only mode */ + SPIx->CR1 |= SPI_Direction_Tx; + } + else + { + /* Set the Rx only mode */ + SPIx->CR1 &= SPI_Direction_Rx; + } +} + +/** + * @brief Configures internally by software the NSS pin for the selected SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_NSSInternalSoft: specifies the SPI NSS internal state. + * This parameter can be one of the following values: + * @arg SPI_NSSInternalSoft_Set: Set NSS pin internally + * @arg SPI_NSSInternalSoft_Reset: Reset NSS pin internally + * @retval None + */ +void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_NSS_INTERNAL(SPI_NSSInternalSoft)); + if (SPI_NSSInternalSoft != SPI_NSSInternalSoft_Reset) + { + /* Set NSS pin internally by software */ + SPIx->CR1 |= SPI_NSSInternalSoft_Set; + } + else + { + /* Reset NSS pin internally by software */ + SPIx->CR1 &= SPI_NSSInternalSoft_Reset; + } +} + +/** + * @brief Enables or disables the SS output for the selected SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param NewState: new state of the SPIx SS output. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected SPI SS output */ + SPIx->CR2 |= (uint16_t)SPI_CR2_SSOE; + } + else + { + /* Disable the selected SPI SS output */ + SPIx->CR2 &= (uint16_t)~((uint16_t)SPI_CR2_SSOE); + } +} + +/** + * @brief Enables or disables the SPIx/I2Sx DMA interface. + * + * @note This function can be called only after the SPI_Init() function has + * been called. + * @note When TI mode is selected, the control bits SSM, SSI, CPOL and CPHA + * are not taken into consideration and are configured by hardware + * respectively to the TI mode requirements. + * + * @param SPIx: where x can be 1, 2 or 3 + * @param NewState: new state of the selected SPI TI communication mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_TIModeCmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the TI mode for the selected SPI peripheral */ + SPIx->CR2 |= SPI_CR2_FRF; + } + else + { + /* Disable the TI mode for the selected SPI peripheral */ + SPIx->CR2 &= (uint16_t)~SPI_CR2_FRF; + } +} + +/** + * @} + */ + +/** @defgroup SPI_Group2 Data transfers functions + * @brief Data transfers functions + * +@verbatim + =============================================================================== + Data transfers functions + =============================================================================== + + This section provides a set of functions allowing to manage the SPI data transfers + + In reception, data are received and then stored into an internal Rx buffer while + In transmission, data are first stored into an internal Tx buffer before being + transmitted. + + The read access of the SPI_DR register can be done using the SPI_I2S_ReceiveData() + function and returns the Rx buffered value. Whereas a write access to the SPI_DR + can be done using SPI_I2S_SendData() function and stores the written data into + Tx buffer. + +@endverbatim + * @{ + */ + +/** + * @brief Returns the most recent received data by the SPIx/I2Sx peripheral. + * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2 or 3 + * in SPI mode or 2 or 3 in I2S mode. + * @retval The value of the received data. + */ +uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Return the data in the DR register */ + return SPIx->DR; +} + +/** + * @brief Transmits a Data through the SPIx/I2Sx peripheral. + * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2 or 3 + * in SPI mode or 2 or 3 in I2S mode. + * @param Data: Data to be transmitted. + * @retval None + */ +void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Write in the DR register the data to be sent */ + SPIx->DR = Data; +} + +/** + * @} + */ + +/** @defgroup SPI_Group3 Hardware CRC Calculation functions + * @brief Hardware CRC Calculation functions + * +@verbatim + =============================================================================== + Hardware CRC Calculation functions + =============================================================================== + + This section provides a set of functions allowing to manage the SPI CRC hardware + calculation + + SPI communication using CRC is possible through the following procedure: + 1. Program the Data direction, Polarity, Phase, First Data, Baud Rate Prescaler, + Slave Management, Peripheral Mode and CRC Polynomial values using the SPI_Init() + function. + 2. Enable the CRC calculation using the SPI_CalculateCRC() function. + 3. Enable the SPI using the SPI_Cmd() function + 4. Before writing the last data to the TX buffer, set the CRCNext bit using the + SPI_TransmitCRC() function to indicate that after transmission of the last + data, the CRC should be transmitted. + 5. After transmitting the last data, the SPI transmits the CRC. The SPI_CR1_CRCNEXT + bit is reset. The CRC is also received and compared against the SPI_RXCRCR + value. + If the value does not match, the SPI_FLAG_CRCERR flag is set and an interrupt + can be generated when the SPI_I2S_IT_ERR interrupt is enabled. + +@note It is advised not to read the calculated CRC values during the communication. + +@note When the SPI is in slave mode, be careful to enable CRC calculation only + when the clock is stable, that is, when the clock is in the steady state. + If not, a wrong CRC calculation may be done. In fact, the CRC is sensitive + to the SCK slave input clock as soon as CRCEN is set, and this, whatever + the value of the SPE bit. + +@note With high bitrate frequencies, be careful when transmitting the CRC. + As the number of used CPU cycles has to be as low as possible in the CRC + transfer phase, it is forbidden to call software functions in the CRC + transmission sequence to avoid errors in the last data and CRC reception. + In fact, CRCNEXT bit has to be written before the end of the transmission/reception + of the last data. + +@note For high bit rate frequencies, it is advised to use the DMA mode to avoid the + degradation of the SPI speed performance due to CPU accesses impacting the + SPI bandwidth. + +@note When the STM32F2xx is configured as slave and the NSS hardware mode is + used, the NSS pin needs to be kept low between the data phase and the CRC + phase. + +@note When the SPI is configured in slave mode with the CRC feature enabled, CRC + calculation takes place even if a high level is applied on the NSS pin. + This may happen for example in case of a multi-slave environment where the + communication master addresses slaves alternately. + +@note Between a slave de-selection (high level on NSS) and a new slave selection + (low level on NSS), the CRC value should be cleared on both master and slave + sides in order to resynchronize the master and slave for their respective + CRC calculation. + +@note To clear the CRC, follow the procedure below: + 1. Disable SPI using the SPI_Cmd() function + 2. Disable the CRC calculation using the SPI_CalculateCRC() function. + 3. Enable the CRC calculation using the SPI_CalculateCRC() function. + 4. Enable SPI using the SPI_Cmd() function. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the CRC value calculation of the transferred bytes. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param NewState: new state of the SPIx CRC value calculation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected SPI CRC calculation */ + SPIx->CR1 |= SPI_CR1_CRCEN; + } + else + { + /* Disable the selected SPI CRC calculation */ + SPIx->CR1 &= (uint16_t)~((uint16_t)SPI_CR1_CRCEN); + } +} + +/** + * @brief Transmit the SPIx CRC value. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @retval None + */ +void SPI_TransmitCRC(SPI_TypeDef* SPIx) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Enable the selected SPI CRC transmission */ + SPIx->CR1 |= SPI_CR1_CRCNEXT; +} + +/** + * @brief Returns the transmit or the receive CRC register value for the specified SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_CRC: specifies the CRC register to be read. + * This parameter can be one of the following values: + * @arg SPI_CRC_Tx: Selects Tx CRC register + * @arg SPI_CRC_Rx: Selects Rx CRC register + * @retval The selected CRC register value.. + */ +uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC) +{ + uint16_t crcreg = 0; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_CRC(SPI_CRC)); + if (SPI_CRC != SPI_CRC_Rx) + { + /* Get the Tx CRC register */ + crcreg = SPIx->TXCRCR; + } + else + { + /* Get the Rx CRC register */ + crcreg = SPIx->RXCRCR; + } + /* Return the selected CRC register */ + return crcreg; +} + +/** + * @brief Returns the CRC Polynomial register value for the specified SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @retval The CRC Polynomial register value. + */ +uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Return the CRC polynomial register */ + return SPIx->CRCPR; +} + +/** + * @} + */ + +/** @defgroup SPI_Group4 DMA transfers management functions + * @brief DMA transfers management functions + * +@verbatim + =============================================================================== + DMA transfers management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the SPIx/I2Sx DMA interface. + * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2 or 3 + * in SPI mode or 2 or 3 in I2S mode. + * @param SPI_I2S_DMAReq: specifies the SPI DMA transfer request to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg SPI_I2S_DMAReq_Tx: Tx buffer DMA transfer request + * @arg SPI_I2S_DMAReq_Rx: Rx buffer DMA transfer request + * @param NewState: new state of the selected SPI DMA transfer request. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_SPI_I2S_DMAREQ(SPI_I2S_DMAReq)); + + if (NewState != DISABLE) + { + /* Enable the selected SPI DMA requests */ + SPIx->CR2 |= SPI_I2S_DMAReq; + } + else + { + /* Disable the selected SPI DMA requests */ + SPIx->CR2 &= (uint16_t)~SPI_I2S_DMAReq; + } +} + +/** + * @} + */ + +/** @defgroup SPI_Group5 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + + This section provides a set of functions allowing to configure the SPI Interrupts + sources and check or clear the flags or pending bits status. + The user should identify which mode will be used in his application to manage + the communication: Polling mode, Interrupt mode or DMA mode. + + Polling Mode + ============= + In Polling Mode, the SPI/I2S communication can be managed by 9 flags: + 1. SPI_I2S_FLAG_TXE : to indicate the status of the transmit buffer register + 2. SPI_I2S_FLAG_RXNE : to indicate the status of the receive buffer register + 3. SPI_I2S_FLAG_BSY : to indicate the state of the communication layer of the SPI. + 4. SPI_FLAG_CRCERR : to indicate if a CRC Calculation error occur + 5. SPI_FLAG_MODF : to indicate if a Mode Fault error occur + 6. SPI_I2S_FLAG_OVR : to indicate if an Overrun error occur + 7. I2S_FLAG_TIFRFE: to indicate a Frame Format error occurs. + 8. I2S_FLAG_UDR: to indicate an Underrun error occurs. + 9. I2S_FLAG_CHSIDE: to indicate Channel Side. + +@note Do not use the BSY flag to handle each data transmission or reception. It is + better to use the TXE and RXNE flags instead. + + In this Mode it is advised to use the following functions: + - FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); + - void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); + + Interrupt Mode + =============== + In Interrupt Mode, the SPI communication can be managed by 3 interrupt sources + and 7 pending bits: + Pending Bits: + ------------- + 1. SPI_I2S_IT_TXE : to indicate the status of the transmit buffer register + 2. SPI_I2S_IT_RXNE : to indicate the status of the receive buffer register + 3. SPI_IT_CRCERR : to indicate if a CRC Calculation error occur (available in SPI mode only) + 4. SPI_IT_MODF : to indicate if a Mode Fault error occur (available in SPI mode only) + 5. SPI_I2S_IT_OVR : to indicate if an Overrun error occur + 6. I2S_IT_UDR : to indicate an Underrun Error occurs (available in I2S mode only). + 7. I2S_FLAG_TIFRFE : to indicate a Frame Format error occurs (available in TI mode only). + + Interrupt Source: + ----------------- + 1. SPI_I2S_IT_TXE: specifies the interrupt source for the Tx buffer empty + interrupt. + 2. SPI_I2S_IT_RXNE : specifies the interrupt source for the Rx buffer not + empty interrupt. + 3. SPI_I2S_IT_ERR : specifies the interrupt source for the errors interrupt. + + In this Mode it is advised to use the following functions: + - void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); + - ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); + - void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); + + DMA Mode + ======== + In DMA Mode, the SPI communication can be managed by 2 DMA Channel requests: + 1. SPI_I2S_DMAReq_Tx: specifies the Tx buffer DMA transfer request + 2. SPI_I2S_DMAReq_Rx: specifies the Rx buffer DMA transfer request + + In this Mode it is advised to use the following function: + - void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState); + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified SPI/I2S interrupts. + * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2 or 3 + * in SPI mode or 2 or 3 in I2S mode. + * @param SPI_I2S_IT: specifies the SPI interrupt source to be enabled or disabled. + * This parameter can be one of the following values: + * @arg SPI_I2S_IT_TXE: Tx buffer empty interrupt mask + * @arg SPI_I2S_IT_RXNE: Rx buffer not empty interrupt mask + * @arg SPI_I2S_IT_ERR: Error interrupt mask + * @param NewState: new state of the specified SPI interrupt. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState) +{ + uint16_t itpos = 0, itmask = 0 ; + + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_SPI_I2S_CONFIG_IT(SPI_I2S_IT)); + + /* Get the SPI IT index */ + itpos = SPI_I2S_IT >> 4; + + /* Set the IT mask */ + itmask = (uint16_t)1 << (uint16_t)itpos; + + if (NewState != DISABLE) + { + /* Enable the selected SPI interrupt */ + SPIx->CR2 |= itmask; + } + else + { + /* Disable the selected SPI interrupt */ + SPIx->CR2 &= (uint16_t)~itmask; + } +} + +/** + * @brief Checks whether the specified SPIx/I2Sx flag is set or not. + * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2 or 3 + * in SPI mode or 2 or 3 in I2S mode. + * @param SPI_I2S_FLAG: specifies the SPI flag to check. + * This parameter can be one of the following values: + * @arg SPI_I2S_FLAG_TXE: Transmit buffer empty flag. + * @arg SPI_I2S_FLAG_RXNE: Receive buffer not empty flag. + * @arg SPI_I2S_FLAG_BSY: Busy flag. + * @arg SPI_I2S_FLAG_OVR: Overrun flag. + * @arg SPI_FLAG_MODF: Mode Fault flag. + * @arg SPI_FLAG_CRCERR: CRC Error flag. + * @arg SPI_I2S_FLAG_TIFRFE: Format Error. + * @arg I2S_FLAG_UDR: Underrun Error flag. + * @arg I2S_FLAG_CHSIDE: Channel Side flag. + * @retval The new state of SPI_I2S_FLAG (SET or RESET). + */ +FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_I2S_GET_FLAG(SPI_I2S_FLAG)); + + /* Check the status of the specified SPI flag */ + if ((SPIx->SR & SPI_I2S_FLAG) != (uint16_t)RESET) + { + /* SPI_I2S_FLAG is set */ + bitstatus = SET; + } + else + { + /* SPI_I2S_FLAG is reset */ + bitstatus = RESET; + } + /* Return the SPI_I2S_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the SPIx CRC Error (CRCERR) flag. + * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2 or 3 + * in SPI mode or 2 or 3 in I2S mode. + * @param SPI_I2S_FLAG: specifies the SPI flag to clear. + * This function clears only CRCERR flag. + * @arg SPI_FLAG_CRCERR: CRC Error flag. + * + * @note OVR (OverRun error) flag is cleared by software sequence: a read + * operation to SPI_DR register (SPI_I2S_ReceiveData()) followed by a read + * operation to SPI_SR register (SPI_I2S_GetFlagStatus()). + * @note UDR (UnderRun error) flag is cleared by a read operation to + * SPI_SR register (SPI_I2S_GetFlagStatus()). + * @note MODF (Mode Fault) flag is cleared by software sequence: a read/write + * operation to SPI_SR register (SPI_I2S_GetFlagStatus()) followed by a + * write operation to SPI_CR1 register (SPI_Cmd() to enable the SPI). + * + * @retval None + */ +void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_I2S_CLEAR_FLAG(SPI_I2S_FLAG)); + + /* Clear the selected SPI CRC Error (CRCERR) flag */ + SPIx->SR = (uint16_t)~SPI_I2S_FLAG; +} + +/** + * @brief Checks whether the specified SPIx/I2Sx interrupt has occurred or not. + * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2 or 3 + * in SPI mode or 2 or 3 in I2S mode. + * @param SPI_I2S_IT: specifies the SPI interrupt source to check. + * This parameter can be one of the following values: + * @arg SPI_I2S_IT_TXE: Transmit buffer empty interrupt. + * @arg SPI_I2S_IT_RXNE: Receive buffer not empty interrupt. + * @arg SPI_I2S_IT_OVR: Overrun interrupt. + * @arg SPI_IT_MODF: Mode Fault interrupt. + * @arg SPI_IT_CRCERR: CRC Error interrupt. + * @arg I2S_IT_UDR: Underrun interrupt. + * @arg SPI_I2S_IT_TIFRFE: Format Error interrupt. + * @retval The new state of SPI_I2S_IT (SET or RESET). + */ +ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT) +{ + ITStatus bitstatus = RESET; + uint16_t itpos = 0, itmask = 0, enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_I2S_GET_IT(SPI_I2S_IT)); + + /* Get the SPI_I2S_IT index */ + itpos = 0x01 << (SPI_I2S_IT & 0x0F); + + /* Get the SPI_I2S_IT IT mask */ + itmask = SPI_I2S_IT >> 4; + + /* Set the IT mask */ + itmask = 0x01 << itmask; + + /* Get the SPI_I2S_IT enable bit status */ + enablestatus = (SPIx->CR2 & itmask) ; + + /* Check the status of the specified SPI interrupt */ + if (((SPIx->SR & itpos) != (uint16_t)RESET) && enablestatus) + { + /* SPI_I2S_IT is set */ + bitstatus = SET; + } + else + { + /* SPI_I2S_IT is reset */ + bitstatus = RESET; + } + /* Return the SPI_I2S_IT status */ + return bitstatus; +} + +/** + * @brief Clears the SPIx CRC Error (CRCERR) interrupt pending bit. + * @param SPIx: To select the SPIx/I2Sx peripheral, where x can be: 1, 2 or 3 + * in SPI mode or 2 or 3 in I2S mode. + * @param SPI_I2S_IT: specifies the SPI interrupt pending bit to clear. + * This function clears only CRCERR interrupt pending bit. + * @arg SPI_IT_CRCERR: CRC Error interrupt. + * + * @note OVR (OverRun Error) interrupt pending bit is cleared by software + * sequence: a read operation to SPI_DR register (SPI_I2S_ReceiveData()) + * followed by a read operation to SPI_SR register (SPI_I2S_GetITStatus()). + * @note UDR (UnderRun Error) interrupt pending bit is cleared by a read + * operation to SPI_SR register (SPI_I2S_GetITStatus()). + * @note MODF (Mode Fault) interrupt pending bit is cleared by software sequence: + * a read/write operation to SPI_SR register (SPI_I2S_GetITStatus()) + * followed by a write operation to SPI_CR1 register (SPI_Cmd() to enable + * the SPI). + * @retval None + */ +void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT) +{ + uint16_t itpos = 0; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_I2S_CLEAR_IT(SPI_I2S_IT)); + + /* Get the SPI_I2S IT index */ + itpos = 0x01 << (SPI_I2S_IT & 0x0F); + + /* Clear the selected SPI CRC Error (CRCERR) interrupt pending bit */ + SPIx->SR = (uint16_t)~itpos; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_syscfg.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_syscfg.c new file mode 100644 index 000000000..83c9da675 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_syscfg.c @@ -0,0 +1,210 @@ +/** + ****************************************************************************** + * @file stm32f2xx_syscfg.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the SYSCFG peripheral. + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * + * This driver provides functions for: + * + * 1. Remapping the memory accessible in the code area using SYSCFG_MemoryRemapConfig() + * + * 2. Manage the EXTI lines connection to the GPIOs using SYSCFG_EXTILineConfig() + * + * 3. Select the ETHERNET media interface (RMII/RII) using SYSCFG_ETH_MediaInterfaceConfig() + * + * @note SYSCFG APB clock must be enabled to get write access to SYSCFG registers, + * using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup SYSCFG + * @brief SYSCFG driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* ------------ RCC registers bit address in the alias region ----------- */ +#define SYSCFG_OFFSET (SYSCFG_BASE - PERIPH_BASE) +/* --- PMC Register ---*/ +/* Alias word address of MII_RMII_SEL bit */ +#define PMC_OFFSET (SYSCFG_OFFSET + 0x04) +#define MII_RMII_SEL_BitNumber ((uint8_t)0x17) +#define PMC_MII_RMII_SEL_BB (PERIPH_BB_BASE + (PMC_OFFSET * 32) + (MII_RMII_SEL_BitNumber * 4)) + +/* --- CMPCR Register ---*/ +/* Alias word address of CMP_PD bit */ +#define CMPCR_OFFSET (SYSCFG_OFFSET + 0x20) +#define CMP_PD_BitNumber ((uint8_t)0x00) +#define CMPCR_CMP_PD_BB (PERIPH_BB_BASE + (CMPCR_OFFSET * 32) + (CMP_PD_BitNumber * 4)) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup SYSCFG_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the Alternate Functions (remap and EXTI configuration) + * registers to their default reset values. + * @param None + * @retval None + */ +void SYSCFG_DeInit(void) +{ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, DISABLE); +} + +/** + * @brief Changes the mapping of the specified pin. + * @param SYSCFG_Memory: selects the memory remapping. + * This parameter can be one of the following values: + * @arg SYSCFG_MemoryRemap_Flash: Main Flash memory mapped at 0x00000000 + * @arg SYSCFG_MemoryRemap_SystemFlash: System Flash memory mapped at 0x00000000 + * @arg SYSCFG_MemoryRemap_FSMC: FSMC (Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000 + * @arg SYSCFG_MemoryRemap_SRAM: Embedded SRAM (112kB) mapped at 0x00000000 + * + * @note In remap mode, the FSMC addressing is fixed to the remap address area only + * (Bank1 NOR/PSRAM 1 and NOR/PSRAM 2) and FSMC control registers are not + * accessible. The FSMC remap function must be disabled to allows addressing + * other memory devices through the FSMC and/or to access FSMC control + * registers. + * + * @retval None + */ +void SYSCFG_MemoryRemapConfig(uint8_t SYSCFG_MemoryRemap) +{ + /* Check the parameters */ + assert_param(IS_SYSCFG_MEMORY_REMAP_CONFING(SYSCFG_MemoryRemap)); + + SYSCFG->MEMRMP = SYSCFG_MemoryRemap; +} + +/** + * @brief Selects the GPIO pin used as EXTI Line. + * @param EXTI_PortSourceGPIOx : selects the GPIO port to be used as source for + * EXTI lines where x can be (A..I). + * @param EXTI_PinSourcex: specifies the EXTI line to be configured. + * This parameter can be EXTI_PinSourcex where x can be (0..15, except + * for EXTI_PortSourceGPIOI x can be (0..11). + * @retval None + */ +void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex) +{ + uint32_t tmp = 0x00; + + /* Check the parameters */ + assert_param(IS_EXTI_PORT_SOURCE(EXTI_PortSourceGPIOx)); + assert_param(IS_EXTI_PIN_SOURCE(EXTI_PinSourcex)); + + tmp = ((uint32_t)0x0F) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03)); + SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] &= ~tmp; + SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] |= (((uint32_t)EXTI_PortSourceGPIOx) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03))); +} + +/** + * @brief Selects the ETHERNET media interface + * @param SYSCFG_ETH_MediaInterface: specifies the Media Interface mode. + * This parameter can be one of the following values: + * @arg SYSCFG_ETH_MediaInterface_MII: MII mode selected + * @arg SYSCFG_ETH_MediaInterface_RMII: RMII mode selected + * @retval None + */ +void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface) +{ + assert_param(IS_SYSCFG_ETH_MEDIA_INTERFACE(SYSCFG_ETH_MediaInterface)); + /* Configure MII_RMII selection bit */ + *(__IO uint32_t *) PMC_MII_RMII_SEL_BB = SYSCFG_ETH_MediaInterface; +} + +/** + * @brief Enables or disables the I/O Compensation Cell. + * @note The I/O compensation cell can be used only when the device supply + * voltage ranges from 2.4 to 3.6 V. + * @param NewState: new state of the I/O Compensation Cell. + * This parameter can be one of the following values: + * @arg ENABLE: I/O compensation cell enabled + * @arg DISABLE: I/O compensation cell power-down mode + * @retval None + */ +void SYSCFG_CompensationCellCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CMPCR_CMP_PD_BB = (uint32_t)NewState; +} + +/** + * @brief Checks whether the I/O Compensation Cell ready flag is set or not. + * @param None + * @retval The new state of the I/O Compensation Cell ready flag (SET or RESET) + */ +FlagStatus SYSCFG_GetCompensationCellStatus(void) +{ + FlagStatus bitstatus = RESET; + + if ((SYSCFG->CMPCR & SYSCFG_CMPCR_READY ) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_tim.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_tim.c new file mode 100644 index 000000000..a9f6e6b16 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_tim.c @@ -0,0 +1,3358 @@ +/** + ****************************************************************************** + * @file stm32f2xx_tim.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the TIM peripheral: + * - TimeBase management + * - Output Compare management + * - Input Capture management + * - Advanced-control timers (TIM1 and TIM8) specific features + * - Interrupts, DMA and flags management + * - Clocks management + * - Synchronization management + * - Specific interface management + * - Specific remapping management + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * This driver provides functions to configure and program the TIM + * of all STM32F2xx devices. + * These functions are split in 9 groups: + * + * 1. TIM TimeBase management: this group includes all needed functions + * to configure the TM Timebase unit: + * - Set/Get Prescaler + * - Set/Get Autoreload + * - Counter modes configuration + * - Set Clock division + * - Select the One Pulse mode + * - Update Request Configuration + * - Update Disable Configuration + * - Auto-Preload Configuration + * - Enable/Disable the counter + * + * 2. TIM Output Compare management: this group includes all needed + * functions to configure the Capture/Compare unit used in Output + * compare mode: + * - Configure each channel, independently, in Output Compare mode + * - Select the output compare modes + * - Select the Polarities of each channel + * - Set/Get the Capture/Compare register values + * - Select the Output Compare Fast mode + * - Select the Output Compare Forced mode + * - Output Compare-Preload Configuration + * - Clear Output Compare Reference + * - Select the OCREF Clear signal + * - Enable/Disable the Capture/Compare Channels + * + * 3. TIM Input Capture management: this group includes all needed + * functions to configure the Capture/Compare unit used in + * Input Capture mode: + * - Configure each channel in input capture mode + * - Configure Channel1/2 in PWM Input mode + * - Set the Input Capture Prescaler + * - Get the Capture/Compare values + * + * 4. Advanced-control timers (TIM1 and TIM8) specific features + * - Configures the Break input, dead time, Lock level, the OSSI, + * the OSSR State and the AOE(automatic output enable) + * - Enable/Disable the TIM peripheral Main Outputs + * - Select the Commutation event + * - Set/Reset the Capture Compare Preload Control bit + * + * 5. TIM interrupts, DMA and flags management + * - Enable/Disable interrupt sources + * - Get flags status + * - Clear flags/ Pending bits + * - Enable/Disable DMA requests + * - Configure DMA burst mode + * - Select CaptureCompare DMA request + * + * 6. TIM clocks management: this group includes all needed functions + * to configure the clock controller unit: + * - Select internal/External clock + * - Select the external clock mode: ETR(Mode1/Mode2), TIx or ITRx + * + * 7. TIM synchronization management: this group includes all needed + * functions to configure the Synchronization unit: + * - Select Input Trigger + * - Select Output Trigger + * - Select Master Slave Mode + * - ETR Configuration when used as external trigger + * + * 8. TIM specific interface management, this group includes all + * needed functions to use the specific TIM interface: + * - Encoder Interface Configuration + * - Select Hall Sensor + * + * 9. TIM specific remapping management includes the Remapping + * configuration of specific timers + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_tim.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup TIM + * @brief TIM driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* ---------------------- TIM registers bit mask ------------------------ */ +#define SMCR_ETR_MASK ((uint16_t)0x00FF) +#define CCMR_OFFSET ((uint16_t)0x0018) +#define CCER_CCE_SET ((uint16_t)0x0001) +#define CCER_CCNE_SET ((uint16_t)0x0004) +#define CCMR_OC13M_MASK ((uint16_t)0xFF8F) +#define CCMR_OC24M_MASK ((uint16_t)0x8FFF) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); + +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup TIM_Private_Functions + * @{ + */ + +/** @defgroup TIM_Group1 TimeBase management functions + * @brief TimeBase management functions + * +@verbatim + =============================================================================== + TimeBase management functions + =============================================================================== + + =================================================================== + TIM Driver: how to use it in Timing(Time base) Mode + =================================================================== + To use the Timer in Timing(Time base) mode, the following steps are mandatory: + + 1. Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) function + + 2. Fill the TIM_TimeBaseInitStruct with the desired parameters. + + 3. Call TIM_TimeBaseInit(TIMx, &TIM_TimeBaseInitStruct) to configure the Time Base unit + with the corresponding configuration + + 4. Enable the NVIC if you need to generate the update interrupt. + + 5. Enable the corresponding interrupt using the function TIM_ITConfig(TIMx, TIM_IT_Update) + + 6. Call the TIM_Cmd(ENABLE) function to enable the TIM counter. + + Note1: All other functions can be used separately to modify, if needed, + a specific feature of the Timer. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the TIMx peripheral registers to their default reset values. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @retval None + + */ +void TIM_DeInit(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + if (TIMx == TIM1) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE); + } + else if (TIMx == TIM2) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE); + } + else if (TIMx == TIM3) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE); + } + else if (TIMx == TIM4) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, DISABLE); + } + else if (TIMx == TIM5) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM5, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM5, DISABLE); + } + else if (TIMx == TIM6) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM6, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM6, DISABLE); + } + else if (TIMx == TIM7) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM7, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM7, DISABLE); + } + else if (TIMx == TIM8) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM8, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM8, DISABLE); + } + else if (TIMx == TIM9) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM9, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM9, DISABLE); + } + else if (TIMx == TIM10) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM10, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM10, DISABLE); + } + else if (TIMx == TIM11) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM11, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM11, DISABLE); + } + else if (TIMx == TIM12) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM12, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM12, DISABLE); + } + else if (TIMx == TIM13) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM13, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM13, DISABLE); + } + else + { + if (TIMx == TIM14) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM14, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM14, DISABLE); + } + } +} + +/** + * @brief Initializes the TIMx Time Base Unit peripheral according to + * the specified parameters in the TIM_TimeBaseInitStruct. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef structure + * that contains the configuration information for the specified TIM peripheral. + * @retval None + */ +void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) +{ + uint16_t tmpcr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_COUNTER_MODE(TIM_TimeBaseInitStruct->TIM_CounterMode)); + assert_param(IS_TIM_CKD_DIV(TIM_TimeBaseInitStruct->TIM_ClockDivision)); + + tmpcr1 = TIMx->CR1; + + if((TIMx == TIM1) || (TIMx == TIM8)|| + (TIMx == TIM2) || (TIMx == TIM3)|| + (TIMx == TIM4) || (TIMx == TIM5)) + { + /* Select the Counter Mode */ + tmpcr1 &= (uint16_t)(~(TIM_CR1_DIR | TIM_CR1_CMS)); + tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_CounterMode; + } + + if((TIMx != TIM6) && (TIMx != TIM7)) + { + /* Set the clock division */ + tmpcr1 &= (uint16_t)(~TIM_CR1_CKD); + tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_ClockDivision; + } + + TIMx->CR1 = tmpcr1; + + /* Set the Autoreload value */ + TIMx->ARR = TIM_TimeBaseInitStruct->TIM_Period ; + + /* Set the Prescaler value */ + TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler; + + if ((TIMx == TIM1) || (TIMx == TIM8)) + { + /* Set the Repetition Counter value */ + TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter; + } + + /* Generate an update event to reload the Prescaler + and the repetition counter(only for TIM1 and TIM8) value immediatly */ + TIMx->EGR = TIM_PSCReloadMode_Immediate; +} + +/** + * @brief Fills each TIM_TimeBaseInitStruct member with its default value. + * @param TIM_TimeBaseInitStruct : pointer to a TIM_TimeBaseInitTypeDef + * structure which will be initialized. + * @retval None + */ +void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) +{ + /* Set the default configuration */ + TIM_TimeBaseInitStruct->TIM_Period = 0xFFFFFFFF; + TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000; + TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1; + TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000; +} + +/** + * @brief Configures the TIMx Prescaler. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param Prescaler: specifies the Prescaler Register value + * @param TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode + * This parameter can be one of the following values: + * @arg TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event. + * @arg TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediatly. + * @retval None + */ +void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode)); + /* Set the Prescaler value */ + TIMx->PSC = Prescaler; + /* Set or reset the UG Bit */ + TIMx->EGR = TIM_PSCReloadMode; +} + +/** + * @brief Specifies the TIMx Counter Mode to be used. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_CounterMode: specifies the Counter Mode to be used + * This parameter can be one of the following values: + * @arg TIM_CounterMode_Up: TIM Up Counting Mode + * @arg TIM_CounterMode_Down: TIM Down Counting Mode + * @arg TIM_CounterMode_CenterAligned1: TIM Center Aligned Mode1 + * @arg TIM_CounterMode_CenterAligned2: TIM Center Aligned Mode2 + * @arg TIM_CounterMode_CenterAligned3: TIM Center Aligned Mode3 + * @retval None + */ +void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode) +{ + uint16_t tmpcr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_COUNTER_MODE(TIM_CounterMode)); + + tmpcr1 = TIMx->CR1; + + /* Reset the CMS and DIR Bits */ + tmpcr1 &= (uint16_t)~(TIM_CR1_DIR | TIM_CR1_CMS); + + /* Set the Counter Mode */ + tmpcr1 |= TIM_CounterMode; + + /* Write to TIMx CR1 register */ + TIMx->CR1 = tmpcr1; +} + +/** + * @brief Sets the TIMx Counter Register value + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param Counter: specifies the Counter register new value. + * @retval None + */ +void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Set the Counter Register value */ + TIMx->CNT = Counter; +} + +/** + * @brief Sets the TIMx Autoreload Register value + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param Autoreload: specifies the Autoreload register new value. + * @retval None + */ +void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Set the Autoreload Register value */ + TIMx->ARR = Autoreload; +} + +/** + * @brief Gets the TIMx Counter value. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @retval Counter Register value + */ +uint32_t TIM_GetCounter(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Get the Counter Register value */ + return TIMx->CNT; +} + +/** + * @brief Gets the TIMx Prescaler value. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @retval Prescaler Register value. + */ +uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Get the Prescaler Register value */ + return TIMx->PSC; +} + +/** + * @brief Enables or Disables the TIMx Update event. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param NewState: new state of the TIMx UDIS bit + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Set the Update Disable Bit */ + TIMx->CR1 |= TIM_CR1_UDIS; + } + else + { + /* Reset the Update Disable Bit */ + TIMx->CR1 &= (uint16_t)~TIM_CR1_UDIS; + } +} + +/** + * @brief Configures the TIMx Update Request Interrupt source. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param TIM_UpdateSource: specifies the Update source. + * This parameter can be one of the following values: + * @arg TIM_UpdateSource_Global: Source of update is the counter + * overflow/underflow or the setting of UG bit, or an update + * generation through the slave mode controller. + * @arg TIM_UpdateSource_Regular: Source of update is counter overflow/underflow. + * @retval None + */ +void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_UPDATE_SOURCE(TIM_UpdateSource)); + + if (TIM_UpdateSource != TIM_UpdateSource_Global) + { + /* Set the URS Bit */ + TIMx->CR1 |= TIM_CR1_URS; + } + else + { + /* Reset the URS Bit */ + TIMx->CR1 &= (uint16_t)~TIM_CR1_URS; + } +} + +/** + * @brief Enables or disables TIMx peripheral Preload register on ARR. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param NewState: new state of the TIMx peripheral Preload register + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Set the ARR Preload Bit */ + TIMx->CR1 |= TIM_CR1_ARPE; + } + else + { + /* Reset the ARR Preload Bit */ + TIMx->CR1 &= (uint16_t)~TIM_CR1_ARPE; + } +} + +/** + * @brief Selects the TIMx's One Pulse Mode. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param TIM_OPMode: specifies the OPM Mode to be used. + * This parameter can be one of the following values: + * @arg TIM_OPMode_Single + * @arg TIM_OPMode_Repetitive + * @retval None + */ +void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_OPM_MODE(TIM_OPMode)); + + /* Reset the OPM Bit */ + TIMx->CR1 &= (uint16_t)~TIM_CR1_OPM; + + /* Configure the OPM Mode */ + TIMx->CR1 |= TIM_OPMode; +} + +/** + * @brief Sets the TIMx Clock Division value. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_CKD: specifies the clock division value. + * This parameter can be one of the following value: + * @arg TIM_CKD_DIV1: TDTS = Tck_tim + * @arg TIM_CKD_DIV2: TDTS = 2*Tck_tim + * @arg TIM_CKD_DIV4: TDTS = 4*Tck_tim + * @retval None + */ +void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_CKD_DIV(TIM_CKD)); + + /* Reset the CKD Bits */ + TIMx->CR1 &= (uint16_t)(~TIM_CR1_CKD); + + /* Set the CKD value */ + TIMx->CR1 |= TIM_CKD; +} + +/** + * @brief Enables or disables the specified TIM peripheral. + * @param TIMx: where x can be 1 to 14 to select the TIMx peripheral. + * @param NewState: new state of the TIMx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the TIM Counter */ + TIMx->CR1 |= TIM_CR1_CEN; + } + else + { + /* Disable the TIM Counter */ + TIMx->CR1 &= (uint16_t)~TIM_CR1_CEN; + } +} +/** + * @} + */ + +/** @defgroup TIM_Group2 Output Compare management functions + * @brief Output Compare management functions + * +@verbatim + =============================================================================== + Output Compare management functions + =============================================================================== + + =================================================================== + TIM Driver: how to use it in Output Compare Mode + =================================================================== + To use the Timer in Output Compare mode, the following steps are mandatory: + + 1. Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) function + + 2. Configure the TIM pins by configuring the corresponding GPIO pins + + 2. Configure the Time base unit as described in the first part of this driver, + if needed, else the Timer will run with the default configuration: + - Autoreload value = 0xFFFF + - Prescaler value = 0x0000 + - Counter mode = Up counting + - Clock Division = TIM_CKD_DIV1 + + 3. Fill the TIM_OCInitStruct with the desired parameters including: + - The TIM Output Compare mode: TIM_OCMode + - TIM Output State: TIM_OutputState + - TIM Pulse value: TIM_Pulse + - TIM Output Compare Polarity : TIM_OCPolarity + + 4. Call TIM_OCxInit(TIMx, &TIM_OCInitStruct) to configure the desired channel with the + corresponding configuration + + 5. Call the TIM_Cmd(ENABLE) function to enable the TIM counter. + + Note1: All other functions can be used separately to modify, if needed, + a specific feature of the Timer. + + Note2: In case of PWM mode, this function is mandatory: + TIM_OCxPreloadConfig(TIMx, TIM_OCPreload_ENABLE); + + Note3: If the corresponding interrupt or DMA request are needed, the user should: + 1. Enable the NVIC (or the DMA) to use the TIM interrupts (or DMA requests). + 2. Enable the corresponding interrupt (or DMA request) using the function + TIM_ITConfig(TIMx, TIM_IT_CCx) (or TIM_DMA_Cmd(TIMx, TIM_DMA_CCx)) + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the TIMx Channel1 according to the specified parameters in + * the TIM_OCInitStruct. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure that contains + * the configuration information for the specified TIM peripheral. + * @retval None + */ +void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); + assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= (uint16_t)~TIM_CCER_CC1E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare Mode Bits */ + tmpccmrx &= (uint16_t)~TIM_CCMR1_OC1M; + tmpccmrx &= (uint16_t)~TIM_CCMR1_CC1S; + /* Select the Output Compare Mode */ + tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= (uint16_t)~TIM_CCER_CC1P; + /* Set the Output Compare Polarity */ + tmpccer |= TIM_OCInitStruct->TIM_OCPolarity; + + /* Set the Output State */ + tmpccer |= TIM_OCInitStruct->TIM_OutputState; + + if((TIMx == TIM1) || (TIMx == TIM8)) + { + assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity)); + assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); + + /* Reset the Output N Polarity level */ + tmpccer &= (uint16_t)~TIM_CCER_CC1NP; + /* Set the Output N Polarity */ + tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity; + /* Reset the Output N State */ + tmpccer &= (uint16_t)~TIM_CCER_CC1NE; + + /* Set the Output N State */ + tmpccer |= TIM_OCInitStruct->TIM_OutputNState; + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= (uint16_t)~TIM_CR2_OIS1; + tmpcr2 &= (uint16_t)~TIM_CR2_OIS1N; + /* Set the Output Idle state */ + tmpcr2 |= TIM_OCInitStruct->TIM_OCIdleState; + /* Set the Output N Idle state */ + tmpcr2 |= TIM_OCInitStruct->TIM_OCNIdleState; + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR1 = TIM_OCInitStruct->TIM_Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Initializes the TIMx Channel2 according to the specified parameters + * in the TIM_OCInitStruct. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure that contains + * the configuration information for the specified TIM peripheral. + * @retval None + */ +void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); + assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= (uint16_t)~TIM_CCER_CC2E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= (uint16_t)~TIM_CCMR1_OC2M; + tmpccmrx &= (uint16_t)~TIM_CCMR1_CC2S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8); + + /* Reset the Output Polarity level */ + tmpccer &= (uint16_t)~TIM_CCER_CC2P; + /* Set the Output Compare Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4); + + /* Set the Output State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 4); + + if((TIMx == TIM1) || (TIMx == TIM8)) + { + assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity)); + assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); + + /* Reset the Output N Polarity level */ + tmpccer &= (uint16_t)~TIM_CCER_CC2NP; + /* Set the Output N Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4); + /* Reset the Output N State */ + tmpccer &= (uint16_t)~TIM_CCER_CC2NE; + + /* Set the Output N State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 4); + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= (uint16_t)~TIM_CR2_OIS2; + tmpcr2 &= (uint16_t)~TIM_CR2_OIS2N; + /* Set the Output Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 2); + /* Set the Output N Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 2); + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR2 = TIM_OCInitStruct->TIM_Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Initializes the TIMx Channel3 according to the specified parameters + * in the TIM_OCInitStruct. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure that contains + * the configuration information for the specified TIM peripheral. + * @retval None + */ +void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); + assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); + + /* Disable the Channel 3: Reset the CC2E Bit */ + TIMx->CCER &= (uint16_t)~TIM_CCER_CC3E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= (uint16_t)~TIM_CCMR2_OC3M; + tmpccmrx &= (uint16_t)~TIM_CCMR2_CC3S; + /* Select the Output Compare Mode */ + tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= (uint16_t)~TIM_CCER_CC3P; + /* Set the Output Compare Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 8); + + /* Set the Output State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 8); + + if((TIMx == TIM1) || (TIMx == TIM8)) + { + assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity)); + assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); + + /* Reset the Output N Polarity level */ + tmpccer &= (uint16_t)~TIM_CCER_CC3NP; + /* Set the Output N Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8); + /* Reset the Output N State */ + tmpccer &= (uint16_t)~TIM_CCER_CC3NE; + + /* Set the Output N State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 8); + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= (uint16_t)~TIM_CR2_OIS3; + tmpcr2 &= (uint16_t)~TIM_CR2_OIS3N; + /* Set the Output Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 4); + /* Set the Output N Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 4); + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Initializes the TIMx Channel4 according to the specified parameters + * in the TIM_OCInitStruct. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure that contains + * the configuration information for the specified TIM peripheral. + * @retval None + */ +void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); + assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= (uint16_t)~TIM_CCER_CC4E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= (uint16_t)~TIM_CCMR2_OC4M; + tmpccmrx &= (uint16_t)~TIM_CCMR2_CC4S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8); + + /* Reset the Output Polarity level */ + tmpccer &= (uint16_t)~TIM_CCER_CC4P; + /* Set the Output Compare Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 12); + + /* Set the Output State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 12); + + if((TIMx == TIM1) || (TIMx == TIM8)) + { + assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); + /* Reset the Output Compare IDLE State */ + tmpcr2 &=(uint16_t) ~TIM_CR2_OIS4; + /* Set the Output Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6); + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Fills each TIM_OCInitStruct member with its default value. + * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure which will + * be initialized. + * @retval None + */ +void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + /* Set the default configuration */ + TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing; + TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable; + TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable; + TIM_OCInitStruct->TIM_Pulse = 0x00000000; + TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High; + TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High; + TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset; + TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset; +} + +/** + * @brief Selects the TIM Output Compare Mode. + * @note This function disables the selected channel before changing the Output + * Compare Mode. If needed, user has to enable this channel using + * TIM_CCxCmd() and TIM_CCxNCmd() functions. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_Channel: specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_Channel_1: TIM Channel 1 + * @arg TIM_Channel_2: TIM Channel 2 + * @arg TIM_Channel_3: TIM Channel 3 + * @arg TIM_Channel_4: TIM Channel 4 + * @param TIM_OCMode: specifies the TIM Output Compare Mode. + * This parameter can be one of the following values: + * @arg TIM_OCMode_Timing + * @arg TIM_OCMode_Active + * @arg TIM_OCMode_Toggle + * @arg TIM_OCMode_PWM1 + * @arg TIM_OCMode_PWM2 + * @arg TIM_ForcedAction_Active + * @arg TIM_ForcedAction_InActive + * @retval None + */ +void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode) +{ + uint32_t tmp = 0; + uint16_t tmp1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_CHANNEL(TIM_Channel)); + assert_param(IS_TIM_OCM(TIM_OCMode)); + + tmp = (uint32_t) TIMx; + tmp += CCMR_OFFSET; + + tmp1 = CCER_CCE_SET << (uint16_t)TIM_Channel; + + /* Disable the Channel: Reset the CCxE Bit */ + TIMx->CCER &= (uint16_t) ~tmp1; + + if((TIM_Channel == TIM_Channel_1) ||(TIM_Channel == TIM_Channel_3)) + { + tmp += (TIM_Channel>>1); + + /* Reset the OCxM bits in the CCMRx register */ + *(__IO uint32_t *) tmp &= CCMR_OC13M_MASK; + + /* Configure the OCxM bits in the CCMRx register */ + *(__IO uint32_t *) tmp |= TIM_OCMode; + } + else + { + tmp += (uint16_t)(TIM_Channel - (uint16_t)4)>> (uint16_t)1; + + /* Reset the OCxM bits in the CCMRx register */ + *(__IO uint32_t *) tmp &= CCMR_OC24M_MASK; + + /* Configure the OCxM bits in the CCMRx register */ + *(__IO uint32_t *) tmp |= (uint16_t)(TIM_OCMode << 8); + } +} + +/** + * @brief Sets the TIMx Capture Compare1 Register value + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param Compare1: specifies the Capture Compare1 register new value. + * @retval None + */ +void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + + /* Set the Capture Compare1 Register value */ + TIMx->CCR1 = Compare1; +} + +/** + * @brief Sets the TIMx Capture Compare2 Register value + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param Compare2: specifies the Capture Compare2 register new value. + * @retval None + */ +void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + + /* Set the Capture Compare2 Register value */ + TIMx->CCR2 = Compare2; +} + +/** + * @brief Sets the TIMx Capture Compare3 Register value + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param Compare3: specifies the Capture Compare3 register new value. + * @retval None + */ +void TIM_SetCompare3(TIM_TypeDef* TIMx, uint32_t Compare3) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + + /* Set the Capture Compare3 Register value */ + TIMx->CCR3 = Compare3; +} + +/** + * @brief Sets the TIMx Capture Compare4 Register value + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param Compare4: specifies the Capture Compare4 register new value. + * @retval None + */ +void TIM_SetCompare4(TIM_TypeDef* TIMx, uint32_t Compare4) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + + /* Set the Capture Compare4 Register value */ + TIMx->CCR4 = Compare4; +} + +/** + * @brief Forces the TIMx output 1 waveform to active or inactive level. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform. + * This parameter can be one of the following values: + * @arg TIM_ForcedAction_Active: Force active level on OC1REF + * @arg TIM_ForcedAction_InActive: Force inactive level on OC1REF. + * @retval None + */ +void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); + tmpccmr1 = TIMx->CCMR1; + + /* Reset the OC1M Bits */ + tmpccmr1 &= (uint16_t)~TIM_CCMR1_OC1M; + + /* Configure The Forced output Mode */ + tmpccmr1 |= TIM_ForcedAction; + + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** + * @brief Forces the TIMx output 2 waveform to active or inactive level. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform. + * This parameter can be one of the following values: + * @arg TIM_ForcedAction_Active: Force active level on OC2REF + * @arg TIM_ForcedAction_InActive: Force inactive level on OC2REF. + * @retval None + */ +void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); + tmpccmr1 = TIMx->CCMR1; + + /* Reset the OC2M Bits */ + tmpccmr1 &= (uint16_t)~TIM_CCMR1_OC2M; + + /* Configure The Forced output Mode */ + tmpccmr1 |= (uint16_t)(TIM_ForcedAction << 8); + + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** + * @brief Forces the TIMx output 3 waveform to active or inactive level. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform. + * This parameter can be one of the following values: + * @arg TIM_ForcedAction_Active: Force active level on OC3REF + * @arg TIM_ForcedAction_InActive: Force inactive level on OC3REF. + * @retval None + */ +void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); + + tmpccmr2 = TIMx->CCMR2; + + /* Reset the OC1M Bits */ + tmpccmr2 &= (uint16_t)~TIM_CCMR2_OC3M; + + /* Configure The Forced output Mode */ + tmpccmr2 |= TIM_ForcedAction; + + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** + * @brief Forces the TIMx output 4 waveform to active or inactive level. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform. + * This parameter can be one of the following values: + * @arg TIM_ForcedAction_Active: Force active level on OC4REF + * @arg TIM_ForcedAction_InActive: Force inactive level on OC4REF. + * @retval None + */ +void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); + tmpccmr2 = TIMx->CCMR2; + + /* Reset the OC2M Bits */ + tmpccmr2 &= (uint16_t)~TIM_CCMR2_OC4M; + + /* Configure The Forced output Mode */ + tmpccmr2 |= (uint16_t)(TIM_ForcedAction << 8); + + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** + * @brief Enables or disables the TIMx peripheral Preload register on CCR1. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_OCPreload: new state of the TIMx peripheral Preload register + * This parameter can be one of the following values: + * @arg TIM_OCPreload_Enable + * @arg TIM_OCPreload_Disable + * @retval None + */ +void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); + + tmpccmr1 = TIMx->CCMR1; + + /* Reset the OC1PE Bit */ + tmpccmr1 &= (uint16_t)(~TIM_CCMR1_OC1PE); + + /* Enable or Disable the Output Compare Preload feature */ + tmpccmr1 |= TIM_OCPreload; + + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** + * @brief Enables or disables the TIMx peripheral Preload register on CCR2. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_OCPreload: new state of the TIMx peripheral Preload register + * This parameter can be one of the following values: + * @arg TIM_OCPreload_Enable + * @arg TIM_OCPreload_Disable + * @retval None + */ +void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); + + tmpccmr1 = TIMx->CCMR1; + + /* Reset the OC2PE Bit */ + tmpccmr1 &= (uint16_t)(~TIM_CCMR1_OC2PE); + + /* Enable or Disable the Output Compare Preload feature */ + tmpccmr1 |= (uint16_t)(TIM_OCPreload << 8); + + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** + * @brief Enables or disables the TIMx peripheral Preload register on CCR3. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCPreload: new state of the TIMx peripheral Preload register + * This parameter can be one of the following values: + * @arg TIM_OCPreload_Enable + * @arg TIM_OCPreload_Disable + * @retval None + */ +void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); + + tmpccmr2 = TIMx->CCMR2; + + /* Reset the OC3PE Bit */ + tmpccmr2 &= (uint16_t)(~TIM_CCMR2_OC3PE); + + /* Enable or Disable the Output Compare Preload feature */ + tmpccmr2 |= TIM_OCPreload; + + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** + * @brief Enables or disables the TIMx peripheral Preload register on CCR4. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCPreload: new state of the TIMx peripheral Preload register + * This parameter can be one of the following values: + * @arg TIM_OCPreload_Enable + * @arg TIM_OCPreload_Disable + * @retval None + */ +void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); + + tmpccmr2 = TIMx->CCMR2; + + /* Reset the OC4PE Bit */ + tmpccmr2 &= (uint16_t)(~TIM_CCMR2_OC4PE); + + /* Enable or Disable the Output Compare Preload feature */ + tmpccmr2 |= (uint16_t)(TIM_OCPreload << 8); + + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** + * @brief Configures the TIMx Output Compare 1 Fast feature. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_OCFast: new state of the Output Compare Fast Enable Bit. + * This parameter can be one of the following values: + * @arg TIM_OCFast_Enable: TIM output compare fast enable + * @arg TIM_OCFast_Disable: TIM output compare fast disable + * @retval None + */ +void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); + + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = TIMx->CCMR1; + + /* Reset the OC1FE Bit */ + tmpccmr1 &= (uint16_t)~TIM_CCMR1_OC1FE; + + /* Enable or Disable the Output Compare Fast Bit */ + tmpccmr1 |= TIM_OCFast; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmr1; +} + +/** + * @brief Configures the TIMx Output Compare 2 Fast feature. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_OCFast: new state of the Output Compare Fast Enable Bit. + * This parameter can be one of the following values: + * @arg TIM_OCFast_Enable: TIM output compare fast enable + * @arg TIM_OCFast_Disable: TIM output compare fast disable + * @retval None + */ +void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); + + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = TIMx->CCMR1; + + /* Reset the OC2FE Bit */ + tmpccmr1 &= (uint16_t)(~TIM_CCMR1_OC2FE); + + /* Enable or Disable the Output Compare Fast Bit */ + tmpccmr1 |= (uint16_t)(TIM_OCFast << 8); + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmr1; +} + +/** + * @brief Configures the TIMx Output Compare 3 Fast feature. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCFast: new state of the Output Compare Fast Enable Bit. + * This parameter can be one of the following values: + * @arg TIM_OCFast_Enable: TIM output compare fast enable + * @arg TIM_OCFast_Disable: TIM output compare fast disable + * @retval None + */ +void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); + + /* Get the TIMx CCMR2 register value */ + tmpccmr2 = TIMx->CCMR2; + + /* Reset the OC3FE Bit */ + tmpccmr2 &= (uint16_t)~TIM_CCMR2_OC3FE; + + /* Enable or Disable the Output Compare Fast Bit */ + tmpccmr2 |= TIM_OCFast; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmr2; +} + +/** + * @brief Configures the TIMx Output Compare 4 Fast feature. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCFast: new state of the Output Compare Fast Enable Bit. + * This parameter can be one of the following values: + * @arg TIM_OCFast_Enable: TIM output compare fast enable + * @arg TIM_OCFast_Disable: TIM output compare fast disable + * @retval None + */ +void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); + + /* Get the TIMx CCMR2 register value */ + tmpccmr2 = TIMx->CCMR2; + + /* Reset the OC4FE Bit */ + tmpccmr2 &= (uint16_t)(~TIM_CCMR2_OC4FE); + + /* Enable or Disable the Output Compare Fast Bit */ + tmpccmr2 |= (uint16_t)(TIM_OCFast << 8); + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmr2; +} + +/** + * @brief Clears or safeguards the OCREF1 signal on an external event + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_OCClear: new state of the Output Compare Clear Enable Bit. + * This parameter can be one of the following values: + * @arg TIM_OCClear_Enable: TIM Output clear enable + * @arg TIM_OCClear_Disable: TIM Output clear disable + * @retval None + */ +void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); + + tmpccmr1 = TIMx->CCMR1; + + /* Reset the OC1CE Bit */ + tmpccmr1 &= (uint16_t)~TIM_CCMR1_OC1CE; + + /* Enable or Disable the Output Compare Clear Bit */ + tmpccmr1 |= TIM_OCClear; + + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** + * @brief Clears or safeguards the OCREF2 signal on an external event + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_OCClear: new state of the Output Compare Clear Enable Bit. + * This parameter can be one of the following values: + * @arg TIM_OCClear_Enable: TIM Output clear enable + * @arg TIM_OCClear_Disable: TIM Output clear disable + * @retval None + */ +void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); + + tmpccmr1 = TIMx->CCMR1; + + /* Reset the OC2CE Bit */ + tmpccmr1 &= (uint16_t)~TIM_CCMR1_OC2CE; + + /* Enable or Disable the Output Compare Clear Bit */ + tmpccmr1 |= (uint16_t)(TIM_OCClear << 8); + + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** + * @brief Clears or safeguards the OCREF3 signal on an external event + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCClear: new state of the Output Compare Clear Enable Bit. + * This parameter can be one of the following values: + * @arg TIM_OCClear_Enable: TIM Output clear enable + * @arg TIM_OCClear_Disable: TIM Output clear disable + * @retval None + */ +void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); + + tmpccmr2 = TIMx->CCMR2; + + /* Reset the OC3CE Bit */ + tmpccmr2 &= (uint16_t)~TIM_CCMR2_OC3CE; + + /* Enable or Disable the Output Compare Clear Bit */ + tmpccmr2 |= TIM_OCClear; + + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** + * @brief Clears or safeguards the OCREF4 signal on an external event + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCClear: new state of the Output Compare Clear Enable Bit. + * This parameter can be one of the following values: + * @arg TIM_OCClear_Enable: TIM Output clear enable + * @arg TIM_OCClear_Disable: TIM Output clear disable + * @retval None + */ +void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); + + tmpccmr2 = TIMx->CCMR2; + + /* Reset the OC4CE Bit */ + tmpccmr2 &= (uint16_t)~TIM_CCMR2_OC4CE; + + /* Enable or Disable the Output Compare Clear Bit */ + tmpccmr2 |= (uint16_t)(TIM_OCClear << 8); + + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** + * @brief Configures the TIMx channel 1 polarity. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_OCPolarity: specifies the OC1 Polarity + * This parameter can be one of the following values: + * @arg TIM_OCPolarity_High: Output Compare active high + * @arg TIM_OCPolarity_Low: Output Compare active low + * @retval None + */ +void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); + + tmpccer = TIMx->CCER; + + /* Set or Reset the CC1P Bit */ + tmpccer &= (uint16_t)(~TIM_CCER_CC1P); + tmpccer |= TIM_OCPolarity; + + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Configures the TIMx Channel 1N polarity. + * @param TIMx: where x can be 1 or 8 to select the TIM peripheral. + * @param TIM_OCNPolarity: specifies the OC1N Polarity + * This parameter can be one of the following values: + * @arg TIM_OCNPolarity_High: Output Compare active high + * @arg TIM_OCNPolarity_Low: Output Compare active low + * @retval None + */ +void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity) +{ + uint16_t tmpccer = 0; + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); + + tmpccer = TIMx->CCER; + + /* Set or Reset the CC1NP Bit */ + tmpccer &= (uint16_t)~TIM_CCER_CC1NP; + tmpccer |= TIM_OCNPolarity; + + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Configures the TIMx channel 2 polarity. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_OCPolarity: specifies the OC2 Polarity + * This parameter can be one of the following values: + * @arg TIM_OCPolarity_High: Output Compare active high + * @arg TIM_OCPolarity_Low: Output Compare active low + * @retval None + */ +void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); + + tmpccer = TIMx->CCER; + + /* Set or Reset the CC2P Bit */ + tmpccer &= (uint16_t)(~TIM_CCER_CC2P); + tmpccer |= (uint16_t)(TIM_OCPolarity << 4); + + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Configures the TIMx Channel 2N polarity. + * @param TIMx: where x can be 1 or 8 to select the TIM peripheral. + * @param TIM_OCNPolarity: specifies the OC2N Polarity + * This parameter can be one of the following values: + * @arg TIM_OCNPolarity_High: Output Compare active high + * @arg TIM_OCNPolarity_Low: Output Compare active low + * @retval None + */ +void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); + + tmpccer = TIMx->CCER; + + /* Set or Reset the CC2NP Bit */ + tmpccer &= (uint16_t)~TIM_CCER_CC2NP; + tmpccer |= (uint16_t)(TIM_OCNPolarity << 4); + + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Configures the TIMx channel 3 polarity. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCPolarity: specifies the OC3 Polarity + * This parameter can be one of the following values: + * @arg TIM_OCPolarity_High: Output Compare active high + * @arg TIM_OCPolarity_Low: Output Compare active low + * @retval None + */ +void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); + + tmpccer = TIMx->CCER; + + /* Set or Reset the CC3P Bit */ + tmpccer &= (uint16_t)~TIM_CCER_CC3P; + tmpccer |= (uint16_t)(TIM_OCPolarity << 8); + + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Configures the TIMx Channel 3N polarity. + * @param TIMx: where x can be 1 or 8 to select the TIM peripheral. + * @param TIM_OCNPolarity: specifies the OC3N Polarity + * This parameter can be one of the following values: + * @arg TIM_OCNPolarity_High: Output Compare active high + * @arg TIM_OCNPolarity_Low: Output Compare active low + * @retval None + */ +void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); + + tmpccer = TIMx->CCER; + + /* Set or Reset the CC3NP Bit */ + tmpccer &= (uint16_t)~TIM_CCER_CC3NP; + tmpccer |= (uint16_t)(TIM_OCNPolarity << 8); + + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Configures the TIMx channel 4 polarity. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_OCPolarity: specifies the OC4 Polarity + * This parameter can be one of the following values: + * @arg TIM_OCPolarity_High: Output Compare active high + * @arg TIM_OCPolarity_Low: Output Compare active low + * @retval None + */ +void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); + + tmpccer = TIMx->CCER; + + /* Set or Reset the CC4P Bit */ + tmpccer &= (uint16_t)~TIM_CCER_CC4P; + tmpccer |= (uint16_t)(TIM_OCPolarity << 12); + + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Enables or disables the TIM Capture Compare Channel x. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_Channel: specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_Channel_1: TIM Channel 1 + * @arg TIM_Channel_2: TIM Channel 2 + * @arg TIM_Channel_3: TIM Channel 3 + * @arg TIM_Channel_4: TIM Channel 4 + * @param TIM_CCx: specifies the TIM Channel CCxE bit new state. + * This parameter can be: TIM_CCx_Enable or TIM_CCx_Disable. + * @retval None + */ +void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx) +{ + uint16_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_CHANNEL(TIM_Channel)); + assert_param(IS_TIM_CCX(TIM_CCx)); + + tmp = CCER_CCE_SET << TIM_Channel; + + /* Reset the CCxE Bit */ + TIMx->CCER &= (uint16_t)~ tmp; + + /* Set or reset the CCxE Bit */ + TIMx->CCER |= (uint16_t)(TIM_CCx << TIM_Channel); +} + +/** + * @brief Enables or disables the TIM Capture Compare Channel xN. + * @param TIMx: where x can be 1 or 8 to select the TIM peripheral. + * @param TIM_Channel: specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_Channel_1: TIM Channel 1 + * @arg TIM_Channel_2: TIM Channel 2 + * @arg TIM_Channel_3: TIM Channel 3 + * @param TIM_CCxN: specifies the TIM Channel CCxNE bit new state. + * This parameter can be: TIM_CCxN_Enable or TIM_CCxN_Disable. + * @retval None + */ +void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN) +{ + uint16_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_COMPLEMENTARY_CHANNEL(TIM_Channel)); + assert_param(IS_TIM_CCXN(TIM_CCxN)); + + tmp = CCER_CCNE_SET << TIM_Channel; + + /* Reset the CCxNE Bit */ + TIMx->CCER &= (uint16_t) ~tmp; + + /* Set or reset the CCxNE Bit */ + TIMx->CCER |= (uint16_t)(TIM_CCxN << TIM_Channel); +} +/** + * @} + */ + +/** @defgroup TIM_Group3 Input Capture management functions + * @brief Input Capture management functions + * +@verbatim + =============================================================================== + Input Capture management functions + =============================================================================== + + =================================================================== + TIM Driver: how to use it in Input Capture Mode + =================================================================== + To use the Timer in Input Capture mode, the following steps are mandatory: + + 1. Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) function + + 2. Configure the TIM pins by configuring the corresponding GPIO pins + + 2. Configure the Time base unit as described in the first part of this driver, + if needed, else the Timer will run with the default configuration: + - Autoreload value = 0xFFFF + - Prescaler value = 0x0000 + - Counter mode = Up counting + - Clock Division = TIM_CKD_DIV1 + + 3. Fill the TIM_ICInitStruct with the desired parameters including: + - TIM Channel: TIM_Channel + - TIM Input Capture polarity: TIM_ICPolarity + - TIM Input Capture selection: TIM_ICSelection + - TIM Input Capture Prescaler: TIM_ICPrescaler + - TIM Input CApture filter value: TIM_ICFilter + + 4. Call TIM_ICInit(TIMx, &TIM_ICInitStruct) to configure the desired channel with the + corresponding configuration and to measure only frequency or duty cycle of the input signal, + or, + Call TIM_PWMIConfig(TIMx, &TIM_ICInitStruct) to configure the desired channels with the + corresponding configuration and to measure the frequency and the duty cycle of the input signal + + 5. Enable the NVIC or the DMA to read the measured frequency. + + 6. Enable the corresponding interrupt (or DMA request) to read the Captured value, + using the function TIM_ITConfig(TIMx, TIM_IT_CCx) (or TIM_DMA_Cmd(TIMx, TIM_DMA_CCx)) + + 7. Call the TIM_Cmd(ENABLE) function to enable the TIM counter. + + 8. Use TIM_GetCapturex(TIMx); to read the captured value. + + Note1: All other functions can be used separately to modify, if needed, + a specific feature of the Timer. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the TIM peripheral according to the specified parameters + * in the TIM_ICInitStruct. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure that contains + * the configuration information for the specified TIM peripheral. + * @retval None + */ +void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_IC_POLARITY(TIM_ICInitStruct->TIM_ICPolarity)); + assert_param(IS_TIM_IC_SELECTION(TIM_ICInitStruct->TIM_ICSelection)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICInitStruct->TIM_ICPrescaler)); + assert_param(IS_TIM_IC_FILTER(TIM_ICInitStruct->TIM_ICFilter)); + + if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) + { + /* TI1 Configuration */ + TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2) + { + /* TI2 Configuration */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3) + { + /* TI3 Configuration */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + TI3_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else + { + /* TI4 Configuration */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } +} + +/** + * @brief Fills each TIM_ICInitStruct member with its default value. + * @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure which will + * be initialized. + * @retval None + */ +void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct) +{ + /* Set the default configuration */ + TIM_ICInitStruct->TIM_Channel = TIM_Channel_1; + TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising; + TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI; + TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1; + TIM_ICInitStruct->TIM_ICFilter = 0x00; +} + +/** + * @brief Configures the TIM peripheral according to the specified parameters + * in the TIM_ICInitStruct to measure an external PWM signal. + * @param TIMx: where x can be 1, 2, 3, 4, 5,8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure that contains + * the configuration information for the specified TIM peripheral. + * @retval None + */ +void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct) +{ + uint16_t icoppositepolarity = TIM_ICPolarity_Rising; + uint16_t icoppositeselection = TIM_ICSelection_DirectTI; + + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + + /* Select the Opposite Input Polarity */ + if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising) + { + icoppositepolarity = TIM_ICPolarity_Falling; + } + else + { + icoppositepolarity = TIM_ICPolarity_Rising; + } + /* Select the Opposite Input */ + if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI) + { + icoppositeselection = TIM_ICSelection_IndirectTI; + } + else + { + icoppositeselection = TIM_ICSelection_DirectTI; + } + if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) + { + /* TI1 Configuration */ + TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + /* TI2 Configuration */ + TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else + { + /* TI2 Configuration */ + TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + /* TI1 Configuration */ + TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } +} + +/** + * @brief Gets the TIMx Input Capture 1 value. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @retval Capture Compare 1 Register value. + */ +uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + + /* Get the Capture 1 Register value */ + return TIMx->CCR1; +} + +/** + * @brief Gets the TIMx Input Capture 2 value. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @retval Capture Compare 2 Register value. + */ +uint32_t TIM_GetCapture2(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + + /* Get the Capture 2 Register value */ + return TIMx->CCR2; +} + +/** + * @brief Gets the TIMx Input Capture 3 value. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @retval Capture Compare 3 Register value. + */ +uint32_t TIM_GetCapture3(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + + /* Get the Capture 3 Register value */ + return TIMx->CCR3; +} + +/** + * @brief Gets the TIMx Input Capture 4 value. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @retval Capture Compare 4 Register value. + */ +uint32_t TIM_GetCapture4(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + + /* Get the Capture 4 Register value */ + return TIMx->CCR4; +} + +/** + * @brief Sets the TIMx Input Capture 1 prescaler. + * @param TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral. + * @param TIM_ICPSC: specifies the Input Capture1 prescaler new value. + * This parameter can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events + * @retval None + */ +void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); + + /* Reset the IC1PSC Bits */ + TIMx->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC; + + /* Set the IC1PSC value */ + TIMx->CCMR1 |= TIM_ICPSC; +} + +/** + * @brief Sets the TIMx Input Capture 2 prescaler. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_ICPSC: specifies the Input Capture2 prescaler new value. + * This parameter can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events + * @retval None + */ +void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); + + /* Reset the IC2PSC Bits */ + TIMx->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC; + + /* Set the IC2PSC value */ + TIMx->CCMR1 |= (uint16_t)(TIM_ICPSC << 8); +} + +/** + * @brief Sets the TIMx Input Capture 3 prescaler. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_ICPSC: specifies the Input Capture3 prescaler new value. + * This parameter can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events + * @retval None + */ +void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); + + /* Reset the IC3PSC Bits */ + TIMx->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC; + + /* Set the IC3PSC value */ + TIMx->CCMR2 |= TIM_ICPSC; +} + +/** + * @brief Sets the TIMx Input Capture 4 prescaler. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_ICPSC: specifies the Input Capture4 prescaler new value. + * This parameter can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events + * @retval None + */ +void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); + + /* Reset the IC4PSC Bits */ + TIMx->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC; + + /* Set the IC4PSC value */ + TIMx->CCMR2 |= (uint16_t)(TIM_ICPSC << 8); +} +/** + * @} + */ + +/** @defgroup TIM_Group4 Advanced-control timers (TIM1 and TIM8) specific features + * @brief Advanced-control timers (TIM1 and TIM8) specific features + * +@verbatim + =============================================================================== + Advanced-control timers (TIM1 and TIM8) specific features + =============================================================================== + + =================================================================== + TIM Driver: how to use the Break feature + =================================================================== + After configuring the Timer channel(s) in the appropriate Output Compare mode: + + 1. Fill the TIM_BDTRInitStruct with the desired parameters for the Timer + Break Polarity, dead time, Lock level, the OSSI/OSSR State and the + AOE(automatic output enable). + + 2. Call TIM_BDTRConfig(TIMx, &TIM_BDTRInitStruct) to configure the Timer + + 3. Enable the Main Output using TIM_CtrlPWMOutputs(TIM1, ENABLE) + + 4. Once the break even occurs, the Timer's output signals are put in reset + state or in a known state (according to the configuration made in + TIM_BDTRConfig() function). + +@endverbatim + * @{ + */ + +/** + * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State + * and the AOE(automatic output enable). + * @param TIMx: where x can be 1 or 8 to select the TIM + * @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure that + * contains the BDTR Register configuration information for the TIM peripheral. + * @retval None + */ +void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OSSR_STATE(TIM_BDTRInitStruct->TIM_OSSRState)); + assert_param(IS_TIM_OSSI_STATE(TIM_BDTRInitStruct->TIM_OSSIState)); + assert_param(IS_TIM_LOCK_LEVEL(TIM_BDTRInitStruct->TIM_LOCKLevel)); + assert_param(IS_TIM_BREAK_STATE(TIM_BDTRInitStruct->TIM_Break)); + assert_param(IS_TIM_BREAK_POLARITY(TIM_BDTRInitStruct->TIM_BreakPolarity)); + assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(TIM_BDTRInitStruct->TIM_AutomaticOutput)); + + /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, + the OSSI State, the dead time value and the Automatic Output Enable Bit */ + TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState | + TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime | + TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity | + TIM_BDTRInitStruct->TIM_AutomaticOutput; +} + +/** + * @brief Fills each TIM_BDTRInitStruct member with its default value. + * @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure which + * will be initialized. + * @retval None + */ +void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct) +{ + /* Set the default configuration */ + TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable; + TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable; + TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF; + TIM_BDTRInitStruct->TIM_DeadTime = 0x00; + TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable; + TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low; + TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; +} + +/** + * @brief Enables or disables the TIM peripheral Main Outputs. + * @param TIMx: where x can be 1 or 8 to select the TIMx peripheral. + * @param NewState: new state of the TIM peripheral Main Outputs. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the TIM Main Output */ + TIMx->BDTR |= TIM_BDTR_MOE; + } + else + { + /* Disable the TIM Main Output */ + TIMx->BDTR &= (uint16_t)~TIM_BDTR_MOE; + } +} + +/** + * @brief Selects the TIM peripheral Commutation event. + * @param TIMx: where x can be 1 or 8 to select the TIMx peripheral + * @param NewState: new state of the Commutation event. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Set the COM Bit */ + TIMx->CR2 |= TIM_CR2_CCUS; + } + else + { + /* Reset the COM Bit */ + TIMx->CR2 &= (uint16_t)~TIM_CR2_CCUS; + } +} + +/** + * @brief Sets or Resets the TIM peripheral Capture Compare Preload Control bit. + * @param TIMx: where x can be 1 or 8 to select the TIMx peripheral + * @param NewState: new state of the Capture Compare Preload Control bit + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Set the CCPC Bit */ + TIMx->CR2 |= TIM_CR2_CCPC; + } + else + { + /* Reset the CCPC Bit */ + TIMx->CR2 &= (uint16_t)~TIM_CR2_CCPC; + } +} +/** + * @} + */ + +/** @defgroup TIM_Group5 Interrupts DMA and flags management functions + * @brief Interrupts, DMA and flags management functions + * +@verbatim + =============================================================================== + Interrupts, DMA and flags management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified TIM interrupts. + * @param TIMx: where x can be 1 to 14 to select the TIMx peripheral. + * @param TIM_IT: specifies the TIM interrupts sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg TIM_IT_Update: TIM update Interrupt source + * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source + * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source + * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source + * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source + * @arg TIM_IT_COM: TIM Commutation Interrupt source + * @arg TIM_IT_Trigger: TIM Trigger Interrupt source + * @arg TIM_IT_Break: TIM Break Interrupt source + * + * @note For TIM6 and TIM7 only the parameter TIM_IT_Update can be used + * @note For TIM9 and TIM12 only one of the following parameters can be used: TIM_IT_Update, + * TIM_IT_CC1, TIM_IT_CC2 or TIM_IT_Trigger. + * @note For TIM10, TIM11, TIM13 and TIM14 only one of the following parameters can + * be used: TIM_IT_Update or TIM_IT_CC1 + * @note TIM_IT_COM and TIM_IT_Break can be used only with TIM1 and TIM8 + * + * @param NewState: new state of the TIM interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_IT(TIM_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the Interrupt sources */ + TIMx->DIER |= TIM_IT; + } + else + { + /* Disable the Interrupt sources */ + TIMx->DIER &= (uint16_t)~TIM_IT; + } +} + +/** + * @brief Configures the TIMx event to be generate by software. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param TIM_EventSource: specifies the event source. + * This parameter can be one or more of the following values: + * @arg TIM_EventSource_Update: Timer update Event source + * @arg TIM_EventSource_CC1: Timer Capture Compare 1 Event source + * @arg TIM_EventSource_CC2: Timer Capture Compare 2 Event source + * @arg TIM_EventSource_CC3: Timer Capture Compare 3 Event source + * @arg TIM_EventSource_CC4: Timer Capture Compare 4 Event source + * @arg TIM_EventSource_COM: Timer COM event source + * @arg TIM_EventSource_Trigger: Timer Trigger Event source + * @arg TIM_EventSource_Break: Timer Break event source + * + * @note TIM6 and TIM7 can only generate an update event. + * @note TIM_EventSource_COM and TIM_EventSource_Break are used only with TIM1 and TIM8. + * + * @retval None + */ +void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_EVENT_SOURCE(TIM_EventSource)); + + /* Set the event sources */ + TIMx->EGR = TIM_EventSource; +} + +/** + * @brief Checks whether the specified TIM flag is set or not. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param TIM_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg TIM_FLAG_Update: TIM update Flag + * @arg TIM_FLAG_CC1: TIM Capture Compare 1 Flag + * @arg TIM_FLAG_CC2: TIM Capture Compare 2 Flag + * @arg TIM_FLAG_CC3: TIM Capture Compare 3 Flag + * @arg TIM_FLAG_CC4: TIM Capture Compare 4 Flag + * @arg TIM_FLAG_COM: TIM Commutation Flag + * @arg TIM_FLAG_Trigger: TIM Trigger Flag + * @arg TIM_FLAG_Break: TIM Break Flag + * @arg TIM_FLAG_CC1OF: TIM Capture Compare 1 over capture Flag + * @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 over capture Flag + * @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 over capture Flag + * @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 over capture Flag + * + * @note TIM6 and TIM7 can have only one update flag. + * @note TIM_FLAG_COM and TIM_FLAG_Break are used only with TIM1 and TIM8. + * + * @retval The new state of TIM_FLAG (SET or RESET). + */ +FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) +{ + ITStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_GET_FLAG(TIM_FLAG)); + + + if ((TIMx->SR & TIM_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the TIMx's pending flags. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param TIM_FLAG: specifies the flag bit to clear. + * This parameter can be any combination of the following values: + * @arg TIM_FLAG_Update: TIM update Flag + * @arg TIM_FLAG_CC1: TIM Capture Compare 1 Flag + * @arg TIM_FLAG_CC2: TIM Capture Compare 2 Flag + * @arg TIM_FLAG_CC3: TIM Capture Compare 3 Flag + * @arg TIM_FLAG_CC4: TIM Capture Compare 4 Flag + * @arg TIM_FLAG_COM: TIM Commutation Flag + * @arg TIM_FLAG_Trigger: TIM Trigger Flag + * @arg TIM_FLAG_Break: TIM Break Flag + * @arg TIM_FLAG_CC1OF: TIM Capture Compare 1 over capture Flag + * @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 over capture Flag + * @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 over capture Flag + * @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 over capture Flag + * + * @note TIM6 and TIM7 can have only one update flag. + * @note TIM_FLAG_COM and TIM_FLAG_Break are used only with TIM1 and TIM8. + * + * @retval None + */ +void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Clear the flags */ + TIMx->SR = (uint16_t)~TIM_FLAG; +} + +/** + * @brief Checks whether the TIM interrupt has occurred or not. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param TIM_IT: specifies the TIM interrupt source to check. + * This parameter can be one of the following values: + * @arg TIM_IT_Update: TIM update Interrupt source + * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source + * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source + * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source + * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source + * @arg TIM_IT_COM: TIM Commutation Interrupt source + * @arg TIM_IT_Trigger: TIM Trigger Interrupt source + * @arg TIM_IT_Break: TIM Break Interrupt source + * + * @note TIM6 and TIM7 can generate only an update interrupt. + * @note TIM_IT_COM and TIM_IT_Break are used only with TIM1 and TIM8. + * + * @retval The new state of the TIM_IT(SET or RESET). + */ +ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT) +{ + ITStatus bitstatus = RESET; + uint16_t itstatus = 0x0, itenable = 0x0; + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_GET_IT(TIM_IT)); + + itstatus = TIMx->SR & TIM_IT; + + itenable = TIMx->DIER & TIM_IT; + if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the TIMx's interrupt pending bits. + * @param TIMx: where x can be 1 to 14 to select the TIM peripheral. + * @param TIM_IT: specifies the pending bit to clear. + * This parameter can be any combination of the following values: + * @arg TIM_IT_Update: TIM1 update Interrupt source + * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source + * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source + * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source + * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source + * @arg TIM_IT_COM: TIM Commutation Interrupt source + * @arg TIM_IT_Trigger: TIM Trigger Interrupt source + * @arg TIM_IT_Break: TIM Break Interrupt source + * + * @note TIM6 and TIM7 can generate only an update interrupt. + * @note TIM_IT_COM and TIM_IT_Break are used only with TIM1 and TIM8. + * + * @retval None + */ +void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Clear the IT pending Bit */ + TIMx->SR = (uint16_t)~TIM_IT; +} + +/** + * @brief Configures the TIMx's DMA interface. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_DMABase: DMA Base address. + * This parameter can be one of the following values: + * @arg TIM_DMABase_CR1 + * @arg TIM_DMABase_CR2 + * @arg TIM_DMABase_SMCR + * @arg TIM_DMABase_DIER + * @arg TIM1_DMABase_SR + * @arg TIM_DMABase_EGR + * @arg TIM_DMABase_CCMR1 + * @arg TIM_DMABase_CCMR2 + * @arg TIM_DMABase_CCER + * @arg TIM_DMABase_CNT + * @arg TIM_DMABase_PSC + * @arg TIM_DMABase_ARR + * @arg TIM_DMABase_RCR + * @arg TIM_DMABase_CCR1 + * @arg TIM_DMABase_CCR2 + * @arg TIM_DMABase_CCR3 + * @arg TIM_DMABase_CCR4 + * @arg TIM_DMABase_BDTR + * @arg TIM_DMABase_DCR + * @param TIM_DMABurstLength: DMA Burst length. This parameter can be one value + * between: TIM_DMABurstLength_1Transfer and TIM_DMABurstLength_18Transfers. + * @retval None + */ +void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_DMA_BASE(TIM_DMABase)); + assert_param(IS_TIM_DMA_LENGTH(TIM_DMABurstLength)); + + /* Set the DMA Base and the DMA Burst Length */ + TIMx->DCR = TIM_DMABase | TIM_DMABurstLength; +} + +/** + * @brief Enables or disables the TIMx's DMA Requests. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the TIM peripheral. + * @param TIM_DMASource: specifies the DMA Request sources. + * This parameter can be any combination of the following values: + * @arg TIM_DMA_Update: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_Trigger: TIM Trigger DMA source + * @param NewState: new state of the DMA Request sources. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST5_PERIPH(TIMx)); + assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the DMA sources */ + TIMx->DIER |= TIM_DMASource; + } + else + { + /* Disable the DMA sources */ + TIMx->DIER &= (uint16_t)~TIM_DMASource; + } +} + +/** + * @brief Selects the TIMx peripheral Capture Compare DMA source. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param NewState: new state of the Capture Compare DMA source + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Set the CCDS Bit */ + TIMx->CR2 |= TIM_CR2_CCDS; + } + else + { + /* Reset the CCDS Bit */ + TIMx->CR2 &= (uint16_t)~TIM_CR2_CCDS; + } +} +/** + * @} + */ + +/** @defgroup TIM_Group6 Clocks management functions + * @brief Clocks management functions + * +@verbatim + =============================================================================== + Clocks management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Configures the TIMx internal Clock + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @retval None + */ +void TIM_InternalClockConfig(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + + /* Disable slave mode to clock the prescaler directly with the internal clock */ + TIMx->SMCR &= (uint16_t)~TIM_SMCR_SMS; +} + +/** + * @brief Configures the TIMx Internal Trigger as External Clock + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_InputTriggerSource: Trigger source. + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal Trigger 0 + * @arg TIM_TS_ITR1: Internal Trigger 1 + * @arg TIM_TS_ITR2: Internal Trigger 2 + * @arg TIM_TS_ITR3: Internal Trigger 3 + * @retval None + */ +void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_INTERNAL_TRIGGER_SELECTION(TIM_InputTriggerSource)); + + /* Select the Internal Trigger */ + TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource); + + /* Select the External clock mode1 */ + TIMx->SMCR |= TIM_SlaveMode_External1; +} + +/** + * @brief Configures the TIMx Trigger as External Clock + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13 or 14 + * to select the TIM peripheral. + * @param TIM_TIxExternalCLKSource: Trigger source. + * This parameter can be one of the following values: + * @arg TIM_TIxExternalCLK1Source_TI1ED: TI1 Edge Detector + * @arg TIM_TIxExternalCLK1Source_TI1: Filtered Timer Input 1 + * @arg TIM_TIxExternalCLK1Source_TI2: Filtered Timer Input 2 + * @param TIM_ICPolarity: specifies the TIx Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPolarity_Rising + * @arg TIM_ICPolarity_Falling + * @param ICFilter: specifies the filter value. + * This parameter must be a value between 0x0 and 0xF. + * @retval None + */ +void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, + uint16_t TIM_ICPolarity, uint16_t ICFilter) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_IC_POLARITY(TIM_ICPolarity)); + assert_param(IS_TIM_IC_FILTER(ICFilter)); + + /* Configure the Timer Input Clock Source */ + if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2) + { + TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); + } + else + { + TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); + } + /* Select the Trigger source */ + TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource); + /* Select the External clock mode1 */ + TIMx->SMCR |= TIM_SlaveMode_External1; +} + +/** + * @brief Configures the External clock Mode1 + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_ExtTRGPrescaler: The external Trigger Prescaler. + * This parameter can be one of the following values: + * @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF. + * @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2. + * @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4. + * @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8. + * @param TIM_ExtTRGPolarity: The external Trigger Polarity. + * This parameter can be one of the following values: + * @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active. + * @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active. + * @param ExtTRGFilter: External Trigger Filter. + * This parameter must be a value between 0x00 and 0x0F + * @retval None + */ +void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, + uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter) +{ + uint16_t tmpsmcr = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler)); + assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity)); + assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter)); + /* Configure the ETR Clock source */ + TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + + /* Reset the SMS Bits */ + tmpsmcr &= (uint16_t)~TIM_SMCR_SMS; + + /* Select the External clock mode1 */ + tmpsmcr |= TIM_SlaveMode_External1; + + /* Select the Trigger selection : ETRF */ + tmpsmcr &= (uint16_t)~TIM_SMCR_TS; + tmpsmcr |= TIM_TS_ETRF; + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} + +/** + * @brief Configures the External clock Mode2 + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_ExtTRGPrescaler: The external Trigger Prescaler. + * This parameter can be one of the following values: + * @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF. + * @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2. + * @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4. + * @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8. + * @param TIM_ExtTRGPolarity: The external Trigger Polarity. + * This parameter can be one of the following values: + * @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active. + * @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active. + * @param ExtTRGFilter: External Trigger Filter. + * This parameter must be a value between 0x00 and 0x0F + * @retval None + */ +void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, + uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler)); + assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity)); + assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter)); + + /* Configure the ETR Clock source */ + TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); + + /* Enable the External clock mode2 */ + TIMx->SMCR |= TIM_SMCR_ECE; +} +/** + * @} + */ + +/** @defgroup TIM_Group7 Synchronization management functions + * @brief Synchronization management functions + * +@verbatim + =============================================================================== + Synchronization management functions + =============================================================================== + + =================================================================== + TIM Driver: how to use it in synchronization Mode + =================================================================== + Case of two/several Timers + ************************** + 1. Configure the Master Timers using the following functions: + - void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource); + - void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode); + 2. Configure the Slave Timers using the following functions: + - void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); + - void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); + + Case of Timers and external trigger(ETR pin) + ******************************************** + 1. Configure the External trigger using this function: + - void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter); + 2. Configure the Slave Timers using the following functions: + - void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); + - void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); + +@endverbatim + * @{ + */ + +/** + * @brief Selects the Input Trigger source + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13 or 14 + * to select the TIM peripheral. + * @param TIM_InputTriggerSource: The Input Trigger source. + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal Trigger 0 + * @arg TIM_TS_ITR1: Internal Trigger 1 + * @arg TIM_TS_ITR2: Internal Trigger 2 + * @arg TIM_TS_ITR3: Internal Trigger 3 + * @arg TIM_TS_TI1F_ED: TI1 Edge Detector + * @arg TIM_TS_TI1FP1: Filtered Timer Input 1 + * @arg TIM_TS_TI2FP2: Filtered Timer Input 2 + * @arg TIM_TS_ETRF: External Trigger input + * @retval None + */ +void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource) +{ + uint16_t tmpsmcr = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_TRIGGER_SELECTION(TIM_InputTriggerSource)); + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + + /* Reset the TS Bits */ + tmpsmcr &= (uint16_t)~TIM_SMCR_TS; + + /* Set the Input Trigger source */ + tmpsmcr |= TIM_InputTriggerSource; + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} + +/** + * @brief Selects the TIMx Trigger Output Mode. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8 to select the TIM peripheral. + * + * @param TIM_TRGOSource: specifies the Trigger Output source. + * This parameter can be one of the following values: + * + * - For all TIMx + * @arg TIM_TRGOSource_Reset: The UG bit in the TIM_EGR register is used as the trigger output(TRGO) + * @arg TIM_TRGOSource_Enable: The Counter Enable CEN is used as the trigger output(TRGO) + * @arg TIM_TRGOSource_Update: The update event is selected as the trigger output(TRGO) + * + * - For all TIMx except TIM6 and TIM7 + * @arg TIM_TRGOSource_OC1: The trigger output sends a positive pulse when the CC1IF flag + * is to be set, as soon as a capture or compare match occurs(TRGO) + * @arg TIM_TRGOSource_OC1Ref: OC1REF signal is used as the trigger output(TRGO) + * @arg TIM_TRGOSource_OC2Ref: OC2REF signal is used as the trigger output(TRGO) + * @arg TIM_TRGOSource_OC3Ref: OC3REF signal is used as the trigger output(TRGO) + * @arg TIM_TRGOSource_OC4Ref: OC4REF signal is used as the trigger output(TRGO) + * + * @retval None + */ +void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST5_PERIPH(TIMx)); + assert_param(IS_TIM_TRGO_SOURCE(TIM_TRGOSource)); + + /* Reset the MMS Bits */ + TIMx->CR2 &= (uint16_t)~TIM_CR2_MMS; + /* Select the TRGO source */ + TIMx->CR2 |= TIM_TRGOSource; +} + +/** + * @brief Selects the TIMx Slave Mode. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM peripheral. + * @param TIM_SlaveMode: specifies the Timer Slave Mode. + * This parameter can be one of the following values: + * @arg TIM_SlaveMode_Reset: Rising edge of the selected trigger signal(TRGI) reinitialize + * the counter and triggers an update of the registers + * @arg TIM_SlaveMode_Gated: The counter clock is enabled when the trigger signal (TRGI) is high + * @arg TIM_SlaveMode_Trigger: The counter starts at a rising edge of the trigger TRGI + * @arg TIM_SlaveMode_External1: Rising edges of the selected trigger (TRGI) clock the counter + * @retval None + */ +void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_SLAVE_MODE(TIM_SlaveMode)); + + /* Reset the SMS Bits */ + TIMx->SMCR &= (uint16_t)~TIM_SMCR_SMS; + + /* Select the Slave Mode */ + TIMx->SMCR |= TIM_SlaveMode; +} + +/** + * @brief Sets or Resets the TIMx Master/Slave Mode. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM peripheral. + * @param TIM_MasterSlaveMode: specifies the Timer Master Slave Mode. + * This parameter can be one of the following values: + * @arg TIM_MasterSlaveMode_Enable: synchronization between the current timer + * and its slaves (through TRGO) + * @arg TIM_MasterSlaveMode_Disable: No action + * @retval None + */ +void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_MSM_STATE(TIM_MasterSlaveMode)); + + /* Reset the MSM Bit */ + TIMx->SMCR &= (uint16_t)~TIM_SMCR_MSM; + + /* Set or Reset the MSM Bit */ + TIMx->SMCR |= TIM_MasterSlaveMode; +} + +/** + * @brief Configures the TIMx External Trigger (ETR). + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_ExtTRGPrescaler: The external Trigger Prescaler. + * This parameter can be one of the following values: + * @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF. + * @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2. + * @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4. + * @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8. + * @param TIM_ExtTRGPolarity: The external Trigger Polarity. + * This parameter can be one of the following values: + * @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active. + * @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active. + * @param ExtTRGFilter: External Trigger Filter. + * This parameter must be a value between 0x00 and 0x0F + * @retval None + */ +void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, + uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter) +{ + uint16_t tmpsmcr = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler)); + assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity)); + assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter)); + + tmpsmcr = TIMx->SMCR; + + /* Reset the ETR Bits */ + tmpsmcr &= SMCR_ETR_MASK; + + /* Set the Prescaler, the Filter value and the Polarity */ + tmpsmcr |= (uint16_t)(TIM_ExtTRGPrescaler | (uint16_t)(TIM_ExtTRGPolarity | (uint16_t)(ExtTRGFilter << (uint16_t)8))); + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} +/** + * @} + */ + +/** @defgroup TIM_Group8 Specific interface management functions + * @brief Specific interface management functions + * +@verbatim + =============================================================================== + Specific interface management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Configures the TIMx Encoder Interface. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_EncoderMode: specifies the TIMx Encoder Mode. + * This parameter can be one of the following values: + * @arg TIM_EncoderMode_TI1: Counter counts on TI1FP1 edge depending on TI2FP2 level. + * @arg TIM_EncoderMode_TI2: Counter counts on TI2FP2 edge depending on TI1FP1 level. + * @arg TIM_EncoderMode_TI12: Counter counts on both TI1FP1 and TI2FP2 edges depending + * on the level of the other input. + * @param TIM_IC1Polarity: specifies the IC1 Polarity + * This parameter can be one of the following values: + * @arg TIM_ICPolarity_Falling: IC Falling edge. + * @arg TIM_ICPolarity_Rising: IC Rising edge. + * @param TIM_IC2Polarity: specifies the IC2 Polarity + * This parameter can be one of the following values: + * @arg TIM_ICPolarity_Falling: IC Falling edge. + * @arg TIM_ICPolarity_Rising: IC Rising edge. + * @retval None + */ +void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, + uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity) +{ + uint16_t tmpsmcr = 0; + uint16_t tmpccmr1 = 0; + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_ENCODER_MODE(TIM_EncoderMode)); + assert_param(IS_TIM_IC_POLARITY(TIM_IC1Polarity)); + assert_param(IS_TIM_IC_POLARITY(TIM_IC2Polarity)); + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = TIMx->CCMR1; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + + /* Set the encoder Mode */ + tmpsmcr &= (uint16_t)~TIM_SMCR_SMS; + tmpsmcr |= TIM_EncoderMode; + + /* Select the Capture Compare 1 and the Capture Compare 2 as input */ + tmpccmr1 &= ((uint16_t)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR1_CC2S); + tmpccmr1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0; + + /* Set the TI1 and the TI2 Polarities */ + tmpccer &= ((uint16_t)~TIM_CCER_CC1P) & ((uint16_t)~TIM_CCER_CC2P); + tmpccer |= (uint16_t)(TIM_IC1Polarity | (uint16_t)(TIM_IC2Polarity << (uint16_t)4)); + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmr1; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Enables or disables the TIMx's Hall sensor interface. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param NewState: new state of the TIMx Hall sensor interface. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Set the TI1S Bit */ + TIMx->CR2 |= TIM_CR2_TI1S; + } + else + { + /* Reset the TI1S Bit */ + TIMx->CR2 &= (uint16_t)~TIM_CR2_TI1S; + } +} +/** + * @} + */ + +/** @defgroup TIM_Group9 Specific remapping management function + * @brief Specific remapping management function + * +@verbatim + =============================================================================== + Specific remapping management function + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Configures the TIM2, TIM5 and TIM11 Remapping input capabilities. + * @param TIMx: where x can be 2, 5 or 11 to select the TIM peripheral. + * @param TIM_Remap: specifies the TIM input remapping source. + * This parameter can be one of the following values: + * @arg TIM2_TIM8_TRGO: TIM2 ITR1 input is connected to TIM8 Trigger output(default) + * @arg TIM2_ETH_PTP: TIM2 ITR1 input is connected to ETH PTP trogger output. + * @arg TIM2_USBFS_SOF: TIM2 ITR1 input is connected to USB FS SOF. + * @arg TIM2_USBHS_SOF: TIM2 ITR1 input is connected to USB HS SOF. + * @arg TIM5_GPIO: TIM5 CH4 input is connected to dedicated Timer pin(default) + * @arg TIM5_LSI: TIM5 CH4 input is connected to LSI clock. + * @arg TIM5_LSE: TIM5 CH4 input is connected to LSE clock. + * @arg TIM5_RTC: TIM5 CH4 input is connected to RTC Output event. + * @arg TIM11_GPIO: TIM11 CH4 input is connected to dedicated Timer pin(default) + * @arg TIM11_HSE: TIM11 CH4 input is connected to HSE_RTC clock + * (HSE divided by a programmable prescaler) + * @retval None + */ +void TIM_RemapConfig(TIM_TypeDef* TIMx, uint16_t TIM_Remap) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_REMAP(TIM_Remap)); + + /* Set the Timer remapping configuration */ + TIMx->OR = TIM_Remap; +} +/** + * @} + */ + +/** + * @brief Configure the TI1 as Input. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13 or 14 + * to select the TIM peripheral. + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPolarity_Rising + * @arg TIM_ICPolarity_Falling + * @arg TIM_ICPolarity_BothEdge + * @param TIM_ICSelection: specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSelection_DirectTI: TIM Input 1 is selected to be connected to IC1. + * @arg TIM_ICSelection_IndirectTI: TIM Input 1 is selected to be connected to IC2. + * @arg TIM_ICSelection_TRC: TIM Input 1 is selected to be connected to TRC. + * @param TIM_ICFilter: Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr1 = 0, tmpccer = 0; + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= (uint16_t)~TIM_CCER_CC1E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Select the Input and set the filter */ + tmpccmr1 &= ((uint16_t)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR1_IC1F); + tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI2 as Input. + * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM + * peripheral. + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPolarity_Rising + * @arg TIM_ICPolarity_Falling + * @arg TIM_ICPolarity_BothEdge + * @param TIM_ICSelection: specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSelection_DirectTI: TIM Input 2 is selected to be connected to IC2. + * @arg TIM_ICSelection_IndirectTI: TIM Input 2 is selected to be connected to IC1. + * @arg TIM_ICSelection_TRC: TIM Input 2 is selected to be connected to TRC. + * @param TIM_ICFilter: Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr1 = 0, tmpccer = 0, tmp = 0; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= (uint16_t)~TIM_CCER_CC2E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + tmp = (uint16_t)(TIM_ICPolarity << 4); + + /* Select the Input and set the filter */ + tmpccmr1 &= ((uint16_t)~TIM_CCMR1_CC2S) & ((uint16_t)~TIM_CCMR1_IC2F); + tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12); + tmpccmr1 |= (uint16_t)(TIM_ICSelection << 8); + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC2E); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI3 as Input. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPolarity_Rising + * @arg TIM_ICPolarity_Falling + * @arg TIM_ICPolarity_BothEdge + * @param TIM_ICSelection: specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSelection_DirectTI: TIM Input 3 is selected to be connected to IC3. + * @arg TIM_ICSelection_IndirectTI: TIM Input 3 is selected to be connected to IC4. + * @arg TIM_ICSelection_TRC: TIM Input 3 is selected to be connected to TRC. + * @param TIM_ICFilter: Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; + + /* Disable the Channel 3: Reset the CC3E Bit */ + TIMx->CCER &= (uint16_t)~TIM_CCER_CC3E; + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + tmp = (uint16_t)(TIM_ICPolarity << 8); + + /* Select the Input and set the filter */ + tmpccmr2 &= ((uint16_t)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR2_IC3F); + tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); + + /* Select the Polarity and set the CC3E Bit */ + tmpccer &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP); + tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC3E); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI4 as Input. + * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral. + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPolarity_Rising + * @arg TIM_ICPolarity_Falling + * @arg TIM_ICPolarity_BothEdge + * @param TIM_ICSelection: specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSelection_DirectTI: TIM Input 4 is selected to be connected to IC4. + * @arg TIM_ICSelection_IndirectTI: TIM Input 4 is selected to be connected to IC3. + * @arg TIM_ICSelection_TRC: TIM Input 4 is selected to be connected to TRC. + * @param TIM_ICFilter: Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= (uint16_t)~TIM_CCER_CC4E; + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + tmp = (uint16_t)(TIM_ICPolarity << 12); + + /* Select the Input and set the filter */ + tmpccmr2 &= ((uint16_t)~TIM_CCMR1_CC2S) & ((uint16_t)~TIM_CCMR1_IC2F); + tmpccmr2 |= (uint16_t)(TIM_ICSelection << 8); + tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12); + + /* Select the Polarity and set the CC4E Bit */ + tmpccer &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP); + tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC4E); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer ; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_usart.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_usart.c new file mode 100644 index 000000000..015fdd929 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_usart.c @@ -0,0 +1,1469 @@ +/** + ****************************************************************************** + * @file stm32f2xx_usart.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Universal synchronous asynchronous receiver + * transmitter (USART): + * - Initialization and Configuration + * - Data transfers + * - Multi-Processor Communication + * - LIN mode + * - Half-duplex mode + * - Smartcard mode + * - IrDA mode + * - DMA transfers management + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable peripheral clock using the follwoing functions + * RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx, ENABLE) for USART1 and USART6 + * RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE) for USART2, USART3, UART4 or UART5. + * + * 2. According to the USART mode, enable the GPIO clocks using + * RCC_AHB1PeriphClockCmd() function. (The I/O can be TX, RX, CTS, + * or/and SCLK). + * + * 3. Peripheral's alternate function: + * - Connect the pin to the desired peripherals' Alternate + * Function (AF) using GPIO_PinAFConfig() function + * - Configure the desired pin in alternate function by: + * GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF + * - Select the type, pull-up/pull-down and output speed via + * GPIO_PuPd, GPIO_OType and GPIO_Speed members + * - Call GPIO_Init() function + * + * 4. Program the Baud Rate, Word Length , Stop Bit, Parity, Hardware + * flow control and Mode(Receiver/Transmitter) using the USART_Init() + * function. + * + * 5. For synchronous mode, enable the clock and program the polarity, + * phase and last bit using the USART_ClockInit() function. + * + * 5. Enable the NVIC and the corresponding interrupt using the function + * USART_ITConfig() if you need to use interrupt mode. + * + * 6. When using the DMA mode + * - Configure the DMA using DMA_Init() function + * - Active the needed channel Request using USART_DMACmd() function + * + * 7. Enable the USART using the USART_Cmd() function. + * + * 8. Enable the DMA using the DMA_Cmd() function, when using DMA mode. + * + * Refer to Multi-Processor, LIN, half-duplex, Smartcard, IrDA sub-sections + * for more details + * + * In order to reach higher communication baudrates, it is possible to + * enable the oversampling by 8 mode using the function USART_OverSampling8Cmd(). + * This function should be called after enabling the USART clock (RCC_APBxPeriphClockCmd()) + * and before calling the function USART_Init(). + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_usart.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup USART + * @brief USART driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/*!< USART CR1 register clear Mask ((~(uint16_t)0xE9F3)) */ +#define CR1_CLEAR_MASK ((uint16_t)(USART_CR1_M | USART_CR1_PCE | \ + USART_CR1_PS | USART_CR1_TE | \ + USART_CR1_RE)) + +/*!< USART CR2 register clock bits clear Mask ((~(uint16_t)0xF0FF)) */ +#define CR2_CLOCK_CLEAR_MASK ((uint16_t)(USART_CR2_CLKEN | USART_CR2_CPOL | \ + USART_CR2_CPHA | USART_CR2_LBCL)) + +/*!< USART CR3 register clear Mask ((~(uint16_t)0xFCFF)) */ +#define CR3_CLEAR_MASK ((uint16_t)(USART_CR3_RTSE | USART_CR3_CTSE)) + +/*!< USART Interrupts mask */ +#define IT_MASK ((uint16_t)0x001F) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup USART_Private_Functions + * @{ + */ + +/** @defgroup USART_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + Initialization and Configuration functions + =============================================================================== + + This subsection provides a set of functions allowing to initialize the USART + in asynchronous and in synchronous modes. + - For the asynchronous mode only these parameters can be configured: + - Baud Rate + - Word Length + - Stop Bit + - Parity: If the parity is enabled, then the MSB bit of the data written + in the data register is transmitted but is changed by the parity bit. + Depending on the frame length defined by the M bit (8-bits or 9-bits), + the possible USART frame formats are as listed in the following table: + +-------------------------------------------------------------+ + | M bit | PCE bit | USART frame | + |---------------------|---------------------------------------| + | 0 | 0 | | SB | 8 bit data | STB | | + |---------|-----------|---------------------------------------| + | 0 | 1 | | SB | 7 bit data | PB | STB | | + |---------|-----------|---------------------------------------| + | 1 | 0 | | SB | 9 bit data | STB | | + |---------|-----------|---------------------------------------| + | 1 | 1 | | SB | 8 bit data | PB | STB | | + +-------------------------------------------------------------+ + - Hardware flow control + - Receiver/transmitter modes + + The USART_Init() function follows the USART asynchronous configuration procedure + (details for the procedure are available in reference manual (RM0033)). + + - For the synchronous mode in addition to the asynchronous mode parameters these + parameters should be also configured: + - USART Clock Enabled + - USART polarity + - USART phase + - USART LastBit + + These parameters can be configured using the USART_ClockInit() function. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the USARTx peripheral registers to their default reset values. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @retval None + */ +void USART_DeInit(USART_TypeDef* USARTx) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + + if (USARTx == USART1) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE); + } + else if (USARTx == USART2) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE); + } + else if (USARTx == USART3) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE); + } + else if (USARTx == UART4) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE); + } + else if (USARTx == UART5) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE); + } + else + { + if (USARTx == USART6) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE); + } + } +} + +/** + * @brief Initializes the USARTx peripheral according to the specified + * parameters in the USART_InitStruct . + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that contains + * the configuration information for the specified USART peripheral. + * @retval None + */ +void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct) +{ + uint32_t tmpreg = 0x00, apbclock = 0x00; + uint32_t integerdivider = 0x00; + uint32_t fractionaldivider = 0x00; + RCC_ClocksTypeDef RCC_ClocksStatus; + + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_BAUDRATE(USART_InitStruct->USART_BaudRate)); + assert_param(IS_USART_WORD_LENGTH(USART_InitStruct->USART_WordLength)); + assert_param(IS_USART_STOPBITS(USART_InitStruct->USART_StopBits)); + assert_param(IS_USART_PARITY(USART_InitStruct->USART_Parity)); + assert_param(IS_USART_MODE(USART_InitStruct->USART_Mode)); + assert_param(IS_USART_HARDWARE_FLOW_CONTROL(USART_InitStruct->USART_HardwareFlowControl)); + + /* The hardware flow control is available only for USART1, USART2, USART3 and USART6 */ + if (USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None) + { + assert_param(IS_USART_1236_PERIPH(USARTx)); + } + +/*---------------------------- USART CR2 Configuration -----------------------*/ + tmpreg = USARTx->CR2; + + /* Clear STOP[13:12] bits */ + tmpreg &= (uint32_t)~((uint32_t)USART_CR2_STOP); + + /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit : + Set STOP[13:12] bits according to USART_StopBits value */ + tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits; + + /* Write to USART CR2 */ + USARTx->CR2 = (uint16_t)tmpreg; + +/*---------------------------- USART CR1 Configuration -----------------------*/ + tmpreg = USARTx->CR1; + + /* Clear M, PCE, PS, TE and RE bits */ + tmpreg &= (uint32_t)~((uint32_t)CR1_CLEAR_MASK); + + /* Configure the USART Word Length, Parity and mode: + Set the M bits according to USART_WordLength value + Set PCE and PS bits according to USART_Parity value + Set TE and RE bits according to USART_Mode value */ + tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity | + USART_InitStruct->USART_Mode; + + /* Write to USART CR1 */ + USARTx->CR1 = (uint16_t)tmpreg; + +/*---------------------------- USART CR3 Configuration -----------------------*/ + tmpreg = USARTx->CR3; + + /* Clear CTSE and RTSE bits */ + tmpreg &= (uint32_t)~((uint32_t)CR3_CLEAR_MASK); + + /* Configure the USART HFC : + Set CTSE and RTSE bits according to USART_HardwareFlowControl value */ + tmpreg |= USART_InitStruct->USART_HardwareFlowControl; + + /* Write to USART CR3 */ + USARTx->CR3 = (uint16_t)tmpreg; + +/*---------------------------- USART BRR Configuration -----------------------*/ + /* Configure the USART Baud Rate */ + RCC_GetClocksFreq(&RCC_ClocksStatus); + + if ((USARTx == USART1) || (USARTx == USART6)) + { + apbclock = RCC_ClocksStatus.PCLK2_Frequency; + } + else + { + apbclock = RCC_ClocksStatus.PCLK1_Frequency; + } + + /* Determine the integer part */ + if ((USARTx->CR1 & USART_CR1_OVER8) != 0) + { + /* Integer part computing in case Oversampling mode is 8 Samples */ + integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate))); + } + else /* if ((USARTx->CR1 & USART_CR1_OVER8) == 0) */ + { + /* Integer part computing in case Oversampling mode is 16 Samples */ + integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate))); + } + tmpreg = (integerdivider / 100) << 4; + + /* Determine the fractional part */ + fractionaldivider = integerdivider - (100 * (tmpreg >> 4)); + + /* Implement the fractional part in the register */ + if ((USARTx->CR1 & USART_CR1_OVER8) != 0) + { + tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07); + } + else /* if ((USARTx->CR1 & USART_CR1_OVER8) == 0) */ + { + tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F); + } + + /* Write to USART BRR register */ + USARTx->BRR = (uint16_t)tmpreg; +} + +/** + * @brief Fills each USART_InitStruct member with its default value. + * @param USART_InitStruct: pointer to a USART_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void USART_StructInit(USART_InitTypeDef* USART_InitStruct) +{ + /* USART_InitStruct members default value */ + USART_InitStruct->USART_BaudRate = 9600; + USART_InitStruct->USART_WordLength = USART_WordLength_8b; + USART_InitStruct->USART_StopBits = USART_StopBits_1; + USART_InitStruct->USART_Parity = USART_Parity_No ; + USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None; +} + +/** + * @brief Initializes the USARTx peripheral Clock according to the + * specified parameters in the USART_ClockInitStruct . + * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART peripheral. + * @param USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef structure that + * contains the configuration information for the specified USART peripheral. + * @note The Smart Card and Synchronous modes are not available for UART4 and UART5. + * @retval None + */ +void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct) +{ + uint32_t tmpreg = 0x00; + /* Check the parameters */ + assert_param(IS_USART_1236_PERIPH(USARTx)); + assert_param(IS_USART_CLOCK(USART_ClockInitStruct->USART_Clock)); + assert_param(IS_USART_CPOL(USART_ClockInitStruct->USART_CPOL)); + assert_param(IS_USART_CPHA(USART_ClockInitStruct->USART_CPHA)); + assert_param(IS_USART_LASTBIT(USART_ClockInitStruct->USART_LastBit)); + +/*---------------------------- USART CR2 Configuration -----------------------*/ + tmpreg = USARTx->CR2; + /* Clear CLKEN, CPOL, CPHA and LBCL bits */ + tmpreg &= (uint32_t)~((uint32_t)CR2_CLOCK_CLEAR_MASK); + /* Configure the USART Clock, CPOL, CPHA and LastBit ------------*/ + /* Set CLKEN bit according to USART_Clock value */ + /* Set CPOL bit according to USART_CPOL value */ + /* Set CPHA bit according to USART_CPHA value */ + /* Set LBCL bit according to USART_LastBit value */ + tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | + USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit; + /* Write to USART CR2 */ + USARTx->CR2 = (uint16_t)tmpreg; +} + +/** + * @brief Fills each USART_ClockInitStruct member with its default value. + * @param USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef structure + * which will be initialized. + * @retval None + */ +void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct) +{ + /* USART_ClockInitStruct members default value */ + USART_ClockInitStruct->USART_Clock = USART_Clock_Disable; + USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low; + USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge; + USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable; +} + +/** + * @brief Enables or disables the specified USART peripheral. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param NewState: new state of the USARTx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected USART by setting the UE bit in the CR1 register */ + USARTx->CR1 |= USART_CR1_UE; + } + else + { + /* Disable the selected USART by clearing the UE bit in the CR1 register */ + USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_UE); + } +} + +/** + * @brief Sets the system clock prescaler. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_Prescaler: specifies the prescaler clock. + * @note The function is used for IrDA mode with UART4 and UART5. + * @retval None + */ +void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + + /* Clear the USART prescaler */ + USARTx->GTPR &= USART_GTPR_GT; + /* Set the USART prescaler */ + USARTx->GTPR |= USART_Prescaler; +} + +/** + * @brief Enables or disables the USART's 8x oversampling mode. + * @note This function has to be called before calling USART_Init() function + * in order to have correct baudrate Divider value. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param NewState: new state of the USART 8x oversampling mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the 8x Oversampling mode by setting the OVER8 bit in the CR1 register */ + USARTx->CR1 |= USART_CR1_OVER8; + } + else + { + /* Disable the 8x Oversampling mode by clearing the OVER8 bit in the CR1 register */ + USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_OVER8); + } +} + +/** + * @brief Enables or disables the USART's one bit sampling method. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param NewState: new state of the USART one bit sampling method. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the one bit method by setting the ONEBITE bit in the CR3 register */ + USARTx->CR3 |= USART_CR3_ONEBIT; + } + else + { + /* Disable the one bit method by clearing the ONEBITE bit in the CR3 register */ + USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT); + } +} + +/** + * @} + */ + +/** @defgroup USART_Group2 Data transfers functions + * @brief Data transfers functions + * +@verbatim + =============================================================================== + Data transfers functions + =============================================================================== + + This subsection provides a set of functions allowing to manage the USART data + transfers. + + During an USART reception, data shifts in least significant bit first through + the RX pin. In this mode, the USART_DR register consists of a buffer (RDR) + between the internal bus and the received shift register. + + When a transmission is taking place, a write instruction to the USART_DR register + stores the data in the TDR register and which is copied in the shift register + at the end of the current transmission. + + The read access of the USART_DR register can be done using the USART_ReceiveData() + function and returns the RDR buffered value. Whereas a write access to the USART_DR + can be done using USART_SendData() function and stores the written data into + TDR buffer. + +@endverbatim + * @{ + */ + +/** + * @brief Transmits single data through the USARTx peripheral. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param Data: the data to transmit. + * @retval None + */ +void USART_SendData(USART_TypeDef* USARTx, uint16_t Data) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_DATA(Data)); + + /* Transmit Data */ + USARTx->DR = (Data & (uint16_t)0x01FF); +} + +/** + * @brief Returns the most recent received data by the USARTx peripheral. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @retval The received data. + */ +uint16_t USART_ReceiveData(USART_TypeDef* USARTx) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + + /* Receive Data */ + return (uint16_t)(USARTx->DR & (uint16_t)0x01FF); +} + +/** + * @} + */ + +/** @defgroup USART_Group3 MultiProcessor Communication functions + * @brief Multi-Processor Communication functions + * +@verbatim + =============================================================================== + Multi-Processor Communication functions + =============================================================================== + + This subsection provides a set of functions allowing to manage the USART + multiprocessor communication. + + For instance one of the USARTs can be the master, its TX output is connected to + the RX input of the other USART. The others are slaves, their respective TX outputs + are logically ANDed together and connected to the RX input of the master. + + USART multiprocessor communication is possible through the following procedure: + 1. Program the Baud rate, Word length = 9 bits, Stop bits, Parity, Mode transmitter + or Mode receiver and hardware flow control values using the USART_Init() + function. + 2. Configures the USART address using the USART_SetAddress() function. + 3. Configures the wake up method (USART_WakeUp_IdleLine or USART_WakeUp_AddressMark) + using USART_WakeUpConfig() function only for the slaves. + 4. Enable the USART using the USART_Cmd() function. + 5. Enter the USART slaves in mute mode using USART_ReceiverWakeUpCmd() function. + + The USART Slave exit from mute mode when receive the wake up condition. + +@endverbatim + * @{ + */ + +/** + * @brief Sets the address of the USART node. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_Address: Indicates the address of the USART node. + * @retval None + */ +void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_ADDRESS(USART_Address)); + + /* Clear the USART address */ + USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_ADD); + /* Set the USART address node */ + USARTx->CR2 |= USART_Address; +} + +/** + * @brief Determines if the USART is in mute mode or not. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param NewState: new state of the USART mute mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the USART mute mode by setting the RWU bit in the CR1 register */ + USARTx->CR1 |= USART_CR1_RWU; + } + else + { + /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */ + USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_RWU); + } +} +/** + * @brief Selects the USART WakeUp method. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_WakeUp: specifies the USART wakeup method. + * This parameter can be one of the following values: + * @arg USART_WakeUp_IdleLine: WakeUp by an idle line detection + * @arg USART_WakeUp_AddressMark: WakeUp by an address mark + * @retval None + */ +void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_WAKEUP(USART_WakeUp)); + + USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_WAKE); + USARTx->CR1 |= USART_WakeUp; +} + +/** + * @} + */ + +/** @defgroup USART_Group4 LIN mode functions + * @brief LIN mode functions + * +@verbatim + =============================================================================== + LIN mode functions + =============================================================================== + + This subsection provides a set of functions allowing to manage the USART LIN + Mode communication. + + In LIN mode, 8-bit data format with 1 stop bit is required in accordance with + the LIN standard. + + Only this LIN Feature is supported by the USART IP: + - LIN Master Synchronous Break send capability and LIN slave break detection + capability : 13-bit break generation and 10/11 bit break detection + + + USART LIN Master transmitter communication is possible through the following procedure: + 1. Program the Baud rate, Word length = 8bits, Stop bits = 1bit, Parity, + Mode transmitter or Mode receiver and hardware flow control values using + the USART_Init() function. + 2. Enable the USART using the USART_Cmd() function. + 3. Enable the LIN mode using the USART_LINCmd() function. + 4. Send the break character using USART_SendBreak() function. + + USART LIN Master receiver communication is possible through the following procedure: + 1. Program the Baud rate, Word length = 8bits, Stop bits = 1bit, Parity, + Mode transmitter or Mode receiver and hardware flow control values using + the USART_Init() function. + 2. Enable the USART using the USART_Cmd() function. + 3. Configures the break detection length using the USART_LINBreakDetectLengthConfig() + function. + 4. Enable the LIN mode using the USART_LINCmd() function. + + +@note In LIN mode, the following bits must be kept cleared: + - CLKEN in the USART_CR2 register, + - STOP[1:0], SCEN, HDSEL and IREN in the USART_CR3 register. + +@endverbatim + * @{ + */ + +/** + * @brief Sets the USART LIN Break detection length. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_LINBreakDetectLength: specifies the LIN break detection length. + * This parameter can be one of the following values: + * @arg USART_LINBreakDetectLength_10b: 10-bit break detection + * @arg USART_LINBreakDetectLength_11b: 11-bit break detection + * @retval None + */ +void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength)); + + USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_LBDL); + USARTx->CR2 |= USART_LINBreakDetectLength; +} + +/** + * @brief Enables or disables the USART's LIN mode. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param NewState: new state of the USART LIN mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the LIN mode by setting the LINEN bit in the CR2 register */ + USARTx->CR2 |= USART_CR2_LINEN; + } + else + { + /* Disable the LIN mode by clearing the LINEN bit in the CR2 register */ + USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_LINEN); + } +} + +/** + * @brief Transmits break characters. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @retval None + */ +void USART_SendBreak(USART_TypeDef* USARTx) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + + /* Send break characters */ + USARTx->CR1 |= USART_CR1_SBK; +} + +/** + * @} + */ + +/** @defgroup USART_Group5 Halfduplex mode function + * @brief Half-duplex mode function + * +@verbatim + =============================================================================== + Half-duplex mode function + =============================================================================== + + This subsection provides a set of functions allowing to manage the USART + Half-duplex communication. + + The USART can be configured to follow a single-wire half-duplex protocol where + the TX and RX lines are internally connected. + + USART Half duplex communication is possible through the following procedure: + 1. Program the Baud rate, Word length, Stop bits, Parity, Mode transmitter + or Mode receiver and hardware flow control values using the USART_Init() + function. + 2. Configures the USART address using the USART_SetAddress() function. + 3. Enable the USART using the USART_Cmd() function. + 4. Enable the half duplex mode using USART_HalfDuplexCmd() function. + + +@note The RX pin is no longer used +@note In Half-duplex mode the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register. + - SCEN and IREN bits in the USART_CR3 register. + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the USART's Half Duplex communication. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param NewState: new state of the USART Communication. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */ + USARTx->CR3 |= USART_CR3_HDSEL; + } + else + { + /* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */ + USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_HDSEL); + } +} + +/** + * @} + */ + + +/** @defgroup USART_Group6 Smartcard mode functions + * @brief Smartcard mode functions + * +@verbatim + =============================================================================== + Smartcard mode functions + =============================================================================== + + This subsection provides a set of functions allowing to manage the USART + Smartcard communication. + + The Smartcard interface is designed to support asynchronous protocol Smartcards as + defined in the ISO 7816-3 standard. + + The USART can provide a clock to the smartcard through the SCLK output. + In smartcard mode, SCLK is not associated to the communication but is simply derived + from the internal peripheral input clock through a 5-bit prescaler. + + Smartcard communication is possible through the following procedure: + 1. Configures the Smartcard Prescaler using the USART_SetPrescaler() function. + 2. Configures the Smartcard Guard Time using the USART_SetGuardTime() function. + 3. Program the USART clock using the USART_ClockInit() function as following: + - USART Clock enabled + - USART CPOL Low + - USART CPHA on first edge + - USART Last Bit Clock Enabled + 4. Program the Smartcard interface using the USART_Init() function as following: + - Word Length = 9 Bits + - 1.5 Stop Bit + - Even parity + - BaudRate = 12096 baud + - Hardware flow control disabled (RTS and CTS signals) + - Tx and Rx enabled + 5. Optionally you can enable the parity error interrupt using the USART_ITConfig() + function + 6. Enable the USART using the USART_Cmd() function. + 7. Enable the Smartcard NACK using the USART_SmartCardNACKCmd() function. + 8. Enable the Smartcard interface using the USART_SmartCardCmd() function. + + Please refer to the ISO 7816-3 specification for more details. + + +@note It is also possible to choose 0.5 stop bit for receiving but it is recommended + to use 1.5 stop bits for both transmitting and receiving to avoid switching + between the two configurations. +@note In smartcard mode, the following bits must be kept cleared: + - LINEN bit in the USART_CR2 register. + - HDSEL and IREN bits in the USART_CR3 register. +@note Smartcard mode is available on USART peripherals only (not available on UART4 + and UART5 peripherals). + +@endverbatim + * @{ + */ + +/** + * @brief Sets the specified USART guard time. + * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART or + * UART peripheral. + * @param USART_GuardTime: specifies the guard time. + * @retval None + */ +void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime) +{ + /* Check the parameters */ + assert_param(IS_USART_1236_PERIPH(USARTx)); + + /* Clear the USART Guard time */ + USARTx->GTPR &= USART_GTPR_PSC; + /* Set the USART guard time */ + USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08); +} + +/** + * @brief Enables or disables the USART's Smart Card mode. + * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART or + * UART peripheral. + * @param NewState: new state of the Smart Card mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_1236_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the SC mode by setting the SCEN bit in the CR3 register */ + USARTx->CR3 |= USART_CR3_SCEN; + } + else + { + /* Disable the SC mode by clearing the SCEN bit in the CR3 register */ + USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_SCEN); + } +} + +/** + * @brief Enables or disables NACK transmission. + * @param USARTx: where x can be 1, 2, 3 or 6 to select the USART or + * UART peripheral. + * @param NewState: new state of the NACK transmission. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_1236_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the NACK transmission by setting the NACK bit in the CR3 register */ + USARTx->CR3 |= USART_CR3_NACK; + } + else + { + /* Disable the NACK transmission by clearing the NACK bit in the CR3 register */ + USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_NACK); + } +} + +/** + * @} + */ + +/** @defgroup USART_Group7 IrDA mode functions + * @brief IrDA mode functions + * +@verbatim + =============================================================================== + IrDA mode functions + =============================================================================== + + This subsection provides a set of functions allowing to manage the USART + IrDA communication. + + IrDA is a half duplex communication protocol. If the Transmitter is busy, any data + on the IrDA receive line will be ignored by the IrDA decoder and if the Receiver + is busy, data on the TX from the USART to IrDA will not be encoded by IrDA. + While receiving data, transmission should be avoided as the data to be transmitted + could be corrupted. + + IrDA communication is possible through the following procedure: + 1. Program the Baud rate, Word length = 8 bits, Stop bits, Parity, Transmitter/Receiver + modes and hardware flow control values using the USART_Init() function. + 2. Enable the USART using the USART_Cmd() function. + 3. Configures the IrDA pulse width by configuring the prescaler using + the USART_SetPrescaler() function. + 4. Configures the IrDA USART_IrDAMode_LowPower or USART_IrDAMode_Normal mode + using the USART_IrDAConfig() function. + 5. Enable the IrDA using the USART_IrDACmd() function. + +@note A pulse of width less than two and greater than one PSC period(s) may or may + not be rejected. +@note The receiver set up time should be managed by software. The IrDA physical layer + specification specifies a minimum of 10 ms delay between transmission and + reception (IrDA is a half duplex protocol). +@note In IrDA mode, the following bits must be kept cleared: + - LINEN, STOP and CLKEN bits in the USART_CR2 register. + - SCEN and HDSEL bits in the USART_CR3 register. + +@endverbatim + * @{ + */ + +/** + * @brief Configures the USART's IrDA interface. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_IrDAMode: specifies the IrDA mode. + * This parameter can be one of the following values: + * @arg USART_IrDAMode_LowPower + * @arg USART_IrDAMode_Normal + * @retval None + */ +void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_IRDA_MODE(USART_IrDAMode)); + + USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_IRLP); + USARTx->CR3 |= USART_IrDAMode; +} + +/** + * @brief Enables or disables the USART's IrDA interface. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param NewState: new state of the IrDA mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the IrDA mode by setting the IREN bit in the CR3 register */ + USARTx->CR3 |= USART_CR3_IREN; + } + else + { + /* Disable the IrDA mode by clearing the IREN bit in the CR3 register */ + USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_IREN); + } +} + +/** + * @} + */ + +/** @defgroup USART_Group8 DMA transfers management functions + * @brief DMA transfers management functions + * +@verbatim + =============================================================================== + DMA transfers management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the USART's DMA interface. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_DMAReq: specifies the DMA request. + * This parameter can be any combination of the following values: + * @arg USART_DMAReq_Tx: USART DMA transmit request + * @arg USART_DMAReq_Rx: USART DMA receive request + * @param NewState: new state of the DMA Request sources. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_DMAREQ(USART_DMAReq)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the DMA transfer for selected requests by setting the DMAT and/or + DMAR bits in the USART CR3 register */ + USARTx->CR3 |= USART_DMAReq; + } + else + { + /* Disable the DMA transfer for selected requests by clearing the DMAT and/or + DMAR bits in the USART CR3 register */ + USARTx->CR3 &= (uint16_t)~USART_DMAReq; + } +} + +/** + * @} + */ + +/** @defgroup USART_Group9 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + + This subsection provides a set of functions allowing to configure the USART + Interrupts sources, DMA channels requests and check or clear the flags or + pending bits status. + The user should identify which mode will be used in his application to manage + the communication: Polling mode, Interrupt mode or DMA mode. + + Polling Mode + ============= + In Polling Mode, the SPI communication can be managed by 10 flags: + 1. USART_FLAG_TXE : to indicate the status of the transmit buffer register + 2. USART_FLAG_RXNE : to indicate the status of the receive buffer register + 3. USART_FLAG_TC : to indicate the status of the transmit operation + 4. USART_FLAG_IDLE : to indicate the status of the Idle Line + 5. USART_FLAG_CTS : to indicate the status of the nCTS input + 6. USART_FLAG_LBD : to indicate the status of the LIN break detection + 7. USART_FLAG_NE : to indicate if a noise error occur + 8. USART_FLAG_FE : to indicate if a frame error occur + 9. USART_FLAG_PE : to indicate if a parity error occur + 10. USART_FLAG_ORE : to indicate if an Overrun error occur + + In this Mode it is advised to use the following functions: + - FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); + - void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); + + Interrupt Mode + =============== + In Interrupt Mode, the USART communication can be managed by 8 interrupt sources + and 10 pending bits: + + Pending Bits: + ------------- + 1. USART_IT_TXE : to indicate the status of the transmit buffer register + 2. USART_IT_RXNE : to indicate the status of the receive buffer register + 3. USART_IT_TC : to indicate the status of the transmit operation + 4. USART_IT_IDLE : to indicate the status of the Idle Line + 5. USART_IT_CTS : to indicate the status of the nCTS input + 6. USART_IT_LBD : to indicate the status of the LIN break detection + 7. USART_IT_NE : to indicate if a noise error occur + 8. USART_IT_FE : to indicate if a frame error occur + 9. USART_IT_PE : to indicate if a parity error occur + 10. USART_IT_ORE : to indicate if an Overrun error occur + + Interrupt Source: + ----------------- + 1. USART_IT_TXE : specifies the interrupt source for the Tx buffer empty + interrupt. + 2. USART_IT_RXNE : specifies the interrupt source for the Rx buffer not + empty interrupt. + 3. USART_IT_TC : specifies the interrupt source for the Transmit complete + interrupt. + 4. USART_IT_IDLE : specifies the interrupt source for the Idle Line interrupt. + 5. USART_IT_CTS : specifies the interrupt source for the CTS interrupt. + 6. USART_IT_LBD : specifies the interrupt source for the LIN break detection + interrupt. + 7. USART_IT_PE : specifies the interrupt source for the parity error interrupt. + 8. USART_IT_ERR : specifies the interrupt source for the errors interrupt. + +@note Some parameters are coded in order to use them as interrupt source or as pending bits. + + In this Mode it is advised to use the following functions: + - void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState); + - ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); + - void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT); + + DMA Mode + ======== + In DMA Mode, the USART communication can be managed by 2 DMA Channel requests: + 1. USART_DMAReq_Tx: specifies the Tx buffer DMA transfer request + 2. USART_DMAReq_Rx: specifies the Rx buffer DMA transfer request + + In this Mode it is advised to use the following function: + - void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); + +@endverbatim + * @{ + */ + +/** + * @brief Enables or disables the specified USART interrupts. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_IT: specifies the USART interrupt sources to be enabled or disabled. + * This parameter can be one of the following values: + * @arg USART_IT_CTS: CTS change interrupt + * @arg USART_IT_LBD: LIN Break detection interrupt + * @arg USART_IT_TXE: Transmit Data Register empty interrupt + * @arg USART_IT_TC: Transmission complete interrupt + * @arg USART_IT_RXNE: Receive Data register not empty interrupt + * @arg USART_IT_IDLE: Idle line detection interrupt + * @arg USART_IT_PE: Parity Error interrupt + * @arg USART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) + * @param NewState: new state of the specified USARTx interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState) +{ + uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00; + uint32_t usartxbase = 0x00; + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_CONFIG_IT(USART_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* The CTS interrupt is not available for UART4 and UART5 */ + if (USART_IT == USART_IT_CTS) + { + assert_param(IS_USART_1236_PERIPH(USARTx)); + } + + usartxbase = (uint32_t)USARTx; + + /* Get the USART register index */ + usartreg = (((uint8_t)USART_IT) >> 0x05); + + /* Get the interrupt position */ + itpos = USART_IT & IT_MASK; + itmask = (((uint32_t)0x01) << itpos); + + if (usartreg == 0x01) /* The IT is in CR1 register */ + { + usartxbase += 0x0C; + } + else if (usartreg == 0x02) /* The IT is in CR2 register */ + { + usartxbase += 0x10; + } + else /* The IT is in CR3 register */ + { + usartxbase += 0x14; + } + if (NewState != DISABLE) + { + *(__IO uint32_t*)usartxbase |= itmask; + } + else + { + *(__IO uint32_t*)usartxbase &= ~itmask; + } +} + +/** + * @brief Checks whether the specified USART flag is set or not. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5) + * @arg USART_FLAG_LBD: LIN Break detection flag + * @arg USART_FLAG_TXE: Transmit data register empty flag + * @arg USART_FLAG_TC: Transmission Complete flag + * @arg USART_FLAG_RXNE: Receive data register not empty flag + * @arg USART_FLAG_IDLE: Idle Line detection flag + * @arg USART_FLAG_ORE: OverRun Error flag + * @arg USART_FLAG_NE: Noise Error flag + * @arg USART_FLAG_FE: Framing Error flag + * @arg USART_FLAG_PE: Parity Error flag + * @retval The new state of USART_FLAG (SET or RESET). + */ +FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_FLAG(USART_FLAG)); + + /* The CTS flag is not available for UART4 and UART5 */ + if (USART_FLAG == USART_FLAG_CTS) + { + assert_param(IS_USART_1236_PERIPH(USARTx)); + } + + if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the USARTx's pending flags. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5). + * @arg USART_FLAG_LBD: LIN Break detection flag. + * @arg USART_FLAG_TC: Transmission Complete flag. + * @arg USART_FLAG_RXNE: Receive data register not empty flag. + * + * @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun + * error) and IDLE (Idle line detected) flags are cleared by software + * sequence: a read operation to USART_SR register (USART_GetFlagStatus()) + * followed by a read operation to USART_DR register (USART_ReceiveData()). + * @note RXNE flag can be also cleared by a read to the USART_DR register + * (USART_ReceiveData()). + * @note TC flag can be also cleared by software sequence: a read operation to + * USART_SR register (USART_GetFlagStatus()) followed by a write operation + * to USART_DR register (USART_SendData()). + * @note TXE flag is cleared only by a write to the USART_DR register + * (USART_SendData()). + * + * @retval None + */ +void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_CLEAR_FLAG(USART_FLAG)); + + /* The CTS flag is not available for UART4 and UART5 */ + if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS) + { + assert_param(IS_USART_1236_PERIPH(USARTx)); + } + + USARTx->SR = (uint16_t)~USART_FLAG; +} + +/** + * @brief Checks whether the specified USART interrupt has occurred or not. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_IT: specifies the USART interrupt source to check. + * This parameter can be one of the following values: + * @arg USART_IT_CTS : CTS change interrupt (not available for UART4 and UART5) + * @arg USART_IT_LBD : LIN Break detection interrupt + * @arg USART_IT_TXE : Transmit Data Register empty interrupt + * @arg USART_IT_TC : Transmission complete interrupt + * @arg USART_IT_RXNE : Receive Data register not empty interrupt + * @arg USART_IT_IDLE : Idle line detection interrupt + * @arg USART_IT_ORE_RX : OverRun Error interrupt if the RXNEIE bit is set + * @arg USART_IT_ORE_ER : OverRun Error interrupt if the EIE bit is set + * @arg USART_IT_NE : Noise Error interrupt + * @arg USART_IT_FE : Framing Error interrupt + * @arg USART_IT_PE : Parity Error interrupt + * @retval The new state of USART_IT (SET or RESET). + */ +ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT) +{ + uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00; + ITStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_GET_IT(USART_IT)); + + /* The CTS interrupt is not available for UART4 and UART5 */ + if (USART_IT == USART_IT_CTS) + { + assert_param(IS_USART_1236_PERIPH(USARTx)); + } + + /* Get the USART register index */ + usartreg = (((uint8_t)USART_IT) >> 0x05); + /* Get the interrupt position */ + itmask = USART_IT & IT_MASK; + itmask = (uint32_t)0x01 << itmask; + + if (usartreg == 0x01) /* The IT is in CR1 register */ + { + itmask &= USARTx->CR1; + } + else if (usartreg == 0x02) /* The IT is in CR2 register */ + { + itmask &= USARTx->CR2; + } + else /* The IT is in CR3 register */ + { + itmask &= USARTx->CR3; + } + + bitpos = USART_IT >> 0x08; + bitpos = (uint32_t)0x01 << bitpos; + bitpos &= USARTx->SR; + if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/** + * @brief Clears the USARTx's interrupt pending bits. + * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or + * UART peripheral. + * @param USART_IT: specifies the interrupt pending bit to clear. + * This parameter can be one of the following values: + * @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5) + * @arg USART_IT_LBD: LIN Break detection interrupt + * @arg USART_IT_TC: Transmission complete interrupt. + * @arg USART_IT_RXNE: Receive Data register not empty interrupt. + * + * @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun + * error) and IDLE (Idle line detected) pending bits are cleared by + * software sequence: a read operation to USART_SR register + * (USART_GetITStatus()) followed by a read operation to USART_DR register + * (USART_ReceiveData()). + * @note RXNE pending bit can be also cleared by a read to the USART_DR register + * (USART_ReceiveData()). + * @note TC pending bit can be also cleared by software sequence: a read + * operation to USART_SR register (USART_GetITStatus()) followed by a write + * operation to USART_DR register (USART_SendData()). + * @note TXE pending bit is cleared only by a write to the USART_DR register + * (USART_SendData()). + * + * @retval None + */ +void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT) +{ + uint16_t bitpos = 0x00, itmask = 0x00; + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_CLEAR_IT(USART_IT)); + + /* The CTS interrupt is not available for UART4 and UART5 */ + if (USART_IT == USART_IT_CTS) + { + assert_param(IS_USART_1236_PERIPH(USARTx)); + } + + bitpos = USART_IT >> 0x08; + itmask = ((uint16_t)0x01 << (uint16_t)bitpos); + USARTx->SR = (uint16_t)~itmask; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_wwdg.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_wwdg.c new file mode 100644 index 000000000..c893fb383 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_wwdg.c @@ -0,0 +1,309 @@ +/** + ****************************************************************************** + * @file stm32f2xx_wwdg.c + * @author MCD Application Team + * @version V1.1.2 + * @date 05-March-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the Window watchdog (WWDG) peripheral: + * - Prescaler, Refresh window and Counter configuration + * - WWDG activation + * - Interrupts and flags management + * + * @verbatim + * + * =================================================================== + * WWDG features + * =================================================================== + * + * Once enabled the WWDG generates a system reset on expiry of a programmed + * time period, unless the program refreshes the counter (downcounter) + * before to reach 0x3F value (i.e. a reset is generated when the counter + * value rolls over from 0x40 to 0x3F). + * An MCU reset is also generated if the counter value is refreshed + * before the counter has reached the refresh window value. This + * implies that the counter must be refreshed in a limited window. + * + * Once enabled the WWDG cannot be disabled except by a system reset. + * + * WWDGRST flag in RCC_CSR register can be used to inform when a WWDG + * reset occurs. + * + * The WWDG counter input clock is derived from the APB clock divided + * by a programmable prescaler. + * + * WWDG counter clock = PCLK1 / Prescaler + * WWDG timeout = (WWDG counter clock) * (counter value) + * + * Min-max timeout value @30 MHz(PCLK1): ~136.5 us / ~69.9 ms + * + * =================================================================== + * How to use this driver + * =================================================================== + * 1. Enable WWDG clock using RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE) function + * + * 2. Configure the WWDG prescaler using WWDG_SetPrescaler() function + * + * 3. Configure the WWDG refresh window using WWDG_SetWindowValue() function + * + * 4. Set the WWDG counter value and start it using WWDG_Enable() function. + * When the WWDG is enabled the counter value should be configured to + * a value greater than 0x40 to prevent generating an immediate reset. + * + * 5. Optionally you can enable the Early wakeup interrupt which is + * generated when the counter reach 0x40. + * Once enabled this interrupt cannot be disabled except by a system reset. + * + * 6. Then the application program must refresh the WWDG counter at regular + * intervals during normal operation to prevent an MCU reset, using + * WWDG_SetCounter() function. This operation must occur only when + * the counter value is lower than the refresh window value, + * programmed using WWDG_SetWindowValue(). + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_wwdg.h" +#include "stm32f2xx_rcc.h" + +/** @addtogroup STM32F2xx_StdPeriph_Driver + * @{ + */ + +/** @defgroup WWDG + * @brief WWDG driver modules + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* ----------- WWDG registers bit address in the alias region ----------- */ +#define WWDG_OFFSET (WWDG_BASE - PERIPH_BASE) +/* Alias word address of EWI bit */ +#define CFR_OFFSET (WWDG_OFFSET + 0x04) +#define EWI_BitNumber 0x09 +#define CFR_EWI_BB (PERIPH_BB_BASE + (CFR_OFFSET * 32) + (EWI_BitNumber * 4)) + +/* --------------------- WWDG registers bit mask ------------------------ */ +/* CFR register bit mask */ +#define CFR_WDGTB_MASK ((uint32_t)0xFFFFFE7F) +#define CFR_W_MASK ((uint32_t)0xFFFFFF80) +#define BIT_MASK ((uint8_t)0x7F) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup WWDG_Private_Functions + * @{ + */ + +/** @defgroup WWDG_Group1 Prescaler, Refresh window and Counter configuration functions + * @brief Prescaler, Refresh window and Counter configuration functions + * +@verbatim + =============================================================================== + Prescaler, Refresh window and Counter configuration functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the WWDG peripheral registers to their default reset values. + * @param None + * @retval None + */ +void WWDG_DeInit(void) +{ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, DISABLE); +} + +/** + * @brief Sets the WWDG Prescaler. + * @param WWDG_Prescaler: specifies the WWDG Prescaler. + * This parameter can be one of the following values: + * @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1 + * @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2 + * @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4 + * @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8 + * @retval None + */ +void WWDG_SetPrescaler(uint32_t WWDG_Prescaler) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_WWDG_PRESCALER(WWDG_Prescaler)); + /* Clear WDGTB[1:0] bits */ + tmpreg = WWDG->CFR & CFR_WDGTB_MASK; + /* Set WDGTB[1:0] bits according to WWDG_Prescaler value */ + tmpreg |= WWDG_Prescaler; + /* Store the new value */ + WWDG->CFR = tmpreg; +} + +/** + * @brief Sets the WWDG window value. + * @param WindowValue: specifies the window value to be compared to the downcounter. + * This parameter value must be lower than 0x80. + * @retval None + */ +void WWDG_SetWindowValue(uint8_t WindowValue) +{ + __IO uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_WWDG_WINDOW_VALUE(WindowValue)); + /* Clear W[6:0] bits */ + + tmpreg = WWDG->CFR & CFR_W_MASK; + + /* Set W[6:0] bits according to WindowValue value */ + tmpreg |= WindowValue & (uint32_t) BIT_MASK; + + /* Store the new value */ + WWDG->CFR = tmpreg; +} + +/** + * @brief Enables the WWDG Early Wakeup interrupt(EWI). + * @note Once enabled this interrupt cannot be disabled except by a system reset. + * @param None + * @retval None + */ +void WWDG_EnableIT(void) +{ + *(__IO uint32_t *) CFR_EWI_BB = (uint32_t)ENABLE; +} + +/** + * @brief Sets the WWDG counter value. + * @param Counter: specifies the watchdog counter value. + * This parameter must be a number between 0x40 and 0x7F (to prevent generating + * an immediate reset) + * @retval None + */ +void WWDG_SetCounter(uint8_t Counter) +{ + /* Check the parameters */ + assert_param(IS_WWDG_COUNTER(Counter)); + /* Write to T[6:0] bits to configure the counter value, no need to do + a read-modify-write; writing a 0 to WDGA bit does nothing */ + WWDG->CR = Counter & BIT_MASK; +} +/** + * @} + */ + +/** @defgroup WWDG_Group2 WWDG activation functions + * @brief WWDG activation functions + * +@verbatim + =============================================================================== + WWDG activation function + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Enables WWDG and load the counter value. + * @param Counter: specifies the watchdog counter value. + * This parameter must be a number between 0x40 and 0x7F (to prevent generating + * an immediate reset) + * @retval None + */ +void WWDG_Enable(uint8_t Counter) +{ + /* Check the parameters */ + assert_param(IS_WWDG_COUNTER(Counter)); + WWDG->CR = WWDG_CR_WDGA | Counter; +} +/** + * @} + */ + +/** @defgroup WWDG_Group3 Interrupts and flags management functions + * @brief Interrupts and flags management functions + * +@verbatim + =============================================================================== + Interrupts and flags management functions + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Checks whether the Early Wakeup interrupt flag is set or not. + * @param None + * @retval The new state of the Early Wakeup interrupt flag (SET or RESET) + */ +FlagStatus WWDG_GetFlagStatus(void) +{ + FlagStatus bitstatus = RESET; + + if ((WWDG->SR) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears Early Wakeup interrupt flag. + * @param None + * @retval None + */ +void WWDG_ClearFlag(void) +{ + WWDG->SR = (uint32_t)RESET; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/MCD-ST Liberty SW License Agreement V2.pdf b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/MCD-ST Liberty SW License Agreement V2.pdf new file mode 100644 index 000000000..d61f43008 Binary files /dev/null and b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/MCD-ST Liberty SW License Agreement V2.pdf differ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/main.c new file mode 100644 index 000000000..e28877a95 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/main.c @@ -0,0 +1,261 @@ +/** + ****************************************************************************** + * @file ADC/ADC3_DMA/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_lcd.h" +#include + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_ADC3_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* used to display the ADC converted value on LCD */ +#define PRINT_ON_LCD + /* if you are not using the LCD, you can monitor the converted value by adding + the variable "ADC3ConvertedValue" to the debugger watch window */ + +#define ADC3_DR_ADDRESS ((uint32_t)0x4001224C) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint16_t ADC3ConvertedValue = 0; +__IO uint32_t ADC3ConvertedVoltage = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +void ADC3_CH7_DMA_Config(void); + +#ifdef PRINT_ON_LCD +void Display_Init(void); +void Display(void); +#endif /* PRINT_ON_LCD */ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ +#ifdef PRINT_ON_LCD + /* LCD Display init */ + Display_Init(); +#endif + + /* ADC3 configuration *******************************************************/ + /* - Enable peripheral clocks */ + /* - DMA2_Stream0 channel2 configuration */ + /* - Configure ADC Channel7 pin as analog input */ + /* - Configure ADC3 Channel7 */ + ADC3_CH7_DMA_Config(); + + /* Start ADC3 Software Conversion */ + ADC_SoftwareStartConv(ADC3); + + while (1) + { + ADC3ConvertedVoltage = ADC3ConvertedValue *3300/0xFFF; +#ifdef PRINT_ON_LCD + /* Display ADC3 converted value on LCD */ + Display(); +#endif + } +} + + +/** + * @brief ADC3 channel07 with DMA configuration + * @param None + * @retval None + */ +void ADC3_CH7_DMA_Config(void) +{ + ADC_InitTypeDef ADC_InitStructure; + ADC_CommonInitTypeDef ADC_CommonInitStructure; + DMA_InitTypeDef DMA_InitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable ADC3, DMA2 and GPIO clocks ****************************************/ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOF, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE); + + /* DMA2 Stream0 channel2 configuration **************************************/ + DMA_InitStructure.DMA_Channel = DMA_Channel_2; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC3ConvertedValue; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = 1; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA2_Stream0, &DMA_InitStructure); + DMA_Cmd(DMA2_Stream0, ENABLE); + + /* Configure ADC3 Channel7 pin as analog input ******************************/ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; + GPIO_Init(GPIOF, &GPIO_InitStructure); + + /* ADC Common Init **********************************************************/ + ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; + ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; + ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; + ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; + ADC_CommonInit(&ADC_CommonInitStructure); + + /* ADC3 Init ****************************************************************/ + ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; + ADC_InitStructure.ADC_ScanConvMode = DISABLE; + ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; + ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; + ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; + ADC_InitStructure.ADC_NbrOfConversion = 1; + ADC_Init(ADC3, &ADC_InitStructure); + + /* ADC3 regular channel7 configuration *************************************/ + ADC_RegularChannelConfig(ADC3, ADC_Channel_7, 1, ADC_SampleTime_3Cycles); + + /* Enable DMA request after last transfer (Single-ADC mode) */ + ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE); + + /* Enable ADC3 DMA */ + ADC_DMACmd(ADC3, ENABLE); + + /* Enable ADC3 */ + ADC_Cmd(ADC3, ENABLE); +} + +#ifdef PRINT_ON_LCD +/** + * @brief Display ADC converted value on LCD + * @param None + * @retval None + */ +void Display(void) +{ + uint32_t v=0,mv=0; + uint8_t text[50]; + + v=(ADC3ConvertedVoltage)/1000; + mv = (ADC3ConvertedVoltage%1000)/100; + sprintf((char*)text," ADC = %d,%d V ",v,mv); + LCD_DisplayStringLine(LINE(6),text); +} + +/** + * @brief Display Init (LCD) + * @param None + * @retval None + */ +void Display_Init(void) +{ + /* Initialize the LCD */ + STM322xG_LCD_Init(); + + /* Clear the LCD */ + LCD_Clear(White); + + /* Set the LCD Text size */ + LCD_SetFont(&Font8x12); + + /* Set the LCD Back Color and Text Color*/ + LCD_SetBackColor(Blue); + LCD_SetTextColor(White); + + /* Display */ + LCD_DisplayStringLine(LINE(0x13), " ADC conversion w/ DMA transfer example "); + + /* Set the LCD Text size */ + LCD_SetFont(&Font16x24); + + /* Display */ + LCD_DisplayStringLine(LINE(0), "ADC Conversion @2Msps"); + + + /* Set the LCD Back Color and Text Color*/ + LCD_SetBackColor(White); + LCD_SetTextColor(Blue); + + /* Display */ + LCD_DisplayStringLine(LINE(2)," Turn RV1(PF.09) "); + LCD_DisplayStringLine(LINE(4)," Potentiometer "); +} +#endif /* PRINT_ON_LCD */ + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/readme.txt new file mode 100644 index 000000000..f9658d964 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/readme.txt @@ -0,0 +1,81 @@ +/** + @page ADC_ADC3_DMA ADC3 conversion using DMA for Data transfer + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file ADC/ADC3_DMA/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the ADC3 DMA example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example describes how to use the ADC3 and DMA to transfer continuously +converted data from ADC3 to memory. +The ADC3 is configured to convert continuously channel7. +Each time an end of conversion occurs the DMA transfers, in circular mode, the +converted data from ADC3 DR register to the ADC3ConvertedValue variable. + +In this example, the system clock is 120MHz, APB2 =60MHz and ADC clock = APB2 /2. +Since ADC3 clock is 30 MHz and sampling time is set to 3 cycles, the total +conversion time is 0.5 us (2Msps). + +User can vary the ADC3 channel7 voltage using the Eval Board potentiometer +The converted voltage is displayed on the Eval Board LCD (when the define PRINT_ON_LCD +is enabled in main.c) + + +@par Directory contents + + - ADC/ADC3_DMA/system_stm32f2xx.c STM32F2xx system clock configuration file + - ADC/ADC3_DMA/stm32f2xx_conf.h Library Configuration file + - ADC/ADC3_DMA/stm32f2xx_it.c Interrupt handlers + - ADC/ADC3_DMA/stm32f2xx_it.h Interrupt handlers header file + - ADC/ADC3_DMA/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use the Potentiometer (RV1) of the Eval board (connected to PF.09). + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/stm32f2xx_conf.h new file mode 100644 index 000000000..e628d3a42 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file ADC/ADC3_DMA/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/stm32f2xx_it.c new file mode 100644 index 000000000..007e9f34b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/stm32f2xx_it.c @@ -0,0 +1,170 @@ +/** + ****************************************************************************** + * @file ADC/ADC3_DMA/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_ADC3_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/stm32f2xx_it.h new file mode 100644 index 000000000..e7ed20488 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file ADC/ADC3_DMA/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/ADC3_DMA/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/main.c new file mode 100644 index 000000000..85ffed586 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/main.c @@ -0,0 +1,274 @@ +/** + ****************************************************************************** + * @file ADC/DualADC_Interleaved_DMAmode3/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_lcd.h" +#include + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_DualADC_Interleaved_DMAmode3 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* used to display the ADC converted value on LCD */ +#define PRINT_ON_LCD + /* if you are not using the LCD, you can monitor the converted values by adding + the variable "ADCDualConvertedValue" to the debugger watch window */ + +#define ADC_CDR_ADDRESS ((uint32_t)0x40012308) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint16_t ADCDualConvertedValue; + +ADC_InitTypeDef ADC_InitStructure; +ADC_CommonInitTypeDef ADC_CommonInitStructure; +DMA_InitTypeDef DMA_InitStructure; +GPIO_InitTypeDef GPIO_InitStructure; + +/* Private function prototypes -----------------------------------------------*/ +#ifdef PRINT_ON_LCD +void Display_Init(void); +void Display(void); +#endif /* PRINT_ON_LCD */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ +#ifdef PRINT_ON_LCD + /* LCD Display init */ + Display_Init(); +#endif /* PRINT_ON_LCD */ + +/******************************************************************************/ +/* ADCs interface clock, pin and DMA configuration */ +/******************************************************************************/ + + /* Enable peripheral clocks */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, ENABLE); + + /* Configure ADC Channel 12 pin as analog input */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* DMA2 Stream0 channel0 configuration */ + DMA_InitStructure.DMA_Channel = DMA_Channel_0; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CDR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCDualConvertedValue; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = 1; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA2_Stream0, &DMA_InitStructure); + + /* DMA2_Stream0 enable */ + DMA_Cmd(DMA2_Stream0, ENABLE); + +/******************************************************************************/ +/* ADCs configuration: double interleaved with 6cycles delay to reach 5Msps */ +/******************************************************************************/ + + /* ADC Common configuration *************************************************/ + ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_Interl; + ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_6Cycles; + ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_3; + ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; + ADC_CommonInit(&ADC_CommonInitStructure); + + /* DMA mode 3 is used in interleaved mode in 6-bit or 8-bit resolutions */ + ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b; + + /* ADC1 regular channel 12 configuration ************************************/ + ADC_InitStructure.ADC_ScanConvMode = DISABLE; + ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; + ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; + ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; + ADC_InitStructure.ADC_NbrOfConversion = 1; + ADC_Init(ADC1, &ADC_InitStructure); + /* ADC1 regular channel12 configuration */ + ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 1, ADC_SampleTime_3Cycles); + + /* ADC2 regular channel 12 configuration ************************************/ + ADC_Init(ADC2, &ADC_InitStructure); + /* ADC2 regular channel12 configuration */ + ADC_RegularChannelConfig(ADC2, ADC_Channel_12, 1, ADC_SampleTime_3Cycles); + + /* Enable DMA request after last transfer (multi-ADC mode) ******************/ + ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE); + + /* Enable ADC1 **************************************************************/ + ADC_Cmd(ADC1, ENABLE); + + /* Enable ADC2 **************************************************************/ + ADC_Cmd(ADC2, ENABLE); + + /* Start ADC1 Software Conversion */ + ADC_SoftwareStartConv(ADC1); + + while (1) + { +#ifdef PRINT_ON_LCD + /* Display ADCs converted values on LCD */ + Display(); +#endif /* PRINT_ON_LCD */ + } +} + +#ifdef PRINT_ON_LCD +/** + * @brief Display ADCs converted values on LCD + * @param None + * @retval None + */ +void Display(void) +{ + uint32_t Voltage =0, mVoltage=0; + uint8_t text[50]; + __IO uint32_t ADC1ConvertedVoltage; + __IO uint32_t ADC2ConvertedVoltage; + __IO uint8_t ADC1ConvertedValue; + __IO uint8_t ADC2ConvertedValue; + + ADC1ConvertedValue = (ADCDualConvertedValue & 0x00FF); + ADC1ConvertedVoltage = ADC1ConvertedValue *3300/0xFF; + + Voltage = (ADC1ConvertedVoltage)/1000; + mVoltage = (ADC1ConvertedVoltage%1000)/100; + sprintf((char*)text," ADC1 = %d,%d V ",Voltage,mVoltage); + LCD_DisplayStringLine(LINE(6),text); + + + ADC2ConvertedValue = (ADCDualConvertedValue >>8); + ADC2ConvertedVoltage = ADC2ConvertedValue *3300/0xFF; + + Voltage=ADC2ConvertedVoltage/1000; + mVoltage = (ADC2ConvertedVoltage%1000)/100; + sprintf((char*)text," ADC2 = %d,%d V ",Voltage,mVoltage); + LCD_DisplayStringLine(LINE(7),text); +} + +/** + * @brief Display Init (LCD) + * @param None + * @retval None + */ +void Display_Init(void) +{ + +/* Initialize the LCD */ + STM322xG_LCD_Init(); + + /* Clear the LCD */ + LCD_Clear(White); + + /* Set the LCD Text size */ + LCD_SetFont(&Font8x12); + + /* Set the LCD Back Color and Text Color*/ + LCD_SetBackColor(Blue); + LCD_SetTextColor(White); + + LCD_DisplayStringLine(LINE(0x13), " Dual ADC Interleaved DMA mode3 example "); + + + /* Set the LCD Text size */ + LCD_SetFont(&Font16x24); + + LCD_DisplayStringLine(LINE(0), "ADC Ch12 Conv 5Msps "); + + + /* Set the LCD Back Color and Text Color*/ + LCD_SetBackColor(White); + LCD_SetTextColor(Blue); + + LCD_DisplayStringLine(LINE(2)," Connect voltage to "); + LCD_DisplayStringLine(LINE(3)," ADC Ch12 (PC.02) "); +} +#endif /* PRINT_ON_LCD */ + + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/readme.txt new file mode 100644 index 000000000..def2f4998 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/readme.txt @@ -0,0 +1,93 @@ +/** + @page DualADC_Interleaved_DMAmode3 Use ADC1 and ADC2 in Dual interleaved mode and DMA mode3 + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file ADC/DualADC_Interleaved_DMAmode3/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the Dual interleaved mode and DMA mode3 Example + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the ADC peripheral to +convert a regular channel in Dual interleaved mode using DMA in mode 3 with 5Msps. + +DMA mode 3 is used in interleaved mode in 6-bit and 8-bit resolutions. + +The Dual interleaved delay is configured 6 ADC clk cycles. + +On each DMA request (two data items are available) two bytes representing two +ADC-converted data items are transferred as a half word. +The data transfer order is similar to that of the DMA mode 2. + +A DMA request is generated each time 2 data items are available +1st request: ADC_CDR[15:0] = (ADC2_DR[7:0] << 8) | ADC1_DR[7:0] +2nd request: ADC_CDR[15:0] = (ADC2_DR[7:0] << 8) | ADC1_DR[7:0] + +The ADC1 and ADC2 are configured to convert ADC Channel 12, with conversion +triggered by software. +By this way, ADC channel 12 is converted each 6 cycles. + +In this example, the system clock is 120MHz, APB2 =60MHz and ADC clock = APB2 /2. +Since ADCCLK= 30MHz and Conversion rate = 6 cycle +==> Conversion Time = 30M/6cyc = 5Msps. + +@note Refer to "simulation.xls" file to have the diagram simulation of the example. + + +@par Directory contents + + - ADC/DualADC_Interleaved_DMAmode3/system_stm32f2xx.c STM32F2xx system clock configuration file + - ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_conf.h Library Configuration file + - ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.h Interrupt handlers header file + - ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.c Interrupt handlers + - ADC/DualADC_Interleaved_DMAmode3/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + - STM322xG-EVAL Set-up + - Connect PC.2 to a power supply (do not forget to connect the power supply + GND to the EVAL board GND) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/simulation.xls b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/simulation.xls new file mode 100644 index 000000000..14cac4a57 Binary files /dev/null and b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/simulation.xls differ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_conf.h new file mode 100644 index 000000000..acbcd1d6c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.c new file mode 100644 index 000000000..1626c7062 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.c @@ -0,0 +1,174 @@ +/** + ****************************************************************************** + * @file ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_DualADC_Interleaved_DMAmode3 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.h new file mode 100644 index 000000000..d8a4d2970 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file ADC/DualADC_Interleaved_DMAmode3/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_Interleaved_DMAmode3/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/main.c new file mode 100644 index 000000000..bc161d6b8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/main.c @@ -0,0 +1,234 @@ +/** + ****************************************************************************** + * @file ADC/DualADC_RegulSimu_DMAmode1/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_DualADC_RegulSimu_DMAmode1 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define ADC_CCR_ADDRESS ((uint32_t)0x40012308) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint16_t ADCDualConvertedValue[4]; + +/* Private function prototypes -----------------------------------------------*/ +void DMA_Config(void); +void GPIO_Config(void); +void ADC1_CH10_CH11_Config(void); +void ADC2_CH11_CH12_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + ADC_CommonInitTypeDef ADC_CommonInitStructure; + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Enable peripheral clocks *************************************************/ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_ADC2, ENABLE); + + /* DMA2 Stream0 channel0 configuration **************************************/ + DMA_Config(); + + /* ADCs configuration ------------------------------------------------------*/ + /* Configure ADC Channel10, 11, 12 pin as analog input */ + GPIO_Config(); + + /* ADC Common Init */ + ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_RegSimult; + ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; + ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; + ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; + ADC_CommonInit(&ADC_CommonInitStructure); + + /* ADC1 regular channels 10, 11 configuration */ + ADC1_CH10_CH11_Config(); + + /* ADC2 regular channels 11, 12 configuration */ + ADC2_CH11_CH12_Config(); + + /* Enable DMA request after last transfer (Multi-ADC mode) */ + ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE); + + /* Enable ADC1 */ + ADC_Cmd(ADC1, ENABLE); + + /* Enable ADC2 */ + ADC_Cmd(ADC2, ENABLE); + + /* Start ADC1 Software Conversion */ + ADC_SoftwareStartConv(ADC1); + + while (1) + { + } +} + +/** + * @brief ADC1 regular channels 10 and 11 configuration + * @param None + * @retval None + */ +void ADC1_CH10_CH11_Config(void) +{ + ADC_InitTypeDef ADC_InitStructure; + + ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; + ADC_InitStructure.ADC_ScanConvMode = ENABLE; + ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; + ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; + ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; + ADC_InitStructure.ADC_NbrOfConversion = 2; + ADC_Init(ADC1, &ADC_InitStructure); + + /* ADC1 regular channels 10, 11 configuration */ + ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_3Cycles); + ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_3Cycles); +} + +/** + * @brief ADC2 regular channels 11, 12 configuration + * @param None + * @retval None + */ +void ADC2_CH11_CH12_Config(void) +{ + ADC_InitTypeDef ADC_InitStructure; + + ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; + ADC_InitStructure.ADC_ScanConvMode = ENABLE; + ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; + ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; + ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; + ADC_InitStructure.ADC_NbrOfConversion = 2; + ADC_Init(ADC2, &ADC_InitStructure); + + /* ADC2 regular channels 11, 12 configuration */ + ADC_RegularChannelConfig(ADC2, ADC_Channel_11, 1, ADC_SampleTime_3Cycles); + ADC_RegularChannelConfig(ADC2, ADC_Channel_12, 2, ADC_SampleTime_3Cycles); +} + +/** + * @brief DMA Configuration + * @param None + * @retval None + */ +void DMA_Config(void) +{ + DMA_InitTypeDef DMA_InitStructure; + + DMA_InitStructure.DMA_Channel = DMA_Channel_0; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCDualConvertedValue; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CCR_ADDRESS; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = 4; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA2_Stream0, &DMA_InitStructure); + + /* DMA2_Stream0 enable */ + DMA_Cmd(DMA2_Stream0, ENABLE); +} + +/** + * @brief Configure ADC Channels 10, 11, 12 pins as analog inputs + * @param None + * @retval None + */ +void GPIO_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + /* ADC Channel 10 -> PC0 + ADC Channel 11 -> PC1 + ADC Channel 12 -> PC2 + */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; + GPIO_Init(GPIOC, &GPIO_InitStructure); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/readme.txt new file mode 100644 index 000000000..dddf6a163 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/readme.txt @@ -0,0 +1,94 @@ +/** + @page DualADC_RegulSimu_DMAmode1 Use ADC1 and ADC2 in Dual regular simultaneous mode and DMA mode1 + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file ADC/DualADC_RegulSimu_DMAmode1/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the Dual regular simultaneous mode and DMA mode1 + * Example + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the ADC peripheral to +convert regular channels simultaneously in dual mode using DMA in mode 1. + +Regular simultaneous mode is performed on a regular group of channels. +In Dual ADC mode, ADC1 data are transferred on the first request, ADC2 data are +transferred on the second request and so on. +On each DMA request (one data item is available), a half-word representing an +ADC-converted data item is transferred. +The conversion is triggered by software. + +The ADC1 is configured to convert ADC Channel 10 and 11. +The ADC2 is configured to convert ADC Channel 11 and 12. + +Note: the sequence length must be the same for both ADCs + +In this example, the system clock is 120MHz, APB2 =60MHz and ADC clock = APB2 /2. +So ADCCLK= 30MHz + +Conversion rate of channel 10 and 12 = 30 cycles => Conversion Time = 30M/30cyc = 1Msps. +Conversion rate of channel 11 = 15 cycles => Conversion Time = 30M/15cyc = 2Msps. + +@note Refer to "simulation.xls" file to have the diagram simulation of the example. + + +@par Directory contents + + - ADC/DualADC_RegulSimu_DMAmode1/system_stm32f2xx.c STM32F2xx system clock configuration file + - ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_conf.h Library Configuration file + - ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.h Interrupt handlers header file + - ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.c Interrupt handlers + - ADC/DualADC_RegulSimu_DMAmode1/main.c Main program + + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect PC.0, PC.1 and PC.2 to a power supply (do not forget to connect the + power supply GND to the EVAL board GND) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/simulation.xls b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/simulation.xls new file mode 100644 index 000000000..c14afef64 Binary files /dev/null and b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/simulation.xls differ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_conf.h new file mode 100644 index 000000000..a022d13b4 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.c new file mode 100644 index 000000000..555d0b3fb --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_DualADC_RegulSimu_DMAmode1 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.h new file mode 100644 index 000000000..33d0f7625 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file ADC/DualADC_RegulSimu_DMAmode1/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/DualADC_RegulSimu_DMAmode1/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/main.c new file mode 100644 index 000000000..bcc74a36f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/main.c @@ -0,0 +1,187 @@ +/** + ****************************************************************************** + * @file ADC/TripleADC_Interleaved_DMAmode2/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_TripleADC_Interleaved_DMAmode2 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define ADC_CDR_ADDRESS ((uint32_t)0x40012308) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t ADCTripleConvertedValue[3]; + +ADC_InitTypeDef ADC_InitStructure; +ADC_CommonInitTypeDef ADC_CommonInitStructure; +DMA_InitTypeDef DMA_InitStructure; +GPIO_InitTypeDef GPIO_InitStructure; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + +/******************************************************************************/ +/* ADCs interface clock, pin and DMA configuration */ +/******************************************************************************/ + + /* Enable peripheral clocks */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | + RCC_APB2Periph_ADC3, ENABLE); + + /* Configure ADC Channel 12 pin as analog input */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* DMA2 Stream0 channel0 configuration */ + DMA_InitStructure.DMA_Channel = DMA_Channel_0; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CDR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCTripleConvertedValue; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = 3; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA2_Stream0, &DMA_InitStructure); + + /* DMA2_Stream0 enable */ + DMA_Cmd(DMA2_Stream0, ENABLE); + + +/******************************************************************************/ +/* ADCs configuration: triple interleaved with 5cycles delay to reach 6Msps */ +/******************************************************************************/ + + /* ADC Common configuration *************************************************/ + ADC_CommonInitStructure.ADC_Mode = ADC_TripleMode_Interl; + ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; + ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_2; + ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; + ADC_CommonInit(&ADC_CommonInitStructure); + + /* ADC1 regular channel 12 configuration ************************************/ + ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; + ADC_InitStructure.ADC_ScanConvMode = DISABLE; + ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; + ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; + ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; + ADC_InitStructure.ADC_NbrOfConversion = 1; + ADC_Init(ADC1, &ADC_InitStructure); + + ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 1, ADC_SampleTime_3Cycles); + + /* ADC2 regular channel 12 configuration ************************************/ + ADC_Init(ADC2, &ADC_InitStructure); + /* ADC2 regular channel12 configuration */ + ADC_RegularChannelConfig(ADC2, ADC_Channel_12, 1, ADC_SampleTime_3Cycles); + + /* ADC3 regular channel 12 configuration ************************************/ + ADC_Init(ADC3, &ADC_InitStructure); + /* ADC3 regular channel12 configuration */ + ADC_RegularChannelConfig(ADC3, ADC_Channel_12, 1, ADC_SampleTime_3Cycles); + + /* Enable DMA request after last transfer (multi-ADC mode) ******************/ + ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE); + + /* Enable ADC1 **************************************************************/ + ADC_Cmd(ADC1, ENABLE); + + /* Enable ADC2 **************************************************************/ + ADC_Cmd(ADC2, ENABLE); + + /* Enable ADC3 **************************************************************/ + ADC_Cmd(ADC3, ENABLE); + + /* Start ADC1 Software Conversion */ + ADC_SoftwareStartConv(ADC1); + + while (1) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/readme.txt new file mode 100644 index 000000000..944147319 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/readme.txt @@ -0,0 +1,105 @@ +/** + @page TripleADC_Interleaved_DMAmode2 Use ADC1, ADC2 and ADC3 in Triple interleaved mode and DMA mode2 with 6Msps + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file ADC/TripleADC_Interleaved_DMAmode2/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the Triple interleaved mode and DMA mode2 Example + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the ADC peripheral to +convert a regular channel in Triple interleaved mode using DMA in mode 2 with +6Msps . + +The Triple interleaved delay is configured 5 ADC clk cycles. + +In Triple ADC mode, three DMA requests are generated: +- On the first request, both ADC2 and ADC1 data are transferred (ADC2 data take + the upper half-word and ADC1 data take the lower half-word). +- On the second request, both ADC1 and ADC3 data are transferred (ADC1 data take + the upper half-word and ADC3 data take the lower half-word). +- On the third request, both ADC3 and ADC2 data are transferred (ADC3 data take + the upper half-word and ADC2 data take the lower half-word) and so on. + +On each DMA request (two data items are available) two half-words representing +two ADC-converted data items are transferred as a word. + +A DMA request is generated each time 2 data items are available : +1st request: ADC_CDR[31:0] = (ADC2_DR[15:0] << 16) | ADC1_DR[15:0] (step1) +2nd request: ADC_CDR[31:0] = (ADC1_DR[15:0] << 16) | ADC3_DR[15:0] (step2) +3rd request: ADC_CDR[31:0] = (ADC3_DR[15:0] << 16) | ADC2_DR[15:0] (step3) +4th request: ADC_CDR[31:0] = (ADC2_DR[15:0] << 16) | ADC1_DR[15:0] (step1) and so on. + +The conversion is triggered by software. + +The ADC1, ADC2 and ADC3 are configured to convert ADC Channel 12. +By this way, the ADC can reach 6Msps, in fact the same channel is converted +each 5 cycles + +In this example, the system clock is 120MHz, APB2 = 60MHz and ADC clock = APB2 /2. +Since ADCCLK= 30MHz and Conversion rate = 5 cycles +==> Conversion Time = 30M/5cyc = 6Msps + +@note Refer to "simulation.xls" file to have the diagram simulation of the example. + + +@par Directory contents + + - ADC/TripleADC_Interleaved_DMAmode2/system_stm32f2xx.c STM32F2xx system clock configuration file + - ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_conf.h Library Configuration file + - ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.h Interrupt handlers header file + - ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.c Interrupt handlers + - ADC/TripleADC_Interleaved_DMAmode2/main.c Main program + + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect PC.2 to a power supply (do not forget to connect the power supply GND + to the EVAL board GND) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/simulation.xls b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/simulation.xls new file mode 100644 index 000000000..89ff21d21 Binary files /dev/null and b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/simulation.xls differ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_conf.h new file mode 100644 index 000000000..874d423b7 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.c new file mode 100644 index 000000000..15cc61d5b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_TripleADC_Interleaved_DMAmode2 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.h new file mode 100644 index 000000000..0f48f141e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file ADC/TripleADC_Interleaved_DMAmode2/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/TripleADC_Interleaved_DMAmode2/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/main.c new file mode 100644 index 000000000..f06197845 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/main.c @@ -0,0 +1,270 @@ +/** + ****************************************************************************** + * @file ADC/VBAT_Measurement/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_lcd.h" +#include + + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_VBAT_Measurement + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* used to display the ADC converted value on LCD */ +#define PRINT_ON_LCD + /* if you are not using the LCD, you can monitor the converted value by adding + the variable "ADCConvertedValue" to the debugger watch window */ + +#define ADC1_DR_ADDRESS ((uint32_t)0x4001204C) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint16_t ADCConvertedValue = 0; +__IO uint32_t VBATVoltage = 0; + +/* Private function prototypes -----------------------------------------------*/ +void ADC1_ChVbat_DMA_Config(void); + +#ifdef PRINT_ON_LCD +void Display_Init(void); +void Display(void); +static void delay(__IO uint32_t nCount); +#endif /* PRINT_ON_LCD */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ +#ifdef PRINT_ON_LCD + /* LCD Display init */ + Display_Init(); +#endif /* PRINT_ON_LCD */ + + /* ADC1 Channel Vbat configuration */ + ADC1_ChVbat_DMA_Config(); + + /* Start ADC1 Software Conversion */ + ADC_SoftwareStartConv(ADC1); + + while (1) + { +#ifdef PRINT_ON_LCD + /* Display ADC converted value on LCD */ + Display(); +#endif /* PRINT_ON_LCD */ + } +} + +/** + * @brief ADC1 Channel Vbat configuration (DMA, ADC, CLK) + * @param None + * @retval None + */ +void ADC1_ChVbat_DMA_Config(void) +{ + ADC_InitTypeDef ADC_InitStructure; + ADC_CommonInitTypeDef ADC_CommonInitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /* Enable peripheral clocks *************************************************/ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); + + /* DMA2_Stream0 channel0 configuration **************************************/ + DMA_DeInit(DMA2_Stream0); + DMA_InitStructure.DMA_Channel = DMA_Channel_0; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = 1; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA2_Stream0, &DMA_InitStructure); + /* DMA2_Stream0 enable */ + DMA_Cmd(DMA2_Stream0, ENABLE); + + /* ADC Common Init **********************************************************/ + ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; + ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; + ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; + ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; + ADC_CommonInit(&ADC_CommonInitStructure); + + /* ADC1 Init ****************************************************************/ + ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; + ADC_InitStructure.ADC_ScanConvMode = DISABLE; + ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; + ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; + ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; + ADC_InitStructure.ADC_NbrOfConversion = 1; + ADC_Init(ADC1, &ADC_InitStructure); + + /* Enable ADC1 DMA */ + ADC_DMACmd(ADC1, ENABLE); + + /* ADC1 regular channel18 (VBAT) configuration ******************************/ + ADC_RegularChannelConfig(ADC1, ADC_Channel_Vbat, 1, ADC_SampleTime_15Cycles); + + /* Enable VBAT channel */ + ADC_VBATCmd(ENABLE); + + /* Enable DMA request after last transfer (Single-ADC mode) */ + ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); + + /* Enable ADC1 **************************************************************/ + ADC_Cmd(ADC1, ENABLE); +} + +#ifdef PRINT_ON_LCD +/** + * @brief Display ADC converted value on LCD + * @param None + * @retval None + */ +void Display(void) +{ + uint32_t vbatV=0,vbatmV=0; + uint8_t text[50]; + + /*The VBAT pin is internally connected to a bridge divider by 2 */ + VBATVoltage = (ADCConvertedValue*2)*3300/0xFFF; + vbatV=VBATVoltage/1000; + vbatmV = (VBATVoltage%1000)/100; + sprintf((char*)text," %d,%d V ",vbatV,vbatmV); + LCD_DisplayStringLine(LINE(6),text); + + delay(100); +} + +/** + * @brief Display Init (LCD) + * @param None + * @retval None + */ +void Display_Init(void) +{ + + /* Initialize the LCD */ + STM322xG_LCD_Init(); + + /* Clear the LCD */ + LCD_Clear(White); + + /* Set the LCD Text size */ + LCD_SetFont(&Font8x12); + + /* Set the LCD Back Color and Text Color*/ + LCD_SetBackColor(Blue); + LCD_SetTextColor(White); + + LCD_DisplayStringLine(LINE(0x13), " STM32F2xx ADC1 VBAT Measurement example"); + + /* Set the LCD Text size */ + LCD_SetFont(&Font16x24); + + LCD_DisplayStringLine(LINE(0), "**VBAT Measurement**"); + + /* Set the LCD Back Color and Text Color*/ + LCD_SetBackColor(White); + LCD_SetTextColor(Blue); + + LCD_DisplayStringLine(LINE(2)," Eval Board Instant "); + LCD_DisplayStringLine(LINE(4)," Battery Voltage "); +} + +/** + * @brief Inserts a delay time + * @param nCount: specifies the delay time length + * @retval None + */ +static void delay(__IO uint32_t nCount) +{ + __IO uint32_t index = 0; + for(index = (100000 * nCount); index != 0; index--) + { + } +} +#endif /* PRINT_ON_LCD */ + + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/readme.txt new file mode 100644 index 000000000..d2c303f24 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/readme.txt @@ -0,0 +1,86 @@ +/** + @page ADC_VBAT_Measurement ADC_VBAT_Measurement + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file ADC/VBAT_Measurement/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the ADC1 VBAT Measurement example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example describes how to measure VBAT voltage using ADC1 regular channel 18. +In fact, the measured value correspond to VBAT/2; as the VBAT voltage could be higher +than VDDA, to ensure the correct operation of the ADC, the VBAT pin is internally +connected to a bridge divider by 2. + +In this example the VBAT/2 voltage is continuously converted, each time an end +of conversion occurs the DMA transfers, in circular mode, the converted data from +ADC1 DR register to the ADCConvertedValue variable. +However, in real application to prevent any unwanted consumption on the battery, +it is recommended to enable the bridge divider only when needed for ADC +conversion then disable it. + +User can display the VBAT voltage on the Eval Board LCD (when the define PRINT_ON_LCD +is enabled in main.c) + +In this example, the system clock is 120MHz, APB2 =60MHz and ADC clock = APB2 /2. +So ADCCLK= 30MHz + +Conversion rate of Vbat channel = Sampling Time + Conversion Time = 15 + 12 cycles + = 27 cycles ==> Conversion Time = 30MHz/27cyc = 1.11Msps. + + +@par Directory contents + + - ADC/VBAT_Measurement/system_stm32f2xx.c STM32F2xx system clock configuration file + - ADC/VBAT_Measurement/stm32f2xx_conf.h Library Configuration file + - ADC/VBAT_Measurement/stm32f2xx_it.c Interrupt handlers + - ADC/VBAT_Measurement/stm32f2xx_it.h Interrupt handlers header file + - ADC/VBAT_Measurement/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/stm32f2xx_conf.h new file mode 100644 index 000000000..4e892df09 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file ADC/VBAT_Measurement/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/stm32f2xx_it.c new file mode 100644 index 000000000..3f090a8b7 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/stm32f2xx_it.c @@ -0,0 +1,170 @@ +/** + ****************************************************************************** + * @file ADC/VBAT_Measurement/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup ADC_VBAT_Measurement + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/stm32f2xx_it.h new file mode 100644 index 000000000..633ec0a8b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file ADC/VBAT_Measurement/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/ADC/VBAT_Measurement/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/main.c new file mode 100644 index 000000000..8fe878266 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/main.c @@ -0,0 +1,359 @@ +/** + ****************************************************************************** + * @file CAN/LoopBack/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CAN_LoopBack + * @{ + */ + +/* Private define ------------------------------------------------------------*/ +/* Private typedef -----------------------------------------------------------*/ +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t ret = 0; /* for return of the interrupt handling */ +volatile TestStatus TestRx; + +/* Private function prototypes -----------------------------------------------*/ +void NVIC_Config(void); +TestStatus CAN_Polling(void); +TestStatus CAN_Interrupt(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + +#ifdef USE_CAN1 + /* CANx Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); +#else /* USE_CAN2 */ + /* CAN1 & 2 Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1 | RCC_APB1Periph_CAN2, ENABLE); +#endif /* USE_CAN1 */ + + /* NVIC Configuration */ + NVIC_Config(); + + /* Configures LED 1..4 */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* CAN transmit at 125Kb/s and receive by polling in loopback mode */ + TestRx = CAN_Polling(); + + if (TestRx != FAILED) + { /* OK */ + + /* Turn on LED1 */ + STM_EVAL_LEDOn(LED1); + } + else + { /* KO */ + + /* Turn on LED3 */ + STM_EVAL_LEDOn(LED3); + } + + /* CAN transmit at 500Kb/s and receive by interrupt in loopback mode */ + TestRx = CAN_Interrupt(); + + if (TestRx != FAILED) + { /* OK */ + + /* Turn on LED4 */ + STM_EVAL_LEDOn(LED4); + } + else + { /* KO */ + + /* Turn on LED2 */ + STM_EVAL_LEDOn(LED2); + } + + /* Infinite loop */ + while (1) + { + } +} + +/** + * @brief Configures the CAN, transmit and receive by polling + * @param None + * @retval PASSED if the reception is well done, FAILED in other case + */ +TestStatus CAN_Polling(void) +{ + CAN_InitTypeDef CAN_InitStructure; + CAN_FilterInitTypeDef CAN_FilterInitStructure; + CanTxMsg TxMessage; + CanRxMsg RxMessage; + uint32_t i = 0; + uint8_t TransmitMailbox = 0; + + /* CAN register init */ + CAN_DeInit(CANx); + + /* CAN cell init */ + CAN_InitStructure.CAN_TTCM = DISABLE; + CAN_InitStructure.CAN_ABOM = DISABLE; + CAN_InitStructure.CAN_AWUM = DISABLE; + CAN_InitStructure.CAN_NART = DISABLE; + CAN_InitStructure.CAN_RFLM = DISABLE; + CAN_InitStructure.CAN_TXFP = DISABLE; + CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack; + CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; + + /* CAN Baudrate = 125kbps (CAN clocked at 30 MHz) */ + CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; + CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; + CAN_InitStructure.CAN_Prescaler = 16; + CAN_Init(CANx, &CAN_InitStructure); + + /* CAN filter init */ +#ifdef USE_CAN1 + CAN_FilterInitStructure.CAN_FilterNumber = 0; +#else /* USE_CAN2 */ + CAN_FilterInitStructure.CAN_FilterNumber = 14; +#endif /* USE_CAN1 */ + CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; + CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; + CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; + CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; + CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; + CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; + CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; + + CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; + CAN_FilterInit(&CAN_FilterInitStructure); + + /* transmit */ + TxMessage.StdId = 0x11; + TxMessage.RTR = CAN_RTR_DATA; + TxMessage.IDE = CAN_ID_STD; + TxMessage.DLC = 2; + TxMessage.Data[0] = 0xCA; + TxMessage.Data[1] = 0xFE; + + TransmitMailbox = CAN_Transmit(CANx, &TxMessage); + i = 0; + while((CAN_TransmitStatus(CANx, TransmitMailbox) != CANTXOK) && (i != 0xFFFF)) + { + i++; + } + + i = 0; + while((CAN_MessagePending(CANx, CAN_FIFO0) < 1) && (i != 0xFFFF)) + { + i++; + } + + /* receive */ + RxMessage.StdId = 0x00; + RxMessage.IDE = CAN_ID_STD; + RxMessage.DLC = 0; + RxMessage.Data[0] = 0x00; + RxMessage.Data[1] = 0x00; + CAN_Receive(CANx, CAN_FIFO0, &RxMessage); + + if (RxMessage.StdId != 0x11) + { + return FAILED; + } + + if (RxMessage.IDE != CAN_ID_STD) + { + return FAILED; + } + + if (RxMessage.DLC != 2) + { + return FAILED; + } + + if ((RxMessage.Data[0]<<8|RxMessage.Data[1]) != 0xCAFE) + { + return FAILED; + } + + return PASSED; /* Test Passed */ +} + +/** + * @brief Configures the CAN, transmit and receive using interrupt. + * @param None + * @retval PASSED if the reception is well done, FAILED in other case + */ +TestStatus CAN_Interrupt(void) +{ + CAN_InitTypeDef CAN_InitStructure; + CAN_FilterInitTypeDef CAN_FilterInitStructure; + CanTxMsg TxMessage; + uint32_t i = 0; + + /* CAN register init */ + CAN_DeInit(CANx); + + /* CAN cell init */ + CAN_InitStructure.CAN_TTCM = DISABLE; + CAN_InitStructure.CAN_ABOM = DISABLE; + CAN_InitStructure.CAN_AWUM = DISABLE; + CAN_InitStructure.CAN_NART = DISABLE; + CAN_InitStructure.CAN_RFLM = DISABLE; + CAN_InitStructure.CAN_TXFP = DISABLE; + CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack; + CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; + + /* Baudrate = 500 Kbps */ + CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; + CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; + CAN_InitStructure.CAN_Prescaler = 4; + CAN_Init(CANx, &CAN_InitStructure); + + /* CAN filter init */ +#ifdef USE_CAN1 + CAN_FilterInitStructure.CAN_FilterNumber = 1; +#else /* USE_CAN2 */ + CAN_FilterInitStructure.CAN_FilterNumber = 15; +#endif /* USE_CAN1 */ + CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; + CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; + CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; + CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; + CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; + CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; + CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0; + CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; + CAN_FilterInit(&CAN_FilterInitStructure); + + /* CAN FIFO0 message pending interrupt enable */ + CAN_ITConfig(CANx, CAN_IT_FMP0, ENABLE); + + /* transmit 1 message */ + TxMessage.StdId = 0; + TxMessage.ExtId = 0x1234; + TxMessage.IDE = CAN_ID_EXT; + TxMessage.RTR = CAN_RTR_DATA; + TxMessage.DLC = 2; + TxMessage.Data[0] = 0xDE; + TxMessage.Data[1] = 0xCA; + CAN_Transmit(CANx, &TxMessage); + + /* initialize the value that will be returned */ + ret = 0xFF; + + /* receive message with interrupt handling */ + i = 0; + while((ret == 0xFF) && (i < 0xFFF)) + { + i++; + } + + if (i == 0xFFF) + { + ret = 0; + } + + /* disable interrupt handling */ + CAN_ITConfig(CANx, CAN_IT_FMP0, DISABLE); + + return (TestStatus)ret; +} + +/** + * @brief Configures the NVIC. + * @param None + * @retval None + */ +void NVIC_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + + /* Enable CANx RX0 interrupt IRQ channel */ +#ifdef USE_CAN1 + NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; +#else /* USE_CAN2 */ + NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn; +#endif /* USE_CAN1 */ + + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/main.h new file mode 100644 index 000000000..b75df6e52 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/main.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file CAN/LoopBack/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +#define USE_CAN1 +/* #define USE_CAN2 */ + +#ifdef USE_CAN1 + #define CANx CAN1 +#else /* USE_CAN2 */ + #define CANx CAN2 +#endif /* USE_CAN1 */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/readme.txt new file mode 100644 index 000000000..a2be4e768 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/readme.txt @@ -0,0 +1,85 @@ +/** + @page CAN_LoopBack CAN LoopBack example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file CAN/LoopBack/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the CAN LoopBack example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a description of how to set a communication with the CAN +in loopback mode. + +The CAN cell first performs a transmission and a reception of a standard data +frame by polling at 125 Kbps. The received frame is checked and some LEDs light +up to indicate whether the communication was successful. Then, an extended data +frame is transmitted at 500 Kbps. Reception is done in the interrupt handler +when the message becomes pending in the FIFO. Finally, the LEDs indicate if both +transmission and reception have been successful. + +User can select CAN1 or CAN2 cell using the defines in main.h : +@code +#define USE_CAN1 +/* #define USE_CAN2*/ +@endcode + + +@par Directory contents + + - CAN/LoopBack/system_stm32f2xx.c STM32F2xx system clock configuration file + - CAN/LoopBack/stm32f2xx_conf.h Library Configuration file + - CAN/LoopBack/stm32f2xx_it.h Interrupt handlers header file + - CAN/LoopBack/stm32f2xx_it.c Interrupt handlers + - CAN/LoopBack/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/stm32f2xx_conf.h new file mode 100644 index 000000000..92615b9f5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CAN/LoopBack/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/stm32f2xx_it.c new file mode 100644 index 000000000..a02658f26 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/stm32f2xx_it.c @@ -0,0 +1,240 @@ +/** + ****************************************************************************** + * @file CAN/LoopBack/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CAN_LoopBack + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint32_t ret; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +#ifdef USE_CAN1 +/** + * @brief This function handles CAN1 RX0 request. + * @param None + * @retval None + */ +void CAN1_RX0_IRQHandler(void) +{ + CanRxMsg RxMessage; + + RxMessage.StdId = 0x00; + RxMessage.ExtId = 0x00; + RxMessage.IDE = 0; + RxMessage.DLC = 0; + RxMessage.FMI = 0; + RxMessage.Data[0] = 0x00; + RxMessage.Data[1] = 0x00; + + CAN_Receive(CAN1, CAN_FIFO0, &RxMessage); + + if((RxMessage.ExtId == 0x1234) && (RxMessage.IDE == CAN_ID_EXT) + && (RxMessage.DLC == 2) && ((RxMessage.Data[1]|RxMessage.Data[0]<<8) == 0xDECA)) + { + ret = 1; + } + else + { + ret = 0; + } +} +#endif /* USE_CAN1 */ + +#ifdef USE_CAN2 +/** + * @brief This function handles CAN2 RX0 request. + * @param None + * @retval None + */ +void CAN2_RX0_IRQHandler(void) +{ + CanRxMsg RxMessage; + + RxMessage.StdId = 0x00; + RxMessage.ExtId = 0x00; + RxMessage.IDE = 0; + RxMessage.DLC = 0; + RxMessage.FMI = 0; + RxMessage.Data[0] = 0x00; + RxMessage.Data[1] = 0x00; + + CAN_Receive(CAN2, CAN_FIFO0, &RxMessage); + + if((RxMessage.ExtId == 0x1234) && (RxMessage.IDE == CAN_ID_EXT) + && (RxMessage.DLC == 2) && ((RxMessage.Data[1]|RxMessage.Data[0]<<8) == 0xDECA)) + { + ret = 1; + } + else + { + ret = 0; + } +} +#endif /* USE_CAN2 */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/stm32f2xx_it.h new file mode 100644 index 000000000..f1bf968d5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/stm32f2xx_it.h @@ -0,0 +1,62 @@ +/** + ****************************************************************************** + * @file CAN/LoopBack/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void CAN1_RX0_IRQHandler(void); +void CAN2_RX0_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/LoopBack/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/main.c new file mode 100644 index 000000000..f08f32a90 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/main.c @@ -0,0 +1,308 @@ +/** + ****************************************************************************** + * @file CAN/Networking/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CAN_Networking + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define KEY_PRESSED 0x00 +#define KEY_NOT_PRESSED 0x01 + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +CAN_InitTypeDef CAN_InitStructure; +CAN_FilterInitTypeDef CAN_FilterInitStructure; +CanTxMsg TxMessage; +uint8_t KeyNumber = 0x0; + +/* Private function prototypes -----------------------------------------------*/ +void NVIC_Config(void); +void CAN_Config(void); +void Init_RxMes(CanRxMsg *RxMessage); +void Delay(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* NVIC configuration */ + NVIC_Config(); + + /* Configures LED 1..4 */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Configure Push button key */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); + + /* CAN configuration */ + CAN_Config(); + + /* Infinite loop */ + while(1) + { + while(STM_EVAL_PBGetState(BUTTON_KEY) == KEY_PRESSED) + { + if(KeyNumber == 0x4) + { + KeyNumber = 0x00; + } + else + { + LED_Display(++KeyNumber); + TxMessage.Data[0] = KeyNumber; + CAN_Transmit(CANx, &TxMessage); + Delay(); + + while(STM_EVAL_PBGetState(BUTTON_KEY) != KEY_NOT_PRESSED) + { + } + } + } + } +} + +/** + * @brief Configures the CAN. + * @param None + * @retval None + */ +void CAN_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* CAN GPIOs configuration **************************************************/ + + /* Enable GPIO clock */ + RCC_AHB1PeriphClockCmd(CAN_GPIO_CLK, ENABLE); + + /* Connect CAN pins to AF9 */ + GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_RX_SOURCE, CAN_AF_PORT); + GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_TX_SOURCE, CAN_AF_PORT); + + /* Configure CAN RX and TX pins */ + GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN | CAN_TX_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(CAN_GPIO_PORT, &GPIO_InitStructure); + + /* CAN configuration ********************************************************/ + /* Enable CAN clock */ + RCC_APB1PeriphClockCmd(CAN_CLK, ENABLE); + + /* CAN register init */ + CAN_DeInit(CANx); + + /* CAN cell init */ + CAN_InitStructure.CAN_TTCM = DISABLE; + CAN_InitStructure.CAN_ABOM = DISABLE; + CAN_InitStructure.CAN_AWUM = DISABLE; + CAN_InitStructure.CAN_NART = DISABLE; + CAN_InitStructure.CAN_RFLM = DISABLE; + CAN_InitStructure.CAN_TXFP = DISABLE; + CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; + CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; + + /* CAN Baudrate = 1MBps (CAN clocked at 30 MHz) */ + CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; + CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; + CAN_InitStructure.CAN_Prescaler = 2; + CAN_Init(CANx, &CAN_InitStructure); + + /* CAN filter init */ +#ifdef USE_CAN1 + CAN_FilterInitStructure.CAN_FilterNumber = 0; +#else /* USE_CAN2 */ + CAN_FilterInitStructure.CAN_FilterNumber = 14; +#endif /* USE_CAN1 */ + CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; + CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; + CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; + CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; + CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; + CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; + CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; + CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; + CAN_FilterInit(&CAN_FilterInitStructure); + + /* Transmit Structure preparation */ + TxMessage.StdId = 0x321; + TxMessage.ExtId = 0x01; + TxMessage.RTR = CAN_RTR_DATA; + TxMessage.IDE = CAN_ID_STD; + TxMessage.DLC = 1; + + /* Enable FIFO 0 message pending Interrupt */ + CAN_ITConfig(CANx, CAN_IT_FMP0, ENABLE); +} + +/** + * @brief Configures the NVIC for CAN. + * @param None + * @retval None + */ +void NVIC_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + +#ifdef USE_CAN1 + NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; +#else /* USE_CAN2 */ + NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn; +#endif /* USE_CAN1 */ + + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Initializes the Rx Message. + * @param RxMessage: pointer to the message to initialize + * @retval None + */ +void Init_RxMes(CanRxMsg *RxMessage) +{ + uint8_t i = 0; + + RxMessage->StdId = 0x00; + RxMessage->ExtId = 0x00; + RxMessage->IDE = CAN_ID_STD; + RxMessage->DLC = 0; + RxMessage->FMI = 0; + for (i = 0;i < 8;i++) + { + RxMessage->Data[i] = 0x00; + } +} + +/** + * @brief Turn ON/OFF the dedicated led + * @param Ledstatus: Led number from 0 to 3. + * @retval None + */ +void LED_Display(uint8_t Ledstatus) +{ + /* Turn off all leds */ + STM_EVAL_LEDOff(LED1); + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + + switch(Ledstatus) + { + case(1): + STM_EVAL_LEDOn(LED1); + break; + + case(2): + STM_EVAL_LEDOn(LED2); + break; + + case(3): + STM_EVAL_LEDOn(LED3); + break; + + case(4): + STM_EVAL_LEDOn(LED4); + break; + default: + break; + } +} + +/** + * @brief Delay + * @param None + * @retval None + */ +void Delay(void) +{ + uint16_t nTime = 0x0000; + + for(nTime = 0; nTime <0xFFF; nTime++) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/main.h new file mode 100644 index 000000000..bf81ddb1f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/main.h @@ -0,0 +1,69 @@ +/** + ****************************************************************************** + * @file CAN/Networking/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +#define USE_CAN1 +/* #define USE_CAN2 */ + +#ifdef USE_CAN1 + #define CANx CAN1 + #define CAN_CLK RCC_APB1Periph_CAN1 + #define CAN_RX_PIN GPIO_Pin_0 + #define CAN_TX_PIN GPIO_Pin_1 + #define CAN_GPIO_PORT GPIOD + #define CAN_GPIO_CLK RCC_AHB1Periph_GPIOD + #define CAN_AF_PORT GPIO_AF_CAN1 + #define CAN_RX_SOURCE GPIO_PinSource0 + #define CAN_TX_SOURCE GPIO_PinSource1 +#else /*USE_CAN2*/ + #define CANx CAN2 + #define CAN_CLK (RCC_APB1Periph_CAN1 | RCC_APB1Periph_CAN2) + #define CAN_RX_PIN GPIO_Pin_5 + #define CAN_TX_PIN GPIO_Pin_13 + #define CAN_GPIO_PORT GPIOB + #define CAN_GPIO_CLK RCC_AHB1Periph_GPIOB + #define CAN_AF_PORT GPIO_AF_CAN2 + #define CAN_RX_SOURCE GPIO_PinSource5 + #define CAN_TX_SOURCE GPIO_PinSource13 +#endif /* USE_CAN1 */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void LED_Display(uint8_t Ledstatus); + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/readme.txt new file mode 100644 index 000000000..323565e09 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/readme.txt @@ -0,0 +1,118 @@ +/** + @page CAN_Networking CAN Networking example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file CAN/Networking/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the CAN Networking example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the CAN peripheral to send and receive +CAN frames in normal mode. The sent frames are used to control Leds by pressing +key push button. + +The CAN serial communication link is a bus to which a number of units may be +connected. This number has no theoretical limit. Practically the total number +of units will be limited by delay times and/or electrical loads on the bus line. + +This program behaves as follows: + - After reset LED1 is ON + - By Pressing on KEY Button : LED2 turns ON and all other Leds are OFF, on the N + eval boards connected to the bus. + - Press on KEY Button again to send CAN Frame to command LEDn+1 ON, all other Leds + are OFF on the N eval boards. + +@note This example is tested with a bus of 3 units. The same program example is + loaded in all units to send and receive frames. +@note Any unit in the CAN bus may play the role of sender (by pressing KEY button) + or receiver. + + The CAN is configured as follow: + - Bit Rate = 1 Mbit/s + - CAN Clock = external clock (HSE) + - ID Filter = All identifiers are allowed + - RTR = Data + - DLC = 1 byte + - Data: Led number that should be turned ON + +User can select CAN1 or CAN2 cell using the defines in main.h : +@code +#define USE_CAN1 +/* #define USE_CAN2*/ +@endcode + + +@par Directory contents + + - CAN/Networking/system_stm32f2xx.c STM32F2xx system clock configuration file + - CAN/Networking/stm32f2xx_conf.h Library Configuration file + - CAN/Networking/stm32f2xx_it.h Interrupt handlers header file + - CAN/Networking/stm32f2xx_it.c Interrupt handlers + - CAN/Networking/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + - Use KEY Push Button connected to PG15 + - Connect a female/female CAN cable between at least 2 EVAL CAN connectors (CN10) + - Depending on the CAN cell used, you have to configure the jumpers as follows: + + @verbatim + +-----------------------------------------------+ + | Jumper | CAN1 used | CAN2 used | + +-----------------------------------------------+ + | JP3 | 2-3 | 1-2 | + | JP10 | 2-3 | 1-2 | + | JP7 | 1-2 | 1-2 | + | JP9 | fitted | fitted | + +-----------------------------------------------+ + + @endverbatim + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/stm32f2xx_conf.h new file mode 100644 index 000000000..03f3d4789 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CAN/Networking/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/stm32f2xx_it.c new file mode 100644 index 000000000..d36a343ea --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/stm32f2xx_it.c @@ -0,0 +1,213 @@ +/** + ****************************************************************************** + * @file CAN/Networking/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CAN_Networking + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +CanRxMsg RxMessage; +extern uint8_t KeyNumber; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +#ifdef USE_CAN1 +/** + * @brief This function handles CAN1 RX0 request. + * @param None + * @retval None + */ +void CAN1_RX0_IRQHandler(void) +{ + CAN_Receive(CAN1, CAN_FIFO0, &RxMessage); + + if ((RxMessage.StdId == 0x321)&&(RxMessage.IDE == CAN_ID_STD) && (RxMessage.DLC == 1)) + { + LED_Display(RxMessage.Data[0]); + KeyNumber = RxMessage.Data[0]; + } +} +#endif /* USE_CAN1 */ + +#ifdef USE_CAN2 +/** + * @brief This function handles CAN2 RX0 request. + * @param None + * @retval None + */ +void CAN2_RX0_IRQHandler(void) +{ + CAN_Receive(CAN2, CAN_FIFO0, &RxMessage); + + if ((RxMessage.StdId == 0x321)&&(RxMessage.IDE == CAN_ID_STD) && (RxMessage.DLC == 1)) + { + LED_Display(RxMessage.Data[0]); + KeyNumber = RxMessage.Data[0]; + } +} +#endif /* USE_CAN2 */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/stm32f2xx_it.h new file mode 100644 index 000000000..f49f842bc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/stm32f2xx_it.h @@ -0,0 +1,62 @@ +/** + ****************************************************************************** + * @file CAN/Networking/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void CAN1_RX0_IRQHandler(void); +void CAN2_RX0_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CAN/Networking/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/main.c new file mode 100644 index 000000000..4157b3214 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/main.c @@ -0,0 +1,127 @@ +/** + ****************************************************************************** + * @file CRC/CRC_Example/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CRC_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define BUFFER_SIZE 114 + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +static const uint32_t DataBuffer[BUFFER_SIZE] = + { + 0x00001021, 0x20423063, 0x408450a5, 0x60c670e7, 0x9129a14a, 0xb16bc18c, + 0xd1ade1ce, 0xf1ef1231, 0x32732252, 0x52b54294, 0x72f762d6, 0x93398318, + 0xa35ad3bd, 0xc39cf3ff, 0xe3de2462, 0x34430420, 0x64e674c7, 0x44a45485, + 0xa56ab54b, 0x85289509, 0xf5cfc5ac, 0xd58d3653, 0x26721611, 0x063076d7, + 0x569546b4, 0xb75ba77a, 0x97198738, 0xf7dfe7fe, 0xc7bc48c4, 0x58e56886, + 0x78a70840, 0x18612802, 0xc9ccd9ed, 0xe98ef9af, 0x89489969, 0xa90ab92b, + 0x4ad47ab7, 0x6a961a71, 0x0a503a33, 0x2a12dbfd, 0xfbbfeb9e, 0x9b798b58, + 0xbb3bab1a, 0x6ca67c87, 0x5cc52c22, 0x3c030c60, 0x1c41edae, 0xfd8fcdec, + 0xad2abd0b, 0x8d689d49, 0x7e976eb6, 0x5ed54ef4, 0x2e321e51, 0x0e70ff9f, + 0xefbedfdd, 0xcffcbf1b, 0x9f598f78, 0x918881a9, 0xb1caa1eb, 0xd10cc12d, + 0xe16f1080, 0x00a130c2, 0x20e35004, 0x40257046, 0x83b99398, 0xa3fbb3da, + 0xc33dd31c, 0xe37ff35e, 0x129022f3, 0x32d24235, 0x52146277, 0x7256b5ea, + 0x95a88589, 0xf56ee54f, 0xd52cc50d, 0x34e224c3, 0x04817466, 0x64475424, + 0x4405a7db, 0xb7fa8799, 0xe75ff77e, 0xc71dd73c, 0x26d336f2, 0x069116b0, + 0x76764615, 0x5634d94c, 0xc96df90e, 0xe92f99c8, 0xb98aa9ab, 0x58444865, + 0x78066827, 0x18c008e1, 0x28a3cb7d, 0xdb5ceb3f, 0xfb1e8bf9, 0x9bd8abbb, + 0x4a755a54, 0x6a377a16, 0x0af11ad0, 0x2ab33a92, 0xed0fdd6c, 0xcd4dbdaa, + 0xad8b9de8, 0x8dc97c26, 0x5c644c45, 0x3ca22c83, 0x1ce00cc1, 0xef1fff3e, + 0xdf7caf9b, 0xbfba8fd9, 0x9ff86e17, 0x7e364e55, 0x2e933eb2, 0x0ed11ef0 + }; + +__IO uint32_t CRCValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Enable CRC clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE); + + /* Compute the CRC of "DataBuffer" */ + CRCValue = CRC_CalcBlockCRC((uint32_t *)DataBuffer, BUFFER_SIZE); + + while (1) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/readme.txt new file mode 100644 index 000000000..0b440b1b7 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/readme.txt @@ -0,0 +1,71 @@ +/** + @page CRC_Example CRC Calculation Example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file CRC/CRC_Example/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the CRC example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to use CRC (cyclic redundancy check) calculation unit to +get a CRC code of a given buffer of data word(32-bit), based on a fixed generator +polynomial(0x4C11DB7). + + +@par Directory contents + + - CRC/CRC_Example/stm32f2xx_conf.h Library Configuration file + - CRC/CRC_Example/stm32f2xx_it.c Interrupt handlers + - CRC/CRC_Example/stm32f2xx_it.h Interrupt handlers header file + - CRC/CRC_Example/main.c Main program + - CRC/CRC_Example/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/stm32f2xx_conf.h new file mode 100644 index 000000000..65bdc335d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CRC/CRC_Example/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/stm32f2xx_it.c new file mode 100644 index 000000000..363d0a45a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file CRC/CRC_Example/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CRC_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/stm32f2xx_it.h new file mode 100644 index 000000000..eebb605ae --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file CRC/CRC_Example/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRC/CRC_Example/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/Expected_Results.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/Expected_Results.txt new file mode 100644 index 000000000..999c836ae --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/Expected_Results.txt @@ -0,0 +1,25 @@ + ====================================== + === CRYP AES-128 Using DMA Example === + ====================================== + --------------------------------------- + Plain Data : + --------------------------------------- +[0x20212223][0x24252627][0x28292A2B][0x2C2D2E2F] Block 0 +[0xFFEEDDCC][0xBBAA9988][0x77665544][0x33221100] Block 1 + + --------------------------------------- + Key : + --------------------------------------- +[0x40414243][0x44454647][0x48494A4B][0x4C4D4E4F] + + --------------------------------------- + AES-128 Encrypted Data: + --------------------------------------- +[0x8CAA7F58][0x9AA0CEB6][0x350A45E7][0x A6E435B] Block 0 +[0xFE9BD6DE][0x4F5597F8][0x11FDF0A8][0x D55FAFE] Block 1 + + --------------------------------------- + AES-128 Decrypted Data: + --------------------------------------- +[0x20212223][0x24252627][0x28292A2B][0x2C2D2E2F] Block 0 +[0xFFEEDDCC][0xBBAA9988][0x77665544][0x33221100] Block 1 diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/main.c new file mode 100644 index 000000000..c85d69cc3 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/main.c @@ -0,0 +1,499 @@ +/** + ****************************************************************************** + * @file CRYP/AES_ECBmode_DMA/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stdio.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup AES_ECBmode_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define BLOCKS_NBR 2 /* User can change this value to enlarge or reduce + the number of blocks to encrypt */ +#define DATA_SIZE ((BLOCKS_NBR *128)/32) +#define CRYP_DIN_REG_ADDR ((uint32_t)0x50060008) /* Crypto DIN register address */ +#define CRYP_DOUT_REG_ADDR ((uint32_t)0x5006000C) /* Crypto DOUT register address */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +__IO uint32_t AES128key[4]={0x40414243,0x44454647,0x48494a4b,0x4c4d4e4f}; + +__IO uint32_t PlainData[DATA_SIZE]={ + 0x20212223,0x24252627,0x28292a2b,0x2c2d2e2f, /* Block 0 */ + 0xFFEEDDCC,0xBBAA9988,0x77665544,0x33221100}; /* Block 1 */ +__IO uint32_t EncryptedData[DATA_SIZE]; +__IO uint32_t DecryptedData[DATA_SIZE]; + +/* Private function prototypes -----------------------------------------------*/ +void AES128_Encrypt_DMA(void); +void AES128_Decrypt_DMA(void); + +void Display_PlainData(void); +void Display_EncryptedData(void); +void Display_DecryptedData(void); +void USART_Config(void); + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ +/*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + /* USART Configuration */ + USART_Config(); + + /* Display Plain Data*/ + Display_PlainData(); + +/*===================================================== + Encryption +======================================================*/ + /* Encryption */ + AES128_Encrypt_DMA(); + + /* Display encrypted Data */ + Display_EncryptedData(); + +/*===================================================== + Decryption +======================================================*/ + /* Decryption */ + AES128_Decrypt_DMA(); + + /* Display decrypted data */ + Display_DecryptedData(); + + while(1); +} + +/** + * @brief Encrypt Data using AES + * @note DATA transfer is done by the DMA + * @note DMA2 stream6 channel2 is used to transfer data from memory (the + * PlainData Table) to CRYP Peripheral (the INPUT data register). + * @note DMA2 stream5 channel2 is used to transfer data from CRYP Peripheral + * (the OUTPUT data register to memory (the EncryptedData Table). + * @param None + * @retval None + */ +void AES128_Encrypt_DMA(void) +{ + CRYP_InitTypeDef CRYP_InitStructure; + CRYP_KeyInitTypeDef CRYP_KeyInitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /* Enable CRYP clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); + + /* Enable DMA2 clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + /* CRYP configuration********************************************************/ + /* Crypto key structure initialisation */ + CRYP_KeyStructInit(&CRYP_KeyInitStructure); + + /* Crypto Init for Encryption process */ + CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; + CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_ECB; + CRYP_InitStructure.CRYP_DataType = CRYP_DataType_32b; + CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_128b; + CRYP_Init(&CRYP_InitStructure); + + /* Key Initialisation */ + CRYP_KeyInitStructure.CRYP_Key2Left = AES128key[0]; + CRYP_KeyInitStructure.CRYP_Key2Right= AES128key[1]; + CRYP_KeyInitStructure.CRYP_Key3Left = AES128key[2]; + CRYP_KeyInitStructure.CRYP_Key3Right= AES128key[3]; + CRYP_KeyInit(&CRYP_KeyInitStructure); + + /* Enable DMA Requests ******************************************************/ + CRYP_DMACmd(CRYP_DMAReq_DataIN, ENABLE); + CRYP_DMACmd(CRYP_DMAReq_DataOUT, ENABLE); + + /* DMA Configuration*********************************************************/ + DMA_DeInit(DMA2_Stream5); + DMA_DeInit(DMA2_Stream6); + /* set common DMA parameters for Stream 5 and 6*/ + DMA_InitStructure.DMA_Channel = DMA_Channel_2; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_BufferSize = DATA_SIZE; + + /* Set the parameters to be configured for stream 6*/ + DMA_InitStructure.DMA_PeripheralBaseAddr = CRYP_DIN_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)PlainData; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + + /* Configure the DMA Stream 6 */ + DMA_Init(DMA2_Stream6, &DMA_InitStructure); + + /* Set the parameters to be configured for stream 5*/ + DMA_InitStructure.DMA_PeripheralBaseAddr = CRYP_DOUT_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)EncryptedData; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + + /* Configure the DMA Stream 5 */ + DMA_Init(DMA2_Stream5, &DMA_InitStructure); + + /* Enable DMA streams*******************************************************/ + DMA_Cmd(DMA2_Stream6, ENABLE); + DMA_Cmd(DMA2_Stream5, ENABLE); + + /* Enable Crypto processor *************************************************/ + CRYP_Cmd(ENABLE); + + /* wait until the last transfer from OUT FIFO : + all encrypted Data are transferred from crypt processor */ + while (DMA_GetFlagStatus(DMA2_Stream5, DMA_FLAG_TCIF5) == RESET); + + /* Disable Crypto and DMA **************************************************/ + CRYP_Cmd(DISABLE); + CRYP_DMACmd(CRYP_DMAReq_DataIN, DISABLE); + CRYP_DMACmd(CRYP_DMAReq_DataOUT, DISABLE); + DMA_Cmd(DMA2_Stream5, DISABLE); + DMA_Cmd(DMA2_Stream6, DISABLE); +} + +/** + * @brief Decrypt Data using AES + * @note DATA transfer is done by DMA + * @note DMA2 stream6 channel2 is used to transfer data from memory (the + * EncryptedData Table) to CRYP Peripheral (the INPUT data register). + * @note DMA2 stream5 channel2 is used to transfer data from CRYP Peripheral + * (the OUTPUT data register to memory (the DecryptedData Table). + * @param None + * @retval None + */ +void AES128_Decrypt_DMA(void) +{ + CRYP_InitTypeDef CRYP_InitStructure; + CRYP_KeyInitTypeDef CRYP_KeyInitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /* Enable CRYP clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); + + /* Enable DMA2 clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + /* CRYP configuration*******************************************************/ + /* Crypto Init for Key preparation for Decryption process */ + CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; + CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_Key; + CRYP_InitStructure.CRYP_DataType = CRYP_DataType_32b; + CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_128b; + CRYP_Init(&CRYP_InitStructure); + + /* Key Initialisation */ + CRYP_KeyInitStructure.CRYP_Key2Left = AES128key[0]; + CRYP_KeyInitStructure.CRYP_Key2Right= AES128key[1]; + CRYP_KeyInitStructure.CRYP_Key3Left = AES128key[2]; + CRYP_KeyInitStructure.CRYP_Key3Right= AES128key[3]; + CRYP_KeyInit(&CRYP_KeyInitStructure); + + /* Enable Crypto processor */ + CRYP_Cmd(ENABLE); + + /* wait until the Busy flag is reset */ + while (CRYP_GetFlagStatus(CRYP_FLAG_BUSY) != RESET); + + /* Disable Crypto processor */ + CRYP_Cmd(DISABLE); + + /* Crypto Init for Decryption process */ + CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; + CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_AES_ECB; + CRYP_InitStructure.CRYP_DataType = CRYP_DataType_32b; + CRYP_InitStructure.CRYP_KeySize = CRYP_KeySize_128b; + + CRYP_Init(&CRYP_InitStructure); + + + /* Enable DMA Requests ******************************************************/ + CRYP_DMACmd(CRYP_DMAReq_DataIN, ENABLE); + CRYP_DMACmd(CRYP_DMAReq_DataOUT, ENABLE); + + /* DMA Configuration*********************************************************/ + DMA_DeInit(DMA2_Stream5); + DMA_DeInit(DMA2_Stream6); + /* set common DMA parameters for Stream 5 and 6*/ + DMA_InitStructure.DMA_Channel = DMA_Channel_2; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_BufferSize = DATA_SIZE; + + /* Set the parameters to be configured for stream 6*/ + DMA_InitStructure.DMA_PeripheralBaseAddr = CRYP_DIN_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)EncryptedData; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + + /* Configure the DMA Stream 6 */ + DMA_Init(DMA2_Stream6, &DMA_InitStructure); + + /* Set the parameters to be configured for stream 5*/ + DMA_InitStructure.DMA_PeripheralBaseAddr = CRYP_DOUT_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DecryptedData; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + + /* Configure the DMA Stream 5 */ + DMA_Init(DMA2_Stream5, &DMA_InitStructure); + + /* Enable DMA streams*******************************************************/ + DMA_Cmd(DMA2_Stream6, ENABLE); + DMA_Cmd(DMA2_Stream5, ENABLE); + + /* Enable Crypto processor *************************************************/ + CRYP_Cmd(ENABLE); + + /* wait until the last transfer from OUT FIFO : + all encrypted Data are transferred from crypt processor */ + while (DMA_GetFlagStatus(DMA2_Stream5, DMA_FLAG_TCIF5) == RESET); + + + /* Disable Crypto and DMA **************************************************/ + CRYP_Cmd(DISABLE); + CRYP_DMACmd(CRYP_DMAReq_DataIN, DISABLE); + CRYP_DMACmd(CRYP_DMAReq_DataOUT, DISABLE); + DMA_Cmd(DMA2_Stream5, DISABLE); + DMA_Cmd(DMA2_Stream6, DISABLE); + + DMA_ClearFlag(DMA2_Stream6, DMA_FLAG_TCIF5); +} + +/** + * @brief Display Plain Data + * @param None + * @retval None + */ +void Display_PlainData(void) +{ + uint32_t i=0; + uint8_t count=0; + + printf(" \n\r======================================\n\r"); + printf(" === CRYP AES-128 Using DMA Example ===\n\r"); + printf(" ======================================\n\r"); + printf(" ---------------------------------------\n\r"); + printf(" Plain Data :\n\r"); + printf(" ---------------------------------------\n\r"); + + for(i = 0; i < DATA_SIZE; i++) + { + printf("[0x%8X]", PlainData[i]); + count++; + + if(count == 4) + { + count = 0; + printf(" Block %d \n\r", i/4); + } + } + + printf(" ---------------------------------------\n\r"); + printf(" Key :\n\r"); + printf(" ---------------------------------------\n\r"); + + for(i = 0; i < 4; i++) + { + printf("[0x%8X]", AES128key[i]); + count++; + } + +} + +/** + * @brief Display Encrypted Data + * @param None + * @retval None + */ +void Display_EncryptedData(void) +{ + uint32_t i=0; + uint8_t count=0; + + printf("\n\r ---------------------------------------\n\r"); + printf(" AES-128 Encrypted Data:\n\r"); + printf(" ---------------------------------------\n\r"); + + for(i = 0; i < DATA_SIZE; i++) + { + printf("[0x%8X]", EncryptedData[i]); + count++; + + if(count == 4) + { + count = 0; + printf(" Block %d \n\r", i/4); + } + } +} + +/** + * @brief Display Decrypted Data + * @param None + * @retval None + */ +void Display_DecryptedData(void) +{ + uint32_t i=0; + uint8_t count=0; + + printf("\n\r ---------------------------------------\n\r"); + printf(" AES-128 Decrypted Data:\n\r"); + printf(" ---------------------------------------\n\r"); + + for(i = 0; i < DATA_SIZE; i++) + { + printf("[0x%8X]", DecryptedData[i]); + count++; + + if(count == 4) + { + count = 0; + printf(" Block %d \n\r", i/4); + } + } +} + +/** + * @brief USART configuration + * @param None + * @retval None + */ +void USART_Config(void) +{ + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitTypeDef USART_InitStructure; + + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); +} + + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + return ch; +} + + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/readme.txt new file mode 100644 index 000000000..b3ed8abe0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/readme.txt @@ -0,0 +1,102 @@ +/** + @page AES_ECBmode_DMA Encrypt and Decrypt data using AES-128 Algo in ECB mode, with DMA + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file CRYP/AES_ECBmode_DMA/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the CRYP AES-128 Algo in ECB mode with DMA Example + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the CRYPTO peripheral to +encrypt and decrypt data using AES-128 Algorithm. + +For this example, DMA is used to transfer data from memory to the CRYPTO processor +IN FIFO and also to transfer data from CRYPTO processor OUT FIFO to memory. + +The data to be encrypted is a 640 bit data, which correspond to 5 AES Blocks. + +This example behaves as below: +- AES Encryption (PlainData --> EncryptedData) +- AES Key prepation for decryption (Encryption Key --> Decryption Key) +- AES Decryption (EncryptedData --> DecryptedData) + +The Plain data, encrypted data and decrypted data can be displayed on a PC +HyperTerminal using the USART (CN16). + +The USARTx is configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + + +@par Directory contents + + - CRYP/AES_ECBmode_DMA/system_stm32f2xx.c STM32F2xx system clock configuration file + - CRYP/AES_ECBmode_DMA/stm32f2xx_conf.h Library Configuration file + - CRYP/AES_ECBmode_DMA/stm32f2xx_it.h Interrupt handlers header file + - CRYP/AES_ECBmode_DMA/stm32f2xx_it.c Interrupt handlers + - CRYP/AES_ECBmode_DMA/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs only on STM32F21x Devices (Cryptographic acceleration not + embedded in STM32F20x Devices). + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/stm32f2xx_conf.h new file mode 100644 index 000000000..df86f8ef9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CRYP/AES_ECBmode_DMA/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/stm32f2xx_it.c new file mode 100644 index 000000000..245b0ca5a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file CRYP/AES_ECBmode_DMA/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup AES_ECBmode_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/stm32f2xx_it.h new file mode 100644 index 000000000..8d79d89dd --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file CRYP/AES_ECBmode_DMA/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_ECBmode_DMA/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/Expected_Results.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/Expected_Results.txt new file mode 100644 index 000000000..6951a4e66 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/Expected_Results.txt @@ -0,0 +1,170 @@ + ============================================================= + ================= Crypt Using HW Crypto ==================== + ============================================================ + --------------------------------------- + Plain Data : + --------------------------------------- +[0x6B][0xC1][0xBE][0xE2][0x2E][0x40][0x9F][0x96][0xE9][0x3D][0x7E][0x11][0x73][0x93][0x17][0x2A] Block 0 +[0xAE][0x2D][0x8A][0x57][0x1E][0x03][0xAC][0x9C][0x9E][0xB7][0x6F][0xAC][0x45][0xAF][0x8E][0x51] Block 1 +[0x30][0xC8][0x1C][0x46][0xA3][0x5C][0xE4][0x11][0xE5][0xFB][0xC1][0x19][0x1A][0x0A][0x52][0xEF] Block 2 +[0xF6][0x9F][0x24][0x45][0xDF][0x4F][0x9B][0x17][0xAD][0x2B][0x41][0x7B][0xE6][0x6C][0x37][0x10] Block 3 + + Press any key to continue... + + ======================================= + Encrypted Data with AES 128 Mode ECB + --------------------------------------- +[0x3A][0xD7][0x7B][0xB4][0x0D][0x7A][0x36][0x60][0xA8][0x9E][0xCA][0xF3][0x24][0x66][0xEF][0x97] Block 0 +[0xF5][0xD3][0xD5][0x85][0x03][0xB9][0x69][0x9D][0xE7][0x85][0x89][0x5A][0x96][0xFD][0xBA][0xAF] Block 1 +[0x43][0xB1][0xCD][0x7F][0x59][0x8E][0xCE][0x23][0x88][0x1B][0x00][0xE3][0xED][0x03][0x06][0x88] Block 2 +[0x7B][0x0C][0x78][0x5E][0x27][0xE8][0xAD][0x3F][0x82][0x23][0x20][0x71][0x04][0x72][0x5D][0xD4] Block 3 + + ======================================= + Encrypted Data with AES 192 Mode ECB + --------------------------------------- +[0xBD][0x33][0x4F][0x1D][0x6E][0x45][0xF2][0x5F][0xF7][0x12][0xA2][0x14][0x57][0x1F][0xA5][0xCC] Block 0 +[0x97][0x41][0x04][0x84][0x6D][0x0A][0xD3][0xAD][0x77][0x34][0xEC][0xB3][0xEC][0xEE][0x4E][0xEF] Block 1 +[0xEF][0x7A][0xFD][0x22][0x70][0xE2][0xE6][0x0A][0xDC][0xE0][0xBA][0x2F][0xAC][0xE6][0x44][0x4E] Block 2 +[0x9A][0x4B][0x41][0xBA][0x73][0x8D][0x6C][0x72][0xFB][0x16][0x69][0x16][0x03][0xC1][0x8E][0x0E] Block 3 + + ======================================= + Encrypted Data with AES 256 Mode ECB + --------------------------------------- +[0xF3][0xEE][0xD1][0xBD][0xB5][0xD2][0xA0][0x3C][0x06][0x4B][0x5A][0x7E][0x3D][0xB1][0x81][0xF8] Block 0 +[0x59][0x1C][0xCB][0x10][0xD4][0x10][0xED][0x26][0xDC][0x5B][0xA7][0x4A][0x31][0x36][0x28][0x70] Block 1 +[0xB6][0xED][0x21][0xB9][0x9C][0xA6][0xF4][0xF9][0xF1][0x53][0xE7][0xB1][0xBE][0xAF][0xED][0x1D] Block 2 +[0x23][0x30][0x4B][0x7A][0x39][0xF9][0xF3][0xFF][0x06][0x7D][0x8D][0x8F][0x9E][0x24][0xEC][0xC7] Block 3 + + Press any key to continue... + + ======================================= + Decrypted Data with AES 128 Mode ECB + --------------------------------------- +[0x6B][0xC0][0xBC][0xE1][0x2A][0x45][0x99][0x91][0xE1][0x34][0x74][0x1A][0x7F][0x9E][0x19][0x25] Block 0 +[0xD8][0x64][0x21][0xFB][0x9F][0x1A][0x1E][0xDA][0x50][0x5E][0xE1][0x37][0x57][0x46][0x97][0x2C] Block 1 +[0x60][0x4E][0xD7][0xDD][0xF3][0x2E][0xFD][0xFF][0x70][0x20][0xD0][0x23][0x8B][0x7C][0x2A][0x5D] Block 2 +[0x85][0x21][0xF2][0xFD][0x3C][0x8E][0xEF][0x2C][0xDC][0x3D][0xA7][0xE5][0xC4][0x4E][0xA2][0x06] Block 3 + + ======================================= + Decrypted Data with AES 192 Mode ECB + --------------------------------------- +[0x4F][0x29][0xDF][0x6B][0x08][0x18][0x89][0xD1][0xD5][0x32][0x39][0x5C][0xF9][0x68][0x6D][0x3C] Block 0 +[0xDA][0x32][0x3A][0x59][0x4B][0x66][0x84][0x2B][0x0C][0x2C][0x7D][0x54][0x26][0xBA][0xDB][0x43] Block 1 +[0x63][0xCC][0x39][0x59][0x12][0x82][0xF5][0x61][0xBB][0xC5][0xEC][0x77][0xD8][0x39][0x56][0xAE] Block 2 +[0xD5][0x70][0xFD][0x6D][0x5B][0x9E][0x8E][0x40][0xAE][0x2D][0xBB][0xF2][0x14][0xC3][0x80][0x7E] Block 3 + + ======================================= + Decrypted Data with AES 256 Mode ECB + --------------------------------------- +[0xBB][0xC4][0x2D][0x8F][0x95][0x09][0xDB][0x39][0x1F][0xD8][0xB6][0x44][0x81][0xE6][0x1E][0xED] Block 0 +[0x6D][0x7F][0xD8][0x8D][0x64][0x96][0x07][0x14][0xB8][0x12][0xDD][0xB8][0x16][0x75][0xF2][0x20] Block 1 +[0x6E][0xF9][0xB4][0x81][0x8E][0x70][0x61][0x4D][0x76][0x0C][0x03][0xE6][0xE1][0xB7][0xE1][0xED] Block 2 +[0x81][0x4B][0xC2][0x11][0xD7][0x9C][0x47][0xDF][0xE3][0xDC][0x76][0x15][0xBD][0x2D][0xEB][0x86] Block 3 + + Press any key to continue... + + ======================================= + Encrypted Data with AES 128 Mode CBC + --------------------------------------- +[0x76][0x49][0xAB][0xAC][0x81][0x19][0xB2][0x46][0xCE][0xE9][0x8E][0x9B][0x12][0xE9][0x19][0x7D] Block 0 +[0x50][0x86][0xCB][0x9B][0x50][0x72][0x19][0xEE][0x95][0xDB][0x11][0x3A][0x91][0x76][0x78][0xB2] Block 1 +[0x73][0xBE][0xD6][0xB8][0xE3][0xC1][0x74][0x3B][0x71][0x16][0xE6][0x9E][0x22][0x22][0x95][0x16] Block 2 +[0x3F][0xF1][0xCA][0xA1][0x68][0x1F][0xAC][0x09][0x12][0x0E][0xCA][0x30][0x75][0x86][0xE1][0xA7] Block 3 + + ======================================= + Encrypted Data with AES 192 Mode CBC + --------------------------------------- +[0x4F][0x02][0x1D][0xB2][0x43][0xBC][0x63][0x3D][0x71][0x78][0x18][0x3A][0x9F][0xA0][0x71][0xE8] Block 0 +[0xB4][0xD9][0xAD][0xA9][0xAD][0x7D][0xED][0xF4][0xE5][0xE7][0x38][0x76][0x3F][0x69][0x14][0x5A] Block 1 +[0x57][0x1B][0x24][0x20][0x12][0xFB][0x7A][0xE0][0x7F][0xA9][0xBA][0xAC][0x3D][0xF1][0x02][0xE0] Block 2 +[0x08][0xB0][0xE2][0x79][0x88][0x59][0x88][0x81][0xD9][0x20][0xA9][0xE6][0x4F][0x56][0x15][0xCD] Block 3 + + ======================================= + Encrypted Data with AES 256 Mode CBC + --------------------------------------- +[0xF5][0x8C][0x4C][0x04][0xD6][0xE5][0xF1][0xBA][0x77][0x9E][0xAB][0xFB][0x5F][0x7B][0xFB][0xD6] Block 0 +[0x9C][0xFC][0x4E][0x96][0x7E][0xDB][0x80][0x8D][0x67][0x9F][0x77][0x7B][0xC6][0x70][0x2C][0x7D] Block 1 +[0x39][0xF2][0x33][0x69][0xA9][0xD9][0xBA][0xCF][0xA5][0x30][0xE2][0x63][0x04][0x23][0x14][0x61] Block 2 +[0xB2][0xEB][0x05][0xE2][0xC3][0x9B][0xE9][0xFC][0xDA][0x6C][0x19][0x07][0x8C][0x6A][0x9D][0x1B] Block 3 + + Press any key to continue... + + ======================================= + Decrypted Data with AES 128 Mode CBC + --------------------------------------- +[0x6B][0xC1][0xBE][0xE2][0x2E][0x40][0x9F][0x96][0xE9][0x3D][0x7E][0x11][0x73][0x93][0x17][0x2A] Block 0 +[0xAE][0x2D][0x8A][0x57][0x1E][0x03][0xAC][0x9C][0x9E][0xB7][0x6F][0xAC][0x45][0xAF][0x8E][0x51] Block 1 +[0x30][0xC8][0x1C][0x46][0xA3][0x5C][0xE4][0x11][0xE5][0xFB][0xC1][0x19][0x1A][0x0A][0x52][0xEF] Block 2 +[0xF6][0x9F][0x24][0x45][0xDF][0x4F][0x9B][0x17][0xAD][0x2B][0x41][0x7B][0xE6][0x6C][0x37][0x10] Block 3 + + ======================================= + Decrypted Data with AES 192 Mode CBC + --------------------------------------- +[0x4F][0x28][0xDD][0x68][0x0C][0x1D][0x8F][0xD6][0xDD][0x3B][0x33][0x57][0xF5][0x65][0x63][0x33] Block 0 +[0xAC][0x7B][0x91][0xF5][0xCA][0x7F][0x36][0x6D][0xC2][0xC5][0xF3][0xCF][0x34][0x53][0xC2][0x3E] Block 1 +[0x33][0x4A][0xF2][0xC2][0x42][0xF0][0xEC][0x8F][0x2E][0x1E][0xFD][0x4D][0x49][0x4F][0x2E][0x1C] Block 2 +[0xA6][0xCE][0x2B][0xD5][0xB8][0x5F][0xFA][0x7B][0xDF][0x3B][0x5D][0x6C][0x36][0xE1][0x15][0x68] Block 3 + + ======================================= + Decrypted Data with AES 256 Mode CBC + --------------------------------------- +[0xBB][0xC5][0x2F][0x8C][0x91][0x0C][0xDD][0x3E][0x17][0xD1][0xBC][0x4F][0x8D][0xEB][0x10][0xE2] Block 0 +[0x1B][0x36][0x73][0x21][0xE5][0x8F][0xB5][0x52][0x76][0xFB][0x53][0x23][0x04][0x9C][0xEB][0x5D] Block 1 +[0x3E][0x7F][0x7F][0x1A][0xDE][0x02][0x78][0xA3][0xE3][0xD7][0x12][0xDC][0x70][0xC1][0x99][0x5F] Block 2 +[0xF2][0xF5][0x14][0xA9][0x34][0x5D][0x33][0xE4][0x92][0xCA][0x90][0x8B][0x9F][0x0F][0x7E][0x90] Block 3 + + Press any key to continue... + + ======================================= + Encrypted Data with AES 128 Mode CTR + --------------------------------------- +[0x3B][0x3F][0xD9][0x2E][0xB7][0x2D][0xAD][0x20][0x33][0x34][0x49][0xF8][0xE8][0x3C][0xFB][0x4A] Block 0 +[0x01][0x0C][0x04][0x19][0x99][0xE0][0x3F][0x36][0x44][0x86][0x24][0x48][0x3E][0x58][0x2D][0x0E] Block 1 +[0xA6][0x22][0x93][0xCF][0xA6][0xDF][0x74][0x53][0x5C][0x35][0x41][0x81][0x16][0x87][0x74][0xDF] Block 2 +[0x2D][0x55][0xA5][0x47][0x06][0x27][0x3C][0x50][0xD7][0xB4][0xF8][0xA8][0xCD][0xDC][0x6E][0xD7] Block 3 + + ======================================= + Encrypted Data with AES 192 Mode CTR + --------------------------------------- +[0xCD][0xC8][0x0D][0x6F][0xDD][0xF1][0x8C][0xAB][0x34][0xC2][0x59][0x09][0xC9][0x9A][0x41][0x74] Block 0 +[0x37][0xD8][0xA6][0x39][0x17][0x1F][0xDC][0xCA][0x63][0xEB][0xD1][0x7C][0xE2][0xD7][0x32][0x1A] Block 1 +[0x79][0xA0][0xC9][0x6B][0x53][0xC7][0xEE][0xEC][0xD9][0xED][0x71][0x57][0xC4][0x44][0xFC][0x7A] Block 2 +[0x84][0x5C][0x37][0xB2][0xF5][0x11][0x69][0x7B][0x0E][0x89][0xD5][0xED][0x60][0xC4][0xD4][0x9E] Block 3 + + ======================================= + Encrypted Data with AES 256 Mode CTR + --------------------------------------- +[0xDC][0x7E][0x84][0xBF][0xDA][0x79][0x16][0x4B][0x7E][0xCD][0x84][0x86][0x98][0x5D][0x38][0x60] Block 0 +[0xD5][0x77][0x78][0x8B][0x8D][0x8A][0x85][0x74][0x55][0x13][0xA5][0xD5][0x0F][0x82][0x1F][0x30] Block 1 +[0xFF][0xE9][0x6D][0x5C][0xF5][0x4B][0x23][0x8D][0xCC][0x8D][0x67][0x83][0xA8][0x7F][0x3B][0xEA] Block 2 +[0xE9][0xAF][0x54][0x63][0x44][0xCB][0x9C][0xA4][0xD1][0xE5][0x53][0xFF][0xC0][0x6B][0xC7][0x3E] Block 3 + + Press any key to continue... + + ======================================= + Decrypted Data with AES 128 Mode CTR + --------------------------------------- +[0x26][0xB7][0xCC][0x60][0x18][0x74][0x80][0xF0][0x14][0xE0][0xB9][0x72][0x89][0x46][0xF5][0x1D] Block 0 +[0xFF][0xA7][0x45][0xD5][0xD7][0x91][0x8A][0x44][0x4F][0xEA][0x5A][0xDE][0xEA][0x81][0xDB][0xED] Block 1 +[0xE5][0x54][0x59][0x31][0xE6][0x42][0xE4][0x79][0xC8][0xD8][0x66][0x06][0x2E][0xAF][0xB3][0x26] Block 2 +[0xE4][0x3B][0x4B][0xA3][0xB1][0x77][0x0B][0x4E][0x68][0x91][0x73][0xE3][0x5E][0x36][0xB8][0x60] Block 3 + + ======================================= + Decrypted Data with AES 192 Mode CTR + --------------------------------------- +[0xD0][0x40][0x18][0x21][0x72][0xA8][0xA1][0x7B][0x13][0x16][0xA9][0x83][0xA8][0xE0][0x4F][0x23] Block 0 +[0xC9][0x73][0xE7][0xF5][0x59][0x6E][0x69][0xB8][0x68][0x87][0xAF][0xEA][0x36][0x0E][0xC4][0xF9] Block 1 +[0x3A][0xD6][0x03][0x95][0x13][0x5A][0x7E][0xC6][0x4D][0x00][0x56][0xD0][0xFC][0x6C][0x3B][0x83] Block 2 +[0x4D][0x32][0xD9][0x56][0x42][0x41][0x5E][0x65][0xB1][0xAC][0x5E][0xA6][0xF3][0x2E][0x02][0x29] Block 3 + + ======================================= + Decrypted Data with AES 256 Mode CTR + --------------------------------------- +[0xC1][0xF6][0x91][0xF1][0x75][0x20][0x3B][0x9B][0x59][0x19][0x74][0x0C][0xF9][0x27][0x36][0x37] Block 0 +[0x2B][0xDC][0x39][0x47][0xC3][0xFB][0x30][0x06][0x5E][0x7F][0xDB][0x43][0xDB][0x5B][0xE9][0xD3] Block 1 +[0xBC][0x9F][0xA7][0xA2][0xB5][0xD6][0xB3][0xA7][0x58][0x60][0x40][0x04][0x90][0x57][0xFC][0x13] Block 2 +[0x20][0xC1][0xBA][0x87][0xF3][0x9B][0xAB][0xBA][0x6E][0xC0][0xD8][0xB4][0x53][0x81][0x11][0x89] Block 3 + + Press any key to continue... + + Example restarted... diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/main.c new file mode 100644 index 000000000..4604d49f8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/main.c @@ -0,0 +1,543 @@ +/** + ****************************************************************************** + * @file CRYP/AES_modes/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stdio.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup AES_modes + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define AES_TEXT_SIZE 64 + +#define ECB 1 +#define CBC 2 +#define CTR 3 + + uint8_t AES128key[16] = {0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6, + 0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c}; /* key size 128 bytes */ + + uint8_t AES192key[24] = {0x8e,0x73,0xb0,0xf7,0xda,0x0e,0x64,0x52, + 0xc8,0x10,0xf3,0x2b,0x80,0x90,0x79,0xe5, + 0x62,0xf8,0xea,0xd2,0x52,0x2c,0x6b,0x7b}; /* key size 192 bytes */ + + uint8_t AES256key[32] = {0x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe, + 0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,0x81, + 0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7, + 0x2d,0x98,0x10,0xa3,0x09,0x14,0xdf,0xf4}; /* key size 256 bytes */ + + uint8_t IV_1[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; /* initialization vector */ + + uint8_t Plaintext[AES_TEXT_SIZE] = + {0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96, + 0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a, + 0xae,0x2d,0x8a,0x57,0x1e,0x03,0xac,0x9c, + 0x9e,0xb7,0x6f,0xac,0x45,0xaf,0x8e,0x51, + 0x30,0xc8,0x1c,0x46,0xa3,0x5c,0xe4,0x11, + 0xe5,0xfb,0xc1,0x19,0x1a,0x0a,0x52,0xef, + 0xf6,0x9f,0x24,0x45,0xdf,0x4f,0x9b,0x17, + 0xad,0x2b,0x41,0x7b,0xe6,0x6c,0x37,0x10}; /* plaintext */ + +uint8_t Ciphertext[AES_TEXT_SIZE] = + {0x76,0x49,0xab,0xac,0x81,0x19,0xb2,0x46, + 0xce,0xe9,0x8e,0x9b,0x12,0xe9,0x19,0x7d, + 0x50,0x86,0xcb,0x9b,0x50,0x72,0x19,0xee, + 0x95,0xdb,0x11,0x3a,0x91,0x76,0x78,0xb2, + 0x73,0xbe,0xd6,0xb8,0xe3,0xc1,0x74,0x3b, + 0x71,0x16,0xe6,0x9e,0x22,0x22,0x95,0x16, + 0x3f,0xf1,0xca,0xa1,0x68,0x1f,0xac,0x09, + 0x12,0x0e,0xca,0x30,0x75,0x86,0xe1,0xa7}; /* ciphertext */ + +uint8_t Encryptedtext[AES_TEXT_SIZE]; /* Encrypted text */ +uint8_t Decryptedtext[AES_TEXT_SIZE]; /* Decrypted text */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +void USART_Config(void); + +void Display_PlainData(uint32_t datalength); +void Display_EncryptedData(uint8_t mode,uint16_t keysize,uint32_t datalength); +void Display_DecryptedData(uint8_t mode,uint16_t keysize,uint32_t datalength); +char PressToContinue(void); +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ +/*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_Config(); + + /* Enable CRYP clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); + + while(1) + { + + /* Display Plain Data*/ + Display_PlainData(AES_TEXT_SIZE); + +/******************************************************************************/ +/* AES mode ECB */ +/******************************************************************************/ + +/*===================================================== + Encryption ECB mode +======================================================*/ + PressToContinue(); +/****************************************/ +/* AES 128 **/ +/****************************************/ + /* Encrypt the plaintext message*/ + CRYP_AES_ECB(MODE_ENCRYPT,AES128key,128,Plaintext,AES_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(ECB,128,AES_TEXT_SIZE); +/****************************************/ +/* AES 192 **/ +/****************************************/ + /* Encrypt the plaintext message*/ + CRYP_AES_ECB(MODE_ENCRYPT,AES192key,192,Plaintext,AES_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(ECB,192,AES_TEXT_SIZE); +/****************************************/ +/* AES 256 **/ +/****************************************/ + /* Encrypt the plaintext message*/ + CRYP_AES_ECB(MODE_ENCRYPT,AES256key,256,Plaintext,AES_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(ECB, 256,AES_TEXT_SIZE); + +/*===================================================== + Decryption in ECB mode +======================================================*/ + PressToContinue(); +/****************************************/ +/* AES 128 **/ +/****************************************/ + /* Decrypt the plaintext message */ + CRYP_AES_ECB(MODE_DECRYPT,AES128key,128,Ciphertext,AES_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(ECB,128,AES_TEXT_SIZE); +/****************************************/ +/* AES 192 **/ +/****************************************/ + /* Decrypt the plaintext message */ + CRYP_AES_ECB(MODE_DECRYPT,AES192key, 192,Ciphertext, AES_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(ECB, 192,AES_TEXT_SIZE); +/****************************************/ +/* AES 256 **/ +/****************************************/ + /* Decrypt the plaintext message */ + CRYP_AES_ECB(MODE_DECRYPT,AES256key, 256,Ciphertext, AES_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(ECB,256,AES_TEXT_SIZE); + + +/******************************************************************************/ +/* AES mode CBC */ +/******************************************************************************/ + PressToContinue(); +/*===================================================== + Encryption CBC mode +======================================================*/ + +/****************************************/ +/* AES 128 **/ +/****************************************/ + /* Encrypt the plaintext message*/ + CRYP_AES_CBC(MODE_ENCRYPT,IV_1,AES128key,128,Plaintext,AES_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(CBC,128,AES_TEXT_SIZE); +/****************************************/ +/* AES 192 **/ +/****************************************/ + /* Encrypt the plaintext message*/ + CRYP_AES_CBC(MODE_ENCRYPT,IV_1,AES192key,192,Plaintext,AES_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(CBC,192,AES_TEXT_SIZE); +/****************************************/ +/* AES 256 **/ +/****************************************/ + /* Encrypt the plaintext message*/ + CRYP_AES_CBC(MODE_ENCRYPT,IV_1,AES256key,256,Plaintext,AES_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(CBC, 256,AES_TEXT_SIZE); + +/*===================================================== + Decryption in CBC mode +======================================================*/ + PressToContinue(); + /* Deinitializes the CRYP peripheral */ + CRYP_DeInit(); +/****************************************/ +/* AES 128 **/ +/****************************************/ + /* Decrypt the plaintext message */ + CRYP_AES_CBC(MODE_DECRYPT,IV_1,AES128key,128,Ciphertext,AES_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(CBC,128,AES_TEXT_SIZE); +/****************************************/ +/* AES 192 **/ +/****************************************/ + /* Deinitializes the CRYP peripheral */ + CRYP_DeInit(); + + /* Decrypt the plaintext message */ + CRYP_AES_CBC(MODE_DECRYPT,IV_1,AES192key, 192,Ciphertext, AES_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(CBC, 192,AES_TEXT_SIZE); +/****************************************/ +/* AES 256 **/ +/****************************************/ + /* Deinitializes the CRYP peripheral */ + CRYP_DeInit(); + + /* Decrypt the plaintext message */ + CRYP_AES_CBC(MODE_DECRYPT,IV_1,AES256key, 256,Ciphertext, AES_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(CBC,256,AES_TEXT_SIZE); + + +/******************************************************************************/ +/* AES mode CTR */ +/******************************************************************************/ + +/*===================================================== + Encryption CTR mode +======================================================*/ + PressToContinue(); +/****************************************/ +/* AES 128 **/ +/****************************************/ + /* Encrypt the plaintext message*/ + CRYP_AES_CTR(MODE_ENCRYPT,IV_1,AES128key,128,Plaintext,AES_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(CTR,128, AES_TEXT_SIZE); +/****************************************/ +/* AES 192 **/ +/****************************************/ + /* Encrypt the plaintext message*/ + CRYP_AES_CTR(MODE_ENCRYPT,IV_1,AES192key,192,Plaintext,AES_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(CTR,192, AES_TEXT_SIZE); +/****************************************/ +/* AES 256 **/ +/****************************************/ + /* Encrypt the plaintext message*/ + CRYP_AES_CTR(MODE_ENCRYPT,IV_1,AES256key,256,Plaintext,AES_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(CTR, 256, AES_TEXT_SIZE); + +/*===================================================== + Decryption in CTR mode +======================================================*/ + PressToContinue(); +/****************************************/ +/* AES 128 **/ +/****************************************/ + /* Decrypt the plaintext message */ + CRYP_AES_CTR(MODE_DECRYPT,IV_1,AES128key,128,Ciphertext,AES_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(CTR, 128, AES_TEXT_SIZE); +/****************************************/ +/* AES 192 **/ +/****************************************/ + /* Decrypt the plaintext message */ + CRYP_AES_CTR(MODE_DECRYPT,IV_1,AES192key,192,Ciphertext,AES_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(CTR, 192, AES_TEXT_SIZE); +/****************************************/ +/* AES 256 **/ +/****************************************/ + /* Decrypt the plaintext message */ + CRYP_AES_CTR(MODE_DECRYPT,IV_1,AES256key, 256,Ciphertext, AES_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(CTR, 256, AES_TEXT_SIZE); + +/******************************************************************************/ + PressToContinue(); + printf("\n\r Example restarted...\n "); + } +} + +/** + * @brief Display Plain Data + * @param datalength: length of the data to display + * @retval None + */ +void Display_PlainData(uint32_t datalength) +{ + uint32_t BufferCounter =0; + uint32_t count = 0; + + printf("\n\r =============================================================\n\r"); + printf(" ================= Crypt Using HW Crypto ====================\n\r"); + printf(" ============================================================\n\r"); + printf(" ---------------------------------------\n\r"); + printf(" Plain Data :\n\r"); + printf(" ---------------------------------------\n\r"); + + for(BufferCounter = 0; BufferCounter < datalength; BufferCounter++) + { + printf("[0x%02X]", Plaintext[BufferCounter]); + count++; + + if(count == 16) + { + count = 0; + printf(" Block %d \n\r", BufferCounter/16); + } + } +} + +/** + * @brief Display Encrypted Data + * @param mode: chaining mode + * @param keysize: AES key size used + * @param datalength: length of the data to display + * @retval None + */ +void Display_EncryptedData(uint8_t mode, uint16_t keysize, uint32_t datalength) +{ + uint32_t BufferCounter = 0; + uint32_t count = 0; + + printf("\n\r =======================================\n\r"); + printf(" Encrypted Data with AES %d Mode ",keysize ); + + if(mode == ECB) + { + printf("ECB\n\r"); + } + else if(mode == CBC) + { + printf("CBC\n\r"); + } + else /* if(mode == CTR)*/ + { + printf("CTR\n\r"); + } + + printf(" ---------------------------------------\n\r"); + + for(BufferCounter = 0; BufferCounter < datalength; BufferCounter++) + { + printf("[0x%02X]", Encryptedtext[BufferCounter]); + + count++; + if(count == 16) + { + count = 0; + printf(" Block %d \n\r", BufferCounter/16); + } + } +} + +/** + * @brief Display Decrypted Data + * @param mode: chaining mode + * @param keysize: AES key size used + * @param datalength: length of the data to display + * @retval None + */ +void Display_DecryptedData(uint8_t mode, uint16_t keysize, uint32_t datalength) +{ + uint32_t BufferCounter = 0; + uint32_t count = 0; + + printf("\n\r =======================================\n\r"); + printf(" Decrypted Data with AES %d Mode ",keysize ); + + if(mode == ECB) + { + printf("ECB\n\r"); + } + else if(mode == CBC) + { + printf("CBC\n\r"); + } + else /* if(mode == CTR)*/ + { + printf("CTR\n\r"); + } + + printf(" ---------------------------------------\n\r"); + + for(BufferCounter = 0; BufferCounter < datalength; BufferCounter++) + { + printf("[0x%02X]", Decryptedtext[BufferCounter]); + count++; + + if(count == 16) + { + count = 0; + printf(" Block %d \n\r", BufferCounter/16); + } + } +} + +/** + * @brief USART configuration + * @param None + * @retval None + */ +void USART_Config(void) +{ + USART_InitTypeDef USART_InitStructure; + + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); +} + +/** + * @brief Wait till a character is received by the USART + * @param None + * @retval Keyboard pressed character + */ +char PressToContinue(void) +{ + char c; + printf("\n\r Press any key to continue...\n\r "); + + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_RXNE) == RESET) + { + } + + c = USART_ReceiveData(EVAL_COM1); + + return(c); +} + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + return ch; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/readme.txt new file mode 100644 index 000000000..e32570ae0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/readme.txt @@ -0,0 +1,126 @@ +/** + @page AES_modes Encrypt and Decrypt data using AES Algo in All modes and all key sizes + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file CRYP/AES_modes/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the CRYP AES Algorithm in all modes and all key sizes + Example + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the CRYPTO peripheral to +encrypt and decrypt data using AES in all modes (ECB, CBC, CTR) and all key sizes +(128, 192, 256) Algorithm. + +For this example, a firmware is used to interface with the Crypto peripheral +in polling mode. + +This example behaves as follows: + +1. ECB mode : + - AES128 ECB Encryption + - AES192 ECB Encryption + - AES256 ECB Encryption + + - AES128 ECB Decryption + - AES192 ECB Decryption + - AES256 ECB Decryption + +2. CBC mode : + - AES128 CBC Encryption + - AES192 CBC Encryption + - AES256 CBC Encryption + + - AES128 CBC Decryption + - AES192 CBC Decryption + - AES256 CBC Decryption + +3. CTR mode : + - AES128 CTR Encryption + - AES192 CTR Encryption + - AES256 CTR Encryption + + - AES128 CTR Decryption + - AES192 CTR Decryption + - AES256 CTR Decryption + +The Plain data, encrypted data and decrypted data can be displayed on a PC +HyperTerminal using the USART (CN16). + +The USARTx is configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + + +@par Directory contents + + - CRYP/AES_modes/system_stm32f2xx.c STM32F2xx system clock configuration file + - CRYP/AES_modes/stm32f2xx_conf.h Library Configuration file + - CRYP/AES_modes/stm32f2xx_it.h Interrupt handlers header file + - CRYP/AES_modes/stm32f2xx_it.c Interrupt handlers + - CRYP/AES_modes/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs only on STM32F21x Devices (Cryptographic acceleration not + embedded in STM32F20x Devices). + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/stm32f2xx_conf.h new file mode 100644 index 000000000..9bacc8dee --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CRYP/AES_modes/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/stm32f2xx_it.c new file mode 100644 index 000000000..3dc8ba781 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file CRYP/AES_modes/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup AES_modes + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/stm32f2xx_it.h new file mode 100644 index 000000000..f745a290d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file CRYP/AES_modes/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/AES_modes/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/Expected_Results.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/Expected_Results.txt new file mode 100644 index 000000000..7176d3d5d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/Expected_Results.txt @@ -0,0 +1,48 @@ + ============================================================= + ================= Crypt Using HW Crypto ==================== + ============================================================= + + --------------------------------------- + Plain Data : + --------------------------------------- +[0x31][0x32][0x33][0x34][0x35][0x36][0x37][0x38] Block 0 + + ======================================= + Encrypted Data DES Mode ECB + --------------------------------------- +[0xAF][0xE6][0x49][0x61][0xCC][0x4F][0x7C][0x13] Block 0 + + ======================================= + Decrypted Data DES Mode ECB + --------------------------------------- +[0x31][0x32][0x33][0x34][0x35][0x36][0x37][0x38] Block 0 + + ======================================= + Encrypted Data DES Mode CBC + --------------------------------------- +[0xD4][0xE3][0x6B][0x07][0x60][0xBD][0x60][0x15] Block 0 + + ======================================= + Decrypted Data DES Mode CBC + --------------------------------------- +[0x31][0x32][0x33][0x34][0x35][0x36][0x37][0x38] Block 0 + + ======================================= + Encrypted Data TDES Mode ECB + --------------------------------------- +[0x50][0x08][0x77][0xCB][0x7B][0x95][0xBC][0x0C] Block 0 + + ======================================= + Decrypted Data TDES Mode ECB + --------------------------------------- +[0x31][0x32][0x33][0x34][0x35][0x36][0x37][0x38] Block 0 + + ======================================= + Encrypted Data TDES Mode CBC + --------------------------------------- +[0x06][0x63][0x86][0xC3][0x3E][0xCB][0x14][0xDF] Block 0 + + ======================================= + Decrypted Data TDES Mode CBC + --------------------------------------- +[0x31][0x32][0x33][0x34][0x35][0x36][0x37][0x38] Block 0 diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/main.c new file mode 100644 index 000000000..4e2e29283 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/main.c @@ -0,0 +1,392 @@ +/** + ****************************************************************************** + * @file CRYP/DES_TDES_modes/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stdio.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DES_TDES_modes + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define PLAIN_TEXT_SIZE 8 +#define ECB 1 +#define CBC 2 + +#define DES ' ' +#define TDES 'T' + +/* key size 64 bytes */ + uint8_t DESkey[8] = {0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6}; + +/* key : 192 bits */ +uint8_t TDESkey[24] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, /* key 1 */ + 0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10, /* key 2 */ + 0x89,0xAB,0xCD,0xEF,0x01,0x23,0x45,0x67}; /* key 3 */ + +uint8_t Plaintext[PLAIN_TEXT_SIZE] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38}; /* Plaintext */ + +/* initialization vector */ +uint8_t IV_1[8] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; + +uint8_t Encryptedtext[PLAIN_TEXT_SIZE]; /* Encrypted text */ +uint8_t Decryptedtext[PLAIN_TEXT_SIZE]; /* Decrypted text */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +void USART_Config(void); + +void Display_PlainData(uint32_t datalength); +void Display_EncryptedData(uint8_t Algo, uint8_t mode,uint32_t datalength); +void Display_DecryptedData(uint8_t Algo, uint8_t mode,uint32_t datalength); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ +/*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_Config(); + + /* Display Plain Data*/ + Display_PlainData(PLAIN_TEXT_SIZE); + + /* Enable CRYP clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); + +/******************************************************************************/ +/* DES mode ECB */ +/******************************************************************************/ + +/*===================================================== + Encryption ECB mode +======================================================*/ + + /* Encrypt the plaintext message */ + CRYP_DES_ECB(MODE_ENCRYPT,DESkey,Plaintext,PLAIN_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(DES,ECB,PLAIN_TEXT_SIZE); + +/*===================================================== + Decryption in ECB mode +======================================================*/ + + /* Decrypt the plaintext message */ + CRYP_DES_ECB(MODE_DECRYPT,DESkey,Encryptedtext,PLAIN_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(DES,ECB,PLAIN_TEXT_SIZE); + + +/******************************************************************************/ +/* DES mode CBC */ +/******************************************************************************/ + +/*===================================================== + Encryption CBC mode +======================================================*/ + + /* Encrypt the plaintext message*/ + CRYP_DES_CBC(MODE_ENCRYPT,DESkey,IV_1,Plaintext,PLAIN_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(DES,CBC,PLAIN_TEXT_SIZE); + +/*===================================================== + Decryption in CBC mode +======================================================*/ + + /* Decrypt the plaintext message */ + CRYP_DES_CBC(MODE_DECRYPT,DESkey,IV_1,Encryptedtext,PLAIN_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(DES,CBC,PLAIN_TEXT_SIZE); + + +/******************************************************************************/ +/* TDES mode ECB */ +/******************************************************************************/ + +/*===================================================== + Encryption ECB mode +======================================================*/ + + /* Encrypt the plaintext message*/ + CRYP_TDES_ECB(MODE_ENCRYPT,TDESkey,Plaintext,PLAIN_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(TDES,ECB,PLAIN_TEXT_SIZE); + +/*===================================================== + Decryption in ECB mode +======================================================*/ + + /* Decrypt the plaintext message */ + CRYP_TDES_ECB(MODE_DECRYPT,TDESkey,Encryptedtext,PLAIN_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(TDES,ECB,PLAIN_TEXT_SIZE); + + +/******************************************************************************/ +/* TDES mode CBC */ +/******************************************************************************/ + +/*===================================================== + Encryption CBC mode +======================================================*/ + + /* Encrypt the plaintext message*/ + CRYP_TDES_CBC(MODE_ENCRYPT,TDESkey,IV_1,Plaintext,PLAIN_TEXT_SIZE,Encryptedtext); + + /* Display encrypted Data*/ + Display_EncryptedData(TDES,CBC,PLAIN_TEXT_SIZE); + +/*===================================================== + Decryption in CBC mode +======================================================*/ + + /* Decrypt the plaintext message */ + CRYP_TDES_CBC(MODE_DECRYPT,TDESkey,IV_1,Encryptedtext,PLAIN_TEXT_SIZE,Decryptedtext); + + /* Display decrypted data*/ + Display_DecryptedData(TDES,CBC,PLAIN_TEXT_SIZE); +/******************************************************************************/ + + while(1); +} + +/** + * @brief Display Plain Data + * @param datalength: length of the data to display + * @retval None + */ +void Display_PlainData(uint32_t datalength) +{ + uint32_t BufferCounter = 0; + uint32_t count = 0; + + printf("\n\r =============================================================\n\r"); + printf(" ================= Crypt Using HW Crypto ====================\n\r"); + printf(" =============================================================\n\r"); + printf(" ---------------------------------------\n\r"); + printf(" Plain Data :\n\r"); + printf(" ---------------------------------------\n\r"); + + for(BufferCounter = 0; BufferCounter < datalength; BufferCounter++) + { + printf("[0x%02X]", Plaintext[BufferCounter]); + + count++; + if(count == 8) + { + count = 0; + printf(" Block %d \n\r", BufferCounter/8); + } + } +} +/** + * @brief Display Encrypted Data + * @param Algo: Algorithm used (DES or TDES) + * @param mode: chaining mode + * @param datalength: length of the data to display + * @retval None + */ +void Display_EncryptedData(uint8_t Algo, uint8_t mode, uint32_t datalength) +{ + uint32_t BufferCounter = 0; + uint32_t count = 0; + + printf("\n\r =======================================\n\r"); + printf(" Encrypted Data %cDES Mode ",Algo); + + if(mode == ECB) + { + printf("ECB\n\r"); + } + else/* if(mode == CBC)*/ + { + printf("CBC\n\r"); + } + + printf(" ---------------------------------------\n\r"); + + for(BufferCounter = 0; BufferCounter < datalength; BufferCounter++) + { + printf("[0x%02X]", Encryptedtext[BufferCounter]); + count++; + + if(count == 8) + { + count = 0; + printf(" Block %d \n\r", BufferCounter/8); + } + } +} + +/** + * @brief Display Decrypted Data + * @param Algo: Algorithm used (DES or TDES) + * @param mode: chaining mode + * @param datalength: length of the data to display + * @retval None + */ +void Display_DecryptedData(uint8_t Algo, uint8_t mode, uint32_t datalength) +{ + uint32_t BufferCounter = 0; + uint32_t count = 0; + + printf("\n\r =======================================\n\r"); + printf(" Decrypted Data %cDES Mode ",Algo); + + if(mode == ECB) + { + printf("ECB\n\r"); + } + else/* if(mode == CBC)*/ + { + printf("CBC\n\r"); + } + + printf(" ---------------------------------------\n\r"); + + for(BufferCounter = 0; BufferCounter < datalength; BufferCounter++) + { + printf("[0x%02X]", Decryptedtext[BufferCounter]); + count++; + + if(count == 8) + { + count = 0; + printf(" Block %d \n\r", BufferCounter/8); + } + } +} + +/** + * @brief USART configuration + * @param None + * @retval None + */ +void USART_Config(void) +{ + USART_InitTypeDef USART_InitStructure; + + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); +} + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + return ch; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/readme.txt new file mode 100644 index 000000000..2bf4a13f2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/readme.txt @@ -0,0 +1,107 @@ +/** + @page DES_TDES_modes Encrypt and Decrypt data using DES and TDES Algorithms in All modes + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file CRYP/DES_TDES_modes/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the CRYP DES and TDES Algorithm in all modes Example + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the CRYPTO peripheral to +encrypt and decrypt data using DES and TDES in all modes (ECB, CBC) Algorithm. + +For this example, a firmware is used to interface with the Crypto peripheral +in polling mode. + +This example is behaves as follow: +1. DES + - DES ECB Encryption + - DES ECB Decryption + - DES CBC Encryption + - DES CBC Decryption +2. TDES + - TDES ECB Encryption + - TDES ECB Decryption + - TDES CBC Encryption + - TDES CBC Decryption + +The Plain data, encrypted data and decrypted data can be displayed on a PC +HyperTerminal using the USART (CN16). + +The USARTx is configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + + +@par Directory contents + + - CRYP/DES_TDES_modes/system_stm32f2xx.c STM32F2xx system clock configuration file + - CRYP/DES_TDES_modes/stm32f2xx_conf.h Library Configuration file + - CRYP/DES_TDES_modes/stm32f2xx_it.h Interrupt handlers header file + - CRYP/DES_TDES_modes/stm32f2xx_it.c Interrupt handlers + - CRYP/DES_TDES_modes/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs only on STM32F21x Devices (Cryptographic acceleration not + embedded in STM32F20x Devices). + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/stm32f2xx_conf.h new file mode 100644 index 000000000..3041f2820 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CRYP/DES_TDES_modes/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/stm32f2xx_it.c new file mode 100644 index 000000000..88b566016 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file CRYP/DES_TDES_modes/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DES_TDES_modes + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/stm32f2xx_it.h new file mode 100644 index 000000000..7b56b3e21 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file CRYP/DES_TDES_modes/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/DES_TDES_modes/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/Expected_Results.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/Expected_Results.txt new file mode 100644 index 000000000..434747e17 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/Expected_Results.txt @@ -0,0 +1,30 @@ + ====================================== + ==== CRYP TDES Using DMA Example ==== + ====================================== + + --------------------------------------- + Plain Data: + --------------------------------------- +[0x20212223][0x24252627] Block 0 +[0x28292a2b][0x2c2d2e2f] Block 1 +[0xffeeddcc][0xbbaa9988] Block 2 +[0x77665544][0x33221100] Block 3 +[0x10000000][0x20000000] Block 4 + + --------------------------------------- + TDES Encrypted Data: + --------------------------------------- +[0xc9406174][0xf076c814] Block 0 +[0x81a2bcb1][0x4ed3e70d] Block 1 +[0x54351409][0x6c4e674b] Block 2 +[0x4fde2aec][0xdbe00ac3] Block 3 +[0xee46220c][0xcab2cefb] Block 4 + + --------------------------------------- + TDES Decrypted Data: + --------------------------------------- +[0x20212223][0x24252627] Block 0 +[0x28292a2b][0x2c2d2e2f] Block 1 +[0xffeeddcc][0xbbaa9988] Block 2 +[0x77665544][0x33221100] Block 3 +[0x10000000][0x20000000] Block 4 diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/main.c new file mode 100644 index 000000000..e51d77c2a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/main.c @@ -0,0 +1,477 @@ +/** + ****************************************************************************** + * @file CRYP/TDES_ECBmode_DMA/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TDES_ECBmode_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +#define BLOCKS_NBR 5 /* User can change this value to enlarge or reduce the + nbre of blocks to encrypt */ + +#define DATA_SIZE ((BLOCKS_NBR*64)/32) +#define CRYP_DIN_REG_ADDR ((uint32_t)0x50060008) /* Crypto DIN register address */ +#define CRYP_DOUT_REG_ADDR ((uint32_t)0x5006000C) /* Crypto DOUT register address */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* 192 bit key */ +__IO uint32_t TDESkey[6]={0x40414243,0x44454647, /* K1 */ + 0x48494A4B,0x4C4D4E4F, /* K2 */ + 0x50515253,0x54555657}; /* K3 */ + +__IO uint32_t PlainData[DATA_SIZE]={0x20212223,0x24252627, /* Block 0 */ + 0x28292a2b,0x2c2d2e2f, /* Block 1 */ + 0xFFEEDDCC,0xBBAA9988, /* Block 2 */ + 0x77665544,0x33221100, /* Block 3 */ + 0x10000000,0x20000000 };/* Block 4 */ + +__IO uint32_t EncryptedData[DATA_SIZE]; +__IO uint32_t DecryptedData[DATA_SIZE]; + +/* Private function prototypes -----------------------------------------------*/ +void TDES_Encrypt_DMA(void); +void TDES_Decrypt_DMA(void); + +void Display_PlainData(void); +void Display_EncryptedData(void); +void Display_DecryptedData(void); + +void USART_Config(void); +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ +/*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + /* USART Configuration */ + USART_Config(); + + /* Display Plain Data*/ + Display_PlainData(); + +/*===================================================== + Encryption +======================================================*/ + + /* Encrypt */ + TDES_Encrypt_DMA(); + + /* Display encrypted Data*/ + Display_EncryptedData(); + +/*===================================================== + Decryption +======================================================*/ + + /* Decrypt */ + TDES_Decrypt_DMA(); + + /* Display decrypted data*/ + Display_DecryptedData(); + + while(1); +} + +/** + * @brief Encrypt Data using TDES + * @note DATA transfer is done by DMA + * @note DMA2 stream6 channel2 is used to transfer data from memory (the + * PlainData Tab) to CRYP Peripheral (the INPUT data register). + * @note DMA2 stream5 channel2 is used to transfer data from CRYP Peripheral + * (the OUTPUT data register to memory (the EncryptedData Tab). + * @param None + * @retval None + */ +void TDES_Encrypt_DMA(void) +{ + CRYP_InitTypeDef CRYP_InitStructure; + CRYP_KeyInitTypeDef CRYP_KeyInitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /* Enable CRYP clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); + + /* Enable DMA2 clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + /* Configure crypto as encoder TDES *****************************************/ + /* Crypto Init for Encryption process */ + CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt; + CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_TDES_ECB; + CRYP_InitStructure.CRYP_DataType = CRYP_DataType_32b; + + CRYP_FIFOFlush(); + CRYP_Init(&CRYP_InitStructure); + + /* Key Initialisation */ + CRYP_KeyInitStructure.CRYP_Key1Left = TDESkey[0]; + CRYP_KeyInitStructure.CRYP_Key1Right= TDESkey[1]; + CRYP_KeyInitStructure.CRYP_Key2Left = TDESkey[2]; + CRYP_KeyInitStructure.CRYP_Key2Right= TDESkey[3]; + CRYP_KeyInitStructure.CRYP_Key3Left = TDESkey[4]; + CRYP_KeyInitStructure.CRYP_Key3Right= TDESkey[5]; + CRYP_KeyInit(&CRYP_KeyInitStructure); + + CRYP_DMACmd(CRYP_DMAReq_DataOUT, ENABLE); + CRYP_DMACmd(CRYP_DMAReq_DataIN, ENABLE); + + /* DMA Configuration*********************************************************/ + /* set commun DMA parameters for Stream 5 and 6*/ + DMA_DeInit(DMA2_Stream5); + DMA_DeInit(DMA2_Stream6); + DMA_InitStructure.DMA_Channel = DMA_Channel_2; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_BufferSize = DATA_SIZE; + + /* Set the parameters to be configured specific to stream 6*/ + DMA_InitStructure.DMA_PeripheralBaseAddr = CRYP_DIN_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)PlainData; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + + /* Configure the DMA Stream 6 */ + DMA_Init(DMA2_Stream6, &DMA_InitStructure); + + /* Set the parameters to be configured specific to stream 5*/ + DMA_InitStructure.DMA_PeripheralBaseAddr = CRYP_DOUT_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)EncryptedData; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + + /* Configure the DMA Stream 5 */ + DMA_Init(DMA2_Stream5, &DMA_InitStructure); + + /* Enable DMA streams*/ + DMA_Cmd(DMA2_Stream6, ENABLE); + DMA_Cmd(DMA2_Stream5, ENABLE); + + /* Enable Crypto processor */ + CRYP_Cmd(ENABLE); + + /* wait until the last transfer from OUT FIFO : + all encrypted Data are transfered from crypt processor */ + while (DMA_GetFlagStatus(DMA2_Stream5, DMA_FLAG_TCIF5) == RESET); + + /* Disable Crypto and DMA ***************************************************/ + CRYP_Cmd(DISABLE); + CRYP_DMACmd(CRYP_DMAReq_DataOUT, DISABLE); + CRYP_DMACmd(CRYP_DMAReq_DataIN, DISABLE); + DMA_Cmd(DMA2_Stream5, DISABLE); + DMA_Cmd(DMA2_Stream6, DISABLE); +} + +/** + * @brief Decrypt Data using TDES + * @note DATA transfer is done by DMA + * @note DMA2 stream6 channel2 is used to transfer data from memory (the + * EncryptedData Tab) to CRYP Peripheral (the INPUT data register). + * @note DMA2 stream5 channel2 is used to transfer data from CRYP Peripheral + * (the OUTPUT data register to memory (the DecryptedData Tab). + * @param None + * @retval None + */ +void TDES_Decrypt_DMA(void) +{ + CRYP_InitTypeDef CRYP_InitStructure; + CRYP_KeyInitTypeDef CRYP_KeyInitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /* Enable CRYP clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); + + /* Enable DMA2 clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + /* configure crypto as Decoder TDES *****************************************/ + CRYP_FIFOFlush(); + /* Crypto Init for Decryption process */ + CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt; + CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_TDES_ECB; + CRYP_InitStructure.CRYP_DataType = CRYP_DataType_32b; + CRYP_Init(&CRYP_InitStructure); + + /* Key Initialisation */ + CRYP_KeyInitStructure.CRYP_Key1Left = TDESkey[0]; + CRYP_KeyInitStructure.CRYP_Key1Right= TDESkey[1]; + CRYP_KeyInitStructure.CRYP_Key2Left = TDESkey[2]; + CRYP_KeyInitStructure.CRYP_Key2Right= TDESkey[3]; + CRYP_KeyInitStructure.CRYP_Key3Left = TDESkey[4]; + CRYP_KeyInitStructure.CRYP_Key3Right= TDESkey[5]; + CRYP_KeyInit(&CRYP_KeyInitStructure); + + CRYP_DMACmd(CRYP_DMAReq_DataOUT, ENABLE); + CRYP_DMACmd(CRYP_DMAReq_DataIN, ENABLE); + + /* DMA Configuration ********************************************************/ + /* set commun DMA parameters for Stream 5 and 6*/ + DMA_DeInit(DMA2_Stream5); + DMA_DeInit(DMA2_Stream6); + DMA_InitStructure.DMA_Channel = DMA_Channel_2; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_BufferSize = DATA_SIZE; + + /* Set the parameters to be configured specific to stream 6*/ + DMA_InitStructure.DMA_PeripheralBaseAddr = CRYP_DIN_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)EncryptedData; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + + /* Configure the DMA Stream 6 */ + DMA_Init(DMA2_Stream6, &DMA_InitStructure); + + /* Set the parameters to be configured specific to stream 5*/ + DMA_InitStructure.DMA_PeripheralBaseAddr = CRYP_DOUT_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DecryptedData; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + + /* Configure the DMA Stream 5 */ + DMA_Init(DMA2_Stream5, &DMA_InitStructure); + + /* Enable DMA streams*/ + DMA_Cmd(DMA2_Stream6, ENABLE); + DMA_Cmd(DMA2_Stream5, ENABLE); + + /* Enable Crypo Processor */ + CRYP_Cmd(ENABLE); + + /* wait until the last transfer from OUT FIFO : + all encrypted Data are transfered from crypt processor */ + while (DMA_GetFlagStatus(DMA2_Stream5, DMA_FLAG_TCIF5) == RESET); + + /* Disable Crypto and DMA ***************************************************/ + CRYP_Cmd(DISABLE); + CRYP_DMACmd(CRYP_DMAReq_DataOUT, DISABLE); + CRYP_DMACmd(CRYP_DMAReq_DataIN, DISABLE); + DMA_Cmd(DMA2_Stream5, DISABLE); + DMA_Cmd(DMA2_Stream6, DISABLE); +} + +/** + * @brief Display Plain Data + * @param None + * @retval None + */ +void Display_PlainData(void) +{ + uint32_t BufferCounter = 0; + uint8_t count = 0; + printf("\n\r ======================================\n\r"); + printf(" ==== CRYP TDES Using DMA Example ====\n\r"); + printf(" ======================================\n\r"); + + printf(" ---------------------------------------\n\r"); + printf(" Plain Data:\n\r"); + printf(" ---------------------------------------\n\r"); + + for(BufferCounter=0; BufferCounter EncryptedData) +- TDES Decryption (EncryptedData --> DecryptedData) + +The Plain data, encrypted data and decrypted data can be displayed on a PC +HyperTerminal using the USART (CN16). + +The USARTx is configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + + +@par Directory contents + + - CRYP/TDES_ECBmode_DMA/system_stm32f2xx.c STM32F2xx system clock configuration file + - CRYP/TDES_ECBmode_DMA/stm32f2xx_conf.h Library Configuration file + - CRYP/TDES_ECBmode_DMA/stm32f2xx_it.h Interrupt handlers header file + - CRYP/TDES_ECBmode_DMA/stm32f2xx_it.c Interrupt handlers + - CRYP/TDES_ECBmode_DMA/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs only on STM32F21x Devices (Cryptographic acceleration not + embedded in STM32F20x Devices). + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/stm32f2xx_conf.h new file mode 100644 index 000000000..abc265092 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CRYP/TDES_ECBmode_DMA/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/stm32f2xx_it.c new file mode 100644 index 000000000..28fbbf428 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file CRYP/TDES_ECBmode_DMA/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TDES_ECBmode_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/stm32f2xx_it.h new file mode 100644 index 000000000..24f06fee6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file CRYP/TDES_ECBmode_DMA/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CRYP/TDES_ECBmode_DMA/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/main.c new file mode 100644 index 000000000..1987dfe43 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/main.c @@ -0,0 +1,145 @@ +/** + ****************************************************************************** + * @file CortexM3/BitBand/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CortexM3_BitBand + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +#define Var_ResetBit_BB(VarAddr, BitNumber) \ + (*(__IO uint32_t *) (SRAM_BB_BASE | ((VarAddr - SRAM_BASE) << 5) | ((BitNumber) << 2)) = 0) + +#define Var_SetBit_BB(VarAddr, BitNumber) \ + (*(__IO uint32_t *) (SRAM_BB_BASE | ((VarAddr - SRAM_BASE) << 5) | ((BitNumber) << 2)) = 1) + +#define Var_GetBit_BB(VarAddr, BitNumber) \ + (*(__IO uint32_t *) (SRAM_BB_BASE | ((VarAddr - SRAM_BASE) << 5) | ((BitNumber) << 2))) + +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t Var, VarAddr = 0, VarBitValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + Var = 0x00005AA5; + +/* A mapping formula shows how to reference each word in the alias region to a + corresponding bit in the bit-band region. The mapping formula is: + bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number + 4) + +where: + - bit_word_addr: is the address of the word in the alias memory region that + maps to the targeted bit. + - bit_band_base is the starting address of the alias region + - byte_offset is the number of the byte in the bit-band region that contains + the targeted bit + - bit_number is the bit position (0-7) of the targeted bit */ + +/* Get the variable address --------------------------------------------------*/ + VarAddr = (uint32_t)&Var; + +/* Modify variable bit using bit-band access ---------------------------------*/ + /* Modify Var variable bit 0 -----------------------------------------------*/ + Var_ResetBit_BB(VarAddr, 0); /* Var = 0x00005AA4 */ + Var_SetBit_BB(VarAddr, 0); /* Var = 0x00005AA5 */ + + /* Modify Var variable bit 11 ----------------------------------------------*/ + Var_ResetBit_BB(VarAddr, 11); /* Var = 0x000052A5 */ + /* Get Var variable bit 11 value */ + VarBitValue = Var_GetBit_BB(VarAddr, 11); /* VarBitValue = 0x00000000 */ + + Var_SetBit_BB(VarAddr, 11); /* Var = 0x00005AA5 */ + /* Get Var variable bit 11 value */ + VarBitValue = Var_GetBit_BB(VarAddr, 11); /* VarBitValue = 0x00000001 */ + + /* Modify Var variable bit 31 ----------------------------------------------*/ + Var_SetBit_BB(VarAddr, 31); /* Var = 0x80005AA5 */ + /* Get Var variable bit 31 value */ + VarBitValue = Var_GetBit_BB(VarAddr, 31); /* VarBitValue = 0x00000001 */ + + Var_ResetBit_BB(VarAddr, 31); /* Var = 0x00005AA5 */ + /* Get Var variable bit 31 value */ + VarBitValue = Var_GetBit_BB(VarAddr, 31); /* VarBitValue = 0x00000000 */ + + while (1) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/readme.txt new file mode 100644 index 000000000..f5fb53c5a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/readme.txt @@ -0,0 +1,71 @@ +/** + @page CortexM3_BitBand CortexM3 BitBand example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file CortexM3/BitBand/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the CortexM3 BitBand example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to use CortexM3 Bit-Band access to perform atomic +read-modify-write and read operations on a variable in SRAM. + + +@par Directory contents + + - CortexM3/BitBand/stm32f2xx_conf.h Library Configuration file + - CortexM3/BitBand/stm32f2xx_it.c Interrupt handlers + - CortexM3/BitBand/stm32f2xx_it.h Interrupt handlers header file + - CortexM3/BitBand/main.c Main program + - CortexM3/BitBand/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/stm32f2xx_conf.h new file mode 100644 index 000000000..5e21be46e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CortexM3/BitBand/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/stm32f2xx_it.c new file mode 100644 index 000000000..c081ebd53 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file CortexM3/BitBand/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CortexM3_BitBand + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/stm32f2xx_it.h new file mode 100644 index 000000000..a853ca5aa --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file CortexM3/BitBand/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/BitBand/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/Linker/RIDE/stm32F_flash_ROAarray.ld b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/Linker/RIDE/stm32F_flash_ROAarray.ld new file mode 100644 index 000000000..0f212aecf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/Linker/RIDE/stm32F_flash_ROAarray.ld @@ -0,0 +1,249 @@ +/* +Default linker script for STM32F2xx_1024K_128K +*/ + +/* include the common STM32F2xx sub-script */ + +/* Common part of the linker scripts for STM32F devices*/ + + +/* default stack sizes. + +These are used by the startup in order to allocate stacks for the different modes. +*/ + +__Stack_Size = 1024 ; + +PROVIDE ( _Stack_Size = __Stack_Size ) ; + +__Stack_Init = _estack - __Stack_Size ; + +/*"PROVIDE" allows to easily override these values from an object file or the commmand line.*/ +PROVIDE ( _Stack_Init = __Stack_Init ) ; + +/* +There will be a link error if there is not this amount of RAM free at the end. +*/ +_Minimum_Stack_Size = 0x100 ; + + +/* include the memory spaces definitions sub-script */ +/* +Linker subscript for STM32F2xx definitions with 1024 Flash and 128 Onchip SRAM */ + +/* Memory Spaces Definitions */ + +MEMORY +{ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 112K + FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K + FLASHB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + MEMORY_ARRAY (xrw) : ORIGIN = 0x20002000, LENGTH = 32 +} + +/* higher address of the user mode stack */ +_estack = 0x2001C000; + + + +/* include the sections management sub-script for FLASH mode */ + +/* Sections Definitions */ + +SECTIONS +{ + /* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* for some STRx devices, the beginning of the startup code is stored in the .flashtext section, which goes to FLASH */ + .flashtext : + { + . = ALIGN(4); + *(.flashtext) /* Startup code */ + . = ALIGN(4); + } >FLASH + + + /* the program code is stored in the .text section, which goes to Flash */ + .text : + { + . = ALIGN(4); + + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + + . = ALIGN(4); + _etext = .; + /* This is used by the startup in order to initialize the .data secion */ + _sidata = _etext; + } >FLASH + + /* MEMORY_ARRAY */ + .ROarraySection : + { + *(.ROarraySection) + } >MEMORY_ARRAY + + + /* This is the initialized data section + The program executes knowing that the data is in the RAM + but the loader puts the initial values in the FLASH (inidata). + It is one task of the startup to copy the initial values from FLASH to RAM. */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + + + /* This is the uninitialized data section */ + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + } >RAM + + PROVIDE ( end = _ebss ); + PROVIDE ( _end = _ebss ); + + /* This is the user stack section + This is just to check that there is enough RAM left for the User mode stack + It should generate an error if it's full. + */ + ._usrstack : + { + . = ALIGN(4); + _susrstack = . ; + + . = . + _Minimum_Stack_Size ; + + . = ALIGN(4); + _eusrstack = . ; + } >RAM + + + + /* this is the FLASH Bank1 */ + /* the C or assembly source must explicitly place the code or data there + using the "section" attribute */ + .b1text : + { + *(.b1text) /* remaining code */ + *(.b1rodata) /* read-only data (constants) */ + *(.b1rodata*) + } >FLASHB1 + + /* this is the EXTMEM */ + /* the C or assembly source must explicitly place the code or data there + using the "section" attribute */ + + /* EXTMEM Bank0 */ + .eb0text : + { + *(.eb0text) /* remaining code */ + *(.eb0rodata) /* read-only data (constants) */ + *(.eb0rodata*) + } >EXTMEMB0 + + /* EXTMEM Bank1 */ + .eb1text : + { + *(.eb1text) /* remaining code */ + *(.eb1rodata) /* read-only data (constants) */ + *(.eb1rodata*) + } >EXTMEMB1 + + /* EXTMEM Bank2 */ + .eb2text : + { + *(.eb2text) /* remaining code */ + *(.eb2rodata) /* read-only data (constants) */ + *(.eb2rodata*) + } >EXTMEMB2 + + /* EXTMEM Bank0 */ + .eb3text : + { + *(.eb3text) /* remaining code */ + *(.eb3rodata) /* read-only data (constants) */ + *(.eb3rodata*) + } >EXTMEMB3 + + + + /* after that it's only debugging information. */ + + /* remove the debugging information from the standard libraries */ + DISCARD : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + +} diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/Linker/TrueSTUDIO/stm32F_flash_ROAarray.ld b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/Linker/TrueSTUDIO/stm32F_flash_ROAarray.ld new file mode 100644 index 000000000..9556bd6f8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/Linker/TrueSTUDIO/stm32F_flash_ROAarray.ld @@ -0,0 +1,174 @@ +/* +***************************************************************************** +** +** File : stm32_flash.ld +** +** Abstract : Linker script for STM32F207IG Device with +** 1MByte FLASH, 128KByte SRAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** Environment : Atollic TrueSTUDIO(R) +** +** Distribution: The file is distributed 揳s is,� without any warranty +** of any kind. +** +** (c)Copyright Atollic AB. +** You may use this file as-is or modify it according to the needs of your +** project. Distribution of this file (unmodified or modified) is not +** permitted. Atollic AB permit registered Atollic TrueSTUDIO(R) users the +** rights to distribute the assembled, compiled & linked contents of this +** file as part of an application binary file, provided that it is built +** using the Atollic TrueSTUDIO(R) toolchain. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x2001C000; /* end of 112K SRAM */ + +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0; /* required amount of heap */ +_Min_Stack_Size = 0x200; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 112K + MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K + MEMORY_ARRAY (rw) : ORIGIN = 0x20002000, LENGTH = 32 +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .ARM.attributes : { *(.ARM.attributes) } > FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(.fini_array*)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = .; + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + PROVIDE ( end = _ebss ); + PROVIDE ( _end = _ebss ); + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(4); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >RAM + + /* MEMORY_bank1 section, code must be located here explicitly */ + /* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */ + .memory_b1_text : + { + *(.mb1text) /* .mb1text sections (code) */ + *(.mb1text*) /* .mb1text* sections (code) */ + *(.mb1rodata) /* read-only data (constants) */ + *(.mb1rodata*) + } >MEMORY_B1 + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ROarraySection : {*(.ROarraySection)} >MEMORY_ARRAY + +} diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/main.c new file mode 100644 index 000000000..111225248 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/main.c @@ -0,0 +1,130 @@ +/** + ****************************************************************************** + * @file CortexM3/MPU/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32_mpu.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CortexM3_MPU + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define ACCESS_PERMISSION + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +void Delay (uint32_t nCount); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Configure LED1 and LED2 */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + + /* Set MPU regions */ + MPU_Config(); + + #ifdef ACCESS_PERMISSION + MPU_AccessPermConfig(); + #endif + + /* Infinite loop */ + while (1) + { + /* Toggle LED1 */ + STM_EVAL_LEDToggle(LED1); + + /* Insert a delay */ + Delay(0x7FFFF); + } +} + +/** + * @brief Inserts a delay time. + * @param nCount: specifies the delay time length. + * @retval None + */ +void Delay(__IO uint32_t nCount) +{ + /* Decrement nCount value */ + while (nCount != 0) + { + nCount--; + } +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/readme.txt new file mode 100644 index 000000000..e72fc2559 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/readme.txt @@ -0,0 +1,99 @@ +/** + @page CortexM3_MPU CortexM3 MPU example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file CortexM3/MPU/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the CortexM3 MPU example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example presents the MPU features on STM32F2xx devices and it can be easily +ported to any other STM32 device supporting MPU. + +The example purpose is to configure a memory region as privileged read only region +and tries to perform read and write operation in different mode. + +If the access is permitted LED1 is toggling. If the access is not permitted, +a memory management fault is generated and LED2 is ON. +To generate an MPU memory fault exception due to an access right error, uncomment +the following line "PrivilegedReadOnlyArray[0] = 'e';" in the "stm32_mpu.c" file. + + +@par Directory contents + + - CortexM3/MPU/stm32f2xx_conf.h Library Configuration file + - CortexM3/MPU/stm32f2xx_it.c Interrupt handlers + - CortexM3/MPU/stm32f2xx_it.h Header for stm32f2xx_it.c + - CortexM3/MPU/main.c Main program + - CortexM3/MPU/system_stm32f2xx.c STM32F2xx system source file + - CortexM3/MPU/stm32_mpu.c Cortex-M3 MPU regions Access rights file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain and setup your project configuration as follows + - Add the required example files + - stm32_mpu.c +
    +- For RIDE and TrueSTUDIO toolchains you have to follow these instructions + +
  • RIDE + - In the Application options -> script menu, set "Use Default Script File" + to "No" and use "stm32F_flash_ROAarray.ld" as Script File. + This linker is configured for STM32F2xx. It should be updated to use it + with other STM32 devices. + + +
  • TrueSTUDIO + - In the project properties window, select C/C++ Build->settings node then + the C Linker->General node and use "stm32F_flash_ROAarray.ld" as Script File. + This linker is configured for STM32F2xx. It should be updated to use it + with other STM32 devices. +
+ + - Rebuild all files and load your image into target memory + - Run the example + + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32_mpu.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32_mpu.c new file mode 100644 index 000000000..c1ca0fac2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32_mpu.c @@ -0,0 +1,126 @@ +/** + ****************************************************************************** + * @file CortexM3/MPU/stm32_mpu.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Access rights configuration using Cortex-M3 MPU regions. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32_mpu.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CortexM3_MPU + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define ARRAY_ADDRESS_START (0x20002000UL) +#define ARRAY_SIZE (0x09UL << 0UL) +#define ARRAY_REGION_NUMBER (0x03UL << MPU_RNR_REGION_Pos) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +#if defined ( __CC_ARM ) + uint8_t PrivilegedReadOnlyArray[32] __attribute__((at(0x20002000))); + +#elif defined ( __ICCARM__ ) + #pragma location=0x20002000 + __no_init uint8_t PrivilegedReadOnlyArray[32]; + +#elif defined ( __GNUC__ ) + uint8_t PrivilegedReadOnlyArray[32] __attribute__((section(".ROarraySection"))); + +#elif defined ( __TASKING__ ) + uint8_t PrivilegedReadOnlyArray[32] __at(0x20002000); +#endif + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Configures the main MPU regions. + * @param None + * @retval None + */ +void MPU_Config(void) +{ + /* Disable MPU */ + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; + + /* Configure RAM region as Region N�0, 8kB of size and R/W region */ + MPU->RNR = RAM_REGION_NUMBER; + MPU->RBAR = RAM_ADDRESS_START; + MPU->RASR = RAM_SIZE | portMPU_REGION_READ_WRITE; + + /* Configure FLASH region as REGION N�1, 1MB of size and R/W region */ + MPU->RNR = FLASH_REGION_NUMBER; + MPU->RBAR = FLASH_ADDRESS_START; + MPU->RASR = FLASH_SIZE | portMPU_REGION_READ_WRITE; + + /* Configure Peripheral region as REGION N�2, 0.5GB of size, R/W and Execute + Never region */ + MPU->RNR = PERIPH_REGION_NUMBER; + MPU->RBAR = PERIPH_ADDRESS_START; + MPU->RASR = PERIPH_SIZE |portMPU_REGION_READ_WRITE | MPU_RASR_XN_Msk; + + /* Enable the memory fault exception */ + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; + + /* Enable MPU */ + MPU->CTRL |= MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk; +} + +/** + * @brief This function configure the access right using Cortex-M3 MPU regions. + * @param None + * @retval None + */ +void MPU_AccessPermConfig(void) +{ + /* Configure region for PrivilegedReadOnlyArray as REGION N�3, 32byte and R + only in privileged mode */ + MPU->RNR = ARRAY_REGION_NUMBER; + MPU->RBAR |= ARRAY_ADDRESS_START; + MPU->RASR |= ARRAY_SIZE | portMPU_REGION_PRIVILEGED_READ_ONLY; + + /* Read from PrivilegedReadOnlyArray. This will not generate error */ + (void)PrivilegedReadOnlyArray[0]; + + /* Uncomment the following line to write to PrivilegedReadOnlyArray. This will + generate error */ + //PrivilegedReadOnlyArray[0] = 'e'; +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32_mpu.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32_mpu.h new file mode 100644 index 000000000..84fe584c2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32_mpu.h @@ -0,0 +1,63 @@ +/** + ****************************************************************************** + * @file CortexM3/MPU/stm32_mpu.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for stm32_mpu.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32_MPU_H +#define __STM32_MPU_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +#define MPU_RASR_XN_Pos 28 +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) +#define MPU_RASR_AP_Pos 24 +#define MPU_RASR_AP_Msk (7UL << MPU_RASR_AP_Pos) +#define RAM_ADDRESS_START (0x20000000UL) +#define RAM_SIZE (0x19UL << 0UL) +#define PERIPH_ADDRESS_START (0x40000000) +#define PERIPH_SIZE (0x39UL << 0UL) +#define FLASH_ADDRESS_START (0x08000000) +#define FLASH_SIZE (0x27UL << 0UL) +#define portMPU_REGION_READ_WRITE (0x03UL << MPU_RASR_AP_Pos) +#define portMPU_REGION_PRIVILEGED_READ_ONLY (0x05UL << MPU_RASR_AP_Pos) +#define portMPU_REGION_READ_ONLY (0x06UL << MPU_RASR_AP_Pos) +#define portMPU_REGION_PRIVILEGED_READ_WRITE (0x01UL << MPU_RASR_AP_Pos) +#define RAM_REGION_NUMBER (0x00UL << MPU_RNR_REGION_Pos) +#define FLASH_REGION_NUMBER (0x01UL << MPU_RNR_REGION_Pos) +#define PERIPH_REGION_NUMBER (0x02UL << MPU_RNR_REGION_Pos) + + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void MPU_Config(void); +void MPU_AccessPermConfig(void); + +#endif /* __STM32_MPU_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32f2xx_conf.h new file mode 100644 index 000000000..3eab2418c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CortexM3/MPU/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32f2xx_it.c new file mode 100644 index 000000000..5b3136bbc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32f2xx_it.c @@ -0,0 +1,177 @@ +/** + ****************************************************************************** + * @file CortexM3/MPU/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CortexM3_MPU + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Turn on LED2 */ + STM_EVAL_LEDOn(LED2); + + /* Go to infinite loop */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32f2xx_it.h new file mode 100644 index 000000000..04cbc10a2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file CortexM3/MPU/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/MPU/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/main.c new file mode 100644 index 000000000..9558c3523 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/main.c @@ -0,0 +1,186 @@ +/** + ****************************************************************************** + * @file CortexM3/Mode_Privilege/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CortexM3_Mode_Privilege + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define SP_PROCESS_SIZE 0x200 /* Process stack size */ +#define SP_PROCESS 0x02 /* Process stack */ +#define SP_MAIN 0x00 /* Main stack */ +#define THREAD_MODE_PRIVILEGED 0x00 /* Thread mode has privileged access */ +#define THREAD_MODE_UNPRIVILEGED 0x01 /* Thread mode has unprivileged access */ + +/* Private macro -------------------------------------------------------------*/ +#if defined ( __CC_ARM ) + __ASM void __SVC(void) + { + SVC 0x01 + BX R14 + } +#elif defined ( __ICCARM__ ) + static __INLINE void __SVC() { __ASM ("svc 0x01");} +#elif defined ( __GNUC__ ) + static __INLINE void __SVC() { __ASM volatile ("svc 0x01");} + #elif defined ( __TASKING__ ) + static __INLINE void __SVC() { __ASM ("svc 0x01");} +#endif + +/* Private variables ---------------------------------------------------------*/ +__IO uint8_t PSPMemAlloc[SP_PROCESS_SIZE]; +__IO uint32_t Index = 0, PSPValue = 0, CurrentStack = 0, ThreadMode = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + +/* Switch Thread mode Stack from Main to Process -----------------------------*/ + /* Initialize memory reserved for Process Stack */ + for(Index = 0; Index < SP_PROCESS_SIZE; Index++) + { + PSPMemAlloc[Index] = 0x00; + } + + /* Set Process stack value */ + __set_PSP((uint32_t)PSPMemAlloc + SP_PROCESS_SIZE); + + /* Select Process Stack as Thread mode Stack */ + __set_CONTROL(SP_PROCESS); + + /* Get the Thread mode stack used */ + if((__get_CONTROL() & 0x02) == SP_MAIN) + { + /* Main stack is used as the current stack */ + CurrentStack = SP_MAIN; + } + else + { + /* Process stack is used as the current stack */ + CurrentStack = SP_PROCESS; + + /* Get process stack pointer value */ + PSPValue = __get_PSP(); + } + +/* Switch Thread mode from privileged to unprivileged ------------------------*/ + /* Thread mode has unprivileged access */ + __set_CONTROL(THREAD_MODE_UNPRIVILEGED | SP_PROCESS); + + /* Unprivileged access mainly affect ability to: + - Use or not use certain instructions such as MSR fields + - Access System Control Space (SCS) registers such as NVIC and SysTick */ + + /* Check Thread mode privilege status */ + if((__get_CONTROL() & 0x01) == THREAD_MODE_PRIVILEGED) + { + /* Thread mode has privileged access */ + ThreadMode = THREAD_MODE_PRIVILEGED; + } + else + { + /* Thread mode has unprivileged access*/ + ThreadMode = THREAD_MODE_UNPRIVILEGED; + } + +/* Switch back Thread mode from unprivileged to privileged -------------------*/ + /* Try to switch back Thread mode to privileged (Not possible, this can be + done only in Handler mode) */ + __set_CONTROL(THREAD_MODE_PRIVILEGED | SP_PROCESS); + + /* Generate a system call exception, and in the ISR switch back Thread mode + to privileged */ + __SVC(); + + /* Check Thread mode privilege status */ + if((__get_CONTROL() & 0x01) == THREAD_MODE_PRIVILEGED) + { + /* Thread mode has privileged access */ + ThreadMode = THREAD_MODE_PRIVILEGED; + } + else + { + /* Thread mode has unprivileged access*/ + ThreadMode = THREAD_MODE_UNPRIVILEGED; + } + + while (1) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/readme.txt new file mode 100644 index 000000000..1a26d85e4 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/readme.txt @@ -0,0 +1,83 @@ +/** + @page CortexM3_Mode_Privilege CortexM3 Mode Privilege example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file CortexM3/Mode_Privilege/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the CortexM3 Mode Privilege example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to modify CortexM3 Thread mode privilege access and stack. +CortexM3 Thread mode is entered on Reset, and can be entered as a result of an +exception return. + +The associated program is used to: + +1. Switch the Thread mode stack from Main stack to Process stack + +2. Switch the Thread mode from Privileged to Unprivileged + +3. Switch the Thread mode from Unprivileged back to Privileged + +To monitor the stack used and the privileged or unprivileged access level of code +in Thread mode, a set of variables is available within the program. It is also +possible to use the 'Cortex register' window of the debugger. + + +@par Directory contents + + - CortexM3/Mode_Privilege/stm32f2xx_conf.h Library Configuration file + - CortexM3/Mode_Privilege/stm32f2xx_it.c Interrupt handlers + - CortexM3/Mode_Privilege/stm32f2xx_it.h Interrupt handlers header file + - CortexM3/Mode_Privilege/main.c Main program + - CortexM3/Mode_Privilege/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/stm32f2xx_conf.h new file mode 100644 index 000000000..8ded0ca86 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file CortexM3/Mode_Privilege/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/stm32f2xx_it.c new file mode 100644 index 000000000..45384362d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/stm32f2xx_it.c @@ -0,0 +1,175 @@ +/** + ****************************************************************************** + * @file CortexM3/Mode_Privilege/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CortexM3_Mode_Privilege + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ + /* Switch back Thread mode to privileged */ + __set_CONTROL(2); +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/stm32f2xx_it.h new file mode 100644 index 000000000..df13c530a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file CortexM3/Mode_Privilege/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/CortexM3/Mode_Privilege/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/main.c new file mode 100644 index 000000000..ba60beef1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/main.c @@ -0,0 +1,341 @@ +/** + ****************************************************************************** + * @file DAC/DAC_SignalsGeneration/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DAC_SignalsGeneration + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define DAC_DHR12R2_ADDRESS 0x40007414 +#define DAC_DHR8R1_ADDRESS 0x40007410 + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +DAC_InitTypeDef DAC_InitStructure; + +const uint16_t Sine12bit[32] = { + 2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056, + 3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909, + 599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647}; +const uint8_t Escalator8bit[6] = {0x0, 0x33, 0x66, 0x99, 0xCC, 0xFF}; + +__IO uint8_t SelectedWavesForm = 1; +__IO uint8_t KeyPressed = SET; + +/* Private function prototypes -----------------------------------------------*/ +void TIM6_Config(void); + +void DAC_Ch1_EscalatorConfig(void); +void DAC_Ch2_SineWaveConfig(void); + +void DAC_Ch1_NoiseConfig(void); +void DAC_Ch2_TriangleConfig(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Preconfiguration before using DAC----------------------------------------*/ + GPIO_InitTypeDef GPIO_InitStructure; + + /* DMA1 clock and GPIOA clock enable (to be used with DAC) */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1 | RCC_AHB1Periph_GPIOA, ENABLE); + + /* DAC Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); + + /* DAC channel 1 & 2 (DAC_OUT1 = PA.4)(DAC_OUT2 = PA.5) configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* TIM6 Configuration ------------------------------------------------------*/ + TIM6_Config(); + + /* Configures Key Button */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + + while (1) + { + /* If the Key is pressed */ + if (KeyPressed != RESET) + { + DAC_DeInit(); + + /* select waves forms according to the Key Button status */ + if (SelectedWavesForm == 1) + { + /* The sine wave and the escalator wave has been selected */ + + /* Escalator Wave generator ------------------------------------------*/ + DAC_Ch1_EscalatorConfig(); + + /* Sine Wave generator -----------------------------------------------*/ + DAC_Ch2_SineWaveConfig(); + + } + else + { + /* The triangle wave and the noise wave has been selected */ + + /* Noise Wave generator ----------------------------------------------*/ + DAC_Ch1_NoiseConfig(); + + /* Triangle Wave generator -------------------------------------------*/ + DAC_Ch2_TriangleConfig(); + } + + KeyPressed = RESET; + } + } +} + +/** + * @brief TIM6 Configuration + * @note TIM6 configuration is based on APB1 frequency + * @note TIM6 Update event occurs each TIM6CLK/256 + * @param None + * @retval None + */ +void TIM6_Config(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + /* TIM6 Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); + + /* -------------------------------------------------------- + TIM3 input clock (TIM6CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM6CLK = 2 * PCLK1 + TIM6CLK = HCLK / 2 = SystemCoreClock /2 + + TIM6 Update event occurs each TIM6CLK/256 + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + + ----------------------------------------------------------- */ + /* Time base configuration */ + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + TIM_TimeBaseStructure.TIM_Period = 0xFF; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); + + /* TIM6 TRGO selection */ + TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update); + + /* TIM6 enable counter */ + TIM_Cmd(TIM6, ENABLE); +} + +/** + * @brief DAC Channel2 SineWave Configuration + * @param None + * @retval None + */ +void DAC_Ch2_SineWaveConfig(void) +{ + DMA_InitTypeDef DMA_InitStructure; + + /* DAC channel2 Configuration */ + DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; + DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; + DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; + DAC_Init(DAC_Channel_2, &DAC_InitStructure); + + /* DMA1_Stream6 channel7 configuration **************************************/ + DMA_DeInit(DMA1_Stream6); + DMA_InitStructure.DMA_Channel = DMA_Channel_7; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R2_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&Sine12bit; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = 32; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA1_Stream6, &DMA_InitStructure); + + /* Enable DMA1_Stream6 */ + DMA_Cmd(DMA1_Stream6, ENABLE); + + /* Enable DAC Channel2 */ + DAC_Cmd(DAC_Channel_2, ENABLE); + + /* Enable DMA for DAC Channel2 */ + DAC_DMACmd(DAC_Channel_2, ENABLE); +} + +/** + * @brief DAC Channel1 Escalator Configuration + * @param None + * @retval None + */ +void DAC_Ch1_EscalatorConfig(void) +{ + DMA_InitTypeDef DMA_InitStructure; + + /* DAC channel1 Configuration */ + DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; + DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; + DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; + DAC_Init(DAC_Channel_1, &DAC_InitStructure); + + /* DMA1_Stream5 channel7 configuration **************************************/ + DMA_DeInit(DMA1_Stream5); + DMA_InitStructure.DMA_Channel = DMA_Channel_7; + DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8R1_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&Escalator8bit; + DMA_InitStructure.DMA_BufferSize = 6; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA1_Stream5, &DMA_InitStructure); + + /* Enable DMA1_Stream5 */ + DMA_Cmd(DMA1_Stream5, ENABLE); + + /* Enable DAC Channel1 */ + DAC_Cmd(DAC_Channel_1, ENABLE); + + /* Enable DMA for DAC Channel1 */ + DAC_DMACmd(DAC_Channel_1, ENABLE); +} + +/** + * @brief DAC Channel2 Triangle Configuration + * @param None + * @retval None + */ +void DAC_Ch2_TriangleConfig(void) +{ + /* DAC channel2 Configuration */ + DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; + DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Triangle; + DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_1023; + DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; + DAC_Init(DAC_Channel_2, &DAC_InitStructure); + + /* Enable DAC Channel2 */ + DAC_Cmd(DAC_Channel_2, ENABLE); + + /* Set DAC channel2 DHR12RD register */ + DAC_SetChannel2Data(DAC_Align_12b_R, 0x100); +} + +/** + * @brief DAC Channel1 Noise Configuration + * @param None + * @retval None + */ +void DAC_Ch1_NoiseConfig(void) +{ + /* DAC channel1 Configuration */ + DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; + DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Noise; + DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits10_0; + DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; + DAC_Init(DAC_Channel_1, &DAC_InitStructure); + + /* Enable DAC Channel1 */ + DAC_Cmd(DAC_Channel_1, ENABLE); + + /* Set DAC Channel1 DHR12L register */ + DAC_SetChannel1Data(DAC_Align_12b_L, 0x7FF0); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/readme.txt new file mode 100644 index 000000000..e722722aa --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/readme.txt @@ -0,0 +1,80 @@ +/** + @page DAC_SignalsGen DAC Signals generation example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file DAC/DAC_SignalsGeneration/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the DAC Signals generation example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the DAC peripheral to +generate several signals using DMA controller. +When the user presses the KEY push-button, DMA transfers the two selected +waveforms to the DAC. +For each press on KEY button, 2 signals has been selected and can be monitored on +the two DAC channels: + - Escalator waveform (Channel 1) and Sine waveForm (Channel 2). + - Noise waveform (Channel 1) and Triangle waveform (Channel 2). + + +@par Directory contents + + - DAC/DAC_SignalsGeneration/stm32f2xx_conf.h Library Configuration file + - DAC/DAC_SignalsGeneration/stm32f2xx_it.c Interrupt handlers + - DAC/DAC_SignalsGeneration/stm32f2xx_it.h Interrupt handlers header file + - DAC/DAC_SignalsGeneration/main.c Main program + - DAC/DAC_SignalsGeneration/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use KEY push-button connected to PG15. + - Connect PA4 (DAC Channel1) and PA5 (DAC Channel2) pins to an oscilloscope. + - Make sure that JP31 is removed. + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/stm32f2xx_conf.h new file mode 100644 index 000000000..742c07736 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file DAC/OneChannelDMA_SineWave/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/stm32f2xx_it.c new file mode 100644 index 000000000..76ca5bd62 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/stm32f2xx_it.c @@ -0,0 +1,191 @@ +/** + ****************************************************************************** + * @file DAC/DAC_SignalsGeneration/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ +/** @addtogroup DAC_SignalsGeneration + * @{ + */ +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint8_t SelectedWavesForm, KeyPressed; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ +/** + * @brief This function handles External line 15 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + /* Change the wave */ + KeyPressed = 1; + + /* Change the selected waves forms */ + SelectedWavesForm = !SelectedWavesForm; + + /* Clear the Right Button EXTI line pending bit */ + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + } +} +/** + * @} + */ +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/stm32f2xx_it.h new file mode 100644 index 000000000..03cc8bff5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/stm32f2xx_it.h @@ -0,0 +1,61 @@ +/** + ****************************************************************************** + * @file DAC/DAC_SignalsGeneration/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void EXTI15_10_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/camera_api.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/camera_api.c new file mode 100644 index 000000000..36e9f5691 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/camera_api.c @@ -0,0 +1,355 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/camera_api.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the routinue needed to configure OV9655/OV2640 + * Camera modules. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "camera_api.h" +#include "dcmi_ov9655.h" +#include "dcmi_ov2640.h" + +/** @addtogroup stm32f2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DCMI_Camera + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Image Formats */ +const uint8_t *ImageForematArray[] = +{ + "BMP QQVGA Format ", + "BMP QVGA Format ", +}; +static __IO uint32_t TimingDelay; +__IO uint32_t PressedKey = 0; +uint8_t ValueMin = 0, ValueMax = 0; +Camera_TypeDef Camera; +ImageFormat_TypeDef ImageFormat; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Initialize resources used for this demo. + * @param None + * @retval Digit value + */ +uint8_t Demo_Init(void) +{ + __IO uint32_t tmpValue = 0; + PressedKey = NOKEY; + + /* Configure the IO Expander */ + if(IOE_Config() == IOE_OK) + { + LCD_DisplayStringLine(LINE(6), (uint8_t*)"IO Expander OK "); + Delay(0xFF); + } + else + { + LCD_SetTextColor(LCD_COLOR_RED); + LCD_DisplayStringLine(LINE(6), (uint8_t*)"IO Expander FAILED Please Reset the board"); + while (1); + } + + /* Enable the Joystick interrupt */ + IOE_ITConfig(IOE_ITSRC_JOYSTICK); + + Demo_LCD_Clear(); + LCD_DisplayStringLine(LINE(6), (uint8_t*)"Main Menu: "); + LCD_DisplayStringLine(LINE(7), (uint8_t*)"=========="); + LCD_DisplayStringLine(LINE(8), (uint8_t*)"Use UP and DOWN Buttons to Navigate"); + LCD_DisplayStringLine(LINE(9), (uint8_t*)"Use SEL Button to Select Image Format"); + + LCD_DisplayStringLine(LINE(11), (uint8_t*)"Select the Image Format:"); + Display_Menu(ValueMin, ValueMax); + + while (1) + { + /* If "UP" pushbutton is pressed */ + if (PressedKey == UP) + { + PressedKey = NOKEY; + + /* Increase the value of the digit */ + if (tmpValue == ValueMin) + { + tmpValue = ValueMax - 1; + } + else + { + tmpValue--; + } + /* Display new Menu */ + Display_Menu(tmpValue, ValueMax); + } + /* If "DOWN" pushbutton is pressed */ + if (PressedKey == DOWN) + { + PressedKey = NOKEY; + + /* Decrease the value of the digit */ + if (tmpValue == (ValueMax - 1)) + { + tmpValue = ValueMin; + } + else + { + tmpValue++; + } + /* Display new Menu */ + Display_Menu(tmpValue, ValueMax); + } + /* If "SEL" pushbutton is pressed */ + if (PressedKey == SEL) + { + PressedKey = NOKEY; + + /* Return the digit value and exit */ + return (ImageFormat_TypeDef)tmpValue; + } + } +} + +/** + * @brief Display the navigation menu. + * @param None + * @retval None + */ +void Display_Menu(uint8_t ForematIndex, uint8_t MaxForematIndex) +{ + uint32_t index; + + for(index=0; index
© COPYRIGHT 2012 STMicroelectronics
+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __CAMERA_API_H +#define __CAMERA_API_H + +/* Includes ------------------------------------------------------------------*/ +#include "lcd_log.h" +#include "main.h" + +/* Exported constants --------------------------------------------------------*/ +#define DCMI_DR_ADDRESS 0x50050028 +#define FSMC_LCD_ADDRESS 0x68000002 +#define NOKEY 0 +#define SEL 1 +#define UP 2 +#define DOWN 3 + +/* Exported types ------------------------------------------------------------*/ +/* Camera devices enumeration */ +typedef enum +{ + OV9655_CAMERA = 0x00, /* Use OV9655 Camera */ + OV2640_CAMERA = 0x01 /* Use OV2640 Camera */ +}Camera_TypeDef; + +/* Image Sizes enumeration */ +typedef enum +{ + BMP_QQVGA = 0x00, /* BMP Image QQVGA 160x120 Size */ + BMP_QVGA = 0x01, /* BMP Image QVGA 320x240 Size */ + JPEG_160x120 = 0x02, /* JPEG Image 160x120 Size */ + JPEG_176x144 = 0x03, /* JPEG Image 176x144 Size */ + JPEG_320x240 = 0x04, /* JPEG Image 320x240 Size */ + JPEG_352x288 = 0x05 /* JPEG Image 352x288 Size */ +}ImageFormat_TypeDef; + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +uint8_t Demo_Init(void); +void Display_Menu(uint8_t ForematIndex, uint8_t MaxForematIndex); +void Camera_Config(void); +void OV2640_SpecialEffects(uint8_t index); +void Delay(uint32_t nTime); +void TimingDelay_Decrement(void); +void Demo_LCD_Clear(void); + +#endif /* __CAMERA_API_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov2640.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov2640.c new file mode 100644 index 000000000..fbe3195a5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov2640.c @@ -0,0 +1,1563 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/dcmi_ov2640.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file includes the driver for OV2640 Camera module mounted on + * STM322xG-EVAL board RevB. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "camera_api.h" +#include "dcmi_ov2640.h" + +/** @addtogroup stm32f2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DCMI_Camera + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define TIMEOUT 2 + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* QQVGA 160x120 */ +const char OV2640_QQVGA[][2]= +{ + 0xff, 0x00, + 0x2c, 0xff, + 0x2e, 0xdf, + 0xff, 0x01, + 0x3c, 0x32, + 0x11, 0x00, + 0x09, 0x02, + 0x03, 0xcf, + 0x04, 0x08, + 0x13, 0xe5, + 0x14, 0x48, + 0x2c, 0x0c, + 0x33, 0x78, + 0x3a, 0x33, + 0x3b, 0xfb, + 0x3e, 0x00, + 0x43, 0x11, + 0x16, 0x10, + 0x39, 0x02, + 0x35, 0x88, + 0x22, 0x0a, + 0x37, 0x40, + 0x23, 0x00, + 0x34, 0xa0, + 0x36, 0x1a, + 0x06, 0x02, + 0x07, 0xc0, + 0x0d, 0xb7, + 0x0e, 0x01, + 0x4c, 0x00, + 0x4a, 0x81, + 0x21, 0x99, + 0x24, 0x3a, + 0x25, 0x32, + 0x26, 0x82, + 0x5c, 0x00, + 0x63, 0x00, + 0x5d, 0x55, + 0x5e, 0x7d, + 0x5f, 0x7d, + 0x60, 0x55, + 0x61, 0x70, + 0x62, 0x80, + 0x7c, 0x05, + 0x20, 0x80, + 0x28, 0x30, + 0x6c, 0x00, + 0x6d, 0x80, + 0x6e, 0x00, + 0x70, 0x02, + 0x71, 0x96, + 0x73, 0xe1, + 0x3d, 0x34, + 0x5a, 0x57, + 0x4f, 0xbb, + 0x50, 0x9c, + 0x0f, 0x43, + 0xff, 0x00, + 0xe5, 0x7f, + 0xf9, 0xc0, + 0x41, 0x24, + 0xe0, 0x14, + 0x76, 0xff, + 0x33, 0xa0, + 0x42, 0x20, + 0x43, 0x18, + 0x4c, 0x00, + 0x87, 0xd0, + 0x88, 0x3f, + 0xd7, 0x03, + 0xd9, 0x10, + 0xd3, 0x82, + 0xc8, 0x08, + 0xc9, 0x80, + 0x7c, 0x00, + 0x7d, 0x02, + 0x7c, 0x03, + 0x7d, 0x48, + 0x7d, 0x48, + 0x7c, 0x08, + 0x7d, 0x20, + 0x7d, 0x10, + 0x7d, 0x0e, + 0x90, 0x00, + 0x91, 0x0e, + 0x91, 0x1a, + 0x91, 0x31, + 0x91, 0x5a, + 0x91, 0x69, + 0x91, 0x75, + 0x91, 0x7e, + 0x91, 0x88, + 0x91, 0x8f, + 0x91, 0x96, + 0x91, 0xa3, + 0x91, 0xaf, + 0x91, 0xc4, + 0x91, 0xd7, + 0x91, 0xe8, + 0x91, 0x20, + 0x92, 0x00, + 0x93, 0x06, + 0x93, 0xe3, + 0x93, 0x05, + 0x93, 0x05, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x96, 0x00, + 0x97, 0x08, + 0x97, 0x19, + 0x97, 0x02, + 0x97, 0x0c, + 0x97, 0x24, + 0x97, 0x30, + 0x97, 0x28, + 0x97, 0x26, + 0x97, 0x02, + 0x97, 0x98, + 0x97, 0x80, + 0x97, 0x00, + 0x97, 0x00, + 0xc3, 0xed, + 0xa4, 0x00, + 0xa8, 0x00, + 0xbf, 0x00, + 0xba, 0xf0, + 0xbc, 0x64, + 0xbb, 0x02, + 0xb6, 0x3d, + 0xb8, 0x57, + 0xb7, 0x38, + 0xb9, 0x4e, + 0xb3, 0xe8, + 0xb4, 0xe1, + 0xb5, 0x66, + 0xb0, 0x67, + 0xb1, 0x5e, + 0xb2, 0x04, + 0xc7, 0x00, + 0xc6, 0x51, + 0xc5, 0x11, + 0xc4, 0x9c, + 0xcf, 0x02, + 0xa6, 0x00, + 0xa7, 0xe0, + 0xa7, 0x10, + 0xa7, 0x1e, + 0xa7, 0x21, + 0xa7, 0x00, + 0xa7, 0x28, + 0xa7, 0xd0, + 0xa7, 0x10, + 0xa7, 0x16, + 0xa7, 0x21, + 0xa7, 0x00, + 0xa7, 0x28, + 0xa7, 0xd0, + 0xa7, 0x10, + 0xa7, 0x17, + 0xa7, 0x21, + 0xa7, 0x00, + 0xa7, 0x28, + 0xc0, 0xc8, + 0xc1, 0x96, + 0x86, 0x1d, + 0x50, 0x00, + 0x51, 0x90, + 0x52, 0x18, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x88, + 0x57, 0x00, + 0x5a, 0x90, + 0x5b, 0x18, + 0x5c, 0x05, + 0xc3, 0xef, + 0x7f, 0x00, + 0xda, 0x00, + 0xe5, 0x1f, + 0xe1, 0x67, + 0xe0, 0x00, + 0xdd, 0xff, + 0x05, 0x00, + 0xff, 0x01, + 0xff, 0x01, + 0x12, 0x00, + 0x17, 0x11, + 0x18, 0x75, + 0x19, 0x01, + 0x1a, 0x97, + 0x32, 0x36, + 0x4f, 0xbb, + 0x6d, 0x80, + 0x3d, 0x34, + 0x39, 0x02, + 0x35, 0x88, + 0x22, 0x0a, + 0x37, 0x40, + 0x23, 0x00, + 0x34, 0xa0, + 0x36, 0x1a, + 0x06, 0x02, + 0x07, 0xc0, + 0x0d, 0xb7, + 0x0e, 0x01, + 0x4c, 0x00, + 0xff, 0x00, + 0xe0, 0x04, + 0x8c, 0x00, + 0x87, 0xd0, + 0xe0, 0x00, + 0xff, 0x00, + 0xe0, 0x14, + 0xe1, 0x77, + 0xe5, 0x1f, + 0xd7, 0x03, + 0xda, 0x10, + 0xe0, 0x00, + 0xff, 0x00, + 0xe0, 0x04, + 0xc0, 0xc8, + 0xc1, 0x96, + 0x86, 0x1d, + 0x50, 0x00, + 0x51, 0x90, + 0x52, 0x2c, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x88, + 0x57, 0x00, + 0x5a, 0x90, + 0x5b, 0x2c, + 0x5c, 0x05, + 0xe0, 0x00, + 0xd3, 0x04, + 0xff, 0x00, + 0xc3, 0xef, + 0xa6, 0x00, + 0xa7, 0xdd, + 0xa7, 0x78, + 0xa7, 0x7e, + 0xa7, 0x24, + 0xa7, 0x00, + 0xa7, 0x25, + 0xa6, 0x06, + 0xa7, 0x20, + 0xa7, 0x58, + 0xa7, 0x73, + 0xa7, 0x34, + 0xa7, 0x00, + 0xa7, 0x25, + 0xa6, 0x0c, + 0xa7, 0x28, + 0xa7, 0x58, + 0xa7, 0x6d, + 0xa7, 0x34, + 0xa7, 0x00, + 0xa7, 0x25, + 0xff, 0x00, + 0xe0, 0x04, + 0xe1, 0x67, + 0xe5, 0x1f, + 0xd7, 0x01, + 0xda, 0x08, + 0xda, 0x09, + 0xe0, 0x00, + 0x98, 0x00, + 0x99, 0x00, + 0xff, 0x01, + 0x04, 0x28, + 0xff, 0x01, + 0x12, 0x40, + 0x17, 0x11, + 0x18, 0x43, + 0x19, 0x00, + 0x1a, 0x4b, + 0x32, 0x09, + 0x4f, 0xca, + 0x50, 0xa8, + 0x5a, 0x23, + 0x6d, 0x00, + 0x39, 0x12, + 0x35, 0xda, + 0x22, 0x1a, + 0x37, 0xc3, + 0x23, 0x00, + 0x34, 0xc0, + 0x36, 0x1a, + 0x06, 0x88, + 0x07, 0xc0, + 0x0d, 0x87, + 0x0e, 0x41, + 0x4c, 0x00, + 0xff, 0x00, + 0xe0, 0x04, + 0xc0, 0x64, + 0xc1, 0x4b, + 0x86, 0x35, + 0x50, 0x92, + 0x51, 0xc8, + 0x52, 0x96, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x00, + 0x57, 0x00, + 0x5a, 0x28, + 0x5b, 0x1e, + 0x5c, 0x00, + 0xe0, 0x00, + 0xff, 0x01, + 0x11, 0x00, + 0x3d, 0x38, + 0x2d, 0x00, + 0x50, 0x65, + 0xff, 0x00, + 0xd3, 0x04, + 0x7c, 0x00, + 0x7d, 0x04, + 0x7c, 0x09, + 0x7d, 0x28, + 0x7d, 0x00, +}; + +/* QVGA 320x240 */ +const unsigned char OV2640_QVGA[][2]= +{ + 0xff, 0x00, + 0x2c, 0xff, + 0x2e, 0xdf, + 0xff, 0x01, + 0x3c, 0x32, + 0x11, 0x00, + 0x09, 0x02, + 0x04, 0x28, + 0x13, 0xe5, + 0x14, 0x48, + 0x2c, 0x0c, + 0x33, 0x78, + 0x3a, 0x33, + 0x3b, 0xfB, + 0x3e, 0x00, + 0x43, 0x11, + 0x16, 0x10, + 0x4a, 0x81, + 0x21, 0x99, + 0x24, 0x40, + 0x25, 0x38, + 0x26, 0x82, + 0x5c, 0x00, + 0x63, 0x00, + 0x46, 0x3f, + 0x0c, 0x3c, + 0x61, 0x70, + 0x62, 0x80, + 0x7c, 0x05, + 0x20, 0x80, + 0x28, 0x30, + 0x6c, 0x00, + 0x6d, 0x80, + 0x6e, 0x00, + 0x70, 0x02, + 0x71, 0x94, + 0x73, 0xc1, + 0x3d, 0x34, + 0x5a, 0x57, + 0x12, 0x00, + 0x11, 0x00, + 0x17, 0x11, + 0x18, 0x75, + 0x19, 0x01, + 0x1a, 0x97, + 0x32, 0x36, + 0x03, 0x0f, + 0x37, 0x40, + 0x4f, 0xbb, + 0x50, 0x9c, + 0x5a, 0x57, + 0x6d, 0x80, + 0x6d, 0x38, + 0x39, 0x02, + 0x35, 0x88, + 0x22, 0x0a, + 0x37, 0x40, + 0x23, 0x00, + 0x34, 0xa0, + 0x36, 0x1a, + 0x06, 0x02, + 0x07, 0xc0, + 0x0d, 0xb7, + 0x0e, 0x01, + 0x4c, 0x00, + 0xff, 0x00, + 0xe5, 0x7f, + 0xf9, 0xc0, + 0x41, 0x24, + 0xe0, 0x14, + 0x76, 0xff, + 0x33, 0xa0, + 0x42, 0x20, + 0x43, 0x18, + 0x4c, 0x00, + 0x87, 0xd0, + 0x88, 0x3f, + 0xd7, 0x03, + 0xd9, 0x10, + 0xd3, 0x82, + 0xc8, 0x08, + 0xc9, 0x80, + 0x7d, 0x00, + 0x7c, 0x03, + 0x7d, 0x48, + 0x7c, 0x08, + 0x7d, 0x20, + 0x7d, 0x10, + 0x7d, 0x0e, + 0x90, 0x00, + 0x91, 0x0e, + 0x91, 0x1a, + 0x91, 0x31, + 0x91, 0x5a, + 0x91, 0x69, + 0x91, 0x75, + 0x91, 0x7e, + 0x91, 0x88, + 0x91, 0x8f, + 0x91, 0x96, + 0x91, 0xa3, + 0x91, 0xaf, + 0x91, 0xc4, + 0x91, 0xd7, + 0x91, 0xe8, + 0x91, 0x20, + 0x92, 0x00, + 0x93, 0x06, + 0x93, 0xe3, + 0x93, 0x02, + 0x93, 0x02, + 0x93, 0x00, + 0x93, 0x04, + 0x93, 0x00, + 0x93, 0x03, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x96, 0x00, + 0x97, 0x08, + 0x97, 0x19, + 0x97, 0x02, + 0x97, 0x0c, + 0x97, 0x24, + 0x97, 0x30, + 0x97, 0x28, + 0x97, 0x26, + 0x97, 0x02, + 0x97, 0x98, + 0x97, 0x80, + 0x97, 0x00, + 0x97, 0x00, + 0xc3, 0xef, + 0xff, 0x00, + 0xba, 0xdc, + 0xbb, 0x08, + 0xb6, 0x24, + 0xb8, 0x33, + 0xb7, 0x20, + 0xb9, 0x30, + 0xb3, 0xb4, + 0xb4, 0xca, + 0xb5, 0x43, + 0xb0, 0x5c, + 0xb1, 0x4f, + 0xb2, 0x06, + 0xc7, 0x00, + 0xc6, 0x51, + 0xc5, 0x11, + 0xc4, 0x9c, + 0xbf, 0x00, + 0xbc, 0x64, + 0xa6, 0x00, + 0xa7, 0x1e, + 0xa7, 0x6b, + 0xa7, 0x47, + 0xa7, 0x33, + 0xa7, 0x00, + 0xa7, 0x23, + 0xa7, 0x2e, + 0xa7, 0x85, + 0xa7, 0x42, + 0xa7, 0x33, + 0xa7, 0x00, + 0xa7, 0x23, + 0xa7, 0x1b, + 0xa7, 0x74, + 0xa7, 0x42, + 0xa7, 0x33, + 0xa7, 0x00, + 0xa7, 0x23, + 0xc0, 0xc8, + 0xc1, 0x96, + 0x8c, 0x00, + 0x86, 0x3d, + 0x50, 0x92, + 0x51, 0x90, + 0x52, 0x2c, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x88, + 0x5a, 0x50, + 0x5b, 0x3c, + 0x5c, 0x00, + 0xd3, 0x04, + 0x7f, 0x00, + 0xda, 0x00, + 0xe5, 0x1f, + 0xe1, 0x67, + 0xe0, 0x00, + 0xdd, 0x7f, + 0x05, 0x00, + 0xff, 0x00, + 0xe0, 0x04, + 0xc0, 0xc8, + 0xc1, 0x96, + 0x86, 0x3d, + 0x50, 0x92, + 0x51, 0x90, + 0x52, 0x2c, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x88, + 0x57, 0x00, + 0x5a, 0x50, + 0x5b, 0x3c, + 0x5c, 0x00, + 0xd3, 0x04, + 0xe0, 0x00, + 0xFF, 0x00, + 0x05, 0x00, + 0xDA, 0x08, + 0xda, 0x09, + 0x98, 0x00, + 0x99, 0x00, + 0x00, 0x00, +}; + +const unsigned char OV2640_JPEG_INIT[][2]= +{ + 0xff, 0x00, + 0x2c, 0xff, + 0x2e, 0xdf, + 0xff, 0x01, + 0x3c, 0x32, + 0x11, 0x30, + 0x09, 0x02, + 0x04, 0x28, + 0x13, 0xe5, + 0x14, 0x48, + 0x2c, 0x0c, + 0x33, 0x78, + 0x3a, 0x33, + 0x3b, 0xfB, + 0x3e, 0x00, + 0x43, 0x11, + 0x16, 0x10, + 0x39, 0x92, + 0x35, 0xda, + 0x22, 0x1a, + 0x37, 0xc3, + 0x23, 0x00, + 0x34, 0xc0, + 0x36, 0x1a, + 0x06, 0x88, + 0x07, 0xc0, + 0x0d, 0x87, + 0x0e, 0x41, + 0x4c, 0x00, + 0x48, 0x00, + 0x5B, 0x00, + 0x42, 0x03, + 0x4a, 0x81, + 0x21, 0x99, + 0x24, 0x40, + 0x25, 0x38, + 0x26, 0x82, + 0x5c, 0x00, + 0x63, 0x00, + 0x61, 0x70, + 0x62, 0x80, + 0x7c, 0x05, + 0x20, 0x80, + 0x28, 0x30, + 0x6c, 0x00, + 0x6d, 0x80, + 0x6e, 0x00, + 0x70, 0x02, + 0x71, 0x94, + 0x73, 0xc1, + 0x12, 0x40, + 0x17, 0x11, + 0x18, 0x43, + 0x19, 0x00, + 0x1a, 0x4b, + 0x32, 0x09, + 0x37, 0xc0, + 0x4f, 0x60, + 0x50, 0xa8, + 0x6d, 0x00, + 0x3d, 0x38, + 0x46, 0x3f, + 0x4f, 0x60, + 0x0c, 0x3c, + 0xff, 0x00, + 0xe5, 0x7f, + 0xf9, 0xc0, + 0x41, 0x24, + 0xe0, 0x14, + 0x76, 0xff, + 0x33, 0xa0, + 0x42, 0x20, + 0x43, 0x18, + 0x4c, 0x00, + 0x87, 0xd5, + 0x88, 0x3f, + 0xd7, 0x03, + 0xd9, 0x10, + 0xd3, 0x82, + 0xc8, 0x08, + 0xc9, 0x80, + 0x7c, 0x00, + 0x7d, 0x00, + 0x7c, 0x03, + 0x7d, 0x48, + 0x7d, 0x48, + 0x7c, 0x08, + 0x7d, 0x20, + 0x7d, 0x10, + 0x7d, 0x0e, + 0x90, 0x00, + 0x91, 0x0e, + 0x91, 0x1a, + 0x91, 0x31, + 0x91, 0x5a, + 0x91, 0x69, + 0x91, 0x75, + 0x91, 0x7e, + 0x91, 0x88, + 0x91, 0x8f, + 0x91, 0x96, + 0x91, 0xa3, + 0x91, 0xaf, + 0x91, 0xc4, + 0x91, 0xd7, + 0x91, 0xe8, + 0x91, 0x20, + 0x92, 0x00, + 0x93, 0x06, + 0x93, 0xe3, + 0x93, 0x05, + 0x93, 0x05, + 0x93, 0x00, + 0x93, 0x04, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x93, 0x00, + 0x96, 0x00, + 0x97, 0x08, + 0x97, 0x19, + 0x97, 0x02, + 0x97, 0x0c, + 0x97, 0x24, + 0x97, 0x30, + 0x97, 0x28, + 0x97, 0x26, + 0x97, 0x02, + 0x97, 0x98, + 0x97, 0x80, + 0x97, 0x00, + 0x97, 0x00, + 0xc3, 0xed, + 0xa4, 0x00, + 0xa8, 0x00, + 0xc5, 0x11, + 0xc6, 0x51, + 0xbf, 0x80, + 0xc7, 0x10, + 0xb6, 0x66, + 0xb8, 0xA5, + 0xb7, 0x64, + 0xb9, 0x7C, + 0xb3, 0xaf, + 0xb4, 0x97, + 0xb5, 0xFF, + 0xb0, 0xC5, + 0xb1, 0x94, + 0xb2, 0x0f, + 0xc4, 0x5c, + 0xc0, 0x64, + 0xc1, 0x4B, + 0x8c, 0x00, + 0x86, 0x3D, + 0x50, 0x00, + 0x51, 0xC8, + 0x52, 0x96, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x00, + 0x5a, 0xC8, + 0x5b, 0x96, + 0x5c, 0x00, + 0xd3, 0x7f, + 0xc3, 0xed, + 0x7f, 0x00, + 0xda, 0x00, + 0xe5, 0x1f, + 0xe1, 0x67, + 0xe0, 0x00, + 0xdd, 0x7f, + 0x05, 0x00, + + 0x12, 0x40, + 0xd3, 0x7f, + 0xc0, 0x16, + 0xC1, 0x12, + 0x8c, 0x00, + 0x86, 0x3d, + 0x50, 0x00, + 0x51, 0x2C, + 0x52, 0x24, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x00, + 0x5A, 0x2c, + 0x5b, 0x24, + 0x5c, 0x00, +}; + +const unsigned char OV2640_YUV422[][2]= +{ + 0xFF, 0x00, + 0x05, 0x00, + 0xDA, 0x10, + 0xD7, 0x03, + 0xDF, 0x00, + 0x33, 0x80, + 0x3C, 0x40, + 0xe1, 0x77, + 0x00, 0x00, +}; + +const unsigned char OV2640_JPEG[][2]= +{ + 0xe0, 0x14, + 0xe1, 0x77, + 0xe5, 0x1f, + 0xd7, 0x03, + 0xda, 0x10, + 0xe0, 0x00, + 0xFF, 0x01, + 0x04, 0x08, +}; + +/* JPG 160x120 */ +const unsigned char OV2640_160x120_JPEG[][2]= +{ + 0xff, 0x01, + 0x12, 0x40, + 0x17, 0x11, + 0x18, 0x43, + 0x19, 0x00, + 0x1a, 0x4b, + 0x32, 0x09, + 0x4f, 0xca, + 0x50, 0xa8, + 0x5a, 0x23, + 0x6d, 0x00, + 0x39, 0x12, + 0x35, 0xda, + 0x22, 0x1a, + 0x37, 0xc3, + 0x23, 0x00, + 0x34, 0xc0, + 0x36, 0x1a, + 0x06, 0x88, + 0x07, 0xc0, + 0x0d, 0x87, + 0x0e, 0x41, + 0x4c, 0x00, + 0xff, 0x00, + 0xe0, 0x04, + 0xc0, 0x64, + 0xc1, 0x4b, + 0x86, 0x35, + 0x50, 0x92, + 0x51, 0xc8, + 0x52, 0x96, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x00, + 0x57, 0x00, + 0x5a, 0x28, + 0x5b, 0x1e, + 0x5c, 0x00, + 0xe0, 0x00, +}; + +/* JPG, 0x176x144 */ +const unsigned char OV2640_176x144_JPEG[][2]= +{ + 0xff, 0x01, + 0x12, 0x40, + 0x17, 0x11, + 0x18, 0x43, + 0x19, 0x00, + 0x1a, 0x4b, + 0x32, 0x09, + 0x4f, 0xca, + 0x50, 0xa8, + 0x5a, 0x23, + 0x6d, 0x00, + 0x39, 0x12, + 0x35, 0xda, + 0x22, 0x1a, + 0x37, 0xc3, + 0x23, 0x00, + 0x34, 0xc0, + 0x36, 0x1a, + 0x06, 0x88, + 0x07, 0xc0, + 0x0d, 0x87, + 0x0e, 0x41, + 0x4c, 0x00, + 0xff, 0x00, + 0xe0, 0x04, + 0xc0, 0x64, + 0xc1, 0x4b, + 0x86, 0x35, + 0x50, 0x92, + 0x51, 0xc8, + 0x52, 0x96, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x00, + 0x57, 0x00, + 0x5a, 0x2c, + 0x5b, 0x24, + 0x5c, 0x00, + 0xe0, 0x00, +}; + +/* JPG 320x240 */ +const unsigned char OV2640_320x240_JPEG[][2]= +{ + 0xff, 0x01, + 0x12, 0x40, + 0x17, 0x11, + 0x18, 0x43, + 0x19, 0x00, + 0x1a, 0x4b, + 0x32, 0x09, + 0x4f, 0xca, + 0x50, 0xa8, + 0x5a, 0x23, + 0x6d, 0x00, + 0x39, 0x12, + 0x35, 0xda, + 0x22, 0x1a, + 0x37, 0xc3, + 0x23, 0x00, + 0x34, 0xc0, + 0x36, 0x1a, + 0x06, 0x88, + 0x07, 0xc0, + 0x0d, 0x87, + 0x0e, 0x41, + 0x4c, 0x00, + 0xff, 0x00, + 0xe0, 0x04, + 0xc0, 0x64, + 0xc1, 0x4b, + 0x86, 0x35, + 0x50, 0x89, + 0x51, 0xc8, + 0x52, 0x96, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x00, + 0x57, 0x00, + 0x5a, 0x50, + 0x5b, 0x3c, + 0x5c, 0x00, + 0xe0, 0x00, +}; + +/* JPG 352x288 */ +const unsigned char OV2640_352x288_JPEG[][2]= +{ + 0xff, 0x01, + 0x12, 0x40, + 0x17, 0x11, + 0x18, 0x43, + 0x19, 0x00, + 0x1a, 0x4b, + 0x32, 0x09, + 0x4f, 0xca, + 0x50, 0xa8, + 0x5a, 0x23, + 0x6d, 0x00, + 0x39, 0x12, + 0x35, 0xda, + 0x22, 0x1a, + 0x37, 0xc3, + 0x23, 0x00, + 0x34, 0xc0, + 0x36, 0x1a, + 0x06, 0x88, + 0x07, 0xc0, + 0x0d, 0x87, + 0x0e, 0x41, + 0x4c, 0x00, + 0xff, 0x00, + 0xe0, 0x04, + 0xc0, 0x64, + 0xc1, 0x4b, + 0x86, 0x35, + 0x50, 0x89, + 0x51, 0xc8, + 0x52, 0x96, + 0x53, 0x00, + 0x54, 0x00, + 0x55, 0x00, + 0x57, 0x00, + 0x5a, 0x58, + 0x5b, 0x48, + 0x5c, 0x00, + 0xe0, 0x00, +}; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Initializes the hardware resources (I2C and GPIO) used to configure + * the OV2640 camera. + * @param None + * @retval None + */ +void OV2640_HW_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + I2C_InitTypeDef I2C_InitStruct; + + /*** Configures the DCMI GPIOs to interface with the OV2640 camera module ***/ + /* Enable DCMI GPIOs clocks */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOH | + RCC_AHB1Periph_GPIOI, ENABLE); + + /* Connect DCMI pins to AF13 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_DCMI); + + GPIO_PinAFConfig(GPIOH, GPIO_PinSource8, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource9, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource10, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource11, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource12, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource14, GPIO_AF_DCMI); + + GPIO_PinAFConfig(GPIOI, GPIO_PinSource5, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOI, GPIO_PinSource6, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOI, GPIO_PinSource7, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOI, GPIO_PinSource4, GPIO_AF_DCMI); + + /* DCMI GPIO configuration */ + /* D0..D4(PH9/10/11/12/14), HSYNC(PH8) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | + GPIO_Pin_12 | GPIO_Pin_14| GPIO_Pin_8; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOH, &GPIO_InitStructure); + + /* D5..D7(PI4/6/7), VSYNC(PI5) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_5; + GPIO_Init(GPIOI, &GPIO_InitStructure); + + /* PCLK(PA6) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /****** Configures the I2C1 used for OV2640 camera module configuration *****/ + /* I2C1 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); + + /* GPIOB clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); + + /* Connect I2C1 pins to AF4 */ + GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_I2C1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_I2C1); + + /* Configure I2C1 GPIOs */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Configure I2C1 */ + /* I2C DeInit */ + I2C_DeInit(I2C1); + + /* Enable the I2C peripheral */ + I2C_Cmd(I2C1, ENABLE); + + /* Set the I2C structure parameters */ + I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; + I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; + I2C_InitStruct.I2C_OwnAddress1 = 0xFE; + I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; + I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; + I2C_InitStruct.I2C_ClockSpeed = 30000; + + /* Initialize the I2C peripheral w/ selected parameters */ + I2C_Init(I2C1, &I2C_InitStruct); +} + +/** + * @brief Resets the OV2640 camera. + * @param None + * @retval None + */ +void OV2640_Reset(void) +{ + OV2640_WriteReg(OV2640_DSP_RA_DLMT, 0x01); + OV2640_WriteReg(OV2640_SENSOR_COM7, 0x80); +} + +/** + * @brief Reads the OV2640 Manufacturer identifier. + * @param OV2640ID: Pointer to the OV2640 Manufacturer identifier + * @retval None + */ +void OV2640_ReadID(OV2640_IDTypeDef *OV2640ID) +{ + OV2640_WriteReg(OV2640_DSP_RA_DLMT, 0x01); + OV2640ID->Manufacturer_ID1 = OV2640_ReadReg(OV2640_SENSOR_MIDH); + OV2640ID->Manufacturer_ID2 = OV2640_ReadReg(OV2640_SENSOR_MIDL); + OV2640ID->PIDH = OV2640_ReadReg(OV2640_SENSOR_PIDH); + OV2640ID->PIDL = OV2640_ReadReg(OV2640_SENSOR_PIDL); +} + +/** + * @brief Configures DCMI/DMA to capture image from the OV2640 camera. + * @param ImageFormat: Image format BMP or JPEG + * @param BMPImageSize: BMP Image size + * @retval None + */ +void OV2640_Init(ImageFormat_TypeDef ImageFormat) +{ + DCMI_InitTypeDef DCMI_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /*** Configures the DCMI to interface with the OV2640 camera module ***/ + /* Enable DCMI clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI, ENABLE); + + /* DCMI configuration */ + DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous; + DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware; + DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Rising; + DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_Low; + DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_Low; + DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame; + DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b; + + /* Configures the DMA2 to transfer Data from DCMI */ + /* Enable DMA2 clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + /* DMA2 Stream1 Configuration */ + DMA_DeInit(DMA2_Stream1); + + DMA_InitStructure.DMA_Channel = DMA_Channel_1; + DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = FSMC_LCD_ADDRESS; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = 1; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + + switch(ImageFormat) + { + case BMP_QQVGA: + { + /* DCMI configuration */ + DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_High; + DCMI_Init(&DCMI_InitStructure); + + /* DMA2 IRQ channel Configuration */ + DMA_Init(DMA2_Stream1, &DMA_InitStructure); + break; + } + case BMP_QVGA: + { + /* DCMI configuration */ + DCMI_Init(&DCMI_InitStructure); + + /* DMA2 IRQ channel Configuration */ + DMA_Init(DMA2_Stream1, &DMA_InitStructure); + break; + } + default: + { + /* DCMI configuration */ + DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_High; + DCMI_Init(&DCMI_InitStructure); + + /* DMA2 IRQ channel Configuration */ + DMA_Init(DMA2_Stream1, &DMA_InitStructure); + break; + } + } +} + +/** + * @brief Configures the OV2640 camera in QQVGA mode. + * @param None + * @retval None + */ +void OV2640_QQVGAConfig(void) +{ + uint32_t i; + + OV2640_Reset(); + Delay(200); + + /* Initialize OV2640 */ + for(i=0; i<(sizeof(OV2640_QQVGA)/2); i++) + { + OV2640_WriteReg(OV2640_QQVGA[i][0], OV2640_QQVGA[i][1]); + Delay(2); + } +} + +/** + * @brief Configures the OV2640 camera in QVGA mode. + * @param None + * @retval None + */ +void OV2640_QVGAConfig(void) +{ + uint32_t i; + + OV2640_Reset(); + Delay(200); + + /* Initialize OV2640 */ + for(i=0; i<(sizeof(OV2640_QVGA)/2); i++) + { + OV2640_WriteReg(OV2640_QVGA[i][0], OV2640_QVGA[i][1]); + Delay(2); + } +} + +/** + * @brief Configures the OV2640 camera in JPEG mode. + * @param JPEGImageSize: JPEG image size + * @retval None + */ +void OV2640_JPEGConfig(ImageFormat_TypeDef ImageFormat) +{ + uint32_t i; + + OV2640_Reset(); + Delay(200); + + /* Initialize OV2640 */ + for(i=0; i<(sizeof(OV2640_JPEG_INIT)/2); i++) + { + OV2640_WriteReg(OV2640_JPEG_INIT[i][0], OV2640_JPEG_INIT[i][1]); + } + + /* Set to output YUV422 */ + for(i=0; i<(sizeof(OV2640_YUV422)/2); i++) + { + OV2640_WriteReg(OV2640_YUV422[i][0], OV2640_YUV422[i][1]); + } + + OV2640_WriteReg(0xff, 0x01); + OV2640_WriteReg(0x15, 0x00); + + /* Set to output JPEG */ + for(i=0; i<(sizeof(OV2640_JPEG)/2); i++) + { + OV2640_WriteReg(OV2640_JPEG[i][0], OV2640_JPEG[i][1]); + } + + Delay(100); + + switch(ImageFormat) + { + case JPEG_160x120: + { + for(i=0; i<(sizeof(OV2640_160x120_JPEG)/2); i++) + { + OV2640_WriteReg(OV2640_160x120_JPEG[i][0], OV2640_160x120_JPEG[i][1]); + } + break; + } + case JPEG_176x144: + { + for(i=0; i<(sizeof(OV2640_176x144_JPEG)/2); i++) + { + OV2640_WriteReg(OV2640_176x144_JPEG[i][0], OV2640_176x144_JPEG[i][1]); + } + break; + } + case JPEG_320x240: + { + for(i=0; i<(sizeof(OV2640_320x240_JPEG)/2); i++) + { + OV2640_WriteReg(OV2640_320x240_JPEG[i][0], OV2640_320x240_JPEG[i][1]); + } + break; + } + case JPEG_352x288: + { + for(i=0; i<(sizeof(OV2640_352x288_JPEG)/2); i++) + { + OV2640_WriteReg(OV2640_352x288_JPEG[i][0], OV2640_352x288_JPEG[i][1]); + } + break; + } + default: + { + for(i=0; i<(sizeof(OV2640_160x120_JPEG)/2); i++) + { + OV2640_WriteReg(OV2640_160x120_JPEG[i][0], OV2640_160x120_JPEG[i][1]); + } + break; + } + } +} + +/** + * @brief Configures the OV2640 camera brightness. + * @param Brightness: Brightness value, where Brightness can be: + * 0x40 for Brightness +2, + * 0x30 for Brightness +1, + * 0x20 for Brightness 0, + * 0x10 for Brightness -1, + * 0x00 for Brightness -2, + * @retval None + */ +void OV2640_BrightnessConfig(uint8_t Brightness) +{ + OV2640_WriteReg(0xff, 0x00); + OV2640_WriteReg(0x7c, 0x00); + OV2640_WriteReg(0x7d, 0x04); + OV2640_WriteReg(0x7c, 0x09); + OV2640_WriteReg(0x7d, Brightness); + OV2640_WriteReg(0x7d, 0x00); +} + +/** + * @brief Configures the OV2640 camera Black and white mode. + * @param BlackWhite: BlackWhite value, where BlackWhite can be: + * 0x18 for B&W, + * 0x40 for Negative, + * 0x58 for B&W negative, + * 0x00 for Normal, + * @retval None + */ +void OV2640_BandWConfig(uint8_t BlackWhite) +{ + OV2640_WriteReg(0xff, 0x00); + OV2640_WriteReg(0x7c, 0x00); + OV2640_WriteReg(0x7d, BlackWhite); + OV2640_WriteReg(0x7c, 0x05); + OV2640_WriteReg(0x7d, 0x80); + OV2640_WriteReg(0x7d, 0x80); +} + +/** + * @brief Configures the OV2640 camera color effects. + * @param value1: Color effects value1 + * @param value2: Color effects value2 + * where value1 and value2 can be: + * value1 = 0x40, value2 = 0xa6 for Antique, + * value1 = 0xa0, value2 = 0x40 for Bluish, + * value1 = 0x40, value2 = 0x40 for Greenish, + * value1 = 0x40, value2 = 0xc0 for Reddish, + * @retval None + */ +void OV2640_ColorEffectsConfig(uint8_t value1, uint8_t value2) +{ + OV2640_WriteReg(0xff, 0x00); + OV2640_WriteReg(0x7c, 0x00); + OV2640_WriteReg(0x7d, 0x18); + OV2640_WriteReg(0x7c, 0x05); + OV2640_WriteReg(0x7d, value1); + OV2640_WriteReg(0x7d, value2); +} + +/** + * @brief Configures the OV2640 camera contrast. + * @param value1: Contrast value1 + * @param value2: Contrast value2 + * where value1 and value2 can be: + * value1 = 0x28, value2 = 0x0c for Contrast +2, + * value1 = 0x24, value2 = 0x16 for Contrast +1, + * value1 = 0x20, value2 = 0x20 for Contrast 0, + * value1 = 0x1c, value2 = 0x2a for Contrast -1, + * value1 = 0x18, value2 = 0x34 for Contrast -2, + * @retval None + */ +void OV2640_ContrastConfig(uint8_t value1, uint8_t value2) +{ + OV2640_WriteReg(0xff, 0x00); + OV2640_WriteReg(0x7c, 0x00); + OV2640_WriteReg(0x7d, 0x04); + OV2640_WriteReg(0x7c, 0x07); + OV2640_WriteReg(0x7d, 0x20); + OV2640_WriteReg(0x7d, value1); + OV2640_WriteReg(0x7d, value2); + OV2640_WriteReg(0x7d, 0x06); +} + +/** + * @brief Writes a byte at a specific Camera register + * @param Addr: OV2640 register address. + * @param Data: Data to be written to the specific register + * @retval 0x00 if write operation is OK. + * 0xFF if timeout condition occured (device not connected or bus error). + */ +uint8_t OV2640_WriteReg(uint16_t Addr, uint8_t Data) +{ + uint32_t timeout = DCMI_TIMEOUT_MAX; + + /* Generate the Start Condition */ + I2C_GenerateSTART(I2C1, ENABLE); + + /* Test on I2C1 EV5 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send DCMI selcted device slave Address for write */ + I2C_Send7bitAddress(I2C1, OV2640_DEVICE_WRITE_ADDRESS, I2C_Direction_Transmitter); + + /* Test on I2C1 EV6 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send I2C1 location address LSB */ + I2C_SendData(I2C1, (uint8_t)(Addr)); + + /* Test on I2C1 EV8 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send Data */ + I2C_SendData(I2C1, Data); + + /* Test on I2C1 EV8 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send I2C1 STOP Condition */ + I2C_GenerateSTOP(I2C1, ENABLE); + + /* If operation is OK, return 0 */ + return 0; +} + +/** + * @brief Reads a byte from a specific Camera register + * @param Addr: OV2640 register address. + * @retval data read from the specific register or 0xFF if timeout condition + * occured. + */ +uint8_t OV2640_ReadReg(uint16_t Addr) +{ + uint32_t timeout = DCMI_TIMEOUT_MAX; + uint8_t Data = 0; + + /* Generate the Start Condition */ + I2C_GenerateSTART(I2C1, ENABLE); + + /* Test on I2C1 EV5 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send DCMI selcted device slave Address for write */ + I2C_Send7bitAddress(I2C1, OV2640_DEVICE_READ_ADDRESS, I2C_Direction_Transmitter); + + /* Test on I2C1 EV6 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send I2C1 location address LSB */ + I2C_SendData(I2C1, (uint8_t)(Addr)); + + /* Test on I2C1 EV8 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Clear AF flag if arised */ + I2C1->SR1 |= (uint16_t)0x0400; + + /* Generate the Start Condition */ + I2C_GenerateSTART(I2C1, ENABLE); + + /* Test on I2C1 EV6 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send DCMI selcted device slave Address for write */ + I2C_Send7bitAddress(I2C1, OV2640_DEVICE_READ_ADDRESS, I2C_Direction_Receiver); + + /* Test on I2C1 EV6 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Prepare an NACK for the next data received */ + I2C_AcknowledgeConfig(I2C1, DISABLE); + + /* Test on I2C1 EV7 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Prepare Stop after receiving data */ + I2C_GenerateSTOP(I2C1, ENABLE); + + /* Receive the Data */ + Data = I2C_ReceiveData(I2C1); + + /* return the read data */ + return Data; +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov2640.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov2640.h new file mode 100644 index 000000000..9a14f6f7e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov2640.h @@ -0,0 +1,160 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/dcmi_ov2640.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for dcmi_ov2640.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __DCMI_OV2640_H +#define __DCMI_OV2640_H + +/* Includes ------------------------------------------------------------------*/ +#include "camera_api.h" + +/* Exported types ------------------------------------------------------------*/ +typedef struct +{ + uint8_t Manufacturer_ID1; + uint8_t Manufacturer_ID2; + uint8_t PIDH; + uint8_t PIDL; +}OV2640_IDTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/* Use this define to set the maximum delay timeout for the I2C DCMI_OV2640_SingleRandomWrite() + and DCMI_OV2640_SingleRandomRead() operations. Exeeding this timeout delay, + the read/write functions will be aborted and return error code (0xFF). + The period of the delay will depend on the system operating frequency. The following + value has been set for system running at 168 MHz. */ +#define DCMI_TIMEOUT_MAX 10000 + +#define OV2640_DEVICE_WRITE_ADDRESS 0x60 +#define OV2640_DEVICE_READ_ADDRESS 0x61 + +/* OV2640 Registers definition when DSP bank selected (0xFF = 0x00) */ +#define OV2640_DSP_R_BYPASS 0x05 +#define OV2640_DSP_Qs 0x44 +#define OV2640_DSP_CTRL 0x50 +#define OV2640_DSP_HSIZE1 0x51 +#define OV2640_DSP_VSIZE1 0x52 +#define OV2640_DSP_XOFFL 0x53 +#define OV2640_DSP_YOFFL 0x54 +#define OV2640_DSP_VHYX 0x55 +#define OV2640_DSP_DPRP 0x56 +#define OV2640_DSP_TEST 0x57 +#define OV2640_DSP_ZMOW 0x5A +#define OV2640_DSP_ZMOH 0x5B +#define OV2640_DSP_ZMHH 0x5C +#define OV2640_DSP_BPADDR 0x7C +#define OV2640_DSP_BPDATA 0x7D +#define OV2640_DSP_CTRL2 0x86 +#define OV2640_DSP_CTRL3 0x87 +#define OV2640_DSP_SIZEL 0x8C +#define OV2640_DSP_HSIZE2 0xC0 +#define OV2640_DSP_VSIZE2 0xC1 +#define OV2640_DSP_CTRL0 0xC2 +#define OV2640_DSP_CTRL1 0xC3 +#define OV2640_DSP_R_DVP_SP 0xD3 +#define OV2640_DSP_IMAGE_MODE 0xDA +#define OV2640_DSP_RESET 0xE0 +#define OV2640_DSP_MS_SP 0xF0 +#define OV2640_DSP_SS_ID 0x7F +#define OV2640_DSP_SS_CTRL 0xF8 +#define OV2640_DSP_MC_BIST 0xF9 +#define OV2640_DSP_MC_AL 0xFA +#define OV2640_DSP_MC_AH 0xFB +#define OV2640_DSP_MC_D 0xFC +#define OV2640_DSP_P_STATUS 0xFE +#define OV2640_DSP_RA_DLMT 0xFF + +/* OV2640 Registers definition when sensor bank selected (0xFF = 0x01) */ +#define OV2640_SENSOR_GAIN 0x00 +#define OV2640_SENSOR_COM1 0x03 +#define OV2640_SENSOR_REG04 0x04 +#define OV2640_SENSOR_REG08 0x08 +#define OV2640_SENSOR_COM2 0x09 +#define OV2640_SENSOR_PIDH 0x0A +#define OV2640_SENSOR_PIDL 0x0B +#define OV2640_SENSOR_COM3 0x0C +#define OV2640_SENSOR_COM4 0x0D +#define OV2640_SENSOR_AEC 0x10 +#define OV2640_SENSOR_CLKRC 0x11 +#define OV2640_SENSOR_COM7 0x12 +#define OV2640_SENSOR_COM8 0x13 +#define OV2640_SENSOR_COM9 0x14 +#define OV2640_SENSOR_COM10 0x15 +#define OV2640_SENSOR_HREFST 0x17 +#define OV2640_SENSOR_HREFEND 0x18 +#define OV2640_SENSOR_VSTART 0x19 +#define OV2640_SENSOR_VEND 0x1A +#define OV2640_SENSOR_MIDH 0x1C +#define OV2640_SENSOR_MIDL 0x1D +#define OV2640_SENSOR_AEW 0x24 +#define OV2640_SENSOR_AEB 0x25 +#define OV2640_SENSOR_W 0x26 +#define OV2640_SENSOR_REG2A 0x2A +#define OV2640_SENSOR_FRARL 0x2B +#define OV2640_SENSOR_ADDVSL 0x2D +#define OV2640_SENSOR_ADDVHS 0x2E +#define OV2640_SENSOR_YAVG 0x2F +#define OV2640_SENSOR_REG32 0x32 +#define OV2640_SENSOR_ARCOM2 0x34 +#define OV2640_SENSOR_REG45 0x45 +#define OV2640_SENSOR_FLL 0x46 +#define OV2640_SENSOR_FLH 0x47 +#define OV2640_SENSOR_COM19 0x48 +#define OV2640_SENSOR_ZOOMS 0x49 +#define OV2640_SENSOR_COM22 0x4B +#define OV2640_SENSOR_COM25 0x4E +#define OV2640_SENSOR_BD50 0x4F +#define OV2640_SENSOR_BD60 0x50 +#define OV2640_SENSOR_REG5D 0x5D +#define OV2640_SENSOR_REG5E 0x5E +#define OV2640_SENSOR_REG5F 0x5F +#define OV2640_SENSOR_REG60 0x60 +#define OV2640_SENSOR_HISTO_LOW 0x61 +#define OV2640_SENSOR_HISTO_HIGH 0x62 + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void OV2640_HW_Init(void); +void OV2640_Reset(void); +void OV2640_ReadID(OV2640_IDTypeDef *OV2640ID); +void OV2640_Init(ImageFormat_TypeDef ImageFormat); +void OV2640_QQVGAConfig(void); +void OV2640_QVGAConfig(void); +void OV2640_JPEGConfig(ImageFormat_TypeDef ImageFormat); +void OV2640_BrightnessConfig(uint8_t Brightness); +void OV2640_ContrastConfig(uint8_t value1, uint8_t value2); +void OV2640_BandWConfig(uint8_t BlackWhite); +void OV2640_ColorEffectsConfig(uint8_t value1, uint8_t value2); +uint8_t OV2640_WriteReg(uint16_t Addr, uint8_t Data); +uint8_t OV2640_ReadReg(uint16_t Addr); + +#endif /* __DCMI_OV2640_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov9655.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov9655.c new file mode 100644 index 000000000..3339535f4 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov9655.c @@ -0,0 +1,766 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/dcmi_ov9655.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file includes the driver for OV9655 Camera module mounted on + * STM322xG-EVAL board RevA and RevB. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "camera_api.h" +#include "dcmi_ov9655.h" + +/** @addtogroup stm32f2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DCMI_Camera + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define TIMEOUT 2 + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* QQVGA 160x120 */ +static unsigned char OV9655_QQVGA[][2]= +{ + 0x00, 0x00, + 0x01, 0x80, + 0x02, 0x80, + 0x03, 0x02, + 0x04, 0x03, + 0x09, 0x01, + 0x0b, 0x57, + 0x0e, 0x61, + 0x0f, 0x40, + 0x11, 0x01, + 0x12, 0x62, + 0x13, 0xc7, + 0x14, 0x3a, + 0x16, 0x24, + 0x17, 0x18, + 0x18, 0x04, + 0x19, 0x01, + 0x1a, 0x81, + 0x1e, 0x00,//0x20 + 0x24, 0x3c, + 0x25, 0x36, + 0x26, 0x72, + 0x27, 0x08, + 0x28, 0x08, + 0x29, 0x15, + 0x2a, 0x00, + 0x2b, 0x00, + 0x2c, 0x08, + 0x32, 0xa4, + 0x33, 0x00, + 0x34, 0x3f, + 0x35, 0x00, + 0x36, 0x3a, + 0x38, 0x72, + 0x39, 0x57, + 0x3a, 0xcc, + 0x3b, 0x04, + 0x3d, 0x99, + 0x3e, 0x0e, + 0x3f, 0xc1, + 0x40, 0xc0, + 0x41, 0x41, + 0x42, 0xc0, + 0x43, 0x0a, + 0x44, 0xf0, + 0x45, 0x46, + 0x46, 0x62, + 0x47, 0x2a, + 0x48, 0x3c, + 0x4a, 0xfc, + 0x4b, 0xfc, + 0x4c, 0x7f, + 0x4d, 0x7f, + 0x4e, 0x7f, + 0x4f, 0x98, + 0x50, 0x98, + 0x51, 0x00, + 0x52, 0x28, + 0x53, 0x70, + 0x54, 0x98, + 0x58, 0x1a, + 0x59, 0x85, + 0x5a, 0xa9, + 0x5b, 0x64, + 0x5c, 0x84, + 0x5d, 0x53, + 0x5e, 0x0e, + 0x5f, 0xf0, + 0x60, 0xf0, + 0x61, 0xf0, + 0x62, 0x00, + 0x63, 0x00, + 0x64, 0x02, + 0x65, 0x20, + 0x66, 0x00, + 0x69, 0x0a, + 0x6b, 0x5a, + 0x6c, 0x04, + 0x6d, 0x55, + 0x6e, 0x00, + 0x6f, 0x9d, + 0x70, 0x21, + 0x71, 0x78, + 0x72, 0x22, + 0x73, 0x02, + 0x74, 0x10, + 0x75, 0x10, + 0x76, 0x01, + 0x77, 0x02, + 0x7A, 0x12, + 0x7B, 0x08, + 0x7C, 0x16, + 0x7D, 0x30, + 0x7E, 0x5e, + 0x7F, 0x72, + 0x80, 0x82, + 0x81, 0x8e, + 0x82, 0x9a, + 0x83, 0xa4, + 0x84, 0xac, + 0x85, 0xb8, + 0x86, 0xc3, + 0x87, 0xd6, + 0x88, 0xe6, + 0x89, 0xf2, + 0x8a, 0x24, + 0x8c, 0x80, + 0x90, 0x7d, + 0x91, 0x7b, + 0x9d, 0x02, + 0x9e, 0x02, + 0x9f, 0x7a, + 0xa0, 0x79, + 0xa1, 0x40, + 0xa4, 0x50, + 0xa5, 0x68, + 0xa6, 0x4a, + 0xa8, 0xc1, + 0xa9, 0xef, + 0xaa, 0x92, + 0xab, 0x04, + 0xac, 0x80, + 0xad, 0x80, + 0xae, 0x80, + 0xaf, 0x80, + 0xb2, 0xf2, + 0xb3, 0x20, + 0xb4, 0x20, + 0xb5, 0x00, + 0xb6, 0xaf, + 0xb6, 0xaf, + 0xbb, 0xae, + 0xbc, 0x7f, + 0xbd, 0x7f, + 0xbe, 0x7f, + 0xbf, 0x7f, + 0xbf, 0x7f, + 0xc0, 0xaa, + 0xc1, 0xc0, + 0xc2, 0x01, + 0xc3, 0x4e, + 0xc6, 0x05, + 0xc7, 0x82, + 0xc9, 0xe0, + 0xca, 0xe8, + 0xcb, 0xf0, + 0xcc, 0xd8, + 0xcd, 0x93, + + 0x12, 0x63, + 0x40, 0x10, + 0x15, 0x08, +}; + +/* QVGA 360x240 */ +static unsigned char OV9655_QVGA[][2]= +{ + 0x00, 0x00, + 0x01, 0x80, + 0x02, 0x80, + 0x03, 0x02, + 0x04, 0x03, + 0x09, 0x01, + 0x0b, 0x57, + 0x0e, 0x61, + 0x0f, 0x40, + 0x11, 0x01, + 0x12, 0x62, + 0x13, 0xc7, + 0x14, 0x3a, + 0x16, 0x24, + 0x17, 0x18, + 0x18, 0x04, + 0x19, 0x01, + 0x1a, 0x81, + 0x1e, 0x00, + 0x24, 0x3c, + 0x25, 0x36, + 0x26, 0x72, + 0x27, 0x08, + 0x28, 0x08, + 0x29, 0x15, + 0x2a, 0x00, + 0x2b, 0x00, + 0x2c, 0x08, + 0x32, 0x12, + 0x33, 0x00, + 0x34, 0x3f, + 0x35, 0x00, + 0x36, 0x3a, + 0x38, 0x72, + 0x39, 0x57, + 0x3a, 0xcc, + 0x3b, 0x04, + 0x3d, 0x99, + 0x3e, 0x02, + 0x3f, 0xc1, + 0x40, 0xc0, + 0x41, 0x41, + 0x42, 0xc0, + 0x43, 0x0a, + 0x44, 0xf0, + 0x45, 0x46, + 0x46, 0x62, + 0x47, 0x2a, + 0x48, 0x3c, + 0x4a, 0xfc, + 0x4b, 0xfc, + 0x4c, 0x7f, + 0x4d, 0x7f, + 0x4e, 0x7f, + 0x4f, 0x98, + 0x50, 0x98, + 0x51, 0x00, + 0x52, 0x28, + 0x53, 0x70, + 0x54, 0x98, + 0x58, 0x1a, + 0x59, 0x85, + 0x5a, 0xa9, + 0x5b, 0x64, + 0x5c, 0x84, + 0x5d, 0x53, + 0x5e, 0x0e, + 0x5f, 0xf0, + 0x60, 0xf0, + 0x61, 0xf0, + 0x62, 0x00, + 0x63, 0x00, + 0x64, 0x02, + 0x65, 0x20, + 0x66, 0x00, + 0x69, 0x0a, + 0x6b, 0x5a, + 0x6c, 0x04, + 0x6d, 0x55, + 0x6e, 0x00, + 0x6f, 0x9d, + 0x70, 0x21, + 0x71, 0x78, + 0x72, 0x11, + 0x73, 0x01, + 0x74, 0x10, + 0x75, 0x10, + 0x76, 0x01, + 0x77, 0x02, + 0x7A, 0x12, + 0x7B, 0x08, + 0x7C, 0x16, + 0x7D, 0x30, + 0x7E, 0x5e, + 0x7F, 0x72, + 0x80, 0x82, + 0x81, 0x8e, + 0x82, 0x9a, + 0x83, 0xa4, + 0x84, 0xac, + 0x85, 0xb8, + 0x86, 0xc3, + 0x87, 0xd6, + 0x88, 0xe6, + 0x89, 0xf2, + 0x8a, 0x24, + 0x8c, 0x80, + 0x90, 0x7d, + 0x91, 0x7b, + 0x9d, 0x02, + 0x9e, 0x02, + 0x9f, 0x7a, + 0xa0, 0x79, + 0xa1, 0x40, + 0xa4, 0x50, + 0xa5, 0x68, + 0xa6, 0x4a, + 0xa8, 0xc1, + 0xa9, 0xef, + 0xaa, 0x92, + 0xab, 0x04, + 0xac, 0x80, + 0xad, 0x80, + 0xae, 0x80, + 0xaf, 0x80, + 0xb2, 0xf2, + 0xb3, 0x20, + 0xb4, 0x20, + 0xb5, 0x00, + 0xb6, 0xaf, + 0xb6, 0xaf, + 0xbb, 0xae, + 0xbc, 0x7f, + 0xbd, 0x7f, + 0xbe, 0x7f, + 0xbf, 0x7f, + 0xbf, 0x7f, + 0xc0, 0xaa, + 0xc1, 0xc0, + 0xc2, 0x01, + 0xc3, 0x4e, + 0xc6, 0x05, + 0xc7, 0x81, + 0xc9, 0xe0, + 0xca, 0xe8, + 0xcb, 0xf0, + 0xcc, 0xd8, + 0xcd, 0x93, + + 0x12, 0x63, + 0x40, 0x10, + 0x15, 0x08, +}; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Initializes the hardware resources (I2C and GPIO) used to configure + * the OV9655 camera. + * @param None + * @retval None + */ +void OV9655_HW_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + I2C_InitTypeDef I2C_InitStruct; + + /*** Configures the DCMI GPIOs to interface with the OV9655 camera module ***/ + /* Enable DCMI GPIOs clocks */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOH | + RCC_AHB1Periph_GPIOI, ENABLE); + + /* Connect DCMI pins to AF13 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_DCMI); + + GPIO_PinAFConfig(GPIOH, GPIO_PinSource8, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource9, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource10, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource11, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource12, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOH, GPIO_PinSource14, GPIO_AF_DCMI); + + GPIO_PinAFConfig(GPIOI, GPIO_PinSource5, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOI, GPIO_PinSource6, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOI, GPIO_PinSource7, GPIO_AF_DCMI); + GPIO_PinAFConfig(GPIOI, GPIO_PinSource4, GPIO_AF_DCMI); + + /* DCMI GPIO configuration */ + /* D0..D4(PH9/10/11/12/14), HSYNC(PH8) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | + GPIO_Pin_12 | GPIO_Pin_14| GPIO_Pin_8; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(GPIOH, &GPIO_InitStructure); + + /* D5..D7(PI4/6/7), VSYNC(PI5) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_5; + GPIO_Init(GPIOI, &GPIO_InitStructure); + + /* PCLK(PA6) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /****** Configures the I2C1 used for OV9655 camera module configuration *****/ + /* I2C1 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); + + /* GPIOB clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); + + /* Connect I2C1 pins to AF4 */ + GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_I2C1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_I2C1); + + /* Configure I2C1 GPIOs */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Configure I2C1 */ + /* I2C DeInit */ + I2C_DeInit(I2C1); + + /* Enable the I2C peripheral */ + I2C_Cmd(I2C1, ENABLE); + + /* Set the I2C structure parameters */ + I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; + I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; + I2C_InitStruct.I2C_OwnAddress1 = 0xFE; + I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; + I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; + I2C_InitStruct.I2C_ClockSpeed = 30000; + + /* Initialize the I2C peripheral w/ selected parameters */ + I2C_Init(I2C1, &I2C_InitStruct); +} + +/** + * @brief Resets the OV9655 camera. + * @param None + * @retval None + */ +void OV9655_Reset(void) +{ + OV9655_WriteReg(OV9655_COM7, 0x80); +} + +/** + * @brief Reads the OV9655 Manufacturer identifier. + * @param OV9655ID: pointer to the OV9655 Manufacturer identifier. + * @retval None + */ +void OV9655_ReadID(OV9655_IDTypeDef* OV9655ID) +{ + OV9655ID->Manufacturer_ID1 = OV9655_ReadReg(OV9655_MIDH); + OV9655ID->Manufacturer_ID2 = OV9655_ReadReg(OV9655_MIDL); + OV9655ID->Version = OV9655_ReadReg(OV9655_VER); + OV9655ID->PID = OV9655_ReadReg(OV9655_PID); +} + +/** + * @brief Configures the DCMI/DMA to capture image from the OV9655 camera. + * @param ImageFormat: Image format BMP or JPEG + * @param BMPImageSize: BMP Image size + * @retval None + */ +void OV9655_Init(ImageFormat_TypeDef ImageFormat) +{ + DCMI_InitTypeDef DCMI_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /*** Configures the DCMI to interface with the OV9655 camera module ***/ + /* Enable DCMI clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI, ENABLE); + + /* DCMI configuration */ + DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous; + DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware; + DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Falling; + DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_High; + DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_High; + DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame; + DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b; + + /* Configures the DMA2 to transfer Data from DCMI */ + /* Enable DMA2 clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + /* DMA2 Stream1 Configuration */ + DMA_DeInit(DMA2_Stream1); + + DMA_InitStructure.DMA_Channel = DMA_Channel_1; + DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = FSMC_LCD_ADDRESS; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = 1; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + + switch(ImageFormat) + { + case BMP_QQVGA: + { + /* DCMI configuration */ + DCMI_Init(&DCMI_InitStructure); + + /* DMA2 IRQ channel Configuration */ + DMA_Init(DMA2_Stream1, &DMA_InitStructure); + break; + } + case BMP_QVGA: + { + /* DCMI configuration */ + DCMI_Init(&DCMI_InitStructure); + + /* DMA2 IRQ channel Configuration */ + DMA_Init(DMA2_Stream1, &DMA_InitStructure); + break; + } + default: + { + /* DCMI configuration */ + DCMI_Init(&DCMI_InitStructure); + + /* DMA2 IRQ channel Configuration */ + DMA_Init(DMA2_Stream1, &DMA_InitStructure); + break; + } + } +} + +/** + * @brief Configures the OV9655 camera in QQVGA mode. + * @param None + * @retval None + */ +void OV9655_QQVGAConfig(void) +{ + uint32_t i; + + OV9655_Reset(); + Delay(200); + + /* Initialize OV9655 */ + for(i=0; i<(sizeof(OV9655_QQVGA)/2); i++) + { + OV9655_WriteReg(OV9655_QQVGA[i][0], OV9655_QQVGA[i][1]); + Delay(2); + } +} + +/** + * @brief SConfigures the OV9655 camera in QVGA mode. + * @param None + * @retval None + */ +void OV9655_QVGAConfig(void) +{ + uint32_t i; + + OV9655_Reset(); + Delay(200); + + /* Initialize OV9655 */ + for(i=0; i<(sizeof(OV9655_QVGA)/2); i++) + { + OV9655_WriteReg(OV9655_QVGA[i][0], OV9655_QVGA[i][1]); + Delay(2); + } +} + +/** + * @brief Configures the OV9655 camera brightness. + * @param Brightness: Brightness value, where Brightness can be: + * positively (0x01 ~ 0x7F) and negatively (0x80 ~ 0xFF) + * @retval None + */ +void OV9655_BrightnessConfig(uint8_t Brightness) +{ + OV9655_WriteReg(OV9655_BRTN, Brightness); +} + +/** + * @brief Writes a byte at a specific Camera register + * @param Addr: OV9655 register address + * @param Data: data to be written to the specific register + * @retval 0x00 if write operation is OK + * 0xFF if timeout condition occured (device not connected or bus error). + */ +uint8_t OV9655_WriteReg(uint16_t Addr, uint8_t Data) +{ + uint32_t timeout = DCMI_TIMEOUT_MAX; + + /* Generate the Start Condition */ + I2C_GenerateSTART(I2C1, ENABLE); + + /* Test on I2C1 EV5 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send DCMI selcted device slave Address for write */ + I2C_Send7bitAddress(I2C1, OV9655_DEVICE_WRITE_ADDRESS, I2C_Direction_Transmitter); + + /* Test on I2C1 EV6 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send I2C1 location address LSB */ + I2C_SendData(I2C1, (uint8_t)(Addr)); + + /* Test on I2C1 EV8 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send Data */ + I2C_SendData(I2C1, Data); + + /* Test on I2C1 EV8 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send I2C1 STOP Condition */ + I2C_GenerateSTOP(I2C1, ENABLE); + + /* If operation is OK, return 0 */ + return 0; +} + +/** + * @brief Reads a byte from a specific Camera register + * @param Addr: OV9655 register address. + * @retval data read from the specific register or 0xFF if timeout condition + * occured. + */ +uint8_t OV9655_ReadReg(uint16_t Addr) +{ + uint32_t timeout = DCMI_TIMEOUT_MAX; + uint8_t Data = 0; + + /* Generate the Start Condition */ + I2C_GenerateSTART(I2C1, ENABLE); + + /* Test on I2C1 EV5 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send DCMI selcted device slave Address for write */ + I2C_Send7bitAddress(I2C1, OV9655_DEVICE_READ_ADDRESS, I2C_Direction_Transmitter); + + /* Test on I2C1 EV6 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send I2C1 location address LSB */ + I2C_SendData(I2C1, (uint8_t)(Addr)); + + /* Test on I2C1 EV8 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Clear AF flag if arised */ + I2C1->SR1 |= (uint16_t)0x0400; + + /* Generate the Start Condition */ + I2C_GenerateSTART(I2C1, ENABLE); + + /* Test on I2C1 EV6 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Send DCMI selcted device slave Address for write */ + I2C_Send7bitAddress(I2C1, OV9655_DEVICE_READ_ADDRESS, I2C_Direction_Receiver); + + /* Test on I2C1 EV6 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Prepare an NACK for the next data received */ + I2C_AcknowledgeConfig(I2C1, DISABLE); + + /* Test on I2C1 EV7 and clear it */ + timeout = DCMI_TIMEOUT_MAX; /* Initialize timeout value */ + while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) + { + /* If the timeout delay is exeeded, exit with error code */ + if ((timeout--) == 0) return 0xFF; + } + + /* Prepare Stop after receiving data */ + I2C_GenerateSTOP(I2C1, ENABLE); + + /* Receive the Data */ + Data = I2C_ReceiveData(I2C1); + + /* return the read data */ + return Data; +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov9655.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov9655.h new file mode 100644 index 000000000..8e7bd298c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/dcmi_ov9655.h @@ -0,0 +1,222 @@ +/** + ****************************************************************************** + * @file DCMI/OV9655_Camera/dcmi_ov9655.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for dcmi_ov9655.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __DCMI_OV9655_H +#define __DCMI_OV9655_H + +/* Includes ------------------------------------------------------------------*/ +#include "camera_api.h" + +/* Exported types ------------------------------------------------------------*/ +typedef struct +{ + uint8_t Manufacturer_ID1; + uint8_t Manufacturer_ID2; + uint8_t Version; + uint8_t PID; +}OV9655_IDTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/* Use this define to set the maximum delay timeout for the I2C DCMI_OV9655_SingleRandomWrite() + and DCMI_OV9655_SingleRandomRead() operations. Exeeding this timeout delay, + the read/write functions will be aborted and return error code (0xFF). + The period of the delay will depend on the system operating frequency. The following + value has been set for system running at 168 MHz. */ +#define DCMI_TIMEOUT_MAX 10000 + +#define OV9655_DEVICE_WRITE_ADDRESS 0x60 +#define OV9655_DEVICE_READ_ADDRESS 0x61 + +/* OV9655 Registers definition */ +#define OV9655_GAIN 0x00 +#define OV9655_BLUE 0x01 +#define OV9655_RED 0x02 +#define OV9655_VREF 0x03 +#define OV9655_COM1 0x04 +#define OV9655_BAVE 0x05 +#define OV9655_GbAVE 0x06 +#define OV9655_GrAVE 0x07 +#define OV9655_RAVE 0x08 +#define OV9655_COM2 0x09 +#define OV9655_PID 0x0A +#define OV9655_VER 0x0B +#define OV9655_COM3 0x0C +#define OV9655_COM4 0x0D +#define OV9655_COM5 0x0E +#define OV9655_COM6 0x0F +#define OV9655_AEC 0x10 +#define OV9655_CLKRC 0x11 +#define OV9655_COM7 0x12 +#define OV9655_COM8 0x13 +#define OV9655_COM9 0x14 +#define OV9655_COM10 0x15 +#define OV9655_REG16 0x16 +#define OV9655_HSTART 0x17 +#define OV9655_HSTOP 0x18 +#define OV9655_VSTART 0x19 +#define OV9655_VSTOP 0x1A +#define OV9655_PSHFT 0x1B +#define OV9655_MIDH 0x1C +#define OV9655_MIDL 0x1D +#define OV9655_MVFP 0x1E +#define OV9655_BOS 0x20 +#define OV9655_GBOS 0x21 +#define OV9655_GROS 0x22 +#define OV9655_ROS 0x23 +#define OV9655_AEW 0x24 +#define OV9655_AEB 0x25 +#define OV9655_VPT 0x26 +#define OV9655_BBIAS 0x27 +#define OV9655_GbBIAS 0x28 +#define OV9655_PREGAIN 0x29 +#define OV9655_EXHCH 0x2A +#define OV9655_EXHCL 0x2B +#define OV9655_RBIAS 0x2C +#define OV9655_ADVFL 0x2D +#define OV9655_ADVFH 0x2E +#define OV9655_YAVE 0x2F +#define OV9655_HSYST 0x30 +#define OV9655_HSYEN 0x31 +#define OV9655_HREF 0x32 +#define OV9655_CHLF 0x33 +#define OV9655_AREF1 0x34 +#define OV9655_AREF2 0x35 +#define OV9655_AREF3 0x36 +#define OV9655_ADC1 0x37 +#define OV9655_ADC2 0x38 +#define OV9655_AREF4 0x39 +#define OV9655_TSLB 0x3A +#define OV9655_COM11 0x3B +#define OV9655_COM12 0x3C +#define OV9655_COM13 0x3D +#define OV9655_COM14 0x3E +#define OV9655_EDGE 0x3F +#define OV9655_COM15 0x40 +#define OV9655_COM16 0x41 +#define OV9655_COM17 0x42 +#define OV9655_MTX1 0x4F +#define OV9655_MTX2 0x50 +#define OV9655_MTX3 0x51 +#define OV9655_MTX4 0x52 +#define OV9655_MTX5 0x53 +#define OV9655_MTX6 0x54 +#define OV9655_BRTN 0x55 +#define OV9655_CNST1 0x56 +#define OV9655_CNST2 0x57 +#define OV9655_MTXS 0x58 +#define OV9655_AWBOP1 0x59 +#define OV9655_AWBOP2 0x5A +#define OV9655_AWBOP3 0x5B +#define OV9655_AWBOP4 0x5C +#define OV9655_AWBOP5 0x5D +#define OV9655_AWBOP6 0x5E +#define OV9655_BLMT 0x5F +#define OV9655_RLMT 0x60 +#define OV9655_GLMT 0x61 +#define OV9655_LCC1 0x62 +#define OV9655_LCC2 0x63 +#define OV9655_LCC3 0x64 +#define OV9655_LCC4 0x65 +#define OV9655_MANU 0x66 +#define OV9655_MANV 0x67 +#define OV9655_MANY 0x68 +#define OV9655_VARO 0x69 +#define OV9655_BD50MAX 0x6A +#define OV9655_DBLV 0x6B +#define OV9655_DNSTH 0x70 +#define OV9655_POIDX 0x72 +#define OV9655_PCKDV 0x73 +#define OV9655_XINDX 0x74 +#define OV9655_YINDX 0x75 +#define OV9655_SLOP 0x7A +#define OV9655_GAM1 0x7B +#define OV9655_GAM2 0x7C +#define OV9655_GAM3 0x7D +#define OV9655_GAM4 0x7E +#define OV9655_GAM5 0x7F +#define OV9655_GAM6 0x80 +#define OV9655_GAM7 0x81 +#define OV9655_GAM8 0x82 +#define OV9655_GAM9 0x83 +#define OV9655_GAM10 0x84 +#define OV9655_GAM11 0x85 +#define OV9655_GAM12 0x86 +#define OV9655_GAM13 0x87 +#define OV9655_GAM14 0x88 +#define OV9655_GAM15 0x89 +#define OV9655_COM18 0x8B +#define OV9655_COM19 0x8C +#define OV9655_COM20 0x8D +#define OV9655_DMLNL 0x92 +#define OV9655_DMLNH 0x93 +#define OV9655_LCC6 0x9D +#define OV9655_LCC7 0x9E +#define OV9655_AECH 0xA1 +#define OV9655_BD50 0xA2 +#define OV9655_BD60 0xA3 +#define OV9655_COM21 0xA4 +#define OV9655_GREEN 0xA6 +#define OV9655_VZST 0xA7 +#define OV9655_REFA8 0xA8 +#define OV9655_REFA9 0xA9 +#define OV9655_BLC1 0xAC +#define OV9655_BLC2 0xAD +#define OV9655_BLC3 0xAE +#define OV9655_BLC4 0xAF +#define OV9655_BLC5 0xB0 +#define OV9655_BLC6 0xB1 +#define OV9655_BLC7 0xB2 +#define OV9655_BLC8 0xB3 +#define OV9655_CTRLB4 0xB4 +#define OV9655_FRSTL 0xB7 +#define OV9655_FRSTH 0xB8 +#define OV9655_ADBOFF 0xBC +#define OV9655_ADROFF 0xBD +#define OV9655_ADGbOFF 0xBE +#define OV9655_ADGrOFF 0xBF +#define OV9655_COM23 0xC4 +#define OV9655_BD60MAX 0xC5 +#define OV9655_COM24 0xC7 +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void OV9655_HW_Init(void); +void OV9655_Reset(void); +void OV9655_ReadID(OV9655_IDTypeDef* OV9655ID); +void OV9655_Init(ImageFormat_TypeDef ImageFormat); +void OV9655_QQVGAConfig(void); +void OV9655_QVGAConfig(void); +void OV9655_BrightnessConfig(uint8_t Brightness); +uint8_t OV9655_WriteReg(uint16_t Addr, uint8_t Data); +uint8_t OV9655_ReadReg(uint16_t Addr); + +#endif /* __DCMI_OV9655_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/lcd_log_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/lcd_log_conf.h new file mode 100644 index 000000000..a60b07be8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/lcd_log_conf.h @@ -0,0 +1,113 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/lcd_log_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief lcd_log configuration template file. + * This file should be copied to the application folder and modified + * as follows: + * - Rename it to 'lcd_log_conf.h'. + * - Update the name of the LCD header file depending on the EVAL board + * you are using (see line32 below). + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __LCD_LOG_CONF_H__ +#define __LCD_LOG_CONF_H__ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_lcd.h" /* replace 'stm32xxx' with your EVAL board name, ex: stm3210c_eval_lcd.h */ +#include + +/** @addtogroup LCD_LOG + * @{ + */ + +/** @defgroup LCD_LOG + * @brief This file is the + * @{ + */ + + +/** @defgroup LCD_LOG_CONF_Exported_Defines + * @{ + */ +/* Comment the line below to disable the scroll back and forward features */ +#define LCD_SCROLL_ENABLED + +/* Define the LCD default text color */ +#define LCD_LOG_DEFAULT_COLOR LCD_COLOR_WHITE + +/* Define the display window settings */ +#define YWINDOW_MIN 3 +#define YWINDOW_SIZE 12 +#define XWINDOW_MAX 50 + +/* Define the cache depth */ +#define CACHE_SIZE 50 + +/** @defgroup LCD_LOG_CONF_Exported_TypesDefinitions + * @{ + */ + +/** + * @} + */ + + +/** @defgroup LCD_LOG_Exported_Macros + * @{ + */ + + +/** + * @} + */ + +/** @defgroup LCD_LOG_CONF_Exported_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup LCD_LOG_CONF_Exported_FunctionsPrototype + * @{ + */ + +/** + * @} + */ + + +#endif /* __LCD_LOG_H__ */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/main.c new file mode 100644 index 000000000..7b4b3f581 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/main.c @@ -0,0 +1,273 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "dcmi_ov9655.h" +#include "dcmi_ov2640.h" +#include "lcd_log.h" + +/** @addtogroup stm32f2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DCMI_Camera + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +RCC_ClocksTypeDef RCC_Clocks; +OV9655_IDTypeDef OV9655_Camera_ID; +OV2640_IDTypeDef OV2640_Camera_ID; +__IO uint16_t ADCVal = 0; +uint8_t buffer[40]; +extern Camera_TypeDef Camera; +extern ImageFormat_TypeDef ImageFormat; +extern __IO uint8_t ValueMax; +extern const uint8_t *ImageForematArray[]; + +/* Private function prototypes -----------------------------------------------*/ +void ADC_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* SysTick end of count event each 10ms */ + RCC_GetClocksFreq(&RCC_Clocks); + SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); + + /* Initialize LEDs and push-buttons mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + STM_EVAL_LEDOn(LED1); + + /* Initialize the LCD */ + STM322xG_LCD_Init(); + LCD_Clear(Black); + LCD_SetTextColor(White); + + LCD_LOG_SetHeader("STM32 Camera Demo"); + LCD_LOG_SetFooter (" Copyright (c) STMicroelectronics" ); + + /* ADC configuration */ + ADC_Config(); + + /* Initializes the DCMI interface (I2C and GPIO) used to configure the camera */ + OV2640_HW_Init(); + + /* Read the OV9655/OV2640 Manufacturer identifier */ + OV9655_ReadID(&OV9655_Camera_ID); + OV2640_ReadID(&OV2640_Camera_ID); + + if(OV9655_Camera_ID.PID == 0x96) + { + Camera = OV9655_CAMERA; + sprintf((char*)buffer, "OV9655 Camera ID 0x%x", OV9655_Camera_ID.PID); + ValueMax = 2; + } + else if(OV2640_Camera_ID.PIDH == 0x26) + { + Camera = OV2640_CAMERA; + sprintf((char*)buffer, "OV2640 Camera ID 0x%x", OV2640_Camera_ID.PIDH); + ValueMax = 2; + } + else + { + LCD_SetTextColor(LCD_COLOR_RED); + LCD_DisplayStringLine(LINE(4), "Check the Camera HW and try again"); + while(1); + } + + LCD_SetTextColor(LCD_COLOR_YELLOW); + LCD_DisplayStringLine(LINE(4), (uint8_t*)buffer); + LCD_SetTextColor(LCD_COLOR_WHITE); + Delay(200); + + /* Initialize demo */ + ImageFormat = (ImageFormat_TypeDef)Demo_Init(); + + /* Configure the Camera module mounted on STM322xG-EVAL board */ + Demo_LCD_Clear(); + LCD_DisplayStringLine(LINE(4), "Camera Init.. "); + Camera_Config(); + + sprintf((char*)buffer, " Image selected: %s", ImageForematArray[ImageFormat]); + LCD_DisplayStringLine(LINE(4),(uint8_t*)buffer); + + /* Enable DMA2 stream 1 and DCMI interface then start image capture */ + DMA_Cmd(DMA2_Stream1, ENABLE); + DCMI_Cmd(ENABLE); + + /* Insert 100ms delay: wait 100ms */ + Delay(200); + + DCMI_CaptureCmd(ENABLE); + + LCD_ClearLine(LINE(4)); + Demo_LCD_Clear(); + + if(ImageFormat == BMP_QQVGA) + { + /* LCD Display window */ + LCD_SetDisplayWindow(179, 239, 120, 160); + LCD_WriteReg(LCD_REG_3, 0x1038); + LCD_WriteRAM_Prepare(); + } + else if(ImageFormat == BMP_QVGA) + { + /* LCD Display window */ + LCD_SetDisplayWindow(239, 319, 240, 320); + LCD_WriteReg(LCD_REG_3, 0x1038); + LCD_WriteRAM_Prepare(); + } + + while(1) + { + /* Blink LD1, LED2 and LED4 */ + STM_EVAL_LEDToggle(LED1); + STM_EVAL_LEDToggle(LED2); + STM_EVAL_LEDToggle(LED3); + STM_EVAL_LEDToggle(LED4); + + /* Insert 100ms delay */ + Delay(10); + + /* Get the last ADC3 conversion result data */ + ADCVal = ADC_GetConversionValue(ADC3); + + /* Change the Brightness of camera using "Brightness Adjustment" register: + For OV9655 camera Brightness can be positively (0x01 ~ 0x7F) and negatively (0x80 ~ 0xFF) adjusted + For OV2640 camera Brightness can be positively (0x20 ~ 0x40) and negatively (0 ~ 0x20) adjusted */ + if(Camera == OV9655_CAMERA) + { + OV9655_BrightnessConfig(ADCVal); + } + if(Camera == OV2640_CAMERA) + { + OV2640_BrightnessConfig(ADCVal/2); + } + } +} + +/** + * @brief Configures the ADC. + * @param None + * @retval None + */ +void ADC_Config(void) +{ + ADC_InitTypeDef ADC_InitStructure; + ADC_CommonInitTypeDef ADC_CommonInitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable ADC3 clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE); + + /* GPIOF clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); + + /* Configure ADC Channel7 as analog */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; + GPIO_Init(GPIOF, &GPIO_InitStructure); + + /* ADC Common Init */ + ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; + ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div6; + ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; + ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; + ADC_CommonInit(&ADC_CommonInitStructure); + + /* ADC3 Configuration ------------------------------------------------------*/ + ADC_StructInit(&ADC_InitStructure); + ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b; + ADC_InitStructure.ADC_ScanConvMode = DISABLE; + ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; + ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; + ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; + ADC_InitStructure.ADC_NbrOfConversion = 1; + ADC_Init(ADC3, &ADC_InitStructure); + + /* ADC3 Regular Channel Config */ + ADC_RegularChannelConfig(ADC3, ADC_Channel_7, 1, ADC_SampleTime_56Cycles); + + /* Enable ADC3 */ + ADC_Cmd(ADC3, ENABLE); + + /* ADC3 regular Software Start Conv */ + ADC_SoftwareStartConv(ADC3); +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/main.h new file mode 100644 index 000000000..801516d49 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/main.h @@ -0,0 +1,47 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_lcd.h" +#include "stm322xg_eval_ioe.h" +#include "camera_api.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/readme.txt new file mode 100644 index 000000000..194915a86 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/readme.txt @@ -0,0 +1,87 @@ +/** + @page DCMI_Camera Camera example Readme file + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file DCMI/Camera/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the stm32f2xx camera example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Description + +This example shows how to use the DCMI to control the OV9655 or OV2640 Camera module +mounted on STM322xG-EVAL board RevB. + +Both cameras have an image array capable of operating at up to 15 frames per second +in SXGA resolution with complete user control over image quality, formatting and +output data transfer. All required image processing functions are also programmable +through the SCCB interface (I2C like protocol). + +In this example the DCMI is configured to interface with this 8 bit data camera +in continuous mode. The I2C1 is used to configure the Camera in 8 bit RGB 5:6:5 mode. +The user can select between two resolutions QQVGA(160x120) or QVGA(320x240) in order +to display the captured image on the LCD(320x240), this selection is performed +at application run time using the Joystick UP, DOWN and SEL buttons. +All camera data received by the DCMI are transferred through the DMA and displayed +on the LCD (connected to FSMC). As a result the CPU is free to execute other tasks. + +You can use the potentiometer RV1 to fine tune on the fly the camera's brightness. + + +@par Project Directory contents + + - DCMI/Camera/main.h Main config file + - DCMI/Camera/camera_api.h Header for camera_api.c + - DCMI/Camera/dcmi_ov2640.h Header for dcmi_ov2640.c + - DCMI/Camera/dcmi_ov9655.h Header for dcmi_ov9655.c + - DCMI/Camera/lcd_lo_conf.h Lcd_log configuration file + - DCMI/Camera/stm32f2xx_it.h Header for stm32f2xx_it.c + - DCMI/Camera/stm32f2xx_conf.h library configuration file + - DCMI/Camera/main.c Main program + - DCMI/Camera/camera_api.c High level driver for OV9655/OV2640 Cameras + - DCMI/Camera/dcmi_ov2640.c Driver for OV2640 Camera module + - DCMI/Camera/dcmi_ov9655.c Driver for OV9655 Camera module + - DCMI/Camera/stm32f2xx_it.c Interrupt handlers + - DCMI/Camera/system_stm32f2xx.c stm32f2xx system clock configuration file + + +@par Hardware and Software environment + - This example runs on stm32f2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB. + + +@par How to use it ? +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\stm32f2xx_StdPeriph_Templates + - Open your preferred toolchain + - Add the following files the project source list + - camera_api.c + - dcmi_ov2640.c + - dcmi_ov9655.c + - Utilities\STM32_EVAL\Common\lcd_log.c + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/stm32f2xx_conf.h new file mode 100644 index 000000000..6b6d34400 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/stm32f2xx_it.c new file mode 100644 index 000000000..ff8ec45ed --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/stm32f2xx_it.c @@ -0,0 +1,241 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DCMI_Camera + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint32_t PressedKey; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + TimingDelay_Decrement(); +} + +/** + * @brief This function handles External line 10 interrupt request. + * @param None + * @retval None + */ +void EXTI2_IRQHandler(void) +{ + static JOY_State_TypeDef JoyState = JOY_NONE; + + if(EXTI_GetITStatus(IOE_IT_EXTI_LINE) != RESET) + { + if(IOE_GetGITStatus(IOE_2_ADDR, IOE_GIT_GPIO)) + { + /* Get the Joystick State */ + JoyState = IOE_JoyStickGetState(); + + switch (JoyState) + { + case JOY_NONE: + break; + + case JOY_UP: + { + PressedKey = UP; + break; + } + case JOY_DOWN: + { + PressedKey = DOWN; + break; + } + case JOY_RIGHT : + { + PressedKey = JOY_NONE; + break; + } + case JOY_LEFT: + { + PressedKey = JOY_NONE; + break; + } + case JOY_CENTER: + { + PressedKey = SEL; + break; + } + default: + { + PressedKey = JOY_NONE; + LCD_DisplayStringLine(LINE(17), (uint8_t*)" JOY ERROR "); + break; + } + } + } + /* Clear the interrupt pending bits */ + IOE_ClearGITPending(IOE_2_ADDR, IOE_GIT_GPIO); + IOE_ClearIOITPending(IOE_2_ADDR, IOE_JOY_IT); + } + /* Clear interrupt pending bit */ + EXTI_ClearITPendingBit(IOE_IT_EXTI_LINE); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/stm32f2xx_it.h new file mode 100644 index 000000000..5c629635e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/stm32f2xx_it.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file DCMI/Camera/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void SDIO_IRQHandler(void); +void SD_SDIO_DMA_IRQHANDLER(void); +void DCMI_IRQHandler(void); +void DMA2_Stream1_IRQHandler(void); +void EXTI15_10_IRQHandler(void); +void EXTI2_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DCMI/Camera/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/Complete list of DMA examples.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/Complete list of DMA examples.txt new file mode 100644 index 000000000..2352bafdd --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/Complete list of DMA examples.txt @@ -0,0 +1,52 @@ +/** + @page DMA_EXAMPLES DMA examples List + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file DMA/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief STM32F2xx Standard Peripherals DMA examples List. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +In addition to this example (DMA\FLASH_RAM), other examples uses the DMA: + + *
    + *
  • Complet List of DMA Examples + * - @subpage ADC_ADC3_DMA + * - @subpage DualADC_Interleaved_DMAmode3 + * - @subpage DualADC_RegulSimu_DMAmode1 + * - @subpage TripleADC_Interleaved_DMAmode2 + * - @subpage ADC_VBAT_Measurement + * - @subpage AES_ECBmode_DMA + * - @subpage TDES_ECBmode_DMA + * - @subpage DAC_SignalsGen + * - @subpage DCMI_OV9655_Camera + * - @subpage SHA1_MD5_DMA + * - @subpage I2C_DataExchangeDMA + * - @subpage NVIC_DMA_WFIMode + * - @subpage TIM_DMA + * - @subpage TIM1_DMABURST + * - @subpage USART_DataExchangeDMA + *
+ + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/main.c new file mode 100644 index 000000000..e175c169c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/main.c @@ -0,0 +1,253 @@ +/** + ****************************************************************************** + * @file DMA/FLASH_RAM/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DMA_FLASH_RAM + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO TestStatus TransferStatus = FAILED; + +const uint32_t SRC_Const_Buffer[BUFFER_SIZE]= { + 0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10, + 0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20, + 0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30, + 0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40, + 0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50, + 0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60, + 0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70, + 0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80}; +uint32_t DST_Buffer[BUFFER_SIZE]; + +/* Private function prototypes -----------------------------------------------*/ +void DMA_Config(void); +TestStatus Buffercmp(const uint32_t* pBuffer, uint32_t* pBuffer1, uint16_t BufferLength); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Configure LEDs to monitor program status */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + STM_EVAL_LEDOn(LED1); /* Turn LED1 on: start of configuration */ + + /* Configure and enable the DMA Stream for Memory to Memory transfer */ + DMA_Config(); + + STM_EVAL_LEDOn(LED2); /* Turn LED2 on: start of Transfer */ + + /* Wait the end of transmission (the DMA Stream is disabled by Hardware at the + end of the transfer) . + There is also another way to check on end of transfer by monitoring the + number of remaining data to be transferred. */ + /* while (DMA_GetCurrentMemoryTarget(DMA_STREAM) != 0) */ /* First method */ + while (DMA_GetCmdStatus(DMA_STREAM) != DISABLE) /* Second method */ + { + /* + Since this code present a simple example of how to use DMA, it is just + waiting on the end of transfer. + But, while DMA Stream is transferring data, the CPU is free to perform + other tasks in parallel to the DMA transfer. + */ + } + + /* Check if the transmitted and received data are equal */ + TransferStatus = Buffercmp(SRC_Const_Buffer, DST_Buffer, BUFFER_SIZE); + /* TransferStatus = PASSED, if the transmitted and received data + are the same */ + /* TransferStatus = FAILED, if the transmitted and received data + are different */ + + if (TransferStatus != FAILED) + { + /* Turn LED4 on: Transfer correct */ + STM_EVAL_LEDOn(LED4); + } + + while (1) + { + } +} + +/** + * @brief Configure the DMA controller according to the Stream parameters + * defined in main.h file + * @param None + * @retval None + */ +void DMA_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + __IO uint32_t Timeout = TIMEOUT_MAX; + + /* Enable DMA clock */ + RCC_AHB1PeriphClockCmd(DMA_STREAM_CLOCK, ENABLE); + + /* Reset DMA Stream registers (for debug purpose) */ + DMA_DeInit(DMA_STREAM); + + /* Check if the DMA Stream is disabled before enabling it. + Note that this step is useful when the same Stream is used multiple times: + enabled, then disabled then re-enabled... In this case, the DMA Stream disable + will be effective only at the end of the ongoing data transfer and it will + not be possible to re-configure it before making sure that the Enable bit + has been cleared by hardware. If the Stream is used only once, this step might + be bypassed. */ + while (DMA_GetCmdStatus(DMA_STREAM) != DISABLE) + { + } + + /* Configure DMA Stream */ + DMA_InitStructure.DMA_Channel = DMA_CHANNEL; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DST_Buffer; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToMemory; + DMA_InitStructure.DMA_BufferSize = (uint32_t)BUFFER_SIZE; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA_STREAM, &DMA_InitStructure); + + /* Enable DMA Stream Transfer Complete interrupt */ + DMA_ITConfig(DMA_STREAM, DMA_IT_TC, ENABLE); + + /* DMA Stream enable */ + DMA_Cmd(DMA_STREAM, ENABLE); + + /* Check if the DMA Stream has been effectively enabled. + The DMA Stream Enable bit is cleared immediately by hardware if there is an + error in the configuration parameters and the transfer is no started (ie. when + wrong FIFO threshold is configured ...) */ + Timeout = TIMEOUT_MAX; + while ((DMA_GetCmdStatus(DMA_STREAM) != ENABLE) && (Timeout-- > 0)) + { + } + + /* Check if a timeout condition occurred */ + if (Timeout == 0) + { + /* Manage the error: to simplify the code enter an infinite loop */ + while (1) + { + } + } + + /* Enable the DMA Stream IRQ Channel */ + NVIC_InitStructure.NVIC_IRQChannel = DMA_STREAM_IRQ; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Compares two buffers. + * @param pBuffer, pBuffer1: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer identical to pBuffer1 + * FAILED: pBuffer differs from pBuffer1 + */ +TestStatus Buffercmp(const uint32_t* pBuffer, uint32_t* pBuffer1, uint16_t BufferLength) +{ + while(BufferLength--) + { + if(*pBuffer != *pBuffer1) + { + return FAILED; + } + + pBuffer++; + pBuffer1++; + } + + return PASSED; +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/main.h new file mode 100644 index 000000000..b84d383c6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/main.h @@ -0,0 +1,56 @@ +/** + ****************************************************************************** + * @file DMA/FLASH_RAM/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* DMA Stream parameters definitions. You can modify these parameters to select + a different DMA Stream and/or channel. + But note that only DMA2 Streams are capable of Memory to Memory transfers. */ +#define DMA_STREAM DMA2_Stream0 +#define DMA_CHANNEL DMA_Channel_0 +#define DMA_STREAM_CLOCK RCC_AHB1Periph_DMA2 +#define DMA_STREAM_IRQ DMA2_Stream0_IRQn +#define DMA_IT_TCIF DMA_IT_TCIF0 +#define DMA_STREAM_IRQHANDLER DMA2_Stream0_IRQHandler + +#define BUFFER_SIZE 32 +#define TIMEOUT_MAX 10000 /* Maximum timeout value */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/readme.txt new file mode 100644 index 000000000..c5738646b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/readme.txt @@ -0,0 +1,107 @@ +/** + @page DMA_FLASH_RAM DMA_FLASH_RAM + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file DMA/FLASH_RAM/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the DMA FLASH to RAM example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a description of how to use a DMA channel to transfer +a word data buffer from FLASH memory to embedded SRAM memory. + +DMA2 Stream0 channel0 is configured to transfer the contents of a 32-word data +buffer stored in Flash memory to the reception buffer declared in RAM. + +The start of transfer is triggered by software. DMA2 Stream0 channel0 memory-to-memory +transfer is enabled. Source and destination addresses incrementing is also enabled. +The transfer is started by setting the Channel enable bit for DMA2 Stream0 channel0. +At the end of the transfer a Transfer Complete interrupt is generated since it +is enabled. The Transfer Complete Interrupt pending bit is then cleared. +When the DMA transfer is completed the DMA Stream is disabled by hardware. +The main application can check on the Stream Enable status to detect the end of +transfer or can also check on the number of remaining transfers which should be +equal to 0 at the end of the transfer. +A comparison between the source and destination buffers is done to check that all +data have been correctly transferred. + +STM32 Eval board's LEDs can be used to monitor the transfer status: + - LED1 is ON when the program starts. + - LED2 is ON when the configuration phase is done and the transfer is started. + - LED3 is ON when the transfer is complete (into the Transfer Complete interrupt + routine) + - LED4 is ON when the comparison result between source buffer and destination + buffer is passed. + +It is possible to select a different Stream and/or channel for the DMA transfer +example by modifying defines values in the file main.h. +Note that only DMA2 Streams are able to perform Memory-to-Memory transfers. + +There are different options to check on the DMA end of transfer: + 1. Use DMA Transfer Complete interrupt. + 2. Use DMA enable state (the DMA stream is disabled by hardware when transfer + is complete). + 3. Use DMA Stream transfer counter value (the counter value is decremented when + transfer is ongoing and is equal to 0 at the transfer end). + 4. Use DMA Transfer Complete flag (polling mode). + +In this example methods 1, 2 and 3 are provided (you can select between method 2 +and 3 by uncommenting relative code in waiting loop in the main.c file). + + +@par Directory contents + + - DMA/FLASH_RAM/system_stm32f2xx.c STM32F2xx system clock configuration file + - DMA/FLASH_RAM/stm32f2xx_conf.h Library Configuration file + - DMA/FLASH_RAM/stm32f2xx_it.c Interrupt handlers + - DMA/FLASH_RAM/stm32f2xx_it.h Interrupt handlers header file + - DMA/FLASH_RAM/main.c Main program + - DMA/FLASH_RAM/main.h Main program header file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/stm32f2xx_conf.h new file mode 100644 index 000000000..b7b188175 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file DMA/FLASH_RAM/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/stm32f2xx_it.c new file mode 100644 index 000000000..8ab771cab --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/stm32f2xx_it.c @@ -0,0 +1,188 @@ +/** + ****************************************************************************** + * @file DMA/FLASH_RAM/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DMA_FLASH_RAM + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles DMA Stream interrupt request. + * @param None + * @retval None + */ +void DMA_STREAM_IRQHANDLER(void) +{ + /* Test on DMA Stream Transfer Complete interrupt */ + if(DMA_GetITStatus(DMA_STREAM, DMA_IT_TCIF)) + { + /* Clear DMA Stream Transfer Complete interrupt pending bit */ + DMA_ClearITPendingBit(DMA_STREAM, DMA_IT_TCIF); + + /* Turn LED3 on: End of Transfer */ + STM_EVAL_LEDOn(LED3); + } +} + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/stm32f2xx_it.h new file mode 100644 index 000000000..d2284d0bd --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/stm32f2xx_it.h @@ -0,0 +1,61 @@ +/** + ****************************************************************************** + * @file DMA/FLASH_RAM/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void DMA_STREAM_IRQHANDLER(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/DMA/FLASH_RAM/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/main.c new file mode 100644 index 000000000..153d2f961 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/main.c @@ -0,0 +1,192 @@ +/** + ****************************************************************************** + * @file EXTI/EXTI_Example/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup EXTI_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +void EXTILine0_Config(void); +void EXTILine15_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + + /* Configure EXTI Line0 (connected to PA0 pin) in interrupt mode */ + EXTILine0_Config(); + + /* Configure EXTI Line15 (connected to PG15 pin) in interrupt mode */ + EXTILine15_Config(); + + /* Generate software interrupt: simulate a falling edge applied on EXTI0 line */ + EXTI_GenerateSWInterrupt(EXTI_Line0); + + while (1) + { + } +} + +/** + * @brief Configures EXTI Line0 (connected to PA0 pin) in interrupt mode + * @param None + * @retval None + */ +void EXTILine0_Config(void) +{ + EXTI_InitTypeDef EXTI_InitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* Enable GPIOA clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + /* Enable SYSCFG clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + + /* Configure PA0 pin as input floating */ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* Connect EXTI Line0 to PA0 pin */ + SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); + + /* Configure EXTI Line0 */ + EXTI_InitStructure.EXTI_Line = EXTI_Line0; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Configures EXTI Line15 (connected to PG15 pin) in interrupt mode + * @param None + * @retval None + */ +void EXTILine15_Config(void) +{ + EXTI_InitTypeDef EXTI_InitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* Enable GPIOG clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); + /* Enable SYSCFG clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + + /* Configure PG15 pin as input floating */ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; + GPIO_Init(GPIOG, &GPIO_InitStructure); + + /* Connect EXTI Line15 to PG15 pin */ + SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOG, EXTI_PinSource15); + + /* Configure EXTI Line15 */ + EXTI_InitStructure.EXTI_Line = EXTI_Line15; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Enable and set EXTI15_10 Interrupt to the lowest priority */ + NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + + NVIC_Init(&NVIC_InitStructure); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/readme.txt new file mode 100644 index 000000000..e9cc76e3a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/readme.txt @@ -0,0 +1,93 @@ +/** + @page EXTI_Example EXTI Configuration Example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file EXTI/EXTI_Example/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the EXTI example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure external interrupt lines. +In this example, 2 EXTI lines (EXTI Line0 and Line15) are configured to generate +an interrupt on each rising and falling edge, respectively. +In the interrupt routine a led connected to a specific GPIO pin is toggled. + +In this example: + - EXTI Line0 is connected to PA0 pin + - EXTI Line15 is connected to PG15 pin + +After EXTI configuration, a software interrupt is generated on the EXTI0 toggles LED1. +After that, + when falling edge is detected on EXTI Line0, LED1 toggles + when falling edge is detected on EXTI Line15, LED2 toggles + +On STM322xG-EVA, + EXTI Line0 is connected to Wakeup push-button + EXTI Line15 is connected to Key push-button + +@note In this example, EXTILine15_Config() function can be substituted by + STM_EVAL_PBInit(Button_KEY, Mode_EXTI) provided in the STM322xG-EVAL driver. + + +@par Directory contents + + - EXTI/EXTI_Example/stm32f2xx_conf.h Library Configuration file + - EXTI/EXTI_Example/stm32f2xx_it.h Interrupt handlers header file + - EXTI/EXTI_Example/stm32f2xx_it.c Interrupt handlers + - EXTI/EXTI_Example/main.c Main program + - EXTI/EXTI_Example/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + - STM322xG-EVAL Set-up + - Use LED1 and LED2 connected respectively to PG.06 and PG.08 + - Use the Key push-button connected to pin PG15 (EXTI Line15) + - Use the Wakeup push-button connected to pin PA0 (EXTI Line0) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/stm32f2xx_conf.h new file mode 100644 index 000000000..502446672 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file EXTI/EXTI_Example/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/stm32f2xx_it.c new file mode 100644 index 000000000..d639eee3b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/stm32f2xx_it.c @@ -0,0 +1,208 @@ +/** + ****************************************************************************** + * @file EXTI/EXTI_Example/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup EXTI_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles External line 0 interrupt request. + * @param None + * @retval None + */ +void EXTI0_IRQHandler(void) +{ + if(EXTI_GetITStatus(EXTI_Line0) != RESET) + { + /* Toggle LED1 */ + STM_EVAL_LEDToggle(LED1); + + /* Clear the EXTI line 0 pending bit */ + EXTI_ClearITPendingBit(EXTI_Line0); + } +} + +/** + * @brief This function handles External lines 15 to 10 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if(EXTI_GetITStatus(EXTI_Line15) != RESET) + { + /* Toggle LED2 */ + STM_EVAL_LEDToggle(LED2); + + /* Clear the EXTI line 15 pending bit */ + EXTI_ClearITPendingBit(EXTI_Line15); + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/stm32f2xx_it.h new file mode 100644 index 000000000..410c0ea5d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file EXTI/EXTI_Example/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/EXTI/EXTI_Example/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/main.c new file mode 100644 index 000000000..6473441b4 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/main.c @@ -0,0 +1,254 @@ +/** + ****************************************************************************** + * @file FLASH/Program/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FLASH_Program + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Private define ------------------------------------------------------------*/ + +#define FLASH_USER_START_ADDR ADDR_FLASH_SECTOR_2 /* Start @ of user Flash area */ +#define FLASH_USER_END_ADDR ADDR_FLASH_SECTOR_5 /* End @ of user Flash area */ + +/* Base address of the Flash sectors */ +#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) /* Base @ of Sector 0, 16 Kbytes */ +#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08004000) /* Base @ of Sector 1, 16 Kbytes */ +#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08008000) /* Base @ of Sector 2, 16 Kbytes */ +#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x0800C000) /* Base @ of Sector 3, 16 Kbytes */ +#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08010000) /* Base @ of Sector 4, 64 Kbytes */ +#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08020000) /* Base @ of Sector 5, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08040000) /* Base @ of Sector 6, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x08060000) /* Base @ of Sector 7, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_8 ((uint32_t)0x08080000) /* Base @ of Sector 8, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_9 ((uint32_t)0x080A0000) /* Base @ of Sector 9, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_10 ((uint32_t)0x080C0000) /* Base @ of Sector 10, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_11 ((uint32_t)0x080E0000) /* Base @ of Sector 11, 128 Kbytes */ + +#define DATA_32 ((uint32_t)0x12345678) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint32_t StartSector = 0, EndSector = 0, Address = 0, SectorCounter = 0; +__IO uint32_t data32 = 0 , MemoryProgramStatus = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +uint32_t GetSector(uint32_t Address); + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Unlock the Flash to enable the flash control register access *************/ + FLASH_Unlock(); + + /* Erase the user Flash area + (area defined by FLASH_USER_START_ADDR and FLASH_USER_END_ADDR) ***********/ + + /* Clear pending flags (if any) */ + FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | + FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR); + + /* Get the number of the start and end sectors */ + StartSector = GetSector(FLASH_USER_START_ADDR); + EndSector = GetSector(FLASH_USER_END_ADDR); + + for (SectorCounter = StartSector; SectorCounter < EndSector; SectorCounter += 8) + { + /* Device voltage range supposed to be [2.7V to 3.6V], the operation will + be done by word */ + if (FLASH_EraseSector(SectorCounter, VoltageRange_3) != FLASH_COMPLETE) + { + /* Error occurred while sector erase. + User can add here some code to deal with this error */ + while (1) + { + } + } + } + + /* Program the user Flash area word by word + (area defined by FLASH_USER_START_ADDR and FLASH_USER_END_ADDR) ***********/ + + Address = FLASH_USER_START_ADDR; + + while (Address < FLASH_USER_END_ADDR) + { + if (FLASH_ProgramWord(Address, DATA_32) == FLASH_COMPLETE) + { + Address = Address + 4; + } + else + { + /* Error occurred while writing data in Flash memory. + User can add here some code to deal with this error */ + while (1) + { + } + } + } + + /* Lock the Flash to disable the flash control register access (recommended + to protect the FLASH memory against possible unwanted operation) *********/ + FLASH_Lock(); + + + /* Check if the programmed data is OK + MemoryProgramStatus = 0: data programmed correctly + MemoryProgramStatus != 0: number of words not programmed correctly ******/ + Address = FLASH_USER_START_ADDR; + MemoryProgramStatus = 0x0; + + while (Address < FLASH_USER_END_ADDR) + { + data32 = *(__IO uint32_t*)Address; + + if (data32 != DATA_32) + { + MemoryProgramStatus++; + } + + Address = Address + 4; + } + + while (1) + { + } +} + +/** + * @brief Gets the sector of a given address + * @param None + * @retval The sector of a given address + */ +uint32_t GetSector(uint32_t Address) +{ + uint32_t sector = 0; + + if((Address < ADDR_FLASH_SECTOR_1) && (Address >= ADDR_FLASH_SECTOR_0)) + { + sector = FLASH_Sector_0; + } + else if((Address < ADDR_FLASH_SECTOR_2) && (Address >= ADDR_FLASH_SECTOR_1)) + { + sector = FLASH_Sector_1; + } + else if((Address < ADDR_FLASH_SECTOR_3) && (Address >= ADDR_FLASH_SECTOR_2)) + { + sector = FLASH_Sector_2; + } + else if((Address < ADDR_FLASH_SECTOR_4) && (Address >= ADDR_FLASH_SECTOR_3)) + { + sector = FLASH_Sector_3; + } + else if((Address < ADDR_FLASH_SECTOR_5) && (Address >= ADDR_FLASH_SECTOR_4)) + { + sector = FLASH_Sector_4; + } + else if((Address < ADDR_FLASH_SECTOR_6) && (Address >= ADDR_FLASH_SECTOR_5)) + { + sector = FLASH_Sector_5; + } + else if((Address < ADDR_FLASH_SECTOR_7) && (Address >= ADDR_FLASH_SECTOR_6)) + { + sector = FLASH_Sector_6; + } + else if((Address < ADDR_FLASH_SECTOR_8) && (Address >= ADDR_FLASH_SECTOR_7)) + { + sector = FLASH_Sector_7; + } + else if((Address < ADDR_FLASH_SECTOR_9) && (Address >= ADDR_FLASH_SECTOR_8)) + { + sector = FLASH_Sector_8; + } + else if((Address < ADDR_FLASH_SECTOR_10) && (Address >= ADDR_FLASH_SECTOR_9)) + { + sector = FLASH_Sector_9; + } + else if((Address < ADDR_FLASH_SECTOR_11) && (Address >= ADDR_FLASH_SECTOR_10)) + { + sector = FLASH_Sector_10; + } + else/*(Address < FLASH_END_ADDR) && (Address >= ADDR_FLASH_SECTOR_11))*/ + { + sector = FLASH_Sector_11; + } + + return sector; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/readme.txt new file mode 100644 index 000000000..347bcf780 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/readme.txt @@ -0,0 +1,79 @@ +/** + @page FLASH_Program FLASH_Program + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file FLASH/Program/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the FLASH Program example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a description of how to program the STM32F2xx FLASH. + +After Reset, the Flash memory Program/Erase Controller is locked. To unlock it, +the FLASH_Unlock function is used. +Before programming the desired addresses, an erase operation is performed using +the flash erase sector feature. The erase procedure starts with the calculation of +the number of sector to be used. Then all these sectors will be erased one by one by +calling FLASH_EraseSector function. + +Once this operation is finished, the programming operation will be performed by +using the FLASH_ProgramWord function. The written data is then checked and the +result of the programming operation is stored into the MemoryProgramStatus variable. + + +@par Directory contents + + - FLASH/Program/system_stm32f2xx.c STM32F2xx system clock configuration file + - FLASH/Program/stm32f2xx_conf.h Library Configuration file + - FLASH/Program/stm32f2xx_it.c Interrupt handlers + - FLASH/Program/stm32f2xx_it.h Header for stm32f2xx_it.c + - FLASH/Program/main.c Main program + + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + +@par How to use it ? + +In order to make the program work, you must do the following: + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/stm32f2xx_conf.h new file mode 100644 index 000000000..3e0c09d8b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file FLASH/Program/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/stm32f2xx_it.c new file mode 100644 index 000000000..278f64441 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file FLASH/Program/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FLASH_Program + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx_md.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/stm32f2xx_it.h new file mode 100644 index 000000000..00d5abcaa --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file FLASH/Program/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Program/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/main.c new file mode 100644 index 000000000..d0d8cff09 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/main.c @@ -0,0 +1,194 @@ +/** + ****************************************************************************** + * @file FLASH/Write_Protection/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FLASH_Write_Protection + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define FLASH_WRP_SECTORS (OB_WRP_Sector_2 | OB_WRP_Sector_3) /* sectors 2 and 3 */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t SectorsWRPStatus = 0xFFF; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Initialize Key Button mounted on STM322xG-EVAL board */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); + + /* Test if Key push-button on STM322xG-EVAL board is pressed */ + if (STM_EVAL_PBGetState(BUTTON_KEY) == 0x00) + { + /* Get FLASH_WRP_SECTORS write protection status */ + SectorsWRPStatus = FLASH_OB_GetWRP() & FLASH_WRP_SECTORS; + + if (SectorsWRPStatus == 0x00) + { + /* If FLASH_WRP_SECTORS are write protected, disable the write protection */ + + /* Enable the Flash option control register access */ + FLASH_OB_Unlock(); + + /* Disable FLASH_WRP_SECTORS write protection */ + FLASH_OB_WRPConfig(FLASH_WRP_SECTORS, DISABLE); + + /* Start the Option Bytes programming process */ + if (FLASH_OB_Launch() != FLASH_COMPLETE) + { + /* User can add here some code to deal with this error */ + while (1) + { + } + } + /* Disable the Flash option control register access (recommended to protect + the option Bytes against possible unwanted operations) */ + FLASH_OB_Lock(); + + /* Get FLASH_WRP_SECTORS write protection status */ + SectorsWRPStatus = FLASH_OB_GetWRP() & FLASH_WRP_SECTORS; + + /* Check if FLASH_WRP_SECTORS write protection is disabled */ + if (SectorsWRPStatus == FLASH_WRP_SECTORS) + { + /* OK, turn ON LED1 */ + STM_EVAL_LEDOn(LED1); + } + else + { + /* KO, turn ON LED3 */ + STM_EVAL_LEDOn(LED3); + } + } + else + { /* If FLASH_WRP_SECTORS are not write protected, enable the write protection */ + + /* Enable the Flash option control register access */ + FLASH_OB_Unlock(); + + /* Enable FLASH_WRP_SECTORS write protection */ + FLASH_OB_WRPConfig(FLASH_WRP_SECTORS, ENABLE); + + /* Start the Option Bytes programming process */ + if (FLASH_OB_Launch() != FLASH_COMPLETE) + { + /* User can add here some code to deal with this error */ + while (1) + { + } + } + + /* Disable the Flash option control register access (recommended to protect + the option Bytes against possible unwanted operations) */ + FLASH_OB_Lock(); + + /* Get FLASH_WRP_SECTORS write protection status */ + SectorsWRPStatus = FLASH_OB_GetWRP() & FLASH_WRP_SECTORS; + + /* Check if FLASH_WRP_SECTORS are write protected */ + if (SectorsWRPStatus == 0x00) + { + /* OK, turn ON LED4 */ + STM_EVAL_LEDOn(LED4); + } + else + { + /* KO, turn ON LED3 */ + STM_EVAL_LEDOn(LED3); + } + } + } + + /* Turn ON LED2 */ + STM_EVAL_LEDOn(LED2); + + while (1) + { + } +} + + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/readme.txt new file mode 100644 index 000000000..3497ba506 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/readme.txt @@ -0,0 +1,85 @@ +/** + @page FLASH_Write_Protection FLASH_Write_Protection + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file FLASH/Write_Protection/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the FLASH Write Protection example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a description of how to enable and disable the write protection +for the STM32F2xx FLASH. + +By maintaining the Key push-button pressed at Reset, the program will check the +write protection status of FLASH_WRP_SECTORS (defined in main.c) + - If FLASH_WRP_SECTORS are write protected, the write protection will be disabled. + Then LED1 will turn ON, if the protection disable operation is done correctly, + otherwise LED3 turns ON. + - If FLASH_WRP_SECTORS are not write protected, the write protection will be enabled. + Then LED4 will turn ON, if the protection enable operation is done correctly, + otherwise LED3 turns ON. + +If after reset the Key push-button is not pressed, the program will simply turn ON LED2. + + +@par Directory contents + + - FLASH/Write_Protection/system_stm32f2xx.c STM32F2xx system clock configuration file + - FLASH/Write_Protection/stm32f2xx_conf.h Library Configuration file + - FLASH/Write_Protection/stm32f2xx_it.c Interrupt handlers + - FLASH/Write_Protection/stm32f2xx_it.h Header for stm32f2xx_it.c + - FLASH/Write_Protection/main.c Main program + + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + - Use the Key push-button connected to pin PG15 (EXTI Line15) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/stm32f2xx_conf.h new file mode 100644 index 000000000..45e4c8f6a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file FLASH/Write_Protection/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/stm32f2xx_it.c new file mode 100644 index 000000000..7ed8bf9b1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file FLASH/Write_Protection/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FLASH_Write_Protection + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx_md.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/stm32f2xx_it.h new file mode 100644 index 000000000..83b961efe --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file FLASH/Write_Protection/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FLASH/Write_Protection/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/main.c new file mode 100644 index 000000000..49e6d8633 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/main.c @@ -0,0 +1,256 @@ +/** + ****************************************************************************** + * @file FSMC/OneNAND/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" +#include "stm322xg_eval_fsmc_onenand.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FSMC_OneNAND + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define OneNAND_SAMSUNG_MANUFACTURER_ID 0x00EC +#define OneNAND_SAMSUNG_DEVICE_ID 0x0025 + +#define OneNAND_BUFFER_SIZE 0x0400 /* Page size: 1024 x 16 bits = 2048 Bytes */ +#define OneNAND_WRITE_BLOCK_NUMBER 0x0000 /* should be between 0 and 511, the block size is 128 KBytes */ +#define OneNAND_WRITE_PAGE_NUMBER 0x0000 /* The page size inside a Block is 2 KBytes */ +#define OneNAND_NUMBER_OF_PAGE_PER_BLOCK 0x0040 /* 64 pages per block */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +OneNAND_IDTypeDef OneNAND_ID; +OneNAND_ADDRESS Address; +uint16_t TxBuffer[OneNAND_BUFFER_SIZE], RxBuffer_A[OneNAND_BUFFER_SIZE], RxBuffer_S[OneNAND_BUFFER_SIZE]; +uint32_t Counter = 0, PageIndex = 0, Status = 0; + +/* Private function prototypes -----------------------------------------------*/ +void Fill_hBuffer(uint16_t *pBuffer, uint16_t BufferLenght, uint32_t Offset); + +/* Private functions ---------------------------------------------------------*/ +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* FSMC Initialization */ + OneNAND_Init(); + + /* Read OneNAND memory ID */ + OneNAND_ReadID(&OneNAND_ID); + + /* Verify the OneNAND ID */ + if((OneNAND_ID.Manufacturer_ID == OneNAND_SAMSUNG_MANUFACTURER_ID) && + (OneNAND_ID.Device_ID == OneNAND_SAMSUNG_DEVICE_ID)) + { + /* Fill the buffer to send */ + Fill_hBuffer(TxBuffer, OneNAND_BUFFER_SIZE , 0x320F); + Address.Block = OneNAND_WRITE_BLOCK_NUMBER; + Address.Page = OneNAND_WRITE_PAGE_NUMBER; + + /***** Erase then write to the OneNAND memory ******************************/ + /* Unlock the selected OneNAND block */ + Status = OneNAND_UnlockBlock(OneNAND_WRITE_BLOCK_NUMBER); + + if (Status == 0) + { + /* Erase the selected OneNAND block */ + Status = OneNAND_EraseBlock(Address.Block); + + if (Status == 0) + { + /* Write data to the OneNAND memory (128Kbytes by page 2KBytes each) */ + for(PageIndex = 0; (PageIndex < OneNAND_NUMBER_OF_PAGE_PER_BLOCK) && (Status ==0); PageIndex++) + { + Status = OneNAND_WriteBuffer(TxBuffer, Address, OneNAND_BUFFER_SIZE); + Address.Page++; + } + + if (Status == 0) + { + /***** Verify of the written data using asynchronous read ***********/ + Fill_hBuffer(RxBuffer_A, OneNAND_BUFFER_SIZE , 0xFF); + Status = 0; + Address.Block = OneNAND_WRITE_BLOCK_NUMBER; + Address.Page = OneNAND_WRITE_PAGE_NUMBER; + + for(PageIndex = 0; PageIndex < OneNAND_NUMBER_OF_PAGE_PER_BLOCK; PageIndex++) + { + /* Read back the written data (By page) */ + OneNAND_AsynchronousRead(RxBuffer_A, Address, OneNAND_BUFFER_SIZE); + + /* Verify the written data */ + for(Counter = 0; Counter < OneNAND_BUFFER_SIZE; Counter++) + { + if(TxBuffer[Counter] != RxBuffer_A[Counter]) + { + Status++; + } + } + Address.Page++; + } + + if (Status != 0) + { + /* Turn ON LED2 */ + STM_EVAL_LEDOn(LED2); + } + + /***** Verify of the written data using synchronous read ************/ + Fill_hBuffer(RxBuffer_S, OneNAND_BUFFER_SIZE , 0xFF); + Status = 0; + Address.Block = OneNAND_WRITE_BLOCK_NUMBER; + Address.Page = OneNAND_WRITE_PAGE_NUMBER; + + for(PageIndex = 0; PageIndex < OneNAND_NUMBER_OF_PAGE_PER_BLOCK; PageIndex++) + { + /* Read back the written data (By page) */ + OneNAND_SynchronousRead(RxBuffer_S, Address, OneNAND_BUFFER_SIZE); + + /* Verify the written data */ + for(Counter = 0; Counter < OneNAND_BUFFER_SIZE; Counter++) + { + if(TxBuffer[Counter] != RxBuffer_S[Counter]) + { + Status++; + } + } + Address.Page++; + } + + if (Status != 0) + { + /* Turn ON LED3 */ + STM_EVAL_LEDOn(LED3); + } + } + else + { + /* Turn ON LED4 */ + STM_EVAL_LEDOn(LED4); + } + } + else + { + /* Turn ON LED2 and LED4*/ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED4); + } + } + else + { + /* Turn ON LED3 and LED4 */ + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + } + else + { + /* Turn ON LED2, LED3 and LED4 */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + + if (Status == 0) + { + /* Turn ON LED1 */ + STM_EVAL_LEDOn(LED1); + } + + /* Infinite loop */ + while (1) + { + } +} + +/** + * @brief Fills a global 16-bit buffer with user predefined data. + * @param pBuffer: pointer on the buffer to fill + * @param BufferSize: size of the buffer to fill + * @param Offset: first value to fill on the buffer + * @retval None + */ +void Fill_hBuffer(uint16_t *pBuffer, uint16_t BufferLenght, uint32_t Offset) +{ + uint16_t IndexTmp = 0; + + /* Put in global buffer different values */ + for (IndexTmp = 0; IndexTmp < BufferLenght; IndexTmp++ ) + { + pBuffer[IndexTmp] = IndexTmp + Offset; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/readme.txt new file mode 100644 index 000000000..5748f315c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/readme.txt @@ -0,0 +1,78 @@ +/** + @page FSMC_OneNAND How to configure the FSMC to drive the OneNAND memory + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file FSMC/OneNAND/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the FSMC OneNAND example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the FSMC to drive the KFG1216U2A/B-DIB6 OneNAND +memory mounted on STM322xG-EVAL evaluation board(MB786) RevA. + +@note This memory is not available on STM322xG-EVAL board RevB. + +In this example a basic example of how to use the FSMC firmware library and +an associate driver to perform read/write operations on the KFG1216U2A OneNAND +memory. + + +@par Directory contents + + - FSMC/OneNAND/system_stm32f2xx.c STM32F2xx system clock configuration file + - FSMC/OneNAND/stm32f2xx_conf.h Library Configuration file + - FSMC/OneNAND/stm32f2xx_it.c Interrupt handlers + - FSMC/OneNAND/stm32f2xx_it.h Header for stm32f2xx_it.c + - FSMC/OneNAND/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + @note The STM322xG-EVAL board RevA was wrongly named STM3220F-EVAL + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Add the "stm322xg_eval_fsmc_onenand.c" file (under Utilities\STM32_EVAL\STM322xG_EVAL) + to the project source list + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/stm32f2xx_conf.h new file mode 100644 index 000000000..ba4a9be5c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file FSMC/OneNAND/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/stm32f2xx_it.c new file mode 100644 index 000000000..a85a5c699 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/stm32f2xx_it.c @@ -0,0 +1,174 @@ +/** + ****************************************************************************** + * @file FSMC/OneNAND/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FSMC_OneNAND + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/stm32f2xx_it.h new file mode 100644 index 000000000..28fddd414 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file FSMC/OneNAND/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/OneNAND/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/main.c new file mode 100644 index 000000000..027b418ce --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/main.c @@ -0,0 +1,160 @@ +/** + ****************************************************************************** + * @file FSMC/SRAM/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" +#include "stm322xg_eval_fsmc_sram.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FSMC_SRAM + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define BUFFER_SIZE 0x100 +#define WRITE_READ_ADDR 0x800 + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint16_t TxBuffer[BUFFER_SIZE], RxBuffer[BUFFER_SIZE]; +__IO uint32_t WriteReadStatus = 0; +uint32_t Index = 0; + +/* Private function prototypes -----------------------------------------------*/ +void Fill_Buffer(uint16_t *pBuffer, uint16_t BufferLenght, uint32_t Offset); + +/* Private functions ---------------------------------------------------------*/ +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + + + /* Configure FSMC Bank 1 NOR/SRAM2 */ + SRAM_Init(); + + /* Write data to FSMC SRAM memory */ + /* Fill the buffer to send */ + Fill_Buffer(TxBuffer, BUFFER_SIZE, 0x320F); + SRAM_WriteBuffer(TxBuffer, WRITE_READ_ADDR, BUFFER_SIZE); + + /* Read data from FSMC SRAM memory */ + SRAM_ReadBuffer(RxBuffer, WRITE_READ_ADDR, BUFFER_SIZE); + + /* Read back SRAM memory and check content correctness */ + for (Index = 0x00; (Index < BUFFER_SIZE) && (WriteReadStatus == 0); Index++) + { + if (RxBuffer[Index] != TxBuffer[Index]) + { + WriteReadStatus++; + } + } + + if (WriteReadStatus == 0) + { + /* OK */ + /* Turn on LD1 */ + STM_EVAL_LEDOn(LED1); + } + else + { + /* KO */ + /* Turn on LD2 */ + STM_EVAL_LEDOn(LED2); + } + + while (1) + { + } +} + +/** + * @brief Fills buffer with user predefined data. + * @param pBuffer: pointer on the buffer to fill + * @param BufferLenght: size of the buffer to fill + * @param Offset: first value to fill on the buffer + * @retval None + */ +void Fill_Buffer(uint16_t *pBuffer, uint16_t BufferLenght, uint32_t Offset) +{ + uint16_t IndexTmp = 0; + + /* Put in global buffer different values */ + for (IndexTmp = 0; IndexTmp < BufferLenght; IndexTmp++ ) + { + pBuffer[IndexTmp] = IndexTmp + Offset; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/readme.txt new file mode 100644 index 000000000..2820248d5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/readme.txt @@ -0,0 +1,76 @@ +/** + @page FSMC_SRAM How to configure the FSMC to drive the SRAM memory + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file FSMC/SRAM/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the FSMC SRAM example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the FSMC to drive the CY7C1071DV33-12BAXI SRAM +memory mounted on STM322xG-EVAL evaluation board(MB786) RevB. + +In this example a basic example of how to use the FSMC firmware library and +an associate driver to perform read/write operations on the CY7C1071DV33 SRAM memory. + +@note This SRAM memory is not available on STM322xG-EVAL board RevA. + + +@par Directory contents + + - FSMC/SRAM/system_stm32f2xx.c STM32F2xx system clock configuration file + - FSMC/SRAM/stm32f2xx_conf.h Library Configuration file + - FSMC/SRAM/stm32f2xx_it.c Interrupt handlers + - FSMC/SRAM/stm32f2xx_it.h Header for stm32f2xx_it.c + - FSMC/SRAM/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + @note The STM322xG-EVAL board RevA was wrongly named STM3220F-EVAL + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/stm32f2xx_conf.h new file mode 100644 index 000000000..3236a11ce --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file FSMC/SRAM/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/stm32f2xx_it.c new file mode 100644 index 000000000..a0b18f482 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/stm32f2xx_it.c @@ -0,0 +1,174 @@ +/** + ****************************************************************************** + * @file FSMC/SRAM/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FSMC_SRAM + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/stm32f2xx_it.h new file mode 100644 index 000000000..4d2dc7933 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file FSMC/SRAM/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/main.c new file mode 100644 index 000000000..67fcb5ecb --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/main.c @@ -0,0 +1,125 @@ +/** + ****************************************************************************** + * @file FSMC/SRAM_DataMemory/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FSMC_SRAM_DataMemory + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint32_t Tab[1024], Index; +__IO uint32_t TabAddr, MSPValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + for (Index = 0; Index <1024 ; Index++) + { + Tab[Index] =Index; + } + + TabAddr = (uint32_t)Tab; /* should be 0x640xxxxx */ + + /* Get main stack pointer value */ + MSPValue = __get_MSP(); /* should be 0x640xxxxx */ + + while (1) + { + } +} + +/** + * @brief Fills buffer with user predefined data. + * @param pBuffer: pointer on the buffer to fill + * @param BufferLenght: size of the buffer to fill + * @param Offset: first value to fill on the buffer + * @retval None + */ +void Fill_Buffer(uint16_t *pBuffer, uint16_t BufferLenght, uint32_t Offset) +{ + uint16_t IndexTmp = 0; + + /* Put in global buffer different values */ + for (IndexTmp = 0; IndexTmp < BufferLenght; IndexTmp++ ) + { + pBuffer[IndexTmp] = IndexTmp + Offset; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/readme.txt new file mode 100644 index 000000000..0c7a1c395 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/readme.txt @@ -0,0 +1,106 @@ +/** + @page FSMC_SRAM_DataMemory FSMC SRAM DataMemory example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file FSMC/SRAM_DataMemory/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the FSMC SRAM DataMemory example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to use the external SRAM mounted on STM322xG-EVAL RevB +as program data memory (including heap and stack). +The example scenario doesn't reflect a real application case; its purpose is to +provide only the procedure to follow to use the external SRAM as data memory. + +This example doesn't use the default library startup files, it uses startup files +provided within this folder. + +@note This SRAM memory is not available on STM322xG-EVAL board RevA. + + +@par Directory contents + + - FSMC/SRAM_DataMemory/system_stm32f2xx.c STM32F2xx system clock configuration file + - FSMC/SRAM_DataMemory/stm32f2xx_conf.h Library Configuration file + - FSMC/SRAM_DataMemory/stm32f2xx_it.c Interrupt handlers + - FSMC/SRAM_DataMemory/stm32f2xx_it.h Header for stm32f2xx_it.c + - FSMC/SRAM_DataMemory/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + @note The STM322xG-EVAL board RevA was wrongly named STM3220F-EVAL + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Update your project settings as follows: +
    +
  • MDK-ARM + - in Project->Options for Target window, select 'RAM1'and enter 0x64000000 + as start address with size of 0x100000 (IRAM1 must be un-checked) + - uncomment "#define DATA_IN_ExtSRAM " in the "system_stm32f2xx.c" file + +
  • EWARM + - use "stm32f2xx_flash_extsram.icf" as linker file (under Project\STM32F2xx_StdPeriph_Template\EWARM) + - uncomment "#define DATA_IN_ExtSRAM " in the "system_stm32f2xx.c" file + +
  • RIDE + - In the Application options -> script menu, set "Use Default Script File" + to "No" and use "stm32f2xx_flash_extsram.ld" as Script File. + - uncomment "#define DATA_IN_ExtSRAM " in the "system_stm32f2xx.c" file + +
  • TASKING + - In the project workspace window, open the stm32f2xx.lsl file. + - From the memory window, select rom and enter and enter 0x64000000 + as address with size of 1024k. + - uncomment "#define DATA_IN_ExtSRAM " in the "system_stm32f2xx.c" file + +
  • TrueSTUDIO + - In the project properties window, select 'C/C++ Build'->settings node then + the 'C Linker'->General node and use "stm32f2xx_flash_extsram.ld" as Script File. + - uncomment "#define DATA_IN_ExtSRAM " in the "system_stm32f2xx.c" file + +
+ - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/EWARM/startup_stm32f2xx.s b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/EWARM/startup_stm32f2xx.s new file mode 100644 index 000000000..20442e8be --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/EWARM/startup_stm32f2xx.s @@ -0,0 +1,630 @@ +;/******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** +;* File Name : startup_stm32f2xx.s +;* Author : MCD Application Team +;* Version : V1.1.0 +;* Date : 13-April-2012 +;* Description : STM32F2xx devices vector table for EWARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Configure he external SRAM mounted on STM322xG-EVAL board +;* to be used as data memory (optional, to be enabled by user) +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); +;* You may not use this file except in compliance with the License. +;* You may obtain a copy of the License at: +;* +;* http://www.st.com/software_license_agreement_liberty_v2 +;* +;* Unless required by applicable law or agreed to in writing, software +;* distributed under the License is distributed on an "AS IS" BASIS, +;* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;* See the License for the specific language governing permissions and +;* limitations under the License. +;* +;*******************************************************************************/ +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + +__initial_spTop EQU 0x20000400 ; stack used for SystemInit & SystemInit_ExtMemCtl + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD __initial_spTop ; Use internal RAM for stack for calling SystemInit + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD FSMC_IRQHandler ; FSMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out + DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In + DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI + DCD OTG_HS_IRQHandler ; USB OTG HS + DCD DCMI_IRQHandler ; DCMI + DCD CRYP_IRQHandler ; CRYP crypto + DCD HASH_RNG_IRQHandler ; Hash and Rng + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =sfe(CSTACK) ; restore original stack pointer + MSR MSP, R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMP_STAMP_IRQHandler + SECTION .text:CODE:REORDER(1) +TAMP_STAMP_IRQHandler + B TAMP_STAMP_IRQHandler + + PUBWEAK RTC_WKUP_IRQHandler + SECTION .text:CODE:REORDER(1) +RTC_WKUP_IRQHandler + B RTC_WKUP_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Stream0_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream0_IRQHandler + B DMA1_Stream0_IRQHandler + + PUBWEAK DMA1_Stream1_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream1_IRQHandler + B DMA1_Stream1_IRQHandler + + PUBWEAK DMA1_Stream2_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream2_IRQHandler + B DMA1_Stream2_IRQHandler + + PUBWEAK DMA1_Stream3_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream3_IRQHandler + B DMA1_Stream3_IRQHandler + + PUBWEAK DMA1_Stream4_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream4_IRQHandler + B DMA1_Stream4_IRQHandler + + PUBWEAK DMA1_Stream5_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream5_IRQHandler + B DMA1_Stream5_IRQHandler + + PUBWEAK DMA1_Stream6_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream6_IRQHandler + B DMA1_Stream6_IRQHandler + + PUBWEAK ADC_IRQHandler + SECTION .text:CODE:REORDER(1) +ADC_IRQHandler + B ADC_IRQHandler + + PUBWEAK CAN1_TX_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN1_TX_IRQHandler + B CAN1_TX_IRQHandler + + PUBWEAK CAN1_RX0_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN1_RX0_IRQHandler + B CAN1_RX0_IRQHandler + + PUBWEAK CAN1_RX1_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN1_RX1_IRQHandler + B CAN1_RX1_IRQHandler + + PUBWEAK CAN1_SCE_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN1_SCE_IRQHandler + B CAN1_SCE_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_TIM9_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM1_BRK_TIM9_IRQHandler + B TIM1_BRK_TIM9_IRQHandler + + PUBWEAK TIM1_UP_TIM10_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM1_UP_TIM10_IRQHandler + B TIM1_UP_TIM10_IRQHandler + + PUBWEAK TIM1_TRG_COM_TIM11_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM1_TRG_COM_TIM11_IRQHandler + B TIM1_TRG_COM_TIM11_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK USART3_IRQHandler + SECTION .text:CODE:REORDER(1) +USART3_IRQHandler + B USART3_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTC_Alarm_IRQHandler + SECTION .text:CODE:REORDER(1) +RTC_Alarm_IRQHandler + B RTC_Alarm_IRQHandler + + PUBWEAK OTG_FS_WKUP_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_FS_WKUP_IRQHandler + B OTG_FS_WKUP_IRQHandler + + PUBWEAK TIM8_BRK_TIM12_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM8_BRK_TIM12_IRQHandler + B TIM8_BRK_TIM12_IRQHandler + + PUBWEAK TIM8_UP_TIM13_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM8_UP_TIM13_IRQHandler + B TIM8_UP_TIM13_IRQHandler + + PUBWEAK TIM8_TRG_COM_TIM14_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM8_TRG_COM_TIM14_IRQHandler + B TIM8_TRG_COM_TIM14_IRQHandler + + PUBWEAK TIM8_CC_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM8_CC_IRQHandler + B TIM8_CC_IRQHandler + + PUBWEAK DMA1_Stream7_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA1_Stream7_IRQHandler + B DMA1_Stream7_IRQHandler + + PUBWEAK FSMC_IRQHandler + SECTION .text:CODE:REORDER(1) +FSMC_IRQHandler + B FSMC_IRQHandler + + PUBWEAK SDIO_IRQHandler + SECTION .text:CODE:REORDER(1) +SDIO_IRQHandler + B SDIO_IRQHandler + + PUBWEAK TIM5_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM5_IRQHandler + B TIM5_IRQHandler + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + PUBWEAK TIM6_DAC_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM6_DAC_IRQHandler + B TIM6_DAC_IRQHandler + + PUBWEAK TIM7_IRQHandler + SECTION .text:CODE:REORDER(1) +TIM7_IRQHandler + B TIM7_IRQHandler + + PUBWEAK DMA2_Stream0_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream0_IRQHandler + B DMA2_Stream0_IRQHandler + + PUBWEAK DMA2_Stream1_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream1_IRQHandler + B DMA2_Stream1_IRQHandler + + PUBWEAK DMA2_Stream2_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream2_IRQHandler + B DMA2_Stream2_IRQHandler + + PUBWEAK DMA2_Stream3_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream3_IRQHandler + B DMA2_Stream3_IRQHandler + + PUBWEAK DMA2_Stream4_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream4_IRQHandler + B DMA2_Stream4_IRQHandler + + PUBWEAK ETH_IRQHandler + SECTION .text:CODE:REORDER(1) +ETH_IRQHandler + B ETH_IRQHandler + + PUBWEAK ETH_WKUP_IRQHandler + SECTION .text:CODE:REORDER(1) +ETH_WKUP_IRQHandler + B ETH_WKUP_IRQHandler + + PUBWEAK CAN2_TX_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN2_TX_IRQHandler + B CAN2_TX_IRQHandler + + PUBWEAK CAN2_RX0_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN2_RX0_IRQHandler + B CAN2_RX0_IRQHandler + + PUBWEAK CAN2_RX1_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN2_RX1_IRQHandler + B CAN2_RX1_IRQHandler + + PUBWEAK CAN2_SCE_IRQHandler + SECTION .text:CODE:REORDER(1) +CAN2_SCE_IRQHandler + B CAN2_SCE_IRQHandler + + PUBWEAK OTG_FS_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_FS_IRQHandler + B OTG_FS_IRQHandler + + PUBWEAK DMA2_Stream5_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream5_IRQHandler + B DMA2_Stream5_IRQHandler + + PUBWEAK DMA2_Stream6_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream6_IRQHandler + B DMA2_Stream6_IRQHandler + + PUBWEAK DMA2_Stream7_IRQHandler + SECTION .text:CODE:REORDER(1) +DMA2_Stream7_IRQHandler + B DMA2_Stream7_IRQHandler + + PUBWEAK USART6_IRQHandler + SECTION .text:CODE:REORDER(1) +USART6_IRQHandler + B USART6_IRQHandler + + PUBWEAK I2C3_EV_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C3_EV_IRQHandler + B I2C3_EV_IRQHandler + + PUBWEAK I2C3_ER_IRQHandler + SECTION .text:CODE:REORDER(1) +I2C3_ER_IRQHandler + B I2C3_ER_IRQHandler + + PUBWEAK OTG_HS_EP1_OUT_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_HS_EP1_OUT_IRQHandler + B OTG_HS_EP1_OUT_IRQHandler + + PUBWEAK OTG_HS_EP1_IN_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_HS_EP1_IN_IRQHandler + B OTG_HS_EP1_IN_IRQHandler + + PUBWEAK OTG_HS_WKUP_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_HS_WKUP_IRQHandler + B OTG_HS_WKUP_IRQHandler + + PUBWEAK OTG_HS_IRQHandler + SECTION .text:CODE:REORDER(1) +OTG_HS_IRQHandler + B OTG_HS_IRQHandler + + PUBWEAK DCMI_IRQHandler + SECTION .text:CODE:REORDER(1) +DCMI_IRQHandler + B DCMI_IRQHandler + + PUBWEAK CRYP_IRQHandler + SECTION .text:CODE:REORDER(1) +CRYP_IRQHandler + B CRYP_IRQHandler + + PUBWEAK HASH_RNG_IRQHandler + SECTION .text:CODE:REORDER(1) +HASH_RNG_IRQHandler + B HASH_RNG_IRQHandler + + END +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/MDK-ARM/startup_stm32f2xx.s b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/MDK-ARM/startup_stm32f2xx.s new file mode 100644 index 000000000..41138de4c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/MDK-ARM/startup_stm32f2xx.s @@ -0,0 +1,429 @@ +;******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** +;* File Name : startup_stm32f2xx.s +;* Author : MCD Application Team +;* Version : V1.1.0 +;* Date : 13-April-2012 +;* Description : STM32F2xx devices vector table for MDK-ARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; +; Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); +; You may not use this file except in compliance with the License. +; You may obtain a copy of the License at: +; +; http://www.st.com/software_license_agreement_liberty_v2 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + +__initial_spTop EQU 0x20000400 ; stack used for SystemInit & SystemInit_ExtMemCtl + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_spTop ; use internal RAM for stack for calling SystemInit + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD FSMC_IRQHandler ; FSMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out + DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In + DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI + DCD OTG_HS_IRQHandler ; USB OTG HS + DCD DCMI_IRQHandler ; DCMI + DCD CRYP_IRQHandler ; CRYP crypto + DCD HASH_RNG_IRQHandler ; Hash and Rng +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + LDR R0, =SystemInit + BLX R0 + LDR R0, =__initial_sp ; restore original stack pointer + MSR MSP, R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Stream0_IRQHandler [WEAK] + EXPORT DMA1_Stream1_IRQHandler [WEAK] + EXPORT DMA1_Stream2_IRQHandler [WEAK] + EXPORT DMA1_Stream3_IRQHandler [WEAK] + EXPORT DMA1_Stream4_IRQHandler [WEAK] + EXPORT DMA1_Stream5_IRQHandler [WEAK] + EXPORT DMA1_Stream6_IRQHandler [WEAK] + EXPORT ADC_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM10_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK] + EXPORT TIM8_UP_TIM13_IRQHandler [WEAK] + EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK] + EXPORT TIM8_CC_IRQHandler [WEAK] + EXPORT DMA1_Stream7_IRQHandler [WEAK] + EXPORT FSMC_IRQHandler [WEAK] + EXPORT SDIO_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Stream0_IRQHandler [WEAK] + EXPORT DMA2_Stream1_IRQHandler [WEAK] + EXPORT DMA2_Stream2_IRQHandler [WEAK] + EXPORT DMA2_Stream3_IRQHandler [WEAK] + EXPORT DMA2_Stream4_IRQHandler [WEAK] + EXPORT ETH_IRQHandler [WEAK] + EXPORT ETH_WKUP_IRQHandler [WEAK] + EXPORT CAN2_TX_IRQHandler [WEAK] + EXPORT CAN2_RX0_IRQHandler [WEAK] + EXPORT CAN2_RX1_IRQHandler [WEAK] + EXPORT CAN2_SCE_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + EXPORT DMA2_Stream5_IRQHandler [WEAK] + EXPORT DMA2_Stream6_IRQHandler [WEAK] + EXPORT DMA2_Stream7_IRQHandler [WEAK] + EXPORT USART6_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_OUT_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_IN_IRQHandler [WEAK] + EXPORT OTG_HS_WKUP_IRQHandler [WEAK] + EXPORT OTG_HS_IRQHandler [WEAK] + EXPORT DCMI_IRQHandler [WEAK] + EXPORT CRYP_IRQHandler [WEAK] + EXPORT HASH_RNG_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Stream0_IRQHandler +DMA1_Stream1_IRQHandler +DMA1_Stream2_IRQHandler +DMA1_Stream3_IRQHandler +DMA1_Stream4_IRQHandler +DMA1_Stream5_IRQHandler +DMA1_Stream6_IRQHandler +ADC_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM9_IRQHandler +TIM1_UP_TIM10_IRQHandler +TIM1_TRG_COM_TIM11_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +OTG_FS_WKUP_IRQHandler +TIM8_BRK_TIM12_IRQHandler +TIM8_UP_TIM13_IRQHandler +TIM8_TRG_COM_TIM14_IRQHandler +TIM8_CC_IRQHandler +DMA1_Stream7_IRQHandler +FSMC_IRQHandler +SDIO_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler +DMA2_Stream0_IRQHandler +DMA2_Stream1_IRQHandler +DMA2_Stream2_IRQHandler +DMA2_Stream3_IRQHandler +DMA2_Stream4_IRQHandler +ETH_IRQHandler +ETH_WKUP_IRQHandler +CAN2_TX_IRQHandler +CAN2_RX0_IRQHandler +CAN2_RX1_IRQHandler +CAN2_SCE_IRQHandler +OTG_FS_IRQHandler +DMA2_Stream5_IRQHandler +DMA2_Stream6_IRQHandler +DMA2_Stream7_IRQHandler +USART6_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +OTG_HS_EP1_OUT_IRQHandler +OTG_HS_EP1_IN_IRQHandler +OTG_HS_WKUP_IRQHandler +OTG_HS_IRQHandler +DCMI_IRQHandler +CRYP_IRQHandler +HASH_RNG_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***** diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/RIDE/startup_stm32f2xx.s b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/RIDE/startup_stm32f2xx.s new file mode 100644 index 000000000..984902070 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/RIDE/startup_stm32f2xx.s @@ -0,0 +1,516 @@ +/** + ****************************************************************************** + * @file startup_stm32f2xx.s + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief STM32F2xx Devices vector table for RIDE7 toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system and the external SRAM mounted on + * STM322xG-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m3 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/* Stack used for SystemInit & SystemInit_ExtMemCtl*/ +.equ __initial_spTop, 0x20000400 + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Restore original stack pointer. */ + ldr r0, =_estack + msr MSP, r0 +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word __initial_spTop /* Use internal RAM for stack for calling SystemInit. */ + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_IRQHandler /* PVD through EXTI Line detection */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_IRQHandler /* EXTI Line0 */ + .word EXTI1_IRQHandler /* EXTI Line1 */ + .word EXTI2_IRQHandler /* EXTI Line2 */ + .word EXTI3_IRQHandler /* EXTI Line3 */ + .word EXTI4_IRQHandler /* EXTI Line4 */ + .word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .word CAN1_TX_IRQHandler /* CAN1 TX */ + .word CAN1_RX0_IRQHandler /* CAN1 RX0 */ + .word CAN1_RX1_IRQHandler /* CAN1 RX1 */ + .word CAN1_SCE_IRQHandler /* CAN1 SCE */ + .word EXTI9_5_IRQHandler /* External Line[9:5]s */ + .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */ + .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */ + .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word TIM4_IRQHandler /* TIM4 */ + .word I2C1_EV_IRQHandler /* I2C1 Event */ + .word I2C1_ER_IRQHandler /* I2C1 Error */ + .word I2C2_EV_IRQHandler /* I2C2 Event */ + .word I2C2_ER_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word USART3_IRQHandler /* USART3 */ + .word EXTI15_10_IRQHandler /* External Line[15:10]s */ + .word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */ + .word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */ + .word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */ + .word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */ + .word TIM8_CC_IRQHandler /* TIM8 Capture Compare */ + .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .word FSMC_IRQHandler /* FSMC */ + .word SDIO_IRQHandler /* SDIO */ + .word TIM5_IRQHandler /* TIM5 */ + .word SPI3_IRQHandler /* SPI3 */ + .word UART4_IRQHandler /* UART4 */ + .word UART5_IRQHandler /* UART5 */ + .word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */ + .word TIM7_IRQHandler /* TIM7 */ + .word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .word ETH_IRQHandler /* Ethernet */ + .word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */ + .word CAN2_TX_IRQHandler /* CAN2 TX */ + .word CAN2_RX0_IRQHandler /* CAN2 RX0 */ + .word CAN2_RX1_IRQHandler /* CAN2 RX1 */ + .word CAN2_SCE_IRQHandler /* CAN2 SCE */ + .word OTG_FS_IRQHandler /* USB OTG FS */ + .word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EV_IRQHandler /* I2C3 event */ + .word I2C3_ER_IRQHandler /* I2C3 error */ + .word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */ + .word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */ + .word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */ + .word OTG_HS_IRQHandler /* USB OTG HS */ + .word DCMI_IRQHandler /* DCMI */ + .word CRYP_IRQHandler /* CRYP crypto */ + .word HASH_RNG_IRQHandler /* Hash and Rng */ + + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Stream0_IRQHandler + .thumb_set DMA1_Stream0_IRQHandler,Default_Handler + + .weak DMA1_Stream1_IRQHandler + .thumb_set DMA1_Stream1_IRQHandler,Default_Handler + + .weak DMA1_Stream2_IRQHandler + .thumb_set DMA1_Stream2_IRQHandler,Default_Handler + + .weak DMA1_Stream3_IRQHandler + .thumb_set DMA1_Stream3_IRQHandler,Default_Handler + + .weak DMA1_Stream4_IRQHandler + .thumb_set DMA1_Stream4_IRQHandler,Default_Handler + + .weak DMA1_Stream5_IRQHandler + .thumb_set DMA1_Stream5_IRQHandler,Default_Handler + + .weak DMA1_Stream6_IRQHandler + .thumb_set DMA1_Stream6_IRQHandler,Default_Handler + + .weak ADC_IRQHandler + .thumb_set ADC_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak DMA1_Stream7_IRQHandler + .thumb_set DMA1_Stream7_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Stream0_IRQHandler + .thumb_set DMA2_Stream0_IRQHandler,Default_Handler + + .weak DMA2_Stream1_IRQHandler + .thumb_set DMA2_Stream1_IRQHandler,Default_Handler + + .weak DMA2_Stream2_IRQHandler + .thumb_set DMA2_Stream2_IRQHandler,Default_Handler + + .weak DMA2_Stream3_IRQHandler + .thumb_set DMA2_Stream3_IRQHandler,Default_Handler + + .weak DMA2_Stream4_IRQHandler + .thumb_set DMA2_Stream4_IRQHandler,Default_Handler + + .weak ETH_IRQHandler + .thumb_set ETH_IRQHandler,Default_Handler + + .weak ETH_WKUP_IRQHandler + .thumb_set ETH_WKUP_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler,Default_Handler + + .weak CAN2_SCE_IRQHandler + .thumb_set CAN2_SCE_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler,Default_Handler + + .weak DMA2_Stream5_IRQHandler + .thumb_set DMA2_Stream5_IRQHandler,Default_Handler + + .weak DMA2_Stream6_IRQHandler + .thumb_set DMA2_Stream6_IRQHandler,Default_Handler + + .weak DMA2_Stream7_IRQHandler + .thumb_set DMA2_Stream7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_OUT_IRQHandler + .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_IN_IRQHandler + .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler + + .weak OTG_HS_WKUP_IRQHandler + .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler + + .weak OTG_HS_IRQHandler + .thumb_set OTG_HS_IRQHandler,Default_Handler + + .weak DCMI_IRQHandler + .thumb_set DCMI_IRQHandler,Default_Handler + + .weak CRYP_IRQHandler + .thumb_set CRYP_IRQHandler,Default_Handler + + .weak HASH_RNG_IRQHandler + .thumb_set HASH_RNG_IRQHandler,Default_Handler + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/TASKING/cstart_thumb2.asm b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/TASKING/cstart_thumb2.asm new file mode 100644 index 000000000..0516dd661 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/TASKING/cstart_thumb2.asm @@ -0,0 +1,153 @@ + + +;; NOTE: To allow the use of this file for both ARMv6M and ARMv7M, +;; we will only use 16-bit Thumb intructions. + + .extern _lc_ub_stack ; usr/sys mode stack pointer + .extern _lc_ue_stack ; symbol required by debugger + .extern _lc_ub_table ; ROM to RAM copy table + .extern main + .extern _Exit + .extern exit + .weak exit + .global __get_argcv + .weak __get_argcv + .extern __argcvbuf + .weak __argcvbuf + ;;.extern __init_hardware + .extern __init_vector_table + .extern SystemInit + +__initial_spTop .equ 0x20000400 + + .if @defined('__PROF_ENABLE__') + .extern __prof_init + .endif + .if @defined('__POSIX__') + .extern posix_main + .extern _posix_boot_stack_top + .endif + + .global _START + + .section .text.cstart + + .thumb +_START: + ;; anticipate possible ROM/RAM remapping + ;; by loading the 'real' program address + ldr r1,=_Next + bx r1 +_Next: + + + + LDR R0, =__initial_spTop ; use internal RAM for stack for calling SystemInit + MSR MSP, R0 + + + + + bl SystemInit + + ;; initialize the stack pointer + ldr r1,=_lc_ub_stack ; TODO: make this part of the vector table + mov sp,r1 + + ;; copy initialized sections from ROM to RAM + ;; and clear uninitialized data sections in RAM + + ldr r3,=_lc_ub_table + movs r0,#0 +cploop: + ldr r4,[r3,#0] ; load type + ldr r5,[r3,#4] ; dst address + ldr r6,[r3,#8] ; src address + ldr r7,[r3,#12] ; size + + cmp r4,#1 + beq copy + cmp r4,#2 + beq clear + b done + +copy: + subs r7,r7,#1 + ldrb r1,[r6,r7] + strb r1,[r5,r7] + bne copy + + adds r3,r3,#16 + b cploop + +clear: + subs r7,r7,#1 + strb r0,[r5,r7] + bne clear + + adds r3,r3,#16 + b cploop + +done: + ;; initialize or copy the vector table + bl __init_vector_table + + .if @defined('__POSIX__') + + ;; posix stack buffer for system upbringing + ldr r0,=_posix_boot_stack_top + ldr r0, [r0] + mov sp,r0 + + .else + + ;; load r10 with end of USR/SYS stack, which is + ;; needed in case stack overflow checking is on + ;; NOTE: use 16-bit instructions only, for ARMv6M + ldr r0,=_lc_ue_stack + mov r10,r0 + + .endif + + .if @defined('__PROF_ENABLE__') + bl __prof_init + .endif + + .if @defined('__POSIX__') + ;; call posix_main with no arguments + bl posix_main + .else + ;; retrieve argc and argv (default argv[0]==NULL & argc==0) + bl __get_argcv + ldr r1,=__argcvbuf + ;; call main + bl main + .endif + + ;; call exit using the return value from main() + ;; Note. Calling exit will also run all functions + ;; that were supplied through atexit(). + bl exit + +__get_argcv: ; weak definition + movs r0,#0 + bx lr + + .ltorg + .endsec + + .calls '_START', ' ' + .calls '_START','__init_vector_table' + .if @defined('__PROF_ENABLE__') + .calls '_START','__prof_init' + .endif + .if @defined('__POSIX__') + .calls '_START','posix_main' + .else + .calls '_START','__get_argcv' + .calls '_START','main' + .endif + .calls '_START','exit' + .calls '_START','',0 + + .end diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/TrueSTUDIO/startup_stm32f2xx.s b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/TrueSTUDIO/startup_stm32f2xx.s new file mode 100644 index 000000000..74b82a9a0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/startup/TrueSTUDIO/startup_stm32f2xx.s @@ -0,0 +1,518 @@ +/** + ****************************************************************************** + * @file startup_stm32f2xx.s + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief STM32F2xx Devices vector table for Atollic TrueSTUDIO toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system and the external SRAM mounted on + * STM322xG-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m3 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/* stack used for SystemInit & SystemInit_ExtMemCtl*/ +.equ __initial_spTop, 0x20000400 + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call static constructors */ + bl __libc_init_array +/* Restore original stack pointer. */ + ldr r0, =_estack + msr MSP, r0 +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word __initial_spTop /* Use internal RAM for stack for calling SystemInit. */ + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_IRQHandler /* PVD through EXTI Line detection */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_IRQHandler /* EXTI Line0 */ + .word EXTI1_IRQHandler /* EXTI Line1 */ + .word EXTI2_IRQHandler /* EXTI Line2 */ + .word EXTI3_IRQHandler /* EXTI Line3 */ + .word EXTI4_IRQHandler /* EXTI Line4 */ + .word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .word CAN1_TX_IRQHandler /* CAN1 TX */ + .word CAN1_RX0_IRQHandler /* CAN1 RX0 */ + .word CAN1_RX1_IRQHandler /* CAN1 RX1 */ + .word CAN1_SCE_IRQHandler /* CAN1 SCE */ + .word EXTI9_5_IRQHandler /* External Line[9:5]s */ + .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */ + .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */ + .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word TIM4_IRQHandler /* TIM4 */ + .word I2C1_EV_IRQHandler /* I2C1 Event */ + .word I2C1_ER_IRQHandler /* I2C1 Error */ + .word I2C2_EV_IRQHandler /* I2C2 Event */ + .word I2C2_ER_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word USART3_IRQHandler /* USART3 */ + .word EXTI15_10_IRQHandler /* External Line[15:10]s */ + .word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */ + .word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */ + .word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */ + .word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */ + .word TIM8_CC_IRQHandler /* TIM8 Capture Compare */ + .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .word FSMC_IRQHandler /* FSMC */ + .word SDIO_IRQHandler /* SDIO */ + .word TIM5_IRQHandler /* TIM5 */ + .word SPI3_IRQHandler /* SPI3 */ + .word UART4_IRQHandler /* UART4 */ + .word UART5_IRQHandler /* UART5 */ + .word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */ + .word TIM7_IRQHandler /* TIM7 */ + .word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .word ETH_IRQHandler /* Ethernet */ + .word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */ + .word CAN2_TX_IRQHandler /* CAN2 TX */ + .word CAN2_RX0_IRQHandler /* CAN2 RX0 */ + .word CAN2_RX1_IRQHandler /* CAN2 RX1 */ + .word CAN2_SCE_IRQHandler /* CAN2 SCE */ + .word OTG_FS_IRQHandler /* USB OTG FS */ + .word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EV_IRQHandler /* I2C3 event */ + .word I2C3_ER_IRQHandler /* I2C3 error */ + .word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */ + .word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */ + .word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */ + .word OTG_HS_IRQHandler /* USB OTG HS */ + .word DCMI_IRQHandler /* DCMI */ + .word CRYP_IRQHandler /* CRYP crypto */ + .word HASH_RNG_IRQHandler /* Hash and Rng */ + + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Stream0_IRQHandler + .thumb_set DMA1_Stream0_IRQHandler,Default_Handler + + .weak DMA1_Stream1_IRQHandler + .thumb_set DMA1_Stream1_IRQHandler,Default_Handler + + .weak DMA1_Stream2_IRQHandler + .thumb_set DMA1_Stream2_IRQHandler,Default_Handler + + .weak DMA1_Stream3_IRQHandler + .thumb_set DMA1_Stream3_IRQHandler,Default_Handler + + .weak DMA1_Stream4_IRQHandler + .thumb_set DMA1_Stream4_IRQHandler,Default_Handler + + .weak DMA1_Stream5_IRQHandler + .thumb_set DMA1_Stream5_IRQHandler,Default_Handler + + .weak DMA1_Stream6_IRQHandler + .thumb_set DMA1_Stream6_IRQHandler,Default_Handler + + .weak ADC_IRQHandler + .thumb_set ADC_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak DMA1_Stream7_IRQHandler + .thumb_set DMA1_Stream7_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Stream0_IRQHandler + .thumb_set DMA2_Stream0_IRQHandler,Default_Handler + + .weak DMA2_Stream1_IRQHandler + .thumb_set DMA2_Stream1_IRQHandler,Default_Handler + + .weak DMA2_Stream2_IRQHandler + .thumb_set DMA2_Stream2_IRQHandler,Default_Handler + + .weak DMA2_Stream3_IRQHandler + .thumb_set DMA2_Stream3_IRQHandler,Default_Handler + + .weak DMA2_Stream4_IRQHandler + .thumb_set DMA2_Stream4_IRQHandler,Default_Handler + + .weak ETH_IRQHandler + .thumb_set ETH_IRQHandler,Default_Handler + + .weak ETH_WKUP_IRQHandler + .thumb_set ETH_WKUP_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler,Default_Handler + + .weak CAN2_SCE_IRQHandler + .thumb_set CAN2_SCE_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler,Default_Handler + + .weak DMA2_Stream5_IRQHandler + .thumb_set DMA2_Stream5_IRQHandler,Default_Handler + + .weak DMA2_Stream6_IRQHandler + .thumb_set DMA2_Stream6_IRQHandler,Default_Handler + + .weak DMA2_Stream7_IRQHandler + .thumb_set DMA2_Stream7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_OUT_IRQHandler + .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_IN_IRQHandler + .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler + + .weak OTG_HS_WKUP_IRQHandler + .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler + + .weak OTG_HS_IRQHandler + .thumb_set OTG_HS_IRQHandler,Default_Handler + + .weak DCMI_IRQHandler + .thumb_set DCMI_IRQHandler,Default_Handler + + .weak CRYP_IRQHandler + .thumb_set CRYP_IRQHandler,Default_Handler + + .weak HASH_RNG_IRQHandler + .thumb_set HASH_RNG_IRQHandler,Default_Handler + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/stm32f2xx_conf.h new file mode 100644 index 000000000..007d4b136 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file FSMC/SRAM_DataMemory/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/stm32f2xx_it.c new file mode 100644 index 000000000..e95fe2a2a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/stm32f2xx_it.c @@ -0,0 +1,174 @@ +/** + ****************************************************************************** + * @file FSMC/SRAM_DataMemory/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup FSMC_SRAM_DataMemory + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/stm32f2xx_it.h new file mode 100644 index 000000000..bde3933f9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file FSMC/SRAM_DataMemory/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/system_stm32f2xx.c new file mode 100644 index 000000000..ee7aa6b0d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/FSMC/SRAM_DataMemory/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +#define DATA_IN_ExtSRAM + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/main.c new file mode 100644 index 000000000..7d1e96dce --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/main.c @@ -0,0 +1,174 @@ +/** + ****************************************************************************** + * @file GPIO/IOToggle/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup IOToggle + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +GPIO_InitTypeDef GPIO_InitStructure; + +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* GPIOG Periph clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); + + /* Configure PG6 and PG8 in output pushpull mode */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOG, &GPIO_InitStructure); + + /* To achieve GPIO toggling maximum frequency, the following sequence is mandatory. + You can monitor PG6 or PG8 on the scope to measure the output signal. + If you need to fine tune this frequency, you can add more GPIO set/reset + cycles to minimize more the infinite loop timing. + This code needs to be compiled with high speed optimization option. */ + while (1) + { + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + + /* Set PG6 and PG8 */ + GPIOG->BSRRL = GPIO_Pin_6 | GPIO_Pin_8; + /* Reset PG6 and PG8 */ + GPIOG->BSRRH = GPIO_Pin_6 | GPIO_Pin_8; + } +} + +/** + * @brief Delay Function. + * @param nCount:specifies the Delay time length. + * @retval None + */ +void Delay(__IO uint32_t nCount) +{ + while(nCount--) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/readme.txt new file mode 100644 index 000000000..d7417a152 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/readme.txt @@ -0,0 +1,85 @@ +/** + @page GPIO_IOToggle GPIO IO Toggle example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file GPIO/IOToggle/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the GPIO IO Toggle example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +GPIO ports are connected on AHB bus, using BSRRH and BSRRL registers one cycle is +required to set a pin and another cycle to reset it. So GPIO pins can toggle at +AHB clock divided by 2. + +This example describes how to use BSRRH and BSRRL (Port Bit Set/Reset Register +High and Low) for maximum IO toggling. + +PG6 and PG8 (configured in output pushpull mode) toggles in a forever loop: + - Set PG6 and PG8 by setting corresponding bits in BSRRL register + - Reset PG6 and PG8 by setting corresponding bits in BSRRH register + +In this example, HCLK is configured at 120 MHz so PG6 and PG8 toggles at 60MHz. +To achieve the maximum IO toggling frequency, you have to configure your compiler +options for high speed optimization. + + +@par Directory contents + + - GPIO/IOToggle/stm32f2xx_conf.h Library Configuration file + - GPIO/IOToggle/stm32f2xx_it.c Interrupt handlers + - GPIO/IOToggle/stm32f2xx_it.h Interrupt handlers header file + - GPIO/IOToggle/main.c Main program + - GPIO/IOToggle/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + - STM322xG-EVAL Set-up + - Use LED1 and LED2 connected respectively to PG.06 and PG.08 + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/stm32f2xx_conf.h new file mode 100644 index 000000000..577f1dc1e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file GPIO/IOToggle/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/stm32f2xx_it.c new file mode 100644 index 000000000..c0d5babc0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file GPIO/IOToggle/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup IOToggle + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/stm32f2xx_it.h new file mode 100644 index 000000000..0be12270b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file GPIO/IOToggle/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/IOToggle/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/main.c new file mode 100644 index 000000000..665c83b57 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/main.c @@ -0,0 +1,172 @@ +/** + ****************************************************************************** + * @file GPIO/JTAG_Remap/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup GPIO_JTAG_Remap + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +GPIO_InitTypeDef GPIO_InitStructure; + +/* Private function prototypes -----------------------------------------------*/ +void Delay(__IO uint32_t nCount); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs and Key Button mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); + + /* Test if Key push-button on STM322xG-EVAL board is pressed */ + if (STM_EVAL_PBGetState(BUTTON_KEY) == 0x00) + { /* Key is pressed */ + + /* Enable GPIOA and GPIOB clocks */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB , ENABLE); + + /* Turn on LED1 */ + STM_EVAL_LEDOn(LED1); + + /* Configure PA.13 (JTMS/SWDIO), PA.14 (JTCK/SWCLK) and PA.15 (JTDI) as + output push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* Configure PB.03 (JTDO) and PB.04 (JTRST) as output push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + while (1) + { + /* Toggle JTMS/SWDAT pin */ + GPIO_WriteBit(GPIOA, GPIO_Pin_13, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_13))); + /* Insert delay */ + Delay(0x5FFFF); + + /* Toggle JTCK/SWCLK pin */ + GPIO_WriteBit(GPIOA, GPIO_Pin_14, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_14))); + /* Insert delay */ + Delay(0x5FFFF); + + /* Toggle JTDI pin */ + GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_15))); + /* Insert delay */ + Delay(0x5FFFF); + + /* Toggle JTDO pin */ + GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_3))); + /* Insert delay */ + Delay(0x5FFFF); + + /* Toggle JTRST pin */ + GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_4))); + /* Insert delay */ + Delay(0x5FFFF); + } + } + else + { + /* Turn on LED2 */ + STM_EVAL_LEDOn(LED2); + + while (1) + { + } + } +} + +/** + * @brief Inserts a delay time. + * @param nCount: specifies the delay time length. + * @retval None + */ +void Delay(__IO uint32_t nCount) +{ + for(; nCount != 0; nCount--); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/readme.txt new file mode 100644 index 000000000..66ebfaace --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/readme.txt @@ -0,0 +1,82 @@ +/** + @page GPIO_JTAG_Remap GPIO JTAG/SWD Remap example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file GPIO/JTAG_Remap/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the GPIO JTAG/SWD Remap example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the JTAG/SWD IOs as standard +GPIOs and gives a configuration sequence. + +Note that once the JTAG/SWD IOs are disabled, the connection with the host debugger is +lost and cannot be re-established as long as the JTAG/SWD IOs remain disabled. +To avoid this situation, the Key push-button is used to disable or not the JTAG/SWD IOs: + 1. Key push-button maintained pressed at reset: JTAG/SWD IOs disabled and LED1 turned ON + 2. Key push-button not pressed at reset: JTAG/SWD IOs unchanged and LED2 turned ON + +Before starting this example, you should disconnect your JTAG/SWD probe and run +the example in stand-alone mode. + + +@par Directory contents + + - GPIO/JTAG_Remap/system_stm32f2xx.c STM32F2xx system clock configuration file + - GPIO/JTAG_Remap/stm32f2xx_conf.h Library Configuration file + - GPIO/JTAG_Remap/stm32f2xx_it.c Interrupt handlers + - GPIO/JTAG_Remap/stm32f2xx_it.h Header for stm32f2xx_it.c + - GPIO/JTAG_Remap/main.c Main program + + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + - STM322xG-EVAL Set-up + - Use LED1 and LED2 connected respectively to PG.06 and PG.08 + - Use the Key push-button connected to pin PG15 (EXTI Line15) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/stm32f2xx_conf.h new file mode 100644 index 000000000..acc75663e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file GPIO/JTAG_Remap/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/stm32f2xx_it.c new file mode 100644 index 000000000..81389380e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file GPIO/JTAG_Remap/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup GPIO_JTAG_Remap + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/stm32f2xx_it.h new file mode 100644 index 000000000..10e0f77ca --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file GPIO/JTAG_Remap/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/GPIO/JTAG_Remap/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/Expected_Results.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/Expected_Results.txt new file mode 100644 index 000000000..bed5f5a77 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/Expected_Results.txt @@ -0,0 +1,57 @@ + ====================================== + ==== Context Swap Example ==== + ====================================== + + --------------------------------------- + MD5 Text to be Hashed : + --------------------------------------- + The hash processor is a fully compliant implementation of the secure hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash algorithm and the HMAC (keyed-hash message authentication code) algorithm suitable for a variety of applications.*** STM32 ***The hash processor is a fully compliant implementation of the secure hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash algorithm and the HMAC (keyed-hash message authentication code) algorithm suitable for a variety of applications.*** STM32 ***The hash processor is a fully compliant implementation of the secure hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash algorithm and the HMAC (keyed-hash message authentication code) algorithm suitable for a variety of applications.*** STM32 *** + + --------------------------------------- + SHA1 Text to be Hashed : + --------------------------------------- +testing123 + +>> MD5 Digest Computation without context swap +>>> Start +>>> Done + --------------------------------------- + MD5 Message Digest (128 bits): + --------------------------------------- + A = [0x8aea9a70] + B = [0x04fc0592] + C = [0xc81dce1b] + D = [0xabe64da6] + +>> SHA1 Digest Computation without context swap +>>> Start +>>> Done + --------------------------------------- + SHA1 Message Digest (160 bits): + --------------------------------------- + H0 = [0x4c0d2b95] + H1 = [0x1ffabd6f] + H2 = [0x9a10489d] + H3 = [0xc40fc356] + H4 = [0xec1d26d5] + +>> MD5 Digest Computation with context swap +>>> Start + ====> During MD5 digest calculation, the context is saved and restored (15) times to calculate the SHA1 digest +>>> Done + --------------------------------------- + MD5 Message Digest (128 bits): + --------------------------------------- + A = [0x8aea9a70] + B = [0x04fc0592] + C = [0xc81dce1b] + D = [0xabe64da6] +>> SHA1 Digest computed during MD5 context swap + --------------------------------------- + SHA1 Message Digest (160 bits): + --------------------------------------- + H0 = [0x4c0d2b95] + H1 = [0x1ffabd6f] + H2 = [0x9a10489d] + H3 = [0xc40fc356] + H4 = [0xec1d26d5] diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/main.c new file mode 100644 index 000000000..a06418eec --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/main.c @@ -0,0 +1,464 @@ +/** + ****************************************************************************** + * @file HASH/Context_Swap/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup HASH_Context_Swap + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* "testing123" */ +const uint8_t Sha1Input[SHA1_INPUT_TAB_SIZE] = {0x74,0x65,0x73,0x74,0x69, + 0x6e,0x67,0x31,0x32,0x33}; + + +/* +3 x + "The hash processor is a fully compliant implementation of the secure + hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash + algorithm and the HMAC (keyed-hash message authentication code) + algorithm suitable for a variety of applications.*** STM32 ***" +*/ +const uint8_t Md5Input[MD5_INPUT_TAB_SIZE]= + {0x54,0x68,0x65,0x20,0x68,0x61,0x73,0x68, + 0x20,0x70,0x72,0x6f,0x63,0x65,0x73,0x73, + 0x6f,0x72,0x20,0x69,0x73,0x20,0x61,0x20, + 0x66,0x75,0x6c,0x6c,0x79,0x20,0x63,0x6f, + 0x6d,0x70,0x6c,0x69,0x61,0x6e,0x74,0x20, + 0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e, + 0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x6f, + 0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x65, + 0x63,0x75,0x72,0x65,0x20,0x68,0x61,0x73, + 0x68,0x20,0x61,0x6c,0x67,0x6f,0x72,0x69, + 0x74,0x68,0x6d,0x20,0x28,0x53,0x48,0x41, + 0x2d,0x31,0x29,0x2c,0x20,0x74,0x68,0x65, + 0x20,0x4d,0x44,0x35,0x20,0x28,0x6d,0x65, + 0x73,0x73,0x61,0x67,0x65,0x2d,0x64,0x69, + 0x67,0x65,0x73,0x74,0x20,0x61,0x6c,0x67, + 0x6f,0x72,0x69,0x74,0x68,0x6d,0x20,0x35, + 0x29,0x20,0x68,0x61,0x73,0x68,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x61,0x6e,0x64,0x20,0x74,0x68,0x65, + 0x20,0x48,0x4d,0x41,0x43,0x20,0x28,0x6b, + 0x65,0x79,0x65,0x64,0x2d,0x68,0x61,0x73, + 0x68,0x20,0x6d,0x65,0x73,0x73,0x61,0x67, + 0x65,0x20,0x61,0x75,0x74,0x68,0x65,0x6e, + 0x74,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x63,0x6f,0x64,0x65,0x29,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x73,0x75,0x69,0x74,0x61,0x62,0x6c, + 0x65,0x20,0x66,0x6f,0x72,0x20,0x61,0x20, + 0x76,0x61,0x72,0x69,0x65,0x74,0x79,0x20, + 0x6f,0x66,0x20,0x61,0x70,0x70,0x6c,0x69, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x73,0x2e, + 0x2a,0x2a,0x2a,0x20,0x53,0x54,0x4d,0x33, + 0x32,0x20,0x2a,0x2a,0x2a, + 0x54,0x68,0x65,0x20,0x68,0x61,0x73,0x68, + 0x20,0x70,0x72,0x6f,0x63,0x65,0x73,0x73, + 0x6f,0x72,0x20,0x69,0x73,0x20,0x61,0x20, + 0x66,0x75,0x6c,0x6c,0x79,0x20,0x63,0x6f, + 0x6d,0x70,0x6c,0x69,0x61,0x6e,0x74,0x20, + 0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e, + 0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x6f, + 0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x65, + 0x63,0x75,0x72,0x65,0x20,0x68,0x61,0x73, + 0x68,0x20,0x61,0x6c,0x67,0x6f,0x72,0x69, + 0x74,0x68,0x6d,0x20,0x28,0x53,0x48,0x41, + 0x2d,0x31,0x29,0x2c,0x20,0x74,0x68,0x65, + 0x20,0x4d,0x44,0x35,0x20,0x28,0x6d,0x65, + 0x73,0x73,0x61,0x67,0x65,0x2d,0x64,0x69, + 0x67,0x65,0x73,0x74,0x20,0x61,0x6c,0x67, + 0x6f,0x72,0x69,0x74,0x68,0x6d,0x20,0x35, + 0x29,0x20,0x68,0x61,0x73,0x68,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x61,0x6e,0x64,0x20,0x74,0x68,0x65, + 0x20,0x48,0x4d,0x41,0x43,0x20,0x28,0x6b, + 0x65,0x79,0x65,0x64,0x2d,0x68,0x61,0x73, + 0x68,0x20,0x6d,0x65,0x73,0x73,0x61,0x67, + 0x65,0x20,0x61,0x75,0x74,0x68,0x65,0x6e, + 0x74,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x63,0x6f,0x64,0x65,0x29,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x73,0x75,0x69,0x74,0x61,0x62,0x6c, + 0x65,0x20,0x66,0x6f,0x72,0x20,0x61,0x20, + 0x76,0x61,0x72,0x69,0x65,0x74,0x79,0x20, + 0x6f,0x66,0x20,0x61,0x70,0x70,0x6c,0x69, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x73,0x2e, + 0x2a,0x2a,0x2a,0x20,0x53,0x54,0x4d,0x33, + 0x32,0x20,0x2a,0x2a,0x2a, + 0x54,0x68,0x65,0x20,0x68,0x61,0x73,0x68, + 0x20,0x70,0x72,0x6f,0x63,0x65,0x73,0x73, + 0x6f,0x72,0x20,0x69,0x73,0x20,0x61,0x20, + 0x66,0x75,0x6c,0x6c,0x79,0x20,0x63,0x6f, + 0x6d,0x70,0x6c,0x69,0x61,0x6e,0x74,0x20, + 0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e, + 0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x6f, + 0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x65, + 0x63,0x75,0x72,0x65,0x20,0x68,0x61,0x73, + 0x68,0x20,0x61,0x6c,0x67,0x6f,0x72,0x69, + 0x74,0x68,0x6d,0x20,0x28,0x53,0x48,0x41, + 0x2d,0x31,0x29,0x2c,0x20,0x74,0x68,0x65, + 0x20,0x4d,0x44,0x35,0x20,0x28,0x6d,0x65, + 0x73,0x73,0x61,0x67,0x65,0x2d,0x64,0x69, + 0x67,0x65,0x73,0x74,0x20,0x61,0x6c,0x67, + 0x6f,0x72,0x69,0x74,0x68,0x6d,0x20,0x35, + 0x29,0x20,0x68,0x61,0x73,0x68,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x61,0x6e,0x64,0x20,0x74,0x68,0x65, + 0x20,0x48,0x4d,0x41,0x43,0x20,0x28,0x6b, + 0x65,0x79,0x65,0x64,0x2d,0x68,0x61,0x73, + 0x68,0x20,0x6d,0x65,0x73,0x73,0x61,0x67, + 0x65,0x20,0x61,0x75,0x74,0x68,0x65,0x6e, + 0x74,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x63,0x6f,0x64,0x65,0x29,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x73,0x75,0x69,0x74,0x61,0x62,0x6c, + 0x65,0x20,0x66,0x6f,0x72,0x20,0x61,0x20, + 0x76,0x61,0x72,0x69,0x65,0x74,0x79,0x20, + 0x6f,0x66,0x20,0x61,0x70,0x70,0x6c,0x69, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x73,0x2e, + 0x2a,0x2a,0x2a,0x20,0x53,0x54,0x4d,0x33, + 0x32,0x20,0x2a,0x2a,0x2a}; + +uint8_t Md5output[16]; +uint8_t Sha1output[20]; +uint32_t ContextSwapCounter=0; + +/* Private function prototypes -----------------------------------------------*/ +void USART_Config(void); +void TIM6_Config(void); +void Display_MainMessage(void); +void Display_MD5Digest(void); + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ +/*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + + /* TIM6 configuration to get a regular interrupt */ + TIM6_Config(); + + /* USART configuration */ + USART_Config(); + + /* Display the original message */ + Display_MainMessage(); + + /* Enable HASH clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE); + +/*============================================================================= + SHA1/ MD5 Digest Computation without context swap +==============================================================================*/ + printf("\n\r>> MD5 Digest Computation without context swap \n\r"); + printf(">>> Start \n\r"); + + /* MD5 Digest Computation *******************************/ + HASH_MD5((uint8_t*)Md5Input, MD5_INPUT_TAB_SIZE,Md5output); + printf(">>> Done \n\r"); + + /* Display the MD5 digest */ + Display_MD5Digest(); + + printf("\n\r>> SHA1 Digest Computation without context swap \n\r"); + printf(">>> Start \n\r"); + + /* SHA1 Digest Computation */ + HASH_SHA1((uint8_t*)Sha1Input, SHA1_INPUT_TAB_SIZE, Sha1output); + printf(">>> Done \n\r"); + + /* Display the SHA1 digest */ + Display_SHA1Digest(); + +/*============================================================================= + SHA1 / MD5 Digest Computation with context swap +==============================================================================*/ + printf("\n\r>> MD5 Digest Computation with context swap \n\r"); + printf(">>> Start \n\r"); + + /* Enable TIM6 */ + TIM_Cmd(TIM6, ENABLE); + + /* MD5 Digest Computation */ + HASH_MD5((uint8_t*)Md5Input, MD5_INPUT_TAB_SIZE, Md5output); + + /* Disable TIM2 : no more interrupts */ + TIM_Cmd(TIM6, DISABLE); + + printf(" ====> During MD5 digest calculation, the context is saved and restored (%d) times to calculate the SHA1 digest \n\r", ContextSwapCounter); + printf(">>> Done \n\r"); + + /* Display the MD5 digest */ + Display_MD5Digest(); + + printf(">> SHA1 Digest computed during MD5 context swap \n\r"); + + /* Display the SHA1 digest */ + Display_SHA1Digest(); + + while(1); +} + +/** + * @brief Display the original messages to be hashed. + * @param None + * @retval None + */ +void Display_MainMessage(void) +{ + uint32_t BufferCounter = 0; + printf("\n\r ====================================== \n\r"); + printf(" ==== Context Swap Example ==== \n\r"); + printf(" ====================================== \n\r"); + printf("\r\n --------------------------------------- \n\r"); + printf(" MD5 Text to be Hashed : \n\r"); + printf(" ---------------------------------------\n\r "); + for(BufferCounter = 0; BufferCounter
© COPYRIGHT 2012 STMicroelectronics
+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stdio.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +#define SHA1_INPUT_TAB_SIZE ((uint32_t)10) +#define MD5_INPUT_TAB_SIZE ((uint32_t)261*3) + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void Display_SHA1Digest(void); + + +#endif /*__MAIN_H*/ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/readme.txt new file mode 100644 index 000000000..eee130010 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/readme.txt @@ -0,0 +1,96 @@ +/** + @page HASH_Context_Swap Context Swapping during Digest calculation example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file HASH/Context_Swap/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of Context Swapping during Digest calculation + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the HASH peripheral to +save and restore hash context to serve a high priority hash operation. + +For this example, no DMA is used for data transfer. +The SHA-1 and MD5 digests can be displayed on a PC HyperTerminal using the USART(CN16). + +- In the first step the MD5 and SHA1 digests are computed and displayed. +- In the second step, a TIM6 interruption is configured to occurs with frequency of + 200 KHz and a MD5 digest calculation is launched. + During the TIM6 interrupt routine, the current MD5 context is saved, then a SHA-1 + digest calculation is launched (a high priority hash operation) and a counter is + incremented (ContextSwapCounter). + When the SHA1 digest calculation is done, the saved MD5 context is restored and + the MD5 digest calculation is continued. + When the MD5 digest calculation is done, both MD5 and SHA1 digests are displayed + to show that there is no difference between the results of the first and the + second steps. + + +@par Directory contents + - HASH/Context_Swap/system_stm32f2xx.c STM32F2xx system clock configuration file + - HASH/Context_Swap/stm32f2xx_conf.h Library Configuration file + - HASH/Context_Swap/stm32f2xx_it.h Interrupt handlers header file + - HASH/Context_Swap/stm32f2xx_it.c Interrupt handlers + - HASH/Context_Swap/main.c Main program + - HASH/Context_Swap/main.h Main header file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs only on STM32F21x Devices (Cryptographic acceleration not + embedded in STM32F20x Devices). + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/stm32f2xx_conf.h new file mode 100644 index 000000000..1ff195445 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/stm32f2xx_conf.h @@ -0,0 +1,87 @@ +/** + ****************************************************************************** + * @file HASH/Context_Swap/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/stm32f2xx_it.c new file mode 100644 index 000000000..0b70322de --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/stm32f2xx_it.c @@ -0,0 +1,211 @@ +/** + ****************************************************************************** + * @file HASH/Context_Swap/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup HASH_Context_Swap + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +HASH_Context Md5Context; +extern const uint8_t Sha1Input[]; +extern unsigned char Sha1output[]; +extern uint32_t Sha1Len; +extern uint32_t ContextSwapCounter; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles TIM6 global interrupt request. + * @param None + * @retval None + */ +void TIM6_DAC_IRQHandler(void) +{ + if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) + { + +/*============================================================================= + Save MD5 Digest Computation context +==============================================================================*/ + HASH_SaveContext(&Md5Context); + ContextSwapCounter++; + +/*============================================================================= + SHA1 Digest Computation +==============================================================================*/ + HASH_SHA1((uint8_t*)Sha1Input, SHA1_INPUT_TAB_SIZE, Sha1output); + +/*============================================================================= + Restore MD5 Digest Computation context +==============================================================================*/ + HASH_RestoreContext(&Md5Context); + + TIM_ClearITPendingBit(TIM6, TIM_IT_Update); + } + +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/stm32f2xx_it.h new file mode 100644 index 000000000..2ecaba41e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/stm32f2xx_it.h @@ -0,0 +1,59 @@ +/** + ****************************************************************************** + * @file HASH/Context_Swap/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/Context_Swap/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/Expected_Results.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/Expected_Results.txt new file mode 100644 index 000000000..34df60a6a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/Expected_Results.txt @@ -0,0 +1,24 @@ + ====================================== + ==== HASH Example ==== + ====================================== + --------------------------------------- + Text to be Hashed ( 2088 bits): + --------------------------------------- +The hash processor is a fully compliant implementation of the secure hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash algorithm and the HMAC (keyed-hash message authentication code) algorithm suitable for a variety of applications.*** STM32 *** + + --------------------------------------- + SHA1 Message Digest (160 bits): + --------------------------------------- + H0 = [0xf859c18d] + H1 = [0xec947242] + H2 = [0x7924fb61] + H3 = [0xef7c6a6b] + H4 = [0x670bf9c3] + + --------------------------------------- + MD5 Message Digest (128 bits): + --------------------------------------- + A = [0x6707862c] + B = [0x7cd0b522] + C = [0xb2dd22d8] + D = [0x477be318] diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/main.c new file mode 100644 index 000000000..f01ea2a22 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/main.c @@ -0,0 +1,311 @@ +/** + ****************************************************************************** + * @file HASH/HASH_SHA1_MD5/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stdio.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup HASH_SHA1_MD5 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define INPUT_TAB_SIZE ((uint32_t) 261) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* + "The hash processor is a fully compliant implementation of the secure + hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash + algorithm and the HMAC (keyed-hash message authentication code) + algorithm suitable for a variety of applications.*** STM32 ***" +*/ +const uint8_t Input[INPUT_TAB_SIZE] = + {0x54,0x68,0x65,0x20,0x68,0x61,0x73,0x68, + 0x20,0x70,0x72,0x6f,0x63,0x65,0x73,0x73, + 0x6f,0x72,0x20,0x69,0x73,0x20,0x61,0x20, + 0x66,0x75,0x6c,0x6c,0x79,0x20,0x63,0x6f, + 0x6d,0x70,0x6c,0x69,0x61,0x6e,0x74,0x20, + 0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e, + 0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x6f, + 0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x65, + 0x63,0x75,0x72,0x65,0x20,0x68,0x61,0x73, + 0x68,0x20,0x61,0x6c,0x67,0x6f,0x72,0x69, + 0x74,0x68,0x6d,0x20,0x28,0x53,0x48,0x41, + 0x2d,0x31,0x29,0x2c,0x20,0x74,0x68,0x65, + 0x20,0x4d,0x44,0x35,0x20,0x28,0x6d,0x65, + 0x73,0x73,0x61,0x67,0x65,0x2d,0x64,0x69, + 0x67,0x65,0x73,0x74,0x20,0x61,0x6c,0x67, + 0x6f,0x72,0x69,0x74,0x68,0x6d,0x20,0x35, + 0x29,0x20,0x68,0x61,0x73,0x68,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x61,0x6e,0x64,0x20,0x74,0x68,0x65, + 0x20,0x48,0x4d,0x41,0x43,0x20,0x28,0x6b, + 0x65,0x79,0x65,0x64,0x2d,0x68,0x61,0x73, + 0x68,0x20,0x6d,0x65,0x73,0x73,0x61,0x67, + 0x65,0x20,0x61,0x75,0x74,0x68,0x65,0x6e, + 0x74,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x63,0x6f,0x64,0x65,0x29,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x73,0x75,0x69,0x74,0x61,0x62,0x6c, + 0x65,0x20,0x66,0x6f,0x72,0x20,0x61,0x20, + 0x76,0x61,0x72,0x69,0x65,0x74,0x79,0x20, + 0x6f,0x66,0x20,0x61,0x70,0x70,0x6c,0x69, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x73,0x2e, + 0x2a,0x2a,0x2a,0x20,0x53,0x54,0x4d,0x33, + 0x32,0x20,0x2a,0x2a,0x2a}; + +uint8_t Md5output[16]; +uint8_t Sha1output[20]; + +/* Private function prototypes -----------------------------------------------*/ +void USART_Config(void); +void Display_MainMessage(uint32_t Len); +void Display_SHA1Digest(void); +void Display_MD5Digest(void); + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ +/*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* USART configuration */ + USART_Config(); + + /* Display the original message */ + Display_MainMessage(INPUT_TAB_SIZE); + + /* Enable HASH clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE); + + +/*============================================================================= + SHA-1 Digest Computation +==============================================================================*/ + + /* SHA-1 Digest Computation */ + HASH_SHA1((uint8_t *)Input, INPUT_TAB_SIZE, Sha1output); + + /* Display the SHA1 digest */ + Display_SHA1Digest(); + +/*============================================================================= + MD5 Digest Computation +==============================================================================*/ + + /* MD5 Digest Computation */ + HASH_MD5((uint8_t *)Input, INPUT_TAB_SIZE, Md5output); + + /* Display the MD5 digest */ + Display_MD5Digest(); + + while(1); +} + +/** + * @brief USART configuration + * @param None + * @retval None + */ +void USART_Config(void) +{ + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitTypeDef USART_InitStructure; + + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + STM_EVAL_COMInit(COM1, &USART_InitStructure); +} + +/** + * @brief Display the original message. + * @param None + * @retval None + */ +void Display_MainMessage(uint32_t Len) +{ + uint32_t BufferCounter = 0; + + printf("\n\r ======================================\n\r"); + printf(" ==== HASH Example ====\n\r"); + printf(" ======================================\n\r"); + printf(" ---------------------------------------\n\r"); + printf(" Text to be Hashed ( %d bits): \n\r", Len*8); + printf(" ---------------------------------------\n\r"); + + for(BufferCounter = 0; BufferCounter < Len ; BufferCounter++) + { + printf("%c", Input[BufferCounter]); + } +} + +/** + * @brief Display the SHA-1 digest. + * @param None + * @retval None + */ +void Display_SHA1Digest(void) +{ + printf("\n\r ---------------------------------------\n\r"); + printf(" SHA1 Message Digest (160 bits):\n\r"); + printf(" ---------------------------------------\n\r"); + printf(" H0 = [0x%02x%02x%02x%02x] \n\r",Sha1output[0], + Sha1output[1], + Sha1output[2], + Sha1output[3]); + printf(" H1 = [0x%02x%02x%02x%02x] \n\r",Sha1output[4], + Sha1output[5], + Sha1output[6], + Sha1output[7]); + printf(" H2 = [0x%02x%02x%02x%02x] \n\r",Sha1output[8], + Sha1output[9], + Sha1output[10], + Sha1output[11]); + printf(" H3 = [0x%02x%02x%02x%02x] \n\r",Sha1output[12], + Sha1output[13], + Sha1output[14], + Sha1output[15]); + printf(" H4 = [0x%02x%02x%02x%02x] \n\r",Sha1output[16], + Sha1output[17], + Sha1output[18], + Sha1output[19]); +} + +/** + * @brief Display the MD5 digest. + * @param None + * @retval None + */ +void Display_MD5Digest(void) +{ + printf("\n\r ---------------------------------------\n\r"); + printf(" MD5 Message Digest (128 bits):\n\r"); + printf(" ---------------------------------------\n\r"); + printf(" A = [0x%02x%02x%02x%02x] \n\r", Md5output[0], + Md5output[1], + Md5output[2], + Md5output[3]); + printf(" B = [0x%02x%02x%02x%02x] \n\r", Md5output[4], + Md5output[5], + Md5output[6], + Md5output[7]); + printf(" C = [0x%02x%02x%02x%02x] \n\r", Md5output[8], + Md5output[9], + Md5output[10], + Md5output[11]); + printf(" D = [0x%02x%02x%02x%02x] \n\r", Md5output[12], + Md5output[13], + Md5output[14], + Md5output[15]); +} + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + return ch; +} + + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/readme.txt new file mode 100644 index 000000000..e8e3d61fc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/readme.txt @@ -0,0 +1,87 @@ +/** + @page HASH_SHA1_MD5 HASH digest calculation using SHA1 and MD5 example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file HASH/HASH_SHA1_MD5/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the digest calculation using SHA1 and MD5 Example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the HASH peripheral to +hash data using SHA-1 and MD5 Algorithms. + +For this example, no DMA is used for data transfer. + +The SHA-1 message digest result is a 160 bit data and the MD5 message digest result +is a 128 bit data. + +The SHA-1 and MD5 digests can be displayed on a PC HyperTerminal using the USART (CN16). + + +@par Directory contents + - HASH/HASH_SHA1_MD5/system_stm32f2xx.c STM32F2xx system clock configuration file + - HASH/HASH_SHA1_MD5/stm32f2xx_conf.h Library Configuration file + - HASH/HASH_SHA1_MD5/stm32f2xx_it.h Interrupt handlers header file + - HASH/HASH_SHA1_MD5/stm32f2xx_it.c Interrupt handlers + - HASH/HASH_SHA1_MD5/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs only on STM32F21x Devices (Cryptographic acceleration not + embedded in STM32F20x Devices). + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/stm32f2xx_conf.h new file mode 100644 index 000000000..26ef00a1b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/stm32f2xx_conf.h @@ -0,0 +1,87 @@ +/** + ****************************************************************************** + * @file HASH/HASH_SHA1_MD5/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/stm32f2xx_it.c new file mode 100644 index 000000000..245d833d1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/stm32f2xx_it.c @@ -0,0 +1,174 @@ +/** + ****************************************************************************** + * @file HASH/HMAC_SHA1_MD5/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup HASH_SHA1_MD5 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/stm32f2xx_it.h new file mode 100644 index 000000000..ddaa6d166 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file HASH/HASH_SHA1_MD5/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HASH_SHA1_MD5/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/Expected_Results.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/Expected_Results.txt new file mode 100644 index 000000000..4081db8e4 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/Expected_Results.txt @@ -0,0 +1,30 @@ + ====================================== + ==== HMAC Example ==== + ====================================== + + --------------------------------------- + Text to be Hashed ( 2088 bits): + --------------------------------------- +The hash processor is a fully compliant implementation of the secure hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash algorithm and the HMAC (keyed-hash message authentication code) algorithm suitable for a variety of applications.*** STM32 *** + + --------------------------------------- + HMAC Key ( 2088 bits): + --------------------------------------- +The hash processor is a fully compliant implementation of the secure hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash algorithm and the HMAC (keyed-hash message authentication code) algorithm suitable for a variety of applications.*** STM32 *** + + --------------------------------------- + SHA1 Message Digest (160 bits): + --------------------------------------- + H0 = [0x2b47ef34] + H1 = [0xf66658be] + H2 = [0x3b2ac6ec] + H3 = [0x5885f21e] + H4 = [0xd59fddad] + + --------------------------------------- + MD5 Message Digest (128 bits): + --------------------------------------- + A = [0x877ebbbf] + B = [0xc8a9c085] + C = [0x78a2c331] + D = [0xd67ec70e] diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/main.c new file mode 100644 index 000000000..027400cfc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/main.c @@ -0,0 +1,364 @@ +/** + ****************************************************************************** + * @file HASH/HMAC_SHA1_MD5/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stdio.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup HMAC_SHA1_MD5 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define INPUT_TAB_SIZE ((uint32_t) 261) +#define KEY_TAB_SIZE ((uint32_t) 261) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* "The hash processor is a fully compliant implementation of the secure + hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash + algorithm and the HMAC (keyed-hash message authentication code) + algorithm suitable for a variety of applications.*** STM32 ***" + */ +const uint8_t Input[INPUT_TAB_SIZE] = + {0x54,0x68,0x65,0x20,0x68,0x61,0x73,0x68, + 0x20,0x70,0x72,0x6f,0x63,0x65,0x73,0x73, + 0x6f,0x72,0x20,0x69,0x73,0x20,0x61,0x20, + 0x66,0x75,0x6c,0x6c,0x79,0x20,0x63,0x6f, + 0x6d,0x70,0x6c,0x69,0x61,0x6e,0x74,0x20, + 0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e, + 0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x6f, + 0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x65, + 0x63,0x75,0x72,0x65,0x20,0x68,0x61,0x73, + 0x68,0x20,0x61,0x6c,0x67,0x6f,0x72,0x69, + 0x74,0x68,0x6d,0x20,0x28,0x53,0x48,0x41, + 0x2d,0x31,0x29,0x2c,0x20,0x74,0x68,0x65, + 0x20,0x4d,0x44,0x35,0x20,0x28,0x6d,0x65, + 0x73,0x73,0x61,0x67,0x65,0x2d,0x64,0x69, + 0x67,0x65,0x73,0x74,0x20,0x61,0x6c,0x67, + 0x6f,0x72,0x69,0x74,0x68,0x6d,0x20,0x35, + 0x29,0x20,0x68,0x61,0x73,0x68,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x61,0x6e,0x64,0x20,0x74,0x68,0x65, + 0x20,0x48,0x4d,0x41,0x43,0x20,0x28,0x6b, + 0x65,0x79,0x65,0x64,0x2d,0x68,0x61,0x73, + 0x68,0x20,0x6d,0x65,0x73,0x73,0x61,0x67, + 0x65,0x20,0x61,0x75,0x74,0x68,0x65,0x6e, + 0x74,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x63,0x6f,0x64,0x65,0x29,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x73,0x75,0x69,0x74,0x61,0x62,0x6c, + 0x65,0x20,0x66,0x6f,0x72,0x20,0x61,0x20, + 0x76,0x61,0x72,0x69,0x65,0x74,0x79,0x20, + 0x6f,0x66,0x20,0x61,0x70,0x70,0x6c,0x69, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x73,0x2e, + 0x2a,0x2a,0x2a,0x20,0x53,0x54,0x4d,0x33, + 0x32,0x20,0x2a,0x2a,0x2a}; + +/* key = "The hash processor is a fully compliant implementation of the secure + hash algorithm (SHA-1), the MD5 (message-digest algorithm 5) hash algorithm + and the HMAC (keyed-hash message authentication code)algorithm suitable for + a variety of applications.*** STM32 ***" + */ +const uint8_t Key[KEY_TAB_SIZE] = + {0x54,0x68,0x65,0x20,0x68,0x61,0x73,0x68, + 0x20,0x70,0x72,0x6f,0x63,0x65,0x73,0x73, + 0x6f,0x72,0x20,0x69,0x73,0x20,0x61,0x20, + 0x66,0x75,0x6c,0x6c,0x79,0x20,0x63,0x6f, + 0x6d,0x70,0x6c,0x69,0x61,0x6e,0x74,0x20, + 0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e, + 0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x6f, + 0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x65, + 0x63,0x75,0x72,0x65,0x20,0x68,0x61,0x73, + 0x68,0x20,0x61,0x6c,0x67,0x6f,0x72,0x69, + 0x74,0x68,0x6d,0x20,0x28,0x53,0x48,0x41, + 0x2d,0x31,0x29,0x2c,0x20,0x74,0x68,0x65, + 0x20,0x4d,0x44,0x35,0x20,0x28,0x6d,0x65, + 0x73,0x73,0x61,0x67,0x65,0x2d,0x64,0x69, + 0x67,0x65,0x73,0x74,0x20,0x61,0x6c,0x67, + 0x6f,0x72,0x69,0x74,0x68,0x6d,0x20,0x35, + 0x29,0x20,0x68,0x61,0x73,0x68,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x61,0x6e,0x64,0x20,0x74,0x68,0x65, + 0x20,0x48,0x4d,0x41,0x43,0x20,0x28,0x6b, + 0x65,0x79,0x65,0x64,0x2d,0x68,0x61,0x73, + 0x68,0x20,0x6d,0x65,0x73,0x73,0x61,0x67, + 0x65,0x20,0x61,0x75,0x74,0x68,0x65,0x6e, + 0x74,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x63,0x6f,0x64,0x65,0x29,0x20,0x61, + 0x6c,0x67,0x6f,0x72,0x69,0x74,0x68,0x6d, + 0x20,0x73,0x75,0x69,0x74,0x61,0x62,0x6c, + 0x65,0x20,0x66,0x6f,0x72,0x20,0x61,0x20, + 0x76,0x61,0x72,0x69,0x65,0x74,0x79,0x20, + 0x6f,0x66,0x20,0x61,0x70,0x70,0x6c,0x69, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x73,0x2e, + 0x2a,0x2a,0x2a,0x20,0x53,0x54,0x4d,0x33, + 0x32,0x20,0x2a,0x2a,0x2a}; + +uint8_t Md5output[16]; +uint8_t Sha1output[20]; + +/* Private function prototypes -----------------------------------------------*/ +void USART_Config(void); +void Display_MainMessage(void); +void Display_SHA1Digest(void); +void Display_MD5Digest(void); + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ +/*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + /* USART configuration */ + USART_Config(); + /* Enable HASH clock */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE); + + /* Display the original message */ + Display_MainMessage(); +/*============================================================================= + HMAC SHA-1 Digest Computation +==============================================================================*/ + + /* HMAC SHA-1 Digest Computation */ + HMAC_SHA1((uint8_t*)Key, KEY_TAB_SIZE, + (uint8_t*)Input, INPUT_TAB_SIZE, + Sha1output); + + + /* Display the HMAC SHA1 digest */ + Display_SHA1Digest(); + +/*============================================================================= + HMAC MD5 Digest Computation +==============================================================================*/ + + /* HMAC MD5 Digest Computation */ + HMAC_MD5((uint8_t*)Key, KEY_TAB_SIZE, + (uint8_t*)Input, INPUT_TAB_SIZE, + Md5output); + + /* Display the HMAC MD5 digest */ + Display_MD5Digest(); + + while(1); +} + +/** + * @brief Display the original message. + * @param None + * @retval None + */ +void Display_MainMessage(void) +{ + uint32_t i=0; + + printf("\n\r ======================================\n\r"); + printf(" ==== HMAC Example ====\n\r"); + printf(" ======================================\n\r"); + printf(" ---------------------------------------\n\r"); + printf(" Text to be Hashed ( %d bits): \n\r", INPUT_TAB_SIZE*8); + printf(" ---------------------------------------\n\r"); + + for(i = 0; i < INPUT_TAB_SIZE ; i++) + { + printf("%c", Input[i]); + } + printf("\n\r ---------------------------------------\n\r"); + printf(" HMAC Key ( %d bits): \n\r", KEY_TAB_SIZE*8); + printf(" ---------------------------------------\n\r"); + + for(i = 0; i < KEY_TAB_SIZE ; i++) + { + printf("%c", Key[i]); + } + +} + +/** + * @brief Display the SHA-1 digest. + * @param None + * @retval None + */ +void Display_SHA1Digest(void) +{ + __IO uint8_t i=0; + printf("\n\r ---------------------------------------\n\r"); + printf(" SHA1 Message Digest (160 bits):\n\r"); + printf(" ---------------------------------------\n\r"); + printf(" H0 = [0x%02x%02x%02x%02x] \n\r",Sha1output[0], + Sha1output[1], + Sha1output[2], + Sha1output[3]); + printf(" H1 = [0x%02x%02x%02x%02x] \n\r",Sha1output[4], + Sha1output[5], + Sha1output[6], + Sha1output[7]); + printf(" H2 = [0x%02x%02x%02x%02x] \n\r",Sha1output[8], + Sha1output[9], + Sha1output[10], + Sha1output[11]); + printf(" H3 = [0x%02x%02x%02x%02x] \n\r",Sha1output[12], + Sha1output[13], + Sha1output[14], + Sha1output[15]); + printf(" H4 = [0x%02x%02x%02x%02x] \n\r",Sha1output[16], + Sha1output[17], + Sha1output[18], + Sha1output[19]); +} + +/** + * @brief Display the MD5 digest. + * @param None + * @retval None + */ +void Display_MD5Digest(void) +{ + + printf("\n\r ---------------------------------------\n\r"); + printf(" MD5 Message Digest (128 bits): \n\r"); + printf(" ---------------------------------------\n\r"); + printf(" A = [0x%02x%02x%02x%02x] \n\r", Md5output[0], + Md5output[1], + Md5output[2], + Md5output[3]); + printf("\r B = [0x%02x%02x%02x%02x] \n", Md5output[4], + Md5output[5], + Md5output[6], + Md5output[7]); + printf("\r C = [0x%02x%02x%02x%02x] \n", Md5output[8], + Md5output[9], + Md5output[10], + Md5output[11]); + printf("\r D = [0x%02x%02x%02x%02x] \n", Md5output[12], + Md5output[13], + Md5output[14], + Md5output[15]); +} + +/** + * @brief USART configuration + * @param None + * @retval None + */ +void USART_Config(void) +{ + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitTypeDef USART_InitStructure; + + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); +} + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + return ch; +} + + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/readme.txt new file mode 100644 index 000000000..85929ebf0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/readme.txt @@ -0,0 +1,89 @@ +/** + @page HMAC_SHA1_MD5 HMAC digest calculation using HMAC SHA1 and HMAC MD5 example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file HASH/HMAC_SHA1_MD5/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the HMAC digest calculation using HMAC SHA1 and + * HMAC MD5 Example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the HASH peripheral to +hash data using HMAC SHA-1 and HMAC MD5 Algorithms. + +For this example, no DMA is used for data transfer. +The key used is long type (2088 bit data). +The HMAC SHA-1 message digest result is a 160 bit data and the HMAC MD5 message +digest result is a 128 bit data. + +The HMAC SHA-1 and HMAC MD5 digests can be displayed on a PC HyperTerminal using +the USART (CN16). + + +@par Directory contents + - HASH/HMAC_SHA1_MD5/system_stm32f2xx.c STM32F2xx system clock configuration file + - HASH/HMAC_SHA1_MD5/stm32f2xx_conf.h Library Configuration file + - HASH/HMAC_SHA1_MD5/stm32f2xx_it.h Interrupt handlers header file + - HASH/HMAC_SHA1_MD5/stm32f2xx_it.c Interrupt handlers + - HASH/HMAC_SHA1_MD5/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs only on STM32F21x Devices (Cryptographic acceleration not + embedded in STM32F20x Devices). + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/stm32f2xx_conf.h new file mode 100644 index 000000000..167fbcbfc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/stm32f2xx_conf.h @@ -0,0 +1,87 @@ +/** + ****************************************************************************** + * @file HASH/HMAC_SHA1_MD5/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/stm32f2xx_it.c new file mode 100644 index 000000000..91083a94e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file HASH/HMAC_SHA1_MD5/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup HMAC_SHA1_MD5 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/stm32f2xx_it.h new file mode 100644 index 000000000..c3036fd29 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file HASH/HMAC_SHA1_MD5/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/HMAC_SHA1_MD5/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/Expected_Results.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/Expected_Results.txt new file mode 100644 index 000000000..7e72721ab --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/Expected_Results.txt @@ -0,0 +1,29 @@ + ====================================== + ==== HASH Using DMA Example ==== + ====================================== + --------------------------------------- + Text to be Hashed (1024 bits): + --------------------------------------- +Hash processor (HASH) computes a + message digest (128bit for MD5 + and 160bit for SHA-1) for mess +ages of up to (2exp64 � 1) bits +. + + --------------------------------------- + SHA1 Message Digest (160 bits): + --------------------------------------- + H0 = [0xd0640dbf] + H1 = [0x9f30019b] + H2 = [0x205527fb] + H3 = [0x71e35e48] + H4 = [0x9d9524fc] + + + --------------------------------------- + MD5 Message Digest (128 bits): + --------------------------------------- + A = [0x83a44877] + B = [0xb74f8bb4] + C = [0x4e741f1c] + D = [0xe835b673] diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/main.c new file mode 100644 index 000000000..d71ff63db --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/main.c @@ -0,0 +1,378 @@ +/** + ****************************************************************************** + * @file HASH/SHA1_MD5_DMA/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stdio.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SHA1_MD5_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define SIZE_MSG_TO_HASH_IN_BITS (512 * 2) +#define SIZE_MSG_TO_HASH_IN_BYTES (SIZE_MSG_TO_HASH_IN_BITS / 8) +#define SIZE_MSG_TO_HASH_IN_WORDS (SIZE_MSG_TO_HASH_IN_BITS / 32) +#define HASH_DIN_REG_ADDR ((uint32_t)0x50060404) /* HASH DIN register address */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +HASH_MsgDigest MsgDigest; + +uint8_t MessageToHash[SIZE_MSG_TO_HASH_IN_BYTES]= +"Hash processor (HASH) computes a message digest (128bit for MD5 and 160bit for \ +SHA-1) for messages of up to (2exp64 � 1) bits."; + +/* Private function prototypes -----------------------------------------------*/ +void HASH_SHA1_DMA(void); +void HASH_MD5_DMA(void); + +void Display_MainMessage(void); +void Display_SHA1Digest(void); +void Display_MD5Digest(void); + +void USART_Config(void); +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ +/*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* USART configuration */ + USART_Config(); + + /* Enable HASH and DMA clocks */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + /* Display the original message */ + Display_MainMessage(); + +/*============================================================================= + SHA-1 Digest Computation +==============================================================================*/ + /* HASH SHA-1 Digest computation (using DMA for data transfer) */ + HASH_SHA1_DMA(); + + /* Display the SHA1 digest */ + Display_SHA1Digest(); + +/*============================================================================= + MD5 Digest Computation +==============================================================================*/ + /* HASH MD5 Digest computation (using DMA for data transfer) */ + HASH_MD5_DMA(); + + /* Display the MD5 digest */ + Display_MD5Digest(); + + while(1); +} + +/** + * @brief HASH SHA-1 Digest computation (using DMA for data transfer) + * @note DMA2 stream7 channel2 is used to transfer data from memory + * (MessageToHash[] array) to HASH Peripheral (the INPUT data register). + * @param None + * @retval None + */ +void HASH_SHA1_DMA(void) +{ + HASH_InitTypeDef HASH_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /* HASH Configuration */ + HASH_StructInit(&HASH_InitStructure); + HASH_InitStructure.HASH_AlgoSelection = HASH_AlgoSelection_SHA1; + HASH_InitStructure.HASH_AlgoMode = HASH_AlgoMode_HASH; + HASH_InitStructure.HASH_DataType = HASH_DataType_32b; + HASH_Init(&HASH_InitStructure); + + /*DMA Configuration*/ + DMA_DeInit(DMA2_Stream7); + DMA_InitStructure.DMA_Channel = DMA_Channel_2; + DMA_InitStructure.DMA_PeripheralBaseAddr = HASH_DIN_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MessageToHash; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = SIZE_MSG_TO_HASH_IN_WORDS; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + + /* Configure the DMA Stream */ + DMA_Init(DMA2_Stream7, &DMA_InitStructure); + + /* Enable HASH DMA */ + HASH_DMACmd(ENABLE); + + /* Enable DMA2 Transfer */ + DMA_Cmd(DMA2_Stream7, ENABLE); + + /* Note : When the DMA is enabled, it provides the information to the hash + processor when it is transferring the last data word. Then the + padding and digest computation are performed automatically as if + DCAL had been written to 1.*/ + + /* Wait until DMA Transfer completed */ + while (DMA_GetFlagStatus(DMA2_Stream7, DMA_FLAG_TCIF7) == RESET); + + /* Wait until the Busy flag is RESET */ + while (HASH_GetFlagStatus(HASH_FLAG_BUSY) != RESET); + + /* Get the SHA-1 Digest */ + HASH_GetDigest(&MsgDigest); +} + + +/** + * @brief HASH MD5 Digest computation (using DMA for data transfer) + * @note DMA2 stream7 channel2 is used to transfer data from memory + * (MessageToHash[] array) to HASH Peripheral (the INPUT data register). + * @param None + * @retval None + */ +void HASH_MD5_DMA(void) +{ + HASH_InitTypeDef HASH_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /* HASH Configuration */ + HASH_InitStructure.HASH_AlgoSelection = HASH_AlgoSelection_MD5; + HASH_InitStructure.HASH_AlgoMode = HASH_AlgoMode_HASH; + HASH_InitStructure.HASH_DataType = HASH_DataType_32b; + HASH_InitStructure.HASH_HMACKeyType = HASH_HMACKeyType_ShortKey; + HASH_Init(&HASH_InitStructure); + + /*DMA Configuration*/ + DMA_DeInit(DMA2_Stream7); + DMA_InitStructure.DMA_Channel = DMA_Channel_2; + DMA_InitStructure.DMA_PeripheralBaseAddr = HASH_DIN_REG_ADDR; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MessageToHash; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = SIZE_MSG_TO_HASH_IN_WORDS; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + + /* Configure the DMA Stream */ + DMA_Init(DMA2_Stream7, &DMA_InitStructure); + + /* Enable HASH DMA */ + HASH_DMACmd(ENABLE); + + /* Enable DMA2 Transfer */ + DMA_Cmd(DMA2_Stream7, ENABLE); + + /* Note : When the DMA is enabled, it provides the information to the hash + processor when it is transferring the last data word. Then the + padding and digest computation are performed automatically as if + DCAL had been written to 1.*/ + + /* wait until DMA Transfer completed */ + while (DMA_GetFlagStatus(DMA2_Stream7, DMA_FLAG_TCIF7) == RESET); + + /* wait until the Busy flag is RESET */ + while (HASH_GetFlagStatus(HASH_FLAG_BUSY) != RESET); + + /* Get the MD5 Digest */ + HASH_GetDigest(&MsgDigest); +} +/** + * @brief Display the original message. + * @param None + * @retval None + */ +void Display_MainMessage(void) +{ + uint32_t BufferCounter=0; + + printf("\n\r ======================================\n\r"); + printf(" ==== HASH Using DMA Example ====\n\r"); + printf(" ======================================\n\r"); + printf(" ---------------------------------------\n\r"); + printf(" Text to be Hashed (%d bits):\n\r", SIZE_MSG_TO_HASH_IN_BYTES*8); + printf(" ---------------------------------------\n\r"); + + for(BufferCounter = 0; BufferCounter ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs only on STM32F21x Devices (Cryptographic acceleration not + embedded in STM32F20x Devices). + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/stm32f2xx_conf.h new file mode 100644 index 000000000..193444669 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file HASH/SHA1_MD5_DMA/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/stm32f2xx_it.c new file mode 100644 index 000000000..6440f7d26 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file HASH/SHA1_MD5_DMA/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SHA1_MD5_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/stm32f2xx_it.h new file mode 100644 index 000000000..789f3f041 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file HASH/SHA1_MD5_DMA/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/HASH/SHA1_MD5_DMA/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/main.c new file mode 100644 index 000000000..14a5b245f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/main.c @@ -0,0 +1,324 @@ +/** + ****************************************************************************** + * @file I2C/EEPROM/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_i2c_ee.h" +#include "stm322xg_eval_lcd.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2C_EEPROM + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Private define ------------------------------------------------------------*/ +/* Uncomment the following line to enable using LCD screen for messages display */ +#define ENABLE_LCD_MSG_DISPLAY + +#define sEE_WRITE_ADDRESS1 0x50 +#define sEE_READ_ADDRESS1 0x50 +#define BUFFER_SIZE1 (countof(Tx1_Buffer)-1) +#define BUFFER_SIZE2 (countof(Tx2_Buffer)-1) +#define sEE_WRITE_ADDRESS2 (sEE_WRITE_ADDRESS1 + BUFFER_SIZE1) +#define sEE_READ_ADDRESS2 (sEE_READ_ADDRESS1 + BUFFER_SIZE1) + +/* Private macro -------------------------------------------------------------*/ +#define countof(a) (sizeof(a) / sizeof(*(a))) + +/* Private variables ---------------------------------------------------------*/ +uint8_t Tx1_Buffer[] = "/* STM32F20xx I2C Firmware Library EEPROM driver example: \ + buffer 1 transfer into address sEE_WRITE_ADDRESS1 */ \ + Example Description \ + This firmware provides a basic example of how to use the I2C firmware library and\ + an associate I2C EEPROM driver to communicate with an I2C EEPROM device (here the\ + example is interfacing with M24C64 EEPROM)\ + \ + I2C peripheral is configured in Master transmitter during write operation and in\ + Master receiver during read operation from I2C EEPROM. \ + \ + The peripheral used is I2C1 but can be configured by modifying the defines values\ + in stm322xg_eval.h file. The speed is set to 100kHz and can be configured by \ + modifying the relative define in stm32_eval_i2c_ee.h file.\ + \ + For M24C64 devices all the memory is accessible through the two-bytes \ + addressing mode and need to define block addresses. In this case, only the physical \ + address has to be defined (according to the address pins (E0,E1 and E2) connection).\ + This address is defined in i2c_ee.h (default is 0xA0: E0, E1 and E2 tied to ground).\ + The EEPROM addresses where the program start the write and the read operations \ + is defined in the main.c file. \ + \ + First, the content of Tx1_Buffer is written to the EEPROM_WriteAddress1 and the\ + written data are read. The written and the read buffers data are then compared.\ + Following the read operation, the program waits that the EEPROM reverts to its \ + Standby state. A second write operation is, then, performed and this time, Tx2_Buffer\ + is written to EEPROM_WriteAddress2, which represents the address just after the last \ + written one in the first write. After completion of the second write operation, the \ + written data are read. The contents of the written and the read buffers are compared.\ + \ + All transfers are managed in DMA mode (except when 1-byte read/write operation is\ + required). Once sEE_ReadBuffer() or sEE_WriteBuffer() function is called, the \ + use application may perform other tasks in parallel while Read/Write operation is\ + managed by DMA.\ + \ + This example provides the possibility to use the STM322xG-EVAL LCD screen for\ + messages display (transfer status: Ongoing, PASSED, FAILED).\ + To enable this option uncomment the define ENABLE_LCD_MSG_DISPLAY in the main.c\ + file. "; +uint8_t Tx2_Buffer[] = "/* STM32F20xx I2C Firmware Library EEPROM driver example: \ + buffer 2 transfer into address sEE_WRITE_ADDRESS2 */"; +uint8_t Rx1_Buffer[BUFFER_SIZE1], Rx2_Buffer[BUFFER_SIZE2]; +volatile TestStatus TransferStatus1 = FAILED, TransferStatus2 = FAILED; +volatile uint16_t NumDataRead = 0; + +/* Private functions ---------------------------------------------------------*/ +TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + +#ifdef ENABLE_LCD_MSG_DISPLAY + /* Initialize the LCD screen for information display */ + STM322xG_LCD_Init(); + LCD_Clear(LCD_COLOR_BLUE); + LCD_SetBackColor(LCD_COLOR_BLUE); + LCD_SetTextColor(LCD_COLOR_WHITE); + LCD_DisplayStringLine(LCD_LINE_0, (uint8_t *)"SMT32F2xx FW Library"); + LCD_DisplayStringLine(LCD_LINE_1, (uint8_t *)" EEPROM Example "); +#endif /* ENABLE_LCD_MSG_DISPLAY */ + + /* Initialize the I2C EEPROM driver ----------------------------------------*/ + sEE_Init(); + + /* First write in the memory followed by a read of the written data --------*/ + /* Write on I2C EEPROM from sEE_WRITE_ADDRESS1 */ + sEE_WriteBuffer(Tx1_Buffer, sEE_WRITE_ADDRESS1, BUFFER_SIZE1); + + /* Wait for EEPROM standby state */ + sEE_WaitEepromStandbyState(); + + /* Set the Number of data to be read */ + NumDataRead = BUFFER_SIZE1; + + /* Read from I2C EEPROM from sEE_READ_ADDRESS1 */ + sEE_ReadBuffer(Rx1_Buffer, sEE_READ_ADDRESS1, (uint16_t *)(&NumDataRead)); + + + /* Starting from this point, if the requested number of data is higher than 1, + then only the DMA is managing the data transfer. Meanwhile, CPU is free to + perform other tasks: + + // Add your code here: + //... + //... + + For simplicity reasons, this example is just waiting till the end of the + transfer. */ + +#ifdef ENABLE_LCD_MSG_DISPLAY + LCD_DisplayStringLine(LCD_LINE_3, (uint8_t *)" Transfer 1 Ongoing "); +#endif /* ENABLE_LCD_MSG_DISPLAY */ + + /* Wait till DMA transfer is complete (Transfer complete interrupt handler + resets the variable holding the number of data to be read) */ + while (NumDataRead > 0) + {} + + /* Check if the data written to the memory is read correctly */ + TransferStatus1 = Buffercmp(Tx1_Buffer, Rx1_Buffer, BUFFER_SIZE1); + /* TransferStatus1 = PASSED, if the transmitted and received data + to/from the EEPROM are the same */ + /* TransferStatus1 = FAILED, if the transmitted and received data + to/from the EEPROM are different */ +#ifdef ENABLE_LCD_MSG_DISPLAY + if (TransferStatus1 == PASSED) + { + LCD_DisplayStringLine(LCD_LINE_3, (uint8_t *)" Transfer 1 PASSED "); + } + else + { + LCD_DisplayStringLine(LCD_LINE_3, (uint8_t *)" Transfer 1 FAILED "); + } +#endif /* ENABLE_LCD_MSG_DISPLAY */ + + /* Second write in the memory followed by a read of the written data -------*/ + /* Write on I2C EEPROM from sEE_WRITE_ADDRESS2 */ + sEE_WriteBuffer(Tx2_Buffer, sEE_WRITE_ADDRESS2, BUFFER_SIZE2); + + /* Wait for EEPROM standby state */ + sEE_WaitEepromStandbyState(); + + /* Set the Number of data to be read */ + NumDataRead = BUFFER_SIZE2; + + /* Read from I2C EEPROM from sEE_READ_ADDRESS2 */ + sEE_ReadBuffer(Rx2_Buffer, sEE_READ_ADDRESS2, (uint16_t *)(&NumDataRead)); + + + /* Starting from this point, if the requested number of data is higher than 1, + then only the DMA is managing the data transfer. Meanwhile, CPU is free to + perform other tasks: + + // Add your code here: + //... + //... + + For simplicity reasons, this example is just waiting till the end of the + transfer. */ + +#ifdef ENABLE_LCD_MSG_DISPLAY + LCD_DisplayStringLine(LCD_LINE_5, (uint8_t *)" Transfer 2 Ongoing "); +#endif /* ENABLE_LCD_MSG_DISPLAY */ + + /* Wait till DMA transfer is complete (Transfer complete interrupt handler + resets the variable holding the number of data to be read) */ + while (NumDataRead > 0) + {} + + /* Check if the data written to the memory is read correctly */ + TransferStatus2 = Buffercmp(Tx2_Buffer, Rx2_Buffer, BUFFER_SIZE2); + /* TransferStatus2 = PASSED, if the transmitted and received data + to/from the EEPROM are the same */ + /* TransferStatus2 = FAILED, if the transmitted and received data + to/from the EEPROM are different */ +#ifdef ENABLE_LCD_MSG_DISPLAY + if (TransferStatus1 == PASSED) + { + LCD_DisplayStringLine(LCD_LINE_5, (uint8_t *)" Transfer 2 PASSED "); + } + else + { + LCD_DisplayStringLine(LCD_LINE_5, (uint8_t *)" Transfer 2 FAILED "); + } +#endif /* ENABLE_LCD_MSG_DISPLAY */ + + /* Free all used resources */ + sEE_DeInit(); + + while (1) + { + } +} + +#ifndef USE_DEFAULT_TIMEOUT_CALLBACK +/** + * @brief Example of timeout situation management. + * @param None. + * @retval None. + */ +uint32_t sEE_TIMEOUT_UserCallback(void) +{ + /* Use application may try to recover the communication by resetting I2C + peripheral (calling the function I2C_SoftwareResetCmd()) then restart + the transmission/reception from a previously stored recover point. + For simplicity reasons, this example only shows a basic way for errors + managements which consists of stopping all the process and requiring system + reset. */ + +#ifdef ENABLE_LCD_MSG_DISPLAY + /* Display error message on screen */ + LCD_Clear(LCD_COLOR_RED); + LCD_DisplayStringLine(LCD_LINE_4, (uint8_t *)"Communication ERROR!"); + LCD_DisplayStringLine(LCD_LINE_5, (uint8_t *)"Try again after res-"); + LCD_DisplayStringLine(LCD_LINE_6, (uint8_t *)" etting the Board "); +#endif /* ENABLE_LCD_MSG_DISPLAY */ + + /* Block communication and all processes */ + while (1) + { + } +} +#endif /* USE_DEFAULT_TIMEOUT_CALLBACK */ + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength) +{ + while(BufferLength--) + { + if(*pBuffer1 != *pBuffer2) + { + return FAILED; + } + + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/readme.txt new file mode 100644 index 000000000..8d769b489 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/readme.txt @@ -0,0 +1,107 @@ +/** + @page I2C_EEPROM How to use the I2C to drive an EEPROM memory + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file I2C/EEPROM/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the I2C and M24CXX EEPROM communication example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This firmware provides a basic example of how to use the I2C firmware library and +an associate I2C EEPROM driver to communicate with an I2C EEPROM device (here the +example is interfacing with M24C64 EEPROM) + +I2C peripheral is configured in Master transmitter during write operation and in +Master receiver during read operation from I2C EEPROM. + +The peripheral used is I2C1 but can be configured by modifying the defines values +in stm322xg_eval.h file. The speed is set to 100kHz and can be configured by +modifying the relative define in stm322xg_eval_i2c_ee.h file. + +For M24C64 devices all the memory is accessible through the two-bytes +addressing mode and need to define block addresses. In this case, only the physical +address has to be defined (according to the address pins (E0,E1 and E2) connection). +This address is defined in stm322xg_eval_i2c_ee.h (default is 0xA0: E0, E1 and E2 +tied to ground). +The EEPROM addresses where the program start the write and the read operations +is defined in the main.c file. + +First, the content of Tx1_Buffer is written to the EEPROM_WriteAddress1 and the +written data are read. The written and the read buffers data are then compared. +Following the read operation, the program waits that the EEPROM reverts to its +Standby state. A second write operation is, then, performed and this time, Tx2_Buffer +is written to EEPROM_WriteAddress2, which represents the address just after the last +written one in the first write. After completion of the second write operation, the +written data are read. The contents of the written and the read buffers are compared. + +All transfers are managed in DMA mode (except when 1-byte read/write operation is +required). Once sEE_ReadBuffer() or sEE_WriteBuffer() function is called, the +use application may perform other tasks in parallel while Read/Write operation is +managed by DMA. + +This example provides the possibility to use the STM322xG-EVAL LCD screen for +messages display (transfer status: Ongoing, PASSED, FAILED). +To enable this option uncomment the define ENABLE_LCD_MSG_DISPLAY in the main.c +file. + + +@par Directory contents + + - I2C/EEPROM/system_stm32f2xx.c STM32F2xx system clock configuration file + - I2C/EEPROM/stm32f2xx_conf.h Library Configuration file + - I2C/EEPROM/stm32f2xx_it.c Interrupt handlers + - I2C/EEPROM/stm32f2xx_it.h Interrupt handlers header file + - I2C/EEPROM/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB (with no additional + hardware), and can be easily tailored to any other development board. + + - STM322xG-EVAL Set-up + - Make sure the jumper JP24 "WP" is fitted on the board. + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Add the "stm322xg_eval_i2c_ee.c" file (under Utilities\STM32_EVAL\STM322xG_EVAL) + to the project source list + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/stm32f2xx_conf.h new file mode 100644 index 000000000..4808bf823 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file I2C/EEPROM/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/stm32f2xx_it.c new file mode 100644 index 000000000..724f84a1b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file I2C/EEPROM/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2C_EEPROM + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/stm32f2xx_it.h new file mode 100644 index 000000000..0f540ebb8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file I2C/EEPROM/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/EEPROM/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/main.c new file mode 100644 index 000000000..6815ee75f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/main.c @@ -0,0 +1,726 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeDMA/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2C_DataExchangeDMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +uint8_t HEADER_ADDRESS_Write = (((SLAVE_ADDRESS & 0xFF00) >> 7) | 0xF0); +uint8_t HEADER_ADDRESS_Read = (((SLAVE_ADDRESS & 0xFF00) >> 7) | 0xF1); +#define countof(a) (sizeof(a) / sizeof(*(a))) + +/* Private variables ---------------------------------------------------------*/ +I2C_InitTypeDef I2C_InitStructure; +DMA_InitTypeDef DMA_InitStructure; +uint8_t TxBuffer[] = "I2C DMA Example: Communication between two I2C using DMA"; +uint8_t RxBuffer [256]; +__IO uint32_t TimeOut = 0x0; +RCC_ClocksTypeDef RCC_Clocks; + +/* Private function prototypes -----------------------------------------------*/ +static void I2C_Config(void); +static void SysTickConfig(void); +static void TimeOut_UserCallback(void); +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /* At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* I2C configuration ---------------------------------------------------------*/ + I2C_Config(); + + /* Initialize LEDs mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* SysTick configuration -----------------------------------------------------*/ + SysTickConfig(); + + /* Clear the RxBuffer */ + Fill_Buffer(RxBuffer, RXBUFFERSIZE); + + /*************************************Master Code******************************/ +#if defined (I2C_MASTER) + + /* I2C Struct Initialize */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE; + I2C_InitStructure.I2C_OwnAddress1 = 0xA0; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + +#ifndef I2C_10BITS_ADDRESS + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +#else + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_10bit; +#endif /* I2C_10BITS_ADDRESS */ + + /* I2C Initialize */ + I2C_Init(I2Cx, &I2C_InitStructure); + + /* Master Transmitter --------------------------------------------------------*/ + + /* Generate the Start condition */ + I2C_GenerateSTART(I2Cx, ENABLE); + +#ifdef I2C_10BITS_ADDRESS + /* Test on I2C1 EV5 and clear it */ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Send Header to I2Cx for write or time out */ + I2C_SendData(I2Cx, HEADER_ADDRESS_Write); + /* Test on I2Cx EV9 and clear it */ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_ADDRESS10))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Send I2Cx slave Address for write */ + I2C_Send7bitAddress(I2Cx, (uint8_t)SLAVE_ADDRESS, I2C_Direction_Transmitter); + + #else /* I2C_7BITS_ADDRESS */ + + /* Test on I2Cx EV5 and clear it or time out */ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Send I2Cx slave Address for write */ + I2C_Send7bitAddress(I2Cx, SLAVE_ADDRESS, I2C_Direction_Transmitter); + +#endif /* I2C_10BITS_ADDRESS */ + + /* Test on I2Cx EV6 and clear it or time out */ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* I2Cx DMA Enable */ + I2C_DMACmd(I2Cx, ENABLE); + + /* Enable DMA TX Channel */ + DMA_Cmd(I2Cx_DMA_STREAM_TX, ENABLE); + + /* Wait until I2Cx_DMA_STREAM_TX enabled or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetCmdStatus(I2Cx_DMA_STREAM_TX)!= ENABLE)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Wait until DMA Transfer Complete or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetFlagStatus(I2Cx_DMA_STREAM_TX,I2Cx_TX_DMA_TCFLAG) == RESET)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* I2Cx DMA Disable */ + I2C_DMACmd(I2Cx, DISABLE); + + /* Wait until BTF Flag is set before generating STOP or time out */ + TimeOut = USER_TIMEOUT; + while ((!I2C_GetFlagStatus(I2Cx,I2C_FLAG_BTF))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Send I2Cx STOP Condition */ + I2C_GenerateSTOP(I2Cx, ENABLE); + + /* Disable DMA TX Channel */ + DMA_Cmd(I2Cx_DMA_STREAM_TX, DISABLE); + + /* Wait until I2Cx_DMA_STREAM_TX disabled or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetCmdStatus(I2Cx_DMA_STREAM_TX)!= DISABLE)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Clear any pending flag on Tx Stream */ + DMA_ClearFlag(I2Cx_DMA_STREAM_TX, I2Cx_TX_DMA_TCFLAG | I2Cx_TX_DMA_FEIFLAG | I2Cx_TX_DMA_DMEIFLAG | \ + I2Cx_TX_DMA_TEIFLAG | I2Cx_TX_DMA_HTIFLAG); + + /* Master Receiver -----------------------------------------------------------*/ + + /* Enable DMA NACK automatic generation */ + I2C_DMALastTransferCmd(I2Cx, ENABLE); + + /* Send I2Cx START condition */ + I2C_GenerateSTART(I2Cx, ENABLE); + +#ifdef I2C_10BITS_ADDRESS + /* Test on EV5 and clear it or time out */ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Send Header to Slave for write */ + I2C_SendData(I2Cx, HEADER_ADDRESS_Write); + + /* Test on EV9 and clear it or time out */ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_ADDRESS10))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Send slave Address */ + I2C_Send7bitAddress(I2Cx, (uint8_t)SLAVE_ADDRESS, I2C_Direction_Transmitter); + + /* Test on I2Cx EV6 and clear it or time out*/ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Repeated Start */ + I2C_GenerateSTART(I2Cx, ENABLE); + + /* Test on EV5 and clear it or time out*/ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Send Header to Slave for Read */ + I2C_SendData(I2Cx, HEADER_ADDRESS_Read); + +#else /* I2C_7BITS_ADDRESS */ + + /* Test on I2Cx EV5 and clear it or time out*/ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Send I2Cx slave Address for write */ + I2C_Send7bitAddress(I2Cx, SLAVE_ADDRESS, I2C_Direction_Receiver); + +#endif /* I2C_10BITS_ADDRESS */ + + /* Test on I2Cx EV6 and clear it or time out */ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* I2Cx DMA Enable */ + I2C_DMACmd(I2Cx, ENABLE); + + /* Enable DMA RX Channel */ + DMA_Cmd(I2Cx_DMA_STREAM_RX, ENABLE); + + /* Wait until I2Cx_DMA_STREAM_RX enabled or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetCmdStatus(I2Cx_DMA_STREAM_RX)!= ENABLE)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Transfer complete or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetFlagStatus(I2Cx_DMA_STREAM_RX,I2Cx_RX_DMA_TCFLAG)==RESET)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Send I2Cx STOP Condition */ + I2C_GenerateSTOP(I2Cx, ENABLE); + + /* Disable DMA RX Channel */ + DMA_Cmd(I2Cx_DMA_STREAM_RX, DISABLE); + + /* Wait until I2Cx_DMA_STREAM_RX disabled or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetCmdStatus(I2Cx_DMA_STREAM_RX)!= DISABLE)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Disable I2C DMA request */ + I2C_DMACmd(I2Cx,DISABLE); + + /* Clear any pending flag on Rx Stream */ + DMA_ClearFlag(I2Cx_DMA_STREAM_RX, I2Cx_RX_DMA_TCFLAG | I2Cx_RX_DMA_FEIFLAG | I2Cx_RX_DMA_DMEIFLAG | \ + I2Cx_RX_DMA_TEIFLAG | I2Cx_RX_DMA_HTIFLAG); + + if (Buffercmp(TxBuffer, RxBuffer, RXBUFFERSIZE) == PASSED) + { + /* LED2, LED3 and LED4 Toggle */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + else + { /* ED2, LED3 and LED4 On */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } + +#endif /* I2C_MASTER */ + +/**********************************Slave Code**********************************/ +#if defined (I2C_SLAVE) + + /* Initialize I2C peripheral */ + /* I2C Init */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE; + I2C_InitStructure.I2C_OwnAddress1 = SLAVE_ADDRESS; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + +#ifndef I2C_10BITS_ADDRESS + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +#else + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_10bit; +#endif /* I2C_10BITS_ADDRESS */ + + I2C_Init(I2Cx, &I2C_InitStructure); + + /* Slave Receiver ------------------------------------------------------------*/ + + /* Test on I2C EV1 and clear it */ + while (!I2C_CheckEvent(I2Cx, I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED)) + {} + + /* I2Cx DMA Enable */ + I2C_DMACmd(I2Cx, ENABLE); + + /* Enable DMA RX Channel */ + DMA_Cmd(I2Cx_DMA_STREAM_RX, ENABLE); + + /* Wait until I2Cx_DMA_STREAM_RX enabled or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetCmdStatus(I2Cx_DMA_STREAM_RX)!= ENABLE)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Transfer complete or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetFlagStatus(I2Cx_DMA_STREAM_RX,I2Cx_RX_DMA_TCFLAG)==RESET)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Test on I2Cx EV4 and clear it or time out */ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_SLAVE_STOP_DETECTED))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* Disable DMA RX Channel */ + DMA_Cmd(I2Cx_DMA_STREAM_RX, DISABLE); + + /* Wait until I2Cx_DMA_STREAM_RX disabled or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetCmdStatus(I2Cx_DMA_STREAM_RX)!= DISABLE)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Disable I2C DMA request */ + I2C_DMACmd(I2Cx,DISABLE); + + /* Clear any pending flag on Rx Stream */ + DMA_ClearFlag(I2Cx_DMA_STREAM_RX, I2Cx_RX_DMA_TCFLAG | I2Cx_RX_DMA_FEIFLAG | I2Cx_RX_DMA_DMEIFLAG | \ + I2Cx_RX_DMA_TEIFLAG | I2Cx_RX_DMA_HTIFLAG); + +/* Slave Transmitter ---------------------------------------------------------*/ + + /* Test on I2C EV1 and clear it or time out*/ + while (!I2C_CheckEvent(I2Cx, I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED)) + {} + /* I2Cx DMA Enable */ + I2C_DMACmd(I2Cx, ENABLE); + + /* Enable DMA RX Channel */ + DMA_Cmd(I2Cx_DMA_STREAM_TX, ENABLE); + + /* Wait until I2Cx_DMA_STREAM_TX enabled or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetCmdStatus(I2Cx_DMA_STREAM_TX)!= ENABLE)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Transfer complete or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetFlagStatus(I2Cx_DMA_STREAM_TX,I2Cx_TX_DMA_TCFLAG)==RESET)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Test on I2Cx EV3-2 and clear it or time out */ + TimeOut = USER_TIMEOUT; + while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_SLAVE_ACK_FAILURE))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Disable DMA TX Channel */ + DMA_Cmd(I2Cx_DMA_STREAM_TX, DISABLE); + + /* Wait until I2Cx_DMA_STREAM_TX disabled or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetCmdStatus(I2Cx_DMA_STREAM_TX)!= DISABLE)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Disable I2C DMA request */ + I2C_DMACmd(I2Cx,DISABLE); + + /* Clear any pending flag on Tx Stream */ + DMA_ClearFlag(I2Cx_DMA_STREAM_TX, I2Cx_TX_DMA_TCFLAG | I2Cx_TX_DMA_FEIFLAG | I2Cx_TX_DMA_DMEIFLAG | \ + I2Cx_TX_DMA_TEIFLAG | I2Cx_TX_DMA_HTIFLAG); + + if (Buffercmp(TxBuffer, RxBuffer, RXBUFFERSIZE) == PASSED) + { + /* LED2, LED3 and LED4 are On */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + else + { /* LED2, LED3 and LED4 are Off */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } + +#endif /* I2C_SLAVE */ + while(1) + {} +} + +/** + * @brief Enables the I2C Clock and configures the different GPIO ports. + * @param None + * @retval None + */ +static void I2C_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* RCC Configuration */ + /*I2C Peripheral clock enable */ + RCC_APB1PeriphClockCmd(I2Cx_CLK, ENABLE); + + /*SDA GPIO clock enable */ + RCC_AHB1PeriphClockCmd(I2Cx_SDA_GPIO_CLK, ENABLE); + + /*SCL GPIO clock enable */ + RCC_AHB1PeriphClockCmd(I2Cx_SCL_GPIO_CLK, ENABLE); + + /* Reset I2Cx IP */ + RCC_APB1PeriphResetCmd(I2Cx_CLK, ENABLE); + + /* Release reset signal of I2Cx IP */ + RCC_APB1PeriphResetCmd(I2Cx_CLK, DISABLE); + + /* Enable the DMA clock */ + RCC_AHB1PeriphClockCmd(DMAx_CLK, ENABLE); + + /* GPIO Configuration */ + /*Configure I2C SCL pin */ + GPIO_InitStructure.GPIO_Pin = I2Cx_SCL_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(I2Cx_SCL_GPIO_PORT, &GPIO_InitStructure); + + /*Configure I2C SDA pin */ + GPIO_InitStructure.GPIO_Pin = I2Cx_SDA_PIN; + GPIO_Init(I2Cx_SDA_GPIO_PORT, &GPIO_InitStructure); + + /* Connect PXx to I2C_SCL */ + GPIO_PinAFConfig(I2Cx_SCL_GPIO_PORT, I2Cx_SCL_SOURCE, I2Cx_SCL_AF); + + /* Connect PXx to I2C_SDA */ + GPIO_PinAFConfig(I2Cx_SDA_GPIO_PORT, I2Cx_SDA_SOURCE, I2Cx_SDA_AF); + + /* DMA Configuration */ + /* Clear any pending flag on Tx Stream */ + DMA_ClearFlag(I2Cx_DMA_STREAM_TX, I2Cx_TX_DMA_TCFLAG | I2Cx_TX_DMA_FEIFLAG | I2Cx_TX_DMA_DMEIFLAG | \ + I2Cx_TX_DMA_TEIFLAG | I2Cx_TX_DMA_HTIFLAG); + + /* Clear any pending flag on Rx Stream */ + DMA_ClearFlag(I2Cx_DMA_STREAM_RX, I2Cx_RX_DMA_TCFLAG | I2Cx_RX_DMA_FEIFLAG | I2Cx_RX_DMA_DMEIFLAG | \ + I2Cx_RX_DMA_TEIFLAG | I2Cx_RX_DMA_HTIFLAG); + + /* Disable the I2C Tx DMA stream */ + DMA_Cmd(I2Cx_DMA_STREAM_TX, DISABLE); + /* Configure the DMA stream for the I2C peripheral TX direction */ + DMA_DeInit(I2Cx_DMA_STREAM_TX); + + /* Disable the I2C Rx DMA stream */ + DMA_Cmd(I2Cx_DMA_STREAM_RX, DISABLE); + /* Configure the DMA stream for the I2C peripheral RX direction */ + DMA_DeInit(I2Cx_DMA_STREAM_RX); + + /* Initialize the DMA_Channel member */ + DMA_InitStructure.DMA_Channel = I2Cx_DMA_CHANNEL; + + /* Initialize the DMA_PeripheralBaseAddr member */ + DMA_InitStructure.DMA_PeripheralBaseAddr = I2Cx_DR_ADDRESS; + + /* Initialize the DMA_PeripheralInc member */ + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + + /* Initialize the DMA_MemoryInc member */ + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + + /* Initialize the DMA_PeripheralDataSize member */ + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + + /* Initialize the DMA_MemoryDataSize member */ + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + + /* Initialize the DMA_Mode member */ + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + + /* Initialize the DMA_Priority member */ + DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + + /* Initialize the DMA_FIFOMode member */ + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + + /* Initialize the DMA_FIFOThreshold member */ + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + + /* Initialize the DMA_MemoryBurst member */ + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + + /* Initialize the DMA_PeripheralBurst member */ + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + + /* Init DMA for Reception */ + /* Initialize the DMA_DIR member */ + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + /* Initialize the DMA_Memory0BaseAddr member */ + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)RxBuffer; + /* Initialize the DMA_BufferSize member */ + DMA_InitStructure.DMA_BufferSize = RXBUFFERSIZE; + DMA_DeInit(I2Cx_DMA_STREAM_RX); + DMA_Init(I2Cx_DMA_STREAM_RX, &DMA_InitStructure); + + /* Init DMA for Transmission */ + /* Initialize the DMA_DIR member */ + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + /* Initialize the DMA_Memory0BaseAddr member */ + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)TxBuffer; + /* Initialize the DMA_BufferSize member */ + DMA_InitStructure.DMA_BufferSize = TXBUFFERSIZE; + DMA_DeInit(I2Cx_DMA_STREAM_TX); + DMA_Init(I2Cx_DMA_STREAM_TX, &DMA_InitStructure); + + /* I2C ENABLE */ + I2C_Cmd(I2Cx, ENABLE); +} + +/** + * @brief Configure a SysTick Base time to 10 ms. + * @param None + * @retval None + */ +static void SysTickConfig(void) +{ + /* SysTick end of count event each 10ms */ + RCC_GetClocksFreq(&RCC_Clocks); + SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); + + /* Configure the SysTick handler priority */ + NVIC_SetPriority(SysTick_IRQn, 0x0); +} + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return FAILED; + } + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} + +/** + * @brief Fills buffer. + * @param pBuffer: pointer on the Buffer to fill + * @param BufferLength: size of the buffer to fill + * @retval None + */ +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength) +{ + uint16_t index = 0; + + /* Put in global buffer same values */ + for (index = 0; index < BufferLength; index++ ) + { + pBuffer[index] = 0x00; + } +} + +/** + * @brief Basic management of the timeout situation. + * @param None. + * @retval None. + */ +static void TimeOut_UserCallback(void) +{ + /* User can add his own implementation to manage TimeOut Communication failure */ + /* Block communication and all processes */ + while (1) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/main.h new file mode 100644 index 000000000..1d5f353b1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/main.h @@ -0,0 +1,127 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeDMA/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program header + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported typedef -----------------------------------------------------------*/ +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Exported define ------------------------------------------------------------*/ +/* Uncomment the line below if you will use the I2C peripheral as a Master */ +#define I2C_MASTER +/* Uncomment the line below if you will use the I2C peripheral as a Slave */ +/* #define I2C_SLAVE */ + +/* To use the I2C at 400 KHz (in fast mode), the PCLK1 frequency (I2C peripheral + input clock) must be a multiple of 10 MHz */ +/* Uncomment the line below if you will use the I2C peripheral in Fast Mode */ +/* #define FAST_I2C_MODE */ + +/* Uncomment the line below if you will use the I2C peripheral in 10-bit addressing + mode */ +#define I2C_10BITS_ADDRESS + +/* Define I2C Speed --------------------------------------------------------*/ +#ifdef FAST_I2C_MODE + #define I2C_SPEED 340000 + #define I2C_DUTYCYCLE I2C_DutyCycle_16_9 +#else /* STANDARD_I2C_MODE*/ + #define I2C_SPEED 100000 + #define I2C_DUTYCYCLE I2C_DutyCycle_2 +#endif /* FAST_I2C_MODE*/ + +/* Define Slave Address ---------------------------------------------------*/ +#ifdef I2C_10BITS_ADDRESS + #define SLAVE_ADDRESS (uint16_t)0x0330 +#else /* I2C_7BITS_ADDRESS */ + #define SLAVE_ADDRESS 0x30 +#endif /* I2C_10BITS_ADDRESS */ + +/* USER_TIMEOUT value for waiting loops. This timeout is just a guarantee that the + application will not remain stuck if the I2C communication is corrupted. + You may modify this timeout value depending on CPU frequency and application + conditions (interrupts routines, number of data to transfer, speed, CPU + frequency...). */ +#define USER_TIMEOUT ((uint32_t)0x64) /* Waiting 1s */ + +/* I2Cx Communication boards Interface */ +#define I2Cx_DMA DMA1 +#define I2Cx_DMA_CHANNEL DMA_Channel_1 +#define I2Cx_DR_ADDRESS ((uint32_t)0x40005410) +#define I2Cx_DMA_STREAM_TX DMA1_Stream6 +#define I2Cx_DMA_STREAM_RX DMA1_Stream0 +#define I2Cx_TX_DMA_TCFLAG DMA_FLAG_TCIF6 +#define I2Cx_TX_DMA_FEIFLAG DMA_FLAG_FEIF6 +#define I2Cx_TX_DMA_DMEIFLAG DMA_FLAG_DMEIF6 +#define I2Cx_TX_DMA_TEIFLAG DMA_FLAG_TEIF6 +#define I2Cx_TX_DMA_HTIFLAG DMA_FLAG_HTIF6 +#define I2Cx_RX_DMA_TCFLAG DMA_FLAG_TCIF0 +#define I2Cx_RX_DMA_FEIFLAG DMA_FLAG_FEIF0 +#define I2Cx_RX_DMA_DMEIFLAG DMA_FLAG_DMEIF0 +#define I2Cx_RX_DMA_TEIFLAG DMA_FLAG_TEIF0 +#define I2Cx_RX_DMA_HTIFLAG DMA_FLAG_HTIF0 +#define DMAx_CLK RCC_AHB1Periph_DMA1 + +#define I2Cx I2C1 +#define I2Cx_CLK RCC_APB1Periph_I2C1 +#define I2Cx_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB +#define I2Cx_SDA_PIN GPIO_Pin_9 +#define I2Cx_SDA_GPIO_PORT GPIOB +#define I2Cx_SDA_SOURCE GPIO_PinSource9 +#define I2Cx_SDA_AF GPIO_AF_I2C1 + +#define I2Cx_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB +#define I2Cx_SCL_PIN GPIO_Pin_6 +#define I2Cx_SCL_GPIO_PORT GPIOB +#define I2Cx_SCL_SOURCE GPIO_PinSource6 +#define I2Cx_SCL_AF GPIO_AF_I2C1 + +#define TXBUFFERSIZE (countof(TxBuffer) - 1) +#define RXBUFFERSIZE TXBUFFERSIZE + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/readme.txt new file mode 100644 index 000000000..f401eda90 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/readme.txt @@ -0,0 +1,151 @@ +/** + @page I2C_DataExchangeDMA Two boards I2C Communication: Data Exchange using DMA example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file I2C/I2C_TwoBoards/DataExchangeDMA/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the I2C Data Exchange between two boards using DMA + * example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This is a typical example of how to use the I2C firmware library to ensure the +steps of an I2C communication between slave Receiver/Transmitter and master +Transmitter/Receiver using DMA. + +- Hardware Description + +To use this example, you need to load it on two STM32 boards (let's call them +Board A and Board B) then connect these two boards through I2C lines and GND. +In the firmware example uncomment the dedicated line in the main.h file to use +the I2C peripheral as STM32 Master device or as STM32 Slave. + +@verbatim +*------------------------------------------------------------------------------* +| BOARD A BOARD B | +| ____________________ ____________________ | +| | | | | | +| | | | | | +| | __________ | | __________ | | +| | |I2C Master|____|_______SDA_______|____|I2C Slave | | | +| | | Device |____|_______SCL_______|____| Device | | | +| | |__________| | | |__________| | | +| | O LD1 | | O LD1 | | +| | O LD2 RESET | | O LD2 RESET | | +| | O LD3 _ | | O LD3 _ | | +| | O LD4 |_| | | O LD4 |_| | | +| | | | | | +| | GND O--|-----------------|--O GND | | +| |____________________| |____________________| | +| | +| | +*------------------------------------------------------------------------------* +@endverbatim + +- Software Description + +This example requires two boards(Master and Slave) + + - Phase 1: + In master board I2C peripheral is configured in Master Transmitter with DMA + where in Slave board I2C peripheral is configured in Slave Receiver with DMA. + The master will send Data to Slave according to the defined buffer size. + + - Phase 2: + In master board I2C peripheral is configured in Master Receiver with DMA, + where in Slave board I2C peripheral is configured in Slave Transmitter with + DMA. + Once the master has initiated the communication (Start condition), the slave + will send the defined data in his TxBuffer to the master. + +At the end of the data transfer, a data consistency check will be performed +in master and slave sides. In case of mismatch between sent and received data, +LED2, LED3 and LED4 are OFF. Otherwise LED2, LED3 and LED4 are ON. + +@note As the data transfers is ensured by DMA, the TxBuffer size must be equal + or greater than two bytes. + +The File "I2C/I2C_TwoBoards/DataExchangeDMA/main.h" allows different possibilities +of configuration of this example: + - Addressing mode : 7-bit or 10-bit + - I2C speed: Fast mode or Standard mode + +The SysTick is configured to generate an interrupt each 10ms. A dedicated counter +inside the SysTick ISR is used to toggle the LED1 each 100ms indicating that the +firmware is running. + +A defined communication timeout is insuring that the application will not remain +stuck in case of I2C communication is corrupted. +You can adjust this timeout through the USER_TIMEOUT define inside main.h file +depending on CPU frequency and application conditions (interrupts routines, +number of data to transfer, speed, CPU frequency...). +When a given operation is not finished within the defined timeout, a callback is +made to the function "TimeOut_UserCallback()", this function is used to manage +timeout communication failure. In this example, this callback implements a simple +infinite loop, but user can add his own implementation to manage timeout failure. + + +@par Directory contents + + - I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h Library Configuration file + - I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.c Interrupt handlers + - I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.h Interrupt handlers header file + - I2C/I2C_TwoBoards/DataExchangeDMA/main.c Main program + - I2C/I2C_TwoBoards/DataExchangeDMA/main.h Main Header file + - I2C/I2C_TwoBoards/DataExchangeDMA/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB (with no additional + hardware), and can be easily tailored to any other development board. + + - STM322xG-EVAL Set-up + - Connect I2C1 Master SCL pin (PB.06) to I2C1 Slave SCL (PB.06) + - Connect I2C1 Master SDA pin (PB.09) to I2C1 Slave SDA (PB.09) + + @note + - Pull-up resistors should be connected to I2C SCL and SDA Pins in case of + other boards use. + Pull-up resistors are already implemented on the STM322xG-EVAL evaluation + boards. + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h new file mode 100644 index 000000000..5df8aa912 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.c new file mode 100644 index 000000000..343575a4d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.c @@ -0,0 +1,190 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2C_DataExchangeDMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint8_t Counter = 0x00; +extern __IO uint32_t TimeOut; +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +#if defined (I2C_MASTER) + /* Decrement the time out value */ + if (TimeOut != 0x0) + { + TimeOut--; + } +#endif /* I2C_MASTER*/ + + if (Counter < 10) + { + Counter++; + } + else + { + Counter = 0x00; + STM_EVAL_LEDToggle(LED1); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.h new file mode 100644 index 000000000..7ee61969f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.h @@ -0,0 +1,59 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeDMA/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeDMA/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/main.c new file mode 100644 index 000000000..5a7acd8eb --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/main.c @@ -0,0 +1,412 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeInterrupt/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2C_DataExchangeInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +I2C_InitTypeDef I2C_InitStructure; +uint8_t TxBuffer[] = "I2C Interrupt Example: Communication between two I2C using Interrupts"; + +__IO uint8_t Tx_Idx = 0x00; +__IO uint8_t Rx_Idx = 0x00; +uint8_t RxBuffer [256]; + +__IO uint8_t NumberOfByteToReceive = RXBUFFERSIZE; +__IO uint8_t NumberOfByteToTransmit = TXBUFFERSIZE; +__IO uint8_t MasterMode = MASTER_MODE_RECEIVER; +__IO uint32_t TimeOut = 0x0; +RCC_ClocksTypeDef RCC_Clocks; + +/* Private function prototypes -----------------------------------------------*/ +static void I2C_Config(void); +static void SysTickConfig(void); +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength); +static void TimeOut_UserCallback(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + +/* I2C configuration ---------------------------------------------------------*/ + I2C_Config(); + + /* Initialize LEDs mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + +/* SysTick configuration -----------------------------------------------------*/ + SysTickConfig(); + +/*************************************Master Code******************************/ +#if defined (I2C_MASTER) + /* I2C De-initialize */ + I2C_DeInit(I2Cx); + + /*!< I2C Struct Initialize */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE; + I2C_InitStructure.I2C_OwnAddress1 = 0xA0; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + +#ifndef I2C_10BITS_ADDRESS + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +#else + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_10bit; +#endif /* I2C_10BITS_ADDRESS */ + + /* I2C Initialization */ + I2C_Init(I2Cx, &I2C_InitStructure); + + /* Enable Error Interrupt */ + I2C_ITConfig(I2Cx, I2C_IT_ERR , ENABLE); + + /* I2C ENABLE */ + I2C_Cmd(I2Cx, ENABLE); + +/* Master Transmitter --------------------------------------------------------*/ + NumberOfByteToTransmit = TXBUFFERSIZE; + MasterMode = MASTER_MODE_TRANSMITTER; + Tx_Idx = 0x00; + + /* Enable Error and Buffer Interrupts */ + I2C_ITConfig(I2Cx, (I2C_IT_EVT | I2C_IT_BUF), ENABLE); + + /* Generate the Start condition */ + I2C_GenerateSTART(I2Cx, ENABLE); + + /* Data transfer is performed in the I2C interrupt routine */ + /* Wait until end of data transfer or time out */ + TimeOut = USER_TIMEOUT; + while ((Tx_Idx < TXBUFFERSIZE)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + TimeOut = USER_TIMEOUT; + while ((I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } +/* Master Receiver -----------------------------------------------------------*/ + NumberOfByteToReceive = RXBUFFERSIZE; + MasterMode = MASTER_MODE_RECEIVER; + Rx_Idx = 0x00; + + /* Clear the RxBuffer */ + Fill_Buffer(RxBuffer, RXBUFFERSIZE); + + /* Enable Event Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_EVT , ENABLE); + + /* Enable Acknowledge */ + I2C_AcknowledgeConfig(I2Cx, ENABLE); + + /* Generate the Start condition */ + I2C_GenerateSTART(I2Cx, ENABLE); + + /* Data transfer is performed in the I2C interrupt routine */ + /* Wait until end of data transfer */ + while (Rx_Idx < RXBUFFERSIZE) + {} + if (Buffercmp(TxBuffer, RxBuffer, RXBUFFERSIZE) == PASSED) + { + /* LED2, LED3 and LED4 ON */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + else + { /* LED2, LED3 and LED4 Off */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } + +#endif /* I2C_MASTER */ + +/**********************************Slave Code**********************************/ +#if defined (I2C_SLAVE) + + I2C_DeInit(I2Cx); + + /* Initialize I2C peripheral */ + /*!< I2C Init */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE; + I2C_InitStructure.I2C_OwnAddress1 = SLAVE_ADDRESS; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + +#ifndef I2C_10BITS_ADDRESS + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +#else + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_10bit; +#endif /* I2C_10BITS_ADDRESS */ + + I2C_Init(I2Cx, &I2C_InitStructure); + + /* Enable Error Interrupt */ + I2C_ITConfig(I2Cx, (I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE); + + /* I2C ENABLE */ + I2C_Cmd(I2Cx, ENABLE); + +/* Slave Receiver ------------------------------------------------------------*/ + Rx_Idx = 0x00; + Tx_Idx = 0x00; + + /* Clear the RxBuffer */ + Fill_Buffer(RxBuffer, RXBUFFERSIZE); + + /* Wait until end of data transfer */ + while (Rx_Idx < RXBUFFERSIZE) + {} + + TimeOut = USER_TIMEOUT; + while ((I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + +/* Slave Transmitter ---------------------------------------------------------*/ + + /* Wait until end of data transfer */ + while (Tx_Idx < TXBUFFERSIZE) + {} + + if (Buffercmp(TxBuffer, RxBuffer, RXBUFFERSIZE) == PASSED) + { + /* LED2, LED3 and LED4 ON */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + else + { /* LED2, LED3 and LED4 are Off */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } +#endif /* I2C_SLAVE */ + + while(1) + {} +} + +/** + * @brief Enables the I2C Clock and configures the different GPIO ports. + * @param None + * @retval None + */ +static void I2C_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* RCC Configuration */ + /*I2C Peripheral clock enable */ + RCC_APB1PeriphClockCmd(I2Cx_CLK, ENABLE); + + /*SDA GPIO clock enable */ + RCC_AHB1PeriphClockCmd(I2Cx_SDA_GPIO_CLK, ENABLE); + + /*SCL GPIO clock enable */ + RCC_AHB1PeriphClockCmd(I2Cx_SCL_GPIO_CLK, ENABLE); + + /* Reset I2Cx IP */ + RCC_APB1PeriphResetCmd(I2Cx_CLK, ENABLE); + + /* Release reset signal of I2Cx IP */ + RCC_APB1PeriphResetCmd(I2Cx_CLK, DISABLE); + + /* GPIO Configuration */ + /*Configure I2C SCL pin */ + GPIO_InitStructure.GPIO_Pin = I2Cx_SCL_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(I2Cx_SCL_GPIO_PORT, &GPIO_InitStructure); + + /*Configure I2C SDA pin */ + GPIO_InitStructure.GPIO_Pin = I2Cx_SDA_PIN; + GPIO_Init(I2Cx_SDA_GPIO_PORT, &GPIO_InitStructure); + + /* Connect PXx to I2C_SCL */ + GPIO_PinAFConfig(I2Cx_SCL_GPIO_PORT, I2Cx_SCL_SOURCE, I2Cx_SCL_AF); + + /* Connect PXx to I2C_SDA */ + GPIO_PinAFConfig(I2Cx_SDA_GPIO_PORT, I2Cx_SDA_SOURCE, I2Cx_SDA_AF); + + /* NVIC configuration */ + /* Configure the Priority Group to 1 bit */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); + + /* Configure the I2C event priority */ + NVIC_InitStructure.NVIC_IRQChannel = I2Cx_EV_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Configure I2C error interrupt to have the higher priority */ + NVIC_InitStructure.NVIC_IRQChannel = I2Cx_ER_IRQn; + NVIC_Init(&NVIC_InitStructure); +} + + +/** + * @brief Configure a SysTick Base time to 10 ms. + * @param None + * @retval None + */ +static void SysTickConfig(void) +{ + /* SysTick end of count event each 10ms */ + RCC_GetClocksFreq(&RCC_Clocks); + SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); + + /* Configure the SysTick handler priority */ + NVIC_SetPriority(SysTick_IRQn, 0x0); +} + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return FAILED; + } + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} + +/** + * @brief Fills buffer. + * @param pBuffer: pointer on the Buffer to fill + * @param BufferLength: size of the buffer to fill + * @retval None + */ +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength) +{ + uint16_t index = 0; + + /* Put in global buffer same values */ + for (index = 0; index < BufferLength; index++ ) + { + pBuffer[index] = 0x00; + } +} + +/** + * @brief Basic management of the timeout situation. + * @param None. + * @retval None. + */ +static void TimeOut_UserCallback(void) +{ + /* User can add his own implementation to manage TimeOut Communication failure */ + /* Block communication and all processes */ + while (1) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/main.h new file mode 100644 index 000000000..337015c14 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/main.h @@ -0,0 +1,119 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeInterrupt/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program header + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported typedef -----------------------------------------------------------*/ +#define countof(a) (sizeof(a) / sizeof(*(a))) +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Exported define ------------------------------------------------------------*/ +/* Uncomment the line below if you will use the I2C peripheral as a Master */ +#define I2C_MASTER +/* Uncomment the line below if you will use the I2C peripheral as a Slave */ +/* #define I2C_SLAVE */ + +/* To use the I2C at 400 KHz (in fast mode), the PCLK1 frequency (I2C peripheral + input clock) must be a multiple of 10 MHz */ +/* Uncomment the line below if you will use the I2C peripheral in Fast Mode */ +/* #define FAST_I2C_MODE */ + +/* Uncomment the line below if you will use the I2C peripheral in 10-bit addressing + mode */ +/* #define I2C_10BITS_ADDRESS */ + +/* Define I2C Speed --------------------------------------------------------*/ +#ifdef FAST_I2C_MODE + #define I2C_SPEED 340000 + #define I2C_DUTYCYCLE I2C_DutyCycle_16_9 +#else /* STANDARD_I2C_MODE*/ + #define I2C_SPEED 100000 + #define I2C_DUTYCYCLE I2C_DutyCycle_2 +#endif /* FAST_I2C_MODE*/ + +/* Define Slave Address ---------------------------------------------------*/ +#ifdef I2C_10BITS_ADDRESS + #define SLAVE_ADDRESS (uint16_t)0x0330 +#else /* I2C_7BITS_ADDRESS */ + #define SLAVE_ADDRESS 0x30 +#endif /* I2C_10BITS_ADDRESS */ + +/* USER_TIMEOUT value for waiting loops. This timeout is just a guarantee that the + application will not remain stuck if the I2C communication is corrupted. + You may modify this timeout value depending on CPU frequency and application + conditions (interrupts routines, number of data to transfer, speed, CPU + frequency...). */ +#define USER_TIMEOUT ((uint32_t)0x64) /* Waiting 1s */ + +/* Master Mode Selected */ +#define MASTER_MODE_TRANSMITTER 0x01 +#define MASTER_MODE_RECEIVER 0x00 + +/* I2Cx Communication boards Interface */ +#define I2Cx I2C1 +#define I2Cx_CLK RCC_APB1Periph_I2C1 +#define I2Cx_EV_IRQn I2C1_EV_IRQn +#define I2Cx_ER_IRQn I2C1_ER_IRQn +#define I2Cx_EV_IRQHANDLER I2C1_EV_IRQHandler +#define I2Cx_ER_IRQHANDLER I2C1_ER_IRQHandler + +#define I2Cx_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB +#define I2Cx_SDA_PIN GPIO_Pin_9 +#define I2Cx_SDA_GPIO_PORT GPIOB +#define I2Cx_SDA_SOURCE GPIO_PinSource9 +#define I2Cx_SDA_AF GPIO_AF_I2C1 + +#define I2Cx_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB +#define I2Cx_SCL_PIN GPIO_Pin_6 +#define I2Cx_SCL_GPIO_PORT GPIOB +#define I2Cx_SCL_SOURCE GPIO_PinSource6 +#define I2Cx_SCL_AF GPIO_AF_I2C1 + +#define TXBUFFERSIZE (countof(TxBuffer) - 1) +#define RXBUFFERSIZE TXBUFFERSIZE +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/readme.txt new file mode 100644 index 000000000..6dbc3e897 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/readme.txt @@ -0,0 +1,155 @@ +/** + @page I2C_DataExchangeInterrupt Two boards I2C Communication: Data Exchange using Interrupts example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file I2C/I2C_TwoBoards/DataExchangeInterrupt/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the I2C Data Exchange between two boards using Interrupts + * example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This is a typical example of how to use the I2C firmware library to ensure the +steps of an I2C communication between slave Receiver/Transmitter and master +Transmitter/Receiver using interrupts. + +- Hardware Description + +To use this example, you need to load it on two STM32 boards (let's call them +Board A and Board B) then connect these two boards through I2C lines and GND. +In the firmware example uncomment the dedicated line in the main.h file to use +the I2C peripheral as STM32 Master device or as STM32 Slave . + +@verbatim +*------------------------------------------------------------------------------* +| BOARD A BOARD B | +| ____________________ ____________________ | +| | | | | | +| | | | | | +| | __________ | | __________ | | +| | |I2C Master|____|_______SDA_______|____|I2C Slave | | | +| | | Device |____|_______SCL_______|____| Device | | | +| | |__________| | | |__________| | | +| | O LD1 | | O LD1 | | +| | O LD2 RESET | | O LD2 RESET | | +| | O LD3 _ | | O LD3 _ | | +| | O LD4 |_| | | O LD4 |_| | | +| | | | | | +| | GND O--|-----------------|--O GND | | +| |____________________| |____________________| | +| | +| | +*------------------------------------------------------------------------------* +@endverbatim + +- Software Description + +This example requires two boards(Master and Slave) + + - Phase 1: + In master board I2C peripheral is configured in Master Transmitter with Interrupt, + where in Slave board I2C peripheral is configured in Slave Receiver with Interrupt. + The master will send Data to Slave according to the defined buffer size. + + - Phase 2: + In master board I2C peripheral is configured in Master Receiver with Interrupt, + where in Slave board I2C peripheral is configured in Slave Transmitter with + Interrupt. + Once the master has initiated the communication (Start condition), the slave + will send back the data to the master according to the defined buffer size. + +At the end of the data transfer, a data consistency check will be performed +in master and slave sides. In case of mismatch between sent and received data, +all LED's are OFF. Otherwise LED2, LED3 and LED4 are ON. + +Communication error are handled in master an slave sides, their occurrence will +be signaled by puting LED3 and LED4 On. + + +The File "I2C/I2C_TwoBoards/DataExchangeInterrupt/main.h" allows different +possibilities of configuration for this example: + - Addressing mode : 7-bit or 10-bit + - I2C speed: Fast mode or Standard mode + +In both boards, the data transfers is managed using I2Cx_EV_IRQHandler +and I2Cx_ER_IRQHandler in stm32f2xx_it.c file. + +The SysTick is configured to generate interrupt each 10ms. A dedicated counter +inside the SysTick ISR is used to toggle the LED1 each 100ms indicating that the +firmware is running. + +A defined communication timeout is insuring that the application will not remain +stuck in case of I2C communication is corrupted. +You can adjust this timeout through the USER_TIMEOUT define inside main.h file +depending on CPU frequency and application conditions (interrupts routines, +number of data to transfer, speed, CPU frequency...). +When a given operation is not finished within the defined timeout, a callback is +made to the function "TimeOut_UserCallback()", this function is used to manage +timeout communication failure. In this example, this callback implements a simple +infinite loop, but user can add his own implementation to manage timeout failure. + + +@par Directory contents + + - I2C/I2C_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c STM32F2xx system clock configuration file + - I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h Library Configuration file + - I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c Interrupt handlers + - I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h Interrupt handlers header file + - I2C/I2C_TwoBoards/DataExchangeInterrupt/main.c Main program + - I2C/I2C_TwoBoards/DataExchangeInterrupt/main.h Main Header file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB (with no additional + hardware), and can be easily tailored to any other development board. + + - STM322xG-EVAL Set-up + - Connect I2C1 Master SCL pin (PB.06) to I2C1 Slave SCL (PB.06) + - Connect I2C1 Master SDA pin (PB.09) to I2C1 Slave SDA (PB.09) + + @note + - Pull-up resistors should be connected to I2C SCL and SDA Pins in case of + other boards use. + Pull-up resistors are already implemented on the STM322xG-EVAL evaluation + boards. + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h new file mode 100644 index 000000000..19701957a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c new file mode 100644 index 000000000..a1cdda4aa --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c @@ -0,0 +1,520 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2C_DataExchangeInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern uint8_t TxBuffer[]; +__IO uint8_t Counter = 0x00; +extern __IO uint32_t TimeOut; +__IO uint32_t Event = 0x00; + +uint8_t HEADER_ADDRESS_Write = (((SLAVE_ADDRESS & 0xFF00) >> 7) | 0xF0); +uint8_t HEADER_ADDRESS_Read = (((SLAVE_ADDRESS & 0xFF00) >> 7) | 0xF1); + +extern __IO uint8_t Tx_Idx; +extern __IO uint8_t Rx_Idx; +extern uint8_t NumberOfByteToReceive; +extern uint8_t NumberOfByteToTransmit; +__IO uint8_t GenerateStartStatus = 0x00; +extern uint8_t RxBuffer[]; + +#ifdef I2C_10BITS_ADDRESS +__IO uint8_t Send_HeaderStatus = 0x00; +#endif /* I2C_10BITS_ADDRESS */ + +extern __IO uint8_t MasterMode; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +#if defined (I2C_MASTER) + /* Decrement the time out value */ + if (TimeOut != 0x0) + { + TimeOut--; + } +#endif /* I2C_MASTER*/ + + if (Counter < 10) + { + Counter++; + } + else + { + Counter = 0x00; + STM_EVAL_LEDToggle(LED1); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ +/** + * @brief This function handles I2Cx Error interrupt request. + * @param None + * @retval None + */ +void I2Cx_ER_IRQHANDLER(void) +{ +#if defined (I2C_SLAVE) + + /* Read SR1 register to get I2C error */ + if ((I2C_ReadRegister(I2Cx, I2C_Register_SR1) & 0xFF00) != 0x00) + { + /* Clears error flags */ + I2Cx->SR1 &= 0x00FF; + } +#endif /* I2C_SLAVE*/ + +#if defined (I2C_MASTER) + + /* Read SR1 register to get I2C error */ + if ((I2C_ReadRegister(I2Cx, I2C_Register_SR1) & 0xFF00) != 0x00) + { + /* Clears error flags */ + I2Cx->SR1 &= 0x00FF; + + /* Set LED3 and LED4 */ + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + STM_EVAL_LEDOff(LED2); + } +#endif /* I2C_MASTER*/ +} + + +/** + * @brief This function handles I2Cx event interrupt request. + * @param None + * @retval None + */ +void I2Cx_EV_IRQHANDLER(void) +{ +#if defined (I2C_MASTER) + /* Once the Start condition is sent the master can be master receiver + or master transmitter */ + if (MasterMode == MASTER_MODE_TRANSMITTER) + { + /* Get Last I2C Event */ + Event = I2C_GetLastEvent(I2Cx); + switch (Event) + { + /* ************************************************************************/ + /* Master Transmitter Events */ + /* */ + /* ************************************************************************/ +/* Sending the header sequence for Master Transmitter case ----------------*/ + +#ifdef I2C_10BITS_ADDRESS + /* Check on EV5 */ + case I2C_EVENT_MASTER_MODE_SELECT : + /* Send Header to Slave for write */ + I2C_SendData(I2Cx, HEADER_ADDRESS_Write); + break; + + /* Check on EV9 */ + case I2C_EVENT_MASTER_MODE_ADDRESS10: + /* Send slave Address for write */ + I2C_Send7bitAddress(I2Cx, (uint8_t)SLAVE_ADDRESS, I2C_Direction_Transmitter); + break; + + +#else /* I2C_7BITS_ADDRESS */ + /* Check on EV5 */ + case I2C_EVENT_MASTER_MODE_SELECT : + /* Send slave Address for write */ + I2C_Send7bitAddress(I2Cx, (uint8_t)SLAVE_ADDRESS, I2C_Direction_Transmitter); + break; + +#endif /* I2C_10BITS_ADDRESS */ + + /* Check on EV6 */ + case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED: + /* Transmit the First Data */ + I2C_SendData(I2Cx, TxBuffer[Tx_Idx++]); + break; + + /* Check on EV8 */ + case I2C_EVENT_MASTER_BYTE_TRANSMITTING: + case I2C_EVENT_MASTER_BYTE_TRANSMITTED: + if (Tx_Idx == (uint8_t)NumberOfByteToTransmit) + { + /* Send STOP condition */ + I2C_GenerateSTOP(I2Cx, ENABLE); + I2C_ITConfig(I2Cx, I2C_IT_EVT | I2C_IT_BUF, DISABLE); + } + else + { + /* Transmit Data TxBuffer */ + I2C_SendData(I2Cx, TxBuffer[Tx_Idx++]); + } + break; + + default: + break; + } + + } + /*************************************************************************/ + /* Master Receiver Events */ + /* */ + /*************************************************************************/ + else /* MASTER_MODE_RECEIVER */ + { +#ifdef I2C_10BITS_ADDRESS + /* Check on SB Flag and clear it */ + if(I2C_GetITStatus(I2Cx, I2C_IT_SB)== SET) + { + if (Send_HeaderStatus == 0x00) + { + /* Send Header to Slave for write */ + I2C_SendData(I2Cx, HEADER_ADDRESS_Write); + Send_HeaderStatus = 0x01; + GenerateStartStatus = 0x01; + } + else + { + /* Send Header to Slave for Read */ + I2C_SendData(I2Cx, HEADER_ADDRESS_Read); + Send_HeaderStatus = 0x00; + if (NumberOfByteToReceive == 0x03) + { + /* Disable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , DISABLE); + } + else + { + /* Enable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , ENABLE); + } + } + } + /* Check on ADD10 Flag */ + else if(I2C_GetITStatus(I2Cx, I2C_IT_ADD10)== SET) + { + /* Send slave Address */ + I2C_Send7bitAddress(I2Cx, (uint8_t)SLAVE_ADDRESS, I2C_Direction_Transmitter); + } + +#else /* I2C_7BITS_ADDRESS */ + + /* Check on EV5 */ + if(I2C_GetITStatus(I2Cx, I2C_IT_SB)== SET) + { + /* Send slave Address for read */ + I2C_Send7bitAddress(I2Cx, SLAVE_ADDRESS, I2C_Direction_Receiver); + if (NumberOfByteToReceive == 0x03) + { + /* Disable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , DISABLE); + } + else + { + /* Enable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , ENABLE); + } + } +#endif /* I2C_10BITS_ADDRESS */ + + else if(I2C_GetITStatus(I2Cx, I2C_IT_ADDR)== SET) + { + if (NumberOfByteToReceive == 1) + { + I2C_AcknowledgeConfig(I2Cx, DISABLE); + } + /* Clear ADDR Register */ + (void)(I2Cx->SR1); + (void)(I2Cx->SR2); + if (GenerateStartStatus == 0x00) + { + if (NumberOfByteToReceive == 1) + { + I2C_GenerateSTOP(I2Cx, ENABLE); + } + + if (NumberOfByteToReceive == 2) + { + I2C_AcknowledgeConfig(I2Cx, DISABLE); + I2C_NACKPositionConfig(I2Cx, I2C_NACKPosition_Next); + /* Disable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , DISABLE); + } + } + +#ifdef I2C_10BITS_ADDRESS + if (GenerateStartStatus == 0x01) + { + /* Repeated Start */ + I2C_GenerateSTART(I2Cx, ENABLE); + GenerateStartStatus = 0x00; + } + +#endif /* I2C_10BITS_ADDRESS */ + } + else if((I2C_GetITStatus(I2Cx, I2C_IT_RXNE)== SET)&&(I2C_GetITStatus(I2Cx, I2C_IT_BTF)== RESET)) + { + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + + if (NumberOfByteToReceive == 0x03) + { + /* Disable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , DISABLE); + } + + if (NumberOfByteToReceive == 0x00) + { + /* Disable Error and Buffer Interrupts */ + I2C_ITConfig(I2Cx, (I2C_IT_EVT | I2C_IT_BUF), DISABLE); + } + } + /* BUSY, MSL and RXNE flags */ + else if(I2C_GetITStatus(I2Cx, I2C_IT_BTF)== SET) + { + /* if Three bytes remaining for reception */ + if (NumberOfByteToReceive == 3) + { + I2C_AcknowledgeConfig(I2Cx, DISABLE); + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + } + else if (NumberOfByteToReceive == 2) + { + I2C_GenerateSTOP(I2Cx, ENABLE); + + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + /* Disable Error and Buffer Interrupts */ + I2C_ITConfig(I2Cx, (I2C_IT_EVT | I2C_IT_BUF), DISABLE); + } + else + { + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + } + } + } +#endif /* I2C_MASTER*/ + + +#if defined (I2C_SLAVE) + /* Get Last I2C Event */ + Event = I2C_GetLastEvent(I2Cx); + switch (Event) + { + /* ****************************************************************************/ + /* Slave Transmitter Events */ + /* */ + /* ****************************************************************************/ + + /* Check on EV1 */ + case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED: + I2C_SendData(I2Cx, TxBuffer[Tx_Idx++]); + I2C_ITConfig(I2Cx, I2C_IT_BUF , ENABLE); + break; + /* Check on EV3 */ + case I2C_EVENT_SLAVE_BYTE_TRANSMITTING: + case I2C_EVENT_SLAVE_BYTE_TRANSMITTED: + if (Tx_Idx < NumberOfByteToTransmit) + { + I2C_SendData(I2Cx, TxBuffer[Tx_Idx++]); + } + else + { + /* Disable I2C event interrupt */ + I2C_ITConfig(I2Cx, I2C_IT_EVT | I2C_IT_BUF, DISABLE); + } + break; + + /* ****************************************************************************/ + /* Slave Receiver Events */ + /* */ + /* ****************************************************************************/ + + /* check on EV1*/ + case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED: + Rx_Idx = 0x00; + break; + + /* Check on EV2*/ + case I2C_EVENT_SLAVE_BYTE_RECEIVED: + case (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_SR1_BTF): + RxBuffer[Rx_Idx++] = I2C_ReceiveData(I2Cx); + break; + + /* Check on EV4 */ + case I2C_EVENT_SLAVE_STOP_DETECTED: + I2C_GetFlagStatus(I2Cx, I2C_FLAG_STOPF); + I2C_Cmd(I2Cx, ENABLE); + break; + + default: + break; + } +#endif /* I2C_SLAVE*/ +} +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h new file mode 100644 index 000000000..b2f7a9155 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h @@ -0,0 +1,63 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +void I2Cx_ER_IRQHANDLER(void); +void I2Cx_EV_IRQHANDLER(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.c new file mode 100644 index 000000000..70d287cc0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.c @@ -0,0 +1,397 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup MasterReceiverInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define TXBUFFERSIZE (countof(TxBuffer) - 1) +#define RXBUFFERSIZE TXBUFFERSIZE + +/* Private macro -------------------------------------------------------------*/ +#define countof(a) (sizeof(a) / sizeof(*(a))) + +/* Private variables ---------------------------------------------------------*/ +I2C_InitTypeDef I2C_InitStructure; + +uint8_t TxBuffer[] = "Communication between two I2C using Interrupt Example: \ + Slave Transmitter to Master Receiver"; +#if defined (I2C_MASTER) + __IO uint8_t Rx_Idx = 0x00; + uint8_t RxBuffer [RXBUFFERSIZE]; + __IO uint8_t NumberOfByteToReceive = 0x00; + __IO uint32_t TimeOut = 0x0; +#endif + +#if defined (I2C_SLAVE) + uint8_t NbrOfDataToSend = TXBUFFERSIZE; + __IO uint8_t Tx_Idx = 0x00; +#endif /* I2C_SLAVE */ + +RCC_ClocksTypeDef RCC_Clocks; +/* Private function prototypes -----------------------------------------------*/ +static void I2C_Config(void); +static void SysTickConfig(void); +#if defined (I2C_MASTER) + static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); + static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength); + static void TimeOut_UserCallback(void); + static void delay(__IO uint32_t nCount); +#endif /* I2C_MASTER */ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* I2C configuration ---------------------------------------------------------*/ + I2C_Config(); + + /* Initialize LEDs mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + +/* SysTick configuration -----------------------------------------------------*/ + SysTickConfig(); + +/*************************************Master Code******************************/ +#if defined (I2C_MASTER) + /* I2C De-initialize */ + I2C_DeInit(I2Cx); + + /*I2C Struct Initialize */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE; + I2C_InitStructure.I2C_OwnAddress1 = 0xA0; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + +#ifndef I2C_10BITS_ADDRESS + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +#else + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_10bit; +#endif /* I2C_10BITS_ADDRESS */ + + /*I2C Initialize */ + I2C_Init(I2Cx, &I2C_InitStructure); + + /* Enable Error Interrupt */ + I2C_ITConfig(I2Cx, I2C_IT_ERR , ENABLE); + + /* I2C ENABLE */ + I2C_Cmd(I2Cx, ENABLE); + + while (1) + { + NumberOfByteToReceive = RXBUFFERSIZE; + Rx_Idx = 0x00; + + /* Clear the RxBuffer */ + Fill_Buffer(RxBuffer, RXBUFFERSIZE); + + /* Enable Event Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_EVT , ENABLE); + + /* Enable Acknowledge */ + I2C_AcknowledgeConfig(I2Cx, ENABLE); + + /* Generate the Start condition */ + I2C_GenerateSTART(I2Cx, ENABLE); + + /* Data transfer is performed in the I2C interrupt routine */ + /* Wait until end of data transfer or time out*/ + TimeOut = USER_TIMEOUT; + while ((Rx_Idx < RXBUFFERSIZE)&&(TimeOut != 0x00)) + {} + + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + if (Buffercmp(TxBuffer, RxBuffer, RXBUFFERSIZE) == PASSED) + { + /* LED2, LED3 and LED4 Toggle */ + STM_EVAL_LEDToggle(LED2); + STM_EVAL_LEDToggle(LED3); + STM_EVAL_LEDToggle(LED4); + } + else + { + /* ED2, LED3 and LED4 On */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } + delay(10); + } +#endif /* I2C_MASTER */ + +/**********************************Slave Code**********************************/ +#if defined (I2C_SLAVE) + + /*I2Cx DeInitialize*/ + I2C_DeInit(I2Cx); + + /* Initialize I2C peripheral */ + /*I2C Init */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE; + I2C_InitStructure.I2C_OwnAddress1 = SLAVE_ADDRESS; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + +#ifndef I2C_10BITS_ADDRESS + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +#else + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_10bit; +#endif /* I2C_10BITS_ADDRESS */ + + I2C_Init(I2Cx, &I2C_InitStructure); + + /* Enable Error Interrupt */ + I2C_ITConfig(I2Cx, (I2C_IT_ERR), ENABLE); + + /* I2C ENABLE */ + I2C_Cmd(I2Cx, ENABLE); + + /* Infinite Loop */ + while (1) + { + Tx_Idx = 0x00; + + /* Enable I2C event interrupt */ + I2C_ITConfig(I2Cx, I2C_IT_EVT, ENABLE); + + /* Wait until end of data transfer */ + while (Tx_Idx < TXBUFFERSIZE) + { + } + + /* LED2, LED3 and LED4 Toggle */ + STM_EVAL_LEDToggle(LED2); + STM_EVAL_LEDToggle(LED3); + STM_EVAL_LEDToggle(LED4); + } +#endif /* I2C_SLAVE */ +} + +/** + * @brief Enables the I2C Clock and configures the different GPIO ports. + * @param None + * @retval None + */ +static void I2C_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* RCC Configuration */ + /*I2C Peripheral clock enable */ + RCC_APB1PeriphClockCmd(I2Cx_CLK, ENABLE); + + /*SDA GPIO clock enable */ + RCC_AHB1PeriphClockCmd(I2Cx_SDA_GPIO_CLK, ENABLE); + + /*SCL GPIO clock enable */ + RCC_AHB1PeriphClockCmd(I2Cx_SCL_GPIO_CLK, ENABLE); + + /* Reset I2Cx IP */ + RCC_APB1PeriphResetCmd(I2Cx_CLK, ENABLE); + + /* Release reset signal of I2Cx IP */ + RCC_APB1PeriphResetCmd(I2Cx_CLK, DISABLE); + + /* GPIO Configuration */ + /*Configure I2C SCL pin */ + GPIO_InitStructure.GPIO_Pin = I2Cx_SCL_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(I2Cx_SCL_GPIO_PORT, &GPIO_InitStructure); + + /*Configure I2C SDA pin */ + GPIO_InitStructure.GPIO_Pin = I2Cx_SDA_PIN; + GPIO_Init(I2Cx_SDA_GPIO_PORT, &GPIO_InitStructure); + + /* Connect PXx to I2C_SCL */ + GPIO_PinAFConfig(I2Cx_SCL_GPIO_PORT, I2Cx_SCL_SOURCE, I2Cx_SCL_AF); + + /* Connect PXx to I2C_SDA */ + GPIO_PinAFConfig(I2Cx_SDA_GPIO_PORT, I2Cx_SDA_SOURCE, I2Cx_SDA_AF); + + /* NVIC configuration */ + /* Configure the Priority Group to 1 bit */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); + + /* Configure the I2C event priority */ + NVIC_InitStructure.NVIC_IRQChannel = I2Cx_EV_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Configure I2C error interrupt to have the higher priority */ + NVIC_InitStructure.NVIC_IRQChannel = I2Cx_ER_IRQn; + NVIC_Init(&NVIC_InitStructure); +} + + +/** + * @brief Configure a SysTick Base time to 10 ms. + * @param None + * @retval None + */ +static void SysTickConfig(void) +{ + /* SysTick end of count event each 10ms */ + RCC_GetClocksFreq(&RCC_Clocks); + SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); + + /* Configure the SysTick handler priority */ + NVIC_SetPriority(SysTick_IRQn, 0x0); +} + +#if defined (I2C_MASTER) +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return FAILED; + } + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} + +/** + * @brief Fills buffer. + * @param pBuffer: pointer on the Buffer to fill + * @param BufferLength: size of the buffer to fill + * @retval None + */ +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength) +{ + uint16_t index = 0; + + /* Put in global buffer same values */ + for (index = 0; index < BufferLength; index++ ) + { + pBuffer[index] = 0x00; + } +} + +/** + * @brief Basic management of the timeout situation. + * @param None. + * @retval None. + */ +static void TimeOut_UserCallback(void) +{ + /* User can add his own implementation to manage TimeOut Communication failure */ + /* Block communication and all processes */ + while (1) + { + } +} + +/** + * @brief Inserts a delay time. + * @param nCount: specifies the delay time length. + * @retval None + */ +static void delay(__IO uint32_t nCount) +{ + __IO uint32_t index = 0; + for(index = (34000 * nCount); index != 0; index--) + { + } +} +#endif /* I2C_MASTER */ + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.h new file mode 100644 index 000000000..1d91c5b06 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.h @@ -0,0 +1,112 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program header + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported typedef -----------------------------------------------------------*/ +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Exported define ------------------------------------------------------------*/ +/* Uncomment the line below if you will use the I2C peripheral as a Master */ +#define I2C_MASTER +/* Uncomment the line below if you will use the I2C peripheral as a Slave */ +/* #define I2C_SLAVE */ + +/* To use the I2C at 400 KHz (in fast mode), the PCLK1 frequency (I2C peripheral + input clock) must be a multiple of 10 MHz */ +/* Uncomment the line below if you will use the I2C peripheral in Fast Mode */ +/* #define FAST_I2C_MODE */ + +/* Uncomment the line below if you will use the I2C peripheral in 10-bit addressing + mode */ +#define I2C_10BITS_ADDRESS + +/* Define I2C Speed --------------------------------------------------------*/ +#ifdef FAST_I2C_MODE + #define I2C_SPEED 340000 + #define I2C_DUTYCYCLE I2C_DutyCycle_16_9 +#else /* STANDARD_I2C_MODE*/ + #define I2C_SPEED 100000 + #define I2C_DUTYCYCLE I2C_DutyCycle_2 +#endif /* FAST_I2C_MODE*/ + +/* Define Slave Address ---------------------------------------------------*/ +#ifdef I2C_10BITS_ADDRESS + #define SLAVE_ADDRESS (uint16_t)0x0330 +#else /* I2C_7BITS_ADDRESS */ + #define SLAVE_ADDRESS 0x30 +#endif /* I2C_10BITS_ADDRESS */ + +/* USER_TIMEOUT value for waiting loops. This timeout is just a guarantee that the + application will not remain stuck if the I2C communication is corrupted. + You may modify this timeout value depending on CPU frequency and application + conditions (interrupts routines, number of data to transfer, speed, CPU + frequency...). */ +#define USER_TIMEOUT ((uint32_t)0x64) /* Waiting 1s */ + +/* I2Cx Communication boards Interface */ +#define I2Cx I2C1 +#define I2Cx_CLK RCC_APB1Periph_I2C1 +#define I2Cx_EV_IRQn I2C1_EV_IRQn +#define I2Cx_ER_IRQn I2C1_ER_IRQn +#define I2Cx_EV_IRQHandler I2C1_EV_IRQHandler +#define I2Cx_ER_IRQHandler I2C1_ER_IRQHandler + +#define I2Cx_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB +#define I2Cx_SDA_PIN GPIO_Pin_9 +#define I2Cx_SDA_GPIO_PORT GPIOB +#define I2Cx_SDA_SOURCE GPIO_PinSource9 +#define I2Cx_SDA_AF GPIO_AF_I2C1 + +#define I2Cx_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB +#define I2Cx_SCL_PIN GPIO_Pin_6 +#define I2Cx_SCL_GPIO_PORT GPIOB +#define I2Cx_SCL_SOURCE GPIO_PinSource6 +#define I2Cx_SCL_AF GPIO_AF_I2C1 + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/readme.txt new file mode 100644 index 000000000..1fa5a3f6e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/readme.txt @@ -0,0 +1,155 @@ +/** + @page I2C_MasterReceiverInterrupt I2C Communication between Master in Receiver mode + and slave in Transmitter mode using interrupts example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file I2C/I2C_TwoBoards/MasterReceiverInterrupt/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the Two Boards I2C Communication example: Master receiver + * and Slave Transmitter. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This is a typical example of how to use the I2C firmware library to ensure the +steps of an I2C communication between slave transmitter and master receiver using +interrupt. + +- Hardware Description + +To use this example, you need to load it on two STM32 boards (let's call them +Board A and Board B) then connect these two boards through I2C lines and GND. +In the firmware example uncomment the dedicated line in the main.h file to use +the I2C peripheral as STM32 Master device or as STM32 Slave . + +@verbatim +*------------------------------------------------------------------------------* +| BOARD A BOARD B | +| ____________________ ____________________ | +| | | | | | +| | | | | | +| | __________ | | __________ | | +| | |I2C Master|____|_______SDA_______|____|I2C Slave | | | +| | | Device |____|_______SCL_______|____| Device | | | +| | |__________| | | |__________| | | +| | O LD1 | | O LD1 | | +| | O LD2 RESET | | O LD2 RESET | | +| | O LD3 _ | | O LD3 _ | | +| | O LD4 |_| | | O LD4 |_| | | +| | | | | | +| | GND O--|-----------------|--O GND | | +| |____________________| |____________________| | +| | +| | +*------------------------------------------------------------------------------* +@endverbatim + +- Software Description + +This example requires two boards(Master and Slave) + +In master board I2C peripheral is configured in Master Receiver with interrupt, +where in Slave board I2C peripheral is configured in Slave Transmitter with +Interrupt. + +Once the master has initiated the communication (Start condition), the slave +will send the defined TxBuffer. + +At the end of the data transfer, a data consistency check will be performed +in master side and in case of mismatch between sent and received data, all LED's +are Off. Otherwise LED2, LED3 and LED4 will toggle. + +Communication error are handled in master side, their occurrence will be signaled +by puting LED3 and LED4 On. + +However, in slave side LED2, LED3 and LED4 will toggle after sending the TxBuffer +without any check. + +The File "I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.h" allows different +possibilities of configuration of this example: + - Addressing mode : 7-bit or 10-bit + - I2C speed: Fast mode or Standard mode + +In both boards, the data transfers is managed using I2Cx_EV_IRQHandler +and I2Cx_ER_IRQHandler in stm32f2xx_it.c file. + +The SysTick is configured to generate interrupt each 10ms. A dedicated counter +inside the SysTick ISR is used to toggle the LED1 each 100ms indicating that the +firmware is running. +These operations are repeated infinitely. + +A defined communication timeout is insuring that the application will not remain +stuck if the I2C Master communication is corrupted. +You can adjust this timeout through the USER_TIMEOUT define inside main.h file +depending on CPU frequency and application conditions (interrupts routines, +number of data to transfer, speed, CPU frequency...). +When a given operation is not finished within the defined timeout, a callback is +made to the function "TimeOut_UserCallback()", this function is used to manage +timeout communication failure. In this example, this callback implements a simple +infinite loop, but user can add his own implementation to manage timeout failure. + + +@par Directory contents + + - I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_conf.h Library Configuration file + - I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.c Interrupt handlers + - I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.h Interrupt handlers header file + - I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.c Main program + - I2C/I2C_TwoBoards/MasterReceiverInterrupt/main.h Main Header file + - I2C/I2C_TwoBoards/MasterReceiverInterrupt/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB (with no additional + hardware), and can be easily tailored to any other development board. + + - STM322xG-EVAL Set-up + - Connect I2C1 Master SCL pin (PB.06) to I2C1 Slave SCL (PB.06) + - Connect I2C1 Master SDA pin (PB.09) to I2C1 Slave SDA (PB.09) + + @note + - Pull-up resistors should be connected to I2C SCL and SDA Pins in case of + other boards use. + Pull-up resistors are already implemented on the STM322xG-EVAL evaluation + boards. + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_conf.h new file mode 100644 index 000000000..43d027cb1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.c new file mode 100644 index 000000000..82e069b15 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.c @@ -0,0 +1,436 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup MasterReceiverInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +extern uint8_t TxBuffer[]; +__IO uint8_t Counter = 0x00; +__IO uint32_t Event = 0x00; + +#if defined (I2C_MASTER) + uint8_t HEADER_ADDRESS_Write = (((SLAVE_ADDRESS & 0xFF00) >> 7) | 0xF0); + uint8_t HEADER_ADDRESS_Read = (((SLAVE_ADDRESS & 0xFF00) >> 7) | 0xF1); + + extern __IO uint32_t TimeOut; + extern __IO uint8_t Rx_Idx; + extern __IO uint8_t NumberOfByteToReceive; + extern uint8_t RxBuffer[]; + __IO uint8_t GenerateStartStatus = 0x00; + #ifdef I2C_10BITS_ADDRESS + __IO uint8_t Send_HeaderStatus = 0x00; + #endif /* I2C_10BITS_ADDRESS */ +#endif /* I2C_MASTER */ + +#if defined (I2C_SLAVE) + extern __IO uint8_t Tx_Idx; + extern uint8_t NbrOfDataToSend; +#endif /* I2C_SLAVE */ + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +#if defined (I2C_MASTER) + /* Decrement the time out value */ + if (TimeOut != 0x0) + { + TimeOut--; + } +#endif /* I2C_MASTER*/ + + if (Counter < 10) + { + Counter++; + } + else + { + Counter = 0x00; + STM_EVAL_LEDToggle(LED1); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ +/** + * @brief This function handles I2Cx Error interrupt request. + * @param None + * @retval None + */ +void I2Cx_ER_IRQHandler(void) +{ +#if defined (I2C_SLAVE) + + /* Read SR1 register to get I2C error */ + if ((I2C_ReadRegister(I2Cx, I2C_Register_SR1) & 0xFF00) != 0x00) + { + /* Clears error flags */ + I2Cx->SR1 &= 0x00FF; + Tx_Idx = 0; + } + +#endif /* I2C_SLAVE*/ + +#if defined (I2C_MASTER) + + /* Read SR1 register to get I2C error */ + if ((I2C_ReadRegister(I2Cx, I2C_Register_SR1) & 0xFF00) != 0x00) + { + /* Clears erreur flags */ + I2Cx->SR1 &= 0x00FF; + + /* Set LED3 and LED4 */ + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + STM_EVAL_LEDOff(LED2); + Rx_Idx = 0; + } +#endif /* I2C_MASTER*/ +} + +/** + * @brief This function handles I2Cx event interrupt request. + * @param None + * @retval None + */ +void I2Cx_EV_IRQHandler(void) +{ +#if defined (I2C_SLAVE) + /* Get Last I2C Event */ + Event = I2C_GetLastEvent(I2Cx); + switch (Event) + { + /*****************************************************************************/ + /* Slave Transmitter Events */ + /* */ + /* ***************************************************************************/ + + /* Check on EV1 */ + case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED: + I2C_SendData(I2Cx, TxBuffer[Tx_Idx++]); + /* Enable I2C event interrupt */ + I2C_ITConfig(I2Cx, I2C_IT_BUF, ENABLE); + break; + + /* Check on EV3 */ + case I2C_EVENT_SLAVE_BYTE_TRANSMITTING: + case I2C_EVENT_SLAVE_BYTE_TRANSMITTED: + if (Tx_Idx < NbrOfDataToSend) + I2C_SendData(I2Cx, TxBuffer[Tx_Idx++]); + else + /* Disable I2C event interrupt */ + I2C_ITConfig(I2Cx, I2C_IT_EVT | I2C_IT_BUF, DISABLE); + break; + + default: + break; + } +#endif /* I2C_SLAVE*/ + +#if defined (I2C_MASTER) +/*****************************************************************************/ +/* Master Receiver */ +/* */ +/* ***************************************************************************/ +#ifdef I2C_10BITS_ADDRESS + /* Check on SB Flag and clear it */ + if(I2C_GetITStatus(I2Cx, I2C_IT_SB)== SET) + { + if (Send_HeaderStatus == 0x00) + { + /* Send Header to Slave for write */ + I2C_SendData(I2Cx, HEADER_ADDRESS_Write); + Send_HeaderStatus = 0x01; + GenerateStartStatus = 0x01; + } + else + { + /* Send Header to Slave for Read */ + I2C_SendData(I2Cx, HEADER_ADDRESS_Read); + Send_HeaderStatus = 0x00; + if (NumberOfByteToReceive == 0x03) + { + /* Disable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , DISABLE); + } + else + { + /* Enable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , ENABLE); + } + } + } + /* Check on ADD10 Flag */ + else if(I2C_GetITStatus(I2Cx, I2C_IT_ADD10)== SET) + { + /* Send slave Address */ + I2C_Send7bitAddress(I2Cx, (uint8_t)SLAVE_ADDRESS, I2C_Direction_Transmitter); + } + +#else /* I2C_7BITS_ADDRESS */ + + /* Check on EV5 */ + if(I2C_GetITStatus(I2Cx, I2C_IT_SB)== SET) + { + /* Send slave Address for read */ + I2C_Send7bitAddress(I2Cx, SLAVE_ADDRESS, I2C_Direction_Receiver); + if (NumberOfByteToReceive == 0x03) + { + /* Disable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , DISABLE); + } + else + { + /* Enable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , ENABLE); + } + } +#endif /* I2C_10BITS_ADDRESS */ + + else if(I2C_GetITStatus(I2Cx, I2C_IT_ADDR)== SET) + { + if (NumberOfByteToReceive == 1) + { + I2C_AcknowledgeConfig(I2Cx, DISABLE); + } + + /* Clear ADDR Register */ + (void)(I2Cx->SR1); + (void)(I2Cx->SR2); + if (GenerateStartStatus == 0x00) + { + if (NumberOfByteToReceive == 1) + { + I2C_GenerateSTOP(I2Cx, ENABLE); + } + + if (NumberOfByteToReceive == 2) + { + I2C_AcknowledgeConfig(I2Cx, DISABLE); + I2C_PECPositionConfig(I2Cx, I2C_PECPosition_Next); + /* Disable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , DISABLE); + } + } + +#ifdef I2C_10BITS_ADDRESS + if (GenerateStartStatus == 0x01) + { + /* Repeated Start */ + I2C_GenerateSTART(I2Cx, ENABLE); + GenerateStartStatus = 0x00; + } + +#endif /* I2C_10BITS_ADDRESS */ + } + + else if((I2C_GetITStatus(I2Cx, I2C_IT_RXNE)== SET)&&(I2C_GetITStatus(I2Cx, I2C_IT_BTF)== RESET)) + { + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + + if (NumberOfByteToReceive == 0x03) + { + /* Disable buffer Interrupts */ + I2C_ITConfig(I2Cx, I2C_IT_BUF , DISABLE); + } + + if (NumberOfByteToReceive == 0x00) + { + /* Disable Error and Buffer Interrupts */ + I2C_ITConfig(I2Cx, (I2C_IT_EVT | I2C_IT_BUF), DISABLE); + } + } + /* BUSY, MSL and RXNE flags */ + else if(I2C_GetITStatus(I2Cx, I2C_IT_BTF)== SET) + { + /* if Three bytes remaining for reception */ + if (NumberOfByteToReceive == 3) + { + I2C_AcknowledgeConfig(I2Cx, DISABLE); + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + } + else if (NumberOfByteToReceive == 2) + { + I2C_GenerateSTOP(I2Cx, ENABLE); + + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + /* Disable Error and Buffer Interrupts */ + I2C_ITConfig(I2Cx, (I2C_IT_EVT | I2C_IT_BUF), DISABLE); + } + else + { + /* Store I2C received data */ + RxBuffer[Rx_Idx++] = I2C_ReceiveData (I2Cx); + NumberOfByteToReceive--; + } + } +#endif /* I2C_MASTER*/ +} + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.h new file mode 100644 index 000000000..4be5fdd00 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.h @@ -0,0 +1,63 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +void I2Cx_ER_IRQHANDLER(void); +void I2Cx_EV_IRQHANDLER(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterReceiverInterrupt/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.c new file mode 100644 index 000000000..3fb20f607 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.c @@ -0,0 +1,527 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup MasterTransmitterInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +I2C_InitTypeDef I2C_InitStructure; +uint8_t TxBuffer[] = "I2C Interrupt Example: Communication between two I2C using Interrupt"; +__IO uint8_t NumberOfByte = 0x00; + +#if defined (I2C_SLAVE) + __IO uint8_t CmdReceived = 0x00; + __IO uint8_t Rx_Idx = 0x00; + uint8_t RxBuffer [RXBUFFERSIZE]; +#endif /* I2C_SLAVE */ + +#if defined (I2C_MASTER) + __IO uint32_t TimeOut = 0x0; + __IO uint8_t CmdTransmitted = 0x00; + __IO JOYState_TypeDef PressedButton = JOY_NONE; + __IO uint8_t Tx_Idx = 0x00; +#endif /* I2C_MASTER */ +RCC_ClocksTypeDef RCC_Clocks; + +/* Private function prototypes -----------------------------------------------*/ +static void I2C_Config(void); +static void SysTickConfig(void); + +#if defined (I2C_MASTER) + static void TimeOut_UserCallback(void); +#endif /* I2C_MASTER */ + +#if defined (I2C_SLAVE) + static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); + static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength); +#endif /* I2C_SLAVE */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* I2C configuration ---------------------------------------------------------*/ + I2C_Config(); + + /* Initialize LEDs mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + +#if defined (I2C_MASTER) + /* Initialize push-buttons mounted on STM322xG-EVAL board */ + TimeOut = USER_TIMEOUT; + while ((IOE_Config() != IOE_OK) && (TimeOut != 0x00)) + {} + + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } +#endif /* I2C_MASTER */ + + /* SysTick configuration -----------------------------------------------------*/ + SysTickConfig(); + +/*************************************Master Code******************************/ +#if defined (I2C_MASTER) + /* I2C De-initialize */ + I2C_DeInit(I2Cx); + + /*!< I2C Struct Initialize */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE; + I2C_InitStructure.I2C_OwnAddress1 = 0xA0; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + +#ifndef I2C_10BITS_ADDRESS + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +#else + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_10bit; +#endif /* I2C_10BITS_ADDRESS */ + + /*!< I2C Initialize */ + I2C_Init(I2Cx, &I2C_InitStructure); + + /* Enable Error Interrupt */ + I2C_ITConfig(I2Cx, I2C_IT_ERR , ENABLE); + + /* I2C ENABLE */ + I2C_Cmd(I2Cx, ENABLE); + + while (1) + { + CmdTransmitted = 0x00; + NumberOfByte = 0x00; + Tx_Idx = 0x00; + + /* Clear PressedButton by reading joystick */ + PressedButton = IOE_JoyStickGetState(); + + /* Waiting joystick pressed */ + while (PressedButton == JOY_NONE) + { + PressedButton = IOE_JoyStickGetState(); + } + + /* I2C in Master Transmitter Mode ----------------------------------------*/ + switch (PressedButton) + { + /* JOY_RIGHT button pressed */ + case JOY_RIGHT: + NumberOfByte = CMD_RIGHT_SIZE; + CmdTransmitted = CMD_RIGHT; + break; + /* JOY_LEFT button pressed */ + case JOY_LEFT: + NumberOfByte = CMD_LEFT_SIZE; + CmdTransmitted = CMD_LEFT; + break; + /* JOY_UP button pressed */ + case JOY_UP: + NumberOfByte = CMD_UP_SIZE; + CmdTransmitted = CMD_UP; + break; + /* JOY_DOWN button pressed */ + case JOY_DOWN: + NumberOfByte = CMD_DOWN_SIZE; + CmdTransmitted = CMD_DOWN; + break; + /* JOY_SEL button pressed */ + case JOY_SEL: + NumberOfByte = CMD_SEL_SIZE; + CmdTransmitted = CMD_SEL; + break; + default: + break; + } + + if (CmdTransmitted != 0x00) + { + /* Enable Error and Buffer Interrupts */ + I2C_ITConfig(I2Cx, (I2C_IT_EVT | I2C_IT_BUF), ENABLE); + /* Generate the Start condition */ + I2C_GenerateSTART(I2Cx, ENABLE); + /* Data transfer is performed in the I2C interrupt routine */ + /* Wait until end of data transfer or time out */ + TimeOut = USER_TIMEOUT; + while ((Tx_Idx < GetVar_NbrOfDataToTransfer())&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + TimeOut = USER_TIMEOUT; + while ((I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY))&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + } + } +#endif /* I2C_MASTER */ + + + /**********************************Slave Code**********************************/ +#if defined (I2C_SLAVE) + + I2C_DeInit(I2Cx); + + /* Initialize I2C peripheral */ + /*!< I2C Init */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE; + I2C_InitStructure.I2C_OwnAddress1 = SLAVE_ADDRESS; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + +#ifndef I2C_10BITS_ADDRESS + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +#else + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_10bit; +#endif /* I2C_10BITS_ADDRESS */ + + I2C_Init(I2Cx, &I2C_InitStructure); + + /* Enable Error Interrupt */ + I2C_ITConfig(I2Cx, (I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE); + + /* I2C ENABLE */ + I2C_Cmd(I2Cx, ENABLE); + + /* Infinite Loop */ + while (1) + { + CmdReceived = 0x00; + NumberOfByte = 0x00; + + /* Clear the RxBuffer */ + Fill_Buffer(RxBuffer, RXBUFFERSIZE); + + while (CmdReceived == 0x00) + {} + + /* Wait until end of data transfer */ + while (Rx_Idx < GetVar_NbrOfDataToReceive()) + {} + + /* I2C in Slave Receiver Mode --------------------------------------------*/ + if (CmdReceived != 0x00) + { + switch (Rx_Idx) + { + /* Right button pressed */ + case CMD_RIGHT_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_RIGHT_SIZE) == PASSED) + { + /* Turn ON LED2 and LED3 */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + /* Turn all other LEDs off */ + STM_EVAL_LEDOff(LED4); + } + break; + /* Left button pressed*/ + case CMD_LEFT_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_LEFT_SIZE) == PASSED) + { + /* Turn ON LED4 */ + STM_EVAL_LEDOn(LED4); + /* Turn all other LEDs off */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + } + break; + /* Up button pressed */ + case CMD_UP_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_UP_SIZE) == PASSED) + { + /* Turn ON LED2 */ + STM_EVAL_LEDOn(LED2); + /* Turn all other LEDs off */ + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } + break; + /* Down button pressed */ + case CMD_DOWN_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_DOWN_SIZE) == PASSED) + { + /* Turn ON LED3 */ + STM_EVAL_LEDOn(LED3); + /* Turn all other LEDs off */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED4); + } + break; + /* Sel button pressed */ + case CMD_SEL_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_SEL_SIZE) == PASSED) + { + /* Turn ON all LEDs */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + break; + default: + break; + } + } + } +#endif /* I2C_SLAVE */ +} + +/** + * @brief Enables the I2C Clock and configures the different GPIO ports. + * @param None + * @retval None + */ +static void I2C_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* RCC Configuration */ + /*I2C Peripheral clock enable */ + RCC_APB1PeriphClockCmd(I2Cx_CLK, ENABLE); + + /*SDA GPIO clock enable */ + RCC_AHB1PeriphClockCmd(I2Cx_SDA_GPIO_CLK, ENABLE); + + /*SCL GPIO clock enable */ + RCC_AHB1PeriphClockCmd(I2Cx_SCL_GPIO_CLK, ENABLE); + + /* Reset I2Cx IP */ + RCC_APB1PeriphResetCmd(I2Cx_CLK, ENABLE); + + /* Release reset signal of I2Cx IP */ + RCC_APB1PeriphResetCmd(I2Cx_CLK, DISABLE); + + /* GPIO Configuration */ + /*Configure I2C SCL pin */ + GPIO_InitStructure.GPIO_Pin = I2Cx_SCL_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(I2Cx_SCL_GPIO_PORT, &GPIO_InitStructure); + + /*Configure I2C SDA pin */ + GPIO_InitStructure.GPIO_Pin = I2Cx_SDA_PIN; + GPIO_Init(I2Cx_SDA_GPIO_PORT, &GPIO_InitStructure); + + /* Connect PXx to I2C_SCL */ + GPIO_PinAFConfig(I2Cx_SCL_GPIO_PORT, I2Cx_SCL_SOURCE, I2Cx_SCL_AF); + + /* Connect PXx to I2C_SDA */ + GPIO_PinAFConfig(I2Cx_SDA_GPIO_PORT, I2Cx_SDA_SOURCE, I2Cx_SDA_AF); + + /* NVIC configuration */ + /* Configure the Priority Group to 1 bit */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); + + /* Configure the I2C event priority */ + NVIC_InitStructure.NVIC_IRQChannel = I2Cx_EV_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Configure I2C error interrupt to have the higher priority */ + NVIC_InitStructure.NVIC_IRQChannel = I2Cx_ER_IRQn; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Configure a SysTick Base time to 10 ms. + * @param None + * @retval None + */ +static void SysTickConfig(void) +{ + /* SysTick end of count event each 10ms */ + RCC_GetClocksFreq(&RCC_Clocks); + SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); + + /* Configure the SysTick handler priority */ + NVIC_SetPriority(SysTick_IRQn, 0x0); +} + +#if defined (I2C_MASTER) +/** + * @brief Returns NbrOfDataToTransfer value. + * @param None + * @retval Tx Buffer Size (NbrOfDataToTransfer). + */ +uint8_t GetVar_NbrOfDataToTransfer(void) +{ + return NumberOfByte; +} + +/** + * @brief Basic management of the timeout situation. + * @param None. + * @retval None. + */ +static void TimeOut_UserCallback(void) +{ + /* User can add his own implementation to manage TimeOut Communication failure */ + /* Block communication and all processes */ + while (1) + { + } +} +#endif /* I2C_MASTER */ + +#if defined (I2C_SLAVE) +/** + * @brief Returns NbrOfDataToReceive value. + * @param None + * @retval Rx Buffer Size (NumberOfByte). + */ +uint8_t GetVar_NbrOfDataToReceive(void) +{ + switch (CmdReceived) + { + case CMD_RIGHT: + NumberOfByte = CMD_RIGHT_SIZE; + break; + case CMD_LEFT: + NumberOfByte = CMD_LEFT_SIZE; + break; + case CMD_UP: + NumberOfByte = CMD_UP_SIZE; + break; + case CMD_DOWN: + NumberOfByte = CMD_DOWN_SIZE; + break; + case CMD_SEL: + NumberOfByte = CMD_SEL_SIZE; + break; + default: + break; + } + return NumberOfByte; +} + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return FAILED; + } + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} + +/** + * @brief Fills buffer. + * @param pBuffer: pointer on the Buffer to fill + * @param BufferLength: size of the buffer to fill + * @retval None + */ +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength) +{ + uint16_t index = 0; + + /* Put in global buffer same values */ + for (index = 0; index < BufferLength; index++ ) + { + pBuffer[index] = 0x00; + } +} +#endif /* I2C_SLAVE */ + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.h new file mode 100644 index 000000000..2e9d4cb34 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.h @@ -0,0 +1,141 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program header + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_ioe.h" + +/* Exported typedef -----------------------------------------------------------*/ +#define countof(a) (sizeof(a) / sizeof(*(a))) +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Exported define ------------------------------------------------------------*/ +/* Uncomment the line below if you will use the I2C peripheral as a Master */ +#define I2C_MASTER +/* Uncomment the line below if you will use the I2C peripheral as a Slave */ +/* #define I2C_SLAVE */ + +/* To use the I2C at 400 KHz (in fast mode), the PCLK1 frequency (I2C peripheral + input clock) must be a multiple of 10 MHz */ +/* Uncomment the line below if you will use the I2C peripheral in Fast Mode */ +/* #define FAST_I2C_MODE */ + +/* Uncomment the line below if you will use the I2C peripheral in 10-bit addressing + mode */ +/* #define I2C_10BITS_ADDRESS */ + +/* Define I2C Speed --------------------------------------------------------*/ +#ifdef FAST_I2C_MODE + #define I2C_SPEED 340000 + #define I2C_DUTYCYCLE I2C_DutyCycle_16_9 +#else /* STANDARD_I2C_MODE*/ + #define I2C_SPEED 100000 + #define I2C_DUTYCYCLE I2C_DutyCycle_2 +#endif /* FAST_I2C_MODE*/ + +/* Define Slave Address ---------------------------------------------------*/ +#ifdef I2C_10BITS_ADDRESS + #define SLAVE_ADDRESS (uint16_t)0x0330 +#else /* I2C_7BITS_ADDRESS */ + #define SLAVE_ADDRESS 0x30 +#endif /* I2C_10BITS_ADDRESS */ + +/* USER_TIMEOUT value for waiting loops. This timeout is just a guarantee that the + application will not remain stuck if the I2C communication is corrupted. + You may modify this timeout value depending on CPU frequency and application + conditions (interrupts routines, number of data to transfer, speed, CPU + frequency...). */ +#define USER_TIMEOUT ((uint32_t)0x64) /* Waiting 1s */ + +#define TXBUFFERSIZE (countof(TxBuffer) - 1) +#define RXBUFFERSIZE TXBUFFERSIZE + +/* I2Cx Communication boards Interface */ +#define I2Cx I2C1 +#define I2Cx_CLK RCC_APB1Periph_I2C1 +#define I2Cx_EV_IRQn I2C1_EV_IRQn +#define I2Cx_ER_IRQn I2C1_ER_IRQn +#define I2Cx_EV_IRQHandler I2C1_EV_IRQHandler +#define I2Cx_ER_IRQHandler I2C1_ER_IRQHandler + +#define I2Cx_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB +#define I2Cx_SDA_PIN GPIO_Pin_9 +#define I2Cx_SDA_GPIO_PORT GPIOB +#define I2Cx_SDA_SOURCE GPIO_PinSource9 +#define I2Cx_SDA_AF GPIO_AF_I2C1 + +#define I2Cx_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB +#define I2Cx_SCL_PIN GPIO_Pin_6 +#define I2Cx_SCL_GPIO_PORT GPIOB +#define I2Cx_SCL_SOURCE GPIO_PinSource6 +#define I2Cx_SCL_AF GPIO_AF_I2C1 + +/* Joystick Commands */ +#define CMD_RIGHT 0x55 +#define CMD_LEFT 0xAA +#define CMD_UP 0x33 +#define CMD_DOWN 0xCC +#define CMD_SEL 0xFF + +#define CMD_ACK 0x66 + +/* Define numbers of bytes to transmit from TxBuffer */ +#define CMD_RIGHT_SIZE 0x01 +#define CMD_LEFT_SIZE 0x05 +#define CMD_UP_SIZE 0x14 +#define CMD_DOWN_SIZE 0x1E +#define CMD_SEL_SIZE TXBUFFERSIZE + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#if defined (I2C_MASTER) +uint8_t GetVar_NbrOfDataToTransfer(void); +#endif /* I2C_MASTER */ + +#if defined (I2C_SLAVE) +uint8_t GetVar_NbrOfDataToReceive(void); +#endif /* I2C_SLAVE */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/readme.txt new file mode 100644 index 000000000..5686b1adf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/readme.txt @@ -0,0 +1,155 @@ +/** + @page I2C_MasterTransmitterInterrupt I2C Communication between Master in mode transmitter + and slave in mode Receiver using interrupts example + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file I2C/I2C_TwoBoards/MasterTransmitterInterrupt/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the Two boards I2C Communication example: Master transmitter + * and Slave and receiver. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a small application in which joystick buttons are used +to trigger I2C communication using interrupt and though using I2C firmware library. + +- Hardware Description + +To use this example, you need to load it in two STM32 boards (let's call them +Board A and Board B) then connect these two boards through I2C lines and GND. +In the firmware example uncomment the dedicated line in the main.h file to use +the I2C peripheral as STM32 Master device or as STM32 Slave . + +@verbatim +*------------------------------------------------------------------------------* +| BOARD A BOARD B | +| ____________________ ____________________ | +| | | | | | +| | | | | | +| | __________ | | __________ | | +| | |I2C Master|____|_______SDA_______|____|I2C Slave | | | +| | | Device |____|_______SCL_______|____| Device | | | +| | |__________| | | |__________| | | +| | O LD1 | | O LD1 | | +| | O LD2 Joystick | | O LD2 | | +| | O LD3 _ | | O LD3 | | +| | O LD4 |_| | | O LD4 | | +| | | | | | +| | GND O--|-----------------|--O GND | | +| |____________________| |____________________| | +| | +| | +*------------------------------------------------------------------------------* +@endverbatim + +- Software Description + +This example requires two boards(Master and Slave) + +In master board, I2C peripheral is configured as Master Transmitter with Interrupt, +whereas in Slave board, I2C peripheral is configured as Slave Receiver with Interrupt. +According to the pushed joystick button in the master board a specific LED will +be ON in the slave board. + +At each joystick position press + - The master sends the defined NumberOfByte from TxBuffer to the slave + - The Slave compares the NumberOfByte received data with the defined ones into TxBuffer + +Received data correctness is signaled by LED lightening and though as follow: + - Joystick RIGHT and data correctly received ==> LD2, LD3 ON and LD4 OFF + - Joystick LEFT and data correctly received ==> LD4 ON, LD2 and LD3 are OFF + - Joystick UP and data correctly received ==> LD2 ON, LD3 and LD4 are OFF + - Joystick DOWN and data correctly received ==> LD3 ON, LD2 and LD4 are OFF + - Joystick SEL and data correctly received ==> LD2, LD3 and LD4 are ON + +Communication error are handled in both Master and Slave sides, their occurrence +will be signaled respectively by puting LED3 and LED4 On. + +The File "I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.h" allows different +possibilities of configuration of this example: + - Addressing mode : 7-bit or 10-bit + - I2C speed: Fast mode or Standard mode + - Buffer size also can be configured + +In both boards, the data transfers is managed using I2Cx_EV_IRQHandler +and I2Cx_ER_IRQHandler in stm32f2xx_it.c file. + +The SysTick is configured to generate interrupt each 10ms. A dedicated counter +inside the SysTick ISR is used to toggle the LD1 each 100ms indicating that the +firmware is running. +These operations can be repeated infinitely. + +A defined communication timeout is insuring that the application will not remain +stuck if the I2C Master communication is corrupted. +You can adjust this timeout through the USER_TIMEOUT define inside main.h file +depending on CPU frequency and application conditions (interrupts routines, +number of data to transfer, speed, CPU frequency...). +When a given operation is not finished within the defined timeout, a callback is +made to the function "TimeOut_UserCallback()", this function is used to manage +timeout communication failure. In this example, this callback implements a simple +infinite loop, but user can add his own implementation to manage timeout failure. + + +@par Directory contents + + - I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_conf.h Library Configuration file + - I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.c Interrupt handlers + - I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.h Interrupt handlers header file + - I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.c Main program + - I2C/I2C_TwoBoards/MasterTransmitterInterrupt/main.h Main Header file + - I2C/I2C_TwoBoards/MasterTransmitterInterrupt/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB (with no additional + hardware), and can be easily tailored to any other development board. + + - STM322xG-EVAL Set-up + - Connect I2C1 Master SCL pin (PB.06) to I2C1 Slave SCL (PB.06) + - Connect I2C1 Master SDA pin (PB.09) to I2C1 Slave SDA (PB.09) + + @note + - Pull-up resistors should be connected to I2C SCL and SDA Pins in case of + other boards use. + Pull-up resistors are already implemented on the STM322xG-EVAL evaluation + boards. + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_conf.h new file mode 100644 index 000000000..43d027cb1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterReceiverInterrupt/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.c new file mode 100644 index 000000000..ebee9c191 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.c @@ -0,0 +1,331 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup MasterTransmitterInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern uint8_t TxBuffer[]; +__IO uint8_t Counter = 0x00; +extern __IO uint8_t NumberOfByte; + +#if defined (I2C_SLAVE) + __IO uint32_t Event = 0x00; + extern uint8_t RxBuffer[]; + extern __IO uint8_t Rx_Idx; + extern __IO uint8_t CmdReceived; +#endif /* I2C_SLAVE */ + +#if defined (I2C_MASTER) + uint8_t HEADER_ADDRESS_Write = (((SLAVE_ADDRESS & 0xFF00) >> 7) | 0xF0); + extern __IO uint8_t PressedButton; + extern __IO uint8_t Tx_Idx; + extern __IO uint32_t TimeOut; + extern __IO uint8_t CmdTransmitted; +#endif /* I2C_MASTER */ + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +#if defined (I2C_MASTER) + /* Decrement the time out value */ + if (TimeOut != 0x0) + { + TimeOut--; + } +#endif /* I2C_MASTER*/ + + if (Counter < 10) + { + Counter++; + } + else + { + Counter = 0x00; + STM_EVAL_LEDToggle(LED1); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ +/** + * @brief This function handles I2Cx Error interrupt request. + * @param None + * @retval None + */ +void I2Cx_ER_IRQHandler(void) +{ +#if defined (I2C_SLAVE) + + /* Read SR1 register to get I2C error */ + if ((I2C_ReadRegister(I2Cx, I2C_Register_SR1) & 0xFF00) != 0x00) + { + /* Clears erreur flags */ + I2Cx->SR1 &= 0x00FF; + } +#endif /* I2C_SLAVE*/ + +#if defined (I2C_MASTER) + + /* Read SR1 register to get I2C error */ + if ((I2C_ReadRegister(I2Cx, I2C_Register_SR1) & 0xFF00) != 0x00) + { + /* Clears erreur flags */ + I2Cx->SR1 &= 0x00FF; + + /* Set LED3 and LED4 */ + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + STM_EVAL_LEDOff(LED2); + } +#endif /* I2C_MASTER*/ +} + +/** + * @brief This function handles I2Cx event interrupt request. + * @param None + * @retval None + */ +void I2Cx_EV_IRQHandler(void) +{ +#if defined (I2C_MASTER) + + switch (I2C_GetLastEvent(I2Cx)) + { + /* EV5 */ + case I2C_EVENT_MASTER_MODE_SELECT : +#ifdef I2C_10BITS_ADDRESS + /* Send Header to Slave for write */ + I2C_SendData(I2Cx, HEADER_ADDRESS_Write); + break; + + /* EV9 */ + case I2C_EVENT_MASTER_MODE_ADDRESS10: +#endif /* I2C_10BITS_ADDRESS */ + + /* Send slave Address for write */ + I2C_Send7bitAddress(I2Cx, (uint8_t)SLAVE_ADDRESS, I2C_Direction_Transmitter); + break; + + /* EV6 */ + case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED: + /* Send the I2C transaction code */ + I2C_SendData(I2Cx, CmdTransmitted); + break; + + /* EV8 */ + case I2C_EVENT_MASTER_BYTE_TRANSMITTING: + case I2C_EVENT_MASTER_BYTE_TRANSMITTED: + if (Tx_Idx == GetVar_NbrOfDataToTransfer()) + { + /* Send STOP condition */ + I2C_GenerateSTOP(I2Cx, ENABLE); + I2C_ITConfig(I2Cx, I2C_IT_EVT | I2C_IT_BUF, DISABLE); + } + else + { + /* Transmit Data TxBuffer */ + I2C_SendData(I2Cx, TxBuffer[Tx_Idx++]); + } + break; + + default: + break; + } + +#endif /* I2C_MASTER*/ + +#if defined (I2C_SLAVE) + + /* Get Last I2C Event */ + Event = I2C_GetLastEvent(I2Cx); + + switch (Event) + { + /* Check on EV1*/ + case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED: + Rx_Idx = 0x00; + break; + + /* Check on EV2*/ + case I2C_EVENT_SLAVE_BYTE_RECEIVED: + case (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_SR1_BTF): + if (CmdReceived == 0x00) + { + CmdReceived = I2C_ReceiveData(I2Cx); + } + else + { + RxBuffer[Rx_Idx++] = I2C_ReceiveData(I2Cx); + } + break; + + /* Check on EV4 */ + case (I2C_EVENT_SLAVE_STOP_DETECTED): + I2C_GetFlagStatus(I2Cx, I2C_FLAG_STOPF); + I2C_Cmd(I2Cx, ENABLE); + break; + + default: + break; + } +#endif /* I2C_SLAVE*/ +} + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.h new file mode 100644 index 000000000..a89f7d981 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.h @@ -0,0 +1,63 @@ +/** + ****************************************************************************** + * @file I2C/I2C_TwoBoards/MasterTransmitterInterrupt/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +void I2Cx_ER_IRQHANDLER(void); +void I2Cx_EV_IRQHANDLER(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/I2C_TwoBoards/MasterTransmitterInterrupt/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/main.c new file mode 100644 index 000000000..aa5848339 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/main.c @@ -0,0 +1,276 @@ +/** + ****************************************************************************** + * @file I2C/IOE/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2C_IOE + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +static __IO uint32_t TimingDelay; +RCC_ClocksTypeDef RCC_Clocks; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* SysTick end of count event each 10ms */ + RCC_GetClocksFreq(&RCC_Clocks); + SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); + + /* Initialize LEDs and push-buttons mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Select the Button test mode (polling or interrupt) BUTTON_MODE in main.h */ + STM_EVAL_PBInit(BUTTON_WAKEUP, BUTTON_MODE); + STM_EVAL_PBInit(BUTTON_TAMPER, BUTTON_MODE); + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE); + + /* Initialize the LCD */ + STM322xG_LCD_Init(); + + /* Clear the LCD */ + LCD_Clear(White); + /* Set the LCD Back Color */ + LCD_SetBackColor(Blue); + /* Set the LCD Text Color */ + LCD_SetTextColor(White); + + LCD_DisplayStringLine(Line0, (uint8_t *)" STM322xG-EVAL "); + LCD_DisplayStringLine(Line1, (uint8_t *)" Example on how to "); + LCD_DisplayStringLine(Line2, (uint8_t *)" use the IO Expander"); + + /* Configure the IO Expander */ + if (IOE_Config() == IOE_OK) + { + LCD_DisplayStringLine(Line4, (uint8_t *)" IO Expander OK "); + } + else + { + LCD_DisplayStringLine(Line4, (uint8_t *)"IO Expander FAILED "); + LCD_DisplayStringLine(Line5, (uint8_t *)" Please Reset the "); + LCD_DisplayStringLine(Line6, (uint8_t *)" board and start "); + LCD_DisplayStringLine(Line7, (uint8_t *)" again "); + while(1); + } + + /* Leds Control blocks */ + LCD_SetTextColor(Blue); + LCD_DrawRect(180, 310, 40, 60); + LCD_SetTextColor(Red); + LCD_DrawRect(180, 230, 40, 60); + LCD_SetTextColor(Yellow); + LCD_DrawRect(180, 150, 40, 60); + LCD_SetTextColor(Green); + LCD_DrawRect(180, 70, 40, 60); + +#ifdef IOE_INTERRUPT_MODE + /* Enable the Touch Screen and Joystick interrupts */ + IOE_ITConfig(IOE_ITSRC_JOYSTICK | IOE_ITSRC_TSC); +#endif /* IOE_INTERRUPT_MODE */ + + + while(1) + { +#ifdef IOE_POLLING_MODE + static JOY_State_TypeDef JoyState = JOY_NONE; + static TS_STATE* TS_State; + + /* Get the Joystick State */ + JoyState = IOE_JoyStickGetState(); + + switch (JoyState) + { + case JOY_NONE: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: ---- "); + break; + case JOY_UP: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: UP "); + break; + case JOY_DOWN: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: DOWN "); + break; + case JOY_LEFT: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: LEFT "); + break; + case JOY_RIGHT: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: RIGHT "); + break; + case JOY_CENTER: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: CENTER "); + break; + default: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: ERROR "); + break; + } + + /* Update the structure with the current position */ + TS_State = IOE_TS_GetState(); + + if ((TS_State->TouchDetected) && (TS_State->Y < 220) && (TS_State->Y > 180)) + { + if ((TS_State->X > 10) && (TS_State->X < 70)) + { + LCD_DisplayStringLine(Line6, (uint8_t *)" LD4 "); + STM_EVAL_LEDOn(LED4); + } + else if ((TS_State->X > 90) && (TS_State->X < 150)) + { + LCD_DisplayStringLine(Line6, (uint8_t *)" LD3 "); + STM_EVAL_LEDOn(LED3); + } + else if ((TS_State->X > 170) && (TS_State->X < 230)) + { + LCD_DisplayStringLine(Line6, (uint8_t *)" LD2 "); + STM_EVAL_LEDOn(LED2); + } + else if ((TS_State->X > 250) && (TS_State->X < 310)) + { + LCD_DisplayStringLine(Line6, (uint8_t *)" LD1 "); + STM_EVAL_LEDOn(LED1); + } + } + else + { + STM_EVAL_LEDOff(LED1); + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } +#endif /* IOE_POLLING_MODE */ + +#ifdef BUTTON_POLLING_MODE + /* Insert 10 ms delay */ + Delay(1); + + if (STM_EVAL_PBGetState(BUTTON_KEY) == 0) + { + /* Toggle LD1 */ + STM_EVAL_LEDToggle(LED1); + + LCD_DisplayStringLine(Line4, (uint8_t *)"Pol: KEY Pressed "); + } + + if (STM_EVAL_PBGetState(BUTTON_TAMPER) == 0) + { + /* Toggle LD2 */ + STM_EVAL_LEDToggle(LED2); + + LCD_DisplayStringLine(Line4, (uint8_t *)"Pol: TAMPER Pressed "); + } + + if (STM_EVAL_PBGetState(BUTTON_WAKEUP) != 0) + { + /* Toggle LD3 */ + STM_EVAL_LEDToggle(LED3); + LCD_DisplayStringLine(Line4, (uint8_t *)"Pol: WAKEUP Pressed "); + } +#endif + } +} + +/** + * @brief Inserts a delay time. + * @param nTime: specifies the delay time length, in 10 ms. + * @retval None + */ +void Delay(uint32_t nTime) +{ + TimingDelay = nTime; + + while(TimingDelay != 0); +} + +/** + * @brief Decrements the TimingDelay variable. + * @param None + * @retval None + */ +void TimingDelay_Decrement(void) +{ + if (TimingDelay != 0x00) + { + TimingDelay--; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + LCD_DisplayStringLine(Line0, "assert_param error!!"); + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/main.h new file mode 100644 index 000000000..e148ecb47 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/main.h @@ -0,0 +1,59 @@ +/** + ****************************************************************************** + * @file I2C/IOE/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" +#include "stm322xg_eval_lcd.h" +#include "stm322xg_eval_ioe.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +//#define BUTTON_POLLING_MODE +#define BUTTON_INTERRUPT_MODE + +//#define IOE_POLLING_MODE +#define IOE_INTERRUPT_MODE + +#ifdef BUTTON_POLLING_MODE + #define BUTTON_MODE BUTTON_MODE_GPIO +#else + #define BUTTON_MODE BUTTON_MODE_EXTI +#endif /* BUTTON_POLLING_MODE */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void TimingDelay_Decrement(void); +void Delay(__IO uint32_t nTime); + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/readme.txt new file mode 100644 index 000000000..4522e45c1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/readme.txt @@ -0,0 +1,100 @@ +/** + @page I2C_IOE Example on how to use the IO Expander + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file I2C/IOE/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the I2C IOExpander example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This firmware provides an example of configuring and using the IO Expander STMPE811 +in order to control input Joystick IOs, output IOs and the Touch Screen feature. +This example provides the elementary steps to control the following modules and +use them in an application: +The IO pins are used for: + - Getting Joystick pins status (Polling and interrupt) only for STM3210C-EVAL. + - The Touch Screen controller is used to get the Touched area detection information + in a single point mode (Polling and interrupt). + +The input information can be used either in Polling mode (uncomment the define +#define IOE_POLLING_MODE) or in Interrupt mode (uncomment the define #define +IOE_INTERRUPT_MODE). These defines are in main.h file. + +After configuring the IO Expander modules and Interrupts (if needed), the output +IOs are set to their default state. These operations are done by the functions: +IOE_Config() and IOE_ITConfig(). If the IO Expander is not operational (or the +I2C pins are not in the correct level) the IOE_Config() function returns a value +different from 0 and a message is displayed on the LCD screen. + +To get the status of an input: + - IOE_JoyStickGetState() function is used for Joystick and returns a JOY_State_TypeDef + value indicating the currently pressed key. This information is used to update + the LCD display (the Joystick pressed key name is displayed). + - IOE_TS_GetState() function is used for Touch Screen and returns a pointer to + a structure holding the Touch Screen status (did a Touch Detection happened, + X, Y, and Z positions). Only detection into the drawn rectangles areas is + considered and used to update the LEDs status and LCD display (corresponding + LED turned ON when its rectangle is touched, and the LED name is displayed on + the LCD screen). + +Besides, the examples checks the status of the other Push-Buttons implemented on +the board (Key, Tamper and WakeUp push-buttons). They are checked in parallel +with the IO Expander IOs and the LCD display and LEDs are updated according to +the push buttons state. + + +@par Directory contents + + - I2C/IOE/system_stm32f2xx.c STM32F2xx system clock configuration file + - I2C/IOE/stm32f2xx_conf.h Library Configuration file + - I2C/IOE/stm32f2xx_it.c Interrupt handlers + - I2C/IOE/stm32f2xx_it.h Interrupt handlers header file + - I2C/IOE/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB (with no + additional hardware), and can be easily tailored to any other development board. + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/stm32f2xx_conf.h new file mode 100644 index 000000000..542804676 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file I2C/IOE/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/stm32f2xx_it.c new file mode 100644 index 000000000..244953b23 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/stm32f2xx_it.c @@ -0,0 +1,320 @@ +/** + ****************************************************************************** + * @file I2C/IOE/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2C_IOE + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + TimingDelay_Decrement(); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles External line 0 interrupt request. + * @param None + * @retval None + */ +void EXTI0_IRQHandler(void) +{ + if(EXTI_GetITStatus(WAKEUP_BUTTON_EXTI_LINE) != RESET) + { + /* Toggle LD3 */ + STM_EVAL_LEDToggle(LED3); + + LCD_DisplayStringLine(Line4, (uint8_t *)"IT: WAKEUP Pressed "); + + EXTI_ClearITPendingBit(WAKEUP_BUTTON_EXTI_LINE); + } +} + +/** + * @brief This function handles External line 2 interrupt request. + * @param None + * @retval None + */ +void EXTI2_IRQHandler(void) +{ + if(EXTI_GetITStatus(IOE_IT_EXTI_LINE) != RESET) + { + +#ifdef IOE_INTERRUPT_MODE + static JOY_State_TypeDef JoyState = JOY_NONE; + static TS_STATE* TS_State; + + /* Check if the interrupt source is the Touch Screen */ + if (IOE_GetGITStatus(IOE_1_ADDR, IOE_TS_IT) & IOE_TS_IT) + { + /* Update the structure with the current position */ + TS_State = IOE_TS_GetState(); + + if ((TS_State->TouchDetected) && (TS_State->Y < 220) && (TS_State->Y > 180)) + { + if ((TS_State->X > 10) && (TS_State->X < 70)) + { + LCD_DisplayStringLine(Line6, (uint8_t *)" LD4 "); + STM_EVAL_LEDOn(LED4); + } + else if ((TS_State->X > 90) && (TS_State->X < 150)) + { + LCD_DisplayStringLine(Line6, (uint8_t *)" LD3 "); + STM_EVAL_LEDOn(LED3); + } + else if ((TS_State->X > 170) && (TS_State->X < 230)) + { + LCD_DisplayStringLine(Line6, (uint8_t *)" LD2 "); + STM_EVAL_LEDOn(LED2); + } + else if ((TS_State->X > 250) && (TS_State->X < 310)) + { + LCD_DisplayStringLine(Line6, (uint8_t *)" LD1 "); + STM_EVAL_LEDOn(LED1); + } + } + else + { + STM_EVAL_LEDOff(LED1); + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } + + /* Clear the interrupt pending bits */ + IOE_ClearGITPending(IOE_1_ADDR, IOE_TS_IT); + } + else if (IOE_GetGITStatus(IOE_2_ADDR, IOE_GIT_GPIO)) + { + /* Get the Joytick State */ + JoyState = IOE_JoyStickGetState(); + + switch (JoyState) + { + case JOY_NONE: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: IT ---- "); + break; + case JOY_UP: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: IT UP "); + break; + case JOY_DOWN: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: IT DOWN "); + break; + case JOY_LEFT: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: IT LEFT "); + break; + case JOY_RIGHT: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: IT RIGHT "); + break; + case JOY_CENTER: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: IT CENTER "); + break; + default: + LCD_DisplayStringLine(Line5, (uint8_t *)"JOY: IT ERROR "); + break; + } + + /* Clear the interrupt pending bits */ + IOE_ClearGITPending(IOE_2_ADDR, IOE_GIT_GPIO); + IOE_ClearIOITPending(IOE_2_ADDR, IOE_JOY_IT); + } + else + { + IOE_ClearGITPending(IOE_1_ADDR, ALL_IT); + IOE_ClearGITPending(IOE_2_ADDR, ALL_IT); + } +#endif /* IOE_INTERRUPT_MODE */ + + EXTI_ClearITPendingBit(IOE_IT_EXTI_LINE); + } +} + +/** + * @brief This function handles External lines 15 to 10 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + /* Toggle LD1 */ + STM_EVAL_LEDToggle(LED1); + + LCD_DisplayStringLine(Line4, (uint8_t *)"IT: KEY Pressed "); + + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + } + + if(EXTI_GetITStatus(TAMPER_BUTTON_EXTI_LINE) != RESET) + { + /* Toggle LD2 */ + STM_EVAL_LEDToggle(LED2); + + LCD_DisplayStringLine(Line4, (uint8_t *)"IT: TAMPER Pressed "); + + EXTI_ClearITPendingBit(TAMPER_BUTTON_EXTI_LINE); + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/stm32f2xx_it.h new file mode 100644 index 000000000..6a721ee18 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/stm32f2xx_it.h @@ -0,0 +1,63 @@ +/** + ****************************************************************************** + * @file I2C/IOE/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void EXTI0_IRQHandler(void); +void EXTI9_5_IRQHandler(void); +void EXTI15_10_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/IOE/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/readme.txt new file mode 100644 index 000000000..f884aec06 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2C/readme.txt @@ -0,0 +1,41 @@ +/** + @page I2C_EXAMPLES I2C EXAMPLES + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file I2C/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Reference to the I2C CPAL (UM1029). + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +In Addition to the I2C examples provided within this repository, ST is providing +a Communication peripheral application library (CPAL) for all STM32 I2C peripherals. +CPAL provides a high layer API, drivers for each STM32 device, a project template +allowing users to build a new project from scratch, and some examples showing how +to use and customize the CPAL library. + +For more details please refer to "Communication peripheral application library (CPAL) UM1029" +available for download on ST Microcontrollers . + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/audio_sample.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/audio_sample.c new file mode 100644 index 000000000..f4bfa17fc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/audio_sample.c @@ -0,0 +1,45622 @@ +#include "stm32f2xx.h" + +/* + The provided sample audio file (stored in internal flash memory) is extracted from: + - Title: artofgardens-instr + - Artist/Composer: Dan O'Connor + - Creative Commons license: Attribution 3.0 United States + Please read the license following this link: + http://creativecommons.org/licenses/by/3.0/us/ +*/ + +const uint16_t AUDIO_SAMPLE[] = { +0x4952, 0x4646, 0x4f6e, 0xf, 0x4157, 0x4556, 0x6d66, 0x2074, 0x12, 0, 0x1, +0x2, 0xbb80, 0, 0xee00, 0x2, 0x4, 0x10, 0, 0x6166, 0x7463, 0x4, +0, 0xd3cf, 0x3, 0x6164, 0x6174, 0x4f3c, 0xf, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0x1, 0, 0x1, 0, 0x1, +0, 0x1, 0, 0x1, 0, 0x1, 0, 0x1, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0x1, 0, 0x1, 0, 0x1, 0x1, 0x1, 0x1, +0x1, 0x1, 0x1, 0x1, 0x1, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0x1, 0, 0x1, 0, 0x1, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0x1, 0, 0x1, 0, 0x1, 0, +0x1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0x1, 0, 0x1, 0, +0x1, 0, 0x1, 0, 0x1, 0, 0x1, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0xffff, 0, 0xffff, 0, 0xffff, +0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0x1, 0, 0x1, 0, 0x1, +0, 0x1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0x1, 0, 0x1, 0, 0x1, 0x1, 0x1, 0x1, +0x1, 0x1, 0x1, 0x1, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0x1, 0, 0x1, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1, 0, +0x1, 0, 0x1, 0, 0x1, 0, 0x1, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, +0x1, 0x1, 0, 0x1, 0, 0x1, 0, 0x1, 0, 0x1, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0x1, 0, 0x1, +0, 0x1, 0, 0x1, 0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, +0x1, 0x1, 0x1, 0x1, 0x1, 0, 0x1, 0, 0, 0xffff, 0, +0xffff, 0, 0, 0, 0, 0xffff, 0xffff, 0xffff, 0xffff, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0x1, 0x1, 0x1, +0x1, 0, 0, 0, 0, 0, 0, 0, 0, 0xffff, 0, +0xffff, 0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0, 0, 0, +0, 0xffff, 0, 0xffff, 0, 0xffff, 0, 0xffff, 0, 0xffff, 0, +0xffff, 0, 0, 0, 0, 0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, +0xffff, 0xffff, 0, 0xffff, 0, 0xffff, 0, 0xffff, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0x1, 0, 0x1, 0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, +0x1, 0x1, 0, 0, 0, 0, 0x1, 0x1, 0x1, 0x1, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0xffff, 0, +0xffff, 0, 0xffff, 0, 0xffff, 0, 0xfffe, 0, 0xfffe, 0, 0xfffe, +0, 0xfffe, 0, 0xfffe, 0, 0xfffe, 0, 0xfffe, 0, 0xfffe, 0, +0xfffe, 0, 0xfffe, 0, 0xfffe, 0, 0xffff, 0x1, 0xffff, 0x1, 0xffff, +0, 0xffff, 0, 0, 0x1, 0, 0x1, 0, 0x1, 0, 0x1, +0, 0x1, 0, 0x1, 0, 0x1, 0xffff, 0, 0xffff, 0, 0, +0x1, 0, 0x1, 0, 0, 0, 0, 0x1, 0x1, 0x1, 0x1, +0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0, 0, 0, 0, 0xffff, +0, 0xffff, 0, 0xfffd, 0xfffe, 0xfffd, 0xfffe, 0xfffe, 0xffff, 0xfffe, 0xffff, +0xfffd, 0xfffe, 0xfffd, 0xfffe, 0xfffd, 0xfffe, 0xfffe, 0xffff, 0xfffe, 0xffff, 0xfffc, +0xfffd, 0xfffc, 0xfffd, 0xfffe, 0, 0xfffe, 0, 0xfffd, 0xfffe, 0xfffd, 0xfffe, +0xfffe, 0xffff, 0xfffe, 0xffff, 0xffff, 0, 0xffff, 0, 0xffff, 0, 0x1, +0x2, 0x1, 0x2, 0, 0x1, 0, 0x1, 0xffff, 0, 0xffff, 0, +0, 0x1, 0, 0x1, 0xffff, 0, 0xffff, 0, 0xffff, 0, 0, +0x1, 0, 0x1, 0xffff, 0x1, 0xffff, 0x1, 0x1, 0x2, 0x1, 0x2, +0xfffe, 0xffff, 0xfffe, 0xffff, 0x1, 0x2, 0x1, 0x2, 0xfffe, 0xffff, 0xfffe, +0xffff, 0xfffe, 0xffff, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, +0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, +0x2, 0, 0, 0, 0, 0, 0, 0x1, 0x1, 0x1, 0x1, +0x2, 0x2, 0x2, 0x2, 0xfffe, 0xffff, 0xfffe, 0xffff, 0xfffd, 0xffff, 0xfffd, +0xffff, 0xfffc, 0xfffe, 0xfffc, 0xfffe, 0xfffc, 0xfffe, 0xfffd, 0, 0xfffd, 0, +0xfff7, 0xfffa, 0xfff7, 0xfffa, 0xfffa, 0xfffd, 0xfffa, 0xfffd, 0xfff6, 0xfff9, 0xfff6, +0xfff9, 0xfffa, 0xfffd, 0xfffa, 0xfffd, 0xfff8, 0xfff9, 0xfff8, 0xfff9, 0xfff8, 0xfff9, +0xfffd, 0xfffd, 0xfffd, 0xfffd, 0, 0xffff, 0, 0xffff, 0x1, 0xffff, 0x1, +0xffff, 0x2, 0, 0x2, 0, 0x1, 0xfffe, 0x1, 0xfffe, 0x3, 0, +0x3, 0, 0x3, 0, 0x2, 0, 0x2, 0, 0x5, 0x4, 0x5, +0x4, 0x1, 0x2, 0x1, 0x2, 0, 0x3, 0, 0x3, 0xfffa, 0xfffe, +0xfffa, 0xfffe, 0xfffa, 0xfffe, 0xfffb, 0x1, 0xfffb, 0x1, 0xfffa, 0, 0xfffa, +0, 0xfff7, 0xfffe, 0xfff7, 0xfffe, 0xfffc, 0x2, 0xfffc, 0x2, 0xfff9, 0xfffe, +0xfff9, 0xfffe, 0xfff8, 0xfffd, 0xfff8, 0xfffd, 0xfff8, 0xfffd, 0xffff, 0x2, 0xffff, +0x2, 0x1, 0x4, 0x1, 0x4, 0x6, 0x8, 0x6, 0x8, 0x2, 0x4, +0x2, 0x4, 0x5, 0x8, 0x5, 0x8, 0x5, 0x8, 0xfffe, 0x2, 0xfffe, +0x2, 0xfffd, 0x3, 0xfffd, 0x3, 0x2, 0xa, 0x2, 0xa, 0xffff, 0x9, +0xffff, 0x9, 0xfffd, 0x8, 0xfffd, 0x8, 0xfff9, 0x5, 0xfff9, 0x5, 0xfff9, +0x5, 0xfff7, 0x4, 0xfff7, 0x4, 0xfff5, 0x1, 0xfff5, 0x1, 0xfffb, 0x6, +0xfffb, 0x6, 0xfff4, 0xfffe, 0xfff4, 0xfffe, 0xfffd, 0x6, 0xfffd, 0x6, 0xfffa, +0x1, 0xfffa, 0x1, 0xfffa, 0x1, 0xfffc, 0x1, 0xfffc, 0x1, 0xfffd, 0x1, +0xfffd, 0x1, 0xfffc, 0, 0xfffc, 0, 0xfff7, 0xfffb, 0xfff7, 0xfffb, 0xfffa, +0xffff, 0xfffa, 0xffff, 0xfffa, 0xffff, 0xfffd, 0x2, 0xfffd, 0x2, 0xfffb, 0x2, +0xfffb, 0x2, 0xfffe, 0x6, 0xfffe, 0x6, 0xfffe, 0x7, 0xfffe, 0x7, 0xfff9, +0x4, 0xfff9, 0x4, 0xfff5, 0, 0xfff5, 0, 0xfff5, 0, 0, 0xb, +0, 0xb, 0xfff4, 0, 0xfff4, 0, 0xfffc, 0x8, 0xfffc, 0x8, 0xfffd, +0x8, 0xfffd, 0x8, 0xfffd, 0x8, 0xfffd, 0x8, 0xfff5, 0x1, 0xfff5, 0x1, +0xfff5, 0x1, 0xfffd, 0x8, 0xfffd, 0x8, 0xfff6, 0, 0xfff6, 0, 0xfffa, +0x4, 0xfffa, 0x4, 0x4, 0xe, 0x4, 0xe, 0, 0xa, 0, 0xa, +0, 0xa, 0xfffb, 0x4, 0xfffb, 0x4, 0xfffb, 0x4, 0xfffb, 0x4, 0, +0x8, 0, 0x8, 0xfff7, 0xffff, 0xfff7, 0xffff, 0xfffe, 0x6, 0xfffe, 0x6, +0xfff5, 0xfffe, 0xfff5, 0xfffe, 0xfff5, 0xfffe, 0xfffa, 0x4, 0xfffa, 0x4, 0xfff5, +0x1, 0xfff5, 0x1, 0x5, 0x12, 0x5, 0x12, 0xfffd, 0xb, 0xfffd, 0xb, +0x6, 0x15, 0x6, 0x15, 0xfff7, 0x6, 0xfff7, 0x6, 0xfff7, 0x6, 0xfff9, +0x8, 0xfff9, 0x8, 0x2, 0x10, 0x2, 0x10, 0xfff6, 0x2, 0xfff6, 0x2, +0xc, 0x14, 0xc, 0x14, 0xfff9, 0xffff, 0xfff9, 0xffff, 0xfff9, 0xffff, 0xe, +0x10, 0xe, 0x10, 0xb, 0xa, 0xb, 0xa, 0x2, 0xfffe, 0x2, 0xfffe, +0xa, 0x3, 0xa, 0x3, 0x3, 0xfffb, 0x3, 0xfffb, 0x4, 0xfffb, 0x4, +0xfffb, 0x4, 0xfffb, 0x6, 0xfffd, 0x6, 0xfffd, 0xa, 0x1, 0xa, 0x1, +0xb, 0x3, 0xb, 0x3, 0xfffb, 0xfff4, 0xfffb, 0xfff4, 0x12, 0xb, 0x12, +0xb, 0x6, 0xffff, 0x6, 0xffff, 0x6, 0xffff, 0x9, 0x1, 0x9, 0x1, +0xf, 0x6, 0xf, 0x6, 0xa, 0, 0xa, 0, 0xf, 0x3, 0xf, +0x3, 0x3, 0xfff6, 0x3, 0xfff6, 0x3, 0xfff6, 0xd, 0, 0xd, 0, +0x5, 0xfff9, 0x5, 0xfff9, 0xf, 0x5, 0xf, 0x5, 0xfffb, 0xfff4, 0xfffb, +0xfff4, 0x6, 0x2, 0x6, 0x2, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, +0xfff9, 0xfffc, 0xfff9, 0xfffc, 0x1, 0x8, 0x1, 0x8, 0x4, 0xd, 0x4, +0xd, 0x9, 0x13, 0x9, 0x13, 0x9, 0x14, 0x9, 0x14, 0xa, 0x14, +0xa, 0x14, 0xa, 0x14, 0, 0x8, 0, 0x8, 0x4, 0x9, 0x4, +0x9, 0x6, 0x9, 0x6, 0x9, 0xf, 0xf, 0xf, 0xf, 0xfffa, 0xfff8, +0xfffa, 0xfff8, 0xfffa, 0xfff8, 0x8, 0x4, 0x8, 0x4, 0xa, 0x6, 0xa, +0x6, 0xfffb, 0xfff6, 0xfffb, 0xfff6, 0x5, 0, 0x5, 0, 0x4, 0xfffe, +0x4, 0xfffe, 0xfffd, 0xfff6, 0xfffd, 0xfff6, 0xfffd, 0xfff6, 0x6, 0xfffe, 0x6, +0xfffe, 0xa, 0x1, 0xa, 0x1, 0x14, 0x9, 0x14, 0x9, 0x5, 0xfff7, +0x5, 0xfff7, 0xa, 0xfff9, 0xa, 0xfff9, 0x16, 0x3, 0x16, 0x3, 0x16, +0x3, 0x1b, 0x8, 0x1b, 0x8, 0x20, 0xd, 0x20, 0xd, 0x13, 0x2, +0x13, 0x2, 0x11, 0x2, 0x11, 0x2, 0x8, 0xfffd, 0x8, 0xfffd, 0x8, +0xfffd, 0xc, 0x5, 0xc, 0x5, 0xfff7, 0xfff4, 0xfff7, 0xfff4, 0xb, 0xc, +0xb, 0xc, 0x3, 0x8, 0x3, 0x8, 0x5, 0xc, 0x5, 0xc, 0x16, +0x20, 0x16, 0x20, 0x16, 0x20, 0x13, 0x1e, 0x13, 0x1e, 0x3, 0xf, +0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0xc, 0x1a, 0xc, 0x1a, 0xfffe, +0xd, 0xfffe, 0xd, 0xe, 0x1f, 0xe, 0x1f, 0xe, 0x1f, 0xfffe, 0x12, +0xfffe, 0x12, 0xfff6, 0xd, 0xfff6, 0xd, 0xfffd, 0x18, 0xfffd, 0x18, 0xfff0, +0xe, 0xfff0, 0xe, 0xfff6, 0x16, 0xfff6, 0x16, 0xfff6, 0x16, 0x8, 0x29, +0x8, 0x29, 0xffff, 0x1f, 0xffff, 0x1f, 0xfffb, 0x18, 0xfffb, 0x18, 0xfff6, +0xf, 0xfff6, 0xf, 0xfffe, 0x12, 0xfffe, 0x12, 0xfffa, 0x9, 0xfffa, 0x9, +0xfffa, 0x9, 0x7, 0x11, 0x7, 0x11, 0x5, 0xa, 0x5, 0xa, 0x8, +0xa, 0x8, 0xa, 0x11, 0x12, 0x11, 0x12, 0x4, 0x5, 0x4, 0x5, +0x7, 0xb, 0x7, 0xb, 0x7, 0xb, 0x1b, 0x23, 0x1b, 0x23, 0x17, +0x21, 0x17, 0x21, 0x6, 0x14, 0x6, 0x14, 0x4, 0x14, 0x4, 0x14, +0xffec, 0xfffd, 0xffec, 0xfffd, 0xffec, 0xfffd, 0xfffb, 0xa, 0xfffb, 0xa, 0x3, +0xf, 0x3, 0xf, 0xb, 0x13, 0xb, 0x13, 0x9, 0xc, 0x9, 0xc, +0x15, 0x13, 0x15, 0x13, 0x1c, 0x16, 0x1c, 0x16, 0x1c, 0x16, 0x21, +0x19, 0x21, 0x19, 0x9, 0x1, 0x9, 0x1, 0x10, 0x9, 0x10, 0x9, +0xe, 0xd, 0xe, 0xd, 0x13, 0x18, 0x13, 0x18, 0x13, 0x18, 0xa, +0x17, 0xa, 0x17, 0xfff2, 0x7, 0xfff2, 0x7, 0x3, 0x20, 0x3, 0x20, +0xfff1, 0x14, 0xfff1, 0x14, 0xfff8, 0x20, 0xfff8, 0x20, 0xffef, 0x19, 0xffef, +0x19, 0xffef, 0x19, 0xc, 0x35, 0xc, 0x35, 0xfff5, 0x1b, 0xfff5, 0x1b, +0x1a, 0x3b, 0x1a, 0x3b, 0x9, 0x24, 0x9, 0x24, 0x7, 0x1c, 0x7, +0x1c, 0xf, 0x1f, 0xf, 0x1f, 0xf, 0x1f, 0xfff6, 0, 0xfff6, 0, +0xb, 0x10, 0xb, 0x10, 0xfff6, 0xfff8, 0xfff6, 0xfff8, 0xc, 0xd, 0xc, +0xd, 0xfff3, 0xfff3, 0xfff3, 0xfff3, 0xfff3, 0xfff3, 0xfff1, 0xfff1, 0xfff1, 0xfff1, +0xffec, 0xffec, 0xffec, 0xffec, 0xfff3, 0xfff4, 0xfff3, 0xfff4, 0x6, 0x7, 0x6, +0x7, 0xa, 0xb, 0xa, 0xb, 0xfff9, 0xfffc, 0xfff9, 0xfffc, 0xfff9, 0xfffc, +0xc, 0xf, 0xc, 0xf, 0xfffa, 0xfffe, 0xfffa, 0xfffe, 0x8, 0xd, 0x8, +0xd, 0xffff, 0x5, 0xffff, 0x5, 0xfff8, 0, 0xfff8, 0, 0xfffe, 0x7, +0xfffe, 0x7, 0xfffe, 0x7, 0x4, 0xe, 0x4, 0xe, 0xfffa, 0x5, 0xfffa, +0x5, 0xffd8, 0xffe3, 0xffd8, 0xffe3, 0xc, 0x17, 0xc, 0x17, 0xffe6, 0xfff0, +0xffe6, 0xfff0, 0xffe6, 0xfff0, 0x9, 0x12, 0x9, 0x12, 0x11, 0x19, 0x11, +0x19, 0x12, 0x19, 0x12, 0x19, 0x7, 0xd, 0x7, 0xd, 0x5, 0xa, +0x5, 0xa, 0xfff7, 0xfffd, 0xfff7, 0xfffd, 0xfff7, 0xfffd, 0xfff4, 0xfffa, 0xfff4, +0xfffa, 0x24, 0x2a, 0x24, 0x2a, 0x16, 0x1c, 0x16, 0x1c, 0x18, 0x1e, +0x18, 0x1e, 0x16, 0x1c, 0x16, 0x1c, 0xf, 0x13, 0xf, 0x13, 0xf, +0x13, 0x10, 0x11, 0x10, 0x11, 0x1b, 0x17, 0x1b, 0x17, 0x12, 0x9, +0x12, 0x9, 0x11, 0x2, 0x11, 0x2, 0x10, 0xfffa, 0x10, 0xfffa, 0x10, +0xfffa, 0x2e, 0x13, 0x2e, 0x13, 0x25, 0x6, 0x25, 0x6, 0x39, 0x17, +0x39, 0x17, 0xd, 0xffeb, 0xd, 0xffeb, 0x1d, 0xfffd, 0x1d, 0xfffd, 0x27, +0xc, 0x27, 0xc, 0x27, 0xc, 0x10, 0xfffb, 0x10, 0xfffb, 0x33, 0x25, +0x33, 0x25, 0xb, 0x4, 0xb, 0x4, 0x1b, 0x1b, 0x1b, 0x1b, 0x5, +0xb, 0x5, 0xb, 0xfff8, 0x1, 0xfff8, 0x1, 0xfff8, 0x1, 0x6, 0x10, +0x6, 0x10, 0x1, 0xa, 0x1, 0xa, 0xfffb, 0, 0xfffb, 0, 0xfffd, +0xfffe, 0xfffd, 0xfffe, 0xffe9, 0xffe3, 0xffe9, 0xffe3, 0xffe9, 0xffe3, 0xfff6, 0xffea, +0xfff6, 0xffea, 0x1, 0xffef, 0x1, 0xffef, 0x13, 0xfffb, 0x13, 0xfffb, 0x29, +0xd, 0x29, 0xd, 0x22, 0x3, 0x22, 0x3, 0x29, 0x7, 0x29, 0x7, +0x29, 0x7, 0x20, 0xfffd, 0x20, 0xfffd, 0xd, 0xffe9, 0xd, 0xffe9, 0x1c, +0xfff7, 0x1c, 0xfff7, 0x26, 0, 0x26, 0, 0x25, 0xfffd, 0x25, 0xfffd, +0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x28, 0xfff8, 0x28, 0xfff8, 0x19, +0xffe5, 0x19, 0xffe5, 0x7, 0xffcf, 0x7, 0xffcf, 0x1a, 0xffdf, 0x1a, 0xffdf, +0xa, 0xffce, 0xa, 0xffce, 0xa, 0xffce, 0xd, 0xffd1, 0xd, 0xffd1, 0xfffa, +0xffc1, 0xfffa, 0xffc1, 0x21, 0xffee, 0x21, 0xffee, 0xd, 0xffe1, 0xd, 0xffe1, +0xffe5, 0xffc2, 0xffe5, 0xffc2, 0xffe9, 0xffd1, 0xffe9, 0xffd1, 0xffe9, 0xffd1, 0xffdd, +0xffd0, 0xffdd, 0xffd0, 0xffef, 0xffed, 0xffef, 0xffed, 0xffd9, 0xffe3, 0xffd9, 0xffe3, +0xffe3, 0xfff6, 0xffe3, 0xfff6, 0xffdc, 0xfff7, 0xffdc, 0xfff7, 0xffcb, 0xffed, 0xffcb, +0xffed, 0xffcb, 0xffed, 0xffd8, 0xffff, 0xffd8, 0xffff, 0xffea, 0x15, 0xffea, 0x15, +0xffdd, 0xd, 0xffdd, 0xd, 0, 0x33, 0, 0x33, 0xfff7, 0x2f, 0xfff7, +0x2f, 0xfff7, 0x2f, 0xffef, 0x2a, 0xffef, 0x2a, 0xfff6, 0x37, 0xfff6, 0x37, +0xffe1, 0x27, 0xffe1, 0x27, 0xffcf, 0x19, 0xffcf, 0x19, 0xffdb, 0x29, 0xffdb, +0x29, 0xffcd, 0x1e, 0xffcd, 0x1e, 0xffcd, 0x1e, 0xffcd, 0x20, 0xffcd, 0x20, +0xffd0, 0x20, 0xffd0, 0x20, 0xffbd, 0xb, 0xffbd, 0xb, 0xffb9, 0, 0xffb9, +0, 0xff9f, 0xffde, 0xff9f, 0xffde, 0xffde, 0x14, 0xffde, 0x14, 0xffde, 0x14, +0xffd2, 0xfffd, 0xffd2, 0xfffd, 0xffca, 0xffe9, 0xffca, 0xffe9, 0xffc9, 0xffdf, 0xffc9, +0xffdf, 0xffd2, 0xffde, 0xffd2, 0xffde, 0xffd2, 0xffd6, 0xffd2, 0xffd6, 0xffd2, 0xffd6, +0xffc2, 0xffc1, 0xffc2, 0xffc1, 0xffcf, 0xffc9, 0xffcf, 0xffc9, 0xffe2, 0xffda, 0xffe2, +0xffda, 0xffee, 0xffe4, 0xffee, 0xffe4, 0xffec, 0xffe1, 0xffec, 0xffe1, 0xfffe, 0xfff1, +0xfffe, 0xfff1, 0xfffe, 0xfff1, 0xffe8, 0xffda, 0xffe8, 0xffda, 0xffe1, 0xffd0, 0xffe1, +0xffd0, 0xfff6, 0xffe0, 0xfff6, 0xffe0, 0xfffb, 0xffe1, 0xfffb, 0xffe1, 0xb, 0xffec, +0xb, 0xffec, 0x23, 0, 0x23, 0, 0x23, 0, 0x13, 0xffec, 0x13, +0xffec, 0x16, 0xffee, 0x16, 0xffee, 0xfff6, 0xffcf, 0xfff6, 0xffcf, 0xffed, 0xffc9, +0xffed, 0xffc9, 0xffee, 0xffcf, 0xffee, 0xffcf, 0xffee, 0xffcf, 0xffe5, 0xffce, 0xffe5, +0xffce, 0xffe9, 0xffda, 0xffe9, 0xffda, 0xffe6, 0xffe0, 0xffe6, 0xffe0, 0xffc2, 0xffc3, +0xffc2, 0xffc3, 0xffe3, 0xffeb, 0xffe3, 0xffeb, 0xffd0, 0xffdc, 0xffd0, 0xffdc, 0xffd0, +0xffdc, 0xffe0, 0xffec, 0xffe0, 0xffec, 0xfff9, 0x3, 0xfff9, 0x3, 0xffd2, 0xffd7, +0xffd2, 0xffd7, 0xa, 0x7, 0xa, 0x7, 0xffd1, 0xffc6, 0xffd1, 0xffc6, 0xffd1, +0xffc6, 0xfff0, 0xffdc, 0xfff0, 0xffdc, 0x1, 0xffe5, 0x1, 0xffe5, 0xf, 0xffed, +0xf, 0xffed, 0x1a, 0xfff3, 0x1a, 0xfff3, 0x4, 0xffda, 0x4, 0xffda, 0xfffc, +0xffd3, 0xfffc, 0xffd3, 0xfffc, 0xffd3, 0x2, 0xffda, 0x2, 0xffda, 0xb, 0xffe6, +0xb, 0xffe6, 0x2, 0xffe1, 0x2, 0xffe1, 0x2, 0xffe5, 0x2, 0xffe5, 0xe, +0xfff4, 0xe, 0xfff4, 0x6, 0xffee, 0x6, 0xffee, 0x6, 0xffee, 0x28, 0x11, +0x28, 0x11, 0x3d, 0x26, 0x3d, 0x26, 0xfffd, 0xffe5, 0xfffd, 0xffe5, 0x13, +0xfffa, 0x13, 0xfffa, 0xfffe, 0xffe3, 0xfffe, 0xffe3, 0xfffe, 0xffe3, 0x16, 0xfffb, +0x16, 0xfffb, 0xe, 0xfff2, 0xe, 0xfff2, 0x3f, 0x23, 0x3f, 0x23, 0xb, +0xffef, 0xb, 0xffef, 0x1d, 0x3, 0x1d, 0x3, 0x20, 0x8, 0x20, 0x8, +0x20, 0x8, 0xffd8, 0xffc1, 0xffd8, 0xffc1, 0x9, 0xfff4, 0x9, 0xfff4, 0xfffd, +0xffe9, 0xfffd, 0xffe9, 0x7, 0xfff4, 0x7, 0xfff4, 0xffe7, 0xffd4, 0xffe7, 0xffd4, +0xc, 0xfff8, 0xc, 0xfff8, 0xc, 0xfff8, 0xfff6, 0xffe2, 0xfff6, 0xffe2, 0x3, +0xffee, 0x3, 0xffee, 0x3, 0xffee, 0x3, 0xffee, 0xfff7, 0xffe1, 0xfff7, 0xffe1, +0x15, 0xfffe, 0x15, 0xfffe, 0x15, 0xfffe, 0x1a, 0x1, 0x1a, 0x1, 0xfff7, +0xffdc, 0xfff7, 0xffdc, 0xfff8, 0xffda, 0xfff8, 0xffda, 0xffd5, 0xffb4, 0xffd5, 0xffb4, +0xfff0, 0xffca, 0xfff0, 0xffca, 0xffef, 0xffc5, 0xffef, 0xffc5, 0xffef, 0xffc5, 0xffe1, +0xffb2, 0xffe1, 0xffb2, 0xfff0, 0xffbd, 0xfff0, 0xffbd, 0xffcb, 0xff96, 0xffcb, 0xff96, +0x5, 0xffd1, 0x5, 0xffd1, 0xffd1, 0xffa0, 0xffd1, 0xffa0, 0x11, 0xffe6, 0x11, +0xffe6, 0x11, 0xffe6, 0xfffd, 0xffdb, 0xfffd, 0xffdb, 0x4, 0xffee, 0x4, 0xffee, +0x8, 0, 0x8, 0, 0xfff0, 0xfff4, 0xfff0, 0xfff4, 0xffeb, 0xfffa, 0xffeb, +0xfffa, 0xffeb, 0xfffa, 0xffe2, 0xfffb, 0xffe2, 0xfffb, 0xffe8, 0x6, 0xffe8, 0x6, +0xffbc, 0xffdb, 0xffbc, 0xffdb, 0xffe8, 0x4, 0xffe8, 0x4, 0xffde, 0xfff3, 0xffde, +0xfff3, 0xffef, 0xfffa, 0xffef, 0xfffa, 0xffef, 0xfffa, 0xffda, 0xffda, 0xffda, 0xffda, +0xffe5, 0xffd9, 0xffe5, 0xffd9, 0x4, 0xffef, 0x4, 0xffef, 0x11, 0xfff5, 0x11, +0xfff5, 0x6, 0xffe8, 0x6, 0xffe8, 0xa, 0xffed, 0xa, 0xffed, 0xa, 0xffed, +0xf, 0xfff6, 0xf, 0xfff6, 0x15, 0x3, 0x15, 0x3, 0xffef, 0xffe5, 0xffef, +0xffe5, 0xffd4, 0xffd3, 0xffd4, 0xffd3, 0xffe2, 0xffe6, 0xffe2, 0xffe6, 0xffe2, 0xffe6, +0xffdc, 0xffe4, 0xffdc, 0xffe4, 0xc, 0x12, 0xc, 0x12, 0x14, 0x16, 0x14, +0x16, 0xfff4, 0xffef, 0xfff4, 0xffef, 0x2, 0xfff4, 0x2, 0xfff4, 0x18, 0, +0x18, 0, 0x18, 0, 0x6, 0xffe5, 0x6, 0xffe5, 0x19, 0xfff1, 0x19, +0xfff1, 0x10, 0xffe4, 0x10, 0xffe4, 0x13, 0xffe9, 0x13, 0xffe9, 0x5, 0xffde, +0x5, 0xffde, 0xfffc, 0xffdd, 0xfffc, 0xffdd, 0xfffc, 0xffdd, 0xfff6, 0xffe2, 0xfff6, +0xffe2, 0x8, 0xfffe, 0x8, 0xfffe, 0x19, 0x1a, 0x19, 0x1a, 0xfff0, 0xfffb, +0xfff0, 0xfffb, 0xffed, 0, 0xffed, 0, 0xffed, 0, 0xfff4, 0xc, 0xfff4, +0xc, 0xffcf, 0xffea, 0xffcf, 0xffea, 0xfff1, 0xe, 0xfff1, 0xe, 0xffeb, 0x9, +0xffeb, 0x9, 0xffe3, 0x2, 0xffe3, 0x2, 0xfffa, 0x1b, 0xfffa, 0x1b, 0xfffa, +0x1b, 0xffd0, 0xfff4, 0xffd0, 0xfff4, 0xffdc, 0x5, 0xffdc, 0x5, 0xfffb, 0x29, +0xfffb, 0x29, 0xe, 0x41, 0xe, 0x41, 0xffe0, 0x18, 0xffe0, 0x18, 0x1, +0x3d, 0x1, 0x3d, 0x1, 0x3d, 0xffe1, 0x1d, 0xffe1, 0x1d, 0xffd5, 0xf, +0xffd5, 0xf, 0xffdf, 0x13, 0xffdf, 0x13, 0xffd9, 0x4, 0xffd9, 0x4, 0xffe1, +0x1, 0xffe1, 0x1, 0xffe1, 0x1, 0xffed, 0x1, 0xffed, 0x1, 0x18, 0x20, +0x18, 0x20, 0x15, 0x12, 0x15, 0x12, 0x2a, 0x1e, 0x2a, 0x1e, 0xfffb, +0xffe9, 0xfffb, 0xffe9, 0x10, 0xfffa, 0x10, 0xfffa, 0x10, 0xfffa, 0x29, 0x11, +0x29, 0x11, 0x1e, 0x6, 0x1e, 0x6, 0x12, 0xfffa, 0x12, 0xfffa, 0, +0xffe8, 0, 0xffe8, 0x15, 0xfffb, 0x15, 0xfffb, 0x3, 0xffe7, 0x3, 0xffe7, +0x3, 0xffe7, 0xfff2, 0xffd2, 0xfff2, 0xffd2, 0x29, 0x4, 0x29, 0x4, 0xfff9, +0xffd0, 0xfff9, 0xffd0, 0xfffa, 0xffcd, 0xfffa, 0xffcd, 0x1b, 0xffec, 0x1b, 0xffec, +0x1b, 0xffec, 0x11, 0xffe3, 0x11, 0xffe3, 0xfffe, 0xffd5, 0xfffe, 0xffd5, 0x3, +0xffe3, 0x3, 0xffe3, 0x16, 0, 0x16, 0, 0xf, 0x6, 0xf, 0x6, +0x1b, 0x1f, 0x1b, 0x1f, 0x1b, 0x1f, 0xf, 0x1e, 0xf, 0x1e, 0xf, +0x28, 0xf, 0x28, 0xffdb, 0xfff8, 0xffdb, 0xfff8, 0xb, 0x2a, 0xb, 0x2a, +0xffe1, 0xfffc, 0xffe1, 0xfffc, 0xfff2, 0x7, 0xfff2, 0x7, 0xfff2, 0x7, 0x3, +0xf, 0x3, 0xf, 0xc, 0xc, 0xc, 0xc, 0x8, 0xfffe, 0x8, 0xfffe, +0xfff2, 0xffde, 0xfff2, 0xffde, 0xd, 0xfff2, 0xd, 0xfff2, 0xd, 0xfff2, 0xb, +0xffeb, 0xb, 0xffeb, 0x30, 0xd, 0x30, 0xd, 0xfffe, 0xffd9, 0xfffe, 0xffd9, +0x38, 0x12, 0x38, 0x12, 0x23, 0xfffc, 0x23, 0xfffc, 0x8, 0xffdf, 0x8, +0xffdf, 0x8, 0xffdf, 0x23, 0xfff5, 0x23, 0xfff5, 0x26, 0xfff1, 0x26, 0xfff1, +0x29, 0xffeb, 0x29, 0xffeb, 0x16, 0xffce, 0x16, 0xffce, 0x23, 0xffcf, 0x23, +0xffcf, 0x23, 0xffcf, 0x2f, 0xffd2, 0x2f, 0xffd2, 0x11, 0xffac, 0x11, 0xffac, +0x6a, 0x2, 0x6a, 0x2, 0x40, 0xffd9, 0x40, 0xffd9, 0x46, 0xffe3, 0x46, +0xffe3, 0x54, 0xfffa, 0x54, 0xfffa, 0x54, 0xfffa, 0x1d, 0xffcf, 0x1d, 0xffcf, +0x51, 0x11, 0x51, 0x11, 0xfff2, 0xffc0, 0xfff2, 0xffc0, 0x22, 0xfffc, 0x22, +0xfffc, 0x13, 0xfff8, 0x13, 0xfff8, 0x36, 0x21, 0x36, 0x21, 0x36, 0x21, +0x31, 0x1f, 0x31, 0x1f, 0x19, 0x7, 0x19, 0x7, 0x11, 0xfffb, 0x11, +0xfffb, 0x13, 0xfff8, 0x13, 0xfff8, 0x15, 0xfff3, 0x15, 0xfff3, 0x15, 0xfff3, +0xd, 0xffe5, 0xd, 0xffe5, 0x2d, 0xffff, 0x2d, 0xffff, 0x10, 0xffde, 0x10, +0xffde, 0x15, 0xffe1, 0x15, 0xffe1, 0x2d, 0xfff9, 0x2d, 0xfff9, 0x58, 0x25, +0x58, 0x25, 0x58, 0x25, 0x14, 0xffe4, 0x14, 0xffe4, 0x33, 0x8, 0x33, +0x8, 0x1b, 0xfff5, 0x1b, 0xfff5, 0x4, 0xffe5, 0x4, 0xffe5, 0xc, 0xfff2, +0xc, 0xfff2, 0x2e, 0x1a, 0x2e, 0x1a, 0x2e, 0x1a, 0xb, 0xfffd, 0xb, +0xfffd, 0xb, 0x1, 0xb, 0x1, 0x2d, 0x28, 0x2d, 0x28, 0xfff1, 0xffef, +0xfff1, 0xffef, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0xf, 0xe, 0xf, +0xe, 0x24, 0x20, 0x24, 0x20, 0x1e, 0x17, 0x1e, 0x17, 0x28, 0x1a, +0x28, 0x1a, 0x1f, 0xb, 0x1f, 0xb, 0, 0xffe5, 0, 0xffe5, 0, +0xffe5, 0xfff8, 0xffd7, 0xfff8, 0xffd7, 0xc, 0xffe9, 0xc, 0xffe9, 0xfff8, 0xffd3, +0xfff8, 0xffd3, 0x10, 0xffef, 0x10, 0xffef, 0xfffe, 0xffe4, 0xfffe, 0xffe4, 0xfff1, +0xffe3, 0xfff1, 0xffe3, 0xfff1, 0xffe3, 0, 0xffff, 0, 0xffff, 0xffd9, 0xffe8, +0xffd9, 0xffe8, 0xffd8, 0xfff8, 0xffd8, 0xfff8, 0xffe9, 0x18, 0xffe9, 0x18, 0xffda, +0x16, 0xffda, 0x16, 0xffda, 0x16, 0xfff3, 0x36, 0xfff3, 0x36, 0xffef, 0x36, +0xffef, 0x36, 0xffc0, 0x5, 0xffc0, 0x5, 0xffdc, 0x1d, 0xffdc, 0x1d, 0xfff2, +0x2b, 0xfff2, 0x2b, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x2c, 0x53, +0x2c, 0x53, 0x41, 0x62, 0x41, 0x62, 0x27, 0x45, 0x27, 0x45, 0xfff8, +0x17, 0xfff8, 0x17, 0xfffd, 0x21, 0xfffd, 0x21, 0x15, 0x42, 0x15, 0x42, +0x15, 0x42, 0xffdc, 0x13, 0xffdc, 0x13, 0xfff5, 0x37, 0xfff5, 0x37, 0xffde, +0x2b, 0xffde, 0x2b, 0xfff2, 0x46, 0xfff2, 0x46, 0xfff1, 0x4a, 0xfff1, 0x4a, +0xfff1, 0x4a, 0x3, 0x5d, 0x3, 0x5d, 0xffed, 0x44, 0xffed, 0x44, 0xfffa, +0x4b, 0xfffa, 0x4b, 0xffed, 0x36, 0xffed, 0x36, 0xfff1, 0x32, 0xfff1, 0x32, +0xd, 0x45, 0xd, 0x45, 0xd, 0x45, 0xfff5, 0x27, 0xfff5, 0x27, 0x3a, +0x66, 0x3a, 0x66, 0xffca, 0xfff2, 0xffca, 0xfff2, 0xfff9, 0x1f, 0xfff9, 0x1f, +0xffd4, 0xfff6, 0xffd4, 0xfff6, 0xffe4, 0x3, 0xffe4, 0x3, 0xffe4, 0x3, 0xffbc, +0xffd5, 0xffbc, 0xffd5, 0xffc7, 0xffd6, 0xffc7, 0xffd6, 0xffd0, 0xffd4, 0xffd0, 0xffd4, +0xffe0, 0xffd6, 0xffe0, 0xffd6, 0x2, 0xffe7, 0x2, 0xffe7, 0x2, 0xffe7, 0x63, +0x37, 0x63, 0x37, 0x10b, 0xce, 0x10b, 0xce, 0x14e, 0x102, 0x14e, 0x102, +0x20a, 0x1b1, 0x20a, 0x1b1, 0x237, 0x1d4, 0x237, 0x1d4, 0x2b7, 0x24c, 0x2b7, +0x24c, 0x2b7, 0x24c, 0x2f9, 0x287, 0x2f9, 0x287, 0x3b0, 0x339, 0x3b0, 0x339, +0x426, 0x3a7, 0x426, 0x3a7, 0x4a5, 0x41d, 0x4a5, 0x41d, 0x4ed, 0x459, 0x4ed, +0x459, 0x52d, 0x48a, 0x52d, 0x48a, 0x52d, 0x48a, 0x557, 0x4a2, 0x557, 0x4a2, +0x58d, 0x4c7, 0x58d, 0x4c7, 0x5c7, 0x4f1, 0x5c7, 0x4f1, 0x632, 0x552, 0x632, +0x552, 0x63c, 0x558, 0x63c, 0x558, 0x63c, 0x558, 0x62a, 0x54d, 0x62a, 0x54d, +0x646, 0x57a, 0x646, 0x57a, 0x587, 0x4d9, 0x587, 0x4d9, 0x4dc, 0x457, 0x4dc, +0x457, 0x390, 0x33d, 0x390, 0x33d, 0x2e6, 0x2cb, 0x2e6, 0x2cb, 0x2e6, 0x2cb, +0x18e, 0x1ae, 0x18e, 0x1ae, 0x87, 0xe1, 0x87, 0xe1, 0xff0e, 0xff9d, 0xff0e, +0xff9d, 0xfde8, 0xfea3, 0xfde8, 0xfea3, 0xfca1, 0xfd7f, 0xfca1, 0xfd7f, 0xfbf0, 0xfce6, +0xfbf0, 0xfce6, 0xfbf0, 0xfce6, 0xfb70, 0xfc74, 0xfb70, 0xfc74, 0xfae0, 0xfbe9, 0xfae0, +0xfbe9, 0xfab8, 0xfbbf, 0xfab8, 0xfbbf, 0xfa2f, 0xfb33, 0xfa2f, 0xfb33, 0xfa26, 0xfb25, +0xfa26, 0xfb25, 0xfa26, 0xfb25, 0xf99a, 0xfa98, 0xf99a, 0xfa98, 0xfa1c, 0xfb1d, 0xfa1c, +0xfb1d, 0xfa10, 0xfb19, 0xfa10, 0xfb19, 0xfa3b, 0xfb52, 0xfa3b, 0xfb52, 0xf9f9, 0xfb22, +0xf9f9, 0xfb22, 0xf9c1, 0xfb00, 0xf9c1, 0xfb00, 0xf9c1, 0xfb00, 0xf979, 0xfacd, 0xf979, +0xfacd, 0xf92c, 0xfa95, 0xf92c, 0xfa95, 0xf86e, 0xf9e8, 0xf86e, 0xf9e8, 0xf7e9, 0xf970, +0xf7e9, 0xf970, 0xf6e8, 0xf876, 0xf6e8, 0xf876, 0xf599, 0xf72a, 0xf599, 0xf72a, 0xf599, +0xf72a, 0xf4c3, 0xf653, 0xf4c3, 0xf653, 0xf40f, 0xf59b, 0xf40f, 0xf59b, 0xf45e, 0xf5e4, +0xf45e, 0xf5e4, 0xf478, 0xf5fa, 0xf478, 0xf5fa, 0xf4e5, 0xf666, 0xf4e5, 0xf666, 0xf4e5, +0xf666, 0xf508, 0xf68c, 0xf508, 0xf68c, 0xf562, 0xf6ed, 0xf562, 0xf6ed, 0xf557, 0xf6ef, +0xf557, 0xf6ef, 0xf565, 0xf70e, 0xf565, 0xf70e, 0xf4c5, 0xf682, 0xf4c5, 0xf682, 0xf471, +0xf645, 0xf471, 0xf645, 0xf471, 0xf645, 0xf3a2, 0xf58e, 0xf3a2, 0xf58e, 0xf2fc, 0xf4fe, +0xf2fc, 0xf4fe, 0xf1f0, 0xf407, 0xf1f0, 0xf407, 0xf132, 0xf358, 0xf132, 0xf358, 0xf15e, +0xf38f, 0xf15e, 0xf38f, 0xf15e, 0xf38f, 0xf1aa, 0xf3e0, 0xf1aa, 0xf3e0, 0xf230, 0xf464, +0xf230, 0xf464, 0xf251, 0xf47d, 0xf251, 0xf47d, 0xf2b8, 0xf4d7, 0xf2b8, 0xf4d7, 0xf26a, +0xf479, 0xf26a, 0xf479, 0xf288, 0xf484, 0xf288, 0xf484, 0xf288, 0xf484, 0xf214, 0xf3fe, +0xf214, 0xf3fe, 0xf215, 0xf3ef, 0xf215, 0xf3ef, 0xf19d, 0xf36b, 0xf19d, 0xf36b, 0xf19a, +0xf362, 0xf19a, 0xf362, 0xf11e, 0xf2e7, 0xf11e, 0xf2e7, 0xf0e6, 0xf2b7, 0xf0e6, 0xf2b7, +0xf0e6, 0xf2b7, 0xf120, 0xf300, 0xf120, 0xf300, 0xf114, 0xf309, 0xf114, 0xf309, 0xf11e, +0xf32c, 0xf11e, 0xf32c, 0xf0bc, 0xf2e5, 0xf0bc, 0xf2e5, 0xf0b8, 0xf2fd, 0xf0b8, 0xf2fd, +0xf0b8, 0xf2fd, 0xf07f, 0xf2dd, 0xf07f, 0xf2dd, 0xf040, 0xf2b3, 0xf040, 0xf2b3, 0xef6e, +0xf1f2, 0xef6e, 0xf1f2, 0xef15, 0xf1a4, 0xef15, 0xf1a4, 0xeea7, 0xf13c, 0xeea7, 0xf13c, +0xeded, 0xf085, 0xeded, 0xf085, 0xeded, 0xf085, 0xed37, 0xefd0, 0xed37, 0xefd0, 0xecbe, +0xef58, 0xecbe, 0xef58, 0xec72, 0xef0e, 0xec72, 0xef0e, 0xec60, 0xef01, 0xec60, 0xef01, +0xec2c, 0xeed4, 0xec2c, 0xeed4, 0xec87, 0xef39, 0xec87, 0xef39, 0xec87, 0xef39, 0xec22, +0xeede, 0xec22, 0xeede, 0xec8f, 0xef54, 0xec8f, 0xef54, 0xec8f, 0xef5a, 0xec8f, 0xef5a, +0xeca7, 0xef73, 0xeca7, 0xef73, 0xed40, 0xf004, 0xed40, 0xf004, 0xed40, 0xf004, 0xed81, +0xf037, 0xed81, 0xf037, 0xed95, 0xf034, 0xed95, 0xf034, 0xed4a, 0xefcd, 0xed4a, 0xefcd, +0xedf9, 0xf05d, 0xedf9, 0xf05d, 0xee14, 0xf058, 0xee14, 0xf058, 0xef06, 0xf12d, 0xef06, +0xf12d, 0xef06, 0xf12d, 0xef14, 0xf124, 0xef14, 0xf124, 0xf063, 0xf264, 0xf063, 0xf264, +0xf0c7, 0xf2c4, 0xf0c7, 0xf2c4, 0xf14c, 0xf34d, 0xf14c, 0xf34d, 0xf184, 0xf392, 0xf184, +0xf392, 0xf140, 0xf360, 0xf140, 0xf360, 0xf140, 0xf360, 0xf101, 0xf334, 0xf101, 0xf334, +0xf052, 0xf296, 0xf052, 0xf296, 0xf07e, 0xf2cf, 0xf07e, 0xf2cf, 0xf00c, 0xf260, 0xf00c, +0xf260, 0xf01e, 0xf26c, 0xf01e, 0xf26c, 0xf01e, 0xf26c, 0xef8a, 0xf1ca, 0xef8a, 0xf1ca, +0xf001, 0xf229, 0xf001, 0xf229, 0xf045, 0xf250, 0xf045, 0xf250, 0xf123, 0xf30f, 0xf123, +0xf30f, 0xf144, 0xf313, 0xf144, 0xf313, 0xf192, 0xf348, 0xf192, 0xf348, 0xf192, 0xf348, +0xf194, 0xf337, 0xf194, 0xf337, 0xf195, 0xf32e, 0xf195, 0xf32e, 0xf1c7, 0xf35e, 0xf1c7, +0xf35e, 0xf154, 0xf2ee, 0xf154, 0xf2ee, 0xf105, 0xf2a8, 0xf105, 0xf2a8, 0xf061, 0xf20d, +0xf061, 0xf20d, 0xf061, 0xf20d, 0xf0d5, 0xf28a, 0xf0d5, 0xf28a, 0xf068, 0xf223, 0xf068, +0xf223, 0xf026, 0xf1e2, 0xf026, 0xf1e2, 0xf094, 0xf24d, 0xf094, 0xf24d, 0xf11a, 0xf2cd, +0xf11a, 0xf2cd, 0xf11a, 0xf2cd, 0xf0d2, 0xf27e, 0xf0d2, 0xf27e, 0xf0f9, 0xf29e, 0xf0f9, +0xf29e, 0xf181, 0xf322, 0xf181, 0xf322, 0xf147, 0xf2e8, 0xf147, 0xf2e8, 0xf097, 0xf23b, +0xf097, 0xf23b, 0xf026, 0xf1d1, 0xf026, 0xf1d1, 0xf026, 0xf1d1, 0xf0ea, 0xf29d, 0xf0ea, +0xf29d, 0xf0ab, 0xf262, 0xf0ab, 0xf262, 0xf07c, 0xf231, 0xf07c, 0xf231, 0xf24a, 0xf3f3, +0xf24a, 0xf3f3, 0xf3df, 0xf56f, 0xf3df, 0xf56f, 0xf5e0, 0xf749, 0xf5e0, 0xf749, 0xf5e0, +0xf749, 0xf7b1, 0xf8e5, 0xf7b1, 0xf8e5, 0xf957, 0xfa48, 0xf957, 0xfa48, 0xf9ee, 0xfa93, +0xf9ee, 0xfa93, 0xfb88, 0xfbda, 0xfb88, 0xfbda, 0xfdd1, 0xfdce, 0xfdd1, 0xfdce, 0xfdd1, +0xfdce, 0xff9d, 0xff49, 0xff9d, 0xff49, 0x24e, 0x1ae, 0x24e, 0x1ae, 0x40a, 0x326, +0x40a, 0x326, 0x65a, 0x538, 0x65a, 0x538, 0x745, 0x5ec, 0x745, 0x5ec, 0x8df, +0x752, 0x8df, 0x752, 0x8df, 0x752, 0x9ae, 0x7ee, 0x9ae, 0x7ee, 0xc73, 0xa7d, +0xc73, 0xa7d, 0xf7d, 0xd4a, 0xf7d, 0xd4a, 0x115b, 0xee7, 0x115b, 0xee7, 0x12af, +0xff4, 0x12af, 0xff4, 0x10a8, 0xda4, 0x10a8, 0xda4, 0x10a8, 0xda4, 0x1133, 0xde9, +0x1133, 0xde9, 0x1387, 0xfff, 0x1387, 0xfff, 0x16a9, 0x12f2, 0x16a9, 0x12f2, 0x16c0, +0x12ed, 0x16c0, 0x12ed, 0x15e6, 0x120e, 0x15e6, 0x120e, 0x15e6, 0x120e, 0x15e1, 0x121d, +0x15e1, 0x121d, 0x14f3, 0x115a, 0x14f3, 0x115a, 0x1470, 0x1115, 0x1470, 0x1115, 0x1344, +0x1033, 0x1344, 0x1033, 0x1262, 0xfa1, 0x1262, 0xfa1, 0x1295, 0x1021, 0x1295, 0x1021, +0x1295, 0x1021, 0x13e4, 0x11b0, 0x13e4, 0x11b0, 0x139a, 0x1196, 0x139a, 0x1196, 0x12c6, +0x10de, 0x12c6, 0x10de, 0x1287, 0x10a5, 0x1287, 0x10a5, 0x1135, 0xf46, 0x1135, 0xf46, +0x1227, 0x101d, 0x1227, 0x101d, 0x1227, 0x101d, 0x12d6, 0x10a8, 0x12d6, 0x10a8, 0x1307, +0x10b4, 0x1307, 0x10b4, 0x14e2, 0x1270, 0x14e2, 0x1270, 0x1518, 0x1292, 0x1518, 0x1292, +0x143c, 0x11b0, 0x143c, 0x11b0, 0x143c, 0x11b0, 0x135f, 0x10dc, 0x135f, 0x10dc, 0x1354, +0x10e8, 0x1354, 0x10e8, 0x1122, 0xed6, 0x1122, 0xed6, 0xfec, 0xdc6, 0xfec, 0xdc6, +0xfe0, 0xddf, 0xfe0, 0xddf, 0xca5, 0xac4, 0xca5, 0xac4, 0xca5, 0xac4, 0xc37, +0xa6c, 0xc37, 0xa6c, 0xb7a, 0x9ba, 0xb7a, 0x9ba, 0xb57, 0x997, 0xb57, 0x997, +0xc0a, 0xa40, 0xc0a, 0xa40, 0xab9, 0x8e1, 0xab9, 0x8e1, 0xbbf, 0x9d9, 0xbbf, +0x9d9, 0xbbf, 0x9d9, 0xa6d, 0x87d, 0xa6d, 0x87d, 0xa8e, 0x89f, 0xa8e, 0x89f, +0x965, 0x784, 0x965, 0x784, 0x78b, 0x5c6, 0x78b, 0x5c6, 0x5d2, 0x436, 0x5d2, +0x436, 0x5d2, 0x436, 0x237, 0xd1, 0x237, 0xd1, 0x246, 0x11d, 0x246, 0x11d, +0xff20, 0xfe37, 0xff20, 0xfe37, 0xfe08, 0xfd5f, 0xfe08, 0xfd5f, 0xfd3d, 0xfccc, 0xfd3d, +0xfccc, 0xfacc, 0xfa8d, 0xfacc, 0xfa8d, 0xfacc, 0xfa8d, 0xfa71, 0xfa57, 0xfa71, 0xfa57, +0xf974, 0xf976, 0xf974, 0xf976, 0xfa2d, 0xfa41, 0xfa2d, 0xfa41, 0xfa98, 0xfab8, 0xfa98, +0xfab8, 0xfab3, 0xfad9, 0xfab3, 0xfad9, 0xfab3, 0xfad9, 0xf9e1, 0xfa0c, 0xf9e1, 0xfa0c, +0xf80b, 0xf83c, 0xf80b, 0xf83c, 0xf752, 0xf78b, 0xf752, 0xf78b, 0xf5cb, 0xf60e, 0xf5cb, +0xf60e, 0xf533, 0xf582, 0xf533, 0xf582, 0xf42b, 0xf488, 0xf42b, 0xf488, 0xf42b, 0xf488, +0xf29f, 0xf309, 0xf29f, 0xf309, 0xf245, 0xf2b8, 0xf245, 0xf2b8, 0xf138, 0xf1b1, 0xf138, +0xf1b1, 0xf0f5, 0xf16f, 0xf0f5, 0xf16f, 0xf0c2, 0xf136, 0xf0c2, 0xf136, 0xf0c6, 0xf132, +0xf0c6, 0xf132, 0xf0c6, 0xf132, 0xf05a, 0xf0b9, 0xf05a, 0xf0b9, 0xf020, 0xf071, 0xf020, +0xf071, 0xf14c, 0xf18f, 0xf14c, 0xf18f, 0xf116, 0xf14c, 0xf116, 0xf14c, 0xf082, 0xf0ad, +0xf082, 0xf0ad, 0xf082, 0xf0ad, 0xf106, 0xf127, 0xf106, 0xf127, 0xf05a, 0xf072, 0xf05a, +0xf072, 0xf0eb, 0xf0fc, 0xf0eb, 0xf0fc, 0xf0c8, 0xf0d1, 0xf0c8, 0xf0d1, 0xf187, 0xf185, +0xf187, 0xf185, 0xf1d4, 0xf1c4, 0xf1d4, 0xf1c4, 0xf1d4, 0xf1c4, 0xf1d6, 0xf1b4, 0xf1d6, +0xf1b4, 0xf340, 0xf305, 0xf340, 0xf305, 0xf34b, 0xf2f5, 0xf34b, 0xf2f5, 0xf56c, 0xf4f6, +0xf56c, 0xf4f6, 0xf624, 0xf58a, 0xf624, 0xf58a, 0xf905, 0xf847, 0xf905, 0xf847, 0xf905, +0xf847, 0xfadb, 0xf9f7, 0xfadb, 0xf9f7, 0xfbf2, 0xfae8, 0xfbf2, 0xfae8, 0xfe46, 0xfd16, +0xfe46, 0xfd16, 0xff62, 0xfe0e, 0xff62, 0xfe0e, 0x18e, 0x14, 0x18e, 0x14, 0x18e, +0x14, 0x2a1, 0x103, 0x2a1, 0x103, 0x432, 0x26c, 0x432, 0x26c, 0x5f7, 0x40a, +0x5f7, 0x40a, 0x6ff, 0x4e8, 0x6ff, 0x4e8, 0x980, 0x73f, 0x980, 0x73f, 0xbfe, +0x992, 0xbfe, 0x992, 0xbfe, 0x992, 0xdcd, 0xb37, 0xdcd, 0xb37, 0x1004, 0xd45, +0x1004, 0xd45, 0x12b0, 0xfcb, 0x12b0, 0xfcb, 0x15c0, 0x12b9, 0x15c0, 0x12b9, 0x179b, +0x1477, 0x179b, 0x1477, 0x1a3a, 0x16fe, 0x1a3a, 0x16fe, 0x1a3a, 0x16fe, 0x1d2c, 0x19dc, +0x1d2c, 0x19dc, 0x1ed8, 0x1b7a, 0x1ed8, 0x1b7a, 0x20bc, 0x1d52, 0x20bc, 0x1d52, 0x22fc, +0x1f89, 0x22fc, 0x1f89, 0x2363, 0x1fe9, 0x2363, 0x1fe9, 0x2363, 0x1fe9, 0x2536, 0x21b8, +0x2536, 0x21b8, 0x2592, 0x2212, 0x2592, 0x2212, 0x26f3, 0x2374, 0x26f3, 0x2374, 0x24e6, +0x216a, 0x24e6, 0x216a, 0x231c, 0x1fa9, 0x231c, 0x1fa9, 0x2314, 0x1faf, 0x2314, 0x1faf, +0x2314, 0x1faf, 0x1fd2, 0x1c82, 0x1fd2, 0x1c82, 0x1fe2, 0x1cae, 0x1fe2, 0x1cae, 0x1d6f, +0x1a5e, 0x1d6f, 0x1a5e, 0x1ea5, 0x1bbd, 0x1ea5, 0x1bbd, 0x1d40, 0x1a85, 0x1d40, 0x1a85, +0x1d03, 0x1a77, 0x1d03, 0x1a77, 0x1d03, 0x1a77, 0x1cfc, 0x1a9f, 0x1cfc, 0x1a9f, 0x1b22, +0x18f2, 0x1b22, 0x18f2, 0x1bbe, 0x19b8, 0x1bbe, 0x19b8, 0x1bfd, 0x1a1b, 0x1bfd, 0x1a1b, +0x1e15, 0x1c50, 0x1e15, 0x1c50, 0x1e15, 0x1c50, 0x1cf7, 0x1b4a, 0x1cf7, 0x1b4a, 0x1c15, +0x1a79, 0x1c15, 0x1a79, 0x1b52, 0x19c2, 0x1b52, 0x19c2, 0x1983, 0x17fc, 0x1983, 0x17fc, +0x1822, 0x16a2, 0x1822, 0x16a2, 0x16d7, 0x155e, 0x16d7, 0x155e, 0x16d7, 0x155e, 0x16b3, +0x1543, 0x16b3, 0x1543, 0x15c8, 0x1463, 0x15c8, 0x1463, 0x13a4, 0x124e, 0x13a4, 0x124e, +0x12b4, 0x116f, 0x12b4, 0x116f, 0x1011, 0xee3, 0x1011, 0xee3, 0xfe2, 0xecc, 0xfe2, +0xecc, 0xfe2, 0xecc, 0x1013, 0xf19, 0x1013, 0xf19, 0x11c8, 0x10eb, 0x11c8, 0x10eb, +0x1144, 0x1085, 0x1144, 0x1085, 0x106c, 0xfcb, 0x106c, 0xfcb, 0x103f, 0xfbd, 0x103f, +0xfbd, 0x103f, 0xfbd, 0xefa, 0xe95, 0xefa, 0xe95, 0xd60, 0xd18, 0xd60, 0xd18, +0xc8a, 0xc5e, 0xc8a, 0xc5e, 0xdd4, 0xdc3, 0xdd4, 0xdc3, 0xc31, 0xc3a, 0xc31, +0xc3a, 0xb1b, 0xb3e, 0xb1b, 0xb3e, 0xb1b, 0xb3e, 0x734, 0x770, 0x734, 0x770, +0x590, 0x5e5, 0x590, 0x5e5, 0x12c, 0x199, 0x12c, 0x199, 0xad, 0x133, 0xad, +0x133, 0xfed3, 0xff73, 0xfed3, 0xff73, 0xfcd3, 0xfd8c, 0xfcd3, 0xfd8c, 0xfcd3, 0xfd8c, +0xfa22, 0xfaf4, 0xfa22, 0xfaf4, 0xf742, 0xf82d, 0xf742, 0xf82d, 0xf766, 0xf868, 0xf766, +0xf868, 0xf3db, 0xf4f3, 0xf3db, 0xf4f3, 0xf573, 0xf69d, 0xf573, 0xf69d, 0xf573, 0xf69d, +0xf454, 0xf58d, 0xf454, 0xf58d, 0xf577, 0xf6b9, 0xf577, 0xf6b9, 0xf1da, 0xf320, 0xf1da, +0xf320, 0xf011, 0xf155, 0xf011, 0xf155, 0xeee1, 0xf01c, 0xeee1, 0xf01c, 0xec52, 0xed81, +0xec52, 0xed81, 0xec52, 0xed81, 0xec76, 0xed94, 0xec76, 0xed94, 0xea79, 0xeb85, 0xea79, +0xeb85, 0xea57, 0xeb50, 0xea57, 0xeb50, 0xe9f1, 0xeadb, 0xe9f1, 0xeadb, 0xeb03, 0xebe0, +0xeb03, 0xebe0, 0xecce, 0xeda3, 0xecce, 0xeda3, 0xecce, 0xeda3, 0xec56, 0xed2b, 0xec56, +0xed2b, 0xec66, 0xed40, 0xec66, 0xed40, 0xed6f, 0xee54, 0xed6f, 0xee54, 0xee66, 0xef5b, +0xee66, 0xef5b, 0xeffc, 0xf104, 0xeffc, 0xf104, 0xeffc, 0xf104, 0xf073, 0xf191, 0xf073, +0xf191, 0xf184, 0xf2b8, 0xf184, 0xf2b8, 0xf053, 0xf19c, 0xf053, 0xf19c, 0xf0c5, 0xf221, +0xf0c5, 0xf221, 0xf0c2, 0xf230, 0xf0c2, 0xf230, 0xf1d5, 0xf352, 0xf1d5, 0xf352, 0xf1d5, +0xf352, 0xf1e6, 0xf370, 0xf1e6, 0xf370, 0xf403, 0xf599, 0xf403, 0xf599, 0xf45f, 0xf602, +0xf45f, 0xf602, 0xf2dd, 0xf48c, 0xf2dd, 0xf48c, 0xf1a1, 0xf35e, 0xf1a1, 0xf35e, 0xf1b9, +0xf384, 0xf1b9, 0xf384, 0xf1b9, 0xf384, 0xf3a1, 0xf57c, 0xf3a1, 0xf57c, 0xf2dd, 0xf4c8, +0xf2dd, 0xf4c8, 0xf43b, 0xf636, 0xf43b, 0xf636, 0xf3e3, 0xf5ed, 0xf3e3, 0xf5ed, 0xf686, +0xf89e, 0xf686, 0xf89e, 0xf686, 0xf89e, 0xf51d, 0xf740, 0xf51d, 0xf740, 0xf47a, 0xf6a7, +0xf47a, 0xf6a7, 0xf318, 0xf54c, 0xf318, 0xf54c, 0xf328, 0xf562, 0xf328, 0xf562, 0xf616, +0xf857, 0xf616, 0xf857, 0xf68a, 0xf8d1, 0xf68a, 0xf8d1, 0xf68a, 0xf8d1, 0xf3d4, 0xf623, +0xf3d4, 0xf623, 0xf0ed, 0xf345, 0xf0ed, 0xf345, 0xf04b, 0xf2ad, 0xf04b, 0xf2ad, 0xf180, +0xf3ed, 0xf180, 0xf3ed, 0xf14e, 0xf3c8, 0xf14e, 0xf3c8, 0xf14e, 0xf3c8, 0xf04b, 0xf2d1, +0xf04b, 0xf2d1, 0xf140, 0xf3d0, 0xf140, 0xf3d0, 0xee52, 0xf0eb, 0xee52, 0xf0eb, 0xef35, +0xf1d4, 0xef35, 0xf1d4, 0xed19, 0xefbe, 0xed19, 0xefbe, 0xeec6, 0xf16e, 0xeec6, 0xf16e, +0xeec6, 0xf16e, 0xf064, 0xf30f, 0xf064, 0xf30f, 0xf300, 0xf5ae, 0xf300, 0xf5ae, 0xf315, +0xf5c8, 0xf315, 0xf5c8, 0xefff, 0xf2b9, 0xefff, 0xf2b9, 0xef40, 0xf204, 0xef40, 0xf204, +0xf01f, 0xf2ef, 0xf01f, 0xf2ef, 0xf01f, 0xf2ef, 0xf2c3, 0xf5a3, 0xf2c3, 0xf5a3, 0xf19b, +0xf48b, 0xf19b, 0xf48b, 0xf177, 0xf47a, 0xf177, 0xf47a, 0xefdd, 0xf2f1, 0xefdd, 0xf2f1, +0xee8e, 0xf1b1, 0xee8e, 0xf1b1, 0xee8e, 0xf1b1, 0xed15, 0xf045, 0xed15, 0xf045, 0xecbd, +0xeff7, 0xecbd, 0xeff7, 0xea8e, 0xedcf, 0xea8e, 0xedcf, 0xebb0, 0xeef5, 0xebb0, 0xeef5, +0xed1e, 0xf065, 0xed1e, 0xf065, 0xef82, 0xf2ca, 0xef82, 0xf2ca, 0xef82, 0xf2ca, 0xec86, +0xefd0, 0xec86, 0xefd0, 0xeb81, 0xeecd, 0xeb81, 0xeecd, 0xed27, 0xf076, 0xed27, 0xf076, +0xed2c, 0xf07f, 0xed2c, 0xf07f, 0xf109, 0xf45e, 0xf109, 0xf45e, 0xefa7, 0xf2fe, 0xefa7, +0xf2fe, 0xefa7, 0xf2fe, 0xf1c0, 0xf516, 0xf1c0, 0xf516, 0xf267, 0xf5b7, 0xf267, 0xf5b7, +0xf30f, 0xf654, 0xf30f, 0xf654, 0xf27b, 0xf5b0, 0xf27b, 0xf5b0, 0xf191, 0xf4b1, 0xf191, +0xf4b1, 0xf191, 0xf4b1, 0xf3a0, 0xf6a7, 0xf3a0, 0xf6a7, 0xf39b, 0xf687, 0xf39b, 0xf687, +0xf44d, 0xf71d, 0xf44d, 0xf71d, 0xf2a4, 0xf55a, 0xf2a4, 0xf55a, 0xeff1, 0xf290, 0xeff1, +0xf290, 0xeed9, 0xf167, 0xeed9, 0xf167, 0xeed9, 0xf167, 0xed31, 0xefb1, 0xed31, 0xefb1, +0xed8d, 0xf004, 0xed8d, 0xf004, 0xea37, 0xeca7, 0xea37, 0xeca7, 0xeb6d, 0xedd6, 0xeb6d, +0xedd6, 0xecfd, 0xef5c, 0xecfd, 0xef5c, 0xed5e, 0xefaf, 0xed5e, 0xefaf, 0xed5e, 0xefaf, +0xeb7c, 0xedb8, 0xeb7c, 0xedb8, 0xe73d, 0xe95b, 0xe73d, 0xe95b, 0xe6ff, 0xe8f7, 0xe6ff, +0xe8f7, 0xe561, 0xe72c, 0xe561, 0xe72c, 0xe71b, 0xe8b4, 0xe71b, 0xe8b4, 0xe71b, 0xe8b4, +0xe52d, 0xe68f, 0xe52d, 0xe68f, 0xe5e1, 0xe70d, 0xe5e1, 0xe70d, 0xe5e3, 0xe6dc, 0xe5e3, +0xe6dc, 0xe8dd, 0xe9a7, 0xe8dd, 0xe9a7, 0xe7d4, 0xe875, 0xe7d4, 0xe875, 0xe658, 0xe6d5, +0xe658, 0xe6d5, 0xe658, 0xe6d5, 0xe717, 0xe775, 0xe717, 0xe775, 0xe93b, 0xe97e, 0xe93b, +0xe97e, 0xee20, 0xee47, 0xee20, 0xee47, 0xef55, 0xef5d, 0xef55, 0xef5d, 0xf1b3, 0xf197, +0xf1b3, 0xf197, 0xf136, 0xf0ef, 0xf136, 0xf0ef, 0xf136, 0xf0ef, 0xf475, 0xf3fc, 0xf475, +0xf3fc, 0xf617, 0xf563, 0xf617, 0xf563, 0xf853, 0xf760, 0xf853, 0xf760, 0xf822, 0xf6ec, +0xf822, 0xf6ec, 0xfc84, 0xfb0c, 0xfc84, 0xfb0c, 0xfc84, 0xfb0c, 0xff73, 0xfdbd, 0xff73, +0xfdbd, 0xfede, 0xfcf2, 0xfede, 0xfcf2, 0x169, 0xff52, 0x169, 0xff52, 0x1ba, 0xff84, +0x1ba, 0xff84, 0x4b7, 0x26e, 0x4b7, 0x26e, 0x68c, 0x43d, 0x68c, 0x43d, 0x68c, +0x43d, 0x667, 0x41a, 0x667, 0x41a, 0x810, 0x5cc, 0x810, 0x5cc, 0x795, 0x55f, +0x795, 0x55f, 0xa50, 0x828, 0xa50, 0x828, 0xb8a, 0x96f, 0xb8a, 0x96f, 0xa7e, +0x86c, 0xa7e, 0x86c, 0xa7e, 0x86c, 0xe44, 0xc37, 0xe44, 0xc37, 0xb3b, 0x92f, +0xb3b, 0x92f, 0xc26, 0xa18, 0xc26, 0xa18, 0x9b4, 0x7a1, 0x9b4, 0x7a1, 0x869, +0x653, 0x869, 0x653, 0x869, 0x653, 0x874, 0x65a, 0x874, 0x65a, 0x987, 0x76d, +0x987, 0x76d, 0xd71, 0xb5a, 0xd71, 0xb5a, 0xd65, 0xb53, 0xd65, 0xb53, 0xfef, +0xde5, 0xfef, 0xde5, 0x10bc, 0xebb, 0x10bc, 0xebb, 0x10bc, 0xebb, 0x12ad, 0x10b5, +0x12ad, 0x10b5, 0x13d0, 0x11e0, 0x13d0, 0x11e0, 0x13e2, 0x11f8, 0x13e2, 0x11f8, 0x1561, +0x137a, 0x1561, 0x137a, 0x1638, 0x1452, 0x1638, 0x1452, 0x1784, 0x159c, 0x1784, 0x159c, +0x1784, 0x159c, 0x18cb, 0x16e0, 0x18cb, 0x16e0, 0x1777, 0x158a, 0x1777, 0x158a, 0x191e, +0x1731, 0x191e, 0x1731, 0x1b0c, 0x1921, 0x1b0c, 0x1921, 0x1c57, 0x1a72, 0x1c57, 0x1a72, +0x1c57, 0x1a72, 0x1c48, 0x1a6c, 0x1c48, 0x1a6c, 0x1d6e, 0x1b9f, 0x1d6e, 0x1b9f, 0x1ded, +0x1c30, 0x1ded, 0x1c30, 0x1fb8, 0x1e0f, 0x1fb8, 0x1e0f, 0x1e67, 0x1cd4, 0x1e67, 0x1cd4, +0x1abc, 0x1940, 0x1abc, 0x1940, 0x1abc, 0x1940, 0x1760, 0x15fc, 0x1760, 0x15fc, 0x17f4, +0x16a8, 0x17f4, 0x16a8, 0x1b71, 0x1a3c, 0x1b71, 0x1a3c, 0x17c2, 0x16a4, 0x17c2, 0x16a4, +0x1929, 0x1824, 0x1929, 0x1824, 0x1815, 0x1729, 0x1815, 0x1729, 0x1815, 0x1729, 0x1793, +0x16c0, 0x1793, 0x16c0, 0x16a3, 0x15eb, 0x16a3, 0x15eb, 0x1541, 0x14a3, 0x1541, 0x14a3, +0x14f7, 0x1475, 0x14f7, 0x1475, 0x14f0, 0x1489, 0x14f0, 0x1489, 0x14f0, 0x1489, 0x14e8, +0x149a, 0x14e8, 0x149a, 0x150a, 0x14d4, 0x150a, 0x14d4, 0x1141, 0x111e, 0x1141, 0x111e, +0xc36, 0xc24, 0xc36, 0xc24, 0xb3a, 0xb34, 0xb3a, 0xb34, 0xa73, 0xa75, 0xa73, +0xa75, 0xa73, 0xa75, 0xa8e, 0xa95, 0xa8e, 0xa95, 0x67e, 0x687, 0x67e, 0x687, +0x3fe, 0x408, 0x3fe, 0x408, 0xffd8, 0xffe0, 0xffd8, 0xffe0, 0xfeaf, 0xfeb6, 0xfeaf, +0xfeb6, 0xfde5, 0xfde9, 0xfde5, 0xfde9, 0xfde5, 0xfde9, 0xfce9, 0xfcec, 0xfce9, 0xfcec, +0xfcfd, 0xfcfd, 0xfcfd, 0xfcfd, 0xfe87, 0xfe83, 0xfe87, 0xfe83, 0xfe25, 0xfe1c, 0xfe25, +0xfe1c, 0xfc0d, 0xfbfd, 0xfc0d, 0xfbfd, 0xfc0d, 0xfbfd, 0xfb80, 0xfb65, 0xfb80, 0xfb65, +0xf976, 0xf94d, 0xf976, 0xf94d, 0xf958, 0xf91c, 0xf958, 0xf91c, 0xfa8b, 0xfa3a, 0xfa8b, +0xfa3a, 0xf975, 0xf90b, 0xf975, 0xf90b, 0xf7ee, 0xf768, 0xf7ee, 0xf768, 0xf7ee, 0xf768, +0xf8ca, 0xf826, 0xf8ca, 0xf826, 0xf85f, 0xf79c, 0xf85f, 0xf79c, 0xf82a, 0xf746, 0xf82a, +0xf746, 0xf7d7, 0xf6d4, 0xf7d7, 0xf6d4, 0xfa4c, 0xf929, 0xfa4c, 0xf929, 0xfa4c, 0xf929, +0xf9a5, 0xf862, 0xf9a5, 0xf862, 0xfaad, 0xf94b, 0xfaad, 0xf94b, 0xfa86, 0xf904, 0xfa86, +0xf904, 0xf9e2, 0xf840, 0xf9e2, 0xf840, 0xf972, 0xf7b1, 0xf972, 0xf7b1, 0xfaf9, 0xf918, +0xfaf9, 0xf918, 0xfaf9, 0xf918, 0xff3e, 0xfd3b, 0xff3e, 0xfd3b, 0xffce, 0xfda9, 0xffce, +0xfda9, 0x211, 0xffcb, 0x211, 0xffcb, 0x31f, 0xb8, 0x31f, 0xb8, 0x4a6, 0x220, +0x4a6, 0x220, 0x612, 0x36d, 0x612, 0x36d, 0x612, 0x36d, 0x71a, 0x459, 0x71a, +0x459, 0x98c, 0x6b2, 0x98c, 0x6b2, 0xbb5, 0x8c3, 0xbb5, 0x8c3, 0xc3b, 0x935, +0xc3b, 0x935, 0xd90, 0xa78, 0xd90, 0xa78, 0xd90, 0xa78, 0xd77, 0xa50, 0xd77, +0xa50, 0x125b, 0xf26, 0x125b, 0xf26, 0x13f3, 0x10b3, 0x13f3, 0x10b3, 0x1576, 0x122b, +0x1576, 0x122b, 0x1860, 0x150d, 0x1860, 0x150d, 0x19af, 0x1653, 0x19af, 0x1653, 0x19af, +0x1653, 0x1b79, 0x1817, 0x1b79, 0x1817, 0x1b0d, 0x17a6, 0x1b0d, 0x17a6, 0x1a75, 0x170a, +0x1a75, 0x170a, 0x184e, 0x14e1, 0x184e, 0x14e1, 0x19e3, 0x1676, 0x19e3, 0x1676, 0x19ee, +0x1682, 0x19ee, 0x1682, 0x19ee, 0x1682, 0x1bc0, 0x1858, 0x1bc0, 0x1858, 0x194d, 0x15ea, +0x194d, 0x15ea, 0x185a, 0x14ff, 0x185a, 0x14ff, 0x190e, 0x15be, 0x190e, 0x15be, 0x1706, +0x13c2, 0x1706, 0x13c2, 0x1706, 0x13c2, 0x179b, 0x1466, 0x179b, 0x1466, 0x1761, 0x143d, +0x1761, 0x143d, 0x1744, 0x1434, 0x1744, 0x1434, 0x170c, 0x1410, 0x170c, 0x1410, 0x1602, +0x131e, 0x1602, 0x131e, 0x16bb, 0x13f1, 0x16bb, 0x13f1, 0x16bb, 0x13f1, 0x1453, 0x11a4, +0x1453, 0x11a4, 0x13b0, 0x111f, 0x13b0, 0x111f, 0x15f5, 0x1382, 0x15f5, 0x1382, 0x14dd, +0x128b, 0x14dd, 0x128b, 0x16a9, 0x1477, 0x16a9, 0x1477, 0x1440, 0x1231, 0x1440, 0x1231, +0x1440, 0x1231, 0x11de, 0xff1, 0x11de, 0xff1, 0x1040, 0xe77, 0x1040, 0xe77, 0xec7, +0xd22, 0xec7, 0xd22, 0xc97, 0xb16, 0xc97, 0xb16, 0xbda, 0xa7e, 0xbda, 0xa7e, +0xbda, 0xa7e, 0xc8e, 0xb58, 0xc8e, 0xb58, 0xc92, 0xb81, 0xc92, 0xb81, 0xbad, +0xac1, 0xbad, 0xac1, 0xc3c, 0xb76, 0xc3c, 0xb76, 0xb48, 0xaa8, 0xb48, 0xaa8, +0xbe3, 0xb69, 0xbe3, 0xb69, 0xbe3, 0xb69, 0xe33, 0xdde, 0xe33, 0xdde, 0xe0c, +0xddc, 0xe0c, 0xddc, 0xf48, 0xf3c, 0xf48, 0xf3c, 0xb4d, 0xb65, 0xb4d, 0xb65, +0xc3d, 0xc78, 0xc3d, 0xc78, 0xa75, 0xad1, 0xa75, 0xad1, 0xa75, 0xad1, 0x8b7, +0x933, 0x8b7, 0x933, 0x919, 0x9b4, 0x919, 0x9b4, 0x85f, 0x919, 0x85f, 0x919, +0x79b, 0x872, 0x79b, 0x872, 0x4c5, 0x5b9, 0x4c5, 0x5b9, 0x4c5, 0x5b9, 0xdc, +0x1eb, 0xdc, 0x1eb, 0xfd2d, 0xfe56, 0xfd2d, 0xfe56, 0xfb19, 0xfc5c, 0xfb19, 0xfc5c, +0xfaa7, 0xfc03, 0xfaa7, 0xfc03, 0xfa04, 0xfb77, 0xfa04, 0xfb77, 0xf8b5, 0xfa3e, 0xf8b5, +0xfa3e, 0xf8b5, 0xfa3e, 0xfb06, 0xfca4, 0xfb06, 0xfca4, 0xf77e, 0xf930, 0xf77e, 0xf930, +0xf532, 0xf6f6, 0xf532, 0xf6f6, 0xf3b1, 0xf585, 0xf3b1, 0xf585, 0xf080, 0xf264, 0xf080, +0xf264, 0xef3d, 0xf12e, 0xef3d, 0xf12e, 0xef3d, 0xf12e, 0xeee2, 0xf0df, 0xeee2, 0xf0df, +0xed26, 0xef2e, 0xed26, 0xef2e, 0xed14, 0xef25, 0xed14, 0xef25, 0xee13, 0xf02c, 0xee13, +0xf02c, 0xee9a, 0xf0ba, 0xee9a, 0xf0ba, 0xee9a, 0xf0ba, 0xecaa, 0xeed1, 0xecaa, 0xeed1, +0xeaec, 0xed17, 0xeaec, 0xed17, 0xebcc, 0xedfc, 0xebcc, 0xedfc, 0xebc3, 0xedf7, 0xebc3, +0xedf7, 0xee3e, 0xf075, 0xee3e, 0xf075, 0xeef5, 0xf12e, 0xeef5, 0xf12e, 0xeef5, 0xf12e, +0xee08, 0xf044, 0xee08, 0xf044, 0xeb24, 0xed61, 0xeb24, 0xed61, 0xe945, 0xeb83, 0xe945, +0xeb83, 0xea4e, 0xec8d, 0xea4e, 0xec8d, 0xebb5, 0xedf4, 0xebb5, 0xedf4, 0xeaef, 0xed2e, +0xeaef, 0xed2e, 0xeaef, 0xed2e, 0xed04, 0xef42, 0xed04, 0xef42, 0xec69, 0xeea7, 0xec69, +0xeea7, 0xed09, 0xef45, 0xed09, 0xef45, 0xeebd, 0xf0f9, 0xeebd, 0xf0f9, 0xee5e, 0xf099, +0xee5e, 0xf099, 0xee5e, 0xf099, 0xed43, 0xef7e, 0xed43, 0xef7e, 0xec57, 0xee92, 0xec57, +0xee92, 0xeeb2, 0xf0ee, 0xeeb2, 0xf0ee, 0xed37, 0xef74, 0xed37, 0xef74, 0xed08, 0xef46, +0xed08, 0xef46, 0xebbc, 0xedfc, 0xebbc, 0xedfc, 0xebbc, 0xedfc, 0xec08, 0xee4b, 0xec08, +0xee4b, 0xedb5, 0xeffb, 0xedb5, 0xeffb, 0xeea0, 0xf0ea, 0xeea0, 0xf0ea, 0xeef9, 0xf147, +0xeef9, 0xf147, 0xedee, 0xf041, 0xedee, 0xf041, 0xec9f, 0xeef6, 0xec9f, 0xeef6, 0xec9f, +0xeef6, 0xeca5, 0xef01, 0xeca5, 0xef01, 0xea7b, 0xecdc, 0xea7b, 0xecdc, 0xeb45, 0xedac, +0xeb45, 0xedac, 0xec61, 0xeecf, 0xec61, 0xeecf, 0xed8f, 0xf003, 0xed8f, 0xf003, 0xed8f, +0xf003, 0xed66, 0xefe0, 0xed66, 0xefe0, 0xec03, 0xee84, 0xec03, 0xee84, 0xed81, 0xf009, +0xed81, 0xf009, 0xecca, 0xef59, 0xecca, 0xef59, 0xeff0, 0xf286, 0xeff0, 0xf286, 0xef78, +0xf215, 0xef78, 0xf215, 0xef78, 0xf215, 0xf0ce, 0xf372, 0xf0ce, 0xf372, 0xef1e, 0xf1c9, +0xef1e, 0xf1c9, 0xf04e, 0xf2ff, 0xf04e, 0xf2ff, 0xeffd, 0xf2b5, 0xeffd, 0xf2b5, 0xf017, +0xf2d5, 0xf017, 0xf2d5, 0xf3af, 0xf673, 0xf3af, 0xf673, 0xf3af, 0xf673, 0xf1ce, 0xf497, +0xf1ce, 0xf497, 0xf519, 0xf7e7, 0xf519, 0xf7e7, 0xf545, 0xf818, 0xf545, 0xf818, 0xf522, +0xf7fa, 0xf522, 0xf7fa, 0xf445, 0xf720, 0xf445, 0xf720, 0xf445, 0xf720, 0xf2ff, 0xf5de, +0xf2ff, 0xf5de, 0xf36c, 0xf64d, 0xf36c, 0xf64d, 0xf4fe, 0xf7e2, 0xf4fe, 0xf7e2, 0xf81e, +0xfb03, 0xf81e, 0xfb03, 0xf940, 0xfc27, 0xf940, 0xfc27, 0xf8d5, 0xfbbc, 0xf8d5, 0xfbbc, +0xf8d5, 0xfbbc, 0xf850, 0xfb37, 0xf850, 0xfb37, 0xf8b7, 0xfb9d, 0xf8b7, 0xfb9d, 0xfb0c, +0xfdf0, 0xfb0c, 0xfdf0, 0xfc36, 0xff17, 0xfc36, 0xff17, 0xfe97, 0x175, 0xfe97, 0x175, +0xfe97, 0x175, 0xfd75, 0x4e, 0xfd75, 0x4e, 0xfdd7, 0xab, 0xfdd7, 0xab, 0xfe11, +0xdf, 0xfe11, 0xdf, 0xfd67, 0x2e, 0xfd67, 0x2e, 0xffcd, 0x28c, 0xffcd, 0x28c, +0xff5d, 0x214, 0xff5d, 0x214, 0xff5d, 0x214, 0x215, 0x4c1, 0x215, 0x4c1, 0x1a9, +0x44b, 0x1a9, 0x44b, 0x2af, 0x546, 0x2af, 0x546, 0x1f3, 0x47d, 0x1f3, 0x47d, +0xfdb0, 0x2d, 0xfdb0, 0x2d, 0xfaf6, 0xfd64, 0xfaf6, 0xfd64, 0xfaf6, 0xfd64, 0xf968, +0xfbc7, 0xf968, 0xfbc7, 0xf8e2, 0xfb31, 0xf8e2, 0xfb31, 0xf869, 0xfaa7, 0xf869, 0xfaa7, +0xf7a1, 0xf9cc, 0xf7a1, 0xf9cc, 0xf71f, 0xf937, 0xf71f, 0xf937, 0xf71f, 0xf937, 0xf531, +0xf735, 0xf531, 0xf735, 0xf599, 0xf788, 0xf599, 0xf788, 0xf3e5, 0xf5be, 0xf3e5, 0xf5be, +0xf086, 0xf248, 0xf086, 0xf248, 0xf012, 0xf1bd, 0xf012, 0xf1bd, 0xef1c, 0xf0ae, 0xef1c, +0xf0ae, 0xef1c, 0xf0ae, 0xf108, 0xf281, 0xf108, 0xf281, 0xef28, 0xf087, 0xef28, 0xf087, +0xee7e, 0xefc2, 0xee7e, 0xefc2, 0xedf5, 0xef1f, 0xedf5, 0xef1f, 0xef59, 0xf067, 0xef59, +0xf067, 0xef86, 0xf077, 0xef86, 0xf077, 0xef86, 0xf077, 0xf0cd, 0xf1a1, 0xf0cd, 0xf1a1, +0xf230, 0xf2e7, 0xf230, 0xf2e7, 0xf3c9, 0xf462, 0xf3c9, 0xf462, 0xf43a, 0xf4b5, 0xf43a, +0xf4b5, 0xf308, 0xf365, 0xf308, 0xf365, 0xf308, 0xf365, 0xf4a3, 0xf4e1, 0xf4a3, 0xf4e1, +0xf58f, 0xf5af, 0xf58f, 0xf5af, 0xf90b, 0xf90d, 0xf90b, 0xf90d, 0xf7f0, 0xf7d3, 0xf7f0, +0xf7d3, 0xfa22, 0xf9e8, 0xfa22, 0xf9e8, 0xfae2, 0xfa89, 0xfae2, 0xfa89, 0xfae2, 0xfa89, +0xfb2f, 0xfab9, 0xfb2f, 0xfab9, 0xfdfb, 0xfd69, 0xfdfb, 0xfd69, 0x6, 0xff58, 0x6, +0xff58, 0x106, 0x3c, 0x106, 0x3c, 0x154, 0x70, 0x154, 0x70, 0x124, 0x26, +0x124, 0x26, 0x124, 0x26, 0xf6, 0xffe0, 0xf6, 0xffe0, 0x1ee, 0xc1, 0x1ee, +0xc1, 0x370, 0x22e, 0x370, 0x22e, 0x53d, 0x3e7, 0x53d, 0x3e7, 0x45a, 0x2f1, +0x45a, 0x2f1, 0x45a, 0x2f1, 0x5a4, 0x42b, 0x5a4, 0x42b, 0x5a8, 0x41f, 0x5a8, +0x41f, 0x4a6, 0x30f, 0x4a6, 0x30f, 0x3b4, 0x211, 0x3b4, 0x211, 0x199, 0xffed, +0x199, 0xffed, 0x108, 0xff54, 0x108, 0xff54, 0x108, 0xff54, 0x197, 0xffde, 0x197, +0xffde, 0x147, 0xff89, 0x147, 0xff89, 0x2b3, 0xf4, 0x2b3, 0xf4, 0x2b1, 0xf2, +0x2b1, 0xf2, 0x453, 0x296, 0x453, 0x296, 0x5c5, 0x40c, 0x5c5, 0x40c, 0x5c5, +0x40c, 0x657, 0x4a5, 0x657, 0x4a5, 0x839, 0x68f, 0x839, 0x68f, 0xa88, 0x8e8, +0xa88, 0x8e8, 0xb31, 0x99d, 0xb31, 0x99d, 0xb27, 0x9a1, 0xb27, 0x9a1, 0xb27, +0x9a1, 0xc93, 0xb1c, 0xc93, 0xb1c, 0xc72, 0xb0c, 0xc72, 0xb0c, 0xdb1, 0xc5d, +0xdb1, 0xc5d, 0xde9, 0xca9, 0xde9, 0xca9, 0xe89, 0xd5e, 0xe89, 0xd5e, 0xf50, +0xe3b, 0xf50, 0xe3b, 0xf50, 0xe3b, 0x13aa, 0x12ac, 0x13aa, 0x12ac, 0x152a, 0x1443, +0x152a, 0x1443, 0x1527, 0x1458, 0x1527, 0x1458, 0x1370, 0x12ba, 0x1370, 0x12ba, 0x120a, +0x116c, 0x120a, 0x116c, 0x124f, 0x11cb, 0x124f, 0x11cb, 0x124f, 0x11cb, 0x11c5, 0x1159, +0x11c5, 0x1159, 0x127b, 0x1228, 0x127b, 0x1228, 0x119c, 0x1160, 0x119c, 0x1160, 0x12bc, +0x1297, 0x12bc, 0x1297, 0x137a, 0x136c, 0x137a, 0x136c, 0x137a, 0x136c, 0x134c, 0x1353, +0x134c, 0x1353, 0x12cb, 0x12e6, 0x12cb, 0x12e6, 0x12c4, 0x12f2, 0x12c4, 0x12f2, 0x114b, +0x118a, 0x114b, 0x118a, 0x1307, 0x1356, 0x1307, 0x1356, 0x11b4, 0x1211, 0x11b4, 0x1211, +0x11b4, 0x1211, 0x105d, 0x10c6, 0x105d, 0x10c6, 0xefc, 0xf6f, 0xefc, 0xf6f, 0xd12, +0xd8d, 0xd12, 0xd8d, 0xd0c, 0xd8c, 0xd0c, 0xd8c, 0xb85, 0xc09, 0xb85, 0xc09, +0xa50, 0xad5, 0xa50, 0xad5, 0xa50, 0xad5, 0x82d, 0x8b1, 0x82d, 0x8b1, 0x54a, +0x5ca, 0x54a, 0x5ca, 0xe6, 0x161, 0xe6, 0x161, 0xff61, 0xffd3, 0xff61, 0xffd3, +0xfd4e, 0xfdb4, 0xfd4e, 0xfdb4, 0xfd4e, 0xfdb4, 0xfde9, 0xfe42, 0xfde9, 0xfe42, 0xfeb6, +0xff00, 0xfeb6, 0xff00, 0xff62, 0xff9a, 0xff62, 0xff9a, 0xfebd, 0xfee0, 0xfebd, 0xfee0, +0xfb78, 0xfb86, 0xfb78, 0xfb86, 0xfa4a, 0xfa40, 0xfa4a, 0xfa40, 0xfa4a, 0xfa40, 0xf9e9, +0xf9c4, 0xf9e9, 0xf9c4, 0xfa00, 0xf9bf, 0xfa00, 0xf9bf, 0xf9ac, 0xf94d, 0xf9ac, 0xf94d, +0xf86b, 0xf7ed, 0xf86b, 0xf7ed, 0xf7f6, 0xf757, 0xf7f6, 0xf757, 0xf6bf, 0xf5fe, 0xf6bf, +0xf5fe, 0xf6bf, 0xf5fe, 0xf63a, 0xf556, 0xf63a, 0xf556, 0xf5c9, 0xf4c2, 0xf5c9, 0xf4c2, +0xf4ff, 0xf3d4, 0xf4ff, 0xf3d4, 0xf5e6, 0xf496, 0xf5e6, 0xf496, 0xf5e4, 0xf46e, 0xf5e4, +0xf46e, 0xf5e4, 0xf46e, 0xf60b, 0xf470, 0xf60b, 0xf470, 0xf4a5, 0xf2e4, 0xf4a5, 0xf2e4, +0xf541, 0xf35a, 0xf541, 0xf35a, 0xf55b, 0xf351, 0xf55b, 0xf351, 0xf74c, 0xf51d, 0xf74c, +0xf51d, 0xf856, 0xf603, 0xf856, 0xf603, 0xf856, 0xf603, 0xf960, 0xf6eb, 0xf960, 0xf6eb, +0xfa9e, 0xf807, 0xfa9e, 0xf807, 0xfaf5, 0xf83d, 0xfaf5, 0xf83d, 0xfc02, 0xf92b, 0xfc02, +0xf92b, 0xfd16, 0xfa22, 0xfd16, 0xfa22, 0x91, 0xfd81, 0x91, 0xfd81, 0x91, 0xfd81, +0x224, 0xfefa, 0x224, 0xfefa, 0x412, 0xd0, 0x412, 0xd0, 0x53e, 0x1e5, 0x53e, +0x1e5, 0x6a9, 0x33c, 0x6a9, 0x33c, 0x917, 0x598, 0x917, 0x598, 0x917, 0x598, +0xb0e, 0x77f, 0xb0e, 0x77f, 0xc14, 0x877, 0xc14, 0x877, 0xf4f, 0xba7, 0xf4f, +0xba7, 0x11ae, 0xdfd, 0x11ae, 0xdfd, 0x1595, 0x11de, 0x1595, 0x11de, 0x16e5, 0x132a, +0x16e5, 0x132a, 0x16e5, 0x132a, 0x17ca, 0x140d, 0x17ca, 0x140d, 0x16e2, 0x1325, 0x16e2, +0x1325, 0x1496, 0x10dd, 0x1496, 0x10dd, 0x170c, 0x1357, 0x170c, 0x1357, 0x1612, 0x1265, +0x1612, 0x1265, 0x1612, 0x1265, 0x17cd, 0x1429, 0x17cd, 0x1429, 0x171f, 0x1387, 0x171f, +0x1387, 0x177e, 0x13f4, 0x177e, 0x13f4, 0x188d, 0x1512, 0x188d, 0x1512, 0x1671, 0x1307, +0x1671, 0x1307, 0x156f, 0x1218, 0x156f, 0x1218, 0x156f, 0x1218, 0x150a, 0x11c8, 0x150a, +0x11c8, 0x1627, 0x12fc, 0x1627, 0x12fc, 0x1726, 0x1412, 0x1726, 0x1412, 0x1601, 0x1306, +0x1601, 0x1306, 0x13f6, 0x1116, 0x13f6, 0x1116, 0x1328, 0x1063, 0x1328, 0x1063, 0x1328, +0x1063, 0x14a0, 0x11f6, 0x14a0, 0x11f6, 0x165a, 0x13cd, 0x165a, 0x13cd, 0x171a, 0x14aa, +0x171a, 0x14aa, 0x165b, 0x1409, 0x165b, 0x1409, 0x1600, 0x13cd, 0x1600, 0x13cd, 0x1600, +0x13cd, 0x156e, 0x1359, 0x156e, 0x1359, 0x13b8, 0x11c3, 0x13b8, 0x11c3, 0x12a3, 0x10cd, +0x12a3, 0x10cd, 0x1077, 0xebf, 0x1077, 0xebf, 0x124b, 0x10b3, 0x124b, 0x10b3, 0x1193, +0x101a, 0x1193, 0x101a, 0x1193, 0x101a, 0x1082, 0xf27, 0x1082, 0xf27, 0xf9d, 0xe60, +0xf9d, 0xe60, 0xdfe, 0xcde, 0xdfe, 0xcde, 0xec3, 0xdc1, 0xec3, 0xdc1, 0xfbb, +0xed6, 0xfbb, 0xed6, 0x1082, 0xfb9, 0x1082, 0xfb9, 0x1082, 0xfb9, 0x10da, 0x102d, +0x10da, 0x102d, 0x11dd, 0x114b, 0x11dd, 0x114b, 0x1164, 0x10ec, 0x1164, 0x10ec, 0xf4a, +0xeeb, 0xf4a, 0xeeb, 0xe4e, 0xe07, 0xe4e, 0xe07, 0xe4e, 0xe07, 0xd9d, 0xd6f, +0xd9d, 0xd6f, 0xda7, 0xd90, 0xda7, 0xd90, 0xebd, 0xebc, 0xebd, 0xebc, 0xc41, +0xc57, 0xc41, 0xc57, 0xa94, 0xabf, 0xa94, 0xabf, 0x730, 0x770, 0x730, 0x770, +0x730, 0x770, 0x660, 0x6b4, 0x660, 0x6b4, 0x47d, 0x4e4, 0x47d, 0x4e4, 0x300, +0x37b, 0x300, 0x37b, 0x2fd, 0x38b, 0x2fd, 0x38b, 0x2aa, 0x349, 0x2aa, 0x349, +0x3d0, 0x481, 0x3d0, 0x481, 0x3d0, 0x481, 0x361, 0x424, 0x361, 0x424, 0x394, +0x468, 0x394, 0x468, 0x158, 0x23c, 0x158, 0x23c, 0xb1, 0x1a7, 0xb1, 0x1a7, +0xfe39, 0xff3f, 0xfe39, 0xff3f, 0xfe39, 0xff3f, 0xfd17, 0xfe2d, 0xfd17, 0xfe2d, 0xfaa1, +0xfbc7, 0xfaa1, 0xfbc7, 0xfab2, 0xfbe8, 0xfab2, 0xfbe8, 0xfc6c, 0xfdb2, 0xfc6c, 0xfdb2, +0xfb8d, 0xfce3, 0xfb8d, 0xfce3, 0xfc05, 0xfd6a, 0xfc05, 0xfd6a, 0xfc05, 0xfd6a, 0xf95d, +0xfad2, 0xf95d, 0xfad2, 0xf815, 0xf998, 0xf815, 0xf998, 0xf890, 0xfa23, 0xf890, 0xfa23, +0xf947, 0xfae9, 0xf947, 0xfae9, 0xf896, 0xfa48, 0xf896, 0xfa48, 0xf733, 0xf8f4, 0xf733, +0xf8f4, 0xf733, 0xf8f4, 0xf745, 0xf914, 0xf745, 0xf914, 0xf609, 0xf7e6, 0xf609, 0xf7e6, +0xf463, 0xf64e, 0xf463, 0xf64e, 0xf361, 0xf55a, 0xf361, 0xf55a, 0xf350, 0xf558, 0xf350, +0xf558, 0xf350, 0xf558, 0xf3f0, 0xf604, 0xf3f0, 0xf604, 0xf447, 0xf668, 0xf447, 0xf668, +0xf4cf, 0xf6fc, 0xf4cf, 0xf6fc, 0xf243, 0xf47b, 0xf243, 0xf47b, 0xf2aa, 0xf4ed, 0xf2aa, +0xf4ed, 0xf331, 0xf57f, 0xf331, 0xf57f, 0xf331, 0xf57f, 0xf381, 0xf5d8, 0xf381, 0xf5d8, +0xf271, 0xf4d1, 0xf271, 0xf4d1, 0xf113, 0xf37b, 0xf113, 0xf37b, 0xf1e2, 0xf452, 0xf1e2, +0xf452, 0xf035, 0xf2aa, 0xf035, 0xf2aa, 0xef80, 0xf1fa, 0xef80, 0xf1fa, 0xef80, 0xf1fa, +0xee60, 0xf0df, 0xee60, 0xf0df, 0xedd5, 0xf057, 0xedd5, 0xf057, 0xee31, 0xf0b5, 0xee31, +0xf0b5, 0xee4b, 0xf0d0, 0xee4b, 0xf0d0, 0xec10, 0xee95, 0xec10, 0xee95, 0xec10, 0xee95, +0xeb08, 0xed8c, 0xeb08, 0xed8c, 0xeaab, 0xed2e, 0xeaab, 0xed2e, 0xeb28, 0xeda8, 0xeb28, +0xeda8, 0xea80, 0xecfc, 0xea80, 0xecfc, 0xea4d, 0xecc4, 0xea4d, 0xecc4, 0xe9b8, 0xec2a, +0xe9b8, 0xec2a, 0xe9b8, 0xec2a, 0xe8cd, 0xeb38, 0xe8cd, 0xeb38, 0xe903, 0xeb67, 0xe903, +0xeb67, 0xe854, 0xeaaf, 0xe854, 0xeaaf, 0xe876, 0xeac9, 0xe876, 0xeac9, 0xe882, 0xeacb, +0xe882, 0xeacb, 0xe981, 0xebc1, 0xe981, 0xebc1, 0xe981, 0xebc1, 0xe85c, 0xea91, 0xe85c, +0xea91, 0xe7a6, 0xe9d1, 0xe7a6, 0xe9d1, 0xe7da, 0xe9fa, 0xe7da, 0xe9fa, 0xe9c0, 0xebd5, +0xe9c0, 0xebd5, 0xeb1e, 0xed28, 0xeb1e, 0xed28, 0xeb1e, 0xed28, 0xed9b, 0xef99, 0xed9b, +0xef99, 0xede1, 0xefd5, 0xede1, 0xefd5, 0xed46, 0xef2f, 0xed46, 0xef2f, 0xed3d, 0xef1c, +0xed3d, 0xef1c, 0xed8a, 0xef5e, 0xed8a, 0xef5e, 0xee08, 0xefd2, 0xee08, 0xefd2, 0xee08, +0xefd2, 0xed1f, 0xeee0, 0xed1f, 0xeee0, 0xef5d, 0xf115, 0xef5d, 0xf115, 0xf05d, 0xf20d, +0xf05d, 0xf20d, 0xf276, 0xf41d, 0xf276, 0xf41d, 0xf37a, 0xf519, 0xf37a, 0xf519, 0xf2ac, +0xf445, 0xf2ac, 0xf445, 0xf2ac, 0xf445, 0xf2b6, 0xf449, 0xf2b6, 0xf449, 0xf515, 0xf6a3, +0xf515, 0xf6a3, 0xf5c0, 0xf749, 0xf5c0, 0xf749, 0xf63f, 0xf7c4, 0xf63f, 0xf7c4, 0xf7a4, +0xf925, 0xf7a4, 0xf925, 0xf7a4, 0xf925, 0xf9cc, 0xfb49, 0xf9cc, 0xfb49, 0xfbcb, 0xfd46, +0xfbcb, 0xfd46, 0xfaad, 0xfc25, 0xfaad, 0xfc25, 0xfb37, 0xfcad, 0xfb37, 0xfcad, 0xfb5f, +0xfcd3, 0xfb5f, 0xfcd3, 0xfcfe, 0xfe70, 0xfcfe, 0xfe70, 0xfcfe, 0xfe70, 0x95, 0x205, +0x95, 0x205, 0x37, 0x1a6, 0x37, 0x1a6, 0xfe13, 0xff7f, 0xfe13, 0xff7f, 0xfc07, +0xfd71, 0xfc07, 0xfd71, 0xfacb, 0xfc33, 0xfacb, 0xfc33, 0xfa16, 0xfb7b, 0xfa16, 0xfb7b, +0xfa16, 0xfb7b, 0xf7cf, 0xf930, 0xf7cf, 0xf930, 0xf7f1, 0xf94f, 0xf7f1, 0xf94f, 0xf79b, +0xf8f3, 0xf79b, 0xf8f3, 0xf6f2, 0xf844, 0xf6f2, 0xf844, 0xf4bf, 0xf60a, 0xf4bf, 0xf60a, +0xf4bf, 0xf60a, 0xf210, 0xf353, 0xf210, 0xf353, 0xef49, 0xf083, 0xef49, 0xf083, 0xef47, +0xf077, 0xef47, 0xf077, 0xef00, 0xf024, 0xef00, 0xf024, 0xed79, 0xee90, 0xed79, 0xee90, +0xed3b, 0xee44, 0xed3b, 0xee44, 0xed3b, 0xee44, 0xeb4f, 0xec48, 0xeb4f, 0xec48, 0xeaeb, +0xebd3, 0xeaeb, 0xebd3, 0xe997, 0xea6d, 0xe997, 0xea6d, 0xe9f0, 0xeab1, 0xe9f0, 0xeab1, +0xe936, 0xe9e2, 0xe936, 0xe9e2, 0xe936, 0xe9e2, 0xeab3, 0xeb48, 0xeab3, 0xeb48, 0xebd6, +0xec52, 0xebd6, 0xec52, 0xeb5a, 0xebbd, 0xeb5a, 0xebbd, 0xeac1, 0xeb09, 0xeac1, 0xeb09, +0xec30, 0xec5c, 0xec30, 0xec5c, 0xef21, 0xef31, 0xef21, 0xef31, 0xef21, 0xef31, 0xef21, +0xef13, 0xef21, 0xef13, 0xf114, 0xf0e8, 0xf114, 0xf0e8, 0xf37d, 0xf332, 0xf37d, 0xf332, +0xf413, 0xf3a8, 0xf413, 0xf3a8, 0xf5e8, 0xf55d, 0xf5e8, 0xf55d, 0xf875, 0xf7cb, 0xf875, +0xf7cb, 0xf875, 0xf7cb, 0xf99d, 0xf8d3, 0xf99d, 0xf8d3, 0xfc54, 0xfb6a, 0xfc54, 0xfb6a, +0xfda8, 0xfc9e, 0xfda8, 0xfc9e, 0x94, 0xff6c, 0x94, 0xff6c, 0x57, 0xff10, 0x57, +0xff10, 0x57, 0xff10, 0x6f, 0xff0c, 0x6f, 0xff0c, 0x1bb, 0x3b, 0x1bb, 0x3b, +0x208, 0x6d, 0x208, 0x6d, 0x4e6, 0x332, 0x4e6, 0x332, 0x65f, 0x493, 0x65f, +0x493, 0x64f, 0x46c, 0x64f, 0x46c, 0x64f, 0x46c, 0x5d1, 0x3da, 0x5d1, 0x3da, +0x615, 0x40b, 0x615, 0x40b, 0x4a3, 0x28a, 0x4a3, 0x28a, 0x353, 0x12b, 0x353, +0x12b, 0x2be, 0x8a, 0x2be, 0x8a, 0x2e7, 0xaa, 0x2e7, 0xaa, 0x2e7, 0xaa, +0x284, 0x40, 0x284, 0x40, 0x312, 0xc9, 0x312, 0xc9, 0x3de, 0x193, 0x3de, +0x193, 0x43e, 0x1f4, 0x43e, 0x1f4, 0x58f, 0x347, 0x58f, 0x347, 0x58f, 0x347, +0x946, 0x704, 0x946, 0x704, 0x957, 0x71c, 0x957, 0x71c, 0x821, 0x5f1, 0x821, +0x5f1, 0xa17, 0x7f3, 0xa17, 0x7f3, 0xb42, 0x92e, 0xb42, 0x92e, 0xd47, 0xb44, +0xd47, 0xb44, 0xd47, 0xb44, 0xeb8, 0xcc7, 0xeb8, 0xcc7, 0x104f, 0xe73, 0x104f, +0xe73, 0x1048, 0xe83, 0x1048, 0xe83, 0x10ee, 0xf42, 0x10ee, 0xf42, 0x1230, 0x109e, +0x1230, 0x109e, 0x111c, 0xfa5, 0x111c, 0xfa5, 0x111c, 0xfa5, 0x111e, 0xfc3, 0x111e, +0xfc3, 0x131e, 0x11e0, 0x131e, 0x11e0, 0x135e, 0x123e, 0x135e, 0x123e, 0x13f1, 0x12ef, +0x13f1, 0x12ef, 0x133d, 0x125a, 0x133d, 0x125a, 0x133d, 0x125a, 0x12f5, 0x1231, 0x12f5, +0x1231, 0x12d5, 0x122f, 0x12d5, 0x122f, 0x126a, 0x11e2, 0x126a, 0x11e2, 0x122f, 0x11c5, +0x122f, 0x11c5, 0x111d, 0x10d0, 0x111d, 0x10d0, 0x11f0, 0x11bf, 0x11f0, 0x11bf, 0x11f0, +0x11bf, 0x126c, 0x1256, 0x126c, 0x1256, 0x12fd, 0x1301, 0x12fd, 0x1301, 0x12b3, 0x12cf, +0x12b3, 0x12cf, 0x1362, 0x1395, 0x1362, 0x1395, 0x12f1, 0x1338, 0x12f1, 0x1338, 0x121c, +0x1276, 0x121c, 0x1276, 0x121c, 0x1276, 0x11d3, 0x123f, 0x11d3, 0x123f, 0x1276, 0x12f0, +0x1276, 0x12f0, 0x1167, 0x11ee, 0x1167, 0x11ee, 0x124a, 0x12dc, 0x124a, 0x12dc, 0x1248, +0x12e1, 0x1248, 0x12e1, 0x1248, 0x12e1, 0xf3f, 0xfde, 0xf3f, 0xfde, 0xdf0, 0xe92, +0xdf0, 0xe92, 0xb7e, 0xc20, 0xb7e, 0xc20, 0xa5e, 0xaff, 0xa5e, 0xaff, 0x7b0, +0x84c, 0x7b0, 0x84c, 0x843, 0x8d9, 0x843, 0x8d9, 0x843, 0x8d9, 0x85a, 0x8e6, +0x85a, 0x8e6, 0x6c6, 0x747, 0x6c6, 0x747, 0x824, 0x897, 0x824, 0x897, 0x745, +0x7a9, 0x745, 0x7a9, 0x60d, 0x65e, 0x60d, 0x65e, 0x6e9, 0x727, 0x6e9, 0x727, +0x6e9, 0x727, 0x5b5, 0x5dc, 0x5b5, 0x5dc, 0x45e, 0x46e, 0x45e, 0x46e, 0x24f, +0x246, 0x24f, 0x246, 0x133, 0x110, 0x133, 0x110, 0x183, 0x144, 0x183, 0x144, +0x183, 0x144, 0x17c, 0x121, 0x17c, 0x121, 0x248, 0x1ce, 0x248, 0x1ce, 0x1d6, +0x13e, 0x1d6, 0x13e, 0x10d, 0x57, 0x10d, 0x57, 0x6d, 0xff98, 0x6d, 0xff98, +0xe4, 0xfff0, 0xe4, 0xfff0, 0xe4, 0xfff0, 0xfe5b, 0xfd47, 0xfe5b, 0xfd47, 0xfee7, +0xfdb4, 0xfee7, 0xfdb4, 0xfe7c, 0xfd2a, 0xfe7c, 0xfd2a, 0xfe8b, 0xfd1b, 0xfe8b, 0xfd1b, +0xa5, 0xff18, 0xa5, 0xff18, 0x1c8, 0x1f, 0x1c8, 0x1f, 0x1c8, 0x1f, 0x2ce, +0x108, 0x2ce, 0x108, 0x112, 0xff33, 0x112, 0xff33, 0x2e8, 0xef, 0x2e8, 0xef, +0x372, 0x161, 0x372, 0x161, 0x25d, 0x37, 0x25d, 0x37, 0x25d, 0x37, 0x2ba, +0x7f, 0x2ba, 0x7f, 0x44d, 0x1ff, 0x44d, 0x1ff, 0x57f, 0x320, 0x57f, 0x320, +0x81a, 0x5ac, 0x81a, 0x5ac, 0xa3c, 0x7c0, 0xa3c, 0x7c0, 0xa95, 0x80e, 0xa95, +0x80e, 0xa95, 0x80e, 0xb99, 0x908, 0xb99, 0x908, 0xdb4, 0xb1b, 0xdb4, 0xb1b, +0xefc, 0xc5d, 0xefc, 0xc5d, 0x1036, 0xd94, 0x1036, 0xd94, 0x11c8, 0xf23, 0x11c8, +0xf23, 0x1224, 0xf7e, 0x1224, 0xf7e, 0x1224, 0xf7e, 0x1371, 0x10cd, 0x1371, 0x10cd, +0x137f, 0x10de, 0x137f, 0x10de, 0x13c1, 0x1125, 0x13c1, 0x1125, 0x1452, 0x11bc, 0x1452, +0x11bc, 0x14e3, 0x1255, 0x14e3, 0x1255, 0x14e3, 0x1255, 0x1630, 0x13ab, 0x1630, 0x13ab, +0x15f2, 0x1376, 0x15f2, 0x1376, 0x13d9, 0x1168, 0x13d9, 0x1168, 0x1453, 0x11ee, 0x1453, +0x11ee, 0x1415, 0x11be, 0x1415, 0x11be, 0x1504, 0x12b9, 0x1504, 0x12b9, 0x1504, 0x12b9, +0x1599, 0x135d, 0x1599, 0x135d, 0x1497, 0x126a, 0x1497, 0x126a, 0x13b6, 0x1198, 0x13b6, +0x1198, 0x1231, 0x1023, 0x1231, 0x1023, 0x130f, 0x1110, 0x130f, 0x1110, 0x11b9, 0xfca, +0x11b9, 0xfca, 0x11b9, 0xfca, 0x11ee, 0x100e, 0x11ee, 0x100e, 0x133a, 0x1169, 0x133a, +0x1169, 0x12e3, 0x1122, 0x12e3, 0x1122, 0x126f, 0x10bd, 0x126f, 0x10bd, 0x11ae, 0x100a, +0x11ae, 0x100a, 0x11ae, 0x100a, 0x1041, 0xeac, 0x1041, 0xeac, 0xe92, 0xd0a, 0xe92, +0xd0a, 0xd2d, 0xbb3, 0xd2d, 0xbb3, 0xc8b, 0xb1e, 0xc8b, 0xb1e, 0xb8b, 0xa2a, +0xb8b, 0xa2a, 0xabf, 0x96a, 0xabf, 0x96a, 0xabf, 0x96a, 0x9a0, 0x856, 0x9a0, +0x856, 0x9a4, 0x865, 0x9a4, 0x865, 0x9c6, 0x892, 0x9c6, 0x892, 0xb02, 0x9d7, +0xb02, 0x9d7, 0xc70, 0xb4f, 0xc70, 0xb4f, 0xc70, 0xb4f, 0xb14, 0x9fd, 0xb14, +0x9fd, 0xad7, 0x9c9, 0xad7, 0x9c9, 0x91d, 0x818, 0x91d, 0x818, 0x8d3, 0x7d7, +0x8d3, 0x7d7, 0x7d4, 0x6e1, 0x7d4, 0x6e1, 0x8e2, 0x7f8, 0x8e2, 0x7f8, 0x8e2, +0x7f8, 0x951, 0x871, 0x951, 0x871, 0x82c, 0x755, 0x82c, 0x755, 0x756, 0x689, +0x756, 0x689, 0x4e1, 0x41f, 0x4e1, 0x41f, 0x205, 0x14e, 0x205, 0x14e, 0x4e, +0xffa2, 0x4e, 0xffa2, 0x4e, 0xffa2, 0xfd9b, 0xfcfd, 0xfd9b, 0xfcfd, 0xfb59, 0xfac7, +0xfb59, 0xfac7, 0xfd25, 0xfca1, 0xfd25, 0xfca1, 0xfb0f, 0xfa9b, 0xfb0f, 0xfa9b, 0xfab6, +0xfa51, 0xfab6, 0xfa51, 0xfab6, 0xfa51, 0xfa8f, 0xfa3b, 0xfa8f, 0xfa3b, 0xfb5d, 0xfb1b, +0xfb5d, 0xfb1b, 0xfa41, 0xfa11, 0xfa41, 0xfa11, 0xf894, 0xf878, 0xf894, 0xf878, 0xf752, +0xf74b, 0xf752, 0xf74b, 0xf4c1, 0xf4d0, 0xf4c1, 0xf4d0, 0xf4c1, 0xf4d0, 0xf41a, 0xf43f, +0xf41a, 0xf43f, 0xf3ca, 0xf407, 0xf3ca, 0xf407, 0xf468, 0xf4bd, 0xf468, 0xf4bd, 0xf41c, +0xf48a, 0xf41c, 0xf48a, 0xf54b, 0xf5d3, 0xf54b, 0xf5d3, 0xf580, 0xf623, 0xf580, 0xf623, +0xf580, 0xf623, 0xf50d, 0xf5cb, 0xf50d, 0xf5cb, 0xf388, 0xf461, 0xf388, 0xf461, 0xf3ec, +0xf4e2, 0xf3ec, 0xf4e2, 0xf4f9, 0xf60a, 0xf4f9, 0xf60a, 0xf62b, 0xf759, 0xf62b, 0xf759, +0xf62b, 0xf759, 0xf594, 0xf6df, 0xf594, 0xf6df, 0xf4fe, 0xf665, 0xf4fe, 0xf665, 0xf4c0, +0xf645, 0xf4c0, 0xf645, 0xf459, 0xf5fa, 0xf459, 0xf5fa, 0xf4d5, 0xf692, 0xf4d5, 0xf692, +0xf260, 0xf439, 0xf260, 0xf439, 0xf260, 0xf439, 0xf20f, 0xf404, 0xf20f, 0xf404, 0xf34a, +0xf55a, 0xf34a, 0xf55a, 0xf36b, 0xf596, 0xf36b, 0xf596, 0xf486, 0xf6cb, 0xf486, 0xf6cb, +0xf531, 0xf78e, 0xf531, 0xf78e, 0xf255, 0xf4cb, 0xf255, 0xf4cb, 0xf255, 0xf4cb, 0xf1da, +0xf467, 0xf1da, 0xf467, 0xf10f, 0xf3b1, 0xf10f, 0xf3b1, 0xf04a, 0xf301, 0xf04a, 0xf301, +0xf038, 0xf302, 0xf038, 0xf302, 0xef4c, 0xf229, 0xef4c, 0xf229, 0xef4c, 0xf229, 0xefd7, +0xf2c4, 0xefd7, 0xf2c4, 0xf030, 0xf32b, 0xf030, 0xf32b, 0xeefe, 0xf208, 0xeefe, 0xf208, +0xeeaa, 0xf1c0, 0xeeaa, 0xf1c0, 0xeda7, 0xf0c8, 0xeda7, 0xf0c8, 0xec7f, 0xefa9, 0xec7f, +0xefa9, 0xec7f, 0xefa9, 0xebae, 0xeee0, 0xebae, 0xeee0, 0xeb16, 0xee4f, 0xeb16, 0xee4f, +0xebbf, 0xeefe, 0xebbf, 0xeefe, 0xeaff, 0xee42, 0xeaff, 0xee42, 0xec2b, 0xef71, 0xec2b, +0xef71, 0xebb3, 0xeefc, 0xebb3, 0xeefc, 0xebb3, 0xeefc, 0xea8e, 0xedd8, 0xea8e, 0xedd8, +0xea04, 0xed4f, 0xea04, 0xed4f, 0xea81, 0xedcb, 0xea81, 0xedcb, 0xe961, 0xecab, 0xe961, +0xecab, 0xe8ed, 0xec35, 0xe8ed, 0xec35, 0xe8ed, 0xec35, 0xe696, 0xe9dd, 0xe696, 0xe9dd, +0xe575, 0xe8ba, 0xe575, 0xe8ba, 0xe734, 0xea77, 0xe734, 0xea77, 0xe822, 0xeb63, 0xe822, +0xeb63, 0xe97e, 0xecbd, 0xe97e, 0xecbd, 0xe9e4, 0xed20, 0xe9e4, 0xed20, 0xe9e4, 0xed20, +0xeaab, 0xede5, 0xeaab, 0xede5, 0xe9fb, 0xed33, 0xe9fb, 0xed33, 0xeb56, 0xee8c, 0xeb56, +0xee8c, 0xe9c4, 0xecf8, 0xe9c4, 0xecf8, 0xe9fb, 0xed2c, 0xe9fb, 0xed2c, 0xeae1, 0xee10, +0xeae1, 0xee10, 0xeae1, 0xee10, 0xebe1, 0xef0d, 0xebe1, 0xef0d, 0xebec, 0xef17, 0xebec, +0xef17, 0xed21, 0xf049, 0xed21, 0xf049, 0xef69, 0xf28f, 0xef69, 0xf28f, 0xf0ed, 0xf410, +0xf0ed, 0xf410, 0xf0ed, 0xf410, 0xf251, 0xf571, 0xf251, 0xf571, 0xf24f, 0xf56c, 0xf24f, +0xf56c, 0xf3ce, 0xf6e7, 0xf3ce, 0xf6e7, 0xf4ec, 0xf801, 0xf4ec, 0xf801, 0xf8aa, 0xfbba, +0xf8aa, 0xfbba, 0xf976, 0xfc81, 0xf976, 0xfc81, 0xf976, 0xfc81, 0xfb77, 0xfe7c, 0xfb77, +0xfe7c, 0xfbec, 0xfeeb, 0xfbec, 0xfeeb, 0xfdeb, 0xe2, 0xfdeb, 0xe2, 0xffaf, 0x29f, +0xffaf, 0x29f, 0xffc3, 0x2aa, 0xffc3, 0x2aa, 0x204, 0x4e3, 0x204, 0x4e3, 0x204, +0x4e3, 0x298, 0x56e, 0x298, 0x56e, 0x39a, 0x665, 0x39a, 0x665, 0x333, 0x5f4, +0x333, 0x5f4, 0x144, 0x3f9, 0x144, 0x3f9, 0xfe92, 0x13b, 0xfe92, 0x13b, 0xfe92, +0x13b, 0xfe24, 0xc0, 0xfe24, 0xc0, 0xfe89, 0x118, 0xfe89, 0x118, 0xfe0f, 0x90, +0xfe0f, 0x90, 0xfd82, 0xfff4, 0xfd82, 0xfff4, 0xfbe4, 0xfe47, 0xfbe4, 0xfe47, 0xf98e, +0xfbe0, 0xf98e, 0xfbe0, 0xf98e, 0xfbe0, 0xf96d, 0xfbae, 0xf96d, 0xfbae, 0xf8b9, 0xfae7, +0xf8b9, 0xfae7, 0xf8a2, 0xfabc, 0xf8a2, 0xfabc, 0xf6a9, 0xf8af, 0xf6a9, 0xf8af, 0xf53c, +0xf72b, 0xf53c, 0xf72b, 0xf378, 0xf54f, 0xf378, 0xf54f, 0xf378, 0xf54f, 0xf24c, 0xf409, +0xf24c, 0xf409, 0xf245, 0xf3e6, 0xf245, 0xf3e6, 0xf113, 0xf296, 0xf113, 0xf296, 0xf253, +0xf3b7, 0xf253, 0xf3b7, 0xf1c7, 0xf309, 0xf1c7, 0xf309, 0xf1c7, 0xf309, 0xf010, 0xf12e, +0xf010, 0xf12e, 0xf05f, 0xf157, 0xf05f, 0xf157, 0xf16b, 0xf23b, 0xf16b, 0xf23b, 0xf169, +0xf210, 0xf169, 0xf210, 0xf392, 0xf40d, 0xf392, 0xf40d, 0xf339, 0xf387, 0xf339, 0xf387, +0xf339, 0xf387, 0xf4be, 0xf4df, 0xf4be, 0xf4df, 0xf64f, 0xf640, 0xf64f, 0xf640, 0xf688, +0xf64b, 0xf688, 0xf64b, 0xf7e3, 0xf775, 0xf7e3, 0xf775, 0xf9bc, 0xf91f, 0xf9bc, 0xf91f, +0xfbcf, 0xfb03, 0xfbcf, 0xfb03, 0xfbcf, 0xfb03, 0xfe7e, 0xfd84, 0xfe7e, 0xfd84, 0xfff3, +0xfecc, 0xfff3, 0xfecc, 0xff8c, 0xfe3a, 0xff8c, 0xfe3a, 0xffbb, 0xfe40, 0xffbb, 0xfe40, +0x36, 0xfe93, 0x36, 0xfe93, 0x36, 0xfe93, 0x2bc, 0xf4, 0x2bc, 0xf4, 0x387, +0x19d, 0x387, 0x19d, 0x5eb, 0x3e3, 0x5eb, 0x3e3, 0x666, 0x442, 0x666, 0x442, +0x89b, 0x65e, 0x89b, 0x65e, 0x836, 0x5e3, 0x836, 0x5e3, 0x836, 0x5e3, 0x795, +0x52f, 0x795, 0x52f, 0x783, 0x50d, 0x783, 0x50d, 0x849, 0x5c6, 0x849, 0x5c6, +0x92a, 0x69c, 0x92a, 0x69c, 0x6b3, 0x41e, 0x6b3, 0x41e, 0x6b3, 0x41e, 0x781, +0x4e7, 0x781, 0x4e7, 0x62f, 0x391, 0x62f, 0x391, 0x7f2, 0x553, 0x7f2, 0x553, +0x8c7, 0x629, 0x8c7, 0x629, 0x808, 0x56c, 0x808, 0x56c, 0x7da, 0x542, 0x7da, +0x542, 0x7da, 0x542, 0x86b, 0x5d8, 0x86b, 0x5d8, 0x908, 0x67b, 0x908, 0x67b, +0xace, 0x849, 0xace, 0x849, 0xa91, 0x816, 0xa91, 0x816, 0x97e, 0x70d, 0x97e, +0x70d, 0xba5, 0x93f, 0xba5, 0x93f, 0xba5, 0x93f, 0xd80, 0xb28, 0xd80, 0xb28, +0xf1d, 0xcd3, 0xf1d, 0xcd3, 0xfe2, 0xda9, 0xfe2, 0xda9, 0xeab, 0xc84, 0xeab, +0xc84, 0xe5a, 0xc46, 0xe5a, 0xc46, 0xe5a, 0xc46, 0xf98, 0xd9a, 0xf98, 0xd9a, +0x1047, 0xe61, 0x1047, 0xe61, 0x112a, 0xf5e, 0x112a, 0xf5e, 0x102d, 0xe7c, 0x102d, +0xe7c, 0x1122, 0xf90, 0x1122, 0xf90, 0xfa3, 0xe2f, 0xfa3, 0xe2f, 0xfa3, 0xe2f, +0xf33, 0xde1, 0xf33, 0xde1, 0xd0f, 0xbe1, 0xd0f, 0xbe1, 0xace, 0x9c4, 0xace, +0x9c4, 0xca8, 0xbc3, 0xca8, 0xbc3, 0xd84, 0xcc6, 0xd84, 0xcc6, 0xd59, 0xcc1, +0xd59, 0xcc1, 0xd59, 0xcc1, 0xce8, 0xc76, 0xce8, 0xc76, 0xc58, 0xc0d, 0xc58, +0xc0d, 0xab1, 0xa8b, 0xab1, 0xa8b, 0x90c, 0x90a, 0x90c, 0x90a, 0x7cb, 0x7eb, +0x7cb, 0x7eb, 0x7cb, 0x7eb, 0x7a8, 0x7e9, 0x7a8, 0x7e9, 0x85f, 0x8be, 0x85f, +0x8be, 0x9de, 0xa58, 0x9de, 0xa58, 0x828, 0x8ba, 0x828, 0x8ba, 0x7bc, 0x864, +0x7bc, 0x864, 0x4ab, 0x565, 0x4ab, 0x565, 0x4ab, 0x565, 0x37c, 0x443, 0x37c, +0x443, 0x216, 0x2e8, 0x216, 0x2e8, 0xff3e, 0x16, 0xff3e, 0x16, 0xfe2a, 0xff05, +0xfe2a, 0xff05, 0xfd00, 0xfddb, 0xfd00, 0xfddb, 0xfcc4, 0xfd9b, 0xfcc4, 0xfd9b, 0xfcc4, +0xfd9b, 0xfc37, 0xfd07, 0xfc37, 0xfd07, 0xfcdf, 0xfda5, 0xfcdf, 0xfda5, 0xfcee, 0xfda6, +0xfcee, 0xfda6, 0xfe44, 0xfeec, 0xfe44, 0xfeec, 0xfdfb, 0xfe90, 0xfdfb, 0xfe90, 0xfdfb, +0xfe90, 0xfd9a, 0xfe1a, 0xfd9a, 0xfe1a, 0xfbc5, 0xfc2f, 0xfbc5, 0xfc2f, 0xfc24, 0xfc75, +0xfc24, 0xfc75, 0xfa70, 0xfaa7, 0xfa70, 0xfaa7, 0xfb98, 0xfbb4, 0xfb98, 0xfbb4, 0xfdbc, +0xfdbb, 0xfdbc, 0xfdbb, 0xfdbc, 0xfdbb, 0xfd43, 0xfd24, 0xfd43, 0xfd24, 0xfe6a, 0xfe2e, +0xfe6a, 0xfe2e, 0xfd36, 0xfcda, 0xfd36, 0xfcda, 0xfc35, 0xfbba, 0xfc35, 0xfbba, 0xfb92, +0xfaf8, 0xfb92, 0xfaf8, 0xfc3c, 0xfb82, 0xfc3c, 0xfb82, 0xfc3c, 0xfb82, 0xfc81, 0xfba6, +0xfc81, 0xfba6, 0xfc59, 0xfb5f, 0xfc59, 0xfb5f, 0xfb91, 0xfa78, 0xfb91, 0xfa78, 0xfc84, +0xfb4d, 0xfc84, 0xfb4d, 0xfc23, 0xfacd, 0xfc23, 0xfacd, 0xfc23, 0xfacd, 0xfdd5, 0xfc63, +0xfdd5, 0xfc63, 0xfe9b, 0xfd0d, 0xfe9b, 0xfd0d, 0xffb1, 0xfe08, 0xffb1, 0xfe08, 0xff91, +0xfdcf, 0xff91, 0xfdcf, 0xff30, 0xfd56, 0xff30, 0xfd56, 0xfe, 0xff0f, 0xfe, 0xff0f, +0xfe, 0xff0f, 0x209, 0x5, 0x209, 0x5, 0x45e, 0x248, 0x45e, 0x248, 0x54a, +0x324, 0x54a, 0x324, 0x6f1, 0x4be, 0x6f1, 0x4be, 0x84a, 0x60a, 0x84a, 0x60a, +0xaf5, 0x8ab, 0xaf5, 0x8ab, 0xaf5, 0x8ab, 0xc50, 0x9ff, 0xc50, 0x9ff, 0xcc6, +0xa6f, 0xcc6, 0xa6f, 0xfed, 0xd91, 0xfed, 0xd91, 0x122c, 0xfcf, 0x122c, 0xfcf, +0x11d5, 0xf76, 0x11d5, 0xf76, 0x11d5, 0xf76, 0x13a8, 0x114a, 0x13a8, 0x114a, 0x126d, +0x1010, 0x126d, 0x1010, 0x1361, 0x1107, 0x1361, 0x1107, 0x1414, 0x11bd, 0x1414, 0x11bd, +0x1411, 0x11bd, 0x1411, 0x11bd, 0x14ab, 0x125c, 0x14ab, 0x125c, 0x14ab, 0x125c, 0x148b, +0x1240, 0x148b, 0x1240, 0x15f4, 0x13ad, 0x15f4, 0x13ad, 0x150f, 0x12cd, 0x150f, 0x12cd, +0x15bf, 0x1381, 0x15bf, 0x1381, 0x154d, 0x1314, 0x154d, 0x1314, 0x15a3, 0x136f, 0x15a3, +0x136f, 0x15a3, 0x136f, 0x1305, 0x10d7, 0x1305, 0x10d7, 0x11af, 0xf86, 0x11af, 0xf86, +0x1027, 0xe05, 0x1027, 0xe05, 0x1053, 0xe38, 0x1053, 0xe38, 0x1139, 0xf26, 0x1139, +0xf26, 0x1139, 0xf26, 0x10d0, 0xec8, 0x10d0, 0xec8, 0x1070, 0xe73, 0x1070, 0xe73, +0xff2, 0xe02, 0xff2, 0xe02, 0x110f, 0xf2d, 0x110f, 0xf2d, 0x117b, 0xfaa, 0x117b, +0xfaa, 0x11ae, 0xff0, 0x11ae, 0xff0, 0x11ae, 0xff0, 0x11b5, 0x100b, 0x11b5, 0x100b, +0x1235, 0x10a1, 0x1235, 0x10a1, 0xfdb, 0xe5f, 0xfdb, 0xe5f, 0xf71, 0xe0e, 0xf71, +0xe0e, 0xddf, 0xc97, 0xddf, 0xc97, 0xcf4, 0xbc8, 0xcf4, 0xbc8, 0xcf4, 0xbc8, +0xdd4, 0xcc4, 0xdd4, 0xcc4, 0xf32, 0xe3e, 0xf32, 0xe3e, 0xe47, 0xd6e, 0xe47, +0xd6e, 0xfff, 0xf40, 0xfff, 0xf40, 0x109b, 0xff6, 0x109b, 0xff6, 0x109b, 0xff6, +0xe4e, 0xdbf, 0xe4e, 0xdbf, 0xe72, 0xdf8, 0xe72, 0xdf8, 0xe34, 0xdcc, 0xe34, +0xdcc, 0xe2c, 0xdd4, 0xe2c, 0xdd4, 0xcd9, 0xc8e, 0xcd9, 0xc8e, 0xd4b, 0xd09, +0xd4b, 0xd09, 0xd4b, 0xd09, 0xca9, 0xc6d, 0xca9, 0xc6d, 0xb04, 0xacc, 0xb04, +0xacc, 0x98c, 0x955, 0x98c, 0x955, 0x93a, 0x901, 0x93a, 0x901, 0x711, 0x6d4, +0x711, 0x6d4, 0x655, 0x613, 0x655, 0x613, 0x655, 0x613, 0x4c6, 0x47e, 0x4c6, +0x47e, 0x36b, 0x31c, 0x36b, 0x31c, 0x1ab, 0x156, 0x1ab, 0x156, 0x119, 0xbf, +0x119, 0xbf, 0x2a2, 0x245, 0x2a2, 0x245, 0x2a2, 0x245, 0x14d, 0xee, 0x14d, +0xee, 0xfa, 0x9d, 0xfa, 0x9d, 0x198, 0x13f, 0x198, 0x13f, 0xba, 0x68, +0xba, 0x68, 0xff3d, 0xfef7, 0xff3d, 0xfef7, 0xfdd4, 0xfd9d, 0xfdd4, 0xfd9d, 0xfdd4, +0xfd9d, 0xfaea, 0xfac7, 0xfaea, 0xfac7, 0xfa86, 0xfa7a, 0xfa86, 0xfa7a, 0xfa71, 0xfa80, +0xfa71, 0xfa80, 0xfbf3, 0xfc20, 0xfbf3, 0xfc20, 0xfa9c, 0xfaea, 0xfa9c, 0xfaea, 0xfa9c, +0xfaea, 0xfb58, 0xfbc9, 0xfb58, 0xfbc9, 0xfa96, 0xfb2c, 0xfa96, 0xfb2c, 0xf9c8, 0xfa83, +0xf9c8, 0xfa83, 0xf9f7, 0xfad9, 0xf9f7, 0xfad9, 0xf8b3, 0xf9ba, 0xf8b3, 0xf9ba, 0xf98a, +0xfab7, 0xf98a, 0xfab7, 0xf98a, 0xfab7, 0xfa2b, 0xfb7b, 0xfa2b, 0xfb7b, 0xfbd5, 0xfd47, +0xfbd5, 0xfd47, 0xf9fc, 0xfb8d, 0xf9fc, 0xfb8d, 0xf862, 0xfa0f, 0xf862, 0xfa0f, 0xf69c, +0xf861, 0xf69c, 0xf861, 0xf66e, 0xf849, 0xf66e, 0xf849, 0xf66e, 0xf849, 0xf6f3, 0xf8e0, +0xf6f3, 0xf8e0, 0xf99f, 0xfb9a, 0xf99f, 0xfb9a, 0xf9ae, 0xfbb5, 0xf9ae, 0xfbb5, 0xf9de, +0xfbed, 0xf9de, 0xfbed, 0xf746, 0xf95b, 0xf746, 0xf95b, 0xf746, 0xf95b, 0xf651, 0xf86a, +0xf651, 0xf86a, 0xf6da, 0xf8f5, 0xf6da, 0xf8f5, 0xf502, 0xf71e, 0xf502, 0xf71e, 0xf7a7, +0xf9c3, 0xf7a7, 0xf9c3, 0xf67e, 0xf89a, 0xf67e, 0xf89a, 0xf790, 0xf9ad, 0xf790, 0xf9ad, +0xf790, 0xf9ad, 0xf757, 0xf976, 0xf757, 0xf976, 0xf546, 0xf768, 0xf546, 0xf768, 0xf429, +0xf64f, 0xf429, 0xf64f, 0xf44e, 0xf679, 0xf44e, 0xf679, 0xf4af, 0xf6e2, 0xf4af, 0xf6e2, +0xf31f, 0xf55c, 0xf31f, 0xf55c, 0xf31f, 0xf55c, 0xf1ad, 0xf3f4, 0xf1ad, 0xf3f4, 0xf170, +0xf3c4, 0xf170, 0xf3c4, 0xefb4, 0xf216, 0xefb4, 0xf216, 0xefd2, 0xf244, 0xefd2, 0xf244, +0xf094, 0xf315, 0xf094, 0xf315, 0xf094, 0xf315, 0xef82, 0xf213, 0xef82, 0xf213, 0xef13, +0xf1b3, 0xef13, 0xf1b3, 0xef94, 0xf243, 0xef94, 0xf243, 0xee1d, 0xf0db, 0xee1d, 0xf0db, +0xeb01, 0xedcc, 0xeb01, 0xedcc, 0xeb35, 0xee0a, 0xeb35, 0xee0a, 0xeb35, 0xee0a, 0xeab4, +0xed93, 0xeab4, 0xed93, 0xea22, 0xed07, 0xea22, 0xed07, 0xe990, 0xec7a, 0xe990, 0xec7a, +0xe9ed, 0xecd9, 0xe9ed, 0xecd9, 0xe8f1, 0xebdc, 0xe8f1, 0xebdc, 0xe7ce, 0xeab6, 0xe7ce, +0xeab6, 0xe7ce, 0xeab6, 0xe771, 0xea54, 0xe771, 0xea54, 0xe9ec, 0xecc7, 0xe9ec, 0xecc7, +0xe952, 0xec24, 0xe952, 0xec24, 0xe8fa, 0xebc0, 0xe8fa, 0xebc0, 0xe95d, 0xec17, 0xe95d, +0xec17, 0xe95d, 0xec17, 0xe788, 0xea34, 0xe788, 0xea34, 0xe811, 0xeaad, 0xe811, 0xeaad, +0xe789, 0xea16, 0xe789, 0xea16, 0xe7e5, 0xea62, 0xe7e5, 0xea62, 0xe8c6, 0xeb32, 0xe8c6, +0xeb32, 0xe9e1, 0xec3d, 0xe9e1, 0xec3d, 0xe9e1, 0xec3d, 0xeaab, 0xecf6, 0xeaab, 0xecf6, +0xecf0, 0xef2b, 0xecf0, 0xef2b, 0xed46, 0xef70, 0xed46, 0xef70, 0xee91, 0xf0ac, 0xee91, +0xf0ac, 0xee60, 0xf06c, 0xee60, 0xf06c, 0xf07c, 0xf278, 0xf07c, 0xf278, 0xf07c, 0xf278, +0xf1e8, 0xf3d5, 0xf1e8, 0xf3d5, 0xf253, 0xf432, 0xf253, 0xf432, 0xf342, 0xf513, 0xf342, +0xf513, 0xf393, 0xf556, 0xf393, 0xf556, 0xf4f5, 0xf6ab, 0xf4f5, 0xf6ab, 0xf4f5, 0xf6ab, +0xf646, 0xf7ef, 0xf646, 0xf7ef, 0xf8f6, 0xfa92, 0xf8f6, 0xfa92, 0xf7e1, 0xf971, 0xf7e1, +0xf971, 0xf8aa, 0xfa2f, 0xf8aa, 0xfa2f, 0xf762, 0xf8dc, 0xf762, 0xf8dc, 0xf848, 0xf9b8, +0xf848, 0xf9b8, 0xf848, 0xf9b8, 0xf70d, 0xf874, 0xf70d, 0xf874, 0xf5a3, 0xf702, 0xf5a3, +0xf702, 0xf5ed, 0xf744, 0xf5ed, 0xf744, 0xf579, 0xf6c9, 0xf579, 0xf6c9, 0xf681, 0xf7cb, +0xf681, 0xf7cb, 0xf6b9, 0xf7fe, 0xf6b9, 0xf7fe, 0xf6b9, 0xf7fe, 0xf60e, 0xf74f, 0xf60e, +0xf74f, 0xf31b, 0xf458, 0xf31b, 0xf458, 0xf22b, 0xf364, 0xf22b, 0xf364, 0xefef, 0xf125, +0xefef, 0xf125, 0xef2d, 0xf060, 0xef2d, 0xf060, 0xef2d, 0xf060, 0xef2e, 0xf05c, 0xef2e, +0xf05c, 0xef43, 0xf06a, 0xef43, 0xf06a, 0xef38, 0xf058, 0xef38, 0xf058, 0xeea0, 0xefb6, +0xeea0, 0xefb6, 0xedbb, 0xeec5, 0xedbb, 0xeec5, 0xebe9, 0xece3, 0xebe9, 0xece3, 0xebe9, +0xece3, 0xebab, 0xec92, 0xebab, 0xec92, 0xed5b, 0xee2c, 0xed5b, 0xee2c, 0xecdb, 0xed92, +0xecdb, 0xed92, 0xed66, 0xee00, 0xed66, 0xee00, 0xef40, 0xefb8, 0xef40, 0xefb8, 0xf039, +0xf08c, 0xf039, 0xf08c, 0xf039, 0xf08c, 0xf0dd, 0xf107, 0xf0dd, 0xf107, 0xf1cc, 0xf1ca, +0xf1cc, 0xf1ca, 0xf382, 0xf352, 0xf382, 0xf352, 0xf4c8, 0xf468, 0xf4c8, 0xf468, 0xf719, +0xf688, 0xf719, 0xf688, 0xf719, 0xf688, 0xf9cb, 0xf907, 0xf9cb, 0xf907, 0xfb41, 0xfa4c, +0xfb41, 0xfa4c, 0xfb48, 0xfa23, 0xfb48, 0xfa23, 0xfd31, 0xfbdc, 0xfd31, 0xfbdc, 0xfd54, +0xfbd4, 0xfd54, 0xfbd4, 0xfed4, 0xfd2b, 0xfed4, 0xfd2b, 0xfed4, 0xfd2b, 0x27, 0xfe5a, +0x27, 0xfe5a, 0x243, 0x55, 0x243, 0x55, 0x249, 0x40, 0x249, 0x40, 0x2f2, +0xd3, 0x2f2, 0xd3, 0x4c7, 0x298, 0x4c7, 0x298, 0x4a0, 0x265, 0x4a0, 0x265, +0x4a0, 0x265, 0x698, 0x457, 0x698, 0x457, 0x6a2, 0x45f, 0x6a2, 0x45f, 0x6e3, +0x4a3, 0x6e3, 0x4a3, 0x5ec, 0x3b1, 0x5ec, 0x3b1, 0x625, 0x3f3, 0x625, 0x3f3, +0x625, 0x3f3, 0x581, 0x359, 0x581, 0x359, 0x554, 0x339, 0x554, 0x339, 0x527, +0x318, 0x527, 0x318, 0x522, 0x31f, 0x522, 0x31f, 0x4b8, 0x2c1, 0x4b8, 0x2c1, +0x797, 0x5a9, 0x797, 0x5a9, 0x797, 0x5a9, 0x83b, 0x654, 0x83b, 0x654, 0x7be, +0x5dc, 0x7be, 0x5dc, 0x8ea, 0x70a, 0x8ea, 0x70a, 0x809, 0x627, 0x809, 0x627, +0xbda, 0x9f4, 0xbda, 0x9f4, 0xc65, 0xa79, 0xc65, 0xa79, 0xc65, 0xa79, 0xe98, +0xca3, 0xe98, 0xca3, 0x100e, 0xe0e, 0x100e, 0xe0e, 0x10b2, 0xea8, 0x10b2, 0xea8, +0x1225, 0x100f, 0x1225, 0x100f, 0x11ab, 0xf8b, 0x11ab, 0xf8b, 0x11ab, 0xf8b, 0x10e8, +0xec0, 0x10e8, 0xec0, 0x11d5, 0xfa7, 0x11d5, 0xfa7, 0x1421, 0x11f0, 0x1421, 0x11f0, +0x154b, 0x131b, 0x154b, 0x131b, 0x146b, 0x1242, 0x146b, 0x1242, 0x11ee, 0xfd0, 0x11ee, +0xfd0, 0x11ee, 0xfd0, 0x1110, 0xf03, 0x1110, 0xf03, 0xf98, 0xda2, 0xf98, 0xda2, +0xf79, 0xda0, 0xf79, 0xda0, 0x10bd, 0xf06, 0x10bd, 0xf06, 0x1131, 0xfa1, 0x1131, +0xfa1, 0x1131, 0xfa1, 0x10d7, 0xf74, 0x10d7, 0xf74, 0x1077, 0xf44, 0x1077, 0xf44, +0xf2c, 0xe2c, 0xf2c, 0xe2c, 0xe7a, 0xdae, 0xe7a, 0xdae, 0xe43, 0xdae, 0xe43, +0xdae, 0xe85, 0xe25, 0xe85, 0xe25, 0xe85, 0xe25, 0xeb5, 0xe8a, 0xeb5, 0xe8a, +0xe51, 0xe58, 0xe51, 0xe58, 0xcad, 0xce2, 0xcad, 0xce2, 0xbea, 0xc4a, 0xbea, +0xc4a, 0xafe, 0xb82, 0xafe, 0xb82, 0xa3c, 0xade, 0xa3c, 0xade, 0xa3c, 0xade, +0x929, 0x9e3, 0x929, 0x9e3, 0x722, 0x7ec, 0x722, 0x7ec, 0x537, 0x60b, 0x537, +0x60b, 0x1b2, 0x288, 0x1b2, 0x288, 0xa, 0xdc, 0xa, 0xdc, 0xa, 0xdc, +0xff47, 0xd, 0xff47, 0xd, 0xff08, 0xffbc, 0xff08, 0xffbc, 0xfe8f, 0xff2c, 0xfe8f, +0xff2c, 0xeb, 0x16d, 0xeb, 0x16d, 0xcc, 0x12e, 0xcc, 0x12e, 0x13, 0x52, +0x13, 0x52, 0x13, 0x52, 0xff3a, 0xff54, 0xff3a, 0xff54, 0xfe0e, 0xfe01, 0xfe0e, +0xfe01, 0xfd4b, 0xfd17, 0xfd4b, 0xfd17, 0xfcae, 0xfc53, 0xfcae, 0xfc53, 0xfe40, 0xfdbf, +0xfe40, 0xfdbf, 0xfe94, 0xfded, 0xfe94, 0xfded, 0xfe94, 0xfded, 0xfdfb, 0xfd32, 0xfdfb, +0xfd32, 0xfd00, 0xfc15, 0xfd00, 0xfc15, 0xfd6b, 0xfc61, 0xfd6b, 0xfc61, 0xfc9b, 0xfb74, +0xfc9b, 0xfb74, 0xff6c, 0xfe2b, 0xff6c, 0xfe2b, 0xff6c, 0xfe2b, 0xff56, 0xfdfd, 0xff56, +0xfdfd, 0xffae, 0xfe40, 0xffae, 0xfe40, 0xffa2, 0xfe1f, 0xffa2, 0xfe1f, 0xa, 0xfe75, +0xa, 0xfe75, 0x2a5, 0xfe, 0x2a5, 0xfe, 0x238, 0x80, 0x238, 0x80, 0x238, +0x80, 0x3a8, 0x1df, 0x3a8, 0x1df, 0x3a5, 0x1cc, 0x3a5, 0x1cc, 0x628, 0x43f, +0x628, 0x43f, 0x89f, 0x6a5, 0x89f, 0x6a5, 0x9da, 0x7cf, 0x9da, 0x7cf, 0x928, +0x70b, 0x928, 0x70b, 0x928, 0x70b, 0x9a2, 0x773, 0x9a2, 0x773, 0xc31, 0x9ef, +0xc31, 0x9ef, 0xe57, 0xc03, 0xe57, 0xc03, 0x1024, 0xdbc, 0x1024, 0xdbc, 0x110d, +0xe92, 0x110d, 0xe92, 0x110d, 0xe92, 0x12c8, 0x103b, 0x12c8, 0x103b, 0x142a, 0x118c, +0x142a, 0x118c, 0x1522, 0x1272, 0x1522, 0x1272, 0x166e, 0x13af, 0x166e, 0x13af, 0x1743, +0x1476, 0x1743, 0x1476, 0x190f, 0x1634, 0x190f, 0x1634, 0x190f, 0x1634, 0x1a79, 0x1793, +0x1a79, 0x1793, 0x1ae3, 0x17f3, 0x1ae3, 0x17f3, 0x1ada, 0x17e2, 0x1ada, 0x17e2, 0x1a99, +0x179c, 0x1a99, 0x179c, 0x1cb4, 0x19b2, 0x1cb4, 0x19b2, 0x1cdc, 0x19d7, 0x1cdc, 0x19d7, +0x1cdc, 0x19d7, 0x1cc4, 0x19be, 0x1cc4, 0x19be, 0x1d4d, 0x1a48, 0x1d4d, 0x1a48, 0x1d60, +0x1a5d, 0x1d60, 0x1a5d, 0x1c74, 0x1976, 0x1c74, 0x1976, 0x1bcc, 0x18d3, 0x1bcc, 0x18d3, +0x1bcc, 0x18d3, 0x1a2a, 0x1739, 0x1a2a, 0x1739, 0x18db, 0x15f2, 0x18db, 0x15f2, 0x179f, +0x14c0, 0x179f, 0x14c0, 0x16cf, 0x13fb, 0x16cf, 0x13fb, 0x1668, 0x13a2, 0x1668, 0x13a2, +0x1547, 0x1290, 0x1547, 0x1290, 0x1547, 0x1290, 0x137b, 0x10d6, 0x137b, 0x10d6, 0x1167, +0xed5, 0x1167, 0xed5, 0x11c3, 0xf48, 0x11c3, 0xf48, 0x10e7, 0xe85, 0x10e7, 0xe85, +0x11ed, 0xfa5, 0x11ed, 0xfa5, 0x11c3, 0xf99, 0x11c3, 0xf99, 0x11c3, 0xf99, 0x112e, +0xf25, 0x112e, 0xf25, 0xf28, 0xd41, 0xf28, 0xd41, 0xcf3, 0xb32, 0xcf3, 0xb32, +0xba0, 0xa07, 0xba0, 0xa07, 0xa43, 0x8d2, 0xa43, 0x8d2, 0xa43, 0x8d2, 0x944, +0x7fe, 0x944, 0x7fe, 0x971, 0x856, 0x971, 0x856, 0x833, 0x744, 0x833, 0x744, +0x756, 0x692, 0x756, 0x692, 0x8d9, 0x83f, 0x8d9, 0x83f, 0x796, 0x724, 0x796, +0x724, 0x796, 0x724, 0x935, 0x8e9, 0x935, 0x8e9, 0x80b, 0x7e2, 0x80b, 0x7e2, +0x9c8, 0x9bf, 0x9c8, 0x9bf, 0x9bc, 0x9cd, 0x9bc, 0x9cd, 0x71e, 0x746, 0x71e, +0x746, 0x635, 0x66f, 0x635, 0x66f, 0x635, 0x66f, 0x3e4, 0x42b, 0x3e4, 0x42b, +0x402, 0x451, 0x402, 0x451, 0x3f0, 0x442, 0x3f0, 0x442, 0x33f, 0x390, 0x33f, +0x390, 0x146, 0x192, 0x146, 0x192, 0x146, 0x192, 0x24, 0x68, 0x24, 0x68, +0xff4c, 0xff85, 0xff4c, 0xff85, 0xfe68, 0xfe95, 0xfe68, 0xfe95, 0xfc77, 0xfc96, 0xfc77, +0xfc96, 0xfb4c, 0xfb5f, 0xfb4c, 0xfb5f, 0xfb64, 0xfb6b, 0xfb64, 0xfb6b, 0xfb64, 0xfb6b, +0xfb46, 0xfb45, 0xfb46, 0xfb45, 0xfb5b, 0xfb54, 0xfb5b, 0xfb54, 0xfb2e, 0xfb24, 0xfb2e, +0xfb24, 0xf912, 0xf90b, 0xf912, 0xf90b, 0xf71e, 0xf71f, 0xf71e, 0xf71f, 0xf5b0, 0xf5be, +0xf5b0, 0xf5be, 0xf5b0, 0xf5be, 0xf54f, 0xf570, 0xf54f, 0xf570, 0xf52f, 0xf56a, 0xf52f, +0xf56a, 0xf5f2, 0xf64b, 0xf5f2, 0xf64b, 0xf7a2, 0xf81e, 0xf7a2, 0xf81e, 0xf766, 0xf80b, +0xf766, 0xf80b, 0xf766, 0xf80b, 0xf55f, 0xf630, 0xf55f, 0xf630, 0xf2da, 0xf3da, 0xf2da, +0xf3da, 0xf193, 0xf2c3, 0xf193, 0xf2c3, 0xf1ac, 0xf30e, 0xf1ac, 0xf30e, 0xf424, 0xf5b7, +0xf424, 0xf5b7, 0xf5d9, 0xf79d, 0xf5d9, 0xf79d, 0xf5d9, 0xf79d, 0xf6a5, 0xf897, 0xf6a5, +0xf897, 0xf5fc, 0xf818, 0xf5fc, 0xf818, 0xf45e, 0xf6a0, 0xf45e, 0xf6a0, 0xf1f2, 0xf455, +0xf1f2, 0xf455, 0xf203, 0xf482, 0xf203, 0xf482, 0xf180, 0xf415, 0xf180, 0xf415, 0xf180, +0xf415, 0xf267, 0xf50c, 0xf267, 0xf50c, 0xf2f4, 0xf5a3, 0xf2f4, 0xf5a3, 0xf233, 0xf4e7, +0xf233, 0xf4e7, 0xf28b, 0xf53f, 0xf28b, 0xf53f, 0xf0d5, 0xf384, 0xf0d5, 0xf384, 0xf0d5, +0xf384, 0xf189, 0xf42e, 0xf189, 0xf42e, 0xf19b, 0xf435, 0xf19b, 0xf435, 0xf249, 0xf4d6, +0xf249, 0xf4d6, 0xf2cb, 0xf549, 0xf2cb, 0xf549, 0xf338, 0xf5a9, 0xf338, 0xf5a9, 0xf218, +0xf47d, 0xf218, 0xf47d, 0xf218, 0xf47d, 0xf1f5, 0xf450, 0xf1f5, 0xf450, 0xf1a3, 0xf3f6, +0xf1a3, 0xf3f6, 0xf286, 0xf4d6, 0xf286, 0xf4d6, 0xf264, 0xf4b4, 0xf264, 0xf4b4, 0xf243, +0xf499, 0xf243, 0xf499, 0xf243, 0xf499, 0xf25f, 0xf4c0, 0xf25f, 0xf4c0, 0xef31, 0xf1a1, +0xef31, 0xf1a1, 0xf0af, 0xf332, 0xf0af, 0xf332, 0xf033, 0xf2cd, 0xf033, 0xf2cd, 0xeff9, +0xf2ae, 0xeff9, 0xf2ae, 0xf011, 0xf2e5, 0xf011, 0xf2e5, 0xf011, 0xf2e5, 0xefff, 0xf2f2, +0xefff, 0xf2f2, 0xf10f, 0xf422, 0xf10f, 0xf422, 0xf0fc, 0xf42e, 0xf0fc, 0xf42e, 0xef2b, +0xf27d, 0xef2b, 0xf27d, 0xed7f, 0xf0ed, 0xed7f, 0xf0ed, 0xedbf, 0xf146, 0xedbf, 0xf146, +0xedbf, 0xf146, 0xeebd, 0xf259, 0xeebd, 0xf259, 0xee5d, 0xf209, 0xee5d, 0xf209, 0xec46, +0xeffd, 0xec46, 0xeffd, 0xea52, 0xee0f, 0xea52, 0xee0f, 0xe9d1, 0xed8c, 0xe9d1, 0xed8c, +0xe9d1, 0xed8c, 0xea42, 0xedf6, 0xea42, 0xedf6, 0xeaa2, 0xee49, 0xeaa2, 0xee49, 0xeb09, +0xee9c, 0xeb09, 0xee9c, 0xea9e, 0xee19, 0xea9e, 0xee19, 0xeb9a, 0xeef7, 0xeb9a, 0xeef7, +0xeb52, 0xee8f, 0xeb52, 0xee8f, 0xeb52, 0xee8f, 0xebbb, 0xeed4, 0xebbb, 0xeed4, 0xeac3, +0xedb4, 0xeac3, 0xedb4, 0xea55, 0xed1d, 0xea55, 0xed1d, 0xec4b, 0xeeea, 0xec4b, 0xeeea, +0xecac, 0xef23, 0xecac, 0xef23, 0xee19, 0xf067, 0xee19, 0xf067, 0xee19, 0xf067, 0xeec1, +0xf0e9, 0xeec1, 0xf0e9, 0xee66, 0xf06a, 0xee66, 0xf06a, 0xf04e, 0xf231, 0xf04e, 0xf231, +0xf2b5, 0xf47b, 0xf2b5, 0xf47b, 0xf514, 0xf6bf, 0xf514, 0xf6bf, 0xf514, 0xf6bf, 0xf68a, +0xf81e, 0xf68a, 0xf81e, 0xf7f0, 0xf971, 0xf7f0, 0xf971, 0xf796, 0xf908, 0xf796, 0xf908, +0xf6f9, 0xf85e, 0xf6f9, 0xf85e, 0xf7f3, 0xf94f, 0xf7f3, 0xf94f, 0xf6d4, 0xf829, 0xf6d4, +0xf829, 0xf6d4, 0xf829, 0xf839, 0xf989, 0xf839, 0xf989, 0xf863, 0xf9b1, 0xf863, 0xf9b1, +0xf934, 0xfa80, 0xf934, 0xfa80, 0xf950, 0xfa9c, 0xf950, 0xfa9c, 0xf8ff, 0xfa4a, 0xf8ff, +0xfa4a, 0xf865, 0xf9af, 0xf865, 0xf9af, 0xf865, 0xf9af, 0xf690, 0xf7da, 0xf690, 0xf7da, +0xf63a, 0xf782, 0xf63a, 0xf782, 0xf74c, 0xf892, 0xf74c, 0xf892, 0xf81c, 0xf95f, 0xf81c, +0xf95f, 0xf799, 0xf8d7, 0xf799, 0xf8d7, 0xf799, 0xf8d7, 0xf7bc, 0xf8f5, 0xf7bc, 0xf8f5, +0xf524, 0xf656, 0xf524, 0xf656, 0xf3ff, 0xf52a, 0xf3ff, 0xf52a, 0xf08e, 0xf1af, 0xf08e, +0xf1af, 0xf0d7, 0xf1ed, 0xf0d7, 0xf1ed, 0xf1dc, 0xf2e8, 0xf1dc, 0xf2e8, 0xf1dc, 0xf2e8, +0xf12b, 0xf22a, 0xf12b, 0xf22a, 0xf3a7, 0xf499, 0xf3a7, 0xf499, 0xf23d, 0xf321, 0xf23d, +0xf321, 0xf051, 0xf125, 0xf051, 0xf125, 0xeff3, 0xf0b6, 0xeff3, 0xf0b6, 0xefea, 0xf09b, +0xefea, 0xf09b, 0xefea, 0xf09b, 0xf03c, 0xf0db, 0xf03c, 0xf0db, 0xf17d, 0xf207, 0xf17d, +0xf207, 0xf20f, 0xf282, 0xf20f, 0xf282, 0xf287, 0xf2e2, 0xf287, 0xf2e2, 0xf2fb, 0xf33d, +0xf2fb, 0xf33d, 0xf2fb, 0xf33d, 0xf50c, 0xf532, 0xf50c, 0xf532, 0xf72a, 0xf732, 0xf72a, +0xf732, 0xf805, 0xf7ee, 0xf805, 0xf7ee, 0xf98b, 0xf954, 0xf98b, 0xf954, 0xfbfa, 0xfba1, +0xfbfa, 0xfba1, 0xfd0d, 0xfc91, 0xfd0d, 0xfc91, 0xfd0d, 0xfc91, 0xfdca, 0xfd2a, 0xfdca, +0xfd2a, 0xfddb, 0xfd18, 0xfddb, 0xfd18, 0xfeed, 0xfe07, 0xfeed, 0xfe07, 0x15b, 0x53, +0x15b, 0x53, 0x2df, 0x1b5, 0x2df, 0x1b5, 0x576, 0x42f, 0x576, 0x42f, 0x576, +0x42f, 0x58f, 0x42b, 0x58f, 0x42b, 0x64b, 0x4ce, 0x64b, 0x4ce, 0x724, 0x592, +0x724, 0x592, 0x7c4, 0x621, 0x7c4, 0x621, 0x97a, 0x7ca, 0x97a, 0x7ca, 0x97a, +0x7ca, 0x9ac, 0x7f4, 0x9ac, 0x7f4, 0xa68, 0x8ab, 0xa68, 0x8ab, 0xc1d, 0xa61, +0xc1d, 0xa61, 0xcfd, 0xb45, 0xcfd, 0xb45, 0xcff, 0xb50, 0xcff, 0xb50, 0xcdd, +0xb39, 0xcdd, 0xb39, 0xcdd, 0xb39, 0xcb4, 0xb1d, 0xcb4, 0xb1d, 0xa9b, 0x913, +0xa9b, 0x913, 0xac8, 0x951, 0xac8, 0x951, 0xaf2, 0x98b, 0xaf2, 0x98b, 0x976, +0x81f, 0x976, 0x81f, 0x9d2, 0x88b, 0x9d2, 0x88b, 0x9d2, 0x88b, 0x8ec, 0x7b2, +0x8ec, 0x7b2, 0x8e6, 0x7b6, 0x8e6, 0x7b6, 0x8f7, 0x7cf, 0x8f7, 0x7cf, 0xa53, +0x92f, 0xa53, 0x92f, 0xc3f, 0xb1b, 0xc3f, 0xb1b, 0xc3f, 0xb1b, 0xdf2, 0xccc, +0xdf2, 0xccc, 0xf18, 0xdec, 0xf18, 0xdec, 0x1013, 0xedf, 0x1013, 0xedf, 0xf04, +0xdc4, 0xf04, 0xdc4, 0xefb, 0xdaf, 0xefb, 0xdaf, 0xeb6, 0xd5d, 0xeb6, 0xd5d, +0xeb6, 0xd5d, 0xf07, 0xda1, 0xf07, 0xda1, 0x11b7, 0x1046, 0x11b7, 0x1046, 0x11f2, +0x1077, 0x11f2, 0x1077, 0x1383, 0x1202, 0x1383, 0x1202, 0x1118, 0xf94, 0x1118, 0xf94, +0xf84, 0xe04, 0xf84, 0xe04, 0xf84, 0xe04, 0xf62, 0xdea, 0xf62, 0xdea, 0xe80, +0xd17, 0xe80, 0xd17, 0xe20, 0xccc, 0xe20, 0xccc, 0xef5, 0xdbc, 0xef5, 0xdbc, +0xe93, 0xd7c, 0xe93, 0xd7c, 0xe93, 0xd7c, 0xdb7, 0xcc8, 0xdb7, 0xcc8, 0xea9, +0xde6, 0xea9, 0xde6, 0xdbe, 0xd2e, 0xdbe, 0xd2e, 0xdb5, 0xd59, 0xdb5, 0xd59, +0xd6c, 0xd48, 0xd6c, 0xd48, 0xd49, 0xd5e, 0xd49, 0xd5e, 0xd49, 0xd5e, 0xb9a, +0xbe8, 0xb9a, 0xbe8, 0x988, 0xa0d, 0x988, 0xa0d, 0x925, 0x9dd, 0x925, 0x9dd, +0x8d3, 0x9bb, 0x8d3, 0x9bb, 0x767, 0x878, 0x767, 0x878, 0x67d, 0x7b1, 0x67d, +0x7b1, 0x67d, 0x7b1, 0x423, 0x573, 0x423, 0x573, 0x1df, 0x342, 0x1df, 0x342, +0xff65, 0xd3, 0xff65, 0xd3, 0xfd2a, 0xfe99, 0xfd2a, 0xfe99, 0xfc28, 0xfd8f, 0xfc28, +0xfd8f, 0xfc28, 0xfd8f, 0xf9d2, 0xfb28, 0xf9d2, 0xfb28, 0xfa6b, 0xfba9, 0xfa6b, 0xfba9, +0xfb52, 0xfc70, 0xfb52, 0xfc70, 0xfb00, 0xfbf7, 0xfb00, 0xfbf7, 0xfb2c, 0xfbf6, 0xfb2c, +0xfbf6, 0xf9b7, 0xfa51, 0xf9b7, 0xfa51, 0xf9b7, 0xfa51, 0xf7af, 0xf815, 0xf7af, 0xf815, +0xf76b, 0xf79c, 0xf76b, 0xf79c, 0xf7cd, 0xf7c7, 0xf7cd, 0xf7c7, 0xf8b6, 0xf87a, 0xf8b6, +0xf87a, 0xf938, 0xf8c8, 0xf938, 0xf8c8, 0xf938, 0xf8c8, 0xf8c8, 0xf826, 0xf8c8, 0xf826, +0xf65b, 0xf58a, 0xf65b, 0xf58a, 0xf6d2, 0xf5d6, 0xf6d2, 0xf5d6, 0xf6aa, 0xf587, 0xf6aa, +0xf587, 0xf558, 0xf413, 0xf558, 0xf413, 0xf629, 0xf4c6, 0xf629, 0xf4c6, 0xf629, 0xf4c6, +0xf674, 0xf4f9, 0xf674, 0xf4f9, 0xf77d, 0xf5ec, 0xf77d, 0xf5ec, 0xf8ab, 0xf709, 0xf8ab, +0xf709, 0xf9c0, 0xf80f, 0xf9c0, 0xf80f, 0xf9d5, 0xf817, 0xf9d5, 0xf817, 0xfa61, 0xf898, +0xfa61, 0xf898, 0xfa61, 0xf898, 0xfc0c, 0xfa39, 0xfc0c, 0xfa39, 0xfdce, 0xfbf1, 0xfdce, +0xfbf1, 0xfd51, 0xfb6a, 0xfd51, 0xfb6a, 0xfeec, 0xfcf9, 0xfeec, 0xfcf9, 0xfebf, 0xfcbe, +0xfebf, 0xfcbe, 0xfebf, 0xfcbe, 0x58, 0xfe48, 0x58, 0xfe48, 0x2b9, 0x97, 0x2b9, +0x97, 0x412, 0x1db, 0x412, 0x1db, 0x7a5, 0x557, 0x7a5, 0x557, 0x951, 0x6ea, +0x951, 0x6ea, 0xbc0, 0x93f, 0xbc0, 0x93f, 0xbc0, 0x93f, 0xd66, 0xac8, 0xd66, +0xac8, 0xf1c, 0xc60, 0xf1c, 0xc60, 0xfd2, 0xcf9, 0xfd2, 0xcf9, 0x11b2, 0xebb, +0x11b2, 0xebb, 0x13be, 0x10ab, 0x13be, 0x10ab, 0x17d5, 0x14a6, 0x17d5, 0x14a6, 0x17d5, +0x14a6, 0x1a9a, 0x1752, 0x1a9a, 0x1752, 0x1ac1, 0x1762, 0x1ac1, 0x1762, 0x1b04, 0x1792, +0x1b04, 0x1792, 0x1bee, 0x186b, 0x1bee, 0x186b, 0x1df7, 0x1a69, 0x1df7, 0x1a69, 0x1df7, +0x1a69, 0x1ef9, 0x1b63, 0x1ef9, 0x1b63, 0x207d, 0x1ce3, 0x207d, 0x1ce3, 0x219d, 0x1e05, +0x219d, 0x1e05, 0x216a, 0x1dd6, 0x216a, 0x1dd6, 0x2027, 0x1c9c, 0x2027, 0x1c9c, 0x1f59, +0x1bdb, 0x1f59, 0x1bdb, 0x1f59, 0x1bdb, 0x1d22, 0x19b5, 0x1d22, 0x19b5, 0x1cc9, 0x1970, +0x1cc9, 0x1970, 0x1d0b, 0x19c9, 0x1d0b, 0x19c9, 0x1ce3, 0x19bb, 0x1ce3, 0x19bb, 0x1af5, +0x17e9, 0x1af5, 0x17e9, 0x1888, 0x159a, 0x1888, 0x159a, 0x1888, 0x159a, 0x17ed, 0x151f, +0x17ed, 0x151f, 0x1704, 0x1458, 0x1704, 0x1458, 0x168a, 0x1401, 0x168a, 0x1401, 0x1730, +0x14cb, 0x1730, 0x14cb, 0x1697, 0x1457, 0x1697, 0x1457, 0x1697, 0x1457, 0x14a4, 0x128a, +0x14a4, 0x128a, 0x1436, 0x1243, 0x1436, 0x1243, 0x1325, 0x1159, 0x1325, 0x1159, 0x113a, +0xf96, 0x113a, 0xf96, 0x10f7, 0xf7b, 0x10f7, 0xf7b, 0x1054, 0xf00, 0x1054, 0xf00, +0x1054, 0xf00, 0xe25, 0xcfa, 0xe25, 0xcfa, 0xdb7, 0xcb4, 0xdb7, 0xcb4, 0xbb0, +0xad4, 0xbb0, 0xad4, 0x9d0, 0x91b, 0x9d0, 0x91b, 0x8b0, 0x821, 0x8b0, 0x821, +0x957, 0x8ec, 0x957, 0x8ec, 0x957, 0x8ec, 0xa81, 0xa38, 0xa81, 0xa38, 0xb47, +0xb1e, 0xb47, 0xb1e, 0xb2d, 0xb22, 0xb2d, 0xb22, 0x9a6, 0x9b5, 0x9a6, 0x9b5, +0x800, 0x827, 0x800, 0x827, 0x800, 0x827, 0x749, 0x785, 0x749, 0x785, 0x616, +0x663, 0x616, 0x663, 0x3b9, 0x413, 0x3b9, 0x413, 0x2f7, 0x35b, 0x2f7, 0x35b, +0x94, 0xfe, 0x94, 0xfe, 0xc9, 0x136, 0xc9, 0x136, 0xc9, 0x136, 0xff57, +0xffc5, 0xff57, 0xffc5, 0xfe3a, 0xfea6, 0xfe3a, 0xfea6, 0xfd0d, 0xfd75, 0xfd0d, 0xfd75, +0xfc25, 0xfc88, 0xfc25, 0xfc88, 0xfc7d, 0xfcda, 0xfc7d, 0xfcda, 0xfc57, 0xfcae, 0xfc57, +0xfcae, 0xfc57, 0xfcae, 0xfc91, 0xfce3, 0xfc91, 0xfce3, 0xfbf3, 0xfc42, 0xfbf3, 0xfc42, +0xfbb1, 0xfbfe, 0xfbb1, 0xfbfe, 0xf9e7, 0xfa35, 0xf9e7, 0xfa35, 0xfa31, 0xfa83, 0xfa31, +0xfa83, 0xfa31, 0xfa83, 0xf9fc, 0xfa55, 0xf9fc, 0xfa55, 0xfaee, 0xfb51, 0xfaee, 0xfb51, +0xfc82, 0xfcf4, 0xfc82, 0xfcf4, 0xfd7e, 0xfe01, 0xfd7e, 0xfe01, 0xfe02, 0xfe9a, 0xfe02, +0xfe9a, 0xfd05, 0xfdb6, 0xfd05, 0xfdb6, 0xfd05, 0xfdb6, 0xfaa0, 0xfb6c, 0xfaa0, 0xfb6c, +0xf90b, 0xf9f4, 0xf90b, 0xf9f4, 0xf894, 0xf99b, 0xf894, 0xf99b, 0xf981, 0xfaa9, 0xf981, +0xfaa9, 0xf9c1, 0xfb08, 0xf9c1, 0xfb08, 0xf97b, 0xfae1, 0xf97b, 0xfae1, 0xf97b, 0xfae1, +0xfac4, 0xfc48, 0xfac4, 0xfc48, 0xfa6d, 0xfc0e, 0xfa6d, 0xfc0e, 0xfa7d, 0xfc37, 0xfa7d, +0xfc37, 0xf9d8, 0xfba7, 0xf9d8, 0xfba7, 0xf9fe, 0xfbe0, 0xf9fe, 0xfbe0, 0xf9fe, 0xfbe0, +0xfa60, 0xfc51, 0xfa60, 0xfc51, 0xf9fd, 0xfbf8, 0xf9fd, 0xfbf8, 0xf8d1, 0xfad3, 0xf8d1, +0xfad3, 0xf7ff, 0xfa03, 0xf7ff, 0xfa03, 0xf6b2, 0xf8b4, 0xf6b2, 0xf8b4, 0xf68a, 0xf888, +0xf68a, 0xf888, 0xf68a, 0xf888, 0xf80b, 0xfa02, 0xf80b, 0xfa02, 0xf83a, 0xfa28, 0xf83a, +0xfa28, 0xf72d, 0xf910, 0xf72d, 0xf910, 0xf7f4, 0xf9cb, 0xf7f4, 0xf9cb, 0xf7f9, 0xf9c4, +0xf7f9, 0xf9c4, 0xf644, 0xf803, 0xf644, 0xf803, 0xf644, 0xf803, 0xf674, 0xf829, 0xf674, +0xf829, 0xf636, 0xf7e2, 0xf636, 0xf7e2, 0xf562, 0xf709, 0xf562, 0xf709, 0xf413, 0xf5b6, +0xf413, 0xf5b6, 0xf3bd, 0xf55f, 0xf3bd, 0xf55f, 0xf3bd, 0xf55f, 0xf309, 0xf4ae, 0xf309, +0xf4ae, 0xf343, 0xf4ee, 0xf343, 0xf4ee, 0xf404, 0xf5b8, 0xf404, 0xf5b8, 0xf3a0, 0xf560, +0xf3a0, 0xf560, 0xf1e8, 0xf3b7, 0xf1e8, 0xf3b7, 0xf28a, 0xf469, 0xf28a, 0xf469, 0xf28a, +0xf469, 0xf120, 0xf312, 0xf120, 0xf312, 0xf022, 0xf227, 0xf022, 0xf227, 0xefa2, 0xf1ba, +0xefa2, 0xf1ba, 0xeddf, 0xf00c, 0xeddf, 0xf00c, 0xeee7, 0xf128, 0xeee7, 0xf128, 0xee44, +0xf096, 0xee44, 0xf096, 0xee44, 0xf096, 0xeee2, 0xf146, 0xeee2, 0xf146, 0xed3c, 0xefb0, +0xed3c, 0xefb0, 0xebe9, 0xee69, 0xebe9, 0xee69, 0xeb50, 0xeddb, 0xeb50, 0xeddb, 0xea4e, +0xece1, 0xea4e, 0xece1, 0xea4e, 0xece1, 0xe8d3, 0xeb6c, 0xe8d3, 0xeb6c, 0xe8bc, 0xeb58, +0xe8bc, 0xeb58, 0xe949, 0xebe6, 0xe949, 0xebe6, 0xea5d, 0xecf8, 0xea5d, 0xecf8, 0xec4f, +0xeee8, 0xec4f, 0xeee8, 0xebf8, 0xee8b, 0xebf8, 0xee8b, 0xebf8, 0xee8b, 0xebb7, 0xee44, +0xebb7, 0xee44, 0xead1, 0xed57, 0xead1, 0xed57, 0xeaf9, 0xed76, 0xeaf9, 0xed76, 0xeb7a, +0xedee, 0xeb7a, 0xedee, 0xeb47, 0xedb2, 0xeb47, 0xedb2, 0xeb47, 0xedb2, 0xeb56, 0xedb9, +0xeb56, 0xedb9, 0xec40, 0xee98, 0xec40, 0xee98, 0xed3b, 0xef8b, 0xed3b, 0xef8b, 0xef46, +0xf18c, 0xef46, 0xf18c, 0xf078, 0xf2b6, 0xf078, 0xf2b6, 0xf262, 0xf496, 0xf262, 0xf496, +0xf262, 0xf496, 0xf3a2, 0xf5cd, 0xf3a2, 0xf5cd, 0xf49c, 0xf6bd, 0xf49c, 0xf6bd, 0xf536, +0xf74d, 0xf536, 0xf74d, 0xf471, 0xf67e, 0xf471, 0xf67e, 0xf37f, 0xf581, 0xf37f, 0xf581, +0xf35a, 0xf551, 0xf35a, 0xf551, 0xf35a, 0xf551, 0xf528, 0xf714, 0xf528, 0xf714, 0xf55a, +0xf739, 0xf55a, 0xf739, 0xf57e, 0xf751, 0xf57e, 0xf751, 0xf42c, 0xf5f1, 0xf42c, 0xf5f1, +0xf2be, 0xf476, 0xf2be, 0xf476, 0xf2be, 0xf476, 0xf22c, 0xf3d6, 0xf22c, 0xf3d6, 0xf1a2, +0xf33e, 0xf1a2, 0xf33e, 0xf22d, 0xf3bd, 0xf22d, 0xf3bd, 0xf394, 0xf518, 0xf394, 0xf518, +0xf3e8, 0xf560, 0xf3e8, 0xf560, 0xf3ee, 0xf55b, 0xf3ee, 0xf55b, 0xf3ee, 0xf55b, 0xf1f4, +0xf358, 0xf1f4, 0xf358, 0xeedc, 0xf037, 0xeedc, 0xf037, 0xebcc, 0xed21, 0xebcc, 0xed21, +0xea7b, 0xebc9, 0xea7b, 0xebc9, 0xeb75, 0xecbe, 0xeb75, 0xecbe, 0xeb90, 0xecd4, 0xeb90, +0xecd4, 0xeb90, 0xecd4, 0xebcb, 0xed0a, 0xebcb, 0xed0a, 0xec27, 0xed62, 0xec27, 0xed62, +0xea88, 0xebbc, 0xea88, 0xebbc, 0xe8b5, 0xe9e2, 0xe8b5, 0xe9e2, 0xe930, 0xea53, 0xe930, +0xea53, 0xe930, 0xea53, 0xe7c5, 0xe8dc, 0xe7c5, 0xe8dc, 0xe833, 0xe93b, 0xe833, 0xe93b, +0xe735, 0xe82a, 0xe735, 0xe82a, 0xe714, 0xe7f2, 0xe714, 0xe7f2, 0xe79c, 0xe85e, 0xe79c, +0xe85e, 0xe899, 0xe93b, 0xe899, 0xe93b, 0xe899, 0xe93b, 0xeb02, 0xeb80, 0xeb02, 0xeb80, +0xec15, 0xec68, 0xec15, 0xec68, 0xef53, 0xef79, 0xef53, 0xef79, 0xf228, 0xf21c, 0xf228, +0xf21c, 0xf44e, 0xf40e, 0xf44e, 0xf40e, 0xf4b9, 0xf442, 0xf4b9, 0xf442, 0xf4b9, 0xf442, +0xf65c, 0xf5ad, 0xf65c, 0xf5ad, 0xf75e, 0xf676, 0xf75e, 0xf676, 0xf98b, 0xf86a, 0xf98b, +0xf86a, 0xfd3f, 0xfbe7, 0xfd3f, 0xfbe7, 0xff19, 0xfd8e, 0xff19, 0xfd8e, 0xff19, 0xfd8e, +0x51, 0xfe96, 0x51, 0xfe96, 0x1b7, 0xffd1, 0x1b7, 0xffd1, 0x3b3, 0x1a9, 0x3b3, +0x1a9, 0x511, 0x2ea, 0x511, 0x2ea, 0x4d0, 0x293, 0x4d0, 0x293, 0x687, 0x43b, +0x687, 0x43b, 0x687, 0x43b, 0x876, 0x624, 0x876, 0x624, 0x9c9, 0x779, 0x9c9, +0x779, 0xbbc, 0x976, 0xbbc, 0x976, 0xb72, 0x93d, 0xb72, 0x93d, 0xc86, 0xa69, +0xc86, 0xa69, 0xd1f, 0xb1f, 0xd1f, 0xb1f, 0xd1f, 0xb1f, 0xd44, 0xb65, 0xd44, +0xb65, 0xce9, 0xb2f, 0xce9, 0xb2f, 0xc45, 0xab2, 0xc45, 0xab2, 0xc31, 0xac7, +0xc31, 0xac7, 0xd33, 0xbf0, 0xd33, 0xbf0, 0xd33, 0xbf0, 0xcfa, 0xbdc, 0xcfa, +0xbdc, 0xbee, 0xaf3, 0xbee, 0xaf3, 0xb6a, 0xa8d, 0xb6a, 0xa8d, 0xb2b, 0xa68, +0xb2b, 0xa68, 0xc9b, 0xbec, 0xc9b, 0xbec, 0xe25, 0xd85, 0xe25, 0xd85, 0xe25, +0xd85, 0xfc0, 0xf29, 0xfc0, 0xf29, 0x10b3, 0x101f, 0x10b3, 0x101f, 0x1097, 0x1001, +0x1097, 0x1001, 0x1020, 0xf83, 0x1020, 0xf83, 0x106a, 0xfc3, 0x106a, 0xfc3, 0x10c7, +0x1014, 0x10c7, 0x1014, 0x10c7, 0x1014, 0x11f8, 0x1136, 0x11f8, 0x1136, 0x1250, 0x1180, +0x1250, 0x1180, 0x122b, 0x114e, 0x122b, 0x114e, 0x123d, 0x1157, 0x123d, 0x1157, 0x123a, +0x114d, 0x123a, 0x114d, 0x123a, 0x114d, 0x115f, 0x1071, 0x115f, 0x1071, 0x1182, 0x1099, +0x1182, 0x1099, 0x103b, 0xf5d, 0x103b, 0xf5d, 0xf6b, 0xea0, 0xf6b, 0xea0, 0xed4, +0xe23, 0xed4, 0xe23, 0xc67, 0xbd9, 0xc67, 0xbd9, 0xc67, 0xbd9, 0xd3a, 0xcd5, +0xd3a, 0xcd5, 0xd54, 0xd1f, 0xd54, 0xd1f, 0xda4, 0xda6, 0xda4, 0xda6, 0xd46, +0xd82, 0xd46, 0xd82, 0xcd6, 0xd52, 0xcd6, 0xd52, 0xc5b, 0xd18, 0xc5b, 0xd18, +0xc5b, 0xd18, 0xb20, 0xc1e, 0xb20, 0xc1e, 0xa89, 0xbc8, 0xa89, 0xbc8, 0xb6a, +0xce7, 0xb6a, 0xce7, 0xa6c, 0xc22, 0xa6c, 0xc22, 0x8e0, 0xaca, 0x8e0, 0xaca, +0x8e0, 0xaca, 0x770, 0x987, 0x770, 0x987, 0x3d9, 0x614, 0x3d9, 0x614, 0x283, +0x4d9, 0x283, 0x4d9, 0x14f, 0x3b7, 0x14f, 0x3b7, 0x93, 0x302, 0x93, 0x302, +0xffa7, 0x212, 0xffa7, 0x212, 0xffa7, 0x212, 0xfecf, 0x12d, 0xfecf, 0x12d, 0x15, +0x25c, 0x15, 0x25c, 0x2f, 0x255, 0x2f, 0x255, 0xfe81, 0x7e, 0xfe81, 0x7e, +0xfde5, 0xffb3, 0xfde5, 0xffb3, 0xfbcd, 0xfd66, 0xfbcd, 0xfd66, 0xfbcd, 0xfd66, 0xfbcd, +0xfd2b, 0xfbcd, 0xfd2b, 0xfc97, 0xfdb9, 0xfc97, 0xfdb9, 0xfbd3, 0xfcb6, 0xfbd3, 0xfcb6, +0xfc34, 0xfcd9, 0xfc34, 0xfcd9, 0xfc30, 0xfc97, 0xfc30, 0xfc97, 0xfc30, 0xfc97, 0xfc12, +0xfc3e, 0xfc12, 0xfc3e, 0xfa6b, 0xfa5f, 0xfa6b, 0xfa5f, 0xf918, 0xf8d7, 0xf918, 0xf8d7, +0xf8b6, 0xf845, 0xf8b6, 0xf845, 0xf941, 0xf8a5, 0xf941, 0xf8a5, 0xfadc, 0xfa19, 0xfadc, +0xfa19, 0xfadc, 0xfa19, 0xfbd5, 0xfaf2, 0xfbd5, 0xfaf2, 0xfc7a, 0xfb79, 0xfc7a, 0xfb79, +0xfd1c, 0xfc02, 0xfd1c, 0xfc02, 0xfdcf, 0xfca0, 0xfdcf, 0xfca0, 0xfefb, 0xfdb9, 0xfefb, +0xfdb9, 0xfee3, 0xfd91, 0xfee3, 0xfd91, 0xfee3, 0xfd91, 0x94, 0xff32, 0x94, 0xff32, +0x184, 0x12, 0x184, 0x12, 0x1dc, 0x5a, 0x1dc, 0x5a, 0x25a, 0xc6, 0x25a, +0xc6, 0x1d0, 0x28, 0x1d0, 0x28, 0x1d0, 0x28, 0x335, 0x177, 0x335, 0x177, +0x3e1, 0x20b, 0x3e1, 0x20b, 0x541, 0x34f, 0x541, 0x34f, 0x85f, 0x64d, 0x85f, +0x64d, 0xb1e, 0x8ea, 0xb1e, 0x8ea, 0xc7c, 0xa24, 0xc7c, 0xa24, 0xc7c, 0xa24, +0xd1a, 0xa9b, 0xd1a, 0xa9b, 0xd3b, 0xa94, 0xd3b, 0xa94, 0x103c, 0xd6b, 0x103c, +0xd6b, 0x12aa, 0xfb0, 0x12aa, 0xfb0, 0x14fd, 0x11da, 0x14fd, 0x11da, 0x14fd, 0x11da, +0x16cf, 0x1383, 0x16cf, 0x1383, 0x1714, 0x13a1, 0x1714, 0x13a1, 0x18aa, 0x1514, 0x18aa, +0x1514, 0x1945, 0x158e, 0x1945, 0x158e, 0x1adb, 0x1707, 0x1adb, 0x1707, 0x1d61, 0x1975, +0x1d61, 0x1975, 0x1d61, 0x1975, 0x1f95, 0x1b95, 0x1f95, 0x1b95, 0x21e0, 0x1dd1, 0x21e0, +0x1dd1, 0x2310, 0x1ef6, 0x2310, 0x1ef6, 0x215f, 0x1d3f, 0x215f, 0x1d3f, 0x20da, 0x1cb9, +0x20da, 0x1cb9, 0x2000, 0x1be2, 0x2000, 0x1be2, 0x2000, 0x1be2, 0x1fc5, 0x1bae, 0x1fc5, +0x1bae, 0x20ce, 0x1cc2, 0x20ce, 0x1cc2, 0x2174, 0x1d77, 0x2174, 0x1d77, 0x2190, 0x1da5, +0x2190, 0x1da5, 0x1fd5, 0x1bfe, 0x1fd5, 0x1bfe, 0x1fd5, 0x1bfe, 0x1dda, 0x1a1a, 0x1dda, +0x1a1a, 0x1dbe, 0x1a16, 0x1dbe, 0x1a16, 0x1d5c, 0x19ce, 0x1d5c, 0x19ce, 0x1bea, 0x1878, +0x1bea, 0x1878, 0x1c31, 0x18db, 0x1c31, 0x18db, 0x1a7d, 0x1745, 0x1a7d, 0x1745, 0x1a7d, +0x1745, 0x197a, 0x165f, 0x197a, 0x165f, 0x1839, 0x153e, 0x1839, 0x153e, 0x15e8, 0x130c, +0x15e8, 0x130c, 0x14f0, 0x1235, 0x14f0, 0x1235, 0x14b0, 0x1216, 0x14b0, 0x1216, 0x148b, +0x1213, 0x148b, 0x1213, 0x148b, 0x1213, 0x1279, 0x1023, 0x1279, 0x1023, 0xfa2, 0xd70, +0xfa2, 0xd70, 0xdc2, 0xbb3, 0xdc2, 0xbb3, 0xcee, 0xb03, 0xcee, 0xb03, 0xdb6, +0xbf0, 0xdb6, 0xbf0, 0xdb6, 0xbf0, 0xe22, 0xc81, 0xe22, 0xc81, 0xd63, 0xbe6, +0xd63, 0xbe6, 0xc6c, 0xb14, 0xc6c, 0xb14, 0xc09, 0xad6, 0xc09, 0xad6, 0xabd, +0x9ac, 0xabd, 0x9ac, 0x85c, 0x76e, 0x85c, 0x76e, 0x85c, 0x76e, 0x76a, 0x69d, +0x76a, 0x69d, 0x5be, 0x510, 0x5be, 0x510, 0x4ca, 0x43a, 0x4ca, 0x43a, 0x2ca, +0x255, 0x2ca, 0x255, 0x78, 0x1d, 0x78, 0x1d, 0xfe32, 0xfdef, 0xfe32, 0xfdef, +0xfe32, 0xfdef, 0xfc13, 0xfbe4, 0xfc13, 0xfbe4, 0xfa93, 0xfa78, 0xfa93, 0xfa78, 0xf93e, +0xf934, 0xf93e, 0xf934, 0xf85a, 0xf860, 0xf85a, 0xf860, 0xf850, 0xf865, 0xf850, 0xf865, +0xf850, 0xf865, 0xf869, 0xf88c, 0xf869, 0xf88c, 0xf795, 0xf7c4, 0xf795, 0xf7c4, 0xf78a, +0xf7c6, 0xf78a, 0xf7c6, 0xf5bf, 0xf608, 0xf5bf, 0xf608, 0xf49c, 0xf4f2, 0xf49c, 0xf4f2, +0xf342, 0xf3a6, 0xf342, 0xf3a6, 0xf342, 0xf3a6, 0xf2d8, 0xf34b, 0xf2d8, 0xf34b, 0xf4a9, +0xf52c, 0xf4a9, 0xf52c, 0xf5dd, 0xf671, 0xf5dd, 0xf671, 0xf5ec, 0xf692, 0xf5ec, 0xf692, +0xf633, 0xf6ed, 0xf633, 0xf6ed, 0xf4ce, 0xf59c, 0xf4ce, 0xf59c, 0xf4ce, 0xf59c, 0xf462, +0xf546, 0xf462, 0xf546, 0xf4d1, 0xf5cb, 0xf4d1, 0xf5cb, 0xf375, 0xf485, 0xf375, 0xf485, +0xf3f8, 0xf51e, 0xf3f8, 0xf51e, 0xf3ec, 0xf527, 0xf3ec, 0xf527, 0xf3ec, 0xf527, 0xf4fa, +0xf649, 0xf4fa, 0xf649, 0xf5fb, 0xf75d, 0xf5fb, 0xf75d, 0xf666, 0xf7d8, 0xf666, 0xf7d8, +0xf859, 0xf9d9, 0xf859, 0xf9d9, 0xf902, 0xfa8e, 0xf902, 0xfa8e, 0xf874, 0xfa09, 0xf874, +0xfa09, 0xf874, 0xfa09, 0xf92c, 0xfac6, 0xf92c, 0xfac6, 0xf7db, 0xf979, 0xf7db, 0xf979, +0xf6ea, 0xf888, 0xf6ea, 0xf888, 0xf6fe, 0xf89a, 0xf6fe, 0xf89a, 0xf723, 0xf8ba, 0xf723, +0xf8ba, 0xf752, 0xf8e1, 0xf752, 0xf8e1, 0xf752, 0xf8e1, 0xf64e, 0xf7d5, 0xf64e, 0xf7d5, +0xf652, 0xf7cf, 0xf652, 0xf7cf, 0xf532, 0xf6a5, 0xf532, 0xf6a5, 0xf568, 0xf6d0, 0xf568, +0xf6d0, 0xf68e, 0xf7eb, 0xf68e, 0xf7eb, 0xf68e, 0xf7eb, 0xf5f7, 0xf74b, 0xf5f7, 0xf74b, +0xf5f8, 0xf743, 0xf5f8, 0xf743, 0xf5c3, 0xf706, 0xf5c3, 0xf706, 0xf488, 0xf5c5, 0xf488, +0xf5c5, 0xf42d, 0xf567, 0xf42d, 0xf567, 0xf3aa, 0xf4e3, 0xf3aa, 0xf4e3, 0xf3aa, 0xf4e3, +0xf398, 0xf4d2, 0xf398, 0xf4d2, 0xf303, 0xf440, 0xf303, 0xf440, 0xf3f0, 0xf532, 0xf3f0, +0xf532, 0xf3c7, 0xf511, 0xf3c7, 0xf511, 0xf2dc, 0xf42d, 0xf2dc, 0xf42d, 0xf346, 0xf4a2, +0xf346, 0xf4a2, 0xf346, 0xf4a2, 0xf269, 0xf3cf, 0xf269, 0xf3cf, 0xf1c7, 0xf339, 0xf1c7, +0xf339, 0xf0cc, 0xf24b, 0xf0cc, 0xf24b, 0xf04d, 0xf1d8, 0xf04d, 0xf1d8, 0xef68, 0xf0ff, +0xef68, 0xf0ff, 0xef68, 0xf0ff, 0xee96, 0xf039, 0xee96, 0xf039, 0xee60, 0xf00f, 0xee60, +0xf00f, 0xeda0, 0xef5b, 0xeda0, 0xef5b, 0xeb72, 0xed39, 0xeb72, 0xed39, 0xeb15, 0xece8, +0xeb15, 0xece8, 0xe8eb, 0xeaca, 0xe8eb, 0xeaca, 0xe8eb, 0xeaca, 0xe88a, 0xea74, 0xe88a, +0xea74, 0xe971, 0xeb68, 0xe971, 0xeb68, 0xe882, 0xea87, 0xe882, 0xea87, 0xe927, 0xeb3a, +0xe927, 0xeb3a, 0xe8e0, 0xeb02, 0xe8e0, 0xeb02, 0xe970, 0xeba3, 0xe970, 0xeba3, 0xe970, +0xeba3, 0xe969, 0xebae, 0xe969, 0xebae, 0xe95e, 0xebb6, 0xe95e, 0xebb6, 0xea07, 0xec73, +0xea07, 0xec73, 0xea6c, 0xecee, 0xea6c, 0xecee, 0xe918, 0xebb0, 0xe918, 0xebb0, 0xe918, +0xebb0, 0xe960, 0xec0e, 0xe960, 0xec0e, 0xe9c7, 0xec8b, 0xe9c7, 0xec8b, 0xea5d, 0xed36, +0xea5d, 0xed36, 0xec7c, 0xef6a, 0xec7c, 0xef6a, 0xef69, 0xf26a, 0xef69, 0xf26a, 0xf29d, +0xf5ae, 0xf29d, 0xf5ae, 0xf29d, 0xf5ae, 0xf3f1, 0xf70f, 0xf3f1, 0xf70f, 0xf54a, 0xf872, +0xf54a, 0xf872, 0xf612, 0xf940, 0xf612, 0xf940, 0xf512, 0xf842, 0xf512, 0xf842, 0xf513, +0xf840, 0xf513, 0xf840, 0xf685, 0xf9ab, 0xf685, 0xf9ab, 0xf685, 0xf9ab, 0xf6f8, 0xfa12, +0xf6f8, 0xfa12, 0xf6e1, 0xf9eb, 0xf6e1, 0xf9eb, 0xf5cd, 0xf8c4, 0xf5cd, 0xf8c4, 0xf564, +0xf843, 0xf564, 0xf843, 0xf357, 0xf61d, 0xf357, 0xf61d, 0xf357, 0xf61d, 0xf27e, 0xf528, +0xf27e, 0xf528, 0xf388, 0xf615, 0xf388, 0xf615, 0xf44d, 0xf6bc, 0xf44d, 0xf6bc, 0xf5e3, +0xf834, 0xf5e3, 0xf834, 0xf71f, 0xf955, 0xf71f, 0xf955, 0xf5d2, 0xf7ee, 0xf5d2, 0xf7ee, +0xf5d2, 0xf7ee, 0xf3e4, 0xf5e7, 0xf3e4, 0xf5e7, 0xf2b9, 0xf4a8, 0xf2b9, 0xf4a8, 0xf11e, +0xf2fd, 0xf11e, 0xf2fd, 0xf0f8, 0xf2ca, 0xf0f8, 0xf2ca, 0xf201, 0xf3c8, 0xf201, 0xf3c8, +0xf201, 0xf3c8, 0xf169, 0xf32a, 0xf169, 0xf32a, 0xefd5, 0xf193, 0xefd5, 0xf193, 0xefae, +0xf16c, 0xefae, 0xf16c, 0xed9b, 0xef59, 0xed9b, 0xef59, 0xed01, 0xeec0, 0xed01, 0xeec0, +0xed79, 0xef3a, 0xed79, 0xef3a, 0xed79, 0xef3a, 0xedc6, 0xef87, 0xedc6, 0xef87, 0xec6b, +0xee2a, 0xec6b, 0xee2a, 0xeb09, 0xecc1, 0xeb09, 0xecc1, 0xeac2, 0xec70, 0xeac2, 0xec70, +0xea0f, 0xebac, 0xea0f, 0xebac, 0xea0b, 0xeb93, 0xea0b, 0xeb93, 0xea0b, 0xeb93, 0xec12, +0xed7d, 0xec12, 0xed7d, 0xee2d, 0xef73, 0xee2d, 0xef73, 0xefa6, 0xf0c1, 0xefa6, 0xf0c1, +0xf21f, 0xf308, 0xf21f, 0xf308, 0xf1f6, 0xf2a6, 0xf1f6, 0xf2a6, 0xf1f6, 0xf2a6, 0xf376, +0xf3e8, 0xf376, 0xf3e8, 0xf4f3, 0xf521, 0xf4f3, 0xf521, 0xf6c9, 0xf6af, 0xf6c9, 0xf6af, +0xf877, 0xf813, 0xf877, 0xf813, 0xfaa5, 0xf9f6, 0xfaa5, 0xf9f6, 0xfcb6, 0xfbbc, 0xfcb6, +0xfbbc, 0xfcb6, 0xfbbc, 0xfe30, 0xfcee, 0xfe30, 0xfcee, 0xff8d, 0xfe06, 0xff8d, 0xfe06, +0xb7, 0xfef0, 0xb7, 0xfef0, 0x223, 0x22, 0x223, 0x22, 0x33d, 0x10b, 0x33d, +0x10b, 0x655, 0x3fa, 0x655, 0x3fa, 0x655, 0x3fa, 0x755, 0x4da, 0x755, 0x4da, +0x8f3, 0x663, 0x8f3, 0x663, 0xb6f, 0x8d3, 0xb6f, 0x8d3, 0xcf4, 0xa55, 0xcf4, +0xa55, 0xe06, 0xb6f, 0xe06, 0xb6f, 0xe06, 0xb6f, 0xef1, 0xc69, 0xef1, 0xc69, +0x101c, 0xdab, 0x101c, 0xdab, 0x1103, 0xeaf, 0x1103, 0xeaf, 0x10b9, 0xe87, 0x10b9, +0xe87, 0x11f1, 0xfe4, 0x11f1, 0xfe4, 0x1177, 0xf91, 0x1177, 0xf91, 0x1177, 0xf91, +0x1065, 0xea6, 0x1065, 0xea6, 0x1067, 0xecd, 0x1067, 0xecd, 0xffc, 0xe86, 0xffc, +0xe86, 0x1154, 0xffc, 0x1154, 0xffc, 0x117a, 0x103c, 0x117a, 0x103c, 0x11c2, 0x1098, +0x11c2, 0x1098, 0x11c2, 0x1098, 0x122d, 0x1110, 0x122d, 0x1110, 0x11e0, 0x10ca, 0x11e0, +0x10ca, 0x1257, 0x1142, 0x1257, 0x1142, 0x136a, 0x124f, 0x136a, 0x124f, 0x12eb, 0x11c5, +0x12eb, 0x11c5, 0x12eb, 0x11c5, 0x13c7, 0x1291, 0x13c7, 0x1291, 0x14c1, 0x1378, 0x14c1, +0x1378, 0x151f, 0x13c1, 0x151f, 0x13c1, 0x1534, 0x13c0, 0x1534, 0x13c0, 0x1663, 0x14d9, +0x1663, 0x14d9, 0x15f2, 0x1455, 0x15f2, 0x1455, 0x15f2, 0x1455, 0x1558, 0x13ab, 0x1558, +0x13ab, 0x15f2, 0x143a, 0x15f2, 0x143a, 0x1341, 0x1184, 0x1341, 0x1184, 0x11ad, 0xff2, +0x11ad, 0xff2, 0x1172, 0xfc0, 0x1172, 0xfc0, 0x1102, 0xf62, 0x1102, 0xf62, 0x1102, +0xf62, 0x104e, 0xec7, 0x104e, 0xec7, 0x10b4, 0xf4f, 0x10b4, 0xf4f, 0x1096, 0xf5a, +0x1096, 0xf5a, 0xf42, 0xe36, 0xf42, 0xe36, 0xce0, 0xc09, 0xce0, 0xc09, 0xce0, +0xc09, 0xc79, 0xbdd, 0xc79, 0xbdd, 0xb0b, 0xaad, 0xb0b, 0xaad, 0xb3c, 0xb1d, +0xb3c, 0xb1d, 0xbd6, 0xbf7, 0xbd6, 0xbf7, 0x9f4, 0xa53, 0x9f4, 0xa53, 0x858, +0x8f3, 0x858, 0x8f3, 0x858, 0x8f3, 0x503, 0x5d5, 0x503, 0x5d5, 0x259, 0x35c, +0x259, 0x35c, 0xffac, 0xda, 0xffac, 0xda, 0xfe58, 0xffa9, 0xfe58, 0xffa9, 0xfd72, +0xfedd, 0xfd72, 0xfedd, 0xfc9d, 0xfe1a, 0xfc9d, 0xfe1a, 0xfc9d, 0xfe1a, 0xfb32, 0xfcb8, +0xfb32, 0xfcb8, 0xfb4a, 0xfccf, 0xfb4a, 0xfccf, 0xfa7a, 0xfbf7, 0xfa7a, 0xfbf7, 0xfa3e, +0xfba9, 0xfa3e, 0xfba9, 0xf9b6, 0xfb09, 0xf9b6, 0xfb09, 0xf9b6, 0xfb09, 0xf789, 0xf8be, +0xf789, 0xf8be, 0xf79e, 0xf8af, 0xf79e, 0xf8af, 0xf7ce, 0xf8b7, 0xf7ce, 0xf8b7, 0xf81a, +0xf8d9, 0xf81a, 0xf8d9, 0xf7ca, 0xf85d, 0xf7ca, 0xf85d, 0xf777, 0xf7de, 0xf777, 0xf7de, +0xf777, 0xf7de, 0xf7ce, 0xf809, 0xf7ce, 0xf809, 0xf791, 0xf7a3, 0xf791, 0xf7a3, 0xf704, +0xf6ee, 0xf704, 0xf6ee, 0xf798, 0xf75e, 0xf798, 0xf75e, 0xf706, 0xf6ab, 0xf706, 0xf6ab, +0xf826, 0xf7ae, 0xf826, 0xf7ae, 0xf826, 0xf7ae, 0xf962, 0xf8d1, 0xf962, 0xf8d1, 0xf9b2, +0xf90c, 0xf9b2, 0xf90c, 0xfab6, 0xf9fe, 0xfab6, 0xf9fe, 0xfc47, 0xfb7e, 0xfc47, 0xfb7e, +0xfcbc, 0xfbe6, 0xfcbc, 0xfbe6, 0xfcbc, 0xfbe6, 0xfd20, 0xfc3f, 0xfd20, 0xfc3f, 0xfe8d, +0xfda1, 0xfe8d, 0xfda1, 0xff5b, 0xfe63, 0xff5b, 0xfe63, 0xffa6, 0xfea3, 0xffa6, 0xfea3, +0xff64, 0xfe53, 0xff64, 0xfe53, 0x41, 0xff21, 0x41, 0xff21, 0x41, 0xff21, 0x1f4, +0xc2, 0x1f4, 0xc2, 0x3cb, 0x284, 0x3cb, 0x284, 0x5b2, 0x453, 0x5b2, 0x453, +0x7ce, 0x653, 0x7ce, 0x653, 0x793, 0x5f9, 0x793, 0x5f9, 0x90f, 0x753, 0x90f, +0x753, 0x90f, 0x753, 0xa4e, 0x86d, 0xa4e, 0x86d, 0xb15, 0x90e, 0xb15, 0x90e, +0xd34, 0xb05, 0xd34, 0xb05, 0x1041, 0xde8, 0x1041, 0xde8, 0x12a6, 0x1023, 0x12a6, +0x1023, 0x12a6, 0x1023, 0x135b, 0x10af, 0x135b, 0x10af, 0x144f, 0x117b, 0x144f, 0x117b, +0x156f, 0x1275, 0x156f, 0x1275, 0x16c8, 0x13ab, 0x16c8, 0x13ab, 0x1806, 0x14ca, 0x1806, +0x14ca, 0x19c1, 0x1669, 0x19c1, 0x1669, 0x19c1, 0x1669, 0x1a71, 0x1700, 0x1a71, 0x1700, +0x1d09, 0x1984, 0x1d09, 0x1984, 0x1db4, 0x1a20, 0x1db4, 0x1a20, 0x1e2b, 0x1a8c, 0x1e2b, +0x1a8c, 0x1e8e, 0x1ae8, 0x1e8e, 0x1ae8, 0x1e9f, 0x1af6, 0x1e9f, 0x1af6, 0x1e9f, 0x1af6, +0x1f04, 0x1b5c, 0x1f04, 0x1b5c, 0x1ef8, 0x1b55, 0x1ef8, 0x1b55, 0x1e30, 0x1a94, 0x1e30, +0x1a94, 0x1cfb, 0x1969, 0x1cfb, 0x1969, 0x1c4d, 0x18c6, 0x1c4d, 0x18c6, 0x1c4d, 0x18c6, +0x1af5, 0x177b, 0x1af5, 0x177b, 0x1b94, 0x1828, 0x1b94, 0x1828, 0x1a7a, 0x171d, 0x1a7a, +0x171d, 0x1abd, 0x176f, 0x1abd, 0x176f, 0x1ac2, 0x1784, 0x1ac2, 0x1784, 0x189f, 0x1570, +0x189f, 0x1570, 0x189f, 0x1570, 0x17b0, 0x1491, 0x17b0, 0x1491, 0x1781, 0x1471, 0x1781, +0x1471, 0x170c, 0x140c, 0x170c, 0x140c, 0x1721, 0x1431, 0x1721, 0x1431, 0x162f, 0x134f, +0x162f, 0x134f, 0x162f, 0x134f, 0x162a, 0x135a, 0x162a, 0x135a, 0x1558, 0x129a, 0x1558, +0x129a, 0x134e, 0x10a3, 0x134e, 0x10a3, 0x12e9, 0x1052, 0x12e9, 0x1052, 0x117d, 0xefc, +0x117d, 0xefc, 0x1243, 0xfdb, 0x1243, 0xfdb, 0x1243, 0xfdb, 0x1292, 0x1044, 0x1292, +0x1044, 0x11c9, 0xf98, 0x11c9, 0xf98, 0x112d, 0xf1a, 0x112d, 0xf1a, 0xfd1, 0xdde, +0xfd1, 0xdde, 0xdff, 0xc2f, 0xdff, 0xc2f, 0xd1f, 0xb72, 0xd1f, 0xb72, 0xd1f, +0xb72, 0xc58, 0xad1, 0xc58, 0xad1, 0xac5, 0x964, 0xac5, 0x964, 0x8b5, 0x77b, +0x8b5, 0x77b, 0x725, 0x612, 0x725, 0x612, 0x4af, 0x3c2, 0x4af, 0x3c2, 0x4af, +0x3c2, 0x2cb, 0x205, 0x2cb, 0x205, 0x1bf, 0x11e, 0x1bf, 0x11e, 0x7a, 0xfffd, +0x7a, 0xfffd, 0xfebc, 0xfe60, 0xfebc, 0xfe60, 0xfd28, 0xfced, 0xfd28, 0xfced, 0xfdff, +0xfde2, 0xfdff, 0xfde2, 0xfdff, 0xfde2, 0xfd8d, 0xfd8c, 0xfd8d, 0xfd8c, 0xfc65, 0xfc7d, +0xfc65, 0xfc7d, 0xfb1b, 0xfb4a, 0xfb1b, 0xfb4a, 0xfa38, 0xfa7c, 0xfa38, 0xfa7c, 0xf935, +0xf98b, 0xf935, 0xf98b, 0xf939, 0xf9a1, 0xf939, 0xf9a1, 0xf939, 0xf9a1, 0xf8bc, 0xf933, +0xf8bc, 0xf933, 0xf8f1, 0xf976, 0xf8f1, 0xf976, 0xf806, 0xf897, 0xf806, 0xf897, 0xf7b7, +0xf855, 0xf7b7, 0xf855, 0xf7b5, 0xf85e, 0xf7b5, 0xf85e, 0xf7b5, 0xf85e, 0xf671, 0xf726, +0xf671, 0xf726, 0xf740, 0xf7ff, 0xf740, 0xf7ff, 0xf62e, 0xf6f9, 0xf62e, 0xf6f9, 0xf5f0, +0xf6c6, 0xf5f0, 0xf6c6, 0xf521, 0xf604, 0xf521, 0xf604, 0xf3ab, 0xf499, 0xf3ab, 0xf499, +0xf3ab, 0xf499, 0xf3f3, 0xf4ed, 0xf3f3, 0xf4ed, 0xf58f, 0xf696, 0xf58f, 0xf696, 0xf603, +0xf716, 0xf603, 0xf716, 0xf7b3, 0xf8d3, 0xf7b3, 0xf8d3, 0xf783, 0xf8af, 0xf783, 0xf8af, +0xf71a, 0xf851, 0xf71a, 0xf851, 0xf71a, 0xf851, 0xf7ad, 0xf8f0, 0xf7ad, 0xf8f0, 0xf721, +0xf86d, 0xf721, 0xf86d, 0xf81b, 0xf971, 0xf81b, 0xf971, 0xf808, 0xf965, 0xf808, 0xf965, +0xf7d7, 0xf93b, 0xf7d7, 0xf93b, 0xf7d7, 0xf93b, 0xf74f, 0xf8b8, 0xf74f, 0xf8b8, 0xf6bb, +0xf828, 0xf6bb, 0xf828, 0xf614, 0xf784, 0xf614, 0xf784, 0xf58d, 0xf6fe, 0xf58d, 0xf6fe, +0xf54b, 0xf6bc, 0xf54b, 0xf6bc, 0xf737, 0xf8a8, 0xf737, 0xf8a8, 0xf737, 0xf8a8, 0xf7fb, +0xf96a, 0xf7fb, 0xf96a, 0xf818, 0xf986, 0xf818, 0xf986, 0xf758, 0xf8c5, 0xf758, 0xf8c5, +0xf5d6, 0xf742, 0xf5d6, 0xf742, 0xf58e, 0xf6f8, 0xf58e, 0xf6f8, 0xf5b1, 0xf71b, 0xf5b1, +0xf71b, 0xf5b1, 0xf71b, 0xf662, 0xf7cc, 0xf662, 0xf7cc, 0xf615, 0xf780, 0xf615, 0xf780, +0xf58a, 0xf6f7, 0xf58a, 0xf6f7, 0xf4df, 0xf650, 0xf4df, 0xf650, 0xf481, 0xf5f8, 0xf481, +0xf5f8, 0xf481, 0xf5f8, 0xf41e, 0xf59c, 0xf41e, 0xf59c, 0xf385, 0xf50c, 0xf385, 0xf50c, +0xf2d4, 0xf465, 0xf2d4, 0xf465, 0xf297, 0xf433, 0xf297, 0xf433, 0xf213, 0xf3bb, 0xf213, +0xf3bb, 0xf211, 0xf3c7, 0xf211, 0xf3c7, 0xf211, 0xf3c7, 0xf150, 0xf316, 0xf150, 0xf316, +0xf0d8, 0xf2ae, 0xf0d8, 0xf2ae, 0xeedf, 0xf0c6, 0xeedf, 0xf0c6, 0xedbb, 0xefb4, 0xedbb, +0xefb4, 0xecfd, 0xef09, 0xecfd, 0xef09, 0xea6e, 0xec8d, 0xea6e, 0xec8d, 0xea6e, 0xec8d, +0xe9a8, 0xebda, 0xe9a8, 0xebda, 0xe982, 0xebc7, 0xe982, 0xebc7, 0xe9af, 0xec07, 0xe9af, +0xec07, 0xea37, 0xeca2, 0xea37, 0xeca2, 0xea52, 0xeccf, 0xea52, 0xeccf, 0xea52, 0xeccf, +0xe993, 0xec23, 0xe993, 0xec23, 0xe93e, 0xebdf, 0xe93e, 0xebdf, 0xe89c, 0xeb4e, 0xe89c, +0xeb4e, 0xe929, 0xebeb, 0xe929, 0xebeb, 0xe77f, 0xea50, 0xe77f, 0xea50, 0xe65e, 0xe93d, +0xe65e, 0xe93d, 0xe65e, 0xe93d, 0xe65f, 0xe94a, 0xe65f, 0xe94a, 0xe6c4, 0xe9ba, 0xe6c4, +0xe9ba, 0xe8b7, 0xebb7, 0xe8b7, 0xebb7, 0xeba7, 0xeeae, 0xeba7, 0xeeae, 0xed0b, 0xf018, +0xed0b, 0xf018, 0xedeb, 0xf0fb, 0xedeb, 0xf0fb, 0xedeb, 0xf0fb, 0xef56, 0xf268, 0xef56, +0xf268, 0xeed9, 0xf1eb, 0xeed9, 0xf1eb, 0xf080, 0xf38f, 0xf080, 0xf38f, 0xeff2, 0xf2fc, +0xeff2, 0xf2fc, 0xf104, 0xf407, 0xf104, 0xf407, 0xf104, 0xf407, 0xf262, 0xf55c, 0xf262, +0xf55c, 0xf22b, 0xf51b, 0xf22b, 0xf51b, 0xf1a3, 0xf487, 0xf1a3, 0xf487, 0xf022, 0xf2f8, +0xf022, 0xf2f8, 0xef89, 0xf251, 0xef89, 0xf251, 0xef1a, 0xf1d3, 0xef1a, 0xf1d3, 0xef1a, +0xf1d3, 0xef1e, 0xf1c8, 0xef1e, 0xf1c8, 0xf049, 0xf2e4, 0xf049, 0xf2e4, 0xf092, 0xf31e, +0xf092, 0xf31e, 0xf106, 0xf384, 0xf106, 0xf384, 0xf379, 0xf5ea, 0xf379, 0xf5ea, 0xf2e0, +0xf546, 0xf2e0, 0xf546, 0xf2e0, 0xf546, 0xf219, 0xf475, 0xf219, 0xf475, 0xf1b2, 0xf405, +0xf1b2, 0xf405, 0xf138, 0xf384, 0xf138, 0xf384, 0xf138, 0xf37e, 0xf138, 0xf37e, 0xf099, +0xf2dc, 0xf099, 0xf2dc, 0xf099, 0xf2dc, 0xefc5, 0xf204, 0xefc5, 0xf204, 0xee69, 0xf0a5, +0xee69, 0xf0a5, 0xecf5, 0xef2d, 0xecf5, 0xef2d, 0xecdf, 0xef13, 0xecdf, 0xef13, 0xec26, +0xee55, 0xec26, 0xee55, 0xec4f, 0xee78, 0xec4f, 0xee78, 0xec4f, 0xee78, 0xebdc, 0xedfb, +0xebdc, 0xedfb, 0xea6d, 0xec80, 0xea6d, 0xec80, 0xe9d9, 0xebdd, 0xe9d9, 0xebdd, 0xe995, +0xeb84, 0xe995, 0xeb84, 0xe9fb, 0xebd1, 0xe9fb, 0xebd1, 0xea1b, 0xebd4, 0xea1b, 0xebd4, +0xea1b, 0xebd4, 0xec3f, 0xedd5, 0xec3f, 0xedd5, 0xecf8, 0xee66, 0xecf8, 0xee66, 0xee5f, +0xefa0, 0xee5f, 0xefa0, 0xf0ce, 0xf1dd, 0xf0ce, 0xf1dd, 0xf14f, 0xf228, 0xf14f, 0xf228, +0xf14f, 0xf228, 0xf263, 0xf302, 0xf263, 0xf302, 0xf4e6, 0xf549, 0xf4e6, 0xf549, 0xf6ad, +0xf6d1, 0xf6ad, 0xf6d1, 0xf999, 0xf97e, 0xf999, 0xf97e, 0xfab5, 0xfa5a, 0xfab5, 0xfa5a, +0xfb37, 0xfa9f, 0xfb37, 0xfa9f, 0xfb37, 0xfa9f, 0xfcad, 0xfbd9, 0xfcad, 0xfbd9, 0xfd05, +0xfbf9, 0xfd05, 0xfbf9, 0xfe8d, 0xfd4e, 0xfe8d, 0xfd4e, 0xfeec, 0xfd7f, 0xfeec, 0xfd7f, +0x2c, 0xfe97, 0x2c, 0xfe97, 0x2c, 0xfe97, 0x213, 0x5d, 0x213, 0x5d, 0x3c0, +0x1f1, 0x3c0, 0x1f1, 0x5f4, 0x412, 0x5f4, 0x412, 0x900, 0x713, 0x900, 0x713, +0x99f, 0x7af, 0x99f, 0x7af, 0xafd, 0x911, 0xafd, 0x911, 0xafd, 0x911, 0xbf1, +0xa0f, 0xbf1, 0xa0f, 0xd3f, 0xb6c, 0xd3f, 0xb6c, 0xe2d, 0xc6e, 0xe2d, 0xc6e, +0xd1a, 0xb73, 0xd1a, 0xb73, 0xe2b, 0xc9d, 0xe2b, 0xc9d, 0xde6, 0xc73, 0xde6, +0xc73, 0xde6, 0xc73, 0xeef, 0xd97, 0xeef, 0xd97, 0xfcc, 0xe8f, 0xfcc, 0xe8f, +0xf77, 0xe51, 0xf77, 0xe51, 0xf5f, 0xe4d, 0xf5f, 0xe4d, 0xfad, 0xeac, 0xfad, +0xeac, 0xfad, 0xeac, 0x1008, 0xf13, 0x1008, 0xf13, 0x1022, 0xf34, 0x1022, 0xf34, +0xf5e, 0xe72, 0xf5e, 0xe72, 0x10ed, 0xffe, 0x10ed, 0xffe, 0x12f8, 0x1201, 0x12f8, +0x1201, 0x1395, 0x1292, 0x1395, 0x1292, 0x1395, 0x1292, 0x13d8, 0x12c6, 0x13d8, 0x12c6, +0x13ef, 0x12ca, 0x13ef, 0x12ca, 0x155d, 0x1424, 0x155d, 0x1424, 0x15df, 0x1491, 0x15df, +0x1491, 0x1776, 0x1613, 0x1776, 0x1613, 0x1841, 0x16cc, 0x1841, 0x16cc, 0x1841, 0x16cc, +0x1777, 0x15f2, 0x1777, 0x15f2, 0x16dd, 0x154b, 0x16dd, 0x154b, 0x1524, 0x138b, 0x1524, +0x138b, 0x1336, 0x1199, 0x1336, 0x1199, 0x1252, 0x10b9, 0x1252, 0x10b9, 0x1252, 0x10b9, +0x12d0, 0x1141, 0x12d0, 0x1141, 0x13cc, 0x124c, 0x13cc, 0x124c, 0x12d0, 0x1167, 0x12d0, +0x1167, 0x129b, 0x114f, 0x129b, 0x114f, 0x114d, 0x1023, 0x114d, 0x1023, 0xfb8, 0xeb5, +0xfb8, 0xeb5, 0xfb8, 0xeb5, 0xfac, 0xed3, 0xfac, 0xed3, 0xecf, 0xe24, 0xecf, +0xe24, 0xecd, 0xe50, 0xecd, 0xe50, 0xf1e, 0xed2, 0xf1e, 0xed2, 0xc72, 0xc55, +0xc72, 0xc55, 0x8f4, 0x903, 0x8f4, 0x903, 0x8f4, 0x903, 0x756, 0x78f, 0x756, +0x78f, 0x55e, 0x5be, 0x55e, 0x5be, 0x42a, 0x4aa, 0x42a, 0x4aa, 0x228, 0x2c4, +0x228, 0x2c4, 0xde, 0x18f, 0xde, 0x18f, 0xde, 0x18f, 0xfec2, 0xff81, 0xfec2, +0xff81, 0xfe1c, 0xfee3, 0xfe1c, 0xfee3, 0xfdc2, 0xfe8b, 0xfdc2, 0xfe8b, 0xfb52, 0xfc16, +0xfb52, 0xfc16, 0xf9b4, 0xfa6e, 0xf9b4, 0xfa6e, 0xf934, 0xf9df, 0xf934, 0xf9df, 0xf934, +0xf9df, 0xf974, 0xfa0b, 0xf974, 0xfa0b, 0xf90d, 0xf98d, 0xf90d, 0xf98d, 0xf90c, 0xf972, +0xf90c, 0xf972, 0xf856, 0xf8a1, 0xf856, 0xf8a1, 0xf7d0, 0xf7ff, 0xf7d0, 0xf7ff, 0xf6c0, +0xf6d4, 0xf6c0, 0xf6d4, 0xf6c0, 0xf6d4, 0xf6b4, 0xf6ae, 0xf6b4, 0xf6ae, 0xf52e, 0xf50f, +0xf52e, 0xf50f, 0xf431, 0xf3fd, 0xf431, 0xf3fd, 0xf517, 0xf4d0, 0xf517, 0xf4d0, 0xf529, +0xf4d1, 0xf529, 0xf4d1, 0xf529, 0xf4d1, 0xf714, 0xf6af, 0xf714, 0xf6af, 0xf8c9, 0xf85a, +0xf8c9, 0xf85a, 0xf8d1, 0xf85b, 0xf8d1, 0xf85b, 0xfa17, 0xf99b, 0xfa17, 0xf99b, 0xfbcf, +0xfb50, 0xfbcf, 0xfb50, 0xfda7, 0xfd25, 0xfda7, 0xfd25, 0xfda7, 0xfd25, 0xfebb, 0xfe37, +0xfebb, 0xfe37, 0xfdd8, 0xfd51, 0xfdd8, 0xfd51, 0xff1d, 0xfe92, 0xff1d, 0xfe92, 0x93, +0x2, 0x93, 0x2, 0x287, 0x1ee, 0x287, 0x1ee, 0x3e3, 0x33e, 0x3e3, 0x33e, +0x3e3, 0x33e, 0x50e, 0x45b, 0x50e, 0x45b, 0x723, 0x65c, 0x723, 0x65c, 0x889, +0x7ab, 0x889, 0x7ab, 0xa0f, 0x916, 0xa0f, 0x916, 0xaa6, 0x98f, 0xaa6, 0x98f, +0xaa6, 0x98f, 0xb3a, 0xa00, 0xb3a, 0xa00, 0xd54, 0xbf5, 0xd54, 0xbf5, 0xefb, +0xd75, 0xefb, 0xd75, 0xfea, 0xe3a, 0xfea, 0xe3a, 0x10f5, 0xf1b, 0x10f5, 0xf1b, +0x1211, 0x100d, 0x1211, 0x100d, 0x1211, 0x100d, 0x13ed, 0x11c0, 0x13ed, 0x11c0, 0x15f2, +0x139d, 0x15f2, 0x139d, 0x1819, 0x159e, 0x1819, 0x159e, 0x1914, 0x1676, 0x1914, 0x1676, +0x1acc, 0x1810, 0x1acc, 0x1810, 0x1cbf, 0x19e9, 0x1cbf, 0x19e9, 0x1cbf, 0x19e9, 0x1d40, +0x1a54, 0x1d40, 0x1a54, 0x1dec, 0x1aef, 0x1dec, 0x1aef, 0x1eb7, 0x1bae, 0x1eb7, 0x1bae, +0x1ebb, 0x1bac, 0x1ebb, 0x1bac, 0x1fb1, 0x1c9f, 0x1fb1, 0x1c9f, 0x1fb1, 0x1c9f, 0x209f, +0x1d90, 0x209f, 0x1d90, 0x21fa, 0x1ef1, 0x21fa, 0x1ef1, 0x2260, 0x1f61, 0x2260, 0x1f61, +0x2161, 0x1e6f, 0x2161, 0x1e6f, 0x2050, 0x1d6d, 0x2050, 0x1d6d, 0x1dc9, 0x1af6, 0x1dc9, +0x1af6, 0x1dc9, 0x1af6, 0x1d3b, 0x1a7a, 0x1d3b, 0x1a7a, 0x1bfa, 0x194c, 0x1bfa, 0x194c, +0x19f6, 0x175a, 0x19f6, 0x175a, 0x1915, 0x168a, 0x1915, 0x168a, 0x18fa, 0x1680, 0x18fa, +0x1680, 0x187d, 0x1613, 0x187d, 0x1613, 0x187d, 0x1613, 0x186a, 0x160e, 0x186a, 0x160e, +0x171e, 0x14cf, 0x171e, 0x14cf, 0x1614, 0x13d0, 0x1614, 0x13d0, 0x1533, 0x12f9, 0x1533, +0x12f9, 0x13c3, 0x1193, 0x13c3, 0x1193, 0x13c3, 0x1193, 0x147f, 0x1257, 0x147f, 0x1257, +0x1131, 0xf11, 0x1131, 0xf11, 0xf7e, 0xd67, 0xf7e, 0xd67, 0x10e5, 0xed7, 0x10e5, +0xed7, 0x1051, 0xe4d, 0x1051, 0xe4d, 0x103f, 0xe46, 0x103f, 0xe46, 0x103f, 0xe46, +0x10a2, 0xeb6, 0x10a2, 0xeb6, 0xfcf, 0xdf2, 0xfcf, 0xdf2, 0xed6, 0xd0a, 0xed6, +0xd0a, 0xe17, 0xc5f, 0xe17, 0xc5f, 0xd86, 0xbe4, 0xd86, 0xbe4, 0xc58, 0xacf, +0xc58, 0xacf, 0xc58, 0xacf, 0xacd, 0x960, 0xacd, 0x960, 0xa0c, 0x8bb, 0xa0c, +0x8bb, 0x96e, 0x83d, 0x96e, 0x83d, 0x8e7, 0x7d7, 0x8e7, 0x7d7, 0x6d9, 0x5eb, +0x6d9, 0x5eb, 0x6d9, 0x5eb, 0x498, 0x3cc, 0x498, 0x3cc, 0x30d, 0x263, 0x30d, +0x263, 0x192, 0x10b, 0x192, 0x10b, 0x4e, 0xffe9, 0x4e, 0xffe9, 0xff54, 0xff10, +0xff54, 0xff10, 0xfe6a, 0xfe46, 0xfe6a, 0xfe46, 0xfe6a, 0xfe46, 0xfd67, 0xfd62, 0xfd67, +0xfd62, 0xfca0, 0xfcb6, 0xfca0, 0xfcb6, 0xfbf7, 0xfc29, 0xfbf7, 0xfc29, 0xfab5, 0xfaff, +0xfab5, 0xfaff, 0xfa55, 0xfab6, 0xfa55, 0xfab6, 0xfa55, 0xfab6, 0xf9d1, 0xfa46, 0xf9d1, +0xfa46, 0xf97d, 0xfa05, 0xf97d, 0xfa05, 0xf90f, 0xf9a9, 0xf90f, 0xf9a9, 0xf797, 0xf841, +0xf797, 0xf841, 0xf83d, 0xf8f6, 0xf83d, 0xf8f6, 0xf8ba, 0xf981, 0xf8ba, 0xf981, 0xf8ba, +0xf981, 0xf84c, 0xf921, 0xf84c, 0xf921, 0xf86e, 0xf951, 0xf86e, 0xf951, 0xf747, 0xf837, +0xf747, 0xf837, 0xf536, 0xf634, 0xf536, 0xf634, 0xf451, 0xf55d, 0xf451, 0xf55d, 0xf40c, +0xf527, 0xf40c, 0xf527, 0xf40c, 0xf527, 0xf573, 0xf69d, 0xf573, 0xf69d, 0xf654, 0xf78d, +0xf654, 0xf78d, 0xf724, 0xf86c, 0xf724, 0xf86c, 0xf7a8, 0xf8ff, 0xf7a8, 0xf8ff, 0xf624, +0xf78a, 0xf624, 0xf78a, 0xf624, 0xf78a, 0xf569, 0xf6de, 0xf569, 0xf6de, 0xf4ea, 0xf66d, +0xf4ea, 0xf66d, 0xf458, 0xf5e7, 0xf458, 0xf5e7, 0xf504, 0xf69f, 0xf504, 0xf69f, 0xf5ce, +0xf771, 0xf5ce, 0xf771, 0xf576, 0xf721, 0xf576, 0xf721, 0xf576, 0xf721, 0xf5f2, 0xf7a1, +0xf5f2, 0xf7a1, 0xf464, 0xf615, 0xf464, 0xf615, 0xf2d3, 0xf484, 0xf2d3, 0xf484, 0xf22f, +0xf3dc, 0xf22f, 0xf3dc, 0xf245, 0xf3ec, 0xf245, 0xf3ec, 0xf3e1, 0xf581, 0xf3e1, 0xf581, +0xf3e1, 0xf581, 0xf279, 0xf40e, 0xf279, 0xf40e, 0xf11b, 0xf2a4, 0xf11b, 0xf2a4, 0xf15d, +0xf2d7, 0xf15d, 0xf2d7, 0xf0fc, 0xf267, 0xf0fc, 0xf267, 0xf1cf, 0xf329, 0xf1cf, 0xf329, +0xf1cf, 0xf329, 0xf28d, 0xf3d7, 0xf28d, 0xf3d7, 0xf22a, 0xf365, 0xf22a, 0xf365, 0xf29b, +0xf3c7, 0xf29b, 0xf3c7, 0xf3bd, 0xf4db, 0xf3bd, 0xf4db, 0xf479, 0xf58d, 0xf479, 0xf58d, +0xf270, 0xf37b, 0xf270, 0xf37b, 0xf270, 0xf37b, 0xf190, 0xf296, 0xf190, 0xf296, 0xf1fe, +0xf301, 0xf1fe, 0xf301, 0xf254, 0xf359, 0xf254, 0xf359, 0xf320, 0xf42b, 0xf320, 0xf42b, +0xf29c, 0xf3b0, 0xf29c, 0xf3b0, 0xf2ab, 0xf3cd, 0xf2ab, 0xf3cd, 0xf2ab, 0xf3cd, 0xf231, +0xf364, 0xf231, 0xf364, 0xf158, 0xf29f, 0xf158, 0xf29f, 0xf055, 0xf1b4, 0xf055, 0xf1b4, +0xee28, 0xefa2, 0xee28, 0xefa2, 0xec5b, 0xedf2, 0xec5b, 0xedf2, 0xec5b, 0xedf2, 0xeb51, +0xed07, 0xeb51, 0xed07, 0xeaad, 0xec83, 0xeaad, 0xec83, 0xea29, 0xec1f, 0xea29, 0xec1f, +0xe9a7, 0xebbd, 0xe9a7, 0xebbd, 0xe959, 0xeb8e, 0xe959, 0xeb8e, 0xe934, 0xeb87, 0xe934, +0xeb87, 0xe934, 0xeb87, 0xea03, 0xec71, 0xea03, 0xec71, 0xea26, 0xecac, 0xea26, 0xecac, +0xe970, 0xec0c, 0xe970, 0xec0c, 0xe93e, 0xebec, 0xe93e, 0xebec, 0xe87a, 0xeb36, 0xe87a, +0xeb36, 0xe741, 0xea07, 0xe741, 0xea07, 0xe741, 0xea07, 0xe81f, 0xeaeb, 0xe81f, 0xeaeb, +0xe8b3, 0xeb80, 0xe8b3, 0xeb80, 0xe93f, 0xec0a, 0xe93f, 0xec0a, 0xeb3d, 0xee02, 0xeb3d, +0xee02, 0xec5e, 0xef19, 0xec5e, 0xef19, 0xec5e, 0xef19, 0xee8f, 0xf13d, 0xee8f, 0xf13d, +0xef82, 0xf222, 0xef82, 0xf222, 0xf05d, 0xf2ec, 0xf05d, 0xf2ec, 0xf175, 0xf3f2, 0xf175, +0xf3f2, 0xf22a, 0xf495, 0xf22a, 0xf495, 0xf2b2, 0xf50a, 0xf2b2, 0xf50a, 0xf2b2, 0xf50a, +0xf1aa, 0xf3f0, 0xf1aa, 0xf3f0, 0xf020, 0xf255, 0xf020, 0xf255, 0xef87, 0xf1ad, 0xef87, +0xf1ad, 0xefcc, 0xf1e5, 0xefcc, 0xf1e5, 0xefd0, 0xf1df, 0xefd0, 0xf1df, 0xefe7, 0xf1ef, +0xefe7, 0xf1ef, 0xefe7, 0xf1ef, 0xef4e, 0xf152, 0xef4e, 0xf152, 0xefdb, 0xf1de, 0xefdb, +0xf1de, 0xef95, 0xf19b, 0xef95, 0xf19b, 0xf000, 0xf20c, 0xf000, 0xf20c, 0xf0d0, 0xf2e4, +0xf0d0, 0xf2e4, 0xf0d0, 0xf2e4, 0xef41, 0xf161, 0xef41, 0xf161, 0xef0e, 0xf13b, 0xef0e, +0xf13b, 0xef25, 0xf161, 0xef25, 0xf161, 0xef31, 0xf17d, 0xef31, 0xf17d, 0xefab, 0xf206, +0xefab, 0xf206, 0xef32, 0xf19c, 0xef32, 0xf19c, 0xef32, 0xf19c, 0xeee0, 0xf158, 0xeee0, +0xf158, 0xee68, 0xf0ec, 0xee68, 0xf0ec, 0xeea4, 0xf131, 0xeea4, 0xf131, 0xee95, 0xf127, +0xee95, 0xf127, 0xec47, 0xeeda, 0xec47, 0xeeda, 0xebbd, 0xee4c, 0xebbd, 0xee4c, 0xebbd, +0xee4c, 0xec22, 0xeea9, 0xec22, 0xeea9, 0xecf2, 0xef6a, 0xecf2, 0xef6a, 0xede6, 0xf049, +0xede6, 0xf049, 0xecd4, 0xef1c, 0xecd4, 0xef1c, 0xecdc, 0xef02, 0xecdc, 0xef02, 0xecdc, +0xef02, 0xee58, 0xf058, 0xee58, 0xf058, 0xefa3, 0xf177, 0xefa3, 0xf177, 0xf05b, 0xf1fd, +0xf05b, 0xf1fd, 0xf0d0, 0xf23c, 0xf0d0, 0xf23c, 0xf230, 0xf362, 0xf230, 0xf362, 0xf3ac, +0xf4a0, 0xf3ac, 0xf4a0, 0xf3ac, 0xf4a0, 0xf531, 0xf5e7, 0xf531, 0xf5e7, 0xf615, 0xf689, +0xf615, 0xf689, 0xf7c0, 0xf7f3, 0xf7c0, 0xf7f3, 0xf975, 0xf968, 0xf975, 0xf968, 0xfa14, +0xf9c7, 0xfa14, 0xf9c7, 0xfc61, 0xfbd7, 0xfc61, 0xfbd7, 0xfc61, 0xfbd7, 0xfd45, 0xfc81, +0xfd45, 0xfc81, 0xfd87, 0xfc8e, 0xfd87, 0xfc8e, 0xff9c, 0xfe71, 0xff9c, 0xfe71, 0xea, +0xff92, 0xea, 0xff92, 0x16f, 0xfff0, 0x16f, 0xfff0, 0x16f, 0xfff0, 0x343, 0x1a3, +0x343, 0x1a3, 0x4a8, 0x2ed, 0x4a8, 0x2ed, 0x5fd, 0x42c, 0x5fd, 0x42c, 0x810, +0x62f, 0x810, 0x62f, 0xa8a, 0x89e, 0xa8a, 0x89e, 0xcb6, 0xac5, 0xcb6, 0xac5, +0xcb6, 0xac5, 0xd68, 0xb76, 0xd68, 0xb76, 0xe22, 0xc34, 0xe22, 0xc34, 0xe5a, +0xc71, 0xe5a, 0xc71, 0xec5, 0xce5, 0xec5, 0xce5, 0xfd1, 0xdfc, 0xfd1, 0xdfc, +0x100b, 0xe41, 0x100b, 0xe41, 0x100b, 0xe41, 0x1008, 0xe4a, 0x1008, 0xe4a, 0x10d3, +0xf20, 0x10d3, 0xf20, 0x1094, 0xeec, 0x1094, 0xeec, 0x110c, 0xf6e, 0x110c, 0xf6e, +0x10b0, 0xf18, 0x10b0, 0xf18, 0x10b0, 0xf18, 0xfeb, 0xe59, 0xfeb, 0xe59, 0x1047, +0xeb8, 0x1047, 0xeb8, 0xfba, 0xe2c, 0xfba, 0xe2c, 0x1104, 0xf75, 0x1104, 0xf75, +0x1113, 0xf81, 0x1113, 0xf81, 0xfcd, 0xe36, 0xfcd, 0xe36, 0xfcd, 0xe36, 0x101e, +0xe81, 0x101e, 0xe81, 0x1145, 0xfa0, 0x1145, 0xfa0, 0x12b2, 0x1105, 0x12b2, 0x1105, +0x1475, 0x12c1, 0x1475, 0x12c1, 0x15c6, 0x140b, 0x15c6, 0x140b, 0x15c6, 0x140b, 0x16ac, +0x14ec, 0x16ac, 0x14ec, 0x163a, 0x1477, 0x163a, 0x1477, 0x1556, 0x1392, 0x1556, 0x1392, +0x14a8, 0x12e6, 0x14a8, 0x12e6, 0x1234, 0x1076, 0x1234, 0x1076, 0x11c8, 0x1013, 0x11c8, +0x1013, 0x11c8, 0x1013, 0x1344, 0x119b, 0x1344, 0x119b, 0x14c0, 0x1326, 0x14c0, 0x1326, +0x148f, 0x1308, 0x148f, 0x1308, 0x131d, 0x11ad, 0x131d, 0x11ad, 0x12b8, 0x1161, 0x12b8, +0x1161, 0x127b, 0x113f, 0x127b, 0x113f, 0x127b, 0x113f, 0x12fb, 0x11de, 0x12fb, 0x11de, +0x121e, 0x1122, 0x121e, 0x1122, 0x1158, 0x107e, 0x1158, 0x107e, 0x104e, 0xf96, 0x104e, +0xf96, 0xe93, 0xdfe, 0xe93, 0xdfe, 0xe93, 0xdfe, 0xda7, 0xd34, 0xda7, 0xd34, +0xab7, 0xa65, 0xab7, 0xa65, 0x854, 0x823, 0x854, 0x823, 0x60d, 0x5fb, 0x60d, +0x5fb, 0x432, 0x43c, 0x432, 0x43c, 0x3a9, 0x3ce, 0x3a9, 0x3ce, 0x3a9, 0x3ce, +0x1c7, 0x203, 0x1c7, 0x203, 0x56, 0xa6, 0x56, 0xa6, 0x54, 0xb6, 0x54, +0xb6, 0xfeed, 0xff5e, 0xfeed, 0xff5e, 0xfd0a, 0xfd87, 0xfd0a, 0xfd87, 0xfcb0, 0xfd36, +0xfcb0, 0xfd36, 0xfcb0, 0xfd36, 0xfb84, 0xfc10, 0xfb84, 0xfc10, 0xf9f6, 0xfa85, 0xf9f6, +0xfa85, 0xf936, 0xf9c6, 0xf936, 0xf9c6, 0xf983, 0xfa12, 0xf983, 0xfa12, 0xf958, 0xf9e3, +0xf958, 0xf9e3, 0xf958, 0xf9e3, 0xf840, 0xf8c6, 0xf840, 0xf8c6, 0xf73d, 0xf7bd, 0xf73d, +0xf7bd, 0xf5ff, 0xf676, 0xf5ff, 0xf676, 0xf54c, 0xf5b9, 0xf54c, 0xf5b9, 0xf553, 0xf5b4, +0xf553, 0xf5b4, 0xf488, 0xf4dd, 0xf488, 0xf4dd, 0xf488, 0xf4dd, 0xf3e3, 0xf42a, 0xf3e3, +0xf42a, 0xf4f5, 0xf52c, 0xf4f5, 0xf52c, 0xf69e, 0xf6c4, 0xf69e, 0xf6c4, 0xf90d, 0xf920, +0xf90d, 0xf920, 0xfa61, 0xfa61, 0xfa61, 0xfa61, 0xfae8, 0xfad2, 0xfae8, 0xfad2, 0xfae8, +0xfad2, 0xfb43, 0xfb17, 0xfb43, 0xfb17, 0xfb44, 0xfb00, 0xfb44, 0xfb00, 0xfd21, 0xfcc3, +0xfd21, 0xfcc3, 0xfdea, 0xfd6f, 0xfdea, 0xfd6f, 0xfdd4, 0xfd3c, 0xfdd4, 0xfd3c, 0xfdd4, +0xfd3c, 0x26, 0xff70, 0x26, 0xff70, 0x1d4, 0xfe, 0x1d4, 0xfe, 0x334, 0x23d, +0x334, 0x23d, 0x4fb, 0x3e2, 0x4fb, 0x3e2, 0x5cb, 0x48f, 0x5cb, 0x48f, 0x736, +0x5d7, 0x736, 0x5d7, 0x736, 0x5d7, 0x8bf, 0x73b, 0x8bf, 0x73b, 0xaec, 0x944, +0xaec, 0x944, 0xb71, 0x9a5, 0xb71, 0x9a5, 0xacf, 0x8de, 0xacf, 0x8de, 0xbf7, +0x9e3, 0xbf7, 0x9e3, 0xea0, 0xc69, 0xea0, 0xc69, 0xea0, 0xc69, 0x121b, 0xfc3, +0x121b, 0xfc3, 0x13b2, 0x113a, 0x13b2, 0x113a, 0x15b3, 0x131c, 0x15b3, 0x131c, 0x17f3, +0x153f, 0x17f3, 0x153f, 0x19bf, 0x16f0, 0x19bf, 0x16f0, 0x19bf, 0x16f0, 0x1be6, 0x18fe, +0x1be6, 0x18fe, 0x1cd9, 0x19da, 0x1cd9, 0x19da, 0x1d83, 0x1a70, 0x1d83, 0x1a70, 0x1e55, +0x1b2f, 0x1e55, 0x1b2f, 0x1fe7, 0x1cb1, 0x1fe7, 0x1cb1, 0x20fa, 0x1db7, 0x20fa, 0x1db7, +0x20fa, 0x1db7, 0x20f6, 0x1da8, 0x20f6, 0x1da8, 0x21ab, 0x1e53, 0x21ab, 0x1e53, 0x2277, +0x1f19, 0x2277, 0x1f19, 0x227c, 0x1f1a, 0x227c, 0x1f1a, 0x2243, 0x1edf, 0x2243, 0x1edf, +0x20b1, 0x1d4e, 0x20b1, 0x1d4e, 0x20b1, 0x1d4e, 0x1eb6, 0x1b55, 0x1eb6, 0x1b55, 0x1e41, +0x1ae5, 0x1e41, 0x1ae5, 0x1d42, 0x19ec, 0x1d42, 0x19ec, 0x1c87, 0x193b, 0x1c87, 0x193b, +0x1c52, 0x1911, 0x1c52, 0x1911, 0x1c52, 0x1911, 0x1b74, 0x1840, 0x1b74, 0x1840, 0x1a22, +0x16fd, 0x1a22, 0x16fd, 0x1989, 0x1675, 0x1989, 0x1675, 0x19e2, 0x16e1, 0x19e2, 0x16e1, +0x18b3, 0x15c7, 0x18b3, 0x15c7, 0x1746, 0x1470, 0x1746, 0x1470, 0x1746, 0x1470, 0x1578, +0x12ba, 0x1578, 0x12ba, 0x1320, 0x107c, 0x1320, 0x107c, 0x127c, 0xff3, 0x127c, 0xff3, +0x129c, 0x1031, 0x129c, 0x1031, 0x10e0, 0xe92, 0x10e0, 0xe92, 0xf6f, 0xd41, 0xf6f, +0xd41, 0xf6f, 0xd41, 0xeae, 0xca0, 0xeae, 0xca0, 0xdaf, 0xbc2, 0xdaf, 0xbc2, +0xe11, 0xc46, 0xe11, 0xc46, 0xd4b, 0xba1, 0xd4b, 0xba1, 0xc42, 0xaba, 0xc42, +0xaba, 0xc42, 0xaba, 0xac9, 0x963, 0xac9, 0x963, 0x971, 0x82c, 0x971, 0x82c, +0x962, 0x83e, 0x962, 0x83e, 0x6cf, 0x5cc, 0x6cf, 0x5cc, 0x476, 0x393, 0x476, +0x393, 0x3eb, 0x326, 0x3eb, 0x326, 0x3eb, 0x326, 0x266, 0x1be, 0x266, 0x1be, +0x125, 0x98, 0x125, 0x98, 0xff78, 0xff05, 0xff78, 0xff05, 0xfe39, 0xfdde, 0xfe39, +0xfdde, 0xfd40, 0xfcfb, 0xfd40, 0xfcfb, 0xfcf1, 0xfcc1, 0xfcf1, 0xfcc1, 0xfcf1, 0xfcc1, +0xfde3, 0xfdc7, 0xfde3, 0xfdc7, 0xfcd3, 0xfcc8, 0xfcd3, 0xfcc8, 0xfbbc, 0xfbc2, 0xfbbc, +0xfbc2, 0xfb38, 0xfb4d, 0xfb38, 0xfb4d, 0xfb8a, 0xfbae, 0xfb8a, 0xfbae, 0xfb8a, 0xfbae, +0xfbe1, 0xfc13, 0xfbe1, 0xfc13, 0xfad5, 0xfb13, 0xfad5, 0xfb13, 0xfa86, 0xfad1, 0xfa86, +0xfad1, 0xfac4, 0xfb1b, 0xfac4, 0xfb1b, 0xfb6a, 0xfbce, 0xfb6a, 0xfbce, 0xfc3d, 0xfcae, +0xfc3d, 0xfcae, 0xfc3d, 0xfcae, 0xfb55, 0xfbd3, 0xfb55, 0xfbd3, 0xfa1a, 0xfaa6, 0xfa1a, +0xfaa6, 0xf970, 0xfa0b, 0xf970, 0xfa0b, 0xf934, 0xf9de, 0xf934, 0xf9de, 0xf8de, 0xf998, +0xf8de, 0xf998, 0xf89e, 0xf969, 0xf89e, 0xf969, 0xf89e, 0xf969, 0xf91b, 0xf9f8, 0xf91b, +0xf9f8, 0xf8cc, 0xf9ba, 0xf8cc, 0xf9ba, 0xf900, 0xfa01, 0xf900, 0xfa01, 0xf8d9, 0xf9ed, +0xf8d9, 0xf9ed, 0xf785, 0xf8ac, 0xf785, 0xf8ac, 0xf785, 0xf8ac, 0xf72a, 0xf863, 0xf72a, +0xf863, 0xf816, 0xf960, 0xf816, 0xf960, 0xf922, 0xfa7c, 0xf922, 0xfa7c, 0xf963, 0xfacc, +0xf963, 0xfacc, 0xf8e0, 0xfa57, 0xf8e0, 0xfa57, 0xf91e, 0xfaa0, 0xf91e, 0xfaa0, 0xf91e, +0xfaa0, 0xf7fa, 0xf985, 0xf7fa, 0xf985, 0xf688, 0xf818, 0xf688, 0xf818, 0xf6ec, 0xf880, +0xf6ec, 0xf880, 0xf6a6, 0xf83b, 0xf6a6, 0xf83b, 0xf5ed, 0xf780, 0xf5ed, 0xf780, 0xf5ed, +0xf780, 0xf4db, 0xf669, 0xf4db, 0xf669, 0xf383, 0xf509, 0xf383, 0xf509, 0xf2cb, 0xf446, +0xf2cb, 0xf446, 0xf2a2, 0xf410, 0xf2a2, 0xf410, 0xf19d, 0xf2fb, 0xf19d, 0xf2fb, 0xf18b, +0xf2d8, 0xf18b, 0xf2d8, 0xf18b, 0xf2d8, 0xf19e, 0xf2d9, 0xf19e, 0xf2d9, 0xf1ef, 0xf317, +0xf1ef, 0xf317, 0xf2f8, 0xf40b, 0xf2f8, 0xf40b, 0xf32a, 0xf42a, 0xf32a, 0xf42a, 0xf306, +0xf3f2, 0xf306, 0xf3f2, 0xf183, 0xf25e, 0xf183, 0xf25e, 0xf183, 0xf25e, 0xf167, 0xf232, +0xf167, 0xf232, 0xf2ae, 0xf36b, 0xf2ae, 0xf36b, 0xf102, 0xf1b4, 0xf102, 0xf1b4, 0xefcb, +0xf074, 0xefcb, 0xf074, 0xf001, 0xf0a5, 0xf001, 0xf0a5, 0xf001, 0xf0a5, 0xf00f, 0xf0b3, +0xf00f, 0xf0b3, 0xf021, 0xf0c7, 0xf021, 0xf0c7, 0xef1a, 0xefc6, 0xef1a, 0xefc6, 0xee69, +0xef20, 0xee69, 0xef20, 0xec65, 0xed29, 0xec65, 0xed29, 0xec00, 0xecd5, 0xec00, 0xecd5, +0xec00, 0xecd5, 0xec3a, 0xed23, 0xec3a, 0xed23, 0xea3c, 0xeb3b, 0xea3c, 0xeb3b, 0xe8e2, +0xe9f9, 0xe8e2, 0xe9f9, 0xe8aa, 0xe9da, 0xe8aa, 0xe9da, 0xe9a1, 0xeaec, 0xe9a1, 0xeaec, +0xea98, 0xebfd, 0xea98, 0xebfd, 0xea98, 0xebfd, 0xea7f, 0xebfe, 0xea7f, 0xebfe, 0xea5d, +0xebf3, 0xea5d, 0xebf3, 0xea47, 0xebf4, 0xea47, 0xebf4, 0xe9cb, 0xeb8c, 0xe9cb, 0xeb8c, +0xe99c, 0xeb6d, 0xe99c, 0xeb6d, 0xe99c, 0xeb6d, 0xe93a, 0xeb18, 0xe93a, 0xeb18, 0xe96c, +0xeb54, 0xe96c, 0xeb54, 0xea79, 0xec66, 0xea79, 0xec66, 0xebfe, 0xedec, 0xebfe, 0xedec, +0xebf5, 0xede0, 0xebf5, 0xede0, 0xeca8, 0xee8b, 0xeca8, 0xee8b, 0xeca8, 0xee8b, 0xedb4, +0xef8c, 0xedb4, 0xef8c, 0xedeb, 0xefb5, 0xedeb, 0xefb5, 0xefec, 0xf1a6, 0xefec, 0xf1a6, +0xf184, 0xf32a, 0xf184, 0xf32a, 0xf17e, 0xf311, 0xf17e, 0xf311, 0xf1c6, 0xf343, 0xf1c6, +0xf343, 0xf1c6, 0xf343, 0xf1ec, 0xf355, 0xf1ec, 0xf355, 0xf218, 0xf36d, 0xf218, 0xf36d, +0xf218, 0xf35b, 0xf218, 0xf35b, 0xf144, 0xf278, 0xf144, 0xf278, 0xf0d9, 0xf200, 0xf0d9, +0xf200, 0xf0d9, 0xf200, 0xee8b, 0xefab, 0xee8b, 0xefab, 0xee27, 0xef43, 0xee27, 0xef43, +0xef5d, 0xf07b, 0xef5d, 0xf07b, 0xef79, 0xf09d, 0xef79, 0xf09d, 0xef4f, 0xf07f, 0xef4f, +0xf07f, 0xef69, 0xf0ab, 0xef69, 0xf0ab, 0xef69, 0xf0ab, 0xeef7, 0xf04f, 0xeef7, 0xf04f, +0xee41, 0xefb4, 0xee41, 0xefb4, 0xee66, 0xeff8, 0xee66, 0xeff8, 0xedd3, 0xef87, 0xedd3, +0xef87, 0xed84, 0xef5e, 0xed84, 0xef5e, 0xed41, 0xef42, 0xed41, 0xef42, 0xed41, 0xef42, +0xedfd, 0xf027, 0xedfd, 0xf027, 0xedd5, 0xf027, 0xedd5, 0xf027, 0xecd1, 0xef49, 0xecd1, +0xef49, 0xebf3, 0xee90, 0xebf3, 0xee90, 0xe9ff, 0xecbc, 0xe9ff, 0xecbc, 0xe9ff, 0xecbc, +0xe9b5, 0xec8d, 0xe9b5, 0xec8d, 0xe9cf, 0xecbe, 0xe9cf, 0xecbe, 0xe8a0, 0xeb9f, 0xe8a0, +0xeb9f, 0xe8c4, 0xebcc, 0xe8c4, 0xebcc, 0xe86d, 0xeb76, 0xe86d, 0xeb76, 0xe933, 0xec34, +0xe933, 0xec34, 0xe933, 0xec34, 0xea66, 0xed58, 0xea66, 0xed58, 0xeae6, 0xedbf, 0xeae6, +0xedbf, 0xebe6, 0xeea0, 0xebe6, 0xeea0, 0xec20, 0xeeb0, 0xec20, 0xeeb0, 0xee2f, 0xf090, +0xee2f, 0xf090, 0xf10a, 0xf333, 0xf10a, 0xf333, 0xf10a, 0xf333, 0xf1f7, 0xf3e3, 0xf1f7, +0xf3e3, 0xf287, 0xf430, 0xf287, 0xf430, 0xf4c0, 0xf623, 0xf4c0, 0xf623, 0xf6fc, 0xf815, +0xf6fc, 0xf815, 0xf8e3, 0xf9b0, 0xf8e3, 0xf9b0, 0xf8e3, 0xf9b0, 0xfa0b, 0xfa8b, 0xfa0b, +0xfa8b, 0xfb76, 0xfbaa, 0xfb76, 0xfbaa, 0xfd12, 0xfcfc, 0xfd12, 0xfcfc, 0xff4e, 0xfeef, +0xff4e, 0xfeef, 0xb5, 0x12, 0xb5, 0x12, 0x128, 0x45, 0x128, 0x45, 0x128, +0x45, 0x205, 0xe7, 0x205, 0xe7, 0x421, 0x2cd, 0x421, 0x2cd, 0x710, 0x58d, +0x710, 0x58d, 0x7fc, 0x650, 0x7fc, 0x650, 0xa08, 0x83a, 0xa08, 0x83a, 0xb38, +0x94f, 0xb38, 0x94f, 0xb38, 0x94f, 0xbb8, 0x9b9, 0xbb8, 0x9b9, 0xd6f, 0xb62, +0xd6f, 0xb62, 0xe4d, 0xc37, 0xe4d, 0xc37, 0xebc, 0xca2, 0xebc, 0xca2, 0x10ee, +0xed4, 0x10ee, 0xed4, 0x10ee, 0xed4, 0x124c, 0x1037, 0x124c, 0x1037, 0x12dc, 0x10ce, +0x12dc, 0x10ce, 0x1305, 0x1103, 0x1305, 0x1103, 0x12e7, 0x10f1, 0x12e7, 0x10f1, 0x129c, +0x10b3, 0x129c, 0x10b3, 0x1163, 0xf89, 0x1163, 0xf89, 0x1163, 0xf89, 0x114a, 0xf7e, +0x114a, 0xf7e, 0x1155, 0xf96, 0x1155, 0xf96, 0x1130, 0xf7e, 0x1130, 0xf7e, 0x1085, +0xede, 0x1085, 0xede, 0x1035, 0xe99, 0x1035, 0xe99, 0xf77, 0xde3, 0xf77, 0xde3, +0xf77, 0xde3, 0x1015, 0xe88, 0x1015, 0xe88, 0x10f0, 0xf68, 0x10f0, 0xf68, 0x11a6, +0x1023, 0x11a6, 0x1023, 0x128c, 0x110d, 0x128c, 0x110d, 0x13ad, 0x1231, 0x13ad, 0x1231, +0x13ad, 0x1231, 0x1500, 0x1386, 0x1500, 0x1386, 0x13fa, 0x1283, 0x13fa, 0x1283, 0x135c, +0x11e9, 0x135c, 0x11e9, 0x129d, 0x112e, 0x129d, 0x112e, 0x1096, 0xf2e, 0x1096, 0xf2e, +0x1128, 0xfc8, 0x1128, 0xfc8, 0x1128, 0xfc8, 0x121e, 0x10c8, 0x121e, 0x10c8, 0x10a3, +0xf59, 0x10a3, 0xf59, 0x1041, 0xf07, 0x1041, 0xf07, 0xfc6, 0xe9e, 0xfc6, 0xe9e, +0x1004, 0xef0, 0x1004, 0xef0, 0x1015, 0xf19, 0x1015, 0xf19, 0x1015, 0xf19, 0xfc2, +0xee1, 0xfc2, 0xee1, 0xfb9, 0xef4, 0xfb9, 0xef4, 0xe42, 0xd9c, 0xe42, 0xd9c, +0xd89, 0xd02, 0xd89, 0xd02, 0xd91, 0xd2c, 0xd91, 0xd2c, 0xd91, 0xd2c, 0xc17, +0xbd5, 0xc17, 0xbd5, 0x9f3, 0x9d4, 0x9f3, 0x9d4, 0x818, 0x81c, 0x818, 0x81c, +0x6f7, 0x71d, 0x6f7, 0x71d, 0x59f, 0x5e6, 0x59f, 0x5e6, 0x429, 0x48e, 0x429, +0x48e, 0x429, 0x48e, 0x318, 0x39b, 0x318, 0x39b, 0x216, 0x2b4, 0x216, 0x2b4, +0x23b, 0x2f1, 0x23b, 0x2f1, 0x109, 0x1d3, 0x109, 0x1d3, 0xffc0, 0x9c, 0xffc0, +0x9c, 0xffc0, 0x9c, 0xfe38, 0xff23, 0xfe38, 0xff23, 0xfd66, 0xfe5c, 0xfd66, 0xfe5c, +0xfc6d, 0xfd6a, 0xfc6d, 0xfd6a, 0xfb1e, 0xfc20, 0xfb1e, 0xfc20, 0xfa3d, 0xfb3f, 0xfa3d, +0xfb3f, 0xf90b, 0xfa0a, 0xf90b, 0xfa0a, 0xf90b, 0xfa0a, 0xf88e, 0xf988, 0xf88e, 0xf988, +0xf8cf, 0xf9c1, 0xf8cf, 0xf9c1, 0xf813, 0xf8fb, 0xf813, 0xf8fb, 0xf6b0, 0xf78a, 0xf6b0, +0xf78a, 0xf74c, 0xf818, 0xf74c, 0xf818, 0xf73a, 0xf7f6, 0xf73a, 0xf7f6, 0xf73a, 0xf7f6, +0xf7cf, 0xf87a, 0xf7cf, 0xf87a, 0xf8bc, 0xf954, 0xf8bc, 0xf954, 0xfa38, 0xfabc, 0xfa38, +0xfabc, 0xfa9a, 0xfb09, 0xfa9a, 0xfb09, 0xfabd, 0xfb18, 0xfabd, 0xfb18, 0xfabd, 0xfb18, +0xfb9e, 0xfbe3, 0xfb9e, 0xfbe3, 0xfc63, 0xfc92, 0xfc63, 0xfc92, 0xfd97, 0xfdaf, 0xfd97, +0xfdaf, 0xfefe, 0xfeff, 0xfefe, 0xfeff, 0x22, 0xc, 0x22, 0xc, 0x82, 0x54, +0x82, 0x54, 0x82, 0x54, 0x1b2, 0x16c, 0x1b2, 0x16c, 0x1d3, 0x174, 0x1d3, +0x174, 0x25c, 0x1e4, 0x25c, 0x1e4, 0x2c0, 0x22e, 0x2c0, 0x22e, 0x41e, 0x371, +0x41e, 0x371, 0x601, 0x539, 0x601, 0x539, 0x601, 0x539, 0x670, 0x58c, 0x670, +0x58c, 0x7bd, 0x6bc, 0x7bd, 0x6bc, 0x7f4, 0x6d7, 0x7f4, 0x6d7, 0x70c, 0x5d1, +0x70c, 0x5d1, 0x9d8, 0x880, 0x9d8, 0x880, 0x9d8, 0x880, 0xb71, 0x9fc, 0xb71, +0x9fc, 0xc06, 0xa74, 0xc06, 0xa74, 0xe7d, 0xccf, 0xe7d, 0xccf, 0xfc9, 0xdff, +0xfc9, 0xdff, 0x114c, 0xf68, 0x114c, 0xf68, 0x12bc, 0x10be, 0x12bc, 0x10be, 0x12bc, +0x10be, 0x1578, 0x1362, 0x1578, 0x1362, 0x173e, 0x1512, 0x173e, 0x1512, 0x181c, 0x15dc, +0x181c, 0x15dc, 0x19f4, 0x17a2, 0x19f4, 0x17a2, 0x1b79, 0x1916, 0x1b79, 0x1916, 0x1c15, +0x19a4, 0x1c15, 0x19a4, 0x1c15, 0x19a4, 0x1d42, 0x1ac5, 0x1d42, 0x1ac5, 0x1fa7, 0x1d22, +0x1fa7, 0x1d22, 0x21da, 0x1f4d, 0x21da, 0x1f4d, 0x21d1, 0x1f3f, 0x21d1, 0x1f3f, 0x2164, +0x1ed0, 0x2164, 0x1ed0, 0x2164, 0x1ed0, 0x20a5, 0x1e0f, 0x20a5, 0x1e0f, 0x1eff, 0x1c6b, +0x1eff, 0x1c6b, 0x1ece, 0x1c3d, 0x1ece, 0x1c3d, 0x1eb4, 0x1c27, 0x1eb4, 0x1c27, 0x1e07, +0x1b80, 0x1e07, 0x1b80, 0x1d3c, 0x1abc, 0x1d3c, 0x1abc, 0x1d3c, 0x1abc, 0x1cde, 0x1a67, +0x1cde, 0x1a67, 0x1c38, 0x19c9, 0x1c38, 0x19c9, 0x1b66, 0x1901, 0x1b66, 0x1901, 0x1a21, +0x17c8, 0x1a21, 0x17c8, 0x186a, 0x161d, 0x186a, 0x161d, 0x170e, 0x14ce, 0x170e, 0x14ce, +0x170e, 0x14ce, 0x16c3, 0x1490, 0x16c3, 0x1490, 0x146d, 0x1249, 0x146d, 0x1249, 0x13a8, +0x1193, 0x13a8, 0x1193, 0x13ce, 0x11cb, 0x13ce, 0x11cb, 0x1313, 0x1121, 0x1313, 0x1121, +0x1313, 0x1121, 0x12a9, 0x10cb, 0x12a9, 0x10cb, 0x1107, 0xf3e, 0x1107, 0xf3e, 0x1037, +0xe84, 0x1037, 0xe84, 0xeac, 0xd11, 0xeac, 0xd11, 0xe29, 0xca8, 0xe29, 0xca8, +0xd4f, 0xbe9, 0xd4f, 0xbe9, 0xd4f, 0xbe9, 0xc16, 0xacd, 0xc16, 0xacd, 0xb1c, +0x9f1, 0xb1c, 0x9f1, 0xacd, 0x9c3, 0xacd, 0x9c3, 0x94a, 0x861, 0x94a, 0x861, +0x879, 0x7b1, 0x879, 0x7b1, 0x7af, 0x709, 0x7af, 0x709, 0x7af, 0x709, 0x476, +0x3f2, 0x476, 0x3f2, 0x243, 0x1e2, 0x243, 0x1e2, 0xff54, 0xff15, 0xff54, 0xff15, +0xfd89, 0xfd6a, 0xfd89, 0xfd6a, 0xfd10, 0xfd12, 0xfd10, 0xfd12, 0xfd10, 0xfd12, 0xfcb3, +0xfcd3, 0xfcb3, 0xfcd3, 0xfd74, 0xfdb0, 0xfd74, 0xfdb0, 0xfcda, 0xfd2f, 0xfcda, 0xfd2f, +0xfb48, 0xfbb3, 0xfb48, 0xfbb3, 0xfbe6, 0xfc66, 0xfbe6, 0xfc66, 0xfac6, 0xfb56, 0xfac6, +0xfb56, 0xfac6, 0xfb56, 0xf950, 0xf9ee, 0xf950, 0xf9ee, 0xf90e, 0xf9b6, 0xf90e, 0xf9b6, +0xf951, 0xfa00, 0xf951, 0xfa00, 0xf93b, 0xf9ee, 0xf93b, 0xf9ee, 0xf958, 0xfa0d, 0xf958, +0xfa0d, 0xf9f8, 0xfaac, 0xf9f8, 0xfaac, 0xf9f8, 0xfaac, 0xf8d9, 0xf989, 0xf8d9, 0xf989, +0xf88e, 0xf939, 0xf88e, 0xf939, 0xf926, 0xf9ca, 0xf926, 0xf9ca, 0xf920, 0xf9bd, 0xf920, +0xf9bd, 0xf91c, 0xf9b1, 0xf91c, 0xf9b1, 0xf91c, 0xf9b1, 0xf978, 0xfa05, 0xf978, 0xfa05, +0xf9e9, 0xfa6e, 0xf9e9, 0xfa6e, 0xfaa4, 0xfb22, 0xfaa4, 0xfb22, 0xfa01, 0xfa79, 0xfa01, +0xfa79, 0xfa3e, 0xfab3, 0xfa3e, 0xfab3, 0xfa45, 0xfab7, 0xfa45, 0xfab7, 0xfa45, 0xfab7, +0xfa5c, 0xfacf, 0xfa5c, 0xfacf, 0xfb24, 0xfb9a, 0xfb24, 0xfb9a, 0xfb3d, 0xfbb8, 0xfb3d, +0xfbb8, 0xfb25, 0xfba7, 0xfb25, 0xfba7, 0xfbe7, 0xfc74, 0xfbe7, 0xfc74, 0xfcf7, 0xfd91, +0xfcf7, 0xfd91, 0xfcf7, 0xfd91, 0xfc0c, 0xfcb4, 0xfc0c, 0xfcb4, 0xfb47, 0xfbff, 0xfb47, +0xfbff, 0xfb29, 0xfbf3, 0xfb29, 0xfbf3, 0xf97d, 0xfa5b, 0xf97d, 0xfa5b, 0xf82e, 0xf920, +0xf82e, 0xf920, 0xf82e, 0xf920, 0xf828, 0xf92f, 0xf828, 0xf92f, 0xf60b, 0xf727, 0xf60b, +0xf727, 0xf550, 0xf681, 0xf550, 0xf681, 0xf4e0, 0xf626, 0xf4e0, 0xf626, 0xf500, 0xf65a, +0xf500, 0xf65a, 0xf56f, 0xf6dd, 0xf56f, 0xf6dd, 0xf56f, 0xf6dd, 0xf549, 0xf6ca, 0xf549, +0xf6ca, 0xf524, 0xf6b7, 0xf524, 0xf6b7, 0xf4ca, 0xf66f, 0xf4ca, 0xf66f, 0xf48c, 0xf641, +0xf48c, 0xf641, 0xf43d, 0xf602, 0xf43d, 0xf602, 0xf3fa, 0xf5cf, 0xf3fa, 0xf5cf, 0xf3fa, +0xf5cf, 0xf334, 0xf518, 0xf334, 0xf518, 0xf349, 0xf53d, 0xf349, 0xf53d, 0xf292, 0xf495, +0xf292, 0xf495, 0xf2c2, 0xf4d6, 0xf2c2, 0xf4d6, 0xf1a5, 0xf3c9, 0xf1a5, 0xf3c9, 0xf1a5, +0xf3c9, 0xf00c, 0xf242, 0xf00c, 0xf242, 0xef06, 0xf14f, 0xef06, 0xf14f, 0xee02, 0xf05f, +0xee02, 0xf05f, 0xecdc, 0xef4f, 0xecdc, 0xef4f, 0xebab, 0xee36, 0xebab, 0xee36, 0xeaf5, +0xed98, 0xeaf5, 0xed98, 0xeaf5, 0xed98, 0xea09, 0xecc5, 0xea09, 0xecc5, 0xe873, 0xeb4a, +0xe873, 0xeb4a, 0xe77b, 0xea6d, 0xe77b, 0xea6d, 0xe780, 0xea8d, 0xe780, 0xea8d, 0xe675, +0xe99d, 0xe675, 0xe99d, 0xe675, 0xe99d, 0xe627, 0xe969, 0xe627, 0xe969, 0xe512, 0xe86c, +0xe512, 0xe86c, 0xe50d, 0xe87e, 0xe50d, 0xe87e, 0xe47e, 0xe803, 0xe47e, 0xe803, 0xe454, +0xe7ea, 0xe454, 0xe7ea, 0xe551, 0xe8f3, 0xe551, 0xe8f3, 0xe551, 0xe8f3, 0xe569, 0xe913, +0xe569, 0xe913, 0xe6ab, 0xea5a, 0xe6ab, 0xea5a, 0xe7ba, 0xeb67, 0xe7ba, 0xeb67, 0xe835, +0xebdc, 0xe835, 0xebdc, 0xe907, 0xeca2, 0xe907, 0xeca2, 0xe8e2, 0xec6c, 0xe8e2, 0xec6c, +0xe8e2, 0xec6c, 0xea97, 0xee0b, 0xea97, 0xee0b, 0xed6b, 0xf0c4, 0xed6b, 0xf0c4, 0xee38, +0xf171, 0xee38, 0xf171, 0xee66, 0xf17c, 0xee66, 0xf17c, 0xeecb, 0xf1ba, 0xeecb, 0xf1ba, +0xeecb, 0xf1ba, 0xf03d, 0xf302, 0xf03d, 0xf302, 0xf0ee, 0xf389, 0xf0ee, 0xf389, 0xf223, +0xf492, 0xf223, 0xf492, 0xf235, 0xf479, 0xf235, 0xf479, 0xf1eb, 0xf405, 0xf1eb, 0xf405, +0xf14d, 0xf33f, 0xf14d, 0xf33f, 0xf14d, 0xf33f, 0xef84, 0xf150, 0xef84, 0xf150, 0xee54, +0xf000, 0xee54, 0xf000, 0xeea4, 0xf033, 0xeea4, 0xf033, 0xee5b, 0xefd3, 0xee5b, 0xefd3, +0xef50, 0xf0b6, 0xef50, 0xf0b6, 0xf011, 0xf16c, 0xf011, 0xf16c, 0xf011, 0xf16c, 0xedab, +0xef00, 0xedab, 0xef00, 0xed4d, 0xeea3, 0xed4d, 0xeea3, 0xede1, 0xef3d, 0xede1, 0xef3d, +0xef17, 0xf07f, 0xef17, 0xf07f, 0xef78, 0xf0f0, 0xef78, 0xf0f0, 0xef78, 0xf0f0, 0xf069, +0xf1f6, 0xf069, 0xf1f6, 0xf08b, 0xf231, 0xf08b, 0xf231, 0xef5e, 0xf11e, 0xef5e, 0xf11e, +0xee4c, 0xf027, 0xee4c, 0xf027, 0xed36, 0xef2e, 0xed36, 0xef2e, 0xec51, 0xee64, 0xec51, +0xee64, 0xec51, 0xee64, 0xebcf, 0xedfa, 0xebcf, 0xedfa, 0xeb10, 0xed51, 0xeb10, 0xed51, +0xeb59, 0xedab, 0xeb59, 0xedab, 0xebfd, 0xee5b, 0xebfd, 0xee5b, 0xeafb, 0xed60, 0xeafb, +0xed60, 0xeabb, 0xed1f, 0xeabb, 0xed1f, 0xeabb, 0xed1f, 0xea3b, 0xec97, 0xea3b, 0xec97, +0xeab0, 0xecfd, 0xeab0, 0xecfd, 0xeb66, 0xed9c, 0xeb66, 0xed9c, 0xec31, 0xee48, 0xec31, +0xee48, 0xed77, 0xef68, 0xed77, 0xef68, 0xed77, 0xef68, 0xef6b, 0xf12f, 0xef6b, 0xf12f, +0xefcf, 0xf160, 0xefcf, 0xf160, 0xf168, 0xf2c0, 0xf168, 0xf2c0, 0xf29a, 0xf3b5, 0xf29a, +0xf3b5, 0xf322, 0xf3fb, 0xf322, 0xf3fb, 0xf4da, 0xf56f, 0xf4da, 0xf56f, 0xf4da, 0xf56f, +0xf642, 0xf692, 0xf642, 0xf692, 0xf8c8, 0xf8d0, 0xf8c8, 0xf8d0, 0xf99b, 0xf95d, 0xf99b, +0xf95d, 0xfab2, 0xfa30, 0xfab2, 0xfa30, 0xfb93, 0xface, 0xfb93, 0xface, 0xfcb5, 0xfbb2, +0xfcb5, 0xfbb2, 0xfcb5, 0xfbb2, 0xff00, 0xfdc2, 0xff00, 0xfdc2, 0x165, 0xfff0, 0x165, +0xfff0, 0x3a8, 0x201, 0x3a8, 0x201, 0x518, 0x345, 0x518, 0x345, 0x5a1, 0x3a7, +0x5a1, 0x3a7, 0x5a1, 0x3a7, 0x756, 0x53a, 0x756, 0x53a, 0x97c, 0x743, 0x97c, +0x743, 0xb9c, 0x94b, 0xb9c, 0x94b, 0xd33, 0xacf, 0xd33, 0xacf, 0xfea, 0xd77, +0xfea, 0xd77, 0x11f2, 0xf72, 0x11f2, 0xf72, 0x11f2, 0xf72, 0x124f, 0xfc6, 0x124f, +0xfc6, 0x1402, 0x1173, 0x1402, 0x1173, 0x1493, 0x11ff, 0x1493, 0x11ff, 0x14fc, 0x1263, +0x14fc, 0x1263, 0x1605, 0x1369, 0x1605, 0x1369, 0x15d7, 0x1338, 0x15d7, 0x1338, 0x15d7, +0x1338, 0x13da, 0x1137, 0x13da, 0x1137, 0x12c8, 0x1021, 0x12c8, 0x1021, 0x10fd, 0xe53, +0x10fd, 0xe53, 0x1102, 0xe53, 0x1102, 0xe53, 0x10de, 0xe2b, 0x10de, 0xe2b, 0x10de, +0xe2b, 0x107f, 0xdc7, 0x107f, 0xdc7, 0x10f8, 0xe3b, 0x10f8, 0xe3b, 0x120e, 0xf4d, +0x120e, 0xf4d, 0x13b0, 0x10eb, 0x13b0, 0x10eb, 0x136f, 0x10a8, 0x136f, 0x10a8, 0x142e, +0x1168, 0x142e, 0x1168, 0x142e, 0x1168, 0x143b, 0x1177, 0x143b, 0x1177, 0x13b3, 0x10f5, +0x13b3, 0x10f5, 0x135b, 0x10a4, 0x135b, 0x10a4, 0x12a5, 0xffa, 0x12a5, 0xffa, 0x1135, +0xe9a, 0x1135, 0xe9a, 0x119f, 0xf17, 0x119f, 0xf17, 0x119f, 0xf17, 0x11d1, 0xf61, +0x11d1, 0xf61, 0x1208, 0xfb4, 0x1208, 0xfb4, 0x11e2, 0xfac, 0x11e2, 0xfac, 0x1146, +0xf33, 0x1146, 0xf33, 0x10c8, 0xedb, 0x10c8, 0xedb, 0x10c8, 0xedb, 0xf84, 0xdbf, +0xf84, 0xdbf, 0xe9f, 0xd05, 0xe9f, 0xd05, 0xe15, 0xca8, 0xe15, 0xca8, 0xd13, +0xbd3, 0xd13, 0xbd3, 0xc5f, 0xb4c, 0xc5f, 0xb4c, 0xc7d, 0xb97, 0xc7d, 0xb97, +0xc7d, 0xb97, 0xabc, 0xa03, 0xabc, 0xa03, 0x98d, 0x8ff, 0x98d, 0x8ff, 0x76d, +0x708, 0x76d, 0x708, 0x533, 0x4f4, 0x533, 0x4f4, 0x2ff, 0x2e3, 0x2ff, 0x2e3, +0x23a, 0x23e, 0x23a, 0x23e, 0x23a, 0x23e, 0x1d7, 0x1f9, 0x1d7, 0x1f9, 0xe0, +0x11b, 0xe0, 0x11b, 0x89, 0xdb, 0x89, 0xdb, 0xff84, 0xffe9, 0xff84, 0xffe9, +0xfeba, 0xff2e, 0xfeba, 0xff2e, 0xfeba, 0xff2e, 0xfe0b, 0xfe8c, 0xfe0b, 0xfe8c, 0xfd48, +0xfdd4, 0xfd48, 0xfdd4, 0xfcb5, 0xfd4a, 0xfcb5, 0xfd4a, 0xfbcc, 0xfc68, 0xfbcc, 0xfc68, +0xfad0, 0xfb72, 0xfad0, 0xfb72, 0xfb11, 0xfbb7, 0xfb11, 0xfbb7, 0xfb11, 0xfbb7, 0xfb20, +0xfbc9, 0xfb20, 0xfbc9, 0xfb7d, 0xfc29, 0xfb7d, 0xfc29, 0xfa60, 0xfb0f, 0xfa60, 0xfb0f, +0xfa8c, 0xfb3d, 0xfa8c, 0xfb3d, 0xfaac, 0xfb5f, 0xfaac, 0xfb5f, 0xfa74, 0xfb29, 0xfa74, +0xfb29, 0xfa74, 0xfb29, 0xfb62, 0xfc19, 0xfb62, 0xfc19, 0xfbdb, 0xfc92, 0xfbdb, 0xfc92, +0xfc21, 0xfcd8, 0xfc21, 0xfcd8, 0xfcc4, 0xfd79, 0xfcc4, 0xfd79, 0xfd4c, 0xfdfd, 0xfd4c, +0xfdfd, 0xfd4c, 0xfdfd, 0xfdf9, 0xfea5, 0xfdf9, 0xfea5, 0xff2e, 0xffd0, 0xff2e, 0xffd0, +0x16, 0xac, 0x16, 0xac, 0x1bb, 0x241, 0x1bb, 0x241, 0x291, 0x302, 0x291, +0x302, 0x37e, 0x3d6, 0x37e, 0x3d6, 0x37e, 0x3d6, 0x381, 0x3bc, 0x381, 0x3bc, +0x4f0, 0x508, 0x4f0, 0x508, 0x640, 0x630, 0x640, 0x630, 0x6f0, 0x6b3, 0x6f0, +0x6b3, 0x7de, 0x76f, 0x7de, 0x76f, 0x7de, 0x76f, 0x87f, 0x7d9, 0x87f, 0x7d9, +0x83b, 0x75b, 0x83b, 0x75b, 0x8a8, 0x78a, 0x8a8, 0x78a, 0x983, 0x825, 0x983, +0x825, 0xa3d, 0x89c, 0xa3d, 0x89c, 0xc7c, 0xa97, 0xc7c, 0xa97, 0xc7c, 0xa97, +0xd74, 0xb4b, 0xd74, 0xb4b, 0xef9, 0xc8c, 0xef9, 0xc8c, 0xf6b, 0xcbd, 0xf6b, +0xcbd, 0x106a, 0xd7b, 0x106a, 0xd7b, 0x11ef, 0xec5, 0x11ef, 0xec5, 0x13ad, 0x104b, +0x13ad, 0x104b, 0x13ad, 0x104b, 0x159f, 0x1209, 0x159f, 0x1209, 0x1727, 0x1364, 0x1727, +0x1364, 0x17bd, 0x13d2, 0x17bd, 0x13d2, 0x1946, 0x1539, 0x1946, 0x1539, 0x1ad3, 0x16ab, +0x1ad3, 0x16ab, 0x1ad3, 0x16ab, 0x1b8d, 0x1751, 0x1b8d, 0x1751, 0x1dde, 0x1994, 0x1dde, +0x1994, 0x1ff7, 0x1ba6, 0x1ff7, 0x1ba6, 0x20e0, 0x1c8e, 0x20e0, 0x1c8e, 0x2002, 0x1bb5, +0x2002, 0x1bb5, 0x2007, 0x1bc5, 0x2007, 0x1bc5, 0x2007, 0x1bc5, 0x1f4a, 0x1b16, 0x1f4a, +0x1b16, 0x1da3, 0x1982, 0x1da3, 0x1982, 0x1d33, 0x1928, 0x1d33, 0x1928, 0x1d0a, 0x1917, +0x1d0a, 0x1917, 0x1c3e, 0x1866, 0x1c3e, 0x1866, 0x1cb8, 0x18fc, 0x1cb8, 0x18fc, 0x1cb8, +0x18fc, 0x1ca1, 0x1902, 0x1ca1, 0x1902, 0x1c35, 0x18b3, 0x1c35, 0x18b3, 0x1afe, 0x1799, +0x1afe, 0x1799, 0x1a5c, 0x1713, 0x1a5c, 0x1713, 0x19b7, 0x1689, 0x19b7, 0x1689, 0x19b7, +0x1689, 0x1855, 0x1542, 0x1855, 0x1542, 0x17c7, 0x14ce, 0x17c7, 0x14ce, 0x1664, 0x1383, +0x1664, 0x1383, 0x16a3, 0x13da, 0x16a3, 0x13da, 0x164a, 0x1399, 0x164a, 0x1399, 0x1575, +0x12db, 0x1575, 0x12db, 0x1575, 0x12db, 0x13f9, 0x1176, 0x13f9, 0x1176, 0x131d, 0x10b1, +0x131d, 0x10b1, 0x129b, 0x1047, 0x129b, 0x1047, 0x11b9, 0xf7e, 0x11b9, 0xf7e, 0x10d4, +0xeb4, 0x10d4, 0xeb4, 0xfb9, 0xdb5, 0xfb9, 0xdb5, 0xfb9, 0xdb5, 0xd93, 0xbad, +0xd93, 0xbad, 0xc60, 0xa9b, 0xc60, 0xa9b, 0xc02, 0xa5f, 0xc02, 0xa5f, 0xb34, +0x9b6, 0xb34, 0x9b6, 0xa55, 0x8fd, 0xa55, 0x8fd, 0xa55, 0x8fd, 0x7fb, 0x6cb, +0x7fb, 0x6cb, 0x5e3, 0x4dd, 0x5e3, 0x4dd, 0x365, 0x28a, 0x365, 0x28a, 0xc4, +0x14, 0xc4, 0x14, 0xffbd, 0xff38, 0xffbd, 0xff38, 0xff9f, 0xff45, 0xff9f, 0xff45, +0xff9f, 0xff45, 0xfde8, 0xfdb8, 0xfde8, 0xfdb8, 0xfde1, 0xfdd9, 0xfde1, 0xfdd9, 0xfcd3, +0xfcf2, 0xfcd3, 0xfcf2, 0xfc3a, 0xfc7c, 0xfc3a, 0xfc7c, 0xfc2f, 0xfc90, 0xfc2f, 0xfc90, +0xfbbe, 0xfc3c, 0xfbbe, 0xfc3c, 0xfbbe, 0xfc3c, 0xfc32, 0xfcc8, 0xfc32, 0xfcc8, 0xfb40, +0xfbe9, 0xfb40, 0xfbe9, 0xfa71, 0xfb2a, 0xfa71, 0xfb2a, 0xf94d, 0xfa10, 0xf94d, 0xfa10, +0xf869, 0xf933, 0xf869, 0xf933, 0xf869, 0xf933, 0xf7ef, 0xf8bb, 0xf7ef, 0xf8bb, 0xf7a2, +0xf86b, 0xf7a2, 0xf86b, 0xf6fe, 0xf7c2, 0xf6fe, 0xf7c2, 0xf817, 0xf8d2, 0xf817, 0xf8d2, +0xf87b, 0xf929, 0xf87b, 0xf929, 0xf8da, 0xf97b, 0xf8da, 0xf97b, 0xf8da, 0xf97b, 0xf8c1, +0xf953, 0xf8c1, 0xf953, 0xf8a8, 0xf92a, 0xf8a8, 0xf92a, 0xf8cf, 0xf941, 0xf8cf, 0xf941, +0xf843, 0xf8a6, 0xf843, 0xf8a6, 0xf89a, 0xf8ef, 0xf89a, 0xf8ef, 0xf81c, 0xf865, 0xf81c, +0xf865, 0xf81c, 0xf865, 0xf752, 0xf793, 0xf752, 0xf793, 0xf76f, 0xf7a9, 0xf76f, 0xf7a9, +0xf7bd, 0xf7f4, 0xf7bd, 0xf7f4, 0xf827, 0xf860, 0xf827, 0xf860, 0xf981, 0xf9bf, 0xf981, +0xf9bf, 0xf981, 0xf9bf, 0xfaa2, 0xfae9, 0xfaa2, 0xfae9, 0xfb73, 0xfbc7, 0xfb73, 0xfbc7, +0xfaab, 0xfb10, 0xfaab, 0xfb10, 0xfa4d, 0xfac8, 0xfa4d, 0xfac8, 0xf8da, 0xf96e, 0xf8da, +0xf96e, 0xf81c, 0xf8cc, 0xf81c, 0xf8cc, 0xf81c, 0xf8cc, 0xf755, 0xf826, 0xf755, 0xf826, +0xf5fd, 0xf6f0, 0xf5fd, 0xf6f0, 0xf5eb, 0xf702, 0xf5eb, 0xf702, 0xf5ed, 0xf72b, 0xf5ed, +0xf72b, 0xf5c2, 0xf728, 0xf5c2, 0xf728, 0xf498, 0xf627, 0xf498, 0xf627, 0xf498, 0xf627, +0xf4b6, 0xf66f, 0xf4b6, 0xf66f, 0xf56c, 0xf74f, 0xf56c, 0xf74f, 0xf511, 0xf71e, 0xf511, +0xf71e, 0xf4c0, 0xf6f7, 0xf4c0, 0xf6f7, 0xf54d, 0xf7ac, 0xf54d, 0xf7ac, 0xf54d, 0xf7ac, +0xf423, 0xf6ab, 0xf423, 0xf6ab, 0xf441, 0xf6f0, 0xf441, 0xf6f0, 0xf3f5, 0xf6ca, 0xf3f5, +0xf6ca, 0xf2c2, 0xf5bc, 0xf2c2, 0xf5bc, 0xf1bf, 0xf4dd, 0xf1bf, 0xf4dd, 0xf12b, 0xf46b, +0xf12b, 0xf46b, 0xf12b, 0xf46b, 0xf0d6, 0xf436, 0xf0d6, 0xf436, 0xefc5, 0xf345, 0xefc5, +0xf345, 0xee7e, 0xf21b, 0xee7e, 0xf21b, 0xeda5, 0xf15e, 0xeda5, 0xf15e, 0xeca7, 0xf07b, +0xeca7, 0xf07b, 0xead2, 0xeebe, 0xead2, 0xeebe, 0xead2, 0xeebe, 0xea5a, 0xee5c, 0xea5a, +0xee5c, 0xe930, 0xed46, 0xe930, 0xed46, 0xe935, 0xed5d, 0xe935, 0xed5d, 0xe93d, 0xed74, +0xe93d, 0xed74, 0xe8c9, 0xed0c, 0xe8c9, 0xed0c, 0xe8c9, 0xed0c, 0xe7ce, 0xec1a, 0xe7ce, +0xec1a, 0xe6b3, 0xeb05, 0xe6b3, 0xeb05, 0xe5f6, 0xea4a, 0xe5f6, 0xea4a, 0xe500, 0xe952, +0xe500, 0xe952, 0xe430, 0xe87c, 0xe430, 0xe87c, 0xe48f, 0xe8d1, 0xe48f, 0xe8d1, 0xe48f, +0xe8d1, 0xe466, 0xe899, 0xe466, 0xe899, 0xe488, 0xe8a9, 0xe488, 0xe8a9, 0xe5d9, 0xe9e3, +0xe5d9, 0xe9e3, 0xe696, 0xea84, 0xe696, 0xea84, 0xe7fb, 0xebca, 0xe7fb, 0xebca, 0xe84f, +0xebfa, 0xe84f, 0xebfa, 0xe84f, 0xebfa, 0xe932, 0xecb7, 0xe932, 0xecb7, 0xe92f, 0xec8a, +0xe92f, 0xec8a, 0xe904, 0xec32, 0xe904, 0xec32, 0xe929, 0xec28, 0xe929, 0xec28, 0xe9c1, +0xec91, 0xe9c1, 0xec91, 0xe9c1, 0xec91, 0xeae7, 0xed87, 0xeae7, 0xed87, 0xed21, 0xef91, +0xed21, 0xef91, 0xeeb2, 0xf0f3, 0xeeb2, 0xf0f3, 0xeed1, 0xf0e4, 0xeed1, 0xf0e4, 0xee0b, +0xeff3, 0xee0b, 0xeff3, 0xed1a, 0xeeda, 0xed1a, 0xeeda, 0xed1a, 0xeeda, 0xed12, 0xeeae, +0xed12, 0xeeae, 0xecc2, 0xee3e, 0xecc2, 0xee3e, 0xed80, 0xeee0, 0xed80, 0xeee0, 0xed85, +0xeece, 0xed85, 0xeece, 0xedf7, 0xef2f, 0xedf7, 0xef2f, 0xedf7, 0xef2f, 0xedaf, 0xeedb, +0xedaf, 0xeedb, 0xed26, 0xee4c, 0xed26, 0xee4c, 0xed6d, 0xee91, 0xed6d, 0xee91, 0xee6b, +0xef93, 0xee6b, 0xef93, 0xef3e, 0xf06e, 0xef3e, 0xf06e, 0xefb2, 0xf0ee, 0xefb2, 0xf0ee, +0xefb2, 0xf0ee, 0xf03e, 0xf18a, 0xf03e, 0xf18a, 0xf12d, 0xf28a, 0xf12d, 0xf28a, 0xf0b0, +0xf223, 0xf0b0, 0xf223, 0xf051, 0xf1d9, 0xf051, 0xf1d9, 0xef93, 0xf130, 0xef93, 0xf130, +0xed6a, 0xef1c, 0xed6a, 0xef1c, 0xed6a, 0xef1c, 0xeda0, 0xef65, 0xeda0, 0xef65, 0xee09, +0xefdf, 0xee09, 0xefdf, 0xedeb, 0xefd0, 0xedeb, 0xefd0, 0xed0f, 0xeefe, 0xed0f, 0xeefe, +0xed4a, 0xef40, 0xed4a, 0xef40, 0xed4a, 0xef40, 0xed35, 0xef2c, 0xed35, 0xef2c, 0xed3b, +0xef2d, 0xed3b, 0xef2d, 0xed77, 0xef60, 0xed77, 0xef60, 0xeeb0, 0xf089, 0xeeb0, 0xf089, +0xef8d, 0xf151, 0xef8d, 0xf151, 0xf09f, 0xf248, 0xf09f, 0xf248, 0xf09f, 0xf248, 0xf1f8, +0xf381, 0xf1f8, 0xf381, 0xf1e6, 0xf34a, 0xf1e6, 0xf34a, 0xf300, 0xf43a, 0xf300, 0xf43a, +0xf41a, 0xf526, 0xf41a, 0xf526, 0xf5e0, 0xf6bb, 0xf5e0, 0xf6bb, 0xf759, 0xf800, 0xf759, +0xf800, 0xf759, 0xf800, 0xf8d9, 0xf949, 0xf8d9, 0xf949, 0xf9ff, 0xfa38, 0xf9ff, 0xfa38, +0xf9cd, 0xf9ce, 0xf9cd, 0xf9ce, 0xfa0b, 0xf9d5, 0xfa0b, 0xf9d5, 0xfb48, 0xfadb, 0xfb48, +0xfadb, 0xfb48, 0xfadb, 0xfbc5, 0xfb22, 0xfbc5, 0xfb22, 0xfe79, 0xfda3, 0xfe79, 0xfda3, +0x114, 0xd, 0x114, 0xd, 0x2bd, 0x188, 0x2bd, 0x188, 0x3ca, 0x26b, 0x3ca, +0x26b, 0x491, 0x30a, 0x491, 0x30a, 0x491, 0x30a, 0x61e, 0x474, 0x61e, 0x474, +0x731, 0x567, 0x731, 0x567, 0x973, 0x78d, 0x973, 0x78d, 0xb78, 0x97a, 0xb78, +0x97a, 0xca6, 0xa93, 0xca6, 0xa93, 0xd79, 0xb55, 0xd79, 0xb55, 0xd79, 0xb55, +0xf8d, 0xd5b, 0xf8d, 0xd5b, 0x1175, 0xf37, 0x1175, 0xf37, 0x1346, 0x10ff, 0x1346, +0x10ff, 0x144d, 0x11ff, 0x144d, 0x11ff, 0x15a6, 0x1353, 0x15a6, 0x1353, 0x15a6, 0x1353, +0x151f, 0x12c8, 0x151f, 0x12c8, 0x13f8, 0x11a0, 0x13f8, 0x11a0, 0x1345, 0x10ed, 0x1345, +0x10ed, 0x121b, 0xfc3, 0x121b, 0xfc3, 0x1234, 0xfdd, 0x1234, 0xfdd, 0x120c, 0xfb7, +0x120c, 0xfb7, 0x120c, 0xfb7, 0x1293, 0x1041, 0x1293, 0x1041, 0x12b4, 0x1065, 0x12b4, +0x1065, 0x12e9, 0x109f, 0x12e9, 0x109f, 0x13d4, 0x118f, 0x13d4, 0x118f, 0x14f4, 0x12b5, +0x14f4, 0x12b5, 0x1650, 0x1419, 0x1650, 0x1419, 0x1650, 0x1419, 0x17a7, 0x1578, 0x17a7, +0x1578, 0x16d7, 0x14b4, 0x16d7, 0x14b4, 0x1694, 0x147d, 0x1694, 0x147d, 0x1565, 0x135c, +0x1565, 0x135c, 0x1498, 0x129f, 0x1498, 0x129f, 0x1498, 0x129f, 0x1537, 0x1351, 0x1537, +0x1351, 0x159e, 0x13cd, 0x159e, 0x13cd, 0x154e, 0x1394, 0x154e, 0x1394, 0x143f, 0x129e, +0x143f, 0x129e, 0x1472, 0x12ec, 0x1472, 0x12ec, 0x13f0, 0x1287, 0x13f0, 0x1287, 0x13f0, +0x1287, 0x1351, 0x1208, 0x1351, 0x1208, 0x1295, 0x116d, 0x1295, 0x116d, 0x11ae, 0x10a8, +0x11ae, 0x10a8, 0x1081, 0xf9e, 0x1081, 0xf9e, 0x1090, 0xfd2, 0x1090, 0xfd2, 0xf90, +0xef6, 0xf90, 0xef6, 0xf90, 0xef6, 0xdaf, 0xd3a, 0xdaf, 0xd3a, 0xb61, 0xb10, +0xb61, 0xb10, 0x93f, 0x911, 0x93f, 0x911, 0x7c2, 0x7b6, 0x7c2, 0x7b6, 0x61f, +0x634, 0x61f, 0x634, 0x61f, 0x634, 0x495, 0x4c9, 0x495, 0x4c9, 0x31e, 0x36d, +0x31e, 0x36d, 0x1af, 0x218, 0x1af, 0x218, 0xfe, 0x17e, 0xfe, 0x17e, 0xf, +0xa2, 0xf, 0xa2, 0xfd6e, 0xfe12, 0xfd6e, 0xfe12, 0xfd6e, 0xfe12, 0xfcc1, 0xfd71, +0xfcc1, 0xfd71, 0xfc3d, 0xfcf7, 0xfc3d, 0xfcf7, 0xfb7b, 0xfc3b, 0xfb7b, 0xfc3b, 0xfa9f, +0xfb61, 0xfa9f, 0xfb61, 0xfa10, 0xfad2, 0xfa10, 0xfad2, 0xf8ce, 0xf98c, 0xf8ce, 0xf98c, +0xf8ce, 0xf98c, 0xf7c3, 0xf87b, 0xf7c3, 0xf87b, 0xf71f, 0xf7cd, 0xf71f, 0xf7cd, 0xf62a, +0xf6cb, 0xf62a, 0xf6cb, 0xf598, 0xf62c, 0xf598, 0xf62c, 0xf66b, 0xf6ee, 0xf66b, 0xf6ee, +0xf66b, 0xf6ee, 0xf7b8, 0xf829, 0xf7b8, 0xf829, 0xf7bf, 0xf81d, 0xf7bf, 0xf81d, 0xf74e, +0xf797, 0xf74e, 0xf797, 0xf757, 0xf78a, 0xf757, 0xf78a, 0xf8d6, 0xf8f3, 0xf8d6, 0xf8f3, +0xf9ca, 0xf9cf, 0xf9ca, 0xf9cf, 0xf9ca, 0xf9cf, 0xfba1, 0xfb8e, 0xfba1, 0xfb8e, 0xfcdb, +0xfcb1, 0xfcdb, 0xfcb1, 0xfdcd, 0xfd8a, 0xfdcd, 0xfd8a, 0xfed6, 0xfe7b, 0xfed6, 0xfe7b, +0x74, 0x1, 0x74, 0x1, 0x1d6, 0x14a, 0x1d6, 0x14a, 0x1d6, 0x14a, 0x315, +0x270, 0x315, 0x270, 0x499, 0x3db, 0x499, 0x3db, 0x5c3, 0x4ec, 0x5c3, 0x4ec, +0x625, 0x535, 0x625, 0x535, 0x6be, 0x5b4, 0x6be, 0x5b4, 0x6be, 0x5b4, 0x730, +0x60b, 0x730, 0x60b, 0x62e, 0x4ee, 0x62e, 0x4ee, 0x702, 0x5a6, 0x702, 0x5a6, +0x7af, 0x637, 0x7af, 0x637, 0x937, 0x7a2, 0x937, 0x7a2, 0xa67, 0x8b4, 0xa67, +0x8b4, 0xa67, 0x8b4, 0xb6f, 0x99e, 0xb6f, 0x99e, 0xbf6, 0xa06, 0xbf6, 0xa06, +0xc49, 0xa39, 0xc49, 0xa39, 0xe06, 0xbd7, 0xe06, 0xbd7, 0xfe5, 0xd97, 0xfe5, +0xd97, 0x112a, 0xebd, 0x112a, 0xebd, 0x112a, 0xebd, 0x12d4, 0x1047, 0x12d4, 0x1047, +0x1441, 0x1197, 0x1441, 0x1197, 0x14f0, 0x122a, 0x14f0, 0x122a, 0x169b, 0x13b9, 0x169b, +0x13b9, 0x1762, 0x1467, 0x1762, 0x1467, 0x1762, 0x1467, 0x18b3, 0x15a0, 0x18b3, 0x15a0, +0x1ab4, 0x178c, 0x1ab4, 0x178c, 0x1bef, 0x18b5, 0x1bef, 0x18b5, 0x1d34, 0x19eb, 0x1d34, +0x19eb, 0x1e03, 0x1aae, 0x1e03, 0x1aae, 0x1d0f, 0x19b2, 0x1d0f, 0x19b2, 0x1d0f, 0x19b2, +0x1c37, 0x18d5, 0x1c37, 0x18d5, 0x1aaa, 0x1747, 0x1aaa, 0x1747, 0x1a72, 0x1711, 0x1a72, +0x1711, 0x19c3, 0x1668, 0x19c3, 0x1668, 0x1858, 0x1507, 0x1858, 0x1507, 0x1858, 0x1507, +0x18c4, 0x1580, 0x18c4, 0x1580, 0x1932, 0x15fe, 0x1932, 0x15fe, 0x193d, 0x161c, 0x193d, +0x161c, 0x1871, 0x1566, 0x1871, 0x1566, 0x17a4, 0x14b1, 0x17a4, 0x14b1, 0x15ea, 0x1311, +0x15ea, 0x1311, 0x15ea, 0x1311, 0x14ef, 0x1232, 0x14ef, 0x1232, 0x14d6, 0x1236, 0x14d6, +0x1236, 0x139d, 0x111a, 0x139d, 0x111a, 0x1218, 0xfb4, 0x1218, 0xfb4, 0x11cb, 0xf85, +0x11cb, 0xf85, 0x10e1, 0xeb9, 0x10e1, 0xeb9, 0x10e1, 0xeb9, 0x103e, 0xe34, 0x103e, +0xe34, 0xf2a, 0xd3c, 0xf2a, 0xd3c, 0xf1e, 0xd4b, 0xf1e, 0xd4b, 0xf78, 0xdc0, +0xf78, 0xdc0, 0xe93, 0xcf4, 0xe93, 0xcf4, 0xe93, 0xcf4, 0xd4b, 0xbc4, 0xd4b, +0xbc4, 0xb88, 0xa17, 0xb88, 0xa17, 0xbad, 0xa51, 0xbad, 0xa51, 0xbf5, 0xaad, +0xbf5, 0xaad, 0xc02, 0xacc, 0xc02, 0xacc, 0xb2f, 0xa0a, 0xb2f, 0xa0a, 0xb2f, +0xa0a, 0x8de, 0x7cb, 0x8de, 0x7cb, 0x6c8, 0x5c6, 0x6c8, 0x5c6, 0x53c, 0x44a, +0x53c, 0x44a, 0x314, 0x232, 0x314, 0x232, 0x367, 0x296, 0x367, 0x296, 0x28f, +0x1d0, 0x28f, 0x1d0, 0x28f, 0x1d0, 0x1a3, 0xf6, 0x1a3, 0xf6, 0x188, 0xee, +0x188, 0xee, 0xffdf, 0xff59, 0xffdf, 0xff59, 0xffed, 0xff7d, 0xffed, 0xff7d, 0xffcf, +0xff77, 0xffcf, 0xff77, 0xffcf, 0xff77, 0xffe4, 0xffa4, 0xffe4, 0xffa4, 0xff08, 0xfee1, +0xff08, 0xfee1, 0xfde1, 0xfdd5, 0xfde1, 0xfdd5, 0xfdbc, 0xfdcc, 0xfdbc, 0xfdcc, 0xfd31, +0xfd5d, 0xfd31, 0xfd5d, 0xfbe6, 0xfc30, 0xfbe6, 0xfc30, 0xfbe6, 0xfc30, 0xfc03, 0xfc6a, +0xfc03, 0xfc6a, 0xfc69, 0xfcee, 0xfc69, 0xfcee, 0xfc63, 0xfd06, 0xfc63, 0xfd06, 0xfc5b, +0xfd1a, 0xfc5b, 0xfd1a, 0xfbc8, 0xfca3, 0xfbc8, 0xfca3, 0xfb47, 0xfc3e, 0xfb47, 0xfc3e, +0xfb47, 0xfc3e, 0xfb89, 0xfc99, 0xfb89, 0xfc99, 0xfc57, 0xfd7e, 0xfc57, 0xfd7e, 0xfd18, +0xfe55, 0xfd18, 0xfe55, 0xfce9, 0xfe3a, 0xfce9, 0xfe3a, 0xfbc0, 0xfd22, 0xfbc0, 0xfd22, +0xfbc0, 0xfd22, 0xfa79, 0xfbea, 0xfa79, 0xfbea, 0xf929, 0xfaa7, 0xf929, 0xfaa7, 0xf977, +0xfafe, 0xf977, 0xfafe, 0xf997, 0xfb25, 0xf997, 0xfb25, 0xf9d8, 0xfb6c, 0xf9d8, 0xfb6c, +0xfa99, 0xfc30, 0xfa99, 0xfc30, 0xfa99, 0xfc30, 0xfb90, 0xfd27, 0xfb90, 0xfd27, 0xfc0a, +0xfda1, 0xfc0a, 0xfda1, 0xfbdd, 0xfd72, 0xfbdd, 0xfd72, 0xfb05, 0xfc97, 0xfb05, 0xfc97, +0xf957, 0xfae6, 0xf957, 0xfae6, 0xf813, 0xf99d, 0xf813, 0xf99d, 0xf813, 0xf99d, 0xf79f, +0xf925, 0xf79f, 0xf925, 0xf633, 0xf7b4, 0xf633, 0xf7b4, 0xf4b0, 0xf62f, 0xf4b0, 0xf62f, +0xf47c, 0xf5f8, 0xf47c, 0xf5f8, 0xf445, 0xf5c0, 0xf445, 0xf5c0, 0xf445, 0xf5c0, 0xf435, +0xf5af, 0xf435, 0xf5af, 0xf3eb, 0xf567, 0xf3eb, 0xf567, 0xf4ac, 0xf62b, 0xf4ac, 0xf62b, +0xf523, 0xf6a7, 0xf523, 0xf6a7, 0xf618, 0xf7a3, 0xf618, 0xf7a3, 0xf60b, 0xf79e, 0xf60b, +0xf79e, 0xf60b, 0xf79e, 0xf587, 0xf725, 0xf587, 0xf725, 0xf5aa, 0xf753, 0xf5aa, 0xf753, +0xf4fd, 0xf6b3, 0xf4fd, 0xf6b3, 0xf520, 0xf6e5, 0xf520, 0xf6e5, 0xf56d, 0xf740, 0xf56d, +0xf740, 0xf4ad, 0xf691, 0xf4ad, 0xf691, 0xf4ad, 0xf691, 0xf491, 0xf685, 0xf491, 0xf685, +0xf3f6, 0xf5f9, 0xf3f6, 0xf5f9, 0xf1d3, 0xf3e7, 0xf1d3, 0xf3e7, 0xf121, 0xf345, 0xf121, +0xf345, 0xefd1, 0xf203, 0xefd1, 0xf203, 0xefd1, 0xf203, 0xef4f, 0xf18f, 0xef4f, 0xf18f, +0xeeb5, 0xf101, 0xeeb5, 0xf101, 0xedde, 0xf034, 0xedde, 0xf034, 0xedb2, 0xf011, 0xedb2, +0xf011, 0xed0d, 0xef73, 0xed0d, 0xef73, 0xec4b, 0xeeb6, 0xec4b, 0xeeb6, 0xec4b, 0xeeb6, +0xeb05, 0xed72, 0xeb05, 0xed72, 0xea2e, 0xec9b, 0xea2e, 0xec9b, 0xe9fa, 0xec65, 0xe9fa, +0xec65, 0xe9a4, 0xec0b, 0xe9a4, 0xec0b, 0xe8fb, 0xeb5c, 0xe8fb, 0xeb5c, 0xe900, 0xeb58, +0xe900, 0xeb58, 0xe900, 0xeb58, 0xe939, 0xeb87, 0xe939, 0xeb87, 0xea69, 0xecac, 0xea69, +0xecac, 0xeb39, 0xed6e, 0xeb39, 0xed6e, 0xeac5, 0xeceb, 0xeac5, 0xeceb, 0xeafe, 0xed14, +0xeafe, 0xed14, 0xeafe, 0xed14, 0xebaa, 0xedaf, 0xebaa, 0xedaf, 0xec54, 0xee47, 0xec54, +0xee47, 0xec53, 0xee34, 0xec53, 0xee34, 0xeac2, 0xec90, 0xeac2, 0xec90, 0xeb2f, 0xecec, +0xeb2f, 0xecec, 0xec36, 0xede0, 0xec36, 0xede0, 0xec36, 0xede0, 0xed66, 0xeeff, 0xed66, +0xeeff, 0xefbd, 0xf146, 0xefbd, 0xf146, 0xef94, 0xf10e, 0xef94, 0xf10e, 0xeea1, 0xf00d, +0xeea1, 0xf00d, 0xedf5, 0xef54, 0xedf5, 0xef54, 0xedf6, 0xef4a, 0xedf6, 0xef4a, 0xedf6, +0xef4a, 0xedeb, 0xef36, 0xedeb, 0xef36, 0xed09, 0xee4d, 0xed09, 0xee4d, 0xecd7, 0xee17, +0xecd7, 0xee17, 0xec39, 0xed76, 0xec39, 0xed76, 0xeb57, 0xec94, 0xeb57, 0xec94, 0xeb57, +0xec94, 0xeba6, 0xece6, 0xeba6, 0xece6, 0xeae8, 0xec2d, 0xeae8, 0xec2d, 0xea70, 0xebbc, +0xea70, 0xebbc, 0xeb1a, 0xec70, 0xeb1a, 0xec70, 0xec95, 0xedf6, 0xec95, 0xedf6, 0xed31, +0xeea0, 0xed31, 0xeea0, 0xed31, 0xeea0, 0xed10, 0xee8e, 0xed10, 0xee8e, 0xedb4, 0xef43, +0xedb4, 0xef43, 0xed79, 0xef1a, 0xed79, 0xef1a, 0xedf6, 0xefa9, 0xedf6, 0xefa9, 0xedcf, +0xef94, 0xedcf, 0xef94, 0xed62, 0xef3a, 0xed62, 0xef3a, 0xed62, 0xef3a, 0xed9e, 0xef87, +0xed9e, 0xef87, 0xed7f, 0xef78, 0xed7f, 0xef78, 0xedc5, 0xefcc, 0xedc5, 0xefcc, 0xedc1, +0xefd4, 0xedc1, 0xefd4, 0xed02, 0xef1d, 0xed02, 0xef1d, 0xed02, 0xef1d, 0xee14, 0xf035, +0xee14, 0xf035, 0xee33, 0xf055, 0xee33, 0xf055, 0xeea5, 0xf0c4, 0xeea5, 0xf0c4, 0xf0ae, +0xf2c6, 0xf0ae, 0xf2c6, 0xf133, 0xf33e, 0xf133, 0xf33e, 0xf1fe, 0xf3f8, 0xf1fe, 0xf3f8, +0xf1fe, 0xf3f8, 0xf169, 0xf34b, 0xf169, 0xf34b, 0xf1ab, 0xf371, 0xf1ab, 0xf371, 0xf257, +0xf3fc, 0xf257, 0xf3fc, 0xf2c1, 0xf440, 0xf2c1, 0xf440, 0xf4a3, 0xf5f7, 0xf4a3, 0xf5f7, +0xf4a3, 0xf5f7, 0xf578, 0xf69e, 0xf578, 0xf69e, 0xf5c3, 0xf6b6, 0xf5c3, 0xf6b6, 0xf6d3, +0xf791, 0xf6d3, 0xf791, 0xf787, 0xf80e, 0xf787, 0xf80e, 0xf8ac, 0xf8fb, 0xf8ac, 0xf8fb, +0xfa4f, 0xfa64, 0xfa4f, 0xfa64, 0xfa4f, 0xfa64, 0xfc17, 0xfbf3, 0xfc17, 0xfbf3, 0xfe2c, +0xfdd0, 0xfe2c, 0xfdd0, 0xfe55, 0xfdc4, 0xfe55, 0xfdc4, 0xfe87, 0xfdc2, 0xfe87, 0xfdc2, +0xb, 0xff16, 0xb, 0xff16, 0x166, 0x44, 0x166, 0x44, 0x166, 0x44, 0x407, +0x2be, 0x407, 0x2be, 0x64a, 0x4dd, 0x64a, 0x4dd, 0x6e3, 0x559, 0x6e3, 0x559, +0x84e, 0x6ac, 0x84e, 0x6ac, 0x95f, 0x7aa, 0x95f, 0x7aa, 0x95f, 0x7aa, 0xb22, +0x960, 0xb22, 0x960, 0xd49, 0xb80, 0xd49, 0xb80, 0xe5a, 0xc8e, 0xe5a, 0xc8e, +0xf60, 0xd96, 0xf60, 0xd96, 0x1107, 0xf43, 0x1107, 0xf43, 0x1269, 0x10af, 0x1269, +0x10af, 0x1269, 0x10af, 0x1188, 0xfda, 0x1188, 0xfda, 0x103e, 0xe9f, 0x103e, 0xe9f, +0xfed, 0xe5f, 0xfed, 0xe5f, 0xfc0, 0xe43, 0xfc0, 0xe43, 0xfcb, 0xe60, 0xfcb, +0xe60, 0xfd4, 0xe7b, 0xfd4, 0xe7b, 0xfd4, 0xe7b, 0xec5, 0xd7c, 0xec5, 0xd7c, +0xd8f, 0xc55, 0xd8f, 0xc55, 0xdfa, 0xcce, 0xdfa, 0xcce, 0xfd2, 0xeb1, 0xfd2, +0xeb1, 0x106c, 0xf54, 0x106c, 0xf54, 0x106c, 0xf54, 0x1109, 0xff7, 0x1109, 0xff7, +0x1197, 0x108a, 0x1197, 0x108a, 0x112c, 0x1021, 0x112c, 0x1021, 0x10c7, 0xfbd, 0x10c7, +0xfbd, 0x106d, 0xf62, 0x106d, 0xf62, 0x110d, 0x1001, 0x110d, 0x1001, 0x110d, 0x1001, +0x11fd, 0x10ef, 0x11fd, 0x10ef, 0x12ed, 0x11dc, 0x12ed, 0x11dc, 0x13dd, 0x12cb, 0x13dd, +0x12cb, 0x1400, 0x12ee, 0x1400, 0x12ee, 0x1388, 0x1277, 0x1388, 0x1277, 0x1354, 0x1247, +0x1354, 0x1247, 0x1354, 0x1247, 0x1192, 0x108b, 0x1192, 0x108b, 0x10a9, 0xfab, 0x10a9, +0xfab, 0x10d1, 0xfdf, 0x10d1, 0xfdf, 0x10a0, 0xfbc, 0x10a0, 0xfbc, 0x10a7, 0xfd6, +0x10a7, 0xfd6, 0x10a7, 0xfd6, 0xfb9, 0xefe, 0xfb9, 0xefe, 0xe2c, 0xd89, 0xe2c, +0xd89, 0xc2b, 0xba5, 0xc2b, 0xba5, 0xaa9, 0xa40, 0xaa9, 0xa40, 0x8f7, 0x8ae, +0x8f7, 0x8ae, 0x6ba, 0x692, 0x6ba, 0x692, 0x6ba, 0x692, 0x5c1, 0x5bb, 0x5c1, +0x5bb, 0x608, 0x624, 0x608, 0x624, 0x4ce, 0x50a, 0x4ce, 0x50a, 0x36e, 0x3cb, +0x36e, 0x3cb, 0x27c, 0x2f7, 0x27c, 0x2f7, 0x138, 0x1cf, 0x138, 0x1cf, 0x138, +0x1cf, 0x64, 0x113, 0x64, 0x113, 0xfef3, 0xffb8, 0xfef3, 0xffb8, 0xfe0f, 0xfee6, +0xfe0f, 0xfee6, 0xfd65, 0xfe4a, 0xfd65, 0xfe4a, 0xfbd0, 0xfcbf, 0xfbd0, 0xfcbf, 0xfbd0, +0xfcbf, 0xfb4f, 0xfc44, 0xfb4f, 0xfc44, 0xfa4c, 0xfb42, 0xfa4c, 0xfb42, 0xf903, 0xf9f7, +0xf903, 0xf9f7, 0xf93b, 0xfa29, 0xf93b, 0xfa29, 0xf92e, 0xfa13, 0xf92e, 0xfa13, 0xf983, +0xfa5a, 0xf983, 0xfa5a, 0xf983, 0xfa5a, 0xf8d9, 0xf9a1, 0xf8d9, 0xf9a1, 0xf7c1, 0xf877, +0xf7c1, 0xf877, 0xf725, 0xf7c8, 0xf725, 0xf7c8, 0xf76f, 0xf7fc, 0xf76f, 0xf7fc, 0xf995, +0xfa0c, 0xf995, 0xfa0c, 0xfad4, 0xfb35, 0xfad4, 0xfb35, 0xfad4, 0xfb35, 0xfb94, 0xfbdd, +0xfb94, 0xfbdd, 0xfca9, 0xfcdb, 0xfca9, 0xfcdb, 0xfd4c, 0xfd67, 0xfd4c, 0xfd67, 0xff2b, +0xff2f, 0xff2b, 0xff2f, 0x95, 0x82, 0x95, 0x82, 0x95, 0x82, 0x105, 0xdc, +0x105, 0xdc, 0x1e8, 0x1a9, 0x1e8, 0x1a9, 0x35e, 0x309, 0x35e, 0x309, 0x513, +0x4a7, 0x513, 0x4a7, 0x480, 0x3fe, 0x480, 0x3fe, 0x40a, 0x371, 0x40a, 0x371, +0x40a, 0x371, 0x4e2, 0x431, 0x4e2, 0x431, 0x59e, 0x4d4, 0x59e, 0x4d4, 0x6d5, +0x5f2, 0x6d5, 0x5f2, 0x86a, 0x76b, 0x86a, 0x76b, 0x941, 0x825, 0x941, 0x825, +0x9f3, 0x8b8, 0x9f3, 0x8b8, 0x9f3, 0x8b8, 0xb1f, 0x9c5, 0xb1f, 0x9c5, 0xcb7, +0xb3b, 0xcb7, 0xb3b, 0xdd7, 0xc39, 0xdd7, 0xc39, 0xf25, 0xd63, 0xf25, 0xd63, +0x10ba, 0xed4, 0x10ba, 0xed4, 0x10ba, 0xed4, 0x1113, 0xf08, 0x1113, 0xf08, 0x12a5, +0x1076, 0x12a5, 0x1076, 0x1450, 0x11fd, 0x1450, 0x11fd, 0x1602, 0x138d, 0x1602, 0x138d, +0x17df, 0x1549, 0x17df, 0x1549, 0x190f, 0x165a, 0x190f, 0x165a, 0x190f, 0x165a, 0x1ab3, +0x17e3, 0x1ab3, 0x17e3, 0x1c0f, 0x1927, 0x1c0f, 0x1927, 0x1d58, 0x1a5c, 0x1d58, 0x1a5c, +0x1da1, 0x1a93, 0x1da1, 0x1a93, 0x1cbb, 0x19a1, 0x1cbb, 0x19a1, 0x1d4c, 0x1a2b, 0x1d4c, +0x1a2b, 0x1d4c, 0x1a2b, 0x1d45, 0x1a20, 0x1d45, 0x1a20, 0x1c6d, 0x194a, 0x1c6d, 0x194a, +0x1ce1, 0x19c3, 0x1ce1, 0x19c3, 0x1c9d, 0x1989, 0x1c9d, 0x1989, 0x1cde, 0x19d8, 0x1cde, +0x19d8, 0x1cde, 0x19d8, 0x1d18, 0x1a23, 0x1d18, 0x1a23, 0x1c39, 0x1957, 0x1c39, 0x1957, +0x1b5b, 0x1890, 0x1b5b, 0x1890, 0x1a45, 0x1793, 0x1a45, 0x1793, 0x1a09, 0x1770, 0x1a09, +0x1770, 0x19c6, 0x1748, 0x19c6, 0x1748, 0x19c6, 0x1748, 0x17ea, 0x1587, 0x17ea, 0x1587, +0x16b8, 0x146f, 0x16b8, 0x146f, 0x15d4, 0x13a4, 0x15d4, 0x13a4, 0x1472, 0x125a, 0x1472, +0x125a, 0x136c, 0x116b, 0x136c, 0x116b, 0x1216, 0x102a, 0x1216, 0x102a, 0x1216, 0x102a, +0x10fa, 0xf21, 0x10fa, 0xf21, 0xfe3, 0xe1b, 0xfe3, 0xe1b, 0xf77, 0xdbe, 0xf77, +0xdbe, 0xf49, 0xd9d, 0xf49, 0xd9d, 0xdbf, 0xc1f, 0xdbf, 0xc1f, 0xdbf, 0xc1f, +0xccf, 0xb39, 0xccf, 0xb39, 0xc8a, 0xafe, 0xc8a, 0xafe, 0xc4d, 0xaca, 0xc4d, +0xaca, 0xc59, 0xade, 0xc59, 0xade, 0xae8, 0x976, 0xae8, 0x976, 0x89f, 0x737, +0x89f, 0x737, 0x89f, 0x737, 0x6ad, 0x54f, 0x6ad, 0x54f, 0x54e, 0x3fc, 0x54e, +0x3fc, 0x449, 0x305, 0x449, 0x305, 0x369, 0x235, 0x369, 0x235, 0x247, 0x125, +0x247, 0x125, 0x247, 0x125, 0x1a3, 0x96, 0x1a3, 0x96, 0x17d, 0x87, 0x17d, +0x87, 0xa7, 0xffc9, 0xa7, 0xffc9, 0xffe8, 0xff25, 0xffe8, 0xff25, 0xff44, 0xfe9f, +0xff44, 0xfe9f, 0xff4f, 0xfec9, 0xff4f, 0xfec9, 0xff4f, 0xfec9, 0xffa5, 0xff3e, 0xffa5, +0xff3e, 0xff47, 0xff02, 0xff47, 0xff02, 0xfe28, 0xfe05, 0xfe28, 0xfe05, 0xfdc7, 0xfdc6, +0xfdc7, 0xfdc6, 0xfd43, 0xfd64, 0xfd43, 0xfd64, 0xfc9e, 0xfce2, 0xfc9e, 0xfce2, 0xfc9e, +0xfce2, 0xfd7e, 0xfde2, 0xfd7e, 0xfde2, 0xfdc4, 0xfe48, 0xfdc4, 0xfe48, 0xfdd0, 0xfe72, +0xfdd0, 0xfe72, 0xfd67, 0xfe25, 0xfd67, 0xfe25, 0xfc4e, 0xfd27, 0xfc4e, 0xfd27, 0xfc4e, +0xfd27, 0xfc1d, 0xfd0f, 0xfc1d, 0xfd0f, 0xfc65, 0xfd6e, 0xfc65, 0xfd6e, 0xfd44, 0xfe61, +0xfd44, 0xfe61, 0xfd7a, 0xfea8, 0xfd7a, 0xfea8, 0xfc5a, 0xfd99, 0xfc5a, 0xfd99, 0xfc37, +0xfd84, 0xfc37, 0xfd84, 0xfc37, 0xfd84, 0xfb94, 0xfced, 0xfb94, 0xfced, 0xfa70, 0xfbd4, +0xfa70, 0xfbd4, 0xfaaa, 0xfc17, 0xfaaa, 0xfc17, 0xfacc, 0xfc40, 0xfacc, 0xfc40, 0xfbc6, +0xfd42, 0xfbc6, 0xfd42, 0xfce7, 0xfe68, 0xfce7, 0xfe68, 0xfce7, 0xfe68, 0xfc87, 0xfe0d, +0xfc87, 0xfe0d, 0xfb83, 0xfd0e, 0xfb83, 0xfd0e, 0xfa93, 0xfc22, 0xfa93, 0xfc22, 0xfa65, +0xfbf8, 0xfa65, 0xfbf8, 0xf9a2, 0xfb38, 0xf9a2, 0xfb38, 0xf9a2, 0xfb38, 0xf874, 0xfa0e, +0xf874, 0xfa0e, 0xf826, 0xf9c3, 0xf826, 0xf9c3, 0xf6a3, 0xf842, 0xf6a3, 0xf842, 0xf4cf, +0xf670, 0xf4cf, 0xf670, 0xf410, 0xf5b4, 0xf410, 0xf5b4, 0xf28d, 0xf433, 0xf28d, 0xf433, +0xf28d, 0xf433, 0xf12f, 0xf2d7, 0xf12f, 0xf2d7, 0xf0fd, 0xf2a7, 0xf0fd, 0xf2a7, 0xf217, +0xf3c2, 0xf217, 0xf3c2, 0xf2e8, 0xf493, 0xf2e8, 0xf493, 0xf29c, 0xf448, 0xf29c, 0xf448, +0xf2c3, 0xf470, 0xf2c3, 0xf470, 0xf2c3, 0xf470, 0xf23d, 0xf3eb, 0xf23d, 0xf3eb, 0xf1ba, +0xf368, 0xf1ba, 0xf368, 0xf206, 0xf3b5, 0xf206, 0xf3b5, 0xf1da, 0xf38b, 0xf1da, 0xf38b, +0xf103, 0xf2b6, 0xf103, 0xf2b6, 0xf103, 0xf2b6, 0xf05e, 0xf214, 0xf05e, 0xf214, 0xf00f, +0xf1c9, 0xf00f, 0xf1c9, 0xeecb, 0xf089, 0xeecb, 0xf089, 0xed26, 0xeeeb, 0xed26, 0xeeeb, +0xebf3, 0xedc0, 0xebf3, 0xedc0, 0xebc8, 0xed9e, 0xebc8, 0xed9e, 0xebc8, 0xed9e, 0xec30, +0xee11, 0xec30, 0xee11, 0xebf6, 0xede4, 0xebf6, 0xede4, 0xeb23, 0xed1f, 0xeb23, 0xed1f, +0xeab3, 0xecbe, 0xeab3, 0xecbe, 0xea1c, 0xec38, 0xea1c, 0xec38, 0xea33, 0xec62, 0xea33, +0xec62, 0xea33, 0xec62, 0xead3, 0xed15, 0xead3, 0xed15, 0xe9ed, 0xec42, 0xe9ed, 0xec42, +0xe9b2, 0xec1a, 0xe9b2, 0xec1a, 0xe8aa, 0xeb24, 0xe8aa, 0xeb24, 0xe80c, 0xea99, 0xe80c, +0xea99, 0xe80c, 0xea99, 0xe8b6, 0xeb54, 0xe8b6, 0xeb54, 0xe877, 0xeb24, 0xe877, 0xeb24, +0xe937, 0xebf0, 0xe937, 0xebf0, 0xea08, 0xeccb, 0xea08, 0xeccb, 0xea51, 0xed1b, 0xea51, +0xed1b, 0xea96, 0xed64, 0xea96, 0xed64, 0xea96, 0xed64, 0xeaa7, 0xed75, 0xeaa7, 0xed75, +0xea40, 0xed0b, 0xea40, 0xed0b, 0xe931, 0xebf3, 0xe931, 0xebf3, 0xe8e9, 0xeba0, 0xe8e9, +0xeba0, 0xe9e5, 0xec8d, 0xe9e5, 0xec8d, 0xeacc, 0xed61, 0xeacc, 0xed61, 0xeacc, 0xed61, +0xec0c, 0xee8b, 0xec0c, 0xee8b, 0xeccf, 0xef35, 0xeccf, 0xef35, 0xed2a, 0xef75, 0xed2a, +0xef75, 0xee22, 0xf050, 0xee22, 0xf050, 0xee10, 0xf020, 0xee10, 0xf020, 0xee10, 0xf020, +0xed7a, 0xef6b, 0xed7a, 0xef6b, 0xecee, 0xeec2, 0xecee, 0xeec2, 0xecb4, 0xee6c, 0xecb4, +0xee6c, 0xed57, 0xeef3, 0xed57, 0xeef3, 0xed12, 0xee95, 0xed12, 0xee95, 0xec85, 0xedf3, +0xec85, 0xedf3, 0xec85, 0xedf3, 0xec64, 0xedc0, 0xec64, 0xedc0, 0xebe4, 0xed32, 0xebe4, +0xed32, 0xec07, 0xed4c, 0xec07, 0xed4c, 0xec5b, 0xed9b, 0xec5b, 0xed9b, 0xec0b, 0xed49, +0xec0b, 0xed49, 0xebc1, 0xed04, 0xebc1, 0xed04, 0xebc1, 0xed04, 0xec68, 0xedb2, 0xec68, +0xedb2, 0xecfb, 0xee50, 0xecfb, 0xee50, 0xece4, 0xee48, 0xece4, 0xee48, 0xed3a, 0xeeb0, +0xed3a, 0xeeb0, 0xeda8, 0xef31, 0xeda8, 0xef31, 0xeda8, 0xef31, 0xed7c, 0xef19, 0xed7c, +0xef19, 0xedd8, 0xef89, 0xedd8, 0xef89, 0xee58, 0xf01d, 0xee58, 0xf01d, 0xed89, 0xef60, +0xed89, 0xef60, 0xebfe, 0xede5, 0xebfe, 0xede5, 0xec09, 0xedfc, 0xec09, 0xedfc, 0xec09, +0xedfc, 0xecea, 0xeee5, 0xecea, 0xeee5, 0xed16, 0xef12, 0xed16, 0xef12, 0xedc2, 0xefbc, +0xedc2, 0xefbc, 0xeeaa, 0xf09b, 0xeeaa, 0xf09b, 0xef94, 0xf175, 0xef94, 0xf175, 0xf0c1, +0xf28c, 0xf0c1, 0xf28c, 0xf0c1, 0xf28c, 0xf226, 0xf3d4, 0xf226, 0xf3d4, 0xf266, 0xf3f0, +0xf266, 0xf3f0, 0xf348, 0xf4a8, 0xf348, 0xf4a8, 0xf468, 0xf599, 0xf468, 0xf599, 0xf56c, +0xf667, 0xf56c, 0xf667, 0xf56c, 0xf667, 0xf5c8, 0xf68a, 0xf5c8, 0xf68a, 0xf5ab, 0xf630, +0xf5ab, 0xf630, 0xf777, 0xf7bd, 0xf777, 0xf7bd, 0xf90f, 0xf913, 0xf90f, 0xf913, 0xfb8f, +0xfb52, 0xfb8f, 0xfb52, 0xfdc6, 0xfd47, 0xfdc6, 0xfd47, 0xfdc6, 0xfd47, 0xff1c, 0xfe5e, +0xff1c, 0xfe5e, 0xffec, 0xfef1, 0xffec, 0xfef1, 0x65, 0xff2f, 0x65, 0xff2f, 0x1c0, +0x54, 0x1c0, 0x54, 0x2f7, 0x15a, 0x2f7, 0x15a, 0x4d4, 0x30b, 0x4d4, 0x30b, +0x4d4, 0x30b, 0x706, 0x518, 0x706, 0x518, 0x7fe, 0x5f0, 0x7fe, 0x5f0, 0x92f, +0x708, 0x92f, 0x708, 0xa88, 0x84f, 0xa88, 0x84f, 0xb88, 0x942, 0xb88, 0x942, +0xb88, 0x942, 0xdb8, 0xb6a, 0xdb8, 0xb6a, 0xfef, 0xd9f, 0xfef, 0xd9f, 0x122d, +0xfe0, 0x122d, 0xfe0, 0x143c, 0x11f6, 0x143c, 0x11f6, 0x1422, 0x11e5, 0x1422, 0x11e5, +0x1368, 0x1139, 0x1368, 0x1139, 0x1368, 0x1139, 0x12ab, 0x1089, 0x12ab, 0x1089, 0x11fe, +0xfeb, 0x11fe, 0xfeb, 0x131e, 0x111b, 0x131e, 0x111b, 0x13ce, 0x11da, 0x13ce, 0x11da, +0x1375, 0x118f, 0x1375, 0x118f, 0x1375, 0x118f, 0x1299, 0x10bf, 0x1299, 0x10bf, 0x116f, +0xf9f, 0x116f, 0xf9f, 0x10cc, 0xf05, 0x10cc, 0xf05, 0x10dc, 0xf1b, 0x10dc, 0xf1b, +0x10c9, 0xf0b, 0x10c9, 0xf0b, 0x10cd, 0xf11, 0x10cd, 0xf11, 0x10cd, 0xf11, 0x11a0, +0xfe5, 0x11a0, 0xfe5, 0x11e3, 0x1026, 0x11e3, 0x1026, 0x116e, 0xfaf, 0x116e, 0xfaf, +0x1115, 0xf53, 0x1115, 0xf53, 0x110b, 0xf47, 0x110b, 0xf47, 0x1169, 0xfa3, 0x1169, +0xfa3, 0x1169, 0xfa3, 0x129b, 0x10d6, 0x129b, 0x10d6, 0x135a, 0x1197, 0x135a, 0x1197, +0x137b, 0x11bd, 0x137b, 0x11bd, 0x1323, 0x116d, 0x1323, 0x116d, 0x12e7, 0x113d, 0x12e7, +0x113d, 0x12e7, 0x113d, 0x1202, 0x1068, 0x1202, 0x1068, 0x112c, 0xfa6, 0x112c, 0xfa6, +0x1070, 0xf04, 0x1070, 0xf04, 0x1056, 0xf06, 0x1056, 0xf06, 0x114e, 0x101f, 0x114e, +0x101f, 0x11cf, 0x10c6, 0x11cf, 0x10c6, 0x11cf, 0x10c6, 0x1157, 0x1077, 0x1157, 0x1077, +0xf07, 0xe53, 0xf07, 0xe53, 0xcd6, 0xc50, 0xcd6, 0xc50, 0xb0c, 0xab6, 0xb0c, +0xab6, 0xa4a, 0xa25, 0xa4a, 0xa25, 0x8f8, 0x904, 0x8f8, 0x904, 0x8f8, 0x904, +0x87a, 0x8b7, 0x87a, 0x8b7, 0x7d4, 0x840, 0x7d4, 0x840, 0x629, 0x6c2, 0x629, +0x6c2, 0x5e7, 0x6ab, 0x5e7, 0x6ab, 0x4be, 0x5aa, 0x4be, 0x5aa, 0x4be, 0x5aa, +0x3c3, 0x4d1, 0x3c3, 0x4d1, 0x315, 0x442, 0x315, 0x442, 0x24a, 0x392, 0x24a, +0x392, 0x135, 0x291, 0x135, 0x291, 0xfee7, 0x54, 0xfee7, 0x54, 0xfdaf, 0xff27, +0xfdaf, 0xff27, 0xfdaf, 0xff27, 0xfd34, 0xfeb3, 0xfd34, 0xfeb3, 0xfbc9, 0xfd49, 0xfbc9, +0xfd49, 0xfbfc, 0xfd79, 0xfbfc, 0xfd79, 0xfc72, 0xfde7, 0xfc72, 0xfde7, 0xfbad, 0xfd17, +0xfbad, 0xfd17, 0xfae3, 0xfc3e, 0xfae3, 0xfc3e, 0xfae3, 0xfc3e, 0xfa60, 0xfba9, 0xfa60, +0xfba9, 0xfa73, 0xfba9, 0xfa73, 0xfba9, 0xfb01, 0xfc21, 0xfb01, 0xfc21, 0xfb1e, 0xfc26, +0xfb1e, 0xfc26, 0xfbea, 0xfcd9, 0xfbea, 0xfcd9, 0xfbea, 0xfcd9, 0xfc96, 0xfd6c, 0xfc96, +0xfd6c, 0xfca8, 0xfd64, 0xfca8, 0xfd64, 0xfd7e, 0xfe1f, 0xfd7e, 0xfe1f, 0xfe57, 0xfedc, +0xfe57, 0xfedc, 0xff71, 0xffdb, 0xff71, 0xffdb, 0x109, 0x157, 0x109, 0x157, 0x109, +0x157, 0x2a6, 0x2d8, 0x2a6, 0x2d8, 0x310, 0x326, 0x310, 0x326, 0x312, 0x30b, +0x312, 0x30b, 0x238, 0x213, 0x238, 0x213, 0x10d, 0xca, 0x10d, 0xca, 0xd8, +0x74, 0xd8, 0x74, 0xd8, 0x74, 0x1ea, 0x166, 0x1ea, 0x166, 0x2e7, 0x241, +0x2e7, 0x241, 0x396, 0x2ce, 0x396, 0x2ce, 0x3e2, 0x2f5, 0x3e2, 0x2f5, 0x3fa, +0x2e8, 0x3fa, 0x2e8, 0x3fa, 0x2e8, 0x4f9, 0x3c1, 0x4f9, 0x3c1, 0x615, 0x4b6, +0x615, 0x4b6, 0x64c, 0x4c5, 0x64c, 0x4c5, 0x634, 0x486, 0x634, 0x486, 0x750, +0x57a, 0x750, 0x57a, 0x831, 0x635, 0x831, 0x635, 0x831, 0x635, 0x976, 0x755, +0x976, 0x755, 0x9de, 0x798, 0x9de, 0x798, 0xb4c, 0x8e4, 0xb4c, 0x8e4, 0xe1d, +0xb96, 0xe1d, 0xb96, 0x1082, 0xdde, 0x1082, 0xdde, 0x1286, 0xfc9, 0x1286, 0xfc9, +0x1286, 0xfc9, 0x1428, 0x1156, 0x1428, 0x1156, 0x1510, 0x122c, 0x1510, 0x122c, 0x163a, +0x1348, 0x163a, 0x1348, 0x17d4, 0x14d9, 0x17d4, 0x14d9, 0x17ad, 0x14ac, 0x17ad, 0x14ac, +0x17ad, 0x14ac, 0x1852, 0x1550, 0x1852, 0x1550, 0x1873, 0x1573, 0x1873, 0x1573, 0x1922, +0x162a, 0x1922, 0x162a, 0x1a75, 0x1786, 0x1a75, 0x1786, 0x1a4f, 0x176e, 0x1a4f, 0x176e, +0x1a91, 0x17bf, 0x1a91, 0x17bf, 0x1a91, 0x17bf, 0x1ace, 0x180d, 0x1ace, 0x180d, 0x1aaa, +0x17fd, 0x1aaa, 0x17fd, 0x1a6e, 0x17d6, 0x1a6e, 0x17d6, 0x19a3, 0x171f, 0x19a3, 0x171f, +0x1979, 0x170a, 0x1979, 0x170a, 0x187e, 0x1625, 0x187e, 0x1625, 0x187e, 0x1625, 0x16ef, +0x14aa, 0x16ef, 0x14aa, 0x1679, 0x1446, 0x1679, 0x1446, 0x15d4, 0x13b3, 0x15d4, 0x13b3, +0x150f, 0x12fe, 0x150f, 0x12fe, 0x146d, 0x126a, 0x146d, 0x126a, 0x146d, 0x126a, 0x13d7, +0x11e0, 0x13d7, 0x11e0, 0x12d6, 0x10ea, 0x12d6, 0x10ea, 0x11ad, 0xfca, 0x11ad, 0xfca, +0x101a, 0xe3e, 0x101a, 0xe3e, 0xe8d, 0xcb7, 0xe8d, 0xcb7, 0xd45, 0xb73, 0xd45, +0xb73, 0xd45, 0xb73, 0xda3, 0xbd5, 0xda3, 0xbd5, 0xe70, 0xca6, 0xe70, 0xca6, +0xdeb, 0xc24, 0xdeb, 0xc24, 0xc60, 0xa9c, 0xc60, 0xa9c, 0xb3b, 0x97c, 0xb3b, +0x97c, 0x9f0, 0x836, 0x9f0, 0x836, 0x9f0, 0x836, 0x80a, 0x657, 0x80a, 0x657, +0x68a, 0x4df, 0x68a, 0x4df, 0x502, 0x361, 0x502, 0x361, 0x38a, 0x1f5, 0x38a, +0x1f5, 0x21e, 0x97, 0x21e, 0x97, 0x21e, 0x97, 0x16a, 0xfff2, 0x16a, 0xfff2, +0xe, 0xfea8, 0xe, 0xfea8, 0xff7c, 0xfe2b, 0xff7c, 0xfe2b, 0xffbb, 0xfe80, 0xffbb, +0xfe80, 0xffaa, 0xfe86, 0xffaa, 0xfe86, 0xff57, 0xfe4e, 0xff57, 0xfe4e, 0xff57, 0xfe4e, +0xfeed, 0xfdff, 0xfeed, 0xfdff, 0xfcf7, 0xfc25, 0xfcf7, 0xfc25, 0xfb7c, 0xfac8, 0xfb7c, +0xfac8, 0xfb09, 0xfa74, 0xfb09, 0xfa74, 0xfb0a, 0xfa94, 0xfb0a, 0xfa94, 0xfc02, 0xfbab, +0xfc02, 0xfbab, 0xfc02, 0xfbab, 0xfb7c, 0xfb45, 0xfb7c, 0xfb45, 0xfbaa, 0xfb93, 0xfbaa, +0xfb93, 0xfc27, 0xfc30, 0xfc27, 0xfc30, 0xfc3a, 0xfc62, 0xfc3a, 0xfc62, 0xfc21, 0xfc69, +0xfc21, 0xfc69, 0xfc21, 0xfc69, 0xfc56, 0xfcbd, 0xfc56, 0xfcbd, 0xfbf8, 0xfc7e, 0xfbf8, +0xfc7e, 0xfd35, 0xfdd8, 0xfd35, 0xfdd8, 0xfea5, 0xff66, 0xfea5, 0xff66, 0xfe07, 0xfee5, +0xfe07, 0xfee5, 0xfdbc, 0xfeb7, 0xfdbc, 0xfeb7, 0xfdbc, 0xfeb7, 0xfd2b, 0xfe42, 0xfd2b, +0xfe42, 0xfd7c, 0xfeaf, 0xfd7c, 0xfeaf, 0xfe3c, 0xff8a, 0xfe3c, 0xff8a, 0xfe74, 0xffdc, +0xfe74, 0xffdc, 0xfebc, 0x3d, 0xfebc, 0x3d, 0xfebc, 0x3d, 0xfec1, 0x5b, 0xfec1, +0x5b, 0xfe9a, 0x4b, 0xfe9a, 0x4b, 0xfe11, 0xffd8, 0xfe11, 0xffd8, 0xfcc6, 0xfea1, +0xfcc6, 0xfea1, 0xfc3d, 0xfe2c, 0xfc3d, 0xfe2c, 0xfbba, 0xfdb9, 0xfbba, 0xfdb9, 0xfbba, +0xfdb9, 0xfbb2, 0xfdc0, 0xfbb2, 0xfdc0, 0xfb59, 0xfd74, 0xfb59, 0xfd74, 0xfa3d, 0xfc61, +0xfa3d, 0xfc61, 0xf8ff, 0xfb2b, 0xf8ff, 0xfb2b, 0xf773, 0xf9a3, 0xf773, 0xf9a3, 0xf602, +0xf834, 0xf602, 0xf834, 0xf602, 0xf834, 0xf57c, 0xf7ac, 0xf57c, 0xf7ac, 0xf565, 0xf790, +0xf565, 0xf790, 0xf558, 0xf77d, 0xf558, 0xf77d, 0xf56b, 0xf785, 0xf56b, 0xf785, 0xf4c5, +0xf6d3, 0xf4c5, 0xf6d3, 0xf4c5, 0xf6d3, 0xf4d0, 0xf6d0, 0xf4d0, 0xf6d0, 0xf4c6, 0xf6b4, +0xf4c6, 0xf6b4, 0xf51a, 0xf6f6, 0xf51a, 0xf6f6, 0xf5e6, 0xf7af, 0xf5e6, 0xf7af, 0xf62d, +0xf7e2, 0xf62d, 0xf7e2, 0xf594, 0xf736, 0xf594, 0xf736, 0xf594, 0xf736, 0xf49b, 0xf629, +0xf49b, 0xf629, 0xf29d, 0xf418, 0xf29d, 0xf418, 0xf0b2, 0xf21d, 0xf0b2, 0xf21d, 0xefab, +0xf106, 0xefab, 0xf106, 0xefbf, 0xf10e, 0xefbf, 0xf10e, 0xf007, 0xf14b, 0xf007, 0xf14b, +0xf007, 0xf14b, 0xeeeb, 0xf029, 0xeeeb, 0xf029, 0xee1a, 0xef55, 0xee1a, 0xef55, 0xedeb, +0xef25, 0xedeb, 0xef25, 0xed65, 0xeea3, 0xed65, 0xeea3, 0xed27, 0xee6b, 0xed27, 0xee6b, +0xed27, 0xee6b, 0xeda4, 0xeef2, 0xeda4, 0xeef2, 0xec61, 0xedbd, 0xec61, 0xedbd, 0xebcd, +0xed38, 0xebcd, 0xed38, 0xeb04, 0xec82, 0xeb04, 0xec82, 0xea44, 0xebd6, 0xea44, 0xebd6, +0xe9b9, 0xeb60, 0xe9b9, 0xeb60, 0xe9b9, 0xeb60, 0xe96e, 0xeb2b, 0xe96e, 0xeb2b, 0xea78, +0xec4b, 0xea78, 0xec4b, 0xeb5a, 0xed43, 0xeb5a, 0xed43, 0xebae, 0xedaa, 0xebae, 0xedaa, +0xeb90, 0xed9f, 0xeb90, 0xed9f, 0xebd2, 0xedf1, 0xebd2, 0xedf1, 0xebd2, 0xedf1, 0xeadc, +0xed09, 0xeadc, 0xed09, 0xeb22, 0xed59, 0xeb22, 0xed59, 0xeba6, 0xede4, 0xeba6, 0xede4, +0xebc5, 0xee06, 0xebc5, 0xee06, 0xec83, 0xeec4, 0xec83, 0xeec4, 0xec83, 0xeec4, 0xed3e, +0xef7a, 0xed3e, 0xef7a, 0xee24, 0xf059, 0xee24, 0xf059, 0xeec2, 0xf0ec, 0xeec2, 0xf0ec, +0xef31, 0xf14e, 0xef31, 0xf14e, 0xef35, 0xf142, 0xef35, 0xf142, 0xef08, 0xf104, 0xef08, +0xf104, 0xef08, 0xf104, 0xefa0, 0xf189, 0xefa0, 0xf189, 0xef0f, 0xf0e4, 0xef0f, 0xf0e4, +0xee25, 0xefe7, 0xee25, 0xefe7, 0xee14, 0xefc4, 0xee14, 0xefc4, 0xed8c, 0xef2b, 0xed8c, +0xef2b, 0xedc3, 0xef53, 0xedc3, 0xef53, 0xedc3, 0xef53, 0xedc0, 0xef43, 0xedc0, 0xef43, +0xed86, 0xef01, 0xed86, 0xef01, 0xecf3, 0xee68, 0xecf3, 0xee68, 0xec57, 0xedc9, 0xec57, +0xedc9, 0xec3b, 0xedaf, 0xec3b, 0xedaf, 0xec3b, 0xedaf, 0xed0b, 0xee85, 0xed0b, 0xee85, +0xed00, 0xee83, 0xed00, 0xee83, 0xed10, 0xee9f, 0xed10, 0xee9f, 0xed52, 0xeef0, 0xed52, +0xeef0, 0xec7f, 0xee2f, 0xec7f, 0xee2f, 0xeca1, 0xee65, 0xeca1, 0xee65, 0xeca1, 0xee65, +0xed1d, 0xeef5, 0xed1d, 0xeef5, 0xed7e, 0xef6b, 0xed7e, 0xef6b, 0xee0d, 0xf00e, 0xee0d, +0xf00e, 0xee3d, 0xf050, 0xee3d, 0xf050, 0xee3c, 0xf05f, 0xee3c, 0xf05f, 0xee5d, 0xf08c, +0xee5d, 0xf08c, 0xee5d, 0xf08c, 0xeda2, 0xefd9, 0xeda2, 0xefd9, 0xed44, 0xef7e, 0xed44, +0xef7e, 0xecb8, 0xeef0, 0xecb8, 0xeef0, 0xecc9, 0xeef7, 0xecc9, 0xeef7, 0xedb4, 0xefd2, +0xedb4, 0xefd2, 0xedb4, 0xefd2, 0xeee9, 0xf0f1, 0xeee9, 0xf0f1, 0xf015, 0xf1fe, 0xf015, +0xf1fe, 0xf15d, 0xf321, 0xf15d, 0xf321, 0xf194, 0xf32b, 0xf194, 0xf32b, 0xf1fc, 0xf35f, +0xf1fc, 0xf35f, 0xf1d5, 0xf2fe, 0xf1d5, 0xf2fe, 0xf1d5, 0xf2fe, 0xf09d, 0xf186, 0xf09d, +0xf186, 0xf17e, 0xf222, 0xf17e, 0xf222, 0xf2c9, 0xf324, 0xf2c9, 0xf324, 0xf4fd, 0xf50c, +0xf4fd, 0xf50c, 0xf5f3, 0xf5b4, 0xf5f3, 0xf5b4, 0xf732, 0xf6a4, 0xf732, 0xf6a4, 0xf732, +0xf6a4, 0xf88e, 0xf7b1, 0xf88e, 0xf7b1, 0xfa09, 0xf8de, 0xfa09, 0xf8de, 0xfbcc, 0xfa55, +0xfbcc, 0xfa55, 0xfd6a, 0xfbac, 0xfd6a, 0xfbac, 0xff23, 0xfd20, 0xff23, 0xfd20, 0xff23, +0xfd20, 0x62, 0xfe21, 0x62, 0xfe21, 0x282, 0xa, 0x282, 0xa, 0x3aa, 0x100, +0x3aa, 0x100, 0x4b0, 0x1dc, 0x4b0, 0x1dc, 0x62d, 0x337, 0x62d, 0x337, 0x8b4, +0x5a3, 0x8b4, 0x5a3, 0x8b4, 0x5a3, 0xb95, 0x872, 0xb95, 0x872, 0xdf0, 0xac2, +0xdf0, 0xac2, 0x1044, 0xd13, 0x1044, 0xd13, 0x112b, 0xdff, 0x112b, 0xdff, 0x113b, +0xe1a, 0x113b, 0xe1a, 0x1224, 0xf14, 0x1224, 0xf14, 0x1224, 0xf14, 0x11d1, 0xed8, +0x11d1, 0xed8, 0x1246, 0xf68, 0x1246, 0xf68, 0x12fa, 0x103b, 0x12fa, 0x103b, 0x12a1, +0x1003, 0x12a1, 0x1003, 0x1280, 0x1005, 0x1280, 0x1005, 0x1280, 0x1005, 0x11f3, 0xf9d, +0x11f3, 0xf9d, 0x10fa, 0xec9, 0x10fa, 0xec9, 0x1001, 0xdf3, 0x1001, 0xdf3, 0xfda, +0xdf0, 0xfda, 0xdf0, 0x105c, 0xe92, 0x105c, 0xe92, 0x1153, 0xfa8, 0x1153, 0xfa8, +0x1153, 0xfa8, 0x10b9, 0xf29, 0x10b9, 0xf29, 0x103d, 0xec5, 0x103d, 0xec5, 0xf9e, +0xe3b, 0xf9e, 0xe3b, 0xf07, 0xdb5, 0xf07, 0xdb5, 0xfe7, 0xea4, 0xfe7, 0xea4, +0x10b9, 0xf81, 0x10b9, 0xf81, 0x10b9, 0xf81, 0x10c6, 0xf97, 0x10c6, 0xf97, 0x119c, +0x1073, 0x119c, 0x1073, 0x1288, 0x1163, 0x1288, 0x1163, 0x127e, 0x115d, 0x127e, 0x115d, +0x11a9, 0x108a, 0x11a9, 0x108a, 0x11a9, 0x108a, 0x106a, 0xf4d, 0x106a, 0xf4d, 0xf3f, +0xe24, 0xf3f, 0xe24, 0xe6f, 0xd58, 0xe6f, 0xd58, 0xed2, 0xdc1, 0xed2, 0xdc1, +0xf20, 0xe16, 0xf20, 0xe16, 0xed0, 0xdcf, 0xed0, 0xdcf, 0xed0, 0xdcf, 0xe1c, +0xd29, 0xe1c, 0xd29, 0xd71, 0xc8e, 0xd71, 0xc8e, 0xb7d, 0xaae, 0xb7d, 0xaae, +0xabb, 0xa03, 0xabb, 0xa03, 0x916, 0x877, 0x916, 0x877, 0x916, 0x877, 0x751, +0x6d1, 0x751, 0x6d1, 0x5be, 0x55e, 0x5be, 0x55e, 0x467, 0x42b, 0x467, 0x42b, +0x495, 0x47f, 0x495, 0x47f, 0x394, 0x3a4, 0x394, 0x3a4, 0x32b, 0x365, 0x32b, +0x365, 0x32b, 0x365, 0x26e, 0x2d0, 0x26e, 0x2d0, 0x1ce, 0x25a, 0x1ce, 0x25a, +0x66, 0x11a, 0x66, 0x11a, 0xff01, 0xffdc, 0xff01, 0xffdc, 0xfd43, 0xfe44, 0xfd43, +0xfe44, 0xfcbb, 0xfdde, 0xfcbb, 0xfdde, 0xfcbb, 0xfdde, 0xfd12, 0xfe55, 0xfd12, 0xfe55, +0xfca3, 0xfe02, 0xfca3, 0xfe02, 0xfc66, 0xfdde, 0xfc66, 0xfdde, 0xfb7c, 0xfd07, 0xfb7c, +0xfd07, 0xfb88, 0xfd23, 0xfb88, 0xfd23, 0xfb88, 0xfd23, 0xfbdb, 0xfd81, 0xfbdb, 0xfd81, +0xfbf3, 0xfd9f, 0xfbf3, 0xfd9f, 0xfcb0, 0xfe5d, 0xfcb0, 0xfe5d, 0xfcd3, 0xfe7c, 0xfcd3, +0xfe7c, 0xfdd6, 0xff77, 0xfdd6, 0xff77, 0xfef7, 0x8c, 0xfef7, 0x8c, 0xfef7, 0x8c, +0xfe0a, 0xff8e, 0xfe0a, 0xff8e, 0xfe7d, 0xffec, 0xfe7d, 0xffec, 0xff84, 0xdb, 0xff84, +0xdb, 0xdc, 0x219, 0xdc, 0x219, 0x266, 0x385, 0x266, 0x385, 0x403, 0x502, +0x403, 0x502, 0x403, 0x502, 0x4d5, 0x5b1, 0x4d5, 0x5b1, 0x514, 0x5cc, 0x514, +0x5cc, 0x524, 0x5b6, 0x524, 0x5b6, 0x574, 0x5e0, 0x574, 0x5e0, 0x5e4, 0x628, +0x5e4, 0x628, 0x5e4, 0x628, 0x5dc, 0x5f8, 0x5dc, 0x5f8, 0x64d, 0x640, 0x64d, +0x640, 0x5ff, 0x5c9, 0x5ff, 0x5c9, 0x61e, 0x5bf, 0x61e, 0x5bf, 0x6d1, 0x649, +0x6d1, 0x649, 0x732, 0x682, 0x732, 0x682, 0x732, 0x682, 0x73b, 0x661, 0x73b, +0x661, 0x864, 0x763, 0x864, 0x763, 0x987, 0x85e, 0x987, 0x85e, 0xa19, 0x8c9, +0xa19, 0x8c9, 0xa16, 0x89f, 0xa16, 0x89f, 0xa08, 0x86b, 0xa08, 0x86b, 0xa08, +0x86b, 0x9ad, 0x7eb, 0x9ad, 0x7eb, 0xa55, 0x870, 0xa55, 0x870, 0xc05, 0x9fe, +0xc05, 0x9fe, 0xd8e, 0xb68, 0xd8e, 0xb68, 0xf1a, 0xcd6, 0xf1a, 0xcd6, 0xf1a, +0xcd6, 0x11a3, 0xf42, 0x11a3, 0xf42, 0x139d, 0x1122, 0x139d, 0x1122, 0x144f, 0x11bd, +0x144f, 0x11bd, 0x1607, 0x1361, 0x1607, 0x1361, 0x1643, 0x138c, 0x1643, 0x138c, 0x1705, +0x1440, 0x1705, 0x1440, 0x1705, 0x1440, 0x16ec, 0x141d, 0x16ec, 0x141d, 0x17b5, 0x14df, +0x17b5, 0x14df, 0x1836, 0x155e, 0x1836, 0x155e, 0x17ca, 0x14f3, 0x17ca, 0x14f3, 0x1843, +0x1570, 0x1843, 0x1570, 0x1901, 0x1636, 0x1901, 0x1636, 0x1901, 0x1636, 0x19f4, 0x1734, +0x19f4, 0x1734, 0x1abc, 0x180b, 0x1abc, 0x180b, 0x1bd7, 0x1937, 0x1bd7, 0x1937, 0x1a9a, +0x180e, 0x1a9a, 0x180e, 0x19e5, 0x176f, 0x19e5, 0x176f, 0x19e5, 0x176f, 0x1924, 0x16c6, +0x1924, 0x16c6, 0x189e, 0x165a, 0x189e, 0x165a, 0x186e, 0x1645, 0x186e, 0x1645, 0x17a5, +0x1597, 0x17a5, 0x1597, 0x17f1, 0x15fd, 0x17f1, 0x15fd, 0x17a9, 0x15d0, 0x17a9, 0x15d0, +0x17a9, 0x15d0, 0x168a, 0x14cc, 0x168a, 0x14cc, 0x1567, 0x13c2, 0x1567, 0x13c2, 0x13aa, +0x121d, 0x13aa, 0x121d, 0x134b, 0x11d4, 0x134b, 0x11d4, 0x1289, 0x1126, 0x1289, 0x1126, +0x118c, 0x103d, 0x118c, 0x103d, 0x118c, 0x103d, 0x1168, 0x1029, 0x1168, 0x1029, 0x108d, +0xf5d, 0x108d, 0xf5d, 0xfd5, 0xeb2, 0xfd5, 0xeb2, 0xef2, 0xdda, 0xef2, 0xdda, +0xdce, 0xcbf, 0xdce, 0xcbf, 0xdce, 0xcbf, 0xc16, 0xb10, 0xc16, 0xb10, 0xb36, +0xa37, 0xb36, 0xa37, 0xa48, 0x94e, 0xa48, 0x94e, 0x961, 0x86d, 0x961, 0x86d, +0x7b6, 0x6c7, 0x7b6, 0x6c7, 0x679, 0x590, 0x679, 0x590, 0x679, 0x590, 0x599, +0x4b6, 0x599, 0x4b6, 0x450, 0x373, 0x450, 0x373, 0x3f0, 0x31b, 0x3f0, 0x31b, +0x3d6, 0x308, 0x3d6, 0x308, 0x2ec, 0x228, 0x2ec, 0x228, 0x1b4, 0xfb, 0x1b4, +0xfb, 0x1b4, 0xfb, 0xef, 0x42, 0xef, 0x42, 0x47, 0xffa8, 0x47, 0xffa8, +0xff81, 0xfef0, 0xff81, 0xfef0, 0xfe64, 0xfde3, 0xfe64, 0xfde3, 0xfd70, 0xfd01, 0xfd70, +0xfd01, 0xfd70, 0xfd01, 0xfc02, 0xfba5, 0xfc02, 0xfba5, 0xfbff, 0xfbb5, 0xfbff, 0xfbb5, +0xfbeb, 0xfbb5, 0xfbeb, 0xfbb5, 0xfb71, 0xfb4e, 0xfb71, 0xfb4e, 0xfb2f, 0xfb20, 0xfb2f, +0xfb20, 0xfc14, 0xfc19, 0xfc14, 0xfc19, 0xfc14, 0xfc19, 0xfc22, 0xfc3b, 0xfc22, 0xfc3b, +0xfc9a, 0xfcc6, 0xfc9a, 0xfcc6, 0xfd07, 0xfd45, 0xfd07, 0xfd45, 0xfc0f, 0xfc5e, 0xfc0f, +0xfc5e, 0xfb8d, 0xfbee, 0xfb8d, 0xfbee, 0xfaf3, 0xfb63, 0xfaf3, 0xfb63, 0xfaf3, 0xfb63, +0xfbbe, 0xfc3d, 0xfbbe, 0xfc3d, 0xfb5b, 0xfbe8, 0xfb5b, 0xfbe8, 0xfb8b, 0xfc25, 0xfb8b, +0xfc25, 0xfbc2, 0xfc68, 0xfbc2, 0xfc68, 0xfc44, 0xfcf6, 0xfc44, 0xfcf6, 0xfc44, 0xfcf6, +0xfc0a, 0xfcc7, 0xfc0a, 0xfcc7, 0xfbe2, 0xfca9, 0xfbe2, 0xfca9, 0xfb96, 0xfc68, 0xfb96, +0xfc68, 0xf9fa, 0xfad7, 0xf9fa, 0xfad7, 0xfa48, 0xfb2f, 0xfa48, 0xfb2f, 0xfa58, 0xfb4a, +0xfa58, 0xfb4a, 0xfa58, 0xfb4a, 0xfa45, 0xfb42, 0xfa45, 0xfb42, 0xfa0a, 0xfb12, 0xfa0a, +0xfb12, 0xf95c, 0xfa6f, 0xf95c, 0xfa6f, 0xf8fb, 0xfa1b, 0xf8fb, 0xfa1b, 0xf7f9, 0xf925, +0xf7f9, 0xf925, 0xf71b, 0xf854, 0xf71b, 0xf854, 0xf71b, 0xf854, 0xf645, 0xf78c, 0xf645, +0xf78c, 0xf535, 0xf689, 0xf535, 0xf689, 0xf582, 0xf6e4, 0xf582, 0xf6e4, 0xf501, 0xf671, +0xf501, 0xf671, 0xf4a3, 0xf620, 0xf4a3, 0xf620, 0xf4a3, 0xf620, 0xf43a, 0xf5c4, 0xf43a, +0xf5c4, 0xf452, 0xf5e8, 0xf452, 0xf5e8, 0xf55c, 0xf6fe, 0xf55c, 0xf6fe, 0xf5d2, 0xf77e, +0xf5d2, 0xf77e, 0xf4fb, 0xf6b0, 0xf4fb, 0xf6b0, 0xf3af, 0xf56c, 0xf3af, 0xf56c, 0xf3af, +0xf56c, 0xf26b, 0xf42f, 0xf26b, 0xf42f, 0xf152, 0xf31b, 0xf152, 0xf31b, 0xf16a, 0xf337, +0xf16a, 0xf337, 0xf105, 0xf2d4, 0xf105, 0xf2d4, 0xf0e3, 0xf2b4, 0xf0e3, 0xf2b4, 0xf0e3, +0xf2b4, 0xefea, 0xf1bb, 0xefea, 0xf1bb, 0xee60, 0xf030, 0xee60, 0xf030, 0xed5e, 0xef2d, +0xed5e, 0xef2d, 0xec5e, 0xee2b, 0xec5e, 0xee2b, 0xebdd, 0xeda7, 0xebdd, 0xeda7, 0xecc7, +0xee8f, 0xecc7, 0xee8f, 0xecc7, 0xee8f, 0xed34, 0xeef9, 0xed34, 0xeef9, 0xed39, 0xeefd, +0xed39, 0xeefd, 0xec25, 0xede7, 0xec25, 0xede7, 0xeaaf, 0xec70, 0xeaaf, 0xec70, 0xe952, +0xeb14, 0xe952, 0xeb14, 0xe85a, 0xea1d, 0xe85a, 0xea1d, 0xe85a, 0xea1d, 0xe8fa, 0xeabf, +0xe8fa, 0xeabf, 0xe928, 0xeaf2, 0xe928, 0xeaf2, 0xe91f, 0xeaee, 0xe91f, 0xeaee, 0xe911, +0xeae5, 0xe911, 0xeae5, 0xe96f, 0xeb4b, 0xe96f, 0xeb4b, 0xe96f, 0xeb4b, 0xe911, 0xeaf4, +0xe911, 0xeaf4, 0xe974, 0xeb5f, 0xe974, 0xeb5f, 0xe8f9, 0xeaed, 0xe8f9, 0xeaed, 0xe8ad, +0xeaab, 0xe8ad, 0xeaab, 0xe8ae, 0xeab4, 0xe8ae, 0xeab4, 0xe938, 0xeb48, 0xe938, 0xeb48, +0xe938, 0xeb48, 0xea45, 0xec5d, 0xea45, 0xec5d, 0xea79, 0xec99, 0xea79, 0xec99, 0xeb03, +0xed29, 0xeb03, 0xed29, 0xeae6, 0xed12, 0xeae6, 0xed12, 0xeb98, 0xedc9, 0xeb98, 0xedc9, +0xeb9b, 0xedce, 0xeb9b, 0xedce, 0xeb9b, 0xedce, 0xebfe, 0xee34, 0xebfe, 0xee34, 0xeb7d, +0xedb3, 0xeb7d, 0xedb3, 0xeb27, 0xed5d, 0xeb27, 0xed5d, 0xec35, 0xee6a, 0xec35, 0xee6a, +0xec70, 0xeea3, 0xec70, 0xeea3, 0xec70, 0xeea3, 0xecbe, 0xeeef, 0xecbe, 0xeeef, 0xecc8, +0xeef7, 0xecc8, 0xeef7, 0xecb9, 0xeee5, 0xecb9, 0xeee5, 0xecde, 0xef09, 0xecde, 0xef09, +0xecc6, 0xeef0, 0xecc6, 0xeef0, 0xecfb, 0xef26, 0xecfb, 0xef26, 0xecfb, 0xef26, 0xecb0, +0xeedc, 0xecb0, 0xeedc, 0xed26, 0xef56, 0xed26, 0xef56, 0xee56, 0xf08b, 0xee56, 0xf08b, +0xee36, 0xf072, 0xee36, 0xf072, 0xee5b, 0xf0a0, 0xee5b, 0xf0a0, 0xee64, 0xf0b4, 0xee64, +0xf0b4, 0xee64, 0xf0b4, 0xee9a, 0xf0f7, 0xee9a, 0xf0f7, 0xef43, 0xf1ae, 0xef43, 0xf1ae, +0xf018, 0xf292, 0xf018, 0xf292, 0xf090, 0xf31b, 0xf090, 0xf31b, 0xf110, 0xf3ab, 0xf110, +0xf3ab, 0xf110, 0xf3ab, 0xf0b2, 0xf35f, 0xf0b2, 0xf35f, 0xf0a4, 0xf361, 0xf0a4, 0xf361, +0xf0f8, 0xf3c3, 0xf0f8, 0xf3c3, 0xf0ad, 0xf384, 0xf0ad, 0xf384, 0xf16f, 0xf450, 0xf16f, +0xf450, 0xf26b, 0xf553, 0xf26b, 0xf553, 0xf26b, 0xf553, 0xf303, 0xf5ed, 0xf303, 0xf5ed, +0xf3aa, 0xf693, 0xf3aa, 0xf693, 0xf3a7, 0xf689, 0xf3a7, 0xf689, 0xf341, 0xf617, 0xf341, +0xf617, 0xf34c, 0xf610, 0xf34c, 0xf610, 0xf33e, 0xf5eb, 0xf33e, 0xf5eb, 0xf33e, 0xf5eb, +0xf434, 0xf6c4, 0xf434, 0xf6c4, 0xf4af, 0xf71c, 0xf4af, 0xf71c, 0xf512, 0xf756, 0xf512, +0xf756, 0xf521, 0xf737, 0xf521, 0xf737, 0xf587, 0xf76a, 0xf587, 0xf76a, 0xf587, 0xf76a, +0xf63c, 0xf7e8, 0xf63c, 0xf7e8, 0xf717, 0xf888, 0xf717, 0xf888, 0xf8b6, 0xf9e8, 0xf8b6, +0xf9e8, 0xfa9c, 0xfb8e, 0xfa9c, 0xfb8e, 0xfc47, 0xfcf8, 0xfc47, 0xfcf8, 0xfdb9, 0xfe27, +0xfdb9, 0xfe27, 0xfdb9, 0xfe27, 0xff72, 0xff9f, 0xff72, 0xff9f, 0x2e, 0x1a, 0x2e, +0x1a, 0x176, 0x123, 0x176, 0x123, 0x248, 0x1ba, 0x248, 0x1ba, 0x41b, 0x354, +0x41b, 0x354, 0x609, 0x50e, 0x609, 0x50e, 0x609, 0x50e, 0x7e0, 0x6b7, 0x7e0, +0x6b7, 0x957, 0x804, 0x957, 0x804, 0xaf8, 0x980, 0xaf8, 0x980, 0xd29, 0xb92, +0xd29, 0xb92, 0xe5e, 0xcaf, 0xe5e, 0xcaf, 0xe5e, 0xcaf, 0xff8, 0xe36, 0xff8, +0xe36, 0x1036, 0xe66, 0x1036, 0xe66, 0x10dc, 0xf04, 0x10dc, 0xf04, 0x1174, 0xf9a, +0x1174, 0xf9a, 0x11c4, 0xfeb, 0x11c4, 0xfeb, 0x1205, 0x1032, 0x1205, 0x1032, 0x1205, +0x1032, 0x1162, 0xf99, 0x1162, 0xf99, 0x1164, 0xfa7, 0x1164, 0xfa7, 0x121d, 0x106f, +0x121d, 0x106f, 0x1295, 0x10f8, 0x1295, 0x10f8, 0x1250, 0x10c5, 0x1250, 0x10c5, 0x1143, +0xfcb, 0x1143, 0xfcb, 0x1143, 0xfcb, 0x1139, 0xfd4, 0x1139, 0xfd4, 0x1152, 0x1000, +0x1152, 0x1000, 0x10d2, 0xf92, 0x10d2, 0xf92, 0x10f4, 0xfc4, 0x10f4, 0xfc4, 0x110f, +0xff0, 0x110f, 0xff0, 0x110f, 0xff0, 0x1150, 0x103f, 0x1150, 0x103f, 0x1242, 0x113f, +0x1242, 0x113f, 0x1310, 0x1218, 0x1310, 0x1218, 0x1301, 0x1214, 0x1301, 0x1214, 0x130a, +0x1226, 0x130a, 0x1226, 0x1261, 0x1186, 0x1261, 0x1186, 0x1261, 0x1186, 0x1216, 0x1142, +0x1216, 0x1142, 0x11c8, 0x10fb, 0x11c8, 0x10fb, 0x1176, 0x10b0, 0x1176, 0x10b0, 0x11cb, +0x110a, 0x11cb, 0x110a, 0x1180, 0x10c6, 0x1180, 0x10c6, 0x108d, 0xfd9, 0x108d, 0xfd9, +0x108d, 0xfd9, 0x104e, 0xfa2, 0x104e, 0xfa2, 0xf84, 0xee0, 0xf84, 0xee0, 0xddb, +0xd3f, 0xddb, 0xd3f, 0xc84, 0xbf2, 0xc84, 0xbf2, 0xb3f, 0xab8, 0xb3f, 0xab8, +0xb3f, 0xab8, 0x9fd, 0x980, 0x9fd, 0x980, 0x878, 0x808, 0x878, 0x808, 0x787, +0x722, 0x787, 0x722, 0x689, 0x631, 0x689, 0x631, 0x5d9, 0x58e, 0x5d9, 0x58e, +0x4c3, 0x485, 0x4c3, 0x485, 0x4c3, 0x485, 0x35b, 0x328, 0x35b, 0x328, 0x184, +0x15d, 0x184, 0x15d, 0x2f, 0x13, 0x2f, 0x13, 0xff22, 0xff10, 0xff22, 0xff10, +0xfed2, 0xfec8, 0xfed2, 0xfec8, 0xfe53, 0xfe50, 0xfe53, 0xfe50, 0xfe53, 0xfe50, 0xfdaa, +0xfdab, 0xfdaa, 0xfdab, 0xfd3f, 0xfd43, 0xfd3f, 0xfd43, 0xfb84, 0xfb8a, 0xfb84, 0xfb8a, +0xfacb, 0xfad0, 0xfacb, 0xfad0, 0xfa5c, 0xfa5f, 0xfa5c, 0xfa5f, 0xfa5c, 0xfa5f, 0xfa89, +0xfa88, 0xfa89, 0xfa88, 0xfa36, 0xfa2f, 0xfa36, 0xfa2f, 0xfb68, 0xfb5a, 0xfb68, 0xfb5a, +0xfc30, 0xfc1a, 0xfc30, 0xfc1a, 0xfc35, 0xfc16, 0xfc35, 0xfc16, 0xfc8d, 0xfc65, 0xfc8d, +0xfc65, 0xfc8d, 0xfc65, 0xfbe8, 0xfbb5, 0xfbe8, 0xfbb5, 0xfcd9, 0xfc9b, 0xfcd9, 0xfc9b, +0xfe66, 0xfe1d, 0xfe66, 0xfe1d, 0xa2, 0x4f, 0xa2, 0x4f, 0x210, 0x1b2, 0x210, +0x1b2, 0x210, 0x1b2, 0x27c, 0x214, 0x27c, 0x214, 0x39a, 0x328, 0x39a, 0x328, +0x4b9, 0x43e, 0x4b9, 0x43e, 0x537, 0x4b2, 0x537, 0x4b2, 0x57a, 0x4ec, 0x57a, +0x4ec, 0x59e, 0x506, 0x59e, 0x506, 0x59e, 0x506, 0x664, 0x5c2, 0x664, 0x5c2, +0x6d5, 0x628, 0x6d5, 0x628, 0x6d2, 0x61a, 0x6d2, 0x61a, 0x62e, 0x569, 0x62e, +0x569, 0x58a, 0x4b7, 0x58a, 0x4b7, 0x5ca, 0x4e6, 0x5ca, 0x4e6, 0x5ca, 0x4e6, +0x6d9, 0x5e3, 0x6d9, 0x5e3, 0x732, 0x626, 0x732, 0x626, 0x6c7, 0x5a3, 0x6c7, +0x5a3, 0x6f3, 0x5b5, 0x6f3, 0x5b5, 0x6df, 0x583, 0x6df, 0x583, 0x6df, 0x583, +0x796, 0x619, 0x796, 0x619, 0x83e, 0x69f, 0x83e, 0x69f, 0x90e, 0x749, 0x90e, +0x749, 0xa22, 0x835, 0xa22, 0x835, 0xb16, 0x900, 0xb16, 0x900, 0xbc0, 0x97f, +0xbc0, 0x97f, 0xbc0, 0x97f, 0xd1e, 0xab1, 0xd1e, 0xab1, 0xe88, 0xbf0, 0xe88, +0xbf0, 0xfb4, 0xcf1, 0xfb4, 0xcf1, 0x1126, 0xe38, 0x1126, 0xe38, 0x126b, 0xf55, +0x126b, 0xf55, 0x136a, 0x102f, 0x136a, 0x102f, 0x136a, 0x102f, 0x142a, 0x10cd, 0x142a, +0x10cd, 0x13f8, 0x107e, 0x13f8, 0x107e, 0x12dc, 0xf49, 0x12dc, 0xf49, 0x127d, 0xed6, +0x127d, 0xed6, 0x1312, 0xf5d, 0x1312, 0xf5d, 0x1312, 0xf5d, 0x13fe, 0x1041, 0x13fe, +0x1041, 0x1520, 0x1162, 0x1520, 0x1162, 0x16e6, 0x132d, 0x16e6, 0x132d, 0x172e, 0x1380, +0x172e, 0x1380, 0x16ea, 0x134e, 0x16ea, 0x134e, 0x158a, 0x1205, 0x158a, 0x1205, 0x158a, +0x1205, 0x1535, 0x11cf, 0x1535, 0x11cf, 0x1512, 0x11cf, 0x1512, 0x11cf, 0x14db, 0x11c0, +0x14db, 0x11c0, 0x14e9, 0x11fa, 0x14e9, 0x11fa, 0x13eb, 0x112b, 0x13eb, 0x112b, 0x1284, +0xff7, 0x1284, 0xff7, 0x1284, 0xff7, 0x108d, 0xe34, 0x108d, 0xe34, 0x10b0, 0xe8d, +0x10b0, 0xe8d, 0xf5d, 0xd70, 0xf5d, 0xd70, 0xef4, 0xd3d, 0xef4, 0xd3d, 0xf30, +0xdae, 0xf30, 0xdae, 0xf30, 0xdae, 0xe54, 0xd05, 0xe54, 0xd05, 0xdcf, 0xcb2, +0xdcf, 0xcb2, 0xd4d, 0xc5e, 0xd4d, 0xc5e, 0xd43, 0xc7f, 0xd43, 0xc7f, 0xcba, +0xc1d, 0xcba, 0xc1d, 0xc1d, 0xba3, 0xc1d, 0xba3, 0xc1d, 0xba3, 0xc06, 0xbac, +0xc06, 0xbac, 0xb51, 0xb12, 0xb51, 0xb12, 0x9dc, 0x9b5, 0x9dc, 0x9b5, 0x842, +0x82f, 0x842, 0x82f, 0x6ee, 0x6eb, 0x6ee, 0x6eb, 0x6b8, 0x6c1, 0x6b8, 0x6c1, +0x6b8, 0x6c1, 0x6e7, 0x6fa, 0x6e7, 0x6fa, 0x71c, 0x735, 0x71c, 0x735, 0x5ef, +0x60d, 0x5ef, 0x60d, 0x4a1, 0x4c1, 0x4a1, 0x4c1, 0x37f, 0x3a0, 0x37f, 0x3a0, +0x37f, 0x3a0, 0x2da, 0x2fa, 0x2da, 0x2fa, 0x1d3, 0x1f1, 0x1d3, 0x1f1, 0xfe, +0x11b, 0xfe, 0x11b, 0x38, 0x52, 0x38, 0x52, 0xff4d, 0xff65, 0xff4d, 0xff65, +0xff4b, 0xff61, 0xff4b, 0xff61, 0xff4b, 0xff61, 0xfecc, 0xfedf, 0xfecc, 0xfedf, 0xfe14, +0xfe26, 0xfe14, 0xfe26, 0xfddc, 0xfded, 0xfddc, 0xfded, 0xfe17, 0xfe29, 0xfe17, 0xfe29, +0xfddc, 0xfdee, 0xfddc, 0xfdee, 0xfe0f, 0xfe23, 0xfe0f, 0xfe23, 0xfe0f, 0xfe23, 0xfe26, +0xfe3c, 0xfe26, 0xfe3c, 0xfe1b, 0xfe34, 0xfe1b, 0xfe34, 0xfdfa, 0xfe18, 0xfdfa, 0xfe18, +0xfe22, 0xfe44, 0xfe22, 0xfe44, 0xfe21, 0xfe48, 0xfe21, 0xfe48, 0xfe21, 0xfe48, 0xfe88, +0xfeb5, 0xfe88, 0xfeb5, 0xfebd, 0xfeef, 0xfebd, 0xfeef, 0xfe73, 0xfeac, 0xfe73, 0xfeac, +0xfde1, 0xfe21, 0xfde1, 0xfe21, 0xfd88, 0xfdd0, 0xfd88, 0xfdd0, 0xfd0d, 0xfd5c, 0xfd0d, +0xfd5c, 0xfd0d, 0xfd5c, 0xfd06, 0xfd5d, 0xfd06, 0xfd5d, 0xfce1, 0xfd40, 0xfce1, 0xfd40, +0xfc00, 0xfc68, 0xfc00, 0xfc68, 0xfc00, 0xfc72, 0xfc00, 0xfc72, 0xfb73, 0xfbee, 0xfb73, +0xfbee, 0xfb85, 0xfc0a, 0xfb85, 0xfc0a, 0xfb85, 0xfc0a, 0xfa8b, 0xfb1b, 0xfa8b, 0xfb1b, +0xfa55, 0xfaef, 0xfa55, 0xfaef, 0xf9c9, 0xfa6d, 0xf9c9, 0xfa6d, 0xf9a1, 0xfa51, 0xf9a1, +0xfa51, 0xf8c6, 0xf981, 0xf8c6, 0xf981, 0xf8c6, 0xf981, 0xf79b, 0xf862, 0xf79b, 0xf862, +0xf78c, 0xf85f, 0xf78c, 0xf85f, 0xf5f9, 0xf6d7, 0xf5f9, 0xf6d7, 0xf646, 0xf730, 0xf646, +0xf730, 0xf69f, 0xf795, 0xf69f, 0xf795, 0xf681, 0xf783, 0xf681, 0xf783, 0xf681, 0xf783, +0xf6d3, 0xf7e0, 0xf6d3, 0xf7e0, 0xf74d, 0xf866, 0xf74d, 0xf866, 0xf746, 0xf86a, 0xf746, +0xf86a, 0xf71a, 0xf849, 0xf71a, 0xf849, 0xf725, 0xf85e, 0xf725, 0xf85e, 0xf77d, 0xf8c0, +0xf77d, 0xf8c0, 0xf77d, 0xf8c0, 0xf732, 0xf880, 0xf732, 0xf880, 0xf731, 0xf889, 0xf731, +0xf889, 0xf6c1, 0xf822, 0xf6c1, 0xf822, 0xf647, 0xf7b3, 0xf647, 0xf7b3, 0xf5d4, 0xf74a, +0xf5d4, 0xf74a, 0xf5d4, 0xf74a, 0xf4d0, 0xf64f, 0xf4d0, 0xf64f, 0xf3df, 0xf568, 0xf3df, +0xf568, 0xf249, 0xf3de, 0xf249, 0xf3de, 0xf1cd, 0xf36c, 0xf1cd, 0xf36c, 0xf223, 0xf3cd, +0xf223, 0xf3cd, 0xf295, 0xf44c, 0xf295, 0xf44c, 0xf295, 0xf44c, 0xf1fb, 0xf3be, 0xf1fb, +0xf3be, 0xf141, 0xf312, 0xf141, 0xf312, 0xefe5, 0xf1c3, 0xefe5, 0xf1c3, 0xef36, 0xf123, +0xef36, 0xf123, 0xef99, 0xf194, 0xef99, 0xf194, 0xef69, 0xf173, 0xef69, 0xf173, 0xef69, +0xf173, 0xeed8, 0xf0f1, 0xeed8, 0xf0f1, 0xeeb3, 0xf0db, 0xeeb3, 0xf0db, 0xee0a, 0xf041, +0xee0a, 0xf041, 0xed84, 0xefca, 0xed84, 0xefca, 0xedb4, 0xf007, 0xedb4, 0xf007, 0xedb4, +0xf007, 0xeda3, 0xf003, 0xeda3, 0xf003, 0xed42, 0xefae, 0xed42, 0xefae, 0xed30, 0xefa6, +0xed30, 0xefa6, 0xed78, 0xeff7, 0xed78, 0xeff7, 0xed2b, 0xefb0, 0xed2b, 0xefb0, 0xed6f, +0xeffa, 0xed6f, 0xeffa, 0xed6f, 0xeffa, 0xed8c, 0xf01a, 0xed8c, 0xf01a, 0xedcd, 0xf05b, +0xedcd, 0xf05b, 0xed85, 0xf012, 0xed85, 0xf012, 0xed69, 0xeff3, 0xed69, 0xeff3, 0xeca2, +0xef27, 0xeca2, 0xef27, 0xeca2, 0xef27, 0xec58, 0xeed4, 0xec58, 0xeed4, 0xebf4, 0xee68, +0xebf4, 0xee68, 0xebe3, 0xee4c, 0xebe3, 0xee4c, 0xebdd, 0xee3c, 0xebdd, 0xee3c, 0xec48, +0xee9a, 0xec48, 0xee9a, 0xed55, 0xef9c, 0xed55, 0xef9c, 0xed55, 0xef9c, 0xecf7, 0xef32, +0xecf7, 0xef32, 0xec8d, 0xeebd, 0xec8d, 0xeebd, 0xeb3d, 0xed63, 0xeb3d, 0xed63, 0xeb40, +0xed5d, 0xeb40, 0xed5d, 0xea0c, 0xec23, 0xea0c, 0xec23, 0xea14, 0xec25, 0xea14, 0xec25, +0xea14, 0xec25, 0xea66, 0xec75, 0xea66, 0xec75, 0xea49, 0xec59, 0xea49, 0xec59, 0xeb97, +0xedaa, 0xeb97, 0xedaa, 0xebec, 0xee05, 0xebec, 0xee05, 0xebd4, 0xedf5, 0xebd4, 0xedf5, +0xebd4, 0xedf5, 0xec03, 0xee2f, 0xec03, 0xee2f, 0xec8f, 0xeec8, 0xec8f, 0xeec8, 0xed89, +0xefd2, 0xed89, 0xefd2, 0xeed3, 0xf12d, 0xeed3, 0xf12d, 0xf02c, 0xf298, 0xf02c, 0xf298, +0xf131, 0xf3af, 0xf131, 0xf3af, 0xf131, 0xf3af, 0xf12a, 0xf3b9, 0xf12a, 0xf3b9, 0xf190, +0xf430, 0xf190, 0xf430, 0xf124, 0xf3d3, 0xf124, 0xf3d3, 0xf1fd, 0xf4b9, 0xf1fd, 0xf4b9, +0xf35d, 0xf623, 0xf35d, 0xf623, 0xf46d, 0xf738, 0xf46d, 0xf738, 0xf46d, 0xf738, 0xf4e7, +0xf7b3, 0xf4e7, 0xf7b3, 0xf4b3, 0xf77a, 0xf4b3, 0xf77a, 0xf475, 0xf732, 0xf475, 0xf732, +0xf44c, 0xf6f9, 0xf44c, 0xf6f9, 0xf41b, 0xf6b1, 0xf41b, 0xf6b1, 0xf41b, 0xf6b1, 0xf3f8, +0xf671, 0xf3f8, 0xf671, 0xf446, 0xf69a, 0xf446, 0xf69a, 0xf414, 0xf63d, 0xf414, 0xf63d, +0xf46b, 0xf662, 0xf46b, 0xf662, 0xf4d2, 0xf691, 0xf4d2, 0xf691, 0xf4fb, 0xf67c, 0xf4fb, +0xf67c, 0xf4fb, 0xf67c, 0xf5b9, 0xf6f7, 0xf5b9, 0xf6f7, 0xf762, 0xf859, 0xf762, 0xf859, +0xf837, 0xf8e2, 0xf837, 0xf8e2, 0xf93e, 0xf99b, 0xf93e, 0xf99b, 0xfa25, 0xfa32, 0xfa25, +0xfa32, 0xfb35, 0xfaf1, 0xfb35, 0xfaf1, 0xfb35, 0xfaf1, 0xfc54, 0xfbbf, 0xfc54, 0xfbbf, +0xfe84, 0xfd9e, 0xfe84, 0xfd9e, 0x58, 0xff23, 0x58, 0xff23, 0x1ba, 0x3a, 0x1ba, +0x3a, 0x33c, 0x175, 0x33c, 0x175, 0x33c, 0x175, 0x407, 0x1fd, 0x407, 0x1fd, +0x4ef, 0x2a6, 0x4ef, 0x2a6, 0x602, 0x381, 0x602, 0x381, 0x7a4, 0x4f1, 0x7a4, +0x4f1, 0x88c, 0x5ad, 0x88c, 0x5ad, 0xa44, 0x741, 0xa44, 0x741, 0xa44, 0x741, +0xb9e, 0x87d, 0xb9e, 0x87d, 0xcf2, 0x9ba, 0xcf2, 0x9ba, 0xd0c, 0x9c4, 0xd0c, +0x9c4, 0xdce, 0xa7d, 0xdce, 0xa7d, 0xdff, 0xaab, 0xdff, 0xaab, 0xdd8, 0xa88, +0xdd8, 0xa88, 0xdd8, 0xa88, 0xdb2, 0xa69, 0xdb2, 0xa69, 0xdbb, 0xa80, 0xdbb, +0xa80, 0xe6e, 0xb43, 0xe6e, 0xb43, 0xdb0, 0xa9a, 0xdb0, 0xa9a, 0xe5b, 0xb5d, +0xe5b, 0xb5d, 0xe5b, 0xb5d, 0xda6, 0xac1, 0xda6, 0xac1, 0xd3b, 0xa72, 0xd3b, +0xa72, 0xde9, 0xb3c, 0xde9, 0xb3c, 0xdfc, 0xb6c, 0xdfc, 0xb6c, 0xd7b, 0xb08, +0xd7b, 0xb08, 0xd50, 0xaf9, 0xd50, 0xaf9, 0xd50, 0xaf9, 0xdb5, 0xb7b, 0xdb5, +0xb7b, 0xeab, 0xc8c, 0xeab, 0xc8c, 0xf29, 0xd24, 0xf29, 0xd24, 0xfe9, 0xdfc, +0xfe9, 0xdfc, 0x1025, 0xe4f, 0x1025, 0xe4f, 0x1089, 0xec8, 0x1089, 0xec8, 0x1089, +0xec8, 0x10fd, 0xf50, 0x10fd, 0xf50, 0x105b, 0xec1, 0x105b, 0xec1, 0x10af, 0xf26, +0x10af, 0xf26, 0x1108, 0xf8f, 0x1108, 0xf8f, 0x1181, 0x1017, 0x1181, 0x1017, 0x1181, +0x1017, 0x114d, 0xff1, 0x114d, 0xff1, 0x10cc, 0xf7d, 0x10cc, 0xf7d, 0xf98, 0xe57, +0xf98, 0xe57, 0xebb, 0xd86, 0xebb, 0xd86, 0xd39, 0xc11, 0xd39, 0xc11, 0xba2, +0xa87, 0xba2, 0xa87, 0xba2, 0xa87, 0xa4f, 0x941, 0xa4f, 0x941, 0x98c, 0x88b, +0x98c, 0x88b, 0x9af, 0x8bc, 0x9af, 0x8bc, 0x953, 0x86d, 0x953, 0x86d, 0x7bf, +0x6e7, 0x7bf, 0x6e7, 0x651, 0x587, 0x651, 0x587, 0x651, 0x587, 0x4ff, 0x443, +0x4ff, 0x443, 0x339, 0x28c, 0x339, 0x28c, 0x1ff, 0x160, 0x1ff, 0x160, 0xf6, +0x65, 0xf6, 0x65, 0x49, 0xffc6, 0x49, 0xffc6, 0x49, 0xffc6, 0xffa4, 0xff2f, +0xffa4, 0xff2f, 0xff90, 0xff28, 0xff90, 0xff28, 0xfe29, 0xfdcf, 0xfe29, 0xfdcf, 0xfd54, +0xfd05, 0xfd54, 0xfd05, 0xfc9e, 0xfc5b, 0xfc9e, 0xfc5b, 0xfc54, 0xfc1b, 0xfc54, 0xfc1b, +0xfc54, 0xfc1b, 0xfbfb, 0xfbcc, 0xfbfb, 0xfbcc, 0xfc1e, 0xfbf8, 0xfc1e, 0xfbf8, 0xfb97, +0xfb79, 0xfb97, 0xfb79, 0xfb02, 0xfaea, 0xfb02, 0xfaea, 0xfb7a, 0xfb68, 0xfb7a, 0xfb68, +0xfc09, 0xfbfb, 0xfc09, 0xfbfb, 0xfc09, 0xfbfb, 0xfd1a, 0xfd10, 0xfd1a, 0xfd10, 0xfd53, +0xfd4b, 0xfd53, 0xfd4b, 0xfe9b, 0xfe94, 0xfe9b, 0xfe94, 0xfee5, 0xfedf, 0xfee5, 0xfedf, +0xffbe, 0xffb6, 0xffbe, 0xffb6, 0xffbe, 0xffb6, 0x1b, 0x11, 0x1b, 0x11, 0x150, +0x143, 0x150, 0x143, 0x1ca, 0x1b8, 0x1ca, 0x1b8, 0x1ee, 0x1d7, 0x1ee, 0x1d7, +0x342, 0x324, 0x342, 0x324, 0x30f, 0x2e9, 0x30f, 0x2e9, 0x30f, 0x2e9, 0x34b, +0x31c, 0x34b, 0x31c, 0x3ed, 0x3b3, 0x3ed, 0x3b3, 0x424, 0x3de, 0x424, 0x3de, +0x48a, 0x436, 0x48a, 0x436, 0x53c, 0x4d9, 0x53c, 0x4d9, 0x5a4, 0x52f, 0x5a4, +0x52f, 0x5a4, 0x52f, 0x5cd, 0x546, 0x5cd, 0x546, 0x5ec, 0x550, 0x5ec, 0x550, +0x6b0, 0x5fd, 0x6b0, 0x5fd, 0x6c4, 0x5f9, 0x6c4, 0x5f9, 0x7cf, 0x6eb, 0x7cf, +0x6eb, 0x7cf, 0x6eb, 0x895, 0x794, 0x895, 0x794, 0x9a9, 0x88b, 0x9a9, 0x88b, +0xabe, 0x980, 0xabe, 0x980, 0xc17, 0xab8, 0xc17, 0xab8, 0xd1f, 0xb9e, 0xd1f, +0xb9e, 0xdcc, 0xc28, 0xdcc, 0xc28, 0xdcc, 0xc28, 0xe8d, 0xcc5, 0xe8d, 0xcc5, +0xf5b, 0xd6d, 0xf5b, 0xd6d, 0x113e, 0xf2c, 0x113e, 0xf2c, 0x1280, 0x1049, 0x1280, +0x1049, 0x141e, 0x11c2, 0x141e, 0x11c2, 0x141e, 0x11c2, 0x14b2, 0x1232, 0x14b2, 0x1232, +0x1516, 0x1274, 0x1516, 0x1274, 0x1571, 0x12af, 0x1571, 0x12af, 0x156f, 0x128d, 0x156f, +0x128d, 0x1574, 0x1276, 0x1574, 0x1276, 0x16bd, 0x13a6, 0x16bd, 0x13a6, 0x16bd, 0x13a6, +0x17f5, 0x14c7, 0x17f5, 0x14c7, 0x1900, 0x15c0, 0x1900, 0x15c0, 0x1963, 0x1614, 0x1963, +0x1614, 0x1933, 0x15da, 0x1933, 0x15da, 0x18f3, 0x1593, 0x18f3, 0x1593, 0x1987, 0x1625, +0x1987, 0x1625, 0x1987, 0x1625, 0x1a01, 0x16a1, 0x1a01, 0x16a1, 0x1940, 0x15e7, 0x1940, +0x15e7, 0x1887, 0x1539, 0x1887, 0x1539, 0x1769, 0x142b, 0x1769, 0x142b, 0x1651, 0x1327, +0x1651, 0x1327, 0x1651, 0x1327, 0x14db, 0x11c8, 0x14db, 0x11c8, 0x13f7, 0x10fe, 0x13f7, +0x10fe, 0x120d, 0xf33, 0x120d, 0xf33, 0x116e, 0xeb5, 0x116e, 0xeb5, 0x10b1, 0xe1b, +0x10b1, 0xe1b, 0x1042, 0xdd2, 0x1042, 0xdd2, 0x1042, 0xdd2, 0xf21, 0xcd8, 0xf21, +0xcd8, 0xe57, 0xc35, 0xe57, 0xc35, 0xe83, 0xc89, 0xe83, 0xc89, 0xe38, 0xc66, +0xe38, 0xc66, 0xe24, 0xc7b, 0xe24, 0xc7b, 0xcab, 0xb28, 0xcab, 0xb28, 0xcab, +0xb28, 0xb98, 0xa3b, 0xb98, 0xa3b, 0x95b, 0x822, 0x95b, 0x822, 0x7e9, 0x6d3, +0x7e9, 0x6d3, 0x71c, 0x626, 0x71c, 0x626, 0x670, 0x598, 0x670, 0x598, 0x670, +0x598, 0x698, 0x5dc, 0x698, 0x5dc, 0x6e1, 0x63f, 0x6e1, 0x63f, 0x61a, 0x58e, +0x61a, 0x58e, 0x56a, 0x4f3, 0x56a, 0x4f3, 0x495, 0x431, 0x495, 0x431, 0x3c6, +0x372, 0x3c6, 0x372, 0x3c6, 0x372, 0x2b2, 0x26d, 0x2b2, 0x26d, 0x219, 0x1e1, +0x219, 0x1e1, 0x1ca, 0x19d, 0x1ca, 0x19d, 0x115, 0xf1, 0x115, 0xf1, 0x8a, +0x70, 0x8a, 0x70, 0xff5e, 0xff4b, 0xff5e, 0xff4b, 0xff5e, 0xff4b, 0xfede, 0xfed3, +0xfede, 0xfed3, 0xfed6, 0xfed2, 0xfed6, 0xfed2, 0xff77, 0xff7a, 0xff77, 0xff7a, 0xff2a, +0xff34, 0xff2a, 0xff34, 0xff47, 0xff58, 0xff47, 0xff58, 0xff47, 0xff58, 0xfed3, 0xfeec, +0xfed3, 0xfeec, 0xfecd, 0xfeee, 0xfecd, 0xfeee, 0xfed0, 0xfef9, 0xfed0, 0xfef9, 0xfec6, +0xfef7, 0xfec6, 0xfef7, 0xff58, 0xff94, 0xff58, 0xff94, 0xff65, 0xffaa, 0xff65, 0xffaa, +0xff65, 0xffaa, 0xff55, 0xffa5, 0xff55, 0xffa5, 0xff99, 0xfff3, 0xff99, 0xfff3, 0xff85, +0xffeb, 0xff85, 0xffeb, 0xff4f, 0xffbf, 0xff4f, 0xffbf, 0xff86, 0x2, 0xff86, 0x2, +0xff3f, 0xffc7, 0xff3f, 0xffc7, 0xff3f, 0xffc7, 0xfeeb, 0xff7d, 0xfeeb, 0xff7d, 0xfdd3, +0xfe70, 0xfdd3, 0xfe70, 0xfd08, 0xfdb0, 0xfd08, 0xfdb0, 0xfbe6, 0xfc98, 0xfbe6, 0xfc98, +0xfbdd, 0xfc9a, 0xfbdd, 0xfc9a, 0xfbdd, 0xfc9a, 0xfb64, 0xfc2a, 0xfb64, 0xfc2a, 0xfb20, +0xfbf0, 0xfb20, 0xfbf0, 0xfb27, 0xfbff, 0xfb27, 0xfbff, 0xfaed, 0xfbce, 0xfaed, 0xfbce, +0xf9f5, 0xfade, 0xf9f5, 0xfade, 0xf914, 0xfa05, 0xf914, 0xfa05, 0xf914, 0xfa05, 0xf78f, +0xf888, 0xf78f, 0xf888, 0xf587, 0xf688, 0xf587, 0xf688, 0xf558, 0xf661, 0xf558, 0xf661, +0xf551, 0xf662, 0xf551, 0xf662, 0xf5dc, 0xf6f7, 0xf5dc, 0xf6f7, 0xf4ef, 0xf615, 0xf4ef, +0xf615, 0xf4ef, 0xf615, 0xf463, 0xf593, 0xf463, 0xf593, 0xf377, 0xf4b5, 0xf377, 0xf4b5, +0xf339, 0xf484, 0xf339, 0xf484, 0xf2de, 0xf439, 0xf2de, 0xf439, 0xf274, 0xf3e0, 0xf274, +0xf3e0, 0xf274, 0xf3e0, 0xf2c9, 0xf449, 0xf2c9, 0xf449, 0xf287, 0xf41d, 0xf287, 0xf41d, +0xf262, 0xf410, 0xf262, 0xf410, 0xf1e1, 0xf3a8, 0xf1e1, 0xf3a8, 0xf099, 0xf27c, 0xf099, +0xf27c, 0xefdc, 0xf1de, 0xefdc, 0xf1de, 0xefdc, 0xf1de, 0xef5d, 0xf17f, 0xef5d, 0xf17f, +0xeeb4, 0xf0f8, 0xeeb4, 0xf0f8, 0xeeb6, 0xf11d, 0xeeb6, 0xf11d, 0xee41, 0xf0ce, 0xee41, +0xf0ce, 0xee51, 0xf105, 0xee51, 0xf105, 0xedd7, 0xf0b2, 0xedd7, 0xf0b2, 0xedd7, 0xf0b2, +0xee02, 0xf105, 0xee02, 0xf105, 0xee05, 0xf130, 0xee05, 0xf130, 0xee8e, 0xf1e1, 0xee8e, +0xf1e1, 0xeea0, 0xf219, 0xeea0, 0xf219, 0xeddc, 0xf17a, 0xeddc, 0xf17a, 0xeddc, 0xf17a, +0xed3b, 0xf0fd, 0xed3b, 0xf0fd, 0xed52, 0xf135, 0xed52, 0xf135, 0xed9d, 0xf19e, 0xed9d, +0xf19e, 0xedbe, 0xf1da, 0xedbe, 0xf1da, 0xede7, 0xf21a, 0xede7, 0xf21a, 0xed60, 0xf1a6, +0xed60, 0xf1a6, 0xed60, 0xf1a6, 0xedb2, 0xf205, 0xedb2, 0xf205, 0xed3b, 0xf199, 0xed3b, +0xf199, 0xec93, 0xf0f5, 0xec93, 0xf0f5, 0xec41, 0xf0a2, 0xec41, 0xf0a2, 0xec1f, 0xf07b, +0xec1f, 0xf07b, 0xec8f, 0xf0e1, 0xec8f, 0xf0e1, 0xec8f, 0xf0e1, 0xedc3, 0xf205, 0xedc3, +0xf205, 0xedf8, 0xf225, 0xedf8, 0xf225, 0xee4b, 0xf260, 0xee4b, 0xf260, 0xee35, 0xf22d, +0xee35, 0xf22d, 0xed97, 0xf170, 0xed97, 0xf170, 0xed97, 0xf170, 0xec3e, 0xeff4, 0xec3e, +0xeff4, 0xeb56, 0xeee7, 0xeb56, 0xeee7, 0xeb4f, 0xeeba, 0xeb4f, 0xeeba, 0xec01, 0xef45, +0xec01, 0xef45, 0xeda5, 0xf0c2, 0xeda5, 0xf0c2, 0xee78, 0xf16e, 0xee78, 0xf16e, 0xee78, +0xf16e, 0xeed2, 0xf1a3, 0xeed2, 0xf1a3, 0xee6d, 0xf11a, 0xee6d, 0xf11a, 0xedc4, 0xf050, +0xedc4, 0xf050, 0xec69, 0xeed8, 0xec69, 0xeed8, 0xec14, 0xee68, 0xec14, 0xee68, 0xeafe, +0xed3d, 0xeafe, 0xed3d, 0xeafe, 0xed3d, 0xeaec, 0xed19, 0xeaec, 0xed19, 0xeb0e, 0xed2e, +0xeb0e, 0xed2e, 0xeb42, 0xed5a, 0xeb42, 0xed5a, 0xeb6e, 0xed82, 0xeb6e, 0xed82, 0xeb30, +0xed45, 0xeb30, 0xed45, 0xeb30, 0xed45, 0xeba6, 0xedc0, 0xeba6, 0xedc0, 0xebfd, 0xee20, +0xebfd, 0xee20, 0xed77, 0xefa5, 0xed77, 0xefa5, 0xee20, 0xf05d, 0xee20, 0xf05d, 0xeea4, +0xf0f2, 0xeea4, 0xf0f2, 0xeefc, 0xf15c, 0xeefc, 0xf15c, 0xeefc, 0xf15c, 0xef1d, 0xf18f, +0xef1d, 0xf18f, 0xeffe, 0xf283, 0xeffe, 0xf283, 0xf115, 0xf3aa, 0xf115, 0xf3aa, 0xf165, +0xf40a, 0xf165, 0xf40a, 0xf1ff, 0xf4b0, 0xf1ff, 0xf4b0, 0xf1ff, 0xf4b0, 0xf20d, 0xf4c7, +0xf20d, 0xf4c7, 0xf286, 0xf545, 0xf286, 0xf545, 0xf2bb, 0xf57a, 0xf2bb, 0xf57a, 0xf2f1, +0xf5aa, 0xf2f1, 0xf5aa, 0xf359, 0xf608, 0xf359, 0xf608, 0xf3a2, 0xf63f, 0xf3a2, 0xf63f, +0xf3a2, 0xf63f, 0xf43a, 0xf6bf, 0xf43a, 0xf6bf, 0xf464, 0xf6cb, 0xf464, 0xf6cb, 0xf49b, +0xf6de, 0xf49b, 0xf6de, 0xf46c, 0xf684, 0xf46c, 0xf684, 0xf480, 0xf668, 0xf480, 0xf668, +0xf545, 0xf6f7, 0xf545, 0xf6f7, 0xf545, 0xf6f7, 0xf6e8, 0xf85f, 0xf6e8, 0xf85f, 0xf79f, +0xf8d7, 0xf79f, 0xf8d7, 0xf8b7, 0xf9ad, 0xf8b7, 0xf9ad, 0xf912, 0xf9c2, 0xf912, 0xf9c2, +0xf9d6, 0xfa3f, 0xf9d6, 0xfa3f, 0xf9d6, 0xfa3f, 0xfbcd, 0xfbed, 0xfbcd, 0xfbed, 0xfddb, +0xfdb2, 0xfddb, 0xfdb2, 0xffbc, 0xff4c, 0xffbc, 0xff4c, 0x162, 0xab, 0x162, 0xab, +0x238, 0x13c, 0x238, 0x13c, 0x303, 0x1c6, 0x303, 0x1c6, 0x303, 0x1c6, 0x490, +0x314, 0x490, 0x314, 0x584, 0x3cf, 0x584, 0x3cf, 0x735, 0x54b, 0x735, 0x54b, +0x930, 0x716, 0x930, 0x716, 0xb15, 0x8d1, 0xb15, 0x8d1, 0xbdf, 0x976, 0xbdf, +0x976, 0xbdf, 0x976, 0xc61, 0x9d9, 0xc61, 0x9d9, 0xccb, 0xa2b, 0xccb, 0xa2b, +0xdc8, 0xb15, 0xdc8, 0xb15, 0xee9, 0xc29, 0xee9, 0xc29, 0xf96, 0xccf, 0xf96, +0xccf, 0xf96, 0xccf, 0xf98, 0xcd0, 0xf98, 0xcd0, 0x1037, 0xd71, 0x1037, 0xd71, +0x1046, 0xd88, 0x1046, 0xd88, 0x1033, 0xd80, 0x1033, 0xd80, 0x1004, 0xd60, 0x1004, +0xd60, 0xf17, 0xc85, 0xf17, 0xc85, 0xf17, 0xc85, 0xef7, 0xc79, 0xef7, 0xc79, +0xe93, 0xc2c, 0xe93, 0xc2c, 0xef3, 0xca3, 0xef3, 0xca3, 0xe51, 0xc1a, 0xe51, +0xc1a, 0xdb4, 0xb95, 0xdb4, 0xb95, 0xd0a, 0xb04, 0xd0a, 0xb04, 0xd0a, 0xb04, +0xd4b, 0xb5c, 0xd4b, 0xb5c, 0xe01, 0xc29, 0xe01, 0xc29, 0xe21, 0xc5e, 0xe21, +0xc5e, 0xe9c, 0xced, 0xe9c, 0xced, 0xf15, 0xd79, 0xf15, 0xd79, 0xf15, 0xd79, +0xeb8, 0xd2c, 0xeb8, 0xd2c, 0xeae, 0xd30, 0xeae, 0xd30, 0xec0, 0xd4f, 0xec0, +0xd4f, 0xe98, 0xd32, 0xe98, 0xd32, 0xf53, 0xdf6, 0xf53, 0xdf6, 0x100c, 0xeb6, +0x100c, 0xeb6, 0x100c, 0xeb6, 0x10a4, 0xf54, 0x10a4, 0xf54, 0xfd6, 0xe8b, 0xfd6, +0xe8b, 0xeb9, 0xd73, 0xeb9, 0xd73, 0xd2e, 0xbec, 0xd2e, 0xbec, 0xc19, 0xadb, +0xc19, 0xadb, 0xbe6, 0xaad, 0xbe6, 0xaad, 0xbe6, 0xaad, 0xc3f, 0xb0b, 0xc3f, +0xb0b, 0xc44, 0xb16, 0xc44, 0xb16, 0xbbc, 0xa97, 0xbbc, 0xa97, 0xa42, 0x925, +0xa42, 0x925, 0x92f, 0x81d, 0x92f, 0x81d, 0x92f, 0x81d, 0x801, 0x6fc, 0x801, +0x6fc, 0x6b7, 0x5c1, 0x6b7, 0x5c1, 0x625, 0x53f, 0x625, 0x53f, 0x4c6, 0x3f2, +0x4c6, 0x3f2, 0x3a8, 0x2e8, 0x3a8, 0x2e8, 0x2af, 0x204, 0x2af, 0x204, 0x2af, +0x204, 0x150, 0xbc, 0x150, 0xbc, 0xffcb, 0xff4e, 0xffcb, 0xff4e, 0xff88, 0xff22, +0xff88, 0xff22, 0xfe79, 0xfe2a, 0xfe79, 0xfe2a, 0xfe28, 0xfdf0, 0xfe28, 0xfdf0, 0xfe01, +0xfddf, 0xfe01, 0xfddf, 0xfe01, 0xfddf, 0xfd39, 0xfd2a, 0xfd39, 0xfd2a, 0xfcc6, 0xfcca, +0xfcc6, 0xfcca, 0xfd04, 0xfd18, 0xfd04, 0xfd18, 0xfd51, 0xfd71, 0xfd51, 0xfd71, 0xfd6e, +0xfd99, 0xfd6e, 0xfd99, 0xfd6e, 0xfd99, 0xfdd1, 0xfe04, 0xfdd1, 0xfe04, 0xfdd9, 0xfe0f, +0xfdd9, 0xfe0f, 0xfdf8, 0xfe2e, 0xfdf8, 0xfe2e, 0xfe63, 0xfe96, 0xfe63, 0xfe96, 0xff10, +0xff3c, 0xff10, 0xff3c, 0xff88, 0xffaa, 0xff88, 0xffaa, 0xff88, 0xffaa, 0xeb, 0x100, +0xeb, 0x100, 0x197, 0x19d, 0x197, 0x19d, 0x295, 0x289, 0x295, 0x289, 0x259, +0x238, 0x259, 0x238, 0x1b7, 0x180, 0x1b7, 0x180, 0x198, 0x14a, 0x198, 0x14a, +0x198, 0x14a, 0x1a3, 0x13c, 0x1a3, 0x13c, 0x27f, 0x1ff, 0x27f, 0x1ff, 0x2f3, +0x259, 0x2f3, 0x259, 0x34e, 0x29a, 0x34e, 0x29a, 0x36f, 0x2a1, 0x36f, 0x2a1, +0x36f, 0x2a1, 0x39b, 0x2b3, 0x39b, 0x2b3, 0x33c, 0x23a, 0x33c, 0x23a, 0x281, +0x164, 0x281, 0x164, 0x2b5, 0x17f, 0x2b5, 0x17f, 0x36d, 0x21c, 0x36d, 0x21c, +0x429, 0x2bd, 0x429, 0x2bd, 0x429, 0x2bd, 0x5b7, 0x431, 0x5b7, 0x431, 0x5e5, +0x443, 0x5e5, 0x443, 0x5fa, 0x43c, 0x5fa, 0x43c, 0x668, 0x48d, 0x668, 0x48d, +0x78d, 0x594, 0x78d, 0x594, 0x884, 0x66a, 0x884, 0x66a, 0x884, 0x66a, 0x9a1, +0x767, 0x9a1, 0x767, 0xb7e, 0x922, 0xb7e, 0x922, 0xcea, 0xa6b, 0xcea, 0xa6b, +0xe5e, 0xbbc, 0xe5e, 0xbbc, 0xfde, 0xd18, 0xfde, 0xd18, 0xfde, 0xd18, 0x1129, +0xe3f, 0x1129, 0xe3f, 0x11b9, 0xeac, 0x11b9, 0xeac, 0x126b, 0xf3c, 0x126b, 0xf3c, +0x12a7, 0xf58, 0x12a7, 0xf58, 0x13b5, 0x1048, 0x13b5, 0x1048, 0x14d2, 0x1149, 0x14d2, +0x1149, 0x14d2, 0x1149, 0x15fe, 0x125e, 0x15fe, 0x125e, 0x16d1, 0x131d, 0x16d1, 0x131d, +0x174c, 0x1389, 0x174c, 0x1389, 0x186d, 0x14a0, 0x186d, 0x14a0, 0x19f3, 0x1621, 0x19f3, +0x1621, 0x1a34, 0x1663, 0x1a34, 0x1663, 0x1a34, 0x1663, 0x19fc, 0x1632, 0x19fc, 0x1632, +0x1951, 0x1593, 0x1951, 0x1593, 0x17a5, 0x13f9, 0x17a5, 0x13f9, 0x16a6, 0x1311, 0x16a6, +0x1311, 0x1642, 0x12c8, 0x1642, 0x12c8, 0x1642, 0x12c8, 0x15c5, 0x126b, 0x15c5, 0x126b, +0x153a, 0x1203, 0x153a, 0x1203, 0x1529, 0x1218, 0x1529, 0x1218, 0x1380, 0x1096, 0x1380, +0x1096, 0x119e, 0xedd, 0x119e, 0xedd, 0xff1, 0xd59, 0xff1, 0xd59, 0xff1, 0xd59, +0xf54, 0xce4, 0xf54, 0xce4, 0xf0f, 0xcc6, 0xf0f, 0xcc6, 0xfb6, 0xd91, 0xfb6, +0xd91, 0xf73, 0xd70, 0xf73, 0xd70, 0xe5e, 0xc7a, 0xe5e, 0xc7a, 0xe5e, 0xc7a, +0xd87, 0xbbe, 0xd87, 0xbbe, 0xbd4, 0xa24, 0xbd4, 0xa24, 0xb07, 0x96b, 0xb07, +0x96b, 0x975, 0x7ea, 0x975, 0x7ea, 0x890, 0x713, 0x890, 0x713, 0x792, 0x620, +0x792, 0x620, 0x792, 0x620, 0x6d2, 0x569, 0x6d2, 0x569, 0x67f, 0x51e, 0x67f, +0x51e, 0x5aa, 0x44f, 0x5aa, 0x44f, 0x4bf, 0x36b, 0x4bf, 0x36b, 0x406, 0x2b8, +0x406, 0x2b8, 0x421, 0x2db, 0x421, 0x2db, 0x421, 0x2db, 0x391, 0x256, 0x391, +0x256, 0x205, 0xd7, 0x205, 0xd7, 0x130, 0x11, 0x130, 0x11, 0xffb3, 0xfea7, +0xffb3, 0xfea7, 0xfec5, 0xfdcf, 0xfec5, 0xfdcf, 0xfec5, 0xfdcf, 0xfe4b, 0xfd70, 0xfe4b, +0xfd70, 0xfd8c, 0xfcce, 0xfd8c, 0xfcce, 0xfd37, 0xfc9a, 0xfd37, 0xfc9a, 0xfd2b, 0xfcb2, +0xfd2b, 0xfcb2, 0xfda8, 0xfd55, 0xfda8, 0xfd55, 0xfd5c, 0xfd32, 0xfd5c, 0xfd32, 0xfd5c, +0xfd32, 0xfd76, 0xfd76, 0xfd76, 0xfd76, 0xfd33, 0xfd5d, 0xfd33, 0xfd5d, 0xfd34, 0xfd89, +0xfd34, 0xfd89, 0xfdcc, 0xfe4a, 0xfdcc, 0xfe4a, 0xfeff, 0xffa6, 0xfeff, 0xffa6, 0xff4e, +0x1a, 0xff4e, 0x1a, 0xff4e, 0x1a, 0xff80, 0x6f, 0xff80, 0x6f, 0xff9e, 0xae, +0xff9e, 0xae, 0xff51, 0x7d, 0xff51, 0x7d, 0xffbd, 0x102, 0xffbd, 0x102, 0x31, +0x18a, 0x31, 0x18a, 0x31, 0x18a, 0xbc, 0x225, 0xbc, 0x225, 0x86, 0x1fd, +0x86, 0x1fd, 0x28, 0x1a7, 0x28, 0x1a7, 0xffb5, 0x139, 0xffb5, 0x139, 0xfed7, +0x5f, 0xfed7, 0x5f, 0xfd80, 0xff08, 0xfd80, 0xff08, 0xfd80, 0xff08, 0xfd54, 0xfedb, +0xfd54, 0xfedb, 0xfd4b, 0xfecf, 0xfd4b, 0xfecf, 0xfcec, 0xfe6d, 0xfcec, 0xfe6d, 0xfc75, +0xfdf3, 0xfc75, 0xfdf3, 0xfbd4, 0xfd4e, 0xfbd4, 0xfd4e, 0xfa4a, 0xfbc2, 0xfa4a, 0xfbc2, +0xfa4a, 0xfbc2, 0xf9e3, 0xfb5a, 0xf9e3, 0xfb5a, 0xfa78, 0xfbf0, 0xfa78, 0xfbf0, 0xfa5f, +0xfbd8, 0xfa5f, 0xfbd8, 0xfa1a, 0xfb96, 0xfa1a, 0xfb96, 0xf985, 0xfb08, 0xf985, 0xfb08, +0xf985, 0xfb08, 0xf866, 0xf9f0, 0xf866, 0xf9f0, 0xf6da, 0xf86d, 0xf6da, 0xf86d, 0xf69f, +0xf83c, 0xf69f, 0xf83c, 0xf5aa, 0xf752, 0xf5aa, 0xf752, 0xf585, 0xf73a, 0xf585, 0xf73a, +0xf5d9, 0xf79b, 0xf5d9, 0xf79b, 0xf5d9, 0xf79b, 0xf63f, 0xf80e, 0xf63f, 0xf80e, 0xf642, +0xf820, 0xf642, 0xf820, 0xf524, 0xf710, 0xf524, 0xf710, 0xf412, 0xf60c, 0xf412, 0xf60c, +0xf2f7, 0xf500, 0xf2f7, 0xf500, 0xf28b, 0xf4a1, 0xf28b, 0xf4a1, 0xf28b, 0xf4a1, 0xf24c, +0xf470, 0xf24c, 0xf470, 0xf18f, 0xf3c1, 0xf18f, 0xf3c1, 0xf07d, 0xf2bc, 0xf07d, 0xf2bc, +0xeff0, 0xf23e, 0xeff0, 0xf23e, 0xf065, 0xf2c0, 0xf065, 0xf2c0, 0xf065, 0xf2c0, 0xf01e, +0xf288, 0xf01e, 0xf288, 0xeff7, 0xf26f, 0xeff7, 0xf26f, 0xf0cd, 0xf355, 0xf0cd, 0xf355, +0xf0aa, 0xf342, 0xf0aa, 0xf342, 0xf100, 0xf3a9, 0xf100, 0xf3a9, 0xf07e, 0xf337, 0xf07e, +0xf337, 0xf07e, 0xf337, 0xef36, 0xf201, 0xef36, 0xf201, 0xee29, 0xf105, 0xee29, 0xf105, +0xee9b, 0xf189, 0xee9b, 0xf189, 0xef56, 0xf255, 0xef56, 0xf255, 0xef65, 0xf274, 0xef65, +0xf274, 0xef5c, 0xf279, 0xef5c, 0xf279, 0xef5c, 0xf279, 0xeebc, 0xf1e7, 0xeebc, 0xf1e7, +0xee14, 0xf149, 0xee14, 0xf149, 0xedbf, 0xf0fc, 0xedbf, 0xf0fc, 0xedea, 0xf12a, 0xedea, +0xf12a, 0xee24, 0xf164, 0xee24, 0xf164, 0xee24, 0xf164, 0xef18, 0xf255, 0xef18, 0xf255, +0xef67, 0xf29c, 0xef67, 0xf29c, 0xefa8, 0xf2d0, 0xefa8, 0xf2d0, 0xefcc, 0xf2e3, 0xefcc, +0xf2e3, 0xefbd, 0xf2be, 0xefbd, 0xf2be, 0xef0e, 0xf1f5, 0xef0e, 0xf1f5, 0xef0e, 0xf1f5, +0xee40, 0xf109, 0xee40, 0xf109, 0xedf9, 0xf0a1, 0xedf9, 0xf0a1, 0xee3c, 0xf0c0, 0xee3c, +0xf0c0, 0xee35, 0xf093, 0xee35, 0xf093, 0xee77, 0xf0ae, 0xee77, 0xf0ae, 0xef31, 0xf140, +0xef31, 0xf140, 0xef31, 0xf140, 0xef10, 0xf0f7, 0xef10, 0xf0f7, 0xeee0, 0xf0a1, 0xeee0, +0xf0a1, 0xeea3, 0xf040, 0xeea3, 0xf040, 0xee60, 0xefdc, 0xee60, 0xefdc, 0xedfd, 0xef5b, +0xedfd, 0xef5b, 0xedfd, 0xef5b, 0xeef0, 0xf035, 0xeef0, 0xf035, 0xef2f, 0xf060, 0xef2f, +0xf060, 0xee6b, 0xef8d, 0xee6b, 0xef8d, 0xed86, 0xee9e, 0xed86, 0xee9e, 0xed21, 0xee34, +0xed21, 0xee34, 0xece1, 0xedf4, 0xece1, 0xedf4, 0xece1, 0xedf4, 0xed3a, 0xee54, 0xed3a, +0xee54, 0xee32, 0xef56, 0xee32, 0xef56, 0xee76, 0xefaa, 0xee76, 0xefaa, 0xef2e, 0xf075, +0xef2e, 0xf075, 0xf028, 0xf185, 0xf028, 0xf185, 0xf14b, 0xf2c1, 0xf14b, 0xf2c1, 0xf14b, +0xf2c1, 0xf225, 0xf3b5, 0xf225, 0xf3b5, 0xf2d5, 0xf47f, 0xf2d5, 0xf47f, 0xf31b, 0xf4df, +0xf31b, 0xf4df, 0xf2b0, 0xf48e, 0xf2b0, 0xf48e, 0xf2a2, 0xf498, 0xf2a2, 0xf498, 0xf2a2, +0xf498, 0xf2d3, 0xf4de, 0xf2d3, 0xf4de, 0xf28f, 0xf4ab, 0xf28f, 0xf4ab, 0xf26e, 0xf499, +0xf26e, 0xf499, 0xf2a8, 0xf4de, 0xf2a8, 0xf4de, 0xf399, 0xf5d4, 0xf399, 0xf5d4, 0xf316, +0xf552, 0xf316, 0xf552, 0xf316, 0xf552, 0xf2b5, 0xf4ee, 0xf2b5, 0xf4ee, 0xf248, 0xf478, +0xf248, 0xf478, 0xf19f, 0xf3c3, 0xf19f, 0xf3c3, 0xf26d, 0xf47e, 0xf26d, 0xf47e, 0xf2f8, +0xf4f2, 0xf2f8, 0xf4f2, 0xf313, 0xf4f3, 0xf313, 0xf4f3, 0xf313, 0xf4f3, 0xf2a0, 0xf461, +0xf2a0, 0xf461, 0xf30d, 0xf4ab, 0xf30d, 0xf4ab, 0xf377, 0xf4f0, 0xf377, 0xf4f0, 0xf41b, +0xf56b, 0xf41b, 0xf56b, 0xf56b, 0xf690, 0xf56b, 0xf690, 0xf56b, 0xf690, 0xf723, 0xf81b, +0xf723, 0xf81b, 0xf926, 0xf9f0, 0xf926, 0xf9f0, 0xfb7d, 0xfc17, 0xfb7d, 0xfc17, 0xfcde, +0xfd47, 0xfcde, 0xfd47, 0xfd95, 0xfdcd, 0xfd95, 0xfdcd, 0xfecb, 0xfed2, 0xfecb, 0xfed2, +0xfecb, 0xfed2, 0x3f, 0x17, 0x3f, 0x17, 0x218, 0x1c0, 0x218, 0x1c0, 0x422, +0x39c, 0x422, 0x39c, 0x5fc, 0x54a, 0x5fc, 0x54a, 0x76e, 0x693, 0x76e, 0x693, +0x76e, 0x693, 0x88c, 0x78a, 0x88c, 0x78a, 0x968, 0x842, 0x968, 0x842, 0xaaa, +0x962, 0xaaa, 0x962, 0xb60, 0x9fb, 0xb60, 0x9fb, 0xc62, 0xae3, 0xc62, 0xae3, +0xcfe, 0xb68, 0xcfe, 0xb68, 0xcfe, 0xb68, 0xd63, 0xbba, 0xd63, 0xbba, 0xda7, +0xbf0, 0xda7, 0xbf0, 0xdc2, 0xc00, 0xdc2, 0xc00, 0xd76, 0xbac, 0xd76, 0xbac, +0xd81, 0xbb3, 0xd81, 0xbb3, 0xee3, 0xd15, 0xee3, 0xd15, 0xee3, 0xd15, 0xfb5, +0xde8, 0xfb5, 0xde8, 0xfc3, 0xdf9, 0xfc3, 0xdf9, 0xf14, 0xd50, 0xf14, 0xd50, +0xde3, 0xc26, 0xde3, 0xc26, 0xc9f, 0xae8, 0xc9f, 0xae8, 0xc9f, 0xae8, 0xc74, +0xac5, 0xc74, 0xac5, 0xc69, 0xac0, 0xc69, 0xac0, 0xc60, 0xabd, 0xc60, 0xabd, +0xd04, 0xb66, 0xd04, 0xb66, 0xdb9, 0xc1d, 0xdb9, 0xc1d, 0xdcf, 0xc33, 0xdcf, +0xc33, 0xdcf, 0xc33, 0xd3a, 0xb9d, 0xd3a, 0xb9d, 0xc85, 0xae4, 0xc85, 0xae4, +0xc41, 0xa9a, 0xc41, 0xa9a, 0xc88, 0xad9, 0xc88, 0xad9, 0xd9f, 0xbe7, 0xd9f, +0xbe7, 0xe24, 0xc62, 0xe24, 0xc62, 0xe24, 0xc62, 0xdee, 0xc21, 0xdee, 0xc21, +0xcf2, 0xb1a, 0xcf2, 0xb1a, 0xc03, 0xa22, 0xc03, 0xa22, 0xbbb, 0x9d2, 0xbbb, +0x9d2, 0xaa8, 0x8b9, 0xaa8, 0x8b9, 0xaa8, 0x8b9, 0xad3, 0x8e1, 0xad3, 0x8e1, +0xa53, 0x862, 0xa53, 0x862, 0x975, 0x78a, 0x975, 0x78a, 0x8fc, 0x71c, 0x8fc, +0x71c, 0x7d6, 0x604, 0x7d6, 0x604, 0x634, 0x478, 0x634, 0x478, 0x634, 0x478, +0x4ee, 0x34b, 0x4ee, 0x34b, 0x4ab, 0x327, 0x4ab, 0x327, 0x47b, 0x31b, 0x47b, +0x31b, 0x3d9, 0x2a1, 0x3d9, 0x2a1, 0x2b8, 0x1ac, 0x2b8, 0x1ac, 0x10d, 0x2f, +0x10d, 0x2f, 0x10d, 0x2f, 0xffec, 0xff3f, 0xffec, 0xff3f, 0xffe2, 0xff66, 0xffe2, +0xff66, 0xff71, 0xff26, 0xff71, 0xff26, 0xfee5, 0xfeca, 0xfee5, 0xfeca, 0xfe3b, 0xfe4e, +0xfe3b, 0xfe4e, 0xfe3b, 0xfe4e, 0xfdc7, 0xfe04, 0xfdc7, 0xfe04, 0xfda8, 0xfe0b, 0xfda8, +0xfe0b, 0xfe18, 0xfe9d, 0xfe18, 0xfe9d, 0xfe7b, 0xff1c, 0xfe7b, 0xff1c, 0xff65, 0x1d, +0xff65, 0x1d, 0x17, 0xdf, 0x17, 0xdf, 0x17, 0xdf, 0x9e, 0x171, 0x9e, +0x171, 0xcf, 0x1a7, 0xcf, 0x1a7, 0x25, 0xfb, 0x25, 0xfb, 0xb3, 0x183, +0xb3, 0x183, 0x18b, 0x250, 0x18b, 0x250, 0x25c, 0x314, 0x25c, 0x314, 0x25c, +0x314, 0x2ef, 0x394, 0x2ef, 0x394, 0x392, 0x424, 0x392, 0x424, 0x3a7, 0x424, +0x3a7, 0x424, 0x3b5, 0x41b, 0x3b5, 0x41b, 0x453, 0x4a3, 0x453, 0x4a3, 0x453, +0x4a3, 0x49d, 0x4d8, 0x49d, 0x4d8, 0x50f, 0x536, 0x50f, 0x536, 0x57b, 0x58e, +0x57b, 0x58e, 0x55f, 0x561, 0x55f, 0x561, 0x567, 0x559, 0x567, 0x559, 0x58f, +0x573, 0x58f, 0x573, 0x58f, 0x573, 0x51b, 0x4f1, 0x51b, 0x4f1, 0x487, 0x450, +0x487, 0x450, 0x488, 0x444, 0x488, 0x444, 0x4d4, 0x483, 0x4d4, 0x483, 0x5af, +0x54f, 0x5af, 0x54f, 0x64b, 0x5db, 0x64b, 0x5db, 0x64b, 0x5db, 0x628, 0x5a5, +0x628, 0x5a5, 0x5a5, 0x50c, 0x5a5, 0x50c, 0x557, 0x4a3, 0x557, 0x4a3, 0x5eb, +0x518, 0x5eb, 0x518, 0x646, 0x551, 0x646, 0x551, 0x646, 0x551, 0x729, 0x60d, +0x729, 0x60d, 0x7c3, 0x67c, 0x7c3, 0x67c, 0x969, 0x7f3, 0x969, 0x7f3, 0xafb, +0x954, 0xafb, 0x954, 0xb91, 0x9b6, 0xb91, 0x9b6, 0xcce, 0xabf, 0xcce, 0xabf, +0xcce, 0xabf, 0xd5b, 0xb17, 0xd5b, 0xb17, 0xe77, 0xbfe, 0xe77, 0xbfe, 0xfba, +0xd0e, 0xfba, 0xd0e, 0x1044, 0xd6a, 0x1044, 0xd6a, 0x10c6, 0xdc1, 0x10c6, 0xdc1, +0x1170, 0xe48, 0x1170, 0xe48, 0x1170, 0xe48, 0x125e, 0xf17, 0x125e, 0xf17, 0x13c1, +0x1064, 0x13c1, 0x1064, 0x1567, 0x11fc, 0x1567, 0x11fc, 0x1753, 0x13e3, 0x1753, 0x13e3, +0x18b7, 0x154a, 0x18b7, 0x154a, 0x18b7, 0x154a, 0x19cf, 0x166d, 0x19cf, 0x166d, 0x19fa, +0x16ac, 0x19fa, 0x16ac, 0x1918, 0x15e5, 0x1918, 0x15e5, 0x1827, 0x1516, 0x1827, 0x1516, +0x17a2, 0x14b9, 0x17a2, 0x14b9, 0x176b, 0x14ae, 0x176b, 0x14ae, 0x176b, 0x14ae, 0x179c, +0x150f, 0x179c, 0x150f, 0x1794, 0x1538, 0x1794, 0x1538, 0x165d, 0x1432, 0x165d, 0x1432, +0x14f6, 0x12fb, 0x14f6, 0x12fb, 0x132d, 0x1160, 0x132d, 0x1160, 0x12cc, 0x112a, 0x12cc, +0x112a, 0x12cc, 0x112a, 0x12ac, 0x112e, 0x12ac, 0x112e, 0x1234, 0x10d7, 0x1234, 0x10d7, +0x120c, 0x10c9, 0x120c, 0x10c9, 0x1174, 0x1043, 0x1174, 0x1043, 0x107e, 0xf5a, 0x107e, +0xf5a, 0x107e, 0xf5a, 0xedf, 0xdc1, 0xedf, 0xdc1, 0xd4f, 0xc32, 0xd4f, 0xc32, +0xc01, 0xade, 0xc01, 0xade, 0xbda, 0xaae, 0xbda, 0xaae, 0xc2e, 0xaf4, 0xc2e, +0xaf4, 0xb8d, 0xa43, 0xb8d, 0xa43, 0xb8d, 0xa43, 0xa6d, 0x911, 0xa6d, 0x911, +0x95c, 0x7ee, 0x95c, 0x7ee, 0x84b, 0x6cb, 0x84b, 0x6cb, 0x779, 0x5ea, 0x779, +0x5ea, 0x72f, 0x595, 0x72f, 0x595, 0x68a, 0x4e9, 0x68a, 0x4e9, 0x68a, 0x4e9, +0x5cd, 0x429, 0x5cd, 0x429, 0x4ce, 0x32d, 0x4ce, 0x32d, 0x395, 0x1fc, 0x395, +0x1fc, 0x2c6, 0x13b, 0x2c6, 0x13b, 0x1a2, 0x2b, 0x1a2, 0x2b, 0x1a2, 0x2b, +0x9a, 0xff3d, 0x9a, 0xff3d, 0xff2a, 0xfded, 0xff2a, 0xfded, 0xfe3f, 0xfd25, 0xfe3f, +0xfd25, 0xfd68, 0xfc75, 0xfd68, 0xfc75, 0xfce2, 0xfc19, 0xfce2, 0xfc19, 0xfc90, 0xfbf4, +0xfc90, 0xfbf4, 0xfc90, 0xfbf4, 0xfb9b, 0xfb2c, 0xfb9b, 0xfb2c, 0xfc4b, 0xfc09, 0xfc4b, +0xfc09, 0xfce7, 0xfcd2, 0xfce7, 0xfcd2, 0xfd20, 0xfd37, 0xfd20, 0xfd37, 0xfd1f, 0xfd5f, +0xfd1f, 0xfd5f, 0xfd1f, 0xfd5f, 0xfcaa, 0xfd11, 0xfcaa, 0xfd11, 0xfcad, 0xfd37, 0xfcad, +0xfd37, 0xfcd6, 0xfd80, 0xfcd6, 0xfd80, 0xfca2, 0xfd68, 0xfca2, 0xfd68, 0xfcb8, 0xfd97, +0xfcb8, 0xfd97, 0xfd24, 0xfe18, 0xfd24, 0xfe18, 0xfd24, 0xfe18, 0xfdf7, 0xfefd, 0xfdf7, +0xfefd, 0xfe82, 0xff97, 0xfe82, 0xff97, 0xfdd4, 0xfef5, 0xfdd4, 0xfef5, 0xfd09, 0xfe35, +0xfd09, 0xfe35, 0xfc61, 0xfd95, 0xfc61, 0xfd95, 0xfc68, 0xfda2, 0xfc68, 0xfda2, 0xfc68, +0xfda2, 0xfc54, 0xfd95, 0xfc54, 0xfd95, 0xfbe6, 0xfd2c, 0xfbe6, 0xfd2c, 0xfb88, 0xfcd4, +0xfb88, 0xfcd4, 0xfac6, 0xfc18, 0xfac6, 0xfc18, 0xf9cc, 0xfb23, 0xf9cc, 0xfb23, 0xf9cc, +0xfb23, 0xf9a3, 0xfb00, 0xf9a3, 0xfb00, 0xf9c8, 0xfb2b, 0xf9c8, 0xfb2b, 0xfa82, 0xfbec, +0xfa82, 0xfbec, 0xfb88, 0xfcf7, 0xfb88, 0xfcf7, 0xfb4b, 0xfcc0, 0xfb4b, 0xfcc0, 0xfa68, +0xfbe2, 0xfa68, 0xfbe2, 0xfa68, 0xfbe2, 0xf88a, 0xfa09, 0xf88a, 0xfa09, 0xf6b4, 0xf836, +0xf6b4, 0xf836, 0xf5d2, 0xf756, 0xf5d2, 0xf756, 0xf5c9, 0xf74d, 0xf5c9, 0xf74d, 0xf5f8, +0xf77a, 0xf5f8, 0xf77a, 0xf5c8, 0xf746, 0xf5c8, 0xf746, 0xf5c8, 0xf746, 0xf52d, 0xf6a6, +0xf52d, 0xf6a6, 0xf413, 0xf585, 0xf413, 0xf585, 0xf3e6, 0xf54e, 0xf3e6, 0xf54e, 0xf4a1, +0xf5ff, 0xf4a1, 0xf5ff, 0xf4b0, 0xf602, 0xf4b0, 0xf602, 0xf4b0, 0xf602, 0xf3df, 0xf524, +0xf3df, 0xf524, 0xf308, 0xf440, 0xf308, 0xf440, 0xf1ea, 0xf315, 0xf1ea, 0xf315, 0xf12c, +0xf24a, 0xf12c, 0xf24a, 0xf107, 0xf219, 0xf107, 0xf219, 0xf096, 0xf19c, 0xf096, 0xf19c, +0xf096, 0xf19c, 0xf0f6, 0xf1f3, 0xf0f6, 0xf1f3, 0xf1e5, 0xf2db, 0xf1e5, 0xf2db, 0xf2e8, +0xf3d8, 0xf2e8, 0xf3d8, 0xf305, 0xf3f2, 0xf305, 0xf3f2, 0xf24a, 0xf336, 0xf24a, 0xf336, +0xf131, 0xf21f, 0xf131, 0xf21f, 0xf131, 0xf21f, 0xf00d, 0xf0fe, 0xf00d, 0xf0fe, 0xefdb, +0xf0d1, 0xefdb, 0xf0d1, 0xefe7, 0xf0e5, 0xefe7, 0xf0e5, 0xf0a7, 0xf1af, 0xf0a7, 0xf1af, +0xf034, 0xf146, 0xf034, 0xf146, 0xf034, 0xf146, 0xef3b, 0xf058, 0xef3b, 0xf058, 0xef43, +0xf06c, 0xef43, 0xf06c, 0xee98, 0xefce, 0xee98, 0xefce, 0xee12, 0xef53, 0xee12, 0xef53, +0xee2a, 0xef78, 0xee2a, 0xef78, 0xee05, 0xef5d, 0xee05, 0xef5d, 0xee05, 0xef5d, 0xee47, +0xefa9, 0xee47, 0xefa9, 0xeed0, 0xf03c, 0xeed0, 0xf03c, 0xee83, 0xeff7, 0xee83, 0xeff7, +0xeda7, 0xef21, 0xeda7, 0xef21, 0xecb4, 0xee34, 0xecb4, 0xee34, 0xec98, 0xee1c, 0xec98, +0xee1c, 0xec98, 0xee1c, 0xec94, 0xee1c, 0xec94, 0xee1c, 0xec9c, 0xee26, 0xec9c, 0xee26, +0xecc3, 0xee4e, 0xecc3, 0xee4e, 0xecd4, 0xee60, 0xecd4, 0xee60, 0xed41, 0xeecd, 0xed41, +0xeecd, 0xed41, 0xeecd, 0xed5e, 0xeeea, 0xed5e, 0xeeea, 0xed60, 0xeeeb, 0xed60, 0xeeeb, +0xed94, 0xef1e, 0xed94, 0xef1e, 0xeddb, 0xef64, 0xeddb, 0xef64, 0xee74, 0xeffb, 0xee74, +0xeffb, 0xeec5, 0xf04b, 0xeec5, 0xf04b, 0xeec5, 0xf04b, 0xee14, 0xef98, 0xee14, 0xef98, +0xee47, 0xefca, 0xee47, 0xefca, 0xeebd, 0xf03d, 0xeebd, 0xf03d, 0xeede, 0xf05d, 0xeede, +0xf05d, 0xef2e, 0xf0a9, 0xef2e, 0xf0a9, 0xeeb8, 0xf031, 0xeeb8, 0xf031, 0xeeb8, 0xf031, +0xee61, 0xefd6, 0xee61, 0xefd6, 0xee8f, 0xf000, 0xee8f, 0xf000, 0xef70, 0xf0dd, 0xef70, +0xf0dd, 0xf07d, 0xf1e5, 0xf07d, 0xf1e5, 0xf1b2, 0xf315, 0xf1b2, 0xf315, 0xf1b2, 0xf315, +0xf2d6, 0xf435, 0xf2d6, 0xf435, 0xf3d3, 0xf52c, 0xf3d3, 0xf52c, 0xf506, 0xf65b, 0xf506, +0xf65b, 0xf5bb, 0xf70c, 0xf5bb, 0xf70c, 0xf5b5, 0xf703, 0xf5b5, 0xf703, 0xf569, 0xf6b5, +0xf569, 0xf6b5, 0xf569, 0xf6b5, 0xf59d, 0xf6e7, 0xf59d, 0xf6e7, 0xf59b, 0xf6e5, 0xf59b, +0xf6e5, 0xf61d, 0xf768, 0xf61d, 0xf768, 0xf699, 0xf7e5, 0xf699, 0xf7e5, 0xf623, 0xf772, +0xf623, 0xf772, 0xf568, 0xf6ba, 0xf568, 0xf6ba, 0xf568, 0xf6ba, 0xf529, 0xf67f, 0xf529, +0xf67f, 0xf5bf, 0xf718, 0xf5bf, 0xf718, 0xf5de, 0xf73a, 0xf5de, 0xf73a, 0xf605, 0xf763, +0xf605, 0xf763, 0xf5b4, 0xf713, 0xf5b4, 0xf713, 0xf5b4, 0xf713, 0xf507, 0xf664, 0xf507, +0xf664, 0xf45a, 0xf5b2, 0xf45a, 0xf5b2, 0xf3b3, 0xf504, 0xf3b3, 0xf504, 0xf3c1, 0xf506, +0xf3c1, 0xf506, 0xf3f2, 0xf527, 0xf3f2, 0xf527, 0xf583, 0xf6a4, 0xf583, 0xf6a4, 0xf583, +0xf6a4, 0xf7d1, 0xf8d9, 0xf7d1, 0xf8d9, 0xf90b, 0xf9f6, 0xf90b, 0xf9f6, 0xf9ff, 0xfac7, +0xf9ff, 0xfac7, 0xfabd, 0xfb5f, 0xfabd, 0xfb5f, 0xfb55, 0xfbcb, 0xfb55, 0xfbcb, 0xfcf0, +0xfd38, 0xfcf0, 0xfd38, 0xfcf0, 0xfd38, 0xfef6, 0xff0d, 0xfef6, 0xff0d, 0x68, 0x4b, +0x68, 0x4b, 0x143, 0xf2, 0x143, 0xf2, 0x291, 0x20b, 0x291, 0x20b, 0x442, +0x38a, 0x442, 0x38a, 0x442, 0x38a, 0x564, 0x47b, 0x564, 0x47b, 0x706, 0x5ee, +0x706, 0x5ee, 0x87b, 0x739, 0x87b, 0x739, 0x957, 0x7f0, 0x957, 0x7f0, 0xa9e, +0x918, 0xa9e, 0x918, 0xba7, 0xa08, 0xba7, 0xa08, 0xba7, 0xa08, 0xc2d, 0xa7b, +0xc2d, 0xa7b, 0xc9c, 0xadf, 0xc9c, 0xadf, 0xcdd, 0xb1c, 0xcdd, 0xb1c, 0xda1, +0xbe2, 0xda1, 0xbe2, 0xe8f, 0xcd8, 0xe8f, 0xcd8, 0xf88, 0xddf, 0xf88, 0xddf, +0xf88, 0xddf, 0x1115, 0xf80, 0x1115, 0xf80, 0x1156, 0xfd8, 0x1156, 0xfd8, 0x10bb, +0xf58, 0x10bb, 0xf58, 0xfe3, 0xe9c, 0xfe3, 0xe9c, 0xe8f, 0xd65, 0xe8f, 0xd65, +0xe8f, 0xd65, 0xdac, 0xca0, 0xdac, 0xca0, 0xe00, 0xd0f, 0xe00, 0xd0f, 0xeef, +0xe18, 0xeef, 0xe18, 0xef9, 0xe39, 0xef9, 0xe39, 0xe5f, 0xdb2, 0xe5f, 0xdb2, +0xd63, 0xcc5, 0xd63, 0xcc5, 0xd63, 0xcc5, 0xcce, 0xc39, 0xcce, 0xc39, 0xd4a, +0xcbb, 0xd4a, 0xcbb, 0xe77, 0xde9, 0xe77, 0xde9, 0xf22, 0xe90, 0xf22, 0xe90, +0xf61, 0xec9, 0xf61, 0xec9, 0xf61, 0xec9, 0xf45, 0xea2, 0xf45, 0xea2, 0xe90, +0xde1, 0xe90, 0xde1, 0xe2d, 0xd6f, 0xe2d, 0xd6f, 0xda9, 0xcdd, 0xda9, 0xcdd, +0xd3c, 0xc62, 0xd3c, 0xc62, 0xce6, 0xbff, 0xce6, 0xbff, 0xce6, 0xbff, 0xcc9, +0xbd8, 0xcc9, 0xbd8, 0xc50, 0xb57, 0xc50, 0xb57, 0xb20, 0xa24, 0xb20, 0xa24, +0x9cc, 0x8d0, 0x9cc, 0x8d0, 0x81b, 0x723, 0x81b, 0x723, 0x6c9, 0x5db, 0x6c9, +0x5db, 0x6c9, 0x5db, 0x5ad, 0x4cc, 0x5ad, 0x4cc, 0x4e3, 0x415, 0x4e3, 0x415, +0x3a3, 0x2eb, 0x3a3, 0x2eb, 0x19a, 0xfb, 0x19a, 0xfb, 0xb4, 0x30, 0xb4, +0x30, 0xb4, 0x30, 0x78, 0x11, 0x78, 0x11, 0xffc0, 0xff76, 0xffc0, 0xff76, +0xfeed, 0xfec1, 0xfeed, 0xfec1, 0xfdaa, 0xfd99, 0xfdaa, 0xfd99, 0xfc56, 0xfc5f, 0xfc56, +0xfc5f, 0xfbbd, 0xfbdd, 0xfbbd, 0xfbdd, 0xfbbd, 0xfbdd, 0xfb2b, 0xfb5e, 0xfb2b, 0xfb5e, +0xfa88, 0xfacb, 0xfa88, 0xfacb, 0xfa67, 0xfab5, 0xfa67, 0xfab5, 0xfbac, 0xfc00, 0xfbac, +0xfc00, 0xfd14, 0xfd69, 0xfd14, 0xfd69, 0xfd75, 0xfdc8, 0xfd75, 0xfdc8, 0xfd75, 0xfdc8, +0xfde3, 0xfe30, 0xfde3, 0xfe30, 0xfdd0, 0xfe14, 0xfdd0, 0xfe14, 0xfdf9, 0xfe30, 0xfdf9, +0xfe30, 0xff35, 0xff5e, 0xff35, 0xff5e, 0x4, 0x1d, 0x4, 0x1d, 0x4, 0x1d, +0x8e, 0x98, 0x8e, 0x98, 0x150, 0x14b, 0x150, 0x14b, 0x1f3, 0x1e0, 0x1f3, +0x1e0, 0x284, 0x265, 0x284, 0x265, 0x29b, 0x272, 0x29b, 0x272, 0x323, 0x2f4, +0x323, 0x2f4, 0x323, 0x2f4, 0x425, 0x3f2, 0x425, 0x3f2, 0x4b7, 0x483, 0x4b7, +0x483, 0x577, 0x544, 0x577, 0x544, 0x5dc, 0x5ac, 0x5dc, 0x5ac, 0x509, 0x4de, +0x509, 0x4de, 0x40a, 0x3e5, 0x40a, 0x3e5, 0x40a, 0x3e5, 0x3e9, 0x3c9, 0x3e9, +0x3c9, 0x3ed, 0x3d1, 0x3ed, 0x3d1, 0x40b, 0x3f2, 0x40b, 0x3f2, 0x48a, 0x46f, +0x48a, 0x46f, 0x4bf, 0x49f, 0x4bf, 0x49f, 0x4bf, 0x49f, 0x46d, 0x443, 0x46d, +0x443, 0x4ce, 0x494, 0x4ce, 0x494, 0x545, 0x4f5, 0x545, 0x4f5, 0x4c4, 0x457, +0x4c4, 0x457, 0x4f8, 0x467, 0x4f8, 0x467, 0x591, 0x4d5, 0x591, 0x4d5, 0x591, +0x4d5, 0x666, 0x57a, 0x666, 0x57a, 0x72f, 0x60c, 0x72f, 0x60c, 0x7ce, 0x66f, +0x7ce, 0x66f, 0x91b, 0x77c, 0x91b, 0x77c, 0xab2, 0x8d1, 0xab2, 0x8d1, 0xcce, +0xaaa, 0xcce, 0xaaa, 0xcce, 0xaaa, 0xe89, 0xc20, 0xe89, 0xc20, 0xfb1, 0xd06, +0xfb1, 0xd06, 0x1040, 0xd55, 0x1040, 0xd55, 0x107a, 0xd54, 0x107a, 0xd54, 0x10d8, +0xd7c, 0x10d8, 0xd7c, 0x10d8, 0xd7c, 0x1164, 0xdd9, 0x1164, 0xdd9, 0x134e, 0xf9c, +0x134e, 0xf9c, 0x1557, 0x1186, 0x1557, 0x1186, 0x171f, 0x1337, 0x171f, 0x1337, 0x1982, +0x158d, 0x1982, 0x158d, 0x1b09, 0x1711, 0x1b09, 0x1711, 0x1b09, 0x1711, 0x1b2f, 0x173c, +0x1b2f, 0x173c, 0x1b35, 0x1750, 0x1b35, 0x1750, 0x1b1e, 0x174d, 0x1b1e, 0x174d, 0x1b44, +0x178e, 0x1b44, 0x178e, 0x1c56, 0x18c2, 0x1c56, 0x18c2, 0x1c9c, 0x192d, 0x1c9c, 0x192d, +0x1c9c, 0x192d, 0x1b80, 0x1839, 0x1b80, 0x1839, 0x19c9, 0x16ac, 0x19c9, 0x16ac, 0x18a3, +0x15b1, 0x18a3, 0x15b1, 0x1808, 0x1540, 0x1808, 0x1540, 0x1740, 0x14a0, 0x1740, 0x14a0, +0x1740, 0x14a0, 0x1709, 0x148e, 0x1709, 0x148e, 0x16b2, 0x145a, 0x16b2, 0x145a, 0x168d, +0x1453, 0x168d, 0x1453, 0x1662, 0x1442, 0x1662, 0x1442, 0x1538, 0x132e, 0x1538, 0x132e, +0x1435, 0x123c, 0x1435, 0x123c, 0x1435, 0x123c, 0x135d, 0x1172, 0x135d, 0x1172, 0x12cd, +0x10ec, 0x12cd, 0x10ec, 0x1203, 0x102a, 0x1203, 0x102a, 0x10d5, 0xf01, 0x10d5, 0xf01, +0x102d, 0xe5d, 0x102d, 0xe5d, 0xf53, 0xd87, 0xf53, 0xd87, 0xf53, 0xd87, 0xe4e, +0xc86, 0xe4e, 0xc86, 0xda2, 0xbe1, 0xda2, 0xbe1, 0xc81, 0xac7, 0xc81, 0xac7, +0xaa4, 0x8f6, 0xaa4, 0x8f6, 0x97b, 0x7dc, 0x97b, 0x7dc, 0x97b, 0x7dc, 0x86f, +0x6e4, 0x86f, 0x6e4, 0x6eb, 0x577, 0x6eb, 0x577, 0x5ad, 0x456, 0x5ad, 0x456, +0x44d, 0x317, 0x44d, 0x317, 0x2b1, 0x1a1, 0x2b1, 0x1a1, 0x11f, 0x39, 0x11f, +0x39, 0x11f, 0x39, 0xc7, 0xf, 0xc7, 0xf, 0xfffe, 0xff77, 0xfffe, 0xff77, +0xfe53, 0xfe00, 0xfe53, 0xfe00, 0xfd37, 0xfd19, 0xfd37, 0xfd19, 0xfb81, 0xfb9a, 0xfb81, +0xfb9a, 0xfa30, 0xfa80, 0xfa30, 0xfa80, 0xfa30, 0xfa80, 0xf94d, 0xf9d4, 0xf94d, 0xf9d4, +0xf901, 0xf9bf, 0xf901, 0xf9bf, 0xf8f0, 0xf9e2, 0xf8f0, 0xf9e2, 0xf8ae, 0xf9d3, 0xf8ae, +0xf9d3, 0xf8eb, 0xfa40, 0xf8eb, 0xfa40, 0xf8eb, 0xfa40, 0xf832, 0xf9b5, 0xf832, 0xf9b5, +0xf752, 0xf8fe, 0xf752, 0xf8fe, 0xf685, 0xf858, 0xf685, 0xf858, 0xf5e8, 0xf7de, 0xf5e8, +0xf7de, 0xf559, 0xf76e, 0xf559, 0xf76e, 0xf4a2, 0xf6d2, 0xf4a2, 0xf6d2, 0xf4a2, 0xf6d2, +0xf46d, 0xf6b5, 0xf46d, 0xf6b5, 0xf36e, 0xf5cb, 0xf36e, 0xf5cb, 0xf287, 0xf4f5, 0xf287, +0xf4f5, 0xf275, 0xf4f0, 0xf275, 0xf4f0, 0xf241, 0xf4c6, 0xf241, 0xf4c6, 0xf188, 0xf414, +0xf188, 0xf414, 0xf188, 0xf414, 0xf0aa, 0xf33a, 0xf0aa, 0xf33a, 0xef13, 0xf1a4, 0xef13, +0xf1a4, 0xed36, 0xefc5, 0xed36, 0xefc5, 0xec84, 0xef0e, 0xec84, 0xef0e, 0xebd1, 0xee52, +0xebd1, 0xee52, 0xebd1, 0xee52, 0xeb6d, 0xede4, 0xeb6d, 0xede4, 0xebc6, 0xee2f, 0xebc6, +0xee2f, 0xecf2, 0xef4b, 0xecf2, 0xef4b, 0xee06, 0xf04c, 0xee06, 0xf04c, 0xee05, 0xf035, +0xee05, 0xf035, 0xeddb, 0xeff3, 0xeddb, 0xeff3, 0xeddb, 0xeff3, 0xed90, 0xef8e, 0xed90, +0xef8e, 0xee97, 0xf07a, 0xee97, 0xf07a, 0xefff, 0xf1c5, 0xefff, 0xf1c5, 0xf09b, 0xf244, +0xf09b, 0xf244, 0xf12c, 0xf2b7, 0xf12c, 0xf2b7, 0xf12c, 0xf2b7, 0xf174, 0xf2e2, 0xf174, +0xf2e2, 0xf286, 0xf3d8, 0xf286, 0xf3d8, 0xf3f8, 0xf52f, 0xf3f8, 0xf52f, 0xf559, 0xf678, +0xf559, 0xf678, 0xf6b1, 0xf7ba, 0xf6b1, 0xf7ba, 0xf751, 0xf848, 0xf751, 0xf848, 0xf751, +0xf848, 0xf755, 0xf83d, 0xf755, 0xf83d, 0xf6bb, 0xf798, 0xf6bb, 0xf798, 0xf558, 0xf630, +0xf558, 0xf630, 0xf3f5, 0xf4ca, 0xf3f5, 0xf4ca, 0xf3f1, 0xf4ca, 0xf3f1, 0xf4ca, 0xf47c, +0xf55c, 0xf47c, 0xf55c, 0xf47c, 0xf55c, 0xf558, 0xf645, 0xf558, 0xf645, 0xf65a, 0xf757, +0xf65a, 0xf757, 0xf651, 0xf762, 0xf651, 0xf762, 0xf554, 0xf67c, 0xf554, 0xf67c, 0xf452, +0xf593, 0xf452, 0xf593, 0xf452, 0xf593, 0xf454, 0xf5b1, 0xf454, 0xf5b1, 0xf3e0, 0xf559, +0xf3e0, 0xf559, 0xf3aa, 0xf540, 0xf3aa, 0xf540, 0xf396, 0xf549, 0xf396, 0xf549, 0xf267, +0xf436, 0xf267, 0xf436, 0xf1de, 0xf3c7, 0xf1de, 0xf3c7, 0xf1de, 0xf3c7, 0xf0fd, 0xf2fd, +0xf0fd, 0xf2fd, 0xf018, 0xf22d, 0xf018, 0xf22d, 0xef4c, 0xf173, 0xef4c, 0xf173, 0xef2c, +0xf161, 0xef2c, 0xf161, 0xefca, 0xf20a, 0xefca, 0xf20a, 0xef8d, 0xf1d4, 0xef8d, 0xf1d4, +0xef8d, 0xf1d4, 0xefa7, 0xf1f2, 0xefa7, 0xf1f2, 0xef38, 0xf184, 0xef38, 0xf184, 0xee83, +0xf0ca, 0xee83, 0xf0ca, 0xeda6, 0xefe8, 0xeda6, 0xefe8, 0xecda, 0xef13, 0xecda, 0xef13, +0xecda, 0xef13, 0xeca3, 0xeed2, 0xeca3, 0xeed2, 0xebec, 0xee0e, 0xebec, 0xee0e, 0xebe6, +0xedfa, 0xebe6, 0xedfa, 0xec49, 0xee4e, 0xec49, 0xee4e, 0xec24, 0xee19, 0xec24, 0xee19, +0xebce, 0xedb2, 0xebce, 0xedb2, 0xebce, 0xedb2, 0xebe1, 0xedb4, 0xebe1, 0xedb4, 0xebd2, +0xed93, 0xebd2, 0xed93, 0xec22, 0xedd2, 0xec22, 0xedd2, 0xed18, 0xeeb7, 0xed18, 0xeeb7, +0xed30, 0xeebd, 0xed30, 0xeebd, 0xed32, 0xeead, 0xed32, 0xeead, 0xed32, 0xeead, 0xeda7, +0xef0f, 0xeda7, 0xef0f, 0xeefe, 0xf053, 0xeefe, 0xf053, 0xf08e, 0xf1cf, 0xf08e, 0xf1cf, +0xf181, 0xf2ae, 0xf181, 0xf2ae, 0xf1de, 0xf2f6, 0xf1de, 0xf2f6, 0xf1de, 0xf2f6, 0xf1c9, +0xf2cb, 0xf1c9, 0xf2cb, 0xf2c7, 0xf3b2, 0xf2c7, 0xf3b2, 0xf3fb, 0xf4cf, 0xf3fb, 0xf4cf, +0xf56e, 0xf62b, 0xf56e, 0xf62b, 0xf7bc, 0xf861, 0xf7bc, 0xf861, 0xfa28, 0xfab6, 0xfa28, +0xfab6, 0xfa28, 0xfab6, 0xfd11, 0xfd89, 0xfd11, 0xfd89, 0xfefa, 0xff5d, 0xfefa, 0xff5d, +0xff96, 0xffe6, 0xff96, 0xffe6, 0x7, 0x46, 0x7, 0x46, 0xb5, 0xe7, 0xb5, +0xe7, 0x21b, 0x242, 0x21b, 0x242, 0x21b, 0x242, 0x375, 0x395, 0x375, 0x395, +0x3c4, 0x3e1, 0x3c4, 0x3e1, 0x2f1, 0x30f, 0x2f1, 0x30f, 0x21e, 0x241, 0x21e, +0x241, 0x153, 0x17e, 0x153, 0x17e, 0x153, 0x17e, 0xcc, 0x104, 0xcc, 0x104, +0xb0, 0xf8, 0xb0, 0xf8, 0x7b, 0xd5, 0x7b, 0xd5, 0x4f, 0xbc, 0x4f, +0xbc, 0xa, 0x8b, 0xa, 0x8b, 0xffa5, 0x3a, 0xffa5, 0x3a, 0xffa5, 0x3a, +0xfe85, 0xff2d, 0xfe85, 0xff2d, 0xfde0, 0xfe99, 0xfde0, 0xfe99, 0xfd09, 0xfdcf, 0xfd09, +0xfdcf, 0xfc4e, 0xfd1e, 0xfc4e, 0xfd1e, 0xfcd9, 0xfdad, 0xfcd9, 0xfdad, 0xfcf7, 0xfdca, +0xfcf7, 0xfdca, 0xfcf7, 0xfdca, 0xfd6d, 0xfe39, 0xfd6d, 0xfe39, 0xfdd1, 0xfe8e, 0xfdd1, +0xfe8e, 0xfedb, 0xff84, 0xfedb, 0xff84, 0x11, 0x9e, 0x11, 0x9e, 0xf4, 0x15e, +0xf4, 0x15e, 0xf4, 0x15e, 0x23f, 0x281, 0x23f, 0x281, 0x277, 0x28b, 0x277, +0x28b, 0x2c0, 0x2a2, 0x2c0, 0x2a2, 0x2d5, 0x281, 0x2d5, 0x281, 0x353, 0x2c8, +0x353, 0x2c8, 0x44f, 0x38c, 0x44f, 0x38c, 0x44f, 0x38c, 0x4e9, 0x3ef, 0x4e9, +0x3ef, 0x62b, 0x4fc, 0x62b, 0x4fc, 0x722, 0x5c2, 0x722, 0x5c2, 0x7a3, 0x617, +0x7a3, 0x617, 0x815, 0x663, 0x815, 0x663, 0x838, 0x667, 0x838, 0x667, 0x838, +0x667, 0x7d3, 0x5eb, 0x7d3, 0x5eb, 0x7a9, 0x5b3, 0x7a9, 0x5b3, 0x7e1, 0x5e4, +0x7e1, 0x5e4, 0x805, 0x60b, 0x805, 0x60b, 0x89f, 0x6b0, 0x89f, 0x6b0, 0x89f, +0x6b0, 0x976, 0x79a, 0x976, 0x79a, 0xa00, 0x83e, 0xa00, 0x83e, 0x9a8, 0x807, +0x9a8, 0x807, 0x8cd, 0x751, 0x8cd, 0x751, 0x7b7, 0x664, 0x7b7, 0x664, 0x6ec, +0x5c3, 0x6ec, 0x5c3, 0x6ec, 0x5c3, 0x717, 0x61a, 0x717, 0x61a, 0x6af, 0x5dd, +0x6af, 0x5dd, 0x5d8, 0x52e, 0x5d8, 0x52e, 0x4d7, 0x452, 0x4d7, 0x452, 0x3fe, +0x399, 0x3fe, 0x399, 0x420, 0x3d6, 0x420, 0x3d6, 0x420, 0x3d6, 0x3ec, 0x3b7, +0x3ec, 0x3b7, 0x3e0, 0x3b8, 0x3e0, 0x3b8, 0x450, 0x42e, 0x450, 0x42e, 0x4f4, +0x4d2, 0x4f4, 0x4d2, 0x5b6, 0x58d, 0x5b6, 0x58d, 0x5b6, 0x58d, 0x64c, 0x616, +0x64c, 0x616, 0x69b, 0x651, 0x69b, 0x651, 0x684, 0x623, 0x684, 0x623, 0x6fb, +0x67f, 0x6fb, 0x67f, 0x77c, 0x6e3, 0x77c, 0x6e3, 0x7d2, 0x71b, 0x7d2, 0x71b, +0x7d2, 0x71b, 0x7c4, 0x6ee, 0x7c4, 0x6ee, 0x720, 0x62e, 0x720, 0x62e, 0x693, +0x586, 0x693, 0x586, 0x6d2, 0x5ae, 0x6d2, 0x5ae, 0x77b, 0x644, 0x77b, 0x644, +0x7c2, 0x67f, 0x7c2, 0x67f, 0x7c2, 0x67f, 0x7f6, 0x6aa, 0x7f6, 0x6aa, 0x711, +0x5c3, 0x711, 0x5c3, 0x652, 0x509, 0x652, 0x509, 0x59b, 0x45c, 0x59b, 0x45c, +0x4c8, 0x398, 0x4c8, 0x398, 0x4c8, 0x398, 0x4c8, 0x3ad, 0x4c8, 0x3ad, 0x47f, +0x37c, 0x47f, 0x37c, 0x43a, 0x355, 0x43a, 0x355, 0x2db, 0x215, 0x2db, 0x215, +0x146, 0xa2, 0x146, 0xa2, 0xffae, 0xff2d, 0xffae, 0xff2d, 0xffae, 0xff2d, 0xfe19, +0xfdbb, 0xfe19, 0xfdbb, 0xfdb9, 0xfd7f, 0xfdb9, 0xfd7f, 0xfd3f, 0xfd26, 0xfd3f, 0xfd26, +0xfd90, 0xfd97, 0xfd90, 0xfd97, 0xfe05, 0xfe2a, 0xfe05, 0xfe2a, 0xfe05, 0xfe2a, 0xfdfa, +0xfe3b, 0xfdfa, 0xfe3b, 0xfe3e, 0xfe97, 0xfe3e, 0xfe97, 0xfe4d, 0xfebd, 0xfe4d, 0xfebd, +0xfeca, 0xff4d, 0xfeca, 0xff4d, 0xff79, 0xe, 0xff79, 0xe, 0xff85, 0x29, 0xff85, +0x29, 0xff85, 0x29, 0xff53, 0x4, 0xff53, 0x4, 0xff44, 0, 0xff44, 0, +0xff3f, 0x6, 0xff3f, 0x6, 0xff2d, 0xfffd, 0xff2d, 0xfffd, 0xff00, 0xffd9, 0xff00, +0xffd9, 0xff3b, 0x1d, 0xff3b, 0x1d, 0xff3b, 0x1d, 0xfffb, 0xe4, 0xfffb, 0xe4, +0xa6, 0x197, 0xa6, 0x197, 0x103, 0x1fb, 0x103, 0x1fb, 0xa8, 0x1a7, 0xa8, +0x1a7, 0x74, 0x178, 0x74, 0x178, 0x74, 0x178, 0x7a, 0x181, 0x7a, 0x181, +0xffd9, 0xe2, 0xffd9, 0xe2, 0xffaf, 0xb6, 0xffaf, 0xb6, 0x15, 0x117, 0x15, +0x117, 0xf9, 0x1f2, 0xf9, 0x1f2, 0x1af, 0x299, 0x1af, 0x299, 0x1af, 0x299, +0x162, 0x238, 0x162, 0x238, 0x11c, 0x1da, 0x11c, 0x1da, 0x140, 0x1dd, 0x140, +0x1dd, 0x21d, 0x293, 0x21d, 0x293, 0x340, 0x388, 0x340, 0x388, 0x419, 0x42e, +0x419, 0x42e, 0x419, 0x42e, 0x43c, 0x416, 0x43c, 0x416, 0x43a, 0x3d4, 0x43a, +0x3d4, 0x53b, 0x491, 0x53b, 0x491, 0x6d8, 0x5e4, 0x6d8, 0x5e4, 0x8e3, 0x7a2, +0x8e3, 0x7a2, 0x8e3, 0x7a2, 0xb26, 0x997, 0xb26, 0x997, 0xcdc, 0xafd, 0xcdc, +0xafd, 0xd9b, 0xb6e, 0xd9b, 0xb6e, 0xe9d, 0xc24, 0xe9d, 0xc24, 0xfed, 0xd2b, +0xfed, 0xd2b, 0x11c0, 0xeba, 0x11c0, 0xeba, 0x11c0, 0xeba, 0x144d, 0x1109, 0x144d, +0x1109, 0x1710, 0x1395, 0x1710, 0x1395, 0x1a83, 0x16d8, 0x1a83, 0x16d8, 0x1d1c, 0x194c, +0x1d1c, 0x194c, 0x1ea0, 0x1ab4, 0x1ea0, 0x1ab4, 0x1f05, 0x1b05, 0x1f05, 0x1b05, 0x1f05, +0x1b05, 0x1f44, 0x1b3c, 0x1f44, 0x1b3c, 0x205c, 0x1c55, 0x205c, 0x1c55, 0x2140, 0x1d43, +0x2140, 0x1d43, 0x2220, 0x1e37, 0x2220, 0x1e37, 0x21e0, 0x1e13, 0x21e0, 0x1e13, 0x21e0, +0x1e13, 0x2158, 0x1dae, 0x2158, 0x1dae, 0x2039, 0x1cb8, 0x2039, 0x1cb8, 0x1dc9, 0x1a76, +0x1dc9, 0x1a76, 0x1c7b, 0x195a, 0x1c7b, 0x195a, 0x1bb1, 0x18c6, 0x1bb1, 0x18c6, 0x1ae3, +0x182e, 0x1ae3, 0x182e, 0x1ae3, 0x182e, 0x1a75, 0x17f6, 0x1a75, 0x17f6, 0x19b9, 0x1771, +0x19b9, 0x1771, 0x1900, 0x16ec, 0x1900, 0x16ec, 0x183e, 0x165b, 0x183e, 0x165b, 0x1737, +0x1582, 0x1737, 0x1582, 0x160a, 0x147f, 0x160a, 0x147f, 0x160a, 0x147f, 0x14b6, 0x1351, +0x14b6, 0x1351, 0x13b0, 0x126d, 0x13b0, 0x126d, 0x12a3, 0x117c, 0x12a3, 0x117c, 0x1126, +0x1018, 0x1126, 0x1018, 0xff4, 0xefb, 0xff4, 0xefb, 0xff4, 0xefb, 0xf53, 0xe6b, +0xf53, 0xe6b, 0xf0e, 0xe34, 0xf0e, 0xe34, 0xe70, 0xda1, 0xe70, 0xda1, 0xd2a, +0xc64, 0xd2a, 0xc64, 0xc13, 0xb55, 0xc13, 0xb55, 0xad4, 0xa1d, 0xad4, 0xa1d, +0xad4, 0xa1d, 0x94a, 0x89b, 0x94a, 0x89b, 0x7dc, 0x736, 0x7dc, 0x736, 0x663, +0x5c7, 0x663, 0x5c7, 0x5e2, 0x551, 0x5e2, 0x551, 0x58a, 0x507, 0x58a, 0x507, +0x445, 0x3d3, 0x445, 0x3d3, 0x445, 0x3d3, 0x2e6, 0x287, 0x2e6, 0x287, 0x1c4, +0x17b, 0x1c4, 0x17b, 0xda, 0xab, 0xda, 0xab, 0xffb4, 0xffa1, 0xffb4, 0xffa1, +0xfe5c, 0xfe68, 0xfe5c, 0xfe68, 0xfe5c, 0xfe68, 0xfd0e, 0xfd3b, 0xfd0e, 0xfd3b, 0xfc67, +0xfcb7, 0xfc67, 0xfcb7, 0xfc4e, 0xfcc4, 0xfc4e, 0xfcc4, 0xfbdf, 0xfc7c, 0xfbdf, 0xfc7c, +0xfb3f, 0xfc03, 0xfb3f, 0xfc03, 0xfad2, 0xfbbf, 0xfad2, 0xfbbf, 0xfad2, 0xfbbf, 0xfa31, +0xfb47, 0xfa31, 0xfb47, 0xf952, 0xfa8f, 0xf952, 0xfa8f, 0xf907, 0xfa6b, 0xf907, 0xfa6b, +0xf8c6, 0xfa50, 0xf8c6, 0xfa50, 0xf871, 0xfa20, 0xf871, 0xfa20, 0xf7ed, 0xf9bd, 0xf7ed, +0xf9bd, 0xf7ed, 0xf9bd, 0xf745, 0xf935, 0xf745, 0xf935, 0xf6af, 0xf8bb, 0xf6af, 0xf8bb, +0xf600, 0xf825, 0xf600, 0xf825, 0xf5a3, 0xf7de, 0xf5a3, 0xf7de, 0xf4b8, 0xf706, 0xf4b8, +0xf706, 0xf4b8, 0xf706, 0xf3dc, 0xf639, 0xf3dc, 0xf639, 0xf326, 0xf58e, 0xf326, 0xf58e, +0xf218, 0xf487, 0xf218, 0xf487, 0xf0e4, 0xf356, 0xf0e4, 0xf356, 0xef46, 0xf1b6, 0xef46, +0xf1b6, 0xeeec, 0xf157, 0xeeec, 0xf157, 0xeeec, 0xf157, 0xeeef, 0xf151, 0xeeef, 0xf151, +0xee78, 0xf0cc, 0xee78, 0xf0cc, 0xee80, 0xf0c4, 0xee80, 0xf0c4, 0xedf6, 0xf025, 0xedf6, +0xf025, 0xedae, 0xefc6, 0xedae, 0xefc6, 0xee4f, 0xf04d, 0xee4f, 0xf04d, 0xee4f, 0xf04d, +0xeec9, 0xf0aa, 0xeec9, 0xf0aa, 0xef3a, 0xf0fd, 0xef3a, 0xf0fd, 0xefcc, 0xf16f, 0xefcc, +0xf16f, 0xf02e, 0xf1b1, 0xf02e, 0xf1b1, 0xefc3, 0xf126, 0xefc3, 0xf126, 0xefc3, 0xf126, +0xef81, 0xf0c3, 0xef81, 0xf0c3, 0xf071, 0xf195, 0xf071, 0xf195, 0xf189, 0xf290, 0xf189, +0xf290, 0xf274, 0xf360, 0xf274, 0xf360, 0xf354, 0xf428, 0xf354, 0xf428, 0xf3bf, 0xf47e, +0xf3bf, 0xf47e, 0xf3bf, 0xf47e, 0xf3af, 0xf45d, 0xf3af, 0xf45d, 0xf335, 0xf3d8, 0xf335, +0xf3d8, 0xf27c, 0xf317, 0xf27c, 0xf317, 0xf223, 0xf2bc, 0xf223, 0xf2bc, 0xf206, 0xf2a1, +0xf206, 0xf2a1, 0xf291, 0xf333, 0xf291, 0xf333, 0xf291, 0xf333, 0xf363, 0xf412, 0xf363, +0xf412, 0xf3a4, 0xf465, 0xf3a4, 0xf465, 0xf4b0, 0xf587, 0xf4b0, 0xf587, 0xf57c, 0xf66d, +0xf57c, 0xf66d, 0xf53d, 0xf64d, 0xf53d, 0xf64d, 0xf53d, 0xf64d, 0xf527, 0xf657, 0xf527, +0xf657, 0xf532, 0xf686, 0xf532, 0xf686, 0xf50f, 0xf688, 0xf50f, 0xf688, 0xf4c5, 0xf664, +0xf4c5, 0xf664, 0xf444, 0xf60a, 0xf444, 0xf60a, 0xf317, 0xf503, 0xf317, 0xf503, 0xf317, +0xf503, 0xf224, 0xf435, 0xf224, 0xf435, 0xf1bd, 0xf3f1, 0xf1bd, 0xf3f1, 0xf13d, 0xf392, +0xf13d, 0xf392, 0xf0b1, 0xf323, 0xf0b1, 0xf323, 0xf087, 0xf313, 0xf087, 0xf313, 0xf087, +0xf313, 0xf08d, 0xf32e, 0xf08d, 0xf32e, 0xf043, 0xf2f5, 0xf043, 0xf2f5, 0xefb4, 0xf271, +0xefb4, 0xf271, 0xeec9, 0xf18d, 0xeec9, 0xf18d, 0xee47, 0xf10d, 0xee47, 0xf10d, 0xee09, +0xf0cc, 0xee09, 0xf0cc, 0xee09, 0xf0cc, 0xedc5, 0xf080, 0xedc5, 0xf080, 0xed31, 0xefdf, +0xed31, 0xefdf, 0xec68, 0xef04, 0xec68, 0xef04, 0xebfe, 0xee84, 0xebfe, 0xee84, 0xeb82, +0xedee, 0xeb82, 0xedee, 0xebb3, 0xee01, 0xebb3, 0xee01, 0xebb3, 0xee01, 0xec33, 0xee60, +0xec33, 0xee60, 0xec86, 0xee90, 0xec86, 0xee90, 0xec67, 0xee4b, 0xec67, 0xee4b, 0xebd0, +0xed8c, 0xebd0, 0xed8c, 0xebd6, 0xed69, 0xebd6, 0xed69, 0xebd6, 0xed69, 0xebc4, 0xed2d, +0xebc4, 0xed2d, 0xec50, 0xed8e, 0xec50, 0xed8e, 0xedb2, 0xeec6, 0xedb2, 0xeec6, 0xee61, +0xef4b, 0xee61, 0xef4b, 0xef03, 0xefc4, 0xef03, 0xefc4, 0xef9b, 0xf034, 0xef9b, 0xf034, +0xef9b, 0xf034, 0xefad, 0xf01f, 0xefad, 0xf01f, 0xefcc, 0xf01a, 0xefcc, 0xf01a, 0xf0d2, +0xf0ff, 0xf0d2, 0xf0ff, 0xf2e7, 0xf2f4, 0xf2e7, 0xf2f4, 0xf51c, 0xf50d, 0xf51c, 0xf50d, +0xf75a, 0xf732, 0xf75a, 0xf732, 0xf75a, 0xf732, 0xf91d, 0xf8e0, 0xf91d, 0xf8e0, 0xf9d8, +0xf989, 0xf9d8, 0xf989, 0xfabd, 0xfa5f, 0xfabd, 0xfa5f, 0xfc24, 0xfbbd, 0xfc24, 0xfbbd, +0xfd5f, 0xfcf1, 0xfd5f, 0xfcf1, 0xfd5f, 0xfcf1, 0xfee7, 0xfe77, 0xfee7, 0xfe77, 0x4d, +0xffde, 0x4d, 0xffde, 0xb6, 0x4b, 0xb6, 0x4b, 0xa4, 0x41, 0xa4, 0x41, +0x25, 0xffcc, 0x25, 0xffcc, 0xffec, 0xff9f, 0xffec, 0xff9f, 0xffec, 0xff9f, 0xffb6, +0xff78, 0xffb6, 0xff78, 0xff99, 0xff6a, 0xff99, 0xff6a, 0x40, 0x21, 0x40, 0x21, +0x2d, 0x1e, 0x2d, 0x1e, 0xff7e, 0xff7e, 0xff7e, 0xff7e, 0xff27, 0xff34, 0xff27, +0xff34, 0xff27, 0xff34, 0xfedc, 0xfef4, 0xfedc, 0xfef4, 0xfe6d, 0xfe8e, 0xfe6d, 0xfe8e, +0xfe90, 0xfeb6, 0xfe90, 0xfeb6, 0xfea9, 0xfecf, 0xfea9, 0xfecf, 0xfe12, 0xfe35, 0xfe12, +0xfe35, 0xfe12, 0xfe35, 0xfdf0, 0xfe0a, 0xfdf0, 0xfe0a, 0xfe4a, 0xfe57, 0xfe4a, 0xfe57, +0xfe89, 0xfe83, 0xfe89, 0xfe83, 0xff40, 0xff23, 0xff40, 0xff23, 0xa0, 0x67, 0xa0, +0x67, 0x144, 0xeb, 0x144, 0xeb, 0x144, 0xeb, 0x1b1, 0x135, 0x1b1, 0x135, +0x224, 0x180, 0x224, 0x180, 0x23a, 0x16d, 0x23a, 0x16d, 0x2a2, 0x1ac, 0x2a2, +0x1ac, 0x364, 0x243, 0x364, 0x243, 0x48f, 0x345, 0x48f, 0x345, 0x48f, 0x345, +0x53e, 0x3cc, 0x53e, 0x3cc, 0x5dd, 0x446, 0x5dd, 0x446, 0x67b, 0x4c3, 0x67b, +0x4c3, 0x6d7, 0x502, 0x6d7, 0x502, 0x75e, 0x572, 0x75e, 0x572, 0x75e, 0x572, +0x771, 0x575, 0x771, 0x575, 0x769, 0x563, 0x769, 0x563, 0x744, 0x53a, 0x744, +0x53a, 0x7e1, 0x5d9, 0x7e1, 0x5d9, 0x91b, 0x71d, 0x91b, 0x71d, 0x933, 0x745, +0x933, 0x745, 0x933, 0x745, 0x920, 0x748, 0x920, 0x748, 0x909, 0x74c, 0x909, +0x74c, 0x83d, 0x69f, 0x83d, 0x69f, 0x7e0, 0x664, 0x7e0, 0x664, 0x7ce, 0x676, +0x7ce, 0x676, 0x767, 0x633, 0x767, 0x633, 0x767, 0x633, 0x6f2, 0x5e2, 0x6f2, +0x5e2, 0x64e, 0x561, 0x64e, 0x561, 0x547, 0x479, 0x547, 0x479, 0x3ed, 0x33c, +0x3ed, 0x33c, 0x317, 0x27d, 0x317, 0x27d, 0x317, 0x27d, 0x298, 0x211, 0x298, +0x211, 0x1c5, 0x14a, 0x1c5, 0x14a, 0x1b2, 0x13c, 0x1b2, 0x13c, 0x20d, 0x197, +0x20d, 0x197, 0x243, 0x1c6, 0x243, 0x1c6, 0x315, 0x28b, 0x315, 0x28b, 0x315, +0x28b, 0x3ce, 0x332, 0x3ce, 0x332, 0x4c9, 0x416, 0x4c9, 0x416, 0x639, 0x56b, +0x639, 0x56b, 0x706, 0x61b, 0x706, 0x61b, 0x721, 0x617, 0x721, 0x617, 0x69e, +0x575, 0x69e, 0x575, 0x69e, 0x575, 0x6cb, 0x584, 0x6cb, 0x584, 0x7c1, 0x65e, +0x7c1, 0x65e, 0x844, 0x6c9, 0x844, 0x6c9, 0x892, 0x704, 0x892, 0x704, 0x8f2, +0x755, 0x8f2, 0x755, 0x8f2, 0x755, 0x8b6, 0x712, 0x8b6, 0x712, 0x81a, 0x674, +0x81a, 0x674, 0x7ab, 0x60c, 0x7ab, 0x60c, 0x6d8, 0x548, 0x6d8, 0x548, 0x617, +0x49c, 0x617, 0x49c, 0x5f5, 0x498, 0x5f5, 0x498, 0x5f5, 0x498, 0x5c5, 0x48d, +0x5c5, 0x48d, 0x47a, 0x36c, 0x47a, 0x36c, 0x379, 0x29a, 0x379, 0x29a, 0x291, +0x1e6, 0x291, 0x1e6, 0x8b, 0x19, 0x8b, 0x19, 0xff25, 0xfeec, 0xff25, 0xfeec, +0xff25, 0xfeec, 0xfe18, 0xfe1a, 0xfe18, 0xfe1a, 0xfd89, 0xfdc5, 0xfd89, 0xfdc5, 0xfd78, +0xfded, 0xfd78, 0xfded, 0xfdb0, 0xfe5a, 0xfdb0, 0xfe5a, 0xfdf6, 0xfed2, 0xfdf6, 0xfed2, +0xfdf6, 0xfed2, 0xfdde, 0xfee8, 0xfdde, 0xfee8, 0xfe5f, 0xff92, 0xfe5f, 0xff92, 0xfe88, +0xffde, 0xfe88, 0xffde, 0xfe9d, 0xf, 0xfe9d, 0xf, 0xfed3, 0x5b, 0xfed3, 0x5b, +0xfef6, 0x8e, 0xfef6, 0x8e, 0xfef6, 0x8e, 0xff15, 0xb6, 0xff15, 0xb6, 0xfe60, +0x4, 0xfe60, 0x4, 0xfe1d, 0xffbf, 0xfe1d, 0xffbf, 0xfe51, 0xffeb, 0xfe51, 0xffeb, +0xfdcf, 0xff5d, 0xfdcf, 0xff5d, 0xfd88, 0xff05, 0xfd88, 0xff05, 0xfd88, 0xff05, 0xfd95, +0xfefe, 0xfd95, 0xfefe, 0xfd99, 0xfeeb, 0xfd99, 0xfeeb, 0xfdf9, 0xff33, 0xfdf9, 0xff33, +0xfda8, 0xfec7, 0xfda8, 0xfec7, 0xfcd2, 0xfdd5, 0xfcd2, 0xfdd5, 0xfcd2, 0xfdd5, 0xfc9f, +0xfd84, 0xfc9f, 0xfd84, 0xfce6, 0xfdad, 0xfce6, 0xfdad, 0xfd67, 0xfe0f, 0xfd67, 0xfe0f, +0xfd82, 0xfe0a, 0xfd82, 0xfe0a, 0xfd92, 0xfdf9, 0xfd92, 0xfdf9, 0xfd9d, 0xfde3, 0xfd9d, +0xfde3, 0xfd9d, 0xfde3, 0xfd81, 0xfda4, 0xfd81, 0xfda4, 0xfe17, 0xfe16, 0xfe17, 0xfe16, +0xfeae, 0xfe87, 0xfeae, 0xfe87, 0xff94, 0xff45, 0xff94, 0xff45, 0xd7, 0x5e, 0xd7, +0x5e, 0xd7, 0x5e, 0x129, 0x83, 0x129, 0x83, 0x1a7, 0xd3, 0x1a7, 0xd3, +0x2de, 0x1d9, 0x2de, 0x1d9, 0x494, 0x35b, 0x494, 0x35b, 0x69b, 0x52e, 0x69b, +0x52e, 0x86e, 0x6c9, 0x86e, 0x6c9, 0x86e, 0x6c9, 0xa80, 0x8a2, 0xa80, 0x8a2, +0xc86, 0xa6f, 0xc86, 0xa6f, 0xdb2, 0xb62, 0xdb2, 0xb62, 0xe5d, 0xbd4, 0xe5d, +0xbd4, 0xf73, 0xcb3, 0xf73, 0xcb3, 0x1193, 0xe9e, 0x1193, 0xe9e, 0x1193, 0xe9e, +0x14f9, 0x11d2, 0x14f9, 0x11d2, 0x1812, 0x14bd, 0x1812, 0x14bd, 0x1a05, 0x1686, 0x1a05, +0x1686, 0x1b67, 0x17c3, 0x1b67, 0x17c3, 0x1ca8, 0x18e4, 0x1ca8, 0x18e4, 0x1ca8, 0x18e4, +0x1da4, 0x19c6, 0x1da4, 0x19c6, 0x1de9, 0x19f7, 0x1de9, 0x19f7, 0x1f0f, 0x1b0f, 0x1f0f, +0x1b0f, 0x1fec, 0x1be5, 0x1fec, 0x1be5, 0x1ff4, 0x1beb, 0x1ff4, 0x1beb, 0x2010, 0x1c0b, +0x2010, 0x1c0b, 0x2010, 0x1c0b, 0x1f60, 0x1b64, 0x1f60, 0x1b64, 0x1eb2, 0x1ac4, 0x1eb2, +0x1ac4, 0x1e2e, 0x1a52, 0x1e2e, 0x1a52, 0x1e00, 0x1a3a, 0x1e00, 0x1a3a, 0x1d2a, 0x197d, +0x1d2a, 0x197d, 0x1bfe, 0x186c, 0x1bfe, 0x186c, 0x1bfe, 0x186c, 0x1b48, 0x17d3, 0x1b48, +0x17d3, 0x1a05, 0x16ae, 0x1a05, 0x16ae, 0x1962, 0x162a, 0x1962, 0x162a, 0x191a, 0x1601, +0x191a, 0x1601, 0x18df, 0x15e6, 0x18df, 0x15e6, 0x18df, 0x15e6, 0x187b, 0x15a2, 0x187b, +0x15a2, 0x174a, 0x1491, 0x174a, 0x1491, 0x1657, 0x13be, 0x1657, 0x13be, 0x1539, 0x12c1, +0x1539, 0x12c1, 0x1393, 0x113b, 0x1393, 0x113b, 0x125b, 0x1024, 0x125b, 0x1024, 0x125b, +0x1024, 0x1110, 0xefc, 0x1110, 0xefc, 0xfab, 0xdbb, 0xfab, 0xdbb, 0xeeb, 0xd20, +0xeeb, 0xd20, 0xdcb, 0xc27, 0xdcb, 0xc27, 0xc23, 0xaa9, 0xc23, 0xaa9, 0xa6d, +0x91f, 0xa6d, 0x91f, 0xa6d, 0x91f, 0x8dc, 0x7bb, 0x8dc, 0x7bb, 0x761, 0x671, +0x761, 0x671, 0x5d1, 0x513, 0x5d1, 0x513, 0x4c1, 0x436, 0x4c1, 0x436, 0x38f, +0x33a, 0x38f, 0x33a, 0x38f, 0x33a, 0x21d, 0x1fe, 0x21d, 0x1fe, 0xd0, 0xe8, +0xd0, 0xe8, 0xfecc, 0xff1b, 0xfecc, 0xff1b, 0xfd00, 0xfd84, 0xfd00, 0xfd84, 0xfbea, +0xfca3, 0xfbea, 0xfca3, 0xfb00, 0xfbeb, 0xfb00, 0xfbeb, 0xfb00, 0xfbeb, 0xfab3, 0xfbce, +0xfab3, 0xfbce, 0xfa19, 0xfb60, 0xfa19, 0xfb60, 0xf934, 0xfaa4, 0xf934, 0xfaa4, 0xf879, +0xfa0d, 0xf879, 0xfa0d, 0xf7db, 0xf990, 0xf7db, 0xf990, 0xf811, 0xf9e1, 0xf811, 0xf9e1, +0xf811, 0xf9e1, 0xf8a6, 0xfa8b, 0xf8a6, 0xfa8b, 0xf8b3, 0xfaaa, 0xf8b3, 0xfaaa, 0xf86b, +0xfa6d, 0xf86b, 0xfa6d, 0xf810, 0xfa19, 0xf810, 0xfa19, 0xf7b4, 0xf9c0, 0xf7b4, 0xf9c0, +0xf7b4, 0xf9c0, 0xf7fc, 0xfa07, 0xf7fc, 0xfa07, 0xf810, 0xfa16, 0xf810, 0xfa16, 0xf7aa, +0xf9a8, 0xf7aa, 0xf9a8, 0xf70d, 0xf8ff, 0xf70d, 0xf8ff, 0xf6c0, 0xf8a5, 0xf6c0, 0xf8a5, +0xf687, 0xf85d, 0xf687, 0xf85d, 0xf687, 0xf85d, 0xf572, 0xf737, 0xf572, 0xf737, 0xf4c7, +0xf67b, 0xf4c7, 0xf67b, 0xf3d4, 0xf576, 0xf3d4, 0xf576, 0xf362, 0xf4f2, 0xf362, 0xf4f2, +0xf359, 0xf4d8, 0xf359, 0xf4d8, 0xf2c3, 0xf431, 0xf2c3, 0xf431, 0xf2c3, 0xf431, 0xf29f, +0xf3fc, 0xf29f, 0xf3fc, 0xf2a0, 0xf3ed, 0xf2a0, 0xf3ed, 0xf330, 0xf46e, 0xf330, 0xf46e, +0xf348, 0xf478, 0xf348, 0xf478, 0xf3c4, 0xf4e7, 0xf3c4, 0xf4e7, 0xf3c4, 0xf4e7, 0xf4a0, +0xf5b7, 0xf4a0, 0xf5b7, 0xf4ea, 0xf5f6, 0xf4ea, 0xf5f6, 0xf5c3, 0xf6c6, 0xf5c3, 0xf6c6, +0xf62d, 0xf727, 0xf62d, 0xf727, 0xf63d, 0xf72e, 0xf63d, 0xf72e, 0xf60d, 0xf6f6, 0xf60d, +0xf6f6, 0xf60d, 0xf6f6, 0xf5f4, 0xf6d7, 0xf5f4, 0xf6d7, 0xf69e, 0xf77c, 0xf69e, 0xf77c, +0xf6c4, 0xf79f, 0xf6c4, 0xf79f, 0xf654, 0xf72c, 0xf654, 0xf72c, 0xf5c3, 0xf69a, 0xf5c3, +0xf69a, 0xf4cb, 0xf5a2, 0xf4cb, 0xf5a2, 0xf4cb, 0xf5a2, 0xf434, 0xf50d, 0xf434, 0xf50d, +0xf426, 0xf503, 0xf426, 0xf503, 0xf3b9, 0xf49c, 0xf3b9, 0xf49c, 0xf328, 0xf412, 0xf328, +0xf412, 0xf31f, 0xf414, 0xf31f, 0xf414, 0xf31f, 0xf414, 0xf388, 0xf489, 0xf388, 0xf489, +0xf3be, 0xf4cf, 0xf3be, 0xf4cf, 0xf3d7, 0xf4f9, 0xf3d7, 0xf4f9, 0xf430, 0xf566, 0xf430, +0xf566, 0xf427, 0xf574, 0xf427, 0xf574, 0xf403, 0xf568, 0xf403, 0xf568, 0xf403, 0xf568, +0xf41b, 0xf59b, 0xf41b, 0xf59b, 0xf398, 0xf535, 0xf398, 0xf535, 0xf365, 0xf521, 0xf365, +0xf521, 0xf34d, 0xf529, 0xf34d, 0xf529, 0xf2d2, 0xf4ce, 0xf2d2, 0xf4ce, 0xf287, 0xf4a5, +0xf287, 0xf4a5, 0xf287, 0xf4a5, 0xf212, 0xf452, 0xf212, 0xf452, 0xf1d1, 0xf433, 0xf1d1, +0xf433, 0xf17c, 0xf3fe, 0xf17c, 0xf3fe, 0xf131, 0xf3d2, 0xf131, 0xf3d2, 0xf150, 0xf40f, +0xf150, 0xf40f, 0xf150, 0xf40f, 0xf13e, 0xf417, 0xf13e, 0xf417, 0xf050, 0xf341, 0xf050, +0xf341, 0xef98, 0xf29c, 0xef98, 0xf29c, 0xef3b, 0xf250, 0xef3b, 0xf250, 0xeebf, 0xf1de, +0xeebf, 0xf1de, 0xeea2, 0xf1c8, 0xeea2, 0xf1c8, 0xeea2, 0xf1c8, 0xede5, 0xf10c, 0xede5, +0xf10c, 0xecff, 0xf021, 0xecff, 0xf021, 0xec2a, 0xef41, 0xec2a, 0xef41, 0xec39, 0xef3e, +0xec39, 0xef3e, 0xec5b, 0xef4a, 0xec5b, 0xef4a, 0xec23, 0xeef5, 0xec23, 0xeef5, 0xec23, +0xeef5, 0xecb6, 0xef66, 0xecb6, 0xef66, 0xec67, 0xeef0, 0xec67, 0xeef0, 0xec15, 0xee73, +0xec15, 0xee73, 0xeb7e, 0xedab, 0xeb7e, 0xedab, 0xeb55, 0xed4f, 0xeb55, 0xed4f, 0xeb55, +0xed4f, 0xec27, 0xedec, 0xec27, 0xedec, 0xed75, 0xef03, 0xed75, 0xef03, 0xefa4, 0xf0f9, +0xefa4, 0xf0f9, 0xf0b0, 0xf1ce, 0xf0b0, 0xf1ce, 0xf129, 0xf211, 0xf129, 0xf211, 0xf0f7, +0xf1aa, 0xf0f7, 0xf1aa, 0xf0f7, 0xf1aa, 0xf0e6, 0xf168, 0xf0e6, 0xf168, 0xf1ec, 0xf241, +0xf1ec, 0xf241, 0xf317, 0xf344, 0xf317, 0xf344, 0xf4e4, 0xf4ef, 0xf4e4, 0xf4ef, 0xf63c, +0xf62a, 0xf63c, 0xf62a, 0xf63c, 0xf62a, 0xf746, 0xf71d, 0xf746, 0xf71d, 0xf862, 0xf828, +0xf862, 0xf828, 0xf8df, 0xf89b, 0xf8df, 0xf89b, 0xf95c, 0xf915, 0xf95c, 0xf915, 0xf9d8, +0xf993, 0xf9d8, 0xf993, 0xfa4e, 0xfa11, 0xfa4e, 0xfa11, 0xfa4e, 0xfa11, 0xfb38, 0xfb07, +0xfb38, 0xfb07, 0xfc25, 0xfc06, 0xfc25, 0xfc06, 0xfc72, 0xfc66, 0xfc72, 0xfc66, 0xfc48, +0xfc53, 0xfc48, 0xfc53, 0xfc4a, 0xfc6d, 0xfc4a, 0xfc6d, 0xfc81, 0xfcbc, 0xfc81, 0xfcbc, +0xfc81, 0xfcbc, 0xfc58, 0xfcab, 0xfc58, 0xfcab, 0xfbd0, 0xfc38, 0xfbd0, 0xfc38, 0xfb60, +0xfbdc, 0xfb60, 0xfbdc, 0xfad6, 0xfb62, 0xfad6, 0xfb62, 0xfa89, 0xfb21, 0xfa89, 0xfb21, +0xfa89, 0xfb21, 0xfa4f, 0xfaee, 0xfa4f, 0xfaee, 0xf98f, 0xfa30, 0xf98f, 0xfa30, 0xf943, +0xf9e0, 0xf943, 0xf9e0, 0xf911, 0xf9a4, 0xf911, 0xf9a4, 0xf8e1, 0xf966, 0xf8e1, 0xf966, +0xf902, 0xf972, 0xf902, 0xf972, 0xf902, 0xf972, 0xf935, 0xf98b, 0xf935, 0xf98b, 0xf9b0, +0xf9e8, 0xf9b0, 0xf9e8, 0xfa1d, 0xfa32, 0xfa1d, 0xfa32, 0xfa96, 0xfa85, 0xfa96, 0xfa85, +0xfb8d, 0xfb55, 0xfb8d, 0xfb55, 0xfc81, 0xfc1f, 0xfc81, 0xfc1f, 0xfc81, 0xfc1f, 0xfcba, +0xfc2d, 0xfcba, 0xfc2d, 0xfd5a, 0xfca2, 0xfd5a, 0xfca2, 0xfdfd, 0xfd1c, 0xfdfd, 0xfd1c, +0xfeed, 0xfde4, 0xfeed, 0xfde4, 0x7f, 0xff52, 0x7f, 0xff52, 0x7f, 0xff52, 0x1b1, +0x63, 0x1b1, 0x63, 0x276, 0x10c, 0x276, 0x10c, 0x2bb, 0x139, 0x2bb, 0x139, +0x3bd, 0x229, 0x3bd, 0x229, 0x3b1, 0x212, 0x3b1, 0x212, 0x351, 0x1ab, 0x351, +0x1ab, 0x351, 0x1ab, 0x3b5, 0x20f, 0x3b5, 0x20f, 0x3d9, 0x239, 0x3d9, 0x239, +0x49d, 0x308, 0x49d, 0x308, 0x4f4, 0x370, 0x4f4, 0x370, 0x598, 0x42b, 0x598, +0x42b, 0x601, 0x4ad, 0x601, 0x4ad, 0x601, 0x4ad, 0x694, 0x55e, 0x694, 0x55e, +0x776, 0x660, 0x776, 0x660, 0x77d, 0x688, 0x77d, 0x688, 0x7a3, 0x6d1, 0x7a3, +0x6d1, 0x764, 0x6b4, 0x764, 0x6b4, 0x764, 0x6b4, 0x72e, 0x69f, 0x72e, 0x69f, +0x697, 0x626, 0x697, 0x626, 0x5ff, 0x5a9, 0x5ff, 0x5a9, 0x5f1, 0x5b3, 0x5f1, +0x5b3, 0x511, 0x4e5, 0x511, 0x4e5, 0x489, 0x46a, 0x489, 0x46a, 0x489, 0x46a, +0x48e, 0x474, 0x48e, 0x474, 0x388, 0x36f, 0x388, 0x36f, 0x21b, 0x1fb, 0x21b, +0x1fb, 0x114, 0xe7, 0x114, 0xe7, 0xd0, 0x8f, 0xd0, 0x8f, 0x18b, 0x130, +0x18b, 0x130, 0x18b, 0x130, 0x2be, 0x245, 0x2be, 0x245, 0x3d2, 0x335, 0x3d2, +0x335, 0x44a, 0x386, 0x44a, 0x386, 0x4ac, 0x3be, 0x4ac, 0x3be, 0x519, 0x401, +0x519, 0x401, 0x519, 0x401, 0x56f, 0x42c, 0x56f, 0x42c, 0x5be, 0x452, 0x5be, +0x452, 0x652, 0x4bf, 0x652, 0x4bf, 0x6f3, 0x53d, 0x6f3, 0x53d, 0x763, 0x591, +0x763, 0x591, 0x765, 0x57c, 0x765, 0x57c, 0x765, 0x57c, 0x6b7, 0x4bf, 0x6b7, +0x4bf, 0x64c, 0x44d, 0x64c, 0x44d, 0x60c, 0x40f, 0x60c, 0x40f, 0x643, 0x451, +0x643, 0x451, 0x68f, 0x4b2, 0x68f, 0x4b2, 0x66a, 0x4ab, 0x66a, 0x4ab, 0x66a, +0x4ab, 0x61f, 0x487, 0x61f, 0x487, 0x53a, 0x3d1, 0x53a, 0x3d1, 0x42e, 0x2fc, +0x42e, 0x2fc, 0x3bd, 0x2c9, 0x3bd, 0x2c9, 0x30e, 0x25d, 0x30e, 0x25d, 0x30e, +0x25d, 0x1e2, 0x179, 0x1e2, 0x179, 0x11c, 0xfd, 0x11c, 0xfd, 0x41, 0x6d, +0x41, 0x6d, 0xffff, 0x77, 0xffff, 0x77, 0x25, 0xe7, 0x25, 0xe7, 0x8a, +0x194, 0x8a, 0x194, 0x8a, 0x194, 0xcc, 0x219, 0xcc, 0x219, 0x10b, 0x296, +0x10b, 0x296, 0x1c9, 0x38d, 0x1c9, 0x38d, 0x149, 0x340, 0x149, 0x340, 0xfc, +0x31e, 0xfc, 0x31e, 0xcb, 0x310, 0xcb, 0x310, 0xcb, 0x310, 0x5c, 0x2be, +0x5c, 0x2be, 0xfff4, 0x269, 0xfff4, 0x269, 0xff43, 0x1c5, 0xff43, 0x1c5, 0xfefc, +0x184, 0xfefc, 0x184, 0xfeaa, 0x130, 0xfeaa, 0x130, 0xfeaa, 0x130, 0xff32, 0x1b0, +0xff32, 0x1b0, 0xff94, 0x203, 0xff94, 0x203, 0xff3a, 0x195, 0xff3a, 0x195, 0xfed9, +0x11b, 0xfed9, 0x11b, 0xfe6b, 0x8e, 0xfe6b, 0x8e, 0xfe69, 0x69, 0xfe69, 0x69, +0xfe69, 0x69, 0xfe42, 0x1d, 0xfe42, 0x1d, 0xfe71, 0x22, 0xfe71, 0x22, 0xfee4, +0x67, 0xfee4, 0x67, 0xfe7f, 0xffd1, 0xfe7f, 0xffd1, 0xfeb0, 0xffce, 0xfeb0, 0xffce, +0xff54, 0x3b, 0xff54, 0x3b, 0xff54, 0x3b, 0xff45, 0xfff2, 0xff45, 0xfff2, 0xffae, +0x1f, 0xffae, 0x1f, 0x2d, 0x5f, 0x2d, 0x5f, 0x4b, 0x3b, 0x4b, 0x3b, +0x59, 0x6, 0x59, 0x6, 0x59, 0x6, 0xce, 0x35, 0xce, 0x35, 0x174, +0x95, 0x174, 0x95, 0x25e, 0x138, 0x25e, 0x138, 0x479, 0x30b, 0x479, 0x30b, +0x6d2, 0x51d, 0x6d2, 0x51d, 0x866, 0x66b, 0x866, 0x66b, 0x866, 0x66b, 0x93e, +0x6ff, 0x93e, 0x6ff, 0xa3f, 0x7bf, 0xa3f, 0x7bf, 0xb68, 0x8ab, 0xb68, 0x8ab, +0xcdf, 0x9e9, 0xcdf, 0x9e9, 0xe77, 0xb4d, 0xe77, 0xb4d, 0x1056, 0xcff, 0x1056, +0xcff, 0x1056, 0xcff, 0x12da, 0xf5c, 0x12da, 0xf5c, 0x1552, 0x11b4, 0x1552, 0x11b4, +0x1808, 0x1450, 0x1808, 0x1450, 0x1a1f, 0x1656, 0x1a1f, 0x1656, 0x1bd8, 0x1803, 0x1bd8, +0x1803, 0x1bd8, 0x1803, 0x1d9a, 0x19c2, 0x1d9a, 0x19c2, 0x1e71, 0x1a9d, 0x1e71, 0x1a9d, +0x1ee9, 0x1b1e, 0x1ee9, 0x1b1e, 0x1fbf, 0x1c02, 0x1fbf, 0x1c02, 0x2039, 0x1c90, 0x2039, +0x1c90, 0x2091, 0x1cff, 0x2091, 0x1cff, 0x2091, 0x1cff, 0x2113, 0x1d9b, 0x2113, 0x1d9b, +0x2138, 0x1ddd, 0x2138, 0x1ddd, 0x214d, 0x1e10, 0x214d, 0x1e10, 0x20fa, 0x1dda, 0x20fa, +0x1dda, 0x206a, 0x1d68, 0x206a, 0x1d68, 0x206a, 0x1d68, 0x1f28, 0x1c42, 0x1f28, 0x1c42, +0x1e65, 0x1b99, 0x1e65, 0x1b99, 0x1e4d, 0x1b9a, 0x1e4d, 0x1b9a, 0x1db9, 0x1b1d, 0x1db9, +0x1b1d, 0x1d75, 0x1aed, 0x1d75, 0x1aed, 0x1cdf, 0x1a68, 0x1cdf, 0x1a68, 0x1cdf, 0x1a68, +0x1c35, 0x19cd, 0x1c35, 0x19cd, 0x1aee, 0x1894, 0x1aee, 0x1894, 0x1971, 0x1722, 0x1971, +0x1722, 0x181b, 0x15d7, 0x181b, 0x15d7, 0x16cf, 0x1495, 0x16cf, 0x1495, 0x165a, 0x142a, +0x165a, 0x142a, 0x165a, 0x142a, 0x15a5, 0x1380, 0x15a5, 0x1380, 0x14c2, 0x12a8, 0x14c2, +0x12a8, 0x13ba, 0x11ae, 0x13ba, 0x11ae, 0x125f, 0x1062, 0x125f, 0x1062, 0x10c5, 0xeda, +0x10c5, 0xeda, 0x10c5, 0xeda, 0xeaf, 0xcda, 0xeaf, 0xcda, 0xd07, 0xb49, 0xd07, +0xb49, 0xbd3, 0xa30, 0xbd3, 0xa30, 0xa4e, 0x8c9, 0xa4e, 0x8c9, 0x986, 0x822, +0x986, 0x822, 0x8a6, 0x766, 0x8a6, 0x766, 0x8a6, 0x766, 0x6b9, 0x5a0, 0x6b9, +0x5a0, 0x4ec, 0x3fc, 0x4ec, 0x3fc, 0x330, 0x26b, 0x330, 0x26b, 0x1b9, 0x121, +0x1b9, 0x121, 0x88, 0x1e, 0x88, 0x1e, 0xff99, 0xff5e, 0xff99, 0xff5e, 0xff99, +0xff5e, 0xfe51, 0xfe45, 0xfe51, 0xfe45, 0xfcfa, 0xfd1d, 0xfcfa, 0xfd1d, 0xfc61, 0xfcb3, +0xfc61, 0xfcb3, 0xfbb0, 0xfc2e, 0xfbb0, 0xfc2e, 0xfab6, 0xfb60, 0xfab6, 0xfb60, 0xfab6, +0xfb60, 0xfa1b, 0xfaef, 0xfa1b, 0xfaef, 0xf98a, 0xfa87, 0xf98a, 0xfa87, 0xf8b2, 0xf9d4, +0xf8b2, 0xf9d4, 0xf834, 0xf978, 0xf834, 0xf978, 0xf759, 0xf8bd, 0xf759, 0xf8bd, 0xf699, +0xf819, 0xf699, 0xf819, 0xf699, 0xf819, 0xf647, 0xf7de, 0xf647, 0xf7de, 0xf658, 0xf804, +0xf658, 0xf804, 0xf69c, 0xf857, 0xf69c, 0xf857, 0xf5f1, 0xf7b7, 0xf5f1, 0xf7b7, 0xf52a, +0xf6f6, 0xf52a, 0xf6f6, 0xf4b5, 0xf684, 0xf4b5, 0xf684, 0xf4b5, 0xf684, 0xf40a, 0xf5d6, +0xf40a, 0xf5d6, 0xf3b7, 0xf57c, 0xf3b7, 0xf57c, 0xf42c, 0xf5e5, 0xf42c, 0xf5e5, 0xf405, +0xf5af, 0xf405, 0xf5af, 0xf39d, 0xf534, 0xf39d, 0xf534, 0xf39d, 0xf534, 0xf33d, 0xf4be, +0xf33d, 0xf4be, 0xf2af, 0xf416, 0xf2af, 0xf416, 0xf25b, 0xf3a8, 0xf25b, 0xf3a8, 0xf2a9, +0xf3d9, 0xf2a9, 0xf3d9, 0xf365, 0xf478, 0xf365, 0xf478, 0xf3a9, 0xf49f, 0xf3a9, 0xf49f, +0xf3a9, 0xf49f, 0xf4d7, 0xf5b1, 0xf4d7, 0xf5b1, 0xf599, 0xf658, 0xf599, 0xf658, 0xf5b3, +0xf65b, 0xf5b3, 0xf65b, 0xf5f9, 0xf68d, 0xf5f9, 0xf68d, 0xf662, 0xf6e6, 0xf662, 0xf6e6, +0xf752, 0xf7ca, 0xf752, 0xf7ca, 0xf752, 0xf7ca, 0xf7a3, 0xf815, 0xf7a3, 0xf815, 0xf7c4, +0xf835, 0xf7c4, 0xf835, 0xf721, 0xf797, 0xf721, 0xf797, 0xf672, 0xf6f2, 0xf672, 0xf6f2, +0xf657, 0xf6e7, 0xf657, 0xf6e7, 0xf657, 0xf6e7, 0xf615, 0xf6bb, 0xf615, 0xf6bb, 0xf5cd, +0xf68c, 0xf5cd, 0xf68c, 0xf531, 0xf610, 0xf531, 0xf610, 0xf4c4, 0xf5c6, 0xf4c4, 0xf5c6, +0xf454, 0xf57e, 0xf454, 0xf57e, 0xf3a4, 0xf4f7, 0xf3a4, 0xf4f7, 0xf3a4, 0xf4f7, 0xf3ad, +0xf52d, 0xf3ad, 0xf52d, 0xf40c, 0xf5b9, 0xf40c, 0xf5b9, 0xf42b, 0xf607, 0xf42b, 0xf607, +0xf519, 0xf723, 0xf519, 0xf723, 0xf576, 0xf7af, 0xf576, 0xf7af, 0xf4d6, 0xf73c, 0xf4d6, +0xf73c, 0xf4d6, 0xf73c, 0xf441, 0xf6d3, 0xf441, 0xf6d3, 0xf387, 0xf642, 0xf387, 0xf642, +0xf2e9, 0xf5cc, 0xf2e9, 0xf5cc, 0xf24e, 0xf556, 0xf24e, 0xf556, 0xf1c3, 0xf4ed, 0xf1c3, +0xf4ed, 0xf1c3, 0xf4ed, 0xf118, 0xf461, 0xf118, 0xf461, 0xf0bc, 0xf420, 0xf0bc, 0xf420, +0xf0dd, 0xf45b, 0xf0dd, 0xf45b, 0xf059, 0xf3ed, 0xf059, 0xf3ed, 0xef39, 0xf2df, 0xef39, +0xf2df, 0xee64, 0xf219, 0xee64, 0xf219, 0xee64, 0xf219, 0xed9c, 0xf15c, 0xed9c, 0xf15c, +0xed72, 0xf13a, 0xed72, 0xf13a, 0xed85, 0xf151, 0xed85, 0xf151, 0xecd2, 0xf09e, 0xecd2, +0xf09e, 0xebff, 0xefc7, 0xebff, 0xefc7, 0xeb18, 0xeed7, 0xeb18, 0xeed7, 0xeb18, 0xeed7, +0xea65, 0xee18, 0xea65, 0xee18, 0xe9b2, 0xed54, 0xe9b2, 0xed54, 0xe939, 0xecc3, 0xe939, +0xecc3, 0xe961, 0xecd0, 0xe961, 0xecd0, 0xe9ec, 0xed3c, 0xe9ec, 0xed3c, 0xe9ec, 0xed3c, +0xea40, 0xed6b, 0xea40, 0xed6b, 0xeaba, 0xedbb, 0xeaba, 0xedbb, 0xeaf7, 0xedcb, 0xeaf7, +0xedcb, 0xea53, 0xecf6, 0xea53, 0xecf6, 0xea7d, 0xeceb, 0xea7d, 0xeceb, 0xeb4f, 0xed86, +0xeb4f, 0xed86, 0xeb4f, 0xed86, 0xec55, 0xee52, 0xec55, 0xee52, 0xed3e, 0xef02, 0xed3e, +0xef02, 0xeeb9, 0xf043, 0xeeb9, 0xf043, 0xefb9, 0xf109, 0xefb9, 0xf109, 0xf05a, 0xf172, +0xf05a, 0xf172, 0xf222, 0xf304, 0xf222, 0xf304, 0xf222, 0xf304, 0xf349, 0xf3fa, 0xf349, +0xf3fa, 0xf4a6, 0xf529, 0xf4a6, 0xf529, 0xf603, 0xf65c, 0xf603, 0xf65c, 0xf767, 0xf79d, +0xf767, 0xf79d, 0xf892, 0xf8aa, 0xf892, 0xf8aa, 0xf892, 0xf8aa, 0xf93f, 0xf940, 0xf93f, +0xf940, 0xfa30, 0xfa1e, 0xfa30, 0xfa1e, 0xfa7e, 0xfa61, 0xfa7e, 0xfa61, 0xfb77, 0xfb54, +0xfb77, 0xfb54, 0xfcb8, 0xfc93, 0xfcb8, 0xfc93, 0xfd9f, 0xfd7e, 0xfd9f, 0xfd7e, 0xfd9f, +0xfd7e, 0xfe33, 0xfe1a, 0xfe33, 0xfe1a, 0xfe62, 0xfe54, 0xfe62, 0xfe54, 0xfefb, 0xfefc, +0xfefb, 0xfefc, 0xff74, 0xff84, 0xff74, 0xff84, 0xff89, 0xffaa, 0xff89, 0xffaa, 0xffc3, +0xfff4, 0xffc3, 0xfff4, 0xffc3, 0xfff4, 0xff61, 0xffa2, 0xff61, 0xffa2, 0xfec1, 0xff10, +0xfec1, 0xff10, 0xfef6, 0xff51, 0xfef6, 0xff51, 0xfe7d, 0xfee2, 0xfe7d, 0xfee2, 0xfd67, +0xfdd2, 0xfd67, 0xfdd2, 0xfd67, 0xfdd2, 0xfc90, 0xfcff, 0xfc90, 0xfcff, 0xfbcd, 0xfc3c, +0xfbcd, 0xfc3c, 0xfb2f, 0xfb9a, 0xfb2f, 0xfb9a, 0xfab1, 0xfb16, 0xfab1, 0xfb16, 0xfa39, +0xfa94, 0xfa39, 0xfa94, 0xf9a6, 0xf9f3, 0xf9a6, 0xf9f3, 0xf9a6, 0xf9f3, 0xf984, 0xf9c2, +0xf984, 0xf9c2, 0xf9e0, 0xfa0c, 0xf9e0, 0xfa0c, 0xf9da, 0xf9f1, 0xf9da, 0xf9f1, 0xf9ae, +0xf9af, 0xf9ae, 0xf9af, 0xf9b6, 0xf9a0, 0xf9b6, 0xf9a0, 0xf9b6, 0xf9a0, 0xf999, 0xf96a, +0xf999, 0xf96a, 0xf9e1, 0xf999, 0xf9e1, 0xf999, 0xf9f7, 0xf996, 0xf9f7, 0xf996, 0xfa29, +0xf9ae, 0xfa29, 0xf9ae, 0xfb39, 0xfaa5, 0xfb39, 0xfaa5, 0xfcc5, 0xfc19, 0xfcc5, 0xfc19, +0xfcc5, 0xfc19, 0xfe62, 0xfd9f, 0xfe62, 0xfd9f, 0xff72, 0xfe99, 0xff72, 0xfe99, 0xfff3, +0xff05, 0xfff3, 0xff05, 0x40, 0xff3f, 0x40, 0xff3f, 0xdc, 0xffcb, 0xdc, 0xffcb, +0x168, 0x49, 0x168, 0x49, 0x168, 0x49, 0x250, 0x124, 0x250, 0x124, 0x2fc, +0x1c8, 0x2fc, 0x1c8, 0x38c, 0x252, 0x38c, 0x252, 0x482, 0x345, 0x482, 0x345, +0x548, 0x40a, 0x548, 0x40a, 0x548, 0x40a, 0x631, 0x4f7, 0x631, 0x4f7, 0x73b, +0x607, 0x73b, 0x607, 0x8aa, 0x77f, 0x8aa, 0x77f, 0x8dd, 0x7bd, 0x8dd, 0x7bd, +0x929, 0x817, 0x929, 0x817, 0x99a, 0x898, 0x99a, 0x898, 0x99a, 0x898, 0x8f9, +0x808, 0x8f9, 0x808, 0x8d7, 0x7f8, 0x8d7, 0x7f8, 0x8c4, 0x7f7, 0x8c4, 0x7f7, +0x90c, 0x84f, 0x90c, 0x84f, 0x88f, 0x7e3, 0x88f, 0x7e3, 0x79f, 0x700, 0x79f, +0x700, 0x79f, 0x700, 0x5f9, 0x565, 0x5f9, 0x565, 0x398, 0x30c, 0x398, 0x30c, +0x2be, 0x235, 0x2be, 0x235, 0x2be, 0x234, 0x2be, 0x234, 0x356, 0x2c8, 0x356, +0x2c8, 0x356, 0x2c8, 0x40a, 0x372, 0x40a, 0x372, 0x489, 0x3e3, 0x489, 0x3e3, +0x51a, 0x463, 0x51a, 0x463, 0x52c, 0x45f, 0x52c, 0x45f, 0x542, 0x45d, 0x542, +0x45d, 0x5c2, 0x4c3, 0x5c2, 0x4c3, 0x5c2, 0x4c3, 0x5fd, 0x4e3, 0x5fd, 0x4e3, +0x6b9, 0x584, 0x6b9, 0x584, 0x7fd, 0x6ae, 0x7fd, 0x6ae, 0x868, 0x703, 0x868, +0x703, 0x819, 0x6a1, 0x819, 0x6a1, 0x796, 0x60f, 0x796, 0x60f, 0x796, 0x60f, +0x6fc, 0x56d, 0x6fc, 0x56d, 0x6bd, 0x52c, 0x6bd, 0x52c, 0x708, 0x57c, 0x708, +0x57c, 0x6d0, 0x552, 0x6d0, 0x552, 0x62c, 0x4c3, 0x62c, 0x4c3, 0x62c, 0x4c3, +0x605, 0x4ba, 0x605, 0x4ba, 0x623, 0x4fd, 0x623, 0x4fd, 0x56f, 0x474, 0x56f, +0x474, 0x464, 0x39c, 0x464, 0x39c, 0x378, 0x2e7, 0x378, 0x2e7, 0x287, 0x232, +0x287, 0x232, 0x287, 0x232, 0x1db, 0x1c4, 0x1db, 0x1c4, 0x9d, 0xc5, 0x9d, +0xc5, 0xff55, 0xffbc, 0xff55, 0xffbc, 0xfe8b, 0xff2f, 0xfe8b, 0xff2f, 0xfe7c, 0xff5a, +0xfe7c, 0xff5a, 0xfeed, 0, 0xfeed, 0, 0xfeed, 0, 0xff3c, 0x7f, 0xff3c, +0x7f, 0xff4d, 0xb9, 0xff4d, 0xb9, 0xffa7, 0x136, 0xffa7, 0x136, 0x2b, 0x1d5, +0x2b, 0x1d5, 0x13, 0x1cf, 0x13, 0x1cf, 0x13, 0x1cf, 0xc, 0x1d4, 0xc, +0x1d4, 0xffe1, 0x1ad, 0xffe1, 0x1ad, 0xffe5, 0x1ac, 0xffe5, 0x1ac, 0xfff7, 0x1b5, +0xfff7, 0x1b5, 0x32, 0x1e0, 0x32, 0x1e0, 0x3f, 0x1da, 0x3f, 0x1da, 0x3f, +0x1da, 0x3a, 0x1bc, 0x3a, 0x1bc, 0x60, 0x1c8, 0x60, 0x1c8, 0xffd8, 0x124, +0xffd8, 0x124, 0x10, 0x13d, 0x10, 0x13d, 0xffd9, 0xe9, 0xffd9, 0xe9, 0xff7b, +0x6d, 0xff7b, 0x6d, 0xff7b, 0x6d, 0xff5b, 0x30, 0xff5b, 0x30, 0xff16, 0xffce, +0xff16, 0xffce, 0xff6a, 0x7, 0xff6a, 0x7, 0xff58, 0xffd9, 0xff58, 0xffd9, 0xff58, +0xffbf, 0xff58, 0xffbf, 0xff58, 0xffbf, 0xfead, 0xfef9, 0xfead, 0xfef9, 0xfe70, 0xfea0, +0xfe70, 0xfea0, 0xff6e, 0xff82, 0xff6e, 0xff82, 0xffe9, 0xffdf, 0xffe9, 0xffdf, 0x1e, +0xfff2, 0x1e, 0xfff2, 0x19, 0xffc8, 0x19, 0xffc8, 0x19, 0xffc8, 0x4d, 0xffd4, +0x4d, 0xffd4, 0x100, 0x5b, 0x100, 0x5b, 0x1c9, 0xf3, 0x1c9, 0xf3, 0x31d, +0x212, 0x31d, 0x212, 0x477, 0x331, 0x477, 0x331, 0x573, 0x3f0, 0x573, 0x3f0, +0x573, 0x3f0, 0x6f6, 0x530, 0x6f6, 0x530, 0x8b0, 0x6a5, 0x8b0, 0x6a5, 0xa06, +0x7b3, 0xa06, 0x7b3, 0xb37, 0x89b, 0xb37, 0x89b, 0xc8a, 0x9a3, 0xc8a, 0x9a3, +0xc8a, 0x9a3, 0xdec, 0xabc, 0xdec, 0xabc, 0x1007, 0xc8e, 0x1007, 0xc8e, 0x129f, +0xee0, 0x129f, 0xee0, 0x14d0, 0x10ce, 0x14d0, 0x10ce, 0x16e7, 0x12a7, 0x16e7, 0x12a7, +0x1952, 0x14da, 0x1952, 0x14da, 0x1952, 0x14da, 0x1ba4, 0x16f9, 0x1ba4, 0x16f9, 0x1ce2, +0x180c, 0x1ce2, 0x180c, 0x1db2, 0x18b8, 0x1db2, 0x18b8, 0x1e24, 0x190d, 0x1e24, 0x190d, +0x1ec4, 0x1999, 0x1ec4, 0x1999, 0x1fef, 0x1ab8, 0x1fef, 0x1ab8, 0x1fef, 0x1ab8, 0x209a, +0x1b5f, 0x209a, 0x1b5f, 0x20b3, 0x1b7d, 0x20b3, 0x1b7d, 0x20a0, 0x1b75, 0x20a0, 0x1b75, +0x20c8, 0x1bb1, 0x20c8, 0x1bb1, 0x208b, 0x1b8e, 0x208b, 0x1b8e, 0x208b, 0x1b8e, 0x1fc3, +0x1ae6, 0x1fc3, 0x1ae6, 0x1efb, 0x1a45, 0x1efb, 0x1a45, 0x1ee8, 0x1a5d, 0x1ee8, 0x1a5d, +0x1ed7, 0x1a7b, 0x1ed7, 0x1a7b, 0x1e87, 0x1a5d, 0x1e87, 0x1a5d, 0x1e31, 0x1a3e, 0x1e31, +0x1a3e, 0x1e31, 0x1a3e, 0x1d5d, 0x19a2, 0x1d5d, 0x19a2, 0x1c86, 0x1905, 0x1c86, 0x1905, +0x1bbe, 0x1878, 0x1bbe, 0x1878, 0x1af5, 0x17ea, 0x1af5, 0x17ea, 0x1977, 0x16a9, 0x1977, +0x16a9, 0x1899, 0x1606, 0x1899, 0x1606, 0x1899, 0x1606, 0x1811, 0x15b7, 0x1811, 0x15b7, +0x1707, 0x14e6, 0x1707, 0x14e6, 0x1600, 0x1416, 0x1600, 0x1416, 0x1440, 0x128a, 0x1440, +0x128a, 0x12c6, 0x1142, 0x12c6, 0x1142, 0x12c6, 0x1142, 0x110f, 0xfbb, 0x110f, 0xfbb, +0xfe7, 0xec0, 0xfe7, 0xec0, 0xf51, 0xe55, 0xf51, 0xe55, 0xe03, 0xd2d, 0xe03, +0xd2d, 0xc89, 0xbd8, 0xc89, 0xbd8, 0xa62, 0x9d2, 0xa62, 0x9d2, 0xa62, 0x9d2, +0x87d, 0x80b, 0x87d, 0x80b, 0x727, 0x6d2, 0x727, 0x6d2, 0x624, 0x5e8, 0x624, +0x5e8, 0x58e, 0x56a, 0x58e, 0x56a, 0x458, 0x449, 0x458, 0x449, 0x458, 0x449, +0x2f8, 0x2fd, 0x2f8, 0x2fd, 0x1f0, 0x206, 0x1f0, 0x206, 0xc4, 0xec, 0xc4, +0xec, 0xffbc, 0xfff3, 0xffbc, 0xfff3, 0xfe95, 0xfedc, 0xfe95, 0xfedc, 0xfdaa, 0xfe00, +0xfdaa, 0xfe00, 0xfdaa, 0xfe00, 0xfd42, 0xfda6, 0xfd42, 0xfda6, 0xfc7f, 0xfcf2, 0xfc7f, +0xfcf2, 0xfb40, 0xfbc2, 0xfb40, 0xfbc2, 0xf9e9, 0xfa79, 0xf9e9, 0xfa79, 0xf8d5, 0xf974, +0xf8d5, 0xf974, 0xf81f, 0xf8cd, 0xf81f, 0xf8cd, 0xf81f, 0xf8cd, 0xf7e0, 0xf89d, 0xf7e0, +0xf89d, 0xf763, 0xf82f, 0xf763, 0xf82f, 0xf661, 0xf73c, 0xf661, 0xf73c, 0xf523, 0xf60c, +0xf523, 0xf60c, 0xf469, 0xf561, 0xf469, 0xf561, 0xf469, 0xf561, 0xf427, 0xf52c, 0xf427, +0xf52c, 0xf3cc, 0xf4de, 0xf3cc, 0xf4de, 0xf3ba, 0xf4d7, 0xf3ba, 0xf4d7, 0xf379, 0xf4a0, +0xf379, 0xf4a0, 0xf34d, 0xf47e, 0xf34d, 0xf47e, 0xf304, 0xf43d, 0xf304, 0xf43d, 0xf304, +0xf43d, 0xf246, 0xf386, 0xf246, 0xf386, 0xf15a, 0xf2a0, 0xf15a, 0xf2a0, 0xf0db, 0xf225, +0xf0db, 0xf225, 0xf0fd, 0xf24b, 0xf0fd, 0xf24b, 0xf166, 0xf2b7, 0xf166, 0xf2b7, 0xf201, +0xf355, 0xf201, 0xf355, 0xf201, 0xf355, 0xf280, 0xf3d5, 0xf280, 0xf3d5, 0xf310, 0xf467, +0xf310, 0xf467, 0xf38c, 0xf4e5, 0xf38c, 0xf4e5, 0xf46c, 0xf5c7, 0xf46c, 0xf5c7, 0xf55c, +0xf6b9, 0xf55c, 0xf6b9, 0xf55c, 0xf6b9, 0xf64c, 0xf7ab, 0xf64c, 0xf7ab, 0xf74e, 0xf8b1, +0xf74e, 0xf8b1, 0xf821, 0xf987, 0xf821, 0xf987, 0xf848, 0xf9b2, 0xf848, 0xf9b2, 0xf782, +0xf8f2, 0xf782, 0xf8f2, 0xf769, 0xf8df, 0xf769, 0xf8df, 0xf769, 0xf8df, 0xf711, 0xf88c, +0xf711, 0xf88c, 0xf6a9, 0xf82c, 0xf6a9, 0xf82c, 0xf65f, 0xf7ea, 0xf65f, 0xf7ea, 0xf5a9, +0xf73c, 0xf5a9, 0xf73c, 0xf525, 0xf6c1, 0xf525, 0xf6c1, 0xf499, 0xf63f, 0xf499, 0xf63f, +0xf499, 0xf63f, 0xf527, 0xf6d7, 0xf527, 0xf6d7, 0xf5c5, 0xf780, 0xf5c5, 0xf780, 0xf5f3, +0xf7ba, 0xf5f3, 0xf7ba, 0xf667, 0xf83b, 0xf667, 0xf83b, 0xf633, 0xf814, 0xf633, 0xf814, +0xf633, 0xf814, 0xf5c8, 0xf7b9, 0xf5c8, 0xf7b9, 0xf580, 0xf781, 0xf580, 0xf781, 0xf54e, +0xf762, 0xf54e, 0xf762, 0xf500, 0xf727, 0xf500, 0xf727, 0xf44b, 0xf688, 0xf44b, 0xf688, +0xf446, 0xf69a, 0xf446, 0xf69a, 0xf446, 0xf69a, 0xf439, 0xf6a5, 0xf439, 0xf6a5, 0xf33f, +0xf5c6, 0xf33f, 0xf5c6, 0xf26f, 0xf512, 0xf26f, 0xf512, 0xf191, 0xf451, 0xf191, 0xf451, +0xf0ae, 0xf38c, 0xf0ae, 0xf38c, 0xf062, 0xf35e, 0xf062, 0xf35e, 0xf062, 0xf35e, 0xf08b, +0xf3a5, 0xf08b, 0xf3a5, 0xf045, 0xf37c, 0xf045, 0xf37c, 0xef4a, 0xf29d, 0xef4a, 0xf29d, +0xee15, 0xf182, 0xee15, 0xf182, 0xed18, 0xf09a, 0xed18, 0xf09a, 0xed18, 0xf09a, 0xec2a, +0xefbf, 0xec2a, 0xefbf, 0xeaf0, 0xee93, 0xeaf0, 0xee93, 0xe9c9, 0xed75, 0xe9c9, 0xed75, +0xe8de, 0xec8d, 0xe8de, 0xec8d, 0xe8cb, 0xec76, 0xe8cb, 0xec76, 0xe90c, 0xecae, 0xe90c, +0xecae, 0xe90c, 0xecae, 0xe8ea, 0xec7b, 0xe8ea, 0xec7b, 0xe87b, 0xebf4, 0xe87b, 0xebf4, +0xe843, 0xeb9d, 0xe843, 0xeb9d, 0xe86d, 0xeba1, 0xe86d, 0xeba1, 0xe881, 0xeb89, 0xe881, +0xeb89, 0xe874, 0xeb49, 0xe874, 0xeb49, 0xe874, 0xeb49, 0xe832, 0xead0, 0xe832, 0xead0, +0xe884, 0xeae7, 0xe884, 0xeae7, 0xe974, 0xeb97, 0xe974, 0xeb97, 0xeae3, 0xecc4, 0xeae3, +0xecc4, 0xec56, 0xedf5, 0xec56, 0xedf5, 0xec56, 0xedf5, 0xedf6, 0xef52, 0xedf6, 0xef52, +0xefe8, 0xf101, 0xefe8, 0xf101, 0xf17f, 0xf257, 0xf17f, 0xf257, 0xf2e0, 0xf37a, 0xf2e0, +0xf37a, 0xf3f8, 0xf458, 0xf3f8, 0xf458, 0xf587, 0xf5b2, 0xf587, 0xf5b2, 0xf587, 0xf5b2, +0xf715, 0xf710, 0xf715, 0xf710, 0xf8c1, 0xf892, 0xf8c1, 0xf892, 0xfa17, 0xf9c4, 0xfa17, +0xf9c4, 0xfacc, 0xfa5c, 0xfacc, 0xfa5c, 0xfbb3, 0xfb2c, 0xfbb3, 0xfb2c, 0xfc57, 0xfbc0, +0xfc57, 0xfbc0, 0xfc57, 0xfbc0, 0xfd82, 0xfce3, 0xfd82, 0xfce3, 0xfea5, 0xfe05, 0xfea5, +0xfe05, 0xffaa, 0xff0e, 0xffaa, 0xff0e, 0x79, 0xffe7, 0x79, 0xffe7, 0xd8, 0x55, +0xd8, 0x55, 0xd8, 0x55, 0x184, 0x116, 0x184, 0x116, 0x161, 0x10a, 0x161, +0x10a, 0xf5, 0xba, 0xf5, 0xba, 0x92, 0x74, 0x92, 0x74, 0xff8a, 0xff8b, +0xff8a, 0xff8b, 0xfee0, 0xff02, 0xfee0, 0xff02, 0xfee0, 0xff02, 0xfe36, 0xfe77, 0xfe36, +0xfe77, 0xfd5e, 0xfdbf, 0xfd5e, 0xfdbf, 0xfcbe, 0xfd3d, 0xfcbe, 0xfd3d, 0xfc1b, 0xfcb5, +0xfc1b, 0xfcb5, 0xfc2a, 0xfcdd, 0xfc2a, 0xfcdd, 0xfbeb, 0xfcb3, 0xfbeb, 0xfcb3, 0xfbeb, +0xfcb3, 0xfb4b, 0xfc24, 0xfb4b, 0xfc24, 0xfb26, 0xfc0a, 0xfb26, 0xfc0a, 0xfac4, 0xfbaf, +0xfac4, 0xfbaf, 0xfa60, 0xfb4c, 0xfa60, 0xfb4c, 0xfa76, 0xfb5e, 0xfa76, 0xfb5e, 0xfa76, +0xfb5e, 0xfa83, 0xfb60, 0xfa83, 0xfb60, 0xf9d1, 0xfa9d, 0xf9d1, 0xfa9d, 0xf95b, 0xfa11, +0xf95b, 0xfa11, 0xf9d7, 0xfa70, 0xf9d7, 0xfa70, 0xfaa3, 0xfb1b, 0xfaa3, 0xfb1b, 0xfb66, +0xfbb7, 0xfb66, 0xfbb7, 0xfb66, 0xfbb7, 0xfc47, 0xfc6e, 0xfc47, 0xfc6e, 0xfccc, 0xfcc4, +0xfccc, 0xfcc4, 0xfd2d, 0xfcf6, 0xfd2d, 0xfcf6, 0xfe34, 0xfdcb, 0xfe34, 0xfdcb, 0xff24, +0xfe87, 0xff24, 0xfe87, 0xff95, 0xfec7, 0xff95, 0xfec7, 0xff95, 0xfec7, 0xffb4, 0xfeb5, +0xffb4, 0xfeb5, 0x63, 0xff37, 0x63, 0xff37, 0x15b, 0x5, 0x15b, 0x5, 0x207, +0x8d, 0x207, 0x8d, 0x2ae, 0x115, 0x2ae, 0x115, 0x2ae, 0x115, 0x37b, 0x1c9, +0x37b, 0x1c9, 0x497, 0x2d3, 0x497, 0x2d3, 0x5f8, 0x429, 0x5f8, 0x429, 0x716, +0x545, 0x716, 0x545, 0x71d, 0x550, 0x71d, 0x550, 0x733, 0x571, 0x733, 0x571, +0x733, 0x571, 0x76f, 0x5be, 0x76f, 0x5be, 0x7cb, 0x632, 0x7cb, 0x632, 0x835, +0x6b9, 0x835, 0x6b9, 0x825, 0x6c9, 0x825, 0x6c9, 0x7a8, 0x670, 0x7a8, 0x670, +0x7a8, 0x670, 0x67e, 0x56b, 0x67e, 0x56b, 0x58a, 0x49c, 0x58a, 0x49c, 0x433, +0x36b, 0x433, 0x36b, 0x32c, 0x285, 0x32c, 0x285, 0x2ec, 0x265, 0x2ec, 0x265, +0x316, 0x2aa, 0x316, 0x2aa, 0x316, 0x2aa, 0x3c2, 0x36d, 0x3c2, 0x36d, 0x3d3, +0x38e, 0x3d3, 0x38e, 0x417, 0x3dc, 0x417, 0x3dc, 0x43e, 0x408, 0x43e, 0x408, +0x468, 0x430, 0x468, 0x430, 0x553, 0x515, 0x553, 0x515, 0x553, 0x515, 0x5d6, +0x58b, 0x5d6, 0x58b, 0x646, 0x5ea, 0x646, 0x5ea, 0x69f, 0x62e, 0x69f, 0x62e, +0x6ac, 0x624, 0x6ac, 0x624, 0x700, 0x65f, 0x700, 0x65f, 0x700, 0x65f, 0x70d, +0x652, 0x70d, 0x652, 0x71d, 0x64a, 0x71d, 0x64a, 0x730, 0x648, 0x730, 0x648, +0x729, 0x62e, 0x729, 0x62e, 0x774, 0x669, 0x774, 0x669, 0x74d, 0x638, 0x74d, +0x638, 0x74d, 0x638, 0x6f1, 0x5d6, 0x6f1, 0x5d6, 0x688, 0x56e, 0x688, 0x56e, +0x62b, 0x518, 0x62b, 0x518, 0x616, 0x50f, 0x616, 0x50f, 0x5fd, 0x509, 0x5fd, +0x509, 0x57e, 0x4a1, 0x57e, 0x4a1, 0x57e, 0x4a1, 0x45e, 0x39e, 0x45e, 0x39e, +0x34a, 0x2aa, 0x34a, 0x2aa, 0x260, 0x1e5, 0x260, 0x1e5, 0x14e, 0xf9, 0x14e, +0xf9, 0x85, 0x58, 0x85, 0x58, 0x85, 0x58, 0x38, 0x33, 0x38, 0x33, +0xff81, 0xffa5, 0xff81, 0xffa5, 0xff4e, 0xff99, 0xff4e, 0xff99, 0xfff1, 0x62, 0xfff1, +0x62, 0xffee, 0x82, 0xffee, 0x82, 0xff7b, 0x2f, 0xff7b, 0x2f, 0xff7b, 0x2f, +0xff6a, 0x3b, 0xff6a, 0x3b, 0xffb9, 0xa3, 0xffb9, 0xa3, 0xffeb, 0xea, 0xffeb, +0xea, 0xffe2, 0xf2, 0xffe2, 0xf2, 0xff59, 0x78, 0xff59, 0x78, 0xfebe, 0xffe8, +0xfebe, 0xffe8, 0xfebe, 0xffe8, 0xfe51, 0xff82, 0xfe51, 0xff82, 0xfe6f, 0xffa3, 0xfe6f, +0xffa3, 0xfe5f, 0xff94, 0xfe5f, 0xff94, 0xfd89, 0xfebc, 0xfd89, 0xfebc, 0xfd66, 0xfe95, +0xfd66, 0xfe95, 0xfd66, 0xfe95, 0xfd8c, 0xfeb4, 0xfd8c, 0xfeb4, 0xfd8d, 0xfeab, 0xfd8d, +0xfeab, 0xfd72, 0xfe85, 0xfd72, 0xfe85, 0xfdbe, 0xfec2, 0xfdbe, 0xfec2, 0xfe13, 0xff06, +0xfe13, 0xff06, 0xfe8f, 0xff6e, 0xfe8f, 0xff6e, 0xfe8f, 0xff6e, 0xff82, 0x4a, 0xff82, +0x4a, 0xffb6, 0x64, 0xffb6, 0x64, 0x1e, 0xaf, 0x1e, 0xaf, 0x6a, 0xd9, +0x6a, 0xd9, 0xa4, 0xee, 0xa4, 0xee, 0x163, 0x183, 0x163, 0x183, 0x163, +0x183, 0x22e, 0x220, 0x22e, 0x220, 0x31d, 0x2de, 0x31d, 0x2de, 0x372, 0x2fc, +0x372, 0x2fc, 0x3d5, 0x326, 0x3d5, 0x326, 0x4ba, 0x3ce, 0x4ba, 0x3ce, 0x4ba, +0x3ce, 0x5cf, 0x4a2, 0x5cf, 0x4a2, 0x760, 0x5f1, 0x760, 0x5f1, 0x8ca, 0x717, +0x8ca, 0x717, 0xa13, 0x81b, 0xa13, 0x81b, 0xb45, 0x908, 0xb45, 0x908, 0xc71, +0x9f0, 0xc71, 0x9f0, 0xc71, 0x9f0, 0xe2e, 0xb6a, 0xe2e, 0xb6a, 0xfca, 0xcc7, +0xfca, 0xcc7, 0x11fc, 0xebc, 0x11fc, 0xebc, 0x14ec, 0x1174, 0x14ec, 0x1174, 0x173a, +0x138e, 0x173a, 0x138e, 0x190f, 0x1535, 0x190f, 0x1535, 0x190f, 0x1535, 0x1a83, 0x1680, +0x1a83, 0x1680, 0x1bc6, 0x17a2, 0x1bc6, 0x17a2, 0x1d1e, 0x18de, 0x1d1e, 0x18de, 0x1e78, +0x1a24, 0x1e78, 0x1a24, 0x1fe4, 0x1b81, 0x1fe4, 0x1b81, 0x1fe4, 0x1b81, 0x2119, 0x1caf, +0x2119, 0x1caf, 0x21ba, 0x1d4f, 0x21ba, 0x1d4f, 0x2216, 0x1db0, 0x2216, 0x1db0, 0x21ef, +0x1d95, 0x21ef, 0x1d95, 0x2165, 0x1d1b, 0x2165, 0x1d1b, 0x20fa, 0x1cc4, 0x20fa, 0x1cc4, +0x20fa, 0x1cc4, 0x205f, 0x1c43, 0x205f, 0x1c43, 0x2050, 0x1c51, 0x2050, 0x1c51, 0x207d, +0x1c9d, 0x207d, 0x1c9d, 0x1feb, 0x1c2e, 0x1feb, 0x1c2e, 0x1f14, 0x1b7c, 0x1f14, 0x1b7c, +0x1e80, 0x1b0f, 0x1e80, 0x1b0f, 0x1e80, 0x1b0f, 0x1dd2, 0x1a89, 0x1dd2, 0x1a89, 0x1d1d, +0x19fd, 0x1d1d, 0x19fd, 0x1c74, 0x197c, 0x1c74, 0x197c, 0x1b23, 0x1856, 0x1b23, 0x1856, +0x1972, 0x16ce, 0x1972, 0x16ce, 0x1972, 0x16ce, 0x183b, 0x15c0, 0x183b, 0x15c0, 0x177e, +0x152d, 0x177e, 0x152d, 0x1603, 0x13db, 0x1603, 0x13db, 0x1438, 0x1238, 0x1438, 0x1238, +0x12bb, 0x10e4, 0x12bb, 0x10e4, 0x119e, 0xfef, 0x119e, 0xfef, 0x119e, 0xfef, 0x10b5, +0xf2e, 0x10b5, 0xf2e, 0xf96, 0xe36, 0xf96, 0xe36, 0xe7a, 0xd41, 0xe7a, 0xd41, +0xc91, 0xb80, 0xc91, 0xb80, 0xb19, 0xa30, 0xb19, 0xa30, 0xa16, 0x954, 0xa16, +0x954, 0xa16, 0x954, 0x854, 0x7ba, 0x854, 0x7ba, 0x6f0, 0x67e, 0x6f0, 0x67e, +0x623, 0x5d9, 0x623, 0x5d9, 0x58d, 0x56d, 0x58d, 0x56d, 0x498, 0x4a1, 0x498, +0x4a1, 0x498, 0x4a1, 0x3d8, 0x40a, 0x3d8, 0x40a, 0x312, 0x36e, 0x312, 0x36e, +0x1c4, 0x249, 0x1c4, 0x249, 0x116, 0x1c4, 0x116, 0x1c4, 0x70, 0x148, 0x70, +0x148, 0xff81, 0x81, 0xff81, 0x81, 0xff81, 0x81, 0xfe82, 0xffaa, 0xfe82, 0xffaa, +0xfcfa, 0xfe49, 0xfcfa, 0xfe49, 0xfb92, 0xfd05, 0xfb92, 0xfd05, 0xfa49, 0xfbde, 0xfa49, +0xfbde, 0xf99c, 0xfb52, 0xf99c, 0xfb52, 0xf9a6, 0xfb78, 0xf9a6, 0xfb78, 0xf9a6, 0xfb78, +0xf8db, 0xfac7, 0xf8db, 0xfac7, 0xf7e5, 0xf9e7, 0xf7e5, 0xf9e7, 0xf71e, 0xf932, 0xf71e, +0xf932, 0xf616, 0xf838, 0xf616, 0xf838, 0xf54b, 0xf775, 0xf54b, 0xf775, 0xf54b, 0xf775, +0xf49a, 0xf6c9, 0xf49a, 0xf6c9, 0xf3fc, 0xf62a, 0xf3fc, 0xf62a, 0xf3cc, 0xf5f5, 0xf3cc, +0xf5f5, 0xf3de, 0xf5fe, 0xf3de, 0xf5fe, 0xf3b3, 0xf5c5, 0xf3b3, 0xf5c5, 0xf31a, 0xf51b, +0xf31a, 0xf51b, 0xf31a, 0xf51b, 0xf287, 0xf473, 0xf287, 0xf473, 0xf25d, 0xf432, 0xf25d, +0xf432, 0xf1c2, 0xf37e, 0xf1c2, 0xf37e, 0xf0fe, 0xf2a0, 0xf0fe, 0xf2a0, 0xf07b, 0xf201, +0xf07b, 0xf201, 0xf07b, 0xf201, 0xf003, 0xf16e, 0xf003, 0xf16e, 0xf002, 0xf152, 0xf002, +0xf152, 0xf06c, 0xf1a4, 0xf06c, 0xf1a4, 0xf10d, 0xf22e, 0xf10d, 0xf22e, 0xf1a3, 0xf2af, +0xf1a3, 0xf2af, 0xf290, 0xf38a, 0xf290, 0xf38a, 0xf290, 0xf38a, 0xf3c4, 0xf4b1, 0xf3c4, +0xf4b1, 0xf4b8, 0xf599, 0xf4b8, 0xf599, 0xf520, 0xf5fb, 0xf520, 0xf5fb, 0xf51a, 0xf5f2, +0xf51a, 0xf5f2, 0xf4e3, 0xf5bc, 0xf4e3, 0xf5bc, 0xf4fe, 0xf5da, 0xf4fe, 0xf5da, 0xf4fe, +0xf5da, 0xf50d, 0xf5f2, 0xf50d, 0xf5f2, 0xf461, 0xf550, 0xf461, 0xf550, 0xf3f1, 0xf4ed, +0xf3f1, 0xf4ed, 0xf37d, 0xf488, 0xf37d, 0xf488, 0xf367, 0xf483, 0xf367, 0xf483, 0xf367, +0xf483, 0xf3a3, 0xf4d1, 0xf3a3, 0xf4d1, 0xf3c6, 0xf508, 0xf3c6, 0xf508, 0xf3f0, 0xf546, +0xf3f0, 0xf546, 0xf3ef, 0xf559, 0xf3ef, 0xf559, 0xf4a5, 0xf624, 0xf4a5, 0xf624, 0xf4fe, +0xf692, 0xf4fe, 0xf692, 0xf4fe, 0xf692, 0xf4c8, 0xf670, 0xf4c8, 0xf670, 0xf49c, 0xf657, +0xf49c, 0xf657, 0xf4bf, 0xf68d, 0xf4bf, 0xf68d, 0xf521, 0xf702, 0xf521, 0xf702, 0xf544, +0xf737, 0xf544, 0xf737, 0xf5cb, 0xf7d1, 0xf5cb, 0xf7d1, 0xf5cb, 0xf7d1, 0xf55f, 0xf777, +0xf55f, 0xf777, 0xf432, 0xf65a, 0xf432, 0xf65a, 0xf3c0, 0xf5f9, 0xf3c0, 0xf5f9, 0xf30f, +0xf55a, 0xf30f, 0xf55a, 0xf23b, 0xf496, 0xf23b, 0xf496, 0xf23b, 0xf496, 0xf1d4, 0xf43d, +0xf1d4, 0xf43d, 0xf142, 0xf3b9, 0xf142, 0xf3b9, 0xf09f, 0xf323, 0xf09f, 0xf323, 0xefd5, +0xf264, 0xefd5, 0xf264, 0xef35, 0xf1ce, 0xef35, 0xf1ce, 0xeee0, 0xf17f, 0xeee0, 0xf17f, +0xeee0, 0xf17f, 0xedef, 0xf091, 0xedef, 0xf091, 0xed17, 0xefbb, 0xed17, 0xefbb, 0xec8a, +0xef2b, 0xec8a, 0xef2b, 0xeba2, 0xee3c, 0xeba2, 0xee3c, 0xeabd, 0xed4c, 0xeabd, 0xed4c, +0xe9ed, 0xec6d, 0xe9ed, 0xec6d, 0xe9ed, 0xec6d, 0xe95d, 0xebca, 0xe95d, 0xebca, 0xe949, +0xeba0, 0xe949, 0xeba0, 0xe98b, 0xebc7, 0xe98b, 0xebc7, 0xea10, 0xec2e, 0xea10, 0xec2e, +0xe9d7, 0xebd4, 0xe9d7, 0xebd4, 0xe9d7, 0xebd4, 0xe944, 0xeb1d, 0xe944, 0xeb1d, 0xe8e4, +0xea97, 0xe8e4, 0xea97, 0xe860, 0xe9ed, 0xe860, 0xe9ed, 0xe8b5, 0xea1a, 0xe8b5, 0xea1a, +0xe940, 0xea7e, 0xe940, 0xea7e, 0xea15, 0xeb2d, 0xea15, 0xeb2d, 0xea15, 0xeb2d, 0xebbb, +0xecad, 0xebbb, 0xecad, 0xedac, 0xee7d, 0xedac, 0xee7d, 0xef75, 0xf025, 0xef75, 0xf025, +0xf0b3, 0xf146, 0xf0b3, 0xf146, 0xf246, 0xf2c1, 0xf246, 0xf2c1, 0xf459, 0xf4bf, 0xf459, +0xf4bf, 0xf459, 0xf4bf, 0xf5e1, 0xf635, 0xf5e1, 0xf635, 0xf6a3, 0xf6e9, 0xf6a3, 0xf6e9, +0xf765, 0xf7a1, 0xf765, 0xf7a1, 0xf7b0, 0xf7e7, 0xf7b0, 0xf7e7, 0xf848, 0xf87c, 0xf848, +0xf87c, 0xf848, 0xf87c, 0xf961, 0xf995, 0xf961, 0xf995, 0xfa47, 0xfa7e, 0xfa47, 0xfa7e, +0xfb72, 0xfbae, 0xfb72, 0xfbae, 0xfca6, 0xfcea, 0xfca6, 0xfcea, 0xfe3c, 0xfe88, 0xfe3c, +0xfe88, 0xff00, 0xff56, 0xff00, 0xff56, 0xff00, 0xff56, 0xff3f, 0xffa0, 0xff3f, 0xffa0, +0xff8c, 0xfff8, 0xff8c, 0xfff8, 0xffd7, 0x4d, 0xffd7, 0x4d, 0x85, 0x106, 0x85, +0x106, 0x59, 0xe4, 0x59, 0xe4, 0x10, 0xa5, 0x10, 0xa5, 0x10, 0xa5, +0xffa8, 0x46, 0xffa8, 0x46, 0xff51, 0xfff7, 0xff51, 0xfff7, 0xff32, 0xffe0, 0xff32, +0xffe0, 0xfef7, 0xffab, 0xfef7, 0xffab, 0xff50, 0x9, 0xff50, 0x9, 0xff50, 0x9, +0xff16, 0xffd2, 0xff16, 0xffd2, 0xfec1, 0xff80, 0xfec1, 0xff80, 0xfeec, 0xffab, 0xfeec, +0xffab, 0xfe89, 0xff47, 0xfe89, 0xff47, 0xfdeb, 0xfea4, 0xfdeb, 0xfea4, 0xfd16, 0xfdc8, +0xfd16, 0xfdc8, 0xfd16, 0xfdc8, 0xfbdf, 0xfc88, 0xfbdf, 0xfc88, 0xfb1e, 0xfbbb, 0xfb1e, +0xfbbb, 0xfb2e, 0xfbbb, 0xfb2e, 0xfbbb, 0xfbb8, 0xfc32, 0xfbb8, 0xfc32, 0xfc5b, 0xfcbe, +0xfc5b, 0xfcbe, 0xfd13, 0xfd5d, 0xfd13, 0xfd5d, 0xfd13, 0xfd5d, 0xfde5, 0xfe13, 0xfde5, +0xfe13, 0xfe6b, 0xfe7b, 0xfe6b, 0xfe7b, 0xfeda, 0xfec9, 0xfeda, 0xfec9, 0xff34, 0xff01, +0xff34, 0xff01, 0xff48, 0xfef1, 0xff48, 0xfef1, 0xff48, 0xfef1, 0xffa5, 0xff2c, 0xffa5, +0xff2c, 0xb, 0xff70, 0xb, 0xff70, 0x90, 0xffd4, 0x90, 0xffd4, 0x16a, 0x90, +0x16a, 0x90, 0x1df, 0xeb, 0x1df, 0xeb, 0x2e5, 0x1db, 0x2e5, 0x1db, 0x2e5, +0x1db, 0x40f, 0x2f5, 0x40f, 0x2f5, 0x4b7, 0x392, 0x4b7, 0x392, 0x55e, 0x434, +0x55e, 0x434, 0x546, 0x41c, 0x546, 0x41c, 0x511, 0x3ef, 0x511, 0x3ef, 0x55b, +0x446, 0x55b, 0x446, 0x55b, 0x446, 0x630, 0x52e, 0x630, 0x52e, 0x6f0, 0x604, +0x6f0, 0x604, 0x713, 0x642, 0x713, 0x642, 0x6ce, 0x61c, 0x6ce, 0x61c, 0x632, +0x59f, 0x632, 0x59f, 0x632, 0x59f, 0x546, 0x4d1, 0x546, 0x4d1, 0x3ea, 0x395, +0x3ea, 0x395, 0x2a9, 0x26f, 0x2a9, 0x26f, 0x19e, 0x17c, 0x19e, 0x17c, 0x175, +0x166, 0x175, 0x166, 0x181, 0x181, 0x181, 0x181, 0x181, 0x181, 0x11e, 0x125, +0x11e, 0x125, 0xe8, 0xee, 0xe8, 0xee, 0x127, 0x126, 0x127, 0x126, 0x1c2, +0x1b3, 0x1c2, 0x1b3, 0x1d0, 0x1ac, 0x1d0, 0x1ac, 0x247, 0x208, 0x247, 0x208, +0x247, 0x208, 0x28a, 0x22c, 0x28a, 0x22c, 0x30b, 0x288, 0x30b, 0x288, 0x461, +0x3b9, 0x461, 0x3b9, 0x4d8, 0x408, 0x4d8, 0x408, 0x550, 0x45a, 0x550, 0x45a, +0x550, 0x45a, 0x5dc, 0x4c1, 0x5dc, 0x4c1, 0x6bb, 0x580, 0x6bb, 0x580, 0x779, +0x623, 0x779, 0x623, 0x781, 0x616, 0x781, 0x616, 0x7ca, 0x652, 0x7ca, 0x652, +0x79a, 0x61c, 0x79a, 0x61c, 0x79a, 0x61c, 0x73f, 0x5c5, 0x73f, 0x5c5, 0x716, +0x5a8, 0x716, 0x5a8, 0x6cd, 0x573, 0x6cd, 0x573, 0x694, 0x558, 0x694, 0x558, +0x650, 0x538, 0x650, 0x538, 0x650, 0x538, 0x626, 0x53a, 0x626, 0x53a, 0x5c9, +0x50d, 0x5c9, 0x50d, 0x529, 0x4a1, 0x529, 0x4a1, 0x48c, 0x43b, 0x48c, 0x43b, +0x3d2, 0x3b8, 0x3d2, 0x3b8, 0x322, 0x33f, 0x322, 0x33f, 0x322, 0x33f, 0x284, +0x2d6, 0x284, 0x2d6, 0x1c9, 0x24c, 0x1c9, 0x24c, 0x140, 0x1f0, 0x140, 0x1f0, +0x9e, 0x175, 0x9e, 0x175, 0xffc4, 0xbd, 0xffc4, 0xbd, 0x15, 0x129, 0x15, +0x129, 0x15, 0x129, 0x9a, 0x1c2, 0x9a, 0x1c2, 0xeb, 0x221, 0xeb, 0x221, +0x15e, 0x29d, 0x15e, 0x29d, 0xee, 0x22f, 0xee, 0x22f, 0x9c, 0x1db, 0x9c, +0x1db, 0x9c, 0x1db, 0xffe3, 0x11b, 0xffe3, 0x11b, 0xff00, 0x30, 0xff00, 0x30, +0xfe73, 0xff97, 0xfe73, 0xff97, 0xfd5c, 0xfe73, 0xfd5c, 0xfe73, 0xfc69, 0xfd73, 0xfc69, +0xfd73, 0xfc12, 0xfd0f, 0xfc12, 0xfd0f, 0xfc12, 0xfd0f, 0xfc1f, 0xfd11, 0xfc1f, 0xfd11, +0xfbef, 0xfcd6, 0xfbef, 0xfcd6, 0xfbea, 0xfcc8, 0xfbea, 0xfcc8, 0xfc16, 0xfceb, 0xfc16, +0xfceb, 0xfc88, 0xfd57, 0xfc88, 0xfd57, 0xfcb3, 0xfd7b, 0xfcb3, 0xfd7b, 0xfcb3, 0xfd7b, +0xfc72, 0xfd33, 0xfc72, 0xfd33, 0xfc32, 0xfced, 0xfc32, 0xfced, 0xfbf1, 0xfca3, 0xfbf1, +0xfca3, 0xfc76, 0xfd1e, 0xfc76, 0xfd1e, 0xfcf7, 0xfd91, 0xfcf7, 0xfd91, 0xfcf7, 0xfd91, +0xfdc8, 0xfe50, 0xfdc8, 0xfe50, 0xfe73, 0xfee5, 0xfe73, 0xfee5, 0xfef0, 0xff47, 0xfef0, +0xff47, 0xff82, 0xffb9, 0xff82, 0xffb9, 0xffc0, 0xffd0, 0xffc0, 0xffd0, 0xc9, 0xae, +0xc9, 0xae, 0xc9, 0xae, 0x1a4, 0x157, 0x1a4, 0x157, 0x343, 0x2bf, 0x343, +0x2bf, 0x58a, 0x4cc, 0x58a, 0x4cc, 0x6fd, 0x5ff, 0x6fd, 0x5ff, 0x85c, 0x71c, +0x85c, 0x71c, 0xa26, 0x8a1, 0xa26, 0x8a1, 0xa26, 0x8a1, 0xc9a, 0xad0, 0xc9a, +0xad0, 0xebb, 0xcad, 0xebb, 0xcad, 0x1162, 0xf0f, 0x1162, 0xf0f, 0x1468, 0x11d3, +0x1468, 0x11d3, 0x164e, 0x1379, 0x164e, 0x1379, 0x164e, 0x1379, 0x1836, 0x1525, 0x1836, +0x1525, 0x1a1c, 0x16d5, 0x1a1c, 0x16d5, 0x1b8d, 0x1814, 0x1b8d, 0x1814, 0x1cc3, 0x191e, +0x1cc3, 0x191e, 0x1e3f, 0x1a73, 0x1e3f, 0x1a73, 0x203a, 0x1c4e, 0x203a, 0x1c4e, 0x203a, +0x1c4e, 0x2173, 0x1d6c, 0x2173, 0x1d6c, 0x2228, 0x1e0d, 0x2228, 0x1e0d, 0x22ef, 0x1ec4, +0x22ef, 0x1ec4, 0x2340, 0x1f0a, 0x2340, 0x1f0a, 0x234a, 0x1f0f, 0x234a, 0x1f0f, 0x2360, +0x1f23, 0x2360, 0x1f23, 0x2360, 0x1f23, 0x2347, 0x1f0d, 0x2347, 0x1f0d, 0x2338, 0x1f04, +0x2338, 0x1f04, 0x2333, 0x1f09, 0x2333, 0x1f09, 0x22fa, 0x1edd, 0x22fa, 0x1edd, 0x22d6, +0x1ec7, 0x22d6, 0x1ec7, 0x22d6, 0x1ec7, 0x2241, 0x1e44, 0x2241, 0x1e44, 0x21f1, 0x1e08, +0x21f1, 0x1e08, 0x218a, 0x1db6, 0x218a, 0x1db6, 0x2062, 0x1ca6, 0x2062, 0x1ca6, 0x1f83, +0x1be0, 0x1f83, 0x1be0, 0x1e47, 0x1ac0, 0x1e47, 0x1ac0, 0x1e47, 0x1ac0, 0x1cdd, 0x1974, +0x1cdd, 0x1974, 0x1b0e, 0x17c5, 0x1b0e, 0x17c5, 0x18e1, 0x15ba, 0x18e1, 0x15ba, 0x170a, +0x1406, 0x170a, 0x1406, 0x15ae, 0x12d0, 0x15ae, 0x12d0, 0x14c0, 0x1209, 0x14c0, 0x1209, +0x14c0, 0x1209, 0x1368, 0x10d9, 0x1368, 0x10d9, 0x121c, 0xfb7, 0x121c, 0xfb7, 0x10ec, +0xeb2, 0x10ec, 0xeb2, 0xf74, 0xd66, 0xf74, 0xd66, 0xd94, 0xbb3, 0xd94, 0xbb3, +0xd94, 0xbb3, 0xb94, 0x9df, 0xb94, 0x9df, 0x954, 0x7cd, 0x954, 0x7cd, 0x76c, +0x613, 0x76c, 0x613, 0x659, 0x52e, 0x659, 0x52e, 0x4f2, 0x3f5, 0x4f2, 0x3f5, +0x3f6, 0x326, 0x3f6, 0x326, 0x3f6, 0x326, 0x337, 0x296, 0x337, 0x296, 0x2ab, +0x237, 0x2ab, 0x237, 0x24e, 0x208, 0x24e, 0x208, 0x18d, 0x175, 0x18d, 0x175, +0xc0, 0xd7, 0xc0, 0xd7, 0xff75, 0xffba, 0xff75, 0xffba, 0xff75, 0xffba, 0xfe71, +0xfee5, 0xfe71, 0xfee5, 0xfd7f, 0xfe22, 0xfd7f, 0xfe22, 0xfc94, 0xfd66, 0xfc94, 0xfd66, +0xfc1d, 0xfd1e, 0xfc1d, 0xfd1e, 0xfbc4, 0xfcf3, 0xfbc4, 0xfcf3, 0xfbc4, 0xfcf3, 0xfb52, +0xfcae, 0xfb52, 0xfcae, 0xfa0e, 0xfb94, 0xfa0e, 0xfb94, 0xf96c, 0xfb1b, 0xf96c, 0xfb1b, +0xf8e0, 0xfab6, 0xf8e0, 0xfab6, 0xf791, 0xf98a, 0xf791, 0xf98a, 0xf716, 0xf92e, 0xf716, +0xf92e, 0xf716, 0xf92e, 0xf6a8, 0xf8db, 0xf6a8, 0xf8db, 0xf5d5, 0xf81c, 0xf5d5, 0xf81c, +0xf522, 0xf779, 0xf522, 0xf779, 0xf4dc, 0xf73c, 0xf4dc, 0xf73c, 0xf4ac, 0xf70f, 0xf4ac, +0xf70f, 0xf46b, 0xf6cb, 0xf46b, 0xf6cb, 0xf46b, 0xf6cb, 0xf470, 0xf6c7, 0xf470, 0xf6c7, +0xf46f, 0xf6b6, 0xf46f, 0xf6b6, 0xf402, 0xf633, 0xf402, 0xf633, 0xf382, 0xf599, 0xf382, +0xf599, 0xf380, 0xf578, 0xf380, 0xf578, 0xf380, 0xf578, 0xf2b5, 0xf48c, 0xf2b5, 0xf48c, +0xf1ba, 0xf36c, 0xf1ba, 0xf36c, 0xf181, 0xf30d, 0xf181, 0xf30d, 0xf1d0, 0xf336, 0xf1d0, +0xf336, 0xf266, 0xf3a7, 0xf266, 0xf3a7, 0xf2df, 0xf3fe, 0xf2df, 0xf3fe, 0xf2df, 0xf3fe, +0xf420, 0xf51e, 0xf420, 0xf51e, 0xf4f1, 0xf5d3, 0xf4f1, 0xf5d3, 0xf5a1, 0xf66c, 0xf5a1, +0xf66c, 0xf644, 0xf6fc, 0xf644, 0xf6fc, 0xf5e8, 0xf693, 0xf5e8, 0xf693, 0xf5a3, 0xf646, +0xf5a3, 0xf646, 0xf5a3, 0xf646, 0xf565, 0xf606, 0xf565, 0xf606, 0xf4e9, 0xf58e, 0xf4e9, +0xf58e, 0xf3f2, 0xf4a0, 0xf3f2, 0xf4a0, 0xf3a5, 0xf460, 0xf3a5, 0xf460, 0xf3f3, 0xf4c0, +0xf3f3, 0xf4c0, 0xf3f3, 0xf4c0, 0xf431, 0xf514, 0xf431, 0xf514, 0xf450, 0xf54b, 0xf450, +0xf54b, 0xf463, 0xf578, 0xf463, 0xf578, 0xf489, 0xf5ba, 0xf489, 0xf5ba, 0xf3e0, 0xf52f, +0xf3e0, 0xf52f, 0xf335, 0xf4a2, 0xf335, 0xf4a2, 0xf335, 0xf4a2, 0xf24c, 0xf3d7, 0xf24c, +0xf3d7, 0xf1e0, 0xf389, 0xf1e0, 0xf389, 0xf24a, 0xf410, 0xf24a, 0xf410, 0xf280, 0xf463, +0xf280, 0xf463, 0xf2e2, 0xf4e2, 0xf2e2, 0xf4e2, 0xf2e2, 0xf4e2, 0xf315, 0xf531, 0xf315, +0xf531, 0xf35f, 0xf596, 0xf35f, 0xf596, 0xf34b, 0xf59d, 0xf34b, 0xf59d, 0xf2c5, 0xf532, +0xf2c5, 0xf532, 0xf1f6, 0xf47d, 0xf1f6, 0xf47d, 0xf10f, 0xf3b1, 0xf10f, 0xf3b1, 0xf10f, +0xf3b1, 0xf0e2, 0xf39d, 0xf0e2, 0xf39d, 0xf090, 0xf364, 0xf090, 0xf364, 0xeff1, 0xf2de, +0xeff1, 0xf2de, 0xef5a, 0xf25d, 0xef5a, 0xf25d, 0xef4a, 0xf263, 0xef4a, 0xf263, 0xef4d, +0xf278, 0xef4d, 0xf278, 0xef4d, 0xf278, 0xee45, 0xf180, 0xee45, 0xf180, 0xedab, 0xf0f1, +0xedab, 0xf0f1, 0xed17, 0xf064, 0xed17, 0xf064, 0xebde, 0xef2d, 0xebde, 0xef2d, 0xeb0e, +0xee5b, 0xeb0e, 0xee5b, 0xeb0e, 0xee5b, 0xea46, 0xed89, 0xea46, 0xed89, 0xe9d0, 0xed03, +0xe9d0, 0xed03, 0xe994, 0xecb1, 0xe994, 0xecb1, 0xe988, 0xec88, 0xe988, 0xec88, 0xe92b, +0xec07, 0xe92b, 0xec07, 0xe852, 0xeb05, 0xe852, 0xeb05, 0xe852, 0xeb05, 0xe808, 0xea8c, +0xe808, 0xea8c, 0xe798, 0xe9ea, 0xe798, 0xe9ea, 0xe777, 0xe991, 0xe777, 0xe991, 0xe83e, +0xea1e, 0xe83e, 0xea1e, 0xe90f, 0xeab2, 0xe90f, 0xeab2, 0xe9b8, 0xeb1f, 0xe9b8, 0xeb1f, +0xe9b8, 0xeb1f, 0xeabd, 0xebe8, 0xeabd, 0xebe8, 0xebe8, 0xecd9, 0xebe8, 0xecd9, 0xed6a, +0xee22, 0xed6a, 0xee22, 0xef1a, 0xef9e, 0xef1a, 0xef9e, 0xf0e1, 0xf135, 0xf0e1, 0xf135, +0xf0e1, 0xf135, 0xf2fc, 0xf325, 0xf2fc, 0xf325, 0xf476, 0xf479, 0xf476, 0xf479, 0xf64c, +0xf62f, 0xf64c, 0xf62f, 0xf786, 0xf74f, 0xf786, 0xf74f, 0xf767, 0xf71c, 0xf767, 0xf71c, +0xf79c, 0xf742, 0xf79c, 0xf742, 0xf79c, 0xf742, 0xf855, 0xf7f1, 0xf855, 0xf7f1, 0xf92d, +0xf8c5, 0xf92d, 0xf8c5, 0xf9a0, 0xf937, 0xf9a0, 0xf937, 0xfa92, 0xfa2d, 0xfa92, 0xfa2d, +0xfba2, 0xfb44, 0xfba2, 0xfb44, 0xfc54, 0xfbff, 0xfc54, 0xfbff, 0xfc54, 0xfbff, 0xfd13, +0xfcc9, 0xfd13, 0xfcc9, 0xfde3, 0xfda5, 0xfde3, 0xfda5, 0xfe1c, 0xfded, 0xfe1c, 0xfded, +0xfda8, 0xfd87, 0xfda8, 0xfd87, 0xfdb2, 0xfda0, 0xfdb2, 0xfda0, 0xfdb2, 0xfda0, 0xfd2a, +0xfd29, 0xfd2a, 0xfd29, 0xfc72, 0xfc80, 0xfc72, 0xfc80, 0xfc8b, 0xfca8, 0xfc8b, 0xfca8, +0xfcae, 0xfcdc, 0xfcae, 0xfcdc, 0xfc8f, 0xfccd, 0xfc8f, 0xfccd, 0xfcf9, 0xfd45, 0xfcf9, +0xfd45, 0xfcf9, 0xfd45, 0xfdca, 0xfe26, 0xfdca, 0xfe26, 0xfddc, 0xfe45, 0xfddc, 0xfe45, +0xfdc1, 0xfe38, 0xfdc1, 0xfe38, 0xfd2a, 0xfdac, 0xfd2a, 0xfdac, 0xfc6a, 0xfcf5, 0xfc6a, +0xfcf5, 0xfbf8, 0xfc8b, 0xfbf8, 0xfc8b, 0xfbf8, 0xfc8b, 0xfb71, 0xfc08, 0xfb71, 0xfc08, +0xfb49, 0xfbe1, 0xfb49, 0xfbe1, 0xfb24, 0xfbb8, 0xfb24, 0xfbb8, 0xfbbc, 0xfc48, 0xfbbc, +0xfc48, 0xfc80, 0xfcff, 0xfc80, 0xfcff, 0xfc80, 0xfcff, 0xfcae, 0xfd1b, 0xfcae, 0xfd1b, +0xfd87, 0xfddc, 0xfd87, 0xfddc, 0xfe63, 0xfe9b, 0xfe63, 0xfe9b, 0xff0b, 0xff21, 0xff0b, +0xff21, 0xffe1, 0xffcf, 0xffe1, 0xffcf, 0x60, 0x22, 0x60, 0x22, 0x60, 0x22, +0x52, 0xffe6, 0x52, 0xffe6, 0x32, 0xff95, 0x32, 0xff95, 0xf3, 0x24, 0xf3, +0x24, 0x1ee, 0xee, 0x1ee, 0xee, 0x28a, 0x15a, 0x28a, 0x15a, 0x380, 0x222, +0x380, 0x222, 0x380, 0x222, 0x44d, 0x2c7, 0x44d, 0x2c7, 0x493, 0x2ea, 0x493, +0x2ea, 0x4eb, 0x327, 0x4eb, 0x327, 0x51c, 0x343, 0x51c, 0x343, 0x5a9, 0x3c4, +0x5a9, 0x3c4, 0x5a9, 0x3c4, 0x699, 0x4b2, 0x699, 0x4b2, 0x738, 0x557, 0x738, +0x557, 0x7cf, 0x5fd, 0x7cf, 0x5fd, 0x7da, 0x620, 0x7da, 0x620, 0x767, 0x5cb, +0x767, 0x5cb, 0x6bd, 0x547, 0x6bd, 0x547, 0x6bd, 0x547, 0x638, 0x4ec, 0x638, +0x4ec, 0x5f5, 0x4d7, 0x5f5, 0x4d7, 0x523, 0x434, 0x523, 0x434, 0x40c, 0x34d, +0x40c, 0x34d, 0x344, 0x2b4, 0x344, 0x2b4, 0x28d, 0x228, 0x28d, 0x228, 0x28d, +0x228, 0x16e, 0x130, 0x16e, 0x130, 0xdc, 0xc0, 0xdc, 0xc0, 0xf3, 0xf2, +0xf3, 0xf2, 0x107, 0x11a, 0x107, 0x11a, 0x110, 0x12e, 0x110, 0x12e, 0x110, +0x12e, 0x134, 0x157, 0x134, 0x157, 0x1a8, 0x1c7, 0x1a8, 0x1c7, 0x189, 0x19f, +0x189, 0x19f, 0x1d6, 0x1dc, 0x1d6, 0x1dc, 0x26d, 0x25e, 0x26d, 0x25e, 0x275, +0x24e, 0x275, 0x24e, 0x275, 0x24e, 0x32d, 0x2ed, 0x32d, 0x2ed, 0x3fd, 0x3a2, +0x3fd, 0x3a2, 0x479, 0x405, 0x479, 0x405, 0x4a5, 0x419, 0x4a5, 0x419, 0x544, +0x4a4, 0x544, 0x4a4, 0x623, 0x572, 0x623, 0x572, 0x623, 0x572, 0x646, 0x589, +0x646, 0x589, 0x65e, 0x59c, 0x65e, 0x59c, 0x603, 0x541, 0x603, 0x541, 0x5e0, +0x522, 0x5e0, 0x522, 0x5f7, 0x545, 0x5f7, 0x545, 0x5f7, 0x545, 0x614, 0x571, +0x614, 0x571, 0x60c, 0x57d, 0x60c, 0x57d, 0x5d0, 0x557, 0x5d0, 0x557, 0x6b9, +0x659, 0x6b9, 0x659, 0x6df, 0x698, 0x6df, 0x698, 0x638, 0x60c, 0x638, 0x60c, +0x638, 0x60c, 0x5c0, 0x5ad, 0x5c0, 0x5ad, 0x4db, 0x4e1, 0x4db, 0x4e1, 0x443, +0x45f, 0x443, 0x45f, 0x3b3, 0x3e3, 0x3b3, 0x3e3, 0x368, 0x3a9, 0x368, 0x3a9, +0x376, 0x3c6, 0x376, 0x3c6, 0x376, 0x3c6, 0x36a, 0x3c6, 0x36a, 0x3c6, 0x392, +0x3f8, 0x392, 0x3f8, 0x392, 0x400, 0x392, 0x400, 0x32e, 0x3a4, 0x32e, 0x3a4, +0x318, 0x395, 0x318, 0x395, 0x318, 0x395, 0x2d7, 0x35c, 0x2d7, 0x35c, 0x294, +0x321, 0x294, 0x321, 0x268, 0x301, 0x268, 0x301, 0x134, 0x1d9, 0x134, 0x1d9, +0xfff8, 0xac, 0xfff8, 0xac, 0xfeb0, 0xff76, 0xfeb0, 0xff76, 0xfeb0, 0xff76, 0xfd8b, +0xfe65, 0xfd8b, 0xfe65, 0xfd4c, 0xfe3d, 0xfd4c, 0xfe3d, 0xfcce, 0xfdd7, 0xfcce, 0xfdd7, +0xfc83, 0xfda5, 0xfc83, 0xfda5, 0xfc7b, 0xfdb7, 0xfc7b, 0xfdb7, 0xfc7b, 0xfdb7, 0xfc62, +0xfdb5, 0xfc62, 0xfdb5, 0xfc4e, 0xfdb7, 0xfc4e, 0xfdb7, 0xfbc3, 0xfd3e, 0xfbc3, 0xfd3e, +0xfb91, 0xfd18, 0xfb91, 0xfd18, 0xfb5c, 0xfcea, 0xfb5c, 0xfcea, 0xfb46, 0xfcd3, 0xfb46, +0xfcd3, 0xfb46, 0xfcd3, 0xfbc6, 0xfd4c, 0xfbc6, 0xfd4c, 0xfb7a, 0xfcef, 0xfb7a, 0xfcef, +0xfb50, 0xfcaa, 0xfb50, 0xfcaa, 0xfbe3, 0xfd1a, 0xfbe3, 0xfd1a, 0xfcaa, 0xfdb4, 0xfcaa, +0xfdb4, 0xfddd, 0xfeb1, 0xfddd, 0xfeb1, 0xfddd, 0xfeb1, 0xfefb, 0xff91, 0xfefb, 0xff91, +0x2f, 0x7e, 0x2f, 0x7e, 0x1a7, 0x1aa, 0x1a7, 0x1aa, 0x288, 0x238, 0x288, +0x238, 0x37a, 0x2d4, 0x37a, 0x2d4, 0x37a, 0x2d4, 0x58c, 0x48d, 0x58c, 0x48d, +0x82b, 0x6d1, 0x82b, 0x6d1, 0xab3, 0x8ff, 0xab3, 0x8ff, 0xd43, 0xb36, 0xd43, +0xb36, 0x1055, 0xdf1, 0x1055, 0xdf1, 0x12aa, 0xff3, 0x12aa, 0xff3, 0x12aa, 0xff3, +0x14b2, 0x11ad, 0x14b2, 0x11ad, 0x16f2, 0x13a5, 0x16f2, 0x13a5, 0x1897, 0x1509, 0x1897, +0x1509, 0x1a8c, 0x16c3, 0x1a8c, 0x16c3, 0x1ce4, 0x18e8, 0x1ce4, 0x18e8, 0x1f63, 0x1b3b, +0x1f63, 0x1b3b, 0x1f63, 0x1b3b, 0x20b7, 0x1c6d, 0x20b7, 0x1c6d, 0x2222, 0x1dbc, 0x2222, +0x1dbc, 0x2426, 0x1fad, 0x2426, 0x1fad, 0x2474, 0x1fef, 0x2474, 0x1fef, 0x248b, 0x2001, +0x248b, 0x2001, 0x248b, 0x2001, 0x2512, 0x208b, 0x2512, 0x208b, 0x2546, 0x20ca, 0x2546, +0x20ca, 0x2595, 0x2128, 0x2595, 0x2128, 0x2656, 0x21ff, 0x2656, 0x21ff, 0x2690, 0x2256, +0x2690, 0x2256, 0x2628, 0x220f, 0x2628, 0x220f, 0x2628, 0x220f, 0x25da, 0x21e7, 0x25da, +0x21e7, 0x2593, 0x21ca, 0x2593, 0x21ca, 0x24e2, 0x2148, 0x24e2, 0x2148, 0x2357, 0x1fee, +0x2357, 0x1fee, 0x2219, 0x1ee4, 0x2219, 0x1ee4, 0x20e7, 0x1de7, 0x20e7, 0x1de7, 0x20e7, +0x1de7, 0x1f7d, 0x1cb4, 0x1f7d, 0x1cb4, 0x1e46, 0x1bb4, 0x1e46, 0x1bb4, 0x1c84, 0x1a28, +0x1c84, 0x1a28, 0x1af3, 0x18cb, 0x1af3, 0x18cb, 0x197e, 0x1789, 0x197e, 0x1789, 0x197e, +0x1789, 0x17d5, 0x1610, 0x17d5, 0x1610, 0x1647, 0x14ae, 0x1647, 0x14ae, 0x148b, 0x1319, +0x148b, 0x1319, 0x1313, 0x11c5, 0x1313, 0x11c5, 0x1187, 0x1057, 0x1187, 0x1057, 0x1030, +0xf19, 0x1030, 0xf19, 0x1030, 0xf19, 0xf2c, 0xe2a, 0xf2c, 0xe2a, 0xcc7, 0xbd5, +0xcc7, 0xbd5, 0xa61, 0x97d, 0xa61, 0x97d, 0x91c, 0x841, 0x91c, 0x841, 0x6c7, +0x5f3, 0x6c7, 0x5f3, 0x514, 0x446, 0x514, 0x446, 0x514, 0x446, 0x4bb, 0x3f3, +0x4bb, 0x3f3, 0x3b7, 0x2f7, 0x3b7, 0x2f7, 0x3cd, 0x316, 0x3cd, 0x316, 0x318, +0x26d, 0x318, 0x26d, 0x187, 0xec, 0x187, 0xec, 0x187, 0xec, 0x10f, 0x88, +0x10f, 0x88, 0xff91, 0xff25, 0xff91, 0xff25, 0xfe8e, 0xfe42, 0xfe8e, 0xfe42, 0xfd66, +0xfd41, 0xfd66, 0xfd41, 0xfbc7, 0xfbcd, 0xfbc7, 0xfbcd, 0xfad6, 0xfb0d, 0xfad6, 0xfb0d, +0xfad6, 0xfb0d, 0xf906, 0xf972, 0xf906, 0xf972, 0xf771, 0xf817, 0xf771, 0xf817, 0xf6c2, +0xf7a2, 0xf6c2, 0xf7a2, 0xf623, 0xf740, 0xf623, 0xf740, 0xf594, 0xf6ed, 0xf594, 0xf6ed, +0xf515, 0xf6a8, 0xf515, 0xf6a8, 0xf515, 0xf6a8, 0xf432, 0xf5fc, 0xf432, 0xf5fc, 0xf2ce, +0xf4ca, 0xf2ce, 0xf4ca, 0xf222, 0xf44a, 0xf222, 0xf44a, 0xf22d, 0xf47a, 0xf22d, 0xf47a, +0xf1c3, 0xf42c, 0xf1c3, 0xf42c, 0xf1c3, 0xf42c, 0xf1b4, 0xf431, 0xf1b4, 0xf431, 0xf229, +0xf4b1, 0xf229, 0xf4b1, 0xf276, 0xf500, 0xf276, 0xf500, 0xf1fc, 0xf47f, 0xf1fc, 0xf47f, +0xf1a5, 0xf418, 0xf1a5, 0xf418, 0xf222, 0xf47e, 0xf222, 0xf47e, 0xf222, 0xf47e, 0xf1b0, +0xf3ef, 0xf1b0, 0xf3ef, 0xf18e, 0xf3aa, 0xf18e, 0xf3aa, 0xf1ce, 0xf3c4, 0xf1ce, 0xf3c4, +0xf16d, 0xf33a, 0xf16d, 0xf33a, 0xf13d, 0xf2df, 0xf13d, 0xf2df, 0xf179, 0xf2f2, 0xf179, +0xf2f2, 0xf179, 0xf2f2, 0xf20f, 0xf35f, 0xf20f, 0xf35f, 0xf2c4, 0xf3ed, 0xf2c4, 0xf3ed, +0xf3b9, 0xf4bf, 0xf3b9, 0xf4bf, 0xf4a7, 0xf58e, 0xf4a7, 0xf58e, 0xf527, 0xf5f3, 0xf527, +0xf5f3, 0xf527, 0xf5f3, 0xf5a5, 0xf65b, 0xf5a5, 0xf65b, 0xf6a3, 0xf748, 0xf6a3, 0xf748, +0xf684, 0xf71d, 0xf684, 0xf71d, 0xf62b, 0xf6bb, 0xf62b, 0xf6bb, 0xf680, 0xf70a, 0xf680, +0xf70a, 0xf69c, 0xf725, 0xf69c, 0xf725, 0xf69c, 0xf725, 0xf749, 0xf7d3, 0xf749, 0xf7d3, +0xf749, 0xf7d5, 0xf749, 0xf7d5, 0xf674, 0xf704, 0xf674, 0xf704, 0xf62b, 0xf6c0, 0xf62b, +0xf6c0, 0xf5f0, 0xf68b, 0xf5f0, 0xf68b, 0xf527, 0xf5c7, 0xf527, 0xf5c7, 0xf527, 0xf5c7, +0xf4f8, 0xf59f, 0xf4f8, 0xf59f, 0xf4e5, 0xf593, 0xf4e5, 0xf593, 0xf49c, 0xf552, 0xf49c, +0xf552, 0xf512, 0xf5d1, 0xf512, 0xf5d1, 0xf4fe, 0xf5c8, 0xf4fe, 0xf5c8, 0xf4fe, 0xf5c8, +0xf435, 0xf50c, 0xf435, 0xf50c, 0xf417, 0xf4fd, 0xf417, 0xf4fd, 0xf3ed, 0xf4e5, 0xf3ed, +0xf4e5, 0xf32e, 0xf43d, 0xf32e, 0xf43d, 0xf341, 0xf46a, 0xf341, 0xf46a, 0xf2b6, 0xf3fc, +0xf2b6, 0xf3fc, 0xf2b6, 0xf3fc, 0xf208, 0xf36e, 0xf208, 0xf36e, 0xf12f, 0xf2ba, 0xf12f, +0xf2ba, 0xefa4, 0xf156, 0xefa4, 0xf156, 0xef0b, 0xf0e6, 0xef0b, 0xf0e6, 0xee58, 0xf05d, +0xee58, 0xf05d, 0xee2f, 0xf05f, 0xee2f, 0xf05f, 0xee2f, 0xf05f, 0xed22, 0xef7b, 0xed22, +0xef7b, 0xebb8, 0xee37, 0xebb8, 0xee37, 0xeaf6, 0xed99, 0xeaf6, 0xed99, 0xe9da, 0xec9c, +0xe9da, 0xec9c, 0xe93a, 0xec14, 0xe93a, 0xec14, 0xe93a, 0xec14, 0xe80c, 0xeaf7, 0xe80c, +0xeaf7, 0xe790, 0xea86, 0xe790, 0xea86, 0xe768, 0xea5f, 0xe768, 0xea5f, 0xe6f9, 0xe9e9, +0xe6f9, 0xe9e9, 0xe66d, 0xe94e, 0xe66d, 0xe94e, 0xe523, 0xe7ec, 0xe523, 0xe7ec, 0xe523, +0xe7ec, 0xe53c, 0xe7e6, 0xe53c, 0xe7e6, 0xe5c9, 0xe84d, 0xe5c9, 0xe84d, 0xe5d9, 0xe832, +0xe5d9, 0xe832, 0xe68e, 0xe8b6, 0xe68e, 0xe8b6, 0xe72b, 0xe920, 0xe72b, 0xe920, 0xe72b, +0xe920, 0xe7d9, 0xe999, 0xe7d9, 0xe999, 0xe90b, 0xea96, 0xe90b, 0xea96, 0xea38, 0xeb8f, +0xea38, 0xeb8f, 0xeb41, 0xec66, 0xeb41, 0xec66, 0xed35, 0xee2c, 0xed35, 0xee2c, 0xf014, +0xf0e2, 0xf014, 0xf0e2, 0xf014, 0xf0e2, 0xf209, 0xf2b3, 0xf209, 0xf2b3, 0xf3c6, 0xf451, +0xf3c6, 0xf451, 0xf5c7, 0xf63a, 0xf5c7, 0xf63a, 0xf6f0, 0xf751, 0xf6f0, 0xf751, 0xf826, +0xf87b, 0xf826, 0xf87b, 0xf95e, 0xf9ab, 0xf95e, 0xf9ab, 0xf95e, 0xf9ab, 0xf9ff, 0xfa49, +0xf9ff, 0xfa49, 0xfb1b, 0xfb66, 0xfb1b, 0xfb66, 0xfbe3, 0xfc33, 0xfbe3, 0xfc33, 0xfbff, +0xfc55, 0xfbff, 0xfc55, 0xfd08, 0xfd66, 0xfd08, 0xfd66, 0xfd08, 0xfd66, 0xfdf8, 0xfe5e, +0xfdf8, 0xfe5e, 0xfe9d, 0xff0a, 0xfe9d, 0xff0a, 0xff14, 0xff88, 0xff14, 0xff88, 0xfed4, +0xff4d, 0xfed4, 0xff4d, 0xff0c, 0xff8a, 0xff0c, 0xff8a, 0xff71, 0xfff0, 0xff71, 0xfff0, +0xff71, 0xfff0, 0xff5d, 0xffdd, 0xff5d, 0xffdd, 0xfee4, 0xff62, 0xfee4, 0xff62, 0xfeb9, +0xff35, 0xfeb9, 0xff35, 0xfed4, 0xff4c, 0xfed4, 0xff4c, 0xfe26, 0xfe9a, 0xfe26, 0xfe9a, +0xfd5f, 0xfdce, 0xfd5f, 0xfdce, 0xfd5f, 0xfdce, 0xfcb5, 0xfd20, 0xfcb5, 0xfd20, 0xfc82, +0xfce7, 0xfc82, 0xfce7, 0xfce1, 0xfd42, 0xfce1, 0xfd42, 0xfcc4, 0xfd20, 0xfcc4, 0xfd20, +0xfcbe, 0xfd15, 0xfcbe, 0xfd15, 0xfcbe, 0xfd15, 0xfc72, 0xfcc4, 0xfc72, 0xfcc4, 0xfbbd, +0xfc09, 0xfbbd, 0xfc09, 0xfb3e, 0xfb83, 0xfb3e, 0xfb83, 0xfa8a, 0xfac6, 0xfa8a, 0xfac6, +0xfa07, 0xfa38, 0xfa07, 0xfa38, 0xf9e7, 0xfa09, 0xf9e7, 0xfa09, 0xf9e7, 0xfa09, 0xf9f9, +0xfa09, 0xf9f9, 0xfa09, 0xfa3c, 0xfa35, 0xfa3c, 0xfa35, 0xfb50, 0xfb2f, 0xfb50, 0xfb2f, +0xfc89, 0xfc49, 0xfc89, 0xfc49, 0xfd43, 0xfce1, 0xfd43, 0xfce1, 0xfdd7, 0xfd4e, 0xfdd7, +0xfd4e, 0xfdd7, 0xfd4e, 0xfdc3, 0xfd10, 0xfdc3, 0xfd10, 0xfdb6, 0xfcd6, 0xfdb6, 0xfcd6, +0xfebd, 0xfdae, 0xfebd, 0xfdae, 0x16, 0xfed8, 0x16, 0xfed8, 0xb4, 0xff48, 0xb4, +0xff48, 0xb4, 0xff48, 0x1b2, 0x1a, 0x1b2, 0x1a, 0x2d3, 0x111, 0x2d3, 0x111, +0x3b7, 0x1d2, 0x3b7, 0x1d2, 0x482, 0x27f, 0x482, 0x27f, 0x47d, 0x263, 0x47d, +0x263, 0x560, 0x337, 0x560, 0x337, 0x560, 0x337, 0x6ab, 0x47b, 0x6ab, 0x47b, +0x736, 0x509, 0x736, 0x509, 0x797, 0x575, 0x797, 0x575, 0x74d, 0x53e, 0x74d, +0x53e, 0x75b, 0x567, 0x75b, 0x567, 0x7a7, 0x5d5, 0x7a7, 0x5d5, 0x7a7, 0x5d5, +0x749, 0x59f, 0x749, 0x59f, 0x761, 0x5e2, 0x761, 0x5e2, 0x6f4, 0x5a3, 0x6f4, +0x5a3, 0x641, 0x51e, 0x641, 0x51e, 0x66e, 0x579, 0x66e, 0x579, 0x66e, 0x579, +0x5bd, 0x4f3, 0x5bd, 0x4f3, 0x51c, 0x47a, 0x51c, 0x47a, 0x4f1, 0x470, 0x4f1, +0x470, 0x3fa, 0x395, 0x3fa, 0x395, 0x33c, 0x2ec, 0x33c, 0x2ec, 0x282, 0x23f, +0x282, 0x23f, 0x282, 0x23f, 0x1d4, 0x196, 0x1d4, 0x196, 0x1b5, 0x176, 0x1b5, +0x176, 0x176, 0x12e, 0x176, 0x12e, 0x1ec, 0x196, 0x1ec, 0x196, 0x2c5, 0x25c, +0x2c5, 0x25c, 0x34a, 0x2cb, 0x34a, 0x2cb, 0x34a, 0x2cb, 0x3e0, 0x348, 0x3e0, +0x348, 0x439, 0x389, 0x439, 0x389, 0x4fb, 0x433, 0x4fb, 0x433, 0x56e, 0x491, +0x56e, 0x491, 0x56e, 0x47f, 0x56e, 0x47f, 0x56e, 0x47f, 0x591, 0x495, 0x591, +0x495, 0x56e, 0x46c, 0x56e, 0x46c, 0x5ae, 0x4ac, 0x5ae, 0x4ac, 0x607, 0x50b, +0x607, 0x50b, 0x617, 0x528, 0x617, 0x528, 0x60b, 0x530, 0x60b, 0x530, 0x60b, +0x530, 0x63b, 0x579, 0x63b, 0x579, 0x6a2, 0x5ff, 0x6a2, 0x5ff, 0x6f6, 0x677, +0x6f6, 0x677, 0x760, 0x707, 0x760, 0x707, 0x712, 0x6e1, 0x712, 0x6e1, 0x615, +0x60d, 0x615, 0x60d, 0x615, 0x60d, 0x57f, 0x5a0, 0x57f, 0x5a0, 0x4db, 0x523, +0x4db, 0x523, 0x3df, 0x44c, 0x3df, 0x44c, 0x367, 0x3f6, 0x367, 0x3f6, 0x39a, +0x448, 0x39a, 0x448, 0x39a, 0x448, 0x36e, 0x438, 0x36e, 0x438, 0x2dd, 0x3bf, +0x2dd, 0x3bf, 0x2e5, 0x3db, 0x2e5, 0x3db, 0x266, 0x36d, 0x266, 0x36d, 0x1de, +0x2f3, 0x1de, 0x2f3, 0x2a0, 0x3c0, 0x2a0, 0x3c0, 0x2a0, 0x3c0, 0x2db, 0x406, +0x2db, 0x406, 0x23a, 0x36d, 0x23a, 0x36d, 0x197, 0x2d2, 0x197, 0x2d2, 0xa4, +0x1e9, 0xa4, 0x1e9, 0xff31, 0x7f, 0xff31, 0x7f, 0xfdd9, 0xff30, 0xfdd9, 0xff30, +0xfdd9, 0xff30, 0xfd3f, 0xfea1, 0xfd3f, 0xfea1, 0xfcd0, 0xfe3d, 0xfcd0, 0xfe3d, 0xfc65, +0xfddd, 0xfc65, 0xfddd, 0xfc20, 0xfda4, 0xfc20, 0xfda4, 0xfbc1, 0xfd4f, 0xfbc1, 0xfd4f, +0xfbc1, 0xfd4f, 0xfb7d, 0xfd14, 0xfb7d, 0xfd14, 0xfb4a, 0xfce8, 0xfb4a, 0xfce8, 0xfb31, +0xfcd2, 0xfb31, 0xfcd2, 0xfb53, 0xfcf2, 0xfb53, 0xfcf2, 0xfbca, 0xfd63, 0xfbca, 0xfd63, +0xfc31, 0xfdbd, 0xfc31, 0xfdbd, 0xfc31, 0xfdbd, 0xfbd5, 0xfd4f, 0xfbd5, 0xfd4f, 0xfb4c, +0xfcad, 0xfb4c, 0xfcad, 0xfb63, 0xfca3, 0xfb63, 0xfca3, 0xfbae, 0xfcc6, 0xfbae, 0xfcc6, +0xfc26, 0xfd10, 0xfc26, 0xfd10, 0xfd37, 0xfdec, 0xfd37, 0xfdec, 0xfd37, 0xfdec, 0xfe29, +0xfea2, 0xfe29, 0xfea2, 0xff57, 0xff91, 0xff57, 0xff91, 0xb7, 0xad, 0xb7, 0xad, +0x1f8, 0x1a7, 0x1f8, 0x1a7, 0x33c, 0x2a1, 0x33c, 0x2a1, 0x33c, 0x2a1, 0x489, +0x3a4, 0x489, 0x3a4, 0x6fa, 0x5cb, 0x6fa, 0x5cb, 0x962, 0x7eb, 0x962, 0x7eb, +0xb5f, 0x9a1, 0xb5f, 0x9a1, 0xd7d, 0xb7c, 0xd7d, 0xb7c, 0xf6d, 0xd2d, 0xf6d, +0xd2d, 0xf6d, 0xd2d, 0x11a1, 0xf26, 0x11a1, 0xf26, 0x13ad, 0x10fc, 0x13ad, 0x10fc, +0x15ea, 0x1309, 0x15ea, 0x1309, 0x181f, 0x1512, 0x181f, 0x1512, 0x1a1e, 0x16eb, 0x1a1e, +0x16eb, 0x1a1e, 0x16eb, 0x1c66, 0x1911, 0x1c66, 0x1911, 0x1e08, 0x1a97, 0x1e08, 0x1a97, +0x1f80, 0x1bf8, 0x1f80, 0x1bf8, 0x20b6, 0x1d1a, 0x20b6, 0x1d1a, 0x20df, 0x1d33, 0x20df, +0x1d33, 0x2127, 0x1d6f, 0x2127, 0x1d6f, 0x2127, 0x1d6f, 0x21d4, 0x1e14, 0x21d4, 0x1e14, +0x22e3, 0x1f1f, 0x22e3, 0x1f1f, 0x23a2, 0x1fdc, 0x23a2, 0x1fdc, 0x2471, 0x20ad, 0x2471, +0x20ad, 0x259d, 0x21df, 0x259d, 0x21df, 0x25d4, 0x221f, 0x25d4, 0x221f, 0x25d4, 0x221f, +0x260c, 0x2264, 0x260c, 0x2264, 0x262a, 0x2292, 0x262a, 0x2292, 0x253b, 0x21b7, 0x253b, +0x21b7, 0x23ee, 0x2081, 0x23ee, 0x2081, 0x2397, 0x2045, 0x2397, 0x2045, 0x2397, 0x2045, +0x22d6, 0x1fa2, 0x22d6, 0x1fa2, 0x2120, 0x1e0e, 0x2120, 0x1e0e, 0x1fdd, 0x1cef, 0x1fdd, +0x1cef, 0x1eb4, 0x1bed, 0x1eb4, 0x1bed, 0x1d9f, 0x1b01, 0x1d9f, 0x1b01, 0x1c3c, 0x19c7, +0x1c3c, 0x19c7, 0x1c3c, 0x19c7, 0x1af5, 0x18ab, 0x1af5, 0x18ab, 0x18d5, 0x16b5, 0x18d5, +0x16b5, 0x16f9, 0x1503, 0x16f9, 0x1503, 0x1615, 0x1447, 0x1615, 0x1447, 0x141a, 0x1273, +0x141a, 0x1273, 0x1288, 0x1106, 0x1288, 0x1106, 0x1288, 0x1106, 0x115b, 0xffb, 0x115b, +0xffb, 0xfc0, 0xe80, 0xfc0, 0xe80, 0xdba, 0xc97, 0xdba, 0xc97, 0xbd6, 0xace, +0xbd6, 0xace, 0xa67, 0x978, 0xa67, 0x978, 0xa67, 0x978, 0x8e9, 0x811, 0x8e9, +0x811, 0x7fa, 0x73a, 0x7fa, 0x73a, 0x77e, 0x6d6, 0x77e, 0x6d6, 0x668, 0x5d9, +0x668, 0x5d9, 0x53d, 0x4c8, 0x53d, 0x4c8, 0x487, 0x431, 0x487, 0x431, 0x487, +0x431, 0x32c, 0x2f7, 0x32c, 0x2f7, 0x1f4, 0x1e5, 0x1f4, 0x1e5, 0x127, 0x142, +0x127, 0x142, 0x43, 0x8d, 0x43, 0x8d, 0xfe96, 0xff14, 0xfe96, 0xff14, 0xfc63, +0xfd1b, 0xfc63, 0xfd1b, 0xfc63, 0xfd1b, 0xfb14, 0xfc08, 0xfb14, 0xfc08, 0xf97c, 0xfab1, +0xf97c, 0xfab1, 0xf7f1, 0xf967, 0xf7f1, 0xf967, 0xf673, 0xf82d, 0xf673, 0xf82d, 0xf555, +0xf752, 0xf555, 0xf752, 0xf555, 0xf752, 0xf4e5, 0xf724, 0xf4e5, 0xf724, 0xf404, 0xf67f, +0xf404, 0xf67f, 0xf34e, 0xf602, 0xf34e, 0xf602, 0xf269, 0xf54e, 0xf269, 0xf54e, 0xf1fe, +0xf50d, 0xf1fe, 0xf50d, 0xf1f5, 0xf524, 0xf1f5, 0xf524, 0xf1f5, 0xf524, 0xf0ef, 0xf434, +0xf0ef, 0xf434, 0xeffc, 0xf34d, 0xeffc, 0xf34d, 0xef3d, 0xf28f, 0xef3d, 0xf28f, 0xeea6, +0xf1ed, 0xeea6, 0xf1ed, 0xee99, 0xf1ca, 0xee99, 0xf1ca, 0xeea4, 0xf1b5, 0xeea4, 0xf1b5, +0xeea4, 0xf1b5, 0xef32, 0xf21b, 0xef32, 0xf21b, 0xef95, 0xf24d, 0xef95, 0xf24d, 0xeff8, +0xf27a, 0xeff8, 0xf27a, 0xf034, 0xf27c, 0xf034, 0xf27c, 0xef93, 0xf19d, 0xef93, 0xf19d, +0xef93, 0xf19d, 0xefc9, 0xf194, 0xefc9, 0xf194, 0xf06f, 0xf1fd, 0xf06f, 0xf1fd, 0xf0ef, +0xf242, 0xf0ef, 0xf242, 0xf22c, 0xf348, 0xf22c, 0xf348, 0xf38e, 0xf478, 0xf38e, 0xf478, +0xf493, 0xf552, 0xf493, 0xf552, 0xf493, 0xf552, 0xf565, 0xf5ff, 0xf565, 0xf5ff, 0xf5e4, +0xf662, 0xf5e4, 0xf662, 0xf65e, 0xf6c6, 0xf65e, 0xf6c6, 0xf697, 0xf6f1, 0xf697, 0xf6f1, +0xf74b, 0xf79d, 0xf74b, 0xf79d, 0xf7eb, 0xf83b, 0xf7eb, 0xf83b, 0xf7eb, 0xf83b, 0xf79c, +0xf7f1, 0xf79c, 0xf7f1, 0xf7d5, 0xf832, 0xf7d5, 0xf832, 0xf7be, 0xf827, 0xf7be, 0xf827, +0xf702, 0xf778, 0xf702, 0xf778, 0xf646, 0xf6cb, 0xf646, 0xf6cb, 0xf646, 0xf6cb, 0xf5d0, +0xf665, 0xf5d0, 0xf665, 0xf5d1, 0xf676, 0xf5d1, 0xf676, 0xf5fb, 0xf6ae, 0xf5fb, 0xf6ae, +0xf633, 0xf6f4, 0xf633, 0xf6f4, 0xf5e0, 0xf6ad, 0xf5e0, 0xf6ad, 0xf5f7, 0xf6ce, 0xf5f7, +0xf6ce, 0xf5f7, 0xf6ce, 0xf63f, 0xf71f, 0xf63f, 0xf71f, 0xf5ee, 0xf6d7, 0xf5ee, 0xf6d7, +0xf58e, 0xf680, 0xf58e, 0xf680, 0xf520, 0xf61b, 0xf520, 0xf61b, 0xf536, 0xf63c, 0xf536, +0xf63c, 0xf4c5, 0xf5d7, 0xf4c5, 0xf5d7, 0xf4c5, 0xf5d7, 0xf490, 0xf5b1, 0xf490, 0xf5b1, +0xf499, 0xf5cc, 0xf499, 0xf5cc, 0xf423, 0xf56b, 0xf423, 0xf56b, 0xf390, 0xf4f0, 0xf390, +0xf4f0, 0xf2fe, 0xf47a, 0xf2fe, 0xf47a, 0xf2fe, 0xf47a, 0xf24c, 0xf3e7, 0xf24c, 0xf3e7, +0xf155, 0xf311, 0xf155, 0xf311, 0xf056, 0xf235, 0xf056, 0xf235, 0xeee1, 0xf0e4, 0xeee1, +0xf0e4, 0xede6, 0xf00d, 0xede6, 0xf00d, 0xed13, 0xef5e, 0xed13, 0xef5e, 0xed13, 0xef5e, +0xec97, 0xef03, 0xec97, 0xef03, 0xebcd, 0xee57, 0xebcd, 0xee57, 0xeaa6, 0xed4a, 0xeaa6, +0xed4a, 0xe98a, 0xec44, 0xe98a, 0xec44, 0xe8ed, 0xebb5, 0xe8ed, 0xebb5, 0xe86c, 0xeb3d, +0xe86c, 0xeb3d, 0xe86c, 0xeb3d, 0xe781, 0xea55, 0xe781, 0xea55, 0xe6d5, 0xe9a5, 0xe6d5, +0xe9a5, 0xe66f, 0xe934, 0xe66f, 0xe934, 0xe6e0, 0xe993, 0xe6e0, 0xe993, 0xe756, 0xe9f3, +0xe756, 0xe9f3, 0xe756, 0xe9f3, 0xe7b9, 0xea3a, 0xe7b9, 0xea3a, 0xe85d, 0xeabf, 0xe85d, +0xeabf, 0xe9d1, 0xec10, 0xe9d1, 0xec10, 0xeb88, 0xeda3, 0xeb88, 0xeda3, 0xedd3, 0xefc9, +0xedd3, 0xefc9, 0xefde, 0xf1b0, 0xefde, 0xf1b0, 0xefde, 0xf1b0, 0xf148, 0xf2f7, 0xf148, +0xf2f7, 0xf31f, 0xf4ae, 0xf31f, 0xf4ae, 0xf4ef, 0xf660, 0xf4ef, 0xf660, 0xf696, 0xf7ec, +0xf696, 0xf7ec, 0xf7e0, 0xf91f, 0xf7e0, 0xf91f, 0xf8ce, 0xf9fa, 0xf8ce, 0xf9fa, 0xf8ce, +0xf9fa, 0xf944, 0xfa61, 0xf944, 0xfa61, 0xf9f0, 0xfb00, 0xf9f0, 0xfb00, 0xfac9, 0xfbd0, +0xfac9, 0xfbd0, 0xfb70, 0xfc6f, 0xfb70, 0xfc6f, 0xfb76, 0xfc70, 0xfb76, 0xfc70, 0xfb76, +0xfc70, 0xfb5c, 0xfc51, 0xfb5c, 0xfc51, 0xfc2c, 0xfd1e, 0xfc2c, 0xfd1e, 0xfc71, 0xfd5f, +0xfc71, 0xfd5f, 0xfc09, 0xfcf2, 0xfc09, 0xfcf2, 0xfc13, 0xfcf7, 0xfc13, 0xfcf7, 0xfc5d, +0xfd3a, 0xfc5d, 0xfd3a, 0xfc5d, 0xfd3a, 0xfca0, 0xfd74, 0xfca0, 0xfd74, 0xfd06, 0xfdd1, +0xfd06, 0xfdd1, 0xfd91, 0xfe50, 0xfd91, 0xfe50, 0xfd45, 0xfdf8, 0xfd45, 0xfdf8, 0xfcd1, +0xfd78, 0xfcd1, 0xfd78, 0xfcd1, 0xfd78, 0xfc7f, 0xfd19, 0xfc7f, 0xfd19, 0xfc3b, 0xfcc9, +0xfc3b, 0xfcc9, 0xfbbe, 0xfc40, 0xfbbe, 0xfc40, 0xfb78, 0xfbf0, 0xfb78, 0xfbf0, 0xfb45, +0xfbb3, 0xfb45, 0xfbb3, 0xfaf0, 0xfb56, 0xfaf0, 0xfb56, 0xfaf0, 0xfb56, 0xfb58, 0xfbb8, +0xfb58, 0xfbb8, 0xfb83, 0xfbdd, 0xfb83, 0xfbdd, 0xfaf6, 0xfb4c, 0xfaf6, 0xfb4c, 0xfa1f, +0xfa71, 0xfa1f, 0xfa71, 0xf9bd, 0xfa0c, 0xf9bd, 0xfa0c, 0xf995, 0xf9e1, 0xf995, 0xf9e1, +0xf995, 0xf9e1, 0xf9a3, 0xf9eb, 0xf9a3, 0xf9eb, 0xf9f3, 0xfa34, 0xf9f3, 0xfa34, 0xfa66, +0xfa9f, 0xfa66, 0xfa9f, 0xfad5, 0xfb02, 0xfad5, 0xfb02, 0xfba0, 0xfbbe, 0xfba0, 0xfbbe, +0xfba0, 0xfbbe, 0xfc0b, 0xfc17, 0xfc0b, 0xfc17, 0xfc35, 0xfc2b, 0xfc35, 0xfc2b, 0xfc23, +0xfc00, 0xfc23, 0xfc00, 0xfd1c, 0xfcdc, 0xfd1c, 0xfcdc, 0xfeaa, 0xfe4a, 0xfeaa, 0xfe4a, +0xffc7, 0xff45, 0xffc7, 0xff45, 0xffc7, 0xff45, 0x122, 0x7d, 0x122, 0x7d, 0x19b, +0xd3, 0x19b, 0xd3, 0x20d, 0x122, 0x20d, 0x122, 0x2d7, 0x1cd, 0x2d7, 0x1cd, +0x403, 0x2dc, 0x403, 0x2dc, 0x4b1, 0x371, 0x4b1, 0x371, 0x4b1, 0x371, 0x556, +0x404, 0x556, 0x404, 0x5e7, 0x489, 0x5e7, 0x489, 0x66d, 0x509, 0x66d, 0x509, +0x6bb, 0x558, 0x6bb, 0x558, 0x73c, 0x5e2, 0x73c, 0x5e2, 0x73c, 0x5e2, 0x6bd, +0x574, 0x6bd, 0x574, 0x5c8, 0x496, 0x5c8, 0x496, 0x562, 0x44d, 0x562, 0x44d, +0x5aa, 0x4b6, 0x5aa, 0x4b6, 0x61e, 0x54e, 0x61e, 0x54e, 0x5c4, 0x51c, 0x5c4, +0x51c, 0x5c4, 0x51c, 0x64c, 0x5cb, 0x64c, 0x5cb, 0x5fb, 0x59f, 0x5fb, 0x59f, +0x5c4, 0x58c, 0x5c4, 0x58c, 0x559, 0x540, 0x559, 0x540, 0x2f0, 0x2f0, 0x2f0, +0x2f0, 0x1f, 0x33, 0x1f, 0x33, 0x1f, 0x33, 0xa6, 0xc5, 0xa6, 0xc5, +0x122, 0x145, 0x122, 0x145, 0x5b, 0x78, 0x5b, 0x78, 0xffc9, 0xffda, 0xffc9, +0xffda, 0xff94, 0xff91, 0xff94, 0xff91, 0xff94, 0xff91, 0x69, 0x4b, 0x69, 0x4b, +0x77, 0x3a, 0x77, 0x3a, 0x1b2, 0x150, 0x1b2, 0x150, 0x33f, 0x2b5, 0x33f, +0x2b5, 0x365, 0x2b2, 0x365, 0x2b2, 0x418, 0x33d, 0x418, 0x33d, 0x418, 0x33d, +0x505, 0x404, 0x505, 0x404, 0x4d1, 0x3ae, 0x4d1, 0x3ae, 0x508, 0x3c7, 0x508, +0x3c7, 0x505, 0x3ad, 0x505, 0x3ad, 0x5b6, 0x44e, 0x5b6, 0x44e, 0x709, 0x598, +0x709, 0x598, 0x709, 0x598, 0x781, 0x611, 0x781, 0x611, 0x73c, 0x5d4, 0x73c, +0x5d4, 0x77d, 0x625, 0x77d, 0x625, 0x79e, 0x65f, 0x79e, 0x65f, 0x784, 0x665, +0x784, 0x665, 0x784, 0x665, 0x81c, 0x723, 0x81c, 0x723, 0x741, 0x672, 0x741, +0x672, 0x5aa, 0x50a, 0x5aa, 0x50a, 0x66a, 0x5fa, 0x66a, 0x5fa, 0x4c3, 0x485, +0x4c3, 0x485, 0x488, 0x47c, 0x488, 0x47c, 0x488, 0x47c, 0x44c, 0x471, 0x44c, +0x471, 0x2f7, 0x34c, 0x2f7, 0x34c, 0x3eb, 0x46c, 0x3eb, 0x46c, 0x15f, 0x207, +0x15f, 0x207, 0x448, 0x513, 0x448, 0x513, 0x3c3, 0x4ad, 0x3c3, 0x4ad, 0x3c3, +0x4ad, 0x283, 0x387, 0x283, 0x387, 0x2c9, 0x3e1, 0x2c9, 0x3e1, 0x15c, 0x283, +0x15c, 0x283, 0x188, 0x2b9, 0x188, 0x2b9, 0x97, 0x1cd, 0x97, 0x1cd, 0x97, +0x1cd, 0xfefb, 0x31, 0xfefb, 0x31, 0xfe89, 0xffbb, 0xfe89, 0xffbb, 0x9a, 0x1c2, +0x9a, 0x1c2, 0xfebe, 0xffd9, 0xfebe, 0xffd9, 0x9b, 0x1a6, 0x9b, 0x1a6, 0xfea2, +0xff98, 0xfea2, 0xff98, 0xfea2, 0xff98, 0xfebb, 0xff99, 0xfebb, 0xff99, 0xfff0, 0xb3, +0xfff0, 0xb3, 0xff07, 0xffab, 0xff07, 0xffab, 0x64, 0xe5, 0x64, 0xe5, 0xffae, +0x9, 0xffae, 0x9, 0x64, 0x96, 0x64, 0x96, 0x64, 0x96, 0xffc4, 0xffca, +0xffc4, 0xffca, 0xa8, 0x7e, 0xa8, 0x7e, 0xff47, 0xfeea, 0xff47, 0xfeea, 0xff0e, +0xfe7c, 0xff0e, 0xfe7c, 0xff84, 0xfebc, 0xff84, 0xfebc, 0xff84, 0xfebc, 0xff50, 0xfe4f, +0xff50, 0xfe4f, 0x45, 0xff0a, 0x45, 0xff0a, 0x14f, 0xffd9, 0x14f, 0xffd9, 0x7b, +0xfecb, 0x7b, 0xfecb, 0x23f, 0x55, 0x23f, 0x55, 0x491, 0x26e, 0x491, 0x26e, +0x491, 0x26e, 0x366, 0x10d, 0x366, 0x10d, 0x61c, 0x38e, 0x61c, 0x38e, 0x7d1, +0x511, 0x7d1, 0x511, 0x91f, 0x631, 0x91f, 0x631, 0xb1f, 0x804, 0xb1f, 0x804, +0xd23, 0x9e1, 0xd23, 0x9e1, 0xd23, 0x9e1, 0x1067, 0xd01, 0x1067, 0xd01, 0x1102, +0xd7b, 0x1102, 0xd7b, 0x12d4, 0xf2f, 0x12d4, 0xf2f, 0x15be, 0x11fe, 0x15be, 0x11fe, +0x16d2, 0x12fb, 0x16d2, 0x12fb, 0x16d2, 0x12fb, 0x19f4, 0x1608, 0x19f4, 0x1608, 0x18ea, +0x14eb, 0x18ea, 0x14eb, 0x1a0e, 0x15fe, 0x1a0e, 0x15fe, 0x1c77, 0x1856, 0x1c77, 0x1856, +0x1b3a, 0x170b, 0x1b3a, 0x170b, 0x1de1, 0x19a5, 0x1de1, 0x19a5, 0x1de1, 0x19a5, 0x1cf9, +0x18b1, 0x1cf9, 0x18b1, 0x1e74, 0x1a22, 0x1e74, 0x1a22, 0x225b, 0x1e01, 0x225b, 0x1e01, +0x2186, 0x1d26, 0x2186, 0x1d26, 0x2350, 0x1eec, 0x2350, 0x1eec, 0x25ba, 0x2157, 0x25ba, +0x2157, 0x25ba, 0x2157, 0x259b, 0x213b, 0x259b, 0x213b, 0x25cc, 0x2174, 0x25cc, 0x2174, +0x2777, 0x232b, 0x2777, 0x232b, 0x2519, 0x20e0, 0x2519, 0x20e0, 0x243d, 0x201b, 0x243d, +0x201b, 0x243d, 0x201b, 0x254b, 0x2146, 0x254b, 0x2146, 0x22ab, 0x1ec9, 0x22ab, 0x1ec9, +0x23cf, 0x2015, 0x23cf, 0x2015, 0x2096, 0x1d0b, 0x2096, 0x1d0b, 0x1f9b, 0x1c41, 0x1f9b, +0x1c41, 0x20a4, 0x1d81, 0x20a4, 0x1d81, 0x20a4, 0x1d81, 0x1b28, 0x183f, 0x1b28, 0x183f, +0x1c50, 0x19a4, 0x1c50, 0x19a4, 0x1ba9, 0x193a, 0x1ba9, 0x193a, 0x17d1, 0x159f, 0x17d1, +0x159f, 0x184a, 0x1655, 0x184a, 0x1655, 0x184a, 0x1655, 0x15b2, 0x13f9, 0x15b2, 0x13f9, +0x1363, 0x11e3, 0x1363, 0x11e3, 0x11e5, 0x109b, 0x11e5, 0x109b, 0xfb6, 0xe9f, 0xfb6, +0xe9f, 0xdda, 0xcf1, 0xdda, 0xcf1, 0xcbd, 0xbff, 0xcbd, 0xbff, 0xcbd, 0xbff, +0xc4a, 0xbb3, 0xc4a, 0xbb3, 0xacd, 0xa5b, 0xacd, 0xa5b, 0x938, 0x8e7, 0x938, +0x8e7, 0x690, 0x65f, 0x690, 0x65f, 0x603, 0x5f1, 0x603, 0x5f1, 0x387, 0x394, +0x387, 0x394, 0x387, 0x394, 0x351, 0x37d, 0x351, 0x37d, 0x1dc, 0x22b, 0x1dc, +0x22b, 0xfe5a, 0xfecd, 0xfe5a, 0xfecd, 0x1b1, 0x24b, 0x1b1, 0x24b, 0xfff4, 0xb9, +0xfff4, 0xb9, 0xfff4, 0xb9, 0xfae0, 0xfbd3, 0xfae0, 0xfbd3, 0xfbbf, 0xfce3, 0xfbbf, +0xfce3, 0xfa00, 0xfb59, 0xfa00, 0xfb59, 0xf7ab, 0xf93b, 0xf7ab, 0xf93b, 0xf8af, 0xfa77, +0xf8af, 0xfa77, 0xf65e, 0xf85e, 0xf65e, 0xf85e, 0xf65e, 0xf85e, 0xf729, 0xf960, 0xf729, +0xf960, 0xf74d, 0xf9b7, 0xf74d, 0xf9b7, 0xf690, 0xf929, 0xf690, 0xf929, 0xf76e, 0xfa30, +0xf76e, 0xfa30, 0xf637, 0xf91a, 0xf637, 0xf91a, 0xf51e, 0xf819, 0xf51e, 0xf819, 0xf51e, +0xf819, 0xf50c, 0xf816, 0xf50c, 0xf816, 0xf339, 0xf646, 0xf339, 0xf646, 0xf2df, 0xf5e5, +0xf2df, 0xf5e5, 0xf249, 0xf53d, 0xf249, 0xf53d, 0xf1c4, 0xf49b, 0xf1c4, 0xf49b, 0xf1c4, +0xf49b, 0xf3b7, 0xf667, 0xf3b7, 0xf667, 0xf295, 0xf515, 0xf295, 0xf515, 0xf475, 0xf6bd, +0xf475, 0xf6bd, 0xf55b, 0xf766, 0xf55b, 0xf766, 0xf402, 0xf5cc, 0xf402, 0xf5cc, 0xf395, +0xf51c, 0xf395, 0xf51c, 0xf395, 0xf51c, 0xf353, 0xf498, 0xf353, 0xf498, 0xf24a, 0xf34f, +0xf24a, 0xf34f, 0xf4a4, 0xf56f, 0xf4a4, 0xf56f, 0xf35d, 0xf3f3, 0xf35d, 0xf3f3, 0xf25c, +0xf2c7, 0xf25c, 0xf2c7, 0xf643, 0xf68b, 0xf643, 0xf68b, 0xf643, 0xf68b, 0xf59d, 0xf5cd, +0xf59d, 0xf5cd, 0xf626, 0xf648, 0xf626, 0xf648, 0xf6e5, 0xf705, 0xf6e5, 0xf705, 0xf70e, +0xf737, 0xf70e, 0xf737, 0xf744, 0xf77f, 0xf744, 0xf77f, 0xf744, 0xf77f, 0xf82f, 0xf886, +0xf82f, 0xf886, 0xf7a4, 0xf81d, 0xf7a4, 0xf81d, 0xf73a, 0xf7dd, 0xf73a, 0xf7dd, 0xf5be, +0xf690, 0xf5be, 0xf690, 0xf718, 0xf81c, 0xf718, 0xf81c, 0xf775, 0xf8ad, 0xf775, 0xf8ad, +0xf775, 0xf8ad, 0xf476, 0xf5e2, 0xf476, 0xf5e2, 0xf4a3, 0xf642, 0xf4a3, 0xf642, 0xf49c, +0xf66c, 0xf49c, 0xf66c, 0xf46e, 0xf66b, 0xf46e, 0xf66b, 0xf43c, 0xf663, 0xf43c, 0xf663, +0xf33d, 0xf589, 0xf33d, 0xf589, 0xf33d, 0xf589, 0xf24e, 0xf4bc, 0xf24e, 0xf4bc, 0xf158, +0xf3e4, 0xf158, 0xf3e4, 0xef2f, 0xf1d6, 0xef2f, 0xf1d6, 0xeebc, 0xf17a, 0xeebc, 0xf17a, +0xed91, 0xf066, 0xed91, 0xf066, 0xed91, 0xf066, 0xedda, 0xf0c5, 0xedda, 0xf0c5, 0xec61, +0xef61, 0xec61, 0xef61, 0xebe1, 0xeef7, 0xebe1, 0xeef7, 0xed2f, 0xf05c, 0xed2f, 0xf05c, +0xeca1, 0xefe6, 0xeca1, 0xefe6, 0xeaca, 0xee2a, 0xeaca, 0xee2a, 0xeaca, 0xee2a, 0xe9ea, +0xed65, 0xe9ea, 0xed65, 0xe90b, 0xeca3, 0xe90b, 0xeca3, 0xe59d, 0xe953, 0xe59d, 0xe953, +0xe728, 0xeafb, 0xe728, 0xeafb, 0xe69c, 0xea8c, 0xe69c, 0xea8c, 0xe335, 0xe73f, 0xe335, +0xe73f, 0xe335, 0xe73f, 0xe4aa, 0xe8cb, 0xe4aa, 0xe8cb, 0xe55a, 0xe98b, 0xe55a, 0xe98b, +0xe31e, 0xe75b, 0xe31e, 0xe75b, 0xe39f, 0xe7e0, 0xe39f, 0xe7e0, 0xe0e5, 0xe521, 0xe0e5, +0xe521, 0xe0e5, 0xe521, 0xdfcb, 0xe3fa, 0xdfcb, 0xe3fa, 0xe19d, 0xe5b6, 0xe19d, 0xe5b6, +0xe046, 0xe43e, 0xe046, 0xe43e, 0xdfdf, 0xe3af, 0xdfdf, 0xe3af, 0xe1bf, 0xe55c, 0xe1bf, +0xe55c, 0xe15f, 0xe4c2, 0xe15f, 0xe4c2, 0xe15f, 0xe4c2, 0xe2a9, 0xe5cb, 0xe2a9, 0xe5cb, +0xe5bf, 0xe89b, 0xe5bf, 0xe89b, 0xe658, 0xe8eb, 0xe658, 0xe8eb, 0xe8e3, 0xeb29, 0xe8e3, +0xeb29, 0xeb1a, 0xed13, 0xeb1a, 0xed13, 0xed71, 0xef1f, 0xed71, 0xef1f, 0xed71, 0xef1f, +0xede8, 0xef4f, 0xede8, 0xef4f, 0xf15d, 0xf281, 0xf15d, 0xf281, 0xf272, 0xf358, 0xf272, +0xf358, 0xf4e2, 0xf592, 0xf4e2, 0xf592, 0xf98a, 0xfa0a, 0xf98a, 0xfa0a, 0xf98a, 0xfa0a, +0xf91e, 0xf977, 0xf91e, 0xf977, 0xfacd, 0xfb07, 0xfacd, 0xfb07, 0xfe73, 0xfe94, 0xfe73, +0xfe94, 0xfe6d, 0xfe7d, 0xfe6d, 0xfe7d, 0xfd83, 0xfd88, 0xfd83, 0xfd88, 0xffd3, 0xffd2, +0xffd3, 0xffd2, 0xffd3, 0xffd2, 0xff4c, 0xff4a, 0xff4c, 0xff4a, 0xffcf, 0xffce, 0xffcf, +0xffce, 0xaf, 0xb1, 0xaf, 0xb1, 0x1bb, 0x1c1, 0x1bb, 0x1c1, 0xab, 0xb3, +0xab, 0xb3, 0xbf, 0xc9, 0xbf, 0xc9, 0xbf, 0xc9, 0xdf, 0xe7, 0xdf, +0xe7, 0x1c8, 0x1cc, 0x1c8, 0x1cc, 0x309, 0x307, 0x309, 0x307, 0x15e, 0x152, +0x15e, 0x152, 0x2de, 0x2c5, 0x2de, 0x2c5, 0x2de, 0x2c5, 0x19a, 0x172, 0x19a, +0x172, 0xe, 0xffd4, 0xe, 0xffd4, 0x19, 0xffcd, 0x19, 0xffcd, 0xff6b, 0xff0c, +0xff6b, 0xff0c, 0xfe5c, 0xfdea, 0xfe5c, 0xfdea, 0xffca, 0xff46, 0xffca, 0xff46, 0xffca, +0xff46, 0xff1b, 0xfe85, 0xff1b, 0xfe85, 0xfda5, 0xfcff, 0xfda5, 0xfcff, 0xfecb, 0xfe16, +0xfecb, 0xfe16, 0xfc40, 0xfb7d, 0xfc40, 0xfb7d, 0xfa4e, 0xf97f, 0xfa4e, 0xf97f, 0xfc07, +0xfb2c, 0xfc07, 0xfb2c, 0xfc07, 0xfb2c, 0xfa79, 0xf993, 0xfa79, 0xf993, 0xf9de, 0xf8ec, +0xf9de, 0xf8ec, 0xfb68, 0xfa6a, 0xfb68, 0xfa6a, 0xfa68, 0xf95b, 0xfa68, 0xf95b, 0xfa56, +0xf938, 0xfa56, 0xf938, 0xfa56, 0xf938, 0xf9bd, 0xf88a, 0xf9bd, 0xf88a, 0xfad9, 0xf98e, +0xfad9, 0xf98e, 0xfb2e, 0xf9c7, 0xfb2e, 0xf9c7, 0xfc92, 0xfb0a, 0xfc92, 0xfb0a, 0xfccf, +0xfb23, 0xfccf, 0xfb23, 0xfc20, 0xfa4d, 0xfc20, 0xfa4d, 0xfc20, 0xfa4d, 0xff01, 0xfd04, +0xff01, 0xfd04, 0xfdc5, 0xfb9d, 0xfdc5, 0xfb9d, 0x3, 0xfdaf, 0x3, 0xfdaf, 0x133, +0xfeb5, 0x133, 0xfeb5, 0xfeb0, 0xfc0b, 0xfeb0, 0xfc0b, 0xfeb0, 0xfc0b, 0x149, 0xfe81, +0x149, 0xfe81, 0x2df, 0xfffb, 0x2df, 0xfffb, 0x329, 0x30, 0x329, 0x30, 0x480, +0x17c, 0x480, 0x17c, 0x5bd, 0x2b6, 0x5bd, 0x2b6, 0x468, 0x16a, 0x468, 0x16a, +0x468, 0x16a, 0x4be, 0x1d5, 0x4be, 0x1d5, 0x581, 0x2b7, 0x581, 0x2b7, 0x566, +0x2c6, 0x566, 0x2c6, 0x77b, 0x50f, 0x77b, 0x50f, 0x852, 0x622, 0x852, 0x622, +0x870, 0x683, 0x870, 0x683, 0x870, 0x683, 0xae6, 0x941, 0xae6, 0x941, 0xc38, +0xadd, 0xc38, 0xadd, 0xa57, 0x948, 0xa57, 0x948, 0xa5c, 0x996, 0xa5c, 0x996, +0xb0b, 0xa89, 0xb0b, 0xa89, 0xb0b, 0xa89, 0x9a9, 0x966, 0x9a9, 0x966, 0x835, +0x827, 0x835, 0x827, 0x9dd, 0x9fb, 0x9dd, 0x9fb, 0x80b, 0x849, 0x80b, 0x849, +0x88f, 0x8e1, 0x88f, 0x8e1, 0x824, 0x87d, 0x824, 0x87d, 0x824, 0x87d, 0x6ea, +0x73e, 0x6ea, 0x73e, 0x9f0, 0xa32, 0x9f0, 0xa32, 0x770, 0x798, 0x770, 0x798, +0x7c9, 0x7cc, 0x7c9, 0x7cc, 0x98a, 0x961, 0x98a, 0x961, 0x820, 0x7c6, 0x820, +0x7c6, 0x820, 0x7c6, 0x807, 0x779, 0x807, 0x779, 0x74f, 0x68d, 0x74f, 0x68d, +0x4e9, 0x3f5, 0x4e9, 0x3f5, 0x52e, 0x40e, 0x52e, 0x40e, 0x510, 0x3ca, 0x510, +0x3ca, 0x510, 0x3ca, 0x446, 0x2e2, 0x446, 0x2e2, 0x441, 0x2c9, 0x441, 0x2c9, +0x7a7, 0x627, 0x7a7, 0x627, 0x4d5, 0x359, 0x4d5, 0x359, 0x371, 0x206, 0x371, +0x206, 0x574, 0x425, 0x574, 0x425, 0x574, 0x425, 0x28e, 0x168, 0x28e, 0x168, +0x3c7, 0x2d4, 0x3c7, 0x2d4, 0x340, 0x288, 0x340, 0x288, 0x28f, 0x21b, 0x28f, +0x21b, 0x19b, 0x171, 0x19b, 0x171, 0x323, 0x345, 0x323, 0x345, 0x323, 0x345, +0x20, 0x91, 0x20, 0x91, 0xfee0, 0xffa0, 0xfee0, 0xffa0, 0xff09, 0x15, 0xff09, +0x15, 0xfca1, 0xfdf5, 0xfca1, 0xfdf5, 0xfcda, 0xfe70, 0xfcda, 0xfe70, 0xfcda, 0xfe70, +0xfd87, 0xff58, 0xfd87, 0xff58, 0xfbc2, 0xfdc6, 0xfbc2, 0xfdc6, 0xfc97, 0xfec5, 0xfc97, +0xfec5, 0xfd7d, 0xffcc, 0xfd7d, 0xffcc, 0xf8aa, 0xfb11, 0xf8aa, 0xfb11, 0xfbc0, 0xfe35, +0xfbc0, 0xfe35, 0xfbc0, 0xfe35, 0xfacb, 0xfd45, 0xfacb, 0xfd45, 0xf9d8, 0xfc4e, 0xf9d8, +0xfc4e, 0xfa01, 0xfc6c, 0xfa01, 0xfc6c, 0xf91b, 0xfb73, 0xf91b, 0xfb73, 0xf6b2, 0xf8f1, +0xf6b2, 0xf8f1, 0xf7a3, 0xf9c4, 0xf7a3, 0xf9c4, 0xf7a3, 0xf9c4, 0xf7d2, 0xf9d1, 0xf7d2, +0xf9d1, 0xf5c9, 0xf7a2, 0xf5c9, 0xf7a2, 0xf89a, 0xfa4b, 0xf89a, 0xfa4b, 0xf77e, 0xf905, +0xf77e, 0xf905, 0xf739, 0xf895, 0xf739, 0xf895, 0xf739, 0xf895, 0xf98b, 0xfaba, 0xf98b, +0xfaba, 0xfb26, 0xfc28, 0xfb26, 0xfc28, 0xf97a, 0xfa50, 0xf97a, 0xfa50, 0xfcfe, 0xfda7, +0xfcfe, 0xfda7, 0xfd0e, 0xfd8a, 0xfd0e, 0xfd8a, 0x120, 0x170, 0x120, 0x170, 0x120, +0x170, 0x267, 0x28b, 0x267, 0x28b, 0xd4, 0xcd, 0xd4, 0xcd, 0x470, 0x43d, +0x470, 0x43d, 0x456, 0x3f8, 0x456, 0x3f8, 0x7ca, 0x742, 0x7ca, 0x742, 0x87c, +0x7c9, 0x87c, 0x7c9, 0x87c, 0x7c9, 0xa8d, 0x9af, 0xa8d, 0x9af, 0xd51, 0xc48, +0xd51, 0xc48, 0xf07, 0xdd5, 0xf07, 0xdd5, 0x125e, 0x1101, 0x125e, 0x1101, 0x14f0, +0x1368, 0x14f0, 0x1368, 0x14f0, 0x1368, 0x16b4, 0x1502, 0x16b4, 0x1502, 0x1925, 0x1748, +0x1925, 0x1748, 0x19f9, 0x17f2, 0x19f9, 0x17f2, 0x1cef, 0x1abc, 0x1cef, 0x1abc, 0x1f1e, +0x1cbf, 0x1f1e, 0x1cbf, 0x1e1a, 0x1b8f, 0x1e1a, 0x1b8f, 0x1e1a, 0x1b8f, 0x207b, 0x1dc4, +0x207b, 0x1dc4, 0x243b, 0x2157, 0x243b, 0x2157, 0x2328, 0x2017, 0x2328, 0x2017, 0x2272, +0x1f34, 0x2272, 0x1f34, 0x2492, 0x2127, 0x2492, 0x2127, 0x2315, 0x1f7e, 0x2315, 0x1f7e, +0x2315, 0x1f7e, 0x23e0, 0x201e, 0x23e0, 0x201e, 0x23b1, 0x1fc6, 0x23b1, 0x1fc6, 0x23cc, +0x1fb9, 0x23cc, 0x1fb9, 0x2528, 0x20f1, 0x2528, 0x20f1, 0x2505, 0x20ae, 0x2505, 0x20ae, +0x2505, 0x20ae, 0x2651, 0x21dd, 0x2651, 0x21dd, 0x25b3, 0x2129, 0x25b3, 0x2129, 0x2534, +0x209a, 0x2534, 0x209a, 0x2384, 0x1ee0, 0x2384, 0x1ee0, 0x2257, 0x1db1, 0x2257, 0x1db1, +0x22d6, 0x1e36, 0x22d6, 0x1e36, 0x22d6, 0x1e36, 0x1ed0, 0x1a3f, 0x1ed0, 0x1a3f, 0x1f58, +0x1ade, 0x1f58, 0x1ade, 0x1f37, 0x1adc, 0x1f37, 0x1adc, 0x1cf3, 0x18bf, 0x1cf3, 0x18bf, +0x1b9b, 0x1795, 0x1b9b, 0x1795, 0x191a, 0x1549, 0x191a, 0x1549, 0x191a, 0x1549, 0x16fd, +0x1366, 0x16fd, 0x1366, 0x15ea, 0x1291, 0x15ea, 0x1291, 0x15be, 0x12a8, 0x15be, 0x12a8, +0x1173, 0xea0, 0x1173, 0xea0, 0x11ed, 0xf5f, 0x11ed, 0xf5f, 0x11ed, 0xf5f, 0x10f8, +0xeaf, 0x10f8, 0xeaf, 0xca5, 0xa9d, 0xca5, 0xa9d, 0xb8c, 0x9c4, 0xb8c, 0x9c4, +0xbec, 0xa5f, 0xbec, 0xa5f, 0xa28, 0x8d3, 0xa28, 0x8d3, 0xaed, 0x9ca, 0xaed, +0x9ca, 0xaed, 0x9ca, 0xa82, 0x98e, 0xa82, 0x98e, 0x7cd, 0x703, 0x7cd, 0x703, +0x871, 0x7cd, 0x871, 0x7cd, 0x719, 0x698, 0x719, 0x698, 0x64b, 0x5ea, 0x64b, +0x5ea, 0x70d, 0x6cc, 0x70d, 0x6cc, 0x70d, 0x6cc, 0x6c3, 0x6a1, 0x6c3, 0x6a1, +0x4a0, 0x49f, 0x4a0, 0x49f, 0x674, 0x695, 0x674, 0x695, 0x36a, 0x3b1, 0x36a, +0x3b1, 0x1b3, 0x224, 0x1b3, 0x224, 0x1b3, 0x224, 0x2e5, 0x383, 0x2e5, 0x383, +0xff6e, 0x3d, 0xff6e, 0x3d, 0xff10, 0x15, 0xff10, 0x15, 0x1f, 0x15d, 0x1f, +0x15d, 0xfee2, 0x5c, 0xfee2, 0x5c, 0xfd04, 0xfebb, 0xfd04, 0xfebb, 0xfd04, 0xfebb, +0xfbc6, 0xfdba, 0xfbc6, 0xfdba, 0xfa78, 0xfca6, 0xfa78, 0xfca6, 0xf9cf, 0xfc34, 0xf9cf, +0xfc34, 0xf8e7, 0xfb7e, 0xf8e7, 0xfb7e, 0xf7e2, 0xfaa2, 0xf7e2, 0xfaa2, 0xf7e2, 0xfaa2, +0xf6ca, 0xf9aa, 0xf6ca, 0xf9aa, 0xf8b2, 0xfba6, 0xf8b2, 0xfba6, 0xf737, 0xfa32, 0xf737, +0xfa32, 0xf6b4, 0xf9a9, 0xf6b4, 0xf9a9, 0xf705, 0xf9e5, 0xf705, 0xf9e5, 0xf53e, 0xf7fb, +0xf53e, 0xf7fb, 0xf53e, 0xf7fb, 0xf50c, 0xf798, 0xf50c, 0xf798, 0xf486, 0xf6d3, 0xf486, +0xf6d3, 0xf4fe, 0xf701, 0xf4fe, 0xf701, 0xf3d7, 0xf586, 0xf3d7, 0xf586, 0xf510, 0xf664, +0xf510, 0xf664, 0xf3d0, 0xf4c4, 0xf3d0, 0xf4c4, 0xf3d0, 0xf4c4, 0xf472, 0xf504, 0xf472, +0xf504, 0xf5de, 0xf60e, 0xf5de, 0xf60e, 0xf2c7, 0xf29a, 0xf2c7, 0xf29a, 0xf48b, 0xf407, +0xf48b, 0xf407, 0xf3ad, 0xf2dc, 0xf3ad, 0xf2dc, 0xf3ad, 0xf2dc, 0xf341, 0xf22e, 0xf341, +0xf22e, 0xf4ab, 0xf363, 0xf4ab, 0xf363, 0xf53d, 0xf3cf, 0xf53d, 0xf3cf, 0xf585, 0xf3ff, +0xf585, 0xf3ff, 0xf567, 0xf3da, 0xf567, 0xf3da, 0xf663, 0xf4dc, 0xf663, 0xf4dc, 0xf663, +0xf4dc, 0xf60d, 0xf49d, 0xf60d, 0xf49d, 0xf7ef, 0xf6a1, 0xf7ef, 0xf6a1, 0xf75b, 0xf63a, +0xf75b, 0xf63a, 0xf419, 0xf32e, 0xf419, 0xf32e, 0xf37f, 0xf2d1, 0xf37f, 0xf2d1, 0xf4bf, +0xf451, 0xf4bf, 0xf451, 0xf4bf, 0xf451, 0xf1af, 0xf185, 0xf1af, 0xf185, 0xf23d, 0xf254, +0xf23d, 0xf254, 0xf085, 0xf0dc, 0xf085, 0xf0dc, 0xf02d, 0xf0be, 0xf02d, 0xf0be, 0xf2da, +0xf3a1, 0xf2da, 0xf3a1, 0xf2da, 0xf3a1, 0xf15f, 0xf255, 0xf15f, 0xf255, 0xf231, 0xf34e, +0xf231, 0xf34e, 0xf125, 0xf262, 0xf125, 0xf262, 0xf3a7, 0xf4fe, 0xf3a7, 0xf4fe, 0xf1ee, +0xf358, 0xf1ee, 0xf358, 0xf14f, 0xf2c9, 0xf14f, 0xf2c9, 0xf14f, 0xf2c9, 0xef85, 0xf10b, +0xef85, 0xf10b, 0xf074, 0xf204, 0xf074, 0xf204, 0xf278, 0xf413, 0xf278, 0xf413, 0xf1f7, +0xf39f, 0xf1f7, 0xf39f, 0xf0dc, 0xf295, 0xf0dc, 0xf295, 0xf168, 0xf336, 0xf168, 0xf336, +0xf168, 0xf336, 0xf22a, 0xf412, 0xf22a, 0xf412, 0xee9a, 0xf0a2, 0xee9a, 0xf0a2, 0xf079, +0xf2a8, 0xf079, 0xf2a8, 0xedc8, 0xf023, 0xedc8, 0xf023, 0xed9d, 0xf02a, 0xed9d, 0xf02a, +0xed9d, 0xf02a, 0xec56, 0xef17, 0xec56, 0xef17, 0xec1a, 0xef12, 0xec1a, 0xef12, 0xe9e0, +0xed0f, 0xe9e0, 0xed0f, 0xe8c1, 0xec24, 0xe8c1, 0xec24, 0xe5c3, 0xe958, 0xe5c3, 0xe958, +0xe5db, 0xe999, 0xe5db, 0xe999, 0xe5db, 0xe999, 0xe79d, 0xeb7d, 0xe79d, 0xeb7d, 0xe544, +0xe93a, 0xe544, 0xe93a, 0xe66a, 0xea6b, 0xe66a, 0xea6b, 0xe31b, 0xe719, 0xe31b, 0xe719, +0xe3ac, 0xe799, 0xe3ac, 0xe799, 0xe17d, 0xe54b, 0xe17d, 0xe54b, 0xe17d, 0xe54b, 0xe482, +0xe823, 0xe482, 0xe823, 0xe336, 0xe69d, 0xe336, 0xe69d, 0xe50b, 0xe82d, 0xe50b, 0xe82d, +0xe5cc, 0xe89e, 0xe5cc, 0xe89e, 0xe61a, 0xe895, 0xe61a, 0xe895, 0xe61a, 0xe895, 0xeb94, +0xedb3, 0xeb94, 0xedb3, 0xeaf7, 0xecb9, 0xeaf7, 0xecb9, 0xec19, 0xed7e, 0xec19, 0xed7e, +0xec77, 0xed83, 0xec77, 0xed83, 0xefbd, 0xf076, 0xefbd, 0xf076, 0xef94, 0xf003, 0xef94, +0xf003, 0xef94, 0xf003, 0xf382, 0xf3b2, 0xf382, 0xf3b2, 0xf515, 0xf513, 0xf515, 0xf513, +0xf48d, 0xf467, 0xf48d, 0xf467, 0xf77e, 0xf742, 0xf77e, 0xf742, 0xf86e, 0xf82c, 0xf86e, +0xf82c, 0xf773, 0xf738, 0xf773, 0xf738, 0xf773, 0xf738, 0xf819, 0xf7f3, 0xf819, 0xf7f3, +0xf86b, 0xf866, 0xf86b, 0xf866, 0xf6c1, 0xf6e8, 0xf6c1, 0xf6e8, 0xf74a, 0xf7a4, 0xf74a, +0xf7a4, 0xf8ae, 0xf942, 0xf8ae, 0xf942, 0xf8ae, 0xf942, 0xf87b, 0xf94c, 0xf87b, 0xf94c, +0xfaa6, 0xfbb5, 0xfaa6, 0xfbb5, 0xfcf2, 0xfe3f, 0xfcf2, 0xfe3f, 0xfa3e, 0xfbc5, 0xfa3e, +0xfbc5, 0xfe46, 0x2, 0xfe46, 0x2, 0xfea1, 0x8a, 0xfea1, 0x8a, 0xfea1, 0x8a, +0xfd73, 0xff82, 0xfd73, 0xff82, 0xfdb5, 0xffe1, 0xfdb5, 0xffe1, 0xfc8e, 0xfecd, 0xfc8e, +0xfecd, 0xfdfe, 0x47, 0xfdfe, 0x47, 0xfd05, 0xff4f, 0xfd05, 0xff4f, 0xfba5, 0xfde6, +0xfba5, 0xfde6, 0xfba5, 0xfde6, 0xfb9a, 0xfdcc, 0xfb9a, 0xfdcc, 0xfc01, 0xfe1c, 0xfc01, +0xfe1c, 0xf98f, 0xfb8e, 0xf98f, 0xfb8e, 0xf9a3, 0xfb82, 0xf9a3, 0xfb82, 0xf9b3, 0xfb6e, +0xf9b3, 0xfb6e, 0xf9b3, 0xfb6e, 0xf82b, 0xf9c0, 0xf82b, 0xf9c0, 0xfacf, 0xfc3e, 0xfacf, +0xfc3e, 0xfaac, 0xfbf4, 0xfaac, 0xfbf4, 0xf9b4, 0xfad7, 0xf9b4, 0xfad7, 0xf748, 0xf847, +0xf748, 0xf847, 0xf735, 0xf811, 0xf735, 0xf811, 0xf735, 0xf811, 0xf67a, 0xf735, 0xf67a, +0xf735, 0xf3f4, 0xf490, 0xf3f4, 0xf490, 0xf5a9, 0xf628, 0xf5a9, 0xf628, 0xf2d3, 0xf336, +0xf2d3, 0xf336, 0xf724, 0xf76c, 0xf724, 0xf76c, 0xf95f, 0xf98e, 0xf95f, 0xf98e, 0xf95f, +0xf98e, 0xf8bb, 0xf8d1, 0xf8bb, 0xf8d1, 0xfa7d, 0xfa7a, 0xfa7d, 0xfa7a, 0xf8e1, 0xf8c6, +0xf8e1, 0xf8c6, 0xfa1d, 0xf9e9, 0xfa1d, 0xf9e9, 0xf8a0, 0xf854, 0xf8a0, 0xf854, 0xf8a0, +0xf854, 0xf88d, 0xf82a, 0xf88d, 0xf82a, 0xf99d, 0xf924, 0xf99d, 0xf924, 0xf8c2, 0xf834, +0xf8c2, 0xf834, 0xfb53, 0xfab1, 0xfb53, 0xfab1, 0xfd20, 0xfc6d, 0xfd20, 0xfc6d, 0x13a, +0x79, 0x13a, 0x79, 0x13a, 0x79, 0x3a7, 0x2db, 0x3a7, 0x2db, 0x131, 0x5e, +0x131, 0x5e, 0x203, 0x12c, 0x203, 0x12c, 0xfe7d, 0xfda4, 0xfe7d, 0xfda4, 0xffdd, +0xff08, 0xffdd, 0xff08, 0x215, 0x145, 0x215, 0x145, 0x215, 0x145, 0x297, 0x1d0, +0x297, 0x1d0, 0x284, 0x1c7, 0x284, 0x1c7, 0x2dd, 0x22a, 0x2dd, 0x22a, 0x641, +0x59a, 0x641, 0x59a, 0x538, 0x49a, 0x538, 0x49a, 0x538, 0x49a, 0x72c, 0x695, +0x72c, 0x695, 0x63f, 0x5ac, 0x63f, 0x5ac, 0x4ca, 0x436, 0x4ca, 0x436, 0x62e, +0x594, 0x62e, 0x594, 0x662, 0x5bd, 0x662, 0x5bd, 0x523, 0x46b, 0x523, 0x46b, +0x523, 0x46b, 0x613, 0x544, 0x613, 0x544, 0x7fe, 0x711, 0x7fe, 0x711, 0x8cf, +0x7c0, 0x8cf, 0x7c0, 0xad9, 0x9a2, 0xad9, 0x9a2, 0xcd1, 0xb70, 0xcd1, 0xb70, +0xcd1, 0xb70, 0xdbf, 0xc31, 0xdbf, 0xc31, 0xd51, 0xb96, 0xd51, 0xb96, 0xdf1, +0xc0b, 0xdf1, 0xc0b, 0xe08, 0xbfb, 0xe08, 0xbfb, 0xdc6, 0xb95, 0xdc6, 0xb95, +0x1060, 0xe13, 0x1060, 0xe13, 0x1060, 0xe13, 0x1217, 0xfb6, 0x1217, 0xfb6, 0x13c0, +0x1155, 0x13c0, 0x1155, 0x1415, 0x11ac, 0x1415, 0x11ac, 0x14b5, 0x1257, 0x14b5, 0x1257, +0x14e1, 0x129c, 0x14e1, 0x129c, 0x1123, 0xf02, 0x1123, 0xf02, 0x1123, 0xf02, 0x1290, +0x109e, 0x1290, 0x109e, 0x11a8, 0xff1, 0x11a8, 0xff1, 0x10a0, 0xf2d, 0x10a0, 0xf2d, +0x10d1, 0xfaa, 0x10d1, 0xfaa, 0xdb7, 0xce2, 0xdb7, 0xce2, 0xdb7, 0xce2, 0xcd6, +0xc58, 0xcd6, 0xc58, 0xb6c, 0xb47, 0xb6c, 0xb47, 0x905, 0x93a, 0x905, 0x93a, +0x664, 0x6f1, 0x664, 0x6f1, 0x40d, 0x4f0, 0x40d, 0x4f0, 0x673, 0x7a6, 0x673, +0x7a6, 0x673, 0x7a6, 0x34a, 0x4c7, 0x34a, 0x4c7, 0x196, 0x355, 0x196, 0x355, +0x26c, 0x466, 0x26c, 0x466, 0xff89, 0x1b4, 0xff89, 0x1b4, 0x140, 0x392, 0x140, +0x392, 0xffa1, 0x212, 0xffa1, 0x212, 0xffa1, 0x212, 0xffd5, 0x25c, 0xffd5, 0x25c, +0xfe82, 0x118, 0xfe82, 0x118, 0xfdb5, 0x51, 0xfdb5, 0x51, 0xfe09, 0xa6, 0xfe09, +0xa6, 0xfe93, 0x12c, 0xfe93, 0x12c, 0xfe93, 0x12c, 0xfcbe, 0xff4e, 0xfcbe, 0xff4e, +0xfcc5, 0xff49, 0xfcc5, 0xff49, 0xfb6a, 0xfde1, 0xfb6a, 0xfde1, 0xf8bc, 0xfb24, 0xf8bc, +0xfb24, 0xf9cb, 0xfc24, 0xf9cb, 0xfc24, 0xf6f0, 0xf938, 0xf6f0, 0xf938, 0xf6f0, 0xf938, +0xf729, 0xf962, 0xf729, 0xf962, 0xf56a, 0xf794, 0xf56a, 0xf794, 0xf5e2, 0xf7fb, 0xf5e2, +0xf7fb, 0xf62e, 0xf837, 0xf62e, 0xf837, 0xf914, 0xfb0b, 0xf914, 0xfb0b, 0xfbf1, 0xfdd4, +0xfbf1, 0xfdd4, 0xfbf1, 0xfdd4, 0xfc79, 0xfe46, 0xfc79, 0xfe46, 0xfb17, 0xfccb, 0xfb17, +0xfccb, 0xfc91, 0xfe28, 0xfc91, 0xfe28, 0xfc15, 0xfd89, 0xfc15, 0xfd89, 0xfb64, 0xfcb1, +0xfb64, 0xfcb1, 0xfb64, 0xfcb1, 0xfc9e, 0xfdbd, 0xfc9e, 0xfdbd, 0xfba3, 0xfc8f, 0xfba3, +0xfc8f, 0xffb2, 0x65, 0xffb2, 0x65, 0xef, 0x163, 0xef, 0x163, 0x582, 0x5b0, +0x582, 0x5b0, 0x5fb, 0x5df, 0x5fb, 0x5df, 0x5fb, 0x5df, 0xa1c, 0x9b2, 0xa1c, +0x9b2, 0xc09, 0xb4d, 0xc09, 0xb4d, 0xc10, 0xaff, 0xc10, 0xaff, 0xdf1, 0xc8a, +0xdf1, 0xc8a, 0xea6, 0xce7, 0xea6, 0xce7, 0x12a0, 0x108b, 0x12a0, 0x108b, 0x12a0, +0x108b, 0x1376, 0x110c, 0x1376, 0x110c, 0x15eb, 0x132f, 0x15eb, 0x132f, 0x18d3, 0x15c7, +0x18d3, 0x15c7, 0x1c0c, 0x18b5, 0x1c0c, 0x18b5, 0x1d50, 0x19b4, 0x1d50, 0x19b4, 0x1d50, +0x19b4, 0x1de7, 0x1a0b, 0x1de7, 0x1a0b, 0x1d90, 0x197a, 0x1d90, 0x197a, 0x1dea, 0x19a1, +0x1dea, 0x19a1, 0x1e9e, 0x1a27, 0x1e9e, 0x1a27, 0x1f3c, 0x1a9f, 0x1f3c, 0x1a9f, 0x1f28, +0x1a6b, 0x1f28, 0x1a6b, 0x1f28, 0x1a6b, 0x20c3, 0x1bed, 0x20c3, 0x1bed, 0x21a8, 0x1cbf, +0x21a8, 0x1cbf, 0x21a8, 0x1cb2, 0x21a8, 0x1cb2, 0x22bd, 0x1dc1, 0x22bd, 0x1dc1, 0x233c, +0x1e40, 0x233c, 0x1e40, 0x2252, 0x1d5b, 0x2252, 0x1d5b, 0x2252, 0x1d5b, 0x2173, 0x1c86, +0x2173, 0x1c86, 0x2073, 0x1b97, 0x2073, 0x1b97, 0x1edf, 0x1a17, 0x1edf, 0x1a17, 0x1e7c, +0x19cd, 0x1e7c, 0x19cd, 0x1dc5, 0x1934, 0x1dc5, 0x1934, 0x1dc5, 0x1934, 0x1d83, 0x1914, +0x1d83, 0x1914, 0x1a68, 0x1620, 0x1a68, 0x1620, 0x1a44, 0x1626, 0x1a44, 0x1626, 0x1940, +0x154e, 0x1940, 0x154e, 0x1797, 0x13d5, 0x1797, 0x13d5, 0x1518, 0x1188, 0x1518, 0x1188, +0x1518, 0x1188, 0x11ce, 0xe72, 0x11ce, 0xe72, 0x10fc, 0xdd6, 0x10fc, 0xdd6, 0xe79, +0xb89, 0xe79, 0xb89, 0xddd, 0xb25, 0xddd, 0xb25, 0xd90, 0xb10, 0xd90, 0xb10, +0xc85, 0xa3c, 0xc85, 0xa3c, 0xc85, 0xa3c, 0xfca, 0xdb7, 0xfca, 0xdb7, 0xf27, +0xd4b, 0xf27, 0xd4b, 0xdbd, 0xc16, 0xdbd, 0xc16, 0xd2f, 0xbbd, 0xd2f, 0xbbd, +0xb34, 0x9f5, 0xb34, 0x9f5, 0xb34, 0x9f5, 0xcb9, 0xbac, 0xcb9, 0xbac, 0xb2d, +0xa52, 0xb2d, 0xa52, 0xbcb, 0xb21, 0xbcb, 0xb21, 0x8cb, 0x853, 0x8cb, 0x853, +0xa04, 0x9bd, 0xa04, 0x9bd, 0xa8b, 0xa75, 0xa8b, 0xa75, 0xa8b, 0xa75, 0x68e, +0x6aa, 0x68e, 0x6aa, 0x6f8, 0x748, 0x6f8, 0x748, 0x5d1, 0x654, 0x5d1, 0x654, +0x5e8, 0x6a0, 0x5e8, 0x6a0, 0x534, 0x620, 0x534, 0x620, 0x44b, 0x56d, 0x44b, +0x56d, 0x44b, 0x56d, 0x32a, 0x481, 0x32a, 0x481, 0x2c0, 0x44a, 0x2c0, 0x44a, +0x194, 0x352, 0x194, 0x352, 0x136, 0x322, 0x136, 0x322, 0x102, 0x31b, 0x102, +0x31b, 0x102, 0x31b, 0xcb, 0x30b, 0xcb, 0x30b, 0xfe2e, 0x91, 0xfe2e, 0x91, +0xfc82, 0xff01, 0xfc82, 0xff01, 0xfd0b, 0xff9d, 0xfd0b, 0xff9d, 0xfcd9, 0xff78, 0xfcd9, +0xff78, 0xfd2c, 0xffce, 0xfd2c, 0xffce, 0xfd2c, 0xffce, 0xfb28, 0xfdc5, 0xfb28, 0xfdc5, +0xfb01, 0xfd90, 0xfb01, 0xfd90, 0xf870, 0xfae8, 0xf870, 0xfae8, 0xf662, 0xf8bc, 0xf662, +0xf8bc, 0xf61d, 0xf851, 0xf61d, 0xf851, 0xf1f6, 0xf3fe, 0xf1f6, 0xf3fe, 0xf1f6, 0xf3fe, +0xf0a5, 0xf27d, 0xf0a5, 0xf27d, 0xf0a8, 0xf24c, 0xf0a8, 0xf24c, 0xf2d2, 0xf441, 0xf2d2, +0xf441, 0xf460, 0xf59b, 0xf460, 0xf59b, 0xf2bf, 0xf3c8, 0xf2bf, 0xf3c8, 0xf2bf, 0xf3c8, +0xf2c0, 0xf39b, 0xf2c0, 0xf39b, 0xf278, 0xf32a, 0xf278, 0xf32a, 0xf0d1, 0xf162, 0xf0d1, +0xf162, 0xef3f, 0xefb6, 0xef3f, 0xefb6, 0xee06, 0xee6c, 0xee06, 0xee6c, 0xedb3, 0xee12, +0xedb3, 0xee12, 0xedb3, 0xee12, 0xeea5, 0xef07, 0xeea5, 0xef07, 0xed66, 0xedd4, 0xed66, +0xedd4, 0xeec0, 0xef42, 0xeec0, 0xef42, 0xed89, 0xee28, 0xed89, 0xee28, 0xecb4, 0xed76, +0xecb4, 0xed76, 0xecb4, 0xed76, 0xea91, 0xeb7c, 0xea91, 0xeb7c, 0xe792, 0xe8aa, 0xe792, +0xe8aa, 0xe62e, 0xe774, 0xe62e, 0xe774, 0xe3f8, 0xe56d, 0xe3f8, 0xe56d, 0xe361, 0xe503, +0xe361, 0xe503, 0xe218, 0xe3e4, 0xe218, 0xe3e4, 0xe218, 0xe3e4, 0xe412, 0xe603, 0xe412, +0xe603, 0xe4e9, 0xe6fa, 0xe4e9, 0xe6fa, 0xe692, 0xe8bc, 0xe692, 0xe8bc, 0xe675, 0xe8b2, +0xe675, 0xe8b2, 0xe666, 0xe8af, 0xe666, 0xe8af, 0xe321, 0xe56f, 0xe321, 0xe56f, 0xe321, +0xe56f, 0xe533, 0xe781, 0xe533, 0xe781, 0xe4b1, 0xe6fa, 0xe4b1, 0xe6fa, 0xe34a, 0xe589, +0xe34a, 0xe589, 0xe6d4, 0xe908, 0xe6d4, 0xe908, 0xe789, 0xe9b0, 0xe789, 0xe9b0, 0xe789, +0xe9b0, 0xe8e7, 0xeb01, 0xe8e7, 0xeb01, 0xe842, 0xea52, 0xe842, 0xea52, 0xeae6, 0xecee, +0xeae6, 0xecee, 0xe8d2, 0xead6, 0xe8d2, 0xead6, 0xebad, 0xedb2, 0xebad, 0xedb2, 0xeb9b, +0xeda7, 0xeb9b, 0xeda7, 0xeb9b, 0xeda7, 0xe977, 0xeb8d, 0xe977, 0xeb8d, 0xe8f0, 0xeb17, +0xe8f0, 0xeb17, 0xeae0, 0xed1b, 0xeae0, 0xed1b, 0xeac7, 0xed19, 0xeac7, 0xed19, 0xec67, +0xeed2, 0xec67, 0xeed2, 0xee69, 0xf0ed, 0xee69, 0xf0ed, 0xee69, 0xf0ed, 0xeb95, 0xee31, +0xeb95, 0xee31, 0xee75, 0xf123, 0xee75, 0xf123, 0xec35, 0xeef1, 0xec35, 0xeef1, 0xed02, +0xefc4, 0xed02, 0xefc4, 0xeb5d, 0xee1c, 0xeb5d, 0xee1c, 0xeb5d, 0xee1c, 0xec84, 0xef35, +0xec84, 0xef35, 0xecc6, 0xef5e, 0xecc6, 0xef5e, 0xec42, 0xeeb3, 0xec42, 0xeeb3, 0xeccd, +0xef0c, 0xeccd, 0xef0c, 0xee6b, 0xf06b, 0xee6b, 0xf06b, 0xf0c8, 0xf27e, 0xf0c8, 0xf27e, +0xf0c8, 0xf27e, 0xef6d, 0xf0d0, 0xef6d, 0xf0d0, 0xf1f0, 0xf2f6, 0xf1f0, 0xf2f6, 0xf461, +0xf505, 0xf461, 0xf505, 0xf6b9, 0xf6f7, 0xf6b9, 0xf6f7, 0xf97f, 0xf956, 0xf97f, 0xf956, +0xfda5, 0xfd16, 0xfda5, 0xfd16, 0xfda5, 0xfd16, 0xfd3b, 0xfc4b, 0xfd3b, 0xfc4b, 0x99, +0xff4f, 0x99, 0xff4f, 0x1ff, 0x65, 0x1ff, 0x65, 0xac, 0xfece, 0xac, 0xfece, +0x207, 0xfff4, 0x207, 0xfff4, 0x207, 0xfff4, 0x119, 0xfede, 0x119, 0xfede, 0x13e, +0xfeed, 0x13e, 0xfeed, 0x25e, 0x7, 0x25e, 0x7, 0x39d, 0x150, 0x39d, 0x150, +0x295, 0x62, 0x295, 0x62, 0x2dd, 0xd2, 0x2dd, 0xd2, 0x2dd, 0xd2, 0x397, +0x1c2, 0x397, 0x1c2, 0x27f, 0xea, 0x27f, 0xea, 0x407, 0x2bc, 0x407, 0x2bc, +0x419, 0x31d, 0x419, 0x31d, 0x223, 0x17a, 0x223, 0x17a, 0x332, 0x2dd, 0x332, +0x2dd, 0x332, 0x2dd, 0x219, 0x216, 0x219, 0x216, 0x16f, 0x1bb, 0x16f, 0x1bb, +0x32a, 0x3be, 0x32a, 0x3be, 0x1e1, 0x2b6, 0x1e1, 0x2b6, 0x82, 0x18e, 0x82, +0x18e, 0x82, 0x18e, 0xe, 0x148, 0xe, 0x148, 0xfe1f, 0xff7b, 0xfe1f, 0xff7b, +0xfac2, 0xfc35, 0xfac2, 0xfc35, 0xf9a1, 0xfb22, 0xf9a1, 0xfb22, 0xf87b, 0xf9fe, 0xf87b, +0xf9fe, 0xf4b8, 0xf635, 0xf4b8, 0xf635, 0xf4b8, 0xf635, 0xf7f0, 0xf95e, 0xf7f0, 0xf95e, +0xf822, 0xf97c, 0xf822, 0xf97c, 0xf7ba, 0xf8fa, 0xf7ba, 0xf8fa, 0xf87b, 0xf99d, 0xf87b, +0xf99d, 0xf7ef, 0xf8f1, 0xf7ef, 0xf8f1, 0xf5fc, 0xf6dd, 0xf5fc, 0xf6dd, 0xf5fc, 0xf6dd, +0xf436, 0xf4f6, 0xf436, 0xf4f6, 0xf4d0, 0xf572, 0xf4d0, 0xf572, 0xf3f6, 0xf47c, 0xf3f6, +0xf47c, 0xf7d6, 0xf843, 0xf7d6, 0xf843, 0xf4f1, 0xf547, 0xf4f1, 0xf547, 0xf4f1, 0xf547, +0xf66b, 0xf6b0, 0xf66b, 0xf6b0, 0xf7cc, 0xf802, 0xf7cc, 0xf802, 0xf852, 0xf87e, 0xf852, +0xf87e, 0xf8bc, 0xf8e1, 0xf8bc, 0xf8e1, 0xf66f, 0xf68f, 0xf66f, 0xf68f, 0xf6fd, 0xf719, +0xf6fd, 0xf719, 0xf6fd, 0xf719, 0xf782, 0xf79c, 0xf782, 0xf79c, 0xf75f, 0xf778, 0xf75f, +0xf778, 0xf687, 0xf6a0, 0xf687, 0xf6a0, 0xfa29, 0xfa40, 0xfa29, 0xfa40, 0xfaa2, 0xfab8, +0xfaa2, 0xfab8, 0xfd17, 0xfd29, 0xfd17, 0xfd29, 0xfd17, 0xfd29, 0xfcc5, 0xfcd3, 0xfcc5, +0xfcd3, 0xff18, 0xff21, 0xff18, 0xff21, 0xfd8d, 0xfd8f, 0xfd8d, 0xfd8f, 0xfdf1, 0xfdeb, +0xfdf1, 0xfdeb, 0xff7d, 0xff6e, 0xff7d, 0xff6e, 0xff7d, 0xff6e, 0xfc0c, 0xfbf2, 0xfc0c, +0xfbf2, 0xfef1, 0xfecc, 0xfef1, 0xfecc, 0xfee3, 0xfeb3, 0xfee3, 0xfeb3, 0x9, 0xffce, +0x9, 0xffce, 0x11d, 0xd6, 0x11d, 0xd6, 0x142, 0xef, 0x142, 0xef, 0x142, +0xef, 0xff47, 0xfeea, 0xff47, 0xfeea, 0x1e5, 0x17d, 0x1e5, 0x17d, 0x1d8, 0x164, +0x1d8, 0x164, 0x26, 0xffa7, 0x26, 0xffa7, 0x1c9, 0x13e, 0x1c9, 0x13e, 0x14f, +0xb8, 0x14f, 0xb8, 0x14f, 0xb8, 0x111, 0x6d, 0x111, 0x6d, 0x21f, 0x16e, +0x21f, 0x16e, 0x405, 0x345, 0x405, 0x345, 0x2cc, 0x1fd, 0x2cc, 0x1fd, 0x67d, +0x59d, 0x67d, 0x59d, 0x67d, 0x59d, 0x7b3, 0x6c3, 0x7b3, 0x6c3, 0x7f3, 0x6f1, +0x7f3, 0x6f1, 0xc6e, 0xb5a, 0xc6e, 0xb5a, 0xced, 0xbc8, 0xced, 0xbc8, 0xd22, +0xbec, 0xd22, 0xbec, 0x101b, 0xed7, 0x101b, 0xed7, 0x101b, 0xed7, 0x1064, 0xf13, +0x1064, 0xf13, 0x1059, 0xefd, 0x1059, 0xefd, 0x133b, 0x11d9, 0x133b, 0x11d9, 0x12f8, +0x1193, 0x12f8, 0x1193, 0x1395, 0x1233, 0x1395, 0x1233, 0x134f, 0x11f4, 0x134f, 0x11f4, +0x134f, 0x11f4, 0x15a1, 0x1452, 0x15a1, 0x1452, 0x1688, 0x154b, 0x1688, 0x154b, 0x16af, +0x1589, 0x16af, 0x1589, 0x1863, 0x175a, 0x1863, 0x175a, 0x15e4, 0x14fb, 0x15e4, 0x14fb, +0x15e4, 0x14fb, 0x1729, 0x1665, 0x1729, 0x1665, 0x13d3, 0x1337, 0x13d3, 0x1337, 0x134d, +0x12dc, 0x134d, 0x12dc, 0x1356, 0x1312, 0x1356, 0x1312, 0x116b, 0x1154, 0x116b, 0x1154, +0x1042, 0x1057, 0x1042, 0x1057, 0x1042, 0x1057, 0x107a, 0x10ba, 0x107a, 0x10ba, 0xead, +0xf16, 0xead, 0xf16, 0xe0c, 0xe9a, 0xe0c, 0xe9a, 0xe67, 0xf17, 0xe67, 0xf17, +0x997, 0xa63, 0x997, 0xa63, 0x997, 0xa63, 0xc20, 0xd05, 0xc20, 0xd05, 0xa69, +0xb60, 0xa69, 0xb60, 0xa24, 0xb28, 0xa24, 0xb28, 0x84b, 0x956, 0x84b, 0x956, +0x7d8, 0x8e7, 0x7d8, 0x8e7, 0x514, 0x621, 0x514, 0x621, 0x514, 0x621, 0x535, +0x63b, 0x535, 0x63b, 0x610, 0x70c, 0x610, 0x70c, 0x2b7, 0x3a7, 0x2b7, 0x3a7, +0x2c2, 0x3a2, 0x2c2, 0x3a2, 0xfe4f, 0xff1d, 0xfe4f, 0xff1d, 0xfdbb, 0xfe76, 0xfdbb, +0xfe76, 0xfdbb, 0xfe76, 0xfaef, 0xfb96, 0xfaef, 0xfb96, 0xf9ed, 0xfa7f, 0xf9ed, 0xfa7f, +0xf5fc, 0xf678, 0xf5fc, 0xf678, 0xf8ce, 0xf934, 0xf8ce, 0xf934, 0xf753, 0xf7a2, 0xf753, +0xf7a2, 0xf753, 0xf7a2, 0xf6b2, 0xf6e9, 0xf6b2, 0xf6e9, 0xfa36, 0xfa53, 0xfa36, 0xfa53, +0xf869, 0xf86a, 0xf869, 0xf86a, 0xf827, 0xf80a, 0xf827, 0xf80a, 0xf660, 0xf622, 0xf660, +0xf622, 0xf617, 0xf5b4, 0xf617, 0xf5b4, 0xf617, 0xf5b4, 0xf392, 0xf307, 0xf392, 0xf307, +0xf6a6, 0xf5ee, 0xf6a6, 0xf5ee, 0xf49e, 0xf3b5, 0xf49e, 0xf3b5, 0xf53f, 0xf41f, 0xf53f, +0xf41f, 0xf79f, 0xf644, 0xf79f, 0xf644, 0xf97b, 0xf7e0, 0xf97b, 0xf7e0, 0xf97b, 0xf7e0, +0xfa1b, 0xf83c, 0xfa1b, 0xf83c, 0xfd03, 0xfadc, 0xfd03, 0xfadc, 0xfef9, 0xfc88, 0xfef9, +0xfc88, 0xfdca, 0xfb0b, 0xfdca, 0xfb0b, 0x278, 0xff6c, 0x278, 0xff6c, 0x278, 0xff6c, +0x22f, 0xfed4, 0x22f, 0xfed4, 0x449, 0xa2, 0x449, 0xa2, 0x6d3, 0x2e1, 0x6d3, +0x2e1, 0x9b1, 0x57a, 0x9b1, 0x57a, 0xc80, 0x807, 0xc80, 0x807, 0xfc1, 0xb0e, +0xfc1, 0xb0e, 0xfc1, 0xb0e, 0x10c5, 0xbde, 0x10c5, 0xbde, 0x1205, 0xcf3, 0x1205, +0xcf3, 0x1526, 0xff1, 0x1526, 0xff1, 0x161a, 0x10cc, 0x161a, 0x10cc, 0x187a, 0x131c, +0x187a, 0x131c, 0x1a1f, 0x14bb, 0x1a1f, 0x14bb, 0x1a1f, 0x14bb, 0x1b26, 0x15c5, 0x1b26, +0x15c5, 0x1d22, 0x17cf, 0x1d22, 0x17cf, 0x1e8d, 0x194f, 0x1e8d, 0x194f, 0x1d1c, 0x17fc, +0x1d1c, 0x17fc, 0x1ea9, 0x19ac, 0x1ea9, 0x19ac, 0x1ea9, 0x19ac, 0x1f3e, 0x1a6c, 0x1f3e, +0x1a6c, 0x1f72, 0x1acf, 0x1f72, 0x1acf, 0x214c, 0x1cdc, 0x214c, 0x1cdc, 0x2080, 0x1c45, +0x2080, 0x1c45, 0x1fea, 0x1be6, 0x1fea, 0x1be6, 0x1f31, 0x1b63, 0x1f31, 0x1b63, 0x1f31, +0x1b63, 0x1ff9, 0x1c61, 0x1ff9, 0x1c61, 0x1d3b, 0x19d8, 0x1d3b, 0x19d8, 0x1cd1, 0x19a0, +0x1cd1, 0x19a0, 0x1c46, 0x1944, 0x1c46, 0x1944, 0x1956, 0x167f, 0x1956, 0x167f, 0x1a15, +0x1764, 0x1a15, 0x1764, 0x1a15, 0x1764, 0x1837, 0x15a8, 0x1837, 0x15a8, 0x1718, 0x14a8, +0x1718, 0x14a8, 0x151a, 0x12c3, 0x151a, 0x12c3, 0x155d, 0x131b, 0x155d, 0x131b, 0x12c5, +0x1095, 0x12c5, 0x1095, 0x12c5, 0x1095, 0x14dd, 0x12bc, 0x14dd, 0x12bc, 0x13e0, 0x11ca, +0x13e0, 0x11ca, 0x1195, 0xf89, 0x1195, 0xf89, 0x13cf, 0x11cb, 0x13cf, 0x11cb, 0x10bb, +0xec0, 0x10bb, 0xec0, 0x121f, 0x102d, 0x121f, 0x102d, 0x121f, 0x102d, 0x1257, 0x106e, +0x1257, 0x106e, 0x1290, 0x10b4, 0x1290, 0x10b4, 0x1052, 0xe84, 0x1052, 0xe84, 0x1237, +0x107b, 0x1237, 0x107b, 0xfa3, 0xdfd, 0xfa3, 0xdfd, 0xeb9, 0xd2d, 0xeb9, 0xd2d, +0xeb9, 0xd2d, 0x101b, 0xead, 0x101b, 0xead, 0xc82, 0xb38, 0xc82, 0xb38, 0xbf7, +0xad6, 0xbf7, 0xad6, 0xc9c, 0xba7, 0xc9c, 0xba7, 0xb77, 0xab3, 0xb77, 0xab3, +0xb77, 0xab3, 0x9a6, 0x917, 0x9a6, 0x917, 0xab2, 0xa5b, 0xab2, 0xa5b, 0x693, +0x676, 0x693, 0x676, 0x6da, 0x6fa, 0x6da, 0x6fa, 0x65f, 0x6bb, 0x65f, 0x6bb, +0x59d, 0x636, 0x59d, 0x636, 0x59d, 0x636, 0x33c, 0x410, 0x33c, 0x410, 0x376, +0x482, 0x376, 0x482, 0x1ee, 0x330, 0x1ee, 0x330, 0xda, 0x24c, 0xda, 0x24c, +0x38b, 0x528, 0x38b, 0x528, 0xed, 0x2b0, 0xed, 0x2b0, 0xed, 0x2b0, 0x173, +0x355, 0x173, 0x355, 0xff8a, 0x183, 0xff8a, 0x183, 0xffed, 0x1f7, 0xffed, 0x1f7, +0xfec1, 0xd3, 0xfec1, 0xd3, 0xfc44, 0xfe58, 0xfc44, 0xfe58, 0xfc44, 0xfe58, 0xf8b0, +0xfabf, 0xf8b0, 0xfabf, 0xf8d5, 0xfad9, 0xf8d5, 0xfad9, 0xf95e, 0xfb51, 0xf95e, 0xfb51, +0xf801, 0xf9e0, 0xf801, 0xf9e0, 0xfa86, 0xfc4d, 0xfa86, 0xfc4d, 0xf993, 0xfb3f, 0xf993, +0xfb3f, 0xf993, 0xfb3f, 0xf9d3, 0xfb64, 0xf9d3, 0xfb64, 0xf9cc, 0xfb43, 0xf9cc, 0xfb43, +0xf898, 0xf9f7, 0xf898, 0xf9f7, 0xf6c4, 0xf80e, 0xf6c4, 0xf80e, 0xf5be, 0xf6f7, 0xf5be, +0xf6f7, 0xf40c, 0xf539, 0xf40c, 0xf539, 0xf40c, 0xf539, 0xf198, 0xf2c0, 0xf198, 0xf2c0, +0xf171, 0xf29a, 0xf171, 0xf29a, 0xefd7, 0xf108, 0xefd7, 0xf108, 0xed8a, 0xeecc, 0xed8a, +0xeecc, 0xecf7, 0xee51, 0xecf7, 0xee51, 0xecf7, 0xee51, 0xed3f, 0xeeb7, 0xed3f, 0xeeb7, +0xeaa0, 0xec3e, 0xeaa0, 0xec3e, 0xe8b8, 0xea81, 0xe8b8, 0xea81, 0xe53e, 0xe739, 0xe53e, +0xe739, 0xe252, 0xe482, 0xe252, 0xe482, 0xe224, 0xe48c, 0xe224, 0xe48c, 0xe224, 0xe48c, +0xe0f4, 0xe395, 0xe0f4, 0xe395, 0xe220, 0xe4fc, 0xe220, 0xe4fc, 0xe28c, 0xe5a3, 0xe28c, +0xe5a3, 0xe285, 0xe5d6, 0xe285, 0xe5d6, 0xe0dd, 0xe464, 0xe0dd, 0xe464, 0xe342, 0xe6fd, +0xe342, 0xe6fd, 0xe342, 0xe6fd, 0xe101, 0xe4ec, 0xe101, 0xe4ec, 0xe0cd, 0xe4e4, 0xe0cd, +0xe4e4, 0xe292, 0xe6d0, 0xe292, 0xe6d0, 0xe10c, 0xe56c, 0xe10c, 0xe56c, 0xe2cf, 0xe74b, +0xe2cf, 0xe74b, 0xe2cf, 0xe74b, 0xe2b2, 0xe746, 0xe2b2, 0xe746, 0xe352, 0xe7f9, 0xe352, +0xe7f9, 0xe1eb, 0xe6a0, 0xe1eb, 0xe6a0, 0xe495, 0xe955, 0xe495, 0xe955, 0xe2bf, 0xe786, +0xe2bf, 0xe786, 0xe3af, 0xe87a, 0xe3af, 0xe87a, 0xe3af, 0xe87a, 0xe3a8, 0xe875, 0xe3a8, +0xe875, 0xe259, 0xe726, 0xe259, 0xe726, 0xe312, 0xe7dc, 0xe312, 0xe7dc, 0xe468, 0xe92e, +0xe468, 0xe92e, 0xe4cc, 0xe98c, 0xe4cc, 0xe98c, 0xe4cc, 0xe98c, 0xe35d, 0xe816, 0xe35d, +0xe816, 0xe60e, 0xeabe, 0xe60e, 0xeabe, 0xe402, 0xe8a7, 0xe402, 0xe8a7, 0xe5c3, 0xea5b, +0xe5c3, 0xea5b, 0xe688, 0xeb0f, 0xe688, 0xeb0f, 0xe757, 0xebca, 0xe757, 0xebca, 0xe757, +0xebca, 0xe65e, 0xeab9, 0xe65e, 0xeab9, 0xe84e, 0xec8e, 0xe84e, 0xec8e, 0xe77a, 0xeb99, +0xe77a, 0xeb99, 0xe988, 0xed81, 0xe988, 0xed81, 0xec8b, 0xf058, 0xec8b, 0xf058, 0xeb32, +0xeece, 0xeb32, 0xeece, 0xeb32, 0xeece, 0xefab, 0xf311, 0xefab, 0xf311, 0xf009, 0xf333, +0xf009, 0xf333, 0xf39f, 0xf688, 0xf39f, 0xf688, 0xf66b, 0xf910, 0xf66b, 0xf910, 0xf7f8, +0xfa55, 0xf7f8, 0xfa55, 0xf7f8, 0xfa55, 0xfa87, 0xfc99, 0xfa87, 0xfc99, 0xfedc, 0xa2, +0xfedc, 0xa2, 0xde, 0x257, 0xde, 0x257, 0x32d, 0x45b, 0x32d, 0x45b, 0x3ea, +0x4ce, 0x3ea, 0x4ce, 0x36b, 0x409, 0x36b, 0x409, 0x36b, 0x409, 0x498, 0x4f5, +0x498, 0x4f5, 0x59b, 0x5bd, 0x59b, 0x5bd, 0x608, 0x5f5, 0x608, 0x5f5, 0x42c, +0x3ee, 0x42c, 0x3ee, 0x630, 0x5ce, 0x630, 0x5ce, 0x592, 0x516, 0x592, 0x516, +0x592, 0x516, 0x69e, 0x613, 0x69e, 0x613, 0x76a, 0x6d8, 0x76a, 0x6d8, 0x5df, +0x551, 0x5df, 0x551, 0x658, 0x5d5, 0x658, 0x5d5, 0x581, 0x514, 0x581, 0x514, +0x581, 0x514, 0x438, 0x3e6, 0x438, 0x3e6, 0x377, 0x349, 0x377, 0x349, 0x3b9, +0x3b4, 0x3b9, 0x3b4, 0x2a9, 0x2d1, 0x2a9, 0x2d1, 0x26c, 0x2c2, 0x26c, 0x2c2, +0x17b, 0x202, 0x17b, 0x202, 0x17b, 0x202, 0x3c, 0xf3, 0x3c, 0xf3, 0xff32, +0x17, 0xff32, 0x17, 0xfc0c, 0xfd1b, 0xfc0c, 0xfd1b, 0xf95e, 0xfa94, 0xf95e, 0xfa94, +0xf610, 0xf766, 0xf610, 0xf766, 0xf6c2, 0xf832, 0xf6c2, 0xf832, 0xf6c2, 0xf832, 0xf47a, +0xf5fb, 0xf47a, 0xf5fb, 0xf4bf, 0xf649, 0xf4bf, 0xf649, 0xf59e, 0xf729, 0xf59e, 0xf729, +0xf337, 0xf4bb, 0xf337, 0xf4bb, 0xf3ab, 0xf51f, 0xf3ab, 0xf51f, 0xf3ab, 0xf51f, 0xf207, +0xf362, 0xf207, 0xf362, 0xf0c4, 0xf200, 0xf0c4, 0xf200, 0xefae, 0xf0c4, 0xefae, 0xf0c4, +0xefa3, 0xf08e, 0xefa3, 0xf08e, 0xedbb, 0xee76, 0xedbb, 0xee76, 0xef06, 0xef8e, 0xef06, +0xef8e, 0xef06, 0xef8e, 0xeed2, 0xef25, 0xeed2, 0xef25, 0xefcc, 0xefea, 0xefcc, 0xefea, +0xef19, 0xef03, 0xef19, 0xef03, 0xf0e6, 0xf09e, 0xf0e6, 0xf09e, 0xf08d, 0xf016, 0xf08d, +0xf016, 0xef32, 0xee91, 0xef32, 0xee91, 0xef32, 0xee91, 0xf267, 0xf1a2, 0xf267, 0xf1a2, +0xf117, 0xf033, 0xf117, 0xf033, 0xf3d8, 0xf2dd, 0xf3d8, 0xf2dd, 0xf3bb, 0xf2b0, 0xf3bb, +0xf2b0, 0xf691, 0xf57d, 0xf691, 0xf57d, 0xf691, 0xf57d, 0xf81f, 0xf70a, 0xf81f, 0xf70a, +0xfa62, 0xf951, 0xfa62, 0xf951, 0xfa6f, 0xf96a, 0xfa6f, 0xf96a, 0xfb8b, 0xfa96, 0xfb8b, +0xfa96, 0xfb70, 0xfa91, 0xfb70, 0xfa91, 0xfaba, 0xf9f4, 0xfaba, 0xf9f4, 0xfaba, 0xf9f4, +0xfc9f, 0xfbf3, 0xfc9f, 0xfbf3, 0xfc69, 0xfbdb, 0xfc69, 0xfbdb, 0xff0c, 0xfe99, 0xff0c, +0xfe99, 0xfd2a, 0xfcd3, 0xfd2a, 0xfcd3, 0xfde6, 0xfda6, 0xfde6, 0xfda6, 0xfda4, 0xfd79, +0xfda4, 0xfd79, 0xfda4, 0xfd79, 0xfffb, 0xffe0, 0xfffb, 0xffe0, 0xffa3, 0xff92, 0xffa3, +0xff92, 0xfe3c, 0xfe30, 0xfe3c, 0xfe30, 0xff07, 0xfef8, 0xff07, 0xfef8, 0x15, 0xfffd, +0x15, 0xfffd, 0x15, 0xfffd, 0x173, 0x14a, 0x173, 0x14a, 0x25c, 0x21c, 0x25c, +0x21c, 0x8d, 0x2e, 0x8d, 0x2e, 0xff54, 0xfed3, 0xff54, 0xfed3, 0x251, 0x1a8, +0x251, 0x1a8, 0xdf, 0x9, 0xdf, 0x9, 0xdf, 0x9, 0x40a, 0x305, 0x40a, +0x305, 0x44d, 0x319, 0x44d, 0x319, 0x590, 0x42c, 0x590, 0x42c, 0x95b, 0x7c8, +0x95b, 0x7c8, 0xabb, 0x8fd, 0xabb, 0x8fd, 0xc9e, 0xab9, 0xc9e, 0xab9, 0xc9e, +0xab9, 0xeae, 0xca8, 0xeae, 0xca8, 0x108a, 0xe6a, 0x108a, 0xe6a, 0xf8a, 0xd57, +0xf8a, 0xd57, 0x102a, 0xdec, 0x102a, 0xdec, 0xfac, 0xd6c, 0xfac, 0xd6c, 0xfac, +0xd6c, 0x1084, 0xe4c, 0x1084, 0xe4c, 0x125e, 0x1038, 0x125e, 0x1038, 0x1326, 0x1119, +0x1326, 0x1119, 0x1314, 0x112a, 0x1314, 0x112a, 0x13f5, 0x1236, 0x13f5, 0x1236, 0x15d4, +0x1446, 0x15d4, 0x1446, 0x15d4, 0x1446, 0x13b1, 0x125b, 0x13b1, 0x125b, 0x1456, 0x133b, +0x1456, 0x133b, 0x12d1, 0x11f5, 0x12d1, 0x11f5, 0x1070, 0xfd4, 0x1070, 0xfd4, 0x1067, +0x100c, 0x1067, 0x100c, 0x1031, 0x1016, 0x1031, 0x1016, 0x1031, 0x1016, 0xf8c, 0xfaf, +0xf8c, 0xfaf, 0xe04, 0xe60, 0xe04, 0xe60, 0xebd, 0xf4f, 0xebd, 0xf4f, 0xd86, +0xe49, 0xd86, 0xe49, 0xf08, 0xff6, 0xf08, 0xff6, 0xf08, 0xff6, 0xfd2, 0x10e4, +0xfd2, 0x10e4, 0x1073, 0x11a3, 0x1073, 0x11a3, 0xef7, 0x103e, 0xef7, 0x103e, 0xdeb, +0xf43, 0xdeb, 0xf43, 0xe0b, 0xf6f, 0xe0b, 0xf6f, 0xfa9, 0x1112, 0xfa9, 0x1112, +0xfa9, 0x1112, 0xfe9, 0x1153, 0xfe9, 0x1153, 0xdde, 0xf44, 0xdde, 0xf44, 0xd1a, +0xe79, 0xd1a, 0xe79, 0xa19, 0xb6c, 0xa19, 0xb6c, 0xaf5, 0xc3b, 0xaf5, 0xc3b, +0x7f9, 0x92e, 0x7f9, 0x92e, 0x7f9, 0x92e, 0x714, 0x835, 0x714, 0x835, 0x422, +0x52f, 0x422, 0x52f, 0x33a, 0x430, 0x33a, 0x430, 0x12e, 0x209, 0x12e, 0x209, +0xa7, 0x166, 0xa7, 0x166, 0xa7, 0x166, 0x239, 0x2d8, 0x239, 0x2d8, 0xffd1, +0x4e, 0xffd1, 0x4e, 0xff3b, 0xff91, 0xff3b, 0xff91, 0xfc7a, 0xfca4, 0xfc7a, 0xfca4, +0xfdaf, 0xfda8, 0xfdaf, 0xfda8, 0xfcd1, 0xfc94, 0xfcd1, 0xfc94, 0xfcd1, 0xfc94, 0xfc2e, +0xfbb5, 0xfc2e, 0xfbb5, 0xf89c, 0xf7e1, 0xf89c, 0xf7e1, 0xf9cc, 0xf8c8, 0xf9cc, 0xf8c8, +0xfa26, 0xf8d4, 0xfa26, 0xf8d4, 0xfb4d, 0xf9a6, 0xfb4d, 0xf9a6, 0xfb4d, 0xf9a6, 0xfd41, +0xfb41, 0xfd41, 0xfb41, 0xfc21, 0xf9c3, 0xfc21, 0xf9c3, 0xfcad, 0xf9ee, 0xfcad, 0xf9ee, +0xfe4c, 0xfb29, 0xfe4c, 0xfb29, 0x1f1, 0xfe69, 0x1f1, 0xfe69, 0x19, 0xfc2d, 0x19, +0xfc2d, 0x19, 0xfc2d, 0x252, 0xfe04, 0x252, 0xfe04, 0x250, 0xfda4, 0x250, 0xfda4, +0x430, 0xff2a, 0x430, 0xff2a, 0x726, 0x1ce, 0x726, 0x1ce, 0x8b0, 0x30c, 0x8b0, +0x30c, 0x9a8, 0x3c3, 0x9a8, 0x3c3, 0x9a8, 0x3c3, 0xc28, 0x60d, 0xc28, 0x60d, +0xe34, 0x7ed, 0xe34, 0x7ed, 0xd8e, 0x727, 0xd8e, 0x727, 0x1139, 0xabe, 0x1139, +0xabe, 0x134e, 0xccd, 0x134e, 0xccd, 0x134e, 0xccd, 0x1553, 0xed7, 0x1553, 0xed7, +0x15ee, 0xf83, 0x15ee, 0xf83, 0x164c, 0xffd, 0x164c, 0xffd, 0x15e5, 0xfbc, 0x15e5, +0xfbc, 0x17f3, 0x11fa, 0x17f3, 0x11fa, 0x18e7, 0x1325, 0x18e7, 0x1325, 0x18e7, 0x1325, +0x1786, 0x1202, 0x1786, 0x1202, 0x195c, 0x141a, 0x195c, 0x141a, 0x19c9, 0x14cd, 0x19c9, +0x14cd, 0x1a94, 0x15e0, 0x1a94, 0x15e0, 0x1b81, 0x1716, 0x1b81, 0x1716, 0x1b62, 0x173e, +0x1b62, 0x173e, 0x1b62, 0x173e, 0x1b4f, 0x1770, 0x1b4f, 0x1770, 0x1b63, 0x17c6, 0x1b63, +0x17c6, 0x1a49, 0x16ea, 0x1a49, 0x16ea, 0x1aa5, 0x177f, 0x1aa5, 0x177f, 0x1ae2, 0x17ee, +0x1ae2, 0x17ee, 0x1ae2, 0x17ee, 0x19cf, 0x1709, 0x19cf, 0x1709, 0x1a45, 0x17a6, 0x1a45, +0x17a6, 0x172c, 0x14ad, 0x172c, 0x14ad, 0x17a4, 0x1540, 0x17a4, 0x1540, 0x1766, 0x1517, +0x1766, 0x1517, 0x1794, 0x1555, 0x1794, 0x1555, 0x1794, 0x1555, 0x1772, 0x1540, 0x1772, +0x1540, 0x153f, 0x1315, 0x153f, 0x1315, 0x15cd, 0x13a9, 0x15cd, 0x13a9, 0x13d7, 0x11b8, +0x13d7, 0x11b8, 0x151e, 0x1303, 0x151e, 0x1303, 0x135c, 0x1146, 0x135c, 0x1146, 0x135c, +0x1146, 0x11a1, 0xf92, 0x11a1, 0xf92, 0x10a5, 0xe9f, 0x10a5, 0xe9f, 0x1227, 0x102d, +0x1227, 0x102d, 0x122f, 0x1046, 0x122f, 0x1046, 0x13cb, 0x11f9, 0x13cb, 0x11f9, 0x13cb, +0x11f9, 0x12fe, 0x1148, 0x12fe, 0x1148, 0x1010, 0xe7b, 0x1010, 0xe7b, 0x115f, 0xff3, +0x115f, 0xff3, 0xf1e, 0xde0, 0xf1e, 0xde0, 0xee5, 0xddb, 0xee5, 0xddb, 0xcbd, +0xbed, 0xcbd, 0xbed, 0xcbd, 0xbed, 0xb74, 0xae3, 0xb74, 0xae3, 0x86f, 0x821, +0x86f, 0x821, 0xa04, 0x9fc, 0xa04, 0x9fc, 0x8af, 0x8f0, 0x8af, 0x8f0, 0x75d, +0x7e8, 0x75d, 0x7e8, 0x602, 0x6d6, 0x602, 0x6d6, 0x602, 0x6d6, 0x2ec, 0x407, +0x2ec, 0x407, 0x271, 0x3d1, 0x271, 0x3d1, 0x27c, 0x41c, 0x27c, 0x41c, 0x24d, +0x428, 0x24d, 0x428, 0xfea2, 0xb0, 0xfea2, 0xb0, 0xfea2, 0xb0, 0x53, 0x28d, +0x53, 0x28d, 0xfe90, 0xed, 0xfe90, 0xed, 0xff70, 0x1e7, 0xff70, 0x1e7, 0xfe39, +0xc0, 0xfe39, 0xc0, 0xfbf1, 0xfe7e, 0xfbf1, 0xfe7e, 0xf973, 0xfbff, 0xf973, 0xfbff, +0xf973, 0xfbff, 0xf84d, 0xfacd, 0xf84d, 0xfacd, 0xf6e6, 0xf952, 0xf6e6, 0xf952, 0xf49c, +0xf6ed, 0xf49c, 0xf6ed, 0xf665, 0xf895, 0xf665, 0xf895, 0xf5a8, 0xf7b2, 0xf5a8, 0xf7b2, +0xf5c4, 0xf7a5, 0xf5c4, 0xf7a5, 0xf5c4, 0xf7a5, 0xf5ba, 0xf770, 0xf5ba, 0xf770, 0xf74d, +0xf8d7, 0xf74d, 0xf8d7, 0xf5f9, 0xf759, 0xf5f9, 0xf759, 0xf68f, 0xf7c7, 0xf68f, 0xf7c7, +0xf58d, 0xf6a1, 0xf58d, 0xf6a1, 0xf58d, 0xf6a1, 0xf4bb, 0xf5b0, 0xf4bb, 0xf5b0, 0xf43d, +0xf51a, 0xf43d, 0xf51a, 0xf280, 0xf34a, 0xf280, 0xf34a, 0xf408, 0xf4c7, 0xf408, 0xf4c7, +0xf300, 0xf3bb, 0xf300, 0xf3bb, 0xf201, 0xf2be, 0xf201, 0xf2be, 0xf201, 0xf2be, 0xf0a7, +0xf16f, 0xf0a7, 0xf16f, 0xeea2, 0xef7b, 0xeea2, 0xef7b, 0xecd5, 0xedc4, 0xecd5, 0xedc4, +0xeb6a, 0xec75, 0xeb6a, 0xec75, 0xe95e, 0xea8a, 0xe95e, 0xea8a, 0xe832, 0xe980, 0xe832, +0xe980, 0xe832, 0xe980, 0xe859, 0xe9cd, 0xe859, 0xe9cd, 0xe77c, 0xe916, 0xe77c, 0xe916, +0xe64f, 0xe811, 0xe64f, 0xe811, 0xe4dc, 0xe6c4, 0xe4dc, 0xe6c4, 0xe45a, 0xe669, 0xe45a, +0xe669, 0xe45a, 0xe669, 0xe192, 0xe3c5, 0xe192, 0xe3c5, 0xe218, 0xe46e, 0xe218, 0xe46e, +0xe353, 0xe5c9, 0xe353, 0xe5c9, 0xe3b9, 0xe64e, 0xe3b9, 0xe64e, 0xe6ae, 0xe961, 0xe6ae, +0xe961, 0xe3ca, 0xe697, 0xe3ca, 0xe697, 0xe3ca, 0xe697, 0xe48a, 0xe771, 0xe48a, 0xe771, +0xe478, 0xe778, 0xe478, 0xe778, 0xe455, 0xe76c, 0xe455, 0xe76c, 0xe3d3, 0xe701, 0xe3d3, +0xe701, 0xe34f, 0xe694, 0xe34f, 0xe694, 0xe230, 0xe58b, 0xe230, 0xe58b, 0xe230, 0xe58b, +0xe192, 0xe503, 0xe192, 0xe503, 0xe44d, 0xe7d4, 0xe44d, 0xe7d4, 0xe353, 0xe6ef, 0xe353, +0xe6ef, 0xe3a2, 0xe752, 0xe3a2, 0xe752, 0xe231, 0xe5f3, 0xe231, 0xe5f3, 0xe231, 0xe5f3, +0xe263, 0xe634, 0xe263, 0xe634, 0xe18e, 0xe56c, 0xe18e, 0xe56c, 0xe342, 0xe729, 0xe342, +0xe729, 0xe1dc, 0xe5c7, 0xe1dc, 0xe5c7, 0xe0fd, 0xe4e8, 0xe0fd, 0xe4e8, 0xe1a6, 0xe58c, +0xe1a6, 0xe58c, 0xe1a6, 0xe58c, 0xe105, 0xe4de, 0xe105, 0xe4de, 0xe212, 0xe5d8, 0xe212, +0xe5d8, 0xe382, 0xe72e, 0xe382, 0xe72e, 0xe388, 0xe713, 0xe388, 0xe713, 0xe349, 0xe6ae, +0xe349, 0xe6ae, 0xe699, 0xe9d1, 0xe699, 0xe9d1, 0xe699, 0xe9d1, 0xe62f, 0xe934, 0xe62f, +0xe934, 0xe953, 0xec20, 0xe953, 0xec20, 0xe9f4, 0xec86, 0xe9f4, 0xec86, 0xec14, 0xee68, +0xec14, 0xee68, 0xeeb7, 0xf0cc, 0xeeb7, 0xf0cc, 0xeeb7, 0xf0cc, 0xf3d9, 0xf5ae, 0xf3d9, +0xf5ae, 0xf684, 0xf81b, 0xf684, 0xf81b, 0xf8f1, 0xfa4a, 0xf8f1, 0xfa4a, 0xfd2a, 0xfe4a, +0xfd2a, 0xfe4a, 0xfdcb, 0xfeb6, 0xfdcb, 0xfeb6, 0x1be, 0x278, 0x1be, 0x278, 0x1be, +0x278, 0xe7, 0x176, 0xe7, 0x176, 0x2c9, 0x334, 0x2c9, 0x334, 0x443, 0x490, +0x443, 0x490, 0x564, 0x59b, 0x564, 0x59b, 0x6f4, 0x71a, 0x6f4, 0x71a, 0x6f4, +0x71a, 0x7d2, 0x7ee, 0x7d2, 0x7ee, 0x768, 0x782, 0x768, 0x782, 0x8cf, 0x8eb, +0x8cf, 0x8eb, 0x9a8, 0x9cb, 0x9a8, 0x9cb, 0x7f8, 0x828, 0x7f8, 0x828, 0x7f1, +0x830, 0x7f1, 0x830, 0x7f1, 0x830, 0x80c, 0x85e, 0x80c, 0x85e, 0x834, 0x89c, +0x834, 0x89c, 0x67e, 0x6fe, 0x67e, 0x6fe, 0x754, 0x7ed, 0x754, 0x7ed, 0x62e, +0x6e2, 0x62e, 0x6e2, 0x504, 0x5d2, 0x504, 0x5d2, 0x504, 0x5d2, 0x4c1, 0x5a9, +0x4c1, 0x5a9, 0x29c, 0x39d, 0x29c, 0x39d, 0x25a, 0x374, 0x25a, 0x374, 0x131, +0x262, 0x131, 0x262, 0xfe9a, 0xffe1, 0xfe9a, 0xffe1, 0xfe9a, 0xffe1, 0xfd5a, 0xfeb4, +0xfd5a, 0xfeb4, 0xfcff, 0xfe69, 0xfcff, 0xfe69, 0xfb79, 0xfcf1, 0xfb79, 0xfcf1, 0xfa6d, +0xfbef, 0xfa6d, 0xfbef, 0xf9dd, 0xfb65, 0xf9dd, 0xfb65, 0xf7db, 0xf965, 0xf7db, 0xf965, +0xf7db, 0xf965, 0xf812, 0xf999, 0xf812, 0xf999, 0xf753, 0xf8d1, 0xf753, 0xf8d1, 0xf640, +0xf7b1, 0xf640, 0xf7b1, 0xf5aa, 0xf707, 0xf5aa, 0xf707, 0xf4da, 0xf61d, 0xf4da, 0xf61d, +0xf2f9, 0xf41d, 0xf2f9, 0xf41d, 0xf2f9, 0xf41d, 0xf3d0, 0xf4cf, 0xf3d0, 0xf4cf, 0xf3ed, +0xf4c1, 0xf3ed, 0xf4c1, 0xf12d, 0xf1d3, 0xf12d, 0xf1d3, 0xf17e, 0xf1f0, 0xf17e, 0xf1f0, +0xf150, 0xf18c, 0xf150, 0xf18c, 0xf150, 0xf18c, 0xf277, 0xf27c, 0xf277, 0xf27c, 0xf251, +0xf21e, 0xf251, 0xf21e, 0xf3c8, 0xf35f, 0xf3c8, 0xf35f, 0xf38c, 0xf2ee, 0xf38c, 0xf2ee, +0xf601, 0xf533, 0xf601, 0xf533, 0xf7c4, 0xf6cb, 0xf7c4, 0xf6cb, 0xf7c4, 0xf6cb, 0xf836, +0xf719, 0xf836, 0xf719, 0xf949, 0xf80f, 0xf949, 0xf80f, 0xf936, 0xf7e9, 0xf936, 0xf7e9, +0xf956, 0xf7fe, 0xf956, 0xf7fe, 0xf8d8, 0xf780, 0xf8d8, 0xf780, 0xfb05, 0xf9b6, 0xfb05, +0xf9b6, 0xfb05, 0xf9b6, 0xfa86, 0xf949, 0xfa86, 0xf949, 0xfd3d, 0xfc1c, 0xfd3d, 0xfc1c, +0xfdf4, 0xfcf6, 0xfdf4, 0xfcf6, 0x25, 0xff50, 0x25, 0xff50, 0x14b, 0xa3, 0x14b, +0xa3, 0x14b, 0xa3, 0xe5, 0x6e, 0xe5, 0x6e, 0xae, 0x68, 0xae, 0x68, +0x108, 0xf2, 0x108, 0xf2, 0x244, 0x25a, 0x244, 0x25a, 0x25a, 0x299, 0x25a, +0x299, 0x369, 0x3c9, 0x369, 0x3c9, 0x369, 0x3c9, 0x2c2, 0x33b, 0x2c2, 0x33b, +0x3b7, 0x440, 0x3b7, 0x440, 0x399, 0x429, 0x399, 0x429, 0x3fc, 0x488, 0x3fc, +0x488, 0x354, 0x3d3, 0x354, 0x3d3, 0x4e2, 0x549, 0x4e2, 0x549, 0x4e2, 0x549, +0x40b, 0x453, 0x40b, 0x453, 0x532, 0x553, 0x532, 0x553, 0x792, 0x787, 0x792, +0x787, 0x7cb, 0x78f, 0x7cb, 0x78f, 0x987, 0x918, 0x987, 0x918, 0x987, 0x918, +0xacf, 0xa2e, 0xacf, 0xa2e, 0xc5b, 0xb8b, 0xc5b, 0xb8b, 0xe7d, 0xd81, 0xe7d, +0xd81, 0x110c, 0xfea, 0x110c, 0xfea, 0x101f, 0xedf, 0x101f, 0xedf, 0x11f1, 0x109c, +0x11f1, 0x109c, 0x11f1, 0x109c, 0x115c, 0xffb, 0x115c, 0xffb, 0x1062, 0xeff, 0x1062, +0xeff, 0x1173, 0x1019, 0x1173, 0x1019, 0x1165, 0x101f, 0x1165, 0x101f, 0x1145, 0x101b, +0x1145, 0x101b, 0x123f, 0x113a, 0x123f, 0x113a, 0x123f, 0x113a, 0x12ab, 0x11d2, 0x12ab, +0x11d2, 0x1185, 0x10df, 0x1185, 0x10df, 0x1270, 0x11ff, 0x1270, 0x11ff, 0x10ec, 0x10b5, +0x10ec, 0x10b5, 0xee3, 0xee5, 0xee3, 0xee5, 0xee3, 0xee5, 0xdc8, 0xe03, 0xdc8, +0xe03, 0xbe4, 0xc56, 0xbe4, 0xc56, 0xad0, 0xb77, 0xad0, 0xb77, 0xb0a, 0xbe1, +0xb0a, 0xbe1, 0xbad, 0xcae, 0xbad, 0xcae, 0xb4c, 0xc73, 0xb4c, 0xc73, 0xb4c, +0xc73, 0xc8c, 0xdd4, 0xc8c, 0xdd4, 0xc0d, 0xd70, 0xc0d, 0xd70, 0xa79, 0xbf1, +0xa79, 0xbf1, 0xba5, 0xd2f, 0xba5, 0xd2f, 0xb7a, 0xd11, 0xb7a, 0xd11, 0xabe, +0xc5f, 0xabe, 0xc5f, 0xabe, 0xc5f, 0x966, 0xb0f, 0x966, 0xb0f, 0x8ef, 0xa9f, +0x8ef, 0xa9f, 0x714, 0x8c9, 0x714, 0x8c9, 0x772, 0x92b, 0x772, 0x92b, 0x713, +0x8d1, 0x713, 0x8d1, 0x713, 0x8d1, 0x4bd, 0x67f, 0x4bd, 0x67f, 0x33f, 0x505, +0x33f, 0x505, 0x100, 0x2c9, 0x100, 0x2c9, 0x1d5, 0x3a0, 0x1d5, 0x3a0, 0x235, +0x400, 0x235, 0x400, 0x124, 0x2eb, 0x124, 0x2eb, 0x124, 0x2eb, 0x33, 0x1f2, +0x33, 0x1f2, 0x62, 0x216, 0x62, 0x216, 0xfa, 0x29b, 0xfa, 0x29b, 0x149, +0x2d0, 0x149, 0x2d0, 0xfdaf, 0xff14, 0xfdaf, 0xff14, 0xfcbb, 0xfdf6, 0xfcbb, 0xfdf6, +0xfcbb, 0xfdf6, 0xfc4f, 0xfd57, 0xfc4f, 0xfd57, 0xfc51, 0xfd1d, 0xfc51, 0xfd1d, 0xfc4a, +0xfcd0, 0xfc4a, 0xfcd0, 0xfc3e, 0xfc75, 0xfc3e, 0xfc75, 0xfda6, 0xfd88, 0xfda6, 0xfd88, +0xfda6, 0xfd88, 0xfcb3, 0xfc37, 0xfcb3, 0xfc37, 0xfdd7, 0xfcf7, 0xfdd7, 0xfcf7, 0xfe41, +0xfcf9, 0xfe41, 0xfcf9, 0xff73, 0xfdc1, 0xff73, 0xfdc1, 0xff69, 0xfd4a, 0xff69, 0xfd4a, +0x69, 0xfdde, 0x69, 0xfdde, 0x69, 0xfdde, 0xf7, 0xfe02, 0xf7, 0xfe02, 0x477, +0x11d, 0x477, 0x11d, 0x64d, 0x291, 0x64d, 0x291, 0x73a, 0x324, 0x73a, 0x324, +0x913, 0x4ab, 0x913, 0x4ab, 0x8c6, 0x414, 0x8c6, 0x414, 0x8c6, 0x414, 0xac1, +0x5cf, 0xac1, 0x5cf, 0xbd3, 0x6ab, 0xbd3, 0x6ab, 0xda9, 0x857, 0xda9, 0x857, +0xd80, 0x80c, 0xd80, 0x80c, 0x100c, 0xa82, 0x100c, 0xa82, 0x100c, 0xa82, 0x11d1, +0xc3a, 0x11d1, 0xc3a, 0x12fa, 0xd5f, 0x12fa, 0xd5f, 0x153d, 0xfa8, 0x153d, 0xfa8, +0x15bc, 0x1034, 0x15bc, 0x1034, 0x14f6, 0xf83, 0x14f6, 0xf83, 0x1639, 0x10e1, 0x1639, +0x10e1, 0x1639, 0x10e1, 0x1534, 0xffc, 0x1534, 0xffc, 0x1343, 0xe30, 0x1343, 0xe30, +0x154a, 0x105f, 0x154a, 0x105f, 0x15c1, 0x1102, 0x15c1, 0x1102, 0x1699, 0x1208, 0x1699, +0x1208, 0x1699, 0x1208, 0x1671, 0x120f, 0x1671, 0x120f, 0x1761, 0x1330, 0x1761, 0x1330, +0x173f, 0x133e, 0x173f, 0x133e, 0x173c, 0x136b, 0x173c, 0x136b, 0x1740, 0x139f, 0x1740, +0x139f, 0x1573, 0x1201, 0x1573, 0x1201, 0x1573, 0x1201, 0x14e9, 0x11a4, 0x14e9, 0x11a4, +0x152b, 0x1210, 0x152b, 0x1210, 0x13c6, 0x10d3, 0x13c6, 0x10d3, 0x13e5, 0x1118, 0x13e5, +0x1118, 0x143c, 0x1192, 0x143c, 0x1192, 0x12f4, 0x106a, 0x12f4, 0x106a, 0x12f4, 0x106a, +0x12dc, 0x106f, 0x12dc, 0x106f, 0x1251, 0xffe, 0x1251, 0xffe, 0x13b2, 0x1176, 0x13b2, +0x1176, 0x1361, 0x1139, 0x1361, 0x1139, 0x11f2, 0xfdd, 0x11f2, 0xfdd, 0x11f2, 0xfdd, +0x115e, 0xf58, 0x115e, 0xf58, 0xffc, 0xe06, 0xffc, 0xe06, 0x1249, 0x1062, 0x1249, +0x1062, 0x1360, 0x1188, 0x1360, 0x1188, 0x1231, 0x1069, 0x1231, 0x1069, 0x1242, 0x108c, +0x1242, 0x108c, 0x1242, 0x108c, 0x1109, 0xf69, 0x1109, 0xf69, 0x1274, 0x10ec, 0x1274, +0x10ec, 0x1236, 0x10ca, 0x1236, 0x10ca, 0x10af, 0xf64, 0x10af, 0xf64, 0xfb8, 0xe94, +0xfb8, 0xe94, 0xe15, 0xd1c, 0xe15, 0xd1c, 0xe15, 0xd1c, 0xd0d, 0xc45, 0xd0d, +0xc45, 0xc57, 0xbc5, 0xc57, 0xbc5, 0xa45, 0x9ed, 0xa45, 0x9ed, 0x8be, 0x8a4, +0x8be, 0x8a4, 0x737, 0x75e, 0x737, 0x75e, 0x737, 0x75e, 0x54a, 0x5b4, 0x54a, +0x5b4, 0x5d9, 0x686, 0x5d9, 0x686, 0x49e, 0x58d, 0x49e, 0x58d, 0x3d4, 0x504, +0x3d4, 0x504, 0x26d, 0x3da, 0x26d, 0x3da, 0x23b, 0x3e0, 0x23b, 0x3e0, 0x23b, +0x3e0, 0xa6, 0x27f, 0xa6, 0x27f, 0x87, 0x28c, 0x87, 0x28c, 0xffe9, 0x212, +0xffe9, 0x212, 0xfdb5, 0xfffb, 0xfdb5, 0xfffb, 0xfc04, 0xfe5f, 0xfc04, 0xfe5f, 0xf98f, +0xfbf6, 0xf98f, 0xfbf6, 0xf98f, 0xfbf6, 0xf7c3, 0xfa2e, 0xf7c3, 0xfa2e, 0xf750, 0xf9b7, +0xf750, 0xf9b7, 0xf76d, 0xf9ca, 0xf76d, 0xf9ca, 0xf47f, 0xf6cd, 0xf47f, 0xf6cd, 0xf676, +0xf8b1, 0xf676, 0xf8b1, 0xf676, 0xf8b1, 0xf602, 0xf825, 0xf602, 0xf825, 0xf523, 0xf72d, +0xf523, 0xf72d, 0xf5a9, 0xf79a, 0xf5a9, 0xf79a, 0xf5e0, 0xf7b7, 0xf5e0, 0xf7b7, 0xf472, +0xf631, 0xf472, 0xf631, 0xf3e0, 0xf589, 0xf3e0, 0xf589, 0xf3e0, 0xf589, 0xf451, 0xf5e8, +0xf451, 0xf5e8, 0xf3a2, 0xf52a, 0xf3a2, 0xf52a, 0xf4d9, 0xf655, 0xf4d9, 0xf655, 0xf3de, +0xf552, 0xf3de, 0xf552, 0xf2b4, 0xf424, 0xf2b4, 0xf424, 0xf209, 0xf377, 0xf209, 0xf377, +0xf209, 0xf377, 0xf240, 0xf3b0, 0xf240, 0xf3b0, 0xeedd, 0xf051, 0xeedd, 0xf051, 0xee14, +0xef8c, 0xee14, 0xef8c, 0xecd5, 0xee53, 0xecd5, 0xee53, 0xebf6, 0xed7a, 0xebf6, 0xed7a, +0xebf6, 0xed7a, 0xec62, 0xedea, 0xec62, 0xedea, 0xeb7e, 0xed0c, 0xeb7e, 0xed0c, 0xec3a, +0xedcb, 0xec3a, 0xedcb, 0xeb46, 0xecda, 0xeb46, 0xecda, 0xea68, 0xebfe, 0xea68, 0xebfe, +0xea63, 0xebfa, 0xea63, 0xebfa, 0xea63, 0xebfa, 0xea2e, 0xebc7, 0xea2e, 0xebc7, 0xea56, +0xebf2, 0xea56, 0xebf2, 0xeb89, 0xed29, 0xeb89, 0xed29, 0xeb45, 0xecec, 0xeb45, 0xecec, +0xebe8, 0xed9a, 0xebe8, 0xed9a, 0xecc7, 0xee88, 0xecc7, 0xee88, 0xecc7, 0xee88, 0xee34, +0xf007, 0xee34, 0xf007, 0xee59, 0xf044, 0xee59, 0xf044, 0xee2e, 0xf037, 0xee2e, 0xf037, +0xed0c, 0xef37, 0xed0c, 0xef37, 0xea82, 0xecd5, 0xea82, 0xecd5, 0xea82, 0xecd5, 0xeaab, +0xed2a, 0xeaab, 0xed2a, 0xeb75, 0xee23, 0xeb75, 0xee23, 0xea2c, 0xed0a, 0xea2c, 0xed0a, +0xe8b7, 0xebc6, 0xe8b7, 0xebc6, 0xe7dc, 0xeb1b, 0xe7dc, 0xeb1b, 0xe7fc, 0xeb69, 0xe7fc, +0xeb69, 0xe7fc, 0xeb69, 0xe8f8, 0xec8e, 0xe8f8, 0xec8e, 0xe8f0, 0xeca9, 0xe8f0, 0xeca9, +0xe7f9, 0xebce, 0xe7f9, 0xebce, 0xe718, 0xeb00, 0xe718, 0xeb00, 0xe6b8, 0xeaa9, 0xe6b8, +0xeaa9, 0xe569, 0xe958, 0xe569, 0xe958, 0xe569, 0xe958, 0xe4a8, 0xe889, 0xe4a8, 0xe889, +0xe3e2, 0xe7ab, 0xe3e2, 0xe7ab, 0xe3d7, 0xe77e, 0xe3d7, 0xe77e, 0xe37a, 0xe6f3, 0xe37a, +0xe6f3, 0xe479, 0xe7bc, 0xe479, 0xe7bc, 0xe479, 0xe7bc, 0xe505, 0xe80a, 0xe505, 0xe80a, +0xe734, 0xe9f6, 0xe734, 0xe9f6, 0xe7b8, 0xea33, 0xe7b8, 0xea33, 0xe7a5, 0xe9d6, 0xe7a5, +0xe9d6, 0xe9f6, 0xebdf, 0xe9f6, 0xebdf, 0xeb55, 0xecf6, 0xeb55, 0xecf6, 0xeb55, 0xecf6, +0xedfb, 0xef58, 0xedfb, 0xef58, 0xf0f1, 0xf210, 0xf0f1, 0xf210, 0xf369, 0xf44f, 0xf369, +0xf44f, 0xf435, 0xf4ea, 0xf435, 0xf4ea, 0xf79e, 0xf829, 0xf79e, 0xf829, 0xf908, 0xf972, +0xf908, 0xf972, 0xf908, 0xf972, 0xfa5a, 0xfaab, 0xfa5a, 0xfaab, 0xfc13, 0xfc51, 0xfc13, +0xfc51, 0xfe1d, 0xfe50, 0xfe1d, 0xfe50, 0xfe57, 0xfe84, 0xfe57, 0xfe84, 0xce, 0xf9, +0xce, 0xf9, 0xce, 0xf9, 0x28a, 0x2b7, 0x28a, 0x2b7, 0x287, 0x2b7, 0x287, +0x2b7, 0x470, 0x4a3, 0x470, 0x4a3, 0x2c8, 0x2ff, 0x2c8, 0x2ff, 0x3e9, 0x422, +0x3e9, 0x422, 0x38a, 0x3c1, 0x38a, 0x3c1, 0x38a, 0x3c1, 0x49a, 0x4cd, 0x49a, +0x4cd, 0x5ab, 0x5d7, 0x5ab, 0x5d7, 0x56a, 0x58c, 0x56a, 0x58c, 0x4fc, 0x512, +0x4fc, 0x512, 0x541, 0x548, 0x541, 0x548, 0x542, 0x539, 0x542, 0x539, 0x542, +0x539, 0x570, 0x556, 0x570, 0x556, 0x4d5, 0x4ac, 0x4d5, 0x4ac, 0x2e0, 0x2ab, +0x2e0, 0x2ab, 0x186, 0x146, 0x186, 0x146, 0xc3, 0x7b, 0xc3, 0x7b, 0xc3, +0x7b, 0xe1, 0x97, 0xe1, 0x97, 0xfe9b, 0xfe53, 0xfe9b, 0xfe53, 0xffb9, 0xff77, +0xffb9, 0xff77, 0xffa6, 0xff70, 0xffa6, 0xff70, 0xfdbb, 0xfd94, 0xfdbb, 0xfd94, 0xfd55, +0xfd42, 0xfd55, 0xfd42, 0xfd55, 0xfd42, 0xfc94, 0xfc95, 0xfc94, 0xfc95, 0xfa6c, 0xfa84, +0xfa6c, 0xfa84, 0xf869, 0xf898, 0xf869, 0xf898, 0xf71d, 0xf760, 0xf71d, 0xf760, 0xf774, +0xf7c9, 0xf774, 0xf7c9, 0xf774, 0xf7c9, 0xf7c5, 0xf827, 0xf7c5, 0xf827, 0xf72d, 0xf797, +0xf72d, 0xf797, 0xf5d0, 0xf63b, 0xf5d0, 0xf63b, 0xf452, 0xf4b6, 0xf452, 0xf4b6, 0xf417, +0xf46d, 0xf417, 0xf46d, 0xf3dc, 0xf41d, 0xf3dc, 0xf41d, 0xf3dc, 0xf41d, 0xf318, 0xf33b, +0xf318, 0xf33b, 0xf1da, 0xf1d9, 0xf1da, 0xf1d9, 0xf2f9, 0xf2cd, 0xf2f9, 0xf2cd, 0xf459, +0xf3fe, 0xf459, 0xf3fe, 0xf663, 0xf5d6, 0xf663, 0xf5d6, 0xf86f, 0xf7ae, 0xf86f, 0xf7ae, +0xf86f, 0xf7ae, 0xf998, 0xf8a4, 0xf998, 0xf8a4, 0xf930, 0xf80a, 0xf930, 0xf80a, 0xf9d3, +0xf87f, 0xf9d3, 0xf87f, 0xf95d, 0xf7e0, 0xf95d, 0xf7e0, 0xf7b8, 0xf618, 0xf7b8, 0xf618, +0xf7b8, 0xf618, 0xf7f5, 0xf639, 0xf7f5, 0xf639, 0xfa0d, 0xf83d, 0xfa0d, 0xf83d, 0xfb51, +0xf975, 0xfb51, 0xf975, 0xfbbc, 0xf9dd, 0xfbbc, 0xf9dd, 0xfd57, 0xfb7b, 0xfd57, 0xfb7b, +0xfe79, 0xfca9, 0xfe79, 0xfca9, 0xfe79, 0xfca9, 0xffc0, 0xfe00, 0xffc0, 0xfe00, 0xa5, +0xfefa, 0xa5, 0xfefa, 0x2c, 0xfe98, 0x2c, 0xfe98, 0xff4a, 0xfdcf, 0xff4a, 0xfdcf, +0x1d7, 0x75, 0x1d7, 0x75, 0x1bd, 0x72, 0x1bd, 0x72, 0x1bd, 0x72, 0x292, +0x159, 0x292, 0x159, 0x2be, 0x193, 0x2be, 0x193, 0x200, 0xdd, 0x200, 0xdd, +0x275, 0x153, 0x275, 0x153, 0x25f, 0x137, 0x25f, 0x137, 0x25f, 0x137, 0x362, +0x22e, 0x362, 0x22e, 0x446, 0x2ff, 0x446, 0x2ff, 0x546, 0x3e5, 0x546, 0x3e5, +0x5d7, 0x457, 0x5d7, 0x457, 0x791, 0x5ef, 0x791, 0x5ef, 0x8df, 0x718, 0x8df, +0x718, 0x8df, 0x718, 0xc16, 0xa28, 0xc16, 0xa28, 0xde7, 0xbd3, 0xde7, 0xbd3, +0xf9a, 0xd61, 0xf9a, 0xd61, 0x1065, 0xe0b, 0x1065, 0xe0b, 0x1244, 0xfce, 0x1244, +0xfce, 0x1347, 0x10b9, 0x1347, 0x10b9, 0x1347, 0x10b9, 0x12c5, 0x1027, 0x12c5, 0x1027, +0x13e8, 0x1141, 0x13e8, 0x1141, 0x12e5, 0x103d, 0x12e5, 0x103d, 0x12fd, 0x105b, 0x12fd, +0x105b, 0x13dd, 0x114a, 0x13dd, 0x114a, 0x13dd, 0x114a, 0x13da, 0x115b, 0x13da, 0x115b, +0x12c5, 0x1063, 0x12c5, 0x1063, 0x129a, 0x1059, 0x129a, 0x1059, 0x1164, 0xf4a, 0x1164, +0xf4a, 0x108b, 0xe9c, 0x108b, 0xe9c, 0xfd5, 0xe15, 0xfd5, 0xe15, 0xfd5, 0xe15, +0xec6, 0xd36, 0xec6, 0xd36, 0xda5, 0xc48, 0xda5, 0xc48, 0xc86, 0xb5c, 0xc86, +0xb5c, 0xb89, 0xa91, 0xb89, 0xa91, 0xba9, 0xae4, 0xba9, 0xae4, 0xaec, 0xa59, +0xaec, 0xa59, 0xaec, 0xa59, 0x96e, 0x90b, 0x96e, 0x90b, 0x9f2, 0x9be, 0x9f2, +0x9be, 0x92f, 0x929, 0x92f, 0x929, 0x93c, 0x961, 0x93c, 0x961, 0xa6c, 0xabd, +0xa6c, 0xabd, 0xa6c, 0xabd, 0x910, 0x98a, 0x910, 0x98a, 0x70d, 0x7ae, 0x70d, +0x7ae, 0x7b1, 0x879, 0x7b1, 0x879, 0x635, 0x722, 0x635, 0x722, 0x456, 0x565, +0x456, 0x565, 0x385, 0x4b6, 0x385, 0x4b6, 0x385, 0x4b6, 0x183, 0x2d1, 0x183, +0x2d1, 0xffbf, 0x128, 0xffbf, 0x128, 0xfeca, 0x4c, 0xfeca, 0x4c, 0xfd9e, 0xff33, +0xfd9e, 0xff33, 0xfce1, 0xfe85, 0xfce1, 0xfe85, 0xfcc6, 0xfe73, 0xfcc6, 0xfe73, 0xfcc6, +0xfe73, 0xfe40, 0xfff0, 0xfe40, 0xfff0, 0xfd89, 0xff35, 0xfd89, 0xff35, 0xfce2, 0xfe83, +0xfce2, 0xfe83, 0xfd4d, 0xfedc, 0xfd4d, 0xfedc, 0xfae2, 0xfc57, 0xfae2, 0xfc57, 0xfae2, +0xfc57, 0xfaad, 0xfc01, 0xfaad, 0xfc01, 0xf98a, 0xfab5, 0xf98a, 0xfab5, 0xf9fd, 0xfaf7, +0xf9fd, 0xfaf7, 0xfa18, 0xfadb, 0xfa18, 0xfadb, 0xf9b6, 0xfa3c, 0xf9b6, 0xfa3c, 0xfbac, +0xfbf0, 0xfbac, 0xfbf0, 0xfbac, 0xfbf0, 0xfd27, 0xfd24, 0xfd27, 0xfd24, 0xfdbb, 0xfd6d, +0xfdbb, 0xfd6d, 0xff0c, 0xfe71, 0xff0c, 0xfe71, 0xfed3, 0xfdea, 0xfed3, 0xfdea, 0xff7f, +0xfe46, 0xff7f, 0xfe46, 0x226, 0x9e, 0x226, 0x9e, 0x226, 0x9e, 0x2e1, 0x10b, +0x2e1, 0x10b, 0x547, 0x326, 0x547, 0x326, 0x742, 0x4d8, 0x742, 0x4d8, 0x9f8, +0x749, 0x9f8, 0x749, 0xb58, 0x868, 0xb58, 0x868, 0xb58, 0x868, 0xd34, 0xa06, +0xd34, 0xa06, 0xf8a, 0xc23, 0xf8a, 0xc23, 0xf9d, 0xc02, 0xf9d, 0xc02, 0x1015, +0xc4b, 0x1015, 0xc4b, 0x121a, 0xe26, 0x121a, 0xe26, 0x1355, 0xf3c, 0x1355, 0xf3c, +0x1355, 0xf3c, 0x14e4, 0x10ab, 0x14e4, 0x10ab, 0x15c5, 0x1171, 0x15c5, 0x1171, 0x1640, +0x11d5, 0x1640, 0x11d5, 0x1866, 0x13ea, 0x1866, 0x13ea, 0x18b9, 0x1432, 0x18b9, 0x1432, +0x1998, 0x150a, 0x1998, 0x150a, 0x1998, 0x150a, 0x1913, 0x1484, 0x1913, 0x1484, 0x1868, +0x13de, 0x1868, 0x13de, 0x1803, 0x1383, 0x1803, 0x1383, 0x18c5, 0x1454, 0x18c5, 0x1454, +0x18dd, 0x1481, 0x18dd, 0x1481, 0x18dd, 0x1481, 0x18b2, 0x1471, 0x18b2, 0x1471, 0x195d, +0x153c, 0x195d, 0x153c, 0x18ac, 0x14b0, 0x18ac, 0x14b0, 0x185d, 0x148a, 0x185d, 0x148a, +0x1926, 0x1580, 0x1926, 0x1580, 0x1871, 0x14fa, 0x1871, 0x14fa, 0x1871, 0x14fa, 0x16d0, +0x138b, 0x16d0, 0x138b, 0x16eb, 0x13da, 0x16eb, 0x13da, 0x1477, 0x119a, 0x1477, 0x119a, +0x1357, 0x10ae, 0x1357, 0x10ae, 0x1407, 0x1191, 0x1407, 0x1191, 0x12ed, 0x10a7, 0x12ed, +0x10a7, 0x12ed, 0x10a7, 0x127d, 0x1064, 0x127d, 0x1064, 0x12b8, 0x10cb, 0x12b8, 0x10cb, +0x1206, 0x103f, 0x1206, 0x103f, 0x10cc, 0xf28, 0x10cc, 0xf28, 0xf42, 0xdbe, 0xf42, +0xdbe, 0xf42, 0xdbe, 0xf46, 0xddd, 0xf46, 0xddd, 0xe6b, 0xd1b, 0xe6b, 0xd1b, +0xebe, 0xd85, 0xebe, 0xd85, 0xec4, 0xda1, 0xec4, 0xda1, 0xdb1, 0xca2, 0xdb1, +0xca2, 0xed8, 0xdde, 0xed8, 0xdde, 0xed8, 0xdde, 0xe30, 0xd4e, 0xe30, 0xd4e, +0xe68, 0xd9f, 0xe68, 0xd9f, 0xe51, 0xda5, 0xe51, 0xda5, 0xd8d, 0xd04, 0xd8d, +0xd04, 0xde5, 0xd83, 0xde5, 0xd83, 0xde5, 0xd83, 0xd4c, 0xd17, 0xd4c, 0xd17, +0xbfc, 0xbfa, 0xbfc, 0xbfa, 0xbea, 0xc20, 0xbea, 0xc20, 0x9f0, 0xa63, 0x9f0, +0xa63, 0x943, 0x9f8, 0x943, 0x9f8, 0x9a3, 0xa9e, 0x9a3, 0xa9e, 0x9a3, 0xa9e, +0x7da, 0x91c, 0x7da, 0x91c, 0x70e, 0x899, 0x70e, 0x899, 0x768, 0x93a, 0x768, +0x93a, 0x65b, 0x873, 0x65b, 0x873, 0x4cf, 0x728, 0x4cf, 0x728, 0x48c, 0x721, +0x48c, 0x721, 0x48c, 0x721, 0x3dc, 0x6a5, 0x3dc, 0x6a5, 0x35b, 0x650, 0x35b, +0x650, 0x1e5, 0x4fe, 0x1e5, 0x4fe, 0x38, 0x36a, 0x38, 0x36a, 0xfd32, 0x73, +0xfd32, 0x73, 0xfd32, 0x73, 0xfbd0, 0xff16, 0xfbd0, 0xff16, 0xf95b, 0xfc9d, 0xf95b, +0xfc9d, 0xf757, 0xfa8b, 0xf757, 0xfa8b, 0xf76e, 0xfa8d, 0xf76e, 0xfa8d, 0xf75b, 0xfa5e, +0xf75b, 0xfa5e, 0xf84f, 0xfb31, 0xf84f, 0xfb31, 0xf84f, 0xfb31, 0xf8ab, 0xfb68, 0xf8ab, +0xfb68, 0xf79f, 0xfa35, 0xf79f, 0xfa35, 0xf61e, 0xf88d, 0xf61e, 0xf88d, 0xf619, 0xf861, +0xf619, 0xf861, 0xf47f, 0xf6a4, 0xf47f, 0xf6a4, 0xf48e, 0xf694, 0xf48e, 0xf694, 0xf48e, +0xf694, 0xf3de, 0xf5c9, 0xf3de, 0xf5c9, 0xf2bd, 0xf493, 0xf2bd, 0xf493, 0xf304, 0xf4cb, +0xf304, 0xf4cb, 0xf394, 0xf551, 0xf394, 0xf551, 0xf23d, 0xf3f7, 0xf23d, 0xf3f7, 0xf23d, +0xf3f7, 0xf088, 0xf243, 0xf088, 0xf243, 0xf040, 0xf201, 0xf040, 0xf201, 0xed93, 0xef5c, +0xed93, 0xef5c, 0xebe6, 0xedbb, 0xebe6, 0xedbb, 0xec18, 0xedfa, 0xec18, 0xedfa, 0xeb9b, +0xed8a, 0xeb9b, 0xed8a, 0xeb9b, 0xed8a, 0xeb93, 0xed8e, 0xeb93, 0xed8e, 0xeb30, 0xed37, +0xeb30, 0xed37, 0xea09, 0xec18, 0xea09, 0xec18, 0xe9c8, 0xebdd, 0xe9c8, 0xebdd, 0xe94f, +0xeb68, 0xe94f, 0xeb68, 0xe921, 0xeb3b, 0xe921, 0xeb3b, 0xe921, 0xeb3b, 0xe7c9, 0xe9e1, +0xe7c9, 0xe9e1, 0xe891, 0xeaa7, 0xe891, 0xeaa7, 0xe8b3, 0xeac5, 0xe8b3, 0xeac5, 0xe96c, +0xeb7b, 0xe96c, 0xeb7b, 0xea79, 0xec85, 0xea79, 0xec85, 0xea79, 0xec85, 0xeb32, 0xed3e, +0xeb32, 0xed3e, 0xed2c, 0xef3b, 0xed2c, 0xef3b, 0xec94, 0xeeab, 0xec94, 0xeeab, 0xecb3, +0xeed6, 0xecb3, 0xeed6, 0xecbf, 0xeef4, 0xecbf, 0xeef4, 0xecdc, 0xef28, 0xecdc, 0xef28, +0xecdc, 0xef28, 0xecc4, 0xef2c, 0xecc4, 0xef2c, 0xecef, 0xef79, 0xecef, 0xef79, 0xec4f, +0xef00, 0xec4f, 0xef00, 0xec7f, 0xef5b, 0xec7f, 0xef5b, 0xed85, 0xf08d, 0xed85, 0xf08d, +0xed34, 0xf069, 0xed34, 0xf069, 0xed34, 0xf069, 0xece2, 0xf044, 0xece2, 0xf044, 0xed5a, +0xf0e5, 0xed5a, 0xf0e5, 0xec8f, 0xf040, 0xec8f, 0xf040, 0xebae, 0xef80, 0xebae, 0xef80, +0xeb50, 0xef3a, 0xeb50, 0xef3a, 0xeb50, 0xef3a, 0xea08, 0xee03, 0xea08, 0xee03, 0xe8ca, +0xeccc, 0xe8ca, 0xeccc, 0xe8ae, 0xecad, 0xe8ae, 0xecad, 0xe804, 0xebf6, 0xe804, 0xebf6, +0xe6f1, 0xeacc, 0xe6f1, 0xeacc, 0xe754, 0xeb0e, 0xe754, 0xeb0e, 0xe754, 0xeb0e, 0xe5bc, +0xe94c, 0xe5bc, 0xe94c, 0xe676, 0xe9d4, 0xe676, 0xe9d4, 0xe788, 0xeaac, 0xe788, 0xeaac, +0xe806, 0xeaed, 0xe806, 0xeaed, 0xe98b, 0xec31, 0xe98b, 0xec31, 0xebfa, 0xee5e, 0xebfa, +0xee5e, 0xebfa, 0xee5e, 0xed43, 0xef65, 0xed43, 0xef65, 0xee87, 0xf069, 0xee87, 0xf069, +0xf077, 0xf21d, 0xf077, 0xf21d, 0xf123, 0xf291, 0xf123, 0xf291, 0xf2e4, 0xf422, 0xf2e4, +0xf422, 0xf2e4, 0xf422, 0xf485, 0xf598, 0xf485, 0xf598, 0xf569, 0xf659, 0xf569, 0xf659, +0xf727, 0xf7fa, 0xf727, 0xf7fa, 0xfa1c, 0xfadb, 0xfa1c, 0xfadb, 0xfabb, 0xfb6b, 0xfabb, +0xfb6b, 0xfbc3, 0xfc6b, 0xfbc3, 0xfc6b, 0xfbc3, 0xfc6b, 0xfbee, 0xfc92, 0xfbee, 0xfc92, +0xfbc8, 0xfc6b, 0xfbc8, 0xfc6b, 0xfbc6, 0xfc6c, 0xfbc6, 0xfc6c, 0xfc2d, 0xfcd7, 0xfc2d, +0xfcd7, 0xfc39, 0xfce8, 0xfc39, 0xfce8, 0xfc68, 0xfd1b, 0xfc68, 0xfd1b, 0xfc68, 0xfd1b, +0xfd53, 0xfe07, 0xfd53, 0xfe07, 0xfd34, 0xfde8, 0xfd34, 0xfde8, 0xfcca, 0xfd7b, 0xfcca, +0xfd7b, 0xfd6e, 0xfe1a, 0xfd6e, 0xfe1a, 0xfe37, 0xfedb, 0xfe37, 0xfedb, 0xfe37, 0xfedb, +0xfde1, 0xfe79, 0xfde1, 0xfe79, 0xfe30, 0xfebb, 0xfe30, 0xfebb, 0xfc21, 0xfc9e, 0xfc21, +0xfc9e, 0xfc06, 0xfc74, 0xfc06, 0xfc74, 0xfa8c, 0xfaea, 0xfa8c, 0xfaea, 0xf93b, 0xf989, +0xf93b, 0xf989, 0xf93b, 0xf989, 0xf9c0, 0xfa00, 0xf9c0, 0xfa00, 0xf92b, 0xf95e, 0xf92b, +0xf95e, 0xf987, 0xf9b0, 0xf987, 0xf9b0, 0xfadb, 0xfafa, 0xfadb, 0xfafa, 0xfb73, 0xfb8c, +0xfb73, 0xfb8c, 0xfb54, 0xfb69, 0xfb54, 0xfb69, 0xfb54, 0xfb69, 0xfad1, 0xfae2, 0xfad1, +0xfae2, 0xf9ab, 0xf9bb, 0xf9ab, 0xf9bb, 0xf9f5, 0xfa02, 0xf9f5, 0xfa02, 0xfa54, 0xfa5f, +0xfa54, 0xfa5f, 0xfa66, 0xfa6c, 0xfa66, 0xfa6c, 0xfa66, 0xfa6c, 0xf960, 0xf961, 0xf960, +0xf961, 0xf9d2, 0xf9c8, 0xf9d2, 0xf9c8, 0xf907, 0xf8f0, 0xf907, 0xf8f0, 0xf803, 0xf7da, +0xf803, 0xf7da, 0xf81b, 0xf7db, 0xf81b, 0xf7db, 0xf826, 0xf7c9, 0xf826, 0xf7c9, 0xf826, +0xf7c9, 0xf6e3, 0xf665, 0xf6e3, 0xf665, 0xf71f, 0xf67b, 0xf71f, 0xf67b, 0xf7ed, 0xf720, +0xf7ed, 0xf720, 0xf907, 0xf80d, 0xf907, 0xf80d, 0xfb52, 0xfa29, 0xfb52, 0xfa29, 0xfafe, +0xf9a4, 0xfafe, 0xf9a4, 0xfafe, 0xf9a4, 0xfc3d, 0xfab4, 0xfc3d, 0xfab4, 0xfda7, 0xfbf1, +0xfda7, 0xfbf1, 0xfd79, 0xfb97, 0xfd79, 0xfb97, 0xfd56, 0xfb4f, 0xfd56, 0xfb4f, 0xfe6a, +0xfc41, 0xfe6a, 0xfc41, 0xfe6a, 0xfc41, 0xfda4, 0xfb61, 0xfda4, 0xfb61, 0xfe40, 0xfbe9, +0xfe40, 0xfbe9, 0xff41, 0xfcde, 0xff41, 0xfcde, 0xff53, 0xfceb, 0xff53, 0xfceb, 0x11d, +0xfeb6, 0x11d, 0xfeb6, 0x260, 0x2, 0x260, 0x2, 0x260, 0x2, 0x1aa, 0xff59, +0x1aa, 0xff59, 0x23f, 0x1, 0x23f, 0x1, 0x37c, 0x154, 0x37c, 0x154, 0x346, +0x135, 0x346, 0x135, 0x3a0, 0x1a7, 0x3a0, 0x1a7, 0x3a0, 0x1a7, 0x3d0, 0x1ed, +0x3d0, 0x1ed, 0x339, 0x16a, 0x339, 0x16a, 0x2e6, 0x127, 0x2e6, 0x127, 0x3b2, +0x1ff, 0x3b2, 0x1ff, 0x2ac, 0x100, 0x2ac, 0x100, 0x2c9, 0x11d, 0x2c9, 0x11d, +0x2c9, 0x11d, 0x372, 0x1c0, 0x372, 0x1c0, 0x4a5, 0x2e7, 0x4a5, 0x2e7, 0x4b4, +0x2e4, 0x4b4, 0x2e4, 0x53d, 0x357, 0x53d, 0x357, 0x570, 0x36f, 0x570, 0x36f, +0x73b, 0x51d, 0x73b, 0x51d, 0x73b, 0x51d, 0x97f, 0x742, 0x97f, 0x742, 0x963, +0x707, 0x963, 0x707, 0xb90, 0x917, 0xb90, 0x917, 0xca1, 0xa0d, 0xca1, 0xa0d, +0xebb, 0xc13, 0xebb, 0xc13, 0xebb, 0xc13, 0x1019, 0xd60, 0x1019, 0xd60, 0xf59, +0xc97, 0xf59, 0xc97, 0xf43, 0xc7f, 0xf43, 0xc7f, 0x11c0, 0xf01, 0x11c0, 0xf01, +0x12ba, 0x100a, 0x12ba, 0x100a, 0x1329, 0x108e, 0x1329, 0x108e, 0x1329, 0x108e, 0x1374, +0x10f7, 0x1374, 0x10f7, 0x1392, 0x113a, 0x1392, 0x113a, 0x13d7, 0x11aa, 0x13d7, 0x11aa, +0x14c5, 0x12c9, 0x14c5, 0x12c9, 0x1419, 0x1252, 0x1419, 0x1252, 0x1233, 0x10a4, 0x1233, +0x10a4, 0x1233, 0x10a4, 0x1239, 0x10e4, 0x1239, 0x10e4, 0x10d5, 0xfbc, 0x10d5, 0xfbc, +0xfb2, 0xed4, 0xfb2, 0xed4, 0xf70, 0xecd, 0xf70, 0xecd, 0x1001, 0xf95, 0x1001, +0xf95, 0x1001, 0xf95, 0xe91, 0xe5c, 0xe91, 0xe5c, 0xe2d, 0xe2a, 0xe2d, 0xe2a, +0xced, 0xd1a, 0xced, 0xd1a, 0xd0c, 0xd65, 0xd0c, 0xd65, 0xd31, 0xdb2, 0xd31, +0xdb2, 0xb25, 0xbcc, 0xb25, 0xbcc, 0xb25, 0xbcc, 0x9ad, 0xa76, 0x9ad, 0xa76, +0x96b, 0xa55, 0x96b, 0xa55, 0xa40, 0xb47, 0xa40, 0xb47, 0xa39, 0xb5b, 0xa39, +0xb5b, 0x967, 0xaa1, 0x967, 0xaa1, 0x603, 0x754, 0x603, 0x754, 0x603, 0x754, +0x472, 0x5d8, 0x472, 0x5d8, 0x338, 0x4b1, 0x338, 0x4b1, 0xfff8, 0x182, 0xfff8, +0x182, 0xfe52, 0xffeb, 0xfe52, 0xffeb, 0xfda6, 0xff4a, 0xfda6, 0xff4a, 0xfda6, 0xff4a, +0xfbc5, 0xfd71, 0xfbc5, 0xfd71, 0xfd59, 0xff0a, 0xfd59, 0xff0a, 0xfd70, 0xff21, 0xfd70, +0xff21, 0xfbb1, 0xfd5e, 0xfbb1, 0xfd5e, 0xfaff, 0xfca2, 0xfaff, 0xfca2, 0xfa4c, 0xfbe0, +0xfa4c, 0xfbe0, 0xfa4c, 0xfbe0, 0xf88f, 0xfa0e, 0xf88f, 0xfa0e, 0xf737, 0xf89a, 0xf737, +0xf89a, 0xf775, 0xf8b8, 0xf775, 0xf8b8, 0xf6a6, 0xf7c1, 0xf6a6, 0xf7c1, 0xf6fd, 0xf7eb, +0xf6fd, 0xf7eb, 0xf7da, 0xf895, 0xf7da, 0xf895, 0xf7da, 0xf895, 0xf834, 0xf8b7, 0xf834, +0xf8b7, 0xf91c, 0xf964, 0xf91c, 0xf964, 0xfb04, 0xfb0c, 0xfb04, 0xfb0c, 0xfa0e, 0xf9d4, +0xfa0e, 0xf9d4, 0xfb4b, 0xfacd, 0xfb4b, 0xfacd, 0xfb4b, 0xfacd, 0xfc89, 0xfbc6, 0xfc89, +0xfbc6, 0xfdc3, 0xfcbb, 0xfdc3, 0xfcbb, 0xfff0, 0xfea2, 0xfff0, 0xfea2, 0x111, 0xff80, +0x111, 0xff80, 0x462, 0x28f, 0x462, 0x28f, 0x854, 0x642, 0x854, 0x642, 0x854, +0x642, 0x943, 0x6f4, 0x943, 0x6f4, 0xa9b, 0x812, 0xa9b, 0x812, 0xd53, 0xa95, +0xd53, 0xa95, 0xf2a, 0xc3a, 0xf2a, 0xc3a, 0x119b, 0xe7d, 0x119b, 0xe7d, 0x1235, +0xeed, 0x1235, 0xeed, 0x1235, 0xeed, 0x13ba, 0x104c, 0x13ba, 0x104c, 0x1597, 0x1209, +0x1597, 0x1209, 0x1946, 0x159b, 0x1946, 0x159b, 0x19f8, 0x1634, 0x19f8, 0x1634, 0x1a06, +0x162e, 0x1a06, 0x162e, 0x1a06, 0x162e, 0x1b7d, 0x1796, 0x1b7d, 0x1796, 0x1b57, 0x1766, +0x1b57, 0x1766, 0x1b14, 0x171d, 0x1b14, 0x171d, 0x1c9a, 0x18a2, 0x1c9a, 0x18a2, 0x1d1f, +0x192c, 0x1d1f, 0x192c, 0x1c6d, 0x1883, 0x1c6d, 0x1883, 0x1c6d, 0x1883, 0x1cc6, 0x18eb, +0x1cc6, 0x18eb, 0x1bb6, 0x17ef, 0x1bb6, 0x17ef, 0x1c74, 0x18c5, 0x1c74, 0x18c5, 0x1bf5, +0x1863, 0x1bf5, 0x1863, 0x1b7d, 0x180c, 0x1b7d, 0x180c, 0x1a66, 0x171a, 0x1a66, 0x171a, +0x1a66, 0x171a, 0x1a0e, 0x16ea, 0x1a0e, 0x16ea, 0x1937, 0x163d, 0x1937, 0x163d, 0x19c3, +0x16f5, 0x19c3, 0x16f5, 0x1983, 0x16e2, 0x1983, 0x16e2, 0x16dd, 0x1468, 0x16dd, 0x1468, +0x16dd, 0x1468, 0x1621, 0x13d8, 0x1621, 0x13d8, 0x1525, 0x1306, 0x1525, 0x1306, 0x1414, +0x121c, 0x1414, 0x121c, 0x1366, 0x1192, 0x1366, 0x1192, 0x10c7, 0xf15, 0x10c7, 0xf15, +0xdec, 0xc58, 0xdec, 0xc58, 0xdec, 0xc58, 0xf5a, 0xde0, 0xf5a, 0xde0, 0xf80, +0xe1c, 0xf80, 0xe1c, 0xe74, 0xd25, 0xe74, 0xd25, 0xdf7, 0xcb9, 0xdf7, 0xcb9, +0xe22, 0xcf4, 0xe22, 0xcf4, 0xcb7, 0xb9a, 0xcb7, 0xb9a, 0xcb7, 0xb9a, 0xc7d, +0xb70, 0xc7d, 0xb70, 0xc04, 0xb09, 0xc04, 0xb09, 0xa43, 0x95d, 0xa43, 0x95d, +0x978, 0x8aa, 0x978, 0x8aa, 0x901, 0x851, 0x901, 0x851, 0x901, 0x851, 0x797, +0x70b, 0x797, 0x70b, 0x72d, 0x6ca, 0x72d, 0x6ca, 0x7e4, 0x7b2, 0x7e4, 0x7b2, +0x64c, 0x650, 0x64c, 0x650, 0x553, 0x593, 0x553, 0x593, 0x3ef, 0x472, 0x3ef, +0x472, 0x3ef, 0x472, 0x33c, 0x406, 0x33c, 0x406, 0x2b5, 0x3c9, 0x2b5, 0x3c9, +0x10b, 0x26c, 0x10b, 0x26c, 0x9, 0x1b7, 0x9, 0x1b7, 0x94, 0x28e, 0x94, +0x28e, 0xff2b, 0x16e, 0xff2b, 0x16e, 0xff2b, 0x16e, 0xffcb, 0x253, 0xffcb, 0x253, +0xff83, 0x248, 0xff83, 0x248, 0xfe90, 0x18b, 0xfe90, 0x18b, 0xfda3, 0xca, 0xfda3, +0xca, 0xfb02, 0xfe4b, 0xfb02, 0xfe4b, 0xfb02, 0xfe4b, 0xf86f, 0xfbce, 0xf86f, 0xfbce, +0xf738, 0xfaa3, 0xf738, 0xfaa3, 0xf850, 0xfbba, 0xf850, 0xfbba, 0xf70b, 0xfa69, 0xf70b, +0xfa69, 0xf7b4, 0xfafd, 0xf7b4, 0xfafd, 0xf8b4, 0xfbde, 0xf8b4, 0xfbde, 0xf8b4, 0xfbde, +0xf888, 0xfb8a, 0xf888, 0xfb8a, 0xf841, 0xfb15, 0xf841, 0xfb15, 0xf8c5, 0xfb68, 0xf8c5, +0xfb68, 0xf73b, 0xf9a8, 0xf73b, 0xf9a8, 0xf694, 0xf8cc, 0xf694, 0xf8cc, 0xf694, 0xf8cc, +0xf64e, 0xf852, 0xf64e, 0xf852, 0xf67e, 0xf84f, 0xf67e, 0xf84f, 0xf692, 0xf836, 0xf692, +0xf836, 0xf57d, 0xf6f8, 0xf57d, 0xf6f8, 0xf46f, 0xf5c8, 0xf46f, 0xf5c8, 0xf376, 0xf4b5, +0xf376, 0xf4b5, 0xf376, 0xf4b5, 0xf39c, 0xf4c7, 0xf39c, 0xf4c7, 0xf22d, 0xf34c, 0xf22d, +0xf34c, 0xf234, 0xf34e, 0xf234, 0xf34e, 0xf0c2, 0xf1de, 0xf0c2, 0xf1de, 0xefc6, 0xf0e9, +0xefc6, 0xf0e9, 0xef85, 0xf0b4, 0xef85, 0xf0b4, 0xef85, 0xf0b4, 0xef0d, 0xf04a, 0xef0d, +0xf04a, 0xee21, 0xef70, 0xee21, 0xef70, 0xef23, 0xf085, 0xef23, 0xf085, 0xed2a, 0xee9e, +0xed2a, 0xee9e, 0xeaf9, 0xec7e, 0xeaf9, 0xec7e, 0xeaf9, 0xec7e, 0xec3e, 0xedd3, 0xec3e, +0xedd3, 0xec1c, 0xedbe, 0xec1c, 0xedbe, 0xebe3, 0xed8f, 0xebe3, 0xed8f, 0xeba9, 0xed5d, +0xeba9, 0xed5d, 0xebc1, 0xed79, 0xebc1, 0xed79, 0xebd7, 0xed92, 0xebd7, 0xed92, 0xebd7, +0xed92, 0xed93, 0xef4d, 0xed93, 0xef4d, 0xed30, 0xeeea, 0xed30, 0xeeea, 0xec36, 0xedee, +0xec36, 0xedee, 0xec4a, 0xee01, 0xec4a, 0xee01, 0xed21, 0xeed8, 0xed21, 0xeed8, 0xeca1, +0xee5a, 0xeca1, 0xee5a, 0xeca1, 0xee5a, 0xed6f, 0xef2d, 0xed6f, 0xef2d, 0xee21, 0xefe8, +0xee21, 0xefe8, 0xee2f, 0xf002, 0xee2f, 0xf002, 0xee72, 0xf056, 0xee72, 0xf056, 0xedf3, +0xefea, 0xedf3, 0xefea, 0xedf3, 0xefea, 0xedf0, 0xefff, 0xedf0, 0xefff, 0xed58, 0xef82, +0xed58, 0xef82, 0xeceb, 0xef32, 0xeceb, 0xef32, 0xedc1, 0xf026, 0xedc1, 0xf026, 0xece3, +0xef67, 0xece3, 0xef67, 0xea9b, 0xed3c, 0xea9b, 0xed3c, 0xea9b, 0xed3c, 0xeb54, 0xee11, +0xeb54, 0xee11, 0xeafb, 0xedd2, 0xeafb, 0xedd2, 0xeb07, 0xedf3, 0xeb07, 0xedf3, 0xea54, +0xed51, 0xea54, 0xed51, 0xea29, 0xed31, 0xea29, 0xed31, 0xea2e, 0xed3b, 0xea2e, 0xed3b, +0xea2e, 0xed3b, 0xeb74, 0xee80, 0xeb74, 0xee80, 0xeb9e, 0xeea3, 0xeb9e, 0xeea3, 0xea60, +0xed57, 0xea60, 0xed57, 0xeb7a, 0xee5f, 0xeb7a, 0xee5f, 0xed27, 0xeff4, 0xed27, 0xeff4, +0xed27, 0xeff4, 0xedbe, 0xf06f, 0xedbe, 0xf06f, 0xefa2, 0xf234, 0xefa2, 0xf234, 0xf20c, +0xf47d, 0xf20c, 0xf47d, 0xf2c7, 0xf515, 0xf2c7, 0xf515, 0xf490, 0xf6bb, 0xf490, 0xf6bb, +0xf4b7, 0xf6c1, 0xf4b7, 0xf6c1, 0xf4b7, 0xf6c1, 0xf69a, 0xf883, 0xf69a, 0xf883, 0xf79a, +0xf966, 0xf79a, 0xf966, 0xf84e, 0xf9ff, 0xf84e, 0xf9ff, 0xf85b, 0xf9f5, 0xf85b, 0xf9f5, +0xf97c, 0xfb03, 0xf97c, 0xfb03, 0xfaf9, 0xfc70, 0xfaf9, 0xfc70, 0xfaf9, 0xfc70, 0xfcff, +0xfe69, 0xfcff, 0xfe69, 0xfe41, 0xffa2, 0xfe41, 0xffa2, 0xfd4b, 0xfea6, 0xfd4b, 0xfea6, +0xfd8a, 0xfee1, 0xfd8a, 0xfee1, 0xfdec, 0xff3f, 0xfdec, 0xff3f, 0xfdec, 0xff3f, 0xfd83, +0xfed4, 0xfd83, 0xfed4, 0xfc4c, 0xfd9d, 0xfc4c, 0xfd9d, 0xfbce, 0xfd1d, 0xfbce, 0xfd1d, +0xf97f, 0xfacc, 0xf97f, 0xfacc, 0xfaa1, 0xfbea, 0xfaa1, 0xfbea, 0xfc3a, 0xfd7f, 0xfc3a, +0xfd7f, 0xfc3a, 0xfd7f, 0xfc43, 0xfd83, 0xfc43, 0xfd83, 0xfae3, 0xfc1c, 0xfae3, 0xfc1c, +0xfa2e, 0xfb5e, 0xfa2e, 0xfb5e, 0xf8c2, 0xf9e7, 0xf8c2, 0xf9e7, 0xf743, 0xf85e, 0xf743, +0xf85e, 0xf6e1, 0xf7f0, 0xf6e1, 0xf7f0, 0xf6e1, 0xf7f0, 0xf5d1, 0xf6d3, 0xf5d1, 0xf6d3, +0xf587, 0xf67c, 0xf587, 0xf67c, 0xf616, 0xf6fe, 0xf616, 0xf6fe, 0xf711, 0xf7eb, 0xf711, +0xf7eb, 0xf76f, 0xf83b, 0xf76f, 0xf83b, 0xf76f, 0xf83b, 0xf895, 0xf953, 0xf895, 0xf953, +0xf7ea, 0xf899, 0xf7ea, 0xf899, 0xf750, 0xf7ef, 0xf750, 0xf7ef, 0xf6c3, 0xf752, 0xf6c3, +0xf752, 0xf730, 0xf7ac, 0xf730, 0xf7ac, 0xf6f0, 0xf758, 0xf6f0, 0xf758, 0xf6f0, 0xf758, +0xf5b4, 0xf606, 0xf5b4, 0xf606, 0xf478, 0xf4b0, 0xf478, 0xf4b0, 0xf59d, 0xf5b9, 0xf59d, +0xf5b9, 0xf5bd, 0xf5b9, 0xf5bd, 0xf5b9, 0xf599, 0xf571, 0xf599, 0xf571, 0xf5d7, 0xf589, +0xf5d7, 0xf589, 0xf5d7, 0xf589, 0xf54d, 0xf4d6, 0xf54d, 0xf4d6, 0xf709, 0xf666, 0xf709, +0xf666, 0xf832, 0xf762, 0xf832, 0xf762, 0xf91a, 0xf81b, 0xf91a, 0xf81b, 0xfa26, 0xf8f8, +0xfa26, 0xf8f8, 0xfa26, 0xf8f8, 0xfcd2, 0xfb76, 0xfcd2, 0xfb76, 0xfe72, 0xfceb, 0xfe72, +0xfceb, 0xfe9e, 0xfcef, 0xfe9e, 0xfcef, 0xff57, 0xfd84, 0xff57, 0xfd84, 0x6e, 0xfe7d, +0x6e, 0xfe7d, 0xfffb, 0xfdf1, 0xfffb, 0xfdf1, 0xfffb, 0xfdf1, 0x156, 0xff3a, 0x156, +0xff3a, 0x1b4, 0xff8f, 0x1b4, 0xff8f, 0x2dd, 0xb4, 0x2dd, 0xb4, 0x3cb, 0x1a8, +0x3cb, 0x1a8, 0x46b, 0x253, 0x46b, 0x253, 0x61e, 0x419, 0x61e, 0x419, 0x61e, +0x419, 0x628, 0x43a, 0x628, 0x43a, 0x616, 0x444, 0x616, 0x444, 0x5b8, 0x405, +0x5b8, 0x405, 0x717, 0x584, 0x717, 0x584, 0x70d, 0x59b, 0x70d, 0x59b, 0x70d, +0x59b, 0x7a5, 0x652, 0x7a5, 0x652, 0x77f, 0x648, 0x77f, 0x648, 0x6f6, 0x5d6, +0x6f6, 0x5d6, 0x6c7, 0x5b9, 0x6c7, 0x5b9, 0x730, 0x62d, 0x730, 0x62d, 0x68d, +0x58e, 0x68d, 0x58e, 0x68d, 0x58e, 0x75e, 0x65c, 0x75e, 0x65c, 0x6fc, 0x5ef, +0x6fc, 0x5ef, 0x55a, 0x43c, 0x55a, 0x43c, 0x664, 0x52d, 0x664, 0x52d, 0x730, +0x5db, 0x730, 0x5db, 0x73b, 0x5c4, 0x73b, 0x5c4, 0x73b, 0x5c4, 0x717, 0x57a, +0x717, 0x57a, 0x88a, 0x6c7, 0x88a, 0x6c7, 0x99e, 0x7b4, 0x99e, 0x7b4, 0xbd9, +0x9cb, 0xbd9, 0x9cb, 0xc96, 0xa67, 0xc96, 0xa67, 0xc96, 0xa67, 0xc2a, 0x9df, +0xc2a, 0x9df, 0xb51, 0x8f0, 0xb51, 0x8f0, 0xcb9, 0xa4a, 0xcb9, 0xa4a, 0xd78, +0xb02, 0xd78, 0xb02, 0xe20, 0xbac, 0xe20, 0xbac, 0xee6, 0xc7c, 0xee6, 0xc7c, +0xee6, 0xc7c, 0xed4, 0xc7e, 0xed4, 0xc7e, 0x100a, 0xdce, 0x100a, 0xdce, 0x1029, +0xe0f, 0x1029, 0xe0f, 0xfb9, 0xdc8, 0xfb9, 0xdc8, 0xef3, 0xd2f, 0xef3, 0xd2f, +0xef3, 0xd2f, 0xd4a, 0xbb7, 0xd4a, 0xbb7, 0xc1c, 0xabc, 0xc1c, 0xabc, 0xc73, +0xb48, 0xc73, 0xb48, 0xbb0, 0xab9, 0xbb0, 0xab9, 0xc62, 0xb9d, 0xc62, 0xb9d, +0xb9f, 0xb0b, 0xb9f, 0xb0b, 0xb9f, 0xb0b, 0xb9e, 0xb37, 0xb9e, 0xb37, 0xc61, +0xc23, 0xc61, 0xc23, 0xc5d, 0xc45, 0xc5d, 0xc45, 0xbbf, 0xbc9, 0xbbf, 0xbc9, +0xabe, 0xae6, 0xabe, 0xae6, 0xa33, 0xa74, 0xa33, 0xa74, 0xa33, 0xa74, 0x94d, +0x9a5, 0x94d, 0x9a5, 0x923, 0x98f, 0x923, 0x98f, 0xa6e, 0xaec, 0xa6e, 0xaec, +0x9e8, 0xa76, 0x9e8, 0xa76, 0x8c5, 0x963, 0x8c5, 0x963, 0x8c5, 0x963, 0x87d, +0x92a, 0x87d, 0x92a, 0x63c, 0x6f9, 0x63c, 0x6f9, 0x4b3, 0x57f, 0x4b3, 0x57f, +0x1a4, 0x281, 0x1a4, 0x281, 0xe, 0xfa, 0xe, 0xfa, 0xff4e, 0x4b, 0xff4e, +0x4b, 0xff4e, 0x4b, 0xfe5d, 0xff69, 0xfe5d, 0xff69, 0xfc9a, 0xfdb5, 0xfc9a, 0xfdb5, +0xfc09, 0xfd30, 0xfc09, 0xfd30, 0xfb87, 0xfcb8, 0xfb87, 0xfcb8, 0xfa62, 0xfb99, 0xfa62, +0xfb99, 0xfa46, 0xfb7f, 0xfa46, 0xfb7f, 0xfa46, 0xfb7f, 0xf987, 0xfabb, 0xf987, 0xfabb, +0xf84a, 0xf974, 0xf84a, 0xf974, 0xf81e, 0xf937, 0xf81e, 0xf937, 0xf843, 0xf943, 0xf843, +0xf943, 0xf713, 0xf7f4, 0xf713, 0xf7f4, 0xf713, 0xf7f4, 0xf7e2, 0xf89b, 0xf7e2, 0xf89b, +0xf784, 0xf80e, 0xf784, 0xf80e, 0xf78e, 0xf7e3, 0xf78e, 0xf7e3, 0xf88a, 0xf8a4, 0xf88a, +0xf8a4, 0xf942, 0xf91b, 0xf942, 0xf91b, 0xf8f6, 0xf88a, 0xf8f6, 0xf88a, 0xf8f6, 0xf88a, +0xfa45, 0xf990, 0xfa45, 0xf990, 0xfb27, 0xfa28, 0xfb27, 0xfa28, 0xfcc1, 0xfb77, 0xfcc1, +0xfb77, 0xff86, 0xfdf1, 0xff86, 0xfdf1, 0x1e2, 0x3, 0x1e2, 0x3, 0x3aa, 0x183, +0x3aa, 0x183, 0x3aa, 0x183, 0x479, 0x20d, 0x479, 0x20d, 0x6eb, 0x440, 0x6eb, +0x440, 0x8a4, 0x5bd, 0x8a4, 0x5bd, 0xab2, 0x794, 0xab2, 0x794, 0xb9a, 0x84b, +0xb9a, 0x84b, 0xb9a, 0x84b, 0xd68, 0x9ed, 0xd68, 0x9ed, 0x1027, 0xc85, 0x1027, +0xc85, 0x12b4, 0xeef, 0x12b4, 0xeef, 0x1479, 0x1097, 0x1479, 0x1097, 0x1584, 0x1189, +0x1584, 0x1189, 0x14b0, 0x10a1, 0x14b0, 0x10a1, 0x14b0, 0x10a1, 0x1641, 0x1221, 0x1641, +0x1221, 0x18b5, 0x1489, 0x18b5, 0x1489, 0x1925, 0x14f0, 0x1925, 0x14f0, 0x19fd, 0x15c1, +0x19fd, 0x15c1, 0x19fe, 0x15bf, 0x19fe, 0x15bf, 0x1af9, 0x16bb, 0x1af9, 0x16bb, 0x1af9, +0x16bb, 0x1c54, 0x1819, 0x1c54, 0x1819, 0x1d06, 0x18d1, 0x1d06, 0x18d1, 0x1d49, 0x191e, +0x1d49, 0x191e, 0x1e76, 0x1a58, 0x1e76, 0x1a58, 0x1e9b, 0x1a8d, 0x1e9b, 0x1a8d, 0x1e9b, +0x1a8d, 0x1e45, 0x1a4b, 0x1e45, 0x1a4b, 0x1e79, 0x1a97, 0x1e79, 0x1a97, 0x1f8d, 0x1bc5, +0x1f8d, 0x1bc5, 0x1e6a, 0x1ac1, 0x1e6a, 0x1ac1, 0x1d6e, 0x19e5, 0x1d6e, 0x19e5, 0x1d3d, +0x19d8, 0x1d3d, 0x19d8, 0x1d3d, 0x19d8, 0x1d8c, 0x1a4c, 0x1d8c, 0x1a4c, 0x1d9e, 0x1a83, +0x1d9e, 0x1a83, 0x1b6f, 0x187c, 0x1b6f, 0x187c, 0x1903, 0x1637, 0x1903, 0x1637, 0x17e5, +0x1541, 0x17e5, 0x1541, 0x16d5, 0x1458, 0x16d5, 0x1458, 0x16d5, 0x1458, 0x1475, 0x121d, +0x1475, 0x121d, 0x137e, 0x1149, 0x137e, 0x1149, 0x1226, 0x1013, 0x1226, 0x1013, 0x1227, +0x1034, 0x1227, 0x1034, 0x12ef, 0x111a, 0x12ef, 0x111a, 0x12ef, 0x111a, 0x1290, 0x10d8, +0x1290, 0x10d8, 0x10e1, 0xf45, 0x10e1, 0xf45, 0x105a, 0xed9, 0x105a, 0xed9, 0xeac, +0xd47, 0xeac, 0xd47, 0xcb0, 0xb68, 0xcb0, 0xb68, 0xb3b, 0xa11, 0xb3b, 0xa11, +0xb3b, 0xa11, 0x952, 0x84a, 0x952, 0x84a, 0x835, 0x751, 0x835, 0x751, 0x875, +0x7b9, 0x875, 0x7b9, 0x7c1, 0x732, 0x7c1, 0x732, 0x5fe, 0x5a2, 0x5fe, 0x5a2, +0x645, 0x620, 0x645, 0x620, 0x645, 0x620, 0x539, 0x54f, 0x539, 0x54f, 0x3cb, +0x422, 0x3cb, 0x422, 0x136, 0x1d0, 0x136, 0x1d0, 0xff5a, 0x3a, 0xff5a, 0x3a, +0xfde3, 0xff0b, 0xfde3, 0xff0b, 0xfde3, 0xff0b, 0xfd96, 0xff05, 0xfd96, 0xff05, 0xfcdd, +0xfe92, 0xfcdd, 0xfe92, 0xfc09, 0xfe01, 0xfc09, 0xfe01, 0xfb01, 0xfd37, 0xfb01, 0xfd37, +0xf8fd, 0xfb6b, 0xf8fd, 0xfb6b, 0xf791, 0xfa2f, 0xf791, 0xfa2f, 0xf791, 0xfa2f, 0xf5c5, +0xf88a, 0xf5c5, 0xf88a, 0xf3fa, 0xf6de, 0xf3fa, 0xf6de, 0xf3d9, 0xf6d0, 0xf3d9, 0xf6d0, +0xf385, 0xf684, 0xf385, 0xf684, 0xf14a, 0xf446, 0xf14a, 0xf446, 0xf2b0, 0xf59e, 0xf2b0, +0xf59e, 0xf2b0, 0xf59e, 0xf3a1, 0xf677, 0xf3a1, 0xf677, 0xf38b, 0xf640, 0xf38b, 0xf640, +0xf344, 0xf5cf, 0xf344, 0xf5cf, 0xf33a, 0xf595, 0xf33a, 0xf595, 0xf3f3, 0xf619, 0xf3f3, +0xf619, 0xf3f3, 0xf619, 0xf599, 0xf787, 0xf599, 0xf787, 0xf5d2, 0xf787, 0xf5d2, 0xf787, +0xf463, 0xf5df, 0xf463, 0xf5df, 0xf46b, 0xf5af, 0xf46b, 0xf5af, 0xf57d, 0xf68e, 0xf57d, +0xf68e, 0xf55f, 0xf642, 0xf55f, 0xf642, 0xf55f, 0xf642, 0xf50f, 0xf5c9, 0xf50f, 0xf5c9, +0xf4f8, 0xf591, 0xf4f8, 0xf591, 0xf3b4, 0xf434, 0xf3b4, 0xf434, 0xf3e5, 0xf452, 0xf3e5, +0xf452, 0xf3a8, 0xf40b, 0xf3a8, 0xf40b, 0xf466, 0xf4c5, 0xf466, 0xf4c5, 0xf466, 0xf4c5, +0xf4e9, 0xf54c, 0xf4e9, 0xf54c, 0xf444, 0xf4b0, 0xf444, 0xf4b0, 0xf362, 0xf3dc, 0xf362, +0xf3dc, 0xf324, 0xf3af, 0xf324, 0xf3af, 0xf1c4, 0xf265, 0xf1c4, 0xf265, 0xf1c4, 0xf265, +0xf0f2, 0xf1a9, 0xf0f2, 0xf1a9, 0xf0ba, 0xf188, 0xf0ba, 0xf188, 0xef80, 0xf066, 0xef80, +0xf066, 0xef69, 0xf065, 0xef69, 0xf065, 0xf130, 0xf241, 0xf130, 0xf241, 0xf20f, 0xf335, +0xf20f, 0xf335, 0xf20f, 0xf335, 0xf168, 0xf2a0, 0xf168, 0xf2a0, 0xf18e, 0xf2d8, 0xf18e, +0xf2d8, 0xf062, 0xf1bb, 0xf062, 0xf1bb, 0xf026, 0xf18f, 0xf026, 0xf18f, 0xf09c, 0xf214, +0xf09c, 0xf214, 0xf09c, 0xf214, 0xefea, 0xf172, 0xefea, 0xf172, 0xef78, 0xf111, 0xef78, +0xf111, 0xf120, 0xf2ca, 0xf120, 0xf2ca, 0xf0c5, 0xf283, 0xf0c5, 0xf283, 0xf0b3, 0xf287, +0xf0b3, 0xf287, 0xf0ac, 0xf299, 0xf0ac, 0xf299, 0xf0ac, 0xf299, 0xf03c, 0xf243, 0xf03c, +0xf243, 0xf014, 0xf239, 0xf014, 0xf239, 0xef12, 0xf155, 0xef12, 0xf155, 0xedb2, 0xf015, +0xedb2, 0xf015, 0xebfb, 0xee7e, 0xebfb, 0xee7e, 0xebfc, 0xee9f, 0xebfc, 0xee9f, 0xebfc, +0xee9f, 0xeb5b, 0xee1c, 0xeb5b, 0xee1c, 0xea2e, 0xed0c, 0xea2e, 0xed0c, 0xe919, 0xec10, +0xe919, 0xec10, 0xe95c, 0xec67, 0xe95c, 0xec67, 0xea70, 0xed8a, 0xea70, 0xed8a, 0xea70, +0xed8a, 0xeb05, 0xee28, 0xeb05, 0xee28, 0xe974, 0xec9a, 0xe974, 0xec9a, 0xea1f, 0xed42, +0xea1f, 0xed42, 0xe97c, 0xec94, 0xe97c, 0xec94, 0xe816, 0xeb1c, 0xe816, 0xeb1c, 0xea04, +0xecf2, 0xea04, 0xecf2, 0xea04, 0xecf2, 0xeb03, 0xedd3, 0xeb03, 0xedd3, 0xeb83, 0xee30, +0xeb83, 0xee30, 0xed33, 0xefba, 0xed33, 0xefba, 0xeefe, 0xf15a, 0xeefe, 0xf15a, 0xf0a5, +0xf2d5, 0xf0a5, 0xf2d5, 0xf39b, 0xf59e, 0xf39b, 0xf59e, 0xf39b, 0xf59e, 0xf4a9, 0xf67f, +0xf4a9, 0xf67f, 0xf4f1, 0xf69d, 0xf4f1, 0xf69d, 0xf60a, 0xf78d, 0xf60a, 0xf78d, 0xf7de, +0xf93d, 0xf7de, 0xf93d, 0xf8a6, 0xf9e3, 0xf8a6, 0xf9e3, 0xf8a6, 0xf9e3, 0xfb2f, 0xfc4f, +0xfb2f, 0xfc4f, 0xfc77, 0xfd80, 0xfc77, 0xfd80, 0xfbf4, 0xfce9, 0xfbf4, 0xfce9, 0xfd4f, +0xfe37, 0xfd4f, 0xfe37, 0xff0f, 0xffee, 0xff0f, 0xffee, 0xffd7, 0xb2, 0xffd7, 0xb2, +0xffd7, 0xb2, 0xfeaa, 0xff84, 0xfeaa, 0xff84, 0xfc62, 0xfd3f, 0xfc62, 0xfd3f, 0xfbbd, +0xfca0, 0xfbbd, 0xfca0, 0xfcc9, 0xfdb4, 0xfcc9, 0xfdb4, 0xfbd3, 0xfcc8, 0xfbd3, 0xfcc8, +0xfb6e, 0xfc6d, 0xfb6e, 0xfc6d, 0xfb6e, 0xfc6d, 0xfaef, 0xfbfa, 0xfaef, 0xfbfa, 0xf942, +0xfa58, 0xf942, 0xfa58, 0xf824, 0xf944, 0xf824, 0xf944, 0xf87b, 0xf9a6, 0xf87b, 0xf9a6, +0xf6ae, 0xf7e2, 0xf6ae, 0xf7e2, 0xf6ae, 0xf7e2, 0xf55f, 0xf69b, 0xf55f, 0xf69b, 0xf566, +0xf6a9, 0xf566, 0xf6a9, 0xf4a5, 0xf5ee, 0xf4a5, 0xf5ee, 0xf523, 0xf670, 0xf523, 0xf670, +0xf671, 0xf7c2, 0xf671, 0xf7c2, 0xf579, 0xf6ca, 0xf579, 0xf6ca, 0xf579, 0xf6ca, 0xf4c2, +0xf613, 0xf4c2, 0xf613, 0xf5df, 0xf72e, 0xf5df, 0xf72e, 0xf567, 0xf6b2, 0xf567, 0xf6b2, +0xf5ae, 0xf6f3, 0xf5ae, 0xf6f3, 0xf55e, 0xf69b, 0xf55e, 0xf69b, 0xf448, 0xf57b, 0xf448, +0xf57b, 0xf448, 0xf57b, 0xf390, 0xf4b4, 0xf390, 0xf4b4, 0xf3a7, 0xf4bb, 0xf3a7, 0xf4bb, +0xf2b9, 0xf3b9, 0xf2b9, 0xf3b9, 0xf215, 0xf2ff, 0xf215, 0xf2ff, 0xf16f, 0xf240, 0xf16f, +0xf240, 0xf16f, 0xf240, 0xf134, 0xf1e7, 0xf134, 0xf1e7, 0xf1c0, 0xf253, 0xf1c0, 0xf253, +0xf227, 0xf299, 0xf227, 0xf299, 0xf2ca, 0xf318, 0xf2ca, 0xf318, 0xf51c, 0xf545, 0xf51c, +0xf545, 0xf708, 0xf70c, 0xf708, 0xf70c, 0xf708, 0xf70c, 0xf7be, 0xf79d, 0xf7be, 0xf79d, +0xf9f6, 0xf9b1, 0xf9f6, 0xf9b1, 0xf993, 0xf92d, 0xf993, 0xf92d, 0xf9a8, 0xf924, 0xf9a8, +0xf924, 0xfb9c, 0xfafd, 0xfb9c, 0xfafd, 0xfc77, 0xfbc3, 0xfc77, 0xfbc3, 0xfc77, 0xfbc3, +0xfc8e, 0xfbca, 0xfc8e, 0xfbca, 0xfeba, 0xfdea, 0xfeba, 0xfdea, 0x2e, 0xff5a, 0x2e, +0xff5a, 0x22c, 0x159, 0x22c, 0x159, 0x487, 0x3bb, 0x487, 0x3bb, 0x487, 0x3bb, +0x4d7, 0x417, 0x4d7, 0x417, 0x53a, 0x48a, 0x53a, 0x48a, 0x72a, 0x68f, 0x72a, +0x68f, 0x801, 0x77c, 0x801, 0x77c, 0x7b8, 0x74b, 0x7b8, 0x74b, 0x9f8, 0x9a2, +0x9f8, 0x9a2, 0x9f8, 0x9a2, 0xa63, 0xa23, 0xa63, 0xa23, 0x9a5, 0x979, 0x9a5, +0x979, 0x9d5, 0x9b8, 0x9d5, 0x9b8, 0xad3, 0xabf, 0xad3, 0xabf, 0xbec, 0xbdd, +0xbec, 0xbdd, 0xc67, 0xc55, 0xc67, 0xc55, 0xc67, 0xc55, 0xaa6, 0xa8a, 0xaa6, +0xa8a, 0xab4, 0xa88, 0xab4, 0xa88, 0xb57, 0xb12, 0xb57, 0xb12, 0xa3c, 0x9d9, +0xa3c, 0x9d9, 0x983, 0x8fb, 0x983, 0x8fb, 0x983, 0x8fb, 0x8cb, 0x81b, 0x8cb, +0x81b, 0x881, 0x7a4, 0x881, 0x7a4, 0xa52, 0x946, 0xa52, 0x946, 0xcc8, 0xb8c, +0xcc8, 0xb8c, 0xca4, 0xb39, 0xca4, 0xb39, 0xd67, 0xbd0, 0xd67, 0xbd0, 0xd67, +0xbd0, 0xe86, 0xcc6, 0xe86, 0xcc6, 0xe93, 0xcaf, 0xe93, 0xcaf, 0xefb, 0xcfa, +0xefb, 0xcfa, 0xfb9, 0xda1, 0xfb9, 0xda1, 0xe8d, 0xc66, 0xe8d, 0xc66, 0xf79, +0xd4b, 0xf79, 0xd4b, 0xf79, 0xd4b, 0x10c7, 0xe9b, 0x10c7, 0xe9b, 0x1060, 0xe3c, +0x1060, 0xe3c, 0x10e4, 0xed2, 0x10e4, 0xed2, 0x10e7, 0xeeb, 0x10e7, 0xeeb, 0xf82, +0xda4, 0xf82, 0xda4, 0xf82, 0xda4, 0xe30, 0xc74, 0xe30, 0xc74, 0xd5e, 0xbc8, +0xd5e, 0xbc8, 0xc88, 0xb1a, 0xc88, 0xb1a, 0xbe5, 0xaa2, 0xbe5, 0xaa2, 0xada, +0x9c2, 0xada, 0x9c2, 0xa4e, 0x960, 0xa4e, 0x960, 0xa4e, 0x960, 0x9ff, 0x93a, +0x9ff, 0x93a, 0xa4d, 0x9b0, 0xa4d, 0x9b0, 0xa1e, 0x9a7, 0xa1e, 0x9a7, 0x9f1, +0x99e, 0x9f1, 0x99e, 0x7a4, 0x772, 0x7a4, 0x772, 0x69b, 0x689, 0x69b, 0x689, +0x69b, 0x689, 0x75c, 0x768, 0x75c, 0x768, 0x5c3, 0x5eb, 0x5c3, 0x5eb, 0x4b7, +0x4fa, 0x4b7, 0x4fa, 0x626, 0x683, 0x626, 0x683, 0x61b, 0x693, 0x61b, 0x693, +0x61b, 0x693, 0x4c6, 0x558, 0x4c6, 0x558, 0x39a, 0x447, 0x39a, 0x447, 0x133, +0x1fc, 0x133, 0x1fc, 0x6f, 0x154, 0x6f, 0x154, 0xffa0, 0xa0, 0xffa0, 0xa0, +0xfe0f, 0xff2a, 0xfe0f, 0xff2a, 0xfe0f, 0xff2a, 0xfd20, 0xfe54, 0xfd20, 0xfe54, 0xfdf3, +0xff3e, 0xfdf3, 0xff3e, 0xfd26, 0xfe86, 0xfd26, 0xfe86, 0xfc45, 0xfdb5, 0xfc45, 0xfdb5, +0xfc8f, 0xfe0a, 0xfc8f, 0xfe0a, 0xfc8f, 0xfe0a, 0xfbc3, 0xfd44, 0xfbc3, 0xfd44, 0xfafa, +0xfc79, 0xfafa, 0xfc79, 0xfb84, 0xfcf9, 0xfb84, 0xfcf9, 0xfb3f, 0xfca2, 0xfb3f, 0xfca2, +0xfaf8, 0xfc40, 0xfaf8, 0xfc40, 0xfb43, 0xfc66, 0xfb43, 0xfc66, 0xfb43, 0xfc66, 0xfaa2, +0xfb96, 0xfaa2, 0xfb96, 0xfb55, 0xfc12, 0xfb55, 0xfc12, 0xfaca, 0xfb48, 0xfaca, 0xfb48, +0xfa05, 0xfa3b, 0xfa05, 0xfa3b, 0xf9f1, 0xf9d9, 0xf9f1, 0xf9d9, 0xf9d5, 0xf96a, 0xf9d5, +0xf96a, 0xf9d5, 0xf96a, 0xf9b1, 0xf8ee, 0xf9b1, 0xf8ee, 0xfc6a, 0xfb4d, 0xfc6a, 0xfb4d, +0xff64, 0xfded, 0xff64, 0xfded, 0x98, 0xfec6, 0x98, 0xfec6, 0x267, 0x3e, 0x267, +0x3e, 0x267, 0x3e, 0x467, 0x1ea, 0x467, 0x1ea, 0x5b2, 0x2e6, 0x5b2, 0x2e6, +0x77b, 0x466, 0x77b, 0x466, 0x899, 0x542, 0x899, 0x542, 0x84d, 0x4bc, 0x84d, +0x4bc, 0xab1, 0x6ef, 0xab1, 0x6ef, 0xab1, 0x6ef, 0xd44, 0x95a, 0xd44, 0x95a, +0xef9, 0xaef, 0xef9, 0xaef, 0x10c5, 0xca4, 0x10c5, 0xca4, 0x1251, 0xe21, 0x1251, +0xe21, 0x1351, 0xf1a, 0x1351, 0xf1a, 0x14e9, 0x10b2, 0x14e9, 0x10b2, 0x14e9, 0x10b2, +0x161b, 0x11ea, 0x161b, 0x11ea, 0x1692, 0x126d, 0x1692, 0x126d, 0x16c8, 0x12b2, 0x16c8, +0x12b2, 0x1726, 0x1325, 0x1726, 0x1325, 0x176d, 0x1383, 0x176d, 0x1383, 0x176d, 0x1383, +0x1845, 0x1475, 0x1845, 0x1475, 0x1938, 0x1584, 0x1938, 0x1584, 0x1a43, 0x16ac, 0x1a43, +0x16ac, 0x1b22, 0x17a8, 0x1b22, 0x17a8, 0x1aaf, 0x1754, 0x1aaf, 0x1754, 0x1c42, 0x1906, +0x1c42, 0x1906, 0x1c42, 0x1906, 0x1d0f, 0x19f2, 0x1d0f, 0x19f2, 0x1ba4, 0x18a5, 0x1ba4, +0x18a5, 0x1b30, 0x1850, 0x1b30, 0x1850, 0x1bad, 0x18eb, 0x1bad, 0x18eb, 0x1b09, 0x1864, +0x1b09, 0x1864, 0x1b7c, 0x18f4, 0x1b7c, 0x18f4, 0x1b7c, 0x18f4, 0x1b85, 0x1919, 0x1b85, +0x1919, 0x1a5e, 0x180d, 0x1a5e, 0x180d, 0x1a0f, 0x17d8, 0x1a0f, 0x17d8, 0x1a2e, 0x180f, +0x1a2e, 0x180f, 0x1888, 0x1680, 0x1888, 0x1680, 0x1888, 0x1680, 0x166e, 0x147c, 0x166e, +0x147c, 0x15da, 0x13fc, 0x15da, 0x13fc, 0x150f, 0x1344, 0x150f, 0x1344, 0x14cf, 0x1314, +0x14cf, 0x1314, 0x1505, 0x1359, 0x1505, 0x1359, 0x149f, 0x1301, 0x149f, 0x1301, 0x149f, +0x1301, 0x1431, 0x12a1, 0x1431, 0x12a1, 0x1460, 0x12dc, 0x1460, 0x12dc, 0x12f3, 0x117c, +0x12f3, 0x117c, 0x119e, 0x1033, 0x119e, 0x1033, 0xf07, 0xdaa, 0xf07, 0xdaa, 0xd84, +0xc36, 0xd84, 0xc36, 0xd84, 0xc36, 0xd47, 0xc0c, 0xd47, 0xc0c, 0xb9a, 0xa73, +0xb9a, 0xa73, 0x9f3, 0x8e5, 0x9f3, 0x8e5, 0x8d5, 0x7e2, 0x8d5, 0x7e2, 0x88c, +0x7ba, 0x88c, 0x7ba, 0x88c, 0x7ba, 0x7c7, 0x719, 0x7c7, 0x719, 0x6cd, 0x649, +0x6cd, 0x649, 0x545, 0x4ee, 0x545, 0x4ee, 0x386, 0x35f, 0x386, 0x35f, 0x230, +0x23e, 0x230, 0x23e, 0xa7, 0xec, 0xa7, 0xec, 0xa7, 0xec, 0xfee3, 0xff5f, +0xfee3, 0xff5f, 0xfed6, 0xff8a, 0xfed6, 0xff8a, 0xfc89, 0xfd76, 0xfc89, 0xfd76, 0xf959, +0xfa7c, 0xf959, 0xfa7c, 0xf7d3, 0xf927, 0xf7d3, 0xf927, 0xf67b, 0xf7fe, 0xf67b, 0xf7fe, +0xf67b, 0xf7fe, 0xf4ff, 0xf6ab, 0xf4ff, 0xf6ab, 0xf302, 0xf4d0, 0xf302, 0xf4d0, 0xf1e8, +0xf3d1, 0xf1e8, 0xf3d1, 0xf132, 0xf32e, 0xf132, 0xf32e, 0xf109, 0xf311, 0xf109, 0xf311, +0xf109, 0xf311, 0xf17a, 0xf384, 0xf17a, 0xf384, 0xf070, 0xf275, 0xf070, 0xf275, 0xee96, +0xf08e, 0xee96, 0xf08e, 0xee5e, 0xf043, 0xee5e, 0xf043, 0xee6a, 0xf034, 0xee6a, 0xf034, +0xeee2, 0xf08d, 0xeee2, 0xf08d, 0xeee2, 0xf08d, 0xee9f, 0xf028, 0xee9f, 0xf028, 0xeef7, +0xf05a, 0xeef7, 0xf05a, 0xefb6, 0xf0f2, 0xefb6, 0xf0f2, 0xf023, 0xf139, 0xf023, 0xf139, +0xf164, 0xf255, 0xf164, 0xf255, 0xf0f9, 0xf1c7, 0xf0f9, 0xf1c7, 0xf0f9, 0xf1c7, 0xef28, +0xefd7, 0xef28, 0xefd7, 0xeeab, 0xef40, 0xeeab, 0xef40, 0xee83, 0xef02, 0xee83, 0xef02, +0xeecc, 0xef3c, 0xeecc, 0xef3c, 0xefb5, 0xf01a, 0xefb5, 0xf01a, 0xefb5, 0xf01a, 0xefbe, +0xf01d, 0xefbe, 0xf01d, 0xf0ed, 0xf14d, 0xf0ed, 0xf14d, 0xf2a2, 0xf307, 0xf2a2, 0xf307, +0xf3a4, 0xf412, 0xf3a4, 0xf412, 0xf325, 0xf3a1, 0xf325, 0xf3a1, 0xf30e, 0xf39a, 0xf30e, +0xf39a, 0xf30e, 0xf39a, 0xf38d, 0xf42b, 0xf38d, 0xf42b, 0xf252, 0xf304, 0xf252, 0xf304, +0xf1f4, 0xf2bc, 0xf1f4, 0xf2bc, 0xf419, 0xf4f6, 0xf419, 0xf4f6, 0xf44e, 0xf541, 0xf44e, +0xf541, 0xf3d7, 0xf4df, 0xf3d7, 0xf4df, 0xf3d7, 0xf4df, 0xf41b, 0xf538, 0xf41b, 0xf538, +0xf4e8, 0xf619, 0xf4e8, 0xf619, 0xf58a, 0xf6cf, 0xf58a, 0xf6cf, 0xf457, 0xf5af, 0xf457, +0xf5af, 0xf4f3, 0xf65f, 0xf4f3, 0xf65f, 0xf4f3, 0xf65f, 0xf5b3, 0xf733, 0xf5b3, 0xf733, +0xf5bd, 0xf753, 0xf5bd, 0xf753, 0xf562, 0xf70e, 0xf562, 0xf70e, 0xf4f1, 0xf6b6, 0xf4f1, +0xf6b6, 0xf4d7, 0xf6b6, 0xf4d7, 0xf6b6, 0xf494, 0xf68f, 0xf494, 0xf68f, 0xf494, 0xf68f, +0xf4ca, 0xf6e3, 0xf4ca, 0xf6e3, 0xf4e0, 0xf71a, 0xf4e0, 0xf71a, 0xf377, 0xf5d1, 0xf377, +0xf5d1, 0xf2fa, 0xf577, 0xf2fa, 0xf577, 0xf281, 0xf521, 0xf281, 0xf521, 0xf12c, 0xf3ed, +0xf12c, 0xf3ed, 0xf12c, 0xf3ed, 0xf020, 0xf301, 0xf020, 0xf301, 0xee69, 0xf168, 0xee69, +0xf168, 0xedd6, 0xf0ef, 0xedd6, 0xf0ef, 0xed90, 0xf0bf, 0xed90, 0xf0bf, 0xed46, 0xf086, +0xed46, 0xf086, 0xed46, 0xf086, 0xed2f, 0xf079, 0xed2f, 0xf079, 0xed47, 0xf095, 0xed47, +0xf095, 0xecbe, 0xf008, 0xecbe, 0xf008, 0xebb0, 0xeeef, 0xebb0, 0xeeef, 0xeb11, 0xee3e, +0xeb11, 0xee3e, 0xeb4d, 0xee60, 0xeb4d, 0xee60, 0xeb4d, 0xee60, 0xea3a, 0xed2d, 0xea3a, +0xed2d, 0xe963, 0xec2f, 0xe963, 0xec2f, 0xeaa6, 0xed46, 0xeaa6, 0xed46, 0xec54, 0xeec3, +0xec54, 0xeec3, 0xee61, 0xf09d, 0xee61, 0xf09d, 0xee61, 0xf09d, 0xef7d, 0xf184, 0xef7d, +0xf184, 0xf0d7, 0xf2a8, 0xf0d7, 0xf2a8, 0xf1d5, 0xf372, 0xf1d5, 0xf372, 0xf29a, 0xf404, +0xf29a, 0xf404, 0xf4da, 0xf615, 0xf4da, 0xf615, 0xf598, 0xf6a8, 0xf598, 0xf6a8, 0xf598, +0xf6a8, 0xf514, 0xf5fe, 0xf514, 0xf5fe, 0xf6a5, 0xf76f, 0xf6a5, 0xf76f, 0xf8c5, 0xf976, +0xf8c5, 0xf976, 0xfb08, 0xfba7, 0xfb08, 0xfba7, 0xfb9e, 0xfc32, 0xfb9e, 0xfc32, 0xfb00, +0xfb8f, 0xfb00, 0xfb8f, 0xfb00, 0xfb8f, 0xfb4f, 0xfbe0, 0xfb4f, 0xfbe0, 0xfbe9, 0xfc83, +0xfbe9, 0xfc83, 0xfc59, 0xfcff, 0xfc59, 0xfcff, 0xfbe7, 0xfca0, 0xfbe7, 0xfca0, 0xfc2d, +0xfcfc, 0xfc2d, 0xfcfc, 0xfc2d, 0xfcfc, 0xfc70, 0xfd58, 0xfc70, 0xfd58, 0xfb99, 0xfc9c, +0xfb99, 0xfc9c, 0xfba3, 0xfcc4, 0xfba3, 0xfcc4, 0xfb8f, 0xfccd, 0xfb8f, 0xfccd, 0xfa03, +0xfb5f, 0xfa03, 0xfb5f, 0xf93a, 0xfab2, 0xf93a, 0xfab2, 0xf93a, 0xfab2, 0xf8ec, 0xfa7f, +0xf8ec, 0xfa7f, 0xf935, 0xfae2, 0xf935, 0xfae2, 0xf98f, 0xfb52, 0xf98f, 0xfb52, 0xf9a9, +0xfb80, 0xf9a9, 0xfb80, 0xf9f8, 0xfbe0, 0xf9f8, 0xfbe0, 0xf9df, 0xfbd5, 0xf9df, 0xfbd5, +0xf9df, 0xfbd5, 0xf9dc, 0xfbdc, 0xf9dc, 0xfbdc, 0xfa23, 0xfc2b, 0xfa23, 0xfc2b, 0xf96b, +0xfb76, 0xf96b, 0xfb76, 0xf7d2, 0xf9dc, 0xf7d2, 0xf9dc, 0xf6c9, 0xf8ce, 0xf6c9, 0xf8ce, +0xf6c9, 0xf8ce, 0xf71a, 0xf916, 0xf71a, 0xf916, 0xf76e, 0xf95c, 0xf76e, 0xf95c, 0xf728, +0xf905, 0xf728, 0xf905, 0xf769, 0xf930, 0xf769, 0xf930, 0xf668, 0xf815, 0xf668, 0xf815, +0xf61e, 0xf7ad, 0xf61e, 0xf7ad, 0xf61e, 0xf7ad, 0xf5d8, 0xf745, 0xf5d8, 0xf745, 0xf461, +0xf5a7, 0xf461, 0xf5a7, 0xf3d6, 0xf4f2, 0xf3d6, 0xf4f2, 0xf467, 0xf556, 0xf467, 0xf556, +0xf5e4, 0xf6a3, 0xf5e4, 0xf6a3, 0xf719, 0xf7a7, 0xf719, 0xf7a7, 0xf719, 0xf7a7, 0xf7cd, +0xf828, 0xf7cd, 0xf828, 0xf973, 0xf99b, 0xf973, 0xf99b, 0xfa74, 0xfa68, 0xfa74, 0xfa68, +0xfa6f, 0xfa31, 0xfa6f, 0xfa31, 0xfab8, 0xfa4b, 0xfab8, 0xfa4b, 0xfab8, 0xfa4b, 0xfa9f, +0xfa05, 0xfa9f, 0xfa05, 0xfb61, 0xfa9e, 0xfb61, 0xfa9e, 0xfc11, 0xfb2a, 0xfc11, 0xfb2a, +0xfdb7, 0xfcb2, 0xfdb7, 0xfcb2, 0xff8b, 0xfe6d, 0xff8b, 0xfe6d, 0x8b, 0xff5a, 0x8b, +0xff5a, 0x8b, 0xff5a, 0x261, 0x123, 0x261, 0x123, 0x313, 0x1ce, 0x313, 0x1ce, +0x3ab, 0x266, 0x3ab, 0x266, 0x544, 0x403, 0x544, 0x403, 0x51e, 0x3e7, 0x51e, +0x3e7, 0x4d6, 0x3ac, 0x4d6, 0x3ac, 0x4d6, 0x3ac, 0x537, 0x41d, 0x537, 0x41d, +0x5b8, 0x4af, 0x5b8, 0x4af, 0x783, 0x68c, 0x783, 0x68c, 0x806, 0x721, 0x806, +0x721, 0x80a, 0x736, 0x80a, 0x736, 0x80a, 0x736, 0x8c3, 0x7fc, 0x8c3, 0x7fc, +0x9a0, 0x8e4, 0x9a0, 0x8e4, 0x9e6, 0x931, 0x9e6, 0x931, 0x937, 0x885, 0x937, +0x885, 0x934, 0x87f, 0x934, 0x87f, 0x92b, 0x86f, 0x92b, 0x86f, 0x92b, 0x86f, +0x934, 0x86d, 0x934, 0x86d, 0xa6e, 0x997, 0xa6e, 0x997, 0xb22, 0xa37, 0xb22, +0xa37, 0xb9b, 0xa9a, 0xb9b, 0xa9a, 0xc5d, 0xb44, 0xc5d, 0xb44, 0xcf5, 0xbc3, +0xcf5, 0xbc3, 0xcf5, 0xbc3, 0xef0, 0xda6, 0xef0, 0xda6, 0xf84, 0xe24, 0xf84, +0xe24, 0xeb1, 0xd3c, 0xeb1, 0xd3c, 0xfc7, 0xe41, 0xfc7, 0xe41, 0x10ab, 0xf18, +0x10ab, 0xf18, 0x10ab, 0xf18, 0x112a, 0xf90, 0x112a, 0xf90, 0x116d, 0xfd1, 0x116d, +0xfd1, 0x11b6, 0x101e, 0x11b6, 0x101e, 0x11e1, 0x1053, 0x11e1, 0x1053, 0x10a8, 0xf2a, +0x10a8, 0xf2a, 0x1042, 0xed9, 0x1042, 0xed9, 0x1042, 0xed9, 0xf95, 0xe48, 0xf95, +0xe48, 0xf7b, 0xe4c, 0xf7b, 0xe4c, 0xf06, 0xdfb, 0xf06, 0xdfb, 0xd06, 0xc22, +0xd06, 0xc22, 0xd07, 0xc4b, 0xd07, 0xc4b, 0xcc8, 0xc36, 0xcc8, 0xc36, 0xcc8, +0xc36, 0xbe1, 0xb79, 0xbe1, 0xb79, 0xb2e, 0xaf0, 0xb2e, 0xaf0, 0x973, 0x95f, +0x973, 0x95f, 0x80a, 0x81d, 0x80a, 0x81d, 0x6e0, 0x719, 0x6e0, 0x719, 0x6e0, +0x719, 0x5fc, 0x658, 0x5fc, 0x658, 0x59b, 0x618, 0x59b, 0x618, 0x4bc, 0x559, +0x4bc, 0x559, 0x4d6, 0x58f, 0x4d6, 0x58f, 0x511, 0x5e4, 0x511, 0x5e4, 0x3a6, +0x492, 0x3a6, 0x492, 0x3a6, 0x492, 0x18d, 0x290, 0x18d, 0x290, 0x1f, 0x137, +0x1f, 0x137, 0xfece, 0xfffb, 0xfece, 0xfffb, 0xfcab, 0xfdeb, 0xfcab, 0xfdeb, 0xfb35, +0xfc88, 0xfb35, 0xfc88, 0xfb0a, 0xfc6d, 0xfb0a, 0xfc6d, 0xfb0a, 0xfc6d, 0xf9f0, 0xfb63, +0xf9f0, 0xfb63, 0xf905, 0xfa86, 0xf905, 0xfa86, 0xf9c7, 0xfb54, 0xf9c7, 0xfb54, 0xf894, +0xfa2c, 0xf894, 0xfa2c, 0xf7dc, 0xf97a, 0xf7dc, 0xf97a, 0xf7dc, 0xf97a, 0xf782, 0xf923, +0xf782, 0xf923, 0xf688, 0xf827, 0xf688, 0xf827, 0xf73b, 0xf8d3, 0xf73b, 0xf8d3, 0xf695, +0xf81f, 0xf695, 0xf81f, 0xf6ab, 0xf821, 0xf6ab, 0xf821, 0xf81e, 0xf97a, 0xf81e, 0xf97a, +0xf81e, 0xf97a, 0xf8d4, 0xfa0d, 0xf8d4, 0xfa0d, 0xf8be, 0xf9ce, 0xf8be, 0xf9ce, 0xf820, +0xf8ff, 0xf820, 0xf8ff, 0xf87d, 0xf924, 0xf87d, 0xf924, 0xf842, 0xf8a9, 0xf842, 0xf8a9, +0xf850, 0xf872, 0xf850, 0xf872, 0xf850, 0xf872, 0xfa1d, 0xf9f4, 0xfa1d, 0xf9f4, 0xfbe4, +0xfb6c, 0xfbe4, 0xfb6c, 0xfe48, 0xfd7c, 0xfe48, 0xfd7c, 0x32, 0xff12, 0x32, 0xff12, +0x1fb, 0x85, 0x1fb, 0x85, 0x1fb, 0x85, 0x56a, 0x39f, 0x56a, 0x39f, 0x6ec, +0x4ce, 0x6ec, 0x4ce, 0x7b6, 0x548, 0x7b6, 0x548, 0x95d, 0x6a3, 0x95d, 0x6a3, +0xa5d, 0x75c, 0xa5d, 0x75c, 0xb96, 0x855, 0xb96, 0x855, 0xb96, 0x855, 0xd41, +0x9c5, 0xd41, 0x9c5, 0xefe, 0xb4e, 0xefe, 0xb4e, 0xf93, 0xbb7, 0xf93, 0xbb7, +0x10fc, 0xcfb, 0x10fc, 0xcfb, 0x1316, 0xef8, 0x1316, 0xef8, 0x1316, 0xef8, 0x141e, +0xfe9, 0x141e, 0xfe9, 0x1538, 0x10f4, 0x1538, 0x10f4, 0x15dd, 0x118f, 0x15dd, 0x118f, +0x16a0, 0x124e, 0x16a0, 0x124e, 0x1790, 0x133f, 0x1790, 0x133f, 0x17a2, 0x1357, 0x17a2, +0x1357, 0x17a2, 0x1357, 0x184c, 0x140b, 0x184c, 0x140b, 0x191b, 0x14e7, 0x191b, 0x14e7, +0x1927, 0x1503, 0x1927, 0x1503, 0x19b7, 0x15a5, 0x19b7, 0x15a5, 0x1a26, 0x1628, 0x1a26, +0x1628, 0x1a6a, 0x1681, 0x1a6a, 0x1681, 0x1a6a, 0x1681, 0x1ac3, 0x16f2, 0x1ac3, 0x16f2, +0x1aad, 0x16f4, 0x1aad, 0x16f4, 0x1ac4, 0x1725, 0x1ac4, 0x1725, 0x1b35, 0x17b0, 0x1b35, +0x17b0, 0x1b01, 0x1797, 0x1b01, 0x1797, 0x1b01, 0x1797, 0x1a40, 0x16f3, 0x1a40, 0x16f3, +0x19a7, 0x1676, 0x19a7, 0x1676, 0x18e9, 0x15d5, 0x18e9, 0x15d5, 0x17bf, 0x14c8, 0x17bf, +0x14c8, 0x1703, 0x142a, 0x1703, 0x142a, 0x16cc, 0x1410, 0x16cc, 0x1410, 0x16cc, 0x1410, +0x14d9, 0x123a, 0x14d9, 0x123a, 0x14a2, 0x121f, 0x14a2, 0x121f, 0x154d, 0x12e7, 0x154d, +0x12e7, 0x13b6, 0x116a, 0x13b6, 0x116a, 0x1393, 0x1161, 0x1393, 0x1161, 0x12ec, 0x10d1, +0x12ec, 0x10d1, 0x12ec, 0x10d1, 0x1291, 0x108e, 0x1291, 0x108e, 0x1287, 0x1098, 0x1287, +0x1098, 0x1106, 0xf2c, 0x1106, 0xf2c, 0x1014, 0xe4d, 0x1014, 0xe4d, 0xf66, 0xdb2, +0xf66, 0xdb2, 0xf66, 0xdb2, 0xf49, 0xda8, 0xf49, 0xda8, 0xe0b, 0xc7c, 0xe0b, +0xc7c, 0xcae, 0xb34, 0xcae, 0xb34, 0xcbc, 0xb57, 0xcbc, 0xb57, 0xc1e, 0xad1, +0xc1e, 0xad1, 0xb9c, 0xa6a, 0xb9c, 0xa6a, 0xb9c, 0xa6a, 0xb61, 0xa4d, 0xb61, +0xa4d, 0xaaa, 0x9b9, 0xaaa, 0x9b9, 0x9d3, 0x908, 0x9d3, 0x908, 0x7cb, 0x72b, +0x7cb, 0x72b, 0x68f, 0x61e, 0x68f, 0x61e, 0x624, 0x5e8, 0x624, 0x5e8, 0x624, +0x5e8, 0x42f, 0x42a, 0x42f, 0x42a, 0x2e2, 0x319, 0x2e2, 0x319, 0x19d, 0x212, +0x19d, 0x212, 0xff19, 0xffcd, 0xff19, 0xffcd, 0xfc7d, 0xfd72, 0xfc7d, 0xfd72, 0xfc7d, +0xfd72, 0xfac7, 0xfbfc, 0xfac7, 0xfbfc, 0xf8d8, 0xfa4c, 0xf8d8, 0xfa4c, 0xf5c6, 0xf776, +0xf5c6, 0xf776, 0xf441, 0xf629, 0xf441, 0xf629, 0xf3bb, 0xf5d5, 0xf3bb, 0xf5d5, 0xf315, +0xf55b, 0xf315, 0xf55b, 0xf315, 0xf55b, 0xf38f, 0xf5fa, 0xf38f, 0xf5fa, 0xf322, 0xf5a9, +0xf322, 0xf5a9, 0xf287, 0xf523, 0xf287, 0xf523, 0xf28a, 0xf532, 0xf28a, 0xf532, 0xf100, +0xf3ab, 0xf100, 0xf3ab, 0xeffa, 0xf2a1, 0xeffa, 0xf2a1, 0xeffa, 0xf2a1, 0xef51, 0xf1ed, +0xef51, 0xf1ed, 0xefb3, 0xf23c, 0xefb3, 0xf23c, 0xf105, 0xf375, 0xf105, 0xf375, 0xf0ff, +0xf352, 0xf0ff, 0xf352, 0xf18e, 0xf3bf, 0xf18e, 0xf3bf, 0xf18e, 0xf3bf, 0xf1a4, 0xf3b2, +0xf1a4, 0xf3b2, 0xf0fe, 0xf2e9, 0xf0fe, 0xf2e9, 0xf08d, 0xf254, 0xf08d, 0xf254, 0xefaa, +0xf14f, 0xefaa, 0xf14f, 0xeef7, 0xf07b, 0xeef7, 0xf07b, 0xeee8, 0xf050, 0xeee8, 0xf050, +0xeee8, 0xf050, 0xefbc, 0xf10b, 0xefbc, 0xf10b, 0xf0a8, 0xf1e3, 0xf0a8, 0xf1e3, 0xf0bb, +0xf1e7, 0xf0bb, 0xf1e7, 0xf298, 0xf3b9, 0xf298, 0xf3b9, 0xf445, 0xf560, 0xf445, 0xf560, +0xf2a4, 0xf3be, 0xf2a4, 0xf3be, 0xf2a4, 0xf3be, 0xf313, 0xf430, 0xf313, 0xf430, 0xf3a5, +0xf4c9, 0xf3a5, 0xf4c9, 0xf2a6, 0xf3d4, 0xf2a6, 0xf3d4, 0xf299, 0xf3d3, 0xf299, 0xf3d3, +0xf1d1, 0xf319, 0xf1d1, 0xf319, 0xf1d1, 0xf319, 0xf239, 0xf390, 0xf239, 0xf390, 0xf2d5, +0xf43c, 0xf2d5, 0xf43c, 0xf26b, 0xf3e2, 0xf26b, 0xf3e2, 0xf273, 0xf3fa, 0xf273, 0xf3fa, +0xf31c, 0xf4b2, 0xf31c, 0xf4b2, 0xf501, 0xf6a6, 0xf501, 0xf6a6, 0xf501, 0xf6a6, 0xf584, +0xf736, 0xf584, 0xf736, 0xf554, 0xf714, 0xf554, 0xf714, 0xf66f, 0xf83b, 0xf66f, 0xf83b, +0xf635, 0xf80e, 0xf635, 0xf80e, 0xf6b6, 0xf89b, 0xf6b6, 0xf89b, 0xf7c5, 0xf9b6, 0xf7c5, +0xf9b6, 0xf7c5, 0xf9b6, 0xf7e2, 0xf9df, 0xf7e2, 0xf9df, 0xf7ed, 0xf9f7, 0xf7ed, 0xf9f7, +0xf6a9, 0xf8be, 0xf6a9, 0xf8be, 0xf6ad, 0xf8cf, 0xf6ad, 0xf8cf, 0xf649, 0xf877, 0xf649, +0xf877, 0xf649, 0xf877, 0xf4c3, 0xf6fe, 0xf4c3, 0xf6fe, 0xf4b0, 0xf6f8, 0xf4b0, 0xf6f8, +0xf3d6, 0xf629, 0xf3d6, 0xf629, 0xf28f, 0xf4ec, 0xf28f, 0xf4ec, 0xf1a8, 0xf40d, 0xf1a8, +0xf40d, 0xf19c, 0xf406, 0xf19c, 0xf406, 0xf19c, 0xf406, 0xf13b, 0xf3a8, 0xf13b, 0xf3a8, +0xefb3, 0xf220, 0xefb3, 0xf220, 0xef1d, 0xf185, 0xef1d, 0xf185, 0xedff, 0xf05f, 0xedff, +0xf05f, 0xed89, 0xefdc, 0xed89, 0xefdc, 0xee3c, 0xf07d, 0xee3c, 0xf07d, 0xee3c, 0xf07d, +0xed0a, 0xef35, 0xed0a, 0xef35, 0xed00, 0xef10, 0xed00, 0xef10, 0xee3c, 0xf02d, 0xee3c, +0xf02d, 0xeeeb, 0xf0b9, 0xeeeb, 0xf0b9, 0xefa7, 0xf14e, 0xefa7, 0xf14e, 0xefa7, 0xf14e, +0xefa7, 0xf126, 0xefa7, 0xf126, 0xf05c, 0xf1b1, 0xf05c, 0xf1b1, 0xf145, 0xf26e, 0xf145, +0xf26e, 0xf24f, 0xf34d, 0xf24f, 0xf34d, 0xf3a6, 0xf479, 0xf3a6, 0xf479, 0xf3cc, 0xf476, +0xf3cc, 0xf476, 0xf3cc, 0xf476, 0xf49f, 0xf522, 0xf49f, 0xf522, 0xf6af, 0xf70e, 0xf6af, +0xf70e, 0xf758, 0xf796, 0xf758, 0xf796, 0xf73e, 0xf761, 0xf73e, 0xf761, 0xf7ee, 0xf7f8, +0xf7ee, 0xf7f8, 0xf8a3, 0xf89a, 0xf8a3, 0xf89a, 0xf8a3, 0xf89a, 0xf835, 0xf81d, 0xf835, +0xf81d, 0xf6cd, 0xf6ab, 0xf6cd, 0xf6ab, 0xf840, 0xf818, 0xf840, 0xf818, 0xf8ea, 0xf8bf, +0xf8ea, 0xf8bf, 0xf7a2, 0xf779, 0xf7a2, 0xf779, 0xf7a2, 0xf779, 0xf92d, 0xf90a, 0xf92d, +0xf90a, 0xf909, 0xf8ee, 0xf909, 0xf8ee, 0xf7ea, 0xf7d8, 0xf7ea, 0xf7d8, 0xf73d, 0xf737, +0xf73d, 0xf737, 0xf58d, 0xf595, 0xf58d, 0xf595, 0xf4c9, 0xf4e0, 0xf4c9, 0xf4e0, 0xf4c9, +0xf4e0, 0xf41e, 0xf443, 0xf41e, 0xf443, 0xf45c, 0xf490, 0xf45c, 0xf490, 0xf4e1, 0xf524, +0xf4e1, 0xf524, 0xf5f0, 0xf641, 0xf5f0, 0xf641, 0xf834, 0xf891, 0xf834, 0xf891, 0xf834, +0xf891, 0xf8c1, 0xf92b, 0xf8c1, 0xf92b, 0xf9e4, 0xfa59, 0xf9e4, 0xfa59, 0xfab7, 0xfb35, +0xfab7, 0xfb35, 0xf961, 0xf9e7, 0xf961, 0xf9e7, 0xf913, 0xf99f, 0xf913, 0xf99f, 0xf910, +0xf99f, 0xf910, 0xf99f, 0xf910, 0xf99f, 0xf94e, 0xf9df, 0xf94e, 0xf9df, 0xf925, 0xf9b5, +0xf925, 0xf9b5, 0xf925, 0xf9b1, 0xf925, 0xf9b1, 0xfa42, 0xfac7, 0xfa42, 0xfac7, 0xf9e7, +0xfa63, 0xf9e7, 0xfa63, 0xf97b, 0xf9ea, 0xf97b, 0xf9ea, 0xf97b, 0xf9ea, 0xf8bc, 0xf91a, +0xf8bc, 0xf91a, 0xf721, 0xf76b, 0xf721, 0xf76b, 0xf68e, 0xf6c1, 0xf68e, 0xf6c1, 0xf6f1, +0xf709, 0xf6f1, 0xf709, 0xf7e7, 0xf7e2, 0xf7e7, 0xf7e2, 0xf7e7, 0xf7e2, 0xf81b, 0xf7f6, +0xf81b, 0xf7f6, 0xf8d8, 0xf890, 0xf8d8, 0xf890, 0xfa67, 0xf9fb, 0xfa67, 0xf9fb, 0xfa65, +0xf9d3, 0xfa65, 0xf9d3, 0xfb3d, 0xfa86, 0xfb3d, 0xfa86, 0xfc4a, 0xfb6d, 0xfc4a, 0xfb6d, +0xfc4a, 0xfb6d, 0xfbe9, 0xfae8, 0xfbe9, 0xfae8, 0xfc91, 0xfb6d, 0xfc91, 0xfb6d, 0xfd24, +0xfbe0, 0xfd24, 0xfbe0, 0xfe38, 0xfcd8, 0xfe38, 0xfcd8, 0xffea, 0xfe72, 0xffea, 0xfe72, +0xa2, 0xff16, 0xa2, 0xff16, 0xa2, 0xff16, 0x15a, 0xffbf, 0x15a, 0xffbf, 0x1be, +0x19, 0x1be, 0x19, 0x301, 0x158, 0x301, 0x158, 0x410, 0x269, 0x410, 0x269, +0x2f5, 0x154, 0x2f5, 0x154, 0x2f5, 0x154, 0x357, 0x1c1, 0x357, 0x1c1, 0x450, +0x2c9, 0x450, 0x2c9, 0x407, 0x293, 0x407, 0x293, 0x49a, 0x33c, 0x49a, 0x33c, +0x49f, 0x357, 0x49f, 0x357, 0x4aa, 0x379, 0x4aa, 0x379, 0x4aa, 0x379, 0x463, +0x349, 0x463, 0x349, 0x45e, 0x35a, 0x45e, 0x35a, 0x62a, 0x53a, 0x62a, 0x53a, +0x55b, 0x47b, 0x55b, 0x47b, 0x51f, 0x44c, 0x51f, 0x44c, 0x655, 0x58c, 0x655, +0x58c, 0x655, 0x58c, 0x54f, 0x489, 0x54f, 0x489, 0x597, 0x4d2, 0x597, 0x4d2, +0x664, 0x59b, 0x664, 0x59b, 0x6c7, 0x5f5, 0x6c7, 0x5f5, 0x746, 0x667, 0x746, +0x667, 0x746, 0x667, 0x7bc, 0x6cd, 0x7bc, 0x6cd, 0x904, 0x803, 0x904, 0x803, +0x9a7, 0x892, 0x9a7, 0x892, 0xb32, 0xa0a, 0xb32, 0xa0a, 0xcbf, 0xb82, 0xcbf, +0xb82, 0xcd9, 0xb89, 0xcd9, 0xb89, 0xcd9, 0xb89, 0xf09, 0xda9, 0xf09, 0xda9, +0x10ee, 0xf81, 0x10ee, 0xf81, 0x1128, 0xfb1, 0x1128, 0xfb1, 0x122c, 0x10b0, 0x122c, +0x10b0, 0x12c2, 0x1146, 0x12c2, 0x1146, 0x1330, 0x11ba, 0x1330, 0x11ba, 0x1330, 0x11ba, +0x1308, 0x119d, 0x1308, 0x119d, 0x122d, 0x10d2, 0x122d, 0x10d2, 0x11aa, 0x1065, 0x11aa, +0x1065, 0x110e, 0xfe5, 0x110e, 0xfe5, 0x115d, 0x1053, 0x115d, 0x1053, 0x115d, 0x1053, +0x111c, 0x1037, 0x111c, 0x1037, 0x105e, 0xfa2, 0x105e, 0xfa2, 0xfec, 0xf5c, 0xfec, +0xf5c, 0xe32, 0xdd0, 0xe32, 0xdd0, 0xc7f, 0xc4d, 0xc7f, 0xc4d, 0xa87, 0xa86, +0xa87, 0xa86, 0xa87, 0xa86, 0x936, 0x967, 0x936, 0x967, 0x884, 0x8e7, 0x884, +0x8e7, 0x753, 0x7e8, 0x753, 0x7e8, 0x7ee, 0x8b3, 0x7ee, 0x8b3, 0x7b8, 0x8ab, +0x7b8, 0x8ab, 0x66e, 0x78d, 0x66e, 0x78d, 0x66e, 0x78d, 0x5b0, 0x6f9, 0x5b0, +0x6f9, 0x3ce, 0x53d, 0x3ce, 0x53d, 0x20d, 0x3a0, 0x20d, 0x3a0, 0x1d, 0x1d0, +0x1d, 0x1d0, 0xfe35, 0x4, 0xfe35, 0x4, 0xfe35, 0x4, 0xfcf4, 0xfedb, 0xfcf4, +0xfedb, 0xfb95, 0xfd91, 0xfb95, 0xfd91, 0xfba6, 0xfdb2, 0xfba6, 0xfdb2, 0xfbca, 0xfde0, +0xfbca, 0xfde0, 0xfabe, 0xfcdb, 0xfabe, 0xfcdb, 0xfa50, 0xfc6f, 0xfa50, 0xfc6f, 0xfa50, +0xfc6f, 0xf954, 0xfb70, 0xf954, 0xfb70, 0xf792, 0xf9a7, 0xf792, 0xf9a7, 0xf694, 0xf89b, +0xf694, 0xf89b, 0xf5c2, 0xf7b7, 0xf5c2, 0xf7b7, 0xf5d3, 0xf7af, 0xf5d3, 0xf7af, 0xf588, +0xf747, 0xf588, 0xf747, 0xf588, 0xf747, 0xf5ab, 0xf748, 0xf5ab, 0xf748, 0xf77b, 0xf8f3, +0xf77b, 0xf8f3, 0xf6dc, 0xf829, 0xf6dc, 0xf829, 0xf663, 0xf780, 0xf663, 0xf780, 0xf6c0, +0xf7aa, 0xf6c0, 0xf7aa, 0xf6c0, 0xf7aa, 0xf6ac, 0xf760, 0xf6ac, 0xf760, 0xf820, 0xf89a, +0xf820, 0xf89a, 0xf89d, 0xf8db, 0xf89d, 0xf8db, 0xf9f7, 0xf9f7, 0xf9f7, 0xf9f7, 0xfcd5, +0xfc96, 0xfcd5, 0xfc96, 0xff31, 0xfeb3, 0xff31, 0xfeb3, 0xff31, 0xfeb3, 0x105, 0x47, +0x105, 0x47, 0x2a6, 0x1a8, 0x2a6, 0x1a8, 0x5c9, 0x48c, 0x5c9, 0x48c, 0x70a, +0x58f, 0x70a, 0x58f, 0x709, 0x553, 0x709, 0x553, 0x9cd, 0x7dd, 0x9cd, 0x7dd, +0x9cd, 0x7dd, 0xbfc, 0x9d3, 0xbfc, 0x9d3, 0xd46, 0xae9, 0xd46, 0xae9, 0xf76, +0xce7, 0xf76, 0xce7, 0x11b8, 0xef9, 0x11b8, 0xef9, 0x1384, 0x109a, 0x1384, 0x109a, +0x1384, 0x109a, 0x14cf, 0x11bd, 0x14cf, 0x11bd, 0x165b, 0x1325, 0x165b, 0x1325, 0x16ff, +0x13a8, 0x16ff, 0x13a8, 0x17a7, 0x1434, 0x17a7, 0x1434, 0x18fc, 0x1572, 0x18fc, 0x1572, +0x19e8, 0x164a, 0x19e8, 0x164a, 0x19e8, 0x164a, 0x1acb, 0x171e, 0x1acb, 0x171e, 0x1ab7, +0x1700, 0x1ab7, 0x1700, 0x1b74, 0x17b8, 0x1b74, 0x17b8, 0x1c38, 0x187b, 0x1c38, 0x187b, +0x1b56, 0x179e, 0x1b56, 0x179e, 0x1b2a, 0x177b, 0x1b2a, 0x177b, 0x1b2a, 0x177b, 0x1afd, +0x175c, 0x1afd, 0x175c, 0x1b23, 0x1795, 0x1b23, 0x1795, 0x1be1, 0x1869, 0x1be1, 0x1869, +0x1c14, 0x18b7, 0x1c14, 0x18b7, 0x1cc0, 0x1981, 0x1cc0, 0x1981, 0x1cc0, 0x1981, 0x1c73, +0x1954, 0x1c73, 0x1954, 0x1b08, 0x180c, 0x1b08, 0x180c, 0x1a30, 0x1758, 0x1a30, 0x1758, +0x18bd, 0x160a, 0x18bd, 0x160a, 0x1735, 0x14a8, 0x1735, 0x14a8, 0x1622, 0x13b9, 0x1622, +0x13b9, 0x1622, 0x13b9, 0x1565, 0x131f, 0x1565, 0x131f, 0x152e, 0x1309, 0x152e, 0x1309, +0x13fc, 0x11f6, 0x13fc, 0x11f6, 0x1327, 0x113d, 0x1327, 0x113d, 0x13dc, 0x120c, 0x13dc, +0x120c, 0x13dc, 0x120c, 0x1365, 0x11ab, 0x1365, 0x11ab, 0x1202, 0x105c, 0x1202, 0x105c, +0x108f, 0xefa, 0x108f, 0xefa, 0xefd, 0xd77, 0xefd, 0xd77, 0xd81, 0xc08, 0xd81, +0xc08, 0xac4, 0x957, 0xac4, 0x957, 0xac4, 0x957, 0xa4f, 0x8ee, 0xa4f, 0x8ee, +0xa87, 0x934, 0xa87, 0x934, 0x8cb, 0x786, 0x8cb, 0x786, 0x8de, 0x7aa, 0x8de, +0x7aa, 0x893, 0x775, 0x893, 0x775, 0x873, 0x76d, 0x873, 0x76d, 0x873, 0x76d, +0x836, 0x74e, 0x836, 0x74e, 0x6ef, 0x629, 0x6ef, 0x629, 0x645, 0x5a7, 0x645, +0x5a7, 0x4e4, 0x473, 0x4e4, 0x473, 0x42b, 0x3ec, 0x42b, 0x3ec, 0x42b, 0x3ec, +0x318, 0x310, 0x318, 0x310, 0x1c4, 0x1f6, 0x1c4, 0x1f6, 0x158, 0x1c8, 0x158, +0x1c8, 0xffcd, 0x7d, 0xffcd, 0x7d, 0xfe6d, 0xff5d, 0xfe6d, 0xff5d, 0xfd26, 0xfe56, +0xfd26, 0xfe56, 0xfd26, 0xfe56, 0xfae7, 0xfc54, 0xfae7, 0xfc54, 0xf8ec, 0xfa94, 0xf8ec, +0xfa94, 0xf762, 0xf941, 0xf762, 0xf941, 0xf6a2, 0xf8b2, 0xf6a2, 0xf8b2, 0xf60f, 0xf84a, +0xf60f, 0xf84a, 0xf5ae, 0xf80d, 0xf5ae, 0xf80d, 0xf5ae, 0xf80d, 0xf572, 0xf7ed, 0xf572, +0xf7ed, 0xf496, 0xf725, 0xf496, 0xf725, 0xf4b4, 0xf74d, 0xf4b4, 0xf74d, 0xf4a7, 0xf743, +0xf4a7, 0xf743, 0xf3ec, 0xf683, 0xf3ec, 0xf683, 0xf3ec, 0xf683, 0xf358, 0xf5e3, 0xf358, +0xf5e3, 0xf277, 0xf4f0, 0xf277, 0xf4f0, 0xf2a5, 0xf505, 0xf2a5, 0xf505, 0xf2be, 0xf503, +0xf2be, 0xf503, 0xf203, 0xf428, 0xf203, 0xf428, 0xf258, 0xf45c, 0xf258, 0xf45c, 0xf258, +0xf45c, 0xf1df, 0xf3c0, 0xf1df, 0xf3c0, 0xf0ba, 0xf279, 0xf0ba, 0xf279, 0xf0d9, 0xf277, +0xf0d9, 0xf277, 0xf0b7, 0xf237, 0xf0b7, 0xf237, 0xf0e6, 0xf24a, 0xf0e6, 0xf24a, 0xf0c3, +0xf20f, 0xf0c3, 0xf20f, 0xf0c3, 0xf20f, 0xf130, 0xf266, 0xf130, 0xf266, 0xf24a, 0xf36f, +0xf24a, 0xf36f, 0xf1f3, 0xf30b, 0xf1f3, 0xf30b, 0xf28f, 0xf39e, 0xf28f, 0xf39e, 0xf2cd, +0xf3d5, 0xf2cd, 0xf3d5, 0xf2cd, 0xf3d5, 0xf272, 0xf376, 0xf272, 0xf376, 0xf31d, 0xf420, +0xf31d, 0xf420, 0xf2cd, 0xf3d2, 0xf2cd, 0xf3d2, 0xf288, 0xf38f, 0xf288, 0xf38f, 0xf2e7, +0xf3f1, 0xf2e7, 0xf3f1, 0xf29d, 0xf3ab, 0xf29d, 0xf3ab, 0xf29d, 0xf3ab, 0xf243, 0xf355, +0xf243, 0xf355, 0xf141, 0xf258, 0xf141, 0xf258, 0xf094, 0xf1af, 0xf094, 0xf1af, 0xf073, +0xf193, 0xf073, 0xf193, 0xefde, 0xf103, 0xefde, 0xf103, 0xf13b, 0xf266, 0xf13b, 0xf266, +0xf13b, 0xf266, 0xf1c2, 0xf2f3, 0xf1c2, 0xf2f3, 0xf16d, 0xf2a6, 0xf16d, 0xf2a6, 0xf2bf, +0xf401, 0xf2bf, 0xf401, 0xf33b, 0xf488, 0xf33b, 0xf488, 0xf409, 0xf562, 0xf409, 0xf562, +0xf409, 0xf562, 0xf4a4, 0xf60c, 0xf4a4, 0xf60c, 0xf3b5, 0xf52f, 0xf3b5, 0xf52f, 0xf2ed, +0xf47a, 0xf2ed, 0xf47a, 0xf292, 0xf434, 0xf292, 0xf434, 0xf2b7, 0xf472, 0xf2b7, 0xf472, +0xf23f, 0xf411, 0xf23f, 0xf411, 0xf23f, 0xf411, 0xf174, 0xf360, 0xf174, 0xf360, 0xf1c5, +0xf3c9, 0xf1c5, 0xf3c9, 0xf112, 0xf32e, 0xf112, 0xf32e, 0xf0b8, 0xf2ea, 0xf0b8, 0xf2ea, +0xf197, 0xf3dd, 0xf197, 0xf3dd, 0xf19f, 0xf3f4, 0xf19f, 0xf3f4, 0xf19f, 0xf3f4, 0xf109, +0xf36b, 0xf109, 0xf36b, 0xf051, 0xf2ba, 0xf051, 0xf2ba, 0xf0e3, 0xf34e, 0xf0e3, 0xf34e, +0xf0c0, 0xf328, 0xf0c0, 0xf328, 0xef8e, 0xf1ed, 0xef8e, 0xf1ed, 0xef8e, 0xf1ed, 0xeefb, +0xf14a, 0xeefb, 0xf14a, 0xeee0, 0xf11b, 0xeee0, 0xf11b, 0xefd1, 0xf1f3, 0xefd1, 0xf1f3, +0xf084, 0xf28a, 0xf084, 0xf28a, 0xf188, 0xf36c, 0xf188, 0xf36c, 0xf238, 0xf3f9, 0xf238, +0xf3f9, 0xf238, 0xf3f9, 0xf1bc, 0xf359, 0xf1bc, 0xf359, 0xf2e2, 0xf459, 0xf2e2, 0xf459, +0xf420, 0xf573, 0xf420, 0xf573, 0xf409, 0xf538, 0xf409, 0xf538, 0xf467, 0xf575, 0xf467, +0xf575, 0xf495, 0xf585, 0xf495, 0xf585, 0xf495, 0xf585, 0xf580, 0xf656, 0xf580, 0xf656, +0xf72d, 0xf7ed, 0xf72d, 0xf7ed, 0xf8ef, 0xf99d, 0xf8ef, 0xf99d, 0xfa5d, 0xfaff, 0xfa5d, +0xfaff, 0xfa2e, 0xfac7, 0xfa2e, 0xfac7, 0xfa2e, 0xfac7, 0xfa33, 0xfac8, 0xfa33, 0xfac8, +0xf99c, 0xfa30, 0xf99c, 0xfa30, 0xf8e3, 0xf97a, 0xf8e3, 0xf97a, 0xf93e, 0xf9da, 0xf93e, +0xf9da, 0xf8b4, 0xf957, 0xf8b4, 0xf957, 0xf8c1, 0xf96d, 0xf8c1, 0xf96d, 0xf8c1, 0xf96d, +0xf9b6, 0xfa6b, 0xf9b6, 0xfa6b, 0xf937, 0xf9f4, 0xf937, 0xf9f4, 0xf884, 0xf94a, 0xf884, +0xf94a, 0xf889, 0xf956, 0xf889, 0xf956, 0xf79e, 0xf870, 0xf79e, 0xf870, 0xf5eb, 0xf6c1, +0xf5eb, 0xf6c1, 0xf5eb, 0xf6c1, 0xf48d, 0xf564, 0xf48d, 0xf564, 0xf4c1, 0xf598, 0xf4c1, +0xf598, 0xf416, 0xf4ec, 0xf416, 0xf4ec, 0xf383, 0xf456, 0xf383, 0xf456, 0xf637, 0xf707, +0xf637, 0xf707, 0xf637, 0xf707, 0xf799, 0xf864, 0xf799, 0xf864, 0xf77e, 0xf844, 0xf77e, +0xf844, 0xf801, 0xf8c2, 0xf801, 0xf8c2, 0xf7e6, 0xf8a3, 0xf7e6, 0xf8a3, 0xf7ca, 0xf883, +0xf7ca, 0xf883, 0xf736, 0xf7eb, 0xf736, 0xf7eb, 0xf736, 0xf7eb, 0xf6d2, 0xf784, 0xf6d2, +0xf784, 0xf758, 0xf808, 0xf758, 0xf808, 0xf7f5, 0xf8a3, 0xf7f5, 0xf8a3, 0xf8d8, 0xf983, +0xf8d8, 0xf983, 0xf892, 0xf93b, 0xf892, 0xf93b, 0xf874, 0xf919, 0xf874, 0xf919, 0xf874, +0xf919, 0xf88f, 0xf92f, 0xf88f, 0xf92f, 0xf7c3, 0xf85c, 0xf7c3, 0xf85c, 0xf85e, 0xf8ef, +0xf85e, 0xf8ef, 0xf8c2, 0xf948, 0xf8c2, 0xf948, 0xf96b, 0xf9e2, 0xf96b, 0xf9e2, 0xf96b, +0xf9e2, 0xfa0c, 0xfa72, 0xfa0c, 0xfa72, 0xfaaf, 0xfb00, 0xfaaf, 0xfb00, 0xfc9e, 0xfcd8, +0xfc9e, 0xfcd8, 0xfd50, 0xfd70, 0xfd50, 0xfd70, 0xfe41, 0xfe46, 0xfe41, 0xfe46, 0xfea1, +0xfe88, 0xfea1, 0xfe88, 0xfea1, 0xfe88, 0xfe7a, 0xfe44, 0xfe7a, 0xfe44, 0xffe0, 0xff8c, +0xffe0, 0xff8c, 0x168, 0xf7, 0x168, 0xf7, 0x320, 0x293, 0x320, 0x293, 0x399, +0x2f5, 0x399, 0x2f5, 0x399, 0x2f5, 0x421, 0x367, 0x421, 0x367, 0x644, 0x579, +0x644, 0x579, 0x65d, 0x586, 0x65d, 0x586, 0x570, 0x492, 0x570, 0x492, 0x50b, +0x42a, 0x50b, 0x42a, 0x46a, 0x38d, 0x46a, 0x38d, 0x46a, 0x38d, 0x486, 0x3b1, +0x486, 0x3b1, 0x53b, 0x472, 0x53b, 0x472, 0x6e7, 0x62d, 0x6e7, 0x62d, 0x78a, +0x6e3, 0x78a, 0x6e3, 0x6e2, 0x64f, 0x6e2, 0x64f, 0x788, 0x70a, 0x788, 0x70a, +0x788, 0x70a, 0x7a1, 0x738, 0x7a1, 0x738, 0x71f, 0x6c9, 0x71f, 0x6c9, 0x73c, +0x6f6, 0x73c, 0x6f6, 0x637, 0x5fe, 0x637, 0x5fe, 0x59b, 0x569, 0x59b, 0x569, +0x59b, 0x569, 0x614, 0x5e4, 0x614, 0x5e4, 0x5c7, 0x594, 0x5c7, 0x594, 0x613, +0x5d6, 0x613, 0x5d6, 0x644, 0x5f7, 0x644, 0x5f7, 0x5fe, 0x59c, 0x5fe, 0x59c, +0x57d, 0x500, 0x57d, 0x500, 0x57d, 0x500, 0x536, 0x49a, 0x536, 0x49a, 0x61e, +0x55e, 0x61e, 0x55e, 0x56d, 0x487, 0x56d, 0x487, 0x5b4, 0x4a7, 0x5b4, 0x4a7, +0x816, 0x6e1, 0x816, 0x6e1, 0x912, 0x7b6, 0x912, 0x7b6, 0x912, 0x7b6, 0xac0, +0x940, 0xac0, 0x940, 0xd2f, 0xb8f, 0xd2f, 0xb8f, 0xe1c, 0xc5f, 0xe1c, 0xc5f, +0xeb8, 0xce4, 0xeb8, 0xce4, 0xf5d, 0xd79, 0xf5d, 0xd79, 0xf5d, 0xd79, 0xf6a, +0xd7c, 0xf6a, 0xd7c, 0xe95, 0xca5, 0xe95, 0xca5, 0xe20, 0xc34, 0xe20, 0xc34, +0xe95, 0xcb4, 0xe95, 0xcb4, 0xe2e, 0xc5e, 0xe2e, 0xc5e, 0xeb7, 0xcfe, 0xeb7, +0xcfe, 0xeb7, 0xcfe, 0xf9f, 0xe04, 0xf9f, 0xe04, 0xf48, 0xdce, 0xf48, 0xdce, +0xed2, 0xd7d, 0xed2, 0xd7d, 0xd9c, 0xc71, 0xd9c, 0xc71, 0xc6e, 0xb6d, 0xc6e, +0xb6d, 0xaca, 0x9f5, 0xaca, 0x9f5, 0xaca, 0x9f5, 0x9a7, 0x8fe, 0x9a7, 0x8fe, +0x9bf, 0x943, 0x9bf, 0x943, 0x917, 0x8c7, 0x917, 0x8c7, 0x8cc, 0x8a6, 0x8cc, +0x8a6, 0x8a4, 0x8a6, 0x8a4, 0x8a6, 0x8a4, 0x8a6, 0x87f, 0x8a9, 0x87f, 0x8a9, +0x839, 0x888, 0x839, 0x888, 0x6c7, 0x739, 0x6c7, 0x739, 0x4f0, 0x582, 0x4f0, +0x582, 0x277, 0x328, 0x277, 0x328, 0xaf, 0x17d, 0xaf, 0x17d, 0xaf, 0x17d, +0xff73, 0x5b, 0xff73, 0x5b, 0xfdba, 0xfebb, 0xfdba, 0xfebb, 0xfce6, 0xfdfe, 0xfce6, +0xfdfe, 0xfbc9, 0xfcf6, 0xfbc9, 0xfcf6, 0xfa77, 0xfbb6, 0xfa77, 0xfbb6, 0xf9c7, 0xfb15, +0xf9c7, 0xfb15, 0xf9c7, 0xfb15, 0xf95d, 0xfab8, 0xf95d, 0xfab8, 0xf93e, 0xfaa3, 0xf93e, +0xfaa3, 0xf872, 0xf9de, 0xf872, 0xf9de, 0xf7c2, 0xf930, 0xf7c2, 0xf930, 0xf7e1, 0xf94e, +0xf7e1, 0xf94e, 0xf7e1, 0xf94e, 0xf77b, 0xf8e2, 0xf77b, 0xf8e2, 0xf6e2, 0xf83e, 0xf6e2, +0xf83e, 0xf655, 0xf7a0, 0xf655, 0xf7a0, 0xf4de, 0xf614, 0xf4de, 0xf614, 0xf47c, 0xf597, +0xf47c, 0xf597, 0xf506, 0xf600, 0xf506, 0xf600, 0xf506, 0xf600, 0xf497, 0xf56b, 0xf497, +0xf56b, 0xf4ca, 0xf572, 0xf4ca, 0xf572, 0xf637, 0xf6af, 0xf637, 0xf6af, 0xf83b, 0xf880, +0xf83b, 0xf880, 0xf946, 0xf953, 0xf946, 0xf953, 0xfa89, 0xfa5b, 0xfa89, 0xfa5b, 0xfa89, +0xfa5b, 0xfcc7, 0xfc5b, 0xfcc7, 0xfc5b, 0xfd3f, 0xfc94, 0xfd3f, 0xfc94, 0xfe20, 0xfd35, +0xfe20, 0xfd35, 0x60, 0xff36, 0x60, 0xff36, 0x223, 0xba, 0x223, 0xba, 0x223, +0xba, 0x436, 0x290, 0x436, 0x290, 0x64d, 0x46c, 0x64d, 0x46c, 0x81b, 0x602, +0x81b, 0x602, 0xa21, 0x7d4, 0xa21, 0x7d4, 0xbec, 0x96e, 0xbec, 0x96e, 0xd69, +0xabe, 0xd69, 0xabe, 0xd69, 0xabe, 0xeb7, 0xbe4, 0xeb7, 0xbe4, 0x1043, 0xd4d, +0x1043, 0xd4d, 0x1151, 0xe3c, 0x1151, 0xe3c, 0x11e7, 0xeb8, 0x11e7, 0xeb8, 0x1413, +0x10ce, 0x1413, 0x10ce, 0x160c, 0x12b6, 0x160c, 0x12b6, 0x160c, 0x12b6, 0x173d, 0x13dc, +0x173d, 0x13dc, 0x1894, 0x152a, 0x1894, 0x152a, 0x198c, 0x161e, 0x198c, 0x161e, 0x1a99, +0x172a, 0x1a99, 0x172a, 0x1adb, 0x1770, 0x1adb, 0x1770, 0x1adb, 0x1770, 0x1bb6, 0x1851, +0x1bb6, 0x1851, 0x1ce2, 0x1987, 0x1ce2, 0x1987, 0x1d60, 0x1a11, 0x1d60, 0x1a11, 0x1e52, +0x1b11, 0x1e52, 0x1b11, 0x1e99, 0x1b6a, 0x1e99, 0x1b6a, 0x1ec4, 0x1ba7, 0x1ec4, 0x1ba7, +0x1ec4, 0x1ba7, 0x1e9e, 0x1b96, 0x1e9e, 0x1b96, 0x1e67, 0x1b74, 0x1e67, 0x1b74, 0x1dd5, +0x1af9, 0x1dd5, 0x1af9, 0x1bdc, 0x1917, 0x1bdc, 0x1917, 0x1b3e, 0x188f, 0x1b3e, 0x188f, +0x1a83, 0x17eb, 0x1a83, 0x17eb, 0x1a83, 0x17eb, 0x18b0, 0x162f, 0x18b0, 0x162f, 0x1790, +0x1524, 0x1790, 0x1524, 0x160d, 0x13b5, 0x160d, 0x13b5, 0x156b, 0x1327, 0x156b, 0x1327, +0x1585, 0x1353, 0x1585, 0x1353, 0x1585, 0x1353, 0x14d2, 0x12b1, 0x14d2, 0x12b1, 0x1434, +0x1223, 0x1434, 0x1223, 0x1327, 0x1124, 0x1327, 0x1124, 0x11d7, 0xfe2, 0x11d7, 0xfe2, +0x10a3, 0xebb, 0x10a3, 0xebb, 0xed9, 0xcff, 0xed9, 0xcff, 0xed9, 0xcff, 0xd5b, +0xb8f, 0xd5b, 0xb8f, 0xb96, 0x9da, 0xb96, 0x9da, 0x99e, 0x7f4, 0x99e, 0x7f4, +0x976, 0x7e0, 0x976, 0x7e0, 0x927, 0x7a7, 0x927, 0x7a7, 0x883, 0x71d, 0x883, +0x71d, 0x883, 0x71d, 0x85f, 0x717, 0x85f, 0x717, 0x7c9, 0x6a4, 0x7c9, 0x6a4, +0x702, 0x604, 0x702, 0x604, 0x4fc, 0x429, 0x4fc, 0x429, 0x3df, 0x33b, 0x3df, +0x33b, 0x3df, 0x33b, 0x2a6, 0x235, 0x2a6, 0x235, 0xff97, 0xff5c, 0xff97, 0xff5c, +0xfed3, 0xfecf, 0xfed3, 0xfecf, 0xfede, 0xff14, 0xfede, 0xff14, 0xfd6d, 0xfddd, 0xfd6d, +0xfddd, 0xfb34, 0xfbde, 0xfb34, 0xfbde, 0xfb34, 0xfbde, 0xf8c5, 0xf9a6, 0xf8c5, 0xf9a6, +0xf733, 0xf848, 0xf733, 0xf848, 0xf5f5, 0xf73a, 0xf5f5, 0xf73a, 0xf468, 0xf5d9, 0xf468, +0xf5d9, 0xf304, 0xf499, 0xf304, 0xf499, 0xf304, 0xf499, 0xf225, 0xf3d9, 0xf225, 0xf3d9, +0xf23b, 0xf405, 0xf23b, 0xf405, 0xf24f, 0xf427, 0xf24f, 0xf427, 0xf1f2, 0xf3d1, 0xf1f2, +0xf3d1, 0xf229, 0xf406, 0xf229, 0xf406, 0xf1b3, 0xf386, 0xf1b3, 0xf386, 0xf1b3, 0xf386, +0xf14a, 0xf30c, 0xf14a, 0xf30c, 0xf14b, 0xf2f7, 0xf14b, 0xf2f7, 0xf188, 0xf318, 0xf188, +0xf318, 0xf2ae, 0xf41d, 0xf2ae, 0xf41d, 0xf32f, 0xf47c, 0xf32f, 0xf47c, 0xf3af, 0xf4d7, +0xf3af, 0xf4d7, 0xf3af, 0xf4d7, 0xf41f, 0xf522, 0xf41f, 0xf522, 0xf445, 0xf524, 0xf445, +0xf524, 0xf460, 0xf51e, 0xf460, 0xf51e, 0xf3e7, 0xf487, 0xf3e7, 0xf487, 0xf3c7, 0xf44c, +0xf3c7, 0xf44c, 0xf3c7, 0xf44c, 0xf434, 0xf4a4, 0xf434, 0xf4a4, 0xf57e, 0xf5df, 0xf57e, +0xf5df, 0xf634, 0xf68b, 0xf634, 0xf68b, 0xf60b, 0xf65e, 0xf60b, 0xf65e, 0xf769, 0xf7bd, +0xf769, 0xf7bd, 0xf83f, 0xf89a, 0xf83f, 0xf89a, 0xf83f, 0xf89a, 0xf846, 0xf8ac, 0xf846, +0xf8ac, 0xf8d2, 0xf949, 0xf8d2, 0xf949, 0xf806, 0xf891, 0xf806, 0xf891, 0xf702, 0xf7a3, +0xf702, 0xf7a3, 0xf6e2, 0xf79a, 0xf6e2, 0xf79a, 0xf72e, 0xf800, 0xf72e, 0xf800, 0xf72e, +0xf800, 0xf73b, 0xf828, 0xf73b, 0xf828, 0xf6be, 0xf7c5, 0xf6be, 0xf7c5, 0xf6a0, 0xf7c2, +0xf6a0, 0xf7c2, 0xf652, 0xf78e, 0xf652, 0xf78e, 0xf56f, 0xf6c5, 0xf56f, 0xf6c5, 0xf56f, +0xf6c5, 0xf4d3, 0xf642, 0xf4d3, 0xf642, 0xf43d, 0xf5c4, 0xf43d, 0xf5c4, 0xf40c, 0xf5ab, +0xf40c, 0xf5ab, 0xf55f, 0xf715, 0xf55f, 0xf715, 0xf60f, 0xf7de, 0xf60f, 0xf7de, 0xf5fb, +0xf7e2, 0xf5fb, 0xf7e2, 0xf5fb, 0xf7e2, 0xf5f9, 0xf7fb, 0xf5f9, 0xf7fb, 0xf62d, 0xf84a, +0xf62d, 0xf84a, 0xf655, 0xf88e, 0xf655, 0xf88e, 0xf515, 0xf76c, 0xf515, 0xf76c, 0xf46d, +0xf6e2, 0xf46d, 0xf6e2, 0xf341, 0xf5d7, 0xf341, 0xf5d7, 0xf341, 0xf5d7, 0xf146, 0xf3fc, +0xf146, 0xf3fc, 0xf0d0, 0xf3a7, 0xf0d0, 0xf3a7, 0xf0e0, 0xf3d6, 0xf0e0, 0xf3d6, 0xf0d8, +0xf3ec, 0xf0d8, 0xf3ec, 0xf0f2, 0xf422, 0xf0f2, 0xf422, 0xf0f2, 0xf422, 0xf0a1, 0xf3eb, +0xf0a1, 0xf3eb, 0xf00d, 0xf36b, 0xf00d, 0xf36b, 0xf00d, 0xf37a, 0xf00d, 0xf37a, 0xef64, +0xf2dc, 0xef64, 0xf2dc, 0xede2, 0xf15d, 0xede2, 0xf15d, 0xeca9, 0xf022, 0xeca9, 0xf022, +0xeca9, 0xf022, 0xec3a, 0xefa9, 0xec3a, 0xefa9, 0xec12, 0xef71, 0xec12, 0xef71, 0xec98, +0xefe1, 0xec98, 0xefe1, 0xed92, 0xf0bd, 0xed92, 0xf0bd, 0xeda6, 0xf0af, 0xeda6, 0xf0af, +0xee18, 0xf0f9, 0xee18, 0xf0f9, 0xee18, 0xf0f9, 0xef60, 0xf216, 0xef60, 0xf216, 0xf11f, +0xf3a7, 0xf11f, 0xf3a7, 0xf1e0, 0xf439, 0xf1e0, 0xf439, 0xf20f, 0xf437, 0xf20f, 0xf437, +0xf341, 0xf53b, 0xf341, 0xf53b, 0xf341, 0xf53b, 0xf4c6, 0xf692, 0xf4c6, 0xf692, 0xf647, +0xf7e8, 0xf647, 0xf7e8, 0xf747, 0xf8c2, 0xf747, 0xf8c2, 0xf889, 0xf9e1, 0xf889, 0xf9e1, +0xf98e, 0xfac7, 0xf98e, 0xfac7, 0xf9ac, 0xfacc, 0xf9ac, 0xfacc, 0xf9ac, 0xfacc, 0xfaea, +0xfbf6, 0xfaea, 0xfbf6, 0xfb85, 0xfc82, 0xfb85, 0xfc82, 0xfb09, 0xfbfb, 0xfb09, 0xfbfb, +0xfb7f, 0xfc6a, 0xfb7f, 0xfc6a, 0xfb29, 0xfc10, 0xfb29, 0xfc10, 0xfb49, 0xfc2f, 0xfb49, +0xfc2f, 0xfb49, 0xfc2f, 0xfb8a, 0xfc72, 0xfb8a, 0xfc72, 0xfa73, 0xfb5e, 0xfa73, 0xfb5e, +0xf98d, 0xfa7b, 0xf98d, 0xfa7b, 0xf86e, 0xf95f, 0xf86e, 0xf95f, 0xf795, 0xf889, 0xf795, +0xf889, 0xf795, 0xf889, 0xf6c0, 0xf7b7, 0xf6c0, 0xf7b7, 0xf5da, 0xf6d2, 0xf5da, 0xf6d2, +0xf566, 0xf65e, 0xf566, 0xf65e, 0xf546, 0xf63d, 0xf546, 0xf63d, 0xf638, 0xf72c, 0xf638, +0xf72c, 0xf756, 0xf846, 0xf756, 0xf846, 0xf756, 0xf846, 0xf69f, 0xf78b, 0xf69f, 0xf78b, +0xf67e, 0xf765, 0xf67e, 0xf765, 0xf754, 0xf837, 0xf754, 0xf837, 0xf6ad, 0xf78c, 0xf6ad, +0xf78c, 0xf661, 0xf73c, 0xf661, 0xf73c, 0xf666, 0xf73e, 0xf666, 0xf73e, 0xf666, 0xf73e, +0xf746, 0xf81b, 0xf746, 0xf81b, 0xf77d, 0xf850, 0xf77d, 0xf850, 0xf6c9, 0xf79c, 0xf6c9, +0xf79c, 0xf731, 0xf803, 0xf731, 0xf803, 0xf5b4, 0xf686, 0xf5b4, 0xf686, 0xf5b4, 0xf686, +0xf444, 0xf515, 0xf444, 0xf515, 0xf4c1, 0xf590, 0xf4c1, 0xf590, 0xf500, 0xf5cc, 0xf500, +0xf5cc, 0xf4d4, 0xf59a, 0xf4d4, 0xf59a, 0xf4a0, 0xf560, 0xf4a0, 0xf560, 0xf537, 0xf5eb, +0xf537, 0xf5eb, 0xf537, 0xf5eb, 0xf687, 0xf72e, 0xf687, 0xf72e, 0xf772, 0xf808, 0xf772, +0xf808, 0xf820, 0xf8a2, 0xf820, 0xf8a2, 0xf833, 0xf89d, 0xf833, 0xf89d, 0xf8bf, 0xf90e, +0xf8bf, 0xf90e, 0xf96c, 0xf99d, 0xf96c, 0xf99d, 0xf96c, 0xf99d, 0xf93f, 0xf951, 0xf93f, +0xf951, 0xfb5d, 0xfb4f, 0xfb5d, 0xfb4f, 0xfd71, 0xfd42, 0xfd71, 0xfd42, 0xfe9e, 0xfe4f, +0xfe9e, 0xfe4f, 0xb6, 0x47, 0xb6, 0x47, 0xb6, 0x47, 0x28a, 0x1fe, 0x28a, +0x1fe, 0x440, 0x399, 0x440, 0x399, 0x49e, 0x3e1, 0x49e, 0x3e1, 0x4ab, 0x3dc, +0x4ab, 0x3dc, 0x503, 0x425, 0x503, 0x425, 0x510, 0x429, 0x510, 0x429, 0x510, +0x429, 0x643, 0x556, 0x643, 0x556, 0x735, 0x647, 0x735, 0x647, 0x7c9, 0x6dd, +0x7c9, 0x6dd, 0x896, 0x7b0, 0x896, 0x7b0, 0x92e, 0x84f, 0x92e, 0x84f, 0xac1, +0x9eb, 0xac1, 0x9eb, 0xac1, 0x9eb, 0xaad, 0x9df, 0xaad, 0x9df, 0x9f2, 0x92b, +0x9f2, 0x92b, 0xa8f, 0x9ce, 0xa8f, 0x9ce, 0x9d5, 0x916, 0x9d5, 0x916, 0x955, +0x896, 0x955, 0x896, 0x955, 0x896, 0x909, 0x844, 0x909, 0x844, 0x81c, 0x74d, +0x81c, 0x74d, 0x721, 0x644, 0x721, 0x644, 0x61c, 0x52b, 0x61c, 0x52b, 0x646, +0x53d, 0x646, 0x53d, 0x6ef, 0x5cc, 0x6ef, 0x5cc, 0x6ef, 0x5cc, 0x6c9, 0x588, +0x6c9, 0x588, 0x6d4, 0x573, 0x6d4, 0x573, 0x6eb, 0x56a, 0x6eb, 0x56a, 0x700, +0x561, 0x700, 0x561, 0x7a2, 0x5e5, 0x7a2, 0x5e5, 0x7a2, 0x5e5, 0x834, 0x65e, +0x834, 0x65e, 0xa57, 0x86c, 0xa57, 0x86c, 0xb7e, 0x984, 0xb7e, 0x984, 0xb84, +0x981, 0xb84, 0x981, 0xce5, 0xae2, 0xce5, 0xae2, 0xdb3, 0xbb7, 0xdb3, 0xbb7, +0xdb3, 0xbb7, 0xe6f, 0xc82, 0xe6f, 0xc82, 0xe3b, 0xc64, 0xe3b, 0xc64, 0xdee, +0xc35, 0xdee, 0xc35, 0xdd7, 0xc43, 0xdd7, 0xc43, 0xc30, 0xac7, 0xc30, 0xac7, +0xb6b, 0xa31, 0xb6b, 0xa31, 0xb6b, 0xa31, 0xb91, 0xa8b, 0xb91, 0xa8b, 0xb32, +0xa62, 0xb32, 0xa62, 0xab3, 0xa1a, 0xab3, 0xa1a, 0x9b8, 0x956, 0x9b8, 0x956, +0x907, 0x8da, 0x907, 0x8da, 0x907, 0x8da, 0x8a6, 0x8ad, 0x8a6, 0x8ad, 0x7e0, +0x818, 0x7e0, 0x818, 0x6bd, 0x720, 0x6bd, 0x720, 0x531, 0x5bd, 0x531, 0x5bd, +0x55a, 0x609, 0x55a, 0x609, 0x572, 0x63f, 0x572, 0x63f, 0x572, 0x63f, 0x483, +0x56a, 0x483, 0x56a, 0x435, 0x533, 0x435, 0x533, 0x2eb, 0x3fb, 0x2eb, 0x3fb, +0x1a8, 0x2c8, 0x1a8, 0x2c8, 0x7d, 0x1aa, 0x7d, 0x1aa, 0xff30, 0x67, 0xff30, +0x67, 0xff30, 0x67, 0xfe89, 0xffca, 0xfe89, 0xffca, 0xfe24, 0xff6e, 0xfe24, 0xff6e, +0xfdf3, 0xff44, 0xfdf3, 0xff44, 0xfccc, 0xfe26, 0xfccc, 0xfe26, 0xfc86, 0xfde8, 0xfc86, +0xfde8, 0xfc86, 0xfde8, 0xfd01, 0xfe6a, 0xfd01, 0xfe6a, 0xfbd5, 0xfd44, 0xfbd5, 0xfd44, +0xfb42, 0xfcb6, 0xfb42, 0xfcb6, 0xfb13, 0xfc8b, 0xfb13, 0xfc8b, 0xfb59, 0xfcd1, 0xfb59, +0xfcd1, 0xfbdf, 0xfd55, 0xfbdf, 0xfd55, 0xfbdf, 0xfd55, 0xfac7, 0xfc35, 0xfac7, 0xfc35, +0xfa5b, 0xfbbc, 0xfa5b, 0xfbbc, 0xf9ff, 0xfb4f, 0xf9ff, 0xfb4f, 0xf95c, 0xfa93, 0xf95c, +0xfa93, 0xf8f7, 0xfa0d, 0xf8f7, 0xfa0d, 0xf7fb, 0xf8ea, 0xf7fb, 0xf8ea, 0xf7fb, 0xf8ea, +0xf736, 0xf7f7, 0xf736, 0xf7f7, 0xf6c2, 0xf74e, 0xf6c2, 0xf74e, 0xf7c0, 0xf810, 0xf7c0, +0xf810, 0xf9d9, 0xf9e7, 0xf9d9, 0xf9e7, 0xfbc2, 0xfb89, 0xfbc2, 0xfb89, 0xfbc2, 0xfb89, +0xfdd2, 0xfd4d, 0xfdd2, 0xfd4d, 0xffb8, 0xfee5, 0xffb8, 0xfee5, 0xdb, 0xffb8, 0xdb, +0xffb8, 0x223, 0xb1, 0x223, 0xb1, 0x356, 0x196, 0x356, 0x196, 0x46e, 0x262, +0x46e, 0x262, 0x46e, 0x262, 0x626, 0x3d2, 0x626, 0x3d2, 0x760, 0x4c9, 0x760, +0x4c9, 0x93a, 0x667, 0x93a, 0x667, 0xb2a, 0x820, 0xb2a, 0x820, 0xd08, 0x9d0, +0xd08, 0x9d0, 0xf53, 0xbf3, 0xf53, 0xbf3, 0xf53, 0xbf3, 0xfb3, 0xc34, 0xfb3, +0xc34, 0xfd1, 0xc39, 0xfd1, 0xc39, 0x1063, 0xcba, 0x1063, 0xcba, 0x10ec, 0xd39, +0x10ec, 0xd39, 0x1278, 0xebf, 0x1278, 0xebf, 0x1278, 0xebf, 0x13f8, 0x1040, 0x13f8, +0x1040, 0x158a, 0x11d7, 0x158a, 0x11d7, 0x16cc, 0x1321, 0x16cc, 0x1321, 0x174e, 0x13af, +0x174e, 0x13af, 0x189e, 0x150d, 0x189e, 0x150d, 0x19df, 0x165d, 0x19df, 0x165d, 0x19df, +0x165d, 0x1aef, 0x177d, 0x1aef, 0x177d, 0x1b5c, 0x17fb, 0x1b5c, 0x17fb, 0x1af8, 0x17a8, +0x1af8, 0x17a8, 0x1bf8, 0x18b9, 0x1bf8, 0x18b9, 0x1c43, 0x1916, 0x1c43, 0x1916, 0x1c52, +0x1936, 0x1c52, 0x1936, 0x1c52, 0x1936, 0x1d34, 0x1a2a, 0x1d34, 0x1a2a, 0x1d35, 0x1a3e, +0x1d35, 0x1a3e, 0x1d91, 0x1aae, 0x1d91, 0x1aae, 0x1d26, 0x1a57, 0x1d26, 0x1a57, 0x1c4f, +0x1996, 0x1c4f, 0x1996, 0x1c4f, 0x1996, 0x1b56, 0x18b5, 0x1b56, 0x18b5, 0x19eb, 0x1763, +0x19eb, 0x1763, 0x19c6, 0x1759, 0x19c6, 0x1759, 0x197e, 0x172c, 0x197e, 0x172c, 0x19f0, +0x17bc, 0x19f0, 0x17bc, 0x1a0d, 0x17f7, 0x1a0d, 0x17f7, 0x1a0d, 0x17f7, 0x186f, 0x1678, +0x186f, 0x1678, 0x17d3, 0x15fc, 0x17d3, 0x15fc, 0x16ba, 0x1501, 0x16ba, 0x1501, 0x15c1, +0x1425, 0x15c1, 0x1425, 0x150c, 0x138d, 0x150c, 0x138d, 0x12ef, 0x118b, 0x12ef, 0x118b, +0x12ef, 0x118b, 0x114f, 0x1003, 0x114f, 0x1003, 0xfc5, 0xe8f, 0xfc5, 0xe8f, 0xec4, +0xda0, 0xec4, 0xda0, 0xe19, 0xd06, 0xe19, 0xd06, 0xcca, 0xbc3, 0xcca, 0xbc3, +0xcca, 0xbc3, 0xb9c, 0xaa0, 0xb9c, 0xaa0, 0x9f7, 0x903, 0x9f7, 0x903, 0x912, +0x823, 0x912, 0x823, 0x924, 0x839, 0x924, 0x839, 0x863, 0x779, 0x863, 0x779, +0x739, 0x650, 0x739, 0x650, 0x739, 0x650, 0x5c7, 0x4df, 0x5c7, 0x4df, 0x471, +0x387, 0x471, 0x387, 0x3e2, 0x2f9, 0x3e2, 0x2f9, 0x21d, 0x134, 0x21d, 0x134, +0x50, 0xff67, 0x50, 0xff67, 0xff5f, 0xfe77, 0xff5f, 0xfe77, 0xff5f, 0xfe77, 0xfe01, +0xfd1c, 0xfe01, 0xfd1c, 0xfd1b, 0xfc38, 0xfd1b, 0xfc38, 0xfba6, 0xfac6, 0xfba6, 0xfac6, +0xfb0c, 0xfa30, 0xfb0c, 0xfa30, 0xfacf, 0xf9f6, 0xfacf, 0xf9f6, 0xfacf, 0xf9f6, 0xf959, +0xf883, 0xf959, 0xf883, 0xf906, 0xf832, 0xf906, 0xf832, 0xf884, 0xf7b1, 0xf884, 0xf7b1, +0xf786, 0xf6b4, 0xf786, 0xf6b4, 0xf733, 0xf65f, 0xf733, 0xf65f, 0xf74d, 0xf677, 0xf74d, +0xf677, 0xf74d, 0xf677, 0xf7b2, 0xf6da, 0xf7b2, 0xf6da, 0xf7ec, 0xf710, 0xf7ec, 0xf710, +0xf8a4, 0xf7c4, 0xf8a4, 0xf7c4, 0xf972, 0xf88e, 0xf972, 0xf88e, 0xf9d6, 0xf8ef, 0xf9d6, +0xf8ef, 0xfaa9, 0xf9bf, 0xfaa9, 0xf9bf, 0xfaa9, 0xf9bf, 0xfa94, 0xf9aa, 0xfa94, 0xf9aa, +0xfa14, 0xf92d, 0xfa14, 0xf92d, 0xfa4a, 0xf96a, 0xfa4a, 0xf96a, 0xf992, 0xf8bd, 0xf992, +0xf8bd, 0xf8b3, 0xf7ee, 0xf8b3, 0xf7ee, 0xf8b3, 0xf7ee, 0xf844, 0xf795, 0xf844, 0xf795, +0xf89f, 0xf80c, 0xf89f, 0xf80c, 0xf921, 0xf8b0, 0xf921, 0xf8b0, 0xf926, 0xf8de, 0xf926, +0xf8de, 0xfa31, 0xfa17, 0xfa31, 0xfa17, 0xfa86, 0xfaa2, 0xfa86, 0xfaa2, 0xfa86, 0xfaa2, +0xfa54, 0xfaaa, 0xfa54, 0xfaaa, 0xfa2a, 0xfabf, 0xfa2a, 0xfabf, 0xf967, 0xfa40, 0xf967, +0xfa40, 0xf963, 0xfa84, 0xf963, 0xfa84, 0xf8b7, 0xfa22, 0xf8b7, 0xfa22, 0xf8b7, 0xfa22, +0xf7b1, 0xf966, 0xf7b1, 0xf966, 0xf6b2, 0xf8b3, 0xf6b2, 0xf8b3, 0xf52e, 0xf77a, 0xf52e, +0xf77a, 0xf47e, 0xf713, 0xf47e, 0xf713, 0xf24c, 0xf529, 0xf24c, 0xf529, 0xef99, 0xf2ba, +0xef99, 0xf2ba, 0xef99, 0xf2ba, 0xee4f, 0xf1b1, 0xee4f, 0xf1b1, 0xed46, 0xf0e4, 0xed46, +0xf0e4, 0xecfe, 0xf0d4, 0xecfe, 0xf0d4, 0xebbe, 0xefc8, 0xebbe, 0xefc8, 0xea94, 0xeecd, +0xea94, 0xeecd, 0xe9a9, 0xee0e, 0xe9a9, 0xee0e, 0xe9a9, 0xee0e, 0xe828, 0xecb4, 0xe828, +0xecb4, 0xe84f, 0xecff, 0xe84f, 0xecff, 0xe83d, 0xed0c, 0xe83d, 0xed0c, 0xe711, 0xebfd, +0xe711, 0xebfd, 0xe591, 0xea95, 0xe591, 0xea95, 0xe591, 0xea95, 0xe32a, 0xe846, 0xe32a, +0xe846, 0xe13b, 0xe66b, 0xe13b, 0xe66b, 0xe011, 0xe552, 0xe011, 0xe552, 0xdeb2, 0xe402, +0xdeb2, 0xe402, 0xde25, 0xe382, 0xde25, 0xe382, 0xde16, 0xe37c, 0xde16, 0xe37c, 0xde16, +0xe37c, 0xde91, 0xe3fd, 0xde91, 0xe3fd, 0xdf2f, 0xe49f, 0xdf2f, 0xe49f, 0xdee7, 0xe455, +0xdee7, 0xe455, 0xdf2f, 0xe497, 0xdf2f, 0xe497, 0xde68, 0xe3c7, 0xde68, 0xe3c7, 0xdcd2, +0xe221, 0xdcd2, 0xe221, 0xdcd2, 0xe221, 0xdc40, 0xe17a, 0xdc40, 0xe17a, 0xdbd6, 0xe0f5, +0xdbd6, 0xe0f5, 0xdbc6, 0xe0c4, 0xdbc6, 0xe0c4, 0xdc98, 0xe16f, 0xdc98, 0xe16f, 0xde92, +0xe33c, 0xde92, 0xe33c, 0xde92, 0xe33c, 0xe0b2, 0xe529, 0xe0b2, 0xe529, 0xe208, 0xe647, +0xe208, 0xe647, 0xe321, 0xe724, 0xe321, 0xe724, 0xe3ff, 0xe7c0, 0xe3ff, 0xe7c0, 0xe4e0, +0xe85c, 0xe4e0, 0xe85c, 0xe678, 0xe9ac, 0xe678, 0xe9ac, 0xe678, 0xe9ac, 0xe749, 0xea33, +0xe749, 0xea33, 0xe82b, 0xeac9, 0xe82b, 0xeac9, 0xea06, 0xec58, 0xea06, 0xec58, 0xeb46, +0xed4c, 0xeb46, 0xed4c, 0xecc0, 0xee7a, 0xecc0, 0xee7a, 0xeeb7, 0xf027, 0xeeb7, 0xf027, +0xeeb7, 0xf027, 0xf12d, 0xf255, 0xf12d, 0xf255, 0xf350, 0xf431, 0xf350, 0xf431, 0xf4d1, +0xf56f, 0xf4d1, 0xf56f, 0xf700, 0xf75c, 0xf700, 0xf75c, 0xf8c2, 0xf8e0, 0xf8c2, 0xf8e0, +0xf8c2, 0xf8e0, 0xfa62, 0xfa44, 0xfa62, 0xfa44, 0xfc48, 0xfbf2, 0xfc48, 0xfbf2, 0xfd62, +0xfcd5, 0xfd62, 0xfcd5, 0xfed9, 0xfe19, 0xfed9, 0xfe19, 0x6, 0xff16, 0x6, 0xff16, +0x7e, 0xff60, 0x7e, 0xff60, 0x7e, 0xff60, 0xc7, 0xff7f, 0xc7, 0xff7f, 0x15a, +0xffe9, 0x15a, 0xffe9, 0x394, 0x1ff, 0x394, 0x1ff, 0x4b2, 0x2fa, 0x4b2, 0x2fa, +0x5f5, 0x41e, 0x5f5, 0x41e, 0x861, 0x66f, 0x861, 0x66f, 0x861, 0x66f, 0x9a6, +0x79d, 0x9a6, 0x79d, 0xaed, 0x8cf, 0xaed, 0x8cf, 0xb3e, 0x910, 0xb3e, 0x910, +0xb22, 0x8e8, 0xb22, 0x8e8, 0xac7, 0x885, 0xac7, 0x885, 0xac7, 0x885, 0xa16, +0x7d1, 0xa16, 0x7d1, 0xa7c, 0x837, 0xa7c, 0x837, 0xa80, 0x83f, 0xa80, 0x83f, +0xa69, 0x830, 0xa69, 0x830, 0xb31, 0x903, 0xb31, 0x903, 0xb29, 0x908, 0xb29, +0x908, 0xb29, 0x908, 0xab4, 0x8a3, 0xab4, 0x8a3, 0x9d4, 0x7d4, 0x9d4, 0x7d4, +0x7a2, 0x5b4, 0x7a2, 0x5b4, 0x5de, 0x403, 0x5de, 0x403, 0x4ac, 0x2e4, 0x4ac, +0x2e4, 0x43b, 0x285, 0x43b, 0x285, 0x43b, 0x285, 0x3dc, 0x237, 0x3dc, 0x237, +0x3a7, 0x212, 0x3a7, 0x212, 0x464, 0x2de, 0x464, 0x2de, 0x414, 0x29b, 0x414, +0x29b, 0x36e, 0x201, 0x36e, 0x201, 0x36e, 0x201, 0x365, 0x203, 0x365, 0x203, +0x301, 0x1aa, 0x301, 0x1aa, 0x264, 0x118, 0x264, 0x118, 0x260, 0x120, 0x260, +0x120, 0x2f7, 0x1c4, 0x2f7, 0x1c4, 0x3a3, 0x280, 0x3a3, 0x280, 0x3a3, 0x280, +0x3c7, 0x2b6, 0x3c7, 0x2b6, 0x38a, 0x28f, 0x38a, 0x28f, 0x30d, 0x22a, 0x30d, +0x22a, 0x2e1, 0x21b, 0x2e1, 0x21b, 0x2d2, 0x22c, 0x2d2, 0x22c, 0x18c, 0x10b, +0x18c, 0x10b, 0x18c, 0x10b, 0xa7, 0x4e, 0xa7, 0x4e, 0x7f, 0x50, 0x7f, +0x50, 0x23, 0x21, 0x23, 0x21, 0xffc2, 0xffed, 0xffc2, 0xffed, 0xfffe, 0x56, +0xfffe, 0x56, 0xfffe, 0x56, 0xb2, 0x136, 0xb2, 0x136, 0xb0, 0x15d, 0xb0, +0x15d, 0x69, 0x13c, 0x69, 0x13c, 0x3d, 0x131, 0x3d, 0x131, 0xff99, 0xa6, +0xff99, 0xa6, 0xfef0, 0x11, 0xfef0, 0x11, 0xfef0, 0x11, 0xfe59, 0xff86, 0xfe59, +0xff86, 0xfdef, 0xff1f, 0xfdef, 0xff1f, 0xfe9c, 0xffc8, 0xfe9c, 0xffc8, 0xff88, 0xa7, +0xff88, 0xa7, 0x7c, 0x187, 0x7c, 0x187, 0xbc, 0x1ac, 0xbc, 0x1ac, 0xbc, +0x1ac, 0x16f, 0x23e, 0x16f, 0x23e, 0x2b6, 0x361, 0x2b6, 0x361, 0x21f, 0x2a2, +0x21f, 0x2a2, 0x24a, 0x2a4, 0x24a, 0x2a4, 0x2fd, 0x32f, 0x2fd, 0x32f, 0x2fd, +0x32f, 0x3c2, 0x3ce, 0x3c2, 0x3ce, 0x589, 0x572, 0x589, 0x572, 0x736, 0x701, +0x736, 0x701, 0x8c6, 0x879, 0x8c6, 0x879, 0x993, 0x936, 0x993, 0x936, 0xa4b, +0x9e5, 0xa4b, 0x9e5, 0xa4b, 0x9e5, 0xaf7, 0xa90, 0xaf7, 0xa90, 0xad3, 0xa72, +0xad3, 0xa72, 0xaae, 0xa5b, 0xaae, 0xa5b, 0xa55, 0xa15, 0xa55, 0xa15, 0x948, +0x921, 0x948, 0x921, 0x8ad, 0x8a1, 0x8ad, 0x8a1, 0x8ad, 0x8a1, 0x815, 0x827, +0x815, 0x827, 0x6f4, 0x725, 0x6f4, 0x725, 0x62f, 0x67d, 0x62f, 0x67d, 0x584, +0x5ec, 0x584, 0x5ec, 0x486, 0x504, 0x486, 0x504, 0x486, 0x504, 0x333, 0x3c1, +0x333, 0x3c1, 0x2ee, 0x385, 0x2ee, 0x385, 0x3fa, 0x492, 0x3fa, 0x492, 0x447, +0x4d7, 0x447, 0x4d7, 0x450, 0x4d0, 0x450, 0x4d0, 0x48c, 0x4f5, 0x48c, 0x4f5, +0x48c, 0x4f5, 0x399, 0x3e3, 0x399, 0x3e3, 0x2d7, 0x2fb, 0x2d7, 0x2fb, 0x2b0, +0x2a9, 0x2b0, 0x2a9, 0x2e8, 0x2b4, 0x2e8, 0x2b4, 0x371, 0x30c, 0x371, 0x30c, +0x371, 0x30c, 0x35b, 0x2c6, 0x35b, 0x2c6, 0x3a0, 0x2dc, 0x3a0, 0x2dc, 0x42b, +0x33a, 0x42b, 0x33a, 0x58e, 0x476, 0x58e, 0x476, 0x6ae, 0x573, 0x6ae, 0x573, +0x679, 0x523, 0x679, 0x523, 0x679, 0x523, 0x6db, 0x570, 0x6db, 0x570, 0x730, +0x5b8, 0x730, 0x5b8, 0x729, 0x5ac, 0x729, 0x5ac, 0x6f6, 0x57a, 0x6f6, 0x57a, +0x6d7, 0x563, 0x6d7, 0x563, 0x757, 0x5f0, 0x757, 0x5f0, 0x757, 0x5f0, 0x765, +0x60e, 0x765, 0x60e, 0x742, 0x5fe, 0x742, 0x5fe, 0x773, 0x643, 0x773, 0x643, +0x740, 0x623, 0x740, 0x623, 0x6f5, 0x5ea, 0x6f5, 0x5ea, 0x6f5, 0x5ea, 0x61d, +0x520, 0x61d, 0x520, 0x58b, 0x496, 0x58b, 0x496, 0x5f9, 0x507, 0x5f9, 0x507, +0x654, 0x55e, 0x654, 0x55e, 0x6df, 0x5df, 0x6df, 0x5df, 0x72b, 0x61b, 0x72b, +0x61b, 0x72b, 0x61b, 0x8b6, 0x78e, 0x8b6, 0x78e, 0xa7c, 0x937, 0xa7c, 0x937, +0xa88, 0x922, 0xa88, 0x922, 0xb08, 0x97d, 0xb08, 0x97d, 0xbb1, 0x9fe, 0xbb1, +0x9fe, 0xca2, 0xac7, 0xca2, 0xac7, 0xca2, 0xac7, 0xdaf, 0xbac, 0xdaf, 0xbac, +0xe17, 0xbef, 0xe17, 0xbef, 0xe9e, 0xc54, 0xe9e, 0xc54, 0xed4, 0xc6f, 0xed4, +0xc6f, 0xefd, 0xc81, 0xefd, 0xc81, 0xefd, 0xc81, 0xf11, 0xc85, 0xf11, 0xc85, +0xf13, 0xc7f, 0xf13, 0xc7f, 0xfce, 0xd39, 0xfce, 0xd39, 0x102c, 0xd9e, 0x102c, +0xd9e, 0x101f, 0xd9f, 0x101f, 0xd9f, 0x106e, 0xe02, 0x106e, 0xe02, 0x106e, 0xe02, +0x1018, 0xdc7, 0x1018, 0xdc7, 0xfab, 0xd78, 0xfab, 0xd78, 0xfbb, 0xda9, 0xfbb, +0xda9, 0xfff, 0xe11, 0xfff, 0xe11, 0x108e, 0xec5, 0x108e, 0xec5, 0x10d2, 0xf2c, +0x10d2, 0xf2c, 0x10d2, 0xf2c, 0x113e, 0xfbb, 0x113e, 0xfbb, 0x1142, 0xfde, 0x1142, +0xfde, 0x1022, 0xeda, 0x1022, 0xeda, 0xf5b, 0xe2b, 0xf5b, 0xe2b, 0xe6f, 0xd52, +0xe6f, 0xd52, 0xe6f, 0xd52, 0xd2e, 0xc20, 0xd2e, 0xc20, 0xcab, 0xba8, 0xcab, +0xba8, 0xc7f, 0xb82, 0xc7f, 0xb82, 0xc9a, 0xb9f, 0xc9a, 0xb9f, 0xc69, 0xb6d, +0xc69, 0xb6d, 0xbf9, 0xafa, 0xbf9, 0xafa, 0xbf9, 0xafa, 0xbaa, 0xaa6, 0xbaa, +0xaa6, 0xbc9, 0xac0, 0xbc9, 0xac0, 0xc84, 0xb75, 0xc84, 0xb75, 0xbe4, 0xad1, +0xbe4, 0xad1, 0xa95, 0x97e, 0xa95, 0x97e, 0xa0f, 0x8f7, 0xa0f, 0x8f7, 0xa0f, +0x8f7, 0xa07, 0x8f2, 0xa07, 0x8f2, 0xa6a, 0x958, 0xa6a, 0x958, 0xaa0, 0x996, +0xaa0, 0x996, 0xa72, 0x971, 0xa72, 0x971, 0x9ad, 0x8b8, 0x9ad, 0x8b8, 0x9ad, +0x8b8, 0x8b0, 0x7c8, 0x8b0, 0x7c8, 0x7df, 0x706, 0x7df, 0x706, 0x729, 0x660, +0x729, 0x660, 0x6b0, 0x5f8, 0x6b0, 0x5f8, 0x624, 0x57c, 0x624, 0x57c, 0x57e, +0x4e5, 0x57e, 0x4e5, 0x57e, 0x4e5, 0x554, 0x4ca, 0x554, 0x4ca, 0x544, 0x4c6, +0x544, 0x4c6, 0x50a, 0x495, 0x50a, 0x495, 0x465, 0x3f8, 0x465, 0x3f8, 0x36d, +0x306, 0x36d, 0x306, 0x407, 0x3a3, 0x407, 0x3a3, 0x407, 0x3a3, 0x4a2, 0x43e, +0x4a2, 0x43e, 0x425, 0x3c0, 0x425, 0x3c0, 0x3a2, 0x33a, 0x3a2, 0x33a, 0x295, +0x228, 0x295, 0x228, 0x1e7, 0x174, 0x1e7, 0x174, 0x1e7, 0x174, 0x103, 0x89, +0x103, 0x89, 0xffb2, 0xff31, 0xffb2, 0xff31, 0xfe30, 0xfda8, 0xfe30, 0xfda8, 0xfc3b, +0xfbac, 0xfc3b, 0xfbac, 0xfb80, 0xfaea, 0xfb80, 0xfaea, 0xfb6c, 0xfad2, 0xfb6c, 0xfad2, +0xfb6c, 0xfad2, 0xfbc7, 0xfb27, 0xfbc7, 0xfb27, 0xfcfe, 0xfc5a, 0xfcfe, 0xfc5a, 0xfd7b, +0xfcd4, 0xfd7b, 0xfcd4, 0xfdab, 0xfd01, 0xfdab, 0xfd01, 0xfdd0, 0xfd24, 0xfdd0, 0xfd24, +0xfd44, 0xfc97, 0xfd44, 0xfc97, 0xfd44, 0xfc97, 0xfcea, 0xfc3d, 0xfcea, 0xfc3d, 0xfc77, +0xfbc9, 0xfc77, 0xfbc9, 0xfc30, 0xfb82, 0xfc30, 0xfb82, 0xfc4b, 0xfb9e, 0xfc4b, 0xfb9e, +0xfc5d, 0xfbb2, 0xfc5d, 0xfbb2, 0xfc5d, 0xfbb2, 0xfd9c, 0xfcf3, 0xfd9c, 0xfcf3, 0xfebc, +0xfe16, 0xfebc, 0xfe16, 0xfead, 0xfe0b, 0xfead, 0xfe0b, 0xfeca, 0xfe2f, 0xfeca, 0xfe2f, +0xfe52, 0xfdbf, 0xfe52, 0xfdbf, 0xfd0c, 0xfc83, 0xfd0c, 0xfc83, 0xfd0c, 0xfc83, 0xfc31, +0xfbb5, 0xfc31, 0xfbb5, 0xfc0a, 0xfb9f, 0xfc0a, 0xfb9f, 0xfcb0, 0xfc59, 0xfcb0, 0xfc59, +0xfd3b, 0xfcfd, 0xfd3b, 0xfcfd, 0xfd98, 0xfd76, 0xfd98, 0xfd76, 0xfdbf, 0xfdbd, 0xfdbf, +0xfdbd, 0xfdbf, 0xfdbd, 0xfd71, 0xfd93, 0xfd71, 0xfd93, 0xfda3, 0xfded, 0xfda3, 0xfded, +0xfd1d, 0xfd93, 0xfd1d, 0xfd93, 0xfc76, 0xfd1c, 0xfc76, 0xfd1c, 0xfc86, 0xfd5f, 0xfc86, +0xfd5f, 0xfc86, 0xfd5f, 0xfc33, 0xfd41, 0xfc33, 0xfd41, 0xfbb8, 0xfcfd, 0xfbb8, 0xfcfd, +0xfa7f, 0xfbfd, 0xfa7f, 0xfbfd, 0xf90f, 0xfac6, 0xf90f, 0xfac6, 0xf7d3, 0xf9c5, 0xf7d3, +0xf9c5, 0xf6b1, 0xf8dd, 0xf6b1, 0xf8dd, 0xf6b1, 0xf8dd, 0xf629, 0xf88d, 0xf629, 0xf88d, +0xf58c, 0xf828, 0xf58c, 0xf828, 0xf50e, 0xf7df, 0xf50e, 0xf7df, 0xf441, 0xf745, 0xf441, +0xf745, 0xf34a, 0xf67f, 0xf34a, 0xf67f, 0xf33c, 0xf69f, 0xf33c, 0xf69f, 0xf33c, 0xf69f, +0xf29e, 0xf62c, 0xf29e, 0xf62c, 0xf241, 0xf5f6, 0xf241, 0xf5f6, 0xf19b, 0xf575, 0xf19b, +0xf575, 0xf022, 0xf41c, 0xf022, 0xf41c, 0xefe8, 0xf401, 0xefe8, 0xf401, 0xefe8, 0xf401, +0xeea4, 0xf2d7, 0xeea4, 0xf2d7, 0xed54, 0xf19e, 0xed54, 0xf19e, 0xec67, 0xf0c5, 0xec67, +0xf0c5, 0xeb14, 0xef82, 0xeb14, 0xef82, 0xeada, 0xef55, 0xeada, 0xef55, 0xea13, 0xee96, +0xea13, 0xee96, 0xea13, 0xee96, 0xe9c5, 0xee4e, 0xe9c5, 0xee4e, 0xe911, 0xed9c, 0xe911, +0xed9c, 0xe75b, 0xebe3, 0xe75b, 0xebe3, 0xe6da, 0xeb5b, 0xe6da, 0xeb5b, 0xe66e, 0xeae4, +0xe66e, 0xeae4, 0xe66e, 0xeae4, 0xe65e, 0xeac4, 0xe65e, 0xeac4, 0xe64e, 0xeaa1, 0xe64e, +0xeaa1, 0xe56f, 0xe9aa, 0xe56f, 0xe9aa, 0xe56a, 0xe98a, 0xe56a, 0xe98a, 0xe58a, 0xe98a, +0xe58a, 0xe98a, 0xe59a, 0xe977, 0xe59a, 0xe977, 0xe59a, 0xe977, 0xe654, 0xea0b, 0xe654, +0xea0b, 0xe693, 0xea20, 0xe693, 0xea20, 0xe706, 0xea68, 0xe706, 0xea68, 0xe75f, 0xea95, +0xe75f, 0xea95, 0xe7a9, 0xeab1, 0xe7a9, 0xeab1, 0xe90f, 0xebe8, 0xe90f, 0xebe8, 0xe90f, +0xebe8, 0xea35, 0xecdf, 0xea35, 0xecdf, 0xeabe, 0xed3a, 0xeabe, 0xed3a, 0xeb4f, 0xed9d, +0xeb4f, 0xed9d, 0xeb8e, 0xedaf, 0xeb8e, 0xedaf, 0xeb79, 0xed6e, 0xeb79, 0xed6e, 0xeb79, +0xed6e, 0xeb86, 0xed51, 0xeb86, 0xed51, 0xebc6, 0xed68, 0xebc6, 0xed68, 0xec7c, 0xedf5, +0xec7c, 0xedf5, 0xedbf, 0xef10, 0xedbf, 0xef10, 0xefc3, 0xf0ed, 0xefc3, 0xf0ed, 0xf1a4, +0xf2a6, 0xf1a4, 0xf2a6, 0xf1a4, 0xf2a6, 0xf36d, 0xf448, 0xf36d, 0xf448, 0xf546, 0xf5f8, +0xf546, 0xf5f8, 0xf5bb, 0xf644, 0xf5bb, 0xf644, 0xf613, 0xf672, 0xf613, 0xf672, 0xf69e, +0xf6d1, 0xf69e, 0xf6d1, 0xf737, 0xf73c, 0xf737, 0xf73c, 0xf737, 0xf73c, 0xf7ea, 0xf7c2, +0xf7ea, 0xf7c2, 0xf8e8, 0xf890, 0xf8e8, 0xf890, 0xfac3, 0xfa3a, 0xfac3, 0xfa3a, 0xfc84, +0xfbcc, 0xfc84, 0xfbcc, 0xfeaf, 0xfdc8, 0xfeaf, 0xfdc8, 0xfeaf, 0xfdc8, 0xd3, 0xffbe, +0xd3, 0xffbe, 0x2d2, 0x193, 0x2d2, 0x193, 0x52c, 0x3c6, 0x52c, 0x3c6, 0x69c, +0x513, 0x69c, 0x513, 0x7e4, 0x63e, 0x7e4, 0x63e, 0x8f7, 0x73b, 0x8f7, 0x73b, +0x8f7, 0x73b, 0x97b, 0x7ae, 0x97b, 0x7ae, 0xa83, 0x8ae, 0xa83, 0x8ae, 0xace, +0x8f7, 0xace, 0x8f7, 0xbd4, 0xa04, 0xbd4, 0xa04, 0xd82, 0xbc0, 0xd82, 0xbc0, +0xd57, 0xbaa, 0xd57, 0xbaa, 0xd57, 0xbaa, 0xcc6, 0xb33, 0xcc6, 0xb33, 0xb9a, +0xa27, 0xb9a, 0xa27, 0xa98, 0x949, 0xa98, 0x949, 0x9df, 0x8b6, 0x9df, 0x8b6, +0x901, 0x800, 0x901, 0x800, 0x901, 0x800, 0x911, 0x838, 0x911, 0x838, 0x88c, +0x7d9, 0x88c, 0x7d9, 0x797, 0x708, 0x797, 0x708, 0x6ad, 0x63e, 0x6ad, 0x63e, +0x55b, 0x508, 0x55b, 0x508, 0x4d8, 0x49b, 0x4d8, 0x49b, 0x4d8, 0x49b, 0x50a, +0x4de, 0x50a, 0x4de, 0x509, 0x4ea, 0x509, 0x4ea, 0x58a, 0x571, 0x58a, 0x571, +0x5e8, 0x5d1, 0x5e8, 0x5d1, 0x639, 0x620, 0x639, 0x620, 0x673, 0x655, 0x673, +0x655, 0x673, 0x655, 0x5c4, 0x5a0, 0x5c4, 0x5a0, 0x549, 0x51d, 0x549, 0x51d, +0x494, 0x462, 0x494, 0x462, 0x3ec, 0x3b6, 0x3ec, 0x3b6, 0x3d9, 0x3a3, 0x3d9, +0x3a3, 0x3d9, 0x3a3, 0x38e, 0x35d, 0x38e, 0x35d, 0x2f9, 0x2d1, 0x2f9, 0x2d1, +0x269, 0x24f, 0x269, 0x24f, 0x180, 0x17b, 0x180, 0x17b, 0xfff3, 0x7, 0xfff3, +0x7, 0xfe8a, 0xfebd, 0xfe8a, 0xfebd, 0xfe8a, 0xfebd, 0xfde0, 0xfe35, 0xfde0, 0xfe35, +0xfd65, 0xfde0, 0xfd65, 0xfde0, 0xfcb1, 0xfd53, 0xfcb1, 0xfd53, 0xfc53, 0xfd1d, 0xfc53, +0xfd1d, 0xfba4, 0xfc94, 0xfba4, 0xfc94, 0xfb53, 0xfc65, 0xfb53, 0xfc65, 0xfb53, 0xfc65, +0xfafd, 0xfc2d, 0xfafd, 0xfc2d, 0xf9a6, 0xfaef, 0xf9a6, 0xfaef, 0xf882, 0xf9db, 0xf882, +0xf9db, 0xf785, 0xf8e6, 0xf785, 0xf8e6, 0xf6e9, 0xf84a, 0xf6e9, 0xf84a, 0xf6e9, 0xf84a, +0xf631, 0xf787, 0xf631, 0xf787, 0xf5f3, 0xf736, 0xf5f3, 0xf736, 0xf6ae, 0xf7d5, 0xf6ae, +0xf7d5, 0xf799, 0xf89d, 0xf799, 0xf89d, 0xf900, 0xf9da, 0xf900, 0xf9da, 0xfa0f, 0xfabb, +0xfa0f, 0xfabb, 0xfa0f, 0xfabb, 0xfb61, 0xfbdc, 0xfb61, 0xfbdc, 0xfd63, 0xfdac, 0xfd63, +0xfdac, 0xff28, 0xff40, 0xff28, 0xff40, 0x1e1, 0x1cc, 0x1e1, 0x1cc, 0x487, 0x448, +0x487, 0x448, 0x6d5, 0x674, 0x6d5, 0x674, 0x6d5, 0x674, 0x933, 0x8b8, 0x933, +0x8b8, 0x997, 0x90c, 0x997, 0x90c, 0xa43, 0x9b2, 0xa43, 0x9b2, 0xaed, 0xa60, +0xaed, 0xa60, 0xad2, 0xa52, 0xad2, 0xa52, 0xad2, 0xa52, 0xb43, 0xada, 0xb43, +0xada, 0xabd, 0xa74, 0xabd, 0xa74, 0xa2d, 0xa0b, 0xa2d, 0xa0b, 0x934, 0x93f, +0x934, 0x93f, 0x7d9, 0x814, 0x7d9, 0x814, 0x6c4, 0x731, 0x6c4, 0x731, 0x6c4, +0x731, 0x4fd, 0x59c, 0x4fd, 0x59c, 0x3ff, 0x4ce, 0x3ff, 0x4ce, 0x3ce, 0x4c8, +0x3ce, 0x4c8, 0x393, 0x4b2, 0x393, 0x4b2, 0x3f1, 0x52e, 0x3f1, 0x52e, 0x37f, +0x4d1, 0x37f, 0x4d1, 0x37f, 0x4d1, 0x28d, 0x3eb, 0x28d, 0x3eb, 0x1d9, 0x33a, +0x1d9, 0x33a, 0x49, 0x1a2, 0x49, 0x1a2, 0xff1a, 0x62, 0xff1a, 0x62, 0xfe07, +0xff36, 0xfe07, 0xff36, 0xfe07, 0xff36, 0xfd57, 0xfe67, 0xfd57, 0xfe67, 0xfd30, 0xfe19, +0xfd30, 0xfe19, 0xfcd4, 0xfd92, 0xfcd4, 0xfd92, 0xfddd, 0xfe6d, 0xfddd, 0xfe6d, 0xfff5, +0x54, 0xfff5, 0x54, 0x17f, 0x1ae, 0x17f, 0x1ae, 0x17f, 0x1ae, 0x1f7, 0x1f8, +0x1f7, 0x1f8, 0x1f0, 0x1c5, 0x1f0, 0x1c5, 0x182, 0x12f, 0x182, 0x12f, 0x8d, +0x15, 0x8d, 0x15, 0xff74, 0xfede, 0xff74, 0xfede, 0xffa3, 0xfef2, 0xffa3, 0xfef2, +0xffa3, 0xfef2, 0x6a, 0xffa2, 0x6a, 0xffa2, 0xd7, 0xfffe, 0xd7, 0xfffe, 0x14c, +0x65, 0x14c, 0x65, 0x105, 0x13, 0x105, 0x13, 0x171, 0x76, 0x171, 0x76, +0x171, 0x76, 0x1c7, 0xc4, 0x1c7, 0xc4, 0x15a, 0x4e, 0x15a, 0x4e, 0x131, +0x1d, 0x131, 0x1d, 0x16b, 0x4b, 0x16b, 0x4b, 0x298, 0x16b, 0x298, 0x16b, +0x378, 0x23b, 0x378, 0x23b, 0x378, 0x23b, 0x468, 0x316, 0x468, 0x316, 0x5ae, +0x446, 0x5ae, 0x446, 0x6b2, 0x52f, 0x6b2, 0x52f, 0x82b, 0x68a, 0x82b, 0x68a, +0x950, 0x791, 0x950, 0x791, 0x950, 0x791, 0xb0d, 0x92c, 0xb0d, 0x92c, 0xd36, +0xb34, 0xd36, 0xb34, 0xe98, 0xc74, 0xe98, 0xc74, 0x1063, 0xe1f, 0x1063, 0xe1f, +0x114b, 0xee8, 0x114b, 0xee8, 0x128e, 0x100f, 0x128e, 0x100f, 0x128e, 0x100f, 0x13c9, +0x1132, 0x13c9, 0x1132, 0x1398, 0x10ee, 0x1398, 0x10ee, 0x149a, 0x11e1, 0x149a, 0x11e1, +0x1561, 0x129d, 0x1561, 0x129d, 0x160c, 0x1343, 0x160c, 0x1343, 0x169a, 0x13d0, 0x169a, +0x13d0, 0x169a, 0x13d0, 0x16d9, 0x1412, 0x16d9, 0x1412, 0x17e2, 0x1523, 0x17e2, 0x1523, +0x187a, 0x15c6, 0x187a, 0x15c6, 0x1983, 0x16de, 0x1983, 0x16de, 0x1a6b, 0x17d6, 0x1a6b, +0x17d6, 0x1a6b, 0x17d6, 0x1a20, 0x179d, 0x1a20, 0x179d, 0x197e, 0x170f, 0x197e, 0x170f, +0x1862, 0x1606, 0x1862, 0x1606, 0x17dd, 0x1595, 0x17dd, 0x1595, 0x1859, 0x1623, 0x1859, +0x1623, 0x17b6, 0x1593, 0x17b6, 0x1593, 0x17b6, 0x1593, 0x16e6, 0x14d5, 0x16e6, 0x14d5, +0x164e, 0x144e, 0x164e, 0x144e, 0x1531, 0x1342, 0x1531, 0x1342, 0x1471, 0x1292, 0x1471, +0x1292, 0x1370, 0x11a2, 0x1370, 0x11a2, 0x12d6, 0x1118, 0x12d6, 0x1118, 0x12d6, 0x1118, +0x1269, 0x10bc, 0x1269, 0x10bc, 0x1173, 0xfd9, 0x1173, 0xfd9, 0x1129, 0xfa2, 0x1129, +0xfa2, 0x1124, 0xfb2, 0x1124, 0xfb2, 0x10a9, 0xf4e, 0x10a9, 0xf4e, 0x10a9, 0xf4e, +0x106e, 0xf2a, 0x106e, 0xf2a, 0x1008, 0xede, 0x1008, 0xede, 0xf71, 0xe61, 0xf71, +0xe61, 0xe9d, 0xda8, 0xe9d, 0xda8, 0xd24, 0xc4b, 0xd24, 0xc4b, 0xbcc, 0xb0f, +0xbcc, 0xb0f, 0xbcc, 0xb0f, 0x9b7, 0x915, 0x9b7, 0x915, 0x81c, 0x795, 0x81c, +0x795, 0x74f, 0x6e0, 0x74f, 0x6e0, 0x671, 0x61a, 0x671, 0x61a, 0x669, 0x626, +0x669, 0x626, 0x604, 0x5d3, 0x604, 0x5d3, 0x604, 0x5d3, 0x528, 0x506, 0x528, +0x506, 0x3c9, 0x3b3, 0x3c9, 0x3b3, 0x249, 0x23b, 0x249, 0x23b, 0x14d, 0x144, +0x14d, 0x144, 0x8, 0x2, 0x8, 0x2, 0x8, 0x2, 0xff9b, 0xff94, 0xff9b, +0xff94, 0xffce, 0xffc4, 0xffce, 0xffc4, 0xffed, 0xffdf, 0xffed, 0xffdf, 0x50, 0x3b, +0x50, 0x3b, 0xfffa, 0xffde, 0xfffa, 0xffde, 0xff91, 0xff6c, 0xff91, 0xff6c, 0xff91, +0xff6c, 0xfe3d, 0xfe0f, 0xfe3d, 0xfe0f, 0xfc57, 0xfc1f, 0xfc57, 0xfc1f, 0xfb2a, 0xfae8, +0xfb2a, 0xfae8, 0xf99c, 0xf950, 0xf99c, 0xf950, 0xf992, 0xf93c, 0xf992, 0xf93c, 0xf9a3, +0xf943, 0xf9a3, 0xf943, 0xf9a3, 0xf943, 0xf99b, 0xf930, 0xf99b, 0xf930, 0xfafd, 0xfa88, +0xfafd, 0xfa88, 0xfbff, 0xfb80, 0xfbff, 0xfb80, 0xfcec, 0xfc60, 0xfcec, 0xfc60, 0xfcd6, +0xfc3f, 0xfcd6, 0xfc3f, 0xfcd6, 0xfc3f, 0xfc7e, 0xfbdb, 0xfc7e, 0xfbdb, 0xfc68, 0xfbb8, +0xfc68, 0xfbb8, 0xfbd4, 0xfb17, 0xfbd4, 0xfb17, 0xfc79, 0xfbaf, 0xfc79, 0xfbaf, 0xfd6b, +0xfc92, 0xfd6b, 0xfc92, 0xfd9d, 0xfcb7, 0xfd9d, 0xfcb7, 0xfd9d, 0xfcb7, 0xfdfa, 0xfd09, +0xfdfa, 0xfd09, 0xfde0, 0xfce3, 0xfde0, 0xfce3, 0xfe1e, 0xfd18, 0xfe1e, 0xfd18, 0xfecf, +0xfdc3, 0xfecf, 0xfdc3, 0xfea2, 0xfd92, 0xfea2, 0xfd92, 0xfee3, 0xfdd3, 0xfee3, 0xfdd3, +0xfee3, 0xfdd3, 0xfefe, 0xfdf2, 0xfefe, 0xfdf2, 0xff2f, 0xfe2b, 0xff2f, 0xfe2b, 0xb, +0xff15, 0xb, 0xff15, 0x15, 0xff30, 0x15, 0xff30, 0xffc5, 0xfef8, 0xffc5, 0xfef8, +0xffc5, 0xfef8, 0xff29, 0xfe78, 0xff29, 0xfe78, 0xfe66, 0xfdd6, 0xfe66, 0xfdd6, 0xfe93, +0xfe28, 0xfe93, 0xfe28, 0xff26, 0xfee5, 0xff26, 0xfee5, 0xff32, 0xff1e, 0xff32, 0xff1e, +0xfeff, 0xff1b, 0xfeff, 0xff1b, 0xfeff, 0xff1b, 0xfe92, 0xfedf, 0xfe92, 0xfedf, 0xfe0c, +0xfe8d, 0xfe0c, 0xfe8d, 0xfce8, 0xfd9e, 0xfce8, 0xfd9e, 0xfb18, 0xfc01, 0xfb18, 0xfc01, +0xf97b, 0xfa99, 0xf97b, 0xfa99, 0xf79e, 0xf8ef, 0xf79e, 0xf8ef, 0xf79e, 0xf8ef, 0xf5dd, +0xf761, 0xf5dd, 0xf761, 0xf45d, 0xf612, 0xf45d, 0xf612, 0xf363, 0xf547, 0xf363, 0xf547, +0xf31f, 0xf532, 0xf31f, 0xf532, 0xf25c, 0xf49b, 0xf25c, 0xf49b, 0xf25c, 0xf49b, 0xf153, +0xf3be, 0xf153, 0xf3be, 0xf086, 0xf31a, 0xf086, 0xf31a, 0xefeb, 0xf2a8, 0xefeb, 0xf2a8, +0xef30, 0xf215, 0xef30, 0xf215, 0xed91, 0xf09d, 0xed91, 0xf09d, 0xec4d, 0xef7f, 0xec4d, +0xef7f, 0xec4d, 0xef7f, 0xeb9c, 0xeef4, 0xeb9c, 0xeef4, 0xeaf8, 0xee75, 0xeaf8, 0xee75, +0xea4d, 0xeded, 0xea4d, 0xeded, 0xe931, 0xecf1, 0xe931, 0xecf1, 0xe8c3, 0xeca2, 0xe8c3, +0xeca2, 0xe7ee, 0xebeb, 0xe7ee, 0xebeb, 0xe7ee, 0xebeb, 0xe752, 0xeb68, 0xe752, 0xeb68, +0xe69a, 0xeac4, 0xe69a, 0xeac4, 0xe526, 0xe961, 0xe526, 0xe961, 0xe52b, 0xe972, 0xe52b, +0xe972, 0xe48b, 0xe8d7, 0xe48b, 0xe8d7, 0xe48b, 0xe8d7, 0xe430, 0xe87b, 0xe430, 0xe87b, +0xe47d, 0xe8c1, 0xe47d, 0xe8c1, 0xe46e, 0xe8a5, 0xe46e, 0xe8a5, 0xe4b5, 0xe8d9, 0xe4b5, +0xe8d9, 0xe45a, 0xe863, 0xe45a, 0xe863, 0xe4db, 0xe8c5, 0xe4db, 0xe8c5, 0xe4db, 0xe8c5, +0xe5c6, 0xe98c, 0xe5c6, 0xe98c, 0xe653, 0xe9f1, 0xe653, 0xe9f1, 0xe755, 0xeac8, 0xe755, +0xeac8, 0xe7a7, 0xeaec, 0xe7a7, 0xeaec, 0xe769, 0xea81, 0xe769, 0xea81, 0xe7af, 0xea98, +0xe7af, 0xea98, 0xe7af, 0xea98, 0xe84f, 0xeb0a, 0xe84f, 0xeb0a, 0xe9cd, 0xec5d, 0xe9cd, +0xec5d, 0xeb65, 0xedcc, 0xeb65, 0xedcc, 0xec18, 0xee5a, 0xec18, 0xee5a, 0xecc2, 0xeee2, +0xecc2, 0xeee2, 0xecc2, 0xeee2, 0xecb9, 0xeebb, 0xecb9, 0xeebb, 0xec8e, 0xee75, 0xec8e, +0xee75, 0xecbb, 0xee8b, 0xecbb, 0xee8b, 0xed3e, 0xeef9, 0xed3e, 0xeef9, 0xef16, 0xf0bd, +0xef16, 0xf0bd, 0xf0aa, 0xf23f, 0xf0aa, 0xf23f, 0xf0aa, 0xf23f, 0xf19c, 0xf31e, 0xf19c, +0xf31e, 0xf354, 0xf4c2, 0xf354, 0xf4c2, 0xf4ee, 0xf645, 0xf4ee, 0xf645, 0xf58d, 0xf6ca, +0xf58d, 0xf6ca, 0xf599, 0xf6b7, 0xf599, 0xf6b7, 0xf599, 0xf6b7, 0xf5d2, 0xf6ce, 0xf5d2, +0xf6ce, 0xf630, 0xf703, 0xf630, 0xf703, 0xf5f4, 0xf699, 0xf5f4, 0xf699, 0xf628, 0xf69b, +0xf628, 0xf69b, 0xf726, 0xf761, 0xf726, 0xf761, 0xf8d0, 0xf8d0, 0xf8d0, 0xf8d0, 0xf8d0, +0xf8d0, 0xfb45, 0xfb07, 0xfb45, 0xfb07, 0xfd54, 0xfcd6, 0xfd54, 0xfcd6, 0xff36, 0xfe79, +0xff36, 0xfe79, 0xda, 0xffdf, 0xda, 0xffdf, 0x1d8, 0xa1, 0x1d8, 0xa1, 0x2b7, +0x14b, 0x2b7, 0x14b, 0x2b7, 0x14b, 0x39d, 0x200, 0x39d, 0x200, 0x551, 0x38a, +0x551, 0x38a, 0x6e3, 0x4fc, 0x6e3, 0x4fc, 0x77e, 0x57f, 0x77e, 0x57f, 0x83b, +0x62e, 0x83b, 0x62e, 0x83b, 0x62e, 0x882, 0x670, 0x882, 0x670, 0x8ca, 0x6bd, +0x8ca, 0x6bd, 0x8b6, 0x6b6, 0x8b6, 0x6b6, 0x86a, 0x67f, 0x86a, 0x67f, 0x8ff, +0x730, 0x8ff, 0x730, 0x955, 0x7a5, 0x955, 0x7a5, 0x955, 0x7a5, 0xa50, 0x8c4, +0xa50, 0x8c4, 0xa03, 0x89b, 0xa03, 0x89b, 0x8f6, 0x7b3, 0x8f6, 0x7b3, 0x8db, +0x7ba, 0x8db, 0x7ba, 0x7ad, 0x6ab, 0x7ad, 0x6ab, 0x72f, 0x647, 0x72f, 0x647, +0x72f, 0x647, 0x755, 0x681, 0x755, 0x681, 0x7ae, 0x6e8, 0x7ae, 0x6e8, 0x813, +0x753, 0x813, 0x753, 0x853, 0x794, 0x853, 0x794, 0x964, 0x89e, 0x964, 0x89e, +0x964, 0x89e, 0x9ff, 0x92c, 0x9ff, 0x92c, 0x9fd, 0x918, 0x9fd, 0x918, 0x9ff, +0x905, 0x9ff, 0x905, 0x972, 0x860, 0x972, 0x860, 0x85a, 0x730, 0x85a, 0x730, +0x790, 0x64e, 0x790, 0x64e, 0x790, 0x64e, 0x6b0, 0x558, 0x6b0, 0x558, 0x645, +0x4db, 0x645, 0x4db, 0x5c4, 0x44c, 0x5c4, 0x44c, 0x4e8, 0x368, 0x4e8, 0x368, +0x489, 0x307, 0x489, 0x307, 0x37a, 0x1fd, 0x37a, 0x1fd, 0x37a, 0x1fd, 0x2ad, +0x13a, 0x2ad, 0x13a, 0x17c, 0x1a, 0x17c, 0x1a, 0x41, 0xfef5, 0x41, 0xfef5, +0x35, 0xff04, 0x35, 0xff04, 0xff51, 0xfe3d, 0xff51, 0xfe3d, 0xff51, 0xfe3d, 0xfe2c, +0xfd37, 0xfe2c, 0xfd37, 0xfdaf, 0xfcda, 0xfdaf, 0xfcda, 0xfd32, 0xfc7c, 0xfd32, 0xfc7c, +0xfc0a, 0xfb70, 0xfc0a, 0xfb70, 0xfa64, 0xf9e3, 0xfa64, 0xf9e3, 0xf926, 0xf8ba, 0xf926, +0xf8ba, 0xf926, 0xf8ba, 0xf7b6, 0xf759, 0xf7b6, 0xf759, 0xf642, 0xf5ee, 0xf642, 0xf5ee, +0xf5b7, 0xf567, 0xf5b7, 0xf567, 0xf5a6, 0xf553, 0xf5a6, 0xf553, 0xf648, 0xf5ee, 0xf648, +0xf5ee, 0xf72c, 0xf6c6, 0xf72c, 0xf6c6, 0xf72c, 0xf6c6, 0xf7a0, 0xf72a, 0xf7a0, 0xf72a, +0xf8d1, 0xf848, 0xf8d1, 0xf848, 0xfaeb, 0xfa4e, 0xfaeb, 0xfa4e, 0xfd4c, 0xfc9b, 0xfd4c, +0xfc9b, 0xff97, 0xfed4, 0xff97, 0xfed4, 0xff97, 0xfed4, 0x1a8, 0xd5, 0x1a8, 0xd5, +0x3cd, 0x2f0, 0x3cd, 0x2f0, 0x50f, 0x42a, 0x50f, 0x42a, 0x5ba, 0x4d5, 0x5ba, +0x4d5, 0x6d6, 0x5f6, 0x6d6, 0x5f6, 0x799, 0x6c5, 0x799, 0x6c5, 0x799, 0x6c5, +0x85a, 0x797, 0x85a, 0x797, 0x86d, 0x7c1, 0x86d, 0x7c1, 0x807, 0x777, 0x807, +0x777, 0x77f, 0x710, 0x77f, 0x710, 0x6b7, 0x66b, 0x6b7, 0x66b, 0x6a0, 0x678, +0x6a0, 0x678, 0x6a0, 0x678, 0x5a0, 0x59c, 0x5a0, 0x59c, 0x564, 0x584, 0x564, +0x584, 0x5e7, 0x629, 0x5e7, 0x629, 0x596, 0x5f5, 0x596, 0x5f5, 0x5a3, 0x61b, +0x5a3, 0x61b, 0x5a3, 0x61b, 0x560, 0x5ed, 0x560, 0x5ed, 0x503, 0x59d, 0x503, +0x59d, 0x437, 0x4da, 0x437, 0x4da, 0x380, 0x425, 0x380, 0x425, 0x2c4, 0x365, +0x2c4, 0x365, 0x16c, 0x204, 0x16c, 0x204, 0x16c, 0x204, 0x95, 0x11f, 0x95, +0x11f, 0x48, 0xc1, 0x48, 0xc1, 0x35, 0x9a, 0x35, 0x9a, 0x7b, 0xc9, +0x7b, 0xc9, 0x9d, 0xd4, 0x9d, 0xd4, 0x62, 0x82, 0x62, 0x82, 0x62, +0x82, 0xd8, 0xe2, 0xd8, 0xe2, 0xf9, 0xee, 0xf9, 0xee, 0x115, 0xf7, +0x115, 0xf7, 0x188, 0x15a, 0x188, 0x15a, 0x1c6, 0x18a, 0x1c6, 0x18a, 0x1c6, +0x18a, 0x22b, 0x1e4, 0x22b, 0x1e4, 0x19f, 0x14e, 0x19f, 0x14e, 0x173, 0x11a, +0x173, 0x11a, 0x1a5, 0x145, 0x1a5, 0x145, 0x95, 0x30, 0x95, 0x30, 0xff5f, +0xfef2, 0xff5f, 0xfef2, 0xff5f, 0xfef2, 0xff5b, 0xfee7, 0xff5b, 0xfee7, 0xd, 0xff8f, +0xd, 0xff8f, 0xb6, 0x2c, 0xb6, 0x2c, 0x1a5, 0x10a, 0x1a5, 0x10a, 0x2a0, +0x1f2, 0x2a0, 0x1f2, 0x2ea, 0x226, 0x2ea, 0x226, 0x2ea, 0x226, 0x2c5, 0x1e7, +0x2c5, 0x1e7, 0x2f0, 0x1f4, 0x2f0, 0x1f4, 0x338, 0x21b, 0x338, 0x21b, 0x44f, +0x30e, 0x44f, 0x30e, 0x563, 0x3fc, 0x563, 0x3fc, 0x563, 0x3fc, 0x604, 0x477, +0x604, 0x477, 0x7dc, 0x628, 0x7dc, 0x628, 0xa06, 0x82c, 0xa06, 0x82c, 0xbe4, +0x9e4, 0xbe4, 0x9e4, 0xd6e, 0xb4b, 0xd6e, 0xb4b, 0xefc, 0xcb9, 0xefc, 0xcb9, +0xefc, 0xcb9, 0x1083, 0xe24, 0x1083, 0xe24, 0x10d5, 0xe5c, 0x10d5, 0xe5c, 0x1131, +0xea4, 0x1131, 0xea4, 0x11aa, 0xf0c, 0x11aa, 0xf0c, 0x11fd, 0xf53, 0x11fd, 0xf53, +0x12be, 0x100d, 0x12be, 0x100d, 0x12be, 0x100d, 0x1361, 0x10ab, 0x1361, 0x10ab, 0x14e5, +0x122e, 0x14e5, 0x122e, 0x1677, 0x13c2, 0x1677, 0x13c2, 0x1854, 0x15a4, 0x1854, 0x15a4, +0x19a7, 0x16fd, 0x19a7, 0x16fd, 0x19a7, 0x16fd, 0x194a, 0x16a9, 0x194a, 0x16a9, 0x1a70, +0x17d7, 0x1a70, 0x17d7, 0x1b50, 0x18c0, 0x1b50, 0x18c0, 0x1b61, 0x18d9, 0x1b61, 0x18d9, +0x1b87, 0x1909, 0x1b87, 0x1909, 0x1b4f, 0x18da, 0x1b4f, 0x18da, 0x1b4f, 0x18da, 0x1afc, +0x188f, 0x1afc, 0x188f, 0x1991, 0x172d, 0x1991, 0x172d, 0x18ae, 0x1653, 0x18ae, 0x1653, +0x180d, 0x15bd, 0x180d, 0x15bd, 0x1736, 0x14f0, 0x1736, 0x14f0, 0x1736, 0x14f0, 0x16ea, +0x14b0, 0x16ea, 0x14b0, 0x1671, 0x1445, 0x1671, 0x1445, 0x15dd, 0x13c1, 0x15dd, 0x13c1, +0x157a, 0x1371, 0x157a, 0x1371, 0x1435, 0x1241, 0x1435, 0x1241, 0x12e2, 0x1106, 0x12e2, +0x1106, 0x12e2, 0x1106, 0x12c8, 0x1108, 0x12c8, 0x1108, 0x1257, 0x10b5, 0x1257, 0x10b5, +0x121f, 0x109e, 0x121f, 0x109e, 0x116d, 0x100d, 0x116d, 0x100d, 0xfff, 0xec4, 0xfff, +0xec4, 0xea0, 0xd8b, 0xea0, 0xd8b, 0xea0, 0xd8b, 0xcb4, 0xbc5, 0xcb4, 0xbc5, +0xba5, 0xadd, 0xba5, 0xadd, 0xac2, 0xa20, 0xac2, 0xa20, 0x901, 0x883, 0x901, +0x883, 0x799, 0x73f, 0x799, 0x73f, 0x799, 0x73f, 0x6db, 0x6a1, 0x6db, 0x6a1, +0x62b, 0x60f, 0x62b, 0x60f, 0x520, 0x51f, 0x520, 0x51f, 0x3c7, 0x3dd, 0x3c7, +0x3dd, 0x274, 0x29e, 0x274, 0x29e, 0x80, 0xba, 0x80, 0xba, 0x80, 0xba, +0xfeee, 0xff34, 0xfeee, 0xff34, 0xfe39, 0xfe89, 0xfe39, 0xfe89, 0xfdc5, 0xfe1b, 0xfdc5, +0xfe1b, 0xfe1e, 0xfe76, 0xfe1e, 0xfe76, 0xfd5b, 0xfdb4, 0xfd5b, 0xfdb4, 0xfc3d, 0xfc93, +0xfc3d, 0xfc93, 0xfc3d, 0xfc93, 0xfb8a, 0xfbda, 0xfb8a, 0xfbda, 0xfa3e, 0xfa88, 0xfa3e, +0xfa88, 0xf8be, 0xf900, 0xf8be, 0xf900, 0xf6eb, 0xf723, 0xf6eb, 0xf723, 0xf60d, 0xf63a, +0xf60d, 0xf63a, 0xf60d, 0xf63a, 0xf5fc, 0xf61e, 0xf5fc, 0xf61e, 0xf630, 0xf645, 0xf630, +0xf645, 0xf6f7, 0xf6ff, 0xf6f7, 0xf6ff, 0xf765, 0xf760, 0xf765, 0xf760, 0xf7db, 0xf7c7, +0xf7db, 0xf7c7, 0xf7cd, 0xf7ab, 0xf7cd, 0xf7ab, 0xf7cd, 0xf7ab, 0xf71d, 0xf6ee, 0xf71d, +0xf6ee, 0xf75c, 0xf71e, 0xf75c, 0xf71e, 0xf805, 0xf7ba, 0xf805, 0xf7ba, 0xf9cf, 0xf978, +0xf9cf, 0xf978, 0xfb52, 0xfaf0, 0xfb52, 0xfaf0, 0xfc1f, 0xfbb3, 0xfc1f, 0xfbb3, 0xfc1f, +0xfbb3, 0xfe0c, 0xfd98, 0xfe0c, 0xfd98, 0xfea2, 0xfe28, 0xfea2, 0xfe28, 0xfe59, 0xfddc, +0xfe59, 0xfddc, 0xfe3d, 0xfdbf, 0xfe3d, 0xfdbf, 0xfe95, 0xfe1a, 0xfe95, 0xfe1a, 0xfe95, +0xfe1a, 0xffd6, 0xff61, 0xffd6, 0xff61, 0x127, 0xbb, 0x127, 0xbb, 0x2ba, 0x25c, +0x2ba, 0x25c, 0x39a, 0x34d, 0x39a, 0x34d, 0x368, 0x32f, 0x368, 0x32f, 0x36a, +0x349, 0x36a, 0x349, 0x36a, 0x349, 0x364, 0x35e, 0x364, 0x35e, 0x303, 0x31b, +0x303, 0x31b, 0x2db, 0x312, 0x2db, 0x312, 0x144, 0x19e, 0x144, 0x19e, 0x16, +0x94, 0x16, 0x94, 0x68, 0x10a, 0x68, 0x10a, 0x68, 0x10a, 0x93, 0x15a, +0x93, 0x15a, 0x19d, 0x289, 0x19d, 0x289, 0x1d6, 0x2e8, 0x1d6, 0x2e8, 0xde, +0x215, 0xde, 0x215, 0xff2d, 0x89, 0xff2d, 0x89, 0xff2d, 0x89, 0xfc91, 0xfe11, +0xfc91, 0xfe11, 0xfa68, 0xfc0b, 0xfa68, 0xfc0b, 0xf84a, 0xfa0f, 0xf84a, 0xfa0f, 0xf5c6, +0xf7af, 0xf5c6, 0xf7af, 0xf41d, 0xf628, 0xf41d, 0xf628, 0xf383, 0xf5b2, 0xf383, 0xf5b2, +0xf383, 0xf5b2, 0xf377, 0xf5cb, 0xf377, 0xf5cb, 0xf2fd, 0xf576, 0xf2fd, 0xf576, 0xf1c2, +0xf462, 0xf1c2, 0xf462, 0xf069, 0xf331, 0xf069, 0xf331, 0xee6a, 0xf15d, 0xee6a, 0xf15d, +0xed00, 0xf01f, 0xed00, 0xf01f, 0xed00, 0xf01f, 0xebb4, 0xef01, 0xebb4, 0xef01, 0xea72, +0xedee, 0xea72, 0xedee, 0xe9b3, 0xed5f, 0xe9b3, 0xed5f, 0xe7f6, 0xebd3, 0xe7f6, 0xebd3, +0xe6a4, 0xeab1, 0xe6a4, 0xeab1, 0xe6a4, 0xeab1, 0xe5b9, 0xe9f6, 0xe5b9, 0xe9f6, 0xe489, +0xe8f4, 0xe489, 0xe8f4, 0xe2f9, 0xe78e, 0xe2f9, 0xe78e, 0xe12b, 0xe5e6, 0xe12b, 0xe5e6, +0xe043, 0xe51f, 0xe043, 0xe51f, 0xdff1, 0xe4ea, 0xdff1, 0xe4ea, 0xdff1, 0xe4ea, 0xdff8, +0xe506, 0xdff8, 0xe506, 0xe015, 0xe531, 0xe015, 0xe531, 0xe00e, 0xe530, 0xe00e, 0xe530, +0xe05f, 0xe580, 0xe05f, 0xe580, 0xe046, 0xe55e, 0xe046, 0xe55e, 0xe071, 0xe577, 0xe071, +0xe577, 0xe071, 0xe577, 0xe152, 0xe640, 0xe152, 0xe640, 0xe1e6, 0xe6b5, 0xe1e6, 0xe6b5, +0xe35a, 0xe802, 0xe35a, 0xe802, 0xe437, 0xe8b5, 0xe437, 0xe8b5, 0xe4f8, 0xe946, 0xe4f8, +0xe946, 0xe4f8, 0xe946, 0xe6e3, 0xeb00, 0xe6e3, 0xeb00, 0xe81a, 0xec02, 0xe81a, 0xec02, +0xe905, 0xecb8, 0xe905, 0xecb8, 0xe9b5, 0xed32, 0xe9b5, 0xed32, 0xea8b, 0xedd3, 0xea8b, +0xedd3, 0xeb7c, 0xee90, 0xeb7c, 0xee90, 0xeb7c, 0xee90, 0xec24, 0xef08, 0xec24, 0xef08, +0xed12, 0xefc7, 0xed12, 0xefc7, 0xedbf, 0xf046, 0xedbf, 0xf046, 0xee36, 0xf093, 0xee36, +0xf093, 0xefdf, 0xf214, 0xefdf, 0xf214, 0xf1b7, 0xf3c5, 0xf1b7, 0xf3c5, 0xf1b7, 0xf3c5, +0xf31b, 0xf503, 0xf31b, 0xf503, 0xf483, 0xf645, 0xf483, 0xf645, 0xf49c, 0xf639, 0xf49c, +0xf639, 0xf540, 0xf6b6, 0xf540, 0xf6b6, 0xf646, 0xf793, 0xf646, 0xf793, 0xf646, 0xf793, +0xf6ac, 0xf7ce, 0xf6ac, 0xf7ce, 0xf768, 0xf85b, 0xf768, 0xf85b, 0xf791, 0xf853, 0xf791, +0xf853, 0xf828, 0xf8b5, 0xf828, 0xf8b5, 0xf96d, 0xf9c2, 0xf96d, 0xf9c2, 0xfade, 0xfaf8, +0xfade, 0xfaf8, 0xfade, 0xfaf8, 0xfce9, 0xfcc6, 0xfce9, 0xfcc6, 0xfe34, 0xfdd2, 0xfe34, +0xfdd2, 0xfe46, 0xfda5, 0xfe46, 0xfda5, 0xfe87, 0xfda8, 0xfe87, 0xfda8, 0x2, 0xfee6, +0x2, 0xfee6, 0x22d, 0xd8, 0x22d, 0xd8, 0x22d, 0xd8, 0x388, 0x1fe, 0x388, +0x1fe, 0x53c, 0x382, 0x53c, 0x382, 0x718, 0x535, 0x718, 0x535, 0x7de, 0x5d9, +0x7de, 0x5d9, 0x84e, 0x630, 0x84e, 0x630, 0x84e, 0x630, 0x794, 0x565, 0x794, +0x565, 0x6b6, 0x47f, 0x6b6, 0x47f, 0x625, 0x3ef, 0x625, 0x3ef, 0x5c0, 0x392, +0x5c0, 0x392, 0x667, 0x449, 0x667, 0x449, 0x749, 0x542, 0x749, 0x542, 0x749, +0x542, 0x7dc, 0x5f3, 0x7dc, 0x5f3, 0x78a, 0x5c1, 0x78a, 0x5c1, 0x6ce, 0x529, +0x6ce, 0x529, 0x695, 0x516, 0x695, 0x516, 0x66d, 0x514, 0x66d, 0x514, 0x66d, +0x514, 0x5dc, 0x4a8, 0x5dc, 0x4a8, 0x4a5, 0x394, 0x4a5, 0x394, 0x3de, 0x2ec, +0x3de, 0x2ec, 0x439, 0x363, 0x439, 0x363, 0x474, 0x3b5, 0x474, 0x3b5, 0x598, +0x4ec, 0x598, 0x4ec, 0x598, 0x4ec, 0x6cc, 0x62d, 0x6cc, 0x62d, 0x73e, 0x6a9, +0x73e, 0x6a9, 0x85b, 0x7cc, 0x85b, 0x7cc, 0x821, 0x794, 0x821, 0x794, 0x795, +0x707, 0x795, 0x707, 0x76d, 0x6dd, 0x76d, 0x6dd, 0x76d, 0x6dd, 0x695, 0x603, +0x695, 0x603, 0x5ba, 0x526, 0x5ba, 0x526, 0x50f, 0x479, 0x50f, 0x479, 0x54e, +0x4b9, 0x54e, 0x4b9, 0x576, 0x4e4, 0x576, 0x4e4, 0x576, 0x4e4, 0x4de, 0x453, +0x4de, 0x453, 0x45c, 0x3db, 0x45c, 0x3db, 0x357, 0x2e3, 0x357, 0x2e3, 0x229, +0x1c5, 0x229, 0x1c5, 0x229, 0x1d8, 0x229, 0x1d8, 0x1c8, 0x18c, 0x1c8, 0x18c, +0x1c8, 0x18c, 0xf6, 0xcf, 0xf6, 0xcf, 0xffbd, 0xffac, 0xffbd, 0xffac, 0xfd9f, +0xfda2, 0xfd9f, 0xfda2, 0xfc8a, 0xfca0, 0xfc8a, 0xfca0, 0xfb66, 0xfb8b, 0xfb66, 0xfb8b, +0xfa2c, 0xfa5d, 0xfa2c, 0xfa5d, 0xfa2c, 0xfa5d, 0xf933, 0xf96a, 0xf933, 0xf96a, 0xf805, +0xf83e, 0xf805, 0xf83e, 0xf7c6, 0xf7fa, 0xf7c6, 0xf7fa, 0xf75d, 0xf788, 0xf75d, 0xf788, +0xf71c, 0xf737, 0xf71c, 0xf737, 0xf71c, 0xf737, 0xf7ad, 0xf7b3, 0xf7ad, 0xf7b3, 0xf816, +0xf802, 0xf816, 0xf802, 0xf8ce, 0xf89d, 0xf8ce, 0xf89d, 0xfa35, 0xf9e3, 0xfa35, 0xf9e3, +0xfca5, 0xfc31, 0xfca5, 0xfc31, 0xfeda, 0xfe43, 0xfeda, 0xfe43, 0xfeda, 0xfe43, 0xffe3, +0xff2b, 0xffe3, 0xff2b, 0x1e5, 0x10c, 0x1e5, 0x10c, 0x3ea, 0x2f5, 0x3ea, 0x2f5, +0x56a, 0x45d, 0x56a, 0x45d, 0x6e7, 0x5c8, 0x6e7, 0x5c8, 0x70c, 0x5df, 0x70c, +0x5df, 0x70c, 0x5df, 0x6dd, 0x5a9, 0x6dd, 0x5a9, 0x6cb, 0x596, 0x6cb, 0x596, +0x687, 0x558, 0x687, 0x558, 0x614, 0x4f1, 0x614, 0x4f1, 0x562, 0x451, 0x562, +0x451, 0x562, 0x451, 0x4c7, 0x3cb, 0x4c7, 0x3cb, 0x3f0, 0x30e, 0x3f0, 0x30e, +0x377, 0x2b1, 0x377, 0x2b1, 0x3a5, 0x2ff, 0x3a5, 0x2ff, 0x384, 0x2fd, 0x384, +0x2fd, 0x315, 0x2ad, 0x315, 0x2ad, 0x315, 0x2ad, 0x253, 0x209, 0x253, 0x209, +0x22e, 0x200, 0x22e, 0x200, 0x211, 0x1fb, 0x211, 0x1fb, 0xa2, 0xa2, 0xa2, +0xa2, 0xff96, 0xffa9, 0xff96, 0xffa9, 0xfe08, 0xfe2a, 0xfe08, 0xfe2a, 0xfe08, 0xfe2a, +0xfd24, 0xfd51, 0xfd24, 0xfd51, 0xfe17, 0xfe4b, 0xfe17, 0xfe4b, 0xfeb2, 0xfeeb, 0xfeb2, +0xfeeb, 0xffbd, 0xfff8, 0xffbd, 0xfff8, 0xec, 0x128, 0xec, 0x128, 0xec, 0x128, +0x185, 0x1bf, 0x185, 0x1bf, 0x184, 0x1bc, 0x184, 0x1bc, 0x1a0, 0x1d5, 0x1a0, +0x1d5, 0x24c, 0x27e, 0x24c, 0x27e, 0x27b, 0x2aa, 0x27b, 0x2aa, 0x2a5, 0x2d2, +0x2a5, 0x2d2, 0x2a5, 0x2d2, 0x388, 0x3b3, 0x388, 0x3b3, 0x3dc, 0x405, 0x3dc, +0x405, 0x3b5, 0x3dd, 0x3b5, 0x3dd, 0x3ea, 0x40f, 0x3ea, 0x40f, 0x316, 0x337, +0x316, 0x337, 0x23a, 0x256, 0x23a, 0x256, 0x23a, 0x256, 0x15c, 0x171, 0x15c, +0x171, 0xe3, 0xee, 0xe3, 0xee, 0x1e6, 0x1e3, 0x1e6, 0x1e3, 0x2c0, 0x2ab, +0x2c0, 0x2ab, 0x3fb, 0x3d0, 0x3fb, 0x3d0, 0x3fb, 0x3d0, 0x4fb, 0x4b5, 0x4fb, +0x4b5, 0x5e9, 0x583, 0x5e9, 0x583, 0x746, 0x6bb, 0x746, 0x6bb, 0x775, 0x6c1, +0x775, 0x6c1, 0x751, 0x670, 0x751, 0x670, 0x762, 0x64f, 0x762, 0x64f, 0x762, +0x64f, 0x763, 0x61c, 0x763, 0x61c, 0x7c2, 0x645, 0x7c2, 0x645, 0x92a, 0x775, +0x92a, 0x775, 0xbe1, 0x9f5, 0xbe1, 0x9f5, 0xe35, 0xc12, 0xe35, 0xc12, 0xfde, +0xd86, 0xfde, 0xd86, 0xfde, 0xd86, 0x11d4, 0xf4a, 0x11d4, 0xf4a, 0x12fc, 0x1044, +0x12fc, 0x1044, 0x1313, 0x1031, 0x1313, 0x1031, 0x12a5, 0xf9f, 0x12a5, 0xf9f, 0x11cb, +0xea5, 0x11cb, 0xea5, 0x11cb, 0xea5, 0x11ea, 0xeac, 0x11ea, 0xeac, 0x1380, 0x102e, +0x1380, 0x102e, 0x14f7, 0x1197, 0x14f7, 0x1197, 0x15e7, 0x127f, 0x15e7, 0x127f, 0x16d9, +0x136e, 0x16d9, 0x136e, 0x17a4, 0x143b, 0x17a4, 0x143b, 0x17a4, 0x143b, 0x1808, 0x14a6, +0x1808, 0x14a6, 0x18c6, 0x156d, 0x18c6, 0x156d, 0x19a1, 0x1655, 0x19a1, 0x1655, 0x19b5, +0x1678, 0x19b5, 0x1678, 0x195c, 0x1630, 0x195c, 0x1630, 0x18b4, 0x159b, 0x18b4, 0x159b, +0x18b4, 0x159b, 0x18d8, 0x15d2, 0x18d8, 0x15d2, 0x187e, 0x158c, 0x187e, 0x158c, 0x1784, +0x14a7, 0x1784, 0x14a7, 0x1719, 0x1450, 0x1719, 0x1450, 0x15d7, 0x1324, 0x15d7, 0x1324, +0x15d7, 0x1324, 0x15d9, 0x133b, 0x15d9, 0x133b, 0x1646, 0x13be, 0x1646, 0x13be, 0x1595, +0x1325, 0x1595, 0x1325, 0x154c, 0x12f5, 0x154c, 0x12f5, 0x1588, 0x134a, 0x1588, 0x134a, +0x1647, 0x1424, 0x1647, 0x1424, 0x1647, 0x1424, 0x1645, 0x1440, 0x1645, 0x1440, 0x160d, +0x1427, 0x160d, 0x1427, 0x15c5, 0x1401, 0x15c5, 0x1401, 0x143e, 0x129d, 0x143e, 0x129d, +0x1302, 0x1186, 0x1302, 0x1186, 0x1274, 0x111f, 0x1274, 0x111f, 0x1274, 0x111f, 0x1163, +0x1036, 0x1163, 0x1036, 0x109b, 0xf97, 0x109b, 0xf97, 0xfda, 0xf00, 0xfda, 0xf00, +0xed5, 0xe24, 0xed5, 0xe24, 0xe01, 0xd78, 0xe01, 0xd78, 0xe01, 0xd78, 0xc4b, +0xbea, 0xc4b, 0xbea, 0xa8c, 0xa50, 0xa8c, 0xa50, 0x893, 0x87c, 0x893, 0x87c, +0x666, 0x670, 0x666, 0x670, 0x504, 0x52c, 0x504, 0x52c, 0x3a8, 0x3eb, 0x3a8, +0x3eb, 0x3a8, 0x3eb, 0x2f7, 0x351, 0x2f7, 0x351, 0x279, 0x2e7, 0x279, 0x2e7, +0x176, 0x1f4, 0x176, 0x1f4, 0xb9, 0x144, 0xb9, 0x144, 0x56, 0xea, 0x56, +0xea, 0x56, 0xea, 0xffb6, 0x51, 0xffb6, 0x51, 0xfdfe, 0xfe9c, 0xfdfe, 0xfe9c, +0xfbee, 0xfc8d, 0xfbee, 0xfc8d, 0xfa65, 0xfb01, 0xfa65, 0xfb01, 0xf884, 0xf91d, 0xf884, +0xf91d, 0xf72b, 0xf7bf, 0xf72b, 0xf7bf, 0xf72b, 0xf7bf, 0xf765, 0xf7f2, 0xf765, 0xf7f2, +0xf7cf, 0xf854, 0xf7cf, 0xf854, 0xf7d7, 0xf852, 0xf7d7, 0xf852, 0xf706, 0xf778, 0xf706, +0xf778, 0xf5a8, 0xf60f, 0xf5a8, 0xf60f, 0xf4e2, 0xf53f, 0xf4e2, 0xf53f, 0xf4e2, 0xf53f, +0xf45e, 0xf4af, 0xf45e, 0xf4af, 0xf438, 0xf47d, 0xf438, 0xf47d, 0xf489, 0xf4c2, 0xf489, +0xf4c2, 0xf5f4, 0xf621, 0xf5f4, 0xf621, 0xf7b1, 0xf7d1, 0xf7b1, 0xf7d1, 0xf7b1, 0xf7d1, +0xf897, 0xf8aa, 0xf897, 0xf8aa, 0xf9b4, 0xf9bb, 0xf9b4, 0xf9bb, 0xf9db, 0xf9d6, 0xf9db, +0xf9d6, 0xf9cc, 0xf9bb, 0xf9cc, 0xf9bb, 0xf9f0, 0xf9d3, 0xf9f0, 0xf9d3, 0xfa1f, 0xf9f7, +0xfa1f, 0xf9f7, 0xfa1f, 0xf9f7, 0xfbe1, 0xfbb0, 0xfbe1, 0xfbb0, 0xfd39, 0xfcff, 0xfd39, +0xfcff, 0xfec6, 0xfe86, 0xfec6, 0xfe86, 0x2a, 0xffe6, 0x2a, 0xffe6, 0x105, 0xbf, +0x105, 0xbf, 0x333, 0x2ee, 0x333, 0x2ee, 0x333, 0x2ee, 0x3fd, 0x3bc, 0x3fd, +0x3bc, 0x341, 0x308, 0x341, 0x308, 0x296, 0x268, 0x296, 0x268, 0x238, 0x218, +0x238, 0x218, 0x1fe, 0x1f1, 0x1fe, 0x1f1, 0x1fe, 0x1f1, 0x1a2, 0x1ab, 0x1a2, +0x1ab, 0x238, 0x25b, 0x238, 0x25b, 0x366, 0x3a7, 0x366, 0x3a7, 0x403, 0x465, +0x403, 0x465, 0x46a, 0x4f1, 0x46a, 0x4f1, 0x40a, 0x4b9, 0x40a, 0x4b9, 0x40a, +0x4b9, 0x1f4, 0x2ce, 0x1f4, 0x2ce, 0xffc8, 0xd0, 0xffc8, 0xd0, 0xfd2f, 0xfe67, +0xfd2f, 0xfe67, 0xfac6, 0xfc31, 0xfac6, 0xfc31, 0xf978, 0xfb17, 0xf978, 0xfb17, 0xf7a2, +0xf978, 0xf7a2, 0xf978, 0xf7a2, 0xf978, 0xf61f, 0xf82c, 0xf61f, 0xf82c, 0xf44e, 0xf694, +0xf44e, 0xf694, 0xf2c9, 0xf548, 0xf2c9, 0xf548, 0xf21f, 0xf4d8, 0xf21f, 0xf4d8, 0xf0ef, +0xf3e1, 0xf0ef, 0xf3e1, 0xf0ef, 0xf3e1, 0xf02f, 0xf35b, 0xf02f, 0xf35b, 0xeef7, 0xf25b, +0xeef7, 0xf25b, 0xed64, 0xf0ff, 0xed64, 0xf0ff, 0xec62, 0xf032, 0xec62, 0xf032, 0xeb8b, +0xef8d, 0xeb8b, 0xef8d, 0xea6e, 0xee9f, 0xea6e, 0xee9f, 0xea6e, 0xee9f, 0xe808, 0xec64, +0xe808, 0xec64, 0xe5bd, 0xea3f, 0xe5bd, 0xea3f, 0xe412, 0xe8b6, 0xe412, 0xe8b6, 0xe1ff, +0xe6bf, 0xe1ff, 0xe6bf, 0xe09d, 0xe573, 0xe09d, 0xe573, 0xdfee, 0xe4d3, 0xdfee, 0xe4d3, +0xdfee, 0xe4d3, 0xdf18, 0xe406, 0xdf18, 0xe406, 0xde62, 0xe350, 0xde62, 0xe350, 0xde00, +0xe2e8, 0xde00, 0xe2e8, 0xde15, 0xe2f0, 0xde15, 0xe2f0, 0xde8c, 0xe351, 0xde8c, 0xe351, +0xde8c, 0xe351, 0xdef8, 0xe3a2, 0xdef8, 0xe3a2, 0xde9a, 0xe322, 0xde9a, 0xe322, 0xddfc, +0xe25b, 0xddfc, 0xe25b, 0xde64, 0xe296, 0xde64, 0xe296, 0xdf49, 0xe34a, 0xdf49, 0xe34a, +0xe047, 0xe414, 0xe047, 0xe414, 0xe047, 0xe414, 0xe152, 0xe4e7, 0xe152, 0xe4e7, 0xe23f, +0xe59c, 0xe23f, 0xe59c, 0xe361, 0xe684, 0xe361, 0xe684, 0xe3f7, 0xe6e3, 0xe3f7, 0xe6e3, +0xe496, 0xe74a, 0xe496, 0xe74a, 0xe599, 0xe817, 0xe599, 0xe817, 0xe599, 0xe817, 0xe635, +0xe880, 0xe635, 0xe880, 0xe773, 0xe98d, 0xe773, 0xe98d, 0xe8a2, 0xea8f, 0xe8a2, 0xea8f, +0xe9d4, 0xeb97, 0xe9d4, 0xeb97, 0xec0a, 0xeda4, 0xec0a, 0xeda4, 0xec0a, 0xeda4, 0xeda3, +0xef18, 0xeda3, 0xef18, 0xeefd, 0xf04e, 0xeefd, 0xf04e, 0xf130, 0xf25e, 0xf130, 0xf25e, +0xf3a3, 0xf4af, 0xf3a3, 0xf4af, 0xf5aa, 0xf694, 0xf5aa, 0xf694, 0xf68c, 0xf754, 0xf68c, +0xf754, 0xf68c, 0xf754, 0xf6e0, 0xf785, 0xf6e0, 0xf785, 0xf749, 0xf7c8, 0xf749, 0xf7c8, +0xf7f9, 0xf851, 0xf7f9, 0xf851, 0xf9f6, 0xfa24, 0xf9f6, 0xfa24, 0xfbae, 0xfbaf, 0xfbae, +0xfbaf, 0xfcf0, 0xfcc2, 0xfcf0, 0xfcc2, 0xfcf0, 0xfcc2, 0xfe88, 0xfe29, 0xfe88, 0xfe29, +0xff25, 0xfe94, 0xff25, 0xfe94, 0x33, 0xff6f, 0x33, 0xff6f, 0x107, 0x11, 0x107, +0x11, 0x16c, 0x44, 0x16c, 0x44, 0x16c, 0x44, 0x275, 0x11d, 0x275, 0x11d, +0x392, 0x20e, 0x392, 0x20e, 0x5aa, 0x3fe, 0x5aa, 0x3fe, 0x793, 0x5c4, 0x793, +0x5c4, 0x910, 0x725, 0x910, 0x725, 0xa42, 0x841, 0xa42, 0x841, 0xa42, 0x841, +0xa44, 0x835, 0xa44, 0x835, 0x9b8, 0x7a2, 0x9b8, 0x7a2, 0x920, 0x70c, 0x920, +0x70c, 0x8f0, 0x6e4, 0x8f0, 0x6e4, 0x897, 0x69b, 0x897, 0x69b, 0x7e3, 0x5fd, +0x7e3, 0x5fd, 0x7e3, 0x5fd, 0x802, 0x639, 0x802, 0x639, 0x8f3, 0x74a, 0x8f3, +0x74a, 0x99f, 0x81b, 0x99f, 0x81b, 0xa08, 0x8a9, 0xa08, 0x8a9, 0x9ce, 0x896, +0x9ce, 0x896, 0x9ce, 0x896, 0x8b5, 0x7a4, 0x8b5, 0x7a4, 0x775, 0x689, 0x775, +0x689, 0x60f, 0x546, 0x60f, 0x546, 0x509, 0x460, 0x509, 0x460, 0x4b6, 0x429, +0x4b6, 0x429, 0x4fa, 0x485, 0x4fa, 0x485, 0x4fa, 0x485, 0x564, 0x502, 0x564, +0x502, 0x5e4, 0x590, 0x5e4, 0x590, 0x6f2, 0x6a9, 0x6f2, 0x6a9, 0x74b, 0x70b, +0x74b, 0x70b, 0x704, 0x6ca, 0x704, 0x6ca, 0x67d, 0x647, 0x67d, 0x647, 0x67d, +0x647, 0x561, 0x52e, 0x561, 0x52e, 0x4d6, 0x4a7, 0x4d6, 0x4a7, 0x453, 0x428, +0x453, 0x428, 0x436, 0x413, 0x436, 0x413, 0x3e5, 0x3cc, 0x3e5, 0x3cc, 0x3e5, +0x3cc, 0x28a, 0x27d, 0x28a, 0x27d, 0x253, 0x257, 0x253, 0x257, 0x1bc, 0x1d5, +0x1bc, 0x1d5, 0x125, 0x154, 0x125, 0x154, 0x185, 0x1cf, 0x185, 0x1cf, 0xe8, +0x14e, 0xe8, 0x14e, 0xe8, 0x14e, 0x6e, 0xf1, 0x6e, 0xf1, 0x5a, 0xfa, +0x5a, 0xfa, 0xfffd, 0xba, 0xfffd, 0xba, 0xff27, 0xfffe, 0xff27, 0xfffe, 0xfdc2, +0xfeaf, 0xfdc2, 0xfeaf, 0xfdc2, 0xfeaf, 0xfcb5, 0xfdb3, 0xfcb5, 0xfdb3, 0xfb88, 0xfc90, +0xfb88, 0xfc90, 0xfa5f, 0xfb6c, 0xfa5f, 0xfb6c, 0xfa13, 0xfb1c, 0xfa13, 0xfb1c, 0xf91a, +0xfa17, 0xf91a, 0xfa17, 0xf865, 0xf94f, 0xf865, 0xf94f, 0xf865, 0xf94f, 0xf8f4, 0xf9c2, +0xf8f4, 0xf9c2, 0xf9e6, 0xfa91, 0xf9e6, 0xfa91, 0xfc27, 0xfca7, 0xfc27, 0xfca7, 0xfdc6, +0xfe17, 0xfdc6, 0xfe17, 0xfe27, 0xfe45, 0xfe27, 0xfe45, 0xfea2, 0xfe8a, 0xfea2, 0xfe8a, +0xfea2, 0xfe8a, 0xff57, 0xff07, 0xff57, 0xff07, 0x157, 0xd1, 0x157, 0xd1, 0x374, +0x2ba, 0x374, 0x2ba, 0x537, 0x44d, 0x537, 0x44d, 0x73f, 0x62b, 0x73f, 0x62b, +0x73f, 0x62b, 0x828, 0x6f0, 0x828, 0x6f0, 0x86c, 0x718, 0x86c, 0x718, 0x8b9, +0x752, 0x8b9, 0x752, 0x87e, 0x70c, 0x87e, 0x70c, 0x7c7, 0x655, 0x7c7, 0x655, +0x660, 0x4f5, 0x660, 0x4f5, 0x660, 0x4f5, 0x58d, 0x432, 0x58d, 0x432, 0x531, +0x3ed, 0x531, 0x3ed, 0x487, 0x362, 0x487, 0x362, 0x449, 0x346, 0x449, 0x346, +0x3e0, 0x304, 0x3e0, 0x304, 0x38e, 0x2db, 0x38e, 0x2db, 0x38e, 0x2db, 0x2fc, +0x272, 0x2fc, 0x272, 0x1cd, 0x16c, 0x1cd, 0x16c, 0x56, 0x1c, 0x56, 0x1c, +0xfeaa, 0xfe93, 0xfeaa, 0xfe93, 0xfd24, 0xfd2b, 0xfd24, 0xfd2b, 0xfd24, 0xfd2b, 0xfb80, +0xfba0, 0xfb80, 0xfba0, 0xfac0, 0xfaf5, 0xfac0, 0xfaf5, 0xfb29, 0xfb6b, 0xfb29, 0xfb6b, +0xfb8b, 0xfbd4, 0xfb8b, 0xfbd4, 0xfc40, 0xfc8b, 0xfc40, 0xfc8b, 0xfd13, 0xfd5b, 0xfd13, +0xfd5b, 0xfd13, 0xfd5b, 0xfdae, 0xfdec, 0xfdae, 0xfdec, 0xfe2e, 0xfe60, 0xfe2e, 0xfe60, +0xfde5, 0xfe06, 0xfde5, 0xfe06, 0xfe20, 0xfe2e, 0xfe20, 0xfe2e, 0xfe8c, 0xfe84, 0xfe8c, +0xfe84, 0xfed5, 0xfeb8, 0xfed5, 0xfeb8, 0xfed5, 0xfeb8, 0x28, 0xfff4, 0x28, 0xfff4, +0xdc, 0x92, 0xdc, 0x92, 0x1cc, 0x16e, 0x1cc, 0x16e, 0x2de, 0x26c, 0x2de, +0x26c, 0x265, 0x1e0, 0x265, 0x1e0, 0x265, 0x1e0, 0x1ee, 0x158, 0x1ee, 0x158, +0x213, 0x16d, 0x213, 0x16d, 0x275, 0x1bf, 0x275, 0x1bf, 0x2b5, 0x1f0, 0x2b5, +0x1f0, 0x32f, 0x25b, 0x32f, 0x25b, 0x4ca, 0x3e6, 0x4ca, 0x3e6, 0x4ca, 0x3e6, +0x65f, 0x56b, 0x65f, 0x56b, 0x82f, 0x72a, 0x82f, 0x72a, 0xa25, 0x90c, 0xa25, +0x90c, 0xa4e, 0x91e, 0xa4e, 0x91e, 0xa62, 0x91b, 0xa62, 0x91b, 0xa68, 0x906, +0xa68, 0x906, 0xa68, 0x906, 0xa3a, 0x8bb, 0xa3a, 0x8bb, 0xb15, 0x977, 0xb15, +0x977, 0xbd3, 0xa14, 0xbd3, 0xa14, 0xd09, 0xb29, 0xd09, 0xb29, 0xe7e, 0xc7b, +0xe7e, 0xc7b, 0xe7e, 0xc7b, 0xff9, 0xdd2, 0xff9, 0xdd2, 0x11e8, 0xf9f, 0x11e8, +0xf9f, 0x1309, 0x109e, 0x1309, 0x109e, 0x13a0, 0x1116, 0x13a0, 0x1116, 0x1467, 0x11c0, +0x1467, 0x11c0, 0x14e9, 0x1226, 0x14e9, 0x1226, 0x14e9, 0x1226, 0x1563, 0x1289, 0x1563, +0x1289, 0x1609, 0x131a, 0x1609, 0x131a, 0x167c, 0x137d, 0x167c, 0x137d, 0x1679, 0x136d, +0x1679, 0x136d, 0x1679, 0x1363, 0x1679, 0x1363, 0x176c, 0x1450, 0x176c, 0x1450, 0x176c, +0x1450, 0x1890, 0x1571, 0x1890, 0x1571, 0x197d, 0x165e, 0x197d, 0x165e, 0x19f2, 0x16d6, +0x19f2, 0x16d6, 0x1a21, 0x1709, 0x1a21, 0x1709, 0x1a9f, 0x178d, 0x1a9f, 0x178d, 0x1a9f, +0x178d, 0x1a72, 0x1768, 0x1a72, 0x1768, 0x1972, 0x1670, 0x1972, 0x1670, 0x1826, 0x152e, +0x1826, 0x152e, 0x1733, 0x1446, 0x1733, 0x1446, 0x1638, 0x1356, 0x1638, 0x1356, 0x147e, +0x11a7, 0x147e, 0x11a7, 0x147e, 0x11a7, 0x1345, 0x107b, 0x1345, 0x107b, 0x12d6, 0x1019, +0x12d6, 0x1019, 0x1253, 0xfa5, 0x1253, 0xfa5, 0x125c, 0xfbe, 0x125c, 0xfbe, 0x1296, +0x100a, 0x1296, 0x100a, 0x1352, 0x10d9, 0x1352, 0x10d9, 0x1352, 0x10d9, 0x13fd, 0x119a, +0x13fd, 0x119a, 0x1347, 0x10fb, 0x1347, 0x10fb, 0x12ef, 0x10be, 0x12ef, 0x10be, 0x11ea, +0xfd6, 0x11ea, 0xfd6, 0x10be, 0xecb, 0x10be, 0xecb, 0x10be, 0xecb, 0x103d, 0xe6c, +0x103d, 0xe6c, 0xf13, 0xd67, 0xf13, 0xd67, 0xef1, 0xd6c, 0xef1, 0xd6c, 0xf22, +0xdc6, 0xf22, 0xdc6, 0xef6, 0xdc5, 0xef6, 0xdc5, 0xeaa, 0xda4, 0xeaa, 0xda4, +0xeaa, 0xda4, 0xdc1, 0xce7, 0xdc1, 0xce7, 0xcdf, 0xc31, 0xcdf, 0xc31, 0xb69, +0xae6, 0xb69, 0xae6, 0x9d0, 0x978, 0x9d0, 0x978, 0x89f, 0x870, 0x89f, 0x870, +0x701, 0x6f9, 0x701, 0x6f9, 0x701, 0x6f9, 0x65a, 0x677, 0x65a, 0x677, 0x5ba, +0x5f9, 0x5ba, 0x5f9, 0x456, 0x4b5, 0x456, 0x4b5, 0x401, 0x47c, 0x401, 0x47c, +0x39e, 0x432, 0x39e, 0x432, 0x39e, 0x432, 0x323, 0x3ce, 0x323, 0x3ce, 0x235, +0x2f2, 0x235, 0x2f2, 0x10, 0xdd, 0x10, 0xdd, 0xfdbc, 0xfe96, 0xfdbc, 0xfe96, +0xfb3f, 0xfc21, 0xfb3f, 0xfc21, 0xf96d, 0xfa57, 0xf96d, 0xfa57, 0xf96d, 0xfa57, 0xf8c0, +0xf9ad, 0xf8c0, 0xf9ad, 0xf83a, 0xf927, 0xf83a, 0xf927, 0xf7e1, 0xf8ca, 0xf7e1, 0xf8ca, +0xf7c9, 0xf8ad, 0xf7c9, 0xf8ad, 0xf6e6, 0xf7c1, 0xf6e6, 0xf7c1, 0xf58d, 0xf65c, 0xf58d, +0xf65c, 0xf58d, 0xf65c, 0xf4d3, 0xf593, 0xf4d3, 0xf593, 0xf4ed, 0xf59b, 0xf4ed, 0xf59b, +0xf4d9, 0xf572, 0xf4d9, 0xf572, 0xf4ae, 0xf530, 0xf4ae, 0xf530, 0xf562, 0xf5ca, 0xf562, +0xf5ca, 0xf562, 0xf5ca, 0xf625, 0xf671, 0xf625, 0xf671, 0xf6f8, 0xf725, 0xf6f8, 0xf725, +0xf7c9, 0xf7d5, 0xf7c9, 0xf7d5, 0xf8db, 0xf8c6, 0xf8db, 0xf8c6, 0xfa16, 0xf9df, 0xfa16, +0xf9df, 0xfa47, 0xf9ee, 0xfa47, 0xf9ee, 0xfa47, 0xf9ee, 0xfa11, 0xf997, 0xfa11, 0xf997, +0xfa6b, 0xf9d3, 0xfa6b, 0xf9d3, 0xfbe6, 0xfb31, 0xfbe6, 0xfb31, 0xfdcb, 0xfcfe, 0xfdcb, +0xfcfe, 0xff3b, 0xfe59, 0xff3b, 0xfe59, 0xff3b, 0xfe59, 0xec, 0xfffb, 0xec, 0xfffb, +0x1d9, 0xde, 0x1d9, 0xde, 0x1e1, 0xe3, 0x1e1, 0xe3, 0x1c5, 0xcc, 0x1c5, +0xcc, 0xee, 0x1, 0xee, 0x1, 0xd3, 0xfffa, 0xd3, 0xfffa, 0xd3, 0xfffa, +0xb7, 0xfff9, 0xb7, 0xfff9, 0xab, 0x11, 0xab, 0x11, 0x178, 0x109, 0x178, +0x109, 0x172, 0x135, 0x172, 0x135, 0x1ba, 0x1b6, 0x1ba, 0x1b6, 0x18f, 0x1c9, +0x18f, 0x1c9, 0x18f, 0x1c9, 0x81, 0xfe, 0x81, 0xfe, 0xffb1, 0x76, 0xffb1, +0x76, 0xfe6c, 0xff7b, 0xfe6c, 0xff7b, 0xfcfb, 0xfe56, 0xfcfb, 0xfe56, 0xfb26, 0xfccf, +0xfb26, 0xfccf, 0xfb26, 0xfccf, 0xf933, 0xfb2a, 0xf933, 0xfb2a, 0xf7b4, 0xf9f8, 0xf7b4, +0xf9f8, 0xf5b1, 0xf840, 0xf5b1, 0xf840, 0xf44d, 0xf725, 0xf44d, 0xf725, 0xf3c3, 0xf6df, +0xf3c3, 0xf6df, 0xf2bf, 0xf61d, 0xf2bf, 0xf61d, 0xf2bf, 0xf61d, 0xf258, 0xf5f2, 0xf258, +0xf5f2, 0xf17c, 0xf54e, 0xf17c, 0xf54e, 0xf093, 0xf497, 0xf093, 0xf497, 0xf004, 0xf435, +0xf004, 0xf435, 0xee87, 0xf2e1, 0xee87, 0xf2e1, 0xed92, 0xf20d, 0xed92, 0xf20d, 0xed92, +0xf20d, 0xec19, 0xf0b0, 0xec19, 0xf0b0, 0xe9d3, 0xee82, 0xe9d3, 0xee82, 0xe779, 0xec39, +0xe779, 0xec39, 0xe4b6, 0xe983, 0xe4b6, 0xe983, 0xe2a3, 0xe777, 0xe2a3, 0xe777, 0xe2a3, +0xe777, 0xe0e2, 0xe5b8, 0xe0e2, 0xe5b8, 0xdf59, 0xe42c, 0xdf59, 0xe42c, 0xdf11, 0xe3dc, +0xdf11, 0xe3dc, 0xdf8e, 0xe44d, 0xdf8e, 0xe44d, 0xe013, 0xe4c2, 0xe013, 0xe4c2, 0xe02a, +0xe4c5, 0xe02a, 0xe4c5, 0xe02a, 0xe4c5, 0xe03b, 0xe4be, 0xe03b, 0xe4be, 0xe06d, 0xe4d3, +0xe06d, 0xe4d3, 0xdf66, 0xe3ad, 0xdf66, 0xe3ad, 0xde7a, 0xe29f, 0xde7a, 0xe29f, 0xde6f, +0xe26f, 0xde6f, 0xe26f, 0xde85, 0xe25d, 0xde85, 0xe25d, 0xde85, 0xe25d, 0xdf7a, 0xe328, +0xdf7a, 0xe328, 0xe0db, 0xe45e, 0xe0db, 0xe45e, 0xe23f, 0xe596, 0xe23f, 0xe596, 0xe31d, +0xe647, 0xe31d, 0xe647, 0xe357, 0xe653, 0xe357, 0xe653, 0xe357, 0xe653, 0xe3a5, 0xe673, +0xe3a5, 0xe673, 0xe3e3, 0xe683, 0xe3e3, 0xe683, 0xe4da, 0xe74b, 0xe4da, 0xe74b, 0xe587, +0xe7cc, 0xe587, 0xe7cc, 0xe59d, 0xe7b4, 0xe59d, 0xe7b4, 0xe6e2, 0xe8ce, 0xe6e2, 0xe8ce, +0xe6e2, 0xe8ce, 0xe867, 0xea27, 0xe867, 0xea27, 0xeacc, 0xec61, 0xeacc, 0xec61, 0xed19, +0xee83, 0xed19, 0xee83, 0xee71, 0xefb2, 0xee71, 0xefb2, 0xf051, 0xf168, 0xf051, 0xf168, +0xf114, 0xf201, 0xf114, 0xf201, 0xf114, 0xf201, 0xf1d0, 0xf293, 0xf1d0, 0xf293, 0xf2d1, +0xf36a, 0xf2d1, 0xf36a, 0xf394, 0xf403, 0xf394, 0xf403, 0xf52f, 0xf573, 0xf52f, 0xf573, +0xf690, 0xf6a8, 0xf690, 0xf6a8, 0xf690, 0xf6a8, 0xf82a, 0xf818, 0xf82a, 0xf818, 0xfa37, +0xf9f9, 0xfa37, 0xf9f9, 0xfbac, 0xfb43, 0xfbac, 0xfb43, 0xfcd5, 0xfc43, 0xfcd5, 0xfc43, +0xfdfa, 0xfd3f, 0xfdfa, 0xfd3f, 0xffa8, 0xfec6, 0xffa8, 0xfec6, 0xffa8, 0xfec6, 0x1c8, +0xc2, 0x1c8, 0xc2, 0x2f4, 0x1cd, 0x2f4, 0x1cd, 0x4bb, 0x376, 0x4bb, 0x376, +0x6d7, 0x578, 0x6d7, 0x578, 0x878, 0x704, 0x878, 0x704, 0xac3, 0x93f, 0xac3, +0x93f, 0xac3, 0x93f, 0xbe9, 0xa5a, 0xbe9, 0xa5a, 0xcba, 0xb25, 0xcba, 0xb25, +0xd07, 0xb73, 0xd07, 0xb73, 0xc93, 0xb03, 0xc93, 0xb03, 0xce9, 0xb64, 0xce9, +0xb64, 0xce9, 0xb64, 0xca0, 0xb29, 0xca0, 0xb29, 0xcdf, 0xb7a, 0xcdf, 0xb7a, +0xd8d, 0xc3d, 0xd8d, 0xc3d, 0xd62, 0xc2a, 0xd62, 0xc2a, 0xd82, 0xc63, 0xd82, +0xc63, 0xd53, 0xc4e, 0xd53, 0xc4e, 0xd53, 0xc4e, 0xcc4, 0xbd8, 0xcc4, 0xbd8, +0xc21, 0xb4d, 0xc21, 0xb4d, 0xb81, 0xac4, 0xb81, 0xac4, 0xb10, 0xa67, 0xb10, +0xa67, 0xa06, 0x96f, 0xa06, 0x96f, 0x951, 0x8c7, 0x951, 0x8c7, 0x951, 0x8c7, +0x91d, 0x89f, 0x91d, 0x89f, 0x881, 0x80a, 0x881, 0x80a, 0x829, 0x7b7, 0x829, +0x7b7, 0x809, 0x799, 0x809, 0x799, 0x7a7, 0x737, 0x7a7, 0x737, 0x7a7, 0x737, +0x77d, 0x70b, 0x77d, 0x70b, 0x7cb, 0x756, 0x7cb, 0x756, 0x7fd, 0x784, 0x7fd, +0x784, 0x752, 0x6d6, 0x752, 0x6d6, 0x617, 0x598, 0x617, 0x598, 0x477, 0x3f6, +0x477, 0x3f6, 0x477, 0x3f6, 0x2d8, 0x257, 0x2d8, 0x257, 0x24e, 0x1ce, 0x24e, +0x1ce, 0x126, 0xa8, 0x126, 0xa8, 0xffd0, 0xff56, 0xffd0, 0xff56, 0xff68, 0xfef3, +0xff68, 0xfef3, 0xfe9c, 0xfe2d, 0xfe9c, 0xfe2d, 0xfe9c, 0xfe2d, 0xfe36, 0xfdcb, 0xfe36, +0xfdcb, 0xfd68, 0xfd03, 0xfd68, 0xfd03, 0xfce0, 0xfc7d, 0xfce0, 0xfc7d, 0xfcb5, 0xfc53, +0xfcb5, 0xfc53, 0xfb86, 0xfb20, 0xfb86, 0xfb20, 0xfb86, 0xfb20, 0xfad2, 0xfa66, 0xfad2, +0xfa66, 0xf987, 0xf910, 0xf987, 0xf910, 0xf787, 0xf700, 0xf787, 0xf700, 0xf5ff, 0xf563, +0xf5ff, 0xf563, 0xf4d4, 0xf41f, 0xf4d4, 0xf41f, 0xf4dc, 0xf409, 0xf4dc, 0xf409, 0xf4dc, +0xf409, 0xf599, 0xf4a5, 0xf599, 0xf4a5, 0xf6a9, 0xf58f, 0xf6a9, 0xf58f, 0xf84d, 0xf70c, +0xf84d, 0xf70c, 0xf9f9, 0xf891, 0xf9f9, 0xf891, 0xfc91, 0xfb01, 0xfc91, 0xfb01, 0xff0b, +0xfd56, 0xff0b, 0xfd56, 0xff0b, 0xfd56, 0x32, 0xfe5c, 0x32, 0xfe5c, 0x1c1, 0xffce, +0x1c1, 0xffce, 0x2fc, 0xf3, 0x2fc, 0xf3, 0x493, 0x27b, 0x493, 0x27b, 0x6eb, +0x4ce, 0x6eb, 0x4ce, 0x6eb, 0x4ce, 0x876, 0x65c, 0x876, 0x65c, 0xa20, 0x815, +0xa20, 0x815, 0xb0a, 0x916, 0xb0a, 0x916, 0xb62, 0x990, 0xb62, 0x990, 0xbcd, +0xa26, 0xbcd, 0xa26, 0xb37, 0x9c3, 0xb37, 0x9c3, 0xb37, 0x9c3, 0xa80, 0x945, +0xa80, 0x945, 0x923, 0x827, 0x923, 0x827, 0x75e, 0x6a5, 0x75e, 0x6a5, 0x6bf, +0x64c, 0x6bf, 0x64c, 0x646, 0x618, 0x646, 0x618, 0x646, 0x618, 0x56b, 0x57f, +0x56b, 0x57f, 0x4b8, 0x50c, 0x4b8, 0x50c, 0x41c, 0x4a9, 0x41c, 0x4a9, 0x2d3, +0x393, 0x2d3, 0x393, 0xb9, 0x1a2, 0xb9, 0x1a2, 0xfef4, 0xfffe, 0xfef4, 0xfffe, +0xfef4, 0xfffe, 0xfd73, 0xfe94, 0xfd73, 0xfe94, 0xfb92, 0xfcbf, 0xfb92, 0xfcbf, 0xfaa7, +0xfbd6, 0xfaa7, 0xfbd6, 0xfac1, 0xfbea, 0xfac1, 0xfbea, 0xfaff, 0xfc18, 0xfaff, 0xfc18, +0xfbb2, 0xfcb3, 0xfbb2, 0xfcb3, 0xfbb2, 0xfcb3, 0xfca5, 0xfd89, 0xfca5, 0xfd89, 0xfd7b, +0xfe3c, 0xfd7b, 0xfe3c, 0xfd6c, 0xfe07, 0xfd6c, 0xfe07, 0xfd4a, 0xfdbc, 0xfd4a, 0xfdbc, +0xfce1, 0xfd2a, 0xfce1, 0xfd2a, 0xfce1, 0xfd2a, 0xfc5b, 0xfc7c, 0xfc5b, 0xfc7c, 0xfd00, +0xfcfc, 0xfd00, 0xfcfc, 0xfcc6, 0xfc9e, 0xfcc6, 0xfc9e, 0xfcdc, 0xfc95, 0xfcdc, 0xfc95, +0xfd7c, 0xfd1a, 0xfd7c, 0xfd1a, 0xfdda, 0xfd61, 0xfdda, 0xfd61, 0xfdda, 0xfd61, 0xfebe, +0xfe33, 0xfebe, 0xfe33, 0xfee7, 0xfe4d, 0xfee7, 0xfe4d, 0xff67, 0xfec1, 0xff67, 0xfec1, +0xff9a, 0xfeeb, 0xff9a, 0xfeeb, 0xffd6, 0xff1e, 0xffd6, 0xff1e, 0x163, 0xa5, 0x163, +0xa5, 0x163, 0xa5, 0x289, 0x1c4, 0x289, 0x1c4, 0x40c, 0x33d, 0x40c, 0x33d, +0x5b0, 0x4d7, 0x5b0, 0x4d7, 0x66c, 0x584, 0x66c, 0x584, 0x6fa, 0x602, 0x6fa, +0x602, 0x6fa, 0x602, 0x776, 0x669, 0x776, 0x669, 0x83b, 0x717, 0x83b, 0x717, +0x92b, 0x7ec, 0x92b, 0x7ec, 0xa61, 0x903, 0xa61, 0x903, 0xcbb, 0xb3e, 0xcbb, +0xb3e, 0xeb0, 0xd10, 0xeb0, 0xd10, 0xeb0, 0xd10, 0xfce, 0xe0d, 0xfce, 0xe0d, +0x11c4, 0xfe0, 0x11c4, 0xfe0, 0x1359, 0x1154, 0x1359, 0x1154, 0x14cd, 0x12a9, 0x14cd, +0x12a9, 0x16e2, 0x14a1, 0x16e2, 0x14a1, 0x183c, 0x15e4, 0x183c, 0x15e4, 0x183c, 0x15e4, +0x1968, 0x16fa, 0x1968, 0x16fa, 0x19e5, 0x1768, 0x19e5, 0x1768, 0x1a49, 0x17c1, 0x1a49, +0x17c1, 0x1b4c, 0x18bd, 0x1b4c, 0x18bd, 0x1bd4, 0x1943, 0x1bd4, 0x1943, 0x1bd4, 0x1943, +0x1ca8, 0x1a18, 0x1ca8, 0x1a18, 0x1cdd, 0x1a53, 0x1cdd, 0x1a53, 0x1ca2, 0x1a20, 0x1ca2, +0x1a20, 0x1ce6, 0x1a6e, 0x1ce6, 0x1a6e, 0x1c77, 0x1a09, 0x1c77, 0x1a09, 0x1c32, 0x19d0, +0x1c32, 0x19d0, 0x1c32, 0x19d0, 0x1cca, 0x1a73, 0x1cca, 0x1a73, 0x1d69, 0x1b1b, 0x1d69, +0x1b1b, 0x1d1a, 0x1ad4, 0x1d1a, 0x1ad4, 0x1bf6, 0x19b7, 0x1bf6, 0x19b7, 0x1ae9, 0x18ae, +0x1ae9, 0x18ae, 0x193c, 0x1704, 0x193c, 0x1704, 0x193c, 0x1704, 0x16e6, 0x14ae, 0x16e6, +0x14ae, 0x1515, 0x12dd, 0x1515, 0x12dd, 0x13a8, 0x116e, 0x13a8, 0x116e, 0x12fa, 0x10be, +0x12fa, 0x10be, 0x1304, 0x10c6, 0x1304, 0x10c6, 0x1304, 0x10c6, 0x1372, 0x1134, 0x1372, +0x1134, 0x13ff, 0x11c2, 0x13ff, 0x11c2, 0x1438, 0x1200, 0x1438, 0x1200, 0x1430, 0x11ff, +0x1430, 0x11ff, 0x129f, 0x1079, 0x129f, 0x1079, 0x1132, 0xf1b, 0x1132, 0xf1b, 0x1132, +0xf1b, 0x1060, 0xe5c, 0x1060, 0xe5c, 0xe7d, 0xc90, 0xe7d, 0xc90, 0xd4d, 0xb7c, +0xd4d, 0xb7c, 0xce4, 0xb31, 0xce4, 0xb31, 0xd34, 0xba2, 0xd34, 0xba2, 0xd2b, +0xbbe, 0xd2b, 0xbbe, 0xd2b, 0xbbe, 0xc0e, 0xac6, 0xc0e, 0xac6, 0xb59, 0xa38, +0xb59, 0xa38, 0x9eb, 0x8f1, 0x9eb, 0x8f1, 0x869, 0x794, 0x869, 0x794, 0x71b, +0x66a, 0x71b, 0x66a, 0x71b, 0x66a, 0x4f1, 0x462, 0x4f1, 0x462, 0x3bf, 0x350, +0x3bf, 0x350, 0x2f3, 0x29f, 0x2f3, 0x29f, 0x1ee, 0x1b3, 0x1ee, 0x1b3, 0x1c7, +0x1a0, 0x1c7, 0x1a0, 0x18b, 0x176, 0x18b, 0x176, 0x18b, 0x176, 0x10c, 0x105, +0x10c, 0x105, 0xffe0, 0xffe3, 0xffe0, 0xffe3, 0xfe5d, 0xfe69, 0xfe5d, 0xfe69, 0xfdad, +0xfdbe, 0xfdad, 0xfdbe, 0xfc6f, 0xfc83, 0xfc6f, 0xfc83, 0xfb37, 0xfb4c, 0xfb37, 0xfb4c, +0xfb37, 0xfb4c, 0xfab3, 0xfac9, 0xfab3, 0xfac9, 0xf9c4, 0xf9d9, 0xf9c4, 0xf9d9, 0xf96f, +0xf983, 0xf96f, 0xf983, 0xf93f, 0xf950, 0xf93f, 0xf950, 0xf878, 0xf885, 0xf878, 0xf885, +0xf878, 0xf885, 0xf7fb, 0xf805, 0xf7fb, 0xf805, 0xf7d6, 0xf7da, 0xf7d6, 0xf7da, 0xf7fa, +0xf7f8, 0xf7fa, 0xf7f8, 0xf7a0, 0xf797, 0xf7a0, 0xf797, 0xf799, 0xf786, 0xf799, 0xf786, +0xf840, 0xf822, 0xf840, 0xf822, 0xf840, 0xf822, 0xf84c, 0xf821, 0xf84c, 0xf821, 0xf8b4, +0xf87b, 0xf8b4, 0xf87b, 0xf9c0, 0xf976, 0xf9c0, 0xf976, 0xfa77, 0xfa1b, 0xfa77, 0xfa1b, +0xfb33, 0xfac3, 0xfb33, 0xfac3, 0xfc82, 0xfbff, 0xfc82, 0xfbff, 0xfc82, 0xfbff, 0xfdc4, +0xfd2d, 0xfdc4, 0xfd2d, 0xfe7a, 0xfdcf, 0xfe7a, 0xfdcf, 0xff50, 0xfe94, 0xff50, 0xfe94, +0xf5, 0x2a, 0xf5, 0x2a, 0x287, 0x1b3, 0x287, 0x1b3, 0x287, 0x1b3, 0x39b, +0x2c1, 0x39b, 0x2c1, 0x428, 0x34e, 0x428, 0x34e, 0x3bc, 0x2e8, 0x3bc, 0x2e8, +0x366, 0x2a0, 0x366, 0x2a0, 0x310, 0x260, 0x310, 0x260, 0x306, 0x274, 0x306, +0x274, 0x306, 0x274, 0x356, 0x2ea, 0x356, 0x2ea, 0x36b, 0x32c, 0x36b, 0x32c, +0x307, 0x2fd, 0x307, 0x2fd, 0x1d0, 0x202, 0x1d0, 0x202, 0x1fa, 0x26e, 0x1fa, +0x26e, 0x1d7, 0x291, 0x1d7, 0x291, 0x1d7, 0x291, 0x2a, 0x12d, 0x2a, 0x12d, +0xff03, 0x50, 0xff03, 0x50, 0xfd88, 0xff20, 0xfd88, 0xff20, 0xfc42, 0xfe24, 0xfc42, +0xfe24, 0xfa6c, 0xfc95, 0xfa6c, 0xfc95, 0xfa6c, 0xfc95, 0xf81c, 0xfa88, 0xf81c, 0xfa88, +0xf66e, 0xf919, 0xf66e, 0xf919, 0xf3fa, 0xf6de, 0xf3fa, 0xf6de, 0xf293, 0xf5a9, 0xf293, +0xf5a9, 0xf1ab, 0xf4ed, 0xf1ab, 0xf4ed, 0xf00a, 0xf370, 0xf00a, 0xf370, 0xf00a, 0xf370, +0xef5c, 0xf2e1, 0xef5c, 0xf2e1, 0xee60, 0xf1fc, 0xee60, 0xf1fc, 0xed59, 0xf107, 0xed59, +0xf107, 0xecdb, 0xf097, 0xecdb, 0xf097, 0xec3f, 0xf005, 0xec3f, 0xf005, 0xec3f, 0xf005, +0xebb4, 0xef81, 0xebb4, 0xef81, 0xea7b, 0xee4d, 0xea7b, 0xee4d, 0xe942, 0xed17, 0xe942, +0xed17, 0xe821, 0xebfa, 0xe821, 0xebfa, 0xe61f, 0xe9fd, 0xe61f, 0xe9fd, 0xe3ee, 0xe7d1, +0xe3ee, 0xe7d1, 0xe3ee, 0xe7d1, 0xe1ae, 0xe599, 0xe1ae, 0xe599, 0xdfee, 0xe3e2, 0xdfee, +0xe3e2, 0xdf6f, 0xe36e, 0xdf6f, 0xe36e, 0xdf77, 0xe382, 0xdf77, 0xe382, 0xdfdf, 0xe3f7, +0xdfdf, 0xe3f7, 0xe072, 0xe498, 0xe072, 0xe498, 0xe072, 0xe498, 0xe0fe, 0xe531, 0xe0fe, +0xe531, 0xe15e, 0xe59e, 0xe15e, 0xe59e, 0xe130, 0xe579, 0xe130, 0xe579, 0xe13b, 0xe58c, +0xe13b, 0xe58c, 0xe0ff, 0xe554, 0xe0ff, 0xe554, 0xe0ff, 0xe554, 0xdfd6, 0xe42b, 0xdfd6, +0xe42b, 0xdf78, 0xe3c8, 0xdf78, 0xe3c8, 0xdfe1, 0xe426, 0xdfe1, 0xe426, 0xe00b, 0xe441, +0xe00b, 0xe441, 0xe106, 0xe528, 0xe106, 0xe528, 0xe2c5, 0xe6cd, 0xe2c5, 0xe6cd, 0xe2c5, +0xe6cd, 0xe42c, 0xe817, 0xe42c, 0xe817, 0xe4a1, 0xe869, 0xe4a1, 0xe869, 0xe4d6, 0xe879, +0xe4d6, 0xe879, 0xe587, 0xe901, 0xe587, 0xe901, 0xe5fb, 0xe94a, 0xe5fb, 0xe94a, 0xe6d8, +0xe9fa, 0xe6d8, 0xe9fa, 0xe6d8, 0xe9fa, 0xe7c3, 0xeab9, 0xe7c3, 0xeab9, 0xe8d5, 0xeb9c, +0xe8d5, 0xeb9c, 0xea9b, 0xed35, 0xea9b, 0xed35, 0xec42, 0xeeae, 0xec42, 0xeeae, 0xee2c, +0xf06c, 0xee2c, 0xf06c, 0xee2c, 0xf06c, 0xef9d, 0xf1b0, 0xef9d, 0xf1b0, 0xf0ee, 0xf2d5, +0xf0ee, 0xf2d5, 0xf1a1, 0xf35a, 0xf1a1, 0xf35a, 0xf1a4, 0xf331, 0xf1a4, 0xf331, 0xf2f8, +0xf456, 0xf2f8, 0xf456, 0xf39e, 0xf4cd, 0xf39e, 0xf4cd, 0xf39e, 0xf4cd, 0xf401, 0xf4ff, +0xf401, 0xf4ff, 0xf535, 0xf5ff, 0xf535, 0xf5ff, 0xf664, 0xf6f7, 0xf664, 0xf6f7, 0xf83c, +0xf896, 0xf83c, 0xf896, 0xf9e9, 0xfa07, 0xf9e9, 0xfa07, 0xfb9d, 0xfb7c, 0xfb9d, 0xfb7c, +0xfb9d, 0xfb7c, 0xfd39, 0xfcd8, 0xfd39, 0xfcd8, 0xfe82, 0xfddf, 0xfe82, 0xfddf, 0xbe, +0xffd7, 0xbe, 0xffd7, 0x2ca, 0x1a1, 0x2ca, 0x1a1, 0x446, 0x2da, 0x446, 0x2da, +0x446, 0x2da, 0x60b, 0x460, 0x60b, 0x460, 0x749, 0x562, 0x749, 0x562, 0x871, +0x652, 0x871, 0x652, 0x9d2, 0x781, 0x9d2, 0x781, 0xabb, 0x83f, 0xabb, 0x83f, +0xb5a, 0x8bb, 0xb5a, 0x8bb, 0xb5a, 0x8bb, 0xb63, 0x8a9, 0xb63, 0x8a9, 0xc2b, +0x95e, 0xc2b, 0x95e, 0xdb0, 0xada, 0xdb0, 0xada, 0xeac, 0xbd5, 0xeac, 0xbd5, +0xfed, 0xd1e, 0xfed, 0xd1e, 0x1074, 0xdb4, 0x1074, 0xdb4, 0x1074, 0xdb4, 0x1069, +0xdc0, 0x1069, 0xdc0, 0x1034, 0xda8, 0x1034, 0xda8, 0xfb0, 0xd47, 0xfb0, 0xd47, +0xf9a, 0xd58, 0xf9a, 0xd58, 0xee9, 0xcd1, 0xee9, 0xcd1, 0xee9, 0xcd1, 0xe32, +0xc46, 0xe32, 0xc46, 0xdba, 0xbfb, 0xdba, 0xbfb, 0xcec, 0xb5a, 0xcec, 0xb5a, +0xca7, 0xb42, 0xca7, 0xb42, 0xc34, 0xaf9, 0xc34, 0xaf9, 0xb38, 0xa26, 0xb38, +0xa26, 0xb38, 0xa26, 0xa9a, 0x9af, 0xa9a, 0x9af, 0xa2b, 0x964, 0xa2b, 0x964, +0x977, 0x8d2, 0x977, 0x8d2, 0x8cd, 0x847, 0x8cd, 0x847, 0x858, 0x7f0, 0x858, +0x7f0, 0x796, 0x74a, 0x796, 0x74a, 0x796, 0x74a, 0x63a, 0x607, 0x63a, 0x607, +0x532, 0x518, 0x532, 0x518, 0x486, 0x483, 0x486, 0x483, 0x333, 0x346, 0x333, +0x346, 0x196, 0x1bf, 0x196, 0x1bf, 0x196, 0x1bf, 0xffc2, 0xffff, 0xffc2, 0xffff, +0xfe66, 0xfeb6, 0xfe66, 0xfeb6, 0xfd99, 0xfdf9, 0xfd99, 0xfdf9, 0xfd2c, 0xfd9c, 0xfd2c, +0xfd9c, 0xfd4d, 0xfdc9, 0xfd4d, 0xfdc9, 0xfc95, 0xfd1a, 0xfc95, 0xfd1a, 0xfc95, 0xfd1a, +0xfb8f, 0xfc19, 0xfb8f, 0xfc19, 0xf96a, 0xf9f5, 0xf96a, 0xf9f5, 0xf6cf, 0xf756, 0xf6cf, +0xf756, 0xf587, 0xf605, 0xf587, 0xf605, 0xf3aa, 0xf419, 0xf3aa, 0xf419, 0xf250, 0xf2ab, +0xf250, 0xf2ab, 0xf250, 0xf2ab, 0xf1ee, 0xf231, 0xf1ee, 0xf231, 0xf270, 0xf296, 0xf270, +0xf296, 0xf3fb, 0xf400, 0xf3fb, 0xf400, 0xf544, 0xf525, 0xf544, 0xf525, 0xf72f, 0xf6ea, +0xf72f, 0xf6ea, 0xf72f, 0xf6ea, 0xf943, 0xf8d7, 0xf943, 0xf8d7, 0xfb05, 0xfa72, 0xfb05, +0xfa72, 0xfcd5, 0xfc1d, 0xfcd5, 0xfc1d, 0xfe01, 0xfd28, 0xfe01, 0xfd28, 0xff48, 0xfe52, +0xff48, 0xfe52, 0x105, 0xfff6, 0x105, 0xfff6, 0x105, 0xfff6, 0x2cd, 0x1ac, 0x2cd, +0x1ac, 0x51c, 0x3ef, 0x51c, 0x3ef, 0x723, 0x5f1, 0x723, 0x5f1, 0x8ba, 0x78a, +0x8ba, 0x78a, 0x9c3, 0x89c, 0x9c3, 0x89c, 0x97b, 0x865, 0x97b, 0x865, 0x97b, +0x865, 0x9bc, 0x8bc, 0x9bc, 0x8bc, 0xa09, 0x923, 0xa09, 0x923, 0x9ae, 0x8e6, +0x9ae, 0x8e6, 0x976, 0x8d0, 0x976, 0x8d0, 0x8af, 0x82a, 0x8af, 0x82a, 0x8af, +0x82a, 0x84e, 0x7eb, 0x84e, 0x7eb, 0x7e4, 0x7a1, 0x7e4, 0x7a1, 0x6e6, 0x6c1, +0x6e6, 0x6c1, 0x5ea, 0x5df, 0x5ea, 0x5df, 0x42c, 0x436, 0x42c, 0x436, 0x2b5, +0x2d0, 0x2b5, 0x2d0, 0x2b5, 0x2d0, 0x19e, 0x1c4, 0x19e, 0x1c4, 0x6a, 0x96, +0x6a, 0x96, 0xb, 0x38, 0xb, 0x38, 0xffbf, 0xffea, 0xffbf, 0xffea, 0xff27, +0xff4b, 0xff27, 0xff4b, 0xfeae, 0xfec8, 0xfeae, 0xfec8, 0xfeae, 0xfec8, 0xfe6e, 0xfe7d, +0xfe6e, 0xfe7d, 0xfe50, 0xfe53, 0xfe50, 0xfe53, 0xfe40, 0xfe38, 0xfe40, 0xfe38, 0xfeee, +0xfedb, 0xfeee, 0xfedb, 0xff5c, 0xff41, 0xff5c, 0xff41, 0xff5c, 0xff41, 0xfeef, 0xfed0, +0xfeef, 0xfed0, 0xff22, 0xff01, 0xff22, 0xff01, 0xff5d, 0xff3d, 0xff5d, 0xff3d, 0xff15, +0xfefa, 0xff15, 0xfefa, 0xfe93, 0xfe81, 0xfe93, 0xfe81, 0xfe14, 0xfe0c, 0xfe14, 0xfe0c, +0xfe14, 0xfe0c, 0xfe77, 0xfe7b, 0xfe77, 0xfe7b, 0xfe6f, 0xfe80, 0xfe6f, 0xfe80, 0xfea9, +0xfec6, 0xfea9, 0xfec6, 0xff7d, 0xffa4, 0xff7d, 0xffa4, 0x27, 0x57, 0x27, 0x57, +0x27, 0x57, 0x190, 0x1c3, 0x190, 0x1c3, 0x1f3, 0x225, 0x1f3, 0x225, 0x2bc, +0x2e7, 0x2bc, 0x2e7, 0x403, 0x421, 0x403, 0x421, 0x3e0, 0x3eb, 0x3e0, 0x3eb, +0x3cc, 0x3bd, 0x3cc, 0x3bd, 0x3cc, 0x3bd, 0x3f0, 0x3c0, 0x3f0, 0x3c0, 0x528, +0x4d2, 0x528, 0x4d2, 0x688, 0x607, 0x688, 0x607, 0x783, 0x6d2, 0x783, 0x6d2, +0x909, 0x825, 0x909, 0x825, 0xa3a, 0x922, 0xa3a, 0x922, 0xa3a, 0x922, 0xbb6, +0xa69, 0xbb6, 0xa69, 0xda8, 0xc28, 0xda8, 0xc28, 0xf16, 0xd65, 0xf16, 0xd65, +0x108e, 0xeaf, 0x108e, 0xeaf, 0x1266, 0x105d, 0x1266, 0x105d, 0x1266, 0x105d, 0x1428, +0x11fa, 0x1428, 0x11fa, 0x15f0, 0x13a3, 0x15f0, 0x13a3, 0x1720, 0x14ba, 0x1720, 0x14ba, +0x1884, 0x160a, 0x1884, 0x160a, 0x19de, 0x1755, 0x19de, 0x1755, 0x1a4c, 0x17b9, 0x1a4c, +0x17b9, 0x1a4c, 0x17b9, 0x1bba, 0x1923, 0x1bba, 0x1923, 0x1cca, 0x1a30, 0x1cca, 0x1a30, +0x1cf2, 0x1a58, 0x1cf2, 0x1a58, 0x1d7f, 0x1ae8, 0x1d7f, 0x1ae8, 0x1d8d, 0x1af9, 0x1d8d, +0x1af9, 0x1dff, 0x1b6e, 0x1dff, 0x1b6e, 0x1dff, 0x1b6e, 0x1e95, 0x1c05, 0x1e95, 0x1c05, +0x1ee3, 0x1c54, 0x1ee3, 0x1c54, 0x1f40, 0x1cb0, 0x1f40, 0x1cb0, 0x1ee1, 0x1c4f, 0x1ee1, +0x1c4f, 0x1e89, 0x1bf3, 0x1e89, 0x1bf3, 0x1e89, 0x1bf3, 0x1dae, 0x1b13, 0x1dae, 0x1b13, +0x1c03, 0x1962, 0x1c03, 0x1962, 0x1a5b, 0x17b5, 0x1a5b, 0x17b5, 0x1865, 0x15ba, 0x1865, +0x15ba, 0x16b6, 0x1408, 0x16b6, 0x1408, 0x15b8, 0x130a, 0x15b8, 0x130a, 0x15b8, 0x130a, +0x1555, 0x12ab, 0x1555, 0x12ab, 0x14c5, 0x1221, 0x14c5, 0x1221, 0x1468, 0x11d1, 0x1468, +0x11d1, 0x1575, 0x12ef, 0x1575, 0x12ef, 0x15c6, 0x1357, 0x15c6, 0x1357, 0x14ad, 0x125a, +0x14ad, 0x125a, 0x14ad, 0x125a, 0x141c, 0x11eb, 0x141c, 0x11eb, 0x1328, 0x111e, 0x1328, +0x111e, 0x1184, 0xfa4, 0x1184, 0xfa4, 0xfdb, 0xe2a, 0xfdb, 0xe2a, 0xe96, 0xd16, +0xe96, 0xd16, 0xe96, 0xd16, 0xe1a, 0xccd, 0xe1a, 0xccd, 0xd1e, 0xc05, 0xd1e, +0xc05, 0xc84, 0xb9f, 0xc84, 0xb9f, 0xba0, 0xaec, 0xba0, 0xaec, 0xa52, 0x9cf, +0xa52, 0x9cf, 0x948, 0x8f2, 0x948, 0x8f2, 0x948, 0x8f2, 0x706, 0x6db, 0x706, +0x6db, 0x551, 0x54d, 0x551, 0x54d, 0x39c, 0x3bb, 0x39c, 0x3bb, 0x1f1, 0x231, +0x1f1, 0x231, 0xbe, 0x11a, 0xbe, 0x11a, 0xff0a, 0xff7f, 0xff0a, 0xff7f, 0xff0a, +0xff7f, 0xfe5a, 0xfee6, 0xfe5a, 0xfee6, 0xfd51, 0xfdf0, 0xfd51, 0xfdf0, 0xfbfc, 0xfcad, +0xfbfc, 0xfcad, 0xfb54, 0xfc17, 0xfb54, 0xfc17, 0xfa46, 0xfb17, 0xfa46, 0xfb17, 0xfa46, +0xfb17, 0xf96b, 0xfa4b, 0xf96b, 0xfa4b, 0xf890, 0xf97d, 0xf890, 0xf97d, 0xf6f8, 0xf7f0, +0xf6f8, 0xf7f0, 0xf58c, 0xf68f, 0xf58c, 0xf68f, 0xf496, 0xf5a0, 0xf496, 0xf5a0, 0xf403, +0xf513, 0xf403, 0xf513, 0xf403, 0xf513, 0xf402, 0xf515, 0xf402, 0xf515, 0xf3d2, 0xf4e5, +0xf3d2, 0xf4e5, 0xf3dc, 0xf4ea, 0xf3dc, 0xf4ea, 0xf3ed, 0xf4f1, 0xf3ed, 0xf4f1, 0xf40f, +0xf503, 0xf40f, 0xf503, 0xf568, 0xf648, 0xf568, 0xf648, 0xf568, 0xf648, 0xf64c, 0xf710, +0xf64c, 0xf710, 0xf6f3, 0xf797, 0xf6f3, 0xf797, 0xf83e, 0xf8bb, 0xf83e, 0xf8bb, 0xf947, +0xf998, 0xf947, 0xf998, 0xfaa1, 0xfac4, 0xfaa1, 0xfac4, 0xfaa1, 0xfac4, 0xfbc0, 0xfbb1, +0xfbc0, 0xfbb1, 0xfd40, 0xfcfd, 0xfd40, 0xfcfd, 0xff25, 0xfeb0, 0xff25, 0xfeb0, 0x9e, +0xfff7, 0x9e, 0xfff7, 0x2aa, 0x1d6, 0x2aa, 0x1d6, 0x42a, 0x32e, 0x42a, 0x32e, +0x42a, 0x32e, 0x567, 0x44a, 0x567, 0x44a, 0x678, 0x542, 0x678, 0x542, 0x66c, +0x528, 0x66c, 0x528, 0x624, 0x4dd, 0x624, 0x4dd, 0x594, 0x455, 0x594, 0x455, +0x4f9, 0x3ce, 0x4f9, 0x3ce, 0x4f9, 0x3ce, 0x43d, 0x331, 0x43d, 0x331, 0x3fc, +0x31a, 0x3fc, 0x31a, 0x4f3, 0x446, 0x4f3, 0x446, 0x535, 0x4c6, 0x535, 0x4c6, +0x4a9, 0x47f, 0x4a9, 0x47f, 0x4a9, 0x47f, 0x450, 0x470, 0x450, 0x470, 0x371, +0x3e0, 0x371, 0x3e0, 0x252, 0x312, 0x252, 0x312, 0xa5, 0x1b5, 0xa5, 0x1b5, +0xfea9, 0x8, 0xfea9, 0x8, 0xfcac, 0xfe56, 0xfcac, 0xfe56, 0xfcac, 0xfe56, 0xfa4d, +0xfc3d, 0xfa4d, 0xfc3d, 0xf864, 0xfa94, 0xf864, 0xfa94, 0xf62f, 0xf898, 0xf62f, 0xf898, +0xf4d1, 0xf76d, 0xf4d1, 0xf76d, 0xf3bc, 0xf684, 0xf3bc, 0xf684, 0xf18b, 0xf478, 0xf18b, +0xf478, 0xf18b, 0xf478, 0xf034, 0xf340, 0xf034, 0xf340, 0xeea6, 0xf1cd, 0xeea6, 0xf1cd, +0xecf5, 0xf033, 0xecf5, 0xf033, 0xeb49, 0xee9b, 0xeb49, 0xee9b, 0xe9ba, 0xed1f, 0xe9ba, +0xed1f, 0xe9ba, 0xed1f, 0xe967, 0xecdf, 0xe967, 0xecdf, 0xe84c, 0xebd8, 0xe84c, 0xebd8, +0xe6ef, 0xea92, 0xe6ef, 0xea92, 0xe5f2, 0xe9ae, 0xe5f2, 0xe9ae, 0xe3f0, 0xe7c8, 0xe3f0, +0xe7c8, 0xe1cd, 0xe5c5, 0xe1cd, 0xe5c5, 0xe1cd, 0xe5c5, 0xdf93, 0xe3af, 0xdf93, 0xe3af, +0xdd30, 0xe171, 0xdd30, 0xe171, 0xdb7d, 0xdfe4, 0xdb7d, 0xdfe4, 0xda5f, 0xdeed, 0xda5f, +0xdeed, 0xda2e, 0xdee2, 0xda2e, 0xdee2, 0xda59, 0xdf2f, 0xda59, 0xdf2f, 0xda59, 0xdf2f, +0xdabb, 0xdfaf, 0xdabb, 0xdfaf, 0xdbf1, 0xe0fc, 0xdbf1, 0xe0fc, 0xdcaf, 0xe1ca, 0xdcaf, +0xe1ca, 0xdd48, 0xe26a, 0xdd48, 0xe26a, 0xde0d, 0xe32c, 0xde0d, 0xe32c, 0xde0d, 0xe32c, +0xddd0, 0xe2e1, 0xddd0, 0xe2e1, 0xddb3, 0xe2ac, 0xddb3, 0xe2ac, 0xde24, 0xe2f8, 0xde24, +0xe2f8, 0xdef4, 0xe399, 0xdef4, 0xe399, 0xe087, 0xe4f2, 0xe087, 0xe4f2, 0xe1f0, 0xe619, +0xe1f0, 0xe619, 0xe1f0, 0xe619, 0xe371, 0xe74f, 0xe371, 0xe74f, 0xe46e, 0xe7fd, 0xe46e, +0xe7fd, 0xe547, 0xe881, 0xe547, 0xe881, 0xe6f5, 0xe9d9, 0xe6f5, 0xe9d9, 0xe7b7, 0xea44, +0xe7b7, 0xea44, 0xe7b7, 0xea44, 0xe8b4, 0xeaec, 0xe8b4, 0xeaec, 0xea60, 0xec45, 0xea60, +0xec45, 0xeb8a, 0xed20, 0xeb8a, 0xed20, 0xecd1, 0xee1e, 0xecd1, 0xee1e, 0xedf8, 0xef03, +0xedf8, 0xef03, 0xeeda, 0xefa9, 0xeeda, 0xefa9, 0xeeda, 0xefa9, 0xef3f, 0xefd9, 0xef3f, +0xefd9, 0xf01b, 0xf087, 0xf01b, 0xf087, 0xf224, 0xf268, 0xf224, 0xf268, 0xf372, 0xf393, +0xf372, 0xf393, 0xf42a, 0xf42c, 0xf42a, 0xf42c, 0xf52c, 0xf513, 0xf52c, 0xf513, 0xf52c, +0xf513, 0xf615, 0xf5e2, 0xf615, 0xf5e2, 0xf6a0, 0xf654, 0xf6a0, 0xf654, 0xf6b6, 0xf652, +0xf6b6, 0xf652, 0xf787, 0xf708, 0xf787, 0xf708, 0xf888, 0xf7ed, 0xf888, 0xf7ed, 0xf888, +0xf7ed, 0xf99c, 0xf8e3, 0xf99c, 0xf8e3, 0xfb4a, 0xfa70, 0xfb4a, 0xfa70, 0xfd27, 0xfc2a, +0xfd27, 0xfc2a, 0xffec, 0xfeca, 0xffec, 0xfeca, 0x1a7, 0x5f, 0x1a7, 0x5f, 0x27e, +0x110, 0x27e, 0x110, 0x27e, 0x110, 0x3fa, 0x266, 0x3fa, 0x266, 0x507, 0x34f, +0x507, 0x34f, 0x5e9, 0x410, 0x5e9, 0x410, 0x65e, 0x468, 0x65e, 0x468, 0x6e5, +0x4d6, 0x6e5, 0x4d6, 0x7da, 0x5b8, 0x7da, 0x5b8, 0x7da, 0x5b8, 0x89e, 0x66f, +0x89e, 0x66f, 0xa23, 0x7ee, 0xa23, 0x7ee, 0xbcb, 0x997, 0xbcb, 0x997, 0xcb1, +0xa84, 0xcb1, 0xa84, 0xdf3, 0xbd3, 0xdf3, 0xbd3, 0xdf3, 0xbd3, 0xeef, 0xce2, +0xeef, 0xce2, 0xf1e, 0xd27, 0xf1e, 0xd27, 0xef6, 0xd19, 0xef6, 0xd19, 0xe71, +0xcb0, 0xe71, 0xcb0, 0xe17, 0xc72, 0xe17, 0xc72, 0xd02, 0xb79, 0xd02, 0xb79, +0xd02, 0xb79, 0xc56, 0xae7, 0xc56, 0xae7, 0xcc8, 0xb70, 0xcc8, 0xb70, 0xc57, +0xb13, 0xc57, 0xb13, 0xc32, 0xaff, 0xc32, 0xaff, 0xc47, 0xb20, 0xc47, 0xb20, +0xbff, 0xae1, 0xbff, 0xae1, 0xbff, 0xae1, 0xc60, 0xb47, 0xc60, 0xb47, 0xc9e, +0xb87, 0xc9e, 0xb87, 0xcd0, 0xbba, 0xcd0, 0xbba, 0xc82, 0xb6b, 0xc82, 0xb6b, +0xbdd, 0xac5, 0xbdd, 0xac5, 0xbdd, 0xac5, 0xbd9, 0xac3, 0xbd9, 0xac3, 0xb32, +0xa20, 0xb32, 0xa20, 0xa84, 0x979, 0xa84, 0x979, 0x9b2, 0x8b3, 0x9b2, 0x8b3, +0x7a9, 0x6bb, 0x7a9, 0x6bb, 0x5e3, 0x50c, 0x5e3, 0x50c, 0x5e3, 0x50c, 0x497, +0x3dc, 0x497, 0x3dc, 0x321, 0x286, 0x321, 0x286, 0x200, 0x18a, 0x200, 0x18a, +0x116, 0xc8, 0x116, 0xc8, 0xff94, 0xff71, 0xff94, 0xff71, 0xfe00, 0xfe08, 0xfe00, +0xfe08, 0xfe00, 0xfe08, 0xfd4c, 0xfd7d, 0xfd4c, 0xfd7d, 0xfcc2, 0xfd19, 0xfcc2, 0xfd19, +0xfb52, 0xfbcb, 0xfb52, 0xfbcb, 0xf97c, 0xfa10, 0xf97c, 0xfa10, 0xf7cf, 0xf876, 0xf7cf, +0xf876, 0xf7cf, 0xf876, 0xf66e, 0xf71f, 0xf66e, 0xf71f, 0xf549, 0xf5fa, 0xf549, 0xf5fa, +0xf443, 0xf4ea, 0xf443, 0xf4ea, 0xf42f, 0xf4c2, 0xf42f, 0xf4c2, 0xf46e, 0xf4e2, 0xf46e, +0xf4e2, 0xf552, 0xf59f, 0xf552, 0xf59f, 0xf552, 0xf59f, 0xf70d, 0xf72a, 0xf70d, 0xf72a, +0xf90c, 0xf8f4, 0xf90c, 0xf8f4, 0xfbd7, 0xfb84, 0xfbd7, 0xfb84, 0xfd71, 0xfce3, 0xfd71, +0xfce3, 0xfe4f, 0xfd84, 0xfe4f, 0xfd84, 0xffb2, 0xfead, 0xffb2, 0xfead, 0xffb2, 0xfead, +0xfd, 0xffc3, 0xfd, 0xffc3, 0x25f, 0xf8, 0x25f, 0xf8, 0x375, 0x1e9, 0x375, +0x1e9, 0x4fa, 0x353, 0x4fa, 0x353, 0x66e, 0x4b6, 0x66e, 0x4b6, 0x66e, 0x4b6, +0x76c, 0x5b2, 0x76c, 0x5b2, 0x8b3, 0x701, 0x8b3, 0x701, 0x8e7, 0x74a, 0x8e7, +0x74a, 0x8c5, 0x749, 0x8c5, 0x749, 0x8e2, 0x792, 0x8e2, 0x792, 0x7ea, 0x6cd, +0x7ea, 0x6cd, 0x7ea, 0x6cd, 0x712, 0x630, 0x712, 0x630, 0x602, 0x560, 0x602, +0x560, 0x424, 0x3c5, 0x424, 0x3c5, 0x264, 0x248, 0x264, 0x248, 0x4d, 0x72, +0x4d, 0x72, 0xff2f, 0xff92, 0xff2f, 0xff92, 0xff2f, 0xff92, 0xfef6, 0xff91, 0xfef6, +0xff91, 0xfe46, 0xff12, 0xfe46, 0xff12, 0xfe59, 0xff4d, 0xfe59, 0xff4d, 0xfe6b, 0xff7e, +0xfe6b, 0xff7e, 0xfe00, 0xff28, 0xfe00, 0xff28, 0xfe00, 0xff28, 0xfe4f, 0xff82, 0xfe4f, +0xff82, 0xfe6e, 0xffa3, 0xfe6e, 0xffa3, 0xfe25, 0xff53, 0xfe25, 0xff53, 0xfdaf, 0xfecd, +0xfdaf, 0xfecd, 0xfdf9, 0xff00, 0xfdf9, 0xff00, 0xfefa, 0xffe4, 0xfefa, 0xffe4, 0xfefa, +0xffe4, 0xff90, 0x59, 0xff90, 0x59, 0xe0, 0x184, 0xe0, 0x184, 0x19f, 0x21e, +0x19f, 0x21e, 0x158, 0x1b1, 0x158, 0x1b1, 0x1a3, 0x1d6, 0x1a3, 0x1d6, 0x1f7, +0x208, 0x1f7, 0x208, 0x1f7, 0x208, 0x1f9, 0x1e9, 0x1f9, 0x1e9, 0x19e, 0x170, +0x19e, 0x170, 0x16a, 0x122, 0x16a, 0x122, 0x184, 0x124, 0x184, 0x124, 0x1ef, +0x17b, 0x1ef, 0x17b, 0x1ef, 0x17b, 0x34d, 0x2c5, 0x34d, 0x2c5, 0x493, 0x3fa, +0x493, 0x3fa, 0x519, 0x470, 0x519, 0x470, 0x55e, 0x4a4, 0x55e, 0x4a4, 0x5d9, +0x50e, 0x5d9, 0x50e, 0x6eb, 0x60d, 0x6eb, 0x60d, 0x6eb, 0x60d, 0x7aa, 0x6b7, +0x7aa, 0x6b7, 0x7a1, 0x695, 0x7a1, 0x695, 0x768, 0x640, 0x768, 0x640, 0x791, +0x64b, 0x791, 0x64b, 0x87c, 0x712, 0x87c, 0x712, 0x95c, 0x7cc, 0x95c, 0x7cc, +0x95c, 0x7cc, 0xad3, 0x919, 0xad3, 0x919, 0xd13, 0xb2d, 0xd13, 0xb2d, 0xe15, +0xc01, 0xe15, 0xc01, 0xf34, 0xcf0, 0xf34, 0xcf0, 0x1135, 0xec1, 0x1135, 0xec1, +0x1135, 0xec1, 0x12e7, 0x1045, 0x12e7, 0x1045, 0x13eb, 0x111b, 0x13eb, 0x111b, 0x1473, +0x1178, 0x1473, 0x1178, 0x15d1, 0x12ae, 0x15d1, 0x12ae, 0x1712, 0x13cb, 0x1712, 0x13cb, +0x1801, 0x149a, 0x1801, 0x149a, 0x1801, 0x149a, 0x1931, 0x15b0, 0x1931, 0x15b0, 0x198d, +0x15f6, 0x198d, 0x15f6, 0x1a03, 0x165d, 0x1a03, 0x165d, 0x1afc, 0x174c, 0x1afc, 0x174c, +0x1ba1, 0x17ee, 0x1ba1, 0x17ee, 0x1ba1, 0x17ee, 0x1cb3, 0x1901, 0x1cb3, 0x1901, 0x1ced, +0x1943, 0x1ced, 0x1943, 0x1ce3, 0x1945, 0x1ce3, 0x1945, 0x1d5b, 0x19cf, 0x1d5b, 0x19cf, +0x1d15, 0x199e, 0x1d15, 0x199e, 0x1d28, 0x19cc, 0x1d28, 0x19cc, 0x1d28, 0x19cc, 0x1cfa, +0x19ba, 0x1cfa, 0x19ba, 0x1c1c, 0x18fc, 0x1c1c, 0x18fc, 0x1ab7, 0x17ba, 0x1ab7, 0x17ba, +0x18eb, 0x1613, 0x18eb, 0x1613, 0x1797, 0x14e6, 0x1797, 0x14e6, 0x16e4, 0x145b, 0x16e4, +0x145b, 0x16e4, 0x145b, 0x162d, 0x13cd, 0x162d, 0x13cd, 0x159c, 0x1366, 0x159c, 0x1366, +0x1556, 0x134a, 0x1556, 0x134a, 0x15c7, 0x13e4, 0x15c7, 0x13e4, 0x165c, 0x14a1, 0x165c, +0x14a1, 0x165c, 0x14a1, 0x1687, 0x14f4, 0x1687, 0x14f4, 0x173a, 0x15cd, 0x173a, 0x15cd, +0x16d7, 0x158e, 0x16d7, 0x158e, 0x1603, 0x14dc, 0x1603, 0x14dc, 0x153c, 0x1435, 0x153c, +0x1435, 0x1405, 0x131a, 0x1405, 0x131a, 0x1405, 0x131a, 0x129b, 0x11ca, 0x129b, 0x11ca, +0x1101, 0x1047, 0x1101, 0x1047, 0xfcd, 0xf27, 0xfcd, 0xf27, 0xe73, 0xddf, 0xe73, +0xddf, 0xcdb, 0xc55, 0xcdb, 0xc55, 0xc1e, 0xba5, 0xc1e, 0xba5, 0xc1e, 0xba5, +0xb34, 0xac4, 0xb34, 0xac4, 0x979, 0x912, 0x979, 0x912, 0x81a, 0x7bb, 0x81a, +0x7bb, 0x705, 0x6ad, 0x705, 0x6ad, 0x617, 0x5c7, 0x617, 0x5c7, 0x617, 0x5c7, +0x3c2, 0x37a, 0x3c2, 0x37a, 0x100, 0xc2, 0x100, 0xc2, 0xfe90, 0xfe5d, 0xfe90, +0xfe5d, 0xfcde, 0xfcba, 0xfcde, 0xfcba, 0xfbd0, 0xfbbb, 0xfbd0, 0xfbbb, 0xfa34, 0xfa31, +0xfa34, 0xfa31, 0xfa34, 0xfa31, 0xf9ac, 0xf9be, 0xf9ac, 0xf9be, 0xf8ee, 0xf917, 0xf8ee, +0xf917, 0xf710, 0xf752, 0xf710, 0xf752, 0xf5de, 0xf63a, 0xf5de, 0xf63a, 0xf514, 0xf58b, +0xf514, 0xf58b, 0xf3c2, 0xf452, 0xf3c2, 0xf452, 0xf3c2, 0xf452, 0xf1fc, 0xf2a5, 0xf1fc, +0xf2a5, 0xf03f, 0xf100, 0xf03f, 0xf100, 0xefc8, 0xf09d, 0xefc8, 0xf09d, 0xefde, 0xf0c2, +0xefde, 0xf0c2, 0xf077, 0xf166, 0xf077, 0xf166, 0xf077, 0xf166, 0xf134, 0xf229, 0xf134, +0xf229, 0xf18c, 0xf281, 0xf18c, 0xf281, 0xf29f, 0xf38e, 0xf29f, 0xf38e, 0xf3cd, 0xf4ae, +0xf3cd, 0xf4ae, 0xf4b8, 0xf587, 0xf4b8, 0xf587, 0xf5b1, 0xf667, 0xf5b1, 0xf667, 0xf5b1, +0xf667, 0xf660, 0xf6f9, 0xf660, 0xf6f9, 0xf7c8, 0xf83e, 0xf7c8, 0xf83e, 0xf9da, 0xfa2b, +0xf9da, 0xfa2b, 0xfb98, 0xfbc2, 0xfb98, 0xfbc2, 0xfe50, 0xfe52, 0xfe50, 0xfe52, 0x4a, +0x25, 0x4a, 0x25, 0x4a, 0x25, 0x212, 0x1c8, 0x212, 0x1c8, 0x395, 0x32a, +0x395, 0x32a, 0x483, 0x3fa, 0x483, 0x3fa, 0x609, 0x569, 0x609, 0x569, 0x666, +0x5b5, 0x666, 0x5b5, 0x666, 0x5b5, 0x66e, 0x5b4, 0x66e, 0x5b4, 0x68e, 0x5d3, +0x68e, 0x5d3, 0x6af, 0x5fa, 0x6af, 0x5fa, 0x774, 0x6cd, 0x774, 0x6cd, 0x853, +0x7c2, 0x853, 0x7c2, 0x8bb, 0x848, 0x8bb, 0x848, 0x8bb, 0x848, 0x8c6, 0x877, +0x8c6, 0x877, 0x832, 0x80c, 0x832, 0x80c, 0x796, 0x79d, 0x796, 0x79d, 0x65a, +0x693, 0x65a, 0x693, 0x4e0, 0x54c, 0x4e0, 0x54c, 0x2e6, 0x388, 0x2e6, 0x388, +0x2e6, 0x388, 0x8e, 0x166, 0x8e, 0x166, 0xfec3, 0xffd1, 0xfec3, 0xffd1, 0xfc88, +0xfdcb, 0xfc88, 0xfdcb, 0xfa4e, 0xfbc6, 0xfa4e, 0xfbc6, 0xf89c, 0xfa46, 0xf89c, 0xfa46, +0xf89c, 0xfa46, 0xf6e2, 0xf8bd, 0xf6e2, 0xf8bd, 0xf4bc, 0xf6c6, 0xf4bc, 0xf6c6, 0xf3cb, +0xf602, 0xf3cb, 0xf602, 0xf283, 0xf4e8, 0xf283, 0xf4e8, 0xf154, 0xf3e4, 0xf154, 0xf3e4, +0xefa6, 0xf261, 0xefa6, 0xf261, 0xefa6, 0xf261, 0xed7f, 0xf064, 0xed7f, 0xf064, 0xebab, +0xeebb, 0xebab, 0xeebb, 0xe993, 0xecce, 0xe993, 0xecce, 0xe837, 0xeb9c, 0xe837, 0xeb9c, +0xe601, 0xe991, 0xe601, 0xe991, 0xe45f, 0xe819, 0xe45f, 0xe819, 0xe45f, 0xe819, 0xe233, +0xe617, 0xe233, 0xe617, 0xdfc1, 0xe3ce, 0xdfc1, 0xe3ce, 0xde0c, 0xe23f, 0xde0c, 0xe23f, +0xdbef, 0xe046, 0xdbef, 0xe046, 0xda5b, 0xded3, 0xda5b, 0xded3, 0xda5b, 0xded3, 0xd902, +0xdd95, 0xd902, 0xdd95, 0xd849, 0xdcf1, 0xd849, 0xdcf1, 0xd91d, 0xddd5, 0xd91d, 0xddd5, +0xd96e, 0xde30, 0xd96e, 0xde30, 0xd9c7, 0xde89, 0xd9c7, 0xde89, 0xda27, 0xdee3, 0xda27, +0xdee3, 0xda27, 0xdee3, 0xda66, 0xdf14, 0xda66, 0xdf14, 0xdb74, 0xe00c, 0xdb74, 0xe00c, +0xdb7e, 0xdff9, 0xdb7e, 0xdff9, 0xdc1a, 0xe070, 0xdc1a, 0xe070, 0xdc02, 0xe02e, 0xdc02, +0xe02e, 0xdc53, 0xe051, 0xdc53, 0xe051, 0xdc53, 0xe051, 0xdd35, 0xe100, 0xdd35, 0xe100, +0xde21, 0xe1b8, 0xde21, 0xe1b8, 0xe004, 0xe364, 0xe004, 0xe364, 0xe192, 0xe4bd, 0xe192, +0xe4bd, 0xe31d, 0xe613, 0xe31d, 0xe613, 0xe31d, 0xe613, 0xe4dd, 0xe7a0, 0xe4dd, 0xe7a0, +0xe709, 0xe99e, 0xe709, 0xe99e, 0xe8af, 0xeb19, 0xe8af, 0xeb19, 0xea94, 0xecd7, 0xea94, +0xecd7, 0xeb94, 0xedb3, 0xeb94, 0xedb3, 0xec7a, 0xee7b, 0xec7a, 0xee7b, 0xec7a, 0xee7b, +0xeda2, 0xef88, 0xeda2, 0xef88, 0xee1e, 0xefed, 0xee1e, 0xefed, 0xefab, 0xf165, 0xefab, +0xf165, 0xf165, 0xf30b, 0xf165, 0xf30b, 0xf26e, 0xf400, 0xf26e, 0xf400, 0xf40e, 0xf58c, +0xf40e, 0xf58c, 0xf40e, 0xf58c, 0xf598, 0xf6ff, 0xf598, 0xf6ff, 0xf6ad, 0xf7fb, 0xf6ad, +0xf7fb, 0xf723, 0xf855, 0xf723, 0xf855, 0xf799, 0xf8a9, 0xf799, 0xf8a9, 0xf848, 0xf933, +0xf848, 0xf933, 0xf848, 0xf933, 0xf8c7, 0xf987, 0xf8c7, 0xf987, 0xfb00, 0xfb91, 0xfb00, +0xfb91, 0xfcb7, 0xfd15, 0xfcb7, 0xfd15, 0xfed4, 0xfefc, 0xfed4, 0xfefc, 0xdf, 0xcf, +0xdf, 0xcf, 0x243, 0x1f9, 0x243, 0x1f9, 0x243, 0x1f9, 0x3ef, 0x36b, 0x3ef, +0x36b, 0x54e, 0x492, 0x54e, 0x492, 0x6dc, 0x5ec, 0x6dc, 0x5ec, 0x7c4, 0x6a4, +0x7c4, 0x6a4, 0x8a4, 0x759, 0x8a4, 0x759, 0x8a4, 0x759, 0x974, 0x806, 0x974, +0x806, 0xa9c, 0x911, 0xa9c, 0x911, 0xc17, 0xa78, 0xc17, 0xa78, 0xd25, 0xb7a, +0xd25, 0xb7a, 0xdde, 0xc30, 0xdde, 0xc30, 0xf3e, 0xd93, 0xf3e, 0xd93, 0xf3e, +0xd93, 0xff0, 0xe51, 0xff0, 0xe51, 0x1092, 0xf03, 0x1092, 0xf03, 0x1090, 0xf17, +0x1090, 0xf17, 0x1029, 0xec8, 0x1029, 0xec8, 0xfda, 0xe95, 0xfda, 0xe95, 0xe89, +0xd5e, 0xe89, 0xd5e, 0xe89, 0xd5e, 0xdb2, 0xca2, 0xdb2, 0xca2, 0xd48, 0xc50, +0xd48, 0xc50, 0xd0e, 0xc2a, 0xd0e, 0xc2a, 0xc52, 0xb7e, 0xc52, 0xb7e, 0xbe4, +0xb1c, 0xbe4, 0xb1c, 0xbe4, 0xb1c, 0xbb3, 0xaf0, 0xbb3, 0xaf0, 0xbd2, 0xb10, +0xbd2, 0xb10, 0xb0f, 0xa49, 0xb0f, 0xa49, 0xa45, 0x977, 0xa45, 0x977, 0x96b, +0x893, 0x96b, 0x893, 0x918, 0x833, 0x918, 0x833, 0x918, 0x833, 0x978, 0x887, +0x978, 0x887, 0x8ef, 0x7f1, 0x8ef, 0x7f1, 0x89a, 0x793, 0x89a, 0x793, 0x784, +0x677, 0x784, 0x677, 0x69e, 0x591, 0x69e, 0x591, 0x59c, 0x494, 0x59c, 0x494, +0x59c, 0x494, 0x46d, 0x371, 0x46d, 0x371, 0x316, 0x22e, 0x316, 0x22e, 0x28b, +0x1bd, 0x28b, 0x1bd, 0x19c, 0xf1, 0x19c, 0xf1, 0x81, 0xfffe, 0x81, 0xfffe, +0x81, 0xfffe, 0xff3e, 0xfee9, 0xff3e, 0xfee9, 0xfdc3, 0xfda1, 0xfdc3, 0xfda1, 0xfd1d, +0xfd2f, 0xfd1d, 0xfd2f, 0xfb92, 0xfbdb, 0xfb92, 0xfbdb, 0xfa33, 0xfab2, 0xfa33, 0xfab2, +0xf94e, 0xfa01, 0xf94e, 0xfa01, 0xf94e, 0xfa01, 0xf8af, 0xf992, 0xf8af, 0xf992, 0xf762, +0xf86f, 0xf762, 0xf86f, 0xf681, 0xf7b1, 0xf681, 0xf7b1, 0xf63a, 0xf786, 0xf63a, 0xf786, +0xf64f, 0xf7ae, 0xf64f, 0xf7ae, 0xf69a, 0xf803, 0xf69a, 0xf803, 0xf69a, 0xf803, 0xf7a6, +0xf90f, 0xf7a6, 0xf90f, 0xf864, 0xf9c4, 0xf864, 0xf9c4, 0xf985, 0xfad6, 0xf985, 0xfad6, +0xfbb9, 0xfcf1, 0xfbb9, 0xfcf1, 0xfd28, 0xfe43, 0xfd28, 0xfe43, 0xfd28, 0xfe43, 0xfe98, +0xff91, 0xfe98, 0xff91, 0xffaf, 0x83, 0xffaf, 0x83, 0x150, 0x1fe, 0x150, 0x1fe, +0x25a, 0x2e2, 0x25a, 0x2e2, 0x39a, 0x3ff, 0x39a, 0x3ff, 0x51d, 0x562, 0x51d, +0x562, 0x51d, 0x562, 0x6ba, 0x6e4, 0x6ba, 0x6e4, 0x821, 0x835, 0x821, 0x835, +0x88d, 0x893, 0x88d, 0x893, 0x8d4, 0x8d0, 0x8d4, 0x8d0, 0x939, 0x933, 0x939, +0x933, 0x921, 0x91f, 0x921, 0x91f, 0x921, 0x91f, 0x875, 0x87d, 0x875, 0x87d, +0x718, 0x72e, 0x718, 0x72e, 0x52b, 0x554, 0x52b, 0x554, 0x37c, 0x3b9, 0x37c, +0x3b9, 0xef, 0x141, 0xef, 0x141, 0xef, 0x141, 0xff36, 0xff9d, 0xff36, 0xff9d, +0xfdef, 0xfe69, 0xfdef, 0xfe69, 0xfd7e, 0xfe09, 0xfd7e, 0xfe09, 0xfd47, 0xfddf, 0xfd47, +0xfddf, 0xfd6f, 0xfe0f, 0xfd6f, 0xfe0f, 0xfd9a, 0xfe3c, 0xfd9a, 0xfe3c, 0xfd9a, 0xfe3c, +0xfd4b, 0xfdeb, 0xfd4b, 0xfdeb, 0xfcb8, 0xfd4f, 0xfcb8, 0xfd4f, 0xfba5, 0xfc2f, 0xfba5, +0xfc2f, 0xfb1e, 0xfb95, 0xfb1e, 0xfb95, 0xfaf8, 0xfb58, 0xfaf8, 0xfb58, 0xfbc8, 0xfc0d, +0xfbc8, 0xfc0d, 0xfbc8, 0xfc0d, 0xfbf9, 0xfc21, 0xfbf9, 0xfc21, 0xfce7, 0xfcf0, 0xfce7, +0xfcf0, 0xfdb1, 0xfd9b, 0xfdb1, 0xfd9b, 0xfe60, 0xfe2b, 0xfe60, 0xfe2b, 0xfed2, 0xfe7e, +0xfed2, 0xfe7e, 0xfed2, 0xfe7e, 0xfed4, 0xfe64, 0xfed4, 0xfe64, 0xfec2, 0xfe38, 0xfec2, +0xfe38, 0xfee1, 0xfe40, 0xfee1, 0xfe40, 0xffb8, 0xff02, 0xffb8, 0xff02, 0xd1, 0xa, +0xd1, 0xa, 0x1cb, 0xf4, 0x1cb, 0xf4, 0x1cb, 0xf4, 0x27b, 0x195, 0x27b, +0x195, 0x3e5, 0x2f2, 0x3e5, 0x2f2, 0x448, 0x348, 0x448, 0x348, 0x50f, 0x402, +0x50f, 0x402, 0x582, 0x465, 0x582, 0x465, 0x653, 0x526, 0x653, 0x526, 0x653, +0x526, 0x6b5, 0x574, 0x6b5, 0x574, 0x72f, 0x5d6, 0x72f, 0x5d6, 0x838, 0x6c3, +0x838, 0x6c3, 0x8cc, 0x738, 0x8cc, 0x738, 0x9c1, 0x808, 0x9c1, 0x808, 0x9c1, +0x808, 0xa7b, 0x89a, 0xa7b, 0x89a, 0xbb7, 0x9aa, 0xbb7, 0x9aa, 0xcc7, 0xa8b, +0xcc7, 0xa8b, 0xea1, 0xc35, 0xea1, 0xc35, 0xff5, 0xd56, 0xff5, 0xd56, 0x1173, +0xea2, 0x1173, 0xea2, 0x1173, 0xea2, 0x1307, 0x1005, 0x1307, 0x1005, 0x14b7, 0x1186, +0x14b7, 0x1186, 0x1626, 0x12c9, 0x1626, 0x12c9, 0x1828, 0x14a4, 0x1828, 0x14a4, 0x1979, +0x15d4, 0x1979, 0x15d4, 0x19d8, 0x1617, 0x19d8, 0x1617, 0x19d8, 0x1617, 0x1acb, 0x16f5, +0x1acb, 0x16f5, 0x1ac0, 0x16dd, 0x1ac0, 0x16dd, 0x1b38, 0x174e, 0x1b38, 0x174e, 0x1b74, +0x178c, 0x1b74, 0x178c, 0x1c55, 0x1875, 0x1c55, 0x1875, 0x1c55, 0x1875, 0x1cd0, 0x18ff, +0x1cd0, 0x18ff, 0x1d0f, 0x1953, 0x1d0f, 0x1953, 0x1d5b, 0x19ba, 0x1d5b, 0x19ba, 0x1d96, +0x1a14, 0x1d96, 0x1a14, 0x1d3a, 0x19db, 0x1d3a, 0x19db, 0x1cd7, 0x199e, 0x1cd7, 0x199e, +0x1cd7, 0x199e, 0x1c18, 0x1906, 0x1c18, 0x1906, 0x1ae8, 0x17fe, 0x1ae8, 0x17fe, 0x19ce, +0x170c, 0x19ce, 0x170c, 0x183b, 0x15a0, 0x183b, 0x15a0, 0x1792, 0x151d, 0x1792, 0x151d, +0x1620, 0x13d0, 0x1620, 0x13d0, 0x1620, 0x13d0, 0x1548, 0x1319, 0x1548, 0x1319, 0x1462, +0x1253, 0x1462, 0x1253, 0x13af, 0x11bc, 0x13af, 0x11bc, 0x139b, 0x11c4, 0x139b, 0x11c4, +0x1347, 0x1188, 0x1347, 0x1188, 0x1347, 0x1188, 0x12b6, 0x110d, 0x12b6, 0x110d, 0x1340, +0x11ab, 0x1340, 0x11ab, 0x13d0, 0x124e, 0x13d0, 0x124e, 0x13c9, 0x1258, 0x13c9, 0x1258, +0x13bc, 0x125d, 0x13bc, 0x125d, 0x12bc, 0x116e, 0x12bc, 0x116e, 0x12bc, 0x116e, 0x1182, +0x1044, 0x1182, 0x1044, 0xff5, 0xec7, 0xff5, 0xec7, 0xf73, 0xe56, 0xf73, 0xe56, +0xe7d, 0xd72, 0xe7d, 0xd72, 0xd66, 0xc6c, 0xd66, 0xc6c, 0xd66, 0xc6c, 0xc3e, +0xb56, 0xc3e, 0xb56, 0xb86, 0xab1, 0xb86, 0xab1, 0xa83, 0x9c1, 0xa83, 0x9c1, +0x993, 0x8e4, 0x993, 0x8e4, 0x8a4, 0x808, 0x8a4, 0x808, 0x6c9, 0x640, 0x6c9, +0x640, 0x6c9, 0x640, 0x46f, 0x3f8, 0x46f, 0x3f8, 0x278, 0x212, 0x278, 0x212, +0x12e, 0xd8, 0x12e, 0xd8, 0xfece, 0xfe87, 0xfece, 0xfe87, 0xfd37, 0xfcff, 0xfd37, +0xfcff, 0xfb9a, 0xfb6e, 0xfb9a, 0xfb6e, 0xfb9a, 0xfb6e, 0xfa95, 0xfa73, 0xfa95, 0xfa73, +0xf996, 0xf97c, 0xf996, 0xf97c, 0xf953, 0xf93f, 0xf953, 0xf93f, 0xf86e, 0xf85d, 0xf86e, +0xf85d, 0xf723, 0xf713, 0xf723, 0xf713, 0xf723, 0xf713, 0xf60c, 0xf5f9, 0xf60c, 0xf5f9, +0xf437, 0xf420, 0xf437, 0xf420, 0xf34e, 0xf330, 0xf34e, 0xf330, 0xf2b0, 0xf288, 0xf2b0, +0xf288, 0xf272, 0xf23d, 0xf272, 0xf23d, 0xf266, 0xf221, 0xf266, 0xf221, 0xf266, 0xf221, +0xf304, 0xf2ad, 0xf304, 0xf2ad, 0xf2f9, 0xf28d, 0xf2f9, 0xf28d, 0xf389, 0xf306, 0xf389, +0xf306, 0xf40b, 0xf36f, 0xf40b, 0xf36f, 0xf534, 0xf47e, 0xf534, 0xf47e, 0xf596, 0xf4c5, +0xf596, 0xf4c5, 0xf596, 0xf4c5, 0xf64f, 0xf562, 0xf64f, 0xf562, 0xf855, 0xf74c, 0xf855, +0xf74c, 0xf99d, 0xf87a, 0xf99d, 0xf87a, 0xfb99, 0xfa5b, 0xfb99, 0xfa5b, 0xfda2, 0xfc4d, +0xfda2, 0xfc4d, 0xfda2, 0xfc4d, 0xff94, 0xfe2a, 0xff94, 0xfe2a, 0xef, 0xff72, 0xef, +0xff72, 0x2a1, 0x116, 0x2a1, 0x116, 0x3bc, 0x226, 0x3bc, 0x226, 0x4e5, 0x34a, +0x4e5, 0x34a, 0x567, 0x3ca, 0x567, 0x3ca, 0x567, 0x3ca, 0x666, 0x4ce, 0x666, +0x4ce, 0x702, 0x574, 0x702, 0x574, 0x79e, 0x61f, 0x79e, 0x61f, 0x880, 0x715, +0x880, 0x715, 0x85f, 0x70d, 0x85f, 0x70d, 0x84d, 0x719, 0x84d, 0x719, 0x84d, +0x719, 0x7d9, 0x6c8, 0x7d9, 0x6c8, 0x7d4, 0x6e9, 0x7d4, 0x6e9, 0x706, 0x644, +0x706, 0x644, 0x65f, 0x5ca, 0x65f, 0x5ca, 0x4ac, 0x446, 0x4ac, 0x446, 0x4ac, +0x446, 0x307, 0x2d2, 0x307, 0x2d2, 0x1b9, 0x1b7, 0x1b9, 0x1b7, 0x84, 0xb6, +0x84, 0xb6, 0xfe93, 0xfefa, 0xfe93, 0xfefa, 0xfc5d, 0xfcf8, 0xfc5d, 0xfcf8, 0xfaad, +0xfb7f, 0xfaad, 0xfb7f, 0xfaad, 0xfb7f, 0xf904, 0xfa0d, 0xf904, 0xfa0d, 0xf751, 0xf891, +0xf751, 0xf891, 0xf57e, 0xf6f7, 0xf57e, 0xf6f7, 0xf421, 0xf5d4, 0xf421, 0xf5d4, 0xf1df, +0xf3cc, 0xf1df, 0xf3cc, 0xf068, 0xf292, 0xf068, 0xf292, 0xf068, 0xf292, 0xee94, 0xf0fa, +0xee94, 0xf0fa, 0xeccb, 0xef71, 0xeccb, 0xef71, 0xea8f, 0xed75, 0xea8f, 0xed75, 0xe8cb, +0xebf1, 0xe8cb, 0xebf1, 0xe6da, 0xea42, 0xe6da, 0xea42, 0xe6da, 0xea42, 0xe4c9, 0xe874, +0xe4c9, 0xe874, 0xe35f, 0xe74d, 0xe35f, 0xe74d, 0xe19a, 0xe5c8, 0xe19a, 0xe5c8, 0xdf7d, +0xe3ea, 0xdf7d, 0xe3ea, 0xddab, 0xe255, 0xddab, 0xe255, 0xdd15, 0xe1f8, 0xdd15, 0xe1f8, +0xdd15, 0xe1f8, 0xdba7, 0xe0be, 0xdba7, 0xe0be, 0xdad5, 0xe01a, 0xdad5, 0xe01a, 0xd9da, +0xdf46, 0xd9da, 0xdf46, 0xd948, 0xded4, 0xd948, 0xded4, 0xd907, 0xdeaa, 0xd907, 0xdeaa, +0xd97d, 0xdf2e, 0xd97d, 0xdf2e, 0xd97d, 0xdf2e, 0xd977, 0xdf2d, 0xd977, 0xdf2d, 0xd9cc, +0xdf7c, 0xd9cc, 0xdf7c, 0xdaa7, 0xe048, 0xdaa7, 0xe048, 0xdb3d, 0xe0c5, 0xdb3d, 0xe0c5, +0xdb72, 0xe0d9, 0xdb72, 0xe0d9, 0xdb72, 0xe0d9, 0xdb53, 0xe08f, 0xdb53, 0xe08f, 0xdc1a, +0xe126, 0xdc1a, 0xe126, 0xdbf4, 0xe0c8, 0xdbf4, 0xe0c8, 0xddd5, 0xe26c, 0xddd5, 0xe26c, +0xdf26, 0xe37d, 0xdf26, 0xe37d, 0xe056, 0xe46a, 0xe056, 0xe46a, 0xe056, 0xe46a, 0xe21f, +0xe5ef, 0xe21f, 0xe5ef, 0xe43c, 0xe7c8, 0xe43c, 0xe7c8, 0xe641, 0xe98b, 0xe641, 0xe98b, +0xe7fc, 0xeb04, 0xe7fc, 0xeb04, 0xe96d, 0xec38, 0xe96d, 0xec38, 0xea62, 0xecf3, 0xea62, +0xecf3, 0xea62, 0xecf3, 0xeb41, 0xed9b, 0xeb41, 0xed9b, 0xebc5, 0xedee, 0xebc5, 0xedee, +0xed59, 0xef53, 0xed59, 0xef53, 0xedd1, 0xefa0, 0xedd1, 0xefa0, 0xef32, 0xf0d9, 0xef32, +0xf0d9, 0xef32, 0xf0d9, 0xf0c4, 0xf247, 0xf0c4, 0xf247, 0xf29a, 0xf3f8, 0xf29a, 0xf3f8, +0xf3f1, 0xf52d, 0xf3f1, 0xf52d, 0xf51e, 0xf638, 0xf51e, 0xf638, 0xf5af, 0xf6a6, 0xf5af, +0xf6a6, 0xf633, 0xf706, 0xf633, 0xf706, 0xf633, 0xf706, 0xf788, 0xf835, 0xf788, 0xf835, +0xf911, 0xf996, 0xf911, 0xf996, 0xfafa, 0xfb56, 0xfafa, 0xfb56, 0xfbf0, 0xfc1f, 0xfbf0, +0xfc1f, 0xfdec, 0xfdee, 0xfdec, 0xfdee, 0xff82, 0xff54, 0xff82, 0xff54, 0xff82, 0xff54, +0x16d, 0x10e, 0x16d, 0x10e, 0x2b8, 0x228, 0x2b8, 0x228, 0x3e2, 0x322, 0x3e2, +0x322, 0x4db, 0x3ec, 0x4db, 0x3ec, 0x679, 0x55d, 0x679, 0x55d, 0x679, 0x55d, +0x81f, 0x6d9, 0x81f, 0x6d9, 0x996, 0x82a, 0x996, 0x82a, 0xb48, 0x9ba, 0xb48, +0x9ba, 0xc88, 0xadd, 0xc88, 0xadd, 0xe4f, 0xc8b, 0xe4f, 0xc8b, 0xf5f, 0xd89, +0xf5f, 0xd89, 0xf5f, 0xd89, 0x108b, 0xea6, 0x108b, 0xea6, 0x1051, 0xe63, 0x1051, +0xe63, 0x104a, 0xe57, 0x104a, 0xe57, 0x1069, 0xe74, 0x1069, 0xe74, 0x1102, 0xf0f, +0x1102, 0xf0f, 0x10ec, 0xefb, 0x10ec, 0xefb, 0x10ec, 0xefb, 0x10db, 0xef0, 0x10db, +0xef0, 0x10eb, 0xf04, 0x10eb, 0xf04, 0x100a, 0xe27, 0x100a, 0xe27, 0xf8b, 0xdac, +0xf8b, 0xdac, 0xefc, 0xd1f, 0xefc, 0xd1f, 0xefc, 0xd1f, 0xe14, 0xc36, 0xe14, +0xc36, 0xcbe, 0xade, 0xcbe, 0xade, 0xc76, 0xa93, 0xc76, 0xa93, 0xbe7, 0x9fe, +0xbe7, 0x9fe, 0xbac, 0x9be, 0xbac, 0x9be, 0xb83, 0x98e, 0xb83, 0x98e, 0xb83, +0x98e, 0xb86, 0x98c, 0xb86, 0x98c, 0xabc, 0x8bd, 0xabc, 0x8bd, 0xa5c, 0x85c, +0xa5c, 0x85c, 0x993, 0x796, 0x993, 0x796, 0x842, 0x64c, 0x842, 0x64c, 0x842, +0x64c, 0x76d, 0x584, 0x76d, 0x584, 0x626, 0x44f, 0x626, 0x44f, 0x4ea, 0x32b, +0x4ea, 0x32b, 0x3c6, 0x227, 0x3c6, 0x227, 0x32c, 0x1b3, 0x32c, 0x1b3, 0x166, +0x18, 0x166, 0x18, 0x166, 0x18, 0x52, 0xff35, 0x52, 0xff35, 0xff2b, 0xfe43, +0xff2b, 0xfe43, 0xfdb5, 0xfd05, 0xfdb5, 0xfd05, 0xfbda, 0xfb65, 0xfbda, 0xfb65, 0xfad2, +0xfa97, 0xfad2, 0xfa97, 0xf9ce, 0xf9cc, 0xf9ce, 0xf9cc, 0xf9ce, 0xf9cc, 0xf8d7, 0xf90c, +0xf8d7, 0xf90c, 0xf8b1, 0xf918, 0xf8b1, 0xf918, 0xf857, 0xf8eb, 0xf857, 0xf8eb, 0xf7db, +0xf896, 0xf7db, 0xf896, 0xf768, 0xf842, 0xf768, 0xf842, 0xf768, 0xf842, 0xf7ba, 0xf8ac, +0xf7ba, 0xf8ac, 0xf786, 0xf886, 0xf786, 0xf886, 0xf7ea, 0xf8f0, 0xf7ea, 0xf8f0, 0xf828, +0xf92d, 0xf828, 0xf92d, 0xf9a3, 0xfa9f, 0xf9a3, 0xfa9f, 0xfb2c, 0xfc19, 0xfb2c, 0xfc19, +0xfb2c, 0xfc19, 0xfd20, 0xfdf7, 0xfd20, 0xfdf7, 0xff05, 0xffc4, 0xff05, 0xffc4, 0x8a, +0x12f, 0x8a, 0x12f, 0x20b, 0x294, 0x20b, 0x294, 0x3a0, 0x40f, 0x3a0, 0x40f, +0x551, 0x5a8, 0x551, 0x5a8, 0x551, 0x5a8, 0x6ac, 0x6ee, 0x6ac, 0x6ee, 0x832, +0x864, 0x832, 0x864, 0x8a1, 0x8c9, 0x8a1, 0x8c9, 0x9ec, 0xa0f, 0x9ec, 0xa0f, +0xa3d, 0xa62, 0xa3d, 0xa62, 0xa3d, 0xa62, 0xb2f, 0xb5c, 0xb2f, 0xb5c, 0xae5, +0xb20, 0xae5, 0xb20, 0x9e9, 0xa38, 0x9e9, 0xa38, 0x8a1, 0x907, 0x8a1, 0x907, +0x6b5, 0x736, 0x6b5, 0x736, 0x504, 0x5a2, 0x504, 0x5a2, 0x504, 0x5a2, 0x30a, +0x3c6, 0x30a, 0x3c6, 0x1ab, 0x284, 0x1ab, 0x284, 0x2e, 0x122, 0x2e, 0x122, +0xffce, 0xda, 0xffce, 0xda, 0xff0f, 0x2e, 0xff0f, 0x2e, 0xfead, 0xffda, 0xfead, +0xffda, 0xfead, 0xffda, 0xfdc0, 0xfef5, 0xfdc0, 0xfef5, 0xfd48, 0xfe80, 0xfd48, 0xfe80, +0xfbf4, 0xfd28, 0xfbf4, 0xfd28, 0xfb3f, 0xfc69, 0xfb3f, 0xfc69, 0xfb84, 0xfc9e, 0xfb84, +0xfc9e, 0xfb84, 0xfc9e, 0xfbde, 0xfce3, 0xfbde, 0xfce3, 0xfc57, 0xfd43, 0xfc57, 0xfd43, +0xfd1f, 0xfdef, 0xfd1f, 0xfdef, 0xfe1b, 0xfecc, 0xfe1b, 0xfecc, 0xfe4b, 0xfedb, 0xfe4b, +0xfedb, 0xff35, 0xffa4, 0xff35, 0xffa4, 0xff35, 0xffa4, 0xfe64, 0xfeb2, 0xfe64, 0xfeb2, +0xfe90, 0xfebf, 0xfe90, 0xfebf, 0xfe8f, 0xfe9f, 0xfe8f, 0xfe9f, 0xff63, 0xff57, 0xff63, +0xff57, 0xffe6, 0xffc0, 0xffe6, 0xffc0, 0xbc, 0x7d, 0xbc, 0x7d, 0xbc, 0x7d, +0x230, 0x1da, 0x230, 0x1da, 0x2f2, 0x287, 0x2f2, 0x287, 0x460, 0x3df, 0x460, +0x3df, 0x505, 0x46f, 0x505, 0x46f, 0x5b1, 0x505, 0x5b1, 0x505, 0x5b1, 0x505, +0x5f0, 0x52d, 0x5f0, 0x52d, 0x6c8, 0x5eb, 0x6c8, 0x5eb, 0x73c, 0x643, 0x73c, +0x643, 0x841, 0x727, 0x841, 0x727, 0x8f4, 0x7b7, 0x8f4, 0x7b7, 0xa90, 0x92b, +0xa90, 0x92b, 0xa90, 0x92b, 0xb48, 0x9b8, 0xb48, 0x9b8, 0xc19, 0xa5a, 0xc19, +0xa5a, 0xd49, 0xb5a, 0xd49, 0xb5a, 0xdd1, 0xbae, 0xdd1, 0xbae, 0xf54, 0xcfe, +0xf54, 0xcfe, 0x1075, 0xdeb, 0x1075, 0xdeb, 0x1075, 0xdeb, 0x1214, 0xf57, 0x1214, +0xf57, 0x1341, 0x1054, 0x1341, 0x1054, 0x1539, 0x1220, 0x1539, 0x1220, 0x16fa, 0x13b8, +0x16fa, 0x13b8, 0x18a7, 0x1542, 0x18a7, 0x1542, 0x18a7, 0x1542, 0x1953, 0x15d2, 0x1953, +0x15d2, 0x1a82, 0x16eb, 0x1a82, 0x16eb, 0x1ac1, 0x171d, 0x1ac1, 0x171d, 0x1a9a, 0x16ef, +0x1a9a, 0x16ef, 0x1ba1, 0x17f7, 0x1ba1, 0x17f7, 0x1bb4, 0x1813, 0x1bb4, 0x1813, 0x1bb4, +0x1813, 0x1bea, 0x1859, 0x1bea, 0x1859, 0x1c55, 0x18d8, 0x1c55, 0x18d8, 0x1d2a, 0x19c8, +0x1d2a, 0x19c8, 0x1d27, 0x19e3, 0x1d27, 0x19e3, 0x1cd7, 0x19b5, 0x1cd7, 0x19b5, 0x1c52, +0x1954, 0x1c52, 0x1954, 0x1c52, 0x1954, 0x1c30, 0x1957, 0x1c30, 0x1957, 0x1ad8, 0x1825, +0x1ad8, 0x1825, 0x1949, 0x16b9, 0x1949, 0x16b9, 0x1822, 0x15b5, 0x1822, 0x15b5, 0x1759, +0x150d, 0x1759, 0x150d, 0x1759, 0x150d, 0x161d, 0x13ef, 0x161d, 0x13ef, 0x15d0, 0x13be, +0x15d0, 0x13be, 0x15c5, 0x13cc, 0x15c5, 0x13cc, 0x14b2, 0x12cf, 0x14b2, 0x12cf, 0x14c6, +0x12f7, 0x14c6, 0x12f7, 0x1322, 0x1166, 0x1322, 0x1166, 0x1322, 0x1166, 0x1265, 0x10ba, +0x1265, 0x10ba, 0x12de, 0x1142, 0x12de, 0x1142, 0x12c4, 0x1138, 0x12c4, 0x1138, 0x129e, +0x1123, 0x129e, 0x1123, 0x1309, 0x119f, 0x1309, 0x119f, 0x11fe, 0x10a6, 0x11fe, 0x10a6, +0x11fe, 0x10a6, 0x1117, 0xfd4, 0x1117, 0xfd4, 0x1082, 0xf56, 0x1082, 0xf56, 0xf30, +0xe1d, 0xf30, 0xe1d, 0xe3f, 0xd47, 0xe3f, 0xd47, 0xd32, 0xc58, 0xd32, 0xc58, +0xd32, 0xc58, 0xd04, 0xc49, 0xd04, 0xc49, 0xc2f, 0xb95, 0xc2f, 0xb95, 0xaf1, +0xa7a, 0xaf1, 0xa7a, 0x9d1, 0x97d, 0x9d1, 0x97d, 0x946, 0x916, 0x946, 0x916, +0x826, 0x819, 0x826, 0x819, 0x826, 0x819, 0x69f, 0x6b5, 0x69f, 0x6b5, 0x4b4, +0x4eb, 0x4b4, 0x4eb, 0x273, 0x2ca, 0x273, 0x2ca, 0xe0, 0x155, 0xe0, 0x155, +0xfeb4, 0xff44, 0xfeb4, 0xff44, 0xfd1c, 0xfdc6, 0xfd1c, 0xfdc6, 0xfd1c, 0xfdc6, 0xfd0c, +0xfdce, 0xfd0c, 0xfdce, 0xfadb, 0xfbb2, 0xfadb, 0xfbb2, 0xfafc, 0xfbe6, 0xfafc, 0xfbe6, +0xf9f9, 0xfaf4, 0xf9f9, 0xfaf4, 0xf86a, 0xf973, 0xf86a, 0xf973, 0xf86a, 0xf973, 0xf9e2, +0xfaf9, 0xf9e2, 0xfaf9, 0xf50a, 0xf62c, 0xf50a, 0xf62c, 0xf44e, 0xf57a, 0xf44e, 0xf57a, +0xf524, 0xf657, 0xf524, 0xf657, 0xf2cf, 0xf40a, 0xf2cf, 0xf40a, 0xf35c, 0xf49c, 0xf35c, +0xf49c, 0xf35c, 0xf49c, 0xf36e, 0xf4b2, 0xf36e, 0xf4b2, 0xf11d, 0xf263, 0xf11d, 0xf263, +0xf151, 0xf297, 0xf151, 0xf297, 0xf237, 0xf37c, 0xf237, 0xf37c, 0xf13f, 0xf281, 0xf13f, +0xf281, 0xf13f, 0xf281, 0xf282, 0xf3bd, 0xf282, 0xf3bd, 0xf337, 0xf469, 0xf337, 0xf469, +0xf501, 0xf627, 0xf501, 0xf627, 0xf6e5, 0xf7fe, 0xf6e5, 0xf7fe, 0xf8a1, 0xf9a8, 0xf8a1, +0xf9a8, 0xf8e4, 0xf9d7, 0xf8e4, 0xf9d7, 0xf8e4, 0xf9d7, 0xfada, 0xfbb7, 0xfada, 0xfbb7, +0xfdd6, 0xfe9a, 0xfdd6, 0xfe9a, 0xfe52, 0xfefb, 0xfe52, 0xfefb, 0xfeea, 0xff77, 0xfeea, +0xff77, 0xde, 0x150, 0xde, 0x150, 0x17c, 0x1d2, 0x17c, 0x1d2, 0x17c, 0x1d2, +0x3b4, 0x3ee, 0x3b4, 0x3ee, 0x5c6, 0x5e7, 0x5c6, 0x5e7, 0x4bf, 0x4c9, 0x4bf, +0x4c9, 0x6c9, 0x6bf, 0x6c9, 0x6bf, 0x3ec, 0x3d1, 0x3ec, 0x3d1, 0x3ec, 0x3d1, +0x541, 0x51a, 0x541, 0x51a, 0x567, 0x539, 0x567, 0x539, 0x363, 0x334, 0x363, +0x334, 0x504, 0x4d8, 0x504, 0x4d8, 0x358, 0x335, 0x358, 0x335, 0x257, 0x241, +0x257, 0x241, 0x257, 0x241, 0x11a, 0x118, 0x11a, 0x118, 0xe2, 0xf9, 0xe2, +0xf9, 0xfec3, 0xfef6, 0xfec3, 0xfef6, 0xff5e, 0xffb3, 0xff5e, 0xffb3, 0xfc34, 0xfcad, +0xfc34, 0xfcad, 0xf9fb, 0xfa9c, 0xf9fb, 0xfa9c, 0xf9fb, 0xfa9c, 0xfa30, 0xfafc, 0xfa30, +0xfafc, 0xf783, 0xf87d, 0xf783, 0xf87d, 0xf5c6, 0xf6ef, 0xf5c6, 0xf6ef, 0xf2ca, 0xf424, +0xf2ca, 0xf424, 0xf38d, 0xf519, 0xf38d, 0xf519, 0xf38d, 0xf519, 0xf1ec, 0xf3ab, 0xf1ec, +0xf3ab, 0xf01d, 0xf211, 0xf01d, 0xf211, 0xed25, 0xef4e, 0xed25, 0xef4e, 0xec46, 0xeea6, +0xec46, 0xeea6, 0xecd6, 0xef6c, 0xecd6, 0xef6c, 0xe986, 0xec54, 0xe986, 0xec54, 0xe986, +0xec54, 0xe7e4, 0xeaea, 0xe7e4, 0xeaea, 0xe4d7, 0xe816, 0xe4d7, 0xe816, 0xe56a, 0xe8e3, +0xe56a, 0xe8e3, 0xe541, 0xe8f3, 0xe541, 0xe8f3, 0xe38b, 0xe775, 0xe38b, 0xe775, 0xe139, +0xe55b, 0xe139, 0xe55b, 0xe139, 0xe55b, 0xdf52, 0xe3a9, 0xdf52, 0xe3a9, 0xe008, 0xe492, +0xe008, 0xe492, 0xdec1, 0xe37b, 0xdec1, 0xe37b, 0xdeed, 0xe3d2, 0xdeed, 0xe3d2, 0xdbb9, +0xe0c5, 0xdbb9, 0xe0c5, 0xdbb9, 0xe0c5, 0xdc92, 0xe1bf, 0xdc92, 0xe1bf, 0xdc0f, 0xe155, +0xdc0f, 0xe155, 0xdbcd, 0xe125, 0xdbcd, 0xe125, 0xdec8, 0xe42a, 0xdec8, 0xe42a, 0xdb13, +0xe075, 0xdb13, 0xe075, 0xdcd6, 0xe230, 0xdcd6, 0xe230, 0xdcd6, 0xe230, 0xdd4d, 0xe296, +0xdd4d, 0xe296, 0xddfe, 0xe32c, 0xddfe, 0xe32c, 0xde05, 0xe311, 0xde05, 0xe311, 0xde1b, +0xe2fc, 0xde1b, 0xe2fc, 0xdeed, 0xe39c, 0xdeed, 0xe39c, 0xdf4b, 0xe3c2, 0xdf4b, 0xe3c2, +0xdf4b, 0xe3c2, 0xe313, 0xe74d, 0xe313, 0xe74d, 0xe38a, 0xe783, 0xe38a, 0xe783, 0xe6df, +0xea95, 0xe6df, 0xea95, 0xe8a9, 0xec1a, 0xe8a9, 0xec1a, 0xe91d, 0xec49, 0xe91d, 0xec49, +0xe91d, 0xec49, 0xea6d, 0xed55, 0xea6d, 0xed55, 0xec72, 0xef18, 0xec72, 0xef18, 0xecbd, +0xef23, 0xecbd, 0xef23, 0xebc8, 0xedf2, 0xebc8, 0xedf2, 0xeccc, 0xeebc, 0xeccc, 0xeebc, +0xede3, 0xef9d, 0xede3, 0xef9d, 0xede3, 0xef9d, 0xef89, 0xf10f, 0xef89, 0xf10f, 0xef85, +0xf0db, 0xef85, 0xf0db, 0xf001, 0xf128, 0xf001, 0xf128, 0xf15f, 0xf258, 0xf15f, 0xf258, +0xf2cf, 0xf39a, 0xf2cf, 0xf39a, 0xf3ff, 0xf49d, 0xf3ff, 0xf49d, 0xf3ff, 0xf49d, 0xf648, +0xf6b5, 0xf648, 0xf6b5, 0xf5dd, 0xf618, 0xf5dd, 0xf618, 0xf706, 0xf70c, 0xf706, 0xf70c, +0xf98d, 0xf95a, 0xf98d, 0xf95a, 0xfa31, 0xf9c0, 0xfa31, 0xf9c0, 0xfa31, 0xf9c0, 0xfba1, +0xfaf0, 0xfba1, 0xfaf0, 0xfcef, 0xfbf9, 0xfcef, 0xfbf9, 0xfe82, 0xfd45, 0xfe82, 0xfd45, +0xfff2, 0xfe6c, 0xfff2, 0xfe6c, 0x297, 0xc7, 0x297, 0xc7, 0x3e4, 0x1c9, 0x3e4, +0x1c9, 0x3e4, 0x1c9, 0x5e0, 0x37d, 0x5e0, 0x37d, 0x823, 0x57b, 0x823, 0x57b, +0xa4e, 0x764, 0xa4e, 0x764, 0xc07, 0x8e3, 0xc07, 0x8e3, 0xdc1, 0xa69, 0xdc1, +0xa69, 0xfd0, 0xc4d, 0xfd0, 0xc4d, 0xfd0, 0xc4d, 0x108f, 0xcea, 0x108f, 0xcea, +0x1278, 0xebc, 0x1278, 0xebc, 0x1423, 0x1059, 0x1423, 0x1059, 0x13f1, 0x1025, 0x13f1, +0x1025, 0x13a4, 0xfde, 0x13a4, 0xfde, 0x13a4, 0xfde, 0x1526, 0x1171, 0x1526, 0x1171, +0x153f, 0x11a3, 0x153f, 0x11a3, 0x1499, 0x111d, 0x1499, 0x111d, 0x14ae, 0x1158, 0x14ae, +0x1158, 0x1301, 0xfd5, 0x1301, 0xfd5, 0x1100, 0xe02, 0x1100, 0xe02, 0x1100, 0xe02, +0x1095, 0xdc5, 0x1095, 0xdc5, 0xf98, 0xcf6, 0xf98, 0xcf6, 0xe48, 0xbd3, 0xe48, +0xbd3, 0xe50, 0xc04, 0xe50, 0xc04, 0xd12, 0xaee, 0xd12, 0xaee, 0xc51, 0xa4e, +0xc51, 0xa4e, 0xc51, 0xa4e, 0xeb4, 0xcd0, 0xeb4, 0xcd0, 0xca1, 0xad8, 0xca1, +0xad8, 0xb50, 0x99e, 0xb50, 0x99e, 0xb48, 0x9a9, 0xb48, 0x9a9, 0x8f0, 0x763, +0x8f0, 0x763, 0x8f0, 0x763, 0x9b2, 0x835, 0x9b2, 0x835, 0x6ce, 0x562, 0x6ce, +0x562, 0x4d5, 0x379, 0x4d5, 0x379, 0x429, 0x2e0, 0x429, 0x2e0, 0x36f, 0x23d, +0x36f, 0x23d, 0x2cf, 0x1b7, 0x2cf, 0x1b7, 0x2cf, 0x1b7, 0x149, 0x4e, 0x149, +0x4e, 0xff9d, 0xfec4, 0xff9d, 0xfec4, 0xfcc7, 0xfc14, 0xfcc7, 0xfc14, 0xfbae, 0xfb25, +0xfbae, 0xfb25, 0xfa84, 0xfa29, 0xfa84, 0xfa29, 0xf823, 0xf7f7, 0xf823, 0xf7f7, 0xf823, +0xf7f7, 0xf6f3, 0xf6f7, 0xf6f3, 0xf6f7, 0xf82e, 0xf861, 0xf82e, 0xf861, 0xf602, 0xf664, +0xf602, 0xf664, 0xf6df, 0xf76a, 0xf6df, 0xf76a, 0xf7ae, 0xf85e, 0xf7ae, 0xf85e, 0xf7ae, +0xf85e, 0xf5f5, 0xf6c3, 0xf5f5, 0xf6c3, 0xf69b, 0xf77f, 0xf69b, 0xf77f, 0xf605, 0xf6f7, +0xf605, 0xf6f7, 0xf5df, 0xf6d6, 0xf5df, 0xf6d6, 0xf63e, 0xf730, 0xf63e, 0xf730, 0xf7e3, +0xf8c7, 0xf7e3, 0xf8c7, 0xf7e3, 0xf8c7, 0xf893, 0xf95f, 0xf893, 0xf95f, 0xfab6, 0xfb63, +0xfab6, 0xfb63, 0xfd7c, 0xfe03, 0xfd7c, 0xfe03, 0xff0e, 0xff6a, 0xff0e, 0xff6a, 0x16e, +0x19c, 0x16e, 0x19c, 0x16e, 0x19c, 0x2f2, 0x2f0, 0x2f2, 0x2f0, 0x3b8, 0x386, +0x3b8, 0x386, 0x5f6, 0x596, 0x5f6, 0x596, 0x752, 0x6c9, 0x752, 0x6c9, 0x972, +0x8c4, 0x972, 0x8c4, 0xb7c, 0xab2, 0xb7c, 0xab2, 0xb7c, 0xab2, 0xb03, 0xa24, +0xb03, 0xa24, 0xc82, 0xb97, 0xc82, 0xb97, 0xcbe, 0xbd0, 0xcbe, 0xbd0, 0xabc, +0x9d5, 0xabc, 0x9d5, 0x92a, 0x851, 0x92a, 0x851, 0x924, 0x862, 0x924, 0x862, +0x924, 0x862, 0x727, 0x683, 0x727, 0x683, 0x592, 0x510, 0x592, 0x510, 0x50a, +0x4ae, 0x50a, 0x4ae, 0x29f, 0x26b, 0x29f, 0x26b, 0xea, 0xdf, 0xea, 0xdf, +0xea, 0xdf, 0xf6, 0x111, 0xf6, 0x111, 0xff1b, 0xff59, 0xff1b, 0xff59, 0xfd1f, +0xfd7c, 0xfd1f, 0xfd7c, 0xfe5e, 0xfed4, 0xfe5e, 0xfed4, 0xfcaf, 0xfd37, 0xfcaf, 0xfd37, +0xfc72, 0xfd05, 0xfc72, 0xfd05, 0xfc72, 0xfd05, 0xfdb8, 0xfe4f, 0xfdb8, 0xfe4f, 0xfcdc, +0xfd6f, 0xfcdc, 0xfd6f, 0xfcc1, 0xfd4a, 0xfcc1, 0xfd4a, 0xfd68, 0xfde0, 0xfd68, 0xfde0, +0xfd31, 0xfd92, 0xfd31, 0xfd92, 0xfd96, 0xfddc, 0xfd96, 0xfddc, 0xfd96, 0xfddc, 0xfe71, +0xfe9a, 0xfe71, 0xfe9a, 0xfeae, 0xfeb6, 0xfeae, 0xfeb6, 0xfeef, 0xfed6, 0xfeef, 0xfed6, +0xff8f, 0xff54, 0xff8f, 0xff54, 0xef, 0x94, 0xef, 0x94, 0xef, 0x94, 0x1ae, +0x133, 0x1ae, 0x133, 0x2f9, 0x261, 0x2f9, 0x261, 0x2eb, 0x238, 0x2eb, 0x238, +0x41e, 0x351, 0x41e, 0x351, 0x536, 0x451, 0x536, 0x451, 0x46b, 0x370, 0x46b, +0x370, 0x46b, 0x370, 0x546, 0x435, 0x546, 0x435, 0x51e, 0x3f6, 0x51e, 0x3f6, +0x4c9, 0x389, 0x4c9, 0x389, 0x5d1, 0x478, 0x5d1, 0x478, 0x5d8, 0x463, 0x5d8, +0x463, 0x663, 0x4ce, 0x663, 0x4ce, 0x663, 0x4ce, 0x80f, 0x658, 0x80f, 0x658, +0x94e, 0x770, 0x94e, 0x770, 0x9a7, 0x79e, 0x9a7, 0x79e, 0x997, 0x75f, 0x997, +0x75f, 0xb27, 0x8bd, 0xb27, 0x8bd, 0xb27, 0x8bd, 0xbd8, 0x93a, 0xbd8, 0x93a, +0xde1, 0xb0c, 0xde1, 0xb0c, 0xfd1, 0xcc5, 0xfd1, 0xcc5, 0x10c6, 0xd84, 0x10c6, +0xd84, 0x1410, 0x109a, 0x1410, 0x109a, 0x1677, 0x12d0, 0x1677, 0x12d0, 0x1677, 0x12d0, +0x181a, 0x1447, 0x181a, 0x1447, 0x1933, 0x1539, 0x1933, 0x1539, 0x192c, 0x1513, 0x192c, +0x1513, 0x1ac8, 0x1697, 0x1ac8, 0x1697, 0x1bf4, 0x17b4, 0x1bf4, 0x17b4, 0x1c2a, 0x17e4, +0x1c2a, 0x17e4, 0x1c2a, 0x17e4, 0x1d48, 0x1904, 0x1d48, 0x1904, 0x1d32, 0x18fa, 0x1d32, +0x18fa, 0x1dc9, 0x19a5, 0x1dc9, 0x19a5, 0x1e51, 0x1a4a, 0x1e51, 0x1a4a, 0x1ead, 0x1ac9, +0x1ead, 0x1ac9, 0x1ead, 0x1ac9, 0x1da3, 0x19e8, 0x1da3, 0x19e8, 0x1d70, 0x19e4, 0x1d70, +0x19e4, 0x1d66, 0x1a0b, 0x1d66, 0x1a0b, 0x1b26, 0x1801, 0x1b26, 0x1801, 0x1a10, 0x1721, +0x1a10, 0x1721, 0x1926, 0x166e, 0x1926, 0x166e, 0x1926, 0x166e, 0x1844, 0x15c2, 0x1844, +0x15c2, 0x1743, 0x14f7, 0x1743, 0x14f7, 0x16e3, 0x14c9, 0x16e3, 0x14c9, 0x1570, 0x1388, +0x1570, 0x1388, 0x147c, 0x12c2, 0x147c, 0x12c2, 0x1472, 0x12e4, 0x1472, 0x12e4, 0x1472, +0x12e4, 0x1357, 0x11f2, 0x1357, 0x11f2, 0x1146, 0x1008, 0x1146, 0x1008, 0x11e8, 0x10cf, +0x11e8, 0x10cf, 0x1236, 0x1141, 0x1236, 0x1141, 0x1102, 0x102e, 0x1102, 0x102e, 0x1102, +0x102e, 0x11d5, 0x1123, 0x11d5, 0x1123, 0x11d1, 0x1140, 0x11d1, 0x1140, 0x119f, 0x112f, +0x119f, 0x112f, 0x11b1, 0x1162, 0x11b1, 0x1162, 0x1158, 0x112a, 0x1158, 0x112a, 0xeea, +0xede, 0xeea, 0xede, 0xeea, 0xede, 0xf22, 0xf39, 0xf22, 0xf39, 0xe43, 0xe7e, +0xe43, 0xe7e, 0xcc3, 0xd21, 0xcc3, 0xd21, 0xbd2, 0xc53, 0xbd2, 0xc53, 0xa45, +0xaea, 0xa45, 0xaea, 0xa4e, 0xb15, 0xa4e, 0xb15, 0xa4e, 0xb15, 0x949, 0xa32, +0x949, 0xa32, 0x885, 0x98e, 0x885, 0x98e, 0x58c, 0x6b3, 0x58c, 0x6b3, 0x469, +0x5ac, 0x469, 0x5ac, 0x24f, 0x3ac, 0x24f, 0x3ac, 0x24f, 0x3ac, 0xab, 0x220, +0xab, 0x220, 0xff1b, 0xa5, 0xff1b, 0xa5, 0xfb1c, 0xfcb8, 0xfb1c, 0xfcb8, 0xfa54, +0xfbff, 0xfa54, 0xfbff, 0xf8fa, 0xfab1, 0xf8fa, 0xfab1, 0xf6ef, 0xf8ae, 0xf6ef, 0xf8ae, +0xf6ef, 0xf8ae, 0xf653, 0xf818, 0xf653, 0xf818, 0xf56b, 0xf733, 0xf56b, 0xf733, 0xf31c, +0xf4e2, 0xf31c, 0xf4e2, 0xf261, 0xf423, 0xf261, 0xf423, 0xf15d, 0xf317, 0xf15d, 0xf317, +0xefbd, 0xf16b, 0xefbd, 0xf16b, 0xefbd, 0xf16b, 0xefde, 0xf17d, 0xefde, 0xf17d, 0xefdd, +0xf168, 0xefdd, 0xf168, 0xef5e, 0xf0d1, 0xef5e, 0xf0d1, 0xf036, 0xf18e, 0xf036, 0xf18e, +0xf0b6, 0xf1ee, 0xf0b6, 0xf1ee, 0xf0b6, 0xf1ee, 0xf25a, 0xf36e, 0xf25a, 0xf36e, 0xf42a, +0xf515, 0xf42a, 0xf515, 0xf3fa, 0xf4b9, 0xf3fa, 0xf4b9, 0xf6cf, 0xf760, 0xf6cf, 0xf760, +0xf8e1, 0xf940, 0xf8e1, 0xf940, 0xf9e9, 0xfa15, 0xf9e9, 0xfa15, 0xf9e9, 0xfa15, 0xfc16, +0xfc0d, 0xfc16, 0xfc0d, 0xfd67, 0xfd29, 0xfd67, 0xfd29, 0xfea4, 0xfe32, 0xfea4, 0xfe32, +0x38, 0xff94, 0x38, 0xff94, 0xde, 0xb, 0xde, 0xb, 0x79, 0xff7b, 0x79, +0xff7b, 0x79, 0xff7b, 0x29e, 0x17b, 0x29e, 0x17b, 0x467, 0x325, 0x467, 0x325, +0x3c3, 0x269, 0x3c3, 0x269, 0x573, 0x409, 0x573, 0x409, 0x696, 0x524, 0x696, +0x524, 0x696, 0x524, 0x60a, 0x498, 0x60a, 0x498, 0x605, 0x49b, 0x605, 0x49b, +0x5d6, 0x47e, 0x5d6, 0x47e, 0x47f, 0x340, 0x47f, 0x340, 0x32f, 0x210, 0x32f, +0x210, 0x30b, 0x213, 0x30b, 0x213, 0x30b, 0x213, 0x1d5, 0x10a, 0x1d5, 0x10a, +0xca, 0x31, 0xca, 0x31, 0x67, 0x3, 0x67, 0x3, 0x31, 0x5, 0x31, +0x5, 0xfd53, 0xfd61, 0xfd53, 0xfd61, 0xfd53, 0xfd61, 0xface, 0xfb17, 0xface, 0xfb17, +0xf8d3, 0xf958, 0xf8d3, 0xf958, 0xf669, 0xf72a, 0xf669, 0xf72a, 0xf5e0, 0xf6dc, 0xf5e0, +0xf6dc, 0xf424, 0xf55b, 0xf424, 0xf55b, 0xf33a, 0xf4ac, 0xf33a, 0xf4ac, 0xf33a, 0xf4ac, +0xf35e, 0xf50a, 0xf35e, 0xf50a, 0xf318, 0xf4ff, 0xf318, 0xf4ff, 0xf12b, 0xf34c, 0xf12b, +0xf34c, 0xf016, 0xf274, 0xf016, 0xf274, 0xef38, 0xf1d2, 0xef38, 0xf1d2, 0xedca, 0xf0a3, +0xedca, 0xf0a3, 0xedca, 0xf0a3, 0xec5e, 0xef77, 0xec5e, 0xef77, 0xea46, 0xeda0, 0xea46, +0xeda0, 0xe833, 0xebd1, 0xe833, 0xebd1, 0xe724, 0xeb06, 0xe724, 0xeb06, 0xe7b3, 0xebda, +0xe7b3, 0xebda, 0xe7b3, 0xebda, 0xe6ea, 0xeb55, 0xe6ea, 0xeb55, 0xe57e, 0xea2c, 0xe57e, +0xea2c, 0xe3b3, 0xe8a0, 0xe3b3, 0xe8a0, 0xe330, 0xe858, 0xe330, 0xe858, 0xe371, 0xe8ce, +0xe371, 0xe8ce, 0xe1cd, 0xe757, 0xe1cd, 0xe757, 0xe1cd, 0xe757, 0xdf64, 0xe513, 0xdf64, +0xe513, 0xe07e, 0xe646, 0xe07e, 0xe646, 0xe016, 0xe5ec, 0xe016, 0xe5ec, 0xdea9, 0xe481, +0xdea9, 0xe481, 0xe008, 0xe5d5, 0xe008, 0xe5d5, 0xe000, 0xe5b4, 0xe000, 0xe5b4, 0xe000, +0xe5b4, 0xe05e, 0xe5eb, 0xe05e, 0xe5eb, 0xdf6d, 0xe4c8, 0xdf6d, 0xe4c8, 0xdf08, 0xe424, +0xdf08, 0xe424, 0xdec3, 0xe397, 0xdec3, 0xe397, 0xdfd8, 0xe45c, 0xdfd8, 0xe45c, 0xdfd8, +0xe45c, 0xe08c, 0xe4b9, 0xe08c, 0xe4b9, 0xe133, 0xe505, 0xe133, 0xe505, 0xe3bb, 0xe731, +0xe3bb, 0xe731, 0xe350, 0xe66a, 0xe350, 0xe66a, 0xe56c, 0xe82f, 0xe56c, 0xe82f, 0xe725, +0xe994, 0xe725, 0xe994, 0xe725, 0xe994, 0xe764, 0xe986, 0xe764, 0xe986, 0xe8d9, 0xeab6, +0xe8d9, 0xeab6, 0xe87e, 0xea20, 0xe87e, 0xea20, 0xea01, 0xeb72, 0xea01, 0xeb72, 0xeb02, +0xec4b, 0xeb02, 0xec4b, 0xe8e5, 0xea10, 0xe8e5, 0xea10, 0xe8e5, 0xea10, 0xe9f4, 0xeb09, +0xe9f4, 0xeb09, 0xec56, 0xed5d, 0xec56, 0xed5d, 0xec8c, 0xed8b, 0xec8c, 0xed8b, 0xec95, +0xed8e, 0xec95, 0xed8e, 0xee28, 0xef1d, 0xee28, 0xef1d, 0xee28, 0xef1d, 0xeec4, 0xefb6, +0xeec4, 0xefb6, 0xeeb2, 0xef9e, 0xeeb2, 0xef9e, 0xf132, 0xf214, 0xf132, 0xf214, 0xf11a, +0xf1ec, 0xf11a, 0xf1ec, 0xf202, 0xf2bd, 0xf202, 0xf2bd, 0xf491, 0xf52c, 0xf491, 0xf52c, +0xf491, 0xf52c, 0xf393, 0xf408, 0xf393, 0xf408, 0xf593, 0xf5d8, 0xf593, 0xf5d8, 0xf74a, +0xf759, 0xf74a, 0xf759, 0xf7d0, 0xf7a1, 0xf7d0, 0xf7a1, 0xfa4d, 0xf9dc, 0xfa4d, 0xf9dc, +0xfc76, 0xfbbf, 0xfc76, 0xfbbf, 0xfc76, 0xfbbf, 0xff7b, 0xfe7d, 0xff7b, 0xfe7d, 0x8e, +0xff49, 0x8e, 0xff49, 0x33e, 0x1b6, 0x33e, 0x1b6, 0x552, 0x38b, 0x552, 0x38b, +0x685, 0x487, 0x685, 0x487, 0x685, 0x487, 0x92e, 0x702, 0x92e, 0x702, 0x9cb, +0x77a, 0x9cb, 0x77a, 0xb7c, 0x911, 0xb7c, 0x911, 0xc96, 0xa1c, 0xc96, 0xa1c, +0xe68, 0xbea, 0xe68, 0xbea, 0xf74, 0xcfe, 0xf74, 0xcfe, 0xf74, 0xcfe, 0x102c, +0xdc6, 0x102c, 0xdc6, 0x11e4, 0xf98, 0x11e4, 0xf98, 0x12a2, 0x1075, 0x12a2, 0x1075, +0x1320, 0x1118, 0x1320, 0x1118, 0x127a, 0x109a, 0x127a, 0x109a, 0x1264, 0x10ad, 0x1264, +0x10ad, 0x1264, 0x10ad, 0x123e, 0x10ae, 0x123e, 0x10ae, 0x118c, 0x1021, 0x118c, 0x1021, +0x11b3, 0x1069, 0x11b3, 0x1069, 0x1237, 0x1109, 0x1237, 0x1109, 0x1202, 0x10eb, 0x1202, +0x10eb, 0x1202, 0x10eb, 0x114b, 0x1045, 0x114b, 0x1045, 0x11ac, 0x10b1, 0x11ac, 0x10b1, +0x12f4, 0x11ff, 0x12f4, 0x11ff, 0x11dd, 0x10ea, 0x11dd, 0x10ea, 0x113b, 0x1047, 0x113b, +0x1047, 0xfeb, 0xef7, 0xfeb, 0xef7, 0xfeb, 0xef7, 0xec8, 0xdd4, 0xec8, 0xdd4, +0xea0, 0xdaf, 0xea0, 0xdaf, 0xb6c, 0xa82, 0xb6c, 0xa82, 0xa91, 0x9b5, 0xa91, +0x9b5, 0x96b, 0x8a3, 0x96b, 0x8a3, 0x701, 0x656, 0x701, 0x656, 0x701, 0x656, +0x5a0, 0x51b, 0x5a0, 0x51b, 0x477, 0x420, 0x477, 0x420, 0x3ea, 0x3c9, 0x3ea, +0x3c9, 0x1d2, 0x1ef, 0x1d2, 0x1ef, 0xffaa, 0xa, 0xffaa, 0xa, 0xffaa, 0xa, +0xfe05, 0xfeac, 0xfe05, 0xfeac, 0xfc7c, 0xfd6c, 0xfc7c, 0xfd6c, 0xfbfb, 0xfd32, 0xfbfb, +0xfd32, 0xfa44, 0xfbc0, 0xfa44, 0xfbc0, 0xfa0e, 0xfbc7, 0xfa0e, 0xfbc7, 0xf9af, 0xfb9f, +0xf9af, 0xfb9f, 0xf9af, 0xfb9f, 0xf7a7, 0xf9c3, 0xf7a7, 0xf9c3, 0xf759, 0xf996, 0xf759, +0xf996, 0xf567, 0xf7b7, 0xf567, 0xf7b7, 0xf579, 0xf7ce, 0xf579, 0xf7ce, 0xf4fd, 0xf749, +0xf4fd, 0xf749, 0xf52f, 0xf764, 0xf52f, 0xf764, 0xf52f, 0xf764, 0xf650, 0xf861, 0xf650, +0xf861, 0xf5e9, 0xf7ca, 0xf5e9, 0xf7ca, 0xf875, 0xfa1d, 0xf875, 0xfa1d, 0xf8aa, 0xfa10, +0xf8aa, 0xfa10, 0xfb47, 0xfc67, 0xfb47, 0xfc67, 0xfb47, 0xfc67, 0xfdf1, 0xfec8, 0xfdf1, +0xfec8, 0xfe29, 0xfeb8, 0xfe29, 0xfeb8, 0xe0, 0x129, 0xe0, 0x129, 0x251, 0x25a, +0x251, 0x25a, 0x3d2, 0x3a2, 0x3d2, 0x3a2, 0x543, 0x4e4, 0x543, 0x4e4, 0x543, +0x4e4, 0x62d, 0x5a8, 0x62d, 0x5a8, 0x61a, 0x57b, 0x61a, 0x57b, 0x653, 0x5a4, +0x653, 0x5a4, 0x6ab, 0x5f8, 0x6ab, 0x5f8, 0x521, 0x474, 0x521, 0x474, 0x4d0, +0x432, 0x4d0, 0x432, 0x4d0, 0x432, 0x453, 0x3cb, 0x453, 0x3cb, 0x321, 0x2b4, +0x321, 0x2b4, 0x25f, 0x211, 0x25f, 0x211, 0x124, 0xf5, 0x124, 0xf5, 0xff7a, +0xff68, 0xff7a, 0xff68, 0xff7a, 0xff68, 0xff76, 0xff7f, 0xff76, 0xff7f, 0xffb5, 0xffd4, +0xffb5, 0xffd4, 0xfe6c, 0xfe99, 0xfe6c, 0xfe99, 0xfea0, 0xfed4, 0xfea0, 0xfed4, 0xfe8b, +0xfebe, 0xfe8b, 0xfebe, 0xff08, 0xff31, 0xff08, 0xff31, 0xff08, 0xff31, 0xff76, 0xff8c, +0xff76, 0xff8c, 0xff12, 0xff0d, 0xff12, 0xff0d, 0xff25, 0xfeff, 0xff25, 0xfeff, 0xfeeb, +0xfe9c, 0xfeeb, 0xfe9c, 0xff80, 0xff05, 0xff80, 0xff05, 0xff80, 0xff05, 0x26, 0xff7b, +0x26, 0xff7b, 0x11d, 0x42, 0x11d, 0x42, 0xf7, 0xffeb, 0xf7, 0xffeb, 0x14f, +0x13, 0x14f, 0x13, 0x234, 0xcb, 0x234, 0xcb, 0x30c, 0x179, 0x30c, 0x179, +0x30c, 0x179, 0x438, 0x281, 0x438, 0x281, 0x483, 0x2aa, 0x483, 0x2aa, 0x5b9, +0x3c4, 0x5b9, 0x3c4, 0x62f, 0x421, 0x62f, 0x421, 0x715, 0x4f2, 0x715, 0x4f2, +0x6a6, 0x471, 0x6a6, 0x471, 0x6a6, 0x471, 0x5dd, 0x398, 0x5dd, 0x398, 0x838, +0x5e2, 0x838, 0x5e2, 0x781, 0x51b, 0x781, 0x51b, 0x703, 0x48b, 0x703, 0x48b, +0x895, 0x609, 0x895, 0x609, 0x895, 0x609, 0x81c, 0x578, 0x81c, 0x578, 0x8ce, +0x610, 0x8ce, 0x610, 0xa7a, 0x79d, 0xa7a, 0x79d, 0xafa, 0x7fb, 0xafa, 0x7fb, +0xb6a, 0x847, 0xb6a, 0x847, 0xd11, 0x9c6, 0xd11, 0x9c6, 0xd11, 0x9c6, 0xd67, +0x9f3, 0xd67, 0x9f3, 0xd79, 0x9dd, 0xd79, 0x9dd, 0xfd3, 0xc10, 0xfd3, 0xc10, +0x1110, 0xd27, 0x1110, 0xd27, 0x1285, 0xe7c, 0x1285, 0xe7c, 0x14ef, 0x10ca, 0x14ef, +0x10ca, 0x14ef, 0x10ca, 0x1525, 0x10eb, 0x1525, 0x10eb, 0x161e, 0x11d7, 0x161e, 0x11d7, +0x1817, 0x13cb, 0x1817, 0x13cb, 0x1831, 0x13e9, 0x1831, 0x13e9, 0x1873, 0x1438, 0x1873, +0x1438, 0x1873, 0x1438, 0x18fa, 0x14d5, 0x18fa, 0x14d5, 0x19c7, 0x15c0, 0x19c7, 0x15c0, +0x1aab, 0x16cb, 0x1aab, 0x16cb, 0x1b05, 0x1750, 0x1b05, 0x1750, 0x1b08, 0x1785, 0x1b08, +0x1785, 0x1be9, 0x189b, 0x1be9, 0x189b, 0x1be9, 0x189b, 0x1d8b, 0x1a75, 0x1d8b, 0x1a75, +0x1d18, 0x1a3a, 0x1d18, 0x1a3a, 0x1ca5, 0x19fc, 0x1ca5, 0x19fc, 0x1cb2, 0x1a3d, 0x1cb2, +0x1a3d, 0x1be7, 0x19a3, 0x1be7, 0x19a3, 0x1bad, 0x1995, 0x1bad, 0x1995, 0x1bad, 0x1995, +0x1b71, 0x197f, 0x1b71, 0x197f, 0x1a8b, 0x18b8, 0x1a8b, 0x18b8, 0x1adf, 0x1927, 0x1adf, +0x1927, 0x1ba7, 0x1a02, 0x1ba7, 0x1a02, 0x1a95, 0x18fd, 0x1a95, 0x18fd, 0x1a95, 0x18fd, +0x18fe, 0x176e, 0x18fe, 0x176e, 0x1844, 0x16b7, 0x1844, 0x16b7, 0x16b7, 0x1529, 0x16b7, +0x1529, 0x154d, 0x13bb, 0x154d, 0x13bb, 0x15bd, 0x1426, 0x15bd, 0x1426, 0x154e, 0x13b1, +0x154e, 0x13b1, 0x154e, 0x13b1, 0x1420, 0x127c, 0x1420, 0x127c, 0x135c, 0x11b2, 0x135c, +0x11b2, 0x11f5, 0x1048, 0x11f5, 0x1048, 0x108c, 0xede, 0x108c, 0xede, 0xfb3, 0xe06, +0xfb3, 0xe06, 0xd90, 0xbe9, 0xd90, 0xbe9, 0xd90, 0xbe9, 0xc59, 0xab9, 0xc59, +0xab9, 0xb57, 0x9c4, 0xb57, 0x9c4, 0xa15, 0x891, 0xa15, 0x891, 0xa6c, 0x8fa, +0xa6c, 0x8fa, 0x8ae, 0x751, 0x8ae, 0x751, 0x8ae, 0x751, 0x7a6, 0x661, 0x7a6, +0x661, 0x5a2, 0x478, 0x5a2, 0x478, 0x230, 0x123, 0x230, 0x123, 0x101, 0x13, +0x101, 0x13, 0xffd6, 0xff0a, 0xffd6, 0xff0a, 0xfcdf, 0xfc35, 0xfcdf, 0xfc35, 0xfcdf, +0xfc35, 0xf9cc, 0xf947, 0xf9cc, 0xf947, 0xf9ed, 0xf98e, 0xf9ed, 0xf98e, 0xf7c8, 0xf792, +0xf7c8, 0xf792, 0xf503, 0xf4f6, 0xf503, 0xf4f6, 0xf514, 0xf531, 0xf514, 0xf531, 0xf269, +0xf2b2, 0xf269, 0xf2b2, 0xf269, 0xf2b2, 0xeff1, 0xf066, 0xeff1, 0xf066, 0xf048, 0xf0ea, +0xf048, 0xf0ea, 0xee1f, 0xeeed, 0xee1f, 0xeeed, 0xed80, 0xee7a, 0xed80, 0xee7a, 0xef08, +0xf02c, 0xef08, 0xf02c, 0xef08, 0xf02c, 0xecc0, 0xee0b, 0xecc0, 0xee0b, 0xec97, 0xee07, +0xec97, 0xee07, 0xedb6, 0xef46, 0xedb6, 0xef46, 0xed54, 0xef00, 0xed54, 0xef00, 0xeca3, +0xee65, 0xeca3, 0xee65, 0xec1d, 0xedef, 0xec1d, 0xedef, 0xec1d, 0xedef, 0xed16, 0xeef1, +0xed16, 0xeef1, 0xedff, 0xefdd, 0xedff, 0xefdd, 0xf04d, 0xf226, 0xf04d, 0xf226, 0xf192, +0xf35e, 0xf192, 0xf35e, 0xf26a, 0xf423, 0xf26a, 0xf423, 0xf5ab, 0xf74c, 0xf5ab, 0xf74c, +0xf5ab, 0xf74c, 0xf784, 0xf906, 0xf784, 0xf906, 0xf98a, 0xfae8, 0xf98a, 0xfae8, 0xfbe2, +0xfd1a, 0xfbe2, 0xfd1a, 0xfcea, 0xfdfa, 0xfcea, 0xfdfa, 0xffba, 0xa1, 0xffba, 0xa1, +0xffba, 0xa1, 0x140, 0x1ff, 0x140, 0x1ff, 0x163, 0x1fc, 0x163, 0x1fc, 0x386, +0x3fc, 0x386, 0x3fc, 0x5c5, 0x61c, 0x5c5, 0x61c, 0x6f5, 0x733, 0x6f5, 0x733, +0x78f, 0x7bb, 0x78f, 0x7bb, 0x78f, 0x7bb, 0x9b7, 0x9d8, 0x9b7, 0x9d8, 0x9c2, +0x9de, 0x9c2, 0x9de, 0x92c, 0x94a, 0x92c, 0x94a, 0xaca, 0xaf1, 0xaca, 0xaf1, +0x9bc, 0x9f2, 0x9bc, 0x9f2, 0x981, 0x9cc, 0x981, 0x9cc, 0x981, 0x9cc, 0xa48, +0xaad, 0xa48, 0xaad, 0x8a7, 0x929, 0x8a7, 0x929, 0x820, 0x8c3, 0x820, 0x8c3, +0x862, 0x928, 0x862, 0x928, 0x5ec, 0x6d6, 0x5ec, 0x6d6, 0x5ec, 0x6d6, 0x400, +0x510, 0x400, 0x510, 0x355, 0x48b, 0x355, 0x48b, 0x225, 0x380, 0x225, 0x380, +0x72, 0x1f3, 0x72, 0x1f3, 0xff2e, 0xd5, 0xff2e, 0xd5, 0xfe01, 0xffcd, 0xfe01, +0xffcd, 0xfe01, 0xffcd, 0xfbbe, 0xfdb1, 0xfbbe, 0xfdb1, 0xfb19, 0xfd32, 0xfb19, 0xfd32, +0xfa0a, 0xfc4d, 0xfa0a, 0xfc4d, 0xf894, 0xfb01, 0xf894, 0xfb01, 0xf64b, 0xf8e5, 0xf64b, +0xf8e5, 0xf373, 0xf63d, 0xf373, 0xf63d, 0xf373, 0xf63d, 0xf2db, 0xf5d8, 0xf2db, 0xf5d8, +0xf179, 0xf4ac, 0xf179, 0xf4ac, 0xef4a, 0xf2b4, 0xef4a, 0xf2b4, 0xedba, 0xf15e, 0xedba, +0xf15e, 0xeaef, 0xeece, 0xeaef, 0xeece, 0xeaef, 0xeece, 0xe8fc, 0xed14, 0xe8fc, 0xed14, +0xe95b, 0xedac, 0xe95b, 0xedac, 0xe801, 0xec88, 0xe801, 0xec88, 0xe53f, 0xe9f8, 0xe53f, +0xe9f8, 0xe407, 0xe8ea, 0xe407, 0xe8ea, 0xe2da, 0xe7df, 0xe2da, 0xe7df, 0xe2da, 0xe7df, +0xe045, 0xe564, 0xe045, 0xe564, 0xe003, 0xe530, 0xe003, 0xe530, 0xdfbd, 0xe4ed, 0xdfbd, +0xe4ed, 0xdc5d, 0xe183, 0xdc5d, 0xe183, 0xdc98, 0xe1a6, 0xdc98, 0xe1a6, 0xdc98, 0xe1a6, +0xdca2, 0xe18d, 0xdca2, 0xe18d, 0xda72, 0xdf2d, 0xda72, 0xdf2d, 0xdbb9, 0xe039, 0xdbb9, +0xe039, 0xda93, 0xdecf, 0xda93, 0xdecf, 0xd909, 0xdcf8, 0xd909, 0xdcf8, 0xdaf9, 0xde96, +0xdaf9, 0xde96, 0xdaf9, 0xde96, 0xdd20, 0xe068, 0xdd20, 0xe068, 0xde01, 0xe0f3, 0xde01, +0xe0f3, 0xde51, 0xe0ef, 0xde51, 0xe0ef, 0xe004, 0xe252, 0xe004, 0xe252, 0xe15f, 0xe363, +0xe15f, 0xe363, 0xe2da, 0xe49d, 0xe2da, 0xe49d, 0xe2da, 0xe49d, 0xe328, 0xe4b5, 0xe328, +0xe4b5, 0xe2e4, 0xe444, 0xe2e4, 0xe444, 0xe3ac, 0xe4ec, 0xe3ac, 0xe4ec, 0xe37d, 0xe4a9, +0xe37d, 0xe4a9, 0xe459, 0xe57b, 0xe459, 0xe57b, 0xe459, 0xe57b, 0xe56e, 0xe690, 0xe56e, +0xe690, 0xe509, 0xe636, 0xe509, 0xe636, 0xe6b2, 0xe7f0, 0xe6b2, 0xe7f0, 0xe831, 0xe985, +0xe831, 0xe985, 0xe7da, 0xe946, 0xe7da, 0xe946, 0xe7fd, 0xe982, 0xe7fd, 0xe982, 0xe7fd, +0xe982, 0xe825, 0xe9c1, 0xe825, 0xe9c1, 0xe848, 0xe9f6, 0xe848, 0xe9f6, 0xe99c, 0xeb55, +0xe99c, 0xeb55, 0xeaf7, 0xecb4, 0xeaf7, 0xecb4, 0xeb37, 0xecef, 0xeb37, 0xecef, 0xed35, +0xeede, 0xed35, 0xeede, 0xed35, 0xeede, 0xf01e, 0xf1ad, 0xf01e, 0xf1ad, 0xf133, 0xf29f, +0xf133, 0xf29f, 0xf2a8, 0xf3e9, 0xf2a8, 0xf3e9, 0xf520, 0xf62d, 0xf520, 0xf62d, 0xf68a, +0xf75f, 0xf68a, 0xf75f, 0xf68a, 0xf75f, 0xf8c7, 0xf960, 0xf8c7, 0xf960, 0xfb89, 0xfbe4, +0xfb89, 0xfbe4, 0xfea4, 0xfec1, 0xfea4, 0xfec1, 0x87, 0x6a, 0x87, 0x6a, 0x216, +0x1c4, 0x216, 0x1c4, 0x498, 0x418, 0x498, 0x418, 0x498, 0x418, 0x7be, 0x71a, +0x7be, 0x71a, 0xac0, 0xa00, 0xac0, 0xa00, 0xbbe, 0xaed, 0xbbe, 0xaed, 0xdb8, +0xce0, 0xdb8, 0xce0, 0xe7e, 0xda9, 0xe7e, 0xda9, 0x1010, 0xf47, 0x1010, 0xf47, +0x1010, 0xf47, 0x1292, 0x11dd, 0x1292, 0x11dd, 0x121c, 0x1181, 0x121c, 0x1181, 0x1143, +0x10c6, 0x1143, 0x10c6, 0x120c, 0x11af, 0x120c, 0x11af, 0x12b2, 0x1275, 0x12b2, 0x1275, +0x12b2, 0x1275, 0x13ab, 0x138c, 0x13ab, 0x138c, 0x1511, 0x150d, 0x1511, 0x150d, 0x1390, +0x13a0, 0x1390, 0x13a0, 0x117a, 0x1198, 0x117a, 0x1198, 0x132b, 0x1350, 0x132b, 0x1350, +0x1382, 0x13a5, 0x1382, 0x13a5, 0x1382, 0x13a5, 0x1224, 0x123f, 0x1224, 0x123f, 0x12ed, +0x12f9, 0x12ed, 0x12f9, 0x1188, 0x117e, 0x1188, 0x117e, 0x1169, 0x1146, 0x1169, 0x1146, +0x133a, 0x12fc, 0x133a, 0x12fc, 0x12f6, 0x129c, 0x12f6, 0x129c, 0x12f6, 0x129c, 0x120c, +0x1198, 0x120c, 0x1198, 0x11fd, 0x1173, 0x11fd, 0x1173, 0x1139, 0x109e, 0x1139, 0x109e, +0x10fa, 0x1056, 0x10fa, 0x1056, 0x10d9, 0x1034, 0x10d9, 0x1034, 0x10d9, 0x1034, 0xed0, +0xe33, 0xed0, 0xe33, 0xd78, 0xcee, 0xd78, 0xcee, 0xceb, 0xc7c, 0xceb, 0xc7c, +0xbcf, 0xb84, 0xbcf, 0xb84, 0xb86, 0xb67, 0xb86, 0xb67, 0xaa0, 0xab1, 0xaa0, +0xab1, 0xaa0, 0xab1, 0x7c2, 0x807, 0x7c2, 0x807, 0x6d3, 0x74d, 0x6d3, 0x74d, +0x678, 0x724, 0x678, 0x724, 0x48e, 0x569, 0x48e, 0x569, 0x338, 0x43a, 0x338, +0x43a, 0x285, 0x3a5, 0x285, 0x3a5, 0x285, 0x3a5, 0xffb1, 0xe3, 0xffb1, 0xe3, +0xfeb1, 0xffe9, 0xfeb1, 0xffe9, 0xfd72, 0xfea1, 0xfd72, 0xfea1, 0xf99c, 0xfab3, 0xf99c, +0xfab3, 0xf8f8, 0xf9e9, 0xf8f8, 0xf9e9, 0xf8f8, 0xf9e9, 0xfa23, 0xfae0, 0xfa23, 0xfae0, +0xf9bf, 0xfa3b, 0xf9bf, 0xfa3b, 0xf93c, 0xf96d, 0xf93c, 0xf96d, 0xf99d, 0xf97c, 0xf99d, +0xf97c, 0xf87f, 0xf805, 0xf87f, 0xf805, 0xf8c9, 0xf7f5, 0xf8c9, 0xf7f5, 0xf8c9, 0xf7f5, +0xfafa, 0xf9cb, 0xfafa, 0xf9cb, 0xfacb, 0xf946, 0xfacb, 0xf946, 0xfc4a, 0xfa76, 0xfc4a, +0xfa76, 0xfeec, 0xfcd2, 0xfeec, 0xfcd2, 0xff18, 0xfcc4, 0xff18, 0xfcc4, 0x1e4, 0xff64, +0x1e4, 0xff64, 0x1e4, 0xff64, 0x2c7, 0x29, 0x2c7, 0x29, 0x25a, 0xffae, 0x25a, +0xffae, 0x266, 0xffbc, 0x266, 0xffbc, 0x163, 0xfecb, 0x163, 0xfecb, 0x122, 0xfea8, +0x122, 0xfea8, 0x122, 0xfea8, 0x62, 0xfe13, 0x62, 0xfe13, 0xfeab, 0xfc92, 0xfeab, +0xfc92, 0xfbf6, 0xfa19, 0xfbf6, 0xfa19, 0xfbd2, 0xfa38, 0xfbd2, 0xfa38, 0xfc2e, 0xfad9, +0xfc2e, 0xfad9, 0xfa6c, 0xf95d, 0xfa6c, 0xf95d, 0xfa6c, 0xf95d, 0xfa27, 0xf95a, 0xfa27, +0xf95a, 0xf929, 0xf89a, 0xf929, 0xf89a, 0xf65d, 0xf605, 0xf65d, 0xf605, 0xf84b, 0xf822, +0xf84b, 0xf822, 0xf7f3, 0xf7f0, 0xf7f3, 0xf7f0, 0xf5c5, 0xf5dd, 0xf5c5, 0xf5dd, 0xf5c5, +0xf5dd, 0xf620, 0xf64b, 0xf620, 0xf64b, 0xf557, 0xf58a, 0xf557, 0xf58a, 0xf50b, 0xf53d, +0xf50b, 0xf53d, 0xf726, 0xf750, 0xf726, 0xf750, 0xf7a1, 0xf7bc, 0xf7a1, 0xf7bc, 0xf7a1, +0xf7bc, 0xf542, 0xf54a, 0xf542, 0xf54a, 0xf72b, 0xf71c, 0xf72b, 0xf71c, 0xf91a, 0xf8f2, +0xf91a, 0xf8f2, 0xf9fe, 0xf9bd, 0xf9fe, 0xf9bd, 0xfc02, 0xfba8, 0xfc02, 0xfba8, 0xfc91, +0xfc21, 0xfc91, 0xfc21, 0xfc91, 0xfc21, 0xfda3, 0xfd1f, 0xfda3, 0xfd1f, 0xac, 0x17, +0xac, 0x17, 0x139, 0x96, 0x139, 0x96, 0x206, 0x158, 0x206, 0x158, 0x404, +0x34d, 0x404, 0x34d, 0x47f, 0x3c1, 0x47f, 0x3c1, 0x47f, 0x3c1, 0x611, 0x54c, +0x611, 0x54c, 0x7c1, 0x6f5, 0x7c1, 0x6f5, 0x8b6, 0x7e1, 0x8b6, 0x7e1, 0x944, +0x864, 0x944, 0x864, 0x9b9, 0x8cb, 0x9b9, 0x8cb, 0x9b9, 0x8cb, 0xa04, 0x902, +0xa04, 0x902, 0xb04, 0x9ea, 0xb04, 0x9ea, 0xc8b, 0xb54, 0xc8b, 0xb54, 0xc5f, +0xb06, 0xc5f, 0xb06, 0xd35, 0xbb5, 0xd35, 0xbb5, 0x10bf, 0xf14, 0x10bf, 0xf14, +0x10bf, 0xf14, 0x10ba, 0xee1, 0x10ba, 0xee1, 0x121d, 0x1015, 0x121d, 0x1015, 0x146b, +0x1232, 0x146b, 0x1232, 0x144c, 0x11e4, 0x144c, 0x11e4, 0x15f4, 0x135f, 0x15f4, 0x135f, +0x15f4, 0x135f, 0x1722, 0x1463, 0x1722, 0x1463, 0x171e, 0x143c, 0x171e, 0x143c, 0x17dd, +0x14dc, 0x17dd, 0x14dc, 0x1927, 0x1610, 0x1927, 0x1610, 0x1ace, 0x17a8, 0x1ace, 0x17a8, +0x1d7e, 0x1a51, 0x1d7e, 0x1a51, 0x1d7e, 0x1a51, 0x1ea3, 0x1b78, 0x1ea3, 0x1b78, 0x1e8a, +0x1b68, 0x1e8a, 0x1b68, 0x1f49, 0x1c38, 0x1f49, 0x1c38, 0x1fb5, 0x1cba, 0x1fb5, 0x1cba, +0x1f01, 0x1c22, 0x1f01, 0x1c22, 0x1fa2, 0x1ce1, 0x1fa2, 0x1ce1, 0x1fa2, 0x1ce1, 0x1eca, +0x1c2b, 0x1eca, 0x1c2b, 0x1eab, 0x1c2e, 0x1eab, 0x1c2e, 0x1fd0, 0x1d74, 0x1fd0, 0x1d74, +0x1f64, 0x1d27, 0x1f64, 0x1d27, 0x1f37, 0x1d14, 0x1f37, 0x1d14, 0x1f37, 0x1d14, 0x1f97, +0x1d8b, 0x1f97, 0x1d8b, 0x1e83, 0x1c87, 0x1e83, 0x1c87, 0x1e0c, 0x1c1b, 0x1e0c, 0x1c1b, +0x1f54, 0x1d67, 0x1f54, 0x1d67, 0x1dc7, 0x1bd8, 0x1dc7, 0x1bd8, 0x1bc1, 0x19c9, 0x1bc1, +0x19c9, 0x1bc1, 0x19c9, 0x1ae8, 0x18e3, 0x1ae8, 0x18e3, 0x1a42, 0x182b, 0x1a42, 0x182b, +0x1896, 0x166a, 0x1896, 0x166a, 0x18ed, 0x16a9, 0x18ed, 0x16a9, 0x17d8, 0x157b, 0x17d8, +0x157b, 0x15f3, 0x137e, 0x15f3, 0x137e, 0x15f3, 0x137e, 0x1664, 0x13d7, 0x1664, 0x13d7, +0x166c, 0x13cb, 0x166c, 0x13cb, 0x150d, 0x125c, 0x150d, 0x125c, 0x1358, 0x109c, 0x1358, +0x109c, 0x10ed, 0xe2c, 0x10ed, 0xe2c, 0x10ed, 0xe2c, 0xeb6, 0xbf5, 0xeb6, 0xbf5, +0xf85, 0xccb, 0xf85, 0xccb, 0xe28, 0xb7c, 0xe28, 0xb7c, 0xc9e, 0xa07, 0xc9e, +0xa07, 0xb83, 0x907, 0xb83, 0x907, 0xaa7, 0x84c, 0xaa7, 0x84c, 0xaa7, 0x84c, +0xa2a, 0x7f6, 0xa2a, 0x7f6, 0x8d1, 0x6c8, 0x8d1, 0x6c8, 0x650, 0x476, 0x650, +0x476, 0x3d7, 0x230, 0x3d7, 0x230, 0x13f, 0xffce, 0x13f, 0xffce, 0xfe14, 0xfcda, +0xfe14, 0xfcda, 0xfe14, 0xfcda, 0xfc17, 0xfb16, 0xfc17, 0xfb16, 0xf9d2, 0xf90a, 0xf9d2, +0xf90a, 0xf741, 0xf6b1, 0xf741, 0xf6b1, 0xf5b6, 0xf55d, 0xf5b6, 0xf55d, 0xf45c, 0xf438, +0xf45c, 0xf438, 0xf45c, 0xf438, 0xf23d, 0xf24c, 0xf23d, 0xf24c, 0xf10c, 0xf14b, 0xf10c, +0xf14b, 0xefa1, 0xf00b, 0xefa1, 0xf00b, 0xed2e, 0xedc0, 0xed2e, 0xedc0, 0xebe5, 0xec9a, +0xebe5, 0xec9a, 0xec30, 0xed03, 0xec30, 0xed03, 0xec30, 0xed03, 0xeaf2, 0xebdf, 0xeaf2, +0xebdf, 0xeb64, 0xec64, 0xeb64, 0xec64, 0xead2, 0xebdf, 0xead2, 0xebdf, 0xe9c1, 0xead5, +0xe9c1, 0xead5, 0xea35, 0xeb4b, 0xea35, 0xeb4b, 0xe9cb, 0xeadb, 0xe9cb, 0xeadb, 0xe9cb, +0xeadb, 0xea39, 0xeb3d, 0xea39, 0xeb3d, 0xea95, 0xeb89, 0xea95, 0xeb89, 0xec60, 0xed3c, +0xec60, 0xed3c, 0xed8a, 0xee4b, 0xed8a, 0xee4b, 0xeee1, 0xef82, 0xeee1, 0xef82, 0xeee1, +0xef82, 0xf022, 0xf0a0, 0xf022, 0xf0a0, 0xf107, 0xf15f, 0xf107, 0xf15f, 0xf41c, 0xf44e, +0xf41c, 0xf44e, 0xf64b, 0xf656, 0xf64b, 0xf656, 0xf7d4, 0xf7b9, 0xf7d4, 0xf7b9, 0xfa96, +0xfa58, 0xfa96, 0xfa58, 0xfa96, 0xfa58, 0xfc34, 0xfbd7, 0xfc34, 0xfbd7, 0xfebb, 0xfe42, +0xfebb, 0xfe42, 0xb8, 0x2a, 0xb8, 0x2a, 0x241, 0x1a4, 0x241, 0x1a4, 0x409, +0x365, 0x409, 0x365, 0x5f5, 0x550, 0x5f5, 0x550, 0x5f5, 0x550, 0x7cc, 0x72f, +0x7cc, 0x72f, 0x8f2, 0x865, 0x8f2, 0x865, 0xa60, 0x9ec, 0xa60, 0x9ec, 0xaed, +0xa98, 0xaed, 0xa98, 0xb8d, 0xb5e, 0xb8d, 0xb5e, 0xb8d, 0xb5e, 0xc6f, 0xc6c, +0xc6f, 0xc6c, 0xddc, 0xe0b, 0xddc, 0xe0b, 0xc84, 0xce9, 0xc84, 0xce9, 0xc92, +0xd30, 0xc92, 0xd30, 0xbed, 0xcc7, 0xbed, 0xcc7, 0xb4f, 0xc67, 0xb4f, 0xc67, +0xb4f, 0xc67, 0xbdd, 0xd31, 0xbdd, 0xd31, 0xa8b, 0xc1d, 0xa8b, 0xc1d, 0x9c0, +0xb8e, 0x9c0, 0xb8e, 0x87a, 0xa82, 0x87a, 0xa82, 0x7ee, 0xa2e, 0x7ee, 0xa2e, +0x721, 0x998, 0x721, 0x998, 0x721, 0x998, 0x6f4, 0x99f, 0x6f4, 0x99f, 0x518, +0x7f5, 0x518, 0x7f5, 0x20f, 0x51c, 0x20f, 0x51c, 0xb, 0x348, 0xb, 0x348, +0xfe72, 0x1dc, 0xfe72, 0x1dc, 0xfe72, 0x1dc, 0xfc14, 0xffaa, 0xfc14, 0xffaa, 0xf97a, +0xfd3c, 0xf97a, 0xfd3c, 0xf646, 0xfa32, 0xf646, 0xfa32, 0xf4b0, 0xf8c5, 0xf4b0, 0xf8c5, +0xf432, 0xf86f, 0xf432, 0xf86f, 0xf2d1, 0xf734, 0xf2d1, 0xf734, 0xf2d1, 0xf734, 0xf1e6, +0xf66d, 0xf1e6, 0xf66d, 0xf0db, 0xf583, 0xf0db, 0xf583, 0xef23, 0xf3e8, 0xef23, 0xf3e8, +0xec75, 0xf151, 0xec75, 0xf151, 0xea95, 0xef84, 0xea95, 0xef84, 0xe892, 0xed8c, 0xe892, +0xed8c, 0xe892, 0xed8c, 0xe66a, 0xeb69, 0xe66a, 0xeb69, 0xe3f0, 0xe8eb, 0xe3f0, 0xe8eb, +0xe21f, 0xe70d, 0xe21f, 0xe70d, 0xe0fd, 0xe5d4, 0xe0fd, 0xe5d4, 0xe06e, 0xe526, 0xe06e, +0xe526, 0xe06e, 0xe526, 0xde49, 0xe2d8, 0xde49, 0xe2d8, 0xdca5, 0xe103, 0xdca5, 0xe103, +0xdb8b, 0xdfb0, 0xdb8b, 0xdfb0, 0xda03, 0xdde9, 0xda03, 0xdde9, 0xd9c1, 0xdd62, 0xd9c1, +0xdd62, 0xd91f, 0xdc78, 0xd91f, 0xdc78, 0xd91f, 0xdc78, 0xd919, 0xdc29, 0xd919, 0xdc29, +0xd9cf, 0xdc95, 0xd9cf, 0xdc95, 0xda78, 0xdcf6, 0xda78, 0xdcf6, 0xdadd, 0xdd18, 0xdadd, +0xdd18, 0xdc12, 0xde0f, 0xdc12, 0xde0f, 0xdcfe, 0xdec4, 0xdcfe, 0xdec4, 0xdcfe, 0xdec4, +0xde0d, 0xdfa4, 0xde0d, 0xdfa4, 0xde48, 0xdfba, 0xde48, 0xdfba, 0xddc0, 0xdf16, 0xddc0, +0xdf16, 0xdc8e, 0xddd2, 0xdc8e, 0xddd2, 0xdcf8, 0xde32, 0xdcf8, 0xde32, 0xdcf8, 0xde32, +0xde63, 0xdf9b, 0xde63, 0xdf9b, 0xdeff, 0xe03e, 0xdeff, 0xe03e, 0xdfdc, 0xe126, 0xdfdc, +0xe126, 0xe0c7, 0xe221, 0xe0c7, 0xe221, 0xe161, 0xe2cb, 0xe161, 0xe2cb, 0xe24b, 0xe3c5, +0xe24b, 0xe3c5, 0xe24b, 0xe3c5, 0xe323, 0xe4ab, 0xe323, 0xe4ab, 0xe393, 0xe523, 0xe393, +0xe523, 0xe457, 0xe5ea, 0xe457, 0xe5ea, 0xe566, 0xe6f3, 0xe566, 0xe6f3, 0xe827, 0xe9a5, +0xe827, 0xe9a5, 0xe827, 0xe9a5, 0xe9a5, 0xeb0a, 0xe9a5, 0xeb0a, 0xeb87, 0xecc8, 0xeb87, +0xecc8, 0xec64, 0xed76, 0xec64, 0xed76, 0xee34, 0xef0d, 0xee34, 0xef0d, 0xf09d, 0xf133, +0xf09d, 0xf133, 0xf250, 0xf29d, 0xf250, 0xf29d, 0xf250, 0xf29d, 0xf4d5, 0xf4d2, 0xf4d5, +0xf4d2, 0xf729, 0xf6d2, 0xf729, 0xf6d2, 0xf8e6, 0xf83a, 0xf8e6, 0xf83a, 0xfae3, 0xf9e2, +0xfae3, 0xf9e2, 0xfe2f, 0xfcdc, 0xfe2f, 0xfcdc, 0x35, 0xfe94, 0x35, 0xfe94, 0x35, +0xfe94, 0x291, 0xaa, 0x291, 0xaa, 0x37f, 0x159, 0x37f, 0x159, 0x602, 0x3a7, +0x602, 0x3a7, 0xa1a, 0x796, 0xa1a, 0x796, 0xcd5, 0xa33, 0xcd5, 0xa33, 0xcd5, +0xa33, 0xd78, 0xac3, 0xd78, 0xac3, 0xe98, 0xbdb, 0xe98, 0xbdb, 0xfef, 0xd34, +0xfef, 0xd34, 0x1100, 0xe4f, 0x1100, 0xe4f, 0x125e, 0xfc1, 0x125e, 0xfc1, 0x12f3, +0x106e, 0x12f3, 0x106e, 0x12f3, 0x106e, 0x139b, 0x1133, 0x139b, 0x1133, 0x1398, 0x1151, +0x1398, 0x1151, 0x1492, 0x126c, 0x1492, 0x126c, 0x148b, 0x1285, 0x148b, 0x1285, 0x14c6, +0x12e0, 0x14c6, 0x12e0, 0x1588, 0x13be, 0x1588, 0x13be, 0x1588, 0x13be, 0x14e9, 0x1338, +0x14e9, 0x1338, 0x141e, 0x1282, 0x141e, 0x1282, 0x13f5, 0x126a, 0x13f5, 0x126a, 0x1360, +0x11e4, 0x1360, 0x11e4, 0x1346, 0x11d5, 0x1346, 0x11d5, 0x1346, 0x11d5, 0x128a, 0x1123, +0x128a, 0x1123, 0x1266, 0x1108, 0x1266, 0x1108, 0x1236, 0x10e1, 0x1236, 0x10e1, 0x11dc, +0x1093, 0x11dc, 0x1093, 0x1180, 0x1044, 0x1180, 0x1044, 0x10f0, 0xfc6, 0x10f0, 0xfc6, +0x10f0, 0xfc6, 0x107c, 0xf68, 0x107c, 0xf68, 0xf52, 0xe59, 0xf52, 0xe59, 0xf13, +0xe3b, 0xf13, 0xe3b, 0xd1f, 0xc6d, 0xd1f, 0xc6d, 0xcb4, 0xc2e, 0xcb4, 0xc2e, +0xc89, 0xc31, 0xc89, 0xc31, 0xc89, 0xc31, 0xaf9, 0xad1, 0xaf9, 0xad1, 0x9e2, +0x9ed, 0x9e2, 0x9ed, 0x90a, 0x947, 0x90a, 0x947, 0x794, 0x801, 0x794, 0x801, +0x802, 0x89a, 0x802, 0x89a, 0x802, 0x89a, 0x7ca, 0x887, 0x7ca, 0x887, 0x5d8, +0x6b2, 0x5d8, 0x6b2, 0x3b5, 0x4a4, 0x3b5, 0x4a4, 0x288, 0x381, 0x288, 0x381, +0x2a0, 0x397, 0x2a0, 0x397, 0xc4, 0x1ad, 0xc4, 0x1ad, 0xc4, 0x1ad, 0x54, +0x124, 0x54, 0x124, 0xff74, 0x20, 0xff74, 0x20, 0xfede, 0xff5c, 0xfede, 0xff5c, +0xfed5, 0xff1b, 0xfed5, 0xff1b, 0xfea3, 0xfeab, 0xfea3, 0xfeab, 0xfe76, 0xfe39, 0xfe76, +0xfe39, 0xfe76, 0xfe39, 0xfebe, 0xfe3b, 0xfebe, 0xfe3b, 0xff2d, 0xfe62, 0xff2d, 0xfe62, +0xffc8, 0xfeb8, 0xffc8, 0xfeb8, 0x153, 0x2, 0x153, 0x2, 0x306, 0x17b, 0x306, +0x17b, 0x306, 0x17b, 0x323, 0x166, 0x323, 0x166, 0x3d7, 0x1f3, 0x3d7, 0x1f3, +0x428, 0x229, 0x428, 0x229, 0x46c, 0x25f, 0x46c, 0x25f, 0x594, 0x385, 0x594, +0x385, 0x3c1, 0x1be, 0x3c1, 0x1be, 0x3c1, 0x1be, 0x28a, 0x9f, 0x28a, 0x9f, +0x57, 0xfe8f, 0x57, 0xfe8f, 0xfef0, 0xfd58, 0xfef0, 0xfd58, 0xfe4b, 0xfce9, 0xfe4b, +0xfce9, 0xfd4a, 0xfc26, 0xfd4a, 0xfc26, 0xfa8e, 0xf9ae, 0xfa8e, 0xf9ae, 0xfa8e, 0xf9ae, +0xf986, 0xf8ec, 0xf986, 0xf8ec, 0xf9e4, 0xf990, 0xf9e4, 0xf990, 0xf812, 0xf804, 0xf812, +0xf804, 0xf6ab, 0xf6e0, 0xf6ab, 0xf6e0, 0xf54e, 0xf5c1, 0xf54e, 0xf5c1, 0xf54e, 0xf5c1, +0xf3d3, 0xf47e, 0xf3d3, 0xf47e, 0xf2a5, 0xf381, 0xf2a5, 0xf381, 0xf2f9, 0xf3ff, 0xf2f9, +0xf3ff, 0xf1c3, 0xf2ea, 0xf1c3, 0xf2ea, 0xf149, 0xf289, 0xf149, 0xf289, 0xf1e6, 0xf337, +0xf1e6, 0xf337, 0xf1e6, 0xf337, 0xf128, 0xf283, 0xf128, 0xf283, 0xf1a1, 0xf2ff, 0xf1a1, +0xf2ff, 0xf3d8, 0xf532, 0xf3d8, 0xf532, 0xf466, 0xf5b8, 0xf466, 0xf5b8, 0xf622, 0xf768, +0xf622, 0xf768, 0xf68c, 0xf7c2, 0xf68c, 0xf7c2, 0xf68c, 0xf7c2, 0xf714, 0xf837, 0xf714, +0xf837, 0xf8e4, 0xf9f2, 0xf8e4, 0xf9f2, 0xf9e8, 0xfae0, 0xf9e8, 0xfae0, 0xfb74, 0xfc53, +0xfb74, 0xfc53, 0xfc4f, 0xfd15, 0xfc4f, 0xfd15, 0xfc4f, 0xfd15, 0xfe42, 0xfeed, 0xfe42, +0xfeed, 0xffb3, 0x41, 0xffb3, 0x41, 0x125, 0x195, 0x125, 0x195, 0x22b, 0x279, +0x22b, 0x279, 0x3b2, 0x3dc, 0x3b2, 0x3dc, 0x611, 0x613, 0x611, 0x613, 0x611, +0x613, 0x7d9, 0x7b0, 0x7d9, 0x7b0, 0x76c, 0x713, 0x76c, 0x713, 0x9e5, 0x958, +0x9e5, 0x958, 0xbab, 0xae6, 0xbab, 0xae6, 0xc42, 0xb41, 0xc42, 0xb41, 0xec9, +0xd88, 0xec9, 0xd88, 0xec9, 0xd88, 0xf39, 0xdb5, 0xf39, 0xdb5, 0x1101, 0xf39, +0x1101, 0xf39, 0x13a5, 0x1198, 0x13a5, 0x1198, 0x14b6, 0x1265, 0x14b6, 0x1265, 0x1592, +0x12fe, 0x1592, 0x12fe, 0x1592, 0x12fe, 0x16d4, 0x1400, 0x16d4, 0x1400, 0x172d, 0x141f, +0x172d, 0x141f, 0x1879, 0x1535, 0x1879, 0x1535, 0x19c5, 0x1654, 0x19c5, 0x1654, 0x1bf8, +0x1862, 0x1bf8, 0x1862, 0x1cdd, 0x192c, 0x1cdd, 0x192c, 0x1cdd, 0x192c, 0x1dde, 0x1a1c, +0x1dde, 0x1a1c, 0x1f37, 0x1b6e, 0x1f37, 0x1b6e, 0x207c, 0x1cb7, 0x207c, 0x1cb7, 0x223e, +0x1e87, 0x223e, 0x1e87, 0x22b4, 0x1f17, 0x22b4, 0x1f17, 0x22e7, 0x1f6a, 0x22e7, 0x1f6a, +0x22e7, 0x1f6a, 0x2319, 0x1fc7, 0x2319, 0x1fc7, 0x225e, 0x1f3c, 0x225e, 0x1f3c, 0x226e, +0x1f83, 0x226e, 0x1f83, 0x2328, 0x2078, 0x2328, 0x2078, 0x211d, 0x1eaa, 0x211d, 0x1eaa, +0x211d, 0x1eaa, 0x2151, 0x1f1b, 0x2151, 0x1f1b, 0x21f2, 0x1ff9, 0x21f2, 0x1ff9, 0x21d2, +0x2014, 0x21d2, 0x2014, 0x216b, 0x1fe6, 0x216b, 0x1fe6, 0x1ff3, 0x1ea0, 0x1ff3, 0x1ea0, +0x1d42, 0x1c1d, 0x1d42, 0x1c1d, 0x1d42, 0x1c1d, 0x1ca7, 0x1baa, 0x1ca7, 0x1baa, 0x1c66, +0x1b8b, 0x1c66, 0x1b8b, 0x1a12, 0x1951, 0x1a12, 0x1951, 0x1868, 0x17bc, 0x1868, 0x17bc, +0x18cf, 0x1830, 0x18cf, 0x1830, 0x18cf, 0x1830, 0x17d1, 0x1739, 0x17d1, 0x1739, 0x1635, +0x15a0, 0x1635, 0x15a0, 0x15ec, 0x1554, 0x15ec, 0x1554, 0x12b4, 0x1216, 0x12b4, 0x1216, +0x117a, 0x10d3, 0x117a, 0x10d3, 0xfa2, 0xeef, 0xfa2, 0xeef, 0xfa2, 0xeef, 0xda7, +0xce7, 0xda7, 0xce7, 0xc41, 0xb74, 0xc41, 0xb74, 0xba8, 0xacf, 0xba8, 0xacf, +0xafc, 0xa17, 0xafc, 0xa17, 0x9c6, 0x8d7, 0x9c6, 0x8d7, 0x977, 0x881, 0x977, +0x881, 0x977, 0x881, 0x8d2, 0x7d7, 0x8d2, 0x7d7, 0x7c1, 0x6c3, 0x7c1, 0x6c3, +0x64d, 0x551, 0x64d, 0x551, 0x459, 0x362, 0x459, 0x362, 0x2f6, 0x206, 0x2f6, +0x206, 0x2f6, 0x206, 0x19b, 0xb6, 0x19b, 0xb6, 0xfe1e, 0xfd47, 0xfe1e, 0xfd47, +0xfca4, 0xfbdd, 0xfca4, 0xfbdd, 0xfa5b, 0xf9a8, 0xfa5b, 0xf9a8, 0xf84e, 0xf7b0, 0xf84e, +0xf7b0, 0xf6e0, 0xf659, 0xf6e0, 0xf659, 0xf6e0, 0xf659, 0xf49b, 0xf42d, 0xf49b, 0xf42d, +0xf200, 0xf1ac, 0xf200, 0xf1ac, 0xf162, 0xf128, 0xf162, 0xf128, 0xf013, 0xeff3, 0xf013, +0xeff3, 0xee3f, 0xee39, 0xee3f, 0xee39, 0xee19, 0xee2d, 0xee19, 0xee2d, 0xee19, 0xee2d, +0xeced, 0xed18, 0xeced, 0xed18, 0xeb9f, 0xebe1, 0xeb9f, 0xebe1, 0xeb53, 0xeba9, 0xeb53, +0xeba9, 0xeaff, 0xeb66, 0xeaff, 0xeb66, 0xe8a8, 0xe91d, 0xe8a8, 0xe91d, 0xe8a8, 0xe91d, +0xe874, 0xe8f3, 0xe874, 0xe8f3, 0xe85f, 0xe8e4, 0xe85f, 0xe8e4, 0xe85c, 0xe8e3, 0xe85c, +0xe8e3, 0xe98f, 0xea14, 0xe98f, 0xea14, 0xea02, 0xea80, 0xea02, 0xea80, 0xea19, 0xea8c, +0xea19, 0xea8c, 0xea19, 0xea8c, 0xebca, 0xec2e, 0xebca, 0xec2e, 0xec32, 0xec83, 0xec32, +0xec83, 0xed5e, 0xed99, 0xed5e, 0xed99, 0xefd4, 0xeff6, 0xefd4, 0xeff6, 0xf0ec, 0xf0f3, +0xf0ec, 0xf0f3, 0xf2d9, 0xf2c4, 0xf2d9, 0xf2c4, 0xf2d9, 0xf2c4, 0xf61f, 0xf5ee, 0xf61f, +0xf5ee, 0xf850, 0xf804, 0xf850, 0xf804, 0xfa7f, 0xfa19, 0xfa7f, 0xfa19, 0xfd60, 0xfce3, +0xfd60, 0xfce3, 0xfd57, 0xfcc7, 0xfd57, 0xfcc7, 0xfd57, 0xfcc7, 0xffae, 0xff0f, 0xffae, +0xff0f, 0x20d, 0x164, 0x20d, 0x164, 0x27c, 0x1cf, 0x27c, 0x1cf, 0x36f, 0x2c5, +0x36f, 0x2c5, 0x5bb, 0x51b, 0x5bb, 0x51b, 0x60b, 0x57b, 0x60b, 0x57b, 0x60b, +0x57b, 0x6f7, 0x67f, 0x6f7, 0x67f, 0x803, 0x7a9, 0x803, 0x7a9, 0x752, 0x71c, +0x752, 0x71c, 0x7da, 0x7d0, 0x7da, 0x7d0, 0x8b5, 0x8da, 0x8b5, 0x8da, 0x859, +0x8b4, 0x859, 0x8b4, 0x859, 0x8b4, 0x691, 0x725, 0x691, 0x725, 0x6ec, 0x7bd, +0x6ec, 0x7bd, 0x67b, 0x78b, 0x67b, 0x78b, 0x67f, 0x7d0, 0x67f, 0x7d0, 0x6ba, +0x84d, 0x6ba, 0x84d, 0x6ba, 0x84d, 0x5ed, 0x7c3, 0x5ed, 0x7c3, 0x4c0, 0x6d9, +0x4c0, 0x6d9, 0x411, 0x66c, 0x411, 0x66c, 0x299, 0x535, 0x299, 0x535, 0x210, +0x4ec, 0x210, 0x4ec, 0xffc7, 0x2e1, 0xffc7, 0x2e1, 0xffc7, 0x2e1, 0xfd4a, 0xa1, +0xfd4a, 0xa1, 0xfc6c, 0xfffe, 0xfc6c, 0xfffe, 0xfa2a, 0xfdf4, 0xfa2a, 0xfdf4, 0xf9d0, +0xfdd0, 0xf9d0, 0xfdd0, 0xf9ab, 0xfddf, 0xf9ab, 0xfddf, 0xf8b8, 0xfd1b, 0xf8b8, 0xfd1b, +0xf8b8, 0xfd1b, 0xf6da, 0xfb6b, 0xf6da, 0xfb6b, 0xf671, 0xfb2c, 0xf671, 0xfb2c, 0xf46a, +0xf94a, 0xf46a, 0xf94a, 0xf2a0, 0xf7a1, 0xf2a0, 0xf7a1, 0xf190, 0xf6ac, 0xf190, 0xf6ac, +0xf190, 0xf6ac, 0xeedf, 0xf411, 0xeedf, 0xf411, 0xec7a, 0xf1bb, 0xec7a, 0xf1bb, 0xec0a, +0xf154, 0xec0a, 0xf154, 0xea4c, 0xef98, 0xea4c, 0xef98, 0xe6c6, 0xec0c, 0xe6c6, 0xec0c, +0xe513, 0xea4b, 0xe513, 0xea4b, 0xe513, 0xea4b, 0xe34c, 0xe870, 0xe34c, 0xe870, 0xe193, +0xe69a, 0xe193, 0xe69a, 0xe113, 0xe5f7, 0xe113, 0xe5f7, 0xdf69, 0xe424, 0xdf69, 0xe424, +0xdd0f, 0xe19b, 0xdd0f, 0xe19b, 0xdd0f, 0xe169, 0xdd0f, 0xe169, 0xdd0f, 0xe169, 0xdc7f, +0xe0a4, 0xdc7f, 0xe0a4, 0xdc7f, 0xe06d, 0xdc7f, 0xe06d, 0xdc97, 0xe04e, 0xdc97, 0xe04e, +0xdcad, 0xe030, 0xdcad, 0xe030, 0xdc8c, 0xdfdd, 0xdc8c, 0xdfdd, 0xdc8c, 0xdfdd, 0xddcb, +0xe0f0, 0xddcb, 0xe0f0, 0xde38, 0xe136, 0xde38, 0xe136, 0xddba, 0xe099, 0xddba, 0xe099, +0xddeb, 0xe0b1, 0xddeb, 0xe0b1, 0xdcf7, 0xdfae, 0xdcf7, 0xdfae, 0xdcfb, 0xdfac, 0xdcfb, +0xdfac, 0xdcfb, 0xdfac, 0xde15, 0xe0c7, 0xde15, 0xe0c7, 0xddc8, 0xe084, 0xddc8, 0xe084, +0xddbc, 0xe089, 0xddbc, 0xe089, 0xdfbb, 0xe29e, 0xdfbb, 0xe29e, 0xded1, 0xe1ce, 0xded1, +0xe1ce, 0xdf70, 0xe289, 0xdf70, 0xe289, 0xdf70, 0xe289, 0xe078, 0xe3ae, 0xe078, 0xe3ae, +0xe06a, 0xe3bb, 0xe06a, 0xe3bb, 0xe1f5, 0xe55c, 0xe1f5, 0xe55c, 0xe4e0, 0xe858, 0xe4e0, +0xe858, 0xe53a, 0xe8bb, 0xe53a, 0xe8bb, 0xe53a, 0xe8bb, 0xe586, 0xe907, 0xe586, 0xe907, +0xe7bd, 0xeb33, 0xe7bd, 0xeb33, 0xe863, 0xebc2, 0xe863, 0xebc2, 0xe9f4, 0xed2f, 0xe9f4, +0xed2f, 0xec39, 0xef46, 0xec39, 0xef46, 0xedb8, 0xf088, 0xedb8, 0xf088, 0xedb8, 0xf088, +0xef87, 0xf210, 0xef87, 0xf210, 0xf2f4, 0xf52b, 0xf2f4, 0xf52b, 0xf59a, 0xf778, 0xf59a, +0xf778, 0xf931, 0xfaad, 0xf931, 0xfaad, 0xfb16, 0xfc2a, 0xfb16, 0xfc2a, 0xfcd5, 0xfd80, +0xfcd5, 0xfd80, 0xfcd5, 0xfd80, 0xffe5, 0x25, 0xffe5, 0x25, 0x337, 0x30e, 0x337, +0x30e, 0x64a, 0x5ba, 0x64a, 0x5ba, 0x92d, 0x83c, 0x92d, 0x83c, 0xad8, 0x98d, +0xad8, 0x98d, 0xad8, 0x98d, 0xc92, 0xaf5, 0xc92, 0xaf5, 0xf47, 0xd60, 0xf47, +0xd60, 0x101a, 0xdf3, 0x101a, 0xdf3, 0x11d5, 0xf78, 0x11d5, 0xf78, 0x135d, 0x10d4, +0x135d, 0x10d4, 0x13ff, 0x1153, 0x13ff, 0x1153, 0x13ff, 0x1153, 0x13f9, 0x1133, 0x13f9, +0x1133, 0x167b, 0x13a2, 0x167b, 0x13a2, 0x16f3, 0x140f, 0x16f3, 0x140f, 0x15a3, 0x12ba, +0x15a3, 0x12ba, 0x1647, 0x135d, 0x1647, 0x135d, 0x1647, 0x135d, 0x1661, 0x137b, 0x1661, +0x137b, 0x16a9, 0x13c9, 0x16a9, 0x13c9, 0x1780, 0x14a9, 0x1780, 0x14a9, 0x164f, 0x1383, +0x164f, 0x1383, 0x14f3, 0x1234, 0x14f3, 0x1234, 0x153b, 0x128b, 0x153b, 0x128b, 0x153b, +0x128b, 0x1477, 0x11d8, 0x1477, 0x11d8, 0x1373, 0x10e7, 0x1373, 0x10e7, 0x1318, 0x10a3, +0x1318, 0x10a3, 0x1297, 0x103c, 0x1297, 0x103c, 0x1167, 0xf2b, 0x1167, 0xf2b, 0x11f5, +0xfdc, 0x11f5, 0xfdc, 0x11f5, 0xfdc, 0x1129, 0xf38, 0x1129, 0xf38, 0x1087, 0xec5, +0x1087, 0xec5, 0xf53, 0xdc6, 0xf53, 0xdc6, 0xd72, 0xc20, 0xd72, 0xc20, 0xc6e, +0xb5c, 0xc6e, 0xb5c, 0xc6e, 0xb5c, 0xb0a, 0xa3d, 0xb0a, 0xa3d, 0x925, 0x8a0, +0x925, 0x8a0, 0x893, 0x858, 0x893, 0x858, 0x862, 0x871, 0x862, 0x871, 0x705, +0x75d, 0x705, 0x75d, 0x6d2, 0x76e, 0x6d2, 0x76e, 0x6d2, 0x76e, 0x5a1, 0x67d, +0x5a1, 0x67d, 0x388, 0x49a, 0x388, 0x49a, 0x1f0, 0x330, 0x1f0, 0x330, 0x200, +0x361, 0x200, 0x361, 0xff92, 0x108, 0xff92, 0x108, 0xfe29, 0xffa5, 0xfe29, 0xffa5, +0xfe29, 0xffa5, 0xfe2b, 0xff9f, 0xfe2b, 0xff9f, 0xfcd3, 0xfe30, 0xfcd3, 0xfe30, 0xfcbd, +0xfdf4, 0xfcbd, 0xfdf4, 0xfcff, 0xfe04, 0xfcff, 0xfe04, 0xfb4c, 0xfc11, 0xfb4c, 0xfc11, +0xfb4c, 0xfc11, 0xfbef, 0xfc6c, 0xfbef, 0xfc6c, 0xfd70, 0xfd9c, 0xfd70, 0xfd9c, 0xfdb6, +0xfd8c, 0xfdb6, 0xfd8c, 0, 0xff7f, 0, 0xff7f, 0x82, 0xffaa, 0x82, 0xffaa, +0x1f5, 0xcb, 0x1f5, 0xcb, 0x1f5, 0xcb, 0x3ca, 0x253, 0x3ca, 0x253, 0x5ac, +0x3f3, 0x5ac, 0x3f3, 0x707, 0x517, 0x707, 0x517, 0x7b0, 0x598, 0x7b0, 0x598, +0x745, 0x513, 0x745, 0x513, 0x709, 0x4cd, 0x709, 0x4cd, 0x709, 0x4cd, 0x6fa, +0x4c4, 0x6fa, 0x4c4, 0x667, 0x447, 0x667, 0x447, 0x560, 0x365, 0x560, 0x365, +0x440, 0x277, 0x440, 0x277, 0x2c7, 0x13b, 0x2c7, 0x13b, 0x2c7, 0x13b, 0x116, +0xffd0, 0x116, 0xffd0, 0x144, 0x4b, 0x144, 0x4b, 0xff34, 0xfe8b, 0xff34, 0xfe8b, +0xfcb0, 0xfc58, 0xfcb0, 0xfc58, 0xfa65, 0xfa5c, 0xfa65, 0xfa5c, 0xf86a, 0xf8aa, 0xf86a, +0xf8aa, 0xf86a, 0xf8aa, 0xf7ad, 0xf82f, 0xf7ad, 0xf82f, 0xf7b7, 0xf872, 0xf7b7, 0xf872, +0xf58e, 0xf676, 0xf58e, 0xf676, 0xf3f1, 0xf4fa, 0xf3f1, 0xf4fa, 0xf3ae, 0xf4cb, 0xf3ae, +0xf4cb, 0xf38d, 0xf4b0, 0xf38d, 0xf4b0, 0xf38d, 0xf4b0, 0xf34f, 0xf46d, 0xf34f, 0xf46d, +0xf2e3, 0xf3ee, 0xf2e3, 0xf3ee, 0xf2bd, 0xf3a9, 0xf2bd, 0xf3a9, 0xf31f, 0xf3e3, 0xf31f, +0xf3e3, 0xf457, 0xf4ea, 0xf457, 0xf4ea, 0xf457, 0xf4ea, 0xf4d8, 0xf535, 0xf4d8, 0xf535, +0xf65b, 0xf67d, 0xf65b, 0xf67d, 0xf6ea, 0xf6ce, 0xf6ea, 0xf6ce, 0xf7dd, 0xf782, 0xf7dd, +0xf782, 0xf85e, 0xf7c4, 0xf85e, 0xf7c4, 0xf910, 0xf83a, 0xf910, 0xf83a, 0xf910, 0xf83a, +0xf9af, 0xf89f, 0xf9af, 0xf89f, 0xfb9c, 0xfa55, 0xfb9c, 0xfa55, 0xfca4, 0xfb2a, 0xfca4, +0xfb2a, 0xfd61, 0xfbb8, 0xfd61, 0xfbb8, 0xffbb, 0xfde7, 0xffbb, 0xfde7, 0x138, 0xff3b, +0x138, 0xff3b, 0x138, 0xff3b, 0x2cc, 0xa7, 0x2cc, 0xa7, 0x3c9, 0x17f, 0x3c9, +0x17f, 0x538, 0x2c8, 0x538, 0x2c8, 0x5cf, 0x339, 0x5cf, 0x339, 0x6fa, 0x43d, +0x6fa, 0x43d, 0x6fa, 0x43d, 0x92b, 0x644, 0x92b, 0x644, 0xa36, 0x723, 0xa36, +0x723, 0xb9e, 0x85c, 0xb9e, 0x85c, 0xefe, 0xb8a, 0xefe, 0xb8a, 0xf50, 0xba9, +0xf50, 0xba9, 0x112b, 0xd4d, 0x112b, 0xd4d, 0x112b, 0xd4d, 0x1379, 0xf63, 0x1379, +0xf63, 0x1485, 0x1038, 0x1485, 0x1038, 0x16c6, 0x1243, 0x16c6, 0x1243, 0x17e9, 0x1332, +0x17e9, 0x1332, 0x18e2, 0x13fd, 0x18e2, 0x13fd, 0x1b7c, 0x166c, 0x1b7c, 0x166c, 0x1b7c, +0x166c, 0x1e1a, 0x18e7, 0x1e1a, 0x18e7, 0x1ed4, 0x1986, 0x1ed4, 0x1986, 0x2013, 0x1ab4, +0x2013, 0x1ab4, 0x2135, 0x1bcf, 0x2135, 0x1bcf, 0x2338, 0x1dd5, 0x2338, 0x1dd5, 0x2338, +0x1dd5, 0x237e, 0x1e28, 0x237e, 0x1e28, 0x2439, 0x1efc, 0x2439, 0x1efc, 0x2408, 0x1eed, +0x2408, 0x1eed, 0x23e3, 0x1ef4, 0x23e3, 0x1ef4, 0x2486, 0x1fcb, 0x2486, 0x1fcb, 0x2417, +0x1f99, 0x2417, 0x1f99, 0x2417, 0x1f99, 0x2440, 0x2004, 0x2440, 0x2004, 0x23dd, 0x1fe7, +0x23dd, 0x1fe7, 0x22cd, 0x1f20, 0x22cd, 0x1f20, 0x2274, 0x1f12, 0x2274, 0x1f12, 0x21b7, +0x1e9f, 0x21b7, 0x1e9f, 0x20c8, 0x1df8, 0x20c8, 0x1df8, 0x20c8, 0x1df8, 0x2004, 0x1d7b, +0x2004, 0x1d7b, 0x1da7, 0x1b61, 0x1da7, 0x1b61, 0x1cd8, 0x1ad0, 0x1cd8, 0x1ad0, 0x1b6c, +0x199e, 0x1b6c, 0x199e, 0x1ae9, 0x1950, 0x1ae9, 0x1950, 0x1ae9, 0x1950, 0x1986, 0x181d, +0x1986, 0x181d, 0x17c9, 0x168a, 0x17c9, 0x168a, 0x15b1, 0x149a, 0x15b1, 0x149a, 0x13bd, +0x12c8, 0x13bd, 0x12c8, 0x12d7, 0x1203, 0x12d7, 0x1203, 0x1107, 0x1052, 0x1107, 0x1052, +0x1107, 0x1052, 0xed9, 0xe40, 0xed9, 0xe40, 0xd6f, 0xcf4, 0xd6f, 0xcf4, 0xc9e, +0xc41, 0xc9e, 0xc41, 0xbb1, 0xb73, 0xbb1, 0xb73, 0xa91, 0xa73, 0xa91, 0xa73, +0x852, 0x858, 0x852, 0x858, 0x852, 0x858, 0x84d, 0x879, 0x84d, 0x879, 0x6d8, +0x72c, 0x6d8, 0x72c, 0x546, 0x5c6, 0x546, 0x5c6, 0x372, 0x421, 0x372, 0x421, +0x1e4, 0x2c3, 0x1e4, 0x2c3, 0x1e4, 0x2c3, 0x8b, 0x19b, 0x8b, 0x19b, 0xfeeb, +0x2f, 0xfeeb, 0x2f, 0xfd21, 0xfe98, 0xfd21, 0xfe98, 0xfa95, 0xfc3f, 0xfa95, 0xfc3f, +0xf86f, 0xfa4b, 0xf86f, 0xfa4b, 0xf702, 0xf90e, 0xf702, 0xf90e, 0xf702, 0xf90e, 0xf4da, +0xf714, 0xf4da, 0xf714, 0xf26d, 0xf4d1, 0xf26d, 0xf4d1, 0xf1e7, 0xf471, 0xf1e7, 0xf471, +0xf010, 0xf2bd, 0xf010, 0xf2bd, 0xef6a, 0xf234, 0xef6a, 0xf234, 0xef6a, 0xf234, 0xee71, +0xf153, 0xee71, 0xf153, 0xedef, 0xf0e4, 0xedef, 0xf0e4, 0xeda3, 0xf0a4, 0xeda3, 0xf0a4, +0xec8f, 0xef96, 0xec8f, 0xef96, 0xeacc, 0xedd3, 0xeacc, 0xedd3, 0xea52, 0xed53, 0xea52, +0xed53, 0xea52, 0xed53, 0xeb5f, 0xee53, 0xeb5f, 0xee53, 0xeb2f, 0xee11, 0xeb2f, 0xee11, +0xea38, 0xed02, 0xea38, 0xed02, 0xeaac, 0xed58, 0xeaac, 0xed58, 0xeb5e, 0xede7, 0xeb5e, +0xede7, 0xec60, 0xeec1, 0xec60, 0xeec1, 0xec60, 0xeec1, 0xee06, 0xf03a, 0xee06, 0xf03a, +0xedcf, 0xefd1, 0xedcf, 0xefd1, 0xef0a, 0xf0d6, 0xef0a, 0xf0d6, 0xf08b, 0xf220, 0xf08b, +0xf220, 0xf25a, 0xf3b4, 0xf25a, 0xf3b4, 0xf25a, 0xf3b4, 0xf393, 0xf4b0, 0xf393, 0xf4b0, +0xf57c, 0xf65c, 0xf57c, 0xf65c, 0xf775, 0xf818, 0xf775, 0xf818, 0xf9d0, 0xfa36, 0xf9d0, +0xfa36, 0xfc56, 0xfc81, 0xfc56, 0xfc81, 0xfed1, 0xfec2, 0xfed1, 0xfec2, 0xfed1, 0xfec2, +0xa6, 0x63, 0xa6, 0x63, 0x273, 0x1ff, 0x273, 0x1ff, 0x4ab, 0x40b, 0x4ab, +0x40b, 0x5cc, 0x506, 0x5cc, 0x506, 0x6eb, 0x606, 0x6eb, 0x606, 0x759, 0x65c, +0x759, 0x65c, 0x759, 0x65c, 0x841, 0x732, 0x841, 0x732, 0x844, 0x72c, 0x844, +0x72c, 0x931, 0x818, 0x931, 0x818, 0x983, 0x870, 0x983, 0x870, 0x9a5, 0x8a0, +0x9a5, 0x8a0, 0x9a5, 0x8a0, 0x926, 0x836, 0x926, 0x836, 0x884, 0x7b0, 0x884, +0x7b0, 0x7a3, 0x6f2, 0x7a3, 0x6f2, 0x7c3, 0x73a, 0x7c3, 0x73a, 0x77c, 0x721, +0x77c, 0x721, 0x5bd, 0x594, 0x5bd, 0x594, 0x5bd, 0x594, 0x4dd, 0x4eb, 0x4dd, +0x4eb, 0x3fb, 0x443, 0x3fb, 0x443, 0x382, 0x406, 0x382, 0x406, 0x1eb, 0x2ae, +0x1eb, 0x2ae, 0x24, 0x128, 0x24, 0x128, 0xfe11, 0xff57, 0xfe11, 0xff57, 0xfe11, +0xff57, 0xfd70, 0xfef9, 0xfd70, 0xfef9, 0xfc44, 0xfe11, 0xfc44, 0xfe11, 0xfa80, 0xfc90, +0xfa80, 0xfc90, 0xf874, 0xfac9, 0xf874, 0xfac9, 0xf834, 0xfacc, 0xf834, 0xfacc, 0xf834, +0xfacc, 0xf7b5, 0xfa91, 0xf7b5, 0xfa91, 0xf67c, 0xf99a, 0xf67c, 0xf99a, 0xf577, 0xf8d6, +0xf577, 0xf8d6, 0xf40a, 0xf7a8, 0xf40a, 0xf7a8, 0xf331, 0xf70c, 0xf331, 0xf70c, 0xf1dc, +0xf5f1, 0xf1dc, 0xf5f1, 0xf1dc, 0xf5f1, 0xf117, 0xf562, 0xf117, 0xf562, 0xef55, 0xf3d3, +0xef55, 0xf3d3, 0xede4, 0xf290, 0xede4, 0xf290, 0xec4a, 0xf11e, 0xec4a, 0xf11e, 0xeaba, +0xefb0, 0xeaba, 0xefb0, 0xe953, 0xee64, 0xe953, 0xee64, 0xe953, 0xee64, 0xe811, 0xed36, +0xe811, 0xed36, 0xe5d0, 0xeb01, 0xe5d0, 0xeb01, 0xe45f, 0xe993, 0xe45f, 0xe993, 0xe2ad, +0xe7dc, 0xe2ad, 0xe7dc, 0xe18a, 0xe6ac, 0xe18a, 0xe6ac, 0xe18a, 0xe6ac, 0xe17f, 0xe68c, +0xe17f, 0xe68c, 0xe062, 0xe551, 0xe062, 0xe551, 0xdfbe, 0xe489, 0xdfbe, 0xe489, 0xdfb6, +0xe455, 0xdfb6, 0xe455, 0xe010, 0xe47e, 0xe010, 0xe47e, 0xe029, 0xe461, 0xe029, 0xe461, +0xe029, 0xe461, 0xdfc2, 0xe3c1, 0xdfc2, 0xe3c1, 0xdf2f, 0xe2f3, 0xdf2f, 0xe2f3, 0xdf49, +0xe2d1, 0xdf49, 0xe2d1, 0xdf98, 0xe2e3, 0xdf98, 0xe2e3, 0xe12e, 0xe43f, 0xe12e, 0xe43f, +0xe0d8, 0xe3af, 0xe0d8, 0xe3af, 0xe0d8, 0xe3af, 0xe189, 0xe42a, 0xe189, 0xe42a, 0xe231, +0xe49e, 0xe231, 0xe49e, 0xe223, 0xe461, 0xe223, 0xe461, 0xe2b9, 0xe4cb, 0xe2b9, 0xe4cb, +0xe2a2, 0xe48d, 0xe2a2, 0xe48d, 0xe2a2, 0xe48d, 0xe304, 0xe4ca, 0xe304, 0xe4ca, 0xe3b8, +0xe55c, 0xe3b8, 0xe55c, 0xe500, 0xe682, 0xe500, 0xe682, 0xe575, 0xe6d9, 0xe575, 0xe6d9, +0xe633, 0xe777, 0xe633, 0xe777, 0xe7d0, 0xe8f4, 0xe7d0, 0xe8f4, 0xe7d0, 0xe8f4, 0xe910, +0xea12, 0xe910, 0xea12, 0xe971, 0xea4f, 0xe971, 0xea4f, 0xeaa7, 0xeb5d, 0xeaa7, 0xeb5d, +0xea20, 0xeaab, 0xea20, 0xeaab, 0xeb27, 0xeb83, 0xeb27, 0xeb83, 0xec8e, 0xecb6, 0xec8e, +0xecb6, 0xec8e, 0xecb6, 0xee19, 0xee0a, 0xee19, 0xee0a, 0xf0b4, 0xf06a, 0xf0b4, 0xf06a, +0xf2d7, 0xf250, 0xf2d7, 0xf250, 0xf571, 0xf4ab, 0xf571, 0xf4ab, 0xf74a, 0xf643, 0xf74a, +0xf643, 0xf74a, 0xf643, 0xf9c8, 0xf882, 0xf9c8, 0xf882, 0xfcc9, 0xfb45, 0xfcc9, 0xfb45, +0xff29, 0xfd6b, 0xff29, 0xfd6b, 0xb7, 0xfec2, 0xb7, 0xfec2, 0x342, 0x11c, 0x342, +0x11c, 0x56e, 0x31e, 0x56e, 0x31e, 0x56e, 0x31e, 0x87e, 0x609, 0x87e, 0x609, +0xa05, 0x775, 0xa05, 0x775, 0xb79, 0x8d4, 0xb79, 0x8d4, 0xd07, 0xa55, 0xd07, +0xa55, 0xef6, 0xc3e, 0xef6, 0xc3e, 0x1205, 0xf4e, 0x1205, 0xf4e, 0x1205, 0xf4e, +0x12b4, 0x1003, 0x12b4, 0x1003, 0x136e, 0x10c8, 0x136e, 0x10c8, 0x14a5, 0x120e, 0x14a5, +0x120e, 0x1530, 0x12a9, 0x1530, 0x12a9, 0x15e0, 0x136c, 0x15e0, 0x136c, 0x15e0, 0x136c, +0x163c, 0x13da, 0x163c, 0x13da, 0x15be, 0x136d, 0x15be, 0x136d, 0x1637, 0x13f5, 0x1637, +0x13f5, 0x15fb, 0x13c6, 0x15fb, 0x13c6, 0x15d2, 0x13a9, 0x15d2, 0x13a9, 0x14e9, 0x12c8, +0x14e9, 0x12c8, 0x14e9, 0x12c8, 0x14ec, 0x12d1, 0x14ec, 0x12d1, 0x13d2, 0x11bb, 0x13d2, +0x11bb, 0x126c, 0x1059, 0x126c, 0x1059, 0x12cd, 0x10be, 0x12cd, 0x10be, 0x11ed, 0xfe3, +0x11ed, 0xfe3, 0x11a6, 0xfa5, 0x11a6, 0xfa5, 0x11a6, 0xfa5, 0x10c0, 0xecb, 0x10c0, +0xecb, 0xef3, 0xd10, 0xef3, 0xd10, 0xebf, 0xcf4, 0xebf, 0xcf4, 0xe25, 0xc79, +0xe25, 0xc79, 0xc6f, 0xaea, 0xc6f, 0xaea, 0xc6f, 0xaea, 0xba7, 0xa51, 0xba7, +0xa51, 0xa16, 0x8f6, 0xa16, 0x8f6, 0x9b2, 0x8ce, 0x9b2, 0x8ce, 0x8d9, 0x838, +0x8d9, 0x838, 0x7ae, 0x754, 0x7ae, 0x754, 0x5ff, 0x5ef, 0x5ff, 0x5ef, 0x5ff, +0x5ef, 0x4d9, 0x514, 0x4d9, 0x514, 0x460, 0x4e4, 0x460, 0x4e4, 0x2da, 0x3a4, +0x2da, 0x3a4, 0x19d, 0x2a7, 0x19d, 0x2a7, 0xa3, 0x1e4, 0xa3, 0x1e4, 0xa3, +0x1e4, 0xfefe, 0x6e, 0xfefe, 0x6e, 0xfdcb, 0xff5c, 0xfdcb, 0xff5c, 0xfd09, 0xfeb0, +0xfd09, 0xfeb0, 0xfa98, 0xfc45, 0xfa98, 0xfc45, 0xfa4a, 0xfbf0, 0xfa4a, 0xfbf0, 0xfa16, +0xfba6, 0xfa16, 0xfba6, 0xfa16, 0xfba6, 0xf99d, 0xfb0b, 0xf99d, 0xfb0b, 0xf907, 0xfa45, +0xf907, 0xfa45, 0xf968, 0xfa6c, 0xf968, 0xfa6c, 0xfa7e, 0xfb3f, 0xfa7e, 0xfb3f, 0xfc65, +0xfcde, 0xfc65, 0xfcde, 0xfe9a, 0xfec8, 0xfe9a, 0xfec8, 0xfe9a, 0xfec8, 0xffb0, 0xff91, +0xffb0, 0xff91, 0xfc, 0x94, 0xfc, 0x94, 0x246, 0x199, 0x246, 0x199, 0x324, +0x23a, 0x324, 0x23a, 0x3ca, 0x2ad, 0x3ca, 0x2ad, 0x3ca, 0x2ad, 0x4a2, 0x35d, +0x4a2, 0x35d, 0x44d, 0x2ed, 0x44d, 0x2ed, 0x4b2, 0x346, 0x4b2, 0x346, 0x3b2, +0x246, 0x3b2, 0x246, 0x403, 0x2a6, 0x403, 0x2a6, 0x54d, 0x40b, 0x54d, 0x40b, +0x54d, 0x40b, 0x4a7, 0x38c, 0x4a7, 0x38c, 0x34b, 0x260, 0x34b, 0x260, 0x24e, +0x199, 0x24e, 0x199, 0x115, 0x9d, 0x115, 0x9d, 0xbb, 0x7f, 0xbb, 0x7f, +0xffa7, 0xffa8, 0xffa7, 0xffa8, 0xffa7, 0xffa8, 0xfd24, 0xfd5e, 0xfd24, 0xfd5e, 0xfc27, +0xfc94, 0xfc27, 0xfc94, 0xfb83, 0xfc1a, 0xfb83, 0xfc1a, 0xfb14, 0xfbcc, 0xfb14, 0xfbcc, +0xf95d, 0xfa2a, 0xf95d, 0xfa2a, 0xf95d, 0xfa2a, 0xf900, 0xf9d6, 0xf900, 0xf9d6, 0xf808, +0xf8da, 0xf808, 0xf8da, 0xf726, 0xf7e7, 0xf726, 0xf7e7, 0xf778, 0xf81d, 0xf778, 0xf81d, +0xf6eb, 0xf769, 0xf6eb, 0xf769, 0xf6d4, 0xf721, 0xf6d4, 0xf721, 0xf6d4, 0xf721, 0xf824, +0xf838, 0xf824, 0xf838, 0xf819, 0xf7ef, 0xf819, 0xf7ef, 0xf902, 0xf896, 0xf902, 0xf896, +0xfaaa, 0xf9fb, 0xfaaa, 0xf9fb, 0xfaa7, 0xf9b6, 0xfaa7, 0xf9b6, 0xfbf0, 0xfabf, 0xfbf0, +0xfabf, 0xfbf0, 0xfabf, 0xfc3d, 0xfad0, 0xfc3d, 0xfad0, 0xfca2, 0xfb00, 0xfca2, 0xfb00, +0xfe1c, 0xfc4c, 0xfe1c, 0xfc4c, 0xff4f, 0xfd58, 0xff4f, 0xfd58, 0xffbe, 0xfda9, 0xffbe, +0xfda9, 0xffbe, 0xfda9, 0x11b, 0xfeee, 0x11b, 0xfeee, 0x253, 0x16, 0x253, 0x16, +0x34b, 0x104, 0x34b, 0x104, 0x494, 0x248, 0x494, 0x248, 0x5f6, 0x3a9, 0x5f6, +0x3a9, 0x565, 0x319, 0x565, 0x319, 0x565, 0x319, 0x703, 0x4b9, 0x703, 0x4b9, +0x873, 0x62a, 0x873, 0x62a, 0x7f9, 0x5af, 0x7f9, 0x5af, 0xa40, 0x7f3, 0xa40, +0x7f3, 0xb2d, 0x8d8, 0xb2d, 0x8d8, 0xc29, 0x9c7, 0xc29, 0x9c7, 0xc29, 0x9c7, +0xd5a, 0xae7, 0xd5a, 0xae7, 0xe96, 0xc0d, 0xe96, 0xc0d, 0xf8e, 0xcea, 0xf8e, +0xcea, 0x1183, 0xec0, 0x1183, 0xec0, 0x132f, 0x104b, 0x132f, 0x104b, 0x132f, 0x104b, +0x1416, 0x110f, 0x1416, 0x110f, 0x1572, 0x1248, 0x1572, 0x1248, 0x17ec, 0x14a0, 0x17ec, +0x14a0, 0x1967, 0x15fb, 0x1967, 0x15fb, 0x1b39, 0x17b3, 0x1b39, 0x17b3, 0x1c98, 0x18fc, +0x1c98, 0x18fc, 0x1c98, 0x18fc, 0x1ceb, 0x1940, 0x1ceb, 0x1940, 0x1efb, 0x1b48, 0x1efb, +0x1b48, 0x1fad, 0x1bfb, 0x1fad, 0x1bfb, 0x20c3, 0x1d1b, 0x20c3, 0x1d1b, 0x2198, 0x1e02, +0x2198, 0x1e02, 0x217c, 0x1e00, 0x217c, 0x1e00, 0x217c, 0x1e00, 0x219e, 0x1e44, 0x219e, +0x1e44, 0x22aa, 0x1f7a, 0x22aa, 0x1f7a, 0x2276, 0x1f75, 0x2276, 0x1f75, 0x22ef, 0x2022, +0x22ef, 0x2022, 0x2298, 0x2001, 0x2298, 0x2001, 0x2298, 0x2001, 0x2184, 0x1f24, 0x2184, +0x1f24, 0x2095, 0x1e6e, 0x2095, 0x1e6e, 0x2031, 0x1e40, 0x2031, 0x1e40, 0x1f90, 0x1dd3, +0x1f90, 0x1dd3, 0x1e4f, 0x1cc1, 0x1e4f, 0x1cc1, 0x1e1d, 0x1cb9, 0x1e1d, 0x1cb9, 0x1e1d, +0x1cb9, 0x1bec, 0x1aac, 0x1bec, 0x1aac, 0x1af7, 0x19d5, 0x1af7, 0x19d5, 0x1a0f, 0x1904, +0x1a0f, 0x1904, 0x1758, 0x165d, 0x1758, 0x165d, 0x144a, 0x1358, 0x144a, 0x1358, 0x11c7, +0x10d8, 0x11c7, 0x10d8, 0x11c7, 0x10d8, 0xf8d, 0xe9c, 0xf8d, 0xe9c, 0xf14, 0xe1e, +0xf14, 0xe1e, 0xe42, 0xd42, 0xe42, 0xd42, 0xd88, 0xc7d, 0xd88, 0xc7d, 0xceb, +0xbd3, 0xceb, 0xbd3, 0xceb, 0xbd3, 0xc42, 0xb1f, 0xc42, 0xb1f, 0xad2, 0x9a4, +0xad2, 0x9a4, 0x933, 0x7ff, 0x933, 0x7ff, 0x80a, 0x6d3, 0x80a, 0x6d3, 0x5a4, +0x46f, 0x5a4, 0x46f, 0x543, 0x415, 0x543, 0x415, 0x543, 0x415, 0x3f9, 0x2d9, +0x3f9, 0x2d9, 0x209, 0xfc, 0x209, 0xfc, 0xfa, 0x7, 0xfa, 0x7, 0xfeef, +0xfe1c, 0xfeef, 0xfe1c, 0xfbde, 0xfb32, 0xfbde, 0xfb32, 0xfaf6, 0xfa75, 0xfaf6, 0xfa75, +0xfaf6, 0xfa75, 0xf899, 0xf849, 0xf899, 0xf849, 0xf5cc, 0xf5b0, 0xf5cc, 0xf5b0, 0xf480, +0xf49a, 0xf480, 0xf49a, 0xf348, 0xf39a, 0xf348, 0xf39a, 0xf165, 0xf1f0, 0xf165, 0xf1f0, +0xf165, 0xf1f0, 0xf06f, 0xf132, 0xf06f, 0xf132, 0xefbc, 0xf0b6, 0xefbc, 0xf0b6, 0xedb9, +0xeee6, 0xedb9, 0xeee6, 0xedbd, 0xef18, 0xedbd, 0xef18, 0xeccb, 0xee50, 0xeccb, 0xee50, +0xeaf6, 0xec9e, 0xeaf6, 0xec9e, 0xeaf6, 0xec9e, 0xea1c, 0xebdf, 0xea1c, 0xebdf, 0xe9c0, +0xeb98, 0xe9c0, 0xeb98, 0xe889, 0xea6d, 0xe889, 0xea6d, 0xe948, 0xeb30, 0xe948, 0xeb30, +0xe992, 0xeb74, 0xe992, 0xeb74, 0xea5d, 0xec31, 0xea5d, 0xec31, 0xea5d, 0xec31, 0xeb70, +0xed2e, 0xeb70, 0xed2e, 0xec3c, 0xeddd, 0xec3c, 0xeddd, 0xed6c, 0xeee9, 0xed6c, 0xeee9, +0xeec2, 0xf015, 0xeec2, 0xf015, 0xf074, 0xf198, 0xf074, 0xf198, 0xf074, 0xf198, 0xf1fe, +0xf2f0, 0xf1fe, 0xf2f0, 0xf504, 0xf5c1, 0xf504, 0xf5c1, 0xf744, 0xf7cb, 0xf744, 0xf7cb, +0xf9bb, 0xfa0d, 0xf9bb, 0xfa0d, 0xfb75, 0xfb93, 0xfb75, 0xfb93, 0xfdb3, 0xfda2, 0xfdb3, +0xfda2, 0xfdb3, 0xfda2, 0x6e, 0x32, 0x6e, 0x32, 0x370, 0x30e, 0x370, 0x30e, +0x481, 0x3ff, 0x481, 0x3ff, 0x5c6, 0x52c, 0x5c6, 0x52c, 0x749, 0x69f, 0x749, +0x69f, 0x749, 0x69f, 0x798, 0x6e6, 0x798, 0x6e6, 0x8af, 0x7fd, 0x8af, 0x7fd, +0x9ab, 0x902, 0x9ab, 0x902, 0x99b, 0x903, 0x99b, 0x903, 0x94c, 0x8cc, 0x94c, +0x8cc, 0x919, 0x8b8, 0x919, 0x8b8, 0x919, 0x8b8, 0x860, 0x823, 0x860, 0x823, +0x952, 0x93e, 0x952, 0x93e, 0x950, 0x969, 0x950, 0x969, 0x893, 0x8dc, 0x893, +0x8dc, 0x7eb, 0x865, 0x7eb, 0x865, 0x7d4, 0x881, 0x7d4, 0x881, 0x7d4, 0x881, +0x684, 0x762, 0x684, 0x762, 0x53d, 0x64d, 0x53d, 0x64d, 0x349, 0x488, 0x349, +0x488, 0x12c, 0x299, 0x12c, 0x299, 0x34, 0x1cd, 0x34, 0x1cd, 0x34, 0x1cd, +0xfed9, 0x9c, 0xfed9, 0x9c, 0xfd04, 0xfeef, 0xfd04, 0xfeef, 0xfc30, 0xfe41, 0xfc30, +0xfe41, 0xfb29, 0xfd5f, 0xfb29, 0xfd5f, 0xf8bb, 0xfb15, 0xf8bb, 0xfb15, 0xf884, 0xfb03, +0xf884, 0xfb03, 0xf884, 0xfb03, 0xf6c9, 0xf96c, 0xf6c9, 0xf96c, 0xf4c9, 0xf792, 0xf4c9, +0xf792, 0xf43c, 0xf72b, 0xf43c, 0xf72b, 0xf35a, 0xf670, 0xf35a, 0xf670, 0xf134, 0xf472, +0xf134, 0xf472, 0xf030, 0xf399, 0xf030, 0xf399, 0xf030, 0xf399, 0xeecc, 0xf25f, 0xeecc, +0xf25f, 0xeccd, 0xf08b, 0xeccd, 0xf08b, 0xebd5, 0xefbe, 0xebd5, 0xefbe, 0xeaa9, 0xeebc, +0xeaa9, 0xeebc, 0xe82e, 0xec69, 0xe82e, 0xec69, 0xe82e, 0xec69, 0xe72f, 0xeb8e, 0xe72f, +0xeb8e, 0xe612, 0xea91, 0xe612, 0xea91, 0xe2f4, 0xe78e, 0xe2f4, 0xe78e, 0xe1db, 0xe68a, +0xe1db, 0xe68a, 0xe043, 0xe4ff, 0xe043, 0xe4ff, 0xdfa6, 0xe468, 0xdfa6, 0xe468, 0xdfa6, +0xe468, 0xdf43, 0xe402, 0xdf43, 0xe402, 0xdf10, 0xe3c4, 0xdf10, 0xe3c4, 0xdee5, 0xe386, +0xdee5, 0xe386, 0xdf90, 0xe416, 0xdf90, 0xe416, 0xdfa5, 0xe409, 0xdfa5, 0xe409, 0xdf86, +0xe3c0, 0xdf86, 0xe3c0, 0xdf86, 0xe3c0, 0xdf92, 0xe39e, 0xdf92, 0xe39e, 0xdfce, 0xe3a7, +0xdfce, 0xe3a7, 0xe090, 0xe434, 0xe090, 0xe434, 0xe114, 0xe481, 0xe114, 0xe481, 0xe211, +0xe548, 0xe211, 0xe548, 0xe211, 0xe548, 0xe2d6, 0xe5d9, 0xe2d6, 0xe5d9, 0xe441, 0xe713, +0xe441, 0xe713, 0xe409, 0xe6ae, 0xe409, 0xe6ae, 0xe522, 0xe79f, 0xe522, 0xe79f, 0xe621, +0xe87b, 0xe621, 0xe87b, 0xe660, 0xe89d, 0xe660, 0xe89d, 0xe660, 0xe89d, 0xe78b, 0xe9b2, +0xe78b, 0xe9b2, 0xe82e, 0xea44, 0xe82e, 0xea44, 0xe7e1, 0xe9ea, 0xe7e1, 0xe9ea, 0xe93e, +0xeb3f, 0xe93e, 0xeb3f, 0xeaba, 0xecb4, 0xeaba, 0xecb4, 0xeb9a, 0xed8f, 0xeb9a, 0xed8f, +0xeb9a, 0xed8f, 0xeca8, 0xee99, 0xeca8, 0xee99, 0xed56, 0xef40, 0xed56, 0xef40, 0xedb7, +0xef98, 0xedb7, 0xef98, 0xee05, 0xefd8, 0xee05, 0xefd8, 0xef12, 0xf0d2, 0xef12, 0xf0d2, +0xef12, 0xf0d2, 0xeef8, 0xf09f, 0xeef8, 0xf09f, 0xf079, 0xf201, 0xf079, 0xf201, 0xf1ac, +0xf30d, 0xf1ac, 0xf30d, 0xf2c0, 0xf3f5, 0xf2c0, 0xf3f5, 0xf509, 0xf60b, 0xf509, 0xf60b, +0xf765, 0xf82f, 0xf765, 0xf82f, 0xf765, 0xf82f, 0xf949, 0xf9d8, 0xf949, 0xf9d8, 0xfc0b, +0xfc5c, 0xfc0b, 0xfc5c, 0xfe30, 0xfe40, 0xfe30, 0xfe40, 0x66, 0x37, 0x66, 0x37, +0x350, 0x2e4, 0x350, 0x2e4, 0x51d, 0x478, 0x51d, 0x478, 0x51d, 0x478, 0x62f, +0x556, 0x62f, 0x556, 0x766, 0x65f, 0x766, 0x65f, 0x950, 0x823, 0x950, 0x823, +0xa81, 0x936, 0xa81, 0x936, 0xd08, 0xba6, 0xd08, 0xba6, 0xd08, 0xba6, 0xe9a, +0xd2b, 0xe9a, 0xd2b, 0xf75, 0xdff, 0xf75, 0xdff, 0x114c, 0xfd6, 0x114c, 0xfd6, +0x12b7, 0x1149, 0x12b7, 0x1149, 0x124d, 0x10ea, 0x124d, 0x10ea, 0x133b, 0x11e8, 0x133b, +0x11e8, 0x133b, 0x11e8, 0x136b, 0x1228, 0x136b, 0x1228, 0x134c, 0x121b, 0x134c, 0x121b, +0x13ca, 0x12a8, 0x13ca, 0x12a8, 0x1368, 0x1254, 0x1368, 0x1254, 0x1322, 0x121a, 0x1322, +0x121a, 0x1280, 0x117e, 0x1280, 0x117e, 0x1280, 0x117e, 0x1261, 0x1162, 0x1261, 0x1162, +0x11c9, 0x10c9, 0x11c9, 0x10c9, 0x1215, 0x110f, 0x1215, 0x110f, 0x11a5, 0x1097, 0x11a5, +0x1097, 0x1157, 0x103e, 0x1157, 0x103e, 0x1157, 0x103e, 0x10e7, 0xfc1, 0x10e7, 0xfc1, +0x10b7, 0xf86, 0x10b7, 0xf86, 0x1038, 0xefd, 0x1038, 0xefd, 0xfe6, 0xea5, 0xfe6, +0xea5, 0xf4d, 0xe0b, 0xf4d, 0xe0b, 0xee7, 0xdaa, 0xee7, 0xdaa, 0xee7, 0xdaa, +0xe15, 0xce4, 0xe15, 0xce4, 0xca2, 0xb86, 0xca2, 0xb86, 0xcae, 0xbaf, 0xcae, +0xbaf, 0xbcb, 0xaf2, 0xbcb, 0xaf2, 0xa2d, 0x981, 0xa2d, 0x981, 0x8d3, 0x85d, +0x8d3, 0x85d, 0x8d3, 0x85d, 0x852, 0x816, 0x852, 0x816, 0x69a, 0x69c, 0x69a, +0x69c, 0x570, 0x5b2, 0x570, 0x5b2, 0x399, 0x41b, 0x399, 0x41b, 0x1e2, 0x2a2, +0x1e2, 0x2a2, 0x1e2, 0x2a2, 0xfb, 0x1f3, 0xfb, 0x1f3, 0x11, 0x13b, 0x11, +0x13b, 0xfebd, 0xe, 0xfebd, 0xe, 0xfe07, 0xff75, 0xfe07, 0xff75, 0xfd36, 0xfeb4, +0xfd36, 0xfeb4, 0xfae1, 0xfc63, 0xfae1, 0xfc63, 0xfae1, 0xfc63, 0xf952, 0xfaca, 0xf952, +0xfaca, 0xf892, 0xf9f2, 0xf892, 0xf9f2, 0xf8ac, 0xf9e9, 0xf8ac, 0xf9e9, 0xf96b, 0xfa78, +0xf96b, 0xfa78, 0xfa3b, 0xfb10, 0xfa3b, 0xfb10, 0xfadf, 0xfb74, 0xfadf, 0xfb74, 0xfadf, +0xfb74, 0xfd06, 0xfd57, 0xfd06, 0xfd57, 0xfe65, 0xfe70, 0xfe65, 0xfe70, 0xfff6, 0xffbc, +0xfff6, 0xffbc, 0xf3, 0x78, 0xf3, 0x78, 0x101, 0x4c, 0x101, 0x4c, 0x101, +0x4c, 0xdc, 0xfff6, 0xdc, 0xfff6, 0x15e, 0x52, 0x15e, 0x52, 0x1f7, 0xd2, +0x1f7, 0xd2, 0x1fd, 0xcd, 0x1fd, 0xcd, 0x23d, 0x111, 0x23d, 0x111, 0x2da, +0x1c0, 0x2da, 0x1c0, 0x2da, 0x1c0, 0x319, 0x21f, 0x319, 0x21f, 0x2cd, 0x1ff, +0x2cd, 0x1ff, 0x237, 0x19f, 0x237, 0x19f, 0x4d, 0xfff4, 0x4d, 0xfff4, 0xffb6, +0xffa3, 0xffb6, 0xffa3, 0xffb6, 0xffa3, 0xfd95, 0xfdc9, 0xfd95, 0xfdc9, 0xfbfa, 0xfc75, +0xfbfa, 0xfc75, 0xfb5b, 0xfc1c, 0xfb5b, 0xfc1c, 0xfac9, 0xfbc8, 0xfac9, 0xfbc8, 0xfa39, +0xfb6e, 0xfa39, 0xfb6e, 0xf9cb, 0xfb2c, 0xf9cb, 0xfb2c, 0xf9cb, 0xfb2c, 0xf975, 0xfaf5, +0xf975, 0xfaf5, 0xf916, 0xfaa8, 0xf916, 0xfaa8, 0xf8c7, 0xfa5d, 0xf8c7, 0xfa5d, 0xf839, +0xf9c4, 0xf839, 0xf9c4, 0xf7f3, 0xf965, 0xf7f3, 0xf965, 0xf872, 0xf9be, 0xf872, 0xf9be, +0xf872, 0xf9be, 0xf9b8, 0xfad2, 0xf9b8, 0xfad2, 0xf9ae, 0xfa8d, 0xf9ae, 0xfa8d, 0xfa6a, +0xfb06, 0xfa6a, 0xfb06, 0xfa82, 0xfad6, 0xfa82, 0xfad6, 0xfbd8, 0xfbe0, 0xfbd8, 0xfbe0, +0xfbd8, 0xfbe0, 0xfce5, 0xfca1, 0xfce5, 0xfca1, 0xfd4f, 0xfcc1, 0xfd4f, 0xfcc1, 0xfebb, +0xfde7, 0xfebb, 0xfde7, 0x36, 0xff22, 0x36, 0xff22, 0xb9, 0xff6c, 0xb9, 0xff6c, +0x187, 0x7, 0x187, 0x7, 0x187, 0x7, 0x255, 0xad, 0x255, 0xad, 0x33e, +0x176, 0x33e, 0x176, 0x4f9, 0x319, 0x4f9, 0x319, 0x577, 0x386, 0x577, 0x386, +0x618, 0x41c, 0x618, 0x41c, 0x663, 0x463, 0x663, 0x463, 0x663, 0x463, 0x7d3, +0x5d0, 0x7d3, 0x5d0, 0x83f, 0x63c, 0x83f, 0x63c, 0x8ef, 0x6eb, 0x8ef, 0x6eb, +0x974, 0x76e, 0x974, 0x76e, 0x9c0, 0x7b5, 0x9c0, 0x7b5, 0x9c0, 0x7b5, 0xaf4, +0x8df, 0xaf4, 0x8df, 0xb74, 0x94f, 0xb74, 0x94f, 0xbf6, 0x9bc, 0xbf6, 0x9bc, +0xd1f, 0xac9, 0xd1f, 0xac9, 0xdb6, 0xb3e, 0xdb6, 0xb3e, 0xf42, 0xca2, 0xf42, +0xca2, 0xf42, 0xca2, 0x1158, 0xe8b, 0x1158, 0xe8b, 0x1286, 0xf88, 0x1286, 0xf88, +0x1454, 0x1123, 0x1454, 0x1123, 0x1543, 0x11de, 0x1543, 0x11de, 0x162b, 0x1293, 0x162b, +0x1293, 0x16f2, 0x1329, 0x16f2, 0x1329, 0x16f2, 0x1329, 0x18dc, 0x14e7, 0x18dc, 0x14e7, +0x1a5d, 0x1641, 0x1a5d, 0x1641, 0x1b0f, 0x16d4, 0x1b0f, 0x16d4, 0x1b4d, 0x16fa, 0x1b4d, +0x16fa, 0x1b99, 0x1738, 0x1b99, 0x1738, 0x1b99, 0x1738, 0x1c21, 0x17bb, 0x1c21, 0x17bb, +0x1d78, 0x1918, 0x1d78, 0x1918, 0x1d75, 0x1924, 0x1d75, 0x1924, 0x1d0f, 0x18d5, 0x1d0f, +0x18d5, 0x1d38, 0x191f, 0x1d38, 0x191f, 0x1cd9, 0x18e9, 0x1cd9, 0x18e9, 0x1cd9, 0x18e9, +0x1ce5, 0x1923, 0x1ce5, 0x1923, 0x1b88, 0x17f8, 0x1b88, 0x17f8, 0x1b81, 0x1828, 0x1b81, +0x1828, 0x1b5d, 0x183c, 0x1b5d, 0x183c, 0x1b00, 0x1816, 0x1b00, 0x1816, 0x1a9c, 0x17e8, +0x1a9c, 0x17e8, 0x1a9c, 0x17e8, 0x1a7b, 0x17fb, 0x1a7b, 0x17fb, 0x19dd, 0x178d, 0x19dd, +0x178d, 0x1842, 0x161c, 0x1842, 0x161c, 0x155e, 0x135d, 0x155e, 0x135d, 0x1346, 0x1165, +0x1346, 0x1165, 0x1346, 0x1165, 0x11db, 0x1013, 0x11db, 0x1013, 0x106a, 0xeb5, 0x106a, +0xeb5, 0xf70, 0xdc8, 0xf70, 0xdc8, 0xea2, 0xd02, 0xea2, 0xd02, 0xead, 0xd10, +0xead, 0xd10, 0xe10, 0xc73, 0xe10, 0xc73, 0xe10, 0xc73, 0xdce, 0xc2f, 0xdce, +0xc2f, 0xcb1, 0xb0e, 0xcb1, 0xb0e, 0xbbd, 0xa16, 0xbbd, 0xa16, 0xa8a, 0x8df, +0xa8a, 0x8df, 0x9b4, 0x809, 0x9b4, 0x809, 0x866, 0x6bc, 0x866, 0x6bc, 0x866, +0x6bc, 0x6ea, 0x546, 0x6ea, 0x546, 0x4d3, 0x339, 0x4d3, 0x339, 0x34a, 0x1c0, +0x34a, 0x1c0, 0x215, 0xa1, 0x215, 0xa1, 0x64, 0xff0a, 0x64, 0xff0a, 0x64, +0xff0a, 0xff2e, 0xfdf5, 0xff2e, 0xfdf5, 0xfd83, 0xfc70, 0xfd83, 0xfc70, 0xfbe6, 0xfafe, +0xfbe6, 0xfafe, 0xf965, 0xf8ae, 0xf965, 0xf8ae, 0xf7b2, 0xf72d, 0xf7b2, 0xf72d, 0xf64f, +0xf601, 0xf64f, 0xf601, 0xf64f, 0xf601, 0xf561, 0xf54c, 0xf561, 0xf54c, 0xf440, 0xf464, +0xf440, 0xf464, 0xf31e, 0xf379, 0xf31e, 0xf379, 0xf198, 0xf22a, 0xf198, 0xf22a, 0xf113, +0xf1d9, 0xf113, 0xf1d9, 0xf020, 0xf115, 0xf020, 0xf115, 0xf020, 0xf115, 0xee79, 0xef99, +0xee79, 0xef99, 0xed67, 0xeeaa, 0xed67, 0xeeaa, 0xeca2, 0xee02, 0xeca2, 0xee02, 0xec35, +0xeda9, 0xec35, 0xeda9, 0xec0d, 0xed8f, 0xec0d, 0xed8f, 0xec0d, 0xed8f, 0xec3f, 0xedc4, +0xec3f, 0xedc4, 0xec2c, 0xedab, 0xec2c, 0xedab, 0xecb4, 0xee25, 0xecb4, 0xee25, 0xed9b, +0xeef5, 0xed9b, 0xeef5, 0xef37, 0xf073, 0xef37, 0xf073, 0xf052, 0xf168, 0xf052, 0xf168, +0xf052, 0xf168, 0xf233, 0xf31c, 0xf233, 0xf31c, 0xf38d, 0xf446, 0xf38d, 0xf446, 0xf4ff, +0xf583, 0xf4ff, 0xf583, 0xf6ce, 0xf71b, 0xf6ce, 0xf71b, 0xf988, 0xf99c, 0xf988, 0xf99c, +0xfc1f, 0xfbfc, 0xfc1f, 0xfbfc, 0xfc1f, 0xfbfc, 0xfe0e, 0xfdb6, 0xfe0e, 0xfdb6, 0x7a, +0xfff0, 0x7a, 0xfff0, 0x2b5, 0x1ff, 0x2b5, 0x1ff, 0x42e, 0x351, 0x42e, 0x351, +0x60f, 0x512, 0x60f, 0x512, 0x60f, 0x512, 0x7c4, 0x6b0, 0x7c4, 0x6b0, 0x7e4, +0x6c1, 0x7e4, 0x6c1, 0x926, 0x7fc, 0x926, 0x7fc, 0x92f, 0x808, 0x92f, 0x808, +0x99c, 0x87f, 0x99c, 0x87f, 0xa03, 0x8f9, 0xa03, 0x8f9, 0xa03, 0x8f9, 0xa5f, +0x971, 0xa5f, 0x971, 0xa74, 0x9a7, 0xa74, 0x9a7, 0xaa2, 0x9fc, 0xaa2, 0x9fc, +0xad2, 0xa59, 0xad2, 0xa59, 0xa89, 0xa3f, 0xa89, 0xa3f, 0xa22, 0xa0a, 0xa22, +0xa0a, 0xa22, 0xa0a, 0x945, 0x962, 0x945, 0x962, 0x7e7, 0x838, 0x7e7, 0x838, +0x5ee, 0x674, 0x5ee, 0x674, 0x42e, 0x4e6, 0x42e, 0x4e6, 0x298, 0x383, 0x298, +0x383, 0x298, 0x383, 0x201, 0x31c, 0x201, 0x31c, 0xff9c, 0xe4, 0xff9c, 0xe4, +0xfdde, 0xff53, 0xfdde, 0xff53, 0xfcb2, 0xfe51, 0xfcb2, 0xfe51, 0xfaf6, 0xfcbe, 0xfaf6, +0xfcbe, 0xf9ad, 0xfb9c, 0xf9ad, 0xfb9c, 0xf9ad, 0xfb9c, 0xf8f9, 0xfb10, 0xf8f9, 0xfb10, +0xf78e, 0xf9cc, 0xf78e, 0xf9cc, 0xf632, 0xf898, 0xf632, 0xf898, 0xf4c3, 0xf752, 0xf4c3, +0xf752, 0xf2dd, 0xf595, 0xf2dd, 0xf595, 0xf2dd, 0xf595, 0xf132, 0xf416, 0xf132, 0xf416, +0xefa2, 0xf2b2, 0xefa2, 0xf2b2, 0xedc3, 0xf101, 0xedc3, 0xf101, 0xebfb, 0xef68, 0xebfb, +0xef68, 0xebdb, 0xef77, 0xebdb, 0xef77, 0xea38, 0xee01, 0xea38, 0xee01, 0xea38, 0xee01, +0xe8a0, 0xec96, 0xe8a0, 0xec96, 0xe684, 0xeaa5, 0xe684, 0xeaa5, 0xe3fc, 0xe844, 0xe3fc, +0xe844, 0xe211, 0xe67c, 0xe211, 0xe67c, 0xe0cb, 0xe554, 0xe0cb, 0xe554, 0xdf3f, 0xe3df, +0xdf3f, 0xe3df, 0xdf3f, 0xe3df, 0xddd5, 0xe286, 0xddd5, 0xe286, 0xdd2e, 0xe1e7, 0xdd2e, +0xe1e7, 0xdd5a, 0xe214, 0xdd5a, 0xe214, 0xdda3, 0xe256, 0xdda3, 0xe256, 0xdd6b, 0xe20f, +0xdd6b, 0xe20f, 0xdd6b, 0xe20f, 0xdd28, 0xe1b5, 0xdd28, 0xe1b5, 0xdcbd, 0xe12c, 0xdcbd, +0xe12c, 0xdd49, 0xe194, 0xdd49, 0xe194, 0xdd5a, 0xe17c, 0xdd5a, 0xe17c, 0xde4f, 0xe244, +0xde4f, 0xe244, 0xdea8, 0xe26e, 0xdea8, 0xe26e, 0xdea8, 0xe26e, 0xdf16, 0xe2ab, 0xdf16, +0xe2ab, 0xe174, 0xe4d8, 0xe174, 0xe4d8, 0xe31f, 0xe654, 0xe31f, 0xe654, 0xe38b, 0xe693, +0xe38b, 0xe693, 0xe583, 0xe862, 0xe583, 0xe862, 0xe654, 0xe90e, 0xe654, 0xe90e, 0xe654, +0xe90e, 0xe6c8, 0xe960, 0xe6c8, 0xe960, 0xe84d, 0xeac8, 0xe84d, 0xeac8, 0xe9a2, 0xec05, +0xe9a2, 0xec05, 0xeb42, 0xed91, 0xeb42, 0xed91, 0xed55, 0xef94, 0xed55, 0xef94, 0xed55, +0xef94, 0xeecd, 0xf0fd, 0xeecd, 0xf0fd, 0xeed9, 0xf0fc, 0xeed9, 0xf0fc, 0xf0c3, 0xf2d9, +0xf0c3, 0xf2d9, 0xf175, 0xf37d, 0xf175, 0xf37d, 0xf17a, 0xf372, 0xf17a, 0xf372, 0xf20e, +0xf3f2, 0xf20e, 0xf3f2, 0xf20e, 0xf3f2, 0xf2f5, 0xf4c1, 0xf2f5, 0xf4c1, 0xf3ec, 0xf59b, +0xf3ec, 0xf59b, 0xf52c, 0xf6b7, 0xf52c, 0xf6b7, 0xf5cf, 0xf732, 0xf5cf, 0xf732, 0xf781, +0xf8b6, 0xf781, 0xf8b6, 0xf9e1, 0xfae2, 0xf9e1, 0xfae2, 0xf9e1, 0xfae2, 0xfaa6, 0xfb6e, +0xfaa6, 0xfb6e, 0xfcda, 0xfd65, 0xfcda, 0xfd65, 0xff40, 0xff8c, 0xff40, 0xff8c, 0xef, +0xfb, 0xef, 0xfb, 0x334, 0x2fe, 0x334, 0x2fe, 0x334, 0x2fe, 0x585, 0x511, +0x585, 0x511, 0x5ef, 0x53e, 0x5ef, 0x53e, 0x74a, 0x662, 0x74a, 0x662, 0x97c, +0x861, 0x97c, 0x861, 0xad4, 0x98e, 0xad4, 0x98e, 0xc97, 0xb2d, 0xc97, 0xb2d, +0xc97, 0xb2d, 0xee1, 0xd5c, 0xee1, 0xd5c, 0xf2d, 0xd95, 0xf2d, 0xd95, 0x1065, +0xec2, 0x1065, 0xec2, 0x11fb, 0x1055, 0x11fb, 0x1055, 0x11d9, 0x1037, 0x11d9, 0x1037, +0x12c2, 0x112a, 0x12c2, 0x112a, 0x12c2, 0x112a, 0x1350, 0x11c7, 0x1350, 0x11c7, 0x12c2, +0x114c, 0x12c2, 0x114c, 0x1255, 0x10f5, 0x1255, 0x10f5, 0x11fb, 0x10b2, 0x11fb, 0x10b2, +0x10a9, 0xf78, 0x10a9, 0xf78, 0x10a9, 0xf78, 0x101d, 0xf02, 0x101d, 0xf02, 0xf49, +0xe43, 0xf49, 0xe43, 0xef8, 0xe03, 0xef8, 0xe03, 0xf0e, 0xe29, 0xf0e, 0xe29, +0xf02, 0xe28, 0xf02, 0xe28, 0xe1a, 0xd49, 0xe1a, 0xd49, 0xe1a, 0xd49, 0xd2a, +0xc60, 0xd2a, 0xc60, 0xc9a, 0xbd5, 0xc9a, 0xbd5, 0xc23, 0xb61, 0xc23, 0xb61, +0xc3c, 0xb7e, 0xc3c, 0xb7e, 0xaf4, 0xa3b, 0xaf4, 0xa3b, 0x9b7, 0x906, 0x9b7, +0x906, 0x9b7, 0x906, 0x9e8, 0x941, 0x9e8, 0x941, 0x95e, 0x8c6, 0x95e, 0x8c6, +0x82f, 0x7aa, 0x82f, 0x7aa, 0x88f, 0x822, 0x88f, 0x822, 0x7b5, 0x766, 0x7b5, +0x766, 0x7b5, 0x766, 0x724, 0x6f8, 0x724, 0x6f8, 0x74d, 0x748, 0x74d, 0x748, +0x612, 0x638, 0x612, 0x638, 0x47a, 0x4ce, 0x47a, 0x4ce, 0x3f5, 0x479, 0x3f5, +0x479, 0x28e, 0x341, 0x28e, 0x341, 0x28e, 0x341, 0x119, 0x1fa, 0x119, 0x1fa, +0x122, 0x22d, 0x122, 0x22d, 0x75, 0x1a6, 0x75, 0x1a6, 0xfeb0, 0, 0xfeb0, +0, 0xfd89, 0xfef0, 0xfd89, 0xfef0, 0xfc69, 0xfddd, 0xfc69, 0xfddd, 0xfc69, 0xfddd, +0xfacf, 0xfc46, 0xfacf, 0xfc46, 0xfaf5, 0xfc66, 0xfaf5, 0xfc66, 0xf9f7, 0xfb56, 0xf9f7, +0xfb56, 0xf9c4, 0xfb07, 0xf9c4, 0xfb07, 0xfa7e, 0xfb9c, 0xfa7e, 0xfb9c, 0xfa7e, 0xfb9c, +0xfad2, 0xfbc4, 0xfad2, 0xfbc4, 0xfc56, 0xfd14, 0xfc56, 0xfd14, 0xfde2, 0xfe68, 0xfde2, +0xfe68, 0xfe1d, 0xfe67, 0xfe1d, 0xfe67, 0xff52, 0xff60, 0xff52, 0xff60, 0xe8, 0xbc, +0xe8, 0xbc, 0xe8, 0xbc, 0xed, 0x8b, 0xed, 0x8b, 0x191, 0xfe, 0x191, +0xfe, 0x207, 0x149, 0x207, 0x149, 0x1a4, 0xc6, 0x1a4, 0xc6, 0x260, 0x16b, +0x260, 0x16b, 0x398, 0x298, 0x398, 0x298, 0x398, 0x298, 0x28d, 0x18c, 0x28d, +0x18c, 0x2cf, 0x1d9, 0x2cf, 0x1d9, 0x334, 0x253, 0x334, 0x253, 0x15d, 0x9b, +0x15d, 0x9b, 0x23, 0xff88, 0x23, 0xff88, 0x23, 0xff88, 0xff92, 0xff25, 0xff92, +0xff25, 0xfddb, 0xfda0, 0xfddb, 0xfda0, 0xfd02, 0xfcfc, 0xfd02, 0xfcfc, 0xfcae, 0xfcde, +0xfcae, 0xfcde, 0xfb32, 0xfb96, 0xfb32, 0xfb96, 0xfa55, 0xfae9, 0xfa55, 0xfae9, 0xfa55, +0xfae9, 0xf98f, 0xfa4e, 0xf98f, 0xfa4e, 0xf898, 0xf97c, 0xf898, 0xf97c, 0xf838, 0xf939, +0xf838, 0xf939, 0xf7f1, 0xf905, 0xf7f1, 0xf905, 0xf744, 0xf863, 0xf744, 0xf863, 0xf78a, +0xf8aa, 0xf78a, 0xf8aa, 0xf78a, 0xf8aa, 0xf75f, 0xf876, 0xf75f, 0xf876, 0xf765, 0xf86a, +0xf765, 0xf86a, 0xf811, 0xf8fd, 0xf811, 0xf8fd, 0xf80b, 0xf8d7, 0xf80b, 0xf8d7, 0xf839, +0xf8df, 0xf839, 0xf8df, 0xf839, 0xf8df, 0xfa47, 0xfac4, 0xfa47, 0xfac4, 0xfb85, 0xfbd6, +0xfb85, 0xfbd6, 0xfc43, 0xfc67, 0xfc43, 0xfc67, 0xfe21, 0xfe19, 0xfe21, 0xfe19, 0xfebd, +0xfe8a, 0xfebd, 0xfe8a, 0xffc9, 0xff6f, 0xffc9, 0xff6f, 0xffc9, 0xff6f, 0x1bb, 0x13b, +0x1bb, 0x13b, 0x2cc, 0x22c, 0x2cc, 0x22c, 0x3b1, 0x2f5, 0x3b1, 0x2f5, 0x604, +0x52f, 0x604, 0x52f, 0x6d3, 0x5ea, 0x6d3, 0x5ea, 0x6d3, 0x5ea, 0x787, 0x68d, +0x787, 0x68d, 0x98e, 0x886, 0x98e, 0x886, 0x9e6, 0x8d1, 0x9e6, 0x8d1, 0x993, +0x872, 0x993, 0x872, 0xb35, 0xa07, 0xb35, 0xa07, 0xcad, 0xb71, 0xcad, 0xb71, +0xcad, 0xb71, 0xd33, 0xbe8, 0xd33, 0xbe8, 0xdc9, 0xc6b, 0xdc9, 0xc6b, 0xdac, +0xc36, 0xdac, 0xc36, 0xe38, 0xca8, 0xe38, 0xca8, 0xf85, 0xdd6, 0xf85, 0xdd6, +0x1048, 0xe75, 0x1048, 0xe75, 0x1048, 0xe75, 0x111b, 0xf21, 0x111b, 0xf21, 0x12f0, +0x10cb, 0x12f0, 0x10cb, 0x13a3, 0x1151, 0x13a3, 0x1151, 0x14fa, 0x1279, 0x14fa, 0x1279, +0x171d, 0x146c, 0x171d, 0x146c, 0x171d, 0x146c, 0x182f, 0x154f, 0x182f, 0x154f, 0x193d, +0x1630, 0x193d, 0x1630, 0x1a0d, 0x16d6, 0x1a0d, 0x16d6, 0x19c7, 0x1669, 0x19c7, 0x1669, +0x1acf, 0x1750, 0x1acf, 0x1750, 0x1bc1, 0x1826, 0x1bc1, 0x1826, 0x1bc1, 0x1826, 0x1adb, +0x1729, 0x1adb, 0x1729, 0x1ba0, 0x17df, 0x1ba0, 0x17df, 0x1c43, 0x187b, 0x1c43, 0x187b, +0x1bdd, 0x1814, 0x1bdd, 0x1814, 0x1c76, 0x18b2, 0x1c76, 0x18b2, 0x1d09, 0x1952, 0x1d09, +0x1952, 0x1d09, 0x1952, 0x1b75, 0x17ce, 0x1b75, 0x17ce, 0x1abb, 0x172b, 0x1abb, 0x172b, +0x1ad1, 0x175b, 0x1ad1, 0x175b, 0x19a2, 0x1648, 0x19a2, 0x1648, 0x1911, 0x15d6, 0x1911, +0x15d6, 0x1911, 0x15d6, 0x18f9, 0x15dd, 0x18f9, 0x15dd, 0x1813, 0x1516, 0x1813, 0x1516, +0x16fd, 0x141e, 0x16fd, 0x141e, 0x1586, 0x12c3, 0x1586, 0x12c3, 0x1305, 0x105c, 0x1305, +0x105c, 0x1117, 0xe84, 0x1117, 0xe84, 0x1117, 0xe84, 0xf9a, 0xd1b, 0xf9a, 0xd1b, +0xe14, 0xba5, 0xe14, 0xba5, 0xd51, 0xaf0, 0xd51, 0xaf0, 0xbfc, 0x9a5, 0xbfc, +0x9a5, 0xad2, 0x884, 0xad2, 0x884, 0xb90, 0x949, 0xb90, 0x949, 0xb90, 0x949, +0xaad, 0x86c, 0xaad, 0x86c, 0x9cd, 0x791, 0x9cd, 0x791, 0x9fb, 0x7c5, 0x9fb, +0x7c5, 0x9b8, 0x789, 0x9b8, 0x789, 0x961, 0x73c, 0x961, 0x73c, 0x961, 0x73c, +0x89e, 0x684, 0x89e, 0x684, 0x6e4, 0x4d9, 0x6e4, 0x4d9, 0x537, 0x33e, 0x537, +0x33e, 0x58a, 0x3a7, 0x58a, 0x3a7, 0x4c0, 0x2f8, 0x4c0, 0x2f8, 0x36d, 0x1c2, +0x36d, 0x1c2, 0x36d, 0x1c2, 0x38f, 0x207, 0x38f, 0x207, 0x1d5, 0x73, 0x1d5, +0x73, 0xff28, 0xfdee, 0xff28, 0xfdee, 0xfe78, 0xfd6a, 0xfe78, 0xfd6a, 0xfd41, 0xfc60, +0xfd41, 0xfc60, 0xfc12, 0xfb5f, 0xfc12, 0xfb5f, 0xfc12, 0xfb5f, 0xfb0f, 0xfa8a, 0xfb0f, +0xfa8a, 0xf931, 0xf8db, 0xf931, 0xf8db, 0xf801, 0xf7d8, 0xf801, 0xf7d8, 0xf74d, 0xf750, +0xf74d, 0xf750, 0xf5bf, 0xf5e9, 0xf5bf, 0xf5e9, 0xf5bf, 0xf5e9, 0xf3a1, 0xf3f0, 0xf3a1, +0xf3f0, 0xf220, 0xf28f, 0xf220, 0xf28f, 0xf134, 0xf1bf, 0xf134, 0xf1bf, 0xf113, 0xf1b4, +0xf113, 0xf1b4, 0xf0e6, 0xf198, 0xf0e6, 0xf198, 0xefb8, 0xf075, 0xefb8, 0xf075, 0xefb8, +0xf075, 0xee92, 0xef54, 0xee92, 0xef54, 0xef17, 0xefd9, 0xef17, 0xefd9, 0xef08, 0xefc4, +0xef08, 0xefc4, 0xef85, 0xf036, 0xef85, 0xf036, 0xf064, 0xf106, 0xf064, 0xf106, 0xf05d, +0xf0eb, 0xf05d, 0xf0eb, 0xf05d, 0xf0eb, 0xf1b8, 0xf22f, 0xf1b8, 0xf22f, 0xf330, 0xf38d, +0xf330, 0xf38d, 0xf447, 0xf487, 0xf447, 0xf487, 0xf69e, 0xf6c2, 0xf69e, 0xf6c2, 0xf8e4, +0xf8e9, 0xf8e4, 0xf8e9, 0xf8e4, 0xf8e9, 0xf9fa, 0xf9e1, 0xf9fa, 0xf9e1, 0xfc1c, 0xfbe5, +0xfc1c, 0xfbe5, 0xfe41, 0xfdee, 0xfe41, 0xfdee, 0xff53, 0xfee6, 0xff53, 0xfee6, 0xd6, +0x51, 0xd6, 0x51, 0x26b, 0x1d2, 0x26b, 0x1d2, 0x26b, 0x1d2, 0x2f2, 0x248, +0x2f2, 0x248, 0x451, 0x399, 0x451, 0x399, 0x5e9, 0x528, 0x5e9, 0x528, 0x64c, +0x586, 0x64c, 0x586, 0x654, 0x58c, 0x654, 0x58c, 0x670, 0x5ac, 0x670, 0x5ac, +0x670, 0x5ac, 0x6ed, 0x62f, 0x6ed, 0x62f, 0x793, 0x6e0, 0x793, 0x6e0, 0x765, +0x6c0, 0x765, 0x6c0, 0x73e, 0x6ab, 0x73e, 0x6ab, 0x7fb, 0x77d, 0x7fb, 0x77d, +0x7fb, 0x77d, 0x779, 0x713, 0x779, 0x713, 0x652, 0x608, 0x652, 0x608, 0x575, +0x549, 0x575, 0x549, 0x4f0, 0x4e6, 0x4f0, 0x4e6, 0x48d, 0x4a6, 0x48d, 0x4a6, +0x3e6, 0x426, 0x3e6, 0x426, 0x3e6, 0x426, 0x1de, 0x248, 0x1de, 0x248, 0x38, +0xce, 0x38, 0xce, 0x5, 0xca, 0x5, 0xca, 0xfe86, 0xff7c, 0xfe86, 0xff7c, +0xfcfc, 0xfe26, 0xfcfc, 0xfe26, 0xfcb2, 0xfe13, 0xfcb2, 0xfe13, 0xfcb2, 0xfe13, 0xfb40, +0xfcdb, 0xfb40, 0xfcdb, 0xf9c0, 0xfb97, 0xf9c0, 0xfb97, 0xf95e, 0xfb73, 0xf95e, 0xfb73, +0xf7a9, 0xf9fe, 0xf7a9, 0xf9fe, 0xf537, 0xf7ce, 0xf537, 0xf7ce, 0xf537, 0xf7ce, 0xf353, +0xf62c, 0xf353, 0xf62c, 0xf1ca, 0xf4e6, 0xf1ca, 0xf4e6, 0xf039, 0xf397, 0xf039, 0xf397, +0xef27, 0xf2c6, 0xef27, 0xf2c6, 0xed30, 0xf10e, 0xed30, 0xf10e, 0xeb83, 0xef9c, 0xeb83, +0xef9c, 0xeb83, 0xef9c, 0xea0c, 0xee5d, 0xea0c, 0xee5d, 0xe75d, 0xebe0, 0xe75d, 0xebe0, +0xe5cc, 0xea7c, 0xe5cc, 0xea7c, 0xe48e, 0xe964, 0xe48e, 0xe964, 0xe25f, 0xe753, 0xe25f, +0xe753, 0xe074, 0xe57d, 0xe074, 0xe57d, 0xe074, 0xe57d, 0xdf72, 0xe489, 0xdf72, 0xe489, +0xdea4, 0xe3bf, 0xdea4, 0xe3bf, 0xde25, 0xe33c, 0xde25, 0xe33c, 0xdce5, 0xe1ee, 0xdce5, +0xe1ee, 0xdb89, 0xe07d, 0xdb89, 0xe07d, 0xdb89, 0xe07d, 0xdc1c, 0xe0f2, 0xdc1c, 0xe0f2, +0xdd4f, 0xe200, 0xdd4f, 0xe200, 0xdd40, 0xe1c7, 0xdd40, 0xe1c7, 0xdd20, 0xe178, 0xdd20, +0xe178, 0xdd63, 0xe186, 0xdd63, 0xe186, 0xdd5c, 0xe148, 0xdd5c, 0xe148, 0xdd5c, 0xe148, +0xde02, 0xe1b6, 0xde02, 0xe1b6, 0xdf1c, 0xe297, 0xdf1c, 0xe297, 0xdfae, 0xe2f1, 0xdfae, +0xe2f1, 0xe0f6, 0xe403, 0xe0f6, 0xe403, 0xe254, 0xe52d, 0xe254, 0xe52d, 0xe254, 0xe52d, +0xe330, 0xe5d8, 0xe330, 0xe5d8, 0xe500, 0xe77a, 0xe500, 0xe77a, 0xe69d, 0xe8ec, 0xe69d, +0xe8ec, 0xe7dc, 0xea04, 0xe7dc, 0xea04, 0xe968, 0xeb6c, 0xe968, 0xeb6c, 0xeaed, 0xecd0, +0xeaed, 0xecd0, 0xeaed, 0xecd0, 0xec0e, 0xedd3, 0xec0e, 0xedd3, 0xedda, 0xef81, 0xedda, +0xef81, 0xeecd, 0xf057, 0xeecd, 0xf057, 0xef29, 0xf097, 0xef29, 0xf097, 0xf03e, 0xf18e, +0xf03e, 0xf18e, 0xf0b2, 0xf1e1, 0xf0b2, 0xf1e1, 0xf0b2, 0xf1e1, 0xf1e8, 0xf2f4, 0xf1e8, +0xf2f4, 0xf338, 0xf41e, 0xf338, 0xf41e, 0xf44c, 0xf508, 0xf44c, 0xf508, 0xf63b, 0xf6c8, +0xf63b, 0xf6c8, 0xf81b, 0xf876, 0xf81b, 0xf876, 0xf81b, 0xf876, 0xf9a2, 0xf9c8, 0xf9a2, +0xf9c8, 0xfb66, 0xfb52, 0xfb66, 0xfb52, 0xfdea, 0xfd9b, 0xfdea, 0xfd9b, 0xffe9, 0xff5c, +0xffe9, 0xff5c, 0x21d, 0x151, 0x21d, 0x151, 0x4f4, 0x3eb, 0x4f4, 0x3eb, 0x4f4, +0x3eb, 0x5cb, 0x485, 0x5cb, 0x485, 0x700, 0x580, 0x700, 0x580, 0x993, 0x7de, +0x993, 0x7de, 0xc01, 0xa1a, 0xc01, 0xa1a, 0xd85, 0xb74, 0xd85, 0xb74, 0xeb7, +0xc82, 0xeb7, 0xc82, 0xeb7, 0xc82, 0x103f, 0xdec, 0x103f, 0xdec, 0x11b2, 0xf4a, +0x11b2, 0xf4a, 0x1323, 0x10ad, 0x1323, 0x10ad, 0x1359, 0x10dc, 0x1359, 0x10dc, 0x13f0, +0x1174, 0x13f0, 0x1174, 0x13f0, 0x1174, 0x14fc, 0x1286, 0x14fc, 0x1286, 0x1524, 0x12ba, +0x1524, 0x12ba, 0x1502, 0x12a9, 0x1502, 0x12a9, 0x14a9, 0x1265, 0x14a9, 0x1265, 0x139a, +0x116c, 0x139a, 0x116c, 0x12f8, 0x10e1, 0x12f8, 0x10e1, 0x12f8, 0x10e1, 0x128d, 0x108e, +0x128d, 0x108e, 0x117a, 0xf92, 0x117a, 0xf92, 0x1129, 0xf57, 0x1129, 0xf57, 0x1026, +0xe68, 0x1026, 0xe68, 0xebd, 0xd10, 0xebd, 0xd10, 0xe6b, 0xccd, 0xe6b, 0xccd, +0xe6b, 0xccd, 0xe1b, 0xc89, 0xe1b, 0xc89, 0xdad, 0xc24, 0xdad, 0xc24, 0xce8, +0xb68, 0xce8, 0xb68, 0xbd6, 0xa5d, 0xbd6, 0xa5d, 0xada, 0x969, 0xada, 0x969, +0xada, 0x969, 0xa54, 0x8ea, 0xa54, 0x8ea, 0x9e3, 0x883, 0x9e3, 0x883, 0x874, +0x721, 0x874, 0x721, 0x71e, 0x5da, 0x71e, 0x5da, 0x708, 0x5d8, 0x708, 0x5d8, +0x6cb, 0x5b3, 0x6cb, 0x5b3, 0x6cb, 0x5b3, 0x5ff, 0x504, 0x5ff, 0x504, 0x550, +0x477, 0x550, 0x477, 0x447, 0x394, 0x447, 0x394, 0x3b6, 0x32d, 0x3b6, 0x32d, +0x2e5, 0x28a, 0x2e5, 0x28a, 0x1d3, 0x1a7, 0x1d3, 0x1a7, 0x1d3, 0x1a7, 0xca, +0xce, 0xca, 0xce, 0xff02, 0xff36, 0xff02, 0xff36, 0xfe31, 0xfe93, 0xfe31, 0xfe93, +0xfdad, 0xfe39, 0xfdad, 0xfe39, 0xfcb5, 0xfd67, 0xfcb5, 0xfd67, 0xfcb5, 0xfd67, 0xfb87, +0xfc59, 0xfb87, 0xfc59, 0xfa6b, 0xfb55, 0xfa6b, 0xfb55, 0xfa00, 0xfafa, 0xfa00, 0xfafa, +0xf93f, 0xfa40, 0xf93f, 0xfa40, 0xf897, 0xf997, 0xf897, 0xf997, 0xf8f1, 0xf9e6, 0xf8f1, +0xf9e6, 0xf8f1, 0xf9e6, 0xf9c5, 0xfaa7, 0xf9c5, 0xfaa7, 0xfa9a, 0xfb61, 0xfa9a, 0xfb61, +0xfb4a, 0xfbef, 0xfb4a, 0xfbef, 0xfce4, 0xfd62, 0xfce4, 0xfd62, 0xff0b, 0xff5e, 0xff0b, +0xff5e, 0xfff2, 0x18, 0xfff2, 0x18, 0xfff2, 0x18, 0x97, 0x8f, 0x97, 0x8f, +0x1e3, 0x1af, 0x1e3, 0x1af, 0x34b, 0x2ee, 0x34b, 0x2ee, 0x3d8, 0x357, 0x3d8, +0x357, 0x3bf, 0x321, 0x3bf, 0x321, 0x3bf, 0x321, 0x482, 0x3ce, 0x482, 0x3ce, +0x52a, 0x469, 0x52a, 0x469, 0x507, 0x441, 0x507, 0x441, 0x436, 0x375, 0x436, +0x375, 0x2d7, 0x222, 0x2d7, 0x222, 0x202, 0x163, 0x202, 0x163, 0x202, 0x163, +0x1dc, 0x15a, 0x1dc, 0x15a, 0x1ff, 0x1a0, 0x1ff, 0x1a0, 0x149, 0x112, 0x149, +0x112, 0xfffd, 0xfff1, 0xfffd, 0xfff1, 0xff29, 0xff49, 0xff29, 0xff49, 0xfea9, 0xfef6, +0xfea9, 0xfef6, 0xfea9, 0xfef6, 0xfd93, 0xfe0a, 0xfd93, 0xfe0a, 0xfbdc, 0xfc7a, 0xfbdc, +0xfc7a, 0xfae2, 0xfba2, 0xfae2, 0xfba2, 0xfa39, 0xfb17, 0xfa39, 0xfb17, 0xfa1a, 0xfb0e, +0xfa1a, 0xfb0e, 0xfa1a, 0xfb0e, 0xf96f, 0xfa73, 0xf96f, 0xfa73, 0xf85e, 0xf969, 0xf85e, +0xf969, 0xf898, 0xf9a3, 0xf898, 0xf9a3, 0xf8c3, 0xf9c9, 0xf8c3, 0xf9c9, 0xf8b6, 0xf9b0, +0xf8b6, 0xf9b0, 0xf8b2, 0xf99a, 0xf8b2, 0xf99a, 0xf8b2, 0xf99a, 0xf9a0, 0xfa71, 0xf9a0, +0xfa71, 0xfa4c, 0xfb04, 0xfa4c, 0xfb04, 0xfa51, 0xfaee, 0xfa51, 0xfaee, 0xfb2b, 0xfbab, +0xfb2b, 0xfbab, 0xfbd2, 0xfc36, 0xfbd2, 0xfc36, 0xfcd6, 0xfd1e, 0xfcd6, 0xfd1e, 0xfcd6, +0xfd1e, 0xfe09, 0xfe37, 0xfe09, 0xfe37, 0xff8d, 0xffa4, 0xff8d, 0xffa4, 0xfc, 0xfd, +0xfc, 0xfd, 0x248, 0x238, 0x248, 0x238, 0x3b9, 0x399, 0x3b9, 0x399, 0x3b9, +0x399, 0x3a1, 0x374, 0x3a1, 0x374, 0x40b, 0x3d1, 0x40b, 0x3d1, 0x5a7, 0x562, +0x5a7, 0x562, 0x721, 0x6d2, 0x721, 0x6d2, 0x836, 0x7dc, 0x836, 0x7dc, 0x8ad, +0x846, 0x8ad, 0x846, 0x8ad, 0x846, 0x94a, 0x8d3, 0x94a, 0x8d3, 0xa6a, 0x9e1, +0xa6a, 0x9e1, 0xb5e, 0xac0, 0xb5e, 0xac0, 0xc25, 0xb6e, 0xc25, 0xb6e, 0xd54, +0xc7e, 0xd54, 0xc7e, 0xeb9, 0xdc1, 0xeb9, 0xdc1, 0xeb9, 0xdc1, 0x1034, 0xf17, +0x1034, 0xf17, 0x1155, 0x100f, 0x1155, 0x100f, 0x12ea, 0x1178, 0x12ea, 0x1178, 0x14d8, +0x1338, 0x14d8, 0x1338, 0x165c, 0x148f, 0x165c, 0x148f, 0x165c, 0x148f, 0x17a2, 0x15a6, +0x17a2, 0x15a6, 0x1891, 0x1669, 0x1891, 0x1669, 0x1a57, 0x1805, 0x1a57, 0x1805, 0x1b49, +0x18d1, 0x1b49, 0x18d1, 0x1b4d, 0x18b4, 0x1b4d, 0x18b4, 0x1c37, 0x1982, 0x1c37, 0x1982, +0x1c37, 0x1982, 0x1c64, 0x1999, 0x1c64, 0x1999, 0x1c93, 0x19b9, 0x1c93, 0x19b9, 0x1d44, +0x1a63, 0x1d44, 0x1a63, 0x1cef, 0x1a0d, 0x1cef, 0x1a0d, 0x1c57, 0x197b, 0x1c57, 0x197b, +0x1c57, 0x197b, 0x1cdb, 0x1a0c, 0x1cdb, 0x1a0c, 0x1d43, 0x1a86, 0x1d43, 0x1a86, 0x1c65, +0x19bf, 0x1c65, 0x19bf, 0x1b82, 0x18f6, 0x1b82, 0x18f6, 0x1ac2, 0x1854, 0x1ac2, 0x1854, +0x1a55, 0x1806, 0x1a55, 0x1806, 0x1a55, 0x1806, 0x1a23, 0x17f4, 0x1a23, 0x17f4, 0x1896, +0x1687, 0x1896, 0x1687, 0x1651, 0x1460, 0x1651, 0x1460, 0x1524, 0x134f, 0x1524, 0x134f, +0x13aa, 0x11ee, 0x13aa, 0x11ee, 0x1189, 0xfe3, 0x1189, 0xfe3, 0x1189, 0xfe3, 0xfb8, +0xe24, 0xfb8, 0xe24, 0xd72, 0xbed, 0xd72, 0xbed, 0xc7c, 0xb01, 0xc7c, 0xb01, +0xb8d, 0xa19, 0xb8d, 0xa19, 0x9b0, 0x841, 0x9b0, 0x841, 0x9b0, 0x841, 0x8b6, +0x748, 0x8b6, 0x748, 0x76e, 0x600, 0x76e, 0x600, 0x706, 0x597, 0x706, 0x597, +0x70e, 0x59c, 0x70e, 0x59c, 0x607, 0x495, 0x607, 0x495, 0x4fd, 0x38b, 0x4fd, +0x38b, 0x4fd, 0x38b, 0x48b, 0x31b, 0x48b, 0x31b, 0x3f1, 0x286, 0x3f1, 0x286, +0x206, 0xa4, 0x206, 0xa4, 0x17b, 0x24, 0x17b, 0x24, 0x1d7, 0x91, 0x1d7, +0x91, 0x14, 0xfee1, 0x14, 0xfee1, 0x14, 0xfee1, 0xfea9, 0xfd8f, 0xfea9, 0xfd8f, +0xfe07, 0xfd09, 0xfe07, 0xfd09, 0xfd1f, 0xfc41, 0xfd1f, 0xfc41, 0xfccb, 0xfc10, 0xfccb, +0xfc10, 0xfb69, 0xfad3, 0xfb69, 0xfad3, 0xfb69, 0xfad3, 0xfa15, 0xf9a6, 0xfa15, 0xf9a6, +0xfa8e, 0xfa48, 0xfa8e, 0xfa48, 0xfa5d, 0xfa40, 0xfa5d, 0xfa40, 0xf938, 0xf943, 0xf938, +0xf943, 0xf805, 0xf838, 0xf805, 0xf838, 0xf6cf, 0xf729, 0xf6cf, 0xf729, 0xf6cf, 0xf729, +0xf5e8, 0xf664, 0xf5e8, 0xf664, 0xf50d, 0xf5a8, 0xf50d, 0xf5a8, 0xf460, 0xf517, 0xf460, +0xf517, 0xf386, 0xf453, 0xf386, 0xf453, 0xf262, 0xf342, 0xf262, 0xf342, 0xf1c2, 0xf2ae, +0xf1c2, 0xf2ae, 0xf1c2, 0xf2ae, 0xf22c, 0xf31f, 0xf22c, 0xf31f, 0xf2c9, 0xf3be, 0xf2c9, +0xf3be, 0xf1cb, 0xf2bc, 0xf1cb, 0xf2bc, 0xf16d, 0xf255, 0xf16d, 0xf255, 0xf2a4, 0xf37f, +0xf2a4, 0xf37f, 0xf2a4, 0xf37f, 0xf2c9, 0xf391, 0xf2c9, 0xf391, 0xf334, 0xf3e7, 0xf334, +0xf3e7, 0xf48f, 0xf529, 0xf48f, 0xf529, 0xf51c, 0xf59b, 0xf51c, 0xf59b, 0xf5fa, 0xf65c, +0xf5fa, 0xf65c, 0xf84c, 0xf890, 0xf84c, 0xf890, 0xf84c, 0xf890, 0xfa9b, 0xfac1, 0xfa9b, +0xfac1, 0xfcbe, 0xfcc8, 0xfcbe, 0xfcc8, 0xfe9e, 0xfe8d, 0xfe9e, 0xfe8d, 0xffa2, 0xff78, +0xffa2, 0xff78, 0x116, 0xd7, 0x116, 0xd7, 0x2f6, 0x2a5, 0x2f6, 0x2a5, 0x2f6, +0x2a5, 0x3bf, 0x360, 0x3bf, 0x360, 0x3d2, 0x36a, 0x3d2, 0x36a, 0x522, 0x4b5, +0x522, 0x4b5, 0x639, 0x5cc, 0x639, 0x5cc, 0x69e, 0x637, 0x69e, 0x637, 0x69e, +0x637, 0x726, 0x6c7, 0x726, 0x6c7, 0x6c2, 0x672, 0x6c2, 0x672, 0x728, 0x6ea, +0x728, 0x6ea, 0x7b2, 0x789, 0x7b2, 0x789, 0x75c, 0x74b, 0x75c, 0x74b, 0x6ec, +0x6f5, 0x6ec, 0x6f5, 0x6ec, 0x6f5, 0x586, 0x5ad, 0x586, 0x5ad, 0x45a, 0x49f, +0x45a, 0x49f, 0x43f, 0x4a3, 0x43f, 0x4a3, 0x3a0, 0x424, 0x3a0, 0x424, 0x1fd, +0x2a1, 0x1fd, 0x2a1, 0xf1, 0x1b5, 0xf1, 0x1b5, 0xf1, 0x1b5, 0x1c, 0x100, +0x1c, 0x100, 0xfe5e, 0xff62, 0xfe5e, 0xff62, 0xfd07, 0xfe2a, 0xfd07, 0xfe2a, 0xfb90, +0xfcd2, 0xfb90, 0xfcd2, 0xf9e5, 0xfb47, 0xf9e5, 0xfb47, 0xf9e5, 0xfb47, 0xf98a, 0xfb0c, +0xf98a, 0xfb0c, 0xf8c1, 0xfa64, 0xf8c1, 0xfa64, 0xf721, 0xf8e7, 0xf721, 0xf8e7, 0xf66d, +0xf856, 0xf66d, 0xf856, 0xf596, 0xf7a5, 0xf596, 0xf7a5, 0xf3de, 0xf613, 0xf3de, 0xf613, +0xf3de, 0xf613, 0xf2f5, 0xf553, 0xf2f5, 0xf553, 0xf257, 0xf4de, 0xf257, 0xf4de, 0xf0f9, +0xf3ac, 0xf0f9, 0xf3ac, 0xf00d, 0xf2ed, 0xf00d, 0xf2ed, 0xeeba, 0xf1c7, 0xeeba, 0xf1c7, +0xed18, 0xf050, 0xed18, 0xf050, 0xed18, 0xf050, 0xec31, 0xef94, 0xec31, 0xef94, 0xead2, +0xee5e, 0xead2, 0xee5e, 0xe8b2, 0xec64, 0xe8b2, 0xec64, 0xe6a8, 0xea7c, 0xe6a8, 0xea7c, +0xe553, 0xe943, 0xe553, 0xe943, 0xe553, 0xe943, 0xe478, 0xe87e, 0xe478, 0xe87e, 0xe357, +0xe76c, 0xe357, 0xe76c, 0xe199, 0xe5b6, 0xe199, 0xe5b6, 0xe06f, 0xe48c, 0xe06f, 0xe48c, +0xe013, 0xe426, 0xe013, 0xe426, 0xdfa6, 0xe3a8, 0xdfa6, 0xe3a8, 0xdfa6, 0xe3a8, 0xdf63, +0xe34b, 0xdf63, 0xe34b, 0xdf02, 0xe2c9, 0xdf02, 0xe2c9, 0xde38, 0xe1d6, 0xde38, 0xe1d6, +0xddf4, 0xe163, 0xddf4, 0xe163, 0xded3, 0xe20e, 0xded3, 0xe20e, 0xdf20, 0xe223, 0xdf20, +0xe223, 0xdf20, 0xe223, 0xdf89, 0xe251, 0xdf89, 0xe251, 0xe112, 0xe39e, 0xe112, 0xe39e, +0xe1e1, 0xe432, 0xe1e1, 0xe432, 0xe2db, 0xe4f2, 0xe2db, 0xe4f2, 0xe42a, 0xe60c, 0xe42a, +0xe60c, 0xe42a, 0xe60c, 0xe4ad, 0xe65c, 0xe4ad, 0xe65c, 0xe577, 0xe6f8, 0xe577, 0xe6f8, +0xe6d7, 0xe831, 0xe6d7, 0xe831, 0xe86b, 0xe9a4, 0xe86b, 0xe9a4, 0xeaa2, 0xebbf, 0xeaa2, +0xebbf, 0xecfc, 0xee03, 0xecfc, 0xee03, 0xecfc, 0xee03, 0xee8a, 0xef81, 0xee8a, 0xef81, +0xef8f, 0xf07b, 0xef8f, 0xf07b, 0xf04d, 0xf131, 0xf04d, 0xf131, 0xf0aa, 0xf188, 0xf0aa, +0xf188, 0xf0d7, 0xf1b1, 0xf0d7, 0xf1b1, 0xf10d, 0xf1e3, 0xf10d, 0xf1e3, 0xf10d, 0xf1e3, +0xf13f, 0xf210, 0xf13f, 0xf210, 0xf21c, 0xf2e5, 0xf21c, 0xf2e5, 0xf3a2, 0xf45f, 0xf3a2, +0xf45f, 0xf4a5, 0xf552, 0xf4a5, 0xf552, 0xf65f, 0xf6f7, 0xf65f, 0xf6f7, 0xf65f, 0xf6f7, +0xf851, 0xf8cd, 0xf851, 0xf8cd, 0xf91a, 0xf975, 0xf91a, 0xf975, 0xfbb4, 0xfbe8, 0xfbb4, +0xfbe8, 0xfe08, 0xfe10, 0xfe08, 0xfe10, 0xfe8a, 0xfe61, 0xfe8a, 0xfe61, 0x5a, 0xfffd, +0x5a, 0xfffd, 0x5a, 0xfffd, 0x1e8, 0x154, 0x1e8, 0x154, 0x3fe, 0x331, 0x3fe, +0x331, 0x6b5, 0x5b1, 0x6b5, 0x5b1, 0x86f, 0x734, 0x86f, 0x734, 0xa91, 0x923, +0xa91, 0x923, 0xa91, 0x923, 0xcf8, 0xb5b, 0xcf8, 0xb5b, 0xede, 0xd17, 0xede, +0xd17, 0xffd, 0xe12, 0xffd, 0xe12, 0x11c0, 0xfb9, 0x11c0, 0xfb9, 0x13a2, 0x1187, +0x13a2, 0x1187, 0x1455, 0x122c, 0x1455, 0x122c, 0x1455, 0x122c, 0x155b, 0x132c, 0x155b, +0x132c, 0x16ea, 0x14bb, 0x16ea, 0x14bb, 0x16e0, 0x14b9, 0x16e0, 0x14b9, 0x1639, 0x141e, +0x1639, 0x141e, 0x1624, 0x141a, 0x1624, 0x141a, 0x15bf, 0x13c8, 0x15bf, 0x13c8, 0x15bf, +0x13c8, 0x164b, 0x146b, 0x164b, 0x146b, 0x1537, 0x136d, 0x1537, 0x136d, 0x13e9, 0x1235, +0x13e9, 0x1235, 0x13ac, 0x120c, 0x13ac, 0x120c, 0x1227, 0x109a, 0x1227, 0x109a, 0x1227, +0x109a, 0x11e3, 0x1065, 0x11e3, 0x1065, 0x10fe, 0xf8d, 0x10fe, 0xf8d, 0xfb5, 0xe4d, +0xfb5, 0xe4d, 0xe97, 0xd34, 0xe97, 0xd34, 0xd84, 0xc24, 0xd84, 0xc24, 0xd21, +0xbc1, 0xd21, 0xbc1, 0xd21, 0xbc1, 0xbdd, 0xa7b, 0xbdd, 0xa7b, 0xb3d, 0x9d9, +0xb3d, 0x9d9, 0x9f8, 0x892, 0x9f8, 0x892, 0x9d1, 0x86b, 0x9d1, 0x86b, 0x9f8, +0x893, 0x9f8, 0x893, 0x7d3, 0x674, 0x7d3, 0x674, 0x7d3, 0x674, 0x6aa, 0x553, +0x6aa, 0x553, 0x5bc, 0x473, 0x5bc, 0x473, 0x517, 0x3e0, 0x517, 0x3e0, 0x476, +0x355, 0x476, 0x355, 0x37d, 0x278, 0x37d, 0x278, 0x37d, 0x278, 0x2a7, 0x1c3, +0x2a7, 0x1c3, 0x147, 0x87, 0x147, 0x87, 0x35, 0xff9c, 0x35, 0xff9c, 0xff21, +0xfeb1, 0xff21, 0xfeb1, 0xfd89, 0xfd43, 0xfd89, 0xfd43, 0xfb51, 0xfb34, 0xfb51, 0xfb34, +0xfb51, 0xfb34, 0xf9d0, 0xf9da, 0xf9d0, 0xf9da, 0xf90f, 0xf93c, 0xf90f, 0xf93c, 0xf822, +0xf86f, 0xf822, 0xf86f, 0xf712, 0xf779, 0xf712, 0xf779, 0xf6bd, 0xf737, 0xf6bd, 0xf737, +0xf747, 0xf7ce, 0xf747, 0xf7ce, 0xf747, 0xf7ce, 0xf67d, 0xf70a, 0xf67d, 0xf70a, 0xf73d, +0xf7c7, 0xf73d, 0xf7c7, 0xf85f, 0xf8e1, 0xf85f, 0xf8e1, 0xf7a1, 0xf814, 0xf7a1, 0xf814, +0xf91b, 0xf979, 0xf91b, 0xf979, 0xf91b, 0xf979, 0xfacb, 0xfb10, 0xfacb, 0xfb10, 0xfbf7, +0xfc20, 0xfbf7, 0xfc20, 0xfdd6, 0xfde0, 0xfdd6, 0xfde0, 0xfeb3, 0xfe9f, 0xfeb3, 0xfe9f, +0xffe4, 0xffb1, 0xffe4, 0xffb1, 0x22b, 0x1dd, 0x22b, 0x1dd, 0x22b, 0x1dd, 0x35f, +0x2fa, 0x35f, 0x2fa, 0x316, 0x29e, 0x316, 0x29e, 0x336, 0x2b3, 0x336, 0x2b3, +0x34f, 0x2c7, 0x34f, 0x2c7, 0x2dc, 0x255, 0x2dc, 0x255, 0x386, 0x309, 0x386, +0x309, 0x386, 0x309, 0x3e8, 0x37d, 0x3e8, 0x37d, 0x2a3, 0x24f, 0x2a3, 0x24f, +0x27d, 0x249, 0x27d, 0x249, 0x2e9, 0x2d8, 0x2e9, 0x2d8, 0x208, 0x220, 0x208, +0x220, 0x208, 0x220, 0xf1, 0x135, 0xf1, 0x135, 0xffe2, 0x53, 0xffe2, 0x53, +0xfede, 0xff7c, 0xfede, 0xff7c, 0xfe26, 0xfef1, 0xfe26, 0xfef1, 0xfcfd, 0xfdf2, 0xfcfd, +0xfdf2, 0xfb87, 0xfca2, 0xfb87, 0xfca2, 0xfb87, 0xfca2, 0xfb0c, 0xfc48, 0xfb0c, 0xfc48, +0xf9ca, 0xfb21, 0xf9ca, 0xfb21, 0xf8fa, 0xfa66, 0xf8fa, 0xfa66, 0xf9ea, 0xfb64, 0xf9ea, +0xfb64, 0xf9a8, 0xfb28, 0xf9a8, 0xfb28, 0xf95e, 0xfade, 0xf95e, 0xfade, 0xf95e, 0xfade, +0xfa0e, 0xfb86, 0xfa0e, 0xfb86, 0xfa6e, 0xfbd7, 0xfa6e, 0xfbd7, 0xfa9a, 0xfbef, 0xfa9a, +0xfbef, 0xfb3f, 0xfc7a, 0xfb3f, 0xfc7a, 0xfb60, 0xfc7e, 0xfb60, 0xfc7e, 0xfb60, 0xfc7e, +0xfc4a, 0xfd46, 0xfc4a, 0xfd46, 0xfdca, 0xfea2, 0xfdca, 0xfea2, 0xfe41, 0xfef4, 0xfe41, +0xfef4, 0x22, 0xaf, 0x22, 0xaf, 0x17f, 0x1e7, 0x17f, 0x1e7, 0x1cf, 0x213, +0x1cf, 0x213, 0x1cf, 0x213, 0x289, 0x2a9, 0x289, 0x2a9, 0x3d5, 0x3d3, 0x3d5, +0x3d3, 0x556, 0x535, 0x556, 0x535, 0x523, 0x4e5, 0x523, 0x4e5, 0x563, 0x50a, +0x563, 0x50a, 0x652, 0x5df, 0x652, 0x5df, 0x652, 0x5df, 0x761, 0x6d7, 0x761, +0x6d7, 0x852, 0x7b0, 0x852, 0x7b0, 0x8a0, 0x7e8, 0x8a0, 0x7e8, 0xa23, 0x956, +0xa23, 0x956, 0xaf9, 0xa16, 0xaf9, 0xa16, 0xaf9, 0xa16, 0xba7, 0xaad, 0xba7, +0xaad, 0xd86, 0xc74, 0xd86, 0xc74, 0xe3b, 0xd10, 0xe3b, 0xd10, 0xea6, 0xd60, +0xea6, 0xd60, 0xff0, 0xe8f, 0xff0, 0xe8f, 0x11da, 0x105b, 0x11da, 0x105b, 0x11da, +0x105b, 0x13d2, 0x1235, 0x13d2, 0x1235, 0x15c4, 0x1408, 0x15c4, 0x1408, 0x1762, 0x1586, +0x1762, 0x1586, 0x1862, 0x1666, 0x1862, 0x1666, 0x1a1f, 0x1805, 0x1a1f, 0x1805, 0x1b48, +0x1910, 0x1b48, 0x1910, 0x1b48, 0x1910, 0x1b09, 0x18b6, 0x1b09, 0x18b6, 0x1bf4, 0x1989, +0x1bf4, 0x1989, 0x1ce7, 0x1a67, 0x1ce7, 0x1a67, 0x1c99, 0x1a0a, 0x1c99, 0x1a0a, 0x1dc6, +0x1b2b, 0x1dc6, 0x1b2b, 0x1dc6, 0x1b2b, 0x1e56, 0x1bb5, 0x1e56, 0x1bb5, 0x1e12, 0x1b70, +0x1e12, 0x1b70, 0x1e6d, 0x1bd0, 0x1e6d, 0x1bd0, 0x1de9, 0x1b56, 0x1de9, 0x1b56, 0x1e08, +0x1b85, 0x1e08, 0x1b85, 0x1d99, 0x1b2a, 0x1d99, 0x1b2a, 0x1d99, 0x1b2a, 0x1cf0, 0x1a9b, +0x1cf0, 0x1a9b, 0x1bc3, 0x198b, 0x1bc3, 0x198b, 0x1a16, 0x17fe, 0x1a16, 0x17fe, 0x18cd, +0x16d8, 0x18cd, 0x16d8, 0x15fe, 0x142e, 0x15fe, 0x142e, 0x1464, 0x12b7, 0x1464, 0x12b7, +0x1464, 0x12b7, 0x12d0, 0x1148, 0x12d0, 0x1148, 0x1070, 0xf0a, 0x1070, 0xf0a, 0xfba, +0xe75, 0xfba, 0xe75, 0xe90, 0xd69, 0xe90, 0xd69, 0xd13, 0xc05, 0xd13, 0xc05, +0xd13, 0xc05, 0xc01, 0xb09, 0xc01, 0xb09, 0xa66, 0x980, 0xa66, 0x980, 0xa1d, +0x943, 0xa1d, 0x943, 0x95c, 0x88b, 0x95c, 0x88b, 0x701, 0x635, 0x701, 0x635, +0x5bb, 0x4ef, 0x5bb, 0x4ef, 0x5bb, 0x4ef, 0x4ed, 0x41f, 0x4ed, 0x41f, 0x4cb, +0x3f9, 0x4cb, 0x3f9, 0x456, 0x37d, 0x456, 0x37d, 0x3ea, 0x30a, 0x3ea, 0x30a, +0x3ac, 0x2c4, 0x3ac, 0x2c4, 0x3ac, 0x2c4, 0x290, 0x1a2, 0x290, 0x1a2, 0x167, +0x76, 0x167, 0x76, 0xffbf, 0xfecc, 0xffbf, 0xfecc, 0xfe1e, 0xfd2e, 0xfe1e, 0xfd2e, +0xfc98, 0xfbae, 0xfc98, 0xfbae, 0xfbb2, 0xfad2, 0xfbb2, 0xfad2, 0xfbb2, 0xfad2, 0xfaee, +0xfa1e, 0xfaee, 0xfa1e, 0xfa75, 0xf9ba, 0xfa75, 0xf9ba, 0xf9e5, 0xf942, 0xf9e5, 0xf942, +0xf92b, 0xf8a5, 0xf92b, 0xf8a5, 0xf86b, 0xf806, 0xf86b, 0xf806, 0xf748, 0xf706, 0xf748, +0xf706, 0xf748, 0xf706, 0xf724, 0xf707, 0xf724, 0xf707, 0xf594, 0xf59d, 0xf594, 0xf59d, +0xf3e6, 0xf416, 0xf3e6, 0xf416, 0xf2df, 0xf334, 0xf2df, 0xf334, 0xf1cb, 0xf244, 0xf1cb, +0xf244, 0xf1cb, 0xf244, 0xf1f1, 0xf28a, 0xf1f1, 0xf28a, 0xf141, 0xf1f6, 0xf141, 0xf1f6, +0xf0c3, 0xf18f, 0xf0c3, 0xf18f, 0xf17b, 0xf259, 0xf17b, 0xf259, 0xf268, 0xf351, 0xf268, +0xf351, 0xf325, 0xf414, 0xf325, 0xf414, 0xf325, 0xf414, 0xf313, 0xf401, 0xf313, 0xf401, +0xf348, 0xf430, 0xf348, 0xf430, 0xf480, 0xf55c, 0xf480, 0xf55c, 0xf559, 0xf623, 0xf559, +0xf623, 0xf6af, 0xf765, 0xf6af, 0xf765, 0xf8d8, 0xf974, 0xf8d8, 0xf974, 0xf8d8, 0xf974, +0xfa91, 0xfb12, 0xfa91, 0xfb12, 0xfc91, 0xfcf6, 0xfc91, 0xfcf6, 0xfe83, 0xfecb, 0xfe83, +0xfecb, 0xffae, 0xffda, 0xffae, 0xffda, 0x107, 0x119, 0x107, 0x119, 0x107, 0x119, +0x2b2, 0x2ad, 0x2b2, 0x2ad, 0x424, 0x40b, 0x424, 0x40b, 0x593, 0x56a, 0x593, +0x56a, 0x62e, 0x5fa, 0x62e, 0x5fa, 0x715, 0x6da, 0x715, 0x6da, 0x816, 0x7d9, +0x816, 0x7d9, 0x816, 0x7d9, 0x79a, 0x75f, 0x79a, 0x75f, 0x768, 0x734, 0x768, +0x734, 0x80e, 0x7e5, 0x80e, 0x7e5, 0x87e, 0x863, 0x87e, 0x863, 0x7f3, 0x7e9, +0x7f3, 0x7e9, 0x7ab, 0x7b4, 0x7ab, 0x7b4, 0x7ab, 0x7b4, 0x7aa, 0x7c8, 0x7aa, +0x7c8, 0x72d, 0x761, 0x72d, 0x761, 0x668, 0x6b2, 0x668, 0x6b2, 0x524, 0x583, +0x524, 0x583, 0x3ba, 0x42f, 0x3ba, 0x42f, 0x3ba, 0x42f, 0x241, 0x2cc, 0x241, +0x2cc, 0xf7, 0x197, 0xf7, 0x197, 0xff59, 0xe, 0xff59, 0xe, 0xfdfc, 0xfec5, +0xfdfc, 0xfec5, 0xfce9, 0xfdc8, 0xfce9, 0xfdc8, 0xfbce, 0xfcc2, 0xfbce, 0xfcc2, 0xfbce, +0xfcc2, 0xfb84, 0xfc8f, 0xfb84, 0xfc8f, 0xfa08, 0xfb2d, 0xfa08, 0xfb2d, 0xf7b4, 0xf8f5, +0xf7b4, 0xf8f5, 0xf68f, 0xf7f0, 0xf68f, 0xf7f0, 0xf50b, 0xf68e, 0xf50b, 0xf68e, 0xf3f2, +0xf59b, 0xf3f2, 0xf59b, 0xf3f2, 0xf59b, 0xf293, 0xf466, 0xf293, 0xf466, 0xf08c, 0xf28d, +0xf08c, 0xf28d, 0xf08a, 0xf2bd, 0xf08a, 0xf2bd, 0xef3d, 0xf1a3, 0xef3d, 0xf1a3, 0xed5d, +0xeffa, 0xed5d, 0xeffa, 0xed5d, 0xeffa, 0xed03, 0xefd9, 0xed03, 0xefd9, 0xeb45, 0xee53, +0xeb45, 0xee53, 0xe8f1, 0xec37, 0xe8f1, 0xec37, 0xe6ec, 0xea68, 0xe6ec, 0xea68, 0xe5ad, +0xe95c, 0xe5ad, 0xe95c, 0xe49f, 0xe87c, 0xe49f, 0xe87c, 0xe49f, 0xe87c, 0xe2e7, 0xe6ed, +0xe2e7, 0xe6ed, 0xe236, 0xe65d, 0xe236, 0xe65d, 0xe1a7, 0xe5e8, 0xe1a7, 0xe5e8, 0xe07f, +0xe4d2, 0xe07f, 0xe4d2, 0xdfcf, 0xe42a, 0xdfcf, 0xe42a, 0xdedf, 0xe338, 0xdedf, 0xe338, +0xdedf, 0xe338, 0xde0d, 0xe25b, 0xde0d, 0xe25b, 0xdd84, 0xe1be, 0xdd84, 0xe1be, 0xdd96, +0xe1b3, 0xdd96, 0xe1b3, 0xde22, 0xe21a, 0xde22, 0xe21a, 0xde23, 0xe1ef, 0xde23, 0xe1ef, +0xde23, 0xe1ef, 0xde34, 0xe1cd, 0xde34, 0xe1cd, 0xde96, 0xe1f8, 0xde96, 0xe1f8, 0xe015, +0xe33e, 0xe015, 0xe33e, 0xe0e5, 0xe3d1, 0xe0e5, 0xe3d1, 0xe153, 0xe402, 0xe153, 0xe402, +0xe28f, 0xe503, 0xe28f, 0xe503, 0xe28f, 0xe503, 0xe344, 0xe57e, 0xe344, 0xe57e, 0xe4b1, +0xe6b3, 0xe4b1, 0xe6b3, 0xe5e2, 0xe7b2, 0xe5e2, 0xe7b2, 0xe7a8, 0xe949, 0xe7a8, 0xe949, +0xea37, 0xebae, 0xea37, 0xebae, 0xeb6d, 0xecc0, 0xeb6d, 0xecc0, 0xeb6d, 0xecc0, 0xecfd, +0xee30, 0xecfd, 0xee30, 0xeef9, 0xf010, 0xeef9, 0xf010, 0xf00b, 0xf10c, 0xf00b, 0xf10c, +0xf154, 0xf240, 0xf154, 0xf240, 0xf214, 0xf2ef, 0xf214, 0xf2ef, 0xf214, 0xf2ef, 0xf1ef, +0xf2bb, 0xf1ef, 0xf2bb, 0xf2d3, 0xf38f, 0xf2d3, 0xf38f, 0xf382, 0xf42e, 0xf382, 0xf42e, +0xf463, 0xf4fe, 0xf463, 0xf4fe, 0xf572, 0xf5fa, 0xf572, 0xf5fa, 0xf699, 0xf70a, 0xf699, +0xf70a, 0xf699, 0xf70a, 0xf882, 0xf8da, 0xf882, 0xf8da, 0xf962, 0xf99d, 0xf962, 0xf99d, +0xfb05, 0xfb1f, 0xfb05, 0xfb1f, 0xfcb4, 0xfca9, 0xfcb4, 0xfca9, 0xfd3b, 0xfd07, 0xfd3b, +0xfd07, 0xff79, 0xff1a, 0xff79, 0xff1a, 0xff79, 0xff1a, 0x167, 0xda, 0x167, 0xda, +0x1ef, 0x132, 0x1ef, 0x132, 0x3fd, 0x310, 0x3fd, 0x310, 0x66f, 0x552, 0x66f, +0x552, 0x85f, 0x712, 0x85f, 0x712, 0x85f, 0x712, 0x979, 0x7fe, 0x979, 0x7fe, +0xba3, 0x9fd, 0xba3, 0x9fd, 0xe76, 0xca7, 0xe76, 0xca7, 0xf8d, 0xd9a, 0xf8d, +0xd9a, 0x117f, 0xf6b, 0x117f, 0xf6b, 0x124f, 0x101f, 0x124f, 0x101f, 0x124f, 0x101f, +0x12ee, 0x10a7, 0x12ee, 0x10a7, 0x13eb, 0x1191, 0x13eb, 0x1191, 0x151c, 0x12b3, 0x151c, +0x12b3, 0x1601, 0x138e, 0x1601, 0x138e, 0x152b, 0x12b1, 0x152b, 0x12b1, 0x156a, 0x12ec, +0x156a, 0x12ec, 0x156a, 0x12ec, 0x14de, 0x125d, 0x14de, 0x125d, 0x1566, 0x12e5, 0x1566, +0x12e5, 0x14a2, 0x1222, 0x14a2, 0x1222, 0x137a, 0x10fb, 0x137a, 0x10fb, 0x140c, 0x118e, +0x140c, 0x118e, 0x140c, 0x118e, 0x12fa, 0x107e, 0x12fa, 0x107e, 0x138a, 0x110f, 0x138a, +0x110f, 0x12f4, 0x107b, 0x12f4, 0x107b, 0x1227, 0xfae, 0x1227, 0xfae, 0x117b, 0xf03, +0x117b, 0xf03, 0x1008, 0xd91, 0x1008, 0xd91, 0x1008, 0xd91, 0xf26, 0xcb1, 0xf26, +0xcb1, 0xe8f, 0xc1e, 0xe8f, 0xc1e, 0xde5, 0xb79, 0xde5, 0xb79, 0xc31, 0x9cd, +0xc31, 0x9cd, 0xc44, 0x9ec, 0xc44, 0x9ec, 0xc44, 0x9ec, 0xbcd, 0x985, 0xbcd, +0x985, 0xb24, 0x8ef, 0xb24, 0x8ef, 0xa52, 0x835, 0xa52, 0x835, 0x889, 0x689, +0x889, 0x689, 0x6c8, 0x4ea, 0x6c8, 0x4ea, 0x5bb, 0x404, 0x5bb, 0x404, 0x5bb, +0x404, 0x563, 0x3d7, 0x563, 0x3d7, 0x398, 0x23b, 0x398, 0x23b, 0x305, 0x1da, +0x305, 0x1da, 0x217, 0x121, 0x217, 0x121, 0x8, 0xff47, 0x8, 0xff47, 0xfece, +0xfe43, 0xfece, 0xfe43, 0xfece, 0xfe43, 0xfd81, 0xfd2b, 0xfd81, 0xfd2b, 0xfb26, 0xfb03, +0xfb26, 0xfb03, 0xf91b, 0xf929, 0xf91b, 0xf929, 0xf860, 0xf899, 0xf860, 0xf899, 0xf6a9, +0xf70a, 0xf6a9, 0xf70a, 0xf6a9, 0xf70a, 0xf50b, 0xf58d, 0xf50b, 0xf58d, 0xf4d8, 0xf574, +0xf4d8, 0xf574, 0xf520, 0xf5cf, 0xf520, 0xf5cf, 0xf583, 0xf63e, 0xf583, 0xf63e, 0xf5bb, +0xf67a, 0xf5bb, 0xf67a, 0xf61c, 0xf6d9, 0xf61c, 0xf6d9, 0xf61c, 0xf6d9, 0xf6bb, 0xf76f, +0xf6bb, 0xf76f, 0xf66e, 0xf712, 0xf66e, 0xf712, 0xf727, 0xf7b7, 0xf727, 0xf7b7, 0xf8fc, +0xf974, 0xf8fc, 0xf974, 0xfa1f, 0xfa7b, 0xfa1f, 0xfa7b, 0xfb5e, 0xfb9e, 0xfb5e, 0xfb9e, +0xfb5e, 0xfb9e, 0xfcdb, 0xfcfd, 0xfcdb, 0xfcfd, 0xfe77, 0xfe7b, 0xfe77, 0xfe7b, 0xfdde, +0xfdc8, 0xfdde, 0xfdc8, 0xfd72, 0xfd43, 0xfd72, 0xfd43, 0xfdd1, 0xfd8e, 0xfdd1, 0xfd8e, +0xfdd1, 0xfd8e, 0xfd8a, 0xfd38, 0xfd8a, 0xfd38, 0xfddb, 0xfd7e, 0xfddb, 0xfd7e, 0xfd8d, +0xfd2c, 0xfd8d, 0xfd2c, 0xfe2d, 0xfdcc, 0xfe2d, 0xfdcc, 0xfdbc, 0xfd62, 0xfdbc, 0xfd62, +0xfdb8, 0xfd69, 0xfdb8, 0xfd69, 0xfdb8, 0xfd69, 0xfe3e, 0xfe00, 0xfe3e, 0xfe00, 0xfe33, +0xfe0a, 0xfe33, 0xfe0a, 0xfe25, 0xfe13, 0xfe25, 0xfe13, 0xfbd6, 0xfbde, 0xfbd6, 0xfbde, +0xfb51, 0xfb75, 0xfb51, 0xfb75, 0xfbd7, 0xfc16, 0xfbd7, 0xfc16, 0xfbd7, 0xfc16, 0xfb6c, +0xfbc7, 0xfb6c, 0xfbc7, 0xfacf, 0xfb43, 0xfacf, 0xfb43, 0xfabd, 0xfb48, 0xfabd, 0xfb48, +0xfbbb, 0xfc59, 0xfbbb, 0xfc59, 0xfc10, 0xfcbe, 0xfc10, 0xfcbe, 0xfc10, 0xfcbe, 0xfbe8, +0xfca2, 0xfbe8, 0xfca2, 0xfc25, 0xfce5, 0xfc25, 0xfce5, 0xfc5a, 0xfd1c, 0xfc5a, 0xfd1c, +0xfcb9, 0xfd78, 0xfcb9, 0xfd78, 0xfd60, 0xfe19, 0xfd60, 0xfe19, 0xfe5b, 0xff0a, 0xfe5b, +0xff0a, 0xfe5b, 0xff0a, 0xfe90, 0xff32, 0xfe90, 0xff32, 0xff7f, 0xf, 0xff7f, 0xf, +0x243, 0x2c1, 0x243, 0x2c1, 0x343, 0x3ad, 0x343, 0x3ad, 0x382, 0x3d7, 0x382, +0x3d7, 0x406, 0x447, 0x406, 0x447, 0x406, 0x447, 0x5c9, 0x5f4, 0x5c9, 0x5f4, +0x708, 0x71f, 0x708, 0x71f, 0x78b, 0x78e, 0x78b, 0x78e, 0x8a1, 0x891, 0x8a1, +0x891, 0x8b7, 0x895, 0x8b7, 0x895, 0x8b7, 0x895, 0x989, 0x956, 0x989, 0x956, +0xa7c, 0xa37, 0xa7c, 0xa37, 0xbba, 0xb64, 0xbba, 0xb64, 0xc0a, 0xba3, 0xc0a, +0xba3, 0xb87, 0xb0d, 0xb87, 0xb0d, 0xc5f, 0xbd2, 0xc5f, 0xbd2, 0xc5f, 0xbd2, +0xd71, 0xcce, 0xd71, 0xcce, 0xf99, 0xedf, 0xf99, 0xedf, 0xfe5, 0xf11, 0xfe5, +0xf11, 0xf7d, 0xe8e, 0xf7d, 0xe8e, 0x11c0, 0x10b3, 0x11c0, 0x10b3, 0x138f, 0x1262, +0x138f, 0x1262, 0x138f, 0x1262, 0x15d6, 0x1488, 0x15d6, 0x1488, 0x171e, 0x15ad, 0x171e, +0x15ad, 0x1768, 0x15d4, 0x1768, 0x15d4, 0x1781, 0x15cb, 0x1781, 0x15cb, 0x17e6, 0x160e, +0x17e6, 0x160e, 0x17e6, 0x160e, 0x1a28, 0x1831, 0x1a28, 0x1831, 0x1a7a, 0x1867, 0x1a7a, +0x1867, 0x1a16, 0x17ea, 0x1a16, 0x17ea, 0x1aba, 0x187b, 0x1aba, 0x187b, 0x1b9d, 0x194f, +0x1b9d, 0x194f, 0x1d20, 0x1aca, 0x1d20, 0x1aca, 0x1d20, 0x1aca, 0x1ca1, 0x1a4a, 0x1ca1, +0x1a4a, 0x1be7, 0x1995, 0x1be7, 0x1995, 0x1c56, 0x1a10, 0x1c56, 0x1a10, 0x1c19, 0x19e5, +0x1c19, 0x19e5, 0x1c71, 0x1a56, 0x1c71, 0x1a56, 0x1b97, 0x199a, 0x1b97, 0x199a, 0x1b97, +0x199a, 0x1a3c, 0x1861, 0x1a3c, 0x1861, 0x1a06, 0x1852, 0x1a06, 0x1852, 0x1a12, 0x1886, +0x1a12, 0x1886, 0x1865, 0x1701, 0x1865, 0x1701, 0x16c9, 0x158f, 0x16c9, 0x158f, 0x16c9, +0x158f, 0x14f4, 0x13e1, 0x14f4, 0x13e1, 0x1242, 0x1154, 0x1242, 0x1154, 0x10d9, 0x100c, +0x10d9, 0x100c, 0xfe3, 0xf31, 0xfe3, 0xf31, 0xe86, 0xdeb, 0xe86, 0xdeb, 0xc26, +0xb9a, 0xc26, 0xb9a, 0xc26, 0xb9a, 0xc07, 0xb84, 0xc07, 0xb84, 0xa5f, 0x9dd, +0xa5f, 0x9dd, 0x99a, 0x913, 0x99a, 0x913, 0x8ba, 0x829, 0x8ba, 0x829, 0x5af, +0x50d, 0x5af, 0x50d, 0x593, 0x4dc, 0x593, 0x4dc, 0x593, 0x4dc, 0x477, 0x3a7, +0x477, 0x3a7, 0x431, 0x345, 0x431, 0x345, 0x3dd, 0x2d5, 0x3dd, 0x2d5, 0x239, +0x115, 0x239, 0x115, 0x19d, 0x5e, 0x19d, 0x5e, 0x19d, 0x5e, 0xcc, 0xff75, +0xcc, 0xff75, 0x73, 0xff07, 0x73, 0xff07, 0xffd0, 0xfe55, 0xffd0, 0xfe55, 0xfd3d, +0xfbb8, 0xfd3d, 0xfbb8, 0xfcb4, 0xfb2c, 0xfcb4, 0xfb2c, 0xfcb2, 0xfb2d, 0xfcb2, 0xfb2d, +0xfcb2, 0xfb2d, 0xfbfa, 0xfa7e, 0xfbfa, 0xfa7e, 0xfb8c, 0xfa20, 0xfb8c, 0xfa20, 0xf91d, +0xf7c7, 0xf91d, 0xf7c7, 0xf863, 0xf728, 0xf863, 0xf728, 0xf8fe, 0xf7e2, 0xf8fe, 0xf7e2, +0xf84f, 0xf755, 0xf84f, 0xf755, 0xf84f, 0xf755, 0xf776, 0xf6a2, 0xf776, 0xf6a2, 0xf5cd, +0xf51e, 0xf5cd, 0xf51e, 0xf441, 0xf3b8, 0xf441, 0xf3b8, 0xf463, 0xf3fe, 0xf463, 0xf3fe, +0xf3fd, 0xf3ba, 0xf3fd, 0xf3ba, 0xf3fd, 0xf3ba, 0xf241, 0xf21d, 0xf241, 0xf21d, 0xf108, +0xf0fe, 0xf108, 0xf0fe, 0xf0fc, 0xf109, 0xf0fc, 0xf109, 0xf157, 0xf174, 0xf157, 0xf174, +0xf1da, 0xf202, 0xf1da, 0xf202, 0xf230, 0xf25f, 0xf230, 0xf25f, 0xf230, 0xf25f, 0xf219, +0xf249, 0xf219, 0xf249, 0xf25a, 0xf287, 0xf25a, 0xf287, 0xf404, 0xf42a, 0xf404, 0xf42a, +0xf62d, 0xf64b, 0xf62d, 0xf64b, 0xf886, 0xf897, 0xf886, 0xf897, 0xf886, 0xf897, 0xf9c2, +0xf9c7, 0xf9c2, 0xf9c7, 0xfa22, 0xfa1a, 0xfa22, 0xfa1a, 0xfc81, 0xfc6d, 0xfc81, 0xfc6d, +0xffa8, 0xff8a, 0xffa8, 0xff8a, 0xec, 0xc7, 0xec, 0xc7, 0x208, 0x1dd, 0x208, +0x1dd, 0x208, 0x1dd, 0x48e, 0x462, 0x48e, 0x462, 0x599, 0x570, 0x599, 0x570, +0x76e, 0x74b, 0x76e, 0x74b, 0x988, 0x970, 0x988, 0x970, 0xa05, 0x9f9, 0xa05, +0x9f9, 0xabb, 0xac0, 0xabb, 0xac0, 0xabb, 0xac0, 0xc10, 0xc28, 0xc10, 0xc28, +0xd79, 0xda6, 0xd79, 0xda6, 0xe35, 0xe78, 0xe35, 0xe78, 0xd35, 0xd8e, 0xd35, +0xd8e, 0xc6c, 0xcdb, 0xc6c, 0xcdb, 0xc6c, 0xcdb, 0xc8f, 0xd12, 0xc8f, 0xd12, +0xc7f, 0xd15, 0xc7f, 0xd15, 0xcbb, 0xd62, 0xcbb, 0xd62, 0xc08, 0xcbd, 0xc08, +0xcbd, 0xb30, 0xbf1, 0xb30, 0xbf1, 0x9c0, 0xa8b, 0x9c0, 0xa8b, 0x9c0, 0xa8b, +0x840, 0x912, 0x840, 0x912, 0x70e, 0x7e6, 0x70e, 0x7e6, 0x54b, 0x626, 0x54b, +0x626, 0x2b4, 0x393, 0x2b4, 0x393, 0x120, 0x203, 0x120, 0x203, 0xfeab, 0xff94, +0xfeab, 0xff94, 0xfeab, 0xff94, 0xfd99, 0xfe89, 0xfd99, 0xfe89, 0xfd2c, 0xfe26, 0xfd2c, +0xfe26, 0xfaa8, 0xfbb0, 0xfaa8, 0xfbb0, 0xf9ce, 0xfae8, 0xf9ce, 0xfae8, 0xf848, 0xf97a, +0xf848, 0xf97a, 0xf848, 0xf97a, 0xf684, 0xf7d3, 0xf684, 0xf7d3, 0xf49a, 0xf60c, 0xf49a, +0xf60c, 0xf2d5, 0xf46f, 0xf2d5, 0xf46f, 0xf089, 0xf251, 0xf089, 0xf251, 0xef1a, 0xf115, +0xef1a, 0xf115, 0xede1, 0xf013, 0xede1, 0xf013, 0xede1, 0xf013, 0xec04, 0xee70, 0xec04, +0xee70, 0xea86, 0xed2e, 0xea86, 0xed2e, 0xe8f3, 0xebda, 0xe8f3, 0xebda, 0xe770, 0xea94, +0xe770, 0xea94, 0xe4d2, 0xe833, 0xe4d2, 0xe833, 0xe1d1, 0xe56b, 0xe1d1, 0xe56b, 0xe1d1, +0xe56b, 0xdfd6, 0xe3a5, 0xdfd6, 0xe3a5, 0xdf36, 0xe334, 0xdf36, 0xe334, 0xdd7b, 0xe1a0, +0xdd7b, 0xe1a0, 0xdbec, 0xe033, 0xdbec, 0xe033, 0xdb59, 0xdfb7, 0xdb59, 0xdfb7, 0xdb59, +0xdfb7, 0xda0a, 0xde76, 0xda0a, 0xde76, 0xd8a4, 0xdd15, 0xd8a4, 0xdd15, 0xd86c, 0xdcd8, +0xd86c, 0xdcd8, 0xd6f1, 0xdb4e, 0xd6f1, 0xdb4e, 0xd61e, 0xda62, 0xd61e, 0xda62, 0xd614, +0xda38, 0xd614, 0xda38, 0xd614, 0xda38, 0xd67a, 0xda75, 0xd67a, 0xda75, 0xd8c5, 0xdc8f, +0xd8c5, 0xdc8f, 0xda04, 0xdd98, 0xda04, 0xdd98, 0xdafc, 0xde55, 0xdafc, 0xde55, 0xdc03, +0xdf1e, 0xdc03, 0xdf1e, 0xdd57, 0xe032, 0xdd57, 0xe032, 0xdd57, 0xe032, 0xde75, 0xe10e, +0xde75, 0xe10e, 0xe009, 0xe261, 0xe009, 0xe261, 0xe245, 0xe45d, 0xe245, 0xe45d, 0xe451, +0xe62b, 0xe451, 0xe62b, 0xe6c4, 0xe864, 0xe6c4, 0xe864, 0xe6c4, 0xe864, 0xe957, 0xeac1, +0xe957, 0xeac1, 0xeb5e, 0xec96, 0xeb5e, 0xec96, 0xed63, 0xee6f, 0xed63, 0xee6f, 0xef0d, +0xeff0, 0xef0d, 0xeff0, 0xefef, 0xf0af, 0xefef, 0xf0af, 0xf156, 0xf1f7, 0xf156, 0xf1f7, +0xf156, 0xf1f7, 0xf285, 0xf30c, 0xf285, 0xf30c, 0xf39f, 0xf410, 0xf39f, 0xf410, 0xf3d4, +0xf433, 0xf3d4, 0xf433, 0xf493, 0xf4e2, 0xf493, 0xf4e2, 0xf6f4, 0xf736, 0xf6f4, 0xf736, +0xf7ca, 0xf800, 0xf7ca, 0xf800, 0xf7ca, 0xf800, 0xf95c, 0xf988, 0xf95c, 0xf988, 0xf96c, +0xf98e, 0xf96c, 0xf98e, 0xfaa4, 0xfabc, 0xfaa4, 0xfabc, 0xfd51, 0xfd5f, 0xfd51, 0xfd5f, +0xfcba, 0xfcbd, 0xfcba, 0xfcbd, 0xfcba, 0xfcbd, 0xfef0, 0xfee7, 0xfef0, 0xfee7, 0x1b8, +0x1a1, 0x1b8, 0x1a1, 0x339, 0x312, 0x339, 0x312, 0x4a4, 0x46c, 0x4a4, 0x46c, +0x60c, 0x5c2, 0x60c, 0x5c2, 0x770, 0x711, 0x770, 0x711, 0x770, 0x711, 0x9a8, +0x933, 0x9a8, 0x933, 0xb6a, 0xadf, 0xb6a, 0xadf, 0xc34, 0xb91, 0xc34, 0xb91, +0xd6a, 0xcb0, 0xd6a, 0xcb0, 0xf8d, 0xeba, 0xf8d, 0xeba, 0x1173, 0x1088, 0x1173, +0x1088, 0x1173, 0x1088, 0x126b, 0x1168, 0x126b, 0x1168, 0x13d7, 0x12bd, 0x13d7, 0x12bd, +0x134f, 0x121e, 0x134f, 0x121e, 0x1432, 0x12ec, 0x1432, 0x12ec, 0x1405, 0x12ac, 0x1405, +0x12ac, 0x1405, 0x12ac, 0x1385, 0x121a, 0x1385, 0x121a, 0x1476, 0x12fc, 0x1476, 0x12fc, +0x1391, 0x1209, 0x1391, 0x1209, 0x1398, 0x1205, 0x1398, 0x1205, 0x1454, 0x12b9, 0x1454, +0x12b9, 0x132b, 0x118b, 0x132b, 0x118b, 0x132b, 0x118b, 0x12ec, 0x114a, 0x12ec, 0x114a, +0x1344, 0x11a2, 0x1344, 0x11a2, 0x129b, 0x10fe, 0x129b, 0x10fe, 0x12d1, 0x113c, 0x12d1, +0x113c, 0x11dd, 0x1052, 0x11dd, 0x1052, 0x10bf, 0xf42, 0x10bf, 0xf42, 0x10bf, 0xf42, +0x10d2, 0xf67, 0x10d2, 0xf67, 0x1082, 0xf2c, 0x1082, 0xf2c, 0xd89, 0xc4a, 0xd89, +0xc4a, 0xcb8, 0xb93, 0xcb8, 0xb93, 0xda7, 0xc9e, 0xda7, 0xc9e, 0xda7, 0xc9e, +0xd82, 0xc98, 0xd82, 0xc98, 0xceb, 0xc21, 0xceb, 0xc21, 0xc1f, 0xb77, 0xc1f, +0xb77, 0xae8, 0xa62, 0xae8, 0xa62, 0xb05, 0xaa2, 0xb05, 0xaa2, 0xaf9, 0xab9, +0xaf9, 0xab9, 0xaf9, 0xab9, 0x8e5, 0x8c7, 0x8e5, 0x8c7, 0xa54, 0xa57, 0xa54, +0xa57, 0x69e, 0x6c0, 0x69e, 0x6c0, 0x5d2, 0x612, 0x5d2, 0x612, 0x68b, 0x6e7, +0x68b, 0x6e7, 0x34a, 0x3be, 0x34a, 0x3be, 0x34a, 0x3be, 0x4b5, 0x53f, 0x4b5, +0x53f, 0xd, 0xab, 0xd, 0xab, 0xfe53, 0xff01, 0xfe53, 0xff01, 0xfd42, 0xfdfd, +0xfd42, 0xfdfd, 0xfaaa, 0xfb6f, 0xfaaa, 0xfb6f, 0xfaaa, 0xfb6f, 0xfafd, 0xfbcb, 0xfafd, +0xfbcb, 0xf7a0, 0xf873, 0xf7a0, 0xf873, 0xf726, 0xf7fc, 0xf726, 0xf7fc, 0xf545, 0xf61d, +0xf545, 0xf61d, 0xf516, 0xf5ee, 0xf516, 0xf5ee, 0xf610, 0xf6e7, 0xf610, 0xf6e7, 0xf610, +0xf6e7, 0xf6e3, 0xf7b9, 0xf6e3, 0xf7b9, 0xf884, 0xf957, 0xf884, 0xf957, 0xf626, 0xf6f6, +0xf626, 0xf6f6, 0xf730, 0xf7fd, 0xf730, 0xf7fd, 0xf8c7, 0xf990, 0xf8c7, 0xf990, 0xf8c7, +0xf990, 0xf8ed, 0xf9b3, 0xf8ed, 0xf9b3, 0xfa2e, 0xfaf0, 0xfa2e, 0xfaf0, 0xf8e0, 0xf99d, +0xf8e0, 0xf99d, 0xf8e4, 0xf99b, 0xf8e4, 0xf99b, 0xfac7, 0xfb78, 0xfac7, 0xfb78, 0xf97b, +0xfa24, 0xf97b, 0xfa24, 0xf97b, 0xfa24, 0xf912, 0xf9b1, 0xf912, 0xf9b1, 0xf921, 0xf9b5, +0xf921, 0xf9b5, 0xf7b3, 0xf838, 0xf7b3, 0xf838, 0xf87f, 0xf8f2, 0xf87f, 0xf8f2, 0xf931, +0xf98f, 0xf931, 0xf98f, 0xf80e, 0xf855, 0xf80e, 0xf855, 0xf80e, 0xf855, 0xf8f7, 0xf923, +0xf8f7, 0xf923, 0xf7e0, 0xf7ee, 0xf7e0, 0xf7ee, 0xf74f, 0xf73c, 0xf74f, 0xf73c, 0xf871, +0xf83b, 0xf871, 0xf83b, 0xf67d, 0xf621, 0xf67d, 0xf621, 0xf67d, 0xf621, 0xf608, 0xf585, +0xf608, 0xf585, 0xf4dc, 0xf432, 0xf4dc, 0xf432, 0xf59e, 0xf4cc, 0xf59e, 0xf4cc, 0xf53f, +0xf448, 0xf53f, 0xf448, 0xf479, 0xf35d, 0xf479, 0xf35d, 0xf587, 0xf449, 0xf587, 0xf449, +0xf587, 0xf449, 0xf4db, 0xf37e, 0xf4db, 0xf37e, 0xf879, 0xf703, 0xf879, 0xf703, 0xf86b, +0xf6df, 0xf86b, 0xf6df, 0xf7be, 0xf622, 0xf7be, 0xf622, 0xfb08, 0xf962, 0xfb08, 0xf962, +0xfb2c, 0xf982, 0xfb2c, 0xf982, 0xfb2c, 0xf982, 0xfc30, 0xfa87, 0xfc30, 0xfa87, 0xfd7b, +0xfbda, 0xfd7b, 0xfbda, 0xfec1, 0xfd2c, 0xfec1, 0xfd2c, 0x1a, 0xfe96, 0x1a, 0xfe96, +0x2f4, 0x184, 0x2f4, 0x184, 0x2f4, 0x184, 0x4c0, 0x367, 0x4c0, 0x367, 0x501, +0x3c1, 0x501, 0x3c1, 0x714, 0x5ec, 0x714, 0x5ec, 0x71e, 0x60e, 0x71e, 0x60e, +0x97d, 0x883, 0x97d, 0x883, 0xa5e, 0x975, 0xa5e, 0x975, 0xa5e, 0x975, 0xa77, +0x99c, 0xa77, 0x99c, 0xc5e, 0xb8b, 0xc5e, 0xb8b, 0xbb3, 0xae2, 0xbb3, 0xae2, +0xe2c, 0xd56, 0xe2c, 0xd56, 0xfd0, 0xeee, 0xfd0, 0xeee, 0x1013, 0xf1d, 0x1013, +0xf1d, 0x1013, 0xf1d, 0x10dc, 0xfcc, 0x10dc, 0xfcc, 0xfc2, 0xe91, 0xfc2, 0xe91, +0x12ba, 0x1163, 0x12ba, 0x1163, 0x14ed, 0x136b, 0x14ed, 0x136b, 0x16e1, 0x152f, 0x16e1, +0x152f, 0x16e1, 0x152f, 0x1987, 0x17a5, 0x1987, 0x17a5, 0x19e2, 0x17cd, 0x19e2, 0x17cd, +0x1c55, 0x1a0f, 0x1c55, 0x1a0f, 0x1e31, 0x1bbc, 0x1e31, 0x1bbc, 0x1f81, 0x1ce0, 0x1f81, +0x1ce0, 0x1ee5, 0x1c1e, 0x1ee5, 0x1c1e, 0x1ee5, 0x1c1e, 0x1f2c, 0x1c46, 0x1f2c, 0x1c46, +0x1ee7, 0x1be9, 0x1ee7, 0x1be9, 0x1f33, 0x1c25, 0x1f33, 0x1c25, 0x20a1, 0x1d8c, 0x20a1, +0x1d8c, 0x2030, 0x1d1e, 0x2030, 0x1d1e, 0x216b, 0x1e65, 0x216b, 0x1e65, 0x216b, 0x1e65, +0x1f83, 0x1c92, 0x1f83, 0x1c92, 0x20cb, 0x1df8, 0x20cb, 0x1df8, 0x21bb, 0x1f0d, 0x21bb, +0x1f0d, 0x2060, 0x1dde, 0x2060, 0x1dde, 0x1ff2, 0x1da1, 0x1ff2, 0x1da1, 0x1ff2, 0x1da1, +0x1c47, 0x1a2d, 0x1c47, 0x1a2d, 0x1c90, 0x1aad, 0x1c90, 0x1aad, 0x1a97, 0x18ee, 0x1a97, +0x18ee, 0x19c2, 0x1852, 0x19c2, 0x1852, 0x18dc, 0x17a2, 0x18dc, 0x17a2, 0x15cf, 0x14c9, +0x15cf, 0x14c9, 0x15cf, 0x14c9, 0x157f, 0x14a8, 0x157f, 0x14a8, 0x1355, 0x12a8, 0x1355, +0x12a8, 0x12de, 0x1255, 0x12de, 0x1255, 0xeb3, 0xe47, 0xeb3, 0xe47, 0xc5b, 0xc06, +0xc5b, 0xc06, 0xa82, 0xa3c, 0xa82, 0xa3c, 0xa82, 0xa3c, 0x8c7, 0x88b, 0x8c7, +0x88b, 0x7dc, 0x7a4, 0x7dc, 0x7a4, 0x570, 0x536, 0x570, 0x536, 0x546, 0x508, +0x546, 0x508, 0x31e, 0x2d8, 0x31e, 0x2d8, 0x31e, 0x2d8, 0x32a, 0x2db, 0x32a, +0x2db, 0x267, 0x20f, 0x267, 0x20f, 0x143, 0xe2, 0x143, 0xe2, 0xaa, 0x42, +0xaa, 0x42, 0xffd9, 0xff6e, 0xffd9, 0xff6e, 0x62, 0xfff8, 0x62, 0xfff8, 0x62, +0xfff8, 0x1, 0xff9d, 0x1, 0xff9d, 0xfe64, 0xfe0b, 0xfe64, 0xfe0b, 0xfe01, 0xfdb8, +0xfe01, 0xfdb8, 0xfd8c, 0xfd59, 0xfd8c, 0xfd59, 0xfd25, 0xfd0c, 0xfd25, 0xfd0c, 0xfb98, +0xfb9f, 0xfb98, 0xfb9f, 0xfb98, 0xfb9f, 0xfa5e, 0xfa89, 0xfa5e, 0xfa89, 0xfbc5, 0xfc17, +0xfbc5, 0xfc17, 0xfa65, 0xfae0, 0xfa65, 0xfae0, 0xf913, 0xf9b9, 0xf913, 0xf9b9, 0xf793, +0xf863, 0xf793, 0xf863, 0xf793, 0xf863, 0xf638, 0xf72f, 0xf638, 0xf72f, 0xf65e, 0xf77b, +0xf65e, 0xf77b, 0xf4ad, 0xf5ec, 0xf4ad, 0xf5ec, 0xf3d3, 0xf52e, 0xf3d3, 0xf52e, 0xf393, +0xf503, 0xf393, 0xf503, 0xf1ad, 0xf32c, 0xf1ad, 0xf32c, 0xf1ad, 0xf32c, 0xf25b, 0xf3e2, +0xf25b, 0xf3e2, 0xf137, 0xf2bd, 0xf137, 0xf2bd, 0xf053, 0xf1d2, 0xf053, 0xf1d2, 0xf0b1, +0xf220, 0xf0b1, 0xf220, 0xf0e6, 0xf23e, 0xf0e6, 0xf23e, 0xf150, 0xf289, 0xf150, 0xf289, +0xf150, 0xf289, 0xf082, 0xf198, 0xf082, 0xf198, 0xf12b, 0xf217, 0xf12b, 0xf217, 0xf1a4, +0xf263, 0xf1a4, 0xf263, 0xf310, 0xf39e, 0xf310, 0xf39e, 0xf4c7, 0xf523, 0xf4c7, 0xf523, +0xf4c7, 0xf523, 0xf764, 0xf78c, 0xf764, 0xf78c, 0xf869, 0xf85f, 0xf869, 0xf85f, 0xf9e0, +0xf9a4, 0xf9e0, 0xf9a4, 0xfb5b, 0xfaf0, 0xfb5b, 0xfaf0, 0xfbe8, 0xfb51, 0xfbe8, 0xfb51, +0xfd91, 0xfcd2, 0xfd91, 0xfcd2, 0xfd91, 0xfcd2, 0xfef6, 0xfe12, 0xfef6, 0xfe12, 0xc8, +0xffc5, 0xc8, 0xffc5, 0x2c1, 0x1a4, 0x2c1, 0x1a4, 0x5ec, 0x4b9, 0x5ec, 0x4b9, +0x780, 0x63b, 0x780, 0x63b, 0x82c, 0x6da, 0x82c, 0x6da, 0x82c, 0x6da, 0x90a, +0x7ae, 0x90a, 0x7ae, 0x877, 0x714, 0x877, 0x714, 0xa48, 0x8e1, 0xa48, 0x8e1, +0xa43, 0x8d9, 0xa43, 0x8d9, 0x96a, 0x7ff, 0x96a, 0x7ff, 0x96a, 0x7ff, 0xba3, +0xa38, 0xba3, 0xa38, 0xc15, 0xaaa, 0xc15, 0xaaa, 0xc73, 0xb08, 0xc73, 0xb08, +0xc41, 0xad5, 0xc41, 0xad5, 0xc9e, 0xb30, 0xc9e, 0xb30, 0xb7c, 0xa0b, 0xb7c, +0xa0b, 0xb7c, 0xa0b, 0x839, 0x6c6, 0x839, 0x6c6, 0x816, 0x6a0, 0x816, 0x6a0, +0xab4, 0x93a, 0xab4, 0x93a, 0x8fe, 0x783, 0x8fe, 0x783, 0x7de, 0x661, 0x7de, +0x661, 0x7de, 0x661, 0x7bd, 0x642, 0x7bd, 0x642, 0x715, 0x59f, 0x715, 0x59f, +0x705, 0x596, 0x705, 0x596, 0x5c7, 0x466, 0x5c7, 0x466, 0x6ed, 0x59e, 0x6ed, +0x59e, 0x518, 0x3e1, 0x518, 0x3e1, 0x518, 0x3e1, 0x427, 0x310, 0x427, 0x310, +0x4d1, 0x3e1, 0x4d1, 0x3e1, 0x33e, 0x27d, 0x33e, 0x27d, 0x18b, 0x101, 0x18b, +0x101, 0xa6, 0x5c, 0xa6, 0x5c, 0xfd18, 0xfd16, 0xfd18, 0xfd16, 0xfd18, 0xfd16, +0xfc01, 0xfc4f, 0xfc01, 0xfc4f, 0xf9de, 0xfa82, 0xf9de, 0xfa82, 0xf81b, 0xf91e, 0xf81b, +0xf91e, 0xf532, 0xf697, 0xf532, 0xf697, 0xf242, 0xf40f, 0xf242, 0xf40f, 0xf242, 0xf40f, +0xf14e, 0xf388, 0xf14e, 0xf388, 0xecc7, 0xef6e, 0xecc7, 0xef6e, 0xeb51, 0xee68, 0xeb51, +0xee68, 0xe6f7, 0xea7c, 0xe6f7, 0xea7c, 0xe50e, 0xe8ff, 0xe50e, 0xe8ff, 0xe1a2, 0xe5fc, +0xe1a2, 0xe5fc, 0xe1a2, 0xe5fc, 0xe0ad, 0xe56c, 0xe0ad, 0xe56c, 0xdd5e, 0xe27a, 0xdd5e, +0xe27a, 0xdb07, 0xe07a, 0xdb07, 0xe07a, 0xdba6, 0xe167, 0xdba6, 0xe167, 0xd7c7, 0xddcc, +0xd7c7, 0xddcc, 0xd6b6, 0xdcf4, 0xd6b6, 0xdcf4, 0xd6b6, 0xdcf4, 0xd3b2, 0xda20, 0xd3b2, +0xda20, 0xd421, 0xdab2, 0xd421, 0xdab2, 0xd18e, 0xd837, 0xd18e, 0xd837, 0xd0f5, 0xd7aa, +0xd0f5, 0xd7aa, 0xcf59, 0xd60e, 0xcf59, 0xd60e, 0xcf59, 0xd60e, 0xccac, 0xd357, 0xccac, +0xd357, 0xcf14, 0xd5a9, 0xcf14, 0xd5a9, 0xcfe0, 0xd656, 0xcfe0, 0xd656, 0xd1c9, 0xd818, +0xd1c9, 0xd818, 0xd161, 0xd780, 0xd161, 0xd780, 0xd5bf, 0xdba7, 0xd5bf, 0xdba7, 0xd5bf, +0xdba7, 0xd7c7, 0xdd72, 0xd7c7, 0xdd72, 0xd5d3, 0xdb3d, 0xd5d3, 0xdb3d, 0xdaf4, 0xe019, +0xdaf4, 0xe019, 0xdb7a, 0xe057, 0xdb7a, 0xe057, 0xdc0f, 0xe0a3, 0xdc0f, 0xe0a3, 0xdd7b, +0xe1c5, 0xdd7b, 0xe1c5, 0xdd7b, 0xe1c5, 0xde51, 0xe250, 0xde51, 0xe250, 0xde9b, 0xe251, +0xde9b, 0xe251, 0xe021, 0xe38f, 0xe021, 0xe38f, 0xe2d1, 0xe5f8, 0xe2d1, 0xe5f8, 0xe445, +0xe725, 0xe445, 0xe725, 0xe445, 0xe725, 0xe955, 0xebf2, 0xe955, 0xebf2, 0xea24, 0xec7f, +0xea24, 0xec7f, 0xec27, 0xee41, 0xec27, 0xee41, 0xed78, 0xef52, 0xed78, 0xef52, 0xef64, +0xf0ff, 0xef64, 0xf0ff, 0xf26a, 0xf3c6, 0xf26a, 0xf3c6, 0xf26a, 0xf3c6, 0xf555, 0xf671, +0xf555, 0xf671, 0xf94a, 0xfa27, 0xf94a, 0xfa27, 0xfad0, 0xfb6b, 0xfad0, 0xfb6b, 0xff40, +0xff99, 0xff40, 0xff99, 0x2cb, 0x2df, 0x2cb, 0x2df, 0x4de, 0x4ac, 0x4de, 0x4ac, +0x4de, 0x4ac, 0x998, 0x91d, 0x998, 0x91d, 0xa7a, 0x9b5, 0xa7a, 0x9b5, 0xd46, +0xc34, 0xd46, 0xc34, 0x1069, 0xf0b, 0x1069, 0xf0b, 0x1219, 0x106d, 0x1219, 0x106d, +0x1219, 0x106d, 0x15ed, 0x13f3, 0x15ed, 0x13f3, 0x1747, 0x1501, 0x1747, 0x1501, 0x1b93, +0x1902, 0x1b93, 0x1902, 0x1b78, 0x18a1, 0x1b78, 0x18a1, 0x1e06, 0x1aed, 0x1e06, 0x1aed, +0x1e8f, 0x1b38, 0x1e8f, 0x1b38, 0x1e8f, 0x1b38, 0x1fa5, 0x1c18, 0x1fa5, 0x1c18, 0x2106, +0x1d4a, 0x2106, 0x1d4a, 0x1e1d, 0x1a3c, 0x1e1d, 0x1a3c, 0x1ea0, 0x1aa3, 0x1ea0, 0x1aa3, +0x1ddb, 0x19cc, 0x1ddb, 0x19cc, 0x1e36, 0x1a21, 0x1e36, 0x1a21, 0x1e36, 0x1a21, 0x1d8c, +0x197c, 0x1d8c, 0x197c, 0x1cb0, 0x18af, 0x1cb0, 0x18af, 0x1b3c, 0x1756, 0x1b3c, 0x1756, +0x1d4c, 0x198c, 0x1d4c, 0x198c, 0x1bf8, 0x1867, 0x1bf8, 0x1867, 0x1bf8, 0x1867, 0x1989, +0x1631, 0x1989, 0x1631, 0x1686, 0x136e, 0x1686, 0x136e, 0x11ba, 0xeea, 0x11ba, 0xeea, +0x10cb, 0xe48, 0x10cb, 0xe48, 0xe66, 0xc33, 0xe66, 0xc33, 0xaf0, 0x910, 0xaf0, +0x910, 0xaf0, 0x910, 0xada, 0x94e, 0xada, 0x94e, 0x883, 0x749, 0x883, 0x749, +0x63e, 0x554, 0x63e, 0x554, 0x580, 0x4e2, 0x580, 0x4e2, 0x3f7, 0x3a1, 0x3f7, +0x3a1, 0x27f, 0x26a, 0x27f, 0x26a, 0x27f, 0x26a, 0xfde7, 0xfe0d, 0xfde7, 0xfe0d, +0xfd0c, 0xfd65, 0xfd0c, 0xfd65, 0xfabb, 0xfb40, 0xfabb, 0xfb40, 0xf935, 0xf9dd, 0xf935, +0xf9dd, 0xf8c0, 0xf984, 0xf8c0, 0xf984, 0xf8c0, 0xf984, 0xf810, 0xf8e9, 0xf810, 0xf8e9, +0xf790, 0xf877, 0xf790, 0xf877, 0xf7dd, 0xf8cc, 0xf7dd, 0xf8cc, 0xf5a9, 0xf69a, 0xf5a9, +0xf69a, 0xf4a9, 0xf598, 0xf4a9, 0xf598, 0xf5ac, 0xf696, 0xf5ac, 0xf696, 0xf5ac, 0xf696, +0xf438, 0xf51b, 0xf438, 0xf51b, 0xf4ea, 0xf5c5, 0xf4ea, 0xf5c5, 0xf5fc, 0xf6cd, 0xf5fc, +0xf6cd, 0xf71a, 0xf7e4, 0xf71a, 0xf7e4, 0xf5e1, 0xf6a3, 0xf5e1, 0xf6a3, 0xf752, 0xf80f, +0xf752, 0xf80f, 0xf752, 0xf80f, 0xf84f, 0xf909, 0xf84f, 0xf909, 0xf877, 0xf92f, 0xf877, +0xf92f, 0xfa7c, 0xfb35, 0xfa7c, 0xfb35, 0xfd0a, 0xfdc6, 0xfd0a, 0xfdc6, 0xfd83, 0xfe43, +0xfd83, 0xfe43, 0xfd83, 0xfe43, 0xfec7, 0xff8c, 0xfec7, 0xff8c, 0x3a, 0x103, 0x3a, +0x103, 0x73, 0x140, 0x73, 0x140, 0xffbb, 0x8a, 0xffbb, 0x8a, 0, 0xd0, +0, 0xd0, 0xfe92, 0xff5e, 0xfe92, 0xff5e, 0xfe92, 0xff5e, 0xfc4a, 0xfd0f, 0xfc4a, +0xfd0f, 0xfd05, 0xfdbf, 0xfd05, 0xfdbf, 0xfd22, 0xfdca, 0xfd22, 0xfdca, 0xff2a, 0xffbc, +0xff2a, 0xffbc, 0xfee1, 0xff57, 0xfee1, 0xff57, 0xffb3, 0x7, 0xffb3, 0x7, 0xffb3, +0x7, 0xffd4, 0x2, 0xffd4, 0x2, 0xfd7e, 0xfd81, 0xfd7e, 0xfd81, 0xfca1, 0xfc75, +0xfca1, 0xfc75, 0xfed4, 0xfe76, 0xfed4, 0xfe76, 0xff60, 0xfece, 0xff60, 0xfece, 0xff60, +0xfece, 0xffad, 0xfee5, 0xffad, 0xfee5, 0xfef1, 0xfdf4, 0xfef1, 0xfdf4, 0xfff5, 0xfec6, +0xfff5, 0xfec6, 0x10b, 0xffac, 0x10b, 0xffac, 0x128, 0xff9e, 0x128, 0xff9e, 0x2f0, +0x13f, 0x2f0, 0x13f, 0x2f0, 0x13f, 0x20d, 0x3e, 0x20d, 0x3e, 0x327, 0x140, +0x327, 0x140, 0x3ad, 0x1b7, 0x3ad, 0x1b7, 0x588, 0x38c, 0x588, 0x38c, 0x694, +0x49a, 0x694, 0x49a, 0x694, 0x49a, 0x797, 0x5a9, 0x797, 0x5a9, 0x918, 0x73d, +0x918, 0x73d, 0x92d, 0x76e, 0x92d, 0x76e, 0x703, 0x568, 0x703, 0x568, 0x671, +0x500, 0x671, 0x500, 0x691, 0x54f, 0x691, 0x54f, 0x691, 0x54f, 0x63c, 0x52e, +0x63c, 0x52e, 0x64a, 0x571, 0x64a, 0x571, 0x7ab, 0x709, 0x7ab, 0x709, 0x7f4, +0x788, 0x7f4, 0x788, 0x9cc, 0x994, 0x9cc, 0x994, 0xa2e, 0xa27, 0xa2e, 0xa27, +0xa2e, 0xa27, 0x93c, 0x961, 0x93c, 0x961, 0x9d9, 0xa25, 0x9d9, 0xa25, 0x7fc, +0x867, 0x7fc, 0x867, 0x938, 0x9ba, 0x938, 0x9ba, 0x68b, 0x71d, 0x68b, 0x71d, +0x68b, 0x71d, 0x862, 0x8fa, 0x862, 0x8fa, 0x5a6, 0x63c, 0x5a6, 0x63c, 0x400, +0x48c, 0x400, 0x48c, 0x637, 0x6b1, 0x637, 0x6b1, 0x6c5, 0x726, 0x6c5, 0x726, +0x70b, 0x74b, 0x70b, 0x74b, 0x70b, 0x74b, 0x84d, 0x867, 0x84d, 0x867, 0xb83, +0xb73, 0xb83, 0xb73, 0xb8e, 0xb50, 0xb8e, 0xb50, 0xea6, 0xe38, 0xea6, 0xe38, +0xcce, 0xc2e, 0xcce, 0xc2e, 0xe3b, 0xd69, 0xe3b, 0xd69, 0xe3b, 0xd69, 0xefe, +0xdfa, 0xefe, 0xdfa, 0xedf, 0xdab, 0xedf, 0xdab, 0x1124, 0xfc2, 0x1124, 0xfc2, +0x1052, 0xec5, 0x1052, 0xec5, 0xf79, 0xdc4, 0xf79, 0xdc4, 0xf79, 0xdc4, 0x1210, +0x1037, 0x1210, 0x1037, 0x12bc, 0x10c3, 0x12bc, 0x10c3, 0x1487, 0x1270, 0x1487, 0x1270, +0x1562, 0x1331, 0x1562, 0x1331, 0x154f, 0x1306, 0x154f, 0x1306, 0x165b, 0x13fd, 0x165b, +0x13fd, 0x165b, 0x13fd, 0x151a, 0x12a8, 0x151a, 0x12a8, 0x1729, 0x14a5, 0x1729, 0x14a5, +0x1646, 0x13b0, 0x1646, 0x13b0, 0x13e8, 0x1140, 0x13e8, 0x1140, 0xfa1, 0xce7, 0xfa1, +0xce7, 0x104d, 0xd80, 0x104d, 0xd80, 0x104d, 0xd80, 0x11cf, 0xeed, 0x11cf, 0xeed, +0xffa, 0xd02, 0xffa, 0xd02, 0xf91, 0xc81, 0xf91, 0xc81, 0xf94, 0xc6b, 0xf94, +0xc6b, 0xf76, 0xc32, 0xf76, 0xc32, 0xf76, 0xc32, 0xcd2, 0x972, 0xcd2, 0x972, +0xa4f, 0x6d3, 0xa4f, 0x6d3, 0xb84, 0x7ec, 0xb84, 0x7ec, 0x9ed, 0x63a, 0x9ed, +0x63a, 0xa01, 0x634, 0xa01, 0x634, 0xbaa, 0x7c6, 0xbaa, 0x7c6, 0xbaa, 0x7c6, +0xadb, 0x6e3, 0xadb, 0x6e3, 0xc21, 0x819, 0xc21, 0x819, 0xbd4, 0x7c3, 0xbd4, +0x7c3, 0xdd7, 0x9c2, 0xdd7, 0x9c2, 0xf54, 0xb43, 0xf54, 0xb43, 0xde4, 0x9de, +0xde4, 0x9de, 0xde4, 0x9de, 0xe2a, 0xa38, 0xe2a, 0xa38, 0x1082, 0xcac, 0x1082, +0xcac, 0xfc0, 0xc10, 0xfc0, 0xc10, 0x11b1, 0xe30, 0x11b1, 0xe30, 0x1152, 0xe09, +0x1152, 0xe09, 0x1152, 0xe09, 0x1112, 0xe09, 0x1112, 0xe09, 0xffb, 0xd3b, 0xffb, +0xd3b, 0xe0f, 0xba0, 0xe0f, 0xba0, 0xd7c, 0xb64, 0xd7c, 0xb64, 0xb17, 0x95b, +0xb17, 0x95b, 0x9b9, 0x85d, 0x9b9, 0x85d, 0x9b9, 0x85d, 0x5f1, 0x4f9, 0x5f1, +0x4f9, 0x57c, 0x4e9, 0x57c, 0x4e9, 0x3f3, 0x3c3, 0x3f3, 0x3c3, 0x230, 0x264, +0x230, 0x264, 0x111, 0x1a4, 0x111, 0x1a4, 0xfe43, 0xff30, 0xfe43, 0xff30, 0xfe43, +0xff30, 0xfb43, 0xfc85, 0xfb43, 0xfc85, 0xfa2b, 0xfbba, 0xfa2b, 0xfbba, 0xf748, 0xf91a, +0xf748, 0xf91a, 0xf569, 0xf776, 0xf569, 0xf776, 0xf1b4, 0xf3f1, 0xf1b4, 0xf3f1, 0xf1b4, +0xf3f1, 0xf3ab, 0xf60e, 0xf3ab, 0xf60e, 0xf2a7, 0xf524, 0xf2a7, 0xf524, 0xefa1, 0xf22d, +0xefa1, 0xf22d, 0xf1bf, 0xf44f, 0xf1bf, 0xf44f, 0xf0a6, 0xf331, 0xf0a6, 0xf331, 0xf15a, +0xf3d6, 0xf15a, 0xf3d6, 0xf15a, 0xf3d6, 0xee49, 0xf0ad, 0xee49, 0xf0ad, 0xf0f4, 0xf339, +0xf0f4, 0xf339, 0xf29f, 0xf4c0, 0xf29f, 0xf4c0, 0xf6fe, 0xf8f7, 0xf6fe, 0xf8f7, 0xf7d4, +0xf9a1, 0xf7d4, 0xf9a1, 0xf8f4, 0xfa93, 0xf8f4, 0xfa93, 0xf8f4, 0xfa93, 0xfd23, 0xfe95, +0xfd23, 0xfe95, 0xff12, 0x58, 0xff12, 0x58, 0x2b6, 0x3d3, 0x2b6, 0x3d3, 0x2a0, +0x397, 0x2a0, 0x397, 0x294, 0x369, 0x294, 0x369, 0x294, 0x369, 0x37b, 0x435, +0x37b, 0x435, 0x439, 0x4dc, 0x439, 0x4dc, 0x4b2, 0x544, 0x4b2, 0x544, 0x675, +0x6fb, 0x675, 0x6fb, 0x476, 0x4f4, 0x476, 0x4f4, 0x628, 0x6a5, 0x628, 0x6a5, +0x628, 0x6a5, 0x45c, 0x4d9, 0x45c, 0x4d9, 0x49, 0xcb, 0x49, 0xcb, 0xfe6c, +0xfef4, 0xfe6c, 0xfef4, 0xfcf8, 0xfd86, 0xfcf8, 0xfd86, 0xfb25, 0xfbb9, 0xfb25, 0xfbb9, +0xfd05, 0xfd9f, 0xfd05, 0xfd9f, 0xfd05, 0xfd9f, 0xfd50, 0xfdee, 0xfd50, 0xfdee, 0xf9dc, +0xfa7b, 0xf9dc, 0xfa7b, 0xf9d4, 0xfa70, 0xf9d4, 0xfa70, 0xf845, 0xf8dc, 0xf845, 0xf8dc, +0xf834, 0xf8c2, 0xf834, 0xf8c2, 0xf834, 0xf8c2, 0xf62f, 0xf6b2, 0xf62f, 0xf6b2, 0xf5b5, +0xf62b, 0xf5b5, 0xf62b, 0xf69f, 0xf705, 0xf69f, 0xf705, 0xf488, 0xf4dd, 0xf488, 0xf4dd, +0xf45c, 0xf4a1, 0xf45c, 0xf4a1, 0xf6c4, 0xf6fb, 0xf6c4, 0xf6fb, 0xf6c4, 0xf6fb, 0xf6d4, +0xf700, 0xf6d4, 0xf700, 0xf754, 0xf779, 0xf754, 0xf779, 0xf544, 0xf567, 0xf544, 0xf567, +0xf4cb, 0xf4f2, 0xf4cb, 0xf4f2, 0xf564, 0xf597, 0xf564, 0xf597, 0xf48f, 0xf4d6, 0xf48f, +0xf4d6, 0xf48f, 0xf4d6, 0xf4c0, 0xf524, 0xf4c0, 0xf524, 0xf60c, 0xf696, 0xf60c, 0xf696, +0xf56b, 0xf623, 0xf56b, 0xf623, 0xf220, 0xf30f, 0xf220, 0xf30f, 0xf12d, 0xf25a, 0xf12d, +0xf25a, 0xf12d, 0xf25a, 0xeff9, 0xf16b, 0xeff9, 0xf16b, 0xee7a, 0xf036, 0xee7a, 0xf036, +0xec3e, 0xee48, 0xec3e, 0xee48, 0xe8b5, 0xeb0f, 0xe8b5, 0xeb0f, 0xe650, 0xe8fb, 0xe650, +0xe8fb, 0xe4d8, 0xe7d3, 0xe4d8, 0xe7d3, 0xe4d8, 0xe7d3, 0xe271, 0xe5b8, 0xe271, 0xe5b8, +0xe40a, 0xe798, 0xe40a, 0xe798, 0xe026, 0xe3f5, 0xe026, 0xe3f5, 0xde5c, 0xe264, 0xde5c, +0xe264, 0xde3d, 0xe276, 0xde3d, 0xe276, 0xde3d, 0xe276, 0xdcc4, 0xe124, 0xdcc4, 0xe124, +0xdbf4, 0xe070, 0xdbf4, 0xe070, 0xd966, 0xddf4, 0xd966, 0xddf4, 0xd893, 0xdd29, 0xd893, +0xdd29, 0xda3a, 0xdecd, 0xda3a, 0xdecd, 0xdaa3, 0xdf2b, 0xdaa3, 0xdf2b, 0xdaa3, 0xdf2b, +0xdb04, 0xdf76, 0xdb04, 0xdf76, 0xdc9b, 0xe0f1, 0xdc9b, 0xe0f1, 0xdb40, 0xdf73, 0xdb40, +0xdf73, 0xded7, 0xe2e2, 0xded7, 0xe2e2, 0xddeb, 0xe1c8, 0xddeb, 0xe1c8, 0xe1ef, 0xe59d, +0xe1ef, 0xe59d, 0xe1ef, 0xe59d, 0xe417, 0xe794, 0xe417, 0xe794, 0xe4b1, 0xe7fa, 0xe4b1, +0xe7fa, 0xe5f5, 0xe90b, 0xe5f5, 0xe90b, 0xe845, 0xeb29, 0xe845, 0xeb29, 0xec55, 0xef07, +0xec55, 0xef07, 0xec55, 0xef07, 0xeeba, 0xf13c, 0xeeba, 0xf13c, 0xf109, 0xf35b, 0xf109, +0xf35b, 0xeff6, 0xf219, 0xeff6, 0xf219, 0xf186, 0xf37c, 0xf186, 0xf37c, 0xf082, 0xf249, +0xf082, 0xf249, 0xf4b7, 0xf651, 0xf4b7, 0xf651, 0xf4b7, 0xf651, 0xf590, 0xf6fb, 0xf590, +0xf6fb, 0xf6e8, 0xf822, 0xf6e8, 0xf822, 0xf9ea, 0xfaf2, 0xf9ea, 0xfaf2, 0xfe01, 0xfed5, +0xfe01, 0xfed5, 0xfce6, 0xfd82, 0xfce6, 0xfd82, 0xfb1e, 0xfb80, 0xfb1e, 0xfb80, 0xfb1e, +0xfb80, 0xfd66, 0xfd8a, 0xfd66, 0xfd8a, 0xfd73, 0xfd58, 0xfd73, 0xfd58, 0x4, 0xffa6, +0x4, 0xffa6, 0x1f0, 0x14e, 0x1f0, 0x14e, 0x4cb, 0x3e3, 0x4cb, 0x3e3, 0x4cb, +0x3e3, 0x5f4, 0x4c5, 0x5f4, 0x4c5, 0xb5a, 0x9e4, 0xb5a, 0x9e4, 0xf1f, 0xd64, +0xf1f, 0xd64, 0x10bc, 0xebd, 0x10bc, 0xebd, 0x11c1, 0xf82, 0x11c1, 0xf82, 0x13f5, +0x1179, 0x13f5, 0x1179, 0x13f5, 0x1179, 0x164f, 0x139b, 0x164f, 0x139b, 0x1820, 0x1539, +0x1820, 0x1539, 0x1960, 0x164c, 0x1960, 0x164c, 0x1b7f, 0x1845, 0x1b7f, 0x1845, 0x1ce0, +0x1987, 0x1ce0, 0x1987, 0x1c5b, 0x18ea, 0x1c5b, 0x18ea, 0x1c5b, 0x18ea, 0x1ea7, 0x1b26, +0x1ea7, 0x1b26, 0x2060, 0x1cd7, 0x2060, 0x1cd7, 0x200b, 0x1c81, 0x200b, 0x1c81, 0x1cf7, +0x1973, 0x1cf7, 0x1973, 0x1d0e, 0x1997, 0x1d0e, 0x1997, 0x1d0e, 0x1997, 0x1d54, 0x19f2, +0x1d54, 0x19f2, 0x19cd, 0x1685, 0x19cd, 0x1685, 0x1920, 0x15f8, 0x1920, 0x15f8, 0x19dc, +0x16db, 0x19dc, 0x16db, 0x1906, 0x1632, 0x1906, 0x1632, 0x17eb, 0x1549, 0x17eb, 0x1549, +0x17eb, 0x1549, 0x15be, 0x1352, 0x15be, 0x1352, 0x13e1, 0x11b0, 0x13e1, 0x11b0, 0xdc0, +0xbce, 0xdc0, 0xbce, 0x9e4, 0x834, 0x9e4, 0x834, 0x821, 0x6b6, 0x821, 0x6b6, +0x5fa, 0x4d6, 0x5fa, 0x4d6, 0x5fa, 0x4d6, 0x45c, 0x381, 0x45c, 0x381, 0x38c, +0x2fb, 0x38c, 0x2fb, 0x241, 0x1fb, 0x241, 0x1fb, 0x97, 0x9a, 0x97, 0x9a, +0xfdf3, 0xfe3e, 0xfdf3, 0xfe3e, 0xfdf3, 0xfe3e, 0xfc26, 0xfcb7, 0xfc26, 0xfcb7, 0xf99a, +0xfa6d, 0xf99a, 0xfa6d, 0xf712, 0xf821, 0xf712, 0xf821, 0xf7f0, 0xf937, 0xf7f0, 0xf937, +0xf490, 0xf606, 0xf490, 0xf606, 0xf5a1, 0xf740, 0xf5a1, 0xf740, 0xf5a1, 0xf740, 0xf104, +0xf2c2, 0xf104, 0xf2c2, 0xefbc, 0xf190, 0xefbc, 0xf190, 0xefff, 0xf1df, 0xefff, 0xf1df, +0xedd2, 0xefb5, 0xedd2, 0xefb5, 0xede8, 0xefc4, 0xede8, 0xefc4, 0xede7, 0xefb2, 0xede7, +0xefb2, 0xede7, 0xefb2, 0xed6a, 0xef1c, 0xed6a, 0xef1c, 0xe9f2, 0xeb83, 0xe9f2, 0xeb83, +0xe9f7, 0xeb5f, 0xe9f7, 0xeb5f, 0xee39, 0xef73, 0xee39, 0xef73, 0xef14, 0xf01c, 0xef14, +0xf01c, 0xef14, 0xf01c, 0xec17, 0xecec, 0xec17, 0xecec, 0xee92, 0xef32, 0xee92, 0xef32, +0xeda8, 0xee15, 0xeda8, 0xee15, 0xf1af, 0xf1eb, 0xf1af, 0xf1eb, 0xefba, 0xefc9, 0xefba, +0xefc9, 0xf3fe, 0xf3e6, 0xf3fe, 0xf3e6, 0xf3fe, 0xf3e6, 0xf8cc, 0xf893, 0xf8cc, 0xf893, +0xf998, 0xf947, 0xf998, 0xf947, 0xfd18, 0xfcb7, 0xfd18, 0xfcb7, 0xfc47, 0xfbdf, 0xfc47, +0xfbdf, 0x14, 0xffac, 0x14, 0xffac, 0xfdd4, 0xfd75, 0xfdd4, 0xfd75, 0xfdd4, 0xfd75, +0x12e, 0xdf, 0x12e, 0xdf, 0x2c, 0xfff4, 0x2c, 0xfff4, 0xfef3, 0xfed8, 0xfef3, +0xfed8, 0x228, 0x22c, 0x228, 0x22c, 0x34c, 0x373, 0x34c, 0x373, 0x34c, 0x373, +0x5a0, 0x5e9, 0x5a0, 0x5e9, 0x64d, 0x6b9, 0x64d, 0x6b9, 0x7af, 0x83b, 0x7af, +0x83b, 0x826, 0x8ce, 0x826, 0x8ce, 0x6f4, 0x7b4, 0x6f4, 0x7b4, 0x8f3, 0x9c4, +0x8f3, 0x9c4, 0x8f3, 0x9c4, 0x8ec, 0x9c9, 0x8ec, 0x9c9, 0x9b0, 0xa93, 0x9b0, +0xa93, 0xad0, 0xbb1, 0xad0, 0xbb1, 0x920, 0x9fa, 0x920, 0x9fa, 0xb86, 0xc53, +0xb86, 0xc53, 0xa00, 0xaba, 0xa00, 0xaba, 0xa00, 0xaba, 0xb86, 0xc2a, 0xb86, +0xc2a, 0xbe9, 0xc74, 0xbe9, 0xc74, 0xb72, 0xbe3, 0xb72, 0xbe3, 0xd22, 0xd79, +0xd22, 0xd79, 0xc61, 0xc9e, 0xc61, 0xc9e, 0xc61, 0xc9e, 0xc92, 0xcb8, 0xc92, +0xcb8, 0xc61, 0xc74, 0xc61, 0xc74, 0xc0d, 0xc0f, 0xc0d, 0xc0f, 0xb05, 0xafc, +0xb05, 0xafc, 0xba9, 0xb99, 0xba9, 0xb99, 0xbec, 0xbdb, 0xbec, 0xbdb, 0xbec, +0xbdb, 0xa50, 0xa41, 0xa50, 0xa41, 0xb3b, 0xb32, 0xb3b, 0xb32, 0xbc7, 0xbc8, +0xbc7, 0xbc8, 0xd46, 0xd53, 0xd46, 0xd53, 0xd3a, 0xd54, 0xd3a, 0xd54, 0xe15, +0xe3b, 0xe15, 0xe3b, 0xe15, 0xe3b, 0xe04, 0xe36, 0xe04, 0xe36, 0xd6f, 0xda9, +0xd6f, 0xda9, 0xf05, 0xf44, 0xf05, 0xf44, 0xcc8, 0xd06, 0xcc8, 0xd06, 0xd7c, +0xdb3, 0xd7c, 0xdb3, 0xd7c, 0xdb3, 0xbef, 0xc18, 0xbef, 0xc18, 0xae2, 0xaf7, +0xae2, 0xaf7, 0xa23, 0xa1c, 0xa23, 0xa1c, 0x951, 0x927, 0x951, 0x927, 0x738, +0x6e4, 0x738, 0x6e4, 0x66f, 0x5eb, 0x66f, 0x5eb, 0x66f, 0x5eb, 0x511, 0x457, +0x511, 0x457, 0x650, 0x55b, 0x650, 0x55b, 0x9e3, 0x8b1, 0x9e3, 0x8b1, 0x8df, +0x76c, 0x8df, 0x76c, 0x7e9, 0x635, 0x7e9, 0x635, 0x7e9, 0x635, 0x8b0, 0x6bc, +0x8b0, 0x6bc, 0xb25, 0x8f2, 0xb25, 0x8f2, 0x9e2, 0x772, 0x9e2, 0x772, 0xb9b, +0x8f2, 0xb9b, 0x8f2, 0x9bc, 0x6de, 0x9bc, 0x6de, 0xb57, 0x849, 0xb57, 0x849, +0xb57, 0x849, 0xb66, 0x82f, 0xb66, 0x82f, 0xbe1, 0x885, 0xbe1, 0x885, 0xb0b, +0x790, 0xb0b, 0x790, 0xa37, 0x6a4, 0xa37, 0x6a4, 0xcab, 0x905, 0xcab, 0x905, +0xcd6, 0x922, 0xcd6, 0x922, 0xcd6, 0x922, 0xefb, 0xb3d, 0xefb, 0xb3d, 0xcef, +0x92c, 0xcef, 0x92c, 0xd75, 0x9b0, 0xd75, 0x9b0, 0xa7d, 0x6b9, 0xa7d, 0x6b9, +0xc08, 0x847, 0xc08, 0x847, 0xc08, 0x847, 0xa3b, 0x67f, 0xa3b, 0x67f, 0x901, +0x549, 0x901, 0x549, 0xa09, 0x658, 0xa09, 0x658, 0x9da, 0x62f, 0x9da, 0x62f, +0xbc0, 0x81b, 0xbc0, 0x81b, 0x9a8, 0x609, 0x9a8, 0x609, 0x9a8, 0x609, 0xb37, +0x79d, 0xb37, 0x79d, 0xa99, 0x704, 0xa99, 0x704, 0x80e, 0x47e, 0x80e, 0x47e, +0x92b, 0x59f, 0x92b, 0x59f, 0x9df, 0x659, 0x9df, 0x659, 0x8ff, 0x57f, 0x8ff, +0x57f, 0x8ff, 0x57f, 0xa33, 0x6b9, 0xa33, 0x6b9, 0x92a, 0x5b9, 0x92a, 0x5b9, +0x9c1, 0x65b, 0x9c1, 0x65b, 0xac9, 0x771, 0xac9, 0x771, 0xccc, 0x985, 0xccc, +0x985, 0xccc, 0x985, 0xcd0, 0x99f, 0xcd0, 0x99f, 0xd66, 0xa50, 0xd66, 0xa50, +0xf51, 0xc5b, 0xf51, 0xc5b, 0xeb3, 0xbe2, 0xeb3, 0xbe2, 0xf48, 0xca3, 0xf48, +0xca3, 0xec6, 0xc55, 0xec6, 0xc55, 0xec6, 0xc55, 0x113c, 0xf05, 0x113c, 0xf05, +0x100c, 0xe18, 0x100c, 0xe18, 0xf95, 0xdeb, 0xf95, 0xdeb, 0xf16, 0xdbe, 0xf16, +0xdbe, 0xde9, 0xceb, 0xde9, 0xceb, 0x102b, 0xf8e, 0x102b, 0xf8e, 0x102b, 0xf8e, +0xaa9, 0xa74, 0xaa9, 0xa74, 0x9cd, 0xa05, 0x9cd, 0xa05, 0x805, 0x8b0, 0x805, +0x8b0, 0x55f, 0x680, 0x55f, 0x680, 0x6d0, 0x869, 0x6d0, 0x869, 0x6d0, 0x869, +0x189, 0x39a, 0x189, 0x39a, 0x169, 0x3f1, 0x169, 0x3f1, 0xffc9, 0x2c4, 0xffc9, +0x2c4, 0xfed0, 0x239, 0xfed0, 0x239, 0xfde8, 0x1b7, 0xfde8, 0x1b7, 0xfbb1, 0xffdc, +0xfbb1, 0xffdc, 0xfbb1, 0xffdc, 0xfc05, 0x81, 0xfc05, 0x81, 0xfade, 0xff9c, 0xfade, +0xff9c, 0xfa14, 0xff06, 0xfa14, 0xff06, 0xf7f1, 0xfd07, 0xf7f1, 0xfd07, 0xf6b2, 0xfbdb, +0xf6b2, 0xfbdb, 0xf7bf, 0xfce8, 0xf7bf, 0xfce8, 0xf7bf, 0xfce8, 0xf751, 0xfc6a, 0xf751, +0xfc6a, 0xf77c, 0xfc73, 0xf77c, 0xfc73, 0xf92a, 0xfdef, 0xf92a, 0xfdef, 0xf98b, 0xfe0d, +0xf98b, 0xfe0d, 0xfa0b, 0xfe3f, 0xfa0b, 0xfe3f, 0xfa0b, 0xfe3f, 0xf97b, 0xfd55, 0xf97b, +0xfd55, 0xfe42, 0x1b9, 0xfe42, 0x1b9, 0xfede, 0x1ed, 0xfede, 0x1ed, 0x1b3, 0x455, +0x1b3, 0x455, 0x1ec, 0x421, 0x1ec, 0x421, 0x25f, 0x42a, 0x25f, 0x42a, 0x25f, +0x42a, 0x4eb, 0x650, 0x4eb, 0x650, 0x353, 0x45a, 0x353, 0x45a, 0x655, 0x708, +0x655, 0x708, 0x466, 0x4ce, 0x466, 0x4ce, 0x5b8, 0x5e3, 0x5b8, 0x5e3, 0x429, +0x424, 0x429, 0x424, 0x429, 0x424, 0x418, 0x3f0, 0x418, 0x3f0, 0x228, 0x1ea, +0x228, 0x1ea, 0xa1, 0x59, 0xa1, 0x59, 0xff28, 0xfee1, 0xff28, 0xfee1, 0xfc00, +0xfbc4, 0xfc00, 0xfbc4, 0xfc00, 0xfbc4, 0xfe32, 0xfe08, 0xfe32, 0xfe08, 0xfc63, 0xfc50, +0xfc63, 0xfc50, 0xfbcf, 0xfbd7, 0xfbcf, 0xfbd7, 0xfcc6, 0xfcea, 0xfcc6, 0xfcea, 0xfc8f, +0xfcce, 0xfc8f, 0xfcce, 0xfa55, 0xfaac, 0xfa55, 0xfaac, 0xfa55, 0xfaac, 0xf9d6, 0xfa41, +0xf9d6, 0xfa41, 0xf857, 0xf8d1, 0xf857, 0xf8d1, 0xf7e3, 0xf865, 0xf7e3, 0xf865, 0xf698, +0xf71c, 0xf698, 0xf71c, 0xf7ea, 0xf869, 0xf7ea, 0xf869, 0xf744, 0xf7ba, 0xf744, 0xf7ba, +0xf744, 0xf7ba, 0xf3ea, 0xf453, 0xf3ea, 0xf453, 0xf538, 0xf590, 0xf538, 0xf590, 0xf1b3, +0xf1fa, 0xf1b3, 0xf1fa, 0xf1d5, 0xf20b, 0xf1d5, 0xf20b, 0xf46f, 0xf498, 0xf46f, 0xf498, +0xf46f, 0xf498, 0xf279, 0xf299, 0xf279, 0xf299, 0xf086, 0xf0a5, 0xf086, 0xf0a5, 0xed9c, +0xedc3, 0xed9c, 0xedc3, 0xed56, 0xed8f, 0xed56, 0xed8f, 0xec79, 0xeccf, 0xec79, 0xeccf, +0xe89f, 0xe91e, 0xe89f, 0xe91e, 0xe89f, 0xe91e, 0xe96b, 0xea1f, 0xe96b, 0xea1f, 0xe6fa, +0xe7ed, 0xe6fa, 0xe7ed, 0xe3d3, 0xe510, 0xe3d3, 0xe510, 0xe2fd, 0xe48c, 0xe2fd, 0xe48c, +0xe1ee, 0xe3d6, 0xe1ee, 0xe3d6, 0xe125, 0xe36b, 0xe125, 0xe36b, 0xe125, 0xe36b, 0xded7, +0xe17b, 0xded7, 0xe17b, 0xdec3, 0xe1c4, 0xdec3, 0xe1c4, 0xdbcb, 0xdf25, 0xdbcb, 0xdf25, +0xdae8, 0xde93, 0xdae8, 0xde93, 0xdb5b, 0xdf4f, 0xdb5b, 0xdf4f, 0xdb5b, 0xdf4f, 0xd9fb, +0xde2c, 0xd9fb, 0xde2c, 0xd88f, 0xdcf0, 0xd88f, 0xdcf0, 0xd677, 0xdaf8, 0xd677, 0xdaf8, +0xd843, 0xdcd4, 0xd843, 0xdcd4, 0xd603, 0xda95, 0xd603, 0xda95, 0xd7b8, 0xdc3a, 0xd7b8, +0xdc3a, 0xd7b8, 0xdc3a, 0xd789, 0xdbed, 0xd789, 0xdbed, 0xd70c, 0xdb44, 0xd70c, 0xdb44, +0xda2e, 0xde2e, 0xda2e, 0xde2e, 0xdb0d, 0xdecd, 0xdb0d, 0xdecd, 0xdf67, 0xe2de, 0xdf67, +0xe2de, 0xde2c, 0xe156, 0xde2c, 0xe156, 0xde2c, 0xe156, 0xe248, 0xe523, 0xe248, 0xe523, +0xe446, 0xe6d3, 0xe446, 0xe6d3, 0xe69b, 0xe8dc, 0xe69b, 0xe8dc, 0xe947, 0xeb42, 0xe947, +0xeb42, 0xeb12, 0xeccc, 0xeb12, 0xeccc, 0xeb12, 0xeccc, 0xef13, 0xf094, 0xef13, 0xf094, +0xef59, 0xf0a9, 0xef59, 0xf0a9, 0xf37a, 0xf4a0, 0xf37a, 0xf4a0, 0xf38c, 0xf492, 0xf38c, +0xf492, 0xf427, 0xf512, 0xf427, 0xf512, 0xf3a3, 0xf479, 0xf3a3, 0xf479, 0xf3a3, 0xf479, +0xf587, 0xf64b, 0xf587, 0xf64b, 0xf8c0, 0xf975, 0xf8c0, 0xf975, 0xfb16, 0xfbbb, 0xfb16, +0xfbbb, 0xfced, 0xfd81, 0xfced, 0xfd81, 0xfcc9, 0xfd47, 0xfcc9, 0xfd47, 0xfcc9, 0xfd47, +0xff01, 0xff63, 0xff01, 0xff63, 0xc1, 0x100, 0xc1, 0x100, 0x219, 0x22c, 0x219, +0x22c, 0x2bc, 0x299, 0x2bc, 0x299, 0x4d7, 0x475, 0x4d7, 0x475, 0x797, 0x6ec, +0x797, 0x6ec, 0x797, 0x6ec, 0xa02, 0x906, 0xa02, 0x906, 0xeec, 0xd95, 0xeec, +0xd95, 0x113c, 0xf86, 0x113c, 0xf86, 0x125e, 0x1045, 0x125e, 0x1045, 0x1907, 0x1688, +0x1907, 0x1688, 0x19c0, 0x16dd, 0x19c0, 0x16dd, 0x19c0, 0x16dd, 0x1b7d, 0x1837, 0x1b7d, +0x1837, 0x1c4b, 0x18a9, 0x1c4b, 0x18a9, 0x1eee, 0x1af7, 0x1eee, 0x1af7, 0x21d0, 0x1d8e, +0x21d0, 0x1d8e, 0x1fbf, 0x1b3e, 0x1fbf, 0x1b3e, 0x1fbf, 0x1b3e, 0x2328, 0x1e76, 0x2328, +0x1e76, 0x1fd6, 0x1b01, 0x1fd6, 0x1b01, 0x200f, 0x1b26, 0x200f, 0x1b26, 0x2231, 0x1d45, +0x2231, 0x1d45, 0x22da, 0x1df9, 0x22da, 0x1df9, 0x2350, 0x1e89, 0x2350, 0x1e89, 0x2350, +0x1e89, 0x208b, 0x1bec, 0x208b, 0x1bec, 0x1f7a, 0x1b10, 0x1f7a, 0x1b10, 0x1c9b, 0x1872, +0x1c9b, 0x1872, 0x1b73, 0x1795, 0x1b73, 0x1795, 0x1b3a, 0x17af, 0x1b3a, 0x17af, 0x1a72, +0x1741, 0x1a72, 0x1741, 0x1a72, 0x1741, 0x1770, 0x149e, 0x1770, 0x149e, 0x15bf, 0x134f, +0x15bf, 0x134f, 0x1333, 0x1129, 0x1333, 0x1129, 0xda3, 0xbff, 0xda3, 0xbff, 0x9e8, +0x8ac, 0x9e8, 0x8ac, 0x9e8, 0x8ac, 0x712, 0x63c, 0x712, 0x63c, 0x50c, 0x49d, +0x50c, 0x49d, 0x34a, 0x340, 0x34a, 0x340, 0x216, 0x271, 0x216, 0x271, 0xffef, +0xac, 0xffef, 0xac, 0xfdc4, 0xfee1, 0xfdc4, 0xfee1, 0xfdc4, 0xfee1, 0xfbdb, 0xfd57, +0xfbdb, 0xfd57, 0xfaa5, 0xfc7d, 0xfaa5, 0xfc7d, 0xf80e, 0xfa41, 0xf80e, 0xfa41, 0xf75a, +0xf9e3, 0xf75a, 0xf9e3, 0xf602, 0xf8de, 0xf602, 0xf8de, 0xf354, 0xf67f, 0xf354, 0xf67f, +0xf354, 0xf67f, 0xf306, 0xf67a, 0xf306, 0xf67a, 0xef07, 0xf2be, 0xef07, 0xf2be, 0xee2f, +0xf221, 0xee2f, 0xf221, 0xec59, 0xf07d, 0xec59, 0xf07d, 0xec85, 0xf0d2, 0xec85, 0xf0d2, +0xec85, 0xf0d2, 0xebf5, 0xf060, 0xebf5, 0xf060, 0xe914, 0xed8f, 0xe914, 0xed8f, 0xe95b, +0xeddb, 0xe95b, 0xeddb, 0xe74a, 0xebc0, 0xe74a, 0xebc0, 0xe784, 0xebe4, 0xe784, 0xebe4, +0xe751, 0xeb8d, 0xe751, 0xeb8d, 0xe751, 0xeb8d, 0xe8d7, 0xece2, 0xe8d7, 0xece2, 0xe95b, +0xed28, 0xe95b, 0xed28, 0xe835, 0xebba, 0xe835, 0xebba, 0xea26, 0xed59, 0xea26, 0xed59, +0xeb84, 0xee5d, 0xeb84, 0xee5d, 0xeb54, 0xedce, 0xeb54, 0xedce, 0xeb54, 0xedce, 0xee71, +0xf089, 0xee71, 0xf089, 0xefca, 0xf17c, 0xefca, 0xf17c, 0xf2e8, 0xf437, 0xf2e8, 0xf437, +0xf699, 0xf788, 0xf699, 0xf788, 0xf74d, 0xf7e0, 0xf74d, 0xf7e0, 0xf74d, 0xf7e0, 0xf8d3, +0xf911, 0xf8d3, 0xf911, 0xf860, 0xf851, 0xf860, 0xf851, 0xfd33, 0xfcdf, 0xfd33, 0xfcdf, +0xfc07, 0xfb79, 0xfc07, 0xfb79, 0xfe1a, 0xfd5b, 0xfe1a, 0xfd5b, 0x1d3, 0xee, 0x1d3, +0xee, 0x1d3, 0xee, 0x4e, 0xff4a, 0x4e, 0xff4a, 0x2e0, 0x1c8, 0x2e0, 0x1c8, +0x3a1, 0x27a, 0x3a1, 0x27a, 0x6ec, 0x5bd, 0x6ec, 0x5bd, 0x77a, 0x647, 0x77a, +0x647, 0x835, 0x702, 0x835, 0x702, 0x835, 0x702, 0xa59, 0x926, 0xa59, 0x926, +0x9f7, 0x8c5, 0x9f7, 0x8c5, 0xa5d, 0x92b, 0xa5d, 0x92b, 0x9cb, 0x896, 0x9cb, +0x896, 0x8f3, 0x7b8, 0x8f3, 0x7b8, 0x8f3, 0x7b8, 0x70e, 0x5cb, 0x70e, 0x5cb, +0x6a2, 0x553, 0x6a2, 0x553, 0x8bd, 0x760, 0x8bd, 0x760, 0x6b2, 0x544, 0x6b2, +0x544, 0x739, 0x5b8, 0x739, 0x5b8, 0x69e, 0x50a, 0x69e, 0x50a, 0x69e, 0x50a, +0x539, 0x393, 0x539, 0x393, 0x726, 0x570, 0x726, 0x570, 0x759, 0x596, 0x759, +0x596, 0x973, 0x7a8, 0x973, 0x7a8, 0x6c2, 0x4f3, 0x6c2, 0x4f3, 0x8be, 0x6f2, +0x8be, 0x6f2, 0x8be, 0x6f2, 0x6d8, 0x516, 0x6d8, 0x516, 0x584, 0x3d1, 0x584, +0x3d1, 0xa7b, 0x8df, 0xa7b, 0x8df, 0x8f9, 0x77a, 0x8f9, 0x77a, 0xc4c, 0xaef, +0xc4c, 0xaef, 0xc4c, 0xaef, 0xb6f, 0xa38, 0xb6f, 0xa38, 0xc82, 0xb74, 0xc82, +0xb74, 0xc75, 0xb91, 0xc75, 0xb91, 0xb93, 0xad7, 0xb93, 0xad7, 0xdd5, 0xd40, +0xdd5, 0xd40, 0xbd2, 0xb61, 0xbd2, 0xb61, 0xbd2, 0xb61, 0xe07, 0xdb3, 0xe07, +0xdb3, 0xc5f, 0xc22, 0xc5f, 0xc22, 0xb97, 0xb69, 0xb97, 0xb69, 0xb61, 0xb39, +0xb61, 0xb39, 0x9a9, 0x97e, 0x9a9, 0x97e, 0xb90, 0xb5a, 0xb90, 0xb5a, 0xb90, +0xb5a, 0xae2, 0xa98, 0xae2, 0xa98, 0xb06, 0xaa0, 0xb06, 0xaa0, 0xd88, 0xd00, +0xd88, 0xd00, 0xc8f, 0xbde, 0xc8f, 0xbde, 0xc73, 0xb96, 0xc73, 0xb96, 0xc73, +0xb96, 0xcff, 0xbf4, 0xcff, 0xbf4, 0xd67, 0xc2d, 0xd67, 0xc2d, 0xe6b, 0xd03, +0xe6b, 0xd03, 0x1027, 0xe94, 0x1027, 0xe94, 0x13d0, 0x1217, 0x13d0, 0x1217, 0xf4b, +0xd70, 0xf4b, 0xd70, 0xf4b, 0xd70, 0xff2, 0xdfb, 0xff2, 0xdfb, 0x1204, 0xff8, +0x1204, 0xff8, 0xf2c, 0xd11, 0xf2c, 0xd11, 0xf01, 0xcdf, 0xf01, 0xcdf, 0xe7a, +0xc56, 0xe7a, 0xc56, 0xedd, 0xcbc, 0xedd, 0xcbc, 0xedd, 0xcbc, 0xdfa, 0xbe1, +0xdfa, 0xbe1, 0x102b, 0xe1c, 0x102b, 0xe1c, 0x10ad, 0xea9, 0x10ad, 0xea9, 0x117a, +0xf82, 0x117a, 0xf82, 0xf7f, 0xd91, 0xf7f, 0xd91, 0xf7f, 0xd91, 0xdde, 0xbf7, +0xdde, 0xbf7, 0xdab, 0xbc7, 0xdab, 0xbc7, 0xc07, 0xa20, 0xc07, 0xa20, 0xeaa, +0xcbb, 0xeaa, 0xcbb, 0xdb4, 0xbb7, 0xdb4, 0xbb7, 0xd37, 0xb24, 0xd37, 0xb24, +0xd37, 0xb24, 0xcd7, 0xaa9, 0xcd7, 0xaa9, 0xc7b, 0xa2c, 0xc7b, 0xa2c, 0xb8a, +0x915, 0xb8a, 0x915, 0x8ae, 0x60f, 0x8ae, 0x60f, 0x972, 0x6a8, 0x972, 0x6a8, +0x972, 0x6a8, 0x987, 0x68f, 0x987, 0x68f, 0x8ee, 0x5cb, 0x8ee, 0x5cb, 0xbc1, +0x874, 0xbc1, 0x874, 0x9d6, 0x664, 0x9d6, 0x664, 0x7f5, 0x462, 0x7f5, 0x462, +0x93a, 0x58f, 0x93a, 0x58f, 0x93a, 0x58f, 0x8ce, 0x512, 0x8ce, 0x512, 0x9ca, +0x608, 0x9ca, 0x608, 0xacc, 0x70d, 0xacc, 0x70d, 0xb61, 0x7ae, 0xb61, 0x7ae, +0xac0, 0x726, 0xac0, 0x726, 0xd3b, 0x9c4, 0xd3b, 0x9c4, 0xd3b, 0x9c4, 0xd48, +0x9ff, 0xd48, 0x9ff, 0xe25, 0xb14, 0xe25, 0xb14, 0xf01, 0xc31, 0xf01, 0xc31, +0xe25, 0xb9f, 0xe25, 0xb9f, 0xd4b, 0xb16, 0xd4b, 0xb16, 0xd4b, 0xb16, 0xb6d, +0x991, 0xb6d, 0x991, 0xc04, 0xa85, 0xc04, 0xa85, 0x8d3, 0x7b6, 0x8d3, 0x7b6, +0x9d2, 0x919, 0x9d2, 0x919, 0x81f, 0x7cc, 0x81f, 0x7cc, 0x7bc, 0x7d0, 0x7bc, +0x7d0, 0x7bc, 0x7d0, 0x6ba, 0x733, 0x6ba, 0x733, 0x38f, 0x46b, 0x38f, 0x46b, +0x4fc, 0x638, 0x4fc, 0x638, 0x1b3, 0x34c, 0x1b3, 0x34c, 0x16e, 0x35f, 0x16e, +0x35f, 0xfe51, 0x93, 0xfe51, 0x93, 0xfe51, 0x93, 0xfce3, 0xff70, 0xfce3, 0xff70, +0xfc7c, 0xff4a, 0xfc7c, 0xff4a, 0xfaf8, 0xfe01, 0xfaf8, 0xfe01, 0xfac3, 0xfdfc, 0xfac3, +0xfdfc, 0xf629, 0xf988, 0xf629, 0xf988, 0xf629, 0xf988, 0xf748, 0xfac2, 0xf748, 0xfac2, +0xf9d2, 0xfd5c, 0xf9d2, 0xfd5c, 0xf84e, 0xfbdc, 0xf84e, 0xfbdc, 0xf9cd, 0xfd55, 0xf9cd, +0xfd55, 0xf901, 0xfc78, 0xf901, 0xfc78, 0xf5e8, 0xf941, 0xf5e8, 0xf941, 0xf5e8, 0xf941, +0xf7a7, 0xfad8, 0xf7a7, 0xfad8, 0xfa5b, 0xfd5c, 0xfa5b, 0xfd5c, 0xfe35, 0xfb, 0xfe35, +0xfb, 0xff05, 0x189, 0xff05, 0x189, 0x1ba, 0x3f6, 0x1ba, 0x3f6, 0x468, 0x656, +0x468, 0x656, 0x468, 0x656, 0x3f4, 0x591, 0x3f4, 0x591, 0x4d4, 0x61e, 0x4d4, +0x61e, 0x3e8, 0x4df, 0x3e8, 0x4df, 0x48e, 0x533, 0x48e, 0x533, 0x37e, 0x3d4, +0x37e, 0x3d4, 0x37e, 0x3d4, 0x4f3, 0x4fe, 0x4f3, 0x4fe, 0x4ea, 0x4b1, 0x4ea, +0x4b1, 0x361, 0x2e8, 0x361, 0x2e8, 0x245, 0x195, 0x245, 0x195, 0x12d, 0x4d, +0x12d, 0x4d, 0x104, 0xfffd, 0x104, 0xfffd, 0x104, 0xfffd, 0xffd2, 0xfeab, 0xffd2, +0xfeab, 0x29e, 0x15e, 0x29e, 0x15e, 0x121, 0xffce, 0x121, 0xffce, 0xff4e, 0xfdf0, +0xff4e, 0xfdf0, 0xfff9, 0xfe94, 0xfff9, 0xfe94, 0xfd28, 0xfbc1, 0xfd28, 0xfbc1, 0xfd28, +0xfbc1, 0xfb33, 0xf9cd, 0xfb33, 0xf9cd, 0xfb52, 0xf9f0, 0xfb52, 0xf9f0, 0xf922, 0xf7c5, +0xf922, 0xf7c5, 0xf9b1, 0xf85a, 0xf9b1, 0xf85a, 0xfa31, 0xf8e1, 0xfa31, 0xf8e1, 0xfa31, +0xf8e1, 0xf92e, 0xf7e5, 0xf92e, 0xf7e5, 0xf658, 0xf517, 0xf658, 0xf517, 0xf3b5, 0xf27d, +0xf3b5, 0xf27d, 0xf3ed, 0xf2be, 0xf3ed, 0xf2be, 0xf08d, 0xef6a, 0xf08d, 0xef6a, 0xf346, +0xf232, 0xf346, 0xf232, 0xf346, 0xf232, 0xf210, 0xf10e, 0xf210, 0xf10e, 0xf159, 0xf070, +0xf159, 0xf070, 0xefb5, 0xeee9, 0xefb5, 0xeee9, 0xed1b, 0xec75, 0xed1b, 0xec75, 0xee8a, +0xee11, 0xee8a, 0xee11, 0xeaab, 0xea68, 0xeaab, 0xea68, 0xeaab, 0xea68, 0xebf2, 0xebee, +0xebf2, 0xebee, 0xe943, 0xe986, 0xe943, 0xe986, 0xe75e, 0xe7f2, 0xe75e, 0xe7f2, 0xe495, +0xe580, 0xe495, 0xe580, 0xe126, 0xe26f, 0xe126, 0xe26f, 0xe126, 0xe26f, 0xe1eb, 0xe396, +0xe1eb, 0xe396, 0xded6, 0xe0e6, 0xded6, 0xe0e6, 0xdfb5, 0xe22a, 0xdfb5, 0xe22a, 0xddfb, +0xe0d3, 0xddfb, 0xe0d3, 0xd9c1, 0xdcf7, 0xd9c1, 0xdcf7, 0xdb3c, 0xdecb, 0xdb3c, 0xdecb, +0xdb3c, 0xdecb, 0xdaad, 0xde89, 0xdaad, 0xde89, 0xd949, 0xdd68, 0xd949, 0xdd68, 0xd907, +0xdd5b, 0xd907, 0xdd5b, 0xd726, 0xdba1, 0xd726, 0xdba1, 0xd4fb, 0xd98b, 0xd4fb, 0xd98b, +0xd2f8, 0xd78e, 0xd2f8, 0xd78e, 0xd2f8, 0xd78e, 0xd4df, 0xd96c, 0xd4df, 0xd96c, 0xd46f, +0xd8e3, 0xd46f, 0xd8e3, 0xd65c, 0xdaa8, 0xd65c, 0xdaa8, 0xd7e4, 0xdbfc, 0xd7e4, 0xdbfc, +0xd8fd, 0xdcd8, 0xd8fd, 0xdcd8, 0xd8fd, 0xdcd8, 0xdc9c, 0xe030, 0xdc9c, 0xe030, 0xdced, +0xe037, 0xdced, 0xe037, 0xdfaf, 0xe2ab, 0xdfaf, 0xe2ab, 0xdfb2, 0xe262, 0xdfb2, 0xe262, +0xe361, 0xe5c9, 0xe361, 0xe5c9, 0xe5eb, 0xe810, 0xe5eb, 0xe810, 0xe5eb, 0xe810, 0xe863, +0xea4e, 0xe863, 0xea4e, 0xea6f, 0xec29, 0xea6f, 0xec29, 0xe9fb, 0xeb8f, 0xe9fb, 0xeb8f, +0xee1c, 0xef96, 0xee1c, 0xef96, 0xee25, 0xef90, 0xee25, 0xef90, 0xef71, 0xf0d8, 0xef71, +0xf0d8, 0xef71, 0xf0d8, 0xf0a5, 0xf212, 0xf0a5, 0xf212, 0xf0b3, 0xf22d, 0xf0b3, 0xf22d, +0xf0b3, 0xf23f, 0xf0b3, 0xf23f, 0xf2a0, 0xf443, 0xf2a0, 0xf443, 0xf3ba, 0xf573, 0xf3ba, +0xf573, 0xf3ba, 0xf573, 0xf512, 0xf6de, 0xf512, 0xf6de, 0xf6c0, 0xf89b, 0xf6c0, 0xf89b, +0xf6c1, 0xf8a2, 0xf6c1, 0xf8a2, 0xf8c1, 0xfa9e, 0xf8c1, 0xfa9e, 0xfb9a, 0xfd68, 0xfb9a, +0xfd68, 0xff4a, 0xfb, 0xff4a, 0xfb, 0xff4a, 0xfb, 0x6b, 0x1f1, 0x6b, 0x1f1, +0x4af, 0x5fd, 0x4af, 0x5fd, 0x621, 0x72a, 0x621, 0x72a, 0x9e4, 0xa9d, 0x9e4, +0xa9d, 0xe1b, 0xe78, 0xe1b, 0xe78, 0x1098, 0x1092, 0x1098, 0x1092, 0x1098, 0x1092, +0x1457, 0x13ea, 0x1457, 0x13ea, 0x166d, 0x1598, 0x166d, 0x1598, 0x1b2b, 0x19ee, 0x1b2b, +0x19ee, 0x1cac, 0x1b0d, 0x1cac, 0x1b0d, 0x1f47, 0x1d4e, 0x1f47, 0x1d4e, 0x1f47, 0x1d4e, +0x1f51, 0x1d0a, 0x1f51, 0x1d0a, 0x1fca, 0x1d42, 0x1fca, 0x1d42, 0x20bd, 0x1e03, 0x20bd, +0x1e03, 0x2147, 0x1e6d, 0x2147, 0x1e6d, 0x224f, 0x1f68, 0x224f, 0x1f68, 0x217b, 0x1e99, +0x217b, 0x1e99, 0x217b, 0x1e99, 0x2116, 0x1e4b, 0x2116, 0x1e4b, 0x2053, 0x1db1, 0x2053, +0x1db1, 0x1fa2, 0x1d38, 0x1fa2, 0x1d38, 0x1dd3, 0x1baf, 0x1dd3, 0x1baf, 0x1f0d, 0x1d39, +0x1f0d, 0x1d39, 0x1f0d, 0x1d39, 0x1dbe, 0x1c43, 0x1dbe, 0x1c43, 0x1aaa, 0x198d, 0x1aaa, +0x198d, 0x1960, 0x18a3, 0x1960, 0x18a3, 0x159c, 0x153f, 0x159c, 0x153f, 0x11f3, 0x11f2, +0x11f3, 0x11f2, 0xfb8, 0x100d, 0xfb8, 0x100d, 0xfb8, 0x100d, 0xcfd, 0xda0, 0xcfd, +0xda0, 0xbfd, 0xce5, 0xbfd, 0xce5, 0xac0, 0xbe2, 0xac0, 0xbe2, 0x9cc, 0xb1e, +0x9cc, 0xb1e, 0x74f, 0x8c4, 0x74f, 0x8c4, 0x4c7, 0x656, 0x4c7, 0x656, 0x4c7, +0x656, 0x3dd, 0x57b, 0x3dd, 0x57b, 0x10a, 0x2af, 0x10a, 0x2af, 0x1c2, 0x366, +0x1c2, 0x366, 0x4c, 0x1eb, 0x4c, 0x1eb, 0xffc1, 0x157, 0xffc1, 0x157, 0xffc1, +0x157, 0xfd97, 0xff20, 0xfd97, 0xff20, 0xf8f9, 0xfa76, 0xf8f9, 0xfa76, 0xf692, 0xf803, +0xf692, 0xf803, 0xf41f, 0xf586, 0xf41f, 0xf586, 0xf504, 0xf663, 0xf504, 0xf663, 0xf35c, +0xf4b5, 0xf35c, 0xf4b5, 0xf35c, 0xf4b5, 0xf35b, 0xf4b1, 0xf35b, 0xf4b1, 0xf085, 0xf1d9, +0xf085, 0xf1d9, 0xeeef, 0xf043, 0xeeef, 0xf043, 0xef10, 0xf065, 0xef10, 0xf065, 0xeaf3, +0xec46, 0xeaf3, 0xec46, 0xebd0, 0xed20, 0xebd0, 0xed20, 0xebd0, 0xed20, 0xeba4, 0xecee, +0xeba4, 0xecee, 0xed39, 0xee77, 0xed39, 0xee77, 0xee1f, 0xef49, 0xee1f, 0xef49, 0xeed9, +0xefea, 0xeed9, 0xefea, 0xee34, 0xef23, 0xee34, 0xef23, 0xee34, 0xef23, 0xedc8, 0xee8d, +0xedc8, 0xee8d, 0xefd5, 0xf069, 0xefd5, 0xf069, 0xf03e, 0xf098, 0xf03e, 0xf098, 0xf2d2, +0xf2eb, 0xf2d2, 0xf2eb, 0xf4a4, 0xf476, 0xf4a4, 0xf476, 0xf6db, 0xf662, 0xf6db, 0xf662, +0xf6db, 0xf662, 0xf883, 0xf7bd, 0xf883, 0xf7bd, 0xfb04, 0xf9f1, 0xfb04, 0xf9f1, 0xfcf1, +0xfb92, 0xfcf1, 0xfb92, 0x18, 0xfe71, 0x18, 0xfe71, 0x182, 0xff99, 0x182, 0xff99, +0x46c, 0x247, 0x46c, 0x247, 0x46c, 0x247, 0x5cf, 0x379, 0x5cf, 0x379, 0x60f, +0x392, 0x60f, 0x392, 0x670, 0x3d8, 0x670, 0x3d8, 0x699, 0x3f2, 0x699, 0x3f2, +0x8cc, 0x622, 0x8cc, 0x622, 0x8cc, 0x622, 0x6df, 0x43e, 0x6df, 0x43e, 0xb4a, +0x8be, 0xb4a, 0x8be, 0x9ad, 0x741, 0x9ad, 0x741, 0x9e5, 0x7a3, 0x9e5, 0x7a3, +0xbc9, 0x9b9, 0xbc9, 0x9b9, 0x920, 0x748, 0x920, 0x748, 0x920, 0x748, 0x812, +0x677, 0x812, 0x677, 0x694, 0x53b, 0x694, 0x53b, 0x7bb, 0x6a5, 0x7bb, 0x6a5, +0x600, 0x52d, 0x600, 0x52d, 0x623, 0x594, 0x623, 0x594, 0x5c7, 0x578, 0x5c7, +0x578, 0x5c7, 0x578, 0x527, 0x516, 0x527, 0x516, 0x76c, 0x795, 0x76c, 0x795, +0x908, 0x969, 0x908, 0x969, 0x81a, 0x8ae, 0x81a, 0x8ae, 0x7a8, 0x86b, 0x7a8, +0x86b, 0x7a8, 0x86b, 0x662, 0x751, 0x662, 0x751, 0x6ed, 0x805, 0x6ed, 0x805, +0x799, 0x8d6, 0x799, 0x8d6, 0x8e7, 0xa47, 0x8e7, 0xa47, 0x96d, 0xaed, 0x96d, +0xaed, 0x914, 0xab2, 0x914, 0xab2, 0x914, 0xab2, 0x8ee, 0xaa8, 0x8ee, 0xaa8, +0x897, 0xa6a, 0x897, 0xa6a, 0xb02, 0xceb, 0xb02, 0xceb, 0x934, 0xb30, 0x934, +0xb30, 0xb37, 0xd41, 0xb37, 0xd41, 0xb28, 0xd3d, 0xb28, 0xd3d, 0xb28, 0xd3d, +0xa16, 0xc2e, 0xa16, 0xc2e, 0xa2a, 0xc40, 0xa2a, 0xc40, 0x87a, 0xa86, 0x87a, +0xa86, 0x6d3, 0x8cc, 0x6d3, 0x8cc, 0x4fd, 0x6d9, 0x4fd, 0x6d9, 0x4fd, 0x6d9, +0x604, 0x7ba, 0x604, 0x7ba, 0x5a2, 0x728, 0x5a2, 0x728, 0x758, 0x8a5, 0x758, +0x8a5, 0x7f7, 0x900, 0x7f7, 0x900, 0x6a6, 0x762, 0x6a6, 0x762, 0x6bf, 0x728, +0x6bf, 0x728, 0x6bf, 0x728, 0x935, 0x942, 0x935, 0x942, 0xa8f, 0xa3c, 0xa8f, +0xa3c, 0xb2c, 0xa76, 0xb2c, 0xa76, 0xc56, 0xb3a, 0xc56, 0xb3a, 0xeae, 0xd2e, +0xeae, 0xd2e, 0x11aa, 0xfc8, 0x11aa, 0xfc8, 0x11aa, 0xfc8, 0x129b, 0x105b, 0x129b, +0x105b, 0x1549, 0x12b2, 0x1549, 0x12b2, 0x13e1, 0x10fb, 0x13e1, 0x10fb, 0x135d, 0x1031, +0x135d, 0x1031, 0x12ad, 0xf45, 0x12ad, 0xf45, 0x12ad, 0xf45, 0x1333, 0xf9b, 0x1333, +0xf9b, 0x1588, 0x11ca, 0x1588, 0x11ca, 0x13af, 0xfd6, 0x13af, 0xfd6, 0x16b3, 0x12c9, +0x16b3, 0x12c9, 0x1485, 0x1094, 0x1485, 0x1094, 0x1460, 0x1070, 0x1460, 0x1070, 0x1460, +0x1070, 0x1514, 0x112b, 0x1514, 0x112b, 0x1171, 0xd95, 0x1171, 0xd95, 0x1249, 0xe7e, +0x1249, 0xe7e, 0x11f6, 0xe3e, 0x11f6, 0xe3e, 0x11ae, 0xe09, 0x11ae, 0xe09, 0xfe0, +0xc4c, 0xfe0, 0xc4c, 0xfe0, 0xc4c, 0x108a, 0xd06, 0x108a, 0xd06, 0xee9, 0xb71, +0xee9, 0xb71, 0xca5, 0x935, 0xca5, 0x935, 0xcc4, 0x957, 0xcc4, 0x957, 0xc39, +0x8cb, 0xc39, 0x8cb, 0xc39, 0x8cb, 0xd19, 0x9a8, 0xd19, 0x9a8, 0xcc7, 0x94e, +0xcc7, 0x94e, 0xd2b, 0x9a9, 0xd2b, 0x9a9, 0xbef, 0x864, 0xbef, 0x864, 0xa04, +0x670, 0xa04, 0x670, 0xac2, 0x729, 0xac2, 0x729, 0xac2, 0x729, 0xa2f, 0x694, +0xa2f, 0x694, 0xad2, 0x73c, 0xad2, 0x73c, 0xbb5, 0x82a, 0xbb5, 0x82a, 0xb6e, +0x7f8, 0xb6e, 0x7f8, 0xc88, 0x931, 0xc88, 0x931, 0xb2f, 0x801, 0xb2f, 0x801, +0xb2f, 0x801, 0xd4d, 0xa53, 0xd4d, 0xa53, 0xd48, 0xa8c, 0xd48, 0xa8c, 0xd2c, +0xab8, 0xd2c, 0xab8, 0xe68, 0xc47, 0xe68, 0xc47, 0xc75, 0xaaf, 0xc75, 0xaaf, +0xc75, 0xaaf, 0xb53, 0x9ee, 0xb53, 0x9ee, 0xa32, 0x935, 0xa32, 0x935, 0x928, +0x896, 0x928, 0x896, 0x50d, 0x4e6, 0x50d, 0x4e6, 0x439, 0x47d, 0x439, 0x47d, +0x2a0, 0x34c, 0x2a0, 0x34c, 0x2a0, 0x34c, 0x92, 0x1a2, 0x92, 0x1a2, 0x99, +0x205, 0x99, 0x205, 0xfef0, 0xb1, 0xfef0, 0xb1, 0xfc38, 0xfe43, 0xfc38, 0xfe43, +0xfa53, 0xfc9e, 0xfa53, 0xfc9e, 0xfa53, 0xfc9e, 0xf9f1, 0xfc70, 0xf9f1, 0xfc70, 0xf91b, +0xfbc2, 0xf91b, 0xfbc2, 0xf7eb, 0xfaad, 0xf7eb, 0xfaad, 0xf4bb, 0xf78c, 0xf4bb, 0xf78c, +0xf364, 0xf639, 0xf364, 0xf639, 0xf255, 0xf523, 0xf255, 0xf523, 0xf255, 0xf523, 0xf3a1, +0xf65e, 0xf3a1, 0xf65e, 0xf43a, 0xf6dd, 0xf43a, 0xf6dd, 0xf2e2, 0xf563, 0xf2e2, 0xf563, +0xf3b5, 0xf60d, 0xf3b5, 0xf60d, 0xf4c5, 0xf6ef, 0xf4c5, 0xf6ef, 0xf669, 0xf862, 0xf669, +0xf862, 0xf669, 0xf862, 0xf587, 0xf74c, 0xf587, 0xf74c, 0xf638, 0xf7c6, 0xf638, 0xf7c6, +0xf8af, 0xfa06, 0xf8af, 0xfa06, 0xfb14, 0xfc33, 0xfb14, 0xfc33, 0xfec1, 0xffa9, 0xfec1, +0xffa9, 0xfec1, 0xffa9, 0x2aa, 0x35d, 0x2aa, 0x35d, 0x1a8, 0x226, 0x1a8, 0x226, +0x1e4, 0x230, 0x1e4, 0x230, 0x3ae, 0x3c9, 0x3ae, 0x3c9, 0x1d7, 0x1c2, 0x1d7, +0x1c2, 0x2a9, 0x266, 0x2a9, 0x266, 0x2a9, 0x266, 0x23c, 0x1cd, 0x23c, 0x1cd, +0x2d2, 0x237, 0x2d2, 0x237, 0x89, 0xffc3, 0x89, 0xffc3, 0xf1, 0x1, 0xf1, +0x1, 0x235, 0x11c, 0x235, 0x11c, 0x1b5, 0x75, 0x1b5, 0x75, 0x1b5, 0x75, +0x41f, 0x2b8, 0x41f, 0x2b8, 0x3c9, 0x23c, 0x3c9, 0x23c, 0x344, 0x192, 0x344, +0x192, 0x107, 0xff33, 0x107, 0xff33, 0x1c1, 0xffcc, 0x1c1, 0xffcc, 0x1c1, 0xffcc, +0x36, 0xfe22, 0x36, 0xfe22, 0xff3e, 0xfd10, 0xff3e, 0xfd10, 0xff58, 0xfd12, 0xff58, +0xfd12, 0xfebd, 0xfc66, 0xfebd, 0xfc66, 0xfdf9, 0xfb95, 0xfdf9, 0xfb95, 0xfbfe, 0xf992, +0xfbfe, 0xf992, 0xfbfe, 0xf992, 0xfbb6, 0xf94a, 0xfbb6, 0xf94a, 0xf8c5, 0xf662, 0xf8c5, +0xf662, 0xf708, 0xf4b4, 0xf708, 0xf4b4, 0xf761, 0xf526, 0xf761, 0xf526, 0xf625, 0xf40b, +0xf625, 0xf40b, 0xf56e, 0xf37f, 0xf56e, 0xf37f, 0xf56e, 0xf37f, 0xf6bc, 0xf502, 0xf6bc, +0xf502, 0xf5fa, 0xf47f, 0xf5fa, 0xf47f, 0xf564, 0xf430, 0xf564, 0xf430, 0xf3d5, 0xf2f1, +0xf3d5, 0xf2f1, 0xf37d, 0xf2f2, 0xf37d, 0xf2f2, 0xf37d, 0xf2f2, 0xf041, 0xf017, 0xf041, +0xf017, 0xee85, 0xeec3, 0xee85, 0xeec3, 0xed4c, 0xedf7, 0xed4c, 0xedf7, 0xea9c, 0xebb9, +0xea9c, 0xebb9, 0xea45, 0xebd7, 0xea45, 0xebd7, 0xe825, 0xea2e, 0xe825, 0xea2e, 0xe825, +0xea2e, 0xe7d6, 0xea56, 0xe7d6, 0xea56, 0xe3d8, 0xe6cc, 0xe3d8, 0xe6cc, 0xe27e, 0xe5e2, +0xe27e, 0xe5e2, 0xe101, 0xe4d0, 0xe101, 0xe4d0, 0xdef5, 0xe328, 0xdef5, 0xe328, 0xdf31, +0xe3bf, 0xdf31, 0xe3bf, 0xdf31, 0xe3bf, 0xdf0d, 0xe3ec, 0xdf0d, 0xe3ec, 0xdd27, 0xe24b, +0xdd27, 0xe24b, 0xdba2, 0xe100, 0xdba2, 0xe100, 0xdb48, 0xe0d1, 0xdb48, 0xe0d1, 0xdb35, +0xe0dc, 0xdb35, 0xe0dc, 0xdb35, 0xe0dc, 0xd9a8, 0xdf5f, 0xd9a8, 0xdf5f, 0xd68a, 0xdc42, +0xd68a, 0xdc42, 0xd7ca, 0xdd76, 0xd7ca, 0xdd76, 0xd6d4, 0xdc69, 0xd6d4, 0xdc69, 0xdab8, +0xe029, 0xdab8, 0xe029, 0xdc7d, 0xe1bf, 0xdc7d, 0xe1bf, 0xdc7d, 0xe1bf, 0xdb99, 0xe0a4, +0xdb99, 0xe0a4, 0xdf4e, 0xe41b, 0xdf4e, 0xe41b, 0xe11b, 0xe5a5, 0xe11b, 0xe5a5, 0xe344, +0xe788, 0xe344, 0xe788, 0xe3d1, 0xe7cd, 0xe3d1, 0xe7cd, 0xe54b, 0xe8ff, 0xe54b, 0xe8ff, +0xe54b, 0xe8ff, 0xe6f1, 0xea5f, 0xe6f1, 0xea5f, 0xe773, 0xea9e, 0xe773, 0xea9e, 0xeacb, +0xedb8, 0xeacb, 0xedb8, 0xed8b, 0xf03e, 0xed8b, 0xf03e, 0xf041, 0xf2c0, 0xf041, 0xf2c0, +0xf041, 0xf2c0, 0xf1fb, 0xf44d, 0xf1fb, 0xf44d, 0xf362, 0xf58d, 0xf362, 0xf58d, 0xf293, +0xf49c, 0xf293, 0xf49c, 0xf1c1, 0xf3ad, 0xf1c1, 0xf3ad, 0xf463, 0xf636, 0xf463, 0xf636, +0xf451, 0xf60c, 0xf451, 0xf60c, 0xf451, 0xf60c, 0xf595, 0xf73b, 0xf595, 0xf73b, 0xf552, +0xf6e3, 0xf552, 0xf6e3, 0xf682, 0xf7fb, 0xf682, 0xf7fb, 0xf6ff, 0xf85c, 0xf6ff, 0xf85c, +0xf87d, 0xf9bb, 0xf87d, 0xf9bb, 0xfc03, 0xfd1d, 0xfc03, 0xfd1d, 0xfc03, 0xfd1d, 0xfcc1, +0xfdaf, 0xfcc1, 0xfdaf, 0xffe9, 0xa5, 0xffe9, 0xa5, 0x31a, 0x39c, 0x31a, 0x39c, +0x45f, 0x4a0, 0x45f, 0x4a0, 0x6cd, 0x6c6, 0x6cd, 0x6c6, 0x6cd, 0x6c6, 0xb0e, +0xab9, 0xb0e, 0xab9, 0xdc6, 0xd1e, 0xdc6, 0xd1e, 0x108d, 0xf8e, 0x108d, 0xf8e, +0x12c9, 0x1171, 0x12c9, 0x1171, 0x14aa, 0x12f8, 0x14aa, 0x12f8, 0x1535, 0x132c, 0x1535, +0x132c, 0x1535, 0x132c, 0x188a, 0x162c, 0x188a, 0x162c, 0x1960, 0x16b3, 0x1960, 0x16b3, +0x1a11, 0x171c, 0x1a11, 0x171c, 0x1b82, 0x184c, 0x1b82, 0x184c, 0x1bbe, 0x1852, 0x1bbe, +0x1852, 0x1e04, 0x1a6c, 0x1e04, 0x1a6c, 0x1e04, 0x1a6c, 0x1e22, 0x1a6a, 0x1e22, 0x1a6a, +0x2038, 0x1c6e, 0x2038, 0x1c6e, 0x20b3, 0x1ce0, 0x20b3, 0x1ce0, 0x2036, 0x1c67, 0x2036, +0x1c67, 0x204b, 0x1c8c, 0x204b, 0x1c8c, 0x204b, 0x1c8c, 0x1ea7, 0x1b02, 0x1ea7, 0x1b02, +0x1d62, 0x19e1, 0x1d62, 0x19e1, 0x1d41, 0x19eb, 0x1d41, 0x19eb, 0x1b39, 0x1816, 0x1b39, +0x1816, 0x1a2a, 0x173e, 0x1a2a, 0x173e, 0x164d, 0x139e, 0x164d, 0x139e, 0x164d, 0x139e, +0x1534, 0x12c4, 0x1534, 0x12c4, 0x12b8, 0x1088, 0x12b8, 0x1088, 0x1048, 0xe59, 0x1048, +0xe59, 0x1220, 0x1072, 0x1220, 0x1072, 0xea2, 0xd33, 0xea2, 0xd33, 0xafc, 0x9cb, +0xafc, 0x9cb, 0xafc, 0x9cb, 0x792, 0x69c, 0x792, 0x69c, 0x844, 0x787, 0x844, +0x787, 0x62f, 0x5aa, 0x62f, 0x5aa, 0x61d, 0x5ce, 0x61d, 0x5ce, 0x47e, 0x462, +0x47e, 0x462, 0x47e, 0x462, 0x10c, 0x122, 0x10c, 0x122, 0xfeb7, 0xfefe, 0xfeb7, +0xfefe, 0xfc49, 0xfcc1, 0xfc49, 0xfcc1, 0xfc0b, 0xfcb2, 0xfc0b, 0xfcb2, 0xf859, 0xf92f, +0xf859, 0xf92f, 0xf8fc, 0xfa00, 0xf8fc, 0xfa00, 0xf8fc, 0xfa00, 0xf848, 0xf97a, 0xf848, +0xf97a, 0xf5be, 0xf71c, 0xf5be, 0xf71c, 0xf3b1, 0xf53b, 0xf3b1, 0xf53b, 0xf163, 0xf315, +0xf163, 0xf315, 0xef60, 0xf138, 0xef60, 0xf138, 0xef60, 0xf138, 0xed7e, 0xef78, 0xed7e, +0xef78, 0xeedd, 0xf0f6, 0xeedd, 0xf0f6, 0xef07, 0xf138, 0xef07, 0xf138, 0xed44, 0xef88, +0xed44, 0xef88, 0xedd1, 0xf020, 0xedd1, 0xf020, 0xecd7, 0xef2b, 0xecd7, 0xef2b, 0xecd7, +0xef2b, 0xec44, 0xee96, 0xec44, 0xee96, 0xed2e, 0xef75, 0xed2e, 0xef75, 0xeeba, 0xf0ee, +0xeeba, 0xf0ee, 0xee9b, 0xf0b7, 0xee9b, 0xf0b7, 0xefcd, 0xf1c9, 0xefcd, 0xf1c9, 0xf32b, +0xf502, 0xf32b, 0xf502, 0xf32b, 0xf502, 0xf275, 0xf422, 0xf275, 0xf422, 0xf48b, 0xf609, +0xf48b, 0xf609, 0xf6e2, 0xf830, 0xf6e2, 0xf830, 0xf97d, 0xfa9a, 0xf97d, 0xfa9a, 0xfbb8, +0xfca3, 0xfbb8, 0xfca3, 0xfbb8, 0xfca3, 0xfe90, 0xff4c, 0xfe90, 0xff4c, 0xffce, 0x5d, +0xffce, 0x5d, 0xfed9, 0xff3f, 0xfed9, 0xff3f, 0, 0x43, 0, 0x43, 0x13b, +0x15f, 0x13b, 0x15f, 0x352, 0x35e, 0x352, 0x35e, 0x352, 0x35e, 0x21d, 0x218, +0x21d, 0x218, 0x305, 0x2f5, 0x305, 0x2f5, 0x3c0, 0x3ac, 0x3c0, 0x3ac, 0x3a6, +0x392, 0x3a6, 0x392, 0x5ad, 0x5a0, 0x5ad, 0x5a0, 0x440, 0x43d, 0x440, 0x43d, +0x440, 0x43d, 0x3ba, 0x3c6, 0x3ba, 0x3c6, 0x38d, 0x3aa, 0x38d, 0x3aa, 0x457, +0x487, 0x457, 0x487, 0x42e, 0x472, 0x42e, 0x472, 0x212, 0x26a, 0x212, 0x26a, +0x212, 0x26a, 0x2f1, 0x35c, 0x2f1, 0x35c, 0x22e, 0x2aa, 0x22e, 0x2aa, 0x336, +0x3c2, 0x336, 0x3c2, 0x524, 0x5bd, 0x524, 0x5bd, 0x2ec, 0x391, 0x2ec, 0x391, +0x1e0, 0x28f, 0x1e0, 0x28f, 0x1e0, 0x28f, 0x334, 0x3ea, 0x334, 0x3ea, 0x3ef, +0x4aa, 0x3ef, 0x4aa, 0x3e2, 0x4a2, 0x3e2, 0x4a2, 0x41c, 0x4de, 0x41c, 0x4de, +0x506, 0x5ca, 0x506, 0x5ca, 0x433, 0x4f9, 0x433, 0x4f9, 0x433, 0x4f9, 0x43f, +0x508, 0x43f, 0x508, 0x5ae, 0x678, 0x5ae, 0x678, 0x63a, 0x705, 0x63a, 0x705, +0x67f, 0x74b, 0x67f, 0x74b, 0x76e, 0x83b, 0x76e, 0x83b, 0x76e, 0x83b, 0xa5e, +0xb2b, 0xa5e, 0xb2b, 0x954, 0xa1e, 0x954, 0xa1e, 0x7bd, 0x882, 0x7bd, 0x882, +0x6cd, 0x78a, 0x6cd, 0x78a, 0x5aa, 0x65b, 0x5aa, 0x65b, 0x5b6, 0x657, 0x5b6, +0x657, 0x5b6, 0x657, 0x69e, 0x728, 0x69e, 0x728, 0x64a, 0x6b8, 0x64a, 0x6b8, +0x361, 0x3ac, 0x361, 0x3ac, 0x426, 0x447, 0x426, 0x447, 0x550, 0x540, 0x550, +0x540, 0x519, 0x4d2, 0x519, 0x4d2, 0x519, 0x4d2, 0x663, 0x5de, 0x663, 0x5de, +0x622, 0x55a, 0x622, 0x55a, 0x63d, 0x52d, 0x63d, 0x52d, 0x918, 0x7bd, 0x918, +0x7bd, 0xc1f, 0xa78, 0xc1f, 0xa78, 0xc1f, 0xa78, 0xd7c, 0xb88, 0xd7c, 0xb88, +0xe14, 0xbd6, 0xe14, 0xbd6, 0x100d, 0xd89, 0x100d, 0xd89, 0xf51, 0xc8b, 0xf51, +0xc8b, 0x107c, 0xd7a, 0x107c, 0xd7a, 0x1182, 0xe4e, 0x1182, 0xe4e, 0x1182, 0xe4e, +0x1118, 0xdb9, 0x1118, 0xdb9, 0x134d, 0xfcf, 0x134d, 0xfcf, 0x1444, 0x10b1, 0x1444, +0x10b1, 0x1527, 0x118b, 0x1527, 0x118b, 0x1483, 0x10e8, 0x1483, 0x10e8, 0x1455, 0x10c5, +0x1455, 0x10c5, 0x1455, 0x10c5, 0x1604, 0x1288, 0x1604, 0x1288, 0x15da, 0x1279, 0x15da, +0x1279, 0x1641, 0x1302, 0x1641, 0x1302, 0x1723, 0x140b, 0x1723, 0x140b, 0x162a, 0x133a, +0x162a, 0x133a, 0x162a, 0x133a, 0x15ae, 0x12e7, 0x15ae, 0x12e7, 0x14c6, 0x1227, 0x14c6, +0x1227, 0x1690, 0x1415, 0x1690, 0x1415, 0x15c7, 0x136a, 0x15c7, 0x136a, 0x14f5, 0x12b0, +0x14f5, 0x12b0, 0x1518, 0x12e2, 0x1518, 0x12e2, 0x1518, 0x12e2, 0x11d3, 0xfa3, 0x11d3, +0xfa3, 0x1237, 0x1004, 0x1237, 0x1004, 0x12d6, 0x1097, 0x12d6, 0x1097, 0x1152, 0xefd, +0x1152, 0xefd, 0x113c, 0xec9, 0x113c, 0xec9, 0x1268, 0xfd0, 0x1268, 0xfd0, 0x1268, +0xfd0, 0x1264, 0xfa3, 0x1264, 0xfa3, 0x1107, 0xe18, 0x1107, 0xe18, 0x119e, 0xe80, +0x119e, 0xe80, 0x1277, 0xf2c, 0x1277, 0xf2c, 0x11a2, 0xe2c, 0x11a2, 0xe2c, 0x11a2, +0xe2c, 0x137b, 0xfe1, 0x137b, 0xfe1, 0x12ef, 0xf39, 0x12ef, 0xf39, 0x1420, 0x1057, +0x1420, 0x1057, 0x143f, 0x106f, 0x143f, 0x106f, 0x15e2, 0x1218, 0x15e2, 0x1218, 0x163b, +0x1285, 0x163b, 0x1285, 0x163b, 0x1285, 0x1405, 0x1072, 0x1405, 0x1072, 0x1458, 0x10f6, +0x1458, 0x10f6, 0x1119, 0xdf6, 0x1119, 0xdf6, 0xf79, 0xca3, 0xf79, 0xca3, 0xbf1, +0x973, 0xbf1, 0x973, 0xcb6, 0xa9a, 0xcb6, 0xa9a, 0xcb6, 0xa9a, 0xa33, 0x882, +0xa33, 0x882, 0x678, 0x538, 0x678, 0x538, 0x5c5, 0x4f9, 0x5c5, 0x4f9, 0x301, +0x2a9, 0x301, 0x2a9, 0x141, 0x15c, 0x141, 0x15c, 0x141, 0x15c, 0xff3d, 0xffc6, +0xff3d, 0xffc6, 0xfc83, 0xfd73, 0xfc83, 0xfd73, 0xf8de, 0xfa2c, 0xf8de, 0xfa2c, 0xf68a, +0xf82c, 0xf68a, 0xf82c, 0xf49d, 0xf687, 0xf49d, 0xf687, 0xf1aa, 0xf3ce, 0xf1aa, 0xf3ce, +0xf1aa, 0xf3ce, 0xf012, 0xf262, 0xf012, 0xf262, 0xefc2, 0xf231, 0xefc2, 0xf231, 0xedfc, +0xf07b, 0xedfc, 0xf07b, 0xf027, 0xf2a8, 0xf027, 0xf2a8, 0xef2f, 0xf1a8, 0xef2f, 0xf1a8, +0xeec8, 0xf12d, 0xeec8, 0xf12d, 0xeec8, 0xf12d, 0xeea4, 0xf0eb, 0xeea4, 0xf0eb, 0xefc9, +0xf1eb, 0xefc9, 0xf1eb, 0xf2fa, 0xf4f2, 0xf2fa, 0xf4f2, 0xf452, 0xf61c, 0xf452, 0xf61c, +0xf68f, 0xf829, 0xf68f, 0xf829, 0xf68f, 0xf829, 0xf7a2, 0xf90d, 0xf7a2, 0xf90d, 0xf910, +0xfa4c, 0xf910, 0xfa4c, 0xfabd, 0xfbcf, 0xfabd, 0xfbcf, 0xfd08, 0xfdf3, 0xfd08, 0xfdf3, +0xfd86, 0xfe51, 0xfd86, 0xfe51, 0xfdd4, 0xfe84, 0xfdd4, 0xfe84, 0xfdd4, 0xfe84, 0xfdde, +0xfe78, 0xfdde, 0xfe78, 0xff5a, 0xffe5, 0xff5a, 0xffe5, 0xfe42, 0xfec4, 0xfe42, 0xfec4, +0xffb6, 0x33, 0xffb6, 0x33, 0x2e, 0xaa, 0x2e, 0xaa, 0x2e, 0xaa, 0xfed3, +0xff51, 0xfed3, 0xff51, 0x129, 0x1ac, 0x129, 0x1ac, 0x2c8, 0x351, 0x2c8, 0x351, +0x10e, 0x19d, 0x10e, 0x19d, 0xfe43, 0xfed8, 0xfe43, 0xfed8, 0xfe77, 0xff10, 0xfe77, +0xff10, 0xfe77, 0xff10, 0xfd59, 0xfdf4, 0xfd59, 0xfdf4, 0xfdf4, 0xfe90, 0xfdf4, 0xfe90, +0xfe22, 0xfebb, 0xfe22, 0xfebb, 0xfde2, 0xfe77, 0xfde2, 0xfe77, 0xfbf2, 0xfc83, 0xfbf2, +0xfc83, 0xfa8e, 0xfb19, 0xfa8e, 0xfb19, 0xfa8e, 0xfb19, 0xf940, 0xf9c5, 0xf940, 0xf9c5, +0xf83d, 0xf8bd, 0xf83d, 0xf8bd, 0xf863, 0xf8e1, 0xf863, 0xf8e1, 0xf9db, 0xfa5c, 0xf9db, +0xfa5c, 0xfa56, 0xfade, 0xfa56, 0xfade, 0xfa56, 0xfade, 0xf8ae, 0xf943, 0xf8ae, 0xf943, +0xf703, 0xf7ad, 0xf703, 0xf7ad, 0xf5e5, 0xf6ad, 0xf5e5, 0xf6ad, 0xf69d, 0xf78b, 0xf69d, +0xf78b, 0xf708, 0xf825, 0xf708, 0xf825, 0xf793, 0xf8e9, 0xf793, 0xf8e9, 0xf793, 0xf8e9, +0xf384, 0xf51c, 0xf384, 0xf51c, 0xf08c, 0xf26e, 0xf08c, 0xf26e, 0xeea0, 0xf0d3, 0xeea0, +0xf0d3, 0xed0e, 0xef99, 0xed0e, 0xef99, 0xeb77, 0xee5e, 0xeb77, 0xee5e, 0xead5, 0xee1b, +0xead5, 0xee1b, 0xead5, 0xee1b, 0xe815, 0xebbb, 0xe815, 0xebbb, 0xe599, 0xe99d, 0xe599, +0xe99d, 0xe51e, 0xe97c, 0xe51e, 0xe97c, 0xe1be, 0xe672, 0xe1be, 0xe672, 0xde6d, 0xe36f, +0xde6d, 0xe36f, 0xde6d, 0xe36f, 0xdc03, 0xe14b, 0xdc03, 0xe14b, 0xdc74, 0xe1f7, 0xdc74, +0xe1f7, 0xdb7c, 0xe12d, 0xdb7c, 0xe12d, 0xdbff, 0xe1d1, 0xdbff, 0xe1d1, 0xd970, 0xdf57, +0xd970, 0xdf57, 0xd7e0, 0xddcd, 0xd7e0, 0xddcd, 0xd7e0, 0xddcd, 0xd7b9, 0xdd9e, 0xd7b9, +0xdd9e, 0xd600, 0xdbd0, 0xd600, 0xdbd0, 0xd597, 0xdb46, 0xd597, 0xdb46, 0xd39c, 0xd91e, +0xd39c, 0xd91e, 0xd419, 0xd964, 0xd419, 0xd964, 0xd513, 0xda1f, 0xd513, 0xda1f, 0xd513, +0xda1f, 0xd6e5, 0xdbab, 0xd6e5, 0xdbab, 0xda5e, 0xded9, 0xda5e, 0xded9, 0xdb64, 0xdf91, +0xdb64, 0xdf91, 0xdce1, 0xe0bf, 0xdce1, 0xe0bf, 0xde8a, 0xe21a, 0xde8a, 0xe21a, 0xde8a, +0xe21a, 0xe14f, 0xe492, 0xe14f, 0xe492, 0xe4db, 0xe7d6, 0xe4db, 0xe7d6, 0xe50b, 0xe7c2, +0xe50b, 0xe7c2, 0xe898, 0xeb10, 0xe898, 0xeb10, 0xea09, 0xec4a, 0xea09, 0xec4a, 0xeb1d, +0xed2b, 0xeb1d, 0xed2b, 0xeb1d, 0xed2b, 0xee50, 0xf033, 0xee50, 0xf033, 0xf015, 0xf1d2, +0xf015, 0xf1d2, 0xf04c, 0xf1ea, 0xf04c, 0xf1ea, 0xf07f, 0xf201, 0xf07f, 0xf201, 0xf2ba, +0xf425, 0xf2ba, 0xf425, 0xf1ed, 0xf343, 0xf1ed, 0xf343, 0xf1ed, 0xf343, 0xf17c, 0xf2bf, +0xf17c, 0xf2bf, 0xf1da, 0xf309, 0xf1da, 0xf309, 0xf222, 0xf33c, 0xf222, 0xf33c, 0xf2c4, +0xf3c7, 0xf2c4, 0xf3c7, 0xf3fb, 0xf4e2, 0xf3fb, 0xf4e2, 0xf3fb, 0xf4e2, 0xf639, 0xf701, +0xf639, 0xf701, 0xf72d, 0xf7d0, 0xf72d, 0xf7d0, 0xf89a, 0xf913, 0xf89a, 0xf913, 0xfba2, +0xfbea, 0xfba2, 0xfbea, 0xfdde, 0xfdef, 0xfdde, 0xfdef, 0x132, 0x106, 0x132, 0x106, +0x132, 0x106, 0x4b7, 0x449, 0x4b7, 0x449, 0x84c, 0x796, 0x84c, 0x796, 0xac3, +0x9c2, 0xac3, 0x9c2, 0xc8a, 0xb39, 0xc8a, 0xb39, 0xeb6, 0xd15, 0xeb6, 0xd15, +0xf43, 0xd50, 0xf43, 0xd50, 0xf43, 0xd50, 0x119b, 0xf56, 0x119b, 0xf56, 0x14de, +0x124a, 0x14de, 0x124a, 0x1626, 0x1346, 0x1626, 0x1346, 0x1683, 0x135a, 0x1683, 0x135a, +0x1748, 0x13dd, 0x1748, 0x13dd, 0x1748, 0x13dd, 0x17eb, 0x1444, 0x17eb, 0x1444, 0x19fe, +0x1623, 0x19fe, 0x1623, 0x1bef, 0x17e9, 0x1bef, 0x17e9, 0x1c84, 0x185c, 0x1c84, 0x185c, +0x1b97, 0x1757, 0x1b97, 0x1757, 0x1b53, 0x1704, 0x1b53, 0x1704, 0x1b53, 0x1704, 0x1ac5, +0x1672, 0x1ac5, 0x1672, 0x1a43, 0x15f6, 0x1a43, 0x15f6, 0x1b27, 0x16ea, 0x1b27, 0x16ea, +0x191f, 0x14fc, 0x191f, 0x14fc, 0x182b, 0x142a, 0x182b, 0x142a, 0x16ca, 0x12f4, 0x16ca, +0x12f4, 0x16ca, 0x12f4, 0x15b7, 0x1214, 0x15b7, 0x1214, 0x148e, 0x1125, 0x148e, 0x1125, +0x10ea, 0xdc2, 0x10ea, 0xdc2, 0x1024, 0xd42, 0x1024, 0xd42, 0xda4, 0xb0c, 0xda4, +0xb0c, 0xda4, 0xb0c, 0xbec, 0x9a2, 0xbec, 0x9a2, 0xb22, 0x929, 0xb22, 0x929, +0x9f4, 0x84d, 0x9f4, 0x84d, 0xa51, 0x8fd, 0xa51, 0x8fd, 0x84d, 0x74c, 0x84d, +0x74c, 0x80d, 0x75d, 0x80d, 0x75d, 0x80d, 0x75d, 0x676, 0x616, 0x676, 0x616, +0x41c, 0x40a, 0x41c, 0x40a, 0x28b, 0x2c2, 0x28b, 0x2c2, 0xffc9, 0x46, 0xffc9, +0x46, 0xfe7a, 0xff38, 0xfe7a, 0xff38, 0xff29, 0x22, 0xff29, 0x22, 0xff29, 0x22, +0xfe88, 0xffb7, 0xfe88, 0xffb7, 0xfb78, 0xfcd7, 0xfb78, 0xfcd7, 0xf938, 0xfac1, 0xf938, +0xfac1, 0xf84d, 0xf9f8, 0xf84d, 0xf9f8, 0xf6f8, 0xf8be, 0xf6f8, 0xf8be, 0xf6f8, 0xf8be, +0xf607, 0xf7e2, 0xf607, 0xf7e2, 0xf531, 0xf71a, 0xf531, 0xf71a, 0xf353, 0xf544, 0xf353, +0xf544, 0xf1a4, 0xf396, 0xf1a4, 0xf396, 0xf05d, 0xf249, 0xf05d, 0xf249, 0xf263, 0xf444, +0xf263, 0xf444, 0xf263, 0xf444, 0xf1fd, 0xf3cd, 0xf1fd, 0xf3cd, 0xf324, 0xf4df, 0xf324, +0xf4df, 0xf511, 0xf6b3, 0xf511, 0xf6b3, 0xf5af, 0xf734, 0xf5af, 0xf734, 0xf630, 0xf795, +0xf630, 0xf795, 0xf5dc, 0xf71f, 0xf5dc, 0xf71f, 0xf5dc, 0xf71f, 0xf7ba, 0xf8d9, 0xf7ba, +0xf8d9, 0xf85e, 0xf95a, 0xf85e, 0xf95a, 0xfbbe, 0xfc95, 0xfbbe, 0xfc95, 0xff10, 0xffc4, +0xff10, 0xffc4, 0xffd9, 0x69, 0xffd9, 0x69, 0xffd9, 0x69, 0xffb2, 0x21, 0xffb2, +0x21, 0x9a, 0xea, 0x9a, 0xea, 0x1d1, 0x205, 0x1d1, 0x205, 0x3b7, 0x3d0, +0x3b7, 0x3d0, 0x4f5, 0x4f7, 0x4f5, 0x4f7, 0x59e, 0x58b, 0x59e, 0x58b, 0x59e, +0x58b, 0x578, 0x554, 0x578, 0x554, 0x5c4, 0x592, 0x5c4, 0x592, 0x509, 0x4cc, +0x509, 0x4cc, 0x405, 0x3c0, 0x405, 0x3c0, 0x4e9, 0x49e, 0x4e9, 0x49e, 0x4e9, +0x49e, 0x4c1, 0x473, 0x4c1, 0x473, 0x67d, 0x62e, 0x67d, 0x62e, 0x599, 0x54b, +0x599, 0x54b, 0x4dd, 0x491, 0x4dd, 0x491, 0x3dc, 0x395, 0x3dc, 0x395, 0x315, +0x2d3, 0x315, 0x2d3, 0x315, 0x2d3, 0x389, 0x34e, 0x389, 0x34e, 0x404, 0x3d2, +0x404, 0x3d2, 0x2f2, 0x2c9, 0x2f2, 0x2c9, 0x238, 0x218, 0x238, 0x218, 0x1a6, +0x191, 0x1a6, 0x191, 0x1cc, 0x1c2, 0x1cc, 0x1c2, 0x1cc, 0x1c2, 0x2fe, 0x2ff, +0x2fe, 0x2ff, 0x30c, 0x31a, 0x30c, 0x31a, 0x4e7, 0x500, 0x4e7, 0x500, 0x57a, +0x59e, 0x57a, 0x59e, 0x80f, 0x83f, 0x80f, 0x83f, 0x80f, 0x83f, 0x8c3, 0x8fd, +0x8c3, 0x8fd, 0x7a5, 0x7e9, 0x7a5, 0x7e9, 0x7d4, 0x820, 0x7d4, 0x820, 0x727, +0x779, 0x727, 0x779, 0x6eb, 0x741, 0x6eb, 0x741, 0x923, 0x97c, 0x923, 0x97c, +0x923, 0x97c, 0x9cd, 0xa25, 0x9cd, 0xa25, 0x977, 0x9ca, 0x977, 0x9ca, 0x8b3, +0x8fe, 0x8b3, 0x8fe, 0x8bc, 0x8fb, 0x8bc, 0x8fb, 0x7b8, 0x7e6, 0x7b8, 0x7e6, +0x675, 0x68e, 0x675, 0x68e, 0x675, 0x68e, 0x6ed, 0x6eb, 0x6ed, 0x6eb, 0x6a3, +0x682, 0x6a3, 0x682, 0x72e, 0x6e9, 0x72e, 0x6e9, 0x630, 0x5c2, 0x630, 0x5c2, +0x679, 0x5df, 0x679, 0x5df, 0x679, 0x5df, 0x3fd, 0x332, 0x3fd, 0x332, 0x552, +0x453, 0x552, 0x453, 0x748, 0x613, 0x748, 0x613, 0x8e4, 0x777, 0x8e4, 0x777, +0xb08, 0x962, 0xb08, 0x962, 0xcd8, 0xaf9, 0xcd8, 0xaf9, 0xcd8, 0xaf9, 0xf35, +0xd1e, 0xf35, 0xd1e, 0xf17, 0xcca, 0xf17, 0xcca, 0x1134, 0xeb3, 0x1134, 0xeb3, +0x1228, 0xf76, 0x1228, 0xf76, 0x127b, 0xf9e, 0x127b, 0xf9e, 0x12f9, 0xff4, 0x12f9, +0xff4, 0x12f9, 0xff4, 0x14dd, 0x11b6, 0x14dd, 0x11b6, 0x147d, 0x1139, 0x147d, 0x1139, +0x1464, 0x110a, 0x1464, 0x110a, 0x1478, 0x110d, 0x1478, 0x110d, 0x14e8, 0x1170, 0x14e8, +0x1170, 0x14e8, 0x1170, 0x155d, 0x11de, 0x155d, 0x11de, 0x16fa, 0x1378, 0x16fa, 0x1378, +0x176b, 0x13ea, 0x176b, 0x13ea, 0x1649, 0x12cc, 0x1649, 0x12cc, 0x15e0, 0x1269, 0x15e0, +0x1269, 0x141c, 0x10aa, 0x141c, 0x10aa, 0x141c, 0x10aa, 0x14a1, 0x1135, 0x14a1, 0x1135, +0x13c1, 0x1059, 0x13c1, 0x1059, 0x1418, 0x10b2, 0x1418, 0x10b2, 0x1440, 0x10d9, 0x1440, +0x10d9, 0x1407, 0x109b, 0x1407, 0x109b, 0x141e, 0x10ab, 0x141e, 0x10ab, 0x141e, 0x10ab, +0x1184, 0xe02, 0x1184, 0xe02, 0xf59, 0xbc6, 0xf59, 0xbc6, 0x10a9, 0xd00, 0x10a9, +0xd00, 0x1065, 0xca2, 0x1065, 0xca2, 0x1177, 0xd97, 0x1177, 0xd97, 0x1177, 0xd97, +0x120f, 0xe10, 0x120f, 0xe10, 0x12c1, 0xea1, 0x12c1, 0xea1, 0x12d4, 0xe94, 0x12d4, +0xe94, 0x11ed, 0xd8f, 0x11ed, 0xd8f, 0x14d7, 0x105e, 0x14d7, 0x105e, 0x13d3, 0xf44, +0x13d3, 0xf44, 0x13d3, 0xf44, 0x142b, 0xf8c, 0x142b, 0xf8c, 0x149a, 0xff3, 0x149a, +0xff3, 0x14a8, 0x1003, 0x14a8, 0x1003, 0x14d6, 0x103e, 0x14d6, 0x103e, 0x160f, 0x118f, +0x160f, 0x118f, 0x16c4, 0x126a, 0x16c4, 0x126a, 0x16c4, 0x126a, 0x1574, 0x114b, 0x1574, +0x114b, 0x1609, 0x1220, 0x1609, 0x1220, 0x14c5, 0x1129, 0x14c5, 0x1129, 0x11f7, 0xeb5, +0x11f7, 0xeb5, 0xf9a, 0xcbd, 0xf9a, 0xcbd, 0xf9a, 0xcbd, 0xdb7, 0xb49, 0xdb7, +0xb49, 0xaed, 0x8f8, 0xaed, 0x8f8, 0x610, 0x49b, 0x610, 0x49b, 0x390, 0x2a0, +0x390, 0x2a0, 0x240, 0x1da, 0x240, 0x1da, 0x25, 0x49, 0x25, 0x49, 0x25, +0x49, 0x103, 0x1b0, 0x103, 0x1b0, 0xff1f, 0x52, 0xff1f, 0x52, 0xfafa, 0xfcad, +0xfafa, 0xfcad, 0xf5ff, 0xf82b, 0xf5ff, 0xf82b, 0xf2d2, 0xf56d, 0xf2d2, 0xf56d, 0xf03a, +0xf33a, 0xf03a, 0xf33a, 0xf03a, 0xf33a, 0xee05, 0xf15d, 0xee05, 0xf15d, 0xee2d, 0xf1d1, +0xee2d, 0xf1d1, 0xec02, 0xefe2, 0xec02, 0xefe2, 0xe8dd, 0xecec, 0xe8dd, 0xecec, 0xe7f3, +0xec22, 0xe7f3, 0xec22, 0xe7f3, 0xec22, 0xe7a1, 0xebe3, 0xe7a1, 0xebe3, 0xe716, 0xeb5d, +0xe716, 0xeb5d, 0xe8da, 0xed1a, 0xe8da, 0xed1a, 0xeaed, 0xef1a, 0xeaed, 0xef1a, 0xec05, +0xf016, 0xec05, 0xf016, 0xec84, 0xf06f, 0xec84, 0xf06f, 0xec84, 0xf06f, 0xee91, 0xf250, +0xee91, 0xf250, 0xee42, 0xf1cf, 0xee42, 0xf1cf, 0xf014, 0xf36c, 0xf014, 0xf36c, 0xf27d, +0xf59c, 0xf27d, 0xf59c, 0xf37f, 0xf664, 0xf37f, 0xf664, 0xf584, 0xf82f, 0xf584, 0xf82f, +0xf584, 0xf82f, 0xf4e0, 0xf752, 0xf4e0, 0xf752, 0xf670, 0xf8ab, 0xf670, 0xf8ab, 0xf5c4, +0xf7cb, 0xf5c4, 0xf7cb, 0xf725, 0xf8f9, 0xf725, 0xf8f9, 0xf9bd, 0xfb62, 0xf9bd, 0xfb62, +0xf9bd, 0xfb62, 0xf953, 0xfacb, 0xf953, 0xfacb, 0xfad0, 0xfc1f, 0xfad0, 0xfc1f, 0xfac5, +0xfbed, 0xfac5, 0xfbed, 0xfaf2, 0xfbf5, 0xfaf2, 0xfbf5, 0xfa8b, 0xfb6b, 0xfa8b, 0xfb6b, +0xfb0b, 0xfbca, 0xfb0b, 0xfbca, 0xfb0b, 0xfbca, 0xfc32, 0xfcd0, 0xfc32, 0xfcd0, 0xfbf7, +0xfc75, 0xfbf7, 0xfc75, 0xfdfb, 0xfe59, 0xfdfb, 0xfe59, 0xfeba, 0xfef9, 0xfeba, 0xfef9, +0xfe0c, 0xfe2d, 0xfe0c, 0xfe2d, 0xfcfd, 0xfd01, 0xfcfd, 0xfd01, 0xfcfd, 0xfd01, 0xfc62, +0xfc4a, 0xfc62, 0xfc4a, 0xfa53, 0xfa20, 0xfa53, 0xfa20, 0xfa22, 0xf9d8, 0xfa22, 0xf9d8, +0xfd60, 0xfd02, 0xfd60, 0xfd02, 0xfd30, 0xfcc2, 0xfd30, 0xfcc2, 0xfd30, 0xfcc2, 0xfce8, +0xfc70, 0xfce8, 0xfc70, 0xfcff, 0xfc82, 0xfcff, 0xfc82, 0xfcb8, 0xfc3e, 0xfcb8, 0xfc3e, +0xfc36, 0xfbc6, 0xfc36, 0xfbc6, 0xfb73, 0xfb16, 0xfb73, 0xfb16, 0xfbc4, 0xfb83, 0xfbc4, +0xfb83, 0xfbc4, 0xfb83, 0xfa51, 0xfa34, 0xfa51, 0xfa34, 0xf85a, 0xf86b, 0xf85a, 0xf86b, +0xf69b, 0xf6e2, 0xf69b, 0xf6e2, 0xf3fd, 0xf484, 0xf3fd, 0xf484, 0xf2e3, 0xf3b1, 0xf2e3, +0xf3b1, 0xf2e3, 0xf3b1, 0xf2b3, 0xf3cd, 0xf2b3, 0xf3cd, 0xf1ae, 0xf31c, 0xf1ae, 0xf31c, +0xefa5, 0xf169, 0xefa5, 0xf169, 0xee17, 0xf035, 0xee17, 0xf035, 0xeb44, 0xedbc, 0xeb44, +0xedbc, 0xe794, 0xea65, 0xe794, 0xea65, 0xe794, 0xea65, 0xe4f2, 0xe818, 0xe4f2, 0xe818, +0xe401, 0xe778, 0xe401, 0xe778, 0xe25d, 0xe620, 0xe25d, 0xe620, 0xe09c, 0xe4a3, 0xe09c, +0xe4a3, 0xe055, 0xe497, 0xe055, 0xe497, 0xde69, 0xe2dd, 0xde69, 0xe2dd, 0xde69, 0xe2dd, +0xdcea, 0xe186, 0xdcea, 0xe186, 0xdae5, 0xdf9d, 0xdae5, 0xdf9d, 0xd981, 0xde4b, 0xd981, +0xde4b, 0xd851, 0xdd23, 0xd851, 0xdd23, 0xd9a7, 0xde77, 0xd9a7, 0xde77, 0xd9a7, 0xde77, +0xda67, 0xdf2b, 0xda67, 0xdf2b, 0xd8ec, 0xdd9d, 0xd8ec, 0xdd9d, 0xd935, 0xddcd, 0xd935, +0xddcd, 0xd8b5, 0xdd2d, 0xd8b5, 0xdd2d, 0xda77, 0xdecc, 0xda77, 0xdecc, 0xddc7, 0xe1f6, +0xddc7, 0xe1f6, 0xddc7, 0xe1f6, 0xe115, 0xe51e, 0xe115, 0xe51e, 0xe3b4, 0xe796, 0xe3b4, +0xe796, 0xe4f7, 0xe8b5, 0xe4f7, 0xe8b5, 0xe777, 0xeb13, 0xe777, 0xeb13, 0xe8a9, 0xec26, +0xe8a9, 0xec26, 0xe81a, 0xeb7c, 0xe81a, 0xeb7c, 0xe81a, 0xeb7c, 0xea91, 0xeddb, 0xea91, +0xeddb, 0xed09, 0xf03f, 0xed09, 0xf03f, 0xef17, 0xf23c, 0xef17, 0xf23c, 0xf132, 0xf44a, +0xf132, 0xf44a, 0xf28c, 0xf597, 0xf28c, 0xf597, 0xf28c, 0xf597, 0xf1e8, 0xf4e7, 0xf1e8, +0xf4e7, 0xf131, 0xf424, 0xf131, 0xf424, 0xf2ef, 0xf5d4, 0xf2ef, 0xf5d4, 0xf493, 0xf767, +0xf493, 0xf767, 0xf4e2, 0xf79f, 0xf4e2, 0xf79f, 0xf645, 0xf8e7, 0xf645, 0xf8e7, 0xf645, +0xf8e7, 0xf6b9, 0xf937, 0xf6b9, 0xf937, 0xf537, 0xf78a, 0xf537, 0xf78a, 0xf792, 0xf9b1, +0xf792, 0xf9b1, 0xf9c1, 0xfba2, 0xf9c1, 0xfba2, 0xfb7a, 0xfd15, 0xfb7a, 0xfd15, 0xfe50, +0xff9b, 0xfe50, 0xff9b, 0xfe50, 0xff9b, 0x2ec, 0x3df, 0x2ec, 0x3df, 0x535, 0x5c8, +0x535, 0x5c8, 0x729, 0x757, 0x729, 0x757, 0x9ce, 0x990, 0x9ce, 0x990, 0xb39, +0xa8d, 0xb39, 0xa8d, 0xb39, 0xa8d, 0xcc2, 0xba6, 0xcc2, 0xba6, 0xe8d, 0xd00, +0xe8d, 0xd00, 0x1288, 0x108d, 0x1288, 0x108d, 0x135d, 0x10f8, 0x135d, 0x10f8, 0x1635, +0x136c, 0x1635, 0x136c, 0x19ad, 0x1687, 0x19ad, 0x1687, 0x19ad, 0x1687, 0x1ade, 0x1765, +0x1ade, 0x1765, 0x1b3a, 0x1778, 0x1b3a, 0x1778, 0x1b50, 0x1751, 0x1b50, 0x1751, 0x1cb0, +0x1880, 0x1cb0, 0x1880, 0x1ce6, 0x1891, 0x1ce6, 0x1891, 0x1d74, 0x1909, 0x1d74, 0x1909, +0x1d74, 0x1909, 0x1db3, 0x193d, 0x1db3, 0x193d, 0x1b2d, 0x16ba, 0x1b2d, 0x16ba, 0x1acd, +0x1668, 0x1acd, 0x1668, 0x1a37, 0x15eb, 0x1a37, 0x15eb, 0x183d, 0x1415, 0x183d, 0x1415, +0x183d, 0x1415, 0x17a4, 0x13a9, 0x17a4, 0x13a9, 0x16f8, 0x1333, 0x16f8, 0x1333, 0x16c7, +0x133d, 0x16c7, 0x133d, 0x138f, 0x1046, 0x138f, 0x1046, 0x1213, 0xf10, 0x1213, 0xf10, +0xe70, 0xbb4, 0xe70, 0xbb4, 0xe70, 0xbb4, 0xb4f, 0x8de, 0xb4f, 0x8de, 0xb67, +0x941, 0xb67, 0x941, 0xa55, 0x87c, 0xa55, 0x87c, 0xb1e, 0x98f, 0xb1e, 0x98f, +0x9a1, 0x85d, 0x9a1, 0x85d, 0x7af, 0x6b4, 0x7af, 0x6b4, 0x7af, 0x6b4, 0x637, +0x584, 0x637, 0x584, 0x408, 0x39b, 0x408, 0x39b, 0x452, 0x428, 0x452, 0x428, +0x342, 0x35a, 0x342, 0x35a, 0x142, 0x199, 0x142, 0x199, 0x142, 0x199, 0x42, +0xd7, 0x42, 0xd7, 0xfd2d, 0xfdfc, 0xfd2d, 0xfdfc, 0xfbba, 0xfcc1, 0xfbba, 0xfcc1, +0xf94d, 0xfa89, 0xf94d, 0xfa89, 0xf938, 0xfaa5, 0xf938, 0xfaa5, 0xf8f2, 0xfa8c, 0xf8f2, +0xfa8c, 0xf8f2, 0xfa8c, 0xf7b6, 0xf979, 0xf7b6, 0xf979, 0xf7ce, 0xf9b4, 0xf7ce, 0xf9b4, +0xf4e3, 0xf6e7, 0xf4e3, 0xf6e7, 0xf36f, 0xf58b, 0xf36f, 0xf58b, 0xf2d5, 0xf501, 0xf2d5, +0xf501, 0xf28c, 0xf4c3, 0xf28c, 0xf4c3, 0xf28c, 0xf4c3, 0xf1c0, 0xf3f8, 0xf1c0, 0xf3f8, +0xf387, 0xf5b9, 0xf387, 0xf5b9, 0xf4cf, 0xf6f3, 0xf4cf, 0xf6f3, 0xf385, 0xf592, 0xf385, +0xf592, 0xf46c, 0xf65b, 0xf46c, 0xf65b, 0xf46c, 0xf65b, 0xf57a, 0xf743, 0xf57a, 0xf743, +0xf6fe, 0xf89a, 0xf6fe, 0xf89a, 0xf923, 0xfa8c, 0xf923, 0xfa8c, 0xfb0e, 0xfc3f, 0xfb0e, +0xfc3f, 0xfcdb, 0xfdd1, 0xfcdb, 0xfdd1, 0xfc67, 0xfd1e, 0xfc67, 0xfd1e, 0xfc67, 0xfd1e, +0xfdb5, 0xfe2d, 0xfdb5, 0xfe2d, 0xfedc, 0xff14, 0xfedc, 0xff14, 0xffbc, 0xffb6, 0xffbc, +0xffb6, 0x2e1, 0x2a0, 0x2e1, 0x2a0, 0x413, 0x39b, 0x413, 0x39b, 0x551, 0x4a8, +0x551, 0x4a8, 0x551, 0x4a8, 0x4f0, 0x41c, 0x4f0, 0x41c, 0x5e4, 0x4ec, 0x5e4, +0x4ec, 0x4f1, 0x3dd, 0x4f1, 0x3dd, 0x2cf, 0x1a7, 0x2cf, 0x1a7, 0x437, 0x302, +0x437, 0x302, 0x437, 0x302, 0x4c1, 0x388, 0x4c1, 0x388, 0x4f0, 0x3ba, 0x4f0, +0x3ba, 0x5b6, 0x489, 0x5b6, 0x489, 0x627, 0x509, 0x627, 0x509, 0x4d7, 0x3cd, +0x4d7, 0x3cd, 0x2f3, 0x200, 0x2f3, 0x200, 0x2f3, 0x200, 0x255, 0x17c, 0x255, +0x17c, 0x190, 0xd1, 0x190, 0xd1, 0xc0, 0x1b, 0xc0, 0x1b, 0xe7, 0x5b, +0xe7, 0x5b, 0xfe4a, 0xfdd4, 0xfe4a, 0xfdd4, 0xfe2e, 0xfdcb, 0xfe2e, 0xfdcb, 0xfe2e, +0xfdcb, 0xfe52, 0xfdfe, 0xfe52, 0xfdfe, 0xfd48, 0xfcfe, 0xfd48, 0xfcfe, 0xfeda, 0xfe95, +0xfeda, 0xfe95, 0xffc6, 0xff81, 0xffc6, 0xff81, 0x23b, 0x1f2, 0x23b, 0x1f2, 0x23b, +0x1f2, 0x24f, 0x1fd, 0x24f, 0x1fd, 0x17c, 0x11e, 0x17c, 0x11e, 0x193, 0x124, +0x193, 0x124, 0xffea, 0xff67, 0xffea, 0xff67, 0xa6, 0xf, 0xa6, 0xf, 0x197, +0xea, 0x197, 0xea, 0x197, 0xea, 0x2f1, 0x22d, 0x2f1, 0x22d, 0x3f8, 0x31d, +0x3f8, 0x31d, 0x37f, 0x28e, 0x37f, 0x28e, 0x476, 0x371, 0x476, 0x371, 0x330, +0x217, 0x330, 0x217, 0x330, 0x217, 0x37b, 0x250, 0x37b, 0x250, 0x47b, 0x33f, +0x47b, 0x33f, 0x4bc, 0x371, 0x4bc, 0x371, 0x55a, 0x400, 0x55a, 0x400, 0x53a, +0x3d2, 0x53a, 0x3d2, 0x36c, 0x1f5, 0x36c, 0x1f5, 0x36c, 0x1f5, 0xfd, 0xff76, +0xfd, 0xff76, 0x342, 0x1aa, 0x342, 0x1aa, 0x4ab, 0x2ff, 0x4ab, 0x2ff, 0x686, +0x4c4, 0x686, 0x4c4, 0x903, 0x727, 0x903, 0x727, 0xaa1, 0x8a7, 0xaa1, 0x8a7, +0xaa1, 0x8a7, 0xc29, 0xa0d, 0xc29, 0xa0d, 0xc2d, 0x9ed, 0xc2d, 0x9ed, 0xd57, +0xaed, 0xd57, 0xaed, 0xe25, 0xb8e, 0xe25, 0xb8e, 0x1034, 0xd6e, 0x1034, 0xd6e, +0x1034, 0xd6e, 0x12d4, 0xfdd, 0x12d4, 0xfdd, 0x13fb, 0x10d2, 0x13fb, 0x10d2, 0x14b1, +0x1156, 0x14b1, 0x1156, 0x1538, 0x11ac, 0x1538, 0x11ac, 0x16f5, 0x133a, 0x16f5, 0x133a, +0x1844, 0x145d, 0x1844, 0x145d, 0x1844, 0x145d, 0x1947, 0x1539, 0x1947, 0x1539, 0x1ad9, +0x16a8, 0x1ad9, 0x16a8, 0x1ad7, 0x1689, 0x1ad7, 0x1689, 0x1a07, 0x15a3, 0x1a07, 0x15a3, +0x1a37, 0x15c3, 0x1a37, 0x15c3, 0x1a2f, 0x15b3, 0x1a2f, 0x15b3, 0x1a2f, 0x15b3, 0x190d, +0x148e, 0x190d, 0x148e, 0x193d, 0x14c2, 0x193d, 0x14c2, 0x18ed, 0x147c, 0x18ed, 0x147c, +0x1739, 0x12d7, 0x1739, 0x12d7, 0x166b, 0x121b, 0x166b, 0x121b, 0x166b, 0x121b, 0x15fe, +0x11c4, 0x15fe, 0x11c4, 0x1496, 0x1074, 0x1496, 0x1074, 0x142e, 0x1024, 0x142e, 0x1024, +0x1496, 0x10a4, 0x1496, 0x10a4, 0x12a3, 0xec9, 0x12a3, 0xec9, 0x1297, 0xed4, 0x1297, +0xed4, 0x1297, 0xed4, 0x136c, 0xfbc, 0x136c, 0xfbc, 0x144d, 0x10ae, 0x144d, 0x10ae, +0x156b, 0x11dc, 0x156b, 0x11dc, 0x143c, 0x10b9, 0x143c, 0x10b9, 0x1468, 0x10f0, 0x1468, +0x10f0, 0x1440, 0x10d2, 0x1440, 0x10d2, 0x1440, 0x10d2, 0x14ff, 0x119a, 0x14ff, 0x119a, +0x15f5, 0x129a, 0x15f5, 0x129a, 0x1549, 0x11fb, 0x1549, 0x11fb, 0x1639, 0x12fc, 0x1639, +0x12fc, 0x15d4, 0x12ac, 0x15d4, 0x12ac, 0x15d4, 0x12ac, 0x162c, 0x131f, 0x162c, 0x131f, +0x1604, 0x131b, 0x1604, 0x131b, 0x15e8, 0x132b, 0x15e8, 0x132b, 0x17bb, 0x1533, 0x17bb, +0x1533, 0x1711, 0x14c8, 0x1711, 0x14c8, 0x1667, 0x1467, 0x1667, 0x1467, 0x1667, 0x1467, +0x14b4, 0x1307, 0x14b4, 0x1307, 0x108b, 0xf3b, 0x108b, 0xf3b, 0xd27, 0xc3b, 0xd27, +0xc3b, 0xb49, 0xac9, 0xb49, 0xac9, 0x968, 0x95a, 0x968, 0x95a, 0x796, 0x7fd, +0x796, 0x7fd, 0x796, 0x7fd, 0x6d0, 0x7ae, 0x6d0, 0x7ae, 0x430, 0x583, 0x430, +0x583, 0x7d, 0x244, 0x7d, 0x244, 0xfe71, 0xa5, 0xfe71, 0xa5, 0xfbe6, 0xfe80, +0xfbe6, 0xfe80, 0xfbe6, 0xfe80, 0xf957, 0xfc4c, 0xf957, 0xfc4c, 0xf5fa, 0xf93f, 0xf5fa, +0xf93f, 0xf2ce, 0xf656, 0xf2ce, 0xf656, 0xf007, 0xf3c3, 0xf007, 0xf3c3, 0xec94, 0xf074, +0xec94, 0xf074, 0xeb0a, 0xef00, 0xeb0a, 0xef00, 0xeb0a, 0xef00, 0xe9df, 0xedda, 0xe9df, +0xedda, 0xea84, 0xee75, 0xea84, 0xee75, 0xec02, 0xefda, 0xec02, 0xefda, 0xedc9, 0xf17c, +0xedc9, 0xf17c, 0xeee9, 0xf26a, 0xeee9, 0xf26a, 0xed6f, 0xf0b4, 0xed6f, 0xf0b4, 0xed6f, +0xf0b4, 0xee1c, 0xf11e, 0xee1c, 0xf11e, 0xeef0, 0xf1a9, 0xeef0, 0xf1a9, 0xeff0, 0xf25c, +0xeff0, 0xf25c, 0xf31f, 0xf53c, 0xf31f, 0xf53c, 0xf4e7, 0xf6b6, 0xf4e7, 0xf6b6, 0xf4e7, +0xf6b6, 0xf5e5, 0xf768, 0xf5e5, 0xf768, 0xf639, 0xf774, 0xf639, 0xf774, 0xf704, 0xf7fd, +0xf704, 0xf7fd, 0xf769, 0xf824, 0xf769, 0xf824, 0xf807, 0xf88c, 0xf807, 0xf88c, 0xf9a2, +0xf9f8, 0xf9a2, 0xf9f8, 0xf9a2, 0xf9f8, 0xf95f, 0xf98e, 0xf95f, 0xf98e, 0xfac5, 0xfad3, +0xfac5, 0xfad3, 0xfab9, 0xfaac, 0xfab9, 0xfaac, 0xf9cf, 0xf9ae, 0xf9cf, 0xf9ae, 0xfada, +0xfaa9, 0xfada, 0xfaa9, 0xfa05, 0xf9c8, 0xfa05, 0xf9c8, 0xfa05, 0xf9c8, 0xf987, 0xf942, +0xf987, 0xf942, 0xf928, 0xf8de, 0xf928, 0xf8de, 0xf8f0, 0xf8a3, 0xf8f0, 0xf8a3, 0xf9a1, +0xf951, 0xf9a1, 0xf951, 0xf92f, 0xf8de, 0xf92f, 0xf8de, 0xf92f, 0xf8de, 0xf9ad, 0xf95c, +0xf9ad, 0xf95c, 0xf8ce, 0xf87f, 0xf8ce, 0xf87f, 0xf73d, 0xf6f0, 0xf73d, 0xf6f0, 0xf79a, +0xf752, 0xf79a, 0xf752, 0xf863, 0xf822, 0xf863, 0xf822, 0xfa7e, 0xfa49, 0xfa7e, 0xfa49, +0xfa7e, 0xfa49, 0xfa42, 0xfa1d, 0xfa42, 0xfa1d, 0xfaa9, 0xfa9a, 0xfaa9, 0xfa9a, 0xfbe1, +0xfbef, 0xfbe1, 0xfbef, 0xfabd, 0xfaf0, 0xfabd, 0xfaf0, 0xfab9, 0xfb19, 0xfab9, 0xfb19, +0xfa8b, 0xfb21, 0xfa8b, 0xfb21, 0xfa8b, 0xfb21, 0xf9f1, 0xfac8, 0xf9f1, 0xfac8, 0xfa30, +0xfb50, 0xfa30, 0xfb50, 0xfa0d, 0xfb81, 0xfa0d, 0xfb81, 0xf693, 0xf862, 0xf693, 0xf862, +0xf3bb, 0xf5ee, 0xf3bb, 0xf5ee, 0xf3bb, 0xf5ee, 0xf40d, 0xf6ab, 0xf40d, 0xf6ab, 0xf2a3, +0xf5b2, 0xf2a3, 0xf5b2, 0xf134, 0xf4b6, 0xf134, 0xf4b6, 0xef77, 0xf36e, 0xef77, 0xf36e, +0xecd7, 0xf143, 0xecd7, 0xf143, 0xe94e, 0xee2c, 0xe94e, 0xee2c, 0xe94e, 0xee2c, 0xe55b, +0xeaa6, 0xe55b, 0xeaa6, 0xe3bb, 0xe96e, 0xe3bb, 0xe96e, 0xe18a, 0xe79c, 0xe18a, 0xe79c, +0xe073, 0xe6da, 0xe073, 0xe6da, 0xdea8, 0xe557, 0xdea8, 0xe557, 0xdc17, 0xe303, 0xdc17, +0xe303, 0xdc17, 0xe303, 0xdae6, 0xe202, 0xdae6, 0xe202, 0xd9b1, 0xe0f0, 0xd9b1, 0xe0f0, +0xda6a, 0xe1be, 0xda6a, 0xe1be, 0xd923, 0xe07f, 0xd923, 0xe07f, 0xd7d8, 0xdf30, 0xd7d8, +0xdf30, 0xd7d8, 0xdf30, 0xd7d4, 0xdf1c, 0xd7d4, 0xdf1c, 0xd5aa, 0xdcd9, 0xd5aa, 0xdcd9, +0xd4c6, 0xdbd3, 0xd4c6, 0xdbd3, 0xd62c, 0xdd0f, 0xd62c, 0xdd0f, 0xd7e0, 0xde95, 0xd7e0, +0xde95, 0xd8ca, 0xdf4c, 0xd8ca, 0xdf4c, 0xd8ca, 0xdf4c, 0xdac2, 0xe10f, 0xdac2, 0xe10f, +0xdd2f, 0xe344, 0xdd2f, 0xe344, 0xdd8a, 0xe368, 0xdd8a, 0xe368, 0xdf36, 0xe4de, 0xdf36, +0xe4de, 0xe06e, 0xe5e1, 0xe06e, 0xe5e1, 0xe06e, 0xe5e1, 0xe025, 0xe565, 0xe025, 0xe565, +0xe2d1, 0xe7df, 0xe2d1, 0xe7df, 0xe57f, 0xea5c, 0xe57f, 0xea5c, 0xe7f4, 0xeca2, 0xe7f4, +0xeca2, 0xea5d, 0xeeda, 0xea5d, 0xeeda, 0xeb0c, 0xef59, 0xeb0c, 0xef59, 0xeb0c, 0xef59, +0xec0a, 0xf024, 0xec0a, 0xf024, 0xec32, 0xf016, 0xec32, 0xf016, 0xed9e, 0xf149, 0xed9e, +0xf149, 0xeedc, 0xf247, 0xeedc, 0xf247, 0xee68, 0xf18e, 0xee68, 0xf18e, 0xef74, 0xf24c, +0xef74, 0xf24c, 0xef74, 0xf24c, 0xef57, 0xf1dc, 0xef57, 0xf1dc, 0xf007, 0xf230, 0xf007, +0xf230, 0xf118, 0xf2dd, 0xf118, 0xf2dd, 0xf277, 0xf3d1, 0xf277, 0xf3d1, 0xf54b, 0xf633, +0xf54b, 0xf633, 0xf54b, 0xf633, 0xf694, 0xf704, 0xf694, 0xf704, 0xfa29, 0xfa1d, 0xfa29, +0xfa1d, 0xfdd8, 0xfd4c, 0xfdd8, 0xfd4c, 0xffca, 0xfebd, 0xffca, 0xfebd, 0x35d, 0x1ce, +0x35d, 0x1ce, 0x669, 0x45d, 0x669, 0x45d, 0x669, 0x45d, 0x857, 0x5d0, 0x857, +0x5d0, 0xb4e, 0x854, 0xb4e, 0x854, 0xe9b, 0xb36, 0xe9b, 0xb36, 0xfd7, 0xc10, +0xfd7, 0xc10, 0x11c9, 0xdac, 0x11c9, 0xdac, 0x1555, 0x10ef, 0x1555, 0x10ef, 0x1555, +0x10ef, 0x17c8, 0x1326, 0x17c8, 0x1326, 0x1943, 0x1473, 0x1943, 0x1473, 0x1ae2, 0x15f3, +0x1ae2, 0x15f3, 0x1c83, 0x1784, 0x1c83, 0x1784, 0x1d0c, 0x180a, 0x1d0c, 0x180a, 0x1d0c, +0x180a, 0x1dc7, 0x18cf, 0x1dc7, 0x18cf, 0x1da1, 0x18bf, 0x1da1, 0x18bf, 0x1c60, 0x17a0, +0x1c60, 0x17a0, 0x1b7a, 0x16e4, 0x1b7a, 0x16e4, 0x1a2e, 0x15c9, 0x1a2e, 0x15c9, 0x1936, +0x150a, 0x1936, 0x150a, 0x1936, 0x150a, 0x18d9, 0x14ea, 0x18d9, 0x14ea, 0x199b, 0x15eb, +0x199b, 0x15eb, 0x19da, 0x166b, 0x19da, 0x166b, 0x1777, 0x1449, 0x1777, 0x1449, 0x1499, +0x11ac, 0x1499, 0x11ac, 0x12c2, 0x1014, 0x12c2, 0x1014, 0x12c2, 0x1014, 0x10ad, 0xe3c, +0x10ad, 0xe3c, 0xf59, 0xd23, 0xf59, 0xd23, 0xeea, 0xceb, 0xeea, 0xceb, 0xd54, +0xb8c, 0xd54, 0xb8c, 0xb99, 0xa05, 0xb99, 0xa05, 0xb99, 0xa05, 0xb01, 0x9a1, +0xb01, 0x9a1, 0x9c1, 0x893, 0x9c1, 0x893, 0x6f7, 0x5fc, 0x6f7, 0x5fc, 0x5d7, +0x510, 0x5d7, 0x510, 0x3f2, 0x360, 0x3f2, 0x360, 0x166, 0x10a, 0x166, 0x10a, +0x166, 0x10a, 0xeb, 0xc8, 0xeb, 0xc8, 0xfef1, 0xff07, 0xfef1, 0xff07, 0xfd22, +0xfd74, 0xfd22, 0xfd74, 0xfb93, 0xfc21, 0xfb93, 0xfc21, 0xfaae, 0xfb77, 0xfaae, 0xfb77, +0xf9ba, 0xfabd, 0xf9ba, 0xfabd, 0xf9ba, 0xfabd, 0xf71e, 0xf859, 0xf71e, 0xf859, 0xf691, +0xf800, 0xf691, 0xf800, 0xf4fc, 0xf69a, 0xf4fc, 0xf69a, 0xf373, 0xf538, 0xf373, 0xf538, +0xf341, 0xf526, 0xf341, 0xf526, 0xf341, 0xf526, 0xf21f, 0xf41a, 0xf21f, 0xf41a, 0xf1ec, +0xf3f1, 0xf1ec, 0xf3f1, 0xf14f, 0xf354, 0xf14f, 0xf354, 0xf251, 0xf44a, 0xf251, 0xf44a, +0xf37b, 0xf55c, 0xf37b, 0xf55c, 0xf363, 0xf520, 0xf363, 0xf520, 0xf363, 0xf520, 0xf677, +0xf806, 0xf677, 0xf806, 0xf8fb, 0xfa51, 0xf8fb, 0xfa51, 0xf9f1, 0xfb06, 0xf9f1, 0xfb06, +0xfbea, 0xfcb7, 0xfbea, 0xfcb7, 0xfdbb, 0xfe3e, 0xfdbb, 0xfe3e, 0xff57, 0xff8c, 0xff57, +0xff8c, 0xff57, 0xff8c, 0x1bd, 0x1a4, 0x1bd, 0x1a4, 0x3d2, 0x36e, 0x3d2, 0x36e, +0x398, 0x2ef, 0x398, 0x2ef, 0x43a, 0x354, 0x43a, 0x354, 0x5dd, 0x4c3, 0x5dd, +0x4c3, 0x5dd, 0x4c3, 0x6fb, 0x5b6, 0x6fb, 0x5b6, 0x819, 0x6b7, 0x819, 0x6b7, +0x860, 0x6ee, 0x860, 0x6ee, 0x805, 0x691, 0x805, 0x691, 0x6f5, 0x58b, 0x6f5, +0x58b, 0x76e, 0x61b, 0x76e, 0x61b, 0x76e, 0x61b, 0x8af, 0x77f, 0x8af, 0x77f, +0x956, 0x852, 0x956, 0x852, 0x9b8, 0x8e9, 0x9b8, 0x8e9, 0x8b5, 0x822, 0x8b5, +0x822, 0x8a3, 0x84f, 0x8a3, 0x84f, 0x8a7, 0x893, 0x8a7, 0x893, 0x8a7, 0x893, +0x812, 0x83e, 0x812, 0x83e, 0x7bf, 0x828, 0x7bf, 0x828, 0x67e, 0x720, 0x67e, +0x720, 0x6c2, 0x795, 0x6c2, 0x795, 0x6b9, 0x7b5, 0x6b9, 0x7b5, 0x6b9, 0x7b5, +0x4e0, 0x5fd, 0x4e0, 0x5fd, 0x38e, 0x4c2, 0x38e, 0x4c2, 0x290, 0x3d0, 0x290, +0x3d0, 0x304, 0x446, 0x304, 0x446, 0x3fa, 0x536, 0x3fa, 0x536, 0x5d2, 0x6ff, +0x5d2, 0x6ff, 0x5d2, 0x6ff, 0x557, 0x66e, 0x557, 0x66e, 0x2cc, 0x3c7, 0x2cc, +0x3c7, 0x2cb, 0x3a6, 0x2cb, 0x3a6, 0x144, 0x1fc, 0x144, 0x1fc, 0x1bc, 0x24f, +0x1bc, 0x24f, 0x312, 0x380, 0x312, 0x380, 0x312, 0x380, 0x2b0, 0x2fb, 0x2b0, +0x2fb, 0x2bf, 0x2e8, 0x2bf, 0x2e8, 0x1e5, 0x1ef, 0x1e5, 0x1ef, 0x313, 0x301, +0x313, 0x301, 0x270, 0x245, 0x270, 0x245, 0x270, 0x245, 0x244, 0x202, 0x244, +0x202, 0x3e2, 0x38c, 0x3e2, 0x38c, 0x329, 0x2c0, 0x329, 0x2c0, 0x39a, 0x31d, +0x39a, 0x31d, 0x2da, 0x248, 0x2da, 0x248, 0x159, 0xaf, 0x159, 0xaf, 0x159, +0xaf, 0x7f, 0xffba, 0x7f, 0xffba, 0x5d, 0xff78, 0x5d, 0xff78, 0x237, 0x12d, +0x237, 0x12d, 0x2ef, 0x1b9, 0x2ef, 0x1b9, 0x491, 0x327, 0x491, 0x327, 0x7e5, +0x642, 0x7e5, 0x642, 0x7e5, 0x642, 0x97a, 0x797, 0x97a, 0x797, 0xa5c, 0x833, +0xa5c, 0x833, 0xc2c, 0x9b8, 0xc2c, 0x9b8, 0xe0e, 0xb4b, 0xe0e, 0xb4b, 0xfec, +0xcd9, 0xfec, 0xcd9, 0xfec, 0xcd9, 0x1344, 0xfe0, 0x1344, 0xfe0, 0x1544, 0x1190, +0x1544, 0x1190, 0x1575, 0x1175, 0x1575, 0x1175, 0x1742, 0x12fc, 0x1742, 0x12fc, 0x197a, +0x14f5, 0x197a, 0x14f5, 0x1a44, 0x1589, 0x1a44, 0x1589, 0x1a44, 0x1589, 0x19f7, 0x150f, +0x19f7, 0x150f, 0x1aeb, 0x15e3, 0x1aeb, 0x15e3, 0x1bd5, 0x16b7, 0x1bd5, 0x16b7, 0x1c37, +0x1711, 0x1c37, 0x1711, 0x1cfa, 0x17d7, 0x1cfa, 0x17d7, 0x1cfa, 0x17d7, 0x1c52, 0x173d, +0x1c52, 0x173d, 0x1bf7, 0x16fc, 0x1bf7, 0x16fc, 0x1b6e, 0x1696, 0x1b6e, 0x1696, 0x19bb, +0x150d, 0x19bb, 0x150d, 0x17e5, 0x1368, 0x17e5, 0x1368, 0x16d8, 0x1290, 0x16d8, 0x1290, +0x16d8, 0x1290, 0x16b7, 0x12a7, 0x16b7, 0x12a7, 0x159c, 0x11c5, 0x159c, 0x11c5, 0x149a, +0x10f9, 0x149a, 0x10f9, 0x158a, 0x121e, 0x158a, 0x121e, 0x1632, 0x12f6, 0x1632, 0x12f6, +0x152e, 0x121d, 0x152e, 0x121d, 0x152e, 0x121d, 0x1441, 0x1156, 0x1441, 0x1156, 0x13d3, +0x1108, 0x13d3, 0x1108, 0x1399, 0x10e7, 0x1399, 0x10e7, 0x1455, 0x11b7, 0x1455, 0x11b7, +0x152c, 0x129d, 0x152c, 0x129d, 0x152c, 0x129d, 0x1394, 0x1111, 0x1394, 0x1111, 0x12d1, +0x1055, 0x12d1, 0x1055, 0x1310, 0x109c, 0x1310, 0x109c, 0x1247, 0xfdb, 0x1247, 0xfdb, +0x130e, 0x10ac, 0x130e, 0x10ac, 0x1341, 0x10ed, 0x1341, 0x10ed, 0x1341, 0x10ed, 0x1324, +0x10e3, 0x1324, 0x10e3, 0x1243, 0x101d, 0x1243, 0x101d, 0x1255, 0x1051, 0x1255, 0x1051, +0x13cf, 0x11f5, 0x13cf, 0x11f5, 0x1232, 0x108c, 0x1232, 0x108c, 0x1081, 0xf18, 0x1081, +0xf18, 0x1081, 0xf18, 0xe17, 0xcf4, 0xe17, 0xcf4, 0xb46, 0xa71, 0xb46, 0xa71, +0xa0d, 0x98f, 0xa0d, 0x98f, 0x877, 0x856, 0x877, 0x856, 0x642, 0x684, 0x642, +0x684, 0x642, 0x684, 0x30c, 0x3b2, 0x30c, 0x3b2, 0xb5, 0x1c2, 0xb5, 0x1c2, +0xff52, 0xc5, 0xff52, 0xc5, 0xfca7, 0xfe7e, 0xfca7, 0xfe7e, 0xfa80, 0xfcb6, 0xfa80, +0xfcb6, 0xf931, 0xfbbf, 0xf931, 0xfbbf, 0xf931, 0xfbbf, 0xf67c, 0xf959, 0xf67c, 0xf959, +0xf3d9, 0xf6fc, 0xf3d9, 0xf6fc, 0xf144, 0xf4a2, 0xf144, 0xf4a2, 0xed52, 0xf0dd, 0xed52, +0xf0dd, 0xeaf5, 0xeea1, 0xeaf5, 0xeea1, 0xeab0, 0xee6f, 0xeab0, 0xee6f, 0xeab0, 0xee6f, +0xe915, 0xecd9, 0xe915, 0xecd9, 0xe7a9, 0xeb64, 0xe7a9, 0xeb64, 0xe875, 0xec1b, 0xe875, +0xec1b, 0xe973, 0xecf8, 0xe973, 0xecf8, 0xe92b, 0xec83, 0xe92b, 0xec83, 0xe92b, 0xec83, +0xe908, 0xec2a, 0xe908, 0xec2a, 0xeb02, 0xede6, 0xeb02, 0xede6, 0xec28, 0xeec9, 0xec28, +0xeec9, 0xecba, 0xef12, 0xecba, 0xef12, 0xee04, 0xf010, 0xee04, 0xf010, 0xee5c, 0xf01b, +0xee5c, 0xf01b, 0xee5c, 0xf01b, 0xefcd, 0xf140, 0xefcd, 0xf140, 0xf25d, 0xf387, 0xf25d, +0xf387, 0xf3f5, 0xf4d8, 0xf3f5, 0xf4d8, 0xf4a6, 0xf547, 0xf4a6, 0xf547, 0xf54a, 0xf5b0, +0xf54a, 0xf5b0, 0xf713, 0xf743, 0xf713, 0xf743, 0xf713, 0xf743, 0xf8c0, 0xf8c2, 0xf8c0, +0xf8c2, 0xf8f0, 0xf8ca, 0xf8f0, 0xf8ca, 0xfa8c, 0xfa47, 0xfa8c, 0xfa47, 0xfb55, 0xfaf7, +0xfb55, 0xfaf7, 0xfa59, 0xf9e9, 0xfa59, 0xf9e9, 0xfa59, 0xf9e9, 0xf9ee, 0xf971, 0xf9ee, +0xf971, 0xf919, 0xf895, 0xf919, 0xf895, 0xf93a, 0xf8b3, 0xf93a, 0xf8b3, 0xf9fa, 0xf974, +0xf9fa, 0xf974, 0xfa6f, 0xf9ec, 0xfa6f, 0xf9ec, 0xf831, 0xf7b3, 0xf831, 0xf7b3, 0xf831, +0xf7b3, 0xf6b8, 0xf640, 0xf6b8, 0xf640, 0xf750, 0xf6df, 0xf750, 0xf6df, 0xf72f, 0xf6c4, +0xf72f, 0xf6c4, 0xf86e, 0xf80b, 0xf86e, 0xf80b, 0xf849, 0xf7ee, 0xf849, 0xf7ee, 0xf94c, +0xf8f9, 0xf94c, 0xf8f9, 0xf94c, 0xf8f9, 0xfa3b, 0xf9f1, 0xfa3b, 0xf9f1, 0xfabb, 0xfa7c, +0xfabb, 0xfa7c, 0xfc6a, 0xfc3a, 0xfc6a, 0xfc3a, 0xfb55, 0xfb36, 0xfb55, 0xfb36, 0xfb9b, +0xfb93, 0xfb9b, 0xfb93, 0xfb9b, 0xfb93, 0xfb55, 0xfb6a, 0xfb55, 0xfb6a, 0xfb40, 0xfb78, +0xfb40, 0xfb78, 0xfc2d, 0xfc92, 0xfc2d, 0xfc92, 0xfa69, 0xfb03, 0xfa69, 0xfb03, 0xf990, +0xfa68, 0xf990, 0xfa68, 0xf7c1, 0xf8e1, 0xf7c1, 0xf8e1, 0xf7c1, 0xf8e1, 0xf71b, 0xf88c, +0xf71b, 0xf88c, 0xf79e, 0xf96b, 0xf79e, 0xf96b, 0xf504, 0xf734, 0xf504, 0xf734, 0xf29c, +0xf537, 0xf29c, 0xf537, 0xefd8, 0xf2e4, 0xefd8, 0xf2e4, 0xedd5, 0xf157, 0xedd5, 0xf157, +0xedd5, 0xf157, 0xecd6, 0xf0cf, 0xecd6, 0xf0cf, 0xeaf3, 0xef63, 0xeaf3, 0xef63, 0xe87f, +0xed64, 0xe87f, 0xed64, 0xe67a, 0xebcf, 0xe67a, 0xebcf, 0xe52d, 0xeae9, 0xe52d, 0xeae9, +0xe52d, 0xeae9, 0xe258, 0xe871, 0xe258, 0xe871, 0xe0d1, 0xe73c, 0xe0d1, 0xe73c, 0xe029, +0xe6d6, 0xe029, 0xe6d6, 0xdfa6, 0xe686, 0xdfa6, 0xe686, 0xdf23, 0xe625, 0xdf23, 0xe625, +0xdd84, 0xe497, 0xdd84, 0xe497, 0xdd84, 0xe497, 0xdce1, 0xe3f3, 0xdce1, 0xe3f3, 0xdb9e, +0xe29f, 0xdb9e, 0xe29f, 0xdb3c, 0xe21b, 0xdb3c, 0xe21b, 0xdafa, 0xe1a8, 0xdafa, 0xe1a8, +0xda28, 0xe099, 0xda28, 0xe099, 0xdb58, 0xe180, 0xdb58, 0xe180, 0xdb58, 0xe180, 0xdd7e, +0xe355, 0xdd7e, 0xe355, 0xdf16, 0xe497, 0xdf16, 0xe497, 0xdf9d, 0xe4c5, 0xdf9d, 0xe4c5, +0xe128, 0xe5f7, 0xe128, 0xe5f7, 0xe3dd, 0xe854, 0xe3dd, 0xe854, 0xe3dd, 0xe854, 0xe551, +0xe974, 0xe551, 0xe974, 0xe6ab, 0xea80, 0xe6ab, 0xea80, 0xe9d3, 0xed61, 0xe9d3, 0xed61, +0xebf8, 0xef47, 0xebf8, 0xef47, 0xed59, 0xf072, 0xed59, 0xf072, 0xef8e, 0xf278, 0xef8e, +0xf278, 0xef8e, 0xf278, 0xf16a, 0xf42d, 0xf16a, 0xf42d, 0xf1fa, 0xf49b, 0xf1fa, 0xf49b, +0xf29a, 0xf51d, 0xf29a, 0xf51d, 0xf30b, 0xf574, 0xf30b, 0xf574, 0xf1c2, 0xf40f, 0xf1c2, +0xf40f, 0xf1c9, 0xf3f9, 0xf1c9, 0xf3f9, 0xf1c9, 0xf3f9, 0xf14e, 0xf35d, 0xf14e, 0xf35d, +0xf19d, 0xf384, 0xf19d, 0xf384, 0xf208, 0xf3bd, 0xf208, 0xf3bd, 0xf1d3, 0xf34d, 0xf1d3, +0xf34d, 0xf3ee, 0xf522, 0xf3ee, 0xf522, 0xf3ee, 0xf522, 0xf534, 0xf615, 0xf534, 0xf615, +0xf831, 0xf8b3, 0xf831, 0xf8b3, 0xf974, 0xf98b, 0xf974, 0xf98b, 0xfa0a, 0xf9ab, 0xfa0a, +0xf9ab, 0xfcf2, 0xfc15, 0xfcf2, 0xfc15, 0xff41, 0xfdde, 0xff41, 0xfdde, 0xff41, 0xfdde, +0x3cb, 0x1df, 0x3cb, 0x1df, 0x68e, 0x416, 0x68e, 0x416, 0x903, 0x600, 0x903, +0x600, 0xbdb, 0x850, 0xbdb, 0x850, 0xd40, 0x936, 0xd40, 0x936, 0xd40, 0x936, +0x10c8, 0xc49, 0x10c8, 0xc49, 0x13a2, 0xeba, 0x13a2, 0xeba, 0x15d7, 0x1095, 0x15d7, +0x1095, 0x185a, 0x12ce, 0x185a, 0x12ce, 0x1ac6, 0x1503, 0x1ac6, 0x1503, 0x1cd3, 0x16ea, +0x1cd3, 0x16ea, 0x1cd3, 0x16ea, 0x1e44, 0x1848, 0x1e44, 0x1848, 0x1ef9, 0x18fc, 0x1ef9, +0x18fc, 0x1d88, 0x179a, 0x1d88, 0x179a, 0x1e25, 0x1856, 0x1e25, 0x1856, 0x1f60, 0x19be, +0x1f60, 0x19be, 0x1f04, 0x199a, 0x1f04, 0x199a, 0x1f04, 0x199a, 0x1eb4, 0x198c, 0x1eb4, +0x198c, 0x1d2a, 0x1849, 0x1d2a, 0x1849, 0x1c29, 0x1796, 0x1c29, 0x1796, 0x19f3, 0x15af, +0x19f3, 0x15af, 0x181c, 0x1428, 0x181c, 0x1428, 0x181c, 0x1428, 0x175c, 0x13b6, 0x175c, +0x13b6, 0x159a, 0x1241, 0x159a, 0x1241, 0x1452, 0x1141, 0x1452, 0x1141, 0x11fe, 0xf32, +0x11fe, 0xf32, 0x103a, 0xdb0, 0x103a, 0xdb0, 0xec5, 0xc79, 0xec5, 0xc79, 0xec5, +0xc79, 0xd6b, 0xb5a, 0xd6b, 0xb5a, 0xc58, 0xa81, 0xc58, 0xa81, 0x9e1, 0x842, +0x9e1, 0x842, 0x7f8, 0x691, 0x7f8, 0x691, 0x70a, 0x5dd, 0x70a, 0x5dd, 0x51b, +0x42a, 0x51b, 0x42a, 0x51b, 0x42a, 0x32b, 0x277, 0x32b, 0x277, 0x2e7, 0x274, +0x2e7, 0x274, 0x148, 0x11a, 0x148, 0x11a, 0xff90, 0xffa9, 0xff90, 0xffa9, 0xfeb1, +0xff13, 0xfeb1, 0xff13, 0xfeb1, 0xff13, 0xfc15, 0xfcc1, 0xfc15, 0xfcc1, 0xf994, 0xfa8b, +0xf994, 0xfa8b, 0xf8ab, 0xf9eb, 0xf8ab, 0xf9eb, 0xf74a, 0xf8cf, 0xf74a, 0xf8cf, 0xf4d4, +0xf69a, 0xf4d4, 0xf69a, 0xf336, 0xf534, 0xf336, 0xf534, 0xf336, 0xf534, 0xf1e0, 0xf40e, +0xf1e0, 0xf40e, 0xf0a0, 0xf2f2, 0xf0a0, 0xf2f2, 0xefd6, 0xf241, 0xefd6, 0xf241, 0xf08e, +0xf305, 0xf08e, 0xf305, 0xf19b, 0xf40f, 0xf19b, 0xf40f, 0xf241, 0xf4a4, 0xf241, 0xf4a4, +0xf241, 0xf4a4, 0xf425, 0xf66a, 0xf425, 0xf66a, 0xf488, 0xf6a0, 0xf488, 0xf6a0, 0xf4be, +0xf69e, 0xf4be, 0xf69e, 0xf646, 0xf7e5, 0xf646, 0xf7e5, 0xf7c2, 0xf916, 0xf7c2, 0xf916, +0xf7c2, 0xf916, 0xfa67, 0xfb6b, 0xfa67, 0xfb6b, 0xfc1b, 0xfcca, 0xfc1b, 0xfcca, 0xfc9f, +0xfcfa, 0xfc9f, 0xfcfa, 0xfd8d, 0xfd93, 0xfd8d, 0xfd93, 0xfe37, 0xfded, 0xfe37, 0xfded, +0x21, 0xff8d, 0x21, 0xff8d, 0x21, 0xff8d, 0xbe, 0xffe8, 0xbe, 0xffe8, 0x7, +0xfef9, 0x7, 0xfef9, 0x156, 0x19, 0x156, 0x19, 0x22f, 0xd0, 0x22f, 0xd0, +0x33d, 0x1c6, 0x33d, 0x1c6, 0x528, 0x3a4, 0x528, 0x3a4, 0x528, 0x3a4, 0x5d2, +0x44c, 0x5d2, 0x44c, 0x5a5, 0x427, 0x5a5, 0x427, 0x706, 0x597, 0x706, 0x597, +0x835, 0x6dc, 0x835, 0x6dc, 0x7a8, 0x66b, 0x7a8, 0x66b, 0x7a8, 0x66b, 0x7dd, +0x6be, 0x7dd, 0x6be, 0x8af, 0x7b0, 0x8af, 0x7b0, 0x8ed, 0x80f, 0x8ed, 0x80f, +0x7a3, 0x6e3, 0x7a3, 0x6e3, 0x6c1, 0x61f, 0x6c1, 0x61f, 0x571, 0x4e7, 0x571, +0x4e7, 0x571, 0x4e7, 0x3ab, 0x337, 0x3ab, 0x337, 0x377, 0x315, 0x377, 0x315, +0x396, 0x343, 0x396, 0x343, 0x401, 0x3b9, 0x401, 0x3b9, 0x345, 0x305, 0x345, +0x305, 0x253, 0x219, 0x253, 0x219, 0x253, 0x219, 0x148, 0x113, 0x148, 0x113, +0xff4c, 0xff1c, 0xff4c, 0xff1c, 0xff18, 0xfeee, 0xff18, 0xfeee, 0x89, 0x65, 0x89, +0x65, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0xff79, 0xff68, 0xff79, 0xff68, +0x8f, 0x8a, 0x8f, 0x8a, 0x42, 0x4b, 0x42, 0x4b, 0xff75, 0xff8d, 0xff75, +0xff8d, 0x5, 0x2d, 0x5, 0x2d, 0xfff5, 0x2c, 0xfff5, 0x2c, 0xfff5, 0x2c, +0x3b, 0x7f, 0x3b, 0x7f, 0x1b4, 0x203, 0x1b4, 0x203, 0x14e, 0x1a3, 0x14e, +0x1a3, 0x42, 0x96, 0x42, 0x96, 0xff2e, 0xff7c, 0xff2e, 0xff7c, 0xfda1, 0xfde0, +0xfda1, 0xfde0, 0xfda1, 0xfde0, 0xfd75, 0xfd9c, 0xfd75, 0xfd9c, 0xfd09, 0xfd10, 0xfd09, +0xfd10, 0xfdbf, 0xfd9b, 0xfdbf, 0xfd9b, 0xfe82, 0xfe2b, 0xfe82, 0xfe2b, 0x5, 0xff71, +0x5, 0xff71, 0x5, 0xff71, 0x285, 0x1ac, 0x285, 0x1ac, 0x259, 0x134, 0x259, +0x134, 0x3d7, 0x260, 0x3d7, 0x260, 0x61a, 0x44e, 0x61a, 0x44e, 0x784, 0x561, +0x784, 0x561, 0x973, 0x6f8, 0x973, 0x6f8, 0x973, 0x6f8, 0xb9f, 0x8ce, 0xb9f, +0x8ce, 0xf60, 0xc3c, 0xf60, 0xc3c, 0x11ce, 0xe5d, 0x11ce, 0xe5d, 0x147c, 0x10c5, +0x147c, 0x10c5, 0x17d9, 0x13e3, 0x17d9, 0x13e3, 0x1815, 0x13e9, 0x1815, 0x13e9, 0x1815, +0x13e9, 0x1814, 0x13bc, 0x1814, 0x13bc, 0x1916, 0x149c, 0x1916, 0x149c, 0x1a1f, 0x158d, +0x1a1f, 0x158d, 0x1ae5, 0x1643, 0x1ae5, 0x1643, 0x1c36, 0x178d, 0x1c36, 0x178d, 0x1c36, +0x178d, 0x1c9b, 0x17f4, 0x1c9b, 0x17f4, 0x1c3e, 0x179e, 0x1c3e, 0x179e, 0x1e4e, 0x19bb, +0x1e4e, 0x19bb, 0x1e41, 0x19bf, 0x1e41, 0x19bf, 0x1bb8, 0x1749, 0x1bb8, 0x1749, 0x19a7, +0x154c, 0x19a7, 0x154c, 0x19a7, 0x154c, 0x1880, 0x143a, 0x1880, 0x143a, 0x17ac, 0x137b, +0x17ac, 0x137b, 0x1704, 0x12e4, 0x1704, 0x12e4, 0x1861, 0x1451, 0x1861, 0x1451, 0x18b1, +0x14af, 0x18b1, 0x14af, 0x18e9, 0x14f1, 0x18e9, 0x14f1, 0x18e9, 0x14f1, 0x18f8, 0x1509, +0x18f8, 0x1509, 0x17a6, 0x13bd, 0x17a6, 0x13bd, 0x1744, 0x135f, 0x1744, 0x135f, 0x1707, +0x1327, 0x1707, 0x1327, 0x17db, 0x13fe, 0x17db, 0x13fe, 0x17db, 0x13fe, 0x1871, 0x1499, +0x1871, 0x1499, 0x17b9, 0x13e8, 0x17b9, 0x13e8, 0x17da, 0x1413, 0x17da, 0x1413, 0x18a7, +0x14ee, 0x18a7, 0x14ee, 0x189b, 0x14f4, 0x189b, 0x14f4, 0x18b0, 0x1522, 0x18b0, 0x1522, +0x18b0, 0x1522, 0x1a28, 0x16b8, 0x1a28, 0x16b8, 0x1a53, 0x1709, 0x1a53, 0x1709, 0x192b, +0x160d, 0x192b, 0x160d, 0x18d6, 0x15ec, 0x18d6, 0x15ec, 0x1740, 0x1491, 0x1740, 0x1491, +0x1740, 0x1491, 0x159f, 0x1331, 0x159f, 0x1331, 0x1546, 0x1320, 0x1546, 0x1320, 0x13c9, +0x11f2, 0x13c9, 0x11f2, 0x11cc, 0x1049, 0x11cc, 0x1049, 0xeb1, 0xd87, 0xeb1, 0xd87, +0xbaa, 0xadd, 0xbaa, 0xadd, 0xbaa, 0xadd, 0x8be, 0x851, 0x8be, 0x851, 0x5a4, +0x599, 0x5a4, 0x599, 0x3ab, 0x402, 0x3ab, 0x402, 0x163, 0x21d, 0x163, 0x21d, +0x1, 0x11c, 0x1, 0x11c, 0xfd68, 0xfee0, 0xfd68, 0xfee0, 0xfd68, 0xfee0, 0xfa06, +0xfbd9, 0xfa06, 0xfbd9, 0xf74a, 0xf972, 0xf74a, 0xf972, 0xf398, 0xf60f, 0xf398, 0xf60f, +0xf0aa, 0xf368, 0xf0aa, 0xf368, 0xee60, 0xf15e, 0xee60, 0xf15e, 0xee60, 0xf15e, 0xecda, +0xf00e, 0xecda, 0xf00e, 0xeb8a, 0xeeea, 0xeb8a, 0xeeea, 0xe9dd, 0xed5e, 0xe9dd, 0xed5e, +0xe92d, 0xecc4, 0xe92d, 0xecc4, 0xe8ee, 0xec8f, 0xe8ee, 0xec8f, 0xe7bc, 0xeb5d, 0xe7bc, +0xeb5d, 0xe7bc, 0xeb5d, 0xe815, 0xeba9, 0xe815, 0xeba9, 0xea4e, 0xedcb, 0xea4e, 0xedcb, +0xea42, 0xed9e, 0xea42, 0xed9e, 0xeab8, 0xedec, 0xeab8, 0xedec, 0xed29, 0xf02c, 0xed29, +0xf02c, 0xee48, 0xf114, 0xee48, 0xf114, 0xee48, 0xf114, 0xf02a, 0xf2ba, 0xf02a, 0xf2ba, +0xf410, 0xf661, 0xf410, 0xf661, 0xf74c, 0xf95e, 0xf74c, 0xf95e, 0xf7b8, 0xf98b, 0xf7b8, +0xf98b, 0xf7fd, 0xf993, 0xf7fd, 0xf993, 0xf7fd, 0xf993, 0xfa33, 0xfb90, 0xfa33, 0xfb90, +0xfaa2, 0xfbcc, 0xfaa2, 0xfbcc, 0xfb2b, 0xfc28, 0xfb2b, 0xfc28, 0xfc4d, 0xfd25, 0xfc4d, +0xfd25, 0xfbeb, 0xfca5, 0xfbeb, 0xfca5, 0xfc9d, 0xfd42, 0xfc9d, 0xfd42, 0xfc9d, 0xfd42, +0xfd10, 0xfda7, 0xfd10, 0xfda7, 0xfcc8, 0xfd5a, 0xfcc8, 0xfd5a, 0xfc20, 0xfcb3, 0xfc20, +0xfcb3, 0xfb37, 0xfbd1, 0xfb37, 0xfbd1, 0xfaa9, 0xfb4e, 0xfaa9, 0xfb4e, 0xf970, 0xfa25, +0xf970, 0xfa25, 0xf970, 0xfa25, 0xf827, 0xf8ee, 0xf827, 0xf8ee, 0xf7e2, 0xf8ba, 0xf7e2, +0xf8ba, 0xf8ed, 0xf9d7, 0xf8ed, 0xf9d7, 0xf9c6, 0xfac0, 0xf9c6, 0xfac0, 0xfac9, 0xfbd1, +0xfac9, 0xfbd1, 0xfac9, 0xfbd1, 0xfc32, 0xfd43, 0xfc32, 0xfd43, 0xfc67, 0xfd7f, 0xfc67, +0xfd7f, 0xfcc7, 0xfde3, 0xfcc7, 0xfde3, 0xfdab, 0xfec8, 0xfdab, 0xfec8, 0xfddd, 0xfef8, +0xfddd, 0xfef8, 0xfe96, 0xffb0, 0xfe96, 0xffb0, 0xfe96, 0xffb0, 0xfeee, 0x7, 0xfeee, +0x7, 0xfd9b, 0xfeb5, 0xfd9b, 0xfeb5, 0xfc43, 0xfd63, 0xfc43, 0xfd63, 0xfb86, 0xfcb1, +0xfb86, 0xfcb1, 0xfc05, 0xfd43, 0xfc05, 0xfd43, 0xfc10, 0xfd69, 0xfc10, 0xfd69, 0xfc10, +0xfd69, 0xfb5a, 0xfcd9, 0xfb5a, 0xfcd9, 0xf9d6, 0xfb86, 0xf9d6, 0xfb86, 0xf682, 0xf86f, +0xf682, 0xf86f, 0xf48b, 0xf6c0, 0xf48b, 0xf6c0, 0xf1f4, 0xf47b, 0xf1f4, 0xf47b, 0xf1f4, +0xf47b, 0xee83, 0xf168, 0xee83, 0xf168, 0xecaf, 0xeff9, 0xecaf, 0xeff9, 0xea24, 0xedda, +0xea24, 0xedda, 0xe879, 0xec9f, 0xe879, 0xec9f, 0xe664, 0xeafb, 0xe664, 0xeafb, 0xe33d, +0xe844, 0xe33d, 0xe844, 0xe33d, 0xe844, 0xe19b, 0xe70d, 0xe19b, 0xe70d, 0xdf0a, 0xe4e0, +0xdf0a, 0xe4e0, 0xddb7, 0xe3e6, 0xddb7, 0xe3e6, 0xdd53, 0xe3ce, 0xdd53, 0xe3ce, 0xda9b, +0xe154, 0xda9b, 0xe154, 0xd8f5, 0xdfdb, 0xd8f5, 0xdfdb, 0xd8f5, 0xdfdb, 0xd8ec, 0xdfee, +0xd8ec, 0xdfee, 0xd843, 0xdf4d, 0xd843, 0xdf4d, 0xd7ea, 0xdeeb, 0xd7ea, 0xdeeb, 0xd887, +0xdf6d, 0xd887, 0xdf6d, 0xd7ce, 0xde89, 0xd7ce, 0xde89, 0xd7ce, 0xde89, 0xd809, 0xde8a, +0xd809, 0xde8a, 0xda43, 0xe07e, 0xda43, 0xe07e, 0xdb73, 0xe15f, 0xdb73, 0xe15f, 0xdb9b, +0xe130, 0xdb9b, 0xe130, 0xdca7, 0xe1e2, 0xdca7, 0xe1e2, 0xdf70, 0xe450, 0xdf70, 0xe450, +0xdf70, 0xe450, 0xe064, 0xe4ea, 0xe064, 0xe4ea, 0xe20c, 0xe63d, 0xe20c, 0xe63d, 0xe4fc, +0xe8dd, 0xe4fc, 0xe8dd, 0xe5f0, 0xe989, 0xe5f0, 0xe989, 0xe87f, 0xebd8, 0xe87f, 0xebd8, +0xebc0, 0xeee2, 0xebc0, 0xeee2, 0xebc0, 0xeee2, 0xedff, 0xf0f3, 0xedff, 0xf0f3, 0xeefe, +0xf1cc, 0xeefe, 0xf1cc, 0xef81, 0xf230, 0xef81, 0xf230, 0xf08e, 0xf323, 0xf08e, 0xf323, +0xf029, 0xf2a7, 0xf029, 0xf2a7, 0xf029, 0xf2a7, 0xef42, 0xf1a9, 0xef42, 0xf1a9, 0xeeed, +0xf13c, 0xeeed, 0xf13c, 0xeef5, 0xf127, 0xeef5, 0xf127, 0xef44, 0xf153, 0xef44, 0xf153, +0xf0c4, 0xf2a8, 0xf0c4, 0xf2a8, 0xf2ca, 0xf478, 0xf2ca, 0xf478, 0xf2ca, 0xf478, 0xf2dc, +0xf44a, 0xf2dc, 0xf44a, 0xf343, 0xf464, 0xf343, 0xf464, 0xf3eb, 0xf4b3, 0xf3eb, 0xf4b3, +0xf442, 0xf4a7, 0xf442, 0xf4a7, 0xf72f, 0xf725, 0xf72f, 0xf725, 0xf9e6, 0xf964, 0xf9e6, +0xf964, 0xf9e6, 0xf964, 0xfc8d, 0xfb8d, 0xfc8d, 0xfb8d, 0xffe9, 0xfe65, 0xffe9, 0xfe65, +0x2a4, 0x9b, 0x2a4, 0x9b, 0x598, 0x30a, 0x598, 0x30a, 0x70b, 0x3fd, 0x70b, +0x3fd, 0x70b, 0x3fd, 0x991, 0x608, 0x991, 0x608, 0xc0c, 0x812, 0xc0c, 0x812, +0xe38, 0x9d7, 0xe38, 0x9d7, 0x1355, 0xe9a, 0x1355, 0xe9a, 0x1614, 0x110e, 0x1614, +0x110e, 0x16e4, 0x11a4, 0x16e4, 0x11a4, 0x16e4, 0x11a4, 0x1839, 0x12cd, 0x1839, 0x12cd, +0x1915, 0x138e, 0x1915, 0x138e, 0x1a4d, 0x14bc, 0x1a4d, 0x14bc, 0x1b3b, 0x15ad, 0x1b3b, +0x15ad, 0x1bce, 0x1651, 0x1bce, 0x1651, 0x1bbc, 0x165d, 0x1bbc, 0x165d, 0x1bbc, 0x165d, +0x1a8b, 0x1554, 0x1a8b, 0x1554, 0x1a02, 0x14fc, 0x1a02, 0x14fc, 0x1a80, 0x15b1, 0x1a80, +0x15b1, 0x18ac, 0x141b, 0x18ac, 0x141b, 0x16e0, 0x1290, 0x16e0, 0x1290, 0x16e0, 0x1290, +0x16a3, 0x1296, 0x16a3, 0x1296, 0x148f, 0x10c6, 0x148f, 0x10c6, 0x1388, 0x1004, 0x1388, +0x1004, 0x1314, 0xfd5, 0x1314, 0xfd5, 0x1199, 0xe9e, 0x1199, 0xe9e, 0x10a5, 0xdef, +0x10a5, 0xdef, 0x10a5, 0xdef, 0x1055, 0xde2, 0x1055, 0xde2, 0x100d, 0xdde, 0x100d, +0xdde, 0xd16, 0xb2c, 0xd16, 0xb2c, 0xab8, 0x914, 0xab8, 0x914, 0x9ac, 0x850, +0x9ac, 0x850, 0x9ac, 0x850, 0x74f, 0x63c, 0x74f, 0x63c, 0x685, 0x5be, 0x685, +0x5be, 0x603, 0x589, 0x603, 0x589, 0x505, 0x4da, 0x505, 0x4da, 0x40c, 0x431, +0x40c, 0x431, 0x224, 0x29a, 0x224, 0x29a, 0x224, 0x29a, 0xf, 0xd3, 0xf, +0xd3, 0xfdb6, 0xfec7, 0xfdb6, 0xfec7, 0xfc0b, 0xfd66, 0xfc0b, 0xfd66, 0xfa3c, 0xfbda, +0xfa3c, 0xfbda, 0xf7a4, 0xf97e, 0xf7a4, 0xf97e, 0xf5ca, 0xf7d8, 0xf5ca, 0xf7d8, 0xf5ca, +0xf7d8, 0xf462, 0xf69a, 0xf462, 0xf69a, 0xf39f, 0xf5f5, 0xf39f, 0xf5f5, 0xf337, 0xf5a0, +0xf337, 0xf5a0, 0xf44e, 0xf6bc, 0xf44e, 0xf6bc, 0xf5d9, 0xf83f, 0xf5d9, 0xf83f, 0xf5d9, +0xf83f, 0xf5bb, 0xf80c, 0xf5bb, 0xf80c, 0xf6f9, 0xf929, 0xf6f9, 0xf929, 0xf747, 0xf949, +0xf747, 0xf949, 0xf74e, 0xf918, 0xf74e, 0xf918, 0xf999, 0xfb23, 0xf999, 0xfb23, 0xfb0c, +0xfc4f, 0xfb0c, 0xfc4f, 0xfb0c, 0xfc4f, 0xfccf, 0xfdc5, 0xfccf, 0xfdc5, 0xfdd5, 0xfe7c, +0xfdd5, 0xfe7c, 0xfedd, 0xff35, 0xfedd, 0xff35, 0xffda, 0xffe4, 0xffda, 0xffe4, 0xffce, +0xff8d, 0xffce, 0xff8d, 0xfd, 0x79, 0xfd, 0x79, 0xfd, 0x79, 0x37, 0xff74, +0x37, 0xff74, 0xffb9, 0xfec1, 0xffb9, 0xfec1, 0x130, 0xc, 0x130, 0xc, 0x166, +0x1e, 0x166, 0x1e, 0x218, 0xb6, 0x218, 0xb6, 0x218, 0xb6, 0x404, 0x293, +0x404, 0x293, 0x52b, 0x3b1, 0x52b, 0x3b1, 0x5cd, 0x453, 0x5cd, 0x453, 0x70a, +0x596, 0x70a, 0x596, 0x778, 0x610, 0x778, 0x610, 0x79f, 0x647, 0x79f, 0x647, +0x79f, 0x647, 0x824, 0x6de, 0x824, 0x6de, 0xa21, 0x8ef, 0xa21, 0x8ef, 0xb6e, +0xa4f, 0xb6e, 0xa4f, 0x9de, 0x8d3, 0x9de, 0x8d3, 0x949, 0x850, 0x949, 0x850, +0x83d, 0x753, 0x83d, 0x753, 0x83d, 0x753, 0x79d, 0x6c1, 0x79d, 0x6c1, 0x8d7, +0x807, 0x8d7, 0x807, 0x98e, 0x8c7, 0x98e, 0x8c7, 0x943, 0x884, 0x943, 0x884, +0x7e0, 0x728, 0x7e0, 0x728, 0x7e0, 0x728, 0x81b, 0x76a, 0x81b, 0x76a, 0x7b4, +0x70a, 0x7b4, 0x70a, 0x58f, 0x4ee, 0x58f, 0x4ee, 0x588, 0x4f1, 0x588, 0x4f1, +0x5e9, 0x55e, 0x5e9, 0x55e, 0x4f6, 0x47b, 0x4f6, 0x47b, 0x4f6, 0x47b, 0x49e, +0x435, 0x49e, 0x435, 0x440, 0x3eb, 0x440, 0x3eb, 0x357, 0x318, 0x357, 0x318, +0x347, 0x320, 0x347, 0x320, 0x2a3, 0x295, 0x2a3, 0x295, 0x208, 0x212, 0x208, +0x212, 0x208, 0x212, 0x1a5, 0x1c5, 0x1a5, 0x1c5, 0x197, 0x1cb, 0x197, 0x1cb, +0x222, 0x265, 0x222, 0x265, 0x132, 0x180, 0x132, 0x180, 0x79, 0xcb, 0x79, +0xcb, 0x79, 0xcb, 0x14, 0x62, 0x14, 0x62, 0xff9d, 0xffdf, 0xff9d, 0xffdf, +0xffa3, 0xffd1, 0xffa3, 0xffd1, 0xd9, 0xe9, 0xd9, 0xe9, 0x223, 0x20c, 0x223, +0x20c, 0x244, 0x1fe, 0x244, 0x1fe, 0x244, 0x1fe, 0x3aa, 0x32d, 0x3aa, 0x32d, +0x3f1, 0x335, 0x3f1, 0x335, 0x41f, 0x320, 0x41f, 0x320, 0x5df, 0x497, 0x5df, +0x497, 0x74a, 0x5b6, 0x74a, 0x5b6, 0x95d, 0x77c, 0x95d, 0x77c, 0x95d, 0x77c, +0xb55, 0x927, 0xb55, 0x927, 0xe64, 0xbeb, 0xe64, 0xbeb, 0x10c0, 0xdff, 0x10c0, +0xdff, 0x1288, 0xf85, 0x1288, 0xf85, 0x160b, 0x12ca, 0x160b, 0x12ca, 0x160b, 0x12ca, +0x171f, 0x13a8, 0x171f, 0x13a8, 0x184b, 0x14a5, 0x184b, 0x14a5, 0x1a50, 0x1683, 0x1a50, +0x1683, 0x19cc, 0x15df, 0x19cc, 0x15df, 0x1991, 0x158d, 0x1991, 0x158d, 0x19ff, 0x15ec, +0x19ff, 0x15ec, 0x19ff, 0x15ec, 0x1a8e, 0x1673, 0x1a8e, 0x1673, 0x1b45, 0x1727, 0x1b45, +0x1727, 0x1b61, 0x1746, 0x1b61, 0x1746, 0x1b02, 0x16ef, 0x1b02, 0x16ef, 0x196a, 0x1563, +0x196a, 0x1563, 0x179a, 0x13a2, 0x179a, 0x13a2, 0x179a, 0x13a2, 0x16d1, 0x12ea, 0x16d1, +0x12ea, 0x1518, 0x1142, 0x1518, 0x1142, 0x13b8, 0xff4, 0x13b8, 0xff4, 0x14ca, 0x1118, +0x14ca, 0x1118, 0x14dd, 0x113c, 0x14dd, 0x113c, 0x14dd, 0x113c, 0x154b, 0x11bb, 0x154b, +0x11bb, 0x16ae, 0x132d, 0x16ae, 0x132d, 0x15f9, 0x1287, 0x15f9, 0x1287, 0x1592, 0x122d, +0x1592, 0x122d, 0x1629, 0x12d2, 0x1629, 0x12d2, 0x17f0, 0x14a5, 0x17f0, 0x14a5, 0x17f0, +0x14a5, 0x1871, 0x1533, 0x1871, 0x1533, 0x16c8, 0x1398, 0x16c8, 0x1398, 0x17d3, 0x14b1, +0x17d3, 0x14b1, 0x1825, 0x1514, 0x1825, 0x1514, 0x1763, 0x1465, 0x1763, 0x1465, 0x18ad, +0x15c4, 0x18ad, 0x15c4, 0x18ad, 0x15c4, 0x18b7, 0x15e6, 0x18b7, 0x15e6, 0x1885, 0x15d0, +0x1885, 0x15d0, 0x18af, 0x161b, 0x18af, 0x161b, 0x17f2, 0x1582, 0x17f2, 0x1582, 0x160a, +0x13c3, 0x160a, 0x13c3, 0x160a, 0x13c3, 0x141c, 0x1204, 0x141c, 0x1204, 0x13eb, 0x1207, +0x13eb, 0x1207, 0x12d2, 0x1127, 0x12d2, 0x1127, 0x10b0, 0xf43, 0x10b0, 0xf43, 0xe86, +0xd5d, 0xe86, 0xd5d, 0xcc9, 0xbe8, 0xcc9, 0xbe8, 0xcc9, 0xbe8, 0xab8, 0xa25, +0xab8, 0xa25, 0x876, 0x835, 0x876, 0x835, 0x7c9, 0x7de, 0x7c9, 0x7de, 0x4b5, +0x522, 0x4b5, 0x522, 0xe6, 0x1af, 0xe6, 0x1af, 0xfea8, 0xffce, 0xfea8, 0xffce, +0xfea8, 0xffce, 0xfb4f, 0xfcd2, 0xfb4f, 0xfcd2, 0xf870, 0xfa4e, 0xf870, 0xfa4e, 0xf5e0, +0xf819, 0xf5e0, 0xf819, 0xf397, 0xf626, 0xf397, 0xf626, 0xf10e, 0xf3ef, 0xf10e, 0xf3ef, +0xf10e, 0xf3ef, 0xee0d, 0xf138, 0xee0d, 0xf138, 0xecb7, 0xf025, 0xecb7, 0xf025, 0xe9f0, +0xed98, 0xe9f0, 0xed98, 0xe799, 0xeb70, 0xe799, 0xeb70, 0xe79a, 0xeb94, 0xe79a, 0xeb94, +0xe57b, 0xe98d, 0xe57b, 0xe98d, 0xe57b, 0xe98d, 0xe4d8, 0xe8f4, 0xe4d8, 0xe8f4, 0xe55d, +0xe976, 0xe55d, 0xe976, 0xe491, 0xe89a, 0xe491, 0xe89a, 0xe4f7, 0xe8e3, 0xe4f7, 0xe8e3, +0xe5b9, 0xe97c, 0xe5b9, 0xe97c, 0xe5b9, 0xe97c, 0xe72c, 0xeabb, 0xe72c, 0xeabb, 0xe86f, +0xebc0, 0xe86f, 0xebc0, 0xea02, 0xed0e, 0xea02, 0xed0e, 0xecbf, 0xef7f, 0xecbf, 0xef7f, +0xeebd, 0xf12c, 0xeebd, 0xf12c, 0xf0c0, 0xf2dc, 0xf0c0, 0xf2dc, 0xf0c0, 0xf2dc, 0xf39d, +0xf566, 0xf39d, 0xf566, 0xf4b6, 0xf62d, 0xf4b6, 0xf62d, 0xf512, 0xf63b, 0xf512, 0xf63b, +0xf6e1, 0xf7c0, 0xf6e1, 0xf7c0, 0xf715, 0xf7b1, 0xf715, 0xf7b1, 0xf808, 0xf868, 0xf808, +0xf868, 0xf808, 0xf868, 0xf967, 0xf993, 0xf967, 0xf993, 0xf9b2, 0xf9b3, 0xf9b2, 0xf9b3, +0xfaa6, 0xfa84, 0xfaa6, 0xfa84, 0xfa85, 0xfa48, 0xfa85, 0xfa48, 0xfb03, 0xfab2, 0xfb03, +0xfab2, 0xfb03, 0xfab2, 0xfa44, 0xf9e7, 0xfa44, 0xf9e7, 0xf910, 0xf8ac, 0xf910, 0xf8ac, +0xf99b, 0xf934, 0xf99b, 0xf934, 0xf994, 0xf92e, 0xf994, 0xf92e, 0xfa87, 0xfa23, 0xfa87, +0xfa23, 0xfb58, 0xfaf9, 0xfb58, 0xfaf9, 0xfb58, 0xfaf9, 0xfbcf, 0xfb74, 0xfbcf, 0xfb74, +0xfce1, 0xfc89, 0xfce1, 0xfc89, 0xfe83, 0xfe2e, 0xfe83, 0xfe2e, 0xffe5, 0xff93, 0xffe5, +0xff93, 0xffbf, 0xff6f, 0xffbf, 0xff6f, 0xaf, 0x61, 0xaf, 0x61, 0xaf, 0x61, +0x158, 0x10e, 0x158, 0x10e, 0x9e, 0x5a, 0x9e, 0x5a, 0xffe5, 0xffab, 0xffe5, +0xffab, 0xff4c, 0xff21, 0xff4c, 0xff21, 0xffcd, 0xffb9, 0xffcd, 0xffb9, 0xffcd, 0xffb9, +0xff9f, 0xffaa, 0xff9f, 0xffaa, 0xff87, 0xffba, 0xff87, 0xffba, 0xff45, 0xffad, 0xff45, +0xffad, 0xfc8a, 0xfd32, 0xfc8a, 0xfd32, 0xfa01, 0xfaf4, 0xfa01, 0xfaf4, 0xf7ff, 0xf94a, +0xf7ff, 0xf94a, 0xf7ff, 0xf94a, 0xf559, 0xf707, 0xf559, 0xf707, 0xf28b, 0xf4a8, 0xf28b, +0xf4a8, 0xf01b, 0xf2ae, 0xf01b, 0xf2ae, 0xee65, 0xf175, 0xee65, 0xf175, 0xeb6e, 0xeeff, +0xeb6e, 0xeeff, 0xe80e, 0xec22, 0xe80e, 0xec22, 0xe80e, 0xec22, 0xe652, 0xeae8, 0xe652, +0xeae8, 0xe2ec, 0xe7ff, 0xe2ec, 0xe7ff, 0xdfd3, 0xe55d, 0xdfd3, 0xe55d, 0xde33, 0xe428, +0xde33, 0xe428, 0xdb25, 0xe179, 0xdb25, 0xe179, 0xdb25, 0xe179, 0xda16, 0xe0b9, 0xda16, +0xe0b9, 0xd998, 0xe079, 0xd998, 0xe079, 0xd8ae, 0xdfbc, 0xd8ae, 0xdfbc, 0xd870, 0xdf97, +0xd870, 0xdf97, 0xd768, 0xde94, 0xd768, 0xde94, 0xd6cc, 0xddeb, 0xd6cc, 0xddeb, 0xd6cc, +0xddeb, 0xd655, 0xdd56, 0xd655, 0xdd56, 0xd6ba, 0xdd8e, 0xd6ba, 0xdd8e, 0xd7b7, 0xde4f, +0xd7b7, 0xde4f, 0xd7c3, 0xde15, 0xd7c3, 0xde15, 0xd8b0, 0xdeb2, 0xd8b0, 0xdeb2, 0xdade, +0xe08d, 0xdade, 0xe08d, 0xdade, 0xe08d, 0xdbe3, 0xe13b, 0xdbe3, 0xe13b, 0xddc9, 0xe2cb, +0xddc9, 0xe2cb, 0xe11a, 0xe5c8, 0xe11a, 0xe5c8, 0xe393, 0xe7f2, 0xe393, 0xe7f2, 0xe6ea, +0xeb00, 0xe6ea, 0xeb00, 0xe6ea, 0xeb00, 0xea3d, 0xee13, 0xea3d, 0xee13, 0xecff, 0xf09c, +0xecff, 0xf09c, 0xef03, 0xf270, 0xef03, 0xf270, 0xf18c, 0xf4d1, 0xf18c, 0xf4d1, 0xf499, +0xf7ba, 0xf499, 0xf7ba, 0xf470, 0xf775, 0xf470, 0xf775, 0xf470, 0xf775, 0xf384, 0xf66e, +0xf384, 0xf66e, 0xf340, 0xf60f, 0xf340, 0xf60f, 0xf313, 0xf5c5, 0xf313, 0xf5c5, 0xf395, +0xf628, 0xf395, 0xf628, 0xf3eb, 0xf657, 0xf3eb, 0xf657, 0xf4c7, 0xf702, 0xf4c7, 0xf702, +0xf4c7, 0xf702, 0xf58e, 0xf790, 0xf58e, 0xf790, 0xf5cf, 0xf78c, 0xf5cf, 0xf78c, 0xf6a8, +0xf812, 0xf6a8, 0xf812, 0xf747, 0xf853, 0xf747, 0xf853, 0xf840, 0xf8e2, 0xf840, 0xf8e2, +0xf840, 0xf8e2, 0xfa19, 0xfa45, 0xfa19, 0xfa45, 0xfca4, 0xfc52, 0xfca4, 0xfc52, 0xff49, +0xfe71, 0xff49, 0xfe71, 0x154, 0xfff2, 0x154, 0xfff2, 0x400, 0x212, 0x400, 0x212, +0x667, 0x3ee, 0x667, 0x3ee, 0x667, 0x3ee, 0x98c, 0x68c, 0x98c, 0x68c, 0xcdf, +0x95f, 0xcdf, 0x95f, 0xfa1, 0xbab, 0xfa1, 0xbab, 0x1370, 0xf11, 0x1370, 0xf11, +0x15ee, 0x1135, 0x15ee, 0x1135, 0x1872, 0x136e, 0x1872, 0x136e, 0x1872, 0x136e, 0x1a8b, +0x154f, 0x1a8b, 0x154f, 0x1b7e, 0x161b, 0x1b7e, 0x161b, 0x1d12, 0x179c, 0x1d12, 0x179c, +0x1cd9, 0x1760, 0x1cd9, 0x1760, 0x1d28, 0x17bd, 0x1d28, 0x17bd, 0x1d28, 0x17bd, 0x1e4f, +0x1902, 0x1e4f, 0x1902, 0x1d7f, 0x185c, 0x1d7f, 0x185c, 0x1d11, 0x1824, 0x1d11, 0x1824, +0x1beb, 0x173e, 0x1beb, 0x173e, 0x1a0a, 0x15a2, 0x1a0a, 0x15a2, 0x198d, 0x1570, 0x198d, +0x1570, 0x198d, 0x1570, 0x1870, 0x14a0, 0x1870, 0x14a0, 0x1682, 0x1300, 0x1682, 0x1300, +0x14fa, 0x11c5, 0x14fa, 0x11c5, 0x1438, 0x114f, 0x1438, 0x114f, 0x137d, 0x10dc, 0x137d, +0x10dc, 0x11b4, 0xf59, 0x11b4, 0xf59, 0x11b4, 0xf59, 0x1010, 0xdf8, 0x1010, 0xdf8, +0xe69, 0xc91, 0xe69, 0xc91, 0xb80, 0x9e7, 0xb80, 0x9e7, 0xa21, 0x8c5, 0xa21, +0x8c5, 0x96f, 0x850, 0x96f, 0x850, 0x96f, 0x850, 0x761, 0x67f, 0x761, 0x67f, +0x6ce, 0x629, 0x6ce, 0x629, 0x5e4, 0x57f, 0x5e4, 0x57f, 0x488, 0x466, 0x488, +0x466, 0x3fc, 0x41e, 0x3fc, 0x41e, 0x371, 0x3d9, 0x371, 0x3d9, 0x371, 0x3d9, +0x260, 0x310, 0x260, 0x310, 0xffa4, 0x9d, 0xffa4, 0x9d, 0xfe80, 0xffc2, 0xfe80, +0xffc2, 0xfd38, 0xfec0, 0xfd38, 0xfec0, 0xf985, 0xfb50, 0xf985, 0xfb50, 0xf798, 0xf9a0, +0xf798, 0xf9a0, 0xf798, 0xf9a0, 0xf700, 0xf93f, 0xf700, 0xf93f, 0xf5e1, 0xf84d, 0xf5e1, +0xf84d, 0xf51b, 0xf7a9, 0xf51b, 0xf7a9, 0xf4ad, 0xf751, 0xf4ad, 0xf751, 0xf4a7, 0xf754, +0xf4a7, 0xf754, 0xf4a7, 0xf754, 0xf535, 0xf7dd, 0xf535, 0xf7dd, 0xf651, 0xf8e5, 0xf651, +0xf8e5, 0xf72d, 0xf99e, 0xf72d, 0xf99e, 0xf705, 0xf947, 0xf705, 0xf947, 0xf77d, 0xf982, +0xf77d, 0xf982, 0xf8d0, 0xfa8c, 0xf8d0, 0xfa8c, 0xf8d0, 0xfa8c, 0xf9fe, 0xfb69, 0xf9fe, +0xfb69, 0xf9c3, 0xfad4, 0xf9c3, 0xfad4, 0xfa7c, 0xfb30, 0xfa7c, 0xfb30, 0xfc61, 0xfcb5, +0xfc61, 0xfcb5, 0xfcbc, 0xfcb0, 0xfcbc, 0xfcb0, 0xfcbc, 0xfcb0, 0xfe79, 0xfe11, 0xfe79, +0xfe11, 0xfeec, 0xfe2c, 0xfeec, 0xfe2c, 0xfe7b, 0xfd6a, 0xfe7b, 0xfd6a, 0xff3c, 0xfde4, +0xff3c, 0xfde4, 0xff49, 0xfdb3, 0xff49, 0xfdb3, 0xf7, 0xff30, 0xf7, 0xff30, 0xf7, +0xff30, 0x1c7, 0xffdb, 0x1c7, 0xffdb, 0x28d, 0x88, 0x28d, 0x88, 0x4a3, 0x292, +0x4a3, 0x292, 0x53f, 0x32d, 0x53f, 0x32d, 0x61f, 0x415, 0x61f, 0x415, 0x6a2, +0x4ab, 0x6a2, 0x4ab, 0x6a2, 0x4ab, 0x6b2, 0x4d4, 0x6b2, 0x4d4, 0x786, 0x5c7, +0x786, 0x5c7, 0x7aa, 0x60e, 0x7aa, 0x60e, 0x7f6, 0x681, 0x7f6, 0x681, 0x888, +0x73a, 0x888, 0x73a, 0x888, 0x73a, 0x7c7, 0x6a1, 0x7c7, 0x6a1, 0x6e0, 0x5e0, +0x6e0, 0x5e0, 0x6d0, 0x5f4, 0x6d0, 0x5f4, 0x716, 0x65c, 0x716, 0x65c, 0x6aa, +0x60f, 0x6aa, 0x60f, 0x52c, 0x4ac, 0x52c, 0x4ac, 0x52c, 0x4ac, 0x4f4, 0x48d, +0x4f4, 0x48d, 0x459, 0x409, 0x459, 0x409, 0x1eb, 0x1b1, 0x1eb, 0x1b1, 0x1f8, +0x1d2, 0x1f8, 0x1d2, 0x18d, 0x17b, 0x18d, 0x17b, 0xffd3, 0xffd4, 0xffd3, 0xffd4, +0xffd3, 0xffd4, 0x30, 0x45, 0x30, 0x45, 0xffce, 0xfff8, 0xffce, 0xfff8, 0xfe96, +0xfed4, 0xfe96, 0xfed4, 0xfdba, 0xfe0e, 0xfdba, 0xfe0e, 0xfe42, 0xfeaa, 0xfe42, 0xfeaa, +0xfe42, 0xfeaa, 0xfde2, 0xfe5f, 0xfde2, 0xfe5f, 0xfc15, 0xfca5, 0xfc15, 0xfca5, 0xfd52, +0xfdf1, 0xfd52, 0xfdf1, 0xff1c, 0xffc7, 0xff1c, 0xffc7, 0xfedf, 0xff91, 0xfedf, 0xff91, +0xfe9e, 0xff50, 0xfe9e, 0xff50, 0xfe9e, 0xff50, 0xfefe, 0xffa8, 0xfefe, 0xffa8, 0xfe57, +0xfef2, 0xfe57, 0xfef2, 0xfde5, 0xfe66, 0xfde5, 0xfe66, 0xfef7, 0xff54, 0xfef7, 0xff54, +0xffc8, 0xfff6, 0xffc8, 0xfff6, 0xca, 0xc0, 0xca, 0xc0, 0xca, 0xc0, 0x20f, +0x1c2, 0x20f, 0x1c2, 0x212, 0x179, 0x212, 0x179, 0x1b4, 0xc6, 0x1b4, 0xc6, +0x275, 0x12c, 0x275, 0x12c, 0x48d, 0x2e3, 0x48d, 0x2e3, 0x48d, 0x2e3, 0x69e, +0x490, 0x69e, 0x490, 0x796, 0x521, 0x796, 0x521, 0xaa0, 0x7c7, 0xaa0, 0x7c7, +0xd97, 0xa5c, 0xd97, 0xa5c, 0xfd2, 0xc38, 0xfd2, 0xc38, 0x1464, 0x1073, 0x1464, +0x1073, 0x1464, 0x1073, 0x16e2, 0x12a2, 0x16e2, 0x12a2, 0x1892, 0x140e, 0x1892, 0x140e, +0x1a92, 0x15d3, 0x1a92, 0x15d3, 0x1b44, 0x1656, 0x1b44, 0x1656, 0x1b7c, 0x166b, 0x1b7c, +0x166b, 0x1aa8, 0x1580, 0x1aa8, 0x1580, 0x1aa8, 0x1580, 0x1b68, 0x1634, 0x1b68, 0x1634, +0x1bff, 0x16c9, 0x1bff, 0x16c9, 0x1b5c, 0x162f, 0x1b5c, 0x162f, 0x1b8d, 0x1672, 0x1b8d, +0x1672, 0x1a2b, 0x1529, 0x1a2b, 0x1529, 0x1a2b, 0x1529, 0x1867, 0x1383, 0x1867, 0x1383, +0x16fd, 0x123c, 0x16fd, 0x123c, 0x1547, 0x10aa, 0x1547, 0x10aa, 0x151f, 0x10a8, 0x151f, +0x10a8, 0x153c, 0x10ec, 0x153c, 0x10ec, 0x14c1, 0x1095, 0x14c1, 0x1095, 0x14c1, 0x1095, +0x1469, 0x105f, 0x1469, 0x105f, 0x147c, 0x1092, 0x147c, 0x1092, 0x1526, 0x1156, 0x1526, +0x1156, 0x1557, 0x119e, 0x1557, 0x119e, 0x143b, 0x1096, 0x143b, 0x1096, 0x143a, 0x10a5, +0x143a, 0x10a5, 0x143a, 0x10a5, 0x149c, 0x1113, 0x149c, 0x1113, 0x1475, 0x10f6, 0x1475, +0x10f6, 0x1736, 0x13c0, 0x1736, 0x13c0, 0x188e, 0x151f, 0x188e, 0x151f, 0x17fa, 0x1493, +0x17fa, 0x1493, 0x17fa, 0x1493, 0x1873, 0x1517, 0x1873, 0x1517, 0x182e, 0x14de, 0x182e, +0x14de, 0x1803, 0x14c3, 0x1803, 0x14c3, 0x182c, 0x1502, 0x182c, 0x1502, 0x18e0, 0x15d1, +0x18e0, 0x15d1, 0x178c, 0x149f, 0x178c, 0x149f, 0x178c, 0x149f, 0x15ee, 0x132a, 0x15ee, +0x132a, 0x1692, 0x13ff, 0x1692, 0x13ff, 0x15fc, 0x13a2, 0x15fc, 0x13a2, 0x143f, 0x1227, +0x143f, 0x1227, 0x12d5, 0x1105, 0x12d5, 0x1105, 0x1256, 0x10d7, 0x1256, 0x10d7, 0x1256, +0x10d7, 0x10d2, 0xfac, 0x10d2, 0xfac, 0xe85, 0xdbd, 0xe85, 0xdbd, 0xc60, 0xbfc, +0xc60, 0xbfc, 0x938, 0x93c, 0x938, 0x93c, 0x6b4, 0x724, 0x6b4, 0x724, 0x6b4, +0x724, 0x4a9, 0x586, 0x4a9, 0x586, 0x1a5, 0x2f0, 0x1a5, 0x2f0, 0xfdd2, 0xff89, +0xfdd2, 0xff89, 0xfa8a, 0xfca9, 0xfa8a, 0xfca9, 0xf915, 0xfb98, 0xf915, 0xfb98, 0xf709, +0xf9ea, 0xf709, 0xf9ea, 0xf709, 0xf9ea, 0xf3e0, 0xf716, 0xf3e0, 0xf716, 0xf210, 0xf592, +0xf210, 0xf592, 0xefa8, 0xf36b, 0xefa8, 0xf36b, 0xedb2, 0xf1aa, 0xedb2, 0xf1aa, 0xed06, +0xf125, 0xed06, 0xf125, 0xeac4, 0xeefd, 0xeac4, 0xeefd, 0xeac4, 0xeefd, 0xe93e, 0xed83, +0xe93e, 0xed83, 0xe888, 0xecca, 0xe888, 0xecca, 0xe821, 0xec54, 0xe821, 0xec54, 0xe871, +0xec86, 0xe871, 0xec86, 0xe831, 0xec1b, 0xe831, 0xec1b, 0xe831, 0xec1b, 0xe8d8, 0xec8e, +0xe8d8, 0xec8e, 0xe93d, 0xecb4, 0xe93d, 0xecb4, 0xeaa9, 0xedda, 0xeaa9, 0xedda, 0xed60, +0xf046, 0xed60, 0xf046, 0xee0f, 0xf0a5, 0xee0f, 0xf0a5, 0xf060, 0xf2a4, 0xf060, 0xf2a4, +0xf060, 0xf2a4, 0xf37a, 0xf56d, 0xf37a, 0xf56d, 0xf4a4, 0xf649, 0xf4a4, 0xf649, 0xf614, +0xf770, 0xf614, 0xf770, 0xf732, 0xf84a, 0xf732, 0xf84a, 0xf717, 0xf7f4, 0xf717, 0xf7f4, +0xf729, 0xf7d2, 0xf729, 0xf7d2, 0xf729, 0xf7d2, 0xf82d, 0xf8ac, 0xf82d, 0xf8ac, 0xf942, +0xf9a0, 0xf942, 0xf9a0, 0xf988, 0xf9cf, 0xf988, 0xf9cf, 0xf835, 0xf86d, 0xf835, 0xf86d, +0xf8a0, 0xf8d1, 0xf8a0, 0xf8d1, 0xf8a0, 0xf8d1, 0xf8ee, 0xf920, 0xf8ee, 0xf920, 0xf80c, +0xf844, 0xf80c, 0xf844, 0xf99a, 0xf9dd, 0xf99a, 0xf9dd, 0xf93c, 0xf98b, 0xf93c, 0xf98b, +0xf8fa, 0xf957, 0xf8fa, 0xf957, 0xfa38, 0xfaa2, 0xfa38, 0xfaa2, 0xfa38, 0xfaa2, 0xfb6e, +0xfbe4, 0xfb6e, 0xfbe4, 0xfc91, 0xfd10, 0xfc91, 0xfd10, 0xfd4f, 0xfdd3, 0xfd4f, 0xfdd3, +0xff6d, 0xfff4, 0xff6d, 0xfff4, 0xff70, 0xfff5, 0xff70, 0xfff5, 0xff70, 0xfff5, 0xe, +0x90, 0xe, 0x90, 0x2a6, 0x322, 0x2a6, 0x322, 0x3d9, 0x44f, 0x3d9, 0x44f, +0x423, 0x493, 0x423, 0x493, 0x3b4, 0x422, 0x3b4, 0x422, 0x3d0, 0x441, 0x3d0, +0x441, 0x3d0, 0x441, 0x36a, 0x3e7, 0x36a, 0x3e7, 0x286, 0x317, 0x286, 0x317, +0x1c3, 0x272, 0x1c3, 0x272, 0xe0, 0x1bb, 0xe0, 0x1bb, 0xffa6, 0xbb, 0xffa6, +0xbb, 0xfd01, 0xfe5e, 0xfd01, 0xfe5e, 0xfd01, 0xfe5e, 0xfa1c, 0xfbd1, 0xfa1c, 0xfbd1, +0xf754, 0xf96d, 0xf754, 0xf96d, 0xf4a3, 0xf72f, 0xf4a3, 0xf72f, 0xf2fd, 0xf606, 0xf2fd, +0xf606, 0xf039, 0xf3c8, 0xf039, 0xf3c8, 0xf039, 0xf3c8, 0xed08, 0xf123, 0xed08, 0xf123, +0xeaaa, 0xef55, 0xeaaa, 0xef55, 0xe636, 0xeb6f, 0xe636, 0xeb6f, 0xe288, 0xe84b, 0xe288, +0xe84b, 0xe05e, 0xe6a2, 0xe05e, 0xe6a2, 0xddc8, 0xe481, 0xddc8, 0xe481, 0xddc8, 0xe481, +0xdca2, 0xe3c1, 0xdca2, 0xe3c1, 0xdb8d, 0xe2fe, 0xdb8d, 0xe2fe, 0xda88, 0xe237, 0xda88, +0xe237, 0xd968, 0xe13c, 0xd968, 0xe13c, 0xd7f8, 0xdfda, 0xd7f8, 0xdfda, 0xd7a0, 0xdf78, +0xd7a0, 0xdf78, 0xd7a0, 0xdf78, 0xd704, 0xdeb9, 0xd704, 0xdeb9, 0xd746, 0xdec0, 0xd746, +0xdec0, 0xd776, 0xde9f, 0xd776, 0xde9f, 0xd5d5, 0xdc9b, 0xd5d5, 0xdc9b, 0xd618, 0xdc6c, +0xd618, 0xdc6c, 0xd618, 0xdc6c, 0xd73d, 0xdd13, 0xd73d, 0xdd13, 0xd75d, 0xdcac, 0xd75d, +0xdcac, 0xd9ce, 0xde92, 0xd9ce, 0xde92, 0xdd07, 0xe141, 0xdd07, 0xe141, 0xde82, 0xe236, +0xde82, 0xe236, 0xe138, 0xe46c, 0xe138, 0xe46c, 0xe138, 0xe46c, 0xe46e, 0xe72d, 0xe46e, +0xe72d, 0xe69b, 0xe8f2, 0xe69b, 0xe8f2, 0xe832, 0xea2f, 0xe832, 0xea2f, 0xeab2, 0xec65, +0xeab2, 0xec65, 0xeecf, 0xf047, 0xeecf, 0xf047, 0xef22, 0xf06e, 0xef22, 0xf06e, 0xef22, +0xf06e, 0xef08, 0xf037, 0xef08, 0xf037, 0xf0b1, 0xf1cf, 0xf0b1, 0xf1cf, 0xeff6, 0xf10b, +0xeff6, 0xf10b, 0xefc3, 0xf0d7, 0xefc3, 0xf0d7, 0xf070, 0xf187, 0xf070, 0xf187, 0xf070, +0xf187, 0xf131, 0xf24a, 0xf131, 0xf24a, 0xf050, 0xf16a, 0xf050, 0xf16a, 0xf081, 0xf195, +0xf081, 0xf195, 0xf29a, 0xf39f, 0xf29a, 0xf39f, 0xf1ff, 0xf2eb, 0xf1ff, 0xf2eb, 0xf315, +0xf3dc, 0xf315, 0xf3dc, 0xf315, 0xf3dc, 0xf648, 0xf6db, 0xf648, 0xf6db, 0xf879, 0xf8cb, +0xf879, 0xf8cb, 0xfa36, 0xfa3a, 0xfa36, 0xfa3a, 0xfc1b, 0xfbc5, 0xfc1b, 0xfbc5, 0xff03, +0xfe47, 0xff03, 0xfe47, 0x1c8, 0x9d, 0x1c8, 0x9d, 0x1c8, 0x9d, 0x449, 0x2aa, +0x449, 0x2aa, 0x6b4, 0x49e, 0x6b4, 0x49e, 0x9a6, 0x719, 0x9a6, 0x719, 0xe08, +0xb06, 0xe08, 0xb06, 0x11ba, 0xe4b, 0x11ba, 0xe4b, 0x11ba, 0xe4b, 0x154b, 0x1178, +0x154b, 0x1178, 0x1820, 0x13f4, 0x1820, 0x13f4, 0x1937, 0x14c1, 0x1937, 0x14c1, 0x1b24, +0x1674, 0x1b24, 0x1674, 0x1b63, 0x1689, 0x1b63, 0x1689, 0x1b7b, 0x1688, 0x1b7b, 0x1688, +0x1b7b, 0x1688, 0x1ccc, 0x17d1, 0x1ccc, 0x17d1, 0x1ca1, 0x17b0, 0x1ca1, 0x17b0, 0x1d28, +0x184f, 0x1d28, 0x184f, 0x1cfc, 0x1849, 0x1cfc, 0x1849, 0x1be3, 0x1762, 0x1be3, 0x1762, +0x1b51, 0x170b, 0x1b51, 0x170b, 0x1b51, 0x170b, 0x1a62, 0x165f, 0x1a62, 0x165f, 0x196e, +0x15b2, 0x196e, 0x15b2, 0x188e, 0x151c, 0x188e, 0x151c, 0x17eb, 0x14c4, 0x17eb, 0x14c4, +0x16a2, 0x13c5, 0x16a2, 0x13c5, 0x16a2, 0x13c5, 0x145e, 0x11c8, 0x145e, 0x11c8, 0x12dc, +0x1089, 0x12dc, 0x1089, 0x1122, 0xf0e, 0x1122, 0xf0e, 0xe05, 0xc2b, 0xe05, 0xc2b, +0xc6c, 0xac7, 0xc6c, 0xac7, 0xb2b, 0x9b7, 0xb2b, 0x9b7, 0xb2b, 0x9b7, 0x890, +0x749, 0x890, 0x749, 0x735, 0x619, 0x735, 0x619, 0x633, 0x53e, 0x633, 0x53e, +0x511, 0x443, 0x511, 0x443, 0x4bf, 0x419, 0x4bf, 0x419, 0x400, 0x380, 0x400, +0x380, 0x400, 0x380, 0x272, 0x21b, 0x272, 0x21b, 0xff76, 0xff49, 0xff76, 0xff49, +0xfd51, 0xfd4f, 0xfd51, 0xfd4f, 0xfc46, 0xfc71, 0xfc46, 0xfc71, 0xf97d, 0xf9d6, 0xf97d, +0xf9d6, 0xf97d, 0xf9d6, 0xf879, 0xf900, 0xf879, 0xf900, 0xf789, 0xf83d, 0xf789, 0xf83d, +0xf57a, 0xf658, 0xf57a, 0xf658, 0xf535, 0xf63b, 0xf535, 0xf63b, 0xf4bb, 0xf5e5, 0xf4bb, +0xf5e5, 0xf409, 0xf550, 0xf409, 0xf550, 0xf409, 0xf550, 0xf2aa, 0xf407, 0xf2aa, 0xf407, +0xf3a6, 0xf511, 0xf3a6, 0xf511, 0xf5cc, 0xf73d, 0xf5cc, 0xf73d, 0xf54c, 0xf6ba, 0xf54c, +0xf6ba, 0xf712, 0xf873, 0xf712, 0xf873, 0xf95e, 0xfaa9, 0xf95e, 0xfaa9, 0xf95e, 0xfaa9, +0xf9bc, 0xfae9, 0xf9bc, 0xfae9, 0xfa7a, 0xfb81, 0xfa7a, 0xfb81, 0xfbef, 0xfcc9, 0xfbef, +0xfcc9, 0xfdae, 0xfe56, 0xfdae, 0xfe56, 0xfe0f, 0xfe81, 0xfe0f, 0xfe81, 0xfe0f, 0xfe81, +0xfead, 0xfee8, 0xfead, 0xfee8, 0xffa5, 0xffa8, 0xffa5, 0xffa8, 0x72, 0x3e, 0x72, +0x3e, 0x20b, 0x1a4, 0x20b, 0x1a4, 0x25f, 0x1c7, 0x25f, 0x1c7, 0x353, 0x290, +0x353, 0x290, 0x353, 0x290, 0x414, 0x32c, 0x414, 0x32c, 0x470, 0x36a, 0x470, +0x36a, 0x6c6, 0x5a8, 0x6c6, 0x5a8, 0x745, 0x616, 0x745, 0x616, 0x753, 0x619, +0x753, 0x619, 0x80e, 0x6ce, 0x80e, 0x6ce, 0x80e, 0x6ce, 0x895, 0x755, 0x895, +0x755, 0x96a, 0x82d, 0x96a, 0x82d, 0x9df, 0x8a8, 0x9df, 0x8a8, 0xafc, 0x9ce, +0xafc, 0x9ce, 0xbb6, 0xa91, 0xbb6, 0xa91, 0xbb6, 0xa91, 0xc47, 0xb2b, 0xc47, +0xb2b, 0xc89, 0xb75, 0xc89, 0xb75, 0xc07, 0xafc, 0xc07, 0xafc, 0xb9b, 0xa97, +0xb9b, 0xa97, 0xa9a, 0x99c, 0xa9a, 0x99c, 0xa07, 0x90f, 0xa07, 0x90f, 0xa07, +0x90f, 0xa14, 0x922, 0xa14, 0x922, 0x8f0, 0x804, 0x8f0, 0x804, 0x693, 0x5ae, +0x693, 0x5ae, 0x525, 0x44a, 0x525, 0x44a, 0x410, 0x341, 0x410, 0x341, 0x410, +0x341, 0x2ad, 0x1ed, 0x2ad, 0x1ed, 0x2be, 0x211, 0x2be, 0x211, 0x252, 0x1bc, +0x252, 0x1bc, 0x144, 0xc9, 0x144, 0xc9, 0xffdf, 0xff83, 0xffdf, 0xff83, 0xfe23, +0xfde8, 0xfe23, 0xfde8, 0xfe23, 0xfde8, 0xfd98, 0xfd81, 0xfd98, 0xfd81, 0xfb74, 0xfb82, +0xfb74, 0xfb82, 0xfbbe, 0xfbf2, 0xfbbe, 0xfbf2, 0xfdcc, 0xfe23, 0xfdcc, 0xfe23, 0xfcc1, +0xfd36, 0xfcc1, 0xfd36, 0xfcef, 0xfd7e, 0xfcef, 0xfd7e, 0xfcef, 0xfd7e, 0xfc24, 0xfcc4, +0xfc24, 0xfcc4, 0xfc14, 0xfcbe, 0xfc14, 0xfcbe, 0xfd1c, 0xfdc4, 0xfd1c, 0xfdc4, 0xfd1c, +0xfdb6, 0xfd1c, 0xfdb6, 0xfe49, 0xfec9, 0xfe49, 0xfec9, 0xfe49, 0xfec9, 0xfdb9, 0xfe11, +0xfdb9, 0xfe11, 0xfeb2, 0xfed6, 0xfeb2, 0xfed6, 0xffbf, 0xffa1, 0xffbf, 0xffa1, 0xff94, +0xff29, 0xff94, 0xff29, 0x1c5, 0x102, 0x1c5, 0x102, 0x356, 0x232, 0x356, 0x232, +0x356, 0x232, 0x53a, 0x3ad, 0x53a, 0x3ad, 0x75f, 0x565, 0x75f, 0x565, 0x9b8, +0x74f, 0x9b8, 0x74f, 0xc27, 0x94f, 0xc27, 0x94f, 0xe33, 0xaef, 0xe33, 0xaef, +0x124e, 0xea4, 0x124e, 0xea4, 0x124e, 0xea4, 0x1537, 0x112e, 0x1537, 0x112e, 0x17db, +0x137d, 0x17db, 0x137d, 0x1b62, 0x16ba, 0x1b62, 0x16ba, 0x1c33, 0x174f, 0x1c33, 0x174f, +0x1c3c, 0x1728, 0x1c3c, 0x1728, 0x1c3c, 0x1728, 0x1bfe, 0x16c7, 0x1bfe, 0x16c7, 0x1c6d, +0x1722, 0x1c6d, 0x1722, 0x1cd6, 0x1783, 0x1cd6, 0x1783, 0x1b91, 0x1642, 0x1b91, 0x1642, +0x1af8, 0x15b8, 0x1af8, 0x15b8, 0x1a25, 0x14fc, 0x1a25, 0x14fc, 0x1a25, 0x14fc, 0x195f, +0x1454, 0x195f, 0x1454, 0x189f, 0x13b7, 0x189f, 0x13b7, 0x1801, 0x133f, 0x1801, 0x133f, +0x177e, 0x12e3, 0x177e, 0x12e3, 0x163a, 0x11c6, 0x163a, 0x11c6, 0x1643, 0x11f3, 0x1643, +0x11f3, 0x1643, 0x11f3, 0x1673, 0x1242, 0x1673, 0x1242, 0x1623, 0x120d, 0x1623, 0x120d, +0x15f2, 0x11f3, 0x15f2, 0x11f3, 0x1536, 0x1147, 0x1536, 0x1147, 0x1457, 0x1072, 0x1457, +0x1072, 0x1457, 0x1072, 0x1499, 0x10b9, 0x1499, 0x10b9, 0x14a6, 0x10c8, 0x14a6, 0x10c8, +0x1455, 0x1074, 0x1455, 0x1074, 0x15f2, 0x120e, 0x15f2, 0x120e, 0x165c, 0x1273, 0x165c, +0x1273, 0x1644, 0x1259, 0x1644, 0x1259, 0x1644, 0x1259, 0x16f1, 0x1305, 0x16f1, 0x1305, +0x1629, 0x1242, 0x1629, 0x1242, 0x1613, 0x1237, 0x1613, 0x1237, 0x1597, 0x11cd, 0x1597, +0x11cd, 0x1561, 0x11b3, 0x1561, 0x11b3, 0x14e5, 0x115b, 0x14e5, 0x115b, 0x14e5, 0x115b, +0x120d, 0xeb2, 0x120d, 0xeb2, 0x11de, 0xebc, 0x11de, 0xebc, 0x113b, 0xe5e, 0x113b, +0xe5e, 0xf36, 0xca7, 0xf36, 0xca7, 0xf41, 0xd09, 0xf41, 0xd09, 0xf41, 0xd09, +0xe88, 0xcb1, 0xe88, 0xcb1, 0xda0, 0xc32, 0xda0, 0xc32, 0xbc4, 0xac6, 0xbc4, +0xac6, 0x9f3, 0x96a, 0x9f3, 0x96a, 0x772, 0x760, 0x772, 0x760, 0x3c0, 0x428, +0x3c0, 0x428, 0x3c0, 0x428, 0x260, 0x342, 0x260, 0x342, 0xffaf, 0x109, 0xffaf, +0x109, 0xfc43, 0xfe11, 0xfc43, 0xfe11, 0xfa50, 0xfc8f, 0xfa50, 0xfc8f, 0xf8d0, 0xfb77, +0xf8d0, 0xfb77, 0xf7e9, 0xfaf2, 0xf7e9, 0xfaf2, 0xf7e9, 0xfaf2, 0xf5f7, 0xf958, 0xf5f7, +0xf958, 0xf413, 0xf7c1, 0xf413, 0xf7c1, 0xf234, 0xf624, 0xf234, 0xf624, 0xef64, 0xf38a, +0xef64, 0xf38a, 0xed94, 0xf1e3, 0xed94, 0xf1e3, 0xed94, 0xf1e3, 0xeb53, 0xefbe, 0xeb53, +0xefbe, 0xe9af, 0xee2a, 0xe9af, 0xee2a, 0xe96c, 0xede8, 0xe96c, 0xede8, 0xe80c, 0xec7e, +0xe80c, 0xec7e, 0xe76d, 0xebc8, 0xe76d, 0xebc8, 0xe758, 0xeb91, 0xe758, 0xeb91, 0xe758, +0xeb91, 0xe7ac, 0xebb8, 0xe7ac, 0xebb8, 0xe7a8, 0xeb7d, 0xe7a8, 0xeb7d, 0xe7e4, 0xeb7b, +0xe7e4, 0xeb7b, 0xe992, 0xece4, 0xe992, 0xece4, 0xea52, 0xed59, 0xea52, 0xed59, 0xed0a, +0xefc4, 0xed0a, 0xefc4, 0xed0a, 0xefc4, 0xf094, 0xf2fd, 0xf094, 0xf2fd, 0xf29b, 0xf4b4, +0xf29b, 0xf4b4, 0xf43d, 0xf607, 0xf43d, 0xf607, 0xf568, 0xf6e5, 0xf568, 0xf6e5, 0xf751, +0xf885, 0xf751, 0xf885, 0xf751, 0xf885, 0xf824, 0xf915, 0xf824, 0xf915, 0xf81e, 0xf8d2, +0xf81e, 0xf8d2, 0xf8eb, 0xf968, 0xf8eb, 0xf968, 0xf8a6, 0xf8f4, 0xf8a6, 0xf8f4, 0xf868, +0xf88e, 0xf868, 0xf88e, 0xf9d3, 0xf9d8, 0xf9d3, 0xf9d8, 0xf9d3, 0xf9d8, 0xf9e4, 0xf9d0, +0xf9e4, 0xf9d0, 0xf8df, 0xf8b9, 0xf8df, 0xf8b9, 0xf960, 0xf92f, 0xf960, 0xf92f, 0xf9a1, +0xf969, 0xf9a1, 0xf969, 0xf991, 0xf958, 0xf991, 0xf958, 0xfa3c, 0xfa05, 0xfa3c, 0xfa05, +0xfa3c, 0xfa05, 0xfa82, 0xfa50, 0xfa82, 0xfa50, 0xfab4, 0xfa89, 0xfab4, 0xfa89, 0xfb4a, +0xfb27, 0xfb4a, 0xfb27, 0xfcb7, 0xfc9d, 0xfcb7, 0xfc9d, 0xfd65, 0xfd55, 0xfd65, 0xfd55, +0xfd65, 0xfd55, 0xfd3b, 0xfd34, 0xfd3b, 0xfd34, 0xff93, 0xff97, 0xff93, 0xff97, 0xe3, +0xf3, 0xe3, 0xf3, 0xdc, 0xf9, 0xdc, 0xf9, 0x1cc, 0x1fa, 0x1cc, 0x1fa, +0x1fb, 0x23e, 0x1fb, 0x23e, 0x1fb, 0x23e, 0x252, 0x2ae, 0x252, 0x2ae, 0x1b7, +0x232, 0x1b7, 0x232, 0x14a, 0x1ed, 0x14a, 0x1ed, 0xfff3, 0xc5, 0xfff3, 0xc5, +0xfd81, 0xfe8c, 0xfd81, 0xfe8c, 0xfd4d, 0xfe9a, 0xfd4d, 0xfe9a, 0xfd4d, 0xfe9a, 0xfb0e, +0xfca9, 0xfb0e, 0xfca9, 0xf83d, 0xfa2f, 0xf83d, 0xfa2f, 0xf761, 0xf9b4, 0xf761, 0xf9b4, +0xf633, 0xf8f1, 0xf633, 0xf8f1, 0xf504, 0xf833, 0xf504, 0xf833, 0xf504, 0xf833, 0xf230, +0xf5d7, 0xf230, 0xf5d7, 0xef3f, 0xf362, 0xef3f, 0xf362, 0xeb8d, 0xf02c, 0xeb8d, 0xf02c, +0xe71a, 0xec34, 0xe71a, 0xec34, 0xe578, 0xeb08, 0xe578, 0xeb08, 0xe394, 0xe993, 0xe394, +0xe993, 0xe394, 0xe993, 0xe1aa, 0xe80e, 0xe1aa, 0xe80e, 0xe039, 0xe6f4, 0xe039, 0xe6f4, +0xdf4a, 0xe64d, 0xdf4a, 0xe64d, 0xde2c, 0xe565, 0xde2c, 0xe565, 0xdc2d, 0xe388, 0xdc2d, +0xe388, 0xdc2d, 0xe388, 0xdce9, 0xe452, 0xdce9, 0xe452, 0xdbe9, 0xe34a, 0xdbe9, 0xe34a, +0xda0a, 0xe14f, 0xda0a, 0xe14f, 0xd959, 0xe06e, 0xd959, 0xe06e, 0xd7f6, 0xdec7, 0xd7f6, +0xdec7, 0xd834, 0xdeb0, 0xd834, 0xdeb0, 0xd834, 0xdeb0, 0xd807, 0xde1f, 0xd807, 0xde1f, +0xd8c7, 0xde70, 0xd8c7, 0xde70, 0xdabc, 0xdfeb, 0xdabc, 0xdfeb, 0xdcdf, 0xe18f, 0xdcdf, +0xe18f, 0xdf70, 0xe39f, 0xdf70, 0xe39f, 0xe10a, 0xe4b8, 0xe10a, 0xe4b8, 0xe10a, 0xe4b8, +0xe338, 0xe668, 0xe338, 0xe668, 0xe589, 0xe841, 0xe589, 0xe841, 0xe7c9, 0xea12, 0xe7c9, +0xea12, 0xeab0, 0xec94, 0xeab0, 0xec94, 0xedab, 0xef35, 0xedab, 0xef35, 0xedab, 0xef35, +0xeead, 0xefe9, 0xeead, 0xefe9, 0xee65, 0xef5e, 0xee65, 0xef5e, 0xf052, 0xf114, 0xf052, +0xf114, 0xf167, 0xf1fc, 0xf167, 0xf1fc, 0xf10e, 0xf17e, 0xf10e, 0xf17e, 0xf141, 0xf194, +0xf141, 0xf194, 0xf141, 0xf194, 0xf0e3, 0xf11d, 0xf0e3, 0xf11d, 0xf0b6, 0xf0d8, 0xf0b6, +0xf0d8, 0xf0b6, 0xf0c2, 0xf0b6, 0xf0c2, 0xf232, 0xf223, 0xf232, 0xf223, 0xf1e4, 0xf1b8, +0xf1e4, 0xf1b8, 0xf124, 0xf0d4, 0xf124, 0xf0d4, 0xf124, 0xf0d4, 0xf3fa, 0xf37d, 0xf3fa, +0xf37d, 0xf47f, 0xf3cd, 0xf47f, 0xf3cd, 0xf617, 0xf529, 0xf617, 0xf529, 0xf8ff, 0xf7ca, +0xf8ff, 0xf7ca, 0xfab1, 0xf92e, 0xfab1, 0xf92e, 0xfab1, 0xf92e, 0xfd34, 0xfb5c, 0xfd34, +0xfb5c, 0xfee1, 0xfcae, 0xfee1, 0xfcae, 0x1f1, 0xff60, 0x1f1, 0xff60, 0x43f, 0x14f, +0x43f, 0x14f, 0x7db, 0x48c, 0x7db, 0x48c, 0xd97, 0x9ed, 0xd97, 0x9ed, 0xd97, +0x9ed, 0x10b5, 0xcb6, 0x10b5, 0xcb6, 0x139a, 0xf4f, 0x139a, 0xf4f, 0x16bf, 0x1231, +0x16bf, 0x1231, 0x19eb, 0x1527, 0x19eb, 0x1527, 0x1bc0, 0x16d2, 0x1bc0, 0x16d2, 0x1cc3, +0x17ba, 0x1cc3, 0x17ba, 0x1cc3, 0x17ba, 0x1e6c, 0x1957, 0x1e6c, 0x1957, 0x1e5b, 0x1948, +0x1e5b, 0x1948, 0x1e79, 0x1976, 0x1e79, 0x1976, 0x1eaf, 0x19ca, 0x1eaf, 0x19ca, 0x1dcf, +0x1914, 0x1dcf, 0x1914, 0x1dcf, 0x1914, 0x1d38, 0x18b2, 0x1d38, 0x18b2, 0x1c9f, 0x1857, +0x1c9f, 0x1857, 0x1d05, 0x1902, 0x1d05, 0x1902, 0x1c3c, 0x1883, 0x1c3c, 0x1883, 0x1aee, +0x1783, 0x1aee, 0x1783, 0x1ad7, 0x17bc, 0x1ad7, 0x17bc, 0x1ad7, 0x17bc, 0x184b, 0x1581, +0x184b, 0x1581, 0x15f0, 0x1377, 0x15f0, 0x1377, 0x14ee, 0x12c4, 0x14ee, 0x12c4, 0x12f8, +0x111b, 0x12f8, 0x111b, 0x10e1, 0xf4f, 0x10e1, 0xf4f, 0xf0c, 0xdc1, 0xf0c, 0xdc1, +0xf0c, 0xdc1, 0xd90, 0xc8a, 0xd90, 0xc8a, 0xc1e, 0xb5a, 0xc1e, 0xb5a, 0xbb1, +0xb2d, 0xbb1, 0xb2d, 0xbcd, 0xb88, 0xbcd, 0xb88, 0xa83, 0xa7b, 0xa83, 0xa7b, +0xa83, 0xa7b, 0x854, 0x888, 0x854, 0x888, 0x60e, 0x67d, 0x60e, 0x67d, 0x387, +0x432, 0x387, 0x432, 0x144, 0x228, 0x144, 0x228, 0xff32, 0x4f, 0xff32, 0x4f, +0xfca1, 0xfdf5, 0xfca1, 0xfdf5, 0xfca1, 0xfdf5, 0xfaba, 0xfc42, 0xfaba, 0xfc42, 0xf962, +0xfb1c, 0xf962, 0xfb1c, 0xf7ac, 0xf993, 0xf7ac, 0xf993, 0xf6b6, 0xf8c5, 0xf6b6, 0xf8c5, +0xf55b, 0xf78c, 0xf55b, 0xf78c, 0xf3c3, 0xf60e, 0xf3c3, 0xf60e, 0xf3c3, 0xf60e, 0xf2cf, +0xf52c, 0xf2cf, 0xf52c, 0xf307, 0xf56d, 0xf307, 0xf56d, 0xf4cc, 0xf731, 0xf4cc, 0xf731, +0xf3a9, 0xf603, 0xf3a9, 0xf603, 0xf3ff, 0xf644, 0xf3ff, 0xf644, 0xf3ff, 0xf644, 0xf703, +0xf92b, 0xf703, 0xf92b, 0xf709, 0xf909, 0xf709, 0xf909, 0xf7b1, 0xf983, 0xf7b1, 0xf983, +0xf8c6, 0xfa62, 0xf8c6, 0xfa62, 0xf914, 0xfa75, 0xf914, 0xfa75, 0xf97d, 0xfaa0, 0xf97d, +0xfaa0, 0xf97d, 0xfaa0, 0xfad2, 0xfbb4, 0xfad2, 0xfbb4, 0xfbc9, 0xfc6b, 0xfbc9, 0xfc6b, +0xfb83, 0xfbe6, 0xfb83, 0xfbe6, 0xfd02, 0xfd29, 0xfd02, 0xfd29, 0xfe1b, 0xfe0b, 0xfe1b, +0xfe0b, 0xfeba, 0xfe7a, 0xfeba, 0xfe7a, 0xfeba, 0xfe7a, 0x2f, 0xffc4, 0x2f, 0xffc4, +0x1ee, 0x161, 0x1ee, 0x161, 0x3ef, 0x347, 0x3ef, 0x347, 0x4ee, 0x434, 0x4ee, +0x434, 0x5d5, 0x510, 0x5d5, 0x510, 0x5d5, 0x510, 0x6c3, 0x5f9, 0x6c3, 0x5f9, +0x6c2, 0x5fb, 0x6c2, 0x5fb, 0x7df, 0x71f, 0x7df, 0x71f, 0x91f, 0x86b, 0x91f, +0x86b, 0x958, 0x8b2, 0x958, 0x8b2, 0xa73, 0x9dd, 0xa73, 0x9dd, 0xa73, 0x9dd, +0xb6a, 0xae6, 0xb6a, 0xae6, 0xcd4, 0xc61, 0xcd4, 0xc61, 0xcc4, 0xc61, 0xcc4, +0xc61, 0xc02, 0xbae, 0xc02, 0xbae, 0xc79, 0xc31, 0xc79, 0xc31, 0xaa6, 0xa6a, +0xaa6, 0xa6a, 0xaa6, 0xa6a, 0x959, 0x927, 0x959, 0x927, 0x829, 0x7ff, 0x829, +0x7ff, 0x671, 0x64f, 0x671, 0x64f, 0x575, 0x559, 0x575, 0x559, 0x406, 0x3f3, +0x406, 0x3f3, 0x406, 0x3f3, 0x3ed, 0x3e3, 0x3ed, 0x3e3, 0x370, 0x371, 0x370, +0x371, 0x323, 0x331, 0x323, 0x331, 0x278, 0x295, 0x278, 0x295, 0xff76, 0xffa6, +0xff76, 0xffa6, 0xfdf5, 0xfe3a, 0xfdf5, 0xfe3a, 0xfdf5, 0xfe3a, 0xfd4d, 0xfda8, 0xfd4d, +0xfda8, 0xfc92, 0xfd05, 0xfc92, 0xfd05, 0xfd15, 0xfda1, 0xfd15, 0xfda1, 0xfd32, 0xfdd6, +0xfd32, 0xfdd6, 0xfc1b, 0xfcd5, 0xfc1b, 0xfcd5, 0xfba3, 0xfc6f, 0xfba3, 0xfc6f, 0xfba3, +0xfc6f, 0xfc34, 0xfd0e, 0xfc34, 0xfd0e, 0xfc6c, 0xfd4c, 0xfc6c, 0xfd4c, 0xfcbf, 0xfd9f, +0xfcbf, 0xfd9f, 0xfcaf, 0xfd85, 0xfcaf, 0xfd85, 0xfcfe, 0xfdc1, 0xfcfe, 0xfdc1, 0xfcfe, +0xfdc1, 0xfcc6, 0xfd6b, 0xfcc6, 0xfd6b, 0xfc3e, 0xfcbb, 0xfc3e, 0xfcbb, 0xfd38, 0xfd82, +0xfd38, 0xfd82, 0xfc71, 0xfc7f, 0xfc71, 0xfc7f, 0xfd24, 0xfcec, 0xfd24, 0xfcec, 0xff8b, +0xff05, 0xff8b, 0xff05, 0xff8b, 0xff05, 0x59, 0xff80, 0x59, 0xff80, 0x1c7, 0x96, +0x1c7, 0x96, 0x3e8, 0x25d, 0x3e8, 0x25d, 0x5ee, 0x409, 0x5ee, 0x409, 0x837, +0x5fa, 0x837, 0x5fa, 0x837, 0x5fa, 0xc9c, 0xa0a, 0xc9c, 0xa0a, 0xf92, 0xcb1, +0xf92, 0xcb1, 0x110d, 0xde6, 0x110d, 0xde6, 0x14ab, 0x1146, 0x14ab, 0x1146, 0x171c, +0x1384, 0x171c, 0x1384, 0x187a, 0x14b9, 0x187a, 0x14b9, 0x187a, 0x14b9, 0x19bc, 0x15de, +0x19bc, 0x15de, 0x1ae3, 0x16f3, 0x1ae3, 0x16f3, 0x1c43, 0x184b, 0x1c43, 0x184b, 0x1c08, +0x1811, 0x1c08, 0x1811, 0x1bab, 0x17bf, 0x1bab, 0x17bf, 0x1b44, 0x1769, 0x1b44, 0x1769, +0x1b44, 0x1769, 0x19f1, 0x162d, 0x19f1, 0x162d, 0x1998, 0x15ef, 0x1998, 0x15ef, 0x18b6, +0x152a, 0x18b6, 0x152a, 0x183c, 0x14ce, 0x183c, 0x14ce, 0x1820, 0x14ce, 0x1820, 0x14ce, +0x1820, 0x14ce, 0x180a, 0x14d1, 0x180a, 0x14d1, 0x18fb, 0x15d9, 0x18fb, 0x15d9, 0x178f, +0x147f, 0x178f, 0x147f, 0x16b4, 0x13b2, 0x16b4, 0x13b2, 0x15f9, 0x12ff, 0x15f9, 0x12ff, +0x147c, 0x1185, 0x147c, 0x1185, 0x147c, 0x1185, 0x1510, 0x1219, 0x1510, 0x1219, 0x152a, +0x1230, 0x152a, 0x1230, 0x1584, 0x1285, 0x1584, 0x1285, 0x15ea, 0x12e4, 0x15ea, 0x12e4, +0x166d, 0x1361, 0x166d, 0x1361, 0x1769, 0x1459, 0x1769, 0x1459, 0x1769, 0x1459, 0x1771, +0x145f, 0x1771, 0x145f, 0x1834, 0x1524, 0x1834, 0x1524, 0x18b7, 0x15b0, 0x18b7, 0x15b0, +0x1761, 0x1467, 0x1761, 0x1467, 0x1675, 0x1390, 0x1675, 0x1390, 0x1675, 0x1390, 0x15db, +0x1312, 0x15db, 0x1312, 0x1461, 0x11bc, 0x1461, 0x11bc, 0x13d3, 0x1159, 0x13d3, 0x1159, +0x12f4, 0x10ac, 0x12f4, 0x10ac, 0x112b, 0xf1e, 0x112b, 0xf1e, 0x1110, 0xf42, 0x1110, +0xf42, 0x1110, 0xf42, 0x10ce, 0xf45, 0x10ce, 0xf45, 0xee5, 0xda6, 0xee5, 0xda6, +0xcc5, 0xbd3, 0xcc5, 0xbd3, 0xb34, 0xa93, 0xb34, 0xa93, 0x9e4, 0x996, 0x9e4, +0x996, 0x728, 0x72c, 0x728, 0x72c, 0x728, 0x72c, 0x529, 0x580, 0x529, 0x580, +0x300, 0x3a9, 0x300, 0x3a9, 0xfe8d, 0xff87, 0xfe8d, 0xff87, 0xfc54, 0xfd9c, 0xfc54, +0xfd9c, 0xfbed, 0xfd81, 0xfbed, 0xfd81, 0xfbed, 0xfd81, 0xfa45, 0xfc22, 0xfa45, 0xfc22, +0xf780, 0xf9a1, 0xf780, 0xf9a1, 0xf62c, 0xf88e, 0xf62c, 0xf88e, 0xf464, 0xf701, 0xf464, +0xf701, 0xf0c3, 0xf398, 0xf0c3, 0xf398, 0xef11, 0xf218, 0xef11, 0xf218, 0xef11, 0xf218, +0xeccc, 0xefff, 0xeccc, 0xefff, 0xea4a, 0xeda2, 0xea4a, 0xeda2, 0xe998, 0xed10, 0xe998, +0xed10, 0xe8f5, 0xec83, 0xe8f5, 0xec83, 0xe850, 0xebef, 0xe850, 0xebef, 0xe750, 0xeaf7, +0xe750, 0xeaf7, 0xe750, 0xeaf7, 0xe6f9, 0xea9f, 0xe6f9, 0xea9f, 0xe771, 0xeb0e, 0xe771, +0xeb0e, 0xe800, 0xeb8c, 0xe800, 0xeb8c, 0xe98a, 0xecfb, 0xe98a, 0xecfb, 0xeb13, 0xee61, +0xeb13, 0xee61, 0xeb13, 0xee61, 0xece7, 0xf00a, 0xece7, 0xf00a, 0xef37, 0xf229, 0xef37, +0xf229, 0xf13c, 0xf3f5, 0xf13c, 0xf3f5, 0xf3e3, 0xf65d, 0xf3e3, 0xf65d, 0xf585, 0xf7be, +0xf585, 0xf7be, 0xf73b, 0xf92f, 0xf73b, 0xf92f, 0xf73b, 0xf92f, 0xf8f1, 0xfa9e, 0xf8f1, +0xfa9e, 0xf914, 0xfa7a, 0xf914, 0xfa7a, 0xfa20, 0xfb41, 0xfa20, 0xfb41, 0xfaa7, 0xfb86, +0xfaa7, 0xfb86, 0xfa47, 0xfae8, 0xfa47, 0xfae8, 0xfa63, 0xfacc, 0xfa63, 0xfacc, 0xfa63, +0xfacc, 0xfa0d, 0xfa44, 0xfa0d, 0xfa44, 0xf9ee, 0xf9fb, 0xf9ee, 0xf9fb, 0xfa8d, 0xfa78, +0xfa8d, 0xfa78, 0xfb1d, 0xfaed, 0xfb1d, 0xfaed, 0xfbdd, 0xfb99, 0xfbdd, 0xfb99, 0xfbdd, +0xfb99, 0xfc3e, 0xfbf0, 0xfc3e, 0xfbf0, 0xfccd, 0xfc7b, 0xfccd, 0xfc7b, 0xfd36, 0xfce7, +0xfd36, 0xfce7, 0xfcce, 0xfc88, 0xfcce, 0xfc88, 0xfe19, 0xfde0, 0xfe19, 0xfde0, 0xff01, +0xfeda, 0xff01, 0xfeda, 0xff01, 0xfeda, 0xffba, 0xffa6, 0xffba, 0xffa6, 0x152, 0x154, +0x152, 0x154, 0x19a, 0x1b4, 0x19a, 0x1b4, 0x1ca, 0x1fb, 0x1ca, 0x1fb, 0x2ce, +0x318, 0x2ce, 0x318, 0x405, 0x467, 0x405, 0x467, 0x405, 0x467, 0x3e1, 0x45c, +0x3e1, 0x45c, 0x320, 0x3b5, 0x320, 0x3b5, 0x2a2, 0x353, 0x2a2, 0x353, 0x106, +0x1d4, 0x106, 0x1d4, 0xfeec, 0xffdb, 0xfeec, 0xffdb, 0xfeec, 0xffdb, 0xfe6a, 0xff7e, +0xfe6a, 0xff7e, 0xfcf1, 0xfe2f, 0xfcf1, 0xfe2f, 0xf9e8, 0xfb56, 0xf9e8, 0xfb56, 0xf938, +0xfadc, 0xf938, 0xfadc, 0xf877, 0xfa58, 0xf877, 0xfa58, 0xf579, 0xf7a0, 0xf579, 0xf7a0, +0xf579, 0xf7a0, 0xf1f9, 0xf46b, 0xf1f9, 0xf46b, 0xef61, 0xf225, 0xef61, 0xf225, 0xec8a, +0xefa6, 0xec8a, 0xefa6, 0xe979, 0xecf1, 0xe979, 0xecf1, 0xe846, 0xec1d, 0xe846, 0xec1d, +0xe5cf, 0xea05, 0xe5cf, 0xea05, 0xe5cf, 0xea05, 0xe22c, 0xe6c0, 0xe22c, 0xe6c0, 0xe124, +0xe613, 0xe124, 0xe613, 0xe0f1, 0xe634, 0xe0f1, 0xe634, 0xdf6f, 0xe4fe, 0xdf6f, 0xe4fe, +0xddd8, 0xe3a9, 0xddd8, 0xe3a9, 0xddd8, 0xe3a9, 0xddd8, 0xe3dd, 0xddd8, 0xe3dd, 0xddcf, +0xe3f9, 0xddcf, 0xe3f9, 0xdc61, 0xe2a2, 0xdc61, 0xe2a2, 0xdb73, 0xe1b9, 0xdb73, 0xe1b9, +0xda21, 0xe05c, 0xda21, 0xe05c, 0xd8f2, 0xdf12, 0xd8f2, 0xdf12, 0xd8f2, 0xdf12, 0xd882, +0xde76, 0xd882, 0xde76, 0xd8ef, 0xdea8, 0xd8ef, 0xdea8, 0xdad1, 0xe042, 0xdad1, 0xe042, +0xdb74, 0xe094, 0xdb74, 0xe094, 0xdd41, 0xe207, 0xdd41, 0xe207, 0xdfae, 0xe413, 0xdfae, +0xe413, 0xdfae, 0xe413, 0xe158, 0xe55a, 0xe158, 0xe55a, 0xe449, 0xe7e7, 0xe449, 0xe7e7, +0xe671, 0xe9af, 0xe671, 0xe9af, 0xe871, 0xeb52, 0xe871, 0xeb52, 0xea32, 0xecbd, 0xea32, +0xecbd, 0xea32, 0xecbd, 0xeb8a, 0xedc7, 0xeb8a, 0xedc7, 0xed70, 0xef69, 0xed70, 0xef69, +0xef13, 0xf0d0, 0xef13, 0xf0d0, 0xf08b, 0xf218, 0xf08b, 0xf218, 0xf0f7, 0xf25c, 0xf0f7, +0xf25c, 0xf176, 0xf2bb, 0xf176, 0xf2bb, 0xf176, 0xf2bb, 0xf29b, 0xf3c6, 0xf29b, 0xf3c6, +0xf204, 0xf319, 0xf204, 0xf319, 0xf194, 0xf296, 0xf194, 0xf296, 0xf1ba, 0xf2a9, 0xf1ba, +0xf2a9, 0xf10e, 0xf1e8, 0xf10e, 0xf1e8, 0xf10e, 0xf1e8, 0xf198, 0xf257, 0xf198, 0xf257, +0xf30b, 0xf3a9, 0xf30b, 0xf3a9, 0xf3a4, 0xf418, 0xf3a4, 0xf418, 0xf45f, 0xf49f, 0xf45f, +0xf49f, 0xf640, 0xf641, 0xf640, 0xf641, 0xf72a, 0xf6e0, 0xf72a, 0xf6e0, 0xf72a, 0xf6e0, +0xf7c2, 0xf722, 0xf7c2, 0xf722, 0xf97c, 0xf87c, 0xf97c, 0xf87c, 0xfca1, 0xfb37, 0xfca1, +0xfb37, 0xffc7, 0xfdec, 0xffc7, 0xfdec, 0x271, 0x1e, 0x271, 0x1e, 0x752, 0x486, +0x752, 0x486, 0x752, 0x486, 0xa14, 0x6cd, 0xa14, 0x6cd, 0xbb1, 0x7f2, 0xbb1, +0x7f2, 0xf8e, 0xb5d, 0xf8e, 0xb5d, 0x12dd, 0xe42, 0x12dd, 0xe42, 0x151d, 0x1023, +0x151d, 0x1023, 0x151d, 0x1023, 0x16ad, 0x1161, 0x16ad, 0x1161, 0x1880, 0x12f0, 0x1880, +0x12f0, 0x1935, 0x1373, 0x1935, 0x1373, 0x19d2, 0x13ed, 0x19d2, 0x13ed, 0x1ab9, 0x14c4, +0x1ab9, 0x14c4, 0x1a3b, 0x1447, 0x1a3b, 0x1447, 0x1a3b, 0x1447, 0x1a0c, 0x142b, 0x1a0c, +0x142b, 0x1ae6, 0x1525, 0x1ae6, 0x1525, 0x1b75, 0x15e4, 0x1b75, 0x15e4, 0x1a18, 0x14c3, +0x1a18, 0x14c3, 0x18b7, 0x13a8, 0x18b7, 0x13a8, 0x18e1, 0x1421, 0x18e1, 0x1421, 0x18e1, +0x1421, 0x183c, 0x13d1, 0x183c, 0x13d1, 0x17e0, 0x13cf, 0x17e0, 0x13cf, 0x17c8, 0x1413, +0x17c8, 0x1413, 0x1517, 0x11bd, 0x1517, 0x11bd, 0x12ba, 0xfbb, 0x12ba, 0xfbb, 0x12ba, +0xfbb, 0x1166, 0xebf, 0x1166, 0xebf, 0x105c, 0xe0b, 0x105c, 0xe0b, 0xf12, 0xd12, +0xf12, 0xd12, 0xdc1, 0xc0f, 0xdc1, 0xc0f, 0xe60, 0xcf8, 0xe60, 0xcf8, 0xd15, +0xbf2, 0xd15, 0xbf2, 0xd15, 0xbf2, 0xad8, 0x9f7, 0xad8, 0x9f7, 0x91d, 0x87a, +0x91d, 0x87a, 0x6db, 0x673, 0x6db, 0x673, 0x4c1, 0x493, 0x4c1, 0x493, 0x23c, +0x245, 0x23c, 0x245, 0xdb, 0x119, 0xdb, 0x119, 0xdb, 0x119, 0xff22, 0xff94, +0xff22, 0xff94, 0xfd1b, 0xfdbf, 0xfd1b, 0xfdbf, 0xfbe6, 0xfcb9, 0xfbe6, 0xfcb9, 0xfa0e, +0xfb0e, 0xfa0e, 0xfb0e, 0xf94b, 0xfa76, 0xf94b, 0xfa76, 0xf94b, 0xfa76, 0xf936, 0xfa87, +0xf936, 0xfa87, 0xf7c1, 0xf934, 0xf7c1, 0xf934, 0xf706, 0xf895, 0xf706, 0xf895, 0xf6fb, +0xf8a0, 0xf6fb, 0xf8a0, 0xf603, 0xf7b7, 0xf603, 0xf7b7, 0xf6a0, 0xf85c, 0xf6a0, 0xf85c, +0xf6a0, 0xf85c, 0xf7f6, 0xf9b2, 0xf7f6, 0xf9b2, 0xf799, 0xf94c, 0xf799, 0xf94c, 0xf837, +0xf9da, 0xf837, 0xf9da, 0xf971, 0xfafc, 0xf971, 0xfafc, 0xf981, 0xfaed, 0xf981, 0xfaed, +0xf95c, 0xfaa2, 0xf95c, 0xfaa2, 0xf95c, 0xfaa2, 0xf9da, 0xfaf4, 0xf9da, 0xfaf4, 0xfaff, +0xfbe9, 0xfaff, 0xfbe9, 0xfaad, 0xfb65, 0xfaad, 0xfb65, 0xfb2c, 0xfbaf, 0xfb2c, 0xfbaf, +0xfced, 0xfd3c, 0xfced, 0xfd3c, 0xfced, 0xfd3c, 0xfd68, 0xfd84, 0xfd68, 0xfd84, 0xfe5b, +0xfe45, 0xfe5b, 0xfe45, 0xf, 0xffcc, 0xf, 0xffcc, 0x156, 0xea, 0x156, 0xea, +0x155, 0xc5, 0x155, 0xc5, 0x245, 0x198, 0x245, 0x198, 0x245, 0x198, 0x385, +0x2bf, 0x385, 0x2bf, 0x482, 0x3aa, 0x482, 0x3aa, 0x64b, 0x566, 0x64b, 0x566, +0x713, 0x626, 0x713, 0x626, 0x769, 0x679, 0x769, 0x679, 0x7d7, 0x6e8, 0x7d7, +0x6e8, 0x7d7, 0x6e8, 0x96d, 0x880, 0x96d, 0x880, 0xb25, 0xa3e, 0xb25, 0xa3e, +0xbc3, 0xae3, 0xbc3, 0xae3, 0xbc4, 0xaeb, 0xbc4, 0xaeb, 0xc66, 0xb94, 0xc66, +0xb94, 0xc66, 0xb94, 0xce5, 0xc19, 0xce5, 0xc19, 0xc24, 0xb5e, 0xc24, 0xb5e, +0xb2f, 0xa6f, 0xb2f, 0xa6f, 0x995, 0x8d9, 0x995, 0x8d9, 0x998, 0x8e0, 0x998, +0x8e0, 0x976, 0x8c2, 0x976, 0x8c2, 0x976, 0x8c2, 0x844, 0x795, 0x844, 0x795, +0x6e2, 0x639, 0x6e2, 0x639, 0x52c, 0x48b, 0x52c, 0x48b, 0x434, 0x39c, 0x434, +0x39c, 0x23e, 0x1b2, 0x23e, 0x1b2, 0x1ac, 0x12e, 0x1ac, 0x12e, 0x1ac, 0x12e, +0x10b, 0x9f, 0x10b, 0x9f, 0xff82, 0xff2a, 0xff82, 0xff2a, 0xff6e, 0xff2b, 0xff6e, +0xff2b, 0xfe9b, 0xfe6f, 0xfe9b, 0xfe6f, 0xfe13, 0xfdfe, 0xfe13, 0xfdfe, 0xfe13, 0xfdfe, +0xfd91, 0xfd93, 0xfd91, 0xfd93, 0xfd3c, 0xfd52, 0xfd3c, 0xfd52, 0xfe4c, 0xfe73, 0xfe4c, +0xfe73, 0xfe03, 0xfe36, 0xfe03, 0xfe36, 0xfe29, 0xfe63, 0xfe29, 0xfe63, 0xff69, 0xffa1, +0xff69, 0xffa1, 0xff69, 0xffa1, 0xfebd, 0xfeec, 0xfebd, 0xfeec, 0xfe02, 0xfe1f, 0xfe02, +0xfe1f, 0xfdd5, 0xfdd6, 0xfdd5, 0xfdd6, 0xfdea, 0xfdc6, 0xfdea, 0xfdc6, 0xff2e, 0xfedb, +0xff2e, 0xfedb, 0x1d, 0xff92, 0x1d, 0xff92, 0x1d, 0xff92, 0x2b, 0xff61, 0x2b, +0xff61, 0x132, 0x21, 0x132, 0x21, 0x345, 0x1ea, 0x345, 0x1ea, 0x4fc, 0x353, +0x4fc, 0x353, 0x6cd, 0x4d5, 0x6cd, 0x4d5, 0x6cd, 0x4d5, 0x9b1, 0x76a, 0x9b1, +0x76a, 0xc97, 0xa05, 0xc97, 0xa05, 0xe83, 0xbaa, 0xe83, 0xbaa, 0x10f7, 0xdde, +0x10f7, 0xdde, 0x1345, 0xff5, 0x1345, 0xff5, 0x1499, 0x111b, 0x1499, 0x111b, 0x1499, +0x111b, 0x164d, 0x12ac, 0x164d, 0x12ac, 0x1870, 0x14b6, 0x1870, 0x14b6, 0x19c0, 0x15f9, +0x19c0, 0x15f9, 0x19e2, 0x1617, 0x19e2, 0x1617, 0x1960, 0x159a, 0x1960, 0x159a, 0x1868, +0x14b1, 0x1868, 0x14b1, 0x1868, 0x14b1, 0x17df, 0x143d, 0x17df, 0x143d, 0x1787, 0x13ff, +0x1787, 0x13ff, 0x1708, 0x139e, 0x1708, 0x139e, 0x15f8, 0x12ad, 0x15f8, 0x12ad, 0x1598, +0x126c, 0x1598, 0x126c, 0x1598, 0x126c, 0x15f2, 0x12e3, 0x15f2, 0x12e3, 0x15e2, 0x12ed, +0x15e2, 0x12ed, 0x1523, 0x1242, 0x1523, 0x1242, 0x1372, 0x10a0, 0x1372, 0x10a0, 0x1416, +0x114c, 0x1416, 0x114c, 0x14f0, 0x1227, 0x14f0, 0x1227, 0x14f0, 0x1227, 0x1570, 0x12a2, +0x1570, 0x12a2, 0x15f2, 0x131a, 0x15f2, 0x131a, 0x1598, 0x12af, 0x1598, 0x12af, 0x1658, +0x135c, 0x1658, 0x135c, 0x1695, 0x1382, 0x1695, 0x1382, 0x1695, 0x1382, 0x17bc, 0x1492, +0x17bc, 0x1492, 0x17cf, 0x148f, 0x17cf, 0x148f, 0x17bd, 0x1468, 0x17bd, 0x1468, 0x1903, +0x159e, 0x1903, 0x159e, 0x183c, 0x14cd, 0x183c, 0x14cd, 0x1808, 0x1495, 0x1808, 0x1495, +0x1808, 0x1495, 0x16fb, 0x138c, 0x16fb, 0x138c, 0x15a7, 0x1247, 0x15a7, 0x1247, 0x1570, +0x1227, 0x1570, 0x1227, 0x144c, 0x1125, 0x144c, 0x1125, 0x13e8, 0x10ec, 0x13e8, 0x10ec, +0x12d2, 0x100c, 0x12d2, 0x100c, 0x12d2, 0x100c, 0x10f2, 0xe6b, 0x10f2, 0xe6b, 0x1007, +0xdc7, 0x1007, 0xdc7, 0xf3f, 0xd4f, 0xf3f, 0xd4f, 0xec2, 0xd28, 0xec2, 0xd28, +0xd8f, 0xc50, 0xd8f, 0xc50, 0xd8f, 0xc50, 0xb02, 0xa23, 0xb02, 0xa23, 0x84c, +0x7cf, 0x84c, 0x7cf, 0x59e, 0x585, 0x59e, 0x585, 0x294, 0x2e1, 0x294, 0x2e1, +0x67, 0x117, 0x67, 0x117, 0xfefe, 0xf, 0xfefe, 0xf, 0xfefe, 0xf, 0xfc72, +0xfde1, 0xfc72, 0xfde1, 0xf9c2, 0xfb8a, 0xf9c2, 0xfb8a, 0xf7dd, 0xf9fa, 0xf7dd, 0xf9fa, +0xf599, 0xf803, 0xf599, 0xf803, 0xf1b2, 0xf462, 0xf1b2, 0xf462, 0xef1a, 0xf209, 0xef1a, +0xf209, 0xef1a, 0xf209, 0xedd0, 0xf0f5, 0xedd0, 0xf0f5, 0xeb3a, 0xee8c, 0xeb3a, 0xee8c, +0xea37, 0xedac, 0xea37, 0xedac, 0xe91c, 0xecaa, 0xe91c, 0xecaa, 0xe720, 0xeabd, 0xe720, +0xeabd, 0xe720, 0xeabd, 0xe5bb, 0xe95c, 0xe5bb, 0xe95c, 0xe4d0, 0xe86b, 0xe4d0, 0xe86b, +0xe4a9, 0xe833, 0xe4a9, 0xe833, 0xe435, 0xe7a3, 0xe435, 0xe7a3, 0xe4f3, 0xe83c, 0xe4f3, +0xe83c, 0xe679, 0xe994, 0xe679, 0xe994, 0xe679, 0xe994, 0xe848, 0xeb2c, 0xe848, 0xeb2c, +0xeaeb, 0xed91, 0xeaeb, 0xed91, 0xec93, 0xeef6, 0xec93, 0xeef6, 0xed65, 0xef7f, 0xed65, +0xef7f, 0xef49, 0xf118, 0xef49, 0xf118, 0xf24c, 0xf3ce, 0xf24c, 0xf3ce, 0xf24c, 0xf3ce, +0xf4bd, 0xf5f3, 0xf4bd, 0xf5f3, 0xf583, 0xf66d, 0xf583, 0xf66d, 0xf68e, 0xf731, 0xf68e, +0xf731, 0xf88d, 0xf8ed, 0xf88d, 0xf8ed, 0xf922, 0xf946, 0xf922, 0xf946, 0xf922, 0xf946, +0xf997, 0xf986, 0xf997, 0xf986, 0xfa14, 0xf9d5, 0xfa14, 0xf9d5, 0xfa99, 0xfa36, 0xfa99, +0xfa36, 0xfb6a, 0xfaec, 0xfb6a, 0xfaec, 0xfbf7, 0xfb67, 0xfbf7, 0xfb67, 0xfca8, 0xfc0e, +0xfca8, 0xfc0e, 0xfca8, 0xfc0e, 0xfc08, 0xfb6d, 0xfc08, 0xfb6d, 0xfce2, 0xfc4e, 0xfce2, +0xfc4e, 0xfe6f, 0xfde8, 0xfe6f, 0xfde8, 0xfe63, 0xfdef, 0xfe63, 0xfdef, 0xffce, 0xff72, +0xffce, 0xff72, 0x100, 0xbf, 0x100, 0xbf, 0x100, 0xbf, 0x119, 0xf5, 0x119, +0xf5, 0x18b, 0x186, 0x18b, 0x186, 0x21c, 0x236, 0x21c, 0x236, 0x30a, 0x344, +0x30a, 0x344, 0x383, 0x3dc, 0x383, 0x3dc, 0x383, 0x3dc, 0x45b, 0x4d3, 0x45b, +0x4d3, 0x571, 0x608, 0x571, 0x608, 0x53d, 0x5f4, 0x53d, 0x5f4, 0x524, 0x5fb, +0x524, 0x5fb, 0x488, 0x582, 0x488, 0x582, 0x304, 0x424, 0x304, 0x424, 0x304, +0x424, 0x194, 0x2df, 0x194, 0x2df, 0x54, 0x1ce, 0x54, 0x1ce, 0xff7a, 0x12a, +0xff7a, 0x12a, 0xfdf6, 0xffe2, 0xfdf6, 0xffe2, 0xfb5f, 0xfd8f, 0xfb5f, 0xfd8f, 0xf8c3, +0xfb3f, 0xf8c3, 0xfb3f, 0xf8c3, 0xfb3f, 0xf60e, 0xf8dd, 0xf60e, 0xf8dd, 0xf3ba, 0xf6e3, +0xf3ba, 0xf6e3, 0xf0c7, 0xf450, 0xf0c7, 0xf450, 0xec7c, 0xf068, 0xec7c, 0xf068, 0xeace, +0xef20, 0xeace, 0xef20, 0xeace, 0xef20, 0xe896, 0xed4f, 0xe896, 0xed4f, 0xe4c1, 0xe9df, +0xe4c1, 0xe9df, 0xe372, 0xe8f0, 0xe372, 0xe8f0, 0xe1fe, 0xe7d5, 0xe1fe, 0xe7d5, 0xdfae, +0xe5d5, 0xdfae, 0xe5d5, 0xdda5, 0xe410, 0xdda5, 0xe410, 0xdda5, 0xe410, 0xdcfe, 0xe39e, +0xdcfe, 0xe39e, 0xdb99, 0xe25e, 0xdb99, 0xe25e, 0xd96c, 0xe045, 0xd96c, 0xe045, 0xd8c7, +0xdfa2, 0xd8c7, 0xdfa2, 0xd7c5, 0xde8f, 0xd7c5, 0xde8f, 0xd76f, 0xde16, 0xd76f, 0xde16, +0xd76f, 0xde16, 0xd7d4, 0xde47, 0xd7d4, 0xde47, 0xd7f3, 0xde21, 0xd7f3, 0xde21, 0xd7b5, +0xdd92, 0xd7b5, 0xdd92, 0xd83b, 0xddba, 0xd83b, 0xddba, 0xda6d, 0xdf85, 0xda6d, 0xdf85, +0xda6d, 0xdf85, 0xdc3c, 0xe0e6, 0xdc3c, 0xe0e6, 0xdd8d, 0xe1c8, 0xdd8d, 0xe1c8, 0xe02e, +0xe3f9, 0xe02e, 0xe3f9, 0xe38c, 0xe6ea, 0xe38c, 0xe6ea, 0xe6a8, 0xe99e, 0xe6a8, 0xe99e, +0xe98f, 0xec25, 0xe98f, 0xec25, 0xe98f, 0xec25, 0xeb11, 0xed50, 0xeb11, 0xed50, 0xec7b, +0xee6e, 0xec7b, 0xee6e, 0xee5a, 0xf00c, 0xee5a, 0xf00c, 0xf056, 0xf1d2, 0xf056, 0xf1d2, +0xf1e7, 0xf338, 0xf1e7, 0xf338, 0xf1eb, 0xf31a, 0xf1eb, 0xf31a, 0xf1eb, 0xf31a, 0xf33e, +0xf454, 0xf33e, 0xf454, 0xf3e1, 0xf4e4, 0xf3e1, 0xf4e4, 0xf2c1, 0xf3b5, 0xf2c1, 0xf3b5, +0xf2ee, 0xf3d4, 0xf2ee, 0xf3d4, 0xf2b8, 0xf38f, 0xf2b8, 0xf38f, 0xf2b8, 0xf38f, 0xf30d, +0xf3d2, 0xf30d, 0xf3d2, 0xf408, 0xf4b4, 0xf408, 0xf4b4, 0xf473, 0xf4ff, 0xf473, 0xf4ff, +0xf4e7, 0xf54b, 0xf4e7, 0xf54b, 0xf4b5, 0xf4e5, 0xf4b5, 0xf4e5, 0xf5ae, 0xf59f, 0xf5ae, +0xf59f, 0xf5ae, 0xf59f, 0xf697, 0xf63f, 0xf697, 0xf63f, 0xf7c7, 0xf71b, 0xf7c7, 0xf71b, +0xfb99, 0xfa8f, 0xfb99, 0xfa8f, 0xff0d, 0xfd9e, 0xff0d, 0xfd9e, 0x228, 0x4e, 0x228, +0x4e, 0x58e, 0x346, 0x58e, 0x346, 0x58e, 0x346, 0x8a4, 0x5ec, 0x8a4, 0x5ec, +0xbd5, 0x8af, 0xbd5, 0x8af, 0xe85, 0xaf6, 0xe85, 0xaf6, 0x10da, 0xce9, 0x10da, +0xce9, 0x136c, 0xf24, 0x136c, 0xf24, 0x136c, 0xf24, 0x15ba, 0x1127, 0x15ba, 0x1127, +0x1816, 0x1345, 0x1816, 0x1345, 0x194c, 0x144d, 0x194c, 0x144d, 0x18d8, 0x13ba, 0x18d8, +0x13ba, 0x19da, 0x14af, 0x19da, 0x14af, 0x1aa0, 0x1578, 0x1aa0, 0x1578, 0x1aa0, 0x1578, +0x1a94, 0x1580, 0x1a94, 0x1580, 0x1ac0, 0x15d0, 0x1ac0, 0x15d0, 0x19a2, 0x14e3, 0x19a2, +0x14e3, 0x1824, 0x13a2, 0x1824, 0x13a2, 0x179f, 0x1365, 0x179f, 0x1365, 0x179f, 0x1365, +0x17aa, 0x13c1, 0x17aa, 0x13c1, 0x160f, 0x127e, 0x160f, 0x127e, 0x14fc, 0x11c6, 0x14fc, +0x11c6, 0x14d5, 0x11fe, 0x14d5, 0x11fe, 0x12df, 0x1068, 0x12df, 0x1068, 0x1168, 0xf4f, +0x1168, 0xf4f, 0x1168, 0xf4f, 0x109f, 0xee3, 0x109f, 0xee3, 0xed8, 0xd75, 0xed8, +0xd75, 0xd0c, 0xbff, 0xd0c, 0xbff, 0xc1a, 0xb5d, 0xc1a, 0xb5d, 0xbc2, 0xb52, +0xbc2, 0xb52, 0xa77, 0xa4c, 0xa77, 0xa4c, 0xa77, 0xa4c, 0x7e2, 0x7f9, 0x7e2, +0x7f9, 0x674, 0x6c7, 0x674, 0x6c7, 0x566, 0x5f0, 0x566, 0x5f0, 0x474, 0x531, +0x474, 0x531, 0x35d, 0x449, 0x35d, 0x449, 0x35d, 0x449, 0x145, 0x25a, 0x145, +0x25a, 0x48, 0x183, 0x48, 0x183, 0xfef2, 0x4f, 0xfef2, 0x4f, 0xfdd2, 0xff4c, +0xfdd2, 0xff4c, 0xfc8b, 0xfe1e, 0xfc8b, 0xfe1e, 0xfa89, 0xfc32, 0xfa89, 0xfc32, 0xfa89, +0xfc32, 0xfa2f, 0xfbe7, 0xfa2f, 0xfbe7, 0xf95c, 0xfb20, 0xf95c, 0xfb20, 0xf940, 0xfb09, +0xf940, 0xfb09, 0xf969, 0xfb32, 0xf969, 0xfb32, 0xf7fe, 0xf9c1, 0xf7fe, 0xf9c1, 0xf7e4, +0xf99a, 0xf7e4, 0xf99a, 0xf7e4, 0xf99a, 0xf83d, 0xf9e1, 0xf83d, 0xf9e1, 0xf892, 0xfa1e, +0xf892, 0xfa1e, 0xf8f7, 0xfa65, 0xf8f7, 0xfa65, 0xf934, 0xfa7f, 0xf934, 0xfa7f, 0xfa50, +0xfb74, 0xfa50, 0xfb74, 0xfa50, 0xfb74, 0xfa8b, 0xfb83, 0xfa8b, 0xfb83, 0xfadf, 0xfba8, +0xfadf, 0xfba8, 0xfb8f, 0xfc27, 0xfb8f, 0xfc27, 0xfbca, 0xfc2f, 0xfbca, 0xfc2f, 0xfd1f, +0xfd51, 0xfd1f, 0xfd51, 0xfe69, 0xfe69, 0xfe69, 0xfe69, 0xfe69, 0xfe69, 0xfed9, 0xfea7, +0xfed9, 0xfea7, 0xffb6, 0xff56, 0xffb6, 0xff56, 0xe2, 0x56, 0xe2, 0x56, 0xb1, +0xfffc, 0xb1, 0xfffc, 0xa9, 0xffd0, 0xa9, 0xffd0, 0x1ed, 0xf4, 0x1ed, 0xf4, +0x1ed, 0xf4, 0x3bc, 0x2a7, 0x3bc, 0x2a7, 0x486, 0x35a, 0x486, 0x35a, 0x4b3, +0x374, 0x4b3, 0x374, 0x67f, 0x532, 0x67f, 0x532, 0x70e, 0x5b6, 0x70e, 0x5b6, +0x70e, 0x5b6, 0x78b, 0x62d, 0x78b, 0x62d, 0x8e1, 0x780, 0x8e1, 0x780, 0x954, +0x7f4, 0x954, 0x7f4, 0x993, 0x836, 0x993, 0x836, 0x9ed, 0x897, 0x9ed, 0x897, +0xaf7, 0x9ab, 0xaf7, 0x9ab, 0xaf7, 0x9ab, 0xa39, 0x8f9, 0xa39, 0x8f9, 0x955, +0x824, 0x955, 0x824, 0x95f, 0x83f, 0x95f, 0x83f, 0x86a, 0x75e, 0x86a, 0x75e, +0x8c1, 0x7cb, 0x8c1, 0x7cb, 0x891, 0x7b4, 0x891, 0x7b4, 0x891, 0x7b4, 0x6b8, +0x5f5, 0x6b8, 0x5f5, 0x565, 0x4bf, 0x565, 0x4bf, 0x3d3, 0x34b, 0x3d3, 0x34b, +0x257, 0x1ef, 0x257, 0x1ef, 0xab, 0x63, 0xab, 0x63, 0xab, 0x63, 0xff14, +0xfeec, 0xff14, 0xfeec, 0xfe58, 0xfe4f, 0xfe58, 0xfe4f, 0xfe2a, 0xfe3e, 0xfe2a, 0xfe3e, +0xff08, 0xff37, 0xff08, 0xff37, 0xfec8, 0xff0f, 0xfec8, 0xff0f, 0xfe84, 0xfedd, 0xfe84, +0xfedd, 0xfe84, 0xfedd, 0xfe41, 0xfea7, 0xfe41, 0xfea7, 0xfd6f, 0xfddc, 0xfd6f, 0xfddc, +0xfdfe, 0xfe6a, 0xfdfe, 0xfe6a, 0xfd57, 0xfdba, 0xfd57, 0xfdba, 0xfd42, 0xfd95, 0xfd42, +0xfd95, 0xfe59, 0xfe92, 0xfe59, 0xfe92, 0xfe59, 0xfe92, 0xfe47, 0xfe5f, 0xfe47, 0xfe5f, +0xfede, 0xfecd, 0xfede, 0xfecd, 0xff0d, 0xfecc, 0xff0d, 0xfecc, 0xfec8, 0xfe51, 0xfec8, +0xfe51, 0xffa4, 0xfef2, 0xffa4, 0xfef2, 0xffa4, 0xfef2, 0xfffe, 0xff0e, 0xfffe, 0xff0e, +0xbf, 0xff8d, 0xbf, 0xff8d, 0x1e0, 0x6d, 0x1e0, 0x6d, 0x277, 0xc3, 0x277, +0xc3, 0x3eb, 0x1f9, 0x3eb, 0x1f9, 0x56a, 0x33e, 0x56a, 0x33e, 0x56a, 0x33e, +0x855, 0x5f4, 0x855, 0x5f4, 0xb8c, 0x8fd, 0xb8c, 0x8fd, 0xd47, 0xa90, 0xd47, +0xa90, 0xfda, 0xd05, 0xfda, 0xd05, 0x1205, 0xf19, 0x1205, 0xf19, 0x1368, 0x106c, +0x1368, 0x106c, 0x1368, 0x106c, 0x1579, 0x1277, 0x1579, 0x1277, 0x172d, 0x142c, 0x172d, +0x142c, 0x181c, 0x1522, 0x181c, 0x1522, 0x1871, 0x1584, 0x1871, 0x1584, 0x1863, 0x1588, +0x1863, 0x1588, 0x1863, 0x1588, 0x1894, 0x15ce, 0x1894, 0x15ce, 0x176a, 0x14ba, 0x176a, +0x14ba, 0x16a5, 0x140c, 0x16a5, 0x140c, 0x16b0, 0x142d, 0x16b0, 0x142d, 0x1596, 0x1328, +0x1596, 0x1328, 0x15c0, 0x1363, 0x15c0, 0x1363, 0x15c0, 0x1363, 0x15db, 0x138b, 0x15db, +0x138b, 0x14a8, 0x1261, 0x14a8, 0x1261, 0x1371, 0x112f, 0x1371, 0x112f, 0x1364, 0x1123, +0x1364, 0x1123, 0x13b4, 0x116f, 0x13b4, 0x116f, 0x128b, 0x103f, 0x128b, 0x103f, 0x128b, +0x103f, 0x1263, 0x100b, 0x1263, 0x100b, 0x131d, 0x10b8, 0x131d, 0x10b8, 0x12ec, 0x1078, +0x12ec, 0x1078, 0x137c, 0x10f8, 0x137c, 0x10f8, 0x1500, 0x126d, 0x1500, 0x126d, 0x1500, +0x126d, 0x1589, 0x12e9, 0x1589, 0x12e9, 0x14bd, 0x1212, 0x14bd, 0x1212, 0x14a1, 0x11ee, +0x14a1, 0x11ee, 0x15b6, 0x12ff, 0x15b6, 0x12ff, 0x15ae, 0x12f9, 0x15ae, 0x12f9, 0x151d, +0x126f, 0x151d, 0x126f, 0x151d, 0x126f, 0x14c6, 0x1226, 0x14c6, 0x1226, 0x1581, 0x12f4, +0x1581, 0x12f4, 0x1646, 0x13d3, 0x1646, 0x13d3, 0x150f, 0x12bc, 0x150f, 0x12bc, 0x152b, +0x12fe, 0x152b, 0x12fe, 0x1439, 0x1237, 0x1439, 0x1237, 0x1439, 0x1237, 0x123f, 0x106e, +0x123f, 0x106e, 0x11df, 0x1046, 0x11df, 0x1046, 0xffd, 0xe9f, 0xffd, 0xe9f, 0xef8, +0xdda, 0xef8, 0xdda, 0xea7, 0xdcd, 0xea7, 0xdcd, 0xea7, 0xdcd, 0xcc5, 0xc32, +0xcc5, 0xc32, 0xba0, 0xb57, 0xba0, 0xb57, 0x9c7, 0x9cb, 0x9c7, 0x9cb, 0x710, +0x761, 0x710, 0x761, 0x55d, 0x5fe, 0x55d, 0x5fe, 0x31a, 0x40a, 0x31a, 0x40a, +0x31a, 0x40a, 0xf7, 0x235, 0xf7, 0x235, 0xfe38, 0xffc4, 0xfe38, 0xffc4, 0xfb3e, +0xfd15, 0xfb3e, 0xfd15, 0xf92d, 0xfb4c, 0xf92d, 0xfb4c, 0xf605, 0xf868, 0xf605, 0xf868, +0xf605, 0xf868, 0xf427, 0xf6c9, 0xf427, 0xf6c9, 0xf2de, 0xf5b7, 0xf2de, 0xf5b7, 0xf0f2, +0xf3fd, 0xf0f2, 0xf3fd, 0xef97, 0xf2ca, 0xef97, 0xf2ca, 0xeda5, 0xf0f7, 0xeda5, 0xf0f7, +0xebf7, 0xef5e, 0xebf7, 0xef5e, 0xebf7, 0xef5e, 0xead7, 0xee48, 0xead7, 0xee48, 0xe90d, +0xec7e, 0xe90d, 0xec7e, 0xe722, 0xea86, 0xe722, 0xea86, 0xe635, 0xe981, 0xe635, 0xe981, +0xe6d2, 0xe9fb, 0xe6d2, 0xe9fb, 0xe80a, 0xeb04, 0xe80a, 0xeb04, 0xe80a, 0xeb04, 0xe869, +0xeb2c, 0xe869, 0xeb2c, 0xe9cb, 0xec4e, 0xe9cb, 0xec4e, 0xebaa, 0xede4, 0xebaa, 0xede4, +0xec5e, 0xee4a, 0xec5e, 0xee4a, 0xedfd, 0xef97, 0xedfd, 0xef97, 0xedfd, 0xef97, 0xf05b, +0xf1a0, 0xf05b, 0xf1a0, 0xf1cc, 0xf2bb, 0xf1cc, 0xf2bb, 0xf32e, 0xf3ca, 0xf32e, 0xf3ca, +0xf54b, 0xf596, 0xf54b, 0xf596, 0xf69d, 0xf69b, 0xf69d, 0xf69b, 0xf713, 0xf6cb, 0xf713, +0xf6cb, 0xf713, 0xf6cb, 0xf7a4, 0xf71d, 0xf7a4, 0xf71d, 0xf7fd, 0xf73e, 0xf7fd, 0xf73e, +0xf83b, 0xf74e, 0xf83b, 0xf74e, 0xf957, 0xf845, 0xf957, 0xf845, 0xfa39, 0xf90b, 0xfa39, +0xf90b, 0xfa11, 0xf8d1, 0xfa11, 0xf8d1, 0xfa11, 0xf8d1, 0xf993, 0xf849, 0xf993, 0xf849, +0xfa9d, 0xf950, 0xfa9d, 0xf950, 0xfc71, 0xfb28, 0xfc71, 0xfb28, 0xfcbc, 0xfb7e, 0xfcbc, +0xfb7e, 0xfdee, 0xfcbf, 0xfdee, 0xfcbf, 0xfdee, 0xfcbf, 0xfe9e, 0xfd82, 0xfe9e, 0xfd82, +0xffdb, 0xfed5, 0xffdb, 0xfed5, 0x1e4, 0xf6, 0x1e4, 0xf6, 0x2b3, 0x1de, 0x2b3, +0x1de, 0x459, 0x39e, 0x459, 0x39e, 0x461, 0x3c1, 0x461, 0x3c1, 0x461, 0x3c1, +0x518, 0x494, 0x518, 0x494, 0x63d, 0x5d6, 0x63d, 0x5d6, 0x517, 0x4ce, 0x517, +0x4ce, 0x518, 0x4f0, 0x518, 0x4f0, 0x60d, 0x60a, 0x60d, 0x60a, 0x631, 0x656, +0x631, 0x656, 0x631, 0x656, 0x567, 0x5b8, 0x567, 0x5b8, 0x411, 0x495, 0x411, +0x495, 0x2e5, 0x3a2, 0x2e5, 0x3a2, 0x21b, 0x318, 0x21b, 0x318, 0x7a, 0x1bd, +0x7a, 0x1bd, 0x7a, 0x1bd, 0xfdfa, 0xff8c, 0xfdfa, 0xff8c, 0xfae9, 0xfcd0, 0xfae9, +0xfcd0, 0xf800, 0xfa42, 0xf800, 0xfa42, 0xf537, 0xf7da, 0xf537, 0xf7da, 0xf22b, 0xf531, +0xf22b, 0xf531, 0xf021, 0xf38d, 0xf021, 0xf38d, 0xf021, 0xf38d, 0xedd4, 0xf1a4, 0xedd4, +0xf1a4, 0xeba0, 0xefd4, 0xeba0, 0xefd4, 0xea39, 0xeecb, 0xea39, 0xeecb, 0xe7bc, 0xeca5, +0xe7bc, 0xeca5, 0xe566, 0xea9e, 0xe566, 0xea9e, 0xe3af, 0xe92a, 0xe3af, 0xe92a, 0xe3af, +0xe92a, 0xe198, 0xe749, 0xe198, 0xe749, 0xdfa6, 0xe57e, 0xdfa6, 0xe57e, 0xdd60, 0xe350, +0xdd60, 0xe350, 0xdc40, 0xe238, 0xdc40, 0xe238, 0xdb1d, 0xe10c, 0xdb1d, 0xe10c, 0xdb1d, +0xe10c, 0xd916, 0xdeeb, 0xd916, 0xdeeb, 0xd8d0, 0xde7c, 0xd8d0, 0xde7c, 0xd8e2, 0xde56, +0xd8e2, 0xde56, 0xd8fe, 0xde2e, 0xd8fe, 0xde2e, 0xd9ba, 0xde9b, 0xd9ba, 0xde9b, 0xda69, +0xdef3, 0xda69, 0xdef3, 0xda69, 0xdef3, 0xdab8, 0xdee5, 0xdab8, 0xdee5, 0xdc2b, 0xdff8, +0xdc2b, 0xdff8, 0xded8, 0xe245, 0xded8, 0xe245, 0xe09d, 0xe3ab, 0xe09d, 0xe3ab, 0xe23f, +0xe4f3, 0xe23f, 0xe4f3, 0xe493, 0xe6f4, 0xe493, 0xe6f4, 0xe493, 0xe6f4, 0xe677, 0xe88d, +0xe677, 0xe88d, 0xe7dd, 0xe9b1, 0xe7dd, 0xe9b1, 0xea2c, 0xebc9, 0xea2c, 0xebc9, 0xec63, +0xedd5, 0xec63, 0xedd5, 0xee16, 0xef66, 0xee16, 0xef66, 0xee16, 0xef66, 0xeeaa, 0xefe3, +0xeeaa, 0xefe3, 0xef8a, 0xf0b4, 0xef8a, 0xf0b4, 0xf117, 0xf23a, 0xf117, 0xf23a, 0xf13f, +0xf260, 0xf13f, 0xf260, 0xf172, 0xf295, 0xf172, 0xf295, 0xf176, 0xf29d, 0xf176, 0xf29d, +0xf176, 0xf29d, 0xf2cf, 0xf3f8, 0xf2cf, 0xf3f8, 0xf45f, 0xf588, 0xf45f, 0xf588, 0xf4d7, +0xf5fb, 0xf4d7, 0xf5fb, 0xf530, 0xf647, 0xf530, 0xf647, 0xf53e, 0xf641, 0xf53e, 0xf641, +0xf65d, 0xf741, 0xf65d, 0xf741, 0xf65d, 0xf741, 0xf68d, 0xf748, 0xf68d, 0xf748, 0xf6ea, +0xf771, 0xf6ea, 0xf771, 0xf97b, 0xf9c3, 0xf97b, 0xf9c3, 0xfc3e, 0xfc3d, 0xfc3e, 0xfc3d, +0xff00, 0xfead, 0xff00, 0xfead, 0xff00, 0xfead, 0x285, 0x1d8, 0x285, 0x1d8, 0x5c4, +0x4b7, 0x5c4, 0x4b7, 0x868, 0x6f8, 0x868, 0x6f8, 0xaf6, 0x920, 0xaf6, 0x920, +0xdd5, 0xb9a, 0xdd5, 0xb9a, 0x1036, 0xd99, 0x1036, 0xd99, 0x1036, 0xd99, 0x1109, +0xe0e, 0x1109, 0xe0e, 0x133e, 0xfee, 0x133e, 0xfee, 0x15cb, 0x122f, 0x15cb, 0x122f, +0x1722, 0x1346, 0x1722, 0x1346, 0x18fb, 0x14ec, 0x18fb, 0x14ec, 0x19dd, 0x15a8, 0x19dd, +0x15a8, 0x19dd, 0x15a8, 0x1a98, 0x164d, 0x1a98, 0x164d, 0x1b37, 0x16e4, 0x1b37, 0x16e4, +0x1a61, 0x1616, 0x1a61, 0x1616, 0x1a25, 0x15f0, 0x1a25, 0x15f0, 0x197d, 0x156e, 0x197d, +0x156e, 0x197d, 0x156e, 0x185f, 0x1481, 0x185f, 0x1481, 0x17ca, 0x1429, 0x17ca, 0x1429, +0x16b4, 0x135a, 0x16b4, 0x135a, 0x169c, 0x1392, 0x169c, 0x1392, 0x156c, 0x12b8, 0x156c, +0x12b8, 0x12fa, 0x10a1, 0x12fa, 0x10a1, 0x12fa, 0x10a1, 0x121f, 0x1024, 0x121f, 0x1024, +0x113c, 0xf9f, 0x113c, 0xf9f, 0xf44, 0xe05, 0xf44, 0xe05, 0xdc3, 0xce1, 0xdc3, +0xce1, 0xc59, 0xbce, 0xc59, 0xbce, 0x9eb, 0x9b4, 0x9eb, 0x9b4, 0x9eb, 0x9b4, +0x7e5, 0x7fd, 0x7e5, 0x7fd, 0x679, 0x6d8, 0x679, 0x6d8, 0x548, 0x5e8, 0x548, +0x5e8, 0x326, 0x3ff, 0x326, 0x3ff, 0x16f, 0x27a, 0x16f, 0x27a, 0x16f, 0x27a, +0x1b, 0x152, 0x1b, 0x152, 0xfeca, 0x25, 0xfeca, 0x25, 0xfea9, 0x22, 0xfea9, +0x22, 0xfd28, 0xfeb9, 0xfd28, 0xfeb9, 0xfb60, 0xfd03, 0xfb60, 0xfd03, 0xf955, 0xfb06, +0xf955, 0xfb06, 0xf955, 0xfb06, 0xf88f, 0xfa49, 0xf88f, 0xfa49, 0xf8b2, 0xfa71, 0xf8b2, +0xfa71, 0xf7b7, 0xf979, 0xf7b7, 0xf979, 0xf750, 0xf910, 0xf750, 0xf910, 0xf6e8, 0xf8a5, +0xf6e8, 0xf8a5, 0xf6e8, 0xf8a5, 0xf7b3, 0xf96a, 0xf7b3, 0xf96a, 0xf83d, 0xf9ec, 0xf83d, +0xf9ec, 0xf8c7, 0xfa6c, 0xf8c7, 0xfa6c, 0xf8f7, 0xfa90, 0xf8f7, 0xfa90, 0xf8a0, 0xfa29, +0xf8a0, 0xfa29, 0xfa4e, 0xfbc6, 0xfa4e, 0xfbc6, 0xfa4e, 0xfbc6, 0xfab3, 0xfc17, 0xfab3, +0xfc17, 0xfaa6, 0xfbf3, 0xfaa6, 0xfbf3, 0xfb88, 0xfcbb, 0xfb88, 0xfcbb, 0xfc0c, 0xfd22, +0xfc0c, 0xfd22, 0xfdc9, 0xfec0, 0xfdc9, 0xfec0, 0xff01, 0xffd4, 0xff01, 0xffd4, 0xff01, +0xffd4, 0xfedd, 0xff8a, 0xfedd, 0xff8a, 0xff90, 0x13, 0xff90, 0x13, 0xa2, 0xfa, +0xa2, 0xfa, 0x12d, 0x158, 0x12d, 0x158, 0x12c, 0x128, 0x12c, 0x128, 0x12c, +0x128, 0x1d1, 0x19e, 0x1d1, 0x19e, 0x342, 0x2e0, 0x342, 0x2e0, 0x3bd, 0x32d, +0x3bd, 0x32d, 0x3ef, 0x333, 0x3ef, 0x333, 0x5c4, 0x4e0, 0x5c4, 0x4e0, 0x72f, +0x627, 0x72f, 0x627, 0x72f, 0x627, 0x7e1, 0x6b9, 0x7e1, 0x6b9, 0x9ae, 0x86d, +0x9ae, 0x86d, 0xa77, 0x924, 0xa77, 0x924, 0xaf8, 0x999, 0xaf8, 0x999, 0xaea, +0x988, 0xaea, 0x988, 0xaea, 0x98c, 0xaea, 0x98c, 0xaea, 0x98c, 0xb4f, 0x9fe, +0xb4f, 0x9fe, 0xacb, 0x98f, 0xacb, 0x98f, 0xb75, 0xa55, 0xb75, 0xa55, 0xaa2, +0x9a6, 0xaa2, 0x9a6, 0x8e0, 0x80d, 0x8e0, 0x80d, 0x8e0, 0x80d, 0x86c, 0x7c8, +0x86c, 0x7c8, 0x79f, 0x72e, 0x79f, 0x72e, 0x60d, 0x5d3, 0x60d, 0x5d3, 0x43c, +0x43a, 0x43c, 0x43a, 0x22a, 0x260, 0x22a, 0x260, 0xff9d, 0xa, 0xff9d, 0xa, +0xff9d, 0xa, 0xfdf3, 0xfe94, 0xfdf3, 0xfe94, 0xfd67, 0xfe39, 0xfd67, 0xfe39, 0xfca7, +0xfda4, 0xfca7, 0xfda4, 0xfbaf, 0xfcd1, 0xfbaf, 0xfcd1, 0xfbc0, 0xfd00, 0xfbc0, 0xfd00, +0xfb2e, 0xfc83, 0xfb2e, 0xfc83, 0xfb2e, 0xfc83, 0xfa8f, 0xfbf1, 0xfa8f, 0xfbf1, 0xfa85, +0xfbeb, 0xfa85, 0xfbeb, 0xfa41, 0xfba3, 0xfa41, 0xfba3, 0xf9b7, 0xfb0a, 0xf9b7, 0xfb0a, +0xf897, 0xf9d4, 0xf897, 0xf9d4, 0xf897, 0xf9d4, 0xf960, 0xfa7e, 0xf960, 0xfa7e, 0xfa42, +0xfb3a, 0xfa42, 0xfb3a, 0xfa46, 0xfb10, 0xfa46, 0xfb10, 0xfa20, 0xfab8, 0xfa20, 0xfab8, +0xfad2, 0xfb32, 0xfad2, 0xfb32, 0xfcc7, 0xfceb, 0xfcc7, 0xfceb, 0xfcc7, 0xfceb, 0xfdc7, +0xfdac, 0xfdc7, 0xfdac, 0xff1d, 0xfec1, 0xff1d, 0xfec1, 0xffa8, 0xff0b, 0xffa8, 0xff0b, +0x50, 0xff70, 0x50, 0xff70, 0x266, 0x146, 0x266, 0x146, 0x38a, 0x22c, 0x38a, +0x22c, 0x38a, 0x22c, 0x559, 0x3be, 0x559, 0x3be, 0x7fc, 0x629, 0x7fc, 0x629, +0xa18, 0x80f, 0xa18, 0x80f, 0xc90, 0xa56, 0xc90, 0xa56, 0xf05, 0xc9d, 0xf05, +0xc9d, 0xf05, 0xc9d, 0x1103, 0xe73, 0x1103, 0xe73, 0x12d8, 0x1024, 0x12d8, 0x1024, +0x1466, 0x1193, 0x1466, 0x1193, 0x1585, 0x1297, 0x1585, 0x1297, 0x1682, 0x137d, 0x1682, +0x137d, 0x170b, 0x13f3, 0x170b, 0x13f3, 0x170b, 0x13f3, 0x1743, 0x141c, 0x1743, 0x141c, +0x1797, 0x1465, 0x1797, 0x1465, 0x172f, 0x13f5, 0x172f, 0x13f5, 0x16c9, 0x138a, 0x16c9, +0x138a, 0x1671, 0x132f, 0x1671, 0x132f, 0x171f, 0x13db, 0x171f, 0x13db, 0x171f, 0x13db, +0x173b, 0x13f8, 0x173b, 0x13f8, 0x15b1, 0x126f, 0x15b1, 0x126f, 0x1532, 0x11f2, 0x1532, +0x11f2, 0x14ce, 0x1190, 0x14ce, 0x1190, 0x14c8, 0x118d, 0x14c8, 0x118d, 0x14c8, 0x118d, +0x1337, 0xffc, 0x1337, 0xffc, 0x127b, 0xf41, 0x127b, 0xf41, 0x13c1, 0x1087, 0x13c1, +0x1087, 0x12df, 0xfa3, 0x12df, 0xfa3, 0x12cf, 0xf90, 0x12cf, 0xf90, 0x13e8, 0x10a5, +0x13e8, 0x10a5, 0x13e8, 0x10a5, 0x146f, 0x1126, 0x146f, 0x1126, 0x140a, 0x10bb, 0x140a, +0x10bb, 0x13d5, 0x1080, 0x13d5, 0x1080, 0x13fd, 0x10a2, 0x13fd, 0x10a2, 0x1359, 0xff8, +0x1359, 0xff8, 0x1346, 0xfe1, 0x1346, 0xfe1, 0x1346, 0xfe1, 0x13f7, 0x1091, 0x13f7, +0x1091, 0x1404, 0x109f, 0x1404, 0x109f, 0x1394, 0x1035, 0x1394, 0x1035, 0x138b, 0x1037, +0x138b, 0x1037, 0x12dd, 0xf9a, 0x12dd, 0xf9a, 0x12dd, 0xf9a, 0x1239, 0xf0d, 0x1239, +0xf0d, 0x1198, 0xe8c, 0x1198, 0xe8c, 0x1090, 0xdab, 0x1090, 0xdab, 0xeef, 0xc3b, +0xeef, 0xc3b, 0xd67, 0xaec, 0xd67, 0xaec, 0xd22, 0xae9, 0xd22, 0xae9, 0xd22, +0xae9, 0xc5e, 0xa70, 0xc5e, 0xa70, 0xb04, 0x969, 0xb04, 0x969, 0x962, 0x821, +0x962, 0x821, 0x871, 0x792, 0x871, 0x792, 0x790, 0x717, 0x790, 0x717, 0x614, +0x606, 0x614, 0x606, 0x614, 0x606, 0x4d3, 0x532, 0x4d3, 0x532, 0x1cf, 0x29a, +0x1cf, 0x29a, 0xfeca, 0x1, 0xfeca, 0x1, 0xfcef, 0xfe8f, 0xfcef, 0xfe8f, 0xf9df, +0xfbe1, 0xf9df, 0xfbe1, 0xf9df, 0xfbe1, 0xf724, 0xf982, 0xf724, 0xf982, 0xf523, 0xf7d5, +0xf523, 0xf7d5, 0xf388, 0xf683, 0xf388, 0xf683, 0xf2c1, 0xf5f9, 0xf2c1, 0xf5f9, 0xf1a7, +0xf50f, 0xf1a7, 0xf50f, 0xf00b, 0xf396, 0xf00b, 0xf396, 0xf00b, 0xf396, 0xed81, 0xf121, +0xed81, 0xf121, 0xeb73, 0xef19, 0xeb73, 0xef19, 0xe9d8, 0xed76, 0xe9d8, 0xed76, 0xe81f, +0xeba9, 0xe81f, 0xeba9, 0xe7ca, 0xeb33, 0xe7ca, 0xeb33, 0xe872, 0xebad, 0xe872, 0xebad, +0xe872, 0xebad, 0xe91c, 0xec21, 0xe91c, 0xec21, 0xe9e8, 0xecae, 0xe9e8, 0xecae, 0xeb86, +0xee06, 0xeb86, 0xee06, 0xed1e, 0xef53, 0xed1e, 0xef53, 0xeed9, 0xf0bf, 0xeed9, 0xf0bf, +0xeed9, 0xf0bf, 0xefeb, 0xf182, 0xefeb, 0xf182, 0xf1b8, 0xf2ff, 0xf1b8, 0xf2ff, 0xf3de, +0xf4d8, 0xf3de, 0xf4d8, 0xf4d7, 0xf586, 0xf4d7, 0xf586, 0xf728, 0xf791, 0xf728, 0xf791, +0xf83f, 0xf866, 0xf83f, 0xf866, 0xf83f, 0xf866, 0xf936, 0xf921, 0xf936, 0xf921, 0xfa48, +0xf9fd, 0xfa48, 0xf9fd, 0xf9b9, 0xf93e, 0xf9b9, 0xf93e, 0xfa46, 0xf9a0, 0xfa46, 0xf9a0, +0xfacc, 0xfa01, 0xfacc, 0xfa01, 0xfacc, 0xfa01, 0xfa73, 0xf988, 0xfa73, 0xf988, 0xfac3, +0xf9bd, 0xfac3, 0xf9bd, 0xfbfe, 0xfadf, 0xfbfe, 0xfadf, 0xfc80, 0xfb4c, 0xfc80, 0xfb4c, +0xfc9b, 0xfb52, 0xfc9b, 0xfb52, 0xfdd5, 0xfc7b, 0xfdd5, 0xfc7b, 0xfdd5, 0xfc7b, 0xfece, +0xfd63, 0xfece, 0xfd63, 0xfedf, 0xfd65, 0xfedf, 0xfd65, 0x4a, 0xfec1, 0x4a, 0xfec1, +0x1c7, 0x30, 0x1c7, 0x30, 0x23e, 0x9b, 0x23e, 0x9b, 0x2c0, 0x113, 0x2c0, +0x113, 0x2c0, 0x113, 0x348, 0x195, 0x348, 0x195, 0x401, 0x24b, 0x401, 0x24b, +0x3b7, 0x203, 0x3b7, 0x203, 0x4c8, 0x31d, 0x4c8, 0x31d, 0x64d, 0x4b2, 0x64d, +0x4b2, 0x64d, 0x4b2, 0x667, 0x4e5, 0x667, 0x4e5, 0x638, 0x4d8, 0x638, 0x4d8, +0x513, 0x3df, 0x513, 0x3df, 0x53f, 0x442, 0x53f, 0x442, 0x537, 0x47b, 0x537, +0x47b, 0x418, 0x3a9, 0x418, 0x3a9, 0x418, 0x3a9, 0x2f5, 0x2dd, 0x2f5, 0x2dd, +0xb, 0x53, 0xb, 0x53, 0xfdc1, 0xfe71, 0xfdc1, 0xfe71, 0xfb80, 0xfc9f, 0xfb80, +0xfc9f, 0xf7de, 0xf971, 0xf7de, 0xf971, 0xf588, 0xf791, 0xf588, 0xf791, 0xf588, 0xf791, +0xf370, 0xf5f0, 0xf370, 0xf5f0, 0xf1a1, 0xf496, 0xf1a1, 0xf496, 0xf024, 0xf389, 0xf024, +0xf389, 0xee2b, 0xf1fa, 0xee2b, 0xf1fa, 0xebca, 0xeff9, 0xebca, 0xeff9, 0xebca, 0xeff9, +0xe8d0, 0xed55, 0xe8d0, 0xed55, 0xe716, 0xebe4, 0xe716, 0xebe4, 0xe500, 0xea08, 0xe500, +0xea08, 0xe208, 0xe73c, 0xe208, 0xe73c, 0xdffe, 0xe54c, 0xdffe, 0xe54c, 0xdeba, 0xe413, +0xdeba, 0xe413, 0xdeba, 0xe413, 0xdd39, 0xe28d, 0xdd39, 0xe28d, 0xdcb1, 0xe1f1, 0xdcb1, +0xe1f1, 0xdcf5, 0xe213, 0xdcf5, 0xe213, 0xdcab, 0xe19b, 0xdcab, 0xe19b, 0xdd80, 0xe237, +0xdd80, 0xe237, 0xdda3, 0xe219, 0xdda3, 0xe219, 0xdda3, 0xe219, 0xde1a, 0xe248, 0xde1a, +0xe248, 0xdedb, 0xe2be, 0xdedb, 0xe2be, 0xdff3, 0xe389, 0xdff3, 0xe389, 0xe1d5, 0xe51f, +0xe1d5, 0xe51f, 0xe1f5, 0xe4f6, 0xe1f5, 0xe4f6, 0xe1f5, 0xe4f6, 0xe3ed, 0xe6aa, 0xe3ed, +0xe6aa, 0xe691, 0xe910, 0xe691, 0xe910, 0xe7c2, 0xea0b, 0xe7c2, 0xea0b, 0xe951, 0xeb6c, +0xe951, 0xeb6c, 0xeb68, 0xed5e, 0xeb68, 0xed5e, 0xece8, 0xeec0, 0xece8, 0xeec0, 0xece8, +0xeec0, 0xed2c, 0xeeef, 0xed2c, 0xeeef, 0xee9c, 0xf052, 0xee9c, 0xf052, 0xefc6, 0xf175, +0xefc6, 0xf175, 0xf00e, 0xf1b9, 0xf00e, 0xf1b9, 0xf14c, 0xf2f8, 0xf14c, 0xf2f8, 0xf137, +0xf2e4, 0xf137, 0xf2e4, 0xf137, 0xf2e4, 0xf148, 0xf2f6, 0xf148, 0xf2f6, 0xf27c, 0xf428, +0xf27c, 0xf428, 0xf213, 0xf3b9, 0xf213, 0xf3b9, 0xf1f5, 0xf38f, 0xf1f5, 0xf38f, 0xf1fd, +0xf383, 0xf1fd, 0xf383, 0xf1fd, 0xf383, 0xf23f, 0xf3ab, 0xf23f, 0xf3ab, 0xf2ca, 0xf412, +0xf2ca, 0xf412, 0xf313, 0xf42f, 0xf313, 0xf42f, 0xf51a, 0xf601, 0xf51a, 0xf601, 0xf6ef, +0xf797, 0xf6ef, 0xf797, 0xf964, 0xf9c7, 0xf964, 0xf9c7, 0xf964, 0xf9c7, 0xfcbf, 0xfcd6, +0xfcbf, 0xfcd6, 0xff7f, 0xff44, 0xff7f, 0xff44, 0x2c3, 0x234, 0x2c3, 0x234, 0x569, +0x484, 0x569, 0x484, 0x82c, 0x6f0, 0x82c, 0x6f0, 0xb02, 0x974, 0xb02, 0x974, +0xb02, 0x974, 0xcb5, 0xad7, 0xcb5, 0xad7, 0xfbc, 0xd94, 0xfbc, 0xd94, 0x1292, +0x1029, 0x1292, 0x1029, 0x13f9, 0x1157, 0x13f9, 0x1157, 0x15d5, 0x1305, 0x15d5, 0x1305, +0x15d5, 0x1305, 0x1724, 0x1431, 0x1724, 0x1431, 0x188c, 0x1583, 0x188c, 0x1583, 0x196e, +0x165a, 0x196e, 0x165a, 0x1968, 0x1656, 0x1968, 0x1656, 0x1907, 0x1602, 0x1907, 0x1602, +0x1827, 0x153b, 0x1827, 0x153b, 0x1827, 0x153b, 0x17f4, 0x152b, 0x17f4, 0x152b, 0x1766, +0x14c8, 0x1766, 0x14c8, 0x15f4, 0x1389, 0x15f4, 0x1389, 0x1535, 0x1304, 0x1535, 0x1304, +0x14d1, 0x12de, 0x14d1, 0x12de, 0x138e, 0x11dd, 0x138e, 0x11dd, 0x138e, 0x11dd, 0x1336, +0x11c7, 0x1336, 0x11c7, 0x1244, 0x1119, 0x1244, 0x1119, 0x10e9, 0x1000, 0x10e9, 0x1000, +0x1025, 0xf7c, 0x1025, 0xf7c, 0xe79, 0xe0e, 0xe79, 0xe0e, 0xe79, 0xe0e, 0xcef, +0xcbd, 0xcef, 0xcbd, 0xa77, 0xa79, 0xa77, 0xa79, 0x906, 0x938, 0x906, 0x938, +0x72d, 0x788, 0x72d, 0x788, 0x481, 0x502, 0x481, 0x502, 0x3f5, 0x495, 0x3f5, +0x495, 0x3f5, 0x495, 0x2f0, 0x3ab, 0x2f0, 0x3ab, 0x1ae, 0x280, 0x1ae, 0x280, +0x2a, 0x10f, 0x2a, 0x10f, 0xfec2, 0xffb5, 0xfec2, 0xffb5, 0xfd05, 0xfe04, 0xfd05, +0xfe04, 0xfaf6, 0xfbff, 0xfaf6, 0xfbff, 0xfaf6, 0xfbff, 0xfae7, 0xfbf7, 0xfae7, 0xfbf7, +0xf972, 0xfa88, 0xf972, 0xfa88, 0xf740, 0xf859, 0xf740, 0xf859, 0xf764, 0xf87f, 0xf764, +0xf87f, 0xf6c9, 0xf7e6, 0xf6c9, 0xf7e6, 0xf6c9, 0xf7e6, 0xf62b, 0xf749, 0xf62b, 0xf749, +0xf683, 0xf7a0, 0xf683, 0xf7a0, 0xf698, 0xf7b3, 0xf698, 0xf7b3, 0xf679, 0xf790, 0xf679, +0xf790, 0xf5c5, 0xf6d7, 0xf5c5, 0xf6d7, 0xf677, 0xf781, 0xf677, 0xf781, 0xf677, 0xf781, +0xf762, 0xf862, 0xf762, 0xf862, 0xf7b6, 0xf8aa, 0xf7b6, 0xf8aa, 0xf877, 0xf95b, 0xf877, +0xf95b, 0xf95d, 0xfa2f, 0xf95d, 0xfa2f, 0xfb05, 0xfbc1, 0xfb05, 0xfbc1, 0xfb7c, 0xfc1e, +0xfb7c, 0xfc1e, 0xfb7c, 0xfc1e, 0xfbbe, 0xfc44, 0xfbbe, 0xfc44, 0xfd3e, 0xfda5, 0xfd3e, +0xfda5, 0xfdda, 0xfe1f, 0xfdda, 0xfe1f, 0xfefc, 0xff1d, 0xfefc, 0xff1d, 0xe5, 0xe0, +0xe5, 0xe0, 0xe5, 0xe0, 0x1a2, 0x177, 0x1a2, 0x177, 0x2ab, 0x259, 0x2ab, +0x259, 0x324, 0x2aa, 0x324, 0x2aa, 0x375, 0x2d5, 0x375, 0x2d5, 0x501, 0x43e, +0x501, 0x43e, 0x5ec, 0x507, 0x5ec, 0x507, 0x5ec, 0x507, 0x757, 0x654, 0x757, +0x654, 0x8ef, 0x7d3, 0x8ef, 0x7d3, 0x9c9, 0x898, 0x9c9, 0x898, 0xa53, 0x913, +0xa53, 0x913, 0xa69, 0x91f, 0xa69, 0x91f, 0xa69, 0x91f, 0xb36, 0x9e8, 0xb36, +0x9e8, 0xbe2, 0xa97, 0xbe2, 0xa97, 0xb53, 0xa11, 0xb53, 0xa11, 0xb6a, 0xa37, +0xb6a, 0xa37, 0xb94, 0xa75, 0xb94, 0xa75, 0xbc6, 0xac1, 0xbc6, 0xac1, 0xbc6, +0xac1, 0xc23, 0xb3b, 0xc23, 0xb3b, 0xa6d, 0x9a6, 0xa6d, 0x9a6, 0x939, 0x896, +0x939, 0x896, 0x7fa, 0x77e, 0x7fa, 0x77e, 0x60a, 0x5b5, 0x60a, 0x5b5, 0x42c, +0x3fd, 0x42c, 0x3fd, 0x42c, 0x3fd, 0x1de, 0x1d4, 0x1de, 0x1d4, 0x147, 0x161, +0x147, 0x161, 0xffe6, 0x20, 0xffe6, 0x20, 0xfedd, 0xff33, 0xfedd, 0xff33, 0xff4b, +0xffb8, 0xff4b, 0xffb8, 0xff4b, 0xffb8, 0xfe2b, 0xfeab, 0xfe2b, 0xfeab, 0xfcf4, 0xfd80, +0xfcf4, 0xfd80, 0xfc0d, 0xfca0, 0xfc0d, 0xfca0, 0xfb76, 0xfc09, 0xfb76, 0xfc09, 0xfa96, +0xfb22, 0xfa96, 0xfb22, 0xf98c, 0xfa0b, 0xf98c, 0xfa0b, 0xf98c, 0xfa0b, 0xfa13, 0xfa80, +0xfa13, 0xfa80, 0xf981, 0xf9d5, 0xf981, 0xf9d5, 0xf902, 0xf939, 0xf902, 0xf939, 0xfa41, +0xfa56, 0xfa41, 0xfa56, 0xfa66, 0xfa56, 0xfa66, 0xfa56, 0xfb24, 0xfaea, 0xfb24, 0xfaea, +0xfb24, 0xfaea, 0xfbe5, 0xfb80, 0xfbe5, 0xfb80, 0xfc38, 0xfba6, 0xfc38, 0xfba6, 0xfcab, +0xfbea, 0xfcab, 0xfbea, 0xfd94, 0xfca4, 0xfd94, 0xfca4, 0xffc7, 0xfea8, 0xffc7, 0xfea8, +0xffc7, 0xfea8, 0x63, 0xff16, 0x63, 0xff16, 0x19e, 0x25, 0x19e, 0x25, 0x3ca, +0x226, 0x3ca, 0x226, 0x5ad, 0x3e1, 0x5ad, 0x3e1, 0x88b, 0x698, 0x88b, 0x698, +0xaa5, 0x88f, 0xaa5, 0x88f, 0xaa5, 0x88f, 0xd3a, 0xb02, 0xd3a, 0xb02, 0xfe3, +0xd8e, 0xfe3, 0xd8e, 0x1122, 0xeb2, 0x1122, 0xeb2, 0x1386, 0x10ff, 0x1386, 0x10ff, +0x161f, 0x1382, 0x161f, 0x1382, 0x179f, 0x14f1, 0x179f, 0x14f1, 0x179f, 0x14f1, 0x1962, +0x16a4, 0x1962, 0x16a4, 0x19fe, 0x1735, 0x19fe, 0x1735, 0x1995, 0x16c3, 0x1995, 0x16c3, +0x192c, 0x1653, 0x192c, 0x1653, 0x191b, 0x163f, 0x191b, 0x163f, 0x191b, 0x163f, 0x1987, +0x16a9, 0x1987, 0x16a9, 0x1985, 0x16a8, 0x1985, 0x16a8, 0x196a, 0x1691, 0x196a, 0x1691, +0x194a, 0x1676, 0x194a, 0x1676, 0x18e8, 0x161c, 0x18e8, 0x161c, 0x181b, 0x1558, 0x181b, +0x1558, 0x181b, 0x1558, 0x16b3, 0x13fc, 0x16b3, 0x13fc, 0x156d, 0x12c2, 0x156d, 0x12c2, +0x150f, 0x1272, 0x150f, 0x1272, 0x148a, 0x11fc, 0x148a, 0x11fc, 0x1502, 0x1283, 0x1502, +0x1283, 0x156d, 0x12fd, 0x156d, 0x12fd, 0x156d, 0x12fd, 0x1431, 0x11d1, 0x1431, 0x11d1, +0x14b7, 0x1266, 0x14b7, 0x1266, 0x155f, 0x131c, 0x155f, 0x131c, 0x159b, 0x1367, 0x159b, +0x1367, 0x1570, 0x134b, 0x1570, 0x134b, 0x1570, 0x134b, 0x14b6, 0x129e, 0x14b6, 0x129e, +0x151f, 0x1314, 0x151f, 0x1314, 0x143c, 0x123e, 0x143c, 0x123e, 0x1479, 0x1289, 0x1479, +0x1289, 0x1572, 0x138f, 0x1572, 0x138f, 0x13dd, 0x1209, 0x13dd, 0x1209, 0x13dd, 0x1209, +0x1279, 0x10b6, 0x1279, 0x10b6, 0x115e, 0xfae, 0x115e, 0xfae, 0x109e, 0xf04, 0x109e, +0xf04, 0xf23, 0xda2, 0xf23, 0xda2, 0xd77, 0xc14, 0xd77, 0xc14, 0xd49, 0xc07, +0xd49, 0xc07, 0xd49, 0xc07, 0xb71, 0xa56, 0xb71, 0xa56, 0xaa7, 0x9b8, 0xaa7, +0x9b8, 0xa76, 0x9b9, 0xa76, 0x9b9, 0x887, 0x801, 0x887, 0x801, 0x71c, 0x6d1, +0x71c, 0x6d1, 0x71c, 0x6d1, 0x597, 0x58c, 0x597, 0x58c, 0x484, 0x4be, 0x484, +0x4be, 0x1f0, 0x271, 0x1f0, 0x271, 0xff4a, 0x15, 0xff4a, 0x15, 0xfd4b, 0xfe60, +0xfd4b, 0xfe60, 0xf9d7, 0xfb36, 0xf9d7, 0xfb36, 0xf9d7, 0xfb36, 0xf7a0, 0xf947, 0xf7a0, +0xf947, 0xf590, 0xf77b, 0xf590, 0xf77b, 0xf43b, 0xf665, 0xf43b, 0xf665, 0xf3a9, 0xf60d, +0xf3a9, 0xf60d, 0xf1d2, 0xf467, 0xf1d2, 0xf467, 0xf02c, 0xf2eb, 0xf02c, 0xf2eb, 0xf02c, +0xf2eb, 0xee56, 0xf135, 0xee56, 0xf135, 0xec77, 0xef6b, 0xec77, 0xef6b, 0xeb27, 0xee25, +0xeb27, 0xee25, 0xe9c1, 0xecbf, 0xe9c1, 0xecbf, 0xe92a, 0xec1d, 0xe92a, 0xec1d, 0xe92a, +0xec1d, 0xe948, 0xec25, 0xe948, 0xec25, 0xe934, 0xebf3, 0xe934, 0xebf3, 0xe982, 0xec19, +0xe982, 0xec19, 0xea81, 0xece8, 0xea81, 0xece8, 0xec06, 0xee38, 0xec06, 0xee38, 0xed44, +0xef3d, 0xed44, 0xef3d, 0xed44, 0xef3d, 0xee92, 0xf04e, 0xee92, 0xf04e, 0xf077, 0xf1f3, +0xf077, 0xf1f3, 0xf1e4, 0xf322, 0xf1e4, 0xf322, 0xf39c, 0xf49d, 0xf39c, 0xf49d, 0xf652, +0xf718, 0xf652, 0xf718, 0xf7ae, 0xf83c, 0xf7ae, 0xf83c, 0xf7ae, 0xf83c, 0xf843, 0xf89e, +0xf843, 0xf89e, 0xf947, 0xf974, 0xf947, 0xf974, 0xf986, 0xf98b, 0xf986, 0xf98b, 0xfa82, +0xfa62, 0xfa82, 0xfa62, 0xfa59, 0xfa1b, 0xfa59, 0xfa1b, 0xfa59, 0xfa1b, 0xf9f2, 0xf99a, +0xf9f2, 0xf99a, 0xfbbc, 0xfb4e, 0xfbbc, 0xfb4e, 0xfc82, 0xfc02, 0xfc82, 0xfc02, 0xfd1b, +0xfc8a, 0xfd1b, 0xfc8a, 0xfd69, 0xfcc9, 0xfd69, 0xfcc9, 0xfe24, 0xfd77, 0xfe24, 0xfd77, +0xfe24, 0xfd77, 0xff88, 0xfecd, 0xff88, 0xfecd, 0xff4f, 0xfe86, 0xff4f, 0xfe86, 0x6e, +0xff96, 0x6e, 0xff96, 0x1b4, 0xcd, 0x1b4, 0xcd, 0x136, 0x3d, 0x136, 0x3d, +0x14b, 0x42, 0x14b, 0x42, 0x14b, 0x42, 0x1b7, 0x9b, 0x1b7, 0x9b, 0x289, +0x15d, 0x289, 0x15d, 0x300, 0x1c5, 0x300, 0x1c5, 0x377, 0x230, 0x377, 0x230, +0x466, 0x318, 0x466, 0x318, 0x466, 0x318, 0x40b, 0x2ba, 0x40b, 0x2ba, 0x502, +0x3b6, 0x502, 0x3b6, 0x5fc, 0x4bd, 0x5fc, 0x4bd, 0x523, 0x3fb, 0x523, 0x3fb, +0x444, 0x33c, 0x444, 0x33c, 0x2fa, 0x21d, 0x2fa, 0x21d, 0x2fa, 0x21d, 0x19e, +0xf7, 0x19e, 0xf7, 0xff0d, 0xfea6, 0xff0d, 0xfea6, 0xfd02, 0xfce6, 0xfd02, 0xfce6, +0xfb3b, 0xfb73, 0xfb3b, 0xfb73, 0xf822, 0xf8b6, 0xf822, 0xf8b6, 0xf822, 0xf8b6, 0xf612, +0xf709, 0xf612, 0xf709, 0xf3d2, 0xf531, 0xf3d2, 0xf531, 0xf1c8, 0xf391, 0xf1c8, 0xf391, +0xeffe, 0xf232, 0xeffe, 0xf232, 0xedb5, 0xf051, 0xedb5, 0xf051, 0xec4d, 0xef4f, 0xec4d, +0xef4f, 0xec4d, 0xef4f, 0xea48, 0xeda8, 0xea48, 0xeda8, 0xe83c, 0xebf2, 0xe83c, 0xebf2, +0xe6a7, 0xeaa8, 0xe6a7, 0xeaa8, 0xe443, 0xe883, 0xe443, 0xe883, 0xe257, 0xe6ca, 0xe257, +0xe6ca, 0xe0a1, 0xe539, 0xe0a1, 0xe539, 0xe0a1, 0xe539, 0xdfb6, 0xe464, 0xdfb6, 0xe464, +0xdf28, 0xe3df, 0xdf28, 0xe3df, 0xdda4, 0xe255, 0xdda4, 0xe255, 0xdd80, 0xe220, 0xdd80, +0xe220, 0xde46, 0xe2c8, 0xde46, 0xe2c8, 0xde46, 0xe2c8, 0xdefd, 0xe357, 0xdefd, 0xe357, +0xdffd, 0xe427, 0xdffd, 0xe427, 0xe061, 0xe454, 0xe061, 0xe454, 0xe15f, 0xe518, 0xe15f, +0xe518, 0xe2cb, 0xe646, 0xe2cb, 0xe646, 0xe2eb, 0xe628, 0xe2eb, 0xe628, 0xe2eb, 0xe628, +0xe405, 0xe705, 0xe405, 0xe705, 0xe5b0, 0xe876, 0xe5b0, 0xe876, 0xe6d3, 0xe963, 0xe6d3, +0xe963, 0xe92d, 0xeb8a, 0xe92d, 0xeb8a, 0xea99, 0xecca, 0xea99, 0xecca, 0xeba9, 0xedb3, +0xeba9, 0xedb3, 0xeba9, 0xedb3, 0xedbd, 0xefa4, 0xedbd, 0xefa4, 0xeff3, 0xf1bd, 0xeff3, +0xf1bd, 0xf211, 0xf3c2, 0xf211, 0xf3c2, 0xf2c0, 0xf45b, 0xf2c0, 0xf45b, 0xf384, 0xf50b, +0xf384, 0xf50b, 0xf384, 0xf50b, 0xf4af, 0xf621, 0xf4af, 0xf621, 0xf44c, 0xf5aa, 0xf44c, +0xf5aa, 0xf432, 0xf57a, 0xf432, 0xf57a, 0xf458, 0xf586, 0xf458, 0xf586, 0xf3b8, 0xf4c8, +0xf3b8, 0xf4c8, 0xf3a3, 0xf491, 0xf3a3, 0xf491, 0xf3a3, 0xf491, 0xf379, 0xf43f, 0xf379, +0xf43f, 0xf387, 0xf41f, 0xf387, 0xf41f, 0xf34c, 0xf3b1, 0xf34c, 0xf3b1, 0xf437, 0xf462, +0xf437, 0xf462, 0xf649, 0xf637, 0xf649, 0xf637, 0xf771, 0xf71c, 0xf771, 0xf71c, 0xf771, +0xf71c, 0xfa59, 0xf9c0, 0xfa59, 0xf9c0, 0xfcb2, 0xfbd2, 0xfcb2, 0xfbd2, 0xfe88, 0xfd62, +0xfe88, 0xfd62, 0xd5, 0xff6a, 0xd5, 0xff6a, 0x319, 0x16b, 0x319, 0x16b, 0x319, +0x16b, 0x649, 0x45c, 0x649, 0x45c, 0x817, 0x5f1, 0x817, 0x5f1, 0xae8, 0x88f, +0xae8, 0x88f, 0xd77, 0xaf2, 0xd77, 0xaf2, 0xf3d, 0xc95, 0xf3d, 0xc95, 0x11c8, +0xf06, 0x11c8, 0xf06, 0x11c8, 0xf06, 0x1378, 0x10a4, 0x1378, 0x10a4, 0x15d3, 0x12f6, +0x15d3, 0x12f6, 0x16ae, 0x13d0, 0x16ae, 0x13d0, 0x1700, 0x142a, 0x1700, 0x142a, 0x1794, +0x14cd, 0x1794, 0x14cd, 0x16aa, 0x13f9, 0x16aa, 0x13f9, 0x16aa, 0x13f9, 0x16ef, 0x145a, +0x16ef, 0x145a, 0x1714, 0x14a0, 0x1714, 0x14a0, 0x16f5, 0x14a6, 0x16f5, 0x14a6, 0x174c, +0x1525, 0x174c, 0x1525, 0x16b7, 0x14bb, 0x16b7, 0x14bb, 0x16b7, 0x14bb, 0x1605, 0x1436, +0x1605, 0x1436, 0x14f4, 0x1351, 0x14f4, 0x1351, 0x13e7, 0x1272, 0x13e7, 0x1272, 0x13a3, +0x125d, 0x13a3, 0x125d, 0x130d, 0x11f4, 0x130d, 0x11f4, 0x11b4, 0x10c7, 0x11b4, 0x10c7, +0x11b4, 0x10c7, 0x10b8, 0xff8, 0x10b8, 0xff8, 0xf02, 0xe6d, 0xf02, 0xe6d, 0xc8b, +0xc22, 0xc8b, 0xc22, 0xb04, 0xac5, 0xb04, 0xac5, 0x91b, 0x907, 0x91b, 0x907, +0x7a7, 0x7bc, 0x7a7, 0x7bc, 0x7a7, 0x7bc, 0x632, 0x671, 0x632, 0x671, 0x4d3, +0x53a, 0x4d3, 0x53a, 0x460, 0x4ef, 0x460, 0x4ef, 0x295, 0x34b, 0x295, 0x34b, +0xee, 0x1c9, 0xee, 0x1c9, 0xee, 0x1c9, 0x3, 0x102, 0x3, 0x102, 0xff46, +0x66, 0xff46, 0x66, 0xfd8c, 0xfeca, 0xfd8c, 0xfeca, 0xfb0e, 0xfc66, 0xfb0e, 0xfc66, +0xfaeb, 0xfc59, 0xfaeb, 0xfc59, 0xfa62, 0xfbe3, 0xfa62, 0xfbe3, 0xfa62, 0xfbe3, 0xf884, +0xfa12, 0xf884, 0xfa12, 0xf86b, 0xfa00, 0xf86b, 0xfa00, 0xf88d, 0xfa25, 0xf88d, 0xfa25, +0xf781, 0xf916, 0xf781, 0xf916, 0xf675, 0xf801, 0xf675, 0xf801, 0xf6f9, 0xf877, 0xf6f9, +0xf877, 0xf6f9, 0xf877, 0xf7ad, 0xf918, 0xf7ad, 0xf918, 0xf6c0, 0xf813, 0xf6c0, 0xf813, +0xf7a7, 0xf8df, 0xf7a7, 0xf8df, 0xf90a, 0xfa24, 0xf90a, 0xfa24, 0xf928, 0xfa21, 0xf928, +0xfa21, 0xf928, 0xfa21, 0xf9ec, 0xfac2, 0xf9ec, 0xfac2, 0xfa44, 0xfaf7, 0xfa44, 0xfaf7, +0xfad6, 0xfb66, 0xfad6, 0xfb66, 0xfb53, 0xfbc1, 0xfb53, 0xfbc1, 0xfc97, 0xfce3, 0xfc97, +0xfce3, 0xfd89, 0xfdb7, 0xfd89, 0xfdb7, 0xfd89, 0xfdb7, 0xfd64, 0xfd75, 0xfd64, 0xfd75, +0xfe8e, 0xfe86, 0xfe8e, 0xfe86, 0xff87, 0xff69, 0xff87, 0xff69, 0xba, 0x89, 0xba, +0x89, 0x174, 0x132, 0x174, 0x132, 0x23c, 0x1ed, 0x23c, 0x1ed, 0x23c, 0x1ed, +0x3b4, 0x35b, 0x3b4, 0x35b, 0x3f6, 0x395, 0x3f6, 0x395, 0x525, 0x4be, 0x525, +0x4be, 0x67f, 0x614, 0x67f, 0x614, 0x713, 0x6a5, 0x713, 0x6a5, 0x713, 0x6a5, +0x86c, 0x7fc, 0x86c, 0x7fc, 0x992, 0x921, 0x992, 0x921, 0xa39, 0x9c6, 0xa39, +0x9c6, 0xb30, 0xabd, 0xb30, 0xabd, 0xc3e, 0xbcb, 0xc3e, 0xbcb, 0xcb0, 0xc3d, +0xcb0, 0xc3d, 0xcb0, 0xc3d, 0xc6e, 0xbfc, 0xc6e, 0xbfc, 0xb6a, 0xaf9, 0xb6a, +0xaf9, 0xa2b, 0x9bc, 0xa2b, 0x9bc, 0x906, 0x89b, 0x906, 0x89b, 0x73e, 0x6d7, +0x73e, 0x6d7, 0x5bb, 0x55b, 0x5bb, 0x55b, 0x5bb, 0x55b, 0x44e, 0x3f6, 0x44e, +0x3f6, 0x340, 0x2f2, 0x340, 0x2f2, 0x255, 0x212, 0x255, 0x212, 0x7b, 0x46, +0x7b, 0x46, 0xff44, 0xff1e, 0xff44, 0xff1e, 0xff44, 0xff1e, 0xfdb9, 0xfda2, 0xfdb9, +0xfda2, 0xfcbe, 0xfcb7, 0xfcbe, 0xfcb7, 0xfbe0, 0xfbe9, 0xfbe0, 0xfbe9, 0xfa9f, 0xfab8, +0xfa9f, 0xfab8, 0xfa53, 0xfa78, 0xfa53, 0xfa78, 0xf980, 0xf9b0, 0xf980, 0xf9b0, 0xf980, +0xf9b0, 0xf9f6, 0xfa2e, 0xf9f6, 0xfa2e, 0xf9e2, 0xfa1e, 0xf9e2, 0xfa1e, 0xf909, 0xf943, +0xf909, 0xf943, 0xfa01, 0xfa36, 0xfa01, 0xfa36, 0xfa05, 0xfa2c, 0xfa05, 0xfa2c, 0xfa05, +0xfa2c, 0xf9a3, 0xf9b8, 0xf9a3, 0xf9b8, 0xfacb, 0xfac7, 0xfacb, 0xfac7, 0xfbb5, 0xfb93, +0xfbb5, 0xfb93, 0xfbce, 0xfb87, 0xfbce, 0xfb87, 0xfc69, 0xfbf7, 0xfc69, 0xfbf7, 0xfdc0, +0xfd1e, 0xfdc0, 0xfd1e, 0xfdc0, 0xfd1e, 0xfe80, 0xfdab, 0xfe80, 0xfdab, 0xfefc, 0xfdef, +0xfefc, 0xfdef, 0x12f, 0xffea, 0x12f, 0xffea, 0x2be, 0x140, 0x2be, 0x140, 0x3f3, +0x23b, 0x3f3, 0x23b, 0x67a, 0x48a, 0x67a, 0x48a, 0x67a, 0x48a, 0x82b, 0x607, +0x82b, 0x607, 0x91c, 0x6c6, 0x91c, 0x6c6, 0xa6d, 0x7ec, 0xa6d, 0x7ec, 0xd33, +0xa8c, 0xd33, 0xa8c, 0xee9, 0xc22, 0xee9, 0xc22, 0xee9, 0xc22, 0x101a, 0xd3a, +0x101a, 0xd3a, 0x1286, 0xf94, 0x1286, 0xf94, 0x13f2, 0x10f6, 0x13f2, 0x10f6, 0x14d5, +0x11d6, 0x14d5, 0x11d6, 0x1458, 0x115d, 0x1458, 0x115d, 0x1425, 0x1134, 0x1425, 0x1134, +0x1425, 0x1134, 0x14ab, 0x11cb, 0x14ab, 0x11cb, 0x140f, 0x1144, 0x140f, 0x1144, 0x14a0, +0x11ed, 0x14a0, 0x11ed, 0x14b6, 0x121f, 0x14b6, 0x121f, 0x142f, 0x11b5, 0x142f, 0x11b5, +0x1462, 0x1207, 0x1462, 0x1207, 0x1462, 0x1207, 0x140d, 0x11d0, 0x140d, 0x11d0, 0x1424, +0x1205, 0x1424, 0x1205, 0x142e, 0x122a, 0x142e, 0x122a, 0x142b, 0x1240, 0x142b, 0x1240, +0x139c, 0x11c8, 0x139c, 0x11c8, 0x139c, 0x11c8, 0x12dc, 0x111b, 0x12dc, 0x111b, 0x130b, +0x1159, 0x130b, 0x1159, 0x137d, 0x11d6, 0x137d, 0x11d6, 0x148c, 0x12ef, 0x148c, 0x12ef, +0x1525, 0x138d, 0x1525, 0x138d, 0x1536, 0x13a1, 0x1536, 0x13a1, 0x1536, 0x13a1, 0x1541, +0x13ac, 0x1541, 0x13ac, 0x1602, 0x146d, 0x1602, 0x146d, 0x160f, 0x1479, 0x160f, 0x1479, +0x15a1, 0x140b, 0x15a1, 0x140b, 0x15ca, 0x1434, 0x15ca, 0x1434, 0x14a2, 0x130e, 0x14a2, +0x130e, 0x14a2, 0x130e, 0x143f, 0x12b1, 0x143f, 0x12b1, 0x1303, 0x117f, 0x1303, 0x117f, +0x1177, 0x1000, 0x1177, 0x1000, 0x1103, 0xf9d, 0x1103, 0xf9d, 0x1061, 0xf13, 0x1061, +0xf13, 0x1061, 0xf13, 0x10e2, 0xfb2, 0x10e2, 0xfb2, 0xf78, 0xe6a, 0xf78, 0xe6a, +0xd47, 0xc62, 0xd47, 0xc62, 0xd0a, 0xc53, 0xd0a, 0xc53, 0xbeb, 0xb67, 0xbeb, +0xb67, 0x9b0, 0x964, 0x9b0, 0x964, 0x9b0, 0x964, 0x898, 0x888, 0x898, 0x888, +0x78b, 0x7bc, 0x78b, 0x7bc, 0x52e, 0x5a1, 0x52e, 0x5a1, 0x2ac, 0x363, 0x2ac, +0x363, 0x86, 0x181, 0x86, 0x181, 0xfd8d, 0xfecc, 0xfd8d, 0xfecc, 0xfd8d, 0xfecc, +0xfa8f, 0xfc11, 0xfa8f, 0xfc11, 0xf8e0, 0xfaa1, 0xf8e0, 0xfaa1, 0xf6ec, 0xf8e8, 0xf6ec, +0xf8e8, 0xf57a, 0xf7ac, 0xf57a, 0xf7ac, 0xf3eb, 0xf64e, 0xf3eb, 0xf64e, 0xf3eb, 0xf64e, +0xf21d, 0xf4a9, 0xf21d, 0xf4a9, 0xf063, 0xf310, 0xf063, 0xf310, 0xee42, 0xf109, 0xee42, +0xf109, 0xecc4, 0xef9b, 0xecc4, 0xef9b, 0xea5f, 0xed3d, 0xea5f, 0xed3d, 0xe937, 0xec14, +0xe937, 0xec14, 0xe937, 0xec14, 0xe8ca, 0xeb9c, 0xe8ca, 0xeb9c, 0xe86b, 0xeb29, 0xe86b, +0xeb29, 0xe960, 0xec02, 0xe960, 0xec02, 0xe8e8, 0xeb68, 0xe8e8, 0xeb68, 0xe940, 0xeb96, +0xe940, 0xeb96, 0xea59, 0xec81, 0xea59, 0xec81, 0xea59, 0xec81, 0xeb76, 0xed6b, 0xeb76, +0xed6b, 0xed7b, 0xef3b, 0xed7b, 0xef3b, 0xee96, 0xf020, 0xee96, 0xf020, 0xf0d5, 0xf229, +0xf0d5, 0xf229, 0xf3ad, 0xf4cc, 0xf3ad, 0xf4cc, 0xf3ad, 0xf4cc, 0xf5f5, 0xf6e2, 0xf5f5, +0xf6e2, 0xf822, 0xf8e1, 0xf822, 0xf8e1, 0xf962, 0xf9f6, 0xf962, 0xf9f6, 0xfa97, 0xfb07, +0xfa97, 0xfb07, 0xfb20, 0xfb71, 0xfb20, 0xfb71, 0xfbab, 0xfbe4, 0xfbab, 0xfbe4, 0xfbab, +0xfbe4, 0xfc2c, 0xfc52, 0xfc2c, 0xfc52, 0xfc6e, 0xfc88, 0xfc6e, 0xfc88, 0xfd51, 0xfd65, +0xfd51, 0xfd65, 0xfe58, 0xfe6a, 0xfe58, 0xfe6a, 0xff1c, 0xff30, 0xff1c, 0xff30, 0xffaa, +0xffc4, 0xffaa, 0xffc4, 0xffaa, 0xffc4, 0x129, 0x14b, 0x129, 0x14b, 0x160, 0x18c, +0x160, 0x18c, 0x194, 0x1cb, 0x194, 0x1cb, 0x20b, 0x24c, 0x20b, 0x24c, 0x176, +0x1c0, 0x176, 0x1c0, 0x176, 0x1c0, 0x226, 0x278, 0x226, 0x278, 0x23d, 0x294, +0x23d, 0x294, 0x2ba, 0x316, 0x2ba, 0x316, 0x3a3, 0x402, 0x3a3, 0x402, 0x475, +0x4d5, 0x475, 0x4d5, 0x5f3, 0x655, 0x5f3, 0x655, 0x5f3, 0x655, 0x61c, 0x67f, +0x61c, 0x67f, 0x647, 0x6ac, 0x647, 0x6ac, 0x747, 0x7b1, 0x747, 0x7b1, 0x745, +0x7b7, 0x745, 0x7b7, 0x60e, 0x68c, 0x60e, 0x68c, 0x4f9, 0x589, 0x4f9, 0x589, +0x4f9, 0x589, 0x392, 0x43b, 0x392, 0x43b, 0x161, 0x22a, 0x161, 0x22a, 0xffe4, +0xd5, 0xffe4, 0xd5, 0xfed0, 0xfff0, 0xfed0, 0xfff0, 0xfc08, 0xfd60, 0xfc08, 0xfd60, +0xfc08, 0xfd60, 0xf998, 0xfb2e, 0xf998, 0xfb2e, 0xf7d0, 0xf9ab, 0xf7d0, 0xf9ab, 0xf4e6, +0xf70a, 0xf4e6, 0xf70a, 0xf25a, 0xf4cd, 0xf25a, 0xf4cd, 0xefd2, 0xf294, 0xefd2, 0xf294, +0xeda7, 0xf0b9, 0xeda7, 0xf0b9, 0xeda7, 0xf0b9, 0xeb2a, 0xee8a, 0xeb2a, 0xee8a, 0xe8cd, +0xec77, 0xe8cd, 0xec77, 0xe708, 0xeaf5, 0xe708, 0xeaf5, 0xe43f, 0xe869, 0xe43f, 0xe869, +0xe20f, 0xe66c, 0xe20f, 0xe66c, 0xe053, 0xe4d8, 0xe053, 0xe4d8, 0xe053, 0xe4d8, 0xdf53, +0xe3f3, 0xdf53, 0xe3f3, 0xde2c, 0xe2da, 0xde2c, 0xe2da, 0xdc2f, 0xe0df, 0xdc2f, 0xe0df, +0xdc18, 0xe0bc, 0xdc18, 0xe0bc, 0xdc97, 0xe122, 0xdc97, 0xe122, 0xdc97, 0xe122, 0xdcf6, +0xe15d, 0xdcf6, 0xe15d, 0xdda4, 0xe1db, 0xdda4, 0xe1db, 0xde05, 0xe205, 0xde05, 0xe205, +0xdf3b, 0xe2fc, 0xdf3b, 0xe2fc, 0xe06d, 0xe3ea, 0xe06d, 0xe3ea, 0xe1fe, 0xe534, 0xe1fe, +0xe534, 0xe1fe, 0xe534, 0xe3f7, 0xe6e5, 0xe3f7, 0xe6e5, 0xe529, 0xe7d1, 0xe529, 0xe7d1, +0xe676, 0xe8da, 0xe676, 0xe8da, 0xe79b, 0xe9c1, 0xe79b, 0xe9c1, 0xe900, 0xeaee, 0xe900, +0xeaee, 0xe900, 0xeaee, 0xea79, 0xec36, 0xea79, 0xec36, 0xec3f, 0xedd2, 0xec3f, 0xedd2, +0xeea4, 0xf014, 0xeea4, 0xf014, 0xf0f1, 0xf247, 0xf0f1, 0xf247, 0xf256, 0xf399, 0xf256, +0xf399, 0xf3b5, 0xf4ea, 0xf3b5, 0xf4ea, 0xf3b5, 0xf4ea, 0xf57a, 0xf6a5, 0xf57a, 0xf6a5, +0xf58a, 0xf6af, 0xf58a, 0xf6af, 0xf611, 0xf731, 0xf611, 0xf731, 0xf60b, 0xf725, 0xf60b, +0xf725, 0xf512, 0xf623, 0xf512, 0xf623, 0xf4b4, 0xf5b8, 0xf4b4, 0xf5b8, 0xf4b4, 0xf5b8, +0xf3af, 0xf4a0, 0xf3af, 0xf4a0, 0xf3c0, 0xf498, 0xf3c0, 0xf498, 0xf416, 0xf4cd, 0xf416, +0xf4cd, 0xf564, 0xf5f1, 0xf564, 0xf5f1, 0xf77d, 0xf7d7, 0xf77d, 0xf7d7, 0xf77d, 0xf7d7, +0xf872, 0xf890, 0xf872, 0xf890, 0xf9df, 0xf9b9, 0xf9df, 0xf9b9, 0xfb63, 0xfaf2, 0xfb63, +0xfaf2, 0xfcf3, 0xfc32, 0xfcf3, 0xfc32, 0xfed4, 0xfdbd, 0xfed4, 0xfdbd, 0x11b, 0xffac, +0x11b, 0xffac, 0x11b, 0xffac, 0x414, 0x24b, 0x414, 0x24b, 0x633, 0x411, 0x633, +0x411, 0x8ca, 0x652, 0x8ca, 0x652, 0xbb8, 0x8f0, 0xbb8, 0x8f0, 0xd20, 0xa0e, +0xd20, 0xa0e, 0xf86, 0xc31, 0xf86, 0xc31, 0xf86, 0xc31, 0x11d8, 0xe4b, 0x11d8, +0xe4b, 0x1341, 0xf84, 0x1341, 0xf84, 0x14d5, 0x10f4, 0x14d5, 0x10f4, 0x1578, 0x117d, +0x1578, 0x117d, 0x1524, 0x111c, 0x1524, 0x111c, 0x1524, 0x111c, 0x14ae, 0x10a3, 0x14ae, +0x10a3, 0x15d3, 0x11ce, 0x15d3, 0x11ce, 0x1666, 0x1270, 0x1666, 0x1270, 0x159e, 0x11c0, +0x159e, 0x11c0, 0x153a, 0x117c, 0x153a, 0x117c, 0x149c, 0x1103, 0x149c, 0x1103, 0x149c, +0x1103, 0x1456, 0x10e6, 0x1456, 0x10e6, 0x1339, 0xff6, 0x1339, 0xff6, 0x11dc, 0xec9, +0x11dc, 0xec9, 0x115a, 0xe77, 0x115a, 0xe77, 0xfed, 0xd3b, 0xfed, 0xd3b, 0xf94, +0xd13, 0xf94, 0xd13, 0xf94, 0xd13, 0xf28, 0xcd7, 0xf28, 0xcd7, 0xcf3, 0xad1, +0xcf3, 0xad1, 0xbd7, 0x9e3, 0xbd7, 0x9e3, 0xaca, 0x902, 0xaca, 0x902, 0x980, +0x7e4, 0x980, 0x7e4, 0x980, 0x7e4, 0x830, 0x6bf, 0x830, 0x6bf, 0x72b, 0x5e3, +0x72b, 0x5e3, 0x6b3, 0x595, 0x6b3, 0x595, 0x575, 0x481, 0x575, 0x481, 0x461, +0x397, 0x461, 0x397, 0x376, 0x2d6, 0x376, 0x2d6, 0x376, 0x2d6, 0x23e, 0x1c8, +0x23e, 0x1c8, 0xde, 0x93, 0xde, 0x93, 0x1d, 0xfffc, 0x1d, 0xfffc, 0xff0f, +0xff18, 0xff0f, 0xff18, 0xfe3e, 0xfe70, 0xfe3e, 0xfe70, 0xfd64, 0xfdbd, 0xfd64, 0xfdbd, +0xfd64, 0xfdbd, 0xfb79, 0xfbf8, 0xfb79, 0xfbf8, 0xfa5b, 0xfafd, 0xfa5b, 0xfafd, 0xf8a0, +0xf961, 0xf8a0, 0xf961, 0xf7e9, 0xf8c5, 0xf7e9, 0xf8c5, 0xf7b4, 0xf8a7, 0xf7b4, 0xf8a7, +0xf7b4, 0xf8a7, 0xf6eb, 0xf7f0, 0xf6eb, 0xf7f0, 0xf720, 0xf832, 0xf720, 0xf832, 0xf75c, +0xf874, 0xf75c, 0xf874, 0xf8d8, 0xf9f0, 0xf8d8, 0xf9f0, 0xf987, 0xfa9b, 0xf987, 0xfa9b, +0xf974, 0xfa7e, 0xf974, 0xfa7e, 0xf974, 0xfa7e, 0xfa95, 0xfb90, 0xfa95, 0xfb90, 0xfb40, +0xfc27, 0xfb40, 0xfc27, 0xfbe8, 0xfcb7, 0xfbe8, 0xfcb7, 0xfc87, 0xfd3c, 0xfc87, 0xfd3c, +0xfd2b, 0xfdc2, 0xfd2b, 0xfdc2, 0xfe10, 0xfe88, 0xfe10, 0xfe88, 0xfe10, 0xfe88, 0xfe72, +0xfeca, 0xfe72, 0xfeca, 0xff9e, 0xffd6, 0xff9e, 0xffd6, 0x93, 0xac, 0x93, 0xac, +0x96, 0x90, 0x96, 0x90, 0x14d, 0x12c, 0x14d, 0x12c, 0x14d, 0x12c, 0x1d1, +0x195, 0x1d1, 0x195, 0x1e9, 0x196, 0x1e9, 0x196, 0x228, 0x1c0, 0x228, 0x1c0, +0x360, 0x2e6, 0x360, 0x2e6, 0x41a, 0x391, 0x41a, 0x391, 0x474, 0x3e0, 0x474, +0x3e0, 0x474, 0x3e0, 0x669, 0x5cb, 0x669, 0x5cb, 0x704, 0x660, 0x704, 0x660, +0x736, 0x68d, 0x736, 0x68d, 0x827, 0x77c, 0x827, 0x77c, 0x8ee, 0x842, 0x8ee, +0x842, 0xabd, 0xa12, 0xabd, 0xa12, 0xabd, 0xa12, 0xb2e, 0xa86, 0xb2e, 0xa86, +0xa4e, 0x9a9, 0xa4e, 0x9a9, 0x926, 0x886, 0x926, 0x886, 0x736, 0x69b, 0x736, +0x69b, 0x695, 0x600, 0x695, 0x600, 0x695, 0x600, 0x562, 0x4d3, 0x562, 0x4d3, +0x39c, 0x314, 0x39c, 0x314, 0x38c, 0x30b, 0x38c, 0x30b, 0x34b, 0x2d3, 0x34b, +0x2d3, 0x245, 0x1d4, 0x245, 0x1d4, 0x15f, 0xf7, 0x15f, 0xf7, 0x15f, 0xf7, +0xd4, 0x73, 0xd4, 0x73, 0xff37, 0xfede, 0xff37, 0xfede, 0xfd71, 0xfd1f, 0xfd71, +0xfd1f, 0xfcbe, 0xfc71, 0xfcbe, 0xfc71, 0xfc33, 0xfbea, 0xfc33, 0xfbea, 0xfb68, 0xfb21, +0xfb68, 0xfb21, 0xfb68, 0xfb21, 0xfb76, 0xfb2e, 0xfb76, 0xfb2e, 0xfc45, 0xfbfb, 0xfc45, +0xfbfb, 0xfba9, 0xfb59, 0xfba9, 0xfb59, 0xfbd7, 0xfb7e, 0xfbd7, 0xfb7e, 0xfc69, 0xfc03, +0xfc69, 0xfc03, 0xfc69, 0xfc03, 0xfce8, 0xfc73, 0xfce8, 0xfc73, 0xfdb4, 0xfd2a, 0xfdb4, +0xfd2a, 0xfdc5, 0xfd25, 0xfdc5, 0xfd25, 0xfefb, 0xfe3f, 0xfefb, 0xfe3f, 0xff59, 0xfe81, +0xff59, 0xfe81, 0xffa9, 0xfeaf, 0xffa9, 0xfeaf, 0xffa9, 0xfeaf, 0xe6, 0xffca, 0xe6, +0xffca, 0x21d, 0xdd, 0x21d, 0xdd, 0x463, 0x2fe, 0x463, 0x2fe, 0x5c9, 0x43f, +0x5c9, 0x43f, 0x6c0, 0x512, 0x6c0, 0x512, 0x80e, 0x63c, 0x80e, 0x63c, 0x80e, +0x63c, 0x8c7, 0x6d3, 0x8c7, 0x6d3, 0xa26, 0x813, 0xa26, 0x813, 0xbff, 0x9cf, +0xbff, 0x9cf, 0xe07, 0xbbd, 0xe07, 0xbbd, 0xff8, 0xd98, 0xff8, 0xd98, 0xff8, +0xd98, 0x117c, 0xf0a, 0x117c, 0xf0a, 0x136d, 0x10ed, 0x136d, 0x10ed, 0x1436, 0x11ab, +0x1436, 0x11ab, 0x14ed, 0x125b, 0x14ed, 0x125b, 0x1629, 0x1394, 0x1629, 0x1394, 0x169f, +0x1409, 0x169f, 0x1409, 0x169f, 0x1409, 0x16d6, 0x1441, 0x16d6, 0x1441, 0x165c, 0x13cc, +0x165c, 0x13cc, 0x167b, 0x13f0, 0x167b, 0x13f0, 0x158f, 0x130a, 0x158f, 0x130a, 0x14db, +0x125e, 0x14db, 0x125e, 0x14db, 0x125e, 0x1657, 0x13e1, 0x1657, 0x13e1, 0x1626, 0x13b8, +0x1626, 0x13b8, 0x1545, 0x12de, 0x1545, 0x12de, 0x14a7, 0x1247, 0x14a7, 0x1247, 0x140b, +0x11b1, 0x140b, 0x11b1, 0x13d3, 0x117e, 0x13d3, 0x117e, 0x13d3, 0x117e, 0x1309, 0x10b9, +0x1309, 0x10b9, 0x12e7, 0x109b, 0x12e7, 0x109b, 0x1331, 0x10e9, 0x1331, 0x10e9, 0x134b, +0x1107, 0x134b, 0x1107, 0x140e, 0x11ce, 0x140e, 0x11ce, 0x1442, 0x1208, 0x1442, 0x1208, +0x1442, 0x1208, 0x1445, 0x1211, 0x1445, 0x1211, 0x1525, 0x12f9, 0x1525, 0x12f9, 0x163e, +0x141c, 0x163e, 0x141c, 0x16fc, 0x14e6, 0x16fc, 0x14e6, 0x171c, 0x1514, 0x171c, 0x1514, +0x171c, 0x1514, 0x16f5, 0x14fd, 0x16f5, 0x14fd, 0x1631, 0x144d, 0x1631, 0x144d, 0x1501, +0x1335, 0x1501, 0x1335, 0x1440, 0x128f, 0x1440, 0x128f, 0x13b8, 0x1225, 0x13b8, 0x1225, +0x131b, 0x11a9, 0x131b, 0x11a9, 0x131b, 0x11a9, 0x1312, 0x11c6, 0x1312, 0x11c6, 0x121b, +0x10f8, 0x121b, 0x10f8, 0x108a, 0xf94, 0x108a, 0xf94, 0xfd5, 0xf10, 0xfd5, 0xf10, +0xe18, 0xd87, 0xe18, 0xd87, 0xc80, 0xc27, 0xc80, 0xc27, 0xc80, 0xc27, 0xb03, +0xae5, 0xb03, 0xae5, 0x960, 0x97f, 0x960, 0x97f, 0x7b9, 0x819, 0x7b9, 0x819, +0x527, 0x5c9, 0x527, 0x5c9, 0x335, 0x41a, 0x335, 0x41a, 0x335, 0x41a, 0xb3, +0x1dd, 0xb3, 0x1dd, 0xfe33, 0xffa0, 0xfe33, 0xffa0, 0xfd22, 0xfed2, 0xfd22, 0xfed2, +0xfb5a, 0xfd4c, 0xfb5a, 0xfd4c, 0xf946, 0xfb77, 0xf946, 0xfb77, 0xf7d8, 0xfa43, 0xf7d8, +0xfa43, 0xf7d8, 0xfa43, 0xf621, 0xf8c3, 0xf621, 0xf8c3, 0xf3e7, 0xf6b9, 0xf3e7, 0xf6b9, +0xf152, 0xf44d, 0xf152, 0xf44d, 0xef5d, 0xf27a, 0xef5d, 0xf27a, 0xed59, 0xf08f, 0xed59, +0xf08f, 0xeba3, 0xeeea, 0xeba3, 0xeeea, 0xeba3, 0xeeea, 0xeb12, 0xee60, 0xeb12, 0xee60, +0xe9c4, 0xed10, 0xe9c4, 0xed10, 0xe8ce, 0xec0e, 0xe8ce, 0xec0e, 0xe81f, 0xeb48, 0xe81f, +0xeb48, 0xe7ac, 0xeab6, 0xe7ac, 0xeab6, 0xe7ac, 0xeab6, 0xe7c2, 0xeaa5, 0xe7c2, 0xeaa5, +0xe83a, 0xeaee, 0xe83a, 0xeaee, 0xe9fb, 0xec7a, 0xe9fb, 0xec7a, 0xeaff, 0xed44, 0xeaff, +0xed44, 0xec95, 0xee9c, 0xec95, 0xee9c, 0xef58, 0xf11f, 0xef58, 0xf11f, 0xef58, 0xf11f, +0xf0fb, 0xf281, 0xf0fb, 0xf281, 0xf25a, 0xf3a1, 0xf25a, 0xf3a1, 0xf422, 0xf52d, 0xf422, +0xf52d, 0xf670, 0xf742, 0xf670, 0xf742, 0xf84a, 0xf8e7, 0xf84a, 0xf8e7, 0xf8c6, 0xf934, +0xf8c6, 0xf934, 0xf8c6, 0xf934, 0xf935, 0xf97b, 0xf935, 0xf97b, 0xf92d, 0xf952, 0xf92d, +0xf952, 0xf9c9, 0xf9d4, 0xf9c9, 0xf9d4, 0xfbb5, 0xfbad, 0xfbb5, 0xfbad, 0xfc51, 0xfc3c, +0xfc51, 0xfc3c, 0xfc51, 0xfc3c, 0xfcf3, 0xfcd9, 0xfcf3, 0xfcd9, 0xfdfc, 0xfde1, 0xfdfc, +0xfde1, 0xfef4, 0xfedb, 0xfef4, 0xfedb, 0xffa2, 0xff90, 0xffa2, 0xff90, 0xff75, 0xff6c, +0xff75, 0xff6c, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x7a, 0x84, 0x7a, +0x84, 0x49, 0x5d, 0x49, 0x5d, 0x12a, 0x146, 0x12a, 0x146, 0x1e0, 0x204, +0x1e0, 0x204, 0x233, 0x25c, 0x233, 0x25c, 0x343, 0x371, 0x343, 0x371, 0x343, +0x371, 0x440, 0x471, 0x440, 0x471, 0x52f, 0x564, 0x52f, 0x564, 0x5ea, 0x624, +0x5ea, 0x624, 0x5cd, 0x60e, 0x5cd, 0x60e, 0x5e3, 0x62e, 0x5e3, 0x62e, 0x5e3, +0x62e, 0x525, 0x57e, 0x525, 0x57e, 0x3d3, 0x440, 0x3d3, 0x440, 0x299, 0x321, +0x299, 0x321, 0xf1, 0x19d, 0xf1, 0x19d, 0xff84, 0x5a, 0xff84, 0x5a, 0xfd61, +0xfe6c, 0xfd61, 0xfe6c, 0xfd61, 0xfe6c, 0xfb8e, 0xfcd7, 0xfb8e, 0xfcd7, 0xfac4, 0xfc53, +0xfac4, 0xfc53, 0xf817, 0xf9f6, 0xf817, 0xf9f6, 0xf510, 0xf745, 0xf510, 0xf745, 0xf345, +0xf5d6, 0xf345, 0xf5d6, 0xf094, 0xf384, 0xf094, 0xf384, 0xf094, 0xf384, 0xed84, 0xf0d6, +0xed84, 0xf0d6, 0xeb3e, 0xeef1, 0xeb3e, 0xeef1, 0xe97f, 0xed90, 0xe97f, 0xed90, 0xe6a3, +0xeb0e, 0xe6a3, 0xeb0e, 0xe423, 0xe8e0, 0xe423, 0xe8e0, 0xe423, 0xe8e0, 0xe2ae, 0xe7b3, +0xe2ae, 0xe7b3, 0xdff8, 0xe539, 0xdff8, 0xe539, 0xddd1, 0xe341, 0xddd1, 0xe341, 0xdcf5, +0xe285, 0xdcf5, 0xe285, 0xdc78, 0xe219, 0xdc78, 0xe219, 0xdba8, 0xe14a, 0xdba8, 0xe14a, +0xdba8, 0xe14a, 0xdb71, 0xe105, 0xdb71, 0xe105, 0xdc3a, 0xe1b0, 0xdc3a, 0xe1b0, 0xdbc3, +0xe10e, 0xdbc3, 0xe10e, 0xdbfb, 0xe10f, 0xdbfb, 0xe10f, 0xdd8c, 0xe25d, 0xdd8c, 0xe25d, +0xde67, 0xe2ef, 0xde67, 0xe2ef, 0xde67, 0xe2ef, 0xdebf, 0xe2f7, 0xdebf, 0xe2f7, 0xdf26, +0xe30b, 0xdf26, 0xe30b, 0xe076, 0xe408, 0xe076, 0xe408, 0xe172, 0xe4b1, 0xe172, 0xe4b1, +0xe27f, 0xe570, 0xe27f, 0xe570, 0xe27f, 0xe570, 0xe4fd, 0xe7a5, 0xe4fd, 0xe7a5, 0xe67b, +0xe8e2, 0xe67b, 0xe8e2, 0xe8a7, 0xead4, 0xe8a7, 0xead4, 0xeb5e, 0xed59, 0xeb5e, 0xed59, +0xec79, 0xee4c, 0xec79, 0xee4c, 0xee5b, 0xf00d, 0xee5b, 0xf00d, 0xee5b, 0xf00d, 0xf092, +0xf22b, 0xf092, 0xf22b, 0xf2c1, 0xf447, 0xf2c1, 0xf447, 0xf486, 0xf5fd, 0xf486, 0xf5fd, +0xf52c, 0xf696, 0xf52c, 0xf696, 0xf555, 0xf6b3, 0xf555, 0xf6b3, 0xf463, 0xf5b3, 0xf463, +0xf5b3, 0xf463, 0xf5b3, 0xf357, 0xf495, 0xf357, 0xf495, 0xf3d7, 0xf4fd, 0xf3d7, 0xf4fd, +0xf470, 0xf577, 0xf470, 0xf577, 0xf4ee, 0xf5cd, 0xf4ee, 0xf5cd, 0xf693, 0xf741, 0xf693, +0xf741, 0xf693, 0xf741, 0xf78e, 0xf800, 0xf78e, 0xf800, 0xf89f, 0xf8cb, 0xf89f, 0xf8cb, +0xfa3e, 0xfa1a, 0xfa3e, 0xfa1a, 0xfbcb, 0xfb4f, 0xfbcb, 0xfb4f, 0xfde1, 0xfd04, 0xfde1, +0xfd04, 0xffb7, 0xfe74, 0xffb7, 0xfe74, 0xffb7, 0xfe74, 0x24c, 0x9f, 0x24c, 0x9f, +0x4e4, 0x2cc, 0x4e4, 0x2cc, 0x729, 0x4a6, 0x729, 0x4a6, 0xa2f, 0x745, 0xa2f, +0x745, 0xcc9, 0x97f, 0xcc9, 0x97f, 0xcc9, 0x97f, 0xfd2, 0xc2f, 0xfd2, 0xc2f, +0x136e, 0xf7d, 0x136e, 0xf7d, 0x1572, 0x1140, 0x1572, 0x1140, 0x16bb, 0x1255, 0x16bb, +0x1255, 0x1805, 0x137a, 0x1805, 0x137a, 0x189f, 0x13fe, 0x189f, 0x13fe, 0x189f, 0x13fe, +0x18ef, 0x1447, 0x18ef, 0x1447, 0x1991, 0x14f2, 0x1991, 0x14f2, 0x19e4, 0x155d, 0x19e4, +0x155d, 0x18dc, 0x1479, 0x18dc, 0x1479, 0x18a8, 0x1475, 0x18a8, 0x1475, 0x1892, 0x1499, +0x1892, 0x1499, 0x1892, 0x1499, 0x16db, 0x1325, 0x16db, 0x1325, 0x1565, 0x11f8, 0x1565, +0x11f8, 0x144b, 0x112b, 0x144b, 0x112b, 0x12f8, 0x1026, 0x12f8, 0x1026, 0x1192, 0xf10, +0x1192, 0xf10, 0x1192, 0xf10, 0x1121, 0xeed, 0x1121, 0xeed, 0x102f, 0xe46, 0x102f, +0xe46, 0xdcd, 0xc2c, 0xdcd, 0xc2c, 0xc67, 0xb08, 0xc67, 0xb08, 0xb3c, 0xa1a, +0xb3c, 0xa1a, 0x969, 0x87f, 0x969, 0x87f, 0x969, 0x87f, 0x77b, 0x6c2, 0x77b, +0x6c2, 0x627, 0x599, 0x627, 0x599, 0x611, 0x5aa, 0x611, 0x5aa, 0x4f6, 0x4b1, +0x4f6, 0x4b1, 0x3cf, 0x3a7, 0x3cf, 0x3a7, 0x330, 0x322, 0x330, 0x322, 0x330, +0x322, 0x108, 0x112, 0x108, 0x112, 0x6a, 0x89, 0x6a, 0x89, 0x2d, 0x61, +0x2d, 0x61, 0xfe5c, 0xfea2, 0xfe5c, 0xfea2, 0xfd62, 0xfdbb, 0xfd62, 0xfdbb, 0xfd62, +0xfdbb, 0xfc93, 0xfcff, 0xfc93, 0xfcff, 0xfb94, 0xfc12, 0xfb94, 0xfc12, 0xfaa0, 0xfb30, +0xfaa0, 0xfb30, 0xf9fa, 0xfa9b, 0xf9fa, 0xfa9b, 0xf9f4, 0xfaa5, 0xf9f4, 0xfaa5, 0xf9a6, +0xfa66, 0xf9a6, 0xfa66, 0xf9a6, 0xfa66, 0xf94e, 0xfa1b, 0xf94e, 0xfa1b, 0xf939, 0xfa11, +0xf939, 0xfa11, 0xf8bf, 0xf99f, 0xf8bf, 0xf99f, 0xf904, 0xf9ea, 0xf904, 0xf9ea, 0xf9d0, +0xfab7, 0xf9d0, 0xfab7, 0xfa9b, 0xfb80, 0xfa9b, 0xfb80, 0xfa9b, 0xfb80, 0xfbf5, 0xfcd3, +0xfbf5, 0xfcd3, 0xfcac, 0xfd80, 0xfcac, 0xfd80, 0xfd3f, 0xfe05, 0xfd3f, 0xfe05, 0xfd8e, +0xfe43, 0xfd8e, 0xfe43, 0xfe1f, 0xfebf, 0xfe1f, 0xfebf, 0xfe1f, 0xfebf, 0xff71, 0xfff9, +0xff71, 0xfff9, 0xffe0, 0x4d, 0xffe0, 0x4d, 0x67, 0xb8, 0x67, 0xb8, 0x106, +0x13a, 0x106, 0x13a, 0xf8, 0x10d, 0xf8, 0x10d, 0x1ba, 0x1b1, 0x1ba, 0x1b1, +0x1ba, 0x1b1, 0x2d8, 0x2b1, 0x2d8, 0x2b1, 0x2cc, 0x289, 0x2cc, 0x289, 0x2e9, +0x28a, 0x2e9, 0x28a, 0x3de, 0x367, 0x3de, 0x367, 0x4c7, 0x439, 0x4c7, 0x439, +0x542, 0x4a1, 0x542, 0x4a1, 0x542, 0x4a1, 0x5f3, 0x541, 0x5f3, 0x541, 0x6f6, +0x636, 0x6f6, 0x636, 0x7c8, 0x6fe, 0x7c8, 0x6fe, 0x91c, 0x849, 0x91c, 0x849, +0xa0a, 0x934, 0xa0a, 0x934, 0xa0a, 0x934, 0xa05, 0x92d, 0xa05, 0x92d, 0x9d3, +0x8fc, 0x9d3, 0x8fc, 0x9b7, 0x8e4, 0x9b7, 0x8e4, 0x8e1, 0x815, 0x8e1, 0x815, +0x785, 0x6c1, 0x785, 0x6c1, 0x6b8, 0x600, 0x6b8, 0x600, 0x6b8, 0x600, 0x4d8, +0x42d, 0x4d8, 0x42d, 0x309, 0x26d, 0x309, 0x26d, 0x28f, 0x203, 0x28f, 0x203, +0x1da, 0x15f, 0x1da, 0x15f, 0x11a, 0xb0, 0x11a, 0xb0, 0xff69, 0xff11, 0xff69, +0xff11, 0xff69, 0xff11, 0xfd91, 0xfd4b, 0xfd91, 0xfd4b, 0xfca3, 0xfc6e, 0xfca3, 0xfc6e, +0xfb02, 0xfadd, 0xfb02, 0xfadd, 0xfa0b, 0xf9f3, 0xfa0b, 0xf9f3, 0xf93a, 0xf92e, 0xf93a, +0xf92e, 0xf93a, 0xf92e, 0xf82c, 0xf829, 0xf82c, 0xf829, 0xf8cb, 0xf8cc, 0xf8cb, 0xf8cc, +0xf8b8, 0xf8ba, 0xf8b8, 0xf8ba, 0xf7d5, 0xf7d4, 0xf7d5, 0xf7d4, 0xf7ec, 0xf7e3, 0xf7ec, +0xf7e3, 0xf8b1, 0xf89a, 0xf8b1, 0xf89a, 0xf8b1, 0xf89a, 0xf989, 0xf95f, 0xf989, 0xf95f, +0xfa50, 0xfa0e, 0xfa50, 0xfa0e, 0xfbbb, 0xfb5b, 0xfbbb, 0xfb5b, 0xfcdd, 0xfc5a, 0xfcdd, +0xfc5a, 0xfdda, 0xfd30, 0xfdda, 0xfd30, 0xff5f, 0xfe8a, 0xff5f, 0xfe8a, 0xff5f, 0xfe8a, +0x13, 0xff0e, 0x13, 0xff0e, 0xb8, 0xff82, 0xb8, 0xff82, 0x2bf, 0x156, 0x2bf, +0x156, 0x41f, 0x282, 0x41f, 0x282, 0x4eb, 0x31a, 0x4eb, 0x31a, 0x4eb, 0x31a, +0x61b, 0x418, 0x61b, 0x418, 0x6e6, 0x4b2, 0x6e6, 0x4b2, 0x899, 0x637, 0x899, +0x637, 0xa8f, 0x804, 0xa8f, 0x804, 0xc68, 0x9b8, 0xc68, 0x9b8, 0xe58, 0xb87, +0xe58, 0xb87, 0xe58, 0xb87, 0xf39, 0xc4d, 0xf39, 0xc4d, 0x1097, 0xd95, 0x1097, +0xd95, 0x1232, 0xf1f, 0x1232, 0xf1f, 0x1332, 0x1014, 0x1332, 0x1014, 0x1577, 0x1252, +0x1577, 0x1252, 0x177d, 0x1454, 0x177d, 0x1454, 0x177d, 0x1454, 0x1772, 0x144a, 0x1772, +0x144a, 0x177a, 0x1455, 0x177a, 0x1455, 0x17fd, 0x14dd, 0x17fd, 0x14dd, 0x17a8, 0x148e, +0x17a8, 0x148e, 0x173c, 0x1429, 0x173c, 0x1429, 0x173c, 0x1429, 0x1778, 0x146b, 0x1778, +0x146b, 0x173f, 0x1437, 0x173f, 0x1437, 0x16a2, 0x139d, 0x16a2, 0x139d, 0x161b, 0x1318, +0x161b, 0x1318, 0x1554, 0x1251, 0x1554, 0x1251, 0x13ee, 0x10e9, 0x13ee, 0x10e9, 0x13ee, +0x10e9, 0x12fb, 0xff2, 0x12fb, 0xff2, 0x13aa, 0x109b, 0x13aa, 0x109b, 0x1378, 0x1062, +0x1378, 0x1062, 0x1314, 0xff5, 0x1314, 0xff5, 0x1392, 0x106b, 0x1392, 0x106b, 0x1337, +0x1009, 0x1337, 0x1009, 0x1337, 0x1009, 0x1352, 0x101e, 0x1352, 0x101e, 0x13e0, 0x10a9, +0x13e0, 0x10a9, 0x1499, 0x1160, 0x1499, 0x1160, 0x1510, 0x11db, 0x1510, 0x11db, 0x1427, +0x10f9, 0x1427, 0x10f9, 0x1427, 0x10f9, 0x13de, 0x10bc, 0x13de, 0x10bc, 0x1410, 0x10ff, +0x1410, 0x10ff, 0x13ba, 0x10c1, 0x13ba, 0x10c1, 0x13c2, 0x10e5, 0x13c2, 0x10e5, 0x12d2, +0x1019, 0x12d2, 0x1019, 0x11f0, 0xf60, 0x11f0, 0xf60, 0x11f0, 0xf60, 0x11ea, 0xf8a, +0x11ea, 0xf8a, 0x112d, 0xf01, 0x112d, 0xf01, 0x1008, 0xe16, 0x1008, 0xe16, 0xe87, +0xcd4, 0xe87, 0xcd4, 0xd50, 0xbe1, 0xd50, 0xbe1, 0xd50, 0xbe1, 0xbfc, 0xad4, +0xbfc, 0xad4, 0xae7, 0xa0a, 0xae7, 0xa0a, 0xa9e, 0xa0d, 0xa9e, 0xa0d, 0x973, +0x931, 0x973, 0x931, 0x7ec, 0x7fa, 0x7ec, 0x7fa, 0x698, 0x6f6, 0x698, 0x6f6, +0x698, 0x6f6, 0x418, 0x4c7, 0x418, 0x4c7, 0x167, 0x265, 0x167, 0x265, 0x52, +0x19e, 0x52, 0x19e, 0xfe8c, 0x23, 0xfe8c, 0x23, 0xfc95, 0xfe74, 0xfc95, 0xfe74, +0xfb77, 0xfd9a, 0xfb77, 0xfd9a, 0xfb77, 0xfd9a, 0xf945, 0xfba7, 0xf945, 0xfba7, 0xf719, +0xf9b6, 0xf719, 0xf9b6, 0xf4e7, 0xf7b8, 0xf4e7, 0xf7b8, 0xf2b5, 0xf5b3, 0xf2b5, 0xf5b3, +0xf0c0, 0xf3e4, 0xf0c0, 0xf3e4, 0xf0c0, 0xf3e4, 0xee98, 0xf1da, 0xee98, 0xf1da, 0xed54, +0xf0ad, 0xed54, 0xf0ad, 0xebeb, 0xef52, 0xebeb, 0xef52, 0xe9ea, 0xed56, 0xe9ea, 0xed56, +0xe93c, 0xeca5, 0xe93c, 0xeca5, 0xe936, 0xec93, 0xe936, 0xec93, 0xe936, 0xec93, 0xe879, +0xebc2, 0xe879, 0xebc2, 0xe8e6, 0xec14, 0xe8e6, 0xec14, 0xeaa1, 0xedac, 0xeaa1, 0xedac, +0xeba6, 0xee88, 0xeba6, 0xee88, 0xecf2, 0xefa7, 0xecf2, 0xefa7, 0xeec9, 0xf14c, 0xeec9, +0xf14c, 0xeec9, 0xf14c, 0xf01b, 0xf269, 0xf01b, 0xf269, 0xf1e1, 0xf3f8, 0xf1e1, 0xf3f8, +0xf484, 0xf665, 0xf484, 0xf665, 0xf69d, 0xf848, 0xf69d, 0xf848, 0xf749, 0xf8bf, 0xf749, +0xf8bf, 0xf749, 0xf8bf, 0xf866, 0xf9ab, 0xf866, 0xf9ab, 0xfa11, 0xfb29, 0xfa11, 0xfb29, +0xfaa6, 0xfb95, 0xfaa6, 0xfb95, 0xfbb4, 0xfc7f, 0xfbb4, 0xfc7f, 0xfcea, 0xfd97, 0xfcea, +0xfd97, 0xfd3c, 0xfdd0, 0xfd3c, 0xfdd0, 0xfd3c, 0xfdd0, 0xfdd8, 0xfe59, 0xfdd8, 0xfe59, +0xfe94, 0xff08, 0xfe94, 0xff08, 0xff45, 0xffb1, 0xff45, 0xffb1, 0xfeeb, 0xff52, 0xfeeb, +0xff52, 0xfdfd, 0xfe64, 0xfdfd, 0xfe64, 0xfeef, 0xff57, 0xfeef, 0xff57, 0xfeef, 0xff57, +0xffa0, 0xc, 0xffa0, 0xc, 0xff9c, 0xd, 0xff9c, 0xd, 0x3f, 0xb6, 0x3f, +0xb6, 0x4c, 0xc9, 0x4c, 0xc9, 0x11f, 0x1a2, 0x11f, 0x1a2, 0x11f, 0x1a2, +0x2b5, 0x33c, 0x2b5, 0x33c, 0x3f4, 0x47f, 0x3f4, 0x47f, 0x47c, 0x50b, 0x47c, +0x50b, 0x481, 0x512, 0x481, 0x512, 0x54b, 0x5e0, 0x54b, 0x5e0, 0x5ac, 0x647, +0x5ac, 0x647, 0x5ac, 0x647, 0x5cc, 0x66e, 0x5cc, 0x66e, 0x644, 0x6f0, 0x644, +0x6f0, 0x5e1, 0x69c, 0x5e1, 0x69c, 0x4a7, 0x576, 0x4a7, 0x576, 0x37d, 0x466, +0x37d, 0x466, 0x1d9, 0x2e4, 0x1d9, 0x2e4, 0x1d9, 0x2e4, 0xf, 0x143, 0xf, +0x143, 0xfeda, 0x40, 0xfeda, 0x40, 0xfcb4, 0xfe53, 0xfcb4, 0xfe53, 0xfa81, 0xfc62, +0xfa81, 0xfc62, 0xf86a, 0xfa95, 0xf86a, 0xfa95, 0xf86a, 0xfa95, 0xf5e3, 0xf85d, 0xf5e3, +0xf85d, 0xf3bc, 0xf68a, 0xf3bc, 0xf68a, 0xf17a, 0xf4a0, 0xf17a, 0xf4a0, 0xef3c, 0xf2bd, +0xef3c, 0xf2bd, 0xecb8, 0xf093, 0xecb8, 0xf093, 0xe9f7, 0xee2a, 0xe9f7, 0xee2a, 0xe9f7, +0xee2a, 0xe754, 0xebdb, 0xe754, 0xebdb, 0xe498, 0xe96c, 0xe498, 0xe96c, 0xe274, 0xe78c, +0xe274, 0xe78c, 0xe178, 0xe6cb, 0xe178, 0xe6cb, 0xe084, 0xe606, 0xe084, 0xe606, 0xdf53, +0xe4f7, 0xdf53, 0xe4f7, 0xdf53, 0xe4f7, 0xdf28, 0xe4e0, 0xdf28, 0xe4e0, 0xdf86, 0xe544, +0xdf86, 0xe544, 0xdf6f, 0xe524, 0xdf6f, 0xe524, 0xdf68, 0xe507, 0xdf68, 0xe507, 0xdfdb, +0xe557, 0xdfdb, 0xe557, 0xdfdb, 0xe557, 0xdfce, 0xe51b, 0xdfce, 0xe51b, 0xdfb7, 0xe4cb, +0xdfb7, 0xe4cb, 0xe052, 0xe525, 0xe052, 0xe525, 0xe063, 0xe4ef, 0xe063, 0xe4ef, 0xe038, +0xe479, 0xe038, 0xe479, 0xe171, 0xe565, 0xe171, 0xe565, 0xe171, 0xe565, 0xe308, 0xe6af, +0xe308, 0xe6af, 0xe413, 0xe770, 0xe413, 0xe770, 0xe605, 0xe91a, 0xe605, 0xe91a, 0xe7c3, +0xea96, 0xe7c3, 0xea96, 0xe959, 0xebf0, 0xe959, 0xebf0, 0xebd6, 0xee36, 0xebd6, 0xee36, +0xebd6, 0xee36, 0xedf1, 0xf022, 0xedf1, 0xf022, 0xf026, 0xf22e, 0xf026, 0xf22e, 0xf132, +0xf316, 0xf132, 0xf316, 0xf13c, 0xf301, 0xf13c, 0xf301, 0xf238, 0xf3e0, 0xf238, 0xf3e0, +0xf238, 0xf3e0, 0xf268, 0xf3f6, 0xf268, 0xf3f6, 0xf278, 0xf3e9, 0xf278, 0xf3e9, 0xf285, +0xf3d9, 0xf285, 0xf3d9, 0xf1dd, 0xf30f, 0xf1dd, 0xf30f, 0xf250, 0xf35b, 0xf250, 0xf35b, +0xf330, 0xf40c, 0xf330, 0xf40c, 0xf330, 0xf40c, 0xf3c9, 0xf46f, 0xf3c9, 0xf46f, 0xf418, +0xf47d, 0xf418, 0xf47d, 0xf4f6, 0xf512, 0xf4f6, 0xf512, 0xf702, 0xf6cc, 0xf702, 0xf6cc, +0xf8cc, 0xf83b, 0xf8cc, 0xf83b, 0xfb05, 0xfa12, 0xfb05, 0xfa12, 0xfb05, 0xfa12, 0xfe3e, +0xfce1, 0xfe3e, 0xfce1, 0x108, 0xff3e, 0x108, 0xff3e, 0x3d2, 0x198, 0x3d2, 0x198, +0x721, 0x479, 0x721, 0x479, 0x9c6, 0x6b1, 0x9c6, 0x6b1, 0x9c6, 0x6b1, 0xc86, +0x90a, 0xc86, 0x90a, 0xf77, 0xb9b, 0xf77, 0xb9b, 0x11ff, 0xdcd, 0x11ff, 0xdcd, +0x1431, 0xfb6, 0x1431, 0xfb6, 0x15a6, 0x10f1, 0x15a6, 0x10f1, 0x1783, 0x12a1, 0x1783, +0x12a1, 0x1783, 0x12a1, 0x18f4, 0x13f8, 0x18f4, 0x13f8, 0x197c, 0x1475, 0x197c, 0x1475, +0x19f4, 0x14f4, 0x19f4, 0x14f4, 0x19f1, 0x1509, 0x19f1, 0x1509, 0x1991, 0x14d0, 0x1991, +0x14d0, 0x18c8, 0x143d, 0x18c8, 0x143d, 0x18c8, 0x143d, 0x1758, 0x130f, 0x1758, 0x130f, +0x15e8, 0x11eb, 0x15e8, 0x11eb, 0x150b, 0x1164, 0x150b, 0x1164, 0x1446, 0x10fa, 0x1446, +0x10fa, 0x13cb, 0x10df, 0x13cb, 0x10df, 0x13cb, 0x10df, 0x1327, 0x109c, 0x1327, 0x109c, +0x11c7, 0xf9e, 0x11c7, 0xf9e, 0xffd, 0xe32, 0xffd, 0xe32, 0xe2a, 0xcb8, 0xe2a, +0xcb8, 0xc98, 0xb7b, 0xc98, 0xb7b, 0xad5, 0xa05, 0xad5, 0xa05, 0xad5, 0xa05, +0x96c, 0x8e3, 0x96c, 0x8e3, 0x856, 0x80c, 0x856, 0x80c, 0x67f, 0x66a, 0x67f, +0x66a, 0x44b, 0x465, 0x44b, 0x465, 0x345, 0x387, 0x345, 0x387, 0x345, 0x387, +0x217, 0x279, 0x217, 0x279, 0x8c, 0x108, 0x8c, 0x108, 0x8e, 0x120, 0x8e, +0x120, 0xffce, 0x73, 0xffce, 0x73, 0xfe48, 0xfefc, 0xfe48, 0xfefc, 0xfce9, 0xfdaa, +0xfce9, 0xfdaa, 0xfce9, 0xfdaa, 0xfb31, 0xfbfe, 0xfb31, 0xfbfe, 0xfa2e, 0xfb07, 0xfa2e, +0xfb07, 0xf891, 0xf975, 0xf891, 0xf975, 0xf738, 0xf827, 0xf738, 0xf827, 0xf729, 0xf825, +0xf729, 0xf825, 0xf699, 0xf7a0, 0xf699, 0xf7a0, 0xf699, 0xf7a0, 0xf641, 0xf753, 0xf641, +0xf753, 0xf59e, 0xf6bc, 0xf59e, 0xf6bc, 0xf4e5, 0xf60b, 0xf4e5, 0xf60b, 0xf56d, 0xf69c, +0xf56d, 0xf69c, 0xf625, 0xf75a, 0xf625, 0xf75a, 0xf625, 0xf75a, 0xf6c9, 0xf800, 0xf6c9, +0xf800, 0xf6fc, 0xf832, 0xf6fc, 0xf832, 0xf76f, 0xf89f, 0xf76f, 0xf89f, 0xf893, 0xf9ba, +0xf893, 0xf9ba, 0xf983, 0xfa9b, 0xf983, 0xfa9b, 0xfb66, 0xfc6b, 0xfb66, 0xfc6b, 0xfb66, +0xfc6b, 0xfd85, 0xfe72, 0xfd85, 0xfe72, 0xfe6a, 0xff3c, 0xfe6a, 0xff3c, 0xffc2, 0x73, +0xffc2, 0x73, 0xa8, 0x135, 0xa8, 0x135, 0x4a, 0xb1, 0x4a, 0xb1, 0xa3, +0xe1, 0xa3, 0xe1, 0xa3, 0xe1, 0x111, 0x126, 0x111, 0x126, 0x19b, 0x185, +0x19b, 0x185, 0x233, 0x1f3, 0x233, 0x1f3, 0x2e7, 0x27f, 0x2e7, 0x27f, 0x425, +0x397, 0x425, 0x397, 0x425, 0x397, 0x49a, 0x3e9, 0x49a, 0x3e9, 0x56b, 0x49a, +0x56b, 0x49a, 0x6df, 0x5f2, 0x6df, 0x5f2, 0x7ba, 0x6b5, 0x7ba, 0x6b5, 0x891, +0x778, 0x891, 0x778, 0x986, 0x85f, 0x986, 0x85f, 0x986, 0x85f, 0x97c, 0x84c, +0x97c, 0x84c, 0x978, 0x843, 0x978, 0x843, 0xa5a, 0x925, 0xa5a, 0x925, 0xa64, +0x933, 0xa64, 0x933, 0x973, 0x84a, 0x973, 0x84a, 0x870, 0x752, 0x870, 0x752, +0x870, 0x752, 0x77b, 0x66d, 0x77b, 0x66d, 0x643, 0x547, 0x643, 0x547, 0x54d, +0x466, 0x54d, 0x466, 0x4af, 0x3df, 0x4af, 0x3df, 0x3a9, 0x2f1, 0x3a9, 0x2f1, +0x3a9, 0x2f1, 0x20e, 0x171, 0x20e, 0x171, 0x4f, 0xffcd, 0x4f, 0xffcd, 0xfe67, +0xfe01, 0xfe67, 0xfe01, 0xfc55, 0xfc0b, 0xfc55, 0xfc0b, 0xfba3, 0xfb75, 0xfba3, 0xfb75, +0xfad2, 0xfac0, 0xfad2, 0xfac0, 0xfad2, 0xfac0, 0xf9ba, 0xf9c2, 0xf9ba, 0xf9c2, 0xf9b8, +0xf9d8, 0xf9b8, 0xf9d8, 0xf916, 0xf94d, 0xf916, 0xf94d, 0xf8c4, 0xf90f, 0xf8c4, 0xf90f, +0xf898, 0xf8f5, 0xf898, 0xf8f5, 0xf856, 0xf8c0, 0xf856, 0xf8c0, 0xf856, 0xf8c0, 0xf89b, +0xf910, 0xf89b, 0xf910, 0xf81d, 0xf898, 0xf81d, 0xf898, 0xf8ce, 0xf94a, 0xf8ce, 0xf94a, +0xfa43, 0xfabb, 0xfa43, 0xfabb, 0xfb83, 0xfbf2, 0xfb83, 0xfbf2, 0xfb83, 0xfbf2, 0xfd6d, +0xfdce, 0xfd6d, 0xfdce, 0xfe14, 0xfe62, 0xfe14, 0xfe62, 0xfea6, 0xfedc, 0xfea6, 0xfedc, +0xffde, 0xfff8, 0xffde, 0xfff8, 0xe0, 0xd8, 0xe0, 0xd8, 0x1bc, 0x18f, 0x1bc, +0x18f, 0x1bc, 0x18f, 0x1fd, 0x1a7, 0x1fd, 0x1a7, 0x377, 0x2f6, 0x377, 0x2f6, +0x5d5, 0x526, 0x5d5, 0x526, 0x762, 0x684, 0x762, 0x684, 0x962, 0x856, 0x962, +0x856, 0xb7e, 0xa42, 0xb7e, 0xa42, 0xb7e, 0xa42, 0xd33, 0xbca, 0xd33, 0xbca, +0xffd, 0xe68, 0xffd, 0xe68, 0x122e, 0x1070, 0x122e, 0x1070, 0x1377, 0x1194, 0x1377, +0x1194, 0x1523, 0x131e, 0x1523, 0x131e, 0x1523, 0x131e, 0x167b, 0x1458, 0x167b, 0x1458, +0x1849, 0x160c, 0x1849, 0x160c, 0x1998, 0x1744, 0x1998, 0x1744, 0x1a1e, 0x17b9, 0x1a1e, +0x17b9, 0x1a6c, 0x17f8, 0x1a6c, 0x17f8, 0x1a27, 0x17a7, 0x1a27, 0x17a7, 0x1a27, 0x17a7, +0x1a42, 0x17ba, 0x1a42, 0x17ba, 0x1a06, 0x1779, 0x1a06, 0x1779, 0x18fa, 0x1668, 0x18fa, +0x1668, 0x180e, 0x1579, 0x180e, 0x1579, 0x1735, 0x149e, 0x1735, 0x149e, 0x15f6, 0x135c, +0x15f6, 0x135c, 0x15f6, 0x135c, 0x15ad, 0x1311, 0x15ad, 0x1311, 0x1658, 0x13b8, 0x1658, +0x13b8, 0x1635, 0x1391, 0x1635, 0x1391, 0x15ef, 0x1347, 0x15ef, 0x1347, 0x162e, 0x137f, +0x162e, 0x137f, 0x162e, 0x137f, 0x1645, 0x1390, 0x1645, 0x1390, 0x1662, 0x13a6, 0x1662, +0x13a6, 0x1704, 0x1443, 0x1704, 0x1443, 0x1765, 0x149e, 0x1765, 0x149e, 0x1752, 0x1488, +0x1752, 0x1488, 0x172b, 0x145f, 0x172b, 0x145f, 0x172b, 0x145f, 0x1744, 0x147a, 0x1744, +0x147a, 0x167a, 0x13b5, 0x167a, 0x13b5, 0x14f5, 0x123a, 0x14f5, 0x123a, 0x1504, 0x1258, +0x1504, 0x1258, 0x14c4, 0x122d, 0x14c4, 0x122d, 0x1445, 0x11c9, 0x1445, 0x11c9, 0x1445, +0x11c9, 0x1411, 0x11b7, 0x1411, 0x11b7, 0x130e, 0x10dc, 0x130e, 0x10dc, 0x120d, 0x100b, +0x120d, 0x100b, 0xfe2, 0xe17, 0xfe2, 0xe17, 0xe35, 0xca6, 0xe35, 0xca6, 0xe35, +0xca6, 0xcf3, 0xba7, 0xcf3, 0xba7, 0xae0, 0x9dc, 0xae0, 0x9dc, 0xa2e, 0x977, +0xa2e, 0x977, 0x912, 0x8aa, 0x912, 0x8aa, 0x773, 0x75e, 0x773, 0x75e, 0x5bb, +0x5fb, 0x5bb, 0x5fb, 0x5bb, 0x5fb, 0x32f, 0x3c2, 0x32f, 0x3c2, 0x18a, 0x271, +0x18a, 0x271, 0x2b, 0x163, 0x2b, 0x163, 0xfea2, 0x27, 0xfea2, 0x27, 0xfcc7, +0xfe95, 0xfcc7, 0xfe95, 0xfa3e, 0xfc4f, 0xfa3e, 0xfc4f, 0xfa3e, 0xfc4f, 0xf858, 0xfaa6, +0xf858, 0xfaa6, 0xf6c5, 0xf948, 0xf6c5, 0xf948, 0xf4e5, 0xf795, 0xf4e5, 0xf795, 0xf3d5, +0xf6a9, 0xf3d5, 0xf6a9, 0xf2a2, 0xf591, 0xf2a2, 0xf591, 0xf2a2, 0xf591, 0xf0ec, 0xf3ed, +0xf0ec, 0xf3ed, 0xefdc, 0xf2e4, 0xefdc, 0xf2e4, 0xedbc, 0xf0c3, 0xedbc, 0xf0c3, 0xeb37, +0xee34, 0xeb37, 0xee34, 0xe96e, 0xec59, 0xe96e, 0xec59, 0xe860, 0xeb30, 0xe860, 0xeb30, +0xe860, 0xeb30, 0xe887, 0xeb35, 0xe887, 0xeb35, 0xe872, 0xeaf7, 0xe872, 0xeaf7, 0xe883, +0xeadc, 0xe883, 0xeadc, 0xe92b, 0xeb51, 0xe92b, 0xeb51, 0xea7a, 0xec6c, 0xea7a, 0xec6c, +0xea7a, 0xec6c, 0xecb5, 0xee6f, 0xecb5, 0xee6f, 0xef1b, 0xf09d, 0xef1b, 0xf09d, 0xf0de, +0xf228, 0xf0de, 0xf228, 0xf22b, 0xf33f, 0xf22b, 0xf33f, 0xf3a1, 0xf480, 0xf3a1, 0xf480, +0xf4d9, 0xf586, 0xf4d9, 0xf586, 0xf4d9, 0xf586, 0xf730, 0xf7af, 0xf730, 0xf7af, 0xf9fe, +0xfa53, 0xf9fe, 0xfa53, 0xfb9c, 0xfbcb, 0xfb9c, 0xfbcb, 0xfd14, 0xfd21, 0xfd14, 0xfd21, +0xfe33, 0xfe24, 0xfe33, 0xfe24, 0xfe72, 0xfe4b, 0xfe72, 0xfe4b, 0xfe72, 0xfe4b, 0xfeb6, +0xfe7b, 0xfeb6, 0xfe7b, 0xff2d, 0xfee2, 0xff2d, 0xfee2, 0xff0c, 0xfeb4, 0xff0c, 0xfeb4, +0xfece, 0xfe6c, 0xfece, 0xfe6c, 0xfee9, 0xfe80, 0xfee9, 0xfe80, 0xfee9, 0xfe80, 0xff59, +0xfeea, 0xff59, 0xfeea, 0xff45, 0xfed1, 0xff45, 0xfed1, 0xff09, 0xfe90, 0xff09, 0xfe90, +0xff49, 0xfecc, 0xff49, 0xfecc, 0xff15, 0xfe94, 0xff15, 0xfe94, 0xffe5, 0xff5f, 0xffe5, +0xff5f, 0xffe5, 0xff5f, 0x12b, 0xa0, 0x12b, 0xa0, 0x1c4, 0x134, 0x1c4, 0x134, +0x217, 0x182, 0x217, 0x182, 0x253, 0x1ba, 0x253, 0x1ba, 0x3a9, 0x30d, 0x3a9, +0x30d, 0x3ca, 0x32f, 0x3ca, 0x32f, 0x3ca, 0x32f, 0x2e9, 0x251, 0x2e9, 0x251, +0x349, 0x2b9, 0x349, 0x2b9, 0x30f, 0x28d, 0x30f, 0x28d, 0x2e6, 0x277, 0x2e6, +0x277, 0x2b1, 0x25e, 0x2b1, 0x25e, 0x2b1, 0x25e, 0xf9, 0xca, 0xf9, 0xca, +0xff1d, 0xff1a, 0xff1d, 0xff1a, 0xfd6f, 0xfda1, 0xfd6f, 0xfda1, 0xfbdb, 0xfc4c, 0xfbdb, +0xfc4c, 0xf9d6, 0xfa8f, 0xf9d6, 0xfa8f, 0xf76a, 0xf872, 0xf76a, 0xf872, 0xf76a, 0xf872, +0xf5d8, 0xf737, 0xf5d8, 0xf737, 0xf40e, 0xf5ca, 0xf40e, 0xf5ca, 0xf1c6, 0xf3e4, 0xf1c6, +0xf3e4, 0xf014, 0xf296, 0xf014, 0xf296, 0xee04, 0xf0eb, 0xee04, 0xf0eb, 0xebe3, 0xef2e, +0xebe3, 0xef2e, 0xebe3, 0xef2e, 0xea29, 0xedd5, 0xea29, 0xedd5, 0xe7ba, 0xebc0, 0xe7ba, +0xebc0, 0xe537, 0xe98f, 0xe537, 0xe98f, 0xe31c, 0xe7bc, 0xe31c, 0xe7bc, 0xe1bc, 0xe699, +0xe1bc, 0xe699, 0xe1bc, 0xe699, 0xe0fb, 0xe608, 0xe0fb, 0xe608, 0xe089, 0xe5b7, 0xe089, +0xe5b7, 0xe0ad, 0xe5ed, 0xe0ad, 0xe5ed, 0xe0cb, 0xe60e, 0xe0cb, 0xe60e, 0xe131, 0xe667, +0xe131, 0xe667, 0xe1ca, 0xe6e5, 0xe1ca, 0xe6e5, 0xe1ca, 0xe6e5, 0xe1b8, 0xe6a9, 0xe1b8, +0xe6a9, 0xe0b2, 0xe56d, 0xe0b2, 0xe56d, 0xe02f, 0xe4aa, 0xe02f, 0xe4aa, 0xe066, 0xe498, +0xe066, 0xe498, 0xe083, 0xe466, 0xe083, 0xe466, 0xe1de, 0xe56e, 0xe1de, 0xe56e, 0xe1de, +0xe56e, 0xe39e, 0xe6d9, 0xe39e, 0xe6d9, 0xe48c, 0xe772, 0xe48c, 0xe772, 0xe5ba, 0xe84e, +0xe5ba, 0xe84e, 0xe807, 0xea4e, 0xe807, 0xea4e, 0xea47, 0xec47, 0xea47, 0xec47, 0xea47, +0xec47, 0xec59, 0xee18, 0xec59, 0xee18, 0xeeb5, 0xf03d, 0xeeb5, 0xf03d, 0xf02e, 0xf187, +0xf02e, 0xf187, 0xf186, 0xf2b8, 0xf186, 0xf2b8, 0xf31a, 0xf42d, 0xf31a, 0xf42d, 0xf424, +0xf51f, 0xf424, 0xf51f, 0xf424, 0xf51f, 0xf41b, 0xf503, 0xf41b, 0xf503, 0xf3c2, 0xf49c, +0xf3c2, 0xf49c, 0xf38f, 0xf45c, 0xf38f, 0xf45c, 0xf2d8, 0xf399, 0xf2d8, 0xf399, 0xf2c8, +0xf37b, 0xf2c8, 0xf37b, 0xf2f5, 0xf397, 0xf2f5, 0xf397, 0xf2f5, 0xf397, 0xf31b, 0xf3a5, +0xf31b, 0xf3a5, 0xf331, 0xf39e, 0xf331, 0xf39e, 0xf354, 0xf39b, 0xf354, 0xf39b, 0xf503, +0xf51b, 0xf503, 0xf51b, 0xf5f4, 0xf5d5, 0xf5f4, 0xf5d5, 0xf5f4, 0xf5d5, 0xf6c1, 0xf660, +0xf6c1, 0xf660, 0xf913, 0xf867, 0xf913, 0xf867, 0xfb05, 0xfa08, 0xfb05, 0xfa08, 0xfe31, +0xfcdc, 0xfe31, 0xfcdc, 0x1ce, 0x1c, 0x1ce, 0x1c, 0x46d, 0x25c, 0x46d, 0x25c, +0x46d, 0x25c, 0x798, 0x526, 0x798, 0x526, 0xb23, 0x854, 0xb23, 0x854, 0xe13, +0xae9, 0xe13, 0xae9, 0xfb1, 0xc35, 0xfb1, 0xc35, 0x11ae, 0xde8, 0x11ae, 0xde8, +0x146e, 0x1069, 0x146e, 0x1069, 0x146e, 0x1069, 0x1680, 0x1248, 0x1680, 0x1248, 0x188c, +0x142f, 0x188c, 0x142f, 0x1adf, 0x166b, 0x1adf, 0x166b, 0x1c0e, 0x1792, 0x1c0e, 0x1792, +0x1c3f, 0x17cb, 0x1c3f, 0x17cb, 0x1c3f, 0x17cb, 0x1be8, 0x1789, 0x1be8, 0x1789, 0x1a88, +0x164c, 0x1a88, 0x164c, 0x1927, 0x151a, 0x1927, 0x151a, 0x182d, 0x1459, 0x182d, 0x1459, +0x17ce, 0x143b, 0x17ce, 0x143b, 0x16ff, 0x13b3, 0x16ff, 0x13b3, 0x16ff, 0x13b3, 0x1582, +0x1281, 0x1582, 0x1281, 0x147a, 0x11c7, 0x147a, 0x11c7, 0x12f6, 0x1090, 0x12f6, 0x1090, +0x1196, 0xf7b, 0x1196, 0xf7b, 0x10bc, 0xee9, 0x10bc, 0xee9, 0xf2e, 0xd9e, 0xf2e, +0xd9e, 0xf2e, 0xd9e, 0xd0b, 0xbb6, 0xd0b, 0xbb6, 0xb6a, 0xa4a, 0xb6a, 0xa4a, +0x9b1, 0x8bf, 0x9b1, 0x8bf, 0x7ac, 0x6e0, 0x7ac, 0x6e0, 0x6a4, 0x5f7, 0x6a4, +0x5f7, 0x6a4, 0x5f7, 0x645, 0x5b2, 0x645, 0x5b2, 0x588, 0x509, 0x588, 0x509, +0x4c6, 0x456, 0x4c6, 0x456, 0x463, 0x3ff, 0x463, 0x3ff, 0x2cb, 0x271, 0x2cb, +0x271, 0xb2, 0x60, 0xb2, 0x60, 0xb2, 0x60, 0xff58, 0xff10, 0xff58, 0xff10, +0xfde4, 0xfda6, 0xfde4, 0xfda6, 0xfc9d, 0xfc6b, 0xfc9d, 0xfc6b, 0xfbf0, 0xfbce, 0xfbf0, +0xfbce, 0xfaf0, 0xfadf, 0xfaf0, 0xfadf, 0xf8d5, 0xf8d9, 0xf8d5, 0xf8d9, 0xf8d5, 0xf8d9, +0xf78e, 0xf7aa, 0xf78e, 0xf7aa, 0xf74b, 0xf77f, 0xf74b, 0xf77f, 0xf701, 0xf751, 0xf701, +0xf751, 0xf6fe, 0xf769, 0xf6fe, 0xf769, 0xf6a2, 0xf728, 0xf6a2, 0xf728, 0xf6a2, 0xf728, +0xf6af, 0xf74f, 0xf6af, 0xf74f, 0xf680, 0xf737, 0xf680, 0xf737, 0xf694, 0xf75f, 0xf694, +0xf75f, 0xf859, 0xf932, 0xf859, 0xf932, 0xf942, 0xfa25, 0xf942, 0xfa25, 0xfa50, 0xfb37, +0xfa50, 0xfb37, 0xfa50, 0xfb37, 0xfbf5, 0xfcd9, 0xfbf5, 0xfcd9, 0xfcbc, 0xfd97, 0xfcbc, +0xfd97, 0xfdb6, 0xfe82, 0xfdb6, 0xfe82, 0xfe55, 0xff0c, 0xfe55, 0xff0c, 0xfe63, 0xfeff, +0xfe63, 0xfeff, 0xfe63, 0xfeff, 0xfe25, 0xfea3, 0xfe25, 0xfea3, 0xfe98, 0xfef4, 0xfe98, +0xfef4, 0xff57, 0xff8e, 0xff57, 0xff8e, 0xff3b, 0xff4d, 0xff3b, 0xff4d, 0xff7b, 0xff67, +0xff7b, 0xff67, 0x1f, 0xffe8, 0x1f, 0xffe8, 0x1f, 0xffe8, 0xef, 0x97, 0xef, +0x97, 0x261, 0x1ec, 0x261, 0x1ec, 0x405, 0x377, 0x405, 0x377, 0x56b, 0x4cb, +0x56b, 0x4cb, 0x799, 0x6ec, 0x799, 0x6ec, 0x932, 0x87f, 0x932, 0x87f, 0x932, +0x87f, 0x985, 0x8d3, 0x985, 0x8d3, 0x9c3, 0x917, 0x9c3, 0x917, 0x9b3, 0x914, +0x9b3, 0x914, 0x9d9, 0x94c, 0x9d9, 0x94c, 0x987, 0x912, 0x987, 0x912, 0x987, +0x912, 0x92e, 0x8d4, 0x92e, 0x8d4, 0x913, 0x8d7, 0x913, 0x8d7, 0x845, 0x829, +0x845, 0x829, 0x72f, 0x735, 0x72f, 0x735, 0x623, 0x64c, 0x623, 0x64c, 0x479, +0x4c4, 0x479, 0x4c4, 0x479, 0x4c4, 0x25b, 0x2c8, 0x25b, 0x2c8, 0x114, 0x1a0, +0x114, 0x1a0, 0xff38, 0xffe1, 0xff38, 0xffe1, 0xfcd4, 0xfd98, 0xfcd4, 0xfd98, 0xfb73, +0xfc4e, 0xfb73, 0xfc4e, 0xfa97, 0xfb87, 0xfa97, 0xfb87, 0xfa97, 0xfb87, 0xf9b3, 0xfab5, +0xf9b3, 0xfab5, 0xf93e, 0xfa4e, 0xf93e, 0xfa4e, 0xf962, 0xfa7e, 0xf962, 0xfa7e, 0xf8d3, +0xf9f8, 0xf8d3, 0xf9f8, 0xf834, 0xf95f, 0xf834, 0xf95f, 0xf834, 0xf95f, 0xf807, 0xf935, +0xf807, 0xf935, 0xf77c, 0xf8aa, 0xf77c, 0xf8aa, 0xf76c, 0xf898, 0xf76c, 0xf898, 0xf89f, +0xf9c6, 0xf89f, 0xf9c6, 0xf9ca, 0xfae9, 0xf9ca, 0xfae9, 0xfa59, 0xfb6d, 0xfa59, 0xfb6d, +0xfa59, 0xfb6d, 0xfb9b, 0xfca0, 0xfb9b, 0xfca0, 0xfce0, 0xfdd3, 0xfce0, 0xfdd3, 0xfda8, +0xfe85, 0xfda8, 0xfe85, 0xfe4e, 0xff12, 0xfe4e, 0xff12, 0xfecb, 0xff70, 0xfecb, 0xff70, +0xffc3, 0x45, 0xffc3, 0x45, 0xffc3, 0x45, 0x50, 0xab, 0x50, 0xab, 0x167, +0x196, 0x167, 0x196, 0x2ec, 0x2ea, 0x2ec, 0x2ea, 0x2f0, 0x2ba, 0x2f0, 0x2ba, +0x3d7, 0x369, 0x3d7, 0x369, 0x3d7, 0x369, 0x5f2, 0x549, 0x5f2, 0x549, 0x85f, +0x77a, 0x85f, 0x77a, 0xaed, 0x9ca, 0xaed, 0x9ca, 0xccb, 0xb6a, 0xccb, 0xb6a, +0xe7d, 0xcdf, 0xe7d, 0xcdf, 0x100e, 0xe35, 0x100e, 0xe35, 0x100e, 0xe35, 0x1243, +0x1032, 0x1243, 0x1032, 0x145e, 0x1219, 0x145e, 0x1219, 0x1588, 0x1314, 0x1588, 0x1314, +0x170d, 0x1470, 0x170d, 0x1470, 0x1869, 0x15a9, 0x1869, 0x15a9, 0x18f6, 0x161b, 0x18f6, +0x161b, 0x18f6, 0x161b, 0x197a, 0x168b, 0x197a, 0x168b, 0x1960, 0x1663, 0x1960, 0x1663, +0x18d7, 0x15d5, 0x18d7, 0x15d5, 0x18c1, 0x15bf, 0x18c1, 0x15bf, 0x181f, 0x1523, 0x181f, +0x1523, 0x181f, 0x1523, 0x175e, 0x146d, 0x175e, 0x146d, 0x16ea, 0x1408, 0x16ea, 0x1408, +0x167d, 0x13ad, 0x167d, 0x13ad, 0x1664, 0x13a7, 0x1664, 0x13a7, 0x168c, 0x13e2, 0x168c, +0x13e2, 0x1679, 0x13e2, 0x1679, 0x13e2, 0x1679, 0x13e2, 0x164e, 0x13c8, 0x164e, 0x13c8, +0x1676, 0x13fd, 0x1676, 0x13fd, 0x1703, 0x1494, 0x1703, 0x1494, 0x17ed, 0x1584, 0x17ed, +0x1584, 0x17dc, 0x1575, 0x17dc, 0x1575, 0x17ad, 0x1542, 0x17ad, 0x1542, 0x17ad, 0x1542, +0x17b2, 0x1540, 0x17b2, 0x1540, 0x16d3, 0x1456, 0x16d3, 0x1456, 0x1663, 0x13d8, 0x1663, +0x13d8, 0x171b, 0x1481, 0x171b, 0x1481, 0x184e, 0x15a5, 0x184e, 0x15a5, 0x184e, 0x15a5, +0x189f, 0x15e8, 0x189f, 0x15e8, 0x18a1, 0x15de, 0x18a1, 0x15de, 0x17d8, 0x150f, 0x17d8, +0x150f, 0x1580, 0x12b5, 0x1580, 0x12b5, 0x13d8, 0x1114, 0x13d8, 0x1114, 0x12de, 0x1029, +0x12de, 0x1029, 0x12de, 0x1029, 0x1184, 0xee6, 0x1184, 0xee6, 0xffa, 0xd7f, 0xffa, +0xd7f, 0xe78, 0xc2a, 0xe78, 0xc2a, 0xc23, 0xa0e, 0xc23, 0xa0e, 0x98d, 0x7bb, +0x98d, 0x7bb, 0x80f, 0x68a, 0x80f, 0x68a, 0x80f, 0x68a, 0x645, 0x516, 0x645, +0x516, 0x471, 0x39f, 0x471, 0x39f, 0x2fa, 0x28c, 0x2fa, 0x28c, 0x150, 0x149, +0x150, 0x149, 0xff53, 0xffb6, 0xff53, 0xffb6, 0xff53, 0xffb6, 0xfc64, 0xfd2f, 0xfc64, +0xfd2f, 0xfa3c, 0xfb6e, 0xfa3c, 0xfb6e, 0xf834, 0xf9c7, 0xf834, 0xf9c7, 0xf597, 0xf785, +0xf597, 0xf785, 0xf43f, 0xf67e, 0xf43f, 0xf67e, 0xf2b5, 0xf53a, 0xf2b5, 0xf53a, 0xf2b5, +0xf53a, 0xf0c2, 0xf381, 0xf0c2, 0xf381, 0xef19, 0xf204, 0xef19, 0xf204, 0xed4a, 0xf054, +0xed4a, 0xf054, 0xeb5e, 0xee77, 0xeb5e, 0xee77, 0xe9af, 0xecc9, 0xe9af, 0xecc9, 0xe8ca, +0xebd7, 0xe8ca, 0xebd7, 0xe8ca, 0xebd7, 0xe771, 0xea64, 0xe771, 0xea64, 0xe5ce, 0xe89b, +0xe5ce, 0xe89b, 0xe5d4, 0xe871, 0xe5d4, 0xe871, 0xe6a1, 0xe906, 0xe6a1, 0xe906, 0xe7b0, +0xe9d7, 0xe7b0, 0xe9d7, 0xe7b0, 0xe9d7, 0xea11, 0xebf5, 0xea11, 0xebf5, 0xec7f, 0xee1d, +0xec7f, 0xee1d, 0xeea8, 0xf001, 0xeea8, 0xf001, 0xf126, 0xf23c, 0xf126, 0xf23c, 0xf312, +0xf3e9, 0xf312, 0xf3e9, 0xf4e5, 0xf580, 0xf4e5, 0xf580, 0xf4e5, 0xf580, 0xf773, 0xf7db, +0xf773, 0xf7db, 0xfa79, 0xfab3, 0xfa79, 0xfab3, 0xfd47, 0xfd5c, 0xfd47, 0xfd5c, 0xff31, +0xff29, 0xff31, 0xff29, 0x90, 0x72, 0x90, 0x72, 0x198, 0x16b, 0x198, 0x16b, +0x198, 0x16b, 0x181, 0x14d, 0x181, 0x14d, 0x16a, 0x133, 0x16a, 0x133, 0x1b4, +0x17f, 0x1b4, 0x17f, 0x15e, 0x12d, 0x15e, 0x12d, 0x10d, 0xe2, 0x10d, 0xe2, +0x10d, 0xe2, 0xc6, 0xa1, 0xc6, 0xa1, 0x4a, 0x2a, 0x4a, 0x2a, 0xffe8, +0xffcc, 0xffe8, 0xffcc, 0x63, 0x46, 0x63, 0x46, 0x103, 0xe2, 0x103, 0xe2, +0x12c, 0x104, 0x12c, 0x104, 0x12c, 0x104, 0x212, 0x1de, 0x212, 0x1de, 0x2aa, +0x267, 0x2aa, 0x267, 0x2f1, 0x29c, 0x2f1, 0x29c, 0x3f6, 0x38d, 0x3f6, 0x38d, +0x4ce, 0x451, 0x4ce, 0x451, 0x4ce, 0x451, 0x4c9, 0x439, 0x4c9, 0x439, 0x4c1, +0x420, 0x4c1, 0x420, 0x576, 0x4c9, 0x576, 0x4c9, 0x576, 0x4c3, 0x576, 0x4c3, +0x52f, 0x47d, 0x52f, 0x47d, 0x51d, 0x476, 0x51d, 0x476, 0x51d, 0x476, 0x385, +0x2f4, 0x385, 0x2f4, 0x143, 0xd3, 0x143, 0xd3, 0xff4a, 0xff07, 0xff4a, 0xff07, +0xfe16, 0xfe0d, 0xfe16, 0xfe0d, 0xfcab, 0xfce7, 0xfcab, 0xfce7, 0xfa0a, 0xfa98, 0xfa0a, +0xfa98, 0xfa0a, 0xfa98, 0xf7f6, 0xf8df, 0xf7f6, 0xf8df, 0xf543, 0xf691, 0xf543, 0xf691, +0xf217, 0xf3d0, 0xf217, 0xf3d0, 0xf000, 0xf229, 0xf000, 0xf229, 0xedca, 0xf066, 0xedca, +0xf066, 0xedca, 0xf066, 0xebad, 0xeebb, 0xebad, 0xeebb, 0xe9b3, 0xed31, 0xe9b3, 0xed31, +0xe74b, 0xeb32, 0xe74b, 0xeb32, 0xe491, 0xe8da, 0xe491, 0xe8da, 0xe21e, 0xe6be, 0xe21e, +0xe6be, 0xe0be, 0xe5a9, 0xe0be, 0xe5a9, 0xe0be, 0xe5a9, 0xdf6e, 0xe496, 0xdf6e, 0xe496, +0xde52, 0xe3a6, 0xde52, 0xe3a6, 0xdeb0, 0xe421, 0xdeb0, 0xe421, 0xdef2, 0xe46e, 0xdef2, +0xe46e, 0xded8, 0xe44f, 0xded8, 0xe44f, 0xdf50, 0xe4b2, 0xdf50, 0xe4b2, 0xdf50, 0xe4b2, +0xdf72, 0xe4af, 0xdf72, 0xe4af, 0xdfcd, 0xe4d9, 0xdfcd, 0xe4d9, 0xe0a3, 0xe571, 0xe0a3, +0xe571, 0xe0ef, 0xe577, 0xe0ef, 0xe577, 0xe0ad, 0xe4e6, 0xe0ad, 0xe4e6, 0xe0ad, 0xe4e6, +0xe0aa, 0xe492, 0xe0aa, 0xe492, 0xe186, 0xe518, 0xe186, 0xe518, 0xe2ab, 0xe5e9, 0xe2ab, +0xe5e9, 0xe3e3, 0xe6cf, 0xe3e3, 0xe6cf, 0xe5be, 0xe85c, 0xe5be, 0xe85c, 0xe7ed, 0xea42, +0xe7ed, 0xea42, 0xe7ed, 0xea42, 0xea06, 0xec1a, 0xea06, 0xec1a, 0xecb6, 0xee91, 0xecb6, +0xee91, 0xef5d, 0xf107, 0xef5d, 0xf107, 0xf0e6, 0xf268, 0xf0e6, 0xf268, 0xf237, 0xf398, +0xf237, 0xf398, 0xf37c, 0xf4c3, 0xf37c, 0xf4c3, 0xf37c, 0xf4c3, 0xf401, 0xf534, 0xf401, +0xf534, 0xf455, 0xf579, 0xf455, 0xf579, 0xf56c, 0xf683, 0xf56c, 0xf683, 0xf5b5, 0xf6c0, +0xf5b5, 0xf6c0, 0xf4bb, 0xf5b8, 0xf4bb, 0xf5b8, 0xf4bb, 0xf5b8, 0xf48a, 0xf577, 0xf48a, +0xf577, 0xf46c, 0xf544, 0xf46c, 0xf544, 0xf407, 0xf4c4, 0xf407, 0xf4c4, 0xf407, 0xf4a2, +0xf407, 0xf4a2, 0xf482, 0xf4f2, 0xf482, 0xf4f2, 0xf544, 0xf581, 0xf544, 0xf581, 0xf544, +0xf581, 0xf654, 0xf655, 0xf654, 0xf655, 0xf80e, 0xf7c9, 0xf80e, 0xf7c9, 0xf952, 0xf8c0, +0xf952, 0xf8c0, 0xfb30, 0xfa49, 0xfb30, 0xfa49, 0xfdef, 0xfcaf, 0xfdef, 0xfcaf, 0xb9, +0xff1a, 0xb9, 0xff1a, 0xb9, 0xff1a, 0x3da, 0x1da, 0x3da, 0x1da, 0x68f, 0x42d, +0x68f, 0x42d, 0x9a3, 0x6e2, 0x9a3, 0x6e2, 0xc15, 0x8f9, 0xc15, 0x8f9, 0xe12, +0xaa0, 0xe12, 0xaa0, 0xe12, 0xaa0, 0x1142, 0xd82, 0x1142, 0xd82, 0x13bd, 0xfb9, +0x13bd, 0xfb9, 0x15fb, 0x11be, 0x15fb, 0x11be, 0x184b, 0x13e1, 0x184b, 0x13e1, 0x1980, +0x14f7, 0x1980, 0x14f7, 0x19e7, 0x154c, 0x19e7, 0x154c, 0x19e7, 0x154c, 0x1975, 0x14d7, +0x1975, 0x14d7, 0x18c3, 0x142f, 0x18c3, 0x142f, 0x180f, 0x1393, 0x180f, 0x1393, 0x1762, +0x130b, 0x1762, 0x130b, 0x169e, 0x1278, 0x169e, 0x1278, 0x14e6, 0x10fb, 0x14e6, 0x10fb, +0x14e6, 0x10fb, 0x1307, 0xf5f, 0x1307, 0xf5f, 0x11dd, 0xe82, 0x11dd, 0xe82, 0x10ed, +0xde3, 0x10ed, 0xde3, 0x100b, 0xd56, 0x100b, 0xd56, 0xefd, 0xca1, 0xefd, 0xca1, +0xefd, 0xca1, 0xddb, 0xbd8, 0xddb, 0xbd8, 0xd0b, 0xb61, 0xd0b, 0xb61, 0xbfd, +0xaab, 0xbfd, 0xaab, 0xa4d, 0x950, 0xa4d, 0x950, 0x876, 0x7ca, 0x876, 0x7ca, +0x743, 0x6e4, 0x743, 0x6e4, 0x743, 0x6e4, 0x6b7, 0x6a0, 0x6b7, 0x6a0, 0x606, +0x632, 0x606, 0x632, 0x502, 0x56b, 0x502, 0x56b, 0x3de, 0x47e, 0x3de, 0x47e, +0x276, 0x349, 0x276, 0x349, 0x141, 0x241, 0x141, 0x241, 0x141, 0x241, 0xd8, +0x1ff, 0xd8, 0x1ff, 0xffd4, 0x11d, 0xffd4, 0x11d, 0xfdf2, 0xff59, 0xfdf2, 0xff59, +0xfc2c, 0xfdac, 0xfc2c, 0xfdac, 0xfa95, 0xfc2a, 0xfa95, 0xfc2a, 0xfa95, 0xfc2a, 0xf917, +0xfabb, 0xf917, 0xfabb, 0xf7e7, 0xf997, 0xf7e7, 0xf997, 0xf7c9, 0xf981, 0xf7c9, 0xf981, +0xf798, 0xf954, 0xf798, 0xf954, 0xf779, 0xf936, 0xf779, 0xf936, 0xf7ae, 0xf967, 0xf7ae, +0xf967, 0xf7ae, 0xf967, 0xf72b, 0xf8dc, 0xf72b, 0xf8dc, 0xf6cb, 0xf870, 0xf6cb, 0xf870, +0xf733, 0xf8c9, 0xf733, 0xf8c9, 0xf86a, 0xf9ed, 0xf86a, 0xf9ed, 0xf96c, 0xfad8, 0xf96c, +0xfad8, 0xfb16, 0xfc69, 0xfb16, 0xfc69, 0xfb16, 0xfc69, 0xfcdf, 0xfe15, 0xfcdf, 0xfe15, +0xfd2f, 0xfe46, 0xfd2f, 0xfe46, 0xfd99, 0xfe8f, 0xfd99, 0xfe8f, 0xfdf6, 0xfec9, 0xfdf6, +0xfec9, 0xfe30, 0xfedf, 0xfe30, 0xfedf, 0xfe30, 0xfedf, 0xfe01, 0xfe8c, 0xfe01, 0xfe8c, +0xfdf0, 0xfe57, 0xfdf0, 0xfe57, 0xfed1, 0xff16, 0xfed1, 0xff16, 0xfeb9, 0xfedc, 0xfeb9, +0xfedc, 0xfea0, 0xfea3, 0xfea0, 0xfea3, 0xff65, 0xff4c, 0xff65, 0xff4c, 0xff65, 0xff4c, +0xff8f, 0xff5d, 0xff8f, 0xff5d, 0xffa9, 0xff60, 0xffa9, 0xff60, 0x3c, 0xffe2, 0x3c, +0xffe2, 0x181, 0x119, 0x181, 0x119, 0x381, 0x311, 0x381, 0x311, 0x56e, 0x4f9, +0x56e, 0x4f9, 0x56e, 0x4f9, 0x6b0, 0x63a, 0x6b0, 0x63a, 0x704, 0x692, 0x704, +0x692, 0x749, 0x6de, 0x749, 0x6de, 0x797, 0x738, 0x797, 0x738, 0x764, 0x713, +0x764, 0x713, 0x764, 0x713, 0x770, 0x730, 0x770, 0x730, 0x77f, 0x752, 0x77f, +0x752, 0x716, 0x6fe, 0x716, 0x6fe, 0x6b0, 0x6af, 0x6b0, 0x6af, 0x5d8, 0x5ed, +0x5d8, 0x5ed, 0x4f2, 0x51f, 0x4f2, 0x51f, 0x4f2, 0x51f, 0x465, 0x4ab, 0x465, +0x4ab, 0x35f, 0x3bd, 0x35f, 0x3bd, 0x1d8, 0x24d, 0x1d8, 0x24d, 0xff86, 0x11, +0xff86, 0x11, 0xfd56, 0xfdf7, 0xfd56, 0xfdf7, 0xfd56, 0xfdf7, 0xfbe7, 0xfc9c, 0xfbe7, +0xfc9c, 0xfae2, 0xfbab, 0xfae2, 0xfbab, 0xfa93, 0xfb6e, 0xfa93, 0xfb6e, 0xfa92, 0xfb7d, +0xfa92, 0xfb7d, 0xfa37, 0xfb30, 0xfa37, 0xfb30, 0xf9da, 0xfadf, 0xf9da, 0xfadf, 0xf9da, +0xfadf, 0xf9f5, 0xfb04, 0xf9f5, 0xfb04, 0xf97f, 0xfa96, 0xf97f, 0xfa96, 0xf956, 0xfa72, +0xf956, 0xfa72, 0xfa30, 0xfb4e, 0xfa30, 0xfb4e, 0xfadf, 0xfbfa, 0xfadf, 0xfbfa, 0xfb26, +0xfc3b, 0xfb26, 0xfc3b, 0xfb26, 0xfc3b, 0xfbee, 0xfcf8, 0xfbee, 0xfcf8, 0xfd4f, 0xfe4a, +0xfd4f, 0xfe4a, 0xfe44, 0xff2b, 0xfe44, 0xff2b, 0xffb8, 0x86, 0xffb8, 0x86, 0x138, +0x1e8, 0x138, 0x1e8, 0x138, 0x1e8, 0x1d7, 0x263, 0x1d7, 0x263, 0x20b, 0x26e, +0x20b, 0x26e, 0x2b7, 0x2ec, 0x2b7, 0x2ec, 0x3d0, 0x3d3, 0x3d0, 0x3d3, 0x490, +0x45c, 0x490, 0x45c, 0x612, 0x5a5, 0x612, 0x5a5, 0x612, 0x5a5, 0x78a, 0x6e1, +0x78a, 0x6e1, 0x89b, 0x7b3, 0x89b, 0x7b3, 0xa46, 0x91f, 0xa46, 0x91f, 0xc18, +0xab2, 0xc18, 0xab2, 0xdbc, 0xc19, 0xdbc, 0xc19, 0xf2d, 0xd50, 0xf2d, 0xd50, +0xf2d, 0xd50, 0x115b, 0xf47, 0x115b, 0xf47, 0x139e, 0x1158, 0x139e, 0x1158, 0x14bf, +0x124b, 0x14bf, 0x124b, 0x16d5, 0x143a, 0x16d5, 0x143a, 0x192f, 0x1673, 0x192f, 0x1673, +0x192f, 0x1673, 0x1999, 0x16c3, 0x1999, 0x16c3, 0x1990, 0x16a7, 0x1990, 0x16a7, 0x1937, +0x1643, 0x1937, 0x1643, 0x185b, 0x1562, 0x185b, 0x1562, 0x1784, 0x148c, 0x1784, 0x148c, +0x1726, 0x1434, 0x1726, 0x1434, 0x1726, 0x1434, 0x16d9, 0x13f2, 0x16d9, 0x13f2, 0x15e2, +0x1309, 0x15e2, 0x1309, 0x15f5, 0x132d, 0x15f5, 0x132d, 0x165b, 0x13a5, 0x165b, 0x13a5, +0x1592, 0x12ed, 0x1592, 0x12ed, 0x1505, 0x1271, 0x1505, 0x1271, 0x1505, 0x1271, 0x14c4, +0x123f, 0x14c4, 0x123f, 0x14db, 0x1262, 0x14db, 0x1262, 0x1593, 0x1323, 0x1593, 0x1323, +0x1618, 0x13ad, 0x1618, 0x13ad, 0x16cf, 0x1465, 0x16cf, 0x1465, 0x16cf, 0x1465, 0x1768, +0x14fa, 0x1768, 0x14fa, 0x1808, 0x1592, 0x1808, 0x1592, 0x186f, 0x15ef, 0x186f, 0x15ef, +0x1835, 0x15a9, 0x1835, 0x15a9, 0x18ce, 0x1634, 0x18ce, 0x1634, 0x19d5, 0x172c, 0x19d5, +0x172c, 0x19d5, 0x172c, 0x1a5b, 0x17a6, 0x1a5b, 0x17a6, 0x1a47, 0x1788, 0x1a47, 0x1788, +0x1a18, 0x1753, 0x1a18, 0x1753, 0x18e4, 0x1620, 0x18e4, 0x1620, 0x1772, 0x14b5, 0x1772, +0x14b5, 0x16d8, 0x142b, 0x16d8, 0x142b, 0x16d8, 0x142b, 0x1556, 0x12c3, 0x1556, 0x12c3, +0x1386, 0x1116, 0x1386, 0x1116, 0x119b, 0xf59, 0x119b, 0xf59, 0xf0d, 0xd04, 0xf0d, +0xd04, 0xbfb, 0xa35, 0xbfb, 0xa35, 0xbfb, 0xa35, 0x9f5, 0x87c, 0x9f5, 0x87c, +0x8ce, 0x7ab, 0x8ce, 0x7ab, 0x75c, 0x698, 0x75c, 0x698, 0x6a2, 0x642, 0x6a2, +0x642, 0x592, 0x59a, 0x592, 0x59a, 0x3b0, 0x424, 0x3b0, 0x424, 0x3b0, 0x424, +0x126, 0x206, 0x126, 0x206, 0xfeda, 0x24, 0xfeda, 0x24, 0xfca0, 0xfe51, 0xfca0, +0xfe51, 0xf9cf, 0xfbe1, 0xf9cf, 0xfbe1, 0xf797, 0xfa02, 0xf797, 0xfa02, 0xf4ee, 0xf7a8, +0xf4ee, 0xf7a8, 0xf4ee, 0xf7a8, 0xf265, 0xf563, 0xf265, 0xf563, 0xf0d4, 0xf40a, 0xf0d4, +0xf40a, 0xef53, 0xf2b3, 0xef53, 0xf2b3, 0xed3d, 0xf0ba, 0xed3d, 0xf0ba, 0xea47, 0xedd2, +0xea47, 0xedd2, 0xea47, 0xedd2, 0xe89f, 0xec2c, 0xe89f, 0xec2c, 0xe76b, 0xeaec, 0xe76b, +0xeaec, 0xe555, 0xe8bd, 0xe555, 0xe8bd, 0xe4b2, 0xe7f7, 0xe4b2, 0xe7f7, 0xe480, 0xe797, +0xe480, 0xe797, 0xe465, 0xe748, 0xe465, 0xe748, 0xe465, 0xe748, 0xe559, 0xe801, 0xe559, +0xe801, 0xe6a9, 0xe910, 0xe6a9, 0xe910, 0xe84c, 0xea71, 0xe84c, 0xea71, 0xea5c, 0xec3d, +0xea5c, 0xec3d, 0xed12, 0xeeb0, 0xed12, 0xeeb0, 0xef71, 0xf0cf, 0xef71, 0xf0cf, 0xef71, +0xf0cf, 0xf19e, 0xf2be, 0xf19e, 0xf2be, 0xf4d9, 0xf5c0, 0xf4d9, 0xf5c0, 0xf7de, 0xf891, +0xf7de, 0xf891, 0xf9e8, 0xfa6d, 0xf9e8, 0xfa6d, 0xfc37, 0xfc93, 0xfc37, 0xfc93, 0xfc37, +0xfc93, 0xfdf6, 0xfe2e, 0xfdf6, 0xfe2e, 0xfe93, 0xfeae, 0xfe93, 0xfeae, 0xfef4, 0xfef6, +0xfef4, 0xfef6, 0xff17, 0xff05, 0xff17, 0xff05, 0xff67, 0xff44, 0xff67, 0xff44, 0xffb7, +0xff86, 0xffb7, 0xff86, 0xffb7, 0xff86, 0x43, 0x6, 0x43, 0x6, 0x60, 0x19, +0x60, 0x19, 0xffd1, 0xff7f, 0xffd1, 0xff7f, 0xffc8, 0xff6d, 0xffc8, 0xff6d, 0x6a, +0x5, 0x6a, 0x5, 0xfc, 0x8b, 0xfc, 0x8b, 0xfc, 0x8b, 0x186, 0x10a, +0x186, 0x10a, 0x292, 0x20a, 0x292, 0x20a, 0x2ec, 0x258, 0x2ec, 0x258, 0x383, +0x2e5, 0x383, 0x2e5, 0x472, 0x3cb, 0x472, 0x3cb, 0x472, 0x3cb, 0x4be, 0x40f, +0x4be, 0x40f, 0x511, 0x45e, 0x511, 0x45e, 0x5df, 0x52c, 0x5df, 0x52c, 0x631, +0x584, 0x631, 0x584, 0x527, 0x485, 0x527, 0x485, 0x4cf, 0x440, 0x4cf, 0x440, +0x4cf, 0x440, 0x442, 0x3cc, 0x442, 0x3cc, 0x319, 0x2c5, 0x319, 0x2c5, 0x213, +0x1e8, 0x213, 0x1e8, 0x79, 0x80, 0x79, 0x80, 0xfe60, 0xfea0, 0xfe60, 0xfea0, +0xfbe6, 0xfc67, 0xfbe6, 0xfc67, 0xfbe6, 0xfc67, 0xfa2b, 0xfaf3, 0xfa2b, 0xfaf3, 0xf7c2, +0xf8d7, 0xf7c2, 0xf8d7, 0xf51b, 0xf680, 0xf51b, 0xf680, 0xf310, 0xf4c8, 0xf310, 0xf4c8, +0xf077, 0xf282, 0xf077, 0xf282, 0xf077, 0xf282, 0xee36, 0xf094, 0xee36, 0xf094, 0xebc0, +0xee6f, 0xebc0, 0xee6f, 0xe94c, 0xec47, 0xe94c, 0xec47, 0xe6ad, 0xe9ee, 0xe6ad, 0xe9ee, +0xe3ff, 0xe77f, 0xe3ff, 0xe77f, 0xe300, 0xe6b6, 0xe300, 0xe6b6, 0xe300, 0xe6b6, 0xe1cc, +0xe5ae, 0xe1cc, 0xe5ae, 0xdff7, 0xe3fa, 0xdff7, 0xe3fa, 0xdf07, 0xe321, 0xdf07, 0xe321, +0xde22, 0xe247, 0xde22, 0xe247, 0xdd45, 0xe16b, 0xdd45, 0xe16b, 0xdd45, 0xe16b, 0xdd61, +0xe17b, 0xdd61, 0xe17b, 0xdd83, 0xe188, 0xdd83, 0xe188, 0xdd24, 0xe10a, 0xdd24, 0xe10a, +0xdd74, 0xe133, 0xdd74, 0xe133, 0xde17, 0xe1a8, 0xde17, 0xe1a8, 0xde52, 0xe1b1, 0xde52, +0xe1b1, 0xde52, 0xe1b1, 0xde2f, 0xe157, 0xde2f, 0xe157, 0xde94, 0xe181, 0xde94, 0xe181, +0xdf12, 0xe1c5, 0xdf12, 0xe1c5, 0xdf68, 0xe1e2, 0xdf68, 0xe1e2, 0xe0da, 0xe31c, 0xe0da, +0xe31c, 0xe284, 0xe492, 0xe284, 0xe492, 0xe284, 0xe492, 0xe536, 0xe713, 0xe536, 0xe713, +0xe862, 0xea12, 0xe862, 0xea12, 0xeb2c, 0xecb5, 0xeb2c, 0xecb5, 0xee10, 0xef77, 0xee10, +0xef77, 0xf07d, 0xf1c7, 0xf07d, 0xf1c7, 0xf07d, 0xf1c7, 0xf281, 0xf3b3, 0xf281, 0xf3b3, +0xf376, 0xf494, 0xf376, 0xf494, 0xf47b, 0xf589, 0xf47b, 0xf589, 0xf5a0, 0xf69f, 0xf5a0, +0xf69f, 0xf66e, 0xf760, 0xf66e, 0xf760, 0xf6a0, 0xf785, 0xf6a0, 0xf785, 0xf6a0, 0xf785, +0xf669, 0xf741, 0xf669, 0xf741, 0xf627, 0xf6ee, 0xf627, 0xf6ee, 0xf536, 0xf5eb, 0xf536, +0xf5eb, 0xf555, 0xf5f3, 0xf555, 0xf5f3, 0xf61f, 0xf6a1, 0xf61f, 0xf6a1, 0xf6a6, 0xf707, +0xf6a6, 0xf707, 0xf6a6, 0xf707, 0xf728, 0xf762, 0xf728, 0xf762, 0xf7fb, 0xf808, 0xf7fb, +0xf808, 0xf8ae, 0xf889, 0xf8ae, 0xf889, 0xf9b3, 0xf956, 0xf9b3, 0xf956, 0xfc5a, 0xfbc0, +0xfc5a, 0xfbc0, 0xfc5a, 0xfbc0, 0xfef4, 0xfe1a, 0xfef4, 0xfe1a, 0x1b6, 0x98, 0x1b6, +0x98, 0x4de, 0x37c, 0x4de, 0x37c, 0x7f0, 0x648, 0x7f0, 0x648, 0xa9d, 0x8b0, +0xa9d, 0x8b0, 0xd87, 0xb57, 0xd87, 0xb57, 0xd87, 0xb57, 0x1124, 0xeb6, 0x1124, +0xeb6, 0x1399, 0x10f2, 0x1399, 0x10f2, 0x1649, 0x136f, 0x1649, 0x136f, 0x190a, 0x1604, +0x190a, 0x1604, 0x1a78, 0x174f, 0x1a78, 0x174f, 0x1b81, 0x183e, 0x1b81, 0x183e, 0x1b81, +0x183e, 0x1bc5, 0x1872, 0x1bc5, 0x1872, 0x1b7d, 0x1826, 0x1b7d, 0x1826, 0x1a3e, 0x16ec, +0x1a3e, 0x16ec, 0x18d3, 0x1590, 0x18d3, 0x1590, 0x18a7, 0x157e, 0x18a7, 0x157e, 0x18a7, +0x157e, 0x177b, 0x1475, 0x177b, 0x1475, 0x1563, 0x1289, 0x1563, 0x1289, 0x141e, 0x1177, +0x141e, 0x1177, 0x1278, 0x100d, 0x1278, 0x100d, 0x10ab, 0xe80, 0x10ab, 0xe80, 0xf8f, +0xda8, 0xf8f, 0xda8, 0xf8f, 0xda8, 0xe15, 0xc75, 0xe15, 0xc75, 0xc75, 0xb1f, +0xc75, 0xb1f, 0xb8a, 0xa7d, 0xb8a, 0xa7d, 0xae5, 0xa22, 0xae5, 0xa22, 0x98a, +0x90d, 0x98a, 0x90d, 0x7ed, 0x7b3, 0x7ed, 0x7b3, 0x7ed, 0x7b3, 0x6b5, 0x6bc, +0x6b5, 0x6bc, 0x4c2, 0x503, 0x4c2, 0x503, 0x343, 0x3ba, 0x343, 0x3ba, 0x273, +0x319, 0x273, 0x319, 0x159, 0x229, 0x159, 0x229, 0x159, 0x229, 0x6e, 0x161, +0x6e, 0x161, 0xff31, 0x40, 0xff31, 0x40, 0xfe32, 0xff56, 0xfe32, 0xff56, 0xfd47, +0xfe7b, 0xfd47, 0xfe7b, 0xfc9f, 0xfddc, 0xfc9f, 0xfddc, 0xfbeb, 0xfd2c, 0xfbeb, 0xfd2c, +0xfbeb, 0xfd2c, 0xfab0, 0xfbf1, 0xfab0, 0xfbf1, 0xf9c4, 0xfafe, 0xf9c4, 0xfafe, 0xf909, +0xfa3a, 0xf909, 0xfa3a, 0xf8bc, 0xf9e0, 0xf8bc, 0xf9e0, 0xf869, 0xf97d, 0xf869, 0xf97d, +0xf87a, 0xf97a, 0xf87a, 0xf97a, 0xf87a, 0xf97a, 0xf838, 0xf925, 0xf838, 0xf925, 0xf816, +0xf8ed, 0xf816, 0xf8ed, 0xf937, 0xf9f7, 0xf937, 0xf9f7, 0xfa1b, 0xfac4, 0xfa1b, 0xfac4, +0xfac7, 0xfb59, 0xfac7, 0xfb59, 0xfac7, 0xfb59, 0xfbdd, 0xfc57, 0xfbdd, 0xfc57, 0xfd79, +0xfddc, 0xfd79, 0xfddc, 0xfe0c, 0xfe58, 0xfe0c, 0xfe58, 0xfe77, 0xfead, 0xfe77, 0xfead, +0xff41, 0xff61, 0xff41, 0xff61, 0xff15, 0xff20, 0xff15, 0xff20, 0xff15, 0xff20, 0xff10, +0xff07, 0xff10, 0xff07, 0xff6f, 0xff52, 0xff6f, 0xff52, 0x3e, 0xf, 0x3e, 0xf, +0x47, 0x6, 0x47, 0x6, 0x40, 0xffef, 0x40, 0xffef, 0xb0, 0x4e, 0xb0, +0x4e, 0xb0, 0x4e, 0x2f, 0xffbe, 0x2f, 0xffbe, 0x8c, 0xd, 0x8c, 0xd, +0x146, 0xba, 0x146, 0xba, 0x1ce, 0x135, 0x1ce, 0x135, 0x33c, 0x299, 0x33c, +0x299, 0x33c, 0x299, 0x4c6, 0x419, 0x4c6, 0x419, 0x621, 0x56b, 0x621, 0x56b, +0x6a2, 0x5e6, 0x6a2, 0x5e6, 0x735, 0x674, 0x735, 0x674, 0x867, 0x7a3, 0x867, +0x7a3, 0x808, 0x742, 0x808, 0x742, 0x808, 0x742, 0x73a, 0x674, 0x73a, 0x674, +0x707, 0x645, 0x707, 0x645, 0x684, 0x5c6, 0x684, 0x5c6, 0x604, 0x54e, 0x604, +0x54e, 0x595, 0x4e7, 0x595, 0x4e7, 0x48f, 0x3ed, 0x48f, 0x3ed, 0x48f, 0x3ed, +0x2c9, 0x233, 0x2c9, 0x233, 0x17c, 0xf5, 0x17c, 0xf5, 0x69, 0xfff1, 0x69, +0xfff1, 0xfe62, 0xfdfb, 0xfe62, 0xfdfb, 0xfc71, 0xfc1b, 0xfc71, 0xfc1b, 0xfc71, 0xfc1b, +0xfaf1, 0xfaad, 0xfaf1, 0xfaad, 0xf931, 0xf8ff, 0xf931, 0xf8ff, 0xf848, 0xf827, 0xf848, +0xf827, 0xf7fa, 0xf7e8, 0xf7fa, 0xf7e8, 0xf75f, 0xf75b, 0xf75f, 0xf75b, 0xf706, 0xf70d, +0xf706, 0xf70d, 0xf706, 0xf70d, 0xf721, 0xf731, 0xf721, 0xf731, 0xf810, 0xf825, 0xf810, +0xf825, 0xf95d, 0xf973, 0xf95d, 0xf973, 0xfa7e, 0xfa91, 0xfa7e, 0xfa91, 0xfafc, 0xfb07, +0xfafc, 0xfb07, 0xfaf2, 0xfaf0, 0xfaf2, 0xfaf0, 0xfaf2, 0xfaf0, 0xfb60, 0xfb4d, 0xfb60, +0xfb4d, 0xfcbf, 0xfc95, 0xfcbf, 0xfc95, 0xfe54, 0xfe0d, 0xfe54, 0xfe0d, 0xff83, 0xff1b, +0xff83, 0xff1b, 0xe9, 0x5a, 0xe9, 0x5a, 0xe9, 0x5a, 0x1c0, 0x107, 0x1c0, +0x107, 0x250, 0x169, 0x250, 0x169, 0x371, 0x257, 0x371, 0x257, 0x4a2, 0x353, +0x4a2, 0x353, 0x565, 0x3df, 0x565, 0x3df, 0x644, 0x486, 0x644, 0x486, 0x644, +0x486, 0x74a, 0x554, 0x74a, 0x554, 0x78f, 0x562, 0x78f, 0x562, 0x89b, 0x638, +0x89b, 0x638, 0xa86, 0x7ef, 0xa86, 0x7ef, 0xcac, 0x9e5, 0xcac, 0x9e5, 0xcac, +0x9e5, 0xf71, 0xc7e, 0xf71, 0xc7e, 0x121a, 0xf00, 0x121a, 0xf00, 0x1439, 0x10fd, +0x1439, 0x10fd, 0x15b7, 0x125f, 0x15b7, 0x125f, 0x17c2, 0x1455, 0x17c2, 0x1455, 0x19f5, +0x1679, 0x19f5, 0x1679, 0x19f5, 0x1679, 0x1b3a, 0x17b5, 0x1b3a, 0x17b5, 0x1c79, 0x18f2, +0x1c79, 0x18f2, 0x1ca1, 0x191d, 0x1ca1, 0x191d, 0x1b79, 0x17fe, 0x1b79, 0x17fe, 0x1a5b, +0x16ed, 0x1a5b, 0x16ed, 0x19a4, 0x1648, 0x19a4, 0x1648, 0x19a4, 0x1648, 0x196b, 0x1624, +0x196b, 0x1624, 0x1843, 0x1514, 0x1843, 0x1514, 0x1788, 0x1472, 0x1788, 0x1472, 0x17a6, +0x14a9, 0x17a6, 0x14a9, 0x16b9, 0x13d5, 0x16b9, 0x13d5, 0x16b9, 0x13d5, 0x163b, 0x136e, +0x163b, 0x136e, 0x161d, 0x1367, 0x161d, 0x1367, 0x15de, 0x133b, 0x15de, 0x133b, 0x15a8, +0x1317, 0x15a8, 0x1317, 0x1538, 0x12b5, 0x1538, 0x12b5, 0x14b4, 0x123b, 0x14b4, 0x123b, +0x14b4, 0x123b, 0x1495, 0x1223, 0x1495, 0x1223, 0x1599, 0x132b, 0x1599, 0x132b, 0x16a1, +0x1435, 0x16a1, 0x1435, 0x16ad, 0x1442, 0x16ad, 0x1442, 0x1701, 0x1495, 0x1701, 0x1495, +0x1785, 0x1518, 0x1785, 0x1518, 0x1785, 0x1518, 0x177e, 0x1513, 0x177e, 0x1513, 0x17d4, +0x156c, 0x17d4, 0x156c, 0x17d7, 0x1575, 0x17d7, 0x1575, 0x1774, 0x151d, 0x1774, 0x151d, +0x16a4, 0x145f, 0x16a4, 0x145f, 0x16a4, 0x145f, 0x1563, 0x1336, 0x1563, 0x1336, 0x1474, +0x1266, 0x1474, 0x1266, 0x1369, 0x1182, 0x1369, 0x1182, 0x1265, 0x10af, 0x1265, 0x10af, +0x10ab, 0xf2e, 0x10ab, 0xf2e, 0xe49, 0xd0d, 0xe49, 0xd0d, 0xe49, 0xd0d, 0xbf0, +0xafe, 0xbf0, 0xafe, 0xa55, 0x9b4, 0xa55, 0x9b4, 0x90a, 0x8c2, 0x90a, 0x8c2, +0x7d3, 0x7e8, 0x7d3, 0x7e8, 0x762, 0x7da, 0x762, 0x7da, 0x66f, 0x74b, 0x66f, +0x74b, 0x66f, 0x74b, 0x545, 0x686, 0x545, 0x686, 0x3a4, 0x549, 0x3a4, 0x549, +0xd6, 0x2dd, 0xd6, 0x2dd, 0xfd40, 0xffa2, 0xfd40, 0xffa2, 0xfa56, 0xfd0e, 0xfa56, +0xfd0e, 0xfa56, 0xfd0e, 0xf835, 0xfb3a, 0xf835, 0xfb3a, 0xf568, 0xf8b0, 0xf568, 0xf8b0, +0xf341, 0xf6c1, 0xf341, 0xf6c1, 0xf161, 0xf50d, 0xf161, 0xf50d, 0xef64, 0xf32f, 0xef64, +0xf32f, 0xedbf, 0xf19b, 0xedbf, 0xf19b, 0xedbf, 0xf19b, 0xec29, 0xf009, 0xec29, 0xf009, +0xeaa5, 0xee7b, 0xeaa5, 0xee7b, 0xe8a5, 0xec64, 0xe8a5, 0xec64, 0xe73d, 0xeada, 0xe73d, +0xeada, 0xe664, 0xe9d5, 0xe664, 0xe9d5, 0xe5cb, 0xe906, 0xe5cb, 0xe906, 0xe5cb, 0xe906, +0xe62f, 0xe92c, 0xe62f, 0xe92c, 0xe6a1, 0xe95a, 0xe6a1, 0xe95a, 0xe792, 0xea04, 0xe792, +0xea04, 0xe932, 0xeb5a, 0xe932, 0xeb5a, 0xeb9b, 0xed79, 0xeb9b, 0xed79, 0xeb9b, 0xed79, +0xee7f, 0xf014, 0xee7f, 0xf014, 0xf058, 0xf1a8, 0xf058, 0xf1a8, 0xf339, 0xf447, 0xf339, +0xf447, 0xf690, 0xf763, 0xf690, 0xf763, 0xf932, 0xf9d1, 0xf932, 0xf9d1, 0xfc64, 0xfcd5, +0xfc64, 0xfcd5, 0xfc64, 0xfcd5, 0xfe86, 0xfed2, 0xfe86, 0xfed2, 0xff63, 0xff91, 0xff63, +0xff91, 0xffa8, 0xffbf, 0xffa8, 0xffbf, 0xff90, 0xff98, 0xff90, 0xff98, 0xff44, 0xff43, +0xff44, 0xff43, 0xfee9, 0xfee4, 0xfee9, 0xfee4, 0xfee9, 0xfee4, 0xff85, 0xff80, 0xff85, +0xff80, 0xffe5, 0xffe3, 0xffe5, 0xffe3, 0xff39, 0xff3d, 0xff39, 0xff3d, 0xfef1, 0xfefb, +0xfef1, 0xfefb, 0xfed4, 0xfee5, 0xfed4, 0xfee5, 0xfed4, 0xfee5, 0xff03, 0xff19, 0xff03, +0xff19, 0xff98, 0xffb3, 0xff98, 0xffb3, 0xffe7, 0x3, 0xffe7, 0x3, 0x26, 0x41, +0x26, 0x41, 0x8f, 0xa8, 0x8f, 0xa8, 0x1bd, 0x1d1, 0x1bd, 0x1d1, 0x1bd, +0x1d1, 0x309, 0x316, 0x309, 0x316, 0x47d, 0x483, 0x47d, 0x483, 0x5d9, 0x5d7, +0x5d9, 0x5d7, 0x65a, 0x652, 0x65a, 0x652, 0x61f, 0x612, 0x61f, 0x612, 0x5d3, +0x5c6, 0x5d3, 0x5c6, 0x5d3, 0x5c6, 0x629, 0x620, 0x629, 0x620, 0x59e, 0x59f, +0x59e, 0x59f, 0x4f5, 0x507, 0x4f5, 0x507, 0x3d6, 0x402, 0x3d6, 0x402, 0x1b5, +0x202, 0x1b5, 0x202, 0x1b5, 0x202, 0xff96, 0xe, 0xff96, 0xe, 0xfda2, 0xfe4d, +0xfda2, 0xfe4d, 0xfbd0, 0xfcb7, 0xfbd0, 0xfcb7, 0xf955, 0xfa80, 0xf955, 0xfa80, 0xf785, +0xf8fc, 0xf785, 0xf8fc, 0xf50d, 0xf6d6, 0xf50d, 0xf6d6, 0xf50d, 0xf6d6, 0xf16d, 0xf38b, +0xf16d, 0xf38b, 0xee4b, 0xf0c3, 0xee4b, 0xf0c3, 0xeba5, 0xee77, 0xeba5, 0xee77, 0xe9ce, +0xecf8, 0xe9ce, 0xecf8, 0xe873, 0xebf4, 0xe873, 0xebf4, 0xe744, 0xeb16, 0xe744, 0xeb16, +0xe744, 0xeb16, 0xe4e9, 0xe905, 0xe4e9, 0xe905, 0xe25e, 0xe6bd, 0xe25e, 0xe6bd, 0xe10b, +0xe5a1, 0xe10b, 0xe5a1, 0xdfce, 0xe490, 0xdfce, 0xe490, 0xded5, 0xe3b7, 0xded5, 0xe3b7, +0xded5, 0xe3b7, 0xde4b, 0xe33f, 0xde4b, 0xe33f, 0xdddb, 0xe2d4, 0xdddb, 0xe2d4, 0xdd8c, +0xe27d, 0xdd8c, 0xe27d, 0xdd3b, 0xe217, 0xdd3b, 0xe217, 0xddbc, 0xe278, 0xddbc, 0xe278, +0xde1d, 0xe2ad, 0xde1d, 0xe2ad, 0xde1d, 0xe2ad, 0xdd3c, 0xe198, 0xdd3c, 0xe198, 0xdd69, +0xe189, 0xdd69, 0xe189, 0xddcb, 0xe1aa, 0xddcb, 0xe1aa, 0xdd8c, 0xe127, 0xdd8c, 0xe127, +0xde29, 0xe17d, 0xde29, 0xe17d, 0xdf2c, 0xe23a, 0xdf2c, 0xe23a, 0xdf2c, 0xe23a, 0xe0c3, +0xe38c, 0xe0c3, 0xe38c, 0xe325, 0xe5ae, 0xe325, 0xe5ae, 0xe606, 0xe853, 0xe606, 0xe853, +0xe8a3, 0xeaba, 0xe8a3, 0xeaba, 0xeae4, 0xeccc, 0xeae4, 0xeccc, 0xeae4, 0xeccc, 0xed92, +0xef51, 0xed92, 0xef51, 0xef55, 0xf0f3, 0xef55, 0xf0f3, 0xf043, 0xf1c6, 0xf043, 0xf1c6, +0xf19f, 0xf30d, 0xf19f, 0xf30d, 0xf276, 0xf3d4, 0xf276, 0xf3d4, 0xf2d2, 0xf423, 0xf2d2, +0xf423, 0xf2d2, 0xf423, 0xf2c3, 0xf408, 0xf2c3, 0xf408, 0xf284, 0xf3bf, 0xf284, 0xf3bf, +0xf228, 0xf357, 0xf228, 0xf357, 0xf1dc, 0xf2fc, 0xf1dc, 0xf2fc, 0xf279, 0xf386, 0xf279, +0xf386, 0xf279, 0xf386, 0xf334, 0xf429, 0xf334, 0xf429, 0xf408, 0xf4dd, 0xf408, 0xf4dd, +0xf52b, 0xf5d8, 0xf52b, 0xf5d8, 0xf6bc, 0xf739, 0xf6bc, 0xf739, 0xf801, 0xf845, 0xf801, +0xf845, 0xf997, 0xf99b, 0xf997, 0xf99b, 0xf997, 0xf99b, 0xfbba, 0xfb75, 0xfbba, 0xfb75, +0xfd5c, 0xfcc8, 0xfd5c, 0xfcc8, 0x14, 0xff2a, 0x14, 0xff2a, 0x393, 0x251, 0x393, +0x251, 0x717, 0x579, 0x717, 0x579, 0xab3, 0x8b9, 0xab3, 0x8b9, 0xab3, 0x8b9, +0xe8f, 0xc3b, 0xe8f, 0xc3b, 0x119d, 0xef2, 0x119d, 0xef2, 0x1429, 0x112e, 0x1429, +0x112e, 0x178b, 0x1447, 0x178b, 0x1447, 0x19ec, 0x1668, 0x19ec, 0x1668, 0x19ec, 0x1668, +0x1b3a, 0x1782, 0x1b3a, 0x1782, 0x1c10, 0x1830, 0x1c10, 0x1830, 0x1ca2, 0x18a7, 0x1ca2, +0x18a7, 0x1c8b, 0x1883, 0x1c8b, 0x1883, 0x1c1a, 0x1813, 0x1c1a, 0x1813, 0x1baf, 0x17b6, +0x1baf, 0x17b6, 0x1baf, 0x17b6, 0x1a42, 0x1666, 0x1a42, 0x1666, 0x1912, 0x155e, 0x1912, +0x155e, 0x1813, 0x1494, 0x1813, 0x1494, 0x1624, 0x12e2, 0x1624, 0x12e2, 0x13e4, 0x10e8, +0x13e4, 0x10e8, 0x1215, 0xf66, 0x1215, 0xf66, 0x1215, 0xf66, 0x1100, 0xea2, 0x1100, +0xea2, 0x101d, 0xe14, 0x101d, 0xe14, 0xf16, 0xd62, 0xf16, 0xd62, 0xe51, 0xcf2, +0xe51, 0xcf2, 0xc58, 0xb4b, 0xc58, 0xb4b, 0xc58, 0xb4b, 0x97f, 0x8bf, 0x97f, +0x8bf, 0x849, 0x7d3, 0x849, 0x7d3, 0x71a, 0x6e7, 0x71a, 0x6e7, 0x53f, 0x549, +0x53f, 0x549, 0x400, 0x43f, 0x400, 0x43f, 0x24b, 0x2b7, 0x24b, 0x2b7, 0x24b, +0x2b7, 0x64, 0xf7, 0x64, 0xf7, 0xff2b, 0xffdd, 0xff2b, 0xffdd, 0xfe30, 0xfefa, +0xfe30, 0xfefa, 0xfcba, 0xfd95, 0xfcba, 0xfd95, 0xfb10, 0xfbf6, 0xfb10, 0xfbf6, 0xfaad, +0xfb9a, 0xfaad, 0xfb9a, 0xfaad, 0xfb9a, 0xf9f3, 0xfae1, 0xf9f3, 0xfae1, 0xf89d, 0xf989, +0xf89d, 0xf989, 0xf793, 0xf87b, 0xf793, 0xf87b, 0xf67a, 0xf75a, 0xf67a, 0xf75a, 0xf5ec, +0xf6c3, 0xf5ec, 0xf6c3, 0xf5ec, 0xf6c3, 0xf54e, 0xf61b, 0xf54e, 0xf61b, 0xf58d, 0xf650, +0xf58d, 0xf650, 0xf5ad, 0xf665, 0xf5ad, 0xf665, 0xf59b, 0xf648, 0xf59b, 0xf648, 0xf680, +0xf722, 0xf680, 0xf722, 0xf7d0, 0xf867, 0xf7d0, 0xf867, 0xf7d0, 0xf867, 0xf9e0, 0xfa6c, +0xf9e0, 0xfa6c, 0xfbf2, 0xfc74, 0xfbf2, 0xfc74, 0xfdcf, 0xfe47, 0xfdcf, 0xfe47, 0xfe0a, +0xfe77, 0xfe0a, 0xfe77, 0xfe30, 0xfe92, 0xfe30, 0xfe92, 0xfed3, 0xff2a, 0xfed3, 0xff2a, +0xfed3, 0xff2a, 0xfee8, 0xff33, 0xfee8, 0xff33, 0xffc8, 0x7, 0xffc8, 0x7, 0x85, +0xb7, 0x85, 0xb7, 0xfa, 0x11f, 0xfa, 0x11f, 0x13a, 0x151, 0x13a, 0x151, +0x13a, 0x151, 0x1c5, 0x1ce, 0x1c5, 0x1ce, 0x1a4, 0x19e, 0x1a4, 0x19e, 0x15e, +0x148, 0x15e, 0x148, 0x1e6, 0x1c1, 0x1e6, 0x1c1, 0x1e1, 0x1ab, 0x1e1, 0x1ab, +0x216, 0x1d1, 0x216, 0x1d1, 0x216, 0x1d1, 0x2b4, 0x25f, 0x2b4, 0x25f, 0x452, +0x3ef, 0x452, 0x3ef, 0x624, 0x5b3, 0x624, 0x5b3, 0x7cf, 0x752, 0x7cf, 0x752, +0x8ec, 0x864, 0x8ec, 0x864, 0x862, 0x7cf, 0x862, 0x7cf, 0x862, 0x7cf, 0x853, +0x7b9, 0x853, 0x7b9, 0x876, 0x7d6, 0x876, 0x7d6, 0x812, 0x76e, 0x812, 0x76e, +0x7dc, 0x736, 0x7dc, 0x736, 0x7d8, 0x733, 0x7d8, 0x733, 0x7d8, 0x733, 0x7d6, +0x734, 0x7d6, 0x734, 0x6df, 0x643, 0x6df, 0x643, 0x55d, 0x4c7, 0x55d, 0x4c7, +0x3a3, 0x317, 0x3a3, 0x317, 0xdc, 0x5c, 0xdc, 0x5c, 0xfe75, 0xfe02, 0xfe75, +0xfe02, 0xfe75, 0xfe02, 0xfdd0, 0xfd6d, 0xfdd0, 0xfd6d, 0xfca3, 0xfc4f, 0xfca3, 0xfc4f, +0xfa7c, 0xfa3a, 0xfa7c, 0xfa3a, 0xf8e8, 0xf8b7, 0xf8e8, 0xf8b7, 0xf77c, 0xf75d, 0xf77c, +0xf75d, 0xf70f, 0xf701, 0xf70f, 0xf701, 0xf70f, 0xf701, 0xf798, 0xf799, 0xf798, 0xf799, +0xf7f8, 0xf808, 0xf7f8, 0xf808, 0xf783, 0xf79f, 0xf783, 0xf79f, 0xf786, 0xf7ab, 0xf786, +0xf7ab, 0xf8dc, 0xf907, 0xf8dc, 0xf907, 0xf8dc, 0xf907, 0xf958, 0xf986, 0xf958, 0xf986, +0xfa0e, 0xfa39, 0xfa0e, 0xfa39, 0xfab3, 0xfad7, 0xfab3, 0xfad7, 0xfb25, 0xfb3d, 0xfb25, +0xfb3d, 0xfc10, 0xfc16, 0xfc10, 0xfc16, 0xfd1e, 0xfd0d, 0xfd1e, 0xfd0d, 0xfd1e, 0xfd0d, +0xfed8, 0xfeaa, 0xfed8, 0xfeaa, 0xffd4, 0xff84, 0xffd4, 0xff84, 0x11f, 0xa7, 0x11f, +0xa7, 0x287, 0x1e2, 0x287, 0x1e2, 0x3dd, 0x307, 0x3dd, 0x307, 0x4fc, 0x3f1, +0x4fc, 0x3f1, 0x4fc, 0x3f1, 0x5ee, 0x4aa, 0x5ee, 0x4aa, 0x735, 0x5b7, 0x735, +0x5b7, 0x7aa, 0x5ef, 0x7aa, 0x5ef, 0x978, 0x780, 0x978, 0x780, 0xbcc, 0x998, +0xbcc, 0x998, 0xbcc, 0x998, 0xe1d, 0xbad, 0xe1d, 0xbad, 0x1098, 0xdf0, 0x1098, +0xdf0, 0x12b7, 0xfda, 0x12b7, 0xfda, 0x14e9, 0x11db, 0x14e9, 0x11db, 0x175c, 0x1422, +0x175c, 0x1422, 0x1a4a, 0x16eb, 0x1a4a, 0x16eb, 0x1a4a, 0x16eb, 0x1bb0, 0x1831, 0x1bb0, +0x1831, 0x1d25, 0x198e, 0x1d25, 0x198e, 0x1e43, 0x1a99, 0x1e43, 0x1a99, 0x1dc2, 0x1a0d, +0x1dc2, 0x1a0d, 0x1ce2, 0x1929, 0x1ce2, 0x1929, 0x1bd7, 0x181f, 0x1bd7, 0x181f, 0x1bd7, +0x181f, 0x1b5b, 0x17a9, 0x1b5b, 0x17a9, 0x1aad, 0x1708, 0x1aad, 0x1708, 0x1a8e, 0x16f7, +0x1a8e, 0x16f7, 0x1a4d, 0x16c9, 0x1a4d, 0x16c9, 0x19a8, 0x1639, 0x19a8, 0x1639, 0x19a8, +0x1639, 0x19d4, 0x167a, 0x19d4, 0x167a, 0x1961, 0x161c, 0x1961, 0x161c, 0x1857, 0x1527, +0x1857, 0x1527, 0x1746, 0x1429, 0x1746, 0x1429, 0x16a9, 0x139c, 0x16a9, 0x139c, 0x16a1, +0x13a2, 0x16a1, 0x13a2, 0x16a1, 0x13a2, 0x166f, 0x137a, 0x166f, 0x137a, 0x16a1, 0x13b3, +0x16a1, 0x13b3, 0x1703, 0x141a, 0x1703, 0x141a, 0x1699, 0x13b1, 0x1699, 0x13b1, 0x16cc, +0x13e3, 0x16cc, 0x13e3, 0x16cc, 0x13e3, 0x181c, 0x1531, 0x181c, 0x1531, 0x188a, 0x159d, +0x188a, 0x159d, 0x1876, 0x1588, 0x1876, 0x1588, 0x188e, 0x15a1, 0x188e, 0x15a1, 0x1825, +0x153c, 0x1825, 0x153c, 0x17ab, 0x14cb, 0x17ab, 0x14cb, 0x17ab, 0x14cb, 0x1734, 0x1463, +0x1734, 0x1463, 0x15e1, 0x1326, 0x15e1, 0x1326, 0x1381, 0x10e4, 0x1381, 0x10e4, 0x1242, +0xfcb, 0x1242, 0xfcb, 0x1189, 0xf42, 0x1189, 0xf42, 0xf73, 0xd64, 0xf73, 0xd64, +0xf73, 0xd64, 0xd01, 0xb35, 0xd01, 0xb35, 0xa2a, 0x8a9, 0xa2a, 0x8a9, 0x84a, +0x71e, 0x84a, 0x71e, 0x78a, 0x6b9, 0x78a, 0x6b9, 0x71c, 0x6ac, 0x71c, 0x6ac, +0x71c, 0x6ac, 0x64a, 0x642, 0x64a, 0x642, 0x4a5, 0x505, 0x4a5, 0x505, 0x31a, +0x3e5, 0x31a, 0x3e5, 0xd7, 0x20b, 0xd7, 0x20b, 0xfe58, 0xfff2, 0xfe58, 0xfff2, +0xfbcf, 0xfdcb, 0xfbcf, 0xfdcb, 0xfbcf, 0xfdcb, 0xf99a, 0xfbf0, 0xf99a, 0xfbf0, 0xf71d, +0xf9c5, 0xf71d, 0xf9c5, 0xf472, 0xf761, 0xf472, 0xf761, 0xf2e6, 0xf611, 0xf2e6, 0xf611, +0xf0f2, 0xf44b, 0xf0f2, 0xf44b, 0xef23, 0xf29d, 0xef23, 0xf29d, 0xef23, 0xf29d, 0xedd5, +0xf162, 0xedd5, 0xf162, 0xec34, 0xefc5, 0xec34, 0xefc5, 0xea02, 0xed8b, 0xea02, 0xed8b, +0xe8bc, 0xec30, 0xe8bc, 0xec30, 0xe817, 0xeb69, 0xe817, 0xeb69, 0xe817, 0xeb69, 0xe6c1, +0xe9e7, 0xe6c1, 0xe9e7, 0xe697, 0xe989, 0xe697, 0xe989, 0xe6e9, 0xe9a0, 0xe6e9, 0xe9a0, +0xe6ea, 0xe960, 0xe6ea, 0xe960, 0xe76c, 0xe99e, 0xe76c, 0xe99e, 0xe8dc, 0xeac9, 0xe8dc, +0xeac9, 0xe8dc, 0xeac9, 0xeb14, 0xecbe, 0xeb14, 0xecbe, 0xedeb, 0xef54, 0xedeb, 0xef54, +0xf1c8, 0xf2f4, 0xf1c8, 0xf2f4, 0xf520, 0xf615, 0xf520, 0xf615, 0xf7af, 0xf874, 0xf7af, +0xf874, 0xfaae, 0xfb4c, 0xfaae, 0xfb4c, 0xfaae, 0xfb4c, 0xfd04, 0xfd83, 0xfd04, 0xfd83, +0xfe78, 0xfee0, 0xfe78, 0xfee0, 0xff85, 0xffde, 0xff85, 0xffde, 0x7a, 0xcd, 0x7a, +0xcd, 0x135, 0x189, 0x135, 0x189, 0x135, 0x189, 0xaa, 0x106, 0xaa, 0x106, +0x86, 0xee, 0x86, 0xee, 0x71, 0xea, 0x71, 0xea, 0xff7a, 0x6, 0xff7a, +0x6, 0xff3f, 0xffe0, 0xff3f, 0xffe0, 0xff54, 0x9, 0xff54, 0x9, 0xff54, 0x9, +0xfecf, 0xff97, 0xfecf, 0xff97, 0xfe09, 0xfee2, 0xfe09, 0xfee2, 0xfdf1, 0xfed8, 0xfdf1, +0xfed8, 0xfe3a, 0xff2a, 0xfe3a, 0xff2a, 0xfea2, 0xff97, 0xfea2, 0xff97, 0xff75, 0x6b, +0xff75, 0x6b, 0xff75, 0x6b, 0xffcc, 0xc0, 0xffcc, 0xc0, 0xffc9, 0xb6, 0xffc9, +0xb6, 0x10d, 0x1f1, 0x10d, 0x1f1, 0x270, 0x348, 0x270, 0x348, 0x2d5, 0x3a0, +0x2d5, 0x3a0, 0x2d5, 0x3a0, 0x302, 0x3c0, 0x302, 0x3c0, 0x2bf, 0x373, 0x2bf, +0x373, 0x2b7, 0x364, 0x2b7, 0x364, 0x296, 0x33f, 0x296, 0x33f, 0x211, 0x2bc, +0x211, 0x2bc, 0x95, 0x149, 0x95, 0x149, 0x95, 0x149, 0xfe70, 0xff34, 0xfe70, +0xff34, 0xfcb1, 0xfd8d, 0xfcb1, 0xfd8d, 0xfaff, 0xfbfc, 0xfaff, 0xfbfc, 0xf9ac, 0xfad2, +0xf9ac, 0xfad2, 0xf7b9, 0xf90f, 0xf7b9, 0xf90f, 0xf551, 0xf6de, 0xf551, 0xf6de, 0xf551, +0xf6de, 0xf28e, 0xf459, 0xf28e, 0xf459, 0xf012, 0xf221, 0xf012, 0xf221, 0xee61, 0xf0b7, +0xee61, 0xf0b7, 0xec28, 0xeec6, 0xec28, 0xeec6, 0xea15, 0xecfc, 0xea15, 0xecfc, 0xea15, +0xecfc, 0xe827, 0xeb55, 0xe827, 0xeb55, 0xe620, 0xe992, 0xe620, 0xe992, 0xe42d, 0xe7de, +0xe42d, 0xe7de, 0xe31a, 0xe701, 0xe31a, 0xe701, 0xe1e6, 0xe5fc, 0xe1e6, 0xe5fc, 0xdfc6, +0xe400, 0xdfc6, 0xe400, 0xdfc6, 0xe400, 0xdeeb, 0xe33f, 0xdeeb, 0xe33f, 0xde36, 0xe297, +0xde36, 0xe297, 0xdd02, 0xe166, 0xdd02, 0xe166, 0xdc92, 0xe0ec, 0xdc92, 0xe0ec, 0xdd06, +0xe14a, 0xdd06, 0xe14a, 0xdda0, 0xe1c2, 0xdda0, 0xe1c2, 0xdda0, 0xe1c2, 0xddf7, 0xe1ef, +0xddf7, 0xe1ef, 0xdee0, 0xe2a4, 0xdee0, 0xe2a4, 0xdebc, 0xe245, 0xdebc, 0xe245, 0xde37, +0xe180, 0xde37, 0xe180, 0xdec7, 0xe1cc, 0xdec7, 0xe1cc, 0xdec7, 0xe1cc, 0xdf77, 0xe236, +0xdf77, 0xe236, 0xe0f8, 0xe371, 0xe0f8, 0xe371, 0xe2bf, 0xe4f5, 0xe2bf, 0xe4f5, 0xe575, +0xe76a, 0xe575, 0xe76a, 0xe854, 0xea0c, 0xe854, 0xea0c, 0xea59, 0xebdc, 0xea59, 0xebdc, +0xea59, 0xebdc, 0xed25, 0xee78, 0xed25, 0xee78, 0xef0f, 0xf039, 0xef0f, 0xf039, 0xefc9, +0xf0d3, 0xefc9, 0xf0d3, 0xf0c7, 0xf1b7, 0xf0c7, 0xf1b7, 0xf21a, 0xf2f7, 0xf21a, 0xf2f7, +0xf2ca, 0xf39a, 0xf2ca, 0xf39a, 0xf2ca, 0xf39a, 0xf31f, 0xf3e7, 0xf31f, 0xf3e7, 0xf3c3, +0xf486, 0xf3c3, 0xf486, 0xf3b7, 0xf478, 0xf3b7, 0xf478, 0xf33a, 0xf3f8, 0xf33a, 0xf3f8, +0xf2e3, 0xf39e, 0xf2e3, 0xf39e, 0xf2e3, 0xf39e, 0xf222, 0xf2d7, 0xf222, 0xf2d7, 0xf186, +0xf231, 0xf186, 0xf231, 0xf2d7, 0xf372, 0xf2d7, 0xf372, 0xf46b, 0xf4ee, 0xf46b, 0xf4ee, +0xf555, 0xf5ba, 0xf555, 0xf5ba, 0xf5f8, 0xf637, 0xf5f8, 0xf637, 0xf5f8, 0xf637, 0xf6d2, +0xf6e2, 0xf6d2, 0xf6e2, 0xf8bf, 0xf896, 0xf8bf, 0xf896, 0xfaea, 0xfa83, 0xfaea, 0xfa83, +0xfdbd, 0xfd0f, 0xfdbd, 0xfd0f, 0xbe, 0xffc4, 0xbe, 0xffc4, 0x469, 0x31e, 0x469, +0x31e, 0x469, 0x31e, 0x867, 0x6c9, 0x867, 0x6c9, 0xc57, 0xa64, 0xc57, 0xa64, +0x1068, 0xe22, 0x1068, 0xe22, 0x13d0, 0x1139, 0x13d0, 0x1139, 0x171c, 0x143a, 0x171c, +0x143a, 0x171c, 0x143a, 0x1960, 0x163a, 0x1960, 0x163a, 0x1b64, 0x1804, 0x1b64, 0x1804, +0x1cef, 0x195d, 0x1cef, 0x195d, 0x1d80, 0x19cb, 0x1d80, 0x19cb, 0x1dbc, 0x19ef, 0x1dbc, +0x19ef, 0x1d99, 0x19c3, 0x1d99, 0x19c3, 0x1d99, 0x19c3, 0x1d47, 0x1975, 0x1d47, 0x1975, +0x1c2d, 0x186d, 0x1c2d, 0x186d, 0x1b0d, 0x176c, 0x1b0d, 0x176c, 0x1901, 0x158d, 0x1901, +0x158d, 0x16fd, 0x13c2, 0x16fd, 0x13c2, 0x16fd, 0x13c2, 0x1639, 0x1340, 0x1639, 0x1340, +0x1545, 0x1297, 0x1545, 0x1297, 0x140a, 0x11ae, 0x140a, 0x11ae, 0x1239, 0x1033, 0x1239, +0x1033, 0x105a, 0xead, 0x105a, 0xead, 0xe70, 0xd1d, 0xe70, 0xd1d, 0xe70, 0xd1d, +0xd52, 0xc56, 0xd52, 0xc56, 0xca1, 0xbfa, 0xca1, 0xbfa, 0xa8a, 0xa34, 0xa8a, +0xa34, 0x89c, 0x88f, 0x89c, 0x88f, 0x6d4, 0x709, 0x6d4, 0x709, 0x4e5, 0x552, +0x4e5, 0x552, 0x4e5, 0x552, 0x32a, 0x3c8, 0x32a, 0x3c8, 0x1a1, 0x265, 0x1a1, +0x265, 0xed, 0x1ce, 0xed, 0x1ce, 0xffb7, 0xab, 0xffb7, 0xab, 0xfe57, 0xff58, +0xfe57, 0xff58, 0xfe57, 0xff58, 0xfdb1, 0xfeb5, 0xfdb1, 0xfeb5, 0xfc52, 0xfd53, 0xfc52, +0xfd53, 0xfa43, 0xfb3c, 0xfa43, 0xfb3c, 0xf8f2, 0xf9df, 0xf8f2, 0xf9df, 0xf830, 0xf90d, +0xf830, 0xf90d, 0xf74b, 0xf817, 0xf74b, 0xf817, 0xf74b, 0xf817, 0xf6a0, 0xf75a, 0xf6a0, +0xf75a, 0xf633, 0xf6dc, 0xf633, 0xf6dc, 0xf5f9, 0xf693, 0xf5f9, 0xf693, 0xf60a, 0xf698, +0xf60a, 0xf698, 0xf6ab, 0xf72f, 0xf6ab, 0xf72f, 0xf6d7, 0xf755, 0xf6d7, 0xf755, 0xf6d7, +0xf755, 0xf75a, 0xf7d5, 0xf75a, 0xf7d5, 0xf908, 0xf984, 0xf908, 0xf984, 0xfa3c, 0xfabb, +0xfa3c, 0xfabb, 0xfb1c, 0xfba2, 0xfb1c, 0xfba2, 0xfb96, 0xfc26, 0xfb96, 0xfc26, 0xfb96, +0xfc26, 0xfc65, 0xfd01, 0xfc65, 0xfd01, 0xfd16, 0xfdbe, 0xfd16, 0xfdbe, 0xfd71, 0xfe24, +0xfd71, 0xfe24, 0xfe02, 0xfec0, 0xfe02, 0xfec0, 0xfe15, 0xfedc, 0xfe15, 0xfedc, 0xfe85, +0xff54, 0xfe85, 0xff54, 0xfe85, 0xff54, 0xff0a, 0xffdf, 0xff0a, 0xffdf, 0xff7b, 0x50, +0xff7b, 0x50, 0xff79, 0x4c, 0xff79, 0x4c, 0xff9e, 0x6b, 0xff9e, 0x6b, 0x50, +0x113, 0x50, 0x113, 0xf2, 0x1a9, 0xf2, 0x1a9, 0xf2, 0x1a9, 0x214, 0x2bb, +0x214, 0x2bb, 0x331, 0x3c4, 0x331, 0x3c4, 0x474, 0x4f2, 0x474, 0x4f2, 0x5ec, +0x654, 0x5ec, 0x654, 0x76e, 0x7bf, 0x76e, 0x7bf, 0x76e, 0x7bf, 0x839, 0x873, +0x839, 0x873, 0x88f, 0x8b3, 0x88f, 0x8b3, 0x8fa, 0x90b, 0x8fa, 0x90b, 0x89f, +0x89f, 0x89f, 0x89f, 0x879, 0x86b, 0x879, 0x86b, 0x8e0, 0x8c8, 0x8e0, 0x8c8, +0x8e0, 0x8c8, 0x8fd, 0x8df, 0x8fd, 0x8df, 0x7ef, 0x7ce, 0x7ef, 0x7ce, 0x63a, +0x61d, 0x63a, 0x61d, 0x497, 0x481, 0x497, 0x481, 0x2a4, 0x298, 0x2a4, 0x298, +0x138, 0x13a, 0x138, 0x13a, 0x138, 0x13a, 0xffd6, 0xffe9, 0xffd6, 0xffe9, 0xfdcd, +0xfdf4, 0xfdcd, 0xfdf4, 0xfc34, 0xfc6f, 0xfc34, 0xfc6f, 0xfad8, 0xfb29, 0xfad8, 0xfb29, +0xf984, 0xf9ea, 0xf984, 0xf9ea, 0xf984, 0xf9ea, 0xf880, 0xf8fb, 0xf880, 0xf8fb, 0xf7b6, +0xf842, 0xf7b6, 0xf842, 0xf77f, 0xf81a, 0xf77f, 0xf81a, 0xf77a, 0xf821, 0xf77a, 0xf821, +0xf82f, 0xf8de, 0xf82f, 0xf8de, 0xf96e, 0xfa1f, 0xf96e, 0xfa1f, 0xf96e, 0xfa1f, 0xf968, +0xfa17, 0xf968, 0xfa17, 0xf8f1, 0xf998, 0xf8f1, 0xf998, 0xf90b, 0xf9a4, 0xf90b, 0xf9a4, +0xf94a, 0xf9d1, 0xf94a, 0xf9d1, 0xf9c8, 0xfa36, 0xf9c8, 0xfa36, 0xfab1, 0xfb00, 0xfab1, +0xfb00, 0xfab1, 0xfb00, 0xfc06, 0xfc33, 0xfc06, 0xfc33, 0xfd5c, 0xfd61, 0xfd5c, 0xfd61, +0xff0a, 0xfee4, 0xff0a, 0xfee4, 0xb5, 0x62, 0xb5, 0x62, 0xe5, 0x60, 0xe5, +0x60, 0xe5, 0x60, 0x11e, 0x67, 0x11e, 0x67, 0x223, 0x138, 0x223, 0x138, +0x36c, 0x24d, 0x36c, 0x24d, 0x4e9, 0x395, 0x4e9, 0x395, 0x609, 0x482, 0x609, +0x482, 0x786, 0x5cd, 0x786, 0x5cd, 0x786, 0x5cd, 0x951, 0x768, 0x951, 0x768, +0xbb0, 0x999, 0xbb0, 0x999, 0xe5e, 0xc1d, 0xe5e, 0xc1d, 0x10c8, 0xe5e, 0x10c8, +0xe5e, 0x136a, 0x10dc, 0x136a, 0x10dc, 0x15f9, 0x1349, 0x15f9, 0x1349, 0x15f9, 0x1349, +0x180e, 0x1540, 0x180e, 0x1540, 0x197f, 0x1697, 0x197f, 0x1697, 0x1b57, 0x1857, 0x1b57, +0x1857, 0x1cfa, 0x19e6, 0x1cfa, 0x19e6, 0x1d6c, 0x1a47, 0x1d6c, 0x1a47, 0x1d6c, 0x1a47, +0x1d60, 0x1a2b, 0x1d60, 0x1a2b, 0x1cab, 0x196a, 0x1cab, 0x196a, 0x1b7d, 0x1832, 0x1b7d, +0x1832, 0x1b0e, 0x17b9, 0x1b0e, 0x17b9, 0x1b7d, 0x1820, 0x1b7d, 0x1820, 0x1b40, 0x17dd, +0x1b40, 0x17dd, 0x1b40, 0x17dd, 0x1abc, 0x1753, 0x1abc, 0x1753, 0x1a81, 0x1711, 0x1a81, +0x1711, 0x19ad, 0x1637, 0x19ad, 0x1637, 0x18f9, 0x157c, 0x18f9, 0x157c, 0x1905, 0x1582, +0x1905, 0x1582, 0x18ce, 0x1543, 0x18ce, 0x1543, 0x18ce, 0x1543, 0x17c7, 0x1435, 0x17c7, +0x1435, 0x170c, 0x1372, 0x170c, 0x1372, 0x171c, 0x137a, 0x171c, 0x137a, 0x173d, 0x1393, +0x173d, 0x1393, 0x181e, 0x146d, 0x181e, 0x146d, 0x181e, 0x146d, 0x1956, 0x159f, 0x1956, +0x159f, 0x19ce, 0x1612, 0x19ce, 0x1612, 0x1a59, 0x169b, 0x1a59, 0x169b, 0x1aca, 0x170c, +0x1aca, 0x170c, 0x1ade, 0x1725, 0x1ade, 0x1725, 0x1a11, 0x1662, 0x1a11, 0x1662, 0x1a11, +0x1662, 0x1962, 0x15c1, 0x1962, 0x15c1, 0x198b, 0x15ff, 0x198b, 0x15ff, 0x1878, 0x1507, +0x1878, 0x1507, 0x16f1, 0x13a4, 0x16f1, 0x13a4, 0x1551, 0x122f, 0x1551, 0x122f, 0x1278, +0xf89, 0x1278, 0xf89, 0x1278, 0xf89, 0xf75, 0xcc2, 0xf75, 0xcc2, 0xd65, 0xaf7, +0xd65, 0xaf7, 0xbfe, 0x9dc, 0xbfe, 0x9dc, 0xa8e, 0x8c1, 0xa8e, 0x8c1, 0x933, +0x7c1, 0x933, 0x7c1, 0x933, 0x7c1, 0x7fc, 0x6ec, 0x7fc, 0x6ec, 0x69d, 0x5f4, +0x69d, 0x5f4, 0x55a, 0x51c, 0x55a, 0x51c, 0x392, 0x3c1, 0x392, 0x3c1, 0xae, +0x14a, 0xae, 0x14a, 0xfdd2, 0xfeda, 0xfdd2, 0xfeda, 0xfdd2, 0xfeda, 0xfb07, 0xfc79, +0xfb07, 0xfc79, 0xf842, 0xfa17, 0xf842, 0xfa17, 0xf555, 0xf788, 0xf555, 0xf788, 0xf296, +0xf51e, 0xf296, 0xf51e, 0xf0e3, 0xf3b6, 0xf0e3, 0xf3b6, 0xf0e3, 0xf3b6, 0xef45, 0xf258, +0xef45, 0xf258, 0xedb2, 0xf0f7, 0xedb2, 0xf0f7, 0xec33, 0xef9d, 0xec33, 0xef9d, 0xea6f, +0xedf1, 0xea6f, 0xedf1, 0xe884, 0xec0e, 0xe884, 0xec0e, 0xe752, 0xead7, 0xe752, 0xead7, +0xe752, 0xead7, 0xe6c1, 0xea33, 0xe6c1, 0xea33, 0xe631, 0xe983, 0xe631, 0xe983, 0xe658, +0xe97e, 0xe658, 0xe97e, 0xe673, 0xe963, 0xe673, 0xe963, 0xe6a8, 0xe959, 0xe6a8, 0xe959, +0xe7d5, 0xea40, 0xe7d5, 0xea40, 0xe7d5, 0xea40, 0xe9a8, 0xebc9, 0xe9a8, 0xebc9, 0xec2e, +0xee01, 0xec2e, 0xee01, 0xefe2, 0xf166, 0xefe2, 0xf166, 0xf3da, 0xf511, 0xf3da, 0xf511, +0xf691, 0xf77f, 0xf691, 0xf77f, 0xf691, 0xf77f, 0xf944, 0xf9ed, 0xf944, 0xf9ed, 0xfc28, +0xfc93, 0xfc28, 0xfc93, 0xfe75, 0xfea9, 0xfe75, 0xfea9, 0xae, 0xb4, 0xae, 0xb4, +0x29a, 0x27b, 0x29a, 0x27b, 0x399, 0x35e, 0x399, 0x35e, 0x399, 0x35e, 0x34c, +0x2ff, 0x34c, 0x2ff, 0x306, 0x2b0, 0x306, 0x2b0, 0x2de, 0x287, 0x2de, 0x287, +0x209, 0x1b8, 0x209, 0x1b8, 0x19b, 0x155, 0x19b, 0x155, 0x11f, 0xe9, 0x11f, +0xe9, 0x11f, 0xe9, 0x67, 0x46, 0x67, 0x46, 0x19, 0xc, 0x19, 0xc, +0x33, 0x3b, 0x33, 0x3b, 0x4e, 0x6b, 0x4e, 0x6b, 0xffd4, 0x3, 0xffd4, +0x3, 0xffd4, 0x3, 0x45, 0x83, 0x45, 0x83, 0x16f, 0x1b9, 0x16f, 0x1b9, +0x1be, 0x210, 0x1be, 0x210, 0x25c, 0x2b2, 0x25c, 0x2b2, 0x342, 0x398, 0x342, +0x398, 0x35b, 0x3af, 0x35b, 0x3af, 0x35b, 0x3af, 0x36e, 0x3bd, 0x36e, 0x3bd, +0x3c1, 0x40b, 0x3c1, 0x40b, 0x3b8, 0x3fd, 0x3b8, 0x3fd, 0x310, 0x353, 0x310, +0x353, 0x255, 0x298, 0x255, 0x298, 0x1a7, 0x1ef, 0x1a7, 0x1ef, 0x1a7, 0x1ef, +0x4b, 0x9f, 0x4b, 0x9f, 0xfebb, 0xff22, 0xfebb, 0xff22, 0xfc82, 0xfd05, 0xfc82, +0xfd05, 0xf98f, 0xfa38, 0xf98f, 0xfa38, 0xf703, 0xf7db, 0xf703, 0xf7db, 0xf703, 0xf7db, +0xf525, 0xf637, 0xf525, 0xf637, 0xf393, 0xf4e7, 0xf393, 0xf4e7, 0xf102, 0xf2a2, 0xf102, +0xf2a2, 0xee24, 0xf017, 0xee24, 0xf017, 0xeba5, 0xedf2, 0xeba5, 0xedf2, 0xe94c, 0xebf7, +0xe94c, 0xebf7, 0xe94c, 0xebf7, 0xe72b, 0xea36, 0xe72b, 0xea36, 0xe55f, 0xe8ca, 0xe55f, +0xe8ca, 0xe3eb, 0xe7b4, 0xe3eb, 0xe7b4, 0xe24a, 0xe66d, 0xe24a, 0xe66d, 0xe0e1, 0xe556, +0xe0e1, 0xe556, 0xdefe, 0xe3bb, 0xdefe, 0xe3bb, 0xdefe, 0xe3bb, 0xdd3c, 0xe237, 0xdd3c, +0xe237, 0xdc67, 0xe194, 0xdc67, 0xe194, 0xdbc0, 0xe10f, 0xdbc0, 0xe10f, 0xdb97, 0xe0fa, +0xdb97, 0xe0fa, 0xdbfd, 0xe164, 0xdbfd, 0xe164, 0xdbfd, 0xe164, 0xdc9b, 0xe1f6, 0xdc9b, +0xe1f6, 0xdca9, 0xe1e9, 0xdca9, 0xe1e9, 0xdcfe, 0xe215, 0xdcfe, 0xe215, 0xdd3e, 0xe21f, +0xdd3e, 0xe21f, 0xdd03, 0xe1a3, 0xdd03, 0xe1a3, 0xddcc, 0xe222, 0xddcc, 0xe222, 0xddcc, +0xe222, 0xdebc, 0xe2c2, 0xdebc, 0xe2c2, 0xdfa4, 0xe355, 0xdfa4, 0xe355, 0xe13d, 0xe497, +0xe13d, 0xe497, 0xe390, 0xe694, 0xe390, 0xe694, 0xe5cd, 0xe87e, 0xe5cd, 0xe87e, 0xe7e9, +0xea4b, 0xe7e9, 0xea4b, 0xe7e9, 0xea4b, 0xea90, 0xecaa, 0xea90, 0xecaa, 0xec8a, 0xee63, +0xec8a, 0xee63, 0xedff, 0xefa1, 0xedff, 0xefa1, 0xefc7, 0xf13b, 0xefc7, 0xf13b, 0xf111, +0xf261, 0xf111, 0xf261, 0xf111, 0xf261, 0xf200, 0xf334, 0xf200, 0xf334, 0xf348, 0xf468, +0xf348, 0xf468, 0xf476, 0xf589, 0xf476, 0xf589, 0xf4b5, 0xf5c0, 0xf4b5, 0xf5c0, 0xf3f8, +0xf4ff, 0xf3f8, 0xf4ff, 0xf3b6, 0xf4b9, 0xf3b6, 0xf4b9, 0xf3b6, 0xf4b9, 0xf3c7, 0xf4c5, +0xf3c7, 0xf4c5, 0xf332, 0xf427, 0xf332, 0xf427, 0xf371, 0xf458, 0xf371, 0xf458, 0xf3db, +0xf4ae, 0xf3db, 0xf4ae, 0xf3b1, 0xf465, 0xf3b1, 0xf465, 0xf438, 0xf4c4, 0xf438, 0xf4c4, +0xf438, 0xf4c4, 0xf566, 0xf5bf, 0xf566, 0xf5bf, 0xf6ad, 0xf6c8, 0xf6ad, 0xf6c8, 0xf801, +0xf7d2, 0xf801, 0xf7d2, 0xfa40, 0xf9bd, 0xfa40, 0xf9bd, 0xfce9, 0xfc09, 0xfce9, 0xfc09, +0xfce9, 0xfc09, 0x2d, 0xfee8, 0x2d, 0xfee8, 0x480, 0x2cf, 0x480, 0x2cf, 0x821, +0x602, 0x821, 0x602, 0xb6f, 0x8e0, 0xb6f, 0x8e0, 0xf28, 0xc2d, 0xf28, 0xc2d, +0x12e9, 0xf85, 0x12e9, 0xf85, 0x12e9, 0xf85, 0x15b2, 0x11ef, 0x15b2, 0x11ef, 0x17a6, +0x138c, 0x17a6, 0x138c, 0x19b8, 0x1555, 0x19b8, 0x1555, 0x1b9b, 0x16ff, 0x1b9b, 0x16ff, +0x1d2c, 0x1866, 0x1d2c, 0x1866, 0x1dbe, 0x18e2, 0x1dbe, 0x18e2, 0x1dbe, 0x18e2, 0x1d4f, +0x1870, 0x1d4f, 0x1870, 0x1bba, 0x16ea, 0x1bba, 0x16ea, 0x1a31, 0x1584, 0x1a31, 0x1584, +0x1990, 0x1518, 0x1990, 0x1518, 0x1854, 0x1423, 0x1854, 0x1423, 0x1854, 0x1423, 0x172e, +0x1351, 0x172e, 0x1351, 0x1613, 0x1298, 0x1613, 0x1298, 0x1485, 0x1177, 0x1485, 0x1177, +0x1301, 0x1067, 0x1301, 0x1067, 0x11ea, 0xfc9, 0x11ea, 0xfc9, 0x109f, 0xef8, 0x109f, +0xef8, 0x109f, 0xef8, 0xef2, 0xdc5, 0xef2, 0xdc5, 0xe3d, 0xd86, 0xe3d, 0xd86, +0xcce, 0xc86, 0xcce, 0xc86, 0xa5b, 0xa7a, 0xa5b, 0xa7a, 0x891, 0x90b, 0x891, +0x90b, 0x6a2, 0x76d, 0x6a2, 0x76d, 0x6a2, 0x76d, 0x480, 0x58e, 0x480, 0x58e, +0x327, 0x46a, 0x327, 0x46a, 0x28f, 0x3fb, 0x28f, 0x3fb, 0x16a, 0x2f0, 0x16a, +0x2f0, 0xffa3, 0x138, 0xffa3, 0x138, 0xffa3, 0x138, 0xfdfc, 0xff94, 0xfdfc, 0xff94, +0xfc18, 0xfda9, 0xfc18, 0xfda9, 0xfaa5, 0xfc26, 0xfaa5, 0xfc26, 0xfa07, 0xfb72, 0xfa07, +0xfb72, 0xf965, 0xfab6, 0xf965, 0xfab6, 0xf8b1, 0xf9e4, 0xf8b1, 0xf9e4, 0xf8b1, 0xf9e4, +0xf80a, 0xf91f, 0xf80a, 0xf91f, 0xf78b, 0xf882, 0xf78b, 0xf882, 0xf6d8, 0xf7b3, 0xf6d8, +0xf7b3, 0xf64c, 0xf70e, 0xf64c, 0xf70e, 0xf753, 0xf801, 0xf753, 0xf801, 0xf753, 0xf801, +0xf886, 0xf925, 0xf886, 0xf925, 0xf918, 0xf9ad, 0xf918, 0xf9ad, 0xfa72, 0xfb02, 0xfa72, +0xfb02, 0xfb58, 0xfbe9, 0xfb58, 0xfbe9, 0xfb5e, 0xfbf4, 0xfb5e, 0xfbf4, 0xfbee, 0xfc8e, +0xfbee, 0xfc8e, 0xfbee, 0xfc8e, 0xfcda, 0xfd86, 0xfcda, 0xfd86, 0xfd43, 0xfdfd, 0xfd43, +0xfdfd, 0xfda3, 0xfe6d, 0xfda3, 0xfe6d, 0xfe90, 0xff69, 0xfe90, 0xff69, 0xfeef, 0xffd8, +0xfeef, 0xffd8, 0xff2a, 0x1f, 0xff2a, 0x1f, 0xff2a, 0x1f, 0xff98, 0x96, 0xff98, +0x96, 0xff26, 0x2a, 0xff26, 0x2a, 0xfe75, 0xff7b, 0xfe75, 0xff7b, 0xfe6c, 0xff6f, +0xfe6c, 0xff6f, 0xfee1, 0xffdd, 0xfee1, 0xffdd, 0xfee1, 0xffdd, 0xff31, 0x23, 0xff31, +0x23, 0xffb9, 0x9b, 0xffb9, 0x9b, 0xa1, 0x16f, 0xa1, 0x16f, 0x19e, 0x256, +0x19e, 0x256, 0x2cc, 0x36d, 0x2cc, 0x36d, 0x40b, 0x492, 0x40b, 0x492, 0x40b, +0x492, 0x52e, 0x59b, 0x52e, 0x59b, 0x5b8, 0x60c, 0x5b8, 0x60c, 0x6b6, 0x6f1, +0x6b6, 0x6f1, 0x797, 0x7bc, 0x797, 0x7bc, 0x73a, 0x74a, 0x73a, 0x74a, 0x777, +0x776, 0x777, 0x776, 0x777, 0x776, 0x825, 0x818, 0x825, 0x818, 0x862, 0x84b, +0x862, 0x84b, 0x850, 0x834, 0x850, 0x834, 0x7f2, 0x7d4, 0x7f2, 0x7d4, 0x658, +0x63c, 0x658, 0x63c, 0x658, 0x63c, 0x3eb, 0x3d6, 0x3eb, 0x3d6, 0x2c2, 0x2b5, +0x2c2, 0x2b5, 0x19b, 0x199, 0x19b, 0x199, 0x49, 0x54, 0x49, 0x54, 0xff77, +0xff90, 0xff77, 0xff90, 0xfe0c, 0xfe33, 0xfe0c, 0xfe33, 0xfe0c, 0xfe33, 0xfc3a, 0xfc6f, +0xfc3a, 0xfc6f, 0xfadc, 0xfb1e, 0xfadc, 0xfb1e, 0xfa91, 0xfadf, 0xfa91, 0xfadf, 0xfa5f, +0xfab5, 0xfa5f, 0xfab5, 0xfa62, 0xfabe, 0xfa62, 0xfabe, 0xfae8, 0xfb47, 0xfae8, 0xfb47, +0xfae8, 0xfb47, 0xfaf0, 0xfb4c, 0xfaf0, 0xfb4c, 0xfafe, 0xfb55, 0xfafe, 0xfb55, 0xfb2a, +0xfb77, 0xfb2a, 0xfb77, 0xfb58, 0xfb97, 0xfb58, 0xfb97, 0xfb88, 0xfbb3, 0xfb88, 0xfbb3, +0xfb88, 0xfbb3, 0xfc01, 0xfc15, 0xfc01, 0xfc15, 0xfd6b, 0xfd63, 0xfd6b, 0xfd63, 0xfe99, +0xfe70, 0xfe99, 0xfe70, 0xff4c, 0xfeff, 0xff4c, 0xfeff, 0xb8, 0x43, 0xb8, 0x43, +0x1dd, 0x13d, 0x1dd, 0x13d, 0x1dd, 0x13d, 0x268, 0x19a, 0x268, 0x19a, 0x39e, +0x29e, 0x39e, 0x29e, 0x4af, 0x37d, 0x4af, 0x37d, 0x547, 0x3e0, 0x547, 0x3e0, +0x634, 0x498, 0x634, 0x498, 0x770, 0x59e, 0x770, 0x59e, 0x770, 0x59e, 0x8ad, +0x6a6, 0x8ad, 0x6a6, 0xa60, 0x825, 0xa60, 0x825, 0xccd, 0xa5e, 0xccd, 0xa5e, +0xefc, 0xc5c, 0xefc, 0xc5c, 0x117e, 0xeaf, 0x117e, 0xeaf, 0x117e, 0xeaf, 0x142a, +0x1130, 0x142a, 0x1130, 0x15b9, 0x1297, 0x15b9, 0x1297, 0x16e3, 0x139c, 0x16e3, 0x139c, +0x1866, 0x1500, 0x1866, 0x1500, 0x1a01, 0x1681, 0x1a01, 0x1681, 0x1b15, 0x177e, 0x1b15, +0x177e, 0x1b15, 0x177e, 0x1ba4, 0x17fb, 0x1ba4, 0x17fb, 0x1bbe, 0x1809, 0x1bbe, 0x1809, +0x1b9c, 0x17dd, 0x1b9c, 0x17dd, 0x1b17, 0x1754, 0x1b17, 0x1754, 0x1a41, 0x167d, 0x1a41, +0x167d, 0x1999, 0x15d7, 0x1999, 0x15d7, 0x1999, 0x15d7, 0x18b9, 0x14fb, 0x18b9, 0x14fb, +0x186f, 0x14b6, 0x186f, 0x14b6, 0x1843, 0x1491, 0x1843, 0x1491, 0x1793, 0x13e7, 0x1793, +0x13e7, 0x1731, 0x138a, 0x1731, 0x138a, 0x1731, 0x138a, 0x16c7, 0x1324, 0x16c7, 0x1324, +0x1650, 0x12ae, 0x1650, 0x12ae, 0x15f1, 0x124e, 0x15f1, 0x124e, 0x1615, 0x126e, 0x1615, +0x126e, 0x1627, 0x1279, 0x1627, 0x1279, 0x16ba, 0x1302, 0x16ba, 0x1302, 0x16ba, 0x1302, +0x187d, 0x14b7, 0x187d, 0x14b7, 0x1962, 0x158d, 0x1962, 0x158d, 0x19e9, 0x1603, 0x19e9, +0x1603, 0x1a81, 0x1689, 0x1a81, 0x1689, 0x1a99, 0x168f, 0x1a99, 0x168f, 0x1ad2, 0x16b9, +0x1ad2, 0x16b9, 0x1ad2, 0x16b9, 0x1b93, 0x176e, 0x1b93, 0x176e, 0x1c5a, 0x182d, 0x1c5a, +0x182d, 0x1b9f, 0x1770, 0x1b9f, 0x1770, 0x19f1, 0x15c8, 0x19f1, 0x15c8, 0x17d4, 0x13ba, +0x17d4, 0x13ba, 0x17d4, 0x13ba, 0x1593, 0x1193, 0x1593, 0x1193, 0x140c, 0x1030, 0x140c, +0x1030, 0x127f, 0xed5, 0x127f, 0xed5, 0x10fb, 0xd8e, 0x10fb, 0xd8e, 0xf40, 0xc1d, +0xf40, 0xc1d, 0xd64, 0xa97, 0xd64, 0xa97, 0xd64, 0xa97, 0xc3a, 0x9cf, 0xc3a, +0x9cf, 0xa9a, 0x89c, 0xa9a, 0x89c, 0x8a9, 0x721, 0x8a9, 0x721, 0x76e, 0x663, +0x76e, 0x663, 0x59d, 0x515, 0x59d, 0x515, 0x2e4, 0x2e2, 0x2e4, 0x2e2, 0x2e4, +0x2e2, 0x1a, 0x9d, 0x1a, 0x9d, 0xfc9e, 0xfda5, 0xfc9e, 0xfda5, 0xf8d3, 0xfa58, +0xf8d3, 0xfa58, 0xf5fc, 0xf7f8, 0xf5fc, 0xf7f8, 0xf3c8, 0xf631, 0xf3c8, 0xf631, 0xf3c8, +0xf631, 0xf168, 0xf431, 0xf168, 0xf431, 0xef2e, 0xf249, 0xef2e, 0xf249, 0xed1a, 0xf077, +0xed1a, 0xf077, 0xeac8, 0xee55, 0xeac8, 0xee55, 0xe927, 0xecd4, 0xe927, 0xecd4, 0xe7d4, +0xeb8e, 0xe7d4, 0xeb8e, 0xe7d4, 0xeb8e, 0xe626, 0xe9db, 0xe626, 0xe9db, 0xe4d9, 0xe877, +0xe4d9, 0xe877, 0xe3ec, 0xe764, 0xe3ec, 0xe764, 0xe35b, 0xe69f, 0xe35b, 0xe69f, 0xe352, +0xe656, 0xe352, 0xe656, 0xe3bb, 0xe675, 0xe3bb, 0xe675, 0xe3bb, 0xe675, 0xe4da, 0xe742, +0xe4da, 0xe742, 0xe740, 0xe952, 0xe740, 0xe952, 0xea35, 0xebef, 0xea35, 0xebef, 0xed71, +0xeed4, 0xed71, 0xeed4, 0xf0ce, 0xf1dd, 0xf0ce, 0xf1dd, 0xf0ce, 0xf1dd, 0xf3a9, 0xf46a, +0xf3a9, 0xf46a, 0xf6cf, 0xf749, 0xf6cf, 0xf749, 0xf99b, 0xf9d8, 0xf99b, 0xf9d8, 0xfbf6, +0xfc00, 0xfbf6, 0xfc00, 0xfe8f, 0xfe72, 0xfe8f, 0xfe72, 0x102, 0xc9, 0x102, 0xc9, +0x102, 0xc9, 0x2fa, 0x2b0, 0x2fa, 0x2b0, 0x407, 0x3b6, 0x407, 0x3b6, 0x44b, +0x3fd, 0x44b, 0x3fd, 0x36a, 0x328, 0x36a, 0x328, 0x2d3, 0x2a3, 0x2d3, 0x2a3, +0x2d3, 0x2a3, 0x2ed, 0x2d3, 0x2ed, 0x2d3, 0x25b, 0x25c, 0x25b, 0x25c, 0x221, +0x23c, 0x221, 0x23c, 0x1ca, 0x1ff, 0x1ca, 0x1ff, 0x12f, 0x17b, 0x12f, 0x17b, +0x10f, 0x16d, 0x10f, 0x16d, 0x10f, 0x16d, 0x15e, 0x1c9, 0x15e, 0x1c9, 0x1ae, +0x221, 0x1ae, 0x221, 0x1d3, 0x246, 0x1d3, 0x246, 0x2a4, 0x311, 0x2a4, 0x311, +0x2e7, 0x348, 0x2e7, 0x348, 0x2d1, 0x320, 0x2d1, 0x320, 0x2d1, 0x320, 0x34f, +0x389, 0x34f, 0x389, 0x37a, 0x39c, 0x37a, 0x39c, 0x39c, 0x3a4, 0x39c, 0x3a4, +0x3a0, 0x390, 0x3a0, 0x390, 0x3ec, 0x3c7, 0x3ec, 0x3c7, 0x3ec, 0x3c7, 0x40b, +0x3d6, 0x40b, 0x3d6, 0x2bc, 0x27f, 0x2bc, 0x27f, 0x115, 0xd8, 0x115, 0xd8, +0xff97, 0xff64, 0xff97, 0xff64, 0xfd74, 0xfd57, 0xfd74, 0xfd57, 0xfb6c, 0xfb72, 0xfb6c, +0xfb72, 0xfb6c, 0xfb72, 0xfa00, 0xfa34, 0xfa00, 0xfa34, 0xf7d9, 0xf849, 0xf7d9, 0xf849, +0xf4e8, 0xf59e, 0xf4e8, 0xf59e, 0xf1f5, 0xf2fd, 0xf1f5, 0xf2fd, 0xeed7, 0xf03a, 0xeed7, +0xf03a, 0xebcb, 0xed90, 0xebcb, 0xed90, 0xebcb, 0xed90, 0xe9b8, 0xebe3, 0xe9b8, 0xebe3, +0xe7eb, 0xea80, 0xe7eb, 0xea80, 0xe5e2, 0xe8e0, 0xe5e2, 0xe8e0, 0xe49b, 0xe800, 0xe49b, +0xe800, 0xe2f1, 0xe6b8, 0xe2f1, 0xe6b8, 0xe2f1, 0xe6b8, 0xe02f, 0xe44f, 0xe02f, 0xe44f, +0xdd91, 0xe201, 0xdd91, 0xe201, 0xdbbf, 0xe072, 0xdbbf, 0xe072, 0xdaae, 0xdf97, 0xdaae, +0xdf97, 0xda31, 0xdf42, 0xda31, 0xdf42, 0xd9fa, 0xdf23, 0xd9fa, 0xdf23, 0xd9fa, 0xdf23, +0xd9e8, 0xdf1b, 0xd9e8, 0xdf1b, 0xda1a, 0xdf46, 0xda1a, 0xdf46, 0xda31, 0xdf49, 0xda31, +0xdf49, 0xda8c, 0xdf84, 0xda8c, 0xdf84, 0xdad6, 0xdfa2, 0xdad6, 0xdfa2, 0xdb02, 0xdf99, +0xdb02, 0xdf99, 0xdb02, 0xdf99, 0xdbb7, 0xe012, 0xdbb7, 0xe012, 0xdc4a, 0xe064, 0xdc4a, +0xe064, 0xdd5e, 0xe135, 0xdd5e, 0xe135, 0xdf55, 0xe2e9, 0xdf55, 0xe2e9, 0xe1b8, 0xe50b, +0xe1b8, 0xe50b, 0xe1b8, 0xe50b, 0xe3f9, 0xe70e, 0xe3f9, 0xe70e, 0xe64a, 0xe928, 0xe64a, +0xe928, 0xe8b6, 0xeb64, 0xe8b6, 0xeb64, 0xea4b, 0xecd0, 0xea4b, 0xecd0, 0xec60, 0xeec4, +0xec60, 0xeec4, 0xee62, 0xf0ad, 0xee62, 0xf0ad, 0xee62, 0xf0ad, 0xef5e, 0xf197, 0xef5e, +0xf197, 0xf0b9, 0xf2e7, 0xf0b9, 0xf2e7, 0xf24a, 0xf470, 0xf24a, 0xf470, 0xf38e, 0xf5b0, +0xf38e, 0xf5b0, 0xf440, 0xf660, 0xf440, 0xf660, 0xf4ea, 0xf706, 0xf4ea, 0xf706, 0xf4ea, +0xf706, 0xf4ff, 0xf714, 0xf4ff, 0xf714, 0xf444, 0xf64e, 0xf444, 0xf64e, 0xf3e2, 0xf5d7, +0xf3e2, 0xf5d7, 0xf33f, 0xf519, 0xf33f, 0xf519, 0xf307, 0xf4ba, 0xf307, 0xf4ba, 0xf307, +0xf4ba, 0xf376, 0xf4f6, 0xf376, 0xf4f6, 0xf41c, 0xf55e, 0xf41c, 0xf55e, 0xf554, 0xf64a, +0xf554, 0xf64a, 0xf693, 0xf733, 0xf693, 0xf733, 0xf867, 0xf8a4, 0xf867, 0xf8a4, 0xfa98, +0xfa69, 0xfa98, 0xfa69, 0xfa98, 0xfa69, 0xfcce, 0xfc2a, 0xfcce, 0xfc2a, 0x3a, 0xff1b, +0x3a, 0xff1b, 0x46f, 0x2d1, 0x46f, 0x2d1, 0x85e, 0x641, 0x85e, 0x641, 0xc56, +0x9bb, 0xc56, 0x9bb, 0x1040, 0xd2c, 0x1040, 0xd2c, 0x1040, 0xd2c, 0x1336, 0xfb0, +0x1336, 0xfb0, 0x1591, 0x11a3, 0x1591, 0x11a3, 0x1854, 0x140c, 0x1854, 0x140c, 0x1ac2, +0x162e, 0x1ac2, 0x162e, 0x1c54, 0x1784, 0x1c54, 0x1784, 0x1c54, 0x1784, 0x1dd1, 0x18d7, +0x1dd1, 0x18d7, 0x1e53, 0x1943, 0x1e53, 0x1943, 0x1d9f, 0x188c, 0x1d9f, 0x188c, 0x1d32, +0x182f, 0x1d32, 0x182f, 0x1cad, 0x17cd, 0x1cad, 0x17cd, 0x1b53, 0x16a8, 0x1b53, 0x16a8, +0x1b53, 0x16a8, 0x199c, 0x1535, 0x199c, 0x1535, 0x17e0, 0x13cc, 0x17e0, 0x13cc, 0x1619, +0x1265, 0x1619, 0x1265, 0x1457, 0x110c, 0x1457, 0x110c, 0x12ab, 0xfd1, 0x12ab, 0xfd1, +0x115e, 0xef9, 0x115e, 0xef9, 0x115e, 0xef9, 0x1022, 0xe36, 0x1022, 0xe36, 0xec4, +0xd4f, 0xec4, 0xd4f, 0xd4c, 0xc4d, 0xd4c, 0xc4d, 0xaf0, 0xa63, 0xaf0, 0xa63, +0x885, 0x861, 0x885, 0x861, 0x885, 0x861, 0x6bd, 0x6fc, 0x6bd, 0x6fc, 0x4eb, +0x585, 0x4eb, 0x585, 0x328, 0x411, 0x328, 0x411, 0x204, 0x333, 0x204, 0x333, +0x157, 0x2c1, 0x157, 0x2c1, 0x2d, 0x1c7, 0x2d, 0x1c7, 0x2d, 0x1c7, 0xff31, +0xf1, 0xff31, 0xf1, 0xfe36, 0x14, 0xfe36, 0x14, 0xfc93, 0xfe84, 0xfc93, 0xfe84, +0xfbb8, 0xfdb6, 0xfbb8, 0xfdb6, 0xfb16, 0xfd19, 0xfb16, 0xfd19, 0xf9d8, 0xfbdc, 0xf9d8, +0xfbdc, 0xf9d8, 0xfbdc, 0xf8bd, 0xfabb, 0xf8bd, 0xfabb, 0xf808, 0xf9fe, 0xf808, 0xf9fe, +0xf781, 0xf96b, 0xf781, 0xf96b, 0xf71a, 0xf8f6, 0xf71a, 0xf8f6, 0xf7ab, 0xf978, 0xf7ab, +0xf978, 0xf7ab, 0xf978, 0xf87f, 0xfa3c, 0xf87f, 0xfa3c, 0xf95b, 0xfb05, 0xf95b, 0xfb05, +0xfa7e, 0xfc17, 0xfa7e, 0xfc17, 0xfae3, 0xfc6a, 0xfae3, 0xfc6a, 0xfb0d, 0xfc80, 0xfb0d, +0xfc80, 0xfb31, 0xfc90, 0xfb31, 0xfc90, 0xfb31, 0xfc90, 0xfbfa, 0xfd44, 0xfbfa, 0xfd44, +0xfd6b, 0xfea0, 0xfd6b, 0xfea0, 0xfe7c, 0xff99, 0xfe7c, 0xff99, 0xffe2, 0xe7, 0xffe2, +0xe7, 0xa1, 0x18c, 0xa1, 0x18c, 0x26, 0xf5, 0x26, 0xf5, 0x26, 0xf5, +0xffec, 0x9e, 0xffec, 0x9e, 0x24, 0xb8, 0x24, 0xb8, 0x2a, 0x9e, 0x2a, +0x9e, 0x33, 0x86, 0x33, 0x86, 0xc2, 0xf4, 0xc2, 0xf4, 0xc2, 0xf4, +0x139, 0x14a, 0x139, 0x14a, 0x143, 0x134, 0x143, 0x134, 0x180, 0x151, 0x180, +0x151, 0x1df, 0x193, 0x1df, 0x193, 0x261, 0x1fb, 0x261, 0x1fb, 0x36e, 0x2f0, +0x36e, 0x2f0, 0x36e, 0x2f0, 0x451, 0x3be, 0x451, 0x3be, 0x4fe, 0x45b, 0x4fe, +0x45b, 0x5c7, 0x518, 0x5c7, 0x518, 0x60d, 0x556, 0x60d, 0x556, 0x5fe, 0x545, +0x5fe, 0x545, 0x5fe, 0x545, 0x62d, 0x575, 0x62d, 0x575, 0x6b7, 0x606, 0x6b7, +0x606, 0x72e, 0x687, 0x72e, 0x687, 0x6fd, 0x665, 0x6fd, 0x665, 0x66b, 0x5e4, +0x66b, 0x5e4, 0x5c0, 0x54e, 0x5c0, 0x54e, 0x5c0, 0x54e, 0x47d, 0x423, 0x47d, +0x423, 0x2f6, 0x2b6, 0x2f6, 0x2b6, 0x1a0, 0x17a, 0x1a0, 0x17a, 0x2f, 0x24, +0x2f, 0x24, 0xfee7, 0xfef7, 0xfee7, 0xfef7, 0xfd88, 0xfdb3, 0xfd88, 0xfdb3, 0xfd88, +0xfdb3, 0xfba5, 0xfbea, 0xfba5, 0xfbea, 0xf9b9, 0xfa16, 0xf9b9, 0xfa16, 0xf8a6, 0xf918, +0xf8a6, 0xf918, 0xf885, 0xf90b, 0xf885, 0xf90b, 0xf8ee, 0xf983, 0xf8ee, 0xf983, 0xf8ee, +0xf983, 0xf9c9, 0xfa6b, 0xf9c9, 0xfa6b, 0xfa18, 0xfac4, 0xfa18, 0xfac4, 0xfa09, 0xfaba, +0xfa09, 0xfaba, 0xfa79, 0xfb2b, 0xfa79, 0xfb2b, 0xfab3, 0xfb62, 0xfab3, 0xfb62, 0xfac4, +0xfb6d, 0xfac4, 0xfb6d, 0xfac4, 0xfb6d, 0xfb25, 0xfbc2, 0xfb25, 0xfbc2, 0xfc16, 0xfca4, +0xfc16, 0xfca4, 0xfd27, 0xfda0, 0xfd27, 0xfda0, 0xfe57, 0xfeb8, 0xfe57, 0xfeb8, 0x12, +0x56, 0x12, 0x56, 0x164, 0x186, 0x164, 0x186, 0x164, 0x186, 0x2b2, 0x2af, +0x2b2, 0x2af, 0x3e4, 0x3b8, 0x3e4, 0x3b8, 0x46b, 0x413, 0x46b, 0x413, 0x4ea, +0x462, 0x4ea, 0x462, 0x588, 0x4cd, 0x588, 0x4cd, 0x588, 0x4cd, 0x6ec, 0x5fc, +0x6ec, 0x5fc, 0x876, 0x750, 0x876, 0x750, 0x9fa, 0x89c, 0x9fa, 0x89c, 0xc46, +0xab0, 0xc46, 0xab0, 0xe4f, 0xc81, 0xe4f, 0xc81, 0x1036, 0xe31, 0x1036, 0xe31, +0x1036, 0xe31, 0x12b9, 0x107f, 0x12b9, 0x107f, 0x14ca, 0x125f, 0x14ca, 0x125f, 0x1647, +0x13ae, 0x1647, 0x13ae, 0x17d9, 0x1515, 0x17d9, 0x1515, 0x195b, 0x1672, 0x195b, 0x1672, +0x1a93, 0x178a, 0x1a93, 0x178a, 0x1a93, 0x178a, 0x1b7a, 0x1857, 0x1b7a, 0x1857, 0x1c5a, +0x1922, 0x1c5a, 0x1922, 0x1c6a, 0x1924, 0x1c6a, 0x1924, 0x1bbe, 0x186f, 0x1bbe, 0x186f, +0x1b2d, 0x17db, 0x1b2d, 0x17db, 0x1b2d, 0x17db, 0x1a26, 0x16d6, 0x1a26, 0x16d6, 0x18f7, +0x15ad, 0x18f7, 0x15ad, 0x181b, 0x14dc, 0x181b, 0x14dc, 0x179f, 0x146d, 0x179f, 0x146d, +0x1705, 0x13e2, 0x1705, 0x13e2, 0x15fc, 0x12e9, 0x15fc, 0x12e9, 0x15fc, 0x12e9, 0x1513, +0x1210, 0x1513, 0x1210, 0x145f, 0x116c, 0x145f, 0x116c, 0x13d3, 0x10ee, 0x13d3, 0x10ee, +0x13b1, 0x10d8, 0x13b1, 0x10d8, 0x1421, 0x1151, 0x1421, 0x1151, 0x14d0, 0x1205, 0x14d0, +0x1205, 0x14d0, 0x1205, 0x15a8, 0x12de, 0x15a8, 0x12de, 0x1639, 0x136e, 0x1639, 0x136e, +0x16c0, 0x13f0, 0x16c0, 0x13f0, 0x17df, 0x1508, 0x17df, 0x1508, 0x18da, 0x15fb, 0x18da, +0x15fb, 0x18da, 0x15fb, 0x1944, 0x165b, 0x1944, 0x165b, 0x1982, 0x1690, 0x1982, 0x1690, +0x19ff, 0x1706, 0x19ff, 0x1706, 0x1a39, 0x173d, 0x1a39, 0x173d, 0x1a3a, 0x173e, 0x1a3a, +0x173e, 0x19b8, 0x16c4, 0x19b8, 0x16c4, 0x19b8, 0x16c4, 0x17f7, 0x1512, 0x17f7, 0x1512, +0x1630, 0x1363, 0x1630, 0x1363, 0x14ee, 0x1241, 0x14ee, 0x1241, 0x13bb, 0x113a, 0x13bb, +0x113a, 0x1233, 0xfe8, 0x1233, 0xfe8, 0x109a, 0xe90, 0x109a, 0xe90, 0x109a, 0xe90, +0xf19, 0xd5a, 0xf19, 0xd5a, 0xd35, 0xbcc, 0xd35, 0xbcc, 0xbee, 0xae4, 0xbee, +0xae4, 0xad4, 0xa30, 0xad4, 0xa30, 0x8bb, 0x882, 0x8bb, 0x882, 0x8bb, 0x882, +0x667, 0x69e, 0x667, 0x69e, 0x3c1, 0x46a, 0x3c1, 0x46a, 0x61, 0x17c, 0x61, +0x17c, 0xfcda, 0xfe63, 0xfcda, 0xfe63, 0xf9ef, 0xfbe0, 0xf9ef, 0xfbe0, 0xf78c, 0xf9e0, +0xf78c, 0xf9e0, 0xf78c, 0xf9e0, 0xf4c4, 0xf76f, 0xf4c4, 0xf76f, 0xf265, 0xf55d, 0xf265, +0xf55d, 0xf112, 0xf449, 0xf112, 0xf449, 0xeef8, 0xf25f, 0xeef8, 0xf25f, 0xecd4, 0xf05c, +0xecd4, 0xf05c, 0xebc3, 0xef5c, 0xebc3, 0xef5c, 0xebc3, 0xef5c, 0xea3d, 0xedd7, 0xea3d, +0xedd7, 0xe8b3, 0xec3e, 0xe8b3, 0xec3e, 0xe7bd, 0xeb2b, 0xe7bd, 0xeb2b, 0xe6f5, 0xea38, +0xe6f5, 0xea38, 0xe5f5, 0xe901, 0xe5f5, 0xe901, 0xe5f5, 0xe901, 0xe550, 0xe81c, 0xe550, +0xe81c, 0xe5c9, 0xe84c, 0xe5c9, 0xe84c, 0xe68f, 0xe8c4, 0xe68f, 0xe8c4, 0xe88d, 0xea71, +0xe88d, 0xea71, 0xeba7, 0xed39, 0xeba7, 0xed39, 0xee7b, 0xefbd, 0xee7b, 0xefbd, 0xee7b, +0xefbd, 0xf14d, 0xf242, 0xf14d, 0xf242, 0xf450, 0xf4fe, 0xf450, 0xf4fe, 0xf706, 0xf774, +0xf706, 0xf774, 0xf914, 0xf94a, 0xf914, 0xf94a, 0xfb98, 0xfb9f, 0xfb98, 0xfb9f, 0xfe95, +0xfe78, 0xfe95, 0xfe78, 0xfe95, 0xfe78, 0xd4, 0x9d, 0xd4, 0x9d, 0x22a, 0x1e1, +0x22a, 0x1e1, 0x31a, 0x2c9, 0x31a, 0x2c9, 0x333, 0x2e2, 0x333, 0x2e2, 0x279, +0x22d, 0x279, 0x22d, 0x279, 0x22d, 0x1ff, 0x1bf, 0x1ff, 0x1bf, 0x163, 0x133, +0x163, 0x133, 0x96, 0x76, 0x96, 0x76, 0xb, 0xfffe, 0xb, 0xfffe, 0xffa0, +0xffa4, 0xffa0, 0xffa4, 0xfed2, 0xfee5, 0xfed2, 0xfee5, 0xfed2, 0xfee5, 0xfe6f, 0xfe8c, +0xfe6f, 0xfe8c, 0xff46, 0xff6b, 0xff46, 0xff6b, 0x6d, 0x94, 0x6d, 0x94, 0x1d5, +0x1fa, 0x1d5, 0x1fa, 0x29f, 0x2bd, 0x29f, 0x2bd, 0x272, 0x286, 0x272, 0x286, +0x272, 0x286, 0x295, 0x29a, 0x295, 0x29a, 0x387, 0x37c, 0x387, 0x37c, 0x4a3, +0x487, 0x4a3, 0x487, 0x4e5, 0x4ba, 0x4e5, 0x4ba, 0x506, 0x4cd, 0x506, 0x4cd, +0x506, 0x4cd, 0x4e0, 0x49e, 0x4e0, 0x49e, 0x406, 0x3c0, 0x406, 0x3c0, 0x383, +0x340, 0x383, 0x340, 0x2e6, 0x2ae, 0x2e6, 0x2ae, 0x195, 0x173, 0x195, 0x173, +0xffc6, 0xffc4, 0xffc6, 0xffc4, 0xffc6, 0xffc4, 0xfd86, 0xfdaf, 0xfd86, 0xfdaf, 0xfb0f, +0xfb6c, 0xfb0f, 0xfb6c, 0xf831, 0xf8cd, 0xf831, 0xf8cd, 0xf519, 0xf5fd, 0xf519, 0xf5fd, +0xf25a, 0xf38f, 0xf25a, 0xf38f, 0xf25a, 0xf38f, 0xef66, 0xf0f2, 0xef66, 0xf0f2, 0xecfb, +0xeee4, 0xecfb, 0xeee4, 0xeb77, 0xedc0, 0xeb77, 0xedc0, 0xe8ec, 0xeb95, 0xe8ec, 0xeb95, +0xe654, 0xe95d, 0xe654, 0xe95d, 0xe44e, 0xe7b2, 0xe44e, 0xe7b2, 0xe44e, 0xe7b2, 0xe1bc, +0xe576, 0xe1bc, 0xe576, 0xdf65, 0xe36d, 0xdf65, 0xe36d, 0xdd8c, 0xe1d9, 0xdd8c, 0xe1d9, +0xdc0d, 0xe094, 0xdc0d, 0xe094, 0xda6d, 0xdf21, 0xda6d, 0xdf21, 0xd931, 0xde07, 0xd931, +0xde07, 0xd931, 0xde07, 0xd876, 0xdd60, 0xd876, 0xdd60, 0xd7c1, 0xdcb2, 0xd7c1, 0xdcb2, +0xd80e, 0xdcf9, 0xd80e, 0xdcf9, 0xd871, 0xdd4a, 0xd871, 0xdd4a, 0xd86f, 0xdd2c, 0xd86f, +0xdd2c, 0xd86f, 0xdd2c, 0xd8c6, 0xdd5d, 0xd8c6, 0xdd5d, 0xd9a6, 0xde11, 0xd9a6, 0xde11, +0xdac9, 0xdf01, 0xdac9, 0xdf01, 0xdb99, 0xdf9a, 0xdb99, 0xdf9a, 0xdc8c, 0xe055, 0xdc8c, +0xe055, 0xde04, 0xe195, 0xde04, 0xe195, 0xde04, 0xe195, 0xdfc8, 0xe322, 0xdfc8, 0xe322, +0xe1c3, 0xe4e9, 0xe1c3, 0xe4e9, 0xe421, 0xe717, 0xe421, 0xe717, 0xe616, 0xe8e3, 0xe616, +0xe8e3, 0xe7e7, 0xea8f, 0xe7e7, 0xea8f, 0xe9f7, 0xec81, 0xe9f7, 0xec81, 0xe9f7, 0xec81, +0xeb5f, 0xedd0, 0xeb5f, 0xedd0, 0xecb8, 0xef17, 0xecb8, 0xef17, 0xee92, 0xf0e2, 0xee92, +0xf0e2, 0xf02b, 0xf270, 0xf02b, 0xf270, 0xf0cd, 0xf309, 0xf0cd, 0xf309, 0xf0cd, 0xf309, +0xf1ae, 0xf3e1, 0xf1ae, 0xf3e1, 0xf2dd, 0xf506, 0xf2dd, 0xf506, 0xf318, 0xf535, 0xf318, +0xf535, 0xf32e, 0xf53a, 0xf32e, 0xf53a, 0xf313, 0xf508, 0xf313, 0xf508, 0xf2c9, 0xf49f, +0xf2c9, 0xf49f, 0xf2c9, 0xf49f, 0xf2e2, 0xf491, 0xf2e2, 0xf491, 0xf392, 0xf511, 0xf392, +0xf511, 0xf467, 0xf5ac, 0xf467, 0xf5ac, 0xf4ac, 0xf5ad, 0xf4ac, 0xf5ad, 0xf59d, 0xf651, +0xf59d, 0xf651, 0xf78c, 0xf7e9, 0xf78c, 0xf7e9, 0xf78c, 0xf7e9, 0xfa08, 0xfa07, 0xfa08, +0xfa07, 0xfd35, 0xfcce, 0xfd35, 0xfcce, 0xa6, 0xffd6, 0xa6, 0xffd6, 0x469, 0x32b, +0x469, 0x32b, 0x866, 0x6ba, 0x866, 0x6ba, 0x866, 0x6ba, 0xc64, 0xa4b, 0xc64, +0xa4b, 0x1024, 0xda2, 0x1024, 0xda2, 0x1339, 0x1052, 0x1339, 0x1052, 0x1612, 0x12cf, +0x1612, 0x12cf, 0x18d8, 0x1543, 0x18d8, 0x1543, 0x1ac7, 0x16ea, 0x1ac7, 0x16ea, 0x1ac7, +0x16ea, 0x1cce, 0x18b8, 0x1cce, 0x18b8, 0x1f02, 0x1ac0, 0x1f02, 0x1ac0, 0x1fa2, 0x1b44, +0x1fa2, 0x1b44, 0x1f9a, 0x1b2f, 0x1f9a, 0x1b2f, 0x1f33, 0x1acb, 0x1f33, 0x1acb, 0x1e1e, +0x19c8, 0x1e1e, 0x19c8, 0x1e1e, 0x19c8, 0x1cc7, 0x1892, 0x1cc7, 0x1892, 0x1b34, 0x172e, +0x1b34, 0x172e, 0x19ba, 0x15f0, 0x19ba, 0x15f0, 0x17c4, 0x1440, 0x17c4, 0x1440, 0x15ff, +0x12cc, 0x15ff, 0x12cc, 0x15ff, 0x12cc, 0x1434, 0x115a, 0x1434, 0x115a, 0x1241, 0xfc4, +0x1241, 0xfc4, 0x10db, 0xec0, 0x10db, 0xec0, 0xeea, 0xd33, 0xeea, 0xd33, 0xc98, +0xb44, 0xc98, 0xb44, 0xa72, 0x980, 0xa72, 0x980, 0xa72, 0x980, 0x8bb, 0x827, +0x8bb, 0x827, 0x702, 0x6c8, 0x702, 0x6c8, 0x4ed, 0x506, 0x4ed, 0x506, 0x2de, +0x344, 0x2de, 0x344, 0x12c, 0x1d6, 0x12c, 0x1d6, 0xffe4, 0xca, 0xffe4, 0xca, +0xffe4, 0xca, 0xfe9f, 0xffba, 0xfe9f, 0xffba, 0xfd76, 0xfebc, 0xfd76, 0xfebc, 0xfc06, +0xfd6f, 0xfc06, 0xfd6f, 0xfaf5, 0xfc78, 0xfaf5, 0xfc78, 0xfa16, 0xfbac, 0xfa16, 0xfbac, +0xfa16, 0xfbac, 0xf8e3, 0xfa85, 0xf8e3, 0xfa85, 0xf7e9, 0xf990, 0xf7e9, 0xf990, 0xf6e7, +0xf88e, 0xf6e7, 0xf88e, 0xf5e9, 0xf78a, 0xf5e9, 0xf78a, 0xf509, 0xf6a0, 0xf509, 0xf6a0, +0xf568, 0xf6f1, 0xf568, 0xf6f1, 0xf568, 0xf6f1, 0xf66f, 0xf7e7, 0xf66f, 0xf7e7, 0xf77a, +0xf8df, 0xf77a, 0xf8df, 0xf929, 0xfa78, 0xf929, 0xfa78, 0xf9e5, 0xfb1d, 0xf9e5, 0xfb1d, +0xfa06, 0xfb26, 0xfa06, 0xfb26, 0xfaea, 0xfbf1, 0xfaea, 0xfbf1, 0xfaea, 0xfbf1, 0xfc56, +0xfd44, 0xfc56, 0xfd44, 0xfd4d, 0xfe21, 0xfd4d, 0xfe21, 0xfe1e, 0xfed6, 0xfe1e, 0xfed6, +0xffbc, 0x5a, 0xffbc, 0x5a, 0xd1, 0x152, 0xd1, 0x152, 0xd1, 0x152, 0x14c, +0x1b2, 0x14c, 0x1b2, 0x1c5, 0x20f, 0x1c5, 0x20f, 0x1c2, 0x1ef, 0x1c2, 0x1ef, +0x1b2, 0x1c2, 0x1b2, 0x1c2, 0x206, 0x1fa, 0x206, 0x1fa, 0x269, 0x240, 0x269, +0x240, 0x269, 0x240, 0x252, 0x20c, 0x252, 0x20c, 0x1e5, 0x182, 0x1e5, 0x182, +0x201, 0x182, 0x201, 0x182, 0x2bd, 0x223, 0x2bd, 0x223, 0x374, 0x2c0, 0x374, +0x2c0, 0x4df, 0x411, 0x4df, 0x411, 0x4df, 0x411, 0x5eb, 0x506, 0x5eb, 0x506, +0x5c1, 0x4c7, 0x5c1, 0x4c7, 0x65d, 0x54f, 0x65d, 0x54f, 0x777, 0x657, 0x777, +0x657, 0x86d, 0x73f, 0x86d, 0x73f, 0x86d, 0x73f, 0x917, 0x7dd, 0x917, 0x7dd, +0x9a4, 0x862, 0x9a4, 0x862, 0x9b1, 0x86a, 0x9b1, 0x86a, 0x8f0, 0x7a7, 0x8f0, +0x7a7, 0x894, 0x74d, 0x894, 0x74d, 0x7bb, 0x679, 0x7bb, 0x679, 0x7bb, 0x679, +0x6c8, 0x58e, 0x6c8, 0x58e, 0x654, 0x525, 0x654, 0x525, 0x54c, 0x42c, 0x54c, +0x42c, 0x38b, 0x27d, 0x38b, 0x27d, 0x1b2, 0xb7, 0x1b2, 0xb7, 0x1b, 0xff36, +0x1b, 0xff36, 0x1b, 0xff36, 0xfe33, 0xfd67, 0xfe33, 0xfd67, 0xfc50, 0xfb9c, 0xfc50, +0xfb9c, 0xfab9, 0xfa1f, 0xfab9, 0xfa1f, 0xf9c1, 0xf942, 0xf9c1, 0xf942, 0xf92c, 0xf8c6, +0xf92c, 0xf8c6, 0xf92c, 0xf8c6, 0xf8ec, 0xf89f, 0xf8ec, 0xf89f, 0xf8f4, 0xf8be, 0xf8f4, +0xf8be, 0xf8b5, 0xf894, 0xf8b5, 0xf894, 0xf8f2, 0xf8e4, 0xf8f2, 0xf8e4, 0xf938, 0xf939, +0xf938, 0xf939, 0xf95e, 0xf96b, 0xf95e, 0xf96b, 0xf95e, 0xf96b, 0xf991, 0xf9a4, 0xf991, +0xf9a4, 0xfa0c, 0xfa21, 0xfa0c, 0xfa21, 0xfaa7, 0xfaba, 0xfaa7, 0xfaba, 0xfb07, 0xfb11, +0xfb07, 0xfb11, 0xfc80, 0xfc7c, 0xfc80, 0xfc7c, 0xfc80, 0xfc7c, 0xfe18, 0xfe01, 0xfe18, +0xfe01, 0xff87, 0xff56, 0xff87, 0xff56, 0x16a, 0x11b, 0x16a, 0x11b, 0x298, 0x224, +0x298, 0x224, 0x36d, 0x2d1, 0x36d, 0x2d1, 0x49b, 0x3d3, 0x49b, 0x3d3, 0x49b, +0x3d3, 0x5e1, 0x4e7, 0x5e1, 0x4e7, 0x6ba, 0x58d, 0x6ba, 0x58d, 0x7f9, 0x696, +0x7f9, 0x696, 0xa05, 0x86b, 0xa05, 0x86b, 0xbd6, 0xa05, 0xbd6, 0xa05, 0xdfe, +0xbf6, 0xdfe, 0xbf6, 0xdfe, 0xbf6, 0x1075, 0xe37, 0x1075, 0xe37, 0x126e, 0xffe, +0x126e, 0xffe, 0x147a, 0x11da, 0x147a, 0x11da, 0x16b2, 0x13e6, 0x16b2, 0x13e6, 0x1896, +0x15a3, 0x1896, 0x15a3, 0x1896, 0x15a3, 0x19d5, 0x16c0, 0x19d5, 0x16c0, 0x1aa3, 0x1773, +0x1aa3, 0x1773, 0x1c13, 0x18cc, 0x1c13, 0x18cc, 0x1d48, 0x19f1, 0x1d48, 0x19f1, 0x1d6c, +0x1a0b, 0x1d6c, 0x1a0b, 0x1dc8, 0x1a62, 0x1dc8, 0x1a62, 0x1dc8, 0x1a62, 0x1d4f, 0x19ea, +0x1d4f, 0x19ea, 0x1be8, 0x1889, 0x1be8, 0x1889, 0x1b37, 0x17e1, 0x1b37, 0x17e1, 0x1aa9, +0x1760, 0x1aa9, 0x1760, 0x199e, 0x1664, 0x199e, 0x1664, 0x1850, 0x1528, 0x1850, 0x1528, +0x1850, 0x1528, 0x1795, 0x147e, 0x1795, 0x147e, 0x16ee, 0x13e9, 0x16ee, 0x13e9, 0x1663, +0x136e, 0x1663, 0x136e, 0x163e, 0x1357, 0x163e, 0x1357, 0x157b, 0x12a1, 0x157b, 0x12a1, +0x157b, 0x12a1, 0x14e7, 0x1216, 0x14e7, 0x1216, 0x1508, 0x123d, 0x1508, 0x123d, 0x157a, +0x12b3, 0x157a, 0x12b3, 0x15f2, 0x132b, 0x15f2, 0x132b, 0x16b1, 0x13e7, 0x16b1, 0x13e7, +0x179a, 0x14cc, 0x179a, 0x14cc, 0x179a, 0x14cc, 0x17f9, 0x1526, 0x17f9, 0x1526, 0x17fb, +0x1521, 0x17fb, 0x1521, 0x17f8, 0x151a, 0x17f8, 0x151a, 0x1814, 0x1533, 0x1814, 0x1533, +0x17e1, 0x1500, 0x17e1, 0x1500, 0x17ba, 0x14dd, 0x17ba, 0x14dd, 0x17ba, 0x14dd, 0x1730, +0x145d, 0x1730, 0x145d, 0x15ce, 0x130b, 0x15ce, 0x130b, 0x146c, 0x11c2, 0x146c, 0x11c2, +0x12f4, 0x1069, 0x12f4, 0x1069, 0x117e, 0xf1d, 0x117e, 0xf1d, 0x117e, 0xf1d, 0x1032, +0xe03, 0x1032, 0xe03, 0xf23, 0xd2f, 0xf23, 0xd2f, 0xd89, 0xbd9, 0xd89, 0xbd9, +0xb85, 0xa21, 0xb85, 0xa21, 0xa19, 0x908, 0xa19, 0x908, 0x835, 0x77d, 0x835, +0x77d, 0x835, 0x77d, 0x637, 0x5dc, 0x637, 0x5dc, 0x492, 0x497, 0x492, 0x497, +0x274, 0x2da, 0x274, 0x2da, 0xffdc, 0xa3, 0xffdc, 0xa3, 0xfd21, 0xfe45, 0xfd21, +0xfe45, 0xfa9d, 0xfc19, 0xfa9d, 0xfc19, 0xfa9d, 0xfc19, 0xf7aa, 0xf977, 0xf7aa, 0xf977, +0xf502, 0xf718, 0xf502, 0xf718, 0xf32b, 0xf57f, 0xf32b, 0xf57f, 0xf0ff, 0xf386, 0xf0ff, +0xf386, 0xef25, 0xf1d3, 0xef25, 0xf1d3, 0xef25, 0xf1d3, 0xeda2, 0xf06a, 0xeda2, 0xf06a, +0xec58, 0xef2c, 0xec58, 0xef2c, 0xeba4, 0xee77, 0xeba4, 0xee77, 0xea9b, 0xed5f, 0xea9b, +0xed5f, 0xe927, 0xebd1, 0xe927, 0xebd1, 0xe788, 0xea0d, 0xe788, 0xea0d, 0xe788, 0xea0d, +0xe63d, 0xe892, 0xe63d, 0xe892, 0xe63e, 0xe85c, 0xe63e, 0xe85c, 0xe6f1, 0xe8d1, 0xe6f1, +0xe8d1, 0xe849, 0xe9e7, 0xe849, 0xe9e7, 0xeac2, 0xec1c, 0xeac2, 0xec1c, 0xed23, 0xee37, +0xed23, 0xee37, 0xed23, 0xee37, 0xefab, 0xf07b, 0xefab, 0xf07b, 0xf2e8, 0xf377, 0xf2e8, +0xf377, 0xf604, 0xf657, 0xf604, 0xf657, 0xf895, 0xf8b2, 0xf895, 0xf8b2, 0xfb11, 0xfafe, +0xfb11, 0xfafe, 0xfb11, 0xfafe, 0xfe0e, 0xfdd2, 0xfe0e, 0xfdd2, 0x88, 0x2d, 0x88, +0x2d, 0x286, 0x212, 0x286, 0x212, 0x3de, 0x359, 0x3de, 0x359, 0x3f9, 0x36a, +0x3f9, 0x36a, 0x415, 0x384, 0x415, 0x384, 0x415, 0x384, 0x42e, 0x39f, 0x42e, +0x39f, 0x38f, 0x306, 0x38f, 0x306, 0x259, 0x1da, 0x259, 0x1da, 0x138, 0xc4, +0x138, 0xc4, 0x4a, 0xffe2, 0x4a, 0xffe2, 0xff8b, 0xff2e, 0xff8b, 0xff2e, 0xff8b, +0xff2e, 0xff37, 0xfee4, 0xff37, 0xfee4, 0xff27, 0xfedc, 0xff27, 0xfedc, 0xff3f, 0xfef9, +0xff3f, 0xfef9, 0xff42, 0xfefe, 0xff42, 0xfefe, 0xff8f, 0xff4a, 0xff8f, 0xff4a, 0xff8f, +0xff4a, 0xfff3, 0xffab, 0xfff3, 0xffab, 0x55, 0x6, 0x55, 0x6, 0x11e, 0xc9, +0x11e, 0xc9, 0x1ca, 0x16e, 0x1ca, 0x16e, 0x209, 0x1a6, 0x209, 0x1a6, 0x238, +0x1d1, 0x238, 0x1d1, 0x238, 0x1d1, 0x284, 0x21c, 0x284, 0x21c, 0x20d, 0x1a9, +0x20d, 0x1a9, 0x171, 0x118, 0x171, 0x118, 0x158, 0x111, 0x158, 0x111, 0xf5, +0xc9, 0xf5, 0xc9, 0x87, 0x7f, 0x87, 0x7f, 0x87, 0x7f, 0xff5f, 0xff85, +0xff5f, 0xff85, 0xfd21, 0xfd7e, 0xfd21, 0xfd7e, 0xfa77, 0xfb16, 0xfa77, 0xfb16, 0xf827, +0xf910, 0xf827, 0xf910, 0xf62d, 0xf76a, 0xf62d, 0xf76a, 0xf62d, 0xf76a, 0xf358, 0xf4ef, +0xf358, 0xf4ef, 0xf0ca, 0xf2c1, 0xf0ca, 0xf2c1, 0xeebf, 0xf119, 0xeebf, 0xf119, 0xec5c, +0xef1e, 0xec5c, 0xef1e, 0xea35, 0xed5d, 0xea35, 0xed5d, 0xe7ea, 0xeb77, 0xe7ea, 0xeb77, +0xe7ea, 0xeb77, 0xe5ca, 0xe9b8, 0xe5ca, 0xe9b8, 0xe3f1, 0xe839, 0xe3f1, 0xe839, 0xe1cb, +0xe666, 0xe1cb, 0xe666, 0xdf8f, 0xe473, 0xdf8f, 0xe473, 0xdd3a, 0xe25d, 0xdd3a, 0xe25d, +0xdb4f, 0xe0a5, 0xdb4f, 0xe0a5, 0xdb4f, 0xe0a5, 0xda5a, 0xdfd6, 0xda5a, 0xdfd6, 0xd972, +0xdf07, 0xd972, 0xdf07, 0xd8d2, 0xde73, 0xd8d2, 0xde73, 0xd901, 0xdea1, 0xd901, 0xdea1, +0xd92d, 0xdec1, 0xd92d, 0xdec1, 0xd92d, 0xdec1, 0xd99c, 0xdf19, 0xd99c, 0xdf19, 0xda64, +0xdfbf, 0xda64, 0xdfbf, 0xdb4f, 0xe081, 0xdb4f, 0xe081, 0xdbf9, 0xe0fc, 0xdbf9, 0xe0fc, +0xdcb9, 0xe187, 0xdcb9, 0xe187, 0xde36, 0xe2cc, 0xde36, 0xe2cc, 0xde36, 0xe2cc, 0xdfb6, +0xe413, 0xdfb6, 0xe413, 0xe15b, 0xe57f, 0xe15b, 0xe57f, 0xe27a, 0xe667, 0xe27a, 0xe667, +0xe30e, 0xe6c6, 0xe30e, 0xe6c6, 0xe495, 0xe81c, 0xe495, 0xe81c, 0xe495, 0xe81c, 0xe6bc, +0xea15, 0xe6bc, 0xea15, 0xe878, 0xeba8, 0xe878, 0xeba8, 0xe9ec, 0xecf7, 0xe9ec, 0xecf7, +0xeb8b, 0xee75, 0xeb8b, 0xee75, 0xed06, 0xefd2, 0xed06, 0xefd2, 0xee75, 0xf124, 0xee75, +0xf124, 0xee75, 0xf124, 0xefa2, 0xf237, 0xefa2, 0xf237, 0xf05d, 0xf2d6, 0xf05d, 0xf2d6, +0xf0c8, 0xf324, 0xf0c8, 0xf324, 0xf0fc, 0xf337, 0xf0fc, 0xf337, 0xf16f, 0xf386, 0xf16f, +0xf386, 0xf1a7, 0xf394, 0xf1a7, 0xf394, 0xf1a7, 0xf394, 0xf15f, 0xf31b, 0xf15f, 0xf31b, +0xf133, 0xf2b5, 0xf133, 0xf2b5, 0xf150, 0xf291, 0xf150, 0xf291, 0xf1be, 0xf2b5, 0xf1be, +0xf2b5, 0xf31f, 0xf3c4, 0xf31f, 0xf3c4, 0xf31f, 0xf3c4, 0xf4fc, 0xf547, 0xf4fc, 0xf547, +0xf679, 0xf662, 0xf679, 0xf662, 0xf8ba, 0xf83b, 0xf8ba, 0xf83b, 0xfba8, 0xfabc, 0xfba8, +0xfabc, 0xfee9, 0xfd8d, 0xfee9, 0xfd8d, 0x342, 0x174, 0x342, 0x174, 0x342, 0x174, +0x7ef, 0x5b1, 0x7ef, 0x5b1, 0xc12, 0x965, 0xc12, 0x965, 0xf9f, 0xc8a, 0xf9f, +0xc8a, 0x1353, 0xfdc, 0x1353, 0xfdc, 0x169d, 0x12cd, 0x169d, 0x12cd, 0x18b5, 0x1496, +0x18b5, 0x1496, 0x18b5, 0x1496, 0x1b18, 0x16b7, 0x1b18, 0x16b7, 0x1d72, 0x18dd, 0x1d72, +0x18dd, 0x1f0a, 0x1a50, 0x1f0a, 0x1a50, 0x203a, 0x1b6a, 0x203a, 0x1b6a, 0x2087, 0x1bb1, +0x2087, 0x1bb1, 0x2087, 0x1bb1, 0x201f, 0x1b53, 0x201f, 0x1b53, 0x1f3e, 0x1a8b, 0x1f3e, +0x1a8b, 0x1e3d, 0x19b2, 0x1e3d, 0x19b2, 0x1d0a, 0x18b3, 0x1d0a, 0x18b3, 0x1af5, 0x16e0, +0x1af5, 0x16e0, 0x191d, 0x1554, 0x191d, 0x1554, 0x191d, 0x1554, 0x1781, 0x140c, 0x1781, +0x140c, 0x151b, 0x1202, 0x151b, 0x1202, 0x134b, 0x1093, 0x134b, 0x1093, 0x1206, 0xfb2, +0x1206, 0xfb2, 0x1037, 0xe48, 0x1037, 0xe48, 0xe34, 0xca9, 0xe34, 0xca9, 0xe34, +0xca9, 0xc4d, 0xb25, 0xc4d, 0xb25, 0xa5b, 0x992, 0xa5b, 0x992, 0x7de, 0x76f, +0x7de, 0x76f, 0x5e3, 0x5c8, 0x5e3, 0x5c8, 0x48a, 0x4bb, 0x48a, 0x4bb, 0x48a, +0x4bb, 0x2b4, 0x32b, 0x2b4, 0x32b, 0xd9, 0x18e, 0xd9, 0x18e, 0xff10, 0xfffa, +0xff10, 0xfffa, 0xfd4a, 0xfe62, 0xfd4a, 0xfe62, 0xfc34, 0xfd72, 0xfc34, 0xfd72, 0xfb87, +0xfce2, 0xfb87, 0xfce2, 0xfb87, 0xfce2, 0xfa3e, 0xfbb0, 0xfa3e, 0xfbb0, 0xf89d, 0xfa1f, +0xf89d, 0xfa1f, 0xf75a, 0xf8e7, 0xf75a, 0xf8e7, 0xf68f, 0xf820, 0xf68f, 0xf820, 0xf61d, +0xf7ad, 0xf61d, 0xf7ad, 0xf5c1, 0xf74b, 0xf5c1, 0xf74b, 0xf5c1, 0xf74b, 0xf557, 0xf6d8, +0xf557, 0xf6d8, 0xf534, 0xf6a8, 0xf534, 0xf6a8, 0xf5ed, 0xf750, 0xf5ed, 0xf750, 0xf70f, +0xf85e, 0xf70f, 0xf85e, 0xf7da, 0xf914, 0xf7da, 0xf914, 0xf7da, 0xf914, 0xf878, 0xf998, +0xf878, 0xf998, 0xf973, 0xfa77, 0xf973, 0xfa77, 0xfa80, 0xfb65, 0xfa80, 0xfb65, 0xfb4e, +0xfc12, 0xfb4e, 0xfc12, 0xfcc0, 0xfd61, 0xfcc0, 0xfd61, 0xfe1b, 0xfe97, 0xfe1b, 0xfe97, +0xfe1b, 0xfe97, 0xfe9e, 0xfef4, 0xfe9e, 0xfef4, 0xff6a, 0xff97, 0xff6a, 0xff97, 0x32, +0x36, 0x32, 0x36, 0xb9, 0x93, 0xb9, 0x93, 0x175, 0x124, 0x175, 0x124, +0x223, 0x1a8, 0x223, 0x1a8, 0x223, 0x1a8, 0x279, 0x1d4, 0x279, 0x1d4, 0x2b5, +0x1e9, 0x2b5, 0x1e9, 0x3e2, 0x2f0, 0x3e2, 0x2f0, 0x4d3, 0x3be, 0x4d3, 0x3be, +0x4dc, 0x3a8, 0x4dc, 0x3a8, 0x4dc, 0x3a8, 0x55b, 0x40c, 0x55b, 0x40c, 0x589, +0x424, 0x589, 0x424, 0x5a3, 0x42d, 0x5a3, 0x42d, 0x665, 0x4e3, 0x665, 0x4e3, +0x764, 0x5dd, 0x764, 0x5dd, 0x89e, 0x717, 0x89e, 0x717, 0x89e, 0x717, 0x999, +0x818, 0x999, 0x818, 0xa66, 0x8f0, 0xa66, 0x8f0, 0xa7d, 0x919, 0xa7d, 0x919, +0x96a, 0x81d, 0x96a, 0x81d, 0x8ce, 0x79b, 0x8ce, 0x79b, 0x890, 0x77c, 0x890, +0x77c, 0x890, 0x77c, 0x7e4, 0x6f3, 0x7e4, 0x6f3, 0x7cc, 0x700, 0x7cc, 0x700, +0x799, 0x6f3, 0x799, 0x6f3, 0x652, 0x5d3, 0x652, 0x5d3, 0x49d, 0x446, 0x49d, +0x446, 0x49d, 0x446, 0x31f, 0x2ee, 0x31f, 0x2ee, 0x174, 0x168, 0x174, 0x168, +0xff73, 0xff8b, 0xff73, 0xff8b, 0xfe3e, 0xfe75, 0xfe3e, 0xfe75, 0xfd2c, 0xfd80, 0xfd2c, +0xfd80, 0xfbc6, 0xfc34, 0xfbc6, 0xfc34, 0xfbc6, 0xfc34, 0xfb07, 0xfb89, 0xfb07, 0xfb89, +0xfa7b, 0xfb0d, 0xfa7b, 0xfb0d, 0xf9c6, 0xfa65, 0xf9c6, 0xfa65, 0xf9ae, 0xfa54, 0xf9ae, +0xfa54, 0xfa06, 0xfaaf, 0xfa06, 0xfaaf, 0xf9bf, 0xfa66, 0xf9bf, 0xfa66, 0xf9bf, 0xfa66, +0xf95a, 0xf9fa, 0xf95a, 0xf9fa, 0xf999, 0xfa2f, 0xf999, 0xfa2f, 0xfa1f, 0xfaa6, 0xfa1f, +0xfaa6, 0xfa65, 0xfada, 0xfa65, 0xfada, 0xfaa2, 0xfb00, 0xfaa2, 0xfb00, 0xfaa2, 0xfb00, +0xfb50, 0xfb95, 0xfb50, 0xfb95, 0xfc3b, 0xfc63, 0xfc3b, 0xfc63, 0xfd9f, 0xfda6, 0xfd9f, +0xfda6, 0xff52, 0xff37, 0xff52, 0xff37, 0x79, 0x39, 0x79, 0x39, 0x12e, 0xc7, +0x12e, 0xc7, 0x12e, 0xc7, 0x21b, 0x18a, 0x21b, 0x18a, 0x33a, 0x27e, 0x33a, +0x27e, 0x457, 0x36f, 0x457, 0x36f, 0x604, 0x4ee, 0x604, 0x4ee, 0x793, 0x650, +0x793, 0x650, 0x8c3, 0x752, 0x8c3, 0x752, 0x8c3, 0x752, 0xa94, 0x8f6, 0xa94, +0x8f6, 0xca7, 0xadb, 0xca7, 0xadb, 0xf0f, 0xd19, 0xf0f, 0xd19, 0x11c3, 0xfa3, +0x11c3, 0xfa3, 0x145a, 0x1212, 0x145a, 0x1212, 0x145a, 0x1212, 0x165e, 0x13f3, 0x165e, +0x13f3, 0x17f4, 0x1568, 0x17f4, 0x1568, 0x1a41, 0x1798, 0x1a41, 0x1798, 0x1bd4, 0x1912, +0x1bd4, 0x1912, 0x1c84, 0x19ae, 0x1c84, 0x19ae, 0x1d76, 0x1a91, 0x1d76, 0x1a91, 0x1d76, +0x1a91, 0x1dd7, 0x1ae7, 0x1dd7, 0x1ae7, 0x1da4, 0x1aae, 0x1da4, 0x1aae, 0x1cdf, 0x19e8, +0x1cdf, 0x19e8, 0x1ba6, 0x18b2, 0x1ba6, 0x18b2, 0x1a81, 0x1795, 0x1a81, 0x1795, 0x1a81, +0x1795, 0x19ae, 0x16cc, 0x19ae, 0x16cc, 0x1975, 0x16a1, 0x1975, 0x16a1, 0x18fe, 0x163a, +0x18fe, 0x163a, 0x179f, 0x14ec, 0x179f, 0x14ec, 0x169c, 0x13fb, 0x169c, 0x13fb, 0x15ed, +0x135f, 0x15ed, 0x135f, 0x15ed, 0x135f, 0x1545, 0x12c9, 0x1545, 0x12c9, 0x1582, 0x1317, +0x1582, 0x1317, 0x1607, 0x13aa, 0x1607, 0x13aa, 0x164c, 0x13fc, 0x164c, 0x13fc, 0x16bc, +0x1476, 0x16bc, 0x1476, 0x178f, 0x1550, 0x178f, 0x1550, 0x178f, 0x1550, 0x17ed, 0x15b4, +0x17ed, 0x15b4, 0x17f7, 0x15c2, 0x17f7, 0x15c2, 0x1853, 0x161f, 0x1853, 0x161f, 0x186f, +0x163b, 0x186f, 0x163b, 0x187c, 0x1648, 0x187c, 0x1648, 0x187c, 0x1648, 0x1883, 0x164f, +0x1883, 0x164f, 0x17d8, 0x15a6, 0x17d8, 0x15a6, 0x1690, 0x1463, 0x1690, 0x1463, 0x15be, +0x1399, 0x15be, 0x1399, 0x14d8, 0x12be, 0x14d8, 0x12be, 0x134c, 0x1144, 0x134c, 0x1144, +0x134c, 0x1144, 0x1229, 0x1039, 0x1229, 0x1039, 0x1133, 0xf62, 0x1133, 0xf62, 0xffa, +0xe4f, 0xffa, 0xe4f, 0xe13, 0xc95, 0xe13, 0xc95, 0xbc0, 0xa77, 0xbc0, 0xa77, +0x94f, 0x842, 0x94f, 0x842, 0x94f, 0x842, 0x6b8, 0x5ed, 0x6b8, 0x5ed, 0x4c7, +0x445, 0x4c7, 0x445, 0x2e0, 0x2ab, 0x2e0, 0x2ab, 0x35, 0x51, 0x35, 0x51, +0xfd84, 0xfdf2, 0xfd84, 0xfdf2, 0xfd84, 0xfdf2, 0xfb54, 0xfc15, 0xfb54, 0xfc15, 0xf88b, +0xf99f, 0xf88b, 0xf99f, 0xf55d, 0xf6c0, 0xf55d, 0xf6c0, 0xf2db, 0xf488, 0xf2db, 0xf488, +0xf019, 0xf209, 0xf019, 0xf209, 0xedc2, 0xefee, 0xedc2, 0xefee, 0xedc2, 0xefee, 0xec94, +0xeef2, 0xec94, 0xeef2, 0xeba5, 0xee2c, 0xeba5, 0xee2c, 0xeab6, 0xed59, 0xeab6, 0xed59, +0xe9d0, 0xec84, 0xe9d0, 0xec84, 0xe955, 0xec0f, 0xe955, 0xec0f, 0xe88b, 0xeb3e, 0xe88b, +0xeb3e, 0xe88b, 0xeb3e, 0xe7b8, 0xea59, 0xe7b8, 0xea59, 0xe7b3, 0xea37, 0xe7b3, 0xea37, +0xe77a, 0xe9d7, 0xe77a, 0xe9d7, 0xe7b0, 0xe9dd, 0xe7b0, 0xe9dd, 0xe8fd, 0xeaf4, 0xe8fd, +0xeaf4, 0xe8fd, 0xeaf4, 0xeac7, 0xec81, 0xeac7, 0xec81, 0xed30, 0xeeaa, 0xed30, 0xeeaa, +0xf02c, 0xf164, 0xf02c, 0xf164, 0xf356, 0xf44c, 0xf356, 0xf44c, 0xf6af, 0xf764, 0xf6af, +0xf764, 0xfa3a, 0xfab1, 0xfa3a, 0xfab1, 0xfa3a, 0xfab1, 0xfda0, 0xfddd, 0xfda0, 0xfddd, +0xffe9, 0xfff2, 0xffe9, 0xfff2, 0x17b, 0x155, 0x17b, 0x155, 0x3a4, 0x357, 0x3a4, +0x357, 0x564, 0x4f7, 0x564, 0x4f7, 0x651, 0x5cc, 0x651, 0x5cc, 0x651, 0x5cc, +0x6dc, 0x646, 0x6dc, 0x646, 0x694, 0x5f4, 0x694, 0x5f4, 0x56b, 0x4c8, 0x56b, +0x4c8, 0x450, 0x3af, 0x450, 0x3af, 0x3d3, 0x339, 0x3d3, 0x339, 0x3d3, 0x339, +0x30d, 0x27e, 0x30d, 0x27e, 0x232, 0x1b1, 0x232, 0x1b1, 0x1a8, 0x138, 0x1a8, +0x138, 0x14a, 0xec, 0x14a, 0xec, 0x129, 0xde, 0x129, 0xde, 0x14a, 0x111, +0x14a, 0x111, 0x14a, 0x111, 0x130, 0x10a, 0x130, 0x10a, 0xdd, 0xc9, 0xdd, +0xc9, 0x180, 0x17e, 0x180, 0x17e, 0x1e0, 0x1f0, 0x1e0, 0x1f0, 0x17b, 0x19d, +0x17b, 0x19d, 0x16a, 0x19f, 0x16a, 0x19f, 0x16a, 0x19f, 0x16d, 0x1b6, 0x16d, +0x1b6, 0x150, 0x1b0, 0x150, 0x1b0, 0xef, 0x169, 0xef, 0x169, 0x69, 0x101, +0x69, 0x101, 0xffc7, 0x81, 0xffc7, 0x81, 0xffc7, 0x81, 0xff12, 0xfff5, 0xff12, +0xfff5, 0xfe3e, 0xff4e, 0xfe3e, 0xff4e, 0xfca1, 0xfde5, 0xfca1, 0xfde5, 0xfa22, 0xfba0, +0xfa22, 0xfba0, 0xf7f3, 0xf9b2, 0xf7f3, 0xf9b2, 0xf630, 0xf834, 0xf630, 0xf834, 0xf630, +0xf834, 0xf380, 0xf5cf, 0xf380, 0xf5cf, 0xf0c1, 0xf360, 0xf0c1, 0xf360, 0xee88, 0xf179, +0xee88, 0xf179, 0xebd6, 0xef1a, 0xebd6, 0xef1a, 0xe986, 0xed1f, 0xe986, 0xed1f, 0xe7c8, +0xebb3, 0xe7c8, 0xebb3, 0xe7c8, 0xebb3, 0xe577, 0xe9b3, 0xe577, 0xe9b3, 0xe306, 0xe78d, +0xe306, 0xe78d, 0xe181, 0xe64d, 0xe181, 0xe64d, 0xe06a, 0xe574, 0xe06a, 0xe574, 0xde7c, +0xe3ba, 0xde7c, 0xe3ba, 0xde7c, 0xe3ba, 0xdccf, 0xe237, 0xdccf, 0xe237, 0xdbb8, 0xe141, +0xdbb8, 0xe141, 0xd9f3, 0xdf90, 0xd9f3, 0xdf90, 0xd8b9, 0xde5f, 0xd8b9, 0xde5f, 0xd8ae, +0xde51, 0xd8ae, 0xde51, 0xd90a, 0xde9f, 0xd90a, 0xde9f, 0xd90a, 0xde9f, 0xd987, 0xdf03, +0xd987, 0xdf03, 0xda33, 0xdf8d, 0xda33, 0xdf8d, 0xdb58, 0xe088, 0xdb58, 0xe088, 0xdc9b, +0xe199, 0xdc9b, 0xe199, 0xddf3, 0xe2ba, 0xddf3, 0xe2ba, 0xdf8b, 0xe418, 0xdf8b, 0xe418, +0xdf8b, 0xe418, 0xe04a, 0xe499, 0xe04a, 0xe499, 0xe070, 0xe480, 0xe070, 0xe480, 0xe113, +0xe4e6, 0xe113, 0xe4e6, 0xe1a8, 0xe53f, 0xe1a8, 0xe53f, 0xe29f, 0xe5fd, 0xe29f, 0xe5fd, +0xe29f, 0xe5fd, 0xe4d1, 0xe7fb, 0xe4d1, 0xe7fb, 0xe736, 0xea2e, 0xe736, 0xea2e, 0xe915, +0xebe2, 0xe915, 0xebe2, 0xeb21, 0xedc6, 0xeb21, 0xedc6, 0xecfd, 0xef7f, 0xecfd, 0xef7f, +0xedf6, 0xf059, 0xedf6, 0xf059, 0xedf6, 0xf059, 0xeeb9, 0xf101, 0xeeb9, 0xf101, 0xeff9, +0xf227, 0xeff9, 0xf227, 0xf16d, 0xf381, 0xf16d, 0xf381, 0xf29e, 0xf499, 0xf29e, 0xf499, +0xf379, 0xf559, 0xf379, 0xf559, 0xf308, 0xf4cb, 0xf308, 0xf4cb, 0xf308, 0xf4cb, 0xf1f4, +0xf395, 0xf1f4, 0xf395, 0xf1bf, 0xf338, 0xf1bf, 0xf338, 0xf1d9, 0xf326, 0xf1d9, 0xf326, +0xf1e8, 0xf301, 0xf1e8, 0xf301, 0xf230, 0xf30f, 0xf230, 0xf30f, 0xf230, 0xf30f, 0xf2f5, +0xf392, 0xf2f5, 0xf392, 0xf3f5, 0xf449, 0xf3f5, 0xf449, 0xf562, 0xf567, 0xf562, 0xf567, +0xf777, 0xf727, 0xf777, 0xf727, 0xf9da, 0xf931, 0xf9da, 0xf931, 0xfcbc, 0xfbb6, 0xfcbc, +0xfbb6, 0xfcbc, 0xfbb6, 0x3c, 0xfed5, 0x3c, 0xfed5, 0x3ef, 0x229, 0x3ef, 0x229, +0x746, 0x522, 0x746, 0x522, 0xaf5, 0x875, 0xaf5, 0x875, 0xebe, 0xbe8, 0xebe, +0xbe8, 0xebe, 0xbe8, 0x1173, 0xe4c, 0x1173, 0xe4c, 0x13fc, 0x108d, 0x13fc, 0x108d, +0x16a5, 0x12f7, 0x16a5, 0x12f7, 0x18c3, 0x14e0, 0x18c3, 0x14e0, 0x1ab1, 0x16a4, 0x1ab1, +0x16a4, 0x1c28, 0x17fe, 0x1c28, 0x17fe, 0x1c28, 0x17fe, 0x1c8e, 0x1853, 0x1c8e, 0x1853, +0x1c54, 0x1815, 0x1c54, 0x1815, 0x1c62, 0x182a, 0x1c62, 0x182a, 0x1c1a, 0x17f6, 0x1c1a, +0x17f6, 0x1abc, 0x16b7, 0x1abc, 0x16b7, 0x19ad, 0x15d1, 0x19ad, 0x15d1, 0x19ad, 0x15d1, +0x187c, 0x14d1, 0x187c, 0x14d1, 0x1641, 0x12d0, 0x1641, 0x12d0, 0x146c, 0x113c, 0x146c, +0x113c, 0x1312, 0x1026, 0x1312, 0x1026, 0x1174, 0xed2, 0x1174, 0xed2, 0x1174, 0xed2, +0xfb5, 0xd5f, 0xfb5, 0xd5f, 0xe07, 0xbfd, 0xe07, 0xbfd, 0xc7f, 0xac1, 0xc7f, +0xac1, 0xaf0, 0x97e, 0xaf0, 0x97e, 0x989, 0x860, 0x989, 0x860, 0x821, 0x73e, +0x821, 0x73e, 0x821, 0x73e, 0x59f, 0x4fe, 0x59f, 0x4fe, 0x32d, 0x2ca, 0x32d, +0x2ca, 0x1e4, 0x1ba, 0x1e4, 0x1ba, 0x7c, 0x87, 0x7c, 0x87, 0xff05, 0xff40, +0xff05, 0xff40, 0xfe22, 0xfe88, 0xfe22, 0xfe88, 0xfe22, 0xfe88, 0xfd54, 0xfddf, 0xfd54, +0xfddf, 0xfc27, 0xfcd4, 0xfc27, 0xfcd4, 0xfb4e, 0xfc17, 0xfb4e, 0xfc17, 0xfabc, 0xfb9d, +0xfabc, 0xfb9d, 0xf9af, 0xfaa4, 0xf9af, 0xfaa4, 0xf9af, 0xfaa4, 0xf89e, 0xf9a4, 0xf89e, +0xf9a4, 0xf81d, 0xf92f, 0xf81d, 0xf92f, 0xf808, 0xf922, 0xf808, 0xf922, 0xf82f, 0xf94d, +0xf82f, 0xf94d, 0xf887, 0xf9a6, 0xf887, 0xf9a6, 0xf8c0, 0xf9dc, 0xf8c0, 0xf9dc, 0xf8c0, +0xf9dc, 0xf96c, 0xfa82, 0xf96c, 0xfa82, 0xfaae, 0xfbba, 0xfaae, 0xfbba, 0xfb9f, 0xfc9e, +0xfb9f, 0xfc9e, 0xfbf4, 0xfce1, 0xfbf4, 0xfce1, 0xfc3b, 0xfd14, 0xfc3b, 0xfd14, 0xfd2c, +0xfded, 0xfd2c, 0xfded, 0xfd2c, 0xfded, 0xfe44, 0xfeeb, 0xfe44, 0xfeeb, 0xff20, 0xffaa, +0xff20, 0xffaa, 0xff8c, 0xfff6, 0xff8c, 0xfff6, 0xff90, 0xffd9, 0xff90, 0xffd9, 0xff83, +0xffa8, 0xff83, 0xffa8, 0xff83, 0xffa8, 0xffc0, 0xffc1, 0xffc0, 0xffc1, 0x4b, 0x27, +0x4b, 0x27, 0x9a, 0x51, 0x9a, 0x51, 0x17b, 0x10f, 0x17b, 0x10f, 0x266, +0x1d8, 0x266, 0x1d8, 0x282, 0x1d4, 0x282, 0x1d4, 0x282, 0x1d4, 0x2aa, 0x1df, +0x2aa, 0x1df, 0x2be, 0x1d9, 0x2be, 0x1d9, 0x302, 0x205, 0x302, 0x205, 0x39e, +0x28f, 0x39e, 0x28f, 0x47f, 0x362, 0x47f, 0x362, 0x582, 0x45c, 0x582, 0x45c, +0x582, 0x45c, 0x64e, 0x524, 0x64e, 0x524, 0x7b9, 0x68e, 0x7b9, 0x68e, 0x8d6, +0x7af, 0x8d6, 0x7af, 0x914, 0x7f6, 0x914, 0x7f6, 0x980, 0x86f, 0x980, 0x86f, +0x980, 0x86f, 0x966, 0x865, 0x966, 0x865, 0x911, 0x824, 0x911, 0x824, 0x94e, +0x878, 0x94e, 0x878, 0x969, 0x8ac, 0x969, 0x8ac, 0x90b, 0x868, 0x90b, 0x868, +0x839, 0x7b2, 0x839, 0x7b2, 0x839, 0x7b2, 0x6dd, 0x672, 0x6dd, 0x672, 0x545, +0x4f6, 0x545, 0x4f6, 0x3c4, 0x391, 0x3c4, 0x391, 0x276, 0x25d, 0x276, 0x25d, +0xef, 0xf1, 0xef, 0xf1, 0xff15, 0xff2f, 0xff15, 0xff2f, 0xff15, 0xff2f, 0xfdd7, +0xfe07, 0xfdd7, 0xfe07, 0xfd02, 0xfd46, 0xfd02, 0xfd46, 0xfc20, 0xfc76, 0xfc20, 0xfc76, +0xfb94, 0xfbf9, 0xfb94, 0xfbf9, 0xfbba, 0xfc2b, 0xfbba, 0xfc2b, 0xfbba, 0xfc2b, 0xfc00, +0xfc7b, 0xfc00, 0xfc7b, 0xfc2a, 0xfcab, 0xfc2a, 0xfcab, 0xfca6, 0xfd2a, 0xfca6, 0xfd2a, +0xfc8d, 0xfd10, 0xfc8d, 0xfd10, 0xfbf7, 0xfc76, 0xfbf7, 0xfc76, 0xfbe4, 0xfc5b, 0xfbe4, +0xfc5b, 0xfbe4, 0xfc5b, 0xfc90, 0xfcfb, 0xfc90, 0xfcfb, 0xfd79, 0xfdd4, 0xfd79, 0xfdd4, +0xfeb2, 0xfef9, 0xfeb2, 0xfef9, 0xa, 0x3a, 0xa, 0x3a, 0xac, 0xc0, 0xac, +0xc0, 0x193, 0x187, 0x193, 0x187, 0x193, 0x187, 0x2bb, 0x28b, 0x2bb, 0x28b, +0x398, 0x341, 0x398, 0x341, 0x420, 0x39e, 0x420, 0x39e, 0x4d3, 0x423, 0x4d3, +0x423, 0x60e, 0x52e, 0x60e, 0x52e, 0x60e, 0x52e, 0x739, 0x628, 0x739, 0x628, +0x86b, 0x727, 0x86b, 0x727, 0x999, 0x822, 0x999, 0x822, 0xb58, 0x9ae, 0xb58, +0x9ae, 0xd84, 0xba9, 0xd84, 0xba9, 0x1008, 0xdfd, 0x1008, 0xdfd, 0x1008, 0xdfd, +0x124b, 0x1013, 0x124b, 0x1013, 0x13af, 0x114d, 0x13af, 0x114d, 0x15aa, 0x1322, 0x15aa, +0x1322, 0x1757, 0x14ae, 0x1757, 0x14ae, 0x1897, 0x15d2, 0x1897, 0x15d2, 0x1a03, 0x1727, +0x1a03, 0x1727, 0x1a03, 0x1727, 0x1acc, 0x17de, 0x1acc, 0x17de, 0x1ae5, 0x17eb, 0x1ae5, +0x17eb, 0x1a4f, 0x174d, 0x1a4f, 0x174d, 0x19c4, 0x16c0, 0x19c4, 0x16c0, 0x18f2, 0x15ee, +0x18f2, 0x15ee, 0x18f2, 0x15ee, 0x1822, 0x1523, 0x1822, 0x1523, 0x1854, 0x155d, 0x1854, +0x155d, 0x1821, 0x1532, 0x1821, 0x1532, 0x1756, 0x1471, 0x1756, 0x1471, 0x16f8, 0x141d, +0x16f8, 0x141d, 0x167d, 0x13ab, 0x167d, 0x13ab, 0x167d, 0x13ab, 0x15c1, 0x12f6, 0x15c1, +0x12f6, 0x159f, 0x12d9, 0x159f, 0x12d9, 0x15cd, 0x1309, 0x15cd, 0x1309, 0x1604, 0x1340, +0x1604, 0x1340, 0x164f, 0x1387, 0x164f, 0x1387, 0x16a2, 0x13d3, 0x16a2, 0x13d3, 0x16a2, +0x13d3, 0x1748, 0x146f, 0x1748, 0x146f, 0x17f1, 0x150b, 0x17f1, 0x150b, 0x18d2, 0x15de, +0x18d2, 0x15de, 0x195b, 0x1658, 0x195b, 0x1658, 0x190b, 0x15f9, 0x190b, 0x15f9, 0x190b, +0x15f9, 0x189c, 0x157d, 0x189c, 0x157d, 0x181a, 0x14f0, 0x181a, 0x14f0, 0x1788, 0x1457, +0x1788, 0x1457, 0x16ef, 0x13bc, 0x16ef, 0x13bc, 0x166b, 0x133d, 0x166b, 0x133d, 0x1575, +0x1254, 0x1575, 0x1254, 0x1575, 0x1254, 0x143c, 0x1130, 0x143c, 0x1130, 0x132c, 0x103f, +0x132c, 0x103f, 0x11b3, 0xeee, 0x11b3, 0xeee, 0xf9c, 0xd0a, 0xf9c, 0xd0a, 0xd35, +0xadf, 0xd35, 0xadf, 0xd35, 0xadf, 0xaf3, 0x8e3, 0xaf3, 0x8e3, 0x891, 0x6d0, +0x891, 0x6d0, 0x6c2, 0x557, 0x6c2, 0x557, 0x4e4, 0x3d7, 0x4e4, 0x3d7, 0x28e, +0x1e3, 0x28e, 0x1e3, 0xe6, 0xa2, 0xe6, 0xa2, 0xe6, 0xa2, 0xfefe, 0xff22, +0xfefe, 0xff22, 0xfc42, 0xfccd, 0xfc42, 0xfccd, 0xf8cc, 0xf9bc, 0xf8cc, 0xf9bc, 0xf5dc, +0xf72c, 0xf5dc, 0xf72c, 0xf386, 0xf531, 0xf386, 0xf531, 0xf157, 0xf354, 0xf157, 0xf354, +0xf157, 0xf354, 0xefb9, 0xf1fe, 0xefb9, 0xf1fe, 0xee06, 0xf088, 0xee06, 0xf088, 0xec98, +0xef4b, 0xec98, 0xef4b, 0xeb6a, 0xee41, 0xeb6a, 0xee41, 0xeaac, 0xed9a, 0xeaac, 0xed9a, +0xeaac, 0xed9a, 0xe9a2, 0xec99, 0xe9a2, 0xec99, 0xe82e, 0xeb22, 0xe82e, 0xeb22, 0xe7cc, +0xeab0, 0xe7cc, 0xeab0, 0xe758, 0xea20, 0xe758, 0xea20, 0xe6ea, 0xe98d, 0xe6ea, 0xe98d, +0xe743, 0xe9b7, 0xe743, 0xe9b7, 0xe743, 0xe9b7, 0xe7fb, 0xea3a, 0xe7fb, 0xea3a, 0xe950, +0xeb53, 0xe950, 0xeb53, 0xeb95, 0xed5a, 0xeb95, 0xed5a, 0xeed4, 0xf057, 0xeed4, 0xf057, +0xf1df, 0xf321, 0xf1df, 0xf321, 0xf4eb, 0xf5ee, 0xf4eb, 0xf5ee, 0xf4eb, 0xf5ee, 0xf88a, +0xf950, 0xf88a, 0xf950, 0xfb4f, 0xfbdc, 0xfb4f, 0xfbdc, 0xfdaf, 0xfe09, 0xfdaf, 0xfe09, +0xa3, 0xd0, 0xa3, 0xd0, 0x2db, 0x2e1, 0x2db, 0x2e1, 0x2db, 0x2e1, 0x404, +0x3e9, 0x404, 0x3e9, 0x518, 0x4e3, 0x518, 0x4e3, 0x5be, 0x575, 0x5be, 0x575, +0x56c, 0x515, 0x56c, 0x515, 0x49c, 0x43c, 0x49c, 0x43c, 0x40d, 0x3a8, 0x40d, +0x3a8, 0x40d, 0x3a8, 0x37d, 0x316, 0x37d, 0x316, 0x2cf, 0x269, 0x2cf, 0x269, +0x2df, 0x27c, 0x2df, 0x27c, 0x2ac, 0x24e, 0x2ac, 0x24e, 0x1d2, 0x178, 0x1d2, +0x178, 0x185, 0x131, 0x185, 0x131, 0x185, 0x131, 0x1c1, 0x171, 0x1c1, 0x171, +0x18f, 0x145, 0x18f, 0x145, 0x139, 0xf3, 0x139, 0xf3, 0x1d2, 0x193, 0x1d2, +0x193, 0x267, 0x22e, 0x267, 0x22e, 0x267, 0x22e, 0x283, 0x254, 0x283, 0x254, +0x2f1, 0x2ce, 0x2f1, 0x2ce, 0x37a, 0x367, 0x37a, 0x367, 0x330, 0x332, 0x330, +0x332, 0x2aa, 0x2c5, 0x2aa, 0x2c5, 0x28a, 0x2c6, 0x28a, 0x2c6, 0x28a, 0x2c6, +0x20e, 0x273, 0x20e, 0x273, 0x1a1, 0x236, 0x1a1, 0x236, 0xbe, 0x18b, 0xbe, +0x18b, 0xfeee, 0xfffc, 0xfeee, 0xfffc, 0xfcad, 0xfe04, 0xfcad, 0xfe04, 0xfa2d, 0xfbd4, +0xfa2d, 0xfbd4, 0xfa2d, 0xfbd4, 0xf77d, 0xf97b, 0xf77d, 0xf97b, 0xf46e, 0xf6ca, 0xf46e, +0xf6ca, 0xf1b4, 0xf471, 0xf1b4, 0xf471, 0xef41, 0xf262, 0xef41, 0xf262, 0xecfa, 0xf081, +0xecfa, 0xf081, 0xecfa, 0xf081, 0xea85, 0xee71, 0xea85, 0xee71, 0xe7d7, 0xec26, 0xe7d7, +0xec26, 0xe5c9, 0xea76, 0xe5c9, 0xea76, 0xe401, 0xe905, 0xe401, 0xe905, 0xe257, 0xe7ab, +0xe257, 0xe7ab, 0xe028, 0xe5c1, 0xe028, 0xe5c1, 0xe028, 0xe5c1, 0xddf2, 0xe3c7, 0xddf2, +0xe3c7, 0xdc77, 0xe27a, 0xdc77, 0xe27a, 0xdac3, 0xe0e8, 0xdac3, 0xe0e8, 0xd949, 0xdf83, +0xd949, 0xdf83, 0xd848, 0xde8a, 0xd848, 0xde8a, 0xd7de, 0xde1b, 0xd7de, 0xde1b, 0xd7de, +0xde1b, 0xd80e, 0xde39, 0xd80e, 0xde39, 0xd8c7, 0xded5, 0xd8c7, 0xded5, 0xda1d, 0xe003, +0xda1d, 0xe003, 0xdb0c, 0xe0c1, 0xdb0c, 0xe0c1, 0xdc72, 0xe1ef, 0xdc72, 0xe1ef, 0xdc72, +0xe1ef, 0xde6d, 0xe3ab, 0xde6d, 0xe3ab, 0xdf73, 0xe46f, 0xdf73, 0xe46f, 0xe022, 0xe4d9, +0xe022, 0xe4d9, 0xe11a, 0xe58b, 0xe11a, 0xe58b, 0xe1bd, 0xe5e9, 0xe1bd, 0xe5e9, 0xe282, +0xe669, 0xe282, 0xe669, 0xe282, 0xe669, 0xe437, 0xe7dd, 0xe437, 0xe7dd, 0xe671, 0xe9d9, +0xe671, 0xe9d9, 0xe898, 0xebc5, 0xe898, 0xebc5, 0xea91, 0xed88, 0xea91, 0xed88, 0xec6e, +0xef33, 0xec6e, 0xef33, 0xedb6, 0xf04c, 0xedb6, 0xf04c, 0xedb6, 0xf04c, 0xef17, 0xf180, +0xef17, 0xf180, 0xf10b, 0xf34a, 0xf10b, 0xf34a, 0xf24a, 0xf460, 0xf24a, 0xf460, 0xf2ec, +0xf4d9, 0xf2ec, 0xf4d9, 0xf399, 0xf55c, 0xf399, 0xf55c, 0xf399, 0xf55c, 0xf406, 0xf59c, +0xf406, 0xf59c, 0xf36e, 0xf4d5, 0xf36e, 0xf4d5, 0xf2e7, 0xf41c, 0xf2e7, 0xf41c, 0xf33e, +0xf43b, 0xf33e, 0xf43b, 0xf345, 0xf404, 0xf345, 0xf404, 0xf34c, 0xf3c8, 0xf34c, 0xf3c8, +0xf34c, 0xf3c8, 0xf3f5, 0xf429, 0xf3f5, 0xf429, 0xf4ef, 0xf4d5, 0xf4ef, 0xf4d5, 0xf5ae, +0xf541, 0xf5ae, 0xf541, 0xf711, 0xf64d, 0xf711, 0xf64d, 0xf94b, 0xf82d, 0xf94b, 0xf82d, +0xfb91, 0xfa17, 0xfb91, 0xfa17, 0xfb91, 0xfa17, 0xfe94, 0xfcbc, 0xfe94, 0xfcbc, 0x1e5, +0xffb1, 0x1e5, 0xffb1, 0x501, 0x273, 0x501, 0x273, 0x83a, 0x556, 0x83a, 0x556, +0xbe5, 0x8b0, 0xbe5, 0x8b0, 0xbe5, 0x8b0, 0xf5e, 0xbdf, 0xf5e, 0xbdf, 0x11db, +0xe19, 0x11db, 0xe19, 0x1455, 0x105a, 0x1455, 0x105a, 0x16c7, 0x129c, 0x16c7, 0x129c, +0x18fe, 0x14af, 0x18fe, 0x14af, 0x1ac2, 0x165a, 0x1ac2, 0x165a, 0x1ac2, 0x165a, 0x1bdf, +0x176a, 0x1bdf, 0x176a, 0x1c8a, 0x1812, 0x1c8a, 0x1812, 0x1c58, 0x17e9, 0x1c58, 0x17e9, +0x1b9c, 0x1742, 0x1b9c, 0x1742, 0x1a5a, 0x161e, 0x1a5a, 0x161e, 0x1914, 0x1500, 0x1914, +0x1500, 0x1914, 0x1500, 0x17d3, 0x13ef, 0x17d3, 0x13ef, 0x162d, 0x1281, 0x162d, 0x1281, +0x1472, 0x1104, 0x1472, 0x1104, 0x1262, 0xf37, 0x1262, 0xf37, 0x1085, 0xda1, 0x1085, +0xda1, 0x1085, 0xda1, 0xedf, 0xc45, 0xedf, 0xc45, 0xd92, 0xb44, 0xd92, 0xb44, +0xc3d, 0xa3c, 0xc3d, 0xa3c, 0xa27, 0x873, 0xa27, 0x873, 0x8aa, 0x742, 0x8aa, +0x742, 0x77e, 0x660, 0x77e, 0x660, 0x77e, 0x660, 0x590, 0x4bb, 0x590, 0x4bb, +0x412, 0x383, 0x412, 0x383, 0x318, 0x2cb, 0x318, 0x2cb, 0x17c, 0x16f, 0x17c, +0x16f, 0x1c, 0x4b, 0x1c, 0x4b, 0x1c, 0x4b, 0xff5e, 0xffc5, 0xff5e, 0xffc5, +0xfea1, 0xff3c, 0xfea1, 0xff3c, 0xfdce, 0xfe99, 0xfdce, 0xfe99, 0xfcfc, 0xfdf3, 0xfcfc, +0xfdf3, 0xfc3b, 0xfd59, 0xfc3b, 0xfd59, 0xfb3f, 0xfc7f, 0xfb3f, 0xfc7f, 0xfb3f, 0xfc7f, +0xfaaa, 0xfc07, 0xfaaa, 0xfc07, 0xfa65, 0xfbd9, 0xfa65, 0xfbd9, 0xf9af, 0xfb36, 0xf9af, +0xfb36, 0xf92e, 0xfac2, 0xf92e, 0xfac2, 0xf965, 0xfb00, 0xf965, 0xfb00, 0xf9f5, 0xfb92, +0xf9f5, 0xfb92, 0xf9f5, 0xfb92, 0xfa4e, 0xfbe5, 0xfa4e, 0xfbe5, 0xfaef, 0xfc7b, 0xfaef, +0xfc7b, 0xfc04, 0xfd7f, 0xfc04, 0xfd7f, 0xfcf2, 0xfe55, 0xfcf2, 0xfe55, 0xfdcb, 0xff13, +0xfdcb, 0xff13, 0xfdcb, 0xff13, 0xfed0, 0xfff5, 0xfed0, 0xfff5, 0xff5f, 0x5d, 0xff5f, +0x5d, 0xff76, 0x4a, 0xff76, 0x4a, 0x1b, 0xc0, 0x1b, 0xc0, 0x7a, 0xed, +0x7a, 0xed, 0xde, 0x11e, 0xde, 0x11e, 0xde, 0x11e, 0x1b4, 0x1c0, 0x1b4, +0x1c0, 0x1d2, 0x1a9, 0x1d2, 0x1a9, 0x1ef, 0x192, 0x1ef, 0x192, 0x281, 0x1f2, +0x281, 0x1f2, 0x358, 0x299, 0x358, 0x299, 0x377, 0x28c, 0x377, 0x28c, 0x377, +0x28c, 0x309, 0x1f5, 0x309, 0x1f5, 0x33f, 0x208, 0x33f, 0x208, 0x356, 0x200, +0x356, 0x200, 0x375, 0x206, 0x375, 0x206, 0x3da, 0x257, 0x3da, 0x257, 0x3da, +0x257, 0x439, 0x2a9, 0x439, 0x2a9, 0x4b6, 0x31e, 0x4b6, 0x31e, 0x5d6, 0x43b, +0x5d6, 0x43b, 0x716, 0x57e, 0x716, 0x57e, 0x76f, 0x5df, 0x76f, 0x5df, 0x7e2, +0x65e, 0x7e2, 0x65e, 0x7e2, 0x65e, 0x870, 0x6fb, 0x870, 0x6fb, 0x87f, 0x71c, +0x87f, 0x71c, 0x88f, 0x742, 0x88f, 0x742, 0x8a8, 0x773, 0x8a8, 0x773, 0x8c7, +0x7ab, 0x8c7, 0x7ab, 0x8b5, 0x7b3, 0x8b5, 0x7b3, 0x8b5, 0x7b3, 0x818, 0x731, +0x818, 0x731, 0x6bf, 0x5f2, 0x6bf, 0x5f2, 0x47f, 0x3cd, 0x47f, 0x3cd, 0x2fe, +0x266, 0x2fe, 0x266, 0x27e, 0x200, 0x27e, 0x200, 0x27e, 0x200, 0x13e, 0xd9, +0x13e, 0xd9, 0x26, 0xffd8, 0x26, 0xffd8, 0xff17, 0xfedf, 0xff17, 0xfedf, 0xfd9d, +0xfd7b, 0xfd9d, 0xfd7b, 0xfce9, 0xfcda, 0xfce9, 0xfcda, 0xfcbb, 0xfcbf, 0xfcbb, 0xfcbf, +0xfcbb, 0xfcbf, 0xfc97, 0xfcad, 0xfc97, 0xfcad, 0xfc2f, 0xfc54, 0xfc2f, 0xfc54, 0xfc0d, +0xfc3e, 0xfc0d, 0xfc3e, 0xfbfb, 0xfc37, 0xfbfb, 0xfc37, 0xfb6d, 0xfbb1, 0xfb6d, 0xfbb1, +0xfba6, 0xfbf0, 0xfba6, 0xfbf0, 0xfba6, 0xfbf0, 0xfc4a, 0xfc97, 0xfc4a, 0xfc97, 0xfcc7, +0xfd11, 0xfcc7, 0xfd11, 0xfd8f, 0xfdd4, 0xfd8f, 0xfdd4, 0xfeab, 0xfee6, 0xfeab, 0xfee6, +0xffde, 0xb, 0xffde, 0xb, 0xffde, 0xb, 0xa8, 0xc1, 0xa8, 0xc1, 0x1bd, +0x1be, 0x1bd, 0x1be, 0x353, 0x336, 0x353, 0x336, 0x486, 0x447, 0x486, 0x447, +0x538, 0x4d2, 0x538, 0x4d2, 0x638, 0x5a5, 0x638, 0x5a5, 0x638, 0x5a5, 0x720, +0x65d, 0x720, 0x65d, 0x7c6, 0x6d0, 0x7c6, 0x6d0, 0x94a, 0x81e, 0x94a, 0x81e, +0xadb, 0x977, 0xadb, 0x977, 0xcdd, 0xb3f, 0xcdd, 0xb3f, 0xf1f, 0xd49, 0xf1f, +0xd49, 0xf1f, 0xd49, 0x1092, 0xe84, 0x1092, 0xe84, 0x1217, 0xfd2, 0x1217, 0xfd2, +0x13de, 0x1166, 0x13de, 0x1166, 0x1599, 0x12f2, 0x1599, 0x12f2, 0x169d, 0x13cb, 0x169d, +0x13cb, 0x169d, 0x13cb, 0x1786, 0x148e, 0x1786, 0x148e, 0x186d, 0x1555, 0x186d, 0x1555, +0x1922, 0x15f0, 0x1922, 0x15f0, 0x19ce, 0x1687, 0x19ce, 0x1687, 0x19b9, 0x1665, 0x19b9, +0x1665, 0x18fb, 0x159e, 0x18fb, 0x159e, 0x18fb, 0x159e, 0x17ec, 0x148c, 0x17ec, 0x148c, +0x1786, 0x1428, 0x1786, 0x1428, 0x16db, 0x1382, 0x16db, 0x1382, 0x15a1, 0x1252, 0x15a1, +0x1252, 0x1548, 0x1204, 0x1548, 0x1204, 0x1501, 0x11ca, 0x1501, 0x11ca, 0x1501, 0x11ca, +0x1493, 0x1168, 0x1493, 0x1168, 0x1445, 0x1128, 0x1445, 0x1128, 0x140a, 0x10f9, 0x140a, +0x10f9, 0x13d0, 0x10ca, 0x13d0, 0x10ca, 0x1389, 0x108c, 0x1389, 0x108c, 0x1389, 0x108c, +0x140a, 0x1112, 0x140a, 0x1112, 0x14ad, 0x11ba, 0x14ad, 0x11ba, 0x14be, 0x11cc, 0x14be, +0x11cc, 0x15d2, 0x12e1, 0x15d2, 0x12e1, 0x1704, 0x1412, 0x1704, 0x1412, 0x1708, 0x1415, +0x1708, 0x1415, 0x1708, 0x1415, 0x1747, 0x1453, 0x1747, 0x1453, 0x17bf, 0x14cd, 0x17bf, +0x14cd, 0x17e3, 0x14f5, 0x17e3, 0x14f5, 0x17b4, 0x14cc, 0x17b4, 0x14cc, 0x17ab, 0x14d1, +0x17ab, 0x14d1, 0x1769, 0x14a2, 0x1769, 0x14a2, 0x1769, 0x14a2, 0x1627, 0x1379, 0x1627, +0x1379, 0x154a, 0x12be, 0x154a, 0x12be, 0x1460, 0x11fd, 0x1460, 0x11fd, 0x128c, 0x105c, +0x128c, 0x105c, 0x10c5, 0xecf, 0x10c5, 0xecf, 0x10c5, 0xecf, 0xec0, 0xd0d, 0xec0, +0xd0d, 0xc40, 0xad8, 0xc40, 0xad8, 0x9a4, 0x88f, 0x9a4, 0x88f, 0x786, 0x6c8, +0x786, 0x6c8, 0x563, 0x501, 0x563, 0x501, 0x2eb, 0x2ea, 0x2eb, 0x2ea, 0x2eb, +0x2ea, 0xbc, 0x11b, 0xbc, 0x11b, 0xfe9e, 0xff5e, 0xfe9e, 0xff5e, 0xfc2d, 0xfd4c, +0xfc2d, 0xfd4c, 0xf94c, 0xfac6, 0xf94c, 0xfac6, 0xf716, 0xf8e5, 0xf716, 0xf8e5, 0xf4ea, +0xf707, 0xf4ea, 0xf707, 0xf4ea, 0xf707, 0xf29b, 0xf4fd, 0xf29b, 0xf4fd, 0xf119, 0xf3b6, +0xf119, 0xf3b6, 0xef94, 0xf25f, 0xef94, 0xf25f, 0xee7e, 0xf16d, 0xee7e, 0xf16d, 0xedb8, +0xf0bf, 0xedb8, 0xf0bf, 0xedb8, 0xf0bf, 0xec9d, 0xefb0, 0xec9d, 0xefb0, 0xeb50, 0xee62, +0xeb50, 0xee62, 0xea44, 0xed4b, 0xea44, 0xed4b, 0xe979, 0xec6a, 0xe979, 0xec6a, 0xe8ac, +0xeb7e, 0xe8ac, 0xeb7e, 0xe822, 0xeacc, 0xe822, 0xeacc, 0xe822, 0xeacc, 0xe843, 0xeac0, +0xe843, 0xeac0, 0xe9be, 0xec08, 0xe9be, 0xec08, 0xebab, 0xedbe, 0xebab, 0xedbe, 0xed9f, +0xef7b, 0xed9f, 0xef7b, 0xefc6, 0xf16a, 0xefc6, 0xf16a, 0xefc6, 0xf16a, 0xf228, 0xf395, +0xf228, 0xf395, 0xf51c, 0xf655, 0xf51c, 0xf655, 0xf79e, 0xf8a6, 0xf79e, 0xf8a6, 0xf9b8, +0xfa94, 0xf9b8, 0xfa94, 0xfbe5, 0xfc9b, 0xfbe5, 0xfc9b, 0xfdca, 0xfe60, 0xfdca, 0xfe60, +0xfdca, 0xfe60, 0xffa9, 0x24, 0xffa9, 0x24, 0x160, 0x1c6, 0x160, 0x1c6, 0x253, +0x2a9, 0x253, 0x2a9, 0x29c, 0x2e6, 0x29c, 0x2e6, 0x293, 0x2d7, 0x293, 0x2d7, +0x270, 0x2b1, 0x270, 0x2b1, 0x270, 0x2b1, 0x1a1, 0x1e0, 0x1a1, 0x1e0, 0x7c, +0xbc, 0x7c, 0xbc, 0xa7, 0xea, 0xa7, 0xea, 0xcd, 0x112, 0xcd, 0x112, +0x4e, 0x94, 0x4e, 0x94, 0x4e, 0x94, 0x88, 0xcf, 0x88, 0xcf, 0x88, +0xcf, 0x88, 0xcf, 0x20, 0x65, 0x20, 0x65, 0x2, 0x44, 0x2, 0x44, +0x63, 0xa0, 0x63, 0xa0, 0xdf, 0x117, 0xdf, 0x117, 0xdf, 0x117, 0x14d, +0x181, 0x14d, 0x181, 0x26e, 0x29e, 0x26e, 0x29e, 0x2f5, 0x322, 0x2f5, 0x322, +0x2ba, 0x2e8, 0x2ba, 0x2e8, 0x32e, 0x35f, 0x32e, 0x35f, 0x3d2, 0x40c, 0x3d2, +0x40c, 0x3d2, 0x40c, 0x3d3, 0x41b, 0x3d3, 0x41b, 0x38a, 0x3e6, 0x38a, 0x3e6, +0x35f, 0x3d6, 0x35f, 0x3d6, 0x231, 0x2ca, 0x231, 0x2ca, 0xfff9, 0xbc, 0xfff9, +0xbc, 0xfff9, 0xbc, 0xfdd6, 0xfeca, 0xfdd6, 0xfeca, 0xfbe7, 0xfd14, 0xfbe7, 0xfd14, +0xf985, 0xfaf1, 0xf985, 0xfaf1, 0xf70f, 0xf8c0, 0xf70f, 0xf8c0, 0xf50f, 0xf70a, 0xf50f, +0xf70a, 0xf283, 0xf4cb, 0xf283, 0xf4cb, 0xf283, 0xf4cb, 0xefcb, 0xf262, 0xefcb, 0xf262, +0xed36, 0xf01e, 0xed36, 0xf01e, 0xeaa3, 0xeddb, 0xeaa3, 0xeddb, 0xe85d, 0xebe2, 0xe85d, +0xebe2, 0xe638, 0xea06, 0xe638, 0xea06, 0xe413, 0xe826, 0xe413, 0xe826, 0xe413, 0xe826, +0xe17d, 0xe5cd, 0xe17d, 0xe5cd, 0xdf54, 0xe3da, 0xdf54, 0xe3da, 0xdd6d, 0xe21f, 0xdd6d, +0xe21f, 0xdb54, 0xe028, 0xdb54, 0xe028, 0xd9fc, 0xdee9, 0xd9fc, 0xdee9, 0xd9fc, 0xdee9, +0xd927, 0xde22, 0xd927, 0xde22, 0xd8f9, 0xddf7, 0xd8f9, 0xddf7, 0xd924, 0xde1a, 0xd924, +0xde1a, 0xd9d4, 0xdeba, 0xd9d4, 0xdeba, 0xdb02, 0xdfcf, 0xdb02, 0xdfcf, 0xdc0a, 0xe0b5, +0xdc0a, 0xe0b5, 0xdc0a, 0xe0b5, 0xdd5f, 0xe1e3, 0xdd5f, 0xe1e3, 0xdde5, 0xe23a, 0xdde5, +0xe23a, 0xde0b, 0xe230, 0xde0b, 0xe230, 0xdeb4, 0xe2a4, 0xdeb4, 0xe2a4, 0xdf81, 0xe33c, +0xdf81, 0xe33c, 0xe0f5, 0xe47a, 0xe0f5, 0xe47a, 0xe0f5, 0xe47a, 0xe25d, 0xe5ad, 0xe25d, +0xe5ad, 0xe385, 0xe6a3, 0xe385, 0xe6a3, 0xe4f7, 0xe7e5, 0xe4f7, 0xe7e5, 0xe6ba, 0xe97b, +0xe6ba, 0xe97b, 0xe89a, 0xeb33, 0xe89a, 0xeb33, 0xe89a, 0xeb33, 0xe9f1, 0xec65, 0xe9f1, +0xec65, 0xeb33, 0xed86, 0xeb33, 0xed86, 0xed08, 0xef3d, 0xed08, 0xef3d, 0xee26, 0xf040, +0xee26, 0xf040, 0xef38, 0xf13a, 0xef38, 0xf13a, 0xf112, 0xf2fb, 0xf112, 0xf2fb, 0xf112, +0xf2fb, 0xf241, 0xf413, 0xf241, 0xf413, 0xf32c, 0xf4e5, 0xf32c, 0xf4e5, 0xf3b7, 0xf554, +0xf3b7, 0xf554, 0xf3df, 0xf55f, 0xf3df, 0xf55f, 0xf394, 0xf4f1, 0xf394, 0xf4f1, 0xf349, +0xf47e, 0xf349, 0xf47e, 0xf349, 0xf47e, 0xf434, 0xf53b, 0xf434, 0xf53b, 0xf48d, 0xf560, +0xf48d, 0xf560, 0xf51f, 0xf5b7, 0xf51f, 0xf5b7, 0xf6cb, 0xf722, 0xf6cb, 0xf722, 0xf861, +0xf871, 0xf861, 0xf871, 0xf861, 0xf871, 0xfa0d, 0xf9cf, 0xfa0d, 0xf9cf, 0xfbf4, 0xfb63, +0xfbf4, 0xfb63, 0xfea7, 0xfdbe, 0xfea7, 0xfdbe, 0x139, 0xfff6, 0x139, 0xfff6, 0x3d4, +0x235, 0x3d4, 0x235, 0x76a, 0x56f, 0x76a, 0x56f, 0x76a, 0x56f, 0xac2, 0x86d, +0xac2, 0x86d, 0xd8d, 0xae1, 0xd8d, 0xae1, 0x1092, 0xd93, 0x1092, 0xd93, 0x13a0, +0x1055, 0x13a0, 0x1055, 0x15fe, 0x1270, 0x15fe, 0x1270, 0x185f, 0x1497, 0x185f, 0x1497, +0x185f, 0x1497, 0x1a53, 0x165c, 0x1a53, 0x165c, 0x1b61, 0x1748, 0x1b61, 0x1748, 0x1c2c, +0x17fc, 0x1c2c, 0x17fc, 0x1ca1, 0x1869, 0x1ca1, 0x1869, 0x1c21, 0x17ee, 0x1c21, 0x17ee, +0x1c21, 0x17ee, 0x1a78, 0x1658, 0x1a78, 0x1658, 0x1923, 0x1522, 0x1923, 0x1522, 0x177a, +0x13a5, 0x177a, 0x13a5, 0x1589, 0x11ed, 0x1589, 0x11ed, 0x139e, 0x1043, 0x139e, 0x1043, +0x1179, 0xe6a, 0x1179, 0xe6a, 0x1179, 0xe6a, 0xffe, 0xd42, 0xffe, 0xd42, 0xe23, +0xbc0, 0xe23, 0xbc0, 0xc65, 0xa5f, 0xc65, 0xa5f, 0xa84, 0x8de, 0xa84, 0x8de, +0x8ba, 0x773, 0x8ba, 0x773, 0x751, 0x669, 0x751, 0x669, 0x751, 0x669, 0x504, +0x477, 0x504, 0x477, 0x2f4, 0x2bf, 0x2f4, 0x2bf, 0x16b, 0x188, 0x16b, 0x188, +0x58, 0xbf, 0x58, 0xbf, 0xff8f, 0x39, 0xff8f, 0x39, 0xff8f, 0x39, 0xfe84, +0xff69, 0xfe84, 0xff69, 0xfd9a, 0xfeb0, 0xfd9a, 0xfeb0, 0xfcd1, 0xfe10, 0xfcd1, 0xfe10, +0xfc0a, 0xfd69, 0xfc0a, 0xfd69, 0xfb6e, 0xfce3, 0xfb6e, 0xfce3, 0xf9e5, 0xfb68, 0xf9e5, +0xfb68, 0xf9e5, 0xfb68, 0xf85a, 0xf9e3, 0xf85a, 0xf9e3, 0xf835, 0xf9be, 0xf835, 0xf9be, +0xf821, 0xf9a2, 0xf821, 0xf9a2, 0xf889, 0xf9fe, 0xf889, 0xf9fe, 0xf91a, 0xfa7e, 0xf91a, +0xfa7e, 0xf9a0, 0xfaf0, 0xf9a0, 0xfaf0, 0xf9a0, 0xfaf0, 0xfa49, 0xfb82, 0xfa49, 0xfb82, +0xfae6, 0xfc07, 0xfae6, 0xfc07, 0xfc34, 0xfd3c, 0xfc34, 0xfd3c, 0xfd04, 0xfdf3, 0xfd04, +0xfdf3, 0xfdd8, 0xfeae, 0xfdd8, 0xfeae, 0xfdd8, 0xfeae, 0xfecd, 0xff8b, 0xfecd, 0xff8b, +0xfef8, 0xffa0, 0xfef8, 0xffa0, 0xff90, 0x22, 0xff90, 0x22, 0x66, 0xe4, 0x66, +0xe4, 0x126, 0x192, 0x126, 0x192, 0x1d1, 0x22b, 0x1d1, 0x22b, 0x1d1, 0x22b, +0x264, 0x2ad, 0x264, 0x2ad, 0x31f, 0x358, 0x31f, 0x358, 0x325, 0x34d, 0x325, +0x34d, 0x314, 0x32c, 0x314, 0x32c, 0x390, 0x397, 0x390, 0x397, 0x390, 0x397, +0x3f4, 0x3e8, 0x3f4, 0x3e8, 0x450, 0x431, 0x450, 0x431, 0x4e3, 0x4b0, 0x4e3, +0x4b0, 0x52c, 0x4e3, 0x52c, 0x4e3, 0x51c, 0x4bb, 0x51c, 0x4bb, 0x536, 0x4bd, +0x536, 0x4bd, 0x536, 0x4bd, 0x4eb, 0x459, 0x4eb, 0x459, 0x4f3, 0x447, 0x4f3, +0x447, 0x567, 0x4a0, 0x567, 0x4a0, 0x644, 0x564, 0x644, 0x564, 0x716, 0x61e, +0x716, 0x61e, 0x746, 0x637, 0x746, 0x637, 0x746, 0x637, 0x7f7, 0x6d4, 0x7f7, +0x6d4, 0x838, 0x704, 0x838, 0x704, 0x87f, 0x73d, 0x87f, 0x73d, 0x8f1, 0x7a6, +0x8f1, 0x7a6, 0x94c, 0x7fc, 0x94c, 0x7fc, 0x94c, 0x7fc, 0x962, 0x813, 0x962, +0x813, 0x8e6, 0x79c, 0x8e6, 0x79c, 0x8a9, 0x76a, 0x8a9, 0x76a, 0x746, 0x617, +0x746, 0x617, 0x5a0, 0x486, 0x5a0, 0x486, 0x43f, 0x33f, 0x43f, 0x33f, 0x43f, +0x33f, 0x26b, 0x188, 0x26b, 0x188, 0xfb, 0x39, 0xfb, 0x39, 0xffb6, 0xff16, +0xffb6, 0xff16, 0xfe91, 0xfe15, 0xfe91, 0xfe15, 0xfd95, 0xfd3d, 0xfd95, 0xfd3d, 0xfcb4, +0xfc7f, 0xfcb4, 0xfc7f, 0xfcb4, 0xfc7f, 0xfc1c, 0xfc08, 0xfc1c, 0xfc08, 0xfb7d, 0xfb86, +0xfb7d, 0xfb86, 0xfb65, 0xfb87, 0xfb65, 0xfb87, 0xfb8a, 0xfbc1, 0xfb8a, 0xfbc1, 0xfac0, +0xfb04, 0xfac0, 0xfb04, 0xfac0, 0xfb04, 0xfa9d, 0xfae8, 0xfa9d, 0xfae8, 0xfb35, 0xfb7f, +0xfb35, 0xfb7f, 0xfbf5, 0xfc36, 0xfbf5, 0xfc36, 0xfd11, 0xfd41, 0xfd11, 0xfd41, 0xfdfc, +0xfe13, 0xfdfc, 0xfe13, 0xff5b, 0xff51, 0xff5b, 0xff51, 0xff5b, 0xff51, 0x9f, 0x6c, +0x9f, 0x6c, 0x1fb, 0x199, 0x1fb, 0x199, 0x3b0, 0x319, 0x3b0, 0x319, 0x441, +0x36f, 0x441, 0x36f, 0x4ba, 0x3a9, 0x4ba, 0x3a9, 0x5e4, 0x492, 0x5e4, 0x492, +0x5e4, 0x492, 0x6da, 0x544, 0x6da, 0x544, 0x814, 0x63a, 0x814, 0x63a, 0x977, +0x75a, 0x977, 0x75a, 0xb2b, 0x8ce, 0xb2b, 0x8ce, 0xcbf, 0xa25, 0xcbf, 0xa25, +0xcbf, 0xa25, 0xe0f, 0xb3c, 0xe0f, 0xb3c, 0x101b, 0xd14, 0x101b, 0xd14, 0x11f6, +0xec1, 0x11f6, 0xec1, 0x1371, 0x1015, 0x1371, 0x1015, 0x14ae, 0x1132, 0x14ae, 0x1132, +0x15ee, 0x1259, 0x15ee, 0x1259, 0x15ee, 0x1259, 0x1700, 0x1359, 0x1700, 0x1359, 0x1802, +0x1451, 0x1802, 0x1451, 0x194d, 0x1598, 0x194d, 0x1598, 0x1a45, 0x1692, 0x1a45, 0x1692, +0x1afa, 0x174f, 0x1afa, 0x174f, 0x1ac4, 0x1725, 0x1ac4, 0x1725, 0x1ac4, 0x1725, 0x1a24, +0x1695, 0x1a24, 0x1695, 0x1987, 0x160b, 0x1987, 0x160b, 0x18bb, 0x1555, 0x18bb, 0x1555, +0x17bb, 0x146b, 0x17bb, 0x146b, 0x16d4, 0x139a, 0x16d4, 0x139a, 0x16d4, 0x139a, 0x1625, +0x1301, 0x1625, 0x1301, 0x155d, 0x124c, 0x155d, 0x124c, 0x14b1, 0x11b2, 0x14b1, 0x11b2, +0x1391, 0x10a2, 0x1391, 0x10a2, 0x12c5, 0xfe2, 0x12c5, 0xfe2, 0x1264, 0xf8a, 0x1264, +0xf8a, 0x1264, 0xf8a, 0x123c, 0xf6a, 0x123c, 0xf6a, 0x127f, 0xfb1, 0x127f, 0xfb1, +0x1286, 0xfba, 0x1286, 0xfba, 0x1330, 0x1064, 0x1330, 0x1064, 0x13ca, 0x10fe, 0x13ca, +0x10fe, 0x13a8, 0x10dc, 0x13a8, 0x10dc, 0x13a8, 0x10dc, 0x13fe, 0x1134, 0x13fe, 0x1134, +0x146d, 0x11a6, 0x146d, 0x11a6, 0x14a7, 0x11e6, 0x14a7, 0x11e6, 0x14bb, 0x1204, 0x14bb, +0x1204, 0x14ac, 0x1204, 0x14ac, 0x1204, 0x14ac, 0x1204, 0x14ba, 0x1227, 0x14ba, 0x1227, +0x1499, 0x1222, 0x1499, 0x1222, 0x1452, 0x11ff, 0x1452, 0x11ff, 0x12d3, 0x10ab, 0x12d3, +0x10ab, 0x10c8, 0xed3, 0x10c8, 0xed3, 0xf7c, 0xdc2, 0xf7c, 0xdc2, 0xf7c, 0xdc2, +0xe18, 0xca1, 0xe18, 0xca1, 0xcad, 0xb7f, 0xcad, 0xb7f, 0xa91, 0x9b5, 0xa91, +0x9b5, 0x876, 0x7f0, 0x876, 0x7f0, 0x6db, 0x6af, 0x6db, 0x6af, 0x4ad, 0x4df, +0x4ad, 0x4df, 0x4ad, 0x4df, 0x2d1, 0x362, 0x2d1, 0x362, 0xb3, 0x1a5, 0xb3, +0x1a5, 0xfde6, 0xff35, 0xfde6, 0xff35, 0xfbcd, 0xfd78, 0xfbcd, 0xfd78, 0xf9d7, 0xfbd9, +0xf9d7, 0xfbd9, 0xf9d7, 0xfbd9, 0xf7ad, 0xfa01, 0xf7ad, 0xfa01, 0xf5bf, 0xf85c, 0xf5bf, +0xf85c, 0xf415, 0xf6f3, 0xf415, 0xf6f3, 0xf2cf, 0xf5e3, 0xf2cf, 0xf5e3, 0xf18e, 0xf4cf, +0xf18e, 0xf4cf, 0xf0a5, 0xf406, 0xf0a5, 0xf406, 0xf0a5, 0xf406, 0xefa2, 0xf317, 0xefa2, +0xf317, 0xee0d, 0xf18b, 0xee0d, 0xf18b, 0xec56, 0xefd1, 0xec56, 0xefd1, 0xeb2b, 0xee98, +0xeb2b, 0xee98, 0xea90, 0xede5, 0xea90, 0xede5, 0xe9e3, 0xed15, 0xe9e3, 0xed15, 0xe9e3, +0xed15, 0xea0e, 0xed15, 0xea0e, 0xed15, 0xeae6, 0xedbb, 0xeae6, 0xedbb, 0xec0d, 0xeeab, +0xec0d, 0xeeab, 0xed61, 0xefc2, 0xed61, 0xefc2, 0xef18, 0xf13b, 0xef18, 0xf13b, 0xef18, +0xf13b, 0xf186, 0xf369, 0xf186, 0xf369, 0xf3fd, 0xf5a2, 0xf3fd, 0xf5a2, 0xf69f, 0xf807, +0xf69f, 0xf807, 0xf89b, 0xf9c9, 0xf89b, 0xf9c9, 0xfac6, 0xfbbf, 0xfac6, 0xfbbf, 0xfd20, +0xfde9, 0xfd20, 0xfde9, 0xfd20, 0xfde9, 0xfee2, 0xff81, 0xfee2, 0xff81, 0xe7, 0x164, +0xe7, 0x164, 0x21f, 0x27f, 0x21f, 0x27f, 0x324, 0x36f, 0x324, 0x36f, 0x400, +0x43d, 0x400, 0x43d, 0x3e0, 0x415, 0x3e0, 0x415, 0x3e0, 0x415, 0x2fc, 0x32e, +0x2fc, 0x32e, 0x272, 0x2a7, 0x272, 0x2a7, 0x23f, 0x27a, 0x23f, 0x27a, 0x145, +0x189, 0x145, 0x189, 0x12b, 0x17b, 0x12b, 0x17b, 0x12b, 0x17b, 0x9e, 0xfb, +0x9e, 0xfb, 0x20, 0x8a, 0x20, 0x8a, 0xffee, 0x65, 0xffee, 0x65, 0xfefa, +0xff7d, 0xfefa, 0xff7d, 0xff4f, 0xffdd, 0xff4f, 0xffdd, 0xff36, 0xffcb, 0xff36, 0xffcb, +0xff36, 0xffcb, 0xff39, 0xffd6, 0xff39, 0xffd6, 0x18, 0xba, 0x18, 0xba, 0x41, +0xe6, 0x41, 0xe6, 0xffeb, 0x93, 0xffeb, 0x93, 0xb5, 0x15f, 0xb5, 0x15f, +0xb5, 0x15f, 0x1e3, 0x290, 0x1e3, 0x290, 0x1f7, 0x2a9, 0x1f7, 0x2a9, 0x279, +0x332, 0x279, 0x332, 0x2ac, 0x370, 0x2ac, 0x370, 0x250, 0x324, 0x250, 0x324, +0x175, 0x25d, 0x175, 0x25d, 0x175, 0x25d, 0x1c, 0x120, 0x1c, 0x120, 0xfe14, +0xff39, 0xfe14, 0xff39, 0xfb97, 0xfce4, 0xfb97, 0xfce4, 0xf980, 0xfafe, 0xf980, 0xfafe, +0xf776, 0xf92b, 0xf776, 0xf92b, 0xf577, 0xf76a, 0xf577, 0xf76a, 0xf577, 0xf76a, 0xf332, +0xf568, 0xf332, 0xf568, 0xf0ed, 0xf36d, 0xf0ed, 0xf36d, 0xee66, 0xf133, 0xee66, 0xf133, +0xec58, 0xef74, 0xec58, 0xef74, 0xea25, 0xed92, 0xea25, 0xed92, 0xea25, 0xed92, 0xe822, +0xebe0, 0xe822, 0xebe0, 0xe603, 0xea0f, 0xe603, 0xea0f, 0xe34b, 0xe7a1, 0xe34b, 0xe7a1, +0xe195, 0xe630, 0xe195, 0xe630, 0xdf2a, 0xe402, 0xdf2a, 0xe402, 0xddc1, 0xe2ce, 0xddc1, +0xe2ce, 0xddc1, 0xe2ce, 0xdcfd, 0xe234, 0xdcfd, 0xe234, 0xdc03, 0xe15a, 0xdc03, 0xe15a, +0xdc20, 0xe18c, 0xdc20, 0xe18c, 0xdc94, 0xe208, 0xdc94, 0xe208, 0xdd3a, 0xe2ab, 0xdd3a, +0xe2ab, 0xdd62, 0xe2c3, 0xdd62, 0xe2c3, 0xdd62, 0xe2c3, 0xde10, 0xe358, 0xde10, 0xe358, +0xdea7, 0xe3ca, 0xdea7, 0xe3ca, 0xdeff, 0xe3f4, 0xdeff, 0xe3f4, 0xdf9d, 0xe45e, 0xdf9d, +0xe45e, 0xe024, 0xe4a9, 0xe024, 0xe4a9, 0xe024, 0xe4a9, 0xe10a, 0xe550, 0xe10a, 0xe550, +0xe1e4, 0xe5e7, 0xe1e4, 0xe5e7, 0xe2d6, 0xe696, 0xe2d6, 0xe696, 0xe3fe, 0xe77b, 0xe3fe, +0xe77b, 0xe56b, 0xe8a8, 0xe56b, 0xe8a8, 0xe6ef, 0xe9ee, 0xe6ef, 0xe9ee, 0xe6ef, 0xe9ee, +0xe884, 0xeb49, 0xe884, 0xeb49, 0xe9fc, 0xec8d, 0xe9fc, 0xec8d, 0xeb34, 0xed97, 0xeb34, +0xed97, 0xecaa, 0xeee4, 0xecaa, 0xeee4, 0xede1, 0xeff8, 0xede1, 0xeff8, 0xef1d, 0xf116, +0xef1d, 0xf116, 0xef1d, 0xf116, 0xf09b, 0xf27a, 0xf09b, 0xf27a, 0xf194, 0xf35b, 0xf194, +0xf35b, 0xf22c, 0xf3de, 0xf22c, 0xf3de, 0xf276, 0xf413, 0xf276, 0xf413, 0xf270, 0xf3f7, +0xf270, 0xf3f7, 0xf270, 0xf3f7, 0xf224, 0xf393, 0xf224, 0xf393, 0xf248, 0xf39c, 0xf248, +0xf39c, 0xf2a8, 0xf3da, 0xf2a8, 0xf3da, 0xf29f, 0xf3a9, 0xf29f, 0xf3a9, 0xf41c, 0xf4f7, +0xf41c, 0xf4f7, 0xf5b2, 0xf656, 0xf5b2, 0xf656, 0xf5b2, 0xf656, 0xf69f, 0xf703, 0xf69f, +0xf703, 0xf866, 0xf882, 0xf866, 0xf882, 0xfa6f, 0xfa3c, 0xfa6f, 0xfa3c, 0xfd0e, 0xfc84, +0xfd0e, 0xfc84, 0xffa2, 0xfebc, 0xffa2, 0xfebc, 0x258, 0x111, 0x258, 0x111, 0x258, +0x111, 0x4f3, 0x348, 0x4f3, 0x348, 0x7fb, 0x5eb, 0x7fb, 0x5eb, 0xbea, 0x977, +0xbea, 0x977, 0xf26, 0xc53, 0xf26, 0xc53, 0x1239, 0xf0c, 0x1239, 0xf0c, 0x1239, +0xf0c, 0x14e1, 0x1163, 0x14e1, 0x1163, 0x1735, 0x1370, 0x1735, 0x1370, 0x1901, 0x1500, +0x1901, 0x1500, 0x1a35, 0x1607, 0x1a35, 0x1607, 0x1b29, 0x16dc, 0x1b29, 0x16dc, 0x1b47, +0x16eb, 0x1b47, 0x16eb, 0x1b47, 0x16eb, 0x1aa1, 0x1648, 0x1aa1, 0x1648, 0x1944, 0x14fe, +0x1944, 0x14fe, 0x1847, 0x1423, 0x1847, 0x1423, 0x170e, 0x131d, 0x170e, 0x131d, 0x15a2, +0x11f2, 0x15a2, 0x11f2, 0x141c, 0x10ba, 0x141c, 0x10ba, 0x141c, 0x10ba, 0x122c, 0xf22, +0x122c, 0xf22, 0x10c3, 0xe1b, 0x10c3, 0xe1b, 0xf2f, 0xcef, 0xf2f, 0xcef, 0xd3b, +0xb68, 0xd3b, 0xb68, 0xaf0, 0x98c, 0xaf0, 0x98c, 0xaf0, 0x98c, 0x913, 0x81b, +0x913, 0x81b, 0x74c, 0x6be, 0x74c, 0x6be, 0x558, 0x52e, 0x558, 0x52e, 0x447, +0x479, 0x447, 0x479, 0x2fb, 0x380, 0x2fb, 0x380, 0x15f, 0x22d, 0x15f, 0x22d, +0x15f, 0x22d, 0x4b, 0x156, 0x4b, 0x156, 0xff66, 0xa0, 0xff66, 0xa0, 0xfe8a, +0xffe8, 0xfe8a, 0xffe8, 0xfd42, 0xfeb7, 0xfd42, 0xfeb7, 0xfc07, 0xfd86, 0xfc07, 0xfd86, +0xfb47, 0xfcc5, 0xfb47, 0xfcc5, 0xfb47, 0xfcc5, 0xfa4c, 0xfbbe, 0xfa4c, 0xfbbe, 0xf9ce, +0xfb2d, 0xf9ce, 0xfb2d, 0xf97d, 0xfabf, 0xf97d, 0xfabf, 0xf94c, 0xfa6c, 0xf94c, 0xfa6c, +0xf921, 0xfa1a, 0xf921, 0xfa1a, 0xf921, 0xfa1a, 0xf977, 0xfa47, 0xf977, 0xfa47, 0xfa62, +0xfb07, 0xfa62, 0xfb07, 0xfa96, 0xfb10, 0xfa96, 0xfb10, 0xfb4a, 0xfb9b, 0xfb4a, 0xfb9b, +0xfbf3, 0xfc1e, 0xfbf3, 0xfc1e, 0xfcee, 0xfcf7, 0xfcee, 0xfcf7, 0xfcee, 0xfcf7, 0xfdc1, +0xfdab, 0xfdc1, 0xfdab, 0xfe28, 0xfdf8, 0xfe28, 0xfdf8, 0xfeca, 0xfe85, 0xfeca, 0xfe85, +0xff34, 0xfede, 0xff34, 0xfede, 0x87, 0x25, 0x87, 0x25, 0x148, 0xde, 0x148, +0xde, 0x148, 0xde, 0x222, 0x1b2, 0x222, 0x1b2, 0x352, 0x2df, 0x352, 0x2df, +0x3c7, 0x354, 0x3c7, 0x354, 0x40f, 0x39b, 0x40f, 0x39b, 0x406, 0x392, 0x406, +0x392, 0x406, 0x392, 0x3e2, 0x36d, 0x3e2, 0x36d, 0x3cb, 0x353, 0x3cb, 0x353, +0x416, 0x39a, 0x416, 0x39a, 0x412, 0x390, 0x412, 0x390, 0x3e1, 0x355, 0x3e1, +0x355, 0x3f4, 0x35d, 0x3f4, 0x35d, 0x3f4, 0x35d, 0x416, 0x371, 0x416, 0x371, +0x46e, 0x3bb, 0x46e, 0x3bb, 0x512, 0x44e, 0x512, 0x44e, 0x599, 0x4c4, 0x599, +0x4c4, 0x605, 0x520, 0x605, 0x520, 0x6c0, 0x5ca, 0x6c0, 0x5ca, 0x6c0, 0x5ca, +0x7d2, 0x6cf, 0x7d2, 0x6cf, 0x8b4, 0x7a6, 0x8b4, 0x7a6, 0x944, 0x82e, 0x944, +0x82e, 0xa10, 0x8f6, 0xa10, 0x8f6, 0xa3d, 0x924, 0xa3d, 0x924, 0xa3d, 0x924, +0xa64, 0x951, 0xa64, 0x951, 0xa8d, 0x987, 0xa8d, 0x987, 0xa22, 0x92c, 0xa22, +0x92c, 0x96d, 0x88e, 0x96d, 0x88e, 0x806, 0x743, 0x806, 0x743, 0x66f, 0x5cc, +0x66f, 0x5cc, 0x66f, 0x5cc, 0x52d, 0x4af, 0x52d, 0x4af, 0x3f4, 0x39d, 0x3f4, +0x39d, 0x25e, 0x22f, 0x25e, 0x22f, 0x136, 0x131, 0x136, 0x131, 0x33, 0x58, +0x33, 0x58, 0x33, 0x58, 0xff35, 0xff81, 0xff35, 0xff81, 0xfe26, 0xfe98, 0xfe26, +0xfe98, 0xfcdd, 0xfd6f, 0xfcdd, 0xfd6f, 0xfc38, 0xfce6, 0xfc38, 0xfce6, 0xfbb0, 0xfc74, +0xfbb0, 0xfc74, 0xfb46, 0xfc1a, 0xfb46, 0xfc1a, 0xfb46, 0xfc1a, 0xfb5c, 0xfc37, 0xfb5c, +0xfc37, 0xfbb8, 0xfc93, 0xfbb8, 0xfc93, 0xfbcf, 0xfca1, 0xfbcf, 0xfca1, 0xfbc8, 0xfc89, +0xfbc8, 0xfc89, 0xfc63, 0xfd0d, 0xfc63, 0xfd0d, 0xfd65, 0xfdee, 0xfd65, 0xfdee, 0xfd65, +0xfdee, 0xfdf6, 0xfe58, 0xfdf6, 0xfe58, 0xfeae, 0xfee2, 0xfeae, 0xfee2, 0xffb9, 0xffba, +0xffb9, 0xffba, 0x42, 0xb, 0x42, 0xb, 0xfc, 0x8a, 0xfc, 0x8a, 0xfc, +0x8a, 0x210, 0x161, 0x210, 0x161, 0x314, 0x225, 0x314, 0x225, 0x3e7, 0x2bb, +0x3e7, 0x2bb, 0x519, 0x3ae, 0x519, 0x3ae, 0x69d, 0x4f7, 0x69d, 0x4f7, 0x831, +0x652, 0x831, 0x652, 0x831, 0x652, 0x9c7, 0x7b3, 0x9c7, 0x7b3, 0xb89, 0x944, +0xb89, 0x944, 0xd77, 0xb07, 0xd77, 0xb07, 0xee9, 0xc51, 0xee9, 0xc51, 0x108c, +0xdd3, 0x108c, 0xdd3, 0x11de, 0xf09, 0x11de, 0xf09, 0x11de, 0xf09, 0x1311, 0x1025, +0x1311, 0x1025, 0x1474, 0x1176, 0x1474, 0x1176, 0x15a5, 0x1299, 0x15a5, 0x1299, 0x1700, +0x13eb, 0x1700, 0x13eb, 0x1824, 0x150a, 0x1824, 0x150a, 0x1824, 0x150a, 0x18f0, 0x15d4, +0x18f0, 0x15d4, 0x18f3, 0x15d7, 0x18f3, 0x15d7, 0x18ac, 0x1592, 0x18ac, 0x1592, 0x1806, +0x14f0, 0x1806, 0x14f0, 0x1722, 0x140f, 0x1722, 0x140f, 0x16a3, 0x1395, 0x16a3, 0x1395, +0x16a3, 0x1395, 0x15ef, 0x12e5, 0x15ef, 0x12e5, 0x1563, 0x125c, 0x1563, 0x125c, 0x14ed, +0x11e9, 0x14ed, 0x11e9, 0x143a, 0x1138, 0x143a, 0x1138, 0x1363, 0x1062, 0x1363, 0x1062, +0x12b9, 0xfb9, 0x12b9, 0xfb9, 0x12b9, 0xfb9, 0x1296, 0xf97, 0x1296, 0xf97, 0x1282, +0xf82, 0x1282, 0xf82, 0x126a, 0xf6a, 0x126a, 0xf6a, 0x126e, 0xf70, 0x126e, 0xf70, +0x12dd, 0xfe2, 0x12dd, 0xfe2, 0x12dd, 0xfe2, 0x139e, 0x10a7, 0x139e, 0x10a7, 0x1435, +0x1144, 0x1435, 0x1144, 0x14c4, 0x11dd, 0x14c4, 0x11dd, 0x1502, 0x1229, 0x1502, 0x1229, +0x151a, 0x1253, 0x151a, 0x1253, 0x1567, 0x12b7, 0x1567, 0x12b7, 0x1567, 0x12b7, 0x15c9, +0x1335, 0x15c9, 0x1335, 0x157f, 0x130c, 0x157f, 0x130c, 0x149d, 0x1251, 0x149d, 0x1251, +0x13d3, 0x11b4, 0x13d3, 0x11b4, 0x1275, 0x1088, 0x1275, 0x1088, 0x1112, 0xf5e, 0x1112, +0xf5e, 0x1112, 0xf5e, 0xfa1, 0xe2b, 0xfa1, 0xe2b, 0xdaf, 0xc7a, 0xdaf, 0xc7a, +0xbe8, 0xaf9, 0xbe8, 0xaf9, 0xa3d, 0x999, 0xa3d, 0x999, 0x843, 0x7eb, 0x843, +0x7eb, 0x843, 0x7eb, 0x607, 0x5fc, 0x607, 0x5fc, 0x403, 0x446, 0x403, 0x446, +0x15f, 0x1f0, 0x15f, 0x1f0, 0xfed9, 0xffb7, 0xfed9, 0xffb7, 0xfd6f, 0xfe96, 0xfd6f, +0xfe96, 0xfbc3, 0xfd2f, 0xfbc3, 0xfd2f, 0xfbc3, 0xfd2f, 0xf9bb, 0xfb67, 0xf9bb, 0xfb67, +0xf7ea, 0xf9cf, 0xf7ea, 0xf9cf, 0xf676, 0xf88e, 0xf676, 0xf88e, 0xf513, 0xf756, 0xf513, +0xf756, 0xf38e, 0xf5f3, 0xf38e, 0xf5f3, 0xf237, 0xf4b5, 0xf237, 0xf4b5, 0xf237, 0xf4b5, +0xf109, 0xf397, 0xf109, 0xf397, 0xefb4, 0xf247, 0xefb4, 0xf247, 0xee4f, 0xf0de, 0xee4f, +0xf0de, 0xeda1, 0xf023, 0xeda1, 0xf023, 0xece9, 0xef54, 0xece9, 0xef54, 0xece9, 0xef54, +0xebed, 0xee39, 0xebed, 0xee39, 0xebf2, 0xee17, 0xebf2, 0xee17, 0xec42, 0xee3a, 0xec42, +0xee3a, 0xec9f, 0xee63, 0xec9f, 0xee63, 0xedbb, 0xef47, 0xedbb, 0xef47, 0xef64, 0xf0b4, +0xef64, 0xf0b4, 0xef64, 0xf0b4, 0xf11e, 0xf22f, 0xf11e, 0xf22f, 0xf312, 0xf3e5, 0xf312, +0xf3e5, 0xf540, 0xf5d5, 0xf540, 0xf5d5, 0xf70f, 0xf766, 0xf70f, 0xf766, 0xf929, 0xf946, +0xf929, 0xf946, 0xfb8b, 0xfb73, 0xfb8b, 0xfb73, 0xfb8b, 0xfb73, 0xfd8d, 0xfd42, 0xfd8d, +0xfd42, 0xff9f, 0xff29, 0xff9f, 0xff29, 0x190, 0xf3, 0x190, 0xf3, 0x2be, 0x201, +0x2be, 0x201, 0x3bc, 0x2e6, 0x3bc, 0x2e6, 0x3bc, 0x2e6, 0x405, 0x31d, 0x405, +0x31d, 0x3b5, 0x2c2, 0x3b5, 0x2c2, 0x36d, 0x275, 0x36d, 0x275, 0x2b2, 0x1ba, +0x2b2, 0x1ba, 0x21d, 0x12c, 0x21d, 0x12c, 0x161, 0x7b, 0x161, 0x7b, 0x161, +0x7b, 0x8e, 0xffb9, 0x8e, 0xffb9, 0xff61, 0xfe9f, 0xff61, 0xfe9f, 0xfe8f, 0xfde3, +0xfe8f, 0xfde3, 0xfe67, 0xfdd4, 0xfe67, 0xfdd4, 0xfde9, 0xfd70, 0xfde9, 0xfd70, 0xfde7, +0xfd8b, 0xfde7, 0xfd8b, 0xfde7, 0xfd8b, 0xfdc4, 0xfd84, 0xfdc4, 0xfd84, 0xfdbf, 0xfd9c, +0xfdbf, 0xfd9c, 0xfe04, 0xfdff, 0xfe04, 0xfdff, 0xfec0, 0xfed8, 0xfec0, 0xfed8, 0xff9d, +0xffd2, 0xff9d, 0xffd2, 0xff9d, 0xffd2, 0x23, 0x76, 0x23, 0x76, 0xd8, 0x14a, +0xd8, 0x14a, 0xff, 0x18f, 0xff, 0x18f, 0x18d, 0x23d, 0x18d, 0x23d, 0x1bf, +0x290, 0x1bf, 0x290, 0xe8, 0x1dc, 0xe8, 0x1dc, 0xe8, 0x1dc, 0x3, 0x11d, +0x3, 0x11d, 0xfebd, 0xffff, 0xfebd, 0xffff, 0xfd47, 0xfeb5, 0xfd47, 0xfeb5, 0xfb8d, +0xfd29, 0xfb8d, 0xfd29, 0xf9ab, 0xfb78, 0xf9ab, 0xfb78, 0xf80c, 0xfa0d, 0xf80c, 0xfa0d, +0xf80c, 0xfa0d, 0xf66b, 0xf8a3, 0xf66b, 0xf8a3, 0xf4af, 0xf720, 0xf4af, 0xf720, 0xf2a8, +0xf555, 0xf2a8, 0xf555, 0xf0a4, 0xf38d, 0xf0a4, 0xf38d, 0xee80, 0xf1a5, 0xee80, 0xf1a5, +0xee80, 0xf1a5, 0xec2b, 0xef8d, 0xec2b, 0xef8d, 0xea61, 0xedfd, 0xea61, 0xedfd, 0xe87e, +0xec52, 0xe87e, 0xec52, 0xe6bd, 0xeac7, 0xe6bd, 0xeac7, 0xe4be, 0xe8f9, 0xe4be, 0xe8f9, +0xe2fa, 0xe75f, 0xe2fa, 0xe75f, 0xe2fa, 0xe75f, 0xe1fb, 0xe686, 0xe1fb, 0xe686, 0xe102, +0xe5ab, 0xe102, 0xe5ab, 0xe0ef, 0xe5af, 0xe0ef, 0xe5af, 0xe0eb, 0xe5ba, 0xe0eb, 0xe5ba, +0xe112, 0xe5e7, 0xe112, 0xe5e7, 0xe112, 0xe5e7, 0xe143, 0xe617, 0xe143, 0xe617, 0xe198, +0xe663, 0xe198, 0xe663, 0xe26d, 0xe725, 0xe26d, 0xe725, 0xe2e5, 0xe785, 0xe2e5, 0xe785, +0xe35b, 0xe7dc, 0xe35b, 0xe7dc, 0xe386, 0xe7e1, 0xe386, 0xe7e1, 0xe386, 0xe7e1, 0xe3f0, +0xe821, 0xe3f0, 0xe821, 0xe42c, 0xe82f, 0xe42c, 0xe82f, 0xe4a6, 0xe878, 0xe4a6, 0xe878, +0xe5b4, 0xe953, 0xe5b4, 0xe953, 0xe694, 0xe9ff, 0xe694, 0xe9ff, 0xe79f, 0xead7, 0xe79f, +0xead7, 0xe79f, 0xead7, 0xe833, 0xeb37, 0xe833, 0xeb37, 0xe911, 0xebe4, 0xe911, 0xebe4, +0xe9fb, 0xec9f, 0xe9fb, 0xec9f, 0xeadb, 0xed53, 0xeadb, 0xed53, 0xec28, 0xee76, 0xec28, +0xee76, 0xec28, 0xee76, 0xecec, 0xef12, 0xecec, 0xef12, 0xee2a, 0xf02c, 0xee2a, 0xf02c, +0xef66, 0xf146, 0xef66, 0xf146, 0xf020, 0xf1de, 0xf020, 0xf1de, 0xf0c3, 0xf261, 0xf0c3, +0xf261, 0xf11d, 0xf29b, 0xf11d, 0xf29b, 0xf11d, 0xf29b, 0xf151, 0xf2ae, 0xf151, 0xf2ae, +0xf0f1, 0xf22c, 0xf0f1, 0xf22c, 0xf120, 0xf236, 0xf120, 0xf236, 0xf15e, 0xf24b, 0xf15e, +0xf24b, 0xf14b, 0xf20d, 0xf14b, 0xf20d, 0xf1ce, 0xf260, 0xf1ce, 0xf260, 0xf1ce, 0xf260, +0xf291, 0xf2ed, 0xf291, 0xf2ed, 0xf3b5, 0xf3d8, 0xf3b5, 0xf3d8, 0xf514, 0xf4f7, 0xf514, +0xf4f7, 0xf704, 0xf6a3, 0xf704, 0xf6a3, 0xf8dc, 0xf833, 0xf8dc, 0xf833, 0xf8dc, 0xf833, +0xfaac, 0xf9b6, 0xfaac, 0xf9b6, 0xfd1a, 0xfbd6, 0xfd1a, 0xfbd6, 0xfffd, 0xfe68, 0xfffd, +0xfe68, 0x359, 0x173, 0x359, 0x173, 0x68a, 0x453, 0x68a, 0x453, 0x995, 0x710, +0x995, 0x710, 0x995, 0x710, 0xc67, 0x998, 0xc67, 0x998, 0xed9, 0xbc5, 0xed9, +0xbc5, 0x10b8, 0xd66, 0x10b8, 0xd66, 0x11e4, 0xe5c, 0x11e4, 0xe5c, 0x1306, 0xf51, +0x1306, 0xf51, 0x143f, 0x1067, 0x143f, 0x1067, 0x143f, 0x1067, 0x14d9, 0x10e8, 0x14d9, +0x10e8, 0x14c2, 0x10c5, 0x14c2, 0x10c5, 0x1433, 0x1036, 0x1433, 0x1036, 0x13cd, 0xfdb, +0x13cd, 0xfdb, 0x1349, 0xf6f, 0x1349, 0xf6f, 0x1349, 0xf6f, 0x12b0, 0xef7, 0x12b0, +0xef7, 0x123c, 0xeb0, 0x123c, 0xeb0, 0x10e4, 0xd8f, 0x10e4, 0xd8f, 0xf6b, 0xc54, +0xf6b, 0xc54, 0xd8d, 0xabb, 0xd8d, 0xabb, 0xbef, 0x968, 0xbef, 0x968, 0xbef, +0x968, 0xa6b, 0x832, 0xa6b, 0x832, 0x86a, 0x683, 0x86a, 0x683, 0x6d6, 0x540, +0x6d6, 0x540, 0x523, 0x3dd, 0x523, 0x3dd, 0x389, 0x291, 0x389, 0x291, 0x196, +0xe8, 0x196, 0xe8, 0x196, 0xe8, 0x2c, 0xffc3, 0x2c, 0xffc3, 0xfe69, 0xfe3f, +0xfe69, 0xfe3f, 0xfc32, 0xfc3e, 0xfc32, 0xfc3e, 0xfabf, 0xfafc, 0xfabf, 0xfafc, 0xf8d8, +0xf93d, 0xf8d8, 0xf93d, 0xf8d8, 0xf93d, 0xf79c, 0xf821, 0xf79c, 0xf821, 0xf690, 0xf72d, +0xf690, 0xf72d, 0xf570, 0xf61d, 0xf570, 0xf61d, 0xf50d, 0xf5c3, 0xf50d, 0xf5c3, 0xf4f1, +0xf5a9, 0xf4f1, 0xf5a9, 0xf4f5, 0xf5a8, 0xf4f5, 0xf5a8, 0xf4f5, 0xf5a8, 0xf521, 0xf5cb, +0xf521, 0xf5cb, 0xf609, 0xf6a5, 0xf609, 0xf6a5, 0xf6d6, 0xf761, 0xf6d6, 0xf761, 0xf7b2, +0xf828, 0xf7b2, 0xf828, 0xf89e, 0xf8fe, 0xf89e, 0xf8fe, 0xf8e3, 0xf92c, 0xf8e3, 0xf92c, +0xf8e3, 0xf92c, 0xfa21, 0xfa52, 0xfa21, 0xfa52, 0xfb48, 0xfb61, 0xfb48, 0xfb61, 0xfc01, +0xfc04, 0xfc01, 0xfc04, 0xfd28, 0xfd16, 0xfd28, 0xfd16, 0xfdec, 0xfdc5, 0xfdec, 0xfdc5, +0xfdec, 0xfdc5, 0xfeac, 0xfe72, 0xfeac, 0xfe72, 0xff64, 0xff19, 0xff64, 0xff19, 0x8d, +0x32, 0x8d, 0x32, 0x11a, 0xb1, 0x11a, 0xb1, 0x148, 0xd1, 0x148, 0xd1, +0x222, 0x19f, 0x222, 0x19f, 0x222, 0x19f, 0x2b8, 0x22a, 0x2b8, 0x22a, 0x30f, +0x276, 0x30f, 0x276, 0x340, 0x29c, 0x340, 0x29c, 0x3e8, 0x338, 0x3e8, 0x338, +0x4eb, 0x430, 0x4eb, 0x430, 0x5df, 0x51a, 0x5df, 0x51a, 0x5df, 0x51a, 0x6da, +0x60a, 0x6da, 0x60a, 0x7f4, 0x719, 0x7f4, 0x719, 0x8be, 0x7d8, 0x8be, 0x7d8, +0x990, 0x8a0, 0x990, 0x8a0, 0xac7, 0x9cd, 0xac7, 0x9cd, 0xac7, 0x9cd, 0xbf4, +0xaf2, 0xbf4, 0xaf2, 0xcc5, 0xbbd, 0xcc5, 0xbbd, 0xd8e, 0xc81, 0xd8e, 0xc81, +0xea6, 0xd97, 0xea6, 0xd97, 0xf3e, 0xe31, 0xf3e, 0xe31, 0xfb7, 0xeaf, 0xfb7, +0xeaf, 0xfb7, 0xeaf, 0xf92, 0xe93, 0xf92, 0xe93, 0xf3e, 0xe4b, 0xf3e, 0xe4b, +0xea7, 0xdc5, 0xea7, 0xdc5, 0xe14, 0xd46, 0xe14, 0xd46, 0xd95, 0xce0, 0xd95, +0xce0, 0xc02, 0xb6b, 0xc02, 0xb6b, 0xc02, 0xb6b, 0xad1, 0xa5a, 0xad1, 0xa5a, +0x953, 0x900, 0x953, 0x900, 0x818, 0x7eb, 0x818, 0x7eb, 0x757, 0x752, 0x757, +0x752, 0x64f, 0x674, 0x64f, 0x674, 0x64f, 0x674, 0x549, 0x598, 0x549, 0x598, +0x403, 0x47b, 0x403, 0x47b, 0x301, 0x3a1, 0x301, 0x3a1, 0x256, 0x31c, 0x256, +0x31c, 0x1ab, 0x293, 0x1ab, 0x293, 0x161, 0x267, 0x161, 0x267, 0x161, 0x267, +0x18a, 0x2a9, 0x18a, 0x2a9, 0x155, 0x288, 0x155, 0x288, 0x1cb, 0x30a, 0x1cb, +0x30a, 0x20c, 0x352, 0x20c, 0x352, 0x248, 0x38e, 0x248, 0x38e, 0x2cd, 0x40b, +0x2cd, 0x40b, 0x2cd, 0x40b, 0x33c, 0x46b, 0x33c, 0x46b, 0x435, 0x54e, 0x435, +0x54e, 0x4ac, 0x5a9, 0x4ac, 0x5a9, 0x59d, 0x677, 0x59d, 0x677, 0x61a, 0x6cd, +0x61a, 0x6cd, 0x61a, 0x6cd, 0x6f2, 0x778, 0x6f2, 0x778, 0x84b, 0x89f, 0x84b, +0x89f, 0x8c4, 0x8e4, 0x8c4, 0x8e4, 0x98b, 0x975, 0x98b, 0x975, 0xa4b, 0x9fd, +0xa4b, 0x9fd, 0xb73, 0xaee, 0xb73, 0xaee, 0xb73, 0xaee, 0xc21, 0xb65, 0xc21, +0xb65, 0xcf9, 0xc09, 0xcf9, 0xc09, 0xe16, 0xcf3, 0xe16, 0xcf3, 0xe64, 0xd12, +0xe64, 0xd12, 0xfce, 0xe51, 0xfce, 0xe51, 0xfce, 0xe51, 0x10d5, 0xf32, 0x10d5, +0xf32, 0x11cb, 0x1006, 0x11cb, 0x1006, 0x136a, 0x1188, 0x136a, 0x1188, 0x143e, 0x1244, +0x143e, 0x1244, 0x1589, 0x137c, 0x1589, 0x137c, 0x1623, 0x1407, 0x1623, 0x1407, 0x1623, +0x1407, 0x1697, 0x1471, 0x1697, 0x1471, 0x16d2, 0x14a5, 0x16d2, 0x14a5, 0x1642, 0x1411, +0x1642, 0x1411, 0x15d9, 0x13a6, 0x15d9, 0x13a6, 0x1572, 0x133f, 0x1572, 0x133f, 0x152a, +0x12f7, 0x152a, 0x12f7, 0x152a, 0x12f7, 0x137c, 0x114a, 0x137c, 0x114a, 0x1257, 0x1024, +0x1257, 0x1024, 0x116e, 0xf39, 0x116e, 0xf39, 0x10c8, 0xe8e, 0x10c8, 0xe8e, 0x10b2, +0xe71, 0x10b2, 0xe71, 0x10b2, 0xe71, 0xfa6, 0xd5b, 0xfa6, 0xd5b, 0xf17, 0xcc0, +0xf17, 0xcc0, 0xea3, 0xc3b, 0xea3, 0xc3b, 0xea6, 0xc2c, 0xea6, 0xc2c, 0xebe, +0xc2d, 0xebe, 0xc2d, 0xeea, 0xc42, 0xeea, 0xc42, 0xeea, 0xc42, 0xf4a, 0xc88, +0xf4a, 0xc88, 0xf9b, 0xcbf, 0xf9b, 0xcbf, 0xfe7, 0xcf0, 0xfe7, 0xcf0, 0x10ce, +0xdbe, 0x10ce, 0xdbe, 0x1136, 0xe0e, 0x1136, 0xe0e, 0x10ec, 0xdb0, 0x10ec, 0xdb0, +0x10ec, 0xdb0, 0x1151, 0xe05, 0x1151, 0xe05, 0x112c, 0xdd6, 0x112c, 0xdd6, 0x11db, +0xe7f, 0x11db, 0xe7f, 0x119c, 0xe44, 0x119c, 0xe44, 0x1130, 0xde1, 0x1130, 0xde1, +0x1130, 0xde1, 0x1088, 0xd4c, 0x1088, 0xd4c, 0xecc, 0xbab, 0xecc, 0xbab, 0xe6d, +0xb70, 0xe6d, 0xb70, 0xd99, 0xac9, 0xd99, 0xac9, 0xc83, 0x9e8, 0xc83, 0x9e8, +0xb21, 0x8c3, 0xb21, 0x8c3, 0xb21, 0x8c3, 0x991, 0x776, 0x991, 0x776, 0x84e, +0x67e, 0x84e, 0x67e, 0x6d9, 0x558, 0x6d9, 0x558, 0x571, 0x443, 0x571, 0x443, +0x41e, 0x345, 0x41e, 0x345, 0x287, 0x204, 0x287, 0x204, 0x287, 0x204, 0x177, +0x14b, 0x177, 0x14b, 0x21, 0x48, 0x21, 0x48, 0xfedc, 0xff53, 0xfedc, 0xff53, +0xfdee, 0xfeb1, 0xfdee, 0xfeb1, 0xfb9a, 0xfca2, 0xfb9a, 0xfca2, 0xfb9a, 0xfca2, 0xf96b, +0xfab1, 0xf96b, 0xfab1, 0xf777, 0xf8f4, 0xf777, 0xf8f4, 0xf5cb, 0xf775, 0xf5cb, 0xf775, +0xf33a, 0xf507, 0xf33a, 0xf507, 0xf33a, 0xf521, 0xf33a, 0xf521, 0xf381, 0xf577, 0xf381, +0xf577, 0xf381, 0xf577, 0xf163, 0xf35f, 0xf163, 0xf35f, 0xf171, 0xf36a, 0xf171, 0xf36a, +0xf073, 0xf262, 0xf073, 0xf262, 0xf0a5, 0xf281, 0xf0a5, 0xf281, 0xf114, 0xf2d6, 0xf114, +0xf2d6, 0xf13c, 0xf2de, 0xf13c, 0xf2de, 0xf13c, 0xf2de, 0xf3a6, 0xf523, 0xf3a6, 0xf523, +0xf468, 0xf5be, 0xf468, 0xf5be, 0xf519, 0xf644, 0xf519, 0xf644, 0xf735, 0xf835, 0xf735, +0xf835, 0xf8af, 0xf984, 0xf8af, 0xf984, 0xf8af, 0xf984, 0xfa8b, 0xfb36, 0xfa8b, 0xfb36, +0xfc94, 0xfd16, 0xfc94, 0xfd16, 0xfe38, 0xfe94, 0xfe38, 0xfe94, 0xff7e, 0xffb7, 0xff7e, +0xffb7, 0xa1, 0xba, 0xa1, 0xba, 0x1b2, 0x1b0, 0x1b2, 0x1b0, 0x1b2, 0x1b0, +0x1b6, 0x19c, 0x1b6, 0x19c, 0x3ac, 0x37e, 0x3ac, 0x37e, 0x39e, 0x360, 0x39e, +0x360, 0x43a, 0x3ef, 0x43a, 0x3ef, 0x463, 0x40d, 0x463, 0x40d, 0x294, 0x237, +0x294, 0x237, 0x294, 0x237, 0x3af, 0x34c, 0x3af, 0x34c, 0x2d7, 0x26f, 0x2d7, +0x26f, 0x3ca, 0x35f, 0x3ca, 0x35f, 0x108, 0x9a, 0x108, 0x9a, 0x145, 0xd6, +0x145, 0xd6, 0x145, 0xd6, 0x398, 0x328, 0x398, 0x328, 0x63, 0xfff2, 0x63, +0xfff2, 0x2e3, 0x272, 0x2e3, 0x272, 0x38d, 0x31c, 0x38d, 0x31c, 0x272, 0x204, +0x272, 0x204, 0x475, 0x40b, 0x475, 0x40b, 0x475, 0x40b, 0x597, 0x533, 0x597, +0x533, 0x41e, 0x3c4, 0x41e, 0x3c4, 0x4de, 0x493, 0x4de, 0x493, 0x4d8, 0x49f, +0x4d8, 0x49f, 0x428, 0x407, 0x428, 0x407, 0x47c, 0x479, 0x47c, 0x479, 0x47c, +0x479, 0x3de, 0x3ff, 0x3de, 0x3ff, 0x409, 0x456, 0x409, 0x456, 0x2ec, 0x36b, +0x2ec, 0x36b, 0x479, 0x532, 0x479, 0x532, 0xfed0, 0xffc9, 0xfed0, 0xffc9, 0xfed0, +0xffc9, 0xfd43, 0xfe83, 0xfd43, 0xfe83, 0xffec, 0x178, 0xffec, 0x178, 0xfa68, 0xfc46, +0xfa68, 0xfc46, 0xf720, 0xf953, 0xf720, 0xf953, 0xf55a, 0xf7e5, 0xf55a, 0xf7e5, 0xf4ea, +0xf7ce, 0xf4ea, 0xf7ce, 0xf4ea, 0xf7ce, 0xef79, 0xf2b7, 0xef79, 0xf2b7, 0xed32, 0xf0c9, +0xed32, 0xf0c9, 0xe9b8, 0xeda3, 0xe9b8, 0xeda3, 0xe3d9, 0xe815, 0xe3d9, 0xe815, 0xe40b, +0xe891, 0xe40b, 0xe891, 0xe0ef, 0xe5b8, 0xe0ef, 0xe5b8, 0xe0ef, 0xe5b8, 0xdf5b, 0xe45e, +0xdf5b, 0xe45e, 0xdf03, 0xe436, 0xdf03, 0xe436, 0xdc90, 0xe1e9, 0xdc90, 0xe1e9, 0xd9cd, +0xdf43, 0xd9cd, 0xdf43, 0xdb2a, 0xe0b0, 0xdb2a, 0xe0b0, 0xdb2a, 0xe0b0, 0xd9a9, 0xdf34, +0xd9a9, 0xdf34, 0xd823, 0xdda9, 0xd823, 0xdda9, 0xdb38, 0xe0ae, 0xdb38, 0xe0ae, 0xdc02, +0xe160, 0xdc02, 0xe160, 0xdd8b, 0xe2c7, 0xdd8b, 0xe2c7, 0xdcc8, 0xe1db, 0xdcc8, 0xe1db, +0xdcc8, 0xe1db, 0xdd69, 0xe24e, 0xdd69, 0xe24e, 0xdf05, 0xe3b6, 0xdf05, 0xe3b6, 0xde5e, +0xe2d8, 0xde5e, 0xe2d8, 0xdf13, 0xe355, 0xdf13, 0xe355, 0xe0c8, 0xe4d1, 0xe0c8, 0xe4d1, +0xe1a1, 0xe572, 0xe1a1, 0xe572, 0xe1a1, 0xe572, 0xe200, 0xe59a, 0xe200, 0xe59a, 0xe352, +0xe6b9, 0xe352, 0xe6b9, 0xe464, 0xe79b, 0xe464, 0xe79b, 0xe665, 0xe970, 0xe665, 0xe970, +0xe972, 0xec55, 0xe972, 0xec55, 0xe972, 0xec55, 0xeb1b, 0xeddb, 0xeb1b, 0xeddb, 0xecc2, +0xef63, 0xecc2, 0xef63, 0xeebe, 0xf144, 0xeebe, 0xf144, 0xf020, 0xf28d, 0xf020, 0xf28d, +0xf083, 0xf2da, 0xf083, 0xf2da, 0xf04d, 0xf28e, 0xf04d, 0xf28e, 0xf04d, 0xf28e, 0xf33f, +0xf56b, 0xf33f, 0xf56b, 0xf301, 0xf517, 0xf301, 0xf517, 0xf4ba, 0xf6b7, 0xf4ba, 0xf6b7, +0xf66e, 0xf84f, 0xf66e, 0xf84f, 0xf274, 0xf435, 0xf274, 0xf435, 0xf274, 0xf435, 0xf5b7, +0xf752, 0xf5b7, 0xf752, 0xf821, 0xf990, 0xf821, 0xf990, 0xf813, 0xf950, 0xf813, 0xf950, +0xf9a6, 0xfaa9, 0xf9a6, 0xfaa9, 0xfb23, 0xfbe6, 0xfb23, 0xfbe6, 0xfd2a, 0xfda7, 0xfd2a, +0xfda7, 0xfd2a, 0xfda7, 0x14, 0x43, 0x14, 0x43, 0x2cb, 0x2a8, 0x2cb, 0x2a8, +0x519, 0x49e, 0x519, 0x49e, 0x864, 0x78f, 0x864, 0x78f, 0xaf1, 0x9c0, 0xaf1, +0x9c0, 0xf5c, 0xdcf, 0xf5c, 0xdcf, 0xf5c, 0xdcf, 0x10e9, 0xf02, 0x10e9, 0xf02, +0x140b, 0x11cd, 0x140b, 0x11cd, 0x160e, 0x137e, 0x160e, 0x137e, 0x1793, 0x14b7, 0x1793, +0x14b7, 0x1b1e, 0x1800, 0x1b1e, 0x1800, 0x1b1e, 0x1800, 0x18d4, 0x157d, 0x18d4, 0x157d, +0x1ac6, 0x1740, 0x1ac6, 0x1740, 0x1a80, 0x16d9, 0x1a80, 0x16d9, 0x19ab, 0x15f0, 0x19ab, +0x15f0, 0x1948, 0x1587, 0x1948, 0x1587, 0x154d, 0x1194, 0x154d, 0x1194, 0x154d, 0x1194, +0x1751, 0x13ad, 0x1751, 0x13ad, 0x15b5, 0x1234, 0x15b5, 0x1234, 0x11e4, 0xe93, 0x11e4, +0xe93, 0x10c4, 0xdae, 0x10c4, 0xdae, 0xdd2, 0xb03, 0xdd2, 0xb03, 0xc88, 0xa08, +0xc88, 0xa08, 0xc88, 0xa08, 0xad8, 0x8af, 0xad8, 0x8af, 0x76d, 0x5a0, 0x76d, +0x5a0, 0x7f0, 0x684, 0x7f0, 0x684, 0x72a, 0x61f, 0x72a, 0x61f, 0x507, 0x45e, +0x507, 0x45e, 0x507, 0x45e, 0x499, 0x44f, 0x499, 0x44f, 0x1d1, 0x1e3, 0x1d1, +0x1e3, 0xa3, 0x10b, 0xa3, 0x10b, 0xfd41, 0xfdf8, 0xfd41, 0xfdf8, 0xfc04, 0xfd01, +0xfc04, 0xfd01, 0xfb41, 0xfc7b, 0xfb41, 0xfc7b, 0xfb41, 0xfc7b, 0xf7c7, 0xf935, 0xf7c7, +0xf935, 0xf9fa, 0xfb91, 0xf9fa, 0xfb91, 0xf8ec, 0xfaa0, 0xf8ec, 0xfaa0, 0xf7ca, 0xf991, +0xf7ca, 0xf991, 0xf898, 0xfa68, 0xf898, 0xfa68, 0xf7dc, 0xf9aa, 0xf7dc, 0xf9aa, 0xf7dc, +0xf9aa, 0xf8e5, 0xfaa9, 0xf8e5, 0xfaa9, 0xfa9d, 0xfc4e, 0xfa9d, 0xfc4e, 0xf9b0, 0xfb47, +0xf9b0, 0xfb47, 0xf7de, 0xf954, 0xf7de, 0xf954, 0xf975, 0xfac6, 0xf975, 0xfac6, 0xf975, +0xfac6, 0xf9af, 0xfad6, 0xf9af, 0xfad6, 0xfa1f, 0xfb19, 0xfa1f, 0xfb19, 0xfb30, 0xfbfc, +0xfb30, 0xfbfc, 0xfd38, 0xfdd4, 0xfd38, 0xfdd4, 0xfd72, 0xfddf, 0xfd72, 0xfddf, 0xfe33, +0xfe72, 0xfe33, 0xfe72, 0xfe33, 0xfe72, 0x9e, 0xaf, 0x9e, 0xaf, 0xfee2, 0xfec8, +0xfee2, 0xfec8, 0xd0, 0x8e, 0xd0, 0x8e, 0x28c, 0x223, 0x28c, 0x223, 0x260, +0x1d2, 0x260, 0x1d2, 0x327, 0x277, 0x327, 0x277, 0x327, 0x277, 0x36e, 0x29f, +0x36e, 0x29f, 0x4fc, 0x40f, 0x4fc, 0x40f, 0x565, 0x45d, 0x565, 0x45d, 0x32e, +0x20c, 0x32e, 0x20c, 0x45f, 0x324, 0x45f, 0x324, 0x45f, 0x324, 0x5bc, 0x468, +0x5bc, 0x468, 0x520, 0x3b6, 0x520, 0x3b6, 0x629, 0x4a9, 0x629, 0x4a9, 0x412, +0x27c, 0x412, 0x27c, 0x49e, 0x2f4, 0x49e, 0x2f4, 0x3ea, 0x22d, 0x3ea, 0x22d, +0x3ea, 0x22d, 0x49b, 0x2cc, 0x49b, 0x2cc, 0x4d6, 0x2f8, 0x4d6, 0x2f8, 0x38d, +0x1a2, 0x38d, 0x1a2, 0x758, 0x563, 0x758, 0x563, 0x5a0, 0x3a4, 0x5a0, 0x3a4, +0x880, 0x681, 0x880, 0x681, 0x880, 0x681, 0xaca, 0x8cd, 0xaca, 0x8cd, 0x837, +0x642, 0x837, 0x642, 0x9ff, 0x817, 0x9ff, 0x817, 0xaa2, 0x8cd, 0xaa2, 0x8cd, +0x9a2, 0x7e6, 0x9a2, 0x7e6, 0x9a2, 0x7e6, 0x839, 0x69c, 0x839, 0x69c, 0x855, +0x6df, 0x855, 0x6df, 0x8df, 0x794, 0x8df, 0x794, 0x684, 0x56a, 0x684, 0x56a, +0x5de, 0x4fa, 0x5de, 0x4fa, 0x5d0, 0x527, 0x5d0, 0x527, 0x5d0, 0x527, 0x1e2, +0x176, 0x1e2, 0x176, 0x2ac, 0x27e, 0x2ac, 0x27e, 0xff15, 0xff27, 0xff15, 0xff27, +0xfcc2, 0xfd14, 0xfcc2, 0xfd14, 0xff03, 0xff92, 0xff03, 0xff92, 0xfa95, 0xfb5e, 0xfa95, +0xfb5e, 0xfa95, 0xfb5e, 0xfc02, 0xfd00, 0xfc02, 0xfd00, 0xfc70, 0xfd9e, 0xfc70, 0xfd9e, +0xfb95, 0xfceb, 0xfb95, 0xfceb, 0xfcad, 0xfe24, 0xfcad, 0xfe24, 0xfca1, 0xfe2f, 0xfca1, +0xfe2f, 0xfca1, 0xfe2f, 0xfd1e, 0xfebb, 0xfd1e, 0xfebb, 0xfcf5, 0xfe95, 0xfcf5, 0xfe95, +0xfe1f, 0xffb9, 0xfe1f, 0xffb9, 0xfc18, 0xfda2, 0xfc18, 0xfda2, 0xfc3c, 0xfdab, 0xfc3c, +0xfdab, 0xfef1, 0x3e, 0xfef1, 0x3e, 0xfef1, 0x3e, 0xfe30, 0xff51, 0xfe30, 0xff51, +0xff9e, 0x8c, 0xff9e, 0x8c, 0x212, 0x2c7, 0x212, 0x2c7, 0xe7, 0x15e, 0xe7, +0x15e, 0x2ed, 0x322, 0x2ed, 0x322, 0x5d3, 0x5c5, 0x5d3, 0x5c5, 0x5d3, 0x5c5, +0x58d, 0x53c, 0x58d, 0x53c, 0x748, 0x6b4, 0x748, 0x6b4, 0x912, 0x83e, 0x912, +0x83e, 0xa69, 0x958, 0xa69, 0x958, 0xa94, 0x94b, 0xa94, 0x94b, 0xa94, 0x94b, +0xd0a, 0xb8e, 0xd0a, 0xb8e, 0x1054, 0xead, 0x1054, 0xead, 0x1091, 0xec4, 0x1091, +0xec4, 0x132a, 0x1140, 0x132a, 0x1140, 0x144c, 0x124b, 0x144c, 0x124b, 0x14dc, 0x12cb, +0x14dc, 0x12cb, 0x14dc, 0x12cb, 0x1667, 0x144c, 0x1667, 0x144c, 0x16a5, 0x1487, 0x16a5, +0x1487, 0x1707, 0x14e9, 0x1707, 0x14e9, 0x166a, 0x1451, 0x166a, 0x1451, 0x15bc, 0x13aa, +0x15bc, 0x13aa, 0x14c6, 0x12bd, 0x14c6, 0x12bd, 0x14c6, 0x12bd, 0x1367, 0x1167, 0x1367, +0x1167, 0x12cd, 0x10d4, 0x12cd, 0x10d4, 0x145b, 0x1269, 0x145b, 0x1269, 0x1238, 0x1049, +0x1238, 0x1049, 0x12f3, 0x1103, 0x12f3, 0x1103, 0x12f3, 0x1103, 0x14fa, 0x1304, 0x14fa, +0x1304, 0x103e, 0xe3f, 0x103e, 0xe3f, 0x1297, 0x1089, 0x1297, 0x1089, 0x1258, 0x1037, +0x1258, 0x1037, 0x10b7, 0xe7d, 0x10b7, 0xe7d, 0x11b6, 0xf5f, 0x11b6, 0xf5f, 0x11b6, +0xf5f, 0x10bb, 0xe45, 0x10bb, 0xe45, 0x122e, 0xf97, 0x122e, 0xf97, 0x1103, 0xe49, +0x1103, 0xe49, 0x12da, 0xffe, 0x12da, 0xffe, 0x13e3, 0x10e7, 0x13e3, 0x10e7, 0x13e3, +0x10e7, 0x13aa, 0x1090, 0x13aa, 0x1090, 0x14fa, 0x11c7, 0x14fa, 0x11c7, 0x13b9, 0x1073, +0x13b9, 0x1073, 0x12a8, 0xf56, 0x12a8, 0xf56, 0x126f, 0xf1a, 0x126f, 0xf1a, 0x1215, +0xec4, 0x1215, 0xec4, 0x1215, 0xec4, 0x11ce, 0xe8e, 0x11ce, 0xe8e, 0x10ca, 0xda4, +0x10ca, 0xda4, 0xfdd, 0xcdc, 0xfdd, 0xcdc, 0xfa4, 0xcd3, 0xfa4, 0xcd3, 0xd47, +0xab0, 0xd47, 0xab0, 0xb9f, 0x94c, 0xb9f, 0x94c, 0xb9f, 0x94c, 0xa19, 0x813, +0xa19, 0x813, 0x822, 0x671, 0x822, 0x671, 0x4ec, 0x396, 0x4ec, 0x396, 0x315, +0x220, 0x315, 0x220, 0x140, 0xae, 0x140, 0xae, 0x140, 0xae, 0xfed4, 0xfea7, +0xfed4, 0xfea7, 0xff21, 0xff5a, 0xff21, 0xff5a, 0xfd98, 0xfe34, 0xfd98, 0xfe34, 0xfb51, +0xfc4c, 0xfb51, 0xfc4c, 0xfae6, 0xfc3c, 0xfae6, 0xfc3c, 0xf954, 0xfafd, 0xf954, 0xfafd, +0xf954, 0xfafd, 0xf4d8, 0xf6cc, 0xf4d8, 0xf6cc, 0xf5f1, 0xf828, 0xf5f1, 0xf828, 0xf48e, +0xf6fd, 0xf48e, 0xf6fd, 0xf286, 0xf524, 0xf286, 0xf524, 0xf12b, 0xf3ec, 0xf12b, 0xf3ec, +0xeffe, 0xf2d7, 0xeffe, 0xf2d7, 0xeffe, 0xf2d7, 0xf23f, 0xf525, 0xf23f, 0xf525, 0xee8e, +0xf176, 0xee8e, 0xf176, 0xf024, 0xf305, 0xf024, 0xf305, 0xf05c, 0xf32d, 0xf05c, 0xf32d, +0xf03a, 0xf2f3, 0xf03a, 0xf2f3, 0xf03a, 0xf2f3, 0xf078, 0xf312, 0xf078, 0xf312, 0xf045, +0xf2ba, 0xf045, 0xf2ba, 0xf1ea, 0xf436, 0xf1ea, 0xf436, 0xf0e1, 0xf2ff, 0xf0e1, 0xf2ff, +0xf389, 0xf579, 0xf389, 0xf579, 0xf47b, 0xf63a, 0xf47b, 0xf63a, 0xf47b, 0xf63a, 0xf702, +0xf890, 0xf702, 0xf890, 0xfa49, 0xfba7, 0xfa49, 0xfba7, 0xfa5a, 0xfb8a, 0xfa5a, 0xfb8a, +0xfa2b, 0xfb2f, 0xfa2b, 0xfb2f, 0x3b, 0x116, 0x3b, 0x116, 0x52, 0x107, 0x52, +0x107, 0x52, 0x107, 0xff91, 0x22, 0xff91, 0x22, 0x25e, 0x2cf, 0x25e, 0x2cf, +0x205, 0x258, 0x205, 0x258, 0x4a2, 0x4db, 0x4a2, 0x4db, 0x1be, 0x1df, 0x1be, +0x1df, 0x1be, 0x1df, 0x402, 0x40d, 0x402, 0x40d, 0xef, 0xe5, 0xef, 0xe5, +0x55, 0x39, 0x55, 0x39, 0x390, 0x363, 0x390, 0x363, 0xff4c, 0xff0f, 0xff4c, +0xff0f, 0x16b, 0x11e, 0x16b, 0x11e, 0x16b, 0x11e, 0xd2, 0x76, 0xd2, 0x76, +0xfe77, 0xfe0d, 0xfe77, 0xfe0d, 0xff1b, 0xfea4, 0xff1b, 0xfea4, 0xff9d, 0xff1a, 0xff9d, +0xff1a, 0xfcec, 0xfc5e, 0xfcec, 0xfc5e, 0xff7b, 0xfee4, 0xff7b, 0xfee4, 0xff7b, 0xfee4, +0x6d, 0xffcf, 0x6d, 0xffcf, 0x8e, 0xffed, 0x8e, 0xffed, 0x1b2, 0x110, 0x1b2, +0x110, 0x220, 0x181, 0x220, 0x181, 0x3ed, 0x355, 0x3ed, 0x355, 0x3ed, 0x355, +0x430, 0x3a4, 0x430, 0x3a4, 0x6b7, 0x63c, 0x6b7, 0x63c, 0x27a, 0x216, 0x27a, +0x216, 0x476, 0x42e, 0x476, 0x42e, 0x33e, 0x318, 0x33e, 0x318, 0xda, 0xdb, +0xda, 0xdb, 0xda, 0xdb, 0x2ca, 0x2f7, 0x2ca, 0x2f7, 0xffbf, 0x1d, 0xffbf, +0x1d, 0xff89, 0x1d, 0xff89, 0x1d, 0xfc61, 0xfd2d, 0xfc61, 0xfd2d, 0xfbeb, 0xfcf2, +0xfbeb, 0xfcf2, 0xf7ee, 0xf932, 0xf7ee, 0xf932, 0xf7ee, 0xf932, 0xf691, 0xf812, 0xf691, +0xf812, 0xf679, 0xf837, 0xf679, 0xf837, 0xf0f5, 0xf2ef, 0xf0f5, 0xf2ef, 0xf031, 0xf264, +0xf031, 0xf264, 0xefab, 0xf214, 0xefab, 0xf214, 0xefab, 0xf214, 0xece4, 0xef7e, 0xece4, +0xef7e, 0xe9d2, 0xec98, 0xe9d2, 0xec98, 0xe806, 0xeaf4, 0xe806, 0xeaf4, 0xe61b, 0xe92a, +0xe61b, 0xe92a, 0xe58f, 0xe8b7, 0xe58f, 0xe8b7, 0xe48b, 0xe7c7, 0xe48b, 0xe7c7, 0xe48b, +0xe7c7, 0xe30b, 0xe654, 0xe30b, 0xe654, 0xe275, 0xe5c6, 0xe275, 0xe5c6, 0xe0ab, 0xe3fc, +0xe0ab, 0xe3fc, 0xde3b, 0xe188, 0xde3b, 0xe188, 0xdf00, 0xe244, 0xdf00, 0xe244, 0xde92, +0xe1ca, 0xde92, 0xe1ca, 0xde92, 0xe1ca, 0xdeb6, 0xe1df, 0xdeb6, 0xe1df, 0xdef2, 0xe20a, +0xdef2, 0xe20a, 0xdd5c, 0xe061, 0xdd5c, 0xe061, 0xe024, 0xe316, 0xe024, 0xe316, 0xe004, +0xe2e5, 0xe004, 0xe2e5, 0xe004, 0xe2e5, 0xdf8b, 0xe25b, 0xdf8b, 0xe25b, 0xdf6d, 0xe22e, +0xdf6d, 0xe22e, 0xe0ce, 0xe382, 0xe0ce, 0xe382, 0xe284, 0xe530, 0xe284, 0xe530, 0xe1df, +0xe484, 0xe1df, 0xe484, 0xe439, 0xe6da, 0xe439, 0xe6da, 0xe439, 0xe6da, 0xe596, 0xe835, +0xe596, 0xe835, 0xe528, 0xe7c7, 0xe528, 0xe7c7, 0xe7c6, 0xea67, 0xe7c6, 0xea67, 0xe95f, +0xec02, 0xe95f, 0xec02, 0xea4d, 0xecf3, 0xea4d, 0xecf3, 0xebae, 0xee54, 0xebae, 0xee54, +0xebae, 0xee54, 0xe9a0, 0xec45, 0xe9a0, 0xec45, 0xec8a, 0xef2b, 0xec8a, 0xef2b, 0xeaf5, +0xed8c, 0xeaf5, 0xed8c, 0xea4a, 0xecd2, 0xea4a, 0xecd2, 0xec97, 0xef0a, 0xec97, 0xef0a, +0xec97, 0xef0a, 0xec90, 0xeee7, 0xec90, 0xeee7, 0xefc9, 0xf1fc, 0xefc9, 0xf1fc, 0xef82, +0xf189, 0xef82, 0xf189, 0xf1bd, 0xf390, 0xf1bd, 0xf390, 0xf32b, 0xf4c1, 0xf32b, 0xf4c1, +0xf6a6, 0xf7f9, 0xf6a6, 0xf7f9, 0xf6a6, 0xf7f9, 0xf7ea, 0xf8f1, 0xf7ea, 0xf8f1, 0xf8a2, +0xf956, 0xf8a2, 0xf956, 0xfc6a, 0xfcc6, 0xfc6a, 0xfcc6, 0xfee1, 0xfee0, 0xfee1, 0xfee0, +0x35b, 0x2f9, 0x35b, 0x2f9, 0x774, 0x6af, 0x774, 0x6af, 0x774, 0x6af, 0xc2e, +0xb07, 0xc2e, 0xb07, 0xdd7, 0xc4e, 0xdd7, 0xc4e, 0x132f, 0x1147, 0x132f, 0x1147, +0x157d, 0x133b, 0x157d, 0x133b, 0x1878, 0x15e1, 0x1878, 0x15e1, 0x1878, 0x15e1, 0x1cd9, +0x19f5, 0x1cd9, 0x19f5, 0x1d80, 0x1a59, 0x1d80, 0x1a59, 0x1fd4, 0x1c73, 0x1fd4, 0x1c73, +0x1e66, 0x1ad5, 0x1e66, 0x1ad5, 0x2045, 0x1c91, 0x2045, 0x1c91, 0x2097, 0x1ccb, 0x2097, +0x1ccb, 0x2097, 0x1ccb, 0x1fa2, 0x1bcb, 0x1fa2, 0x1bcb, 0x1ef0, 0x1b1a, 0x1ef0, 0x1b1a, +0x1ca8, 0x18e0, 0x1ca8, 0x18e0, 0x1ba1, 0x17f2, 0x1ba1, 0x17f2, 0x1b95, 0x180a, 0x1b95, +0x180a, 0x1b95, 0x180a, 0x1b00, 0x17a2, 0x1b00, 0x17a2, 0x167a, 0x1354, 0x167a, 0x1354, +0x13ca, 0x10e2, 0x13ca, 0x10e2, 0x1309, 0x1067, 0x1309, 0x1067, 0x1061, 0xe08, 0x1061, +0xe08, 0xe47, 0xc3c, 0xe47, 0xc3c, 0xe47, 0xc3c, 0xc6d, 0xab2, 0xc6d, 0xab2, +0x7d7, 0x66c, 0x7d7, 0x66c, 0x5d8, 0x4bc, 0x5d8, 0x4bc, 0x7aa, 0x6db, 0x7aa, +0x6db, 0x5dc, 0x558, 0x5dc, 0x558, 0x133, 0xf5, 0x133, 0xf5, 0x133, 0xf5, +0x6, 0x8, 0x6, 0x8, 0xfd34, 0xfd71, 0xfd34, 0xfd71, 0xfbba, 0xfc2b, 0xfbba, +0xfc2b, 0xfa45, 0xfae3, 0xfa45, 0xfae3, 0xf850, 0xf913, 0xf850, 0xf913, 0xf850, 0xf913, +0xf8f4, 0xf9d5, 0xf8f4, 0xf9d5, 0xf6f6, 0xf7ef, 0xf6f6, 0xf7ef, 0xf8b7, 0xf9bf, 0xf8b7, +0xf9bf, 0xf62b, 0xf73c, 0xf62b, 0xf73c, 0xf6cf, 0xf7e3, 0xf6cf, 0xf7e3, 0xf738, 0xf847, +0xf738, 0xf847, 0xf738, 0xf847, 0xf530, 0xf635, 0xf530, 0xf635, 0xf77f, 0xf876, 0xf77f, +0xf876, 0xf53b, 0xf61f, 0xf53b, 0xf61f, 0xf7c8, 0xf895, 0xf7c8, 0xf895, 0xf795, 0xf848, +0xf795, 0xf848, 0xf6dd, 0xf773, 0xf6dd, 0xf773, 0xf6dd, 0xf773, 0xf9fe, 0xfa75, 0xf9fe, +0xfa75, 0xfb63, 0xfbb9, 0xfb63, 0xfbb9, 0xfa65, 0xfa98, 0xfa65, 0xfa98, 0xfb6d, 0xfb7e, +0xfb6d, 0xfb7e, 0xfcd4, 0xfcc1, 0xfcd4, 0xfcc1, 0xfcd4, 0xfcc1, 0xfb53, 0xfb1c, 0xfb53, +0xfb1c, 0xfc0c, 0xfbb1, 0xfc0c, 0xfbb1, 0xfae4, 0xfa66, 0xfae4, 0xfa66, 0xfbbb, 0xfb1a, +0xfbbb, 0xfb1a, 0xfca6, 0xfbe4, 0xfca6, 0xfbe4, 0xfdfe, 0xfd1c, 0xfdfe, 0xfd1c, 0xfdfe, +0xfd1c, 0xfee1, 0xfddf, 0xfee1, 0xfddf, 0xfea2, 0xfd84, 0xfea2, 0xfd84, 0x8d, 0xff53, +0x8d, 0xff53, 0x1bd, 0x6a, 0x1bd, 0x6a, 0x1f7, 0x8d, 0x1f7, 0x8d, 0x46b, +0x2ed, 0x46b, 0x2ed, 0x46b, 0x2ed, 0x461, 0x2d3, 0x461, 0x2d3, 0x3ee, 0x251, +0x3ee, 0x251, 0x6f7, 0x550, 0x6f7, 0x550, 0x79f, 0x5f1, 0x79f, 0x5f1, 0xa76, +0x8c6, 0xa76, 0x8c6, 0xa76, 0x8c6, 0x8eb, 0x73b, 0x8eb, 0x73b, 0xaa4, 0x8fa, +0xaa4, 0x8fa, 0xbf4, 0xa52, 0xbf4, 0xa52, 0xc6c, 0xad9, 0xc6c, 0xad9, 0xee7, +0xd65, 0xee7, 0xd65, 0xd45, 0xbd9, 0xd45, 0xbd9, 0xd45, 0xbd9, 0xe82, 0xd2e, +0xe82, 0xd2e, 0xaf2, 0x9bc, 0xaf2, 0x9bc, 0xb76, 0xa60, 0xb76, 0xa60, 0x9cf, +0x8db, 0x9cf, 0x8db, 0x946, 0x876, 0x946, 0x876, 0x843, 0x798, 0x843, 0x798, +0x843, 0x798, 0x360, 0x2dd, 0x360, 0x2dd, 0x519, 0x4bc, 0x519, 0x4bc, 0x54b, +0x514, 0x54b, 0x514, 0x4df, 0x4ce, 0x4df, 0x4ce, 0x23f, 0x252, 0x23f, 0x252, +0x23f, 0x252, 0x1a7, 0x1da, 0x1a7, 0x1da, 0xff20, 0xff71, 0xff20, 0xff71, 0xff71, +0xffdc, 0xff71, 0xffdc, 0xff14, 0xff96, 0xff14, 0xff96, 0xfcfb, 0xfd8e, 0xfcfb, 0xfd8e, +0xfd31, 0xfdd1, 0xfd31, 0xfdd1, 0xfd31, 0xfdd1, 0xfb85, 0xfc2c, 0xfb85, 0xfc2c, 0xfd02, +0xfdac, 0xfd02, 0xfdac, 0xfced, 0xfd93, 0xfced, 0xfd93, 0xfcba, 0xfd59, 0xfcba, 0xfd59, +0xf98f, 0xfa21, 0xf98f, 0xfa21, 0xfaf3, 0xfb73, 0xfaf3, 0xfb73, 0xfaf3, 0xfb73, 0xfb98, +0xfc02, 0xfb98, 0xfc02, 0xfa27, 0xfa78, 0xfa27, 0xfa78, 0xfce1, 0xfd15, 0xfce1, 0xfd15, +0xfc06, 0xfc1b, 0xfc06, 0xfc1b, 0xfd88, 0xfd7c, 0xfd88, 0xfd7c, 0xfd88, 0xfd7c, 0xff24, +0xfef5, 0xff24, 0xfef5, 0x53, 0, 0x53, 0, 0x118, 0xa1, 0x118, 0xa1, +0x1f6, 0x15b, 0x1f6, 0x15b, 0x3aa, 0x2ed, 0x3aa, 0x2ed, 0x3cf, 0x2f0, 0x3cf, +0x2f0, 0x3cf, 0x2f0, 0x617, 0x518, 0x617, 0x518, 0x7c0, 0x6a3, 0x7c0, 0x6a3, +0x76d, 0x635, 0x76d, 0x635, 0xa23, 0x8d0, 0xa23, 0x8d0, 0xc45, 0xadb, 0xc45, +0xadb, 0xe66, 0xce6, 0xe66, 0xce6, 0xe66, 0xce6, 0x1096, 0xf04, 0x1096, 0xf04, +0x12c1, 0x111c, 0x12c1, 0x111c, 0x13c4, 0x1210, 0x13c4, 0x1210, 0x132e, 0x116b, 0x132e, +0x116b, 0x14d3, 0x1302, 0x14d3, 0x1302, 0x14d3, 0x1302, 0x1410, 0x1231, 0x1410, 0x1231, +0x1576, 0x138a, 0x1576, 0x138a, 0x1484, 0x128b, 0x1484, 0x128b, 0x1565, 0x135e, 0x1565, +0x135e, 0x1762, 0x154c, 0x1762, 0x154c, 0x15d2, 0x13ac, 0x15d2, 0x13ac, 0x15d2, 0x13ac, +0x15fc, 0x13c7, 0x15fc, 0x13c7, 0x14b4, 0x126d, 0x14b4, 0x126d, 0x15bd, 0x1364, 0x15bd, +0x1364, 0x1597, 0x132a, 0x1597, 0x132a, 0x15d3, 0x1353, 0x15d3, 0x1353, 0x1466, 0x11d2, +0x1466, 0x11d2, 0x1466, 0x11d2, 0x1365, 0x10bd, 0x1365, 0x10bd, 0x11a2, 0xee8, 0x11a2, +0xee8, 0x113f, 0xe73, 0x113f, 0xe73, 0x1309, 0x102d, 0x1309, 0x102d, 0x1160, 0xe78, +0x1160, 0xe78, 0x1160, 0xe78, 0x11a7, 0xeb6, 0x11a7, 0xeb6, 0x121c, 0xf26, 0x121c, +0xf26, 0x15d7, 0x12e0, 0x15d7, 0x12e0, 0x1517, 0x1226, 0x1517, 0x1226, 0x1315, 0x102f, +0x1315, 0x102f, 0x1141, 0xe6c, 0x1141, 0xe6c, 0x1141, 0xe6c, 0xf87, 0xcca, 0xf87, +0xcca, 0x10d2, 0xe34, 0x10d2, 0xe34, 0xf9a, 0xd22, 0xf9a, 0xd22, 0xe4c, 0xc02, +0xe4c, 0xc02, 0xc34, 0xa1d, 0xc34, 0xa1d, 0xbf7, 0xa1b, 0xbf7, 0xa1b, 0xbf7, +0xa1b, 0xa6c, 0x8d1, 0xa6c, 0x8d1, 0xa4b, 0x8f6, 0xa4b, 0x8f6, 0x837, 0x72e, +0x837, 0x72e, 0x387, 0x2ce, 0x387, 0x2ce, 0x333, 0x2cc, 0x333, 0x2cc, 0x333, +0x2cc, 0x2cf, 0x2bc, 0x2cf, 0x2bc, 0x185, 0x1c7, 0x185, 0x1c7, 0x95, 0x12c, +0x95, 0x12c, 0xfc81, 0xfd6b, 0xfc81, 0xfd6b, 0xfa02, 0xfb3d, 0xfa02, 0xfb3d, 0xfbf7, +0xfd7e, 0xfbf7, 0xfd7e, 0xfbf7, 0xfd7e, 0xf8c5, 0xfa94, 0xf8c5, 0xfa94, 0xf702, 0xf913, +0xf702, 0xf913, 0xf712, 0xf95d, 0xf712, 0xf95d, 0xf426, 0xf6a4, 0xf426, 0xf6a4, 0xf2c5, +0xf56f, 0xf2c5, 0xf56f, 0xf2c5, 0xf56f, 0xf2d5, 0xf5a0, 0xf2d5, 0xf5a0, 0xf0af, 0xf392, +0xf0af, 0xf392, 0xeef3, 0xf1e5, 0xeef3, 0xf1e5, 0xef2b, 0xf222, 0xef2b, 0xf222, 0xefc8, +0xf2ba, 0xefc8, 0xf2ba, 0xf100, 0xf3e4, 0xf100, 0xf3e4, 0xf100, 0xf3e4, 0xf184, 0xf452, +0xf184, 0xf452, 0xf199, 0xf448, 0xf199, 0xf448, 0xefdf, 0xf266, 0xefdf, 0xf266, 0xf299, +0xf4f3, 0xf299, 0xf4f3, 0xf413, 0xf63b, 0xf413, 0xf63b, 0xf3aa, 0xf59a, 0xf3aa, 0xf59a, +0xf3aa, 0xf59a, 0xf5c1, 0xf774, 0xf5c1, 0xf774, 0xf696, 0xf80b, 0xf696, 0xf80b, 0xf93a, +0xfa6e, 0xf93a, 0xfa6e, 0xfc27, 0xfd1b, 0xfc27, 0xfd1b, 0xfcd5, 0xfd88, 0xfcd5, 0xfd88, +0xfcd5, 0xfd88, 0xfe73, 0xfee8, 0xfe73, 0xfee8, 0xac, 0xe5, 0xac, 0xe5, 0x105, +0x104, 0x105, 0x104, 0x3d1, 0x39b, 0x3d1, 0x39b, 0x2c7, 0x262, 0x2c7, 0x262, +0x208, 0x178, 0x208, 0x178, 0x208, 0x178, 0x1d5, 0x120, 0x1d5, 0x120, 0x105, +0x31, 0x105, 0x31, 0x1a1, 0xb5, 0x1a1, 0xb5, 0xe7, 0xffea, 0xe7, 0xffea, +0x4b, 0xff44, 0x4b, 0xff44, 0xfc9a, 0xfb8f, 0xfc9a, 0xfb8f, 0xfc9a, 0xfb8f, 0xfedc, +0xfdd4, 0xfedc, 0xfdd4, 0xfef4, 0xfdf6, 0xfef4, 0xfdf6, 0xfe20, 0xfd31, 0xfe20, 0xfd31, +0xae, 0xffd4, 0xae, 0xffd4, 0xff47, 0xfe88, 0xff47, 0xfe88, 0xff47, 0xfe88, 0xff38, +0xfe99, 0xff38, 0xfe99, 0x200, 0x184, 0x200, 0x184, 0x34d, 0x2f9, 0x34d, 0x2f9, +0x297, 0x26d, 0x297, 0x26d, 0x373, 0x376, 0x373, 0x376, 0x43c, 0x46e, 0x43c, +0x46e, 0x43c, 0x46e, 0x5f1, 0x654, 0x5f1, 0x654, 0x65a, 0x6ef, 0x65a, 0x6ef, +0x63d, 0x703, 0x63d, 0x703, 0x264, 0x35b, 0x264, 0x35b, 0x1d2, 0x2f9, 0x1d2, +0x2f9, 0x205, 0x35b, 0x205, 0x35b, 0x205, 0x35b, 0xff36, 0xb8, 0xff36, 0xb8, +0xfdf6, 0xffa2, 0xfdf6, 0xffa2, 0xf967, 0xfb3a, 0xf967, 0xfb3a, 0xf7ce, 0xf9c4, 0xf7ce, +0xf9c4, 0xf86b, 0xfa81, 0xf86b, 0xfa81, 0xf86b, 0xfa81, 0xf936, 0xfb67, 0xf936, 0xfb67, +0xf500, 0xf748, 0xf500, 0xf748, 0xf543, 0xf79d, 0xf543, 0xf79d, 0xf2e4, 0xf54c, 0xf2e4, +0xf54c, 0xeefc, 0xf16b, 0xeefc, 0xf16b, 0xef7c, 0xf1ef, 0xef7c, 0xf1ef, 0xef7c, 0xf1ef, +0xe83c, 0xeaae, 0xe83c, 0xeaae, 0xe63a, 0xe8a7, 0xe63a, 0xe8a7, 0xe65b, 0xe8be, 0xe65b, +0xe8be, 0xe4cf, 0xe724, 0xe4cf, 0xe724, 0xe233, 0xe477, 0xe233, 0xe477, 0xe37b, 0xe5a9, +0xe37b, 0xe5a9, 0xe37b, 0xe5a9, 0xe247, 0xe45e, 0xe247, 0xe45e, 0xdf63, 0xe160, 0xdf63, +0xe160, 0xe0c8, 0xe2aa, 0xe0c8, 0xe2aa, 0xde93, 0xe05a, 0xde93, 0xe05a, 0xde8e, 0xe039, +0xde8e, 0xe039, 0xde8e, 0xe039, 0xdf50, 0xe0df, 0xdf50, 0xe0df, 0xe01f, 0xe194, 0xe01f, +0xe194, 0xe2b9, 0xe416, 0xe2b9, 0xe416, 0xe528, 0xe66e, 0xe528, 0xe66e, 0xe496, 0xe5c9, +0xe496, 0xe5c9, 0xe619, 0xe73c, 0xe619, 0xe73c, 0xe619, 0xe73c, 0xe674, 0xe78b, 0xe674, +0xe78b, 0xe5bf, 0xe6cd, 0xe5bf, 0xe6cd, 0xe6f3, 0xe7fc, 0xe6f3, 0xe7fc, 0xe818, 0xe921, +0xe818, 0xe921, 0xe7a6, 0xe8b2, 0xe7a6, 0xe8b2, 0xe860, 0xe974, 0xe860, 0xe974, 0xe860, +0xe974, 0xe9b2, 0xead1, 0xe9b2, 0xead1, 0xe93b, 0xea68, 0xe93b, 0xea68, 0xecf9, 0xee36, +0xecf9, 0xee36, 0xeb0a, 0xec5a, 0xeb0a, 0xec5a, 0xebfb, 0xed5e, 0xebfb, 0xed5e, 0xebfb, +0xed5e, 0xeee7, 0xf05f, 0xeee7, 0xf05f, 0xf124, 0xf2b0, 0xf124, 0xf2b0, 0xf19d, 0xf33c, +0xf19d, 0xf33c, 0xf1bd, 0xf36e, 0xf1bd, 0xf36e, 0xf435, 0xf5f4, 0xf435, 0xf5f4, 0xf210, +0xf3db, 0xf210, 0xf3db, 0xf210, 0xf3db, 0xf511, 0xf6e4, 0xf511, 0xf6e4, 0xf370, 0xf546, +0xf370, 0xf546, 0xf3e8, 0xf5be, 0xf3e8, 0xf5be, 0xf68f, 0xf85f, 0xf68f, 0xf85f, 0xf65d, +0xf821, 0xf65d, 0xf821, 0xf7a7, 0xf95a, 0xf7a7, 0xf95a, 0xf7a7, 0xf95a, 0xfb48, 0xfce5, +0xfb48, 0xfce5, 0xfc4d, 0xfdcd, 0xfc4d, 0xfdcd, 0xfc13, 0xfd72, 0xfc13, 0xfd72, 0x156, +0x28e, 0x156, 0x28e, 0x101, 0x20f, 0x101, 0x20f, 0x101, 0x20f, 0x4af, 0x58e, +0x4af, 0x58e, 0x80a, 0x8b7, 0x80a, 0x8b7, 0xa66, 0xade, 0xa66, 0xade, 0xdda, +0xe1c, 0xdda, 0xe1c, 0x11d5, 0x11df, 0x11d5, 0x11df, 0x15a2, 0x1574, 0x15a2, 0x1574, +0x15a2, 0x1574, 0x175f, 0x16fa, 0x175f, 0x16fa, 0x1ac2, 0x1a26, 0x1ac2, 0x1a26, 0x194e, +0x187e, 0x194e, 0x187e, 0x18f3, 0x17f1, 0x18f3, 0x17f1, 0x1a9a, 0x196a, 0x1a9a, 0x196a, +0x1943, 0x17e9, 0x1943, 0x17e9, 0x1943, 0x17e9, 0x174a, 0x15ca, 0x174a, 0x15ca, 0x1974, +0x17d4, 0x1974, 0x17d4, 0x16d6, 0x151b, 0x16d6, 0x151b, 0x1708, 0x1538, 0x1708, 0x1538, +0x16f4, 0x1516, 0x16f4, 0x1516, 0x16f4, 0x1516, 0x13e8, 0x1202, 0x13e8, 0x1202, 0x1462, +0x127b, 0x1462, 0x127b, 0x1309, 0x1126, 0x1309, 0x1126, 0x12bc, 0x10e4, 0x12bc, 0x10e4, +0x101b, 0xe54, 0x101b, 0xe54, 0x11a0, 0xff0, 0x11a0, 0xff0, 0x11a0, 0xff0, 0xe6c, +0xcd8, 0xe6c, 0xcd8, 0xde6, 0xc73, 0xde6, 0xc73, 0xdaa, 0xc5c, 0xdaa, 0xc5c, +0x98f, 0x869, 0x98f, 0x869, 0xa9b, 0x9a0, 0xa9b, 0x9a0, 0x79b, 0x6ce, 0x79b, +0x6ce, 0x79b, 0x6ce, 0x540, 0x4a2, 0x540, 0x4a2, 0x39e, 0x330, 0x39e, 0x330, +0x195, 0x157, 0x195, 0x157, 0xff27, 0xff18, 0xff27, 0xff18, 0xfed9, 0xfef6, 0xfed9, +0xfef6, 0xfed9, 0xfef6, 0xfb8b, 0xfbd4, 0xfb8b, 0xfbd4, 0xf9c3, 0xfa34, 0xf9c3, 0xfa34, +0xf9c7, 0xfa5e, 0xf9c7, 0xfa5e, 0xf9ac, 0xfa64, 0xf9ac, 0xfa64, 0xf7fa, 0xf8cf, 0xf7fa, +0xf8cf, 0xf756, 0xf844, 0xf756, 0xf844, 0xf756, 0xf844, 0xf8bb, 0xf9bd, 0xf8bb, 0xf9bd, +0xf56d, 0xf67e, 0xf56d, 0xf67e, 0xf815, 0xf931, 0xf815, 0xf931, 0xf601, 0xf723, 0xf601, +0xf723, 0xf334, 0xf457, 0xf334, 0xf457, 0xf334, 0xf457, 0xf3db, 0xf4fc, 0xf3db, 0xf4fc, +0xf39f, 0xf4b9, 0xf39f, 0xf4b9, 0xf2e2, 0xf3f2, 0xf2e2, 0xf3f2, 0xf488, 0xf58b, 0xf488, +0xf58b, 0xf48c, 0xf57f, 0xf48c, 0xf57f, 0xf390, 0xf471, 0xf390, 0xf471, 0xf390, 0xf471, +0xf6d3, 0xf7a1, 0xf6d3, 0xf7a1, 0xf4b1, 0xf569, 0xf4b1, 0xf569, 0xf557, 0xf5f9, 0xf557, +0xf5f9, 0xf496, 0xf522, 0xf496, 0xf522, 0xf50e, 0xf584, 0xf50e, 0xf584, 0xf5d7, 0xf637, +0xf5d7, 0xf637, 0xf5d7, 0xf637, 0xf856, 0xf8a0, 0xf856, 0xf8a0, 0xf859, 0xf88e, 0xf859, +0xf88e, 0xf89a, 0xf8bb, 0xf89a, 0xf8bb, 0xfd69, 0xfd76, 0xfd69, 0xfd76, 0xfbf1, 0xfbec, +0xfbf1, 0xfbec, 0xfbf1, 0xfbec, 0xfebd, 0xfea6, 0xfebd, 0xfea6, 0xff28, 0xff01, 0xff28, +0xff01, 0x23, 0xffed, 0x23, 0xffed, 0xb7, 0x72, 0xb7, 0x72, 0x2cb, 0x278, +0x2cb, 0x278, 0x3a7, 0x346, 0x3a7, 0x346, 0x3a7, 0x346, 0x3a7, 0x33a, 0x3a7, +0x33a, 0x7f0, 0x776, 0x7f0, 0x776, 0x830, 0x7ab, 0x830, 0x7ab, 0x9ac, 0x91b, +0x9ac, 0x91b, 0xcd8, 0xc3c, 0xcd8, 0xc3c, 0xe41, 0xd9b, 0xe41, 0xd9b, 0xe41, +0xd9b, 0xce4, 0xc34, 0xce4, 0xc34, 0x102b, 0xf71, 0x102b, 0xf71, 0xf2b, 0xe69, +0xf2b, 0xe69, 0xdf5, 0xd2b, 0xdf5, 0xd2b, 0xca5, 0xbd3, 0xca5, 0xbd3, 0xca5, +0xbd3, 0xa10, 0x937, 0xa10, 0x937, 0xb1c, 0xa3d, 0xb1c, 0xa3d, 0xa3b, 0x957, +0xa3b, 0x957, 0x8ce, 0x7e6, 0x8ce, 0x7e6, 0x77e, 0x693, 0x77e, 0x693, 0x7fd, +0x710, 0x7fd, 0x710, 0x7fd, 0x710, 0x539, 0x44b, 0x539, 0x44b, 0x6ae, 0x5bf, +0x6ae, 0x5bf, 0x4e3, 0x3f4, 0x4e3, 0x3f4, 0x2aa, 0x1bb, 0x2aa, 0x1bb, 0x23d, +0x14f, 0x23d, 0x14f, 0xffba, 0xfece, 0xffba, 0xfece, 0xffba, 0xfece, 0xff84, 0xfe99, +0xff84, 0xfe99, 0x52, 0xff68, 0x52, 0xff68, 0xffe4, 0xfefb, 0xffe4, 0xfefb, 0xfd39, +0xfc50, 0xfd39, 0xfc50, 0xba, 0xffd1, 0xba, 0xffd1, 0xba, 0xffd1, 0, 0xff16, +0, 0xff16, 0x68, 0xff7c, 0x68, 0xff7c, 0xa6, 0xffb8, 0xa6, 0xffb8, 0xffee, +0xfefc, 0xffee, 0xfefc, 0xff2a, 0xfe35, 0xff2a, 0xfe35, 0xfff8, 0xfefe, 0xfff8, 0xfefe, +0xfff8, 0xfefe, 0x21a, 0x11b, 0x21a, 0x11b, 0xba, 0xffb6, 0xba, 0xffb6, 0x32c, +0x222, 0x32c, 0x222, 0x15f, 0x50, 0x15f, 0x50, 0x376, 0x262, 0x376, 0x262, +0x594, 0x47b, 0x594, 0x47b, 0x594, 0x47b, 0x615, 0x4f9, 0x615, 0x4f9, 0x6ae, +0x590, 0x6ae, 0x590, 0x893, 0x773, 0x893, 0x773, 0x929, 0x808, 0x929, 0x808, +0xa05, 0x8e4, 0xa05, 0x8e4, 0xa05, 0x8e4, 0xd1f, 0xc00, 0xd1f, 0xc00, 0xb84, +0xa67, 0xb84, 0xa67, 0xffc, 0xee3, 0xffc, 0xee3, 0x1189, 0x1072, 0x1189, 0x1072, +0x11e0, 0x10cd, 0x11e0, 0x10cd, 0x12a0, 0x118f, 0x12a0, 0x118f, 0x12a0, 0x118f, 0x131c, +0x120c, 0x131c, 0x120c, 0x1146, 0x1036, 0x1146, 0x1036, 0x1183, 0x1071, 0x1183, 0x1071, +0x122b, 0x1113, 0x122b, 0x1113, 0xdbb, 0xc9a, 0xdbb, 0xc9a, 0xf45, 0xe18, 0xf45, +0xe18, 0xf45, 0xe18, 0x10b6, 0xf78, 0x10b6, 0xf78, 0x1133, 0xfe0, 0x1133, 0xfe0, +0x10e2, 0xf75, 0x10e2, 0xf75, 0x11fd, 0x1071, 0x11fd, 0x1071, 0x10a3, 0xef4, 0x10a3, +0xef4, 0x10a3, 0xef4, 0x1112, 0xf3b, 0x1112, 0xf3b, 0x113a, 0xf38, 0x113a, 0xf38, +0x1074, 0xe42, 0x1074, 0xe42, 0xff6, 0xd92, 0xff6, 0xd92, 0xed8, 0xc41, 0xed8, +0xc41, 0x117c, 0xeb0, 0x117c, 0xeb0, 0x117c, 0xeb0, 0x1200, 0xf00, 0x1200, 0xf00, +0x1464, 0x1132, 0x1464, 0x1132, 0x1396, 0x1033, 0x1396, 0x1033, 0x13c2, 0x1034, 0x13c2, +0x1034, 0x128b, 0xed6, 0x128b, 0xed6, 0x1301, 0xf2e, 0x1301, 0xf2e, 0x1301, 0xf2e, +0x137c, 0xf91, 0x137c, 0xf91, 0x109a, 0xca0, 0x109a, 0xca0, 0xfdf, 0xbe0, 0xfdf, +0xbe0, 0xeb6, 0xabe, 0xeb6, 0xabe, 0xf23, 0xb3b, 0xf23, 0xb3b, 0xf23, 0xb3b, +0xca4, 0x8d8, 0xca4, 0x8d8, 0xca5, 0x901, 0xca5, 0x901, 0x95a, 0x5e8, 0x95a, +0x5e8, 0x6d3, 0x39f, 0x6d3, 0x39f, 0x863, 0x578, 0x863, 0x578, 0x7fc, 0x562, +0x7fc, 0x562, 0x7fc, 0x562, 0x4f7, 0x2b7, 0x4f7, 0x2b7, 0x3d7, 0x1f8, 0x3d7, +0x1f8, 0xaf, 0xff36, 0xaf, 0xff36, 0xfc74, 0xfb66, 0xfc74, 0xfb66, 0xfd5f, 0xfcbd, +0xfd5f, 0xfcbd, 0xf95a, 0xf927, 0xf95a, 0xf927, 0xf95a, 0xf927, 0xf859, 0xf893, 0xf859, +0xf893, 0xf5c7, 0xf66a, 0xf5c7, 0xf66a, 0xf511, 0xf61a, 0xf511, 0xf61a, 0xf55f, 0xf6c9, +0xf55f, 0xf6c9, 0xf387, 0xf549, 0xf387, 0xf549, 0xf387, 0xf549, 0xf336, 0xf54a, 0xf336, +0xf54a, 0xf1c0, 0xf41d, 0xf1c0, 0xf41d, 0xf14b, 0xf3e6, 0xf14b, 0xf3e6, 0xef67, 0xf236, +0xef67, 0xf236, 0xef4c, 0xf244, 0xef4c, 0xf244, 0xed9b, 0xf0b1, 0xed9b, 0xf0b1, 0xed9b, +0xf0b1, 0xec9e, 0xefc8, 0xec9e, 0xefc8, 0xed4a, 0xf07d, 0xed4a, 0xf07d, 0xeef7, 0xf22a, +0xeef7, 0xf22a, 0xee37, 0xf15f, 0xee37, 0xf15f, 0xf045, 0xf35a, 0xf045, 0xf35a, 0xf12d, +0xf428, 0xf12d, 0xf428, 0xf12d, 0xf428, 0xf10b, 0xf3e5, 0xf10b, 0xf3e5, 0xf4a3, 0xf755, +0xf4a3, 0xf755, 0xf4fd, 0xf783, 0xf4fd, 0xf783, 0xf65f, 0xf8b5, 0xf65f, 0xf8b5, 0xf77c, +0xf99f, 0xf77c, 0xf99f, 0xf77c, 0xf99f, 0xfcc4, 0xfeb2, 0xfcc4, 0xfeb2, 0xfe3c, 0xfff3, +0xfe3c, 0xfff3, 0x8d, 0x20c, 0x8d, 0x20c, 0x377, 0x4bf, 0x377, 0x4bf, 0x309, +0x41a, 0x309, 0x41a, 0x5a0, 0x67a, 0x5a0, 0x67a, 0x5a0, 0x67a, 0x801, 0x8a5, +0x801, 0x8a5, 0x8e2, 0x953, 0x8e2, 0x953, 0x74f, 0x78e, 0x74f, 0x78e, 0x6f2, +0x701, 0x6f2, 0x701, 0x6f5, 0x6d5, 0x6f5, 0x6d5, 0x6f5, 0x6d5, 0x92c, 0x8e0, +0x92c, 0x8e0, 0x749, 0x6d3, 0x749, 0x6d3, 0x813, 0x776, 0x813, 0x776, 0x79f, +0x6dd, 0x79f, 0x6dd, 0x678, 0x594, 0x678, 0x594, 0x8c7, 0x7c5, 0x8c7, 0x7c5, +0x8c7, 0x7c5, 0x7f6, 0x6da, 0x7f6, 0x6da, 0x8d6, 0x7a2, 0x8d6, 0x7a2, 0x848, +0x702, 0x848, 0x702, 0x90c, 0x7b9, 0x90c, 0x7b9, 0x880, 0x724, 0x880, 0x724, +0xab2, 0x955, 0xab2, 0x955, 0xab2, 0x955, 0xac9, 0x970, 0xac9, 0x970, 0x962, +0x814, 0x962, 0x814, 0x914, 0x7d9, 0x914, 0x7d9, 0x9be, 0x89d, 0x9be, 0x89d, +0x984, 0x885, 0x984, 0x885, 0x984, 0x885, 0x59c, 0x4c6, 0x59c, 0x4c6, 0x45b, +0x3b6, 0x45b, 0x3b6, 0xfffc, 0xff8f, 0xfffc, 0xff8f, 0xfdb8, 0xfd8b, 0xfdb8, 0xfd8b, +0xfb3e, 0xfb56, 0xfb3e, 0xfb56, 0xf9b8, 0xfa1b, 0xf9b8, 0xfa1b, 0xf9b8, 0xfa1b, 0xf7c7, +0xf879, 0xf7c7, 0xf879, 0xf581, 0xf688, 0xf581, 0xf688, 0xf451, 0xf5ad, 0xf451, 0xf5ad, +0xf285, 0xf438, 0xf285, 0xf438, 0xefee, 0xf1f8, 0xefee, 0xf1f8, 0xebc6, 0xee25, 0xebc6, +0xee25, 0xebc6, 0xee25, 0xe881, 0xeb33, 0xe881, 0xeb33, 0xe3c2, 0xe6c3, 0xe3c2, 0xe6c3, +0xe1e3, 0xe52d, 0xe1e3, 0xe52d, 0xde15, 0xe1a2, 0xde15, 0xe1a2, 0xdccc, 0xe094, 0xdccc, +0xe094, 0xdccc, 0xe094, 0xdb40, 0xdf3b, 0xdb40, 0xdf3b, 0xda9b, 0xdec0, 0xda9b, 0xdec0, +0xda18, 0xde5d, 0xda18, 0xde5d, 0xd8ca, 0xdd27, 0xd8ca, 0xdd27, 0xdabe, 0xdf28, 0xdabe, +0xdf28, 0xd962, 0xddd0, 0xd962, 0xddd0, 0xd962, 0xddd0, 0xd9cd, 0xde36, 0xd9cd, 0xde36, +0xda61, 0xdebd, 0xda61, 0xdebd, 0xdbe7, 0xe02e, 0xdbe7, 0xe02e, 0xdbc9, 0xdff5, 0xdbc9, +0xdff5, 0xddc1, 0xe1cd, 0xddc1, 0xe1cd, 0xde62, 0xe248, 0xde62, 0xe248, 0xde62, 0xe248, +0xdd68, 0xe127, 0xdd68, 0xe127, 0xde0a, 0xe19f, 0xde0a, 0xe19f, 0xdfe8, 0xe353, 0xdfe8, +0xe353, 0xe187, 0xe4c8, 0xe187, 0xe4c8, 0xe1f7, 0xe50f, 0xe1f7, 0xe50f, 0xe1f7, 0xe50f, +0xe617, 0xe90a, 0xe617, 0xe90a, 0xe62f, 0xe900, 0xe62f, 0xe900, 0xe83e, 0xeaf0, 0xe83e, +0xeaf0, 0xe88c, 0xeb23, 0xe88c, 0xeb23, 0xeae6, 0xed67, 0xeae6, 0xed67, 0xedb9, 0xf027, +0xedb9, 0xf027, 0xedb9, 0xf027, 0xee61, 0xf0c1, 0xee61, 0xf0c1, 0xf0b6, 0xf30b, 0xf0b6, +0xf30b, 0xf098, 0xf2e4, 0xf098, 0xf2e4, 0xf371, 0xf5b7, 0xf371, 0xf5b7, 0xf5e2, 0xf823, +0xf5e2, 0xf823, 0xf6c8, 0xf903, 0xf6c8, 0xf903, 0xf6c8, 0xf903, 0xf709, 0xf93e, 0xf709, +0xf93e, 0xf920, 0xfb4e, 0xf920, 0xfb4e, 0xf89e, 0xfac0, 0xf89e, 0xfac0, 0xf9f0, 0xfc04, +0xf9f0, 0xfc04, 0xfaf3, 0xfcf4, 0xfaf3, 0xfcf4, 0xfaf3, 0xfcf4, 0xfc5b, 0xfe44, 0xfc5b, +0xfe44, 0xfd4c, 0xff16, 0xfd4c, 0xff16, 0xfd18, 0xfebf, 0xfd18, 0xfebf, 0x12a, 0x2a7, +0x12a, 0x2a7, 0x16d, 0x2bb, 0x16d, 0x2bb, 0x3ec, 0x505, 0x3ec, 0x505, 0x3ec, +0x505, 0x5ab, 0x68b, 0x5ab, 0x68b, 0x808, 0x8a9, 0x808, 0x8a9, 0xa2e, 0xa8f, +0xa2e, 0xa8f, 0xc93, 0xcb2, 0xc93, 0xcb2, 0x102e, 0x1009, 0x102e, 0x1009, 0x142a, +0x13c1, 0x142a, 0x13c1, 0x142a, 0x13c1, 0x16b2, 0x1608, 0x16b2, 0x1608, 0x18aa, 0x17c2, +0x18aa, 0x17c2, 0x1be0, 0x1abd, 0x1be0, 0x1abd, 0x1b07, 0x19af, 0x1b07, 0x19af, 0x1cf0, +0x1b69, 0x1cf0, 0x1b69, 0x1cf0, 0x1b69, 0x1b77, 0x19c8, 0x1b77, 0x19c8, 0x1aff, 0x1931, +0x1aff, 0x1931, 0x19bf, 0x17d9, 0x19bf, 0x17d9, 0x18e2, 0x16ee, 0x18e2, 0x16ee, 0x17e5, +0x15ea, 0x17e5, 0x15ea, 0x1580, 0x1388, 0x1580, 0x1388, 0x1580, 0x1388, 0x1679, 0x148b, +0x1679, 0x148b, 0x14b6, 0x12da, 0x14b6, 0x12da, 0x14b5, 0x12f1, 0x14b5, 0x12f1, 0x1371, +0x11cc, 0x1371, 0x11cc, 0x12d8, 0x1155, 0x12d8, 0x1155, 0x1106, 0xfa9, 0x1106, 0xfa9, +0x1106, 0xfa9, 0xfa8, 0xe73, 0xfa8, 0xe73, 0xcc8, 0xbbb, 0xcc8, 0xbbb, 0xa73, +0x98f, 0xa73, 0x98f, 0x9b5, 0x8f7, 0x9b5, 0x8f7, 0x884, 0x7ea, 0x884, 0x7ea, +0x884, 0x7ea, 0x75a, 0x6df, 0x75a, 0x6df, 0x4d4, 0x474, 0x4d4, 0x474, 0x4fa, +0x4b0, 0x4fa, 0x4b0, 0x22e, 0x1f4, 0x22e, 0x1f4, 0x20c, 0x1dd, 0x20c, 0x1dd, +0xffa9, 0xff7d, 0xffa9, 0xff7d, 0xffa9, 0xff7d, 0xfddd, 0xfdaf, 0xfddd, 0xfdaf, 0xfc0b, +0xfbd6, 0xfc0b, 0xfbd6, 0xfa0c, 0xf9ca, 0xfa0c, 0xf9ca, 0xfbad, 0xfb59, 0xfbad, 0xfb59, +0xfb53, 0xfae9, 0xfb53, 0xfae9, 0xfb42, 0xfac0, 0xfb42, 0xfac0, 0xfb42, 0xfac0, 0xf990, +0xf8f4, 0xf990, 0xf8f4, 0xf8a4, 0xf7ec, 0xf8a4, 0xf7ec, 0xf737, 0xf663, 0xf737, 0xf663, +0xf828, 0xf739, 0xf828, 0xf739, 0xf670, 0xf568, 0xf670, 0xf568, 0xf670, 0xf568, 0xf5e2, +0xf4c2, 0xf5e2, 0xf4c2, 0xf595, 0xf461, 0xf595, 0xf461, 0xf4eb, 0xf3a6, 0xf4eb, 0xf3a6, +0xf740, 0xf5ee, 0xf740, 0xf5ee, 0xf7a8, 0xf64c, 0xf7a8, 0xf64c, 0xf716, 0xf5b5, 0xf716, +0xf5b5, 0xf716, 0xf5b5, 0xf3c3, 0xf260, 0xf3c3, 0xf260, 0xf514, 0xf3b3, 0xf514, 0xf3b3, +0xf60d, 0xf4b2, 0xf60d, 0xf4b2, 0xf6e4, 0xf590, 0xf6e4, 0xf590, 0xf74c, 0xf603, 0xf74c, +0xf603, 0xf6d3, 0xf596, 0xf6d3, 0xf596, 0xf6d3, 0xf596, 0xf775, 0xf645, 0xf775, 0xf645, +0xf91e, 0xf7fa, 0xf91e, 0xf7fa, 0xf9c3, 0xf8ad, 0xf9c3, 0xf8ad, 0xf94d, 0xf843, 0xf94d, +0xf843, 0xfad4, 0xf9d5, 0xfad4, 0xf9d5, 0xfad4, 0xf9d5, 0xf9c9, 0xf8d4, 0xf9c9, 0xf8d4, +0xfbf7, 0xfb09, 0xfbf7, 0xfb09, 0xfc45, 0xfb5d, 0xfc45, 0xfb5d, 0xfcae, 0xfbc9, 0xfcae, +0xfbc9, 0xfe9c, 0xfdb9, 0xfe9c, 0xfdb9, 0x46, 0xff64, 0x46, 0xff64, 0x46, 0xff64, +0xbd, 0xffd9, 0xbd, 0xffd9, 0xde, 0xfffa, 0xde, 0xfffa, 0x235, 0x14f, 0x235, +0x14f, 0x2d0, 0x1e9, 0x2d0, 0x1e9, 0x59f, 0x4b8, 0x59f, 0x4b8, 0x59f, 0x4b8, +0x63d, 0x558, 0x63d, 0x558, 0x739, 0x658, 0x739, 0x658, 0x74f, 0x675, 0x74f, +0x675, 0x946, 0x875, 0x946, 0x875, 0x9b0, 0x8ed, 0x9b0, 0x8ed, 0x985, 0x8d3, +0x985, 0x8d3, 0x985, 0x8d3, 0x903, 0x866, 0x903, 0x866, 0x6cd, 0x648, 0x6cd, +0x648, 0x6a8, 0x63f, 0x6a8, 0x63f, 0x5be, 0x574, 0x5be, 0x574, 0x636, 0x60c, +0x636, 0x60c, 0x43b, 0x433, 0x43b, 0x433, 0x43b, 0x433, 0x48a, 0x4a5, 0x48a, +0x4a5, 0x3d1, 0x40e, 0x3d1, 0x40e, 0x303, 0x361, 0x303, 0x361, 0x329, 0x3a4, +0x329, 0x3a4, 0x2d6, 0x36c, 0x2d6, 0x36c, 0x2d6, 0x36c, 0x2e5, 0x391, 0x2e5, +0x391, 0x78, 0x133, 0x78, 0x133, 0xffab, 0x71, 0xffab, 0x71, 0xdc, 0x1a4, +0xdc, 0x1a4, 0x20a, 0x2cc, 0x20a, 0x2cc, 0x1fd, 0x2b1, 0x1fd, 0x2b1, 0x1fd, +0x2b1, 0x440, 0x4df, 0x440, 0x4df, 0x411, 0x492, 0x411, 0x492, 0x571, 0x5cc, +0x571, 0x5cc, 0x617, 0x644, 0x617, 0x644, 0x5e2, 0x5dc, 0x5e2, 0x5dc, 0x767, +0x727, 0x767, 0x727, 0x767, 0x727, 0x6d4, 0x656, 0x6d4, 0x656, 0x714, 0x654, +0x714, 0x654, 0x63e, 0x53a, 0x63e, 0x53a, 0x786, 0x63e, 0x786, 0x63e, 0x6cd, +0x542, 0x6cd, 0x542, 0x6cd, 0x542, 0x5c6, 0x3fa, 0x5c6, 0x3fa, 0x754, 0x54b, +0x754, 0x54b, 0xa21, 0x7df, 0xa21, 0x7df, 0xbdb, 0x967, 0xbdb, 0x967, 0xe1f, +0xb80, 0xe1f, 0xb80, 0xe0a, 0xb48, 0xe0a, 0xb48, 0xe0a, 0xb48, 0xe09, 0xb2d, +0xe09, 0xb2d, 0x1183, 0xe95, 0x1183, 0xe95, 0x1105, 0xe0e, 0x1105, 0xe0e, 0x1374, +0x107e, 0x1374, 0x107e, 0x1435, 0x1148, 0x1435, 0x1148, 0x13a3, 0x10c6, 0x13a3, 0x10c6, +0x13a3, 0x10c6, 0x14fd, 0x1237, 0x14fd, 0x1237, 0x1661, 0x13b8, 0x1661, 0x13b8, 0x1494, +0x120d, 0x1494, 0x120d, 0x12c4, 0x1062, 0x12c4, 0x1062, 0x12ba, 0x107f, 0x12ba, 0x107f, +0x12ba, 0x107f, 0x1009, 0xdf6, 0x1009, 0xdf6, 0xfe6, 0xdfb, 0xfe6, 0xdfb, 0xf7d, +0xdb7, 0xf7d, 0xdb7, 0xfd6, 0xe33, 0xfd6, 0xe33, 0x1053, 0xecf, 0x1053, 0xecf, +0xfc1, 0xe56, 0xfc1, 0xe56, 0xfc1, 0xe56, 0xd78, 0xc22, 0xd78, 0xc22, 0xd5a, +0xc14, 0xd5a, 0xc14, 0xca3, 0xb65, 0xca3, 0xb65, 0xb93, 0xa59, 0xb93, 0xa59, +0xc7d, 0xb41, 0xc7d, 0xb41, 0xafa, 0x9b7, 0xafa, 0x9b7, 0xafa, 0x9b7, 0xbdc, +0xa8f, 0xbdc, 0xa8f, 0xc40, 0xae6, 0xc40, 0xae6, 0xda1, 0xc37, 0xda1, 0xc37, +0xdd7, 0xc5e, 0xdd7, 0xc5e, 0xdfa, 0xc70, 0xdfa, 0xc70, 0xdfa, 0xc70, 0xded, +0xc55, 0xded, 0xc55, 0xcdb, 0xb39, 0xcdb, 0xb39, 0xd83, 0xbda, 0xd83, 0xbda, +0xd28, 0xb7e, 0xd28, 0xb7e, 0xd06, 0xb61, 0xd06, 0xb61, 0xe03, 0xc6a, 0xe03, +0xc6a, 0xe03, 0xc6a, 0xcae, 0xb27, 0xcae, 0xb27, 0xa0a, 0x89d, 0xa0a, 0x89d, +0xb55, 0xa0a, 0xb55, 0xa0a, 0x9a8, 0x886, 0x9a8, 0x886, 0x8e9, 0x7f6, 0x8e9, +0x7f6, 0x76f, 0x6b0, 0x76f, 0x6b0, 0x76f, 0x6b0, 0x5be, 0x539, 0x5be, 0x539, +0x6e2, 0x69b, 0x6e2, 0x69b, 0x4d4, 0x4cd, 0x4d4, 0x4cd, 0x301, 0x33a, 0x301, +0x33a, 0x103, 0x17d, 0x103, 0x17d, 0x103, 0x17d, 0xff17, 0xffcf, 0xff17, 0xffcf, +0xfc4a, 0xfd3d, 0xfc4a, 0xfd3d, 0xfa3a, 0xfb65, 0xfa3a, 0xfb65, 0xf8cf, 0xfa29, 0xf8cf, +0xfa29, 0xf736, 0xf8ba, 0xf736, 0xf8ba, 0xf501, 0xf6a7, 0xf501, 0xf6a7, 0xf501, 0xf6a7, +0xf588, 0xf746, 0xf588, 0xf746, 0xf580, 0xf74e, 0xf580, 0xf74e, 0xf47c, 0xf651, 0xf47c, +0xf651, 0xf513, 0xf6e5, 0xf513, 0xf6e5, 0xf28f, 0xf456, 0xf28f, 0xf456, 0xf29e, 0xf452, +0xf29e, 0xf452, 0xf29e, 0xf452, 0xf27a, 0xf413, 0xf27a, 0xf413, 0xf1b8, 0xf330, 0xf1b8, +0xf330, 0xf14a, 0xf29c, 0xf14a, 0xf29c, 0xf141, 0xf269, 0xf141, 0xf269, 0xf077, 0xf171, +0xf077, 0xf171, 0xf077, 0xf171, 0xf0f0, 0xf1bb, 0xf0f0, 0xf1bb, 0xf323, 0xf3bf, 0xf323, +0xf3bf, 0xf2d7, 0xf346, 0xf2d7, 0xf346, 0xf3cd, 0xf410, 0xf3cd, 0xf410, 0xf54d, 0xf568, +0xf54d, 0xf568, 0xf746, 0xf73e, 0xf746, 0xf73e, 0xf746, 0xf73e, 0xf97b, 0xf953, 0xf97b, +0xf953, 0xfbeb, 0xfbaa, 0xfbeb, 0xfbaa, 0xfc12, 0xfbbc, 0xfc12, 0xfbbc, 0xff22, 0xfebd, +0xff22, 0xfebd, 0x238, 0x1c9, 0x238, 0x1c9, 0x2b9, 0x246, 0x2b9, 0x246, 0x2b9, +0x246, 0x501, 0x48e, 0x501, 0x48e, 0x48c, 0x41d, 0x48c, 0x41d, 0x4dd, 0x475, +0x4dd, 0x475, 0x641, 0x5e2, 0x641, 0x5e2, 0x675, 0x621, 0x675, 0x621, 0x675, +0x621, 0x57c, 0x533, 0x57c, 0x533, 0x631, 0x5f2, 0x631, 0x5f2, 0x5f6, 0x5c2, +0x5f6, 0x5c2, 0x508, 0x4dd, 0x508, 0x4dd, 0x54c, 0x527, 0x54c, 0x527, 0x5ba, +0x59a, 0x5ba, 0x59a, 0x5ba, 0x59a, 0x66c, 0x650, 0x66c, 0x650, 0x848, 0x82d, +0x848, 0x82d, 0x975, 0x959, 0x975, 0x959, 0x885, 0x867, 0x885, 0x867, 0xb2c, +0xb0c, 0xb2c, 0xb0c, 0xaa1, 0xa7f, 0xaa1, 0xa7f, 0xaa1, 0xa7f, 0xb88, 0xb66, +0xb88, 0xb66, 0xde3, 0xdc4, 0xde3, 0xdc4, 0xbf3, 0xbda, 0xbf3, 0xbda, 0xc9a, +0xc8c, 0xc9a, 0xc8c, 0xcc3, 0xcc4, 0xcc3, 0xcc4, 0xcc3, 0xcc4, 0xa4e, 0xa66, +0xa4e, 0xa66, 0x868, 0x89d, 0x868, 0x89d, 0x64e, 0x6a9, 0x64e, 0x6a9, 0x37a, +0x402, 0x37a, 0x402, 0x237, 0x2f4, 0x237, 0x2f4, 0xff3d, 0x36, 0xff3d, 0x36, +0xff3d, 0x36, 0xfce0, 0xfe1e, 0xfce0, 0xfe1e, 0xfa65, 0xfbee, 0xfa65, 0xfbee, 0xf7ea, +0xf9c4, 0xf7ea, 0xf9c4, 0xf41b, 0xf64b, 0xf41b, 0xf64b, 0xef36, 0xf1bf, 0xef36, 0xf1bf, +0xef36, 0xf1bf, 0xedc6, 0xf0aa, 0xedc6, 0xf0aa, 0xe9f7, 0xed35, 0xe9f7, 0xed35, 0xe7ab, +0xeb41, 0xe7ab, 0xeb41, 0xe5fd, 0xe9e9, 0xe5fd, 0xe9e9, 0xe28b, 0xe6c7, 0xe28b, 0xe6c7, +0xdfb7, 0xe43c, 0xdfb7, 0xe43c, 0xdfb7, 0xe43c, 0xdd29, 0xe1ee, 0xdd29, 0xe1ee, 0xdb5a, +0xe056, 0xdb5a, 0xe056, 0xda26, 0xdf4c, 0xda26, 0xdf4c, 0xd85a, 0xdda0, 0xd85a, 0xdda0, +0xd721, 0xdc79, 0xd721, 0xdc79, 0xd790, 0xdced, 0xd790, 0xdced, 0xd790, 0xdced, 0xd729, +0xdc7d, 0xd729, 0xdc7d, 0xd763, 0xdca2, 0xd763, 0xdca2, 0xd7ed, 0xdd0b, 0xd7ed, 0xdd0b, +0xd88b, 0xdd7c, 0xd88b, 0xdd7c, 0xd7be, 0xdc77, 0xd7be, 0xdc77, 0xd7be, 0xdc77, 0xd84d, +0xdcc6, 0xd84d, 0xdcc6, 0xd8b4, 0xdce5, 0xd8b4, 0xdce5, 0xd6fc, 0xdadf, 0xd6fc, 0xdadf, +0xd828, 0xdbb9, 0xd828, 0xdbb9, 0xd986, 0xdcc2, 0xd986, 0xdcc2, 0xdb3a, 0xde21, 0xdb3a, +0xde21, 0xdb3a, 0xde21, 0xded7, 0xe169, 0xded7, 0xe169, 0xe092, 0xe2d2, 0xe092, 0xe2d2, +0xe0ad, 0xe29f, 0xe0ad, 0xe29f, 0xe3f3, 0xe59b, 0xe3f3, 0xe59b, 0xe5a7, 0xe70b, 0xe5a7, +0xe70b, 0xe5bc, 0xe6e3, 0xe5bc, 0xe6e3, 0xe5bc, 0xe6e3, 0xe842, 0xe932, 0xe842, 0xe932, +0xea9c, 0xeb5c, 0xea9c, 0xeb5c, 0xec3c, 0xecd3, 0xec3c, 0xecd3, 0xef2d, 0xefa0, 0xef2d, +0xefa0, 0xf23a, 0xf28f, 0xf23a, 0xf28f, 0xf23a, 0xf28f, 0xf382, 0xf3be, 0xf382, 0xf3be, +0xf671, 0xf697, 0xf671, 0xf697, 0xf77f, 0xf792, 0xf77f, 0xf792, 0xf83b, 0xf83d, 0xf83b, +0xf83d, 0xfa0f, 0xfa00, 0xfa0f, 0xfa00, 0xfa0a, 0xf9ea, 0xfa0a, 0xf9ea, 0xfa0a, 0xf9ea, +0xfc89, 0xfc56, 0xfc89, 0xfc56, 0xff89, 0xff40, 0xff89, 0xff40, 0xffc4, 0xff62, 0xffc4, +0xff62, 0x1d9, 0x15c, 0x1d9, 0x15c, 0x51c, 0x47f, 0x51c, 0x47f, 0x638, 0x578, +0x638, 0x578, 0x638, 0x578, 0x8cd, 0x7e5, 0x8cd, 0x7e5, 0xa8d, 0x97b, 0xa8d, +0x97b, 0xc29, 0xaec, 0xc29, 0xaec, 0xfbf, 0xe54, 0xfbf, 0xe54, 0x12ce, 0x1136, +0x12ce, 0x1136, 0x12ce, 0x1136, 0x14e2, 0x131d, 0x14e2, 0x131d, 0x1739, 0x1549, 0x1739, +0x1549, 0x1ae6, 0x18cf, 0x1ae6, 0x18cf, 0x1bdb, 0x19a1, 0x1bdb, 0x19a1, 0x1c1b, 0x19c4, +0x1c1b, 0x19c4, 0x1d3c, 0x1acf, 0x1d3c, 0x1acf, 0x1d3c, 0x1acf, 0x1cca, 0x1a50, 0x1cca, +0x1a50, 0x1cf0, 0x1a71, 0x1cf0, 0x1a71, 0x1d2a, 0x1aae, 0x1d2a, 0x1aae, 0x1c55, 0x19e7, +0x1c55, 0x19e7, 0x1bc1, 0x196a, 0x1bc1, 0x196a, 0x19a8, 0x1772, 0x19a8, 0x1772, 0x19a8, +0x1772, 0x1805, 0x15f7, 0x1805, 0x15f7, 0x17fd, 0x161f, 0x17fd, 0x161f, 0x15bd, 0x1416, +0x15bd, 0x1416, 0x14ec, 0x1381, 0x14ec, 0x1381, 0x147e, 0x1354, 0x147e, 0x1354, 0x147e, +0x1354, 0x1182, 0x109b, 0x1182, 0x109b, 0xfdd, 0xf39, 0xfdd, 0xf39, 0xe53, 0xdf2, +0xe53, 0xdf2, 0xb02, 0xae0, 0xb02, 0xae0, 0x89a, 0x8b5, 0x89a, 0x8b5, 0x73a, +0x78b, 0x73a, 0x78b, 0x73a, 0x78b, 0x4dc, 0x55c, 0x4dc, 0x55c, 0x32b, 0x3d2, +0x32b, 0x3d2, 0x313, 0x3d9, 0x313, 0x3d9, 0x191, 0x26d, 0x191, 0x26d, 0xfeaf, +0xff95, 0xfeaf, 0xff95, 0xfdd0, 0xfeb9, 0xfdd0, 0xfeb9, 0xfdd0, 0xfeb9, 0xfc54, 0xfd35, +0xfc54, 0xfd35, 0xf9f2, 0xfac3, 0xf9f2, 0xfac3, 0xfa03, 0xfabc, 0xfa03, 0xfabc, 0xf970, +0xfa0a, 0xf970, 0xfa0a, 0xf752, 0xf7c8, 0xf752, 0xf7c8, 0xf752, 0xf7c8, 0xf5ef, 0xf63b, +0xf5ef, 0xf63b, 0xf50e, 0xf52f, 0xf50e, 0xf52f, 0xf436, 0xf428, 0xf436, 0xf428, 0xf48b, +0xf450, 0xf48b, 0xf450, 0xf41b, 0xf3b4, 0xf41b, 0xf3b4, 0xf29b, 0xf20a, 0xf29b, 0xf20a, +0xf29b, 0xf20a, 0xf3e3, 0xf32c, 0xf3e3, 0xf32c, 0xf5e8, 0xf50f, 0xf5e8, 0xf50f, 0xf764, +0xf671, 0xf764, 0xf671, 0xf84b, 0xf743, 0xf84b, 0xf743, 0xf6de, 0xf5c7, 0xf6de, 0xf5c7, +0xf741, 0xf622, 0xf741, 0xf622, 0xf741, 0xf622, 0xf917, 0xf7f6, 0xf917, 0xf7f6, 0xf90d, +0xf7f1, 0xf90d, 0xf7f1, 0xf954, 0xf842, 0xf954, 0xf842, 0xf901, 0xf7fd, 0xf901, 0xf7fd, +0xf97a, 0xf889, 0xf97a, 0xf889, 0xf97a, 0xf889, 0xfb2c, 0xfa50, 0xfb2c, 0xfa50, 0xfbd8, +0xfb12, 0xfbd8, 0xfb12, 0xfd39, 0xfc8a, 0xfd39, 0xfc8a, 0xfde4, 0xfd4c, 0xfde4, 0xfd4c, +0xfe06, 0xfd83, 0xfe06, 0xfd83, 0xfc8f, 0xfc1f, 0xfc8f, 0xfc1f, 0xfc8f, 0xfc1f, 0xfaff, +0xfa9e, 0xfaff, 0xfa9e, 0xfca6, 0xfc51, 0xfca6, 0xfc51, 0xfd73, 0xfd25, 0xfd73, 0xfd25, +0xfe3a, 0xfded, 0xfe3a, 0xfded, 0xfeee, 0xfe9f, 0xfeee, 0xfe9f, 0xff63, 0xff0e, 0xff63, +0xff0e, 0xff63, 0xff0e, 0x239, 0x1d8, 0x239, 0x1d8, 0x3e8, 0x378, 0x3e8, 0x378, +0x45c, 0x3dc, 0x45c, 0x3dc, 0x4d8, 0x444, 0x4d8, 0x444, 0x44a, 0x3a1, 0x44a, +0x3a1, 0x44a, 0x3a1, 0x5dd, 0x521, 0x5dd, 0x521, 0x7a0, 0x6d0, 0x7a0, 0x6d0, +0x86b, 0x78a, 0x86b, 0x78a, 0x9b2, 0x8c3, 0x9b2, 0x8c3, 0x9eb, 0x8f2, 0x9eb, +0x8f2, 0x95c, 0x85e, 0x95c, 0x85e, 0x95c, 0x85e, 0x8af, 0x7b1, 0x8af, 0x7b1, +0x8da, 0x7e1, 0x8da, 0x7e1, 0x7a8, 0x6bb, 0x7a8, 0x6bb, 0x6bc, 0x5e1, 0x6bc, +0x5e1, 0x58e, 0x4c8, 0x58e, 0x4c8, 0x26f, 0x1c6, 0x26f, 0x1c6, 0x26f, 0x1c6, +0x24c, 0x1c3, 0x24c, 0x1c3, 0x304, 0x2a0, 0x304, 0x2a0, 0x245, 0x207, 0x245, +0x207, 0x1cf, 0x1ba, 0x1cf, 0x1ba, 0x119, 0x12c, 0x119, 0x12c, 0x119, 0x12c, +0x5a, 0x95, 0x5a, 0x95, 0xfed2, 0xff32, 0xfed2, 0xff32, 0xfe38, 0xfebb, 0xfe38, +0xfebb, 0xfe3e, 0xfedf, 0xfe3e, 0xfedf, 0xfc70, 0xfd29, 0xfc70, 0xfd29, 0xfe13, 0xfedd, +0xfe13, 0xfedd, 0xfe13, 0xfedd, 0x10, 0xe5, 0x10, 0xe5, 0xff97, 0x6f, 0xff97, +0x6f, 0x1a9, 0x27c, 0x1a9, 0x27c, 0x2b2, 0x378, 0x2b2, 0x378, 0x22b, 0x2db, +0x22b, 0x2db, 0x22b, 0x2db, 0x2aa, 0x33d, 0x2aa, 0x33d, 0x424, 0x492, 0x424, +0x492, 0x5af, 0x5f2, 0x5af, 0x5f2, 0x5a5, 0x5b8, 0x5a5, 0x5b8, 0x5f2, 0x5cf, +0x5f2, 0x5cf, 0x61d, 0x5c1, 0x61d, 0x5c1, 0x61d, 0x5c1, 0x700, 0x668, 0x700, +0x668, 0x97e, 0x8a9, 0x97e, 0x8a9, 0xaf0, 0x9de, 0xaf0, 0x9de, 0xbf3, 0xaa5, +0xbf3, 0xaa5, 0xdce, 0xc46, 0xdce, 0xc46, 0xf8c, 0xdcd, 0xf8c, 0xdcd, 0xf8c, +0xdcd, 0x1143, 0xf51, 0x1143, 0xf51, 0x1247, 0x1027, 0x1247, 0x1027, 0x132f, 0x10e6, +0x132f, 0x10e6, 0x1471, 0x1205, 0x1471, 0x1205, 0x14ad, 0x1223, 0x14ad, 0x1223, 0x14ad, +0x1223, 0x1669, 0x13c8, 0x1669, 0x13c8, 0x17dd, 0x152a, 0x17dd, 0x152a, 0x16ea, 0x142b, +0x16ea, 0x142b, 0x15ac, 0x12e5, 0x15ac, 0x12e5, 0x153e, 0x1275, 0x153e, 0x1275, 0x1456, +0x118f, 0x1456, 0x118f, 0x1456, 0x118f, 0x147d, 0x11bb, 0x147d, 0x11bb, 0x157c, 0x12c1, +0x157c, 0x12c1, 0x14ed, 0x123c, 0x14ed, 0x123c, 0x1344, 0x109e, 0x1344, 0x109e, 0x11be, +0xf23, 0x11be, 0xf23, 0x1189, 0xefb, 0x1189, 0xefb, 0x1189, 0xefb, 0x10dd, 0xe5a, +0x10dd, 0xe5a, 0xf67, 0xcee, 0xf67, 0xcee, 0xe02, 0xb94, 0xe02, 0xb94, 0xdc7, +0xb61, 0xdc7, 0xb61, 0xd95, 0xb36, 0xd95, 0xb36, 0xd95, 0xb36, 0xe2c, 0xbd4, +0xe2c, 0xbd4, 0xf08, 0xcb5, 0xf08, 0xcb5, 0xe67, 0xc19, 0xe67, 0xc19, 0xe30, +0xbe7, 0xe30, 0xbe7, 0xeff, 0xcbb, 0xeff, 0xcbb, 0xe39, 0xbfa, 0xe39, 0xbfa, +0xe39, 0xbfa, 0xd88, 0xb4f, 0xd88, 0xb4f, 0xdcc, 0xb9c, 0xdcc, 0xb9c, 0xc64, +0xa3e, 0xc64, 0xa3e, 0xc52, 0xa3a, 0xc52, 0xa3a, 0xd5d, 0xb54, 0xd5d, 0xb54, +0xdc2, 0xbcd, 0xdc2, 0xbcd, 0xdc2, 0xbcd, 0xdcf, 0xbf1, 0xdcf, 0xbf1, 0xd5d, +0xb99, 0xd5d, 0xb99, 0xb18, 0x972, 0xb18, 0x972, 0x889, 0x705, 0x889, 0x705, +0x7fb, 0x69c, 0x7fb, 0x69c, 0x7fb, 0x69c, 0x75f, 0x628, 0x75f, 0x628, 0x5a1, +0x495, 0x5a1, 0x495, 0x56a, 0x48a, 0x56a, 0x48a, 0x491, 0x3df, 0x491, 0x3df, +0x252, 0x1cf, 0x252, 0x1cf, 0x10e, 0xba, 0x10e, 0xba, 0x10e, 0xba, 0x13, +0xffec, 0x13, 0xffec, 0xfe78, 0xfe7e, 0xfe78, 0xfe7e, 0xfbc7, 0xfbf7, 0xfbc7, 0xfbf7, +0xfa35, 0xfa8b, 0xfa35, 0xfa8b, 0xf8fc, 0xf975, 0xf8fc, 0xf975, 0xf843, 0xf8db, 0xf843, +0xf8db, 0xf843, 0xf8db, 0xf91c, 0xf9ce, 0xf91c, 0xf9ce, 0xf7d8, 0xf89f, 0xf7d8, 0xf89f, +0xf5fe, 0xf6d5, 0xf5fe, 0xf6d5, 0xf617, 0xf6f7, 0xf617, 0xf6f7, 0xf469, 0xf54e, 0xf469, +0xf54e, 0xf469, 0xf54e, 0xf3fb, 0xf4de, 0xf3fb, 0xf4de, 0xf410, 0xf4ed, 0xf410, 0xf4ed, +0xf30e, 0xf3e1, 0xf30e, 0xf3e1, 0xf1af, 0xf274, 0xf1af, 0xf274, 0xf02a, 0xf0dd, 0xf02a, +0xf0dd, 0xf161, 0xf201, 0xf161, 0xf201, 0xf161, 0xf201, 0xf17f, 0xf209, 0xf17f, 0xf209, +0xf010, 0xf083, 0xf010, 0xf083, 0xf18c, 0xf1e8, 0xf18c, 0xf1e8, 0xf2fc, 0xf342, 0xf2fc, +0xf342, 0xf3f4, 0xf425, 0xf3f4, 0xf425, 0xf6c6, 0xf6e6, 0xf6c6, 0xf6e6, 0xf6c6, 0xf6e6, +0xf7da, 0xf7eb, 0xf7da, 0xf7eb, 0xf8f1, 0xf8f6, 0xf8f1, 0xf8f6, 0xfa10, 0xfa0e, 0xfa10, +0xfa0e, 0xfc89, 0xfc84, 0xfc89, 0xfc84, 0xff08, 0xff04, 0xff08, 0xff04, 0xff08, 0xff04, +0xc1, 0xc3, 0xc1, 0xc3, 0x2cb, 0x2d7, 0x2cb, 0x2d7, 0x2fb, 0x316, 0x2fb, +0x316, 0x362, 0x38f, 0x362, 0x38f, 0x55e, 0x5a1, 0x55e, 0x5a1, 0x753, 0x7ae, +0x753, 0x7ae, 0x753, 0x7ae, 0x6cf, 0x745, 0x6cf, 0x745, 0x4aa, 0x53b, 0x4aa, +0x53b, 0x35a, 0x407, 0x35a, 0x407, 0x36a, 0x433, 0x36a, 0x433, 0x2bc, 0x3a0, +0x2bc, 0x3a0, 0x32d, 0x42a, 0x32d, 0x42a, 0x32d, 0x42a, 0x36c, 0x47f, 0x36c, +0x47f, 0x383, 0x4aa, 0x383, 0x4aa, 0x43d, 0x576, 0x43d, 0x576, 0x5a1, 0x6e8, +0x5a1, 0x6e8, 0x66c, 0x7be, 0x66c, 0x7be, 0x66c, 0x7be, 0x6c4, 0x81d, 0x6c4, +0x81d, 0x7f9, 0x958, 0x7f9, 0x958, 0x707, 0x869, 0x707, 0x869, 0x6d8, 0x83b, +0x6d8, 0x83b, 0x8ef, 0xa52, 0x8ef, 0xa52, 0x88e, 0x9f2, 0x88e, 0x9f2, 0x88e, +0x9f2, 0x732, 0x897, 0x732, 0x897, 0x68a, 0x7f1, 0x68a, 0x7f1, 0x3ab, 0x516, +0x3ab, 0x516, 0x253, 0x3c6, 0x253, 0x3c6, 0x185, 0x303, 0x185, 0x303, 0x18a, +0x317, 0x18a, 0x317, 0x18a, 0x317, 0x15, 0x1b6, 0x15, 0x1b6, 0xfc2f, 0xfde9, +0xfc2f, 0xfde9, 0xf9f1, 0xfbca, 0xf9f1, 0xfbca, 0xf775, 0xf971, 0xf775, 0xf971, 0xf4e0, +0xf703, 0xf4e0, 0xf703, 0xf4e0, 0xf703, 0xf3d3, 0xf621, 0xf3d3, 0xf621, 0xf157, 0xf3d3, +0xf157, 0xf3d3, 0xee00, 0xf0ac, 0xee00, 0xf0ac, 0xeba8, 0xee85, 0xeba8, 0xee85, 0xe851, +0xeb60, 0xe851, 0xeb60, 0xe5a6, 0xe8e4, 0xe5a6, 0xe8e4, 0xe5a6, 0xe8e4, 0xe33f, 0xe6a9, +0xe33f, 0xe6a9, 0xe1c9, 0xe55a, 0xe1c9, 0xe55a, 0xdfc2, 0xe376, 0xdfc2, 0xe376, 0xde17, +0xe1e6, 0xde17, 0xe1e6, 0xdd0b, 0xe0ec, 0xdd0b, 0xe0ec, 0xdb0c, 0xdef7, 0xdb0c, 0xdef7, +0xdb0c, 0xdef7, 0xd94e, 0xdd38, 0xd94e, 0xdd38, 0xd8e7, 0xdcc7, 0xd8e7, 0xdcc7, 0xd920, +0xdceb, 0xd920, 0xdceb, 0xda8c, 0xde38, 0xda8c, 0xde38, 0xdbf3, 0xdf75, 0xdbf3, 0xdf75, +0xdbf3, 0xdf75, 0xdbd5, 0xdf25, 0xdbd5, 0xdf25, 0xdb2c, 0xde40, 0xdb2c, 0xde40, 0xda14, +0xdce5, 0xda14, 0xdce5, 0xda10, 0xdc98, 0xda10, 0xdc98, 0xdaa8, 0xdce2, 0xdaa8, 0xdce2, +0xdc82, 0xde6c, 0xdc82, 0xde6c, 0xdc82, 0xde6c, 0xde00, 0xdf99, 0xde00, 0xdf99, 0xdf95, +0xe0dc, 0xdf95, 0xe0dc, 0xe102, 0xe1f9, 0xe102, 0xe1f9, 0xe2e5, 0xe390, 0xe2e5, 0xe390, +0xe4a0, 0xe503, 0xe4a0, 0xe503, 0xe4a0, 0xe503, 0xe5ca, 0xe5ec, 0xe5ca, 0xe5ec, 0xe6d5, +0xe6be, 0xe6d5, 0xe6be, 0xe8bf, 0xe875, 0xe8bf, 0xe875, 0xeaea, 0xea75, 0xeaea, 0xea75, +0xece8, 0xec52, 0xece8, 0xec52, 0xef1e, 0xee6f, 0xef1e, 0xee6f, 0xef1e, 0xee6f, 0xf0b7, +0xeff6, 0xf0b7, 0xeff6, 0xf348, 0xf27d, 0xf348, 0xf27d, 0xf545, 0xf476, 0xf545, 0xf476, +0xf765, 0xf698, 0xf765, 0xf698, 0xf8a8, 0xf7e0, 0xf8a8, 0xf7e0, 0xfa28, 0xf969, 0xfa28, +0xf969, 0xfa28, 0xf969, 0xfb4f, 0xfa9b, 0xfb4f, 0xfa9b, 0xfbd6, 0xfb2c, 0xfbd6, 0xfb2c, +0xfd15, 0xfc75, 0xfd15, 0xfc75, 0xfed3, 0xfe3d, 0xfed3, 0xfe3d, 0xff4b, 0xfebb, 0xff4b, +0xfebb, 0xff4b, 0xfebb, 0x151, 0xc3, 0x151, 0xc3, 0x3dd, 0x34d, 0x3dd, 0x34d, +0x577, 0x4e3, 0x577, 0x4e3, 0x8ba, 0x81c, 0x8ba, 0x81c, 0xb4b, 0xaa0, 0xb4b, +0xaa0, 0xe34, 0xd79, 0xe34, 0xd79, 0xe34, 0xd79, 0x10b5, 0xfe6, 0x10b5, 0xfe6, +0x134b, 0x1267, 0x134b, 0x1267, 0x16a7, 0x15ad, 0x16a7, 0x15ad, 0x1979, 0x1869, 0x1979, +0x1869, 0x1aba, 0x1995, 0x1aba, 0x1995, 0x1c3d, 0x1b07, 0x1c3d, 0x1b07, 0x1c3d, 0x1b07, +0x1cd7, 0x1b93, 0x1cd7, 0x1b93, 0x1e50, 0x1d02, 0x1e50, 0x1d02, 0x1f33, 0x1de2, 0x1f33, +0x1de2, 0x1eed, 0x1d9e, 0x1eed, 0x1d9e, 0x1e2b, 0x1ce4, 0x1e2b, 0x1ce4, 0x1e2b, 0x1ce4, +0x1d3f, 0x1c07, 0x1d3f, 0x1c07, 0x1ceb, 0x1bc9, 0x1ceb, 0x1bc9, 0x1a86, 0x197f, 0x1a86, +0x197f, 0x19a1, 0x18bd, 0x19a1, 0x18bd, 0x1915, 0x1857, 0x1915, 0x1857, 0x16e3, 0x164f, +0x16e3, 0x164f, 0x16e3, 0x164f, 0x144d, 0x13e6, 0x144d, 0x13e6, 0x1219, 0x11e1, 0x1219, +0x11e1, 0xfe2, 0xfd9, 0xfe2, 0xfd9, 0xf9a, 0xfbe, 0xf9a, 0xfbe, 0xdb7, 0xe06, +0xdb7, 0xe06, 0xb7e, 0xbf5, 0xb7e, 0xbf5, 0xb7e, 0xbf5, 0xa03, 0xa9c, 0xa03, +0xa9c, 0x7a3, 0x859, 0x7a3, 0x859, 0x5c4, 0x68f, 0x5c4, 0x68f, 0x39d, 0x477, +0x39d, 0x477, 0xe5, 0x1c7, 0xe5, 0x1c7, 0xe5, 0x1c7, 0xfdca, 0xfeac, 0xfdca, +0xfeac, 0xfbfe, 0xfcd9, 0xfbfe, 0xfcd9, 0xfa70, 0xfb3e, 0xfa70, 0xfb3e, 0xf9d4, 0xfa8f, +0xf9d4, 0xfa8f, 0xf9ba, 0xfa5d, 0xf9ba, 0xfa5d, 0xf82e, 0xf8b6, 0xf82e, 0xf8b6, 0xf82e, +0xf8b6, 0xf63f, 0xf6a9, 0xf63f, 0xf6a9, 0xf57e, 0xf5c9, 0xf57e, 0xf5c9, 0xf350, 0xf37c, +0xf350, 0xf37c, 0xf283, 0xf291, 0xf283, 0xf291, 0xf23a, 0xf22d, 0xf23a, 0xf22d, 0xf1a5, +0xf180, 0xf1a5, 0xf180, 0xf1a5, 0xf180, 0xf273, 0xf239, 0xf273, 0xf239, 0xf3c3, 0xf37b, +0xf3c3, 0xf37b, 0xf47a, 0xf427, 0xf47a, 0xf427, 0xf4b5, 0xf45f, 0xf4b5, 0xf45f, 0xf585, +0xf52f, 0xf585, 0xf52f, 0xf585, 0xf52f, 0xf627, 0xf5d8, 0xf627, 0xf5d8, 0xf6fb, 0xf6b6, +0xf6fb, 0xf6b6, 0xf7ae, 0xf778, 0xf7ae, 0xf778, 0xf786, 0xf761, 0xf786, 0xf761, 0xf683, +0xf671, 0xf683, 0xf671, 0xf87b, 0xf87d, 0xf87b, 0xf87d, 0xf87b, 0xf87d, 0xfa4a, 0xfa60, +0xfa4a, 0xfa60, 0xfca5, 0xfccd, 0xfca5, 0xfccd, 0xfdff, 0xfe37, 0xfdff, 0xfe37, 0xfebc, +0xff01, 0xfebc, 0xff01, 0x6e, 0xbb, 0x6e, 0xbb, 0xfffa, 0x4b, 0xfffa, 0x4b, +0xfffa, 0x4b, 0xfee0, 0xff30, 0xfee0, 0xff30, 0xff00, 0xff48, 0xff00, 0xff48, 0x61, +0x9e, 0x61, 0x9e, 0x21a, 0x247, 0x21a, 0x247, 0x309, 0x320, 0x309, 0x320, +0x309, 0x320, 0x36d, 0x36d, 0x36d, 0x36d, 0x593, 0x577, 0x593, 0x577, 0x639, +0x601, 0x639, 0x601, 0x6e0, 0x68c, 0x6e0, 0x68c, 0x693, 0x623, 0x693, 0x623, +0x787, 0x6fe, 0x787, 0x6fe, 0x787, 0x6fe, 0x91a, 0x87a, 0x91a, 0x87a, 0x8db, +0x82a, 0x8db, 0x82a, 0x906, 0x849, 0x906, 0x849, 0x96a, 0x8a7, 0x96a, 0x8a7, +0x939, 0x878, 0x939, 0x878, 0x952, 0x899, 0x952, 0x899, 0x952, 0x899, 0x849, +0x7a0, 0x849, 0x7a0, 0x791, 0x700, 0x791, 0x700, 0x957, 0x8e5, 0x957, 0x8e5, +0x80a, 0x7bc, 0x80a, 0x7bc, 0x66c, 0x649, 0x66c, 0x649, 0x66c, 0x649, 0x4a7, +0x4b4, 0x4a7, 0x4b4, 0x24e, 0x28e, 0x24e, 0x28e, 0x124, 0x197, 0x124, 0x197, +0x156, 0x200, 0x156, 0x200, 0xfebc, 0xff9a, 0xfebc, 0xff9a, 0xfc3b, 0xfd4b, 0xfc3b, +0xfd4b, 0xfc3b, 0xfd4b, 0xfb67, 0xfca6, 0xfb67, 0xfca6, 0xf9a8, 0xfb11, 0xf9a8, 0xfb11, +0xf908, 0xfa94, 0xf908, 0xfa94, 0xf88a, 0xfa33, 0xf88a, 0xfa33, 0xf78f, 0xf94c, 0xf78f, +0xf94c, 0xf7ae, 0xf976, 0xf7ae, 0xf976, 0xf7ae, 0xf976, 0xf8ec, 0xfab6, 0xf8ec, 0xfab6, +0xf852, 0xfa16, 0xf852, 0xfa16, 0xf8d2, 0xfa84, 0xf8d2, 0xfa84, 0xf958, 0xfaf0, 0xf958, +0xfaf0, 0xf960, 0xfad5, 0xf960, 0xfad5, 0xf960, 0xfad5, 0xfa39, 0xfb82, 0xfa39, 0xfb82, +0xfbd6, 0xfcec, 0xfbd6, 0xfcec, 0xfc6a, 0xfd46, 0xfc6a, 0xfd46, 0xfcf0, 0xfd8d, 0xfcf0, +0xfd8d, 0xfde2, 0xfe3b, 0xfde2, 0xfe3b, 0xfe0c, 0xfe1f, 0xfe0c, 0xfe1f, 0xfe0c, 0xfe1f, +0xff06, 0xfecf, 0xff06, 0xfecf, 0x189, 0x108, 0x189, 0x108, 0x2e8, 0x21e, 0x2e8, +0x21e, 0x48c, 0x379, 0x48c, 0x379, 0x718, 0x5be, 0x718, 0x5be, 0x8b8, 0x71b, +0x8b8, 0x71b, 0x8b8, 0x71b, 0xb8c, 0x9b0, 0xb8c, 0x9b0, 0xccb, 0xab3, 0xccb, +0xab3, 0xebb, 0xc6e, 0xebb, 0xc6e, 0x12ad, 0x1030, 0x12ad, 0x1030, 0x1578, 0x12d0, +0x1578, 0x12d0, 0x1578, 0x12d0, 0x1655, 0x1388, 0x1655, 0x1388, 0x17f6, 0x150a, 0x17f6, +0x150a, 0x17eb, 0x14e6, 0x17eb, 0x14e6, 0x18cf, 0x15b7, 0x18cf, 0x15b7, 0x199f, 0x1678, +0x199f, 0x1678, 0x1925, 0x15f5, 0x1925, 0x15f5, 0x1925, 0x15f5, 0x19f1, 0x16bb, 0x19f1, +0x16bb, 0x19b9, 0x1682, 0x19b9, 0x1682, 0x199f, 0x166a, 0x199f, 0x166a, 0x19a1, 0x1671, +0x19a1, 0x1671, 0x19b4, 0x168b, 0x19b4, 0x168b, 0x19b4, 0x168b, 0x188f, 0x1570, 0x188f, +0x1570, 0x178c, 0x1476, 0x178c, 0x1476, 0x1597, 0x128c, 0x1597, 0x128c, 0x14d1, 0x11d1, +0x14d1, 0x11d1, 0x14ab, 0x11b5, 0x14ab, 0x11b5, 0x14df, 0x11f4, 0x14df, 0x11f4, 0x14df, +0x11f4, 0x135e, 0x107c, 0x135e, 0x107c, 0x1256, 0xf7c, 0x1256, 0xf7c, 0x135c, 0x108a, +0x135c, 0x108a, 0x13a6, 0x10da, 0x13a6, 0x10da, 0x148d, 0x11c8, 0x148d, 0x11c8, 0x13ce, +0x110e, 0x13ce, 0x110e, 0x13ce, 0x110e, 0x1169, 0xeae, 0x1169, 0xeae, 0x10b7, 0xe02, +0x10b7, 0xe02, 0x1165, 0xeb6, 0x1165, 0xeb6, 0xfef, 0xd47, 0xfef, 0xd47, 0x1021, +0xd82, 0x1021, 0xd82, 0x1021, 0xd82, 0x10c1, 0xe2e, 0x10c1, 0xe2e, 0x1087, 0xe02, +0x1087, 0xe02, 0x1007, 0xd93, 0x1007, 0xd93, 0xfea, 0xd8c, 0xfea, 0xd8c, 0xce3, +0xa9f, 0xce3, 0xa9f, 0xadf, 0x8b9, 0xadf, 0x8b9, 0xadf, 0x8b9, 0xacc, 0x8c9, +0xacc, 0x8c9, 0x808, 0x62d, 0x808, 0x62d, 0x628, 0x47a, 0x628, 0x47a, 0x4b0, +0x333, 0x4b0, 0x333, 0x2a4, 0x15d, 0x2a4, 0x15d, 0x12e, 0x20, 0x12e, 0x20, +0x12e, 0x20, 0x89, 0xffb7, 0x89, 0xffb7, 0xfe45, 0xfdb2, 0xfe45, 0xfdb2, 0xfc89, +0xfc35, 0xfc89, 0xfc35, 0xfb04, 0xfaf0, 0xfb04, 0xfaf0, 0xf9a3, 0xf9ce, 0xf9a3, 0xf9ce, +0xf9a3, 0xf9ce, 0xf7ee, 0xf856, 0xf7ee, 0xf856, 0xf741, 0xf7e2, 0xf741, 0xf7e2, 0xf5d0, +0xf6a6, 0xf5d0, 0xf6a6, 0xf427, 0xf52d, 0xf427, 0xf52d, 0xf2d3, 0xf404, 0xf2d3, 0xf404, +0xf25f, 0xf3b3, 0xf25f, 0xf3b3, 0xf25f, 0xf3b3, 0xf416, 0xf585, 0xf416, 0xf585, 0xf350, +0xf4d3, 0xf350, 0xf4d3, 0xf282, 0xf40f, 0xf282, 0xf40f, 0xf2f5, 0xf485, 0xf2f5, 0xf485, +0xf20e, 0xf39a, 0xf20e, 0xf39a, 0xf15e, 0xf2de, 0xf15e, 0xf2de, 0xf15e, 0xf2de, 0xf1b1, +0xf31f, 0xf1b1, 0xf31f, 0xf12a, 0xf280, 0xf12a, 0xf280, 0xf246, 0xf380, 0xf246, 0xf380, +0xf34b, 0xf465, 0xf34b, 0xf465, 0xf446, 0xf53e, 0xf446, 0xf53e, 0xf446, 0xf53e, 0xf4df, +0xf5b4, 0xf4df, 0xf5b4, 0xf629, 0xf6dc, 0xf629, 0xf6dc, 0xf777, 0xf809, 0xf777, 0xf809, +0xf9c4, 0xfa3a, 0xf9c4, 0xfa3a, 0xfcd3, 0xfd2f, 0xfcd3, 0xfd2f, 0xfe34, 0xfe7c, 0xfe34, +0xfe7c, 0xfe34, 0xfe7c, 0xff00, 0xff39, 0xff00, 0xff39, 0x43, 0x72, 0x43, 0x72, +0x240, 0x26b, 0x240, 0x26b, 0x403, 0x432, 0x403, 0x432, 0x553, 0x589, 0x553, +0x589, 0x3f2, 0x435, 0x3f2, 0x435, 0x3f2, 0x435, 0x4a2, 0x4f6, 0x4a2, 0x4f6, +0x4b3, 0x51a, 0x4b3, 0x51a, 0x42e, 0x4ab, 0x42e, 0x4ab, 0x424, 0x4b7, 0x424, +0x4b7, 0x3a9, 0x452, 0x3a9, 0x452, 0x3a9, 0x452, 0x23b, 0x2f9, 0x23b, 0x2f9, +0x2c7, 0x396, 0x2c7, 0x396, 0x429, 0x507, 0x429, 0x507, 0x48d, 0x575, 0x48d, +0x575, 0x5f5, 0x6e2, 0x5f5, 0x6e2, 0x53b, 0x628, 0x53b, 0x628, 0x53b, 0x628, +0x4d9, 0x5c2, 0x4d9, 0x5c2, 0x64c, 0x72c, 0x64c, 0x72c, 0x85f, 0x934, 0x85f, +0x934, 0x791, 0x856, 0x791, 0x856, 0x7e4, 0x899, 0x7e4, 0x899, 0x7ad, 0x851, +0x7ad, 0x851, 0x7ad, 0x851, 0x50b, 0x5a0, 0x50b, 0x5a0, 0x36c, 0x3f5, 0x36c, +0x3f5, 0x3b5, 0x438, 0x3b5, 0x438, 0x257, 0x2d9, 0x257, 0x2d9, 0x17e, 0x208, +0x17e, 0x208, 0x17e, 0x208, 0x216, 0x2af, 0x216, 0x2af, 0x79, 0x12e, 0x79, +0x12e, 0xfe18, 0xfef2, 0xfe18, 0xfef2, 0xfc8b, 0xfd95, 0xfc8b, 0xfd95, 0xfa3c, 0xfb83, +0xfa3c, 0xfb83, 0xf6ba, 0xf848, 0xf6ba, 0xf848, 0xf6ba, 0xf848, 0xf4a0, 0xf67e, 0xf4a0, +0xf67e, 0xf0bd, 0xf2f5, 0xf0bd, 0xf2f5, 0xee24, 0xf0bb, 0xee24, 0xf0bb, 0xeb24, 0xee1f, +0xeb24, 0xee1f, 0xe8ef, 0xec51, 0xe8ef, 0xec51, 0xe736, 0xeaff, 0xe736, 0xeaff, 0xe736, +0xeaff, 0xe4f5, 0xe922, 0xe4f5, 0xe922, 0xe43d, 0xe8c9, 0xe43d, 0xe8c9, 0xe3e0, 0xe8c3, +0xe3e0, 0xe8c3, 0xe189, 0xe6b8, 0xe189, 0xe6b8, 0xdfa7, 0xe515, 0xdfa7, 0xe515, 0xdfa7, +0xe515, 0xde96, 0xe434, 0xde96, 0xe434, 0xdc6d, 0xe22c, 0xdc6d, 0xe22c, 0xdd31, 0xe2ff, +0xdd31, 0xe2ff, 0xde8f, 0xe45a, 0xde8f, 0xe45a, 0xdf0a, 0xe4bf, 0xdf0a, 0xe4bf, 0xdf06, +0xe495, 0xdf06, 0xe495, 0xdf06, 0xe495, 0xdfd2, 0xe529, 0xdfd2, 0xe529, 0xde80, 0xe391, +0xde80, 0xe391, 0xde44, 0xe302, 0xde44, 0xe302, 0xe021, 0xe480, 0xe021, 0xe480, 0xe0a4, +0xe49d, 0xe0a4, 0xe49d, 0xe04f, 0xe3dc, 0xe04f, 0xe3dc, 0xe04f, 0xe3dc, 0xe1ac, 0xe4cb, +0xe1ac, 0xe4cb, 0xe2fb, 0xe5ab, 0xe2fb, 0xe5ab, 0xe46e, 0xe6b4, 0xe46e, 0xe6b4, 0xe51a, +0xe6fc, 0xe51a, 0xe6fc, 0xe495, 0xe61b, 0xe495, 0xe61b, 0xe495, 0xe61b, 0xe687, 0xe7bb, +0xe687, 0xe7bb, 0xe931, 0xea20, 0xe931, 0xea20, 0xeba9, 0xec5f, 0xeba9, 0xec5f, 0xed43, +0xedce, 0xed43, 0xedce, 0xee43, 0xeeb2, 0xee43, 0xeeb2, 0xef32, 0xef91, 0xef32, 0xef91, +0xef32, 0xef91, 0xf27e, 0xf2da, 0xf27e, 0xf2da, 0xf314, 0xf378, 0xf314, 0xf378, 0xf3f1, +0xf466, 0xf3f1, 0xf466, 0xf625, 0xf6b1, 0xf625, 0xf6b1, 0xf750, 0xf7f7, 0xf750, 0xf7f7, +0xf797, 0xf85c, 0xf797, 0xf85c, 0xf797, 0xf85c, 0xf900, 0xf9e1, 0xf900, 0xf9e1, 0xf999, +0xfa93, 0xf999, 0xfa93, 0xf85b, 0xf968, 0xf85b, 0xf968, 0xf9c8, 0xfadf, 0xf9c8, 0xfadf, +0xfb06, 0xfc1e, 0xfb06, 0xfc1e, 0xfb06, 0xfc1e, 0xfbb4, 0xfcc2, 0xfbb4, 0xfcc2, 0xfd1c, +0xfe13, 0xfd1c, 0xfe13, 0xffb5, 0x89, 0xffb5, 0x89, 0x61, 0x105, 0x61, 0x105, +0x29a, 0x303, 0x29a, 0x303, 0x57f, 0x5a2, 0x57f, 0x5a2, 0x57f, 0x5a2, 0x821, +0x7f5, 0x821, 0x7f5, 0xa7c, 0x9f9, 0xa7c, 0x9f9, 0xdac, 0xccf, 0xdac, 0xccf, +0xf29, 0xdee, 0xf29, 0xdee, 0x10a1, 0xf0a, 0x10a1, 0xf0a, 0x10a1, 0xf0a, 0x1383, +0x1193, 0x1383, 0x1193, 0x14e8, 0x12a5, 0x14e8, 0x12a5, 0x16bc, 0x142e, 0x16bc, 0x142e, +0x17de, 0x150f, 0x17de, 0x150f, 0x1997, 0x1694, 0x1997, 0x1694, 0x19db, 0x16b2, 0x19db, +0x16b2, 0x19db, 0x16b2, 0x1948, 0x1609, 0x1948, 0x1609, 0x19c2, 0x167b, 0x19c2, 0x167b, +0x1b17, 0x17d9, 0x1b17, 0x17d9, 0x19ec, 0x16c5, 0x19ec, 0x16c5, 0x18b5, 0x15b4, 0x18b5, +0x15b4, 0x1698, 0x13c9, 0x1698, 0x13c9, 0x1698, 0x13c9, 0x1596, 0x1304, 0x1596, 0x1304, +0x1524, 0x12d8, 0x1524, 0x12d8, 0x1383, 0x1183, 0x1383, 0x1183, 0x1125, 0xf75, 0x1125, +0xf75, 0xf0f, 0xdb0, 0xf0f, 0xdb0, 0xf0f, 0xdb0, 0xe2b, 0xd1b, 0xe2b, 0xd1b, +0xbb3, 0xaee, 0xbb3, 0xaee, 0xb18, 0xa98, 0xb18, 0xa98, 0xae6, 0xaa3, 0xae6, +0xaa3, 0x7ea, 0x7da, 0x7ea, 0x7da, 0x363, 0x37b, 0x363, 0x37b, 0x363, 0x37b, +0x212, 0x245, 0x212, 0x245, 0x26, 0x68, 0x26, 0x68, 0xff22, 0xff68, 0xff22, +0xff68, 0xfdd2, 0xfe0f, 0xfdd2, 0xfe0f, 0xfb80, 0xfbaa, 0xfb80, 0xfbaa, 0xfa81, 0xfa8d, +0xfa81, 0xfa8d, 0xfa81, 0xfa8d, 0xfa98, 0xfa80, 0xfa98, 0xfa80, 0xfa20, 0xf9dd, 0xfa20, +0xf9dd, 0xf85f, 0xf7ee, 0xf85f, 0xf7ee, 0xf6cb, 0xf629, 0xf6cb, 0xf629, 0xf595, 0xf4c3, +0xf595, 0xf4c3, 0xf595, 0xf4c3, 0xf638, 0xf537, 0xf638, 0xf537, 0xf578, 0xf44c, 0xf578, +0xf44c, 0xf47d, 0xf32b, 0xf47d, 0xf32b, 0xf4dc, 0xf36a, 0xf4dc, 0xf36a, 0xf5c5, 0xf43c, +0xf5c5, 0xf43c, 0xf6d5, 0xf53b, 0xf6d5, 0xf53b, 0xf6d5, 0xf53b, 0xf933, 0xf791, 0xf933, +0xf791, 0xf845, 0xf6a4, 0xf845, 0xf6a4, 0xf74c, 0xf5b2, 0xf74c, 0xf5b2, 0xf86a, 0xf6df, +0xf86a, 0xf6df, 0xf8bc, 0xf744, 0xf8bc, 0xf744, 0xf832, 0xf6d2, 0xf832, 0xf6d2, 0xf832, +0xf6d2, 0xf986, 0xf841, 0xf986, 0xf841, 0xfabc, 0xf993, 0xfabc, 0xf993, 0xfb30, 0xfa23, +0xfb30, 0xfa23, 0xfcb3, 0xfbc0, 0xfcb3, 0xfbc0, 0xfd03, 0xfc27, 0xfd03, 0xfc27, 0xfd03, +0xfc27, 0xfc9a, 0xfbd1, 0xfc9a, 0xfbd1, 0xfc28, 0xfb6b, 0xfc28, 0xfb6b, 0xfd61, 0xfcab, +0xfd61, 0xfcab, 0xfcb5, 0xfc00, 0xfcb5, 0xfc00, 0xfe79, 0xfdbd, 0xfe79, 0xfdbd, 0x58, +0xff8f, 0x58, 0xff8f, 0x58, 0xff8f, 0x11d, 0x42, 0x11d, 0x42, 0x149, 0x56, +0x149, 0x56, 0x215, 0x107, 0x215, 0x107, 0x3b7, 0x28c, 0x3b7, 0x28c, 0x486, +0x33c, 0x486, 0x33c, 0x553, 0x3ea, 0x553, 0x3ea, 0x553, 0x3ea, 0x6be, 0x53a, +0x6be, 0x53a, 0x8a8, 0x70c, 0x8a8, 0x70c, 0x901, 0x751, 0x901, 0x751, 0x990, +0x7d4, 0x990, 0x7d4, 0x93b, 0x77b, 0x93b, 0x77b, 0x93b, 0x77b, 0xa48, 0x88d, +0xa48, 0x88d, 0xbe1, 0xa34, 0xbe1, 0xa34, 0xd72, 0xbdc, 0xd72, 0xbdc, 0xc64, +0xaf0, 0xc64, 0xaf0, 0xbb1, 0xa69, 0xbb1, 0xa69, 0xae2, 0x9ce, 0xae2, 0x9ce, +0xae2, 0x9ce, 0x8f7, 0x820, 0x8f7, 0x820, 0x7e8, 0x753, 0x7e8, 0x753, 0x7b0, +0x763, 0x7b0, 0x763, 0x515, 0x514, 0x515, 0x514, 0x217, 0x263, 0x217, 0x263, +0x14f, 0x1e8, 0x14f, 0x1e8, 0x14f, 0x1e8, 0xfef8, 0xffdc, 0xfef8, 0xffdc, 0xfd44, +0xfe6e, 0xfd44, 0xfe6e, 0xfa9f, 0xfc0a, 0xfa9f, 0xfc0a, 0xf914, 0xfab8, 0xf914, 0xfab8, +0xf8c0, 0xfa94, 0xf8c0, 0xfa94, 0xf8c0, 0xfa94, 0xf9ef, 0xfbe9, 0xf9ef, 0xfbe9, 0xf9e5, +0xfbf8, 0xf9e5, 0xfbf8, 0xf933, 0xfb55, 0xf933, 0xfb55, 0xf7dc, 0xfa00, 0xf7dc, 0xfa00, +0xf7c0, 0xf9d9, 0xf7c0, 0xf9d9, 0xf92a, 0xfb2c, 0xf92a, 0xfb2c, 0xf92a, 0xfb2c, 0xf9b4, +0xfb94, 0xf9b4, 0xfb94, 0xf9d1, 0xfb84, 0xf9d1, 0xfb84, 0xfa06, 0xfb82, 0xfa06, 0xfb82, +0xfa72, 0xfbaf, 0xfa72, 0xfbaf, 0xfada, 0xfbd0, 0xfada, 0xfbd0, 0xfd68, 0xfe12, 0xfd68, +0xfe12, 0xfd68, 0xfe12, 0xfe1c, 0xfe77, 0xfe1c, 0xfe77, 0xfe7b, 0xfe85, 0xfe7b, 0xfe85, +0x48, 0, 0x48, 0, 0x1c7, 0x12e, 0x1c7, 0x12e, 0x2d1, 0x1ea, 0x2d1, +0x1ea, 0x2d1, 0x1ea, 0x4fd, 0x3cc, 0x4fd, 0x3cc, 0x568, 0x3f3, 0x568, 0x3f3, +0x787, 0x5d4, 0x787, 0x5d4, 0xb0b, 0x922, 0xb0b, 0x922, 0xcb9, 0xaa1, 0xcb9, +0xaa1, 0xe30, 0xbf2, 0xe30, 0xbf2, 0xe30, 0xbf2, 0x112b, 0xed0, 0x112b, 0xed0, +0x12fc, 0x108c, 0x12fc, 0x108c, 0x1309, 0x108b, 0x1309, 0x108b, 0x142b, 0x11a7, 0x142b, +0x11a7, 0x1454, 0x11d0, 0x1454, 0x11d0, 0x14dc, 0x125e, 0x14dc, 0x125e, 0x14dc, 0x125e, +0x1576, 0x1303, 0x1576, 0x1303, 0x16ae, 0x1449, 0x16ae, 0x1449, 0x177e, 0x152a, 0x177e, +0x152a, 0x17dd, 0x159b, 0x17dd, 0x159b, 0x16a2, 0x1472, 0x16a2, 0x1472, 0x16a2, 0x1472, +0x171f, 0x14ff, 0x171f, 0x14ff, 0x16db, 0x14c9, 0x16db, 0x14c9, 0x16f7, 0x14f0, 0x16f7, +0x14f0, 0x16e5, 0x14e5, 0x16e5, 0x14e5, 0x156e, 0x1371, 0x156e, 0x1371, 0x15da, 0x13da, +0x15da, 0x13da, 0x15da, 0x13da, 0x169d, 0x1497, 0x169d, 0x1497, 0x1692, 0x147f, 0x1692, +0x147f, 0x15ef, 0x13cb, 0x15ef, 0x13cb, 0x16ec, 0x14b3, 0x16ec, 0x14b3, 0x161d, 0x13ca, +0x161d, 0x13ca, 0x14ff, 0x1290, 0x14ff, 0x1290, 0x14ff, 0x1290, 0x148f, 0x1203, 0x148f, +0x1203, 0x165a, 0x13af, 0x165a, 0x13af, 0x157f, 0x12b6, 0x157f, 0x12b6, 0x1543, 0x125f, +0x1543, 0x125f, 0x1643, 0x1346, 0x1643, 0x1346, 0x1643, 0x1346, 0x1681, 0x1371, 0x1681, +0x1371, 0x1659, 0x133a, 0x1659, 0x133a, 0x1431, 0x110c, 0x1431, 0x110c, 0x132c, 0x1009, +0x132c, 0x1009, 0x1231, 0xf17, 0x1231, 0xf17, 0x1110, 0xe0a, 0x1110, 0xe0a, 0x1110, +0xe0a, 0xfcb, 0xce2, 0xfcb, 0xce2, 0xe32, 0xb70, 0xe32, 0xb70, 0xb89, 0x8f7, +0xb89, 0x8f7, 0xa64, 0x80b, 0xa64, 0x80b, 0x833, 0x61b, 0x833, 0x61b, 0x833, +0x61b, 0x5cb, 0x3fb, 0x5cb, 0x3fb, 0x33b, 0x1ba, 0x33b, 0x1ba, 0xaf, 0xff80, +0xaf, 0xff80, 0xfdd8, 0xfcff, 0xfdd8, 0xfcff, 0xfd15, 0xfc93, 0xfd15, 0xfc93, 0xfce2, +0xfcb6, 0xfce2, 0xfcb6, 0xfce2, 0xfcb6, 0xfa93, 0xfaba, 0xfa93, 0xfaba, 0xf8b2, 0xf928, +0xf8b2, 0xf928, 0xf71d, 0xf7de, 0xf71d, 0xf7de, 0xf54e, 0xf651, 0xf54e, 0xf651, 0xf356, +0xf494, 0xf356, 0xf494, 0xf2fa, 0xf469, 0xf2fa, 0xf469, 0xf2fa, 0xf469, 0xf19c, 0xf332, +0xf19c, 0xf332, 0xf0b5, 0xf266, 0xf0b5, 0xf266, 0xefff, 0xf1c2, 0xefff, 0xf1c2, 0xef5b, +0xf125, 0xef5b, 0xf125, 0xee6a, 0xf02f, 0xee6a, 0xf02f, 0xee6a, 0xf02f, 0xef1a, 0xf0d1, +0xef1a, 0xf0d1, 0xef3a, 0xf0db, 0xef3a, 0xf0db, 0xef27, 0xf0ab, 0xef27, 0xf0ab, 0xef9a, +0xf0fa, 0xef9a, 0xf0fa, 0xeeef, 0xf027, 0xeeef, 0xf027, 0xeefa, 0xf006, 0xeefa, 0xf006, +0xeefa, 0xf006, 0xf014, 0xf0f4, 0xf014, 0xf0f4, 0xf1f7, 0xf2ab, 0xf1f7, 0xf2ab, 0xf4c6, +0xf550, 0xf4c6, 0xf550, 0xf710, 0xf773, 0xf710, 0xf773, 0xf8e7, 0xf927, 0xf8e7, 0xf927, +0xfc4b, 0xfc6f, 0xfc4b, 0xfc6f, 0xfc4b, 0xfc6f, 0xfe51, 0xfe5e, 0xfe51, 0xfe5e, 0xc7, +0xc5, 0xc7, 0xc5, 0x21d, 0x212, 0x21d, 0x212, 0x320, 0x314, 0x320, 0x314, +0x49a, 0x492, 0x49a, 0x492, 0x49a, 0x492, 0x662, 0x666, 0x662, 0x666, 0x633, +0x648, 0x633, 0x648, 0x6d8, 0x702, 0x6d8, 0x702, 0x6b0, 0x6f3, 0x6b0, 0x6f3, +0x5a8, 0x606, 0x5a8, 0x606, 0x5f4, 0x66d, 0x5f4, 0x66d, 0x5f4, 0x66d, 0x631, +0x6c5, 0x631, 0x6c5, 0x74d, 0x7fb, 0x74d, 0x7fb, 0x641, 0x706, 0x641, 0x706, +0x686, 0x75f, 0x686, 0x75f, 0x65a, 0x743, 0x65a, 0x743, 0x6a7, 0x79c, 0x6a7, +0x79c, 0x6a7, 0x79c, 0x616, 0x712, 0x616, 0x712, 0x5d6, 0x6d6, 0x5d6, 0x6d6, +0x664, 0x763, 0x664, 0x763, 0x6f6, 0x7f2, 0x6f6, 0x7f2, 0x6a1, 0x797, 0x6a1, +0x797, 0x6a1, 0x797, 0x63e, 0x72c, 0x63e, 0x72c, 0x4de, 0x5c4, 0x4de, 0x5c4, +0x2f7, 0x3d7, 0x2f7, 0x3d7, 0x34c, 0x429, 0x34c, 0x429, 0x2ca, 0x3a6, 0x2ca, +0x3a6, 0x1c5, 0x2a6, 0x1c5, 0x2a6, 0x1c5, 0x2a6, 0x31, 0x11d, 0x31, 0x11d, +0xff15, 0x13, 0xff15, 0x13, 0xfcf2, 0xfe0b, 0xfcf2, 0xfe0b, 0xfc50, 0xfd8b, 0xfc50, +0xfd8b, 0xfa10, 0xfb76, 0xfa10, 0xfb76, 0xf706, 0xf89f, 0xf706, 0xf89f, 0xf706, 0xf89f, +0xf4c2, 0xf695, 0xf4c2, 0xf695, 0xf205, 0xf41a, 0xf205, 0xf41a, 0xeea9, 0xf104, 0xeea9, +0xf104, 0xebdf, 0xee85, 0xebdf, 0xee85, 0xe92e, 0xec21, 0xe92e, 0xec21, 0xe92e, 0xec21, +0xe636, 0xe978, 0xe636, 0xe978, 0xe453, 0xe7e2, 0xe453, 0xe7e2, 0xe335, 0xe70e, 0xe335, +0xe70e, 0xe263, 0xe681, 0xe263, 0xe681, 0xdfa2, 0xe3ff, 0xdfa2, 0xe3ff, 0xde2a, 0xe2bc, +0xde2a, 0xe2bc, 0xde2a, 0xe2bc, 0xdd11, 0xe1d0, 0xdd11, 0xe1d0, 0xdbfd, 0xe0dd, 0xdbfd, +0xe0dd, 0xdba9, 0xe09e, 0xdba9, 0xe09e, 0xdc5d, 0xe159, 0xdc5d, 0xe159, 0xdbde, 0xe0d6, +0xdbde, 0xe0d6, 0xdb42, 0xe028, 0xdb42, 0xe028, 0xdb42, 0xe028, 0xdb63, 0xe02c, 0xdb63, +0xe02c, 0xdcc1, 0xe161, 0xdcc1, 0xe161, 0xdcea, 0xe157, 0xdcea, 0xe157, 0xdd6f, 0xe1a1, +0xdd6f, 0xe1a1, 0xdfb6, 0xe3a6, 0xdfb6, 0xe3a6, 0xdfb6, 0xe3a6, 0xe162, 0xe50b, 0xe162, +0xe50b, 0xe2b8, 0xe617, 0xe2b8, 0xe617, 0xe2f5, 0xe609, 0xe2f5, 0xe609, 0xe3e9, 0xe6b4, +0xe3e9, 0xe6b4, 0xe5f4, 0xe878, 0xe5f4, 0xe878, 0xe84b, 0xea8c, 0xe84b, 0xea8c, 0xe84b, +0xea8c, 0xe8e0, 0xeae5, 0xe8e0, 0xeae5, 0xeaf8, 0xecc7, 0xeaf8, 0xecc7, 0xecb0, 0xee52, +0xecb0, 0xee52, 0xeead, 0xf029, 0xeead, 0xf029, 0xf009, 0xf168, 0xf009, 0xf168, 0xf233, +0xf37d, 0xf233, 0xf37d, 0xf233, 0xf37d, 0xf467, 0xf5a3, 0xf467, 0xf5a3, 0xf5c1, 0xf6f6, +0xf5c1, 0xf6f6, 0xf6e0, 0xf812, 0xf6e0, 0xf812, 0xf78e, 0xf8c2, 0xf78e, 0xf8c2, 0xf9bc, +0xfaf3, 0xf9bc, 0xfaf3, 0xf9bc, 0xfaf3, 0xf978, 0xfab3, 0xf978, 0xfab3, 0xf84b, 0xf988, +0xf84b, 0xf988, 0xf8f3, 0xfa30, 0xf8f3, 0xfa30, 0xfa47, 0xfb7d, 0xfa47, 0xfb7d, 0xfadd, +0xfc07, 0xfadd, 0xfc07, 0xfcf5, 0xfe0b, 0xfcf5, 0xfe0b, 0xfcf5, 0xfe0b, 0xfd49, 0xfe44, +0xfd49, 0xfe44, 0xfe8b, 0xff60, 0xfe8b, 0xff60, 0xff3e, 0xffe5, 0xff3e, 0xffe5, 0x1c, +0x8b, 0x1c, 0x8b, 0x17f, 0x1ae, 0x17f, 0x1ae, 0x2ed, 0x2d5, 0x2ed, 0x2d5, +0x2ed, 0x2d5, 0x46d, 0x406, 0x46d, 0x406, 0x582, 0x4c8, 0x582, 0x4c8, 0x8eb, +0x7d9, 0x8eb, 0x7d9, 0xaee, 0x984, 0xaee, 0x984, 0xd35, 0xb72, 0xd35, 0xb72, +0xd35, 0xb72, 0x1007, 0xdef, 0x1007, 0xdef, 0x12f1, 0x1088, 0x12f1, 0x1088, 0x1422, +0x116e, 0x1422, 0x116e, 0x14dd, 0x11e7, 0x14dd, 0x11e7, 0x1506, 0x11d8, 0x1506, 0x11d8, +0x15a5, 0x1249, 0x15a5, 0x1249, 0x15a5, 0x1249, 0x15b9, 0x123d, 0x15b9, 0x123d, 0x164a, +0x12b9, 0x164a, 0x12b9, 0x1733, 0x139b, 0x1733, 0x139b, 0x16a8, 0x1316, 0x16a8, 0x1316, +0x15fa, 0x127a, 0x15fa, 0x127a, 0x150b, 0x11a8, 0x150b, 0x11a8, 0x150b, 0x11a8, 0x13c1, +0x1086, 0x13c1, 0x1086, 0x1236, 0xf2c, 0x1236, 0xf2c, 0x1123, 0xe51, 0x1123, 0xe51, +0xf30, 0xc9c, 0xf30, 0xc9c, 0xd4c, 0xaf9, 0xd4c, 0xaf9, 0xd4c, 0xaf9, 0xd0f, +0xaff, 0xd0f, 0xaff, 0xd43, 0xb76, 0xd43, 0xb76, 0xad7, 0x94b, 0xad7, 0x94b, +0xa09, 0x8bc, 0xa09, 0x8bc, 0x849, 0x733, 0x849, 0x733, 0x608, 0x524, 0x608, +0x524, 0x608, 0x524, 0x4b1, 0x3f8, 0x4b1, 0x3f8, 0x2d5, 0x23f, 0x2d5, 0x23f, +0xe2, 0x65, 0xe2, 0x65, 0x53, 0xffe8, 0x53, 0xffe8, 0xffbc, 0xff5a, 0xffbc, +0xff5a, 0xffbc, 0xff5a, 0xfe8a, 0xfe2a, 0xfe8a, 0xfe2a, 0xfda7, 0xfd41, 0xfda7, 0xfd41, +0xfc8b, 0xfc1a, 0xfc8b, 0xfc1a, 0xfce0, 0xfc5e, 0xfce0, 0xfc5e, 0xfbe0, 0xfb48, 0xfbe0, +0xfb48, 0xfbc4, 0xfb14, 0xfbc4, 0xfb14, 0xfbc4, 0xfb14, 0xfb0b, 0xfa43, 0xfb0b, 0xfa43, +0xfa72, 0xf990, 0xfa72, 0xf990, 0xf9fe, 0xf904, 0xf9fe, 0xf904, 0xfa73, 0xf963, 0xfa73, +0xf963, 0xfb65, 0xfa41, 0xfb65, 0xfa41, 0xfb57, 0xfa22, 0xfb57, 0xfa22, 0xfb57, 0xfa22, +0xfaca, 0xf989, 0xfaca, 0xf989, 0xfb9d, 0xfa55, 0xfb9d, 0xfa55, 0xfb84, 0xfa38, 0xfb84, +0xfa38, 0xfbba, 0xfa70, 0xfbba, 0xfa70, 0xfd79, 0xfc34, 0xfd79, 0xfc34, 0xfd79, 0xfc34, +0xfd4f, 0xfc14, 0xfd4f, 0xfc14, 0xfe18, 0xfce9, 0xfe18, 0xfce9, 0xfeac, 0xfd8c, 0xfeac, +0xfd8c, 0xff96, 0xfe87, 0xff96, 0xfe87, 0xfeb3, 0xfdb7, 0xfeb3, 0xfdb7, 0xfe79, 0xfd8f, +0xfe79, 0xfd8f, 0xfe79, 0xfd8f, 0xfdcd, 0xfcf7, 0xfdcd, 0xfcf7, 0xfdf0, 0xfd2d, 0xfdf0, +0xfd2d, 0xff05, 0xfe54, 0xff05, 0xfe54, 0xff4e, 0xfeae, 0xff4e, 0xfeae, 0xffd8, 0xff46, +0xffd8, 0xff46, 0x5f, 0xffda, 0x5f, 0xffda, 0x5f, 0xffda, 0xa4, 0x2b, 0xa4, +0x2b, 0xc5, 0x56, 0xc5, 0x56, 0x116, 0xb0, 0x116, 0xb0, 0xcf, 0x70, +0xcf, 0x70, 0x18c, 0x134, 0x18c, 0x134, 0x18c, 0x134, 0x1b3, 0x163, 0x1b3, +0x163, 0x320, 0x2d6, 0x320, 0x2d6, 0x3ac, 0x36b, 0x3ac, 0x36b, 0x36d, 0x335, +0x36d, 0x335, 0x4a4, 0x478, 0x4a4, 0x478, 0x6ad, 0x68d, 0x6ad, 0x68d, 0x6ad, +0x68d, 0x741, 0x731, 0x741, 0x731, 0x7e0, 0x7e0, 0x7e0, 0x7e0, 0x884, 0x898, +0x884, 0x898, 0x7d5, 0x7ff, 0x7d5, 0x7ff, 0x618, 0x65a, 0x618, 0x65a, 0x67e, +0x6da, 0x67e, 0x6da, 0x67e, 0x6da, 0x74b, 0x7c2, 0x74b, 0x7c2, 0x55f, 0x5f1, +0x55f, 0x5f1, 0x499, 0x547, 0x499, 0x547, 0x357, 0x420, 0x357, 0x420, 0x247, +0x329, 0x247, 0x329, 0x247, 0x329, 0x16e, 0x268, 0x16e, 0x268, 0xff81, 0x91, +0xff81, 0x91, 0xfd32, 0xfe55, 0xfd32, 0xfe55, 0xfcf2, 0xfe24, 0xfcf2, 0xfe24, 0xfc29, +0xfd66, 0xfc29, 0xfd66, 0xfb36, 0xfc79, 0xfb36, 0xfc79, 0xfb36, 0xfc79, 0xfaae, 0xfbf2, +0xfaae, 0xfbf2, 0xfaf0, 0xfc31, 0xfaf0, 0xfc31, 0xfa91, 0xfbca, 0xfa91, 0xfbca, 0xfa80, +0xfbab, 0xfa80, 0xfbab, 0xfbfa, 0xfd13, 0xfbfa, 0xfd13, 0xfc1b, 0xfd1d, 0xfc1b, 0xfd1d, +0xfc1b, 0xfd1d, 0xfb82, 0xfc69, 0xfb82, 0xfc69, 0xfaf2, 0xfbba, 0xfaf2, 0xfbba, 0xfb45, +0xfbeb, 0xfb45, 0xfbeb, 0xfb2d, 0xfbac, 0xfb2d, 0xfbac, 0xfb39, 0xfb91, 0xfb39, 0xfb91, +0xfb39, 0xfb91, 0xfc00, 0xfc2f, 0xfc00, 0xfc2f, 0xfdf8, 0xfdfb, 0xfdf8, 0xfdfb, 0xfdc8, +0xfda0, 0xfdc8, 0xfda0, 0xffa5, 0xff50, 0xffa5, 0xff50, 0x1d4, 0x154, 0x1d4, 0x154, +0x2b0, 0x205, 0x2b0, 0x205, 0x2b0, 0x205, 0x413, 0x33e, 0x413, 0x33e, 0x57e, +0x481, 0x57e, 0x481, 0x6c6, 0x5a3, 0x6c6, 0x5a3, 0x7f4, 0x6ac, 0x7f4, 0x6ac, +0xad9, 0x96f, 0xad9, 0x96f, 0xc0d, 0xa83, 0xc0d, 0xa83, 0xc0d, 0xa83, 0xd96, +0xbee, 0xd96, 0xbee, 0xf78, 0xdb5, 0xf78, 0xdb5, 0x1047, 0xe6d, 0x1047, 0xe6d, +0x1037, 0xe46, 0x1037, 0xe46, 0x1141, 0xf3d, 0x1141, 0xf3d, 0x1141, 0xf3d, 0x120d, +0xff7, 0x120d, 0xff7, 0x1286, 0x1062, 0x1286, 0x1062, 0x1237, 0x1006, 0x1237, 0x1006, +0x1270, 0x1034, 0x1270, 0x1034, 0x12bd, 0x1077, 0x12bd, 0x1077, 0x1221, 0xfd3, 0x1221, +0xfd3, 0x1221, 0xfd3, 0x12e5, 0x1090, 0x12e5, 0x1090, 0x1352, 0x10f7, 0x1352, 0x10f7, +0x12be, 0x105e, 0x12be, 0x105e, 0x129c, 0x1038, 0x129c, 0x1038, 0x1366, 0x10fe, 0x1366, +0x10fe, 0x1328, 0x10bd, 0x1328, 0x10bd, 0x1328, 0x10bd, 0x1340, 0x10d3, 0x1340, 0x10d3, +0x13ca, 0x115b, 0x13ca, 0x115b, 0x13fc, 0x118b, 0x13fc, 0x118b, 0x1300, 0x108e, 0x1300, +0x108e, 0x13af, 0x113d, 0x13af, 0x113d, 0x13af, 0x113d, 0x1325, 0x10b3, 0x1325, 0x10b3, +0x122e, 0xfbd, 0x122e, 0xfbd, 0x138a, 0x111c, 0x138a, 0x111c, 0x1473, 0x120a, 0x1473, +0x120a, 0x15cb, 0x1368, 0x15cb, 0x1368, 0x1788, 0x152e, 0x1788, 0x152e, 0x1788, 0x152e, +0x17b3, 0x1566, 0x17b3, 0x1566, 0x1744, 0x1505, 0x1744, 0x1505, 0x17a6, 0x157a, 0x17a6, +0x157a, 0x1749, 0x1534, 0x1749, 0x1534, 0x1632, 0x1439, 0x1632, 0x1439, 0x1526, 0x134c, +0x1526, 0x134c, 0x1526, 0x134c, 0x149f, 0x12ea, 0x149f, 0x12ea, 0x1269, 0x10dd, 0x1269, +0x10dd, 0x10c6, 0xf69, 0x10c6, 0xf69, 0xf35, 0xe0a, 0xf35, 0xe0a, 0xd39, 0xc46, +0xd39, 0xc46, 0xd39, 0xc46, 0xb16, 0xa5d, 0xb16, 0xa5d, 0x934, 0x8ba, 0x934, +0x8ba, 0x71c, 0x6e3, 0x71c, 0x6e3, 0x4bf, 0x4c9, 0x4bf, 0x4c9, 0x220, 0x26f, +0x220, 0x26f, 0xffdc, 0x6f, 0xffdc, 0x6f, 0xffdc, 0x6f, 0xfde6, 0xfebe, 0xfde6, +0xfebe, 0xfb1c, 0xfc36, 0xfb1c, 0xfc36, 0xfa6f, 0xfbc9, 0xfa6f, 0xfbc9, 0xf896, 0xfa2b, +0xf896, 0xfa2b, 0xf6f9, 0xf8c5, 0xf6f9, 0xf8c5, 0xf649, 0xf846, 0xf649, 0xf846, 0xf649, +0xf846, 0xf4ee, 0xf716, 0xf4ee, 0xf716, 0xf1b6, 0xf402, 0xf1b6, 0xf402, 0xefc2, 0xf22a, +0xefc2, 0xf22a, 0xefac, 0xf229, 0xefac, 0xf229, 0xee92, 0xf11b, 0xee92, 0xf11b, 0xee92, +0xf11b, 0xee47, 0xf0d5, 0xee47, 0xf0d5, 0xeebc, 0xf146, 0xeebc, 0xf146, 0xedea, 0xf06a, +0xedea, 0xf06a, 0xed1c, 0xef8b, 0xed1c, 0xef8b, 0xed8d, 0xefe5, 0xed8d, 0xefe5, 0xed46, +0xef81, 0xed46, 0xef81, 0xed46, 0xef81, 0xed64, 0xef7e, 0xed64, 0xef7e, 0xede4, 0xefda, +0xede4, 0xefda, 0xef4f, 0xf11d, 0xef4f, 0xf11d, 0xf04f, 0xf1f4, 0xf04f, 0xf1f4, 0xf21d, +0xf39a, 0xf21d, 0xf39a, 0xf21d, 0xf39a, 0xf4f1, 0xf646, 0xf4f1, 0xf646, 0xf73b, 0xf868, +0xf73b, 0xf868, 0xf8e1, 0xf9e9, 0xf8e1, 0xf9e9, 0xfb8f, 0xfc75, 0xfb8f, 0xfc75, 0xfe52, +0xff19, 0xfe52, 0xff19, 0xff0c, 0xffb6, 0xff0c, 0xffb6, 0xff0c, 0xffb6, 0xff6d, 0xffff, +0xff6d, 0xffff, 0x83, 0x100, 0x83, 0x100, 0xa2, 0x10f, 0xa2, 0x10f, 0xe9, +0x147, 0xe9, 0x147, 0x358, 0x3ac, 0x358, 0x3ac, 0x361, 0x3ac, 0x361, 0x3ac, +0x361, 0x3ac, 0x3a3, 0x3e8, 0x3a3, 0x3e8, 0x520, 0x561, 0x520, 0x561, 0x602, +0x63f, 0x602, 0x63f, 0x71d, 0x757, 0x71d, 0x757, 0x6d9, 0x710, 0x6d9, 0x710, +0x6d9, 0x710, 0x5f3, 0x627, 0x5f3, 0x627, 0x6bf, 0x6f1, 0x6bf, 0x6f1, 0x7cd, +0x7fc, 0x7cd, 0x7fc, 0x832, 0x85d, 0x832, 0x85d, 0x79b, 0x7c2, 0x79b, 0x7c2, +0x7de, 0x801, 0x7de, 0x801, 0x7de, 0x801, 0x7d8, 0x7f7, 0x7d8, 0x7f7, 0x658, +0x675, 0x658, 0x675, 0x6c8, 0x6e3, 0x6c8, 0x6e3, 0x74c, 0x768, 0x74c, 0x768, +0x6bc, 0x6db, 0x6bc, 0x6db, 0x5e8, 0x60d, 0x5e8, 0x60d, 0x5e8, 0x60d, 0x579, +0x5a7, 0x579, 0x5a7, 0x46f, 0x4ab, 0x46f, 0x4ab, 0x32d, 0x37b, 0x32d, 0x37b, +0x8a, 0xef, 0x8a, 0xef, 0xfe71, 0xfef1, 0xfe71, 0xfef1, 0xfe71, 0xfef1, 0xfc53, +0xfcf4, 0xfc53, 0xfcf4, 0xf968, 0xfa2f, 0xf968, 0xfa2f, 0xf6fc, 0xf7ed, 0xf6fc, 0xf7ed, +0xf3df, 0xf4ff, 0xf3df, 0xf4ff, 0xf159, 0xf2ab, 0xf159, 0xf2ab, 0xef9b, 0xf122, 0xef9b, +0xf122, 0xef9b, 0xf122, 0xedfb, 0xefb9, 0xedfb, 0xefb9, 0xeb6c, 0xed64, 0xeb6c, 0xed64, +0xe970, 0xeba1, 0xe970, 0xeba1, 0xe632, 0xe89d, 0xe632, 0xe89d, 0xe2a6, 0xe548, 0xe2a6, +0xe548, 0xe171, 0xe448, 0xe171, 0xe448, 0xe171, 0xe448, 0xe0de, 0xe3e8, 0xe0de, 0xe3e8, +0xdf43, 0xe27b, 0xdf43, 0xe27b, 0xdeb9, 0xe21b, 0xdeb9, 0xe21b, 0xde80, 0xe205, 0xde80, +0xe205, 0xdd81, 0xe126, 0xdd81, 0xe126, 0xdd81, 0xe126, 0xdc68, 0xe025, 0xdc68, 0xe025, +0xdbb9, 0xdf88, 0xdbb9, 0xdf88, 0xdb99, 0xdf75, 0xdb99, 0xdf75, 0xdb18, 0xdefa, 0xdb18, +0xdefa, 0xdc6d, 0xe04f, 0xdc6d, 0xe04f, 0xdd56, 0xe132, 0xdd56, 0xe132, 0xdd56, 0xe132, +0xddd9, 0xe1ab, 0xddd9, 0xe1ab, 0xdf56, 0xe319, 0xdf56, 0xe319, 0xe0cc, 0xe47b, 0xe0cc, +0xe47b, 0xe210, 0xe5a9, 0xe210, 0xe5a9, 0xe371, 0xe6ef, 0xe371, 0xe6ef, 0xe46e, 0xe7cf, +0xe46e, 0xe7cf, 0xe46e, 0xe7cf, 0xe593, 0xe8d4, 0xe593, 0xe8d4, 0xe61f, 0xe940, 0xe61f, +0xe940, 0xe808, 0xeb05, 0xe808, 0xeb05, 0xeb53, 0xee2c, 0xeb53, 0xee2c, 0xec12, 0xeec6, +0xec12, 0xeec6, 0xec12, 0xeec6, 0xee5a, 0xf0e6, 0xee5a, 0xf0e6, 0xf19f, 0xf402, 0xf19f, +0xf402, 0xf3ab, 0xf5e4, 0xf3ab, 0xf5e4, 0xf6b3, 0xf8c0, 0xf6b3, 0xf8c0, 0xf837, 0xfa17, +0xf837, 0xfa17, 0xf7b7, 0xf967, 0xf7b7, 0xf967, 0xf7b7, 0xf967, 0xf85a, 0xf9d6, 0xf85a, +0xf9d6, 0xfa06, 0xfb4d, 0xfa06, 0xfb4d, 0xfbff, 0xfd0c, 0xfbff, 0xfd0c, 0xfd24, 0xfdf6, +0xfd24, 0xfdf6, 0xfea1, 0xff33, 0xfea1, 0xff33, 0xff95, 0xffe5, 0xff95, 0xffe5, 0xff95, +0xffe5, 0x66, 0x71, 0x66, 0x71, 0x1d9, 0x19c, 0x1d9, 0x19c, 0x28d, 0x204, +0x28d, 0x204, 0x372, 0x29e, 0x372, 0x29e, 0x4b8, 0x397, 0x4b8, 0x397, 0x4b8, +0x397, 0x58a, 0x41a, 0x58a, 0x41a, 0x5fc, 0x43f, 0x5fc, 0x43f, 0x775, 0x56c, +0x775, 0x56c, 0x903, 0x6b1, 0x903, 0x6b1, 0xaa5, 0x80c, 0xaa5, 0x80c, 0xc18, +0x93d, 0xc18, 0x93d, 0xc18, 0x93d, 0xed5, 0xbbd, 0xed5, 0xbbd, 0x11e6, 0xe96, +0x11e6, 0xe96, 0x13a1, 0x1022, 0x13a1, 0x1022, 0x1498, 0x10f0, 0x1498, 0x10f0, 0x15d3, +0x120b, 0x15d3, 0x120b, 0x1735, 0x1357, 0x1735, 0x1357, 0x1735, 0x1357, 0x1793, 0x13a7, +0x1793, 0x13a7, 0x17db, 0x13ea, 0x17db, 0x13ea, 0x17a6, 0x13ba, 0x17a6, 0x13ba, 0x16fe, +0x1320, 0x16fe, 0x1320, 0x16b8, 0x12f1, 0x16b8, 0x12f1, 0x16b8, 0x12f1, 0x15b6, 0x120e, +0x15b6, 0x120e, 0x13fd, 0x107c, 0x13fd, 0x107c, 0x12f0, 0xf9c, 0x12f0, 0xf9c, 0x10dc, +0xdbc, 0x10dc, 0xdbc, 0xf81, 0xc9a, 0xf81, 0xc9a, 0xe4a, 0xba1, 0xe4a, 0xba1, +0xe4a, 0xba1, 0xca8, 0xa3f, 0xca8, 0xa3f, 0xa7e, 0x857, 0xa7e, 0x857, 0x81d, +0x639, 0x81d, 0x639, 0x68f, 0x4ee, 0x68f, 0x4ee, 0x3c4, 0x264, 0x3c4, 0x264, +0x14a, 0x2a, 0x14a, 0x2a, 0x14a, 0x2a, 0x32, 0xff4e, 0x32, 0xff4e, 0xfeaf, +0xfe05, 0xfeaf, 0xfe05, 0xfc62, 0xfbec, 0xfc62, 0xfbec, 0xfb02, 0xfabc, 0xfb02, 0xfabc, +0xf9da, 0xf9bf, 0xf9da, 0xf9bf, 0xf9da, 0xf9bf, 0xf8ac, 0xf8b7, 0xf8ac, 0xf8b7, 0xf718, +0xf743, 0xf718, 0xf743, 0xf6d2, 0xf718, 0xf6d2, 0xf718, 0xf710, 0xf76d, 0xf710, 0xf76d, +0xf68e, 0xf6fb, 0xf68e, 0xf6fb, 0xf6d7, 0xf751, 0xf6d7, 0xf751, 0xf6d7, 0xf751, 0xf620, +0xf6a2, 0xf620, 0xf6a2, 0xf625, 0xf6ad, 0xf625, 0xf6ad, 0xf850, 0xf8db, 0xf850, 0xf8db, +0xf8e3, 0xf96d, 0xf8e3, 0xf96d, 0xf8f0, 0xf978, 0xf8f0, 0xf978, 0xfa77, 0xfafb, 0xfa77, +0xfafb, 0xfa77, 0xfafb, 0xfbe6, 0xfc67, 0xfbe6, 0xfc67, 0xfbc5, 0xfc40, 0xfbc5, 0xfc40, +0xfb32, 0xfba8, 0xfb32, 0xfba8, 0xfd10, 0xfd82, 0xfd10, 0xfd82, 0xfe1e, 0xfe8b, 0xfe1e, +0xfe8b, 0xfe1e, 0xfe8b, 0xfefb, 0xff64, 0xfefb, 0xff64, 0xe7, 0x14d, 0xe7, 0x14d, +0x1ac, 0x20f, 0x1ac, 0x20f, 0x168, 0x1c9, 0x168, 0x1c9, 0x108, 0x167, 0x108, +0x167, 0x102, 0x15e, 0x102, 0x15e, 0x102, 0x15e, 0x13b, 0x196, 0x13b, 0x196, +0xb8, 0x110, 0xb8, 0x110, 0xb1, 0x106, 0xb1, 0x106, 0x1d1, 0x223, 0x1d1, +0x223, 0x1d8, 0x224, 0x1d8, 0x224, 0x1d8, 0x224, 0x23b, 0x281, 0x23b, 0x281, +0x322, 0x361, 0x322, 0x361, 0x3a9, 0x3e0, 0x3a9, 0x3e0, 0x33a, 0x367, 0x33a, +0x367, 0x2d1, 0x2f3, 0x2d1, 0x2f3, 0x2d9, 0x2f1, 0x2d9, 0x2f1, 0x2d9, 0x2f1, +0x2f7, 0x303, 0x2f7, 0x303, 0x2c9, 0x2ca, 0x2c9, 0x2ca, 0x26e, 0x263, 0x26e, +0x263, 0x2cd, 0x2b8, 0x2cd, 0x2b8, 0x3e4, 0x3c6, 0x3e4, 0x3c6, 0x545, 0x520, +0x545, 0x520, 0x545, 0x520, 0x713, 0x6ea, 0x713, 0x6ea, 0x813, 0x7e8, 0x813, +0x7e8, 0x7f5, 0x7cd, 0x7f5, 0x7cd, 0x7e5, 0x7c3, 0x7e5, 0x7c3, 0x6ba, 0x6a2, +0x6ba, 0x6a2, 0x6ba, 0x6a2, 0x5f1, 0x5e7, 0x5f1, 0x5e7, 0x4a4, 0x4ad, 0x4a4, +0x4ad, 0x37e, 0x39e, 0x37e, 0x39e, 0x325, 0x360, 0x325, 0x360, 0x1d8, 0x230, +0x1d8, 0x230, 0x6f, 0xea, 0x6f, 0xea, 0x6f, 0xea, 0xfef6, 0xff95, 0xfef6, +0xff95, 0xfd4e, 0xfe13, 0xfd4e, 0xfe13, 0xfc24, 0xfd11, 0xfc24, 0xfd11, 0xfae8, 0xfbfb, +0xfae8, 0xfbfb, 0xf94f, 0xfa89, 0xf94f, 0xfa89, 0xf797, 0xf8f5, 0xf797, 0xf8f5, 0xf797, +0xf8f5, 0xf5fe, 0xf77e, 0xf5fe, 0xf77e, 0xf5c4, 0xf761, 0xf5c4, 0xf761, 0xf595, 0xf74b, +0xf595, 0xf74b, 0xf5f6, 0xf7c0, 0xf5f6, 0xf7c0, 0xf788, 0xf95f, 0xf788, 0xf95f, 0xf788, +0xf95f, 0xf779, 0xf955, 0xf779, 0xf955, 0xf790, 0xf96a, 0xf790, 0xf96a, 0xf866, 0xfa35, +0xf866, 0xfa35, 0xf7db, 0xf999, 0xf7db, 0xf999, 0xf8f3, 0xfa97, 0xf8f3, 0xfa97, 0xfa5e, +0xfbdf, 0xfa5e, 0xfbdf, 0xfa5e, 0xfbdf, 0xfba6, 0xfcfe, 0xfba6, 0xfcfe, 0xfd23, 0xfe4a, +0xfd23, 0xfe4a, 0xfe4e, 0xff3f, 0xfe4e, 0xff3f, 0x81, 0x135, 0x81, 0x135, 0x1bc, +0x22e, 0x1bc, 0x22e, 0x350, 0x37e, 0x350, 0x37e, 0x350, 0x37e, 0x5ca, 0x5b0, +0x5ca, 0x5b0, 0x6fb, 0x697, 0x6fb, 0x697, 0x8aa, 0x7fb, 0x8aa, 0x7fb, 0xb7d, +0xa84, 0xb7d, 0xa84, 0xd77, 0xc34, 0xd77, 0xc34, 0xd77, 0xc34, 0xf21, 0xd96, +0xf21, 0xd96, 0x1045, 0xe73, 0x1045, 0xe73, 0x1128, 0xf13, 0x1128, 0xf13, 0x11b2, +0xf5d, 0x11b2, 0xf5d, 0x1217, 0xf85, 0x1217, 0xf85, 0x132d, 0x1064, 0x132d, 0x1064, +0x132d, 0x1064, 0x1474, 0x1177, 0x1474, 0x1177, 0x14ce, 0x11a0, 0x14ce, 0x11a0, 0x14e2, +0x1189, 0x14e2, 0x1189, 0x15f6, 0x1275, 0x15f6, 0x1275, 0x1631, 0x128c, 0x1631, 0x128c, +0x163f, 0x127b, 0x163f, 0x127b, 0x163f, 0x127b, 0x16e7, 0x1308, 0x16e7, 0x1308, 0x16de, +0x12e7, 0x16de, 0x12e7, 0x16a0, 0x1294, 0x16a0, 0x1294, 0x167c, 0x1260, 0x167c, 0x1260, +0x162b, 0x1203, 0x162b, 0x1203, 0x162b, 0x1203, 0x1680, 0x124f, 0x1680, 0x124f, 0x1629, +0x11f2, 0x1629, 0x11f2, 0x1632, 0x11f9, 0x1632, 0x11f9, 0x163d, 0x1207, 0x163d, 0x1207, +0x14e3, 0x10b3, 0x14e3, 0x10b3, 0x1419, 0xff5, 0x1419, 0xff5, 0x1419, 0xff5, 0x127c, +0xe67, 0x127c, 0xe67, 0x11a6, 0xda5, 0x11a6, 0xda5, 0x129a, 0xeb1, 0x129a, 0xeb1, +0x1352, 0xf87, 0x1352, 0xf87, 0x1457, 0x10ae, 0x1457, 0x10ae, 0x15a1, 0x1220, 0x15a1, +0x1220, 0x15a1, 0x1220, 0x16dd, 0x1389, 0x16dd, 0x1389, 0x177a, 0x1457, 0x177a, 0x1457, +0x16c6, 0x13d9, 0x16c6, 0x13d9, 0x15ea, 0x1339, 0x15ea, 0x1339, 0x1521, 0x12af, 0x1521, +0x12af, 0x1521, 0x12af, 0x13aa, 0x117c, 0x13aa, 0x117c, 0x12d4, 0x10ed, 0x12d4, 0x10ed, +0x11d5, 0x1039, 0x11d5, 0x1039, 0x10da, 0xf8c, 0x10da, 0xf8c, 0x108f, 0xf90, 0x108f, +0xf90, 0xea7, 0xdfa, 0xea7, 0xdfa, 0xea7, 0xdfa, 0xda3, 0xd49, 0xda3, 0xd49, +0xcad, 0xca5, 0xcad, 0xca5, 0xa24, 0xa6e, 0xa24, 0xa6e, 0x893, 0x92e, 0x893, +0x92e, 0x697, 0x781, 0x697, 0x781, 0x49f, 0x5d5, 0x49f, 0x5d5, 0x49f, 0x5d5, +0x276, 0x3f5, 0x276, 0x3f5, 0x37, 0x1f9, 0x37, 0x1f9, 0xff9c, 0x19d, 0xff9c, +0x19d, 0xfe4f, 0x89, 0xfe4f, 0x89, 0xfcc5, 0xff31, 0xfcc5, 0xff31, 0xfcc5, 0xff31, +0xfbb1, 0xfe48, 0xfbb1, 0xfe48, 0xf96d, 0xfc27, 0xf96d, 0xfc27, 0xf777, 0xfa4c, 0xf777, +0xfa4c, 0xf61d, 0xf903, 0xf61d, 0xf903, 0xf4fc, 0xf7eb, 0xf4fc, 0xf7eb, 0xf3cd, 0xf6bb, +0xf3cd, 0xf6bb, 0xf3cd, 0xf6bb, 0xf2a4, 0xf589, 0xf2a4, 0xf589, 0xf19f, 0xf472, 0xf19f, +0xf472, 0xf0c0, 0xf379, 0xf0c0, 0xf379, 0xf089, 0xf31e, 0xf089, 0xf31e, 0xefd5, 0xf240, +0xefd5, 0xf240, 0xefe8, 0xf221, 0xefe8, 0xf221, 0xefe8, 0xf221, 0xf02f, 0xf232, 0xf02f, +0xf232, 0xeff5, 0xf1bb, 0xeff5, 0xf1bb, 0xf0f8, 0xf27f, 0xf0f8, 0xf27f, 0xf1cf, 0xf314, +0xf1cf, 0xf314, 0xf2a9, 0xf3ab, 0xf2a9, 0xf3ab, 0xf2a9, 0xf3ab, 0xf44a, 0xf508, 0xf44a, +0xf508, 0xf58a, 0xf606, 0xf58a, 0xf606, 0xf7e2, 0xf81f, 0xf7e2, 0xf81f, 0xfa70, 0xfa72, +0xfa70, 0xfa72, 0xfb41, 0xfb0b, 0xfb41, 0xfb0b, 0xfc14, 0xfbad, 0xfc14, 0xfbad, 0xfc14, +0xfbad, 0xfd23, 0xfc90, 0xfd23, 0xfc90, 0xfe6b, 0xfdb4, 0xfe6b, 0xfdb4, 0xff11, 0xfe3c, +0xff11, 0xfe3c, 0xffd3, 0xfee9, 0xffd3, 0xfee9, 0x11b, 0x24, 0x11b, 0x24, 0xec, +0xffee, 0xec, 0xffee, 0xec, 0xffee, 0x1b6, 0xb9, 0x1b6, 0xb9, 0x2fd, 0x207, +0x2fd, 0x207, 0x324, 0x23c, 0x324, 0x23c, 0x356, 0x280, 0x356, 0x280, 0x37a, +0x2bb, 0x37a, 0x2bb, 0x37a, 0x2bb, 0x38f, 0x2ea, 0x38f, 0x2ea, 0x348, 0x2c0, +0x348, 0x2c0, 0x355, 0x2ec, 0x355, 0x2ec, 0x41a, 0x3cf, 0x41a, 0x3cf, 0x33a, +0x30f, 0x33a, 0x30f, 0x162, 0x156, 0x162, 0x156, 0x162, 0x156, 0x174, 0x187, +0x174, 0x187, 0x137, 0x167, 0x137, 0x167, 0xe7, 0x133, 0xe7, 0x133, 0x11d, +0x183, 0x11d, 0x183, 0xcb, 0x14b, 0xcb, 0x14b, 0xcb, 0x14b, 0x1ef, 0x288, +0x1ef, 0x288, 0x242, 0x2f4, 0x242, 0x2f4, 0x1ac, 0x277, 0x1ac, 0x277, 0x14c, +0x232, 0x14c, 0x232, 0xffe8, 0xeb, 0xffe8, 0xeb, 0xfeec, 0xd, 0xfeec, 0xd, +0xfeec, 0xd, 0xfd26, 0xfe69, 0xfd26, 0xfe69, 0xfb2d, 0xfc95, 0xfb2d, 0xfc95, 0xf9d0, +0xfb61, 0xf9d0, 0xfb61, 0xf6f4, 0xf8b2, 0xf6f4, 0xf8b2, 0xf494, 0xf684, 0xf494, 0xf684, +0xf2bd, 0xf4e2, 0xf2bd, 0xf4e2, 0xf2bd, 0xf4e2, 0xf105, 0xf362, 0xf105, 0xf362, 0xef5c, +0xf1f4, 0xef5c, 0xf1f4, 0xecc4, 0xef98, 0xecc4, 0xef98, 0xea44, 0xed55, 0xea44, 0xed55, +0xe6d9, 0xea27, 0xe6d9, 0xea27, 0xe6d9, 0xea27, 0xe471, 0xe7f9, 0xe471, 0xe7f9, 0xe369, +0xe729, 0xe369, 0xe729, 0xe1cb, 0xe5bd, 0xe1cb, 0xe5bd, 0xe051, 0xe470, 0xe051, 0xe470, +0xdf36, 0xe379, 0xdf36, 0xe379, 0xdefd, 0xe35b, 0xdefd, 0xe35b, 0xdefd, 0xe35b, 0xde1e, +0xe28d, 0xde1e, 0xe28d, 0xdd04, 0xe179, 0xdd04, 0xe179, 0xdd11, 0xe180, 0xdd11, 0xe180, +0xdc77, 0xe0d5, 0xdc77, 0xe0d5, 0xdb9e, 0xdfde, 0xdb9e, 0xdfde, 0xdbe5, 0xdffc, 0xdbe5, +0xdffc, 0xdbe5, 0xdffc, 0xdc94, 0xe076, 0xdc94, 0xe076, 0xddd9, 0xe17e, 0xddd9, 0xe17e, +0xdf43, 0xe2a1, 0xdf43, 0xe2a1, 0xe08b, 0xe39b, 0xe08b, 0xe39b, 0xe1b5, 0xe472, 0xe1b5, +0xe472, 0xe1b5, 0xe472, 0xe288, 0xe4ef, 0xe288, 0xe4ef, 0xe400, 0xe60e, 0xe400, 0xe60e, +0xe4f7, 0xe6ad, 0xe4f7, 0xe6ad, 0xe66e, 0xe7ce, 0xe66e, 0xe7ce, 0xe7a2, 0xe8b0, 0xe7a2, +0xe8b0, 0xe7ee, 0xe8af, 0xe7ee, 0xe8af, 0xe7ee, 0xe8af, 0xeaa1, 0xeb1c, 0xeaa1, 0xeb1c, +0xedac, 0xede9, 0xedac, 0xede9, 0xefe0, 0xefe7, 0xefe0, 0xefe7, 0xf202, 0xf1dc, 0xf202, +0xf1dc, 0xf36d, 0xf323, 0xf36d, 0xf323, 0xf491, 0xf42c, 0xf491, 0xf42c, 0xf491, 0xf42c, +0xf4ef, 0xf476, 0xf4ef, 0xf476, 0xf5e4, 0xf55e, 0xf5e4, 0xf55e, 0xf82d, 0xf7a0, 0xf82d, +0xf7a0, 0xf8a2, 0xf812, 0xf8a2, 0xf812, 0xf96b, 0xf8db, 0xf96b, 0xf8db, 0xf96b, 0xf8db, +0xfb9f, 0xfb11, 0xfb9f, 0xfb11, 0xfc1c, 0xfb8e, 0xfc1c, 0xfb8e, 0xfd74, 0xfce6, 0xfd74, +0xfce6, 0xfe9c, 0xfe09, 0xfe9c, 0xfe09, 0xfec2, 0xfe26, 0xfec2, 0xfe26, 0x77, 0xffcd, +0x77, 0xffcd, 0x77, 0xffcd, 0x153, 0x95, 0x153, 0x95, 0x1f9, 0x120, 0x1f9, +0x120, 0x31d, 0x223, 0x31d, 0x223, 0x432, 0x311, 0x432, 0x311, 0x6d9, 0x58c, +0x6d9, 0x58c, 0x978, 0x7fb, 0x978, 0x7fb, 0x978, 0x7fb, 0xc54, 0xaa4, 0xc54, +0xaa4, 0xf5d, 0xd78, 0xf5d, 0xd78, 0x1161, 0xf47, 0x1161, 0xf47, 0x136b, 0x111e, +0x136b, 0x111e, 0x1557, 0x12da, 0x1557, 0x12da, 0x1557, 0x12da, 0x17d3, 0x152c, 0x17d3, +0x152c, 0x18c5, 0x15fb, 0x18c5, 0x15fb, 0x191b, 0x1635, 0x191b, 0x1635, 0x1a43, 0x1749, +0x1a43, 0x1749, 0x199f, 0x169c, 0x199f, 0x169c, 0x1992, 0x1690, 0x1992, 0x1690, 0x1992, +0x1690, 0x1a07, 0x1711, 0x1a07, 0x1711, 0x18e0, 0x15fe, 0x18e0, 0x15fe, 0x1687, 0x13c3, +0x1687, 0x13c3, 0x148d, 0x11ef, 0x148d, 0x11ef, 0x134a, 0x10d8, 0x134a, 0x10d8, 0x11a2, +0xf63, 0x11a2, 0xf63, 0x11a2, 0xf63, 0x10a9, 0xea0, 0x10a9, 0xea0, 0xf7a, 0xda9, +0xf7a, 0xda9, 0xcf1, 0xb57, 0xcf1, 0xb57, 0xa2d, 0x8c9, 0xa2d, 0x8c9, 0x774, +0x644, 0x774, 0x644, 0x774, 0x644, 0x5a5, 0x4a3, 0x5a5, 0x4a3, 0x4c7, 0x3ee, +0x4c7, 0x3ee, 0x3bc, 0x304, 0x3bc, 0x304, 0x3f9, 0x35b, 0x3f9, 0x35b, 0x419, +0x38d, 0x419, 0x38d, 0x391, 0x310, 0x391, 0x310, 0x391, 0x310, 0x3c6, 0x349, +0x3c6, 0x349, 0x2ec, 0x26d, 0x2ec, 0x26d, 0x293, 0x20d, 0x293, 0x20d, 0x189, +0xf8, 0x189, 0xf8, 0xffb0, 0xff12, 0xffb0, 0xff12, 0x79, 0xffcd, 0x79, 0xffcd, +0x79, 0xffcd, 0x8f, 0xffd8, 0x8f, 0xffd8, 0xff9f, 0xfede, 0xff9f, 0xfede, 0xa8, +0xffe2, 0xa8, 0xffe2, 0x2cf, 0x20a, 0x2cf, 0x20a, 0x45f, 0x3a1, 0x45f, 0x3a1, +0x45f, 0x3a1, 0x3f3, 0x345, 0x3f3, 0x345, 0x3c6, 0x330, 0x3c6, 0x330, 0x366, +0x2f0, 0x366, 0x2f0, 0x45, 0xfff8, 0x45, 0xfff8, 0xff14, 0xfef7, 0xff14, 0xfef7, +0xff75, 0xff8f, 0xff75, 0xff8f, 0xff75, 0xff8f, 0xfee4, 0xff3b, 0xfee4, 0xff3b, 0x9, +0xa0, 0x9, 0xa0, 0x10a, 0x1e3, 0x10a, 0x1e3, 0x166, 0x282, 0x166, 0x282, +0x1c1, 0x31f, 0x1c1, 0x31f, 0xbf, 0x25c, 0xbf, 0x25c, 0xbf, 0x25c, 0xff63, +0x13a, 0xff63, 0x13a, 0xfd24, 0xff2d, 0xfd24, 0xff2d, 0xfac5, 0xfcfa, 0xfac5, 0xfcfa, +0xf9d2, 0xfc29, 0xf9d2, 0xfc29, 0xf925, 0xfb94, 0xf925, 0xfb94, 0xf925, 0xfb94, 0xf86e, +0xfaeb, 0xf86e, 0xfaeb, 0xf77b, 0xf9fb, 0xf77b, 0xf9fb, 0xf7c0, 0xfa3a, 0xf7c0, 0xfa3a, +0xf79f, 0xfa07, 0xf79f, 0xfa07, 0xf6ed, 0xf93c, 0xf6ed, 0xf93c, 0xf84b, 0xfa7a, 0xf84b, +0xfa7a, 0xf84b, 0xfa7a, 0xf84b, 0xfa53, 0xf84b, 0xfa53, 0xf7e9, 0xf9c5, 0xf7e9, 0xf9c5, +0xf7e8, 0xf996, 0xf7e8, 0xf996, 0xf790, 0xf90d, 0xf790, 0xf90d, 0xf8b4, 0xfa02, 0xf8b4, +0xfa02, 0xf9c8, 0xfae6, 0xf9c8, 0xfae6, 0xf9c8, 0xfae6, 0xfad6, 0xfbc9, 0xfad6, 0xfbc9, +0xfbda, 0xfca5, 0xfbda, 0xfca5, 0xfcb2, 0xfd5a, 0xfcb2, 0xfd5a, 0xfdba, 0xfe44, 0xfdba, +0xfe44, 0xfef5, 0xff67, 0xfef5, 0xff67, 0xfef5, 0xff67, 0xffde, 0x3c, 0xffde, 0x3c, +0xff16, 0xff66, 0xff16, 0xff66, 0xfeaa, 0xfef1, 0xfeaa, 0xfef1, 0xff56, 0xff97, 0xff56, +0xff97, 0xfe6c, 0xfea9, 0xfe6c, 0xfea9, 0xfd99, 0xfdd6, 0xfd99, 0xfdd6, 0xfd99, 0xfdd6, +0xfe03, 0xfe40, 0xfe03, 0xfe40, 0xfcf8, 0xfd33, 0xfcf8, 0xfd33, 0xfbca, 0xfc03, 0xfbca, +0xfc03, 0xfbbf, 0xfbf4, 0xfbbf, 0xfbf4, 0xfc62, 0xfc8f, 0xfc62, 0xfc8f, 0xfc62, 0xfc8f, +0xfb96, 0xfbb8, 0xfb96, 0xfbb8, 0xf9b0, 0xf9c3, 0xf9b0, 0xf9c3, 0xfb04, 0xfb04, 0xfb04, +0xfb04, 0xfb6a, 0xfb53, 0xfb6a, 0xfb53, 0xf985, 0xf954, 0xf985, 0xf954, 0xfa50, 0xfa02, +0xfa50, 0xfa02, 0xfa50, 0xfa02, 0xfb32, 0xfac4, 0xfb32, 0xfac4, 0xfacb, 0xfa3d, 0xfacb, +0xfa3d, 0xfb82, 0xfad4, 0xfb82, 0xfad4, 0xfddf, 0xfd11, 0xfddf, 0xfd11, 0xff87, 0xfe9c, +0xff87, 0xfe9c, 0xfe78, 0xfd72, 0xfe78, 0xfd72, 0xfe78, 0xfd72, 0xff41, 0xfe25, 0xff41, +0xfe25, 0x150, 0x22, 0x150, 0x22, 0x156, 0x1a, 0x156, 0x1a, 0x1d9, 0x96, +0x1d9, 0x96, 0x279, 0x133, 0x279, 0x133, 0x279, 0x133, 0x32a, 0x1e6, 0x32a, +0x1e6, 0x351, 0x215, 0x351, 0x215, 0x305, 0x1d5, 0x305, 0x1d5, 0x565, 0x443, +0x565, 0x443, 0x855, 0x744, 0x855, 0x744, 0x9dd, 0x8de, 0x9dd, 0x8de, 0x9dd, +0x8de, 0xb2c, 0xa3f, 0xb2c, 0xa3f, 0xc86, 0xba9, 0xc86, 0xba9, 0xd77, 0xca9, +0xd77, 0xca9, 0xc35, 0xb72, 0xc35, 0xb72, 0xb89, 0xacc, 0xb89, 0xacc, 0xc35, +0xb7a, 0xc35, 0xb7a, 0xc35, 0xb7a, 0xa9b, 0x9dc, 0xa9b, 0x9dc, 0xa39, 0x96f, +0xa39, 0x96f, 0xb0e, 0xa33, 0xb0e, 0xa33, 0xbb0, 0xabf, 0xbb0, 0xabf, 0xcdb, +0xbcf, 0xcdb, 0xbcf, 0xcdb, 0xbcf, 0xddb, 0xcae, 0xddb, 0xcae, 0xfe8, 0xe97, +0xfe8, 0xe97, 0x10b3, 0xf39, 0x10b3, 0xf39, 0x10f4, 0xf50, 0x10f4, 0xf50, 0x1285, +0x10b6, 0x1285, 0x10b6, 0x136b, 0x1170, 0x136b, 0x1170, 0x136b, 0x1170, 0x128b, 0x1066, +0x128b, 0x1066, 0x11f7, 0xfa9, 0x11f7, 0xfa9, 0x1385, 0x1110, 0x1385, 0x1110, 0x1394, +0x10fc, 0x1394, 0x10fc, 0x12b7, 0x1001, 0x12b7, 0x1001, 0x1371, 0x109f, 0x1371, 0x109f, +0x1371, 0x109f, 0x133a, 0x1051, 0x133a, 0x1051, 0x125a, 0xf5d, 0x125a, 0xf5d, 0x12b5, +0xfa9, 0x12b5, 0xfa9, 0x1376, 0x105e, 0x1376, 0x105e, 0x13e1, 0x10c0, 0x13e1, 0x10c0, +0x13e1, 0x10c0, 0x1379, 0x1052, 0x1379, 0x1052, 0x13d2, 0x10a6, 0x13d2, 0x10a6, 0x157d, +0x124e, 0x157d, 0x124e, 0x15eb, 0x12ba, 0x15eb, 0x12ba, 0x1664, 0x1332, 0x1664, 0x1332, +0x1721, 0x13ef, 0x1721, 0x13ef, 0x1721, 0x13ef, 0x1703, 0x13d1, 0x1703, 0x13d1, 0x16d9, +0x13a9, 0x16d9, 0x13a9, 0x15bf, 0x1292, 0x15bf, 0x1292, 0x15de, 0x12b6, 0x15de, 0x12b6, +0x16a1, 0x1381, 0x16a1, 0x1381, 0x1504, 0x11f0, 0x1504, 0x11f0, 0x1504, 0x11f0, 0x14b2, +0x11ae, 0x14b2, 0x11ae, 0x157e, 0x128f, 0x157e, 0x128f, 0x14f9, 0x1225, 0x14f9, 0x1225, +0x13a9, 0x10f9, 0x13a9, 0x10f9, 0x1390, 0x110b, 0x1390, 0x110b, 0x1390, 0x110b, 0x14b9, +0x1267, 0x14b9, 0x1267, 0x121a, 0x1004, 0x121a, 0x1004, 0xfdc, 0xe0b, 0xfdc, 0xe0b, +0x1064, 0xee0, 0x1064, 0xee0, 0xe64, 0xd36, 0xe64, 0xd36, 0xc24, 0xb52, 0xc24, +0xb52, 0xc24, 0xb52, 0xab0, 0xa42, 0xab0, 0xa42, 0x897, 0x890, 0x897, 0x890, +0x56e, 0x5d2, 0x56e, 0x5d2, 0x161, 0x230, 0x161, 0x230, 0xfed9, 0x13, 0xfed9, +0x13, 0xfc13, 0xfdb5, 0xfc13, 0xfdb5, 0xfc13, 0xfdb5, 0xf922, 0xfb27, 0xf922, 0xfb27, +0xf8c6, 0xfb28, 0xf8c6, 0xfb28, 0xf791, 0xfa46, 0xf791, 0xfa46, 0xf5c3, 0xf8c1, 0xf5c3, +0xf8c1, 0xf449, 0xf785, 0xf449, 0xf785, 0xf449, 0xf785, 0xf205, 0xf573, 0xf205, 0xf573, +0xf00c, 0xf39e, 0xf00c, 0xf39e, 0xed2c, 0xf0d4, 0xed2c, 0xf0d4, 0xeb33, 0xeee4, 0xeb33, +0xeee4, 0xeaa0, 0xee4e, 0xeaa0, 0xee4e, 0xeaa2, 0xee40, 0xeaa2, 0xee40, 0xeaa2, 0xee40, +0xead3, 0xee56, 0xead3, 0xee56, 0xeb6e, 0xeecd, 0xeb6e, 0xeecd, 0xede4, 0xf118, 0xede4, +0xf118, 0xef3e, 0xf241, 0xef3e, 0xf241, 0xf02e, 0xf2fb, 0xf02e, 0xf2fb, 0xf16f, 0xf403, +0xf16f, 0xf403, 0xf16f, 0xf403, 0xf23c, 0xf498, 0xf23c, 0xf498, 0xf39b, 0xf5bf, 0xf39b, +0xf5bf, 0xf434, 0xf622, 0xf434, 0xf622, 0xf5aa, 0xf766, 0xf5aa, 0xf766, 0xf7d5, 0xf962, +0xf7d5, 0xf962, 0xf7d5, 0xf962, 0xf84f, 0xf9b1, 0xf84f, 0xf9b1, 0xf98f, 0xfacb, 0xf98f, +0xfacb, 0xfb66, 0xfc80, 0xfb66, 0xfc80, 0xfba6, 0xfca1, 0xfba6, 0xfca1, 0xfbdb, 0xfcba, +0xfbdb, 0xfcba, 0xfc37, 0xfcfa, 0xfc37, 0xfcfa, 0xfc37, 0xfcfa, 0xfc0c, 0xfcb5, 0xfc0c, +0xfcb5, 0xfbf4, 0xfc82, 0xfbf4, 0xfc82, 0xfcdc, 0xfd4d, 0xfcdc, 0xfd4d, 0xfe7c, 0xfecc, +0xfe7c, 0xfecc, 0xfebc, 0xfee8, 0xfebc, 0xfee8, 0xfedf, 0xfee3, 0xfedf, 0xfee3, 0xfedf, +0xfee3, 0xffd9, 0xffaf, 0xffd9, 0xffaf, 0xff85, 0xff29, 0xff85, 0xff29, 0xffb7, 0xff24, +0xffb7, 0xff24, 0xd7, 0x9, 0xd7, 0x9, 0x1fc, 0xf2, 0x1fc, 0xf2, 0x1fc, +0xf2, 0x394, 0x24c, 0x394, 0x24c, 0x4c8, 0x343, 0x4c8, 0x343, 0x75e, 0x5a0, +0x75e, 0x5a0, 0x865, 0x673, 0x865, 0x673, 0x79e, 0x580, 0x79e, 0x580, 0x7c8, +0x589, 0x7c8, 0x589, 0x7c8, 0x589, 0x660, 0x40c, 0x660, 0x40c, 0x58d, 0x333, +0x58d, 0x333, 0x3c3, 0x172, 0x3c3, 0x172, 0x124, 0xfeef, 0x124, 0xfeef, 0x190, +0xff89, 0x190, 0xff89, 0x6, 0xfe40, 0x6, 0xfe40, 0x6, 0xfe40, 0xfc0b, 0xfa99, +0xfc0b, 0xfa99, 0xfa43, 0xf936, 0xfa43, 0xf936, 0xf8fb, 0xf864, 0xf8fb, 0xf864, 0xf530, +0xf51d, 0xf530, 0xf51d, 0xf022, 0xf09f, 0xf022, 0xf09f, 0xf022, 0xf09f, 0xed48, 0xee5e, +0xed48, 0xee5e, 0xea8d, 0xec43, 0xea8d, 0xec43, 0xe5af, 0xe806, 0xe5af, 0xe806, 0xe358, +0xe651, 0xe358, 0xe651, 0xe30b, 0xe69f, 0xe30b, 0xe69f, 0xe22f, 0xe657, 0xe22f, 0xe657, +0xe22f, 0xe657, 0xe06f, 0xe520, 0xe06f, 0xe520, 0xde8a, 0xe3b5, 0xde8a, 0xe3b5, 0xdc9d, +0xe231, 0xdc9d, 0xe231, 0xd8b3, 0xde9d, 0xd8b3, 0xde9d, 0xd66b, 0xdc98, 0xd66b, 0xdc98, +0xd66b, 0xdc98, 0xd4d6, 0xdb2f, 0xd4d6, 0xdb2f, 0xd28e, 0xd8fe, 0xd28e, 0xd8fe, 0xd21b, +0xd88e, 0xd21b, 0xd88e, 0xd23d, 0xd89e, 0xd23d, 0xd89e, 0xd30c, 0xd949, 0xd30c, 0xd949, +0xd379, 0xd982, 0xd379, 0xd982, 0xd379, 0xd982, 0xd443, 0xda09, 0xd443, 0xda09, 0xd6b3, +0xdc2c, 0xd6b3, 0xdc2c, 0xd8fb, 0xde1d, 0xd8fb, 0xde1d, 0xdb35, 0xdff9, 0xdb35, 0xdff9, +0xdd3e, 0xe1a3, 0xdd3e, 0xe1a3, 0xdfa5, 0xe3a8, 0xdfa5, 0xe3a8, 0xdfa5, 0xe3a8, 0xe2b7, +0xe65b, 0xe2b7, 0xe65b, 0xe4f1, 0xe839, 0xe4f1, 0xe839, 0xe75e, 0xea4f, 0xe75e, 0xea4f, +0xe9ed, 0xec8c, 0xe9ed, 0xec8c, 0xebcb, 0xee1f, 0xebcb, 0xee1f, 0xebcb, 0xee1f, 0xed74, +0xef82, 0xed74, 0xef82, 0xeee9, 0xf0b8, 0xeee9, 0xf0b8, 0xf0f9, 0xf28e, 0xf0f9, 0xf28e, +0xf23b, 0xf398, 0xf23b, 0xf398, 0xf2c8, 0xf3f0, 0xf2c8, 0xf3f0, 0xf4ed, 0xf5e0, 0xf4ed, +0xf5e0, 0xf4ed, 0xf5e0, 0xf5f2, 0xf6af, 0xf5f2, 0xf6af, 0xf598, 0xf61d, 0xf598, 0xf61d, +0xf753, 0xf79a, 0xf753, 0xf79a, 0xf83b, 0xf83d, 0xf83b, 0xf83d, 0xf876, 0xf82c, 0xf876, +0xf82c, 0xf9fe, 0xf960, 0xf9fe, 0xf960, 0xf9fe, 0xf960, 0xfc17, 0xfb1f, 0xfc17, 0xfb1f, +0xff28, 0xfdcc, 0xff28, 0xfdcc, 0x51, 0xfe8b, 0x51, 0xfe8b, 0x341, 0x10b, 0x341, +0x10b, 0x869, 0x5bf, 0x869, 0x5bf, 0x869, 0x5bf, 0xb40, 0x821, 0xb40, 0x821, +0xe60, 0xacc, 0xe60, 0xacc, 0x1171, 0xd6c, 0x1171, 0xd6c, 0x14e0, 0x1072, 0x14e0, +0x1072, 0x1920, 0x1452, 0x1920, 0x1452, 0x1c8b, 0x176a, 0x1c8b, 0x176a, 0x1c8b, 0x176a, +0x2032, 0x1acd, 0x2032, 0x1acd, 0x2392, 0x1dfc, 0x2392, 0x1dfc, 0x25a6, 0x1ff3, 0x25a6, +0x1ff3, 0x26ed, 0x2132, 0x26ed, 0x2132, 0x2813, 0x2267, 0x2813, 0x2267, 0x293e, 0x23b8, +0x293e, 0x23b8, 0x293e, 0x23b8, 0x2837, 0x22ee, 0x2837, 0x22ee, 0x268b, 0x2194, 0x268b, +0x2194, 0x24fb, 0x206b, 0x24fb, 0x206b, 0x20bf, 0x1ca7, 0x20bf, 0x1ca7, 0x1d8b, 0x19fb, +0x1d8b, 0x19fb, 0x1d8b, 0x19fb, 0x1b87, 0x188b, 0x1b87, 0x188b, 0x1922, 0x16c3, 0x1922, +0x16c3, 0x1685, 0x14c8, 0x1685, 0x14c8, 0x13bb, 0x12a1, 0x13bb, 0x12a1, 0x118a, 0x1111, +0x118a, 0x1111, 0xc72, 0xc93, 0xc72, 0xc93, 0xc72, 0xc93, 0x65f, 0x712, 0x65f, +0x712, 0x1a0, 0x2d8, 0x1a0, 0x2d8, 0xfcdb, 0xfe89, 0xfcdb, 0xfe89, 0xf898, 0xfaac, +0xf898, 0xfaac, 0xf4cc, 0xf732, 0xf4cc, 0xf732, 0xf251, 0xf4f7, 0xf251, 0xf4f7, 0xf251, +0xf4f7, 0xefc6, 0xf298, 0xefc6, 0xf298, 0xed64, 0xf04f, 0xed64, 0xf04f, 0xecdc, 0xefcf, +0xecdc, 0xefcf, 0xeb6d, 0xee56, 0xeb6d, 0xee56, 0xe9d4, 0xeca4, 0xe9d4, 0xeca4, 0xe9d4, +0xeca4, 0xe8ed, 0xeb97, 0xe8ed, 0xeb97, 0xe804, 0xea7f, 0xe804, 0xea7f, 0xe871, 0xeab4, +0xe871, 0xeab4, 0xe83e, 0xea44, 0xe83e, 0xea44, 0xe8af, 0xea75, 0xe8af, 0xea75, 0xea39, +0xebbd, 0xea39, 0xebbd, 0xea39, 0xebbd, 0xea85, 0xebca, 0xea85, 0xebca, 0xebd8, 0xece1, +0xebd8, 0xece1, 0xedb6, 0xee86, 0xedb6, 0xee86, 0xef0b, 0xefa8, 0xef0b, 0xefa8, 0xf144, +0xf1b5, 0xf144, 0xf1b5, 0xf247, 0xf291, 0xf247, 0xf291, 0xf247, 0xf291, 0xf2f6, 0xf320, +0xf2f6, 0xf320, 0xf559, 0xf566, 0xf559, 0xf566, 0xf65a, 0xf650, 0xf65a, 0xf650, 0xf7dc, +0xf7bf, 0xf7dc, 0xf7bf, 0xf9f0, 0xf9c1, 0xf9f0, 0xf9c1, 0xf9f0, 0xf9c1, 0xfb5d, 0xfb1d, +0xfb5d, 0xfb1d, 0xfd73, 0xfd21, 0xfd73, 0xfd21, 0xfecf, 0xfe6a, 0xfecf, 0xfe6a, 0x13c, +0xc0, 0x13c, 0xc0, 0x383, 0x2ed, 0x383, 0x2ed, 0x580, 0x4cd, 0x580, 0x4cd, +0x580, 0x4cd, 0x808, 0x733, 0x808, 0x733, 0x91a, 0x81e, 0x91a, 0x81e, 0xa35, +0x910, 0xa35, 0x910, 0xb88, 0xa36, 0xb88, 0xa36, 0xcf4, 0xb75, 0xcf4, 0xb75, +0xe41, 0xc93, 0xe41, 0xc93, 0xe41, 0xc93, 0xf2d, 0xd52, 0xf2d, 0xd52, 0x1188, +0xf83, 0x1188, 0xf83, 0x1355, 0x112c, 0x1355, 0x112c, 0x1367, 0x1120, 0x1367, 0x1120, +0x1496, 0x1239, 0x1496, 0x1239, 0x1496, 0x1239, 0x1594, 0x132c, 0x1594, 0x132c, 0x1632, +0x13ca, 0x1632, 0x13ca, 0x169d, 0x1440, 0x169d, 0x1440, 0x16c6, 0x1483, 0x16c6, 0x1483, +0x1777, 0x155b, 0x1777, 0x155b, 0x1582, 0x139a, 0x1582, 0x139a, 0x1582, 0x139a, 0x12a5, +0x10ff, 0x12a5, 0x10ff, 0x1092, 0xf3a, 0x1092, 0xf3a, 0xe6a, 0xd69, 0xe6a, 0xd69, +0xbc3, 0xb24, 0xbc3, 0xb24, 0x927, 0x8f1, 0x927, 0x8f1, 0x805, 0x83e, 0x805, +0x83e, 0x805, 0x83e, 0x528, 0x5d2, 0x528, 0x5d2, 0x1aa, 0x2c7, 0x1aa, 0x2c7, +0xfef9, 0x86, 0xfef9, 0x86, 0xfa67, 0xfc61, 0xfa67, 0xfc61, 0xf578, 0xf7d9, 0xf578, +0xf7d9, 0xf578, 0xf7d9, 0xf12d, 0xf3ed, 0xf12d, 0xf3ed, 0xeea8, 0xf1bc, 0xeea8, 0xf1bc, +0xed9e, 0xf0fc, 0xed9e, 0xf0fc, 0xeb0d, 0xeea8, 0xeb0d, 0xeea8, 0xe917, 0xece1, 0xe917, +0xece1, 0xe793, 0xeb7c, 0xe793, 0xeb7c, 0xe793, 0xeb7c, 0xe637, 0xea32, 0xe637, 0xea32, +0xe702, 0xeb01, 0xe702, 0xeb01, 0xe7b4, 0xeba7, 0xe7b4, 0xeba7, 0xe885, 0xec60, 0xe885, +0xec60, 0xe936, 0xeceb, 0xe936, 0xeceb, 0xea33, 0xedb6, 0xea33, 0xedb6, 0xea33, 0xedb6, +0xeca8, 0xefee, 0xeca8, 0xefee, 0xee0e, 0xf10c, 0xee0e, 0xf10c, 0xef9b, 0xf24a, 0xef9b, +0xf24a, 0xf337, 0xf58e, 0xf337, 0xf58e, 0xf56e, 0xf767, 0xf56e, 0xf767, 0xf56e, 0xf767, +0xf666, 0xf7fb, 0xf666, 0xf7fb, 0xf89e, 0xf9cc, 0xf89e, 0xf9cc, 0xfafb, 0xfbbe, 0xfafb, +0xfbbe, 0xfd31, 0xfd86, 0xfd31, 0xfd86, 0xfef8, 0xfede, 0xfef8, 0xfede, 0x266, 0x1db, +0x266, 0x1db, 0x266, 0x1db, 0x5d5, 0x4d9, 0x5d5, 0x4d9, 0x7b2, 0x647, 0x7b2, +0x647, 0xa74, 0x899, 0xa74, 0x899, 0xc9d, 0xa54, 0xc9d, 0xa54, 0xed4, 0xc1f, +0xed4, 0xc1f, 0xed4, 0xc1f, 0x1057, 0xd39, 0x1057, 0xd39, 0x11eb, 0xe67, 0x11eb, +0xe67, 0x1527, 0x1142, 0x1527, 0x1142, 0x1774, 0x1334, 0x1774, 0x1334, 0x19b4, 0x151d, +0x19b4, 0x151d, 0x1c26, 0x1740, 0x1c26, 0x1740, 0x1c26, 0x1740, 0x1e05, 0x18d7, 0x1e05, +0x18d7, 0x20a1, 0x1b34, 0x20a1, 0x1b34, 0x227c, 0x1cd9, 0x227c, 0x1cd9, 0x2425, 0x1e55, +0x2425, 0x1e55, 0x26be, 0x20cd, 0x26be, 0x20cd, 0x2781, 0x2179, 0x2781, 0x2179, 0x2781, +0x2179, 0x27f8, 0x21e6, 0x27f8, 0x21e6, 0x288c, 0x2279, 0x288c, 0x2279, 0x288e, 0x2289, +0x288e, 0x2289, 0x27f2, 0x2204, 0x27f2, 0x2204, 0x26d6, 0x210b, 0x26d6, 0x210b, 0x26d6, +0x210b, 0x26fa, 0x215e, 0x26fa, 0x215e, 0x2635, 0x20d0, 0x2635, 0x20d0, 0x24b6, 0x1f91, +0x24b6, 0x1f91, 0x232b, 0x1e4f, 0x232b, 0x1e4f, 0x2172, 0x1ce5, 0x2172, 0x1ce5, 0x1f7d, +0x1b45, 0x1f7d, 0x1b45, 0x1f7d, 0x1b45, 0x1d6e, 0x198f, 0x1d6e, 0x198f, 0x1e08, 0x1a86, +0x1e08, 0x1a86, 0x1e40, 0x1b1c, 0x1e40, 0x1b1c, 0x1c10, 0x194c, 0x1c10, 0x194c, 0x1b13, +0x18ae, 0x1b13, 0x18ae, 0x193d, 0x1736, 0x193d, 0x1736, 0x193d, 0x1736, 0x15c4, 0x141a, +0x15c4, 0x141a, 0x130c, 0x11bb, 0x130c, 0x11bb, 0x1088, 0xf90, 0x1088, 0xf90, 0xe34, +0xd91, 0xe34, 0xd91, 0xae2, 0xa90, 0xae2, 0xa90, 0xae2, 0xa90, 0x896, 0x894, +0x896, 0x894, 0x6f6, 0x741, 0x6f6, 0x741, 0x3b1, 0x445, 0x3b1, 0x445, 0x160, +0x23c, 0x160, 0x23c, 0xffb6, 0xd7, 0xffb6, 0xd7, 0xfe9e, 0x1, 0xfe9e, 0x1, +0xfe9e, 0x1, 0xfd90, 0xff34, 0xfd90, 0xff34, 0xfb80, 0xfd62, 0xfb80, 0xfd62, 0xf9c6, +0xfbe4, 0xf9c6, 0xfbe4, 0xf7ce, 0xfa24, 0xf7ce, 0xfa24, 0xf52a, 0xf7b3, 0xf52a, 0xf7b3, +0xf3cc, 0xf686, 0xf3cc, 0xf686, 0xf3cc, 0xf686, 0xf2a6, 0xf58a, 0xf2a6, 0xf58a, 0xf129, +0xf42f, 0xf129, 0xf42f, 0xefce, 0xf2f0, 0xefce, 0xf2f0, 0xeeb6, 0xf1ec, 0xeeb6, 0xf1ec, +0xef13, 0xf253, 0xef13, 0xf253, 0xef13, 0xf253, 0xed6d, 0xf0ac, 0xed6d, 0xf0ac, 0xec94, +0xefc7, 0xec94, 0xefc7, 0xee3a, 0xf155, 0xee3a, 0xf155, 0xee2f, 0xf125, 0xee2f, 0xf125, +0xee6d, 0xf133, 0xee6d, 0xf133, 0xeed7, 0xf160, 0xeed7, 0xf160, 0xeed7, 0xf160, 0xef3e, +0xf17f, 0xef3e, 0xf17f, 0xf03d, 0xf22c, 0xf03d, 0xf22c, 0xf0e8, 0xf27c, 0xf0e8, 0xf27c, +0xf276, 0xf3a8, 0xf276, 0xf3a8, 0xf461, 0xf52d, 0xf461, 0xf52d, 0xf665, 0xf6c7, 0xf665, +0xf6c7, 0xf665, 0xf6c7, 0xfa0f, 0xfa07, 0xfa0f, 0xfa07, 0xfcbe, 0xfc4e, 0xfcbe, 0xfc4e, +0xfe5c, 0xfd8a, 0xfe5c, 0xfd8a, 0x110, 0xffe3, 0x110, 0xffe3, 0x3db, 0x25d, 0x3db, +0x25d, 0x3db, 0x25d, 0x63e, 0x47c, 0x63e, 0x47c, 0x827, 0x62f, 0x827, 0x62f, +0xb06, 0x8e8, 0xb06, 0x8e8, 0xd55, 0xb22, 0xd55, 0xb22, 0xe63, 0xc2c, 0xe63, +0xc2c, 0xf73, 0xd4b, 0xf73, 0xd4b, 0xf73, 0xd4b, 0x10f3, 0xeea, 0x10f3, 0xeea, +0x1337, 0x115e, 0x1337, 0x115e, 0x1425, 0x128b, 0x1425, 0x128b, 0x13da, 0x128b, 0x13da, +0x128b, 0x1266, 0x116e, 0x1266, 0x116e, 0xff9, 0xf5f, 0xff9, 0xf5f, 0xff9, 0xf5f, +0xe05, 0xdd0, 0xe05, 0xdd0, 0xb41, 0xb72, 0xb41, 0xb72, 0x85d, 0x8f5, 0x85d, +0x8f5, 0x704, 0x800, 0x704, 0x800, 0x581, 0x6db, 0x581, 0x6db, 0x581, 0x6db, +0x49e, 0x64e, 0x49e, 0x64e, 0x3cd, 0x5ca, 0x3cd, 0x5ca, 0x152, 0x392, 0x152, +0x392, 0xfe5c, 0xd1, 0xfe5c, 0xd1, 0xfbb0, 0xfe50, 0xfbb0, 0xfe50, 0xfa1e, 0xfcdc, +0xfa1e, 0xfcdc, 0xfa1e, 0xfcdc, 0xf74a, 0xfa1b, 0xf74a, 0xfa1b, 0xf53d, 0xf816, 0xf53d, +0xf816, 0xf525, 0xf7fd, 0xf525, 0xf7fd, 0xf322, 0xf5f3, 0xf322, 0xf5f3, 0xf164, 0xf429, +0xf164, 0xf429, 0xf079, 0xf330, 0xf079, 0xf330, 0xf079, 0xf330, 0xeead, 0xf155, 0xeead, +0xf155, 0xed0c, 0xefa6, 0xed0c, 0xefa6, 0xeb6a, 0xedfb, 0xeb6a, 0xedfb, 0xea18, 0xeca5, +0xea18, 0xeca5, 0xe90e, 0xeb9f, 0xe90e, 0xeb9f, 0xe90e, 0xeb9f, 0xe6b8, 0xe953, 0xe6b8, +0xe953, 0xe540, 0xe7ef, 0xe540, 0xe7ef, 0xe360, 0xe62b, 0xe360, 0xe62b, 0xe16b, 0xe459, +0xe16b, 0xe459, 0xe1d2, 0xe4ea, 0xe1d2, 0xe4ea, 0xe051, 0xe398, 0xe051, 0xe398, 0xe051, +0xe398, 0xde38, 0xe1b2, 0xde38, 0xe1b2, 0xdcc6, 0xe073, 0xdcc6, 0xe073, 0xdb2a, 0xdf09, +0xdb2a, 0xdf09, 0xdaec, 0xdef7, 0xdaec, 0xdef7, 0xda3b, 0xde6c, 0xda3b, 0xde6c, 0xd923, +0xdd72, 0xd923, 0xdd72, 0xd923, 0xdd72, 0xd989, 0xdde9, 0xd989, 0xdde9, 0xda48, 0xdeac, +0xda48, 0xdeac, 0xda05, 0xde5e, 0xda05, 0xde5e, 0xd99a, 0xddd8, 0xd99a, 0xddd8, 0xdae8, +0xdefb, 0xdae8, 0xdefb, 0xdae8, 0xdefb, 0xdd2e, 0xe106, 0xdd2e, 0xe106, 0xde79, 0xe206, +0xde79, 0xe206, 0xe0f7, 0xe42d, 0xe0f7, 0xe42d, 0xe42a, 0xe6fd, 0xe42a, 0xe6fd, 0xe631, +0xe898, 0xe631, 0xe898, 0xe7b0, 0xe9a6, 0xe7b0, 0xe9a6, 0xe7b0, 0xe9a6, 0xe9fa, 0xeb7b, +0xe9fa, 0xeb7b, 0xecbd, 0xedcb, 0xecbd, 0xedcb, 0xee36, 0xeed4, 0xee36, 0xeed4, 0xf085, +0xf0bc, 0xf085, 0xf0bc, 0xf387, 0xf362, 0xf387, 0xf362, 0xf603, 0xf58f, 0xf603, 0xf58f, +0xf603, 0xf58f, 0xf893, 0xf7e2, 0xf893, 0xf7e2, 0xfb4f, 0xfa72, 0xfb4f, 0xfa72, 0xfd1f, +0xfc2a, 0xfd1f, 0xfc2a, 0xfd59, 0xfc60, 0xfd59, 0xfc60, 0xfea7, 0xfdbe, 0xfea7, 0xfdbe, +0xfea7, 0xfdbe, 0x90, 0xffca, 0x90, 0xffca, 0x1d, 0xff8c, 0x1d, 0xff8c, 0xfea0, +0xfe53, 0xfea0, 0xfe53, 0xfd61, 0xfd64, 0xfd61, 0xfd64, 0xfc3d, 0xfc9a, 0xfc3d, 0xfc9a, +0xfc6d, 0xfd29, 0xfc6d, 0xfd29, 0xfc6d, 0xfd29, 0xfca7, 0xfdc5, 0xfca7, 0xfdc5, 0xfd1c, +0xfe9a, 0xfd1c, 0xfe9a, 0xfd35, 0xff0d, 0xfd35, 0xff0d, 0xfc92, 0xfebb, 0xfc92, 0xfebb, +0xfc9c, 0xff0a, 0xfc9c, 0xff0a, 0xfc9c, 0xff0a, 0xfac7, 0xfd6b, 0xfac7, 0xfd6b, 0xf8c1, +0xfb89, 0xf8c1, 0xfb89, 0xf72a, 0xfa03, 0xf72a, 0xfa03, 0xf578, 0xf84f, 0xf578, 0xf84f, +0xf627, 0xf8e8, 0xf627, 0xf8e8, 0xf6a0, 0xf938, 0xf6a0, 0xf938, 0xf6a0, 0xf938, 0xf608, +0xf865, 0xf608, 0xf865, 0xf7d9, 0xf9eb, 0xf7d9, 0xf9eb, 0xfa3a, 0xfbf2, 0xfa3a, 0xfbf2, +0xfba7, 0xfcfb, 0xfba7, 0xfcfb, 0xfde0, 0xfec8, 0xfde0, 0xfec8, 0xc0, 0x137, 0xc0, +0x137, 0xc0, 0x137, 0x3cd, 0x3d3, 0x3cd, 0x3d3, 0x4f3, 0x489, 0x4f3, 0x489, +0x707, 0x633, 0x707, 0x633, 0xa91, 0x95b, 0xa91, 0x95b, 0xb93, 0xa06, 0xb93, +0xa06, 0xb93, 0xa06, 0xcf2, 0xb19, 0xcf2, 0xb19, 0xf17, 0xd00, 0xf17, 0xd00, +0xfa4, 0xd5e, 0xfa4, 0xd5e, 0xf66, 0xcff, 0xf66, 0xcff, 0xf0d, 0xc93, 0xf0d, +0xc93, 0xe67, 0xbe6, 0xe67, 0xbe6, 0xe67, 0xbe6, 0xdb3, 0xb37, 0xdb3, 0xb37, +0xd85, 0xb17, 0xd85, 0xb17, 0xdbd, 0xb64, 0xdbd, 0xb64, 0xd11, 0xad2, 0xd11, +0xad2, 0xc1f, 0x9fb, 0xc1f, 0x9fb, 0xab4, 0x8ab, 0xab4, 0x8ab, 0xab4, 0x8ab, +0x883, 0x693, 0x883, 0x693, 0x771, 0x595, 0x771, 0x595, 0x675, 0x4a5, 0x675, +0x4a5, 0x5c0, 0x3f5, 0x5c0, 0x3f5, 0x5a6, 0x3d6, 0x5a6, 0x3d6, 0x5a6, 0x3d6, +0x5c9, 0x3ec, 0x5c9, 0x3ec, 0x5fb, 0x408, 0x5fb, 0x408, 0x68d, 0x47c, 0x68d, +0x47c, 0x75d, 0x526, 0x75d, 0x526, 0x71a, 0x4b9, 0x71a, 0x4b9, 0x75a, 0x4ca, +0x75a, 0x4ca, 0x75a, 0x4ca, 0x7f4, 0x535, 0x7f4, 0x535, 0x85b, 0x56f, 0x85b, +0x56f, 0x858, 0x541, 0x858, 0x541, 0x86a, 0x530, 0x86a, 0x530, 0x9fd, 0x6a7, +0x9fd, 0x6a7, 0xa91, 0x72a, 0xa91, 0x72a, 0xa91, 0x72a, 0x9de, 0x672, 0x9de, +0x672, 0xa79, 0x715, 0xa79, 0x715, 0xa66, 0x717, 0xa66, 0x717, 0x9cb, 0x6a0, +0x9cb, 0x6a0, 0xa0d, 0x714, 0xa0d, 0x714, 0xa0d, 0x714, 0x91b, 0x65f, 0x91b, +0x65f, 0x807, 0x594, 0x807, 0x594, 0x6b0, 0x48f, 0x6b0, 0x48f, 0x5de, 0x417, +0x5de, 0x417, 0x5ca, 0x460, 0x5ca, 0x460, 0x4ac, 0x3a3, 0x4ac, 0x3a3, 0x4ac, +0x3a3, 0x403, 0x359, 0x403, 0x359, 0x2e3, 0x295, 0x2e3, 0x295, 0x139, 0x141, +0x139, 0x141, 0x71, 0xc7, 0x71, 0xc7, 0xff7c, 0x16, 0xff7c, 0x16, 0xfe65, +0xff37, 0xfe65, 0xff37, 0xfe65, 0xff37, 0xfd7c, 0xfe79, 0xfd7c, 0xfe79, 0xfb13, 0xfc2d, +0xfb13, 0xfc2d, 0xf899, 0xf9c2, 0xf899, 0xf9c2, 0xf710, 0xf83b, 0xf710, 0xf83b, 0xf5f0, +0xf710, 0xf5f0, 0xf710, 0xf5f0, 0xf710, 0xf56a, 0xf674, 0xf56a, 0xf674, 0xf51d, 0xf607, +0xf51d, 0xf607, 0xf6b6, 0xf778, 0xf6b6, 0xf778, 0xf845, 0xf8da, 0xf845, 0xf8da, 0xf8ad, +0xf911, 0xf8ad, 0xf911, 0xf9f9, 0xfa2c, 0xf9f9, 0xfa2c, 0xf9f9, 0xfa2c, 0xfb10, 0xfb12, +0xfb10, 0xfb12, 0xfbbe, 0xfb93, 0xfbbe, 0xfb93, 0xfd55, 0xfd01, 0xfd55, 0xfd01, 0xfea3, +0xfe2e, 0xfea3, 0xfe2e, 0xff18, 0xfe89, 0xff18, 0xfe89, 0x32, 0xff91, 0x32, 0xff91, +0x32, 0xff91, 0x1ca, 0x121, 0x1ca, 0x121, 0x26d, 0x1c6, 0x26d, 0x1c6, 0x23a, +0x19b, 0x23a, 0x19b, 0x373, 0x2e5, 0x373, 0x2e5, 0x3d6, 0x35f, 0x3d6, 0x35f, +0x3d6, 0x35f, 0x29d, 0x242, 0x29d, 0x242, 0x24c, 0x210, 0x24c, 0x210, 0x234, +0x21a, 0x234, 0x21a, 0x176, 0x17c, 0x176, 0x17c, 0xffe9, 0xf, 0xffe9, 0xf, +0xff57, 0xff98, 0xff57, 0xff98, 0xff57, 0xff98, 0xff39, 0xff91, 0xff39, 0xff91, 0xfef5, +0xff5f, 0xfef5, 0xff5f, 0xfe7d, 0xfef1, 0xfe7d, 0xfef1, 0xfdd1, 0xfe48, 0xfdd1, 0xfe48, +0xfdf2, 0xfe65, 0xfdf2, 0xfe65, 0xfd7c, 0xfde3, 0xfd7c, 0xfde3, 0xfd7c, 0xfde3, 0xfd97, +0xfdeb, 0xfd97, 0xfdeb, 0xfe1d, 0xfe59, 0xfe1d, 0xfe59, 0xfdd3, 0xfdf1, 0xfdd3, 0xfdf1, +0xfe6b, 0xfe68, 0xfe6b, 0xfe68, 0xfef7, 0xfed0, 0xfef7, 0xfed0, 0xfef7, 0xfed0, 0xff97, +0xff4b, 0xff97, 0xff4b, 0xb9, 0x49, 0xb9, 0x49, 0x11b, 0x89, 0x11b, 0x89, +0x318, 0x266, 0x318, 0x266, 0x563, 0x496, 0x563, 0x496, 0x671, 0x58e, 0x671, +0x58e, 0x671, 0x58e, 0x802, 0x70e, 0x802, 0x70e, 0x8ab, 0x7ad, 0x8ab, 0x7ad, +0x8c5, 0x7c3, 0x8c5, 0x7c3, 0x8a7, 0x7a6, 0x8a7, 0x7a6, 0x922, 0x829, 0x922, +0x829, 0xa2e, 0x940, 0xa2e, 0x940, 0xa2e, 0x940, 0xa54, 0x975, 0xa54, 0x975, +0xbc2, 0xaf5, 0xbc2, 0xaf5, 0xde2, 0xd28, 0xde2, 0xd28, 0xe0d, 0xd66, 0xe0d, +0xd66, 0xdf2, 0xd5e, 0xdf2, 0xd5e, 0xdf2, 0xd5e, 0xe66, 0xde3, 0xe66, 0xde3, +0xde7, 0xd72, 0xde7, 0xd72, 0xc8c, 0xc20, 0xc8c, 0xc20, 0xae2, 0xa7c, 0xae2, +0xa7c, 0xa3c, 0x9d6, 0xa3c, 0x9d6, 0x955, 0x8ea, 0x955, 0x8ea, 0x955, 0x8ea, +0x841, 0x7cc, 0x841, 0x7cc, 0x940, 0x8bc, 0x940, 0x8bc, 0xa52, 0x9bb, 0xa52, +0x9bb, 0xaac, 0x9fc, 0xaac, 0x9fc, 0xb73, 0xaa9, 0xb73, 0xaa9, 0xc96, 0xbae, +0xc96, 0xbae, 0xc96, 0xbae, 0xd9e, 0xc98, 0xd9e, 0xc98, 0xe2e, 0xd07, 0xe2e, +0xd07, 0xdbb, 0xc74, 0xdbb, 0xc74, 0xd74, 0xc0e, 0xd74, 0xc0e, 0xd9a, 0xc14, +0xd9a, 0xc14, 0xd9a, 0xc14, 0xe3a, 0xc97, 0xe3a, 0xc97, 0xeee, 0xd30, 0xeee, +0xd30, 0xf57, 0xd7e, 0xf57, 0xd7e, 0x1119, 0xf28, 0x1119, 0xf28, 0x1204, 0xffd, +0x1204, 0xffd, 0x1315, 0x10f7, 0x1315, 0x10f7, 0x1315, 0x10f7, 0x1549, 0x1316, 0x1549, +0x1316, 0x1691, 0x1449, 0x1691, 0x1449, 0x1773, 0x1517, 0x1773, 0x1517, 0x1881, 0x1610, +0x1881, 0x1610, 0x1986, 0x1700, 0x1986, 0x1700, 0x1986, 0x1700, 0x196b, 0x16cf, 0x196b, +0x16cf, 0x19f2, 0x173f, 0x19f2, 0x173f, 0x1afc, 0x1832, 0x1afc, 0x1832, 0x1b83, 0x18a1, +0x1b83, 0x18a1, 0x1c08, 0x1910, 0x1c08, 0x1910, 0x1c62, 0x1955, 0x1c62, 0x1955, 0x1c62, +0x1955, 0x1ca6, 0x1987, 0x1ca6, 0x1987, 0x1acf, 0x17a0, 0x1acf, 0x17a0, 0x194c, 0x1613, +0x194c, 0x1613, 0x1a18, 0x16dc, 0x1a18, 0x16dc, 0x18d0, 0x1598, 0x18d0, 0x1598, 0x1645, +0x131a, 0x1645, 0x131a, 0x1645, 0x131a, 0x1483, 0x116f, 0x1483, 0x116f, 0x127f, 0xf8c, +0x127f, 0xf8c, 0x1114, 0xe4e, 0x1114, 0xe4e, 0xf8e, 0xd01, 0xf8e, 0xd01, 0xe5a, +0xc13, 0xe5a, 0xc13, 0xe5a, 0xc13, 0xcb4, 0xabf, 0xcb4, 0xabf, 0x9d3, 0x83b, +0x9d3, 0x83b, 0x811, 0x6e0, 0x811, 0x6e0, 0x5eb, 0x52a, 0x5eb, 0x52a, 0x359, +0x310, 0x359, 0x310, 0x89, 0xbe, 0x89, 0xbe, 0x89, 0xbe, 0xfd08, 0xfdbd, +0xfd08, 0xfdbd, 0xfab2, 0xfbe8, 0xfab2, 0xfbe8, 0xf7c1, 0xf976, 0xf7c1, 0xf976, 0xf4a4, +0xf6d6, 0xf4a4, 0xf6d6, 0xf39c, 0xf642, 0xf39c, 0xf642, 0xf241, 0xf553, 0xf241, 0xf553, +0xf241, 0xf553, 0xf073, 0xf3e7, 0xf073, 0xf3e7, 0xeec9, 0xf291, 0xeec9, 0xf291, 0xecbb, +0xf0c9, 0xecbb, 0xf0c9, 0xeafa, 0xef40, 0xeafa, 0xef40, 0xe881, 0xecee, 0xe881, 0xecee, +0xe881, 0xecee, 0xe6fe, 0xeb83, 0xe6fe, 0xeb83, 0xe6f0, 0xeb7c, 0xe6f0, 0xeb7c, 0xe5bf, +0xea42, 0xe5bf, 0xea42, 0xe4f0, 0xe95e, 0xe4f0, 0xe95e, 0xe5f2, 0xea3e, 0xe5f2, 0xea3e, +0xe6fa, 0xeb17, 0xe6fa, 0xeb17, 0xe6fa, 0xeb17, 0xe840, 0xec25, 0xe840, 0xec25, 0xe9fe, +0xeda5, 0xe9fe, 0xeda5, 0xeb14, 0xee76, 0xeb14, 0xee76, 0xec46, 0xef60, 0xec46, 0xef60, +0xedf3, 0xf0c3, 0xedf3, 0xf0c3, 0xf118, 0xf39f, 0xf118, 0xf39f, 0xf118, 0xf39f, 0xf403, +0xf642, 0xf403, 0xf642, 0xf609, 0xf803, 0xf609, 0xf803, 0xf917, 0xfacf, 0xf917, 0xfacf, +0xfb56, 0xfcd1, 0xfb56, 0xfcd1, 0xfc5e, 0xfda0, 0xfc5e, 0xfda0, 0xfc5e, 0xfda0, 0xfd5c, +0xfe6b, 0xfd5c, 0xfe6b, 0xfebb, 0xff99, 0xfebb, 0xff99, 0xff46, 0xfff8, 0xff46, 0xfff8, +0xffb6, 0x3f, 0xffb6, 0x3f, 0xac, 0x10e, 0xac, 0x10e, 0x192, 0x1cf, 0x192, +0x1cf, 0x192, 0x1cf, 0x28d, 0x2a5, 0x28d, 0x2a5, 0x203, 0x1f4, 0x203, 0x1f4, +0x20d, 0x1d8, 0x20d, 0x1d8, 0x33d, 0x2df, 0x33d, 0x2df, 0x425, 0x39d, 0x425, +0x39d, 0x554, 0x4a0, 0x554, 0x4a0, 0x554, 0x4a0, 0x5e1, 0x4ff, 0x5e1, 0x4ff, +0x72b, 0x61b, 0x72b, 0x61b, 0x8bf, 0x781, 0x8bf, 0x781, 0x8b1, 0x746, 0x8b1, +0x746, 0x9a1, 0x80d, 0x9a1, 0x80d, 0x9a1, 0x80d, 0x9f5, 0x83c, 0x9f5, 0x83c, +0x869, 0x690, 0x869, 0x690, 0x7e2, 0x5f1, 0x7e2, 0x5f1, 0x72a, 0x52b, 0x72a, +0x52b, 0x615, 0x413, 0x615, 0x413, 0x459, 0x260, 0x459, 0x260, 0x459, 0x260, +0x3b2, 0x1cf, 0x3b2, 0x1cf, 0x41e, 0x25f, 0x41e, 0x25f, 0x188, 0xfffb, 0x188, +0xfffb, 0xfee4, 0xfd98, 0xfee4, 0xfd98, 0xfc46, 0xfb49, 0xfc46, 0xfb49, 0xf865, 0xf7c2, +0xf865, 0xf7c2, 0xf865, 0xf7c2, 0xf5b2, 0xf574, 0xf5b2, 0xf574, 0xf2d1, 0xf302, 0xf2d1, +0xf302, 0xef79, 0xf021, 0xef79, 0xf021, 0xec5a, 0xed7e, 0xec5a, 0xed7e, 0xe8d4, 0xea75, +0xe8d4, 0xea75, 0xe8d4, 0xea75, 0xe5b1, 0xe7cf, 0xe5b1, 0xe7cf, 0xe265, 0xe4fd, 0xe265, +0xe4fd, 0xdf44, 0xe251, 0xdf44, 0xe251, 0xddae, 0xe128, 0xddae, 0xe128, 0xdbf0, 0xdfcc, +0xdbf0, 0xdfcc, 0xda32, 0xde64, 0xda32, 0xde64, 0xda32, 0xde64, 0xd991, 0xde0d, 0xd991, +0xde0d, 0xd8a9, 0xdd60, 0xd8a9, 0xdd60, 0xd6ba, 0xdb9c, 0xd6ba, 0xdb9c, 0xd48a, 0xd98a, +0xd48a, 0xd98a, 0xd314, 0xd823, 0xd314, 0xd823, 0xd2fc, 0xd80b, 0xd2fc, 0xd80b, 0xd2fc, +0xd80b, 0xd32c, 0xd830, 0xd32c, 0xd830, 0xd2e3, 0xd7d1, 0xd2e3, 0xd7d1, 0xd3ab, 0xd878, +0xd3ab, 0xd878, 0xd5db, 0xda82, 0xd5db, 0xda82, 0xd840, 0xdcbb, 0xd840, 0xdcbb, 0xd840, +0xdcbb, 0xda27, 0xde73, 0xda27, 0xde73, 0xdcc6, 0xe0e2, 0xdcc6, 0xe0e2, 0xdf9f, 0xe38a, +0xdf9f, 0xe38a, 0xe1b6, 0xe574, 0xe1b6, 0xe574, 0xe3e0, 0xe773, 0xe3e0, 0xe773, 0xe686, +0xe9f3, 0xe686, 0xe9f3, 0xe686, 0xe9f3, 0xe92f, 0xec79, 0xe92f, 0xec79, 0xeae3, 0xee0f, +0xeae3, 0xee0f, 0xed0e, 0xf020, 0xed0e, 0xf020, 0xef6f, 0xf269, 0xef6f, 0xf269, 0xf140, +0xf424, 0xf140, 0xf424, 0xf32c, 0xf5fa, 0xf32c, 0xf5fa, 0xf32c, 0xf5fa, 0xf4e6, 0xf79d, +0xf4e6, 0xf79d, 0xf6c3, 0xf960, 0xf6c3, 0xf960, 0xf89d, 0xfb1a, 0xf89d, 0xfb1a, 0xfa7d, +0xfcd5, 0xfa7d, 0xfcd5, 0xfbaf, 0xfdd9, 0xfbaf, 0xfdd9, 0xfbaf, 0xfdd9, 0xfb46, 0xfd39, +0xfb46, 0xfd39, 0xfb8f, 0xfd3f, 0xfb8f, 0xfd3f, 0xfd4d, 0xfeb1, 0xfd4d, 0xfeb1, 0xfecc, +0xffd8, 0xfecc, 0xffd8, 0xb1, 0x159, 0xb1, 0x159, 0x22e, 0x269, 0x22e, 0x269, +0x22e, 0x269, 0x40d, 0x3d3, 0x40d, 0x3d3, 0x6f4, 0x63c, 0x6f4, 0x63c, 0x9cc, +0x892, 0x9cc, 0x892, 0xdc1, 0xc02, 0xdc1, 0xc02, 0x10e0, 0xe9d, 0x10e0, 0xe9d, +0x13ae, 0x10e9, 0x13ae, 0x10e9, 0x13ae, 0x10e9, 0x162c, 0x12ec, 0x162c, 0x12ec, 0x17f6, +0x1442, 0x17f6, 0x1442, 0x1b4f, 0x1734, 0x1b4f, 0x1734, 0x1ddc, 0x1968, 0x1ddc, 0x1968, +0x1fe2, 0x1b24, 0x1fe2, 0x1b24, 0x1fe2, 0x1b24, 0x22de, 0x1dea, 0x22de, 0x1dea, 0x23ff, +0x1ee7, 0x23ff, 0x1ee7, 0x231b, 0x1df4, 0x231b, 0x1df4, 0x228e, 0x1d6d, 0x228e, 0x1d6d, +0x2266, 0x1d60, 0x2266, 0x1d60, 0x2170, 0x1c98, 0x2170, 0x1c98, 0x2170, 0x1c98, 0x1ea7, +0x1a10, 0x1ea7, 0x1a10, 0x1bf2, 0x17ad, 0x1bf2, 0x17ad, 0x190d, 0x1529, 0x190d, 0x1529, +0x1463, 0x10ed, 0x1463, 0x10ed, 0x1134, 0xe35, 0x1134, 0xe35, 0x1134, 0xe35, 0xf49, +0xcc9, 0xf49, 0xcc9, 0xca2, 0xaa5, 0xca2, 0xaa5, 0x93c, 0x7c3, 0x93c, 0x7c3, +0x5ce, 0x4d8, 0x5ce, 0x4d8, 0x2b1, 0x23a, 0x2b1, 0x23a, 0xfeb0, 0xfeb3, 0xfeb0, +0xfeb3, 0xfeb0, 0xfeb3, 0xfa9b, 0xfb10, 0xfa9b, 0xfb10, 0xf73a, 0xf816, 0xf73a, 0xf816, +0xf3c1, 0xf4fb, 0xf3c1, 0xf4fb, 0xf173, 0xf2fe, 0xf173, 0xf2fe, 0xf044, 0xf214, 0xf044, +0xf214, 0xee89, 0xf093, 0xee89, 0xf093, 0xee89, 0xf093, 0xed87, 0xefbe, 0xed87, 0xefbe, +0xed4c, 0xefa5, 0xed4c, 0xefa5, 0xed7e, 0xefed, 0xed7e, 0xefed, 0xee40, 0xf0bc, 0xee40, +0xf0bc, 0xef2e, 0xf1ae, 0xef2e, 0xf1ae, 0xef2e, 0xf1ae, 0xf062, 0xf2dd, 0xf062, 0xf2dd, +0xf17c, 0xf3eb, 0xf17c, 0xf3eb, 0xf27c, 0xf4d9, 0xf27c, 0xf4d9, 0xf382, 0xf5c6, 0xf382, +0xf5c6, 0xf522, 0xf749, 0xf522, 0xf749, 0xf6b8, 0xf8bd, 0xf6b8, 0xf8bd, 0xf6b8, 0xf8bd, +0xf84f, 0xfa2d, 0xf84f, 0xfa2d, 0xfa9f, 0xfc53, 0xfa9f, 0xfc53, 0xfccd, 0xfe51, 0xfccd, +0xfe51, 0xfea0, 0xfff0, 0xfea0, 0xfff0, 0xff4b, 0x63, 0xff4b, 0x63, 0xff54, 0x30, +0xff54, 0x30, 0xff54, 0x30, 0x9b, 0x135, 0x9b, 0x135, 0x158, 0x1ab, 0x158, +0x1ab, 0x1ab, 0x1b3, 0x1ab, 0x1b3, 0x347, 0x2fe, 0x347, 0x2fe, 0x481, 0x3e3, +0x481, 0x3e3, 0x481, 0x3e3, 0x5b3, 0x4bc, 0x5b3, 0x4bc, 0x682, 0x52f, 0x682, +0x52f, 0x81c, 0x66b, 0x81c, 0x66b, 0xa62, 0x854, 0xa62, 0x854, 0xa75, 0x809, +0xa75, 0x809, 0xb4d, 0x886, 0xb4d, 0x886, 0xb4d, 0x886, 0xcab, 0x98e, 0xcab, +0x98e, 0xd07, 0x99b, 0xd07, 0x99b, 0xdc6, 0xa13, 0xdc6, 0xa13, 0xe2b, 0xa3b, +0xe2b, 0xa3b, 0xedf, 0xabe, 0xedf, 0xabe, 0x105b, 0xc18, 0x105b, 0xc18, 0x105b, +0xc18, 0x1171, 0xd1a, 0x1171, 0xd1a, 0x133c, 0xee2, 0x133c, 0xee2, 0x14cd, 0x1080, +0x14cd, 0x1080, 0x152d, 0x10ff, 0x152d, 0x10ff, 0x1595, 0x1197, 0x1595, 0x1197, 0x1595, +0x1197, 0x1499, 0x10db, 0x1499, 0x10db, 0x1368, 0xffa, 0x1368, 0xffa, 0x11cd, 0xebd, +0x11cd, 0xebd, 0xf9a, 0xcf5, 0xf9a, 0xcf5, 0xe5b, 0xc2c, 0xe5b, 0xc2c, 0xbf2, +0xa41, 0xbf2, 0xa41, 0xbf2, 0xa41, 0x8ca, 0x79c, 0x8ca, 0x79c, 0x653, 0x5ad, +0x653, 0x5ad, 0x41d, 0x3fe, 0x41d, 0x3fe, 0x225, 0x28c, 0x225, 0x28c, 0x76, +0x15e, 0x76, 0x15e, 0xfe1b, 0xff7e, 0xfe1b, 0xff7e, 0xfe1b, 0xff7e, 0xfa78, 0xfc4c, +0xfa78, 0xfc4c, 0xf5ff, 0xf839, 0xf5ff, 0xf839, 0xf2a2, 0xf536, 0xf2a2, 0xf536, 0xef62, +0xf242, 0xef62, 0xf242, 0xeaf6, 0xee14, 0xeaf6, 0xee14, 0xeaf6, 0xee14, 0xe854, 0xeba2, +0xe854, 0xeba2, 0xe6fd, 0xea6a, 0xe6fd, 0xea6a, 0xe56f, 0xe8ef, 0xe56f, 0xe8ef, 0xe46f, +0xe7f2, 0xe46f, 0xe7f2, 0xe4fa, 0xe873, 0xe4fa, 0xe873, 0xe57c, 0xe8df, 0xe57c, 0xe8df, +0xe57c, 0xe8df, 0xe58a, 0xe8cb, 0xe58a, 0xe8cb, 0xe6f7, 0xea0d, 0xe6f7, 0xea0d, 0xe944, +0xec27, 0xe944, 0xec27, 0xebce, 0xee76, 0xebce, 0xee76, 0xed51, 0xefb8, 0xed51, 0xefb8, +0xeee0, 0xf101, 0xeee0, 0xf101, 0xeee0, 0xf101, 0xf13f, 0xf316, 0xf13f, 0xf316, 0xf3be, +0xf549, 0xf3be, 0xf549, 0xf746, 0xf882, 0xf746, 0xf882, 0xfa9c, 0xfb87, 0xfa9c, 0xfb87, +0xfd5b, 0xfdf5, 0xfd5b, 0xfdf5, 0xfd5b, 0xfdf5, 0xe7, 0x12e, 0xe7, 0x12e, 0x3e8, +0x3dc, 0x3e8, 0x3dc, 0x63b, 0x5dc, 0x63b, 0x5dc, 0x845, 0x792, 0x845, 0x792, +0x98d, 0x887, 0x98d, 0x887, 0xb97, 0xa3e, 0xb97, 0xa3e, 0xb97, 0xa3e, 0xd8e, +0xbe3, 0xd8e, 0xbe3, 0xfde, 0xde0, 0xfde, 0xde0, 0x12c1, 0x1072, 0x12c1, 0x1072, +0x14ea, 0x124d, 0x14ea, 0x124d, 0x1798, 0x14ae, 0x1798, 0x14ae, 0x1a04, 0x16d0, 0x1a04, +0x16d0, 0x1a04, 0x16d0, 0x1be5, 0x186c, 0x1be5, 0x186c, 0x1e57, 0x1a9c, 0x1e57, 0x1a9c, +0x1fea, 0x1bf4, 0x1fea, 0x1bf4, 0x20aa, 0x1c7f, 0x20aa, 0x1c7f, 0x220d, 0x1db4, 0x220d, +0x1db4, 0x220d, 0x1db4, 0x234d, 0x1ecf, 0x234d, 0x1ecf, 0x2486, 0x1feb, 0x2486, 0x1feb, +0x2570, 0x20c2, 0x2570, 0x20c2, 0x26cf, 0x2218, 0x26cf, 0x2218, 0x27d4, 0x231d, 0x27d4, +0x231d, 0x26d5, 0x2228, 0x26d5, 0x2228, 0x26d5, 0x2228, 0x2612, 0x2179, 0x2612, 0x2179, +0x24f7, 0x207a, 0x24f7, 0x207a, 0x2398, 0x1f40, 0x2398, 0x1f40, 0x2327, 0x1efa, 0x2327, +0x1efa, 0x2373, 0x1f78, 0x2373, 0x1f78, 0x23c2, 0x1ffe, 0x23c2, 0x1ffe, 0x23c2, 0x1ffe, +0x22c5, 0x1f3b, 0x22c5, 0x1f3b, 0x2152, 0x1e05, 0x2152, 0x1e05, 0x20a5, 0x1d97, 0x20a5, +0x1d97, 0x1f2d, 0x1c5d, 0x1f2d, 0x1c5d, 0x1ccf, 0x1a3c, 0x1ccf, 0x1a3c, 0x1ccf, 0x1a3c, +0x1b71, 0x1918, 0x1b71, 0x1918, 0x1b04, 0x18e4, 0x1b04, 0x18e4, 0x1b67, 0x197c, 0x1b67, +0x197c, 0x19c8, 0x180e, 0x19c8, 0x180e, 0x16b8, 0x152b, 0x16b8, 0x152b, 0x1426, 0x12c4, +0x1426, 0x12c4, 0x1426, 0x12c4, 0x110d, 0xfd2, 0x110d, 0xfd2, 0xe07, 0xcf0, 0xe07, +0xcf0, 0xb67, 0xa74, 0xb67, 0xa74, 0x987, 0x8b5, 0x987, 0x8b5, 0x6b5, 0x606, +0x6b5, 0x606, 0x3e4, 0x357, 0x3e4, 0x357, 0x3e4, 0x357, 0x214, 0x1ab, 0x214, +0x1ab, 0x13, 0xffd2, 0x13, 0xffd2, 0xfea0, 0xfe88, 0xfea0, 0xfe88, 0xfd8a, 0xfd9f, +0xfd8a, 0xfd9f, 0xfc1d, 0xfc63, 0xfc1d, 0xfc63, 0xfc1d, 0xfc63, 0xfa06, 0xfa80, 0xfa06, +0xfa80, 0xf8b0, 0xf960, 0xf8b0, 0xf960, 0xf81b, 0xf903, 0xf81b, 0xf903, 0xf5dd, 0xf6ff, +0xf5dd, 0xf6ff, 0xf34e, 0xf4a9, 0xf34e, 0xf4a9, 0xf2e4, 0xf477, 0xf2e4, 0xf477, 0xf2e4, +0xf477, 0xf28b, 0xf453, 0xf28b, 0xf453, 0xf1a7, 0xf3a0, 0xf1a7, 0xf3a0, 0xf0ba, 0xf2dc, +0xf0ba, 0xf2dc, 0xef67, 0xf1ad, 0xef67, 0xf1ad, 0xedb8, 0xf017, 0xedb8, 0xf017, 0xedb8, +0xf017, 0xec2f, 0xee9d, 0xec2f, 0xee9d, 0xec83, 0xeef6, 0xec83, 0xeef6, 0xecc2, 0xef2e, +0xecc2, 0xef2e, 0xec6c, 0xeec5, 0xec6c, 0xeec5, 0xed02, 0xef3b, 0xed02, 0xef3b, 0xedd4, +0xefe2, 0xedd4, 0xefe2, 0xedd4, 0xefe2, 0xef01, 0xf0da, 0xef01, 0xf0da, 0xf05d, 0xf1f7, +0xf05d, 0xf1f7, 0xf17b, 0xf2cf, 0xf17b, 0xf2cf, 0xf39a, 0xf4a2, 0xf39a, 0xf4a2, 0xf5de, +0xf695, 0xf5de, 0xf695, 0xf7a8, 0xf80e, 0xf7a8, 0xf80e, 0xf7a8, 0xf80e, 0xf9e5, 0xf9f9, +0xf9e5, 0xf9f9, 0xfbb0, 0xfb76, 0xfbb0, 0xfb76, 0xfe0f, 0xfd8c, 0xfe0f, 0xfd8c, 0xff54, +0xfe8e, 0xff54, 0xfe8e, 0x75, 0xff77, 0x75, 0xff77, 0x75, 0xff77, 0x3d9, 0x2ab, +0x3d9, 0x2ab, 0x614, 0x4c3, 0x614, 0x4c3, 0x7ea, 0x682, 0x7ea, 0x682, 0xa4a, +0x8d7, 0xa4a, 0x8d7, 0xb68, 0x9f7, 0xb68, 0x9f7, 0xc02, 0xa9f, 0xc02, 0xa9f, +0xc02, 0xa9f, 0xcb6, 0xb6d, 0xcb6, 0xb6d, 0xd45, 0xc1e, 0xd45, 0xc1e, 0xd97, +0xc9c, 0xd97, 0xc9c, 0xc82, 0xbba, 0xc82, 0xbba, 0xb3f, 0xaaf, 0xb3f, 0xaaf, +0x92c, 0x8d7, 0x92c, 0x8d7, 0x92c, 0x8d7, 0x611, 0x5fa, 0x611, 0x5fa, 0x4ed, +0x512, 0x4ed, 0x512, 0x42b, 0x48b, 0x42b, 0x48b, 0x34c, 0x3e3, 0x34c, 0x3e3, +0x2b2, 0x37d, 0x2b2, 0x37d, 0x2b2, 0x37d, 0x2b8, 0x3b2, 0x2b8, 0x3b2, 0x256, +0x379, 0x256, 0x379, 0x98, 0x1dd, 0x98, 0x1dd, 0xff0c, 0x6f, 0xff0c, 0x6f, +0xfcfd, 0xfe78, 0xfcfd, 0xfe78, 0xfae8, 0xfc77, 0xfae8, 0xfc77, 0xfae8, 0xfc77, 0xf8ee, +0xfa8e, 0xf8ee, 0xfa8e, 0xf6aa, 0xf858, 0xf6aa, 0xf858, 0xf499, 0xf653, 0xf499, 0xf653, +0xf2c1, 0xf488, 0xf2c1, 0xf488, 0xf161, 0xf335, 0xf161, 0xf335, 0xf07b, 0xf25e, 0xf07b, +0xf25e, 0xf07b, 0xf25e, 0xf040, 0xf235, 0xf040, 0xf235, 0xefb8, 0xf1c2, 0xefb8, 0xf1c2, +0xed6f, 0xef92, 0xed6f, 0xef92, 0xeb89, 0xedc9, 0xeb89, 0xedc9, 0xe998, 0xebf9, 0xe998, +0xebf9, 0xe998, 0xebf9, 0xe651, 0xe8d5, 0xe651, 0xe8d5, 0xe4a2, 0xe74c, 0xe4a2, 0xe74c, +0xe32d, 0xe5fe, 0xe32d, 0xe5fe, 0xe10a, 0xe402, 0xe10a, 0xe402, 0xded5, 0xe1f3, 0xded5, +0xe1f3, 0xdda0, 0xe0e1, 0xdda0, 0xe0e1, 0xdda0, 0xe0e1, 0xdd5b, 0xe0ba, 0xdd5b, 0xe0ba, +0xdb2b, 0xdea3, 0xdb2b, 0xdea3, 0xd968, 0xdcf1, 0xd968, 0xdcf1, 0xd8c9, 0xdc5a, 0xd8c9, +0xdc5a, 0xd772, 0xdb03, 0xd772, 0xdb03, 0xd776, 0xdafc, 0xd776, 0xdafc, 0xd776, 0xdafc, +0xd881, 0xdbf2, 0xd881, 0xdbf2, 0xd866, 0xdbb8, 0xd866, 0xdbb8, 0xd905, 0xdc2e, 0xd905, +0xdc2e, 0xda1e, 0xdd15, 0xda1e, 0xdd15, 0xdbc2, 0xde7f, 0xdbc2, 0xde7f, 0xdbc2, 0xde7f, +0xde24, 0xe0a0, 0xde24, 0xe0a0, 0xe077, 0xe2af, 0xe077, 0xe2af, 0xe422, 0xe612, 0xe422, +0xe612, 0xe661, 0xe809, 0xe661, 0xe809, 0xe7dc, 0xe93d, 0xe7dc, 0xe93d, 0xea23, 0xeb42, +0xea23, 0xeb42, 0xea23, 0xeb42, 0xeb78, 0xec59, 0xeb78, 0xec59, 0xed41, 0xeded, 0xed41, +0xeded, 0xf020, 0xf0a1, 0xf020, 0xf0a1, 0xf2d8, 0xf338, 0xf2d8, 0xf338, 0xf5a4, 0xf5ef, +0xf5a4, 0xf5ef, 0xf884, 0xf8c6, 0xf884, 0xf8c6, 0xf884, 0xf8c6, 0xfa3e, 0xfa84, 0xfa3e, +0xfa84, 0xfbba, 0xfc0f, 0xfbba, 0xfc0f, 0xfd8e, 0xfdfe, 0xfd8e, 0xfdfe, 0xff18, 0xffad, +0xff18, 0xffad, 0xff37, 0xfff9, 0xff37, 0xfff9, 0xff37, 0xfff9, 0xff44, 0x3a, 0xff44, +0x3a, 0xff9c, 0xc9, 0xff9c, 0xc9, 0xfe2c, 0xff92, 0xfe2c, 0xff92, 0xfc9e, 0xfe3c, +0xfc9e, 0xfe3c, 0xfc4f, 0xfe23, 0xfc4f, 0xfe23, 0xfcac, 0xfeb0, 0xfcac, 0xfeb0, 0xfcac, +0xfeb0, 0xfc95, 0xfec0, 0xfc95, 0xfec0, 0xfd37, 0xff81, 0xfd37, 0xff81, 0xfe58, 0xb4, +0xfe58, 0xb4, 0xfd64, 0xffc6, 0xfd64, 0xffc6, 0xfbbb, 0xfe16, 0xfbbb, 0xfe16, 0xfb1b, +0xfd60, 0xfb1b, 0xfd60, 0xfb1b, 0xfd60, 0xfaa4, 0xfcc7, 0xfaa4, 0xfcc7, 0xf9f7, 0xfbea, +0xf9f7, 0xfbea, 0xfa92, 0xfc4a, 0xfa92, 0xfc4a, 0xfc1f, 0xfd91, 0xfc1f, 0xfd91, 0xfd03, +0xfe27, 0xfd03, 0xfe27, 0xfd03, 0xfe27, 0xfe8c, 0xff5b, 0xfe8c, 0xff5b, 0x75, 0xeb, +0x75, 0xeb, 0x152, 0x16d, 0x152, 0x16d, 0x3e5, 0x3a6, 0x3e5, 0x3a6, 0x731, +0x69c, 0x731, 0x69c, 0x9b6, 0x8d0, 0x9b6, 0x8d0, 0x9b6, 0x8d0, 0xbfe, 0xace, +0xbfe, 0xace, 0xcc6, 0xb56, 0xcc6, 0xb56, 0xd9c, 0xbf7, 0xd9c, 0xbf7, 0xe6a, +0xc9b, 0xe6a, 0xc9b, 0xf1e, 0xd31, 0xf1e, 0xd31, 0x101c, 0xe1e, 0x101c, 0xe1e, +0x101c, 0xe1e, 0x10c4, 0xec1, 0x10c4, 0xec1, 0x1174, 0xf76, 0x1174, 0xf76, 0x10f6, +0xf07, 0x10f6, 0xf07, 0xf0d, 0xd37, 0xf0d, 0xd37, 0xdbe, 0xc07, 0xdbe, 0xc07, +0xdbe, 0xc07, 0xbb5, 0xa23, 0xbb5, 0xa23, 0x86c, 0x702, 0x86c, 0x702, 0x6dd, +0x59c, 0x6dd, 0x59c, 0x536, 0x41e, 0x536, 0x41e, 0x340, 0x24f, 0x340, 0x24f, +0x203, 0x135, 0x203, 0x135, 0x203, 0x135, 0x1b5, 0x105, 0x1b5, 0x105, 0x249, +0x1b2, 0x249, 0x1b2, 0x1b4, 0x12f, 0x1b4, 0x12f, 0x1c6, 0x14e, 0x1c6, 0x14e, +0x1de, 0x16c, 0x1de, 0x16c, 0x6f, 0xfffe, 0x6f, 0xfffe, 0x6f, 0xfffe, 0xffcb, +0xff55, 0xffcb, 0xff55, 0x98, 0x1a, 0x98, 0x1a, 0x137, 0xae, 0x137, 0xae, +0x19f, 0x109, 0x19f, 0x109, 0x2c7, 0x225, 0x2c7, 0x225, 0x2c7, 0x225, 0x4cf, +0x423, 0x4cf, 0x423, 0x697, 0x5e3, 0x697, 0x5e3, 0x7b4, 0x6fd, 0x7b4, 0x6fd, +0x880, 0x7cb, 0x880, 0x7cb, 0x83e, 0x790, 0x83e, 0x790, 0x902, 0x862, 0x902, +0x862, 0x902, 0x862, 0xa24, 0x998, 0xa24, 0x998, 0xa97, 0xa25, 0xa97, 0xa25, +0xb75, 0xb23, 0xb75, 0xb23, 0xba5, 0xb78, 0xba5, 0xb78, 0xaec, 0xae8, 0xaec, +0xae8, 0xaec, 0xae8, 0x974, 0x99c, 0x974, 0x99c, 0x85f, 0x8b3, 0x85f, 0x8b3, +0x7ae, 0x82f, 0x7ae, 0x82f, 0x760, 0x80c, 0x760, 0x80c, 0x7d3, 0x8a6, 0x7d3, +0x8a6, 0x7e9, 0x8df, 0x7e9, 0x8df, 0x7e9, 0x8df, 0x73e, 0x852, 0x73e, 0x852, +0x5fc, 0x726, 0x5fc, 0x726, 0x478, 0x5b2, 0x478, 0x5b2, 0x270, 0x3b2, 0x270, +0x3b2, 0xb, 0x14c, 0xb, 0x14c, 0xff58, 0x92, 0xff58, 0x92, 0xff58, 0x92, +0xfe50, 0xff7c, 0xfe50, 0xff7c, 0xfba0, 0xfcb7, 0xfba0, 0xfcb7, 0xfb3e, 0xfc3d, 0xfb3e, +0xfc3d, 0xfb18, 0xfbfa, 0xfb18, 0xfbfa, 0xfa9b, 0xfb5e, 0xfa9b, 0xfb5e, 0xfa9b, 0xfb5e, +0xfb54, 0xfbf9, 0xfb54, 0xfbf9, 0xfbea, 0xfc71, 0xfbea, 0xfc71, 0xfcc8, 0xfd33, 0xfcc8, +0xfd33, 0xfd36, 0xfd8a, 0xfd36, 0xfd8a, 0xfe26, 0xfe68, 0xfe26, 0xfe68, 0xff40, 0xff75, +0xff40, 0xff75, 0xff40, 0xff75, 0xffad, 0xffdd, 0xffad, 0xffdd, 0xe4, 0x116, 0xe4, +0x116, 0x1ca, 0x206, 0x1ca, 0x206, 0x1a1, 0x1ed, 0x1a1, 0x1ed, 0x129, 0x18b, +0x129, 0x18b, 0xffdd, 0x5b, 0xffdd, 0x5b, 0xffdd, 0x5b, 0xff12, 0xffaf, 0xff12, +0xffaf, 0xfeb6, 0xff75, 0xfeb6, 0xff75, 0xfd5f, 0xfe41, 0xfd5f, 0xfe41, 0xfc8d, 0xfd91, +0xfc8d, 0xfd91, 0xfb7e, 0xfca2, 0xfb7e, 0xfca2, 0xfb7e, 0xfca2, 0xfa6d, 0xfbac, 0xfa6d, +0xfbac, 0xf999, 0xfaee, 0xf999, 0xfaee, 0xf83a, 0xf99e, 0xf83a, 0xf99e, 0xf6f4, 0xf85f, +0xf6f4, 0xf85f, 0xf506, 0xf66f, 0xf506, 0xf66f, 0xf37b, 0xf4d8, 0xf37b, 0xf4d8, 0xf37b, +0xf4d8, 0xf38b, 0xf4d3, 0xf38b, 0xf4d3, 0xf3ff, 0xf529, 0xf3ff, 0xf529, 0xf44b, 0xf54e, +0xf44b, 0xf54e, 0xf473, 0xf547, 0xf473, 0xf547, 0xf45f, 0xf4fe, 0xf45f, 0xf4fe, 0xf4b2, +0xf516, 0xf4b2, 0xf516, 0xf4b2, 0xf516, 0xf5dc, 0xf602, 0xf5dc, 0xf602, 0xf85c, 0xf841, +0xf85c, 0xf841, 0xfa65, 0xfa0a, 0xfa65, 0xfa0a, 0xfb87, 0xfaec, 0xfb87, 0xfaec, 0xfdab, +0xfcd4, 0xfdab, 0xfcd4, 0xfdab, 0xfcd4, 0xd, 0xfefe, 0xd, 0xfefe, 0x1c6, 0x86, +0x1c6, 0x86, 0x356, 0x1ec, 0x356, 0x1ec, 0x5e6, 0x45a, 0x5e6, 0x45a, 0x892, +0x6eb, 0x892, 0x6eb, 0xb51, 0x998, 0xb51, 0x998, 0xb51, 0x998, 0xdb6, 0xbf3, +0xdb6, 0xbf3, 0xed3, 0xd0e, 0xed3, 0xd0e, 0xf95, 0xdd4, 0xf95, 0xdd4, 0xf95, +0xdde, 0xf95, 0xdde, 0xfa8, 0xe00, 0xfa8, 0xe00, 0x107c, 0xee6, 0x107c, 0xee6, +0x107c, 0xee6, 0x1186, 0x1002, 0x1186, 0x1002, 0x12a1, 0x1131, 0x12a1, 0x1131, 0x13c8, +0x126a, 0x13c8, 0x126a, 0x14a9, 0x135b, 0x14a9, 0x135b, 0x15cf, 0x148d, 0x15cf, 0x148d, +0x15cf, 0x148d, 0x15f6, 0x14bb, 0x15f6, 0x14bb, 0x1559, 0x141f, 0x1559, 0x141f, 0x1537, +0x13f9, 0x1537, 0x13f9, 0x136a, 0x1220, 0x136a, 0x1220, 0x11b0, 0x1056, 0x11b0, 0x1056, +0x10c4, 0xf54, 0x10c4, 0xf54, 0x10c4, 0xf54, 0xfe3, 0xe57, 0xfe3, 0xe57, 0xf4f, +0xda2, 0xf4f, 0xda2, 0xfa1, 0xdd0, 0xfa1, 0xdd0, 0x111b, 0xf24, 0x111b, 0xf24, +0x1153, 0xf34, 0x1153, 0xf34, 0x116e, 0xf27, 0x116e, 0xf27, 0x116e, 0xf27, 0x1208, +0xf9a, 0x1208, 0xf9a, 0x1184, 0xef1, 0x1184, 0xef1, 0x10fb, 0xe46, 0x10fb, 0xe46, +0x11ba, 0xee6, 0x11ba, 0xee6, 0x12b9, 0xfcb, 0x12b9, 0xfcb, 0x12b9, 0xfcb, 0x1408, +0x1104, 0x1408, 0x1104, 0x15bb, 0x12a7, 0x15bb, 0x12a7, 0x16bc, 0x139d, 0x16bc, 0x139d, +0x1737, 0x1411, 0x1737, 0x1411, 0x16af, 0x1387, 0x16af, 0x1387, 0x172b, 0x1406, 0x172b, +0x1406, 0x172b, 0x1406, 0x1848, 0x1529, 0x1848, 0x1529, 0x1775, 0x145f, 0x1775, 0x145f, +0x1686, 0x137d, 0x1686, 0x137d, 0x15ad, 0x12b3, 0x15ad, 0x12b3, 0x14db, 0x11f0, 0x14db, +0x11f0, 0x1490, 0x11b6, 0x1490, 0x11b6, 0x1490, 0x11b6, 0x14a6, 0x11df, 0x14a6, 0x11df, +0x1585, 0x12d1, 0x1585, 0x12d1, 0x1555, 0x12b6, 0x1555, 0x12b6, 0x14b2, 0x1229, 0x14b2, +0x1229, 0x14ff, 0x128d, 0x14ff, 0x128d, 0x14ff, 0x128d, 0x1513, 0x12bb, 0x1513, 0x12bb, +0x14c5, 0x1289, 0x14c5, 0x1289, 0x1367, 0x114a, 0x1367, 0x114a, 0x119a, 0xfa0, 0x119a, +0xfa0, 0x1013, 0xe41, 0x1013, 0xe41, 0xe99, 0xcf3, 0xe99, 0xcf3, 0xe99, 0xcf3, +0xd3c, 0xbc7, 0xd3c, 0xbc7, 0xbfe, 0xac0, 0xbfe, 0xac0, 0xa7b, 0x97a, 0xa7b, +0x97a, 0x899, 0x7da, 0x899, 0x7da, 0x7c6, 0x74e, 0x7c6, 0x74e, 0x76b, 0x73e, +0x76b, 0x73e, 0x76b, 0x73e, 0x64a, 0x66c, 0x64a, 0x66c, 0x472, 0x4e6, 0x472, +0x4e6, 0x235, 0x2fc, 0x235, 0x2fc, 0xff65, 0x7f, 0xff65, 0x7f, 0xfc39, 0xfda4, +0xfc39, 0xfda4, 0xfc39, 0xfda4, 0xf8e6, 0xfa9f, 0xf8e6, 0xfa9f, 0xf656, 0xf858, 0xf656, +0xf858, 0xf4a0, 0xf6e5, 0xf4a0, 0xf6e5, 0xf31f, 0xf59e, 0xf31f, 0xf59e, 0xf346, 0xf5f7, +0xf346, 0xf5f7, 0xf2ca, 0xf5a3, 0xf2ca, 0xf5a3, 0xf2ca, 0xf5a3, 0xf1bb, 0xf4b0, 0xf1bb, +0xf4b0, 0xf0e6, 0xf3eb, 0xf0e6, 0xf3eb, 0xef82, 0xf28c, 0xef82, 0xf28c, 0xee42, 0xf143, +0xee42, 0xf143, 0xec33, 0xef21, 0xec33, 0xef21, 0xeb01, 0xedd0, 0xeb01, 0xedd0, 0xeb01, +0xedd0, 0xe9b0, 0xec55, 0xe9b0, 0xec55, 0xe7fe, 0xea72, 0xe7fe, 0xea72, 0xe7d3, 0xea0d, +0xe7d3, 0xea0d, 0xe897, 0xea90, 0xe897, 0xea90, 0xeacd, 0xec81, 0xeacd, 0xec81, 0xeacd, +0xec81, 0xedbb, 0xef28, 0xedbb, 0xef28, 0xefd9, 0xf0fc, 0xefd9, 0xf0fc, 0xf1e5, 0xf2bf, +0xf1e5, 0xf2bf, 0xf3b8, 0xf44b, 0xf3b8, 0xf44b, 0xf474, 0xf4c1, 0xf474, 0xf4c1, 0xf604, +0xf610, 0xf604, 0xf610, 0xf604, 0xf610, 0xf79a, 0xf769, 0xf79a, 0xf769, 0xf8ec, 0xf883, +0xf8ec, 0xf883, 0xfaac, 0xfa0f, 0xfaac, 0xfa0f, 0xfbf0, 0xfb25, 0xfbf0, 0xfb25, 0xfd89, +0xfc94, 0xfd89, 0xfc94, 0xfd89, 0xfc94, 0xfe1a, 0xfd01, 0xfe1a, 0xfd01, 0xfdc8, 0xfc8d, +0xfdc8, 0xfc8d, 0xfdb3, 0xfc5b, 0xfdb3, 0xfc5b, 0xfcfb, 0xfb88, 0xfcfb, 0xfb88, 0xfc6e, +0xfae2, 0xfc6e, 0xfae2, 0xfcb7, 0xfb13, 0xfcb7, 0xfb13, 0xfcb7, 0xfb13, 0xfd8b, 0xfbd0, +0xfd8b, 0xfbd0, 0xfe28, 0xfc57, 0xfe28, 0xfc57, 0xfee5, 0xfcfe, 0xfee5, 0xfcfe, 0x134, +0xff38, 0x134, 0xff38, 0x351, 0x140, 0x351, 0x140, 0x478, 0x254, 0x478, 0x254, +0x478, 0x254, 0x56b, 0x336, 0x56b, 0x336, 0x524, 0x2e1, 0x524, 0x2e1, 0x40d, +0x1c0, 0x40d, 0x1c0, 0x3bd, 0x16c, 0x3bd, 0x16c, 0x4f2, 0x2a3, 0x4f2, 0x2a3, +0x4f2, 0x2a3, 0x563, 0x31f, 0x563, 0x31f, 0x4cd, 0x29c, 0x4cd, 0x29c, 0x4bb, +0x2a7, 0x4bb, 0x2a7, 0x442, 0x257, 0x442, 0x257, 0x321, 0x16a, 0x321, 0x16a, +0x1ae, 0x37, 0x1ae, 0x37, 0x1ae, 0x37, 0x63, 0xff38, 0x63, 0xff38, 0xfe8a, +0xfdb6, 0xfe8a, 0xfdb6, 0xfbd2, 0xfb61, 0xfbd2, 0xfb61, 0xf9e5, 0xf9df, 0xf9e5, 0xf9df, +0xf862, 0xf8d0, 0xf862, 0xf8d0, 0xf5f9, 0xf6e1, 0xf5f9, 0xf6e1, 0xf5f9, 0xf6e1, 0xf318, +0xf47e, 0xf318, 0xf47e, 0xef31, 0xf118, 0xef31, 0xf118, 0xeb79, 0xeddf, 0xeb79, 0xeddf, +0xe897, 0xeb7b, 0xe897, 0xeb7b, 0xe5a2, 0xe8fd, 0xe5a2, 0xe8fd, 0xe5a2, 0xe8fd, 0xe35e, +0xe72a, 0xe35e, 0xe72a, 0xe147, 0xe57a, 0xe147, 0xe57a, 0xe010, 0xe49f, 0xe010, 0xe49f, +0xdec4, 0xe3a1, 0xdec4, 0xe3a1, 0xdd23, 0xe240, 0xdd23, 0xe240, 0xdc22, 0xe171, 0xdc22, +0xe171, 0xdc22, 0xe171, 0xda31, 0xdfa3, 0xda31, 0xdfa3, 0xd81e, 0xdda3, 0xd81e, 0xdda3, +0xd66c, 0xdbf6, 0xd66c, 0xdbf6, 0xd535, 0xdab7, 0xd535, 0xdab7, 0xd53d, 0xdaaa, 0xd53d, +0xdaaa, 0xd5f0, 0xdb3e, 0xd5f0, 0xdb3e, 0xd5f0, 0xdb3e, 0xd688, 0xdbad, 0xd688, 0xdbad, +0xd7ae, 0xdca3, 0xd7ae, 0xdca3, 0xd985, 0xde45, 0xd985, 0xde45, 0xdb80, 0xe008, 0xdb80, +0xe008, 0xdd5a, 0xe1a7, 0xdd5a, 0xe1a7, 0xdd5a, 0xe1a7, 0xdef9, 0xe30d, 0xdef9, 0xe30d, +0xe11b, 0xe4f6, 0xe11b, 0xe4f6, 0xe359, 0xe6fd, 0xe359, 0xe6fd, 0xe57c, 0xe8ed, 0xe57c, +0xe8ed, 0xe83d, 0xeb7e, 0xe83d, 0xeb7e, 0xeacd, 0xede1, 0xeacd, 0xede1, 0xeacd, 0xede1, +0xec42, 0xef2b, 0xec42, 0xef2b, 0xed29, 0xefea, 0xed29, 0xefea, 0xed79, 0xf014, 0xed79, +0xf014, 0xede6, 0xf059, 0xede6, 0xf059, 0xee96, 0xf0df, 0xee96, 0xf0df, 0xefe1, 0xf1fe, +0xefe1, 0xf1fe, 0xefe1, 0xf1fe, 0xf1dd, 0xf3c8, 0xf1dd, 0xf3c8, 0xf300, 0xf4b3, 0xf300, +0xf4b3, 0xf4c2, 0xf636, 0xf4c2, 0xf636, 0xf6a5, 0xf7d1, 0xf6a5, 0xf7d1, 0xf87d, 0xf958, +0xf87d, 0xf958, 0xf87d, 0xf958, 0xfa83, 0xfb04, 0xfa83, 0xfb04, 0xfbd9, 0xfbf7, 0xfbd9, +0xfbf7, 0xfe6c, 0xfe1f, 0xfe6c, 0xfe1f, 0x1c4, 0x104, 0x1c4, 0x104, 0x4aa, 0x372, +0x4aa, 0x372, 0x731, 0x57e, 0x731, 0x57e, 0x731, 0x57e, 0xa36, 0x806, 0xa36, +0x806, 0xdee, 0xb43, 0xdee, 0xb43, 0x1171, 0xe50, 0x1171, 0xe50, 0x14f3, 0x1162, +0x14f3, 0x1162, 0x18b6, 0x14c0, 0x18b6, 0x14c0, 0x1bd1, 0x1782, 0x1bd1, 0x1782, 0x1bd1, +0x1782, 0x1e05, 0x196e, 0x1e05, 0x196e, 0x2092, 0x1bc4, 0x2092, 0x1bc4, 0x22f4, 0x1e03, +0x22f4, 0x1e03, 0x2402, 0x1f02, 0x2402, 0x1f02, 0x24a2, 0x1faa, 0x24a2, 0x1faa, 0x24a2, +0x1faa, 0x255a, 0x2080, 0x255a, 0x2080, 0x251a, 0x2075, 0x251a, 0x2075, 0x24c0, 0x2063, +0x24c0, 0x2063, 0x2419, 0x2019, 0x2419, 0x2019, 0x21f1, 0x1e5e, 0x21f1, 0x1e5e, 0x1e67, +0x1b50, 0x1e67, 0x1b50, 0x1e67, 0x1b50, 0x19ba, 0x172b, 0x19ba, 0x172b, 0x1582, 0x1383, +0x1582, 0x1383, 0x1122, 0xfb8, 0x1122, 0xfb8, 0xcea, 0xc16, 0xcea, 0xc16, 0x9dc, +0x99d, 0x9dc, 0x99d, 0x66b, 0x6bb, 0x66b, 0x6bb, 0x66b, 0x6bb, 0x357, 0x42e, +0x357, 0x42e, 0xdf, 0x231, 0xdf, 0x231, 0xfe2d, 0xffec, 0xfe2d, 0xffec, 0xfbb9, +0xfdd6, 0xfbb9, 0xfdd6, 0xf832, 0xfa9d, 0xf832, 0xfa9d, 0xf832, 0xfa9d, 0xf3ff, 0xf6a7, +0xf3ff, 0xf6a7, 0xf0b3, 0xf386, 0xf0b3, 0xf386, 0xee0b, 0xf0f8, 0xee0b, 0xf0f8, 0xed1c, +0xf014, 0xed1c, 0xf014, 0xed23, 0xf015, 0xed23, 0xf015, 0xed29, 0xf00b, 0xed29, 0xf00b, +0xed29, 0xf00b, 0xed86, 0xf04a, 0xed86, 0xf04a, 0xedbb, 0xf05a, 0xedbb, 0xf05a, 0xee94, +0xf107, 0xee94, 0xf107, 0xf01e, 0xf261, 0xf01e, 0xf261, 0xf139, 0xf34b, 0xf139, 0xf34b, +0xf2b1, 0xf490, 0xf2b1, 0xf490, 0xf2b1, 0xf490, 0xf485, 0xf634, 0xf485, 0xf634, 0xf5dc, +0xf75e, 0xf5dc, 0xf75e, 0xf797, 0xf8f1, 0xf797, 0xf8f1, 0xf921, 0xfa56, 0xf921, 0xfa56, +0xfb14, 0xfc2a, 0xfb14, 0xfc2a, 0xfb14, 0xfc2a, 0xfc84, 0xfd80, 0xfc84, 0xfd80, 0xfd28, +0xfe0d, 0xfd28, 0xfe0d, 0xfec6, 0xff98, 0xfec6, 0xff98, 0xffd6, 0x97, 0xffd6, 0x97, +0xfd, 0x1ae, 0xfd, 0x1ae, 0x1ba, 0x259, 0x1ba, 0x259, 0x1ba, 0x259, 0x197, +0x222, 0x197, 0x222, 0x1e1, 0x255, 0x1e1, 0x255, 0x2d4, 0x32c, 0x2d4, 0x32c, +0x3ce, 0x404, 0x3ce, 0x404, 0x451, 0x45e, 0x451, 0x45e, 0x5b5, 0x591, 0x5b5, +0x591, 0x5b5, 0x591, 0x791, 0x735, 0x791, 0x735, 0x97a, 0x8e1, 0x97a, 0x8e1, +0xb05, 0xa29, 0xb05, 0xa29, 0xcab, 0xb87, 0xcab, 0xb87, 0xf3f, 0xdd1, 0xf3f, +0xdd1, 0xf3f, 0xdd1, 0x117c, 0xfc2, 0x117c, 0xfc2, 0x134e, 0x114a, 0x134e, 0x114a, +0x1482, 0x1239, 0x1482, 0x1239, 0x14fd, 0x1274, 0x14fd, 0x1274, 0x16ad, 0x13ee, 0x16ad, +0x13ee, 0x181a, 0x152f, 0x181a, 0x152f, 0x181a, 0x152f, 0x185a, 0x1551, 0x185a, 0x1551, +0x19d3, 0x16bb, 0x19d3, 0x16bb, 0x1a5f, 0x1749, 0x1a5f, 0x1749, 0x198c, 0x1689, 0x198c, +0x1689, 0x1869, 0x158b, 0x1869, 0x158b, 0x1869, 0x158b, 0x16c4, 0x141c, 0x16c4, 0x141c, +0x14af, 0x1250, 0x14af, 0x1250, 0x1158, 0xf52, 0x1158, 0xf52, 0xe30, 0xc92, 0xe30, +0xc92, 0xa9c, 0x971, 0xa9c, 0x971, 0x639, 0x58d, 0x639, 0x58d, 0x639, 0x58d, +0x31b, 0x2f4, 0x31b, 0x2f4, 0x8e, 0xf1, 0x8e, 0xf1, 0xfded, 0xfeda, 0xfded, +0xfeda, 0xfbae, 0xfd24, 0xfbae, 0xfd24, 0xf8d9, 0xfad1, 0xf8d9, 0xfad1, 0xf53a, 0xf7ad, +0xf53a, 0xf7ad, 0xf53a, 0xf7ad, 0xf0f2, 0xf3d4, 0xf0f2, 0xf3d4, 0xec9b, 0xefde, 0xec9b, +0xefde, 0xe8b4, 0xec48, 0xe8b4, 0xec48, 0xe498, 0xe86c, 0xe498, 0xe86c, 0xe13d, 0xe53e, +0xe13d, 0xe53e, 0xe13d, 0xe53e, 0xdf26, 0xe340, 0xdf26, 0xe340, 0xde5a, 0xe27a, 0xde5a, +0xe27a, 0xdf34, 0xe346, 0xdf34, 0xe346, 0xe0ee, 0xe4e1, 0xe0ee, 0xe4e1, 0xe1c9, 0xe58a, +0xe1c9, 0xe58a, 0xe2d5, 0xe655, 0xe2d5, 0xe655, 0xe2d5, 0xe655, 0xe4a6, 0xe7d7, 0xe4a6, +0xe7d7, 0xe616, 0xe8eb, 0xe616, 0xe8eb, 0xe7d3, 0xea43, 0xe7d3, 0xea43, 0xe9ff, 0xec03, +0xe9ff, 0xec03, 0xed8e, 0xef20, 0xed8e, 0xef20, 0xf146, 0xf263, 0xf146, 0xf263, 0xf146, +0xf263, 0xf4a3, 0xf54a, 0xf4a3, 0xf54a, 0xf864, 0xf895, 0xf864, 0xf895, 0xfbc2, 0xfb80, +0xfbc2, 0xfb80, 0xff35, 0xfe83, 0xff35, 0xfe83, 0x1eb, 0xcc, 0x1eb, 0xcc, 0x1eb, +0xcc, 0x392, 0x20c, 0x392, 0x20c, 0x561, 0x37a, 0x561, 0x37a, 0x815, 0x5d2, +0x815, 0x5d2, 0xa89, 0x7ef, 0xa89, 0x7ef, 0xd02, 0xa16, 0xd02, 0xa16, 0x10ff, +0xdc6, 0x10ff, 0xdc6, 0x10ff, 0xdc6, 0x1560, 0x11dd, 0x1560, 0x11dd, 0x18b4, 0x14ec, +0x18b4, 0x14ec, 0x1b1a, 0x1710, 0x1b1a, 0x1710, 0x1d51, 0x1906, 0x1d51, 0x1906, 0x1f55, +0x1acc, 0x1f55, 0x1acc, 0x20e4, 0x1c1f, 0x20e4, 0x1c1f, 0x20e4, 0x1c1f, 0x22b9, 0x1dbb, +0x22b9, 0x1dbb, 0x250d, 0x1fd7, 0x250d, 0x1fd7, 0x270e, 0x21a2, 0x270e, 0x21a2, 0x2977, +0x23d9, 0x2977, 0x23d9, 0x2ae6, 0x2519, 0x2ae6, 0x2519, 0x2ae6, 0x2519, 0x2afb, 0x2503, +0x2afb, 0x2503, 0x2bd4, 0x25b6, 0x2bd4, 0x25b6, 0x2c8d, 0x264f, 0x2c8d, 0x264f, 0x2d06, +0x26b0, 0x2d06, 0x26b0, 0x2da8, 0x2741, 0x2da8, 0x2741, 0x2e2e, 0x27bf, 0x2e2e, 0x27bf, +0x2e2e, 0x27bf, 0x2e27, 0x27ba, 0x2e27, 0x27ba, 0x2e4b, 0x27ea, 0x2e4b, 0x27ea, 0x2eb0, +0x2866, 0x2eb0, 0x2866, 0x2d53, 0x272b, 0x2d53, 0x272b, 0x2ad9, 0x24df, 0x2ad9, 0x24df, +0x28c3, 0x2302, 0x28c3, 0x2302, 0x28c3, 0x2302, 0x25ef, 0x2071, 0x25ef, 0x2071, 0x232c, +0x1dfd, 0x232c, 0x1dfd, 0x21bc, 0x1ce4, 0x21bc, 0x1ce4, 0x1fee, 0x1b78, 0x1fee, 0x1b78, +0x1e5a, 0x1a4b, 0x1e5a, 0x1a4b, 0x1e5a, 0x1a4b, 0x1cbd, 0x191e, 0x1cbd, 0x191e, 0x1a93, +0x1768, 0x1a93, 0x1768, 0x179d, 0x14ec, 0x179d, 0x14ec, 0x1361, 0x112b, 0x1361, 0x112b, +0xfa7, 0xded, 0xfa7, 0xded, 0xb84, 0xa47, 0xb84, 0xa47, 0xb84, 0xa47, 0x6e1, +0x61f, 0x6e1, 0x61f, 0x3f3, 0x3ab, 0x3f3, 0x3ab, 0x199, 0x1c6, 0x199, 0x1c6, +0xfe5c, 0xfef9, 0xfe5c, 0xfef9, 0xfbb7, 0xfcbf, 0xfbb7, 0xfcbf, 0xf953, 0xfac1, 0xf953, +0xfac1, 0xf953, 0xfac1, 0xf686, 0xf852, 0xf686, 0xf852, 0xf39b, 0xf5bd, 0xf39b, 0xf5bd, +0xf146, 0xf3b6, 0xf146, 0xf3b6, 0xf037, 0xf2ec, 0xf037, 0xf2ec, 0xef37, 0xf22a, 0xef37, +0xf22a, 0xef37, 0xf22a, 0xeed4, 0xf1fb, 0xeed4, 0xf1fb, 0xee13, 0xf165, 0xee13, 0xf165, +0xed34, 0xf0a6, 0xed34, 0xf0a6, 0xece2, 0xf06c, 0xece2, 0xf06c, 0xec01, 0xef99, 0xec01, +0xef99, 0xeb34, 0xeed0, 0xeb34, 0xeed0, 0xeb34, 0xeed0, 0xea07, 0xed9f, 0xea07, 0xed9f, +0xe943, 0xeccb, 0xe943, 0xeccb, 0xe8c1, 0xec31, 0xe8c1, 0xec31, 0xe85f, 0xebae, 0xe85f, +0xebae, 0xe8e6, 0xec0b, 0xe8e6, 0xec0b, 0xe989, 0xec7c, 0xe989, 0xec7c, 0xe989, 0xec7c, +0xea72, 0xed2c, 0xea72, 0xed2c, 0xebdd, 0xee56, 0xebdd, 0xee56, 0xedc7, 0xeffa, 0xedc7, +0xeffa, 0xefdf, 0xf1c6, 0xefdf, 0xf1c6, 0xf1e1, 0xf377, 0xf1e1, 0xf377, 0xf1e1, 0xf377, +0xf449, 0xf58c, 0xf449, 0xf58c, 0xf604, 0xf6f1, 0xf604, 0xf6f1, 0xf7ba, 0xf851, 0xf7ba, +0xf851, 0xfabe, 0xfaff, 0xfabe, 0xfaff, 0xfd28, 0xfd14, 0xfd28, 0xfd14, 0x7, 0xffa3, +0x7, 0xffa3, 0x7, 0xffa3, 0x35a, 0x2a9, 0x35a, 0x2a9, 0x60e, 0x516, 0x60e, +0x516, 0x86c, 0x733, 0x86c, 0x733, 0x9eb, 0x878, 0x9eb, 0x878, 0xbde, 0xa3a, +0xbde, 0xa3a, 0xd31, 0xb64, 0xd31, 0xb64, 0xd31, 0xb64, 0xe61, 0xc73, 0xe61, +0xc73, 0x10c4, 0xebf, 0x10c4, 0xebf, 0x11af, 0xf9c, 0x11af, 0xf9c, 0x1196, 0xf7e, +0x1196, 0xf7e, 0x11bf, 0xfa9, 0x11bf, 0xfa9, 0x11bf, 0xfa9, 0x1114, 0xf0a, 0x1114, +0xf0a, 0x1093, 0xe99, 0x1093, 0xe99, 0xf4b, 0xd69, 0xf4b, 0xd69, 0xc50, 0xa8b, +0xc50, 0xa8b, 0x9b7, 0x815, 0x9b7, 0x815, 0x770, 0x5f3, 0x770, 0x5f3, 0x770, +0x5f3, 0x5a5, 0x451, 0x5a5, 0x451, 0x492, 0x368, 0x492, 0x368, 0x468, 0x36b, +0x468, 0x36b, 0x48a, 0x3bb, 0x48a, 0x3bb, 0x334, 0x294, 0x334, 0x294, 0xde, +0x6e, 0xde, 0x6e, 0xde, 0x6e, 0xfecd, 0xfe8e, 0xfecd, 0xfe8e, 0xfc18, 0xfc0b, +0xfc18, 0xfc0b, 0xf885, 0xf8ab, 0xf885, 0xf8ab, 0xf5d6, 0xf632, 0xf5d6, 0xf632, 0xf348, +0xf3dc, 0xf348, 0xf3dc, 0xf348, 0xf3dc, 0xf0e8, 0xf1b6, 0xf0e8, 0xf1b6, 0xef0b, 0xf016, +0xef0b, 0xf016, 0xed70, 0xeebb, 0xed70, 0xeebb, 0xeb81, 0xed0f, 0xeb81, 0xed0f, 0xe9a9, +0xeb7e, 0xe9a9, 0xeb7e, 0xe8bf, 0xeade, 0xe8bf, 0xeade, 0xe8bf, 0xeade, 0xe6fe, 0xe969, +0xe6fe, 0xe969, 0xe5ae, 0xe868, 0xe5ae, 0xe868, 0xe4fd, 0xe806, 0xe4fd, 0xe806, 0xe381, +0xe6d9, 0xe381, 0xe6d9, 0xe186, 0xe52c, 0xe186, 0xe52c, 0xe186, 0xe52c, 0xdff7, 0xe3e9, +0xdff7, 0xe3e9, 0xdeda, 0xe312, 0xdeda, 0xe312, 0xdd4a, 0xe1c4, 0xdd4a, 0xe1c4, 0xdc1a, +0xe0ce, 0xdc1a, 0xe0ce, 0xdb4c, 0xe030, 0xdb4c, 0xe030, 0xdaa3, 0xdfae, 0xdaa3, 0xdfae, +0xdaa3, 0xdfae, 0xd9cf, 0xdef3, 0xd9cf, 0xdef3, 0xd92f, 0xde61, 0xd92f, 0xde61, 0xd9f9, +0xdf2b, 0xd9f9, 0xdf2b, 0xdafa, 0xe01e, 0xdafa, 0xe01e, 0xdb5c, 0xe064, 0xdb5c, 0xe064, +0xdc88, 0xe165, 0xdc88, 0xe165, 0xdc88, 0xe165, 0xdd4c, 0xe1f3, 0xdd4c, 0xe1f3, 0xde6f, +0xe2d3, 0xde6f, 0xe2d3, 0xe0a6, 0xe4bd, 0xe0a6, 0xe4bd, 0xe1e2, 0xe5a2, 0xe1e2, 0xe5a2, +0xe488, 0xe7ed, 0xe488, 0xe7ed, 0xe488, 0xe7ed, 0xe7e9, 0xeaed, 0xe7e9, 0xeaed, 0xead2, +0xed73, 0xead2, 0xed73, 0xedc7, 0xf006, 0xedc7, 0xf006, 0xf01d, 0xf1fd, 0xf01d, 0xf1fd, +0xf2b2, 0xf439, 0xf2b2, 0xf439, 0xf490, 0xf5c5, 0xf490, 0xf5c5, 0xf490, 0xf5c5, 0xf67b, +0xf76a, 0xf67b, 0xf76a, 0xf96a, 0xfa1d, 0xf96a, 0xfa1d, 0xfbcf, 0xfc54, 0xfbcf, 0xfc54, +0xfdb7, 0xfe1b, 0xfdb7, 0xfe1b, 0xff44, 0xff95, 0xff44, 0xff95, 0xffcb, 0x18, 0xffcb, +0x18, 0xffcb, 0x18, 0x83, 0xda, 0x83, 0xda, 0x171, 0x1de, 0x171, 0x1de, +0x15c, 0x1ea, 0x15c, 0x1ea, 0x3e, 0xf7, 0x3e, 0xf7, 0xfe93, 0xff7e, 0xfe93, +0xff7e, 0xfe93, 0xff7e, 0xfd59, 0xfe7b, 0xfd59, 0xfe7b, 0xfbe0, 0xfd3a, 0xfbe0, 0xfd3a, +0xfa6a, 0xfbfd, 0xfa6a, 0xfbfd, 0xf9dc, 0xfba4, 0xf9dc, 0xfba4, 0xf972, 0xfb6b, 0xf972, +0xfb6b, 0xf9a3, 0xfbc3, 0xf9a3, 0xfbc3, 0xf9a3, 0xfbc3, 0xfaa2, 0xfce1, 0xfaa2, 0xfce1, +0xfae8, 0xfd3a, 0xfae8, 0xfd3a, 0xfa9e, 0xfcf6, 0xfa9e, 0xfcf6, 0xfa23, 0xfc74, 0xfa23, +0xfc74, 0xf929, 0xfb65, 0xf929, 0xfb65, 0xf7dd, 0xf9f6, 0xf7dd, 0xf9f6, 0xf7dd, 0xf9f6, +0xf6ab, 0xf894, 0xf6ab, 0xf894, 0xf6bc, 0xf86a, 0xf6bc, 0xf86a, 0xf744, 0xf8ad, 0xf744, +0xf8ad, 0xf8b1, 0xf9cd, 0xf8b1, 0xf9cd, 0xfab8, 0xfb81, 0xfab8, 0xfb81, 0xfab8, 0xfb81, +0xfc7c, 0xfcee, 0xfc7c, 0xfcee, 0xff72, 0xff8c, 0xff72, 0xff8c, 0x221, 0x1e6, 0x221, +0x1e6, 0x3a0, 0x313, 0x3a0, 0x313, 0x50e, 0x435, 0x50e, 0x435, 0x778, 0x65b, +0x778, 0x65b, 0x778, 0x65b, 0x9b6, 0x85f, 0x9b6, 0x85f, 0xa99, 0x914, 0xa99, +0x914, 0xbdb, 0xa32, 0xbdb, 0xa32, 0xd39, 0xb78, 0xd39, 0xb78, 0xddf, 0xc13, +0xddf, 0xc13, 0xe10, 0xc43, 0xe10, 0xc43, 0xe10, 0xc43, 0xd16, 0xb52, 0xd16, +0xb52, 0xc05, 0xa53, 0xc05, 0xa53, 0xa7b, 0x8e0, 0xa7b, 0x8e0, 0x815, 0x697, +0x815, 0x697, 0x6a6, 0x548, 0x6a6, 0x548, 0x6a6, 0x548, 0x519, 0x3da, 0x519, +0x3da, 0x544, 0x421, 0x544, 0x421, 0x5de, 0x4d5, 0x5de, 0x4d5, 0x463, 0x36d, +0x463, 0x36d, 0x39e, 0x2b6, 0x39e, 0x2b6, 0x33b, 0x257, 0x33b, 0x257, 0x33b, +0x257, 0x341, 0x259, 0x341, 0x259, 0x329, 0x234, 0x329, 0x234, 0x373, 0x269, +0x373, 0x269, 0x4cb, 0x3a3, 0x4cb, 0x3a3, 0x5b1, 0x465, 0x5b1, 0x465, 0x70e, +0x599, 0x70e, 0x599, 0x70e, 0x599, 0x81d, 0x67c, 0x81d, 0x67c, 0x816, 0x648, +0x816, 0x648, 0x846, 0x64c, 0x846, 0x64c, 0x883, 0x660, 0x883, 0x660, 0x94f, +0x708, 0x94f, 0x708, 0x94f, 0x708, 0xb2f, 0x8cd, 0xb2f, 0x8cd, 0xd11, 0xa9e, +0xd11, 0xa9e, 0xf09, 0xc8f, 0xf09, 0xc8f, 0xfe6, 0xd71, 0xfe6, 0xd71, 0xffb, +0xd98, 0xffb, 0xd98, 0x1079, 0xe35, 0x1079, 0xe35, 0x1079, 0xe35, 0x105b, 0xe43, +0x105b, 0xe43, 0x1019, 0xe39, 0x1019, 0xe39, 0xef5, 0xd56, 0xef5, 0xd56, 0xc67, +0xb13, 0xc67, 0xb13, 0xa56, 0x954, 0xa56, 0x954, 0x95c, 0x8b1, 0x95c, 0x8b1, +0x95c, 0x8b1, 0x840, 0x7ed, 0x840, 0x7ed, 0x71d, 0x722, 0x71d, 0x722, 0x646, +0x6a0, 0x646, 0x6a0, 0x53a, 0x5e3, 0x53a, 0x5e3, 0x2f7, 0x3e8, 0x2f7, 0x3e8, +0x2f7, 0x3e8, 0xffb4, 0xe4, 0xffb4, 0xe4, 0xfd30, 0xfe93, 0xfd30, 0xfe93, 0xfb50, +0xfcda, 0xfb50, 0xfcda, 0xfa72, 0xfc16, 0xfa72, 0xfc16, 0xf9d7, 0xfb88, 0xf9d7, 0xfb88, +0xf908, 0xfab8, 0xf908, 0xfab8, 0xf908, 0xfab8, 0xf8f9, 0xfa9e, 0xf8f9, 0xfa9e, 0xf916, +0xfaa5, 0xf916, 0xfaa5, 0xf901, 0xfa70, 0xf901, 0xfa70, 0xf90a, 0xfa53, 0xf90a, 0xfa53, +0xf9f3, 0xfb11, 0xf9f3, 0xfb11, 0xfb25, 0xfc15, 0xfb25, 0xfc15, 0xfb25, 0xfc15, 0xfc36, +0xfcf8, 0xfc36, 0xfcf8, 0xfd7f, 0xfe14, 0xfd7f, 0xfe14, 0xfe7e, 0xfeea, 0xfe7e, 0xfeea, +0xff9d, 0xffe7, 0xff9d, 0xffe7, 0xa5, 0xd4, 0xa5, 0xd4, 0xa5, 0xd4, 0xe5, +0x101, 0xe5, 0x101, 0x165, 0x178, 0x165, 0x178, 0x162, 0x175, 0x162, 0x175, +0xe0, 0xfd, 0xe0, 0xfd, 0x35, 0x65, 0x35, 0x65, 0xfeaa, 0xfef4, 0xfeaa, +0xfef4, 0xfeaa, 0xfef4, 0xfe16, 0xfe80, 0xfe16, 0xfe80, 0xfd35, 0xfdc5, 0xfd35, 0xfdc5, +0xfbcb, 0xfc83, 0xfbcb, 0xfc83, 0xfb0e, 0xfbee, 0xfb0e, 0xfbee, 0xfa4b, 0xfb53, 0xfa4b, +0xfb53, 0xfa1f, 0xfb4b, 0xfa1f, 0xfb4b, 0xfa1f, 0xfb4b, 0xf96b, 0xfab5, 0xf96b, 0xfab5, +0xf7fd, 0xf95f, 0xf7fd, 0xf95f, 0xf652, 0xf7c3, 0xf652, 0xf7c3, 0xf4b7, 0xf62c, 0xf4b7, +0xf62c, 0xf4d8, 0xf647, 0xf4d8, 0xf647, 0xf4d8, 0xf647, 0xf552, 0xf6b0, 0xf552, 0xf6b0, +0xf521, 0xf662, 0xf521, 0xf662, 0xf57e, 0xf697, 0xf57e, 0xf697, 0xf596, 0xf67e, 0xf596, +0xf67e, 0xf6e4, 0xf791, 0xf6e4, 0xf791, 0xf95e, 0xf9cb, 0xf95e, 0xf9cb, 0xf95e, 0xf9cb, +0xfadd, 0xfb03, 0xfadd, 0xfb03, 0xfcfc, 0xfcd7, 0xfcfc, 0xfcd7, 0xff75, 0xff04, 0xff75, +0xff04, 0x1d0, 0x113, 0x1d0, 0x113, 0x409, 0x304, 0x409, 0x304, 0x409, 0x304, +0x5c8, 0x47e, 0x5c8, 0x47e, 0x844, 0x6bb, 0x844, 0x6bb, 0xa9a, 0x8d9, 0xa9a, +0x8d9, 0xb72, 0x982, 0xb72, 0x982, 0xc9a, 0xa85, 0xc9a, 0xa85, 0xe07, 0xbd5, +0xe07, 0xbd5, 0xe07, 0xbd5, 0xe39, 0xbf5, 0xe39, 0xbf5, 0xe0d, 0xbc0, 0xe0d, +0xbc0, 0xe02, 0xbb5, 0xe02, 0xbb5, 0xee5, 0xc9f, 0xee5, 0xc9f, 0xfd0, 0xd99, +0xfd0, 0xd99, 0x10cd, 0xeaa, 0x10cd, 0xeaa, 0x10cd, 0xeaa, 0x1222, 0x1017, 0x1222, +0x1017, 0x12b1, 0x10c1, 0x12b1, 0x10c1, 0x131a, 0x1146, 0x131a, 0x1146, 0x1282, 0x10c9, +0x1282, 0x10c9, 0x1129, 0xf89, 0x1129, 0xf89, 0x1129, 0xf89, 0xfd5, 0xe4c, 0xfd5, +0xe4c, 0xf48, 0xdd1, 0xf48, 0xdd1, 0xf1b, 0xdb1, 0xf1b, 0xdb1, 0xe5f, 0xcfe, +0xe5f, 0xcfe, 0xe09, 0xcaa, 0xe09, 0xcaa, 0xda9, 0xc46, 0xda9, 0xc46, 0xda9, +0xc46, 0xdb8, 0xc4d, 0xdb8, 0xc4d, 0xe73, 0xcfa, 0xe73, 0xcfa, 0xf83, 0xdf8, +0xf83, 0xdf8, 0x1103, 0xf61, 0x1103, 0xf61, 0x120c, 0x1052, 0x120c, 0x1052, 0x138a, +0x11b4, 0x138a, 0x11b4, 0x138a, 0x11b4, 0x15c8, 0x13d5, 0x15c8, 0x13d5, 0x1726, 0x1516, +0x1726, 0x1516, 0x187e, 0x1652, 0x187e, 0x1652, 0x1995, 0x174e, 0x1995, 0x174e, 0x1a15, +0x17b4, 0x1a15, 0x17b4, 0x1a15, 0x17b4, 0x1b1c, 0x18a3, 0x1b1c, 0x18a3, 0x1b50, 0x18c4, +0x1b50, 0x18c4, 0x1b22, 0x1885, 0x1b22, 0x1885, 0x1b0e, 0x1864, 0x1b0e, 0x1864, 0x1b3d, +0x1888, 0x1b3d, 0x1888, 0x1be8, 0x192e, 0x1be8, 0x192e, 0x1be8, 0x192e, 0x1b6a, 0x18ad, +0x1b6a, 0x18ad, 0x1ae3, 0x1827, 0x1ae3, 0x1827, 0x1a21, 0x176a, 0x1a21, 0x176a, 0x1864, +0x15b5, 0x1864, 0x15b5, 0x1797, 0x14f4, 0x1797, 0x14f4, 0x1681, 0x13ed, 0x1681, 0x13ed, +0x1681, 0x13ed, 0x1528, 0x12a8, 0x1528, 0x12a8, 0x1436, 0x11cc, 0x1436, 0x11cc, 0x128a, +0x103b, 0x128a, 0x103b, 0x1225, 0xff4, 0x1225, 0xff4, 0x123a, 0x102c, 0x123a, 0x102c, +0x123a, 0x102c, 0x10f8, 0xf11, 0x10f8, 0xf11, 0xf67, 0xdac, 0xf67, 0xdac, 0xd98, +0xc0f, 0xd98, 0xc0f, 0xc26, 0xad2, 0xc26, 0xad2, 0xb51, 0xa38, 0xb51, 0xa38, +0xa1d, 0x944, 0xa1d, 0x944, 0xa1d, 0x944, 0x8c1, 0x82b, 0x8c1, 0x82b, 0x6fe, +0x6b0, 0x6fe, 0x6b0, 0x488, 0x484, 0x488, 0x484, 0x30c, 0x355, 0x30c, 0x355, +0x19c, 0x235, 0x19c, 0x235, 0xff7d, 0x65, 0xff7d, 0x65, 0xff7d, 0x65, 0xfd87, +0xfebd, 0xfd87, 0xfebd, 0xfb7b, 0xfcfe, 0xfb7b, 0xfcfe, 0xf8b4, 0xfa80, 0xf8b4, 0xfa80, +0xf4ec, 0xf6fc, 0xf4ec, 0xf6fc, 0xf213, 0xf463, 0xf213, 0xf463, 0xf213, 0xf463, 0xefe0, +0xf268, 0xefe0, 0xf268, 0xedff, 0xf0b6, 0xedff, 0xf0b6, 0xed1c, 0xeffb, 0xed1c, 0xeffb, +0xed11, 0xf00d, 0xed11, 0xf00d, 0xed41, 0xf04f, 0xed41, 0xf04f, 0xecd3, 0xefeb, 0xecd3, +0xefeb, 0xecd3, 0xefeb, 0xec58, 0xef6e, 0xec58, 0xef6e, 0xeb03, 0xee0d, 0xeb03, 0xee0d, +0xe9a0, 0xec96, 0xe9a0, 0xec96, 0xe8ed, 0xebc5, 0xe8ed, 0xebc5, 0xe824, 0xead6, 0xe824, +0xead6, 0xe7d0, 0xea56, 0xe7d0, 0xea56, 0xe7d0, 0xea56, 0xe815, 0xea69, 0xe815, 0xea69, +0xe970, 0xeb8e, 0xe970, 0xeb8e, 0xeafa, 0xecdf, 0xeafa, 0xecdf, 0xebef, 0xed99, 0xebef, +0xed99, 0xee2f, 0xef9d, 0xee2f, 0xef9d, 0xee2f, 0xef9d, 0xf0ea, 0xf21d, 0xf0ea, 0xf21d, +0xf2ea, 0xf3e4, 0xf2ea, 0xf3e4, 0xf543, 0xf606, 0xf543, 0xf606, 0xf6e5, 0xf773, 0xf6e5, +0xf773, 0xf8e3, 0xf93f, 0xf8e3, 0xf93f, 0xfbd9, 0xfc07, 0xfbd9, 0xfc07, 0xfbd9, 0xfc07, +0xfded, 0xfdef, 0xfded, 0xfdef, 0xff51, 0xff2b, 0xff51, 0xff2b, 0xffe0, 0xff95, 0xffe0, +0xff95, 0xb1, 0x41, 0xb1, 0x41, 0x142, 0xaf, 0x142, 0xaf, 0x8b, 0xffd7, +0x8b, 0xffd7, 0x8b, 0xffd7, 0xf5, 0x20, 0xf5, 0x20, 0x1c8, 0xd1, 0x1c8, +0xd1, 0x204, 0xec, 0x204, 0xec, 0x372, 0x239, 0x372, 0x239, 0x45f, 0x305, +0x45f, 0x305, 0x45f, 0x305, 0x460, 0x2e6, 0x460, 0x2e6, 0x48c, 0x2f2, 0x48c, +0x2f2, 0x3cb, 0x213, 0x3cb, 0x213, 0x3a0, 0x1cd, 0x3a0, 0x1cd, 0x43a, 0x251, +0x43a, 0x251, 0x4d2, 0x2d8, 0x4d2, 0x2d8, 0x4d2, 0x2d8, 0x571, 0x36c, 0x571, +0x36c, 0x518, 0x311, 0x518, 0x311, 0x4a0, 0x2a0, 0x4a0, 0x2a0, 0x45b, 0x26e, +0x45b, 0x26e, 0x332, 0x163, 0x332, 0x163, 0x18c, 0xffe8, 0x18c, 0xffe8, 0x18c, +0xffe8, 0xffcf, 0xfe64, 0xffcf, 0xfe64, 0xfe48, 0xfd23, 0xfe48, 0xfd23, 0xfdb9, 0xfce6, +0xfdb9, 0xfce6, 0xfcfb, 0xfc88, 0xfcfb, 0xfc88, 0xfb4c, 0xfb44, 0xfb4c, 0xfb44, 0xfb4c, +0xfb44, 0xf926, 0xf993, 0xf926, 0xf993, 0xf739, 0xf823, 0xf739, 0xf823, 0xf4e1, 0xf64f, +0xf4e1, 0xf64f, 0xf15d, 0xf351, 0xf15d, 0xf351, 0xeded, 0xf069, 0xeded, 0xf069, 0xea38, +0xed3b, 0xea38, 0xed3b, 0xea38, 0xed3b, 0xe659, 0xe9dd, 0xe659, 0xe9dd, 0xe319, 0xe718, +0xe319, 0xe718, 0xe0ad, 0xe51d, 0xe0ad, 0xe51d, 0xdf11, 0xe3e6, 0xdf11, 0xe3e6, 0xde2e, +0xe35a, 0xde2e, 0xe35a, 0xdd90, 0xe303, 0xdd90, 0xe303, 0xdd90, 0xe303, 0xdbfe, 0xe1a8, +0xdbfe, 0xe1a8, 0xdb12, 0xe0e1, 0xdb12, 0xe0e1, 0xda72, 0xe054, 0xda72, 0xe054, 0xd8f6, +0xdeda, 0xd8f6, 0xdeda, 0xd7e3, 0xddb9, 0xd7e3, 0xddb9, 0xd7e3, 0xddb9, 0xd6ce, 0xdc87, +0xd6ce, 0xdc87, 0xd6f8, 0xdc87, 0xd6f8, 0xdc87, 0xd782, 0xdcdb, 0xd782, 0xdcdb, 0xd75c, +0xdc76, 0xd75c, 0xdc76, 0xd8f8, 0xddcc, 0xd8f8, 0xddcc, 0xdaba, 0xdf45, 0xdaba, 0xdf45, +0xdaba, 0xdf45, 0xdcb8, 0xe0f7, 0xdcb8, 0xe0f7, 0xdf93, 0xe388, 0xdf93, 0xe388, 0xe19e, +0xe54b, 0xe19e, 0xe54b, 0xe44e, 0xe7b7, 0xe44e, 0xe7b7, 0xe73f, 0xea6a, 0xe73f, 0xea6a, +0xe73f, 0xea6a, 0xe945, 0xec3a, 0xe945, 0xec3a, 0xeace, 0xed93, 0xeace, 0xed93, 0xec33, +0xeecf, 0xec33, 0xeecf, 0xee1a, 0xf095, 0xee1a, 0xf095, 0xf005, 0xf264, 0xf005, 0xf264, +0xf111, 0xf359, 0xf111, 0xf359, 0xf111, 0xf359, 0xf207, 0xf43a, 0xf207, 0xf43a, 0xf2a8, +0xf4c6, 0xf2a8, 0xf4c6, 0xf2fe, 0xf507, 0xf2fe, 0xf507, 0xf4be, 0xf6ae, 0xf4be, 0xf6ae, +0xf62e, 0xf800, 0xf62e, 0xf800, 0xf710, 0xf8bd, 0xf710, 0xf8bd, 0xf710, 0xf8bd, 0xf84d, +0xf9cc, 0xf84d, 0xf9cc, 0xf961, 0xfaa7, 0xf961, 0xfaa7, 0xfae5, 0xfbe8, 0xfae5, 0xfbe8, +0xfca3, 0xfd56, 0xfca3, 0xfd56, 0xfec6, 0xff1f, 0xfec6, 0xff1f, 0xfec6, 0xff1f, 0xea, +0xde, 0xea, 0xde, 0x2ed, 0x272, 0x2ed, 0x272, 0x53e, 0x44e, 0x53e, 0x44e, +0x7ae, 0x643, 0x7ae, 0x643, 0xa69, 0x87f, 0xa69, 0x87f, 0xd89, 0xb23, 0xd89, +0xb23, 0xd89, 0xb23, 0x104f, 0xd6e, 0x104f, 0xd6e, 0x12cb, 0xf77, 0x12cb, 0xf77, +0x15e2, 0x1225, 0x15e2, 0x1225, 0x18e4, 0x14cb, 0x18e4, 0x14cb, 0x1b3e, 0x16d8, 0x1b3e, +0x16d8, 0x1cf4, 0x1854, 0x1cf4, 0x1854, 0x1cf4, 0x1854, 0x1ef8, 0x1a32, 0x1ef8, 0x1a32, +0x2078, 0x1ba2, 0x2078, 0x1ba2, 0x2037, 0x1b67, 0x2037, 0x1b67, 0x1fa2, 0x1aee, 0x1fa2, +0x1aee, 0x1f0a, 0x1a89, 0x1f0a, 0x1a89, 0x1f0a, 0x1a89, 0x1dda, 0x199f, 0x1dda, 0x199f, +0x1bd7, 0x17f6, 0x1bd7, 0x17f6, 0x193b, 0x15c3, 0x193b, 0x15c3, 0x158b, 0x128b, 0x158b, +0x128b, 0x120b, 0xf8c, 0x120b, 0xf8c, 0xeee, 0xcf7, 0xeee, 0xcf7, 0xeee, 0xcf7, +0xb1d, 0x9b1, 0xb1d, 0x9b1, 0x8c2, 0x7e0, 0x8c2, 0x7e0, 0x6a2, 0x644, 0x6a2, +0x644, 0x415, 0x435, 0x415, 0x435, 0x1ea, 0x27c, 0x1ea, 0x27c, 0xfe9a, 0xff91, +0xfe9a, 0xff91, 0xfe9a, 0xff91, 0xfbe5, 0xfd31, 0xfbe5, 0xfd31, 0xf9c5, 0xfb54, 0xf9c5, +0xfb54, 0xf748, 0xf909, 0xf748, 0xf909, 0xf5ad, 0xf78d, 0xf5ad, 0xf78d, 0xf427, 0xf614, +0xf427, 0xf614, 0xf427, 0xf614, 0xf35b, 0xf545, 0xf35b, 0xf545, 0xf2c8, 0xf49f, 0xf2c8, +0xf49f, 0xf18a, 0xf33f, 0xf18a, 0xf33f, 0xf159, 0xf2e2, 0xf159, 0xf2e2, 0xf1d2, 0xf326, +0xf1d2, 0xf326, 0xf283, 0xf39a, 0xf283, 0xf39a, 0xf283, 0xf39a, 0xf386, 0xf45e, 0xf386, +0xf45e, 0xf576, 0xf60e, 0xf576, 0xf60e, 0xf834, 0xf88e, 0xf834, 0xf88e, 0xfab4, 0xfad2, +0xfab4, 0xfad2, 0xfd6e, 0xfd57, 0xfd6e, 0xfd57, 0xffb2, 0xff6c, 0xffb2, 0xff6c, 0xffb2, +0xff6c, 0xeb, 0x7d, 0xeb, 0x7d, 0x23b, 0x1ae, 0x23b, 0x1ae, 0x38f, 0x2ea, +0x38f, 0x2ea, 0x3c9, 0x313, 0x3c9, 0x313, 0x3b4, 0x2f3, 0x3b4, 0x2f3, 0x3b4, +0x2f3, 0x3b4, 0x2ee, 0x3b4, 0x2ee, 0x3a5, 0x2db, 0x3a5, 0x2db, 0x3fd, 0x332, +0x3fd, 0x332, 0x411, 0x344, 0x411, 0x344, 0x3f4, 0x322, 0x3f4, 0x322, 0x387, +0x2ad, 0x387, 0x2ad, 0x387, 0x2ad, 0x336, 0x24e, 0x336, 0x24e, 0x3bd, 0x2c0, +0x3bd, 0x2c0, 0x406, 0x2ed, 0x406, 0x2ed, 0x500, 0x3c4, 0x500, 0x3c4, 0x72b, +0x5c3, 0x72b, 0x5c3, 0x888, 0x6ef, 0x888, 0x6ef, 0x888, 0x6ef, 0x9f1, 0x822, +0x9f1, 0x822, 0xc37, 0xa2d, 0xc37, 0xa2d, 0xe6e, 0xc28, 0xe6e, 0xc28, 0x100e, +0xd8c, 0x100e, 0xd8c, 0x1163, 0xeaa, 0x1163, 0xeaa, 0x1163, 0xeaa, 0x134b, 0x105f, +0x134b, 0x105f, 0x147c, 0x1167, 0x147c, 0x1167, 0x14b5, 0x1182, 0x14b5, 0x1182, 0x14c1, +0x117f, 0x14c1, 0x117f, 0x1525, 0x11e3, 0x1525, 0x11e3, 0x156f, 0x123f, 0x156f, 0x123f, +0x156f, 0x123f, 0x14f2, 0x11e6, 0x14f2, 0x11e6, 0x1490, 0x11bc, 0x1490, 0x11bc, 0x1357, +0x10ce, 0x1357, 0x10ce, 0x120b, 0xfdf, 0x120b, 0xfdf, 0x103c, 0xe80, 0x103c, 0xe80, +0xca6, 0xb69, 0xca6, 0xb69, 0xca6, 0xb69, 0x96c, 0x8ba, 0x96c, 0x8ba, 0x5ca, +0x5ad, 0x5ca, 0x5ad, 0x1f7, 0x275, 0x1f7, 0x275, 0xff12, 0x2f, 0xff12, 0x2f, +0xfc23, 0xfddd, 0xfc23, 0xfddd, 0xfc23, 0xfddd, 0xf9bb, 0xfc0d, 0xf9bb, 0xfc0d, 0xf772, +0xfa54, 0xf772, 0xfa54, 0xf512, 0xf878, 0xf512, 0xf878, 0xf22e, 0xf607, 0xf22e, 0xf607, +0xee98, 0xf2d3, 0xee98, 0xf2d3, 0xebdd, 0xf063, 0xebdd, 0xf063, 0xebdd, 0xf063, 0xe890, +0xed4d, 0xe890, 0xed4d, 0xe562, 0xea3d, 0xe562, 0xea3d, 0xe376, 0xe858, 0xe376, 0xe858, +0xe1fc, 0xe6cd, 0xe1fc, 0xe6cd, 0xe1a3, 0xe64b, 0xe1a3, 0xe64b, 0xe178, 0xe5e2, 0xe178, +0xe5e2, 0xe178, 0xe5e2, 0xe263, 0xe67c, 0xe263, 0xe67c, 0xe47c, 0xe832, 0xe47c, 0xe832, +0xe6ac, 0xe9f2, 0xe6ac, 0xe9f2, 0xe9f6, 0xecc0, 0xe9f6, 0xecc0, 0xed2a, 0xef70, 0xed2a, +0xef70, 0xed2a, 0xef70, 0xefca, 0xf187, 0xefca, 0xf187, 0xf342, 0xf474, 0xf342, 0xf474, +0xf67d, 0xf724, 0xf67d, 0xf724, 0xf89e, 0xf8be, 0xf89e, 0xf8be, 0xfb17, 0xfab6, 0xfb17, +0xfab6, 0xfd02, 0xfc27, 0xfd02, 0xfc27, 0xfd02, 0xfc27, 0xfe70, 0xfd24, 0xfe70, 0xfd24, +0xdb, 0xff27, 0xdb, 0xff27, 0x38d, 0x17b, 0x38d, 0x17b, 0x66f, 0x408, 0x66f, +0x408, 0x98b, 0x6d9, 0x98b, 0x6d9, 0xcfe, 0xa0a, 0xcfe, 0xa0a, 0xcfe, 0xa0a, +0xff0, 0xcc0, 0xff0, 0xcc0, 0x1150, 0xdea, 0x1150, 0xdea, 0x12c8, 0xf32, 0x12c8, +0xf32, 0x144c, 0x1088, 0x144c, 0x1088, 0x1501, 0x1112, 0x1501, 0x1112, 0x1501, 0x1112, +0x169c, 0x1281, 0x169c, 0x1281, 0x18f2, 0x14ac, 0x18f2, 0x14ac, 0x1b0c, 0x169a, 0x1b0c, +0x169a, 0x1ca1, 0x1801, 0x1ca1, 0x1801, 0x1ebc, 0x19ee, 0x1ebc, 0x19ee, 0x2167, 0x1c69, +0x2167, 0x1c69, 0x2167, 0x1c69, 0x22f3, 0x1dc5, 0x22f3, 0x1dc5, 0x2464, 0x1f06, 0x2464, +0x1f06, 0x251c, 0x1f91, 0x251c, 0x1f91, 0x25ca, 0x2016, 0x25ca, 0x2016, 0x27b0, 0x21d7, +0x27b0, 0x21d7, 0x27b0, 0x21d7, 0x297e, 0x2388, 0x297e, 0x2388, 0x2b37, 0x252c, 0x2b37, +0x252c, 0x2c40, 0x262b, 0x2c40, 0x262b, 0x2d48, 0x2735, 0x2d48, 0x2735, 0x2daa, 0x27a6, +0x2daa, 0x27a6, 0x2cd9, 0x26f2, 0x2cd9, 0x26f2, 0x2cd9, 0x26f2, 0x2c32, 0x2676, 0x2c32, +0x2676, 0x2a8d, 0x250c, 0x2a8d, 0x250c, 0x289b, 0x2363, 0x289b, 0x2363, 0x26ee, 0x220d, +0x26ee, 0x220d, 0x24fb, 0x207f, 0x24fb, 0x207f, 0x22ef, 0x1ee3, 0x22ef, 0x1ee3, 0x22ef, +0x1ee3, 0x2026, 0x1c94, 0x2026, 0x1c94, 0x1e3c, 0x1b2c, 0x1e3c, 0x1b2c, 0x1c19, 0x198f, +0x1c19, 0x198f, 0x1956, 0x1758, 0x1956, 0x1758, 0x17c4, 0x1651, 0x17c4, 0x1651, 0x17c4, +0x1651, 0x1491, 0x13a9, 0x1491, 0x13a9, 0x114b, 0x10ea, 0x114b, 0x10ea, 0xe40, 0xe60, +0xe40, 0xe60, 0xa2b, 0xac4, 0xa2b, 0xac4, 0x6cc, 0x7d6, 0x6cc, 0x7d6, 0x2ce, +0x43e, 0x2ce, 0x43e, 0x2ce, 0x43e, 0xff97, 0x162, 0xff97, 0x162, 0xfd08, 0xff22, +0xfd08, 0xff22, 0xfa4e, 0xfcac, 0xfa4e, 0xfcac, 0xf8cf, 0xfb64, 0xf8cf, 0xfb64, 0xf6f9, +0xf9bb, 0xf6f9, 0xf9bb, 0xf4b3, 0xf797, 0xf4b3, 0xf797, 0xf4b3, 0xf797, 0xf36a, 0xf666, +0xf36a, 0xf666, 0xf277, 0xf582, 0xf277, 0xf582, 0xf164, 0xf476, 0xf164, 0xf476, 0xf08a, +0xf39e, 0xf08a, 0xf39e, 0xef22, 0xf231, 0xef22, 0xf231, 0xef22, 0xf231, 0xee11, 0xf118, +0xee11, 0xf118, 0xed9e, 0xf099, 0xed9e, 0xf099, 0xecfa, 0xefe5, 0xecfa, 0xefe5, 0xec6a, +0xef43, 0xec6a, 0xef43, 0xebeb, 0xeeb0, 0xebeb, 0xeeb0, 0xebe9, 0xee97, 0xebe9, 0xee97, +0xebe9, 0xee97, 0xeb5b, 0xedf0, 0xeb5b, 0xedf0, 0xea94, 0xed0d, 0xea94, 0xed0d, 0xeaa3, +0xecfd, 0xeaa3, 0xecfd, 0xea2e, 0xec66, 0xea2e, 0xec66, 0xea02, 0xec13, 0xea02, 0xec13, +0xeb40, 0xed25, 0xeb40, 0xed25, 0xeb40, 0xed25, 0xecd3, 0xee86, 0xecd3, 0xee86, 0xee4c, +0xefc8, 0xee4c, 0xefc8, 0xefd7, 0xf116, 0xefd7, 0xf116, 0xf243, 0xf340, 0xf243, 0xf340, +0xf492, 0xf548, 0xf492, 0xf548, 0xf492, 0xf548, 0xf612, 0xf67c, 0xf612, 0xf67c, 0xf810, +0xf829, 0xf810, 0xf829, 0xf976, 0xf93c, 0xf976, 0xf93c, 0xfb54, 0xfac6, 0xfb54, 0xfac6, +0xfe42, 0xfd5f, 0xfe42, 0xfd5f, 0x9b, 0xff65, 0x9b, 0xff65, 0x9b, 0xff65, 0x2b6, +0x12f, 0x2b6, 0x12f, 0x510, 0x33f, 0x510, 0x33f, 0x811, 0x5fc, 0x811, 0x5fc, +0xa9e, 0x84d, 0xa9e, 0x84d, 0xd03, 0xa80, 0xd03, 0xa80, 0xed8, 0xc2e, 0xed8, +0xc2e, 0xed8, 0xc2e, 0xebc, 0xbf8, 0xebc, 0xbf8, 0xefb, 0xc29, 0xefb, 0xc29, +0xf3f, 0xc6c, 0xf3f, 0xc6c, 0xef9, 0xc33, 0xef9, 0xc33, 0xe21, 0xb74, 0xe21, +0xb74, 0xe21, 0xb74, 0xc3a, 0x9b4, 0xc3a, 0x9b4, 0xb7e, 0x929, 0xb7e, 0x929, +0xa01, 0x7e7, 0xa01, 0x7e7, 0x897, 0x6c0, 0x897, 0x6c0, 0x8ac, 0x720, 0x8ac, +0x720, 0x6f0, 0x5b5, 0x6f0, 0x5b5, 0x6f0, 0x5b5, 0x5b9, 0x4d1, 0x5b9, 0x4d1, +0x51e, 0x48b, 0x51e, 0x48b, 0x3de, 0x3a2, 0x3de, 0x3a2, 0x26a, 0x283, 0x26a, +0x283, 0xffb5, 0x20, 0xffb5, 0x20, 0xfd79, 0xfe32, 0xfd79, 0xfe32, 0xfd79, 0xfe32, +0xfb38, 0xfc3c, 0xfb38, 0xfc3c, 0xf825, 0xf96f, 0xf825, 0xf96f, 0xf5b9, 0xf744, 0xf5b9, +0xf744, 0xf320, 0xf4e7, 0xf320, 0xf4e7, 0xf04b, 0xf24b, 0xf04b, 0xf24b, 0xf04b, 0xf24b, +0xee3a, 0xf06e, 0xee3a, 0xf06e, 0xec1f, 0xee84, 0xec1f, 0xee84, 0xea3f, 0xecd3, 0xea3f, +0xecd3, 0xe891, 0xeb50, 0xe891, 0xeb50, 0xe71b, 0xea07, 0xe71b, 0xea07, 0xe630, 0xe946, +0xe630, 0xe946, 0xe630, 0xe946, 0xe520, 0xe861, 0xe520, 0xe861, 0xe48d, 0xe7fa, 0xe48d, +0xe7fa, 0xe380, 0xe718, 0xe380, 0xe718, 0xe1f1, 0xe5b6, 0xe1f1, 0xe5b6, 0xe08a, 0xe47a, +0xe08a, 0xe47a, 0xdead, 0xe2c8, 0xdead, 0xe2c8, 0xdead, 0xe2c8, 0xdd3b, 0xe17f, 0xdd3b, +0xe17f, 0xdc53, 0xe0bc, 0xdc53, 0xe0bc, 0xdb30, 0xdfbc, 0xdb30, 0xdfbc, 0xda24, 0xdecd, +0xda24, 0xdecd, 0xd9a9, 0xde67, 0xd9a9, 0xde67, 0xd9a9, 0xde67, 0xd9c8, 0xde94, 0xd9c8, +0xde94, 0xda35, 0xdf06, 0xda35, 0xdf06, 0xda3e, 0xdf0a, 0xda3e, 0xdf0a, 0xdaf8, 0xdfb3, +0xdaf8, 0xdfb3, 0xdc0d, 0xe0ae, 0xdc0d, 0xe0ae, 0xdcab, 0xe126, 0xdcab, 0xe126, 0xdcab, +0xe126, 0xdd5a, 0xe1a4, 0xdd5a, 0xe1a4, 0xde19, 0xe228, 0xde19, 0xe228, 0xe039, 0xe405, +0xe039, 0xe405, 0xe304, 0xe685, 0xe304, 0xe685, 0xe599, 0xe8ca, 0xe599, 0xe8ca, 0xe8b4, +0xeb92, 0xe8b4, 0xeb92, 0xe8b4, 0xeb92, 0xed37, 0xefbf, 0xed37, 0xefbf, 0xf210, 0xf446, +0xf210, 0xf446, 0xf507, 0xf6ed, 0xf507, 0xf6ed, 0xf7c5, 0xf961, 0xf7c5, 0xf961, 0xfa0c, +0xfb67, 0xfa0c, 0xfb67, 0xfa0c, 0xfb67, 0xfb93, 0xfcb7, 0xfb93, 0xfcb7, 0xfdd0, 0xfec9, +0xfdd0, 0xfec9, 0xfed6, 0xffaf, 0xfed6, 0xffaf, 0xff6d, 0x35, 0xff6d, 0x35, 0xffe4, +0xa8, 0xffe4, 0xa8, 0xff4a, 0x17, 0xff4a, 0x17, 0xff4a, 0x17, 0xffe9, 0xcb, +0xffe9, 0xcb, 0x2b, 0x12d, 0x2b, 0x12d, 0x30, 0x15b, 0x30, 0x15b, 0x69, +0x1c3, 0x69, 0x1c3, 0xfee2, 0x6f, 0xfee2, 0x6f, 0xfe11, 0xffd2, 0xfe11, 0xffd2, +0xfe11, 0xffd2, 0xfdf4, 0xffe8, 0xfdf4, 0xffe8, 0xfe4f, 0x72, 0xfe4f, 0x72, 0xfee0, +0x12b, 0xfee0, 0x12b, 0xfeaa, 0x113, 0xfeaa, 0x113, 0xfeff, 0x17a, 0xfeff, 0x17a, +0xfeff, 0x17a, 0xfee9, 0x16a, 0xfee9, 0x16a, 0xfec5, 0x13d, 0xfec5, 0x13d, 0xfe9b, +0xfb, 0xfe9b, 0xfb, 0xfd91, 0xffcb, 0xfd91, 0xffcb, 0xfd3c, 0xff41, 0xfd3c, 0xff41, +0xfd98, 0xff5b, 0xfd98, 0xff5b, 0xfd98, 0xff5b, 0xfde1, 0xff58, 0xfde1, 0xff58, 0xfe30, +0xff50, 0xfe30, 0xff50, 0xfe7a, 0xff3e, 0xfe7a, 0xff3e, 0xff72, 0xffd5, 0xff72, 0xffd5, +0xa2, 0xa4, 0xa2, 0xa4, 0xa2, 0xa4, 0x199, 0x13c, 0x199, 0x13c, 0x3de, +0x328, 0x3de, 0x328, 0x635, 0x52d, 0x635, 0x52d, 0x7e7, 0x699, 0x7e7, 0x699, +0x9a3, 0x81b, 0x9a3, 0x81b, 0x9e6, 0x830, 0x9e6, 0x830, 0x9e6, 0x830, 0x993, +0x7bf, 0x993, 0x7bf, 0x963, 0x780, 0x963, 0x780, 0x84d, 0x669, 0x84d, 0x669, +0x6a0, 0x4c9, 0x6a0, 0x4c9, 0x550, 0x391, 0x550, 0x391, 0x526, 0x38a, 0x526, +0x38a, 0x526, 0x38a, 0x491, 0x31e, 0x491, 0x31e, 0x34b, 0x207, 0x34b, 0x207, +0x28b, 0x177, 0x28b, 0x177, 0x1a3, 0xbe, 0x1a3, 0xbe, 0x74, 0xffb9, 0x74, +0xffb9, 0x74, 0xffb9, 0xfecf, 0xfe38, 0xfecf, 0xfe38, 0xfd82, 0xfd05, 0xfd82, 0xfd05, +0xfcd2, 0xfc63, 0xfcd2, 0xfc63, 0xfcba, 0xfc4d, 0xfcba, 0xfc4d, 0xfd9d, 0xfd23, 0xfd9d, +0xfd23, 0xfe50, 0xfdbc, 0xfe50, 0xfdbc, 0xfe50, 0xfdbc, 0xffe8, 0xff2c, 0xffe8, 0xff2c, +0x26a, 0x179, 0x26a, 0x179, 0x424, 0x2f3, 0x424, 0x2f3, 0x565, 0x3eb, 0x565, +0x3eb, 0x624, 0x45c, 0x624, 0x45c, 0x730, 0x517, 0x730, 0x517, 0x730, 0x517, +0x93c, 0x6d1, 0x93c, 0x6d1, 0xab8, 0x7fe, 0xab8, 0x7fe, 0xc89, 0x987, 0xc89, +0x987, 0xf13, 0xbd3, 0xf13, 0xbd3, 0x1191, 0xe1f, 0x1191, 0xe1f, 0x1191, 0xe1f, +0x14ab, 0x1115, 0x14ab, 0x1115, 0x162d, 0x1283, 0x162d, 0x1283, 0x16ae, 0x1303, 0x16ae, +0x1303, 0x171c, 0x1381, 0x171c, 0x1381, 0x16c6, 0x134d, 0x16c6, 0x134d, 0x1651, 0x130a, +0x1651, 0x130a, 0x1651, 0x130a, 0x1518, 0x1214, 0x1518, 0x1214, 0x141d, 0x1167, 0x141d, +0x1167, 0x11ef, 0xf94, 0x11ef, 0xf94, 0xe82, 0xc88, 0xe82, 0xc88, 0xc5e, 0xaca, +0xc5e, 0xaca, 0xa7e, 0x952, 0xa7e, 0x952, 0xa7e, 0x952, 0x964, 0x89e, 0x964, +0x89e, 0x8c8, 0x864, 0x8c8, 0x864, 0x6f4, 0x6e9, 0x6f4, 0x6e9, 0x55f, 0x5a3, +0x55f, 0x5a3, 0x441, 0x4c9, 0x441, 0x4c9, 0x441, 0x4c9, 0x2ea, 0x3a8, 0x2ea, +0x3a8, 0x1cb, 0x2b0, 0x1cb, 0x2b0, 0xffd5, 0xd4, 0xffd5, 0xd4, 0xfdfd, 0xff08, +0xfdfd, 0xff08, 0xfd34, 0xfe3e, 0xfd34, 0xfe3e, 0xfc9d, 0xfd9c, 0xfc9d, 0xfd9c, 0xfc9d, +0xfd9c, 0xfc9b, 0xfd85, 0xfc9b, 0xfd85, 0xfc52, 0xfd22, 0xfc52, 0xfd22, 0xfc6e, 0xfd21, +0xfc6e, 0xfd21, 0xfdad, 0xfe40, 0xfdad, 0xfe40, 0xfdef, 0xfe66, 0xfdef, 0xfe66, 0xfdfb, +0xfe5b, 0xfdfb, 0xfe5b, 0xfdfb, 0xfe5b, 0xfee2, 0xff31, 0xfee2, 0xff31, 0xff4b, 0xff93, +0xff4b, 0xff93, 0xfed0, 0xff1a, 0xfed0, 0xff1a, 0xfe2d, 0xfe86, 0xfe2d, 0xfe86, 0xfe0e, +0xfe81, 0xfe0e, 0xfe81, 0xfe0e, 0xfe81, 0xfd2d, 0xfdc5, 0xfd2d, 0xfdc5, 0xfc24, 0xfceb, +0xfc24, 0xfceb, 0xfbc9, 0xfcc9, 0xfbc9, 0xfcc9, 0xfa51, 0xfb8f, 0xfa51, 0xfb8f, 0xf89e, +0xfa20, 0xf89e, 0xfa20, 0xf705, 0xf8cb, 0xf705, 0xf8cb, 0xf705, 0xf8cb, 0xf506, 0xf70c, +0xf506, 0xf70c, 0xf31d, 0xf560, 0xf31d, 0xf560, 0xf1ca, 0xf441, 0xf1ca, 0xf441, 0xf119, +0xf3b9, 0xf119, 0xf3b9, 0xefb8, 0xf272, 0xefb8, 0xf272, 0xef18, 0xf1dc, 0xef18, 0xf1dc, +0xef18, 0xf1dc, 0xef0e, 0xf1cb, 0xef0e, 0xf1cb, 0xee8b, 0xf12c, 0xee8b, 0xf12c, 0xef06, +0xf17a, 0xef06, 0xf17a, 0xef9c, 0xf1cf, 0xef9c, 0xf1cf, 0xf08c, 0xf26c, 0xf08c, 0xf26c, +0xf08c, 0xf26c, 0xf1e8, 0xf364, 0xf1e8, 0xf364, 0xf38e, 0xf499, 0xf38e, 0xf499, 0xf629, +0xf6b7, 0xf629, 0xf6b7, 0xf848, 0xf851, 0xf848, 0xf851, 0xfb3c, 0xfabb, 0xfb3c, 0xfabb, +0xff73, 0xfe67, 0xff73, 0xfe67, 0xff73, 0xfe67, 0x329, 0x195, 0x329, 0x195, 0x671, +0x45c, 0x671, 0x45c, 0x8ed, 0x65f, 0x8ed, 0x65f, 0xaee, 0x7f4, 0xaee, 0x7f4, +0xc8b, 0x935, 0xc8b, 0x935, 0xd7b, 0x9d9, 0xd7b, 0x9d9, 0xd7b, 0x9d9, 0xf17, +0xb3a, 0xf17, 0xb3a, 0x1096, 0xc91, 0x1096, 0xc91, 0x11e7, 0xdce, 0x11e7, 0xdce, +0x1421, 0x1004, 0x1421, 0x1004, 0x1528, 0x1118, 0x1528, 0x1118, 0x1528, 0x1118, 0x1615, +0x1220, 0x1615, 0x1220, 0x1745, 0x1378, 0x1745, 0x1378, 0x16e1, 0x1344, 0x16e1, 0x1344, +0x16f6, 0x1390, 0x16f6, 0x1390, 0x1772, 0x1446, 0x1772, 0x1446, 0x175e, 0x146d, 0x175e, +0x146d, 0x175e, 0x146d, 0x16c8, 0x140e, 0x16c8, 0x140e, 0x154a, 0x12c1, 0x154a, 0x12c1, +0x13c6, 0x1168, 0x13c6, 0x1168, 0x125d, 0x1020, 0x125d, 0x1020, 0x1122, 0xefb, 0x1122, +0xefb, 0x106f, 0xe53, 0x106f, 0xe53, 0x106f, 0xe53, 0xf54, 0xd36, 0xf54, 0xd36, +0xe58, 0xc2f, 0xe58, 0xc2f, 0xe30, 0xbf0, 0xe30, 0xbf0, 0xe26, 0xbc8, 0xe26, +0xbc8, 0xf51, 0xccd, 0xf51, 0xccd, 0xf51, 0xccd, 0x10f0, 0xe42, 0x10f0, 0xe42, +0x1204, 0xf2b, 0x1204, 0xf2b, 0x1377, 0x1071, 0x1377, 0x1071, 0x151c, 0x11ee, 0x151c, +0x11ee, 0x16cd, 0x137b, 0x16cd, 0x137b, 0x1748, 0x13d9, 0x1748, 0x13d9, 0x1748, 0x13d9, +0x17ca, 0x1448, 0x17ca, 0x1448, 0x1907, 0x157c, 0x1907, 0x157c, 0x195e, 0x15d6, 0x195e, +0x15d6, 0x19bf, 0x1645, 0x19bf, 0x1645, 0x19b8, 0x1658, 0x19b8, 0x1658, 0x190e, 0x15d3, +0x190e, 0x15d3, 0x190e, 0x15d3, 0x1801, 0x14f5, 0x1801, 0x14f5, 0x1731, 0x145d, 0x1731, +0x145d, 0x1613, 0x137d, 0x1613, 0x137d, 0x1426, 0x11d3, 0x1426, 0x11d3, 0x13f1, 0x11e4, +0x13f1, 0x11e4, 0x13f1, 0x11e4, 0x1324, 0x115d, 0x1324, 0x115d, 0x114d, 0xfca, 0x114d, +0xfca, 0x1036, 0xef3, 0x1036, 0xef3, 0xebf, 0xdb6, 0xebf, 0xdb6, 0xda3, 0xccd, +0xda3, 0xccd, 0xc57, 0xbab, 0xc57, 0xbab, 0xc57, 0xbab, 0xb78, 0xaed, 0xb78, +0xaed, 0xb7b, 0xb09, 0xb7b, 0xb09, 0xb15, 0xab2, 0xb15, 0xab2, 0xb36, 0xada, +0xb36, 0xada, 0xb63, 0xb07, 0xb63, 0xb07, 0xb63, 0xb07, 0xad4, 0xa72, 0xad4, +0xa72, 0xaa7, 0xa3b, 0xaa7, 0xa3b, 0xa2b, 0x9b4, 0xa2b, 0x9b4, 0x97d, 0x8fb, +0x97d, 0x8fb, 0x8ee, 0x864, 0x8ee, 0x864, 0x7de, 0x74f, 0x7de, 0x74f, 0x7de, +0x74f, 0x74a, 0x6bd, 0x74a, 0x6bd, 0x56b, 0x4e7, 0x56b, 0x4e7, 0x389, 0x318, +0x389, 0x318, 0x30d, 0x2b8, 0x30d, 0x2b8, 0x15d, 0x12f, 0x15d, 0x12f, 0x3d, +0x3f, 0x3d, 0x3f, 0x3d, 0x3f, 0xfea6, 0xfee2, 0xfea6, 0xfee2, 0xfb95, 0xfc13, +0xfb95, 0xfc13, 0xf93c, 0xfa03, 0xf93c, 0xfa03, 0xf6f1, 0xf806, 0xf6f1, 0xf806, 0xf4f7, +0xf65d, 0xf4f7, 0xf65d, 0xf4f7, 0xf65d, 0xf3ae, 0xf566, 0xf3ae, 0xf566, 0xf2e7, 0xf4ee, +0xf2e7, 0xf4ee, 0xf2a0, 0xf4f2, 0xf2a0, 0xf4f2, 0xf1ad, 0xf443, 0xf1ad, 0xf443, 0xf0b6, +0xf388, 0xf0b6, 0xf388, 0xf017, 0xf31a, 0xf017, 0xf31a, 0xf017, 0xf31a, 0xeea1, 0xf1c7, +0xeea1, 0xf1c7, 0xedef, 0xf12c, 0xedef, 0xf12c, 0xed58, 0xf09e, 0xed58, 0xf09e, 0xebac, +0xeeec, 0xebac, 0xeeec, 0xeaaf, 0xeddb, 0xeaaf, 0xeddb, 0xea12, 0xed1b, 0xea12, 0xed1b, +0xea12, 0xed1b, 0xe9f4, 0xeccf, 0xe9f4, 0xeccf, 0xea47, 0xece8, 0xea47, 0xece8, 0xebe3, +0xee42, 0xebe3, 0xee42, 0xeec0, 0xf0d5, 0xeec0, 0xf0d5, 0xf0b5, 0xf27b, 0xf0b5, 0xf27b, +0xf0b5, 0xf27b, 0xf2bd, 0xf432, 0xf2bd, 0xf432, 0xf4d0, 0xf5f3, 0xf4d0, 0xf5f3, 0xf6c4, +0xf796, 0xf6c4, 0xf796, 0xf863, 0xf8e9, 0xf863, 0xf8e9, 0xf8f5, 0xf933, 0xf8f5, 0xf933, +0xf96c, 0xf96a, 0xf96c, 0xf96a, 0xf96c, 0xf96a, 0xfa30, 0xf9f5, 0xfa30, 0xf9f5, 0xfb77, +0xfb0c, 0xfb77, 0xfb0c, 0xfc0b, 0xfb77, 0xfc0b, 0xfb77, 0xfc87, 0xfbd4, 0xfc87, 0xfbd4, +0xfe58, 0xfd8e, 0xfe58, 0xfd8e, 0xff86, 0xfead, 0xff86, 0xfead, 0xff86, 0xfead, 0xffd2, +0xfef1, 0xffd2, 0xfef1, 0x62, 0xff7d, 0x62, 0xff7d, 0xb7, 0xffd4, 0xb7, 0xffd4, +0x9c, 0xffbc, 0x9c, 0xffbc, 0xfff8, 0xff1f, 0xfff8, 0xff1f, 0xfff8, 0xff1f, 0xffdb, +0xff09, 0xffdb, 0xff09, 0x30, 0xff65, 0x30, 0xff65, 0x28, 0xff64, 0x28, 0xff64, +0x14a, 0x8b, 0x14a, 0x8b, 0x172, 0xb7, 0x172, 0xb7, 0x114, 0x5c, 0x114, +0x5c, 0x114, 0x5c, 0x17a, 0xc4, 0x17a, 0xc4, 0xed, 0x3b, 0xed, 0x3b, +0xfb, 0x4b, 0xfb, 0x4b, 0x9e, 0xfff4, 0x9e, 0xfff4, 0x54, 0xffb3, 0x54, +0xffb3, 0x54, 0xffc1, 0x54, 0xffc1, 0x54, 0xffc1, 0xff37, 0xfeb7, 0xff37, 0xfeb7, +0xfea6, 0xfe40, 0xfea6, 0xfe40, 0xfdad, 0xfd68, 0xfdad, 0xfd68, 0xfb5e, 0xfb44, 0xfb5e, +0xfb44, 0xf984, 0xf99d, 0xf984, 0xf99d, 0xf984, 0xf99d, 0xf7a3, 0xf7f9, 0xf7a3, 0xf7f9, +0xf51d, 0xf5b8, 0xf51d, 0xf5b8, 0xf361, 0xf44b, 0xf361, 0xf44b, 0xf147, 0xf287, 0xf147, +0xf287, 0xeea7, 0xf044, 0xeea7, 0xf044, 0xeb54, 0xed53, 0xeb54, 0xed53, 0xeb54, 0xed53, +0xe813, 0xea77, 0xe813, 0xea77, 0xe59e, 0xe867, 0xe59e, 0xe867, 0xe28e, 0xe5bd, 0xe28e, +0xe5bd, 0xe15a, 0xe4ec, 0xe15a, 0xe4ec, 0xe039, 0xe429, 0xe039, 0xe429, 0xde8e, 0xe2d5, +0xde8e, 0xe2d5, 0xde8e, 0xe2d5, 0xde44, 0xe2da, 0xde44, 0xe2da, 0xdcf8, 0xe1d4, 0xdcf8, +0xe1d4, 0xdb44, 0xe059, 0xdb44, 0xe059, 0xda32, 0xdf75, 0xda32, 0xdf75, 0xd9c2, 0xdf25, +0xd9c2, 0xdf25, 0xd9c2, 0xdf25, 0xd9c8, 0xdf3f, 0xd9c8, 0xdf3f, 0xd9d1, 0xdf4e, 0xd9d1, +0xdf4e, 0xdaad, 0xe025, 0xdaad, 0xe025, 0xdc1c, 0xe183, 0xdc1c, 0xe183, 0xdd1b, 0xe266, +0xdd1b, 0xe266, 0xdebe, 0xe3e4, 0xdebe, 0xe3e4, 0xdebe, 0xe3e4, 0xe11d, 0xe616, 0xe11d, +0xe616, 0xe2a6, 0xe76c, 0xe2a6, 0xe76c, 0xe382, 0xe80f, 0xe382, 0xe80f, 0xe419, 0xe86b, +0xe419, 0xe86b, 0xe4ce, 0xe8e2, 0xe4ce, 0xe8e2, 0xe5e9, 0xe9bd, 0xe5e9, 0xe9bd, 0xe5e9, +0xe9bd, 0xe7a5, 0xeb3a, 0xe7a5, 0xeb3a, 0xe956, 0xecab, 0xe956, 0xecab, 0xeadc, 0xedf3, +0xeadc, 0xedf3, 0xed35, 0xf00f, 0xed35, 0xf00f, 0xef08, 0xf1a5, 0xef08, 0xf1a5, 0xef08, +0xf1a5, 0xf0f5, 0xf356, 0xf0f5, 0xf356, 0xf2f0, 0xf514, 0xf2f0, 0xf514, 0xf449, 0xf630, +0xf449, 0xf630, 0xf5f8, 0xf7a0, 0xf5f8, 0xf7a0, 0xf71d, 0xf884, 0xf71d, 0xf884, 0xf91c, +0xfa3e, 0xf91c, 0xfa3e, 0xf91c, 0xfa3e, 0xfa48, 0xfb22, 0xfa48, 0xfb22, 0xfb27, 0xfbb4, +0xfb27, 0xfbb4, 0xfdc2, 0xfdfd, 0xfdc2, 0xfdfd, 0xff4e, 0xff34, 0xff4e, 0xff34, 0x23d, +0x1c9, 0x23d, 0x1c9, 0x5d6, 0x505, 0x5d6, 0x505, 0x5d6, 0x505, 0x8b1, 0x781, +0x8b1, 0x781, 0xbeb, 0xa5b, 0xbeb, 0xa5b, 0xe7a, 0xc89, 0xe7a, 0xc89, 0x116c, +0xf1d, 0x116c, 0xf1d, 0x1446, 0x119e, 0x1446, 0x119e, 0x1446, 0x119e, 0x1735, 0x1439, +0x1735, 0x1439, 0x1a46, 0x16fe, 0x1a46, 0x16fe, 0x1c28, 0x189f, 0x1c28, 0x189f, 0x1dde, +0x1a1f, 0x1dde, 0x1a1f, 0x1fb1, 0x1bcb, 0x1fb1, 0x1bcb, 0x2027, 0x1c28, 0x2027, 0x1c28, +0x2027, 0x1c28, 0x1fc4, 0x1bbc, 0x1fc4, 0x1bbc, 0x1ef0, 0x1af1, 0x1ef0, 0x1af1, 0x1d8f, +0x19a7, 0x1d8f, 0x19a7, 0x1bf2, 0x1834, 0x1bf2, 0x1834, 0x196e, 0x15e8, 0x196e, 0x15e8, +0x1763, 0x1424, 0x1763, 0x1424, 0x1763, 0x1424, 0x1526, 0x123a, 0x1526, 0x123a, 0x11c4, +0xf36, 0x11c4, 0xf36, 0xf3f, 0xd17, 0xf3f, 0xd17, 0xbf4, 0xa39, 0xbf4, 0xa39, +0x85d, 0x712, 0x85d, 0x712, 0x85d, 0x712, 0x6e7, 0x60b, 0x6e7, 0x60b, 0x47e, +0x410, 0x47e, 0x410, 0x13a, 0x134, 0x13a, 0x134, 0xfef4, 0xff50, 0xfef4, 0xff50, +0xfd19, 0xfdce, 0xfd19, 0xfdce, 0xfb7a, 0xfc7c, 0xfb7a, 0xfc7c, 0xfb7a, 0xfc7c, 0xf937, +0xfa7a, 0xf937, 0xfa7a, 0xf7b8, 0xf930, 0xf7b8, 0xf930, 0xf5d8, 0xf779, 0xf5d8, 0xf779, +0xf38e, 0xf548, 0xf38e, 0xf548, 0xf23e, 0xf406, 0xf23e, 0xf406, 0xf23e, 0xf406, 0xf0c0, +0xf289, 0xf0c0, 0xf289, 0xf08d, 0xf24d, 0xf08d, 0xf24d, 0xf0bf, 0xf26e, 0xf0bf, 0xf26e, +0xf1b1, 0xf345, 0xf1b1, 0xf345, 0xf3b5, 0xf52a, 0xf3b5, 0xf52a, 0xf5b7, 0xf708, 0xf5b7, +0xf708, 0xf5b7, 0xf708, 0xf87f, 0xf9aa, 0xf87f, 0xf9aa, 0xfa3c, 0xfb41, 0xfa3c, 0xfb41, +0xfbe7, 0xfcc6, 0xfbe7, 0xfcc6, 0xfe72, 0xff2c, 0xfe72, 0xff2c, 0x90, 0x128, 0x90, +0x128, 0x20c, 0x286, 0x20c, 0x286, 0x20c, 0x286, 0x2d9, 0x337, 0x2d9, 0x337, +0x3af, 0x3f4, 0x3af, 0x3f4, 0x3b3, 0x3e2, 0x3b3, 0x3e2, 0x3b5, 0x3d1, 0x3b5, +0x3d1, 0x3d5, 0x3dd, 0x3d5, 0x3dd, 0x3d5, 0x3dd, 0x36b, 0x360, 0x36b, 0x360, +0x3a3, 0x383, 0x3a3, 0x383, 0x368, 0x331, 0x368, 0x331, 0x368, 0x318, 0x368, +0x318, 0x498, 0x429, 0x498, 0x429, 0x5d1, 0x53f, 0x5d1, 0x53f, 0x5d1, 0x53f, +0x69f, 0x5e5, 0x69f, 0x5e5, 0x7ca, 0x6e3, 0x7ca, 0x6e3, 0x950, 0x838, 0x950, +0x838, 0xb0f, 0x9c1, 0xb0f, 0x9c1, 0xcc9, 0xb44, 0xcc9, 0xb44, 0xe43, 0xc84, +0xe43, 0xc84, 0xe43, 0xc84, 0x106d, 0xe76, 0x106d, 0xe76, 0x11dd, 0xfb0, 0x11dd, +0xfb0, 0x13f7, 0x1199, 0x13f7, 0x1199, 0x1649, 0x13c1, 0x1649, 0x13c1, 0x1754, 0x14ab, +0x1754, 0x14ab, 0x1754, 0x14ab, 0x18cc, 0x160d, 0x18cc, 0x160d, 0x18ff, 0x1638, 0x18ff, +0x1638, 0x18cc, 0x160c, 0x18cc, 0x160c, 0x1879, 0x15cf, 0x1879, 0x15cf, 0x1788, 0x1506, +0x1788, 0x1506, 0x1679, 0x142f, 0x1679, 0x142f, 0x1679, 0x142f, 0x1425, 0x1225, 0x1425, +0x1225, 0x11be, 0x1017, 0x11be, 0x1017, 0xf44, 0xe05, 0xf44, 0xe05, 0xc2c, 0xb62, +0xc2c, 0xb62, 0x979, 0x92d, 0x979, 0x92d, 0x699, 0x6d4, 0x699, 0x6d4, 0x699, +0x6d4, 0x288, 0x34f, 0x288, 0x34f, 0xfe2e, 0xff81, 0xfe2e, 0xff81, 0xfb09, 0xfce6, +0xfb09, 0xfce6, 0xf802, 0xfa64, 0xf802, 0xfa64, 0xf413, 0xf6f1, 0xf413, 0xf6f1, 0xf413, +0xf6f1, 0xf11c, 0xf46a, 0xf11c, 0xf46a, 0xeea8, 0xf257, 0xeea8, 0xf257, 0xeb88, 0xef86, +0xeb88, 0xef86, 0xe8fd, 0xed38, 0xe8fd, 0xed38, 0xe70d, 0xeb70, 0xe70d, 0xeb70, 0xe49c, +0xe912, 0xe49c, 0xe912, 0xe49c, 0xe912, 0xe285, 0xe6f8, 0xe285, 0xe6f8, 0xe0f6, 0xe551, +0xe0f6, 0xe551, 0xdf59, 0xe389, 0xdf59, 0xe389, 0xdf7c, 0xe36d, 0xdf7c, 0xe36d, 0xe04b, +0xe3ed, 0xe04b, 0xe3ed, 0xe192, 0xe4d6, 0xe192, 0xe4d6, 0xe192, 0xe4d6, 0xe3fd, 0xe6d7, +0xe3fd, 0xe6d7, 0xe6a0, 0xe907, 0xe6a0, 0xe907, 0xe9cf, 0xebbc, 0xe9cf, 0xebbc, 0xecc1, +0xee31, 0xecc1, 0xee31, 0xefda, 0xf0cb, 0xefda, 0xf0cb, 0xefda, 0xf0cb, 0xf297, 0xf30b, +0xf297, 0xf30b, 0xf568, 0xf561, 0xf568, 0xf561, 0xf862, 0xf7e6, 0xf862, 0xf7e6, 0xfb62, +0xfa77, 0xfb62, 0xfa77, 0xff77, 0xfe25, 0xff77, 0xfe25, 0x22a, 0x78, 0x22a, 0x78, +0x22a, 0x78, 0x595, 0x38c, 0x595, 0x38c, 0x9c7, 0x76d, 0x9c7, 0x76d, 0xc13, +0x970, 0xc13, 0x970, 0xf1c, 0xc37, 0xf1c, 0xc37, 0x117a, 0xe57, 0x117a, 0xe57, +0x12d5, 0xf77, 0x12d5, 0xf77, 0x12d5, 0xf77, 0x13f7, 0x1062, 0x13f7, 0x1062, 0x149b, +0x10d0, 0x149b, 0x10d0, 0x1649, 0x124a, 0x1649, 0x124a, 0x17ce, 0x1399, 0x17ce, 0x1399, +0x1978, 0x150c, 0x1978, 0x150c, 0x1978, 0x150c, 0x1b29, 0x1686, 0x1b29, 0x1686, 0x1ca4, +0x17c9, 0x1ca4, 0x17c9, 0x1eca, 0x19b7, 0x1eca, 0x19b7, 0x20d7, 0x1b8d, 0x20d7, 0x1b8d, +0x2332, 0x1db1, 0x2332, 0x1db1, 0x2576, 0x1fc3, 0x2576, 0x1fc3, 0x2576, 0x1fc3, 0x2766, +0x2184, 0x2766, 0x2184, 0x29a0, 0x2397, 0x29a0, 0x2397, 0x2bf4, 0x25cb, 0x2bf4, 0x25cb, +0x2d89, 0x274b, 0x2d89, 0x274b, 0x2e6d, 0x2827, 0x2e6d, 0x2827, 0x2ef6, 0x28b5, 0x2ef6, +0x28b5, 0x2ef6, 0x28b5, 0x2f31, 0x2903, 0x2f31, 0x2903, 0x2ef7, 0x28ec, 0x2ef7, 0x28ec, +0x2e57, 0x287f, 0x2e57, 0x287f, 0x2dce, 0x283a, 0x2dce, 0x283a, 0x2c9c, 0x275b, 0x2c9c, +0x275b, 0x2c9c, 0x275b, 0x2b02, 0x2624, 0x2b02, 0x2624, 0x28de, 0x2471, 0x28de, 0x2471, +0x260a, 0x221a, 0x260a, 0x221a, 0x22da, 0x1f72, 0x22da, 0x1f72, 0x1f35, 0x1c5d, 0x1f35, +0x1c5d, 0x1b7e, 0x193a, 0x1b7e, 0x193a, 0x1b7e, 0x193a, 0x17af, 0x1603, 0x17af, 0x1603, +0x1415, 0x1300, 0x1415, 0x1300, 0x11a0, 0x111f, 0x11a0, 0x111f, 0xf5a, 0xf69, 0xf5a, +0xf69, 0xbe6, 0xc7b, 0xbe6, 0xc7b, 0x8d2, 0x9e3, 0x8d2, 0x9e3, 0x8d2, 0x9e3, +0x538, 0x6ba, 0x538, 0x6ba, 0x141, 0x326, 0x141, 0x326, 0xfdf0, 0x2a, 0xfdf0, +0x2a, 0xfa61, 0xfce2, 0xfa61, 0xfce2, 0xf730, 0xf9e8, 0xf730, 0xf9e8, 0xf730, 0xf9e8, +0xf451, 0xf733, 0xf451, 0xf733, 0xf27e, 0xf57b, 0xf27e, 0xf57b, 0xf0df, 0xf3ec, 0xf0df, +0xf3ec, 0xef9f, 0xf2b0, 0xef9f, 0xf2b0, 0xeed2, 0xf1de, 0xeed2, 0xf1de, 0xedaa, 0xf0aa, +0xedaa, 0xf0aa, 0xedaa, 0xf0aa, 0xecf0, 0xefdd, 0xecf0, 0xefdd, 0xec2b, 0xef01, 0xec2b, +0xef01, 0xebd6, 0xee93, 0xebd6, 0xee93, 0xebc1, 0xee64, 0xebc1, 0xee64, 0xeb6b, 0xedf4, +0xeb6b, 0xedf4, 0xeb57, 0xedc6, 0xeb57, 0xedc6, 0xeb57, 0xedc6, 0xebaa, 0xee02, 0xebaa, +0xee02, 0xeb62, 0xeda5, 0xeb62, 0xeda5, 0xeb88, 0xedb8, 0xeb88, 0xedb8, 0xec2a, 0xee49, +0xec2a, 0xee49, 0xebb7, 0xedc6, 0xebb7, 0xedc6, 0xebb7, 0xedc6, 0xec3a, 0xee38, 0xec3a, +0xee38, 0xed54, 0xef42, 0xed54, 0xef42, 0xedf4, 0xefcf, 0xedf4, 0xefcf, 0xee60, 0xf027, +0xee60, 0xf027, 0xef74, 0xf122, 0xef74, 0xf122, 0xf0e2, 0xf272, 0xf0e2, 0xf272, 0xf0e2, +0xf272, 0xf23c, 0xf3aa, 0xf23c, 0xf3aa, 0xf470, 0xf5b5, 0xf470, 0xf5b5, 0xf619, 0xf72e, +0xf619, 0xf72e, 0xf7f5, 0xf8d6, 0xf7f5, 0xf8d6, 0xf993, 0xfa39, 0xf993, 0xfa39, 0xf993, +0xfa39, 0xfb4d, 0xfbb2, 0xfb4d, 0xfbb2, 0xfdff, 0xfe20, 0xfdff, 0xfe20, 0xff9d, 0xff77, +0xff9d, 0xff77, 0x1ab, 0x13d, 0x1ab, 0x13d, 0x49e, 0x3e8, 0x49e, 0x3e8, 0x72e, +0x631, 0x72e, 0x631, 0x72e, 0x631, 0x90f, 0x7d0, 0x90f, 0x7d0, 0xaed, 0x972, +0xaed, 0x972, 0xceb, 0xb3b, 0xceb, 0xb3b, 0xe8e, 0xcb1, 0xe8e, 0xcb1, 0xf41, +0xd42, 0xf41, 0xd42, 0xed3, 0xcbe, 0xed3, 0xcbe, 0xed3, 0xcbe, 0xe52, 0xc32, +0xe52, 0xc32, 0xdfe, 0xbdf, 0xdfe, 0xbdf, 0xe03, 0xbf3, 0xe03, 0xbf3, 0xce9, +0xaf3, 0xce9, 0xaf3, 0xb7d, 0x9ac, 0xb7d, 0x9ac, 0xb7d, 0x9ac, 0xa4d, 0x8ac, +0xa4d, 0x8ac, 0x89b, 0x733, 0x89b, 0x733, 0x6f4, 0x5cd, 0x6f4, 0x5cd, 0x4ea, +0x40a, 0x4ea, 0x40a, 0x348, 0x2b3, 0x348, 0x2b3, 0x1d6, 0x18f, 0x1d6, 0x18f, +0x1d6, 0x18f, 0xb2, 0xba, 0xb2, 0xba, 0xff35, 0xff8b, 0xff35, 0xff8b, 0xfd51, +0xfdf3, 0xfd51, 0xfdf3, 0xfade, 0xfbc8, 0xfade, 0xfbc8, 0xf764, 0xf892, 0xf764, 0xf892, +0xf412, 0xf57f, 0xf412, 0xf57f, 0xf412, 0xf57f, 0xf0ba, 0xf260, 0xf0ba, 0xf260, 0xee07, +0xefe2, 0xee07, 0xefe2, 0xebdd, 0xede5, 0xebdd, 0xede5, 0xea36, 0xec67, 0xea36, 0xec67, +0xe8aa, 0xeafe, 0xe8aa, 0xeafe, 0xe8aa, 0xeafe, 0xe7a9, 0xea1c, 0xe7a9, 0xea1c, 0xe6db, +0xe96a, 0xe6db, 0xe96a, 0xe5b6, 0xe85d, 0xe5b6, 0xe85d, 0xe4d5, 0xe793, 0xe4d5, 0xe793, +0xe3bc, 0xe68f, 0xe3bc, 0xe68f, 0xe34e, 0xe635, 0xe34e, 0xe635, 0xe34e, 0xe635, 0xe2ac, +0xe5a7, 0xe2ac, 0xe5a7, 0xe244, 0xe553, 0xe244, 0xe553, 0xe1e2, 0xe504, 0xe1e2, 0xe504, +0xe1a3, 0xe4d8, 0xe1a3, 0xe4d8, 0xe1a1, 0xe4e9, 0xe1a1, 0xe4e9, 0xe0de, 0xe436, 0xe0de, +0xe436, 0xe0de, 0xe436, 0xe09d, 0xe403, 0xe09d, 0xe403, 0xdfc2, 0xe334, 0xdfc2, 0xe334, +0xdef8, 0xe272, 0xdef8, 0xe272, 0xde91, 0xe20f, 0xde91, 0xe20f, 0xdde9, 0xe165, 0xdde9, +0xe165, 0xdde9, 0xe165, 0xddfb, 0xe16e, 0xddfb, 0xe16e, 0xdecf, 0xe232, 0xdecf, 0xe232, +0xdf8a, 0xe2d6, 0xdf8a, 0xe2d6, 0xe074, 0xe3a2, 0xe074, 0xe3a2, 0xe246, 0xe550, 0xe246, +0xe550, 0xe415, 0xe6f3, 0xe415, 0xe6f3, 0xe415, 0xe6f3, 0xe683, 0xe92e, 0xe683, 0xe92e, +0xe8f0, 0xeb63, 0xe8f0, 0xeb63, 0xeb85, 0xedbc, 0xeb85, 0xedbc, 0xeef3, 0xf0eb, 0xeef3, +0xf0eb, 0xf1d6, 0xf38e, 0xf1d6, 0xf38e, 0xf53e, 0xf6b6, 0xf53e, 0xf6b6, 0xf53e, 0xf6b6, +0xf82f, 0xf96a, 0xf82f, 0xf96a, 0xfa08, 0xfb08, 0xfa08, 0xfb08, 0xfc13, 0xfcdd, 0xfc13, +0xfcdd, 0xfd69, 0xfe05, 0xfd69, 0xfe05, 0xfe79, 0xfeed, 0xfe79, 0xfeed, 0xfe79, 0xfeed, +0xfed6, 0xff2b, 0xfed6, 0xff2b, 0xff11, 0xff4f, 0xff11, 0xff4f, 0xffd4, 0x5, 0xffd4, +0x5, 0xffb5, 0xffe0, 0xffb5, 0xffe0, 0xff85, 0xffb3, 0xff85, 0xffb3, 0xffb1, 0xffea, +0xffb1, 0xffea, 0xffb1, 0xffea, 0xffe2, 0x2b, 0xffe2, 0x2b, 0xffca, 0x28, 0xffca, +0x28, 0xff7f, 0xfff5, 0xff7f, 0xfff5, 0xfeeb, 0xff7b, 0xfeeb, 0xff7b, 0xfe76, 0xff1f, +0xfe76, 0xff1f, 0xfe27, 0xfee6, 0xfe27, 0xfee6, 0xfe27, 0xfee6, 0xfd87, 0xfe58, 0xfd87, +0xfe58, 0xfcea, 0xfdc6, 0xfcea, 0xfdc6, 0xfccc, 0xfdae, 0xfccc, 0xfdae, 0xfd7b, 0xfe5a, +0xfd7b, 0xfe5a, 0xfde5, 0xfeb9, 0xfde5, 0xfeb9, 0xfde5, 0xfeb9, 0xfe71, 0xff31, 0xfe71, +0xff31, 0xfe72, 0xff15, 0xfe72, 0xff15, 0xfe33, 0xfeb0, 0xfe33, 0xfeb0, 0xfe05, 0xfe55, +0xfe05, 0xfe55, 0xfd8b, 0xfda8, 0xfd8b, 0xfda8, 0xfd78, 0xfd5d, 0xfd78, 0xfd5d, 0xfd78, +0xfd5d, 0xfdb0, 0xfd5a, 0xfdb0, 0xfd5a, 0xfe8d, 0xfdfb, 0xfe8d, 0xfdfb, 0xff11, 0xfe43, +0xff11, 0xfe43, 0x12, 0xff0b, 0x12, 0xff0b, 0xeb, 0xffaf, 0xeb, 0xffaf, 0x28d, +0x122, 0x28d, 0x122, 0x28d, 0x122, 0x40e, 0x27c, 0x40e, 0x27c, 0x3db, 0x229, +0x3db, 0x229, 0x4d8, 0x30f, 0x4d8, 0x30f, 0x514, 0x33f, 0x514, 0x33f, 0x52f, +0x356, 0x52f, 0x356, 0x52f, 0x356, 0x57f, 0x3aa, 0x57f, 0x3aa, 0x5bf, 0x3f8, +0x5bf, 0x3f8, 0x5cc, 0x419, 0x5cc, 0x419, 0x55f, 0x3c4, 0x55f, 0x3c4, 0x583, +0x405, 0x583, 0x405, 0x46e, 0x310, 0x46e, 0x310, 0x46e, 0x310, 0x358, 0x219, +0x358, 0x219, 0x22c, 0x10a, 0x22c, 0x10a, 0xf4, 0xffec, 0xf4, 0xffec, 0x4b, +0xff58, 0x4b, 0xff58, 0xffa3, 0xfebf, 0xffa3, 0xfebf, 0xff6a, 0xfe8f, 0xff6a, 0xfe8f, +0xff6a, 0xfe8f, 0xff85, 0xfeab, 0xff85, 0xfeab, 0x14, 0xff34, 0x14, 0xff34, 0x65, +0xff77, 0x65, 0xff77, 0xed, 0xffec, 0xed, 0xffec, 0x1ca, 0xb0, 0x1ca, 0xb0, +0x1ca, 0xb0, 0x379, 0x242, 0x379, 0x242, 0x586, 0x430, 0x586, 0x430, 0x785, +0x60e, 0x785, 0x60e, 0xa5f, 0x8cb, 0xa5f, 0x8cb, 0xc4b, 0xa9c, 0xc4b, 0xa9c, +0xe6b, 0xca6, 0xe6b, 0xca6, 0xe6b, 0xca6, 0x109d, 0xeca, 0x109d, 0xeca, 0x11ff, +0x1025, 0x11ff, 0x1025, 0x13da, 0x1203, 0x13da, 0x1203, 0x1532, 0x1369, 0x1532, 0x1369, +0x1652, 0x14a0, 0x1652, 0x14a0, 0x162a, 0x149b, 0x162a, 0x149b, 0x162a, 0x149b, 0x157c, +0x1418, 0x157c, 0x1418, 0x1592, 0x1463, 0x1592, 0x1463, 0x14f9, 0x1405, 0x14f9, 0x1405, +0x13ea, 0x1338, 0x13ea, 0x1338, 0x121d, 0x11b1, 0x121d, 0x11b1, 0x121d, 0x11b1, 0xfc9, +0xfa3, 0xfc9, 0xfa3, 0xda8, 0xdc9, 0xda8, 0xdc9, 0xb05, 0xb69, 0xb05, 0xb69, +0x83d, 0x8e0, 0x83d, 0x8e0, 0x7a2, 0x87c, 0x7a2, 0x87c, 0x772, 0x87c, 0x772, +0x87c, 0x772, 0x87c, 0x656, 0x786, 0x656, 0x786, 0x598, 0x6e3, 0x598, 0x6e3, +0x4bb, 0x618, 0x4bb, 0x618, 0x3db, 0x53e, 0x3db, 0x53e, 0x259, 0x3b7, 0x259, +0x3b7, 0x259, 0x3b7, 0xb2, 0x203, 0xb2, 0x203, 0xff96, 0xd1, 0xff96, 0xd1, +0xfe59, 0xff78, 0xfe59, 0xff78, 0xfcff, 0xfdfd, 0xfcff, 0xfdfd, 0xfcd6, 0xfdb1, 0xfcd6, +0xfdb1, 0xfd7e, 0xfe37, 0xfd7e, 0xfe37, 0xfd7e, 0xfe37, 0xfd13, 0xfda9, 0xfd13, 0xfda9, +0xfc86, 0xfcff, 0xfc86, 0xfcff, 0xfe0d, 0xfe6e, 0xfe0d, 0xfe6e, 0xfe7a, 0xfec9, 0xfe7a, +0xfec9, 0xfde3, 0xfe28, 0xfde3, 0xfe28, 0xfef0, 0xff35, 0xfef0, 0xff35, 0xfef0, 0xff35, +0xfdff, 0xfe4c, 0xfdff, 0xfe4c, 0xfe18, 0xfe77, 0xfe18, 0xfe77, 0xfd84, 0xfdfc, 0xfd84, +0xfdfc, 0xfbc8, 0xfc61, 0xfbc8, 0xfc61, 0xfba8, 0xfc67, 0xfba8, 0xfc67, 0xfba8, 0xfc67, +0xfa36, 0xfb1f, 0xfa36, 0xfb1f, 0xf975, 0xfa8a, 0xf975, 0xfa8a, 0xf7b4, 0xf8f4, 0xf7b4, +0xf8f4, 0xf646, 0xf7af, 0xf646, 0xf7af, 0xf42a, 0xf5b6, 0xf42a, 0xf5b6, 0xf191, 0xf33a, +0xf191, 0xf33a, 0xf191, 0xf33a, 0xf03a, 0xf1f8, 0xf03a, 0xf1f8, 0xee82, 0xf049, 0xee82, +0xf049, 0xee38, 0xeffc, 0xee38, 0xeffc, 0xed5d, 0xef11, 0xed5d, 0xef11, 0xed36, 0xeecd, +0xed36, 0xeecd, 0xede4, 0xef51, 0xede4, 0xef51, 0xede4, 0xef51, 0xee6c, 0xefa3, 0xee6c, +0xefa3, 0xee60, 0xef56, 0xee60, 0xef56, 0xef92, 0xf03b, 0xef92, 0xf03b, 0xf1b0, 0xf206, +0xf1b0, 0xf206, 0xf2fb, 0xf2f5, 0xf2fb, 0xf2f5, 0xf2fb, 0xf2f5, 0xf609, 0xf5a5, 0xf609, +0xf5a5, 0xf913, 0xf84f, 0xf913, 0xf84f, 0xfc38, 0xfb14, 0xfc38, 0xfb14, 0xff1c, 0xfd9d, +0xff1c, 0xfd9d, 0x24a, 0x75, 0x24a, 0x75, 0x46c, 0x247, 0x46c, 0x247, 0x46c, +0x247, 0x655, 0x3eb, 0x655, 0x3eb, 0x964, 0x6be, 0x964, 0x6be, 0xa19, 0x744, +0xa19, 0x744, 0xc4d, 0x954, 0xc4d, 0x954, 0xedb, 0xbca, 0xedb, 0xbca, 0x100a, +0xced, 0x100a, 0xced, 0x100a, 0xced, 0x12fb, 0xfde, 0x12fb, 0xfde, 0x14db, 0x11c6, +0x14db, 0x11c6, 0x144d, 0x1149, 0x144d, 0x1149, 0x1550, 0x1265, 0x1550, 0x1265, 0x15e3, +0x1314, 0x15e3, 0x1314, 0x15e3, 0x1314, 0x14ba, 0x120b, 0x14ba, 0x120b, 0x14cf, 0x1241, +0x14cf, 0x1241, 0x1459, 0x11eb, 0x1459, 0x11eb, 0x146a, 0x1219, 0x146a, 0x1219, 0x1442, +0x120a, 0x1442, 0x120a, 0x134d, 0x1129, 0x134d, 0x1129, 0x134d, 0x1129, 0x1298, 0x1081, +0x1298, 0x1081, 0x10ea, 0xeda, 0x10ea, 0xeda, 0x1026, 0xe15, 0x1026, 0xe15, 0xfcb, +0xdb2, 0xfcb, 0xdb2, 0xf29, 0xd02, 0xf29, 0xd02, 0xf11, 0xcd6, 0xf11, 0xcd6, +0xf11, 0xcd6, 0x100c, 0xdb8, 0x100c, 0xdb8, 0x11f9, 0xf89, 0x11f9, 0xf89, 0x1247, +0xfb9, 0x1247, 0xfb9, 0x12d4, 0x1027, 0x12d4, 0x1027, 0x14f5, 0x122b, 0x14f5, 0x122b, +0x14f5, 0x122b, 0x1642, 0x135d, 0x1642, 0x135d, 0x17da, 0x14de, 0x17da, 0x14de, 0x1939, +0x162c, 0x1939, 0x162c, 0x1a6f, 0x1756, 0x1a6f, 0x1756, 0x1b6b, 0x184e, 0x1b6b, 0x184e, +0x1c42, 0x1928, 0x1c42, 0x1928, 0x1c42, 0x1928, 0x1d06, 0x19f7, 0x1d06, 0x19f7, 0x1bf5, +0x18f7, 0x1bf5, 0x18f7, 0x1c4b, 0x1966, 0x1c4b, 0x1966, 0x1bb7, 0x18f1, 0x1bb7, 0x18f1, +0x1989, 0x16e8, 0x1989, 0x16e8, 0x17e0, 0x1568, 0x17e0, 0x1568, 0x17e0, 0x1568, 0x15a3, +0x1356, 0x15a3, 0x1356, 0x1447, 0x1227, 0x1447, 0x1227, 0x1249, 0x1058, 0x1249, 0x1058, +0x1017, 0xe53, 0x1017, 0xe53, 0xe25, 0xc8d, 0xe25, 0xc8d, 0xe25, 0xc8d, 0xcfb, +0xb8c, 0xcfb, 0xb8c, 0xbf2, 0xaa9, 0xbf2, 0xaa9, 0xa4a, 0x923, 0xa4a, 0x923, +0x8d1, 0x7c8, 0x8d1, 0x7c8, 0x789, 0x69b, 0x789, 0x69b, 0x820, 0x749, 0x820, +0x749, 0x820, 0x749, 0x7ea, 0x729, 0x7ea, 0x729, 0x716, 0x667, 0x716, 0x667, +0x733, 0x696, 0x733, 0x696, 0x7bc, 0x732, 0x7bc, 0x732, 0x78e, 0x717, 0x78e, +0x717, 0x6af, 0x64d, 0x6af, 0x64d, 0x6af, 0x64d, 0x64b, 0x604, 0x64b, 0x604, +0x4f9, 0x4cf, 0x4f9, 0x4cf, 0x4aa, 0x4a3, 0x4aa, 0x4a3, 0x3bc, 0x3de, 0x3bc, +0x3de, 0x210, 0x260, 0x210, 0x260, 0x210, 0x260, 0x18b, 0x210, 0x18b, 0x210, +0xfff9, 0xb8, 0xfff9, 0xb8, 0xfe23, 0xff20, 0xfe23, 0xff20, 0xfce8, 0xfe28, 0xfce8, +0xfe28, 0xfbce, 0xfd53, 0xfbce, 0xfd53, 0xf9ce, 0xfb99, 0xf9ce, 0xfb99, 0xf9ce, 0xfb99, +0xf819, 0xfa29, 0xf819, 0xfa29, 0xf6e6, 0xf939, 0xf6e6, 0xf939, 0xf415, 0xf6a8, 0xf415, +0xf6a8, 0xf1d0, 0xf49c, 0xf1d0, 0xf49c, 0xf152, 0xf450, 0xf152, 0xf450, 0xf0cf, 0xf3f6, +0xf0cf, 0xf3f6, 0xf0cf, 0xf3f6, 0xf075, 0xf3bb, 0xf075, 0xf3bb, 0xefba, 0xf314, 0xefba, +0xf314, 0xef5e, 0xf2c0, 0xef5e, 0xf2c0, 0xef36, 0xf293, 0xef36, 0xf293, 0xed78, 0xf0c4, +0xed78, 0xf0c4, 0xed78, 0xf0c4, 0xec82, 0xefb1, 0xec82, 0xefb1, 0xec4c, 0xef53, 0xec4c, +0xef53, 0xeb54, 0xee28, 0xeb54, 0xee28, 0xeb0d, 0xeda4, 0xeb0d, 0xeda4, 0xebc1, 0xee14, +0xebc1, 0xee14, 0xec66, 0xee6f, 0xec66, 0xee6f, 0xec66, 0xee6f, 0xee2f, 0xefe9, 0xee2f, +0xefe9, 0xefdb, 0xf143, 0xefdb, 0xf143, 0xf0ae, 0xf1c4, 0xf0ae, 0xf1c4, 0xf1e2, 0xf2a6, +0xf1e2, 0xf2a6, 0xf363, 0xf3d7, 0xf363, 0xf3d7, 0xf493, 0xf4bb, 0xf493, 0xf4bb, 0xf493, +0xf4bb, 0xf4c2, 0xf4a2, 0xf4c2, 0xf4a2, 0xf730, 0xf6cf, 0xf730, 0xf6cf, 0xf828, 0xf78c, +0xf828, 0xf78c, 0xf894, 0xf7c4, 0xf894, 0xf7c4, 0xfbd4, 0xfad7, 0xfbd4, 0xfad7, 0xfbd4, +0xfad7, 0xfd47, 0xfc24, 0xfd47, 0xfc24, 0xfe87, 0xfd44, 0xfe87, 0xfd44, 0xff52, 0xfdf5, +0xff52, 0xfdf5, 0xffd5, 0xfe63, 0xffd5, 0xfe63, 0x61, 0xfee0, 0x61, 0xfee0, 0x93, +0xff06, 0x93, 0xff06, 0x93, 0xff06, 0xfa, 0xff65, 0xfa, 0xff65, 0xbc, 0xff23, +0xbc, 0xff23, 0x59, 0xfebc, 0x59, 0xfebc, 0x8, 0xfe6b, 0x8, 0xfe6b, 0x50, +0xfeb3, 0x50, 0xfeb3, 0x50, 0xfeb3, 0x4b, 0xfeb1, 0x4b, 0xfeb1, 0xff6d, 0xfdd8, +0xff6d, 0xfdd8, 0xff42, 0xfdb3, 0xff42, 0xfdb3, 0xe5, 0xff60, 0xe5, 0xff60, 0x14c, +0xffd5, 0x14c, 0xffd5, 0x1c0, 0x5a, 0x1c0, 0x5a, 0x1c0, 0x5a, 0x2c7, 0x178, +0x2c7, 0x178, 0x25f, 0x12c, 0x25f, 0x12c, 0x353, 0x243, 0x353, 0x243, 0x2ce, +0x1e8, 0x2ce, 0x1e8, 0xba, 0x5, 0xba, 0x5, 0xd9, 0x5e, 0xd9, 0x5e, +0xd9, 0x5e, 0x54, 0x1b, 0x54, 0x1b, 0xfdd3, 0xfde3, 0xfdd3, 0xfde3, 0xfcb6, +0xfd15, 0xfcb6, 0xfd15, 0xfb5c, 0xfc11, 0xfb5c, 0xfc11, 0xf8d5, 0xf9e5, 0xf8d5, 0xf9e5, +0xf8d5, 0xf9e5, 0xf6de, 0xf84c, 0xf6de, 0xf84c, 0xf488, 0xf657, 0xf488, 0xf657, 0xf0fb, +0xf32b, 0xf0fb, 0xf32b, 0xed0d, 0xef9d, 0xed0d, 0xef9d, 0xeae2, 0xedcd, 0xeae2, 0xedcd, +0xe80a, 0xeb4c, 0xe80a, 0xeb4c, 0xe80a, 0xeb4c, 0xe578, 0xe909, 0xe578, 0xe909, 0xe3fd, +0xe7d4, 0xe3fd, 0xe7d4, 0xe2b2, 0xe6c5, 0xe2b2, 0xe6c5, 0xe2e6, 0xe72a, 0xe2e6, 0xe72a, +0xe1ee, 0xe656, 0xe1ee, 0xe656, 0xe13f, 0xe5bd, 0xe13f, 0xe5bd, 0xe13f, 0xe5bd, 0xe1a1, +0xe629, 0xe1a1, 0xe629, 0xe101, 0xe587, 0xe101, 0xe587, 0xe0cf, 0xe545, 0xe0cf, 0xe545, +0xe073, 0xe4cf, 0xe073, 0xe4cf, 0xe016, 0xe44d, 0xe016, 0xe44d, 0xe016, 0xe44d, 0xe163, +0xe56c, 0xe163, 0xe56c, 0xe19c, 0xe570, 0xe19c, 0xe570, 0xe155, 0xe4ee, 0xe155, 0xe4ee, +0xe1c3, 0xe51f, 0xe1c3, 0xe51f, 0xe24b, 0xe567, 0xe24b, 0xe567, 0xe2fa, 0xe5d5, 0xe2fa, +0xe5d5, 0xe2fa, 0xe5d5, 0xe345, 0xe5e2, 0xe345, 0xe5e2, 0xe4f2, 0xe752, 0xe4f2, 0xe752, +0xe541, 0xe769, 0xe541, 0xe769, 0xe5f5, 0xe7e9, 0xe5f5, 0xe7e9, 0xe92a, 0xeaed, 0xe92a, +0xeaed, 0xea2d, 0xebc4, 0xea2d, 0xebc4, 0xea2d, 0xebc4, 0xeafc, 0xec6d, 0xeafc, 0xec6d, +0xed3f, 0xee8c, 0xed3f, 0xee8c, 0xeeb7, 0xefe2, 0xeeb7, 0xefe2, 0xf03a, 0xf146, 0xf03a, +0xf146, 0xf1ff, 0xf2eb, 0xf1ff, 0xf2eb, 0xf1ff, 0xf2eb, 0xf239, 0xf304, 0xf239, 0xf304, +0xf27e, 0xf326, 0xf27e, 0xf326, 0xf3cd, 0xf44e, 0xf3cd, 0xf44e, 0xf55f, 0xf5b4, 0xf55f, +0xf5b4, 0xf72a, 0xf74c, 0xf72a, 0xf74c, 0xf94d, 0xf937, 0xf94d, 0xf937, 0xf94d, 0xf937, +0xfb73, 0xfb1d, 0xfb73, 0xfb1d, 0xfd94, 0xfcf8, 0xfd94, 0xfcf8, 0x23, 0xff3b, 0x23, +0xff3b, 0x2b5, 0x17b, 0x2b5, 0x17b, 0x5b7, 0x428, 0x5b7, 0x428, 0x887, 0x6a1, +0x887, 0x6a1, 0x887, 0x6a1, 0xbb5, 0x976, 0xbb5, 0x976, 0xeed, 0xc58, 0xeed, +0xc58, 0x1194, 0xead, 0x1194, 0xead, 0x149b, 0x1168, 0x149b, 0x1168, 0x1748, 0x13d2, +0x1748, 0x13d2, 0x1748, 0x13d2, 0x188a, 0x14dd, 0x188a, 0x14dd, 0x18d2, 0x14fb, 0x18d2, +0x14fb, 0x1a62, 0x1670, 0x1a62, 0x1670, 0x1aaf, 0x16b4, 0x1aaf, 0x16b4, 0x19df, 0x15eb, +0x19df, 0x15eb, 0x1a1f, 0x1646, 0x1a1f, 0x1646, 0x1a1f, 0x1646, 0x1910, 0x1563, 0x1910, +0x1563, 0x16ec, 0x137c, 0x16ec, 0x137c, 0x1501, 0x11df, 0x1501, 0x11df, 0x139f, 0x10da, +0x139f, 0x10da, 0x1152, 0xef7, 0x1152, 0xef7, 0xf2a, 0xd42, 0xf2a, 0xd42, 0xf2a, +0xd42, 0xce5, 0xb79, 0xce5, 0xb79, 0xa17, 0x92b, 0xa17, 0x92b, 0x878, 0x80e, +0x878, 0x80e, 0x548, 0x55d, 0x548, 0x55d, 0x34a, 0x3d9, 0x34a, 0x3d9, 0x34a, +0x3d9, 0x23d, 0x33f, 0x23d, 0x33f, 0xff9c, 0x106, 0xff9c, 0x106, 0xfda7, 0xff6d, +0xfda7, 0xff6d, 0xfae8, 0xfcfa, 0xfae8, 0xfcfa, 0xf90c, 0xfb5b, 0xf90c, 0xfb5b, 0xf767, +0xf9e2, 0xf767, 0xf9e2, 0xf767, 0xf9e2, 0xf596, 0xf82d, 0xf596, 0xf82d, 0xf492, 0xf735, +0xf492, 0xf735, 0xf3c9, 0xf667, 0xf3c9, 0xf667, 0xf452, 0xf6dc, 0xf452, 0xf6dc, 0xf413, +0xf67e, 0xf413, 0xf67e, 0xf501, 0xf741, 0xf501, 0xf741, 0xf501, 0xf741, 0xf654, 0xf861, +0xf654, 0xf861, 0xf6c0, 0xf893, 0xf6c0, 0xf893, 0xf94d, 0xfae2, 0xf94d, 0xfae2, 0xfb60, +0xfcb5, 0xfb60, 0xfcb5, 0xfd06, 0xfe1d, 0xfd06, 0xfe1d, 0xfd06, 0xfe1d, 0xff85, 0x60, +0xff85, 0x60, 0x13f, 0x1e1, 0x13f, 0x1e1, 0x320, 0x38f, 0x320, 0x38f, 0x4e5, +0x527, 0x4e5, 0x527, 0x5c5, 0x5df, 0x5c5, 0x5df, 0x592, 0x58c, 0x592, 0x58c, +0x592, 0x58c, 0x4de, 0x4bd, 0x4de, 0x4bd, 0x589, 0x552, 0x589, 0x552, 0x53d, +0x4f5, 0x53d, 0x4f5, 0x4ea, 0x493, 0x4ea, 0x493, 0x543, 0x4de, 0x543, 0x4de, +0x3ff, 0x38d, 0x3ff, 0x38d, 0x3ff, 0x38d, 0x49a, 0x417, 0x49a, 0x417, 0x5b6, +0x520, 0x5b6, 0x520, 0x576, 0x4ca, 0x576, 0x4ca, 0x627, 0x55e, 0x627, 0x55e, +0x72d, 0x641, 0x72d, 0x641, 0x72d, 0x641, 0x8fa, 0x7e6, 0x8fa, 0x7e6, 0xb9a, +0xa59, 0xb9a, 0xa59, 0xcf6, 0xb82, 0xcf6, 0xb82, 0xf46, 0xd9b, 0xf46, 0xd9b, +0x124b, 0x1068, 0x124b, 0x1068, 0x12f9, 0x10de, 0x12f9, 0x10de, 0x12f9, 0x10de, 0x142f, +0x11de, 0x142f, 0x11de, 0x158f, 0x130c, 0x158f, 0x130c, 0x1686, 0x13d9, 0x1686, 0x13d9, +0x178f, 0x14c1, 0x178f, 0x14c1, 0x17d4, 0x14f0, 0x17d4, 0x14f0, 0x17d0, 0x14e5, 0x17d0, +0x14e5, 0x17d0, 0x14e5, 0x1652, 0x136f, 0x1652, 0x136f, 0x151f, 0x1256, 0x151f, 0x1256, +0x1395, 0x10f8, 0x1395, 0x10f8, 0x10b1, 0xe53, 0x10b1, 0xe53, 0xecd, 0xcbf, 0xecd, +0xcbf, 0xecd, 0xcbf, 0xc18, 0xa6d, 0xc18, 0xa6d, 0x9ce, 0x895, 0x9ce, 0x895, +0x83e, 0x786, 0x83e, 0x786, 0x478, 0x44c, 0x478, 0x44c, 0x102, 0x16c, 0x102, +0x16c, 0xfd48, 0xfe4b, 0xfd48, 0xfe4b, 0xfd48, 0xfe4b, 0xf927, 0xfac6, 0xf927, 0xfac6, +0xf617, 0xf850, 0xf617, 0xf850, 0xf29b, 0xf568, 0xf29b, 0xf568, 0xf0a5, 0xf3fc, 0xf0a5, +0xf3fc, 0xeecd, 0xf2a2, 0xeecd, 0xf2a2, 0xeecd, 0xf2a2, 0xec8c, 0xf0cd, 0xec8c, 0xf0cd, +0xea9d, 0xef38, 0xea9d, 0xef38, 0xe80b, 0xecea, 0xe80b, 0xecea, 0xe694, 0xeba1, 0xe694, +0xeba1, 0xe44b, 0xe96d, 0xe44b, 0xe96d, 0xe25f, 0xe77f, 0xe25f, 0xe77f, 0xe25f, 0xe77f, +0xe19e, 0xe6a2, 0xe19e, 0xe6a2, 0xe0c4, 0xe596, 0xe0c4, 0xe596, 0xe228, 0xe6b2, 0xe228, +0xe6b2, 0xe33f, 0xe76d, 0xe33f, 0xe76d, 0xe453, 0xe814, 0xe453, 0xe814, 0xe6b8, 0xe9fe, +0xe6b8, 0xe9fe, 0xe6b8, 0xe9fe, 0xe8b2, 0xeb71, 0xe8b2, 0xeb71, 0xeb96, 0xedc7, 0xeb96, +0xedc7, 0xef35, 0xf0d3, 0xef35, 0xf0d3, 0xf221, 0xf32a, 0xf221, 0xf32a, 0xf51c, 0xf592, +0xf51c, 0xf592, 0xf51c, 0xf592, 0xf982, 0xf969, 0xf982, 0xf969, 0xfd28, 0xfc86, 0xfd28, +0xfc86, 0x5, 0xfee2, 0x5, 0xfee2, 0x3f4, 0x25c, 0x3f4, 0x25c, 0x716, 0x512, +0x716, 0x512, 0x93a, 0x6d7, 0x93a, 0x6d7, 0x93a, 0x6d7, 0xc29, 0x972, 0xc29, +0x972, 0xef7, 0xbf7, 0xef7, 0xbf7, 0x1058, 0xd19, 0x1058, 0xd19, 0x1268, 0xef5, +0x1268, 0xef5, 0x1430, 0x108f, 0x1430, 0x108f, 0x15ab, 0x11e5, 0x15ab, 0x11e5, 0x15ab, +0x11e5, 0x17a4, 0x13bd, 0x17a4, 0x13bd, 0x17e2, 0x13de, 0x17e2, 0x13de, 0x1915, 0x14f7, +0x1915, 0x14f7, 0x1b27, 0x16ef, 0x1b27, 0x16ef, 0x1c7d, 0x182c, 0x1c7d, 0x182c, 0x1c7d, +0x182c, 0x1edd, 0x1a72, 0x1edd, 0x1a72, 0x21ad, 0x1d29, 0x21ad, 0x1d29, 0x2443, 0x1fa4, +0x2443, 0x1fa4, 0x26d2, 0x2218, 0x26d2, 0x2218, 0x299e, 0x24c9, 0x299e, 0x24c9, 0x2bf0, +0x2702, 0x2bf0, 0x2702, 0x2bf0, 0x2702, 0x2d58, 0x2854, 0x2d58, 0x2854, 0x2ea1, 0x298c, +0x2ea1, 0x298c, 0x2f1e, 0x29fd, 0x2f1e, 0x29fd, 0x2f9b, 0x2a75, 0x2f9b, 0x2a75, 0x2fdd, +0x2abc, 0x2fdd, 0x2abc, 0x2eae, 0x299d, 0x2eae, 0x299d, 0x2eae, 0x299d, 0x2ea2, 0x29ab, +0x2ea2, 0x29ab, 0x2e0b, 0x293b, 0x2e0b, 0x293b, 0x2bd2, 0x2736, 0x2bd2, 0x2736, 0x2a3f, +0x25e6, 0x2a3f, 0x25e6, 0x27e7, 0x23dd, 0x27e7, 0x23dd, 0x27e7, 0x23dd, 0x2464, 0x20b7, +0x2464, 0x20b7, 0x207e, 0x1d39, 0x207e, 0x1d39, 0x1cf9, 0x1a27, 0x1cf9, 0x1a27, 0x1974, +0x171e, 0x1974, 0x171e, 0x15a1, 0x13ce, 0x15a1, 0x13ce, 0x121f, 0x10d5, 0x121f, 0x10d5, +0x121f, 0x10d5, 0xeba, 0xdfa, 0xeba, 0xdfa, 0xc1a, 0xbe4, 0xc1a, 0xbe4, 0x902, +0x954, 0x902, 0x954, 0x51e, 0x5f4, 0x51e, 0x5f4, 0x1ce, 0x320, 0x1ce, 0x320, +0xfe49, 0xe, 0xfe49, 0xe, 0xfe49, 0xe, 0xfac2, 0xfcef, 0xfac2, 0xfcef, 0xf854, +0xfadc, 0xf854, 0xfadc, 0xf636, 0xf90c, 0xf636, 0xf90c, 0xf3d1, 0xf6e7, 0xf3d1, 0xf6e7, +0xf1a5, 0xf4eb, 0xf1a5, 0xf4eb, 0xf1a5, 0xf4eb, 0xef98, 0xf2ff, 0xef98, 0xf2ff, 0xeec3, +0xf23e, 0xeec3, 0xf23e, 0xee33, 0xf1b3, 0xee33, 0xf1b3, 0xec76, 0xefef, 0xec76, 0xefef, +0xeb70, 0xeed6, 0xeb70, 0xeed6, 0xeb9a, 0xeee4, 0xeb9a, 0xeee4, 0xeb9a, 0xeee4, 0xeb23, +0xee47, 0xeb23, 0xee47, 0xea7e, 0xed76, 0xea7e, 0xed76, 0xebeb, 0xeeb2, 0xebeb, 0xeeb2, +0xebe6, 0xee78, 0xebe6, 0xee78, 0xec43, 0xee9e, 0xec43, 0xee9e, 0xeeed, 0xf110, 0xeeed, +0xf110, 0xeeed, 0xf110, 0xef16, 0xf102, 0xef16, 0xf102, 0xefc4, 0xf179, 0xefc4, 0xf179, +0xf084, 0xf205, 0xf084, 0xf205, 0xf049, 0xf197, 0xf049, 0xf197, 0xf0e7, 0xf206, 0xf0e7, +0xf206, 0xf0e7, 0xf206, 0xf1a3, 0xf297, 0xf1a3, 0xf297, 0xf20b, 0xf2d5, 0xf20b, 0xf2d5, +0xf292, 0xf334, 0xf292, 0xf334, 0xf45b, 0xf4d8, 0xf45b, 0xf4d8, 0xf497, 0xf4f2, 0xf497, +0xf4f2, 0xf542, 0xf57b, 0xf542, 0xf57b, 0xf542, 0xf57b, 0xf7a2, 0xf7bb, 0xf7a2, 0xf7bb, +0xf904, 0xf8fd, 0xf904, 0xf8fd, 0xfa99, 0xfa74, 0xfa99, 0xfa74, 0xfcd1, 0xfc8e, 0xfcd1, +0xfc8e, 0xfee7, 0xfe86, 0xfee7, 0xfe86, 0x10e, 0x90, 0x10e, 0x90, 0x10e, 0x90, +0x2f9, 0x25f, 0x2f9, 0x25f, 0x3c5, 0x311, 0x3c5, 0x311, 0x5bf, 0x4f2, 0x5bf, +0x4f2, 0x706, 0x623, 0x706, 0x623, 0x6a8, 0x5b2, 0x6a8, 0x5b2, 0x6a8, 0x5b2, +0x87b, 0x776, 0x87b, 0x776, 0x99e, 0x88d, 0x99e, 0x88d, 0x9f2, 0x8db, 0x9f2, +0x8db, 0xbb0, 0xa99, 0xbb0, 0xa99, 0xbe2, 0xad0, 0xbe2, 0xad0, 0xac7, 0x9c1, +0xac7, 0x9c1, 0xac7, 0x9c1, 0xa66, 0x972, 0xa66, 0x972, 0xa3b, 0x960, 0xa3b, +0x960, 0x914, 0x858, 0x914, 0x858, 0x7f5, 0x75e, 0x7f5, 0x75e, 0x6bc, 0x64f, +0x6bc, 0x64f, 0x48a, 0x44c, 0x48a, 0x44c, 0x48a, 0x44c, 0x414, 0x40a, 0x414, +0x40a, 0x2e5, 0x313, 0x2e5, 0x313, 0x81, 0xe8, 0x81, 0xe8, 0xfec0, 0xff64, +0xfec0, 0xff64, 0xfc6a, 0xfd4b, 0xfc6a, 0xfd4b, 0xfc6a, 0xfd4b, 0xfa81, 0xfb9f, 0xfa81, +0xfb9f, 0xf7e2, 0xf93d, 0xf7e2, 0xf93d, 0xf571, 0xf708, 0xf571, 0xf708, 0xf340, 0xf510, +0xf340, 0xf510, 0xf186, 0xf38d, 0xf186, 0xf38d, 0xf02f, 0xf26a, 0xf02f, 0xf26a, 0xf02f, +0xf26a, 0xee21, 0xf08e, 0xee21, 0xf08e, 0xed27, 0xefc2, 0xed27, 0xefc2, 0xeb27, 0xedec, +0xeb27, 0xedec, 0xe95a, 0xec46, 0xe95a, 0xec46, 0xe832, 0xeb41, 0xe832, 0xeb41, 0xe679, +0xe9a7, 0xe679, 0xe9a7, 0xe679, 0xe9a7, 0xe710, 0xea5a, 0xe710, 0xea5a, 0xe79f, 0xeb01, +0xe79f, 0xeb01, 0xe67d, 0xe9f4, 0xe67d, 0xe9f4, 0xe70c, 0xea94, 0xe70c, 0xea94, 0xe86f, +0xec03, 0xe86f, 0xec03, 0xe86f, 0xec03, 0xe7e1, 0xeb7e, 0xe7e1, 0xeb7e, 0xe7aa, 0xeb4c, +0xe7aa, 0xeb4c, 0xe74b, 0xeaec, 0xe74b, 0xeaec, 0xe564, 0xe900, 0xe564, 0xe900, 0xe527, +0xe8b9, 0xe527, 0xe8b9, 0xe503, 0xe886, 0xe503, 0xe886, 0xe503, 0xe886, 0xe3a2, 0xe710, +0xe3a2, 0xe710, 0xe35a, 0xe6ad, 0xe35a, 0xe6ad, 0xe383, 0xe6b5, 0xe383, 0xe6b5, 0xe317, +0xe624, 0xe317, 0xe624, 0xe2fe, 0xe5de, 0xe2fe, 0xe5de, 0xe2fe, 0xe5de, 0xe3e8, 0xe698, +0xe3e8, 0xe698, 0xe470, 0xe6ea, 0xe470, 0xe6ea, 0xe56c, 0xe7ad, 0xe56c, 0xe7ad, 0xe76c, +0xe971, 0xe76c, 0xe971, 0xe8fd, 0xeac5, 0xe8fd, 0xeac5, 0xeaf4, 0xec7c, 0xeaf4, 0xec7c, +0xeaf4, 0xec7c, 0xed40, 0xee8a, 0xed40, 0xee8a, 0xef7e, 0xf08b, 0xef7e, 0xf08b, 0xf188, +0xf25b, 0xf188, 0xf25b, 0xf31e, 0xf3bb, 0xf31e, 0xf3bb, 0xf4eb, 0xf557, 0xf4eb, 0xf557, +0xf7d6, 0xf818, 0xf7d6, 0xf818, 0xf7d6, 0xf818, 0xf99c, 0xf9bc, 0xf99c, 0xf9bc, 0xfa82, +0xfa87, 0xfa82, 0xfa87, 0xfcd8, 0xfcca, 0xfcd8, 0xfcca, 0xfd45, 0xfd2e, 0xfd45, 0xfd2e, +0xfce8, 0xfccf, 0xfce8, 0xfccf, 0xfce8, 0xfccf, 0xfdbe, 0xfdaa, 0xfdbe, 0xfdaa, 0xfd7b, +0xfd74, 0xfd7b, 0xfd74, 0xfccf, 0xfcdb, 0xfccf, 0xfcdb, 0xfd38, 0xfd5c, 0xfd38, 0xfd5c, +0xfd28, 0xfd67, 0xfd28, 0xfd67, 0xfc92, 0xfcee, 0xfc92, 0xfcee, 0xfc92, 0xfcee, 0xfd43, +0xfdbd, 0xfd43, 0xfdbd, 0xfceb, 0xfd80, 0xfceb, 0xfd80, 0xfbc8, 0xfc75, 0xfbc8, 0xfc75, +0xfba4, 0xfc65, 0xfba4, 0xfc65, 0xfb58, 0xfc27, 0xfb58, 0xfc27, 0xfb7a, 0xfc4f, 0xfb7a, +0xfc4f, 0xfb7a, 0xfc4f, 0xfc8f, 0xfd63, 0xfc8f, 0xfd63, 0xfce3, 0xfdad, 0xfce3, 0xfdad, +0xfc76, 0xfd2d, 0xfc76, 0xfd2d, 0xfd31, 0xfdcd, 0xfd31, 0xfdcd, 0xfdf4, 0xfe6c, 0xfdf4, +0xfe6c, 0xfdf4, 0xfe6c, 0xfe89, 0xfed7, 0xfe89, 0xfed7, 0xfe9a, 0xfeb8, 0xfe9a, 0xfeb8, +0xfdba, 0xfda3, 0xfdba, 0xfda3, 0xfebb, 0xfe6c, 0xfebb, 0xfe6c, 0xff27, 0xfea0, 0xff27, +0xfea0, 0xfe2f, 0xfd70, 0xfe2f, 0xfd70, 0xfe2f, 0xfd70, 0xfe88, 0xfd94, 0xfe88, 0xfd94, +0xfef4, 0xfdd0, 0xfef4, 0xfdd0, 0xff16, 0xfdc7, 0xff16, 0xfdc7, 0x37, 0xfec5, 0x37, +0xfec5, 0x252, 0xc7, 0x252, 0xc7, 0x33c, 0x1a1, 0x33c, 0x1a1, 0x33c, 0x1a1, +0x4ef, 0x34d, 0x4ef, 0x34d, 0x659, 0x4ba, 0x659, 0x4ba, 0x5f0, 0x45f, 0x5f0, +0x45f, 0x74e, 0x5d3, 0x74e, 0x5d3, 0x7c5, 0x667, 0x7c5, 0x667, 0x7c5, 0x667, +0x75f, 0x625, 0x75f, 0x625, 0x835, 0x722, 0x835, 0x722, 0x8d8, 0x7f0, 0x8d8, +0x7f0, 0x78c, 0x6cf, 0x78c, 0x6cf, 0x6e9, 0x656, 0x6e9, 0x656, 0x7ef, 0x783, +0x7ef, 0x783, 0x7ef, 0x783, 0x6e0, 0x694, 0x6e0, 0x694, 0x617, 0x5e5, 0x617, +0x5e5, 0x58d, 0x56c, 0x58d, 0x56c, 0x488, 0x46f, 0x488, 0x46f, 0x374, 0x359, +0x374, 0x359, 0x2cc, 0x2a4, 0x2cc, 0x2a4, 0x2cc, 0x2a4, 0x39e, 0x360, 0x39e, +0x360, 0x4a9, 0x44c, 0x4a9, 0x44c, 0x690, 0x60c, 0x690, 0x60c, 0x893, 0x7e0, +0x893, 0x7e0, 0xb1b, 0xa35, 0xb1b, 0xa35, 0xb1b, 0xa35, 0xdc7, 0xcab, 0xdc7, +0xcab, 0xfc4, 0xe70, 0xfc4, 0xe70, 0x11a6, 0x101c, 0x11a6, 0x101c, 0x1262, 0x10a6, +0x1262, 0x10a6, 0x1348, 0x115f, 0x1348, 0x115f, 0x14ca, 0x12bc, 0x14ca, 0x12bc, 0x14ca, +0x12bc, 0x15b6, 0x138c, 0x15b6, 0x138c, 0x16b8, 0x147c, 0x16b8, 0x147c, 0x17a1, 0x155f, +0x17a1, 0x155f, 0x16cd, 0x1491, 0x16cd, 0x1491, 0x15d3, 0x13a8, 0x15d3, 0x13a8, 0x1616, +0x1408, 0x1616, 0x1408, 0x1616, 0x1408, 0x1399, 0x11b2, 0x1399, 0x11b2, 0xfee, 0xe37, +0xfee, 0xe37, 0xee0, 0xd60, 0xee0, 0xd60, 0xcac, 0xb69, 0xcac, 0xb69, 0xa1b, +0x918, 0xa1b, 0x918, 0xa1b, 0x918, 0x840, 0x77f, 0x840, 0x77f, 0x57b, 0x4fa, +0x57b, 0x4fa, 0x30d, 0x2c9, 0x30d, 0x2c9, 0x16a, 0x15e, 0x16a, 0x15e, 0xa2, +0xc6, 0xa2, 0xc6, 0x29, 0x75, 0x29, 0x75, 0x29, 0x75, 0xfff2, 0x5d, +0xfff2, 0x5d, 0xfe97, 0xff17, 0xfe97, 0xff17, 0xfe24, 0xfeae, 0xfe24, 0xfeae, 0xfebd, +0xff47, 0xfebd, 0xff47, 0xfd71, 0xfdf3, 0xfd71, 0xfdf3, 0xfcf1, 0xfd62, 0xfcf1, 0xfd62, +0xfcf1, 0xfd62, 0xfbe1, 0xfc3b, 0xfbe1, 0xfc3b, 0xfa20, 0xfa5f, 0xfa20, 0xfa5f, 0xfa75, +0xfa95, 0xfa75, 0xfa95, 0xfa86, 0xfa87, 0xfa86, 0xfa87, 0xf9d0, 0xf9b5, 0xf9d0, 0xf9b5, +0xf9d0, 0xf9b5, 0xfa32, 0xf9fe, 0xfa32, 0xf9fe, 0xfac1, 0xfa7a, 0xfac1, 0xfa7a, 0xfa7f, +0xfa2c, 0xfa7f, 0xfa2c, 0xfae5, 0xfa90, 0xfae5, 0xfa90, 0xfaad, 0xfa5e, 0xfaad, 0xfa5e, +0xf89e, 0xf860, 0xf89e, 0xf860, 0xf89e, 0xf860, 0xf90d, 0xf8eb, 0xf90d, 0xf8eb, 0xf977, +0xf97b, 0xf977, 0xf97b, 0xf73c, 0xf76e, 0xf73c, 0xf76e, 0xf6b8, 0xf720, 0xf6b8, 0xf720, +0xf615, 0xf6b9, 0xf615, 0xf6b9, 0xf4bb, 0xf59e, 0xf4bb, 0xf59e, 0xf4bb, 0xf59e, 0xf3f9, +0xf51c, 0xf3f9, 0xf51c, 0xf32a, 0xf48c, 0xf32a, 0xf48c, 0xf1c2, 0xf361, 0xf1c2, 0xf361, +0xf0be, 0xf292, 0xf0be, 0xf292, 0xf02b, 0xf22c, 0xf02b, 0xf22c, 0xf02b, 0xf22c, 0xeed4, +0xf0f7, 0xeed4, 0xf0f7, 0xee65, 0xf09d, 0xee65, 0xf09d, 0xedf6, 0xf036, 0xedf6, 0xf036, +0xee52, 0xf08b, 0xee52, 0xf08b, 0xef14, 0xf136, 0xef14, 0xf136, 0xf03b, 0xf236, 0xf03b, +0xf236, 0xf03b, 0xf236, 0xf225, 0xf3eb, 0xf225, 0xf3eb, 0xf338, 0xf4bb, 0xf338, 0xf4bb, +0xf4fb, 0xf62e, 0xf4fb, 0xf62e, 0xf701, 0xf7da, 0xf701, 0xf7da, 0xf990, 0xfa06, 0xf990, +0xfa06, 0xfbcb, 0xfbd7, 0xfbcb, 0xfbd7, 0xfbcb, 0xfbd7, 0xfece, 0xfe6f, 0xfece, 0xfe6f, +0x225, 0x158, 0x225, 0x158, 0x403, 0x2ca, 0x403, 0x2ca, 0x7f8, 0x658, 0x7f8, +0x658, 0xb9e, 0x99d, 0xb9e, 0x99d, 0xb9e, 0x99d, 0xcb3, 0xa5a, 0xcb3, 0xa5a, +0xdaa, 0xb04, 0xdaa, 0xb04, 0xf7d, 0xc95, 0xf7d, 0xc95, 0x1096, 0xd79, 0x1096, +0xd79, 0x1199, 0xe53, 0x1199, 0xe53, 0x13cf, 0x106e, 0x13cf, 0x106e, 0x13cf, 0x106e, +0x13c1, 0x1050, 0x13c1, 0x1050, 0x13b1, 0x103d, 0x13b1, 0x103d, 0x1540, 0x11d2, 0x1540, +0x11d2, 0x1552, 0x11f2, 0x1552, 0x11f2, 0x15c8, 0x127e, 0x15c8, 0x127e, 0x15c8, 0x127e, +0x15d6, 0x12a7, 0x15d6, 0x12a7, 0x1502, 0x11f1, 0x1502, 0x11f1, 0x1518, 0x1226, 0x1518, +0x1226, 0x1489, 0x11b5, 0x1489, 0x11b5, 0x13ed, 0x1135, 0x13ed, 0x1135, 0x144d, 0x11ac, +0x144d, 0x11ac, 0x144d, 0x11ac, 0x1411, 0x1183, 0x1411, 0x1183, 0x1386, 0x1105, 0x1386, +0x1105, 0x14ce, 0x1253, 0x14ce, 0x1253, 0x1611, 0x1396, 0x1611, 0x1396, 0x1610, 0x138f, +0x1610, 0x138f, 0x163e, 0x13b1, 0x163e, 0x13b1, 0x163e, 0x13b1, 0x1694, 0x13f6, 0x1694, +0x13f6, 0x1787, 0x14d4, 0x1787, 0x14d4, 0x196a, 0x169f, 0x196a, 0x169f, 0x1a2c, 0x1749, +0x1a2c, 0x1749, 0x19f2, 0x16f7, 0x19f2, 0x16f7, 0x19f2, 0x16f7, 0x1bcf, 0x18be, 0x1bcf, +0x18be, 0x1cba, 0x1997, 0x1cba, 0x1997, 0x1bc1, 0x1890, 0x1bc1, 0x1890, 0x1bb0, 0x1877, +0x1bb0, 0x1877, 0x1ae1, 0x17a7, 0x1ae1, 0x17a7, 0x19ff, 0x16cb, 0x19ff, 0x16cb, 0x19ff, +0x16cb, 0x19fc, 0x16d6, 0x19fc, 0x16d6, 0x193c, 0x162c, 0x193c, 0x162c, 0x1722, 0x142f, +0x1722, 0x142f, 0x14f6, 0x1225, 0x14f6, 0x1225, 0x12d7, 0x102f, 0x12d7, 0x102f, 0x1024, +0xdaa, 0x1024, 0xdaa, 0x1024, 0xdaa, 0xda3, 0xb5a, 0xda3, 0xb5a, 0xafb, 0x8e5, +0xafb, 0x8e5, 0x887, 0x6a5, 0x887, 0x6a5, 0x714, 0x565, 0x714, 0x565, 0x581, +0x404, 0x581, 0x404, 0x581, 0x404, 0x42e, 0x2de, 0x42e, 0x2de, 0x3ba, 0x294, +0x3ba, 0x294, 0x319, 0x218, 0x319, 0x218, 0x2fd, 0x21c, 0x2fd, 0x21c, 0x263, +0x19b, 0x263, 0x19b, 0x19f, 0xec, 0x19f, 0xec, 0x19f, 0xec, 0x2ae, 0x20a, +0x2ae, 0x20a, 0x29c, 0x203, 0x29c, 0x203, 0x20d, 0x17b, 0x20d, 0x17b, 0x2d7, +0x249, 0x2d7, 0x249, 0x252, 0x1c8, 0x252, 0x1c8, 0xbc, 0x34, 0xbc, 0x34, +0xbc, 0x34, 0xffc9, 0xff45, 0xffc9, 0xff45, 0xfed7, 0xfe59, 0xfed7, 0xfe59, 0xfd0a, +0xfc95, 0xfd0a, 0xfc95, 0xfc0b, 0xfba4, 0xfc0b, 0xfba4, 0xfbea, 0xfb96, 0xfbea, 0xfb96, +0xfbea, 0xfb96, 0xfa98, 0xfa5c, 0xfa98, 0xfa5c, 0xf9c1, 0xf9a3, 0xf9c1, 0xf9a3, 0xf995, +0xf99c, 0xf995, 0xf99c, 0xf864, 0xf895, 0xf864, 0xf895, 0xf70c, 0xf76c, 0xf70c, 0xf76c, +0xf5df, 0xf674, 0xf5df, 0xf674, 0xf5df, 0xf674, 0xf40e, 0xf4d9, 0xf40e, 0xf4d9, 0xf28d, +0xf391, 0xf28d, 0xf391, 0xf1d2, 0xf30f, 0xf1d2, 0xf30f, 0xf071, 0xf1e6, 0xf071, 0xf1e6, +0xf043, 0xf1ee, 0xf043, 0xf1ee, 0xf0a2, 0xf280, 0xf0a2, 0xf280, 0xf0a2, 0xf280, 0xf035, +0xf23f, 0xf035, 0xf23f, 0xf133, 0xf363, 0xf133, 0xf363, 0xf16c, 0xf3bb, 0xf16c, 0xf3bb, +0xf09e, 0xf304, 0xf09e, 0xf304, 0xf08d, 0xf301, 0xf08d, 0xf301, 0xf08d, 0xf301, 0xf06f, +0xf2e7, 0xf06f, 0xf2e7, 0xf099, 0xf30d, 0xf099, 0xf30d, 0xf127, 0xf38e, 0xf127, 0xf38e, +0xf0ea, 0xf33b, 0xf0ea, 0xf33b, 0xf047, 0xf27c, 0xf047, 0xf27c, 0xf1fd, 0xf40f, 0xf1fd, +0xf40f, 0xf1fd, 0xf40f, 0xf3f2, 0xf5dc, 0xf3f2, 0xf5dc, 0xf579, 0xf737, 0xf579, 0xf737, +0xf82a, 0xf9ba, 0xf82a, 0xf9ba, 0xf98b, 0xfaeb, 0xf98b, 0xfaeb, 0xfb74, 0xfca5, 0xfb74, +0xfca5, 0xfe73, 0xff76, 0xfe73, 0xff76, 0xfe73, 0xff76, 0x99, 0x16f, 0x99, 0x16f, +0x1a5, 0x252, 0x1a5, 0x252, 0x27d, 0x305, 0x27d, 0x305, 0x3a6, 0x40d, 0x3a6, +0x40d, 0x3f3, 0x43d, 0x3f3, 0x43d, 0x3f3, 0x43d, 0x4bf, 0x4f2, 0x4bf, 0x4f2, +0x457, 0x477, 0x457, 0x477, 0x3bf, 0x3d1, 0x3bf, 0x3d1, 0x489, 0x491, 0x489, +0x491, 0x433, 0x436, 0x433, 0x436, 0x3ec, 0x3ec, 0x3ec, 0x3ec, 0x3ec, 0x3ec, +0x2d1, 0x2d2, 0x2d1, 0x2d2, 0x128, 0x12c, 0x128, 0x12c, 0x8c, 0x95, 0x8c, +0x95, 0x5d, 0x6d, 0x5d, 0x6d, 0x11, 0x29, 0x11, 0x29, 0xc3, 0xe5, +0xc3, 0xe5, 0xc3, 0xe5, 0x17b, 0x1a8, 0x17b, 0x1a8, 0x8a, 0xc4, 0x8a, +0xc4, 0x196, 0x1e0, 0x196, 0x1e0, 0x1e6, 0x242, 0x1e6, 0x242, 0xec, 0x15d, +0xec, 0x15d, 0xec, 0x15d, 0x218, 0x2a1, 0x218, 0x2a1, 0x15b, 0x200, 0x15b, +0x200, 0x4f, 0x115, 0x4f, 0x115, 0x93, 0x17e, 0x93, 0x17e, 0xffa8, 0xbf, +0xffa8, 0xbf, 0xfe38, 0xff7e, 0xfe38, 0xff7e, 0xfe38, 0xff7e, 0xfcd5, 0xfe50, 0xfcd5, +0xfe50, 0xfaac, 0xfc62, 0xfaac, 0xfc62, 0xf758, 0xf94d, 0xf758, 0xf94d, 0xf51e, 0xf756, +0xf51e, 0xf756, 0xf2f2, 0xf571, 0xf2f2, 0xf571, 0xf030, 0xf2f6, 0xf030, 0xf2f6, 0xf030, +0xf2f6, 0xedfd, 0xf10e, 0xedfd, 0xf10e, 0xeac5, 0xee1f, 0xeac5, 0xee1f, 0xe7ca, 0xeb6d, +0xe7ca, 0xeb6d, 0xe596, 0xe97e, 0xe596, 0xe97e, 0xe3d6, 0xe7ff, 0xe3d6, 0xe7ff, 0xe3d6, +0xe7ff, 0xe2c8, 0xe72d, 0xe2c8, 0xe72d, 0xe22f, 0xe6c9, 0xe22f, 0xe6c9, 0xe1d7, 0xe69f, +0xe1d7, 0xe69f, 0xe0e5, 0xe5d2, 0xe0e5, 0xe5d2, 0xe08c, 0xe595, 0xe08c, 0xe595, 0xe0e7, +0xe602, 0xe0e7, 0xe602, 0xe0e7, 0xe602, 0xe0d4, 0xe5f7, 0xe0d4, 0xe5f7, 0xe009, 0xe52b, +0xe009, 0xe52b, 0xde62, 0xe379, 0xde62, 0xe379, 0xde1e, 0xe321, 0xde1e, 0xe321, 0xdf5f, +0xe446, 0xdf5f, 0xe446, 0xdfbf, 0xe482, 0xdfbf, 0xe482, 0xdfbf, 0xe482, 0xe04d, 0xe4e5, +0xe04d, 0xe4e5, 0xe0f8, 0xe561, 0xe0f8, 0xe561, 0xe15f, 0xe593, 0xe15f, 0xe593, 0xe32e, +0xe72b, 0xe32e, 0xe72b, 0xe55b, 0xe91f, 0xe55b, 0xe91f, 0xe55b, 0xe91f, 0xe641, 0xe9c9, +0xe641, 0xe9c9, 0xe6b5, 0xea02, 0xe6b5, 0xea02, 0xe7ba, 0xeacb, 0xe7ba, 0xeacb, 0xe8d2, +0xeba7, 0xe8d2, 0xeba7, 0xeb0c, 0xeda6, 0xeb0c, 0xeda6, 0xed5d, 0xefbc, 0xed5d, 0xefbc, +0xed5d, 0xefbc, 0xee54, 0xf079, 0xee54, 0xf079, 0xefb1, 0xf19b, 0xefb1, 0xf19b, 0xf1cf, +0xf37e, 0xf1cf, 0xf37e, 0xf439, 0xf5ac, 0xf439, 0xf5ac, 0xf62a, 0xf760, 0xf62a, 0xf760, +0xf62a, 0xf760, 0xf7ad, 0xf8a3, 0xf7ad, 0xf8a3, 0xf85f, 0xf913, 0xf85f, 0xf913, 0xf97f, +0xf9ee, 0xf97f, 0xf9ee, 0xfb80, 0xfba7, 0xfb80, 0xfba7, 0xfd0f, 0xfceb, 0xfd0f, 0xfceb, +0xff33, 0xfec1, 0xff33, 0xfec1, 0xff33, 0xfec1, 0xac, 0xffea, 0xac, 0xffea, 0x225, +0x111, 0x225, 0x111, 0x527, 0x3bf, 0x527, 0x3bf, 0x818, 0x65e, 0x818, 0x65e, +0x9db, 0x7d0, 0x9db, 0x7d0, 0xb90, 0x936, 0xb90, 0x936, 0xb90, 0x936, 0xe04, +0xb60, 0xe04, 0xb60, 0xf96, 0xcae, 0xf96, 0xcae, 0x1174, 0xe50, 0x1174, 0xe50, +0x1316, 0xfbe, 0x1316, 0xfbe, 0x13d7, 0x1056, 0x13d7, 0x1056, 0x13d7, 0x1056, 0x155e, +0x11bf, 0x155e, 0x11bf, 0x1546, 0x1195, 0x1546, 0x1195, 0x1544, 0x118f, 0x1544, 0x118f, +0x1665, 0x12ba, 0x1665, 0x12ba, 0x15b7, 0x1221, 0x15b7, 0x1221, 0x1557, 0x11e4, 0x1557, +0x11e4, 0x1557, 0x11e4, 0x1552, 0x120d, 0x1552, 0x120d, 0x13b6, 0x10aa, 0x13b6, 0x10aa, +0x12a4, 0xfdb, 0x12a4, 0xfdb, 0x123f, 0xfc1, 0x123f, 0xfc1, 0x109f, 0xe71, 0x109f, +0xe71, 0xecc, 0xcf2, 0xecc, 0xcf2, 0xecc, 0xcf2, 0xcf8, 0xb74, 0xcf8, 0xb74, +0xae9, 0x9ba, 0xae9, 0x9ba, 0x908, 0x82d, 0x908, 0x82d, 0x791, 0x705, 0x791, +0x705, 0x67e, 0x63b, 0x67e, 0x63b, 0x67e, 0x63b, 0x53f, 0x53d, 0x53f, 0x53d, +0x426, 0x45e, 0x426, 0x45e, 0x263, 0x2cb, 0x263, 0x2cb, 0x21e, 0x2ac, 0x21e, +0x2ac, 0x2cd, 0x378, 0x2cd, 0x378, 0x24b, 0x30a, 0x24b, 0x30a, 0x24b, 0x30a, +0x1ca, 0x293, 0x1ca, 0x293, 0x48, 0x113, 0x48, 0x113, 0xffd5, 0x9c, 0xffd5, +0x9c, 0x103, 0x1c0, 0x103, 0x1c0, 0x1fd, 0x2ab, 0x1fd, 0x2ab, 0x196, 0x233, +0x196, 0x233, 0x196, 0x233, 0x153, 0x1dc, 0x153, 0x1dc, 0x24d, 0x2c3, 0x24d, +0x2c3, 0x2c4, 0x327, 0x2c4, 0x327, 0x483, 0x4d4, 0x483, 0x4d4, 0x548, 0x58a, +0x548, 0x58a, 0x548, 0x58a, 0x3f0, 0x425, 0x3f0, 0x425, 0x3b0, 0x3db, 0x3b0, +0x3db, 0x44c, 0x470, 0x44c, 0x470, 0x4ad, 0x4cc, 0x4ad, 0x4cc, 0x485, 0x4a0, +0x485, 0x4a0, 0x363, 0x37b, 0x363, 0x37b, 0x363, 0x37b, 0x151, 0x167, 0x151, +0x167, 0xffd1, 0xffe2, 0xffd1, 0xffe2, 0xfef9, 0xff03, 0xfef9, 0xff03, 0xfea3, 0xfea4, +0xfea3, 0xfea4, 0xfe92, 0xfe84, 0xfe92, 0xfe84, 0xfdbc, 0xfd9b, 0xfdbc, 0xfd9b, 0xfdbc, +0xfd9b, 0xfd5c, 0xfd23, 0xfd5c, 0xfd23, 0xfea4, 0xfe4c, 0xfea4, 0xfe4c, 0x5f, 0xffe3, +0x5f, 0xffe3, 0xed, 0x48, 0xed, 0x48, 0x12a, 0x56, 0x12a, 0x56, 0x12a, +0x56, 0x286, 0x181, 0x286, 0x181, 0x3d1, 0x299, 0x3d1, 0x299, 0x530, 0x3c4, +0x530, 0x3c4, 0x6dd, 0x53e, 0x6dd, 0x53e, 0x80f, 0x640, 0x80f, 0x640, 0x926, +0x72c, 0x926, 0x72c, 0x926, 0x72c, 0x9df, 0x7c1, 0x9df, 0x7c1, 0xad2, 0x899, +0xad2, 0x899, 0xb2c, 0x8e2, 0xb2c, 0x8e2, 0xa32, 0x7e2, 0xa32, 0x7e2, 0x9a8, +0x760, 0x9a8, 0x760, 0x912, 0x6df, 0x912, 0x6df, 0x912, 0x6df, 0x6e0, 0x4d0, +0x6e0, 0x4d0, 0x5bf, 0x3de, 0x5bf, 0x3de, 0x506, 0x362, 0x506, 0x362, 0x1e6, +0x8b, 0x1e6, 0x8b, 0xfffb, 0xfef3, 0xfffb, 0xfef3, 0xfffb, 0xfef3, 0xfec6, 0xfe19, +0xfec6, 0xfe19, 0xfc7b, 0xfc2e, 0xfc7b, 0xfc2e, 0xfaab, 0xfac4, 0xfaab, 0xfac4, 0xf946, +0xf9c6, 0xf946, 0xf9c6, 0xf6b5, 0xf79a, 0xf6b5, 0xf79a, 0xf4b6, 0xf5fc, 0xf4b6, 0xf5fc, +0xf4b6, 0xf5fc, 0xf3b0, 0xf552, 0xf3b0, 0xf552, 0xf171, 0xf365, 0xf171, 0xf365, 0xf129, +0xf364, 0xf129, 0xf364, 0xf072, 0xf2e9, 0xf072, 0xf2e9, 0xee41, 0xf0e5, 0xee41, 0xf0e5, +0xeca5, 0xef69, 0xeca5, 0xef69, 0xeca5, 0xef69, 0xeaa6, 0xed7a, 0xeaa6, 0xed7a, 0xe9cd, +0xeca1, 0xe9cd, 0xeca1, 0xe9cb, 0xec93, 0xe9cb, 0xec93, 0xe9d3, 0xec7f, 0xe9d3, 0xec7f, +0xe917, 0xeb9c, 0xe917, 0xeb9c, 0xe917, 0xeb9c, 0xe926, 0xeb78, 0xe926, 0xeb78, 0xea01, +0xec18, 0xea01, 0xec18, 0xebd9, 0xedae, 0xebd9, 0xedae, 0xef55, 0xf0e2, 0xef55, 0xf0e2, +0xf110, 0xf253, 0xf110, 0xf253, 0xf2ed, 0xf3e4, 0xf2ed, 0xf3e4, 0xf2ed, 0xf3e4, 0xf650, +0xf6fb, 0xf650, 0xf6fb, 0xfa1e, 0xfa81, 0xfa1e, 0xfa81, 0xfdf3, 0xfe10, 0xfdf3, 0xfe10, +0xc4, 0xa0, 0xc4, 0xa0, 0x340, 0x2de, 0x340, 0x2de, 0x59c, 0x503, 0x59c, +0x503, 0x59c, 0x503, 0x8c5, 0x7f8, 0x8c5, 0x7f8, 0xb9f, 0xaa3, 0xb9f, 0xaa3, +0xe24, 0xcfd, 0xe24, 0xcfd, 0x10c1, 0xf70, 0x10c1, 0xf70, 0x1128, 0xfb0, 0x1128, +0xfb0, 0x1128, 0xfb0, 0x12ee, 0x114f, 0x12ee, 0x114f, 0x14e1, 0x131a, 0x14e1, 0x131a, +0x1572, 0x1380, 0x1572, 0x1380, 0x166b, 0x144a, 0x166b, 0x144a, 0x15ff, 0x13ad, 0x15ff, +0x13ad, 0x16cf, 0x1446, 0x16cf, 0x1446, 0x16cf, 0x1446, 0x1875, 0x15b0, 0x1875, 0x15b0, +0x1ac7, 0x17c1, 0x1ac7, 0x17c1, 0x1d7d, 0x1a33, 0x1d7d, 0x1a33, 0x1fb2, 0x1c20, 0x1fb2, +0x1c20, 0x2255, 0x1e77, 0x2255, 0x1e77, 0x24a8, 0x207e, 0x24a8, 0x207e, 0x24a8, 0x207e, +0x2816, 0x23a0, 0x2816, 0x23a0, 0x2a39, 0x257b, 0x2a39, 0x257b, 0x2bb1, 0x26ae, 0x2bb1, +0x26ae, 0x2e14, 0x28d3, 0x2e14, 0x28d3, 0x2f0c, 0x2996, 0x2f0c, 0x2996, 0x2f0c, 0x2996, +0x2f65, 0x29c4, 0x2f65, 0x29c4, 0x2ff7, 0x2a38, 0x2ff7, 0x2a38, 0x3016, 0x2a46, 0x3016, +0x2a46, 0x2e90, 0x28bf, 0x2e90, 0x28bf, 0x2d05, 0x2742, 0x2d05, 0x2742, 0x2c1a, 0x2675, +0x2c1a, 0x2675, 0x2c1a, 0x2675, 0x29d4, 0x245d, 0x29d4, 0x245d, 0x27a9, 0x226f, 0x27a9, +0x226f, 0x260f, 0x2121, 0x260f, 0x2121, 0x22a1, 0x1e0c, 0x22a1, 0x1e0c, 0x1f3e, 0x1b0d, +0x1f3e, 0x1b0d, 0x1f3e, 0x1b0d, 0x1bee, 0x182b, 0x1bee, 0x182b, 0x1719, 0x13cb, 0x1719, +0x13cb, 0x1378, 0x10a3, 0x1378, 0x10a3, 0x1021, 0xdc7, 0x1021, 0xdc7, 0xbe9, 0xa0b, +0xbe9, 0xa0b, 0x8c4, 0x75e, 0x8c4, 0x75e, 0x8c4, 0x75e, 0x687, 0x596, 0x687, +0x596, 0x439, 0x3b6, 0x439, 0x3b6, 0x227, 0x20a, 0x227, 0x20a, 0xffc1, 0x1, +0xffc1, 0x1, 0xfc93, 0xfd26, 0xfc93, 0xfd26, 0xf973, 0xfa4e, 0xf973, 0xfa4e, 0xf973, +0xfa4e, 0xf66f, 0xf787, 0xf66f, 0xf787, 0xf3e1, 0xf52c, 0xf3e1, 0xf52c, 0xf14a, 0xf2bf, +0xf14a, 0xf2bf, 0xee2a, 0xefc0, 0xee2a, 0xefc0, 0xebd9, 0xed87, 0xebd9, 0xed87, 0xebd9, +0xed87, 0xeac1, 0xec81, 0xeac1, 0xec81, 0xe9df, 0xebac, 0xe9df, 0xebac, 0xe91a, 0xeaf0, +0xe91a, 0xeaf0, 0xe87a, 0xea57, 0xe87a, 0xea57, 0xe754, 0xe935, 0xe754, 0xe935, 0xe770, +0xe956, 0xe770, 0xe956, 0xe770, 0xe956, 0xe8d7, 0xeac1, 0xe8d7, 0xeac1, 0xe911, 0xeb01, +0xe911, 0xeb01, 0xe97e, 0xeb74, 0xe97e, 0xeb74, 0xe9c0, 0xebbc, 0xe9c0, 0xebbc, 0xe95d, +0xeb5f, 0xe95d, 0xeb5f, 0xea69, 0xec72, 0xea69, 0xec72, 0xea69, 0xec72, 0xeb46, 0xed53, +0xeb46, 0xed53, 0xeaf2, 0xed01, 0xeaf2, 0xed01, 0xea2a, 0xec38, 0xea2a, 0xec38, 0xea04, +0xec0b, 0xea04, 0xec0b, 0xeaf4, 0xecef, 0xeaf4, 0xecef, 0xeaf4, 0xecef, 0xec7d, 0xee64, +0xec7d, 0xee64, 0xee3d, 0xf007, 0xee3d, 0xf007, 0xef03, 0xf0a8, 0xef03, 0xf0a8, 0xf03a, +0xf1b1, 0xf03a, 0xf1b1, 0xf1f7, 0xf336, 0xf1f7, 0xf336, 0xf3d6, 0xf4d3, 0xf3d6, 0xf4d3, +0xf3d6, 0xf4d3, 0xf6e2, 0xf796, 0xf6e2, 0xf796, 0xf8d2, 0xf934, 0xf8d2, 0xf934, 0xfa54, +0xfa5f, 0xfa54, 0xfa5f, 0xfd09, 0xfcb8, 0xfd09, 0xfcb8, 0xff15, 0xfe66, 0xff15, 0xfe66, +0x137, 0x29, 0x137, 0x29, 0x137, 0x29, 0x425, 0x2ba, 0x425, 0x2ba, 0x693, +0x4cf, 0x693, 0x4cf, 0x899, 0x683, 0x899, 0x683, 0xb1d, 0x8be, 0xb1d, 0x8be, +0xda2, 0xb05, 0xda2, 0xb05, 0xda2, 0xb05, 0xece, 0xbff, 0xece, 0xbff, 0x101a, +0xd28, 0x101a, 0xd28, 0x11b1, 0xead, 0x11b1, 0xead, 0x11eb, 0xee4, 0x11eb, 0xee4, +0x11ea, 0xef0, 0x11ea, 0xef0, 0x11b7, 0xedb, 0x11b7, 0xedb, 0x11b7, 0xedb, 0x10b0, +0xe02, 0x10b0, 0xe02, 0x102c, 0xdbb, 0x102c, 0xdbb, 0x1007, 0xde1, 0x1007, 0xde1, +0xe18, 0xc49, 0xe18, 0xc49, 0xbf0, 0xa81, 0xbf0, 0xa81, 0xa70, 0x96a, 0xa70, +0x96a, 0xa70, 0x96a, 0x81c, 0x785, 0x81c, 0x785, 0x6dd, 0x6b8, 0x6dd, 0x6b8, +0x578, 0x5c5, 0x578, 0x5c5, 0x301, 0x3c1, 0x301, 0x3c1, 0x105, 0x233, 0x105, +0x233, 0x105, 0x233, 0xfebf, 0x58, 0xfebf, 0x58, 0xfc5e, 0xfe5c, 0xfc5e, 0xfe5c, +0xf97c, 0xfbd7, 0xf97c, 0xfbd7, 0xf669, 0xf91a, 0xf669, 0xf91a, 0xf413, 0xf711, 0xf413, +0xf711, 0xf27d, 0xf5be, 0xf27d, 0xf5be, 0xf27d, 0xf5be, 0xf114, 0xf492, 0xf114, 0xf492, +0xefe7, 0xf398, 0xefe7, 0xf398, 0xef01, 0xf2de, 0xef01, 0xf2de, 0xed44, 0xf145, 0xed44, +0xf145, 0xed01, 0xf121, 0xed01, 0xf121, 0xecf8, 0xf132, 0xecf8, 0xf132, 0xecf8, 0xf132, +0xeaf5, 0xef45, 0xeaf5, 0xef45, 0xe9b1, 0xee13, 0xe9b1, 0xee13, 0xe877, 0xece8, 0xe877, +0xece8, 0xe6c5, 0xeb44, 0xe6c5, 0xeb44, 0xe6ab, 0xeb35, 0xe6ab, 0xeb35, 0xe6ab, 0xeb35, +0xe6d4, 0xeb66, 0xe6d4, 0xeb66, 0xe4cf, 0xe968, 0xe4cf, 0xe968, 0xe2e7, 0xe784, 0xe2e7, +0xe784, 0xe214, 0xe6b3, 0xe214, 0xe6b3, 0xe194, 0xe632, 0xe194, 0xe632, 0xe1b0, 0xe647, +0xe1b0, 0xe647, 0xe1b0, 0xe647, 0xe0ed, 0xe578, 0xe0ed, 0xe578, 0xdff5, 0xe46f, 0xdff5, +0xe46f, 0xdfce, 0xe42f, 0xdfce, 0xe42f, 0xe090, 0xe4d1, 0xe090, 0xe4d1, 0xe15a, 0xe573, +0xe15a, 0xe573, 0xe1d7, 0xe5bf, 0xe1d7, 0xe5bf, 0xe1d7, 0xe5bf, 0xe20f, 0xe5bf, 0xe20f, +0xe5bf, 0xe2ac, 0xe61b, 0xe2ac, 0xe61b, 0xe524, 0xe849, 0xe524, 0xe849, 0xe730, 0xea05, +0xe730, 0xea05, 0xe93e, 0xebbc, 0xe93e, 0xebbc, 0xe93e, 0xebbc, 0xeb8a, 0xedad, 0xeb8a, +0xedad, 0xed63, 0xef27, 0xed63, 0xef27, 0xf020, 0xf185, 0xf020, 0xf185, 0xf358, 0xf45d, +0xf358, 0xf45d, 0xf5e8, 0xf68f, 0xf5e8, 0xf68f, 0xf6ee, 0xf73c, 0xf6ee, 0xf73c, 0xf6ee, +0xf73c, 0xf840, 0xf83a, 0xf840, 0xf83a, 0xf930, 0xf8de, 0xf930, 0xf8de, 0xfa22, 0xf98d, +0xfa22, 0xf98d, 0xfbd5, 0xfb07, 0xfbd5, 0xfb07, 0xfb88, 0xfa8d, 0xfb88, 0xfa8d, 0xfb6b, +0xfa4e, 0xfb6b, 0xfa4e, 0xfb6b, 0xfa4e, 0xfc41, 0xfb0f, 0xfc41, 0xfb0f, 0xfd26, 0xfbea, +0xfd26, 0xfbea, 0xfdba, 0xfc7f, 0xfdba, 0xfc7f, 0xfd94, 0xfc65, 0xfd94, 0xfc65, 0xfdf1, +0xfcd9, 0xfdf1, 0xfcd9, 0xfdf1, 0xfcd9, 0xfdf3, 0xfcf8, 0xfdf3, 0xfcf8, 0xfe40, 0xfd69, +0xfe40, 0xfd69, 0xfe92, 0xfde3, 0xfe92, 0xfde3, 0xfe32, 0xfdae, 0xfe32, 0xfdae, 0xfee4, +0xfe8d, 0xfee4, 0xfe8d, 0xff9c, 0xff6f, 0xff9c, 0xff6f, 0xff9c, 0xff6f, 0xffef, 0xffeb, +0xffef, 0xffeb, 0x56, 0x75, 0x56, 0x75, 0x1c, 0x5b, 0x1c, 0x5b, 0xffae, +0x6, 0xffae, 0x6, 0xffd3, 0x3d, 0xffd3, 0x3d, 0xffe5, 0x5a, 0xffe5, 0x5a, +0xffe5, 0x5a, 0xffa9, 0x22, 0xffa9, 0x22, 0xff21, 0xff97, 0xff21, 0xff97, 0xfdce, +0xfe3b, 0xfdce, 0xfe3b, 0xfdce, 0xfe2d, 0xfdce, 0xfe2d, 0xfddd, 0xfe2a, 0xfddd, 0xfe2a, +0xfddd, 0xfe2a, 0xfd31, 0xfd69, 0xfd31, 0xfd69, 0xfe0c, 0xfe2d, 0xfe0c, 0xfe2d, 0xfee8, +0xfef2, 0xfee8, 0xfef2, 0xffc1, 0xffb5, 0xffc1, 0xffb5, 0x162, 0x142, 0x162, 0x142, +0x384, 0x353, 0x384, 0x353, 0x384, 0x353, 0x487, 0x448, 0x487, 0x448, 0x4fc, +0x4b4, 0x4fc, 0x4b4, 0x644, 0x5f7, 0x644, 0x5f7, 0x64d, 0x5ff, 0x64d, 0x5ff, +0x687, 0x63d, 0x687, 0x63d, 0x687, 0x63d, 0x697, 0x653, 0x697, 0x653, 0x59a, +0x55f, 0x59a, 0x55f, 0x5a9, 0x578, 0x5a9, 0x578, 0x5b1, 0x58b, 0x5b1, 0x58b, +0x52f, 0x513, 0x52f, 0x513, 0x460, 0x44b, 0x460, 0x44b, 0x460, 0x44b, 0x33a, +0x329, 0x33a, 0x329, 0x37d, 0x36b, 0x37d, 0x36b, 0x4b5, 0x49d, 0x4b5, 0x49d, +0x5ce, 0x5aa, 0x5ce, 0x5aa, 0x6f3, 0x6bb, 0x6f3, 0x6bb, 0x7a7, 0x756, 0x7a7, +0x756, 0x7a7, 0x756, 0x983, 0x912, 0x983, 0x912, 0xc2b, 0xb94, 0xc2b, 0xb94, +0xe99, 0xdd7, 0xe99, 0xdd7, 0x10e1, 0xff0, 0x10e1, 0xff0, 0x122f, 0x110b, 0x122f, +0x110b, 0x122f, 0x110b, 0x13ff, 0x12a9, 0x13ff, 0x12a9, 0x1640, 0x14b8, 0x1640, 0x14b8, +0x18b3, 0x16fb, 0x18b3, 0x16fb, 0x1ac0, 0x18dc, 0x1ac0, 0x18dc, 0x1a6a, 0x185f, 0x1a6a, +0x185f, 0x197e, 0x1755, 0x197e, 0x1755, 0x197e, 0x1755, 0x19b0, 0x1770, 0x19b0, 0x1770, +0x1987, 0x173b, 0x1987, 0x173b, 0x18c2, 0x1674, 0x18c2, 0x1674, 0x17b9, 0x1573, 0x17b9, +0x1573, 0x157a, 0x1347, 0x157a, 0x1347, 0x136a, 0x1155, 0x136a, 0x1155, 0x136a, 0x1155, +0x121a, 0x102c, 0x121a, 0x102c, 0xfd0, 0xe12, 0xfd0, 0xe12, 0xcd3, 0xb4e, 0xcd3, +0xb4e, 0x9c1, 0x879, 0x9c1, 0x879, 0x6f5, 0x5ef, 0x6f5, 0x5ef, 0x6f5, 0x5ef, +0x4fc, 0x439, 0x4fc, 0x439, 0x370, 0x2f3, 0x370, 0x2f3, 0x225, 0x1eb, 0x225, +0x1eb, 0xc7, 0xcd, 0xc7, 0xcd, 0xa, 0x4c, 0xa, 0x4c, 0xffe2, 0x5a, +0xffe2, 0x5a, 0xffe2, 0x5a, 0xff04, 0xffab, 0xff04, 0xffab, 0xfdfd, 0xfecb, 0xfdfd, +0xfecb, 0xfc2c, 0xfd1a, 0xfc2c, 0xfd1a, 0xfab1, 0xfbb7, 0xfab1, 0xfbb7, 0xf950, 0xfa66, +0xf950, 0xfa66, 0xf788, 0xf8a8, 0xf788, 0xf8a8, 0xf788, 0xf8a8, 0xf6b9, 0xf7dc, 0xf6b9, +0xf7dc, 0xf51f, 0xf641, 0xf51f, 0xf641, 0xf3cf, 0xf4eb, 0xf3cf, 0xf4eb, 0xf374, 0xf48a, +0xf374, 0xf48a, 0xf364, 0xf473, 0xf364, 0xf473, 0xf364, 0xf473, 0xf2e0, 0xf3e8, 0xf2e0, +0xf3e8, 0xf23c, 0xf33f, 0xf23c, 0xf33f, 0xf1e3, 0xf2e4, 0xf1e3, 0xf2e4, 0xf0cb, 0xf1cf, +0xf0cb, 0xf1cf, 0xf096, 0xf1a1, 0xf096, 0xf1a1, 0xf053, 0xf169, 0xf053, 0xf169, 0xf053, +0xf169, 0xefb6, 0xf0dc, 0xefb6, 0xf0dc, 0xefac, 0xf0e7, 0xefac, 0xf0e7, 0xefc9, 0xf11c, +0xefc9, 0xf11c, 0xef7a, 0xf0e7, 0xef7a, 0xf0e7, 0xeeea, 0xf073, 0xeeea, 0xf073, 0xee72, +0xf015, 0xee72, 0xf015, 0xee72, 0xf015, 0xedec, 0xefa7, 0xedec, 0xefa7, 0xee57, 0xf026, +0xee57, 0xf026, 0xee07, 0xefe5, 0xee07, 0xefe5, 0xed36, 0xef1a, 0xed36, 0xef1a, 0xed07, +0xeeea, 0xed07, 0xeeea, 0xed07, 0xeeea, 0xece7, 0xeebe, 0xece7, 0xeebe, 0xed99, 0xef59, +0xed99, 0xef59, 0xeeee, 0xf08d, 0xeeee, 0xf08d, 0xefdc, 0xf14d, 0xefdc, 0xf14d, 0xf114, +0xf24d, 0xf114, 0xf24d, 0xf364, 0xf45a, 0xf364, 0xf45a, 0xf364, 0xf45a, 0xf619, 0xf6c4, +0xf619, 0xf6c4, 0xf9c4, 0xfa1b, 0xf9c4, 0xfa1b, 0xfd09, 0xfd06, 0xfd09, 0xfd06, 0xff49, +0xfee8, 0xff49, 0xfee8, 0x28b, 0x1cb, 0x28b, 0x1cb, 0x6a8, 0x589, 0x6a8, 0x589, +0x6a8, 0x589, 0x9a3, 0x828, 0x9a3, 0x828, 0xbdf, 0xa0e, 0xbdf, 0xa0e, 0xe4e, +0xc2e, 0xe4e, 0xc2e, 0xfca, 0xd65, 0xfca, 0xd65, 0x1238, 0xf98, 0x1238, 0xf98, +0x1238, 0xf98, 0x156c, 0x129e, 0x156c, 0x129e, 0x168b, 0x139b, 0x168b, 0x139b, 0x16e1, +0x13dd, 0x16e1, 0x13dd, 0x17f6, 0x14eb, 0x17f6, 0x14eb, 0x1883, 0x157e, 0x1883, 0x157e, +0x1939, 0x1645, 0x1939, 0x1645, 0x1939, 0x1645, 0x19c9, 0x16f0, 0x19c9, 0x16f0, 0x1842, +0x158d, 0x1842, 0x158d, 0x1767, 0x14dc, 0x1767, 0x14dc, 0x1749, 0x14ed, 0x1749, 0x14ed, +0x16f7, 0x14cb, 0x16f7, 0x14cb, 0x1780, 0x1584, 0x1780, 0x1584, 0x1780, 0x1584, 0x175b, +0x158d, 0x175b, 0x158d, 0x1781, 0x15dd, 0x1781, 0x15dd, 0x17e0, 0x1660, 0x17e0, 0x1660, +0x175e, 0x15fa, 0x175e, 0x15fa, 0x1792, 0x1642, 0x1792, 0x1642, 0x1792, 0x1642, 0x1760, +0x161b, 0x1760, 0x161b, 0x16d6, 0x1592, 0x16d6, 0x1592, 0x16e3, 0x1598, 0x16e3, 0x1598, +0x16e8, 0x158d, 0x16e8, 0x158d, 0x16f1, 0x157f, 0x16f1, 0x157f, 0x174b, 0x15bc, 0x174b, +0x15bc, 0x174b, 0x15bc, 0x1830, 0x167f, 0x1830, 0x167f, 0x180a, 0x1633, 0x180a, 0x1633, +0x17d6, 0x15da, 0x17d6, 0x15da, 0x177a, 0x155a, 0x177a, 0x155a, 0x1679, 0x1438, 0x1679, +0x1438, 0x16ac, 0x144e, 0x16ac, 0x144e, 0x16ac, 0x144e, 0x1723, 0x14af, 0x1723, 0x14af, +0x1736, 0x14b3, 0x1736, 0x14b3, 0x167c, 0x13f3, 0x167c, 0x13f3, 0x156b, 0x12e5, 0x156b, +0x12e5, 0x141e, 0x11a3, 0x141e, 0x11a3, 0x141e, 0x11a3, 0x12dd, 0x1076, 0x12dd, 0x1076, +0x10dd, 0xe93, 0x10dd, 0xe93, 0xe1f, 0xbf9, 0xe1f, 0xbf9, 0xb64, 0x968, 0xb64, +0x968, 0x8c0, 0x6f3, 0x8c0, 0x6f3, 0x78b, 0x5ef, 0x78b, 0x5ef, 0x78b, 0x5ef, +0x59b, 0x433, 0x59b, 0x433, 0x4c3, 0x38d, 0x4c3, 0x38d, 0x428, 0x322, 0x428, +0x322, 0x2c1, 0x1e8, 0x2c1, 0x1e8, 0x2c6, 0x215, 0x2c6, 0x215, 0x20e, 0x17f, +0x20e, 0x17f, 0x20e, 0x17f, 0x246, 0x1d3, 0x246, 0x1d3, 0x213, 0x1b5, 0x213, +0x1b5, 0x12a, 0xda, 0x12a, 0xda, 0x179, 0x131, 0x179, 0x131, 0x1ec, 0x1a7, +0x1ec, 0x1a7, 0x1ec, 0x1a7, 0x1ea, 0x1a2, 0x1ea, 0x1a2, 0x16a, 0x11d, 0x16a, +0x11d, 0xfd, 0xaa, 0xfd, 0xaa, 0xffe5, 0xff8a, 0xffe5, 0xff8a, 0xfff4, 0xff94, +0xfff4, 0xff94, 0x50, 0xffef, 0x50, 0xffef, 0x50, 0xffef, 0xff13, 0xfeb4, 0xff13, +0xfeb4, 0xfdb6, 0xfd60, 0xfdb6, 0xfd60, 0xfce1, 0xfc9c, 0xfce1, 0xfc9c, 0xfc30, 0xfc04, +0xfc30, 0xfc04, 0xfb68, 0xfb5d, 0xfb68, 0xfb5d, 0xfb68, 0xfb5d, 0xfa5f, 0xfa7c, 0xfa5f, +0xfa7c, 0xf7b6, 0xf805, 0xf7b6, 0xf805, 0xf5da, 0xf661, 0xf5da, 0xf661, 0xf542, 0xf607, +0xf542, 0xf607, 0xf452, 0xf55a, 0xf452, 0xf55a, 0xf3fc, 0xf549, 0xf3fc, 0xf549, 0xf3fc, +0xf549, 0xf2a3, 0xf436, 0xf2a3, 0xf436, 0xf11f, 0xf2f7, 0xf11f, 0xf2f7, 0xf0d7, 0xf2f0, +0xf0d7, 0xf2f0, 0xf0da, 0xf32f, 0xf0da, 0xf32f, 0xf0f0, 0xf379, 0xf0f0, 0xf379, 0xf0ae, +0xf362, 0xf0ae, 0xf362, 0xf0ae, 0xf362, 0xf010, 0xf2e5, 0xf010, 0xf2e5, 0xef92, 0xf27c, +0xef92, 0xf27c, 0xef7b, 0xf26d, 0xef7b, 0xf26d, 0xeeb7, 0xf1a6, 0xeeb7, 0xf1a6, 0xee3f, +0xf11c, 0xee3f, 0xf11c, 0xee3f, 0xf11c, 0xee0c, 0xf0cd, 0xee0c, 0xf0cd, 0xed38, 0xefd2, +0xed38, 0xefd2, 0xedf5, 0xf05e, 0xedf5, 0xf05e, 0xeec4, 0xf0f3, 0xeec4, 0xf0f3, 0xefc9, +0xf1b9, 0xefc9, 0xf1b9, 0xf22b, 0xf3d8, 0xf22b, 0xf3d8, 0xf22b, 0xf3d8, 0xf434, 0xf59b, +0xf434, 0xf59b, 0xf629, 0xf74b, 0xf629, 0xf74b, 0xf863, 0xf941, 0xf863, 0xf941, 0xfa90, +0xfb2f, 0xfa90, 0xfb2f, 0xfc3a, 0xfc9f, 0xfc3a, 0xfc9f, 0xfe8b, 0xfebd, 0xfe8b, 0xfebd, +0xfe8b, 0xfebd, 0x78, 0x7f, 0x78, 0x7f, 0x130, 0x116, 0x130, 0x116, 0x1a0, +0x16d, 0x1a0, 0x16d, 0x1ee, 0x1ac, 0x1ee, 0x1ac, 0x283, 0x23b, 0x283, 0x23b, +0x283, 0x23b, 0x21e, 0x1d8, 0x21e, 0x1d8, 0x1e8, 0x1ac, 0x1e8, 0x1ac, 0x19d, +0x170, 0x19d, 0x170, 0x11a, 0x102, 0x11a, 0x102, 0x14c, 0x14e, 0x14c, 0x14e, +0x163, 0x180, 0x163, 0x180, 0x163, 0x180, 0x1c3, 0x1fd, 0x1c3, 0x1fd, 0x176, +0x1cc, 0x176, 0x1cc, 0x135, 0x1a6, 0x135, 0x1a6, 0x1a2, 0x22d, 0x1a2, 0x22d, +0x2a1, 0x343, 0x2a1, 0x343, 0x387, 0x43c, 0x387, 0x43c, 0x387, 0x43c, 0x414, +0x4da, 0x414, 0x4da, 0x50d, 0x5e1, 0x50d, 0x5e1, 0x52c, 0x60b, 0x52c, 0x60b, +0x622, 0x70b, 0x622, 0x70b, 0x72b, 0x81d, 0x72b, 0x81d, 0x72b, 0x81d, 0x5d8, +0x6d2, 0x5d8, 0x6d2, 0x402, 0x505, 0x402, 0x505, 0x1fa, 0x309, 0x1fa, 0x309, +0xffd7, 0xf3, 0xffd7, 0xf3, 0xfe7b, 0xffa9, 0xfe7b, 0xffa9, 0xfc6e, 0xfdb1, 0xfc6e, +0xfdb1, 0xfc6e, 0xfdb1, 0xf90d, 0xfa6b, 0xf90d, 0xfa6b, 0xf633, 0xf7b1, 0xf633, 0xf7b1, +0xf452, 0xf5f3, 0xf452, 0xf5f3, 0xf32b, 0xf4f5, 0xf32b, 0xf4f5, 0xf195, 0xf38c, 0xf195, +0xf38c, 0xee90, 0xf0b7, 0xee90, 0xf0b7, 0xee90, 0xf0b7, 0xec21, 0xee7a, 0xec21, 0xee7a, +0xea5c, 0xece8, 0xea5c, 0xece8, 0xe87a, 0xeb38, 0xe87a, 0xeb38, 0xe695, 0xe984, 0xe695, +0xe984, 0xe4ba, 0xe7d5, 0xe4ba, 0xe7d5, 0xe4ba, 0xe7d5, 0xe36c, 0xe6b0, 0xe36c, 0xe6b0, +0xe318, 0xe67e, 0xe318, 0xe67e, 0xe3fc, 0xe77d, 0xe3fc, 0xe77d, 0xe39d, 0xe730, 0xe39d, +0xe730, 0xe285, 0xe621, 0xe285, 0xe621, 0xe1ed, 0xe589, 0xe1ed, 0xe589, 0xe1ed, 0xe589, +0xe0a1, 0xe433, 0xe0a1, 0xe433, 0xe09b, 0xe41a, 0xe09b, 0xe41a, 0xe065, 0xe3c6, 0xe065, +0xe3c6, 0xdf84, 0xe2c0, 0xdf84, 0xe2c0, 0xe02b, 0xe339, 0xe02b, 0xe339, 0xe0ab, 0xe384, +0xe0ab, 0xe384, 0xe0ab, 0xe384, 0xe0de, 0xe37e, 0xe0de, 0xe37e, 0xe1ef, 0xe451, 0xe1ef, +0xe451, 0xe2e7, 0xe507, 0xe2e7, 0xe507, 0xe393, 0xe571, 0xe393, 0xe571, 0xe589, 0xe722, +0xe589, 0xe722, 0xe589, 0xe722, 0xe7a3, 0xe8fa, 0xe7a3, 0xe8fa, 0xe95d, 0xea74, 0xe95d, +0xea74, 0xebc9, 0xeca2, 0xebc9, 0xeca2, 0xee31, 0xeecf, 0xee31, 0xeecf, 0xf01b, 0xf082, +0xf01b, 0xf082, 0xf1ae, 0xf1e1, 0xf1ae, 0xf1e1, 0xf1ae, 0xf1e1, 0xf3e4, 0xf3e6, 0xf3e4, +0xf3e6, 0xf575, 0xf549, 0xf575, 0xf549, 0xf6f5, 0xf69f, 0xf6f5, 0xf69f, 0xf97c, 0xf8fe, +0xf97c, 0xf8fe, 0xfb4d, 0xfaa9, 0xfb4d, 0xfaa9, 0xfd06, 0xfc3b, 0xfd06, 0xfc3b, 0xfd06, +0xfc3b, 0xfdce, 0xfcdd, 0xfdce, 0xfcdd, 0xfefb, 0xfde4, 0xfefb, 0xfde4, 0x110, 0xffd1, +0x110, 0xffd1, 0x29f, 0x138, 0x29f, 0x138, 0x524, 0x393, 0x524, 0x393, 0x524, +0x393, 0x73d, 0x581, 0x73d, 0x581, 0x92a, 0x743, 0x92a, 0x743, 0xb0e, 0x8fa, +0xb0e, 0x8fa, 0xd08, 0xac8, 0xd08, 0xac8, 0xf58, 0xced, 0xf58, 0xced, 0x1076, +0xde2, 0x1076, 0xde2, 0x1076, 0xde2, 0x11bb, 0xf03, 0x11bb, 0xf03, 0x12ec, 0x1014, +0x12ec, 0x1014, 0x144e, 0x115c, 0x144e, 0x115c, 0x15e3, 0x12e0, 0x15e3, 0x12e0, 0x1675, +0x1368, 0x1675, 0x1368, 0x1672, 0x1364, 0x1672, 0x1364, 0x1672, 0x1364, 0x164d, 0x1349, +0x164d, 0x1349, 0x1679, 0x138a, 0x1679, 0x138a, 0x168a, 0x13ba, 0x168a, 0x13ba, 0x15da, +0x1333, 0x15da, 0x1333, 0x1450, 0x11dc, 0x1450, 0x11dc, 0x1450, 0x11dc, 0x12e4, 0x10ad, +0x12e4, 0x10ad, 0x1162, 0xf70, 0x1162, 0xf70, 0xf91, 0xdea, 0xf91, 0xdea, 0xd8a, +0xc34, 0xd8a, 0xc34, 0xab7, 0x9b4, 0xab7, 0x9b4, 0x81d, 0x76e, 0x81d, 0x76e, +0x81d, 0x76e, 0x6bf, 0x665, 0x6bf, 0x665, 0x5fc, 0x5f3, 0x5fc, 0x5f3, 0x522, +0x565, 0x522, 0x565, 0x45b, 0x4e4, 0x45b, 0x4e4, 0x3a0, 0x467, 0x3a0, 0x467, +0x356, 0x452, 0x356, 0x452, 0x356, 0x452, 0x2e6, 0x40c, 0x2e6, 0x40c, 0x1df, +0x325, 0x1df, 0x325, 0x87, 0x1e1, 0x87, 0x1e1, 0xffce, 0x131, 0xffce, 0x131, +0xfff5, 0x155, 0xfff5, 0x155, 0xfff5, 0x155, 0x2, 0x155, 0x2, 0x155, 0x7d, +0x1ba, 0x7d, 0x1ba, 0x7b, 0x19a, 0x7b, 0x19a, 0xd9, 0x1d2, 0xd9, 0x1d2, +0x1fd, 0x2cb, 0x1fd, 0x2cb, 0x23c, 0x2db, 0x23c, 0x2db, 0x23c, 0x2db, 0x210, +0x27e, 0x210, 0x27e, 0x2a5, 0x2e1, 0x2a5, 0x2e1, 0x436, 0x43f, 0x436, 0x43f, +0x4c7, 0x4a1, 0x4c7, 0x4a1, 0x539, 0x4e5, 0x539, 0x4e5, 0x539, 0x4e5, 0x5cc, +0x54e, 0x5cc, 0x54e, 0x555, 0x4b1, 0x555, 0x4b1, 0x52e, 0x468, 0x52e, 0x468, +0x4c3, 0x3df, 0x4c3, 0x3df, 0x407, 0x30a, 0x407, 0x30a, 0x36e, 0x25a, 0x36e, +0x25a, 0x36e, 0x25a, 0x2ae, 0x187, 0x2ae, 0x187, 0x245, 0x10e, 0x245, 0x10e, +0x1ce, 0x88, 0x1ce, 0x88, 0x18f, 0x3b, 0x18f, 0x3b, 0x1ac, 0x4a, 0x1ac, +0x4a, 0x21b, 0xab, 0x21b, 0xab, 0x21b, 0xab, 0x2c3, 0x146, 0x2c3, 0x146, +0x33b, 0x1af, 0x33b, 0x1af, 0x458, 0x2bc, 0x458, 0x2bc, 0x534, 0x387, 0x534, +0x387, 0x626, 0x468, 0x626, 0x468, 0x626, 0x468, 0x750, 0x581, 0x750, 0x581, +0x7c2, 0x5e4, 0x7c2, 0x5e4, 0x8df, 0x6f4, 0x8df, 0x6f4, 0x987, 0x791, 0x987, +0x791, 0x920, 0x723, 0x920, 0x723, 0x93c, 0x73e, 0x93c, 0x73e, 0x93c, 0x73e, +0x8e4, 0x6ed, 0x8e4, 0x6ed, 0x79b, 0x5b0, 0x79b, 0x5b0, 0x734, 0x560, 0x734, +0x560, 0x660, 0x4a9, 0x660, 0x4a9, 0x49a, 0x30b, 0x49a, 0x30b, 0x35f, 0x202, +0x35f, 0x202, 0x35f, 0x202, 0x1b7, 0x94, 0x1b7, 0x94, 0xff70, 0xfe90, 0xff70, +0xfe90, 0xfd7e, 0xfce8, 0xfd7e, 0xfce8, 0xfbcb, 0xfb86, 0xfbcb, 0xfb86, 0xf983, 0xf994, +0xf983, 0xf994, 0xf983, 0xf994, 0xf815, 0xf87f, 0xf815, 0xf87f, 0xf6b6, 0xf77a, 0xf6b6, +0xf77a, 0xf49d, 0xf5bb, 0xf49d, 0xf5bb, 0xf29a, 0xf40e, 0xf29a, 0xf40e, 0xeff4, 0xf1ba, +0xeff4, 0xf1ba, 0xedb0, 0xefbf, 0xedb0, 0xefbf, 0xedb0, 0xefbf, 0xebd3, 0xee23, 0xebd3, +0xee23, 0xea6d, 0xecf3, 0xea6d, 0xecf3, 0xe96a, 0xec1a, 0xe96a, 0xec1a, 0xe8a1, 0xeb6e, +0xe8a1, 0xeb6e, 0xe7b7, 0xea93, 0xe7b7, 0xea93, 0xe750, 0xea2b, 0xe750, 0xea2b, 0xe750, +0xea2b, 0xe70b, 0xe9d8, 0xe70b, 0xe9d8, 0xe641, 0xe8f1, 0xe641, 0xe8f1, 0xe6cc, 0xe953, +0xe6cc, 0xe953, 0xe7b9, 0xea0a, 0xe7b9, 0xea0a, 0xe9a5, 0xebb6, 0xe9a5, 0xebb6, 0xe9a5, +0xebb6, 0xeb0d, 0xecd3, 0xeb0d, 0xecd3, 0xec6f, 0xede5, 0xec6f, 0xede5, 0xef4d, 0xf06d, +0xef4d, 0xf06d, 0xf18b, 0xf251, 0xf18b, 0xf251, 0xf581, 0xf5ec, 0xf581, 0xf5ec, 0xf954, +0xf964, 0xf954, 0xf964, 0xf954, 0xf964, 0xfc6a, 0xfc22, 0xfc6a, 0xfc22, 0x5b, 0xffbd, +0x5b, 0xffbd, 0x3b0, 0x2c1, 0x3b0, 0x2c1, 0x720, 0x5e6, 0x720, 0x5e6, 0xa42, +0x8c4, 0xa42, 0x8c4, 0xc97, 0xadb, 0xc97, 0xadb, 0xc97, 0xadb, 0xe98, 0xca4, +0xe98, 0xca4, 0x109a, 0xe74, 0x109a, 0xe74, 0x120a, 0xfb9, 0x120a, 0xfb9, 0x1338, +0x10c0, 0x1338, 0x10c0, 0x14d7, 0x123c, 0x14d7, 0x123c, 0x14d7, 0x123c, 0x1602, 0x1348, +0x1602, 0x1348, 0x16cf, 0x13f8, 0x16cf, 0x13f8, 0x1828, 0x1535, 0x1828, 0x1535, 0x19df, +0x16d1, 0x19df, 0x16d1, 0x1b64, 0x183a, 0x1b64, 0x183a, 0x1d3d, 0x19f7, 0x1d3d, 0x19f7, +0x1d3d, 0x19f7, 0x1efc, 0x1b99, 0x1efc, 0x1b99, 0x20e3, 0x1d62, 0x20e3, 0x1d62, 0x2313, +0x1f72, 0x2313, 0x1f72, 0x24cc, 0x210b, 0x24cc, 0x210b, 0x2727, 0x2347, 0x2727, 0x2347, +0x2922, 0x2524, 0x2922, 0x2524, 0x2922, 0x2524, 0x2ae0, 0x26c6, 0x2ae0, 0x26c6, 0x2d85, +0x2953, 0x2d85, 0x2953, 0x2e6b, 0x2a25, 0x2e6b, 0x2a25, 0x2dd2, 0x297e, 0x2dd2, 0x297e, +0x2df1, 0x2997, 0x2df1, 0x2997, 0x2df1, 0x2997, 0x2d66, 0x290f, 0x2d66, 0x290f, 0x2bf0, +0x27a5, 0x2bf0, 0x27a5, 0x2ac7, 0x2693, 0x2ac7, 0x2693, 0x28d3, 0x24c1, 0x28d3, 0x24c1, +0x2652, 0x226e, 0x2652, 0x226e, 0x246c, 0x20c1, 0x246c, 0x20c1, 0x246c, 0x20c1, 0x2202, +0x1e9c, 0x2202, 0x1e9c, 0x1eb8, 0x1ba2, 0x1eb8, 0x1ba2, 0x1b55, 0x1897, 0x1b55, 0x1897, +0x17ac, 0x1550, 0x17ac, 0x1550, 0x13b6, 0x11c2, 0x13b6, 0x11c2, 0xfe7, 0xe61, 0xfe7, +0xe61, 0xfe7, 0xe61, 0xbf4, 0xae0, 0xbf4, 0xae0, 0x8eb, 0x84a, 0x8eb, 0x84a, +0x6fc, 0x6cf, 0x6fc, 0x6cf, 0x489, 0x4cd, 0x489, 0x4cd, 0x2c2, 0x373, 0x2c2, +0x373, 0x2c2, 0x373, 0x7b, 0x194, 0x7b, 0x194, 0xfd0c, 0xfe85, 0xfd0c, 0xfe85, +0xfaef, 0xfcc0, 0xfaef, 0xfcc0, 0xf896, 0xfab6, 0xf896, 0xfab6, 0xf617, 0xf87c, 0xf617, +0xf87c, 0xf3c4, 0xf664, 0xf3c4, 0xf664, 0xf3c4, 0xf664, 0xf0fc, 0xf3cb, 0xf0fc, 0xf3cb, +0xeebc, 0xf1b1, 0xeebc, 0xf1b1, 0xec96, 0xefa7, 0xec96, 0xefa7, 0xeb83, 0xeea7, 0xeb83, +0xeea7, 0xead5, 0xee03, 0xead5, 0xee03, 0xe9d7, 0xed07, 0xe9d7, 0xed07, 0xe9d7, 0xed07, +0xe9e5, 0xed12, 0xe9e5, 0xed12, 0xeaac, 0xedcf, 0xeaac, 0xedcf, 0xec09, 0xef20, 0xec09, +0xef20, 0xecf3, 0xeff9, 0xecf3, 0xeff9, 0xeca4, 0xef97, 0xeca4, 0xef97, 0xeca4, 0xef97, +0xecb5, 0xef92, 0xecb5, 0xef92, 0xed8b, 0xf053, 0xed8b, 0xf053, 0xee18, 0xf0c9, 0xee18, +0xf0c9, 0xee78, 0xf111, 0xee78, 0xf111, 0xef27, 0xf1a8, 0xef27, 0xf1a8, 0xef98, 0xf201, +0xef98, 0xf201, 0xef98, 0xf201, 0xefd1, 0xf220, 0xefd1, 0xf220, 0xf057, 0xf28b, 0xf057, +0xf28b, 0xf08d, 0xf2a5, 0xf08d, 0xf2a5, 0xf0eb, 0xf2e5, 0xf0eb, 0xf2e5, 0xf189, 0xf361, +0xf189, 0xf361, 0xf269, 0xf41c, 0xf269, 0xf41c, 0xf269, 0xf41c, 0xf3b2, 0xf53e, 0xf3b2, +0xf53e, 0xf472, 0xf5d2, 0xf472, 0xf5d2, 0xf570, 0xf6a2, 0xf570, 0xf6a2, 0xf661, 0xf760, +0xf661, 0xf760, 0xf770, 0xf83b, 0xf770, 0xf83b, 0xf770, 0xf83b, 0xf926, 0xf9b8, 0xf926, +0xf9b8, 0xfb7f, 0xfbd8, 0xfb7f, 0xfbd8, 0xfdd9, 0xfdf7, 0xfdd9, 0xfdf7, 0x5, 0xffe9, +0x5, 0xffe9, 0x2ea, 0x295, 0x2ea, 0x295, 0x430, 0x3a5, 0x430, 0x3a5, 0x430, +0x3a5, 0x556, 0x499, 0x556, 0x499, 0x762, 0x678, 0x762, 0x678, 0x8b6, 0x7a6, +0x8b6, 0x7a6, 0x9c3, 0x895, 0x9c3, 0x895, 0xaff, 0x9bb, 0xaff, 0x9bb, 0xaff, +0x9bb, 0xc44, 0xaf5, 0xc44, 0xaf5, 0xc3c, 0xaec, 0xc3c, 0xaec, 0xc69, 0xb23, +0xc69, 0xb23, 0xc2a, 0xaf7, 0xc2a, 0xaf7, 0xb48, 0xa34, 0xb48, 0xa34, 0xa98, +0x9ad, 0xa98, 0x9ad, 0xa98, 0x9ad, 0x8d8, 0x820, 0x8d8, 0x820, 0x76d, 0x6f1, +0x76d, 0x6f1, 0x5e0, 0x5a6, 0x5e0, 0x5a6, 0x405, 0x414, 0x405, 0x414, 0x2bc, +0x318, 0x2bc, 0x318, 0xfd, 0x1a9, 0xfd, 0x1a9, 0xfd, 0x1a9, 0xff21, 0x1f, +0xff21, 0x1f, 0xfdfb, 0xff4a, 0xfdfb, 0xff4a, 0xfd01, 0xfea0, 0xfd01, 0xfea0, 0xfb61, +0xfd4d, 0xfb61, 0xfd4d, 0xf99f, 0xfbd3, 0xf99f, 0xfbd3, 0xf99f, 0xfbd3, 0xf860, 0xfad5, +0xf860, 0xfad5, 0xf651, 0xf903, 0xf651, 0xf903, 0xf4a0, 0xf786, 0xf4a0, 0xf786, 0xf396, +0xf6a9, 0xf396, 0xf6a9, 0xf1e3, 0xf51b, 0xf1e3, 0xf51b, 0xf151, 0xf4a6, 0xf151, 0xf4a6, +0xf151, 0xf4a6, 0xefe6, 0xf350, 0xefe6, 0xf350, 0xedf5, 0xf16c, 0xedf5, 0xf16c, 0xed73, +0xf0f0, 0xed73, 0xf0f0, 0xeca8, 0xf024, 0xeca8, 0xf024, 0xebee, 0xef63, 0xebee, 0xef63, +0xeb1b, 0xee84, 0xeb1b, 0xee84, 0xeb1b, 0xee84, 0xeabb, 0xee13, 0xeabb, 0xee13, 0xeabe, +0xee01, 0xeabe, 0xee01, 0xea2f, 0xed58, 0xea2f, 0xed58, 0xea10, 0xed1c, 0xea10, 0xed1c, +0xe9a4, 0xec91, 0xe9a4, 0xec91, 0xe9a4, 0xec91, 0xe90a, 0xebd6, 0xe90a, 0xebd6, 0xe938, +0xebe0, 0xe938, 0xebe0, 0xe88c, 0xeb0e, 0xe88c, 0xeb0e, 0xe75e, 0xe9b9, 0xe75e, 0xe9b9, +0xe68e, 0xe8be, 0xe68e, 0xe8be, 0xe5f7, 0xe7fb, 0xe5f7, 0xe7fb, 0xe5f7, 0xe7fb, 0xe643, +0xe819, 0xe643, 0xe819, 0xe65a, 0xe800, 0xe65a, 0xe800, 0xe654, 0xe7c7, 0xe654, 0xe7c7, +0xe6db, 0xe81a, 0xe6db, 0xe81a, 0xe6e0, 0xe7e8, 0xe6e0, 0xe7e8, 0xe7be, 0xe88e, 0xe7be, +0xe88e, 0xe7be, 0xe88e, 0xe9c0, 0xea56, 0xe9c0, 0xea56, 0xeb52, 0xebae, 0xeb52, 0xebae, +0xedfb, 0xee1c, 0xedfb, 0xee1c, 0xf0b7, 0xf09d, 0xf0b7, 0xf09d, 0xf215, 0xf1c3, 0xf215, +0xf1c3, 0xf215, 0xf1c3, 0xf3c2, 0xf339, 0xf3c2, 0xf339, 0xf591, 0xf4d3, 0xf591, 0xf4d3, +0xf721, 0xf633, 0xf721, 0xf633, 0xf824, 0xf70b, 0xf824, 0xf70b, 0xf953, 0xf814, 0xf953, +0xf814, 0xfa68, 0xf909, 0xfa68, 0xf909, 0xfa68, 0xf909, 0xfb37, 0xf9c0, 0xfb37, 0xf9c0, +0xfcdc, 0xfb55, 0xfcdc, 0xfb55, 0xfd4b, 0xfbba, 0xfd4b, 0xfbba, 0xfd0d, 0xfb7b, 0xfd0d, +0xfb7b, 0xfd5b, 0xfbd0, 0xfd5b, 0xfbd0, 0xfd2e, 0xfbb1, 0xfd2e, 0xfbb1, 0xfd2e, 0xfbb1, +0xfda6, 0xfc3e, 0xfda6, 0xfc3e, 0xfe62, 0xfd17, 0xfe62, 0xfd17, 0xff28, 0xfdfe, 0xff28, +0xfdfe, 0x2, 0xfefe, 0x2, 0xfefe, 0xffb9, 0xfedf, 0xffb9, 0xfedf, 0xffb9, 0xfedf, +0xff6b, 0xfebd, 0xff6b, 0xfebd, 0xff38, 0xfeb8, 0xff38, 0xfeb8, 0xff91, 0xff3e, 0xff91, +0xff3e, 0xfff4, 0xffce, 0xfff4, 0xffce, 0xfffe, 0x2, 0xfffe, 0x2, 0xe0, 0x10b, +0xe0, 0x10b, 0xe0, 0x10b, 0xac, 0xfa, 0xac, 0xfa, 0xbd, 0x12b, 0xbd, +0x12b, 0xcb, 0x153, 0xcb, 0x153, 0xff67, 0x4, 0xff67, 0x4, 0xff34, 0xffe1, +0xff34, 0xffe1, 0xfeeb, 0xffa2, 0xfeeb, 0xffa2, 0xfeeb, 0xffa2, 0xfe1c, 0xfeda, 0xfe1c, +0xfeda, 0xfea0, 0xff5e, 0xfea0, 0xff5e, 0xfea9, 0xff65, 0xfea9, 0xff65, 0xfe06, 0xfebc, +0xfe06, 0xfebc, 0xff19, 0xffc7, 0xff19, 0xffc7, 0xff19, 0xffc7, 0x30, 0xd3, 0x30, +0xd3, 0x103, 0x199, 0x103, 0x199, 0x2a9, 0x333, 0x2a9, 0x333, 0x3ec, 0x468, +0x3ec, 0x468, 0x548, 0x5b6, 0x548, 0x5b6, 0x5c6, 0x626, 0x5c6, 0x626, 0x5c6, +0x626, 0x61d, 0x66f, 0x61d, 0x66f, 0x6cf, 0x712, 0x6cf, 0x712, 0x63a, 0x66e, +0x63a, 0x66e, 0x602, 0x627, 0x602, 0x627, 0x5d0, 0x5e4, 0x5d0, 0x5e4, 0x516, +0x517, 0x516, 0x517, 0x516, 0x517, 0x489, 0x475, 0x489, 0x475, 0x41e, 0x3f2, +0x41e, 0x3f2, 0x433, 0x3eb, 0x433, 0x3eb, 0x45c, 0x3f6, 0x45c, 0x3f6, 0x53b, +0x4b2, 0x53b, 0x4b2, 0x53b, 0x4b2, 0x5e7, 0x536, 0x5e7, 0x536, 0x5c9, 0x4eb, +0x5c9, 0x4eb, 0x6bd, 0x5b0, 0x6bd, 0x5b0, 0x832, 0x6f0, 0x832, 0x6f0, 0x956, +0x7de, 0x956, 0x7de, 0xb27, 0x976, 0xb27, 0x976, 0xb27, 0x976, 0xd43, 0xb59, +0xd43, 0xb59, 0xf5c, 0xd37, 0xf5c, 0xd37, 0x1228, 0xfcb, 0x1228, 0xfcb, 0x1434, +0x11a1, 0x1434, 0x11a1, 0x14ff, 0x123a, 0x14ff, 0x123a, 0x15d4, 0x12e1, 0x15d4, 0x12e1, +0x15d4, 0x12e1, 0x1730, 0x1417, 0x1730, 0x1417, 0x17ac, 0x1475, 0x17ac, 0x1475, 0x1754, +0x1407, 0x1754, 0x1407, 0x1708, 0x13ae, 0x1708, 0x13ae, 0x15ec, 0x128f, 0x15ec, 0x128f, +0x15ec, 0x128f, 0x156a, 0x1215, 0x156a, 0x1215, 0x1475, 0x1131, 0x1475, 0x1131, 0x1288, +0xf5f, 0x1288, 0xf5f, 0x1097, 0xd93, 0x1097, 0xd93, 0xe97, 0xbc0, 0xe97, 0xbc0, +0xd28, 0xa87, 0xd28, 0xa87, 0xd28, 0xa87, 0xb5f, 0x8f8, 0xb5f, 0x8f8, 0x997, +0x771, 0x997, 0x771, 0x6ec, 0x50a, 0x6ec, 0x50a, 0x4e8, 0x34c, 0x4e8, 0x34c, +0x3cd, 0x277, 0x3cd, 0x277, 0x21c, 0x10b, 0x21c, 0x10b, 0x21c, 0x10b, 0x1d3, +0x106, 0x1d3, 0x106, 0x11c, 0x90, 0x11c, 0x90, 0x47, 0xfff8, 0x47, 0xfff8, +0, 0xffe8, 0, 0xffe8, 0xfef4, 0xff10, 0xfef4, 0xff10, 0xfef4, 0xff10, 0xfe62, +0xfeac, 0xfe62, 0xfeac, 0xfe2b, 0xfe9e, 0xfe2b, 0xfe9e, 0xfd16, 0xfdad, 0xfd16, 0xfdad, +0xfb01, 0xfbb7, 0xfb01, 0xfbb7, 0xf9c9, 0xfa9c, 0xf9c9, 0xfa9c, 0xf8cc, 0xf9ba, 0xf8cc, +0xf9ba, 0xf8cc, 0xf9ba, 0xf6e8, 0xf7ee, 0xf6e8, 0xf7ee, 0xf5f5, 0xf712, 0xf5f5, 0xf712, +0xf566, 0xf69b, 0xf566, 0xf69b, 0xf4a5, 0xf5f4, 0xf4a5, 0xf5f4, 0xf47c, 0xf5e5, 0xf47c, +0xf5e5, 0xf47c, 0xf5e5, 0xf485, 0xf60a, 0xf485, 0xf60a, 0xf482, 0xf626, 0xf482, 0xf626, +0xf460, 0xf625, 0xf460, 0xf625, 0xf3f2, 0xf5db, 0xf3f2, 0xf5db, 0xf368, 0xf575, 0xf368, +0xf575, 0xf2ba, 0xf4ed, 0xf2ba, 0xf4ed, 0xf2ba, 0xf4ed, 0xf1d4, 0xf42b, 0xf1d4, 0xf42b, +0xf196, 0xf411, 0xf196, 0xf411, 0xf09b, 0xf337, 0xf09b, 0xf337, 0xeef4, 0xf1ad, 0xeef4, +0xf1ad, 0xeea0, 0xf16f, 0xeea0, 0xf16f, 0xed93, 0xf072, 0xed93, 0xf072, 0xed93, 0xf072, +0xed01, 0xefe8, 0xed01, 0xefe8, 0xed6d, 0xf053, 0xed6d, 0xf053, 0xecba, 0xef92, 0xecba, +0xef92, 0xec66, 0xef27, 0xec66, 0xef27, 0xec52, 0xeef0, 0xec52, 0xeef0, 0xec52, 0xeef0, +0xec92, 0xef01, 0xec92, 0xef01, 0xeda8, 0xefde, 0xeda8, 0xefde, 0xefaa, 0xf19c, 0xefaa, +0xf19c, 0xf248, 0xf3ec, 0xf248, 0xf3ec, 0xf43b, 0xf589, 0xf43b, 0xf589, 0xf713, 0xf804, +0xf713, 0xf804, 0xf713, 0xf804, 0xf9e5, 0xfa75, 0xf9e5, 0xfa75, 0xfbff, 0xfc2b, 0xfbff, +0xfc2b, 0xff26, 0xfeed, 0xff26, 0xfeed, 0x177, 0xdb, 0x177, 0xdb, 0x3d6, 0x2da, +0x3d6, 0x2da, 0x716, 0x5c0, 0x716, 0x5c0, 0x716, 0x5c0, 0x9ed, 0x844, 0x9ed, +0x844, 0xc95, 0xaa2, 0xc95, 0xaa2, 0xe22, 0xbee, 0xe22, 0xbee, 0xfdb, 0xd70, +0xfdb, 0xd70, 0x1178, 0xee2, 0x1178, 0xee2, 0x1178, 0xee2, 0x12bb, 0x1006, 0x12bb, +0x1006, 0x146a, 0x11a0, 0x146a, 0x11a0, 0x1485, 0x11b1, 0x1485, 0x11b1, 0x14d4, 0x11ff, +0x14d4, 0x11ff, 0x156f, 0x12a1, 0x156f, 0x12a1, 0x1527, 0x1266, 0x1527, 0x1266, 0x1527, +0x1266, 0x153c, 0x128e, 0x153c, 0x128e, 0x14f2, 0x125a, 0x14f2, 0x125a, 0x153d, 0x12bc, +0x153d, 0x12bc, 0x1621, 0x13b7, 0x1621, 0x13b7, 0x1656, 0x1403, 0x1656, 0x1403, 0x16e2, +0x14a1, 0x16e2, 0x14a1, 0x16e2, 0x14a1, 0x1803, 0x15d1, 0x1803, 0x15d1, 0x18b2, 0x168a, +0x18b2, 0x168a, 0x18c3, 0x169f, 0x18c3, 0x169f, 0x18f2, 0x16cd, 0x18f2, 0x16cd, 0x196e, +0x1742, 0x196e, 0x1742, 0x196e, 0x1742, 0x1a2b, 0x17f3, 0x1a2b, 0x17f3, 0x1a88, 0x1840, +0x1a88, 0x1840, 0x1a0f, 0x17b4, 0x1a0f, 0x17b4, 0x192b, 0x16bb, 0x192b, 0x16bb, 0x18f0, +0x166b, 0x18f0, 0x166b, 0x19ae, 0x1714, 0x19ae, 0x1714, 0x19ae, 0x1714, 0x19af, 0x1703, +0x19af, 0x1703, 0x19ab, 0x16f0, 0x19ab, 0x16f0, 0x19d4, 0x170f, 0x19d4, 0x170f, 0x1986, +0x16bd, 0x1986, 0x16bd, 0x19ad, 0x16e7, 0x19ad, 0x16e7, 0x18d9, 0x161e, 0x18d9, 0x161e, +0x18d9, 0x161e, 0x17b7, 0x150d, 0x17b7, 0x150d, 0x1657, 0x13c6, 0x1657, 0x13c6, 0x13de, +0x116e, 0x13de, 0x116e, 0x126c, 0x1023, 0x126c, 0x1023, 0x10ad, 0xe90, 0x10ad, 0xe90, +0x10ad, 0xe90, 0xe77, 0xc8a, 0xe77, 0xc8a, 0xd2d, 0xb74, 0xd2d, 0xb74, 0xb26, +0x9a2, 0xb26, 0x9a2, 0x8bd, 0x76d, 0x8bd, 0x76d, 0x72b, 0x60e, 0x72b, 0x60e, +0x5a6, 0x4ba, 0x5a6, 0x4ba, 0x5a6, 0x4ba, 0x400, 0x33f, 0x400, 0x33f, 0x2dd, +0x243, 0x2dd, 0x243, 0x143, 0xc9, 0x143, 0xc9, 0xfff7, 0xff98, 0xfff7, 0xff98, +0x3d, 0xfff1, 0x3d, 0xfff1, 0xc, 0xffcd, 0xc, 0xffcd, 0xc, 0xffcd, 0xff9a, +0xff62, 0xff9a, 0xff62, 0xffa0, 0xff69, 0xffa0, 0xff69, 0xfef1, 0xfeb8, 0xfef1, 0xfeb8, +0xfe90, 0xfe52, 0xfe90, 0xfe52, 0xff15, 0xfed1, 0xff15, 0xfed1, 0xff15, 0xfed1, 0xffa5, +0xff5b, 0xffa5, 0xff5b, 0x2f, 0xffe1, 0x2f, 0xffe1, 0x2b, 0xffdd, 0x2b, 0xffdd, +0xff74, 0xff2a, 0xff74, 0xff2a, 0xfe7e, 0xfe40, 0xfe7e, 0xfe40, 0xfe0f, 0xfde3, 0xfe0f, +0xfde3, 0xfe0f, 0xfde3, 0xfd76, 0xfd65, 0xfd76, 0xfd65, 0xfbd3, 0xfbe5, 0xfbd3, 0xfbe5, +0xfad3, 0xfb10, 0xfad3, 0xfb10, 0xfa0a, 0xfa7b, 0xfa0a, 0xfa7b, 0xf972, 0xfa1d, 0xf972, +0xfa1d, 0xf8d8, 0xf9c4, 0xf8d8, 0xf9c4, 0xf8d8, 0xf9c4, 0xf781, 0xf8b4, 0xf781, 0xf8b4, +0xf68d, 0xf809, 0xf68d, 0xf809, 0xf54a, 0xf712, 0xf54a, 0xf712, 0xf45f, 0xf671, 0xf45f, +0xf671, 0xf3f8, 0xf652, 0xf3f8, 0xf652, 0xf3f8, 0xf652, 0xf3a1, 0xf63f, 0xf3a1, 0xf63f, +0xf352, 0xf62c, 0xf352, 0xf62c, 0xf2f5, 0xf604, 0xf2f5, 0xf604, 0xf2d9, 0xf613, 0xf2d9, +0xf613, 0xf215, 0xf56e, 0xf215, 0xf56e, 0xf1ac, 0xf519, 0xf1ac, 0xf519, 0xf1ac, 0xf519, +0xf190, 0xf505, 0xf190, 0xf505, 0xf122, 0xf491, 0xf122, 0xf491, 0xf073, 0xf3d1, 0xf073, +0xf3d1, 0xef9f, 0xf2e0, 0xef9f, 0xf2e0, 0xef8c, 0xf2a4, 0xef8c, 0xf2a4, 0xefda, 0xf2c1, +0xefda, 0xf2c1, 0xefda, 0xf2c1, 0xf08d, 0xf33a, 0xf08d, 0xf33a, 0xf139, 0xf3a6, 0xf139, +0xf3a6, 0xf26f, 0xf498, 0xf26f, 0xf498, 0xf45a, 0xf63d, 0xf45a, 0xf63d, 0xf635, 0xf7d1, +0xf635, 0xf7d1, 0xf635, 0xf7d1, 0xf81d, 0xf974, 0xf81d, 0xf974, 0xf94f, 0xfa63, 0xf94f, +0xfa63, 0xfab5, 0xfb8b, 0xfab5, 0xfb8b, 0xfc7e, 0xfd1c, 0xfc7e, 0xfd1c, 0xfe1f, 0xfe8b, +0xfe1f, 0xfe8b, 0xff50, 0xff92, 0xff50, 0xff92, 0xff50, 0xff92, 0xffc6, 0xffe4, 0xffc6, +0xffe4, 0xffda, 0xffde, 0xffda, 0xffde, 0xff1b, 0xff0b, 0xff1b, 0xff0b, 0xfed0, 0xfeb4, +0xfed0, 0xfeb4, 0xfeac, 0xfe8a, 0xfeac, 0xfe8a, 0xfe00, 0xfddd, 0xfe00, 0xfddd, 0xfe00, +0xfddd, 0xfdeb, 0xfdcd, 0xfdeb, 0xfdcd, 0xfd11, 0xfcfc, 0xfd11, 0xfcfc, 0xfc10, 0xfc06, +0xfc10, 0xfc06, 0xfc77, 0xfc7a, 0xfc77, 0xfc7a, 0xfc60, 0xfc73, 0xfc60, 0xfc73, 0xfc60, +0xfc73, 0xfc12, 0xfc34, 0xfc12, 0xfc34, 0xfc08, 0xfc39, 0xfc08, 0xfc39, 0xfb94, 0xfbd5, +0xfb94, 0xfbd5, 0xfce4, 0xfd34, 0xfce4, 0xfd34, 0xfe7c, 0xfedb, 0xfe7c, 0xfedb, 0xfedf, +0xff4e, 0xfedf, 0xff4e, 0xfedf, 0xff4e, 0xff20, 0xff9f, 0xff20, 0xff9f, 0xfefe, 0xff8f, +0xfefe, 0xff8f, 0xff2a, 0xffce, 0xff2a, 0xffce, 0xff11, 0xffcb, 0xff11, 0xffcb, 0xfefa, +0xffcc, 0xfefa, 0xffcc, 0xfefa, 0xffcc, 0xfdb1, 0xfe9f, 0xfdb1, 0xfe9f, 0xfbbc, 0xfcca, +0xfbbc, 0xfcca, 0xfaf3, 0xfc25, 0xfaf3, 0xfc25, 0xf959, 0xfab4, 0xf959, 0xfab4, 0xf7e4, +0xf96c, 0xf7e4, 0xf96c, 0xf639, 0xf7f1, 0xf639, 0xf7f1, 0xf639, 0xf7f1, 0xf43d, 0xf629, +0xf43d, 0xf629, 0xf303, 0xf525, 0xf303, 0xf525, 0xf111, 0xf36b, 0xf111, 0xf36b, 0xef14, +0xf1a8, 0xef14, 0xf1a8, 0xedc6, 0xf092, 0xedc6, 0xf092, 0xec76, 0xef78, 0xec76, 0xef78, +0xec76, 0xef78, 0xeaf5, 0xee2a, 0xeaf5, 0xee2a, 0xe9ef, 0xed52, 0xe9ef, 0xed52, 0xe8eb, +0xec77, 0xe8eb, 0xec77, 0xe7f7, 0xeba5, 0xe7f7, 0xeba5, 0xe798, 0xeb60, 0xe798, 0xeb60, +0xe798, 0xeb60, 0xe732, 0xeb0b, 0xe732, 0xeb0b, 0xe778, 0xeb59, 0xe778, 0xeb59, 0xe7dc, +0xebb9, 0xe7dc, 0xebb9, 0xe7a1, 0xeb73, 0xe7a1, 0xeb73, 0xe74e, 0xeb0a, 0xe74e, 0xeb0a, +0xe738, 0xead5, 0xe738, 0xead5, 0xe738, 0xead5, 0xe70d, 0xea82, 0xe70d, 0xea82, 0xe5f8, +0xe93d, 0xe5f8, 0xe93d, 0xe547, 0xe856, 0xe547, 0xe856, 0xe50a, 0xe7dc, 0xe50a, 0xe7dc, +0xe56b, 0xe7fb, 0xe56b, 0xe7fb, 0xe6c2, 0xe90e, 0xe6c2, 0xe90e, 0xe6c2, 0xe90e, 0xe761, +0xe967, 0xe761, 0xe967, 0xe849, 0xea07, 0xe849, 0xea07, 0xe9da, 0xeb51, 0xe9da, 0xeb51, +0xebd9, 0xed0a, 0xebd9, 0xed0a, 0xee14, 0xef00, 0xee14, 0xef00, 0xee14, 0xef00, 0xeff4, +0xf09f, 0xeff4, 0xf09f, 0xf1dd, 0xf249, 0xf1dd, 0xf249, 0xf3e1, 0xf412, 0xf3e1, 0xf412, +0xf5fe, 0xf5f8, 0xf5fe, 0xf5f8, 0xf776, 0xf73d, 0xf776, 0xf73d, 0xf8ab, 0xf842, 0xf8ab, +0xf842, 0xf8ab, 0xf842, 0xf9ac, 0xf916, 0xf9ac, 0xf916, 0xfabb, 0xf9fb, 0xfabb, 0xf9fb, +0xfc99, 0xfbb2, 0xfc99, 0xfbb2, 0xfe8e, 0xfd81, 0xfe8e, 0xfd81, 0xffdf, 0xfeaf, 0xffdf, +0xfeaf, 0xd6, 0xff84, 0xd6, 0xff84, 0xd6, 0xff84, 0x1a6, 0x32, 0x1a6, 0x32, +0x207, 0x73, 0x207, 0x73, 0x2fe, 0x14b, 0x2fe, 0x14b, 0x45a, 0x289, 0x45a, +0x289, 0x5b1, 0x3c4, 0x5b1, 0x3c4, 0x5b1, 0x3c4, 0x73e, 0x536, 0x73e, 0x536, +0x91b, 0x6fb, 0x91b, 0x6fb, 0xa82, 0x84d, 0xa82, 0x84d, 0xc6e, 0xa27, 0xc6e, +0xa27, 0xf0f, 0xcba, 0xf0f, 0xcba, 0xfd6, 0xd79, 0xfd6, 0xd79, 0xfd6, 0xd79, +0x1121, 0xec0, 0x1121, 0xec0, 0x12d3, 0x1075, 0x12d3, 0x1075, 0x13cb, 0x1176, 0x13cb, +0x1176, 0x1497, 0x1251, 0x1497, 0x1251, 0x144e, 0x121e, 0x144e, 0x121e, 0x13e3, 0x11d0, +0x13e3, 0x11d0, 0x13e3, 0x11d0, 0x13dd, 0x11ec, 0x13dd, 0x11ec, 0x13c4, 0x11fc, 0x13c4, +0x11fc, 0x1281, 0x10e5, 0x1281, 0x10e5, 0x1154, 0xfea, 0x1154, 0xfea, 0x1076, 0xf40, +0x1076, 0xf40, 0x1076, 0xf40, 0xf55, 0xe55, 0xf55, 0xe55, 0xead, 0xde4, 0xead, +0xde4, 0xd8f, 0xcfc, 0xd8f, 0xcfc, 0xc57, 0xbf8, 0xc57, 0xbf8, 0xb67, 0xb3a, +0xb67, 0xb3a, 0xa1d, 0xa1d, 0xa1d, 0xa1d, 0xa1d, 0xa1d, 0x8f1, 0x91a, 0x8f1, +0x91a, 0x855, 0x8a1, 0x855, 0x8a1, 0x779, 0x7e1, 0x779, 0x7e1, 0x705, 0x782, +0x705, 0x782, 0x73f, 0x7cb, 0x73f, 0x7cb, 0x6bb, 0x750, 0x6bb, 0x750, 0x6bb, +0x750, 0x67b, 0x710, 0x67b, 0x710, 0x694, 0x725, 0x694, 0x725, 0x57f, 0x606, +0x57f, 0x606, 0x489, 0x502, 0x489, 0x502, 0x38b, 0x3f0, 0x38b, 0x3f0, 0x38b, +0x3f0, 0x203, 0x252, 0x203, 0x252, 0x126, 0x15d, 0x126, 0x15d, 0xdb, 0xf9, +0xdb, 0xf9, 0xf7, 0xfb, 0xf7, 0xfb, 0x11f, 0x109, 0x11f, 0x109, 0x1be, +0x18f, 0x1be, 0x18f, 0x1be, 0x18f, 0x1c9, 0x182, 0x1c9, 0x182, 0x182, 0x124, +0x182, 0x124, 0x1ea, 0x178, 0x1ea, 0x178, 0x1fc, 0x177, 0x1fc, 0x177, 0x1de, +0x145, 0x1de, 0x145, 0xd4, 0x2a, 0xd4, 0x2a, 0xd4, 0x2a, 0xffb8, 0xfefe, +0xffb8, 0xfefe, 0xff64, 0xfe99, 0xff64, 0xfe99, 0xfec2, 0xfde6, 0xfec2, 0xfde6, 0xfe12, +0xfd24, 0xfe12, 0xfd24, 0xfe17, 0xfd16, 0xfe17, 0xfd16, 0xfe17, 0xfd16, 0xfde8, 0xfcd3, +0xfde8, 0xfcd3, 0xfded, 0xfcc3, 0xfded, 0xfcc3, 0xfe1c, 0xfcda, 0xfe1c, 0xfcda, 0xfdc7, +0xfc6c, 0xfdc7, 0xfc6c, 0xfe29, 0xfcb5, 0xfe29, 0xfcb5, 0xfefa, 0xfd6c, 0xfefa, 0xfd6c, +0xfefa, 0xfd6c, 0x7b, 0xfed3, 0x7b, 0xfed3, 0x138, 0xff78, 0x138, 0xff78, 0x25c, +0x87, 0x25c, 0x87, 0x487, 0x29f, 0x487, 0x29f, 0x4e9, 0x2f4, 0x4e9, 0x2f4, +0x5ba, 0x3bd, 0x5ba, 0x3bd, 0x5ba, 0x3bd, 0x6a6, 0x4a9, 0x6a6, 0x4a9, 0x6bd, +0x4c8, 0x6bd, 0x4c8, 0x747, 0x564, 0x747, 0x564, 0x723, 0x55b, 0x723, 0x55b, +0x689, 0x4e7, 0x689, 0x4e7, 0x689, 0x4e7, 0x6e4, 0x572, 0x6e4, 0x572, 0x6c0, +0x589, 0x6c0, 0x589, 0x597, 0x4a5, 0x597, 0x4a5, 0x4a4, 0x400, 0x4a4, 0x400, +0x35c, 0x30e, 0x35c, 0x30e, 0x207, 0x217, 0x207, 0x217, 0x207, 0x217, 0xff, +0x172, 0xff, 0x172, 0xff82, 0x5a, 0xff82, 0x5a, 0xfd6a, 0xfeaa, 0xfd6a, 0xfeaa, +0xfb5b, 0xfd02, 0xfb5b, 0xfd02, 0xf9b4, 0xfbbf, 0xf9b4, 0xfbbf, 0xf85f, 0xfaca, 0xf85f, +0xfaca, 0xf85f, 0xfaca, 0xf6b5, 0xf978, 0xf6b5, 0xf978, 0xf45b, 0xf76e, 0xf45b, 0xf76e, +0xf287, 0xf5df, 0xf287, 0xf5df, 0xf1a7, 0xf53a, 0xf1a7, 0xf53a, 0xf08c, 0xf44b, 0xf08c, +0xf44b, 0xf08c, 0xf44b, 0xefdc, 0xf3ba, 0xefdc, 0xf3ba, 0xef79, 0xf369, 0xef79, 0xf369, +0xee8d, 0xf27f, 0xee8d, 0xf27f, 0xee8e, 0xf275, 0xee8e, 0xf275, 0xede4, 0xf1b2, 0xede4, +0xf1b2, 0xec66, 0xf00f, 0xec66, 0xf00f, 0xec66, 0xf00f, 0xebef, 0xef67, 0xebef, 0xef67, +0xec00, 0xef3d, 0xec00, 0xef3d, 0xec16, 0xef0f, 0xec16, 0xef0f, 0xed0c, 0xefbb, 0xed0c, +0xefbb, 0xef54, 0xf1b2, 0xef54, 0xf1b2, 0xef54, 0xf1b2, 0xf0ed, 0xf2f7, 0xf0ed, 0xf2f7, +0xf2ed, 0xf49f, 0xf2ed, 0xf49f, 0xf603, 0xf75d, 0xf603, 0xf75d, 0xf8d6, 0xf9d8, 0xf8d6, +0xf9d8, 0xfbd2, 0xfc7c, 0xfbd2, 0xfc7c, 0xfea9, 0xfefc, 0xfea9, 0xfefc, 0xfea9, 0xfefc, +0x14e, 0x14d, 0x14e, 0x14d, 0x436, 0x3e3, 0x436, 0x3e3, 0x664, 0x5c2, 0x664, +0x5c2, 0x7dc, 0x6ed, 0x7dc, 0x6ed, 0x988, 0x84e, 0x988, 0x84e, 0xa77, 0x8f3, +0xa77, 0x8f3, 0xa77, 0x8f3, 0xbb5, 0x9ea, 0xbb5, 0x9ea, 0xda5, 0xb94, 0xda5, +0xb94, 0xeeb, 0xc93, 0xeeb, 0xc93, 0xfe3, 0xd45, 0xfe3, 0xd45, 0x1159, 0xe76, +0x1159, 0xe76, 0x1159, 0xe76, 0x12d6, 0xfad, 0x12d6, 0xfad, 0x1399, 0x102b, 0x1399, +0x102b, 0x1505, 0x1153, 0x1505, 0x1153, 0x16ac, 0x12b7, 0x16ac, 0x12b7, 0x18a9, 0x1473, +0x18a9, 0x1473, 0x1bdd, 0x176a, 0x1bdd, 0x176a, 0x1bdd, 0x176a, 0x1e98, 0x19ec, 0x1e98, +0x19ec, 0x20a7, 0x1bc7, 0x20a7, 0x1bc7, 0x229e, 0x1d91, 0x229e, 0x1d91, 0x247a, 0x1f49, +0x247a, 0x1f49, 0x2673, 0x2129, 0x2673, 0x2129, 0x28d3, 0x237a, 0x28d3, 0x237a, 0x28d3, +0x237a, 0x2a47, 0x24ea, 0x2a47, 0x24ea, 0x2a6d, 0x251b, 0x2a6d, 0x251b, 0x2b1f, 0x25e6, +0x2b1f, 0x25e6, 0x2b70, 0x265d, 0x2b70, 0x265d, 0x2a98, 0x25ba, 0x2a98, 0x25ba, 0x2a98, +0x25ba, 0x2965, 0x24ca, 0x2965, 0x24ca, 0x27ae, 0x2363, 0x27ae, 0x2363, 0x2596, 0x21a8, +0x2596, 0x21a8, 0x2337, 0x1fb2, 0x2337, 0x1fb2, 0x20fa, 0x1de6, 0x20fa, 0x1de6, 0x1ed4, +0x1c3a, 0x1ed4, 0x1c3a, 0x1ed4, 0x1c3a, 0x1c4c, 0x1a30, 0x1c4c, 0x1a30, 0x18fe, 0x1765, +0x18fe, 0x1765, 0x1608, 0x14f3, 0x1608, 0x14f3, 0x13a5, 0x1312, 0x13a5, 0x1312, 0x10ce, +0x10bb, 0x10ce, 0x10bb, 0xdf7, 0xe5d, 0xdf7, 0xe5d, 0xdf7, 0xe5d, 0xa1f, 0xaf7, +0xa1f, 0xaf7, 0x6f9, 0x83a, 0x6f9, 0x83a, 0x557, 0x6f7, 0x557, 0x6f7, 0x364, +0x557, 0x364, 0x557, 0xe1, 0x31c, 0xe1, 0x31c, 0xe1, 0x31c, 0xfe1f, 0x94, +0xfe1f, 0x94, 0xfbca, 0xfe6e, 0xfbca, 0xfe6e, 0xf909, 0xfbcf, 0xf909, 0xfbcf, 0xf758, +0xfa35, 0xf758, 0xfa35, 0xf5e2, 0xf8ca, 0xf5e2, 0xf8ca, 0xf2eb, 0xf5d6, 0xf2eb, 0xf5d6, +0xf2eb, 0xf5d6, 0xf0fa, 0xf3e0, 0xf0fa, 0xf3e0, 0xefcb, 0xf2a5, 0xefcb, 0xf2a5, 0xee2f, +0xf0f7, 0xee2f, 0xf0f7, 0xed6c, 0xf01f, 0xed6c, 0xf01f, 0xed23, 0xefbe, 0xed23, 0xefbe, +0xec95, 0xef16, 0xec95, 0xef16, 0xec95, 0xef16, 0xed4c, 0xefb3, 0xed4c, 0xefb3, 0xedd0, +0xf01e, 0xedd0, 0xf01e, 0xee48, 0xf07d, 0xee48, 0xf07d, 0xef3a, 0xf158, 0xef3a, 0xf158, +0xef56, 0xf15e, 0xef56, 0xf15e, 0xef56, 0xf15e, 0xef87, 0xf179, 0xef87, 0xf179, 0xef87, +0xf165, 0xef87, 0xf165, 0xef69, 0xf132, 0xef69, 0xf132, 0xef38, 0xf0eb, 0xef38, 0xf0eb, +0xeffe, 0xf19b, 0xeffe, 0xf19b, 0xf093, 0xf216, 0xf093, 0xf216, 0xf093, 0xf216, 0xf06a, +0xf1d1, 0xf06a, 0xf1d1, 0xf13f, 0xf285, 0xf13f, 0xf285, 0xf108, 0xf228, 0xf108, 0xf228, +0xf123, 0xf21a, 0xf123, 0xf21a, 0xf27d, 0xf345, 0xf27d, 0xf345, 0xf36c, 0xf3ff, 0xf36c, +0xf3ff, 0xf36c, 0xf3ff, 0xf4b1, 0xf50b, 0xf4b1, 0xf50b, 0xf60e, 0xf62b, 0xf60e, 0xf62b, +0xf74e, 0xf72a, 0xf74e, 0xf72a, 0xf93b, 0xf8d3, 0xf93b, 0xf8d3, 0xfb9b, 0xfaef, 0xfb9b, +0xfaef, 0xfb9b, 0xfaef, 0xfd63, 0xfc73, 0xfd63, 0xfc73, 0xff5d, 0xfe29, 0xff5d, 0xfe29, +0x23c, 0xca, 0x23c, 0xca, 0x504, 0x358, 0x504, 0x358, 0x76e, 0x58e, 0x76e, +0x58e, 0x94b, 0x740, 0x94b, 0x740, 0x94b, 0x740, 0xa89, 0x85c, 0xa89, 0x85c, +0xb3f, 0x8fb, 0xb3f, 0x8fb, 0xc80, 0xa2f, 0xc80, 0xa2f, 0xe15, 0xbc3, 0xe15, +0xbc3, 0xe6e, 0xc29, 0xe6e, 0xc29, 0xe00, 0xbd2, 0xe00, 0xbd2, 0xe00, 0xbd2, +0xd3a, 0xb2f, 0xd3a, 0xb2f, 0xd16, 0xb39, 0xd16, 0xb39, 0xc8b, 0xae6, 0xc8b, +0xae6, 0xb6a, 0xa06, 0xb6a, 0xa06, 0xa51, 0x934, 0xa51, 0x934, 0xa51, 0x934, +0x796, 0x6c6, 0x796, 0x6c6, 0x550, 0x4d0, 0x550, 0x4d0, 0x3e6, 0x3b9, 0x3e6, +0x3b9, 0x1ee, 0x214, 0x1ee, 0x214, 0xffb6, 0x2e, 0xffb6, 0x2e, 0xfd91, 0xfe59, +0xfd91, 0xfe59, 0xfd91, 0xfe59, 0xfbda, 0xfced, 0xfbda, 0xfced, 0xfacd, 0xfc26, 0xfacd, +0xfc26, 0xfad2, 0xfc6b, 0xfad2, 0xfc6b, 0xfa20, 0xfbf3, 0xfa20, 0xfbf3, 0xf781, 0xf986, +0xf781, 0xf986, 0xf486, 0xf6b7, 0xf486, 0xf6b7, 0xf486, 0xf6b7, 0xf219, 0xf46e, 0xf219, +0xf46e, 0xefdf, 0xf253, 0xefdf, 0xf253, 0xee65, 0xf0f0, 0xee65, 0xf0f0, 0xec17, 0xeeb5, +0xec17, 0xeeb5, 0xe98f, 0xec3b, 0xe98f, 0xec3b, 0xe98f, 0xec3b, 0xe931, 0xebe6, 0xe931, +0xebe6, 0xe89f, 0xeb5b, 0xe89f, 0xeb5b, 0xe821, 0xeae2, 0xe821, 0xeae2, 0xe7f0, 0xeab4, +0xe7f0, 0xeab4, 0xe74a, 0xea0f, 0xe74a, 0xea0f, 0xe6ae, 0xe973, 0xe6ae, 0xe973, 0xe6ae, +0xe973, 0xe5ec, 0xe8b2, 0xe5ec, 0xe8b2, 0xe587, 0xe84c, 0xe587, 0xe84c, 0xe4e4, 0xe7a6, +0xe4e4, 0xe7a6, 0xe461, 0xe721, 0xe461, 0xe721, 0xe3a4, 0xe65f, 0xe3a4, 0xe65f, 0xe323, +0xe5d6, 0xe323, 0xe5d6, 0xe323, 0xe5d6, 0xe35e, 0xe606, 0xe35e, 0xe606, 0xe2f6, 0xe590, +0xe2f6, 0xe590, 0xe30a, 0xe593, 0xe30a, 0xe593, 0xe357, 0xe5c8, 0xe357, 0xe5c8, 0xe386, +0xe5da, 0xe386, 0xe5da, 0xe386, 0xe5da, 0xe428, 0xe65a, 0xe428, 0xe65a, 0xe4b8, 0xe6c1, +0xe4b8, 0xe6c1, 0xe57c, 0xe756, 0xe57c, 0xe756, 0xe747, 0xe8ec, 0xe747, 0xe8ec, 0xe99d, +0xeb08, 0xe99d, 0xeb08, 0xeb08, 0xec34, 0xeb08, 0xec34, 0xeb08, 0xec34, 0xec7d, 0xed66, +0xec7d, 0xed66, 0xeea0, 0xef43, 0xeea0, 0xef43, 0xf140, 0xf19c, 0xf140, 0xf19c, 0xf434, +0xf447, 0xf434, 0xf447, 0xf6a4, 0xf671, 0xf6a4, 0xf671, 0xf6a4, 0xf671, 0xf8b1, 0xf839, +0xf8b1, 0xf839, 0xfa7b, 0xf9c2, 0xfa7b, 0xf9c2, 0xfc81, 0xfb8e, 0xfc81, 0xfb8e, 0xfe47, +0xfd1f, 0xfe47, 0xfd1f, 0xff60, 0xfe0b, 0xff60, 0xfe0b, 0x44, 0xfecb, 0x44, 0xfecb, +0x44, 0xfecb, 0xfe, 0xff69, 0xfe, 0xff69, 0x268, 0xc1, 0x268, 0xc1, 0x3ce, +0x21f, 0x3ce, 0x21f, 0x48f, 0x2e1, 0x48f, 0x2e1, 0x4d7, 0x333, 0x4d7, 0x333, +0x4a7, 0x315, 0x4a7, 0x315, 0x4a7, 0x315, 0x56d, 0x3f4, 0x56d, 0x3f4, 0x68d, +0x534, 0x68d, 0x534, 0x699, 0x563, 0x699, 0x563, 0x618, 0x50b, 0x618, 0x50b, +0x5c1, 0x4dd, 0x5c1, 0x4dd, 0x5c1, 0x4dd, 0x526, 0x46d, 0x526, 0x46d, 0x4a5, +0x416, 0x4a5, 0x416, 0x4f6, 0x48f, 0x4f6, 0x48f, 0x483, 0x442, 0x483, 0x442, +0x373, 0x354, 0x373, 0x354, 0x31b, 0x31a, 0x31b, 0x31a, 0x31b, 0x31a, 0x2e5, +0x2fd, 0x2e5, 0x2fd, 0x25f, 0x28b, 0x25f, 0x28b, 0x1db, 0x216, 0x1db, 0x216, +0x50, 0x95, 0x50, 0x95, 0xfec1, 0xff0b, 0xfec1, 0xff0b, 0xfeb6, 0xff02, 0xfeb6, +0xff02, 0xfeb6, 0xff02, 0xfe44, 0xfe8d, 0xfe44, 0xfe8d, 0xfe40, 0xfe86, 0xfe40, 0xfe86, +0xfe14, 0xfe53, 0xfe14, 0xfe53, 0xfd20, 0xfd58, 0xfd20, 0xfd58, 0xfd1d, 0xfd4c, 0xfd1d, +0xfd4c, 0xfd1d, 0xfd4c, 0xfe08, 0xfe2f, 0xfe08, 0xfe2f, 0xff39, 0xff58, 0xff39, 0xff58, +0xff82, 0xff9b, 0xff82, 0xff9b, 0x35, 0x48, 0x35, 0x48, 0xb1, 0xbf, 0xb1, +0xbf, 0x116, 0x120, 0x116, 0x120, 0x116, 0x120, 0x1c2, 0x1c8, 0x1c2, 0x1c8, +0x1c3, 0x1c4, 0x1c3, 0x1c4, 0x280, 0x27d, 0x280, 0x27d, 0x2d8, 0x2cf, 0x2d8, +0x2cf, 0x2ea, 0x2d8, 0x2ea, 0x2d8, 0x336, 0x31a, 0x336, 0x31a, 0x336, 0x31a, +0x2dc, 0x2b2, 0x2dc, 0x2b2, 0x2a9, 0x26d, 0x2a9, 0x26d, 0x39a, 0x349, 0x39a, +0x349, 0x450, 0x3e6, 0x450, 0x3e6, 0x432, 0x3a9, 0x432, 0x3a9, 0x432, 0x3a9, +0x560, 0x4b6, 0x560, 0x4b6, 0x77c, 0x6ad, 0x77c, 0x6ad, 0x9d1, 0x8d9, 0x9d1, +0x8d9, 0xbfc, 0xada, 0xbfc, 0xada, 0xd64, 0xc16, 0xd64, 0xc16, 0xeb6, 0xd3c, +0xeb6, 0xd3c, 0xeb6, 0xd3c, 0x107a, 0xed5, 0x107a, 0xed5, 0x126c, 0x109f, 0x126c, +0x109f, 0x13fd, 0x120c, 0x13fd, 0x120c, 0x154d, 0x133c, 0x154d, 0x133c, 0x15b2, 0x1386, +0x15b2, 0x1386, 0x1584, 0x1345, 0x1584, 0x1345, 0x1584, 0x1345, 0x1607, 0x13bc, 0x1607, +0x13bc, 0x161a, 0x13cc, 0x161a, 0x13cc, 0x1578, 0x132f, 0x1578, 0x132f, 0x145f, 0x1223, +0x145f, 0x1223, 0x1293, 0x106d, 0x1293, 0x106d, 0x1293, 0x106d, 0x10ed, 0xee5, 0x10ed, +0xee5, 0xf63, 0xd7f, 0xf63, 0xd7f, 0xd28, 0xb6e, 0xd28, 0xb6e, 0xacb, 0x940, +0xacb, 0x940, 0x922, 0x7ca, 0x922, 0x7ca, 0x78c, 0x66a, 0x78c, 0x66a, 0x78c, +0x66a, 0x65b, 0x56e, 0x65b, 0x56e, 0x4fc, 0x446, 0x4fc, 0x446, 0x2f7, 0x274, +0x2f7, 0x274, 0x11b, 0xca, 0x11b, 0xca, 0xfff0, 0xffcc, 0xfff0, 0xffcc, 0xff8b, +0xff90, 0xff8b, 0xff90, 0xff8b, 0xff90, 0xff4f, 0xff78, 0xff4f, 0xff78, 0xff28, 0xff70, +0xff28, 0xff70, 0xfdcb, 0xfe2d, 0xfdcb, 0xfe2d, 0xfd50, 0xfdc7, 0xfd50, 0xfdc7, 0xfd22, +0xfda8, 0xfd22, 0xfda8, 0xfd22, 0xfda8, 0xfb5d, 0xfbef, 0xfb5d, 0xfbef, 0xf9c3, 0xfa5f, +0xf9c3, 0xfa5f, 0xf78c, 0xf82f, 0xf78c, 0xf82f, 0xf5a3, 0xf64d, 0xf5a3, 0xf64d, 0xf3e3, +0xf494, 0xf3e3, 0xf494, 0xf2c6, 0xf37f, 0xf2c6, 0xf37f, 0xf2c6, 0xf37f, 0xf1a4, 0xf266, +0xf1a4, 0xf266, 0xf08e, 0xf15d, 0xf08e, 0xf15d, 0xf086, 0xf164, 0xf086, 0xf164, 0xf05d, +0xf150, 0xf05d, 0xf150, 0xf16c, 0xf276, 0xf16c, 0xf276, 0xf203, 0xf327, 0xf203, 0xf327, +0xf203, 0xf327, 0xf1dd, 0xf320, 0xf1dd, 0xf320, 0xf16d, 0xf2d0, 0xf16d, 0xf2d0, 0xf0d2, +0xf257, 0xf0d2, 0xf257, 0xf07e, 0xf225, 0xf07e, 0xf225, 0xf008, 0xf1cf, 0xf008, 0xf1cf, +0xf008, 0xf1cf, 0xefa6, 0xf18b, 0xefa6, 0xf18b, 0xeebc, 0xf0bc, 0xeebc, 0xf0bc, 0xef20, +0xf134, 0xef20, 0xf134, 0xefa6, 0xf1c8, 0xefa6, 0xf1c8, 0xef6d, 0xf196, 0xef6d, 0xf196, +0xefbd, 0xf1e3, 0xefbd, 0xf1e3, 0xefbd, 0xf1e3, 0xefd1, 0xf1eb, 0xefd1, 0xf1eb, 0xf078, +0xf27b, 0xf078, 0xf27b, 0xf189, 0xf36b, 0xf189, 0xf36b, 0xf1ee, 0xf3a5, 0xf1ee, 0xf3a5, +0xf27e, 0xf401, 0xf27e, 0xf401, 0xf42a, 0xf570, 0xf42a, 0xf570, 0xf42a, 0xf570, 0xf667, +0xf769, 0xf667, 0xf769, 0xf8d7, 0xf98e, 0xf8d7, 0xf98e, 0xfb7c, 0xfbe4, 0xfb7c, 0xfbe4, +0xfdfc, 0xfe12, 0xfdfc, 0xfe12, 0xed, 0xb0, 0xed, 0xb0, 0xed, 0xb0, 0x4c6, +0x436, 0x4c6, 0x436, 0x848, 0x769, 0x848, 0x769, 0xae1, 0x9b5, 0xae1, 0x9b5, +0xd2c, 0xbba, 0xd2c, 0xbba, 0xf59, 0xda7, 0xf59, 0xda7, 0x11d2, 0xfe8, 0x11d2, +0xfe8, 0x11d2, 0xfe8, 0x140b, 0x11f1, 0x140b, 0x11f1, 0x14bd, 0x127b, 0x14bd, 0x127b, +0x14f6, 0x1294, 0x14f6, 0x1294, 0x14f0, 0x1278, 0x14f0, 0x1278, 0x1530, 0x12a7, 0x1530, +0x12a7, 0x166a, 0x13d7, 0x166a, 0x13d7, 0x166a, 0x13d7, 0x172c, 0x1494, 0x172c, 0x1494, +0x17b6, 0x151d, 0x17b6, 0x151d, 0x17c3, 0x152d, 0x17c3, 0x152d, 0x1774, 0x14e0, 0x1774, +0x14e0, 0x1728, 0x1497, 0x1728, 0x1497, 0x1728, 0x1497, 0x1701, 0x1471, 0x1701, 0x1471, +0x1608, 0x1376, 0x1608, 0x1376, 0x14ca, 0x1233, 0x14ca, 0x1233, 0x15d8, 0x1339, 0x15d8, +0x1339, 0x170f, 0x1462, 0x170f, 0x1462, 0x17fa, 0x153c, 0x17fa, 0x153c, 0x17fa, 0x153c, +0x1868, 0x1595, 0x1868, 0x1595, 0x1808, 0x151e, 0x1808, 0x151e, 0x17c7, 0x14c3, 0x17c7, +0x14c3, 0x17e0, 0x14c1, 0x17e0, 0x14c1, 0x178e, 0x1456, 0x178e, 0x1456, 0x178e, 0x1456, +0x15ff, 0x12af, 0x15ff, 0x12af, 0x158c, 0x1228, 0x158c, 0x1228, 0x1565, 0x11f2, 0x1565, +0x11f2, 0x14e4, 0x1169, 0x14e4, 0x1169, 0x1505, 0x1189, 0x1505, 0x1189, 0x150c, 0x1199, +0x150c, 0x1199, 0x150c, 0x1199, 0x14aa, 0x1149, 0x14aa, 0x1149, 0x1498, 0x1153, 0x1498, +0x1153, 0x144d, 0x1130, 0x144d, 0x1130, 0x13fd, 0x1110, 0x13fd, 0x1110, 0x1383, 0x10d0, +0x1383, 0x10d0, 0x1169, 0xef8, 0x1169, 0xef8, 0x1169, 0xef8, 0x103f, 0xe18, 0x103f, +0xe18, 0xf64, 0xd8c, 0xf64, 0xd8c, 0xe89, 0xd03, 0xe89, 0xd03, 0xd63, 0xc32, +0xd63, 0xc32, 0xaf1, 0xa15, 0xaf1, 0xa15, 0xaf1, 0xa15, 0x959, 0x8cf, 0x959, +0x8cf, 0x81c, 0x7e1, 0x81c, 0x7e1, 0x6e9, 0x6f6, 0x6e9, 0x6f6, 0x50c, 0x55b, +0x50c, 0x55b, 0x398, 0x41f, 0x398, 0x41f, 0x2ca, 0x381, 0x2ca, 0x381, 0x2ca, +0x381, 0x24d, 0x32a, 0x24d, 0x32a, 0x288, 0x381, 0x288, 0x381, 0x1cb, 0x2d6, +0x1cb, 0x2d6, 0x1b0, 0x2c4, 0x1b0, 0x2c4, 0x247, 0x35b, 0x247, 0x35b, 0x36b, +0x478, 0x36b, 0x478, 0x36b, 0x478, 0x49c, 0x59d, 0x49c, 0x59d, 0x3ae, 0x49e, +0x3ae, 0x49e, 0x367, 0x446, 0x367, 0x446, 0x3c3, 0x48e, 0x3c3, 0x48e, 0x3de, +0x497, 0x3de, 0x497, 0x3de, 0x497, 0x3d3, 0x47d, 0x3d3, 0x47d, 0x243, 0x2e2, +0x243, 0x2e2, 0x199, 0x232, 0x199, 0x232, 0x1f2, 0x28b, 0x1f2, 0x28b, 0x1e9, +0x289, 0x1e9, 0x289, 0x107, 0x1b4, 0x107, 0x1b4, 0x107, 0x1b4, 0xff9a, 0x5b, +0xff9a, 0x5b, 0xfe27, 0xff00, 0xfe27, 0xff00, 0xfd54, 0xfe4c, 0xfd54, 0xfe4c, 0xfcb7, +0xfdd0, 0xfcb7, 0xfdd0, 0xfb39, 0xfc77, 0xfb39, 0xfc77, 0xfab1, 0xfc14, 0xfab1, 0xfc14, +0xfab1, 0xfc14, 0xf89b, 0xfa22, 0xf89b, 0xfa22, 0xf6bf, 0xf867, 0xf6bf, 0xf867, 0xf648, +0xf80d, 0xf648, 0xf80d, 0xf434, 0xf611, 0xf434, 0xf611, 0xf330, 0xf51e, 0xf330, 0xf51e, +0xf330, 0xf51e, 0xf337, 0xf52e, 0xf337, 0xf52e, 0xf2e0, 0xf4d8, 0xf2e0, 0xf4d8, 0xf249, +0xf439, 0xf249, 0xf439, 0xf249, 0xf428, 0xf249, 0xf428, 0xf170, 0xf336, 0xf170, 0xf336, +0xf020, 0xf1c6, 0xf020, 0xf1c6, 0xf020, 0xf1c6, 0xefaf, 0xf12e, 0xefaf, 0xf12e, 0xef24, +0xf076, 0xef24, 0xf076, 0xeecd, 0xefef, 0xeecd, 0xefef, 0xeeda, 0xefca, 0xeeda, 0xefca, +0xef1b, 0xefd9, 0xef1b, 0xefd9, 0xef16, 0xefa3, 0xef16, 0xefa3, 0xef16, 0xefa3, 0xf098, +0xf0f8, 0xf098, 0xf0f8, 0xf233, 0xf26b, 0xf233, 0xf26b, 0xf393, 0xf3a8, 0xf393, 0xf3a8, +0xf5be, 0xf5b9, 0xf5be, 0xf5b9, 0xf746, 0xf72f, 0xf746, 0xf72f, 0xf746, 0xf72f, 0xf95c, +0xf93b, 0xf95c, 0xf93b, 0xfb2c, 0xfb0b, 0xfb2c, 0xfb0b, 0xfc7d, 0xfc65, 0xfc7d, 0xfc65, +0xfd7e, 0xfd77, 0xfd7e, 0xfd77, 0xfdcc, 0xfddd, 0xfdcc, 0xfddd, 0xfe66, 0xfe96, 0xfe66, +0xfe96, 0xfe66, 0xfe96, 0xfeea, 0xff3e, 0xfeea, 0xff3e, 0xfed2, 0xff4e, 0xfed2, 0xff4e, +0xfe3b, 0xfee0, 0xfe3b, 0xfee0, 0xfdf3, 0xfec3, 0xfdf3, 0xfec3, 0xfd87, 0xfe81, 0xfd87, +0xfe81, 0xfbff, 0xfd21, 0xfbff, 0xfd21, 0xfbff, 0xfd21, 0xfbe3, 0xfd28, 0xfbe3, 0xfd28, +0xfc96, 0xfdfb, 0xfc96, 0xfdfb, 0xfc5e, 0xfdde, 0xfc5e, 0xfdde, 0xfc70, 0xfe07, 0xfc70, +0xfe07, 0xfc32, 0xfdd9, 0xfc32, 0xfdd9, 0xfc32, 0xfdd9, 0xfc8c, 0xfe3f, 0xfc8c, 0xfe3f, +0xfd15, 0xfece, 0xfd15, 0xfece, 0xfcf2, 0xfeae, 0xfcf2, 0xfeae, 0xfc82, 0xfe3f, 0xfc82, +0xfe3f, 0xfccc, 0xfe88, 0xfccc, 0xfe88, 0xfdd8, 0xff92, 0xfdd8, 0xff92, 0xfdd8, 0xff92, +0xfd9f, 0xff58, 0xfd9f, 0xff58, 0xfd9b, 0xff55, 0xfd9b, 0xff55, 0xfd6b, 0xff29, 0xfd6b, +0xff29, 0xfc37, 0xfdfd, 0xfc37, 0xfdfd, 0xfb77, 0xfd4a, 0xfb77, 0xfd4a, 0xfa8e, 0xfc74, +0xfa8e, 0xfc74, 0xfa8e, 0xfc74, 0xf89c, 0xfa99, 0xf89c, 0xfa99, 0xf6bd, 0xf8d8, 0xf6bd, +0xf8d8, 0xf4f2, 0xf72f, 0xf4f2, 0xf72f, 0xf2d3, 0xf537, 0xf2d3, 0xf537, 0xf17e, 0xf40c, +0xf17e, 0xf40c, 0xf17e, 0xf40c, 0xef69, 0xf223, 0xef69, 0xf223, 0xedf7, 0xf0df, 0xedf7, +0xf0df, 0xee3e, 0xf152, 0xee3e, 0xf152, 0xec49, 0xef87, 0xec49, 0xef87, 0xea51, 0xedb6, +0xea51, 0xedb6, 0xe9a1, 0xed27, 0xe9a1, 0xed27, 0xe9a1, 0xed27, 0xe774, 0xeb16, 0xe774, +0xeb16, 0xe642, 0xe9f7, 0xe642, 0xe9f7, 0xe604, 0xe9c4, 0xe604, 0xe9c4, 0xe548, 0xe909, +0xe548, 0xe909, 0xe502, 0xe8ba, 0xe502, 0xe8ba, 0xe575, 0xe91b, 0xe575, 0xe91b, 0xe575, +0xe91b, 0xe58c, 0xe917, 0xe58c, 0xe917, 0xe539, 0xe89f, 0xe539, 0xe89f, 0xe569, 0xe8a2, +0xe569, 0xe8a2, 0xe45f, 0xe764, 0xe45f, 0xe764, 0xe3fb, 0xe6c6, 0xe3fb, 0xe6c6, 0xe3fb, +0xe6c6, 0xe49e, 0xe72b, 0xe49e, 0xe72b, 0xe476, 0xe6c2, 0xe476, 0xe6c2, 0xe4fa, 0xe703, +0xe4fa, 0xe703, 0xe56a, 0xe730, 0xe56a, 0xe730, 0xe545, 0xe6c9, 0xe545, 0xe6c9, 0xe6ad, +0xe7f1, 0xe6ad, 0xe7f1, 0xe6ad, 0xe7f1, 0xe939, 0xea41, 0xe939, 0xea41, 0xeb84, 0xec53, +0xeb84, 0xec53, 0xee1a, 0xeeb5, 0xee1a, 0xeeb5, 0xeff5, 0xf060, 0xeff5, 0xf060, 0xf28c, +0xf2cc, 0xf28c, 0xf2cc, 0xf58f, 0xf5a9, 0xf58f, 0xf5a9, 0xf58f, 0xf5a9, 0xf75a, 0xf751, +0xf75a, 0xf751, 0xf8be, 0xf895, 0xf8be, 0xf895, 0xfa63, 0xfa1e, 0xfa63, 0xfa1e, 0xfc91, +0xfc30, 0xfc91, 0xfc30, 0xfe23, 0xfda7, 0xfe23, 0xfda7, 0xfe23, 0xfda7, 0x8e, 0xfff7, +0x8e, 0xfff7, 0x18c, 0xda, 0x18c, 0xda, 0x176, 0xa7, 0x176, 0xa7, 0x2ea, +0x1fc, 0x2ea, 0x1fc, 0x3bd, 0x2ae, 0x3bd, 0x2ae, 0x51f, 0x3ee, 0x51f, 0x3ee, +0x51f, 0x3ee, 0x6f0, 0x59a, 0x6f0, 0x59a, 0x75d, 0x5e1, 0x75d, 0x5e1, 0x7e3, +0x641, 0x7e3, 0x641, 0xa89, 0x8c1, 0xa89, 0x8c1, 0xcc4, 0xad7, 0xcc4, 0xad7, +0xcc4, 0xad7, 0xe14, 0xc06, 0xe14, 0xc06, 0xfc9, 0xd9d, 0xfc9, 0xd9d, 0x1038, +0xdf4, 0x1038, 0xdf4, 0x10f2, 0xe9b, 0x10f2, 0xe9b, 0x1316, 0x10b4, 0x1316, 0x10b4, +0x1473, 0x120f, 0x1473, 0x120f, 0x1473, 0x120f, 0x147f, 0x1221, 0x147f, 0x1221, 0x145b, +0x120c, 0x145b, 0x120c, 0x135c, 0x1125, 0x135c, 0x1125, 0x12ef, 0x10d9, 0x12ef, 0x10d9, +0x12eb, 0x10ff, 0x12eb, 0x10ff, 0x1163, 0xfa9, 0x1163, 0xfa9, 0x1163, 0xfa9, 0x109f, +0xf1c, 0x109f, 0xf1c, 0xffe, 0xeb7, 0xffe, 0xeb7, 0xe6c, 0xd65, 0xe6c, 0xd65, +0xd98, 0xcd2, 0xd98, 0xcd2, 0xcce, 0xc49, 0xcce, 0xc49, 0xcce, 0xc49, 0xb2f, +0xae9, 0xb2f, 0xae9, 0xa0f, 0xa04, 0xa0f, 0xa04, 0x84c, 0x876, 0x84c, 0x876, +0x51f, 0x578, 0x51f, 0x578, 0x3a9, 0x427, 0x3a9, 0x427, 0x309, 0x3a4, 0x309, +0x3a4, 0x309, 0x3a4, 0x1fb, 0x2a8, 0x1fb, 0x2a8, 0x1fd, 0x2b3, 0x1fd, 0x2b3, +0x1e9, 0x29d, 0x1e9, 0x29d, 0x17b, 0x224, 0x17b, 0x224, 0x1c7, 0x25b, 0x1c7, +0x25b, 0x1a9, 0x221, 0x1a9, 0x221, 0x1a9, 0x221, 0x46, 0x9b, 0x46, 0x9b, +0xffc6, 0xfff2, 0xffc6, 0xfff2, 0xfec9, 0xfeca, 0xfec9, 0xfeca, 0xfc84, 0xfc58, 0xfc84, +0xfc58, 0xfc6e, 0xfc14, 0xfc6e, 0xfc14, 0xfc6e, 0xfc14, 0xfce5, 0xfc5f, 0xfce5, 0xfc5f, +0xfd49, 0xfc99, 0xfd49, 0xfc99, 0xfd4e, 0xfc79, 0xfd4e, 0xfc79, 0xfc30, 0xfb3a, 0xfc30, +0xfb3a, 0xfd0b, 0xfbfc, 0xfd0b, 0xfbfc, 0xfec3, 0xfd9f, 0xfec3, 0xfd9f, 0xfec3, 0xfd9f, +0xfea4, 0xfd72, 0xfea4, 0xfd72, 0xfe34, 0xfcfa, 0xfe34, 0xfcfa, 0xfe3c, 0xfd00, 0xfe3c, +0xfd00, 0xfe08, 0xfcce, 0xfe08, 0xfcce, 0xfee5, 0xfdb0, 0xfee5, 0xfdb0, 0xff58, 0xfe2c, +0xff58, 0xfe2c, 0xff58, 0xfe2c, 0xfe4e, 0xfd2c, 0xfe4e, 0xfd2c, 0xfe20, 0xfd07, 0xfe20, +0xfd07, 0xff35, 0xfe26, 0xff35, 0xfe26, 0x32, 0xff2a, 0x32, 0xff2a, 0x6c, 0xff68, +0x6c, 0xff68, 0x6c, 0xff68, 0x55, 0xff51, 0x55, 0xff51, 0xffb0, 0xfea9, 0xffb0, +0xfea9, 0x90, 0xff82, 0x90, 0xff82, 0x213, 0xfa, 0x213, 0xfa, 0x1df, 0xb7, +0x1df, 0xb7, 0x210, 0xd7, 0x210, 0xd7, 0x210, 0xd7, 0x309, 0x1be, 0x309, +0x1be, 0x403, 0x2a5, 0x403, 0x2a5, 0x491, 0x324, 0x491, 0x324, 0x51d, 0x3a2, +0x51d, 0x3a2, 0x610, 0x48d, 0x610, 0x48d, 0x735, 0x5af, 0x735, 0x5af, 0x735, +0x5af, 0x7f9, 0x679, 0x7f9, 0x679, 0x84b, 0x6db, 0x84b, 0x6db, 0x8df, 0x788, +0x8df, 0x788, 0x8dc, 0x7a9, 0x8dc, 0x7a9, 0x7f3, 0x6ef, 0x7f3, 0x6ef, 0x7f3, +0x6ef, 0x70f, 0x645, 0x70f, 0x645, 0x5f0, 0x56b, 0x5f0, 0x56b, 0x45b, 0x424, +0x45b, 0x424, 0x313, 0x332, 0x313, 0x332, 0xc5, 0x140, 0xc5, 0x140, 0xfdc8, +0xfea5, 0xfdc8, 0xfea5, 0xfdc8, 0xfea5, 0xfc4b, 0xfd8c, 0xfc4b, 0xfd8c, 0xfaf6, 0xfc9a, +0xfaf6, 0xfc9a, 0xf94f, 0xfb54, 0xf94f, 0xfb54, 0xf88b, 0xfaec, 0xf88b, 0xfaec, 0xf7c8, +0xfa7c, 0xf7c8, 0xfa7c, 0xf699, 0xf998, 0xf699, 0xf998, 0xf699, 0xf998, 0xf5ea, 0xf928, +0xf5ea, 0xf928, 0xf494, 0xf803, 0xf494, 0xf803, 0xf2c7, 0xf658, 0xf2c7, 0xf658, 0xf216, +0xf5ba, 0xf216, 0xf5ba, 0xf1c0, 0xf567, 0xf1c0, 0xf567, 0xf1c0, 0xf567, 0xf18a, 0xf523, +0xf18a, 0xf523, 0xf1b8, 0xf534, 0xf1b8, 0xf534, 0xf142, 0xf493, 0xf142, 0xf493, 0xeff9, +0xf311, 0xeff9, 0xf311, 0xef62, 0xf236, 0xef62, 0xf236, 0xeffc, 0xf282, 0xeffc, 0xf282, +0xeffc, 0xf282, 0xf102, 0xf332, 0xf102, 0xf332, 0xf1ba, 0xf38e, 0xf1ba, 0xf38e, 0xf31c, +0xf490, 0xf31c, 0xf490, 0xf625, 0xf738, 0xf625, 0xf738, 0xf8ff, 0xf9b2, 0xf8ff, 0xf9b2, +0xfb22, 0xfb77, 0xfb22, 0xfb77, 0xfb22, 0xfb77, 0xfd8e, 0xfd89, 0xfd8e, 0xfd89, 0x13, +0xffb8, 0x13, 0xffb8, 0x2b2, 0x206, 0x2b2, 0x206, 0x5ec, 0x4f6, 0x5ec, 0x4f6, +0x932, 0x7f8, 0x932, 0x7f8, 0x932, 0x7f8, 0xb71, 0x9f8, 0xb71, 0x9f8, 0xd63, +0xbaf, 0xd63, 0xbaf, 0xf86, 0xd9c, 0xf86, 0xd9c, 0x119e, 0xf81, 0x119e, 0xf81, +0x1414, 0x11c6, 0x1414, 0x11c6, 0x15a5, 0x1325, 0x15a5, 0x1325, 0x15a5, 0x1325, 0x1632, +0x1381, 0x1632, 0x1381, 0x1778, 0x1494, 0x1778, 0x1494, 0x18e0, 0x15c7, 0x18e0, 0x15c7, +0x1975, 0x1623, 0x1975, 0x1623, 0x19d3, 0x1644, 0x19d3, 0x1644, 0x1af1, 0x1722, 0x1af1, +0x1722, 0x1af1, 0x1722, 0x1c13, 0x1801, 0x1c13, 0x1801, 0x1d3b, 0x18e3, 0x1d3b, 0x18e3, +0x1f48, 0x1aa9, 0x1f48, 0x1aa9, 0x20c1, 0x1bdb, 0x20c1, 0x1bdb, 0x216f, 0x1c43, 0x216f, +0x1c43, 0x216f, 0x1c43, 0x22a1, 0x1d32, 0x22a1, 0x1d32, 0x2464, 0x1eb9, 0x2464, 0x1eb9, +0x25d2, 0x1ff2, 0x25d2, 0x1ff2, 0x26cb, 0x20bf, 0x26cb, 0x20bf, 0x277b, 0x214f, 0x277b, +0x214f, 0x27a6, 0x2167, 0x27a6, 0x2167, 0x27a6, 0x2167, 0x2795, 0x2152, 0x2795, 0x2152, +0x26d1, 0x209a, 0x26d1, 0x209a, 0x2579, 0x1f5e, 0x2579, 0x1f5e, 0x23d5, 0x1de8, 0x23d5, +0x1de8, 0x21c6, 0x1c18, 0x21c6, 0x1c18, 0x2031, 0x1ad2, 0x2031, 0x1ad2, 0x2031, 0x1ad2, +0x1e77, 0x1975, 0x1e77, 0x1975, 0x1b9c, 0x1706, 0x1b9c, 0x1706, 0x1894, 0x1475, 0x1894, +0x1475, 0x1636, 0x1299, 0x1636, 0x1299, 0x1477, 0x1161, 0x1477, 0x1161, 0x1477, 0x1161, +0x1263, 0xfdb, 0x1263, 0xfdb, 0xf37, 0xd3d, 0xf37, 0xd3d, 0xc1d, 0xab1, 0xc1d, +0xab1, 0x9d8, 0x8f7, 0x9d8, 0x8f7, 0x770, 0x713, 0x770, 0x713, 0x507, 0x526, +0x507, 0x526, 0x507, 0x526, 0x3a1, 0x432, 0x3a1, 0x432, 0x243, 0x33a, 0x243, +0x33a, 0xa3, 0x1f5, 0xa3, 0x1f5, 0x78, 0x217, 0x78, 0x217, 0x4d, 0x22b, +0x4d, 0x22b, 0x4d, 0x22b, 0xfe34, 0x45, 0xfe34, 0x45, 0xfc31, 0xfe68, 0xfc31, +0xfe68, 0xfb12, 0xfd63, 0xfb12, 0xfd63, 0xf9d4, 0xfc34, 0xf9d4, 0xfc34, 0xf83f, 0xfaa7, +0xf83f, 0xfaa7, 0xf62c, 0xf894, 0xf62c, 0xf894, 0xf62c, 0xf894, 0xf469, 0xf6ca, 0xf469, +0xf6ca, 0xf3c8, 0xf620, 0xf3c8, 0xf620, 0xf39d, 0xf5e8, 0xf39d, 0xf5e8, 0xf37f, 0xf5bd, +0xf37f, 0xf5bd, 0xf47c, 0xf6ad, 0xf47c, 0xf6ad, 0xf557, 0xf77c, 0xf557, 0xf77c, 0xf557, +0xf77c, 0xf527, 0xf741, 0xf527, 0xf741, 0xf607, 0xf819, 0xf607, 0xf819, 0xf713, 0xf91f, +0xf713, 0xf91f, 0xf71e, 0xf925, 0xf71e, 0xf925, 0xf6ba, 0xf8bd, 0xf6ba, 0xf8bd, 0xf6ba, +0xf8bd, 0xf620, 0xf820, 0xf620, 0xf820, 0xf5e3, 0xf7df, 0xf5e3, 0xf7df, 0xf58c, 0xf781, +0xf58c, 0xf781, 0xf4a1, 0xf68d, 0xf4a1, 0xf68d, 0xf367, 0xf545, 0xf367, 0xf545, 0xf205, +0xf3d1, 0xf205, 0xf3d1, 0xf205, 0xf3d1, 0xf13d, 0xf2f0, 0xf13d, 0xf2f0, 0xf155, 0xf2e9, +0xf155, 0xf2e9, 0xf19a, 0xf307, 0xf19a, 0xf307, 0xf180, 0xf2bf, 0xf180, 0xf2bf, 0xf16a, +0xf274, 0xf16a, 0xf274, 0xf2a8, 0xf376, 0xf2a8, 0xf376, 0xf2a8, 0xf376, 0xf418, 0xf4a5, +0xf418, 0xf4a5, 0xf5b2, 0xf5f9, 0xf5b2, 0xf5f9, 0xf76e, 0xf76d, 0xf76e, 0xf76d, 0xf8cc, +0xf883, 0xf8cc, 0xf883, 0xfc12, 0xfb81, 0xfc12, 0xfb81, 0xfc12, 0xfb81, 0xff02, 0xfe2c, +0xff02, 0xfe2c, 0x173, 0x5c, 0x173, 0x5c, 0x48e, 0x33e, 0x48e, 0x33e, 0x620, +0x49f, 0x620, 0x49f, 0x7b0, 0x609, 0x7b0, 0x609, 0x9a2, 0x7e1, 0x9a2, 0x7e1, +0x9a2, 0x7e1, 0x9cb, 0x7fe, 0x9cb, 0x7fe, 0x958, 0x78b, 0x958, 0x78b, 0xa1a, +0x85a, 0xa1a, 0x85a, 0xa79, 0x8d6, 0xa79, 0x8d6, 0xa9e, 0x924, 0xa9e, 0x924, +0xab5, 0x971, 0xab5, 0x971, 0xab5, 0x971, 0x9fa, 0x8f8, 0x9fa, 0x8f8, 0x9cd, +0x916, 0x9cd, 0x916, 0x97a, 0x916, 0x97a, 0x916, 0x7c8, 0x7be, 0x7c8, 0x7be, +0x65e, 0x6b1, 0x65e, 0x6b1, 0x65e, 0x6b1, 0x59d, 0x650, 0x59d, 0x650, 0x3eb, +0x4fe, 0x3eb, 0x4fe, 0x23f, 0x3af, 0x23f, 0x3af, 0x17c, 0x347, 0x17c, 0x347, +0x111, 0x330, 0x111, 0x330, 0xffe7, 0x256, 0xffe7, 0x256, 0xffe7, 0x256, 0xfe34, +0xea, 0xfe34, 0xea, 0xfcf0, 0xffe5, 0xfcf0, 0xffe5, 0xfba8, 0xfed3, 0xfba8, 0xfed3, +0xf9f6, 0xfd51, 0xf9f6, 0xfd51, 0xf773, 0xfaf4, 0xf773, 0xfaf4, 0xf529, 0xf8c9, 0xf529, +0xf8c9, 0xf529, 0xf8c9, 0xf31d, 0xf6d5, 0xf31d, 0xf6d5, 0xf127, 0xf4f2, 0xf127, 0xf4f2, +0xef8d, 0xf365, 0xef8d, 0xf365, 0xee09, 0xf1eb, 0xee09, 0xf1eb, 0xecf0, 0xf0d9, 0xecf0, +0xf0d9, 0xecf0, 0xf0d9, 0xeb6c, 0xef59, 0xeb6c, 0xef59, 0xea0e, 0xedff, 0xea0e, 0xedff, +0xe93e, 0xed32, 0xe93e, 0xed32, 0xe828, 0xec1e, 0xe828, 0xec1e, 0xe6ea, 0xeae3, 0xe6ea, +0xeae3, 0xe644, 0xea3f, 0xe644, 0xea3f, 0xe644, 0xea3f, 0xe65d, 0xea5a, 0xe65d, 0xea5a, +0xe5ff, 0xe9fe, 0xe5ff, 0xe9fe, 0xe524, 0xe921, 0xe524, 0xe921, 0xe48a, 0xe885, 0xe48a, +0xe885, 0xe352, 0xe746, 0xe352, 0xe746, 0xe22d, 0xe616, 0xe22d, 0xe616, 0xe22d, 0xe616, +0xe27b, 0xe653, 0xe27b, 0xe653, 0xe288, 0xe64a, 0xe288, 0xe64a, 0xe288, 0xe62c, 0xe288, +0xe62c, 0xe2fe, 0xe67e, 0xe2fe, 0xe67e, 0xe2a5, 0xe5f7, 0xe2a5, 0xe5f7, 0xe2a5, 0xe5f7, +0xe342, 0xe65f, 0xe342, 0xe65f, 0xe4c3, 0xe7a3, 0xe4c3, 0xe7a3, 0xe5a4, 0xe83f, 0xe5a4, +0xe83f, 0xe712, 0xe962, 0xe712, 0xe962, 0xe8f5, 0xeaf4, 0xe8f5, 0xeaf4, 0xeb1b, 0xecc4, +0xeb1b, 0xecc4, 0xeb1b, 0xecc4, 0xed7b, 0xeecb, 0xed7b, 0xeecb, 0xf001, 0xf0f7, 0xf001, +0xf0f7, 0xf2ba, 0xf356, 0xf2ba, 0xf356, 0xf527, 0xf56c, 0xf527, 0xf56c, 0xf7ec, 0xf7dc, +0xf7ec, 0xf7dc, 0xfa14, 0xf9b5, 0xfa14, 0xf9b5, 0xfa14, 0xf9b5, 0xfbb4, 0xfb0d, 0xfbb4, +0xfb0d, 0xfe20, 0xfd39, 0xfe20, 0xfd39, 0xff52, 0xfe34, 0xff52, 0xfe34, 0x8b, 0xff40, +0x8b, 0xff40, 0x2e1, 0x173, 0x2e1, 0x173, 0x2e1, 0x173, 0x394, 0x20e, 0x394, +0x20e, 0x596, 0x403, 0x596, 0x403, 0x722, 0x58b, 0x722, 0x58b, 0x742, 0x5b0, +0x742, 0x5b0, 0x937, 0x7b3, 0x937, 0x7b3, 0x905, 0x796, 0x905, 0x796, 0x905, +0x796, 0x99a, 0x845, 0x99a, 0x845, 0xa1b, 0x8e4, 0xa1b, 0x8e4, 0x98f, 0x879, +0x98f, 0x879, 0xaf2, 0x9fe, 0xaf2, 0x9fe, 0x9e0, 0x90e, 0x9e0, 0x90e, 0x8f2, +0x841, 0x8f2, 0x841, 0x8f2, 0x841, 0x8e3, 0x850, 0x8e3, 0x850, 0x8f0, 0x87a, +0x8f0, 0x87a, 0x93f, 0x8e0, 0x93f, 0x8e0, 0x8ea, 0x89f, 0x8ea, 0x89f, 0x8e4, +0x8a8, 0x8e4, 0x8a8, 0x8e4, 0x8a8, 0x71b, 0x6ea, 0x71b, 0x6ea, 0x60e, 0x5e4, +0x60e, 0x5e4, 0x4d4, 0x4af, 0x4d4, 0x4af, 0x231, 0x20d, 0x231, 0x20d, 0x19f, +0x17b, 0x19f, 0x17b, 0x18, 0xfff4, 0x18, 0xfff4, 0x18, 0xfff4, 0xfef9, 0xfed3, +0xfef9, 0xfed3, 0xffd8, 0xffb2, 0xffd8, 0xffb2, 0xfe6c, 0xfe46, 0xfe6c, 0xfe46, 0xfe78, +0xfe54, 0xfe78, 0xfe54, 0x60, 0x41, 0x60, 0x41, 0xa4, 0x8a, 0xa4, 0x8a, +0xa4, 0x8a, 0x211, 0x1fe, 0x211, 0x1fe, 0x2d2, 0x2c9, 0x2d2, 0x2c9, 0x25f, +0x261, 0x25f, 0x261, 0x31d, 0x329, 0x31d, 0x329, 0x2ee, 0x304, 0x2ee, 0x304, +0x2ee, 0x304, 0x2e9, 0x307, 0x2e9, 0x307, 0x309, 0x32d, 0x309, 0x32d, 0x174, +0x19a, 0x174, 0x19a, 0x11e, 0x141, 0x11e, 0x141, 0xbe, 0xd9, 0xbe, 0xd9, +0x79, 0x85, 0x79, 0x85, 0x79, 0x85, 0x15b, 0x152, 0x15b, 0x152, 0x12c, +0x106, 0x12c, 0x106, 0x232, 0x1e9, 0x232, 0x1e9, 0x2cc, 0x257, 0x2cc, 0x257, +0x357, 0x2b1, 0x357, 0x2b1, 0x357, 0x2b1, 0x48d, 0x3b0, 0x48d, 0x3b0, 0x4f2, +0x3da, 0x4f2, 0x3da, 0x6f0, 0x599, 0x6f0, 0x599, 0x797, 0x600, 0x797, 0x600, +0x8a9, 0x6d2, 0x8a9, 0x6d2, 0xb44, 0x92d, 0xb44, 0x92d, 0xb44, 0x92d, 0xb2e, +0x8dd, 0xb2e, 0x8dd, 0xbab, 0x923, 0xbab, 0x923, 0xcc6, 0xa0f, 0xcc6, 0xa0f, +0xd1f, 0xa41, 0xd1f, 0xa41, 0xdda, 0xade, 0xdda, 0xade, 0xd4c, 0xa3c, 0xd4c, +0xa3c, 0xd4c, 0xa3c, 0xc57, 0x93f, 0xc57, 0x93f, 0xb3d, 0x828, 0xb3d, 0x828, +0x941, 0x639, 0x941, 0x639, 0x83f, 0x551, 0x83f, 0x551, 0x748, 0x47d, 0x748, +0x47d, 0x748, 0x47d, 0x50b, 0x26d, 0x50b, 0x26d, 0x37b, 0x112, 0x37b, 0x112, +0x291, 0x64, 0x291, 0x64, 0x1e6, 0xfffa, 0x1e6, 0xfffa, 0x166, 0xffc0, 0x166, +0xffc0, 0x88, 0xff29, 0x88, 0xff29, 0x88, 0xff29, 0x76, 0xff5e, 0x76, 0xff5e, +0xffb6, 0xfee5, 0xffb6, 0xfee5, 0xfe89, 0xfdfc, 0xfe89, 0xfdfc, 0xfebf, 0xfe74, 0xfebf, +0xfe74, 0xfeea, 0xfedb, 0xfeea, 0xfedb, 0xfed9, 0xff03, 0xfed9, 0xff03, 0xfed9, 0xff03, +0xff48, 0xffa5, 0xff48, 0xffa5, 0xffa7, 0x32, 0xffa7, 0x32, 0xff15, 0xffc9, 0xff15, +0xffc9, 0xfe8a, 0xff62, 0xfe8a, 0xff62, 0xfdfd, 0xfef6, 0xfdfd, 0xfef6, 0xfdfd, 0xfef6, +0xfd67, 0xfe7d, 0xfd67, 0xfe7d, 0xfc7f, 0xfdb1, 0xfc7f, 0xfdb1, 0xfac6, 0xfc12, 0xfac6, +0xfc12, 0xf9dc, 0xfb42, 0xf9dc, 0xfb42, 0xf982, 0xfb03, 0xf982, 0xfb03, 0xf994, 0xfb30, +0xf994, 0xfb30, 0xf994, 0xfb30, 0xf96e, 0xfb28, 0xf96e, 0xfb28, 0xf8c4, 0xfa9d, 0xf8c4, +0xfa9d, 0xf82e, 0xfa29, 0xf82e, 0xfa29, 0xf77d, 0xf99c, 0xf77d, 0xf99c, 0xf750, 0xf994, +0xf750, 0xf994, 0xf765, 0xf9cf, 0xf765, 0xf9cf, 0xf765, 0xf9cf, 0xf7bb, 0xfa4a, 0xf7bb, +0xfa4a, 0xf797, 0xfa4b, 0xf797, 0xfa4b, 0xf6ab, 0xf982, 0xf6ab, 0xf982, 0xf67c, 0xf971, +0xf67c, 0xf971, 0xf631, 0xf93e, 0xf631, 0xf93e, 0xf631, 0xf93e, 0xf574, 0xf894, 0xf574, +0xf894, 0xf518, 0xf842, 0xf518, 0xf842, 0xf457, 0xf782, 0xf457, 0xf782, 0xf365, 0xf687, +0xf365, 0xf687, 0xf2fd, 0xf60b, 0xf2fd, 0xf60b, 0xf2ee, 0xf5db, 0xf2ee, 0xf5db, 0xf2ee, +0xf5db, 0xf2c6, 0xf589, 0xf2c6, 0xf589, 0xf301, 0xf58e, 0xf301, 0xf58e, 0xf385, 0xf5d1, +0xf385, 0xf5d1, 0xf49b, 0xf69e, 0xf49b, 0xf69e, 0xf662, 0xf811, 0xf662, 0xf811, 0xf7e8, +0xf93d, 0xf7e8, 0xf93d, 0xf7e8, 0xf93d, 0xfa79, 0xfb70, 0xfa79, 0xfb70, 0xfd10, 0xfda5, +0xfd10, 0xfda5, 0x5, 0x36, 0x5, 0x36, 0x3c1, 0x38e, 0x3c1, 0x38e, 0x67f, +0x5eb, 0x67f, 0x5eb, 0x67f, 0x5eb, 0x9b8, 0x8c8, 0x9b8, 0x8c8, 0xc56, 0xb0f, +0xc56, 0xb0f, 0xe9e, 0xd08, 0xe9e, 0xd08, 0x111c, 0xf3f, 0x111c, 0xf3f, 0x1257, +0x103c, 0x1257, 0x103c, 0x1389, 0x1139, 0x1389, 0x1139, 0x1389, 0x1139, 0x1489, 0x120f, +0x1489, 0x120f, 0x156d, 0x12d1, 0x156d, 0x12d1, 0x1694, 0x13e0, 0x1694, 0x13e0, 0x17b3, +0x14ef, 0x17b3, 0x14ef, 0x18c2, 0x15f4, 0x18c2, 0x15f4, 0x19db, 0x170a, 0x19db, 0x170a, +0x19db, 0x170a, 0x1b02, 0x1831, 0x1b02, 0x1831, 0x1adb, 0x180c, 0x1adb, 0x180c, 0x1ab0, +0x17e5, 0x1ab0, 0x17e5, 0x1b54, 0x188d, 0x1b54, 0x188d, 0x1b8e, 0x18c9, 0x1b8e, 0x18c9, +0x1b8e, 0x18c9, 0x1c01, 0x193a, 0x1c01, 0x193a, 0x1cb8, 0x19ed, 0x1cb8, 0x19ed, 0x1d69, +0x1a94, 0x1d69, 0x1a94, 0x1dde, 0x1afb, 0x1dde, 0x1afb, 0x1ed1, 0x1bdc, 0x1ed1, 0x1bdc, +0x1fd5, 0x1cc9, 0x1fd5, 0x1cc9, 0x1fd5, 0x1cc9, 0x203e, 0x1d18, 0x203e, 0x1d18, 0x202d, +0x1cea, 0x202d, 0x1cea, 0x1f7d, 0x1c1b, 0x1f7d, 0x1c1b, 0x1f41, 0x1bbf, 0x1f41, 0x1bbf, +0x1e93, 0x1af3, 0x1e93, 0x1af3, 0x1db0, 0x19f3, 0x1db0, 0x19f3, 0x1db0, 0x19f3, 0x1cee, +0x1918, 0x1cee, 0x1918, 0x1bcf, 0x17e6, 0x1bcf, 0x17e6, 0x1ad2, 0x16db, 0x1ad2, 0x16db, +0x19b3, 0x15b6, 0x19b3, 0x15b6, 0x1910, 0x1516, 0x1910, 0x1516, 0x1910, 0x1516, 0x18da, +0x14ea, 0x18da, 0x14ea, 0x18fe, 0x1521, 0x18fe, 0x1521, 0x1883, 0x14c2, 0x1883, 0x14c2, +0x1783, 0x13e7, 0x1783, 0x13e7, 0x16aa, 0x133a, 0x16aa, 0x133a, 0x146e, 0x1130, 0x146e, +0x1130, 0x146e, 0x1130, 0x1268, 0xf61, 0x1268, 0xf61, 0x10ad, 0xde1, 0x10ad, 0xde1, +0xda0, 0xb12, 0xda0, 0xb12, 0xb5e, 0x90f, 0xb5e, 0x90f, 0x94a, 0x738, 0x94a, +0x738, 0x6bc, 0x4e5, 0x6bc, 0x4e5, 0x6bc, 0x4e5, 0x543, 0x3a5, 0x543, 0x3a5, +0x417, 0x2ac, 0x417, 0x2ac, 0x2ef, 0x1b2, 0x2ef, 0x1b2, 0x205, 0xef, 0x205, +0xef, 0x13d, 0x47, 0x13d, 0x47, 0x13d, 0x47, 0x6c, 0xff91, 0x6c, 0xff91, +0x70, 0xffa8, 0x70, 0xffa8, 0x12d, 0x73, 0x12d, 0x73, 0x17d, 0xcc, 0x17d, +0xcc, 0x238, 0x18c, 0x238, 0x18c, 0x2b0, 0x206, 0x2b0, 0x206, 0x2b0, 0x206, +0x2cc, 0x223, 0x2cc, 0x223, 0x3f6, 0x34e, 0x3f6, 0x34e, 0x565, 0x4bf, 0x565, +0x4bf, 0x627, 0x587, 0x627, 0x587, 0x668, 0x5d1, 0x668, 0x5d1, 0x559, 0x4d2, +0x559, 0x4d2, 0x559, 0x4d2, 0x47e, 0x40b, 0x47e, 0x40b, 0x4b1, 0x459, 0x4b1, +0x459, 0x379, 0x342, 0x379, 0x342, 0x255, 0x246, 0x255, 0x246, 0x1ba, 0x1db, +0x1ba, 0x1db, 0x1ba, 0x1db, 0x9a, 0xef, 0x9a, 0xef, 0xffee, 0x7b, 0xffee, +0x7b, 0xff0d, 0xffd6, 0xff0d, 0xffd6, 0xfe6f, 0xff76, 0xfe6f, 0xff76, 0xfd28, 0xfe6d, +0xfd28, 0xfe6d, 0xfb88, 0xfd0b, 0xfb88, 0xfd0b, 0xfb88, 0xfd0b, 0xfada, 0xfc97, 0xfada, +0xfc97, 0xf7d4, 0xf9c7, 0xf7d4, 0xf9c7, 0xf592, 0xf7b5, 0xf592, 0xf7b5, 0xf566, 0xf7b2, +0xf566, 0xf7b2, 0xf472, 0xf6de, 0xf472, 0xf6de, 0xf472, 0xf6de, 0xf448, 0xf6cc, 0xf448, +0xf6cc, 0xf38f, 0xf620, 0xf38f, 0xf620, 0xf2b3, 0xf548, 0xf2b3, 0xf548, 0xf25a, 0xf4e8, +0xf25a, 0xf4e8, 0xf2d2, 0xf551, 0xf2d2, 0xf551, 0xf28c, 0xf4f2, 0xf28c, 0xf4f2, 0xf28c, +0xf4f2, 0xf0aa, 0xf2f0, 0xf0aa, 0xf2f0, 0xf058, 0xf278, 0xf058, 0xf278, 0xef6f, 0xf164, +0xef6f, 0xf164, 0xef2b, 0xf0ef, 0xef2b, 0xf0ef, 0xf04e, 0xf1e1, 0xf04e, 0xf1e1, 0xf0b4, +0xf215, 0xf0b4, 0xf215, 0xf0b4, 0xf215, 0xf1fe, 0xf32e, 0xf1fe, 0xf32e, 0xf3c2, 0xf4c3, +0xf3c2, 0xf4c3, 0xf5ac, 0xf683, 0xf5ac, 0xf683, 0xf76e, 0xf81f, 0xf76e, 0xf81f, 0xf8cf, +0xf95f, 0xf8cf, 0xf95f, 0xf8cf, 0xf95f, 0xfae0, 0xfb57, 0xfae0, 0xfb57, 0xfca0, 0xfd03, +0xfca0, 0xfd03, 0xfd70, 0xfdc8, 0xfd70, 0xfdc8, 0xfe7b, 0xfecd, 0xfe7b, 0xfecd, 0xfe66, +0xfeb8, 0xfe66, 0xfeb8, 0xfd08, 0xfd60, 0xfd08, 0xfd60, 0xfd08, 0xfd60, 0xfd07, 0xfd6a, +0xfd07, 0xfd6a, 0xfc89, 0xfcfb, 0xfc89, 0xfcfb, 0xfac0, 0xfb43, 0xfac0, 0xfb43, 0xfa3c, +0xfad2, 0xfa3c, 0xfad2, 0xf8d2, 0xf97d, 0xf8d2, 0xf97d, 0xf6d7, 0xf796, 0xf6d7, 0xf796, +0xf6d7, 0xf796, 0xf64a, 0xf71c, 0xf64a, 0xf71c, 0xf50c, 0xf5f0, 0xf50c, 0xf5f0, 0xf40e, +0xf501, 0xf40e, 0xf501, 0xf43c, 0xf53c, 0xf43c, 0xf53c, 0xf43a, 0xf545, 0xf43a, 0xf545, +0xf43a, 0xf545, 0xf48f, 0xf5a2, 0xf48f, 0xf5a2, 0xf57a, 0xf692, 0xf57a, 0xf692, 0xf611, +0xf72d, 0xf611, 0xf72d, 0xf7f0, 0xf90e, 0xf7f0, 0xf90e, 0xf95f, 0xfa81, 0xf95f, 0xfa81, +0xf8c7, 0xf9ec, 0xf8c7, 0xf9ec, 0xf8c7, 0xf9ec, 0xf985, 0xfaae, 0xf985, 0xfaae, 0xf962, +0xfa91, 0xf962, 0xfa91, 0xf826, 0xf95f, 0xf826, 0xf95f, 0xf7a8, 0xf8ef, 0xf7a8, 0xf8ef, +0xf694, 0xf7ed, 0xf694, 0xf7ed, 0xf536, 0xf6a5, 0xf536, 0xf6a5, 0xf536, 0xf6a5, 0xf3bf, +0xf54a, 0xf3bf, 0xf54a, 0xf313, 0xf4bf, 0xf313, 0xf4bf, 0xf20f, 0xf3df, 0xf20f, 0xf3df, +0xf0a7, 0xf2a0, 0xf0a7, 0xf2a0, 0xf025, 0xf24b, 0xf025, 0xf24b, 0xf025, 0xf24b, 0xeeca, +0xf120, 0xeeca, 0xf120, 0xedb0, 0xf037, 0xedb0, 0xf037, 0xed31, 0xefe9, 0xed31, 0xefe9, +0xeba5, 0xee8e, 0xeba5, 0xee8e, 0xeac3, 0xedda, 0xeac3, 0xedda, 0xea45, 0xed88, 0xea45, +0xed88, 0xea45, 0xed88, 0xe979, 0xece1, 0xe979, 0xece1, 0xe89d, 0xec26, 0xe89d, 0xec26, +0xe7dc, 0xeb7f, 0xe7dc, 0xeb7f, 0xe884, 0xec39, 0xe884, 0xec39, 0xe8bd, 0xec7b, 0xe8bd, +0xec7b, 0xe84a, 0xec08, 0xe84a, 0xec08, 0xe84a, 0xec08, 0xe814, 0xebc8, 0xe814, 0xebc8, +0xe740, 0xeae1, 0xe740, 0xeae1, 0xe741, 0xeac6, 0xe741, 0xeac6, 0xe745, 0xeaa4, 0xe745, +0xeaa4, 0xe72d, 0xea5d, 0xe72d, 0xea5d, 0xe72d, 0xea5d, 0xe78a, 0xea84, 0xe78a, 0xea84, +0xe719, 0xe9d5, 0xe719, 0xe9d5, 0xe86a, 0xeae4, 0xe86a, 0xeae4, 0xea05, 0xec36, 0xea05, +0xec36, 0xeb0d, 0xecf2, 0xeb0d, 0xecf2, 0xed80, 0xef16, 0xed80, 0xef16, 0xed80, 0xef16, +0xef03, 0xf049, 0xef03, 0xf049, 0xf06d, 0xf162, 0xf06d, 0xf162, 0xf2c0, 0xf365, 0xf2c0, +0xf365, 0xf539, 0xf590, 0xf539, 0xf590, 0xf751, 0xf75c, 0xf751, 0xf75c, 0xf966, 0xf927, +0xf966, 0xf927, 0xf966, 0xf927, 0xfad9, 0xfa56, 0xfad9, 0xfa56, 0xfb6b, 0xfaa6, 0xfb6b, +0xfaa6, 0xfcf1, 0xfbf0, 0xfcf1, 0xfbf0, 0xfcfa, 0xfbc0, 0xfcfa, 0xfbc0, 0xfc87, 0xfb1a, +0xfc87, 0xfb1a, 0xfc87, 0xfb1a, 0xfdcd, 0xfc31, 0xfdcd, 0xfc31, 0xfee5, 0xfd1e, 0xfee5, +0xfd1e, 0xff0c, 0xfd20, 0xff0c, 0xfd20, 0xc, 0xfdff, 0xc, 0xfdff, 0x1b1, 0xff86, +0x1b1, 0xff86, 0x118, 0xfed4, 0x118, 0xfed4, 0x118, 0xfed4, 0x222, 0xffc7, 0x222, +0xffc7, 0x448, 0x1da, 0x448, 0x1da, 0x547, 0x2ca, 0x547, 0x2ca, 0x637, 0x3ae, +0x637, 0x3ae, 0x68e, 0x3fb, 0x68e, 0x3fb, 0x964, 0x6cb, 0x964, 0x6cb, 0x964, +0x6cb, 0xb8f, 0x8f3, 0xb8f, 0x8f3, 0xccf, 0xa32, 0xccf, 0xa32, 0xe55, 0xbbb, +0xe55, 0xbbb, 0xe56, 0xbc2, 0xe56, 0xbc2, 0x10a4, 0xe1a, 0x10a4, 0xe1a, 0x10a4, +0xe1a, 0x1197, 0xf1b, 0x1197, 0xf1b, 0x10de, 0xe72, 0x10de, 0xe72, 0x10c5, 0xe6e, +0x10c5, 0xe6e, 0x1070, 0xe31, 0x1070, 0xe31, 0x1224, 0x1002, 0x1224, 0x1002, 0x126e, +0x106c, 0x126e, 0x106c, 0x126e, 0x106c, 0x11a0, 0xfc1, 0x11a0, 0xfc1, 0x1130, 0xf78, +0x1130, 0xf78, 0x105c, 0xecd, 0x105c, 0xecd, 0x10a1, 0xf3f, 0x10a1, 0xf3f, 0x104c, +0xf17, 0x104c, 0xf17, 0xeca, 0xdc5, 0xeca, 0xdc5, 0xeca, 0xdc5, 0xda0, 0xcca, +0xda0, 0xcca, 0xd2d, 0xc87, 0xd2d, 0xc87, 0xcb1, 0xc3a, 0xcb1, 0xc3a, 0xc24, +0xbdb, 0xc24, 0xbdb, 0xb1e, 0xb02, 0xb1e, 0xb02, 0xb1e, 0xb02, 0x9fa, 0xa07, +0x9fa, 0xa07, 0x8ec, 0x920, 0x8ec, 0x920, 0x8c5, 0x91b, 0x8c5, 0x91b, 0x9ec, +0xa62, 0x9ec, 0xa62, 0x8fc, 0x98c, 0x8fc, 0x98c, 0x737, 0x7de, 0x737, 0x7de, +0x737, 0x7de, 0x643, 0x6fb, 0x643, 0x6fb, 0x4bc, 0x581, 0x4bc, 0x581, 0x46b, +0x538, 0x46b, 0x538, 0x2f4, 0x3c5, 0x2f4, 0x3c5, 0xe1, 0x1b2, 0xe1, 0x1b2, +0x62, 0x12e, 0x62, 0x12e, 0x62, 0x12e, 0xff32, 0xfff6, 0xff32, 0xfff6, 0xfffb, +0xb4, 0xfffb, 0xb4, 0x9f, 0x14a, 0x9f, 0x14a, 0xffd2, 0x6c, 0xffd2, 0x6c, +0x21, 0xaa, 0x21, 0xaa, 0x21, 0xaa, 0xbd, 0x131, 0xbd, 0x131, 0x1c0, +0x21f, 0x1c0, 0x21f, 0x14d, 0x195, 0x14d, 0x195, 0xffb0, 0xffe1, 0xffb0, 0xffe1, +0xff58, 0xff73, 0xff58, 0xff73, 0xff55, 0xff59, 0xff55, 0xff59, 0xff55, 0xff59, 0xfef4, +0xfee2, 0xfef4, 0xfee2, 0xfebe, 0xfe97, 0xfebe, 0xfe97, 0xfe1b, 0xfdde, 0xfe1b, 0xfdde, +0xfd41, 0xfcf2, 0xfd41, 0xfcf2, 0xfdd6, 0xfd75, 0xfdd6, 0xfd75, 0xfdd6, 0xfd75, 0xfebc, +0xfe4c, 0xfebc, 0xfe4c, 0xfe82, 0xfe05, 0xfe82, 0xfe05, 0xfdea, 0xfd63, 0xfdea, 0xfd63, +0xfcd7, 0xfc49, 0xfcd7, 0xfc49, 0xfd7b, 0xfcec, 0xfd7b, 0xfcec, 0xff6b, 0xfedd, 0xff6b, +0xfedd, 0xff6b, 0xfedd, 0x15d, 0xd6, 0x15d, 0xd6, 0x249, 0x1ce, 0x249, 0x1ce, +0x20e, 0x1a5, 0x20e, 0x1a5, 0x457, 0x406, 0x457, 0x406, 0x610, 0x5dd, 0x610, +0x5dd, 0x658, 0x649, 0x658, 0x649, 0x658, 0x649, 0x6ba, 0x6d7, 0x6ba, 0x6d7, +0x545, 0x593, 0x545, 0x593, 0x460, 0x4e4, 0x460, 0x4e4, 0x4b5, 0x576, 0x4b5, +0x576, 0x2f8, 0x3fa, 0x2f8, 0x3fa, 0x2f8, 0x3fa, 0xa2, 0x1e9, 0xa2, 0x1e9, +0xfe62, 0xfff0, 0xfe62, 0xfff0, 0xfcdc, 0xfeb4, 0xfcdc, 0xfeb4, 0xfcd9, 0xfefb, 0xfcd9, +0xfefb, 0xfafa, 0xfd64, 0xfafa, 0xfd64, 0xf862, 0xfb12, 0xf862, 0xfb12, 0xf862, 0xfb12, +0xf682, 0xf973, 0xf682, 0xf973, 0xf5be, 0xf8ec, 0xf5be, 0xf8ec, 0xf46e, 0xf7d2, 0xf46e, +0xf7d2, 0xf286, 0xf617, 0xf286, 0xf617, 0xf136, 0xf4eb, 0xf136, 0xf4eb, 0xed67, 0xf135, +0xed67, 0xf135, 0xed67, 0xf135, 0xeb83, 0xef61, 0xeb83, 0xef61, 0xebc4, 0xefa5, 0xebc4, +0xefa5, 0xea8c, 0xee65, 0xea8c, 0xee65, 0xeaa8, 0xee6c, 0xeaa8, 0xee6c, 0xeac8, 0xee6d, +0xeac8, 0xee6d, 0xeac8, 0xee6d, 0xebdf, 0xef59, 0xebdf, 0xef59, 0xecef, 0xf034, 0xecef, +0xf034, 0xee2f, 0xf136, 0xee2f, 0xf136, 0xef1e, 0xf1df, 0xef1e, 0xf1df, 0xeddd, 0xf051, +0xeddd, 0xf051, 0xef9b, 0xf1bb, 0xef9b, 0xf1bb, 0xef9b, 0xf1bb, 0xf0e3, 0xf2ac, 0xf0e3, +0xf2ac, 0xf1c1, 0xf32e, 0xf1c1, 0xf32e, 0xf46b, 0xf57b, 0xf46b, 0xf57b, 0xf657, 0xf709, +0xf657, 0xf709, 0xf94d, 0xf9a1, 0xf94d, 0xf9a1, 0xfd96, 0xfd8d, 0xfd96, 0xfd8d, 0xfd96, +0xfd8d, 0x9f, 0x39, 0x9f, 0x39, 0x324, 0x264, 0x324, 0x264, 0x605, 0x4eb, +0x605, 0x4eb, 0x8ff, 0x78f, 0x8ff, 0x78f, 0xd32, 0xb6b, 0xd32, 0xb6b, 0xd32, +0xb6b, 0x1005, 0xde9, 0x1005, 0xde9, 0x11a6, 0xf37, 0x11a6, 0xf37, 0x131b, 0x1057, +0x131b, 0x1057, 0x159a, 0x1282, 0x159a, 0x1282, 0x1882, 0x1514, 0x1882, 0x1514, 0x19a3, +0x15df, 0x19a3, 0x15df, 0x19a3, 0x15df, 0x1a87, 0x166a, 0x1a87, 0x166a, 0x1b10, 0x169a, +0x1b10, 0x169a, 0x1b6a, 0x1699, 0x1b6a, 0x1699, 0x1d5c, 0x1830, 0x1d5c, 0x1830, 0x1e5c, +0x18d4, 0x1e5c, 0x18d4, 0x1eec, 0x190a, 0x1eec, 0x190a, 0x1eec, 0x190a, 0x210a, 0x1ad0, +0x210a, 0x1ad0, 0x2307, 0x1c79, 0x2307, 0x1c79, 0x266f, 0x1f93, 0x266f, 0x1f93, 0x28f5, +0x21d2, 0x28f5, 0x21d2, 0x2ad1, 0x2371, 0x2ad1, 0x2371, 0x2ad1, 0x2371, 0x2d30, 0x259e, +0x2d30, 0x259e, 0x2e5d, 0x26a6, 0x2e5d, 0x26a6, 0x2fb8, 0x27eb, 0x2fb8, 0x27eb, 0x30e2, +0x2910, 0x30e2, 0x2910, 0x30cd, 0x2908, 0x30cd, 0x2908, 0x30af, 0x2908, 0x30af, 0x2908, +0x30af, 0x2908, 0x2f7e, 0x280b, 0x2f7e, 0x280b, 0x2f01, 0x27d4, 0x2f01, 0x27d4, 0x2e43, +0x276f, 0x2e43, 0x276f, 0x2b29, 0x24c0, 0x2b29, 0x24c0, 0x2882, 0x2295, 0x2882, 0x2295, +0x249a, 0x1f38, 0x249a, 0x1f38, 0x249a, 0x1f38, 0x21e9, 0x1d20, 0x21e9, 0x1d20, 0x1e91, +0x1a6b, 0x1e91, 0x1a6b, 0x1abe, 0x1742, 0x1abe, 0x1742, 0x16e2, 0x1416, 0x16e2, 0x1416, +0x1207, 0xfec, 0x1207, 0xfec, 0x1207, 0xfec, 0xf70, 0xe04, 0xf70, 0xe04, 0xc39, +0xb78, 0xc39, 0xb78, 0x7fd, 0x7e0, 0x7fd, 0x7e0, 0x448, 0x4c4, 0x448, 0x4c4, +0x18a, 0x292, 0x18a, 0x292, 0xffae, 0x135, 0xffae, 0x135, 0xffae, 0x135, 0xfe5b, +0x50, 0xfe5b, 0x50, 0xfb58, 0xfdab, 0xfb58, 0xfdab, 0xf920, 0xfbbf, 0xf920, 0xfbbf, +0xf790, 0xfa6a, 0xf790, 0xfa6a, 0xf581, 0xf887, 0xf581, 0xf887, 0xf468, 0xf789, 0xf468, +0xf789, 0xf468, 0xf789, 0xf137, 0xf464, 0xf137, 0xf464, 0xedf4, 0xf122, 0xedf4, 0xf122, +0xecf4, 0xf017, 0xecf4, 0xf017, 0xeb17, 0xee28, 0xeb17, 0xee28, 0xe971, 0xec68, 0xe971, +0xec68, 0xe971, 0xec68, 0xe94f, 0xec29, 0xe94f, 0xec29, 0xe81d, 0xead6, 0xe81d, 0xead6, +0xe7fb, 0xea93, 0xe7fb, 0xea93, 0xe84f, 0xeac8, 0xe84f, 0xeac8, 0xe8e3, 0xeb3e, 0xe8e3, +0xeb3e, 0xeab9, 0xecf9, 0xeab9, 0xecf9, 0xeab9, 0xecf9, 0xeb79, 0xeda1, 0xeb79, 0xeda1, +0xebfd, 0xee10, 0xebfd, 0xee10, 0xed88, 0xef8a, 0xed88, 0xef8a, 0xedd4, 0xefc6, 0xedd4, +0xefc6, 0xee0c, 0xefed, 0xee0c, 0xefed, 0xee4d, 0xf01f, 0xee4d, 0xf01f, 0xee4d, 0xf01f, +0xed5f, 0xef20, 0xed5f, 0xef20, 0xecb0, 0xee5c, 0xecb0, 0xee5c, 0xecfe, 0xee90, 0xecfe, +0xee90, 0xed9d, 0xef0e, 0xed9d, 0xef0e, 0xec52, 0xed9b, 0xec52, 0xed9b, 0xec52, 0xed9b, +0xec48, 0xed61, 0xec48, 0xed61, 0xed25, 0xee06, 0xed25, 0xee06, 0xee2b, 0xeec9, 0xee2b, +0xeec9, 0xef7c, 0xefd0, 0xef7c, 0xefd0, 0xf13f, 0xf13f, 0xf13f, 0xf13f, 0xf3cd, 0xf374, +0xf3cd, 0xf374, 0xf3cd, 0xf374, 0xf629, 0xf571, 0xf629, 0xf571, 0xf932, 0xf818, 0xf932, +0xf818, 0xfc15, 0xfa99, 0xfc15, 0xfa99, 0xfecb, 0xfcee, 0xfecb, 0xfcee, 0x16e, 0xff35, +0x16e, 0xff35, 0x485, 0x1f8, 0x485, 0x1f8, 0x485, 0x1f8, 0x764, 0x48d, 0x764, +0x48d, 0x9e8, 0x6d4, 0x9e8, 0x6d4, 0xc3f, 0x8fe, 0xc3f, 0x8fe, 0xd4b, 0x9ee, +0xd4b, 0x9ee, 0xd3d, 0x9d8, 0xd3d, 0x9d8, 0xd3d, 0x9d8, 0xed1, 0xb78, 0xed1, +0xb78, 0xf89, 0xc50, 0xf89, 0xc50, 0xf80, 0xc7d, 0xf80, 0xc7d, 0xef9, 0xc3f, +0xef9, 0xc3f, 0xd9c, 0xb3f, 0xd9c, 0xb3f, 0xcf5, 0xb05, 0xcf5, 0xb05, 0xcf5, +0xb05, 0xa7d, 0x909, 0xa7d, 0x909, 0x900, 0x815, 0x900, 0x815, 0x7be, 0x764, +0x7be, 0x764, 0x626, 0x663, 0x626, 0x663, 0x41d, 0x4f4, 0x41d, 0x4f4, 0x41d, +0x4f4, 0x173, 0x2e2, 0x173, 0x2e2, 0xfe83, 0x87, 0xfe83, 0x87, 0xfb2b, 0xfdbb, +0xfb2b, 0xfdbb, 0xf92b, 0xfc3e, 0xf92b, 0xfc3e, 0xf74a, 0xfad3, 0xf74a, 0xfad3, 0xf546, +0xf936, 0xf546, 0xf936, 0xf546, 0xf936, 0xf36e, 0xf7b6, 0xf36e, 0xf7b6, 0xf15b, 0xf5eb, +0xf15b, 0xf5eb, 0xf0a7, 0xf56e, 0xf0a7, 0xf56e, 0xef05, 0xf3f1, 0xef05, 0xf3f1, 0xed33, +0xf236, 0xed33, 0xf236, 0xeb82, 0xf08d, 0xeb82, 0xf08d, 0xeb82, 0xf08d, 0xe739, 0xec41, +0xe739, 0xec41, 0xe571, 0xea69, 0xe571, 0xea69, 0xe3e9, 0xe8c9, 0xe3e9, 0xe8c9, 0xe2ea, +0xe7ac, 0xe2ea, 0xe7ac, 0xe228, 0xe6c9, 0xe228, 0xe6c9, 0xe228, 0xe6c9, 0xe23e, 0xe6ba, +0xe23e, 0xe6ba, 0xe356, 0xe7af, 0xe356, 0xe7af, 0xe417, 0xe84e, 0xe417, 0xe84e, 0xe5c1, +0xe9d8, 0xe5c1, 0xe9d8, 0xe5ac, 0xe9a8, 0xe5ac, 0xe9a8, 0xe6f6, 0xeadc, 0xe6f6, 0xeadc, +0xe6f6, 0xeadc, 0xe687, 0xea59, 0xe687, 0xea59, 0xe5e1, 0xe9a4, 0xe5e1, 0xe9a4, 0xe60f, +0xe9c6, 0xe60f, 0xe9c6, 0xe51d, 0xe8cb, 0xe51d, 0xe8cb, 0xe4cf, 0xe873, 0xe4cf, 0xe873, +0xe532, 0xe8cd, 0xe532, 0xe8cd, 0xe532, 0xe8cd, 0xe5b1, 0xe93f, 0xe5b1, 0xe93f, 0xe613, +0xe990, 0xe613, 0xe990, 0xe6a6, 0xea0c, 0xe6a6, 0xea0c, 0xe61d, 0xe964, 0xe61d, 0xe964, +0xe67b, 0xe99b, 0xe67b, 0xe99b, 0xe67b, 0xe99b, 0xe824, 0xeb14, 0xe824, 0xeb14, 0xe9d4, +0xec8a, 0xe9d4, 0xec8a, 0xeba9, 0xee19, 0xeba9, 0xee19, 0xed4d, 0xef6f, 0xed4d, 0xef6f, +0xef55, 0xf121, 0xef55, 0xf121, 0xf273, 0xf3e0, 0xf273, 0xf3e0, 0xf273, 0xf3e0, 0xf53d, +0xf647, 0xf53d, 0xf647, 0xf8a5, 0xf947, 0xf8a5, 0xf947, 0xfa9e, 0xfad6, 0xfa9e, 0xfad6, +0xfc65, 0xfc35, 0xfc65, 0xfc35, 0xfea4, 0xfe0e, 0xfea4, 0xfe0e, 0x72, 0xff7c, 0x72, +0xff7c, 0x72, 0xff7c, 0x183, 0x37, 0x183, 0x37, 0x17c, 0xffe4, 0x17c, 0xffe4, +0x2a4, 0xcb, 0x2a4, 0xcb, 0x39e, 0x193, 0x39e, 0x193, 0x47a, 0x24c, 0x47a, +0x24c, 0x47a, 0x24c, 0x50d, 0x2cc, 0x50d, 0x2cc, 0x604, 0x3bf, 0x604, 0x3bf, +0x5ee, 0x3b5, 0x5ee, 0x3b5, 0x69a, 0x47c, 0x69a, 0x47c, 0x679, 0x483, 0x679, +0x483, 0x665, 0x4a3, 0x665, 0x4a3, 0x665, 0x4a3, 0x690, 0x50c, 0x690, 0x50c, +0x62a, 0x4eb, 0x62a, 0x4eb, 0x663, 0x56e, 0x663, 0x56e, 0x4be, 0x415, 0x4be, +0x415, 0x40f, 0x3b2, 0x40f, 0x3b2, 0x2de, 0x2cb, 0x2de, 0x2cb, 0x2de, 0x2cb, +0x2c6, 0x2f9, 0x2c6, 0x2f9, 0x20d, 0x27e, 0x20d, 0x27e, 0x29d, 0x345, 0x29d, +0x345, 0x3f1, 0x4c8, 0x3f1, 0x4c8, 0x1cc, 0x2c6, 0x1cc, 0x2c6, 0x1cc, 0x2c6, +0xec, 0x200, 0xec, 0x200, 0xffa2, 0xc5, 0xffa2, 0xc5, 0xfd77, 0xfea0, 0xfd77, +0xfea0, 0xfc8a, 0xfdaf, 0xfc8a, 0xfdaf, 0xfabf, 0xfbd9, 0xfabf, 0xfbd9, 0xfa4c, 0xfb54, +0xfa4c, 0xfb54, 0xfa4c, 0xfb54, 0xfb35, 0xfc26, 0xfb35, 0xfc26, 0xfc17, 0xfcef, 0xfc17, +0xfcef, 0xfd9c, 0xfe57, 0xfd9c, 0xfe57, 0xfe8c, 0xff2b, 0xfe8c, 0xff2b, 0x10d, 0x18f, +0x10d, 0x18f, 0x299, 0x300, 0x299, 0x300, 0x299, 0x300, 0x3dd, 0x42c, 0x3dd, +0x42c, 0x4e1, 0x51c, 0x4e1, 0x51c, 0x631, 0x65a, 0x631, 0x65a, 0x6fd, 0x717, +0x6fd, 0x717, 0x80a, 0x818, 0x80a, 0x818, 0x80a, 0x818, 0x940, 0x944, 0x940, +0x944, 0x8b2, 0x8ad, 0x8b2, 0x8ad, 0x9e6, 0x9d8, 0x9e6, 0x9d8, 0x9d2, 0x9ba, +0x9d2, 0x9ba, 0xaf2, 0xacd, 0xaf2, 0xacd, 0xb37, 0xb02, 0xb37, 0xb02, 0xb37, +0xb02, 0xabb, 0xa72, 0xabb, 0xa72, 0xbe8, 0xb84, 0xbe8, 0xb84, 0xbc7, 0xb43, +0xbc7, 0xb43, 0xca3, 0xbf9, 0xca3, 0xbf9, 0xee5, 0xe0f, 0xee5, 0xe0f, 0xfae, +0xea5, 0xfae, 0xea5, 0xfae, 0xea5, 0x1181, 0x1040, 0x1181, 0x1040, 0x13cb, 0x124e, +0x13cb, 0x124e, 0x1548, 0x138d, 0x1548, 0x138d, 0x1824, 0x1628, 0x1824, 0x1628, 0x195c, +0x1721, 0x195c, 0x1721, 0x195c, 0x1721, 0x1a4a, 0x17d2, 0x1a4a, 0x17d2, 0x1aa3, 0x17f1, +0x1aa3, 0x17f1, 0x1a45, 0x1760, 0x1a45, 0x1760, 0x19fe, 0x16ed, 0x19fe, 0x16ed, 0x1856, +0x1524, 0x1856, 0x1524, 0x1680, 0x1336, 0x1680, 0x1336, 0x1680, 0x1336, 0x15d9, 0x1283, +0x15d9, 0x1283, 0x133d, 0xfe7, 0x133d, 0xfe7, 0x1208, 0xec0, 0x1208, 0xec0, 0x1153, +0xe25, 0x1153, 0xe25, 0xeaf, 0xba6, 0xeaf, 0xba6, 0xd70, 0xa98, 0xd70, 0xa98, +0xd70, 0xa98, 0xb5d, 0x8bf, 0xb5d, 0x8bf, 0xa4f, 0x7f5, 0xa4f, 0x7f5, 0x8ff, +0x6ef, 0x8ff, 0x6ef, 0x785, 0x5c4, 0x785, 0x5c4, 0x72c, 0x5bd, 0x72c, 0x5bd, +0x72c, 0x5bd, 0x54a, 0x42e, 0x54a, 0x42e, 0x284, 0x1ba, 0x284, 0x1ba, 0x1d0, +0x157, 0x1d0, 0x157, 0xffb4, 0xff87, 0xffb4, 0xff87, 0xfe6c, 0xfe85, 0xfe6c, 0xfe85, +0xfe4d, 0xfea8, 0xfe4d, 0xfea8, 0xfe4d, 0xfea8, 0xfd98, 0xfe2d, 0xfd98, 0xfe2d, 0xfcde, +0xfda8, 0xfcde, 0xfda8, 0xfa1d, 0xfb15, 0xfa1d, 0xfb15, 0xf8dd, 0xf9fe, 0xf8dd, 0xf9fe, +0xf643, 0xf787, 0xf643, 0xf787, 0xf3d4, 0xf537, 0xf3d4, 0xf537, 0xf3d4, 0xf537, 0xf24d, +0xf3cc, 0xf24d, 0xf3cc, 0xee93, 0xf02c, 0xee93, 0xf02c, 0xebfe, 0xedb0, 0xebfe, 0xedb0, +0xeb78, 0xed44, 0xeb78, 0xed44, 0xe8fa, 0xeae1, 0xe8fa, 0xeae1, 0xe8fa, 0xeae1, 0xe7e9, +0xe9ed, 0xe7e9, 0xe9ed, 0xe6d7, 0xe8fb, 0xe6d7, 0xe8fb, 0xe602, 0xe848, 0xe602, 0xe848, +0xe67e, 0xe8e9, 0xe67e, 0xe8e9, 0xe69b, 0xe92c, 0xe69b, 0xe92c, 0xe838, 0xeaf2, 0xe838, +0xeaf2, 0xe838, 0xeaf2, 0xe6cc, 0xe9ad, 0xe6cc, 0xe9ad, 0xe643, 0xe94b, 0xe643, 0xe94b, +0xe65f, 0xe98b, 0xe65f, 0xe98b, 0xe5ce, 0xe918, 0xe5ce, 0xe918, 0xe42a, 0xe78c, 0xe42a, +0xe78c, 0xe42a, 0xe78c, 0xe34e, 0xe6bf, 0xe34e, 0xe6bf, 0xe203, 0xe57a, 0xe203, 0xe57a, +0xe11f, 0xe48f, 0xe11f, 0xe48f, 0xe248, 0xe5a5, 0xe248, 0xe5a5, 0xe221, 0xe55c, 0xe221, +0xe55c, 0xe335, 0xe641, 0xe335, 0xe641, 0xe335, 0xe641, 0xe494, 0xe762, 0xe494, 0xe762, +0xe6ed, 0xe970, 0xe6ed, 0xe970, 0xe8fa, 0xeb25, 0xe8fa, 0xeb25, 0xec01, 0xedc8, 0xec01, +0xedc8, 0xef98, 0xf0f1, 0xef98, 0xf0f1, 0xf35f, 0xf443, 0xf35f, 0xf443, 0xf35f, 0xf443, +0xf739, 0xf7a2, 0xf739, 0xf7a2, 0xfb81, 0xfb6d, 0xfb81, 0xfb6d, 0x1f, 0xff8e, 0x1f, +0xff8e, 0x4a0, 0x393, 0x4a0, 0x393, 0x865, 0x6e3, 0x865, 0x6e3, 0x865, 0x6e3, +0xbbe, 0x9ce, 0xbbe, 0x9ce, 0xf11, 0xcbc, 0xf11, 0xcbc, 0x111e, 0xe70, 0x111e, +0xe70, 0x13a1, 0x10a7, 0x13a1, 0x10a7, 0x152d, 0x11f5, 0x152d, 0x11f5, 0x175d, 0x13f4, +0x175d, 0x13f4, 0x175d, 0x13f4, 0x1812, 0x1485, 0x1812, 0x1485, 0x1920, 0x157d, 0x1920, +0x157d, 0x1a5a, 0x16ac, 0x1a5a, 0x16ac, 0x1ae4, 0x1734, 0x1ae4, 0x1734, 0x1c52, 0x18a9, +0x1c52, 0x18a9, 0x1dd4, 0x1a38, 0x1dd4, 0x1a38, 0x1dd4, 0x1a38, 0x1f74, 0x1be8, 0x1f74, +0x1be8, 0x207c, 0x1d02, 0x207c, 0x1d02, 0x2054, 0x1cea, 0x2054, 0x1cea, 0x1fb0, 0x1c54, +0x1fb0, 0x1c54, 0x1f93, 0x1c40, 0x1f93, 0x1c40, 0x1f93, 0x1c40, 0x1ec9, 0x1b78, 0x1ec9, +0x1b78, 0x206e, 0x1d18, 0x206e, 0x1d18, 0x2113, 0x1db0, 0x2113, 0x1db0, 0x21c3, 0x1e4a, +0x21c3, 0x1e4a, 0x2333, 0x1f9f, 0x2333, 0x1f9f, 0x2355, 0x1f9e, 0x2355, 0x1f9e, 0x2355, +0x1f9e, 0x234e, 0x1f6f, 0x234e, 0x1f6f, 0x2236, 0x1e2c, 0x2236, 0x1e2c, 0x21bc, 0x1d86, +0x21bc, 0x1d86, 0x2192, 0x1d32, 0x2192, 0x1d32, 0x2082, 0x1bfb, 0x2082, 0x1bfb, 0x202f, +0x1b87, 0x202f, 0x1b87, 0x202f, 0x1b87, 0x1fd0, 0x1b10, 0x1fd0, 0x1b10, 0x1e83, 0x19b6, +0x1e83, 0x19b6, 0x1e4b, 0x197d, 0x1e4b, 0x197d, 0x1e84, 0x19c2, 0x1e84, 0x19c2, 0x1e4f, +0x19a8, 0x1e4f, 0x19a8, 0x1e4f, 0x19a8, 0x1d1f, 0x18a3, 0x1d1f, 0x18a3, 0x1d0d, 0x18c9, +0x1d0d, 0x18c9, 0x1caa, 0x18ad, 0x1caa, 0x18ad, 0x1b7b, 0x17d1, 0x1b7b, 0x17d1, 0x19a2, +0x1656, 0x19a2, 0x1656, 0x1829, 0x1544, 0x1829, 0x1544, 0x1829, 0x1544, 0x14e2, 0x1269, +0x14e2, 0x1269, 0x1251, 0x1047, 0x1251, 0x1047, 0x1136, 0xf9c, 0x1136, 0xf9c, 0xdc6, +0xc97, 0xdc6, 0xc97, 0xb08, 0xa40, 0xb08, 0xa40, 0x830, 0x7c6, 0x830, 0x7c6, +0x830, 0x7c6, 0x716, 0x6fe, 0x716, 0x6fe, 0x45b, 0x489, 0x45b, 0x489, 0x356, +0x3bc, 0x356, 0x3bc, 0x34d, 0x3dc, 0x34d, 0x3dc, 0x1b1, 0x25a, 0x1b1, 0x25a, +0x1b1, 0x25a, 0x12b, 0x1df, 0x12b, 0x1df, 0x18a, 0x23c, 0x18a, 0x23c, 0x267, +0x30c, 0x267, 0x30c, 0x2b9, 0x345, 0x2b9, 0x345, 0x279, 0x2e7, 0x279, 0x2e7, +0x173, 0x1bd, 0x173, 0x1bd, 0x173, 0x1bd, 0x19b, 0x1c0, 0x19b, 0x1c0, 0x12e, +0x130, 0x12e, 0x130, 0xd3, 0xb5, 0xd3, 0xb5, 0xfff4, 0xffbf, 0xfff4, 0xffbf, +0xfefb, 0xfeb8, 0xfefb, 0xfeb8, 0xfd6b, 0xfd25, 0xfd6b, 0xfd25, 0xfd6b, 0xfd25, 0xfcd2, +0xfc97, 0xfcd2, 0xfc97, 0xfaf4, 0xfad0, 0xfaf4, 0xfad0, 0xf98d, 0xf98f, 0xf98d, 0xf98f, +0xf865, 0xf89b, 0xf865, 0xf89b, 0xf703, 0xf779, 0xf703, 0xf779, 0xf703, 0xf779, 0xf65a, +0xf71c, 0xf65a, 0xf71c, 0xf3ba, 0xf4d0, 0xf3ba, 0xf4d0, 0xf352, 0xf4c2, 0xf352, 0xf4c2, +0xf016, 0xf1e5, 0xf016, 0xf1e5, 0xed30, 0xef5d, 0xed30, 0xef5d, 0xeb94, 0xee1d, 0xeb94, +0xee1d, 0xeb94, 0xee1d, 0xe90d, 0xebed, 0xe90d, 0xebed, 0xe5c8, 0xe8f4, 0xe5c8, 0xe8f4, +0xe4cf, 0xe83d, 0xe4cf, 0xe83d, 0xe588, 0xe92a, 0xe588, 0xe92a, 0xe6ba, 0xea80, 0xe6ba, +0xea80, 0xe7ad, 0xeb87, 0xe7ad, 0xeb87, 0xe7ad, 0xeb87, 0xe68d, 0xea6a, 0xe68d, 0xea6a, +0xe756, 0xeb24, 0xe756, 0xeb24, 0xe688, 0xea37, 0xe688, 0xea37, 0xe678, 0xe9f9, 0xe678, +0xe9f9, 0xe640, 0xe987, 0xe640, 0xe987, 0xe640, 0xe987, 0xe6af, 0xe9af, 0xe6af, 0xe9af, +0xe83a, 0xeaee, 0xe83a, 0xeaee, 0xe9d1, 0xec32, 0xe9d1, 0xec32, 0xebe8, 0xedf4, 0xebe8, +0xedf4, 0xeda9, 0xef63, 0xeda9, 0xef63, 0xeebb, 0xf026, 0xeebb, 0xf026, 0xeebb, 0xf026, +0xf17a, 0xf29e, 0xf17a, 0xf29e, 0xf5f4, 0xf6d9, 0xf5f4, 0xf6d9, 0xf8c8, 0xf97a, 0xf8c8, +0xf97a, 0xfb84, 0xfc10, 0xfb84, 0xfc10, 0xfd31, 0xfda5, 0xfd31, 0xfda5, 0xfe7d, 0xfee6, +0xfe7d, 0xfee6, 0xfe7d, 0xfee6, 0xfff8, 0x65, 0xfff8, 0x65, 0x189, 0x205, 0x189, +0x205, 0x183, 0x21a, 0x183, 0x21a, 0x17f, 0x23a, 0x17f, 0x23a, 0xd1, 0x1b6, +0xd1, 0x1b6, 0xd1, 0x1b6, 0x6a, 0x17e, 0x6a, 0x17e, 0xfffa, 0x13f, 0xfffa, +0x13f, 0xfefc, 0x71, 0xfefc, 0x71, 0xfed4, 0x75, 0xfed4, 0x75, 0xfdb5, 0xff7d, +0xfdb5, 0xff7d, 0xfd3b, 0xff20, 0xfd3b, 0xff20, 0xfd3b, 0xff20, 0xfd53, 0xff4c, 0xfd53, +0xff4c, 0xfcf5, 0xfef6, 0xfcf5, 0xfef6, 0xfc6c, 0xfe6b, 0xfc6c, 0xfe6b, 0xfd0a, 0xfefb, +0xfd0a, 0xfefb, 0xfd5c, 0xff32, 0xfd5c, 0xff32, 0xfec6, 0x78, 0xfec6, 0x78, 0xfec6, +0x78, 0xff84, 0x109, 0xff84, 0x109, 0xffc8, 0x11a, 0xffc8, 0x11a, 0xb2, 0x1cb, +0xb2, 0x1cb, 0xec, 0x1cb, 0xec, 0x1cb, 0x10f, 0x1b4, 0x10f, 0x1b4, 0x10f, +0x1b4, 0x118, 0x187, 0x118, 0x187, 0xff38, 0xff77, 0xff38, 0xff77, 0xfe00, 0xfe17, +0xfe00, 0xfe17, 0xfd63, 0xfd5c, 0xfd63, 0xfd5c, 0xfb9d, 0xfb84, 0xfb9d, 0xfb84, 0xfae6, +0xfac8, 0xfae6, 0xfac8, 0xfae6, 0xfac8, 0xf93a, 0xf925, 0xf93a, 0xf925, 0xf8a7, 0xf8a7, +0xf8a7, 0xf8a7, 0xf677, 0xf69a, 0xf677, 0xf69a, 0xf436, 0xf488, 0xf436, 0xf488, 0xf2cd, +0xf358, 0xf2cd, 0xf358, 0xf2cd, 0xf358, 0xf1f2, 0xf2be, 0xf1f2, 0xf2be, 0xf025, 0xf139, +0xf025, 0xf139, 0xee5c, 0xefba, 0xee5c, 0xefba, 0xed9f, 0xef48, 0xed9f, 0xef48, 0xeb60, +0xed52, 0xeb60, 0xed52, 0xea54, 0xec8a, 0xea54, 0xec8a, 0xea54, 0xec8a, 0xe942, 0xebb4, +0xe942, 0xebb4, 0xe91b, 0xebc0, 0xe91b, 0xebc0, 0xe96a, 0xec36, 0xe96a, 0xec36, 0xe950, +0xec36, 0xe950, 0xec36, 0xe7f9, 0xeae9, 0xe7f9, 0xeae9, 0xe7e7, 0xead5, 0xe7e7, 0xead5, +0xe7e7, 0xead5, 0xe7d8, 0xeab3, 0xe7d8, 0xeab3, 0xe8e8, 0xeba4, 0xe8e8, 0xeba4, 0xe914, +0xeba4, 0xe914, 0xeba4, 0xe84d, 0xeaa6, 0xe84d, 0xeaa6, 0xe7fa, 0xea12, 0xe7fa, 0xea12, +0xe7fa, 0xea12, 0xe7e2, 0xe9b1, 0xe7e2, 0xe9b1, 0xe8ae, 0xea31, 0xe8ae, 0xea31, 0xe894, +0xe9c8, 0xe894, 0xe9c8, 0xeae4, 0xebc9, 0xeae4, 0xebc9, 0xec39, 0xecd0, 0xec39, 0xecd0, +0xefbd, 0xf00b, 0xefbd, 0xf00b, 0xefbd, 0xf00b, 0xf242, 0xf24d, 0xf242, 0xf24d, 0xf4b2, +0xf481, 0xf4b2, 0xf481, 0xf750, 0xf6ec, 0xf750, 0xf6ec, 0xf895, 0xf806, 0xf895, 0xf806, +0xfaec, 0xfa3b, 0xfaec, 0xfa3b, 0xfbef, 0xfb25, 0xfbef, 0xfb25, 0xfbef, 0xfb25, 0xfccb, +0xfbf0, 0xfccb, 0xfbf0, 0xfd1e, 0xfc3a, 0xfd1e, 0xfc3a, 0xfdbd, 0xfcd5, 0xfdbd, 0xfcd5, +0xfde5, 0xfcfd, 0xfde5, 0xfcfd, 0xfe29, 0xfd45, 0xfe29, 0xfd45, 0xfe29, 0xfd45, 0xfd8d, +0xfcac, 0xfd8d, 0xfcac, 0xfdb5, 0xfcd7, 0xfdb5, 0xfcd7, 0xfd99, 0xfcbd, 0xfd99, 0xfcbd, +0xfcfe, 0xfc20, 0xfcfe, 0xfc20, 0xfc39, 0xfb55, 0xfc39, 0xfb55, 0xfd8c, 0xfc9d, 0xfd8c, +0xfc9d, 0xfd8c, 0xfc9d, 0xfebc, 0xfdbe, 0xfebc, 0xfdbe, 0xff51, 0xfe3e, 0xff51, 0xfe3e, +0xf1, 0xffc5, 0xf1, 0xffc5, 0x251, 0x108, 0x251, 0x108, 0x549, 0x3e0, 0x549, +0x3e0, 0x709, 0x57e, 0x709, 0x57e, 0x709, 0x57e, 0x979, 0x7cd, 0x979, 0x7cd, +0xa67, 0x89c, 0xa67, 0x89c, 0xb47, 0x95f, 0xb47, 0x95f, 0xc39, 0xa39, 0xc39, +0xa39, 0xd56, 0xb45, 0xd56, 0xb45, 0xd56, 0xb45, 0xe15, 0xbfb, 0xe15, 0xbfb, +0xd6d, 0xb52, 0xd6d, 0xb52, 0xd86, 0xb73, 0xd86, 0xb73, 0xcc6, 0xac5, 0xcc6, +0xac5, 0xb80, 0x99a, 0xb80, 0x99a, 0xabd, 0x8fc, 0xabd, 0x8fc, 0xabd, 0x8fc, +0xa2e, 0x899, 0xa2e, 0x899, 0x932, 0x7d1, 0x932, 0x7d1, 0x958, 0x831, 0x958, +0x831, 0x9b4, 0x8cc, 0x9b4, 0x8cc, 0x959, 0x8b2, 0x959, 0x8b2, 0x867, 0x801, +0x867, 0x801, 0x867, 0x801, 0x85b, 0x836, 0x85b, 0x836, 0x763, 0x77b, 0x763, +0x77b, 0x700, 0x751, 0x700, 0x751, 0x65f, 0x6e2, 0x65f, 0x6e2, 0x644, 0x6f2, +0x644, 0x6f2, 0x644, 0x6f2, 0x682, 0x753, 0x682, 0x753, 0x6a1, 0x78c, 0x6a1, +0x78c, 0x823, 0x920, 0x823, 0x920, 0x7ea, 0x8ef, 0x7ea, 0x8ef, 0x7c9, 0x8ce, +0x7c9, 0x8ce, 0x808, 0x905, 0x808, 0x905, 0x808, 0x905, 0x76d, 0x85e, 0x76d, +0x85e, 0x5ba, 0x698, 0x5ba, 0x698, 0x502, 0x5ca, 0x502, 0x5ca, 0x2fa, 0x3ab, +0x2fa, 0x3ab, 0x29d, 0x337, 0x29d, 0x337, 0x2fb, 0x37e, 0x2fb, 0x37e, 0x2fb, +0x37e, 0x34d, 0x3bc, 0x34d, 0x3bc, 0x442, 0x4a1, 0x442, 0x4a1, 0x4e8, 0x53a, +0x4e8, 0x53a, 0x602, 0x64e, 0x602, 0x64e, 0x688, 0x6d3, 0x688, 0x6d3, 0x688, +0x6d3, 0x7a1, 0x7f0, 0x7a1, 0x7f0, 0x7d1, 0x828, 0x7d1, 0x828, 0x8f5, 0x959, +0x8f5, 0x959, 0x961, 0x9d6, 0x961, 0x9d6, 0xa4f, 0xad7, 0xa4f, 0xad7, 0xa55, +0xaef, 0xa55, 0xaef, 0xa55, 0xaef, 0xa11, 0xabe, 0xa11, 0xabe, 0x967, 0xa25, +0x967, 0xa25, 0x8aa, 0x977, 0x8aa, 0x977, 0x87c, 0x953, 0x87c, 0x953, 0x890, +0x96b, 0x890, 0x96b, 0x995, 0xa70, 0x995, 0xa70, 0x995, 0xa70, 0x8b1, 0x984, +0x8b1, 0x984, 0x838, 0x8ff, 0x838, 0x8ff, 0x892, 0x947, 0x892, 0x947, 0x9bb, +0xa59, 0x9bb, 0xa59, 0xb21, 0xba4, 0xb21, 0xba4, 0xb21, 0xba4, 0xc09, 0xc6f, +0xc09, 0xc6f, 0xaab, 0xaf3, 0xaab, 0xaf3, 0xb78, 0xba2, 0xb78, 0xba2, 0xb45, +0xb54, 0xb45, 0xb54, 0xa85, 0xa7d, 0xa85, 0xa7d, 0x96e, 0x954, 0x96e, 0x954, +0x96e, 0x954, 0x6fb, 0x6d7, 0x6fb, 0x6d7, 0x6b0, 0x689, 0x6b0, 0x689, 0x4b7, +0x495, 0x4b7, 0x495, 0x2ef, 0x2dd, 0x2ef, 0x2dd, 0xcd, 0xd3, 0xcd, 0xd3, +0xfe01, 0xfe28, 0xfe01, 0xfe28, 0xfe01, 0xfe28, 0xfb3a, 0xfb8a, 0xfb3a, 0xfb8a, 0xfaa5, +0xfb23, 0xfaa5, 0xfb23, 0xf786, 0xf839, 0xf786, 0xf839, 0xf3f6, 0xf4e0, 0xf3f6, 0xf4e0, +0xf1f7, 0xf318, 0xf1f7, 0xf318, 0xf1f7, 0xf318, 0xf02d, 0xf184, 0xf02d, 0xf184, 0xee7e, +0xf008, 0xee7e, 0xf008, 0xeaf4, 0xeca9, 0xeaf4, 0xeca9, 0xe8a2, 0xea7b, 0xe8a2, 0xea7b, +0xe655, 0xe846, 0xe655, 0xe846, 0xe4f5, 0xe6f3, 0xe4f5, 0xe6f3, 0xe4f5, 0xe6f3, 0xe512, +0xe70f, 0xe512, 0xe70f, 0xe53d, 0xe72b, 0xe53d, 0xe72b, 0xe506, 0xe6d7, 0xe506, 0xe6d7, +0xe6b2, 0xe858, 0xe6b2, 0xe858, 0xe777, 0xe8e4, 0xe777, 0xe8e4, 0xe82b, 0xe953, 0xe82b, +0xe953, 0xe82b, 0xe953, 0xe9e5, 0xeabd, 0xe9e5, 0xeabd, 0xeb93, 0xec12, 0xeb93, 0xec12, +0xeca4, 0xecc3, 0xeca4, 0xecc3, 0xee61, 0xee1c, 0xee61, 0xee1c, 0xefcf, 0xef24, 0xefcf, +0xef24, 0xefcf, 0xef24, 0xf087, 0xef77, 0xf087, 0xef77, 0xf310, 0xf19d, 0xf310, 0xf19d, +0xf610, 0xf440, 0xf610, 0xf440, 0xfa2e, 0xf808, 0xfa2e, 0xf808, 0xfd04, 0xfa90, 0xfd04, +0xfa90, 0x146, 0xfe8e, 0x146, 0xfe8e, 0x146, 0xfe8e, 0x3b4, 0xc1, 0x3b4, 0xc1, +0x532, 0x20f, 0x532, 0x20f, 0x963, 0x61a, 0x963, 0x61a, 0xc87, 0x921, 0xc87, +0x921, 0xeac, 0xb31, 0xeac, 0xb31, 0xeac, 0xb31, 0x11f0, 0xe65, 0x11f0, 0xe65, +0x1390, 0xffb, 0x1390, 0xffb, 0x14c1, 0x1125, 0x14c1, 0x1125, 0x16b7, 0x1313, 0x16b7, +0x1313, 0x17b2, 0x1406, 0x17b2, 0x1406, 0x198d, 0x15d5, 0x198d, 0x15d5, 0x198d, 0x15d5, +0x19e7, 0x161f, 0x19e7, 0x161f, 0x1b2b, 0x174d, 0x1b2b, 0x174d, 0x1c69, 0x1870, 0x1c69, +0x1870, 0x1df2, 0x19d6, 0x1df2, 0x19d6, 0x1fb6, 0x1b73, 0x1fb6, 0x1b73, 0x229a, 0x1e28, +0x229a, 0x1e28, 0x229a, 0x1e28, 0x2458, 0x1fb4, 0x2458, 0x1fb4, 0x26ec, 0x2213, 0x26ec, +0x2213, 0x2ad7, 0x25c7, 0x2ad7, 0x25c7, 0x2d40, 0x27fb, 0x2d40, 0x27fb, 0x30a4, 0x2b2f, +0x30a4, 0x2b2f, 0x30a4, 0x2b2f, 0x31dc, 0x2c3d, 0x31dc, 0x2c3d, 0x33a1, 0x2de2, 0x33a1, +0x2de2, 0x3441, 0x2e6d, 0x3441, 0x2e6d, 0x349c, 0x2ec2, 0x349c, 0x2ec2, 0x3487, 0x2eb5, +0x3487, 0x2eb5, 0x3273, 0x2cbb, 0x3273, 0x2cbb, 0x3273, 0x2cbb, 0x3099, 0x2b0e, 0x3099, +0x2b0e, 0x2f87, 0x2a3b, 0x2f87, 0x2a3b, 0x2cc5, 0x27cb, 0x2cc5, 0x27cb, 0x298f, 0x24f7, +0x298f, 0x24f7, 0x270a, 0x22e6, 0x270a, 0x22e6, 0x244a, 0x20a8, 0x244a, 0x20a8, 0x244a, +0x20a8, 0x2140, 0x1e2b, 0x2140, 0x1e2b, 0x1e68, 0x1bea, 0x1e68, 0x1bea, 0x1bc8, 0x19e6, +0x1bc8, 0x19e6, 0x1783, 0x1640, 0x1783, 0x1640, 0x1516, 0x1472, 0x1516, 0x1472, 0x1516, +0x1472, 0x1153, 0x1149, 0x1153, 0x1149, 0xda8, 0xe31, 0xda8, 0xe31, 0x9fe, 0xb10, +0x9fe, 0xb10, 0x7d3, 0x961, 0x7d3, 0x961, 0x5c3, 0x7c0, 0x5c3, 0x7c0, 0x2c9, +0x524, 0x2c9, 0x524, 0x2c9, 0x524, 0x189, 0x432, 0x189, 0x432, 0xffa5, 0x28a, +0xffa5, 0x28a, 0xfe37, 0x148, 0xfe37, 0x148, 0xfc5a, 0xff88, 0xfc5a, 0xff88, 0xfaf3, +0xfe2e, 0xfaf3, 0xfe2e, 0xf80f, 0xfb4c, 0xf80f, 0xfb4c, 0xf80f, 0xfb4c, 0xf543, 0xf876, +0xf543, 0xf876, 0xf271, 0xf593, 0xf271, 0xf593, 0xef23, 0xf22e, 0xef23, 0xf22e, 0xed22, +0xf014, 0xed22, 0xf014, 0xecba, 0xef91, 0xecba, 0xef91, 0xecba, 0xef91, 0xeb6e, 0xee2c, +0xeb6e, 0xee2c, 0xeaba, 0xed62, 0xeaba, 0xed62, 0xeaa7, 0xed3e, 0xeaa7, 0xed3e, 0xea38, +0xecc2, 0xea38, 0xecc2, 0xeaf4, 0xed79, 0xeaf4, 0xed79, 0xebc7, 0xee4d, 0xebc7, 0xee4d, +0xebc7, 0xee4d, 0xec3d, 0xeec9, 0xec3d, 0xeec9, 0xeb04, 0xed9b, 0xeb04, 0xed9b, 0xeb50, +0xedf4, 0xeb50, 0xedf4, 0xea96, 0xed49, 0xea96, 0xed49, 0xe908, 0xebca, 0xe908, 0xebca, +0xe73b, 0xea08, 0xe73b, 0xea08, 0xe73b, 0xea08, 0xe50e, 0xe7e3, 0xe50e, 0xe7e3, 0xe3b6, +0xe68a, 0xe3b6, 0xe68a, 0xe33f, 0xe60a, 0xe33f, 0xe60a, 0xe2c2, 0xe579, 0xe2c2, 0xe579, +0xe238, 0xe4d0, 0xe238, 0xe4d0, 0xe238, 0xe4d0, 0xe1ff, 0xe46a, 0xe1ff, 0xe46a, 0xe232, +0xe464, 0xe232, 0xe464, 0xe340, 0xe52c, 0xe340, 0xe52c, 0xe4b4, 0xe64e, 0xe4b4, 0xe64e, +0xe74c, 0xe889, 0xe74c, 0xe889, 0xe9e8, 0xeac0, 0xe9e8, 0xeac0, 0xe9e8, 0xeac0, 0xee1e, +0xee8a, 0xee1e, 0xee8a, 0xf119, 0xf115, 0xf119, 0xf115, 0xf467, 0xf3f2, 0xf467, 0xf3f2, +0xf708, 0xf626, 0xf708, 0xf626, 0xf9d1, 0xf886, 0xf9d1, 0xf886, 0xfdbc, 0xfc10, 0xfdbc, +0xfc10, 0xfdbc, 0xfc10, 0x188, 0xff87, 0x188, 0xff87, 0x49b, 0x252, 0x49b, 0x252, +0x59d, 0x31e, 0x59d, 0x31e, 0x690, 0x3eb, 0x690, 0x3eb, 0x6f7, 0x440, 0x6f7, +0x440, 0x6f7, 0x440, 0x7c9, 0x513, 0x7c9, 0x513, 0x708, 0x467, 0x708, 0x467, +0x647, 0x3cd, 0x647, 0x3cd, 0x43d, 0x1fc, 0x43d, 0x1fc, 0x2f2, 0xf9, 0x2f2, +0xf9, 0x2c0, 0x11d, 0x2c0, 0x11d, 0x2c0, 0x11d, 0x1ce, 0x8b, 0x1ce, 0x8b, +0x30, 0xff57, 0x30, 0xff57, 0xfecb, 0xfe5f, 0xfecb, 0xfe5f, 0xfcd8, 0xfcdb, 0xfcd8, +0xfcdb, 0xfb2e, 0xfba0, 0xfb2e, 0xfba0, 0xfa63, 0xfb3f, 0xfa63, 0xfb3f, 0xfa63, 0xfb3f, +0xf7e7, 0xf927, 0xf7e7, 0xf927, 0xf710, 0xf8ac, 0xf710, 0xf8ac, 0xf579, 0xf764, 0xf579, +0xf764, 0xf51d, 0xf74e, 0xf51d, 0xf74e, 0xf3ac, 0xf615, 0xf3ac, 0xf615, 0xf3ac, 0xf615, +0xf27c, 0xf511, 0xf27c, 0xf511, 0xf21a, 0xf4ce, 0xf21a, 0xf4ce, 0xeffa, 0xf2c1, 0xeffa, +0xf2c1, 0xee41, 0xf111, 0xee41, 0xf111, 0xec41, 0xef10, 0xec41, 0xef10, 0xe908, 0xebd0, +0xe908, 0xebd0, 0xe908, 0xebd0, 0xe6cf, 0xe989, 0xe6cf, 0xe989, 0xe6f9, 0xe9a1, 0xe6f9, +0xe9a1, 0xe61b, 0xe8b0, 0xe61b, 0xe8b0, 0xe64a, 0xe8cd, 0xe64a, 0xe8cd, 0xe75d, 0xe9cd, +0xe75d, 0xe9cd, 0xe83a, 0xea9b, 0xe83a, 0xea9b, 0xe83a, 0xea9b, 0xe85f, 0xeab4, 0xe85f, +0xeab4, 0xea55, 0xeca3, 0xea55, 0xeca3, 0xebc7, 0xee12, 0xebc7, 0xee12, 0xed4a, 0xef96, +0xed4a, 0xef96, 0xee28, 0xf078, 0xee28, 0xf078, 0xee28, 0xf078, 0xee62, 0xf0b9, 0xee62, +0xf0b9, 0xef0e, 0xf16b, 0xef0e, 0xf16b, 0xee24, 0xf087, 0xee24, 0xf087, 0xeded, 0xf054, +0xeded, 0xf054, 0xec77, 0xeedf, 0xec77, 0xeedf, 0xec1b, 0xee7d, 0xec1b, 0xee7d, 0xec1b, +0xee7d, 0xec05, 0xee5b, 0xec05, 0xee5b, 0xec6c, 0xeeab, 0xec6c, 0xeeab, 0xec2c, 0xee4c, +0xec2c, 0xee4c, 0xec68, 0xee5e, 0xec68, 0xee5e, 0xeda1, 0xef61, 0xeda1, 0xef61, 0xef19, +0xf09a, 0xef19, 0xf09a, 0xef19, 0xf09a, 0xf190, 0xf2c8, 0xf190, 0xf2c8, 0xf44e, 0xf533, +0xf44e, 0xf533, 0xf745, 0xf7cf, 0xf745, 0xf7cf, 0xf9ca, 0xf9f3, 0xf9ca, 0xf9f3, 0xfd33, +0xfcf8, 0xfd33, 0xfcf8, 0xfd33, 0xfcf8, 0xffc2, 0xff22, 0xffc2, 0xff22, 0x1c4, 0xbe, +0x1c4, 0xbe, 0x3c2, 0x25b, 0x3c2, 0x25b, 0x610, 0x44e, 0x610, 0x44e, 0x802, +0x5ed, 0x802, 0x5ed, 0x941, 0x6e4, 0x941, 0x6e4, 0x941, 0x6e4, 0x945, 0x6ac, +0x945, 0x6ac, 0xa25, 0x75f, 0xa25, 0x75f, 0xb15, 0x82f, 0xb15, 0x82f, 0xbc7, +0x8d3, 0xbc7, 0x8d3, 0xc50, 0x95e, 0xc50, 0x95e, 0xc50, 0x95e, 0xbc6, 0x8e5, +0xbc6, 0x8e5, 0xb50, 0x88f, 0xb50, 0x88f, 0xb24, 0x891, 0xb24, 0x891, 0xb3e, +0x8e5, 0xb3e, 0x8e5, 0xa80, 0x86d, 0xa80, 0x86d, 0xa19, 0x854, 0xa19, 0x854, +0xa19, 0x854, 0x857, 0x6e6, 0x857, 0x6e6, 0x6c0, 0x5a7, 0x6c0, 0x5a7, 0x51f, +0x461, 0x51f, 0x461, 0x3d0, 0x36c, 0x3d0, 0x36c, 0x1be, 0x1b1, 0x1be, 0x1b1, +0xffe9, 0x30, 0xffe9, 0x30, 0xffe9, 0x30, 0xfed7, 0xff6b, 0xfed7, 0xff6b, 0xfd77, +0xfe52, 0xfd77, 0xfe52, 0xfd55, 0xfe6f, 0xfd55, 0xfe6f, 0xfca5, 0xfdf6, 0xfca5, 0xfdf6, +0xfb78, 0xfcf8, 0xfb78, 0xfcf8, 0xfb78, 0xfcf8, 0xfa00, 0xfba5, 0xfa00, 0xfba5, 0xf8c4, +0xfa87, 0xf8c4, 0xfa87, 0xf624, 0xf7fd, 0xf624, 0xf7fd, 0xf48b, 0xf674, 0xf48b, 0xf674, +0xf440, 0xf633, 0xf440, 0xf633, 0xf47c, 0xf674, 0xf47c, 0xf674, 0xf47c, 0xf674, 0xf4e4, +0xf6dd, 0xf4e4, 0xf6dd, 0xf624, 0xf81b, 0xf624, 0xf81b, 0xf75e, 0xf950, 0xf75e, 0xf950, +0xf8a7, 0xfa93, 0xf8a7, 0xfa93, 0xfa83, 0xfc67, 0xfa83, 0xfc67, 0xfc2d, 0xfe07, 0xfc2d, +0xfe07, 0xfc2d, 0xfe07, 0xfd9f, 0xff6f, 0xfd9f, 0xff6f, 0xfe98, 0x5c, 0xfe98, 0x5c, +0x26, 0x1dc, 0x26, 0x1dc, 0xffeb, 0x190, 0xffeb, 0x190, 0x15, 0x1a5, 0x15, +0x1a5, 0x15, 0x1a5, 0xff8d, 0x105, 0xff8d, 0x105, 0x10, 0x16b, 0x10, 0x16b, +0xe6, 0x21e, 0xe6, 0x21e, 0x1d9, 0x2e8, 0x1d9, 0x2e8, 0x324, 0x404, 0x324, +0x404, 0x347, 0x3f0, 0x347, 0x3f0, 0x347, 0x3f0, 0x3a8, 0x415, 0x3a8, 0x415, +0x46d, 0x496, 0x46d, 0x496, 0x5d8, 0x5b8, 0x5d8, 0x5b8, 0x75e, 0x6ef, 0x75e, +0x6ef, 0xa92, 0x9d1, 0xa92, 0x9d1, 0xcf1, 0xbda, 0xcf1, 0xbda, 0xcf1, 0xbda, +0xf69, 0xdfb, 0xf69, 0xdfb, 0x112c, 0xf68, 0x112c, 0xf68, 0x12c7, 0x10b0, 0x12c7, +0x10b0, 0x142d, 0x11c6, 0x142d, 0x11c6, 0x15ce, 0x131d, 0x15ce, 0x131d, 0x15ce, 0x131d, +0x1658, 0x1366, 0x1658, 0x1366, 0x16e9, 0x13be, 0x16e9, 0x13be, 0x17ad, 0x1455, 0x17ad, +0x1455, 0x166e, 0x12f4, 0x166e, 0x12f4, 0x16f5, 0x1366, 0x16f5, 0x1366, 0x1642, 0x12ab, +0x1642, 0x12ab, 0x1642, 0x12ab, 0x1633, 0x12a3, 0x1633, 0x12a3, 0x164e, 0x12d2, 0x164e, +0x12d2, 0x15cd, 0x1273, 0x15cd, 0x1273, 0x1578, 0x124b, 0x1578, 0x124b, 0x1594, 0x129f, +0x1594, 0x129f, 0x1513, 0x1262, 0x1513, 0x1262, 0x1513, 0x1262, 0x139d, 0x1137, 0x139d, +0x1137, 0x1224, 0x1011, 0x1224, 0x1011, 0x1190, 0xfd6, 0x1190, 0xfd6, 0x1143, 0xfe5, +0x1143, 0xfe5, 0xfda, 0xedb, 0xfda, 0xedb, 0xfda, 0xedb, 0xe70, 0xdd1, 0xe70, +0xdd1, 0xcb0, 0xc71, 0xcb0, 0xc71, 0xc05, 0xc24, 0xc05, 0xc24, 0xaf8, 0xb72, +0xaf8, 0xb72, 0xa55, 0xb29, 0xa55, 0xb29, 0x8f3, 0xa1d, 0x8f3, 0xa1d, 0x8f3, +0xa1d, 0x7f4, 0x970, 0x7f4, 0x970, 0x67a, 0x844, 0x67a, 0x844, 0x3f2, 0x607, +0x3f2, 0x607, 0xb3, 0x310, 0xb3, 0x310, 0xfc6a, 0xff0b, 0xfc6a, 0xff0b, 0xf8b2, +0xfb95, 0xf8b2, 0xfb95, 0xf8b2, 0xfb95, 0xf53c, 0xf85d, 0xf53c, 0xf85d, 0xf307, 0xf664, +0xf307, 0xf664, 0xf05b, 0xf3f2, 0xf05b, 0xf3f2, 0xeddf, 0xf1ae, 0xeddf, 0xf1ae, 0xec7f, +0xf082, 0xec7f, 0xf082, 0xec7f, 0xf082, 0xec7a, 0xf0ad, 0xec7a, 0xf0ad, 0xeba2, 0xf002, +0xeba2, 0xf002, 0xeb07, 0xef8d, 0xeb07, 0xef8d, 0xea1b, 0xeec3, 0xea1b, 0xeec3, 0xe8b9, +0xed7a, 0xe8b9, 0xed7a, 0xe773, 0xec45, 0xe773, 0xec45, 0xe773, 0xec45, 0xe535, 0xea0e, +0xe535, 0xea0e, 0xe2ec, 0xe7c0, 0xe2ec, 0xe7c0, 0xe0e6, 0xe5aa, 0xe0e6, 0xe5aa, 0xdff4, +0xe49a, 0xdff4, 0xe49a, 0xdf29, 0xe3a3, 0xdf29, 0xe3a3, 0xdebe, 0xe2fd, 0xdebe, 0xe2fd, +0xdebe, 0xe2fd, 0xde66, 0xe25d, 0xde66, 0xe25d, 0xddfe, 0xe19c, 0xddfe, 0xe19c, 0xdd85, +0xe0be, 0xdd85, 0xe0be, 0xdeef, 0xe1b6, 0xdeef, 0xe1b6, 0xe034, 0xe27d, 0xe034, 0xe27d, +0xe034, 0xe27d, 0xe175, 0xe335, 0xe175, 0xe335, 0xe4ef, 0xe61f, 0xe4ef, 0xe61f, 0xe990, +0xea2a, 0xe990, 0xea2a, 0xee3e, 0xee40, 0xee3e, 0xee40, 0xf2ce, 0xf236, 0xf2ce, 0xf236, +0xf6da, 0xf5ab, 0xf6da, 0xf5ab, 0xf6da, 0xf5ab, 0xfa43, 0xf881, 0xfa43, 0xf881, 0xfe4d, +0xfc00, 0xfe4d, 0xfc00, 0x309, 0x39, 0x309, 0x39, 0x7a1, 0x45b, 0x7a1, 0x45b, +0xa3e, 0x68e, 0xa3e, 0x68e, 0xca0, 0x895, 0xca0, 0x895, 0xca0, 0x895, 0xe70, +0xa18, 0xe70, 0xa18, 0x100d, 0xb78, 0x100d, 0xb78, 0x112d, 0xc6b, 0x112d, 0xc6b, +0x132c, 0xe4a, 0x132c, 0xe4a, 0x146a, 0xf78, 0x146a, 0xf78, 0x146a, 0xf78, 0x14ec, +0xff6, 0x14ec, 0xff6, 0x16a6, 0x11b5, 0x16a6, 0x11b5, 0x176f, 0x128e, 0x176f, 0x128e, +0x1879, 0x13af, 0x1879, 0x13af, 0x18f0, 0x1442, 0x18f0, 0x1442, 0x19d2, 0x1543, 0x19d2, +0x1543, 0x19d2, 0x1543, 0x1a70, 0x1602, 0x1a70, 0x1602, 0x1b49, 0x16fa, 0x1b49, 0x16fa, +0x1b90, 0x175f, 0x1b90, 0x175f, 0x1b34, 0x171f, 0x1b34, 0x171f, 0x1bad, 0x17b0, 0x1bad, +0x17b0, 0x1cc9, 0x18e1, 0x1cc9, 0x18e1, 0x1cc9, 0x18e1, 0x1e34, 0x1a5c, 0x1e34, 0x1a5c, +0x1f67, 0x1b9c, 0x1f67, 0x1b9c, 0x1f9b, 0x1bdc, 0x1f9b, 0x1bdc, 0x2042, 0x1c8d, 0x2042, +0x1c8d, 0x2077, 0x1ccb, 0x2077, 0x1ccb, 0x2077, 0x1ccb, 0x1fd4, 0x1c33, 0x1fd4, 0x1c33, +0x2016, 0x1c84, 0x2016, 0x1c84, 0x1df7, 0x1a79, 0x1df7, 0x1a79, 0x1c59, 0x18f4, 0x1c59, +0x18f4, 0x1b85, 0x1841, 0x1b85, 0x1841, 0x1b37, 0x181c, 0x1b37, 0x181c, 0x1b37, 0x181c, +0x1a2d, 0x1745, 0x1a2d, 0x1745, 0x1942, 0x1696, 0x1942, 0x1696, 0x18bc, 0x1654, 0x18bc, +0x1654, 0x1844, 0x162a, 0x1844, 0x162a, 0x1854, 0x168f, 0x1854, 0x168f, 0x1854, 0x168f, +0x17ea, 0x1682, 0x17ea, 0x1682, 0x17ed, 0x16e5, 0x17ed, 0x16e5, 0x16b3, 0x160c, 0x16b3, +0x160c, 0x165e, 0x1619, 0x165e, 0x1619, 0x1402, 0x141e, 0x1402, 0x141e, 0x10b9, 0x112f, +0x10b9, 0x112f, 0x10b9, 0x112f, 0xe33, 0xefb, 0xe33, 0xefb, 0xbb7, 0xcc8, 0xbb7, +0xcc8, 0x9bd, 0xb0a, 0x9bd, 0xb0a, 0x816, 0x992, 0x816, 0x992, 0x606, 0x7a1, +0x606, 0x7a1, 0x377, 0x521, 0x377, 0x521, 0x377, 0x521, 0x252, 0x3fa, 0x252, +0x3fa, 0x1d1, 0x367, 0x1d1, 0x367, 0x20b, 0x380, 0x20b, 0x380, 0x2be, 0x404, +0x2be, 0x404, 0x373, 0x47e, 0x373, 0x47e, 0x373, 0x47e, 0x40d, 0x4d3, 0x40d, +0x4d3, 0x564, 0x5de, 0x564, 0x5de, 0x663, 0x68d, 0x663, 0x68d, 0x798, 0x771, +0x798, 0x771, 0x82b, 0x7b4, 0x82b, 0x7b4, 0x9c8, 0x907, 0x9c8, 0x907, 0x9c8, +0x907, 0xa45, 0x942, 0xa45, 0x942, 0x924, 0x7ea, 0x924, 0x7ea, 0x94f, 0x7ea, +0x94f, 0x7ea, 0x815, 0x694, 0x815, 0x694, 0x724, 0x597, 0x724, 0x597, 0x5b5, +0x42c, 0x5b5, 0x42c, 0x5b5, 0x42c, 0x4e5, 0x370, 0x4e5, 0x370, 0x3cf, 0x27e, +0x3cf, 0x27e, 0x16a, 0x4a, 0x16a, 0x4a, 0xfed7, 0xfdf6, 0xfed7, 0xfdf6, 0xfbda, +0xfb42, 0xfbda, 0xfb42, 0xfbda, 0xfb42, 0xf998, 0xf950, 0xf998, 0xf950, 0xf810, 0xf81e, +0xf810, 0xf81e, 0xf58c, 0xf5f1, 0xf58c, 0xf5f1, 0xf30c, 0xf3c7, 0xf30c, 0xf3c7, 0xf126, +0xf233, 0xf126, 0xf233, 0xeedf, 0xf037, 0xeedf, 0xf037, 0xeedf, 0xf037, 0xed40, 0xeedb, +0xed40, 0xeedb, 0xebc9, 0xed9c, 0xebc9, 0xed9c, 0xea34, 0xec31, 0xea34, 0xec31, 0xe8f4, +0xeb0f, 0xe8f4, 0xeb0f, 0xe95f, 0xeb88, 0xe95f, 0xeb88, 0xea47, 0xec72, 0xea47, 0xec72, +0xea47, 0xec72, 0xeb7d, 0xed9d, 0xeb7d, 0xed9d, 0xeb86, 0xed8f, 0xeb86, 0xed8f, 0xeaa3, +0xec8c, 0xeaa3, 0xec8c, 0xeafa, 0xecba, 0xeafa, 0xecba, 0xeb34, 0xecc6, 0xeb34, 0xecc6, +0xeb34, 0xecc6, 0xeb5f, 0xecc1, 0xeb5f, 0xecc1, 0xec3c, 0xed6d, 0xec3c, 0xed6d, 0xecf7, +0xedfb, 0xecf7, 0xedfb, 0xedfe, 0xeed9, 0xedfe, 0xeed9, 0xeff7, 0xf0b1, 0xeff7, 0xf0b1, +0xf20d, 0xf2af, 0xf20d, 0xf2af, 0xf20d, 0xf2af, 0xf421, 0xf4b5, 0xf421, 0xf4b5, 0xf5ee, +0xf681, 0xf5ee, 0xf681, 0xf89e, 0xf93b, 0xf89e, 0xf93b, 0xfa24, 0xfad7, 0xfa24, 0xfad7, +0xfab1, 0xfb84, 0xfab1, 0xfb84, 0xfada, 0xfbd7, 0xfada, 0xfbd7, 0xfada, 0xfbd7, 0xf9bd, +0xfaec, 0xf9bd, 0xfaec, 0xf883, 0xf9eb, 0xf883, 0xf9eb, 0xf7c0, 0xf965, 0xf7c0, 0xf965, +0xf6a4, 0xf885, 0xf6a4, 0xf885, 0xf4f6, 0xf713, 0xf4f6, 0xf713, 0xf4f6, 0xf713, 0xf3b3, +0xf608, 0xf3b3, 0xf608, 0xf321, 0xf5a7, 0xf321, 0xf5a7, 0xf299, 0xf547, 0xf299, 0xf547, +0xf19d, 0xf469, 0xf19d, 0xf469, 0xf17d, 0xf45c, 0xf17d, 0xf45c, 0xf0aa, 0xf38e, 0xf0aa, +0xf38e, 0xf0aa, 0xf38e, 0xf0df, 0xf3bb, 0xf0df, 0xf3bb, 0xf1cc, 0xf492, 0xf1cc, 0xf492, +0xf238, 0xf4dc, 0xf238, 0xf4dc, 0xf2e2, 0xf559, 0xf2e2, 0xf559, 0xf413, 0xf655, 0xf413, +0xf655, 0xf585, 0xf789, 0xf585, 0xf789, 0xf585, 0xf789, 0xf6be, 0xf87f, 0xf6be, 0xf87f, +0xf8b2, 0xfa2e, 0xf8b2, 0xfa2e, 0xfa36, 0xfb6d, 0xfa36, 0xfb6d, 0xfae2, 0xfbd8, 0xfae2, +0xfbd8, 0xfaeb, 0xfba6, 0xfaeb, 0xfba6, 0xfaeb, 0xfba6, 0xfbaa, 0xfc31, 0xfbaa, 0xfc31, +0xfbe5, 0xfc42, 0xfbe5, 0xfc42, 0xfbe2, 0xfc22, 0xfbe2, 0xfc22, 0xfb5b, 0xfb8b, 0xfb5b, +0xfb8b, 0xfaf0, 0xfb1e, 0xfaf0, 0xfb1e, 0xfb71, 0xfbaa, 0xfb71, 0xfbaa, 0xfb71, 0xfbaa, +0xfbd4, 0xfc26, 0xfbd4, 0xfc26, 0xfaa0, 0xfb18, 0xfaa0, 0xfb18, 0xf83e, 0xf8e8, 0xf83e, +0xf8e8, 0xf73b, 0xf81f, 0xf73b, 0xf81f, 0xf648, 0xf76e, 0xf648, 0xf76e, 0xf5f2, 0xf75f, +0xf5f2, 0xf75f, 0xf5f2, 0xf75f, 0xf500, 0xf6b5, 0xf500, 0xf6b5, 0xf2f6, 0xf4f2, 0xf2f6, +0xf4f2, 0xf122, 0xf363, 0xf122, 0xf363, 0xf003, 0xf282, 0xf003, 0xf282, 0xef1e, 0xf1d3, +0xef1e, 0xf1d3, 0xef1e, 0xf1d3, 0xef0c, 0xf1ed, 0xef0c, 0xf1ed, 0xeeab, 0xf1ac, 0xeeab, +0xf1ac, 0xeed0, 0xf1e3, 0xeed0, 0xf1e3, 0xefe7, 0xf2fe, 0xefe7, 0xf2fe, 0xf011, 0xf31f, +0xf011, 0xf31f, 0xefd5, 0xf2cc, 0xefd5, 0xf2cc, 0xefd5, 0xf2cc, 0xee2c, 0xf0ff, 0xee2c, +0xf0ff, 0xed87, 0xf02a, 0xed87, 0xf02a, 0xecbb, 0xef25, 0xecbb, 0xef25, 0xec50, 0xee77, +0xec50, 0xee77, 0xec5a, 0xee38, 0xec5a, 0xee38, 0xec0d, 0xed9e, 0xec0d, 0xed9e, 0xec0d, +0xed9e, 0xedd8, 0xef1a, 0xedd8, 0xef1a, 0xf097, 0xf18b, 0xf097, 0xf18b, 0xf344, 0xf3ec, +0xf344, 0xf3ec, 0xf5c1, 0xf621, 0xf5c1, 0xf621, 0xf814, 0xf830, 0xf814, 0xf830, 0xf814, +0xf830, 0xf9f2, 0xf9d3, 0xf9f2, 0xf9d3, 0xfbd3, 0xfb7f, 0xfbd3, 0xfb7f, 0xfda6, 0xfd26, +0xfda6, 0xfd26, 0xfe60, 0xfdbb, 0xfe60, 0xfdbb, 0xfe45, 0xfd84, 0xfe45, 0xfd84, 0xfeb9, +0xfde3, 0xfeb9, 0xfde3, 0xfeb9, 0xfde3, 0xff3b, 0xfe56, 0xff3b, 0xfe56, 0xffc8, 0xfed8, +0xffc8, 0xfed8, 0xff89, 0xfe93, 0xff89, 0xfe93, 0xff1a, 0xfe20, 0xff1a, 0xfe20, 0xfe58, +0xfd5c, 0xfe58, 0xfd5c, 0xfd2c, 0xfc2e, 0xfd2c, 0xfc2e, 0xfd2c, 0xfc2e, 0xfd29, 0xfc26, +0xfd29, 0xfc26, 0xfc60, 0xfb57, 0xfc60, 0xfb57, 0xfc64, 0xfb52, 0xfc64, 0xfb52, 0xfe54, +0xfd35, 0xfe54, 0xfd35, 0xff7a, 0xfe49, 0xff7a, 0xfe49, 0xff7a, 0xfe49, 0xfffc, 0xfeb6, +0xfffc, 0xfeb6, 0x162, 0x3, 0x162, 0x3, 0x2df, 0x164, 0x2df, 0x164, 0x4ce, +0x335, 0x4ce, 0x335, 0x6df, 0x527, 0x6df, 0x527, 0x8d8, 0x701, 0x8d8, 0x701, +0x8d8, 0x701, 0xa2a, 0x835, 0xa2a, 0x835, 0xa53, 0x842, 0xa53, 0x842, 0xabf, +0x895, 0xabf, 0x895, 0xa7a, 0x83c, 0xa7a, 0x83c, 0xab9, 0x86d, 0xab9, 0x86d, +0xab9, 0x86d, 0xb6d, 0x919, 0xb6d, 0x919, 0xaed, 0x898, 0xaed, 0x898, 0xab9, +0x869, 0xab9, 0x869, 0xa35, 0x7f2, 0xa35, 0x7f2, 0x991, 0x761, 0x991, 0x761, +0x93c, 0x726, 0x93c, 0x726, 0x93c, 0x726, 0x8cd, 0x6d6, 0x8cd, 0x6d6, 0x864, +0x690, 0x864, 0x690, 0x726, 0x578, 0x726, 0x578, 0x6a5, 0x521, 0x6a5, 0x521, +0x5ea, 0x490, 0x5ea, 0x490, 0x4bd, 0x38d, 0x4bd, 0x38d, 0x4bd, 0x38d, 0x383, +0x27c, 0x383, 0x27c, 0x235, 0x154, 0x235, 0x154, 0x229, 0x16b, 0x229, 0x16b, +0x243, 0x1a5, 0x243, 0x1a5, 0x280, 0x1fe, 0x280, 0x1fe, 0x280, 0x1fe, 0x242, +0x1d6, 0x242, 0x1d6, 0x1d1, 0x177, 0x1d1, 0x177, 0x12c, 0xe0, 0x12c, 0xe0, +0x12, 0xffcf, 0x12, 0xffcf, 0xff34, 0xfef7, 0xff34, 0xfef7, 0xfe22, 0xfde8, 0xfe22, +0xfde8, 0xfe22, 0xfde8, 0xfd22, 0xfce8, 0xfd22, 0xfce8, 0xfc23, 0xfbe9, 0xfc23, 0xfbe9, +0xfacd, 0xfa91, 0xfacd, 0xfa91, 0xfa81, 0xfa43, 0xfa81, 0xfa43, 0xfa5f, 0xfa1f, 0xfa5f, +0xfa1f, 0xfaa4, 0xfa62, 0xfaa4, 0xfa62, 0xfaa4, 0xfa62, 0xfc7c, 0xfc3b, 0xfc7c, 0xfc3b, +0xfe52, 0xfe12, 0xfe52, 0xfe12, 0xac, 0x6f, 0xac, 0x6f, 0x2e3, 0x2aa, 0x2e3, +0x2aa, 0x483, 0x44f, 0x483, 0x44f, 0x483, 0x44f, 0x5a9, 0x57b, 0x5a9, 0x57b, +0x6af, 0x686, 0x6af, 0x686, 0x789, 0x766, 0x789, 0x766, 0x824, 0x805, 0x824, +0x805, 0x898, 0x87c, 0x898, 0x87c, 0x932, 0x918, 0x932, 0x918, 0x932, 0x918, +0x9e1, 0x9c6, 0x9e1, 0x9c6, 0x959, 0x93b, 0x959, 0x93b, 0x9e6, 0x9c5, 0x9e6, +0x9c5, 0xa8b, 0xa63, 0xa8b, 0xa63, 0xa49, 0xa1a, 0xa49, 0xa1a, 0xa6c, 0xa35, +0xa6c, 0xa35, 0xa6c, 0xa35, 0xb5e, 0xb1e, 0xb5e, 0xb1e, 0xcad, 0xc67, 0xcad, +0xc67, 0xc77, 0xc2c, 0xc77, 0xc2c, 0xd20, 0xcd4, 0xd20, 0xcd4, 0xe46, 0xdfd, +0xe46, 0xdfd, 0xe46, 0xdfd, 0xe82, 0xe40, 0xe82, 0xe40, 0xf1f, 0xeec, 0xf1f, +0xeec, 0xebf, 0xea1, 0xebf, 0xea1, 0xdbd, 0xdbb, 0xdbd, 0xdbb, 0xd1e, 0xd40, +0xd1e, 0xd40, 0xce5, 0xd32, 0xce5, 0xd32, 0xce5, 0xd32, 0xbe7, 0xc66, 0xbe7, +0xc66, 0xa45, 0xafc, 0xa45, 0xafc, 0x8a1, 0x994, 0x8a1, 0x994, 0x5a6, 0x6da, +0x5a6, 0x6da, 0x2de, 0x456, 0x2de, 0x456, 0xff56, 0x112, 0xff56, 0x112, 0xff56, +0x112, 0xfb44, 0xfd42, 0xfb44, 0xfd42, 0xf7d5, 0xfa12, 0xf7d5, 0xfa12, 0xf46b, 0xf6e1, +0xf46b, 0xf6e1, 0xf32e, 0xf5d7, 0xf32e, 0xf5d7, 0xf162, 0xf435, 0xf162, 0xf435, 0xf162, +0xf435, 0xeedb, 0xf1cc, 0xeedb, 0xf1cc, 0xed73, 0xf079, 0xed73, 0xf079, 0xeb82, 0xee8f, +0xeb82, 0xee8f, 0xea1b, 0xed23, 0xea1b, 0xed23, 0xe89d, 0xeb93, 0xe89d, 0xeb93, 0xe706, +0xe9de, 0xe706, 0xe9de, 0xe706, 0xe9de, 0xe6e1, 0xe98e, 0xe6e1, 0xe98e, 0xe75e, 0xe9d6, +0xe75e, 0xe9d6, 0xe8c8, 0xeb02, 0xe8c8, 0xeb02, 0xea58, 0xec4c, 0xea58, 0xec4c, 0xeae3, +0xec8b, 0xeae3, 0xec8b, 0xec77, 0xedd1, 0xec77, 0xedd1, 0xec77, 0xedd1, 0xee05, 0xef0e, +0xee05, 0xef0e, 0xeec4, 0xef7c, 0xeec4, 0xef7c, 0xefd1, 0xf03b, 0xefd1, 0xf03b, 0xf044, +0xf062, 0xf044, 0xf062, 0xf184, 0xf15c, 0xf184, 0xf15c, 0xf184, 0xf15c, 0xf36f, 0xf307, +0xf36f, 0xf307, 0xf5c5, 0xf522, 0xf5c5, 0xf522, 0xf8b4, 0xf7dd, 0xf8b4, 0xf7dd, 0xfbc2, +0xfabd, 0xfbc2, 0xfabd, 0xff15, 0xfde8, 0xff15, 0xfde8, 0x25f, 0x10c, 0x25f, 0x10c, +0x25f, 0x10c, 0x65d, 0x4ea, 0x65d, 0x4ea, 0x942, 0x7ae, 0x942, 0x7ae, 0xbc8, +0xa15, 0xbc8, 0xa15, 0xe58, 0xc82, 0xe58, 0xc82, 0x1055, 0xe5a, 0x1055, 0xe5a, +0x12bb, 0x1096, 0x12bb, 0x1096, 0x12bb, 0x1096, 0x13ea, 0x1194, 0x13ea, 0x1194, 0x158e, +0x1300, 0x158e, 0x1300, 0x176f, 0x14a1, 0x176f, 0x14a1, 0x18f1, 0x15db, 0x18f1, 0x15db, +0x1ae2, 0x177c, 0x1ae2, 0x177c, 0x1ae2, 0x177c, 0x1ce7, 0x192b, 0x1ce7, 0x192b, 0x1f2b, +0x1b12, 0x1f2b, 0x1b12, 0x20c9, 0x1c51, 0x20c9, 0x1c51, 0x22be, 0x1de4, 0x22be, 0x1de4, +0x2518, 0x1fde, 0x2518, 0x1fde, 0x274a, 0x21b3, 0x274a, 0x21b3, 0x274a, 0x21b3, 0x29e4, +0x23f7, 0x29e4, 0x23f7, 0x2c82, 0x2648, 0x2c82, 0x2648, 0x2ea7, 0x282c, 0x2ea7, 0x282c, +0x3170, 0x2ac4, 0x3170, 0x2ac4, 0x33ad, 0x2ce2, 0x33ad, 0x2ce2, 0x3431, 0x2d5a, 0x3431, +0x2d5a, 0x3431, 0x2d5a, 0x3501, 0x2e33, 0x3501, 0x2e33, 0x3512, 0x2e62, 0x3512, 0x2e62, +0x348c, 0x2e11, 0x348c, 0x2e11, 0x335c, 0x2d2c, 0x335c, 0x2d2c, 0x3128, 0x2b58, 0x3128, +0x2b58, 0x3128, 0x2b58, 0x2f62, 0x2a04, 0x2f62, 0x2a04, 0x2c8f, 0x27b6, 0x2c8f, 0x27b6, +0x2967, 0x2521, 0x2967, 0x2521, 0x2655, 0x22ad, 0x2655, 0x22ad, 0x2281, 0x1f7f, 0x2281, +0x1f7f, 0x1edf, 0x1c87, 0x1edf, 0x1c87, 0x1edf, 0x1c87, 0x1b85, 0x19d8, 0x1b85, 0x19d8, +0x185f, 0x1759, 0x185f, 0x1759, 0x14a5, 0x1440, 0x14a5, 0x1440, 0x10c0, 0x10f2, 0x10c0, +0x10f2, 0xcda, 0xd96, 0xcda, 0xd96, 0x87a, 0x9b0, 0x87a, 0x9b0, 0x87a, 0x9b0, +0x4f7, 0x696, 0x4f7, 0x696, 0x20f, 0x406, 0x20f, 0x406, 0xffbb, 0x1f7, 0xffbb, +0x1f7, 0xfe4e, 0xbd, 0xfe4e, 0xbd, 0xfd5b, 0xffeb, 0xfd5b, 0xffeb, 0xfd5b, 0xffeb, +0xfbed, 0xfe8d, 0xfbed, 0xfe8d, 0xf9e6, 0xfc88, 0xf9e6, 0xfc88, 0xf861, 0xfaf9, 0xf861, +0xfaf9, 0xf65a, 0xf8dd, 0xf65a, 0xf8dd, 0xf447, 0xf6ae, 0xf447, 0xf6ae, 0xf235, 0xf47d, +0xf235, 0xf47d, 0xf235, 0xf47d, 0xef40, 0xf166, 0xef40, 0xf166, 0xecb6, 0xeebb, 0xecb6, +0xeebb, 0xead6, 0xecbd, 0xead6, 0xecbd, 0xe9e0, 0xebaf, 0xe9e0, 0xebaf, 0xe9ff, 0xebbb, +0xe9ff, 0xebbb, 0xe9ff, 0xebbb, 0xea4c, 0xebfd, 0xea4c, 0xebfd, 0xeb27, 0xecd5, 0xeb27, +0xecd5, 0xec06, 0xedb8, 0xec06, 0xedb8, 0xec4a, 0xee05, 0xec4a, 0xee05, 0xeccb, 0xee96, +0xeccb, 0xee96, 0xec16, 0xedf4, 0xec16, 0xedf4, 0xec16, 0xedf4, 0xeb50, 0xed43, 0xeb50, +0xed43, 0xeb04, 0xed0a, 0xeb04, 0xed0a, 0xea00, 0xec17, 0xea00, 0xec17, 0xe998, 0xebba, +0xe998, 0xebba, 0xe8ee, 0xeb12, 0xe8ee, 0xeb12, 0xe8d4, 0xeaf1, 0xe8d4, 0xeaf1, 0xe8d4, +0xeaf1, 0xe8b5, 0xeabe, 0xe8b5, 0xeabe, 0xe743, 0xe92b, 0xe743, 0xe92b, 0xe6ff, 0xe8b7, +0xe6ff, 0xe8b7, 0xe75c, 0xe8d6, 0xe75c, 0xe8d6, 0xe808, 0xe935, 0xe808, 0xe935, 0xe808, +0xe935, 0xea1d, 0xeaf1, 0xea1d, 0xeaf1, 0xeba9, 0xec17, 0xeba9, 0xec17, 0xed6d, 0xed6d, +0xed6d, 0xed6d, 0xf041, 0xefcb, 0xf041, 0xefcb, 0xf30d, 0xf21d, 0xf30d, 0xf21d, 0xf696, +0xf52c, 0xf696, 0xf52c, 0xf696, 0xf52c, 0xfa6a, 0xf888, 0xfa6a, 0xf888, 0xfe7e, 0xfc2b, +0xfe7e, 0xfc2b, 0x1e3, 0xff2a, 0x1e3, 0xff2a, 0x51f, 0x20d, 0x51f, 0x20d, 0x7ef, +0x496, 0x7ef, 0x496, 0x9e1, 0x653, 0x9e1, 0x653, 0x9e1, 0x653, 0xbac, 0x7ff, +0xbac, 0x7ff, 0xbba, 0x805, 0xbba, 0x805, 0xc31, 0x88c, 0xc31, 0x88c, 0xb37, +0x7ba, 0xb37, 0x7ba, 0x973, 0x635, 0x973, 0x635, 0x973, 0x635, 0x8cd, 0x5e3, +0x8cd, 0x5e3, 0x679, 0x3f8, 0x679, 0x3f8, 0x497, 0x292, 0x497, 0x292, 0x27b, +0xff, 0x27b, 0xff, 0x57, 0xff70, 0x57, 0xff70, 0xfde4, 0xfd99, 0xfde4, 0xfd99, +0xfde4, 0xfd99, 0xfa91, 0xfae7, 0xfa91, 0xfae7, 0xf843, 0xf93a, 0xf843, 0xf93a, 0xf546, +0xf6da, 0xf546, 0xf6da, 0xf36c, 0xf597, 0xf36c, 0xf597, 0xf225, 0xf4dc, 0xf225, 0xf4dc, +0xef89, 0xf2c1, 0xef89, 0xf2c1, 0xef89, 0xf2c1, 0xeda3, 0xf14c, 0xeda3, 0xf14c, 0xeb59, +0xef64, 0xeb59, 0xef64, 0xe910, 0xed6b, 0xe910, 0xed6b, 0xe729, 0xebc2, 0xe729, 0xebc2, +0xe56a, 0xea31, 0xe56a, 0xea31, 0xe56a, 0xea31, 0xe458, 0xe93c, 0xe458, 0xe93c, 0xe2db, +0xe7ce, 0xe2db, 0xe7ce, 0xe111, 0xe604, 0xe111, 0xe604, 0xdef6, 0xe3df, 0xdef6, 0xe3df, +0xdd3f, 0xe213, 0xdd3f, 0xe213, 0xdc46, 0xe100, 0xdc46, 0xe100, 0xdc46, 0xe100, 0xdbf4, +0xe08f, 0xdbf4, 0xe08f, 0xdc1d, 0xe095, 0xdc1d, 0xe095, 0xdd01, 0xe157, 0xdd01, 0xe157, +0xdf1e, 0xe352, 0xdf1e, 0xe352, 0xe15f, 0xe574, 0xe15f, 0xe574, 0xe391, 0xe78c, 0xe391, +0xe78c, 0xe391, 0xe78c, 0xe56b, 0xe94e, 0xe56b, 0xe94e, 0xe74b, 0xeb1a, 0xe74b, 0xeb1a, +0xe89c, 0xec5c, 0xe89c, 0xec5c, 0xe9be, 0xed71, 0xe9be, 0xed71, 0xeb2a, 0xeed2, 0xeb2a, +0xeed2, 0xeb2a, 0xeed2, 0xeb7c, 0xef1a, 0xeb7c, 0xef1a, 0xeb44, 0xeed5, 0xeb44, 0xeed5, +0xeb35, 0xeeb7, 0xeb35, 0xeeb7, 0xebc4, 0xef31, 0xebc4, 0xef31, 0xec29, 0xef7b, 0xec29, +0xef7b, 0xec78, 0xefa8, 0xec78, 0xefa8, 0xec78, 0xefa8, 0xecfc, 0xefff, 0xecfc, 0xefff, +0xeddc, 0xf0a8, 0xeddc, 0xf0a8, 0xefa1, 0xf22b, 0xefa1, 0xf22b, 0xf0fc, 0xf339, 0xf0fc, +0xf339, 0xf284, 0xf469, 0xf284, 0xf469, 0xf4ce, 0xf651, 0xf4ce, 0xf651, 0xf4ce, 0xf651, +0xf78c, 0xf8a4, 0xf78c, 0xf8a4, 0xfb13, 0xfbb9, 0xfb13, 0xfbb9, 0xfdd2, 0xfe00, 0xfdd2, +0xfe00, 0x6d, 0x21, 0x6d, 0x21, 0x3bb, 0x2f4, 0x3bb, 0x2f4, 0x3bb, 0x2f4, +0x650, 0x511, 0x650, 0x511, 0x95f, 0x7ac, 0x95f, 0x7ac, 0xc46, 0xa28, 0xc46, +0xa28, 0xec4, 0xc44, 0xec4, 0xc44, 0x1089, 0xdb5, 0x1089, 0xdb5, 0x115a, 0xe3f, +0x115a, 0xe3f, 0x115a, 0xe3f, 0x123b, 0xeea, 0x123b, 0xeea, 0x1157, 0xde1, 0x1157, +0xde1, 0x10ed, 0xd65, 0x10ed, 0xd65, 0x10b8, 0xd30, 0x10b8, 0xd30, 0xf4e, 0xbd7, +0xf4e, 0xbd7, 0xe82, 0xb2e, 0xe82, 0xb2e, 0xe82, 0xb2e, 0xd38, 0xa17, 0xd38, +0xa17, 0xc0c, 0x92b, 0xc0c, 0x92b, 0xbd9, 0x946, 0xbd9, 0x946, 0xb55, 0x919, +0xb55, 0x919, 0x9c5, 0x7e8, 0x9c5, 0x7e8, 0x9c5, 0x7e8, 0x77a, 0x600, 0x77a, +0x600, 0x4bd, 0x3a9, 0x4bd, 0x3a9, 0x295, 0x1e6, 0x295, 0x1e6, 0x100, 0xb4, +0x100, 0xb4, 0xff8e, 0xff9f, 0xff8e, 0xff9f, 0xfe4c, 0xfeb4, 0xfe4c, 0xfeb4, 0xfe4c, +0xfeb4, 0xfd4d, 0xfe04, 0xfd4d, 0xfe04, 0xfc88, 0xfd83, 0xfc88, 0xfd83, 0xfbd3, 0xfd07, +0xfbd3, 0xfd07, 0xfb3e, 0xfca1, 0xfb3e, 0xfca1, 0xf996, 0xfb1c, 0xf996, 0xfb1c, 0xf7f8, +0xf995, 0xf7f8, 0xf995, 0xf7f8, 0xf995, 0xf5cd, 0xf777, 0xf5cd, 0xf777, 0xf3e3, 0xf58f, +0xf3e3, 0xf58f, 0xf403, 0xf5a8, 0xf403, 0xf5a8, 0xf3e8, 0xf57d, 0xf3e8, 0xf57d, 0xf4b4, +0xf633, 0xf4b4, 0xf633, 0xf4b4, 0xf633, 0xf5ef, 0xf751, 0xf5ef, 0xf751, 0xf7d3, 0xf914, +0xf7d3, 0xf914, 0xfa5a, 0xfb75, 0xfa5a, 0xfb75, 0xfc0c, 0xfcff, 0xfc0c, 0xfcff, 0xfe95, +0xff5d, 0xfe95, 0xff5d, 0x22, 0xbe, 0x22, 0xbe, 0x22, 0xbe, 0x190, 0x1ff, +0x190, 0x1ff, 0x37e, 0x3c0, 0x37e, 0x3c0, 0x3fa, 0x40e, 0x3fa, 0x40e, 0x44c, +0x431, 0x44c, 0x431, 0x3c6, 0x37c, 0x3c6, 0x37c, 0x34e, 0x2d4, 0x34e, 0x2d4, +0x34e, 0x2d4, 0x3b4, 0x308, 0x3b4, 0x308, 0x439, 0x35b, 0x439, 0x35b, 0x4f3, +0x3e1, 0x4f3, 0x3e1, 0x549, 0x400, 0x549, 0x400, 0x5e3, 0x463, 0x5e3, 0x463, +0x5e3, 0x463, 0x6d3, 0x519, 0x6d3, 0x519, 0x7d3, 0x5df, 0x7d3, 0x5df, 0x8b0, +0x680, 0x8b0, 0x680, 0xa30, 0x7c3, 0xa30, 0x7c3, 0xc67, 0x9bf, 0xc67, 0x9bf, +0xe3b, 0xb59, 0xe3b, 0xb59, 0xe3b, 0xb59, 0xfdf, 0xcc5, 0xfdf, 0xcc5, 0x11b4, +0xe67, 0x11b4, 0xe67, 0x1345, 0xfc8, 0x1345, 0xfc8, 0x146d, 0x10c8, 0x146d, 0x10c8, +0x1613, 0x124d, 0x1613, 0x124d, 0x1613, 0x124d, 0x1651, 0x1273, 0x1651, 0x1273, 0x1600, +0x1213, 0x1600, 0x1213, 0x169a, 0x12a9, 0x169a, 0x12a9, 0x16e9, 0x1300, 0x16e9, 0x1300, +0x1660, 0x1289, 0x1660, 0x1289, 0x1528, 0x1171, 0x1528, 0x1171, 0x1528, 0x1171, 0x1470, +0x10e4, 0x1470, 0x10e4, 0x1322, 0xfcd, 0x1322, 0xfcd, 0x12d6, 0xfc4, 0x12d6, 0xfc4, +0x12a8, 0xfe2, 0x12a8, 0xfe2, 0x1195, 0xf25, 0x1195, 0xf25, 0x10e1, 0xed0, 0x10e1, +0xed0, 0x10e1, 0xed0, 0xf5d, 0xdb1, 0xf5d, 0xdb1, 0xe88, 0xd47, 0xe88, 0xd47, +0xd16, 0xc45, 0xd16, 0xc45, 0xb2b, 0xacb, 0xb2b, 0xacb, 0x964, 0x977, 0x964, +0x977, 0x964, 0x977, 0x723, 0x7a8, 0x723, 0x7a8, 0x562, 0x657, 0x562, 0x657, +0x3af, 0x512, 0x3af, 0x512, 0x261, 0x42e, 0x261, 0x42e, 0x16b, 0x39c, 0x16b, +0x39c, 0xc6, 0x356, 0xc6, 0x356, 0xc6, 0x356, 0xff26, 0x20d, 0xff26, 0x20d, +0xfc88, 0xffc1, 0xfc88, 0xffc1, 0xf99d, 0xfd20, 0xf99d, 0xfd20, 0xf5e3, 0xf9a9, 0xf5e3, +0xf9a9, 0xf298, 0xf698, 0xf298, 0xf698, 0xf05f, 0xf492, 0xf05f, 0xf492, 0xf05f, 0xf492, +0xeecc, 0xf32b, 0xeecc, 0xf32b, 0xed2e, 0xf1af, 0xed2e, 0xf1af, 0xec9b, 0xf138, 0xec9b, +0xf138, 0xecbb, 0xf16c, 0xecbb, 0xf16c, 0xec1b, 0xf0d8, 0xec1b, 0xf0d8, 0xec1b, 0xf0d8, +0xebd5, 0xf095, 0xebd5, 0xf095, 0xeb87, 0xf042, 0xeb87, 0xf042, 0xeafd, 0xefaa, 0xeafd, +0xefaa, 0xea4c, 0xeee3, 0xea4c, 0xeee3, 0xe913, 0xed8b, 0xe913, 0xed8b, 0xe83b, 0xec8a, +0xe83b, 0xec8a, 0xe83b, 0xec8a, 0xe7f1, 0xec0e, 0xe7f1, 0xec0e, 0xe7c5, 0xeba7, 0xe7c5, +0xeba7, 0xe728, 0xeac5, 0xe728, 0xeac5, 0xe695, 0xe9e4, 0xe695, 0xe9e4, 0xe639, 0xe92f, +0xe639, 0xe92f, 0xe678, 0xe90e, 0xe678, 0xe90e, 0xe678, 0xe90e, 0xe760, 0xe98e, 0xe760, +0xe98e, 0xe80a, 0xe9c7, 0xe80a, 0xe9c7, 0xe9a8, 0xeaef, 0xe9a8, 0xeaef, 0xeb46, 0xec13, +0xeb46, 0xec13, 0xed29, 0xed77, 0xed29, 0xed77, 0xed29, 0xed77, 0xf06d, 0xf03a, 0xf06d, +0xf03a, 0xf3fd, 0xf349, 0xf3fd, 0xf349, 0xf7e1, 0xf6ad, 0xf7e1, 0xf6ad, 0xfba1, 0xf9f1, +0xfba1, 0xf9f1, 0xffdc, 0xfdb4, 0xffdc, 0xfdb4, 0x3dc, 0x144, 0x3dc, 0x144, 0x3dc, +0x144, 0x749, 0x448, 0x749, 0x448, 0xb66, 0x806, 0xb66, 0x806, 0xec6, 0xb13, +0xec6, 0xb13, 0x1115, 0xd1a, 0x1115, 0xd1a, 0x132a, 0xef3, 0x132a, 0xef3, 0x1458, +0xff2, 0x1458, 0xff2, 0x1458, 0xff2, 0x1504, 0x107c, 0x1504, 0x107c, 0x15ff, 0x1163, +0x15ff, 0x1163, 0x16c3, 0x121d, 0x16c3, 0x121d, 0x1745, 0x12a2, 0x1745, 0x12a2, 0x1792, +0x12fc, 0x1792, 0x12fc, 0x1792, 0x12fc, 0x17cd, 0x134d, 0x17cd, 0x134d, 0x17d4, 0x1371, +0x17d4, 0x1371, 0x17d8, 0x1399, 0x17d8, 0x1399, 0x184e, 0x1437, 0x184e, 0x1437, 0x192e, +0x1543, 0x192e, 0x1543, 0x19a8, 0x15eb, 0x19a8, 0x15eb, 0x19a8, 0x15eb, 0x1997, 0x1607, +0x1997, 0x1607, 0x1a4f, 0x16ec, 0x1a4f, 0x16ec, 0x1a7e, 0x1746, 0x1a7e, 0x1746, 0x1a8d, +0x177f, 0x1a8d, 0x177f, 0x1b04, 0x181c, 0x1b04, 0x181c, 0x1acc, 0x1807, 0x1acc, 0x1807, +0x1acc, 0x1807, 0x1b96, 0x18f1, 0x1b96, 0x18f1, 0x1ca8, 0x1a21, 0x1ca8, 0x1a21, 0x1cb7, +0x1a4c, 0x1cb7, 0x1a4c, 0x1c18, 0x19c7, 0x1c18, 0x19c7, 0x1ae9, 0x18b2, 0x1ae9, 0x18b2, +0x1ae9, 0x18b2, 0x1989, 0x176d, 0x1989, 0x176d, 0x181b, 0x1619, 0x181b, 0x1619, 0x173c, +0x1557, 0x173c, 0x1557, 0x1686, 0x14c2, 0x1686, 0x14c2, 0x1548, 0x13a7, 0x1548, 0x13a7, +0x1501, 0x1387, 0x1501, 0x1387, 0x1501, 0x1387, 0x1566, 0x1417, 0x1566, 0x1417, 0x155d, +0x143d, 0x155d, 0x143d, 0x156a, 0x147c, 0x156a, 0x147c, 0x1523, 0x146b, 0x1523, 0x146b, +0x14a5, 0x1424, 0x14a5, 0x1424, 0x145d, 0x1414, 0x145d, 0x1414, 0x145d, 0x1414, 0x1417, +0x1407, 0x1417, 0x1407, 0x12ae, 0x12d5, 0x12ae, 0x12d5, 0x103c, 0x1097, 0x103c, 0x1097, +0xdf2, 0xe7c, 0xdf2, 0xe7c, 0xbcf, 0xc83, 0xbcf, 0xc83, 0xbcf, 0xc83, 0x978, +0xa4f, 0x978, 0xa4f, 0x6ec, 0x7de, 0x6ec, 0x7de, 0x595, 0x69a, 0x595, 0x69a, +0x46c, 0x57a, 0x46c, 0x57a, 0x31f, 0x42c, 0x31f, 0x42c, 0x26f, 0x371, 0x26f, +0x371, 0x26f, 0x371, 0x130, 0x21e, 0x130, 0x21e, 0xc4, 0x195, 0xc4, 0x195, +0x1ae, 0x25b, 0x1ae, 0x25b, 0x2c0, 0x343, 0x2c0, 0x343, 0x34c, 0x3a0, 0x34c, +0x3a0, 0x3d3, 0x3f6, 0x3d3, 0x3f6, 0x3d3, 0x3f6, 0x4fb, 0x4ec, 0x4fb, 0x4ec, +0x5a5, 0x566, 0x5a5, 0x566, 0x640, 0x5d2, 0x640, 0x5d2, 0x6dd, 0x647, 0x6dd, +0x647, 0x699, 0x5e1, 0x699, 0x5e1, 0x699, 0x5e1, 0x642, 0x571, 0x642, 0x571, +0x68b, 0x5a9, 0x68b, 0x5a9, 0x680, 0x598, 0x680, 0x598, 0x4e1, 0x3ff, 0x4e1, +0x3ff, 0x2dd, 0x20b, 0x2dd, 0x20b, 0xb3, 0xfffb, 0xb3, 0xfffb, 0xb3, 0xfffb, +0xfe09, 0xfd75, 0xfe09, 0xfd75, 0xfb86, 0xfb1f, 0xfb86, 0xfb1f, 0xf8ff, 0xf8cc, 0xf8ff, +0xf8cc, 0xf72b, 0xf731, 0xf72b, 0xf731, 0xf580, 0xf5c3, 0xf580, 0xf5c3, 0xf482, 0xf504, +0xf482, 0xf504, 0xf482, 0xf504, 0xf34a, 0xf409, 0xf34a, 0xf409, 0xf0c4, 0xf1bf, 0xf0c4, +0xf1bf, 0xef23, 0xf054, 0xef23, 0xf054, 0xedab, 0xef0c, 0xedab, 0xef0c, 0xec58, 0xede1, +0xec58, 0xede1, 0xec58, 0xede1, 0xebe0, 0xed89, 0xebe0, 0xed89, 0xec58, 0xee16, 0xec58, +0xee16, 0xec6d, 0xee34, 0xec6d, 0xee34, 0xec82, 0xee49, 0xec82, 0xee49, 0xee3b, 0xeff8, +0xee3b, 0xeff8, 0xef70, 0xf118, 0xef70, 0xf118, 0xef70, 0xf118, 0xf017, 0xf1a2, 0xf017, +0xf1a2, 0xf0f5, 0xf25c, 0xf0f5, 0xf25c, 0xf233, 0xf371, 0xf233, 0xf371, 0xf2d7, 0xf3e8, +0xf2d7, 0xf3e8, 0xf384, 0xf466, 0xf384, 0xf466, 0xf384, 0xf466, 0xf4da, 0xf58e, 0xf4da, +0xf58e, 0xf599, 0xf620, 0xf599, 0xf620, 0xf6c7, 0xf725, 0xf6c7, 0xf725, 0xf7be, 0xf7f9, +0xf7be, 0xf7f9, 0xf8c9, 0xf8e8, 0xf8c9, 0xf8e8, 0xfa7b, 0xfa85, 0xfa7b, 0xfa85, 0xfa7b, +0xfa85, 0xfc71, 0xfc6f, 0xfc71, 0xfc6f, 0xfe80, 0xfe7a, 0xfe80, 0xfe7a, 0xffe0, 0xffdf, +0xffe0, 0xffdf, 0xbb, 0xc8, 0xbb, 0xc8, 0xa6, 0xc7, 0xa6, 0xc7, 0xff14, +0xff4f, 0xff14, 0xff4f, 0xff14, 0xff4f, 0xfd5f, 0xfdbb, 0xfd5f, 0xfdbb, 0xfc70, 0xfcef, +0xfc70, 0xfcef, 0xfac0, 0xfb64, 0xfac0, 0xfb64, 0xf923, 0xf9ed, 0xf923, 0xf9ed, 0xf82e, +0xf91c, 0xf82e, 0xf91c, 0xf82e, 0xf91c, 0xf683, 0xf791, 0xf683, 0xf791, 0xf4c6, 0xf5f1, +0xf4c6, 0xf5f1, 0xf33a, 0xf47d, 0xf33a, 0xf47d, 0xf1d5, 0xf32a, 0xf1d5, 0xf32a, 0xf09c, +0xf1fc, 0xf09c, 0xf1fc, 0xefbf, 0xf124, 0xefbf, 0xf124, 0xefbf, 0xf124, 0xeff5, 0xf159, +0xeff5, 0xf159, 0xf01b, 0xf176, 0xf01b, 0xf176, 0xf011, 0xf161, 0xf011, 0xf161, 0xf07e, +0xf1be, 0xf07e, 0xf1be, 0xf0c9, 0xf1f7, 0xf0c9, 0xf1f7, 0xf1fb, 0xf316, 0xf1fb, 0xf316, +0xf1fb, 0xf316, 0xf37d, 0xf485, 0xf37d, 0xf485, 0xf46e, 0xf567, 0xf46e, 0xf567, 0xf586, +0xf673, 0xf586, 0xf673, 0xf69e, 0xf784, 0xf69e, 0xf784, 0xf72b, 0xf811, 0xf72b, 0xf811, +0xf72b, 0xf811, 0xf6be, 0xf7ac, 0xf6be, 0xf7ac, 0xf5e0, 0xf6de, 0xf5e0, 0xf6de, 0xf48b, +0xf5a2, 0xf48b, 0xf5a2, 0xf358, 0xf48f, 0xf358, 0xf48f, 0xf246, 0xf3a7, 0xf246, 0xf3a7, +0xf0f6, 0xf288, 0xf0f6, 0xf288, 0xf0f6, 0xf288, 0xefc5, 0xf18e, 0xefc5, 0xf18e, 0xee6b, +0xf06f, 0xee6b, 0xf06f, 0xedb3, 0xeff6, 0xedb3, 0xeff6, 0xecc6, 0xef48, 0xecc6, 0xef48, +0xeb99, 0xee5a, 0xeb99, 0xee5a, 0xeb8d, 0xee8b, 0xeb8d, 0xee8b, 0xeb8d, 0xee8b, 0xeb1b, +0xee51, 0xeb1b, 0xee51, 0xea58, 0xedbf, 0xea58, 0xedbf, 0xea05, 0xed95, 0xea05, 0xed95, +0xe979, 0xed28, 0xe979, 0xed28, 0xe942, 0xed05, 0xe942, 0xed05, 0xe942, 0xed05, 0xe9b8, +0xed84, 0xe9b8, 0xed84, 0xeb2d, 0xeef5, 0xeb2d, 0xeef5, 0xec5f, 0xf017, 0xec5f, 0xf017, +0xecba, 0xf057, 0xecba, 0xf057, 0xed31, 0xf0a6, 0xed31, 0xf0a6, 0xed6c, 0xf0b0, 0xed6c, +0xf0b0, 0xed6c, 0xf0b0, 0xedb9, 0xf0c3, 0xedb9, 0xf0c3, 0xee6f, 0xf136, 0xee6f, 0xf136, +0xef65, 0xf1e4, 0xef65, 0xf1e4, 0xf055, 0xf288, 0xf055, 0xf288, 0xf21c, 0xf400, 0xf21c, +0xf400, 0xf42a, 0xf5be, 0xf42a, 0xf5be, 0xf42a, 0xf5be, 0xf651, 0xf796, 0xf651, 0xf796, +0xf8dd, 0xf9d6, 0xf8dd, 0xf9d6, 0xfb72, 0xfc22, 0xfb72, 0xfc22, 0xfe85, 0xfef1, 0xfe85, +0xfef1, 0x83, 0xb1, 0x83, 0xb1, 0x83, 0xb1, 0x257, 0x24d, 0x257, 0x24d, +0x3db, 0x3a0, 0x3db, 0x3a0, 0x490, 0x429, 0x490, 0x429, 0x595, 0x50a, 0x595, +0x50a, 0x5fc, 0x551, 0x5fc, 0x551, 0x5bc, 0x4f7, 0x5bc, 0x4f7, 0x5bc, 0x4f7, +0x562, 0x487, 0x562, 0x487, 0x567, 0x479, 0x567, 0x479, 0x4b5, 0x3b6, 0x4b5, +0x3b6, 0x3bc, 0x2af, 0x3bc, 0x2af, 0x330, 0x215, 0x330, 0x215, 0x28d, 0x164, +0x28d, 0x164, 0x28d, 0x164, 0x208, 0xd0, 0x208, 0xd0, 0x253, 0x10c, 0x253, +0x10c, 0x2f5, 0x19e, 0x2f5, 0x19e, 0x2ea, 0x182, 0x2ea, 0x182, 0x3c2, 0x248, +0x3c2, 0x248, 0x3c2, 0x248, 0x547, 0x3bb, 0x547, 0x3bb, 0x701, 0x564, 0x701, +0x564, 0x875, 0x6c9, 0x875, 0x6c9, 0x98f, 0x7d4, 0x98f, 0x7d4, 0xab7, 0x8f0, +0xab7, 0x8f0, 0xbac, 0x9dd, 0xbac, 0x9dd, 0xbac, 0x9dd, 0xcfb, 0xb28, 0xcfb, +0xb28, 0xd8f, 0xbbc, 0xd8f, 0xbbc, 0xdb5, 0xbe9, 0xdb5, 0xbe9, 0xdac, 0xbec, +0xdac, 0xbec, 0xd2b, 0xb7d, 0xd2b, 0xb7d, 0xc5c, 0xac6, 0xc5c, 0xac6, 0xc5c, +0xac6, 0xb8c, 0xa13, 0xb8c, 0xa13, 0xacc, 0x975, 0xacc, 0x975, 0x922, 0x7f1, +0x922, 0x7f1, 0x7d6, 0x6d0, 0x7d6, 0x6d0, 0x727, 0x64d, 0x727, 0x64d, 0x727, +0x64d, 0x624, 0x578, 0x624, 0x578, 0x4d7, 0x459, 0x4d7, 0x459, 0x3da, 0x389, +0x3da, 0x389, 0x36e, 0x348, 0x36e, 0x348, 0x285, 0x287, 0x285, 0x287, 0x195, +0x1bb, 0x195, 0x1bb, 0x195, 0x1bb, 0xed, 0x131, 0xed, 0x131, 0x3f, 0x9c, +0x3f, 0x9c, 0x5, 0x76, 0x5, 0x76, 0x11, 0x8e, 0x11, 0x8e, 0xffdf, +0x63, 0xffdf, 0x63, 0xff9b, 0x20, 0xff9b, 0x20, 0xff9b, 0x20, 0xff92, 0x12, +0xff92, 0x12, 0xfeef, 0xff64, 0xfeef, 0xff64, 0xfdbf, 0xfe25, 0xfdbf, 0xfe25, 0xfc73, +0xfcc7, 0xfc73, 0xfcc7, 0xfaf6, 0xfb34, 0xfaf6, 0xfb34, 0xfaf6, 0xfb34, 0xf9d4, 0xf9fb, +0xf9d4, 0xf9fb, 0xf94d, 0xf95b, 0xf94d, 0xf95b, 0xfa3b, 0xfa30, 0xfa3b, 0xfa30, 0xfbad, +0xfb88, 0xfbad, 0xfb88, 0xfcb0, 0xfc72, 0xfcb0, 0xfc72, 0xfeae, 0xfe59, 0xfeae, 0xfe59, +0xfeae, 0xfe59, 0x123, 0xb8, 0x123, 0xb8, 0x313, 0x293, 0x313, 0x293, 0x4ed, +0x45a, 0x4ed, 0x45a, 0x69a, 0x5f5, 0x69a, 0x5f5, 0x7ca, 0x716, 0x7ca, 0x716, +0x909, 0x845, 0x909, 0x845, 0x909, 0x845, 0xa10, 0x93f, 0xa10, 0x93f, 0xad1, +0x9f2, 0xad1, 0x9f2, 0xae4, 0x9f7, 0xae4, 0x9f7, 0xaa6, 0x9ac, 0xaa6, 0x9ac, +0xab8, 0x9b1, 0xab8, 0x9b1, 0xab8, 0x9b1, 0x9cf, 0x8ba, 0x9cf, 0x8ba, 0x8e1, +0x7c0, 0x8e1, 0x7c0, 0x7c1, 0x694, 0x7c1, 0x694, 0x6d0, 0x597, 0x6d0, 0x597, +0x760, 0x61d, 0x760, 0x61d, 0x84b, 0x700, 0x84b, 0x700, 0x84b, 0x700, 0x933, +0x7e2, 0x933, 0x7e2, 0x982, 0x831, 0x982, 0x831, 0x972, 0x823, 0x972, 0x823, +0x95d, 0x816, 0x95d, 0x816, 0x94d, 0x814, 0x94d, 0x814, 0x94d, 0x814, 0x9ba, +0x896, 0x9ba, 0x896, 0xa19, 0x912, 0xa19, 0x912, 0x9eb, 0x906, 0x9eb, 0x906, +0x968, 0x8ae, 0x968, 0x8ae, 0x87c, 0x7f3, 0x87c, 0x7f3, 0x70e, 0x6bd, 0x70e, +0x6bd, 0x70e, 0x6bd, 0x4d5, 0x4c2, 0x4d5, 0x4c2, 0x1fb, 0x229, 0x1fb, 0x229, +0xfecc, 0xff40, 0xfecc, 0xff40, 0xfb7c, 0xfc38, 0xfb7c, 0xfc38, 0xf8da, 0xf9dd, 0xf8da, +0xf9dd, 0xf60a, 0xf754, 0xf60a, 0xf754, 0xf60a, 0xf754, 0xf3ed, 0xf57a, 0xf3ed, 0xf57a, +0xf265, 0xf431, 0xf265, 0xf431, 0xf090, 0xf295, 0xf090, 0xf295, 0xef04, 0xf138, 0xef04, +0xf138, 0xed4f, 0xefaa, 0xed4f, 0xefaa, 0xed4f, 0xefaa, 0xecc4, 0xef3b, 0xecc4, 0xef3b, +0xec55, 0xeedc, 0xec55, 0xeedc, 0xec27, 0xeeb3, 0xec27, 0xeeb3, 0xec2d, 0xeeb1, 0xec2d, +0xeeb1, 0xeba6, 0xee17, 0xeba6, 0xee17, 0xec68, 0xeeba, 0xec68, 0xeeba, 0xec68, 0xeeba, +0xed2c, 0xef56, 0xed2c, 0xef56, 0xee3b, 0xf031, 0xee3b, 0xf031, 0xef9b, 0xf156, 0xef9b, +0xf156, 0xf106, 0xf280, 0xf106, 0xf280, 0xf2f8, 0xf42b, 0xf2f8, 0xf42b, 0xf4bd, 0xf5a5, +0xf4bd, 0xf5a5, 0xf4bd, 0xf5a5, 0xf682, 0xf71d, 0xf682, 0xf71d, 0xf792, 0xf7df, 0xf792, +0xf7df, 0xf897, 0xf898, 0xf897, 0xf898, 0xfa34, 0xf9ea, 0xfa34, 0xf9ea, 0xfc76, 0xfbe4, +0xfc76, 0xfbe4, 0xfc76, 0xfbe4, 0xff51, 0xfe7b, 0xff51, 0xfe7b, 0x1fa, 0xe3, 0x1fa, +0xe3, 0x504, 0x3af, 0x504, 0x3af, 0x84d, 0x6be, 0x84d, 0x6be, 0xba3, 0x9dd, +0xba3, 0x9dd, 0xebd, 0xcc2, 0xebd, 0xcc2, 0xebd, 0xcc2, 0x1191, 0xf63, 0x1191, +0xf63, 0x1404, 0x11a3, 0x1404, 0x11a3, 0x15af, 0x131b, 0x15af, 0x131b, 0x1838, 0x1570, +0x1838, 0x1570, 0x1a3e, 0x1740, 0x1a3e, 0x1740, 0x1b4e, 0x1817, 0x1b4e, 0x1817, 0x1b4e, +0x1817, 0x1c86, 0x1913, 0x1c86, 0x1913, 0x1d10, 0x195e, 0x1d10, 0x195e, 0x1dfd, 0x1a09, +0x1dfd, 0x1a09, 0x1ed4, 0x1a9c, 0x1ed4, 0x1a9c, 0x2039, 0x1bbb, 0x2039, 0x1bbb, 0x2039, +0x1bbb, 0x2222, 0x1d5d, 0x2222, 0x1d5d, 0x238d, 0x1e83, 0x238d, 0x1e83, 0x2553, 0x2006, +0x2553, 0x2006, 0x265d, 0x20d1, 0x265d, 0x20d1, 0x272d, 0x2169, 0x272d, 0x2169, 0x2844, +0x2250, 0x2844, 0x2250, 0x2844, 0x2250, 0x29e3, 0x23c9, 0x29e3, 0x23c9, 0x2bb6, 0x2583, +0x2bb6, 0x2583, 0x2cef, 0x26b1, 0x2cef, 0x26b1, 0x2e29, 0x27ef, 0x2e29, 0x27ef, 0x2ed6, +0x28b0, 0x2ed6, 0x28b0, 0x2fa9, 0x29a8, 0x2fa9, 0x29a8, 0x2fa9, 0x29a8, 0x2feb, 0x2a22, +0x2feb, 0x2a22, 0x2ebe, 0x293d, 0x2ebe, 0x293d, 0x2d51, 0x2829, 0x2d51, 0x2829, 0x2b57, +0x2699, 0x2b57, 0x2699, 0x28e7, 0x24a0, 0x28e7, 0x24a0, 0x28e7, 0x24a0, 0x25a5, 0x21e3, +0x25a5, 0x21e3, 0x2220, 0x1eee, 0x2220, 0x1eee, 0x1ef5, 0x1c5a, 0x1ef5, 0x1c5a, 0x1ae0, +0x18e3, 0x1ae0, 0x18e3, 0x16db, 0x157e, 0x16db, 0x157e, 0x136d, 0x12af, 0x136d, 0x12af, +0x136d, 0x12af, 0x1025, 0x1005, 0x1025, 0x1005, 0xd55, 0xdcd, 0xd55, 0xdcd, 0xa6e, +0xb76, 0xa6e, 0xb76, 0x77b, 0x90a, 0x77b, 0x90a, 0x4f1, 0x6fb, 0x4f1, 0x6fb, +0x24a, 0x4c1, 0x24a, 0x4c1, 0x24a, 0x4c1, 0xff61, 0x239, 0xff61, 0x239, 0xfd21, +0x4a, 0xfd21, 0x4a, 0xfb15, 0xfe81, 0xfb15, 0xfe81, 0xf96c, 0xfd0c, 0xf96c, 0xfd0c, +0xf851, 0xfc17, 0xf851, 0xfc17, 0xf851, 0xfc17, 0xf6c8, 0xfaa7, 0xf6c8, 0xfaa7, 0xf562, +0xf94f, 0xf562, 0xf94f, 0xf36f, 0xf75e, 0xf36f, 0xf75e, 0xf0e0, 0xf4ca, 0xf0e0, 0xf4ca, +0xeed5, 0xf2b2, 0xeed5, 0xf2b2, 0xecf6, 0xf0c1, 0xecf6, 0xf0c1, 0xecf6, 0xf0c1, 0xeb4a, +0xeeff, 0xeb4a, 0xeeff, 0xe9ad, 0xed49, 0xe9ad, 0xed49, 0xe88d, 0xec10, 0xe88d, 0xec10, +0xe86f, 0xebd7, 0xe86f, 0xebd7, 0xe853, 0xeba2, 0xe853, 0xeba2, 0xe88d, 0xebc3, 0xe88d, +0xebc3, 0xe88d, 0xebc3, 0xe8e3, 0xec02, 0xe8e3, 0xec02, 0xe8f0, 0xebf8, 0xe8f0, 0xebf8, +0xe9f7, 0xece8, 0xe9f7, 0xece8, 0xeaeb, 0xedc6, 0xeaeb, 0xedc6, 0xeb79, 0xee3d, 0xeb79, +0xee3d, 0xeb79, 0xee3d, 0xeb5d, 0xee07, 0xeb5d, 0xee07, 0xe9f8, 0xec85, 0xe9f8, 0xec85, +0xe8b5, 0xeb22, 0xe8b5, 0xeb22, 0xe834, 0xea7b, 0xe834, 0xea7b, 0xe8a2, 0xeabd, 0xe8a2, +0xeabd, 0xe90b, 0xeaf3, 0xe90b, 0xeaf3, 0xe90b, 0xeaf3, 0xe93e, 0xeaed, 0xe93e, 0xeaed, +0xe99e, 0xeb0c, 0xe99e, 0xeb0c, 0xea48, 0xeb6e, 0xea48, 0xeb6e, 0xeb48, 0xec20, 0xeb48, +0xec20, 0xec98, 0xed1c, 0xec98, 0xed1c, 0xeed7, 0xef03, 0xeed7, 0xef03, 0xeed7, 0xef03, +0xf124, 0xf0f5, 0xf124, 0xf0f5, 0xf415, 0xf38a, 0xf415, 0xf38a, 0xf7f5, 0xf70e, 0xf7f5, +0xf70e, 0xfbeb, 0xfaad, 0xfbeb, 0xfaad, 0xffeb, 0xfe5a, 0xffeb, 0xfe5a, 0xffeb, 0xfe5a, +0x38a, 0x1ae, 0x38a, 0x1ae, 0x687, 0x46a, 0x687, 0x46a, 0x8b1, 0x65e, 0x8b1, +0x65e, 0xabb, 0x841, 0xabb, 0x841, 0xc04, 0x971, 0xc04, 0x971, 0xc94, 0x9f8, +0xc94, 0x9f8, 0xc94, 0x9f8, 0xd78, 0xae5, 0xd78, 0xae5, 0xdbe, 0xb44, 0xdbe, +0xb44, 0xcbf, 0xa70, 0xcbf, 0xa70, 0xb3b, 0x927, 0xb3b, 0x927, 0x9b8, 0x7ee, +0x9b8, 0x7ee, 0x7d8, 0x665, 0x7d8, 0x665, 0x7d8, 0x665, 0x61e, 0x50f, 0x61e, +0x50f, 0x3ed, 0x34b, 0x3ed, 0x34b, 0xee, 0xbf, 0xee, 0xbf, 0xfe8e, 0xfed8, +0xfe8e, 0xfed8, 0xfcb2, 0xfd76, 0xfcb2, 0xfd76, 0xfcb2, 0xfd76, 0xfa9d, 0xfbda, 0xfa9d, +0xfbda, 0xf7c4, 0xf976, 0xf7c4, 0xf976, 0xf4ae, 0xf6cf, 0xf4ae, 0xf6cf, 0xf205, 0xf48d, +0xf205, 0xf48d, 0xefa0, 0xf285, 0xefa0, 0xf285, 0xed79, 0xf0af, 0xed79, 0xf0af, 0xed79, +0xf0af, 0xeaff, 0xee79, 0xeaff, 0xee79, 0xe855, 0xec06, 0xe855, 0xec06, 0xe638, 0xea12, +0xe638, 0xea12, 0xe4ef, 0xe8e5, 0xe4ef, 0xe8e5, 0xe3ed, 0xe7f2, 0xe3ed, 0xe7f2, 0xe3ed, +0xe7f2, 0xe20d, 0xe616, 0xe20d, 0xe616, 0xdfed, 0xe3ee, 0xdfed, 0xe3ee, 0xde2f, 0xe21e, +0xde2f, 0xe21e, 0xdd18, 0xe0ef, 0xdd18, 0xe0ef, 0xdd0d, 0xe0c4, 0xdd0d, 0xe0c4, 0xdd51, +0xe0e4, 0xdd51, 0xe0e4, 0xdd51, 0xe0e4, 0xdd7c, 0xe0e9, 0xdd7c, 0xe0e9, 0xddcc, 0xe110, +0xddcc, 0xe110, 0xdf18, 0xe234, 0xdf18, 0xe234, 0xe053, 0xe348, 0xe053, 0xe348, 0xe0f5, +0xe3c3, 0xe0f5, 0xe3c3, 0xe1dc, 0xe487, 0xe1dc, 0xe487, 0xe1dc, 0xe487, 0xe2ad, 0xe535, +0xe2ad, 0xe535, 0xe401, 0xe669, 0xe401, 0xe669, 0xe53a, 0xe783, 0xe53a, 0xe783, 0xe601, +0xe82c, 0xe601, 0xe82c, 0xe6e5, 0xe8f2, 0xe6e5, 0xe8f2, 0xe6e5, 0xe8f2, 0xe76c, 0xe95b, +0xe76c, 0xe95b, 0xe800, 0xe9ce, 0xe800, 0xe9ce, 0xe885, 0xea2f, 0xe885, 0xea2f, 0xe85a, +0xe9dd, 0xe85a, 0xe9dd, 0xe85b, 0xe9b1, 0xe85b, 0xe9b1, 0xe91b, 0xea3f, 0xe91b, 0xea3f, +0xe91b, 0xea3f, 0xea2a, 0xeb16, 0xea2a, 0xeb16, 0xebdd, 0xec8a, 0xebdd, 0xec8a, 0xede4, +0xee4e, 0xede4, 0xee4e, 0xefba, 0xefda, 0xefba, 0xefda, 0xf252, 0xf224, 0xf252, 0xf224, +0xf57a, 0xf4fb, 0xf57a, 0xf4fb, 0xf57a, 0xf4fb, 0xf892, 0xf7bf, 0xf892, 0xf7bf, 0xfc2d, +0xfb06, 0xfc2d, 0xfb06, 0x64, 0xfeea, 0x64, 0xfeea, 0x497, 0x2cd, 0x497, 0x2cd, +0x7e6, 0x5d1, 0x7e6, 0x5d1, 0x7e6, 0x5d1, 0xb53, 0x8fb, 0xb53, 0x8fb, 0xe42, +0xbaf, 0xe42, 0xbaf, 0xfa4, 0xce1, 0xfa4, 0xce1, 0x1194, 0xead, 0x1194, 0xead, +0x12f4, 0xff6, 0x12f4, 0xff6, 0x1351, 0x104a, 0x1351, 0x104a, 0x1351, 0x104a, 0x1377, +0x1075, 0x1377, 0x1075, 0x1317, 0x102a, 0x1317, 0x102a, 0x12b5, 0xfe9, 0x12b5, 0xfe9, +0x1266, 0xfca, 0x1266, 0xfca, 0x1224, 0xfc3, 0x1224, 0xfc3, 0x1104, 0xee9, 0x1104, +0xee9, 0x1104, 0xee9, 0xf96, 0xdca, 0xf96, 0xdca, 0xe80, 0xd0a, 0xe80, 0xd0a, +0xdd8, 0xcbd, 0xdd8, 0xcbd, 0xd17, 0xc5a, 0xd17, 0xc5a, 0xbd5, 0xb75, 0xbd5, +0xb75, 0xbd5, 0xb75, 0xa86, 0xa82, 0xa86, 0xa82, 0x83c, 0x890, 0x83c, 0x890, +0x626, 0x6cc, 0x626, 0x6cc, 0x4e3, 0x5d3, 0x4e3, 0x5d3, 0x33a, 0x46c, 0x33a, +0x46c, 0x1a9, 0x312, 0x1a9, 0x312, 0x1a9, 0x312, 0xbe, 0x254, 0xbe, 0x254, +0xffe5, 0x19d, 0xffe5, 0x19d, 0xfe89, 0x58, 0xfe89, 0x58, 0xfd38, 0xff14, 0xfd38, +0xff14, 0xfc11, 0xfdef, 0xfc11, 0xfdef, 0xfa6c, 0xfc44, 0xfa6c, 0xfc44, 0xfa6c, 0xfc44, +0xf949, 0xfb13, 0xf949, 0xfb13, 0xf916, 0xfac9, 0xf916, 0xfac9, 0xf8ed, 0xfa85, 0xf8ed, +0xfa85, 0xf94d, 0xfac4, 0xf94d, 0xfac4, 0xfa18, 0xfb6c, 0xfa18, 0xfb6c, 0xfa18, 0xfb6c, +0xfb14, 0xfc41, 0xfb14, 0xfc41, 0xfc42, 0xfd48, 0xfc42, 0xfd48, 0xfe11, 0xfef0, 0xfe11, +0xfef0, 0x63, 0x11a, 0x63, 0x11a, 0x21f, 0x2ae, 0x21f, 0x2ae, 0x352, 0x3ba, +0x352, 0x3ba, 0x352, 0x3ba, 0x39b, 0x3dc, 0x39b, 0x3dc, 0x34b, 0x366, 0x34b, +0x366, 0x28c, 0x281, 0x28c, 0x281, 0x22b, 0x1f9, 0x22b, 0x1f9, 0x27c, 0x222, +0x27c, 0x222, 0x21d, 0x19a, 0x21d, 0x19a, 0x21d, 0x19a, 0x206, 0x158, 0x206, +0x158, 0x24a, 0x16e, 0x24a, 0x16e, 0x29b, 0x18f, 0x29b, 0x18f, 0x351, 0x212, +0x351, 0x212, 0x413, 0x29e, 0x413, 0x29e, 0x413, 0x29e, 0x534, 0x388, 0x534, +0x388, 0x6a9, 0x4c3, 0x6a9, 0x4c3, 0x8aa, 0x689, 0x8aa, 0x689, 0xa68, 0x80c, +0xa68, 0x80c, 0xbdb, 0x945, 0xbdb, 0x945, 0xe0e, 0xb40, 0xe0e, 0xb40, 0xe0e, +0xb40, 0xfbf, 0xcbd, 0xfbf, 0xcbd, 0x112d, 0xdfb, 0x112d, 0xdfb, 0x12e8, 0xf8d, +0x12e8, 0xf8d, 0x14c7, 0x114b, 0x14c7, 0x114b, 0x166e, 0x12da, 0x166e, 0x12da, 0x176d, +0x13ca, 0x176d, 0x13ca, 0x176d, 0x13ca, 0x17e5, 0x1440, 0x17e5, 0x1440, 0x172c, 0x138f, +0x172c, 0x138f, 0x166f, 0x12e7, 0x166f, 0x12e7, 0x1603, 0x129c, 0x1603, 0x129c, 0x1590, +0x1256, 0x1590, 0x1256, 0x1590, 0x1256, 0x150b, 0x120a, 0x150b, 0x120a, 0x1481, 0x11c3, +0x1481, 0x11c3, 0x1457, 0x11e5, 0x1457, 0x11e5, 0x136a, 0x114d, 0x136a, 0x114d, 0x128e, +0x10ce, 0x128e, 0x10ce, 0x1148, 0xfe9, 0x1148, 0xfe9, 0x1148, 0xfe9, 0xf08, 0xe0e, +0xf08, 0xe0e, 0xd42, 0xcaf, 0xd42, 0xcaf, 0xbb7, 0xb8b, 0xbb7, 0xb8b, 0x9bf, +0x9f8, 0x9bf, 0x9f8, 0x75a, 0x7f7, 0x75a, 0x7f7, 0x528, 0x624, 0x528, 0x624, +0x528, 0x624, 0x2ce, 0x423, 0x2ce, 0x423, 0x9f, 0x247, 0x9f, 0x247, 0xff37, +0x12c, 0xff37, 0x12c, 0xfd92, 0xffcc, 0xfd92, 0xffcc, 0xfb1c, 0xfd93, 0xfb1c, 0xfd93, +0xfb1c, 0xfd93, 0xf8e7, 0xfb95, 0xf8e7, 0xfb95, 0xf6c9, 0xf9a6, 0xf6c9, 0xf9a6, 0xf3de, +0xf6e2, 0xf3de, 0xf6e2, 0xf12c, 0xf451, 0xf12c, 0xf451, 0xee96, 0xf1d7, 0xee96, 0xf1d7, +0xebe9, 0xef3f, 0xebe9, 0xef3f, 0xebe9, 0xef3f, 0xe9d4, 0xed3b, 0xe9d4, 0xed3b, 0xe868, +0xebda, 0xe868, 0xebda, 0xe75a, 0xead2, 0xe75a, 0xead2, 0xe6d2, 0xea4c, 0xe6d2, 0xea4c, +0xe6f0, 0xea68, 0xe6f0, 0xea68, 0xe760, 0xead1, 0xe760, 0xead1, 0xe760, 0xead1, 0xe795, +0xeafa, 0xe795, 0xeafa, 0xe731, 0xea86, 0xe731, 0xea86, 0xe6d4, 0xea12, 0xe6d4, 0xea12, +0xe60b, 0xe92e, 0xe60b, 0xe92e, 0xe57e, 0xe87e, 0xe57e, 0xe87e, 0xe57e, 0xe87e, 0xe595, +0xe86b, 0xe595, 0xe86b, 0xe58a, 0xe82f, 0xe58a, 0xe82f, 0xe62e, 0xe89a, 0xe62e, 0xe89a, +0xe70e, 0xe939, 0xe70e, 0xe939, 0xe7dd, 0xe9bf, 0xe7dd, 0xe9bf, 0xe8a7, 0xea38, 0xe8a7, +0xea38, 0xe8a7, 0xea38, 0xe9be, 0xeaf8, 0xe9be, 0xeaf8, 0xeba1, 0xec7c, 0xeba1, 0xec7c, +0xedc2, 0xee39, 0xedc2, 0xee39, 0xf0e4, 0xf0f2, 0xf0e4, 0xf0f2, 0xf511, 0xf4b3, 0xf511, +0xf4b3, 0xf511, 0xf4b3, 0xf924, 0xf859, 0xf924, 0xf859, 0xfcf6, 0xfbbe, 0xfcf6, 0xfbbe, +0x12c, 0xff89, 0x12c, 0xff89, 0x5d8, 0x3ce, 0x5d8, 0x3ce, 0xa4d, 0x7e2, 0xa4d, +0x7e2, 0xe54, 0xb8f, 0xe54, 0xb8f, 0xe54, 0xb8f, 0x1181, 0xe6b, 0x1181, 0xe6b, +0x1465, 0x1109, 0x1465, 0x1109, 0x17a1, 0x140a, 0x17a1, 0x140a, 0x1a49, 0x1683, 0x1a49, +0x1683, 0x1bad, 0x17c5, 0x1bad, 0x17c5, 0x1c1a, 0x181c, 0x1c1a, 0x181c, 0x1c1a, 0x181c, +0x1c7d, 0x1877, 0x1c7d, 0x1877, 0x1ce9, 0x18e6, 0x1ce9, 0x18e6, 0x1d67, 0x1972, 0x1d67, +0x1972, 0x1dfc, 0x1a1f, 0x1dfc, 0x1a1f, 0x1e04, 0x1a47, 0x1e04, 0x1a47, 0x1e04, 0x1a47, +0x1db3, 0x1a1e, 0x1db3, 0x1a1e, 0x1e33, 0x1aca, 0x1e33, 0x1aca, 0x1eff, 0x1bc6, 0x1eff, +0x1bc6, 0x1ef9, 0x1bf2, 0x1ef9, 0x1bf2, 0x1f07, 0x1c32, 0x1f07, 0x1c32, 0x1f2c, 0x1c87, +0x1f2c, 0x1c87, 0x1f2c, 0x1c87, 0x1ef9, 0x1c82, 0x1ef9, 0x1c82, 0x1e5e, 0x1c12, 0x1e5e, +0x1c12, 0x1dd9, 0x1bb4, 0x1dd9, 0x1bb4, 0x1cef, 0x1aeb, 0x1cef, 0x1aeb, 0x1ba8, 0x19c2, +0x1ba8, 0x19c2, 0x1b94, 0x19c6, 0x1b94, 0x19c6, 0x1b94, 0x19c6, 0x1b48, 0x1990, 0x1b48, +0x1990, 0x1a91, 0x18ec, 0x1a91, 0x18ec, 0x1996, 0x1802, 0x1996, 0x1802, 0x1814, 0x1690, +0x1814, 0x1690, 0x163e, 0x14ca, 0x163e, 0x14ca, 0x163e, 0x14ca, 0x1469, 0x1307, 0x1469, +0x1307, 0x1387, 0x1239, 0x1387, 0x1239, 0x125f, 0x112b, 0x125f, 0x112b, 0x11a0, 0x1089, +0x11a0, 0x1089, 0x1128, 0x1033, 0x1128, 0x1033, 0x101d, 0xf50, 0x101d, 0xf50, 0x101d, +0xf50, 0xf05, 0xe65, 0xf05, 0xe65, 0xdff, 0xd91, 0xdff, 0xd91, 0xd81, 0xd49, +0xd81, 0xd49, 0xc8b, 0xc8b, 0xc8b, 0xc8b, 0xba2, 0xbde, 0xba2, 0xbde, 0xa4f, +0xac6, 0xa4f, 0xac6, 0xa4f, 0xac6, 0x83b, 0x8ec, 0x83b, 0x8ec, 0x6f6, 0x7dc, +0x6f6, 0x7dc, 0x597, 0x6af, 0x597, 0x6af, 0x3ba, 0x4fd, 0x3ba, 0x4fd, 0x1b5, +0x31a, 0x1b5, 0x31a, 0x1b5, 0x31a, 0x2, 0x17f, 0x2, 0x17f, 0xfe80, 0xb, +0xfe80, 0xb, 0xfc9d, 0xfe2a, 0xfc9d, 0xfe2a, 0xfb87, 0xfd0a, 0xfb87, 0xfd0a, 0xfb30, +0xfc9e, 0xfb30, 0xfc9e, 0xfaa2, 0xfbf0, 0xfaa2, 0xfbf0, 0xfaa2, 0xfbf0, 0xfaa4, 0xfbc7, +0xfaa4, 0xfbc7, 0xfb47, 0xfc37, 0xfb47, 0xfc37, 0xfc18, 0xfccf, 0xfc18, 0xfccf, 0xfd49, +0xfdc2, 0xfd49, 0xfdc2, 0xfe84, 0xfebc, 0xfe84, 0xfebc, 0xffd5, 0xffcd, 0xffd5, 0xffcd, +0xffd5, 0xffcd, 0x13d, 0xf6, 0x13d, 0xf6, 0x2ad, 0x22d, 0x2ad, 0x22d, 0x3fc, +0x34b, 0x3fc, 0x34b, 0x46f, 0x396, 0x46f, 0x396, 0x432, 0x33b, 0x432, 0x33b, +0x432, 0x33b, 0x39d, 0x296, 0x39d, 0x296, 0x2c7, 0x1bb, 0x2c7, 0x1bb, 0x1f0, +0xee, 0x1f0, 0xee, 0xfe, 0x13, 0xfe, 0x13, 0xff90, 0xfec9, 0xff90, 0xfec9, +0xfdc4, 0xfd2c, 0xfdc4, 0xfd2c, 0xfdc4, 0xfd2c, 0xfbf3, 0xfb94, 0xfbf3, 0xfb94, 0xf9fc, +0xf9de, 0xf9fc, 0xf9de, 0xf7dd, 0xf805, 0xf7dd, 0xf805, 0xf617, 0xf687, 0xf617, 0xf687, +0xf4eb, 0xf5a3, 0xf4eb, 0xf5a3, 0xf3d4, 0xf4d3, 0xf3d4, 0xf4d3, 0xf3d4, 0xf4d3, 0xf2d2, +0xf411, 0xf2d2, 0xf411, 0xf264, 0xf3dc, 0xf264, 0xf3dc, 0xf1c6, 0xf36d, 0xf1c6, 0xf36d, +0xf0d0, 0xf29b, 0xf0d0, 0xf29b, 0xf055, 0xf237, 0xf055, 0xf237, 0xf055, 0xf237, 0xeff6, +0xf1e1, 0xeff6, 0xf1e1, 0xefb0, 0xf197, 0xefb0, 0xf197, 0xf091, 0xf267, 0xf091, 0xf267, +0xf224, 0xf3dc, 0xf224, 0xf3dc, 0xf34b, 0xf4da, 0xf34b, 0xf4da, 0xf463, 0xf5bf, 0xf463, +0xf5bf, 0xf463, 0xf5bf, 0xf525, 0xf649, 0xf525, 0xf649, 0xf59e, 0xf684, 0xf59e, 0xf684, +0xf624, 0xf6c9, 0xf624, 0xf6c9, 0xf65b, 0xf6c2, 0xf65b, 0xf6c2, 0xf6e7, 0xf711, 0xf6e7, +0xf711, 0xf76f, 0xf763, 0xf76f, 0xf763, 0xf76f, 0xf763, 0xf835, 0xf7fa, 0xf835, 0xf7fa, +0xf919, 0xf8ba, 0xf919, 0xf8ba, 0xf9d8, 0xf95f, 0xf9d8, 0xf95f, 0xfb80, 0xfaf9, 0xfb80, +0xfaf9, 0xfcd2, 0xfc49, 0xfcd2, 0xfc49, 0xfcd2, 0xfc49, 0xfdf2, 0xfd74, 0xfdf2, 0xfd74, +0xff4f, 0xfee8, 0xff4f, 0xfee8, 0xffc1, 0xff79, 0xffc1, 0xff79, 0xff5e, 0xff40, 0xff5e, +0xff40, 0xfe43, 0xfe54, 0xfe43, 0xfe54, 0xfd13, 0xfd59, 0xfd13, 0xfd59, 0xfd13, 0xfd59, +0xfb71, 0xfbec, 0xfb71, 0xfbec, 0xf966, 0xfa17, 0xf966, 0xfa17, 0xf82e, 0xf912, 0xf82e, +0xf912, 0xf6d7, 0xf7e8, 0xf6d7, 0xf7e8, 0xf52c, 0xf663, 0xf52c, 0xf663, 0xf372, 0xf4c5, +0xf372, 0xf4c5, 0xf372, 0xf4c5, 0xf1c7, 0xf32c, 0xf1c7, 0xf32c, 0xf0e9, 0xf255, 0xf0e9, +0xf255, 0xf0ad, 0xf215, 0xf0ad, 0xf215, 0xf0cb, 0xf223, 0xf0cb, 0xf223, 0xf07d, 0xf1bc, +0xf07d, 0xf1bc, 0xf07d, 0xf1bc, 0xf0a2, 0xf1be, 0xf0a2, 0xf1be, 0xf173, 0xf265, 0xf173, +0xf265, 0xf25e, 0xf321, 0xf25e, 0xf321, 0xf40f, 0xf49f, 0xf40f, 0xf49f, 0xf5c3, 0xf621, +0xf5c3, 0xf621, 0xf7a0, 0xf7cf, 0xf7a0, 0xf7cf, 0xf7a0, 0xf7cf, 0xf944, 0xf948, 0xf944, +0xf948, 0xfa86, 0xfa67, 0xfa86, 0xfa67, 0xfb42, 0xfb09, 0xfb42, 0xfb09, 0xfacd, 0xfa86, +0xfacd, 0xfa86, 0xf9f4, 0xf9ac, 0xf9f4, 0xf9ac, 0xf8bf, 0xf884, 0xf8bf, 0xf884, 0xf8bf, +0xf884, 0xf78d, 0xf76c, 0xf78d, 0xf76c, 0xf5f7, 0xf5fd, 0xf5f7, 0xf5fd, 0xf414, 0xf44d, +0xf414, 0xf44d, 0xf2d1, 0xf34a, 0xf2d1, 0xf34a, 0xf183, 0xf244, 0xf183, 0xf244, 0xf183, +0xf244, 0xf030, 0xf13f, 0xf030, 0xf13f, 0xef2d, 0xf08f, 0xef2d, 0xf08f, 0xedf6, 0xefac, +0xedf6, 0xefac, 0xece8, 0xeeef, 0xece8, 0xeeef, 0xec59, 0xeead, 0xec59, 0xeead, 0xebc9, +0xee61, 0xebc9, 0xee61, 0xebc9, 0xee61, 0xeb05, 0xedd7, 0xeb05, 0xedd7, 0xe9d9, 0xecd8, +0xe9d9, 0xecd8, 0xe8a2, 0xebbe, 0xe8a2, 0xebbe, 0xe784, 0xeaae, 0xe784, 0xeaae, 0xe6d0, +0xe9f7, 0xe6d0, 0xe9f7, 0xe6d0, 0xe9f7, 0xe702, 0xea14, 0xe702, 0xea14, 0xe821, 0xeb0e, +0xe821, 0xeb0e, 0xe9c3, 0xec7c, 0xe9c3, 0xec7c, 0xeb27, 0xed9c, 0xeb27, 0xed9c, 0xec53, +0xee78, 0xec53, 0xee78, 0xed11, 0xeedd, 0xed11, 0xeedd, 0xed11, 0xeedd, 0xedbe, 0xef29, +0xedbe, 0xef29, 0xeec2, 0xefc9, 0xeec2, 0xefc9, 0xeff2, 0xf092, 0xeff2, 0xf092, 0xf157, +0xf192, 0xf157, 0xf192, 0xf2c7, 0xf2a3, 0xf2c7, 0xf2a3, 0xf488, 0xf40a, 0xf488, 0xf40a, +0xf488, 0xf40a, 0xf71b, 0xf64d, 0xf71b, 0xf64d, 0xfa54, 0xf940, 0xfa54, 0xf940, 0xfd75, +0xfc28, 0xfd75, 0xfc28, 0xffef, 0xfe76, 0xffef, 0xfe76, 0x19f, 0x6, 0x19f, 0x6, +0x19f, 0x6, 0x2cd, 0x121, 0x2cd, 0x121, 0x39f, 0x1ed, 0x39f, 0x1ed, 0x4b5, +0x307, 0x4b5, 0x307, 0x582, 0x3e2, 0x582, 0x3e2, 0x55c, 0x3d0, 0x55c, 0x3d0, +0x569, 0x3f8, 0x569, 0x3f8, 0x569, 0x3f8, 0x545, 0x3f1, 0x545, 0x3f1, 0x503, +0x3ce, 0x503, 0x3ce, 0x52e, 0x416, 0x52e, 0x416, 0x470, 0x372, 0x470, 0x372, +0x3a3, 0x2bb, 0x3a3, 0x2bb, 0x3d9, 0x302, 0x3d9, 0x302, 0x3d9, 0x302, 0x462, +0x394, 0x462, 0x394, 0x54f, 0x484, 0x54f, 0x484, 0x625, 0x556, 0x625, 0x556, +0x723, 0x64b, 0x723, 0x64b, 0x845, 0x75d, 0x845, 0x75d, 0x845, 0x75d, 0x9b9, +0x8bd, 0x9b9, 0x8bd, 0xc11, 0xafe, 0xc11, 0xafe, 0xde1, 0xcb7, 0xde1, 0xcb7, +0xf36, 0xdf5, 0xf36, 0xdf5, 0x1048, 0xef2, 0x1048, 0xef2, 0x10eb, 0xf85, 0x10eb, +0xf85, 0x10eb, 0xf85, 0x1121, 0xfb1, 0x1121, 0xfb1, 0x110a, 0xf96, 0x110a, 0xf96, +0x10f1, 0xf83, 0x10f1, 0xf83, 0x1069, 0xf0a, 0x1069, 0xf0a, 0xf58, 0xe11, 0xf58, +0xe11, 0xdf3, 0xcce, 0xdf3, 0xcce, 0xdf3, 0xcce, 0xc81, 0xb86, 0xc81, 0xb86, +0xaf6, 0xa2e, 0xaf6, 0xa2e, 0x9a4, 0x916, 0x9a4, 0x916, 0x846, 0x7f5, 0x846, +0x7f5, 0x6d3, 0x6c4, 0x6d3, 0x6c4, 0x6d3, 0x6c4, 0x57c, 0x5b0, 0x57c, 0x5b0, +0x494, 0x509, 0x494, 0x509, 0x3a8, 0x45b, 0x3a8, 0x45b, 0x23a, 0x327, 0x23a, +0x327, 0x9f, 0x1bf, 0x9f, 0x1bf, 0xfec0, 0x9, 0xfec0, 0x9, 0xfec0, 0x9, +0xfe57, 0xffbf, 0xfe57, 0xffbf, 0xfe13, 0xff8f, 0xfe13, 0xff8f, 0xfd7d, 0xff02, 0xfd7d, +0xff02, 0xfd4c, 0xfecd, 0xfd4c, 0xfecd, 0xfc48, 0xfdba, 0xfc48, 0xfdba, 0xfbaa, 0xfd03, +0xfbaa, 0xfd03, 0xfbaa, 0xfd03, 0xfaef, 0xfc24, 0xfaef, 0xfc24, 0xfa61, 0xfb6a, 0xfa61, +0xfb6a, 0xfa0f, 0xfae6, 0xfa0f, 0xfae6, 0xf9a2, 0xfa41, 0xf9a2, 0xfa41, 0xf9e9, 0xfa4e, +0xf9e9, 0xfa4e, 0xf9e9, 0xfa4e, 0xfa3c, 0xfa66, 0xfa3c, 0xfa66, 0xfb2b, 0xfb1a, 0xfb2b, +0xfb1a, 0xfc17, 0xfbd0, 0xfc17, 0xfbd0, 0xfcfd, 0xfc83, 0xfcfd, 0xfc83, 0xfef7, 0xfe50, +0xfef7, 0xfe50, 0x11c, 0x50, 0x11c, 0x50, 0x11c, 0x50, 0x389, 0x2a0, 0x389, +0x2a0, 0x642, 0x544, 0x642, 0x544, 0x880, 0x775, 0x880, 0x775, 0x9c2, 0x8b4, +0x9c2, 0x8b4, 0xa4d, 0x942, 0xa4d, 0x942, 0xaf7, 0x9f6, 0xaf7, 0x9f6, 0xaf7, +0x9f6, 0xb70, 0xa7f, 0xb70, 0xa7f, 0xb9b, 0xabf, 0xb9b, 0xabf, 0xb09, 0xa46, +0xb09, 0xa46, 0xa29, 0x981, 0xa29, 0x981, 0x9a3, 0x918, 0x9a3, 0x918, 0x9a3, +0x918, 0x8f8, 0x88a, 0x8f8, 0x88a, 0x835, 0x7e2, 0x835, 0x7e2, 0x736, 0x6fe, +0x736, 0x6fe, 0x6a9, 0x68a, 0x6a9, 0x68a, 0x67c, 0x674, 0x67c, 0x674, 0x68e, +0x69b, 0x68e, 0x69b, 0x68e, 0x69b, 0x70c, 0x72d, 0x70c, 0x72d, 0x7a2, 0x7d5, +0x7a2, 0x7d5, 0x7ea, 0x830, 0x7ea, 0x830, 0x7ff, 0x857, 0x7ff, 0x857, 0x851, +0x8be, 0x851, 0x8be, 0x848, 0x8ca, 0x848, 0x8ca, 0x848, 0x8ca, 0x784, 0x820, +0x784, 0x820, 0x5f5, 0x6ad, 0x5f5, 0x6ad, 0x432, 0x50c, 0x432, 0x50c, 0x22a, +0x329, 0x22a, 0x329, 0x86, 0x1af, 0x86, 0x1af, 0x86, 0x1af, 0xfefe, 0x55, +0xfefe, 0x55, 0xfc78, 0xfe00, 0xfc78, 0xfe00, 0xf9c1, 0xfb7d, 0xf9c1, 0xfb7d, 0xf6a8, +0xf89a, 0xf6a8, 0xf89a, 0xf3ba, 0xf5e3, 0xf3ba, 0xf5e3, 0xf185, 0xf3e3, 0xf185, 0xf3e3, +0xf185, 0xf3e3, 0xefee, 0xf27e, 0xefee, 0xf27e, 0xee62, 0xf11f, 0xee62, 0xf11f, 0xed04, +0xefe8, 0xed04, 0xefe8, 0xebf4, 0xeef7, 0xebf4, 0xeef7, 0xeb59, 0xee71, 0xeb59, 0xee71, +0xeb84, 0xeea6, 0xeb84, 0xeea6, 0xeb84, 0xeea6, 0xeb54, 0xee74, 0xeb54, 0xee74, 0xeb47, +0xee59, 0xeb47, 0xee59, 0xeb2d, 0xee25, 0xeb2d, 0xee25, 0xeb2d, 0xedfc, 0xeb2d, 0xedfc, +0xebe8, 0xee83, 0xebe8, 0xee83, 0xebe8, 0xee83, 0xed6b, 0xefc5, 0xed6b, 0xefc5, 0xef94, +0xf1a3, 0xef94, 0xf1a3, 0xf17f, 0xf339, 0xf17f, 0xf339, 0xf35e, 0xf4bd, 0xf35e, 0xf4bd, +0xf50d, 0xf60a, 0xf50d, 0xf60a, 0xf6bd, 0xf754, 0xf6bd, 0xf754, 0xf6bd, 0xf754, 0xf8d5, +0xf905, 0xf8d5, 0xf905, 0xfad1, 0xfa99, 0xfad1, 0xfa99, 0xfc93, 0xfbf6, 0xfc93, 0xfbf6, +0xfeac, 0xfdae, 0xfeac, 0xfdae, 0x12d, 0xffd2, 0x12d, 0xffd2, 0x3be, 0x20c, 0x3be, +0x20c, 0x3be, 0x20c, 0x71c, 0x51b, 0x71c, 0x51b, 0xac9, 0x880, 0xac9, 0x880, +0xd85, 0xafc, 0xd85, 0xafc, 0x10a6, 0xde4, 0x10a6, 0xde4, 0x13ed, 0x10f8, 0x13ed, +0x10f8, 0x13ed, 0x10f8, 0x16fa, 0x13d9, 0x16fa, 0x13d9, 0x19c7, 0x167e, 0x19c7, 0x167e, +0x1b4f, 0x17e2, 0x1b4f, 0x17e2, 0x1d34, 0x19a5, 0x1d34, 0x19a5, 0x1eda, 0x1b2b, 0x1eda, +0x1b2b, 0x209d, 0x1cce, 0x209d, 0x1cce, 0x209d, 0x1cce, 0x2215, 0x1e25, 0x2215, 0x1e25, +0x21e4, 0x1dd3, 0x21e4, 0x1dd3, 0x227a, 0x1e46, 0x227a, 0x1e46, 0x238c, 0x1f32, 0x238c, +0x1f32, 0x24d7, 0x2057, 0x24d7, 0x2057, 0x24d7, 0x2057, 0x2607, 0x2160, 0x2607, 0x2160, +0x26f1, 0x2224, 0x26f1, 0x2224, 0x27d2, 0x22e0, 0x27d2, 0x22e0, 0x2885, 0x2371, 0x2885, +0x2371, 0x2a41, 0x2511, 0x2a41, 0x2511, 0x2be9, 0x26a3, 0x2be9, 0x26a3, 0x2be9, 0x26a3, +0x2cd6, 0x2784, 0x2cd6, 0x2784, 0x2e2a, 0x28d6, 0x2e2a, 0x28d6, 0x2f6e, 0x2a25, 0x2f6e, +0x2a25, 0x2fde, 0x2aad, 0x2fde, 0x2aad, 0x2fbd, 0x2ab3, 0x2fbd, 0x2ab3, 0x2ee8, 0x2a15, +0x2ee8, 0x2a15, 0x2ee8, 0x2a15, 0x2cff, 0x2874, 0x2cff, 0x2874, 0x2a69, 0x2635, 0x2a69, +0x2635, 0x27ba, 0x23ec, 0x27ba, 0x23ec, 0x2445, 0x20ec, 0x2445, 0x20ec, 0x206d, 0x1d94, +0x206d, 0x1d94, 0x206d, 0x1d94, 0x1cba, 0x1a6b, 0x1cba, 0x1a6b, 0x1889, 0x16cd, 0x1889, +0x16cd, 0x147d, 0x1358, 0x147d, 0x1358, 0x1095, 0x1009, 0x1095, 0x1009, 0xd24, 0xd30, +0xd24, 0xd30, 0xa43, 0xae3, 0xa43, 0xae3, 0xa43, 0xae3, 0x724, 0x851, 0x724, +0x851, 0x40c, 0x5bb, 0x40c, 0x5bb, 0xd3, 0x2f8, 0xd3, 0x2f8, 0xfd57, 0xffe3, +0xfd57, 0xffe3, 0xfa4c, 0xfd2e, 0xfa4c, 0xfd2e, 0xf73b, 0xfa64, 0xf73b, 0xfa64, 0xf73b, +0xfa64, 0xf45f, 0xf7bb, 0xf45f, 0xf7bb, 0xf21f, 0xf59d, 0xf21f, 0xf59d, 0xf009, 0xf397, +0xf009, 0xf397, 0xee90, 0xf21e, 0xee90, 0xf21e, 0xed73, 0xf0f1, 0xed73, 0xf0f1, 0xed73, +0xf0f1, 0xecfe, 0xf061, 0xecfe, 0xf061, 0xec06, 0xef42, 0xec06, 0xef42, 0xea8a, 0xed97, +0xea8a, 0xed97, 0xe98d, 0xec65, 0xe98d, 0xec65, 0xe7f8, 0xea98, 0xe7f8, 0xea98, 0xe6bf, +0xe927, 0xe6bf, 0xe927, 0xe6bf, 0xe927, 0xe61d, 0xe84d, 0xe61d, 0xe84d, 0xe5af, 0xe7ac, +0xe5af, 0xe7ac, 0xe58e, 0xe75a, 0xe58e, 0xe75a, 0xe65f, 0xe802, 0xe65f, 0xe802, 0xe7f0, +0xe971, 0xe7f0, 0xe971, 0xe99a, 0xeaff, 0xe99a, 0xeaff, 0xe99a, 0xeaff, 0xeb21, 0xec70, +0xeb21, 0xec70, 0xebd8, 0xed18, 0xebd8, 0xed18, 0xec76, 0xedab, 0xec76, 0xedab, 0xed20, +0xee4c, 0xed20, 0xee4c, 0xee16, 0xef3b, 0xee16, 0xef3b, 0xee16, 0xef3b, 0xee95, 0xefb3, +0xee95, 0xefb3, 0xee77, 0xef8a, 0xee77, 0xef8a, 0xeefe, 0xf003, 0xeefe, 0xf003, 0xef8c, +0xf07c, 0xef8c, 0xf07c, 0xefeb, 0xf0bf, 0xefeb, 0xf0bf, 0xf0a5, 0xf154, 0xf0a5, 0xf154, +0xf0a5, 0xf154, 0xf1a0, 0xf220, 0xf1a0, 0xf220, 0xf2a2, 0xf2eb, 0xf2a2, 0xf2eb, 0xf453, +0xf45b, 0xf453, 0xf45b, 0xf6f4, 0xf6b4, 0xf6f4, 0xf6b4, 0xf965, 0xf8d4, 0xf965, 0xf8d4, +0xfb6f, 0xfa8a, 0xfb6f, 0xfa8a, 0xfb6f, 0xfa8a, 0xfe57, 0xfd1b, 0xfe57, 0xfd1b, 0x180, +0xffec, 0x180, 0xffec, 0x454, 0x26b, 0x454, 0x26b, 0x7c5, 0x58e, 0x7c5, 0x58e, +0xb22, 0x8a5, 0xb22, 0x8a5, 0xb22, 0x8a5, 0xd70, 0xab9, 0xd70, 0xab9, 0xf75, +0xc94, 0xf75, 0xc94, 0x10fd, 0xe01, 0x10fd, 0xe01, 0x116f, 0xe6b, 0x116f, 0xe6b, +0x11db, 0xee4, 0x11db, 0xee4, 0x1182, 0xead, 0x1182, 0xead, 0x1182, 0xead, 0x1020, +0xd82, 0x1020, 0xd82, 0xe17, 0xbc5, 0xe17, 0xbc5, 0xb96, 0x9a3, 0xb96, 0x9a3, +0x94c, 0x7c9, 0x94c, 0x7c9, 0x686, 0x583, 0x686, 0x583, 0x3c9, 0x352, 0x3c9, +0x352, 0x3c9, 0x352, 0x104, 0x122, 0x104, 0x122, 0xfe08, 0xfec1, 0xfe08, 0xfec1, +0xfb73, 0xfcc8, 0xfb73, 0xfcc8, 0xf86b, 0xfa5a, 0xf86b, 0xfa5a, 0xf4fa, 0xf77d, 0xf4fa, +0xf77d, 0xf4fa, 0xf77d, 0xf1e3, 0xf4f1, 0xf1e3, 0xf4f1, 0xef22, 0xf2b0, 0xef22, 0xf2b0, +0xec41, 0xf040, 0xec41, 0xf040, 0xe964, 0xedc3, 0xe964, 0xedc3, 0xe716, 0xebc2, 0xe716, +0xebc2, 0xe486, 0xe96d, 0xe486, 0xe96d, 0xe486, 0xe96d, 0xe21e, 0xe72e, 0xe21e, 0xe72e, +0xe0cc, 0xe5f1, 0xe0cc, 0xe5f1, 0xdfcf, 0xe4f9, 0xdfcf, 0xe4f9, 0xdee0, 0xe3fe, 0xdee0, +0xe3fe, 0xde0a, 0xe30f, 0xde0a, 0xe30f, 0xddf1, 0xe2d2, 0xddf1, 0xe2d2, 0xddf1, 0xe2d2, +0xdd41, 0xe1f5, 0xdd41, 0xe1f5, 0xdc6d, 0xe0ef, 0xdc6d, 0xe0ef, 0xdc9b, 0xe0e6, 0xdc9b, +0xe0e6, 0xdc4e, 0xe063, 0xdc4e, 0xe063, 0xdd3f, 0xe120, 0xdd3f, 0xe120, 0xdd3f, 0xe120, +0xde7d, 0xe22b, 0xde7d, 0xe22b, 0xdf50, 0xe2d3, 0xdf50, 0xe2d3, 0xe0f5, 0xe452, 0xe0f5, +0xe452, 0xe2e3, 0xe621, 0xe2e3, 0xe621, 0xe575, 0xe89c, 0xe575, 0xe89c, 0xe731, 0xea45, +0xe731, 0xea45, 0xe731, 0xea45, 0xe85a, 0xeb62, 0xe85a, 0xeb62, 0xe97f, 0xec7f, 0xe97f, +0xec7f, 0xe9d6, 0xeccf, 0xe9d6, 0xeccf, 0xea80, 0xed72, 0xea80, 0xed72, 0xeb42, 0xee2b, +0xeb42, 0xee2b, 0xeb71, 0xee4d, 0xeb71, 0xee4d, 0xeb71, 0xee4d, 0xeb65, 0xee2c, 0xeb65, +0xee2c, 0xeba6, 0xee51, 0xeba6, 0xee51, 0xec82, 0xef07, 0xec82, 0xef07, 0xecca, 0xef1e, +0xecca, 0xef1e, 0xed1f, 0xef35, 0xed1f, 0xef35, 0xed1f, 0xef35, 0xee43, 0xf010, 0xee43, +0xf010, 0xef95, 0xf10d, 0xef95, 0xf10d, 0xf1f3, 0xf30b, 0xf1f3, 0xf30b, 0xf523, 0xf5d1, +0xf523, 0xf5d1, 0xf885, 0xf8c2, 0xf885, 0xf8c2, 0xfbf1, 0xfbb8, 0xfbf1, 0xfbb8, 0xfbf1, +0xfbb8, 0xffea, 0xff39, 0xffea, 0xff39, 0x3ad, 0x284, 0x3ad, 0x284, 0x615, 0x477, +0x615, 0x477, 0x86f, 0x663, 0x86f, 0x663, 0xa87, 0x818, 0xa87, 0x818, 0xc42, +0x97b, 0xc42, 0x97b, 0xc42, 0x97b, 0xdfb, 0xaec, 0xdfb, 0xaec, 0xf7f, 0xc38, +0xf7f, 0xc38, 0x103b, 0xccf, 0x103b, 0xccf, 0xffe, 0xc80, 0xffe, 0xc80, 0xf8f, +0xc13, 0xf8f, 0xc13, 0xf8f, 0xc13, 0xee8, 0xb81, 0xee8, 0xb81, 0xe3b, 0xafc, +0xe3b, 0xafc, 0xd9d, 0xa97, 0xd9d, 0xa97, 0xca5, 0x9e7, 0xca5, 0x9e7, 0xb55, +0x8eb, 0xb55, 0x8eb, 0xaa0, 0x895, 0xaa0, 0x895, 0xaa0, 0x895, 0xa09, 0x863, +0xa09, 0x863, 0x8a5, 0x769, 0x8a5, 0x769, 0x74a, 0x677, 0x74a, 0x677, 0x5bd, +0x551, 0x5bd, 0x551, 0x414, 0x40b, 0x414, 0x40b, 0x414, 0x40b, 0x29c, 0x2ec, +0x29c, 0x2ec, 0x157, 0x1f7, 0x157, 0x1f7, 0xffd3, 0xb7, 0xffd3, 0xb7, 0xfdcd, +0xfee8, 0xfdcd, 0xfee8, 0xfd46, 0xfe8a, 0xfd46, 0xfe8a, 0xfd3a, 0xfe9a, 0xfd3a, 0xfe9a, +0xfd3a, 0xfe9a, 0xfc9a, 0xfe07, 0xfc9a, 0xfe07, 0xfcaa, 0xfe17, 0xfcaa, 0xfe17, 0xfc11, +0xfd72, 0xfc11, 0xfd72, 0xfb2f, 0xfc7b, 0xfb2f, 0xfc7b, 0xfaff, 0xfc2c, 0xfaff, 0xfc2c, +0xfacb, 0xfbd3, 0xfacb, 0xfbd3, 0xfacb, 0xfbd3, 0xfa77, 0xfb56, 0xfa77, 0xfb56, 0xfae9, +0xfb9b, 0xfae9, 0xfb9b, 0xfc9a, 0xfd1f, 0xfc9a, 0xfd1f, 0xfddd, 0xfe35, 0xfddd, 0xfe35, +0xfed5, 0xff03, 0xfed5, 0xff03, 0xfed5, 0xff03, 0x6a, 0x70, 0x6a, 0x70, 0x21d, +0x201, 0x21d, 0x201, 0x374, 0x339, 0x374, 0x339, 0x4ce, 0x478, 0x4ce, 0x478, +0x5f9, 0x58e, 0x5f9, 0x58e, 0x667, 0x5e8, 0x667, 0x5e8, 0x667, 0x5e8, 0x6fa, +0x66c, 0x6fa, 0x66c, 0x754, 0x6b8, 0x754, 0x6b8, 0x716, 0x66c, 0x716, 0x66c, +0x67c, 0x5c4, 0x67c, 0x5c4, 0x5fd, 0x534, 0x5fd, 0x534, 0x604, 0x527, 0x604, +0x527, 0x604, 0x527, 0x630, 0x53b, 0x630, 0x53b, 0x677, 0x565, 0x677, 0x565, +0x6c8, 0x593, 0x6c8, 0x593, 0x715, 0x5b8, 0x715, 0x5b8, 0x7b4, 0x62a, 0x7b4, +0x62a, 0x7b4, 0x62a, 0x931, 0x775, 0x931, 0x775, 0xaae, 0x8bc, 0xaae, 0x8bc, +0xc77, 0xa4d, 0xc77, 0xa4d, 0xebd, 0xc5a, 0xebd, 0xc5a, 0x1079, 0xddc, 0x1079, +0xddc, 0x124f, 0xf7c, 0x124f, 0xf7c, 0x124f, 0xf7c, 0x13a1, 0x109c, 0x13a1, 0x109c, +0x148f, 0x115d, 0x148f, 0x115d, 0x156b, 0x1215, 0x156b, 0x1215, 0x15e0, 0x126f, 0x15e0, +0x126f, 0x16c7, 0x1347, 0x16c7, 0x1347, 0x174b, 0x13c7, 0x174b, 0x13c7, 0x174b, 0x13c7, +0x170e, 0x1394, 0x170e, 0x1394, 0x168e, 0x132b, 0x168e, 0x132b, 0x15d1, 0x1293, 0x15d1, +0x1293, 0x150e, 0x1202, 0x150e, 0x1202, 0x1426, 0x1159, 0x1426, 0x1159, 0x1426, 0x1159, +0x131c, 0x1099, 0x131c, 0x1099, 0x11a1, 0xf73, 0x11a1, 0xf73, 0x1027, 0xe56, 0x1027, +0xe56, 0xee8, 0xd7d, 0xee8, 0xd7d, 0xd43, 0xc41, 0xd43, 0xc41, 0xbc7, 0xb31, +0xbc7, 0xb31, 0xbc7, 0xb31, 0xa41, 0xa19, 0xa41, 0xa19, 0x846, 0x88a, 0x846, +0x88a, 0x5c2, 0x66f, 0x5c2, 0x66f, 0x317, 0x429, 0x317, 0x429, 0x123, 0x294, +0x123, 0x294, 0xff03, 0xcc, 0xff03, 0xcc, 0xff03, 0xcc, 0xfcf0, 0xff09, 0xfcf0, +0xff09, 0xfb06, 0xfd65, 0xfb06, 0xfd65, 0xf91b, 0xfbb9, 0xf91b, 0xfbb9, 0xf833, 0xfb05, +0xf833, 0xfb05, 0xf68b, 0xf989, 0xf68b, 0xf989, 0xf68b, 0xf989, 0xf3c6, 0xf6e6, 0xf3c6, +0xf6e6, 0xf0ee, 0xf429, 0xf0ee, 0xf429, 0xee09, 0xf156, 0xee09, 0xf156, 0xebd1, 0xef2a, +0xebd1, 0xef2a, 0xea3a, 0xed98, 0xea3a, 0xed98, 0xe9be, 0xed1c, 0xe9be, 0xed1c, 0xe9be, +0xed1c, 0xe922, 0xec7a, 0xe922, 0xec7a, 0xe826, 0xeb75, 0xe826, 0xeb75, 0xe83e, 0xeb7f, +0xe83e, 0xeb7f, 0xe7fc, 0xeb2b, 0xe7fc, 0xeb2b, 0xe7e4, 0xeafd, 0xe7e4, 0xeafd, 0xe859, +0xeb58, 0xe859, 0xeb58, 0xe859, 0xeb58, 0xe8c7, 0xeba8, 0xe8c7, 0xeba8, 0xe922, 0xebe0, +0xe922, 0xebe0, 0xe910, 0xeba7, 0xe910, 0xeba7, 0xe979, 0xebe4, 0xe979, 0xebe4, 0xe9c6, +0xebff, 0xe9c6, 0xebff, 0xe9c6, 0xebff, 0xe9e4, 0xebe5, 0xe9e4, 0xebe5, 0xea2d, 0xebf2, +0xea2d, 0xebf2, 0xea7a, 0xebfb, 0xea7a, 0xebfb, 0xeb85, 0xecbc, 0xeb85, 0xecbc, 0xed0b, +0xedf2, 0xed0b, 0xedf2, 0xeeb3, 0xef46, 0xeeb3, 0xef46, 0xeeb3, 0xef46, 0xf0b9, 0xf0f3, +0xf0b9, 0xf0f3, 0xf399, 0xf375, 0xf399, 0xf375, 0xf6e5, 0xf662, 0xf6e5, 0xf662, 0xfa31, +0xf94d, 0xfa31, 0xf94d, 0xfd72, 0xfc2d, 0xfd72, 0xfc2d, 0x97, 0xfef2, 0x97, 0xfef2, +0x97, 0xfef2, 0x41e, 0x21c, 0x41e, 0x21c, 0x7e0, 0x585, 0x7e0, 0x585, 0xb8b, +0x8de, 0xb8b, 0x8de, 0xee9, 0xbf0, 0xee9, 0xbf0, 0x126c, 0xf2f, 0x126c, 0xf2f, +0x126c, 0xf2f, 0x15aa, 0x1233, 0x15aa, 0x1233, 0x17be, 0x1417, 0x17be, 0x1417, 0x1940, +0x1574, 0x1940, 0x1574, 0x1a4c, 0x1666, 0x1a4c, 0x1666, 0x1ae8, 0x16f2, 0x1ae8, 0x16f2, +0x1b13, 0x1719, 0x1b13, 0x1719, 0x1b13, 0x1719, 0x1b22, 0x172d, 0x1b22, 0x172d, 0x1b80, +0x1798, 0x1b80, 0x1798, 0x1c1b, 0x184a, 0x1c1b, 0x184a, 0x1cd2, 0x191f, 0x1cd2, 0x191f, +0x1d0a, 0x197b, 0x1d0a, 0x197b, 0x1d41, 0x19da, 0x1d41, 0x19da, 0x1d41, 0x19da, 0x1d50, +0x1a14, 0x1d50, 0x1a14, 0x1ce9, 0x19db, 0x1ce9, 0x19db, 0x1d4f, 0x1a6e, 0x1d4f, 0x1a6e, +0x1dcc, 0x1b19, 0x1dcc, 0x1b19, 0x1d9f, 0x1b19, 0x1d9f, 0x1b19, 0x1d9f, 0x1b19, 0x1cf4, +0x1a99, 0x1cf4, 0x1a99, 0x1bf5, 0x19c3, 0x1bf5, 0x19c3, 0x1b7b, 0x196e, 0x1b7b, 0x196e, +0x1b0d, 0x1924, 0x1b0d, 0x1924, 0x1acf, 0x1907, 0x1acf, 0x1907, 0x1ac9, 0x191f, 0x1ac9, +0x191f, 0x1ac9, 0x191f, 0x1a64, 0x18d7, 0x1a64, 0x18d7, 0x1a53, 0x18e2, 0x1a53, 0x18e2, +0x1a16, 0x18c1, 0x1a16, 0x18c1, 0x1912, 0x17d8, 0x1912, 0x17d8, 0x1783, 0x1665, 0x1783, +0x1665, 0x157f, 0x147d, 0x157f, 0x147d, 0x157f, 0x147d, 0x13e8, 0x1305, 0x13e8, 0x1305, +0x12f8, 0x1236, 0x12f8, 0x1236, 0x11c9, 0x1129, 0x11c9, 0x1129, 0x106e, 0xff2, 0x106e, +0xff2, 0xf56, 0xf00, 0xf56, 0xf00, 0xf56, 0xf00, 0xeac, 0xe7c, 0xeac, 0xe7c, +0xe53, 0xe4a, 0xe53, 0xe4a, 0xddf, 0xdfc, 0xddf, 0xdfc, 0xd11, 0xd53, 0xd11, +0xd53, 0xbc5, 0xc29, 0xbc5, 0xc29, 0xa19, 0xa9c, 0xa19, 0xa9c, 0xa19, 0xa9c, +0x7dd, 0x87a, 0x7dd, 0x87a, 0x59b, 0x64c, 0x59b, 0x64c, 0x381, 0x441, 0x381, +0x441, 0x1c7, 0x28e, 0x1c7, 0x28e, 0x47, 0x10f, 0x47, 0x10f, 0x47, 0x10f, +0xfe0a, 0xfeca, 0xfe0a, 0xfeca, 0xfc42, 0xfcf2, 0xfc42, 0xfcf2, 0xfaf7, 0xfb90, 0xfaf7, +0xfb90, 0xf9e2, 0xfa5d, 0xf9e2, 0xfa5d, 0xf907, 0xf95f, 0xf907, 0xf95f, 0xf81f, 0xf84e, +0xf81f, 0xf84e, 0xf81f, 0xf84e, 0xf83e, 0xf841, 0xf83e, 0xf841, 0xf900, 0xf8d4, 0xf900, +0xf8d4, 0xfa2a, 0xf9d0, 0xfa2a, 0xf9d0, 0xfb75, 0xfaed, 0xfb75, 0xfaed, 0xfc58, 0xfba5, +0xfc58, 0xfba5, 0xfd00, 0xfc26, 0xfd00, 0xfc26, 0xfd00, 0xfc26, 0xfd1b, 0xfc20, 0xfd1b, +0xfc20, 0xfda4, 0xfc90, 0xfda4, 0xfc90, 0xfe87, 0xfd60, 0xfe87, 0xfd60, 0xfecb, 0xfd9c, +0xfecb, 0xfd9c, 0xfebf, 0xfd90, 0xfebf, 0xfd90, 0xfebf, 0xfd90, 0xfdc1, 0xfc9b, 0xfdc1, +0xfc9b, 0xfc24, 0xfb11, 0xfc24, 0xfb11, 0xfab2, 0xf9bb, 0xfab2, 0xf9bb, 0xf92f, 0xf85c, +0xf92f, 0xf85c, 0xf7d4, 0xf72d, 0xf7d4, 0xf72d, 0xf698, 0xf622, 0xf698, 0xf622, 0xf698, +0xf622, 0xf566, 0xf525, 0xf566, 0xf525, 0xf433, 0xf42a, 0xf433, 0xf42a, 0xf345, 0xf375, +0xf345, 0xf375, 0xf28e, 0xf2f7, 0xf28e, 0xf2f7, 0xf1b9, 0xf258, 0xf1b9, 0xf258, 0xf180, +0xf253, 0xf180, 0xf253, 0xf180, 0xf253, 0xf1ae, 0xf2af, 0xf1ae, 0xf2af, 0xf1a8, 0xf2d1, +0xf1a8, 0xf2d1, 0xf1df, 0xf32a, 0xf1df, 0xf32a, 0xf213, 0xf379, 0xf213, 0xf379, 0xf268, +0xf3e1, 0xf268, 0xf3e1, 0xf268, 0xf3e1, 0xf316, 0xf49b, 0xf316, 0xf49b, 0xf42a, 0xf5b4, +0xf42a, 0xf5b4, 0xf5a2, 0xf72a, 0xf5a2, 0xf72a, 0xf683, 0xf804, 0xf683, 0xf804, 0xf7dc, +0xf951, 0xf7dc, 0xf951, 0xf8f3, 0xfa5a, 0xf8f3, 0xfa5a, 0xf8f3, 0xfa5a, 0xf93e, 0xfa95, +0xf93e, 0xfa95, 0xf9e1, 0xfb27, 0xf9e1, 0xfb27, 0xfa2f, 0xfb64, 0xfa2f, 0xfb64, 0xfac6, +0xfbed, 0xfac6, 0xfbed, 0xfb48, 0xfc65, 0xfb48, 0xfc65, 0xfc57, 0xfd6c, 0xfc57, 0xfd6c, +0xfc57, 0xfd6c, 0xfd75, 0xfe87, 0xfd75, 0xfe87, 0xfdcc, 0xfee0, 0xfdcc, 0xfee0, 0xfe7d, +0xff99, 0xfe7d, 0xff99, 0xfec5, 0xffed, 0xfec5, 0xffed, 0xff28, 0x61, 0xff28, 0x61, +0xff28, 0x61, 0xff50, 0x9e, 0xff50, 0x9e, 0xff25, 0x8b, 0xff25, 0x8b, 0xfeb6, +0x36, 0xfeb6, 0x36, 0xfd87, 0xff23, 0xfd87, 0xff23, 0xfbea, 0xfda1, 0xfbea, 0xfda1, +0xf9d4, 0xfba4, 0xf9d4, 0xfba4, 0xf9d4, 0xfba4, 0xf803, 0xf9e9, 0xf803, 0xf9e9, 0xf683, +0xf87c, 0xf683, 0xf87c, 0xf516, 0xf71d, 0xf516, 0xf71d, 0xf300, 0xf50f, 0xf300, 0xf50f, +0xf0a1, 0xf2b1, 0xf0a1, 0xf2b1, 0xeeb2, 0xf0be, 0xeeb2, 0xf0be, 0xeeb2, 0xf0be, 0xed23, +0xef24, 0xed23, 0xef24, 0xec9a, 0xee89, 0xec9a, 0xee89, 0xec87, 0xee60, 0xec87, 0xee60, +0xecdb, 0xee98, 0xecdb, 0xee98, 0xedd8, 0xef75, 0xedd8, 0xef75, 0xedd8, 0xef75, 0xeef4, +0xf06f, 0xeef4, 0xf06f, 0xf059, 0xf1b0, 0xf059, 0xf1b0, 0xf1bc, 0xf2ef, 0xf1bc, 0xf2ef, +0xf2b3, 0xf3c5, 0xf2b3, 0xf3c5, 0xf3c6, 0xf4b8, 0xf3c6, 0xf4b8, 0xf4b2, 0xf58a, 0xf4b2, +0xf58a, 0xf4b2, 0xf58a, 0xf532, 0xf5f5, 0xf532, 0xf5f5, 0xf5a5, 0xf659, 0xf5a5, 0xf659, +0xf5d1, 0xf67d, 0xf5d1, 0xf67d, 0xf5a0, 0xf64c, 0xf5a0, 0xf64c, 0xf583, 0xf638, 0xf583, +0xf638, 0xf4eb, 0xf5b0, 0xf4eb, 0xf5b0, 0xf4eb, 0xf5b0, 0xf3c8, 0xf4a5, 0xf3c8, 0xf4a5, +0xf2f7, 0xf3f2, 0xf2f7, 0xf3f2, 0xf1db, 0xf2f9, 0xf1db, 0xf2f9, 0xf090, 0xf1d7, 0xf090, +0xf1d7, 0xef84, 0xf0f5, 0xef84, 0xf0f5, 0xef84, 0xf0f5, 0xeeac, 0xf049, 0xeeac, 0xf049, +0xee5e, 0xf028, 0xee5e, 0xf028, 0xee21, 0xf016, 0xee21, 0xf016, 0xedb0, 0xefcc, 0xedb0, +0xefcc, 0xecff, 0xef3d, 0xecff, 0xef3d, 0xec3b, 0xee94, 0xec3b, 0xee94, 0xec3b, 0xee94, +0xebf5, 0xee62, 0xebf5, 0xee62, 0xeb7b, 0xedf5, 0xeb7b, 0xedf5, 0xeb31, 0xedad, 0xeb31, +0xedad, 0xebe7, 0xee5c, 0xebe7, 0xee5c, 0xecd7, 0xef3c, 0xecd7, 0xef3c, 0xee61, 0xf0ab, +0xee61, 0xf0ab, 0xee61, 0xf0ab, 0xefa7, 0xf1cf, 0xefa7, 0xf1cf, 0xf0a2, 0xf2a0, 0xf0a2, +0xf2a0, 0xf15c, 0xf328, 0xf15c, 0xf328, 0xf18a, 0xf31f, 0xf18a, 0xf31f, 0xf285, 0xf3e0, +0xf285, 0xf3e0, 0xf285, 0xf3e0, 0xf356, 0xf473, 0xf356, 0xf473, 0xf48d, 0xf56b, 0xf48d, +0xf56b, 0xf631, 0xf6cf, 0xf631, 0xf6cf, 0xf7cc, 0xf82c, 0xf7cc, 0xf82c, 0xf963, 0xf989, +0xf963, 0xf989, 0xfaf8, 0xfae7, 0xfaf8, 0xfae7, 0xfaf8, 0xfae7, 0xfd29, 0xfce5, 0xfd29, +0xfce5, 0xfed1, 0xfe60, 0xfed1, 0xfe60, 0xdc, 0x44, 0xdc, 0x44, 0x2bf, 0x206, +0x2bf, 0x206, 0x3f8, 0x323, 0x3f8, 0x323, 0x4f1, 0x406, 0x4f1, 0x406, 0x4f1, +0x406, 0x52e, 0x432, 0x52e, 0x432, 0x551, 0x448, 0x551, 0x448, 0x49b, 0x389, +0x49b, 0x389, 0x41a, 0x302, 0x41a, 0x302, 0x3f6, 0x2da, 0x3f6, 0x2da, 0x3f6, +0x2da, 0x30e, 0x1ed, 0x30e, 0x1ed, 0x262, 0x13d, 0x262, 0x13d, 0x1f1, 0xc8, +0x1f1, 0xc8, 0x239, 0x109, 0x239, 0x109, 0x2fd, 0x1c4, 0x2fd, 0x1c4, 0x33f, +0x1fb, 0x33f, 0x1fb, 0x33f, 0x1fb, 0x3e9, 0x297, 0x3e9, 0x297, 0x4d2, 0x36f, +0x4d2, 0x36f, 0x60b, 0x495, 0x60b, 0x495, 0x76b, 0x5e1, 0x76b, 0x5e1, 0x898, +0x6f9, 0x898, 0x6f9, 0xa4b, 0x896, 0xa4b, 0x896, 0xa4b, 0x896, 0xc09, 0xa3f, +0xc09, 0xa3f, 0xda7, 0xbc9, 0xda7, 0xbc9, 0xedf, 0xcf1, 0xedf, 0xcf1, 0xfbc, +0xdc0, 0xfbc, 0xdc0, 0xfdc, 0xdd6, 0xfdc, 0xdd6, 0xfdc, 0xdd6, 0xf61, 0xd56, +0xf61, 0xd56, 0xeff, 0xcf6, 0xeff, 0xcf6, 0xe07, 0xc06, 0xe07, 0xc06, 0xce2, +0xaee, 0xce2, 0xaee, 0xbd0, 0x9f0, 0xbd0, 0x9f0, 0xadb, 0x915, 0xadb, 0x915, +0xadb, 0x915, 0xa17, 0x870, 0xa17, 0x870, 0x8f9, 0x777, 0x8f9, 0x777, 0x7a8, +0x64f, 0x7a8, 0x64f, 0x661, 0x533, 0x661, 0x533, 0x592, 0x491, 0x592, 0x491, +0x592, 0x491, 0x557, 0x485, 0x557, 0x485, 0x490, 0x3ed, 0x490, 0x3ed, 0x36f, +0x2f9, 0x36f, 0x2f9, 0x230, 0x1e4, 0x230, 0x1e4, 0xe1, 0xbc, 0xe1, 0xbc, +0xfff3, 0xffef, 0xfff3, 0xffef, 0xfff3, 0xffef, 0xfedb, 0xfef3, 0xfedb, 0xfef3, 0xfe89, +0xfeb7, 0xfe89, 0xfeb7, 0xfed2, 0xff10, 0xfed2, 0xff10, 0xff02, 0xff48, 0xff02, 0xff48, +0xff6c, 0xffb5, 0xff6c, 0xffb5, 0xff95, 0xffd9, 0xff95, 0xffd9, 0xff95, 0xffd9, 0xff04, +0xff3f, 0xff04, 0xff3f, 0xfe90, 0xfebc, 0xfe90, 0xfebc, 0xfe87, 0xfe9f, 0xfe87, 0xfe9f, +0xfe53, 0xfe54, 0xfe53, 0xfe54, 0xfec1, 0xfea8, 0xfec1, 0xfea8, 0xfec1, 0xfea8, 0xff24, +0xfef1, 0xff24, 0xfef1, 0x55, 0x6, 0x55, 0x6, 0x2be, 0x254, 0x2be, 0x254, +0x49f, 0x41b, 0x49f, 0x41b, 0x64a, 0x5af, 0x64a, 0x5af, 0x7df, 0x730, 0x7df, +0x730, 0x7df, 0x730, 0x9cc, 0x90c, 0x9cc, 0x90c, 0xb32, 0xa65, 0xb32, 0xa65, +0xb50, 0xa7b, 0xb50, 0xa7b, 0xb5f, 0xa86, 0xb5f, 0xa86, 0xb66, 0xa8c, 0xb66, +0xa8c, 0xb03, 0xa2d, 0xb03, 0xa2d, 0xb03, 0xa2d, 0xa69, 0x99b, 0xa69, 0x99b, +0x9b9, 0x8f6, 0x9b9, 0x8f6, 0x8d1, 0x81b, 0x8d1, 0x81b, 0x78b, 0x6e5, 0x78b, +0x6e5, 0x639, 0x5a4, 0x639, 0x5a4, 0x639, 0x5a4, 0x4d1, 0x44f, 0x4d1, 0x44f, +0x3c0, 0x353, 0x3c0, 0x353, 0x368, 0x30f, 0x368, 0x30f, 0x32e, 0x2e9, 0x32e, +0x2e9, 0x35b, 0x32a, 0x35b, 0x32a, 0x386, 0x36a, 0x386, 0x36a, 0x386, 0x36a, +0x327, 0x31e, 0x327, 0x31e, 0x290, 0x29b, 0x290, 0x29b, 0x2b2, 0x2d2, 0x2b2, +0x2d2, 0x31f, 0x353, 0x31f, 0x353, 0x2e0, 0x329, 0x2e0, 0x329, 0x302, 0x360, +0x302, 0x360, 0x302, 0x360, 0x2e5, 0x35a, 0x2e5, 0x35a, 0x1da, 0x267, 0x1da, +0x267, 0x66, 0x10c, 0x66, 0x10c, 0xfed2, 0xff93, 0xfed2, 0xff93, 0xfce0, 0xfdbd, +0xfce0, 0xfdbd, 0xfce0, 0xfdbd, 0xfa90, 0xfb89, 0xfa90, 0xfb89, 0xf87b, 0xf992, 0xf87b, +0xf992, 0xf6a5, 0xf7d9, 0xf6a5, 0xf7d9, 0xf4e9, 0xf63c, 0xf4e9, 0xf63c, 0xf38b, 0xf4fb, +0xf38b, 0xf4fb, 0xf252, 0xf3dd, 0xf252, 0xf3dd, 0xf252, 0xf3dd, 0xf0dc, 0xf27f, 0xf0dc, +0xf27f, 0xf023, 0xf1dd, 0xf023, 0xf1dd, 0xef95, 0xf160, 0xef95, 0xf160, 0xef24, 0xf0fc, +0xef24, 0xf0fc, 0xef17, 0xf0f6, 0xef17, 0xf0f6, 0xef0e, 0xf0ee, 0xef0e, 0xf0ee, 0xef0e, +0xf0ee, 0xefae, 0xf188, 0xefae, 0xf188, 0xf039, 0xf207, 0xf039, 0xf207, 0xf0fd, 0xf2b7, +0xf0fd, 0xf2b7, 0xf245, 0xf3e3, 0xf245, 0xf3e3, 0xf397, 0xf513, 0xf397, 0xf513, 0xf397, +0xf513, 0xf4ef, 0xf641, 0xf4ef, 0xf641, 0xf68d, 0xf7ae, 0xf68d, 0xf7ae, 0xf850, 0xf93a, +0xf850, 0xf93a, 0xf983, 0xfa32, 0xf983, 0xfa32, 0xfb0a, 0xfb77, 0xfb0a, 0xfb77, 0xfcde, +0xfd08, 0xfcde, 0xfd08, 0xfcde, 0xfd08, 0xfebc, 0xfe9f, 0xfebc, 0xfe9f, 0x103, 0x9e, +0x103, 0x9e, 0x30a, 0x25c, 0x30a, 0x25c, 0x510, 0x41a, 0x510, 0x41a, 0x75a, +0x61b, 0x75a, 0x61b, 0xa59, 0x8d4, 0xa59, 0x8d4, 0xa59, 0x8d4, 0xd80, 0xbb7, +0xd80, 0xbb7, 0xfcf, 0xdc5, 0xfcf, 0xdc5, 0x12b0, 0x1068, 0x12b0, 0x1068, 0x1535, +0x12b2, 0x1535, 0x12b2, 0x1758, 0x149c, 0x1758, 0x149c, 0x1758, 0x149c, 0x196f, 0x167f, +0x196f, 0x167f, 0x1ade, 0x17bc, 0x1ade, 0x17bc, 0x1c9b, 0x1949, 0x1c9b, 0x1949, 0x1d88, +0x1a0a, 0x1d88, 0x1a0a, 0x1e50, 0x1aa8, 0x1e50, 0x1aa8, 0x1ee9, 0x1b19, 0x1ee9, 0x1b19, +0x1ee9, 0x1b19, 0x1f16, 0x1b21, 0x1f16, 0x1b21, 0x1fb4, 0x1b9b, 0x1fb4, 0x1b9b, 0x1fd5, +0x1b9b, 0x1fd5, 0x1b9b, 0x2004, 0x1bac, 0x2004, 0x1bac, 0x20fe, 0x1c8b, 0x20fe, 0x1c8b, +0x2230, 0x1da5, 0x2230, 0x1da5, 0x2230, 0x1da5, 0x232a, 0x1e8b, 0x232a, 0x1e8b, 0x24f9, +0x204c, 0x24f9, 0x204c, 0x2652, 0x219c, 0x2652, 0x219c, 0x26b0, 0x21f8, 0x26b0, 0x21f8, +0x27d8, 0x2326, 0x27d8, 0x2326, 0x27d8, 0x2326, 0x28ff, 0x245b, 0x28ff, 0x245b, 0x2972, +0x24e6, 0x2972, 0x24e6, 0x2983, 0x2518, 0x2983, 0x2518, 0x290c, 0x24cd, 0x290c, 0x24cd, +0x2805, 0x23fe, 0x2805, 0x23fe, 0x26b9, 0x22f3, 0x26b9, 0x22f3, 0x26b9, 0x22f3, 0x251f, +0x21a5, 0x251f, 0x21a5, 0x233c, 0x2018, 0x233c, 0x2018, 0x2053, 0x1d8d, 0x2053, 0x1d8d, +0x1d26, 0x1ac7, 0x1d26, 0x1ac7, 0x1a02, 0x1812, 0x1a02, 0x1812, 0x165e, 0x14e0, 0x165e, +0x14e0, 0x165e, 0x14e0, 0x1314, 0x120d, 0x1314, 0x120d, 0xfe0, 0xf52, 0xfe0, 0xf52, +0xcca, 0xcb3, 0xcca, 0xcb3, 0x990, 0x9ee, 0x990, 0x9ee, 0x6a5, 0x774, 0x6a5, +0x774, 0x6a5, 0x774, 0x3da, 0x513, 0x3da, 0x513, 0xd8, 0x274, 0xd8, 0x274, +0xfdb9, 0xffae, 0xfdb9, 0xffae, 0xfa8e, 0xfcd2, 0xfa8e, 0xfcd2, 0xf7e5, 0xfa6a, 0xf7e5, +0xfa6a, 0xf4f0, 0xf7ac, 0xf4f0, 0xf7ac, 0xf4f0, 0xf7ac, 0xf2f4, 0xf5da, 0xf2f4, 0xf5da, +0xf145, 0xf447, 0xf145, 0xf447, 0xef97, 0xf2aa, 0xef97, 0xf2aa, 0xee6f, 0xf187, 0xee6f, +0xf187, 0xec74, 0xef86, 0xec74, 0xef86, 0xeb29, 0xee2d, 0xeb29, 0xee2d, 0xeb29, 0xee2d, +0xe9f5, 0xece2, 0xe9f5, 0xece2, 0xe91f, 0xebef, 0xe91f, 0xebef, 0xe867, 0xeb16, 0xe867, +0xeb16, 0xe70f, 0xe99a, 0xe70f, 0xe99a, 0xe713, 0xe979, 0xe713, 0xe979, 0xe713, 0xe979, +0xe6d9, 0xe91a, 0xe6d9, 0xe91a, 0xe6b2, 0xe8cd, 0xe6b2, 0xe8cd, 0xe6e4, 0xe8dd, 0xe6e4, +0xe8dd, 0xe78f, 0xe968, 0xe78f, 0xe968, 0xe913, 0xeacf, 0xe913, 0xeacf, 0xe9d5, 0xeb78, +0xe9d5, 0xeb78, 0xe9d5, 0xeb78, 0xeb7f, 0xed0c, 0xeb7f, 0xed0c, 0xecdd, 0xee55, 0xecdd, +0xee55, 0xedc3, 0xef29, 0xedc3, 0xef29, 0xee4e, 0xefa2, 0xee4e, 0xefa2, 0xee3a, 0xef7d, +0xee3a, 0xef7d, 0xee3a, 0xef7d, 0xef17, 0xf046, 0xef17, 0xf046, 0xeeeb, 0xf005, 0xeeeb, +0xf005, 0xef1d, 0xf01e, 0xef1d, 0xf01e, 0xefca, 0xf0ae, 0xefca, 0xf0ae, 0xf0de, 0xf1a0, +0xf0de, 0xf1a0, 0xf254, 0xf2ee, 0xf254, 0xf2ee, 0xf254, 0xf2ee, 0xf33e, 0xf3ab, 0xf33e, +0xf3ab, 0xf5ca, 0xf606, 0xf5ca, 0xf606, 0xf7d4, 0xf7d9, 0xf7d4, 0xf7d9, 0xf9c7, 0xf992, +0xf9c7, 0xf992, 0xfcc3, 0xfc52, 0xfcc3, 0xfc52, 0xff77, 0xfec9, 0xff77, 0xfec9, 0xff77, +0xfec9, 0x22f, 0x144, 0x22f, 0x144, 0x494, 0x370, 0x494, 0x370, 0x793, 0x63b, +0x793, 0x63b, 0xa3e, 0x8b9, 0xa3e, 0x8b9, 0xc76, 0xace, 0xc76, 0xace, 0xc76, +0xace, 0xe9c, 0xcdb, 0xe9c, 0xcdb, 0xf79, 0xdad, 0xf79, 0xdad, 0xfd7, 0xe0e, +0xfd7, 0xe0e, 0xf86, 0xdce, 0xf86, 0xdce, 0xe89, 0xcf4, 0xe89, 0xcf4, 0xd2b, +0xbc8, 0xd2b, 0xbc8, 0xd2b, 0xbc8, 0xb93, 0xa72, 0xb93, 0xa72, 0x9b0, 0x8df, +0x9b0, 0x8df, 0x6ad, 0x63a, 0x6ad, 0x63a, 0x3e7, 0x3de, 0x3e7, 0x3de, 0x180, +0x1ea, 0x180, 0x1ea, 0xff1d, 0x2, 0xff1d, 0x2, 0xff1d, 0x2, 0xfc6d, 0xfdd1, +0xfc6d, 0xfdd1, 0xf986, 0xfb6b, 0xf986, 0xfb6b, 0xf734, 0xf999, 0xf734, 0xf999, 0xf41e, +0xf6ff, 0xf41e, 0xf6ff, 0xf182, 0xf4d7, 0xf182, 0xf4d7, 0xf182, 0xf4d7, 0xeeec, 0xf2ad, +0xeeec, 0xf2ad, 0xebdc, 0xeffe, 0xebdc, 0xeffe, 0xe957, 0xedcd, 0xe957, 0xedcd, 0xe651, +0xeb0b, 0xe651, 0xeb0b, 0xe456, 0xe945, 0xe456, 0xe945, 0xe2e3, 0xe7f8, 0xe2e3, 0xe7f8, +0xe2e3, 0xe7f8, 0xe1b4, 0xe6de, 0xe1b4, 0xe6de, 0xe0e0, 0xe611, 0xe0e0, 0xe611, 0xdf78, +0xe4a1, 0xdf78, 0xe4a1, 0xdebc, 0xe3d0, 0xdebc, 0xe3d0, 0xde17, 0xe30b, 0xde17, 0xe30b, +0xdd69, 0xe232, 0xdd69, 0xe232, 0xdd69, 0xe232, 0xdc79, 0xe111, 0xdc79, 0xe111, 0xdbfe, +0xe05e, 0xdbfe, 0xe05e, 0xdc3b, 0xe060, 0xdc3b, 0xe060, 0xdca9, 0xe091, 0xdca9, 0xe091, +0xde74, 0xe21e, 0xde74, 0xe21e, 0xde74, 0xe21e, 0xdfe9, 0xe356, 0xdfe9, 0xe356, 0xe18b, +0xe4bf, 0xe18b, 0xe4bf, 0xe34f, 0xe64b, 0xe34f, 0xe64b, 0xe47e, 0xe747, 0xe47e, 0xe747, +0xe631, 0xe8c8, 0xe631, 0xe8c8, 0xe6d2, 0xe93d, 0xe6d2, 0xe93d, 0xe6d2, 0xe93d, 0xe7cb, +0xea0a, 0xe7cb, 0xea0a, 0xe858, 0xea6e, 0xe858, 0xea6e, 0xe87c, 0xea69, 0xe87c, 0xea69, +0xe996, 0xeb5b, 0xe996, 0xeb5b, 0xe972, 0xeb0d, 0xe972, 0xeb0d, 0xe9c6, 0xeb34, 0xe9c6, +0xeb34, 0xe9c6, 0xeb34, 0xea92, 0xebcf, 0xea92, 0xebcf, 0xeb66, 0xec6f, 0xeb66, 0xec6f, +0xec83, 0xed53, 0xec83, 0xed53, 0xee18, 0xeea8, 0xee18, 0xeea8, 0xf076, 0xf0c2, 0xf076, +0xf0c2, 0xf076, 0xf0c2, 0xf29b, 0xf29e, 0xf29b, 0xf29e, 0xf5a1, 0xf557, 0xf5a1, 0xf557, +0xf80f, 0xf774, 0xf80f, 0xf774, 0xfa78, 0xf98b, 0xfa78, 0xf98b, 0xfd73, 0xfc33, 0xfd73, +0xfc33, 0xa1, 0xff10, 0xa1, 0xff10, 0xa1, 0xff10, 0x415, 0x236, 0x415, 0x236, +0x668, 0x441, 0x668, 0x441, 0x9c3, 0x75a, 0x9c3, 0x75a, 0xc36, 0x996, 0xc36, +0x996, 0xd9f, 0xad2, 0xd9f, 0xad2, 0xf40, 0xc53, 0xf40, 0xc53, 0xf40, 0xc53, +0xffb, 0xcfc, 0xffb, 0xcfc, 0x1106, 0xe02, 0x1106, 0xe02, 0x1103, 0xe0a, 0x1103, +0xe0a, 0x10ed, 0xe0e, 0x10ed, 0xe0e, 0x1095, 0xdde, 0x1095, 0xdde, 0x1095, 0xdde, +0xfa3, 0xd23, 0xfa3, 0xd23, 0xf0b, 0xcce, 0xf0b, 0xcce, 0xdaf, 0xbbf, 0xdaf, +0xbbf, 0xca3, 0xb0a, 0xca3, 0xb0a, 0xb52, 0xa18, 0xb52, 0xa18, 0x9ce, 0x8f7, +0x9ce, 0x8f7, 0x9ce, 0x8f7, 0x84f, 0x7dd, 0x84f, 0x7dd, 0x714, 0x707, 0x714, +0x707, 0x606, 0x65b, 0x606, 0x65b, 0x42d, 0x4e1, 0x42d, 0x4e1, 0x321, 0x42c, +0x321, 0x42c, 0x180, 0x2d9, 0x180, 0x2d9, 0x180, 0x2d9, 0xffc9, 0x166, 0xffc9, +0x166, 0xfe97, 0x6d, 0xfe97, 0x6d, 0xfd30, 0xff32, 0xfd30, 0xff32, 0xfcbb, 0xfedc, +0xfcbb, 0xfedc, 0xfbdf, 0xfe12, 0xfbdf, 0xfe12, 0xfbdf, 0xfe12, 0xfafd, 0xfd37, 0xfafd, +0xfd37, 0xfa36, 0xfc6a, 0xfa36, 0xfc6a, 0xf9bf, 0xfbe1, 0xf9bf, 0xfbe1, 0xf98d, 0xfb94, +0xf98d, 0xfb94, 0xf927, 0xfb09, 0xf927, 0xfb09, 0xf98f, 0xfb45, 0xf98f, 0xfb45, 0xf98f, +0xfb45, 0xfa00, 0xfb84, 0xfa00, 0xfb84, 0xfa7d, 0xfbca, 0xfa7d, 0xfbca, 0xfaeb, 0xfbfe, +0xfaeb, 0xfbfe, 0xfc37, 0xfd0e, 0xfc37, 0xfd0e, 0xfdec, 0xfe87, 0xfdec, 0xfe87, 0xfe99, +0xfef7, 0xfe99, 0xfef7, 0xfe99, 0xfef7, 0xffa7, 0xffc9, 0xffa7, 0xffc9, 0xc5, 0xae, +0xc5, 0xae, 0x1f3, 0x1a3, 0x1f3, 0x1a3, 0x2f0, 0x269, 0x2f0, 0x269, 0x36d, +0x2b1, 0x36d, 0x2b1, 0x36d, 0x2b1, 0x45f, 0x371, 0x45f, 0x371, 0x4e8, 0x3c8, +0x4e8, 0x3c8, 0x4ec, 0x39c, 0x4ec, 0x39c, 0x4c0, 0x340, 0x4c0, 0x340, 0x50e, +0x35e, 0x50e, 0x35e, 0x5dd, 0x3fd, 0x5dd, 0x3fd, 0x5dd, 0x3fd, 0x61e, 0x40e, +0x61e, 0x40e, 0x75c, 0x51c, 0x75c, 0x51c, 0x8a1, 0x632, 0x8a1, 0x632, 0xa07, +0x768, 0xa07, 0x768, 0xc73, 0x9a4, 0xc73, 0x9a4, 0xdf6, 0xafa, 0xdf6, 0xafa, +0xdf6, 0xafa, 0x101c, 0xcf4, 0x101c, 0xcf4, 0x1210, 0xebf, 0x1210, 0xebf, 0x138d, +0x1017, 0x138d, 0x1017, 0x1557, 0x11c2, 0x1557, 0x11c2, 0x16af, 0x1301, 0x16af, 0x1301, +0x16af, 0x1301, 0x17d7, 0x1419, 0x17d7, 0x1419, 0x186c, 0x14a5, 0x186c, 0x14a5, 0x19b7, +0x15f2, 0x19b7, 0x15f2, 0x1a70, 0x16b6, 0x1a70, 0x16b6, 0x1ad8, 0x1736, 0x1ad8, 0x1736, +0x1ac7, 0x1747, 0x1ac7, 0x1747, 0x1ac7, 0x1747, 0x19c9, 0x1677, 0x19c9, 0x1677, 0x1981, +0x1667, 0x1981, 0x1667, 0x17d4, 0x14fe, 0x17d4, 0x14fe, 0x169c, 0x1414, 0x169c, 0x1414, +0x158e, 0x135e, 0x158e, 0x135e, 0x158e, 0x135e, 0x1371, 0x119f, 0x1371, 0x119f, 0x1207, +0x109a, 0x1207, 0x109a, 0xfe0, 0xede, 0xfe0, 0xede, 0xdcc, 0xd38, 0xdcc, 0xd38, +0xbf3, 0xbcf, 0xbf3, 0xbcf, 0x996, 0x9e2, 0x996, 0x9e2, 0x996, 0x9e2, 0x700, +0x7ba, 0x700, 0x7ba, 0x46f, 0x593, 0x46f, 0x593, 0x250, 0x3da, 0x250, 0x3da, +0xffde, 0x1c6, 0xffde, 0x1c6, 0xfd55, 0xff95, 0xfd55, 0xff95, 0xfa6b, 0xfcfb, 0xfa6b, +0xfcfb, 0xfa6b, 0xfcfb, 0xf754, 0xfa2a, 0xf754, 0xfa2a, 0xf53b, 0xf84d, 0xf53b, 0xf84d, +0xf325, 0xf669, 0xf325, 0xf669, 0xf099, 0xf405, 0xf099, 0xf405, 0xee5e, 0xf1e9, 0xee5e, +0xf1e9, 0xee5e, 0xf1e9, 0xecca, 0xf069, 0xecca, 0xf069, 0xeadb, 0xee85, 0xeadb, 0xee85, +0xe916, 0xecc2, 0xe916, 0xecc2, 0xe7c1, 0xeb66, 0xe7c1, 0xeb66, 0xe657, 0xe9ee, 0xe657, +0xe9ee, 0xe60d, 0xe98e, 0xe60d, 0xe98e, 0xe60d, 0xe98e, 0xe570, 0xe8d5, 0xe570, 0xe8d5, +0xe560, 0xe8a3, 0xe560, 0xe8a3, 0xe60f, 0xe92a, 0xe60f, 0xe92a, 0xe62e, 0xe91b, 0xe62e, +0xe91b, 0xe730, 0xe9eb, 0xe730, 0xe9eb, 0xe7ab, 0xea2f, 0xe7ab, 0xea2f, 0xe7ab, 0xea2f, +0xe853, 0xea9b, 0xe853, 0xea9b, 0xe958, 0xeb60, 0xe958, 0xeb60, 0xe9bc, 0xeb7f, 0xe9bc, +0xeb7f, 0xea1c, 0xeb96, 0xea1c, 0xeb96, 0xea93, 0xebc0, 0xea93, 0xebc0, 0xea93, 0xebc0, +0xebea, 0xecc6, 0xebea, 0xecc6, 0xed9d, 0xee24, 0xed9d, 0xee24, 0xefaf, 0xefde, 0xefaf, +0xefde, 0xf1b3, 0xf188, 0xf1b3, 0xf188, 0xf43e, 0xf3b5, 0xf43e, 0xf3b5, 0xf72a, 0xf643, +0xf72a, 0xf643, 0xf72a, 0xf643, 0xf971, 0xf829, 0xf971, 0xf829, 0xfcce, 0xfb27, 0xfcce, +0xfb27, 0xfffd, 0xfdf8, 0xfffd, 0xfdf8, 0x31b, 0xb8, 0x31b, 0xb8, 0x6f7, 0x43c, +0x6f7, 0x43c, 0xa5b, 0x74b, 0xa5b, 0x74b, 0xa5b, 0x74b, 0xde3, 0xa85, 0xde3, +0xa85, 0x1114, 0xd6e, 0x1114, 0xd6e, 0x1463, 0x107e, 0x1463, 0x107e, 0x179f, 0x1384, +0x179f, 0x1384, 0x199e, 0x1557, 0x199e, 0x1557, 0x199e, 0x1557, 0x1b46, 0x16dd, 0x1b46, +0x16dd, 0x1d01, 0x1880, 0x1d01, 0x1880, 0x1df3, 0x1967, 0x1df3, 0x1967, 0x1e55, 0x19c8, +0x1e55, 0x19c8, 0x1eaa, 0x1a28, 0x1eaa, 0x1a28, 0x1e1f, 0x19b1, 0x1e1f, 0x19b1, 0x1e1f, +0x19b1, 0x1dd9, 0x198b, 0x1dd9, 0x198b, 0x1de8, 0x19c1, 0x1de8, 0x19c1, 0x1df4, 0x19fd, +0x1df4, 0x19fd, 0x1dfe, 0x1a3c, 0x1dfe, 0x1a3c, 0x1e00, 0x1a7a, 0x1e00, 0x1a7a, 0x1dc3, +0x1a7e, 0x1dc3, 0x1a7e, 0x1dc3, 0x1a7e, 0x1caa, 0x19a8, 0x1caa, 0x19a8, 0x1c8d, 0x19cf, +0x1c8d, 0x19cf, 0x1c19, 0x19a0, 0x1c19, 0x19a0, 0x1b4c, 0x1919, 0x1b4c, 0x1919, 0x1a8e, +0x189e, 0x1a8e, 0x189e, 0x1a8e, 0x189e, 0x1997, 0x17e8, 0x1997, 0x17e8, 0x1920, 0x17b0, +0x1920, 0x17b0, 0x1834, 0x16ff, 0x1834, 0x16ff, 0x1788, 0x168b, 0x1788, 0x168b, 0x16e8, +0x1620, 0x16e8, 0x1620, 0x1680, 0x15e9, 0x1680, 0x15e9, 0x1680, 0x15e9, 0x1555, 0x14ec, +0x1555, 0x14ec, 0x13f3, 0x13b5, 0x13f3, 0x13b5, 0x1286, 0x1272, 0x1286, 0x1272, 0x1084, +0x1097, 0x1084, 0x1097, 0xf4b, 0xf83, 0xf4b, 0xf83, 0xdc5, 0xe22, 0xdc5, 0xe22, +0xdc5, 0xe22, 0xcc9, 0xd4a, 0xcc9, 0xd4a, 0xbbc, 0xc60, 0xbbc, 0xc60, 0xa90, +0xb57, 0xa90, 0xb57, 0xa24, 0xb0d, 0xa24, 0xb0d, 0x959, 0xa65, 0x959, 0xa65, +0x959, 0xa65, 0x8ca, 0x9f6, 0x8ca, 0x9f6, 0x87c, 0x9c8, 0x87c, 0x9c8, 0x7c6, +0x92f, 0x7c6, 0x92f, 0x6c4, 0x848, 0x6c4, 0x848, 0x585, 0x721, 0x585, 0x721, +0x3b2, 0x563, 0x3b2, 0x563, 0x3b2, 0x563, 0x1d7, 0x396, 0x1d7, 0x396, 0x18, +0x1e1, 0x18, 0x1e1, 0xfe47, 0x14, 0xfe47, 0x14, 0xfc5e, 0xfe28, 0xfc5e, 0xfe28, +0xfab6, 0xfc77, 0xfab6, 0xfc77, 0xf9ea, 0xfb9b, 0xf9ea, 0xfb9b, 0xf9ea, 0xfb9b, 0xf94d, +0xfae8, 0xf94d, 0xfae8, 0xf8ae, 0xfa2c, 0xf8ae, 0xfa2c, 0xf8a4, 0xf9fe, 0xf8a4, 0xf9fe, +0xf860, 0xf992, 0xf860, 0xf992, 0xf833, 0xf939, 0xf833, 0xf939, 0xf833, 0xf939, 0xf8a2, +0xf979, 0xf8a2, 0xf979, 0xf943, 0xf9e9, 0xf943, 0xf9e9, 0xfae6, 0xfb5a, 0xfae6, 0xfb5a, +0xfc27, 0xfc6b, 0xfc27, 0xfc6b, 0xfce3, 0xfcf8, 0xfce3, 0xfcf8, 0xfdf4, 0xfddf, 0xfdf4, +0xfddf, 0xfdf4, 0xfddf, 0xfe6e, 0xfe34, 0xfe6e, 0xfe34, 0xfea3, 0xfe49, 0xfea3, 0xfe49, +0xfed5, 0xfe63, 0xfed5, 0xfe63, 0xfebf, 0xfe3e, 0xfebf, 0xfe3e, 0xfe2d, 0xfda3, 0xfe2d, +0xfda3, 0xfd36, 0xfcad, 0xfd36, 0xfcad, 0xfd36, 0xfcad, 0xfc77, 0xfbf6, 0xfc77, 0xfbf6, +0xfbc9, 0xfb58, 0xfbc9, 0xfb58, 0xfa67, 0xfa0e, 0xfa67, 0xfa0e, 0xf987, 0xf94c, 0xf987, +0xf94c, 0xf8f7, 0xf8de, 0xf8f7, 0xf8de, 0xf8f7, 0xf8de, 0xf7b7, 0xf7c5, 0xf7b7, 0xf7c5, +0xf6e4, 0xf71c, 0xf6e4, 0xf71c, 0xf645, 0xf6a8, 0xf645, 0xf6a8, 0xf59f, 0xf62c, 0xf59f, +0xf62c, 0xf562, 0xf618, 0xf562, 0xf618, 0xf52a, 0xf605, 0xf52a, 0xf605, 0xf52a, 0xf605, +0xf51c, 0xf618, 0xf51c, 0xf618, 0xf56b, 0xf683, 0xf56b, 0xf683, 0xf57f, 0xf6ad, 0xf57f, +0xf6ad, 0xf5a5, 0xf6e2, 0xf5a5, 0xf6e2, 0xf601, 0xf746, 0xf601, 0xf746, 0xf637, 0xf77d, +0xf637, 0xf77d, 0xf637, 0xf77d, 0xf6c3, 0xf804, 0xf6c3, 0xf804, 0xf7cb, 0xf900, 0xf7cb, +0xf900, 0xf859, 0xf97d, 0xf859, 0xf97d, 0xf926, 0xfa37, 0xf926, 0xfa37, 0xf9cd, 0xfac5, +0xf9cd, 0xfac5, 0xf9cd, 0xfac5, 0xf9fa, 0xfad9, 0xf9fa, 0xfad9, 0xfafd, 0xfbc1, 0xfafd, +0xfbc1, 0xfb2f, 0xfbda, 0xfb2f, 0xfbda, 0xfb2d, 0xfbc0, 0xfb2d, 0xfbc0, 0xfb8f, 0xfc0d, +0xfb8f, 0xfc0d, 0xfbe9, 0xfc57, 0xfbe9, 0xfc57, 0xfbe9, 0xfc57, 0xfc4a, 0xfcac, 0xfc4a, +0xfcac, 0xfc44, 0xfc9f, 0xfc44, 0xfc9f, 0xfc9e, 0xfcf7, 0xfc9e, 0xfcf7, 0xfd0c, 0xfd68, +0xfd0c, 0xfd68, 0xfd08, 0xfd6d, 0xfd08, 0xfd6d, 0xfd08, 0xfd6d, 0xfcc9, 0xfd3b, 0xfcc9, +0xfd3b, 0xfc2f, 0xfcb2, 0xfc2f, 0xfcb2, 0xfb1b, 0xfbb1, 0xfb1b, 0xfbb1, 0xf9fa, 0xfaa6, +0xf9fa, 0xfaa6, 0xf80f, 0xf8d1, 0xf80f, 0xf8d1, 0xf693, 0xf76c, 0xf693, 0xf76c, 0xf693, +0xf76c, 0xf557, 0xf644, 0xf557, 0xf644, 0xf3e1, 0xf4df, 0xf3e1, 0xf4df, 0xf242, 0xf34f, +0xf242, 0xf34f, 0xf075, 0xf18b, 0xf075, 0xf18b, 0xeffe, 0xf118, 0xeffe, 0xf118, 0xeed2, +0xefec, 0xeed2, 0xefec, 0xeed2, 0xefec, 0xee8c, 0xef9f, 0xee8c, 0xef9f, 0xef58, 0xf060, +0xef58, 0xf060, 0xefb7, 0xf0af, 0xefb7, 0xf0af, 0xf037, 0xf11a, 0xf037, 0xf11a, 0xf08c, +0xf158, 0xf08c, 0xf158, 0xf08c, 0xf158, 0xf039, 0xf0ec, 0xf039, 0xf0ec, 0xf037, 0xf0cf, +0xf037, 0xf0cf, 0xf19d, 0xf21c, 0xf19d, 0xf21c, 0xf2bd, 0xf325, 0xf2bd, 0xf325, 0xf3bc, +0xf410, 0xf3bc, 0xf410, 0xf38e, 0xf3d4, 0xf38e, 0xf3d4, 0xf38e, 0xf3d4, 0xf519, 0xf555, +0xf519, 0xf555, 0xf541, 0xf57b, 0xf541, 0xf57b, 0xf377, 0xf3b7, 0xf377, 0xf3b7, 0xf4a9, +0xf4f7, 0xf4a9, 0xf4f7, 0xf3f6, 0xf45a, 0xf3f6, 0xf45a, 0xf2d0, 0xf351, 0xf2d0, 0xf351, +0xf2d0, 0xf351, 0xf24d, 0xf2f3, 0xf24d, 0xf2f3, 0xf1d1, 0xf2a3, 0xf1d1, 0xf2a3, 0xf0b9, +0xf1bc, 0xf0b9, 0xf1bc, 0xef83, 0xf0bc, 0xef83, 0xf0bc, 0xef0f, 0xf081, 0xef0f, 0xf081, +0xef0f, 0xf081, 0xee37, 0xefe2, 0xee37, 0xefe2, 0xede1, 0xefc5, 0xede1, 0xefc5, 0xeccc, +0xeee7, 0xeccc, 0xeee7, 0xec48, 0xee96, 0xec48, 0xee96, 0xec8b, 0xef05, 0xec8b, 0xef05, +0xed2f, 0xefcf, 0xed2f, 0xefcf, 0xed2f, 0xefcf, 0xed47, 0xf004, 0xed47, 0xf004, 0xed3f, +0xf010, 0xed3f, 0xf010, 0xecf7, 0xefd2, 0xecf7, 0xefd2, 0xeccf, 0xefaa, 0xeccf, 0xefaa, +0xedbc, 0xf08d, 0xedbc, 0xf08d, 0xedec, 0xf0a8, 0xedec, 0xf0a8, 0xedec, 0xf0a8, 0xefc8, +0xf266, 0xefc8, 0xf266, 0xf0dd, 0xf355, 0xf0dd, 0xf355, 0xf1ba, 0xf404, 0xf1ba, 0xf404, +0xf3b5, 0xf5cb, 0xf3b5, 0xf5cb, 0xf4dd, 0xf6bb, 0xf4dd, 0xf6bb, 0xf4dd, 0xf6bb, 0xf692, +0xf834, 0xf692, 0xf834, 0xf7bf, 0xf925, 0xf7bf, 0xf925, 0xf954, 0xfa7d, 0xf954, 0xfa7d, +0xfb60, 0xfc4d, 0xfb60, 0xfc4d, 0xfdc4, 0xfe79, 0xfdc4, 0xfe79, 0xffc0, 0x41, 0xffc0, +0x41, 0xffc0, 0x41, 0xbe, 0x10f, 0xbe, 0x10f, 0x2f9, 0x320, 0x2f9, 0x320, +0x4e3, 0x4e4, 0x4e3, 0x4e4, 0x5bd, 0x59f, 0x5bd, 0x59f, 0x774, 0x73c, 0x774, +0x73c, 0x7ff, 0x7b2, 0x7ff, 0x7b2, 0x7ff, 0x7b2, 0x7fa, 0x79c, 0x7fa, 0x79c, +0x922, 0x8b7, 0x922, 0x8b7, 0x846, 0x7cf, 0x846, 0x7cf, 0x7fe, 0x77d, 0x7fe, +0x77d, 0x7be, 0x733, 0x7be, 0x733, 0x7be, 0x733, 0x713, 0x67c, 0x713, 0x67c, +0x8b1, 0x80d, 0x8b1, 0x80d, 0x784, 0x6d1, 0x784, 0x6d1, 0x734, 0x66d, 0x734, +0x66d, 0x834, 0x757, 0x834, 0x757, 0x72c, 0x634, 0x72c, 0x634, 0x72c, 0x634, +0x866, 0x74f, 0x866, 0x74f, 0x93d, 0x803, 0x93d, 0x803, 0x93b, 0x7dc, 0x93b, +0x7dc, 0x9fe, 0x877, 0x9fe, 0x877, 0xb37, 0x987, 0xb37, 0x987, 0xcea, 0xb11, +0xcea, 0xb11, 0xcea, 0xb11, 0xd29, 0xb28, 0xd29, 0xb28, 0xd29, 0xb02, 0xd29, +0xb02, 0xe29, 0xbe0, 0xe29, 0xbe0, 0xe3b, 0xbd5, 0xe3b, 0xbd5, 0xcd6, 0xa58, +0xcd6, 0xa58, 0xcd6, 0xa58, 0xbff, 0x970, 0xbff, 0x970, 0xc0d, 0x975, 0xc0d, +0x975, 0xb68, 0x8cf, 0xb68, 0x8cf, 0x9fd, 0x76a, 0x9fd, 0x76a, 0x998, 0x714, +0x998, 0x714, 0x87b, 0x60d, 0x87b, 0x60d, 0x87b, 0x60d, 0x6db, 0x48a, 0x6db, +0x48a, 0x620, 0x3f2, 0x620, 0x3f2, 0x47d, 0x277, 0x47d, 0x277, 0x3c0, 0x1e6, +0x3c0, 0x1e6, 0x2e7, 0x13b, 0x2e7, 0x13b, 0x1b6, 0x38, 0x1b6, 0x38, 0x1b6, +0x38, 0x1c5, 0x76, 0x1c5, 0x76, 0x13e, 0x1a, 0x13e, 0x1a, 0xe0, 0xffe5, +0xe0, 0xffe5, 0x9b, 0xffc4, 0x9b, 0xffc4, 0xffdf, 0xff26, 0xffdf, 0xff26, 0xffdf, +0xff26, 0x51, 0xffb1, 0x51, 0xffb1, 0x1, 0xff72, 0x1, 0xff72, 0xff59, 0xfed4, +0xff59, 0xfed4, 0xff62, 0xfee1, 0xff62, 0xfee1, 0xff8a, 0xff05, 0xff8a, 0xff05, 0x3f, +0xffb1, 0x3f, 0xffb1, 0x3f, 0xffb1, 0xff6c, 0xfed0, 0xff6c, 0xfed0, 0xffec, 0xff3d, +0xffec, 0xff3d, 0x71, 0xffac, 0x71, 0xffac, 0x14e, 0x71, 0x14e, 0x71, 0x28c, +0x197, 0x28c, 0x197, 0x26e, 0x161, 0x26e, 0x161, 0x26e, 0x161, 0x4c0, 0x39d, +0x4c0, 0x39d, 0x664, 0x52f, 0x664, 0x52f, 0x7e0, 0x69b, 0x7e0, 0x69b, 0x8de, +0x78f, 0x8de, 0x78f, 0xb6a, 0xa16, 0xb6a, 0xa16, 0xb6a, 0xa16, 0xcda, 0xb87, +0xcda, 0xb87, 0xd17, 0xbca, 0xd17, 0xbca, 0xe1d, 0xcdc, 0xe1d, 0xcdc, 0xb42, +0xa12, 0xb42, 0xa12, 0xc8b, 0xb70, 0xc8b, 0xb70, 0xc62, 0xb60, 0xc62, 0xb60, +0xc62, 0xb60, 0xa35, 0x950, 0xa35, 0x950, 0x963, 0x89e, 0x963, 0x89e, 0x777, +0x6d1, 0x777, 0x6d1, 0x6b9, 0x634, 0x6b9, 0x634, 0x4c5, 0x461, 0x4c5, 0x461, +0x3e4, 0x39f, 0x3e4, 0x39f, 0x3e4, 0x39f, 0x24c, 0x225, 0x24c, 0x225, 0x165, +0x158, 0x165, 0x158, 0xe, 0x1a, 0xe, 0x1a, 0xffeb, 0xc, 0xffeb, 0xc, +0x121, 0x155, 0x121, 0x155, 0x121, 0x155, 0xff5a, 0xff9f, 0xff5a, 0xff9f, 0xffd8, +0x2b, 0xffd8, 0x2b, 0xa8, 0x108, 0xa8, 0x108, 0xff8f, 0xfffa, 0xff8f, 0xfffa, +0xfe7d, 0xfef2, 0xfe7d, 0xfef2, 0xfee7, 0xff67, 0xfee7, 0xff67, 0xfee7, 0xff67, 0xfe19, +0xfea6, 0xfe19, 0xfea6, 0xfc80, 0xfd1a, 0xfc80, 0xfd1a, 0xfb27, 0xfbd0, 0xfb27, 0xfbd0, +0xf96d, 0xfa26, 0xf96d, 0xfa26, 0xf8a9, 0xf975, 0xf8a9, 0xf975, 0xf8a9, 0xf975, 0xf669, +0xf74b, 0xf669, 0xf74b, 0xf3fd, 0xf4f6, 0xf3fd, 0xf4f6, 0xf27f, 0xf391, 0xf27f, 0xf391, +0xf1bd, 0xf2ea, 0xf1bd, 0xf2ea, 0xf050, 0xf197, 0xf050, 0xf197, 0xef18, 0xf079, 0xef18, +0xf079, 0xef18, 0xf079, 0xef43, 0xf0bc, 0xef43, 0xf0bc, 0xef5a, 0xf0e8, 0xef5a, 0xf0e8, +0xf02e, 0xf1cf, 0xf02e, 0xf1cf, 0xf11c, 0xf2ca, 0xf11c, 0xf2ca, 0xf1b9, 0xf36e, 0xf1b9, +0xf36e, 0xf284, 0xf43a, 0xf284, 0xf43a, 0xf284, 0xf43a, 0xf30f, 0xf4bf, 0xf30f, 0xf4bf, +0xf34b, 0xf4ec, 0xf34b, 0xf4ec, 0xf46b, 0xf5f6, 0xf46b, 0xf5f6, 0xf612, 0xf77e, 0xf612, +0xf77e, 0xf74f, 0xf893, 0xf74f, 0xf893, 0xf74f, 0xf893, 0xf89f, 0xf9b4, 0xf89f, 0xf9b4, +0xfb20, 0xfbfd, 0xfb20, 0xfbfd, 0xfc8e, 0xfd2f, 0xfc8e, 0xfd2f, 0xfe86, 0xfee3, 0xfe86, +0xfee3, 0x122, 0x138, 0x122, 0x138, 0x103, 0xce, 0x103, 0xce, 0x103, 0xce, +0x2dc, 0x25a, 0x2dc, 0x25a, 0x58d, 0x4be, 0x58d, 0x4be, 0x7fb, 0x6df, 0x7fb, +0x6df, 0xb28, 0x9c1, 0xb28, 0x9c1, 0xce2, 0xb33, 0xce2, 0xb33, 0xe85, 0xc93, +0xe85, 0xc93, 0xe85, 0xc93, 0x11b5, 0xf83, 0x11b5, 0xf83, 0x1422, 0x11b6, 0x1422, +0x11b6, 0x1575, 0x12d6, 0x1575, 0x12d6, 0x17e3, 0x1516, 0x17e3, 0x1516, 0x1985, 0x1690, +0x1985, 0x1690, 0x1985, 0x1690, 0x1b07, 0x17f1, 0x1b07, 0x17f1, 0x1be7, 0x18b5, 0x1be7, +0x18b5, 0x1c70, 0x1929, 0x1c70, 0x1929, 0x1c4e, 0x18f6, 0x1c4e, 0x18f6, 0x1bc7, 0x1863, +0x1bc7, 0x1863, 0x1d13, 0x19a6, 0x1d13, 0x19a6, 0x1d13, 0x19a6, 0x1d74, 0x1a04, 0x1d74, +0x1a04, 0x1d5d, 0x19ec, 0x1d5d, 0x19ec, 0x1d90, 0x1a20, 0x1d90, 0x1a20, 0x1f35, 0x1bca, +0x1f35, 0x1bca, 0x2103, 0x1da0, 0x2103, 0x1da0, 0x2078, 0x1d1f, 0x2078, 0x1d1f, 0x2078, +0x1d1f, 0x203c, 0x1cf1, 0x203c, 0x1cf1, 0x2112, 0x1dd7, 0x2112, 0x1dd7, 0x2122, 0x1dfc, +0x2122, 0x1dfc, 0x21bb, 0x1eae, 0x21bb, 0x1eae, 0x21fc, 0x1f0c, 0x21fc, 0x1f0c, 0x21fc, +0x1f0c, 0x21ba, 0x1eed, 0x21ba, 0x1eed, 0x2269, 0x1fc4, 0x2269, 0x1fc4, 0x217e, 0x1f09, +0x217e, 0x1f09, 0x209a, 0x1e5b, 0x209a, 0x1e5b, 0x1ee7, 0x1ce5, 0x1ee7, 0x1ce5, 0x1ca8, +0x1ae9, 0x1ca8, 0x1ae9, 0x1ca8, 0x1ae9, 0x1990, 0x181c, 0x1990, 0x181c, 0x16ed, 0x15c9, +0x16ed, 0x15c9, 0x1500, 0x1433, 0x1500, 0x1433, 0x1074, 0x1002, 0x1074, 0x1002, 0xe40, +0xe2c, 0xe40, 0xe2c, 0xa83, 0xad1, 0xa83, 0xad1, 0xa83, 0xad1, 0x674, 0x725, +0x674, 0x725, 0x452, 0x565, 0x452, 0x565, 0xf4, 0x267, 0xf4, 0x267, 0xfeb2, +0x82, 0xfeb2, 0x82, 0xfb85, 0xfdad, 0xfb85, 0xfdad, 0xfb85, 0xfdad, 0xf9a0, 0xfc18, +0xf9a0, 0xfc18, 0xf820, 0xfae1, 0xf820, 0xfae1, 0xf55d, 0xf85d, 0xf55d, 0xf85d, 0xf3a2, +0xf6d6, 0xf3a2, 0xf6d6, 0xf11d, 0xf47c, 0xf11d, 0xf47c, 0xeeba, 0xf237, 0xeeba, 0xf237, +0xeeba, 0xf237, 0xede2, 0xf171, 0xede2, 0xf171, 0xed63, 0xf0fa, 0xed63, 0xf0fa, 0xed95, +0xf127, 0xed95, 0xf127, 0xed1f, 0xf0a3, 0xed1f, 0xf0a3, 0xecb9, 0xf024, 0xecb9, 0xf024, +0xecf0, 0xf03b, 0xecf0, 0xf03b, 0xecf0, 0xf03b, 0xec50, 0xef72, 0xec50, 0xef72, 0xec0a, +0xeefd, 0xec0a, 0xeefd, 0xeb13, 0xedd2, 0xeb13, 0xedd2, 0xebb9, 0xee42, 0xebb9, 0xee42, +0xed95, 0xefe5, 0xed95, 0xefe5, 0xed95, 0xefe5, 0xee78, 0xf08e, 0xee78, 0xf08e, 0xeeec, +0xf0c8, 0xeeec, 0xf0c8, 0xefe0, 0xf183, 0xefe0, 0xf183, 0xf252, 0xf3be, 0xf252, 0xf3be, +0xf3b0, 0xf4e7, 0xf3b0, 0xf4e7, 0xf459, 0xf55e, 0xf459, 0xf55e, 0xf459, 0xf55e, 0xf518, +0xf5ed, 0xf518, 0xf5ed, 0xf683, 0xf72a, 0xf683, 0xf72a, 0xf68b, 0xf706, 0xf68b, 0xf706, +0xf66b, 0xf6be, 0xf66b, 0xf6be, 0xf7cb, 0xf7f5, 0xf7cb, 0xf7f5, 0xf803, 0xf805, 0xf803, +0xf805, 0xf803, 0xf805, 0xf889, 0xf865, 0xf889, 0xf865, 0xf8a7, 0xf85b, 0xf8a7, 0xf85b, +0xfaf0, 0xfa7c, 0xfaf0, 0xfa7c, 0xfd48, 0xfcab, 0xfd48, 0xfcab, 0xfcbb, 0xfbf5, 0xfcbb, +0xfbf5, 0xfcbb, 0xfbf5, 0xfeb3, 0xfdc2, 0xfeb3, 0xfdc2, 0x76, 0xff5a, 0x76, 0xff5a, +0x1a1, 0x5b, 0x1a1, 0x5b, 0x410, 0x29f, 0x410, 0x29f, 0x58e, 0x3f5, 0x58e, +0x3f5, 0x877, 0x6b8, 0x877, 0x6b8, 0x877, 0x6b8, 0xaca, 0x8e8, 0xaca, 0x8e8, +0xcb7, 0xab7, 0xcb7, 0xab7, 0xfae, 0xd97, 0xfae, 0xd97, 0x108a, 0xe62, 0x108a, +0xe62, 0x1012, 0xde1, 0x1012, 0xde1, 0xef2, 0xcc1, 0xef2, 0xcc1, 0xef2, 0xcc1, +0xfe6, 0xdc0, 0xfe6, 0xdc0, 0xf60, 0xd4f, 0xf60, 0xd4f, 0xc2f, 0xa3c, 0xc2f, +0xa3c, 0xaf2, 0x929, 0xaf2, 0x929, 0x876, 0x6e0, 0x876, 0x6e0, 0x876, 0x6e0, +0x669, 0x510, 0x669, 0x510, 0x52e, 0x41a, 0x52e, 0x41a, 0x217, 0x150, 0x217, +0x150, 0xfe6d, 0xfdf8, 0xfe6d, 0xfdf8, 0xfc19, 0xfbfb, 0xfc19, 0xfbfb, 0xfa86, 0xfac1, +0xfa86, 0xfac1, 0xfa86, 0xfac1, 0xf709, 0xf79e, 0xf709, 0xf79e, 0xf41c, 0xf509, 0xf41c, +0xf509, 0xf0c1, 0xf205, 0xf0c1, 0xf205, 0xeced, 0xee82, 0xeced, 0xee82, 0xec73, 0xee55, +0xec73, 0xee55, 0xea75, 0xec9b, 0xea75, 0xec9b, 0xea75, 0xec9b, 0xe7be, 0xea20, 0xe7be, +0xea20, 0xe5f2, 0xe887, 0xe5f2, 0xe887, 0xe376, 0xe636, 0xe376, 0xe636, 0xe2aa, 0xe58b, +0xe2aa, 0xe58b, 0xe102, 0xe3fa, 0xe102, 0xe3fa, 0xe102, 0xe3fa, 0xdf84, 0xe28b, 0xdf84, +0xe28b, 0xdea5, 0xe1b3, 0xdea5, 0xe1b3, 0xded2, 0xe1e1, 0xded2, 0xe1e1, 0xde5d, 0xe166, +0xde5d, 0xe166, 0xde3c, 0xe139, 0xde3c, 0xe139, 0xe0c1, 0xe3b0, 0xe0c1, 0xe3b0, 0xe0c1, +0xe3b0, 0xdf02, 0xe1df, 0xdf02, 0xe1df, 0xdf27, 0xe1f1, 0xdf27, 0xe1f1, 0xe08e, 0xe345, +0xe08e, 0xe345, 0xe09c, 0xe340, 0xe09c, 0xe340, 0xe376, 0xe609, 0xe376, 0xe609, 0xe376, +0xe609, 0xe468, 0xe6ea, 0xe468, 0xe6ea, 0xe53e, 0xe7b1, 0xe53e, 0xe7b1, 0xe59a, 0xe801, +0xe59a, 0xe801, 0xe662, 0xe8bd, 0xe662, 0xe8bd, 0xe819, 0xea6a, 0xe819, 0xea6a, 0xe886, +0xeacd, 0xe886, 0xeacd, 0xe886, 0xeacd, 0xe96a, 0xeba6, 0xe96a, 0xeba6, 0xe916, 0xeb48, +0xe916, 0xeb48, 0xeb01, 0xed25, 0xeb01, 0xed25, 0xed49, 0xef5e, 0xed49, 0xef5e, 0xeb96, +0xed97, 0xeb96, 0xed97, 0xecce, 0xeeb9, 0xecce, 0xeeb9, 0xecce, 0xeeb9, 0xee3f, 0xf00e, +0xee3f, 0xf00e, 0xeed7, 0xf087, 0xeed7, 0xf087, 0xf0eb, 0xf276, 0xf0eb, 0xf276, 0xf12f, +0xf291, 0xf12f, 0xf291, 0xf320, 0xf455, 0xf320, 0xf455, 0xf320, 0xf455, 0xf590, 0xf694, +0xf590, 0xf694, 0xf87f, 0xf94e, 0xf87f, 0xf94e, 0xfb0f, 0xfba9, 0xfb0f, 0xfba9, 0xfd21, +0xfd84, 0xfd21, 0xfd84, 0x13, 0x40, 0x13, 0x40, 0x137, 0x12f, 0x137, 0x12f, +0x137, 0x12f, 0x455, 0x41c, 0x455, 0x41c, 0x625, 0x5be, 0x625, 0x5be, 0x785, +0x6f6, 0x785, 0x6f6, 0xafc, 0xa4a, 0xafc, 0xa4a, 0xc27, 0xb5a, 0xc27, 0xb5a, +0xe26, 0xd44, 0xe26, 0xd44, 0xe26, 0xd44, 0x10de, 0xfef, 0x10de, 0xfef, 0x106a, +0xf77, 0x106a, 0xf77, 0xe54, 0xd62, 0xe54, 0xd62, 0xe78, 0xd8f, 0xe78, 0xd8f, +0xe73, 0xd99, 0xe73, 0xd99, 0xe73, 0xd99, 0xc7e, 0xbb8, 0xc7e, 0xbb8, 0xc3e, +0xb90, 0xc3e, 0xb90, 0xbf3, 0xb60, 0xbf3, 0xb60, 0xada, 0xa64, 0xada, 0xa64, +0xb56, 0xafd, 0xb56, 0xafd, 0xaf0, 0xab3, 0xaf0, 0xab3, 0xaf0, 0xab3, 0xa7d, +0xa5c, 0xa7d, 0xa5c, 0x9b7, 0x9ad, 0x9b7, 0x9ad, 0x793, 0x79d, 0x793, 0x79d, +0x73a, 0x752, 0x73a, 0x752, 0x715, 0x738, 0x715, 0x738, 0x58c, 0x5b3, 0x58c, +0x5b3, 0x58c, 0x5b3, 0x2ef, 0x315, 0x2ef, 0x315, 0xf2, 0x112, 0xf2, 0x112, +0x5f, 0x73, 0x5f, 0x73, 0x123, 0x128, 0x123, 0x128, 0xb4, 0xa5, 0xb4, +0xa5, 0xb4, 0xa5, 0xfe1d, 0xfdf7, 0xfe1d, 0xfdf7, 0xfe7d, 0xfe3e, 0xfe7d, 0xfe3e, +0xfec8, 0xfe6f, 0xfec8, 0xfe6f, 0xfdb1, 0xfd3e, 0xfdb1, 0xfd3e, 0xfe54, 0xfdc6, 0xfe54, +0xfdc6, 0xfe03, 0xfd5c, 0xfe03, 0xfd5c, 0xfe03, 0xfd5c, 0xfd2f, 0xfc71, 0xfd2f, 0xfc71, +0xfd2c, 0xfc58, 0xfd2c, 0xfc58, 0xfd6d, 0xfc87, 0xfd6d, 0xfc87, 0xfe40, 0xfd4a, 0xfe40, +0xfd4a, 0xfeaf, 0xfdac, 0xfeaf, 0xfdac, 0xff2f, 0xfe21, 0xff2f, 0xfe21, 0xff2f, 0xfe21, +0x5, 0xfeef, 0x5, 0xfeef, 0x225, 0x109, 0x225, 0x109, 0x390, 0x26e, 0x390, +0x26e, 0x1f3, 0xce, 0x1f3, 0xce, 0x23a, 0x111, 0x23a, 0x111, 0x23a, 0x111, +0x1e8, 0xbb, 0x1e8, 0xbb, 0xcc, 0xff9a, 0xcc, 0xff9a, 0x235, 0xfd, 0x235, +0xfd, 0x30a, 0x1c9, 0x30a, 0x1c9, 0x38f, 0x244, 0x38f, 0x244, 0x459, 0x302, +0x459, 0x302, 0x459, 0x302, 0x5da, 0x475, 0x5da, 0x475, 0x70b, 0x596, 0x70b, +0x596, 0x7c5, 0x63f, 0x7c5, 0x63f, 0x805, 0x66d, 0x805, 0x66d, 0x820, 0x676, +0x820, 0x676, 0xa5a, 0x89f, 0xa5a, 0x89f, 0xa5a, 0x89f, 0xb60, 0x996, 0xb60, +0x996, 0xbdf, 0xa08, 0xbdf, 0xa08, 0xe48, 0xc68, 0xe48, 0xc68, 0xf0d, 0xd29, +0xf0d, 0xd29, 0x1068, 0xe84, 0x1068, 0xe84, 0x1068, 0xe84, 0x128d, 0x10af, 0x128d, +0x10af, 0x11fd, 0x102c, 0x11fd, 0x102c, 0x1216, 0x1059, 0x1216, 0x1059, 0x12c4, 0x1122, +0x12c4, 0x1122, 0x12e5, 0x1165, 0x12e5, 0x1165, 0x11bc, 0x1066, 0x11bc, 0x1066, 0x11bc, +0x1066, 0x1040, 0xf19, 0x1040, 0xf19, 0xf98, 0xea7, 0xf98, 0xea7, 0xe2c, 0xd75, +0xe2c, 0xd75, 0xef8, 0xe7f, 0xef8, 0xe7f, 0xdc8, 0xd91, 0xdc8, 0xd91, 0xb2d, +0xb39, 0xb2d, 0xb39, 0xb2d, 0xb39, 0xaf9, 0xb49, 0xaf9, 0xb49, 0x937, 0x9c9, +0x937, 0x9c9, 0x833, 0x907, 0x833, 0x907, 0x6e2, 0x7f3, 0x6e2, 0x7f3, 0x4ce, +0x619, 0x4ce, 0x619, 0x4ce, 0x619, 0x32a, 0x4aa, 0x32a, 0x4aa, 0x1e, 0x1ce, +0x1e, 0x1ce, 0xfeac, 0x84, 0xfeac, 0x84, 0xfe7e, 0x79, 0xfe7e, 0x79, 0xfc25, +0xfe3c, 0xfc25, 0xfe3c, 0xf8da, 0xfb07, 0xf8da, 0xfb07, 0xf8da, 0xfb07, 0xf7ba, 0xf9f6, +0xf7ba, 0xf9f6, 0xf67a, 0xf8bf, 0xf67a, 0xf8bf, 0xf547, 0xf790, 0xf547, 0xf790, 0xf4ab, +0xf6f2, 0xf4ab, 0xf6f2, 0xf0e6, 0xf329, 0xf0e6, 0xf329, 0xef7a, 0xf1b4, 0xef7a, 0xf1b4, +0xef7a, 0xf1b4, 0xef7e, 0xf1ac, 0xef7e, 0xf1ac, 0xed74, 0xef94, 0xed74, 0xef94, 0xec7a, +0xee8a, 0xec7a, 0xee8a, 0xead4, 0xecd2, 0xead4, 0xecd2, 0xe9b3, 0xeb9f, 0xe9b3, 0xeb9f, +0xe9b3, 0xeb9f, 0xe989, 0xeb60, 0xe989, 0xeb60, 0xeb6a, 0xed2c, 0xeb6a, 0xed2c, 0xeca0, +0xee4c, 0xeca0, 0xee4c, 0xeb7b, 0xed10, 0xeb7b, 0xed10, 0xec13, 0xed8f, 0xec13, 0xed8f, +0xec0c, 0xed6c, 0xec0c, 0xed6c, 0xec0c, 0xed6c, 0xed16, 0xee58, 0xed16, 0xee58, 0xee80, +0xefa0, 0xee80, 0xefa0, 0xeeac, 0xefa8, 0xeeac, 0xefa8, 0xef8a, 0xf05d, 0xef8a, 0xf05d, +0xf142, 0xf1e8, 0xf142, 0xf1e8, 0xf389, 0xf3fd, 0xf389, 0xf3fd, 0xf389, 0xf3fd, 0xf463, +0xf4a2, 0xf463, 0xf4a2, 0xf627, 0xf62c, 0xf627, 0xf62c, 0xf72a, 0xf6f1, 0xf72a, 0xf6f1, +0xf843, 0xf7c9, 0xf843, 0xf7c9, 0xfb73, 0xfab5, 0xfb73, 0xfab5, 0xfb73, 0xfab5, 0xfd72, +0xfc6f, 0xfd72, 0xfc6f, 0x121, 0xffd7, 0x121, 0xffd7, 0x480, 0x2f0, 0x480, 0x2f0, +0x66a, 0x496, 0x66a, 0x496, 0xa0c, 0x7f5, 0xa0c, 0x7f5, 0xd6b, 0xb15, 0xd6b, +0xb15, 0xd6b, 0xb15, 0xf83, 0xcf4, 0xf83, 0xcf4, 0x119a, 0xed8, 0x119a, 0xed8, +0x14f7, 0x1207, 0x14f7, 0x1207, 0x1758, 0x1442, 0x1758, 0x1442, 0x18bf, 0x158c, 0x18bf, +0x158c, 0x18bf, 0x158c, 0x1ab2, 0x1769, 0x1ab2, 0x1769, 0x19f3, 0x169d, 0x19f3, 0x169d, +0x1a65, 0x170b, 0x1a65, 0x170b, 0x1cf6, 0x199f, 0x1cf6, 0x199f, 0x1bef, 0x18a4, 0x1bef, +0x18a4, 0x1cbe, 0x1984, 0x1cbe, 0x1984, 0x1cbe, 0x1984, 0x1ddd, 0x1abc, 0x1ddd, 0x1abc, +0x1c7c, 0x1977, 0x1c7c, 0x1977, 0x1d80, 0x1a9c, 0x1d80, 0x1a9c, 0x1dac, 0x1aeb, 0x1dac, +0x1aeb, 0x1c9c, 0x19ff, 0x1c9c, 0x19ff, 0x1c29, 0x19b2, 0x1c29, 0x19b2, 0x1c29, 0x19b2, +0x1cf5, 0x1aa2, 0x1cf5, 0x1aa2, 0x1deb, 0x1bbc, 0x1deb, 0x1bbc, 0x1e62, 0x1c55, 0x1e62, +0x1c55, 0x1d44, 0x1b57, 0x1d44, 0x1b57, 0x1b2b, 0x195a, 0x1b2b, 0x195a, 0x1b2b, 0x195a, +0x1bd0, 0x1a19, 0x1bd0, 0x1a19, 0x19f6, 0x1856, 0x19f6, 0x1856, 0x180e, 0x1684, 0x180e, +0x1684, 0x1763, 0x15eb, 0x1763, 0x15eb, 0x1493, 0x132d, 0x1493, 0x132d, 0x134d, 0x11f9, +0x134d, 0x11f9, 0x134d, 0x11f9, 0x1292, 0x114e, 0x1292, 0x114e, 0x11a7, 0x1076, 0x11a7, +0x1076, 0x1023, 0xf05, 0x1023, 0xf05, 0xe3b, 0xd32, 0xe3b, 0xd32, 0xbc6, 0xad5, +0xbc6, 0xad5, 0xb76, 0xa9f, 0xb76, 0xa9f, 0xb76, 0xa9f, 0xc9f, 0xbe6, 0xc9f, +0xbe6, 0x9ac, 0x914, 0x9ac, 0x914, 0x641, 0x5cc, 0x641, 0x5cc, 0x520, 0x4d2, +0x520, 0x4d2, 0x4c4, 0x49e, 0x4c4, 0x49e, 0x4c4, 0x49e, 0x325, 0x327, 0x325, +0x327, 0x227, 0x251, 0x227, 0x251, 0xf4, 0x146, 0xf4, 0x146, 0xfe0b, 0xfe82, +0xfe0b, 0xfe82, 0xfdc3, 0xfe5c, 0xfdc3, 0xfe5c, 0xfcd8, 0xfd90, 0xfcd8, 0xfd90, 0xfcd8, +0xfd90, 0xfb4a, 0xfc1a, 0xfb4a, 0xfc1a, 0xf9e6, 0xfac9, 0xf9e6, 0xfac9, 0xf6fc, 0xf7eb, +0xf6fc, 0xf7eb, 0xf680, 0xf774, 0xf680, 0xf774, 0xf668, 0xf75a, 0xf668, 0xf75a, 0xf52a, +0xf612, 0xf52a, 0xf612, 0xf52a, 0xf612, 0xf47e, 0xf556, 0xf47e, 0xf556, 0xf4d4, 0xf595, +0xf4d4, 0xf595, 0xf668, 0xf70d, 0xf668, 0xf70d, 0xf7e3, 0xf867, 0xf7e3, 0xf867, 0xf8d0, +0xf92f, 0xf8d0, 0xf92f, 0xf8d0, 0xf92f, 0xf960, 0xf99a, 0xf960, 0xf99a, 0xfa85, 0xfa98, +0xfa85, 0xfa98, 0xfb35, 0xfb21, 0xfb35, 0xfb21, 0xfb4e, 0xfb17, 0xfb4e, 0xfb17, 0xfd1d, +0xfcc6, 0xfd1d, 0xfcc6, 0xfeb2, 0xfe40, 0xfeb2, 0xfe40, 0xfeb2, 0xfe40, 0xfe26, 0xfd9f, +0xfe26, 0xfd9f, 0xff0c, 0xfe76, 0xff0c, 0xfe76, 0x21, 0xff83, 0x21, 0xff83, 0xfe29, +0xfd8a, 0xfe29, 0xfd8a, 0xfe4e, 0xfdb7, 0xfe4e, 0xfdb7, 0xfedf, 0xfe55, 0xfedf, 0xfe55, +0xfedf, 0xfe55, 0xfcbc, 0xfc47, 0xfcbc, 0xfc47, 0xfcf7, 0xfc9a, 0xfcf7, 0xfc9a, 0xfd07, +0xfcc8, 0xfd07, 0xfcc8, 0xfb7a, 0xfb5b, 0xfb7a, 0xfb5b, 0xfbe9, 0xfbeb, 0xfbe9, 0xfbeb, +0xfbe9, 0xfbeb, 0xfb78, 0xfb9d, 0xfb78, 0xfb9d, 0xfb3d, 0xfb82, 0xfb3d, 0xfb82, 0xfca9, +0xfd0b, 0xfca9, 0xfd0b, 0xfbf0, 0xfc6b, 0xfbf0, 0xfc6b, 0xfa79, 0xfb09, 0xfa79, 0xfb09, +0xfb74, 0xfc11, 0xfb74, 0xfc11, 0xfb74, 0xfc11, 0xfc80, 0xfd25, 0xfc80, 0xfd25, 0xfba0, +0xfc46, 0xfba0, 0xfc46, 0xfb40, 0xfbe0, 0xfb40, 0xfbe0, 0xfa65, 0xfaf8, 0xfa65, 0xfaf8, +0xfbf9, 0xfc7b, 0xfbf9, 0xfc7b, 0xfd86, 0xfdf0, 0xfd86, 0xfdf0, 0xfd86, 0xfdf0, 0xfc52, +0xfca1, 0xfc52, 0xfca1, 0xfdce, 0xfe01, 0xfdce, 0xfe01, 0xfd3e, 0xfd53, 0xfd3e, 0xfd53, +0xfc80, 0xfc77, 0xfc80, 0xfc77, 0xfdbf, 0xfd9c, 0xfdbf, 0xfd9c, 0xfdbf, 0xfd9c, 0xfecf, +0xfe95, 0xfecf, 0xfe95, 0xfeba, 0xfe6f, 0xfeba, 0xfe6f, 0xfdf1, 0xfd9b, 0xfdf1, 0xfd9b, +0xff0d, 0xfeb4, 0xff0d, 0xfeb4, 0xff06, 0xfeb2, 0xff06, 0xfeb2, 0xff7e, 0xff38, 0xff7e, +0xff38, 0xff7e, 0xff38, 0xfe55, 0xfe25, 0xfe55, 0xfe25, 0xfc81, 0xfc70, 0xfc81, 0xfc70, +0xfd7a, 0xfd8f, 0xfd7a, 0xfd8f, 0xfe93, 0xfed5, 0xfe93, 0xfed5, 0xfe2a, 0xfe9f, 0xfe2a, +0xfe9f, 0xfbe6, 0xfc94, 0xfbe6, 0xfc94, 0xfbe6, 0xfc94, 0xfa21, 0xfb09, 0xfa21, 0xfb09, +0xf7d4, 0xf8f8, 0xf7d4, 0xf8f8, 0xf559, 0xf6b8, 0xf559, 0xf6b8, 0xf322, 0xf4ba, 0xf322, +0xf4ba, 0xf111, 0xf2e0, 0xf111, 0xf2e0, 0xf111, 0xf2e0, 0xeeac, 0xf0ab, 0xeeac, 0xf0ab, +0xec82, 0xeeac, 0xec82, 0xeeac, 0xec0a, 0xee59, 0xec0a, 0xee59, 0xec81, 0xeeed, 0xec81, +0xeeed, 0xed1e, 0xef9f, 0xed1e, 0xef9f, 0xeb6b, 0xedfa, 0xeb6b, 0xedfa, 0xeb6b, 0xedfa, +0xeb17, 0xedad, 0xeb17, 0xedad, 0xebce, 0xee66, 0xebce, 0xee66, 0xeb4d, 0xede1, 0xeb4d, +0xede1, 0xec40, 0xeecd, 0xec40, 0xeecd, 0xeba7, 0xee2a, 0xeba7, 0xee2a, 0xeb4d, 0xedc5, +0xeb4d, 0xedc5, 0xeb4d, 0xedc5, 0xedeb, 0xf059, 0xedeb, 0xf059, 0xee99, 0xf101, 0xee99, +0xf101, 0xeec2, 0xf126, 0xeec2, 0xf126, 0xf0fd, 0xf363, 0xf0fd, 0xf363, 0xf01d, 0xf28b, +0xf01d, 0xf28b, 0xf01d, 0xf28b, 0xedd1, 0xf04e, 0xedd1, 0xf04e, 0xed87, 0xf019, 0xed87, +0xf019, 0xeccc, 0xef7c, 0xeccc, 0xef7c, 0xec2e, 0xef01, 0xec2e, 0xef01, 0xec4f, 0xef4c, +0xec4f, 0xef4c, 0xec48, 0xef74, 0xec48, 0xef74, 0xec48, 0xef74, 0xebbb, 0xef18, 0xebbb, +0xef18, 0xecd0, 0xf062, 0xecd0, 0xf062, 0xecca, 0xf08f, 0xecca, 0xf08f, 0xea89, 0xee7f, +0xea89, 0xee7f, 0xeb34, 0xef59, 0xeb34, 0xef59, 0xeb13, 0xef5f, 0xeb13, 0xef5f, 0xeb13, +0xef5f, 0xeb36, 0xefa1, 0xeb36, 0xefa1, 0xec93, 0xf114, 0xec93, 0xf114, 0xece9, 0xf174, +0xece9, 0xf174, 0xed02, 0xf18b, 0xed02, 0xf18b, 0xec54, 0xf0cd, 0xec54, 0xf0cd, 0xec54, +0xf0cd, 0xedb3, 0xf20f, 0xedb3, 0xf20f, 0xedea, 0xf21b, 0xedea, 0xf21b, 0xee6f, 0xf267, +0xee6f, 0xf267, 0xef9f, 0xf350, 0xef9f, 0xf350, 0xf13a, 0xf49a, 0xf13a, 0xf49a, 0xf367, +0xf66c, 0xf367, 0xf66c, 0xf367, 0xf66c, 0xf2f4, 0xf595, 0xf2f4, 0xf595, 0xf56d, 0xf7a4, +0xf56d, 0xf7a4, 0xf79b, 0xf962, 0xf79b, 0xf962, 0xf9bf, 0xfb15, 0xf9bf, 0xfb15, 0xfce4, +0xfdca, 0xfce4, 0xfdca, 0xfce4, 0xfdca, 0xfe97, 0xff0e, 0xfe97, 0xff0e, 0x1b, 0x26, +0x1b, 0x26, 0x1d2, 0x178, 0x1d2, 0x178, 0x4f1, 0x439, 0x4f1, 0x439, 0x5c1, +0x4b2, 0x5c1, 0x4b2, 0x601, 0x4a4, 0x601, 0x4a4, 0x601, 0x4a4, 0x680, 0x4de, +0x680, 0x4de, 0x7c2, 0x5e5, 0x7c2, 0x5e5, 0x9d7, 0x7c6, 0x9d7, 0x7c6, 0xaf9, +0x8be, 0xaf9, 0x8be, 0xa6f, 0x811, 0xa6f, 0x811, 0x939, 0x6bd, 0x939, 0x6bd, +0x939, 0x6bd, 0xb2b, 0x897, 0xb2b, 0x897, 0xbae, 0x905, 0xbae, 0x905, 0xb89, +0x8cd, 0xb89, 0x8cd, 0xbdd, 0x90e, 0xbdd, 0x90e, 0xadf, 0x7ff, 0xadf, 0x7ff, +0xadf, 0x7ff, 0xa77, 0x782, 0xa77, 0x782, 0x9f0, 0x6e6, 0x9f0, 0x6e6, 0x9e9, +0x6c7, 0x9e9, 0x6c7, 0xa65, 0x728, 0xa65, 0x728, 0xa95, 0x73a, 0xa95, 0x73a, +0xa74, 0x6fa, 0xa74, 0x6fa, 0xa74, 0x6fa, 0xc06, 0x86b, 0xc06, 0x86b, 0xd99, +0x9dd, 0xd99, 0x9dd, 0xdfd, 0xa1f, 0xdfd, 0xa1f, 0x100f, 0xc13, 0x100f, 0xc13, +0x1132, 0xd1b, 0x1132, 0xd1b, 0x11b3, 0xd86, 0x11b3, 0xd86, 0x11b3, 0xd86, 0x13d6, +0xf9a, 0x13d6, 0xf9a, 0x139b, 0xf58, 0x139b, 0xf58, 0x12c3, 0xe82, 0x12c3, 0xe82, +0x13a4, 0xf6f, 0x13a4, 0xf6f, 0x1212, 0xdf4, 0x1212, 0xdf4, 0x1212, 0xdf4, 0x10f7, +0xcfb, 0x10f7, 0xcfb, 0x11d9, 0xe0b, 0x11d9, 0xe0b, 0x1030, 0xc9b, 0x1030, 0xc9b, +0xdf4, 0xaa2, 0xdf4, 0xaa2, 0xcb1, 0x9ac, 0xcb1, 0x9ac, 0xaac, 0x7fd, 0xaac, +0x7fd, 0xaac, 0x7fd, 0x7fc, 0x5a8, 0x7fc, 0x5a8, 0x683, 0x48f, 0x683, 0x48f, +0x624, 0x494, 0x624, 0x494, 0x3d4, 0x2aa, 0x3d4, 0x2aa, 0x250, 0x189, 0x250, +0x189, 0x185, 0x120, 0x185, 0x120, 0x185, 0x120, 0xbd, 0xb4, 0xbd, 0xb4, +0x59, 0xa6, 0x59, 0xa6, 0xfef1, 0xff8c, 0xfef1, 0xff8c, 0xfe6d, 0xff4d, 0xfe6d, +0xff4d, 0xfbf7, 0xfd12, 0xfbf7, 0xfd12, 0xfbf7, 0xfd12, 0xfa8c, 0xfbd8, 0xfa8c, 0xfbd8, +0xfa44, 0xfbb6, 0xfa44, 0xfbb6, 0xf91f, 0xfaad, 0xf91f, 0xfaad, 0xf8ff, 0xfa9e, 0xf8ff, +0xfa9e, 0xf835, 0xf9dc, 0xf835, 0xf9dc, 0xf870, 0xfa16, 0xf870, 0xfa16, 0xf870, 0xfa16, +0xf7e7, 0xf985, 0xf7e7, 0xf985, 0xf9ac, 0xfb3c, 0xf9ac, 0xfb3c, 0xfb2f, 0xfcac, 0xfb2f, +0xfcac, 0xf99f, 0xfb05, 0xf99f, 0xfb05, 0xfaf2, 0xfc3f, 0xfaf2, 0xfc3f, 0xfc15, 0xfd49, +0xfc15, 0xfd49, 0xfc15, 0xfd49, 0xfc8a, 0xfda5, 0xfc8a, 0xfda5, 0xfe81, 0xff84, 0xfe81, +0xff84, 0x18, 0x106, 0x18, 0x106, 0xffe5, 0xbf, 0xffe5, 0xbf, 0x128, 0x1f2, +0x128, 0x1f2, 0x128, 0x1f2, 0x335, 0x3f2, 0x335, 0x3f2, 0x37c, 0x42f, 0x37c, +0x42f, 0x3ae, 0x45a, 0x3ae, 0x45a, 0x235, 0x2dc, 0x235, 0x2dc, 0xc3, 0x167, +0xc3, 0x167, 0x213, 0x2b5, 0x213, 0x2b5, 0x213, 0x2b5, 0x2bb, 0x35b, 0x2bb, +0x35b, 0xd7, 0x175, 0xd7, 0x175, 0xffb7, 0x52, 0xffb7, 0x52, 0xff22, 0xffb9, +0xff22, 0xffb9, 0xff7a, 0xa, 0xff7a, 0xa, 0x138, 0x1c0, 0x138, 0x1c0, 0x138, +0x1c0, 0xfff6, 0x73, 0xfff6, 0x73, 0xfeec, 0xff5c, 0xfeec, 0xff5c, 0xffd1, 0x31, +0xffd1, 0x31, 0xe, 0x5e, 0xe, 0x5e, 0xe8, 0x125, 0xe8, 0x125, 0xe8, +0x125, 0x10f, 0x139, 0x10f, 0x139, 0xe0, 0xf7, 0xe0, 0xf7, 0x69, 0x6d, +0x69, 0x6d, 0x1d, 0x10, 0x1d, 0x10, 0xffa1, 0xff86, 0xffa1, 0xff86, 0xfe94, +0xfe6d, 0xfe94, 0xfe6d, 0xfe94, 0xfe6d, 0xfefd, 0xfecd, 0xfefd, 0xfecd, 0xfc99, 0xfc66, +0xfc99, 0xfc66, 0xfb15, 0xfae2, 0xfb15, 0xfae2, 0xfb93, 0xfb64, 0xfb93, 0xfb64, 0xf957, +0xf931, 0xf957, 0xf931, 0xf82d, 0xf815, 0xf82d, 0xf815, 0xf82d, 0xf815, 0xf830, 0xf829, +0xf830, 0xf829, 0xf78d, 0xf79b, 0xf78d, 0xf79b, 0xf609, 0xf62d, 0xf609, 0xf62d, 0xf56d, +0xf5ab, 0xf56d, 0xf5ab, 0xf4c6, 0xf51e, 0xf4c6, 0xf51e, 0xf4c6, 0xf51e, 0xf47f, 0xf4f1, +0xf47f, 0xf4f1, 0xf553, 0xf5df, 0xf553, 0xf5df, 0xf504, 0xf5a8, 0xf504, 0xf5a8, 0xf594, +0xf64d, 0xf594, 0xf64d, 0xf64d, 0xf719, 0xf64d, 0xf719, 0xf787, 0xf860, 0xf787, 0xf860, +0xf787, 0xf860, 0xf8ce, 0xf9b1, 0xf8ce, 0xf9b1, 0xf816, 0xf8ff, 0xf816, 0xf8ff, 0xf7d3, +0xf8bc, 0xf7d3, 0xf8bc, 0xf87e, 0xf962, 0xf87e, 0xf962, 0xf960, 0xfa3b, 0xf960, 0xfa3b, +0xfc75, 0xfd42, 0xfc75, 0xfd42, 0xfc75, 0xfd42, 0xff7e, 0x39, 0xff7e, 0x39, 0x75, +0x119, 0x75, 0x119, 0x299, 0x323, 0x299, 0x323, 0x620, 0x68d, 0x620, 0x68d, +0x880, 0x8ce, 0x880, 0x8ce, 0x880, 0x8ce, 0x9f2, 0xa1e, 0x9f2, 0xa1e, 0xc98, +0xca1, 0xc98, 0xca1, 0xd2c, 0xd10, 0xd2c, 0xd10, 0xdcd, 0xd8c, 0xdcd, 0xd8c, +0x1240, 0x11da, 0x1240, 0x11da, 0x15b3, 0x1526, 0x15b3, 0x1526, 0x15b3, 0x1526, 0x16fd, +0x1648, 0x16fd, 0x1648, 0x1834, 0x1758, 0x1834, 0x1758, 0x1926, 0x1821, 0x1926, 0x1821, +0x1974, 0x1846, 0x1974, 0x1846, 0x1b81, 0x1a28, 0x1b81, 0x1a28, 0x1c45, 0x1ac0, 0x1c45, +0x1ac0, 0x1c45, 0x1ac0, 0x1b14, 0x1962, 0x1b14, 0x1962, 0x1b50, 0x196f, 0x1b50, 0x196f, +0x1b96, 0x1986, 0x1b96, 0x1986, 0x1cf1, 0x1ab0, 0x1cf1, 0x1ab0, 0x1f3c, 0x1cca, 0x1f3c, +0x1cca, 0x1f3c, 0x1cca, 0x1fec, 0x1d48, 0x1fec, 0x1d48, 0x1e88, 0x1bb2, 0x1e88, 0x1bb2, +0x1e14, 0x1b0f, 0x1e14, 0x1b0f, 0x1e3e, 0x1b0b, 0x1e3e, 0x1b0b, 0x1e5d, 0x1afe, 0x1e5d, +0x1afe, 0x1e6b, 0x1ae4, 0x1e6b, 0x1ae4, 0x1e6b, 0x1ae4, 0x1ccc, 0x1923, 0x1ccc, 0x1923, +0x1da4, 0x19de, 0x1da4, 0x19de, 0x1e72, 0x1a95, 0x1e72, 0x1a95, 0x1cf5, 0x190a, 0x1cf5, +0x190a, 0x1d86, 0x1993, 0x1d86, 0x1993, 0x1d86, 0x1993, 0x1cf7, 0x1906, 0x1cf7, 0x1906, +0x1a17, 0x1630, 0x1a17, 0x1630, 0x17a2, 0x13cf, 0x17a2, 0x13cf, 0x156e, 0x11b7, 0x156e, +0x11b7, 0x129e, 0xf0b, 0x129e, 0xf0b, 0x101e, 0xcb7, 0x101e, 0xcb7, 0x101e, 0xcb7, +0xed5, 0xba0, 0xed5, 0xba0, 0xba3, 0x8a6, 0xba3, 0x8a6, 0x832, 0x571, 0x832, +0x571, 0x5c2, 0x341, 0x5c2, 0x341, 0x2a5, 0x66, 0x2a5, 0x66, 0x4f, 0xfe51, +0x4f, 0xfe51, 0x4f, 0xfe51, 0xfcb0, 0xfaf2, 0xfcb0, 0xfaf2, 0xf916, 0xf795, 0xf916, +0xf795, 0xf6fd, 0xf5b5, 0xf6fd, 0xf5b5, 0xf525, 0xf412, 0xf525, 0xf412, 0xf411, 0xf32d, +0xf411, 0xf32d, 0xf411, 0xf32d, 0xf235, 0xf179, 0xf235, 0xf179, 0xf051, 0xefb7, 0xf051, +0xefb7, 0xee63, 0xede4, 0xee63, 0xede4, 0xec3d, 0xebd3, 0xec3d, 0xebd3, 0xeb8b, 0xeb31, +0xeb8b, 0xeb31, 0xeaef, 0xea9f, 0xeaef, 0xea9f, 0xeaef, 0xea9f, 0xea09, 0xe9be, 0xea09, +0xe9be, 0xe81e, 0xe7d6, 0xe81e, 0xe7d6, 0xe786, 0xe73f, 0xe786, 0xe73f, 0xe9de, 0xe997, +0xe9de, 0xe997, 0xea7f, 0xea39, 0xea7f, 0xea39, 0xeaab, 0xea66, 0xeaab, 0xea66, 0xeaab, +0xea66, 0xea78, 0xea38, 0xea78, 0xea38, 0xe9a7, 0xe96f, 0xe9a7, 0xe96f, 0xea53, 0xea27, +0xea53, 0xea27, 0xebff, 0xebe4, 0xebff, 0xebe4, 0xeda0, 0xed9b, 0xeda0, 0xed9b, 0xeda0, +0xed9b, 0xee82, 0xee97, 0xee82, 0xee97, 0xf100, 0xf133, 0xf100, 0xf133, 0xf209, 0xf25c, +0xf209, 0xf25c, 0xf355, 0xf3cc, 0xf355, 0xf3cc, 0xf740, 0xf7db, 0xf740, 0xf7db, 0xf84d, +0xf90c, 0xf84d, 0xf90c, 0xf84d, 0xf90c, 0xf828, 0xf90b, 0xf828, 0xf90b, 0xf99c, 0xfaa0, +0xf99c, 0xfaa0, 0xfa5b, 0xfb7c, 0xfa5b, 0xfb7c, 0xfb04, 0xfc3c, 0xfb04, 0xfc3c, 0xfd82, +0xfecd, 0xfd82, 0xfecd, 0xfe7a, 0xffd0, 0xfe7a, 0xffd0, 0xfe7a, 0xffd0, 0xffeb, 0x145, +0xffeb, 0x145, 0x248, 0x39f, 0x248, 0x39f, 0x400, 0x54d, 0x400, 0x54d, 0x69b, +0x7d8, 0x69b, 0x7d8, 0x841, 0x969, 0x841, 0x969, 0x841, 0x969, 0xa2b, 0xb38, +0xa2b, 0xb38, 0xc16, 0xd07, 0xc16, 0xd07, 0xd91, 0xe64, 0xd91, 0xe64, 0xf5e, +0x1013, 0xf5e, 0x1013, 0x1293, 0x132e, 0x1293, 0x132e, 0x13fc, 0x1481, 0x13fc, 0x1481, +0x13fc, 0x1481, 0x13c7, 0x143c, 0x13c7, 0x143c, 0x1660, 0x16cd, 0x1660, 0x16cd, 0x1778, +0x17e8, 0x1778, 0x17e8, 0x16d4, 0x1750, 0x16d4, 0x1750, 0x16bd, 0x1751, 0x16bd, 0x1751, +0x16bc, 0x1775, 0x16bc, 0x1775, 0x16bc, 0x1775, 0x1521, 0x160a, 0x1521, 0x160a, 0x137d, +0x14a1, 0x137d, 0x14a1, 0x11aa, 0x1315, 0x11aa, 0x1315, 0xed5, 0x108f, 0xed5, 0x108f, +0xd1a, 0xf2d, 0xd1a, 0xf2d, 0xd1a, 0xf2d, 0x8b1, 0xb20, 0x8b1, 0xb20, 0x41c, +0x6ed, 0x41c, 0x6ed, 0x195, 0x4c8, 0x195, 0x4c8, 0xfea1, 0x234, 0xfea1, 0x234, +0xfa70, 0xfe60, 0xfa70, 0xfe60, 0xf6a8, 0xfaed, 0xf6a8, 0xfaed, 0xf6a8, 0xfaed, 0xf3a8, +0xf83b, 0xf3a8, 0xf83b, 0xeff3, 0xf4c8, 0xeff3, 0xf4c8, 0xee2e, 0xf338, 0xee2e, 0xf338, +0xeb7a, 0xf0ac, 0xeb7a, 0xf0ac, 0xe9b1, 0xeefc, 0xe9b1, 0xeefc, 0xe867, 0xedba, 0xe867, +0xedba, 0xe867, 0xedba, 0xe45d, 0xe9aa, 0xe45d, 0xe9aa, 0xe275, 0xe7ac, 0xe275, 0xe7ac, +0xe091, 0xe5a3, 0xe091, 0xe5a3, 0xde57, 0xe338, 0xde57, 0xe338, 0xdc7c, 0xe120, 0xdc7c, +0xe120, 0xdc7c, 0xe120, 0xdb65, 0xdfc3, 0xdb65, 0xdfc3, 0xdaea, 0xdefa, 0xdaea, 0xdefa, +0xda79, 0xde36, 0xda79, 0xde36, 0xdb36, 0xde9c, 0xdb36, 0xde9c, 0xda36, 0xdd45, 0xda36, +0xdd45, 0xda9f, 0xdd58, 0xda9f, 0xdd58, 0xda9f, 0xdd58, 0xdb2d, 0xdd92, 0xdb2d, 0xdd92, +0xdae2, 0xdcf8, 0xdae2, 0xdcf8, 0xdcb1, 0xde7d, 0xdcb1, 0xde7d, 0xdddc, 0xdf65, 0xdddc, +0xdf65, 0xde8c, 0xdfd9, 0xde8c, 0xdfd9, 0xdfbb, 0xe0d2, 0xdfbb, 0xe0d2, 0xdfbb, 0xe0d2, +0xe248, 0xe330, 0xe248, 0xe330, 0xe331, 0xe3ef, 0xe331, 0xe3ef, 0xe3b5, 0xe44e, 0xe3b5, +0xe44e, 0xe5da, 0xe653, 0xe5da, 0xe653, 0xe687, 0xe6e0, 0xe687, 0xe6e0, 0xe687, 0xe6e0, +0xe7ce, 0xe809, 0xe7ce, 0xe809, 0xeabc, 0xead9, 0xeabc, 0xead9, 0xeccf, 0xecca, 0xeccf, +0xecca, 0xedea, 0xedc1, 0xedea, 0xedc1, 0xf012, 0xefc0, 0xf012, 0xefc0, 0xf146, 0xf0c6, +0xf146, 0xf0c6, 0xf146, 0xf0c6, 0xf3a3, 0xf2ef, 0xf3a3, 0xf2ef, 0xf5e6, 0xf4f8, 0xf5e6, +0xf4f8, 0xf6a2, 0xf576, 0xf6a2, 0xf576, 0xfa3b, 0xf8cc, 0xfa3b, 0xf8cc, 0xfc83, 0xfacd, +0xfc83, 0xfacd, 0xfe98, 0xfc98, 0xfe98, 0xfc98, 0xfe98, 0xfc98, 0x27b, 0x32, 0x27b, +0x32, 0x5ea, 0x358, 0x5ea, 0x358, 0x920, 0x649, 0x920, 0x649, 0xc61, 0x94b, +0xc61, 0x94b, 0xe8f, 0xb41, 0xe8f, 0xb41, 0xe8f, 0xb41, 0x1103, 0xd88, 0x1103, +0xd88, 0x147a, 0x10dc, 0x147a, 0x10dc, 0x1465, 0x10b2, 0x1465, 0x10b2, 0x146e, 0x10b3, +0x146e, 0x10b3, 0x150e, 0x115b, 0x150e, 0x115b, 0x1388, 0xfec, 0x1388, 0xfec, 0x1388, +0xfec, 0x12dd, 0xf69, 0x12dd, 0xf69, 0x12af, 0xf71, 0x12af, 0xf71, 0x121d, 0xf24, +0x121d, 0xf24, 0x1175, 0xecd, 0x1175, 0xecd, 0x10b3, 0xe67, 0x10b3, 0xe67, 0xf6b, +0xd86, 0xf6b, 0xd86, 0xf6b, 0xd86, 0xe55, 0xcdc, 0xe55, 0xcdc, 0xd0e, 0xc07, +0xd0e, 0xc07, 0xad8, 0xa44, 0xad8, 0xa44, 0x946, 0x924, 0x946, 0x924, 0x921, +0x96f, 0x921, 0x96f, 0x921, 0x96f, 0x7ce, 0x884, 0x7ce, 0x884, 0x61f, 0x737, +0x61f, 0x737, 0x541, 0x6b1, 0x541, 0x6b1, 0x2f7, 0x4b3, 0x2f7, 0x4b3, 0x144, +0x341, 0x144, 0x341, 0xff7f, 0x1af, 0xff7f, 0x1af, 0xff7f, 0x1af, 0xfd73, 0xffc7, +0xfd73, 0xffc7, 0xfd00, 0xff6c, 0xfd00, 0xff6c, 0xfcf6, 0xff6c, 0xfcf6, 0xff6c, 0xfd0a, +0xff7e, 0xfd0a, 0xff7e, 0xfde3, 0x4b, 0xfde3, 0x4b, 0xfde3, 0x4b, 0xfe7f, 0xcf, +0xfe7f, 0xcf, 0xfe36, 0x66, 0xfe36, 0x66, 0xffab, 0x1b4, 0xffab, 0x1b4, 0x64, +0x242, 0x64, 0x242, 0xff98, 0x147, 0xff98, 0x147, 0xdd, 0x25b, 0xdd, 0x25b, +0xdd, 0x25b, 0x16d, 0x2b9, 0x16d, 0x2b9, 0x139, 0x256, 0x139, 0x256, 0x270, +0x35e, 0x270, 0x35e, 0x2fd, 0x3bf, 0x2fd, 0x3bf, 0x27e, 0x317, 0x27e, 0x317, +0x315, 0x38a, 0x315, 0x38a, 0x315, 0x38a, 0x4a5, 0x4f9, 0x4a5, 0x4f9, 0x487, +0x4bd, 0x487, 0x4bd, 0x3f7, 0x414, 0x3f7, 0x414, 0x395, 0x399, 0x395, 0x399, +0x270, 0x25f, 0x270, 0x25f, 0x270, 0x25f, 0x2f5, 0x2d0, 0x2f5, 0x2d0, 0x3d8, +0x39f, 0x3d8, 0x39f, 0x3d7, 0x389, 0x3d7, 0x389, 0x4be, 0x45b, 0x4be, 0x45b, +0x59a, 0x520, 0x59a, 0x520, 0x4dc, 0x44a, 0x4dc, 0x44a, 0x4dc, 0x44a, 0x4e0, +0x433, 0x4e0, 0x433, 0x5f1, 0x527, 0x5f1, 0x527, 0x5c0, 0x4d8, 0x5c0, 0x4d8, +0x647, 0x53e, 0x647, 0x53e, 0x6ef, 0x5c6, 0x6ef, 0x5c6, 0x733, 0x5e9, 0x733, +0x5e9, 0x733, 0x5e9, 0x835, 0x6cb, 0x835, 0x6cb, 0x7c0, 0x638, 0x7c0, 0x638, +0x782, 0x5e0, 0x782, 0x5e0, 0x7ea, 0x631, 0x7ea, 0x631, 0x6c5, 0x4fa, 0x6c5, +0x4fa, 0x6c5, 0x4fa, 0x714, 0x53f, 0x714, 0x53f, 0x7cc, 0x5f3, 0x7cc, 0x5f3, +0x73b, 0x566, 0x73b, 0x566, 0x75e, 0x595, 0x75e, 0x595, 0x813, 0x65f, 0x813, +0x65f, 0x7bb, 0x626, 0x7bb, 0x626, 0x7bb, 0x626, 0x615, 0x4a6, 0x615, 0x4a6, +0x519, 0x3da, 0x519, 0x3da, 0x2b2, 0x1aa, 0x2b2, 0x1aa, 0x1ef, 0x124, 0x1ef, +0x124, 0x159, 0xd3, 0x159, 0xd3, 0xfdeb, 0xfdad, 0xfdeb, 0xfdad, 0xfdeb, 0xfdad, +0xfc87, 0xfc95, 0xfc87, 0xfc95, 0xfae2, 0xfb3e, 0xfae2, 0xfb3e, 0xf9c9, 0xfa74, 0xf9c9, +0xfa74, 0xf815, 0xf90d, 0xf815, 0xf90d, 0xf671, 0xf7b6, 0xf671, 0xf7b6, 0xf671, 0xf7b6, +0xf513, 0xf6a1, 0xf513, 0xf6a1, 0xf260, 0xf432, 0xf260, 0xf432, 0xf109, 0xf31a, 0xf109, +0xf31a, 0xef1c, 0xf166, 0xef1c, 0xf166, 0xeef5, 0xf170, 0xeef5, 0xf170, 0xed17, 0xefbc, +0xed17, 0xefbc, 0xed17, 0xefbc, 0xeafe, 0xedc6, 0xeafe, 0xedc6, 0xec63, 0xef44, 0xec63, +0xef44, 0xeb8e, 0xee82, 0xeb8e, 0xee82, 0xea64, 0xed61, 0xea64, 0xed61, 0xea3d, 0xed3c, +0xea3d, 0xed3c, 0xe975, 0xec6d, 0xe975, 0xec6d, 0xe975, 0xec6d, 0xe89b, 0xeb85, 0xe89b, +0xeb85, 0xe9b2, 0xec87, 0xe9b2, 0xec87, 0xea73, 0xed2c, 0xea73, 0xed2c, 0xe9ed, 0xec84, +0xe9ed, 0xec84, 0xeb34, 0xeda3, 0xeb34, 0xeda3, 0xeb34, 0xeda3, 0xec85, 0xeec6, 0xec85, +0xeec6, 0xede9, 0xeff7, 0xede9, 0xeff7, 0xf0a9, 0xf27e, 0xf0a9, 0xf27e, 0xf22f, 0xf3c7, +0xf22f, 0xf3c7, 0xf27c, 0xf3d2, 0xf27c, 0xf3d2, 0xf3e1, 0xf4f2, 0xf3e1, 0xf4f2, 0xf3e1, +0xf4f2, 0xf4ee, 0xf5b6, 0xf4ee, 0xf5b6, 0xf5d4, 0xf64f, 0xf5d4, 0xf64f, 0xf8ca, 0xf8f5, +0xf8ca, 0xf8f5, 0xfbb0, 0xfb89, 0xfbb0, 0xfb89, 0xfdd4, 0xfd5a, 0xfdd4, 0xfd5a, 0xe7, +0x17, 0xe7, 0x17, 0xe7, 0x17, 0x329, 0x203, 0x329, 0x203, 0x55b, 0x3df, +0x55b, 0x3df, 0x867, 0x697, 0x867, 0x697, 0xa76, 0x853, 0xa76, 0x853, 0xcc5, +0xa52, 0xcc5, 0xa52, 0xcc5, 0xa52, 0xf23, 0xc63, 0xf23, 0xc63, 0x119f, 0xe96, +0x119f, 0xe96, 0x1557, 0x120b, 0x1557, 0x120b, 0x192a, 0x15a0, 0x192a, 0x15a0, 0x1ba5, +0x17e4, 0x1ba5, 0x17e4, 0x1db4, 0x19c3, 0x1db4, 0x19c3, 0x1db4, 0x19c3, 0x2127, 0x1d0e, +0x2127, 0x1d0e, 0x235d, 0x1f23, 0x235d, 0x1f23, 0x24ee, 0x209a, 0x24ee, 0x209a, 0x2669, +0x2203, 0x2669, 0x2203, 0x25af, 0x213e, 0x25af, 0x213e, 0x26f2, 0x227d, 0x26f2, 0x227d, +0x26f2, 0x227d, 0x271f, 0x22ad, 0x271f, 0x22ad, 0x24dd, 0x2073, 0x24dd, 0x2073, 0x25b9, +0x215c, 0x25b9, 0x215c, 0x2607, 0x21bb, 0x2607, 0x21bb, 0x2431, 0x1ffa, 0x2431, 0x1ffa, +0x2431, 0x1ffa, 0x22a2, 0x1e82, 0x22a2, 0x1e82, 0x225b, 0x1e54, 0x225b, 0x1e54, 0x2178, +0x1d8b, 0x2178, 0x1d8b, 0x20af, 0x1cdd, 0x20af, 0x1cdd, 0x1ff6, 0x1c3f, 0x1ff6, 0x1c3f, +0x1dfb, 0x1a60, 0x1dfb, 0x1a60, 0x1dfb, 0x1a60, 0x1dc2, 0x1a41, 0x1dc2, 0x1a41, 0x1c5d, +0x18f9, 0x1c5d, 0x18f9, 0x1a4d, 0x1704, 0x1a4d, 0x1704, 0x184c, 0x151f, 0x184c, 0x151f, +0x1566, 0x1257, 0x1566, 0x1257, 0x12f6, 0x1006, 0x12f6, 0x1006, 0x12f6, 0x1006, 0x11af, +0xee0, 0x11af, 0xee0, 0x10a9, 0xdfe, 0x10a9, 0xdfe, 0xe9e, 0xc1b, 0xe9e, 0xc1b, +0xe83, 0xc29, 0xe83, 0xc29, 0xca0, 0xa74, 0xca0, 0xa74, 0xca0, 0xa74, 0xa6e, +0x875, 0xa6e, 0x875, 0x9f0, 0x82d, 0x9f0, 0x82d, 0x77e, 0x5f5, 0x77e, 0x5f5, +0x523, 0x3d6, 0x523, 0x3d6, 0x40c, 0x2ff, 0x40c, 0x2ff, 0x2df, 0x213, 0x2df, +0x213, 0x2df, 0x213, 0x51, 0xffc7, 0x51, 0xffc7, 0x65, 0x1c, 0x65, 0x1c, +0xffbc, 0xffb3, 0xffbc, 0xffb3, 0xfdba, 0xfdee, 0xfdba, 0xfdee, 0xfe2e, 0xfe9a, 0xfe2e, +0xfe9a, 0xfc92, 0xfd30, 0xfc92, 0xfd30, 0xfc92, 0xfd30, 0xfb95, 0xfc5e, 0xfb95, 0xfc5e, +0xfb58, 0xfc44, 0xfb58, 0xfc44, 0xfa50, 0xfb56, 0xfa50, 0xfb56, 0xf953, 0xfa6a, 0xf953, +0xfa6a, 0xf7df, 0xf8fc, 0xf7df, 0xf8fc, 0xf7df, 0xf8fc, 0xf757, 0xf871, 0xf757, 0xf871, +0xf678, 0xf785, 0xf678, 0xf785, 0xf61f, 0xf716, 0xf61f, 0xf716, 0xf5b5, 0xf68d, 0xf5b5, +0xf68d, 0xf507, 0xf5ba, 0xf507, 0xf5ba, 0xf458, 0xf4e0, 0xf458, 0xf4e0, 0xf458, 0xf4e0, +0xf352, 0xf3ac, 0xf352, 0xf3ac, 0xf48c, 0xf4b5, 0xf48c, 0xf4b5, 0xf547, 0xf53f, 0xf547, +0xf53f, 0xf648, 0xf611, 0xf648, 0xf611, 0xf80d, 0xf7ab, 0xf80d, 0xf7ab, 0xf80d, 0xf7ab, +0xf8b2, 0xf82a, 0xf8b2, 0xf82a, 0xf9f6, 0xf94e, 0xf9f6, 0xf94e, 0xfb6a, 0xfaab, 0xfb6a, +0xfaab, 0xfc8b, 0xfbbe, 0xfc8b, 0xfbbe, 0xfba4, 0xfad3, 0xfba4, 0xfad3, 0xfc47, 0xfb7b, +0xfc47, 0xfb7b, 0xfc47, 0xfb7b, 0xfd2b, 0xfc6f, 0xfd2b, 0xfc6f, 0xfc54, 0xfbb1, 0xfc54, +0xfbb1, 0xfd96, 0xfd15, 0xfd96, 0xfd15, 0xfd6e, 0xfd16, 0xfd6e, 0xfd16, 0xfd86, 0xfd5c, +0xfd86, 0xfd5c, 0xfe62, 0xfe6b, 0xfe62, 0xfe6b, 0xfe62, 0xfe6b, 0xfdf6, 0xfe34, 0xfdf6, +0xfe34, 0xfd12, 0xfd86, 0xfd12, 0xfd86, 0xfbe0, 0xfc89, 0xfbe0, 0xfc89, 0xfb15, 0xfbef, +0xfb15, 0xfbef, 0xf9df, 0xfae6, 0xf9df, 0xfae6, 0xf9df, 0xfae6, 0xfa06, 0xfb33, 0xfa06, +0xfb33, 0xfa48, 0xfb92, 0xfa48, 0xfb92, 0xfaf9, 0xfc5a, 0xfaf9, 0xfc5a, 0xfca4, 0xfe11, +0xfca4, 0xfe11, 0xfc48, 0xfdb9, 0xfc48, 0xfdb9, 0xfd5a, 0xfec5, 0xfd5a, 0xfec5, 0xfd5a, +0xfec5, 0xff50, 0xaf, 0xff50, 0xaf, 0xff03, 0x4d, 0xff03, 0x4d, 0xfee0, 0x10, +0xfee0, 0x10, 0xffa8, 0xba, 0xffa8, 0xba, 0x27, 0x118, 0x27, 0x118, 0xb9, +0x188, 0xb9, 0x188, 0xb9, 0x188, 0x26c, 0x31a, 0x26c, 0x31a, 0x30f, 0x3a0, +0x30f, 0x3a0, 0x312, 0x38a, 0x312, 0x38a, 0x4fe, 0x564, 0x4fe, 0x564, 0x5ad, +0x608, 0x5ad, 0x608, 0x5ad, 0x608, 0x5b1, 0x609, 0x5b1, 0x609, 0x698, 0x6f6, +0x698, 0x6f6, 0x5fa, 0x668, 0x5fa, 0x668, 0x5bf, 0x644, 0x5bf, 0x644, 0x652, +0x6f7, 0x652, 0x6f7, 0x4a5, 0x571, 0x4a5, 0x571, 0x4a5, 0x571, 0x31f, 0x417, +0x31f, 0x417, 0x2f2, 0x41a, 0x2f2, 0x41a, 0x118, 0x272, 0x118, 0x272, 0xffa8, +0x135, 0xffa8, 0x135, 0xfe03, 0xffbf, 0xfe03, 0xffbf, 0xfa2c, 0xfc15, 0xfa2c, 0xfc15, +0xfa2c, 0xfc15, 0xf7ed, 0xf9fb, 0xf7ed, 0xf9fb, 0xf6e6, 0xf912, 0xf6e6, 0xf912, 0xf55f, +0xf7a0, 0xf55f, 0xf7a0, 0xf46b, 0xf6b8, 0xf46b, 0xf6b8, 0xf29b, 0xf4e8, 0xf29b, 0xf4e8, +0xf29b, 0xf4e8, 0xf037, 0xf278, 0xf037, 0xf278, 0xeed0, 0xf0fc, 0xeed0, 0xf0fc, 0xec80, +0xee8c, 0xec80, 0xee8c, 0xea91, 0xec73, 0xea91, 0xec73, 0xea30, 0xebe1, 0xea30, 0xebe1, +0xe960, 0xead9, 0xe960, 0xead9, 0xe960, 0xead9, 0xe94b, 0xea88, 0xe94b, 0xea88, 0xea28, +0xeb28, 0xea28, 0xeb28, 0xe960, 0xea22, 0xe960, 0xea22, 0xe88f, 0xe916, 0xe88f, 0xe916, +0xe9ad, 0xe9fd, 0xe9ad, 0xe9fd, 0xe913, 0xe934, 0xe913, 0xe934, 0xe913, 0xe934, 0xe8b3, +0xe8ab, 0xe8b3, 0xe8ab, 0xea20, 0xe9fb, 0xea20, 0xe9fb, 0xe996, 0xe95d, 0xe996, 0xe95d, +0xe8be, 0xe87d, 0xe8be, 0xe87d, 0xe93e, 0xe901, 0xe93e, 0xe901, 0xe93e, 0xe901, 0xe9b0, +0xe981, 0xe9b0, 0xe981, 0xe8c4, 0xe8ae, 0xe8c4, 0xe8ae, 0xe869, 0xe877, 0xe869, 0xe877, +0xe7ac, 0xe7e5, 0xe7ac, 0xe7e5, 0xe61a, 0xe683, 0xe61a, 0xe683, 0xe66a, 0xe708, 0xe66a, +0xe708, 0xe66a, 0xe708, 0xe5e0, 0xe6b6, 0xe5e0, 0xe6b6, 0xe5d6, 0xe6e3, 0xe5d6, 0xe6e3, +0xe690, 0xe7d2, 0xe690, 0xe7d2, 0xe626, 0xe798, 0xe626, 0xe798, 0xe6c6, 0xe862, 0xe6c6, +0xe862, 0xe7a1, 0xe960, 0xe7a1, 0xe960, 0xe7a1, 0xe960, 0xe7af, 0xe986, 0xe7af, 0xe986, +0xe7b2, 0xe998, 0xe7b2, 0xe998, 0xe7ce, 0xe9b8, 0xe7ce, 0xe9b8, 0xe778, 0xe95c, 0xe778, +0xe95c, 0xe8b2, 0xea84, 0xe8b2, 0xea84, 0xe8b2, 0xea84, 0xeb14, 0xeccc, 0xeb14, 0xeccc, +0xec07, 0xed9b, 0xec07, 0xed9b, 0xede9, 0xef53, 0xede9, 0xef53, 0xf121, 0xf25a, 0xf121, +0xf25a, 0xf37a, 0xf480, 0xf37a, 0xf480, 0xf5cb, 0xf69c, 0xf5cb, 0xf69c, 0xf5cb, 0xf69c, +0xf84d, 0xf8e9, 0xf84d, 0xf8e9, 0xfa57, 0xfac2, 0xfa57, 0xfac2, 0xfcbd, 0xfcf9, 0xfcbd, +0xfcf9, 0xfe8d, 0xfea0, 0xfe8d, 0xfea0, 0xff49, 0xff3a, 0xff49, 0xff3a, 0xe7, 0xbe, +0xe7, 0xbe, 0xe7, 0xbe, 0x2b0, 0x276, 0x2b0, 0x276, 0x40f, 0x3cc, 0x40f, +0x3cc, 0x689, 0x645, 0x689, 0x645, 0x91b, 0x8df, 0x91b, 0x8df, 0x9fc, 0x9cf, +0x9fc, 0x9cf, 0x9fc, 0x9cf, 0xa9c, 0xa84, 0xa9c, 0xa84, 0xc1c, 0xc1e, 0xc1c, +0xc1e, 0xc62, 0xc81, 0xc62, 0xc81, 0xc9b, 0xcd8, 0xc9b, 0xcd8, 0xc69, 0xcc4, +0xc69, 0xcc4, 0xb95, 0xc0c, 0xb95, 0xc0c, 0xb95, 0xc0c, 0xd15, 0xda4, 0xd15, +0xda4, 0xcff, 0xda2, 0xcff, 0xda2, 0xc42, 0xcf3, 0xc42, 0xcf3, 0xc39, 0xcf1, +0xc39, 0xcf1, 0xb14, 0xbcc, 0xb14, 0xbcc, 0xbda, 0xc8a, 0xbda, 0xc8a, 0xbda, +0xc8a, 0xd0b, 0xdac, 0xd0b, 0xdac, 0xd07, 0xd91, 0xd07, 0xd91, 0xe10, 0xe7e, +0xe10, 0xe7e, 0xfc3, 0x1011, 0xfc3, 0x1011, 0xf68, 0xf91, 0xf68, 0xf91, 0xf68, +0xf91, 0x10cc, 0x10ce, 0x10cc, 0x10ce, 0x1392, 0x136d, 0x1392, 0x136d, 0x133d, 0x12f1, +0x133d, 0x12f1, 0x1428, 0x13b8, 0x1428, 0x13b8, 0x1582, 0x14f3, 0x1582, 0x14f3, 0x14d8, +0x142f, 0x14d8, 0x142f, 0x14d8, 0x142f, 0x1533, 0x1476, 0x1533, 0x1476, 0x151e, 0x1454, +0x151e, 0x1454, 0x132a, 0x125c, 0x132a, 0x125c, 0x11ab, 0x10e1, 0x11ab, 0x10e1, 0x10c2, +0x1002, 0x10c2, 0x1002, 0xfe2, 0xf36, 0xfe2, 0xf36, 0xfe2, 0xf36, 0xead, 0xe1a, +0xead, 0xe1a, 0xcd8, 0xc65, 0xcd8, 0xc65, 0xa15, 0x9c7, 0xa15, 0x9c7, 0x84e, +0x828, 0x84e, 0x828, 0x7ea, 0x7ef, 0x7ea, 0x7ef, 0x7ea, 0x7ef, 0x6f4, 0x723, +0x6f4, 0x723, 0x711, 0x769, 0x711, 0x769, 0x5ea, 0x668, 0x5ea, 0x668, 0x446, +0x4e8, 0x446, 0x4e8, 0x3a6, 0x467, 0x3a6, 0x467, 0x26c, 0x345, 0x26c, 0x345, +0x26c, 0x345, 0x107, 0x1f3, 0x107, 0x1f3, 0xffdb, 0xd2, 0xffdb, 0xd2, 0xff47, +0x43, 0xff47, 0x43, 0xfdb7, 0xfeb1, 0xfdb7, 0xfeb1, 0xfdf2, 0xfee3, 0xfdf2, 0xfee3, +0xfdf2, 0xfee3, 0xfd17, 0xfdfa, 0xfd17, 0xfdfa, 0xfb3d, 0xfc0f, 0xfb3d, 0xfc0f, 0xfca0, +0xfd5b, 0xfca0, 0xfd5b, 0xfc60, 0xfd03, 0xfc60, 0xfd03, 0xfc0b, 0xfc95, 0xfc0b, 0xfc95, +0xfcbc, 0xfd2b, 0xfcbc, 0xfd2b, 0xfcbc, 0xfd2b, 0xfd68, 0xfdbe, 0xfd68, 0xfdbe, 0xfe97, +0xfed7, 0xfe97, 0xfed7, 0xffe2, 0xe, 0xffe2, 0xe, 0xd9, 0xf6, 0xd9, 0xf6, +0xe9, 0xfb, 0xe9, 0xfb, 0x23b, 0x246, 0x23b, 0x246, 0x23b, 0x246, 0x311, +0x31a, 0x311, 0x31a, 0x339, 0x344, 0x339, 0x344, 0x31a, 0x32d, 0x31a, 0x32d, +0x152, 0x16f, 0x152, 0x16f, 0x9c, 0xc8, 0x9c, 0xc8, 0x9c, 0xc8, 0x6b, +0xa8, 0x6b, 0xa8, 0x3c, 0x8a, 0x3c, 0x8a, 0xffc7, 0x28, 0xffc7, 0x28, +0xfe97, 0xff0a, 0xfe97, 0xff0a, 0xfd40, 0xfdc6, 0xfd40, 0xfdc6, 0xfc9e, 0xfd34, 0xfc9e, +0xfd34, 0xfc9e, 0xfd34, 0xfd21, 0xfdc4, 0xfd21, 0xfdc4, 0xfb60, 0xfc0e, 0xfb60, 0xfc0e, +0xf9eb, 0xfaa0, 0xf9eb, 0xfaa0, 0xf95b, 0xfa15, 0xf95b, 0xfa15, 0xf8b5, 0xf970, 0xf8b5, +0xf970, 0xf96d, 0xfa26, 0xf96d, 0xfa26, 0xf96d, 0xfa26, 0xf97a, 0xfa30, 0xf97a, 0xfa30, +0xf8a9, 0xf958, 0xf8a9, 0xf958, 0xf80f, 0xf8b5, 0xf80f, 0xf8b5, 0xf8c4, 0xf961, 0xf8c4, +0xf961, 0xf861, 0xf8f5, 0xf861, 0xf8f5, 0xf861, 0xf8f5, 0xf8a2, 0xf92c, 0xf8a2, 0xf92c, +0xf8a4, 0xf926, 0xf8a4, 0xf926, 0xf6a7, 0xf722, 0xf6a7, 0xf722, 0xf5bb, 0xf630, 0xf5bb, +0xf630, 0xf45c, 0xf4cd, 0xf45c, 0xf4cd, 0xf3a6, 0xf415, 0xf3a6, 0xf415, 0xf3a6, 0xf415, +0xf413, 0xf481, 0xf413, 0xf481, 0xf43f, 0xf4af, 0xf43f, 0xf4af, 0xf2e9, 0xf35b, 0xf2e9, +0xf35b, 0xf2a8, 0xf31d, 0xf2a8, 0xf31d, 0xf262, 0xf2da, 0xf262, 0xf2da, 0xf0eb, 0xf166, +0xf0eb, 0xf166, 0xf0eb, 0xf166, 0xf111, 0xf18c, 0xf111, 0xf18c, 0xf0f1, 0xf16a, 0xf0f1, +0xf16a, 0xf203, 0xf277, 0xf203, 0xf277, 0xf37b, 0xf3e6, 0xf37b, 0xf3e6, 0xf538, 0xf596, +0xf538, 0xf596, 0xf538, 0xf596, 0xf64e, 0xf699, 0xf64e, 0xf699, 0xf75c, 0xf790, 0xf75c, +0xf790, 0xf92e, 0xf944, 0xf92e, 0xf944, 0xf9b7, 0xf9aa, 0xf9b7, 0xf9aa, 0xfb90, 0xfb5b, +0xfb90, 0xfb5b, 0xfcb5, 0xfc53, 0xfcb5, 0xfc53, 0xfcb5, 0xfc53, 0xfebc, 0xfe2a, 0xfebc, +0xfe2a, 0x183, 0xbb, 0x183, 0xbb, 0x29b, 0x19c, 0x29b, 0x19c, 0x525, 0x3ec, +0x525, 0x3ec, 0x878, 0x704, 0x878, 0x704, 0xb9a, 0x9eb, 0xb9a, 0x9eb, 0xb9a, +0x9eb, 0xea7, 0xcbf, 0xea7, 0xcbf, 0x11d9, 0xfb7, 0x11d9, 0xfb7, 0x1381, 0x112a, +0x1381, 0x112a, 0x146f, 0x11e6, 0x146f, 0x11e6, 0x1689, 0x13d1, 0x1689, 0x13d1, 0x1689, +0x13d1, 0x1862, 0x157f, 0x1862, 0x157f, 0x1ab6, 0x17ae, 0x1ab6, 0x17ae, 0x1bc7, 0x189c, +0x1bc7, 0x189c, 0x1bb1, 0x186a, 0x1bb1, 0x186a, 0x1d29, 0x19c9, 0x1d29, 0x19c9, 0x1e77, +0x1b02, 0x1e77, 0x1b02, 0x1e77, 0x1b02, 0x1e8d, 0x1b05, 0x1e8d, 0x1b05, 0x1e80, 0x1aea, +0x1e80, 0x1aea, 0x1eee, 0x1b4c, 0x1eee, 0x1b4c, 0x1fc0, 0x1c13, 0x1fc0, 0x1c13, 0x21d1, +0x1e1b, 0x21d1, 0x1e1b, 0x22de, 0x1f21, 0x22de, 0x1f21, 0x22de, 0x1f21, 0x227a, 0x1eb7, +0x227a, 0x1eb7, 0x2168, 0x1d9f, 0x2168, 0x1d9f, 0x1ed5, 0x1b07, 0x1ed5, 0x1b07, 0x1d67, +0x1996, 0x1d67, 0x1996, 0x1cd6, 0x1904, 0x1cd6, 0x1904, 0x1cd6, 0x1904, 0x1c40, 0x186e, +0x1c40, 0x186e, 0x1ad3, 0x1703, 0x1ad3, 0x1703, 0x1a58, 0x168d, 0x1a58, 0x168d, 0x1ad2, +0x1712, 0x1ad2, 0x1712, 0x1a2b, 0x1678, 0x1a2b, 0x1678, 0x195e, 0x15bf, 0x195e, 0x15bf, +0x195e, 0x15bf, 0x1722, 0x139c, 0x1722, 0x139c, 0x153e, 0x11d8, 0x153e, 0x11d8, 0x147b, +0x113d, 0x147b, 0x113d, 0x1350, 0x1040, 0x1350, 0x1040, 0x10ad, 0xdd3, 0x10ad, 0xdd3, +0xe62, 0xbc6, 0xe62, 0xbc6, 0xe62, 0xbc6, 0xc55, 0x9fc, 0xc55, 0x9fc, 0x9f8, +0x7ea, 0x9f8, 0x7ea, 0x952, 0x795, 0x952, 0x795, 0x6f4, 0x58b, 0x6f4, 0x58b, +0x3e5, 0x2d3, 0x3e5, 0x2d3, 0x3e5, 0x2d3, 0x1e5, 0x12e, 0x1e5, 0x12e, 0xfed7, +0xfe7b, 0xfed7, 0xfe7b, 0xfafd, 0xfafb, 0xfafd, 0xfafb, 0xf8ef, 0xf945, 0xf8ef, 0xf945, +0xf777, 0xf821, 0xf777, 0xf821, 0xf47a, 0xf572, 0xf47a, 0xf572, 0xf47a, 0xf572, 0xf2d1, +0xf412, 0xf2d1, 0xf412, 0xf157, 0xf2d9, 0xf157, 0xf2d9, 0xef0d, 0xf0c7, 0xef0d, 0xf0c7, +0xed35, 0xef20, 0xed35, 0xef20, 0xeafb, 0xed0c, 0xeafb, 0xed0c, 0xe9a7, 0xebd6, 0xe9a7, +0xebd6, 0xe9a7, 0xebd6, 0xe9d8, 0xec1c, 0xe9d8, 0xec1c, 0xe8b1, 0xeb01, 0xe8b1, 0xeb01, +0xe7c1, 0xea15, 0xe7c1, 0xea15, 0xe867, 0xeab7, 0xe867, 0xeab7, 0xe901, 0xeb48, 0xe901, +0xeb48, 0xe901, 0xeb48, 0xe9da, 0xec13, 0xe9da, 0xec13, 0xea2d, 0xec54, 0xea2d, 0xec54, +0xea6c, 0xec7f, 0xea6c, 0xec7f, 0xeb69, 0xed65, 0xeb69, 0xed65, 0xecce, 0xeeb5, 0xecce, +0xeeb5, 0xeda1, 0xef71, 0xeda1, 0xef71, 0xeda1, 0xef71, 0xef04, 0xf0c0, 0xef04, 0xf0c0, +0xefe7, 0xf191, 0xefe7, 0xf191, 0xef1a, 0xf0b4, 0xef1a, 0xf0b4, 0xf0fe, 0xf28a, 0xf0fe, +0xf28a, 0xf3ce, 0xf54f, 0xf3ce, 0xf54f, 0xf54a, 0xf6c2, 0xf54a, 0xf6c2, 0xf54a, 0xf6c2, +0xf65b, 0xf7cc, 0xf65b, 0xf7cc, 0xf659, 0xf7c3, 0xf659, 0xf7c3, 0xf75d, 0xf8c1, 0xf75d, +0xf8c1, 0xf998, 0xfaf6, 0xf998, 0xfaf6, 0xfb5c, 0xfcb2, 0xfb5c, 0xfcb2, 0xfb5c, 0xfcb2, +0xfc88, 0xfdd5, 0xfc88, 0xfdd5, 0xfdeb, 0xff2b, 0xfdeb, 0xff2b, 0xff57, 0x87, 0xff57, +0x87, 0x13c, 0x259, 0x13c, 0x259, 0x3de, 0x4e3, 0x3de, 0x4e3, 0x4ab, 0x594, +0x4ab, 0x594, 0x4ab, 0x594, 0x58b, 0x655, 0x58b, 0x655, 0x700, 0x7a7, 0x700, +0x7a7, 0x8e4, 0x965, 0x8e4, 0x965, 0xbfe, 0xc57, 0xbfe, 0xc57, 0xd75, 0xda6, +0xd75, 0xda6, 0xd75, 0xda6, 0xd9c, 0xda4, 0xd9c, 0xda4, 0xd80, 0xd62, 0xd80, +0xd62, 0xf6a, 0xf29, 0xf6a, 0xf29, 0x11db, 0x117a, 0x11db, 0x117a, 0x133c, 0x12c3, +0x133c, 0x12c3, 0x149a, 0x140e, 0x149a, 0x140e, 0x149a, 0x140e, 0x1497, 0x1401, 0x1497, +0x1401, 0x1516, 0x147f, 0x1516, 0x147f, 0x15e0, 0x1552, 0x15e0, 0x1552, 0x14d2, 0x1456, +0x14d2, 0x1456, 0x12cb, 0x126a, 0x12cb, 0x126a, 0x11ea, 0x11af, 0x11ea, 0x11af, 0x11ea, +0x11af, 0x10d3, 0x10c7, 0x10d3, 0x10c7, 0xe82, 0xead, 0xe82, 0xead, 0xc1f, 0xc87, +0xc1f, 0xc87, 0x87a, 0x926, 0x87a, 0x926, 0x403, 0x4f7, 0x403, 0x4f7, 0x403, +0x4f7, 0x107, 0x245, 0x107, 0x245, 0xfe0a, 0xff93, 0xfe0a, 0xff93, 0xfb42, 0xfd16, +0xfb42, 0xfd16, 0xfa68, 0xfc82, 0xfa68, 0xfc82, 0xf7f8, 0xfa57, 0xf7f8, 0xfa57, 0xf548, +0xf7e4, 0xf548, 0xf7e4, 0xf548, 0xf7e4, 0xf28f, 0xf562, 0xf28f, 0xf562, 0xeeff, 0xf202, +0xeeff, 0xf202, 0xec1a, 0xef44, 0xec1a, 0xef44, 0xe994, 0xecdb, 0xe994, 0xecdb, 0xe824, +0xeb81, 0xe824, 0xeb81, 0xe662, 0xe9cc, 0xe662, 0xe9cc, 0xe662, 0xe9cc, 0xe47e, 0xe7ec, +0xe47e, 0xe7ec, 0xe1b8, 0xe523, 0xe1b8, 0xe523, 0xdfda, 0xe33c, 0xdfda, 0xe33c, 0xdf07, +0xe259, 0xdf07, 0xe259, 0xde04, 0xe143, 0xde04, 0xe143, 0xde04, 0xe143, 0xdeb1, 0xe1d8, +0xdeb1, 0xe1d8, 0xde15, 0xe123, 0xde15, 0xe123, 0xddb6, 0xe0a9, 0xddb6, 0xe0a9, 0xdea8, +0xe181, 0xdea8, 0xe181, 0xdf00, 0xe1c0, 0xdf00, 0xe1c0, 0xdeff, 0xe1a7, 0xdeff, 0xe1a7, +0xdeff, 0xe1a7, 0xdf46, 0xe1d8, 0xdf46, 0xe1d8, 0xe033, 0xe2b2, 0xe033, 0xe2b2, 0xe0d1, +0xe33e, 0xe0d1, 0xe33e, 0xe303, 0xe560, 0xe303, 0xe560, 0xe473, 0xe6c2, 0xe473, 0xe6c2, +0xe46c, 0xe6ae, 0xe46c, 0xe6ae, 0xe46c, 0xe6ae, 0xe54a, 0xe77e, 0xe54a, 0xe77e, 0xe57b, +0xe7a1, 0xe57b, 0xe7a1, 0xe79d, 0xe9b3, 0xe79d, 0xe9b3, 0xe9af, 0xebb2, 0xe9af, 0xebb2, +0xe9cb, 0xebb8, 0xe9cb, 0xebb8, 0xe9cb, 0xebb8, 0xea11, 0xebe3, 0xea11, 0xebe3, 0xeac2, +0xec74, 0xeac2, 0xec74, 0xec4a, 0xedd6, 0xec4a, 0xedd6, 0xed5f, 0xeebf, 0xed5f, 0xeebf, +0xeef1, 0xf01f, 0xeef1, 0xf01f, 0xefb3, 0xf0aa, 0xefb3, 0xf0aa, 0xefb3, 0xf0aa, 0xf12c, +0xf1e6, 0xf12c, 0xf1e6, 0xf41b, 0xf495, 0xf41b, 0xf495, 0xf61a, 0xf64e, 0xf61a, 0xf64e, +0xf8e2, 0xf8d0, 0xf8e2, 0xf8d0, 0xfbb0, 0xfb55, 0xfbb0, 0xfb55, 0xfdf9, 0xfd56, 0xfdf9, +0xfd56, 0xfdf9, 0xfd56, 0x151, 0x68, 0x151, 0x68, 0x5a1, 0x475, 0x5a1, 0x475, +0x796, 0x62c, 0x796, 0x62c, 0x7e1, 0x63f, 0x7e1, 0x63f, 0x8c9, 0x6f6, 0x8c9, +0x6f6, 0x8c9, 0x6f6, 0xa40, 0x844, 0xa40, 0x844, 0xbd3, 0x9b8, 0xbd3, 0x9b8, +0xdcc, 0xb9a, 0xdcc, 0xb9a, 0xee1, 0xca3, 0xee1, 0xca3, 0xe6e, 0xc2d, 0xe6e, +0xc2d, 0xf74, 0xd38, 0xf74, 0xd38, 0xf74, 0xd38, 0xe9d, 0xc70, 0xe9d, 0xc70, +0xd51, 0xb3a, 0xd51, 0xb3a, 0xcfa, 0xaff, 0xcfa, 0xaff, 0xc5a, 0xa81, 0xc5a, +0xa81, 0xd15, 0xb62, 0xd15, 0xb62, 0xd15, 0xb8a, 0xd15, 0xb8a, 0xd15, 0xb8a, +0xc29, 0xac8, 0xc29, 0xac8, 0xa78, 0x940, 0xa78, 0x940, 0x9e0, 0x8d0, 0x9e0, +0x8d0, 0x977, 0x88c, 0x977, 0x88c, 0x8b7, 0x7ed, 0x8b7, 0x7ed, 0x8b7, 0x7ed, +0x816, 0x768, 0x816, 0x768, 0x6ad, 0x618, 0x6ad, 0x618, 0x5f8, 0x576, 0x5f8, +0x576, 0x442, 0x3cd, 0x442, 0x3cd, 0x2b5, 0x249, 0x2b5, 0x249, 0x263, 0x1fb, +0x263, 0x1fb, 0x263, 0x1fb, 0x18e, 0x127, 0x18e, 0x127, 0x154, 0xe9, 0x154, +0xe9, 0x25e, 0x1ee, 0x25e, 0x1ee, 0x36d, 0x2f6, 0x36d, 0x2f6, 0x399, 0x31a, +0x399, 0x31a, 0x398, 0x311, 0x398, 0x311, 0x398, 0x311, 0x346, 0x2b8, 0x346, +0x2b8, 0x364, 0x2d0, 0x364, 0x2d0, 0x493, 0x3fc, 0x493, 0x3fc, 0x47c, 0x3e4, +0x47c, 0x3e4, 0x49c, 0x406, 0x49c, 0x406, 0x49c, 0x406, 0x503, 0x470, 0x503, +0x470, 0x475, 0x3e8, 0x475, 0x3e8, 0x454, 0x3cf, 0x454, 0x3cf, 0x3c8, 0x34b, +0x3c8, 0x34b, 0x317, 0x2a2, 0x317, 0x2a2, 0x2f0, 0x284, 0x2f0, 0x284, 0x2f0, +0x284, 0x47a, 0x415, 0x47a, 0x415, 0x5d6, 0x575, 0x5d6, 0x575, 0x67c, 0x61d, +0x67c, 0x61d, 0x6ca, 0x668, 0x6ca, 0x668, 0x506, 0x49d, 0x506, 0x49d, 0x467, +0x3f2, 0x467, 0x3f2, 0x467, 0x3f2, 0x539, 0x4b3, 0x539, 0x4b3, 0x51e, 0x481, +0x51e, 0x481, 0x4c8, 0x410, 0x4c8, 0x410, 0x514, 0x43c, 0x514, 0x43c, 0x4ea, +0x3ee, 0x4ea, 0x3ee, 0x4ea, 0x3ee, 0x5af, 0x48c, 0x5af, 0x48c, 0x692, 0x546, +0x692, 0x546, 0x5df, 0x467, 0x5df, 0x467, 0x625, 0x484, 0x625, 0x484, 0x720, +0x555, 0x720, 0x555, 0x75a, 0x56a, 0x75a, 0x56a, 0x75a, 0x56a, 0x7b5, 0x5a2, +0x7b5, 0x5a2, 0x918, 0x6ea, 0x918, 0x6ea, 0x91f, 0x6da, 0x91f, 0x6da, 0x97a, +0x726, 0x97a, 0x726, 0xaff, 0x8a3, 0xaff, 0x8a3, 0xbc6, 0x96b, 0xbc6, 0x96b, +0xbc6, 0x96b, 0xc22, 0x9cf, 0xc22, 0x9cf, 0xa9c, 0x85b, 0xa9c, 0x85b, 0x93c, +0x714, 0x93c, 0x714, 0x943, 0x73b, 0x943, 0x73b, 0x8d2, 0x6f2, 0x8d2, 0x6f2, +0x8d2, 0x6f2, 0x6f9, 0x547, 0x6f9, 0x547, 0x4c0, 0x33f, 0x4c0, 0x33f, 0x371, +0x226, 0x371, 0x226, 0x26e, 0x15a, 0x26e, 0x15a, 0x69, 0xff8f, 0x69, 0xff8f, +0xfd6c, 0xfcca, 0xfd6c, 0xfcca, 0xfd6c, 0xfcca, 0xfa90, 0xfa27, 0xfa90, 0xfa27, 0xf8cf, +0xf89c, 0xf8cf, 0xf89c, 0xf77f, 0xf77f, 0xf77f, 0xf77f, 0xf665, 0xf695, 0xf665, 0xf695, +0xf5b3, 0xf60f, 0xf5b3, 0xf60f, 0xf5b3, 0xf60f, 0xf2fe, 0xf382, 0xf2fe, 0xf382, 0xf0ac, +0xf154, 0xf0ac, 0xf154, 0xefb7, 0xf07f, 0xefb7, 0xf07f, 0xee0f, 0xeef3, 0xee0f, 0xeef3, +0xecb3, 0xedb1, 0xecb3, 0xedb1, 0xebf3, 0xed07, 0xebf3, 0xed07, 0xebf3, 0xed07, 0xeb40, +0xec68, 0xeb40, 0xec68, 0xeb1d, 0xec58, 0xeb1d, 0xec58, 0xeb79, 0xecc5, 0xeb79, 0xecc5, +0xe9fe, 0xeb5a, 0xe9fe, 0xeb5a, 0xe92b, 0xea97, 0xe92b, 0xea97, 0xe9ca, 0xeb46, 0xe9ca, +0xeb46, 0xe9ca, 0xeb46, 0xea32, 0xebbe, 0xea32, 0xebbe, 0xeb70, 0xed0b, 0xeb70, 0xed0b, +0xebc6, 0xed6f, 0xebc6, 0xed6f, 0xeae0, 0xec96, 0xeae0, 0xec96, 0xeabe, 0xec7f, 0xeabe, +0xec7f, 0xeabe, 0xec7f, 0xebde, 0xeda7, 0xebde, 0xeda7, 0xed69, 0xef37, 0xed69, 0xef37, +0xeed6, 0xf0a6, 0xeed6, 0xf0a6, 0xf0b6, 0xf282, 0xf0b6, 0xf282, 0xf24d, 0xf40e, 0xf24d, +0xf40e, 0xf3df, 0xf58f, 0xf3df, 0xf58f, 0xf3df, 0xf58f, 0xf65e, 0xf7f5, 0xf65e, 0xf7f5, +0xf806, 0xf97d, 0xf806, 0xf97d, 0xfa3d, 0xfb8b, 0xfa3d, 0xfb8b, 0xfc9f, 0xfdbe, 0xfc9f, +0xfdbe, 0xfed9, 0xffbf, 0xfed9, 0xffbf, 0x28d, 0x333, 0x28d, 0x333, 0x28d, 0x333, +0x57f, 0x5df, 0x57f, 0x5df, 0x721, 0x736, 0x721, 0x736, 0x947, 0x90b, 0x947, +0x90b, 0xd8d, 0xcfe, 0xd8d, 0xcfe, 0x1139, 0x1054, 0x1139, 0x1054, 0x1139, 0x1054, +0x147e, 0x1344, 0x147e, 0x1344, 0x1788, 0x15f9, 0x1788, 0x15f9, 0x194c, 0x176b, 0x194c, +0x176b, 0x1c88, 0x1a59, 0x1c88, 0x1a59, 0x1f10, 0x1c99, 0x1f10, 0x1c99, 0x20ca, 0x1e0f, +0x20ca, 0x1e0f, 0x20ca, 0x1e0f, 0x2308, 0x2013, 0x2308, 0x2013, 0x2414, 0x20ec, 0x2414, +0x20ec, 0x2527, 0x21d3, 0x2527, 0x21d3, 0x2734, 0x23bd, 0x2734, 0x23bd, 0x285d, 0x24cc, +0x285d, 0x24cc, 0x2817, 0x2474, 0x2817, 0x2474, 0x2817, 0x2474, 0x264f, 0x22a1, 0x264f, +0x22a1, 0x250a, 0x2157, 0x250a, 0x2157, 0x25f1, 0x2241, 0x25f1, 0x2241, 0x26df, 0x2336, +0x26df, 0x2336, 0x2658, 0x22ba, 0x2658, 0x22ba, 0x2658, 0x22ba, 0x24cc, 0x213b, 0x24cc, +0x213b, 0x2371, 0x1ff0, 0x2371, 0x1ff0, 0x2228, 0x1eb9, 0x2228, 0x1eb9, 0x218e, 0x1e31, +0x218e, 0x1e31, 0x2014, 0x1cca, 0x2014, 0x1cca, 0x1dc4, 0x1a8c, 0x1dc4, 0x1a8c, 0x1dc4, +0x1a8c, 0x1c90, 0x196a, 0x1c90, 0x196a, 0x1b97, 0x1883, 0x1b97, 0x1883, 0x19ba, 0x16b7, +0x19ba, 0x16b7, 0x16f0, 0x1400, 0x16f0, 0x1400, 0x1465, 0x1187, 0x1465, 0x1187, 0x11ca, +0xf00, 0x11ca, 0xf00, 0x11ca, 0xf00, 0x1136, 0xe81, 0x1136, 0xe81, 0x10e8, 0xe4c, +0x10e8, 0xe4c, 0xe7e, 0xbfd, 0xe7e, 0xbfd, 0xc9c, 0xa3a, 0xc9c, 0xa3a, 0xac7, +0x888, 0xac7, 0x888, 0xac7, 0x888, 0x8af, 0x697, 0x8af, 0x697, 0x77b, 0x58f, +0x77b, 0x58f, 0x6cd, 0x513, 0x6cd, 0x513, 0x54c, 0x3c6, 0x54c, 0x3c6, 0x3b0, +0x264, 0x3b0, 0x264, 0x272, 0x162, 0x272, 0x162, 0x272, 0x162, 0x98, 0xffc7, +0x98, 0xffc7, 0xfee6, 0xfe54, 0xfee6, 0xfe54, 0xfd10, 0xfcbf, 0xfd10, 0xfcbf, 0xfacf, +0xfabd, 0xfacf, 0xfabd, 0xf9e3, 0xfa0f, 0xf9e3, 0xfa0f, 0xf8ed, 0xf953, 0xf8ed, 0xf953, +0xf8ed, 0xf953, 0xf7d4, 0xf86f, 0xf7d4, 0xf86f, 0xf709, 0xf7d5, 0xf709, 0xf7d5, 0xf545, +0xf63b, 0xf545, 0xf63b, 0xf40f, 0xf528, 0xf40f, 0xf528, 0xf30c, 0xf443, 0xf30c, 0xf443, +0xf30c, 0xf443, 0xf1c0, 0xf30c, 0xf1c0, 0xf30c, 0xf0a2, 0xf1fb, 0xf0a2, 0xf1fb, 0xf12a, +0xf28a, 0xf12a, 0xf28a, 0xf285, 0xf3e5, 0xf285, 0xf3e5, 0xf2d6, 0xf431, 0xf2d6, 0xf431, +0xf382, 0xf4d4, 0xf382, 0xf4d4, 0xf382, 0xf4d4, 0xf3a5, 0xf4ea, 0xf3a5, 0xf4ea, 0xf3dd, +0xf512, 0xf3dd, 0xf512, 0xf605, 0xf72a, 0xf605, 0xf72a, 0xf7b9, 0xf8ce, 0xf7b9, 0xf8ce, +0xf88e, 0xf994, 0xf88e, 0xf994, 0xf985, 0xfa80, 0xf985, 0xfa80, 0xf985, 0xfa80, 0xf939, +0xfa2b, 0xf939, 0xfa2b, 0xfa57, 0xfb45, 0xfa57, 0xfb45, 0xfcef, 0xfdde, 0xfcef, 0xfdde, +0xfe3e, 0xff32, 0xfe3e, 0xff32, 0xfe41, 0xff40, 0xfe41, 0xff40, 0xfe41, 0xff40, 0xfdf8, +0xff07, 0xfdf8, 0xff07, 0xfdf9, 0xff1c, 0xfdf9, 0xff1c, 0xfdcf, 0xff0b, 0xfdcf, 0xff0b, +0xfdde, 0xff34, 0xfdde, 0xff34, 0xfcbe, 0xfe32, 0xfcbe, 0xfe32, 0xfbf1, 0xfd83, 0xfbf1, +0xfd83, 0xfbf1, 0xfd83, 0xfb6f, 0xfd1e, 0xfb6f, 0xfd1e, 0xfba1, 0xfd6d, 0xfba1, 0xfd6d, +0xfd1d, 0xff03, 0xfd1d, 0xff03, 0xfcd5, 0xfed1, 0xfcd5, 0xfed1, 0xfb80, 0xfd8d, 0xfb80, +0xfd8d, 0xfb60, 0xfd7a, 0xfb60, 0xfd7a, 0xfb60, 0xfd7a, 0xfd4a, 0xff6c, 0xfd4a, 0xff6c, +0xfe8d, 0xb1, 0xfe8d, 0xb1, 0xfea9, 0xc9, 0xfea9, 0xc9, 0xfcf0, 0xff08, 0xfcf0, +0xff08, 0xfb87, 0xfd91, 0xfb87, 0xfd91, 0xfb87, 0xfd91, 0xfcad, 0xfea6, 0xfcad, 0xfea6, +0xfd42, 0xff26, 0xfd42, 0xff26, 0xfdb3, 0xff80, 0xfdb3, 0xff80, 0xfe4d, 0x3, 0xfe4d, +0x3, 0xfec8, 0x66, 0xfec8, 0x66, 0xfedd, 0x65, 0xfedd, 0x65, 0xfedd, 0x65, +0xffca, 0x13f, 0xffca, 0x13f, 0x5f, 0x1c3, 0x5f, 0x1c3, 0xff5a, 0xb3, 0xff5a, +0xb3, 0xff52, 0xa4, 0xff52, 0xa4, 0xffb5, 0x104, 0xffb5, 0x104, 0x21, 0x174, +0x21, 0x174, 0x21, 0x174, 0x92, 0x1ee, 0x92, 0x1ee, 0xffbf, 0x128, 0xffbf, +0x128, 0xfdb5, 0xff30, 0xfdb5, 0xff30, 0xfb79, 0xfd09, 0xfb79, 0xfd09, 0xf8ba, 0xfa61, +0xf8ba, 0xfa61, 0xf8ba, 0xfa61, 0xf6e6, 0xf8a6, 0xf6e6, 0xf8a6, 0xf709, 0xf8e2, 0xf709, +0xf8e2, 0xf633, 0xf824, 0xf633, 0xf824, 0xf514, 0xf71b, 0xf514, 0xf71b, 0xf4b1, 0xf6cb, +0xf4b1, 0xf6cb, 0xf2ce, 0xf4f6, 0xf2ce, 0xf4f6, 0xf2ce, 0xf4f6, 0xf0bd, 0xf2ee, 0xf0bd, +0xf2ee, 0xefa5, 0xf1d9, 0xefa5, 0xf1d9, 0xeeb6, 0xf0e7, 0xeeb6, 0xf0e7, 0xed87, 0xefaf, +0xed87, 0xefaf, 0xec5f, 0xee78, 0xec5f, 0xee78, 0xec5f, 0xee78, 0xea80, 0xec85, 0xea80, +0xec85, 0xe90e, 0xeaf9, 0xe90e, 0xeaf9, 0xe96a, 0xeb37, 0xe96a, 0xeb37, 0xe8c5, 0xea71, +0xe8c5, 0xea71, 0xe94a, 0xead4, 0xe94a, 0xead4, 0xe9e4, 0xeb4a, 0xe9e4, 0xeb4a, 0xe9e4, +0xeb4a, 0xe9bc, 0xeaff, 0xe9bc, 0xeaff, 0xeadc, 0xebfe, 0xeadc, 0xebfe, 0xec24, 0xed28, +0xec24, 0xed28, 0xecad, 0xed99, 0xecad, 0xed99, 0xeb7f, 0xec56, 0xeb7f, 0xec56, 0xec66, +0xed2f, 0xec66, 0xed2f, 0xec66, 0xed2f, 0xee20, 0xeee0, 0xee20, 0xeee0, 0xf031, 0xf0f1, +0xf031, 0xf0f1, 0xf10b, 0xf1cf, 0xf10b, 0xf1cf, 0xef88, 0xf058, 0xef88, 0xf058, 0xef5e, +0xf03e, 0xef5e, 0xf03e, 0xef5e, 0xf03e, 0xef79, 0xf070, 0xef79, 0xf070, 0xf06a, 0xf17a, +0xf06a, 0xf17a, 0xf056, 0xf183, 0xf056, 0xf183, 0xefad, 0xf0f8, 0xefad, 0xf0f8, 0xee79, +0xefe2, 0xee79, 0xefe2, 0xedba, 0xef40, 0xedba, 0xef40, 0xedba, 0xef40, 0xee1b, 0xefbb, +0xee1b, 0xefbb, 0xedac, 0xef62, 0xedac, 0xef62, 0xed63, 0xef2a, 0xed63, 0xef2a, 0xeb0e, +0xece2, 0xeb0e, 0xece2, 0xea33, 0xec0c, 0xea33, 0xec0c, 0xec52, 0xee2a, 0xec52, 0xee2a, +0xec52, 0xee2a, 0xee03, 0xefd2, 0xee03, 0xefd2, 0xef23, 0xf0e3, 0xef23, 0xf0e3, 0xefea, +0xf195, 0xefea, 0xf195, 0xf049, 0xf1d8, 0xf049, 0xf1d8, 0xf1c0, 0xf32e, 0xf1c0, 0xf32e, +0xf1c0, 0xf32e, 0xf467, 0xf5af, 0xf467, 0xf5af, 0xf531, 0xf650, 0xf531, 0xf650, 0xf568, +0xf65c, 0xf568, 0xf65c, 0xf6b6, 0xf77e, 0xf6b6, 0xf77e, 0xf843, 0xf8df, 0xf843, 0xf8df, +0xfa1b, 0xfa8b, 0xfa1b, 0xfa8b, 0xfa1b, 0xfa8b, 0xfcc4, 0xfd0a, 0xfcc4, 0xfd0a, 0xfec5, +0xfee4, 0xfec5, 0xfee4, 0x7c, 0x78, 0x7c, 0x78, 0x2e3, 0x2bf, 0x2e3, 0x2bf, +0x371, 0x331, 0x371, 0x331, 0x3a1, 0x348, 0x3a1, 0x348, 0x3a1, 0x348, 0x48a, +0x41d, 0x48a, 0x41d, 0x4e2, 0x463, 0x4e2, 0x463, 0x5f4, 0x567, 0x5f4, 0x567, +0x776, 0x6dc, 0x776, 0x6dc, 0x846, 0x7a0, 0x846, 0x7a0, 0x846, 0x7a0, 0x8de, +0x82c, 0x8de, 0x82c, 0xa2c, 0x96f, 0xa2c, 0x96f, 0xa78, 0x9ae, 0xa78, 0x9ae, +0xa19, 0x93e, 0xa19, 0x93e, 0xb39, 0xa4c, 0xb39, 0xa4c, 0xb3a, 0xa36, 0xb3a, +0xa36, 0xb3a, 0xa36, 0xbba, 0xa9c, 0xbba, 0xa9c, 0xc09, 0xace, 0xc09, 0xace, +0xb0d, 0x9af, 0xb0d, 0x9af, 0xb67, 0x9e4, 0xb67, 0x9e4, 0xb4e, 0x9a1, 0xb4e, +0x9a1, 0xc16, 0xa3e, 0xc16, 0xa3e, 0xc16, 0xa3e, 0xe5b, 0xc54, 0xe5b, 0xc54, +0x10e6, 0xeb0, 0x10e6, 0xeb0, 0x1196, 0xf31, 0x1196, 0xf31, 0x119c, 0xf09, 0x119c, +0xf09, 0x125e, 0xf9f, 0x125e, 0xf9f, 0x125e, 0xf9f, 0x1318, 0x1030, 0x1318, 0x1030, +0x149e, 0x1190, 0x149e, 0x1190, 0x1476, 0x1149, 0x1476, 0x1149, 0x13f7, 0x10b0, 0x13f7, +0x10b0, 0x1401, 0x10a7, 0x1401, 0x10a7, 0x150f, 0x11a9, 0x150f, 0x11a9, 0x150f, 0x11a9, +0x15ce, 0x1263, 0x15ce, 0x1263, 0x14c8, 0x115f, 0x14c8, 0x115f, 0x130c, 0xfac, 0x130c, +0xfac, 0x10b0, 0xd60, 0x10b0, 0xd60, 0x10ad, 0xd74, 0x10ad, 0xd74, 0x10e6, 0xdc9, +0x10e6, 0xdc9, 0x10e6, 0xdc9, 0x1053, 0xd57, 0x1053, 0xd57, 0xf0d, 0xc36, 0xf0d, +0xc36, 0xc86, 0x9d8, 0xc86, 0x9d8, 0xbfb, 0x978, 0xbfb, 0x978, 0xc32, 0x9db, +0xc32, 0x9db, 0xc32, 0x9db, 0xace, 0x8a4, 0xace, 0x8a4, 0x928, 0x72a, 0x928, +0x72a, 0x7e1, 0x610, 0x7e1, 0x610, 0x5e3, 0x43c, 0x5e3, 0x43c, 0x488, 0x309, +0x488, 0x309, 0x42f, 0x2d7, 0x42f, 0x2d7, 0x42f, 0x2d7, 0x22a, 0xf5, 0x22a, +0xf5, 0x1c, 0xff09, 0x1c, 0xff09, 0xff9a, 0xfea6, 0xff9a, 0xfea6, 0xfe38, 0xfd62, +0xfe38, 0xfd62, 0xfde6, 0xfd2c, 0xfde6, 0xfd2c, 0xfe03, 0xfd64, 0xfe03, 0xfd64, 0xfe03, +0xfd64, 0xfc57, 0xfbd2, 0xfc57, 0xfbd2, 0xfc3e, 0xfbd2, 0xfc3e, 0xfbd2, 0xfe0c, 0xfdb9, +0xfe0c, 0xfdb9, 0xff34, 0xfefb, 0xff34, 0xfefb, 0xffb9, 0xff9b, 0xffb9, 0xff9b, 0xffb9, +0xff9b, 0x4e, 0x4b, 0x4e, 0x4b, 0xffd3, 0xffed, 0xffd3, 0xffed, 0xd, 0x44, +0xd, 0x44, 0x116, 0x16c, 0x116, 0x16c, 0x9d, 0x113, 0x9d, 0x113, 0x38, +0xce, 0x38, 0xce, 0x38, 0xce, 0xeb, 0x1a2, 0xeb, 0x1a2, 0xfa, 0x1d2, +0xfa, 0x1d2, 0x70, 0x167, 0x70, 0x167, 0x3a, 0x150, 0x3a, 0x150, 0xff40, +0x74, 0xff40, 0x74, 0xfed6, 0x26, 0xfed6, 0x26, 0xfed6, 0x26, 0xfdc9, 0xff32, +0xfdc9, 0xff32, 0xfbdd, 0xfd5b, 0xfbdd, 0xfd5b, 0xfb48, 0xfcda, 0xfb48, 0xfcda, 0xfacc, +0xfc6d, 0xfacc, 0xfc6d, 0xfa8c, 0xfc39, 0xfa8c, 0xfc39, 0xfa8c, 0xfc39, 0xfa9a, 0xfc4e, +0xfa9a, 0xfc4e, 0xfa7a, 0xfc33, 0xfa7a, 0xfc33, 0xf9bb, 0xfb74, 0xf9bb, 0xfb74, 0xf952, +0xfb08, 0xf952, 0xfb08, 0xf91b, 0xfac9, 0xf91b, 0xfac9, 0xf92c, 0xfad1, 0xf92c, 0xfad1, +0xf92c, 0xfad1, 0xf9aa, 0xfb43, 0xf9aa, 0xfb43, 0xf812, 0xf99c, 0xf812, 0xf99c, 0xf665, +0xf7de, 0xf665, 0xf7de, 0xf63d, 0xf7a4, 0xf63d, 0xf7a4, 0xf6c8, 0xf81b, 0xf6c8, 0xf81b, +0xf781, 0xf8bf, 0xf781, 0xf8bf, 0xf781, 0xf8bf, 0xf7c1, 0xf8e9, 0xf7c1, 0xf8e9, 0xf6de, +0xf7ef, 0xf6de, 0xf7ef, 0xf4cb, 0xf5c5, 0xf4cb, 0xf5c5, 0xf415, 0xf4f8, 0xf415, 0xf4f8, +0xf3c9, 0xf494, 0xf3c9, 0xf494, 0xf3c9, 0xf494, 0xf2d8, 0xf38b, 0xf2d8, 0xf38b, 0xf192, +0xf22b, 0xf192, 0xf22b, 0xefc9, 0xf049, 0xefc9, 0xf049, 0xf0b1, 0xf116, 0xf0b1, 0xf116, +0xf266, 0xf2af, 0xf266, 0xf2af, 0xf1f1, 0xf21d, 0xf1f1, 0xf21d, 0xf1f1, 0xf21d, 0xf19f, +0xf1ac, 0xf19f, 0xf1ac, 0xf2a9, 0xf297, 0xf2a9, 0xf297, 0xf415, 0xf3e2, 0xf415, 0xf3e2, +0xf59f, 0xf54a, 0xf59f, 0xf54a, 0xf6f1, 0xf679, 0xf6f1, 0xf679, 0xf6f1, 0xf679, 0xf67b, +0xf5de, 0xf67b, 0xf5de, 0xf73d, 0xf67a, 0xf73d, 0xf67a, 0xf9a2, 0xf8b9, 0xf9a2, 0xf8b9, +0xfb2c, 0xfa1c, 0xfb2c, 0xfa1c, 0xfd64, 0xfc2e, 0xfd64, 0xfc2e, 0xffa8, 0xfe4b, 0xffa8, +0xfe4b, 0xffa8, 0xfe4b, 0x30, 0xfeae, 0x30, 0xfeae, 0x15b, 0xffb4, 0x15b, 0xffb4, +0x45d, 0x293, 0x45d, 0x293, 0x5ec, 0x401, 0x5ec, 0x401, 0x7bc, 0x5b2, 0x7bc, +0x5b2, 0x9ff, 0x7d8, 0x9ff, 0x7d8, 0x9ff, 0x7d8, 0xb80, 0x93f, 0xb80, 0x93f, +0xeae, 0xc56, 0xeae, 0xc56, 0x1204, 0xf97, 0x1204, 0xf97, 0x13d6, 0x1156, 0x13d6, +0x1156, 0x14ec, 0x125d, 0x14ec, 0x125d, 0x14ec, 0x125d, 0x168d, 0x13f1, 0x168d, 0x13f1, +0x16ff, 0x1458, 0x16ff, 0x1458, 0x17cf, 0x1520, 0x17cf, 0x1520, 0x1923, 0x166d, 0x1923, +0x166d, 0x1939, 0x167f, 0x1939, 0x167f, 0x1aaf, 0x17f2, 0x1aaf, 0x17f2, 0x1aaf, 0x17f2, +0x1b80, 0x18c1, 0x1b80, 0x18c1, 0x1c67, 0x19a9, 0x1c67, 0x19a9, 0x1d87, 0x1acb, 0x1d87, +0x1acb, 0x1d55, 0x1a9c, 0x1d55, 0x1a9c, 0x1dcd, 0x1b1a, 0x1dcd, 0x1b1a, 0x1ebe, 0x1c12, +0x1ebe, 0x1c12, 0x1ebe, 0x1c12, 0x1e99, 0x1bf7, 0x1e99, 0x1bf7, 0x1d92, 0x1afb, 0x1d92, +0x1afb, 0x1d43, 0x1abb, 0x1d43, 0x1abb, 0x1c4e, 0x19d9, 0x1c4e, 0x19d9, 0x1caa, 0x1a4b, +0x1caa, 0x1a4b, 0x1caa, 0x1a4b, 0x1d96, 0x1b51, 0x1d96, 0x1b51, 0x1c5b, 0x1a34, 0x1c5b, +0x1a34, 0x1b8c, 0x1989, 0x1b8c, 0x1989, 0x1a94, 0x18b9, 0x1a94, 0x18b9, 0x18cc, 0x171e, +0x18cc, 0x171e, 0x175b, 0x15e0, 0x175b, 0x15e0, 0x175b, 0x15e0, 0x1739, 0x15f5, 0x1739, +0x15f5, 0x15e7, 0x14e0, 0x15e7, 0x14e0, 0x141e, 0x1358, 0x141e, 0x1358, 0x13a3, 0x1321, +0x13a3, 0x1321, 0x11a9, 0x116f, 0x11a9, 0x116f, 0xfa6, 0xfb6, 0xfa6, 0xfb6, 0xfa6, +0xfb6, 0xce1, 0xd3c, 0xce1, 0xd3c, 0x982, 0xa29, 0x982, 0xa29, 0x7c6, 0x8b8, +0x7c6, 0x8b8, 0x624, 0x761, 0x624, 0x761, 0x370, 0x4f5, 0x370, 0x4f5, 0x370, +0x4f5, 0xd8, 0x2a0, 0xd8, 0x2a0, 0xfeb2, 0xb9, 0xfeb2, 0xb9, 0xfb8c, 0xfdcd, +0xfb8c, 0xfdcd, 0xf96b, 0xfbe0, 0xf96b, 0xfbe0, 0xf6ed, 0xf98f, 0xf6ed, 0xf98f, 0xf2eb, +0xf5b4, 0xf2eb, 0xf5b4, 0xf2eb, 0xf5b4, 0xf0a8, 0xf390, 0xf0a8, 0xf390, 0xefc6, 0xf2c5, +0xefc6, 0xf2c5, 0xef17, 0xf226, 0xef17, 0xf226, 0xee8e, 0xf1a6, 0xee8e, 0xf1a6, 0xed94, +0xf0ae, 0xed94, 0xf0ae, 0xec56, 0xef6c, 0xec56, 0xef6c, 0xec56, 0xef6c, 0xecf7, 0xf004, +0xecf7, 0xf004, 0xed3c, 0xf03b, 0xed3c, 0xf03b, 0xebad, 0xee9a, 0xebad, 0xee9a, 0xeb0f, +0xede7, 0xeb0f, 0xede7, 0xeb12, 0xedd2, 0xeb12, 0xedd2, 0xeb12, 0xedd2, 0xeb3f, 0xede6, +0xeb3f, 0xede6, 0xec70, 0xeefd, 0xec70, 0xeefd, 0xee8b, 0xf0fe, 0xee8b, 0xf0fe, 0xef50, +0xf1a9, 0xef50, 0xf1a9, 0xf0ab, 0xf2ea, 0xf0ab, 0xf2ea, 0xf2cb, 0xf4f1, 0xf2cb, 0xf4f1, +0xf2cb, 0xf4f1, 0xf359, 0xf566, 0xf359, 0xf566, 0xf46b, 0xf65f, 0xf46b, 0xf65f, 0xf434, +0xf610, 0xf434, 0xf610, 0xf399, 0xf55c, 0xf399, 0xf55c, 0xf45d, 0xf607, 0xf45d, 0xf607, +0xf57f, 0xf710, 0xf57f, 0xf710, 0xf57f, 0xf710, 0xf761, 0xf8d5, 0xf761, 0xf8d5, 0xf93d, +0xfa93, 0xf93d, 0xfa93, 0xfa72, 0xfba8, 0xfa72, 0xfba8, 0xfbbc, 0xfccf, 0xfbbc, 0xfccf, +0xfece, 0xffba, 0xfece, 0xffba, 0xfece, 0xffba, 0x143, 0x206, 0x143, 0x206, 0x325, +0x3ba, 0x325, 0x3ba, 0x41a, 0x480, 0x41a, 0x480, 0x389, 0x3bc, 0x389, 0x3bc, +0x535, 0x534, 0x535, 0x534, 0x6c4, 0x68d, 0x6c4, 0x68d, 0x6c4, 0x68d, 0x753, +0x6e7, 0x753, 0x6e7, 0x8e8, 0x846, 0x8e8, 0x846, 0xb20, 0xa4b, 0xb20, 0xa4b, +0xc63, 0xb5e, 0xc63, 0xb5e, 0xdca, 0xc99, 0xdca, 0xc99, 0x1002, 0xeac, 0x1002, +0xeac, 0x1002, 0xeac, 0x1079, 0xf03, 0x1079, 0xf03, 0x1129, 0xf9b, 0x1129, 0xf9b, +0x11c7, 0x102a, 0x11c7, 0x102a, 0x1184, 0xfe2, 0x1184, 0xfe2, 0x1189, 0xfeb, 0x1189, +0xfeb, 0x1189, 0xfeb, 0x10dc, 0xf4c, 0x10dc, 0xf4c, 0xfab, 0xe33, 0xfab, 0xe33, +0xea0, 0xd4a, 0xea0, 0xd4a, 0xd3c, 0xc12, 0xd3c, 0xc12, 0xa85, 0x98e, 0xa85, +0x98e, 0x807, 0x74c, 0x807, 0x74c, 0x807, 0x74c, 0x620, 0x5a6, 0x620, 0x5a6, +0x3f0, 0x3bb, 0x3f0, 0x3bb, 0x1a6, 0x1ba, 0x1a6, 0x1ba, 0xfe83, 0xfee3, 0xfe83, +0xfee3, 0xfb03, 0xfbad, 0xfb03, 0xfbad, 0xf87c, 0xf96f, 0xf87c, 0xf96f, 0xf87c, 0xf96f, +0xf622, 0xf75b, 0xf622, 0xf75b, 0xf384, 0xf4fe, 0xf384, 0xf4fe, 0xf16d, 0xf323, 0xf16d, +0xf323, 0xee0e, 0xeff9, 0xee0e, 0xeff9, 0xeaa1, 0xecba, 0xeaa1, 0xecba, 0xeaa1, 0xecba, +0xe8e2, 0xeb20, 0xe8e2, 0xeb20, 0xe653, 0xe8ae, 0xe653, 0xe8ae, 0xe3d3, 0xe644, 0xe3d3, +0xe644, 0xe224, 0xe4a2, 0xe224, 0xe4a2, 0xe0a4, 0xe327, 0xe0a4, 0xe327, 0xe01d, 0xe29f, +0xe01d, 0xe29f, 0xe01d, 0xe29f, 0xe01d, 0xe299, 0xe01d, 0xe299, 0xdeb7, 0xe127, 0xdeb7, +0xe127, 0xdcb4, 0xdf15, 0xdcb4, 0xdf15, 0xddd0, 0xe020, 0xddd0, 0xe020, 0xdfde, 0xe21b, +0xdfde, 0xe21b, 0xe0f0, 0xe31a, 0xe0f0, 0xe31a, 0xe0f0, 0xe31a, 0xe2c7, 0xe4e0, 0xe2c7, +0xe4e0, 0xe3f7, 0xe5fe, 0xe3f7, 0xe5fe, 0xe4e1, 0xe6da, 0xe4e1, 0xe6da, 0xe670, 0xe85e, +0xe670, 0xe85e, 0xe790, 0xe975, 0xe790, 0xe975, 0xe790, 0xe975, 0xe8a6, 0xea85, 0xe8a6, +0xea85, 0xe9fe, 0xebdb, 0xe9fe, 0xebdb, 0xea89, 0xec64, 0xea89, 0xec64, 0xeb80, 0xed5d, +0xeb80, 0xed5d, 0xedde, 0xefbd, 0xedde, 0xefbd, 0xef4b, 0xf12b, 0xef4b, 0xf12b, 0xef4b, +0xf12b, 0xefb0, 0xf190, 0xefb0, 0xf190, 0xf004, 0xf1e3, 0xf004, 0xf1e3, 0xf0b4, 0xf28f, +0xf0b4, 0xf28f, 0xf229, 0xf3fc, 0xf229, 0xf3fc, 0xf32c, 0xf4f2, 0xf32c, 0xf4f2, 0xf32c, +0xf4f2, 0xf41c, 0xf5d0, 0xf41c, 0xf5d0, 0xf61c, 0xf7b8, 0xf61c, 0xf7b8, 0xf823, 0xf9a1, +0xf823, 0xf9a1, 0xf9e7, 0xfb43, 0xf9e7, 0xfb43, 0xfc76, 0xfda9, 0xfc76, 0xfda9, 0xfed9, +0xffdf, 0xfed9, 0xffdf, 0xfed9, 0xffdf, 0x25, 0xfa, 0x25, 0xfa, 0x219, 0x2b9, +0x219, 0x2b9, 0x3e8, 0x452, 0x3e8, 0x452, 0x525, 0x557, 0x525, 0x557, 0x6a3, +0x6a0, 0x6a3, 0x6a0, 0x725, 0x6ed, 0x725, 0x6ed, 0x725, 0x6ed, 0x898, 0x830, +0x898, 0x830, 0xb15, 0xa80, 0xb15, 0xa80, 0xcb2, 0xbf8, 0xcb2, 0xbf8, 0xd78, +0xc9f, 0xd78, 0xc9f, 0xe3f, 0xd4f, 0xe3f, 0xd4f, 0xe3f, 0xd4f, 0xee3, 0xde4, +0xee3, 0xde4, 0xe4f, 0xd4a, 0xe4f, 0xd4a, 0xe38, 0xd36, 0xe38, 0xd36, 0xd84, +0xc8c, 0xd84, 0xc8c, 0xc44, 0xb5d, 0xc44, 0xb5d, 0xbcb, 0xafd, 0xbcb, 0xafd, +0xbcb, 0xafd, 0xad6, 0xa27, 0xad6, 0xa27, 0x9e7, 0x959, 0x9e7, 0x959, 0x8d2, +0x869, 0x8d2, 0x869, 0x787, 0x745, 0x787, 0x745, 0x680, 0x663, 0x680, 0x663, +0x58c, 0x593, 0x58c, 0x593, 0x58c, 0x593, 0x301, 0x327, 0x301, 0x327, 0x60, +0xa2, 0x60, 0xa2, 0xff64, 0xffb9, 0xff64, 0xffb9, 0xfdb5, 0xfe18, 0xfdb5, 0xfe18, +0xfcab, 0xfd12, 0xfcab, 0xfd12, 0xfcab, 0xfd12, 0xfd31, 0xfd95, 0xfd31, 0xfd95, 0xfca2, +0xfcfa, 0xfca2, 0xfcfa, 0xfb70, 0xfbb3, 0xfb70, 0xfbb3, 0xfb71, 0xfb97, 0xfb71, 0xfb97, +0xfaf3, 0xfaf5, 0xfaf3, 0xfaf5, 0xfa67, 0xfa3e, 0xfa67, 0xfa3e, 0xfa67, 0xfa3e, 0xfa6d, +0xfa13, 0xfa6d, 0xfa13, 0xf997, 0xf908, 0xf997, 0xf908, 0xfa3a, 0xf974, 0xfa3a, 0xf974, +0xfc6c, 0xfb6d, 0xfc6c, 0xfb6d, 0xfdf2, 0xfcbb, 0xfdf2, 0xfcbb, 0xfea4, 0xfd35, 0xfea4, +0xfd35, 0xfea4, 0xfd35, 0xff64, 0xfdc1, 0xff64, 0xfdc1, 0xffc9, 0xfdf6, 0xffc9, 0xfdf6, +0xfff0, 0xfdf1, 0xfff0, 0xfdf1, 0x108, 0xfee4, 0x108, 0xfee4, 0x1ce, 0xff8a, 0x1ce, +0xff8a, 0x1ce, 0xff8a, 0x245, 0xffe8, 0x245, 0xffe8, 0x2ab, 0x3b, 0x2ab, 0x3b, +0x3f1, 0x176, 0x3f1, 0x176, 0x5ce, 0x34d, 0x5ce, 0x34d, 0x690, 0x40f, 0x690, +0x40f, 0x73e, 0x4c1, 0x73e, 0x4c1, 0x73e, 0x4c1, 0x79d, 0x529, 0x79d, 0x529, +0x7ed, 0x585, 0x7ed, 0x585, 0x818, 0x5bd, 0x818, 0x5bd, 0x81e, 0x5d2, 0x81e, +0x5d2, 0x72e, 0x4f2, 0x72e, 0x4f2, 0x66c, 0x43f, 0x66c, 0x43f, 0x66c, 0x43f, +0x741, 0x522, 0x741, 0x522, 0x6cd, 0x4bc, 0x6cd, 0x4bc, 0x751, 0x54c, 0x751, +0x54c, 0x7f7, 0x5fd, 0x7f7, 0x5fd, 0x6b4, 0x4c4, 0x6b4, 0x4c4, 0x6b4, 0x4c4, +0x5e4, 0x3fd, 0x5e4, 0x3fd, 0x64b, 0x46c, 0x64b, 0x46c, 0x73b, 0x564, 0x73b, +0x564, 0x7b3, 0x5e7, 0x7b3, 0x5e7, 0x8e3, 0x723, 0x8e3, 0x723, 0x91d, 0x76b, +0x91d, 0x76b, 0x91d, 0x76b, 0x96d, 0x7cd, 0x96d, 0x7cd, 0xa87, 0x8fd, 0xa87, +0x8fd, 0x9ab, 0x83c, 0x9ab, 0x83c, 0x8ea, 0x79b, 0x8ea, 0x79b, 0x8ff, 0x7d7, +0x8ff, 0x7d7, 0x8e5, 0x7e8, 0x8e5, 0x7e8, 0x8e5, 0x7e8, 0x88b, 0x7c0, 0x88b, +0x7c0, 0x81b, 0x785, 0x81b, 0x785, 0x6dc, 0x682, 0x6dc, 0x682, 0x59f, 0x585, +0x59f, 0x585, 0x45e, 0x486, 0x45e, 0x486, 0x45e, 0x486, 0x175, 0x1e1, 0x175, +0x1e1, 0xfea8, 0xff5a, 0xfea8, 0xff5a, 0xfc75, 0xfd6c, 0xfc75, 0xfd6c, 0xfa41, 0xfb7b, +0xfa41, 0xfb7b, 0xf893, 0xfa0e, 0xf893, 0xfa0e, 0xf744, 0xf8fb, 0xf744, 0xf8fb, 0xf744, +0xf8fb, 0xf57e, 0xf76b, 0xf57e, 0xf76b, 0xf460, 0xf67d, 0xf460, 0xf67d, 0xf48b, 0xf6d1, +0xf48b, 0xf6d1, 0xf39c, 0xf602, 0xf39c, 0xf602, 0xf233, 0xf4b1, 0xf233, 0xf4b1, 0xf0d4, +0xf361, 0xf0d4, 0xf361, 0xf0d4, 0xf361, 0xee97, 0xf12a, 0xee97, 0xf12a, 0xed19, 0xefa8, +0xed19, 0xefa8, 0xebea, 0xee6d, 0xebea, 0xee6d, 0xeb16, 0xed86, 0xeb16, 0xed86, 0xec24, +0xee77, 0xec24, 0xee77, 0xec24, 0xee77, 0xece1, 0xef13, 0xece1, 0xef13, 0xecd0, 0xeeda, +0xecd0, 0xeeda, 0xed7b, 0xef57, 0xed7b, 0xef57, 0xee90, 0xf03a, 0xee90, 0xf03a, 0xeefa, +0xf070, 0xeefa, 0xf070, 0xeded, 0xef2d, 0xeded, 0xef2d, 0xeded, 0xef2d, 0xeda2, 0xeea9, +0xeda2, 0xeea9, 0xeefa, 0xefc9, 0xeefa, 0xefc9, 0xefda, 0xf070, 0xefda, 0xf070, 0xf04d, +0xf0aa, 0xf04d, 0xf0aa, 0xf196, 0xf1bc, 0xf196, 0xf1bc, 0xf389, 0xf379, 0xf389, 0xf379, +0xf389, 0xf379, 0xf57d, 0xf538, 0xf57d, 0xf538, 0xf83e, 0xf7c5, 0xf83e, 0xf7c5, 0xfac5, +0xfa1a, 0xfac5, 0xfa1a, 0xfc30, 0xfb55, 0xfc30, 0xfb55, 0xfe44, 0xfd3a, 0xfe44, 0xfd3a, +0xfe44, 0xfd3a, 0x4e, 0xff16, 0x4e, 0xff16, 0x1c6, 0x62, 0x1c6, 0x62, 0x410, +0x281, 0x410, 0x281, 0x660, 0x4a8, 0x660, 0x4a8, 0x810, 0x630, 0x810, 0x630, +0xab5, 0x8af, 0xab5, 0x8af, 0xab5, 0x8af, 0xd87, 0xb5d, 0xd87, 0xb5d, 0xee9, +0xc9c, 0xee9, 0xc9c, 0x109e, 0xe31, 0x109e, 0xe31, 0x1341, 0x10b7, 0x1341, 0x10b7, +0x14a7, 0x1203, 0x14a7, 0x1203, 0x15ce, 0x1314, 0x15ce, 0x1314, 0x15ce, 0x1314, 0x1847, +0x1579, 0x1847, 0x1579, 0x1a39, 0x175e, 0x1a39, 0x175e, 0x1c2f, 0x1949, 0x1c2f, 0x1949, +0x1e0f, 0x1b24, 0x1e0f, 0x1b24, 0x1ece, 0x1be3, 0x1ece, 0x1be3, 0x1ece, 0x1be3, 0x1fc9, +0x1ce2, 0x1fc9, 0x1ce2, 0x2045, 0x1d67, 0x2045, 0x1d67, 0x1fb6, 0x1ce5, 0x1fb6, 0x1ce5, +0x1faf, 0x1cf0, 0x1faf, 0x1cf0, 0x200b, 0x1d62, 0x200b, 0x1d62, 0x1f1a, 0x1c89, 0x1f1a, +0x1c89, 0x1f1a, 0x1c89, 0x1e33, 0x1bbe, 0x1e33, 0x1bbe, 0x1e09, 0x1bb1, 0x1e09, 0x1bb1, +0x1d5b, 0x1b23, 0x1d5b, 0x1b23, 0x1cf3, 0x1adc, 0x1cf3, 0x1adc, 0x1c45, 0x1a50, 0x1c45, +0x1a50, 0x1c45, 0x1a50, 0x1ac2, 0x18ed, 0x1ac2, 0x18ed, 0x194f, 0x179c, 0x194f, 0x179c, +0x17e8, 0x1655, 0x17e8, 0x1655, 0x16b4, 0x1540, 0x16b4, 0x1540, 0x1624, 0x14ce, 0x1624, +0x14ce, 0x14c3, 0x138b, 0x14c3, 0x138b, 0x14c3, 0x138b, 0x1301, 0x11e4, 0x1301, 0x11e4, +0x1238, 0x1137, 0x1238, 0x1137, 0x1012, 0xf2b, 0x1012, 0xf2b, 0xcff, 0xc32, 0xcff, +0xc32, 0xb68, 0xab5, 0xb68, 0xab5, 0xaac, 0xa12, 0xaac, 0xa12, 0xaac, 0xa12, +0xa14, 0x993, 0xa14, 0x993, 0x9ec, 0x985, 0x9ec, 0x985, 0x9ae, 0x962, 0x9ae, +0x962, 0x995, 0x964, 0x995, 0x964, 0x987, 0x970, 0x987, 0x970, 0x987, 0x970, +0x813, 0x818, 0x813, 0x818, 0x719, 0x73a, 0x719, 0x73a, 0x67b, 0x6b7, 0x67b, +0x6b7, 0x4de, 0x534, 0x4de, 0x534, 0x3f1, 0x461, 0x3f1, 0x461, 0x2b7, 0x33e, +0x2b7, 0x33e, 0x2b7, 0x33e, 0x14b, 0x1e7, 0x14b, 0x1e7, 0x93, 0x141, 0x93, +0x141, 0xff52, 0x10, 0xff52, 0x10, 0xfdec, 0xfeb4, 0xfdec, 0xfeb4, 0xfd76, 0xfe46, +0xfd76, 0xfe46, 0xfcac, 0xfd7e, 0xfcac, 0xfd7e, 0xfcac, 0xfd7e, 0xfb1c, 0xfbec, 0xfb1c, +0xfbec, 0xfae8, 0xfbb2, 0xfae8, 0xfbb2, 0xfa9a, 0xfb59, 0xfa9a, 0xfb59, 0xf96c, 0xfa1d, +0xf96c, 0xfa1d, 0xf96c, 0xfa0c, 0xf96c, 0xfa0c, 0xf96c, 0xfa0c, 0xfa0a, 0xfa96, 0xfa0a, +0xfa96, 0xfa5a, 0xfad1, 0xfa5a, 0xfad1, 0xfb15, 0xfb75, 0xfb15, 0xfb75, 0xfc7a, 0xfcc5, +0xfc7a, 0xfcc5, 0xfd13, 0xfd4a, 0xfd13, 0xfd4a, 0xfd4b, 0xfd70, 0xfd4b, 0xfd70, 0xfd4b, +0xfd70, 0xfd65, 0xfd7c, 0xfd65, 0xfd7c, 0xfcf0, 0xfcfc, 0xfcf0, 0xfcfc, 0xfdd9, 0xfde0, +0xfdd9, 0xfde0, 0xff68, 0xff70, 0xff68, 0xff70, 0xffbb, 0xffc9, 0xffbb, 0xffc9, 0xffe0, +0xfffa, 0xffe0, 0xfffa, 0xffe0, 0xfffa, 0xffc1, 0xffed, 0xffc1, 0xffed, 0xff38, 0xff7c, +0xff38, 0xff7c, 0xff4a, 0xffac, 0xff4a, 0xffac, 0xfed1, 0xff55, 0xfed1, 0xff55, 0xfdb3, +0xfe5d, 0xfdb3, 0xfe5d, 0xfdb3, 0xfe5d, 0xfd32, 0xfe05, 0xfd32, 0xfe05, 0xfcdd, 0xfdd9, +0xfcdd, 0xfdd9, 0xfc3a, 0xfd60, 0xfc3a, 0xfd60, 0xfc48, 0xfd97, 0xfc48, 0xfd97, 0xfca5, +0xfe1a, 0xfca5, 0xfe1a, 0xfc7e, 0xfe17, 0xfc7e, 0xfe17, 0xfc7e, 0xfe17, 0xfc5d, 0xfe14, +0xfc5d, 0xfe14, 0xfbb5, 0xfd86, 0xfbb5, 0xfd86, 0xfb51, 0xfd34, 0xfb51, 0xfd34, 0xfb05, +0xfcf4, 0xfb05, 0xfcf4, 0xf9a7, 0xfb9a, 0xf9a7, 0xfb9a, 0xf94e, 0xfb3e, 0xf94e, 0xfb3e, +0xf94e, 0xfb3e, 0xfa0d, 0xfbf3, 0xfa0d, 0xfbf3, 0xf9b2, 0xfb87, 0xf9b2, 0xfb87, 0xfa23, +0xfbe1, 0xfa23, 0xfbe1, 0xfbb1, 0xfd54, 0xfbb1, 0xfd54, 0xfb74, 0xfcf6, 0xfb74, 0xfcf6, +0xfb74, 0xfcf6, 0xfb4c, 0xfcac, 0xfb4c, 0xfcac, 0xfc39, 0xfd74, 0xfc39, 0xfd74, 0xfc70, +0xfd85, 0xfc70, 0xfd85, 0xfc3a, 0xfd2b, 0xfc3a, 0xfd2b, 0xfc2e, 0xfcfc, 0xfc2e, 0xfcfc, +0xfca9, 0xfd57, 0xfca9, 0xfd57, 0xfca9, 0xfd57, 0xfe0a, 0xfe9c, 0xfe0a, 0xfe9c, 0xfec2, +0xff3d, 0xfec2, 0xff3d, 0xfe42, 0xfeaa, 0xfe42, 0xfeaa, 0xfe96, 0xfef0, 0xfe96, 0xfef0, +0xfe91, 0xfee3, 0xfe91, 0xfee3, 0xfce9, 0xfd38, 0xfce9, 0xfd38, 0xfce9, 0xfd38, 0xfb68, +0xfbb8, 0xfb68, 0xfbb8, 0xfa34, 0xfa89, 0xfa34, 0xfa89, 0xf876, 0xf8d3, 0xf876, 0xf8d3, +0xf738, 0xf79e, 0xf738, 0xf79e, 0xf5ed, 0xf65e, 0xf5ed, 0xf65e, 0xf5ed, 0xf65e, 0xf4d6, +0xf552, 0xf4d6, 0xf552, 0xf4b1, 0xf537, 0xf4b1, 0xf537, 0xf353, 0xf3e0, 0xf353, 0xf3e0, +0xf1b4, 0xf245, 0xf1b4, 0xf245, 0xf04b, 0xf0dc, 0xf04b, 0xf0dc, 0xee14, 0xeea2, 0xee14, +0xeea2, 0xee14, 0xeea2, 0xebde, 0xec64, 0xebde, 0xec64, 0xeb0b, 0xeb83, 0xeb0b, 0xeb83, +0xeb0c, 0xeb73, 0xeb0c, 0xeb73, 0xea43, 0xea95, 0xea43, 0xea95, 0xe9dc, 0xea16, 0xe9dc, +0xea16, 0xe928, 0xe947, 0xe928, 0xe947, 0xe928, 0xe947, 0xe86c, 0xe86f, 0xe86c, 0xe86f, +0xe8a6, 0xe88e, 0xe8a6, 0xe88e, 0xe885, 0xe853, 0xe885, 0xe853, 0xe928, 0xe8df, 0xe928, +0xe8df, 0xeac5, 0xea69, 0xeac5, 0xea69, 0xeac5, 0xea69, 0xebb9, 0xeb50, 0xebb9, 0xeb50, +0xecd3, 0xec64, 0xecd3, 0xec64, 0xeeb5, 0xee46, 0xeeb5, 0xee46, 0xefae, 0xef49, 0xefae, +0xef49, 0xef74, 0xef22, 0xef74, 0xef22, 0xef9a, 0xef63, 0xef9a, 0xef63, 0xef9a, 0xef63, +0xf032, 0xf01f, 0xf032, 0xf01f, 0xf09d, 0xf0b7, 0xf09d, 0xf0b7, 0xf149, 0xf198, 0xf149, +0xf198, 0xf16c, 0xf1f6, 0xf16c, 0xf1f6, 0xf118, 0xf1e3, 0xf118, 0xf1e3, 0xf10c, 0xf21c, +0xf10c, 0xf21c, 0xf10c, 0xf21c, 0xf0cb, 0xf221, 0xf0cb, 0xf221, 0xf0b0, 0xf24e, 0xf0b0, +0xf24e, 0xeffc, 0xf1e0, 0xeffc, 0xf1e0, 0xee7b, 0xf0a1, 0xee7b, 0xf0a1, 0xee1f, 0xf083, +0xee1f, 0xf083, 0xee1f, 0xf083, 0xeecc, 0xf167, 0xeecc, 0xf167, 0xeeb8, 0xf182, 0xeeb8, +0xf182, 0xeefa, 0xf1ea, 0xeefa, 0xf1ea, 0xf06d, 0xf378, 0xf06d, 0xf378, 0xf14a, 0xf465, +0xf14a, 0xf465, 0xf2b3, 0xf5d3, 0xf2b3, 0xf5d3, 0xf2b3, 0xf5d3, 0xf4b7, 0xf7d2, 0xf4b7, +0xf7d2, 0xf5ce, 0xf8d8, 0xf5ce, 0xf8d8, 0xf6ff, 0xf9ee, 0xf6ff, 0xf9ee, 0xf763, 0xfa2d, +0xf763, 0xfa2d, 0xf7ad, 0xfa4b, 0xf7ad, 0xfa4b, 0xf990, 0xfbfa, 0xf990, 0xfbfa, 0xf990, +0xfbfa, 0xfbcd, 0xfdfe, 0xfbcd, 0xfdfe, 0xfda4, 0xff98, 0xfda4, 0xff98, 0xffbb, 0x170, +0xffbb, 0x170, 0x22d, 0x3a1, 0x22d, 0x3a1, 0x3c5, 0x4f9, 0x3c5, 0x4f9, 0x3c5, +0x4f9, 0x5a2, 0x699, 0x5a2, 0x699, 0x75c, 0x818, 0x75c, 0x818, 0x86a, 0x8f0, +0x86a, 0x8f0, 0x8f4, 0x948, 0x8f4, 0x948, 0x879, 0x8a1, 0x879, 0x8a1, 0x88f, +0x88f, 0x88f, 0x88f, 0x88f, 0x88f, 0x8af, 0x88d, 0x8af, 0x88d, 0x8fb, 0x8bb, +0x8fb, 0x8bb, 0x9a8, 0x950, 0x9a8, 0x950, 0xa70, 0xa03, 0xa70, 0xa03, 0xa51, +0x9d2, 0xa51, 0x9d2, 0xa51, 0x9d2, 0xa09, 0x97a, 0xa09, 0x97a, 0xa38, 0x99a, +0xa38, 0x99a, 0x940, 0x893, 0x940, 0x893, 0x8e9, 0x82c, 0x8e9, 0x82c, 0x8a6, +0x7d8, 0x8a6, 0x7d8, 0x7d1, 0x6ef, 0x7d1, 0x6ef, 0x7d1, 0x6ef, 0x739, 0x641, +0x739, 0x641, 0x808, 0x6f6, 0x808, 0x6f6, 0x7bc, 0x68e, 0x7bc, 0x68e, 0x6a7, +0x559, 0x6a7, 0x559, 0x7a7, 0x637, 0x7a7, 0x637, 0x730, 0x59b, 0x730, 0x59b, +0x730, 0x59b, 0x7c4, 0x60b, 0x7c4, 0x60b, 0x8a6, 0x6c8, 0x8a6, 0x6c8, 0x840, +0x63d, 0x840, 0x63d, 0x93a, 0x715, 0x93a, 0x715, 0xa6e, 0x82a, 0xa6e, 0x82a, +0xa6e, 0x82a, 0xaf7, 0x898, 0xaf7, 0x898, 0xaa7, 0x832, 0xaa7, 0x832, 0xb26, +0x8a2, 0xb26, 0x8a2, 0xb2a, 0x89e, 0xb2a, 0x89e, 0xa8b, 0x800, 0xa8b, 0x800, +0xa76, 0x7f2, 0xa76, 0x7f2, 0xa76, 0x7f2, 0xb15, 0x8a0, 0xb15, 0x8a0, 0xbdb, +0x97f, 0xbdb, 0x97f, 0xb28, 0x8eb, 0xb28, 0x8eb, 0xabc, 0x8a7, 0xabc, 0x8a7, +0xada, 0x8f1, 0xada, 0x8f1, 0xaff, 0x948, 0xaff, 0x948, 0xaff, 0x948, 0x9ed, +0x86d, 0x9ed, 0x86d, 0x836, 0x6ee, 0x836, 0x6ee, 0x71c, 0x60e, 0x71c, 0x60e, +0x512, 0x43d, 0x512, 0x43d, 0x398, 0x2fb, 0x398, 0x2fb, 0x398, 0x2fb, 0x2f5, +0x28d, 0x2f5, 0x28d, 0x2d5, 0x29d, 0x2d5, 0x29d, 0x27b, 0x26e, 0x27b, 0x26e, +0x146, 0x15e, 0x146, 0x15e, 0xfc, 0x132, 0xfc, 0x132, 0xd1, 0x11c, 0xd1, +0x11c, 0xd1, 0x11c, 0xffd1, 0x2b, 0xffd1, 0x2b, 0xfed5, 0xff36, 0xfed5, 0xff36, +0xff64, 0xffc4, 0xff64, 0xffc4, 0x29, 0x83, 0x29, 0x83, 0xffd5, 0x21, 0xffd5, +0x21, 0x49, 0x83, 0x49, 0x83, 0x49, 0x83, 0x1ba, 0x1dd, 0x1ba, 0x1dd, +0x2e6, 0x2f1, 0x2e6, 0x2f1, 0x3de, 0x3cf, 0x3de, 0x3cf, 0x4e6, 0x4bc, 0x4e6, +0x4bc, 0x591, 0x54d, 0x591, 0x54d, 0x591, 0x54d, 0x6b6, 0x65b, 0x6b6, 0x65b, +0x6bc, 0x64c, 0x6bc, 0x64c, 0x6c9, 0x649, 0x6c9, 0x649, 0x6ea, 0x65e, 0x6ea, +0x65e, 0x5b3, 0x521, 0x5b3, 0x521, 0x60f, 0x57d, 0x60f, 0x57d, 0x60f, 0x57d, +0x570, 0x4e3, 0x570, 0x4e3, 0x451, 0x3d0, 0x451, 0x3d0, 0x348, 0x2d7, 0x348, +0x2d7, 0x1d9, 0x17f, 0x1d9, 0x17f, 0xf1, 0xb1, 0xf1, 0xb1, 0x9, 0xffe9, +0x9, 0xffe9, 0x9, 0xffe9, 0x38, 0x3a, 0x38, 0x3a, 0xfedc, 0xff03, 0xfedc, +0xff03, 0xfe55, 0xfea2, 0xfe55, 0xfea2, 0xfee3, 0xff57, 0xfee3, 0xff57, 0xfd77, 0xfe13, +0xfd77, 0xfe13, 0xfd77, 0xfe13, 0xfcce, 0xfd92, 0xfcce, 0xfd92, 0xfc50, 0xfd38, 0xfc50, +0xfd38, 0xfa01, 0xfb0e, 0xfa01, 0xfb0e, 0xf85c, 0xf98b, 0xf85c, 0xf98b, 0xf866, 0xf9b4, +0xf866, 0xf9b4, 0xf784, 0xf8ef, 0xf784, 0xf8ef, 0xf784, 0xf8ef, 0xf6c8, 0xf84e, 0xf6c8, +0xf84e, 0xf601, 0xf79e, 0xf601, 0xf79e, 0xf49f, 0xf652, 0xf49f, 0xf652, 0xf479, 0xf63f, +0xf479, 0xf63f, 0xf444, 0xf61b, 0xf444, 0xf61b, 0xf3ab, 0xf591, 0xf3ab, 0xf591, 0xf3ab, +0xf591, 0xf34e, 0xf542, 0xf34e, 0xf542, 0xf20f, 0xf410, 0xf20f, 0xf410, 0xf11d, 0xf329, +0xf11d, 0xf329, 0xf0f0, 0xf307, 0xf0f0, 0xf307, 0xf060, 0xf280, 0xf060, 0xf280, 0xf060, +0xf280, 0xf0da, 0xf303, 0xf0da, 0xf303, 0xf143, 0xf373, 0xf143, 0xf373, 0xf1cd, 0xf402, +0xf1cd, 0xf402, 0xf323, 0xf55c, 0xf323, 0xf55c, 0xf378, 0xf5b2, 0xf378, 0xf5b2, 0xf3da, +0xf612, 0xf3da, 0xf612, 0xf3da, 0xf612, 0xf513, 0xf745, 0xf513, 0xf745, 0xf638, 0xf861, +0xf638, 0xf861, 0xf6a2, 0xf8bc, 0xf6a2, 0xf8bc, 0xf806, 0xfa0d, 0xf806, 0xfa0d, 0xfa1e, +0xfc0b, 0xfa1e, 0xfc0b, 0xfaf0, 0xfcbe, 0xfaf0, 0xfcbe, 0xfaf0, 0xfcbe, 0xfc14, 0xfdbc, +0xfc14, 0xfdbc, 0xfe18, 0xff92, 0xfe18, 0xff92, 0xff1c, 0x63, 0xff1c, 0x63, 0xffa3, +0xae, 0xffa3, 0xae, 0xc9, 0x193, 0xc9, 0x193, 0xc9, 0x193, 0x260, 0x2e2, +0x260, 0x2e2, 0x47b, 0x4b0, 0x47b, 0x4b0, 0x75d, 0x73e, 0x75d, 0x73e, 0xa79, +0xa03, 0xa79, 0xa03, 0xc57, 0xb85, 0xc57, 0xb85, 0xe70, 0xd3f, 0xe70, 0xd3f, +0xe70, 0xd3f, 0x10a8, 0xf17, 0x10a8, 0xf17, 0x11bd, 0xfcb, 0x11bd, 0xfcb, 0x1282, +0x102e, 0x1282, 0x102e, 0x124c, 0xf98, 0x124c, 0xf98, 0x1325, 0x1014, 0x1325, 0x1014, +0x14e4, 0x1178, 0x14e4, 0x1178, 0x14e4, 0x1178, 0x158f, 0x11cc, 0x158f, 0x11cc, 0x16e1, +0x12cc, 0x16e1, 0x12cc, 0x1852, 0x13f1, 0x1852, 0x13f1, 0x1946, 0x149e, 0x1946, 0x149e, +0x1a37, 0x1550, 0x1a37, 0x1550, 0x1a37, 0x1550, 0x1a77, 0x1556, 0x1a77, 0x1556, 0x1a19, +0x14c7, 0x1a19, 0x14c7, 0x1a0f, 0x1494, 0x1a0f, 0x1494, 0x1ab5, 0x1518, 0x1ab5, 0x1518, +0x1afd, 0x1546, 0x1afd, 0x1546, 0x1b42, 0x1579, 0x1b42, 0x1579, 0x1b42, 0x1579, 0x1b14, +0x1541, 0x1b14, 0x1541, 0x19ef, 0x141a, 0x19ef, 0x141a, 0x1962, 0x1392, 0x1962, 0x1392, +0x18d4, 0x1312, 0x18d4, 0x1312, 0x17d4, 0x1228, 0x17d4, 0x1228, 0x17bf, 0x1230, 0x17bf, +0x1230, 0x17bf, 0x1230, 0x17f3, 0x1288, 0x17f3, 0x1288, 0x16a7, 0x1168, 0x16a7, 0x1168, +0x1603, 0x10f7, 0x1603, 0x10f7, 0x162e, 0x115c, 0x162e, 0x115c, 0x1596, 0x1104, 0x1596, +0x1104, 0x1596, 0x1104, 0x14d1, 0x1086, 0x14d1, 0x1086, 0x12be, 0xec0, 0x12be, 0xec0, +0x10ff, 0xd54, 0x10ff, 0xd54, 0x1040, 0xced, 0x1040, 0xced, 0xe2d, 0xb36, 0xe2d, +0xb36, 0xb52, 0x8bc, 0xb52, 0x8bc, 0xb52, 0x8bc, 0x99e, 0x76c, 0x99e, 0x76c, +0x870, 0x6a4, 0x870, 0x6a4, 0x72b, 0x5c7, 0x72b, 0x5c7, 0x502, 0x407, 0x502, +0x407, 0x272, 0x1e0, 0x272, 0x1e0, 0x272, 0x1e0, 0x162, 0x137, 0x162, 0x137, +0xfec9, 0xff03, 0xfec9, 0xff03, 0xfc09, 0xfca6, 0xfc09, 0xfca6, 0xfb44, 0xfc3e, 0xfb44, +0xfc3e, 0xf9fc, 0xfb50, 0xf9fc, 0xfb50, 0xf7f8, 0xf9a0, 0xf7f8, 0xf9a0, 0xf7f8, 0xf9a0, +0xf71c, 0xf912, 0xf71c, 0xf912, 0xf7a3, 0xf9df, 0xf7a3, 0xf9df, 0xf6ba, 0xf935, 0xf6ba, +0xf935, 0xf626, 0xf8d9, 0xf626, 0xf8d9, 0xf60f, 0xf8f2, 0xf60f, 0xf8f2, 0xf539, 0xf844, +0xf539, 0xf844, 0xf539, 0xf844, 0xf557, 0xf883, 0xf557, 0xf883, 0xf5d0, 0xf914, 0xf5d0, +0xf914, 0xf5e3, 0xf939, 0xf5e3, 0xf939, 0xf5a0, 0xf901, 0xf5a0, 0xf901, 0xf5ce, 0xf933, +0xf5ce, 0xf933, 0xf5ce, 0xf933, 0xf5c6, 0xf92a, 0xf5c6, 0xf92a, 0xf5f7, 0xf954, 0xf5f7, +0xf954, 0xf6a7, 0xf9fa, 0xf6a7, 0xf9fa, 0xf6fd, 0xfa3f, 0xf6fd, 0xfa3f, 0xf7b8, 0xfae8, +0xf7b8, 0xfae8, 0xf877, 0xfb91, 0xf877, 0xfb91, 0xf877, 0xfb91, 0xf8f4, 0xfbf5, 0xf8f4, +0xfbf5, 0xf928, 0xfc0e, 0xf928, 0xfc0e, 0xf985, 0xfc4e, 0xf985, 0xfc4e, 0xf9f9, 0xfca3, +0xf9f9, 0xfca3, 0xfafe, 0xfd86, 0xfafe, 0xfd86, 0xfc23, 0xfe88, 0xfc23, 0xfe88, 0xfc23, +0xfe88, 0xfbb5, 0xfdf6, 0xfbb5, 0xfdf6, 0xfc15, 0xfe30, 0xfc15, 0xfe30, 0xfca7, 0xfe99, +0xfca7, 0xfe99, 0xfceb, 0xfeb3, 0xfceb, 0xfeb3, 0xfe99, 0x35, 0xfe99, 0x35, 0xfe99, +0x35, 0xffa2, 0x111, 0xffa2, 0x111, 0x60, 0x19f, 0x60, 0x19f, 0x18d, 0x29b, +0x18d, 0x29b, 0x28e, 0x36a, 0x28e, 0x36a, 0x363, 0x40c, 0x363, 0x40c, 0x46d, +0x4e3, 0x46d, 0x4e3, 0x46d, 0x4e3, 0x5e3, 0x626, 0x5e3, 0x626, 0x6f6, 0x707, +0x6f6, 0x707, 0x79d, 0x77f, 0x79d, 0x77f, 0x7fc, 0x7b0, 0x7fc, 0x7b0, 0x8a3, +0x82e, 0x8a3, 0x82e, 0x95c, 0x8c2, 0x95c, 0x8c2, 0x95c, 0x8c2, 0x940, 0x886, +0x940, 0x886, 0x925, 0x851, 0x925, 0x851, 0x9ce, 0x8e8, 0x9ce, 0x8e8, 0x951, +0x85f, 0x951, 0x85f, 0x745, 0x64f, 0x745, 0x64f, 0x745, 0x64f, 0x5bd, 0x4cb, +0x5bd, 0x4cb, 0x523, 0x43d, 0x523, 0x43d, 0x469, 0x396, 0x469, 0x396, 0x26a, +0x1b3, 0x26a, 0x1b3, 0xd0, 0x3a, 0xd0, 0x3a, 0xffa6, 0xff39, 0xffa6, 0xff39, +0xffa6, 0xff39, 0xfd98, 0xfd58, 0xfd98, 0xfd58, 0xfb81, 0xfb73, 0xfb81, 0xfb73, 0xf957, +0xf97e, 0xf957, 0xf97e, 0xf681, 0xf6de, 0xf681, 0xf6de, 0xf2a5, 0xf339, 0xf2a5, 0xf339, +0xf012, 0xf0dc, 0xf012, 0xf0dc, 0xf012, 0xf0dc, 0xee5b, 0xef59, 0xee5b, 0xef59, 0xeb69, +0xec99, 0xeb69, 0xec99, 0xe92b, 0xea87, 0xe92b, 0xea87, 0xe6ee, 0xe871, 0xe6ee, 0xe871, +0xe4ad, 0xe653, 0xe4ad, 0xe653, 0xe4ad, 0xe653, 0xe388, 0xe549, 0xe388, 0xe549, 0xe1fc, +0xe3d2, 0xe1fc, 0xe3d2, 0xe0c0, 0xe2a4, 0xe0c0, 0xe2a4, 0xe01e, 0xe20a, 0xe01e, 0xe20a, +0xdfa3, 0xe190, 0xdfa3, 0xe190, 0xdfa7, 0xe190, 0xdfa7, 0xe190, 0xdfa7, 0xe190, 0xe00e, +0xe1ee, 0xe00e, 0xe1ee, 0xe0b5, 0xe288, 0xe0b5, 0xe288, 0xe161, 0xe324, 0xe161, 0xe324, +0xe3cc, 0xe57c, 0xe3cc, 0xe57c, 0xe6ac, 0xe847, 0xe6ac, 0xe847, 0xe856, 0xe9dd, 0xe856, +0xe9dd, 0xe856, 0xe9dd, 0xea4a, 0xebbd, 0xea4a, 0xebbd, 0xeb5c, 0xecbc, 0xeb5c, 0xecbc, +0xebae, 0xecfd, 0xebae, 0xecfd, 0xec47, 0xed87, 0xec47, 0xed87, 0xec8c, 0xedbf, 0xec8c, +0xedbf, 0xec8c, 0xedbf, 0xecd0, 0xedf9, 0xecd0, 0xedf9, 0xed14, 0xee35, 0xed14, 0xee35, +0xed2f, 0xee4a, 0xed2f, 0xee4a, 0xee32, 0xef48, 0xee32, 0xef48, 0xefe4, 0xf0f7, 0xefe4, +0xf0f7, 0xf177, 0xf288, 0xf177, 0xf288, 0xf177, 0xf288, 0xf2e3, 0xf3f1, 0xf2e3, 0xf3f1, +0xf468, 0xf571, 0xf468, 0xf571, 0xf616, 0xf719, 0xf616, 0xf719, 0xf744, 0xf840, 0xf744, +0xf840, 0xf957, 0xfa48, 0xf957, 0xfa48, 0xfb34, 0xfc17, 0xfb34, 0xfc17, 0xfb34, 0xfc17, +0xfc00, 0xfcd2, 0xfc00, 0xfcd2, 0xfda3, 0xfe60, 0xfda3, 0xfe60, 0xff63, 0x8, 0xff63, +0x8, 0x18b, 0x215, 0x18b, 0x215, 0x38e, 0x3fb, 0x38e, 0x3fb, 0x38e, 0x3fb, +0x54b, 0x599, 0x54b, 0x599, 0x79c, 0x7ca, 0x79c, 0x7ca, 0x985, 0x994, 0x985, +0x994, 0xaa6, 0xa97, 0xaa6, 0xa97, 0xba3, 0xb77, 0xba3, 0xb77, 0xd62, 0xd1e, +0xd62, 0xd1e, 0xd62, 0xd1e, 0xf74, 0xf1c, 0xf74, 0xf1c, 0x106e, 0x1006, 0x106e, +0x1006, 0xfe6, 0xf75, 0xfe6, 0xf75, 0x1004, 0xf91, 0x1004, 0xf91, 0x100e, 0xfa0, +0x100e, 0xfa0, 0xf62, 0xeff, 0xf62, 0xeff, 0xf62, 0xeff, 0x1047, 0xff8, 0x1047, +0xff8, 0x10a5, 0x106f, 0x10a5, 0x106f, 0x102b, 0x1016, 0x102b, 0x1016, 0xfc6, 0xfd6, +0xfc6, 0xfd6, 0xf2d, 0xf66, 0xf2d, 0xf66, 0xf2d, 0xf66, 0xe89, 0xeef, 0xe89, +0xeef, 0xca2, 0xd36, 0xca2, 0xd36, 0xa2b, 0xaee, 0xa2b, 0xaee, 0x7e9, 0x8da, +0x7e9, 0x8da, 0x69b, 0x7b7, 0x69b, 0x7b7, 0x595, 0x6d9, 0x595, 0x6d9, 0x595, +0x6d9, 0x2d7, 0x43d, 0x2d7, 0x43d, 0xffb4, 0x136, 0xffb4, 0x136, 0xfdee, 0xff85, +0xfdee, 0xff85, 0xfcfc, 0xfea0, 0xfcfc, 0xfea0, 0xfbb4, 0xfd5d, 0xfbb4, 0xfd5d, 0xfa75, +0xfc1b, 0xfa75, 0xfc1b, 0xfa75, 0xfc1b, 0xf8b7, 0xfa52, 0xf8b7, 0xfa52, 0xf6ed, 0xf874, +0xf6ed, 0xf874, 0xf69e, 0xf80a, 0xf69e, 0xf80a, 0xf71a, 0xf865, 0xf71a, 0xf865, 0xf7bd, +0xf8e0, 0xf7bd, 0xf8e0, 0xf7bd, 0xf8e0, 0xf82e, 0xf925, 0xf82e, 0xf925, 0xf88b, 0xf953, +0xf88b, 0xf953, 0xf8e9, 0xf97d, 0xf8e9, 0xf97d, 0xf960, 0xf9c1, 0xf960, 0xf9c1, 0xf986, +0xf9b4, 0xf986, 0xf9b4, 0xf9ec, 0xf9e7, 0xf9ec, 0xf9e7, 0xf9ec, 0xf9e7, 0xfa9f, 0xfa69, +0xfa9f, 0xfa69, 0xfae8, 0xfa83, 0xfae8, 0xfa83, 0xfc89, 0xfbf7, 0xfc89, 0xfbf7, 0xfdd6, +0xfd1c, 0xfdd6, 0xfd1c, 0xfe8c, 0xfdac, 0xfe8c, 0xfdac, 0xfe8c, 0xfdac, 0xff8f, 0xfe8d, +0xff8f, 0xfe8d, 0xff12, 0xfdf2, 0xff12, 0xfdf2, 0xfee4, 0xfda8, 0xfee4, 0xfda8, 0xff13, +0xfdbe, 0xff13, 0xfdbe, 0xfe8d, 0xfd21, 0xfe8d, 0xfd21, 0xfee7, 0xfd65, 0xfee7, 0xfd65, +0xfee7, 0xfd65, 0xff8e, 0xfdf7, 0xff8e, 0xfdf7, 0x4, 0xfe5a, 0x4, 0xfe5a, 0xf4, +0xff35, 0xf4, 0xff35, 0x1db, 0x9, 0x1db, 0x9, 0x2e5, 0xfe, 0x2e5, 0xfe, +0x2b0, 0xb5, 0x2b0, 0xb5, 0x2b0, 0xb5, 0x2c7, 0xb7, 0x2c7, 0xb7, 0x49a, +0x276, 0x49a, 0x276, 0x479, 0x242, 0x479, 0x242, 0x44c, 0x204, 0x44c, 0x204, +0x4f5, 0x29d, 0x4f5, 0x29d, 0x4f5, 0x29d, 0x635, 0x3d1, 0x635, 0x3d1, 0x76c, +0x500, 0x76c, 0x500, 0x73d, 0x4cf, 0x73d, 0x4cf, 0x8c3, 0x658, 0x8c3, 0x658, +0x9da, 0x779, 0x9da, 0x779, 0xa9a, 0x84a, 0xa9a, 0x84a, 0xa9a, 0x84a, 0xb26, +0x8f0, 0xb26, 0x8f0, 0xaff, 0x8eb, 0xaff, 0x8eb, 0xc6f, 0xa85, 0xc6f, 0xa85, +0xcfe, 0xb47, 0xcfe, 0xb47, 0xcb8, 0xb3d, 0xcb8, 0xb3d, 0xc18, 0xae0, 0xc18, +0xae0, 0xc18, 0xae0, 0xb15, 0xa27, 0xb15, 0xa27, 0x846, 0x7a8, 0x846, 0x7a8, +0x5b1, 0x566, 0x5b1, 0x566, 0x5b0, 0x5bd, 0x5b0, 0x5bd, 0x410, 0x477, 0x410, +0x477, 0x410, 0x477, 0x174, 0x234, 0x174, 0x234, 0xfef6, 0xf, 0xfef6, 0xf, +0xfd7b, 0xfeeb, 0xfd7b, 0xfeeb, 0xfcaa, 0xfe6c, 0xfcaa, 0xfe6c, 0xfb9a, 0xfda9, 0xfb9a, +0xfda9, 0xf9e7, 0xfc3d, 0xf9e7, 0xfc3d, 0xf9e7, 0xfc3d, 0xf68d, 0xf922, 0xf68d, 0xf922, +0xf4cb, 0xf797, 0xf4cb, 0xf797, 0xf425, 0xf720, 0xf425, 0xf720, 0xf300, 0xf621, 0xf300, +0xf621, 0xf151, 0xf48f, 0xf151, 0xf48f, 0xeff7, 0xf349, 0xeff7, 0xf349, 0xeff7, 0xf349, +0xee87, 0xf1e5, 0xee87, 0xf1e5, 0xecca, 0xf02c, 0xecca, 0xf02c, 0xed3c, 0xf09a, 0xed3c, +0xf09a, 0xed32, 0xf086, 0xed32, 0xf086, 0xecff, 0xf043, 0xecff, 0xf043, 0xecff, 0xf043, +0xed18, 0xf047, 0xed18, 0xf047, 0xed43, 0xf058, 0xed43, 0xf058, 0xee8d, 0xf184, 0xee8d, +0xf184, 0xee40, 0xf116, 0xee40, 0xf116, 0xee8d, 0xf140, 0xee8d, 0xf140, 0xefcf, 0xf25b, +0xefcf, 0xf25b, 0xefcf, 0xf25b, 0xf061, 0xf2c3, 0xf061, 0xf2c3, 0xf142, 0xf378, 0xf142, +0xf378, 0xf297, 0xf49e, 0xf297, 0xf49e, 0xf435, 0xf60b, 0xf435, 0xf60b, 0xf554, 0xf6f4, +0xf554, 0xf6f4, 0xf710, 0xf878, 0xf710, 0xf878, 0xf710, 0xf878, 0xf940, 0xfa6d, 0xf940, +0xfa6d, 0xfc78, 0xfd65, 0xfc78, 0xfd65, 0xff94, 0x3d, 0xff94, 0x3d, 0x13a, 0x19a, +0x13a, 0x19a, 0x367, 0x37a, 0x367, 0x37a, 0x367, 0x37a, 0x502, 0x4c4, 0x502, +0x4c4, 0x753, 0x6bf, 0x753, 0x6bf, 0x98f, 0x8a2, 0x98f, 0x8a2, 0xa46, 0x8fd, +0xa46, 0x8fd, 0xc25, 0xa7e, 0xc25, 0xa7e, 0xe64, 0xc5e, 0xe64, 0xc5e, 0xe64, +0xc5e, 0xfcd, 0xd68, 0xfcd, 0xd68, 0x1210, 0xf4e, 0x1210, 0xf4e, 0x160b, 0x12ee, +0x160b, 0x12ee, 0x1890, 0x151d, 0x1890, 0x151d, 0x196b, 0x15a6, 0x196b, 0x15a6, 0x1b13, +0x1703, 0x1b13, 0x1703, 0x1b13, 0x1703, 0x1c4b, 0x17f8, 0x1c4b, 0x17f8, 0x1bf3, 0x1765, +0x1bf3, 0x1765, 0x1c15, 0x1756, 0x1c15, 0x1756, 0x1d44, 0x185e, 0x1d44, 0x185e, 0x1dda, +0x18d7, 0x1dda, 0x18d7, 0x1dda, 0x18d7, 0x1dd6, 0x18c1, 0x1dd6, 0x18c1, 0x1dc9, 0x18ad, +0x1dc9, 0x18ad, 0x1ebb, 0x19a2, 0x1ebb, 0x19a2, 0x1f5b, 0x1a4e, 0x1f5b, 0x1a4e, 0x1f45, +0x1a4d, 0x1f45, 0x1a4d, 0x1ee0, 0x1a05, 0x1ee0, 0x1a05, 0x1ee0, 0x1a05, 0x1dc4, 0x190c, +0x1dc4, 0x190c, 0x1d0f, 0x1880, 0x1d0f, 0x1880, 0x1bbc, 0x175b, 0x1bbc, 0x175b, 0x1a44, +0x1612, 0x1a44, 0x1612, 0x1868, 0x1469, 0x1868, 0x1469, 0x15f6, 0x1229, 0x15f6, 0x1229, +0x15f6, 0x1229, 0x139c, 0x1002, 0x139c, 0x1002, 0x11bf, 0xe56, 0x11bf, 0xe56, 0x112f, +0xdf7, 0x112f, 0xdf7, 0xfdc, 0xcd2, 0xfdc, 0xcd2, 0xe7b, 0xb9d, 0xe7b, 0xb9d, +0xe7b, 0xb9d, 0xd2f, 0xa7a, 0xd2f, 0xa7a, 0xc31, 0x9a3, 0xc31, 0x9a3, 0xbc0, +0x958, 0xbc0, 0x958, 0xa09, 0x7c5, 0xa09, 0x7c5, 0x91c, 0x6fb, 0x91c, 0x6fb, +0x8b3, 0x6b6, 0x8b3, 0x6b6, 0x8b3, 0x6b6, 0x838, 0x65e, 0x838, 0x65e, 0x7e7, +0x632, 0x7e7, 0x632, 0x7f0, 0x662, 0x7f0, 0x662, 0x817, 0x6b1, 0x817, 0x6b1, +0x69b, 0x560, 0x69b, 0x560, 0x542, 0x435, 0x542, 0x435, 0x542, 0x435, 0x471, +0x393, 0x471, 0x393, 0x394, 0x2e8, 0x394, 0x2e8, 0x1ed, 0x174, 0x1ed, 0x174, +0x72, 0x2d, 0x72, 0x2d, 0xff26, 0xff16, 0xff26, 0xff16, 0xff26, 0xff16, 0xfcae, +0xfcd3, 0xfcae, 0xfcd3, 0xfc7d, 0xfcd4, 0xfc7d, 0xfcd4, 0xfccd, 0xfd54, 0xfccd, 0xfd54, +0xfc4b, 0xfcff, 0xfc4b, 0xfcff, 0xfc5b, 0xfd37, 0xfc5b, 0xfd37, 0xfca2, 0xfda3, 0xfca2, +0xfda3, 0xfca2, 0xfda3, 0xfdd2, 0xfeef, 0xfdd2, 0xfeef, 0xfef5, 0x2a, 0xfef5, 0x2a, +0xfff9, 0x13f, 0xfff9, 0x13f, 0x83, 0x1d3, 0x83, 0x1d3, 0x1cc, 0x320, 0x1cc, +0x320, 0x31a, 0x46c, 0x31a, 0x46c, 0x31a, 0x46c, 0x3ab, 0x4f5, 0x3ab, 0x4f5, +0x5ff, 0x73d, 0x5ff, 0x73d, 0x73c, 0x86a, 0x73c, 0x86a, 0x69e, 0x7ba, 0x69e, +0x7ba, 0x6d7, 0x7e0, 0x6d7, 0x7e0, 0x6d7, 0x7e0, 0x771, 0x867, 0x771, 0x867, +0x7d5, 0x8b8, 0x7d5, 0x8b8, 0x7a1, 0x875, 0x7a1, 0x875, 0x73a, 0x801, 0x73a, +0x801, 0x769, 0x829, 0x769, 0x829, 0x6e8, 0x7a6, 0x6e8, 0x7a6, 0x6e8, 0x7a6, +0x665, 0x726, 0x665, 0x726, 0x6a7, 0x772, 0x6a7, 0x772, 0x65d, 0x736, 0x65d, +0x736, 0x6cb, 0x7b9, 0x6cb, 0x7b9, 0x749, 0x852, 0x749, 0x852, 0x749, 0x852, +0x61c, 0x742, 0x61c, 0x742, 0x4a2, 0x5eb, 0x4a2, 0x5eb, 0x3b8, 0x525, 0x3b8, +0x525, 0x24f, 0x3e1, 0x24f, 0x3e1, 0xfff5, 0x1ac, 0xfff5, 0x1ac, 0xfe5d, 0x38, +0xfe5d, 0x38, 0xfe5d, 0x38, 0xfcf3, 0xfef0, 0xfcf3, 0xfef0, 0xfb2c, 0xfd47, 0xfb2c, +0xfd47, 0xfa2d, 0xfc62, 0xfa2d, 0xfc62, 0xfa00, 0xfc49, 0xfa00, 0xfc49, 0xfa62, 0xfcba, +0xfa62, 0xfcba, 0xf9ad, 0xfc0f, 0xf9ad, 0xfc0f, 0xf9ad, 0xfc0f, 0xf89b, 0xfb00, 0xf89b, +0xfb00, 0xf7c7, 0xfa2a, 0xf7c7, 0xfa2a, 0xf695, 0xf8ef, 0xf695, 0xf8ef, 0xf510, 0xf75e, +0xf510, 0xf75e, 0xf37c, 0xf5b8, 0xf37c, 0xf5b8, 0xf37c, 0xf5b8, 0xf373, 0xf59b, 0xf373, +0xf59b, 0xf375, 0xf587, 0xf375, 0xf587, 0xf39f, 0xf59a, 0xf39f, 0xf59a, 0xf36e, 0xf551, +0xf36e, 0xf551, 0xf2b7, 0xf483, 0xf2b7, 0xf483, 0xf2fb, 0xf4b2, 0xf2fb, 0xf4b2, 0xf2fb, +0xf4b2, 0xf1e3, 0xf387, 0xf1e3, 0xf387, 0xf0e9, 0xf27d, 0xf0e9, 0xf27d, 0xf04a, 0xf1d0, +0xf04a, 0xf1d0, 0xef54, 0xf0d1, 0xef54, 0xf0d1, 0xee4d, 0xefc3, 0xee4d, 0xefc3, 0xed16, +0xee88, 0xed16, 0xee88, 0xed16, 0xee88, 0xed93, 0xef04, 0xed93, 0xef04, 0xecfd, 0xee6f, +0xecfd, 0xee6f, 0xea80, 0xebf4, 0xea80, 0xebf4, 0xe8ad, 0xea23, 0xe8ad, 0xea23, 0xe7d8, +0xe94f, 0xe7d8, 0xe94f, 0xe7d8, 0xe94f, 0xe702, 0xe87b, 0xe702, 0xe87b, 0xe515, 0xe68c, +0xe515, 0xe68c, 0xe467, 0xe5da, 0xe467, 0xe5da, 0xe495, 0xe600, 0xe495, 0xe600, 0xe43e, +0xe59e, 0xe43e, 0xe59e, 0xe493, 0xe5e4, 0xe493, 0xe5e4, 0xe493, 0xe5e4, 0xe45c, 0xe59a, +0xe45c, 0xe59a, 0xe4eb, 0xe614, 0xe4eb, 0xe614, 0xe58d, 0xe69d, 0xe58d, 0xe69d, 0xe599, +0xe68d, 0xe599, 0xe68d, 0xe77e, 0xe856, 0xe77e, 0xe856, 0xe8df, 0xe999, 0xe8df, 0xe999, +0xe8df, 0xe999, 0xe96b, 0xea08, 0xe96b, 0xea08, 0xeb24, 0xeba6, 0xeb24, 0xeba6, 0xed82, +0xedeb, 0xed82, 0xedeb, 0xefa5, 0xeff9, 0xefa5, 0xeff9, 0xf1d1, 0xf214, 0xf1d1, 0xf214, +0xf1d1, 0xf214, 0xf2ca, 0xf302, 0xf2ca, 0xf302, 0xf35a, 0xf38e, 0xf35a, 0xf38e, 0xf460, +0xf496, 0xf460, 0xf496, 0xf43b, 0xf47b, 0xf43b, 0xf47b, 0xf547, 0xf598, 0xf547, 0xf598, +0xf62b, 0xf693, 0xf62b, 0xf693, 0xf62b, 0xf693, 0xf5d4, 0xf659, 0xf5d4, 0xf659, 0xf572, +0xf61a, 0xf572, 0xf61a, 0xf520, 0xf5ef, 0xf520, 0xf5ef, 0xf5c4, 0xf6be, 0xf5c4, 0xf6be, +0xf4ae, 0xf5d5, 0xf4ae, 0xf5d5, 0xf34f, 0xf4a3, 0xf34f, 0xf4a3, 0xf34f, 0xf4a3, 0xf3b2, +0xf534, 0xf3b2, 0xf534, 0xf3f2, 0xf59f, 0xf3f2, 0xf59f, 0xf476, 0xf64b, 0xf476, 0xf64b, +0xf476, 0xf66e, 0xf476, 0xf66e, 0xf487, 0xf69d, 0xf487, 0xf69d, 0xf487, 0xf69d, 0xf563, +0xf791, 0xf563, 0xf791, 0xf4c3, 0xf700, 0xf4c3, 0xf700, 0xf48b, 0xf6d1, 0xf48b, 0xf6d1, +0xf4e7, 0xf72e, 0xf4e7, 0xf72e, 0xf56d, 0xf7ad, 0xf56d, 0xf7ad, 0xf6c9, 0xf8fb, 0xf6c9, +0xf8fb, 0xf6c9, 0xf8fb, 0xf76c, 0xf989, 0xf76c, 0xf989, 0xf979, 0xfb7b, 0xf979, 0xfb7b, +0xfb2a, 0xfd0c, 0xfb2a, 0xfd0c, 0xfc34, 0xfdf3, 0xfc34, 0xfdf3, 0xfe20, 0xffb7, 0xfe20, +0xffb7, 0xff16, 0x83, 0xff16, 0x83, 0xff16, 0x83, 0x4c, 0x18f, 0x4c, 0x18f, +0x11d, 0x235, 0x11d, 0x235, 0x1ac, 0x29c, 0x1ac, 0x29c, 0x2f6, 0x3bf, 0x2f6, +0x3bf, 0x4ee, 0x593, 0x4ee, 0x593, 0x4ee, 0x593, 0x6bc, 0x740, 0x6bc, 0x740, +0x849, 0x8b0, 0x849, 0x8b0, 0x9d8, 0xa25, 0x9d8, 0xa25, 0x9f2, 0xa29, 0x9f2, +0xa29, 0xa5a, 0xa7e, 0xa5a, 0xa7e, 0xa80, 0xa94, 0xa80, 0xa94, 0xa80, 0xa94, +0x947, 0x94d, 0x947, 0x94d, 0x819, 0x813, 0x819, 0x813, 0x7aa, 0x798, 0x7aa, +0x798, 0x86b, 0x84e, 0x86b, 0x84e, 0x8ae, 0x884, 0x8ae, 0x884, 0x84c, 0x814, +0x84c, 0x814, 0x84c, 0x814, 0x83f, 0x7f7, 0x83f, 0x7f7, 0x868, 0x80d, 0x868, +0x80d, 0x819, 0x7a8, 0x819, 0x7a8, 0x7b8, 0x72e, 0x7b8, 0x72e, 0x7b7, 0x711, +0x7b7, 0x711, 0x7b7, 0x711, 0x623, 0x55c, 0x623, 0x55c, 0x5b8, 0x4cf, 0x5b8, +0x4cf, 0x6e5, 0x5d7, 0x6e5, 0x5d7, 0x692, 0x55e, 0x692, 0x55e, 0x707, 0x5ab, +0x707, 0x5ab, 0x798, 0x614, 0x798, 0x614, 0x798, 0x614, 0x800, 0x656, 0x800, +0x656, 0x8ca, 0x6fc, 0x8ca, 0x6fc, 0x882, 0x693, 0x882, 0x693, 0x7ce, 0x5c0, +0x7ce, 0x5c0, 0x6ab, 0x485, 0x6ab, 0x485, 0x625, 0x3eb, 0x625, 0x3eb, 0x625, +0x3eb, 0x62c, 0x3e4, 0x62c, 0x3e4, 0x69c, 0x44d, 0x69c, 0x44d, 0x7ac, 0x55d, +0x7ac, 0x55d, 0x887, 0x63d, 0x887, 0x63d, 0x912, 0x6d3, 0x912, 0x6d3, 0x912, +0x6d3, 0x870, 0x642, 0x870, 0x642, 0x7a9, 0x591, 0x7a9, 0x591, 0x732, 0x534, +0x732, 0x534, 0x639, 0x45a, 0x639, 0x45a, 0x4ce, 0x30e, 0x4ce, 0x30e, 0x310, +0x171, 0x310, 0x171, 0x310, 0x171, 0x23c, 0xbe, 0x23c, 0xbe, 0x1b5, 0x57, +0x1b5, 0x57, 0, 0xfec0, 0, 0xfec0, 0xff00, 0xfdda, 0xff00, 0xfdda, 0xff3d, +0xfe2e, 0xff3d, 0xfe2e, 0xfeef, 0xfdf2, 0xfeef, 0xfdf2, 0xfeef, 0xfdf2, 0xfe1d, 0xfd2c, +0xfe1d, 0xfd2c, 0xfcfc, 0xfc14, 0xfcfc, 0xfc14, 0xfc97, 0xfbb0, 0xfc97, 0xfbb0, 0xfca3, +0xfbb9, 0xfca3, 0xfbb9, 0xfbaf, 0xfabd, 0xfbaf, 0xfabd, 0xfbaf, 0xfabd, 0xfac4, 0xf9c5, +0xfac4, 0xf9c5, 0xfb38, 0xfa2a, 0xfb38, 0xfa2a, 0xfc61, 0xfb40, 0xfc61, 0xfb40, 0xfcaf, +0xfb79, 0xfcaf, 0xfb79, 0xfded, 0xfca1, 0xfded, 0xfca1, 0x76, 0xff16, 0x76, 0xff16, +0x76, 0xff16, 0x2bf, 0x14b, 0x2bf, 0x14b, 0x4ea, 0x365, 0x4ea, 0x365, 0x6d4, +0x542, 0x6d4, 0x542, 0x8a6, 0x70a, 0x8a6, 0x70a, 0x950, 0x7b0, 0x950, 0x7b0, +0x950, 0x7b0, 0x809, 0x66a, 0x809, 0x66a, 0x6ce, 0x536, 0x6ce, 0x536, 0x746, +0x5bb, 0x746, 0x5bb, 0x737, 0x5be, 0x737, 0x5be, 0x671, 0x510, 0x671, 0x510, +0x633, 0x4f0, 0x633, 0x4f0, 0x633, 0x4f0, 0x603, 0x4e2, 0x603, 0x4e2, 0x634, +0x538, 0x634, 0x538, 0x662, 0x58f, 0x662, 0x58f, 0x772, 0x6c9, 0x772, 0x6c9, +0x77a, 0x6fd, 0x77a, 0x6fd, 0x604, 0x5b2, 0x604, 0x5b2, 0x604, 0x5b2, 0x5ea, +0x5c2, 0x5ea, 0x5c2, 0x6cf, 0x6d0, 0x6cf, 0x6d0, 0x6e2, 0x708, 0x6e2, 0x708, +0x5c1, 0x609, 0x5c1, 0x609, 0x4bf, 0x526, 0x4bf, 0x526, 0x4bf, 0x526, 0x3a8, +0x429, 0x3a8, 0x429, 0x404, 0x49b, 0x404, 0x49b, 0x3fe, 0x4a7, 0x3fe, 0x4a7, +0x1fa, 0x2b0, 0x1fa, 0x2b0, 0x113, 0x1d3, 0x113, 0x1d3, 0x15, 0xdb, 0x15, +0xdb, 0x15, 0xdb, 0xfe42, 0xff0c, 0xfe42, 0xff0c, 0xfd23, 0xfded, 0xfd23, 0xfded, +0xfbfc, 0xfcc6, 0xfbfc, 0xfcc6, 0xfa63, 0xfb2c, 0xfa63, 0xfb2c, 0xfa14, 0xfadc, 0xfa14, +0xfadc, 0xfa43, 0xfb09, 0xfa43, 0xfb09, 0xfa43, 0xfb09, 0xfb0a, 0xfbcf, 0xfb0a, 0xfbcf, +0xfb58, 0xfc1e, 0xfb58, 0xfc1e, 0xfa69, 0xfb31, 0xfa69, 0xfb31, 0xfaa8, 0xfb73, 0xfaa8, +0xfb73, 0xfab4, 0xfb84, 0xfab4, 0xfb84, 0xfab4, 0xfb84, 0xfb3b, 0xfc11, 0xfb3b, 0xfc11, +0xfbe5, 0xfcc2, 0xfbe5, 0xfcc2, 0xfc1e, 0xfd02, 0xfc1e, 0xfd02, 0xfcad, 0xfd99, 0xfcad, +0xfd99, 0xfc6a, 0xfd5b, 0xfc6a, 0xfd5b, 0xfd09, 0xfdff, 0xfd09, 0xfdff, 0xfd09, 0xfdff, +0xfdd6, 0xfece, 0xfdd6, 0xfece, 0xfd19, 0xfe10, 0xfd19, 0xfe10, 0xfca9, 0xfd9c, 0xfca9, +0xfd9c, 0xfc7d, 0xfd67, 0xfc7d, 0xfd67, 0xfc97, 0xfd74, 0xfc97, 0xfd74, 0xfc81, 0xfd4b, +0xfc81, 0xfd4b, 0xfc81, 0xfd4b, 0xfc65, 0xfd18, 0xfc65, 0xfd18, 0xfe46, 0xfedb, 0xfe46, +0xfedb, 0xff9d, 0x10, 0xff9d, 0x10, 0x1e5, 0x231, 0x1e5, 0x231, 0x459, 0x47a, +0x459, 0x47a, 0x459, 0x47a, 0x565, 0x557, 0x565, 0x557, 0x75c, 0x71b, 0x75c, +0x71b, 0x880, 0x80a, 0x880, 0x80a, 0xa32, 0x987, 0xa32, 0x987, 0xb20, 0xa3e, +0xb20, 0xa3e, 0xbc7, 0xab0, 0xbc7, 0xab0, 0xbc7, 0xab0, 0xde3, 0xc98, 0xde3, +0xc98, 0xfd9, 0xe5c, 0xfd9, 0xe5c, 0x1110, 0xf65, 0x1110, 0xf65, 0x117b, 0xfa4, +0x117b, 0xfa4, 0x12c0, 0x10c2, 0x12c0, 0x10c2, 0x135d, 0x113e, 0x135d, 0x113e, 0x135d, +0x113e, 0x137f, 0x1142, 0x137f, 0x1142, 0x147e, 0x1229, 0x147e, 0x1229, 0x14c5, 0x125c, +0x14c5, 0x125c, 0x1465, 0x11ee, 0x1465, 0x11ee, 0x14b6, 0x1234, 0x14b6, 0x1234, 0x14b6, +0x1234, 0x1513, 0x128a, 0x1513, 0x128a, 0x1659, 0x13cc, 0x1659, 0x13cc, 0x1733, 0x14a7, +0x1733, 0x14a7, 0x1707, 0x147d, 0x1707, 0x147d, 0x175b, 0x14d6, 0x175b, 0x14d6, 0x16d0, +0x1451, 0x16d0, 0x1451, 0x16d0, 0x1451, 0x1721, 0x14aa, 0x1721, 0x14aa, 0x1736, 0x14c8, +0x1736, 0x14c8, 0x1611, 0x13ae, 0x1611, 0x13ae, 0x1545, 0x12ed, 0x1545, 0x12ed, 0x1590, +0x1345, 0x1590, 0x1345, 0x1582, 0x1345, 0x1582, 0x1345, 0x1582, 0x1345, 0x14b9, 0x128d, +0x14b9, 0x128d, 0x12c4, 0x10ab, 0x12c4, 0x10ab, 0xfe1, 0xddd, 0xfe1, 0xddd, 0xed7, +0xceb, 0xed7, 0xceb, 0xd49, 0xb78, 0xd49, 0xb78, 0xd49, 0xb78, 0xc96, 0xae4, +0xc96, 0xae4, 0xad3, 0x943, 0xad3, 0x943, 0x8d9, 0x76e, 0x8d9, 0x76e, 0x7c4, +0x682, 0x7c4, 0x682, 0x551, 0x43c, 0x551, 0x43c, 0x41d, 0x339, 0x41d, 0x339, +0x41d, 0x339, 0x173, 0xc1, 0x173, 0xc1, 0xffdd, 0xff60, 0xffdd, 0xff60, 0xfedf, +0xfe97, 0xfedf, 0xfe97, 0xfdbb, 0xfdaa, 0xfdbb, 0xfdaa, 0xfdb5, 0xfdda, 0xfdb5, 0xfdda, +0xfbd1, 0xfc2b, 0xfbd1, 0xfc2b, 0xfbd1, 0xfc2b, 0xf9fb, 0xfa87, 0xf9fb, 0xfa87, 0xf890, +0xf94b, 0xf890, 0xf94b, 0xf7a7, 0xf88d, 0xf7a7, 0xf88d, 0xf78e, 0xf89a, 0xf78e, 0xf89a, +0xf6e2, 0xf80f, 0xf6e2, 0xf80f, 0xf6e2, 0xf80f, 0xf686, 0xf7ce, 0xf686, 0xf7ce, 0xf71e, +0xf87b, 0xf71e, 0xf87b, 0xf6c4, 0xf82f, 0xf6c4, 0xf82f, 0xf72e, 0xf8a2, 0xf72e, 0xf8a2, +0xf77f, 0xf8f5, 0xf77f, 0xf8f5, 0xf6c6, 0xf839, 0xf6c6, 0xf839, 0xf6c6, 0xf839, 0xf6eb, +0xf857, 0xf6eb, 0xf857, 0xf72c, 0xf88c, 0xf72c, 0xf88c, 0xf82b, 0xf97c, 0xf82b, 0xf97c, +0xf827, 0xf967, 0xf827, 0xf967, 0xf7a7, 0xf8d5, 0xf7a7, 0xf8d5, 0xf8e7, 0xfa01, 0xf8e7, +0xfa01, 0xf8e7, 0xfa01, 0xfb55, 0xfc5c, 0xfb55, 0xfc5c, 0xfdc9, 0xfebe, 0xfdc9, 0xfebe, +0xff7b, 0x5e, 0xff7b, 0x5e, 0x66, 0x139, 0x66, 0x139, 0x126, 0x1ea, 0x126, +0x1ea, 0x126, 0x1ea, 0x139, 0x1f0, 0x139, 0x1f0, 0xde, 0x189, 0xde, 0x189, +0xd7, 0x178, 0xd7, 0x178, 0x76, 0x10c, 0x76, 0x10c, 0x139, 0x1c5, 0x139, +0x1c5, 0x166, 0x1e6, 0x166, 0x1e6, 0x166, 0x1e6, 0x1a0, 0x213, 0x1a0, 0x213, +0x2d8, 0x33d, 0x2d8, 0x33d, 0x365, 0x3b8, 0x365, 0x3b8, 0x4b8, 0x4f5, 0x4b8, +0x4f5, 0x65a, 0x680, 0x65a, 0x680, 0x760, 0x76a, 0x760, 0x76a, 0x760, 0x76a, +0x7a8, 0x793, 0x7a8, 0x793, 0x6a8, 0x672, 0x6a8, 0x672, 0x5b8, 0x55f, 0x5b8, +0x55f, 0x620, 0x5a3, 0x620, 0x5a3, 0x5a6, 0x504, 0x5a6, 0x504, 0x5a6, 0x504, +0x685, 0x5c0, 0x685, 0x5c0, 0x6a3, 0x5be, 0x6a3, 0x5be, 0x4c9, 0x3c9, 0x4c9, +0x3c9, 0x47b, 0x365, 0x47b, 0x365, 0x36b, 0x247, 0x36b, 0x247, 0x31b, 0x1f1, +0x31b, 0x1f1, 0x31b, 0x1f1, 0x10f, 0xffea, 0x10f, 0xffea, 0xfe78, 0xfd62, 0xfe78, +0xfd62, 0xfd3c, 0xfc42, 0xfd3c, 0xfc42, 0xfbbe, 0xfaeb, 0xfbbe, 0xfaeb, 0xfacb, 0xfa2c, +0xfacb, 0xfa2c, 0xfacb, 0xfa2c, 0xf7bb, 0xf75b, 0xf7bb, 0xf75b, 0xf619, 0xf602, 0xf619, +0xf602, 0xf4ab, 0xf4e8, 0xf4ab, 0xf4e8, 0xf240, 0xf2d9, 0xf240, 0xf2d9, 0xf149, 0xf243, +0xf149, 0xf243, 0xee43, 0xefa2, 0xee43, 0xefa2, 0xee43, 0xefa2, 0xeb5f, 0xed26, 0xeb5f, +0xed26, 0xe9a5, 0xebd3, 0xe9a5, 0xebd3, 0xe688, 0xe91b, 0xe688, 0xe91b, 0xe368, 0xe659, +0xe368, 0xe659, 0xe069, 0xe3b2, 0xe069, 0xe3b2, 0xde13, 0xe1aa, 0xde13, 0xe1aa, 0xde13, +0xe1aa, 0xdd70, 0xe149, 0xdd70, 0xe149, 0xdc66, 0xe077, 0xdc66, 0xe077, 0xdb7a, 0xdfb5, +0xdb7a, 0xdfb5, 0xdb3f, 0xdf95, 0xdb3f, 0xdf95, 0xda2b, 0xde90, 0xda2b, 0xde90, 0xda2b, +0xde90, 0xd962, 0xddc9, 0xd962, 0xddc9, 0xda04, 0xde5f, 0xda04, 0xde5f, 0xdc0f, 0xe054, +0xdc0f, 0xe054, 0xdd52, 0xe176, 0xdd52, 0xe176, 0xdd76, 0xe172, 0xdd76, 0xe172, 0xdf97, +0xe365, 0xdf97, 0xe365, 0xdf97, 0xe365, 0xe14c, 0xe4e7, 0xe14c, 0xe4e7, 0xe2be, 0xe623, +0xe2be, 0xe623, 0xe525, 0xe855, 0xe525, 0xe855, 0xe698, 0xe992, 0xe698, 0xe992, 0xe982, +0xec4a, 0xe982, 0xec4a, 0xebb9, 0xee52, 0xebb9, 0xee52, 0xebb9, 0xee52, 0xed7b, 0xefea, +0xed7b, 0xefea, 0xefef, 0xf237, 0xefef, 0xf237, 0xefe8, 0xf20f, 0xefe8, 0xf20f, 0xf04b, +0xf254, 0xf04b, 0xf254, 0xf181, 0xf370, 0xf181, 0xf370, 0xf181, 0xf370, 0xf251, 0xf428, +0xf251, 0xf428, 0xf3ee, 0xf5ae, 0xf3ee, 0xf5ae, 0xf585, 0xf72d, 0xf585, 0xf72d, 0xf705, +0xf894, 0xf705, 0xf894, 0xf903, 0xfa75, 0xf903, 0xfa75, 0xfae4, 0xfc34, 0xfae4, 0xfc34, +0xfae4, 0xfc34, 0xfcb4, 0xfddc, 0xfcb4, 0xfddc, 0xfdc4, 0xfebd, 0xfdc4, 0xfebd, 0xffa3, +0x67, 0xffa3, 0x67, 0x20a, 0x290, 0x20a, 0x290, 0x357, 0x398, 0x357, 0x398, +0x5ed, 0x5e2, 0x5ed, 0x5e2, 0x5ed, 0x5e2, 0x72f, 0x6d3, 0x72f, 0x6d3, 0x8dc, +0x82a, 0x8dc, 0x82a, 0xbce, 0xac4, 0xbce, 0xac4, 0xd12, 0xbb1, 0xd12, 0xbb1, +0xf09, 0xd53, 0xf09, 0xd53, 0xf09, 0xd53, 0x1009, 0xe02, 0x1009, 0xe02, 0x1046, +0xdf6, 0x1046, 0xdf6, 0x107f, 0xdef, 0x107f, 0xdef, 0x1155, 0xe93, 0x1155, 0xe93, +0x121b, 0xf34, 0x121b, 0xf34, 0x115f, 0xe62, 0x115f, 0xe62, 0x115f, 0xe62, 0x1267, +0xf65, 0x1267, 0xf65, 0x12ad, 0xfb8, 0x12ad, 0xfb8, 0x12c5, 0xfef, 0x12c5, 0xfef, +0x13f6, 0x1150, 0x13f6, 0x1150, 0x1266, 0x1000, 0x1266, 0x1000, 0x10dc, 0xec4, 0x10dc, +0xec4, 0x10dc, 0xec4, 0x10c6, 0xf09, 0x10c6, 0xf09, 0xffe, 0xea7, 0xffe, 0xea7, +0xea0, 0xdb5, 0xea0, 0xdb5, 0xcfa, 0xc81, 0xcfa, 0xc81, 0xa68, 0xa61, 0xa68, +0xa61, 0xa68, 0xa61, 0x8a8, 0x910, 0x8a8, 0x910, 0x707, 0x7da, 0x707, 0x7da, +0x40e, 0x544, 0x40e, 0x544, 0x2e7, 0x475, 0x2e7, 0x475, 0xe0, 0x2bb, 0xe0, +0x2bb, 0xfe1a, 0x32, 0xfe1a, 0x32, 0xfe1a, 0x32, 0xfc4e, 0xfe94, 0xfc4e, 0xfe94, +0xf9bc, 0xfc1f, 0xf9bc, 0xfc1f, 0xf774, 0xf9e5, 0xf774, 0xf9e5, 0xf58e, 0xf7fc, 0xf58e, +0xf7fc, 0xf5b2, 0xf80f, 0xf5b2, 0xf80f, 0xf600, 0xf83e, 0xf600, 0xf83e, 0xf600, 0xf83e, +0xf5c4, 0xf7d7, 0xf5c4, 0xf7d7, 0xf5ca, 0xf7a8, 0xf5ca, 0xf7a8, 0xf522, 0xf6c5, 0xf522, +0xf6c5, 0xf5fa, 0xf75b, 0xf5fa, 0xf75b, 0xf6de, 0xf7fb, 0xf6de, 0xf7fb, 0xf6de, 0xf7fb, +0xf7ad, 0xf886, 0xf7ad, 0xf886, 0xf9f5, 0xfa8b, 0xf9f5, 0xfa8b, 0xfb7c, 0xfbd1, 0xfb7c, +0xfbd1, 0xfd52, 0xfd6c, 0xfd52, 0xfd6c, 0xfffb, 0xffdf, 0xfffb, 0xffdf, 0x64, 0x17, +0x64, 0x17, 0x64, 0x17, 0xcd, 0x58, 0xcd, 0x58, 0xd1, 0x39, 0xd1, +0x39, 0x6, 0xff51, 0x6, 0xff51, 0x10f, 0x42, 0x10f, 0x42, 0x180, 0x9f, +0x180, 0x9f, 0x106, 0x14, 0x106, 0x14, 0x106, 0x14, 0xce, 0xffcc, 0xce, +0xffcc, 0x129, 0x17, 0x129, 0x17, 0x185, 0x63, 0x185, 0x63, 0x31f, 0x1eb, +0x31f, 0x1eb, 0x508, 0x3bd, 0x508, 0x3bd, 0x508, 0x3bd, 0x520, 0x3bc, 0x520, +0x3bc, 0x5b1, 0x42f, 0x5b1, 0x42f, 0x5ee, 0x44a, 0x5ee, 0x44a, 0x599, 0x3d0, +0x599, 0x3d0, 0x61e, 0x42e, 0x61e, 0x42e, 0x69a, 0x481, 0x69a, 0x481, 0x69a, +0x481, 0x6f0, 0x4ae, 0x6f0, 0x4ae, 0x7e2, 0x578, 0x7e2, 0x578, 0x79c, 0x50d, +0x79c, 0x50d, 0x706, 0x458, 0x706, 0x458, 0x7a1, 0x4da, 0x7a1, 0x4da, 0x811, +0x539, 0x811, 0x539, 0x811, 0x539, 0x905, 0x626, 0x905, 0x626, 0x9aa, 0x6cf, +0x9aa, 0x6cf, 0xa19, 0x74e, 0xa19, 0x74e, 0xa14, 0x765, 0xa14, 0x765, 0x980, +0x6f9, 0x980, 0x6f9, 0x980, 0x6f9, 0xa4b, 0x7f9, 0xa4b, 0x7f9, 0x9f3, 0x7e2, +0x9f3, 0x7e2, 0x80a, 0x643, 0x80a, 0x643, 0x6b6, 0x544, 0x6b6, 0x544, 0x4ed, +0x3d6, 0x4ed, 0x3d6, 0x427, 0x372, 0x427, 0x372, 0x427, 0x372, 0x326, 0x2d4, +0x326, 0x2d4, 0x1cb, 0x1e0, 0x1cb, 0x1e0, 0x156, 0x1ce, 0x156, 0x1ce, 0xfeda, +0xffb4, 0xfeda, 0xffb4, 0xfd62, 0xfe97, 0xfd62, 0xfe97, 0xfc1e, 0xfda9, 0xfc1e, 0xfda9, +0xfc1e, 0xfda9, 0xfa19, 0xfbf1, 0xfa19, 0xfbf1, 0xf7fc, 0xfa17, 0xf7fc, 0xfa17, 0xf558, +0xf7ab, 0xf558, 0xf7ab, 0xf494, 0xf714, 0xf494, 0xf714, 0xf34d, 0xf5ef, 0xf34d, 0xf5ef, +0xf34d, 0xf5ef, 0xf215, 0xf4ce, 0xf215, 0xf4ce, 0xf176, 0xf43b, 0xf176, 0xf43b, 0xf0c9, +0xf391, 0xf0c9, 0xf391, 0xf080, 0xf340, 0xf080, 0xf340, 0xefb2, 0xf262, 0xefb2, 0xf262, +0xee70, 0xf10a, 0xee70, 0xf10a, 0xee70, 0xf10a, 0xeda0, 0xf01e, 0xeda0, 0xf01e, 0xed73, +0xefd1, 0xed73, 0xefd1, 0xee1b, 0xf054, 0xee1b, 0xf054, 0xf034, 0xf246, 0xf034, 0xf246, +0xf170, 0xf358, 0xf170, 0xf358, 0xf170, 0xf358, 0xf2d7, 0xf494, 0xf2d7, 0xf494, 0xf41b, +0xf5ac, 0xf41b, 0xf5ac, 0xf46d, 0xf5d2, 0xf46d, 0xf5d2, 0xf584, 0xf6bb, 0xf584, 0xf6bb, +0xf6f6, 0xf7ff, 0xf6f6, 0xf7ff, 0xf856, 0xf92f, 0xf856, 0xf92f, 0xf856, 0xf92f, 0xf943, +0xf9ec, 0xf943, 0xf9ec, 0xfb1d, 0xfb93, 0xfb1d, 0xfb93, 0xfcc4, 0xfd05, 0xfcc4, 0xfd05, +0xfe58, 0xfe62, 0xfe58, 0xfe62, 0x15, 0xffe5, 0x15, 0xffe5, 0x15b, 0xef, 0x15b, +0xef, 0x15b, 0xef, 0x3a2, 0x2f9, 0x3a2, 0x2f9, 0x581, 0x498, 0x581, 0x498, +0x6e5, 0x5ba, 0x6e5, 0x5ba, 0x875, 0x708, 0x875, 0x708, 0x9ce, 0x81f, 0x9ce, +0x81f, 0x9ce, 0x81f, 0xaf2, 0x902, 0xaf2, 0x902, 0xcab, 0xa7d, 0xcab, 0xa7d, +0xe47, 0xbdd, 0xe47, 0xbdd, 0xf4e, 0xcad, 0xf4e, 0xcad, 0x11c3, 0xef0, 0x11c3, +0xef0, 0x1396, 0x1097, 0x1396, 0x1097, 0x1396, 0x1097, 0x1500, 0x11dd, 0x1500, 0x11dd, +0x1703, 0x13c2, 0x1703, 0x13c2, 0x171e, 0x13c7, 0x171e, 0x13c7, 0x16c3, 0x135f, 0x16c3, +0x135f, 0x1615, 0x12ab, 0x1615, 0x12ab, 0x1690, 0x1327, 0x1690, 0x1327, 0x1690, 0x1327, +0x17b3, 0x1453, 0x17b3, 0x1453, 0x171a, 0x13c7, 0x171a, 0x13c7, 0x17a9, 0x1469, 0x17a9, +0x1469, 0x17ee, 0x14c5, 0x17ee, 0x14c5, 0x1806, 0x14f5, 0x1806, 0x14f5, 0x1806, 0x14f5, +0x18fb, 0x1604, 0x18fb, 0x1604, 0x198a, 0x16ad, 0x198a, 0x16ad, 0x1959, 0x1695, 0x1959, +0x1695, 0x17d8, 0x152b, 0x17d8, 0x152b, 0x1713, 0x147b, 0x1713, 0x147b, 0x171a, 0x1493, +0x171a, 0x1493, 0x171a, 0x1493, 0x15b6, 0x133d, 0x15b6, 0x133d, 0x1395, 0x1128, 0x1395, +0x1128, 0x12cf, 0x106a, 0x12cf, 0x106a, 0x12dc, 0x107e, 0x12dc, 0x107e, 0x13a4, 0x114b, +0x13a4, 0x114b, 0x1327, 0x10d3, 0x1327, 0x10d3, 0x1327, 0x10d3, 0x1206, 0xfb7, 0x1206, +0xfb7, 0x1183, 0xf3d, 0x1183, 0xf3d, 0x1144, 0xf09, 0x1144, 0xf09, 0x137a, 0x114f, +0x137a, 0x114f, 0x1372, 0x115c, 0x1372, 0x115c, 0x1372, 0x115c, 0x12ae, 0x10b4, 0x12ae, +0x10b4, 0x131f, 0x1147, 0x131f, 0x1147, 0x127b, 0x10cd, 0x127b, 0x10cd, 0x122d, 0x10b1, +0x122d, 0x10b1, 0x107d, 0xf38, 0x107d, 0xf38, 0xf9f, 0xe98, 0xf9f, 0xe98, 0xf9f, +0xe98, 0xfb7, 0xef2, 0xfb7, 0xef2, 0xf1f, 0xea1, 0xf1f, 0xea1, 0xebb, 0xe85, +0xebb, 0xe85, 0xdc7, 0xdda, 0xdc7, 0xdda, 0xaa6, 0xb01, 0xaa6, 0xb01, 0x74f, +0x7ee, 0x74f, 0x7ee, 0x74f, 0x7ee, 0x5b6, 0x695, 0x5b6, 0x695, 0x37b, 0x492, +0x37b, 0x492, 0x15b, 0x2a4, 0x15b, 0x2a4, 0xffa2, 0x112, 0xffa2, 0x112, 0xfe6d, +0xfffb, 0xfe6d, 0xfffb, 0xfe6d, 0xfffb, 0xfcc2, 0xfe64, 0xfcc2, 0xfe64, 0xfb2a, 0xfcd5, +0xfb2a, 0xfcd5, 0xfa48, 0xfbf2, 0xfa48, 0xfbf2, 0xf86a, 0xfa09, 0xf86a, 0xfa09, 0xf89e, +0xfa2b, 0xf89e, 0xfa2b, 0xf877, 0xf9ea, 0xf877, 0xf9ea, 0xf877, 0xf9ea, 0xf89a, 0xf9ee, +0xf89a, 0xf9ee, 0xf91c, 0xfa4d, 0xf91c, 0xfa4d, 0xf79b, 0xf8a8, 0xf79b, 0xf8a8, 0xf957, +0xfa41, 0xf957, 0xfa41, 0xfa5f, 0xfb26, 0xfa5f, 0xfb26, 0xfb27, 0xfbd0, 0xfb27, 0xfbd0, +0xfb27, 0xfbd0, 0xfd59, 0xfde9, 0xfd59, 0xfde9, 0xfcf3, 0xfd70, 0xfcf3, 0xfd70, 0xfcac, +0xfd1d, 0xfcac, 0xfd1d, 0xfcb8, 0xfd23, 0xfcb8, 0xfd23, 0xfd79, 0xfde6, 0xfd79, 0xfde6, +0xfd79, 0xfde6, 0xfdc2, 0xfe38, 0xfdc2, 0xfe38, 0xfe67, 0xfeeb, 0xfe67, 0xfeeb, 0xff8e, +0x24, 0xff8e, 0x24, 0x34, 0xe0, 0x34, 0xe0, 0x1c2, 0x285, 0x1c2, 0x285, +0x171, 0x249, 0x171, 0x249, 0x171, 0x249, 0x198, 0x284, 0x198, 0x284, 0x209, +0x305, 0x209, 0x305, 0x1d9, 0x2df, 0x1d9, 0x2df, 0x23a, 0x342, 0x23a, 0x342, +0x2f1, 0x3f4, 0x2f1, 0x3f4, 0x38f, 0x484, 0x38f, 0x484, 0x38f, 0x484, 0x269, +0x346, 0x269, 0x346, 0x2d7, 0x392, 0x2d7, 0x392, 0x35d, 0x3ee, 0x35d, 0x3ee, +0x43a, 0x499, 0x43a, 0x499, 0x492, 0x4ba, 0x492, 0x4ba, 0x492, 0x4ba, 0x28d, +0x279, 0x28d, 0x279, 0x37c, 0x32a, 0x37c, 0x32a, 0x3b8, 0x329, 0x3b8, 0x329, +0x2f1, 0x227, 0x2f1, 0x227, 0x309, 0x20a, 0x309, 0x20a, 0x1bf, 0x91, 0x1bf, +0x91, 0x1bf, 0x91, 0x20c, 0xba, 0x20c, 0xba, 0x2b4, 0x149, 0x2b4, 0x149, +0x2b4, 0x13d, 0x2b4, 0x13d, 0x1a9, 0x35, 0x1a9, 0x35, 0xfec2, 0xfd5f, 0xfec2, +0xfd5f, 0xfd6e, 0xfc2b, 0xfd6e, 0xfc2b, 0xfd6e, 0xfc2b, 0xfb7c, 0xfa68, 0xfb7c, 0xfa68, +0xf90f, 0xf837, 0xf90f, 0xf837, 0xf798, 0xf707, 0xf798, 0xf707, 0xf54e, 0xf50f, 0xf54e, +0xf50f, 0xf3da, 0xf3f5, 0xf3da, 0xf3f5, 0xf3da, 0xf3f5, 0xf23c, 0xf2b6, 0xf23c, 0xf2b6, +0xf0d4, 0xf1b0, 0xf0d4, 0xf1b0, 0xef21, 0xf05f, 0xef21, 0xf05f, 0xec4f, 0xedec, 0xec4f, +0xedec, 0xea85, 0xec7c, 0xea85, 0xec7c, 0xe7d4, 0xea1d, 0xe7d4, 0xea1d, 0xe7d4, 0xea1d, +0xe3e8, 0xe679, 0xe3e8, 0xe679, 0xe002, 0xe2cf, 0xe002, 0xe2cf, 0xdc7b, 0xdf78, 0xdc7b, +0xdf78, 0xda1b, 0xdd3b, 0xda1b, 0xdd3b, 0xd868, 0xdb9d, 0xd868, 0xdb9d, 0xd801, 0xdb3d, +0xd801, 0xdb3d, 0xd801, 0xdb3d, 0xd840, 0xdb77, 0xd840, 0xdb77, 0xd7f8, 0xdb1d, 0xd7f8, +0xdb1d, 0xd86f, 0xdb78, 0xd86f, 0xdb78, 0xd917, 0xdbfb, 0xd917, 0xdbfb, 0xd976, 0xdc2f, +0xd976, 0xdc2f, 0xd976, 0xdc2f, 0xdb92, 0xde1b, 0xdb92, 0xde1b, 0xde49, 0xe09f, 0xde49, +0xe09f, 0xe096, 0xe2b8, 0xe096, 0xe2b8, 0xe3fa, 0xe5e8, 0xe3fa, 0xe5e8, 0xe6cc, 0xe889, +0xe6cc, 0xe889, 0xe8ac, 0xea3c, 0xe8ac, 0xea3c, 0xe8ac, 0xea3c, 0xea2f, 0xeb96, 0xea2f, +0xeb96, 0xeacc, 0xec0f, 0xeacc, 0xec0f, 0xec5e, 0xed82, 0xec5e, 0xed82, 0xed8e, 0xee99, +0xed8e, 0xee99, 0xee03, 0xeefa, 0xee03, 0xeefa, 0xee03, 0xeefa, 0xeef6, 0xefdc, 0xeef6, +0xefdc, 0xefcc, 0xf0a6, 0xefcc, 0xf0a6, 0xf01c, 0xf0ea, 0xf01c, 0xf0ea, 0xf02b, 0xf0f0, +0xf02b, 0xf0f0, 0xf1f5, 0xf2af, 0xf1f5, 0xf2af, 0xf1df, 0xf28e, 0xf1df, 0xf28e, 0xf1df, +0xf28e, 0xf1be, 0xf25f, 0xf1be, 0xf25f, 0xf3f4, 0xf486, 0xf3f4, 0xf486, 0xf536, 0xf5b3, +0xf536, 0xf5b3, 0xf6fb, 0xf760, 0xf6fb, 0xf760, 0xf877, 0xf8c0, 0xf877, 0xf8c0, 0xf986, +0xf9b0, 0xf986, 0xf9b0, 0xf986, 0xf9b0, 0xfb61, 0xfb68, 0xfb61, 0xfb68, 0xfd2b, 0xfd0e, +0xfd2b, 0xfd0e, 0xfef6, 0xfeb3, 0xfef6, 0xfeb3, 0xaf, 0x47, 0xaf, 0x47, 0x1ab, +0x120, 0x1ab, 0x120, 0x1ab, 0x120, 0x366, 0x2ba, 0x366, 0x2ba, 0x67e, 0x5b6, +0x67e, 0x5b6, 0x899, 0x7ba, 0x899, 0x7ba, 0x9de, 0x8f1, 0x9de, 0x8f1, 0xc25, +0xb31, 0xc25, 0xb31, 0xd3b, 0xc49, 0xd3b, 0xc49, 0xd3b, 0xc49, 0xd38, 0xc51, +0xd38, 0xc51, 0xd9c, 0xcca, 0xd9c, 0xcca, 0xd12, 0xc5f, 0xd12, 0xc5f, 0xb8e, +0xb03, 0xb8e, 0xb03, 0xac5, 0xa69, 0xac5, 0xa69, 0xb95, 0xb70, 0xb95, 0xb70, +0xb95, 0xb70, 0xc25, 0xc3e, 0xc25, 0xc3e, 0xbd6, 0xc30, 0xbd6, 0xc30, 0xc08, +0xca7, 0xc08, 0xca7, 0xcbc, 0xda0, 0xcbc, 0xda0, 0xc6b, 0xd95, 0xc6b, 0xd95, +0xc6b, 0xd95, 0xb4e, 0xcbb, 0xb4e, 0xcbb, 0x96c, 0xb1a, 0x96c, 0xb1a, 0x756, +0x940, 0x756, 0x940, 0x502, 0x722, 0x502, 0x722, 0x337, 0x585, 0x337, 0x585, +0x1a9, 0x41e, 0x1a9, 0x41e, 0x1a9, 0x41e, 0xff39, 0x1cd, 0xff39, 0x1cd, 0xfec5, +0x170, 0xfec5, 0x170, 0xfe14, 0xce, 0xfe14, 0xce, 0xfcc2, 0xff83, 0xfcc2, 0xff83, +0xfc24, 0xfee3, 0xfc24, 0xfee3, 0xface, 0xfd85, 0xface, 0xfd85, 0xface, 0xfd85, 0xf9fa, +0xfca1, 0xf9fa, 0xfca1, 0xf8ab, 0xfb3d, 0xf8ab, 0xfb3d, 0xf961, 0xfbd9, 0xf961, 0xfbd9, +0xfa7f, 0xfcd7, 0xfa7f, 0xfcd7, 0xfa39, 0xfc6e, 0xfa39, 0xfc6e, 0xfa39, 0xfc6e, 0xfa8e, +0xfc9c, 0xfa8e, 0xfc9c, 0xfa1d, 0xfc01, 0xfa1d, 0xfc01, 0xfb4e, 0xfd05, 0xfb4e, 0xfd05, +0xfc4c, 0xfdd5, 0xfc4c, 0xfdd5, 0xfc4d, 0xfda6, 0xfc4d, 0xfda6, 0xfc2a, 0xfd51, 0xfc2a, +0xfd51, 0xfc2a, 0xfd51, 0xfd8d, 0xfe81, 0xfd8d, 0xfe81, 0xfe78, 0xff38, 0xfe78, 0xff38, +0xfef6, 0xff81, 0xfef6, 0xff81, 0xaf, 0x104, 0xaf, 0x104, 0xe8, 0x107, 0xe8, +0x107, 0x1ca, 0x1b4, 0x1ca, 0x1b4, 0x1ca, 0x1b4, 0x349, 0x2fe, 0x349, 0x2fe, +0x50a, 0x48b, 0x50a, 0x48b, 0x63e, 0x58d, 0x63e, 0x58d, 0x714, 0x635, 0x714, +0x635, 0x77f, 0x675, 0x77f, 0x675, 0x77f, 0x675, 0x8ae, 0x77d, 0x8ae, 0x77d, +0x909, 0x7b6, 0x909, 0x7b6, 0x9b5, 0x846, 0x9b5, 0x846, 0xac3, 0x93f, 0xac3, +0x93f, 0xa41, 0x8ae, 0xa41, 0x8ae, 0xb16, 0x97c, 0xb16, 0x97c, 0xb16, 0x97c, +0xb26, 0x98d, 0xb26, 0x98d, 0xa04, 0x874, 0xa04, 0x874, 0x827, 0x6a7, 0x827, +0x6a7, 0x733, 0x5cb, 0x733, 0x5cb, 0x6b5, 0x56b, 0x6b5, 0x56b, 0x52a, 0x404, +0x52a, 0x404, 0x52a, 0x404, 0x45f, 0x362, 0x45f, 0x362, 0x35b, 0x28a, 0x35b, +0x28a, 0xb3, 0x11, 0xb3, 0x11, 0xff4a, 0xfed8, 0xff4a, 0xfed8, 0xfec9, 0xfe87, +0xfec9, 0xfe87, 0xfec9, 0xfe87, 0xfe2d, 0xfe18, 0xfe2d, 0xfe18, 0xfe77, 0xfe8e, 0xfe77, +0xfe8e, 0xfeb9, 0xfef6, 0xfeb9, 0xfef6, 0xfef5, 0xff55, 0xfef5, 0xff55, 0xff9c, 0x18, +0xff9c, 0x18, 0xfff3, 0x86, 0xfff3, 0x86, 0xfff3, 0x86, 0xff86, 0x2a, 0xff86, +0x2a, 0xfee6, 0xff95, 0xfee6, 0xff95, 0xfe37, 0xfeeb, 0xfe37, 0xfeeb, 0xfe20, 0xfed5, +0xfe20, 0xfed5, 0xfcfe, 0xfdaf, 0xfcfe, 0xfdaf, 0xfb59, 0xfc02, 0xfb59, 0xfc02, 0xfb59, +0xfc02, 0xfb44, 0xfbe4, 0xfb44, 0xfbe4, 0xf9fc, 0xfa91, 0xf9fc, 0xfa91, 0xfa23, 0xfaad, +0xfa23, 0xfaad, 0xfbb6, 0xfc35, 0xfbb6, 0xfc35, 0xfaea, 0xfb61, 0xfaea, 0xfb61, 0xfaea, +0xfb61, 0xfb68, 0xfbda, 0xfb68, 0xfbda, 0xfcc2, 0xfd30, 0xfcc2, 0xfd30, 0xfe6a, 0xfed9, +0xfe6a, 0xfed9, 0xff39, 0xffab, 0xff39, 0xffab, 0xffd6, 0x4f, 0xffd6, 0x4f, 0x41, +0xc3, 0x41, 0xc3, 0x41, 0xc3, 0x1a, 0xa6, 0x1a, 0xa6, 0xffd4, 0x6b, +0xffd4, 0x6b, 0xa7, 0x149, 0xa7, 0x149, 0xffa3, 0x4e, 0xffa3, 0x4e, 0xfcab, +0xfd5c, 0xfcab, 0xfd5c, 0xfe05, 0xfeb9, 0xfe05, 0xfeb9, 0xfe05, 0xfeb9, 0xfc64, 0xfd15, +0xfc64, 0xfd15, 0xfb91, 0xfc39, 0xfb91, 0xfc39, 0xfc5c, 0xfcf5, 0xfc5c, 0xfcf5, 0xfc5b, +0xfcdf, 0xfc5b, 0xfcdf, 0xfc6b, 0xfcd1, 0xfc6b, 0xfcd1, 0xfc6b, 0xfcd1, 0xfb94, 0xfbd7, +0xfb94, 0xfbd7, 0xfc47, 0xfc5f, 0xfc47, 0xfc5f, 0xfc5c, 0xfc44, 0xfc5c, 0xfc44, 0xfc75, +0xfc2a, 0xfc75, 0xfc2a, 0xff6b, 0xfee9, 0xff6b, 0xfee9, 0x30d, 0x254, 0x30d, 0x254, +0x30d, 0x254, 0x441, 0x351, 0x441, 0x351, 0x706, 0x5e1, 0x706, 0x5e1, 0x915, +0x7c0, 0x915, 0x7c0, 0xa69, 0x8ea, 0xa69, 0x8ea, 0xbc5, 0xa24, 0xbc5, 0xa24, +0xd97, 0xbdb, 0xd97, 0xbdb, 0xd97, 0xbdb, 0xf59, 0xd8d, 0xf59, 0xd8d, 0xff9, +0xe27, 0xff9, 0xe27, 0x10d7, 0xf09, 0x10d7, 0xf09, 0x107a, 0xeb9, 0x107a, 0xeb9, +0xf4e, 0xda5, 0xf4e, 0xda5, 0xf4e, 0xda5, 0xe2d, 0xca5, 0xe2d, 0xca5, 0xd43, +0xbe2, 0xd43, 0xbe2, 0xb40, 0xa0b, 0xb40, 0xa0b, 0x9b0, 0x8aa, 0x9b0, 0x8aa, +0x90a, 0x835, 0x90a, 0x835, 0x82e, 0x788, 0x82e, 0x788, 0x82e, 0x788, 0x7f2, +0x779, 0x7f2, 0x779, 0x7c1, 0x76f, 0x7c1, 0x76f, 0x6de, 0x6ab, 0x6de, 0x6ab, +0x69b, 0x67f, 0x69b, 0x67f, 0x5b0, 0x59f, 0x5b0, 0x59f, 0x5b0, 0x59f, 0x433, +0x424, 0x433, 0x424, 0x3f8, 0x3de, 0x3f8, 0x3de, 0x492, 0x461, 0x492, 0x461, +0x5aa, 0x558, 0x5aa, 0x558, 0x6b0, 0x631, 0x6b0, 0x631, 0x703, 0x64f, 0x703, +0x64f, 0x703, 0x64f, 0x89f, 0x7ae, 0x89f, 0x7ae, 0x82d, 0x6fa, 0x82d, 0x6fa, +0x87c, 0x702, 0x87c, 0x702, 0x94b, 0x789, 0x94b, 0x789, 0x68a, 0x480, 0x68a, +0x480, 0x713, 0x4c5, 0x713, 0x4c5, 0x713, 0x4c5, 0x82c, 0x59d, 0x82c, 0x59d, +0x9bf, 0x6f8, 0x9bf, 0x6f8, 0xbe7, 0x8ef, 0xbe7, 0x8ef, 0xbed, 0x8cd, 0xbed, +0x8cd, 0xc02, 0x8c5, 0xc02, 0x8c5, 0xc02, 0x8c5, 0xca4, 0x953, 0xca4, 0x953, +0xdd9, 0xa7f, 0xdd9, 0xa7f, 0x1003, 0xcaa, 0x1003, 0xcaa, 0xf0b, 0xbbd, 0xf0b, +0xbbd, 0xf65, 0xc2a, 0xf65, 0xc2a, 0x122c, 0xf0c, 0x122c, 0xf0c, 0x122c, 0xf0c, +0x1227, 0xf27, 0x1227, 0xf27, 0x1243, 0xf68, 0x1243, 0xf68, 0x12de, 0x102b, 0x12de, +0x102b, 0x12e5, 0x105c, 0x12e5, 0x105c, 0x11e6, 0xf86, 0x11e6, 0xf86, 0x11e6, 0xfaf, +0x11e6, 0xfaf, 0x11e6, 0xfaf, 0x1151, 0xf41, 0x1151, 0xf41, 0xf8d, 0xda3, 0xf8d, +0xda3, 0xd7a, 0xbb2, 0xd7a, 0xbb2, 0xe72, 0xcca, 0xe72, 0xcca, 0xe04, 0xc79, +0xe04, 0xc79, 0xe04, 0xc79, 0xcdb, 0xb6b, 0xcdb, 0xb6b, 0xe27, 0xcd1, 0xe27, +0xcd1, 0xd00, 0xbc3, 0xd00, 0xbc3, 0xbe9, 0xac7, 0xbe9, 0xac7, 0xb43, 0xa3c, +0xb43, 0xa3c, 0xae1, 0x9f7, 0xae1, 0x9f7, 0xae1, 0x9f7, 0xa49, 0x97f, 0xa49, +0x97f, 0x903, 0x85c, 0x903, 0x85c, 0x8e5, 0x866, 0x8e5, 0x866, 0x870, 0x81e, +0x870, 0x81e, 0x66e, 0x64b, 0x66e, 0x64b, 0x65b, 0x66c, 0x65b, 0x66c, 0x65b, +0x66c, 0x418, 0x461, 0x418, 0x461, 0xb8, 0x13a, 0xb8, 0x13a, 0xfebc, 0xff79, +0xfebc, 0xff79, 0xfd52, 0xfe4a, 0xfd52, 0xfe4a, 0xfc73, 0xfda4, 0xfc73, 0xfda4, 0xfc73, +0xfda4, 0xfb51, 0xfcb9, 0xfb51, 0xfcb9, 0xfa79, 0xfc12, 0xfa79, 0xfc12, 0xf942, 0xfb07, +0xf942, 0xfb07, 0xf853, 0xfa3c, 0xf853, 0xfa3c, 0xf71e, 0xf923, 0xf71e, 0xf923, 0xf5dd, +0xf7f4, 0xf5dd, 0xf7f4, 0xf5dd, 0xf7f4, 0xf4bb, 0xf6db, 0xf4bb, 0xf6db, 0xf48d, 0xf6aa, +0xf48d, 0xf6aa, 0xf483, 0xf693, 0xf483, 0xf693, 0xf49c, 0xf694, 0xf49c, 0xf694, 0xf529, +0xf700, 0xf529, 0xf700, 0xf5f5, 0xf7a0, 0xf5f5, 0xf7a0, 0xf5f5, 0xf7a0, 0xf5ba, 0xf732, +0xf5ba, 0xf732, 0xf77b, 0xf8b9, 0xf77b, 0xf8b9, 0xf914, 0xfa12, 0xf914, 0xfa12, 0xf8ba, +0xf974, 0xf8ba, 0xf974, 0xf951, 0xf9c4, 0xf951, 0xf9c4, 0xf951, 0xf9c4, 0xfabe, 0xfae9, +0xfabe, 0xfae9, 0xfcd7, 0xfcbb, 0xfcd7, 0xfcbb, 0xfe43, 0xfde2, 0xfe43, 0xfde2, 0xfeb9, +0xfe13, 0xfeb9, 0xfe13, 0xfe2d, 0xfd48, 0xfe2d, 0xfd48, 0xff16, 0xfdf5, 0xff16, 0xfdf5, +0xff16, 0xfdf5, 0xf1, 0xff9a, 0xf1, 0xff9a, 0x254, 0xcd, 0x254, 0xcd, 0x147, +0xff93, 0x147, 0xff93, 0x190, 0xffb5, 0x190, 0xffb5, 0x3d0, 0x1d5, 0x3d0, 0x1d5, +0x428, 0x211, 0x428, 0x211, 0x428, 0x211, 0x388, 0x159, 0x388, 0x159, 0x3cf, +0x18e, 0x3cf, 0x18e, 0x4a3, 0x255, 0x4a3, 0x255, 0x4ee, 0x297, 0x4ee, 0x297, +0x47f, 0x223, 0x47f, 0x223, 0x47f, 0x223, 0x485, 0x229, 0x485, 0x229, 0x32d, +0xd5, 0x32d, 0xd5, 0x1d8, 0xff89, 0x1d8, 0xff89, 0x3a5, 0x167, 0x3a5, 0x167, +0x26f, 0x46, 0x26f, 0x46, 0x176, 0xff69, 0x176, 0xff69, 0x176, 0xff69, 0x1d8, +0xffef, 0x1d8, 0xffef, 0x31, 0xfe73, 0x31, 0xfe73, 0xff3e, 0xfdb3, 0xff3e, 0xfdb3, +0xfee5, 0xfd96, 0xfee5, 0xfd96, 0xfd6c, 0xfc62, 0xfd6c, 0xfc62, 0xfc7b, 0xfbbd, 0xfc7b, +0xfbbd, 0xfc7b, 0xfbbd, 0xfa1d, 0xf9b4, 0xfa1d, 0xf9b4, 0xf8e4, 0xf8d7, 0xf8e4, 0xf8d7, +0xf6b1, 0xf706, 0xf6b1, 0xf706, 0xf2f8, 0xf3b5, 0xf2f8, 0xf3b5, 0xf222, 0xf349, 0xf222, +0xf349, 0xf222, 0xf349, 0xefc6, 0xf159, 0xefc6, 0xf159, 0xecc0, 0xeec0, 0xecc0, 0xeec0, +0xe93f, 0xeba9, 0xe93f, 0xeba9, 0xe5e8, 0xe8b8, 0xe5e8, 0xe8b8, 0xe1f8, 0xe527, 0xe1f8, +0xe527, 0xdfba, 0xe341, 0xdfba, 0xe341, 0xdfba, 0xe341, 0xde0e, 0xe1e3, 0xde0e, 0xe1e3, +0xdc68, 0xe07f, 0xdc68, 0xe07f, 0xdbae, 0xdffa, 0xdbae, 0xdffa, 0xdb03, 0xdf77, 0xdb03, +0xdf77, 0xdaa4, 0xdf31, 0xdaa4, 0xdf31, 0xd9b3, 0xde4a, 0xd9b3, 0xde4a, 0xd9b3, 0xde4a, +0xd9a9, 0xde3d, 0xd9a9, 0xde3d, 0xda3c, 0xdebf, 0xda3c, 0xdebf, 0xda00, 0xde65, 0xda00, +0xde65, 0xdb19, 0xdf55, 0xdb19, 0xdf55, 0xdc83, 0xe08c, 0xdc83, 0xe08c, 0xdc83, 0xe08c, +0xdc4c, 0xe01a, 0xdc4c, 0xe01a, 0xdec2, 0xe24f, 0xdec2, 0xe24f, 0xe091, 0xe3d7, 0xe091, +0xe3d7, 0xe2a9, 0xe5a8, 0xe2a9, 0xe5a8, 0xe52c, 0xe7e2, 0xe52c, 0xe7e2, 0xe7b7, 0xea25, +0xe7b7, 0xea25, 0xe7b7, 0xea25, 0xea45, 0xec6e, 0xea45, 0xec6e, 0xebdf, 0xedc5, 0xebdf, +0xedc5, 0xecfd, 0xeea4, 0xecfd, 0xeea4, 0xedc0, 0xef2d, 0xedc0, 0xef2d, 0xee84, 0xefbb, +0xee84, 0xefbb, 0xf0c6, 0xf1cc, 0xf0c6, 0xf1cc, 0xf0c6, 0xf1cc, 0xf2e7, 0xf3bf, 0xf2e7, +0xf3bf, 0xf253, 0xf300, 0xf253, 0xf300, 0xf50c, 0xf590, 0xf50c, 0xf590, 0xf82a, 0xf887, +0xf82a, 0xf887, 0xfac2, 0xfaf7, 0xfac2, 0xfaf7, 0xfac2, 0xfaf7, 0xfcc3, 0xfcd0, 0xfcc3, +0xfcd0, 0xff72, 0xff55, 0xff72, 0xff55, 0x36f, 0x326, 0x36f, 0x326, 0x5b1, 0x53a, +0x5b1, 0x53a, 0x931, 0x88a, 0x931, 0x88a, 0xd0e, 0xc34, 0xd0e, 0xc34, 0xd0e, +0xc34, 0xd36, 0xc28, 0xd36, 0xc28, 0xee1, 0xd9e, 0xee1, 0xd9e, 0x1367, 0x11f1, +0x1367, 0x11f1, 0x14ca, 0x1323, 0x14ca, 0x1323, 0x163d, 0x1469, 0x163d, 0x1469, 0x163d, +0x1469, 0x187e, 0x1683, 0x187e, 0x1683, 0x193b, 0x1721, 0x193b, 0x1721, 0x198b, 0x175d, +0x198b, 0x175d, 0x19f9, 0x17c2, 0x19f9, 0x17c2, 0x1adb, 0x18a8, 0x1adb, 0x18a8, 0x1af4, +0x18d4, 0x1af4, 0x18d4, 0x1af4, 0x18d4, 0x1abc, 0x18be, 0x1abc, 0x18be, 0x1bbb, 0x19ee, +0x1bbb, 0x19ee, 0x1b42, 0x19b5, 0x1b42, 0x19b5, 0x19ff, 0x18c2, 0x19ff, 0x18c2, 0x187d, +0x179c, 0x187d, 0x179c, 0x175c, 0x16e3, 0x175c, 0x16e3, 0x175c, 0x16e3, 0x1432, 0x142a, +0x1432, 0x142a, 0x1229, 0x129a, 0x1229, 0x129a, 0xf82, 0x1070, 0xf82, 0x1070, 0xaf7, +0xc63, 0xaf7, 0xc63, 0x852, 0xa39, 0x852, 0xa39, 0x852, 0xa39, 0x439, 0x697, +0x439, 0x697, 0xd0, 0x39b, 0xd0, 0x39b, 0xfd2c, 0x5b, 0xfd2c, 0x5b, 0xfa9d, +0xfe20, 0xfa9d, 0xfe20, 0xf773, 0xfb3c, 0xf773, 0xfb3c, 0xf3e5, 0xf7e2, 0xf3e5, 0xf7e2, +0xf3e5, 0xf7e2, 0xf0f6, 0xf514, 0xf0f6, 0xf514, 0xee7f, 0xf2ac, 0xee7f, 0xf2ac, 0xec13, +0xf03c, 0xec13, 0xf03c, 0xebe4, 0xeff6, 0xebe4, 0xeff6, 0xeaff, 0xeee9, 0xeaff, 0xeee9, +0xe8fe, 0xecb1, 0xe8fe, 0xecb1, 0xe8fe, 0xecb1, 0xea54, 0xedc1, 0xea54, 0xedc1, 0xeb0b, +0xee28, 0xeb0b, 0xee28, 0xec03, 0xeec6, 0xec03, 0xeec6, 0xed0b, 0xef6e, 0xed0b, 0xef6e, +0xef78, 0xf176, 0xef78, 0xf176, 0xef78, 0xf176, 0xf2a5, 0xf43e, 0xf2a5, 0xf43e, 0xf59e, +0xf6d3, 0xf59e, 0xf6d3, 0xf7f0, 0xf8c4, 0xf7f0, 0xf8c4, 0xf959, 0xf9d0, 0xf959, 0xf9d0, +0xf932, 0xf951, 0xf932, 0xf951, 0xfb55, 0xfb24, 0xfb55, 0xfb24, 0xfb55, 0xfb24, 0xfb90, +0xfb16, 0xfb90, 0xfb16, 0xf9dc, 0xf91f, 0xf9dc, 0xf91f, 0xfb85, 0xfa8d, 0xfb85, 0xfa8d, +0xfd75, 0xfc48, 0xfd75, 0xfc48, 0xff03, 0xfda7, 0xff03, 0xfda7, 0xff57, 0xfdcf, 0xff57, +0xfdcf, 0xff57, 0xfdcf, 0xd0, 0xff20, 0xd0, 0xff20, 0x1ce, 0xfff8, 0x1ce, 0xfff8, +0x29c, 0xa1, 0x29c, 0xa1, 0x458, 0x238, 0x458, 0x238, 0x6a4, 0x45f, 0x6a4, +0x45f, 0x6a4, 0x45f, 0x64d, 0x3e3, 0x64d, 0x3e3, 0x8a1, 0x611, 0x8a1, 0x611, +0xcfa, 0xa44, 0xcfa, 0xa44, 0xdd8, 0xafd, 0xdd8, 0xafd, 0xfd6, 0xcd8, 0xfd6, +0xcd8, 0x1153, 0xe34, 0x1153, 0xe34, 0x1153, 0xe34, 0x11d7, 0xe9c, 0x11d7, 0xe9c, +0x12c1, 0xf70, 0x12c1, 0xf70, 0x142b, 0x10ce, 0x142b, 0x10ce, 0x1500, 0x11a0, 0x1500, +0x11a0, 0x14a6, 0x114e, 0x14a6, 0x114e, 0x15a4, 0x1262, 0x15a4, 0x1262, 0x15a4, 0x1262, +0x16ba, 0x139d, 0x16ba, 0x139d, 0x15e8, 0x1300, 0x15e8, 0x1300, 0x14e3, 0x123f, 0x14e3, +0x123f, 0x141e, 0x11cd, 0x141e, 0x11cd, 0x1230, 0x1042, 0x1230, 0x1042, 0x1230, 0x1042, +0xfac, 0xe30, 0xfac, 0xe30, 0xe5c, 0xd5f, 0xe5c, 0xd5f, 0xb3a, 0xac6, 0xb3a, +0xac6, 0x867, 0x885, 0x867, 0x885, 0x61d, 0x6d3, 0x61d, 0x6d3, 0x4ef, 0x640, +0x4ef, 0x640, 0x4ef, 0x640, 0x2ff, 0x4ec, 0x2ff, 0x4ec, 0x60, 0x2e6, 0x60, +0x2e6, 0xfce5, 0xfffd, 0xfce5, 0xfffd, 0xf842, 0xfbe2, 0xf842, 0xfbe2, 0xf573, 0xf991, +0xf573, 0xf991, 0xf23e, 0xf6cc, 0xf23e, 0xf6cc, 0xf23e, 0xf6cc, 0xef14, 0xf401, 0xef14, +0xf401, 0xeaf9, 0xf034, 0xeaf9, 0xf034, 0xea8b, 0xf001, 0xea8b, 0xf001, 0xe77e, 0xed1c, +0xe77e, 0xed1c, 0xe419, 0xe9cc, 0xe419, 0xe9cc, 0xe419, 0xe9cc, 0xe438, 0xe9ee, 0xe438, +0xe9ee, 0xe2ee, 0xe893, 0xe2ee, 0xe893, 0xe249, 0xe7cc, 0xe249, 0xe7cc, 0xe2c1, 0xe814, +0xe2c1, 0xe814, 0xe338, 0xe84c, 0xe338, 0xe84c, 0xe3c8, 0xe892, 0xe3c8, 0xe892, 0xe3c8, +0xe892, 0xe4b1, 0xe927, 0xe4b1, 0xe927, 0xe65c, 0xea74, 0xe65c, 0xea74, 0xe81e, 0xebd3, +0xe81e, 0xebd3, 0xe920, 0xec6c, 0xe920, 0xec6c, 0xedb7, 0xf096, 0xedb7, 0xf096, 0xef01, +0xf171, 0xef01, 0xf171, 0xef01, 0xf171, 0xef8b, 0xf18c, 0xef8b, 0xf18c, 0xf264, 0xf3f4, +0xf264, 0xf3f4, 0xf45a, 0xf579, 0xf45a, 0xf579, 0xf5e6, 0xf694, 0xf5e6, 0xf694, 0xf783, +0xf7c1, 0xf783, 0xf7c1, 0xf783, 0xf7c1, 0xfa35, 0xfa01, 0xfa35, 0xfa01, 0xfc71, 0xfbcc, +0xfc71, 0xfbcc, 0xfd3f, 0xfc29, 0xfd3f, 0xfc29, 0xb3, 0xff2b, 0xb3, 0xff2b, 0x363, +0x169, 0x363, 0x169, 0x3a8, 0x13b, 0x3a8, 0x13b, 0x3a8, 0x13b, 0x861, 0x581, +0x861, 0x581, 0xba6, 0x854, 0xba6, 0x854, 0xe9f, 0xadc, 0xe9f, 0xadc, 0x1267, +0xe35, 0x1267, 0xe35, 0x15c9, 0x112a, 0x15c9, 0x112a, 0x1841, 0x133a, 0x1841, 0x133a, +0x1841, 0x133a, 0x1a47, 0x14de, 0x1a47, 0x14de, 0x1cc9, 0x1705, 0x1cc9, 0x1705, 0x1e5d, +0x1848, 0x1e5d, 0x1848, 0x1ef5, 0x1898, 0x1ef5, 0x1898, 0x211b, 0x1a83, 0x211b, 0x1a83, +0x211b, 0x1a83, 0x22c4, 0x1bfe, 0x22c4, 0x1bfe, 0x227c, 0x1b96, 0x227c, 0x1b96, 0x22eb, +0x1bf5, 0x22eb, 0x1bf5, 0x222a, 0x1b32, 0x222a, 0x1b32, 0x21cb, 0x1ae2, 0x21cb, 0x1ae2, +0x2192, 0x1ac7, 0x2192, 0x1ac7, 0x2192, 0x1ac7, 0x2105, 0x1a67, 0x2105, 0x1a67, 0x1f2a, +0x18c7, 0x1f2a, 0x18c7, 0x1d38, 0x171c, 0x1d38, 0x171c, 0x1ca1, 0x16d8, 0x1ca1, 0x16d8, +0x1ba2, 0x1634, 0x1ba2, 0x1634, 0x1a1b, 0x1511, 0x1a1b, 0x1511, 0x1a1b, 0x1511, 0x1a2b, +0x1589, 0x1a2b, 0x1589, 0x18ed, 0x14b6, 0x18ed, 0x14b6, 0x1764, 0x1398, 0x1764, 0x1398, +0x152b, 0x11ca, 0x152b, 0x11ca, 0x1284, 0xf89, 0x1284, 0xf89, 0x1284, 0xf89, 0xe93, +0xbfa, 0xe93, 0xbfa, 0xb0d, 0x8d0, 0xb0d, 0x8d0, 0xa9d, 0x8b3, 0xa9d, 0x8b3, +0x7a5, 0x606, 0x7a5, 0x606, 0x64a, 0x4ec, 0x64a, 0x4ec, 0x5e0, 0x4bb, 0x5e0, +0x4bb, 0x5e0, 0x4bb, 0x428, 0x332, 0x428, 0x332, 0x272, 0x1a2, 0x272, 0x1a2, +0x283, 0x1d0, 0x283, 0x1d0, 0x1f6, 0x159, 0x1f6, 0x159, 0x1c8, 0x13a, 0x1c8, +0x13a, 0x1c8, 0x13a, 0x204, 0x180, 0x204, 0x180, 0x1b0, 0x131, 0x1b0, 0x131, +0xff99, 0xff1b, 0xff99, 0xff1b, 0xfe5c, 0xfddb, 0xfe5c, 0xfddb, 0x17, 0xff92, 0x17, +0xff92, 0xff29, 0xfe9f, 0xff29, 0xfe9f, 0xff29, 0xfe9f, 0xfeb6, 0xfe25, 0xfeb6, 0xfe25, +0x4e, 0xffb6, 0x4e, 0xffb6, 0x7e, 0xffdf, 0x7e, 0xffdf, 0xff65, 0xfebd, 0xff65, +0xfebd, 0xff9c, 0xfeed, 0xff9c, 0xfeed, 0xffec, 0xff34, 0xffec, 0xff34, 0xffec, 0xff34, +0x3f, 0xff7e, 0x3f, 0xff7e, 0xff16, 0xfe4a, 0xff16, 0xfe4a, 0xce, 0xfff7, 0xce, +0xfff7, 0xe6, 0x3, 0xe6, 0x3, 0xffa1, 0xfeaf, 0xffa1, 0xfeaf, 0xffa1, 0xfeaf, +0x286, 0x186, 0x286, 0x186, 0x408, 0x2f8, 0x408, 0x2f8, 0x530, 0x40f, 0x530, +0x40f, 0x8ff, 0x7cd, 0x8ff, 0x7cd, 0xbc8, 0xa87, 0xbc8, 0xa87, 0xd2b, 0xbda, +0xd2b, 0xbda, 0xd2b, 0xbda, 0xf1a, 0xdbd, 0xf1a, 0xdbd, 0x10d1, 0xf6b, 0x10d1, +0xf6b, 0x13b4, 0x124a, 0x13b4, 0x124a, 0x13b7, 0x124d, 0x13b7, 0x124d, 0x15b4, 0x1451, +0x15b4, 0x1451, 0x16bc, 0x1567, 0x16bc, 0x1567, 0x16bc, 0x1567, 0x15ce, 0x148f, 0x15ce, +0x148f, 0x164a, 0x152a, 0x164a, 0x152a, 0x153f, 0x1445, 0x153f, 0x1445, 0x135d, 0x1293, +0x135d, 0x1293, 0x11a8, 0x1115, 0x11a8, 0x1115, 0x11a8, 0x1115, 0xf77, 0xf23, 0xf77, +0xf23, 0xce2, 0xcd6, 0xce2, 0xcd6, 0x9dc, 0xa1c, 0x9dc, 0xa1c, 0x7cd, 0x85e, +0x7cd, 0x85e, 0x7dd, 0x8c3, 0x7dd, 0x8c3, 0x68f, 0x7cb, 0x68f, 0x7cb, 0x68f, +0x7cb, 0x56a, 0x6fc, 0x56a, 0x6fc, 0x30b, 0x4f2, 0x30b, 0x4f2, 0x211, 0x44a, +0x211, 0x44a, 0x12a, 0x3b0, 0x12a, 0x3b0, 0xffcd, 0x29a, 0xffcd, 0x29a, 0xfd18, +0x23, 0xfd18, 0x23, 0xfd18, 0x23, 0xfac5, 0xfe07, 0xfac5, 0xfe07, 0xf95a, 0xfcc9, +0xf95a, 0xfcc9, 0xf682, 0xfa13, 0xf682, 0xfa13, 0xf55e, 0xf907, 0xf55e, 0xf907, 0xf470, +0xf827, 0xf470, 0xf827, 0xf470, 0xf827, 0xf227, 0xf5e0, 0xf227, 0xf5e0, 0xeffc, 0xf3ad, +0xeffc, 0xf3ad, 0xefb0, 0xf350, 0xefb0, 0xf350, 0xeef6, 0xf27c, 0xeef6, 0xf27c, 0xee8d, +0xf1f1, 0xee8d, 0xf1f1, 0xee5e, 0xf199, 0xee5e, 0xf199, 0xee5e, 0xf199, 0xee7c, 0xf188, +0xee7c, 0xf188, 0xed4e, 0xf027, 0xed4e, 0xf027, 0xedf5, 0xf097, 0xedf5, 0xf097, 0xeedf, +0xf147, 0xeedf, 0xf147, 0xecf1, 0xef1d, 0xecf1, 0xef1d, 0xec23, 0xee12, 0xec23, 0xee12, +0xec23, 0xee12, 0xeca8, 0xee5a, 0xeca8, 0xee5a, 0xec7e, 0xedf3, 0xec7e, 0xedf3, 0xed08, +0xee42, 0xed08, 0xee42, 0xedbc, 0xeebb, 0xedbc, 0xeebb, 0xee2e, 0xeef5, 0xee2e, 0xeef5, +0xee2e, 0xeef5, 0xedc8, 0xee58, 0xedc8, 0xee58, 0xec57, 0xecb3, 0xec57, 0xecb3, 0xece7, +0xed11, 0xece7, 0xed11, 0xeb37, 0xeb32, 0xeb37, 0xeb32, 0xe959, 0xe929, 0xe959, 0xe929, +0xea50, 0xe9f7, 0xea50, 0xe9f7, 0xea50, 0xe9f7, 0xea40, 0xe9c3, 0xea40, 0xe9c3, 0xe938, +0xe89a, 0xe938, 0xe89a, 0xeb4d, 0xea93, 0xeb4d, 0xea93, 0xebc8, 0xeaf7, 0xebc8, 0xeaf7, +0xec71, 0xeb8f, 0xec71, 0xeb8f, 0xed50, 0xec62, 0xed50, 0xec62, 0xed50, 0xec62, 0xeeb0, +0xedbc, 0xeeb0, 0xedbc, 0xf09b, 0xefa7, 0xf09b, 0xefa7, 0xf237, 0xf14d, 0xf237, 0xf14d, +0xf5b7, 0xf4dc, 0xf5b7, 0xf4dc, 0xf714, 0xf650, 0xf714, 0xf650, 0xf714, 0xf650, 0xf899, +0xf7f4, 0xf899, 0xf7f4, 0xf9d2, 0xf953, 0xf9d2, 0xf953, 0xfab5, 0xfa65, 0xfab5, 0xfa65, +0xf9b7, 0xf99b, 0xf9b7, 0xf99b, 0xf9ae, 0xf9ce, 0xf9ae, 0xf9ce, 0xf8ef, 0xf950, 0xf8ef, +0xf950, 0xf8ef, 0xf950, 0xf6ef, 0xf796, 0xf6ef, 0xf796, 0xf53d, 0xf62f, 0xf53d, 0xf62f, +0xf4c2, 0xf602, 0xf4c2, 0xf602, 0xf4a6, 0xf635, 0xf4a6, 0xf635, 0xf40d, 0xf5ec, 0xf40d, +0xf5ec, 0xf2f5, 0xf524, 0xf2f5, 0xf524, 0xf2f5, 0xf524, 0xf1bc, 0xf43a, 0xf1bc, 0xf43a, +0xf0d3, 0xf39d, 0xf0d3, 0xf39d, 0xef87, 0xf29a, 0xef87, 0xf29a, 0xefc9, 0xf320, 0xefc9, +0xf320, 0xecee, 0xf084, 0xecee, 0xf084, 0xecee, 0xf084, 0xec04, 0xefd3, 0xec04, 0xefd3, +0xeb36, 0xef38, 0xeb36, 0xef38, 0xea79, 0xeea5, 0xea79, 0xeea5, 0xea1c, 0xee6b, 0xea1c, +0xee6b, 0xe96a, 0xedd4, 0xe96a, 0xedd4, 0xe91d, 0xed9b, 0xe91d, 0xed9b, 0xe91d, 0xed9b, +0xe8c4, 0xed4d, 0xe8c4, 0xed4d, 0xe9a1, 0xee2c, 0xe9a1, 0xee2c, 0xe9de, 0xee64, 0xe9de, +0xee64, 0xeb76, 0xefef, 0xeb76, 0xefef, 0xed2e, 0xf192, 0xed2e, 0xf192, 0xedf2, 0xf239, +0xedf2, 0xf239, 0xedf2, 0xf239, 0xee45, 0xf269, 0xee45, 0xf269, 0xf05b, 0xf455, 0xf05b, +0xf455, 0xf225, 0xf5ed, 0xf225, 0xf5ed, 0xf2ca, 0xf65a, 0xf2ca, 0xf65a, 0xf487, 0xf7db, +0xf487, 0xf7db, 0xf487, 0xf7db, 0xf70c, 0xfa1d, 0xf70c, 0xfa1d, 0xf7ac, 0xfa75, 0xf7ac, +0xfa75, 0xf8b7, 0xfb33, 0xf8b7, 0xfb33, 0xf9ff, 0xfc2b, 0xf9ff, 0xfc2b, 0xfc23, 0xfdfc, +0xfc23, 0xfdfc, 0xfeed, 0x70, 0xfeed, 0x70, 0xfeed, 0x70, 0x123, 0x24f, 0x123, +0x24f, 0x47c, 0x54f, 0x47c, 0x54f, 0x5ba, 0x635, 0x5ba, 0x635, 0x6f8, 0x71c, +0x6f8, 0x71c, 0x9dd, 0x9ac, 0x9dd, 0x9ac, 0x9fc, 0x979, 0x9fc, 0x979, 0x9fc, +0x979, 0xb7a, 0xaa9, 0xb7a, 0xaa9, 0xdab, 0xc92, 0xdab, 0xc92, 0xd6e, 0xc12, +0xd6e, 0xc12, 0xd9e, 0xc06, 0xd9e, 0xc06, 0xc66, 0xa9b, 0xc66, 0xa9b, 0xc66, +0xa9b, 0xd0e, 0xb16, 0xd0e, 0xb16, 0xd25, 0xb0a, 0xd25, 0xb0a, 0xea1, 0xc6b, +0xea1, 0xc6b, 0xfd2, 0xd8a, 0xfd2, 0xd8a, 0xf14, 0xcc3, 0xf14, 0xcc3, 0xea0, +0xc4e, 0xea0, 0xc4e, 0xea0, 0xc4e, 0xf59, 0xd0e, 0xf59, 0xd0e, 0xf1f, 0xce3, +0xf1f, 0xce3, 0xe88, 0xc61, 0xe88, 0xc61, 0xf0a, 0xcfd, 0xf0a, 0xcfd, 0xd12, +0xb24, 0xd12, 0xb24, 0xd12, 0xb24, 0xb3b, 0x970, 0xb3b, 0x970, 0x928, 0x783, +0x928, 0x783, 0x8cf, 0x750, 0x8cf, 0x750, 0x713, 0x5bd, 0x713, 0x5bd, 0x6c7, +0x599, 0x6c7, 0x599, 0x610, 0x509, 0x610, 0x509, 0x610, 0x509, 0x504, 0x423, +0x504, 0x423, 0x421, 0x363, 0x421, 0x363, 0x3c4, 0x328, 0x3c4, 0x328, 0x2cb, +0x24e, 0x2cb, 0x24e, 0x1, 0xff9f, 0x1, 0xff9f, 0xff22, 0xfeda, 0xff22, 0xfeda, +0xff22, 0xfeda, 0xfe13, 0xfde2, 0xfe13, 0xfde2, 0xfdcb, 0xfdae, 0xfdcb, 0xfdae, 0xfd73, +0xfd68, 0xfd73, 0xfd68, 0xfeae, 0xfeb3, 0xfeae, 0xfeb3, 0xfd94, 0xfda7, 0xfd94, 0xfda7, +0xfd94, 0xfda7, 0xfcf1, 0xfd11, 0xfcf1, 0xfd11, 0xfcff, 0xfd2a, 0xfcff, 0xfd2a, 0xfc77, +0xfcab, 0xfc77, 0xfcab, 0xfbc5, 0xfc01, 0xfbc5, 0xfc01, 0xfb64, 0xfba6, 0xfb64, 0xfba6, +0xfad3, 0xfb18, 0xfad3, 0xfb18, 0xfad3, 0xfb18, 0xf995, 0xf9dc, 0xf995, 0xf9dc, 0xfa8d, +0xfad3, 0xfa8d, 0xfad3, 0xfacb, 0xfb0c, 0xfacb, 0xfb0c, 0xfa04, 0xfa3d, 0xfa04, 0xfa3d, +0xfa04, 0xfa30, 0xfa04, 0xfa30, 0xfa63, 0xfa7e, 0xfa63, 0xfa7e, 0xfa63, 0xfa7e, 0xfa4c, +0xfa52, 0xfa4c, 0xfa52, 0xfa41, 0xfa2c, 0xfa41, 0xfa2c, 0xfacc, 0xfa99, 0xfacc, 0xfa99, +0xfbe1, 0xfb8a, 0xfbe1, 0xfb8a, 0xfbc5, 0xfb47, 0xfbc5, 0xfb47, 0xfbc5, 0xfb47, 0xfd89, +0xfce0, 0xfd89, 0xfce0, 0xffd6, 0xff01, 0xffd6, 0xff01, 0xb1, 0xffac, 0xb1, 0xffac, +0x207, 0xd4, 0x207, 0xd4, 0x493, 0x332, 0x493, 0x332, 0x58e, 0x401, 0x58e, +0x401, 0x58e, 0x401, 0x76d, 0x5b8, 0x76d, 0x5b8, 0x9ec, 0x814, 0x9ec, 0x814, +0xbeb, 0x9f9, 0xbeb, 0x9f9, 0xc6e, 0xa68, 0xc6e, 0xa68, 0xbb3, 0x9a4, 0xbb3, +0x9a4, 0xcc3, 0xab4, 0xcc3, 0xab4, 0xcc3, 0xab4, 0xcaf, 0xaac, 0xcaf, 0xaac, +0xce0, 0xaf5, 0xce0, 0xaf5, 0xd26, 0xb5d, 0xd26, 0xb5d, 0xc7a, 0xae0, 0xc7a, +0xae0, 0xb7c, 0xa1b, 0xb7c, 0xa1b, 0xb7c, 0xa1b, 0xc1c, 0xaff, 0xc1c, 0xaff, +0xb28, 0xa57, 0xb28, 0xa57, 0xaae, 0xa30, 0xaae, 0xa30, 0x9d4, 0x9b0, 0x9d4, +0x9b0, 0x8d1, 0x90a, 0x8d1, 0x90a, 0x715, 0x7ad, 0x715, 0x7ad, 0x715, 0x7ad, +0x4b9, 0x5b1, 0x4b9, 0x5b1, 0x2d0, 0x425, 0x2d0, 0x425, 0x175, 0x323, 0x175, +0x323, 0x6a, 0x26c, 0x6a, 0x26c, 0xfe70, 0xc0, 0xfe70, 0xc0, 0xfdc5, 0x5b, +0xfdc5, 0x5b, 0xfdc5, 0x5b, 0xfbae, 0xfe80, 0xfbae, 0xfe80, 0xfb8d, 0xfe91, 0xfb8d, +0xfe91, 0xf88f, 0xfbbb, 0xf88f, 0xfbbb, 0xf607, 0xf952, 0xf607, 0xf952, 0xf498, 0xf7f7, +0xf498, 0xf7f7, 0xf498, 0xf7f7, 0xf29b, 0xf605, 0xf29b, 0xf605, 0xf207, 0xf572, 0xf207, +0xf572, 0xf26c, 0xf5d0, 0xf26c, 0xf5d0, 0xf323, 0xf679, 0xf323, 0xf679, 0xf399, 0xf6db, +0xf399, 0xf6db, 0xf489, 0xf7b1, 0xf489, 0xf7b1, 0xf489, 0xf7b1, 0xf593, 0xf89c, 0xf593, +0xf89c, 0xf6e1, 0xf9c8, 0xf6e1, 0xf9c8, 0xf70b, 0xf9cb, 0xf70b, 0xf9cb, 0xf96b, 0xfc03, +0xf96b, 0xfc03, 0xf962, 0xfbce, 0xf962, 0xfbce, 0xf98e, 0xfbcb, 0xf98e, 0xfbcb, 0xf98e, +0xfbcb, 0xfb48, 0xfd53, 0xfb48, 0xfd53, 0xfbb2, 0xfd89, 0xfbb2, 0xfd89, 0xfb4f, 0xfced, +0xfb4f, 0xfced, 0xfbb9, 0xfd19, 0xfbb9, 0xfd19, 0xfd1d, 0xfe3a, 0xfd1d, 0xfe3a, 0xfd1d, +0xfe3a, 0xfd0f, 0xfde4, 0xfd0f, 0xfde4, 0xfc49, 0xfccf, 0xfc49, 0xfccf, 0xfdb7, 0xfde7, +0xfdb7, 0xfde7, 0xff75, 0xff48, 0xff75, 0xff48, 0x15, 0xff84, 0x15, 0xff84, 0x291, +0x194, 0x291, 0x194, 0x291, 0x194, 0x4be, 0x34f, 0x4be, 0x34f, 0x462, 0x27c, +0x462, 0x27c, 0x700, 0x49d, 0x700, 0x49d, 0xae6, 0x803, 0xae6, 0x803, 0xc88, +0x924, 0xc88, 0x924, 0xfbf, 0xbd9, 0xfbf, 0xbd9, 0xfbf, 0xbd9, 0x1236, 0xdd2, +0x1236, 0xdd2, 0x1721, 0x1243, 0x1721, 0x1243, 0x18aa, 0x1359, 0x18aa, 0x1359, 0x1a34, +0x1478, 0x1a34, 0x1478, 0x1d5b, 0x1740, 0x1d5b, 0x1740, 0x1d5b, 0x1740, 0x1dbf, 0x1752, +0x1dbf, 0x1752, 0x2029, 0x1978, 0x2029, 0x1978, 0x22fc, 0x1c16, 0x22fc, 0x1c16, 0x2307, +0x1bfd, 0x2307, 0x1bfd, 0x21fc, 0x1adf, 0x21fc, 0x1adf, 0x2231, 0x1b13, 0x2231, 0x1b13, +0x2231, 0x1b13, 0x21f9, 0x1aea, 0x21f9, 0x1aea, 0x21bc, 0x1ace, 0x21bc, 0x1ace, 0x215d, +0x1a9e, 0x215d, 0x1a9e, 0x2243, 0x1bc2, 0x2243, 0x1bc2, 0x2059, 0x1a22, 0x2059, 0x1a22, +0x1f05, 0x1921, 0x1f05, 0x1921, 0x1f05, 0x1921, 0x1f14, 0x198d, 0x1f14, 0x198d, 0x1eda, +0x19b5, 0x1eda, 0x19b5, 0x1e0c, 0x194f, 0x1e0c, 0x194f, 0x1d61, 0x190e, 0x1d61, 0x190e, +0x1bc9, 0x17df, 0x1bc9, 0x17df, 0x1bc9, 0x17df, 0x18ec, 0x156b, 0x18ec, 0x156b, 0x1734, +0x1418, 0x1734, 0x1418, 0x143f, 0x1186, 0x143f, 0x1186, 0x10e7, 0xe8c, 0x10e7, 0xe8c, +0xe42, 0xc40, 0xe42, 0xc40, 0xb72, 0x9c4, 0xb72, 0x9c4, 0xb72, 0x9c4, 0x857, +0x6f8, 0x857, 0x6f8, 0x5a4, 0x48f, 0x5a4, 0x48f, 0x245, 0x176, 0x245, 0x176, +0x150, 0xc2, 0x150, 0xc2, 0xfef0, 0xfea1, 0xfef0, 0xfea1, 0xfe04, 0xfdf2, 0xfe04, +0xfdf2, 0xfe04, 0xfdf2, 0xfe37, 0xfe5f, 0xfe37, 0xfe5f, 0xfd74, 0xfdd6, 0xfd74, 0xfdd6, +0xfd46, 0xfde1, 0xfd46, 0xfde1, 0xfc3e, 0xfd10, 0xfc3e, 0xfd10, 0xfac2, 0xfbcb, 0xfac2, +0xfbcb, 0xfac2, 0xfbcb, 0xfa98, 0xfbd8, 0xfa98, 0xfbd8, 0xfa3f, 0xfbb4, 0xfa3f, 0xfbb4, +0xf880, 0xfa27, 0xf880, 0xfa27, 0xf8b5, 0xfa8d, 0xf8b5, 0xfa8d, 0xf7f1, 0xf9f5, 0xf7f1, +0xf9f5, 0xf6b6, 0xf8e2, 0xf6b6, 0xf8e2, 0xf6b6, 0xf8e2, 0xf547, 0xf795, 0xf547, 0xf795, +0xf5ac, 0xf816, 0xf5ac, 0xf816, 0xf58b, 0xf809, 0xf58b, 0xf809, 0xf4a9, 0xf733, 0xf4a9, +0xf733, 0xf516, 0xf7a2, 0xf516, 0xf7a2, 0xf516, 0xf7a2, 0xf50b, 0xf791, 0xf50b, 0xf791, +0xf46a, 0xf6e0, 0xf46a, 0xf6e0, 0xf6c3, 0xf920, 0xf6c3, 0xf920, 0xf7f1, 0xfa2e, 0xf7f1, +0xfa2e, 0xf889, 0xfa9d, 0xf889, 0xfa9d, 0xf9ac, 0xfb91, 0xf9ac, 0xfb91, 0xf9ac, 0xfb91, +0xfa9a, 0xfc4b, 0xfa9a, 0xfc4b, 0xfd1e, 0xfe97, 0xfd1e, 0xfe97, 0xfd20, 0xfe5f, 0xfd20, +0xfe5f, 0xff65, 0x6b, 0xff65, 0x6b, 0x1c9, 0x297, 0x1c9, 0x297, 0x355, 0x3ee, +0x355, 0x3ee, 0x355, 0x3ee, 0x783, 0x7eb, 0x783, 0x7eb, 0xb7c, 0xbba, 0xb7c, +0xbba, 0xa71, 0xa8c, 0xa71, 0xa8c, 0xa9d, 0xa9d, 0xa9d, 0xa9d, 0xa53, 0xa3f, +0xa53, 0xa3f, 0xa53, 0xa3f, 0x906, 0x8e8, 0x906, 0x8e8, 0x7ce, 0x7af, 0x7ce, +0x7af, 0x65f, 0x647, 0x65f, 0x647, 0x6d9, 0x6ce, 0x6d9, 0x6ce, 0x534, 0x53e, +0x534, 0x53e, 0x47d, 0x49f, 0x47d, 0x49f, 0x47d, 0x49f, 0x418, 0x458, 0x418, +0x458, 0x2ae, 0x30e, 0x2ae, 0x30e, 0x154, 0x1d6, 0x154, 0x1d6, 0x305, 0x3aa, +0x305, 0x3aa, 0x2a1, 0x366, 0x2a1, 0x366, 0x23d, 0x322, 0x23d, 0x322, 0x23d, +0x322, 0x31c, 0x41e, 0x31c, 0x41e, 0xb0, 0x1cd, 0xb0, 0x1cd, 0xfe3e, 0xff72, +0xfe3e, 0xff72, 0xfc43, 0xfd8d, 0xfc43, 0xfd8d, 0xfa3d, 0xfb99, 0xfa3d, 0xfb99, 0xfa3d, +0xfb99, 0xf94e, 0xfabb, 0xf94e, 0xfabb, 0xf7f8, 0xf974, 0xf7f8, 0xf974, 0xf6d0, 0xf85c, +0xf6d0, 0xf85c, 0xf576, 0xf712, 0xf576, 0xf712, 0xf388, 0xf536, 0xf388, 0xf536, 0xf104, +0xf2c5, 0xf104, 0xf2c5, 0xf104, 0xf2c5, 0xee31, 0xf009, 0xee31, 0xf009, 0xedf3, 0xefe5, +0xedf3, 0xefe5, 0xed91, 0xefa1, 0xed91, 0xefa1, 0xec45, 0xee77, 0xec45, 0xee77, 0xea0e, +0xec66, 0xea0e, 0xec66, 0xe9d4, 0xec54, 0xe9d4, 0xec54, 0xe9d4, 0xec54, 0xe9fa, 0xeca6, +0xe9fa, 0xeca6, 0xe8bd, 0xeb95, 0xe8bd, 0xeb95, 0xe6b4, 0xe9b8, 0xe6b4, 0xe9b8, 0xe59e, +0xe8cc, 0xe59e, 0xe8cc, 0xe1bc, 0xe512, 0xe1bc, 0xe512, 0xe1bc, 0xe512, 0xdf60, 0xe2d9, +0xdf60, 0xe2d9, 0xe088, 0xe41f, 0xe088, 0xe41f, 0xdfdf, 0xe38c, 0xdfdf, 0xe38c, 0xe01c, +0xe3d6, 0xe01c, 0xe3d6, 0xe11f, 0xe4de, 0xe11f, 0xe4de, 0xe047, 0xe400, 0xe047, 0xe400, +0xe047, 0xe400, 0xddbb, 0xe164, 0xddbb, 0xe164, 0xdfa8, 0xe337, 0xdfa8, 0xe337, 0xe067, +0xe3d2, 0xe067, 0xe3d2, 0xe15a, 0xe49a, 0xe15a, 0xe49a, 0xe20b, 0xe516, 0xe20b, 0xe516, +0xe4d4, 0xe7a6, 0xe4d4, 0xe7a6, 0xe4d4, 0xe7a6, 0xea07, 0xec9a, 0xea07, 0xec9a, 0xec96, +0xeee9, 0xec96, 0xeee9, 0xeefe, 0xf110, 0xeefe, 0xf110, 0xf050, 0xf223, 0xf050, 0xf223, +0xf0ba, 0xf252, 0xf0ba, 0xf252, 0xf0ba, 0xf252, 0xf343, 0xf4a3, 0xf343, 0xf4a3, 0xf664, +0xf795, 0xf664, 0xf795, 0xf78f, 0xf897, 0xf78f, 0xf897, 0xf9b5, 0xfa9e, 0xf9b5, 0xfa9e, +0xfb57, 0xfc29, 0xfb57, 0xfc29, 0xfd95, 0xfe59, 0xfd95, 0xfe59, 0xfd95, 0xfe59, 0xfdef, +0xfead, 0xfdef, 0xfead, 0xfe7d, 0xff3d, 0xfe7d, 0xff3d, 0xfdce, 0xfe96, 0xfdce, 0xfe96, +0xfc6c, 0xfd41, 0xfc6c, 0xfd41, 0xfbb8, 0xfc9c, 0xfbb8, 0xfc9c, 0xfaf9, 0xfbee, 0xfaf9, +0xfbee, 0xfaf9, 0xfbee, 0xfacd, 0xfbd1, 0xfacd, 0xfbd1, 0xfb3f, 0xfc4f, 0xfb3f, 0xfc4f, +0xfc25, 0xfd3e, 0xfc25, 0xfd3e, 0xfbb3, 0xfccd, 0xfbb3, 0xfccd, 0xfe28, 0xff3c, 0xfe28, +0xff3c, 0xfe28, 0xff3c, 0xffce, 0xd3, 0xffce, 0xd3, 0xff37, 0x25, 0xff37, 0x25, +0xfff0, 0xbe, 0xfff0, 0xbe, 0x154, 0x1f8, 0x154, 0x1f8, 0x1e6, 0x25a, 0x1e6, +0x25a, 0x390, 0x3cd, 0x390, 0x3cd, 0x390, 0x3cd, 0x482, 0x483, 0x482, 0x483, +0x517, 0x4da, 0x517, 0x4da, 0x5d2, 0x555, 0x5d2, 0x555, 0x6f4, 0x639, 0x6f4, +0x639, 0x794, 0x69f, 0x794, 0x69f, 0x5fb, 0x4d1, 0x5fb, 0x4d1, 0x5fb, 0x4d1, +0x671, 0x51b, 0x671, 0x51b, 0x7cb, 0x652, 0x7cb, 0x652, 0x5a9, 0x418, 0x5a9, +0x418, 0x530, 0x393, 0x530, 0x393, 0x693, 0x4f5, 0x693, 0x4f5, 0x693, 0x4f5, +0x704, 0x571, 0x704, 0x571, 0x68f, 0x512, 0x68f, 0x512, 0x613, 0x4b7, 0x613, +0x4b7, 0x6e3, 0x5af, 0x6e3, 0x5af, 0x461, 0x35d, 0x461, 0x35d, 0x395, 0x2c5, +0x395, 0x2c5, 0x395, 0x2c5, 0x442, 0x3a9, 0x442, 0x3a9, 0x3c4, 0x35f, 0x3c4, +0x35f, 0x23b, 0x20a, 0x23b, 0x20a, 0x1c5, 0x1c0, 0x1c5, 0x1c0, 0xfe2b, 0xfe4b, +0xfe2b, 0xfe4b, 0xfb28, 0xfb65, 0xfb28, 0xfb65, 0xfb28, 0xfb65, 0xfbb6, 0xfc04, 0xfbb6, +0xfc04, 0xfbae, 0xfc01, 0xfbae, 0xfc01, 0xfbf4, 0xfc40, 0xfbf4, 0xfc40, 0xfa70, 0xfaa9, +0xfa70, 0xfaa9, 0xfaf6, 0xfb10, 0xfaf6, 0xfb10, 0xfaf6, 0xfb10, 0xf9c9, 0xf9ba, 0xf9c9, +0xf9ba, 0xf9a1, 0xf960, 0xf9a1, 0xf960, 0xfb78, 0xfafe, 0xfb78, 0xfafe, 0xfcc7, 0xfc0f, +0xfcc7, 0xfc0f, 0xfe3c, 0xfd44, 0xfe3c, 0xfd44, 0x128, 0xfff0, 0x128, 0xfff0, 0x128, +0xfff0, 0x2d9, 0x162, 0x2d9, 0x162, 0x434, 0x285, 0x434, 0x285, 0x591, 0x3b0, +0x591, 0x3b0, 0x6e2, 0x4d8, 0x6e2, 0x4d8, 0x929, 0x700, 0x929, 0x700, 0x9eb, +0x7ad, 0x9eb, 0x7ad, 0x9eb, 0x7ad, 0xaba, 0x874, 0xaba, 0x874, 0x9c3, 0x780, +0x9c3, 0x780, 0x8d6, 0x6a1, 0x8d6, 0x6a1, 0x8de, 0x6c0, 0x8de, 0x6c0, 0x968, +0x76b, 0x968, 0x76b, 0x968, 0x76b, 0x754, 0x57c, 0x754, 0x57c, 0x642, 0x496, +0x642, 0x496, 0x59e, 0x41e, 0x59e, 0x41e, 0x485, 0x333, 0x485, 0x333, 0x5ef, +0x4c7, 0x5ef, 0x4c7, 0x57c, 0x47a, 0x57c, 0x47a, 0x57c, 0x47a, 0x2d5, 0x1f2, +0x2d5, 0x1f2, 0x314, 0x249, 0x314, 0x249, 0x3ab, 0x2ef, 0x3ab, 0x2ef, 0x3b9, +0x301, 0x3b9, 0x301, 0x549, 0x48c, 0x549, 0x48c, 0x549, 0x48c, 0x5a4, 0x4d8, +0x5a4, 0x4d8, 0x61d, 0x539, 0x61d, 0x539, 0x572, 0x46e, 0x572, 0x46e, 0x5b4, +0x48b, 0x5b4, 0x48b, 0x56c, 0x419, 0x56c, 0x419, 0x4f7, 0x378, 0x4f7, 0x378, +0x4f7, 0x378, 0x73e, 0x593, 0x73e, 0x593, 0x7fc, 0x627, 0x7fc, 0x627, 0x647, +0x44e, 0x647, 0x44e, 0x509, 0x2f2, 0x509, 0x2f2, 0x40c, 0x1df, 0x40c, 0x1df, +0x3fa, 0x1c1, 0x3fa, 0x1c1, 0x3fa, 0x1c1, 0x32a, 0xf1, 0x32a, 0xf1, 0x47b, +0x24e, 0x47b, 0x24e, 0x554, 0x33e, 0x554, 0x33e, 0x38b, 0x198, 0x38b, 0x198, +0x3cb, 0x207, 0x3cb, 0x207, 0x3cb, 0x207, 0x3da, 0x24e, 0x3da, 0x24e, 0x1d4, +0x88, 0x1d4, 0x88, 0xa7, 0xffa2, 0xa7, 0xffa2, 0xf9, 0x40, 0xf9, 0x40, +0xfdaa, 0xfd3f, 0xfdaa, 0xfd3f, 0xfc42, 0xfc26, 0xfc42, 0xfc26, 0xfc42, 0xfc26, 0xfb08, +0xfb3a, 0xfb08, 0xfb3a, 0xfa50, 0xfacb, 0xfa50, 0xfacb, 0xf975, 0xfa33, 0xf975, 0xfa33, +0xf8c3, 0xf9bf, 0xf8c3, 0xf9bf, 0xf92d, 0xfa5d, 0xf92d, 0xfa5d, 0xf7a6, 0xf901, 0xf7a6, +0xf901, 0xf7a6, 0xf901, 0xf6d5, 0xf852, 0xf6d5, 0xf852, 0xf6ac, 0xf842, 0xf6ac, 0xf842, +0xf5c2, 0xf767, 0xf5c2, 0xf767, 0xf50d, 0xf6b9, 0xf50d, 0xf6b9, 0xf6d9, 0xf883, 0xf6d9, +0xf883, 0xf6d9, 0xf883, 0xf74d, 0xf8ee, 0xf74d, 0xf8ee, 0xf835, 0xf9c8, 0xf835, 0xf9c8, +0xf887, 0xfa07, 0xf887, 0xfa07, 0xf8ed, 0xfa59, 0xf8ed, 0xfa59, 0xf8a0, 0xf9f5, 0xf8a0, +0xf9f5, 0xf8a6, 0xf9e3, 0xf8a6, 0xf9e3, 0xf8a6, 0xf9e3, 0xf944, 0xfa6a, 0xf944, 0xfa6a, +0xf983, 0xfa94, 0xf983, 0xfa94, 0xfa4a, 0xfb47, 0xfa4a, 0xfb47, 0xfae9, 0xfbd4, 0xfae9, +0xfbd4, 0xfb52, 0xfc2e, 0xfb52, 0xfc2e, 0xfa48, 0xfb17, 0xfa48, 0xfb17, 0xfa48, 0xfb17, +0xfa0a, 0xfacc, 0xfa0a, 0xfacc, 0xf9c7, 0xfa7d, 0xf9c7, 0xfa7d, 0xf97a, 0xfa25, 0xf97a, +0xfa25, 0xfaf4, 0xfb92, 0xfaf4, 0xfb92, 0xfbbb, 0xfc4b, 0xfbbb, 0xfc4b, 0xfbbb, 0xfc4b, +0xfa0a, 0xfa89, 0xfa0a, 0xfa89, 0xfbab, 0xfc14, 0xfbab, 0xfc14, 0xfc6d, 0xfcbd, 0xfc6d, +0xfcbd, 0xfc22, 0xfc53, 0xfc22, 0xfc53, 0xfc9c, 0xfca9, 0xfc9c, 0xfca9, 0xfd88, 0xfd6c, +0xfd88, 0xfd6c, 0xfd88, 0xfd6c, 0xff85, 0xff3b, 0xff85, 0xff3b, 0x120, 0xa2, 0x120, +0xa2, 0x378, 0x2c3, 0x378, 0x2c3, 0x4f9, 0x408, 0x4f9, 0x408, 0x5c5, 0x497, +0x5c5, 0x497, 0x830, 0x6c3, 0x830, 0x6c3, 0x830, 0x6c3, 0xa82, 0x8d6, 0xa82, +0x8d6, 0xb8d, 0x9a3, 0xb8d, 0x9a3, 0xe3e, 0xc18, 0xe3e, 0xc18, 0x100e, 0xdaf, +0x100e, 0xdaf, 0x1151, 0xebe, 0x1151, 0xebe, 0x1151, 0xebe, 0x11d6, 0xf14, 0x11d6, +0xf14, 0x1313, 0x1028, 0x1313, 0x1028, 0x1490, 0x1183, 0x1490, 0x1183, 0x13fd, 0x10d3, +0x13fd, 0x10d3, 0x13ed, 0x10af, 0x13ed, 0x10af, 0x1511, 0x11c4, 0x1511, 0x11c4, 0x1511, +0x11c4, 0x1409, 0x10b4, 0x1409, 0x10b4, 0x1562, 0x120b, 0x1562, 0x120b, 0x16ed, 0x1399, +0x16ed, 0x1399, 0x1656, 0x130a, 0x1656, 0x130a, 0x1768, 0x1428, 0x1768, 0x1428, 0x1720, +0x13f0, 0x1720, 0x13f0, 0x1720, 0x13f0, 0x1795, 0x1477, 0x1795, 0x1477, 0x17e1, 0x14d8, +0x17e1, 0x14d8, 0x18e0, 0x15ee, 0x18e0, 0x15ee, 0x19e4, 0x170b, 0x19e4, 0x170b, 0x1a29, +0x176a, 0x1a29, 0x176a, 0x1a29, 0x176a, 0x19cc, 0x1729, 0x19cc, 0x1729, 0x19cc, 0x1746, +0x19cc, 0x1746, 0x1808, 0x15a2, 0x1808, 0x15a2, 0x17aa, 0x1567, 0x17aa, 0x1567, 0x180a, +0x15eb, 0x180a, 0x15eb, 0x1799, 0x15a1, 0x1799, 0x15a1, 0x1799, 0x15a1, 0x17da, 0x160d, +0x17da, 0x160d, 0x16e6, 0x1548, 0x16e6, 0x1548, 0x160c, 0x14a0, 0x160c, 0x14a0, 0x1401, +0x12cb, 0x1401, 0x12cb, 0x1397, 0x129b, 0x1397, 0x129b, 0x1201, 0x1142, 0x1201, 0x1142, +0x1201, 0x1142, 0x101a, 0xf9a, 0x101a, 0xf9a, 0xde1, 0xda3, 0xde1, 0xda3, 0xb96, +0xb9a, 0xb96, 0xb9a, 0x9e6, 0xa2d, 0x9e6, 0xa2d, 0x82b, 0x8b3, 0x82b, 0x8b3, +0x82b, 0x8b3, 0x773, 0x83a, 0x773, 0x83a, 0x60e, 0x710, 0x60e, 0x710, 0x426, +0x55e, 0x426, 0x55e, 0x44a, 0x5b3, 0x44a, 0x5b3, 0x29a, 0x42b, 0x29a, 0x42b, +0xff4d, 0xfe, 0xff4d, 0xfe, 0xff4d, 0xfe, 0xfe51, 0x1b, 0xfe51, 0x1b, 0xfcdb, +0xfeb3, 0xfcdb, 0xfeb3, 0xfaa2, 0xfc80, 0xfaa2, 0xfc80, 0xf7ac, 0xf987, 0xf7ac, 0xf987, +0xf667, 0xf836, 0xf667, 0xf836, 0xf601, 0xf7bb, 0xf601, 0xf7bb, 0xf601, 0xf7bb, 0xf6d1, +0xf86f, 0xf6d1, 0xf86f, 0xf79a, 0xf917, 0xf79a, 0xf917, 0xf7e6, 0xf93d, 0xf7e6, 0xf93d, +0xf9b3, 0xfae2, 0xf9b3, 0xfae2, 0xfdc6, 0xfeca, 0xfdc6, 0xfeca, 0xfdc6, 0xfeca, 0xffe1, +0xba, 0xffe1, 0xba, 0x8f, 0x13e, 0x8f, 0x13e, 0x182, 0x209, 0x182, 0x209, +0x2a7, 0x30b, 0x2a7, 0x30b, 0x31f, 0x364, 0x31f, 0x364, 0x22b, 0x256, 0x22b, +0x256, 0x22b, 0x256, 0x32e, 0x345, 0x32e, 0x345, 0x2e2, 0x2eb, 0x2e2, 0x2eb, +0x242, 0x242, 0x242, 0x242, 0x2b2, 0x2ae, 0x2b2, 0x2ae, 0x2fc, 0x2f9, 0x2fc, +0x2f9, 0x139, 0x13b, 0x139, 0x13b, 0x139, 0x13b, 0x16f, 0x179, 0x16f, 0x179, +0x289, 0x29c, 0x289, 0x29c, 0x2cb, 0x2e7, 0x2cb, 0x2e7, 0x245, 0x269, 0x245, +0x269, 0x13c, 0x168, 0x13c, 0x168, 0x13c, 0x168, 0xce, 0xff, 0xce, 0xff, +0xdd, 0x110, 0xdd, 0x110, 0x241, 0x273, 0x241, 0x273, 0x40e, 0x43c, 0x40e, +0x43c, 0x535, 0x55b, 0x535, 0x55b, 0x53d, 0x558, 0x53d, 0x558, 0x53d, 0x558, +0x4db, 0x4ea, 0x4db, 0x4ea, 0x34f, 0x34f, 0x34f, 0x34f, 0x313, 0x305, 0x313, +0x305, 0x2ea, 0x2ce, 0x2ea, 0x2ce, 0x37c, 0x355, 0x37c, 0x355, 0x37c, 0x355, +0x2b4, 0x286, 0x2b4, 0x286, 0x24f, 0x21f, 0x24f, 0x21f, 0xd0, 0xa5, 0xd0, +0xa5, 0xfefb, 0xfedc, 0xfefb, 0xfedc, 0xfde2, 0xfdd8, 0xfde2, 0xfdd8, 0xfc13, 0xfc26, +0xfc13, 0xfc26, 0xfc13, 0xfc26, 0xfbb7, 0xfbf1, 0xfbb7, 0xfbf1, 0xf958, 0xf9c2, 0xf958, +0xf9c2, 0xf710, 0xf7b4, 0xf710, 0xf7b4, 0xf4a9, 0xf58d, 0xf4a9, 0xf58d, 0xf2d0, 0xf3fd, +0xf2d0, 0xf3fd, 0xf1ac, 0xf327, 0xf1ac, 0xf327, 0xf1ac, 0xf327, 0xeff8, 0xf1c5, 0xeff8, +0xf1c5, 0xee72, 0xf093, 0xee72, 0xf093, 0xee82, 0xf0f8, 0xee82, 0xf0f8, 0xecbe, 0xef88, +0xecbe, 0xef88, 0xeb6d, 0xee87, 0xeb6d, 0xee87, 0xeb6d, 0xee87, 0xea97, 0xedfa, 0xea97, +0xedfa, 0xe7be, 0xeb65, 0xe7be, 0xeb65, 0xe529, 0xe90b, 0xe529, 0xe90b, 0xe33d, 0xe74e, +0xe33d, 0xe74e, 0xe228, 0xe65f, 0xe228, 0xe65f, 0xe078, 0xe4c9, 0xe078, 0xe4c9, 0xe078, +0xe4c9, 0xdef2, 0xe350, 0xdef2, 0xe350, 0xdf11, 0xe370, 0xdf11, 0xe370, 0xdea9, 0xe2fe, +0xdea9, 0xe2fe, 0xdf95, 0xe3d4, 0xdf95, 0xe3d4, 0xe35a, 0xe779, 0xe35a, 0xe779, 0xe4fc, +0xe8f3, 0xe4fc, 0xe8f3, 0xe4fc, 0xe8f3, 0xe67e, 0xea44, 0xe67e, 0xea44, 0xe7bf, 0xeb50, +0xe7bf, 0xeb50, 0xe960, 0xecb6, 0xe960, 0xecb6, 0xea11, 0xed2a, 0xea11, 0xed2a, 0xeb33, +0xee0d, 0xeb33, 0xee0d, 0xeb33, 0xee0d, 0xedac, 0xf048, 0xedac, 0xf048, 0xefd7, 0xf236, +0xefd7, 0xf236, 0xf0f7, 0xf31c, 0xf0f7, 0xf31c, 0xf34b, 0xf53a, 0xf34b, 0xf53a, 0xf437, +0xf5f3, 0xf437, 0xf5f3, 0xf2ff, 0xf48e, 0xf2ff, 0xf48e, 0xf2ff, 0xf48e, 0xf3f9, 0xf560, +0xf3f9, 0xf560, 0xf327, 0xf46a, 0xf327, 0xf46a, 0xf35e, 0xf480, 0xf35e, 0xf480, 0xf2bb, +0xf3c2, 0xf2bb, 0xf3c2, 0xf2b9, 0xf3a8, 0xf2b9, 0xf3a8, 0xf328, 0xf400, 0xf328, 0xf400, +0xf328, 0xf400, 0xf34c, 0xf411, 0xf34c, 0xf411, 0xf569, 0xf61a, 0xf569, 0xf61a, 0xf742, +0xf7df, 0xf742, 0xf7df, 0xf7b5, 0xf83e, 0xf7b5, 0xf83e, 0xf9a4, 0xfa18, 0xf9a4, 0xfa18, +0xf9a4, 0xfa18, 0xfaa7, 0xfb03, 0xfaa7, 0xfb03, 0xfb3c, 0xfb7f, 0xfb3c, 0xfb7f, 0xfc97, +0xfcbf, 0xfc97, 0xfcbf, 0xfd9e, 0xfda7, 0xfd9e, 0xfda7, 0xff3b, 0xff24, 0xff3b, 0xff24, +0xff21, 0xfee8, 0xff21, 0xfee8, 0xff21, 0xfee8, 0x32, 0xffd6, 0x32, 0xffd6, 0xffe1, +0xff62, 0xffe1, 0xff62, 0xffd8, 0xff35, 0xffd8, 0xff35, 0xff9e, 0xfed8, 0xff9e, 0xfed8, +0xff7a, 0xfe94, 0xff7a, 0xfe94, 0xff06, 0xfe01, 0xff06, 0xfe01, 0xff06, 0xfe01, 0xfda4, +0xfc85, 0xfda4, 0xfc85, 0xfd0d, 0xfbd8, 0xfd0d, 0xfbd8, 0xfcbf, 0xfb78, 0xfcbf, 0xfb78, +0xfbdb, 0xfa88, 0xfbdb, 0xfa88, 0xfbd6, 0xfa7d, 0xfbd6, 0xfa7d, 0xfbd6, 0xfa7d, 0xfc71, +0xfb17, 0xfc71, 0xfb17, 0xfd96, 0xfc42, 0xfd96, 0xfc42, 0xff93, 0xfe49, 0xff93, 0xfe49, +0xfe52, 0xfd1a, 0xfe52, 0xfd1a, 0xfea2, 0xfd7f, 0xfea2, 0xfd7f, 0xff6f, 0xfe66, 0xff6f, +0xfe66, 0xff6f, 0xfe66, 0xff01, 0xfe16, 0xff01, 0xfe16, 0xfe0b, 0xfd3f, 0xfe0b, 0xfd3f, +0xfd2c, 0xfc82, 0xfd2c, 0xfc82, 0xfd3d, 0xfcb6, 0xfd3d, 0xfcb6, 0xfcd7, 0xfc73, 0xfcd7, +0xfc73, 0xfb94, 0xfb51, 0xfb94, 0xfb51, 0xfb94, 0xfb51, 0xfa9f, 0xfa7b, 0xfa9f, 0xfa7b, +0xf875, 0xf86c, 0xf875, 0xf86c, 0xf827, 0xf835, 0xf827, 0xf835, 0xf989, 0xf9a9, 0xf989, +0xf9a9, 0xf9b4, 0xf9e0, 0xf9b4, 0xf9e0, 0xf9b4, 0xf9e0, 0xf9c7, 0xf9f9, 0xf9c7, 0xf9f9, +0xfabe, 0xfaf0, 0xfabe, 0xfaf0, 0xfc4b, 0xfc75, 0xfc4b, 0xfc75, 0xfcc3, 0xfcdf, 0xfcc3, +0xfcdf, 0xfe1a, 0xfe20, 0xfe1a, 0xfe20, 0xffa1, 0xff8b, 0xffa1, 0xff8b, 0xffa1, 0xff8b, +0x71, 0x38, 0x71, 0x38, 0x78, 0x17, 0x78, 0x17, 0x366, 0x2d7, 0x366, +0x2d7, 0x3d7, 0x316, 0x3d7, 0x316, 0x3dc, 0x2e7, 0x3dc, 0x2e7, 0x4cb, 0x39f, +0x4cb, 0x39f, 0x4cb, 0x39f, 0x52f, 0x3ca, 0x52f, 0x3ca, 0x63e, 0x4a1, 0x63e, +0x4a1, 0x635, 0x461, 0x635, 0x461, 0x6ee, 0x4e6, 0x6ee, 0x4e6, 0x6fa, 0x4c0, +0x6fa, 0x4c0, 0x6fa, 0x4c0, 0x6ff, 0x499, 0x6ff, 0x499, 0x8d1, 0x645, 0x8d1, +0x645, 0xb7e, 0x8d2, 0xb7e, 0x8d2, 0xc7f, 0x9bb, 0xc7f, 0x9bb, 0xeaa, 0xbd5, +0xeaa, 0xbd5, 0xf07, 0xc2a, 0xf07, 0xc2a, 0xf07, 0xc2a, 0xf63, 0xc87, 0xf63, +0xc87, 0x1058, 0xd86, 0x1058, 0xd86, 0x11cd, 0xf0d, 0x11cd, 0xf0d, 0x127c, 0xfd6, +0x127c, 0xfd6, 0x1267, 0xfe3, 0x1267, 0xfe3, 0x12ca, 0x106e, 0x12ca, 0x106e, 0x12ca, +0x106e, 0x1222, 0xff4, 0x1222, 0xff4, 0x118b, 0xf90, 0x118b, 0xf90, 0xffe, 0xe39, +0xffe, 0xe39, 0xf4f, 0xdc1, 0xf4f, 0xdc1, 0xdd2, 0xc7e, 0xdd2, 0xc7e, 0xdd2, +0xc7e, 0xbf8, 0xadc, 0xbf8, 0xadc, 0x992, 0x8ad, 0x992, 0x8ad, 0x68e, 0x5dc, +0x68e, 0x5dc, 0x3f4, 0x372, 0x3f4, 0x372, 0x2df, 0x289, 0x2df, 0x289, 0x170, +0x140, 0x170, 0x140, 0x170, 0x140, 0x1af, 0x1a0, 0x1af, 0x1a0, 0x1ab, 0x1b7, +0x1ab, 0x1b7, 0x37, 0x58, 0x37, 0x58, 0xffc0, 0xfff2, 0xffc0, 0xfff2, 0xfeea, +0xff28, 0xfeea, 0xff28, 0xfe4f, 0xfe96, 0xfe4f, 0xfe96, 0xfe4f, 0xfe96, 0xfcd2, 0xfd1e, +0xfcd2, 0xfd1e, 0xfc2b, 0xfc79, 0xfc2b, 0xfc79, 0xfd41, 0xfd91, 0xfd41, 0xfd91, 0xfdca, +0xfe1c, 0xfdca, 0xfe1c, 0xfdb2, 0xfe07, 0xfdb2, 0xfe07, 0xfdb2, 0xfe07, 0xfdce, 0xfe28, +0xfdce, 0xfe28, 0xfcba, 0xfd1b, 0xfcba, 0xfd1b, 0xfdb3, 0xfe1f, 0xfdb3, 0xfe1f, 0xfe40, +0xfebb, 0xfe40, 0xfebb, 0xfc3f, 0xfccb, 0xfc3f, 0xfccb, 0xf9ce, 0xfa70, 0xf9ce, 0xfa70, +0xf9ce, 0xfa70, 0xf95f, 0xfa19, 0xf95f, 0xfa19, 0xf95e, 0xfa33, 0xf95e, 0xfa33, 0xf911, +0xfa04, 0xf911, 0xfa04, 0xf947, 0xfa58, 0xf947, 0xfa58, 0xfa41, 0xfb6f, 0xfa41, 0xfb6f, +0xfa41, 0xfb6f, 0xf9e9, 0xfb33, 0xf9e9, 0xfb33, 0xf9d9, 0xfb3c, 0xf9d9, 0xfb3c, 0xfc31, +0xfdaa, 0xfc31, 0xfdaa, 0xfb5c, 0xfce5, 0xfb5c, 0xfce5, 0xfbef, 0xfd82, 0xfbef, 0xfd82, +0xfd20, 0xfeb6, 0xfd20, 0xfeb6, 0xfd20, 0xfeb6, 0xfdb7, 0xff4a, 0xfdb7, 0xff4a, 0xfd0a, +0xfe91, 0xfd0a, 0xfe91, 0xfc58, 0xfdcc, 0xfc58, 0xfdcc, 0xfc7c, 0xfdd5, 0xfc7c, 0xfdd5, +0xfc03, 0xfd3c, 0xfc03, 0xfd3c, 0xfb7e, 0xfc92, 0xfb7e, 0xfc92, 0xfb7e, 0xfc92, 0xfd2f, +0xfe18, 0xfd2f, 0xfe18, 0xfe89, 0xff45, 0xfe89, 0xff45, 0xfe5e, 0xfeec, 0xfe5e, 0xfeec, +0xff2a, 0xff8b, 0xff2a, 0xff8b, 0xfec3, 0xfef9, 0xfec3, 0xfef9, 0xfec3, 0xfef9, 0xff61, +0xff6f, 0xff61, 0xff6f, 0x38, 0x25, 0x38, 0x25, 0x2bf, 0x291, 0x2bf, 0x291, +0x418, 0x3d8, 0x418, 0x3d8, 0x5f7, 0x5ad, 0x5f7, 0x5ad, 0x85d, 0x813, 0x85d, +0x813, 0x85d, 0x813, 0x986, 0x945, 0x986, 0x945, 0x9a2, 0x974, 0x9a2, 0x974, +0x921, 0x90e, 0x921, 0x90e, 0x8f5, 0x903, 0x8f5, 0x903, 0x7d3, 0x80b, 0x7d3, +0x80b, 0x703, 0x768, 0x703, 0x768, 0x703, 0x768, 0x553, 0x5e8, 0x553, 0x5e8, +0x2b6, 0x37b, 0x2b6, 0x37b, 0x77, 0x16b, 0x77, 0x16b, 0xff0d, 0x2d, 0xff0d, +0x2d, 0xfd4b, 0xfe91, 0xfd4b, 0xfe91, 0xfd4b, 0xfe91, 0xfd8f, 0xfef4, 0xfd8f, 0xfef4, +0xfd1c, 0xfe97, 0xfd1c, 0xfe97, 0xfcc9, 0xfe50, 0xfcc9, 0xfe50, 0xfde2, 0xff6a, 0xfde2, +0xff6a, 0xfee0, 0x5d, 0xfee0, 0x5d, 0xffa7, 0x10d, 0xffa7, 0x10d, 0xffa7, 0x10d, +0xff9b, 0xdf, 0xff9b, 0xdf, 0xff8f, 0xa5, 0xff8f, 0xa5, 0x6c, 0x149, 0x6c, +0x149, 0x8d, 0x129, 0x8d, 0x129, 0x16f, 0x1c2, 0x16f, 0x1c2, 0x32a, 0x32e, +0x32a, 0x32e, 0x32a, 0x32e, 0x3f1, 0x3a1, 0x3f1, 0x3a1, 0x735, 0x68f, 0x735, +0x68f, 0xa8d, 0x991, 0xa8d, 0x991, 0xbf4, 0xaa1, 0xbf4, 0xaa1, 0xc7f, 0xada, +0xc7f, 0xada, 0xc7f, 0xada, 0xe97, 0xca2, 0xe97, 0xca2, 0xfc0, 0xd80, 0xfc0, +0xd80, 0x103e, 0xdba, 0x103e, 0xdba, 0x1158, 0xe97, 0x1158, 0xe97, 0x135e, 0x1066, +0x135e, 0x1066, 0x140e, 0x10e6, 0x140e, 0x10e6, 0x140e, 0x10e6, 0x15f3, 0x12a1, 0x15f3, +0x12a1, 0x1830, 0x14bb, 0x1830, 0x14bb, 0x17d9, 0x1446, 0x17d9, 0x1446, 0x194a, 0x159f, +0x194a, 0x159f, 0x1a9a, 0x16db, 0x1a9a, 0x16db, 0x1b63, 0x1793, 0x1b63, 0x1793, 0x1b63, +0x1793, 0x1b83, 0x17a7, 0x1b83, 0x17a7, 0x1c20, 0x183a, 0x1c20, 0x183a, 0x1be8, 0x17fa, +0x1be8, 0x17fa, 0x1b87, 0x1793, 0x1b87, 0x1793, 0x1bbe, 0x17c6, 0x1bbe, 0x17c6, 0x1bbe, +0x17c6, 0x1cb3, 0x18ba, 0x1cb3, 0x18ba, 0x1bba, 0x17c2, 0x1bba, 0x17c2, 0x1b7e, 0x178b, +0x1b7e, 0x178b, 0x1b30, 0x1745, 0x1b30, 0x1745, 0x1978, 0x159a, 0x1978, 0x159a, 0x17fd, +0x1432, 0x17fd, 0x1432, 0x17fd, 0x1432, 0x16de, 0x132c, 0x16de, 0x132c, 0x16ba, 0x1327, +0x16ba, 0x1327, 0x1524, 0x11b9, 0x1524, 0x11b9, 0x14ec, 0x11b0, 0x14ec, 0x11b0, 0x1443, +0x113f, 0x1443, 0x113f, 0x132d, 0x106b, 0x132d, 0x106b, 0x132d, 0x106b, 0x10f3, 0xe79, +0x10f3, 0xe79, 0xf8d, 0xd64, 0xf8d, 0xd64, 0xca1, 0xad0, 0xca1, 0xad0, 0x9d5, +0x861, 0x9d5, 0x861, 0x82f, 0x71d, 0x82f, 0x71d, 0x82f, 0x71d, 0x4d2, 0x425, +0x4d2, 0x425, 0x190, 0x14a, 0x190, 0x14a, 0xffa3, 0xffc4, 0xffa3, 0xffc4, 0xfdd9, +0xfe5f, 0xfdd9, 0xfe5f, 0xfb75, 0xfc5c, 0xfb75, 0xfc5c, 0xfac4, 0xfc08, 0xfac4, 0xfc08, +0xfac4, 0xfc08, 0xf865, 0xf9fe, 0xf865, 0xf9fe, 0xf5fc, 0xf7e3, 0xf5fc, 0xf7e3, 0xf458, +0xf682, 0xf458, 0xf682, 0xf340, 0xf5a5, 0xf340, 0xf5a5, 0xf121, 0xf3b6, 0xf121, 0xf3b6, +0xeea5, 0xf160, 0xeea5, 0xf160, 0xeea5, 0xf160, 0xedbd, 0xf092, 0xedbd, 0xf092, 0xed79, +0xf05f, 0xed79, 0xf05f, 0xecae, 0xef9a, 0xecae, 0xef9a, 0xecd7, 0xefc1, 0xecd7, 0xefc1, +0xec74, 0xef52, 0xec74, 0xef52, 0xec74, 0xef52, 0xec7a, 0xef47, 0xec7a, 0xef47, 0xeeb9, +0xf16e, 0xeeb9, 0xf16e, 0xf154, 0xf3ec, 0xf154, 0xf3ec, 0xf243, 0xf4b8, 0xf243, 0xf4b8, +0xf2a5, 0xf4f5, 0xf2a5, 0xf4f5, 0xf4c6, 0xf6ef, 0xf4c6, 0xf6ef, 0xf4c6, 0xf6ef, 0xf571, +0xf770, 0xf571, 0xf770, 0xf5b3, 0xf786, 0xf5b3, 0xf786, 0xf6f9, 0xf8a0, 0xf6f9, 0xf8a0, +0xf888, 0xfa01, 0xf888, 0xfa01, 0xf71d, 0xf866, 0xf71d, 0xf866, 0xf83d, 0xf955, 0xf83d, +0xf955, 0xf83d, 0xf955, 0xf967, 0xfa4c, 0xf967, 0xfa4c, 0xf92c, 0xf9dc, 0xf92c, 0xf9dc, +0xfa67, 0xfae1, 0xfa67, 0xfae1, 0xfb97, 0xfbd9, 0xfb97, 0xfbd9, 0xfc5b, 0xfc65, 0xfc5b, +0xfc65, 0xfc5b, 0xfc65, 0xfd65, 0xfd33, 0xfd65, 0xfd33, 0xff2f, 0xfec2, 0xff2f, 0xfec2, +0xfff6, 0xff4e, 0xfff6, 0xff4e, 0x122, 0x3f, 0x122, 0x3f, 0x2c7, 0x1ab, 0x2c7, +0x1ab, 0x505, 0x3b4, 0x505, 0x3b4, 0x505, 0x3b4, 0x553, 0x3d1, 0x553, 0x3d1, +0x66f, 0x4c3, 0x66f, 0x4c3, 0x6ae, 0x4e0, 0x6ae, 0x4e0, 0x6e5, 0x4fe, 0x6e5, +0x4fe, 0x6ee, 0x4fa, 0x6ee, 0x4fa, 0x693, 0x49d, 0x693, 0x49d, 0x693, 0x49d, +0x5ae, 0x3c4, 0x5ae, 0x3c4, 0x485, 0x2b6, 0x485, 0x2b6, 0x3ed, 0x247, 0x3ed, +0x247, 0x302, 0x194, 0x302, 0x194, 0x1b6, 0x8e, 0x1b6, 0x8e, 0x1b6, 0x8e, +0xff7a, 0xfea6, 0xff7a, 0xfea6, 0xfe58, 0xfde3, 0xfe58, 0xfde3, 0xfc11, 0xfc07, 0xfc11, +0xfc07, 0xfa8b, 0xfaf4, 0xfa8b, 0xfaf4, 0xf8af, 0xf990, 0xf8af, 0xf990, 0xf571, 0xf6d0, +0xf571, 0xf6d0, 0xf571, 0xf6d0, 0xf1d6, 0xf3b3, 0xf1d6, 0xf3b3, 0xf06b, 0xf2c5, 0xf06b, +0xf2c5, 0xed76, 0xf048, 0xed76, 0xf048, 0xebb2, 0xeef5, 0xebb2, 0xeef5, 0xeb30, 0xeedb, +0xeb30, 0xeedb, 0xeb30, 0xeedb, 0xe87c, 0xec84, 0xe87c, 0xec84, 0xe664, 0xeabc, 0xe664, +0xeabc, 0xe4a2, 0xe93b, 0xe4a2, 0xe93b, 0xe339, 0xe805, 0xe339, 0xe805, 0xe086, 0xe576, +0xe086, 0xe576, 0xde47, 0xe34c, 0xde47, 0xe34c, 0xde47, 0xe34c, 0xdd46, 0xe250, 0xdd46, +0xe250, 0xdcc8, 0xe1cb, 0xdcc8, 0xe1cb, 0xdcf9, 0xe1e9, 0xdcf9, 0xe1e9, 0xde9f, 0xe372, +0xde9f, 0xe372, 0xdda2, 0xe24e, 0xdda2, 0xe24e, 0xdddf, 0xe25f, 0xdddf, 0xe25f, 0xdddf, +0xe25f, 0xe063, 0xe4b1, 0xe063, 0xe4b1, 0xe282, 0xe69c, 0xe282, 0xe69c, 0xe30b, 0xe6f0, +0xe30b, 0xe6f0, 0xe3db, 0xe78b, 0xe3db, 0xe78b, 0xe65c, 0xe9d8, 0xe65c, 0xe9d8, 0xe65c, +0xe9d8, 0xe831, 0xeb7b, 0xe831, 0xeb7b, 0xe917, 0xec32, 0xe917, 0xec32, 0xebab, 0xee98, +0xebab, 0xee98, 0xedc3, 0xf084, 0xedc3, 0xf084, 0xedb2, 0xf04a, 0xedb2, 0xf04a, 0xf042, +0xf2b0, 0xf042, 0xf2b0, 0xf042, 0xf2b0, 0xf149, 0xf38b, 0xf149, 0xf38b, 0xf182, 0xf398, +0xf182, 0xf398, 0xf25a, 0xf43f, 0xf25a, 0xf43f, 0xf3f8, 0xf5a7, 0xf3f8, 0xf5a7, 0xf3c9, +0xf53c, 0xf3c9, 0xf53c, 0xf4b6, 0xf5e7, 0xf4b6, 0xf5e7, 0xf4b6, 0xf5e7, 0xf6ea, 0xf7d0, +0xf6ea, 0xf7d0, 0xf870, 0xf906, 0xf870, 0xf906, 0xfa34, 0xfa71, 0xfa34, 0xfa71, 0xfda3, +0xfd81, 0xfda3, 0xfd81, 0x185, 0xff, 0x185, 0xff, 0x185, 0xff, 0x456, 0x369, +0x456, 0x369, 0x824, 0x6ce, 0x824, 0x6ce, 0xb08, 0x949, 0xb08, 0x949, 0xdf5, +0xbd2, 0xdf5, 0xbd2, 0xf7b, 0xcfb, 0xf7b, 0xcfb, 0x11d5, 0xf00, 0x11d5, 0xf00, +0x11d5, 0xf00, 0x13df, 0x10c0, 0x13df, 0x10c0, 0x164c, 0x12f2, 0x164c, 0x12f2, 0x1770, +0x13ec, 0x1770, 0x13ec, 0x188d, 0x14f0, 0x188d, 0x14f0, 0x1894, 0x14f2, 0x1894, 0x14f2, +0x16d8, 0x1346, 0x16d8, 0x1346, 0x16d8, 0x1346, 0x168c, 0x131e, 0x168c, 0x131e, 0x153b, +0x1204, 0x153b, 0x1204, 0x13a9, 0x10bc, 0x13a9, 0x10bc, 0x1231, 0xfa0, 0x1231, 0xfa0, +0xfc9, 0xda1, 0xfc9, 0xda1, 0xfc9, 0xda1, 0xdbe, 0xc0c, 0xdbe, 0xc0c, 0xc44, +0xb10, 0xc44, 0xb10, 0x8ca, 0x819, 0x8ca, 0x819, 0x6f5, 0x6c9, 0x6f5, 0x6c9, +0x4f0, 0x546, 0x4f0, 0x546, 0x2c5, 0x398, 0x2c5, 0x398, 0x2c5, 0x398, 0xe5, +0x22c, 0xe5, 0x22c, 0xff41, 0xf0, 0xff41, 0xf0, 0xfcac, 0xfeb5, 0xfcac, 0xfeb5, +0xf912, 0xfb66, 0xf912, 0xfb66, 0xf5f1, 0xf87e, 0xf5f1, 0xf87e, 0xf34f, 0xf602, 0xf34f, +0xf602, 0xf34f, 0xf602, 0xf089, 0xf350, 0xf089, 0xf350, 0xef10, 0xf1db, 0xef10, 0xf1db, +0xeda4, 0xf061, 0xeda4, 0xf061, 0xea98, 0xed38, 0xea98, 0xed38, 0xea40, 0xecb4, 0xea40, +0xecb4, 0xea40, 0xecb4, 0xeb8a, 0xedc9, 0xeb8a, 0xedc9, 0xed28, 0xef2a, 0xed28, 0xef2a, +0xedab, 0xef68, 0xedab, 0xef68, 0xef07, 0xf07c, 0xef07, 0xf07c, 0xf08b, 0xf1b7, 0xf08b, +0xf1b7, 0xf2f6, 0xf3d9, 0xf2f6, 0xf3d9, 0xf2f6, 0xf3d9, 0xf512, 0xf5ae, 0xf512, 0xf5ae, +0xf861, 0xf8bb, 0xf861, 0xf8bb, 0xfa71, 0xfa8c, 0xfa71, 0xfa8c, 0xfb92, 0xfb75, 0xfb92, +0xfb75, 0xff26, 0xfed4, 0xff26, 0xfed4, 0x140, 0xbf, 0x140, 0xbf, 0x140, 0xbf, +0x265, 0x1b8, 0x265, 0x1b8, 0x3a4, 0x2cf, 0x3a4, 0x2cf, 0x4b6, 0x3ba, 0x4b6, +0x3ba, 0x45f, 0x33d, 0x45f, 0x33d, 0x4d9, 0x38f, 0x4d9, 0x38f, 0x4d9, 0x38f, +0x53d, 0x3c9, 0x53d, 0x3c9, 0x5a7, 0x405, 0x5a7, 0x405, 0x67e, 0x4aa, 0x67e, +0x4aa, 0x9dd, 0x7d2, 0x9dd, 0x7d2, 0xc22, 0x9db, 0xc22, 0x9db, 0xe73, 0xbeb, +0xe73, 0xbeb, 0xe73, 0xbeb, 0x1153, 0xe85, 0x1153, 0xe85, 0x135c, 0x1047, 0x135c, +0x1047, 0x1519, 0x11ba, 0x1519, 0x11ba, 0x16c0, 0x1318, 0x16c0, 0x1318, 0x18e9, 0x14fb, +0x18e9, 0x14fb, 0x1a0a, 0x15db, 0x1a0a, 0x15db, 0x1a0a, 0x15db, 0x1c1f, 0x17b7, 0x1c1f, +0x17b7, 0x1cad, 0x1816, 0x1cad, 0x1816, 0x1e29, 0x196f, 0x1e29, 0x196f, 0x1e2f, 0x195f, +0x1e2f, 0x195f, 0x1d21, 0x184e, 0x1d21, 0x184e, 0x1d21, 0x184e, 0x1c76, 0x17af, 0x1c76, +0x17af, 0x1acd, 0x1626, 0x1acd, 0x1626, 0x18fd, 0x1489, 0x18fd, 0x1489, 0x17a8, 0x1378, +0x17a8, 0x1378, 0x14a5, 0x10cc, 0x14a5, 0x10cc, 0x1266, 0xef5, 0x1266, 0xef5, 0x1266, +0xef5, 0x10f6, 0xdfb, 0x10f6, 0xdfb, 0xd84, 0xb0c, 0xd84, 0xb0c, 0xbcc, 0x9e1, +0xbcc, 0x9e1, 0x93e, 0x7e8, 0x93e, 0x7e8, 0x64d, 0x58e, 0x64d, 0x58e, 0x361, +0x33c, 0x361, 0x33c, 0x361, 0x33c, 0xcd, 0x13f, 0xcd, 0x13f, 0xfead, 0xffb2, +0xfead, 0xffb2, 0xfade, 0xfc6d, 0xfade, 0xfc6d, 0xf738, 0xf948, 0xf738, 0xf948, 0xf4e3, +0xf768, 0xf4e3, 0xf768, 0xf4e3, 0xf768, 0xf115, 0xf401, 0xf115, 0xf401, 0xeeb4, 0xf1f9, +0xeeb4, 0xf1f9, 0xeb64, 0xeef3, 0xeb64, 0xeef3, 0xe739, 0xeb03, 0xe739, 0xeb03, 0xe5c6, +0xe9bb, 0xe5c6, 0xe9bb, 0xe585, 0xe998, 0xe585, 0xe998, 0xe585, 0xe998, 0xe4e8, 0xe90a, +0xe4e8, 0xe90a, 0xe390, 0xe7b6, 0xe390, 0xe7b6, 0xe28c, 0xe6ac, 0xe28c, 0xe6ac, 0xe321, +0xe731, 0xe321, 0xe731, 0xe490, 0xe889, 0xe490, 0xe889, 0xe535, 0xe910, 0xe535, 0xe910, +0xe535, 0xe910, 0xe765, 0xeb1e, 0xe765, 0xeb1e, 0xe764, 0xeaf6, 0xe764, 0xeaf6, 0xe881, +0xebe9, 0xe881, 0xebe9, 0xea4a, 0xed86, 0xea4a, 0xed86, 0xebd6, 0xeee4, 0xebd6, 0xeee4, +0xebd6, 0xeee4, 0xed17, 0xeff4, 0xed17, 0xeff4, 0xee80, 0xf12a, 0xee80, 0xf12a, 0xf10e, +0xf383, 0xf10e, 0xf383, 0xf293, 0xf4cf, 0xf293, 0xf4cf, 0xf4f3, 0xf6f3, 0xf4f3, 0xf6f3, +0xf6f8, 0xf8b8, 0xf6f8, 0xf8b8, 0xf6f8, 0xf8b8, 0xf7c3, 0xf93e, 0xf7c3, 0xf93e, 0xf8db, +0xfa0c, 0xf8db, 0xfa0c, 0xfb9b, 0xfc7d, 0xfb9b, 0xfc7d, 0xfdb3, 0xfe40, 0xfdb3, 0xfe40, +0x6a, 0x9f, 0x6a, 0x9f, 0x6a, 0x9f, 0x2f7, 0x2ce, 0x2f7, 0x2ce, 0x5ae, +0x524, 0x5ae, 0x524, 0x7a1, 0x6b4, 0x7a1, 0x6b4, 0xb0f, 0x9bd, 0xb0f, 0x9bd, +0xdea, 0xc35, 0xdea, 0xc35, 0x1058, 0xe42, 0x1058, 0xe42, 0x1058, 0xe42, 0x13c9, +0x1156, 0x13c9, 0x1156, 0x16a0, 0x13d6, 0x16a0, 0x13d6, 0x1aae, 0x1795, 0x1aae, 0x1795, +0x1cb8, 0x1959, 0x1cb8, 0x1959, 0x1e65, 0x1acc, 0x1e65, 0x1acc, 0x1f89, 0x1bc1, 0x1f89, +0x1bc1, 0x1f89, 0x1bc1, 0x1fb9, 0x1bd0, 0x1fb9, 0x1bd0, 0x1f71, 0x1b74, 0x1f71, 0x1b74, +0x1ef8, 0x1af5, 0x1ef8, 0x1af5, 0x1c8e, 0x1892, 0x1c8e, 0x1892, 0x1ba6, 0x17bd, 0x1ba6, +0x17bd, 0x1ba6, 0x17bd, 0x1a42, 0x1679, 0x1a42, 0x1679, 0x183a, 0x149b, 0x183a, 0x149b, +0x179a, 0x142e, 0x179a, 0x142e, 0x1737, 0x1405, 0x1737, 0x1405, 0x16fd, 0x140a, 0x16fd, +0x140a, 0x1564, 0x12b3, 0x1564, 0x12b3, 0x1564, 0x12b3, 0x155a, 0x12ec, 0x155a, 0x12ec, +0x141b, 0x11f1, 0x141b, 0x11f1, 0x1219, 0x102f, 0x1219, 0x102f, 0x1124, 0xf78, 0x1124, +0xf78, 0x106e, 0xefa, 0x106e, 0xefa, 0xf43, 0xe02, 0xf43, 0xe02, 0xf43, 0xe02, +0xe98, 0xd83, 0xe98, 0xd83, 0xd3b, 0xc4d, 0xd3b, 0xc4d, 0xa2b, 0x95d, 0xa2b, +0x95d, 0x8ae, 0x7f9, 0x8ae, 0x7f9, 0x903, 0x863, 0x903, 0x863, 0x903, 0x863, +0x7a5, 0x714, 0x7a5, 0x714, 0x62f, 0x5ab, 0x62f, 0x5ab, 0x523, 0x4a7, 0x523, +0x4a7, 0x551, 0x4dd, 0x551, 0x4dd, 0x496, 0x428, 0x496, 0x428, 0x377, 0x310, +0x377, 0x310, 0x377, 0x310, 0x3e7, 0x386, 0x3e7, 0x386, 0x2a0, 0x246, 0x2a0, +0x246, 0x324, 0x2d1, 0x324, 0x2d1, 0x417, 0x3cd, 0x417, 0x3cd, 0x41c, 0x3db, +0x41c, 0x3db, 0x2ee, 0x2b7, 0x2ee, 0x2b7, 0x2ee, 0x2b7, 0x30f, 0x2e1, 0x30f, +0x2e1, 0x37e, 0x357, 0x37e, 0x357, 0x37c, 0x35b, 0x37c, 0x35b, 0x33e, 0x31e, +0x33e, 0x31e, 0x3a9, 0x387, 0x3a9, 0x387, 0x3a9, 0x387, 0x32d, 0x303, 0x32d, +0x303, 0x274, 0x23e, 0x274, 0x23e, 0x335, 0x2ec, 0x335, 0x2ec, 0x2be, 0x25e, +0x2be, 0x25e, 0x2d2, 0x254, 0x2d2, 0x254, 0x365, 0x2c5, 0x365, 0x2c5, 0x365, +0x2c5, 0x4bc, 0x3f5, 0x4bc, 0x3f5, 0x50b, 0x41a, 0x50b, 0x41a, 0x6ec, 0x5cf, +0x6ec, 0x5cf, 0x844, 0x6fc, 0x844, 0x6fc, 0x9c5, 0x852, 0x9c5, 0x852, 0xb9f, +0xa06, 0xb9f, 0xa06, 0xb9f, 0xa06, 0xe3d, 0xc82, 0xe3d, 0xc82, 0x11b8, 0xfe3, +0x11b8, 0xfe3, 0x1313, 0x112b, 0x1313, 0x112b, 0x1397, 0x11a7, 0x1397, 0x11a7, 0x13f5, +0x1207, 0x13f5, 0x1207, 0x13f5, 0x1207, 0x13b2, 0x11d2, 0x13b2, 0x11d2, 0x139e, 0x11d8, +0x139e, 0x11d8, 0x1256, 0x10b6, 0x1256, 0x10b6, 0xf98, 0xe29, 0xf98, 0xe29, 0xec3, +0xd8f, 0xec3, 0xd8f, 0xc19, 0xb2a, 0xc19, 0xb2a, 0xc19, 0xb2a, 0x9e2, 0x93f, +0x9e2, 0x93f, 0x7ac, 0x75c, 0x7ac, 0x75c, 0x664, 0x66b, 0x664, 0x66b, 0x43f, +0x49e, 0x43f, 0x49e, 0x1eb, 0x2a1, 0x1eb, 0x2a1, 0xb9, 0x1c4, 0xb9, 0x1c4, +0xb9, 0x1c4, 0xfe7d, 0xffd8, 0xfe7d, 0xffd8, 0xfbbd, 0xfd61, 0xfbbd, 0xfd61, 0xf9df, +0xfbc4, 0xf9df, 0xfbc4, 0xf83e, 0xfa5c, 0xf83e, 0xfa5c, 0xf55c, 0xf7a7, 0xf55c, 0xf7a7, +0xf55c, 0xf7a7, 0xf55e, 0xf7cb, 0xf55e, 0xf7cb, 0xf387, 0xf60c, 0xf387, 0xf60c, 0xf15d, +0xf3ef, 0xf15d, 0xf3ef, 0xf0cc, 0xf360, 0xf0cc, 0xf360, 0xf08b, 0xf318, 0xf08b, 0xf318, +0xf019, 0xf297, 0xf019, 0xf297, 0xf019, 0xf297, 0xeeb3, 0xf11b, 0xeeb3, 0xf11b, 0xeeab, +0xf0f7, 0xeeab, 0xf0f7, 0xef21, 0xf14f, 0xef21, 0xf14f, 0xed62, 0xef6e, 0xed62, 0xef6e, +0xede6, 0xefcf, 0xede6, 0xefcf, 0xedcb, 0xef92, 0xedcb, 0xef92, 0xedcb, 0xef92, 0xec43, +0xede9, 0xec43, 0xede9, 0xecac, 0xee33, 0xecac, 0xee33, 0xed76, 0xeee1, 0xed76, 0xeee1, +0xee2f, 0xef82, 0xee2f, 0xef82, 0xed3e, 0xee7a, 0xed3e, 0xee7a, 0xed3e, 0xee7a, 0xedf3, +0xef1b, 0xedf3, 0xef1b, 0xee49, 0xef61, 0xee49, 0xef61, 0xedb0, 0xeeb8, 0xedb0, 0xeeb8, +0xed4d, 0xee47, 0xed4d, 0xee47, 0xed6a, 0xee56, 0xed6a, 0xee56, 0xecf7, 0xedd3, 0xecf7, +0xedd3, 0xecf7, 0xedd3, 0xedd8, 0xeea3, 0xedd8, 0xeea3, 0xeef4, 0xefad, 0xeef4, 0xefad, +0xf093, 0xf136, 0xf093, 0xf136, 0xf14e, 0xf1d8, 0xf14e, 0xf1d8, 0xf2b8, 0xf327, 0xf2b8, +0xf327, 0xf464, 0xf4b5, 0xf464, 0xf4b5, 0xf464, 0xf4b5, 0xf405, 0xf436, 0xf405, 0xf436, +0xf5a0, 0xf5b0, 0xf5a0, 0xf5b0, 0xf660, 0xf64e, 0xf660, 0xf64e, 0xf7b9, 0xf786, 0xf7b9, +0xf786, 0xf816, 0xf7c3, 0xf816, 0xf7c3, 0xf816, 0xf7c3, 0xf9bb, 0xf94d, 0xf9bb, 0xf94d, +0xfb97, 0xfb13, 0xfb97, 0xfb13, 0xfc7f, 0xfbea, 0xfc7f, 0xfbea, 0xfd47, 0xfca9, 0xfd47, +0xfca9, 0xfdf2, 0xfd54, 0xfdf2, 0xfd54, 0xff54, 0xfebf, 0xff54, 0xfebf, 0xff54, 0xfebf, +0x118, 0x96, 0x118, 0x96, 0x152, 0xed, 0x152, 0xed, 0x120, 0xe2, 0x120, +0xe2, 0x149, 0x13c, 0x149, 0x13c, 0x4a, 0x77, 0x4a, 0x77, 0xff84, 0xfff2, +0xff84, 0xfff2, 0xff84, 0xfff2, 0xfef0, 0xffa6, 0xfef0, 0xffa6, 0xfdda, 0xfedd, 0xfdda, +0xfedd, 0xfb36, 0xfc89, 0xfb36, 0xfc89, 0xfa33, 0xfbd7, 0xfa33, 0xfbd7, 0xf920, 0xfb14, +0xf920, 0xfb14, 0xf920, 0xfb14, 0xf781, 0xf9c3, 0xf781, 0xf9c3, 0xf4a9, 0xf735, 0xf4a9, +0xf735, 0xf368, 0xf637, 0xf368, 0xf637, 0xf154, 0xf45f, 0xf154, 0xf45f, 0xef22, 0xf260, +0xef22, 0xf260, 0xeef2, 0xf25a, 0xeef2, 0xf25a, 0xeef2, 0xf25a, 0xecbe, 0xf045, 0xecbe, +0xf045, 0xea53, 0xedef, 0xea53, 0xedef, 0xea99, 0xee3f, 0xea99, 0xee3f, 0xeb22, 0xeec8, +0xeb22, 0xeec8, 0xeabf, 0xee5c, 0xeabf, 0xee5c, 0xeabf, 0xee5c, 0xead1, 0xee5b, 0xead1, +0xee5b, 0xeaf8, 0xee67, 0xeaf8, 0xee67, 0xebf4, 0xef41, 0xebf4, 0xef41, 0xea4d, 0xed72, +0xea4d, 0xed72, 0xebe7, 0xeede, 0xebe7, 0xeede, 0xecef, 0xefb4, 0xecef, 0xefb4, 0xecef, +0xefb4, 0xece0, 0xef71, 0xece0, 0xef71, 0xee4e, 0xf0a8, 0xee4e, 0xf0a8, 0xef74, 0xf195, +0xef74, 0xf195, 0xf013, 0xf1fb, 0xf013, 0xf1fb, 0xf055, 0xf202, 0xf055, 0xf202, 0xf24c, +0xf3be, 0xf24c, 0xf3be, 0xf24c, 0xf3be, 0xf3b1, 0xf4e8, 0xf3b1, 0xf4e8, 0xf4e0, 0xf5db, +0xf4e0, 0xf5db, 0xf692, 0xf751, 0xf692, 0xf751, 0xf805, 0xf888, 0xf805, 0xf888, 0xf8a3, +0xf8e9, 0xf8a3, 0xf8e9, 0xf8a3, 0xf8e9, 0xfacc, 0xfad5, 0xfacc, 0xfad5, 0xfcab, 0xfc77, +0xfcab, 0xfc77, 0xfe62, 0xfdef, 0xfe62, 0xfdef, 0xffec, 0xff3b, 0xffec, 0xff3b, 0x332, +0x242, 0x332, 0x242, 0x593, 0x466, 0x593, 0x466, 0x593, 0x466, 0x75c, 0x5f3, +0x75c, 0x5f3, 0x86b, 0x6c8, 0x86b, 0x6c8, 0x99c, 0x7c3, 0x99c, 0x7c3, 0xb25, +0x918, 0xb25, 0x918, 0xc09, 0x9cf, 0xc09, 0x9cf, 0xe1b, 0xbb9, 0xe1b, 0xbb9, +0xe1b, 0xbb9, 0xdfd, 0xb7c, 0xdfd, 0xb7c, 0xe39, 0xb9e, 0xe39, 0xb9e, 0xe8e, +0xbe3, 0xe8e, 0xbe3, 0xe9e, 0xbec, 0xe9e, 0xbec, 0xe5f, 0xbb1, 0xe5f, 0xbb1, +0xe5f, 0xbb1, 0xed5, 0xc32, 0xed5, 0xc32, 0xd1d, 0xa90, 0xd1d, 0xa90, 0xc1d, +0x9ae, 0xc1d, 0x9ae, 0xbcf, 0x988, 0xbcf, 0x988, 0xa34, 0x81b, 0xa34, 0x81b, +0x929, 0x745, 0x929, 0x745, 0x929, 0x745, 0x88e, 0x6e4, 0x88e, 0x6e4, 0x816, +0x6a9, 0x816, 0x6a9, 0x727, 0x5fa, 0x727, 0x5fa, 0x6da, 0x5ee, 0x6da, 0x5ee, +0x6f4, 0x648, 0x6f4, 0x648, 0x62c, 0x5bd, 0x62c, 0x5bd, 0x62c, 0x5bd, 0x3f5, +0x3bf, 0x3f5, 0x3bf, 0x357, 0x357, 0x357, 0x357, 0x1f6, 0x226, 0x1f6, 0x226, +0x133, 0x18d, 0x133, 0x18d, 0x115, 0x192, 0x115, 0x192, 0x115, 0x192, 0xfeab, +0xff44, 0xfeab, 0xff44, 0xfce6, 0xfd94, 0xfce6, 0xfd94, 0xfd29, 0xfde7, 0xfd29, 0xfde7, +0xfcc3, 0xfd89, 0xfcc3, 0xfd89, 0xfce0, 0xfda8, 0xfce0, 0xfda8, 0xfbef, 0xfcb6, 0xfbef, +0xfcb6, 0xfbef, 0xfcb6, 0xfd83, 0xfe43, 0xfd83, 0xfe43, 0xfe01, 0xfeb7, 0xfe01, 0xfeb7, +0xfd93, 0xfe3d, 0xfd93, 0xfe3d, 0xff6c, 0x8, 0xff6c, 0x8, 0xfef4, 0xff80, 0xfef4, +0xff80, 0xffcc, 0x49, 0xffcc, 0x49, 0xffcc, 0x49, 0xff5e, 0xffca, 0xff5e, 0xffca, +0x4a, 0xa5, 0x4a, 0xa5, 0xff46, 0xff90, 0xff46, 0xff90, 0xfeb5, 0xfeef, 0xfeb5, +0xfeef, 0xff4d, 0xff76, 0xff4d, 0xff76, 0xff4d, 0xff76, 0xfe50, 0xfe67, 0xfe50, 0xfe67, +0xfdb7, 0xfdbc, 0xfdb7, 0xfdbc, 0xfddb, 0xfdcc, 0xfddb, 0xfdcc, 0xfe43, 0xfe1f, 0xfe43, +0xfe1f, 0xfe47, 0xfe0d, 0xfe47, 0xfe0d, 0xff32, 0xfede, 0xff32, 0xfede, 0xff32, 0xfede, +0x16, 0xffa8, 0x16, 0xffa8, 0x10c, 0x82, 0x10c, 0x82, 0x2ce, 0x226, 0x2ce, +0x226, 0x5d1, 0x508, 0x5d1, 0x508, 0x709, 0x621, 0x709, 0x621, 0x9b1, 0x8a9, +0x9b1, 0x8a9, 0x9b1, 0x8a9, 0xb92, 0xa6c, 0xb92, 0xa6c, 0xd77, 0xc34, 0xd77, +0xc34, 0xf01, 0xda4, 0xf01, 0xda4, 0xfde, 0xe6c, 0xfde, 0xe6c, 0x111a, 0xf99, +0x111a, 0xf99, 0x111a, 0xf99, 0x1114, 0xf8a, 0x1114, 0xf8a, 0x10c5, 0xf38, 0x10c5, +0xf38, 0x10ca, 0xf44, 0x10ca, 0xf44, 0xf77, 0xdff, 0xf77, 0xdff, 0xdbc, 0xc5b, +0xdbc, 0xc5b, 0xca5, 0xb64, 0xca5, 0xb64, 0xca5, 0xb64, 0x916, 0x7fd, 0x916, +0x7fd, 0x7fd, 0x715, 0x7fd, 0x715, 0x726, 0x675, 0x726, 0x675, 0x53f, 0x4cc, +0x53f, 0x4cc, 0x39b, 0x36a, 0x39b, 0x36a, 0x325, 0x339, 0x325, 0x339, 0x325, +0x339, 0x257, 0x2b1, 0x257, 0x2b1, 0x13a, 0x1db, 0x13a, 0x1db, 0x83, 0x16a, +0x83, 0x16a, 0x71, 0x19a, 0x71, 0x19a, 0xff40, 0xa5, 0xff40, 0xa5, 0xff40, +0xa5, 0xfc99, 0xfe34, 0xfc99, 0xfe34, 0xfbb1, 0xfd7c, 0xfbb1, 0xfd7c, 0xf902, 0xfaf5, +0xf902, 0xfaf5, 0xf75d, 0xf96e, 0xf75d, 0xf96e, 0xf673, 0xf899, 0xf673, 0xf899, 0xf32e, +0xf561, 0xf32e, 0xf561, 0xf32e, 0xf561, 0xf103, 0xf33b, 0xf103, 0xf33b, 0xf01a, 0xf24d, +0xf01a, 0xf24d, 0xf098, 0xf2bf, 0xf098, 0xf2bf, 0xf0d1, 0xf2e5, 0xf0d1, 0xf2e5, 0xef90, +0xf18c, 0xef90, 0xf18c, 0xf1bf, 0xf39e, 0xf1bf, 0xf39e, 0xf1bf, 0xf39e, 0xf23d, 0xf3fb, +0xf23d, 0xf3fb, 0xf302, 0xf49c, 0xf302, 0xf49c, 0xf496, 0xf60b, 0xf496, 0xf60b, 0xf500, +0xf64e, 0xf500, 0xf64e, 0xf597, 0xf6be, 0xf597, 0xf6be, 0xf597, 0xf6be, 0xf6eb, 0xf7eb, +0xf6eb, 0xf7eb, 0xf8ab, 0xf983, 0xf8ab, 0xf983, 0xf898, 0xf948, 0xf898, 0xf948, 0xf8f7, +0xf97e, 0xf8f7, 0xf97e, 0xf98f, 0xf9ec, 0xf98f, 0xf9ec, 0xfa2b, 0xfa5c, 0xfa2b, 0xfa5c, +0xfa2b, 0xfa5c, 0xf931, 0xf935, 0xf931, 0xf935, 0xf9a9, 0xf97d, 0xf9a9, 0xf97d, 0xf9b3, +0xf952, 0xf9b3, 0xf952, 0xfa42, 0xf9a9, 0xfa42, 0xf9a9, 0xfbba, 0xfae4, 0xfbba, 0xfae4, +0xfdec, 0xfcd4, 0xfdec, 0xfcd4, 0xfdec, 0xfcd4, 0xff3f, 0xfde2, 0xff3f, 0xfde2, 0x21b, +0x74, 0x21b, 0x74, 0x5b0, 0x3bb, 0x5b0, 0x3bb, 0x72c, 0x4e7, 0x72c, 0x4e7, +0xa05, 0x76d, 0xa05, 0x76d, 0xa05, 0x76d, 0xba8, 0x8be, 0xba8, 0x8be, 0xf05, +0xbc9, 0xf05, 0xbc9, 0x1230, 0xea6, 0x1230, 0xea6, 0x155d, 0x1188, 0x155d, 0x1188, +0x1870, 0x1458, 0x1870, 0x1458, 0x1b31, 0x16dc, 0x1b31, 0x16dc, 0x1b31, 0x16dc, 0x1d47, +0x18c0, 0x1d47, 0x18c0, 0x1f4e, 0x1a9f, 0x1f4e, 0x1a9f, 0x205b, 0x1b90, 0x205b, 0x1b90, +0x2194, 0x1cb9, 0x2194, 0x1cb9, 0x21d8, 0x1cfa, 0x21d8, 0x1cfa, 0x21d8, 0x1cfa, 0x201e, +0x1b4a, 0x201e, 0x1b4a, 0x2015, 0x1b58, 0x2015, 0x1b58, 0x1f5a, 0x1abf, 0x1f5a, 0x1abf, +0x1dbd, 0x194f, 0x1dbd, 0x194f, 0x1c3d, 0x1807, 0x1c3d, 0x1807, 0x1b85, 0x178e, 0x1b85, +0x178e, 0x1b85, 0x178e, 0x1a9d, 0x16ec, 0x1a9d, 0x16ec, 0x1a49, 0x16e2, 0x1a49, 0x16e2, +0x19e4, 0x16c9, 0x19e4, 0x16c9, 0x1a30, 0x1763, 0x1a30, 0x1763, 0x18b3, 0x1633, 0x18b3, +0x1633, 0x184b, 0x1615, 0x184b, 0x1615, 0x184b, 0x1615, 0x182c, 0x163d, 0x182c, 0x163d, +0x1557, 0x13ab, 0x1557, 0x13ab, 0x1459, 0x12ea, 0x1459, 0x12ea, 0x1298, 0x1162, 0x1298, +0x1162, 0xf01, 0xdfd, 0xf01, 0xdfd, 0xf01, 0xdfd, 0xc5e, 0xb87, 0xc5e, 0xb87, +0xa87, 0x9d9, 0xa87, 0x9d9, 0x9d4, 0x94a, 0x9d4, 0x94a, 0x77a, 0x711, 0x77a, +0x711, 0x564, 0x51a, 0x564, 0x51a, 0x5d9, 0x5ac, 0x5d9, 0x5ac, 0x5d9, 0x5ac, +0x36c, 0x35d, 0x36c, 0x35d, 0x1b7, 0x1c5, 0x1b7, 0x1c5, 0x106, 0x132, 0x106, +0x132, 0xff50, 0xff9b, 0xff50, 0xff9b, 0xfd22, 0xfd90, 0xfd22, 0xfd90, 0xfd82, 0xfe13, +0xfd82, 0xfe13, 0xfd82, 0xfe13, 0xfe38, 0xfeed, 0xfe38, 0xfeed, 0xfd54, 0xfe2e, 0xfd54, +0xfe2e, 0xfcd6, 0xfdd5, 0xfcd6, 0xfdd5, 0xfd48, 0xfe6b, 0xfd48, 0xfe6b, 0xfc9e, 0xfde1, +0xfc9e, 0xfde1, 0xfc9e, 0xfde1, 0xfb8c, 0xfced, 0xfb8c, 0xfced, 0xfb28, 0xfca3, 0xfb28, +0xfca3, 0xfa2c, 0xfbb9, 0xfa2c, 0xfbb9, 0xf8c5, 0xfa5f, 0xf8c5, 0xfa5f, 0xf7a7, 0xf944, +0xf7a7, 0xf944, 0xf847, 0xf9e0, 0xf847, 0xf9e0, 0xf847, 0xf9e0, 0xf68f, 0xf81b, 0xf68f, +0xf81b, 0xf77f, 0xf8f6, 0xf77f, 0xf8f6, 0xf83d, 0xf995, 0xf83d, 0xf995, 0xf8a0, 0xf9d3, +0xf8a0, 0xf9d3, 0xf9c5, 0xfacb, 0xf9c5, 0xfacb, 0xfab3, 0xfb88, 0xfab3, 0xfb88, 0xfab3, +0xfb88, 0xfcd2, 0xfd70, 0xfcd2, 0xfd70, 0xfeb5, 0xff1b, 0xfeb5, 0xff1b, 0xcc, 0xfa, +0xcc, 0xfa, 0x270, 0x266, 0x270, 0x266, 0x41f, 0x3e2, 0x41f, 0x3e2, 0x41f, +0x3e2, 0x595, 0x529, 0x595, 0x529, 0x6c1, 0x62c, 0x6c1, 0x62c, 0x664, 0x5af, +0x664, 0x5af, 0x749, 0x67b, 0x749, 0x67b, 0x616, 0x538, 0x616, 0x538, 0x571, +0x48d, 0x571, 0x48d, 0x571, 0x48d, 0x505, 0x423, 0x505, 0x423, 0x390, 0x2b9, +0x390, 0x2b9, 0x23a, 0x176, 0x23a, 0x176, 0x92, 0xffe6, 0x92, 0xffe6, 0xff95, +0xff06, 0xff95, 0xff06, 0xfe88, 0xfe19, 0xfe88, 0xfe19, 0xfe88, 0xfe19, 0xfda3, 0xfd56, +0xfda3, 0xfd56, 0xfd65, 0xfd3a, 0xfd65, 0xfd3a, 0xfe2e, 0xfe25, 0xfe2e, 0xfe25, 0xfce1, +0xfcf6, 0xfce1, 0xfcf6, 0xfcfa, 0xfd2a, 0xfcfa, 0xfd2a, 0xfcfa, 0xfd2a, 0xfca4, 0xfcea, +0xfca4, 0xfcea, 0xfad2, 0xfb28, 0xfad2, 0xfb28, 0xfb2c, 0xfb8e, 0xfb2c, 0xfb8e, 0xfaef, +0xfb58, 0xfaef, 0xfb58, 0xf947, 0xf9b3, 0xf947, 0xf9b3, 0xf8a7, 0xf912, 0xf8a7, 0xf912, +0xf8a7, 0xf912, 0xf7ce, 0xf837, 0xf7ce, 0xf837, 0xf743, 0xf7a7, 0xf743, 0xf7a7, 0xf49b, +0xf4fc, 0xf49b, 0xf4fc, 0xf33d, 0xf39d, 0xf33d, 0xf39d, 0xf374, 0xf3d6, 0xf374, 0xf3d6, +0xf1a2, 0xf20b, 0xf1a2, 0xf20b, 0xf1a2, 0xf20b, 0xf157, 0xf1cd, 0xf157, 0xf1cd, 0xf126, +0xf1ae, 0xf126, 0xf1ae, 0xefe3, 0xf085, 0xefe3, 0xf085, 0xee64, 0xef27, 0xee64, 0xef27, +0xeee8, 0xefd2, 0xeee8, 0xefd2, 0xeee8, 0xefd2, 0xef1d, 0xf033, 0xef1d, 0xf033, 0xedd0, +0xef18, 0xedd0, 0xef18, 0xeddd, 0xef5b, 0xeddd, 0xef5b, 0xee3e, 0xeff2, 0xee3e, 0xeff2, +0xece1, 0xeecb, 0xece1, 0xeecb, 0xecd5, 0xeef4, 0xecd5, 0xeef4, 0xecd5, 0xeef4, 0xebf3, +0xee42, 0xebf3, 0xee42, 0xeb36, 0xedaf, 0xeb36, 0xedaf, 0xe989, 0xec25, 0xe989, 0xec25, +0xe915, 0xebcc, 0xe915, 0xebcc, 0xe931, 0xebf8, 0xe931, 0xebf8, 0xe7fd, 0xeac9, 0xe7fd, +0xeac9, 0xe7fd, 0xeac9, 0xe925, 0xebec, 0xe925, 0xebec, 0xe9f0, 0xeca7, 0xe9f0, 0xeca7, +0xeba5, 0xee42, 0xeba5, 0xee42, 0xec65, 0xeedf, 0xec65, 0xeedf, 0xee1c, 0xf06b, 0xee1c, +0xf06b, 0xee1c, 0xf06b, 0xef60, 0xf17f, 0xef60, 0xf17f, 0xf087, 0xf272, 0xf087, 0xf272, +0xf27a, 0xf430, 0xf27a, 0xf430, 0xf4cd, 0xf64f, 0xf4cd, 0xf64f, 0xf5ef, 0xf741, 0xf5ef, +0xf741, 0xf7e3, 0xf90a, 0xf7e3, 0xf90a, 0xf7e3, 0xf90a, 0xf8bb, 0xf9bd, 0xf8bb, 0xf9bd, +0xf96b, 0xfa51, 0xf96b, 0xfa51, 0xfb53, 0xfc25, 0xfb53, 0xfc25, 0xfa2b, 0xfaf4, 0xfa2b, +0xfaf4, 0xfa5c, 0xfb25, 0xfa5c, 0xfb25, 0xfa25, 0xfaf8, 0xfa25, 0xfaf8, 0xfa25, 0xfaf8, +0xf98f, 0xfa75, 0xf98f, 0xfa75, 0xf87e, 0xf97d, 0xf87e, 0xf97d, 0xf7db, 0xf8f9, 0xf7db, +0xf8f9, 0xf6ce, 0xf80e, 0xf6ce, 0xf80e, 0xf6a8, 0xf80b, 0xf6a8, 0xf80b, 0xf6a8, 0xf80b, +0xf54b, 0xf6cf, 0xf54b, 0xf6cf, 0xf464, 0xf606, 0xf464, 0xf606, 0xf490, 0xf64a, 0xf490, +0xf64a, 0xf381, 0xf54c, 0xf381, 0xf54c, 0xf4af, 0xf680, 0xf4af, 0xf680, 0xf55a, 0xf728, +0xf55a, 0xf728, 0xf55a, 0xf728, 0xf539, 0xf6f9, 0xf539, 0xf6f9, 0xf6d4, 0xf87b, 0xf6d4, +0xf87b, 0xf7c4, 0xf946, 0xf7c4, 0xf946, 0xf848, 0xf99c, 0xf848, 0xf99c, 0xf951, 0xfa6e, +0xf951, 0xfa6e, 0xfae8, 0xfbc7, 0xfae8, 0xfbc7, 0xfae8, 0xfbc7, 0xfd8f, 0xfe2b, 0xfd8f, +0xfe2b, 0xfd3e, 0xfd95, 0xfd3e, 0xfd95, 0xff58, 0xff6a, 0xff58, 0xff6a, 0x54, 0x23, +0x54, 0x23, 0xa0, 0x32, 0xa0, 0x32, 0xa0, 0x32, 0x134, 0x90, 0x134, +0x90, 0x19f, 0xcf, 0x19f, 0xcf, 0x24b, 0x158, 0x24b, 0x158, 0x1cc, 0xc4, +0x1cc, 0xc4, 0x2cb, 0x1b9, 0x2cb, 0x1b9, 0x2a4, 0x194, 0x2a4, 0x194, 0x2a4, +0x194, 0x213, 0x110, 0x213, 0x110, 0x1db, 0xf1, 0x1db, 0xf1, 0x277, 0x1af, +0x277, 0x1af, 0x1e3, 0x143, 0x1e3, 0x143, 0x1dc, 0x169, 0x1dc, 0x169, 0x1dc, +0x169, 0x108, 0xc3, 0x108, 0xc3, 0xb0, 0x9b, 0xb0, 0x9b, 0xe, 0x24, +0xe, 0x24, 0xff74, 0xffb1, 0xff74, 0xffb1, 0xfedd, 0xff3a, 0xfedd, 0xff3a, 0xfe0c, +0xfe80, 0xfe0c, 0xfe80, 0xfe0c, 0xfe80, 0xfe0a, 0xfe8c, 0xfe0a, 0xfe8c, 0xfdc5, 0xfe49, +0xfdc5, 0xfe49, 0xfde5, 0xfe5f, 0xfde5, 0xfe5f, 0xfc63, 0xfcca, 0xfc63, 0xfcca, 0xfc23, +0xfc6d, 0xfc23, 0xfc6d, 0xfc75, 0xfc99, 0xfc75, 0xfc99, 0xfc75, 0xfc99, 0xfcc4, 0xfcbb, +0xfcc4, 0xfcbb, 0xfe2a, 0xfdf0, 0xfe2a, 0xfdf0, 0xffe3, 0xff75, 0xffe3, 0xff75, 0xb4, +0x13, 0xb4, 0x13, 0x320, 0x24e, 0x320, 0x24e, 0x320, 0x24e, 0x3dd, 0x2df, +0x3dd, 0x2df, 0x52a, 0x408, 0x52a, 0x408, 0x726, 0x5e7, 0x726, 0x5e7, 0x6e6, +0x595, 0x6e6, 0x595, 0x7da, 0x683, 0x7da, 0x683, 0x7d7, 0x684, 0x7d7, 0x684, +0x7d7, 0x684, 0x7e2, 0x6a0, 0x7e2, 0x6a0, 0x770, 0x648, 0x770, 0x648, 0x710, +0x60c, 0x710, 0x60c, 0x705, 0x62d, 0x705, 0x62d, 0x6b8, 0x612, 0x6b8, 0x612, +0x64f, 0x5df, 0x64f, 0x5df, 0x64f, 0x5df, 0x640, 0x606, 0x640, 0x606, 0x5fb, +0x5f7, 0x5fb, 0x5f7, 0x51a, 0x548, 0x51a, 0x548, 0x592, 0x5ec, 0x592, 0x5ec, +0x502, 0x581, 0x502, 0x581, 0x502, 0x581, 0x3db, 0x476, 0x3db, 0x476, 0x41b, +0x4c7, 0x41b, 0x4c7, 0x3f4, 0x4a7, 0x3f4, 0x4a7, 0x350, 0x3fe, 0x350, 0x3fe, +0x262, 0x300, 0x262, 0x300, 0x3a0, 0x425, 0x3a0, 0x425, 0x3a0, 0x425, 0x498, +0x4fd, 0x498, 0x4fd, 0x4f1, 0x52d, 0x4f1, 0x52d, 0x641, 0x650, 0x641, 0x650, +0x7af, 0x790, 0x7af, 0x790, 0x84f, 0x800, 0x84f, 0x800, 0x856, 0x7db, 0x856, +0x7db, 0x856, 0x7db, 0x99f, 0x8fc, 0x99f, 0x8fc, 0xa09, 0x943, 0xa09, 0x943, +0xa34, 0x954, 0xa34, 0x954, 0xaeb, 0x9fb, 0xaeb, 0x9fb, 0xc55, 0xb5e, 0xc55, +0xb5e, 0xc55, 0xb5e, 0xbf8, 0xb05, 0xbf8, 0xb05, 0xc04, 0xb1f, 0xc04, 0xb1f, +0xbea, 0xb1e, 0xbea, 0xb1e, 0xa84, 0x9da, 0xa84, 0x9da, 0x82f, 0x7af, 0x82f, +0x7af, 0x6e6, 0x695, 0x6e6, 0x695, 0x6e6, 0x695, 0x620, 0x605, 0x620, 0x605, +0x43a, 0x456, 0x43a, 0x456, 0x359, 0x3ad, 0x359, 0x3ad, 0x1a7, 0x232, 0x1a7, +0x232, 0xd4, 0x193, 0xd4, 0x193, 0xff84, 0x73, 0xff84, 0x73, 0xff84, 0x73, +0xff27, 0x40, 0xff27, 0x40, 0xff07, 0x43, 0xff07, 0x43, 0xfdb8, 0xff11, 0xfdb8, +0xff11, 0xfd4c, 0xfeba, 0xfd4c, 0xfeba, 0xfd3d, 0xfeba, 0xfd3d, 0xfeba, 0xfd3d, 0xfeba, +0xfbe8, 0xfd6d, 0xfbe8, 0xfd6d, 0xfc36, 0xfdbe, 0xfc36, 0xfdbe, 0xfbde, 0xfd64, 0xfbde, +0xfd64, 0xfbd4, 0xfd55, 0xfbd4, 0xfd55, 0xfc7d, 0xfdf7, 0xfc7d, 0xfdf7, 0xfabd, 0xfc30, +0xfabd, 0xfc30, 0xfabd, 0xfc30, 0xfaea, 0xfc55, 0xfaea, 0xfc55, 0xfa73, 0xfbd8, 0xfa73, +0xfbd8, 0xf90e, 0xfa70, 0xf90e, 0xfa70, 0xf84b, 0xf9ad, 0xf84b, 0xf9ad, 0xf83c, 0xf9a2, +0xf83c, 0xf9a2, 0xf7b9, 0xf925, 0xf7b9, 0xf925, 0xf7b9, 0xf925, 0xf68c, 0xf800, 0xf68c, +0xf800, 0xf5fa, 0xf77a, 0xf5fa, 0xf77a, 0xf66d, 0xf7f8, 0xf66d, 0xf7f8, 0xf59d, 0xf734, +0xf59d, 0xf734, 0xf5f8, 0xf79a, 0xf5f8, 0xf79a, 0xf5f8, 0xf79a, 0xf6e9, 0xf892, 0xf6e9, +0xf892, 0xf717, 0xf8c3, 0xf717, 0xf8c3, 0xf73f, 0xf8e8, 0xf73f, 0xf8e8, 0xf7ad, 0xf94e, +0xf7ad, 0xf94e, 0xf7a6, 0xf935, 0xf7a6, 0xf935, 0xf736, 0xf8aa, 0xf736, 0xf8aa, 0xf736, +0xf8aa, 0xf7f8, 0xf949, 0xf7f8, 0xf949, 0xf7c4, 0xf8e7, 0xf7c4, 0xf8e7, 0xf745, 0xf832, +0xf745, 0xf832, 0xf64a, 0xf6f7, 0xf64a, 0xf6f7, 0xf800, 0xf867, 0xf800, 0xf867, 0xf8b0, +0xf8c9, 0xf8b0, 0xf8c9, 0xf8b0, 0xf8c9, 0xf99f, 0xf965, 0xf99f, 0xf965, 0xfbc9, 0xfb38, +0xfbc9, 0xfb38, 0xfe5a, 0xfd71, 0xfe5a, 0xfd71, 0x8c, 0xff4a, 0x8c, 0xff4a, 0x30f, +0x176, 0x30f, 0x176, 0x30f, 0x176, 0x6dd, 0x4f1, 0x6dd, 0x4f1, 0x8c7, 0x68c, +0x8c7, 0x68c, 0xa31, 0x7ad, 0xa31, 0x7ad, 0xc3d, 0x976, 0xc3d, 0x976, 0xe15, +0xb12, 0xe15, 0xb12, 0xe31, 0xafb, 0xe31, 0xafb, 0xe31, 0xafb, 0x1087, 0xd25, +0x1087, 0xd25, 0x11fb, 0xe75, 0x11fb, 0xe75, 0x12c3, 0xf1f, 0x12c3, 0xf1f, 0x1258, +0xe9d, 0x1258, 0xe9d, 0x1374, 0xfa8, 0x1374, 0xfa8, 0x1383, 0xfa9, 0x1383, 0xfa9, +0x1383, 0xfa9, 0x133c, 0xf58, 0x133c, 0xf58, 0x1427, 0x103c, 0x1427, 0x103c, 0x13d8, +0xfe9, 0x13d8, 0xfe9, 0x1560, 0x116e, 0x1560, 0x116e, 0x15c5, 0x11d1, 0x15c5, 0x11d1, +0x15c5, 0x11d1, 0x17bf, 0x13ca, 0x17bf, 0x13ca, 0x1822, 0x142d, 0x1822, 0x142d, 0x1830, +0x143c, 0x1830, 0x143c, 0x1912, 0x1521, 0x1912, 0x1521, 0x1a02, 0x1617, 0x1a02, 0x1617, +0x19ab, 0x15ca, 0x19ab, 0x15ca, 0x19ab, 0x15ca, 0x1a7b, 0x16a8, 0x1a7b, 0x16a8, 0x1a78, +0x16b8, 0x1a78, 0x16b8, 0x1a2e, 0x1689, 0x1a2e, 0x1689, 0x1b23, 0x17a0, 0x1b23, 0x17a0, +0x19cd, 0x1674, 0x19cd, 0x1674, 0x19b8, 0x1692, 0x19b8, 0x1692, 0x19b8, 0x1692, 0x17ba, +0x14cf, 0x17ba, 0x14cf, 0x1628, 0x1380, 0x1628, 0x1380, 0x1410, 0x11b3, 0x1410, 0x11b3, +0x120e, 0x1004, 0x120e, 0x1004, 0x1038, 0xe87, 0x1038, 0xe87, 0x1038, 0xe87, 0xdc9, +0xc74, 0xdc9, 0xc74, 0xc92, 0xb9c, 0xc92, 0xb9c, 0xba2, 0xb0c, 0xba2, 0xb0c, +0x9f4, 0x9bc, 0x9f4, 0x9bc, 0x86a, 0x88d, 0x86a, 0x88d, 0x844, 0x8bc, 0x844, +0x8bc, 0x844, 0x8bc, 0x5c2, 0x687, 0x5c2, 0x687, 0x3d9, 0x4e2, 0x3d9, 0x4e2, +0x2fc, 0x43d, 0x2fc, 0x43d, 0xf8, 0x266, 0xf8, 0x266, 0xff30, 0xbd, 0xff30, +0xbd, 0xff30, 0xbd, 0xfe62, 0x2, 0xfe62, 0x2, 0xfdb3, 0xff59, 0xfdb3, 0xff59, +0xfb67, 0xfd06, 0xfb67, 0xfd06, 0xf994, 0xfb20, 0xf994, 0xfb20, 0xf9c2, 0xfb32, 0xf9c2, +0xfb32, 0xf8df, 0xfa2a, 0xf8df, 0xfa2a, 0xf8df, 0xfa2a, 0xf803, 0xf921, 0xf803, 0xf921, +0xf94f, 0xfa3c, 0xf94f, 0xfa3c, 0xf9dc, 0xfa96, 0xf9dc, 0xfa96, 0xfa33, 0xfab8, 0xfa33, +0xfab8, 0xfb99, 0xfbea, 0xfb99, 0xfbea, 0xfda8, 0xfdc8, 0xfda8, 0xfdc8, 0xfda8, 0xfdc8, +0xff06, 0xfef9, 0xff06, 0xfef9, 0xffeb, 0xffb6, 0xffeb, 0xffb6, 0x243, 0x1ed, 0x243, +0x1ed, 0x335, 0x2c4, 0x335, 0x2c4, 0x3d3, 0x34d, 0x3d3, 0x34d, 0x3d3, 0x34d, +0x527, 0x492, 0x527, 0x492, 0x57b, 0x4de, 0x57b, 0x4de, 0x4e8, 0x447, 0x4e8, +0x447, 0x4ba, 0x418, 0x4ba, 0x418, 0x4cf, 0x430, 0x4cf, 0x430, 0x312, 0x275, +0x312, 0x275, 0x312, 0x275, 0x1cf, 0x135, 0x1cf, 0x135, 0xb9, 0x21, 0xb9, +0x21, 0xff62, 0xfec9, 0xff62, 0xfec9, 0xfec7, 0xfe2a, 0xfec7, 0xfe2a, 0xff05, 0xfe62, +0xff05, 0xfe62, 0xff6b, 0xfebd, 0xff6b, 0xfebd, 0xff6b, 0xfebd, 0xfec5, 0xfe0a, 0xfec5, +0xfe0a, 0xfe72, 0xfda6, 0xfe72, 0xfda6, 0xffab, 0xfecd, 0xffab, 0xfecd, 0x46, 0xff56, +0x46, 0xff56, 0x10c, 0x9, 0x10c, 0x9, 0x10c, 0x9, 0x2b2, 0x19f, 0x2b2, +0x19f, 0x2d8, 0x1b9, 0x2d8, 0x1b9, 0x3d1, 0x2ab, 0x3d1, 0x2ab, 0x499, 0x373, +0x499, 0x373, 0x3a4, 0x286, 0x3a4, 0x286, 0x28d, 0x180, 0x28d, 0x180, 0x28d, +0x180, 0xcf, 0xffde, 0xcf, 0xffde, 0xfed5, 0xfe0b, 0xfed5, 0xfe0b, 0xfcff, 0xfc65, +0xfcff, 0xfc65, 0xfb37, 0xfad9, 0xfb37, 0xfad9, 0xf98d, 0xf975, 0xf98d, 0xf975, 0xf6ec, +0xf721, 0xf6ec, 0xf721, 0xf6ec, 0xf721, 0xf541, 0xf5cc, 0xf541, 0xf5cc, 0xf3f2, 0xf4d7, +0xf3f2, 0xf4d7, 0xf18f, 0xf2d2, 0xf18f, 0xf2d2, 0xf09b, 0xf23d, 0xf09b, 0xf23d, 0xf0cb, +0xf2ca, 0xf0cb, 0xf2ca, 0xf0cb, 0xf2ca, 0xef6f, 0xf1ca, 0xef6f, 0xf1ca, 0xee8c, 0xf13c, +0xee8c, 0xf13c, 0xee3d, 0xf13a, 0xee3d, 0xf13a, 0xec34, 0xef76, 0xec34, 0xef76, 0xeb07, +0xee84, 0xeb07, 0xee84, 0xeaf0, 0xee9b, 0xeaf0, 0xee9b, 0xeaf0, 0xee9b, 0xea3d, 0xee0c, +0xea3d, 0xee0c, 0xe869, 0xec4d, 0xe869, 0xec4d, 0xe857, 0xec45, 0xe857, 0xec45, 0xe872, +0xec5e, 0xe872, 0xec5e, 0xe700, 0xeade, 0xe700, 0xeade, 0xe65f, 0xea27, 0xe65f, 0xea27, +0xe65f, 0xea27, 0xe74b, 0xeaf3, 0xe74b, 0xeaf3, 0xe711, 0xea92, 0xe711, 0xea92, 0xe695, +0xe9e9, 0xe695, 0xe9e9, 0xe7f3, 0xeb18, 0xe7f3, 0xeb18, 0xe986, 0xec78, 0xe986, 0xec78, +0xe986, 0xec78, 0xeae5, 0xeda5, 0xeae5, 0xeda5, 0xec3d, 0xeecb, 0xec3d, 0xeecb, 0xefc2, +0xf220, 0xefc2, 0xf220, 0xf1d9, 0xf409, 0xf1d9, 0xf409, 0xf3a9, 0xf5b0, 0xf3a9, 0xf5b0, +0xf661, 0xf842, 0xf661, 0xf842, 0xf661, 0xf842, 0xf7b1, 0xf970, 0xf7b1, 0xf970, 0xf7a2, +0xf943, 0xf7a2, 0xf943, 0xf87c, 0xfa03, 0xf87c, 0xfa03, 0xf964, 0xfad4, 0xf964, 0xfad4, +0xf890, 0xf9ec, 0xf890, 0xf9ec, 0xf8c8, 0xfa11, 0xf8c8, 0xfa11, 0xf8c8, 0xfa11, 0xf7e1, +0xf91a, 0xf7e1, 0xf91a, 0xf779, 0xf8a2, 0xf779, 0xf8a2, 0xf80d, 0xf926, 0xf80d, 0xf926, +0xf7cb, 0xf8d5, 0xf7cb, 0xf8d5, 0xf7f0, 0xf8ea, 0xf7f0, 0xf8ea, 0xf7f0, 0xf8ea, 0xf7e8, +0xf8d3, 0xf7e8, 0xf8d3, 0xf7af, 0xf88b, 0xf7af, 0xf88b, 0xf8d1, 0xf99d, 0xf8d1, 0xf99d, +0xf900, 0xf9be, 0xf900, 0xf9be, 0xf9fa, 0xfaa9, 0xf9fa, 0xfaa9, 0xfb48, 0xfbeb, 0xfb48, +0xfbeb, 0xfb48, 0xfbeb, 0xfb72, 0xfc0a, 0xfb72, 0xfc0a, 0xfcc2, 0xfd53, 0xfcc2, 0xfd53, +0xfdb4, 0xfe40, 0xfdb4, 0xfe40, 0xfe49, 0xfed4, 0xfe49, 0xfed4, 0xfe80, 0xff0f, 0xfe80, +0xff0f, 0xfe26, 0xfebd, 0xfe26, 0xfebd, 0xfe26, 0xfebd, 0xfd9b, 0xfe3e, 0xfd9b, 0xfe3e, +0xfd2d, 0xfde0, 0xfd2d, 0xfde0, 0xfc8b, 0xfd51, 0xfc8b, 0xfd51, 0xfbb3, 0xfc90, 0xfbb3, +0xfc90, 0xf9c2, 0xfab8, 0xf9c2, 0xfab8, 0xf9c2, 0xfab8, 0xfa09, 0xfb19, 0xfa09, 0xfb19, +0xf985, 0xfab1, 0xf985, 0xfab1, 0xf7b1, 0xf8f8, 0xf7b1, 0xf8f8, 0xf7ea, 0xf94a, 0xf7ea, +0xf94a, 0xf719, 0xf892, 0xf719, 0xf892, 0xf6c4, 0xf851, 0xf6c4, 0xf851, 0xf6c4, 0xf851, +0xf791, 0xf92e, 0xf791, 0xf92e, 0xf86f, 0xfa18, 0xf86f, 0xfa18, 0xf75a, 0xf90a, 0xf75a, +0xf90a, 0xf690, 0xf842, 0xf690, 0xf842, 0xf76f, 0xf91c, 0xf76f, 0xf91c, 0xf702, 0xf8a6, +0xf702, 0xf8a6, 0xf702, 0xf8a6, 0xf5c9, 0xf75f, 0xf5c9, 0xf75f, 0xf644, 0xf7c7, 0xf644, +0xf7c7, 0xf6a7, 0xf813, 0xf6a7, 0xf813, 0xf671, 0xf7c3, 0xf671, 0xf7c3, 0xf771, 0xf8a6, +0xf771, 0xf8a6, 0xf771, 0xf8a6, 0xf808, 0xf91e, 0xf808, 0xf91e, 0xf885, 0xf97a, 0xf885, +0xf97a, 0xf9ab, 0xfa7f, 0xf9ab, 0xfa7f, 0xfa9e, 0xfb50, 0xfa9e, 0xfb50, 0xfb8e, 0xfc1d, +0xfb8e, 0xfc1d, 0xfbe9, 0xfc56, 0xfbe9, 0xfc56, 0xfbe9, 0xfc56, 0xfce6, 0xfd32, 0xfce6, +0xfd32, 0xfe17, 0xfe42, 0xfe17, 0xfe42, 0xfe74, 0xfe7d, 0xfe74, 0xfe7d, 0xff27, 0xff0e, +0xff27, 0xff0e, 0x70, 0x34, 0x70, 0x34, 0x1f3, 0x192, 0x1f3, 0x192, 0x1f3, +0x192, 0x1ec, 0x166, 0x1ec, 0x166, 0x3f3, 0x345, 0x3f3, 0x345, 0x53a, 0x463, +0x53a, 0x463, 0x5a7, 0x4a4, 0x5a7, 0x4a4, 0x74d, 0x61c, 0x74d, 0x61c, 0x74d, +0x61c, 0x721, 0x5c1, 0x721, 0x5c1, 0x756, 0x5c5, 0x756, 0x5c5, 0x8e4, 0x722, +0x8e4, 0x722, 0xa41, 0x84e, 0xa41, 0x84e, 0xabe, 0x89d, 0xabe, 0x89d, 0xb58, +0x90b, 0xb58, 0x90b, 0xb58, 0x90b, 0xbf3, 0x97e, 0xbf3, 0x97e, 0xcf3, 0xa5d, +0xcf3, 0xa5d, 0xd6d, 0xabb, 0xd6d, 0xabb, 0xe7d, 0xbb9, 0xe7d, 0xbb9, 0xee1, +0xc14, 0xee1, 0xc14, 0xee1, 0xc14, 0x1013, 0xd48, 0x1013, 0xd48, 0x11fd, 0xf3e, +0x11fd, 0xf3e, 0x1231, 0xf8b, 0x1231, 0xf8b, 0x1307, 0x1084, 0x1307, 0x1084, 0x1353, +0x10fe, 0x1353, 0x10fe, 0x12da, 0x10be, 0x12da, 0x10be, 0x12da, 0x10be, 0x11c6, 0xfed, +0x11c6, 0xfed, 0x1007, 0xe78, 0x1007, 0xe78, 0xee1, 0xda1, 0xee1, 0xda1, 0xcbf, +0xbd3, 0xcbf, 0xbd3, 0x9c2, 0x92c, 0x9c2, 0x92c, 0x957, 0x916, 0x957, 0x916, +0x957, 0x916, 0x74d, 0x760, 0x74d, 0x760, 0x469, 0x4ca, 0x469, 0x4ca, 0x320, +0x3c9, 0x320, 0x3c9, 0xef, 0x1d7, 0xef, 0x1d7, 0xfec0, 0xffde, 0xfec0, 0xffde, +0xfec0, 0xffde, 0xfdbc, 0xff05, 0xfdbc, 0xff05, 0xfccf, 0xfe37, 0xfccf, 0xfe37, 0xfb5b, +0xfcd6, 0xfb5b, 0xfcd6, 0xfa32, 0xfbb4, 0xfa32, 0xfbb4, 0xfabd, 0xfc3c, 0xfabd, 0xfc3c, +0xfb1a, 0xfc8b, 0xfb1a, 0xfc8b, 0xfb1a, 0xfc8b, 0xfa03, 0xfb5c, 0xfa03, 0xfb5c, 0xfaa6, +0xfbe1, 0xfaa6, 0xfbe1, 0xfa07, 0xfb1d, 0xfa07, 0xfb1d, 0xf95a, 0xfa48, 0xf95a, 0xfa48, +0xfa52, 0xfb17, 0xfa52, 0xfb17, 0xfa8f, 0xfb29, 0xfa8f, 0xfb29, 0xfa8f, 0xfb29, 0xfa01, +0xfa72, 0xfa01, 0xfa72, 0xfa8c, 0xfad7, 0xfa8c, 0xfad7, 0xfb6b, 0xfb95, 0xfb6b, 0xfb95, +0xfb7c, 0xfb8a, 0xfb7c, 0xfb8a, 0xfbe1, 0xfbd8, 0xfbe1, 0xfbd8, 0xfbe1, 0xfbd8, 0xfc0b, +0xfbf3, 0xfc0b, 0xfbf3, 0xfc4f, 0xfc2c, 0xfc4f, 0xfc2c, 0xfc73, 0xfc4a, 0xfc73, 0xfc4a, +0xfc59, 0xfc2e, 0xfc59, 0xfc2e, 0xfc4b, 0xfc22, 0xfc4b, 0xfc22, 0xfcd0, 0xfcac, 0xfcd0, +0xfcac, 0xfcd0, 0xfcac, 0xfc9b, 0xfc7b, 0xfc9b, 0xfc7b, 0xfd45, 0xfd29, 0xfd45, 0xfd29, +0xfdbf, 0xfda5, 0xfdbf, 0xfda5, 0xfea0, 0xfe83, 0xfea0, 0xfe83, 0xff5a, 0xff36, 0xff5a, +0xff36, 0xfea7, 0xfe76, 0xfea7, 0xfe76, 0xfea7, 0xfe76, 0xff03, 0xfec1, 0xff03, 0xfec1, +0xffb6, 0xff5a, 0xffb6, 0xff5a, 0xab, 0x31, 0xab, 0x31, 0x7a, 0xffdc, 0x7a, +0xffdc, 0x159, 0x93, 0x159, 0x93, 0x159, 0x93, 0x248, 0x156, 0x248, 0x156, +0x2c6, 0x1a6, 0x2c6, 0x1a6, 0x410, 0x2c3, 0x410, 0x2c3, 0x546, 0x3cd, 0x546, +0x3cd, 0x54e, 0x3ad, 0x54e, 0x3ad, 0x6d2, 0x50d, 0x6d2, 0x50d, 0x6d2, 0x50d, +0x86e, 0x68d, 0x86e, 0x68d, 0x817, 0x622, 0x817, 0x622, 0x8db, 0x6dc, 0x8db, +0x6dc, 0x81d, 0x61d, 0x81d, 0x61d, 0x827, 0x632, 0x827, 0x632, 0x7b0, 0x5d2, +0x7b0, 0x5d2, 0x7b0, 0x5d2, 0x6c4, 0x506, 0x6c4, 0x506, 0x613, 0x47f, 0x613, +0x47f, 0x507, 0x3a5, 0x507, 0x3a5, 0x3f7, 0x2ce, 0x3f7, 0x2ce, 0x32b, 0x241, +0x32b, 0x241, 0x32b, 0x241, 0x12d, 0x84, 0x12d, 0x84, 0xfec2, 0xfe5b, 0xfec2, +0xfe5b, 0xfe78, 0xfe53, 0xfe78, 0xfe53, 0xfc80, 0xfc98, 0xfc80, 0xfc98, 0xfb5f, 0xfbae, +0xfb5f, 0xfbae, 0xfa80, 0xfaff, 0xfa80, 0xfaff, 0xfa80, 0xfaff, 0xf9d0, 0xfa75, 0xf9d0, +0xfa75, 0xf82a, 0xf8e9, 0xf82a, 0xf8e9, 0xf765, 0xf833, 0xf765, 0xf833, 0xf6ed, 0xf7bd, +0xf6ed, 0xf7bd, 0xf5de, 0xf6a3, 0xf5de, 0xf6a3, 0xf5fd, 0xf6aa, 0xf5fd, 0xf6aa, 0xf5fd, +0xf6aa, 0xf6b2, 0xf73b, 0xf6b2, 0xf73b, 0xf7a8, 0xf801, 0xf7a8, 0xf801, 0xf867, 0xf886, +0xf867, 0xf886, 0xfb77, 0xfb53, 0xfb77, 0xfb53, 0xfc5a, 0xfbec, 0xfc5a, 0xfbec, 0xfc5a, +0xfbec, 0xfe0c, 0xfd50, 0xfe0c, 0xfd50, 0xad, 0xff9d, 0xad, 0xff9d, 0x360, 0x1fc, +0x360, 0x1fc, 0x600, 0x448, 0x600, 0x448, 0x8e3, 0x6da, 0x8e3, 0x6da, 0xb30, +0x8d7, 0xb30, 0x8d7, 0xb30, 0x8d7, 0xd87, 0xae4, 0xd87, 0xae4, 0x103a, 0xd53, +0x103a, 0xd53, 0x11b6, 0xe90, 0x11b6, 0xe90, 0x139e, 0x1042, 0x139e, 0x1042, 0x135a, +0xfce, 0x135a, 0xfce, 0x1442, 0x108d, 0x1442, 0x108d, 0x1442, 0x108d, 0x1470, 0x1099, +0x1470, 0x1099, 0x14c8, 0x10d6, 0x14c8, 0x10d6, 0x150f, 0x110a, 0x150f, 0x110a, 0x15f3, +0x11df, 0x15f3, 0x11df, 0x167d, 0x1261, 0x167d, 0x1261, 0x167d, 0x1261, 0x17be, 0x139e, +0x17be, 0x139e, 0x1954, 0x1534, 0x1954, 0x1534, 0x1a58, 0x163e, 0x1a58, 0x163e, 0x1bd5, +0x17c4, 0x1bd5, 0x17c4, 0x1c4c, 0x1849, 0x1c4c, 0x1849, 0x1e43, 0x1a52, 0x1e43, 0x1a52, +0x1e43, 0x1a52, 0x1e04, 0x1a29, 0x1e04, 0x1a29, 0x1f34, 0x1b75, 0x1f34, 0x1b75, 0x1faf, +0x1c0f, 0x1faf, 0x1c0f, 0x1fa1, 0x1c27, 0x1fa1, 0x1c27, 0x2034, 0x1ce6, 0x2034, 0x1ce6, +0x1f72, 0x1c56, 0x1f72, 0x1c56, 0x1f72, 0x1c56, 0x1dcb, 0x1ae8, 0x1dcb, 0x1ae8, 0x1cd3, +0x1a30, 0x1cd3, 0x1a30, 0x1acf, 0x1872, 0x1acf, 0x1872, 0x179d, 0x158e, 0x179d, 0x158e, +0x15c6, 0x140b, 0x15c6, 0x140b, 0x15c6, 0x140b, 0x130a, 0x11aa, 0x130a, 0x11aa, 0x10de, +0xfdd, 0x10de, 0xfdd, 0xdb9, 0xd1b, 0xdb9, 0xd1b, 0xbda, 0xba2, 0xbda, 0xba2, +0x9a7, 0x9d8, 0x9a7, 0x9d8, 0x74b, 0x7e4, 0x74b, 0x7e4, 0x74b, 0x7e4, 0x499, +0x599, 0x499, 0x599, 0x222, 0x387, 0x222, 0x387, 0x4d, 0x212, 0x4d, 0x212, +0xfe1c, 0x3b, 0xfe1c, 0x3b, 0xfc33, 0xfea4, 0xfc33, 0xfea4, 0xfa6c, 0xfd28, 0xfa6c, +0xfd28, 0xfa6c, 0xfd28, 0xf821, 0xfb1e, 0xf821, 0xfb1e, 0xf54e, 0xf882, 0xf54e, 0xf882, +0xf40b, 0xf76b, 0xf40b, 0xf76b, 0xf0dc, 0xf45d, 0xf0dc, 0xf45d, 0xeeda, 0xf271, 0xeeda, +0xf271, 0xeeda, 0xf271, 0xed88, 0xf12a, 0xed88, 0xf12a, 0xec61, 0xf003, 0xec61, 0xf003, +0xeb7d, 0xef15, 0xeb7d, 0xef15, 0xebc4, 0xef49, 0xebc4, 0xef49, 0xeb86, 0xeeef, 0xeb86, +0xeeef, 0xeb22, 0xee68, 0xeb22, 0xee68, 0xeb22, 0xee68, 0xece2, 0xeffd, 0xece2, 0xeffd, +0xed81, 0xf06c, 0xed81, 0xf06c, 0xef37, 0xf1ed, 0xef37, 0xf1ed, 0xf08a, 0xf306, 0xf08a, +0xf306, 0xf20d, 0xf44c, 0xf20d, 0xf44c, 0xf20d, 0xf44c, 0xf33d, 0xf53c, 0xf33d, 0xf53c, +0xf53c, 0xf6f7, 0xf53c, 0xf6f7, 0xf650, 0xf7c6, 0xf650, 0xf7c6, 0xf7e4, 0xf912, 0xf7e4, +0xf912, 0xf9a5, 0xfa8b, 0xf9a5, 0xfa8b, 0xfa65, 0xfb00, 0xfa65, 0xfb00, 0xfa65, 0xfb00, +0xfb59, 0xfba9, 0xfb59, 0xfba9, 0xfb9e, 0xfba2, 0xfb9e, 0xfba2, 0xfc6a, 0xfc21, 0xfc6a, +0xfc21, 0xfb55, 0xfac0, 0xfb55, 0xfac0, 0xfbcd, 0xfaec, 0xfbcd, 0xfaec, 0xfbe5, 0xfaba, +0xfbe5, 0xfaba, 0xfbe5, 0xfaba, 0xfd1b, 0xfba9, 0xfd1b, 0xfba9, 0xfe79, 0xfcc2, 0xfe79, +0xfcc2, 0xffa6, 0xfdaf, 0xffa6, 0xfdaf, 0x1b4, 0xff84, 0x1b4, 0xff84, 0x3ae, 0x14b, +0x3ae, 0x14b, 0x3ae, 0x14b, 0x56c, 0x2de, 0x56c, 0x2de, 0x71a, 0x46c, 0x71a, +0x46c, 0x91e, 0x65c, 0x91e, 0x65c, 0x9a0, 0x6d5, 0x9a0, 0x6d5, 0xb30, 0x86a, +0xb30, 0x86a, 0xc26, 0x973, 0xc26, 0x973, 0xc26, 0x973, 0xcc4, 0xa32, 0xcc4, +0xa32, 0xc16, 0x9b4, 0xc16, 0x9b4, 0xbe6, 0x9c2, 0xbe6, 0x9c2, 0xa39, 0x860, +0xa39, 0x860, 0x865, 0x6e4, 0x865, 0x6e4, 0x69a, 0x57c, 0x69a, 0x57c, 0x69a, +0x57c, 0x3e4, 0x334, 0x3e4, 0x334, 0x100, 0xc4, 0x100, 0xc4, 0xfe81, 0xfebf, +0xfe81, 0xfebf, 0xfbe8, 0xfca4, 0xfbe8, 0xfca4, 0xf921, 0xfa5a, 0xf921, 0xfa5a, 0xf921, +0xfa5a, 0xf71b, 0xf8d0, 0xf71b, 0xf8d0, 0xf3f7, 0xf624, 0xf3f7, 0xf624, 0xf28a, 0xf529, +0xf28a, 0xf529, 0xefc0, 0xf2c9, 0xefc0, 0xf2c9, 0xee86, 0xf1ee, 0xee86, 0xf1ee, 0xebed, +0xefa9, 0xebed, 0xefa9, 0xebed, 0xefa9, 0xe9f2, 0xedf6, 0xe9f2, 0xedf6, 0xe7cd, 0xec0a, +0xe7cd, 0xec0a, 0xe743, 0xebad, 0xe743, 0xebad, 0xe58c, 0xea14, 0xe58c, 0xea14, 0xe2b1, +0xe74c, 0xe2b1, 0xe74c, 0xe20a, 0xe6aa, 0xe20a, 0xe6aa, 0xe20a, 0xe6aa, 0xdf4e, 0xe3e8, +0xdf4e, 0xe3e8, 0xde6e, 0xe2f8, 0xde6e, 0xe2f8, 0xdcc8, 0xe13a, 0xdcc8, 0xe13a, 0xdd0f, +0xe162, 0xdd0f, 0xe162, 0xdcb0, 0xe0dd, 0xdcb0, 0xe0dd, 0xdcb0, 0xe0dd, 0xde68, 0xe26d, +0xde68, 0xe26d, 0xdf56, 0xe32f, 0xdf56, 0xe32f, 0xe20f, 0xe5bb, 0xe20f, 0xe5bb, 0xe315, +0xe693, 0xe315, 0xe693, 0xe52c, 0xe87d, 0xe52c, 0xe87d, 0xe83b, 0xeb5e, 0xe83b, 0xeb5e, +0xe83b, 0xeb5e, 0xe86c, 0xeb62, 0xe86c, 0xeb62, 0xea75, 0xed3e, 0xea75, 0xed3e, 0xea47, +0xece3, 0xea47, 0xece3, 0xec55, 0xeec4, 0xec55, 0xeec4, 0xed1d, 0xef5d, 0xed1d, 0xef5d, +0xeef7, 0xf106, 0xeef7, 0xf106, 0xeef7, 0xf106, 0xef5b, 0xf137, 0xef5b, 0xf137, 0xf0d0, +0xf274, 0xf0d0, 0xf274, 0xf13b, 0xf2a4, 0xf13b, 0xf2a4, 0xf1f6, 0xf31e, 0xf1f6, 0xf31e, +0xf26c, 0xf34f, 0xf26c, 0xf34f, 0xf26c, 0xf34f, 0xf3dc, 0xf475, 0xf3dc, 0xf475, 0xf5c7, +0xf612, 0xf5c7, 0xf612, 0xf681, 0xf67b, 0xf681, 0xf67b, 0xf991, 0xf937, 0xf991, 0xf937, +0xfbdc, 0xfb2d, 0xfbdc, 0xfb2d, 0x6c, 0xff68, 0x6c, 0xff68, 0x6c, 0xff68, 0x29a, +0x144, 0x29a, 0x144, 0x694, 0x4ef, 0x694, 0x4ef, 0x96a, 0x77d, 0x96a, 0x77d, +0xce0, 0xab4, 0xce0, 0xab4, 0x103c, 0xdda, 0x103c, 0xdda, 0x124f, 0xfc3, 0x124f, +0xfc3, 0x124f, 0xfc3, 0x1331, 0x1089, 0x1331, 0x1089, 0x1556, 0x12a0, 0x1556, 0x12a0, +0x1608, 0x1353, 0x1608, 0x1353, 0x1486, 0x11e3, 0x1486, 0x11e3, 0x1523, 0x12a0, 0x1523, +0x12a0, 0x1523, 0x12a0, 0x11b7, 0xf64, 0x11b7, 0xf64, 0x10e2, 0xecd, 0x10e2, 0xecd, +0xf32, 0xd68, 0xf32, 0xd68, 0xd18, 0xba4, 0xd18, 0xba4, 0xb3c, 0xa25, 0xb3c, +0xa25, 0x948, 0x897, 0x948, 0x897, 0x948, 0x897, 0x77b, 0x732, 0x77b, 0x732, +0x65e, 0x67f, 0x65e, 0x67f, 0x4e2, 0x56c, 0x4e2, 0x56c, 0x290, 0x37d, 0x290, +0x37d, 0x126, 0x272, 0x126, 0x272, 0xff16, 0xb7, 0xff16, 0xb7, 0xff16, 0xb7, +0xfcee, 0xfedb, 0xfcee, 0xfedb, 0xfa94, 0xfcc1, 0xfa94, 0xfcc1, 0xf8bf, 0xfb1e, 0xf8bf, +0xfb1e, 0xf525, 0xf7a9, 0xf525, 0xf7a9, 0xf384, 0xf620, 0xf384, 0xf620, 0xf384, 0xf620, +0xf134, 0xf3da, 0xf134, 0xf3da, 0xef64, 0xf206, 0xef64, 0xf206, 0xee43, 0xf0d6, 0xee43, +0xf0d6, 0xed00, 0xef77, 0xed00, 0xef77, 0xeca2, 0xeef5, 0xeca2, 0xeef5, 0xec6e, 0xee94, +0xec6e, 0xee94, 0xec6e, 0xee94, 0xedb8, 0xefaa, 0xedb8, 0xefaa, 0xee9e, 0xf058, 0xee9e, +0xf058, 0xf000, 0xf17d, 0xf000, 0xf17d, 0xf144, 0xf284, 0xf144, 0xf284, 0xf31d, 0xf41d, +0xf31d, 0xf41d, 0xf459, 0xf51a, 0xf459, 0xf51a, 0xf459, 0xf51a, 0xf6f7, 0xf77a, 0xf6f7, +0xf77a, 0xf7e1, 0xf828, 0xf7e1, 0xf828, 0xfa9c, 0xfaa9, 0xfa9c, 0xfaa9, 0xfc98, 0xfc6d, +0xfc98, 0xfc6d, 0xfcc7, 0xfc66, 0xfcc7, 0xfc66, 0xfcc7, 0xfc66, 0x7, 0xff72, 0x7, +0xff72, 0x9, 0xff43, 0x9, 0xff43, 0x170, 0x79, 0x170, 0x79, 0x291, 0x16b, +0x291, 0x16b, 0x4c9, 0x374, 0x4c9, 0x374, 0x649, 0x4c6, 0x649, 0x4c6, 0x649, +0x4c6, 0x700, 0x54e, 0x700, 0x54e, 0x6b6, 0x4d6, 0x6b6, 0x4d6, 0x885, 0x677, +0x885, 0x677, 0xa81, 0x845, 0xa81, 0x845, 0xaf5, 0x88d, 0xaf5, 0x88d, 0xf22, +0xc8f, 0xf22, 0xc8f, 0xf22, 0xc8f, 0x109d, 0xde2, 0x109d, 0xde2, 0x1342, 0x1062, +0x1342, 0x1062, 0x14e5, 0x11e5, 0x14e5, 0x11e5, 0x179d, 0x1482, 0x179d, 0x1482, 0x1965, +0x1636, 0x1965, 0x1636, 0x1965, 0x1636, 0x1af7, 0x17bb, 0x1af7, 0x17bb, 0x1c44, 0x1903, +0x1c44, 0x1903, 0x1cf5, 0x19b9, 0x1cf5, 0x19b9, 0x1db7, 0x1a8a, 0x1db7, 0x1a8a, 0x1d7c, +0x1a67, 0x1d7c, 0x1a67, 0x1ccc, 0x19da, 0x1ccc, 0x19da, 0x1ccc, 0x19da, 0x1b40, 0x187b, +0x1b40, 0x187b, 0x1adf, 0x1851, 0x1adf, 0x1851, 0x1799, 0x154a, 0x1799, 0x154a, 0x1654, +0x144d, 0x1654, 0x144d, 0x1426, 0x126f, 0x1426, 0x126f, 0x1426, 0x126f, 0x1114, 0xfb2, +0x1114, 0xfb2, 0xf30, 0xe28, 0xf30, 0xe28, 0xd5f, 0xcb4, 0xd5f, 0xcb4, 0xa40, +0x9f4, 0xa40, 0x9f4, 0x7fe, 0x811, 0x7fe, 0x811, 0x402, 0x472, 0x402, 0x472, +0x402, 0x472, 0x291, 0x35b, 0x291, 0x35b, 0xa4, 0x1c4, 0xa4, 0x1c4, 0xfd04, +0xfe75, 0xfd04, 0xfe75, 0xfbaf, 0xfd6c, 0xfbaf, 0xfd6c, 0xf8f3, 0xfaf4, 0xf8f3, 0xfaf4, +0xf7e0, 0xfa1d, 0xf7e0, 0xfa1d, 0xf7e0, 0xfa1d, 0xf5e0, 0xf850, 0xf5e0, 0xf850, 0xf594, +0xf830, 0xf594, 0xf830, 0xf1a8, 0xf466, 0xf1a8, 0xf466, 0xf066, 0xf33f, 0xf066, 0xf33f, +0xeee4, 0xf1cd, 0xeee4, 0xf1cd, 0xeee4, 0xf1cd, 0xee6e, 0xf160, 0xee6e, 0xf160, 0xec9b, +0xef8d, 0xec9b, 0xef8d, 0xeb53, 0xee3d, 0xeb53, 0xee3d, 0xec74, 0xef4d, 0xec74, 0xef4d, +0xed1f, 0xefe1, 0xed1f, 0xefe1, 0xee68, 0xf109, 0xee68, 0xf109, 0xee68, 0xf109, 0xebe2, +0xee5d, 0xebe2, 0xee5d, 0xed4c, 0xef99, 0xed4c, 0xef99, 0xedb1, 0xefc9, 0xedb1, 0xefc9, +0xf029, 0xf206, 0xf029, 0xf206, 0xedf0, 0xef8c, 0xedf0, 0xef8c, 0xf111, 0xf266, 0xf111, +0xf266, 0xf111, 0xf266, 0xf3ce, 0xf4d7, 0xf3ce, 0xf4d7, 0xf279, 0xf331, 0xf279, 0xf331, +0xf4b0, 0xf513, 0xf4b0, 0xf513, 0xf3f7, 0xf401, 0xf3f7, 0xf401, 0xf49b, 0xf44b, 0xf49b, +0xf44b, 0xf49b, 0xf44b, 0xf6e3, 0xf637, 0xf6e3, 0xf637, 0xf93f, 0xf837, 0xf93f, 0xf837, +0xf9c0, 0xf85c, 0xf9c0, 0xf85c, 0xfe50, 0xfc92, 0xfe50, 0xfc92, 0xff99, 0xfd85, 0xff99, +0xfd85, 0x26e, 0x8, 0x26e, 0x8, 0x26e, 0x8, 0x57c, 0x2ca, 0x57c, 0x2ca, +0x5ec, 0x2f4, 0x5ec, 0x2f4, 0x6df, 0x3a9, 0x6df, 0x3a9, 0x94d, 0x5e1, 0x94d, +0x5e1, 0xc59, 0x8c2, 0xc59, 0x8c2, 0xc0d, 0x853, 0xc0d, 0x853, 0xc0d, 0x853, +0xe7b, 0xaa8, 0xe7b, 0xaa8, 0x10ed, 0xd0d, 0x10ed, 0xd0d, 0x11f9, 0xe14, 0x11f9, +0xe14, 0x13dd, 0xffd, 0x13dd, 0xffd, 0x1414, 0x1042, 0x1414, 0x1042, 0x1414, 0x1042, +0x1433, 0x1076, 0x1433, 0x1076, 0x15eb, 0x124c, 0x15eb, 0x124c, 0x1747, 0x13cb, 0x1747, +0x13cb, 0x1346, 0xff2, 0x1346, 0xff2, 0x1243, 0xf1a, 0x1243, 0xf1a, 0x15df, 0x12e4, +0x15df, 0x12e4, 0x15df, 0x12e4, 0x1323, 0x1058, 0x1323, 0x1058, 0x1495, 0x11fa, 0x1495, +0x11fa, 0x1384, 0x1119, 0x1384, 0x1119, 0x12b5, 0x1079, 0x12b5, 0x1079, 0x12c4, 0x10b6, +0x12c4, 0x10b6, 0x1195, 0xfb2, 0x1195, 0xfb2, 0x1195, 0xfb2, 0xf96, 0xddc, 0xf96, +0xddc, 0xdc3, 0xc31, 0xdc3, 0xc31, 0x107a, 0xf0d, 0x107a, 0xf0d, 0xd59, 0xc10, +0xd59, 0xc10, 0xbf8, 0xad2, 0xbf8, 0xad2, 0xbf8, 0xad2, 0xbd0, 0xacb, 0xbd0, +0xacb, 0xb67, 0xa84, 0xb67, 0xa84, 0x9e5, 0x923, 0x9e5, 0x923, 0xa15, 0x974, +0xa15, 0x974, 0x764, 0x6e5, 0x764, 0x6e5, 0x813, 0x7b7, 0x813, 0x7b7, 0x813, +0x7b7, 0x94f, 0x915, 0x94f, 0x915, 0x760, 0x749, 0x760, 0x749, 0x8c2, 0x8ce, +0x8c2, 0x8ce, 0x6cb, 0x6f8, 0x6cb, 0x6f8, 0x865, 0x8b2, 0x865, 0x8b2, 0x6f8, +0x763, 0x6f8, 0x763, 0x6f8, 0x763, 0x645, 0x6ca, 0x645, 0x6ca, 0x35f, 0x3fa, +0x35f, 0x3fa, 0x33a, 0x3e6, 0x33a, 0x3e6, 0x5a1, 0x659, 0x5a1, 0x659, 0x403, +0x4bf, 0x403, 0x4bf, 0x403, 0x4bf, 0x3e4, 0x49e, 0x3e4, 0x49e, 0x20c, 0x2bc, +0x20c, 0x2bc, 0x26d, 0x30c, 0x26d, 0x30c, 0x125, 0x1ac, 0x125, 0x1ac, 0x145, +0x1ac, 0x145, 0x1ac, 0x62, 0xa4, 0x62, 0xa4, 0x62, 0xa4, 0xc8, 0xe0, +0xc8, 0xe0, 0x2c8, 0x2b1, 0x2c8, 0x2b1, 0x2c9, 0x283, 0x2c9, 0x283, 0x416, +0x39e, 0x416, 0x39e, 0x603, 0x55b, 0x603, 0x55b, 0x753, 0x67c, 0x753, 0x67c, +0x753, 0x67c, 0x687, 0x587, 0x687, 0x587, 0x7bd, 0x69a, 0x7bd, 0x69a, 0x844, +0x704, 0x844, 0x704, 0x888, 0x734, 0x888, 0x734, 0x94d, 0x7ee, 0x94d, 0x7ee, +0x94d, 0x7ee, 0xbc1, 0xa61, 0xbc1, 0xa61, 0xb25, 0x9d0, 0xb25, 0x9d0, 0xc38, +0xaf7, 0xc38, 0xaf7, 0xd28, 0xc05, 0xd28, 0xc05, 0xc07, 0xb0d, 0xc07, 0xb0d, +0xcca, 0xc00, 0xcca, 0xc00, 0xcca, 0xc00, 0xb51, 0xac0, 0xb51, 0xac0, 0xd47, +0xcf5, 0xd47, 0xcf5, 0x9c5, 0x9b6, 0x9c5, 0x9b6, 0x809, 0x83f, 0x809, 0x83f, +0x736, 0x7b4, 0x736, 0x7b4, 0x4aa, 0x570, 0x4aa, 0x570, 0x4aa, 0x570, 0x41b, +0x526, 0x41b, 0x526, 0x2d4, 0x422, 0x2d4, 0x422, 0x4f, 0x1db, 0x4f, 0x1db, +0x25, 0x1e9, 0x25, 0x1e9, 0x64, 0x25c, 0x64, 0x25c, 0x64, 0x25c, 0xfce6, +0xff0b, 0xfce6, 0xff0b, 0xfbf9, 0xfe44, 0xfbf9, 0xfe44, 0xf8c6, 0xfb31, 0xf8c6, 0xfb31, +0xf8f7, 0xfb7c, 0xf8f7, 0xfb7c, 0xf6d6, 0xf96e, 0xf6d6, 0xf96e, 0xf715, 0xf9bc, 0xf715, +0xf9bc, 0xf715, 0xf9bc, 0xf7c0, 0xfa71, 0xf7c0, 0xfa71, 0xf6f5, 0xf9ac, 0xf6f5, 0xf9ac, +0xf707, 0xf9c1, 0xf707, 0xf9c1, 0xf561, 0xf81c, 0xf561, 0xf81c, 0xf602, 0xf8bb, 0xf602, +0xf8bb, 0xf46d, 0xf723, 0xf46d, 0xf723, 0xf46d, 0xf723, 0xf506, 0xf7b7, 0xf506, 0xf7b7, +0xf63a, 0xf8e4, 0xf63a, 0xf8e4, 0xf543, 0xf7e6, 0xf543, 0xf7e6, 0xf3a9, 0xf643, 0xf3a9, +0xf643, 0xf57c, 0xf80b, 0xf57c, 0xf80b, 0xf57c, 0xf80b, 0xf2df, 0xf560, 0xf2df, 0xf560, +0xf31f, 0xf58f, 0xf31f, 0xf58f, 0xf408, 0xf663, 0xf408, 0xf663, 0xf137, 0xf379, 0xf137, +0xf379, 0xf371, 0xf595, 0xf371, 0xf595, 0xf40d, 0xf60d, 0xf40d, 0xf60d, 0xf40d, 0xf60d, +0xf1f1, 0xf3c9, 0xf1f1, 0xf3c9, 0xf28e, 0xf437, 0xf28e, 0xf437, 0xf2db, 0xf451, 0xf2db, +0xf451, 0xf293, 0xf3d0, 0xf293, 0xf3d0, 0xf1c9, 0xf2c8, 0xf1c9, 0xf2c8, 0xf1c9, 0xf2c8, +0xf07c, 0xf13a, 0xf07c, 0xf13a, 0xf353, 0xf3cd, 0xf353, 0xf3cd, 0xf1e7, 0xf21d, 0xf1e7, +0xf21d, 0xf42b, 0xf41c, 0xf42b, 0xf41c, 0xf549, 0xf4f7, 0xf549, 0xf4f7, 0xf4c9, 0xf436, +0xf4c9, 0xf436, 0xf4c9, 0xf436, 0xf6b0, 0xf5e2, 0xf6b0, 0xf5e2, 0xf5f6, 0xf4f2, 0xf5f6, +0xf4f2, 0xf8a3, 0xf772, 0xf8a3, 0xf772, 0xfa96, 0xf93e, 0xfa96, 0xf93e, 0xf9a5, 0xf831, +0xf9a5, 0xf831, 0xfb22, 0xf99b, 0xfb22, 0xf99b, 0xfb22, 0xf99b, 0xfae2, 0xf953, 0xfae2, +0xf953, 0xf9d8, 0xf84a, 0xf9d8, 0xf84a, 0xfb4e, 0xf9cc, 0xfb4e, 0xf9cc, 0xfa0c, 0xf8a0, +0xfa0c, 0xf8a0, 0xfba2, 0xfa54, 0xfba2, 0xfa54, 0xfba2, 0xfa54, 0xfa96, 0xf96d, 0xfa96, +0xf96d, 0xf991, 0xf894, 0xf991, 0xf894, 0xf948, 0xf87c, 0xf948, 0xf87c, 0xf86d, 0xf7d7, +0xf86d, 0xf7d7, 0xf9f2, 0xf994, 0xf9f2, 0xf994, 0xf680, 0xf65c, 0xf680, 0xf65c, 0xf680, +0xf65c, 0xf775, 0xf78b, 0xf775, 0xf78b, 0xfade, 0xfb2d, 0xfade, 0xfb2d, 0xf6cd, 0xf754, +0xf6cd, 0xf754, 0xf8a2, 0xf95f, 0xf8a2, 0xf95f, 0xf712, 0xf800, 0xf712, 0xf800, 0xf4f2, +0xf610, 0xf4f2, 0xf610, 0xf4f2, 0xf610, 0xf62b, 0xf776, 0xf62b, 0xf776, 0xf1ec, 0xf361, +0xf1ec, 0xf361, 0xf0f4, 0xf28f, 0xf0f4, 0xf28f, 0xee34, 0xeff5, 0xee34, 0xeff5, 0xeef0, +0xf0d3, 0xeef0, 0xf0d3, 0xeef0, 0xf0d3, 0xef1d, 0xf122, 0xef1d, 0xf122, 0xee82, 0xf0a6, +0xee82, 0xf0a6, 0xec83, 0xeec7, 0xec83, 0xeec7, 0xedb9, 0xf01c, 0xedb9, 0xf01c, 0xefbd, +0xf23d, 0xefbd, 0xf23d, 0xefb3, 0xf250, 0xefb3, 0xf250, 0xefb3, 0xf250, 0xeff9, 0xf2b1, +0xeff9, 0xf2b1, 0xf0bd, 0xf38e, 0xf0bd, 0xf38e, 0xf2d5, 0xf5bd, 0xf2d5, 0xf5bd, 0xf1a4, +0xf4a0, 0xf1a4, 0xf4a0, 0xf639, 0xf944, 0xf639, 0xf944, 0xf441, 0xf755, 0xf441, 0xf755, +0xf441, 0xf755, 0xf6c5, 0xf9dd, 0xf6c5, 0xf9dd, 0xf9b8, 0xfccb, 0xf9b8, 0xfccb, 0xf894, +0xfb9c, 0xf894, 0xfb9c, 0xfbfb, 0xfeee, 0xfbfb, 0xfeee, 0xfb88, 0xfe5d, 0xfb88, 0xfe5d, +0xfb88, 0xfe5d, 0xfb5e, 0xfe0c, 0xfb5e, 0xfe0c, 0xfc2b, 0xfea8, 0xfc2b, 0xfea8, 0xfd86, +0xffca, 0xfd86, 0xffca, 0xfc56, 0xfe59, 0xfc56, 0xfe59, 0xfcdc, 0xfe97, 0xfcdc, 0xfe97, +0xfea2, 0x11, 0xfea2, 0x11, 0xfea2, 0x11, 0x12a, 0x247, 0x12a, 0x247, 0x248, +0x313, 0x248, 0x313, 0x384, 0x3fb, 0x384, 0x3fb, 0x7b3, 0x7d8, 0x7b3, 0x7d8, +0x815, 0x7ec, 0x815, 0x7ec, 0x8fc, 0x88b, 0x8fc, 0x88b, 0x8fc, 0x88b, 0xa99, +0x9e6, 0xa99, 0x9e6, 0xc7b, 0xb8f, 0xc7b, 0xb8f, 0xda9, 0xc8f, 0xda9, 0xc8f, +0xcfb, 0xbbc, 0xcfb, 0xbbc, 0xdd9, 0xc81, 0xdd9, 0xc81, 0xdd9, 0xc81, 0xbf7, +0xa8f, 0xbf7, 0xa8f, 0xd96, 0xc29, 0xd96, 0xc29, 0xccf, 0xb69, 0xccf, 0xb69, +0x994, 0x83b, 0x994, 0x83b, 0x6a6, 0x563, 0x6a6, 0x563, 0x465, 0x33d, 0x465, +0x33d, 0x465, 0x33d, 0x3d8, 0x2d0, 0x3d8, 0x2d0, 0x5f, 0xff78, 0x5f, 0xff78, +0xe4, 0x20, 0xe4, 0x20, 0xfe1e, 0xfd7b, 0xfe1e, 0xfd7b, 0xfe16, 0xfd92, 0xfe16, +0xfd92, 0xfe89, 0xfe20, 0xfe89, 0xfe20, 0xfe89, 0xfe20, 0xfdc5, 0xfd71, 0xfdc5, 0xfd71, +0xfd4c, 0xfd09, 0xfd4c, 0xfd09, 0xfc60, 0xfc27, 0xfc60, 0xfc27, 0xfdcc, 0xfd98, 0xfdcc, +0xfd98, 0xfc19, 0xfbe4, 0xfc19, 0xfbe4, 0xfc19, 0xfbe4, 0xfe14, 0xfdd9, 0xfe14, 0xfdd9, +0xfcbb, 0xfc75, 0xfcbb, 0xfc75, 0xfb87, 0xfb35, 0xfb87, 0xfb35, 0xfca8, 0xfc46, 0xfca8, +0xfc46, 0xfbe7, 0xfb75, 0xfbe7, 0xfb75, 0xfdec, 0xfd6c, 0xfdec, 0xfd6c, 0xfdec, 0xfd6c, +0xfbbf, 0xfb33, 0xfbbf, 0xfb33, 0xfbbf, 0xfb2a, 0xfbbf, 0xfb2a, 0xfd2b, 0xfc90, 0xfd2b, +0xfc90, 0xfcd5, 0xfc39, 0xfcd5, 0xfc39, 0xfcc2, 0xfc29, 0xfcc2, 0xfc29, 0xfdd0, 0xfd3f, +0xfdd0, 0xfd3f, 0xfdd0, 0xfd3f, 0xfebc, 0xfe38, 0xfebc, 0xfe38, 0xfd40, 0xfccc, 0xfd40, +0xfccc, 0xffaf, 0xff4c, 0xffaf, 0xff4c, 0xffcb, 0xff7c, 0xffcb, 0xff7c, 0xf7, 0xbb, +0xf7, 0xbb, 0xf7, 0xbb, 0x106, 0xdb, 0x106, 0xdb, 0x19c, 0x17f, 0x19c, +0x17f, 0x218, 0x203, 0x218, 0x203, 0x3af, 0x39d, 0x3af, 0x39d, 0x493, 0x47d, +0x493, 0x47d, 0x277, 0x254, 0x277, 0x254, 0x277, 0x254, 0x245, 0x20d, 0x245, +0x20d, 0x46, 0xfff1, 0x46, 0xfff1, 0x1a1, 0x126, 0x1a1, 0x126, 0xff7a, 0xfed3, +0xff7a, 0xfed3, 0x228, 0x14e, 0x228, 0x14e, 0x2de, 0x1ce, 0x2de, 0x1ce, 0x2de, +0x1ce, 0x54f, 0x404, 0x54f, 0x404, 0x896, 0x712, 0x896, 0x712, 0x915, 0x75a, +0x915, 0x75a, 0xc4a, 0xa5b, 0xc4a, 0xa5b, 0xb0d, 0x8f1, 0xb0d, 0x8f1, 0xb0d, +0x8f1, 0xf01, 0xcc0, 0xf01, 0xcc0, 0xfaf, 0xd54, 0xfaf, 0xd54, 0xf15, 0xcad, +0xf15, 0xcad, 0x11c2, 0xf59, 0x11c2, 0xf59, 0x122b, 0xfd0, 0x122b, 0xfd0, 0x12ee, +0x10af, 0x12ee, 0x10af, 0x12ee, 0x10af, 0x1559, 0x1344, 0x1559, 0x1344, 0x14a1, 0x12c2, +0x14a1, 0x12c2, 0x1233, 0x1097, 0x1233, 0x1097, 0x10f1, 0xfa2, 0x10f1, 0xfa2, 0x10f0, +0xff7, 0x10f0, 0xff7, 0xd2b, 0xc8d, 0xd2b, 0xc8d, 0xd2b, 0xc8d, 0xaa7, 0xa67, +0xaa7, 0xa67, 0x8da, 0x8f9, 0x8da, 0x8f9, 0x430, 0x4ad, 0x430, 0x4ad, 0x2bc, +0x393, 0x2bc, 0x393, 0x307, 0x430, 0x307, 0x430, 0x307, 0x430, 0x147, 0x2bc, +0x147, 0x2bc, 0xfe17, 0xffcd, 0xfe17, 0xffcd, 0xfe24, 0x10, 0xfe24, 0x10, 0xfbca, +0xfde1, 0xfbca, 0xfde1, 0xfbfc, 0xfe30, 0xfbfc, 0xfe30, 0xfb28, 0xfd70, 0xfb28, 0xfd70, +0xfb28, 0xfd70, 0xf8c8, 0xfb18, 0xf8c8, 0xfb18, 0xf7fa, 0xfa48, 0xf7fa, 0xfa48, 0xf6fd, +0xf940, 0xf6fd, 0xf940, 0xf5d4, 0xf805, 0xf5d4, 0xf805, 0xf4fb, 0xf714, 0xf4fb, 0xf714, +0xf4fb, 0xf714, 0xf2ea, 0xf4e8, 0xf2ea, 0xf4e8, 0xf102, 0xf2e2, 0xf102, 0xf2e2, 0xf263, +0xf425, 0xf263, 0xf425, 0xf22c, 0xf3cf, 0xf22c, 0xf3cf, 0xf364, 0xf4ea, 0xf364, 0xf4ea, +0xf23d, 0xf3a7, 0xf23d, 0xf3a7, 0xf23d, 0xf3a7, 0xf17f, 0xf2d0, 0xf17f, 0xf2d0, 0xf23e, +0xf378, 0xf23e, 0xf378, 0xf362, 0xf485, 0xf362, 0xf485, 0xf46e, 0xf57c, 0xf46e, 0xf57c, +0xf380, 0xf479, 0xf380, 0xf479, 0xf6e0, 0xf7c1, 0xf6e0, 0xf7c1, 0xf6e0, 0xf7c1, 0xf694, +0xf75b, 0xf694, 0xf75b, 0xf671, 0xf71a, 0xf671, 0xf71a, 0xf9ba, 0xfa3e, 0xf9ba, 0xfa3e, +0xf66e, 0xf6c7, 0xf66e, 0xf6c7, 0xf80c, 0xf832, 0xf80c, 0xf832, 0xf80c, 0xf832, 0xf6f0, +0xf6da, 0xf6f0, 0xf6da, 0xf630, 0xf5d6, 0xf630, 0xf5d6, 0xf791, 0xf6ea, 0xf791, 0xf6ea, +0xf659, 0xf55e, 0xf659, 0xf55e, 0xf919, 0xf7c2, 0xf919, 0xf7c2, 0xf90f, 0xf757, 0xf90f, +0xf757, 0xf90f, 0xf757, 0xfb06, 0xf8e8, 0xfb06, 0xf8e8, 0xfd70, 0xfaed, 0xfd70, 0xfaed, +0x9e, 0xfdb5, 0x9e, 0xfdb5, 0x315, 0xffca, 0x315, 0xffca, 0x5e1, 0x239, 0x5e1, +0x239, 0x910, 0x514, 0x910, 0x514, 0x910, 0x514, 0xcd8, 0x893, 0xcd8, 0x893, +0xcf0, 0x86e, 0xcf0, 0x86e, 0x102c, 0xb7b, 0x102c, 0xb7b, 0x13fd, 0xf2d, 0x13fd, +0xf2d, 0x1530, 0x1052, 0x1530, 0x1052, 0x1530, 0x1052, 0x19bf, 0x14e2, 0x19bf, 0x14e2, +0x18fe, 0x1433, 0x18fe, 0x1433, 0x1a18, 0x156e, 0x1a18, 0x156e, 0x1aba, 0x1640, 0x1aba, +0x1640, 0x1bf7, 0x17b8, 0x1bf7, 0x17b8, 0x19a0, 0x15a7, 0x19a0, 0x15a7, 0x19a0, 0x15a7, +0x186a, 0x14be, 0x186a, 0x14be, 0x188f, 0x1537, 0x188f, 0x1537, 0x15d1, 0x12ce, 0x15d1, +0x12ce, 0x1790, 0x14e2, 0x1790, 0x14e2, 0x175f, 0x1504, 0x175f, 0x1504, 0x150e, 0x1302, +0x150e, 0x1302, 0x150e, 0x1302, 0x156e, 0x13aa, 0x156e, 0x13aa, 0x1618, 0x1495, 0x1618, +0x1495, 0x1605, 0x14b9, 0x1605, 0x14b9, 0x1580, 0x1462, 0x1580, 0x1462, 0x14b5, 0x13bd, +0x14b5, 0x13bd, 0x14b5, 0x13bd, 0x12ba, 0x11de, 0x12ba, 0x11de, 0x1188, 0x10bf, 0x1188, +0x10bf, 0x117c, 0x10c0, 0x117c, 0x10c0, 0x1022, 0xf6e, 0x1022, 0xf6e, 0x11b5, 0x1105, +0x11b5, 0x1105, 0xd84, 0xcd6, 0xd84, 0xcd6, 0xd84, 0xcd6, 0xbef, 0xb42, 0xbef, +0xb42, 0xb14, 0xa6b, 0xb14, 0xa6b, 0x7cc, 0x729, 0x7cc, 0x729, 0x8fc, 0x863, +0x8fc, 0x863, 0x7c5, 0x73b, 0x7c5, 0x73b, 0x6bd, 0x648, 0x6bd, 0x648, 0x6bd, +0x648, 0x65a, 0x5fe, 0x65a, 0x5fe, 0x614, 0x5d7, 0x614, 0x5d7, 0x57a, 0x55f, +0x57a, 0x55f, 0x437, 0x442, 0x437, 0x442, 0x1a4, 0x1d7, 0x1a4, 0x1d7, 0x1a4, +0x1d7, 0xfef9, 0xff53, 0xfef9, 0xff53, 0xffb0, 0x30, 0xffb0, 0x30, 0xd9, 0x17c, +0xd9, 0x17c, 0xfe58, 0xff19, 0xfe58, 0xff19, 0xfd66, 0xfe3d, 0xfd66, 0xfe3d, 0xfcc8, +0xfdad, 0xfcc8, 0xfdad, 0xfcc8, 0xfdad, 0xfc46, 0xfd32, 0xfc46, 0xfd32, 0xfafd, 0xfbe4, +0xfafd, 0xfbe4, 0xf9e9, 0xfac3, 0xf9e9, 0xfac3, 0xfa24, 0xfae7, 0xfa24, 0xfae7, 0xfacd, +0xfb71, 0xfacd, 0xfb71, 0xfb87, 0xfc05, 0xfb87, 0xfc05, 0xfb87, 0xfc05, 0xfb79, 0xfbca, +0xfb79, 0xfbca, 0xfc57, 0xfc79, 0xfc57, 0xfc79, 0xfc62, 0xfc52, 0xfc62, 0xfc52, 0xfc09, +0xfbc9, 0xfc09, 0xfbc9, 0xfd67, 0xfcf9, 0xfd67, 0xfcf9, 0xfd67, 0xfcf9, 0xfe07, 0xfd72, +0xfe07, 0xfd72, 0xfe6f, 0xfdb9, 0xfe6f, 0xfdb9, 0x154, 0x87, 0x154, 0x87, 0x1b6, +0xdd, 0x1b6, 0xdd, 0x413, 0x33a, 0x413, 0x33a, 0x386, 0x2b8, 0x386, 0x2b8, +0x386, 0x2b8, 0x482, 0x3cd, 0x482, 0x3cd, 0x4fd, 0x46c, 0x4fd, 0x46c, 0x4ad, +0x44b, 0x4ad, 0x44b, 0x59a, 0x571, 0x59a, 0x571, 0x172, 0x189, 0x172, 0x189, +0x1f9, 0x256, 0x1f9, 0x256, 0x1f9, 0x256, 0x1b2, 0x257, 0x1b2, 0x257, 0x66, +0x154, 0x66, 0x154, 0x176, 0x2aa, 0x176, 0x2aa, 0x179, 0x2ee, 0x179, 0x2ee, +0xff78, 0x127, 0xff78, 0x127, 0xff78, 0x127, 0xff30, 0x110, 0xff30, 0x110, 0xff0d, +0x113, 0xff0d, 0x113, 0xfe0d, 0x2e, 0xfe0d, 0x2e, 0xfd53, 0xff83, 0xfd53, 0xff83, +0xfce6, 0xff19, 0xfce6, 0xff19, 0xfa65, 0xfc8e, 0xfa65, 0xfc8e, 0xfa65, 0xfc8e, 0xfad1, +0xfce6, 0xfad1, 0xfce6, 0xfb6d, 0xfd64, 0xfb6d, 0xfd64, 0xfbb5, 0xfd88, 0xfbb5, 0xfd88, +0xfde2, 0xff8b, 0xfde2, 0xff8b, 0xfcc3, 0xfe3d, 0xfcc3, 0xfe3d, 0xfd95, 0xfee0, 0xfd95, +0xfee0, 0xfd95, 0xfee0, 0xff3a, 0x58, 0xff3a, 0x58, 0xa3, 0x196, 0xa3, 0x196, +0xff1b, 0xffea, 0xff1b, 0xffea, 0xff92, 0x42, 0xff92, 0x42, 0xfd5b, 0xfdf4, 0xfd5b, +0xfdf4, 0xfd5b, 0xfdf4, 0xfc71, 0xfcfc, 0xfc71, 0xfcfc, 0xfcf4, 0xfd7a, 0xfcf4, 0xfd7a, +0xfa07, 0xfa91, 0xfa07, 0xfa91, 0xf9d5, 0xfa6a, 0xf9d5, 0xfa6a, 0xf825, 0xf8cb, 0xf825, +0xf8cb, 0xf487, 0xf544, 0xf487, 0xf544, 0xf487, 0xf544, 0xf440, 0xf517, 0xf440, 0xf517, +0xf41c, 0xf50e, 0xf41c, 0xf50e, 0xf063, 0xf170, 0xf063, 0xf170, 0xee9e, 0xefc3, 0xee9e, +0xefc3, 0xeba9, 0xece2, 0xeba9, 0xece2, 0xeafc, 0xec43, 0xeafc, 0xec43, 0xeafc, 0xec43, +0xea90, 0xebdd, 0xea90, 0xebdd, 0xea50, 0xeb9c, 0xea50, 0xeb9c, 0xe96d, 0xeaaf, 0xe96d, +0xeaaf, 0xe745, 0xe875, 0xe745, 0xe875, 0xe871, 0xe988, 0xe871, 0xe988, 0xe871, 0xe988, +0xe72c, 0xe822, 0xe72c, 0xe822, 0xe68b, 0xe75d, 0xe68b, 0xe75d, 0xe75d, 0xe806, 0xe75d, +0xe806, 0xe544, 0xe5c3, 0xe544, 0xe5c3, 0xe6ea, 0xe741, 0xe6ea, 0xe741, 0xe73e, 0xe76f, +0xe73e, 0xe76f, 0xe73e, 0xe76f, 0xe6b5, 0xe6c7, 0xe6b5, 0xe6c7, 0xe9f2, 0xe9ee, 0xe9f2, +0xe9ee, 0xeaa7, 0xea95, 0xeaa7, 0xea95, 0xebdd, 0xebc8, 0xebdd, 0xebc8, 0xec96, 0xec8c, +0xec96, 0xec8c, 0xec96, 0xec8c, 0xed60, 0xed6c, 0xed60, 0xed6c, 0xee72, 0xeea2, 0xee72, +0xeea2, 0xeffb, 0xf05b, 0xeffb, 0xf05b, 0xf041, 0xf0dc, 0xf041, 0xf0dc, 0xefe9, 0xf0c9, +0xefe9, 0xf0c9, 0xf03f, 0xf16a, 0xf03f, 0xf16a, 0xf03f, 0xf16a, 0xf0b6, 0xf232, 0xf0b6, +0xf232, 0xf006, 0xf1d5, 0xf006, 0xf1d5, 0xf18c, 0xf3ae, 0xf18c, 0xf3ae, 0xf191, 0xf403, +0xf191, 0xf403, 0xf0cb, 0xf386, 0xf0cb, 0xf386, 0xf371, 0xf66c, 0xf371, 0xf66c, 0xf371, +0xf66c, 0xf354, 0xf685, 0xf354, 0xf685, 0xf2ed, 0xf646, 0xf2ed, 0xf646, 0xf275, 0xf5e8, +0xf275, 0xf5e8, 0xf344, 0xf6c2, 0xf344, 0xf6c2, 0xf28a, 0xf602, 0xf28a, 0xf602, 0xf28a, +0xf602, 0xf40c, 0xf771, 0xf40c, 0xf771, 0xf5d1, 0xf913, 0xf5d1, 0xf913, 0xf6aa, 0xf9bd, +0xf6aa, 0xf9bd, 0xf940, 0xfc18, 0xf940, 0xfc18, 0xfac6, 0xfd59, 0xfac6, 0xfd59, 0xfc2e, +0xfe75, 0xfc2e, 0xfe75, 0xfc2e, 0xfe75, 0x8f, 0x286, 0x8f, 0x286, 0x2d5, 0x47c, +0x2d5, 0x47c, 0x34c, 0x4a1, 0x34c, 0x4a1, 0x526, 0x62e, 0x526, 0x62e, 0x65f, +0x71f, 0x65f, 0x71f, 0x8b2, 0x931, 0x8b2, 0x931, 0x8b2, 0x931, 0xa60, 0xaa6, +0xa60, 0xaa6, 0xb5f, 0xb75, 0xb5f, 0xb75, 0x9ab, 0x99c, 0x9ab, 0x99c, 0xb58, +0xb2d, 0xb58, 0xb2d, 0xb00, 0xac1, 0xb00, 0xac1, 0xb00, 0xac1, 0xcad, 0xc63, +0xcad, 0xc63, 0xd74, 0xd25, 0xd74, 0xd25, 0xa07, 0x9b9, 0xa07, 0x9b9, 0x96c, +0x922, 0x96c, 0x922, 0x7fb, 0x7b7, 0x7fb, 0x7b7, 0x615, 0x5d7, 0x615, 0x5d7, +0x615, 0x5d7, 0x509, 0x4ce, 0x509, 0x4ce, 0x521, 0x4e8, 0x521, 0x4e8, 0x2f1, +0x2b4, 0x2f1, 0x2b4, 0x2f9, 0x2b3, 0x2f9, 0x2b3, 0x1e4, 0x18f, 0x1e4, 0x18f, +0x15d, 0xf4, 0x15d, 0xf4, 0x15d, 0xf4, 0x2cf, 0x24f, 0x2cf, 0x24f, 0x227, +0x189, 0x227, 0x189, 0xffef, 0xff32, 0xffef, 0xff32, 0xfffe, 0xff1f, 0xfffe, 0xff1f, +0x2, 0xff02, 0x2, 0xff02, 0x2, 0xff02, 0xfea1, 0xfd81, 0xfea1, 0xfd81, 0xfe6f, +0xfd34, 0xfe6f, 0xfd34, 0xff11, 0xfdc1, 0xff11, 0xfdc1, 0xfe55, 0xfcf7, 0xfe55, 0xfcf7, +0xff5b, 0xfdf9, 0xff5b, 0xfdf9, 0x150, 0xfff3, 0x150, 0xfff3, 0x150, 0xfff3, 0xffd5, +0xfe87, 0xffd5, 0xfe87, 0x21b, 0xe8, 0x21b, 0xe8, 0xe8, 0xffda, 0xe8, 0xffda, +0xffd4, 0xfef5, 0xffd4, 0xfef5, 0x206, 0x160, 0x206, 0x160, 0x68, 0x2, 0x68, +0x2, 0x68, 0x2, 0xe0, 0xc1, 0xe0, 0xc1, 0x1d7, 0x201, 0x1d7, 0x201, +0x48, 0xbc, 0x48, 0xbc, 0x7d, 0x13a, 0x7d, 0x13a, 0xffcb, 0xce, 0xffcb, +0xce, 0xffcb, 0xce, 0xc0, 0x203, 0xc0, 0x203, 0xffa3, 0x11d, 0xffa3, 0x11d, +0xfec6, 0x6c, 0xfec6, 0x6c, 0xff59, 0x120, 0xff59, 0x120, 0xfdb1, 0xff8c, 0xfdb1, +0xff8c, 0xffe1, 0x1c3, 0xffe1, 0x1c3, 0xffe1, 0x1c3, 0xff1c, 0xf6, 0xff1c, 0xf6, +0xff5c, 0x120, 0xff5c, 0x120, 0x13b, 0x2dd, 0x13b, 0x2dd, 0x2c, 0x19f, 0x2c, +0x19f, 0x81, 0x1bc, 0x81, 0x1bc, 0x1fa, 0x2f3, 0x1fa, 0x2f3, 0x1fa, 0x2f3, +0x1b0, 0x261, 0x1b0, 0x261, 0x1a7, 0x20b, 0x1a7, 0x20b, 0x2f9, 0x30f, 0x2f9, +0x30f, 0x577, 0x53d, 0x577, 0x53d, 0x699, 0x613, 0x699, 0x613, 0x699, 0x613, +0x94d, 0x87e, 0x94d, 0x87e, 0x9bc, 0x8a9, 0x9bc, 0x8a9, 0x8dc, 0x78c, 0x8dc, +0x78c, 0xa48, 0x8c3, 0xa48, 0x8c3, 0xa82, 0x8d0, 0xa82, 0x8d0, 0xb5a, 0x983, +0xb5a, 0x983, 0xb5a, 0x983, 0xbd0, 0x9de, 0xbd0, 0x9de, 0xb20, 0x919, 0xb20, +0x919, 0x8ac, 0x699, 0x8ac, 0x699, 0xb52, 0x939, 0xb52, 0x939, 0x9a9, 0x790, +0x9a9, 0x790, 0x82a, 0x614, 0x82a, 0x614, 0x82a, 0x614, 0x6b5, 0x4a6, 0x6b5, +0x4a6, 0x3f5, 0x1f0, 0x3f5, 0x1f0, 0x64a, 0x451, 0x64a, 0x451, 0x5fa, 0x40c, +0x5fa, 0x40c, 0x42e, 0x24c, 0x42e, 0x24c, 0x42e, 0x24c, 0x40e, 0x238, 0x40e, +0x238, 0x31b, 0x152, 0x31b, 0x152, 0x154, 0xff96, 0x154, 0xff96, 0x2f8, 0x146, +0x2f8, 0x146, 0xff, 0xff59, 0xff, 0xff59, 0x85, 0xfeee, 0x85, 0xfeee, 0x85, +0xfeee, 0xdb, 0xff55, 0xdb, 0xff55, 0x6b, 0xfef9, 0x6b, 0xfef9, 0xff6e, 0xfe14, +0xff6e, 0xfe14, 0x67, 0xff29, 0x67, 0xff29, 0x145, 0x29, 0x145, 0x29, 0xfe45, +0xfd50, 0xfe45, 0xfd50, 0xfe45, 0xfd50, 0xfdd4, 0xfd0d, 0xfdd4, 0xfd0d, 0xfc89, 0xfbf4, +0xfc89, 0xfbf4, 0xfa63, 0xfa05, 0xfa63, 0xfa05, 0xf9f0, 0xf9cf, 0xf9f0, 0xf9cf, 0xf8ba, +0xf8d8, 0xf8ba, 0xf8d8, 0xf8ba, 0xf8d8, 0xf617, 0xf677, 0xf617, 0xf677, 0xf67f, 0xf723, +0xf67f, 0xf723, 0xf511, 0xf5f7, 0xf511, 0xf5f7, 0xf3a6, 0xf4cc, 0xf3a6, 0xf4cc, 0xf52e, +0xf691, 0xf52e, 0xf691, 0xf4b4, 0xf64e, 0xf4b4, 0xf64e, 0xf4b4, 0xf64e, 0xf450, 0xf619, +0xf450, 0xf619, 0xf553, 0xf741, 0xf553, 0xf741, 0xf4a6, 0xf6b1, 0xf4a6, 0xf6b1, 0xf55f, +0xf77a, 0xf55f, 0xf77a, 0xf68e, 0xf8ad, 0xf68e, 0xf8ad, 0xf7e2, 0xf9f9, 0xf7e2, 0xf9f9, +0xf7e2, 0xf9f9, 0xf8c0, 0xfac3, 0xf8c0, 0xfac3, 0xf905, 0xfae6, 0xf905, 0xfae6, 0xf897, +0xfa4b, 0xf897, 0xfa4b, 0xf992, 0xfb0e, 0xf992, 0xfb0e, 0xfd43, 0xfe7d, 0xfd43, 0xfe7d, +0xfd43, 0xfe7d, 0xfca7, 0xfd96, 0xfca7, 0xfd96, 0xfe5a, 0xfef7, 0xfe5a, 0xfef7, 0x166, +0x1ac, 0x166, 0x1ac, 0x266, 0x250, 0x266, 0x250, 0x443, 0x3cf, 0x443, 0x3cf, +0x7a8, 0x6d5, 0x7a8, 0x6d5, 0x7a8, 0x6d5, 0xa31, 0x900, 0xa31, 0x900, 0xcdd, +0xb50, 0xcdd, 0xb50, 0x10cc, 0xee5, 0x10cc, 0xee5, 0x134b, 0x1110, 0x134b, 0x1110, +0x1456, 0x11cc, 0x1456, 0x11cc, 0x1456, 0x11cc, 0x16e8, 0x1414, 0x16e8, 0x1414, 0x1755, +0x143e, 0x1755, 0x143e, 0x1761, 0x140c, 0x1761, 0x140c, 0x194c, 0x15c0, 0x194c, 0x15c0, +0x18cb, 0x150e, 0x18cb, 0x150e, 0x1843, 0x145a, 0x1843, 0x145a, 0x1843, 0x145a, 0x1859, +0x144b, 0x1859, 0x144b, 0x18ab, 0x147e, 0x18ab, 0x147e, 0x181d, 0x13d6, 0x181d, 0x13d6, +0x18be, 0x1462, 0x18be, 0x1462, 0x16e2, 0x1276, 0x16e2, 0x1276, 0x1679, 0x1203, 0x1679, +0x1203, 0x1679, 0x1203, 0x14f0, 0x1075, 0x14f0, 0x1075, 0x14f3, 0x1079, 0x14f3, 0x1079, +0x1832, 0x13bf, 0x1832, 0x13bf, 0x1798, 0x1331, 0x1798, 0x1331, 0x162c, 0x11d9, 0x162c, +0x11d9, 0x162c, 0x11d9, 0x16ea, 0x12b1, 0x16ea, 0x12b1, 0x1763, 0x134c, 0x1763, 0x134c, +0x16ee, 0x1301, 0x16ee, 0x1301, 0x17a2, 0x13e6, 0x17a2, 0x13e6, 0x147d, 0x10fc, 0x147d, +0x10fc, 0x1292, 0xf52, 0x1292, 0xf52, 0x1292, 0xf52, 0xf6b, 0xc74, 0xf6b, 0xc74, +0xcbc, 0xa17, 0xcbc, 0xa17, 0xa23, 0x7d5, 0xa23, 0x7d5, 0x7e7, 0x5f7, 0x7e7, +0x5f7, 0x511, 0x384, 0x511, 0x384, 0xfb, 0xffd4, 0xfb, 0xffd4, 0xfb, 0xffd4, +0xffbf, 0xff00, 0xffbf, 0xff00, 0xfe7c, 0xfe25, 0xfe7c, 0xfe25, 0xfc7d, 0xfc8e, 0xfc7d, +0xfc8e, 0xfb89, 0xfbfe, 0xfb89, 0xfbfe, 0xfc3e, 0xfd14, 0xfc3e, 0xfd14, 0xfc3e, 0xfd14, +0xf9d2, 0xfb03, 0xf9d2, 0xfb03, 0xfa1e, 0xfba2, 0xfa1e, 0xfba2, 0xf873, 0xfa42, 0xf873, +0xfa42, 0xf5d2, 0xf7e2, 0xf5d2, 0xf7e2, 0xf4ef, 0xf735, 0xf4ef, 0xf735, 0xf299, 0xf509, +0xf299, 0xf509, 0xf299, 0xf509, 0xf2fb, 0xf58a, 0xf2fb, 0xf58a, 0xf227, 0xf4c9, 0xf227, +0xf4c9, 0xf01b, 0xf2c3, 0xf01b, 0xf2c3, 0xf132, 0xf3d5, 0xf132, 0xf3d5, 0xf1b2, 0xf446, +0xf1b2, 0xf446, 0xf148, 0xf3c2, 0xf148, 0xf3c2, 0xf148, 0xf3c2, 0xf1a0, 0xf3f8, 0xf1a0, +0xf3f8, 0xf280, 0xf4ad, 0xf280, 0xf4ad, 0xf3ea, 0xf5e5, 0xf3ea, 0xf5e5, 0xf549, 0xf70d, +0xf549, 0xf70d, 0xf850, 0xf9d9, 0xf850, 0xf9d9, 0xf850, 0xf9d9, 0xf964, 0xfaaf, 0xf964, +0xfaaf, 0xfa9d, 0xfba9, 0xfa9d, 0xfba9, 0xfde4, 0xfeaf, 0xfde4, 0xfeaf, 0xfe9f, 0xff2b, +0xfe9f, 0xff2b, 0xffe9, 0x38, 0xffe9, 0x38, 0x2ce, 0x2e1, 0x2ce, 0x2e1, 0x2ce, +0x2e1, 0x364, 0x33e, 0x364, 0x33e, 0x4b2, 0x457, 0x4b2, 0x457, 0x5c1, 0x534, +0x5c1, 0x534, 0x5e5, 0x52b, 0x5e5, 0x52b, 0x4dc, 0x3fa, 0x4dc, 0x3fa, 0x57b, +0x474, 0x57b, 0x474, 0x57b, 0x474, 0x626, 0x4ff, 0x626, 0x4ff, 0x548, 0x404, +0x548, 0x404, 0x548, 0x3ed, 0x548, 0x3ed, 0x618, 0x4ab, 0x618, 0x4ab, 0x74a, +0x5cf, 0x74a, 0x5cf, 0x74a, 0x5cf, 0x803, 0x67e, 0x803, 0x67e, 0xa10, 0x886, +0xa10, 0x886, 0x9d6, 0x84d, 0x9d6, 0x84d, 0xb42, 0x9be, 0xb42, 0x9be, 0xb56, +0x9dc, 0xb56, 0x9dc, 0xc2c, 0xac1, 0xc2c, 0xac1, 0xc2c, 0xac1, 0xd77, 0xc21, +0xd77, 0xc21, 0xda3, 0xc68, 0xda3, 0xc68, 0xeaf, 0xd95, 0xeaf, 0xd95, 0xced, +0xbf9, 0xced, 0xbf9, 0xb7e, 0xab6, 0xb7e, 0xab6, 0xb31, 0xa9b, 0xb31, 0xa9b, +0xb31, 0xa9b, 0x976, 0x917, 0x976, 0x917, 0x6e5, 0x6c3, 0x6e5, 0x6c3, 0x5a5, +0x5c4, 0x5a5, 0x5c4, 0x2e0, 0x345, 0x2e0, 0x345, 0x2a7, 0x355, 0x2a7, 0x355, +0x2a7, 0x355, 0x300, 0x3fb, 0x300, 0x3fb, 0x16a, 0x2b3, 0x16a, 0x2b3, 0xff2f, +0xc8, 0xff2f, 0xc8, 0xfea8, 0x91, 0xfea8, 0x91, 0xfcbf, 0xfef6, 0xfcbf, 0xfef6, +0xfa11, 0xfc95, 0xfa11, 0xfc95, 0xfa11, 0xfc95, 0xf960, 0xfc2d, 0xf960, 0xfc2d, 0xf819, +0xfb2c, 0xf819, 0xfb2c, 0xf5b7, 0xf90b, 0xf5b7, 0xf90b, 0xf337, 0xf6c6, 0xf337, 0xf6c6, +0xf2ee, 0xf6b0, 0xf2ee, 0xf6b0, 0xf168, 0xf557, 0xf168, 0xf557, 0xf168, 0xf557, 0xefef, +0xf403, 0xefef, 0xf403, 0xedc3, 0xf1f2, 0xedc3, 0xf1f2, 0xed3b, 0xf17c, 0xed3b, 0xf17c, +0xec2f, 0xf079, 0xec2f, 0xf079, 0xea54, 0xee9f, 0xea54, 0xee9f, 0xea54, 0xee9f, 0xea8b, +0xeecc, 0xea8b, 0xeecc, 0xeabc, 0xeeea, 0xeabc, 0xeeea, 0xea10, 0xee23, 0xea10, 0xee23, +0xea02, 0xedf1, 0xea02, 0xedf1, 0xea2a, 0xeded, 0xea2a, 0xeded, 0xe8db, 0xec6a, 0xe8db, +0xec6a, 0xe8db, 0xec6a, 0xe91e, 0xec73, 0xe91e, 0xec73, 0xe8c7, 0xebdc, 0xe8c7, 0xebdc, +0xe874, 0xeb45, 0xe874, 0xeb45, 0xe958, 0xebdf, 0xe958, 0xebdf, 0xea14, 0xec50, 0xea14, +0xec50, 0xe9c1, 0xebaf, 0xe9c1, 0xebaf, 0xe9c1, 0xebaf, 0xeb88, 0xed28, 0xeb88, 0xed28, +0xed64, 0xeeb5, 0xed64, 0xeeb5, 0xec2f, 0xed33, 0xec2f, 0xed33, 0xec65, 0xed1e, 0xec65, +0xed1e, 0xec3c, 0xecae, 0xec3c, 0xecae, 0xec3c, 0xecae, 0xed16, 0xed46, 0xed16, 0xed46, +0xee23, 0xee15, 0xee23, 0xee15, 0xee2c, 0xede6, 0xee2c, 0xede6, 0xf134, 0xf0bd, 0xf134, +0xf0bd, 0xf216, 0xf175, 0xf216, 0xf175, 0xf3f0, 0xf32e, 0xf3f0, 0xf32e, 0xf3f0, 0xf32e, +0xf554, 0xf478, 0xf554, 0xf478, 0xf371, 0xf284, 0xf371, 0xf284, 0xf45a, 0xf363, 0xf45a, +0xf363, 0xf75d, 0xf665, 0xf75d, 0xf665, 0xf8a4, 0xf7b2, 0xf8a4, 0xf7b2, 0xf923, 0xf83f, +0xf923, 0xf83f, 0xf923, 0xf83f, 0xfaaf, 0xf9e0, 0xfaaf, 0xf9e0, 0xf9d0, 0xf91b, 0xf9d0, +0xf91b, 0xfb48, 0xfab2, 0xfb48, 0xfab2, 0xfc98, 0xfc25, 0xfc98, 0xfc25, 0xfc9c, 0xfc4f, +0xfc9c, 0xfc4f, 0xfc9c, 0xfc4f, 0xfc5b, 0xfc38, 0xfc5b, 0xfc38, 0xfc07, 0xfc0d, 0xfc07, +0xfc0d, 0xfc65, 0xfc97, 0xfc65, 0xfc97, 0xfbc7, 0xfc23, 0xfbc7, 0xfc23, 0xfc8f, 0xfd14, +0xfc8f, 0xfd14, 0xfe03, 0xfeaf, 0xfe03, 0xfeaf, 0xfe03, 0xfeaf, 0xfc66, 0xfd38, 0xfc66, +0xfd38, 0xfb3c, 0xfc2f, 0xfb3c, 0xfc2f, 0xfd6c, 0xfe7f, 0xfd6c, 0xfe7f, 0xfc9e, 0xfdce, +0xfc9e, 0xfdce, 0xfd3e, 0xfe88, 0xfd3e, 0xfe88, 0xfd3e, 0xfe88, 0xfdff, 0xff5f, 0xfdff, +0xff5f, 0xfd8a, 0xfefe, 0xfd8a, 0xfefe, 0xfd58, 0xfede, 0xfd58, 0xfede, 0xfd77, 0xff0c, +0xfd77, 0xff0c, 0xff10, 0xb3, 0xff10, 0xb3, 0x22, 0x1d3, 0x22, 0x1d3, 0x22, +0x1d3, 0xff9f, 0x15b, 0xff9f, 0x15b, 0xe6, 0x2ad, 0xe6, 0x2ad, 0x1ed, 0x3be, +0x1ed, 0x3be, 0xc8, 0x2a2, 0xc8, 0x2a2, 0x293, 0x476, 0x293, 0x476, 0x242, +0x42c, 0x242, 0x42c, 0x242, 0x42c, 0x2f9, 0x4e9, 0x2f9, 0x4e9, 0x3f5, 0x5e7, +0x3f5, 0x5e7, 0x4ef, 0x6e2, 0x4ef, 0x6e2, 0x65b, 0x84b, 0x65b, 0x84b, 0x600, +0x7e8, 0x600, 0x7e8, 0x600, 0x7e8, 0x797, 0x974, 0x797, 0x974, 0x813, 0x9de, +0x813, 0x9de, 0x711, 0x8c4, 0x711, 0x8c4, 0x811, 0x9a6, 0x811, 0x9a6, 0x7b7, +0x927, 0x7b7, 0x927, 0x62f, 0x773, 0x62f, 0x773, 0x62f, 0x773, 0x768, 0x87a, +0x768, 0x87a, 0x613, 0x6eb, 0x613, 0x6eb, 0x5b0, 0x64a, 0x5b0, 0x64a, 0x690, +0x6e6, 0x690, 0x6e6, 0x63c, 0x64b, 0x63c, 0x64b, 0x771, 0x737, 0x771, 0x737, +0x771, 0x737, 0x89e, 0x819, 0x89e, 0x819, 0xa2a, 0x95b, 0xa2a, 0x95b, 0xa9d, +0x986, 0xa9d, 0x986, 0xbc0, 0xa65, 0xbc0, 0xa65, 0xe3d, 0xca4, 0xe3d, 0xca4, +0xe3d, 0xca4, 0xeec, 0xd1c, 0xeec, 0xd1c, 0xe96, 0xc98, 0xe96, 0xc98, 0xea1, +0xc7e, 0xea1, 0xc7e, 0x101b, 0xdde, 0x101b, 0xdde, 0x1029, 0xddb, 0x1029, 0xddb, +0xf72, 0xd20, 0xf72, 0xd20, 0xf72, 0xd20, 0x1029, 0xdde, 0x1029, 0xdde, 0xe5c, +0xc22, 0xe5c, 0xc22, 0xceb, 0xacd, 0xceb, 0xacd, 0xf05, 0xd0b, 0xf05, 0xd0b, +0xcfb, 0xb2c, 0xcfb, 0xb2c, 0xa14, 0x876, 0xa14, 0x876, 0xa14, 0x876, 0xb04, +0x99a, 0xb04, 0x99a, 0x93e, 0x80c, 0x93e, 0x80c, 0x7d7, 0x6dc, 0x7d7, 0x6dc, +0x668, 0x5a2, 0x668, 0x5a2, 0x42b, 0x397, 0x42b, 0x397, 0x42b, 0x397, 0x16b, +0x104, 0x16b, 0x104, 0xffa5, 0xff65, 0xffa5, 0xff65, 0xff6e, 0xff4e, 0xff6e, 0xff4e, +0xfd2e, 0xfd25, 0xfd2e, 0xfd25, 0xfbb5, 0xfbbb, 0xfbb5, 0xfbbb, 0xfafd, 0xfb0a, 0xfafd, +0xfb0a, 0xfafd, 0xfb0a, 0xf847, 0xf852, 0xf847, 0xf852, 0xf669, 0xf66a, 0xf669, 0xf66a, +0xf5fe, 0xf5ef, 0xf5fe, 0xf5ef, 0xf3e2, 0xf3be, 0xf3e2, 0xf3be, 0xf34e, 0xf310, 0xf34e, +0xf310, 0xf24c, 0xf1f1, 0xf24c, 0xf1f1, 0xf24c, 0xf1f1, 0xf2fe, 0xf284, 0xf2fe, 0xf284, +0xf466, 0xf3cf, 0xf466, 0xf3cf, 0xf49b, 0xf3e7, 0xf49b, 0xf3e7, 0xf5ae, 0xf4df, 0xf5ae, +0xf4df, 0xf5e4, 0xf4fe, 0xf5e4, 0xf4fe, 0xf5e4, 0xf4fe, 0xf5ba, 0xf4c1, 0xf5ba, 0xf4c1, +0xf6fb, 0xf5f5, 0xf6fb, 0xf5f5, 0xf8d0, 0xf7c1, 0xf8d0, 0xf7c1, 0xf826, 0xf713, 0xf826, +0xf713, 0xf91e, 0xf80b, 0xf91e, 0xf80b, 0xf920, 0xf811, 0xf920, 0xf811, 0xf920, 0xf811, +0xf827, 0xf71e, 0xf827, 0xf71e, 0xf85b, 0xf75c, 0xf85b, 0xf75c, 0xf944, 0xf84d, 0xf944, +0xf84d, 0xf8d4, 0xf7e7, 0xf8d4, 0xf7e7, 0xf7de, 0xf6f8, 0xf7de, 0xf6f8, 0xf87b, 0xf799, +0xf87b, 0xf799, 0xf87b, 0xf799, 0xf709, 0xf628, 0xf709, 0xf628, 0xf64b, 0xf567, 0xf64b, +0xf567, 0xf6eb, 0xf5fe, 0xf6eb, 0xf5fe, 0xf690, 0xf595, 0xf690, 0xf595, 0xf7f6, 0xf6ea, +0xf7f6, 0xf6ea, 0xf7f6, 0xf6ea, 0xfa2b, 0xf908, 0xfa2b, 0xf908, 0xfa6e, 0xf931, 0xfa6e, +0xf931, 0xfbbb, 0xfa61, 0xfbbb, 0xfa61, 0xfcf3, 0xfb7c, 0xfcf3, 0xfb7c, 0xfea6, 0xfd11, +0xfea6, 0xfd11, 0xff1b, 0xfd6a, 0xff1b, 0xfd6a, 0xff1b, 0xfd6a, 0xff4a, 0xfd7f, 0xff4a, +0xfd7f, 0x7d, 0xfe9f, 0x7d, 0xfe9f, 0x93, 0xfea6, 0x93, 0xfea6, 0x1b9, 0xffc6, +0x1b9, 0xffc6, 0x2dd, 0xed, 0x2dd, 0xed, 0x443, 0x25e, 0x443, 0x25e, 0x443, +0x25e, 0x376, 0x1a6, 0x376, 0x1a6, 0x2f5, 0x144, 0x2f5, 0x144, 0x571, 0x3e8, +0x571, 0x3e8, 0x57c, 0x424, 0x57c, 0x424, 0x451, 0x333, 0x451, 0x333, 0x451, +0x333, 0x53d, 0x45d, 0x53d, 0x45d, 0x41a, 0x37d, 0x41a, 0x37d, 0x285, 0x22f, +0x285, 0x22f, 0x491, 0x481, 0x491, 0x481, 0x32f, 0x365, 0x32f, 0x365, 0x19b, +0x212, 0x19b, 0x212, 0x19b, 0x212, 0x36c, 0x41f, 0x36c, 0x41f, 0x307, 0x3f0, +0x307, 0x3f0, 0x249, 0x35d, 0x249, 0x35d, 0x224, 0x35a, 0x224, 0x35a, 0x287, +0x3d4, 0x287, 0x3d4, 0x2d0, 0x428, 0x2d0, 0x428, 0x2d0, 0x428, 0x32e, 0x486, +0x32e, 0x486, 0x275, 0x3c1, 0x275, 0x3c1, 0x32e, 0x462, 0x32e, 0x462, 0x43e, +0x550, 0x43e, 0x550, 0x4ad, 0x595, 0x4ad, 0x595, 0x4ad, 0x595, 0x5ee, 0x6a5, +0x5ee, 0x6a5, 0x686, 0x704, 0x686, 0x704, 0x94a, 0x98d, 0x94a, 0x98d, 0x9a4, +0x9a8, 0x9a4, 0x9a8, 0xb4e, 0xb14, 0xb4e, 0xb14, 0xd6f, 0xcf6, 0xd6f, 0xcf6, +0xd6f, 0xcf6, 0xec8, 0xe13, 0xec8, 0xe13, 0x10d1, 0xfe3, 0x10d1, 0xfe3, 0x113e, +0x101b, 0x113e, 0x101b, 0x129f, 0x114b, 0x129f, 0x114b, 0x12c1, 0x1142, 0x12c1, 0x1142, +0x11d2, 0x102d, 0x11d2, 0x102d, 0x11d2, 0x102d, 0x1292, 0x10cc, 0x1292, 0x10cc, 0x14e0, +0x12fd, 0x14e0, 0x12fd, 0x14bb, 0x12be, 0x14bb, 0x12be, 0x1664, 0x1450, 0x1664, 0x1450, +0x17bd, 0x1595, 0x17bd, 0x1595, 0x17bd, 0x1595, 0x15f0, 0x13b6, 0x15f0, 0x13b6, 0x15e3, +0x1397, 0x15e3, 0x1397, 0x1465, 0x1208, 0x1465, 0x1208, 0x123b, 0xfcc, 0x123b, 0xfcc, +0x1213, 0xf93, 0x1213, 0xf93, 0x111c, 0xe89, 0x111c, 0xe89, 0x111c, 0xe89, 0x1093, +0xdee, 0x1093, 0xdee, 0x10f5, 0xe3f, 0x10f5, 0xe3f, 0x1169, 0xea4, 0x1169, 0xea4, +0x11e5, 0xf13, 0x11e5, 0xf13, 0x1194, 0xeb9, 0x1194, 0xeb9, 0x1194, 0xeb9, 0x11f1, +0xf12, 0x11f1, 0xf12, 0x1189, 0xeab, 0x1189, 0xeab, 0x1151, 0xe7d, 0x1151, 0xe7d, +0x11c3, 0xf01, 0x11c3, 0xf01, 0x120e, 0xf68, 0x120e, 0xf68, 0x11b4, 0xf34, 0x11b4, +0xf34, 0x11b4, 0xf34, 0x10a5, 0xe55, 0x10a5, 0xe55, 0xf2b, 0xd17, 0xf2b, 0xd17, +0xd98, 0xbca, 0xd98, 0xbca, 0xb1d, 0x9a0, 0xb1d, 0x9a0, 0x804, 0x6e1, 0x804, +0x6e1, 0x60f, 0x54d, 0x60f, 0x54d, 0x60f, 0x54d, 0x255, 0x1fb, 0x255, 0x1fb, +0xff69, 0xff7b, 0xff69, 0xff7b, 0xfe82, 0xff03, 0xfe82, 0xff03, 0xfbe6, 0xfcd6, 0xfbe6, +0xfcd6, 0xf7d9, 0xf935, 0xf7d9, 0xf935, 0xf7d9, 0xf935, 0xf703, 0xf8c8, 0xf703, 0xf8c8, +0xf68d, 0xf8b4, 0xf68d, 0xf8b4, 0xf3df, 0xf65f, 0xf3df, 0xf65f, 0xf3e2, 0xf6b2, 0xf3e2, +0xf6b2, 0xf176, 0xf48a, 0xf176, 0xf48a, 0xf028, 0xf375, 0xf028, 0xf375, 0xf028, 0xf375, +0xf099, 0xf411, 0xf099, 0xf411, 0xee27, 0xf1bd, 0xee27, 0xf1bd, 0xee90, 0xf236, 0xee90, +0xf236, 0xef2d, 0xf2d8, 0xef2d, 0xf2d8, 0xee6e, 0xf211, 0xee6e, 0xf211, 0xede9, 0xf17b, +0xede9, 0xf17b, 0xede9, 0xf17b, 0xee5d, 0xf1d3, 0xee5d, 0xf1d3, 0xee4b, 0xf19f, 0xee4b, +0xf19f, 0xef83, 0xf2ad, 0xef83, 0xf2ad, 0xf145, 0xf441, 0xf145, 0xf441, 0xf228, 0xf4f2, +0xf228, 0xf4f2, 0xf228, 0xf4f2, 0xf327, 0xf5be, 0xf327, 0xf5be, 0xf380, 0xf5e3, 0xf380, +0xf5e3, 0xf579, 0xf7a8, 0xf579, 0xf7a8, 0xf6dc, 0xf8d7, 0xf6dc, 0xf8d7, 0xf958, 0xfb21, +0xf958, 0xfb21, 0xfa62, 0xfbf9, 0xfa62, 0xfbf9, 0xfa62, 0xfbf9, 0xfbd5, 0xfd3b, 0xfbd5, +0xfd3b, 0xff1c, 0x52, 0xff1c, 0x52, 0x9c, 0x1a2, 0x9c, 0x1a2, 0x378, 0x44d, +0x378, 0x44d, 0x4a9, 0x54d, 0x4a9, 0x54d, 0x3d7, 0x447, 0x3d7, 0x447, 0x3d7, +0x447, 0x570, 0x5aa, 0x570, 0x5aa, 0x6f0, 0x6f0, 0x6f0, 0x6f0, 0x671, 0x635, +0x671, 0x635, 0x89a, 0x820, 0x89a, 0x820, 0x8c0, 0x803, 0x8c0, 0x803, 0x8c0, +0x803, 0x820, 0x720, 0x820, 0x720, 0x9f4, 0x8b0, 0x9f4, 0x8b0, 0xa9b, 0x913, +0xa9b, 0x913, 0xcab, 0xae2, 0xcab, 0xae2, 0xe4d, 0xc46, 0xe4d, 0xc46, 0xf87, +0xd48, 0xf87, 0xd48, 0xf87, 0xd48, 0x1179, 0xf0a, 0x1179, 0xf0a, 0x13e7, 0x1151, +0x13e7, 0x1151, 0x1638, 0x1388, 0x1638, 0x1388, 0x16e3, 0x1425, 0x16e3, 0x1425, 0x17f6, +0x1539, 0x17f6, 0x1539, 0x1800, 0x1554, 0x1800, 0x1554, 0x1800, 0x1554, 0x171e, 0x1493, +0x171e, 0x1493, 0x1700, 0x14a7, 0x1700, 0x14a7, 0x1443, 0x122c, 0x1443, 0x122c, 0x1162, +0xf9c, 0x1162, 0xf9c, 0xf5c, 0xdf5, 0xf5c, 0xdf5, 0xf5c, 0xdf5, 0xc72, 0xb77, +0xc72, 0xb77, 0x9eb, 0x965, 0x9eb, 0x965, 0x66b, 0x661, 0x66b, 0x661, 0x245, +0x2bc, 0x245, 0x2bc, 0xfdf5, 0xfeef, 0xfdf5, 0xfeef, 0xfaf6, 0xfc72, 0xfaf6, 0xfc72, +0xfaf6, 0xfc72, 0xf85d, 0xfa56, 0xf85d, 0xfa56, 0xf550, 0xf7c0, 0xf550, 0xf7c0, 0xf33d, +0xf61a, 0xf33d, 0xf61a, 0xf092, 0xf3d1, 0xf092, 0xf3d1, 0xecf1, 0xf084, 0xecf1, 0xf084, +0xeaa4, 0xee7d, 0xeaa4, 0xee7d, 0xeaa4, 0xee7d, 0xe81c, 0xec2b, 0xe81c, 0xec2b, 0xe48c, +0xe8c2, 0xe48c, 0xe8c2, 0xe278, 0xe6c5, 0xe278, 0xe6c5, 0xdfc7, 0xe41c, 0xdfc7, 0xe41c, +0xded9, 0xe327, 0xded9, 0xe327, 0xded9, 0xe327, 0xdef0, 0xe32b, 0xdef0, 0xe32b, 0xdc90, +0xe0ad, 0xdc90, 0xe0ad, 0xdbcc, 0xdfc3, 0xdbcc, 0xdfc3, 0xdcb1, 0xe07a, 0xdcb1, 0xe07a, +0xdaed, 0xde82, 0xdaed, 0xde82, 0xd9a7, 0xdd06, 0xd9a7, 0xdd06, 0xd9a7, 0xdd06, 0xda71, +0xdd98, 0xda71, 0xdd98, 0xd988, 0xdc76, 0xd988, 0xdc76, 0xdbcb, 0xde82, 0xdbcb, 0xde82, +0xdd79, 0xdffa, 0xdd79, 0xdffa, 0xddf7, 0xe045, 0xddf7, 0xe045, 0xe095, 0xe2b2, 0xe095, +0xe2b2, 0xe095, 0xe2b2, 0xe1fe, 0xe3eb, 0xe1fe, 0xe3eb, 0xe473, 0xe632, 0xe473, 0xe632, +0xe5e3, 0xe775, 0xe5e3, 0xe775, 0xe6cd, 0xe831, 0xe6cd, 0xe831, 0xe661, 0xe796, 0xe661, +0xe796, 0xe661, 0xe796, 0xe721, 0xe824, 0xe721, 0xe824, 0xe8a7, 0xe975, 0xe8a7, 0xe975, +0xe940, 0xe9d5, 0xe940, 0xe9d5, 0xeb81, 0xebd8, 0xeb81, 0xebd8, 0xec9c, 0xecaf, 0xec9c, +0xecaf, 0xedc8, 0xed93, 0xedc8, 0xed93, 0xedc8, 0xed93, 0xef9d, 0xef1c, 0xef9d, 0xef1c, +0xf251, 0xf17f, 0xf251, 0xf17f, 0xf429, 0xf304, 0xf429, 0xf304, 0xf6a6, 0xf52c, 0xf6a6, +0xf52c, 0xf8f2, 0xf724, 0xf8f2, 0xf724, 0xfb8b, 0xf96c, 0xfb8b, 0xf96c, 0xfb8b, 0xf96c, +0x3b, 0xfdd0, 0x3b, 0xfdd0, 0x2c0, 0x10, 0x2c0, 0x10, 0x4eb, 0x200, 0x4eb, +0x200, 0x821, 0x507, 0x821, 0x507, 0xa0f, 0x6d4, 0xa0f, 0x6d4, 0xa0f, 0x6d4, +0xca3, 0x957, 0xca3, 0x957, 0x1040, 0xcf3, 0x1040, 0xcf3, 0x117f, 0xe43, 0x117f, +0xe43, 0x1203, 0xeea, 0x1203, 0xeea, 0x11cd, 0xee9, 0x11cd, 0xee9, 0x10d4, 0xe37, +0x10d4, 0xe37, 0x10d4, 0xe37, 0x100f, 0xdc9, 0x100f, 0xdc9, 0xfb5, 0xdd4, 0xfb5, +0xdd4, 0xe59, 0xce9, 0xe59, 0xce9, 0xc01, 0xb0c, 0xc01, 0xb0c, 0xbfb, 0xb88, +0xbfb, 0xb88, 0xb8a, 0xb9d, 0xb8a, 0xb9d, 0xb8a, 0xb9d, 0x926, 0x9c0, 0x926, +0x9c0, 0x788, 0x8a7, 0x788, 0x8a7, 0x638, 0x7d7, 0x638, 0x7d7, 0x567, 0x77d, +0x567, 0x77d, 0x3dd, 0x661, 0x3dd, 0x661, 0x3dd, 0x661, 0x29d, 0x582, 0x29d, +0x582, 0x253, 0x58a, 0x253, 0x58a, 0x4e, 0x3c9, 0x4e, 0x3c9, 0xff1a, 0x2ca, +0xff1a, 0x2ca, 0xfd00, 0xd3, 0xfd00, 0xd3, 0xfbd7, 0xffbe, 0xfbd7, 0xffbe, 0xfbd7, +0xffbe, 0xfa94, 0xfe7f, 0xfa94, 0xfe7f, 0xf852, 0xfc34, 0xf852, 0xfc34, 0xf92a, 0xfcf5, +0xf92a, 0xfcf5, 0xf7d3, 0xfb7c, 0xf7d3, 0xfb7c, 0xf73f, 0xfabc, 0xf73f, 0xfabc, 0xf73f, +0xfabc, 0xf82c, 0xfb75, 0xf82c, 0xfb75, 0xf688, 0xf997, 0xf688, 0xf997, 0xf7d6, 0xfaa7, +0xf7d6, 0xfaa7, 0xfa53, 0xfce3, 0xfa53, 0xfce3, 0xfa2d, 0xfc79, 0xfa2d, 0xfc79, 0xfc0a, +0xfe12, 0xfc0a, 0xfe12, 0xfc0a, 0xfe12, 0xff24, 0xe7, 0xff24, 0xe7, 0xff65, 0xe5, +0xff65, 0xe5, 0x1fe, 0x33a, 0x1fe, 0x33a, 0x350, 0x449, 0x350, 0x449, 0x25f, +0x315, 0x25f, 0x315, 0x3f0, 0x464, 0x3f0, 0x464, 0x3f0, 0x464, 0x315, 0x347, +0x315, 0x347, 0x367, 0x354, 0x367, 0x354, 0x361, 0x308, 0x361, 0x308, 0x3d8, +0x338, 0x3d8, 0x338, 0x620, 0x536, 0x620, 0x536, 0x620, 0x536, 0x831, 0x6fb, +0x831, 0x6fb, 0xa9e, 0x91a, 0xa9e, 0x91a, 0xb6e, 0x99a, 0xb6e, 0x99a, 0xb8b, +0x966, 0xb8b, 0x966, 0xb70, 0x8f9, 0xb70, 0x8f9, 0xc26, 0x95f, 0xc26, 0x95f, +0xc26, 0x95f, 0xd5d, 0xa47, 0xd5d, 0xa47, 0xe5a, 0xaf9, 0xe5a, 0xaf9, 0xf2c, +0xb86, 0xf2c, 0xb86, 0x11a6, 0xdc1, 0x11a6, 0xdc1, 0x122e, 0xe13, 0x122e, 0xe13, +0x1357, 0xf0f, 0x1357, 0xf0f, 0x1357, 0xf0f, 0x14ee, 0x1085, 0x14ee, 0x1085, 0x1355, +0xed8, 0x1355, 0xed8, 0x12ce, 0xe4b, 0x12ce, 0xe4b, 0x1255, 0xdda, 0x1255, 0xdda, +0x1078, 0xc13, 0x1078, 0xc13, 0x1078, 0xc13, 0xf26, 0xae6, 0xf26, 0xae6, 0xf7f, +0xb71, 0xf7f, 0xb71, 0xe66, 0xa97, 0xe66, 0xa97, 0xbcb, 0x849, 0xbcb, 0x849, +0xae2, 0x7b6, 0xae2, 0x7b6, 0x9d3, 0x707, 0x9d3, 0x707, 0x9d3, 0x707, 0x7a5, +0x540, 0x7a5, 0x540, 0x5e3, 0x3eb, 0x5e3, 0x3eb, 0x41d, 0x295, 0x41d, 0x295, +0x2ae, 0x198, 0x2ae, 0x198, 0xfff4, 0xff51, 0xfff4, 0xff51, 0xfdfa, 0xfdc7, 0xfdfa, +0xfdc7, 0xfdfa, 0xfdc7, 0xfb75, 0xfbb0, 0xfb75, 0xfbb0, 0xf8a9, 0xf94c, 0xf8a9, 0xf94c, +0xf72c, 0xf831, 0xf72c, 0xf831, 0xf4ea, 0xf64a, 0xf4ea, 0xf64a, 0xf1f1, 0xf3a5, 0xf1f1, +0xf3a5, 0xf1f1, 0xf3a5, 0xef76, 0xf176, 0xef76, 0xf176, 0xeef9, 0xf13d, 0xeef9, 0xf13d, +0xeda9, 0xf028, 0xeda9, 0xf028, 0xecf2, 0xefa5, 0xecf2, 0xefa5, 0xec96, 0xef75, 0xec96, +0xef75, 0xec1f, 0xef22, 0xec1f, 0xef22, 0xec1f, 0xef22, 0xeb1a, 0xee3a, 0xeb1a, 0xee3a, +0xea12, 0xed48, 0xea12, 0xed48, 0xeabd, 0xee04, 0xeabd, 0xee04, 0xe990, 0xece1, 0xe990, +0xece1, 0xe908, 0xec5d, 0xe908, 0xec5d, 0xead0, 0xee24, 0xead0, 0xee24, 0xead0, 0xee24, +0xea66, 0xedb3, 0xea66, 0xedb3, 0xebb1, 0xeef2, 0xebb1, 0xeef2, 0xecbf, 0xefed, 0xecbf, +0xefed, 0xeb08, 0xee1e, 0xeb08, 0xee1e, 0xebbd, 0xeeb5, 0xebbd, 0xeeb5, 0xebbd, 0xeeb5, +0xed1d, 0xeff1, 0xed1d, 0xeff1, 0xed80, 0xf029, 0xed80, 0xf029, 0xef28, 0xf1a1, 0xef28, +0xf1a1, 0xf120, 0xf362, 0xf120, 0xf362, 0xf2ea, 0xf4ef, 0xf2ea, 0xf4ef, 0xf5f7, 0xf7ba, +0xf5f7, 0xf7ba, 0xf5f7, 0xf7ba, 0xf808, 0xf983, 0xf808, 0xf983, 0xfab1, 0xfbe0, 0xfab1, +0xfbe0, 0xfbd8, 0xfcb8, 0xfbd8, 0xfcb8, 0xfe5a, 0xfee7, 0xfe5a, 0xfee7, 0x287, 0x2c2, +0x287, 0x2c2, 0x507, 0x4ed, 0x507, 0x4ed, 0x507, 0x4ed, 0x713, 0x6a7, 0x713, +0x6a7, 0x9d1, 0x915, 0x9d1, 0x915, 0xcbf, 0xbb6, 0xcbf, 0xbb6, 0xe8d, 0xd3d, +0xe8d, 0xd3d, 0x11d6, 0x1043, 0x11d6, 0x1043, 0x11d6, 0x1043, 0x13d9, 0x120c, 0x13d9, +0x120c, 0x1467, 0x1266, 0x1467, 0x1266, 0x1573, 0x1346, 0x1573, 0x1346, 0x18c4, 0x1674, +0x18c4, 0x1674, 0x1a1e, 0x17b4, 0x1a1e, 0x17b4, 0x1b29, 0x18ad, 0x1b29, 0x18ad, 0x1b29, +0x18ad, 0x1dbd, 0x1b37, 0x1dbd, 0x1b37, 0x1da5, 0x1b1c, 0x1da5, 0x1b1c, 0x1eaf, 0x1c2a, +0x1eaf, 0x1c2a, 0x2055, 0x1dd9, 0x2055, 0x1dd9, 0x2049, 0x1ddb, 0x2049, 0x1ddb, 0x207a, +0x1e1d, 0x207a, 0x1e1d, 0x207a, 0x1e1d, 0x20e6, 0x1e9f, 0x20e6, 0x1e9f, 0x219f, 0x1f6d, +0x219f, 0x1f6d, 0x202d, 0x1e12, 0x202d, 0x1e12, 0x1d95, 0x1b91, 0x1d95, 0x1b91, 0x1c38, +0x1a4a, 0x1c38, 0x1a4a, 0x1c38, 0x1a4a, 0x192f, 0x1756, 0x192f, 0x1756, 0x1712, 0x154c, +0x1712, 0x154c, 0x1685, 0x14d1, 0x1685, 0x14d1, 0x16c8, 0x1524, 0x16c8, 0x1524, 0x161c, +0x1487, 0x161c, 0x1487, 0x14f9, 0x1372, 0x14f9, 0x1372, 0x14f9, 0x1372, 0x1468, 0x12ed, +0x1468, 0x12ed, 0x136f, 0x1201, 0x136f, 0x1201, 0x1119, 0xfb9, 0x1119, 0xfb9, 0xf7d, +0xe2b, 0xf7d, 0xe2b, 0xd00, 0xbbd, 0xd00, 0xbbd, 0xb7a, 0xa49, 0xb7a, 0xa49, +0xb7a, 0xa49, 0xc98, 0xb7a, 0xc98, 0xb7a, 0xa6b, 0x961, 0xa6b, 0x961, 0x868, +0x776, 0x868, 0x776, 0x6d7, 0x5fd, 0x6d7, 0x5fd, 0x581, 0x4c0, 0x581, 0x4c0, +0x581, 0x4c0, 0x4be, 0x416, 0x4be, 0x416, 0x38e, 0x2ff, 0x38e, 0x2ff, 0x188, +0x112, 0x188, 0x112, 0xff6d, 0xff0e, 0xff6d, 0xff0e, 0xfdae, 0xfd62, 0xfdae, 0xfd62, +0xfdbc, 0xfd81, 0xfdbc, 0xfd81, 0xfdbc, 0xfd81, 0xfc58, 0xfc28, 0xfc58, 0xfc28, 0xfa74, +0xfa4c, 0xfa74, 0xfa4c, 0xfafb, 0xfad5, 0xfafb, 0xfad5, 0xf98d, 0xf963, 0xf98d, 0xf963, +0xf96f, 0xf93b, 0xf96f, 0xf93b, 0xfa2d, 0xf9ea, 0xfa2d, 0xf9ea, 0xfa2d, 0xf9ea, 0xf932, +0xf8da, 0xf932, 0xf8da, 0xf873, 0xf802, 0xf873, 0xf802, 0xf7d6, 0xf748, 0xf7d6, 0xf748, +0xf8bb, 0xf80d, 0xf8bb, 0xf80d, 0xfa20, 0xf951, 0xfa20, 0xf951, 0xfa20, 0xf951, 0xfa02, +0xf910, 0xfa02, 0xf910, 0xfc44, 0xfb30, 0xfc44, 0xfb30, 0xfc95, 0xfb62, 0xfc95, 0xfb62, +0xfd35, 0xfbe6, 0xfd35, 0xfbe6, 0xfea4, 0xfd3d, 0xfea4, 0xfd3d, 0xfdd3, 0xfc59, 0xfdd3, +0xfc59, 0xfdd3, 0xfc59, 0xfd6a, 0xfbe4, 0xfd6a, 0xfbe4, 0xfe68, 0xfcdc, 0xfe68, 0xfcdc, +0xffe5, 0xfe5a, 0xffe5, 0xfe5a, 0xff11, 0xfd8e, 0xff11, 0xfd8e, 0xfee1, 0xfd6e, 0xfee1, +0xfd6e, 0xfee1, 0xfd6e, 0xff91, 0xfe34, 0xff91, 0xfe34, 0xa, 0xfeca, 0xa, 0xfeca, +0xc2, 0xffa3, 0xc2, 0xffa3, 0x338, 0x23f, 0x338, 0x23f, 0x2d1, 0x201, 0x2d1, +0x201, 0x1a2, 0xfd, 0x1a2, 0xfd, 0x1a2, 0xfd, 0x1c3, 0x14b, 0x1c3, 0x14b, +0x147, 0xfa, 0x147, 0xfa, 0x106, 0xe4, 0x106, 0xe4, 0xff72, 0xff78, 0xff72, +0xff78, 0xfe62, 0xfe8e, 0xfe62, 0xfe8e, 0xfdeb, 0xfe39, 0xfdeb, 0xfe39, 0xfdeb, 0xfe39, +0xfda2, 0xfe0d, 0xfda2, 0xfe0d, 0xfdd1, 0xfe56, 0xfdd1, 0xfe56, 0xfdff, 0xfe9a, 0xfdff, +0xfe9a, 0xfd79, 0xfe25, 0xfd79, 0xfe25, 0xfc22, 0xfcdb, 0xfc22, 0xfcdb, 0xfc22, 0xfcdb, +0xfc5d, 0xfd21, 0xfc5d, 0xfd21, 0xfcbe, 0xfd8a, 0xfcbe, 0xfd8a, 0xfc9f, 0xfd71, 0xfc9f, +0xfd71, 0xfdbc, 0xfe92, 0xfdbc, 0xfe92, 0xfc55, 0xfd2f, 0xfc55, 0xfd2f, 0xfc4c, 0xfd2a, +0xfc4c, 0xfd2a, 0xfc4c, 0xfd2a, 0xfd9c, 0xfe7d, 0xfd9c, 0xfe7d, 0xfd88, 0xfe6e, 0xfd88, +0xfe6e, 0xfccf, 0xfdbb, 0xfccf, 0xfdbb, 0xfd74, 0xfe68, 0xfd74, 0xfe68, 0xfd3d, 0xfe39, +0xfd3d, 0xfe39, 0xfe11, 0xff18, 0xfe11, 0xff18, 0xfe11, 0xff18, 0xffcb, 0xdc, 0xffcb, +0xdc, 0xfde2, 0xfeff, 0xfde2, 0xfeff, 0xfda9, 0xfed1, 0xfda9, 0xfed1, 0xfcda, 0xfe0d, +0xfcda, 0xfe0d, 0xfd01, 0xfe3e, 0xfd01, 0xfe3e, 0xfd01, 0xfe3e, 0xfcb7, 0xfdfc, 0xfcb7, +0xfdfc, 0xfb67, 0xfcb1, 0xfb67, 0xfcb1, 0xfb00, 0xfc4e, 0xfb00, 0xfc4e, 0xfb36, 0xfc84, +0xfb36, 0xfc84, 0xfb6d, 0xfcb8, 0xfb6d, 0xfcb8, 0xfcb0, 0xfdf5, 0xfcb0, 0xfdf5, 0xfcb0, +0xfdf5, 0xfd67, 0xfea3, 0xfd67, 0xfea3, 0xfbae, 0xfcde, 0xfbae, 0xfcde, 0xfbc1, 0xfce3, +0xfbc1, 0xfce3, 0xfba4, 0xfcb4, 0xfba4, 0xfcb4, 0xfb10, 0xfc0e, 0xfb10, 0xfc0e, 0xfb53, +0xfc3e, 0xfb53, 0xfc3e, 0xfb53, 0xfc3e, 0xfc02, 0xfcda, 0xfc02, 0xfcda, 0xfc4e, 0xfd13, +0xfc4e, 0xfd13, 0xfc9e, 0xfd52, 0xfc9e, 0xfd52, 0xfd49, 0xfdee, 0xfd49, 0xfdee, 0xfd05, +0xfd9e, 0xfd05, 0xfd9e, 0xfd05, 0xfd9e, 0xfa8a, 0xfb1a, 0xfa8a, 0xfb1a, 0xf9d7, 0xfa61, +0xf9d7, 0xfa61, 0xf8ef, 0xf978, 0xf8ef, 0xf978, 0xf6a1, 0xf72c, 0xf6a1, 0xf72c, 0xf5c3, +0xf654, 0xf5c3, 0xf654, 0xf52d, 0xf5c8, 0xf52d, 0xf5c8, 0xf52d, 0xf5c8, 0xf38a, 0xf431, +0xf38a, 0xf431, 0xf33d, 0xf3f4, 0xf33d, 0xf3f4, 0xf2d0, 0xf398, 0xf2d0, 0xf398, 0xf17e, +0xf259, 0xf17e, 0xf259, 0xf18f, 0xf27e, 0xf18f, 0xf27e, 0xf036, 0xf13a, 0xf036, 0xf13a, +0xf036, 0xf13a, 0xf0d2, 0xf1e9, 0xf0d2, 0xf1e9, 0xf014, 0xf13e, 0xf014, 0xf13e, 0xef7f, +0xf0bc, 0xef7f, 0xf0bc, 0xef82, 0xf0ce, 0xef82, 0xf0ce, 0xeea2, 0xeffd, 0xeea2, 0xeffd, +0xeea2, 0xeffd, 0xefda, 0xf140, 0xefda, 0xf140, 0xefe1, 0xf151, 0xefe1, 0xf151, 0xef02, +0xf079, 0xef02, 0xf079, 0xed8a, 0xef06, 0xed8a, 0xef06, 0xebc4, 0xed45, 0xebc4, 0xed45, +0xec20, 0xeda2, 0xec20, 0xeda2, 0xec20, 0xeda2, 0xebc5, 0xed48, 0xebc5, 0xed48, 0xeb15, +0xec96, 0xeb15, 0xec96, 0xebb4, 0xed33, 0xebb4, 0xed33, 0xea90, 0xec0d, 0xea90, 0xec0d, +0xea5c, 0xebd6, 0xea5c, 0xebd6, 0xec08, 0xed7d, 0xec08, 0xed7d, 0xec08, 0xed7d, 0xec4d, +0xedbe, 0xec4d, 0xedbe, 0xeca0, 0xee0b, 0xeca0, 0xee0b, 0xedf6, 0xef5a, 0xedf6, 0xef5a, +0xed65, 0xeebf, 0xed65, 0xeebf, 0xf03a, 0xf189, 0xf03a, 0xf189, 0xf03a, 0xf189, 0xf2d7, +0xf41a, 0xf2d7, 0xf41a, 0xf2f9, 0xf42b, 0xf2f9, 0xf42b, 0xf23a, 0xf359, 0xf23a, 0xf359, +0xf196, 0xf29e, 0xf196, 0xf29e, 0xf2c7, 0xf3b5, 0xf2c7, 0xf3b5, 0xf3f9, 0xf4c8, 0xf3f9, +0xf4c8, 0xf3f9, 0xf4c8, 0xf59c, 0xf648, 0xf59c, 0xf648, 0xf60c, 0xf692, 0xf60c, 0xf692, +0xf7b8, 0xf815, 0xf7b8, 0xf815, 0xf903, 0xf934, 0xf903, 0xf934, 0xfac9, 0xfacc, 0xfac9, +0xfacc, 0xfc26, 0xfbf8, 0xfc26, 0xfbf8, 0xfc26, 0xfbf8, 0xfcf1, 0xfc93, 0xfcf1, 0xfc93, +0xff1c, 0xfe8e, 0xff1c, 0xfe8e, 0x226, 0x168, 0x226, 0x168, 0x308, 0x21e, 0x308, +0x21e, 0x5ab, 0x496, 0x5ab, 0x496, 0x5ab, 0x496, 0x8f0, 0x7b6, 0x8f0, 0x7b6, +0x94b, 0x7f0, 0x94b, 0x7f0, 0xc4d, 0xad6, 0xc4d, 0xad6, 0xe08, 0xc7c, 0xe08, +0xc7c, 0xee2, 0xd46, 0xee2, 0xd46, 0xf75, 0xdd0, 0xf75, 0xdd0, 0xf75, 0xdd0, +0xf85, 0xddc, 0xf85, 0xddc, 0x1038, 0xe91, 0x1038, 0xe91, 0xeeb, 0xd4b, 0xeeb, +0xd4b, 0xd73, 0xbde, 0xd73, 0xbde, 0xd67, 0xbe0, 0xd67, 0xbe0, 0xad7, 0x961, +0xad7, 0x961, 0xad7, 0x961, 0xb44, 0x9e1, 0xb44, 0x9e1, 0xad9, 0x989, 0xad9, +0x989, 0x82b, 0x6ec, 0x82b, 0x6ec, 0x89c, 0x76d, 0x89c, 0x76d, 0x82e, 0x70e, +0x82e, 0x70e, 0x82e, 0x70e, 0x8e9, 0x7d4, 0x8e9, 0x7d4, 0x998, 0x88b, 0x998, +0x88b, 0x8dd, 0x7d5, 0x8dd, 0x7d5, 0x91a, 0x813, 0x91a, 0x813, 0xa83, 0x979, +0xa83, 0x979, 0xb30, 0xa22, 0xb30, 0xa22, 0xb30, 0xa22, 0xb7e, 0xa68, 0xb7e, +0xa68, 0xa93, 0x975, 0xa93, 0x975, 0xa9e, 0x977, 0xa9e, 0x977, 0xafe, 0x9ce, +0xafe, 0x9ce, 0xadb, 0x9a3, 0xadb, 0x9a3, 0xab8, 0x97a, 0xab8, 0x97a, 0xab8, +0x97a, 0x909, 0x7c8, 0x909, 0x7c8, 0x74a, 0x609, 0x74a, 0x609, 0x6df, 0x5a1, +0x6df, 0x5a1, 0x7d5, 0x69e, 0x7d5, 0x69e, 0x9a3, 0x878, 0x9a3, 0x878, 0x9a3, +0x878, 0x880, 0x764, 0x880, 0x764, 0x787, 0x67d, 0x787, 0x67d, 0x85d, 0x768, +0x85d, 0x768, 0x6de, 0x600, 0x6de, 0x600, 0x773, 0x6ad, 0x773, 0x6ad, 0x722, +0x674, 0x722, 0x674, 0x722, 0x674, 0x566, 0x4ce, 0x566, 0x4ce, 0x444, 0x3c1, +0x444, 0x3c1, 0x3c9, 0x357, 0x3c9, 0x357, 0x327, 0x2c2, 0x327, 0x2c2, 0x315, +0x2b8, 0x315, 0x2b8, 0x315, 0x2b8, 0x20f, 0x1b7, 0x20f, 0x1b7, 0x54, 0xfff9, +0x54, 0xfff9, 0xff61, 0xfeff, 0xff61, 0xfeff, 0xff47, 0xfed8, 0xff47, 0xfed8, 0xff2c, +0xfead, 0xff2c, 0xfead, 0xfe29, 0xfd96, 0xfe29, 0xfd96, 0xfe29, 0xfd96, 0xfdf7, 0xfd4d, +0xfdf7, 0xfd4d, 0xfcc7, 0xfc05, 0xfcc7, 0xfc05, 0xfe3c, 0xfd62, 0xfe3c, 0xfd62, 0xffa3, +0xfeb3, 0xffa3, 0xfeb3, 0x19d, 0x9b, 0x19d, 0x9b, 0x40b, 0x2fa, 0x40b, 0x2fa, +0x40b, 0x2fa, 0x4f8, 0x3de, 0x4f8, 0x3de, 0x691, 0x576, 0x691, 0x576, 0x813, +0x6fe, 0x813, 0x6fe, 0x693, 0x58d, 0x693, 0x58d, 0x69b, 0x5ad, 0x69b, 0x5ad, +0x69b, 0x5ad, 0x751, 0x685, 0x751, 0x685, 0x4c1, 0x41f, 0x4c1, 0x41f, 0x377, +0x305, 0x377, 0x305, 0x1e2, 0x1a9, 0x1e2, 0x1a9, 0xffee, 0xfff4, 0xffee, 0xfff4, +0xfe4c, 0xfe95, 0xfe4c, 0xfe95, 0xfe4c, 0xfe95, 0xfd19, 0xfda7, 0xfd19, 0xfda7, 0xfacf, +0xfba5, 0xfacf, 0xfba5, 0xf992, 0xfaad, 0xf992, 0xfaad, 0xf82e, 0xf98e, 0xf82e, 0xf98e, +0xf789, 0xf929, 0xf789, 0xf929, 0xf685, 0xf860, 0xf685, 0xf860, 0xf685, 0xf860, 0xf554, +0xf764, 0xf554, 0xf764, 0xf3e7, 0xf624, 0xf3e7, 0xf624, 0xf1f3, 0xf456, 0xf1f3, 0xf456, +0xf2d2, 0xf553, 0xf2d2, 0xf553, 0xf2a7, 0xf53d, 0xf2a7, 0xf53d, 0xf2a7, 0xf53d, 0xf1ef, +0xf492, 0xf1ef, 0xf492, 0xf15b, 0xf403, 0xf15b, 0xf403, 0xf016, 0xf2bc, 0xf016, 0xf2bc, +0xeff5, 0xf294, 0xeff5, 0xf294, 0xf11b, 0xf3ae, 0xf11b, 0xf3ae, 0xf0a0, 0xf323, 0xf0a0, +0xf323, 0xf0a0, 0xf323, 0xf03e, 0xf2ae, 0xf03e, 0xf2ae, 0xef1c, 0xf178, 0xef1c, 0xf178, +0xefe9, 0xf230, 0xefe9, 0xf230, 0xf1da, 0xf40c, 0xf1da, 0xf40c, 0xf1c3, 0xf3e1, 0xf1c3, +0xf3e1, 0xf1bd, 0xf3c8, 0xf1bd, 0xf3c8, 0xf1bd, 0xf3c8, 0xf2cc, 0xf4c4, 0xf2cc, 0xf4c4, +0xf3c8, 0xf5b0, 0xf3c8, 0xf5b0, 0xf56d, 0xf744, 0xf56d, 0xf744, 0xf6ea, 0xf8b0, 0xf6ea, +0xf8b0, 0xf6cd, 0xf882, 0xf6cd, 0xf882, 0xf6cd, 0xf882, 0xf719, 0xf8bb, 0xf719, 0xf8bb, +0xf784, 0xf911, 0xf784, 0xf911, 0xf9a6, 0xfb19, 0xf9a6, 0xfb19, 0xfb2c, 0xfc82, 0xfb2c, +0xfc82, 0xfb9f, 0xfcd3, 0xfb9f, 0xfcd3, 0xfb8d, 0xfc98, 0xfb8d, 0xfc98, 0xfb8d, 0xfc98, +0xfc10, 0xfcec, 0xfc10, 0xfcec, 0xfd9b, 0xfe42, 0xfd9b, 0xfe42, 0x75, 0xe1, 0x75, +0xe1, 0x237, 0x262, 0x237, 0x262, 0x41c, 0x401, 0x41c, 0x401, 0x55d, 0x4f8, +0x55d, 0x4f8, 0x55d, 0x4f8, 0x688, 0x5d6, 0x688, 0x5d6, 0x9c6, 0x8c6, 0x9c6, +0x8c6, 0xce6, 0xb98, 0xce6, 0xb98, 0xf31, 0xd96, 0xf31, 0xd96, 0x1118, 0xf35, +0x1118, 0xf35, 0x1118, 0xf35, 0x14a2, 0x127a, 0x14a2, 0x127a, 0x17bf, 0x155b, 0x17bf, +0x155b, 0x1b8b, 0x18f1, 0x1b8b, 0x18f1, 0x1c1d, 0x1956, 0x1c1d, 0x1956, 0x1bc5, 0x18dc, +0x1bc5, 0x18dc, 0x1bda, 0x18d9, 0x1bda, 0x18d9, 0x1bda, 0x18d9, 0x1b2f, 0x1820, 0x1b2f, +0x1820, 0x1b99, 0x1887, 0x1b99, 0x1887, 0x1d5e, 0x1a52, 0x1d5e, 0x1a52, 0x1c87, 0x198b, +0x1c87, 0x198b, 0x1cad, 0x19c9, 0x1cad, 0x19c9, 0x1e04, 0x1b3e, 0x1e04, 0x1b3e, 0x1e04, +0x1b3e, 0x1c08, 0x1965, 0x1c08, 0x1965, 0x1c71, 0x19f4, 0x1c71, 0x19f4, 0x1b10, 0x18bc, +0x1b10, 0x18bc, 0x198c, 0x1761, 0x198c, 0x1761, 0x1913, 0x170f, 0x1913, 0x170f, 0x1913, +0x170f, 0x16fd, 0x151f, 0x16fd, 0x151f, 0x14d2, 0x1316, 0x14d2, 0x1316, 0x1385, 0x11e6, +0x1385, 0x11e6, 0x11c8, 0x1043, 0x11c8, 0x1043, 0x10ef, 0xf7e, 0x10ef, 0xf7e, 0xff0, +0xe8e, 0xff0, 0xe8e, 0xff0, 0xe8e, 0xecf, 0xd78, 0xecf, 0xd78, 0xd24, 0xbd3, +0xd24, 0xbd3, 0xc61, 0xb13, 0xc61, 0xb13, 0xce1, 0xb95, 0xce1, 0xb95, 0xbe3, +0xa97, 0xbe3, 0xa97, 0xa76, 0x92a, 0xa76, 0x92a, 0xa76, 0x92a, 0x8a2, 0x757, +0x8a2, 0x757, 0x7cf, 0x687, 0x7cf, 0x687, 0x79c, 0x65a, 0x79c, 0x65a, 0x6ca, +0x591, 0x6ca, 0x591, 0x3ec, 0x2bf, 0x3ec, 0x2bf, 0x3ec, 0x2bf, 0x29c, 0x180, +0x29c, 0x180, 0x59, 0xff52, 0x59, 0xff52, 0x30, 0xff41, 0x30, 0xff41, 0xffce, +0xfefa, 0xffce, 0xfefa, 0xfd44, 0xfc8d, 0xfd44, 0xfc8d, 0xfc23, 0xfb89, 0xfc23, 0xfb89, +0xfc23, 0xfb89, 0xfa30, 0xf9b5, 0xfa30, 0xf9b5, 0xf8fd, 0xf89e, 0xf8fd, 0xf89e, 0xf7fb, +0xf7b6, 0xf7fb, 0xf7b6, 0xf5e2, 0xf5b3, 0xf5e2, 0xf5b3, 0xf408, 0xf3ec, 0xf408, 0xf3ec, +0xf4a1, 0xf491, 0xf4a1, 0xf491, 0xf4a1, 0xf491, 0xf52d, 0xf524, 0xf52d, 0xf524, 0xf5de, +0xf5d7, 0xf5de, 0xf5d7, 0xf559, 0xf54d, 0xf559, 0xf54d, 0xf504, 0xf4ec, 0xf504, 0xf4ec, +0xf5d9, 0xf5b2, 0xf5d9, 0xf5b2, 0xf5d9, 0xf5b2, 0xf74e, 0xf713, 0xf74e, 0xf713, 0xf90e, +0xf8bd, 0xf90e, 0xf8bd, 0xfa14, 0xf9ac, 0xfa14, 0xf9ac, 0xfa61, 0xf9e1, 0xfa61, 0xf9e1, +0xfbe4, 0xfb4d, 0xfbe4, 0xfb4d, 0xfd0c, 0xfc62, 0xfd0c, 0xfc62, 0xfd0c, 0xfc62, 0xfea0, +0xfde8, 0xfea0, 0xfde8, 0x6, 0xff45, 0x6, 0xff45, 0xffda, 0xff18, 0xffda, 0xff18, +0xffba, 0xfeff, 0xffba, 0xfeff, 0x5d, 0xffb1, 0x5d, 0xffb1, 0x1a5, 0x111, 0x1a5, +0x111, 0x1a5, 0x111, 0x1b2, 0x13f, 0x1b2, 0x13f, 0x358, 0x30d, 0x358, 0x30d, +0x1e1, 0x1c6, 0x1e1, 0x1c6, 0x24f, 0x26b, 0x24f, 0x26b, 0x363, 0x3b9, 0x363, +0x3b9, 0x363, 0x3b9, 0x307, 0x39a, 0x307, 0x39a, 0x318, 0x3ea, 0x318, 0x3ea, +0x244, 0x355, 0x244, 0x355, 0x196, 0x2e2, 0x196, 0x2e2, 0x150, 0x2d3, 0x150, +0x2d3, 0x1a0, 0x355, 0x1a0, 0x355, 0x1a0, 0x355, 0x64, 0x243, 0x64, 0x243, +0x18e, 0x38f, 0x18e, 0x38f, 0x153, 0x36d, 0x153, 0x36d, 0xffda, 0x203, 0xffda, +0x203, 0x97, 0x2c6, 0x97, 0x2c6, 0x97, 0x2c6, 0x51, 0x27e, 0x51, 0x27e, +0xffc2, 0x1e3, 0xffc2, 0x1e3, 0x1a7, 0x3b5, 0x1a7, 0x3b5, 0x14b, 0x33f, 0x14b, +0x33f, 0x144, 0x31b, 0x144, 0x31b, 0x253, 0x408, 0x253, 0x408, 0x253, 0x408, +0x1db, 0x36d, 0x1db, 0x36d, 0x22d, 0x39d, 0x22d, 0x39d, 0x3ab, 0x4f9, 0x3ab, +0x4f9, 0x3e5, 0x514, 0x3e5, 0x514, 0x436, 0x54a, 0x436, 0x54a, 0x48d, 0x58c, +0x48d, 0x58c, 0x48d, 0x58c, 0x3ef, 0x4dd, 0x3ef, 0x4dd, 0x45e, 0x541, 0x45e, +0x541, 0x286, 0x365, 0x286, 0x365, 0x7a, 0x159, 0x7a, 0x159, 0xfdfc, 0xfee0, +0xfdfc, 0xfee0, 0xfdfc, 0xfee0, 0xfcb3, 0xfda1, 0xfcb3, 0xfda1, 0xfaa2, 0xfb9b, 0xfaa2, +0xfb9b, 0xf965, 0xfa6c, 0xf965, 0xfa6c, 0xf701, 0xf816, 0xf701, 0xf816, 0xf3b8, 0xf4dc, +0xf3b8, 0xf4dc, 0xf33f, 0xf46e, 0xf33f, 0xf46e, 0xf33f, 0xf46e, 0xf1ae, 0xf2e7, 0xf1ae, +0xf2e7, 0xeffc, 0xf13c, 0xeffc, 0xf13c, 0xef5f, 0xf0a1, 0xef5f, 0xf0a1, 0xeec6, 0xf006, +0xeec6, 0xf006, 0xed8c, 0xeec7, 0xed8c, 0xeec7, 0xeebb, 0xefec, 0xeebb, 0xefec, 0xeebb, +0xefec, 0xee11, 0xef34, 0xee11, 0xef34, 0xed71, 0xee85, 0xed71, 0xee85, 0xeeaa, 0xefad, +0xeeaa, 0xefad, 0xeefa, 0xefec, 0xeefa, 0xefec, 0xefce, 0xf0b0, 0xefce, 0xf0b0, 0xefce, +0xf0b0, 0xf04f, 0xf123, 0xf04f, 0xf123, 0xef55, 0xf01f, 0xef55, 0xf01f, 0xeecb, 0xef8e, +0xeecb, 0xef8e, 0xeec3, 0xef85, 0xeec3, 0xef85, 0xf0c3, 0xf18b, 0xf0c3, 0xf18b, 0xf0cd, +0xf1a1, 0xf0cd, 0xf1a1, 0xf0cd, 0xf1a1, 0xf074, 0xf15b, 0xf074, 0xf15b, 0xf0c2, 0xf1c2, +0xf0c2, 0xf1c2, 0xefd0, 0xf0ef, 0xefd0, 0xf0ef, 0xf084, 0xf1c6, 0xf084, 0xf1c6, 0xf01b, +0xf185, 0xf01b, 0xf185, 0xf0b6, 0xf24b, 0xf0b6, 0xf24b, 0xf0b6, 0xf24b, 0xefd7, 0xf197, +0xefd7, 0xf197, 0xef7e, 0xf168, 0xef7e, 0xf168, 0xefc5, 0xf1d7, 0xefc5, 0xf1d7, 0xefea, +0xf220, 0xefea, 0xf220, 0xef7c, 0xf1d0, 0xef7c, 0xf1d0, 0xef7c, 0xf1d0, 0xeed8, 0xf144, +0xeed8, 0xf144, 0xeeab, 0xf126, 0xeeab, 0xf126, 0xeef2, 0xf172, 0xeef2, 0xf172, 0xef8b, +0xf207, 0xef8b, 0xf207, 0xf124, 0xf392, 0xf124, 0xf392, 0xf19a, 0xf3ef, 0xf19a, 0xf3ef, +0xf19a, 0xf3ef, 0xefc0, 0xf1f2, 0xefc0, 0xf1f2, 0xf1ba, 0xf3c1, 0xf1ba, 0xf3c1, 0xf1ef, +0xf3c2, 0xf1ef, 0xf3c2, 0xf266, 0xf3ff, 0xf266, 0xf3ff, 0xf50a, 0xf664, 0xf50a, 0xf664, +0xf566, 0xf67d, 0xf566, 0xf67d, 0xf566, 0xf67d, 0xf6d5, 0xf7a8, 0xf6d5, 0xf7a8, 0xfab8, +0xfb46, 0xfab8, 0xfb46, 0xfb9e, 0xfbe7, 0xfb9e, 0xfbe7, 0xfd88, 0xfd90, 0xfd88, 0xfd90, +0xffc0, 0xff8b, 0xffc0, 0xff8b, 0xffc0, 0xff8b, 0xef, 0x81, 0xef, 0x81, 0x329, +0x288, 0x329, 0x288, 0x44a, 0x37d, 0x44a, 0x37d, 0x50f, 0x41b, 0x50f, 0x41b, +0x51d, 0x40a, 0x51d, 0x40a, 0x491, 0x363, 0x491, 0x363, 0x491, 0x363, 0x420, +0x2dd, 0x420, 0x2dd, 0x46f, 0x31a, 0x46f, 0x31a, 0x31f, 0x1bc, 0x31f, 0x1bc, +0x2e5, 0x177, 0x2e5, 0x177, 0x2eb, 0x174, 0x2eb, 0x174, 0x361, 0x1e1, 0x361, +0x1e1, 0x361, 0x1e1, 0x2c8, 0x140, 0x2c8, 0x140, 0x311, 0x17f, 0x311, 0x17f, +0x269, 0xce, 0x269, 0xce, 0x164, 0xffbc, 0x164, 0xffbc, 0x3b2, 0x1fe, 0x3b2, +0x1fe, 0x3b2, 0x1fe, 0x2e3, 0x121, 0x2e3, 0x121, 0x1b5, 0xffe4, 0x1b5, 0xffe4, +0x2cf, 0xf0, 0x2cf, 0xf0, 0x2fa, 0x10e, 0x2fa, 0x10e, 0x38e, 0x196, 0x38e, +0x196, 0x592, 0x391, 0x592, 0x391, 0x592, 0x391, 0x553, 0x34d, 0x553, 0x34d, +0x526, 0x320, 0x526, 0x320, 0x626, 0x425, 0x626, 0x425, 0x6b0, 0x4bb, 0x6b0, +0x4bb, 0x518, 0x336, 0x518, 0x336, 0x4be, 0x2f6, 0x4be, 0x2f6, 0x4be, 0x2f6, +0x470, 0x2c8, 0x470, 0x2c8, 0x4c5, 0x345, 0x4c5, 0x345, 0x61a, 0x4c7, 0x61a, +0x4c7, 0x653, 0x533, 0x653, 0x533, 0x612, 0x529, 0x612, 0x529, 0x612, 0x529, +0x43e, 0x38e, 0x43e, 0x38e, 0x3e3, 0x370, 0x3e3, 0x370, 0x58c, 0x553, 0x58c, +0x553, 0x628, 0x629, 0x628, 0x629, 0x4de, 0x515, 0x4de, 0x515, 0x4b1, 0x51a, +0x4b1, 0x51a, 0x4b1, 0x51a, 0x445, 0x4d9, 0x445, 0x4d9, 0x4e2, 0x59a, 0x4e2, +0x59a, 0x5bb, 0x690, 0x5bb, 0x690, 0x66c, 0x754, 0x66c, 0x754, 0x50d, 0x600, +0x50d, 0x600, 0x415, 0x50a, 0x415, 0x50a, 0x415, 0x50a, 0x480, 0x56e, 0x480, +0x56e, 0x4a0, 0x57f, 0x4a0, 0x57f, 0x4bd, 0x586, 0x4bd, 0x586, 0x43d, 0x4e9, +0x43d, 0x4e9, 0x315, 0x39f, 0x315, 0x39f, 0x315, 0x39f, 0x2e9, 0x34d, 0x2e9, +0x34d, 0x5a3, 0x5de, 0x5a3, 0x5de, 0x58c, 0x59f, 0x58c, 0x59f, 0x557, 0x541, +0x557, 0x541, 0x565, 0x527, 0x565, 0x527, 0x5bc, 0x55a, 0x5bc, 0x55a, 0x5bc, +0x55a, 0x6c6, 0x642, 0x6c6, 0x642, 0x900, 0x85f, 0x900, 0x85f, 0x9de, 0x925, +0x9de, 0x925, 0x9f1, 0x923, 0x9f1, 0x923, 0xa62, 0x987, 0xa62, 0x987, 0xa59, +0x974, 0xa59, 0x974, 0xa59, 0x974, 0x9eb, 0x901, 0x9eb, 0x901, 0x7fd, 0x711, +0x7fd, 0x711, 0x723, 0x639, 0x723, 0x639, 0x683, 0x59d, 0x683, 0x59d, 0x5d6, +0x4f7, 0x5d6, 0x4f7, 0x5d6, 0x4f7, 0x513, 0x43d, 0x513, 0x43d, 0x4b6, 0x3e9, +0x4b6, 0x3e9, 0x1ec, 0x129, 0x1ec, 0x129, 0x77, 0xffbd, 0x77, 0xffbd, 0x5f, +0xffb0, 0x5f, 0xffb0, 0xfea9, 0xfe03, 0xfea9, 0xfe03, 0xfea9, 0xfe03, 0xfdb3, 0xfd17, +0xfdb3, 0xfd17, 0xfe39, 0xfda7, 0xfe39, 0xfda7, 0xfdb8, 0xfd31, 0xfdb8, 0xfd31, 0xfe0f, +0xfd94, 0xfe0f, 0xfd94, 0xfef9, 0xfe8b, 0xfef9, 0xfe8b, 0xfef9, 0xfe8b, 0xfdf7, 0xfd99, +0xfdf7, 0xfd99, 0xfcb9, 0xfc6e, 0xfcb9, 0xfc6e, 0xfd26, 0xfcf1, 0xfd26, 0xfcf1, 0xfca1, +0xfc87, 0xfca1, 0xfc87, 0xf98b, 0xf98f, 0xf98b, 0xf98f, 0xf89b, 0xf8c2, 0xf89b, 0xf8c2, +0xf89b, 0xf8c2, 0xf604, 0xf652, 0xf604, 0xf652, 0xf48e, 0xf507, 0xf48e, 0xf507, 0xf356, +0xf3fd, 0xf356, 0xf3fd, 0xf19b, 0xf273, 0xf19b, 0xf273, 0xf056, 0xf162, 0xf056, 0xf162, +0xee88, 0xefc8, 0xee88, 0xefc8, 0xee88, 0xefc8, 0xee81, 0xeff5, 0xee81, 0xeff5, 0xef63, +0xf10a, 0xef63, 0xf10a, 0xef14, 0xf0eb, 0xef14, 0xf0eb, 0xedf6, 0xeff9, 0xedf6, 0xeff9, +0xede4, 0xf00e, 0xede4, 0xf00e, 0xede4, 0xf00e, 0xef44, 0xf18f, 0xef44, 0xf18f, 0xf0db, +0xf33f, 0xf0db, 0xf33f, 0xf227, 0xf49d, 0xf227, 0xf49d, 0xf2e6, 0xf565, 0xf2e6, 0xf565, +0xf1d9, 0xf458, 0xf1d9, 0xf458, 0xf326, 0xf59b, 0xf326, 0xf59b, 0xf326, 0xf59b, 0xf497, +0xf6f9, 0xf497, 0xf6f9, 0xf644, 0xf88a, 0xf644, 0xf88a, 0xf89d, 0xfabe, 0xf89d, 0xfabe, +0xf9a4, 0xfb99, 0xf9a4, 0xfb99, 0xf91b, 0xfadc, 0xf91b, 0xfadc, 0xfb24, 0xfcab, 0xfb24, +0xfcab, 0xfb24, 0xfcab, 0xfd62, 0xfeaa, 0xfd62, 0xfeaa, 0xff77, 0x7c, 0xff77, 0x7c, +0x168, 0x227, 0x168, 0x227, 0x26d, 0x2e4, 0x26d, 0x2e4, 0x664, 0x692, 0x664, +0x692, 0x664, 0x692, 0x99b, 0x980, 0x99b, 0x980, 0xdb9, 0xd57, 0xdb9, 0xd57, +0xfda, 0xf32, 0xfda, 0xf32, 0x1092, 0xfa6, 0x1092, 0xfa6, 0x12f2, 0x11c5, 0x12f2, +0x11c5, 0x165c, 0x14f2, 0x165c, 0x14f2, 0x165c, 0x14f2, 0x1814, 0x1670, 0x1814, 0x1670, +0x199b, 0x17c0, 0x199b, 0x17c0, 0x1a00, 0x17f2, 0x1a00, 0x17f2, 0x196c, 0x172f, 0x196c, +0x172f, 0x1934, 0x16cc, 0x1934, 0x16cc, 0x196f, 0x16e0, 0x196f, 0x16e0, 0x196f, 0x16e0, +0x1a68, 0x17b5, 0x1a68, 0x17b5, 0x195a, 0x1688, 0x195a, 0x1688, 0x1a75, 0x1787, 0x1a75, +0x1787, 0x1bb4, 0x18af, 0x1bb4, 0x18af, 0x1b61, 0x184a, 0x1b61, 0x184a, 0x1b61, 0x184a, +0x1c60, 0x193c, 0x1c60, 0x193c, 0x1d18, 0x19ec, 0x1d18, 0x19ec, 0x1d03, 0x19d4, 0x1d03, +0x19d4, 0x1e38, 0x1b0c, 0x1e38, 0x1b0c, 0x1e82, 0x1b60, 0x1e82, 0x1b60, 0x1e76, 0x1b63, +0x1e76, 0x1b63, 0x1e76, 0x1b63, 0x1c65, 0x196a, 0x1c65, 0x196a, 0x1bf2, 0x1914, 0x1bf2, +0x1914, 0x1b04, 0x184b, 0x1b04, 0x184b, 0x1885, 0x15f9, 0x1885, 0x15f9, 0x1772, 0x1518, +0x1772, 0x1518, 0x1499, 0x1277, 0x1499, 0x1277, 0x1499, 0x1277, 0x129d, 0x10b9, 0x129d, +0x10b9, 0x10c1, 0xf21, 0x10c1, 0xf21, 0xe5a, 0xd01, 0xe5a, 0xd01, 0xb02, 0x9f4, +0xb02, 0x9f4, 0x914, 0x853, 0x914, 0x853, 0x914, 0x853, 0x7d6, 0x762, 0x7d6, +0x762, 0x6d5, 0x6af, 0x6d5, 0x6af, 0x4c2, 0x4e7, 0x4c2, 0x4e7, 0x1ac, 0x21c, +0x1ac, 0x21c, 0xff6d, 0x23, 0xff6d, 0x23, 0xfe20, 0xff17, 0xfe20, 0xff17, 0xfe20, +0xff17, 0xfcfb, 0xfe2d, 0xfcfb, 0xfe2d, 0xfc08, 0xfd6f, 0xfc08, 0xfd6f, 0xfa60, 0xfbf7, +0xfa60, 0xfbf7, 0xf88f, 0xfa4d, 0xf88f, 0xfa4d, 0xf80c, 0xf9ea, 0xf80c, 0xf9ea, 0xf768, +0xf95e, 0xf768, 0xf95e, 0xf768, 0xf95e, 0xf5a6, 0xf7ac, 0xf5a6, 0xf7ac, 0xf494, 0xf6a4, +0xf494, 0xf6a4, 0xf3dc, 0xf5ed, 0xf3dc, 0xf5ed, 0xf26c, 0xf478, 0xf26c, 0xf478, 0xf4a5, +0xf6a6, 0xf4a5, 0xf6a6, 0xf4a5, 0xf6a6, 0xf4af, 0xf69f, 0xf4af, 0xf69f, 0xf48e, 0xf668, +0xf48e, 0xf668, 0xf517, 0xf6d6, 0xf517, 0xf6d6, 0xf535, 0xf6d5, 0xf535, 0xf6d5, 0xf6eb, +0xf868, 0xf6eb, 0xf868, 0xf94c, 0xfaa4, 0xf94c, 0xfaa4, 0xf94c, 0xfaa4, 0xfb16, 0xfc46, +0xfb16, 0xfc46, 0xfc13, 0xfd19, 0xfc13, 0xfd19, 0xfbc2, 0xfc9c, 0xfbc2, 0xfc9c, 0xfbf0, +0xfc9b, 0xfbf0, 0xfc9b, 0xfe58, 0xfed4, 0xfe58, 0xfed4, 0xfe4d, 0xfe99, 0xfe4d, 0xfe99, +0xfe4d, 0xfe99, 0xfee1, 0xfefc, 0xfee1, 0xfefc, 0xfecb, 0xfeb4, 0xfecb, 0xfeb4, 0xff0e, +0xfec6, 0xff0e, 0xfec6, 0xffe5, 0xff6d, 0xffe5, 0xff6d, 0x137, 0x8e, 0x137, 0x8e, +0x137, 0x8e, 0x169, 0x91, 0x169, 0x91, 0x4d, 0xff48, 0x4d, 0xff48, 0x171, +0x40, 0x171, 0x40, 0x297, 0x13e, 0x297, 0x13e, 0x304, 0x188, 0x304, 0x188, +0x4be, 0x322, 0x4be, 0x322, 0x4be, 0x322, 0x558, 0x3a1, 0x558, 0x3a1, 0x4e5, +0x31a, 0x4e5, 0x31a, 0x5f0, 0x416, 0x5f0, 0x416, 0x6c7, 0x4e6, 0x6c7, 0x4e6, +0x71e, 0x53d, 0x71e, 0x53d, 0x75c, 0x582, 0x75c, 0x582, 0x75c, 0x582, 0x838, +0x66e, 0x838, 0x66e, 0x6c0, 0x50c, 0x6c0, 0x50c, 0x646, 0x4b2, 0x646, 0x4b2, +0x599, 0x42a, 0x599, 0x42a, 0x47b, 0x339, 0x47b, 0x339, 0x47b, 0x339, 0x3d5, +0x2c5, 0x3d5, 0x2c5, 0x344, 0x26d, 0x344, 0x26d, 0x2b4, 0x218, 0x2b4, 0x218, +0xf6, 0x9a, 0xf6, 0x9a, 0xff75, 0xff59, 0xff75, 0xff59, 0xfe29, 0xfe50, 0xfe29, +0xfe50, 0xfe29, 0xfe50, 0xfd66, 0xfdcf, 0xfd66, 0xfdcf, 0xfbe9, 0xfc93, 0xfbe9, 0xfc93, +0xfa19, 0xfb02, 0xfa19, 0xfb02, 0xf871, 0xf996, 0xf871, 0xf996, 0xf85b, 0xf9b8, 0xf85b, +0xf9b8, 0xf839, 0xf9ca, 0xf839, 0xf9ca, 0xf839, 0xf9ca, 0xf71f, 0xf8df, 0xf71f, 0xf8df, +0xf4b1, 0xf69b, 0xf4b1, 0xf69b, 0xf301, 0xf510, 0xf301, 0xf510, 0xf24e, 0xf47c, 0xf24e, +0xf47c, 0xf18b, 0xf3d2, 0xf18b, 0xf3d2, 0xf18b, 0xf3d2, 0xf02b, 0xf286, 0xf02b, 0xf286, +0xef8f, 0xf1f9, 0xef8f, 0xf1f9, 0xed90, 0xf005, 0xed90, 0xf005, 0xec08, 0xee83, 0xec08, +0xee83, 0xed45, 0xefc2, 0xed45, 0xefc2, 0xec29, 0xeea4, 0xec29, 0xeea4, 0xec29, 0xeea4, +0xeb6e, 0xede3, 0xeb6e, 0xede3, 0xebd9, 0xee45, 0xebd9, 0xee45, 0xec2a, 0xee89, 0xec2a, +0xee89, 0xeca1, 0xeef1, 0xeca1, 0xeef1, 0xed4c, 0xef89, 0xed4c, 0xef89, 0xed4c, 0xef89, +0xec78, 0xee9f, 0xec78, 0xee9f, 0xed09, 0xef17, 0xed09, 0xef17, 0xed1b, 0xef0c, 0xed1b, +0xef0c, 0xed17, 0xeee8, 0xed17, 0xeee8, 0xee10, 0xefbe, 0xee10, 0xefbe, 0xedcc, 0xef54, +0xedcc, 0xef54, 0xedcc, 0xef54, 0xec95, 0xedf3, 0xec95, 0xedf3, 0xecc0, 0xedf2, 0xecc0, +0xedf2, 0xeda7, 0xeeaa, 0xeda7, 0xeeaa, 0xeee5, 0xefb6, 0xeee5, 0xefb6, 0xf295, 0xf334, +0xf295, 0xf334, 0xf2dc, 0xf346, 0xf2dc, 0xf346, 0xf2dc, 0xf346, 0xf3ae, 0xf3e5, 0xf3ae, +0xf3e5, 0xf5fe, 0xf601, 0xf5fe, 0xf601, 0xf629, 0xf5fb, 0xf629, 0xf5fb, 0xf6f7, 0xf69a, +0xf6f7, 0xf69a, 0xf8bc, 0xf834, 0xf8bc, 0xf834, 0xf8bc, 0xf834, 0xf91d, 0xf86e, 0xf91d, +0xf86e, 0xfae3, 0xfa14, 0xfae3, 0xfa14, 0xfd19, 0xfc2f, 0xfd19, 0xfc2f, 0xfe4f, 0xfd53, +0xfe4f, 0xfd53, 0xfe33, 0xfd2b, 0xfe33, 0xfd2b, 0xfe4d, 0xfd42, 0xfe4d, 0xfd42, 0xfe4d, +0xfd42, 0xfeb4, 0xfdae, 0xfeb4, 0xfdae, 0xfd26, 0xfc2d, 0xfd26, 0xfc2d, 0xfdb0, 0xfccb, +0xfdb0, 0xfccb, 0xfd35, 0xfc6c, 0xfd35, 0xfc6c, 0xfc1a, 0xfb73, 0xfc1a, 0xfb73, 0xfbb1, +0xfb32, 0xfbb1, 0xfb32, 0xfbb1, 0xfb32, 0xfa99, 0xfa46, 0xfa99, 0xfa46, 0xfa3d, 0xfa1a, +0xfa3d, 0xfa1a, 0xfa6a, 0xfa79, 0xfa6a, 0xfa79, 0xfa2d, 0xfa6e, 0xfa2d, 0xfa6e, 0xfb3a, +0xfbad, 0xfb3a, 0xfbad, 0xfb3a, 0xfbad, 0xfc0e, 0xfcb2, 0xfc0e, 0xfcb2, 0xfc04, 0xfcd5, +0xfc04, 0xfcd5, 0xfb2e, 0xfc2a, 0xfb2e, 0xfc2a, 0xf9f8, 0xfb19, 0xf9f8, 0xfb19, 0xf9b1, +0xfaf2, 0xf9b1, 0xfaf2, 0xfaa3, 0xfc00, 0xfaa3, 0xfc00, 0xfaa3, 0xfc00, 0xfa9f, 0xfc11, +0xfa9f, 0xfc11, 0xf961, 0xfae2, 0xf961, 0xfae2, 0xf902, 0xfa8e, 0xf902, 0xfa8e, 0xf890, +0xfa21, 0xf890, 0xfa21, 0xf90e, 0xfa9f, 0xf90e, 0xfa9f, 0xf92e, 0xfabb, 0xf92e, 0xfabb, +0xf92e, 0xfabb, 0xf9d5, 0xfb5c, 0xf9d5, 0xfb5c, 0xf8e5, 0xfa62, 0xf8e5, 0xfa62, 0xf9ee, +0xfb5d, 0xf9ee, 0xfb5d, 0xfc6c, 0xfdcd, 0xfc6c, 0xfdcd, 0xfcf2, 0xfe43, 0xfcf2, 0xfe43, +0xfcf2, 0xfe43, 0xfddb, 0xff1b, 0xfddb, 0xff1b, 0xfe15, 0xff42, 0xfe15, 0xff42, 0xfeea, +0x3, 0xfeea, 0x3, 0xc8, 0x1cd, 0xc8, 0x1cd, 0x1f7, 0x2e5, 0x1f7, 0x2e5, +0x253, 0x329, 0x253, 0x329, 0x253, 0x329, 0x250, 0x30c, 0x250, 0x30c, 0x1c7, +0x266, 0x1c7, 0x266, 0x1c1, 0x240, 0x1c1, 0x240, 0x14d, 0x1a9, 0x14d, 0x1a9, +0xf3, 0x128, 0xf3, 0x128, 0x6, 0x10, 0x6, 0x10, 0x6, 0x10, 0xa0, +0x7a, 0xa0, 0x7a, 0x129, 0xd0, 0x129, 0xd0, 0x138, 0xa8, 0x138, 0xa8, +0x2a2, 0x1d7, 0x2a2, 0x1d7, 0x339, 0x232, 0x339, 0x232, 0x339, 0x232, 0x48c, +0x346, 0x48c, 0x346, 0x7a9, 0x626, 0x7a9, 0x626, 0x94f, 0x78e, 0x94f, 0x78e, +0xafc, 0x8ff, 0xafc, 0x8ff, 0xd89, 0xb54, 0xd89, 0xb54, 0xe05, 0xb9c, 0xe05, +0xb9c, 0xe05, 0xb9c, 0x100d, 0xd78, 0x100d, 0xd78, 0x1277, 0xfbc, 0x1277, 0xfbc, +0x13b7, 0x10df, 0x13b7, 0x10df, 0x13f2, 0x1107, 0x13f2, 0x1107, 0x154f, 0x125a, 0x154f, +0x125a, 0x1555, 0x1261, 0x1555, 0x1261, 0x1555, 0x1261, 0x14e8, 0x11ff, 0x14e8, 0x11ff, +0x1557, 0x1284, 0x1557, 0x1284, 0x1355, 0x10a0, 0x1355, 0x10a0, 0x124e, 0xfc0, 0x124e, +0xfc0, 0x10f6, 0xe97, 0x10f6, 0xe97, 0x10f6, 0xe97, 0xfce, 0xda5, 0xfce, 0xda5, +0xf14, 0xd25, 0xf14, 0xd25, 0xcf1, 0xb3f, 0xcf1, 0xb3f, 0xba1, 0xa2e, 0xba1, +0xa2e, 0xa83, 0x94f, 0xa83, 0x94f, 0x9c3, 0x8cd, 0x9c3, 0x8cd, 0x9c3, 0x8cd, +0x8fc, 0x840, 0x8fc, 0x840, 0x724, 0x69f, 0x724, 0x69f, 0x5a8, 0x553, 0x5a8, +0x553, 0x2f0, 0x2c6, 0x2f0, 0x2c6, 0x12d, 0x127, 0x12d, 0x127, 0xfff6, 0xf, +0xfff6, 0xf, 0xfff6, 0xf, 0xfeb5, 0xfee5, 0xfeb5, 0xfee5, 0xfdb1, 0xfdf2, 0xfdb1, +0xfdf2, 0xfd49, 0xfd95, 0xfd49, 0xfd95, 0xfc99, 0xfcec, 0xfc99, 0xfcec, 0xfc4a, 0xfca0, +0xfc4a, 0xfca0, 0xfc4a, 0xfca0, 0xfc11, 0xfc65, 0xfc11, 0xfc65, 0xf9a0, 0xf9f2, 0xf9a0, +0xf9f2, 0xf9d8, 0xfa26, 0xf9d8, 0xfa26, 0xfa3a, 0xfa84, 0xfa3a, 0xfa84, 0xfae3, 0xfb29, +0xfae3, 0xfb29, 0xfb97, 0xfbda, 0xfb97, 0xfbda, 0xfb97, 0xfbda, 0xfb2d, 0xfb6f, 0xfb2d, +0xfb6f, 0xfb78, 0xfbba, 0xfb78, 0xfbba, 0xfbe0, 0xfc23, 0xfbe0, 0xfc23, 0xfc0f, 0xfc56, +0xfc0f, 0xfc56, 0xfb7b, 0xfbc5, 0xfb7b, 0xfbc5, 0xfafa, 0xfb48, 0xfafa, 0xfb48, 0xfafa, +0xfb48, 0xfac1, 0xfb12, 0xfac1, 0xfb12, 0xfa09, 0xfa5c, 0xfa09, 0xfa5c, 0xfa04, 0xfa56, +0xfa04, 0xfa56, 0xf915, 0xf963, 0xf915, 0xf963, 0xf74d, 0xf794, 0xf74d, 0xf794, 0xf74d, +0xf794, 0xf769, 0xf7a2, 0xf769, 0xf7a2, 0xf649, 0xf672, 0xf649, 0xf672, 0xf619, 0xf62c, +0xf619, 0xf62c, 0xf6b0, 0xf6a7, 0xf6b0, 0xf6a7, 0xf57c, 0xf554, 0xf57c, 0xf554, 0xf4ca, +0xf47e, 0xf4ca, 0xf47e, 0xf4ca, 0xf47e, 0xf51e, 0xf4ac, 0xf51e, 0xf4ac, 0xf4f8, 0xf45d, +0xf4f8, 0xf45d, 0xf5a8, 0xf4e4, 0xf5a8, 0xf4e4, 0xf745, 0xf659, 0xf745, 0xf659, 0xf925, +0xf813, 0xf925, 0xf813, 0xfaa5, 0xf971, 0xfaa5, 0xf971, 0xfaa5, 0xf971, 0xfcbf, 0xfb6e, +0xfcbf, 0xfb6e, 0xfdd3, 0xfc6d, 0xfdd3, 0xfc6d, 0xfd72, 0xfbff, 0xfd72, 0xfbff, 0x32, +0xfeba, 0x32, 0xfeba, 0x33, 0xfec0, 0x33, 0xfec0, 0x33, 0xfec0, 0xae, 0xff4a, +0xae, 0xff4a, 0x1da, 0x8f, 0x1da, 0x8f, 0xffef, 0xfec8, 0xffef, 0xfec8, 0xffee, +0xfef1, 0xffee, 0xfef1, 0xfeed, 0xfe24, 0xfeed, 0xfe24, 0xfe65, 0xfdd6, 0xfe65, 0xfdd6, +0xfe65, 0xfdd6, 0xffa5, 0xff54, 0xffa5, 0xff54, 0xfef9, 0xfeea, 0xfef9, 0xfeea, 0xfdfb, +0xfe2f, 0xfdfb, 0xfe2f, 0xfdd6, 0xfe4c, 0xfdd6, 0xfe4c, 0xfe11, 0xfec7, 0xfe11, 0xfec7, +0xfe11, 0xfec7, 0xfd62, 0xfe52, 0xfd62, 0xfe52, 0xfc4f, 0xfd73, 0xfc4f, 0xfd73, 0xfbbc, +0xfd0e, 0xfbbc, 0xfd0e, 0xfb96, 0xfd0c, 0xfb96, 0xfd0c, 0xfc9d, 0xfe2e, 0xfc9d, 0xfe2e, +0xfe3e, 0xffe0, 0xfe3e, 0xffe0, 0xfe3e, 0xffe0, 0xff11, 0xba, 0xff11, 0xba, 0xff29, +0xcf, 0xff29, 0xcf, 0xe, 0x1a8, 0xe, 0x1a8, 0xff54, 0xdb, 0xff54, 0xdb, +0xf1, 0x25c, 0xf1, 0x25c, 0x30b, 0x455, 0x30b, 0x455, 0x30b, 0x455, 0x2ec, +0x410, 0x2ec, 0x410, 0x3a8, 0x4a3, 0x3a8, 0x4a3, 0x349, 0x41a, 0x349, 0x41a, +0x425, 0x4cb, 0x425, 0x4cb, 0x573, 0x5ee, 0x573, 0x5ee, 0x573, 0x5ee, 0x639, +0x68c, 0x639, 0x68c, 0x806, 0x833, 0x806, 0x833, 0xa7f, 0xa88, 0xa7f, 0xa88, +0xc88, 0xc70, 0xc88, 0xc70, 0xeb9, 0xe83, 0xeb9, 0xe83, 0x107f, 0x102e, 0x107f, +0x102e, 0x107f, 0x102e, 0x1141, 0x10d7, 0x1141, 0x10d7, 0x1226, 0x11a3, 0x1226, 0x11a3, +0x130d, 0x1272, 0x130d, 0x1272, 0x11ff, 0x114c, 0x11ff, 0x114c, 0x118c, 0x10bf, 0x118c, +0x10bf, 0x1297, 0x11ae, 0x1297, 0x11ae, 0x1297, 0x11ae, 0x115c, 0x1055, 0x115c, 0x1055, +0x10fb, 0xfd3, 0x10fb, 0xfd3, 0x11b8, 0x106a, 0x11b8, 0x106a, 0x1103, 0xf8d, 0x1103, +0xf8d, 0x1182, 0xfe1, 0x1182, 0xfe1, 0x1182, 0xfe1, 0x121d, 0x1050, 0x121d, 0x1050, +0x10e9, 0xeed, 0x10e9, 0xeed, 0x10d4, 0xea9, 0x10d4, 0xea9, 0x111b, 0xec3, 0x111b, +0xec3, 0x1222, 0xfa0, 0x1222, 0xfa0, 0x13cc, 0x1124, 0x13cc, 0x1124, 0x13cc, 0x1124, +0x1626, 0x135e, 0x1626, 0x135e, 0x1771, 0x1491, 0x1771, 0x1491, 0x185b, 0x156c, 0x185b, +0x156c, 0x1a28, 0x1735, 0x1a28, 0x1735, 0x1910, 0x1624, 0x1910, 0x1624, 0x17c7, 0x14ee, +0x17c7, 0x14ee, 0x17c7, 0x14ee, 0x15d6, 0x131d, 0x15d6, 0x131d, 0x13f0, 0x1162, 0x13f0, +0x1162, 0x1312, 0x10bb, 0x1312, 0x10bb, 0x10ca, 0xeb6, 0x10ca, 0xeb6, 0xde6, 0xc1e, +0xde6, 0xc1e, 0xde6, 0xc1e, 0xba9, 0xa34, 0xba9, 0xa34, 0x986, 0x86b, 0x986, +0x86b, 0x6d1, 0x613, 0x6d1, 0x613, 0x5a5, 0x547, 0x5a5, 0x547, 0x451, 0x452, +0x451, 0x452, 0xd5, 0x132, 0xd5, 0x132, 0xd5, 0x132, 0xfec3, 0xff78, 0xfec3, +0xff78, 0xfcb3, 0xfdb9, 0xfcb3, 0xfdb9, 0xfab1, 0xfbff, 0xfab1, 0xfbff, 0xfab1, 0xfc3e, +0xfab1, 0xfc3e, 0xfa55, 0xfc17, 0xfa55, 0xfc17, 0xf967, 0xfb52, 0xf967, 0xfb52, 0xf967, +0xfb52, 0xf921, 0xfb2a, 0xf921, 0xfb2a, 0xf91a, 0xfb36, 0xf91a, 0xfb36, 0xf811, 0xfa34, +0xf811, 0xfa34, 0xf77c, 0xf99e, 0xf77c, 0xf99e, 0xf698, 0xf8b0, 0xf698, 0xf8b0, 0xf698, +0xf8b0, 0xf5a9, 0xf7ae, 0xf5a9, 0xf7ae, 0xf4bb, 0xf6a9, 0xf4bb, 0xf6a9, 0xf405, 0xf5d7, +0xf405, 0xf5d7, 0xf3bf, 0xf572, 0xf3bf, 0xf572, 0xf37b, 0xf50d, 0xf37b, 0xf50d, 0xf407, +0xf579, 0xf407, 0xf579, 0xf407, 0xf579, 0xf45a, 0xf5ab, 0xf45a, 0xf5ab, 0xf4f2, 0xf625, +0xf4f2, 0xf625, 0xf685, 0xf79c, 0xf685, 0xf79c, 0xf8ba, 0xf9b6, 0xf8ba, 0xf9b6, 0xfa8e, +0xfb71, 0xfa8e, 0xfb71, 0xfada, 0xfba8, 0xfada, 0xfba8, 0xfada, 0xfba8, 0xfb20, 0xfbd9, +0xfb20, 0xfbd9, 0xfc0c, 0xfcb0, 0xfc0c, 0xfcb0, 0xfb34, 0xfbc3, 0xfb34, 0xfbc3, 0xfc50, +0xfcc9, 0xfc50, 0xfcc9, 0xfe14, 0xfe74, 0xfe14, 0xfe74, 0xfe14, 0xfe74, 0xfd80, 0xfdc5, +0xfd80, 0xfdc5, 0xfe28, 0xfe4e, 0xfe28, 0xfe4e, 0xfeb2, 0xfeb6, 0xfeb2, 0xfeb6, 0xfe4c, +0xfe29, 0xfe4c, 0xfe29, 0xffa7, 0xff59, 0xffa7, 0xff59, 0x13e, 0xc1, 0x13e, 0xc1, +0x13e, 0xc1, 0x168, 0xba, 0x168, 0xba, 0x1c6, 0xe4, 0x1c6, 0xe4, 0x318, +0x202, 0x318, 0x202, 0x477, 0x32e, 0x477, 0x32e, 0x617, 0x49f, 0x617, 0x49f, +0x845, 0x6a1, 0x845, 0x6a1, 0x845, 0x6a1, 0x865, 0x69c, 0x865, 0x69c, 0xb1b, +0x934, 0xb1b, 0x934, 0xe5f, 0xc65, 0xe5f, 0xc65, 0xf65, 0xd62, 0xf65, 0xd62, +0x1086, 0xe87, 0x1086, 0xe87, 0x1086, 0xe87, 0xecb, 0xcdd, 0xecb, 0xcdd, 0xdf3, +0xc22, 0xdf3, 0xc22, 0xcf7, 0xb53, 0xcf7, 0xb53, 0xa65, 0x8f8, 0xa65, 0x8f8, +0x8e5, 0x7be, 0x8e5, 0x7be, 0x6af, 0x5d7, 0x6af, 0x5d7, 0x6af, 0x5d7, 0x47c, +0x3fc, 0x47c, 0x3fc, 0x211, 0x1f2, 0x211, 0x1f2, 0xffbe, 0x4, 0xffbe, 0x4, +0xfd37, 0xfde5, 0xfd37, 0xfde5, 0xf9b5, 0xfacb, 0xf9b5, 0xfacb, 0xf750, 0xf8cd, 0xf750, +0xf8cd, 0xf750, 0xf8cd, 0xf4f9, 0xf6d7, 0xf4f9, 0xf6d7, 0xf27c, 0xf4b5, 0xf27c, 0xf4b5, +0xf040, 0xf2cc, 0xf040, 0xf2cc, 0xee29, 0xf0ff, 0xee29, 0xf0ff, 0xeb2a, 0xee3e, 0xeb2a, +0xee3e, 0xeb2a, 0xee3e, 0xea32, 0xed78, 0xea32, 0xed78, 0xea14, 0xed81, 0xea14, 0xed81, +0xe872, 0xebf9, 0xe872, 0xebf9, 0xe7fe, 0xeb94, 0xe7fe, 0xeb94, 0xe5ec, 0xe985, 0xe5ec, +0xe985, 0xe40a, 0xe79c, 0xe40a, 0xe79c, 0xe40a, 0xe79c, 0xe2e6, 0xe669, 0xe2e6, 0xe669, +0xe226, 0xe592, 0xe226, 0xe592, 0xe248, 0xe598, 0xe248, 0xe598, 0xe240, 0xe56f, 0xe240, +0xe56f, 0xe39d, 0xe6a8, 0xe39d, 0xe6a8, 0xe4df, 0xe7c5, 0xe4df, 0xe7c5, 0xe4df, 0xe7c5, +0xe594, 0xe853, 0xe594, 0xe853, 0xe6fb, 0xe995, 0xe6fb, 0xe995, 0xe829, 0xea9d, 0xe829, +0xea9d, 0xe88b, 0xeadb, 0xe88b, 0xeadb, 0xe919, 0xeb47, 0xe919, 0xeb47, 0xe919, 0xeb47, +0xeacf, 0xecdb, 0xeacf, 0xecdb, 0xebcd, 0xedb8, 0xebcd, 0xedb8, 0xec29, 0xedf3, 0xec29, +0xedf3, 0xed6f, 0xef16, 0xed6f, 0xef16, 0xee20, 0xefa3, 0xee20, 0xefa3, 0xee96, 0xeff2, +0xee96, 0xeff2, 0xee96, 0xeff2, 0xf051, 0xf183, 0xf051, 0xf183, 0xf15c, 0xf260, 0xf15c, +0xf260, 0xf14c, 0xf21d, 0xf14c, 0xf21d, 0xf295, 0xf32d, 0xf295, 0xf32d, 0xf3d8, 0xf434, +0xf3d8, 0xf434, 0xf3d8, 0xf434, 0xf4b4, 0xf4cf, 0xf4b4, 0xf4cf, 0xf5e2, 0xf5b8, 0xf5e2, +0xf5b8, 0xf867, 0xf7f5, 0xf867, 0xf7f5, 0xfabc, 0xfa01, 0xfabc, 0xfa01, 0xfdd5, 0xfcd1, +0xfdd5, 0xfcd1, 0x176, 0x2a, 0x176, 0x2a, 0x176, 0x2a, 0x243, 0xb3, 0x243, +0xb3, 0x538, 0x369, 0x538, 0x369, 0x904, 0x6fd, 0x904, 0x6fd, 0xb40, 0x90a, +0xb40, 0x90a, 0xcc8, 0xa6d, 0xcc8, 0xa6d, 0xd58, 0xae4, 0xd58, 0xae4, 0xd58, +0xae4, 0xdb6, 0xb35, 0xdb6, 0xb35, 0xdf5, 0xb75, 0xdf5, 0xb75, 0xe76, 0xc04, +0xe76, 0xc04, 0xe0d, 0xbb7, 0xe0d, 0xbb7, 0xe30, 0xc02, 0xe30, 0xc02, 0xe30, +0xc02, 0xdef, 0xbf5, 0xdef, 0xbf5, 0xd70, 0xbb5, 0xd70, 0xbb5, 0xd91, 0xc1d, +0xd91, 0xc1d, 0xc20, 0xafb, 0xc20, 0xafb, 0xb06, 0xa36, 0xb06, 0xa36, 0x915, +0x89c, 0x915, 0x89c, 0x915, 0x89c, 0x723, 0x702, 0x723, 0x702, 0x61f, 0x654, +0x61f, 0x654, 0x536, 0x5be, 0x536, 0x5be, 0x416, 0x4ec, 0x416, 0x4ec, 0x180, +0x29c, 0x180, 0x29c, 0x1b, 0x177, 0x1b, 0x177, 0x1b, 0x177, 0xfde2, 0xff74, +0xfde2, 0xff74, 0xfb07, 0xfcc5, 0xfb07, 0xfcc5, 0xf98a, 0xfb6b, 0xf98a, 0xfb6b, 0xf844, +0xfa3d, 0xf844, 0xfa3d, 0xf697, 0xf8a1, 0xf697, 0xf8a1, 0xf697, 0xf8a1, 0xf4fb, 0xf70b, +0xf4fb, 0xf70b, 0xf45f, 0xf66e, 0xf45f, 0xf66e, 0xf348, 0xf54e, 0xf348, 0xf54e, 0xf368, +0xf560, 0xf368, 0xf560, 0xf42d, 0xf611, 0xf42d, 0xf611, 0xf47b, 0xf648, 0xf47b, 0xf648, +0xf47b, 0xf648, 0xf575, 0xf729, 0xf575, 0xf729, 0xf6a2, 0xf83b, 0xf6a2, 0xf83b, 0xf7a7, +0xf923, 0xf7a7, 0xf923, 0xf7a7, 0xf906, 0xf7a7, 0xf906, 0xf84d, 0xf98e, 0xf84d, 0xf98e, +0xf954, 0xfa77, 0xf954, 0xfa77, 0xf954, 0xfa77, 0xf93b, 0xfa40, 0xf93b, 0xfa40, 0xf973, +0xfa59, 0xf973, 0xfa59, 0xfae4, 0xfba8, 0xfae4, 0xfba8, 0xfb37, 0xfbd9, 0xfb37, 0xfbd9, +0xfbc3, 0xfc3f, 0xfbc3, 0xfc3f, 0xfbc3, 0xfc3f, 0xfe93, 0xfee7, 0xfe93, 0xfee7, 0xff79, +0xffa0, 0xff79, 0xffa0, 0x75, 0x6d, 0x75, 0x6d, 0x244, 0x207, 0x244, 0x207, +0x30d, 0x297, 0x30d, 0x297, 0x3c8, 0x314, 0x3c8, 0x314, 0x3c8, 0x314, 0x4c7, +0x3d3, 0x4c7, 0x3d3, 0x5bc, 0x484, 0x5bc, 0x484, 0x5d4, 0x456, 0x5d4, 0x456, +0x8b6, 0x6f1, 0x8b6, 0x6f1, 0xb7a, 0x96d, 0xb7a, 0x96d, 0xccb, 0xa7b, 0xccb, +0xa7b, 0xccb, 0xa7b, 0xf5d, 0xccc, 0xf5d, 0xccc, 0x10e3, 0xe16, 0x10e3, 0xe16, +0x11ad, 0xeac, 0x11ad, 0xeac, 0x114a, 0xe1d, 0x114a, 0xe1d, 0x10d2, 0xd83, 0x10d2, +0xd83, 0x10d2, 0xd83, 0x10b7, 0xd51, 0x10b7, 0xd51, 0x10cc, 0xd5b, 0x10cc, 0xd5b, +0x11b9, 0xe4a, 0x11b9, 0xe4a, 0x11f9, 0xe98, 0x11f9, 0xe98, 0x121d, 0xed8, 0x121d, +0xed8, 0x120f, 0xef1, 0x120f, 0xef1, 0x120f, 0xef1, 0x11ca, 0xedf, 0x11ca, 0xedf, +0x1207, 0xf5a, 0x1207, 0xf5a, 0x1175, 0xf0e, 0x1175, 0xf0e, 0x1018, 0xe00, 0x1018, +0xe00, 0xe87, 0xcc4, 0xe87, 0xcc4, 0xc27, 0xabc, 0xc27, 0xabc, 0xc27, 0xabc, +0xa70, 0x961, 0xa70, 0x961, 0x8e5, 0x831, 0x8e5, 0x831, 0x634, 0x5da, 0x634, +0x5da, 0x4a2, 0x49f, 0x4a2, 0x49f, 0x341, 0x391, 0x341, 0x391, 0x341, 0x391, +0xd5, 0x173, 0xd5, 0x173, 0xfe41, 0xff27, 0xfe41, 0xff27, 0xfbf5, 0xfd1b, 0xfbf5, +0xfd1b, 0xf991, 0xfaf1, 0xf991, 0xfaf1, 0xf6ae, 0xf840, 0xf6ae, 0xf840, 0xf495, 0xf652, +0xf495, 0xf652, 0xf495, 0xf652, 0xf312, 0xf4f3, 0xf312, 0xf4f3, 0xf183, 0xf381, 0xf183, +0xf381, 0xf0b5, 0xf2ca, 0xf0b5, 0xf2ca, 0xf0d3, 0xf2fb, 0xf0d3, 0xf2fb, 0xefb7, 0xf1ed, +0xefb7, 0xf1ed, 0xee72, 0xf0b3, 0xee72, 0xf0b3, 0xee72, 0xf0b3, 0xeeb1, 0xf0f9, 0xeeb1, +0xf0f9, 0xeea9, 0xf0f5, 0xeea9, 0xf0f5, 0xeebc, 0xf10a, 0xeebc, 0xf10a, 0xedd1, 0xf01f, +0xedd1, 0xf01f, 0xec69, 0xeeb5, 0xec69, 0xeeb5, 0xec69, 0xeeb5, 0xea84, 0xeccb, 0xea84, +0xeccb, 0xe95a, 0xeb9a, 0xe95a, 0xeb9a, 0xea5f, 0xec95, 0xea5f, 0xec95, 0xe963, 0xeb8c, +0xe963, 0xeb8c, 0xe99b, 0xebb3, 0xe99b, 0xebb3, 0xeaa4, 0xeca7, 0xeaa4, 0xeca7, 0xeaa4, +0xeca7, 0xea67, 0xec4f, 0xea67, 0xec4f, 0xebf2, 0xedba, 0xebf2, 0xedba, 0xedb3, 0xef56, +0xedb3, 0xef56, 0xef32, 0xf0aa, 0xef32, 0xf0aa, 0xf0c0, 0xf207, 0xf0c0, 0xf207, 0xf3b1, +0xf4c1, 0xf3b1, 0xf4c1, 0xf3b1, 0xf4c1, 0xf5c5, 0xf699, 0xf5c5, 0xf699, 0xf785, 0xf819, +0xf785, 0xf819, 0xfb9c, 0xfbec, 0xfb9c, 0xfbec, 0xfdfb, 0xfe04, 0xfdfb, 0xfe04, 0xffd9, +0xff99, 0xffd9, 0xff99, 0xffd9, 0xff99, 0x2e8, 0x25f, 0x2e8, 0x25f, 0x603, 0x532, +0x603, 0x532, 0x8d9, 0x7c2, 0x8d9, 0x7c2, 0xaa1, 0x948, 0xaa1, 0x948, 0xc09, +0xa72, 0xc09, 0xa72, 0xd60, 0xb92, 0xd60, 0xb92, 0xd60, 0xb92, 0xed5, 0xcd6, +0xed5, 0xcd6, 0x1043, 0xe1a, 0x1043, 0xe1a, 0x117c, 0xf33, 0x117c, 0xf33, 0x12ca, +0x1067, 0x12ca, 0x1067, 0x13dd, 0x116a, 0x13dd, 0x116a, 0x1582, 0x1306, 0x1582, 0x1306, +0x1582, 0x1306, 0x172f, 0x14b2, 0x172f, 0x14b2, 0x1811, 0x159b, 0x1811, 0x159b, 0x18ba, +0x164f, 0x18ba, 0x164f, 0x18a3, 0x164b, 0x18a3, 0x164b, 0x188b, 0x1648, 0x188b, 0x1648, +0x188b, 0x1648, 0x18d5, 0x16ac, 0x18d5, 0x16ac, 0x18cd, 0x16bf, 0x18cd, 0x16bf, 0x1807, +0x1616, 0x1807, 0x1616, 0x187f, 0x16aa, 0x187f, 0x16aa, 0x1990, 0x17d8, 0x1990, 0x17d8, +0x1889, 0x16ec, 0x1889, 0x16ec, 0x1889, 0x16ec, 0x182b, 0x16a8, 0x182b, 0x16a8, 0x1764, +0x15f8, 0x1764, 0x15f8, 0x155b, 0x1404, 0x155b, 0x1404, 0x1367, 0x1222, 0x1367, 0x1222, +0x10bb, 0xf86, 0x10bb, 0xf86, 0x10bb, 0xf86, 0xf01, 0xdda, 0xf01, 0xdda, 0xdc2, +0xca8, 0xdc2, 0xca8, 0xcdb, 0xbcb, 0xcdb, 0xbcb, 0xd12, 0xc0c, 0xd12, 0xc0c, +0xc75, 0xb79, 0xc75, 0xb79, 0xb6a, 0xa77, 0xb6a, 0xa77, 0xb6a, 0xa77, 0xbef, +0xb05, 0xbef, 0xb05, 0xbed, 0xb0d, 0xbed, 0xb0d, 0xb30, 0xa5a, 0xb30, 0xa5a, +0xac9, 0x9fc, 0xac9, 0x9fc, 0x8ad, 0x7ea, 0x8ad, 0x7ea, 0x6ec, 0x633, 0x6ec, +0x633, 0x6ec, 0x633, 0x6ba, 0x60c, 0x6ba, 0x60c, 0x595, 0x4f0, 0x595, 0x4f0, +0x339, 0x29b, 0x339, 0x29b, 0x18c, 0xf5, 0x18c, 0xf5, 0x8d, 0xfffa, 0x8d, +0xfffa, 0x8d, 0xfffa, 0xff60, 0xfece, 0xff60, 0xfece, 0xfff9, 0xff67, 0xfff9, 0xff67, +0x76, 0xffdf, 0x76, 0xffdf, 0xfe8c, 0xfdee, 0xfe8c, 0xfdee, 0xfdc3, 0xfd1c, 0xfdc3, +0xfd1c, 0xfea7, 0xfdf3, 0xfea7, 0xfdf3, 0xfea7, 0xfdf3, 0xff21, 0xfe5d, 0xff21, 0xfe5d, +0xa8, 0xffd3, 0xa8, 0xffd3, 0x220, 0x139, 0x220, 0x139, 0x1c9, 0xce, 0x1c9, +0xce, 0x25a, 0x14b, 0x25a, 0x14b, 0x34c, 0x22b, 0x34c, 0x22b, 0x34c, 0x22b, +0x43a, 0x308, 0x43a, 0x308, 0x571, 0x430, 0x571, 0x430, 0x626, 0x4da, 0x626, +0x4da, 0x6f6, 0x5a2, 0x6f6, 0x5a2, 0x77d, 0x625, 0x77d, 0x625, 0x77d, 0x625, +0x89a, 0x743, 0x89a, 0x743, 0x8f5, 0x7a4, 0x8f5, 0x7a4, 0x8c0, 0x779, 0x8c0, +0x779, 0x88a, 0x752, 0x88a, 0x752, 0x815, 0x6f0, 0x815, 0x6f0, 0x874, 0x767, +0x874, 0x767, 0x874, 0x767, 0x808, 0x716, 0x808, 0x716, 0x85b, 0x786, 0x85b, +0x786, 0x851, 0x79c, 0x851, 0x79c, 0x70c, 0x677, 0x70c, 0x677, 0x63f, 0x5cc, +0x63f, 0x5cc, 0x613, 0x5c0, 0x613, 0x5c0, 0x613, 0x5c0, 0x611, 0x5de, 0x611, +0x5de, 0x5ce, 0x5b9, 0x5ce, 0x5b9, 0x6d2, 0x6da, 0x6d2, 0x6da, 0x6cf, 0x6f2, +0x6cf, 0x6f2, 0x59e, 0x5d9, 0x59e, 0x5d9, 0x59e, 0x5d9, 0x3ee, 0x440, 0x3ee, +0x440, 0x2a8, 0x30d, 0x2a8, 0x30d, 0x1d9, 0x250, 0x1d9, 0x250, 0x6b, 0xf3, +0x6b, 0xf3, 0xff8c, 0x23, 0xff8c, 0x23, 0xfe06, 0xfeac, 0xfe06, 0xfeac, 0xfe06, +0xfeac, 0xfd9b, 0xfe4f, 0xfd9b, 0xfe4f, 0xfc41, 0xfd04, 0xfc41, 0xfd04, 0xfa51, 0xfb23, +0xfa51, 0xfb23, 0xf9b9, 0xfa9b, 0xf9b9, 0xfa9b, 0xf8d2, 0xf9c5, 0xf8d2, 0xf9c5, 0xfa22, +0xfb26, 0xfa22, 0xfb26, 0xfa22, 0xfb26, 0xfb4a, 0xfc60, 0xfb4a, 0xfc60, 0xfb10, 0xfc3a, +0xfb10, 0xfc3a, 0xfb34, 0xfc71, 0xfb34, 0xfc71, 0xfa6d, 0xfbbe, 0xfa6d, 0xfbbe, 0xf8c4, +0xfa27, 0xf8c4, 0xfa27, 0xf8c4, 0xfa27, 0xf8d7, 0xfa4c, 0xf8d7, 0xfa4c, 0xf80b, 0xf98f, +0xf80b, 0xf98f, 0xf65e, 0xf7ef, 0xf65e, 0xf7ef, 0xf726, 0xf8c1, 0xf726, 0xf8c1, 0xf652, +0xf7f3, 0xf652, 0xf7f3, 0xf5d4, 0xf777, 0xf5d4, 0xf777, 0xf5d4, 0xf777, 0xf609, 0xf7aa, +0xf609, 0xf7aa, 0xf4ea, 0xf686, 0xf4ea, 0xf686, 0xf37f, 0xf511, 0xf37f, 0xf511, 0xf2a9, +0xf42c, 0xf2a9, 0xf42c, 0xf3a8, 0xf519, 0xf3a8, 0xf519, 0xf355, 0xf4b2, 0xf355, 0xf4b2, +0xf355, 0xf4b2, 0xf44f, 0xf595, 0xf44f, 0xf595, 0xf55a, 0xf689, 0xf55a, 0xf689, 0xf4da, +0xf5f0, 0xf4da, 0xf5f0, 0xf6bd, 0xf7bc, 0xf6bd, 0xf7bc, 0xf825, 0xf90e, 0xf825, 0xf90e, +0xf825, 0xf90e, 0xf935, 0xfa0b, 0xf935, 0xfa0b, 0xf9a7, 0xfa6c, 0xf9a7, 0xfa6c, 0xf82c, +0xf8e5, 0xf82c, 0xf8e5, 0xf6f6, 0xf7a7, 0xf6f6, 0xf7a7, 0xf6d1, 0xf77f, 0xf6d1, 0xf77f, +0xf67e, 0xf72e, 0xf67e, 0xf72e, 0xf67e, 0xf72e, 0xf596, 0xf64c, 0xf596, 0xf64c, 0xf534, +0xf5f6, 0xf534, 0xf5f6, 0xf47d, 0xf54e, 0xf47d, 0xf54e, 0xf395, 0xf479, 0xf395, 0xf479, +0xf2b2, 0xf3ac, 0xf2b2, 0xf3ac, 0xf1f3, 0xf304, 0xf1f3, 0xf304, 0xf1f3, 0xf304, 0xf197, +0xf2c1, 0xf197, 0xf2c1, 0xf139, 0xf27c, 0xf139, 0xf27c, 0xf089, 0xf1e3, 0xf089, 0xf1e3, +0xf075, 0xf1e5, 0xf075, 0xf1e5, 0xf114, 0xf297, 0xf114, 0xf297, 0xf114, 0xf297, 0xf08e, +0xf222, 0xf08e, 0xf222, 0xf136, 0xf2d6, 0xf136, 0xf2d6, 0xf214, 0xf3be, 0xf214, 0xf3be, +0xf247, 0xf3f6, 0xf247, 0xf3f6, 0xf385, 0xf535, 0xf385, 0xf535, 0xf421, 0xf5d0, 0xf421, +0xf5d0, 0xf421, 0xf5d0, 0xf46d, 0xf617, 0xf46d, 0xf617, 0xf41a, 0xf5be, 0xf41a, 0xf5be, +0xf2f9, 0xf494, 0xf2f9, 0xf494, 0xf20c, 0xf39e, 0xf20c, 0xf39e, 0xf21c, 0xf3a6, 0xf21c, +0xf3a6, 0xf1a5, 0xf326, 0xf1a5, 0xf326, 0xf1a5, 0xf326, 0xf0f3, 0xf26e, 0xf0f3, 0xf26e, +0xf15d, 0xf2d3, 0xf15d, 0xf2d3, 0xf087, 0xf1fb, 0xf087, 0xf1fb, 0xef6b, 0xf0de, 0xef6b, +0xf0de, 0xef50, 0xf0c6, 0xef50, 0xf0c6, 0xef50, 0xf0c6, 0xf088, 0xf202, 0xf088, 0xf202, +0xf179, 0xf2f9, 0xf179, 0xf2f9, 0xf238, 0xf3c0, 0xf238, 0xf3c0, 0xf330, 0xf4bf, 0xf330, +0xf4bf, 0xf37b, 0xf511, 0xf37b, 0xf511, 0xf533, 0xf6ce, 0xf533, 0xf6ce, 0xf533, 0xf6ce, +0xf5a1, 0xf73f, 0xf5a1, 0xf73f, 0xf5bc, 0xf75b, 0xf5bc, 0xf75b, 0xf76c, 0xf906, 0xf76c, +0xf906, 0xf825, 0xf9b7, 0xf825, 0xf9b7, 0xf8f4, 0xfa77, 0xf8f4, 0xfa77, 0xf9c8, 0xfb37, +0xf9c8, 0xfb37, 0xf9c8, 0xfb37, 0xf90c, 0xfa61, 0xf90c, 0xfa61, 0xf84f, 0xf984, 0xf84f, +0xf984, 0xf965, 0xfa75, 0xf965, 0xfa75, 0xfa34, 0xfb1a, 0xfa34, 0xfb1a, 0xfb87, 0xfc3f, +0xfb87, 0xfc3f, 0xfb87, 0xfc3f, 0xfdd6, 0xfe5d, 0xfdd6, 0xfe5d, 0xfecf, 0xff23, 0xfecf, +0xff23, 0x68, 0x89, 0x68, 0x89, 0x337, 0x325, 0x337, 0x325, 0x51f, 0x4de, +0x51f, 0x4de, 0x733, 0x6c4, 0x733, 0x6c4, 0x733, 0x6c4, 0x975, 0x8dd, 0x975, +0x8dd, 0xa91, 0x9d6, 0xa91, 0x9d6, 0xc4d, 0xb75, 0xc4d, 0xb75, 0xd2c, 0xc3d, +0xd2c, 0xc3d, 0xb98, 0xa99, 0xb98, 0xa99, 0xb98, 0xa99, 0x9c3, 0x8ba, 0x9c3, +0x8ba, 0x966, 0x85a, 0x966, 0x85a, 0x92d, 0x823, 0x92d, 0x823, 0x845, 0x742, +0x845, 0x742, 0x808, 0x710, 0x808, 0x710, 0x721, 0x637, 0x721, 0x637, 0x721, +0x637, 0x5fa, 0x51e, 0x5fa, 0x51e, 0x530, 0x464, 0x530, 0x464, 0x4a3, 0x3e6, +0x4a3, 0x3e6, 0x405, 0x354, 0x405, 0x354, 0x2e1, 0x239, 0x2e1, 0x239, 0x1d9, +0x137, 0x1d9, 0x137, 0x1d9, 0x137, 0x172, 0xd2, 0x172, 0xd2, 0x22a, 0x187, +0x22a, 0x187, 0x258, 0x1ae, 0x258, 0x1ae, 0x292, 0x1dc, 0x292, 0x1dc, 0x2fc, +0x237, 0x2fc, 0x237, 0x2fc, 0x237, 0x3d7, 0x300, 0x3d7, 0x300, 0x516, 0x42c, +0x516, 0x42c, 0x45e, 0x360, 0x45e, 0x360, 0x3d1, 0x2be, 0x3d1, 0x2be, 0x462, +0x33c, 0x462, 0x33c, 0x482, 0x34c, 0x482, 0x34c, 0x482, 0x34c, 0x401, 0x2be, +0x401, 0x2be, 0x48e, 0x343, 0x48e, 0x343, 0x50d, 0x3bf, 0x50d, 0x3bf, 0x47d, +0x331, 0x47d, 0x331, 0x5aa, 0x466, 0x5aa, 0x466, 0x5e7, 0x4b0, 0x5e7, 0x4b0, +0x5e7, 0x4b0, 0x564, 0x43f, 0x564, 0x43f, 0x5ab, 0x49b, 0x5ab, 0x49b, 0x460, +0x36a, 0x460, 0x36a, 0x44d, 0x373, 0x44d, 0x373, 0x4d7, 0x41a, 0x4d7, 0x41a, +0x4d7, 0x41a, 0x3d3, 0x332, 0x3d3, 0x332, 0x26f, 0x1e8, 0x26f, 0x1e8, 0x138, +0xc9, 0x138, 0xc9, 0xaa, 0x4f, 0xaa, 0x4f, 0x4, 0xffb7, 0x4, 0xffb7, +0xffd2, 0xff8e, 0xffd2, 0xff8e, 0xffd2, 0xff8e, 0xff54, 0xff12, 0xff54, 0xff12, 0xfec1, +0xfe7c, 0xfec1, 0xfe7c, 0xff57, 0xff08, 0xff57, 0xff08, 0xffc2, 0xff63, 0xffc2, 0xff63, +0x3, 0xff8f, 0x3, 0xff8f, 0xa7, 0x1a, 0xa7, 0x1a, 0xa7, 0x1a, 0x193, +0xeb, 0x193, 0xeb, 0x32e, 0x268, 0x32e, 0x268, 0x54a, 0x468, 0x54a, 0x468, +0x5e3, 0x4e6, 0x5e3, 0x4e6, 0x6e9, 0x5d4, 0x6e9, 0x5d4, 0x6e9, 0x5d4, 0x885, +0x75e, 0x885, 0x75e, 0x893, 0x75e, 0x893, 0x75e, 0x9b5, 0x87b, 0x9b5, 0x87b, +0xa78, 0x93f, 0xa78, 0x93f, 0x90a, 0x7db, 0x90a, 0x7db, 0x868, 0x74a, 0x868, +0x74a, 0x868, 0x74a, 0x7fe, 0x6fa, 0x7fe, 0x6fa, 0x6a8, 0x5c5, 0x6a8, 0x5c5, +0x594, 0x4d9, 0x594, 0x4d9, 0x3b9, 0x32b, 0x3b9, 0x32b, 0x233, 0x1d6, 0x233, +0x1d6, 0x188, 0x15e, 0x188, 0x15e, 0x188, 0x15e, 0x155, 0x160, 0x155, 0x160, +0xd5, 0x113, 0xd5, 0x113, 0xfef9, 0xff69, 0xfef9, 0xff69, 0xfd50, 0xfded, 0xfd50, +0xfded, 0xfb4c, 0xfc12, 0xfb4c, 0xfc12, 0xfb4c, 0xfc12, 0xfa39, 0xfb22, 0xfa39, 0xfb22, +0xf98c, 0xfa91, 0xf98c, 0xfa91, 0xf878, 0xf993, 0xf878, 0xf993, 0xf688, 0xf7b2, 0xf688, +0xf7b2, 0xf4a2, 0xf5d4, 0xf4a2, 0xf5d4, 0xf4dd, 0xf611, 0xf4dd, 0xf611, 0xf4dd, 0xf611, +0xf476, 0xf5a6, 0xf476, 0xf5a6, 0xf3d6, 0xf4ff, 0xf3d6, 0xf4ff, 0xf33d, 0xf45b, 0xf33d, +0xf45b, 0xf323, 0xf434, 0xf323, 0xf434, 0xf369, 0xf46e, 0xf369, 0xf46e, 0xf416, 0xf50e, +0xf416, 0xf50e, 0xf416, 0xf50e, 0xf4b3, 0xf5a0, 0xf4b3, 0xf5a0, 0xf40a, 0xf4ef, 0xf40a, +0xf4ef, 0xf4a6, 0xf587, 0xf4a6, 0xf587, 0xf651, 0xf731, 0xf651, 0xf731, 0xf835, 0xf918, +0xf835, 0xf918, 0xf835, 0xf918, 0xf984, 0xfa6e, 0xf984, 0xfa6e, 0xfaf0, 0xfbe5, 0xfaf0, +0xfbe5, 0xfaec, 0xfbee, 0xfaec, 0xfbee, 0xfa5b, 0xfb6b, 0xfa5b, 0xfb6b, 0xfb44, 0xfc64, +0xfb44, 0xfc64, 0xfa1d, 0xfb4b, 0xfa1d, 0xfb4b, 0xfa1d, 0xfb4b, 0xf9a9, 0xfae2, 0xf9a9, +0xfae2, 0xfa86, 0xfbc6, 0xfa86, 0xfbc6, 0xf9bf, 0xfb03, 0xf9bf, 0xfb03, 0xf9e1, 0xfb21, +0xf9e1, 0xfb21, 0xfbcd, 0xfd01, 0xfbcd, 0xfd01, 0xfca6, 0xfdc8, 0xfca6, 0xfdc8, 0xfca6, +0xfdc8, 0xfd1f, 0xfe25, 0xfd1f, 0xfe25, 0xfed7, 0xffb8, 0xfed7, 0xffb8, 0xb6, 0x16c, +0xb6, 0x16c, 0x293, 0x314, 0x293, 0x314, 0x4ab, 0x4f2, 0x4ab, 0x4f2, 0x4ab, +0x4f2, 0x6a4, 0x6ab, 0x6a4, 0x6ab, 0x893, 0x856, 0x893, 0x856, 0xb01, 0xa7e, +0xb01, 0xa7e, 0xcf0, 0xc26, 0xcf0, 0xc26, 0xf1a, 0xe0c, 0xf1a, 0xe0c, 0x10e8, +0xf96, 0x10e8, 0xf96, 0x10e8, 0xf96, 0x11d9, 0x104a, 0x11d9, 0x104a, 0x1423, 0x125d, +0x1423, 0x125d, 0x14f2, 0x12fc, 0x14f2, 0x12fc, 0x1463, 0x1246, 0x1463, 0x1246, 0x1579, +0x133d, 0x1579, 0x133d, 0x1700, 0x14ae, 0x1700, 0x14ae, 0x1700, 0x14ae, 0x180c, 0x15ae, +0x180c, 0x15ae, 0x1821, 0x15bf, 0x1821, 0x15bf, 0x1774, 0x1516, 0x1774, 0x1516, 0x1606, +0x13b2, 0x1606, 0x13b2, 0x15a4, 0x1360, 0x15a4, 0x1360, 0x15a4, 0x1360, 0x158b, 0x135b, +0x158b, 0x135b, 0x13e1, 0x11c9, 0x13e1, 0x11c9, 0x13cc, 0x11cc, 0x13cc, 0x11cc, 0x12eb, +0x1103, 0x12eb, 0x1103, 0x1182, 0xfb0, 0x1182, 0xfb0, 0x1120, 0xf61, 0x1120, 0xf61, +0x1120, 0xf61, 0x1054, 0xea4, 0x1054, 0xea4, 0xeeb, 0xd47, 0xeeb, 0xd47, 0xc12, +0xa74, 0xc12, 0xa74, 0xb93, 0x9f8, 0xb93, 0x9f8, 0xbdc, 0xa40, 0xbdc, 0xa40, +0xacb, 0x929, 0xacb, 0x929, 0xacb, 0x929, 0x9ca, 0x820, 0x9ca, 0x820, 0x8fa, +0x747, 0x8fa, 0x747, 0x80f, 0x652, 0x80f, 0x652, 0x75a, 0x594, 0x75a, 0x594, +0x7e4, 0x617, 0x7e4, 0x617, 0x7e4, 0x617, 0x7b2, 0x5e2, 0x7b2, 0x5e2, 0x71d, +0x54e, 0x71d, 0x54e, 0x6d5, 0x50c, 0x6d5, 0x50c, 0x72b, 0x56f, 0x72b, 0x56f, +0x757, 0x5ad, 0x757, 0x5ad, 0x8e6, 0x754, 0x8e6, 0x754, 0x8e6, 0x754, 0x835, +0x6c2, 0x835, 0x6c2, 0x565, 0x417, 0x565, 0x417, 0x630, 0x50a, 0x630, 0x50a, +0x4df, 0x3e5, 0x4df, 0x3e5, 0x3b9, 0x2ed, 0x3b9, 0x2ed, 0x3b9, 0x2ed, 0x121, +0x84, 0x121, 0x84, 0xfec6, 0xfe56, 0xfec6, 0xfe56, 0xff4d, 0xff0a, 0xff4d, 0xff0a, +0xfd80, 0xfd65, 0xfd80, 0xfd65, 0xfe69, 0xfe70, 0xfe69, 0xfe70, 0xfde3, 0xfe07, 0xfde3, +0xfe07, 0xfde3, 0xfe07, 0xfd19, 0xfd53, 0xfd19, 0xfd53, 0xfdef, 0xfe38, 0xfdef, 0xfe38, +0xfd8f, 0xfddf, 0xfd8f, 0xfddf, 0xfe6e, 0xfebe, 0xfe6e, 0xfebe, 0xfee4, 0xff2c, 0xfee4, +0xff2c, 0x163, 0x19e, 0x163, 0x19e, 0x163, 0x19e, 0x39d, 0x3c6, 0x39d, 0x3c6, +0x43c, 0x44f, 0x43c, 0x44f, 0x53e, 0x537, 0x53e, 0x537, 0x6d8, 0x6b8, 0x6d8, +0x6b8, 0x7dc, 0x7a3, 0x7dc, 0x7a3, 0x7dc, 0x7a3, 0x74f, 0x6ff, 0x74f, 0x6ff, +0x846, 0x7e2, 0x846, 0x7e2, 0x717, 0x6a4, 0x717, 0x6a4, 0x55f, 0x4e2, 0x55f, +0x4e2, 0x531, 0x4b1, 0x531, 0x4b1, 0x3b1, 0x334, 0x3b1, 0x334, 0x3b1, 0x334, +0x38f, 0x31b, 0x38f, 0x31b, 0x36f, 0x30b, 0x36f, 0x30b, 0x225, 0x1d6, 0x225, +0x1d6, 0x1c9, 0x193, 0x1c9, 0x193, 0x3a3, 0x38b, 0x3a3, 0x38b, 0x426, 0x42e, +0x426, 0x42e, 0x426, 0x42e, 0x243, 0x26c, 0x243, 0x26c, 0x196, 0x1df, 0x196, +0x1df, 0x3b, 0xa3, 0x3b, 0xa3, 0xfed2, 0xff56, 0xfed2, 0xff56, 0xfed0, 0xff6c, +0xfed0, 0xff6c, 0xfed0, 0xff6c, 0xfee7, 0xff95, 0xfee7, 0xff95, 0xfdce, 0xfe8a, 0xfdce, +0xfe8a, 0xfc35, 0xfcf8, 0xfc35, 0xfcf8, 0xfc80, 0xfd45, 0xfc80, 0xfd45, 0xfcb6, 0xfd77, +0xfcb6, 0xfd77, 0xfb1f, 0xfbd6, 0xfb1f, 0xfbd6, 0xfb1f, 0xfbd6, 0xf9cf, 0xfa79, 0xf9cf, +0xfa79, 0xf96e, 0xfa08, 0xf96e, 0xfa08, 0xf8b6, 0xf93e, 0xf8b6, 0xf93e, 0xf86b, 0xf8e0, +0xf86b, 0xf8e0, 0xf89a, 0xf8fc, 0xf89a, 0xf8fc, 0xf82b, 0xf87c, 0xf82b, 0xf87c, 0xf82b, +0xf87c, 0xf7a7, 0xf7ea, 0xf7a7, 0xf7ea, 0xf8b8, 0xf8f1, 0xf8b8, 0xf8f1, 0xfa18, 0xfa4d, +0xfa18, 0xfa4d, 0xfa3d, 0xfa72, 0xfa3d, 0xfa72, 0xfb8e, 0xfbca, 0xfb8e, 0xfbca, 0xfb8e, +0xfbca, 0xfb6b, 0xfbb3, 0xfb6b, 0xfbb3, 0xfa4f, 0xfaa9, 0xfa4f, 0xfaa9, 0xfb0b, 0xfb7b, +0xfb0b, 0xfb7b, 0xfa23, 0xfaaf, 0xfa23, 0xfaaf, 0xf887, 0xf931, 0xf887, 0xf931, 0xf6fa, +0xf7c4, 0xf6fa, 0xf7c4, 0xf6fa, 0xf7c4, 0xf481, 0xf56c, 0xf481, 0xf56c, 0xf227, 0xf332, +0xf227, 0xf332, 0xefe7, 0xf112, 0xefe7, 0xf112, 0xee2d, 0xef73, 0xee2d, 0xef73, 0xeccf, +0xee2e, 0xeccf, 0xee2e, 0xeabe, 0xec30, 0xeabe, 0xec30, 0xeabe, 0xec30, 0xea00, 0xeb81, +0xea00, 0xeb81, 0xea1c, 0xeba5, 0xea1c, 0xeba5, 0xe898, 0xea24, 0xe898, 0xea24, 0xe8ed, +0xea78, 0xe8ed, 0xea78, 0xe9ad, 0xeb32, 0xe9ad, 0xeb32, 0xe9ad, 0xeb32, 0xe9ad, 0xeb28, +0xe9ad, 0xeb28, 0xeb30, 0xec9e, 0xeb30, 0xec9e, 0xecd7, 0xee37, 0xecd7, 0xee37, 0xef68, +0xf0b9, 0xef68, 0xf0b9, 0xf155, 0xf298, 0xf155, 0xf298, 0xf282, 0xf3b9, 0xf282, 0xf3b9, +0xf282, 0xf3b9, 0xf3f9, 0xf527, 0xf3f9, 0xf527, 0xf3fa, 0xf522, 0xf3fa, 0xf522, 0xf323, +0xf44b, 0xf323, 0xf44b, 0xf2f4, 0xf420, 0xf2f4, 0xf420, 0xf2de, 0xf413, 0xf2de, 0xf413, +0xf219, 0xf35d, 0xf219, 0xf35d, 0xf219, 0xf35d, 0xf186, 0xf2dc, 0xf186, 0xf2dc, 0xf11d, +0xf28a, 0xf11d, 0xf28a, 0xf1e0, 0xf367, 0xf1e0, 0xf367, 0xf373, 0xf517, 0xf373, 0xf517, +0xf3eb, 0xf5ab, 0xf3eb, 0xf5ab, 0xf3eb, 0xf5ab, 0xf40b, 0xf5e7, 0xf40b, 0xf5e7, 0xf49a, +0xf68f, 0xf49a, 0xf68f, 0xf399, 0xf5a4, 0xf399, 0xf5a4, 0xf1e7, 0xf402, 0xf1e7, 0xf402, +0xf216, 0xf43d, 0xf216, 0xf43d, 0xf22e, 0xf459, 0xf22e, 0xf459, 0xf22e, 0xf459, 0xf1ac, +0xf3d5, 0xf1ac, 0xf3d5, 0xf18b, 0xf3a9, 0xf18b, 0xf3a9, 0xf31e, 0xf529, 0xf31e, 0xf529, +0xf4e7, 0xf6d8, 0xf4e7, 0xf6d8, 0xf529, 0xf6f9, 0xf529, 0xf6f9, 0xf590, 0xf739, 0xf590, +0xf739, 0xf590, 0xf739, 0xf62f, 0xf7ad, 0xf62f, 0xf7ad, 0xf735, 0xf882, 0xf735, 0xf882, +0xf829, 0xf944, 0xf829, 0xf944, 0xf8db, 0xf9c5, 0xf8db, 0xf9c5, 0xf8fc, 0xf9b3, 0xf8fc, +0xf9b3, 0xf8fc, 0xf9b3, 0xf91c, 0xf9a3, 0xf91c, 0xf9a3, 0xfba0, 0xfbfa, 0xfba0, 0xfbfa, +0xfe93, 0xfec3, 0xfe93, 0xfec3, 0x1f, 0x2c, 0x1f, 0x2c, 0x2b9, 0x2a8, 0x2b9, +0x2a8, 0x4db, 0x4b1, 0x4db, 0x4b1, 0x4db, 0x4b1, 0x6ed, 0x6b1, 0x6ed, 0x6b1, +0x9cc, 0x983, 0x9cc, 0x983, 0x9d4, 0x983, 0x9d4, 0x983, 0x981, 0x92e, 0x981, +0x92e, 0x9a7, 0x954, 0x9a7, 0x954, 0x991, 0x940, 0x991, 0x940, 0x991, 0x940, +0x98b, 0x93f, 0x98b, 0x93f, 0x96d, 0x926, 0x96d, 0x926, 0x91f, 0x8dc, 0x91f, +0x8dc, 0x6cf, 0x68f, 0x6cf, 0x68f, 0x51e, 0x4df, 0x51e, 0x4df, 0x51e, 0x4df, +0x4c5, 0x485, 0x4c5, 0x485, 0x42f, 0x3ea, 0x42f, 0x3ea, 0x358, 0x30c, 0x358, +0x30c, 0x278, 0x221, 0x278, 0x221, 0x289, 0x226, 0x289, 0x226, 0x2e0, 0x26e, +0x2e0, 0x26e, 0x2e0, 0x26e, 0x366, 0x2e6, 0x366, 0x2e6, 0x4f8, 0x46a, 0x4f8, +0x46a, 0x555, 0x4b9, 0x555, 0x4b9, 0x55b, 0x4b4, 0x55b, 0x4b4, 0x6a7, 0x5f8, +0x6a7, 0x5f8, 0x715, 0x662, 0x715, 0x662, 0x715, 0x662, 0x7ae, 0x6fb, 0x7ae, +0x6fb, 0x6c6, 0x61a, 0x6c6, 0x61a, 0x4e4, 0x443, 0x4e4, 0x443, 0x4e3, 0x452, +0x4e3, 0x452, 0x491, 0x416, 0x491, 0x416, 0x491, 0x416, 0x35b, 0x2fa, 0x35b, +0x2fa, 0x207, 0x1c5, 0x207, 0x1c5, 0x1b2, 0x18f, 0x1b2, 0x18f, 0x204, 0x203, +0x204, 0x203, 0x109, 0x12a, 0x109, 0x12a, 0x3f, 0x7f, 0x3f, 0x7f, 0x3f, +0x7f, 0x76, 0xd4, 0x76, 0xd4, 0x72, 0xe8, 0x72, 0xe8, 0x94, 0x11d, +0x94, 0x11d, 0x71, 0x107, 0x71, 0x107, 0x14d, 0x1e8, 0x14d, 0x1e8, 0x14d, +0x1e8, 0x155, 0x1ec, 0x155, 0x1ec, 0x3a, 0xc6, 0x3a, 0xc6, 0x6d, 0xe4, +0x6d, 0xe4, 0x90, 0xeb, 0x90, 0xeb, 0xf8, 0x130, 0xf8, 0x130, 0x7, +0x15, 0x7, 0x15, 0x7, 0x15, 0xff3b, 0xff1a, 0xff3b, 0xff1a, 0xff1a, 0xfec7, +0xff1a, 0xfec7, 0xfe2f, 0xfda6, 0xfe2f, 0xfda6, 0xfd30, 0xfc72, 0xfd30, 0xfc72, 0xfc37, +0xfb44, 0xfc37, 0xfb44, 0xfc7e, 0xfb58, 0xfc7e, 0xfb58, 0xfc7e, 0xfb58, 0xfd7b, 0xfc25, +0xfd7b, 0xfc25, 0xfefe, 0xfd7e, 0xfefe, 0xfd7e, 0xc6, 0xff21, 0xc6, 0xff21, 0x350, +0x18d, 0x350, 0x18d, 0x4a0, 0x2c5, 0x4a0, 0x2c5, 0x4a0, 0x2c5, 0x5c3, 0x3d9, +0x5c3, 0x3d9, 0x858, 0x665, 0x858, 0x665, 0x8f6, 0x701, 0x8f6, 0x701, 0x8b6, +0x6c6, 0x8b6, 0x6c6, 0x85f, 0x67a, 0x85f, 0x67a, 0x85c, 0x686, 0x85c, 0x686, +0x85c, 0x686, 0x8ef, 0x72c, 0x8ef, 0x72c, 0x8e9, 0x73d, 0x8e9, 0x73d, 0x83a, +0x6a7, 0x83a, 0x6a7, 0x752, 0x5da, 0x752, 0x5da, 0x733, 0x5d6, 0x733, 0x5d6, +0x732, 0x5f2, 0x732, 0x5f2, 0x732, 0x5f2, 0x62b, 0x507, 0x62b, 0x507, 0x50d, +0x405, 0x50d, 0x405, 0x3ae, 0x2c2, 0x3ae, 0x2c2, 0x36b, 0x29c, 0x36b, 0x29c, +0x44c, 0x39a, 0x44c, 0x39a, 0x44c, 0x39a, 0x3c8, 0x334, 0x3c8, 0x334, 0x40c, +0x397, 0x40c, 0x397, 0x4ac, 0x459, 0x4ac, 0x459, 0x44c, 0x41e, 0x44c, 0x41e, +0x3f5, 0x3ef, 0x3f5, 0x3ef, 0x3d5, 0x3fb, 0x3d5, 0x3fb, 0x3d5, 0x3fb, 0x32e, +0x384, 0x32e, 0x384, 0x1d7, 0x261, 0x1d7, 0x261, 0xff0e, 0xffd1, 0xff0e, 0xffd1, +0xfc9d, 0xfd9b, 0xfc9d, 0xfd9b, 0xfb9a, 0xfcd7, 0xfb9a, 0xfcd7, 0xf884, 0xfa02, 0xf884, +0xfa02, 0xf884, 0xfa02, 0xf61f, 0xf7e0, 0xf61f, 0xf7e0, 0xf405, 0xf608, 0xf405, 0xf608, +0xf29a, 0xf4de, 0xf29a, 0xf4de, 0xf140, 0xf3c1, 0xf140, 0xf3c1, 0xeee2, 0xf19c, 0xeee2, +0xf19c, 0xeee2, 0xf19c, 0xef1b, 0xf209, 0xef1b, 0xf209, 0xed40, 0xf05a, 0xed40, 0xf05a, +0xeb51, 0xee8d, 0xeb51, 0xee8d, 0xec21, 0xef76, 0xec21, 0xef76, 0xed0b, 0xf06e, 0xed0b, +0xf06e, 0xecf8, 0xf05d, 0xecf8, 0xf05d, 0xecf8, 0xf05d, 0xedce, 0xf12a, 0xedce, 0xf12a, +0xf0c0, 0xf406, 0xf0c0, 0xf406, 0xf138, 0xf45e, 0xf138, 0xf45e, 0xf1fc, 0xf4f6, 0xf1fc, +0xf4f6, 0xf3a6, 0xf66a, 0xf3a6, 0xf66a, 0xf335, 0xf5bb, 0xf335, 0xf5bb, 0xf335, 0xf5bb, +0xf331, 0xf571, 0xf331, 0xf571, 0xf33c, 0xf530, 0xf33c, 0xf530, 0xf406, 0xf5aa, 0xf406, +0xf5aa, 0xf5dd, 0xf72d, 0xf5dd, 0xf72d, 0xf730, 0xf82b, 0xf730, 0xf82b, 0xf730, 0xf82b, +0xf997, 0xfa3d, 0xf997, 0xfa3d, 0xfd18, 0xfd6b, 0xfd18, 0xfd6b, 0xca, 0xcd, 0xca, +0xcd, 0x2ae, 0x264, 0x2ae, 0x264, 0x4fe, 0x46c, 0x4fe, 0x46c, 0x8f1, 0x81c, +0x8f1, 0x81c, 0x8f1, 0x81c, 0xac7, 0x9b3, 0xac7, 0x9b3, 0xc6c, 0xb1f, 0xc6c, +0xb1f, 0xe5c, 0xcdb, 0xe5c, 0xcdb, 0x107b, 0xeca, 0x107b, 0xeca, 0x1208, 0x102b, +0x1208, 0x102b, 0x135e, 0x1158, 0x135e, 0x1158, 0x135e, 0x1158, 0x1599, 0x136c, 0x1599, +0x136c, 0x16fe, 0x14ad, 0x16fe, 0x14ad, 0x17d3, 0x155e, 0x17d3, 0x155e, 0x188b, 0x15f3, +0x188b, 0x15f3, 0x1aa9, 0x17ef, 0x1aa9, 0x17ef, 0x1aa9, 0x17ef, 0x1b5b, 0x187e, 0x1b5b, +0x187e, 0x1b11, 0x1813, 0x1b11, 0x1813, 0x1c2b, 0x190d, 0x1c2b, 0x190d, 0x1cfe, 0x19c1, +0x1cfe, 0x19c1, 0x1ed8, 0x1b7e, 0x1ed8, 0x1b7e, 0x1f78, 0x1c03, 0x1f78, 0x1c03, 0x1f78, +0x1c03, 0x1f8a, 0x1bff, 0x1f8a, 0x1bff, 0x20a3, 0x1d06, 0x20a3, 0x1d06, 0x20ac, 0x1d04, +0x20ac, 0x1d04, 0x2186, 0x1dda, 0x2186, 0x1dda, 0x2110, 0x1d67, 0x2110, 0x1d67, 0x1f18, +0x1b7c, 0x1f18, 0x1b7c, 0x1f18, 0x1b7c, 0x1d64, 0x19de, 0x1d64, 0x19de, 0x1b15, 0x17ae, +0x1b15, 0x17ae, 0x1a62, 0x1725, 0x1a62, 0x1725, 0x1901, 0x15f7, 0x1901, 0x15f7, 0x167c, +0x13ad, 0x167c, 0x13ad, 0x167c, 0x13ad, 0x13e0, 0x1154, 0x13e0, 0x1154, 0x1226, 0xfe5, +0x1226, 0xfe5, 0x10f8, 0xf07, 0x10f8, 0xf07, 0xf1c, 0xd7e, 0xf1c, 0xd7e, 0xdc0, +0xc77, 0xdc0, 0xc77, 0xa6a, 0x976, 0xa6a, 0x976, 0xa6a, 0x976, 0x7d5, 0x735, +0x7d5, 0x735, 0x574, 0x523, 0x574, 0x523, 0x3c2, 0x3bb, 0x3c2, 0x3bb, 0x21b, +0x257, 0x21b, 0x257, 0xfdfc, 0xfe74, 0xfdfc, 0xfe74, 0xfcde, 0xfd87, 0xfcde, 0xfd87, +0xfcde, 0xfd87, 0xfcb9, 0xfd8a, 0xfcb9, 0xfd8a, 0xfc2b, 0xfd1b, 0xfc2b, 0xfd1b, 0xfa63, +0xfb66, 0xfa63, 0xfb66, 0xf88c, 0xf99a, 0xf88c, 0xf99a, 0xf79e, 0xf8ad, 0xf79e, 0xf8ad, +0xf79e, 0xf8ad, 0xf57e, 0xf685, 0xf57e, 0xf685, 0xf3b8, 0xf4b0, 0xf3b8, 0xf4b0, 0xf266, +0xf34b, 0xf266, 0xf34b, 0xf262, 0xf32e, 0xf262, 0xf32e, 0xf289, 0xf339, 0xf289, 0xf339, +0xf374, 0xf407, 0xf374, 0xf407, 0xf374, 0xf407, 0xf4d1, 0xf546, 0xf4d1, 0xf546, 0xf658, +0xf6b0, 0xf658, 0xf6b0, 0xf86d, 0xf8a9, 0xf86d, 0xf8a9, 0xf9d3, 0xf9f6, 0xf9d3, 0xf9f6, +0xfbf3, 0xfbff, 0xfbf3, 0xfbff, 0xfde9, 0xfde0, 0xfde9, 0xfde0, 0xfde9, 0xfde0, 0xfe5b, +0xfe40, 0xfe5b, 0xfe40, 0xfce7, 0xfcbc, 0xfce7, 0xfcbc, 0xfd5d, 0xfd23, 0xfd5d, 0xfd23, +0xff64, 0xff1c, 0xff64, 0xff1c, 0xff51, 0xfefb, 0xff51, 0xfefb, 0xff51, 0xfefb, 0xffb7, +0xff52, 0xffb7, 0xff52, 0xffb5, 0xff3f, 0xffb5, 0xff3f, 0xffc0, 0xff37, 0xffc0, 0xff37, +0x90, 0xfff1, 0x90, 0xfff1, 0x196, 0xdd, 0x196, 0xdd, 0x230, 0x15a, 0x230, +0x15a, 0x230, 0x15a, 0xf6, 0, 0xf6, 0, 0x165, 0x4d, 0x165, 0x4d, +0x2ed, 0x1b1, 0x2ed, 0x1b1, 0x5df, 0x47e, 0x5df, 0x47e, 0x86c, 0x6e7, 0x86c, +0x6e7, 0x86c, 0x6e7, 0x8ba, 0x713, 0x8ba, 0x713, 0xa22, 0x85d, 0xa22, 0x85d, +0xb0e, 0x930, 0xb0e, 0x930, 0xdf7, 0xc07, 0xdf7, 0xc07, 0xf50, 0xd56, 0xf50, +0xd56, 0xca2, 0xaa9, 0xca2, 0xaa9, 0xca2, 0xaa9, 0xb31, 0x942, 0xb31, 0x942, +0xaaa, 0x8d1, 0xaaa, 0x8d1, 0x9f1, 0x839, 0x9f1, 0x839, 0x7c4, 0x639, 0x7c4, +0x639, 0x5bd, 0x469, 0x5bd, 0x469, 0x476, 0x364, 0x476, 0x364, 0x476, 0x364, +0x394, 0x2cc, 0x394, 0x2cc, 0x2ec, 0x275, 0x2ec, 0x275, 0x277, 0x256, 0x277, +0x256, 0x11b, 0x152, 0x11b, 0x152, 0xfec9, 0xff5a, 0xfec9, 0xff5a, 0xfec9, 0xff5a, +0xfe5a, 0xff41, 0xfe5a, 0xff41, 0xfd39, 0xfe73, 0xfd39, 0xfe73, 0xfbea, 0xfd70, 0xfbea, +0xfd70, 0xfaed, 0xfcb7, 0xfaed, 0xfcb7, 0xf704, 0xf909, 0xf704, 0xf909, 0xf4a8, 0xf6db, +0xf4a8, 0xf6db, 0xf4a8, 0xf6db, 0xf589, 0xf7df, 0xf589, 0xf7df, 0xf439, 0xf6a6, 0xf439, +0xf6a6, 0xf275, 0xf4ec, 0xf275, 0xf4ec, 0xf0b6, 0xf32d, 0xf0b6, 0xf32d, 0xeed9, 0xf145, +0xeed9, 0xf145, 0xee6a, 0xf0c2, 0xee6a, 0xf0c2, 0xee6a, 0xf0c2, 0xece0, 0xef1c, 0xece0, +0xef1c, 0xebc9, 0xede2, 0xebc9, 0xede2, 0xea12, 0xec06, 0xea12, 0xec06, 0xe961, 0xeb2e, +0xe961, 0xeb2e, 0xea66, 0xec0b, 0xea66, 0xec0b, 0xea66, 0xec0b, 0xeabc, 0xec3b, 0xeabc, +0xec3b, 0xeb49, 0xeca5, 0xeb49, 0xeca5, 0xeac2, 0xebff, 0xeac2, 0xebff, 0xec3d, 0xed60, +0xec3d, 0xed60, 0xee26, 0xef35, 0xee26, 0xef35, 0xef0e, 0xf00e, 0xef0e, 0xf00e, 0xef0e, +0xf00e, 0xef5a, 0xf050, 0xef5a, 0xf050, 0xed8b, 0xee7b, 0xed8b, 0xee7b, 0xee7e, 0xef6b, +0xee7e, 0xef6b, 0xefed, 0xf0d9, 0xefed, 0xf0d9, 0xefcd, 0xf0b8, 0xefcd, 0xf0b8, 0xef94, +0xf07d, 0xef94, 0xf07d, 0xef94, 0xf07d, 0xeef7, 0xefdb, 0xeef7, 0xefdb, 0xf03e, 0xf119, +0xf03e, 0xf119, 0xf134, 0xf201, 0xf134, 0xf201, 0xf27e, 0xf337, 0xf27e, 0xf337, 0xf352, +0xf3f2, 0xf352, 0xf3f2, 0xf352, 0xf3f2, 0xf274, 0xf2f3, 0xf274, 0xf2f3, 0xf4fe, 0xf557, +0xf4fe, 0xf557, 0xf931, 0xf95d, 0xf931, 0xf95d, 0xfb52, 0xfb4e, 0xfb52, 0xfb4e, 0xfd0b, +0xfcd5, 0xfd0b, 0xfcd5, 0xff58, 0xfeed, 0xff58, 0xfeed, 0xff58, 0xfeed, 0x32, 0xff95, +0x32, 0xff95, 0x1c6, 0xfa, 0x1c6, 0xfa, 0x382, 0x28d, 0x382, 0x28d, 0x339, +0x223, 0x339, 0x223, 0x1d0, 0xa1, 0x1d0, 0xa1, 0xff6c, 0xfe30, 0xff6c, 0xfe30, +0xff6c, 0xfe30, 0xffb3, 0xfe76, 0xffb3, 0xfe76, 0xff98, 0xfe67, 0xff98, 0xfe67, 0xfd6a, +0xfc52, 0xfd6a, 0xfc52, 0xfba1, 0xfaae, 0xfba1, 0xfaae, 0xfa99, 0xf9d8, 0xfa99, 0xf9d8, +0xfa99, 0xf9d8, 0xfb32, 0xfaad, 0xfb32, 0xfaad, 0xfbd9, 0xfb99, 0xfbd9, 0xfb99, 0xfb73, +0xfb7f, 0xfb73, 0xfb7f, 0xf9cf, 0xfa2a, 0xf9cf, 0xfa2a, 0xf8f6, 0xf9a2, 0xf8f6, 0xf9a2, +0xf8a5, 0xf9a1, 0xf8a5, 0xf9a1, 0xf8a5, 0xf9a1, 0xf7c4, 0xf90b, 0xf7c4, 0xf90b, 0xf68c, +0xf818, 0xf68c, 0xf818, 0xf539, 0xf701, 0xf539, 0xf701, 0xf3ca, 0xf5c4, 0xf3ca, 0xf5c4, +0xf3d3, 0xf5f2, 0xf3d3, 0xf5f2, 0xf4ef, 0xf727, 0xf4ef, 0xf727, 0xf4ef, 0xf727, 0xf3e0, +0xf623, 0xf3e0, 0xf623, 0xf299, 0xf4da, 0xf299, 0xf4da, 0xf146, 0xf378, 0xf146, 0xf378, +0xf13c, 0xf354, 0xf13c, 0xf354, 0xf143, 0xf338, 0xf143, 0xf338, 0xf143, 0xf338, 0xf0f3, +0xf2be, 0xf0f3, 0xf2be, 0xf15f, 0xf2fa, 0xf15f, 0xf2fa, 0xf007, 0xf16f, 0xf007, 0xf16f, +0xf110, 0xf245, 0xf110, 0xf245, 0xf21e, 0xf322, 0xf21e, 0xf322, 0xf325, 0xf3fb, 0xf325, +0xf3fb, 0xf325, 0xf3fb, 0xf5d8, 0xf687, 0xf5d8, 0xf687, 0xf6d5, 0xf764, 0xf6d5, 0xf764, +0xf93f, 0xf9b5, 0xf93f, 0xf9b5, 0xfae2, 0xfb47, 0xfae2, 0xfb47, 0xfbc4, 0xfc20, 0xfbc4, +0xfc20, 0xfd1b, 0xfd75, 0xfd1b, 0xfd75, 0xfd1b, 0xfd75, 0xfce7, 0xfd44, 0xfce7, 0xfd44, +0xfd23, 0xfd89, 0xfd23, 0xfd89, 0xfcf2, 0xfd63, 0xfcf2, 0xfd63, 0xfd6d, 0xfde9, 0xfd6d, +0xfde9, 0xfd71, 0xfdf7, 0xfd71, 0xfdf7, 0xfd71, 0xfdf7, 0xfcc8, 0xfd54, 0xfcc8, 0xfd54, +0xfd4b, 0xfdd8, 0xfd4b, 0xfdd8, 0xfcf3, 0xfd7a, 0xfcf3, 0xfd7a, 0xfd8b, 0xfe03, 0xfd8b, +0xfe03, 0xfe18, 0xfe78, 0xfe18, 0xfe78, 0xfeb6, 0xfef5, 0xfeb6, 0xfef5, 0xfeb6, 0xfef5, +0x46, 0x5b, 0x46, 0x5b, 0x246, 0x229, 0x246, 0x229, 0x58f, 0x539, 0x58f, +0x539, 0x850, 0x7bd, 0x850, 0x7bd, 0xb67, 0xa94, 0xb67, 0xa94, 0xe46, 0xd34, +0xe46, 0xd34, 0xe46, 0xd34, 0x10ba, 0xf6a, 0x10ba, 0xf6a, 0x1324, 0x119d, 0x1324, +0x119d, 0x14b4, 0x12fe, 0x14b4, 0x12fe, 0x165f, 0x1484, 0x165f, 0x1484, 0x16cd, 0x14da, +0x16cd, 0x14da, 0x16cd, 0x14da, 0x1613, 0x1416, 0x1613, 0x1416, 0x155a, 0x1363, 0x155a, +0x1363, 0x1449, 0x1267, 0x1449, 0x1267, 0x134d, 0x118f, 0x134d, 0x118f, 0x11d5, 0x104b, +0x11d5, 0x104b, 0xf9e, 0xe54, 0xf9e, 0xe54, 0xf9e, 0xe54, 0xdd8, 0xcda, 0xdd8, +0xcda, 0xc22, 0xb78, 0xc22, 0xb78, 0xa53, 0xa03, 0xa53, 0xa03, 0x8e9, 0x8f5, +0x8e9, 0x8f5, 0x7a0, 0x808, 0x7a0, 0x808, 0x616, 0x6d7, 0x616, 0x6d7, 0x616, +0x6d7, 0x486, 0x599, 0x486, 0x599, 0x33a, 0x494, 0x33a, 0x494, 0x219, 0x3b1, +0x219, 0x3b1, 0xd9, 0x29f, 0xd9, 0x29f, 0xffc8, 0x1af, 0xffc8, 0x1af, 0xffc8, +0x1af, 0xff41, 0x139, 0xff41, 0x139, 0xfdf0, 0xffea, 0xfdf0, 0xffea, 0xfca6, 0xfe95, +0xfca6, 0xfe95, 0xfb5c, 0xfd33, 0xfb5c, 0xfd33, 0xf9d2, 0xfb86, 0xf9d2, 0xfb86, 0xf8ad, +0xfa35, 0xf8ad, 0xfa35, 0xf8ad, 0xfa35, 0xf78d, 0xf8e3, 0xf78d, 0xf8e3, 0xf6c2, 0xf7e2, +0xf6c2, 0xf7e2, 0xf687, 0xf772, 0xf687, 0xf772, 0xf79d, 0xf854, 0xf79d, 0xf854, 0xf874, +0xf8fb, 0xf874, 0xf8fb, 0xf874, 0xf8fb, 0xf993, 0xf9f0, 0xf993, 0xf9f0, 0xfad2, 0xfb0e, +0xfad2, 0xfb0e, 0xfbc0, 0xfbe2, 0xfbc0, 0xfbe2, 0xfd6b, 0xfd7b, 0xfd6b, 0xfd7b, 0xfdf7, +0xfe00, 0xfdf7, 0xfe00, 0xfe4d, 0xfe55, 0xfe4d, 0xfe55, 0xfe4d, 0xfe55, 0xfe24, 0xfe32, +0xfe24, 0xfe32, 0xfdce, 0xfde8, 0xfdce, 0xfde8, 0xfd55, 0xfd7d, 0xfd55, 0xfd7d, 0xfc8d, +0xfcc3, 0xfc8d, 0xfcc3, 0xfcc2, 0xfd05, 0xfcc2, 0xfd05, 0xfc23, 0xfc6f, 0xfc23, 0xfc6f, +0xfc23, 0xfc6f, 0xfb55, 0xfba4, 0xfb55, 0xfba4, 0xfaf6, 0xfb40, 0xfaf6, 0xfb40, 0xfb20, +0xfb5e, 0xfb20, 0xfb5e, 0xfb6d, 0xfb94, 0xfb6d, 0xfb94, 0xfb66, 0xfb6c, 0xfb66, 0xfb6c, +0xfb66, 0xfb6c, 0xfbdd, 0xfbba, 0xfbdd, 0xfbba, 0xfc44, 0xfbf0, 0xfc44, 0xfbf0, 0xfd8c, +0xfd00, 0xfd8c, 0xfd00, 0xff0a, 0xfe41, 0xff0a, 0xfe41, 0xf6, 0xffef, 0xf6, 0xffef, +0x338, 0x1f4, 0x338, 0x1f4, 0x338, 0x1f4, 0x489, 0x30c, 0x489, 0x30c, 0x6ff, +0x54f, 0x6ff, 0x54f, 0x8d4, 0x6fc, 0x8d4, 0x6fc, 0xa14, 0x820, 0xa14, 0x820, +0xb51, 0x94f, 0xb51, 0x94f, 0xaed, 0x8ee, 0xaed, 0x8ee, 0xaed, 0x8ee, 0xa7f, +0x894, 0xa7f, 0x894, 0x953, 0x78e, 0x953, 0x78e, 0x7df, 0x650, 0x7df, 0x650, +0x660, 0x517, 0x660, 0x517, 0x4e1, 0x3eb, 0x4e1, 0x3eb, 0x4e1, 0x3eb, 0x393, +0x2fd, 0x393, 0x2fd, 0x1e5, 0x1b6, 0x1e5, 0x1b6, 0xf2, 0x12f, 0xf2, 0x12f, +0xff5f, 0xa, 0xff5f, 0xa, 0xfdcc, 0xfee4, 0xfdcc, 0xfee4, 0xfcea, 0xfe67, 0xfcea, +0xfe67, 0xfcea, 0xfe67, 0xfbbf, 0xfd99, 0xfbbf, 0xfd99, 0xfa80, 0xfcaa, 0xfa80, 0xfcaa, +0xf98e, 0xfbf8, 0xf98e, 0xfbf8, 0xf94b, 0xfbe5, 0xf94b, 0xfbe5, 0xf924, 0xfbdb, 0xf924, +0xfbdb, 0xf965, 0xfc25, 0xf965, 0xfc25, 0xf965, 0xfc25, 0xf9a6, 0xfc5d, 0xf9a6, 0xfc5d, +0xf9ab, 0xfc46, 0xf9ab, 0xfc46, 0xf9ca, 0xfc38, 0xf9ca, 0xfc38, 0xfa21, 0xfc54, 0xfa21, +0xfc54, 0xfa7f, 0xfc6b, 0xfa7f, 0xfc6b, 0xfa7f, 0xfc6b, 0xfa89, 0xfc24, 0xfa89, 0xfc24, +0xfadb, 0xfc1f, 0xfadb, 0xfc1f, 0xfb42, 0xfc2c, 0xfb42, 0xfc2c, 0xfc5b, 0xfceb, 0xfc5b, +0xfceb, 0xfdee, 0xfe26, 0xfdee, 0xfe26, 0xffae, 0xff93, 0xffae, 0xff93, 0xffae, 0xff93, +0x1fd, 0x196, 0x1fd, 0x196, 0x42e, 0x383, 0x42e, 0x383, 0x68f, 0x5a8, 0x68f, +0x5a8, 0x8a3, 0x78b, 0x8a3, 0x78b, 0xac5, 0x984, 0xac5, 0x984, 0xc90, 0xb2e, +0xc90, 0xb2e, 0xc90, 0xb2e, 0xdb5, 0xc39, 0xdb5, 0xc39, 0xea9, 0xd17, 0xea9, +0xd17, 0xefa, 0xd57, 0xefa, 0xd57, 0xfa5, 0xdf1, 0xfa5, 0xdf1, 0xfc5, 0xdfe, +0xfc5, 0xdfe, 0xfc5, 0xdfe, 0xfe8, 0xe0d, 0xfe8, 0xe0d, 0x1014, 0xe1f, 0x1014, +0xe1f, 0x1056, 0xe43, 0x1056, 0xe43, 0x117f, 0xf48, 0x117f, 0xf48, 0x1219, 0xfb7, +0x1219, 0xfb7, 0x1309, 0x1077, 0x1309, 0x1077, 0x1309, 0x1077, 0x13f6, 0x112e, 0x13f6, +0x112e, 0x1520, 0x1220, 0x1520, 0x1220, 0x1668, 0x132e, 0x1668, 0x132e, 0x17d5, 0x1461, +0x17d5, 0x1461, 0x1995, 0x15eb, 0x1995, 0x15eb, 0x1aaa, 0x16d1, 0x1aaa, 0x16d1, 0x1aaa, +0x16d1, 0x1c41, 0x1842, 0x1c41, 0x1842, 0x1d70, 0x1956, 0x1d70, 0x1956, 0x1e61, 0x1a39, +0x1e61, 0x1a39, 0x1ecf, 0x1aaa, 0x1ecf, 0x1aaa, 0x1eaf, 0x1a9e, 0x1eaf, 0x1a9e, 0x1eaf, +0x1a9e, 0x1e48, 0x1a5d, 0x1e48, 0x1a5d, 0x1cad, 0x18fa, 0x1cad, 0x18fa, 0x1b02, 0x1799, +0x1b02, 0x1799, 0x1909, 0x15fa, 0x1909, 0x15fa, 0x1683, 0x13dc, 0x1683, 0x13dc, 0x13ef, +0x11bd, 0x13ef, 0x11bd, 0x13ef, 0x11bd, 0x1123, 0xf6f, 0x1123, 0xf6f, 0xdd7, 0xca8, +0xdd7, 0xca8, 0xb1f, 0xa78, 0xb1f, 0xa78, 0x8b7, 0x897, 0x8b7, 0x897, 0x612, +0x675, 0x612, 0x675, 0x34e, 0x42d, 0x34e, 0x42d, 0x34e, 0x42d, 0x98, 0x1e9, +0x98, 0x1e9, 0xfeec, 0xa2, 0xfeec, 0xa2, 0xfccc, 0xfed9, 0xfccc, 0xfed9, 0xfae7, +0xfd3b, 0xfae7, 0xfd3b, 0xf9f0, 0xfc7b, 0xf9f0, 0xfc7b, 0xf9f0, 0xfc7b, 0xf8d4, 0xfb85, +0xf8d4, 0xfb85, 0xf7ad, 0xfa74, 0xf7ad, 0xfa74, 0xf69c, 0xf96b, 0xf69c, 0xf96b, 0xf5b7, +0xf880, 0xf5b7, 0xf880, 0xf4b9, 0xf771, 0xf4b9, 0xf771, 0xf3cc, 0xf669, 0xf3cc, 0xf669, +0xf3cc, 0xf669, 0xf29d, 0xf51a, 0xf29d, 0xf51a, 0xf1b3, 0xf40b, 0xf1b3, 0xf40b, 0xf13b, +0xf36c, 0xf13b, 0xf36c, 0xf129, 0xf334, 0xf129, 0xf334, 0xf168, 0xf34e, 0xf168, 0xf34e, +0xf194, 0xf35a, 0xf194, 0xf35a, 0xf194, 0xf35a, 0xf24f, 0xf3f8, 0xf24f, 0xf3f8, 0xf309, +0xf49a, 0xf309, 0xf49a, 0xf3c8, 0xf546, 0xf3c8, 0xf546, 0xf4b2, 0xf620, 0xf4b2, 0xf620, +0xf58e, 0xf6f0, 0xf58e, 0xf6f0, 0xf58e, 0xf6f0, 0xf6ae, 0xf805, 0xf6ae, 0xf805, 0xf79c, +0xf8e8, 0xf79c, 0xf8e8, 0xf80d, 0xf94c, 0xf80d, 0xf94c, 0xf848, 0xf977, 0xf848, 0xf977, +0xf8a4, 0xf9be, 0xf8a4, 0xf9be, 0xf87c, 0xf97a, 0xf87c, 0xf97a, 0xf87c, 0xf97a, 0xf81a, +0xf8f4, 0xf81a, 0xf8f4, 0xf8a8, 0xf955, 0xf8a8, 0xf955, 0xf945, 0xf9bd, 0xf945, 0xf9bd, +0xf9e1, 0xfa1c, 0xf9e1, 0xfa1c, 0xfb52, 0xfb47, 0xfb52, 0xfb47, 0xfd14, 0xfcbb, 0xfd14, +0xfcbb, 0xfd14, 0xfcbb, 0xfea5, 0xfdfa, 0xfea5, 0xfdfa, 0x56, 0xff55, 0x56, 0xff55, +0x210, 0xba, 0x210, 0xba, 0x3c7, 0x21c, 0x3c7, 0x21c, 0x56a, 0x370, 0x56a, +0x370, 0x56a, 0x370, 0x673, 0x430, 0x673, 0x430, 0x7ee, 0x56e, 0x7ee, 0x56e, +0x936, 0x685, 0x936, 0x685, 0xa10, 0x73c, 0xa10, 0x73c, 0xb23, 0x83d, 0xb23, +0x83d, 0xb56, 0x86e, 0xb56, 0x86e, 0xb56, 0x86e, 0xb24, 0x84c, 0xb24, 0x84c, +0xad0, 0x81a, 0xad0, 0x81a, 0xa57, 0x7d4, 0xa57, 0x7d4, 0x97e, 0x73e, 0x97e, +0x73e, 0x872, 0x683, 0x872, 0x683, 0x872, 0x683, 0x71d, 0x58c, 0x71d, 0x58c, +0x513, 0x3e8, 0x513, 0x3e8, 0x33a, 0x27d, 0x33a, 0x27d, 0x137, 0xeb, 0x137, +0xeb, 0xfe80, 0xfea8, 0xfe80, 0xfea8, 0xfbf3, 0xfc8c, 0xfbf3, 0xfc8c, 0xfbf3, 0xfc8c, +0xf91d, 0xfa22, 0xf91d, 0xfa22, 0xf60b, 0xf778, 0xf60b, 0xf778, 0xf3d2, 0xf59d, 0xf3d2, +0xf59d, 0xf14c, 0xf36d, 0xf14c, 0xf36d, 0xef9b, 0xf206, 0xef9b, 0xf206, 0xee44, 0xf0ee, +0xee44, 0xf0ee, 0xee44, 0xf0ee, 0xec93, 0xef70, 0xec93, 0xef70, 0xeb96, 0xee9b, 0xeb96, +0xee9b, 0xe9ff, 0xed22, 0xe9ff, 0xed22, 0xe8d2, 0xec09, 0xe8d2, 0xec09, 0xe7cf, 0xeb12, +0xe7cf, 0xeb12, 0xe7cf, 0xeb12, 0xe6db, 0xea22, 0xe6db, 0xea22, 0xe640, 0xe986, 0xe640, +0xe986, 0xe61e, 0xe95f, 0xe61e, 0xe95f, 0xe69c, 0xe9d3, 0xe69c, 0xe9d3, 0xe6f7, 0xea22, +0xe6f7, 0xea22, 0xe793, 0xeab1, 0xe793, 0xeab1, 0xe793, 0xeab1, 0xe82a, 0xeb38, 0xe82a, +0xeb38, 0xe91a, 0xec18, 0xe91a, 0xec18, 0xe9d4, 0xecc0, 0xe9d4, 0xecc0, 0xea67, 0xed3f, +0xea67, 0xed3f, 0xeaef, 0xedb0, 0xeaef, 0xedb0, 0xeb50, 0xedf8, 0xeb50, 0xedf8, 0xeb50, +0xedf8, 0xec12, 0xee9c, 0xec12, 0xee9c, 0xec74, 0xeedc, 0xec74, 0xeedc, 0xecea, 0xef28, +0xecea, 0xef28, 0xedb3, 0xefc2, 0xedb3, 0xefc2, 0xedfe, 0xefd6, 0xedfe, 0xefd6, 0xedfe, +0xefd6, 0xee5a, 0xeff3, 0xee5a, 0xeff3, 0xef5e, 0xf0b1, 0xef5e, 0xf0b1, 0xf063, 0xf169, +0xf063, 0xf169, 0xf162, 0xf213, 0xf162, 0xf213, 0xf2b4, 0xf30b, 0xf2b4, 0xf30b, 0xf4a6, +0xf49f, 0xf4a6, 0xf49f, 0xf4a6, 0xf49f, 0xf6b7, 0xf64e, 0xf6b7, 0xf64e, 0xf987, 0xf8bc, +0xf987, 0xf8bc, 0xfcb3, 0xfb88, 0xfcb3, 0xfb88, 0xffac, 0xfe23, 0xffac, 0xfe23, 0x30a, +0x129, 0x30a, 0x129, 0x5e2, 0x3af, 0x5e2, 0x3af, 0x5e2, 0x3af, 0x8a4, 0x62a, +0x8a4, 0x62a, 0xa94, 0x7de, 0xa94, 0x7de, 0xc34, 0x94d, 0xc34, 0x94d, 0xdb8, +0xaaf, 0xdb8, 0xaaf, 0xea5, 0xb87, 0xea5, 0xb87, 0xea5, 0xb87, 0xfb6, 0xc91, +0xfb6, 0xc91, 0x103b, 0xd1d, 0x103b, 0xd1d, 0x1098, 0xd8f, 0x1098, 0xd8f, 0x10e2, +0xdfa, 0x10e2, 0xdfa, 0x10e2, 0xe26, 0x10e2, 0xe26, 0x10d9, 0xe53, 0x10d9, 0xe53, +0x10d9, 0xe53, 0x1119, 0xed0, 0x1119, 0xed0, 0x10c8, 0xec1, 0x10c8, 0xec1, 0x107d, +0xebd, 0x107d, 0xebd, 0xfed, 0xe75, 0xfed, 0xe75, 0xe17, 0xce7, 0xe17, 0xce7, +0xcd1, 0xbe7, 0xcd1, 0xbe7, 0xcd1, 0xbe7, 0xb77, 0xace, 0xb77, 0xace, 0x9c6, +0x95b, 0x9c6, 0x95b, 0x8a1, 0x86d, 0x8a1, 0x86d, 0x739, 0x736, 0x739, 0x736, +0x56c, 0x593, 0x56c, 0x593, 0x56c, 0x593, 0x3ca, 0x414, 0x3ca, 0x414, 0x1d9, +0x23f, 0x1d9, 0x23f, 0xffd4, 0x4e, 0xffd4, 0x4e, 0xfdd9, 0xfe62, 0xfdd9, 0xfe62, +0xfbfc, 0xfc90, 0xfbfc, 0xfc90, 0xfaae, 0xfb46, 0xfaae, 0xfb46, 0xfaae, 0xfb46, 0xf971, +0xfa0c, 0xf971, 0xfa0c, 0xf874, 0xf90d, 0xf874, 0xf90d, 0xf7d2, 0xf868, 0xf7d2, 0xf868, +0xf760, 0xf7f2, 0xf760, 0xf7f2, 0xf6ec, 0xf779, 0xf6ec, 0xf779, 0xf704, 0xf78d, 0xf704, +0xf78d, 0xf704, 0xf78d, 0xf754, 0xf7d9, 0xf754, 0xf7d9, 0xf7ab, 0xf82d, 0xf7ab, 0xf82d, +0xf7b2, 0xf830, 0xf7b2, 0xf830, 0xf746, 0xf7c3, 0xf746, 0xf7c3, 0xf733, 0xf7ae, 0xf733, +0xf7ae, 0xf733, 0xf7ae, 0xf6d3, 0xf74d, 0xf6d3, 0xf74d, 0xf6a2, 0xf71c, 0xf6a2, 0xf71c, +0xf6aa, 0xf723, 0xf6aa, 0xf723, 0xf71b, 0xf794, 0xf71b, 0xf794, 0xf765, 0xf7dd, 0xf765, +0xf7dd, 0xf77a, 0xf7f1, 0xf77a, 0xf7f1, 0xf77a, 0xf7f1, 0xf82d, 0xf8a2, 0xf82d, 0xf8a2, +0xf8ca, 0xf93f, 0xf8ca, 0xf93f, 0xf935, 0xf9a9, 0xf935, 0xf9a9, 0xf994, 0xfa08, 0xf994, +0xfa08, 0xfa8c, 0xfb01, 0xfa8c, 0xfb01, 0xfb6a, 0xfbe1, 0xfb6a, 0xfbe1, 0xfb6a, 0xfbe1, +0xfc05, 0xfc81, 0xfc05, 0xfc81, 0xfcb2, 0xfd35, 0xfcb2, 0xfd35, 0xfcf5, 0xfd81, 0xfcf5, +0xfd81, 0xfcda, 0xfd73, 0xfcda, 0xfd73, 0xfcb9, 0xfd63, 0xfcb9, 0xfd63, 0xfcb9, 0xfd63, +0xfc44, 0xfd01, 0xfc44, 0xfd01, 0xfb58, 0xfc2d, 0xfb58, 0xfc2d, 0xfa51, 0xfb41, 0xfa51, +0xfb41, 0xf8f9, 0xfa07, 0xf8f9, 0xfa07, 0xf7ce, 0xf8fd, 0xf7ce, 0xf8fd, 0xf60c, 0xf75e, +0xf60c, 0xf75e, 0xf60c, 0xf75e, 0xf501, 0xf677, 0xf501, 0xf677, 0xf51c, 0xf6b7, 0xf51c, +0xf6b7, 0xf4cd, 0xf68e, 0xf4cd, 0xf68e, 0xf4df, 0xf6c3, 0xf4df, 0xf6c3, 0xf46b, 0xf671, +0xf46b, 0xf671, 0xf44f, 0xf675, 0xf44f, 0xf675, 0xf44f, 0xf675, 0xf49d, 0xf6de, 0xf49d, +0xf6de, 0xf448, 0xf6a2, 0xf448, 0xf6a2, 0xf459, 0xf6c5, 0xf459, 0xf6c5, 0xf3fa, 0xf675, +0xf3fa, 0xf675, 0xf3bc, 0xf63f, 0xf3bc, 0xf63f, 0xf3bc, 0xf63f, 0xf35c, 0xf5e3, 0xf35c, +0xf5e3, 0xf28f, 0xf513, 0xf28f, 0xf513, 0xf256, 0xf4d3, 0xf256, 0xf4d3, 0xf1b6, 0xf427, +0xf1b6, 0xf427, 0xf150, 0xf3b1, 0xf150, 0xf3b1, 0xf132, 0xf37f, 0xf132, 0xf37f, 0xf132, +0xf37f, 0xf145, 0xf37c, 0xf145, 0xf37c, 0xf1b9, 0xf3d8, 0xf1b9, 0xf3d8, 0xf201, 0xf405, +0xf201, 0xf405, 0xf249, 0xf433, 0xf249, 0xf433, 0xf26d, 0xf43c, 0xf26d, 0xf43c, 0xf29c, +0xf452, 0xf29c, 0xf452, 0xf29c, 0xf452, 0xf248, 0xf3e5, 0xf248, 0xf3e5, 0xf215, 0xf39c, +0xf215, 0xf39c, 0xf1ed, 0xf35f, 0xf1ed, 0xf35f, 0xf189, 0xf2ea, 0xf189, 0xf2ea, 0xf15a, +0xf2ad, 0xf15a, 0xf2ad, 0xf15a, 0xf2ad, 0xf133, 0xf279, 0xf133, 0xf279, 0xf19b, 0xf2d9, +0xf19b, 0xf2d9, 0xf181, 0xf2b9, 0xf181, 0xf2b9, 0xf1a6, 0xf2dc, 0xf1a6, 0xf2dc, 0xf1dc, +0xf312, 0xf1dc, 0xf312, 0xf17f, 0xf2b9, 0xf17f, 0xf2b9, 0xf17f, 0xf2b9, 0xf12b, 0xf26b, +0xf12b, 0xf26b, 0xf0c3, 0xf20d, 0xf0c3, 0xf20d, 0xf0bb, 0xf210, 0xf0bb, 0xf210, 0xf02b, +0xf18d, 0xf02b, 0xf18d, 0xefcf, 0xf142, 0xefcf, 0xf142, 0xefcf, 0xf142, 0xef5d, 0xf0e2, +0xef5d, 0xf0e2, 0xeebb, 0xf054, 0xeebb, 0xf054, 0xeec7, 0xf075, 0xeec7, 0xf075, 0xee77, +0xf03d, 0xee77, 0xf03d, 0xee06, 0xefe3, 0xee06, 0xefe3, 0xed94, 0xef89, 0xed94, 0xef89, +0xed94, 0xef89, 0xed36, 0xef44, 0xed36, 0xef44, 0xecca, 0xeef1, 0xecca, 0xeef1, 0xecd4, +0xef13, 0xecd4, 0xef13, 0xecd4, 0xef2a, 0xecd4, 0xef2a, 0xebfe, 0xee68, 0xebfe, 0xee68, +0xec20, 0xee9c, 0xec20, 0xee9c, 0xec20, 0xee9c, 0xec59, 0xeee5, 0xec59, 0xeee5, 0xec41, +0xeed8, 0xec41, 0xeed8, 0xecab, 0xef49, 0xecab, 0xef49, 0xec85, 0xef24, 0xec85, 0xef24, +0xeca5, 0xef42, 0xeca5, 0xef42, 0xeca5, 0xef42, 0xecca, 0xef5f, 0xecca, 0xef5f, 0xecda, +0xef61, 0xecda, 0xef61, 0xed08, 0xef7d, 0xed08, 0xef7d, 0xecfa, 0xef56, 0xecfa, 0xef56, +0xedc0, 0xf000, 0xedc0, 0xf000, 0xee02, 0xf022, 0xee02, 0xf022, 0xee02, 0xf022, 0xee28, +0xf024, 0xee28, 0xf024, 0xef57, 0xf12c, 0xef57, 0xf12c, 0xf02f, 0xf1dd, 0xf02f, 0xf1dd, +0xf07c, 0xf202, 0xf07c, 0xf202, 0xf1a3, 0xf301, 0xf1a3, 0xf301, 0xf228, 0xf35f, 0xf228, +0xf35f, 0xf228, 0xf35f, 0xf1bf, 0xf2d3, 0xf1bf, 0xf2d3, 0xf23d, 0xf331, 0xf23d, 0xf331, +0xf290, 0xf369, 0xf290, 0xf369, 0xf33e, 0xf400, 0xf33e, 0xf400, 0xf29b, 0xf34d, 0xf29b, +0xf34d, 0xf29b, 0xf34d, 0xf269, 0xf310, 0xf269, 0xf310, 0xf2f9, 0xf39b, 0xf2f9, 0xf39b, +0xf2f4, 0xf398, 0xf2f4, 0xf398, 0xf412, 0xf4bd, 0xf412, 0xf4bd, 0xf368, 0xf41f, 0xf368, +0xf41f, 0xf3ac, 0xf475, 0xf3ac, 0xf475, 0xf3ac, 0xf475, 0xf3e9, 0xf4c8, 0xf3e9, 0xf4c8, +0xf3c0, 0xf4b6, 0xf3c0, 0xf4b6, 0xf49f, 0xf5b1, 0xf49f, 0xf5b1, 0xf3ea, 0xf517, 0xf3ea, +0xf517, 0xf401, 0xf54c, 0xf401, 0xf54c, 0xf3b4, 0xf51b, 0xf3b4, 0xf51b, 0xf3b4, 0xf51b, +0xf3ce, 0xf550, 0xf3ce, 0xf550, 0xf429, 0xf5c5, 0xf429, 0xf5c5, 0xf39e, 0xf550, 0xf39e, +0xf550, 0xf3a9, 0xf56f, 0xf3a9, 0xf56f, 0xf355, 0xf52c, 0xf355, 0xf52c, 0xf355, 0xf52c, +0xf313, 0xf4f8, 0xf313, 0xf4f8, 0xf2e3, 0xf4d2, 0xf2e3, 0xf4d2, 0xf260, 0xf456, 0xf260, +0xf456, 0xf165, 0xf360, 0xf165, 0xf360, 0xf1c7, 0xf3c2, 0xf1c7, 0xf3c2, 0xf249, 0xf443, +0xf249, 0xf443, 0xf249, 0xf443, 0xf14d, 0xf342, 0xf14d, 0xf342, 0xf19a, 0xf387, 0xf19a, +0xf387, 0xf149, 0xf32d, 0xf149, 0xf32d, 0xf0fd, 0xf2d4, 0xf0fd, 0xf2d4, 0xf1f5, 0xf3bd, +0xf1f5, 0xf3bd, 0xf11b, 0xf2d1, 0xf11b, 0xf2d1, 0xf11b, 0xf2d1, 0xf161, 0xf302, 0xf161, +0xf302, 0xf1e0, 0xf369, 0xf1e0, 0xf369, 0xf276, 0xf3e3, 0xf276, 0xf3e3, 0xf4e5, 0xf631, +0xf4e5, 0xf631, 0xf633, 0xf75a, 0xf633, 0xf75a, 0xf633, 0xf75a, 0xf7c5, 0xf8c2, 0xf7c5, +0xf8c2, 0xf845, 0xf914, 0xf845, 0xf914, 0xfa68, 0xfb02, 0xfa68, 0xfb02, 0xfc81, 0xfce2, +0xfc81, 0xfce2, 0xfd20, 0xfd43, 0xfd20, 0xfd43, 0x74, 0x54, 0x74, 0x54, 0x74, +0x54, 0xf2, 0x8b, 0xf2, 0x8b, 0x1a3, 0xf2, 0x1a3, 0xf2, 0x3b7, 0x2bb, +0x3b7, 0x2bb, 0x5c2, 0x477, 0x5c2, 0x477, 0x844, 0x6ad, 0x844, 0x6ad, 0x921, +0x73e, 0x921, 0x73e, 0x921, 0x73e, 0xaed, 0x8c1, 0xaed, 0x8c1, 0xcd7, 0xa67, +0xcd7, 0xa67, 0xe0f, 0xb5f, 0xe0f, 0xb5f, 0xf4f, 0xc67, 0xf4f, 0xc67, 0x10cc, +0xdb3, 0x10cc, 0xdb3, 0x10cc, 0xdb3, 0x11da, 0xe98, 0x11da, 0xe98, 0x13fb, 0x1099, +0x13fb, 0x1099, 0x1510, 0x1197, 0x1510, 0x1197, 0x148a, 0x1104, 0x148a, 0x1104, 0x1568, +0x11de, 0x1568, 0x11de, 0x15b4, 0x122d, 0x15b4, 0x122d, 0x15b4, 0x122d, 0x1735, 0x13b9, +0x1735, 0x13b9, 0x1793, 0x1429, 0x1793, 0x1429, 0x1676, 0x1323, 0x1676, 0x1323, 0x165c, +0x1324, 0x165c, 0x1324, 0x1671, 0x1356, 0x1671, 0x1356, 0x1708, 0x140c, 0x1708, 0x140c, +0x1708, 0x140c, 0x1555, 0x1278, 0x1555, 0x1278, 0x127e, 0xfbd, 0x127e, 0xfbd, 0x10ec, +0xe45, 0x10ec, 0xe45, 0x1058, 0xdc8, 0x1058, 0xdc8, 0x1166, 0xee8, 0x1166, 0xee8, +0x1166, 0xee8, 0x11b4, 0xf44, 0x11b4, 0xf44, 0x11b7, 0xf51, 0x11b7, 0xf51, 0x1291, +0x102f, 0x1291, 0x102f, 0x11f9, 0xf98, 0x11f9, 0xf98, 0x1389, 0x1125, 0x1389, 0x1125, +0x1496, 0x122c, 0x1496, 0x122c, 0x1496, 0x122c, 0x12b3, 0x1042, 0x12b3, 0x1042, 0x1235, +0xfbb, 0x1235, 0xfbb, 0x10b7, 0xe37, 0x10b7, 0xe37, 0x1015, 0xd8f, 0x1015, 0xd8f, +0x1081, 0xdf7, 0x1081, 0xdf7, 0xfc2, 0xd39, 0xfc2, 0xd39, 0xfc2, 0xd39, 0x108f, +0xe0a, 0x108f, 0xe0a, 0x115e, 0xee3, 0x115e, 0xee3, 0x128f, 0x1022, 0x128f, 0x1022, +0x1530, 0x12d6, 0x1530, 0x12d6, 0x163d, 0x13fb, 0x163d, 0x13fb, 0x163d, 0x13fb, 0x16f4, +0x14ce, 0x16f4, 0x14ce, 0x179f, 0x1599, 0x179f, 0x1599, 0x178c, 0x15a9, 0x178c, 0x15a9, +0x1804, 0x1646, 0x1804, 0x1646, 0x1766, 0x15ce, 0x1766, 0x15ce, 0x16ce, 0x155b, 0x16ce, +0x155b, 0x16ce, 0x155b, 0x163b, 0x14ed, 0x163b, 0x14ed, 0x1439, 0x130d, 0x1439, 0x130d, +0x138a, 0x127d, 0x138a, 0x127d, 0x124b, 0x1159, 0x124b, 0x1159, 0xf61, 0xe86, 0xf61, +0xe86, 0xe2c, 0xd64, 0xe2c, 0xd64, 0xe2c, 0xd64, 0xc66, 0xbac, 0xc66, 0xbac, +0x9f1, 0x940, 0x9f1, 0x940, 0x803, 0x757, 0x803, 0x757, 0x6d3, 0x629, 0x6d3, +0x629, 0x683, 0x5d8, 0x683, 0x5d8, 0x683, 0x5d8, 0x648, 0x59a, 0x648, 0x59a, +0x6d3, 0x621, 0x6d3, 0x621, 0x576, 0x4c0, 0x576, 0x4c0, 0x3ed, 0x334, 0x3ed, +0x334, 0x344, 0x289, 0x344, 0x289, 0x22f, 0x175, 0x22f, 0x175, 0x22f, 0x175, +0x150, 0x99, 0x150, 0x99, 0x8b, 0xffdb, 0x8b, 0xffdb, 0xff82, 0xfedc, 0xff82, +0xfedc, 0xff2a, 0xfe92, 0xff2a, 0xfe92, 0xffa1, 0xff1a, 0xffa1, 0xff1a, 0xffa1, 0xff1a, +0xfe39, 0xfdc5, 0xfe39, 0xfdc5, 0xfe9e, 0xfe40, 0xfe9e, 0xfe40, 0xfe19, 0xfdd2, 0xfe19, +0xfdd2, 0xfcc4, 0xfc95, 0xfcc4, 0xfc95, 0xfe67, 0xfe50, 0xfe67, 0xfe50, 0xfda2, 0xfda1, +0xfda2, 0xfda1, 0xfda2, 0xfda1, 0xfbf3, 0xfc07, 0xfbf3, 0xfc07, 0xfc37, 0xfc5d, 0xfc37, +0xfc5d, 0xfc7d, 0xfcb2, 0xfc7d, 0xfcb2, 0xfe1f, 0xfe5e, 0xfe1f, 0xfe5e, 0x10, 0x56, +0x10, 0x56, 0xff09, 0xff51, 0xff09, 0xff51, 0xff09, 0xff51, 0xffe2, 0x28, 0xffe2, +0x28, 0xb8, 0xf8, 0xb8, 0xf8, 0x59, 0x8e, 0x59, 0x8e, 0x185, 0x1ac, +0x185, 0x1ac, 0x28d, 0x2a4, 0x28d, 0x2a4, 0x28d, 0x2a4, 0x2a1, 0x2a5, 0x2a1, +0x2a5, 0x3b4, 0x3a4, 0x3b4, 0x3a4, 0x69b, 0x676, 0x69b, 0x676, 0x576, 0x53b, +0x576, 0x53b, 0x4c4, 0x475, 0x4c4, 0x475, 0x544, 0x4e1, 0x544, 0x4e1, 0x544, +0x4e1, 0x4b8, 0x443, 0x4b8, 0x443, 0x514, 0x48e, 0x514, 0x48e, 0x63d, 0x5a7, +0x63d, 0x5a7, 0x771, 0x6cc, 0x771, 0x6cc, 0x702, 0x64f, 0x702, 0x64f, 0x73a, +0x678, 0x73a, 0x678, 0x73a, 0x678, 0x84c, 0x77d, 0x84c, 0x77d, 0xa1d, 0x93f, +0xa1d, 0x93f, 0x963, 0x876, 0x963, 0x876, 0x8ba, 0x7bb, 0x8ba, 0x7bb, 0x82d, +0x71a, 0x82d, 0x71a, 0x82d, 0x71a, 0x849, 0x71f, 0x849, 0x71f, 0x815, 0x6d0, +0x815, 0x6d0, 0x6fa, 0x597, 0x6fa, 0x597, 0x9d2, 0x84e, 0x9d2, 0x84e, 0xaf5, +0x94b, 0xaf5, 0x94b, 0xf6a, 0xd97, 0xf6a, 0xd97, 0xf6a, 0xd97, 0x126b, 0x106d, +0x126b, 0x106d, 0x1210, 0xfe5, 0x1210, 0xfe5, 0x12f5, 0x109c, 0x12f5, 0x109c, 0x120b, +0xf82, 0x120b, 0xf82, 0x1330, 0x1079, 0x1330, 0x1079, 0x12c0, 0xfdb, 0x12c0, 0xfdb, +0x12c0, 0xfdb, 0x1246, 0xf37, 0x1246, 0xf37, 0x13c4, 0x108d, 0x13c4, 0x108d, 0x152a, +0x11cf, 0x152a, 0x11cf, 0x15fa, 0x127f, 0x15fa, 0x127f, 0x16c8, 0x1332, 0x16c8, 0x1332, +0x16c8, 0x1332, 0x172a, 0x1380, 0x172a, 0x1380, 0x1690, 0x12d7, 0x1690, 0x12d7, 0x15c4, +0x1201, 0x15c4, 0x1201, 0x15b3, 0x11eb, 0x15b3, 0x11eb, 0x15a1, 0x11da, 0x15a1, 0x11da, +0x132a, 0xf69, 0x132a, 0xf69, 0x132a, 0xf69, 0x137b, 0xfc4, 0x137b, 0xfc4, 0x1487, +0x10dc, 0x1487, 0x10dc, 0x1529, 0x118e, 0x1529, 0x118e, 0x166a, 0x12e1, 0x166a, 0x12e1, +0x15af, 0x1238, 0x15af, 0x1238, 0x1562, 0x11ff, 0x1562, 0x11ff, 0x1562, 0x11ff, 0x14d1, +0x1181, 0x14d1, 0x1181, 0x1457, 0x111a, 0x1457, 0x111a, 0x12cf, 0xfa5, 0x12cf, 0xfa5, +0x108c, 0xd74, 0x108c, 0xd74, 0xfc0, 0xcb8, 0xfc0, 0xcb8, 0xfc0, 0xcb8, 0xffa, +0xd03, 0xffa, 0xd03, 0x10c4, 0xddc, 0x10c4, 0xddc, 0xef3, 0xc1b, 0xef3, 0xc1b, +0xea3, 0xbdb, 0xea3, 0xbdb, 0xf9f, 0xce7, 0xf9f, 0xce7, 0xf3b, 0xc95, 0xf3b, +0xc95, 0xf3b, 0xc95, 0x1068, 0xdd7, 0x1068, 0xdd7, 0x1017, 0xd9d, 0x1017, 0xd9d, +0xfdb, 0xd7a, 0xfdb, 0xd7a, 0xde4, 0xb9f, 0xde4, 0xb9f, 0xee0, 0xcba, 0xee0, +0xcba, 0x1157, 0xf55, 0x1157, 0xf55, 0x1157, 0xf55, 0xe04, 0xc28, 0xe04, 0xc28, +0xf62, 0xdaf, 0xf62, 0xdaf, 0xf20, 0xd9a, 0xf20, 0xd9a, 0xcbc, 0xb64, 0xcbc, +0xb64, 0xd7b, 0xc52, 0xd7b, 0xc52, 0xd7b, 0xc52, 0xc98, 0xba2, 0xc98, 0xba2, +0xd50, 0xc8b, 0xd50, 0xc8b, 0xd27, 0xc93, 0xd27, 0xc93, 0xc9b, 0xc37, 0xc9b, +0xc37, 0xd89, 0xd52, 0xd89, 0xd52, 0xbec, 0xbe0, 0xbec, 0xbe0, 0xbec, 0xbe0, +0xa2d, 0xa49, 0xa2d, 0xa49, 0x9c2, 0xa02, 0x9c2, 0xa02, 0x983, 0x9e2, 0x983, +0x9e2, 0x832, 0x8ad, 0x832, 0x8ad, 0x716, 0x7a8, 0x716, 0x7a8, 0x979, 0xa1d, +0x979, 0xa1d, 0x979, 0xa1d, 0x852, 0x904, 0x852, 0x904, 0x924, 0x9de, 0x924, +0x9de, 0xb5e, 0xc1c, 0xb5e, 0xc1c, 0x795, 0x855, 0x795, 0x855, 0x573, 0x631, +0x573, 0x631, 0x573, 0x631, 0x2c3, 0x37b, 0x2c3, 0x37b, 0x110, 0x1c0, 0x110, +0x1c0, 0xffcf, 0x76, 0xffcf, 0x76, 0xfd9f, 0xfe3b, 0xfd9f, 0xfe3b, 0xfce3, 0xfd74, +0xfce3, 0xfd74, 0xfe20, 0xfea6, 0xfe20, 0xfea6, 0xfe20, 0xfea6, 0xff4e, 0xffca, 0xff4e, +0xffca, 0xfe6b, 0xfedc, 0xfe6b, 0xfedc, 0xfcdb, 0xfd43, 0xfcdb, 0xfd43, 0xfb6c, 0xfbcc, +0xfb6c, 0xfbcc, 0xfc10, 0xfc6b, 0xfc10, 0xfc6b, 0xfa7a, 0xfad0, 0xfa7a, 0xfad0, 0xfa7a, +0xfad0, 0xf9c5, 0xfa1a, 0xf9c5, 0xfa1a, 0xf7d1, 0xf827, 0xf7d1, 0xf827, 0xf5b8, 0xf612, +0xf5b8, 0xf612, 0xf599, 0xf5f8, 0xf599, 0xf5f8, 0xf62a, 0xf692, 0xf62a, 0xf692, 0xf62a, +0xf692, 0xf7f4, 0xf867, 0xf7f4, 0xf867, 0xf65e, 0xf6de, 0xf65e, 0xf6de, 0xf81d, 0xf8ad, +0xf81d, 0xf8ad, 0xf6b3, 0xf756, 0xf6b3, 0xf756, 0xf57b, 0xf632, 0xf57b, 0xf632, 0xf865, +0xf934, 0xf865, 0xf934, 0xf865, 0xf934, 0xf8f8, 0xf9df, 0xf8f8, 0xf9df, 0xf9dd, 0xfadf, +0xf9dd, 0xfadf, 0xf906, 0xfa23, 0xf906, 0xfa23, 0xf9f4, 0xfb2e, 0xf9f4, 0xfb2e, 0xf91e, +0xfa75, 0xf91e, 0xfa75, 0xf5a2, 0xf717, 0xf5a2, 0xf717, 0xf5a2, 0xf717, 0xf352, 0xf4e4, +0xf352, 0xf4e4, 0xf189, 0xf338, 0xf189, 0xf338, 0xefff, 0xf1c9, 0xefff, 0xf1c9, 0xef82, +0xf167, 0xef82, 0xf167, 0xefa3, 0xf1a0, 0xefa3, 0xf1a0, 0xefa3, 0xf1a0, 0xed18, 0xef2b, +0xed18, 0xef2b, 0xede5, 0xf00c, 0xede5, 0xf00c, 0xf100, 0xf338, 0xf100, 0xf338, 0xee35, +0xf07c, 0xee35, 0xf07c, 0xeda9, 0xeffc, 0xeda9, 0xeffc, 0xee8f, 0xf0eb, 0xee8f, 0xf0eb, +0xee8f, 0xf0eb, 0xec10, 0xee72, 0xec10, 0xee72, 0xede2, 0xf049, 0xede2, 0xf049, 0xec38, +0xeea0, 0xec38, 0xeea0, 0xeac3, 0xed2b, 0xeac3, 0xed2b, 0xebc3, 0xee2a, 0xebc3, 0xee2a, +0xebc3, 0xee2a, 0xe9b8, 0xec1c, 0xe9b8, 0xec1c, 0xec04, 0xee66, 0xec04, 0xee66, 0xed15, +0xef74, 0xed15, 0xef74, 0xec33, 0xee90, 0xec33, 0xee90, 0xe985, 0xebe1, 0xe985, 0xebe1, +0xe7de, 0xea3a, 0xe7de, 0xea3a, 0xe7de, 0xea3a, 0xe671, 0xe8cd, 0xe671, 0xe8cd, 0xe2ba, +0xe519, 0xe2ba, 0xe519, 0xe46d, 0xe6d1, 0xe46d, 0xe6d1, 0xe223, 0xe48d, 0xe223, 0xe48d, +0xe0c3, 0xe336, 0xe0c3, 0xe336, 0xe49b, 0xe718, 0xe49b, 0xe718, 0xe49b, 0xe718, 0xe35a, +0xe5e1, 0xe35a, 0xe5e1, 0xe39c, 0xe62f, 0xe39c, 0xe62f, 0xe3a9, 0xe648, 0xe3a9, 0xe648, +0xe25e, 0xe509, 0xe25e, 0xe509, 0xe2be, 0xe575, 0xe2be, 0xe575, 0xe2be, 0xe575, 0xe212, +0xe4d4, 0xe212, 0xe4d4, 0xe0cb, 0xe395, 0xe0cb, 0xe395, 0xdf26, 0xe1f7, 0xdf26, 0xe1f7, +0xdf81, 0xe257, 0xdf81, 0xe257, 0xdece, 0xe1a5, 0xdece, 0xe1a5, 0xde29, 0xe0ff, 0xde29, +0xe0ff, 0xde29, 0xe0ff, 0xde1c, 0xe0ed, 0xde1c, 0xe0ed, 0xded1, 0xe19a, 0xded1, 0xe19a, +0xe1de, 0xe49b, 0xe1de, 0xe49b, 0xe2a9, 0xe558, 0xe2a9, 0xe558, 0xe31b, 0xe5b9, 0xe31b, +0xe5b9, 0xe261, 0xe4ea, 0xe261, 0xe4ea, 0xe261, 0xe4ea, 0xe200, 0xe473, 0xe200, 0xe473, +0xe2fd, 0xe557, 0xe2fd, 0xe557, 0xe43b, 0xe67c, 0xe43b, 0xe67c, 0xe519, 0xe73e, 0xe519, +0xe73e, 0xe51b, 0xe723, 0xe51b, 0xe723, 0xe51b, 0xe723, 0xe651, 0xe83d, 0xe651, 0xe83d, +0xe7d9, 0xe9a9, 0xe7d9, 0xe9a9, 0xe94c, 0xeb00, 0xe94c, 0xeb00, 0xe8f6, 0xea8f, 0xe8f6, +0xea8f, 0xeb36, 0xecb5, 0xeb36, 0xecb5, 0xed3c, 0xeea2, 0xed3c, 0xeea2, 0xed3c, 0xeea2, +0xedd9, 0xef28, 0xedd9, 0xef28, 0xf0d1, 0xf20b, 0xf0d1, 0xf20b, 0xf02f, 0xf155, 0xf02f, +0xf155, 0xefc8, 0xf0dd, 0xefc8, 0xf0dd, 0xf0e4, 0xf1e9, 0xf0e4, 0xf1e9, 0xf0ae, 0xf1a6, +0xf0ae, 0xf1a6, 0xf0ae, 0xf1a6, 0xf261, 0xf34e, 0xf261, 0xf34e, 0xf3a9, 0xf48c, 0xf3a9, +0xf48c, 0xf3a4, 0xf481, 0xf3a4, 0xf481, 0xf40a, 0xf4e2, 0xf40a, 0xf4e2, 0xf65b, 0xf731, +0xf65b, 0xf731, 0xf65b, 0xf731, 0xf8c8, 0xf99e, 0xf8c8, 0xf99e, 0xf7ac, 0xf884, 0xf7ac, +0xf884, 0xf771, 0xf84d, 0xf771, 0xf84d, 0xf5df, 0xf6c0, 0xf5df, 0xf6c0, 0xf65a, 0xf742, +0xf65a, 0xf742, 0xf7b1, 0xf8a2, 0xf7b1, 0xf8a2, 0xf7b1, 0xf8a2, 0xf6a3, 0xf79e, 0xf6a3, +0xf79e, 0xf844, 0xf94a, 0xf844, 0xf94a, 0xf687, 0xf798, 0xf687, 0xf798, 0xf818, 0xf934, +0xf818, 0xf934, 0xf83e, 0xf964, 0xf83e, 0xf964, 0xf5dd, 0xf70d, 0xf5dd, 0xf70d, 0xf5dd, +0xf70d, 0xf642, 0xf778, 0xf642, 0xf778, 0xf677, 0xf7b3, 0xf677, 0xf7b3, 0xf72a, 0xf868, +0xf72a, 0xf868, 0xf43e, 0xf579, 0xf43e, 0xf579, 0xf62e, 0xf763, 0xf62e, 0xf763, 0xf62e, +0xf763, 0xf4c6, 0xf5f1, 0xf4c6, 0xf5f1, 0xf2f8, 0xf413, 0xf2f8, 0xf413, 0xf625, 0xf72d, +0xf625, 0xf72d, 0xf4b9, 0xf5a6, 0xf4b9, 0xf5a6, 0xf5bc, 0xf68b, 0xf5bc, 0xf68b, 0xf68c, +0xf738, 0xf68c, 0xf738, 0xf68c, 0xf738, 0xf6cb, 0xf74f, 0xf6cb, 0xf74f, 0xf725, 0xf77e, +0xf725, 0xf77e, 0xf85c, 0xf887, 0xf85c, 0xf887, 0xfb41, 0xfb3b, 0xfb41, 0xfb3b, 0xfc28, +0xfbef, 0xfc28, 0xfbef, 0xfd76, 0xfd0b, 0xfd76, 0xfd0b, 0xfd76, 0xfd0b, 0xff23, 0xfe85, +0xff23, 0xfe85, 0xfeea, 0xfe1b, 0xfeea, 0xfe1b, 0xfefd, 0xfe00, 0xfefd, 0xfe00, 0x51, +0xff2a, 0x51, 0xff2a, 0x120, 0xffd2, 0x120, 0xffd2, 0x120, 0xffd2, 0x2a2, 0x133, +0x2a2, 0x133, 0x33b, 0x1b0, 0x33b, 0x1b0, 0x2fe, 0x15d, 0x2fe, 0x15d, 0x4d5, +0x324, 0x4d5, 0x324, 0x7b9, 0x5fe, 0x7b9, 0x5fe, 0x881, 0x6c1, 0x881, 0x6c1, +0x881, 0x6c1, 0xaaf, 0x8f0, 0xaaf, 0x8f0, 0xcc1, 0xb07, 0xcc1, 0xb07, 0xccb, +0xb1a, 0xccb, 0xb1a, 0x104b, 0xea7, 0x104b, 0xea7, 0x1159, 0xfc4, 0x1159, 0xfc4, +0xffd, 0xe77, 0xffd, 0xe77, 0xffd, 0xe77, 0x10df, 0xf69, 0x10df, 0xf69, 0x126d, +0x1106, 0x126d, 0x1106, 0x13fc, 0x12a3, 0x13fc, 0x12a3, 0x139d, 0x1250, 0x139d, 0x1250, +0x1287, 0x1142, 0x1287, 0x1142, 0x1287, 0x1142, 0x10fc, 0xfbc, 0x10fc, 0xfbc, 0xf32, +0xdf4, 0xf32, 0xdf4, 0xe9b, 0xd5a, 0xe9b, 0xd5a, 0xd28, 0xbe0, 0xd28, 0xbe0, +0xcb8, 0xb67, 0xcb8, 0xb67, 0xa81, 0x922, 0xa81, 0x922, 0xa81, 0x922, 0x924, +0x7b6, 0x924, 0x7b6, 0xc4c, 0xacc, 0xc4c, 0xacc, 0xb81, 0x9ee, 0xb81, 0x9ee, +0xc45, 0xa9f, 0xc45, 0xa9f, 0xe2f, 0xc77, 0xe2f, 0xc77, 0xe24, 0xc5b, 0xe24, +0xc5b, 0xe24, 0xc5b, 0xf50, 0xd78, 0xf50, 0xd78, 0xfe5, 0xe01, 0xfe5, 0xe01, +0x10be, 0xed1, 0x10be, 0xed1, 0xf55, 0xd64, 0xf55, 0xd64, 0xd62, 0xb71, 0xd62, +0xb71, 0xd62, 0xb71, 0xddb, 0xbee, 0xddb, 0xbee, 0xf97, 0xdb4, 0xf97, 0xdb4, +0xf85, 0xdb0, 0xf85, 0xdb0, 0xe1c, 0xc5a, 0xe1c, 0xc5a, 0xd53, 0xba8, 0xd53, +0xba8, 0xd14, 0xb83, 0xd14, 0xb83, 0xd14, 0xb83, 0xcde, 0xb6b, 0xcde, 0xb6b, +0xe0f, 0xcbc, 0xe0f, 0xcbc, 0xf12, 0xde3, 0xf12, 0xde3, 0xe20, 0xd15, 0xe20, +0xd15, 0xe40, 0xd5a, 0xe40, 0xd5a, 0xc60, 0xba0, 0xc60, 0xba0, 0xc60, 0xba0, +0xb0c, 0xa71, 0xb0c, 0xa71, 0x986, 0x90f, 0x986, 0x90f, 0x902, 0x8ad, 0x902, +0x8ad, 0xa2f, 0x9fb, 0xa2f, 0x9fb, 0x842, 0x82d, 0x842, 0x82d, 0x842, 0x82d, +0x882, 0x889, 0x882, 0x889, 0x80d, 0x82e, 0x80d, 0x82e, 0x685, 0x6bc, 0x685, +0x6bc, 0x679, 0x6c3, 0x679, 0x6c3, 0x4fc, 0x557, 0x4fc, 0x557, 0x48c, 0x4f4, +0x48c, 0x4f4, 0x48c, 0x4f4, 0x44c, 0x4bf, 0x44c, 0x4bf, 0x2c0, 0x33a, 0x2c0, +0x33a, 0x38a, 0x408, 0x38a, 0x408, 0x2c3, 0x342, 0x2c3, 0x342, 0x222, 0x2a0, +0x222, 0x2a0, 0x222, 0x2a0, 0x304, 0x37e, 0x304, 0x37e, 0x14d, 0x1c0, 0x14d, +0x1c0, 0x131, 0x19b, 0x131, 0x19b, 0x1ab, 0x20a, 0x1ab, 0x20a, 0x19f, 0x1f0, +0x19f, 0x1f0, 0xff62, 0xffa5, 0xff62, 0xffa5, 0xff62, 0xffa5, 0xfe5c, 0xfe8e, 0xfe5c, +0xfe8e, 0xfec6, 0xfee7, 0xfec6, 0xfee7, 0xfe9f, 0xfeae, 0xfe9f, 0xfeae, 0xc5, 0xc1, +0xc5, 0xc1, 0x139, 0x122, 0x139, 0x122, 0x258, 0x22f, 0x258, 0x22f, 0x258, +0x22f, 0x337, 0x2fe, 0x337, 0x2fe, 0x132, 0xe9, 0x132, 0xe9, 0x57, 0xffff, +0x57, 0xffff, 0x107, 0xa3, 0x107, 0xa3, 0xc7, 0x5a, 0xc7, 0x5a, 0xc7, +0x5a, 0x1a9, 0x135, 0x1a9, 0x135, 0x3f1, 0x378, 0x3f1, 0x378, 0x3c5, 0x34b, +0x3c5, 0x34b, 0x218, 0x19e, 0x218, 0x19e, 0x41d, 0x3a6, 0x41d, 0x3a6, 0x501, +0x491, 0x501, 0x491, 0x501, 0x491, 0x329, 0x2c0, 0x329, 0x2c0, 0x54f, 0x4ef, +0x54f, 0x4ef, 0x5a8, 0x552, 0x5a8, 0x552, 0x64e, 0x602, 0x64e, 0x602, 0x594, +0x552, 0x594, 0x552, 0x5f5, 0x5bc, 0x5f5, 0x5bc, 0x5f5, 0x5bc, 0x8be, 0x88c, +0x8be, 0x88c, 0x5db, 0x5ae, 0x5db, 0x5ae, 0x6e2, 0x6b7, 0x6e2, 0x6b7, 0x705, +0x6d7, 0x705, 0x6d7, 0x501, 0x4cd, 0x501, 0x4cd, 0x501, 0x4cd, 0x663, 0x624, +0x663, 0x624, 0x608, 0x5ba, 0x608, 0x5ba, 0x617, 0x5b5, 0x617, 0x5b5, 0x6d4, +0x65a, 0x6d4, 0x65a, 0x79f, 0x708, 0x79f, 0x708, 0x911, 0x859, 0x911, 0x859, +0x911, 0x859, 0x899, 0x7bc, 0x899, 0x7bc, 0x8e3, 0x7de, 0x8e3, 0x7de, 0xa78, +0x949, 0xa78, 0x949, 0xb0e, 0x9b4, 0xb0e, 0x9b4, 0xc55, 0xacd, 0xc55, 0xacd, +0xd5b, 0xba7, 0xd5b, 0xba7, 0xd5b, 0xba7, 0x100a, 0xe2a, 0x100a, 0xe2a, 0x118b, +0xf81, 0x118b, 0xf81, 0x12ad, 0x107a, 0x12ad, 0x107a, 0x13cc, 0x1175, 0x13cc, 0x1175, +0x1268, 0xfef, 0x1268, 0xfef, 0x1268, 0xfef, 0x12ad, 0x1017, 0x12ad, 0x1017, 0x11d2, +0xf23, 0x11d2, 0xf23, 0x11d0, 0xf0c, 0x11d0, 0xf0c, 0x1399, 0x10c5, 0x1399, 0x10c5, +0x13d9, 0x10f9, 0x13d9, 0x10f9, 0x1429, 0x1142, 0x1429, 0x1142, 0x1429, 0x1142, 0x1427, +0x113c, 0x1427, 0x113c, 0x1282, 0xf97, 0x1282, 0xf97, 0x1241, 0xf59, 0x1241, 0xf59, +0x126d, 0xf8b, 0x126d, 0xf8b, 0x10b5, 0xdda, 0x10b5, 0xdda, 0xf71, 0xc9f, 0xf71, +0xc9f, 0xf71, 0xc9f, 0xfb6, 0xced, 0xfb6, 0xced, 0xfdd, 0xd1e, 0xfdd, 0xd1e, +0xf6d, 0xcb6, 0xf6d, 0xcb6, 0x10a7, 0xdf7, 0x10a7, 0xdf7, 0xf9c, 0xcf4, 0xf9c, +0xcf4, 0xf9c, 0xcf4, 0xf37, 0xc93, 0xf37, 0xc93, 0xf35, 0xc94, 0xf35, 0xc94, +0xdec, 0xb4c, 0xdec, 0xb4c, 0xda2, 0xb01, 0xda2, 0xb01, 0xa8f, 0x7eb, 0xa8f, +0x7eb, 0x8e0, 0x637, 0x8e0, 0x637, 0x8e0, 0x637, 0x88f, 0x5df, 0x88f, 0x5df, +0x7a5, 0x4ee, 0x7a5, 0x4ee, 0x79e, 0x4de, 0x79e, 0x4de, 0x963, 0x69a, 0x963, +0x69a, 0x9bd, 0x6ea, 0x9bd, 0x6ea, 0x855, 0x579, 0x855, 0x579, 0x855, 0x579, +0x858, 0x574, 0x858, 0x574, 0x76b, 0x480, 0x76b, 0x480, 0x615, 0x325, 0x615, +0x325, 0x4fb, 0x209, 0x4fb, 0x209, 0x577, 0x285, 0x577, 0x285, 0x577, 0x285, +0x651, 0x363, 0x651, 0x363, 0x58f, 0x2a6, 0x58f, 0x2a6, 0x5ca, 0x2eb, 0x5ca, +0x2eb, 0x765, 0x494, 0x765, 0x494, 0x713, 0x452, 0x713, 0x452, 0x678, 0x3cc, +0x678, 0x3cc, 0x678, 0x3cc, 0x776, 0x4e2, 0x776, 0x4e2, 0x85b, 0x5e3, 0x85b, +0x5e3, 0x77a, 0x520, 0x77a, 0x520, 0x6c4, 0x48b, 0x6c4, 0x48b, 0x78b, 0x575, +0x78b, 0x575, 0x5c5, 0x3d4, 0x5c5, 0x3d4, 0x5c5, 0x3d4, 0x5e2, 0x419, 0x5e2, +0x419, 0x81e, 0x67c, 0x81e, 0x67c, 0x7f9, 0x67f, 0x7f9, 0x67f, 0x647, 0x4f4, +0x647, 0x4f4, 0x6a0, 0x574, 0x6a0, 0x574, 0x6a0, 0x574, 0x6cb, 0x5c5, 0x6cb, +0x5c5, 0x54f, 0x46c, 0x54f, 0x46c, 0x53f, 0x47e, 0x53f, 0x47e, 0x3d2, 0x32f, +0x3d2, 0x32f, 0x385, 0x2fd, 0x385, 0x2fd, 0x372, 0x302, 0x372, 0x302, 0x372, +0x302, 0x39e, 0x343, 0x39e, 0x343, 0x2fe, 0x2b4, 0x2fe, 0x2b4, 0x2c2, 0x285, +0x2c2, 0x285, 0x392, 0x35f, 0x392, 0x35f, 0x239, 0x20d, 0x239, 0x20d, 0x3c2, +0x39a, 0x3c2, 0x39a, 0x3c2, 0x39a, 0x383, 0x35d, 0x383, 0x35d, 0x2f4, 0x2cd, +0x2f4, 0x2cd, 0x3e1, 0x3b8, 0x3e1, 0x3b8, 0x238, 0x20c, 0x238, 0x20c, 0x1c0, +0x191, 0x1c0, 0x191, 0x1c0, 0x191, 0x221, 0x1ef, 0x221, 0x1ef, 0xf9, 0xc5, +0xf9, 0xc5, 0xff77, 0xff41, 0xff77, 0xff41, 0xfee9, 0xfeb4, 0xfee9, 0xfeb4, 0xff2c, +0xfefa, 0xff2c, 0xfefa, 0x3d, 0x11, 0x3d, 0x11, 0x3d, 0x11, 0x196, 0x173, +0x196, 0x173, 0x28d, 0x276, 0x28d, 0x276, 0x381, 0x37a, 0x381, 0x37a, 0x4a8, +0x4b4, 0x4a8, 0x4b4, 0x4d0, 0x4f2, 0x4d0, 0x4f2, 0x63a, 0x675, 0x63a, 0x675, +0x63a, 0x675, 0x52e, 0x586, 0x52e, 0x586, 0x30d, 0x384, 0x30d, 0x384, 0x3c2, +0x45a, 0x3c2, 0x45a, 0x16b, 0x226, 0x16b, 0x226, 0xfebf, 0xff9f, 0xfebf, 0xff9f, +0xfebf, 0xff9f, 0xfe7b, 0xff80, 0xfe7b, 0xff80, 0xff69, 0x94, 0xff69, 0x94, 0xfd84, +0xfed3, 0xfd84, 0xfed3, 0xfb76, 0xfcea, 0xfb76, 0xfcea, 0xfbcf, 0xfd65, 0xfbcf, 0xfd65, +0xfaa9, 0xfc60, 0xfaa9, 0xfc60, 0xfaa9, 0xfc60, 0xfaad, 0xfc82, 0xfaad, 0xfc82, 0xf9db, +0xfbcb, 0xf9db, 0xfbcb, 0xf8ce, 0xfad7, 0xf8ce, 0xfad7, 0xf99f, 0xfbbd, 0xf99f, 0xfbbd, +0xf95c, 0xfb8b, 0xf95c, 0xfb8b, 0xf95c, 0xfb8b, 0xfa75, 0xfcb3, 0xfa75, 0xfcb3, 0xfa48, +0xfc91, 0xfa48, 0xfc91, 0xf6f4, 0xf944, 0xf6f4, 0xf944, 0xf622, 0xf876, 0xf622, 0xf876, +0xf5e0, 0xf837, 0xf5e0, 0xf837, 0xf543, 0xf799, 0xf543, 0xf799, 0xf543, 0xf799, 0xf375, +0xf5c8, 0xf375, 0xf5c8, 0xf354, 0xf5a3, 0xf354, 0xf5a3, 0xf2a0, 0xf4ea, 0xf2a0, 0xf4ea, +0xf01c, 0xf261, 0xf01c, 0xf261, 0xf1d5, 0xf414, 0xf1d5, 0xf414, 0xf02d, 0xf268, 0xf02d, +0xf268, 0xf02d, 0xf268, 0xeed8, 0xf110, 0xeed8, 0xf110, 0xec79, 0xeeaf, 0xec79, 0xeeaf, +0xea34, 0xec6b, 0xea34, 0xec6b, 0xeb1c, 0xed56, 0xeb1c, 0xed56, 0xe937, 0xeb77, 0xe937, +0xeb77, 0xe937, 0xeb77, 0xea60, 0xeca8, 0xea60, 0xeca8, 0xea7b, 0xecce, 0xea7b, 0xecce, +0xeb10, 0xed73, 0xeb10, 0xed73, 0xeb90, 0xee04, 0xeb90, 0xee04, 0xea65, 0xeced, 0xea65, +0xeced, 0xe9bb, 0xec5a, 0xe9bb, 0xec5a, 0xe9bb, 0xec5a, 0xe613, 0xe8ca, 0xe613, 0xe8ca, +0xe43a, 0xe70b, 0xe43a, 0xe70b, 0xe308, 0xe5f4, 0xe308, 0xe5f4, 0xe25e, 0xe566, 0xe25e, +0xe566, 0xe2f0, 0xe613, 0xe2f0, 0xe613, 0xe2a1, 0xe5e0, 0xe2a1, 0xe5e0, 0xe2a1, 0xe5e0, +0xe29b, 0xe5f3, 0xe29b, 0xe5f3, 0xe22c, 0xe59c, 0xe22c, 0xe59c, 0xe2e4, 0xe66a, 0xe2e4, +0xe66a, 0xe2b8, 0xe64f, 0xe2b8, 0xe64f, 0xe04c, 0xe3f3, 0xe04c, 0xe3f3, 0xe04c, 0xe3f3, +0xdf88, 0xe33b, 0xdf88, 0xe33b, 0xdf15, 0xe2cf, 0xdf15, 0xe2cf, 0xdf88, 0xe344, 0xdf88, +0xe344, 0xe10b, 0xe4c7, 0xe10b, 0xe4c7, 0xe271, 0xe627, 0xe271, 0xe627, 0xe464, 0xe810, +0xe464, 0xe810, 0xe464, 0xe810, 0xe712, 0xeab0, 0xe712, 0xeab0, 0xe8de, 0xec69, 0xe8de, +0xec69, 0xe8d7, 0xec4d, 0xe8d7, 0xec4d, 0xea71, 0xedcf, 0xea71, 0xedcf, 0xe96c, 0xecae, +0xe96c, 0xecae, 0xe826, 0xeb4a, 0xe826, 0xeb4a, 0xe826, 0xeb4a, 0xe99a, 0xeca0, 0xe99a, +0xeca0, 0xe9f8, 0xecde, 0xe9f8, 0xecde, 0xeb61, 0xee27, 0xeb61, 0xee27, 0xee6d, 0xf113, +0xee6d, 0xf113, 0xefa6, 0xf22c, 0xefa6, 0xf22c, 0xefa6, 0xf22c, 0xee3b, 0xf0a4, 0xee3b, +0xf0a4, 0xef3a, 0xf186, 0xef3a, 0xf186, 0xef26, 0xf158, 0xef26, 0xf158, 0xefae, 0xf1c8, +0xefae, 0xf1c8, 0xf1be, 0xf3c2, 0xf1be, 0xf3c2, 0xf153, 0xf345, 0xf153, 0xf345, 0xf153, +0xf345, 0xf0e3, 0xf2c5, 0xf0e3, 0xf2c5, 0xefab, 0xf17f, 0xefab, 0xf17f, 0xf0cf, 0xf299, +0xf0cf, 0xf299, 0xf2c9, 0xf48a, 0xf2c9, 0xf48a, 0xf2be, 0xf477, 0xf2be, 0xf477, 0xf25b, +0xf40f, 0xf25b, 0xf40f, 0xf25b, 0xf40f, 0xf348, 0xf4f7, 0xf348, 0xf4f7, 0xf3fa, 0xf5a6, +0xf3fa, 0xf5a6, 0xf209, 0xf3b1, 0xf209, 0xf3b1, 0xf0dc, 0xf280, 0xf0dc, 0xf280, 0xf055, +0xf1f3, 0xf055, 0xf1f3, 0xf055, 0xf1f3, 0xeeb3, 0xf049, 0xeeb3, 0xf049, 0xef4d, 0xf0db, +0xef4d, 0xf0db, 0xf009, 0xf18a, 0xf009, 0xf18a, 0xefce, 0xf141, 0xefce, 0xf141, 0xf115, +0xf276, 0xf115, 0xf276, 0xef14, 0xf060, 0xef14, 0xf060, 0xef14, 0xf060, 0xee5e, 0xef92, +0xee5e, 0xef92, 0xef0a, 0xf022, 0xef0a, 0xf022, 0xee97, 0xef90, 0xee97, 0xef90, 0xeffa, +0xf0d0, 0xeffa, 0xf0d0, 0xf04f, 0xf100, 0xf04f, 0xf100, 0xf1aa, 0xf233, 0xf1aa, 0xf233, +0xf1aa, 0xf233, 0xf256, 0xf2b5, 0xf256, 0xf2b5, 0xf3ec, 0xf41f, 0xf3ec, 0xf41f, 0xf511, +0xf517, 0xf511, 0xf517, 0xf431, 0xf409, 0xf431, 0xf409, 0xf726, 0xf6d0, 0xf726, 0xf6d0, +0xf726, 0xf6d0, 0xf8f5, 0xf872, 0xf8f5, 0xf872, 0xf9de, 0xf930, 0xf9de, 0xf930, 0xfc33, +0xfb5b, 0xfc33, 0xfb5b, 0xfdac, 0xfcad, 0xfdac, 0xfcad, 0xa, 0xfee6, 0xa, 0xfee6, +0x1c5, 0x7f, 0x1c5, 0x7f, 0x1c5, 0x7f, 0x2e4, 0x181, 0x2e4, 0x181, 0x310, +0x192, 0x310, 0x192, 0x3d6, 0x243, 0x3d6, 0x243, 0x68f, 0x4eb, 0x68f, 0x4eb, +0x6c8, 0x517, 0x6c8, 0x517, 0x944, 0x78a, 0x944, 0x78a, 0x944, 0x78a, 0xd11, +0xb53, 0xd11, 0xb53, 0xf75, 0xdb6, 0xf75, 0xdb6, 0x13a3, 0x11e6, 0x13a3, 0x11e6, +0x15dd, 0x1425, 0x15dd, 0x1425, 0x15ef, 0x143f, 0x15ef, 0x143f, 0x15ef, 0x143f, 0x15b4, +0x140f, 0x15b4, 0x140f, 0x150c, 0x1372, 0x150c, 0x1372, 0x140e, 0x1280, 0x140e, 0x1280, +0x148a, 0x1309, 0x148a, 0x1309, 0x1366, 0x11f3, 0x1366, 0x11f3, 0x11fa, 0x1093, 0x11fa, +0x1093, 0x11fa, 0x1093, 0x1413, 0x12b7, 0x1413, 0x12b7, 0x13d3, 0x1281, 0x13d3, 0x1281, +0x1312, 0x11c9, 0x1312, 0x11c9, 0x1322, 0x11e0, 0x1322, 0x11e0, 0x10ed, 0xfaf, 0x10ed, +0xfaf, 0xf7d, 0xe41, 0xf7d, 0xe41, 0xf7d, 0xe41, 0xe1e, 0xce2, 0xe1e, 0xce2, +0xcf6, 0xbb7, 0xcf6, 0xbb7, 0xf13, 0xdd0, 0xf13, 0xdd0, 0x1022, 0xed9, 0x1022, +0xed9, 0x114e, 0xffe, 0x114e, 0xffe, 0x114e, 0xffe, 0x138d, 0x1235, 0x138d, 0x1235, +0x1458, 0x12f7, 0x1458, 0x12f7, 0x13b9, 0x124e, 0x13b9, 0x124e, 0x1246, 0x10d3, 0x1246, +0x10d3, 0x1296, 0x111c, 0x1296, 0x111c, 0xff7, 0xe76, 0xff7, 0xe76, 0xff7, 0xe76, +0xf47, 0xdc3, 0xf47, 0xdc3, 0x1049, 0xec3, 0x1049, 0xec3, 0xe6a, 0xce4, 0xe6a, +0xce4, 0x10cb, 0xf49, 0x10cb, 0xf49, 0x126f, 0x10f4, 0x126f, 0x10f4, 0x127c, 0x110c, +0x127c, 0x110c, 0x127c, 0x110c, 0x129f, 0x113d, 0x129f, 0x113d, 0x10d8, 0xf88, 0x10d8, +0xf88, 0xf20, 0xde5, 0xf20, 0xde5, 0xc71, 0xb4e, 0xc71, 0xb4e, 0x9f6, 0x8ef, +0x9f6, 0x8ef, 0x9f6, 0x8ef, 0x8f1, 0x808, 0x8f1, 0x808, 0x8de, 0x815, 0x8de, +0x815, 0x93b, 0x894, 0x93b, 0x894, 0x8d4, 0x850, 0x8d4, 0x850, 0x825, 0x7c5, +0x825, 0x7c5, 0x6df, 0x6a2, 0x6df, 0x6a2, 0x6df, 0x6a2, 0x509, 0x4f0, 0x509, +0x4f0, 0x317, 0x31f, 0x317, 0x31f, 0xbe, 0xe7, 0xbe, 0xe7, 0xffe7, 0x2e, +0xffe7, 0x2e, 0xff66, 0xffc8, 0xff66, 0xffc8, 0xff66, 0xffc8, 0xfef6, 0xff70, 0xfef6, +0xff70, 0xff2c, 0xffbb, 0xff2c, 0xffbb, 0xff52, 0xfff1, 0xff52, 0xfff1, 0xffc9, 0x75, +0xffc9, 0x75, 0xff13, 0xffc8, 0xff13, 0xffc8, 0xfd3d, 0xfdf8, 0xfd3d, 0xfdf8, 0xfd3d, +0xfdf8, 0xfcfa, 0xfdb6, 0xfcfa, 0xfdb6, 0xfda1, 0xfe5b, 0xfda1, 0xfe5b, 0xfd78, 0xfe2c, +0xfd78, 0xfe2c, 0xfdc5, 0xfe70, 0xfdc5, 0xfe70, 0xfcc3, 0xfd63, 0xfcc3, 0xfd63, 0xfcfd, +0xfd90, 0xfcfd, 0xfd90, 0xfcfd, 0xfd90, 0xfd60, 0xfde3, 0xfd60, 0xfde3, 0xfc70, 0xfce4, +0xfc70, 0xfce4, 0xfd4f, 0xfdb3, 0xfd4f, 0xfdb3, 0xfc77, 0xfcc9, 0xfc77, 0xfcc9, 0xfcab, +0xfced, 0xfcab, 0xfced, 0xfcab, 0xfced, 0xfdee, 0xfe21, 0xfdee, 0xfe21, 0xfe26, 0xfe4a, +0xfe26, 0xfe4a, 0xfe37, 0xfe4e, 0xfe37, 0xfe4e, 0xff4b, 0xff57, 0xff4b, 0xff57, 0x99, +0x9c, 0x99, 0x9c, 0xff90, 0xff8b, 0xff90, 0xff8b, 0xff90, 0xff8b, 0xff6f, 0xff66, +0xff6f, 0xff66, 0xff53, 0xff47, 0xff53, 0xff47, 0xff50, 0xff42, 0xff50, 0xff42, 0xffb8, +0xffab, 0xffb8, 0xffab, 0x89, 0x7e, 0x89, 0x7e, 0x264, 0x25c, 0x264, 0x25c, +0x264, 0x25c, 0x31c, 0x317, 0x31c, 0x317, 0x416, 0x416, 0x416, 0x416, 0x511, +0x514, 0x511, 0x514, 0x656, 0x65c, 0x656, 0x65c, 0x7aa, 0x7b1, 0x7aa, 0x7b1, +0x7aa, 0x7b1, 0x693, 0x69c, 0x693, 0x69c, 0x676, 0x67d, 0x676, 0x67d, 0x62a, +0x62d, 0x62a, 0x62d, 0x4d5, 0x4d1, 0x4d5, 0x4d1, 0x6f0, 0x6e3, 0x6f0, 0x6e3, +0x750, 0x737, 0x750, 0x737, 0x750, 0x737, 0x650, 0x627, 0x650, 0x627, 0x7a0, +0x765, 0x7a0, 0x765, 0x939, 0x8e8, 0x939, 0x8e8, 0x9ae, 0x944, 0x9ae, 0x944, +0x8a1, 0x81c, 0x8a1, 0x81c, 0x93b, 0x898, 0x93b, 0x898, 0x93b, 0x898, 0x93c, +0x878, 0x93c, 0x878, 0x8df, 0x7f9, 0x8df, 0x7f9, 0x9d2, 0x8c9, 0x9d2, 0x8c9, +0xadc, 0x9b0, 0xadc, 0x9b0, 0xd4e, 0xbfd, 0xd4e, 0xbfd, 0xd4e, 0xbfd, 0xf47, +0xdd3, 0xf47, 0xdd3, 0x108f, 0xef8, 0x108f, 0xef8, 0x11fa, 0x1040, 0x11fa, 0x1040, +0x1186, 0xfac, 0x1186, 0xfac, 0x1126, 0xf2e, 0x1126, 0xf2e, 0x124a, 0x1036, 0x124a, +0x1036, 0x124a, 0x1036, 0x1223, 0xff8, 0x1223, 0xff8, 0x1287, 0x1046, 0x1287, 0x1046, +0x1431, 0x11de, 0x1431, 0x11de, 0x1496, 0x1234, 0x1496, 0x1234, 0x14f3, 0x1286, 0x14f3, +0x1286, 0x16b5, 0x1440, 0x16b5, 0x1440, 0x16b5, 0x1440, 0x1625, 0x13ac, 0x1625, 0x13ac, +0x141c, 0x11a2, 0x141c, 0x11a2, 0x1319, 0x10a1, 0x1319, 0x10a1, 0x1069, 0xdf6, 0x1069, +0xdf6, 0xfa3, 0xd36, 0xfa3, 0xd36, 0xfa3, 0xd36, 0x106c, 0xe07, 0x106c, 0xe07, +0x10e1, 0xe86, 0x10e1, 0xe86, 0x1240, 0xfef, 0x1240, 0xfef, 0x134b, 0x1106, 0x134b, +0x1106, 0x147c, 0x1242, 0x147c, 0x1242, 0x14a3, 0x1275, 0x14a3, 0x1275, 0x14a3, 0x1275, +0x13da, 0x11b5, 0x13da, 0x11b5, 0x1191, 0xf76, 0x1191, 0xf76, 0xf5c, 0xd48, 0xf5c, +0xd48, 0xf41, 0xd34, 0xf41, 0xd34, 0xd80, 0xb77, 0xd80, 0xb77, 0xd48, 0xb41, +0xd48, 0xb41, 0xd48, 0xb41, 0xef3, 0xcee, 0xef3, 0xcee, 0xe5b, 0xc55, 0xe5b, +0xc55, 0xddb, 0xbd2, 0xddb, 0xbd2, 0xc3f, 0xa32, 0xc3f, 0xa32, 0xc74, 0xa62, +0xc74, 0xa62, 0xc74, 0xa62, 0xc17, 0x9ff, 0xc17, 0x9ff, 0x9a0, 0x781, 0x9a0, +0x781, 0xa24, 0x7ff, 0xa24, 0x7ff, 0x8af, 0x684, 0x8af, 0x684, 0x909, 0x6d8, +0x909, 0x6d8, 0xa87, 0x853, 0xa87, 0x853, 0xa87, 0x853, 0xb02, 0x8cc, 0xb02, +0x8cc, 0xbf9, 0x9c3, 0xbf9, 0x9c3, 0xa67, 0x833, 0xa67, 0x833, 0xafb, 0x8cc, +0xafb, 0x8cc, 0xb48, 0x921, 0xb48, 0x921, 0xa08, 0x7ec, 0xa08, 0x7ec, 0xa08, +0x7ec, 0xa0f, 0x801, 0xa0f, 0x801, 0x9a2, 0x7a5, 0x9a2, 0x7a5, 0x926, 0x73e, +0x926, 0x73e, 0x9e9, 0x819, 0x9e9, 0x819, 0xb53, 0x99d, 0xb53, 0x99d, 0xb53, +0x99d, 0xbb9, 0xa1f, 0xbb9, 0xa1f, 0xa9e, 0x924, 0xa9e, 0x924, 0x856, 0x6fc, +0x856, 0x6fc, 0x734, 0x5fc, 0x734, 0x5fc, 0x77d, 0x668, 0x77d, 0x668, 0x705, +0x613, 0x705, 0x613, 0x705, 0x613, 0x634, 0x565, 0x634, 0x565, 0x6d4, 0x627, +0x6d4, 0x627, 0x6a5, 0x61a, 0x6a5, 0x61a, 0x534, 0x4c9, 0x534, 0x4c9, 0x505, +0x4b8, 0x505, 0x4b8, 0x360, 0x32e, 0x360, 0x32e, 0x360, 0x32e, 0x150, 0x137, +0x150, 0x137, 0x261, 0x25f, 0x261, 0x25f, 0x2b2, 0x2c5, 0x2b2, 0x2c5, 0x21c, +0x240, 0x21c, 0x240, 0x25a, 0x28c, 0x25a, 0x28c, 0x25a, 0x28c, 0x1b4, 0x1f3, +0x1b4, 0x1f3, 0x55, 0x9d, 0x55, 0x9d, 0xfec5, 0xff14, 0xfec5, 0xff14, 0xff3c, +0xff90, 0xff3c, 0xff90, 0xfe15, 0xfe6d, 0xfe15, 0xfe6d, 0xfc31, 0xfc8c, 0xfc31, 0xfc8c, +0xfc31, 0xfc8c, 0xfc50, 0xfcac, 0xfc50, 0xfcac, 0xfac2, 0xfb20, 0xfac2, 0xfb20, 0xfb44, +0xfba3, 0xfb44, 0xfba3, 0xfd9b, 0xfdfb, 0xfd9b, 0xfdfb, 0xfff5, 0x58, 0xfff5, 0x58, +0xf6, 0x15c, 0xf6, 0x15c, 0xf6, 0x15c, 0x9a, 0x105, 0x9a, 0x105, 0xd4, +0x144, 0xd4, 0x144, 0xffa5, 0x1d, 0xffa5, 0x1d, 0xfe0f, 0xfe92, 0xfe0f, 0xfe92, +0xfbdc, 0xfc6b, 0xfbdc, 0xfc6b, 0xfbdc, 0xfc6b, 0xfaba, 0xfb56, 0xfaba, 0xfb56, 0xface, +0xfb7a, 0xface, 0xfb7a, 0xfa68, 0xfb26, 0xfa68, 0xfb26, 0xfafa, 0xfbcc, 0xfafa, 0xfbcc, +0xfa7f, 0xfb66, 0xfa7f, 0xfb66, 0xf986, 0xfa83, 0xf986, 0xfa83, 0xf986, 0xfa83, 0xf870, +0xf984, 0xf870, 0xf984, 0xf6df, 0xf80b, 0xf6df, 0xf80b, 0xf5d5, 0xf719, 0xf5d5, 0xf719, +0xf32a, 0xf486, 0xf32a, 0xf486, 0xf2a9, 0xf41c, 0xf2a9, 0xf41c, 0xf2a9, 0xf41c, 0xf1f8, +0xf381, 0xf1f8, 0xf381, 0xefd3, 0xf170, 0xefd3, 0xf170, 0xf1ba, 0xf36b, 0xf1ba, 0xf36b, +0xf2ea, 0xf4ac, 0xf2ea, 0xf4ac, 0xf46b, 0xf63d, 0xf46b, 0xf63d, 0xf3e4, 0xf5c4, 0xf3e4, +0xf5c4, 0xf3e4, 0xf5c4, 0xf2ca, 0xf4b4, 0xf2ca, 0xf4b4, 0xf40e, 0xf602, 0xf40e, 0xf602, +0xf170, 0xf36a, 0xf170, 0xf36a, 0xf02b, 0xf229, 0xf02b, 0xf229, 0xef43, 0xf143, 0xef43, +0xf143, 0xee11, 0xf010, 0xee11, 0xf010, 0xee11, 0xf010, 0xee0a, 0xf007, 0xee0a, 0xf007, +0xecd1, 0xeeca, 0xecd1, 0xeeca, 0xec71, 0xee66, 0xec71, 0xee66, 0xeb7e, 0xed6c, 0xeb7e, +0xed6c, 0xead8, 0xecc0, 0xead8, 0xecc0, 0xead8, 0xecc0, 0xea14, 0xebf5, 0xea14, 0xebf5, +0xe87c, 0xea56, 0xe87c, 0xea56, 0xe7c8, 0xe99c, 0xe7c8, 0xe99c, 0xe791, 0xe95f, 0xe791, +0xe95f, 0xe82c, 0xe9f7, 0xe82c, 0xe9f7, 0xe8c1, 0xea88, 0xe8c1, 0xea88, 0xe8c1, 0xea88, +0xe90d, 0xead2, 0xe90d, 0xead2, 0xe941, 0xeb07, 0xe941, 0xeb07, 0xe8ed, 0xeab5, 0xe8ed, +0xeab5, 0xe850, 0xea1c, 0xe850, 0xea1c, 0xe6a1, 0xe873, 0xe6a1, 0xe873, 0xe5ee, 0xe7c8, +0xe5ee, 0xe7c8, 0xe5ee, 0xe7c8, 0xe574, 0xe758, 0xe574, 0xe758, 0xe505, 0xe6f4, 0xe505, +0xe6f4, 0xe639, 0xe836, 0xe639, 0xe836, 0xe618, 0xe823, 0xe618, 0xe823, 0xe655, 0xe870, +0xe655, 0xe870, 0xe655, 0xe870, 0xe697, 0xe8c1, 0xe697, 0xe8c1, 0xe6ef, 0xe929, 0xe6ef, +0xe929, 0xe720, 0xe96b, 0xe720, 0xe96b, 0xe628, 0xe882, 0xe628, 0xe882, 0xe5e3, 0xe84c, +0xe5e3, 0xe84c, 0xe597, 0xe80d, 0xe597, 0xe80d, 0xe597, 0xe80d, 0xe67c, 0xe8ff, 0xe67c, +0xe8ff, 0xe761, 0xe9ed, 0xe761, 0xe9ed, 0xea08, 0xec9d, 0xea08, 0xec9d, 0xec60, 0xeefb, +0xec60, 0xeefb, 0xed21, 0xefc0, 0xed21, 0xefc0, 0xf104, 0xf3a4, 0xf104, 0xf3a4, 0xf104, +0xf3a4, 0xf23b, 0xf4da, 0xf23b, 0xf4da, 0xf0e2, 0xf37d, 0xf0e2, 0xf37d, 0xf211, 0xf4a6, +0xf211, 0xf4a6, 0xf1fc, 0xf489, 0xf1fc, 0xf489, 0xf107, 0xf389, 0xf107, 0xf389, 0xf107, +0xf389, 0xf2ff, 0xf575, 0xf2ff, 0xf575, 0xf3d7, 0xf640, 0xf3d7, 0xf640, 0xf296, 0xf4f0, +0xf296, 0xf4f0, 0xf2e5, 0xf52f, 0xf2e5, 0xf52f, 0xf401, 0xf63b, 0xf401, 0xf63b, 0xf48f, +0xf6b8, 0xf48f, 0xf6b8, 0xf48f, 0xf6b8, 0xf4a8, 0xf6c0, 0xf4a8, 0xf6c0, 0xf533, 0xf73b, +0xf533, 0xf73b, 0xf646, 0xf83e, 0xf646, 0xf83e, 0xf6ab, 0xf894, 0xf6ab, 0xf894, 0xf6ad, +0xf889, 0xf6ad, 0xf889, 0xf70b, 0xf8da, 0xf70b, 0xf8da, 0xf70b, 0xf8da, 0xf7cd, 0xf991, +0xf7cd, 0xf991, 0xf807, 0xf9c1, 0xf807, 0xf9c1, 0xf79d, 0xf94d, 0xf79d, 0xf94d, 0xf87d, +0xfa26, 0xf87d, 0xfa26, 0xf704, 0xf8a5, 0xf704, 0xf8a5, 0xf704, 0xf8a5, 0xf630, 0xf7cc, +0xf630, 0xf7cc, 0xf78c, 0xf922, 0xf78c, 0xf922, 0xf650, 0xf7e2, 0xf650, 0xf7e2, 0xf726, +0xf8b3, 0xf726, 0xf8b3, 0xf66d, 0xf7f5, 0xf66d, 0xf7f5, 0xf54d, 0xf6d0, 0xf54d, 0xf6d0, +0xf54d, 0xf6d0, 0xf5e1, 0xf75e, 0xf5e1, 0xf75e, 0xf406, 0xf57c, 0xf406, 0xf57c, 0xf438, +0xf5a5, 0xf438, 0xf5a5, 0xf365, 0xf4c9, 0xf365, 0xf4c9, 0xf0f1, 0xf24a, 0xf0f1, 0xf24a, +0xf1a5, 0xf2f1, 0xf1a5, 0xf2f1, 0xf1a5, 0xf2f1, 0xf348, 0xf485, 0xf348, 0xf485, 0xf3b3, +0xf4df, 0xf3b3, 0xf4df, 0xf38e, 0xf4a7, 0xf38e, 0xf4a7, 0xf3b2, 0xf4b6, 0xf3b2, 0xf4b6, +0xf369, 0xf457, 0xf369, 0xf457, 0xf369, 0xf457, 0xf364, 0xf439, 0xf364, 0xf439, 0xf42c, +0xf4e6, 0xf42c, 0xf4e6, 0xf390, 0xf42e, 0xf390, 0xf42e, 0xf3c9, 0xf44a, 0xf3c9, 0xf44a, +0xf536, 0xf599, 0xf536, 0xf599, 0xf646, 0xf68b, 0xf646, 0xf68b, 0xf646, 0xf68b, 0xf82b, +0xf850, 0xf82b, 0xf850, 0xf95d, 0xf963, 0xf95d, 0xf963, 0xfad1, 0xfab9, 0xfad1, 0xfab9, +0xfc57, 0xfc21, 0xfc57, 0xfc21, 0xfdba, 0xfd66, 0xfdba, 0xfd66, 0xff9a, 0xff28, 0xff9a, +0xff28, 0xff9a, 0xff28, 0x73, 0xffe7, 0x73, 0xffe7, 0xee, 0x47, 0xee, 0x47, +0x2a9, 0x1e9, 0x2a9, 0x1e9, 0x4f6, 0x420, 0x4f6, 0x420, 0x738, 0x64c, 0x738, +0x64c, 0x738, 0x64c, 0x9dd, 0x8de, 0x9dd, 0x8de, 0xb2d, 0xa1c, 0xb2d, 0xa1c, +0xd14, 0xbf3, 0xd14, 0xbf3, 0xf74, 0xe46, 0xf74, 0xe46, 0xf2d, 0xdf2, 0xf2d, +0xdf2, 0xe46, 0xd00, 0xe46, 0xd00, 0xe46, 0xd00, 0xe26, 0xcd6, 0xe26, 0xcd6, +0xcfa, 0xba1, 0xcfa, 0xba1, 0xcf3, 0xb93, 0xcf3, 0xb93, 0xd91, 0xc29, 0xd91, +0xc29, 0xcd3, 0xb66, 0xcd3, 0xb66, 0xc84, 0xb11, 0xc84, 0xb11, 0xc84, 0xb11, +0xbcf, 0xa57, 0xbcf, 0xa57, 0xcaf, 0xb32, 0xcaf, 0xb32, 0xbea, 0xa68, 0xbea, +0xa68, 0x9a2, 0x81a, 0x9a2, 0x81a, 0x8d5, 0x748, 0x8d5, 0x748, 0x8d5, 0x748, +0x876, 0x6e3, 0x876, 0x6e3, 0x8a9, 0x710, 0x8a9, 0x710, 0x8b1, 0x712, 0x8b1, +0x712, 0xad0, 0x92a, 0xad0, 0x92a, 0xb1c, 0x970, 0xb1c, 0x970, 0xc72, 0xabf, +0xc72, 0xabf, 0xc72, 0xabf, 0xfb1, 0xdf7, 0xfb1, 0xdf7, 0xe28, 0xc67, 0xe28, +0xc67, 0xcb6, 0xaee, 0xcb6, 0xaee, 0xd99, 0xbcb, 0xd99, 0xbcb, 0xdd7, 0xc03, +0xdd7, 0xc03, 0xdd2, 0xbf8, 0xdd2, 0xbf8, 0xdd2, 0xbf8, 0xe40, 0xc62, 0xe40, +0xc62, 0xe47, 0xc67, 0xe47, 0xc67, 0xe3c, 0xc5a, 0xe3c, 0xc5a, 0xdfe, 0xc1b, +0xdfe, 0xc1b, 0xdc7, 0xbe5, 0xdc7, 0xbe5, 0xdc7, 0xbe5, 0xcde, 0xb00, 0xcde, +0xb00, 0xba3, 0x9c9, 0xba3, 0x9c9, 0xab7, 0x8e4, 0xab7, 0x8e4, 0xa1b, 0x850, +0xa1b, 0x850, 0x994, 0x7d3, 0x994, 0x7d3, 0x933, 0x77d, 0x933, 0x77d, 0x933, +0x77d, 0x977, 0x7cf, 0x977, 0x7cf, 0x8fd, 0x764, 0x8fd, 0x764, 0x9b2, 0x82a, +0x9b2, 0x82a, 0x93a, 0x7c4, 0x93a, 0x7c4, 0x893, 0x72f, 0x893, 0x72f, 0x893, +0x72f, 0x7c4, 0x673, 0x7c4, 0x673, 0x58d, 0x451, 0x58d, 0x451, 0x653, 0x52b, +0x653, 0x52b, 0x5f2, 0x4de, 0x5f2, 0x4de, 0x3d1, 0x2d2, 0x3d1, 0x2d2, 0x3a8, +0x2bd, 0x3a8, 0x2bd, 0x3a8, 0x2bd, 0x49b, 0x3c2, 0x49b, 0x3c2, 0x436, 0x36f, +0x436, 0x36f, 0x3f3, 0x33d, 0x3f3, 0x33d, 0x3a5, 0x300, 0x3a5, 0x300, 0x223, +0x18c, 0x223, 0x18c, 0x30a, 0x280, 0x30a, 0x280, 0x30a, 0x280, 0x4a8, 0x42b, +0x4a8, 0x42b, 0x42b, 0x3b9, 0x42b, 0x3b9, 0x3dd, 0x375, 0x3dd, 0x375, 0x381, +0x320, 0x381, 0x320, 0x258, 0x1ff, 0x258, 0x1ff, 0x258, 0x1ff, 0x40a, 0x3b7, +0x40a, 0x3b7, 0x4d2, 0x484, 0x4d2, 0x484, 0x401, 0x3b7, 0x401, 0x3b7, 0x4ed, +0x4a7, 0x4ed, 0x4a7, 0x46b, 0x427, 0x46b, 0x427, 0x5fa, 0x5b9, 0x5fa, 0x5b9, +0x5fa, 0x5b9, 0x83c, 0x7fd, 0x83c, 0x7fd, 0x6ac, 0x670, 0x6ac, 0x670, 0x5d3, +0x599, 0x5d3, 0x599, 0x506, 0x4d0, 0x506, 0x4d0, 0x532, 0x4ff, 0x532, 0x4ff, +0x67d, 0x64c, 0x67d, 0x64c, 0x67d, 0x64c, 0x53f, 0x511, 0x53f, 0x511, 0x576, +0x54b, 0x576, 0x54b, 0x673, 0x64b, 0x673, 0x64b, 0x799, 0x775, 0x799, 0x775, +0x7cd, 0x7ac, 0x7cd, 0x7ac, 0x7cd, 0x7ac, 0x860, 0x842, 0x860, 0x842, 0xa5c, +0xa40, 0xa5c, 0xa40, 0x912, 0x8f8, 0x912, 0x8f8, 0xa1c, 0xa04, 0xa1c, 0xa04, +0x965, 0x94d, 0x965, 0x94d, 0x5e8, 0x5d0, 0x5e8, 0x5d0, 0x5e8, 0x5d0, 0x6a6, +0x68d, 0x6a6, 0x68d, 0x6e6, 0x6cb, 0x6e6, 0x6cb, 0x6ca, 0x6ab, 0x6ca, 0x6ab, +0x742, 0x71e, 0x742, 0x71e, 0x78f, 0x765, 0x78f, 0x765, 0x839, 0x808, 0x839, +0x808, 0x839, 0x808, 0x804, 0x7ca, 0x804, 0x7ca, 0x88a, 0x847, 0x88a, 0x847, +0x8da, 0x88c, 0x8da, 0x88c, 0x77c, 0x721, 0x77c, 0x721, 0x709, 0x6a0, 0x709, +0x6a0, 0x709, 0x6a0, 0x765, 0x6ef, 0x765, 0x6ef, 0x806, 0x780, 0x806, 0x780, +0x81d, 0x787, 0x81d, 0x787, 0x863, 0x7bc, 0x863, 0x7bc, 0x9bb, 0x904, 0x9bb, +0x904, 0xace, 0xa05, 0xace, 0xa05, 0xace, 0xa05, 0xb87, 0xaad, 0xb87, 0xaad, +0xc01, 0xb14, 0xc01, 0xb14, 0xbef, 0xaf1, 0xbef, 0xaf1, 0xb46, 0xa36, 0xb46, +0xa36, 0xcb6, 0xb95, 0xcb6, 0xb95, 0xe0c, 0xcda, 0xe0c, 0xcda, 0xe0c, 0xcda, +0xd57, 0xc15, 0xd57, 0xc15, 0xd43, 0xbf1, 0xd43, 0xbf1, 0xd53, 0xbf1, 0xd53, +0xbf1, 0xcbc, 0xb4b, 0xcbc, 0xb4b, 0xd92, 0xc13, 0xd92, 0xc13, 0xd92, 0xc13, +0xe1a, 0xc8e, 0xe1a, 0xc8e, 0xca4, 0xb0c, 0xca4, 0xb0c, 0xc15, 0xa70, 0xc15, +0xa70, 0xb88, 0x9d9, 0xb88, 0x9d9, 0xc1f, 0xa66, 0xc1f, 0xa66, 0xb96, 0x9d3, +0xb96, 0x9d3, 0xb96, 0x9d3, 0xadc, 0x910, 0xadc, 0x910, 0xb89, 0x9b6, 0xb89, +0x9b6, 0xc88, 0xaae, 0xc88, 0xaae, 0xe23, 0xc43, 0xe23, 0xc43, 0xced, 0xb09, +0xced, 0xb09, 0xcce, 0xae5, 0xcce, 0xae5, 0xcce, 0xae5, 0xb1b, 0x92f, 0xb1b, +0x92f, 0x9eb, 0x7fd, 0x9eb, 0x7fd, 0xa7f, 0x88f, 0xa7f, 0x88f, 0x8c2, 0x6d1, +0x8c2, 0x6d1, 0x8cb, 0x6db, 0x8cb, 0x6db, 0x8cb, 0x6db, 0x739, 0x54b, 0x739, +0x54b, 0x740, 0x553, 0x740, 0x553, 0x821, 0x637, 0x821, 0x637, 0x6d1, 0x4eb, +0x6d1, 0x4eb, 0x6fc, 0x51b, 0x6fc, 0x51b, 0x5b4, 0x3d9, 0x5b4, 0x3d9, 0x5b4, +0x3d9, 0x55f, 0x38a, 0x55f, 0x38a, 0x63c, 0x46f, 0x63c, 0x46f, 0x5c5, 0x401, +0x5c5, 0x401, 0x69d, 0x4e2, 0x69d, 0x4e2, 0x6cd, 0x51d, 0x6cd, 0x51d, 0x83c, +0x697, 0x83c, 0x697, 0x83c, 0x697, 0xb20, 0x987, 0xb20, 0x987, 0xad0, 0x944, +0xad0, 0x944, 0xa39, 0x8ba, 0xa39, 0x8ba, 0xab1, 0x942, 0xab1, 0x942, 0xb4d, +0x9ed, 0xb4d, 0x9ed, 0xb4d, 0x9ed, 0xa57, 0x908, 0xa57, 0x908, 0x90c, 0x7ce, +0x90c, 0x7ce, 0x8a4, 0x779, 0x8a4, 0x779, 0x8c9, 0x7b1, 0x8c9, 0x7b1, 0x9a7, +0x8a3, 0x9a7, 0x8a3, 0x903, 0x814, 0x903, 0x814, 0x903, 0x814, 0x802, 0x728, +0x802, 0x728, 0x6b6, 0x5f3, 0x6b6, 0x5f3, 0x5d6, 0x529, 0x5d6, 0x529, 0x53e, +0x4a9, 0x53e, 0x4a9, 0x5c5, 0x547, 0x5c5, 0x547, 0x599, 0x534, 0x599, 0x534, +0x599, 0x534, 0x4e8, 0x49c, 0x4e8, 0x49c, 0x5e4, 0x5b1, 0x5e4, 0x5b1, 0x3bb, +0x3a1, 0x3bb, 0x3a1, 0x369, 0x368, 0x369, 0x368, 0x3f5, 0x40d, 0x3f5, 0x40d, +0x3f5, 0x40d, 0x257, 0x288, 0x257, 0x288, 0x336, 0x381, 0x336, 0x381, 0x4b8, +0x51c, 0x4b8, 0x51c, 0x507, 0x584, 0x507, 0x584, 0x442, 0x4d7, 0x442, 0x4d7, +0x3be, 0x46c, 0x3be, 0x46c, 0x3be, 0x46c, 0x1c2, 0x288, 0x1c2, 0x288, 0x9a, +0x177, 0x9a, 0x177, 0x14c, 0x241, 0x14c, 0x241, 0xffe7, 0xf3, 0xffe7, 0xf3, +0xff7d, 0x9f, 0xff7d, 0x9f, 0xfffd, 0x135, 0xfffd, 0x135, 0xfffd, 0x135, 0x116, +0x263, 0x116, 0x263, 0x298, 0x3f9, 0x298, 0x3f9, 0x2f6, 0x46b, 0x2f6, 0x46b, +0x33d, 0x4c5, 0x33d, 0x4c5, 0x2ea, 0x485, 0x2ea, 0x485, 0x2ea, 0x485, 0x314, +0x4c0, 0x314, 0x4c0, 0x19f, 0x35c, 0x19f, 0x35c, 0xdd, 0x2aa, 0xdd, 0x2aa, +0xab, 0x288, 0xab, 0x288, 0xfec7, 0xb3, 0xfec7, 0xb3, 0xff90, 0x188, 0xff90, +0x188, 0xff90, 0x188, 0xff29, 0x12f, 0xff29, 0x12f, 0xfe81, 0x92, 0xfe81, 0x92, +0xfd79, 0xff94, 0xfd79, 0xff94, 0xfcb3, 0xfed8, 0xfcb3, 0xfed8, 0xfd8d, 0xffbb, 0xfd8d, +0xffbb, 0xfd8d, 0xffbb, 0xfb0e, 0xfd43, 0xfb0e, 0xfd43, 0xfa0e, 0xfc4a, 0xfa0e, 0xfc4a, +0xf91e, 0xfb5f, 0xf91e, 0xfb5f, 0xf7a5, 0xf9ea, 0xf7a5, 0xf9ea, 0xf710, 0xf958, 0xf710, +0xf958, 0xf4ed, 0xf737, 0xf4ed, 0xf737, 0xf4ed, 0xf737, 0xf56a, 0xf7b5, 0xf56a, 0xf7b5, +0xf61b, 0xf867, 0xf61b, 0xf867, 0xf68b, 0xf8d7, 0xf68b, 0xf8d7, 0xf824, 0xfa6e, 0xf824, +0xfa6e, 0xf733, 0xf97b, 0xf733, 0xf97b, 0xf5de, 0xf823, 0xf5de, 0xf823, 0xf5de, 0xf823, +0xf4c5, 0xf705, 0xf4c5, 0xf705, 0xf406, 0xf642, 0xf406, 0xf642, 0xf3cb, 0xf602, 0xf3cb, +0xf602, 0xf29c, 0xf4ce, 0xf29c, 0xf4ce, 0xf0ba, 0xf2e7, 0xf0ba, 0xf2e7, 0xf0ba, 0xf2e7, +0xeeab, 0xf0d2, 0xeeab, 0xf0d2, 0xef1c, 0xf13c, 0xef1c, 0xf13c, 0xeef3, 0xf10d, 0xeef3, +0xf10d, 0xee65, 0xf079, 0xee65, 0xf079, 0xed8f, 0xef9c, 0xed8f, 0xef9c, 0xeada, 0xece0, +0xeada, 0xece0, 0xeada, 0xece0, 0xea70, 0xec70, 0xea70, 0xec70, 0xea43, 0xec3e, 0xea43, +0xec3e, 0xe93d, 0xeb31, 0xe93d, 0xeb31, 0xe791, 0xe97f, 0xe791, 0xe97f, 0xe72e, 0xe917, +0xe72e, 0xe917, 0xe73e, 0xe921, 0xe73e, 0xe921, 0xe73e, 0xe921, 0xe755, 0xe932, 0xe755, +0xe932, 0xe855, 0xea2d, 0xe855, 0xea2d, 0xe6dd, 0xe8af, 0xe6dd, 0xe8af, 0xe62b, 0xe7f8, +0xe62b, 0xe7f8, 0xe5d9, 0xe7a0, 0xe5d9, 0xe7a0, 0xe5d9, 0xe7a0, 0xe49e, 0xe660, 0xe49e, +0xe660, 0xe492, 0xe64f, 0xe492, 0xe64f, 0xe380, 0xe539, 0xe380, 0xe539, 0xe142, 0xe2f5, +0xe142, 0xe2f5, 0xe1bb, 0xe368, 0xe1bb, 0xe368, 0xe1f4, 0xe39c, 0xe1f4, 0xe39c, 0xe1f4, +0xe39c, 0xe162, 0xe304, 0xe162, 0xe304, 0xe270, 0xe40c, 0xe270, 0xe40c, 0xe20f, 0xe3a5, +0xe20f, 0xe3a5, 0xe244, 0xe3d4, 0xe244, 0xe3d4, 0xe2d0, 0xe459, 0xe2d0, 0xe459, 0xe38f, +0xe511, 0xe38f, 0xe511, 0xe38f, 0xe511, 0xe312, 0xe48e, 0xe312, 0xe48e, 0xe3a0, 0xe514, +0xe3a0, 0xe514, 0xe7a0, 0xe90c, 0xe7a0, 0xe90c, 0xe921, 0xea86, 0xe921, 0xea86, 0xeb49, +0xeca5, 0xeb49, 0xeca5, 0xeb49, 0xeca5, 0xed0b, 0xee5f, 0xed0b, 0xee5f, 0xec82, 0xedce, +0xec82, 0xedce, 0xee35, 0xef79, 0xee35, 0xef79, 0xef44, 0xf07f, 0xef44, 0xf07f, 0xee92, +0xefc4, 0xee92, 0xefc4, 0xedb0, 0xeeda, 0xedb0, 0xeeda, 0xedb0, 0xeeda, 0xed72, 0xee93, +0xed72, 0xee93, 0xef39, 0xf051, 0xef39, 0xf051, 0xefe7, 0xf0f7, 0xefe7, 0xf0f7, 0xf050, +0xf158, 0xf050, 0xf158, 0xf0f0, 0xf1ef, 0xf0f0, 0xf1ef, 0xf133, 0xf22a, 0xf133, 0xf22a, +0xf133, 0xf22a, 0xf276, 0xf366, 0xf276, 0xf366, 0xf2a8, 0xf38f, 0xf2a8, 0xf38f, 0xf4de, +0xf5be, 0xf4de, 0xf5be, 0xf544, 0xf61d, 0xf544, 0xf61d, 0xf471, 0xf542, 0xf471, 0xf542, +0xf471, 0xf542, 0xf6cb, 0xf795, 0xf6cb, 0xf795, 0xf650, 0xf714, 0xf650, 0xf714, 0xf5e8, +0xf6a5, 0xf5e8, 0xf6a5, 0xf5f1, 0xf6a7, 0xf5f1, 0xf6a7, 0xf4a8, 0xf558, 0xf4a8, 0xf558, +0xf53f, 0xf5e9, 0xf53f, 0xf5e9, 0xf53f, 0xf5e9, 0xf515, 0xf5b8, 0xf515, 0xf5b8, 0xf3e1, +0xf47e, 0xf3e1, 0xf47e, 0xf481, 0xf517, 0xf481, 0xf517, 0xf42d, 0xf4bd, 0xf42d, 0xf4bd, +0xf341, 0xf3ca, 0xf341, 0xf3ca, 0xf3e9, 0xf46a, 0xf3e9, 0xf46a, 0xf3e9, 0xf46a, 0xf393, +0xf40d, 0xf393, 0xf40d, 0xf241, 0xf2b2, 0xf241, 0xf2b2, 0xf17e, 0xf1e7, 0xf17e, 0xf1e7, +0xf1f9, 0xf259, 0xf1f9, 0xf259, 0xf262, 0xf2b8, 0xf262, 0xf2b8, 0xf262, 0xf2b8, 0xf299, +0xf2e4, 0xf299, 0xf2e4, 0xf287, 0xf2c7, 0xf287, 0xf2c7, 0xf30b, 0xf340, 0xf30b, 0xf340, +0xf4e6, 0xf50d, 0xf4e6, 0xf50d, 0xf408, 0xf422, 0xf408, 0xf422, 0xf286, 0xf291, 0xf286, +0xf291, 0xf286, 0xf291, 0xf336, 0xf332, 0xf336, 0xf332, 0xf4ee, 0xf4d9, 0xf4ee, 0xf4d9, +0xf6de, 0xf6b9, 0xf6de, 0xf6b9, 0xf782, 0xf74b, 0xf782, 0xf74b, 0xf890, 0xf846, 0xf890, +0xf846, 0xf968, 0xf90a, 0xf968, 0xf90a, 0xf968, 0xf90a, 0xfb88, 0xfb17, 0xfb88, 0xfb17, +0xff91, 0xff0b, 0xff91, 0xff0b, 0xd5, 0x3a, 0xd5, 0x3a, 0x2f7, 0x247, 0x2f7, +0x247, 0x535, 0x470, 0x535, 0x470, 0x535, 0x470, 0x646, 0x56b, 0x646, 0x56b, +0x824, 0x734, 0x824, 0x734, 0x95b, 0x855, 0x95b, 0x855, 0xa9a, 0x980, 0xa9a, +0x980, 0xaf2, 0x9c3, 0xaf2, 0x9c3, 0xe46, 0xd03, 0xe46, 0xd03, 0xe46, 0xd03, +0x115f, 0x1009, 0x115f, 0x1009, 0x1214, 0x10ab, 0x1214, 0x10ab, 0x146f, 0x12f5, 0x146f, +0x12f5, 0x144b, 0x12c0, 0x144b, 0x12c0, 0x143e, 0x12a4, 0x143e, 0x12a4, 0x1518, 0x1370, +0x1518, 0x1370, 0x1518, 0x1370, 0x157b, 0x13c5, 0x157b, 0x13c5, 0x1619, 0x1458, 0x1619, +0x1458, 0x146d, 0x12a2, 0x146d, 0x12a2, 0x13d8, 0x1205, 0x13d8, 0x1205, 0x14ae, 0x12d3, +0x14ae, 0x12d3, 0x14ae, 0x12d3, 0x1469, 0x1288, 0x1469, 0x1288, 0x1458, 0x1273, 0x1458, +0x1273, 0x1446, 0x125f, 0x1446, 0x125f, 0x13af, 0x11c6, 0x13af, 0x11c6, 0x10f4, 0xf0c, +0x10f4, 0xf0c, 0xfef, 0xe08, 0xfef, 0xe08, 0xfef, 0xe08, 0xfb8, 0xdd4, 0xfb8, +0xdd4, 0xd43, 0xb63, 0xd43, 0xb63, 0xedc, 0xd01, 0xedc, 0xd01, 0xfdf, 0xe0a, +0xfdf, 0xe0a, 0x1025, 0xe57, 0x1025, 0xe57, 0x12ac, 0x10e5, 0x12ac, 0x10e5, 0x12ac, +0x10e5, 0x12ec, 0x112e, 0x12ec, 0x112e, 0x12ce, 0x1118, 0x12ce, 0x1118, 0x1312, 0x1165, +0x1312, 0x1165, 0x12b6, 0x1112, 0x12b6, 0x1112, 0x124f, 0x10b5, 0x124f, 0x10b5, 0x124f, +0x10b5, 0x11fc, 0x106c, 0x11fc, 0x106c, 0x10d2, 0xf4c, 0x10d2, 0xf4c, 0x1081, 0xf05, +0x1081, 0xf05, 0xf7b, 0xe09, 0xf7b, 0xe09, 0xe0b, 0xca2, 0xe0b, 0xca2, 0xdd2, +0xc73, 0xdd2, 0xc73, 0xdd2, 0xc73, 0xcb8, 0xb61, 0xcb8, 0xb61, 0xc2d, 0xadf, +0xc2d, 0xadf, 0xad8, 0x993, 0xad8, 0x993, 0x943, 0x806, 0x943, 0x806, 0x920, +0x7ec, 0x920, 0x7ec, 0x920, 0x7ec, 0x920, 0x7f4, 0x920, 0x7f4, 0x832, 0x70e, +0x832, 0x70e, 0x7ef, 0x6d3, 0x7ef, 0x6d3, 0x7af, 0x69b, 0x7af, 0x69b, 0x684, +0x578, 0x684, 0x578, 0x653, 0x54f, 0x653, 0x54f, 0x653, 0x54f, 0x51d, 0x421, +0x51d, 0x421, 0x390, 0x29e, 0x390, 0x29e, 0x235, 0x14b, 0x235, 0x14b, 0x164, +0x84, 0x164, 0x84, 0x2b1, 0x1db, 0x2b1, 0x1db, 0x381, 0x2b6, 0x381, 0x2b6, +0x381, 0x2b6, 0x22d, 0x16d, 0x22d, 0x16d, 0x1b6, 0x102, 0x1b6, 0x102, 0x18a, +0xe3, 0x18a, 0xe3, 0x73, 0xffd8, 0x73, 0xffd8, 0x46, 0xffba, 0x46, 0xffba, +0x46, 0xffba, 0xff4a, 0xfecc, 0xff4a, 0xfecc, 0xfe84, 0xfe15, 0xfe84, 0xfe15, 0xfff9, +0xff9a, 0xfff9, 0xff9a, 0x90, 0x42, 0x90, 0x42, 0xff33, 0xfef5, 0xff33, 0xfef5, +0xffa0, 0xff73, 0xffa0, 0xff73, 0xffa0, 0xff73, 0xff23, 0xff06, 0xff23, 0xff06, 0xfe8b, +0xfe80, 0xfe8b, 0xfe80, 0xffc7, 0xffcd, 0xffc7, 0xffcd, 0xff4f, 0xff66, 0xff4f, 0xff66, +0x95, 0xbc, 0x95, 0xbc, 0x8e, 0xc5, 0x8e, 0xc5, 0x8e, 0xc5, 0xfe4f, +0xfe95, 0xfe4f, 0xfe95, 0xfe27, 0xfe7b, 0xfe27, 0xfe7b, 0xfe7b, 0xfedd, 0xfe7b, 0xfedd, +0xfdc4, 0xfe31, 0xfdc4, 0xfe31, 0xfddb, 0xfe53, 0xfddb, 0xfe53, 0xfddb, 0xfe53, 0xfefc, +0xff7c, 0xfefc, 0xff7c, 0xfd41, 0xfdc8, 0xfd41, 0xfdc8, 0xfda7, 0xfe33, 0xfda7, 0xfe33, +0x100, 0x18f, 0x100, 0x18f, 0x66, 0xf6, 0x66, 0xf6, 0xda, 0x168, 0xda, +0x168, 0xda, 0x168, 0x2e0, 0x36a, 0x2e0, 0x36a, 0x1b2, 0x236, 0x1b2, 0x236, +0x1a4, 0x220, 0x1a4, 0x220, 0xed, 0x15f, 0xed, 0x15f, 0xffbf, 0x23, 0xffbf, +0x23, 0x73, 0xc8, 0x73, 0xc8, 0x73, 0xc8, 0xfffc, 0x3f, 0xfffc, 0x3f, +0x64, 0x94, 0x64, 0x94, 0x177, 0x192, 0x177, 0x192, 0x30a, 0x30e, 0x30a, +0x30e, 0x484, 0x46f, 0x484, 0x46f, 0x484, 0x46f, 0x4df, 0x4b0, 0x4df, 0x4b0, +0x55b, 0x510, 0x55b, 0x510, 0x533, 0x4cc, 0x533, 0x4cc, 0x531, 0x4ad, 0x531, +0x4ad, 0x562, 0x4c0, 0x562, 0x4c0, 0x49b, 0x3db, 0x49b, 0x3db, 0x49b, 0x3db, +0x3fe, 0x321, 0x3fe, 0x321, 0x40d, 0x312, 0x40d, 0x312, 0x4f5, 0x3dc, 0x4f5, +0x3dc, 0x70a, 0x5d5, 0x70a, 0x5d5, 0x995, 0x845, 0x995, 0x845, 0xbd8, 0xa6d, +0xbd8, 0xa6d, 0xbd8, 0xa6d, 0xcbb, 0xb37, 0xcbb, 0xb37, 0xe3a, 0xc9e, 0xe3a, +0xc9e, 0xeec, 0xd3a, 0xeec, 0xd3a, 0xeca, 0xd04, 0xeca, 0xd04, 0xf6c, 0xd95, +0xf6c, 0xd95, 0xf6c, 0xd95, 0xedb, 0xcf3, 0xedb, 0xcf3, 0xf40, 0xd4a, 0xf40, +0xd4a, 0x1008, 0xe06, 0x1008, 0xe06, 0x10da, 0xecf, 0x10da, 0xecf, 0x1197, 0xf85, +0x1197, 0xf85, 0x1193, 0xf7b, 0x1193, 0xf7b, 0x1193, 0xf7b, 0x10ca, 0xeae, 0x10ca, +0xeae, 0x1093, 0xe77, 0x1093, 0xe77, 0x117c, 0xf60, 0x117c, 0xf60, 0x1092, 0xe78, +0x1092, 0xe78, 0x107c, 0xe66, 0x107c, 0xe66, 0x10bd, 0xead, 0x10bd, 0xead, 0x10bd, +0xead, 0x1031, 0xe28, 0x1031, 0xe28, 0x10f3, 0xef2, 0x10f3, 0xef2, 0x1115, 0xf1e, +0x1115, 0xf1e, 0x10d8, 0xeeb, 0x10d8, 0xeeb, 0x10d3, 0xef1, 0x10d3, 0xef1, 0x10d3, +0xef1, 0xfc9, 0xdf3, 0xfc9, 0xdf3, 0xf2a, 0xd60, 0xf2a, 0xd60, 0xe98, 0xcdb, +0xe98, 0xcdb, 0xda1, 0xbf1, 0xda1, 0xbf1, 0xc4a, 0xaa7, 0xc4a, 0xaa7, 0xb04, +0x96e, 0xb04, 0x96e, 0xb04, 0x96e, 0xa12, 0x88a, 0xa12, 0x88a, 0x8f9, 0x77d, +0x8f9, 0x77d, 0xa87, 0x919, 0xa87, 0x919, 0x971, 0x80f, 0x971, 0x80f, 0x751, +0x5fc, 0x751, 0x5fc, 0x8bc, 0x773, 0x8bc, 0x773, 0x8bc, 0x773, 0x83c, 0x700, +0x83c, 0x700, 0x7f4, 0x6c3, 0x7f4, 0x6c3, 0x945, 0x821, 0x945, 0x821, 0xa6a, +0x952, 0xa6a, 0x952, 0xb13, 0xa07, 0xb13, 0xa07, 0xb13, 0xa07, 0xbd8, 0xada, +0xbd8, 0xada, 0xc0d, 0xb1c, 0xc0d, 0xb1c, 0xc43, 0xb5f, 0xc43, 0xb5f, 0xd1c, +0xc46, 0xd1c, 0xc46, 0xcdf, 0xc18, 0xcdf, 0xc18, 0xc3c, 0xb85, 0xc3c, 0xb85, +0xc3c, 0xb85, 0xb96, 0xaef, 0xb96, 0xaef, 0xafd, 0xa67, 0xafd, 0xa67, 0xab1, +0xa2d, 0xab1, 0xa2d, 0xb29, 0xab8, 0xb29, 0xab8, 0xa27, 0x9cb, 0xa27, 0x9cb, +0x8db, 0x894, 0x8db, 0x894, 0x8db, 0x894, 0x90f, 0x8de, 0x90f, 0x8de, 0x81b, +0x802, 0x81b, 0x802, 0x68a, 0x68a, 0x68a, 0x68a, 0x5db, 0x5f4, 0x5db, 0x5f4, +0x4e1, 0x515, 0x4e1, 0x515, 0x4e1, 0x515, 0x3ae, 0x3fd, 0x3ae, 0x3fd, 0x3fa, +0x466, 0x3fa, 0x466, 0x37d, 0x405, 0x37d, 0x405, 0x2c0, 0x365, 0x2c0, 0x365, +0x2dd, 0x3a0, 0x2dd, 0x3a0, 0x1c6, 0x2a5, 0x1c6, 0x2a5, 0x1c6, 0x2a5, 0x122, +0x21e, 0x122, 0x21e, 0x162, 0x27b, 0x162, 0x27b, 0xcd, 0x203, 0xcd, 0x203, +0xd7, 0x228, 0xd7, 0x228, 0xbd, 0x228, 0xbd, 0x228, 0x65, 0x1e9, 0x65, +0x1e9, 0x65, 0x1e9, 0xf5, 0x291, 0xf5, 0x291, 0xffea, 0x19b, 0xffea, 0x19b, +0xfef9, 0xbf, 0xfef9, 0xbf, 0xfea1, 0x7a, 0xfea1, 0x7a, 0xfeb1, 0x9a, 0xfeb1, +0x9a, 0xfeb1, 0x9a, 0xfe80, 0x76, 0xfe80, 0x76, 0xfece, 0xd0, 0xfece, 0xd0, +0x26, 0x231, 0x26, 0x231, 0xff68, 0x17b, 0xff68, 0x17b, 0xff9f, 0x1b6, 0xff9f, +0x1b6, 0xfed0, 0xe9, 0xfed0, 0xe9, 0xfed0, 0xe9, 0xfd3e, 0xff57, 0xfd3e, 0xff57, +0xfcde, 0xfef5, 0xfcde, 0xfef5, 0xfbf9, 0xfe0b, 0xfbf9, 0xfe0b, 0xfcdf, 0xfeea, 0xfcdf, +0xfeea, 0xfc66, 0xfe68, 0xfc66, 0xfe68, 0xfc66, 0xfe68, 0xfb08, 0xfd01, 0xfb08, 0xfd01, +0xfabc, 0xfca8, 0xfabc, 0xfca8, 0xfa1b, 0xfbfb, 0xfa1b, 0xfbfb, 0xfac6, 0xfc97, 0xfac6, +0xfc97, 0xf9bb, 0xfb7d, 0xf9bb, 0xfb7d, 0xf8a8, 0xfa5b, 0xf8a8, 0xfa5b, 0xf8a8, 0xfa5b, +0xf8b3, 0xfa57, 0xf8b3, 0xfa57, 0xf5f1, 0xf785, 0xf5f1, 0xf785, 0xf5ab, 0xf72f, 0xf5ab, +0xf72f, 0xf570, 0xf6e6, 0xf570, 0xf6e6, 0xf3ec, 0xf553, 0xf3ec, 0xf553, 0xf541, 0xf69b, +0xf541, 0xf69b, 0xf541, 0xf69b, 0xf581, 0xf6cf, 0xf581, 0xf6cf, 0xf604, 0xf747, 0xf604, +0xf747, 0xf6c2, 0xf7fc, 0xf6c2, 0xf7fc, 0xf6ca, 0xf7fc, 0xf6ca, 0xf7fc, 0xf64f, 0xf77b, +0xf64f, 0xf77b, 0xf64f, 0xf77b, 0xf45c, 0xf585, 0xf45c, 0xf585, 0xf33a, 0xf461, 0xf33a, +0xf461, 0xf29b, 0xf3c2, 0xf29b, 0xf3c2, 0xf236, 0xf35f, 0xf236, 0xf35f, 0xf1e2, 0xf30f, +0xf1e2, 0xf30f, 0xf037, 0xf16a, 0xf037, 0xf16a, 0xf037, 0xf16a, 0xf036, 0xf171, 0xf036, +0xf171, 0xf0d9, 0xf21d, 0xf0d9, 0xf21d, 0xef1e, 0xf06d, 0xef1e, 0xf06d, 0xeef5, 0xf050, +0xeef5, 0xf050, 0xeec7, 0xf02f, 0xeec7, 0xf02f, 0xed61, 0xeed8, 0xed61, 0xeed8, 0xed61, +0xeed8, 0xeccf, 0xee55, 0xeccf, 0xee55, 0xeb8a, 0xed1f, 0xeb8a, 0xed1f, 0xe9a7, 0xeb4c, +0xe9a7, 0xeb4c, 0xe92a, 0xeae0, 0xe92a, 0xeae0, 0xea2e, 0xebf3, 0xea2e, 0xebf3, 0xea2e, +0xebf3, 0xea4d, 0xec22, 0xea4d, 0xec22, 0xeaba, 0xec9e, 0xeaba, 0xec9e, 0xeb0e, 0xed00, +0xeb0e, 0xed00, 0xeb11, 0xed0f, 0xeb11, 0xed0f, 0xeb50, 0xed5b, 0xeb50, 0xed5b, 0xea0f, +0xec24, 0xea0f, 0xec24, 0xea0f, 0xec24, 0xe955, 0xeb72, 0xe955, 0xeb72, 0xe8f5, 0xeb1a, +0xe8f5, 0xeb1a, 0xe794, 0xe9be, 0xe794, 0xe9be, 0xe71d, 0xe94b, 0xe71d, 0xe94b, 0xe68f, +0xe8bf, 0xe68f, 0xe8bf, 0xe584, 0xe7b4, 0xe584, 0xe7b4, 0xe584, 0xe7b4, 0xe68a, 0xe8b8, +0xe68a, 0xe8b8, 0xe78f, 0xe9ba, 0xe78f, 0xe9ba, 0xe75d, 0xe983, 0xe75d, 0xe983, 0xe825, +0xea45, 0xe825, 0xea45, 0xe9c5, 0xebdd, 0xe9c5, 0xebdd, 0xe9c5, 0xebdd, 0xeae4, 0xecf3, +0xeae4, 0xecf3, 0xec7c, 0xee81, 0xec7c, 0xee81, 0xee1d, 0xf017, 0xee1d, 0xf017, 0xee15, +0xf003, 0xee15, 0xf003, 0xee52, 0xf035, 0xee52, 0xf035, 0xef87, 0xf15e, 0xef87, 0xf15e, +0xef87, 0xf15e, 0xf173, 0xf33d, 0xf173, 0xf33d, 0xf299, 0xf456, 0xf299, 0xf456, 0xf300, +0xf4b2, 0xf300, 0xf4b2, 0xf2cf, 0xf475, 0xf2cf, 0xf475, 0xf234, 0xf3cf, 0xf234, 0xf3cf, +0xf363, 0xf4f4, 0xf363, 0xf4f4, 0xf363, 0xf4f4, 0xf454, 0xf5dc, 0xf454, 0xf5dc, 0xf557, +0xf6d6, 0xf557, 0xf6d6, 0xf69e, 0xf817, 0xf69e, 0xf817, 0xf59f, 0xf712, 0xf59f, 0xf712, +0xf4d7, 0xf645, 0xf4d7, 0xf645, 0xf4d7, 0xf645, 0xf5cf, 0xf738, 0xf5cf, 0xf738, 0xf5da, +0xf742, 0xf5da, 0xf742, 0xf64c, 0xf7b2, 0xf64c, 0xf7b2, 0xf787, 0xf8ec, 0xf787, 0xf8ec, +0xf7aa, 0xf90f, 0xf7aa, 0xf90f, 0xf798, 0xf8fd, 0xf798, 0xf8fd, 0xf798, 0xf8fd, 0xf728, +0xf88f, 0xf728, 0xf88f, 0xf68e, 0xf7f7, 0xf68e, 0xf7f7, 0xf588, 0xf6f3, 0xf588, 0xf6f3, +0xf535, 0xf6a1, 0xf535, 0xf6a1, 0xf612, 0xf77f, 0xf612, 0xf77f, 0xf688, 0xf7f7, 0xf688, +0xf7f7, 0xf688, 0xf7f7, 0xf6b3, 0xf822, 0xf6b3, 0xf822, 0xf50b, 0xf679, 0xf50b, 0xf679, +0xf2fe, 0xf46a, 0xf2fe, 0xf46a, 0xf35b, 0xf4c4, 0xf35b, 0xf4c4, 0xf298, 0xf3fc, 0xf298, +0xf3fc, 0xf298, 0xf3fc, 0xf152, 0xf2af, 0xf152, 0xf2af, 0xf18f, 0xf2e3, 0xf18f, 0xf2e3, +0xf091, 0xf1db, 0xf091, 0xf1db, 0xf101, 0xf23e, 0xf101, 0xf23e, 0xf1f8, 0xf326, 0xf1f8, +0xf326, 0xf116, 0xf233, 0xf116, 0xf233, 0xf116, 0xf233, 0xf08f, 0xf198, 0xf08f, 0xf198, +0xefee, 0xf0e1, 0xefee, 0xf0e1, 0xef4a, 0xf025, 0xef4a, 0xf025, 0xeee7, 0xefa8, 0xeee7, +0xefa8, 0xedea, 0xee8f, 0xedea, 0xee8f, 0xed13, 0xed99, 0xed13, 0xed99, 0xed13, 0xed99, +0xedab, 0xee12, 0xedab, 0xee12, 0xee39, 0xee7f, 0xee39, 0xee7f, 0xef63, 0xef86, 0xef63, +0xef86, 0xf267, 0xf266, 0xf267, 0xf266, 0xf5c1, 0xf59b, 0xf5c1, 0xf59b, 0xf5c1, 0xf59b, +0xf8a4, 0xf85a, 0xf8a4, 0xf85a, 0xfad3, 0xfa63, 0xfad3, 0xfa63, 0xfbda, 0xfb45, 0xfbda, +0xfb45, 0xfc6a, 0xfbb0, 0xfc6a, 0xfbb0, 0xfedb, 0xfdfd, 0xfedb, 0xfdfd, 0x63, 0xff62, +0x63, 0xff62, 0x63, 0xff62, 0x89, 0xff65, 0x89, 0xff65, 0x223, 0xe0, 0x223, +0xe0, 0x2c8, 0x166, 0x2c8, 0x166, 0x41a, 0x29a, 0x41a, 0x29a, 0x743, 0x5a9, +0x743, 0x5a9, 0x96f, 0x7bd, 0x96f, 0x7bd, 0x96f, 0x7bd, 0xb42, 0x97a, 0xb42, +0x97a, 0xc62, 0xa86, 0xc62, 0xa86, 0xd12, 0xb26, 0xd12, 0xb26, 0xdbe, 0xbc4, +0xdbe, 0xbc4, 0xdec, 0xbe6, 0xdec, 0xbe6, 0xdec, 0xbe6, 0xdd1, 0xbc2, 0xdd1, +0xbc2, 0xd01, 0xaec, 0xd01, 0xaec, 0xd25, 0xb0d, 0xd25, 0xb0d, 0xcc9, 0xaaf, +0xcc9, 0xaaf, 0xd70, 0xb58, 0xd70, 0xb58, 0xf17, 0xd02, 0xf17, 0xd02, 0xf17, +0xd02, 0xd24, 0xb14, 0xd24, 0xb14, 0xc4a, 0xa42, 0xc4a, 0xa42, 0xcc7, 0xac7, +0xcc7, 0xac7, 0xb7f, 0x989, 0xb7f, 0x989, 0xaf9, 0x90e, 0xaf9, 0x90e, 0xac0, +0x8e1, 0xac0, 0x8e1, 0xac0, 0x8e1, 0x9d1, 0x7fe, 0x9d1, 0x7fe, 0xa65, 0x89e, +0xa65, 0x89e, 0xbed, 0xa33, 0xbed, 0xa33, 0xba4, 0x9f7, 0xba4, 0x9f7, 0xbc5, +0xa26, 0xbc5, 0xa26, 0xbc5, 0xa26, 0xd10, 0xb7d, 0xd10, 0xb7d, 0xdf0, 0xc68, +0xdf0, 0xc68, 0xf7b, 0xdff, 0xf7b, 0xdff, 0x108f, 0xf1e, 0x108f, 0xf1e, 0xf77, +0xe0f, 0xf77, 0xe0f, 0xdd9, 0xc7a, 0xdd9, 0xc7a, 0xdd9, 0xc7a, 0xd1b, 0xbc5, +0xd1b, 0xbc5, 0xbb5, 0xa66, 0xbb5, 0xa66, 0x9c6, 0x87c, 0x9c6, 0x87c, 0x98a, +0x846, 0x98a, 0x846, 0x962, 0x823, 0x962, 0x823, 0x962, 0x823, 0x8be, 0x784, +0x8be, 0x784, 0x834, 0x6fe, 0x834, 0x6fe, 0x6d5, 0x5a3, 0x6d5, 0x5a3, 0x639, +0x50a, 0x639, 0x50a, 0x63a, 0x50f, 0x63a, 0x50f, 0x634, 0x50d, 0x634, 0x50d, +0x634, 0x50d, 0x6b9, 0x597, 0x6b9, 0x597, 0x6b8, 0x59b, 0x6b8, 0x59b, 0x593, +0x47c, 0x593, 0x47c, 0x554, 0x444, 0x554, 0x444, 0x5fe, 0x4f6, 0x5fe, 0x4f6, +0x5d3, 0x4d4, 0x5d3, 0x4d4, 0x5d3, 0x4d4, 0x5a0, 0x4ab, 0x5a0, 0x4ab, 0x534, +0x44b, 0x534, 0x44b, 0x4e9, 0x40d, 0x4e9, 0x40d, 0x542, 0x474, 0x542, 0x474, +0x536, 0x479, 0x536, 0x479, 0x536, 0x479, 0x427, 0x37c, 0x427, 0x37c, 0x3f3, +0x35a, 0x3f3, 0x35a, 0x434, 0x3b0, 0x434, 0x3b0, 0x344, 0x2d5, 0x344, 0x2d5, +0x451, 0x3f8, 0x451, 0x3f8, 0x4c0, 0x47f, 0x4c0, 0x47f, 0x4c0, 0x47f, 0x3d2, +0x3a8, 0x3d2, 0x3a8, 0x4cc, 0x4ba, 0x4cc, 0x4ba, 0x493, 0x499, 0x493, 0x499, +0x46a, 0x489, 0x46a, 0x489, 0x4db, 0x511, 0x4db, 0x511, 0x4d3, 0x520, 0x4d3, +0x520, 0x4d3, 0x520, 0x591, 0x5f3, 0x591, 0x5f3, 0x5d2, 0x648, 0x5d2, 0x648, +0x5e0, 0x668, 0x5e0, 0x668, 0x4e7, 0x57f, 0x4e7, 0x57f, 0x4cb, 0x571, 0x4cb, +0x571, 0x4cb, 0x571, 0x4bb, 0x56c, 0x4bb, 0x56c, 0x380, 0x43a, 0x380, 0x43a, +0x587, 0x647, 0x587, 0x647, 0x58c, 0x64e, 0x58c, 0x64e, 0x3f0, 0x4b1, 0x3f0, +0x4b1, 0x54a, 0x607, 0x54a, 0x607, 0x54a, 0x607, 0x519, 0x5cd, 0x519, 0x5cd, +0x518, 0x5c0, 0x518, 0x5c0, 0x69e, 0x736, 0x69e, 0x736, 0x6b0, 0x736, 0x6b0, +0x736, 0x6e7, 0x756, 0x6e7, 0x756, 0x77f, 0x7d3, 0x77f, 0x7d3, 0x77f, 0x7d3, +0x6ce, 0x705, 0x6ce, 0x705, 0x61f, 0x635, 0x61f, 0x635, 0x617, 0x60a, 0x617, +0x60a, 0x681, 0x64f, 0x681, 0x64f, 0x764, 0x709, 0x764, 0x709, 0x764, 0x709, +0x805, 0x780, 0x805, 0x780, 0x840, 0x78f, 0x840, 0x78f, 0x8bc, 0x7df, 0x8bc, +0x7df, 0x9f4, 0x8ea, 0x9f4, 0x8ea, 0xb0a, 0x9d2, 0xb0a, 0x9d2, 0xb91, 0xa2b, +0xb91, 0xa2b, 0xb91, 0xa2b, 0xbca, 0xa35, 0xbca, 0xa35, 0xb8e, 0x9cc, 0xb8e, +0x9cc, 0xb87, 0x99a, 0xb87, 0x99a, 0xac9, 0x8b1, 0xac9, 0x8b1, 0x92d, 0x6ed, +0x92d, 0x6ed, 0x894, 0x62d, 0x894, 0x62d, 0x894, 0x62d, 0x8d6, 0x64b, 0x8d6, +0x64b, 0x996, 0x6e9, 0x996, 0x6e9, 0xac8, 0x7fd, 0xac8, 0x7fd, 0xcb0, 0x9c9, +0xcb0, 0x9c9, 0xd2d, 0xa2d, 0xd2d, 0xa2d, 0xd2d, 0xa2d, 0xd27, 0xa12, 0xd27, +0xa12, 0xe66, 0xb3f, 0xe66, 0xb3f, 0xe5c, 0xb26, 0xe5c, 0xb26, 0xf46, 0xc04, +0xf46, 0xc04, 0x101f, 0xcd5, 0x101f, 0xcd5, 0xff3, 0xca4, 0xff3, 0xca4, 0xff3, +0xca4, 0x1008, 0xcb7, 0x1008, 0xcb7, 0xf8d, 0xc3c, 0xf8d, 0xc3c, 0xfde, 0xc90, +0xfde, 0xc90, 0x1011, 0xcc9, 0x1011, 0xcc9, 0x105e, 0xd1f, 0x105e, 0xd1f, 0x1078, +0xd42, 0x1078, 0xd42, 0x1078, 0xd42, 0x10f7, 0xdce, 0x10f7, 0xdce, 0x114c, 0xe30, +0x114c, 0xe30, 0xee6, 0xbd9, 0xee6, 0xbd9, 0xd60, 0xa63, 0xd60, 0xa63, 0xd5a, +0xa6d, 0xd5a, 0xa6d, 0xd5a, 0xa6d, 0xd24, 0xa49, 0xd24, 0xa49, 0xd22, 0xa59, +0xd22, 0xa59, 0xd2f, 0xa78, 0xd2f, 0xa78, 0xe1d, 0xb77, 0xe1d, 0xb77, 0xf06, +0xc72, 0xf06, 0xc72, 0xefe, 0xc7a, 0xefe, 0xc7a, 0xefe, 0xc7a, 0xd45, 0xad3, +0xd45, 0xad3, 0xb8e, 0x92b, 0xb8e, 0x92b, 0xb3b, 0x8e8, 0xb3b, 0x8e8, 0x8ec, +0x6a7, 0x8ec, 0x6a7, 0x805, 0x5ce, 0x805, 0x5ce, 0x7dd, 0x5b4, 0x7dd, 0x5b4, +0x7dd, 0x5b4, 0x506, 0x2e9, 0x506, 0x2e9, 0x522, 0x311, 0x522, 0x311, 0x65c, +0x457, 0x65c, 0x457, 0x5df, 0x3e6, 0x5df, 0x3e6, 0x6ce, 0x4e0, 0x6ce, 0x4e0, +0x6ce, 0x4e0, 0x84a, 0x666, 0x84a, 0x666, 0x86e, 0x695, 0x86e, 0x695, 0x8d0, +0x701, 0x8d0, 0x701, 0x931, 0x76e, 0x931, 0x76e, 0x875, 0x6bd, 0x875, 0x6bd, +0x82f, 0x683, 0x82f, 0x683, 0x82f, 0x683, 0x8ab, 0x70b, 0x8ab, 0x70b, 0x91b, +0x78a, 0x91b, 0x78a, 0x9da, 0x858, 0x9da, 0x858, 0xaf7, 0x984, 0xaf7, 0x984, +0x9ce, 0x86d, 0x9ce, 0x86d, 0x8d9, 0x78a, 0x8d9, 0x78a, 0x8d9, 0x78a, 0x971, +0x837, 0x971, 0x837, 0x814, 0x6ef, 0x814, 0x6ef, 0x7bf, 0x6b1, 0x7bf, 0x6b1, +0x7b3, 0x6bf, 0x7b3, 0x6bf, 0x6c1, 0x5e6, 0x6c1, 0x5e6, 0x6c1, 0x5e6, 0x741, +0x682, 0x741, 0x682, 0x654, 0x5b0, 0x654, 0x5b0, 0x517, 0x491, 0x517, 0x491, +0x5ea, 0x582, 0x5ea, 0x582, 0x5f7, 0x5ae, 0x5f7, 0x5ae, 0x516, 0x4ec, 0x516, +0x4ec, 0x516, 0x4ec, 0x538, 0x52e, 0x538, 0x52e, 0x512, 0x528, 0x512, 0x528, +0x418, 0x44c, 0x418, 0x44c, 0x3fd, 0x450, 0x3fd, 0x450, 0x3dc, 0x44c, 0x3dc, +0x44c, 0x426, 0x4b2, 0x426, 0x4b2, 0x426, 0x4b2, 0x55a, 0x602, 0x55a, 0x602, +0x57a, 0x63c, 0x57a, 0x63c, 0x4d3, 0x5ad, 0x4d3, 0x5ad, 0x43b, 0x52a, 0x43b, +0x52a, 0x3a1, 0x4a4, 0x3a1, 0x4a4, 0x3a1, 0x4a4, 0x387, 0x49c, 0x387, 0x49c, +0x4f1, 0x616, 0x4f1, 0x616, 0x561, 0x693, 0x561, 0x693, 0x569, 0x6a6, 0x569, +0x6a6, 0x6e0, 0x824, 0x6e0, 0x824, 0x5e2, 0x72d, 0x5e2, 0x72d, 0x5e2, 0x72d, +0x479, 0x5c9, 0x479, 0x5c9, 0x4b0, 0x601, 0x4b0, 0x601, 0x3ee, 0x540, 0x3ee, +0x540, 0x2e2, 0x433, 0x2e2, 0x433, 0x280, 0x3cf, 0x280, 0x3cf, 0x280, 0x3cf, +0x19e, 0x2ea, 0x19e, 0x2ea, 0x122, 0x269, 0x122, 0x269, 0x1eb, 0x32d, 0x1eb, +0x32d, 0x6e, 0x1ab, 0x6e, 0x1ab, 0xfe73, 0xffab, 0xfe73, 0xffab, 0xff1b, 0x4e, +0xff1b, 0x4e, 0xff1b, 0x4e, 0xfec9, 0xfff9, 0xfec9, 0xfff9, 0xfe64, 0xff90, 0xfe64, +0xff90, 0xfed8, 0x2, 0xfed8, 0x2, 0xfc5f, 0xfd88, 0xfc5f, 0xfd88, 0xfa37, 0xfb60, +0xfa37, 0xfb60, 0xfb2a, 0xfc55, 0xfb2a, 0xfc55, 0xfb2a, 0xfc55, 0xfad3, 0xfc02, 0xfad3, +0xfc02, 0xf921, 0xfa56, 0xf921, 0xfa56, 0xf8b0, 0xf9ec, 0xf8b0, 0xf9ec, 0xf741, 0xf886, +0xf741, 0xf886, 0xf5d3, 0xf724, 0xf5d3, 0xf724, 0xf5d3, 0xf724, 0xf627, 0xf785, 0xf627, +0xf785, 0xf546, 0xf6b3, 0xf546, 0xf6b3, 0xf4e2, 0xf660, 0xf4e2, 0xf660, 0xf511, 0xf6a2, +0xf511, 0xf6a2, 0xf3ce, 0xf572, 0xf3ce, 0xf572, 0xf35f, 0xf519, 0xf35f, 0xf519, 0xf35f, +0xf519, 0xf3f3, 0xf5c4, 0xf3f3, 0xf5c4, 0xf2b4, 0xf49c, 0xf2b4, 0xf49c, 0xf0c5, 0xf2c5, +0xf0c5, 0xf2c5, 0xf027, 0xf240, 0xf027, 0xf240, 0xee6d, 0xf09e, 0xee6d, 0xf09e, 0xee88, +0xf0d1, 0xee88, 0xf0d1, 0xee88, 0xf0d1, 0xef8a, 0xf1ec, 0xef8a, 0xf1ec, 0xedb5, 0xf030, +0xedb5, 0xf030, 0xed32, 0xefc4, 0xed32, 0xefc4, 0xecb6, 0xef5e, 0xecb6, 0xef5e, 0xeb17, +0xedd5, 0xeb17, 0xedd5, 0xeb17, 0xedd5, 0xead9, 0xedab, 0xead9, 0xedab, 0xe960, 0xec44, +0xe960, 0xec44, 0xe6a9, 0xe99e, 0xe6a9, 0xe99e, 0xe64f, 0xe953, 0xe64f, 0xe953, 0xe5f1, +0xe901, 0xe5f1, 0xe901, 0xe520, 0xe83b, 0xe520, 0xe83b, 0xe520, 0xe83b, 0xe602, 0xe927, +0xe602, 0xe927, 0xe63a, 0xe964, 0xe63a, 0xe964, 0xe69c, 0xe9ca, 0xe69c, 0xe9ca, 0xe736, +0xea67, 0xe736, 0xea67, 0xe66f, 0xe99f, 0xe66f, 0xe99f, 0xe57a, 0xe8a7, 0xe57a, 0xe8a7, +0xe57a, 0xe8a7, 0xe44b, 0xe773, 0xe44b, 0xe773, 0xe1dd, 0xe4fe, 0xe1dd, 0xe4fe, 0xdf9e, +0xe2b5, 0xdf9e, 0xe2b5, 0xe026, 0xe333, 0xe026, 0xe333, 0xe066, 0xe366, 0xe066, 0xe366, +0xe066, 0xe366, 0xe067, 0xe35a, 0xe067, 0xe35a, 0xe2b7, 0xe59a, 0xe2b7, 0xe59a, 0xe2f9, +0xe5cd, 0xe2f9, 0xe5cd, 0xe314, 0xe5d7, 0xe314, 0xe5d7, 0xe43c, 0xe6ec, 0xe43c, 0xe6ec, +0xe46d, 0xe70c, 0xe46d, 0xe70c, 0xe46d, 0xe70c, 0xe5fb, 0xe887, 0xe5fb, 0xe887, 0xe6a5, +0xe91f, 0xe6a5, 0xe91f, 0xe6d8, 0xe940, 0xe6d8, 0xe940, 0xe760, 0xe9b7, 0xe760, 0xe9b7, +0xe81f, 0xea66, 0xe81f, 0xea66, 0xe95d, 0xeb94, 0xe95d, 0xeb94, 0xe95d, 0xeb94, 0xe8dd, +0xeb05, 0xe8dd, 0xeb05, 0xe9f3, 0xec0e, 0xe9f3, 0xec0e, 0xeb79, 0xed88, 0xeb79, 0xed88, +0xeb8e, 0xed94, 0xeb8e, 0xed94, 0xed39, 0xef36, 0xed39, 0xef36, 0xed39, 0xef36, 0xede5, +0xefdb, 0xede5, 0xefdb, 0xed85, 0xef76, 0xed85, 0xef76, 0xeeb5, 0xf0a2, 0xeeb5, 0xf0a2, +0xefc1, 0xf1ad, 0xefc1, 0xf1ad, 0xefca, 0xf1b6, 0xefca, 0xf1b6, 0xf06d, 0xf25b, 0xf06d, +0xf25b, 0xf06d, 0xf25b, 0xf15e, 0xf350, 0xf15e, 0xf350, 0xf162, 0xf358, 0xf162, 0xf358, +0xf151, 0xf34e, 0xf151, 0xf34e, 0xf0a3, 0xf2a7, 0xf0a3, 0xf2a7, 0xefff, 0xf20c, 0xefff, +0xf20c, 0xf168, 0xf37d, 0xf168, 0xf37d, 0xf168, 0xf37d, 0xf271, 0xf490, 0xf271, 0xf490, +0xf2ac, 0xf4d4, 0xf2ac, 0xf4d4, 0xf366, 0xf598, 0xf366, 0xf598, 0xf364, 0xf59f, 0xf364, +0xf59f, 0xf30a, 0xf54e, 0xf30a, 0xf54e, 0xf30a, 0xf54e, 0xf2c6, 0xf511, 0xf2c6, 0xf511, +0xf1cb, 0xf41c, 0xf1cb, 0xf41c, 0xf0f2, 0xf348, 0xf0f2, 0xf348, 0xf171, 0xf3ca, 0xf171, +0xf3ca, 0xf1ff, 0xf459, 0xf1ff, 0xf459, 0xf21b, 0xf473, 0xf21b, 0xf473, 0xf21b, 0xf473, +0xf2b1, 0xf506, 0xf2b1, 0xf506, 0xf290, 0xf4de, 0xf290, 0xf4de, 0xf275, 0xf4ba, 0xf275, +0xf4ba, 0xf340, 0xf578, 0xf340, 0xf578, 0xf2bc, 0xf4e5, 0xf2bc, 0xf4e5, 0xf2c3, 0xf4d9, +0xf2c3, 0xf4d9, 0xf2c3, 0xf4d9, 0xf372, 0xf573, 0xf372, 0xf573, 0xf23a, 0xf423, 0xf23a, +0xf423, 0xf1fa, 0xf3c8, 0xf1fa, 0xf3c8, 0xf21c, 0xf3cd, 0xf21c, 0xf3cd, 0xf285, 0xf415, +0xf285, 0xf415, 0xf285, 0xf415, 0xf529, 0xf698, 0xf529, 0xf698, 0xf724, 0xf86e, 0xf724, +0xf86e, 0xf8d1, 0xf9f6, 0xf8d1, 0xf9f6, 0xfb65, 0xfc63, 0xfb65, 0xfc63, 0xfd8c, 0xfe62, +0xfd8c, 0xfe62, 0xfee8, 0xff96, 0xfee8, 0xff96, 0xfee8, 0xff96, 0x115, 0x19a, 0x115, +0x19a, 0x3c3, 0x41f, 0x3c3, 0x41f, 0x54f, 0x583, 0x54f, 0x583, 0x7da, 0x7e6, +0x7da, 0x7e6, 0xa12, 0x9f8, 0xa12, 0x9f8, 0xac8, 0xa8a, 0xac8, 0xa8a, 0xac8, +0xa8a, 0xc06, 0xba3, 0xc06, 0xba3, 0xd29, 0xca6, 0xd29, 0xca6, 0xe10, 0xd6d, +0xe10, 0xd6d, 0xf4a, 0xe89, 0xf4a, 0xe89, 0x11a3, 0x10c7, 0x11a3, 0x10c7, 0x11a3, +0x10c7, 0x13ca, 0x12d4, 0x13ca, 0x12d4, 0x1495, 0x1388, 0x1495, 0x1388, 0x15b3, 0x1491, +0x15b3, 0x1491, 0x1619, 0x14e3, 0x1619, 0x14e3, 0x1696, 0x154f, 0x1696, 0x154f, 0x17d0, +0x1679, 0x17d0, 0x1679, 0x17d0, 0x1679, 0x1644, 0x14df, 0x1644, 0x14df, 0x150c, 0x139a, +0x150c, 0x139a, 0x161d, 0x149e, 0x161d, 0x149e, 0x1565, 0x13db, 0x1565, 0x13db, 0x154f, +0x13ba, 0x154f, 0x13ba, 0x15da, 0x1439, 0x15da, 0x1439, 0x15da, 0x1439, 0x14a1, 0x12f7, +0x14a1, 0x12f7, 0x1478, 0x12c3, 0x1478, 0x12c3, 0x140e, 0x124d, 0x140e, 0x124d, 0x1215, +0x1049, 0x1215, 0x1049, 0x1030, 0xe58, 0x1030, 0xe58, 0x1030, 0xe58, 0xe9b, 0xcb6, +0xe9b, 0xcb6, 0xe0f, 0xc1f, 0xe0f, 0xc1f, 0xf3b, 0xd3d, 0xf3b, 0xd3d, 0x110e, +0xf02, 0x110e, 0xf02, 0x1188, 0xf6e, 0x1188, 0xf6e, 0x128c, 0x1064, 0x128c, 0x1064, +0x128c, 0x1064, 0x1465, 0x1230, 0x1465, 0x1230, 0x13f7, 0x11b4, 0x13f7, 0x11b4, 0x1398, +0x1148, 0x1398, 0x1148, 0x129f, 0x1043, 0x129f, 0x1043, 0xff8, 0xd91, 0xff8, 0xd91, +0xff8, 0xd91, 0xf69, 0xcf8, 0xf69, 0xcf8, 0xe6d, 0xbf5, 0xe6d, 0xbf5, 0xc97, +0xa19, 0xc97, 0xa19, 0xc1d, 0x99c, 0xc1d, 0x99c, 0xa98, 0x816, 0xa98, 0x816, +0x94d, 0x6cd, 0x94d, 0x6cd, 0x94d, 0x6cd, 0x9c4, 0x74a, 0x9c4, 0x74a, 0x8d6, +0x664, 0x8d6, 0x664, 0x71a, 0x4b4, 0x71a, 0x4b4, 0x6a6, 0x450, 0x6a6, 0x450, +0x4e9, 0x2a5, 0x4e9, 0x2a5, 0x3f3, 0x1c6, 0x3f3, 0x1c6, 0x3f3, 0x1c6, 0x48b, +0x279, 0x48b, 0x279, 0x34b, 0x156, 0x34b, 0x156, 0x34a, 0x176, 0x34a, 0x176, +0x401, 0x250, 0x401, 0x250, 0x2f6, 0x16d, 0x2f6, 0x16d, 0x2f6, 0x16d, 0x2a0, +0x140, 0x2a0, 0x140, 0x290, 0x15c, 0x290, 0x15c, 0xdb, 0xffd5, 0xdb, 0xffd5, +0xffe8, 0xff10, 0xffe8, 0xff10, 0x104, 0x5c, 0x104, 0x5c, 0x15, 0xff9f, 0x15, +0xff9f, 0x15, 0xff9f, 0xfed6, 0xfe91, 0xfed6, 0xfe91, 0xff3c, 0xff27, 0xff3c, 0xff27, +0xfdf6, 0xfe11, 0xfdf6, 0xfe11, 0xfda3, 0xfded, 0xfda3, 0xfded, 0xfe75, 0xfeec, 0xfe75, +0xfeec, 0xfe01, 0xfea4, 0xfe01, 0xfea4, 0xfe01, 0xfea4, 0xfe05, 0xfed1, 0xfe05, 0xfed1, +0xfe32, 0xff24, 0xfe32, 0xff24, 0xfdbc, 0xfed2, 0xfdbc, 0xfed2, 0xfdd0, 0xff06, 0xfdd0, +0xff06, 0xfe4d, 0xff9f, 0xfe4d, 0xff9f, 0xfe4d, 0xff9f, 0xfd6f, 0xfeda, 0xfd6f, 0xfeda, +0xfd42, 0xfec2, 0xfd42, 0xfec2, 0xfde5, 0xff75, 0xfde5, 0xff75, 0xfc64, 0xfe01, 0xfc64, +0xfe01, 0xfc2c, 0xfdd1, 0xfc2c, 0xfdd1, 0xfce5, 0xfe8f, 0xfce5, 0xfe8f, 0xfce5, 0xfe8f, +0xfc8f, 0xfe38, 0xfc8f, 0xfe38, 0xfdec, 0xff92, 0xfdec, 0xff92, 0xfedf, 0x7c, 0xfedf, +0x7c, 0xff28, 0xba, 0xff28, 0xba, 0x5c, 0x1de, 0x5c, 0x1de, 0xec, 0x25b, +0xec, 0x25b, 0xec, 0x25b, 0xca, 0x222, 0xca, 0x222, 0x21, 0x15f, 0x21, +0x15f, 0xffa5, 0xc7, 0xffa5, 0xc7, 0xff7a, 0x7c, 0xff7a, 0x7c, 0x22, 0x101, +0x22, 0x101, 0x22, 0x101, 0xa0, 0x15b, 0xa0, 0x15b, 0x59, 0xed, 0x59, +0xed, 0x1b1, 0x21c, 0x1b1, 0x21c, 0x304, 0x344, 0x304, 0x344, 0x361, 0x375, +0x361, 0x375, 0x3f9, 0x3df, 0x3f9, 0x3df, 0x3f9, 0x3df, 0x455, 0x40b, 0x455, +0x40b, 0x44c, 0x3d3, 0x44c, 0x3d3, 0x532, 0x488, 0x532, 0x488, 0x5ef, 0x514, +0x5ef, 0x514, 0x5ac, 0x4a0, 0x5ac, 0x4a0, 0x6bd, 0x580, 0x6bd, 0x580, 0x6bd, +0x580, 0x6b6, 0x547, 0x6b6, 0x547, 0x678, 0x4d8, 0x678, 0x4d8, 0x7c8, 0x5f9, +0x7c8, 0x5f9, 0x742, 0x545, 0x742, 0x545, 0x6d6, 0x4ab, 0x6d6, 0x4ab, 0x6d6, +0x4ab, 0x7b5, 0x55e, 0x7b5, 0x55e, 0x7de, 0x55d, 0x7de, 0x55d, 0x8e1, 0x638, +0x8e1, 0x638, 0xacf, 0x800, 0xacf, 0x800, 0xb65, 0x873, 0xb65, 0x873, 0xc2d, +0x91c, 0xc2d, 0x91c, 0xc2d, 0x91c, 0xe1f, 0xaf1, 0xe1f, 0xaf1, 0xf55, 0xc0d, +0xf55, 0xc0d, 0x1002, 0xca4, 0x1002, 0xca4, 0x108d, 0xd1c, 0x108d, 0xd1c, 0xf46, +0xbc6, 0xf46, 0xbc6, 0xea0, 0xb14, 0xea0, 0xb14, 0xea0, 0xb14, 0x1139, 0xda6, +0x1139, 0xda6, 0x12ec, 0xf54, 0x12ec, 0xf54, 0x12ce, 0xf36, 0x12ce, 0xf36, 0x12fb, +0xf66, 0x12fb, 0xf66, 0x12e2, 0xf52, 0x12e2, 0xf52, 0x12e2, 0xf52, 0x12d3, 0xf4d, +0x12d3, 0xf4d, 0x12a9, 0xf2f, 0x12a9, 0xf2f, 0x10a9, 0xd3e, 0x10a9, 0xd3e, 0xedc, +0xb82, 0xedc, 0xb82, 0xf00, 0xbb8, 0xf00, 0xbb8, 0xf45, 0xc12, 0xf45, 0xc12, +0xf45, 0xc12, 0x1094, 0xd77, 0x1094, 0xd77, 0x11c2, 0xebc, 0x11c2, 0xebc, 0x118b, +0xe9d, 0x118b, 0xe9d, 0x11e7, 0xf11, 0x11e7, 0xf11, 0x125f, 0xfa1, 0x125f, 0xfa1, +0x1141, 0xe9c, 0x1141, 0xe9c, 0x1141, 0xe9c, 0xf4a, 0xcbe, 0xf4a, 0xcbe, 0xe0c, +0xb97, 0xe0c, 0xb97, 0xc0a, 0x9ac, 0xc0a, 0x9ac, 0x9f5, 0x7ad, 0x9f5, 0x7ad, +0x943, 0x711, 0x943, 0x711, 0x943, 0x711, 0x8fd, 0x6e0, 0x8fd, 0x6e0, 0x973, +0x76a, 0x973, 0x76a, 0xa58, 0x862, 0xa58, 0x862, 0xac4, 0x8e0, 0xac4, 0x8e0, +0xaf9, 0x926, 0xaf9, 0x926, 0xb1d, 0x95c, 0xb1d, 0x95c, 0xb1d, 0x95c, 0xad0, +0x920, 0xad0, 0x920, 0xb5c, 0x9bc, 0xb5c, 0x9bc, 0xbf7, 0xa68, 0xbf7, 0xa68, +0xb3e, 0x9c0, 0xb3e, 0x9c0, 0xb2b, 0x9bf, 0xb2b, 0x9bf, 0xbc9, 0xa6f, 0xbc9, +0xa6f, 0xbc9, 0xa6f, 0xc26, 0xade, 0xc26, 0xade, 0xc1d, 0xae9, 0xc1d, 0xae9, +0xbad, 0xa8d, 0xbad, 0xa8d, 0xaff, 0x9f4, 0xaff, 0x9f4, 0xb44, 0xa50, 0xb44, +0xa50, 0xb44, 0xa50, 0xbad, 0xad1, 0xbad, 0xad1, 0xa88, 0x9c4, 0xa88, 0x9c4, +0xa16, 0x96c, 0xa16, 0x96c, 0x966, 0x8d7, 0x966, 0x8d7, 0x814, 0x79f, 0x814, +0x79f, 0x7fa, 0x7a0, 0x7fa, 0x7a0, 0x7fa, 0x7a0, 0x723, 0x6e5, 0x723, 0x6e5, +0x561, 0x53f, 0x561, 0x53f, 0x484, 0x47d, 0x484, 0x47d, 0x367, 0x37b, 0x367, +0x37b, 0x1c6, 0x1f3, 0x1c6, 0x1f3, 0x28c, 0x2d2, 0x28c, 0x2d2, 0x28c, 0x2d2, +0x33e, 0x39b, 0x33e, 0x39b, 0x24f, 0x2c1, 0x24f, 0x2c1, 0x2c6, 0x34a, 0x2c6, +0x34a, 0x329, 0x3bd, 0x329, 0x3bd, 0x2b1, 0x352, 0x2b1, 0x352, 0x2b1, 0x352, +0x2e7, 0x392, 0x2e7, 0x392, 0x251, 0x303, 0x251, 0x303, 0xe3, 0x199, 0xe3, +0x199, 0x261, 0x317, 0x261, 0x317, 0x3b8, 0x46c, 0x3b8, 0x46c, 0x2a9, 0x357, +0x2a9, 0x357, 0x2a9, 0x357, 0x313, 0x3b8, 0x313, 0x3b8, 0x32f, 0x3c8, 0x32f, +0x3c8, 0x2e4, 0x36e, 0x2e4, 0x36e, 0x36d, 0x3e7, 0x36d, 0x3e7, 0x299, 0x300, +0x299, 0x300, 0x299, 0x300, 0x13e, 0x190, 0x13e, 0x190, 0x11e, 0x15a, 0x11e, +0x15a, 0x114, 0x13a, 0x114, 0x13a, 0x9, 0x19, 0x9, 0x19, 0xff40, 0xff39, +0xff40, 0xff39, 0xfe71, 0xfe55, 0xfe71, 0xfe55, 0xfe71, 0xfe55, 0xfcbe, 0xfc8e, 0xfcbe, +0xfc8e, 0xfd15, 0xfcd1, 0xfd15, 0xfcd1, 0xfdcd, 0xfd78, 0xfdcd, 0xfd78, 0xfc17, 0xfbb3, +0xfc17, 0xfbb3, 0xfbd2, 0xfb63, 0xfbd2, 0xfb63, 0xfc0f, 0xfb96, 0xfc0f, 0xfb96, 0xfc0f, +0xfb96, 0xfbc1, 0xfb43, 0xfbc1, 0xfb43, 0xfc64, 0xfbe2, 0xfc64, 0xfbe2, 0xfc6c, 0xfbeb, +0xfc6c, 0xfbeb, 0xfb47, 0xfacb, 0xfb47, 0xfacb, 0xfab2, 0xfa3d, 0xfab2, 0xfa3d, 0xfab2, +0xfa3d, 0xfb18, 0xfaad, 0xfb18, 0xfaad, 0xf9f3, 0xf996, 0xf9f3, 0xf996, 0xf901, 0xf8b5, +0xf901, 0xf8b5, 0xf714, 0xf6db, 0xf714, 0xf6db, 0xf501, 0xf4de, 0xf501, 0xf4de, 0xf620, +0xf615, 0xf620, 0xf615, 0xf620, 0xf615, 0xf621, 0xf62e, 0xf621, 0xf62e, 0xf562, 0xf58a, +0xf562, 0xf58a, 0xf52e, 0xf572, 0xf52e, 0xf572, 0xf4f7, 0xf557, 0xf4f7, 0xf557, 0xf4d2, +0xf54e, 0xf4d2, 0xf54e, 0xf522, 0xf5ba, 0xf522, 0xf5ba, 0xf522, 0xf5ba, 0xf473, 0xf528, +0xf473, 0xf528, 0xf248, 0xf318, 0xf248, 0xf318, 0xf218, 0xf302, 0xf218, 0xf302, 0xf1a7, +0xf2ab, 0xf1a7, 0xf2ab, 0xf1b6, 0xf2d1, 0xf1b6, 0xf2d1, 0xf1b6, 0xf2d1, 0xf295, 0xf3c6, +0xf295, 0xf3c6, 0xf149, 0xf28f, 0xf149, 0xf28f, 0xf089, 0xf1e4, 0xf089, 0xf1e4, 0xf0f5, +0xf262, 0xf0f5, 0xf262, 0xefd8, 0xf156, 0xefd8, 0xf156, 0xedc5, 0xef53, 0xedc5, 0xef53, +0xedc5, 0xef53, 0xecf7, 0xee93, 0xecf7, 0xee93, 0xeb3d, 0xece7, 0xeb3d, 0xece7, 0xea54, +0xec0b, 0xea54, 0xec0b, 0xeb5b, 0xed1e, 0xeb5b, 0xed1e, 0xeada, 0xeca9, 0xeada, 0xeca9, +0xeb8a, 0xed65, 0xeb8a, 0xed65, 0xeb8a, 0xed65, 0xecad, 0xee93, 0xecad, 0xee93, 0xec39, +0xee2b, 0xec39, 0xee2b, 0xec7b, 0xee78, 0xec7b, 0xee78, 0xeba5, 0xedaf, 0xeba5, 0xedaf, +0xe942, 0xeb59, 0xe942, 0xeb59, 0xe942, 0xeb59, 0xe83d, 0xea60, 0xe83d, 0xea60, 0xe836, +0xea67, 0xe836, 0xea67, 0xe747, 0xe985, 0xe747, 0xe985, 0xe697, 0xe8e4, 0xe697, 0xe8e4, +0xe73c, 0xe997, 0xe73c, 0xe997, 0xe746, 0xe9af, 0xe746, 0xe9af, 0xe746, 0xe9af, 0xe845, +0xeabd, 0xe845, 0xeabd, 0xe9d6, 0xec5c, 0xe9d6, 0xec5c, 0xe91b, 0xebb0, 0xe91b, 0xebb0, +0xe959, 0xebfd, 0xe959, 0xebfd, 0xea95, 0xed46, 0xea95, 0xed46, 0xeb0b, 0xedc9, 0xeb0b, +0xedc9, 0xeb0b, 0xedc9, 0xeb2a, 0xedf4, 0xeb2a, 0xedf4, 0xeb8d, 0xee62, 0xeb8d, 0xee62, +0xebc0, 0xee9f, 0xebc0, 0xee9f, 0xec20, 0xef08, 0xec20, 0xef08, 0xee19, 0xf108, 0xee19, +0xf108, 0xee19, 0xf108, 0xee19, 0xf10d, 0xee19, 0xf10d, 0xee78, 0xf171, 0xee78, 0xf171, +0xf054, 0xf350, 0xf054, 0xf350, 0xf09f, 0xf39c, 0xf09f, 0xf39c, 0xf130, 0xf42e, 0xf130, +0xf42e, 0xf184, 0xf480, 0xf184, 0xf480, 0xf184, 0xf480, 0xf153, 0xf44c, 0xf153, 0xf44c, +0xf115, 0xf40b, 0xf115, 0xf40b, 0xf18a, 0xf47b, 0xf18a, 0xf47b, 0xf19a, 0xf486, 0xf19a, +0xf486, 0xf19b, 0xf480, 0xf19b, 0xf480, 0xf200, 0xf4df, 0xf200, 0xf4df, 0xf200, 0xf4df, +0xf155, 0xf42d, 0xf155, 0xf42d, 0xf259, 0xf529, 0xf259, 0xf529, 0xf341, 0xf60a, 0xf341, +0xf60a, 0xf257, 0xf518, 0xf257, 0xf518, 0xf24c, 0xf506, 0xf24c, 0xf506, 0xf24c, 0xf506, +0xf2e9, 0xf59c, 0xf2e9, 0xf59c, 0xf2e5, 0xf591, 0xf2e5, 0xf591, 0xf3b9, 0xf65e, 0xf3b9, +0xf65e, 0xf3e4, 0xf681, 0xf3e4, 0xf681, 0xf213, 0xf4aa, 0xf213, 0xf4aa, 0xf2a9, 0xf539, +0xf2a9, 0xf539, 0xf2a9, 0xf539, 0xf301, 0xf589, 0xf301, 0xf589, 0xf248, 0xf4c9, 0xf248, +0xf4c9, 0xf372, 0xf5eb, 0xf372, 0xf5eb, 0xf2df, 0xf54f, 0xf2df, 0xf54f, 0xf1e9, 0xf450, +0xf1e9, 0xf450, 0xf2bd, 0xf518, 0xf2bd, 0xf518, 0xf2bd, 0xf518, 0xf19d, 0xf3ec, 0xf19d, +0xf3ec, 0xef9d, 0xf1de, 0xef9d, 0xf1de, 0xef55, 0xf186, 0xef55, 0xf186, 0xee9f, 0xf0bf, +0xee9f, 0xf0bf, 0xee4b, 0xf056, 0xee4b, 0xf056, 0xee4b, 0xf056, 0xeede, 0xf0d3, 0xeede, +0xf0d3, 0xee47, 0xf024, 0xee47, 0xf024, 0xee52, 0xf013, 0xee52, 0xf013, 0xefbc, 0xf160, +0xefbc, 0xf160, 0xf00b, 0xf190, 0xf00b, 0xf190, 0xf114, 0xf277, 0xf114, 0xf277, 0xf114, +0xf277, 0xf343, 0xf481, 0xf343, 0xf481, 0xf37f, 0xf496, 0xf37f, 0xf496, 0xf53f, 0xf62f, +0xf53f, 0xf62f, 0xf866, 0xf92d, 0xf866, 0xf92d, 0xf93b, 0xf9d7, 0xf93b, 0xf9d7, 0xfa51, +0xfac2, 0xfa51, 0xfac2, 0xfa51, 0xfac2, 0xfcba, 0xfcff, 0xfcba, 0xfcff, 0xfe7b, 0xfe94, +0xfe7b, 0xfe94, 0x43, 0x30, 0x43, 0x30, 0x2fb, 0x2bd, 0x2fb, 0x2bd, 0x3d7, +0x36f, 0x3d7, 0x36f, 0x3d7, 0x36f, 0x426, 0x396, 0x426, 0x396, 0x5ee, 0x536, +0x5ee, 0x536, 0x75b, 0x67e, 0x75b, 0x67e, 0x90c, 0x80c, 0x90c, 0x80c, 0xab5, +0x995, 0xab5, 0x995, 0xb0e, 0x9cf, 0xb0e, 0x9cf, 0xb0e, 0x9cf, 0xb68, 0xa0d, +0xb68, 0xa0d, 0xcf8, 0xb85, 0xcf8, 0xb85, 0xde5, 0xc5b, 0xde5, 0xc5b, 0xdf4, +0xc56, 0xdf4, 0xc56, 0xdfc, 0xc4d, 0xdfc, 0xc4d, 0xde0, 0xc23, 0xde0, 0xc23, +0xde0, 0xc23, 0xe4a, 0xc81, 0xe4a, 0xc81, 0xf28, 0xd54, 0xf28, 0xd54, 0xf6e, +0xd91, 0xf6e, 0xd91, 0xedc, 0xcf9, 0xedc, 0xcf9, 0xf4d, 0xd65, 0xf4d, 0xd65, +0xf4d, 0xd65, 0xf47, 0xd5b, 0xf47, 0xd5b, 0xee8, 0xcf9, 0xee8, 0xcf9, 0xe75, +0xc83, 0xe75, 0xc83, 0xc51, 0xa5d, 0xc51, 0xa5d, 0xb60, 0x96b, 0xb60, 0x96b, +0xae5, 0x8ee, 0xae5, 0x8ee, 0xae5, 0x8ee, 0x9cf, 0x7d7, 0x9cf, 0x7d7, 0x9b2, +0x7b9, 0x9b2, 0x7b9, 0xaca, 0x8cf, 0xaca, 0x8cf, 0xba1, 0x9a6, 0xba1, 0x9a6, +0xc86, 0xa8b, 0xc86, 0xa8b, 0xc86, 0xa8b, 0xd7e, 0xb82, 0xd7e, 0xb82, 0xc4a, +0xa4d, 0xc4a, 0xa4d, 0xc4e, 0xa53, 0xc4e, 0xa53, 0xcfb, 0xb00, 0xcfb, 0xb00, +0xbd3, 0x9da, 0xbd3, 0x9da, 0xad6, 0x8e2, 0xad6, 0x8e2, 0xad6, 0x8e2, 0x96a, +0x77b, 0x96a, 0x77b, 0x854, 0x66c, 0x854, 0x66c, 0x8f8, 0x719, 0x8f8, 0x719, +0x9af, 0x7db, 0x9af, 0x7db, 0x902, 0x73c, 0x902, 0x73c, 0x807, 0x651, 0x807, +0x651, 0x807, 0x651, 0x729, 0x585, 0x729, 0x585, 0x662, 0x4d4, 0x662, 0x4d4, +0x635, 0x4bf, 0x635, 0x4bf, 0x566, 0x40b, 0x566, 0x40b, 0x453, 0x315, 0x453, +0x315, 0x453, 0x315, 0x4bd, 0x39f, 0x4bd, 0x39f, 0x560, 0x463, 0x560, 0x463, +0x62d, 0x555, 0x62d, 0x555, 0x776, 0x6c3, 0x776, 0x6c3, 0x693, 0x607, 0x693, +0x607, 0x516, 0x4b0, 0x516, 0x4b0, 0x516, 0x4b0, 0x554, 0x517, 0x554, 0x517, +0x5a8, 0x592, 0x5a8, 0x592, 0x4f4, 0x506, 0x4f4, 0x506, 0x48d, 0x4c5, 0x48d, +0x4c5, 0x414, 0x471, 0x414, 0x471, 0x259, 0x2d8, 0x259, 0x2d8, 0x259, 0x2d8, +0x21f, 0x2bf, 0x21f, 0x2bf, 0x33c, 0x3fa, 0x33c, 0x3fa, 0x38b, 0x464, 0x38b, +0x464, 0x384, 0x474, 0x384, 0x474, 0x3d1, 0x4d5, 0x3d1, 0x4d5, 0x3d1, 0x4d5, +0x42a, 0x53e, 0x42a, 0x53e, 0x464, 0x584, 0x464, 0x584, 0x4af, 0x5d7, 0x4af, +0x5d7, 0x3c7, 0x4f3, 0x3c7, 0x4f3, 0x330, 0x45c, 0x330, 0x45c, 0x37f, 0x4a8, +0x37f, 0x4a8, 0x37f, 0x4a8, 0x345, 0x466, 0x345, 0x466, 0x3b0, 0x4c6, 0x3b0, +0x4c6, 0x45a, 0x561, 0x45a, 0x561, 0x427, 0x51e, 0x427, 0x51e, 0x417, 0x4fa, +0x417, 0x4fa, 0x4a9, 0x576, 0x4a9, 0x576, 0x4a9, 0x576, 0x4cb, 0x580, 0x4cb, +0x580, 0x59a, 0x636, 0x59a, 0x636, 0x63d, 0x6bf, 0x63d, 0x6bf, 0x555, 0x5bc, +0x555, 0x5bc, 0x4d9, 0x524, 0x4d9, 0x524, 0x4d9, 0x524, 0x414, 0x444, 0x414, +0x444, 0x3bc, 0x3d1, 0x3bc, 0x3d1, 0x487, 0x480, 0x487, 0x480, 0x4b6, 0x495, +0x4b6, 0x495, 0x481, 0x446, 0x481, 0x446, 0x50a, 0x4b7, 0x50a, 0x4b7, 0x50a, +0x4b7, 0x5f0, 0x586, 0x5f0, 0x586, 0x686, 0x605, 0x686, 0x605, 0x765, 0x6ce, +0x765, 0x6ce, 0x707, 0x65b, 0x707, 0x65b, 0x68a, 0x5ca, 0x68a, 0x5ca, 0x7ed, +0x719, 0x7ed, 0x719, 0x7ed, 0x719, 0x890, 0x7a9, 0x890, 0x7a9, 0x860, 0x766, +0x860, 0x766, 0x8aa, 0x79e, 0x8aa, 0x79e, 0x89c, 0x77d, 0x89c, 0x77d, 0x8a5, +0x774, 0x8a5, 0x774, 0x8a5, 0x774, 0x960, 0x81b, 0x960, 0x81b, 0x9c9, 0x871, +0x9c9, 0x871, 0x99f, 0x833, 0x99f, 0x833, 0x8ca, 0x749, 0x8ca, 0x749, 0x76c, +0x5d6, 0x76c, 0x5d6, 0x71e, 0x572, 0x71e, 0x572, 0x71e, 0x572, 0x7d9, 0x616, +0x7d9, 0x616, 0x7cc, 0x5f3, 0x7cc, 0x5f3, 0x867, 0x676, 0x867, 0x676, 0xa05, +0x7fd, 0xa05, 0x7fd, 0xab5, 0x895, 0xab5, 0x895, 0xcc2, 0xa8c, 0xcc2, 0xa8c, +0xcc2, 0xa8c, 0xe8e, 0xc41, 0xe8e, 0xc41, 0xdb5, 0xb53, 0xdb5, 0xb53, 0xd3d, +0xac7, 0xd3d, 0xac7, 0xdc7, 0xb3e, 0xdc7, 0xb3e, 0xde9, 0xb4f, 0xde9, 0xb4f, +0xde9, 0xb4f, 0xdbd, 0xb15, 0xdbd, 0xb15, 0xeab, 0xbf7, 0xeab, 0xbf7, 0xe73, +0xbb5, 0xe73, 0xbb5, 0xe32, 0xb6d, 0xe32, 0xb6d, 0x1029, 0xd60, 0x1029, 0xd60, +0x1018, 0xd4e, 0x1018, 0xd4e, 0x1018, 0xd4e, 0xedc, 0xc14, 0xedc, 0xc14, 0xe4c, +0xb8a, 0xe4c, 0xb8a, 0xd76, 0xabc, 0xd76, 0xabc, 0xd77, 0xac8, 0xd77, 0xac8, +0xd74, 0xad3, 0xd74, 0xad3, 0xc33, 0x9a2, 0xc33, 0x9a2, 0xc33, 0x9a2, 0xbe2, +0x964, 0xbe2, 0x964, 0xca4, 0xa3a, 0xca4, 0xa3a, 0xc28, 0x9d3, 0xc28, 0x9d3, +0xbf5, 0x9b7, 0xbf5, 0x9b7, 0xbe2, 0x9bc, 0xbe2, 0x9bc, 0xbe2, 0x9bc, 0xa36, +0x827, 0xa36, 0x827, 0x918, 0x721, 0x918, 0x721, 0x8b4, 0x6d4, 0x8b4, 0x6d4, +0x742, 0x578, 0x742, 0x578, 0x63f, 0x48a, 0x63f, 0x48a, 0x627, 0x486, 0x627, +0x486, 0x627, 0x486, 0x670, 0x4e1, 0x670, 0x4e1, 0x80a, 0x68b, 0x80a, 0x68b, +0x8be, 0x74d, 0x8be, 0x74d, 0x7f1, 0x68d, 0x7f1, 0x68d, 0x828, 0x6cd, 0x828, +0x6cd, 0x8a2, 0x74f, 0x8a2, 0x74f, 0x8a2, 0x74f, 0x7e1, 0x696, 0x7e1, 0x696, +0x781, 0x63a, 0x781, 0x63a, 0x757, 0x613, 0x757, 0x613, 0x6e1, 0x59f, 0x6e1, +0x59f, 0x7d7, 0x697, 0x7d7, 0x697, 0x7d7, 0x697, 0x814, 0x6d4, 0x814, 0x6d4, +0x81d, 0x6de, 0x81d, 0x6de, 0x9b5, 0x877, 0x9b5, 0x877, 0xa55, 0x918, 0xa55, +0x918, 0xa33, 0x8f8, 0xa33, 0x8f8, 0xa4a, 0x913, 0xa4a, 0x913, 0xa4a, 0x913, +0x99c, 0x86a, 0x99c, 0x86a, 0x889, 0x75e, 0x889, 0x75e, 0x7e6, 0x6c4, 0x7e6, +0x6c4, 0x6ba, 0x5a2, 0x6ba, 0x5a2, 0x6a4, 0x599, 0x6a4, 0x599, 0x733, 0x636, +0x733, 0x636, 0x733, 0x636, 0x5f6, 0x509, 0x5f6, 0x509, 0x52e, 0x453, 0x52e, +0x453, 0x50d, 0x445, 0x50d, 0x445, 0x482, 0x3cf, 0x482, 0x3cf, 0x49a, 0x3fd, +0x49a, 0x3fd, 0x49a, 0x3fd, 0x546, 0x4bf, 0x546, 0x4bf, 0x4a9, 0x439, 0x4a9, +0x439, 0x45c, 0x402, 0x45c, 0x402, 0x5a7, 0x563, 0x5a7, 0x563, 0x595, 0x567, +0x595, 0x567, 0x510, 0x4f6, 0x510, 0x4f6, 0x510, 0x4f6, 0x5cb, 0x5c5, 0x5cb, +0x5c5, 0x66c, 0x678, 0x66c, 0x678, 0x66f, 0x68c, 0x66f, 0x68c, 0x6ee, 0x71a, +0x6ee, 0x71a, 0x75e, 0x797, 0x75e, 0x797, 0x75e, 0x797, 0x7a2, 0x7e7, 0x7a2, +0x7e7, 0x7fc, 0x84b, 0x7fc, 0x84b, 0x6ed, 0x745, 0x6ed, 0x745, 0x643, 0x6a3, +0x643, 0x6a3, 0x68e, 0x6f5, 0x68e, 0x6f5, 0x5eb, 0x658, 0x5eb, 0x658, 0x5eb, +0x658, 0x4fe, 0x572, 0x4fe, 0x572, 0x3dd, 0x456, 0x3dd, 0x456, 0x213, 0x292, +0x213, 0x292, 0x169, 0x1ee, 0x169, 0x1ee, 0x165, 0x1f2, 0x165, 0x1f2, 0xb5, +0x14a, 0xb5, 0x14a, 0xb5, 0x14a, 0x57, 0xf5, 0x57, 0xf5, 0x2, 0xab, +0x2, 0xab, 0xffa7, 0x5c, 0xffa7, 0x5c, 0xff48, 0xa, 0xff48, 0xa, 0xff36, +0x6, 0xff36, 0x6, 0xff36, 0x6, 0xfe84, 0xff64, 0xfe84, 0xff64, 0xfd64, 0xfe55, +0xfd64, 0xfe55, 0xfd13, 0xfe16, 0xfd13, 0xfe16, 0xfcc7, 0xfddc, 0xfcc7, 0xfddc, 0xfddb, +0xff03, 0xfddb, 0xff03, 0xfe46, 0xff81, 0xfe46, 0xff81, 0xfe46, 0xff81, 0xfcd9, 0xfe27, +0xfcd9, 0xfe27, 0xfb61, 0xfcc2, 0xfb61, 0xfcc2, 0xf9ca, 0xfb3d, 0xf9ca, 0xfb3d, 0xf880, +0xfa04, 0xf880, 0xfa04, 0xf785, 0xf919, 0xf785, 0xf919, 0xf689, 0xf82c, 0xf689, 0xf82c, +0xf689, 0xf82c, 0xf517, 0xf6c7, 0xf517, 0xf6c7, 0xf4e2, 0xf69d, 0xf4e2, 0xf69d, 0xf559, +0xf71e, 0xf559, 0xf71e, 0xf5ab, 0xf777, 0xf5ab, 0xf777, 0xf690, 0xf862, 0xf690, 0xf862, +0xf690, 0xf862, 0xf585, 0xf75b, 0xf585, 0xf75b, 0xf41b, 0xf5f4, 0xf41b, 0xf5f4, 0xf449, +0xf622, 0xf449, 0xf622, 0xf3cf, 0xf5a9, 0xf3cf, 0xf5a9, 0xf28f, 0xf468, 0xf28f, 0xf468, +0xf171, 0xf347, 0xf171, 0xf347, 0xf171, 0xf347, 0xf05c, 0xf230, 0xf05c, 0xf230, 0xeff1, +0xf1c2, 0xeff1, 0xf1c2, 0xf041, 0xf210, 0xf041, 0xf210, 0xefbf, 0xf18b, 0xefbf, 0xf18b, +0xed93, 0xef5e, 0xed93, 0xef5e, 0xebb3, 0xed7d, 0xebb3, 0xed7d, 0xebb3, 0xed7d, 0xea65, +0xec2e, 0xea65, 0xec2e, 0xe922, 0xeaeb, 0xe922, 0xeaeb, 0xe961, 0xeb2c, 0xe961, 0xeb2c, +0xe917, 0xeae4, 0xe917, 0xeae4, 0xe8b7, 0xea88, 0xe8b7, 0xea88, 0xe8b7, 0xea88, 0xe971, +0xeb48, 0xe971, 0xeb48, 0xe918, 0xeaf5, 0xe918, 0xeaf5, 0xe7d3, 0xe9b8, 0xe7d3, 0xe9b8, +0xe6d2, 0xe8bf, 0xe6d2, 0xe8bf, 0xe64e, 0xe845, 0xe64e, 0xe845, 0xe51b, 0xe71d, 0xe51b, +0xe71d, 0xe51b, 0xe71d, 0xe480, 0xe68e, 0xe480, 0xe68e, 0xe3a6, 0xe5c0, 0xe3a6, 0xe5c0, +0xe243, 0xe46b, 0xe243, 0xe46b, 0xe33e, 0xe573, 0xe33e, 0xe573, 0xe496, 0xe6d9, 0xe496, +0xe6d9, 0xe556, 0xe7a8, 0xe556, 0xe7a8, 0xe556, 0xe7a8, 0xe5e3, 0xe843, 0xe5e3, 0xe843, +0xe576, 0xe7e5, 0xe576, 0xe7e5, 0xe513, 0xe790, 0xe513, 0xe790, 0xe588, 0xe813, 0xe588, +0xe813, 0xe4fd, 0xe795, 0xe4fd, 0xe795, 0xe4fd, 0xe795, 0xe3c4, 0xe668, 0xe3c4, 0xe668, +0xe413, 0xe6c3, 0xe413, 0xe6c3, 0xe555, 0xe810, 0xe555, 0xe810, 0xe6f6, 0xe9ba, 0xe6f6, +0xe9ba, 0xe8e5, 0xebb2, 0xe8e5, 0xebb2, 0xeac9, 0xed9d, 0xeac9, 0xed9d, 0xeac9, 0xed9d, +0xeb6a, 0xee43, 0xeb6a, 0xee43, 0xec01, 0xeedd, 0xec01, 0xeedd, 0xecb7, 0xef95, 0xecb7, +0xef95, 0xece6, 0xefc4, 0xece6, 0xefc4, 0xedf5, 0xf0d0, 0xedf5, 0xf0d0, 0xed90, 0xf068, +0xed90, 0xf068, 0xed90, 0xf068, 0xec9e, 0xef70, 0xec9e, 0xef70, 0xed36, 0xefff, 0xed36, +0xefff, 0xeda8, 0xf067, 0xeda8, 0xf067, 0xee00, 0xf0b4, 0xee00, 0xf0b4, 0xee80, 0xf126, +0xee80, 0xf126, 0xee80, 0xf126, 0xee4d, 0xf0e5, 0xee4d, 0xf0e5, 0xee67, 0xf0ef, 0xee67, +0xf0ef, 0xef23, 0xf19b, 0xef23, 0xf19b, 0xeebc, 0xf123, 0xeebc, 0xf123, 0xee8b, 0xf0e1, +0xee8b, 0xf0e1, 0xeee1, 0xf126, 0xeee1, 0xf126, 0xeee1, 0xf126, 0xee7f, 0xf0b4, 0xee7f, +0xf0b4, 0xef43, 0xf169, 0xef43, 0xf169, 0xf0b1, 0xf2ca, 0xf0b1, 0xf2ca, 0xf07b, 0xf287, +0xf07b, 0xf287, 0xf0b0, 0xf2b2, 0xf0b0, 0xf2b2, 0xf1f5, 0xf3ee, 0xf1f5, 0xf3ee, 0xf1f5, +0xf3ee, 0xf19b, 0xf38d, 0xf19b, 0xf38d, 0xf14a, 0xf337, 0xf14a, 0xf337, 0xf24d, 0xf438, +0xf24d, 0xf438, 0xf258, 0xf442, 0xf258, 0xf442, 0xf1ba, 0xf3a4, 0xf1ba, 0xf3a4, 0xf1ba, +0xf3a4, 0xf1bd, 0xf3a9, 0xf1bd, 0xf3a9, 0xf06d, 0xf25c, 0xf06d, 0xf25c, 0xef80, 0xf172, +0xef80, 0xf172, 0xeffe, 0xf1f2, 0xeffe, 0xf1f2, 0xef60, 0xf157, 0xef60, 0xf157, 0xf011, +0xf209, 0xf011, 0xf209, 0xf011, 0xf209, 0xf0c8, 0xf2c0, 0xf0c8, 0xf2c0, 0xf135, 0xf329, +0xf135, 0xf329, 0xf442, 0xf631, 0xf442, 0xf631, 0xf696, 0xf87b, 0xf696, 0xf87b, 0xf6d6, +0xf8ad, 0xf6d6, 0xf8ad, 0xf7b5, 0xf97a, 0xf7b5, 0xf97a, 0xf7b5, 0xf97a, 0xf970, 0xfb1f, +0xf970, 0xfb1f, 0xfaa5, 0xfc39, 0xfaa5, 0xfc39, 0xfc8a, 0xfdff, 0xfc8a, 0xfdff, 0xfe2c, +0xff7d, 0xfe2c, 0xff7d, 0xfe26, 0xff4e, 0xfe26, 0xff4e, 0xfe26, 0xff4e, 0xffb7, 0xb3, +0xffb7, 0xb3, 0x324, 0x3f0, 0x324, 0x3f0, 0x647, 0x6e0, 0x647, 0x6e0, 0x981, +0x9e4, 0x981, 0x9e4, 0xb22, 0xb4e, 0xb22, 0xb4e, 0xb00, 0xaf4, 0xb00, 0xaf4, +0xb00, 0xaf4, 0xca4, 0xc60, 0xca4, 0xc60, 0xe3b, 0xdc0, 0xe3b, 0xdc0, 0xebb, +0xe0a, 0xebb, 0xe0a, 0xf39, 0xe55, 0xf39, 0xe55, 0xf4e, 0xe3b, 0xf4e, 0xe3b, +0x1087, 0xf48, 0x1087, 0xf48, 0x1087, 0xf48, 0x12fd, 0x1196, 0x12fd, 0x1196, 0x14f7, +0x136c, 0x14f7, 0x136c, 0x14cd, 0x1325, 0x14cd, 0x1325, 0x1460, 0x129e, 0x1460, 0x129e, +0x149d, 0x12c9, 0x149d, 0x12c9, 0x149d, 0x12c9, 0x1500, 0x131d, 0x1500, 0x131d, 0x15dd, +0x13f1, 0x15dd, 0x13f1, 0x1552, 0x1362, 0x1552, 0x1362, 0x1514, 0x1323, 0x1514, 0x1323, +0x1625, 0x1438, 0x1625, 0x1438, 0x1660, 0x1479, 0x1660, 0x1479, 0x1660, 0x1479, 0x15d2, +0x13f4, 0x15d2, 0x13f4, 0x14e2, 0x130f, 0x14e2, 0x130f, 0x131f, 0x1158, 0x131f, 0x1158, +0x116b, 0xfb0, 0x116b, 0xfb0, 0x1149, 0xf9b, 0x1149, 0xf9b, 0x1149, 0xf9b, 0x107a, +0xed8, 0x107a, 0xed8, 0xf20, 0xd89, 0xf20, 0xd89, 0xfe8, 0xe5a, 0xfe8, 0xe5a, +0xffb, 0xe75, 0xffb, 0xe75, 0x100c, 0xe8c, 0x100c, 0xe8c, 0x11aa, 0x102d, 0x11aa, +0x102d, 0x11aa, 0x102d, 0x10ef, 0xf75, 0x10ef, 0xf75, 0xfd4, 0xe59, 0xfd4, 0xe59, +0xfde, 0xe63, 0xfde, 0xe63, 0xe9d, 0xd20, 0xe9d, 0xd20, 0xc7c, 0xafc, 0xc7c, +0xafc, 0xb0b, 0x989, 0xb0b, 0x989, 0xb0b, 0x989, 0xa6a, 0x8e5, 0xa6a, 0x8e5, +0x9cd, 0x847, 0x9cd, 0x847, 0xa4c, 0x8c6, 0xa4c, 0x8c6, 0x957, 0x7d3, 0x957, +0x7d3, 0x795, 0x616, 0x795, 0x616, 0x795, 0x616, 0x70f, 0x597, 0x70f, 0x597, +0x50b, 0x39d, 0x50b, 0x39d, 0x436, 0x2d6, 0x436, 0x2d6, 0x3c1, 0x272, 0x3c1, +0x272, 0x28e, 0x153, 0x28e, 0x153, 0x3c8, 0x2a5, 0x3c8, 0x2a5, 0x3c8, 0x2a5, +0x536, 0x42e, 0x536, 0x42e, 0x46d, 0x383, 0x46d, 0x383, 0x2fe, 0x234, 0x2fe, +0x234, 0x2c0, 0x217, 0x2c0, 0x217, 0x23d, 0x1b8, 0x23d, 0x1b8, 0x15f, 0xff, +0x15f, 0xff, 0x15f, 0xff, 0x150, 0x114, 0x150, 0x114, 0x1e, 0x7, 0x1e, +0x7, 0xfe7f, 0xfe8b, 0xfe7f, 0xfe8b, 0xfe68, 0xfe96, 0xfe68, 0xfe96, 0xfe71, 0xfebf, +0xfe71, 0xfebf, 0xfe71, 0xfebf, 0xfea6, 0xff11, 0xfea6, 0xff11, 0xfeba, 0xff40, 0xfeba, +0xff40, 0xfdb8, 0xfe56, 0xfdb8, 0xfe56, 0xfd87, 0xfe39, 0xfd87, 0xfe39, 0xfdf0, 0xfeb1, +0xfdf0, 0xfeb1, 0xfdcc, 0xfe99, 0xfdcc, 0xfe99, 0xfdcc, 0xfe99, 0xfd24, 0xfdf9, 0xfd24, +0xfdf9, 0xfc42, 0xfd1c, 0xfc42, 0xfd1c, 0xfbd7, 0xfcb1, 0xfbd7, 0xfcb1, 0xfc45, 0xfd1c, +0xfc45, 0xfd1c, 0xfd61, 0xfe32, 0xfd61, 0xfe32, 0xfdd4, 0xfe9b, 0xfdd4, 0xfe9b, 0xfdd4, +0xfe9b, 0xfd42, 0xfdfd, 0xfd42, 0xfdfd, 0xfd04, 0xfdb1, 0xfd04, 0xfdb1, 0xfd62, 0xfdfe, +0xfd62, 0xfdfe, 0xfd82, 0xfe0c, 0xfd82, 0xfe0c, 0xfdaf, 0xfe25, 0xfdaf, 0xfe25, 0xfdaf, +0xfe25, 0xfd9e, 0xfdff, 0xfd9e, 0xfdff, 0xfde1, 0xfe2c, 0xfde1, 0xfe2c, 0xfe60, 0xfe96, +0xfe60, 0xfe96, 0xfd73, 0xfd92, 0xfd73, 0xfd92, 0xfcdc, 0xfce4, 0xfcdc, 0xfce4, 0xfca8, +0xfc9a, 0xfca8, 0xfc9a, 0xfca8, 0xfc9a, 0xfc6e, 0xfc4b, 0xfc6e, 0xfc4b, 0xfd7a, 0xfd40, +0xfd7a, 0xfd40, 0xfe28, 0xfdda, 0xfe28, 0xfdda, 0xfdce, 0xfd6a, 0xfdce, 0xfd6a, 0xfea5, +0xfe2c, 0xfea5, 0xfe2c, 0x3d, 0xffaf, 0x3d, 0xffaf, 0x3d, 0xffaf, 0x110, 0x6e, +0x110, 0x6e, 0x25a, 0x1a3, 0x25a, 0x1a3, 0x2bc, 0x1f1, 0x2bc, 0x1f1, 0x24d, +0x16e, 0x24d, 0x16e, 0x32d, 0x239, 0x32d, 0x239, 0x32d, 0x239, 0x3b2, 0x2a9, +0x3b2, 0x2a9, 0x398, 0x27a, 0x398, 0x27a, 0x3df, 0x2ab, 0x3df, 0x2ab, 0x424, +0x2da, 0x424, 0x2da, 0x54e, 0x3ee, 0x54e, 0x3ee, 0x81b, 0x6a3, 0x81b, 0x6a3, +0x81b, 0x6a3, 0x9f4, 0x865, 0x9f4, 0x865, 0xa2d, 0x885, 0xa2d, 0x885, 0xa2f, +0x86f, 0xa2f, 0x86f, 0x967, 0x78d, 0x967, 0x78d, 0x961, 0x76e, 0x961, 0x76e, +0xa8c, 0x880, 0xa8c, 0x880, 0xa8c, 0x880, 0xa2f, 0x809, 0xa2f, 0x809, 0xa50, +0x810, 0xa50, 0x810, 0xc60, 0xa07, 0xc60, 0xa07, 0xe00, 0xb8e, 0xe00, 0xb8e, +0xf82, 0xcf8, 0xf82, 0xcf8, 0xf82, 0xcf8, 0x10bf, 0xe1e, 0x10bf, 0xe1e, 0x1191, +0xed9, 0x1191, 0xed9, 0x1213, 0xf47, 0x1213, 0xf47, 0x1309, 0x1029, 0x1309, 0x1029, +0x1429, 0x1137, 0x1429, 0x1137, 0x1328, 0x1027, 0x1328, 0x1027, 0x1328, 0x1027, 0x12db, +0xfcc, 0x12db, 0xfcc, 0x13ec, 0x10d1, 0x13ec, 0x10d1, 0x1543, 0x1220, 0x1543, 0x1220, +0x16cb, 0x13a1, 0x16cb, 0x13a1, 0x172a, 0x13fd, 0x172a, 0x13fd, 0x174b, 0x141d, 0x174b, +0x141d, 0x174b, 0x141d, 0x1696, 0x136b, 0x1696, 0x136b, 0x1595, 0x126e, 0x1595, 0x126e, +0x147b, 0x115b, 0x147b, 0x115b, 0x1395, 0x107f, 0x1395, 0x107f, 0x1435, 0x112c, 0x1435, +0x112c, 0x1435, 0x112c, 0x1442, 0x1148, 0x1442, 0x1148, 0x147f, 0x1195, 0x147f, 0x1195, +0x1496, 0x11be, 0x1496, 0x11be, 0x12e5, 0x1020, 0x12e5, 0x1020, 0x11ed, 0xf3c, 0x11ed, +0xf3c, 0x1120, 0xe83, 0x1120, 0xe83, 0x1120, 0xe83, 0xf7b, 0xcf3, 0xf7b, 0xcf3, +0xe87, 0xc15, 0xe87, 0xc15, 0xe20, 0xbc1, 0xe20, 0xbc1, 0xe2c, 0xbe0, 0xe2c, +0xbe0, 0xf4f, 0xd16, 0xf4f, 0xd16, 0x1048, 0xe1f, 0x1048, 0xe1f, 0x1048, 0xe1f, +0xf87, 0xd6e, 0xf87, 0xd6e, 0xed6, 0xccb, 0xed6, 0xccb, 0xe37, 0xc38, 0xe37, +0xc38, 0xdc6, 0xbd2, 0xdc6, 0xbd2, 0xe0c, 0xc21, 0xe0c, 0xc21, 0xe0c, 0xc21, +0xc2d, 0xa49, 0xc2d, 0xa49, 0xb2c, 0x94f, 0xb2c, 0x94f, 0xbc7, 0x9f0, 0xbc7, +0x9f0, 0xc39, 0xa66, 0xc39, 0xa66, 0xdf1, 0xc24, 0xdf1, 0xc24, 0xe57, 0xc8e, +0xe57, 0xc8e, 0xe57, 0xc8e, 0xe19, 0xc56, 0xe19, 0xc56, 0xe37, 0xc79, 0xe37, +0xc79, 0xde2, 0xc2b, 0xde2, 0xc2b, 0xd0e, 0xb5e, 0xd0e, 0xb5e, 0xbe5, 0xa3f, +0xbe5, 0xa3f, 0xb3a, 0x99e, 0xb3a, 0x99e, 0xb3a, 0x99e, 0x9ba, 0x82a, 0x9ba, +0x82a, 0x960, 0x7de, 0x960, 0x7de, 0x90e, 0x79c, 0x90e, 0x79c, 0x6e3, 0x582, +0x6e3, 0x582, 0x612, 0x4c3, 0x612, 0x4c3, 0x612, 0x4c3, 0x4d1, 0x396, 0x4d1, +0x396, 0x3af, 0x288, 0x3af, 0x288, 0x497, 0x385, 0x497, 0x385, 0x454, 0x356, +0x454, 0x356, 0x366, 0x27c, 0x366, 0x27c, 0x33a, 0x264, 0x33a, 0x264, 0x33a, +0x264, 0x359, 0x297, 0x359, 0x297, 0x30b, 0x25b, 0x30b, 0x25b, 0x1ea, 0x14a, +0x1ea, 0x14a, 0x17d, 0xec, 0x17d, 0xec, 0x139, 0xb6, 0x139, 0xb6, 0x139, +0xb6, 0x1b1, 0x13a, 0x1b1, 0x13a, 0x32f, 0x2c2, 0x32f, 0x2c2, 0x2cc, 0x268, +0x2cc, 0x268, 0x1e0, 0x184, 0x1e0, 0x184, 0x2a5, 0x250, 0x2a5, 0x250, 0x3e1, +0x391, 0x3e1, 0x391, 0x3e1, 0x391, 0x437, 0x3ed, 0x437, 0x3ed, 0x35d, 0x319, +0x35d, 0x319, 0x143, 0x105, 0x143, 0x105, 0xff75, 0xff3e, 0xff75, 0xff3e, 0xfef8, +0xfec9, 0xfef8, 0xfec9, 0xfdee, 0xfdca, 0xfdee, 0xfdca, 0xfdee, 0xfdca, 0xfc85, 0xfc6d, +0xfc85, 0xfc6d, 0xfb9c, 0xfb93, 0xfb9c, 0xfb93, 0xfa85, 0xfa8b, 0xfa85, 0xfa8b, 0xfad4, +0xfaed, 0xfad4, 0xfaed, 0xfc0d, 0xfc3b, 0xfc0d, 0xfc3b, 0xfc0d, 0xfc3b, 0xfaca, 0xfb10, +0xfaca, 0xfb10, 0xf961, 0xf9bf, 0xf961, 0xf9bf, 0xf93b, 0xf9b4, 0xf93b, 0xf9b4, 0xf8ae, +0xf943, 0xf8ae, 0xf943, 0xf8f5, 0xf9a6, 0xf8f5, 0xf9a6, 0xf914, 0xf9e2, 0xf914, 0xf9e2, +0xf914, 0xf9e2, 0xf86e, 0xf958, 0xf86e, 0xf958, 0xf865, 0xf96b, 0xf865, 0xf96b, 0xf915, +0xfa35, 0xf915, 0xfa35, 0xf96e, 0xfaa7, 0xf96e, 0xfaa7, 0xf960, 0xfaaf, 0xf960, 0xfaaf, +0xf896, 0xf9f8, 0xf896, 0xf9f8, 0xf896, 0xf9f8, 0xf6cb, 0xf83e, 0xf6cb, 0xf83e, 0xf5d7, +0xf757, 0xf5d7, 0xf757, 0xf42b, 0xf5b6, 0xf42b, 0xf5b6, 0xf35b, 0xf4ed, 0xf35b, 0xf4ed, +0xf3e0, 0xf577, 0xf3e0, 0xf577, 0xf3e0, 0xf577, 0xf264, 0xf3fc, 0xf264, 0xf3fc, 0xf2d7, +0xf46f, 0xf2d7, 0xf46f, 0xf480, 0xf616, 0xf480, 0xf616, 0xf45f, 0xf5f1, 0xf45f, 0xf5f1, +0xf497, 0xf625, 0xf497, 0xf625, 0xf485, 0xf60f, 0xf485, 0xf60f, 0xf485, 0xf60f, 0xf3de, +0xf565, 0xf3de, 0xf565, 0xf38c, 0xf510, 0xf38c, 0xf510, 0xf32e, 0xf4b2, 0xf32e, 0xf4b2, +0xf1c4, 0xf349, 0xf1c4, 0xf349, 0xf178, 0xf302, 0xf178, 0xf302, 0xf2b7, 0xf448, 0xf2b7, +0xf448, 0xf2b7, 0xf448, 0xf1d5, 0xf371, 0xf1d5, 0xf371, 0xf1b7, 0xf361, 0xf1b7, 0xf361, +0xf1e2, 0xf39e, 0xf1e2, 0xf39e, 0xefcf, 0xf19f, 0xefcf, 0xf19f, 0xef7b, 0xf163, 0xef7b, +0xf163, 0xef7b, 0xf163, 0xeeb6, 0xf0b8, 0xeeb6, 0xf0b8, 0xecc3, 0xeee2, 0xecc3, 0xeee2, +0xec64, 0xeea0, 0xec64, 0xeea0, 0xecbc, 0xef17, 0xecbc, 0xef17, 0xecd7, 0xef51, 0xecd7, +0xef51, 0xebe7, 0xee7f, 0xebe7, 0xee7f, 0xebe7, 0xee7f, 0xeb45, 0xedfb, 0xeb45, 0xedfb, +0xea92, 0xed63, 0xea92, 0xed63, 0xea36, 0xed21, 0xea36, 0xed21, 0xeac0, 0xedc0, 0xeac0, +0xedc0, 0xe9b6, 0xecc8, 0xe9b6, 0xecc8, 0xe80f, 0xeb31, 0xe80f, 0xeb31, 0xe80f, 0xeb31, +0xe770, 0xea9b, 0xe770, 0xea9b, 0xe7ed, 0xeb1f, 0xe7ed, 0xeb1f, 0xe90d, 0xec42, 0xe90d, +0xec42, 0xe986, 0xecb8, 0xe986, 0xecb8, 0xe8e7, 0xec13, 0xe8e7, 0xec13, 0xe8e7, 0xec13, +0xe8d0, 0xebf2, 0xe8d0, 0xebf2, 0xe962, 0xec77, 0xe962, 0xec77, 0xe92b, 0xec31, 0xe92b, +0xec31, 0xe895, 0xeb88, 0xe895, 0xeb88, 0xe7c0, 0xea9f, 0xe7c0, 0xea9f, 0xe7da, 0xeaa4, +0xe7da, 0xeaa4, 0xe7da, 0xeaa4, 0xe9ce, 0xec82, 0xe9ce, 0xec82, 0xec02, 0xee9f, 0xec02, +0xee9f, 0xecfa, 0xef80, 0xecfa, 0xef80, 0xed0d, 0xef7e, 0xed0d, 0xef7e, 0xed8b, 0xefe6, +0xed8b, 0xefe6, 0xee48, 0xf090, 0xee48, 0xf090, 0xee48, 0xf090, 0xeeb6, 0xf0ec, 0xeeb6, +0xf0ec, 0xef0b, 0xf130, 0xef0b, 0xf130, 0xef7b, 0xf191, 0xef7b, 0xf191, 0xefba, 0xf1c2, +0xefba, 0xf1c2, 0xefd1, 0xf1cd, 0xefd1, 0xf1cd, 0xefd1, 0xf1cd, 0xf042, 0xf233, 0xf042, +0xf233, 0xf09e, 0xf286, 0xf09e, 0xf286, 0xf006, 0xf1e5, 0xf006, 0xf1e5, 0xef8a, 0xf162, +0xef8a, 0xf162, 0xefda, 0xf1ac, 0xefda, 0xf1ac, 0xef52, 0xf11e, 0xef52, 0xf11e, 0xef52, +0xf11e, 0xef44, 0xf10b, 0xef44, 0xf10b, 0xf006, 0xf1c9, 0xf006, 0xf1c9, 0xeef6, 0xf0b5, +0xeef6, 0xf0b5, 0xeeb7, 0xf074, 0xeeb7, 0xf074, 0xf048, 0xf202, 0xf048, 0xf202, 0xf061, +0xf21a, 0xf061, 0xf21a, 0xf061, 0xf21a, 0xf0a1, 0xf25a, 0xf0a1, 0xf25a, 0xf154, 0xf30e, +0xf154, 0xf30e, 0xf0aa, 0xf266, 0xf0aa, 0xf266, 0xf040, 0xf1ff, 0xf040, 0xf1ff, 0xf056, +0xf21a, 0xf056, 0xf21a, 0xf056, 0xf21a, 0xf02e, 0xf1f8, 0xf02e, 0xf1f8, 0xf03e, 0xf210, +0xf03e, 0xf210, 0xf0b2, 0xf28d, 0xf0b2, 0xf28d, 0xefe3, 0xf1c7, 0xefe3, 0xf1c7, 0xee32, +0xf021, 0xee32, 0xf021, 0xed04, 0xeefd, 0xed04, 0xeefd, 0xed04, 0xeefd, 0xeb43, 0xed47, +0xeb43, 0xed47, 0xeb01, 0xed0f, 0xeb01, 0xed0f, 0xec49, 0xee60, 0xec49, 0xee60, 0xeccb, +0xeee9, 0xeccb, 0xeee9, 0xed96, 0xefb8, 0xed96, 0xefb8, 0xef3c, 0xf160, 0xef3c, 0xf160, +0xef3c, 0xf160, 0xf0f4, 0xf316, 0xf0f4, 0xf316, 0xf107, 0xf322, 0xf107, 0xf322, 0xf0c3, +0xf2d3, 0xf0c3, 0xf2d3, 0xf16f, 0xf36e, 0xf16f, 0xf36e, 0xf18a, 0xf373, 0xf18a, 0xf373, +0xf18a, 0xf373, 0xf2e3, 0xf4af, 0xf2e3, 0xf4af, 0xf4a6, 0xf650, 0xf4a6, 0xf650, 0xf514, +0xf696, 0xf514, 0xf696, 0xf6d0, 0xf825, 0xf6d0, 0xf825, 0xf944, 0xfa67, 0xf944, 0xfa67, +0xfbfa, 0xfce8, 0xfbfa, 0xfce8, 0xfbfa, 0xfce8, 0xff62, 0x15, 0xff62, 0x15, 0x1dd, +0x253, 0x1dd, 0x253, 0x3d2, 0x409, 0x3d2, 0x409, 0x513, 0x50b, 0x513, 0x50b, +0x57b, 0x533, 0x57b, 0x533, 0x5b4, 0x52e, 0x5b4, 0x52e, 0x5b4, 0x52e, 0x671, +0x5af, 0x671, 0x5af, 0x796, 0x69c, 0x796, 0x69c, 0x870, 0x743, 0x870, 0x743, +0xa3d, 0x8e1, 0xa3d, 0x8e1, 0xc0e, 0xa89, 0xc0e, 0xa89, 0xc0e, 0xa89, 0xd3a, +0xb93, 0xd3a, 0xb93, 0xea4, 0xce2, 0xea4, 0xce2, 0x1033, 0xe5e, 0x1033, 0xe5e, +0x118c, 0xfaa, 0x118c, 0xfaa, 0x122f, 0x1048, 0x122f, 0x1048, 0x12be, 0x10d8, 0x12be, +0x10d8, 0x12be, 0x10d8, 0x1295, 0x10b6, 0x1295, 0x10b6, 0x126f, 0x109d, 0x126f, 0x109d, +0x12c3, 0x1103, 0x12c3, 0x1103, 0x12f1, 0x1146, 0x12f1, 0x1146, 0x13b1, 0x121e, 0x13b1, +0x121e, 0x13b1, 0x121e, 0x1397, 0x121d, 0x1397, 0x121d, 0x13db, 0x127b, 0x13db, 0x127b, +0x138d, 0x1248, 0x138d, 0x1248, 0x1174, 0x1048, 0x1174, 0x1048, 0x10e9, 0xfd4, 0x10e9, +0xfd4, 0xf99, 0xe98, 0xf99, 0xe98, 0xf99, 0xe98, 0xe1c, 0xd2d, 0xe1c, 0xd2d, +0xef6, 0xe14, 0xef6, 0xe14, 0xf2e, 0xe55, 0xf2e, 0xe55, 0xe52, 0xd7f, 0xe52, +0xd7f, 0xd73, 0xca0, 0xd73, 0xca0, 0xd56, 0xc82, 0xd56, 0xc82, 0xd56, 0xc82, +0xd2b, 0xc51, 0xd2b, 0xc51, 0xd3d, 0xc5a, 0xd3d, 0xc5a, 0xd49, 0xc5c, 0xd49, +0xc5c, 0xbe0, 0xae6, 0xbe0, 0xae6, 0xc08, 0xb02, 0xc08, 0xb02, 0xc08, 0xb02, +0xcc8, 0xbb5, 0xcc8, 0xbb5, 0xc72, 0xb54, 0xc72, 0xb54, 0xc13, 0xaea, 0xc13, +0xaea, 0xa98, 0x968, 0xa98, 0x968, 0x92b, 0x7f5, 0x92b, 0x7f5, 0x919, 0x7e2, +0x919, 0x7e2, 0x919, 0x7e2, 0x91e, 0x7e9, 0x91e, 0x7e9, 0x7d4, 0x6a5, 0x7d4, +0x6a5, 0x7a7, 0x683, 0x7a7, 0x683, 0x84f, 0x739, 0x84f, 0x739, 0x760, 0x65c, +0x760, 0x65c, 0x7b2, 0x6c4, 0x7b2, 0x6c4, 0x7b2, 0x6c4, 0x881, 0x7ac, 0x881, +0x7ac, 0x7c8, 0x70f, 0x7c8, 0x70f, 0x738, 0x69e, 0x738, 0x69e, 0x6e2, 0x668, +0x6e2, 0x668, 0x5a5, 0x54b, 0x5a5, 0x54b, 0x5a5, 0x54b, 0x4e6, 0x4ad, 0x4e6, +0x4ad, 0x514, 0x4fb, 0x514, 0x4fb, 0x480, 0x486, 0x480, 0x486, 0x4dc, 0x500, +0x4dc, 0x500, 0x4eb, 0x52a, 0x4eb, 0x52a, 0x403, 0x45a, 0x403, 0x45a, 0x403, +0x45a, 0x461, 0x4ce, 0x461, 0x4ce, 0x3bf, 0x43d, 0x3bf, 0x43d, 0x2f5, 0x382, +0x2f5, 0x382, 0x327, 0x3bf, 0x327, 0x3bf, 0x2f0, 0x38e, 0x2f0, 0x38e, 0x2f9, +0x39b, 0x2f9, 0x39b, 0x2f9, 0x39b, 0x351, 0x3f2, 0x351, 0x3f2, 0x364, 0x401, +0x364, 0x401, 0x2bb, 0x352, 0x2bb, 0x352, 0x228, 0x2b6, 0x228, 0x2b6, 0x1b6, +0x239, 0x1b6, 0x239, 0x1b6, 0x239, 0x192, 0x209, 0x192, 0x209, 0x245, 0x2ae, +0x245, 0x2ae, 0x21f, 0x279, 0x21f, 0x279, 0x1b1, 0x1fb, 0x1b1, 0x1fb, 0x1c7, +0x203, 0x1c7, 0x203, 0x1a9, 0x1d5, 0x1a9, 0x1d5, 0x1a9, 0x1d5, 0x1da, 0x1f7, +0x1da, 0x1f7, 0x1ff, 0x20e, 0x1ff, 0x20e, 0xb0, 0xb1, 0xb0, 0xb1, 0xffc1, +0xffb6, 0xffc1, 0xffb6, 0x99, 0x82, 0x99, 0x82, 0x36, 0x14, 0x36, 0x14, +0x36, 0x14, 0x5c, 0x30, 0x5c, 0x30, 0x18a, 0x155, 0x18a, 0x155, 0x131, +0xf3, 0x131, 0xf3, 0x29c, 0x256, 0x29c, 0x256, 0x444, 0x3f6, 0x444, 0x3f6, +0x444, 0x3f6, 0x3fa, 0x3a4, 0x3fa, 0x3a4, 0x407, 0x3aa, 0x407, 0x3aa, 0x3d7, +0x371, 0x3d7, 0x371, 0x33a, 0x2ca, 0x33a, 0x2ca, 0x31c, 0x2a2, 0x31c, 0x2a2, +0x369, 0x2e3, 0x369, 0x2e3, 0x369, 0x2e3, 0x321, 0x28f, 0x321, 0x28f, 0x3c0, +0x320, 0x3c0, 0x320, 0x4e1, 0x431, 0x4e1, 0x431, 0x4e5, 0x423, 0x4e5, 0x423, +0x634, 0x55e, 0x634, 0x55e, 0x6b2, 0x5c6, 0x6b2, 0x5c6, 0x6b2, 0x5c6, 0x610, +0x50b, 0x610, 0x50b, 0x6bd, 0x59e, 0x6bd, 0x59e, 0x6ac, 0x56f, 0x6ac, 0x56f, +0x68f, 0x533, 0x68f, 0x533, 0x71d, 0x5a0, 0x71d, 0x5a0, 0x71d, 0x5a0, 0x79c, +0x5fc, 0x79c, 0x5fc, 0x79c, 0x5d6, 0x79c, 0x5d6, 0x784, 0x597, 0x784, 0x597, +0x8e2, 0x6cc, 0x8e2, 0x6cc, 0x9c5, 0x786, 0x9c5, 0x786, 0xa99, 0x830, 0xa99, +0x830, 0xa99, 0x830, 0xc86, 0x9f3, 0xc86, 0x9f3, 0xd56, 0xa99, 0xd56, 0xa99, +0xdd8, 0xaf1, 0xdd8, 0xaf1, 0xe83, 0xb74, 0xe83, 0xb74, 0xf0a, 0xbd5, 0xf0a, +0xbd5, 0xfcb, 0xc72, 0xfcb, 0xc72, 0xfcb, 0xc72, 0x1040, 0xcc6, 0x1040, 0xcc6, +0x10e9, 0xd51, 0x10e9, 0xd51, 0x117f, 0xdce, 0x117f, 0xdce, 0x11d8, 0xe11, 0x11d8, +0xe11, 0x1204, 0xe2c, 0x1204, 0xe2c, 0x1204, 0xe2c, 0x1232, 0xe4d, 0x1232, 0xe4d, +0x1239, 0xe4d, 0x1239, 0xe4d, 0x115a, 0xd6c, 0x115a, 0xd6c, 0x112c, 0xd40, 0x112c, +0xd40, 0x10d3, 0xcef, 0x10d3, 0xcef, 0xff3, 0xc1b, 0xff3, 0xc1b, 0xff3, 0xc1b, +0xf7e, 0xbb5, 0xf7e, 0xbb5, 0xe36, 0xa82, 0xe36, 0xa82, 0xde3, 0xa46, 0xde3, +0xa46, 0xe1d, 0xa9a, 0xe1d, 0xa9a, 0xe3d, 0xad7, 0xe3d, 0xad7, 0xeb6, 0xb6f, +0xeb6, 0xb6f, 0xeb6, 0xb6f, 0xe72, 0xb4a, 0xe72, 0xb4a, 0xe1e, 0xb15, 0xe1e, +0xb15, 0xcd6, 0x9ed, 0xcd6, 0x9ed, 0xca0, 0x9d7, 0xca0, 0x9d7, 0xd31, 0xa86, +0xd31, 0xa86, 0xd31, 0xa86, 0xc7c, 0x9ef, 0xc7c, 0x9ef, 0xd01, 0xa90, 0xd01, +0xa90, 0xc58, 0xa02, 0xc58, 0xa02, 0xb5a, 0x91d, 0xb5a, 0x91d, 0xb8d, 0x968, +0xb8d, 0x968, 0xacd, 0x8be, 0xacd, 0x8be, 0xacd, 0x8be, 0xb02, 0x908, 0xb02, +0x908, 0xb62, 0x97d, 0xb62, 0x97d, 0xb5e, 0x98d, 0xb5e, 0x98d, 0xc0e, 0xa50, +0xc0e, 0xa50, 0xce5, 0xb3b, 0xce5, 0xb3b, 0xccc, 0xb37, 0xccc, 0xb37, 0xccc, +0xb37, 0xc2c, 0xaab, 0xc2c, 0xaab, 0xc3a, 0xad0, 0xc3a, 0xad0, 0xb93, 0xa40, +0xb93, 0xa40, 0xbdf, 0xaa5, 0xbdf, 0xaa5, 0xc26, 0xb07, 0xc26, 0xb07, 0xc26, +0xb07, 0xa76, 0x972, 0xa76, 0x972, 0x9d4, 0x8ef, 0x9d4, 0x8ef, 0x91a, 0x853, +0x91a, 0x853, 0x83a, 0x793, 0x83a, 0x793, 0x819, 0x792, 0x819, 0x792, 0x795, +0x730, 0x795, 0x730, 0x795, 0x730, 0x710, 0x6cc, 0x710, 0x6cc, 0x6c3, 0x6a0, +0x6c3, 0x6a0, 0x79e, 0x79b, 0x79e, 0x79b, 0x7b3, 0x7d0, 0x7b3, 0x7d0, 0x5f1, +0x62b, 0x5f1, 0x62b, 0x5f1, 0x62b, 0x528, 0x57d, 0x528, 0x57d, 0x51a, 0x589, +0x51a, 0x589, 0x4e4, 0x56a, 0x4e4, 0x56a, 0x5c5, 0x661, 0x5c5, 0x661, 0x6dc, +0x78a, 0x6dc, 0x78a, 0x68f, 0x74c, 0x68f, 0x74c, 0x68f, 0x74c, 0x66a, 0x735, +0x66a, 0x735, 0x71f, 0x7f5, 0x71f, 0x7f5, 0x818, 0x8f8, 0x818, 0x8f8, 0x8f5, +0x9dd, 0x8f5, 0x9dd, 0x8ad, 0x99b, 0x8ad, 0x99b, 0x756, 0x849, 0x756, 0x849, +0x756, 0x849, 0x571, 0x669, 0x571, 0x669, 0x3fa, 0x4f7, 0x3fa, 0x4f7, 0x364, +0x465, 0x364, 0x465, 0x33f, 0x444, 0x33f, 0x444, 0x2d9, 0x3e4, 0x2d9, 0x3e4, +0x2d9, 0x3e4, 0x217, 0x328, 0x217, 0x328, 0x1c0, 0x2d8, 0x1c0, 0x2d8, 0xf9, +0x219, 0xf9, 0x219, 0x6, 0x130, 0x6, 0x130, 0xff09, 0x3d, 0xff09, 0x3d, +0xfd91, 0xfed0, 0xfd91, 0xfed0, 0xfd91, 0xfed0, 0xfcd8, 0xfe22, 0xfcd8, 0xfe22, 0xfcf5, +0xfe4b, 0xfcf5, 0xfe4b, 0xfd57, 0xfeb8, 0xfd57, 0xfeb8, 0xfd30, 0xfe9d, 0xfd30, 0xfe9d, +0xfcfd, 0xfe75, 0xfcfd, 0xfe75, 0xfc6a, 0xfdec, 0xfc6a, 0xfdec, 0xfc6a, 0xfdec, 0xfbc5, +0xfd50, 0xfbc5, 0xfd50, 0xfcb7, 0xfe48, 0xfcb7, 0xfe48, 0xfcfe, 0xfe95, 0xfcfe, 0xfe95, +0xfcd3, 0xfe6d, 0xfcd3, 0xfe6d, 0xfc06, 0xfda2, 0xfc06, 0xfda2, 0xfc06, 0xfda2, 0xf9ca, +0xfb65, 0xf9ca, 0xfb65, 0xf91c, 0xfab4, 0xf91c, 0xfab4, 0xf88c, 0xfa20, 0xf88c, 0xfa20, +0xf759, 0xf8e8, 0xf759, 0xf8e8, 0xf6c6, 0xf84e, 0xf6c6, 0xf84e, 0xf608, 0xf789, 0xf608, +0xf789, 0xf608, 0xf789, 0xf663, 0xf7dd, 0xf663, 0xf7dd, 0xf7cd, 0xf940, 0xf7cd, 0xf940, +0xf774, 0xf8e2, 0xf774, 0xf8e2, 0xf637, 0xf79f, 0xf637, 0xf79f, 0xf65d, 0xf7c3, 0xf65d, +0xf7c3, 0xf5bf, 0xf725, 0xf5bf, 0xf725, 0xf5bf, 0xf725, 0xf51e, 0xf688, 0xf51e, 0xf688, +0xf52d, 0xf69c, 0xf52d, 0xf69c, 0xf318, 0xf492, 0xf318, 0xf492, 0xf15b, 0xf2e3, 0xf15b, +0xf2e3, 0xf0ed, 0xf288, 0xf0ed, 0xf288, 0xf0ed, 0xf288, 0xf075, 0xf226, 0xf075, 0xf226, +0xf089, 0xf255, 0xf089, 0xf255, 0xf088, 0xf272, 0xf088, 0xf272, 0xf00b, 0xf218, 0xf00b, +0xf218, 0xeece, 0xf0ff, 0xeece, 0xf0ff, 0xee1a, 0xf072, 0xee1a, 0xf072, 0xee1a, 0xf072, +0xed74, 0xeff4, 0xed74, 0xeff4, 0xeb1f, 0xedc8, 0xeb1f, 0xedc8, 0xe95b, 0xec2d, 0xe95b, +0xec2d, 0xe89a, 0xeb94, 0xe89a, 0xeb94, 0xe7c3, 0xeae3, 0xe7c3, 0xeae3, 0xe73f, 0xea82, +0xe73f, 0xea82, 0xe73f, 0xea82, 0xe6f4, 0xea57, 0xe6f4, 0xea57, 0xe6b4, 0xea31, 0xe6b4, +0xea31, 0xe652, 0xe9e5, 0xe652, 0xe9e5, 0xe62c, 0xe9d0, 0xe62c, 0xe9d0, 0xe60c, 0xe9b9, +0xe60c, 0xe9b9, 0xe60c, 0xe9b9, 0xe523, 0xe8d4, 0xe523, 0xe8d4, 0xe453, 0xe801, 0xe453, +0xe801, 0xe3d9, 0xe77d, 0xe3d9, 0xe77d, 0xe33a, 0xe6cf, 0xe33a, 0xe6cf, 0xe290, 0xe610, +0xe290, 0xe610, 0xe201, 0xe566, 0xe201, 0xe566, 0xe201, 0xe566, 0xe260, 0xe5a5, 0xe260, +0xe5a5, 0xe2b0, 0xe5d2, 0xe2b0, 0xe5d2, 0xe29a, 0xe595, 0xe29a, 0xe595, 0xe365, 0xe638, +0xe365, 0xe638, 0xe3fb, 0xe6a5, 0xe3fb, 0xe6a5, 0xe420, 0xe6a0, 0xe420, 0xe6a0, 0xe420, +0xe6a0, 0xe46d, 0xe6c4, 0xe46d, 0xe6c4, 0xe531, 0xe760, 0xe531, 0xe760, 0xe624, 0xe82e, +0xe624, 0xe82e, 0xe6c1, 0xe8a9, 0xe6c1, 0xe8a9, 0xe7aa, 0xe975, 0xe7aa, 0xe975, 0xe7aa, +0xe975, 0xe833, 0xe9e5, 0xe833, 0xe9e5, 0xe927, 0xeac4, 0xe927, 0xeac4, 0xea26, 0xebb2, +0xea26, 0xebb2, 0xe9f3, 0xeb74, 0xe9f3, 0xeb74, 0xea0d, 0xeb87, 0xea0d, 0xeb87, 0xe9d5, +0xeb4c, 0xe9d5, 0xeb4c, 0xe9d5, 0xeb4c, 0xe9e0, 0xeb58, 0xe9e0, 0xeb58, 0xea1e, 0xeb9c, +0xea1e, 0xeb9c, 0xe992, 0xeb18, 0xe992, 0xeb18, 0xe9ce, 0xeb5e, 0xe9ce, 0xeb5e, 0xea10, +0xebad, 0xea10, 0xebad, 0xe9e6, 0xeb92, 0xe9e6, 0xeb92, 0xe9e6, 0xeb92, 0xea1d, 0xebd7, +0xea1d, 0xebd7, 0xea6e, 0xec37, 0xea6e, 0xec37, 0xea9e, 0xec75, 0xea9e, 0xec75, 0xeb5d, +0xed43, 0xeb5d, 0xed43, 0xebeb, 0xedde, 0xebeb, 0xedde, 0xebeb, 0xedde, 0xebc2, 0xedc2, +0xebc2, 0xedc2, 0xed58, 0xef63, 0xed58, 0xef63, 0xeec0, 0xf0d5, 0xeec0, 0xf0d5, 0xeefa, +0xf119, 0xeefa, 0xf119, 0xefa6, 0xf1cd, 0xefa6, 0xf1cd, 0xef1c, 0xf14a, 0xef1c, 0xf14a, +0xef1c, 0xf14a, 0xee5a, 0xf08f, 0xee5a, 0xf08f, 0xee07, 0xf042, 0xee07, 0xf042, 0xed8e, +0xefce, 0xed8e, 0xefce, 0xec83, 0xeec8, 0xec83, 0xeec8, 0xeb2d, 0xed77, 0xeb2d, 0xed77, +0xebbd, 0xee0c, 0xebbd, 0xee0c, 0xebbd, 0xee0c, 0xecf2, 0xef43, 0xecf2, 0xef43, 0xee6d, +0xf0c1, 0xee6d, 0xf0c1, 0xf060, 0xf2b5, 0xf060, 0xf2b5, 0xf0fd, 0xf351, 0xf0fd, 0xf351, +0xf17e, 0xf3ce, 0xf17e, 0xf3ce, 0xf17e, 0xf3ce, 0xf27c, 0xf4c6, 0xf27c, 0xf4c6, 0xf309, +0xf54a, 0xf309, 0xf54a, 0xf38f, 0xf5c3, 0xf38f, 0xf5c3, 0xf415, 0xf638, 0xf415, 0xf638, +0xf481, 0xf68d, 0xf481, 0xf68d, 0xf570, 0xf761, 0xf570, 0xf761, 0xf570, 0xf761, 0xf6d5, +0xf8a4, 0xf6d5, 0xf8a4, 0xf8c9, 0xfa71, 0xf8c9, 0xfa71, 0xfb17, 0xfc94, 0xfb17, 0xfc94, +0xfce6, 0xfe31, 0xfce6, 0xfe31, 0xfefb, 0xf, 0xfefb, 0xf, 0x1fa, 0x2d4, 0x1fa, +0x2d4, 0x1fa, 0x2d4, 0x506, 0x5a1, 0x506, 0x5a1, 0x6bc, 0x715, 0x6bc, 0x715, +0x826, 0x83c, 0x826, 0x83c, 0x9e9, 0x9ba, 0x9e9, 0x9ba, 0xac9, 0xa56, 0xac9, +0xa56, 0xac9, 0xa56, 0xc2c, 0xb76, 0xc2c, 0xb76, 0xd40, 0xc49, 0xd40, 0xc49, +0xd6a, 0xc35, 0xd6a, 0xc35, 0xe47, 0xcda, 0xe47, 0xcda, 0xf9b, 0xdfa, 0xf9b, +0xdfa, 0x1183, 0xfb5, 0x1183, 0xfb5, 0x1183, 0xfb5, 0x1311, 0x111c, 0x1311, 0x111c, +0x1499, 0x1285, 0x1499, 0x1285, 0x1680, 0x1452, 0x1680, 0x1452, 0x17e8, 0x15a9, 0x17e8, +0x15a9, 0x1877, 0x162e, 0x1877, 0x162e, 0x1877, 0x162e, 0x17c8, 0x157b, 0x17c8, 0x157b, +0x1773, 0x1528, 0x1773, 0x1528, 0x1707, 0x14c3, 0x1707, 0x14c3, 0x1719, 0x14e1, 0x1719, +0x14e1, 0x184c, 0x1623, 0x184c, 0x1623, 0x1827, 0x1610, 0x1827, 0x1610, 0x1827, 0x1610, +0x180d, 0x160a, 0x180d, 0x160a, 0x184c, 0x165c, 0x184c, 0x165c, 0x17ba, 0x15df, 0x17ba, +0x15df, 0x16f8, 0x1530, 0x16f8, 0x1530, 0x15b9, 0x1404, 0x15b9, 0x1404, 0x139b, 0x11f5, +0x139b, 0x11f5, 0x139b, 0x11f5, 0x11c9, 0x1031, 0x11c9, 0x1031, 0x1104, 0xf77, 0x1104, +0xf77, 0xf8e, 0xe0a, 0xf8e, 0xe0a, 0xeab, 0xd2d, 0xeab, 0xd2d, 0xe83, 0xd09, +0xe83, 0xd09, 0xe83, 0xd09, 0xded, 0xc76, 0xded, 0xc76, 0xe5d, 0xce6, 0xe5d, +0xce6, 0xe04, 0xc8d, 0xe04, 0xc8d, 0xcd5, 0xb5d, 0xcd5, 0xb5d, 0xbf2, 0xa7a, +0xbf2, 0xa7a, 0xb07, 0x990, 0xb07, 0x990, 0xb07, 0x990, 0xa4b, 0x8d5, 0xa4b, +0x8d5, 0x98d, 0x81a, 0x98d, 0x81a, 0x9c7, 0x85a, 0x9c7, 0x85a, 0x9a8, 0x842, +0x9a8, 0x842, 0x910, 0x7b3, 0x910, 0x7b3, 0x8fd, 0x7ad, 0x8fd, 0x7ad, 0x8fd, +0x7ad, 0x7e5, 0x6a3, 0x7e5, 0x6a3, 0x687, 0x556, 0x687, 0x556, 0x570, 0x451, +0x570, 0x451, 0x4b3, 0x3a9, 0x4b3, 0x3a9, 0x4e5, 0x3f1, 0x4e5, 0x3f1, 0x4e5, +0x3f1, 0x504, 0x426, 0x504, 0x426, 0x45d, 0x396, 0x45d, 0x396, 0x3b9, 0x30a, +0x3b9, 0x30a, 0x350, 0x2b7, 0x350, 0x2b7, 0x2bf, 0x23d, 0x2bf, 0x23d, 0x2ae, +0x242, 0x2ae, 0x242, 0x2ae, 0x242, 0x271, 0x219, 0x271, 0x219, 0x19a, 0x155, +0x19a, 0x155, 0xf1, 0xbc, 0xf1, 0xbc, 0x6f, 0x4a, 0x6f, 0x4a, 0x4, +0xffed, 0x4, 0xffed, 0xff7f, 0xff73, 0xff7f, 0xff73, 0xff7f, 0xff73, 0xff29, 0xff27, +0xff29, 0xff27, 0xff0e, 0xff13, 0xff0e, 0xff13, 0xff09, 0xff15, 0xff09, 0xff15, 0xfedb, +0xfeeb, 0xfedb, 0xfeeb, 0xfe97, 0xfea9, 0xfe97, 0xfea9, 0xfe97, 0xfea9, 0xfe5c, 0xfe6f, +0xfe5c, 0xfe6f, 0xfd95, 0xfda6, 0xfd95, 0xfda6, 0xfd7a, 0xfd89, 0xfd7a, 0xfd89, 0xfd6a, +0xfd74, 0xfd6a, 0xfd74, 0xfcc7, 0xfcca, 0xfcc7, 0xfcca, 0xfd3c, 0xfd36, 0xfd3c, 0xfd36, +0xfd3c, 0xfd36, 0xfddf, 0xfdcf, 0xfddf, 0xfdcf, 0xfdc6, 0xfdaa, 0xfdc6, 0xfdaa, 0xfd3e, +0xfd13, 0xfd3e, 0xfd13, 0xfd0c, 0xfcd2, 0xfd0c, 0xfcd2, 0xfd1e, 0xfcd3, 0xfd1e, 0xfcd3, +0xfd57, 0xfcf9, 0xfd57, 0xfcf9, 0xfd57, 0xfcf9, 0xfdc5, 0xfd53, 0xfdc5, 0xfd53, 0xfcfc, +0xfc74, 0xfcfc, 0xfc74, 0xfc35, 0xfb98, 0xfc35, 0xfb98, 0xfc71, 0xfbbe, 0xfc71, 0xfbbe, +0xfd44, 0xfc7b, 0xfd44, 0xfc7b, 0xfd44, 0xfc7b, 0xfe7f, 0xfda1, 0xfe7f, 0xfda1, 0xff23, +0xfe30, 0xff23, 0xfe30, 0xffc6, 0xfec1, 0xffc6, 0xfec1, 0x98, 0xff81, 0x98, 0xff81, +0x152, 0x2c, 0x152, 0x2c, 0x1bd, 0x8b, 0x1bd, 0x8b, 0x1bd, 0x8b, 0x1a0, +0x63, 0x1a0, 0x63, 0x1b5, 0x70, 0x1b5, 0x70, 0x272, 0x128, 0x272, 0x128, +0x426, 0x2d9, 0x426, 0x2d9, 0x57b, 0x42e, 0x57b, 0x42e, 0x572, 0x426, 0x572, +0x426, 0x572, 0x426, 0x4ce, 0x384, 0x4ce, 0x384, 0x4b9, 0x372, 0x4b9, 0x372, +0x5ef, 0x4ab, 0x5ef, 0x4ab, 0x74a, 0x609, 0x74a, 0x609, 0x894, 0x755, 0x894, +0x755, 0x894, 0x755, 0x964, 0x824, 0x964, 0x824, 0x97d, 0x83a, 0x97d, 0x83a, +0xaf9, 0x9b0, 0xaf9, 0x9b0, 0xc7a, 0xb27, 0xc7a, 0xb27, 0xbd1, 0xa71, 0xbd1, +0xa71, 0xb2b, 0x9b9, 0xb2b, 0x9b9, 0xb2b, 0x9b9, 0xafa, 0x973, 0xafa, 0x973, +0xae1, 0x941, 0xae1, 0x941, 0xc91, 0xad3, 0xc91, 0xad3, 0xe62, 0xc84, 0xe62, +0xc84, 0xf0f, 0xd0d, 0xf0f, 0xd0d, 0x1045, 0xe1d, 0x1045, 0xe1d, 0x1045, 0xe1d, +0x11f8, 0xfa9, 0x11f8, 0xfa9, 0x138b, 0x1114, 0x138b, 0x1114, 0x14bc, 0x121d, 0x14bc, +0x121d, 0x1541, 0x127c, 0x1541, 0x127c, 0x14f2, 0x1208, 0x14f2, 0x1208, 0x14f2, 0x1208, +0x156e, 0x1261, 0x156e, 0x1261, 0x1722, 0x13f7, 0x1722, 0x13f7, 0x1843, 0x14fd, 0x1843, +0x14fd, 0x1994, 0x1637, 0x1994, 0x1637, 0x1ae8, 0x177a, 0x1ae8, 0x177a, 0x1b5c, 0x17e2, +0x1b5c, 0x17e2, 0x1b5c, 0x17e2, 0x1ad1, 0x1750, 0x1ad1, 0x1750, 0x1984, 0x1601, 0x1984, +0x1601, 0x1866, 0x14e6, 0x1866, 0x14e6, 0x16dc, 0x1363, 0x16dc, 0x1363, 0x15b7, 0x124a, +0x15b7, 0x124a, 0x153c, 0x11de, 0x153c, 0x11de, 0x153c, 0x11de, 0x14d3, 0x1188, 0x14d3, +0x1188, 0x14d5, 0x119e, 0x14d5, 0x119e, 0x1577, 0x1256, 0x1577, 0x1256, 0x1716, 0x140d, +0x1716, 0x140d, 0x171a, 0x1428, 0x171a, 0x1428, 0x171a, 0x1428, 0x1608, 0x132d, 0x1608, +0x132d, 0x15b6, 0x12f2, 0x15b6, 0x12f2, 0x14ae, 0x1201, 0x14ae, 0x1201, 0x141d, 0x1185, +0x141d, 0x1185, 0x1397, 0x1112, 0x1397, 0x1112, 0x122d, 0xfba, 0x122d, 0xfba, 0x122d, +0xfba, 0x1148, 0xee6, 0x1148, 0xee6, 0x1126, 0xed4, 0x1126, 0xed4, 0x10dc, 0xe98, +0x10dc, 0xe98, 0x105e, 0xe26, 0x105e, 0xe26, 0x108a, 0xe5f, 0x108a, 0xe5f, 0x1055, +0xe35, 0x1055, 0xe35, 0x1055, 0xe35, 0x1067, 0xe53, 0x1067, 0xe53, 0x109f, 0xe95, +0x109f, 0xe95, 0xfca, 0xdcb, 0xfca, 0xdcb, 0xfe2, 0xded, 0xfe2, 0xded, 0xf7a, +0xd91, 0xf7a, 0xd91, 0xf7a, 0xd91, 0xe0f, 0xc31, 0xe0f, 0xc31, 0xda0, 0xbcf, +0xda0, 0xbcf, 0xca1, 0xadc, 0xca1, 0xadc, 0xb3d, 0x986, 0xb3d, 0x986, 0xb12, +0x969, 0xb12, 0x969, 0xa92, 0x8f7, 0xa92, 0x8f7, 0xa92, 0x8f7, 0x93a, 0x7af, +0x93a, 0x7af, 0x8ec, 0x770, 0x8ec, 0x770, 0x891, 0x726, 0x891, 0x726, 0x75c, +0x601, 0x75c, 0x601, 0x77d, 0x634, 0x77d, 0x634, 0x77d, 0x634, 0x7d9, 0x6a1, +0x7d9, 0x6a1, 0x640, 0x51b, 0x640, 0x51b, 0x469, 0x358, 0x469, 0x358, 0x32f, +0x231, 0x32f, 0x231, 0x1cb, 0xe2, 0x1cb, 0xe2, 0x17f, 0xab, 0x17f, 0xab, +0x17f, 0xab, 0x1b1, 0xf5, 0x1b1, 0xf5, 0x14d, 0xa8, 0x14d, 0xa8, 0x1ab, +0x11f, 0x1ab, 0x11f, 0x2a8, 0x236, 0x2a8, 0x236, 0x38f, 0x338, 0x38f, 0x338, +0x371, 0x337, 0x371, 0x337, 0x371, 0x337, 0x25b, 0x23d, 0x25b, 0x23d, 0x19e, +0x19e, 0x19e, 0x19e, 0x10c, 0x12a, 0x10c, 0x12a, 0x4d, 0x89, 0x4d, 0x89, +0xff5e, 0xffb7, 0xff5e, 0xffb7, 0xff5e, 0xffb7, 0xfe41, 0xfeb7, 0xfe41, 0xfeb7, 0xfd0d, +0xfda0, 0xfd0d, 0xfda0, 0xfc9a, 0xfd48, 0xfc9a, 0xfd48, 0xfc9e, 0xfd66, 0xfc9e, 0xfd66, +0xfc31, 0xfd11, 0xfc31, 0xfd11, 0xfbc8, 0xfcbe, 0xfbc8, 0xfcbe, 0xfbc8, 0xfcbe, 0xfa88, +0xfb93, 0xfa88, 0xfb93, 0xf92e, 0xfa4b, 0xf92e, 0xfa4b, 0xf8b2, 0xf9df, 0xf8b2, 0xf9df, +0xf814, 0xf950, 0xf814, 0xf950, 0xf6e8, 0xf830, 0xf6e8, 0xf830, 0xf5cb, 0xf71e, 0xf5cb, +0xf71e, 0xf5cb, 0xf71e, 0xf640, 0xf79d, 0xf640, 0xf79d, 0xf673, 0xf7d9, 0xf673, 0xf7d9, +0xf5ca, 0xf737, 0xf5ca, 0xf737, 0xf5c6, 0xf73b, 0xf5c6, 0xf73b, 0xf55c, 0xf6d7, 0xf55c, +0xf6d7, 0xf55c, 0xf6d7, 0xf577, 0xf6fa, 0xf577, 0xf6fa, 0xf63c, 0xf7c5, 0xf63c, 0xf7c5, +0xf685, 0xf817, 0xf685, 0xf817, 0xf658, 0xf7f2, 0xf658, 0xf7f2, 0xf568, 0xf70b, 0xf568, +0xf70b, 0xf426, 0xf5d3, 0xf426, 0xf5d3, 0xf426, 0xf5d3, 0xf369, 0xf521, 0xf369, 0xf521, +0xf2f0, 0xf4b3, 0xf2f0, 0xf4b3, 0xf1c1, 0xf38f, 0xf1c1, 0xf38f, 0xf14a, 0xf324, 0xf14a, +0xf324, 0xf131, 0xf317, 0xf131, 0xf317, 0xf082, 0xf274, 0xf082, 0xf274, 0xf082, 0xf274, +0xf148, 0xf345, 0xf148, 0xf345, 0xf193, 0xf39c, 0xf193, 0xf39c, 0xf113, 0xf326, 0xf113, +0xf326, 0xf20b, 0xf428, 0xf20b, 0xf428, 0xf27f, 0xf4a6, 0xf27f, 0xf4a6, 0xf27f, 0xf4a6, +0xf204, 0xf435, 0xf204, 0xf435, 0xf1c5, 0xf3fe, 0xf1c5, 0xf3fe, 0xf101, 0xf343, 0xf101, +0xf343, 0xf016, 0xf261, 0xf016, 0xf261, 0xf012, 0xf266, 0xf012, 0xf266, 0xf065, 0xf2c3, +0xf065, 0xf2c3, 0xf065, 0xf2c3, 0xf09c, 0xf304, 0xf09c, 0xf304, 0xf0e6, 0xf359, 0xf0e6, +0xf359, 0xf191, 0xf411, 0xf191, 0xf411, 0xf1d7, 0xf465, 0xf1d7, 0xf465, 0xf0a8, 0xf346, +0xf0a8, 0xf346, 0xef51, 0xf201, 0xef51, 0xf201, 0xef51, 0xf201, 0xee0d, 0xf0d1, 0xee0d, +0xf0d1, 0xec7e, 0xef56, 0xec7e, 0xef56, 0xeb6e, 0xee5c, 0xeb6e, 0xee5c, 0xeaea, 0xedee, +0xeaea, 0xedee, 0xea71, 0xed8c, 0xea71, 0xed8c, 0xea71, 0xed8c, 0xea2d, 0xed5f, 0xea2d, +0xed5f, 0xeb14, 0xee5d, 0xeb14, 0xee5d, 0xeb58, 0xeeb6, 0xeb58, 0xeeb6, 0xea96, 0xee07, +0xea96, 0xee07, 0xea2b, 0xedac, 0xea2b, 0xedac, 0xe92d, 0xecbc, 0xe92d, 0xecbc, 0xe92d, +0xecbc, 0xe898, 0xec31, 0xe898, 0xec31, 0xe7f6, 0xeb95, 0xe7f6, 0xeb95, 0xe6f5, 0xea96, +0xe6f5, 0xea96, 0xe749, 0xeae6, 0xe749, 0xeae6, 0xe7e5, 0xeb7b, 0xe7e5, 0xeb7b, 0xe7cb, +0xeb56, 0xe7cb, 0xeb56, 0xe7cb, 0xeb56, 0xe776, 0xeaf0, 0xe776, 0xeaf0, 0xe6ec, 0xea52, +0xe6ec, 0xea52, 0xe607, 0xe956, 0xe607, 0xe956, 0xe64b, 0xe980, 0xe64b, 0xe980, 0xe6fc, +0xea14, 0xe6fc, 0xea14, 0xe6fc, 0xea14, 0xe786, 0xea80, 0xe786, 0xea80, 0xe95d, 0xec38, +0xe95d, 0xec38, 0xea11, 0xeccc, 0xea11, 0xeccc, 0xea6f, 0xed0b, 0xea6f, 0xed0b, 0xeb63, +0xede0, 0xeb63, 0xede0, 0xeb55, 0xedb6, 0xeb55, 0xedb6, 0xeb55, 0xedb6, 0xebdb, 0xee20, +0xebdb, 0xee20, 0xebf7, 0xee24, 0xebf7, 0xee24, 0xebb0, 0xedc6, 0xebb0, 0xedc6, 0xec6f, +0xee71, 0xec6f, 0xee71, 0xed64, 0xef54, 0xed64, 0xef54, 0xede2, 0xefc2, 0xede2, 0xefc2, +0xede2, 0xefc2, 0xedb0, 0xef83, 0xedb0, 0xef83, 0xed46, 0xef0c, 0xed46, 0xef0c, 0xed39, +0xeef4, 0xed39, 0xeef4, 0xee05, 0xefb6, 0xee05, 0xefb6, 0xedf7, 0xef9f, 0xedf7, 0xef9f, +0xedf7, 0xef9f, 0xedbc, 0xef5d, 0xedbc, 0xef5d, 0xee54, 0xefec, 0xee54, 0xefec, 0xed96, +0xef27, 0xed96, 0xef27, 0xedcd, 0xef56, 0xedcd, 0xef56, 0xeeea, 0xf06c, 0xeeea, 0xf06c, +0xeed8, 0xf052, 0xeed8, 0xf052, 0xeed8, 0xf052, 0xef6a, 0xf0de, 0xef6a, 0xf0de, 0xf04a, +0xf1b8, 0xf04a, 0xf1b8, 0xefff, 0xf169, 0xefff, 0xf169, 0xeeef, 0xf055, 0xeeef, 0xf055, +0xee5d, 0xefc1, 0xee5d, 0xefc1, 0xedff, 0xef63, 0xedff, 0xef63, 0xedff, 0xef63, 0xed94, +0xeefb, 0xed94, 0xeefb, 0xed6d, 0xeed9, 0xed6d, 0xeed9, 0xed10, 0xee83, 0xed10, 0xee83, +0xed03, 0xee7f, 0xed03, 0xee7f, 0xeda7, 0xef2f, 0xeda7, 0xef2f, 0xeda7, 0xef2f, 0xeed6, +0xf06a, 0xeed6, 0xf06a, 0xef34, 0xf0d6, 0xef34, 0xf0d6, 0xeeee, 0xf09e, 0xeeee, 0xf09e, +0xef4e, 0xf10d, 0xef4e, 0xf10d, 0xef95, 0xf160, 0xef95, 0xf160, 0xf031, 0xf206, 0xf031, +0xf206, 0xf031, 0xf206, 0xf0fd, 0xf2db, 0xf0fd, 0xf2db, 0xf151, 0xf332, 0xf151, 0xf332, +0xf189, 0xf368, 0xf189, 0xf368, 0xf20b, 0xf3e3, 0xf20b, 0xf3e3, 0xf326, 0xf4f0, 0xf326, +0xf4f0, 0xf499, 0xf64f, 0xf499, 0xf64f, 0xf499, 0xf64f, 0xf5f0, 0xf789, 0xf5f0, 0xf789, +0xf675, 0xf7eb, 0xf675, 0xf7eb, 0xf806, 0xf950, 0xf806, 0xf950, 0xfa91, 0xfba9, 0xfa91, +0xfba9, 0xfc7c, 0xfd5b, 0xfc7c, 0xfd5b, 0xfc7c, 0xfd5b, 0xff82, 0x23, 0xff82, 0x23, +0x1a8, 0x205, 0x1a8, 0x205, 0x224, 0x23a, 0x224, 0x23a, 0x3e7, 0x3b3, 0x3e7, +0x3b3, 0x5e0, 0x562, 0x5e0, 0x562, 0x6e6, 0x61d, 0x6e6, 0x61d, 0x6e6, 0x61d, +0x7f1, 0x6de, 0x7f1, 0x6de, 0x8fb, 0x7a2, 0x8fb, 0x7a2, 0xa05, 0x86a, 0xa05, +0x86a, 0xc10, 0xa38, 0xc10, 0xa38, 0xe11, 0xc02, 0xe11, 0xc02, 0xe11, 0xc02, +0xfbf, 0xd81, 0xfbf, 0xd81, 0x11b3, 0xf4c, 0x11b3, 0xf4c, 0x127c, 0xff4, 0x127c, +0xff4, 0x1335, 0x1094, 0x1335, 0x1094, 0x13fc, 0x114a, 0x13fc, 0x114a, 0x141d, 0x1162, +0x141d, 0x1162, 0x141d, 0x1162, 0x1508, 0x124a, 0x1508, 0x124a, 0x156f, 0x12b4, 0x156f, +0x12b4, 0x1558, 0x12a6, 0x1558, 0x12a6, 0x1684, 0x13df, 0x1684, 0x13df, 0x178c, 0x14f8, +0x178c, 0x14f8, 0x17c4, 0x1543, 0x17c4, 0x1543, 0x17c4, 0x1543, 0x1831, 0x15c5, 0x1831, +0x15c5, 0x1750, 0x14fb, 0x1750, 0x14fb, 0x153a, 0x12fc, 0x153a, 0x12fc, 0x146a, 0x1242, +0x146a, 0x1242, 0x1302, 0x10ef, 0x1302, 0x10ef, 0x1302, 0x10ef, 0x10f4, 0xef4, 0x10f4, +0xef4, 0xfee, 0xe01, 0xfee, 0xe01, 0xdef, 0xc12, 0xdef, 0xc12, 0xccf, 0xb01, +0xccf, 0xb01, 0xe22, 0xc60, 0xe22, 0xc60, 0xeda, 0xd24, 0xeda, 0xd24, 0xeda, +0xd24, 0xeae, 0xd01, 0xeae, 0xd01, 0xe90, 0xcec, 0xe90, 0xcec, 0xe56, 0xcba, +0xe56, 0xcba, 0xe0c, 0xc78, 0xe0c, 0xc78, 0xdbc, 0xc2f, 0xdbc, 0xc2f, 0xd71, +0xbec, 0xd71, 0xbec, 0xd71, 0xbec, 0xd06, 0xb88, 0xd06, 0xb88, 0xcda, 0xb64, +0xcda, 0xb64, 0xcde, 0xb70, 0xcde, 0xb70, 0xca1, 0xb3c, 0xca1, 0xb3c, 0xc4c, +0xaf2, 0xc4c, 0xaf2, 0xc4c, 0xaf2, 0xb69, 0xa19, 0xb69, 0xa19, 0xa41, 0x8fc, +0xa41, 0x8fc, 0x985, 0x84b, 0x985, 0x84b, 0x964, 0x838, 0x964, 0x838, 0x9fc, +0x8dc, 0x9fc, 0x8dc, 0xa47, 0x935, 0xa47, 0x935, 0xa47, 0x935, 0x988, 0x885, +0x988, 0x885, 0x85c, 0x768, 0x85c, 0x768, 0x81e, 0x73a, 0x81e, 0x73a, 0x84d, +0x77a, 0x84d, 0x77a, 0x7c1, 0x700, 0x7c1, 0x700, 0x73c, 0x68f, 0x73c, 0x68f, +0x73c, 0x68f, 0x691, 0x5f8, 0x691, 0x5f8, 0x5e7, 0x565, 0x5e7, 0x565, 0x5ad, +0x544, 0x5ad, 0x544, 0x598, 0x549, 0x598, 0x549, 0x518, 0x4e5, 0x518, 0x4e5, +0x518, 0x4e5, 0x3ff, 0x3ea, 0x3ff, 0x3ea, 0x3f9, 0x402, 0x3f9, 0x402, 0x409, +0x432, 0x409, 0x432, 0x328, 0x373, 0x328, 0x373, 0x259, 0x2c4, 0x259, 0x2c4, +0x14b, 0x1d8, 0x14b, 0x1d8, 0x14b, 0x1d8, 0x70, 0x11d, 0x70, 0x11d, 0xffff, +0xcc, 0xffff, 0xcc, 0x4a, 0x134, 0x4a, 0x134, 0xbd, 0x1c2, 0xbd, 0x1c2, +0xa5, 0x1c1, 0xa5, 0x1c1, 0x9d, 0x1ce, 0x9d, 0x1ce, 0x9d, 0x1ce, 0xffce, +0x10f, 0xffce, 0x10f, 0xfe91, 0xffde, 0xfe91, 0xffde, 0xfdd7, 0xff2b, 0xfdd7, 0xff2b, +0xfdc3, 0xff1a, 0xfdc3, 0xff1a, 0xfdb9, 0xff0e, 0xfdb9, 0xff0e, 0xfdb9, 0xff0e, 0xfd7e, +0xfecc, 0xfd7e, 0xfecc, 0xfd92, 0xfed5, 0xfd92, 0xfed5, 0xfd51, 0xfe84, 0xfd51, 0xfe84, +0xfdcb, 0xfeeb, 0xfdcb, 0xfeeb, 0xfe7b, 0xff85, 0xfe7b, 0xff85, 0xfe9c, 0xff8e, 0xfe9c, +0xff8e, 0xfe9c, 0xff8e, 0xff7f, 0x55, 0xff7f, 0x55, 0x23, 0xde, 0x23, 0xde, +0x73, 0x110, 0x73, 0x110, 0xa5, 0x125, 0xa5, 0x125, 0x97, 0xfa, 0x97, +0xfa, 0x7c, 0xc3, 0x7c, 0xc3, 0x7c, 0xc3, 0x66, 0x90, 0x66, 0x90, +0xa9, 0xb8, 0xa9, 0xb8, 0xcf, 0xc3, 0xcf, 0xc3, 0x159, 0x133, 0x159, +0x133, 0x1a5, 0x165, 0x1a5, 0x165, 0x1a5, 0x165, 0x154, 0xfa, 0x154, 0xfa, +0x20c, 0x198, 0x20c, 0x198, 0x3ee, 0x35f, 0x3ee, 0x35f, 0x551, 0x4a7, 0x551, +0x4a7, 0x5b3, 0x4eb, 0x5b3, 0x4eb, 0x6a6, 0x5c0, 0x6a6, 0x5c0, 0x6a6, 0x5c0, +0x71d, 0x615, 0x71d, 0x615, 0x739, 0x60f, 0x739, 0x60f, 0x787, 0x637, 0x787, +0x637, 0x655, 0x4dd, 0x655, 0x4dd, 0x5df, 0x43d, 0x5df, 0x43d, 0x669, 0x49b, +0x669, 0x49b, 0x669, 0x49b, 0x703, 0x508, 0x703, 0x508, 0x818, 0x5ee, 0x818, +0x5ee, 0x88c, 0x634, 0x88c, 0x634, 0x910, 0x68a, 0x910, 0x68a, 0xa5d, 0x7a9, +0xa5d, 0x7a9, 0xa5d, 0x7a9, 0xc58, 0x979, 0xc58, 0x979, 0xdd8, 0xad1, 0xdd8, +0xad1, 0xea9, 0xb7e, 0xea9, 0xb7e, 0xf65, 0xc19, 0xf65, 0xc19, 0xfee, 0xc86, +0xfee, 0xc86, 0x10cd, 0xd4e, 0x10cd, 0xd4e, 0x10cd, 0xd4e, 0x1173, 0xde3, 0x1173, +0xde3, 0x1263, 0xec8, 0x1263, 0xec8, 0x130b, 0xf6a, 0x130b, 0xf6a, 0x1383, 0xfe2, +0x1383, 0xfe2, 0x14d1, 0x1135, 0x14d1, 0x1135, 0x14a5, 0x1112, 0x14a5, 0x1112, 0x14a5, +0x1112, 0x1380, 0xffb, 0x1380, 0xffb, 0x1277, 0xf04, 0x1277, 0xf04, 0x11c6, 0xe66, +0x11c6, 0xe66, 0x1172, 0xe28, 0x1172, 0xe28, 0x10ec, 0xdb9, 0x10ec, 0xdb9, 0x10ec, +0xdb9, 0x112f, 0xe13, 0x112f, 0xe13, 0x117f, 0xe7a, 0x117f, 0xe7a, 0x126a, 0xf7b, +0x126a, 0xf7b, 0x13b5, 0x10da, 0x13b5, 0x10da, 0x1402, 0x113a, 0x1402, 0x113a, 0x13fd, +0x1145, 0x13fd, 0x1145, 0x13fd, 0x1145, 0x137b, 0x10d1, 0x137b, 0x10d1, 0x1303, 0x1065, +0x1303, 0x1065, 0x1200, 0xf6b, 0x1200, 0xf6b, 0x10d8, 0xe4b, 0x10d8, 0xe4b, 0x1049, +0xdc2, 0x1049, 0xdc2, 0xf6a, 0xce8, 0xf6a, 0xce8, 0xf6a, 0xce8, 0xf33, 0xcb6, +0xf33, 0xcb6, 0xf52, 0xcd9, 0xf52, 0xcd9, 0xf96, 0xd23, 0xf96, 0xd23, 0xfaf, +0xd43, 0xfaf, 0xd43, 0xf4f, 0xceb, 0xf4f, 0xceb, 0xf4f, 0xceb, 0xfc7, 0xd6e, +0xfc7, 0xd6e, 0x1046, 0xdf9, 0x1046, 0xdf9, 0x1042, 0xe05, 0x1042, 0xe05, 0xfd6, +0xdab, 0xfd6, 0xdab, 0xf17, 0xd02, 0xf17, 0xd02, 0xe42, 0xc44, 0xe42, 0xc44, +0xe42, 0xc44, 0xdbc, 0xbd9, 0xdbc, 0xbd9, 0xdf2, 0xc2c, 0xdf2, 0xc2c, 0xd3d, +0xb96, 0xd3d, 0xb96, 0xc6d, 0xae6, 0xc6d, 0xae6, 0xd05, 0xba1, 0xd05, 0xba1, +0xd05, 0xba1, 0xd23, 0xbe1, 0xd23, 0xbe1, 0xc93, 0xb74, 0xc93, 0xb74, 0xc69, +0xb6d, 0xc69, 0xb6d, 0xbaf, 0xad5, 0xbaf, 0xad5, 0xa51, 0x999, 0xa51, 0x999, +0xa0f, 0x979, 0xa0f, 0x979, 0xa0f, 0x979, 0xa05, 0x98f, 0xa05, 0x98f, 0x8da, +0x883, 0x8da, 0x883, 0x83b, 0x801, 0x83b, 0x801, 0x86e, 0x851, 0x86e, 0x851, +0x852, 0x851, 0x852, 0x851, 0x804, 0x81e, 0x804, 0x81e, 0x804, 0x81e, 0x7fa, +0x82d, 0x7fa, 0x82d, 0x888, 0x8d4, 0x888, 0x8d4, 0x94b, 0x9af, 0x94b, 0x9af, +0x949, 0x9c5, 0x949, 0x9c5, 0x856, 0x8e9, 0x856, 0x8e9, 0x856, 0x8e9, 0x753, +0x7fd, 0x753, 0x7fd, 0x711, 0x7d1, 0x711, 0x7d1, 0x6ed, 0x7c2, 0x6ed, 0x7c2, +0x632, 0x71c, 0x632, 0x71c, 0x522, 0x621, 0x522, 0x621, 0x3bd, 0x4d0, 0x3bd, +0x4d0, 0x3bd, 0x4d0, 0x2fc, 0x422, 0x2fc, 0x422, 0x342, 0x47a, 0x342, 0x47a, +0x2f6, 0x43f, 0x2f6, 0x43f, 0x1e3, 0x33c, 0x1e3, 0x33c, 0xa3, 0x20a, 0xa3, +0x20a, 0xffc7, 0x13c, 0xffc7, 0x13c, 0xffc7, 0x13c, 0xff87, 0x108, 0xff87, 0x108, +0xfe9b, 0x27, 0xfe9b, 0x27, 0xfd13, 0xfea9, 0xfd13, 0xfea9, 0xfbdb, 0xfd7a, 0xfbdb, +0xfd7a, 0xfad2, 0xfc7a, 0xfad2, 0xfc7a, 0xfad2, 0xfc7a, 0xfac9, 0xfc79, 0xfac9, 0xfc79, +0xfb94, 0xfd4c, 0xfb94, 0xfd4c, 0xfb39, 0xfcf9, 0xfb39, 0xfcf9, 0xfa65, 0xfc2d, 0xfa65, +0xfc2d, 0xfa71, 0xfc43, 0xfa71, 0xfc43, 0xfaac, 0xfc87, 0xfaac, 0xfc87, 0xfaac, 0xfc87, +0xfb1d, 0xfd02, 0xfb1d, 0xfd02, 0xfb22, 0xfd13, 0xfb22, 0xfd13, 0xfa05, 0xfc02, 0xfa05, +0xfc02, 0xf94f, 0xfb59, 0xf94f, 0xfb59, 0xf901, 0xfb19, 0xf901, 0xfb19, 0xf879, 0xfa9f, +0xf879, 0xfa9f, 0xf879, 0xfa9f, 0xf7f6, 0xfa2a, 0xf7f6, 0xfa2a, 0xf663, 0xf8a5, 0xf663, +0xf8a5, 0xf4f7, 0xf747, 0xf4f7, 0xf747, 0xf4ff, 0xf75b, 0xf4ff, 0xf75b, 0xf443, 0xf6aa, +0xf443, 0xf6aa, 0xf443, 0xf6aa, 0xf394, 0xf604, 0xf394, 0xf604, 0xf3f3, 0xf66a, 0xf3f3, +0xf66a, 0xf379, 0xf5f5, 0xf379, 0xf5f5, 0xf2f7, 0xf576, 0xf2f7, 0xf576, 0xf365, 0xf5e4, +0xf365, 0xf5e4, 0xf322, 0xf59f, 0xf322, 0xf59f, 0xf322, 0xf59f, 0xf1a8, 0xf420, 0xf1a8, +0xf420, 0xf0ec, 0xf35e, 0xf0ec, 0xf35e, 0xf0c6, 0xf331, 0xf0c6, 0xf331, 0xefb3, 0xf215, +0xefb3, 0xf215, 0xef6b, 0xf1c4, 0xef6b, 0xf1c4, 0xefd7, 0xf227, 0xefd7, 0xf227, 0xefd7, +0xf227, 0xefa1, 0xf1e9, 0xefa1, 0xf1e9, 0xefa1, 0xf1e3, 0xefa1, 0xf1e3, 0xef71, 0xf1ad, +0xef71, 0xf1ad, 0xee06, 0xf03f, 0xee06, 0xf03f, 0xec10, 0xee4a, 0xec10, 0xee4a, 0xec10, +0xee4a, 0xeb5e, 0xed9b, 0xeb5e, 0xed9b, 0xeb02, 0xed46, 0xeb02, 0xed46, 0xe995, 0xebe4, +0xe995, 0xebe4, 0xe7fe, 0xea59, 0xe7fe, 0xea59, 0xe6b4, 0xe920, 0xe6b4, 0xe920, 0xe670, +0xe8ef, 0xe670, 0xe8ef, 0xe670, 0xe8ef, 0xe6c5, 0xe959, 0xe6c5, 0xe959, 0xe6ff, 0xe9aa, +0xe6ff, 0xe9aa, 0xe6c5, 0xe988, 0xe6c5, 0xe988, 0xe5aa, 0xe884, 0xe5aa, 0xe884, 0xe4b4, +0xe7a6, 0xe4b4, 0xe7a6, 0xe3c9, 0xe6d0, 0xe3c9, 0xe6d0, 0xe3c9, 0xe6d0, 0xe2e6, 0xe600, +0xe2e6, 0xe600, 0xe18f, 0xe4ba, 0xe18f, 0xe4ba, 0xe028, 0xe360, 0xe028, 0xe360, 0xe058, +0xe39a, 0xe058, 0xe39a, 0xe0c9, 0xe40f, 0xe0c9, 0xe40f, 0xe0c9, 0xe40f, 0xe1a3, 0xe4ea, +0xe1a3, 0xe4ea, 0xe241, 0xe584, 0xe241, 0xe584, 0xe1ea, 0xe524, 0xe1ea, 0xe524, 0xe243, +0xe571, 0xe243, 0xe571, 0xe262, 0xe57f, 0xe262, 0xe57f, 0xe302, 0xe60b, 0xe302, 0xe60b, +0xe302, 0xe60b, 0xe3e8, 0xe6db, 0xe3e8, 0xe6db, 0xe383, 0xe65d, 0xe383, 0xe65d, 0xe37b, +0xe63b, 0xe37b, 0xe63b, 0xe42c, 0xe6d0, 0xe42c, 0xe6d0, 0xe4d6, 0xe75e, 0xe4d6, 0xe75e, +0xe5a9, 0xe816, 0xe5a9, 0xe816, 0xe5a9, 0xe816, 0xe697, 0xe8e9, 0xe697, 0xe8e9, 0xe6d3, +0xe90b, 0xe6d3, 0xe90b, 0xe740, 0xe960, 0xe740, 0xe960, 0xe777, 0xe980, 0xe777, 0xe980, +0xe68b, 0xe87f, 0xe68b, 0xe87f, 0xe68b, 0xe87f, 0xe6ea, 0xe8cb, 0xe6ea, 0xe8cb, 0xe6f2, +0xe8c1, 0xe6f2, 0xe8c1, 0xe6a8, 0xe866, 0xe6a8, 0xe866, 0xe847, 0xe9f6, 0xe847, 0xe9f6, +0xe8ae, 0xea4f, 0xe8ae, 0xea4f, 0xe8ad, 0xea42, 0xe8ad, 0xea42, 0xe8ad, 0xea42, 0xe9f2, +0xeb7b, 0xe9f2, 0xeb7b, 0xea31, 0xebae, 0xea31, 0xebae, 0xe9d8, 0xeb4b, 0xe9d8, 0xeb4b, +0xea64, 0xebcc, 0xea64, 0xebcc, 0xeb14, 0xec72, 0xeb14, 0xec72, 0xeba8, 0xecfd, 0xeba8, +0xecfd, 0xeba8, 0xecfd, 0xecc7, 0xee13, 0xecc7, 0xee13, 0xecfc, 0xee41, 0xecfc, 0xee41, +0xebf4, 0xed33, 0xebf4, 0xed33, 0xeb81, 0xecbb, 0xeb81, 0xecbb, 0xec66, 0xed9e, 0xec66, +0xed9e, 0xec66, 0xed9e, 0xed87, 0xeebf, 0xed87, 0xeebf, 0xed7a, 0xeeb4, 0xed7a, 0xeeb4, +0xed6e, 0xeead, 0xed6e, 0xeead, 0xedec, 0xef32, 0xedec, 0xef32, 0xee63, 0xefb3, 0xee63, +0xefb3, 0xef79, 0xf0d5, 0xef79, 0xf0d5, 0xef79, 0xf0d5, 0xf088, 0xf1f2, 0xf088, 0xf1f2, +0xf096, 0xf20f, 0xf096, 0xf20f, 0xf0f0, 0xf278, 0xf0f0, 0xf278, 0xf25a, 0xf3f1, 0xf25a, +0xf3f1, 0xf30f, 0xf4b4, 0xf30f, 0xf4b4, 0xf2e2, 0xf492, 0xf2e2, 0xf492, 0xf2e2, 0xf492, +0xf275, 0xf42e, 0xf275, 0xf42e, 0xf21d, 0xf3da, 0xf21d, 0xf3da, 0xf341, 0xf4fc, 0xf341, +0xf4fc, 0xf542, 0xf6f5, 0xf542, 0xf6f5, 0xf720, 0xf8c5, 0xf720, 0xf8c5, 0xf720, 0xf8c5, +0xf8bd, 0xfa4c, 0xf8bd, 0xfa4c, 0xf9d7, 0xfb48, 0xf9d7, 0xfb48, 0xfb33, 0xfc7d, 0xfb33, +0xfc7d, 0xfda9, 0xfec6, 0xfda9, 0xfec6, 0xffcd, 0xb4, 0xffcd, 0xb4, 0xa2, 0x14c, +0xa2, 0x14c, 0xa2, 0x14c, 0x24a, 0x2b0, 0x24a, 0x2b0, 0x467, 0x485, 0x467, +0x485, 0x64e, 0x620, 0x64e, 0x620, 0x82c, 0x7b0, 0x82c, 0x7b0, 0x8a0, 0x7d6, +0x8a0, 0x7d6, 0x8a0, 0x7d6, 0x961, 0x849, 0x961, 0x849, 0xadf, 0x97b, 0xadf, +0x97b, 0xc8e, 0xae1, 0xc8e, 0xae1, 0xe3c, 0xc4d, 0xe3c, 0xc4d, 0xe79, 0xc4e, +0xe79, 0xc4e, 0xf70, 0xd11, 0xf70, 0xd11, 0xf70, 0xd11, 0x118d, 0xf02, 0x118d, +0xf02, 0x1340, 0x1092, 0x1340, 0x1092, 0x1510, 0x1248, 0x1510, 0x1248, 0x1672, 0x1399, +0x1672, 0x1399, 0x1709, 0x1429, 0x1709, 0x1429, 0x17ea, 0x150b, 0x17ea, 0x150b, 0x17ea, +0x150b, 0x1902, 0x162b, 0x1902, 0x162b, 0x1909, 0x1640, 0x1909, 0x1640, 0x194f, 0x169b, +0x194f, 0x169b, 0x19ef, 0x1752, 0x19ef, 0x1752, 0x1a0c, 0x1789, 0x1a0c, 0x1789, 0x1a0c, +0x1789, 0x1b25, 0x18bf, 0x1b25, 0x18bf, 0x1ae5, 0x189a, 0x1ae5, 0x189a, 0x1891, 0x1661, +0x1891, 0x1661, 0x16ba, 0x14a2, 0x16ba, 0x14a2, 0x14c3, 0x12c0, 0x14c3, 0x12c0, 0x1264, +0x1073, 0x1264, 0x1073, 0x1264, 0x1073, 0xff7, 0xe12, 0xff7, 0xe12, 0xe20, 0xc43, +0xe20, 0xc43, 0xd5c, 0xb83, 0xd5c, 0xb83, 0xd10, 0xb37, 0xd10, 0xb37, 0xd74, +0xb96, 0xd74, 0xb96, 0xdb4, 0xbce, 0xdb4, 0xbce, 0xdb4, 0xbce, 0xd30, 0xb40, +0xd30, 0xb40, 0xd55, 0xb58, 0xd55, 0xb58, 0xdab, 0xba1, 0xdab, 0xba1, 0xcc2, +0xaab, 0xcc2, 0xaab, 0xbde, 0x9b9, 0xbde, 0x9b9, 0xbde, 0x9b9, 0xb86, 0x957, +0xb86, 0x957, 0xb0e, 0x8d6, 0xb0e, 0x8d6, 0xb36, 0x8f9, 0xb36, 0x8f9, 0xb7b, +0x93b, 0xb7b, 0x93b, 0xace, 0x88f, 0xace, 0x88f, 0xa64, 0x82b, 0xa64, 0x82b, +0xa64, 0x82b, 0xa5b, 0x82a, 0xa5b, 0x82a, 0x9c7, 0x7a3, 0x9c7, 0x7a3, 0x949, +0x736, 0x949, 0x736, 0x805, 0x605, 0x805, 0x605, 0x689, 0x49f, 0x689, 0x49f, +0x698, 0x4c6, 0x698, 0x4c6, 0x698, 0x4c6, 0x635, 0x47d, 0x635, 0x47d, 0x56f, +0x3d2, 0x56f, 0x3d2, 0x552, 0x3d1, 0x552, 0x3d1, 0x4d8, 0x373, 0x4d8, 0x373, +0x46c, 0x323, 0x46c, 0x323, 0x46c, 0x323, 0x4bb, 0x38f, 0x4bb, 0x38f, 0x4cd, +0x3bd, 0x4cd, 0x3bd, 0x3b6, 0x2c2, 0x3b6, 0x2c2, 0x324, 0x24b, 0x324, 0x24b, +0x2fb, 0x23d, 0x2fb, 0x23d, 0x2ac, 0x209, 0x2ac, 0x209, 0x2ac, 0x209, 0x29d, +0x215, 0x29d, 0x215, 0x152, 0xe5, 0x152, 0xe5, 0x8a, 0x38, 0x8a, 0x38, +0x59, 0x23, 0x59, 0x23, 0xffb8, 0xff9e, 0xffb8, 0xff9e, 0xffb6, 0xffb9, 0xffb6, +0xffb9, 0xffb6, 0xffb9, 0xfe93, 0xfeb3, 0xfe93, 0xfeb3, 0xfd88, 0xfdc6, 0xfd88, 0xfdc6, +0xfe16, 0xfe71, 0xfe16, 0xfe71, 0xfe67, 0xfede, 0xfe67, 0xfede, 0xfe1d, 0xfeb0, 0xfe1d, +0xfeb0, 0xfe1d, 0xfeb0, 0xfde1, 0xfe8e, 0xfde1, 0xfe8e, 0xfd54, 0xfe19, 0xfd54, 0xfe19, +0xfcbe, 0xfd99, 0xfcbe, 0xfd99, 0xfd4b, 0xfe38, 0xfd4b, 0xfe38, 0xfcb9, 0xfdb5, 0xfcb9, +0xfdb5, 0xfb58, 0xfc60, 0xfb58, 0xfc60, 0xfb58, 0xfc60, 0xfb73, 0xfc83, 0xfb73, 0xfc83, +0xfbd2, 0xfce5, 0xfbd2, 0xfce5, 0xfcd6, 0xfde7, 0xfcd6, 0xfde7, 0xfdd1, 0xfedc, 0xfdd1, +0xfedc, 0xfdad, 0xfeae, 0xfdad, 0xfeae, 0xfdbf, 0xfeb2, 0xfdbf, 0xfeb2, 0xfdbf, 0xfeb2, +0xfeb2, 0xff92, 0xfeb2, 0xff92, 0xff47, 0x11, 0xff47, 0x11, 0xff09, 0xffba, 0xff09, +0xffba, 0xff68, 0xfffe, 0xff68, 0xfffe, 0xff5e, 0xffd6, 0xff5e, 0xffd6, 0xff5e, 0xffd6, +0xff66, 0xffbf, 0xff66, 0xffbf, 0x10e, 0x148, 0x10e, 0x148, 0x27c, 0x296, 0x27c, +0x296, 0x2fa, 0x2f4, 0x2fa, 0x2f4, 0x38c, 0x365, 0x38c, 0x365, 0x452, 0x40b, +0x452, 0x40b, 0x452, 0x40b, 0x53b, 0x4d5, 0x53b, 0x4d5, 0x6eb, 0x666, 0x6eb, +0x666, 0x7e1, 0x73c, 0x7e1, 0x73c, 0x82e, 0x76a, 0x82e, 0x76a, 0x97b, 0x898, +0x97b, 0x898, 0xa26, 0x922, 0xa26, 0x922, 0xa26, 0x922, 0xaac, 0x988, 0xaac, +0x988, 0xb42, 0x9fb, 0xb42, 0x9fb, 0xb00, 0x995, 0xb00, 0x995, 0xac9, 0x938, +0xac9, 0x938, 0xacc, 0x913, 0xacc, 0x913, 0xacc, 0x913, 0xac6, 0x8e3, 0xac6, +0x8e3, 0xad0, 0x8c1, 0xad0, 0x8c1, 0xc22, 0x9e4, 0xc22, 0x9e4, 0xdbc, 0xb4f, +0xdbc, 0xb4f, 0xf68, 0xcca, 0xf68, 0xcca, 0x11d5, 0xf06, 0x11d5, 0xf06, 0x11d5, +0xf06, 0x138e, 0x108f, 0x138e, 0x108f, 0x14ef, 0x11c0, 0x14ef, 0x11c0, 0x15a0, 0x1243, +0x15a0, 0x1243, 0x166c, 0x12e3, 0x166c, 0x12e3, 0x1792, 0x13e0, 0x1792, 0x13e0, 0x17c9, +0x13f4, 0x17c9, 0x13f4, 0x17c9, 0x13f4, 0x188d, 0x1499, 0x188d, 0x1499, 0x19b9, 0x15ab, +0x19b9, 0x15ab, 0x1a63, 0x1641, 0x1a63, 0x1641, 0x1a15, 0x15e6, 0x1a15, 0x15e6, 0x19b0, +0x157a, 0x19b0, 0x157a, 0x19b0, 0x157a, 0x199e, 0x1568, 0x199e, 0x1568, 0x1942, 0x1511, +0x1942, 0x1511, 0x1991, 0x156b, 0x1991, 0x156b, 0x18de, 0x14c7, 0x18de, 0x14c7, 0x17aa, +0x13a8, 0x17aa, 0x13a8, 0x1796, 0x13ac, 0x1796, 0x13ac, 0x1796, 0x13ac, 0x1789, 0x13bb, +0x1789, 0x13bb, 0x17dc, 0x142b, 0x17dc, 0x142b, 0x1866, 0x14d4, 0x1866, 0x14d4, 0x18f2, +0x1580, 0x18f2, 0x1580, 0x1927, 0x15d5, 0x1927, 0x15d5, 0x18bf, 0x158c, 0x18bf, 0x158c, +0x18bf, 0x158c, 0x17ad, 0x1498, 0x17ad, 0x1498, 0x1625, 0x132c, 0x1625, 0x132c, 0x1516, +0x1239, 0x1516, 0x1239, 0x1429, 0x1166, 0x1429, 0x1166, 0x143b, 0x1190, 0x143b, 0x1190, +0x143b, 0x1190, 0x1507, 0x1273, 0x1507, 0x1273, 0x1524, 0x12a6, 0x1524, 0x12a6, 0x14db, +0x1273, 0x14db, 0x1273, 0x1409, 0x11b7, 0x1409, 0x11b7, 0x12cb, 0x1090, 0x12cb, 0x1090, +0x1167, 0xf43, 0x1167, 0xf43, 0x1167, 0xf43, 0x1098, 0xe8e, 0x1098, 0xe8e, 0x101b, +0xe2e, 0x101b, 0xe2e, 0xf3e, 0xd6f, 0xf3e, 0xd6f, 0xef8, 0xd4b, 0xef8, 0xd4b, +0xeb4, 0xd2c, 0xeb4, 0xd2c, 0xeb4, 0xd2c, 0xd94, 0xc34, 0xd94, 0xc34, 0xcf5, +0xbc0, 0xcf5, 0xbc0, 0xd26, 0xc1e, 0xd26, 0xc1e, 0xc94, 0xbbc, 0xc94, 0xbbc, +0xbf3, 0xb4d, 0xbf3, 0xb4d, 0xb89, 0xb15, 0xb89, 0xb15, 0xb89, 0xb15, 0xa24, +0x9e4, 0xa24, 0x9e4, 0x924, 0x916, 0x924, 0x916, 0x8b3, 0x8d7, 0x8b3, 0x8d7, +0x7e4, 0x839, 0x7e4, 0x839, 0x6f8, 0x77a, 0x6f8, 0x77a, 0x609, 0x6b6, 0x609, +0x6b6, 0x609, 0x6b6, 0x526, 0x5fb, 0x526, 0x5fb, 0x4d1, 0x5c9, 0x4d1, 0x5c9, +0x4a1, 0x5b9, 0x4a1, 0x5b9, 0x32a, 0x45c, 0x32a, 0x45c, 0x1fa, 0x343, 0x1fa, +0x343, 0x1fa, 0x343, 0x212, 0x36e, 0x212, 0x36e, 0x27e, 0x3e8, 0x27e, 0x3e8, +0x2e1, 0x456, 0x2e1, 0x456, 0x242, 0x3bf, 0x242, 0x3bf, 0xea, 0x26b, 0xea, +0x26b, 0xff53, 0xd7, 0xff53, 0xd7, 0xff53, 0xd7, 0xfe83, 0x8, 0xfe83, 0x8, +0xfe75, 0xfff9, 0xfe75, 0xfff9, 0xfda0, 0xff23, 0xfda0, 0xff23, 0xfcb5, 0xfe37, 0xfcb5, +0xfe37, 0xfc39, 0xfdb9, 0xfc39, 0xfdb9, 0xfc52, 0xfdd2, 0xfc52, 0xfdd2, 0xfc52, 0xfdd2, +0xfc26, 0xfda5, 0xfc26, 0xfda5, 0xfb69, 0xfce9, 0xfb69, 0xfce9, 0xfac8, 0xfc49, 0xfac8, +0xfc49, 0xf9c4, 0xfb48, 0xf9c4, 0xfb48, 0xf90e, 0xfa95, 0xf90e, 0xfa95, 0xf90e, 0xfa95, +0xf885, 0xfa10, 0xf885, 0xfa10, 0xf774, 0xf902, 0xf774, 0xf902, 0xf5e9, 0xf77c, 0xf5e9, +0xf77c, 0xf4c6, 0xf65d, 0xf4c6, 0xf65d, 0xf49c, 0xf637, 0xf49c, 0xf637, 0xf4d1, 0xf66f, +0xf4d1, 0xf66f, 0xf4d1, 0xf66f, 0xf5a6, 0xf747, 0xf5a6, 0xf747, 0xf5f2, 0xf795, 0xf5f2, +0xf795, 0xf55d, 0xf702, 0xf55d, 0xf702, 0xf4e0, 0xf685, 0xf4e0, 0xf685, 0xf488, 0xf62c, +0xf488, 0xf62c, 0xf467, 0xf609, 0xf467, 0xf609, 0xf467, 0xf609, 0xf3fe, 0xf59d, 0xf3fe, +0xf59d, 0xf3de, 0xf57a, 0xf3de, 0xf57a, 0xf471, 0xf608, 0xf471, 0xf608, 0xf50e, 0xf6a1, +0xf50e, 0xf6a1, 0xf4f6, 0xf684, 0xf4f6, 0xf684, 0xf4f6, 0xf684, 0xf487, 0xf60f, 0xf487, +0xf60f, 0xf404, 0xf587, 0xf404, 0xf587, 0xf2c6, 0xf443, 0xf2c6, 0xf443, 0xf21e, 0xf395, +0xf21e, 0xf395, 0xf215, 0xf386, 0xf215, 0xf386, 0xf1c1, 0xf32e, 0xf1c1, 0xf32e, 0xf1c1, +0xf32e, 0xf1af, 0xf317, 0xf1af, 0xf317, 0xf279, 0xf3dd, 0xf279, 0xf3dd, 0xf314, 0xf474, +0xf314, 0xf474, 0xf309, 0xf466, 0xf309, 0xf466, 0xf3cd, 0xf528, 0xf3cd, 0xf528, 0xf385, +0xf4df, 0xf385, 0xf4df, 0xf385, 0xf4df, 0xf2d9, 0xf432, 0xf2d9, 0xf432, 0xf30e, 0xf466, +0xf30e, 0xf466, 0xf254, 0xf3ae, 0xf254, 0xf3ae, 0xf237, 0xf392, 0xf237, 0xf392, 0xf2fb, +0xf45a, 0xf2fb, 0xf45a, 0xf2fb, 0xf45a, 0xf3d0, 0xf533, 0xf3d0, 0xf533, 0xf3d4, 0xf53d, +0xf3d4, 0xf53d, 0xf319, 0xf488, 0xf319, 0xf488, 0xf251, 0xf3c9, 0xf251, 0xf3c9, 0xf11e, +0xf29f, 0xf11e, 0xf29f, 0xf020, 0xf1ad, 0xf020, 0xf1ad, 0xf020, 0xf1ad, 0xedc2, 0xef5a, +0xedc2, 0xef5a, 0xebc6, 0xed6b, 0xebc6, 0xed6b, 0xebb0, 0xed64, 0xebb0, 0xed64, 0xeb8a, +0xed4d, 0xeb8a, 0xed4d, 0xec01, 0xedd4, 0xec01, 0xedd4, 0xec54, 0xee36, 0xec54, 0xee36, +0xec54, 0xee36, 0xec66, 0xee58, 0xec66, 0xee58, 0xec11, 0xee12, 0xec11, 0xee12, 0xeb76, +0xed85, 0xeb76, 0xed85, 0xeae8, 0xed05, 0xeae8, 0xed05, 0xe983, 0xebac, 0xe983, 0xebac, +0xe983, 0xebac, 0xe842, 0xea76, 0xe842, 0xea76, 0xe6d8, 0xe913, 0xe6d8, 0xe913, 0xe682, +0xe8c3, 0xe682, 0xe8c3, 0xe6e4, 0xe929, 0xe6e4, 0xe929, 0xe692, 0xe8d9, 0xe692, 0xe8d9, +0xe6f5, 0xe93b, 0xe6f5, 0xe93b, 0xe6f5, 0xe93b, 0xe6f8, 0xe93c, 0xe6f8, 0xe93c, 0xe6f1, +0xe930, 0xe6f1, 0xe930, 0xe75b, 0xe995, 0xe75b, 0xe995, 0xe77d, 0xe9b0, 0xe77d, 0xe9b0, +0xe742, 0xe96c, 0xe742, 0xe96c, 0xe6b4, 0xe8d6, 0xe6b4, 0xe8d6, 0xe6b4, 0xe8d6, 0xe699, +0xe8b3, 0xe699, 0xe8b3, 0xe6c5, 0xe8d7, 0xe6c5, 0xe8d7, 0xe789, 0xe994, 0xe789, 0xe994, +0xe850, 0xea55, 0xe850, 0xea55, 0xe8b9, 0xeaba, 0xe8b9, 0xeaba, 0xe8b9, 0xeaba, 0xe911, +0xeb0e, 0xe911, 0xeb0e, 0xe912, 0xeb0c, 0xe912, 0xeb0c, 0xe9bf, 0xebb8, 0xe9bf, 0xebb8, +0xea61, 0xec5b, 0xea61, 0xec5b, 0xea39, 0xec33, 0xea39, 0xec33, 0xea88, 0xec83, 0xea88, +0xec83, 0xea88, 0xec83, 0xeb72, 0xed6e, 0xeb72, 0xed6e, 0xeb96, 0xed92, 0xeb96, 0xed92, +0xeb8b, 0xed87, 0xeb8b, 0xed87, 0xebee, 0xede8, 0xebee, 0xede8, 0xeb53, 0xed4a, 0xeb53, +0xed4a, 0xeadb, 0xecce, 0xeadb, 0xecce, 0xeadb, 0xecce, 0xeae8, 0xecd4, 0xeae8, 0xecd4, +0xea8b, 0xec6d, 0xea8b, 0xec6d, 0xea5f, 0xec35, 0xea5f, 0xec35, 0xeaff, 0xecc8, 0xeaff, +0xecc8, 0xebd0, 0xed8b, 0xebd0, 0xed8b, 0xebd0, 0xed8b, 0xeb9d, 0xed47, 0xeb9d, 0xed47, +0xebe9, 0xed82, 0xebe9, 0xed82, 0xecb2, 0xee3a, 0xecb2, 0xee3a, 0xecf8, 0xee70, 0xecf8, +0xee70, 0xed77, 0xeee0, 0xed77, 0xeee0, 0xed8b, 0xeee8, 0xed8b, 0xeee8, 0xed8b, 0xeee8, +0xed5c, 0xeeae, 0xed5c, 0xeeae, 0xed85, 0xeed0, 0xed85, 0xeed0, 0xee58, 0xefa0, 0xee58, +0xefa0, 0xef3d, 0xf086, 0xef3d, 0xf086, 0xefe0, 0xf12d, 0xefe0, 0xf12d, 0xf069, 0xf1be, +0xf069, 0xf1be, 0xf069, 0xf1be, 0xf03d, 0xf19f, 0xf03d, 0xf19f, 0xf094, 0xf205, 0xf094, +0xf205, 0xf07f, 0xf202, 0xf07f, 0xf202, 0xef9a, 0xf130, 0xef9a, 0xf130, 0xefce, 0xf177, +0xefce, 0xf177, 0xefce, 0xf177, 0xefd7, 0xf193, 0xefd7, 0xf193, 0xf031, 0xf1fd, 0xf031, +0xf1fd, 0xf201, 0xf3d9, 0xf201, 0xf3d9, 0xf37b, 0xf55c, 0xf37b, 0xf55c, 0xf41d, 0xf5ff, +0xf41d, 0xf5ff, 0xf4b6, 0xf693, 0xf4b6, 0xf693, 0xf4b6, 0xf693, 0xf533, 0xf703, 0xf533, +0xf703, 0xf5f3, 0xf7ae, 0xf5f3, 0xf7ae, 0xf7a6, 0xf942, 0xf7a6, 0xf942, 0xf920, 0xfa94, +0xf920, 0xfa94, 0xfa7b, 0xfbc0, 0xfa7b, 0xfbc0, 0xfa7b, 0xfbc0, 0xfc77, 0xfd84, 0xfc77, +0xfd84, 0xfe61, 0xff2e, 0xfe61, 0xff2e, 0xb8, 0x140, 0xb8, 0x140, 0x2f0, 0x32e, +0x2f0, 0x32e, 0x446, 0x437, 0x446, 0x437, 0x5ce, 0x570, 0x5ce, 0x570, 0x5ce, +0x570, 0x729, 0x67e, 0x729, 0x67e, 0x7ef, 0x6f9, 0x7ef, 0x6f9, 0x8d9, 0x79c, +0x8d9, 0x79c, 0x9dd, 0x85f, 0x9dd, 0x85f, 0xb53, 0x99c, 0xb53, 0x99c, 0xd7b, +0xb92, 0xd7b, 0xb92, 0xd7b, 0xb92, 0xf6e, 0xd5f, 0xf6e, 0xd5f, 0x1157, 0xf2c, +0x1157, 0xf2c, 0x1353, 0x1116, 0x1353, 0x1116, 0x1403, 0x11bf, 0x1403, 0x11bf, 0x1454, +0x1213, 0x1454, 0x1213, 0x1454, 0x1213, 0x1566, 0x1332, 0x1566, 0x1332, 0x1592, 0x1374, +0x1592, 0x1374, 0x162c, 0x142b, 0x162c, 0x142b, 0x1840, 0x1663, 0x1840, 0x1663, 0x18c0, +0x1709, 0x18c0, 0x1709, 0x180e, 0x1681, 0x180e, 0x1681, 0x180e, 0x1681, 0x178d, 0x162b, +0x178d, 0x162b, 0x15e7, 0x14af, 0x15e7, 0x14af, 0x141f, 0x130e, 0x141f, 0x130e, 0x1323, +0x1236, 0x1323, 0x1236, 0x1187, 0x10b8, 0x1187, 0x10b8, 0xf68, 0xeb1, 0xf68, 0xeb1, +0xf68, 0xeb1, 0xe1b, 0xd76, 0xe1b, 0xd76, 0xd91, 0xcf8, 0xd91, 0xcf8, 0xd20, +0xc8b, 0xd20, 0xc8b, 0xd30, 0xc98, 0xd30, 0xc98, 0xdd4, 0xd33, 0xdd4, 0xd33, +0xdd4, 0xd33, 0xe3e, 0xd8f, 0xe3e, 0xd8f, 0xe70, 0xdad, 0xe70, 0xdad, 0xea5, +0xdcb, 0xea5, 0xdcb, 0xe64, 0xd72, 0xe64, 0xd72, 0xdcd, 0xcc1, 0xdcd, 0xcc1, +0xd96, 0xc70, 0xd96, 0xc70, 0xd96, 0xc70, 0xdbe, 0xc80, 0xdbe, 0xc80, 0xe73, +0xd1f, 0xe73, 0xd1f, 0xf42, 0xddb, 0xf42, 0xddb, 0xf37, 0xdc1, 0xf37, 0xdc1, +0xec3, 0xd41, 0xec3, 0xd41, 0xdab, 0xc23, 0xdab, 0xc23, 0xdab, 0xc23, 0xc04, +0xa7b, 0xc04, 0xa7b, 0xaff, 0x978, 0xaff, 0x978, 0xa98, 0x918, 0xa98, 0x918, +0xa1f, 0x8a9, 0xa1f, 0x8a9, 0x9d1, 0x86a, 0x9d1, 0x86a, 0x9d1, 0x86a, 0xa66, +0x90e, 0xa66, 0x90e, 0xa67, 0x921, 0xa67, 0x921, 0x9b5, 0x881, 0x9b5, 0x881, +0x9ae, 0x88e, 0x9ae, 0x88e, 0x982, 0x874, 0x982, 0x874, 0x96a, 0x86e, 0x96a, +0x86e, 0x96a, 0x86e, 0x92f, 0x843, 0x92f, 0x843, 0x870, 0x794, 0x870, 0x794, +0x7b2, 0x6e3, 0x7b2, 0x6e3, 0x6cf, 0x60c, 0x6cf, 0x60c, 0x642, 0x589, 0x642, +0x589, 0x550, 0x4a0, 0x550, 0x4a0, 0x550, 0x4a0, 0x44e, 0x3a5, 0x44e, 0x3a5, +0x3ff, 0x35d, 0x3ff, 0x35d, 0x37a, 0x2df, 0x37a, 0x2df, 0x2c6, 0x232, 0x2c6, +0x232, 0x207, 0x17a, 0x207, 0x17a, 0x207, 0x17a, 0x156, 0xd1, 0x156, 0xd1, +0xd9, 0x5d, 0xd9, 0x5d, 0x136, 0xc4, 0x136, 0xc4, 0x18e, 0x128, 0x18e, +0x128, 0x112, 0xb7, 0x112, 0xb7, 0xc0, 0x72, 0xc0, 0x72, 0xc0, 0x72, +0xff8a, 0xff48, 0xff8a, 0xff48, 0xfe19, 0xfde4, 0xfe19, 0xfde4, 0xfdd3, 0xfda9, 0xfdd3, +0xfda9, 0xfd58, 0xfd39, 0xfd58, 0xfd39, 0xfcdf, 0xfcc9, 0xfcdf, 0xfcc9, 0xfd84, 0xfd77, +0xfd84, 0xfd77, 0xfd84, 0xfd77, 0xfe58, 0xfe50, 0xfe58, 0xfe50, 0xfe5a, 0xfe55, 0xfe5a, +0xfe55, 0xfe4a, 0xfe47, 0xfe4a, 0xfe47, 0xfe03, 0xfdfd, 0xfe03, 0xfdfd, 0xfd1e, 0xfd14, +0xfd1e, 0xfd14, 0xfd1e, 0xfd14, 0xfcd0, 0xfcbe, 0xfcd0, 0xfcbe, 0xfd13, 0xfcf8, 0xfd13, +0xfcf8, 0xfcde, 0xfcb7, 0xfcde, 0xfcb7, 0xfcb7, 0xfc83, 0xfcb7, 0xfc83, 0xfd73, 0xfd32, +0xfd73, 0xfd32, 0xfe6b, 0xfe1c, 0xfe6b, 0xfe1c, 0xfe6b, 0xfe1c, 0xff65, 0xff07, 0xff65, +0xff07, 0x88, 0x1b, 0x88, 0x1b, 0x143, 0xc8, 0x143, 0xc8, 0x1a6, 0x11f, +0x1a6, 0x11f, 0x258, 0x1c6, 0x258, 0x1c6, 0x306, 0x269, 0x306, 0x269, 0x306, +0x269, 0x2e1, 0x23a, 0x2e1, 0x23a, 0x2e9, 0x239, 0x2e9, 0x239, 0x335, 0x27d, +0x335, 0x27d, 0x409, 0x348, 0x409, 0x348, 0x5ca, 0x500, 0x5ca, 0x500, 0x5ca, +0x500, 0x5e8, 0x515, 0x5e8, 0x515, 0x5ca, 0x4eb, 0x5ca, 0x4eb, 0x657, 0x56a, +0x657, 0x56a, 0x5d3, 0x4d6, 0x5d3, 0x4d6, 0x5a8, 0x497, 0x5a8, 0x497, 0x5cb, +0x4a2, 0x5cb, 0x4a2, 0x5cb, 0x4a2, 0x5ab, 0x467, 0x5ab, 0x467, 0x5b9, 0x456, +0x5b9, 0x456, 0x753, 0x5ce, 0x753, 0x5ce, 0x948, 0x79d, 0x948, 0x79d, 0xa1c, +0x848, 0xa1c, 0x848, 0xba5, 0x9a8, 0xba5, 0x9a8, 0xba5, 0x9a8, 0xd00, 0xad7, +0xd00, 0xad7, 0xe75, 0xc20, 0xe75, 0xc20, 0x100a, 0xd89, 0x100a, 0xd89, 0x1108, +0xe5d, 0x1108, 0xe5d, 0x1238, 0xf65, 0x1238, 0xf65, 0x1238, 0xf65, 0x12f7, 0x1000, +0x12f7, 0x1000, 0x1428, 0x1111, 0x1428, 0x1111, 0x1547, 0x1216, 0x1547, 0x1216, 0x1564, +0x121d, 0x1564, 0x121d, 0x1598, 0x1241, 0x1598, 0x1241, 0x15f4, 0x1294, 0x15f4, 0x1294, +0x15f4, 0x1294, 0x15ac, 0x1249, 0x15ac, 0x1249, 0x153b, 0x11db, 0x153b, 0x11db, 0x155e, +0x1206, 0x155e, 0x1206, 0x14f2, 0x11a6, 0x14f2, 0x11a6, 0x1506, 0x11cb, 0x1506, 0x11cb, +0x1641, 0x131b, 0x1641, 0x131b, 0x1641, 0x131b, 0x169f, 0x1391, 0x169f, 0x1391, 0x1712, +0x141c, 0x1712, 0x141c, 0x17a2, 0x14c6, 0x17a2, 0x14c6, 0x16ca, 0x1408, 0x16ca, 0x1408, +0x1614, 0x136b, 0x1614, 0x136b, 0x1614, 0x136b, 0x15cf, 0x133d, 0x15cf, 0x133d, 0x14d0, +0x1254, 0x14d0, 0x1254, 0x142b, 0x11c2, 0x142b, 0x11c2, 0x1423, 0x11cb, 0x1423, 0x11cb, +0x13ca, 0x1181, 0x13ca, 0x1181, 0x13f9, 0x11be, 0x13f9, 0x11be, 0x13f9, 0x11be, 0x1465, +0x1235, 0x1465, 0x1235, 0x1371, 0x114b, 0x1371, 0x114b, 0x1258, 0x103d, 0x1258, 0x103d, +0x123b, 0x102b, 0x123b, 0x102b, 0x1199, 0xf95, 0x1199, 0xf95, 0x1199, 0xf95, 0x10b8, +0xec1, 0x10b8, 0xec1, 0x10a0, 0xeba, 0x10a0, 0xeba, 0xfd9, 0xe06, 0xfd9, 0xe06, +0xf47, 0xd8b, 0xf47, 0xd8b, 0xf58, 0xdb6, 0xf58, 0xdb6, 0xef1, 0xd6e, 0xef1, +0xd6e, 0xef1, 0xd6e, 0xf23, 0xdc2, 0xf23, 0xdc2, 0xef0, 0xdb5, 0xef0, 0xdb5, +0xe80, 0xd6f, 0xe80, 0xd6f, 0xe8d, 0xda8, 0xe8d, 0xda8, 0xe93, 0xddc, 0xe93, +0xddc, 0xe73, 0xdec, 0xe73, 0xdec, 0xe73, 0xdec, 0xe14, 0xdbd, 0xe14, 0xdbd, +0xdeb, 0xdc4, 0xdeb, 0xdc4, 0xcd5, 0xcdc, 0xcd5, 0xcdc, 0xbd7, 0xc0a, 0xbd7, +0xc0a, 0xbb7, 0xc15, 0xbb7, 0xc15, 0xbb7, 0xc15, 0xafa, 0xb7e, 0xafa, 0xb7e, +0x9f9, 0xa9f, 0x9f9, 0xa9f, 0x95d, 0xa21, 0x95d, 0xa21, 0x928, 0xa05, 0x928, +0xa05, 0x8fe, 0x9f0, 0x8fe, 0x9f0, 0x954, 0xa56, 0x954, 0xa56, 0x954, 0xa56, +0x99c, 0xaab, 0x99c, 0xaab, 0x8dc, 0x9f4, 0x8dc, 0x9f4, 0x798, 0x8b5, 0x798, +0x8b5, 0x68c, 0x7ad, 0x68c, 0x7ad, 0x616, 0x738, 0x616, 0x738, 0x55f, 0x681, +0x55f, 0x681, 0x55f, 0x681, 0x469, 0x58c, 0x469, 0x58c, 0x41c, 0x540, 0x41c, +0x540, 0x372, 0x499, 0x372, 0x499, 0x2f9, 0x423, 0x2f9, 0x423, 0x374, 0x4a4, +0x374, 0x4a4, 0x374, 0x4a4, 0x2af, 0x3e8, 0x2af, 0x3e8, 0x197, 0x2da, 0x197, +0x2da, 0xf0, 0x241, 0xf0, 0x241, 0xffa5, 0x107, 0xffa5, 0x107, 0xfed2, 0x47, +0xfed2, 0x47, 0xfe4d, 0xffd8, 0xfe4d, 0xffd8, 0xfe4d, 0xffd8, 0xfcce, 0xfe70, 0xfcce, +0xfe70, 0xfb19, 0xfcd3, 0xfb19, 0xfcd3, 0xfa95, 0xfc67, 0xfa95, 0xfc67, 0xfaa3, 0xfc8e, +0xfaa3, 0xfc8e, 0xfb41, 0xfd46, 0xfb41, 0xfd46, 0xfb70, 0xfd8c, 0xfb70, 0xfd8c, 0xfb70, +0xfd8c, 0xfa1b, 0xfc4c, 0xfa1b, 0xfc4c, 0xf936, 0xfb7c, 0xf936, 0xfb7c, 0xf932, 0xfb8a, +0xf932, 0xfb8a, 0xf91a, 0xfb80, 0xf91a, 0xfb80, 0xf8e2, 0xfb53, 0xf8e2, 0xfb53, 0xf8e2, +0xfb53, 0xf902, 0xfb7b, 0xf902, 0xfb7b, 0xf8f9, 0xfb77, 0xf8f9, 0xfb77, 0xf911, 0xfb90, +0xf911, 0xfb90, 0xf980, 0xfbfd, 0xf980, 0xfbfd, 0xf8b5, 0xfb2c, 0xf8b5, 0xfb2c, 0xf76c, +0xf9da, 0xf76c, 0xf9da, 0xf76c, 0xf9da, 0xf6c9, 0xf92b, 0xf6c9, 0xf92b, 0xf602, 0xf855, +0xf602, 0xf855, 0xf54f, 0xf792, 0xf54f, 0xf792, 0xf4fe, 0xf72e, 0xf4fe, 0xf72e, 0xf445, +0xf662, 0xf445, 0xf662, 0xf3a1, 0xf5a8, 0xf3a1, 0xf5a8, 0xf3a1, 0xf5a8, 0xf3ca, 0xf5ba, +0xf3ca, 0xf5ba, 0xf411, 0xf5ea, 0xf411, 0xf5ea, 0xf378, 0xf53b, 0xf378, 0xf53b, 0xf2b1, +0xf45d, 0xf2b1, 0xf45d, 0xf258, 0xf3f0, 0xf258, 0xf3f0, 0xf258, 0xf3f0, 0xf211, 0xf395, +0xf211, 0xf395, 0xf1d8, 0xf349, 0xf1d8, 0xf349, 0xf150, 0xf2b2, 0xf150, 0xf2b2, 0xf13c, +0xf290, 0xf13c, 0xf290, 0xf1cb, 0xf313, 0xf1cb, 0xf313, 0xf222, 0xf362, 0xf222, 0xf362, +0xf222, 0xf362, 0xf1a4, 0xf2e0, 0xf1a4, 0xf2e0, 0xf0b1, 0xf1ea, 0xf0b1, 0xf1ea, 0xefb9, +0xf0f4, 0xefb9, 0xf0f4, 0xee2c, 0xef6d, 0xee2c, 0xef6d, 0xecb7, 0xee00, 0xecb7, 0xee00, +0xeb8f, 0xece5, 0xeb8f, 0xece5, 0xeb8f, 0xece5, 0xea89, 0xebed, 0xea89, 0xebed, 0xe99d, +0xeb13, 0xe99d, 0xeb13, 0xe8bc, 0xea46, 0xe8bc, 0xea46, 0xe7e3, 0xe984, 0xe7e3, 0xe984, +0xe71d, 0xe8d6, 0xe71d, 0xe8d6, 0xe71d, 0xe8d6, 0xe683, 0xe854, 0xe683, 0xe854, 0xe633, +0xe81d, 0xe633, 0xe81d, 0xe5d9, 0xe7db, 0xe5d9, 0xe7db, 0xe4c0, 0xe6da, 0xe4c0, 0xe6da, +0xe46e, 0xe69f, 0xe46e, 0xe69f, 0xe3f2, 0xe638, 0xe3f2, 0xe638, 0xe3f2, 0xe638, 0xe2a8, +0xe500, 0xe2a8, 0xe500, 0xe231, 0xe49a, 0xe231, 0xe49a, 0xe1e2, 0xe458, 0xe1e2, 0xe458, +0xe1e2, 0xe463, 0xe1e2, 0xe463, 0xe1e0, 0xe469, 0xe1e0, 0xe469, 0xe1e1, 0xe46f, 0xe1e1, +0xe46f, 0xe1e1, 0xe46f, 0xe1c8, 0xe459, 0xe1c8, 0xe459, 0xe19b, 0xe42d, 0xe19b, 0xe42d, +0xe1ae, 0xe43f, 0xe1ae, 0xe43f, 0xe161, 0xe3f0, 0xe161, 0xe3f0, 0xe1b0, 0xe43c, 0xe1b0, +0xe43c, 0xe1b0, 0xe43c, 0xe1b4, 0xe43d, 0xe1b4, 0xe43d, 0xe1af, 0xe435, 0xe1af, 0xe435, +0xe20c, 0xe490, 0xe20c, 0xe490, 0xe1c9, 0xe44b, 0xe1c9, 0xe44b, 0xe211, 0xe493, 0xe211, +0xe493, 0xe2a6, 0xe529, 0xe2a6, 0xe529, 0xe2a6, 0xe529, 0xe348, 0xe5ce, 0xe348, 0xe5ce, +0xe3e1, 0xe66b, 0xe3e1, 0xe66b, 0xe4e6, 0xe777, 0xe4e6, 0xe777, 0xe621, 0xe8b8, 0xe621, +0xe8b8, 0xe6f1, 0xe990, 0xe6f1, 0xe990, 0xe809, 0xeab1, 0xe809, 0xeab1, 0xe809, 0xeab1, +0xe7dd, 0xea8e, 0xe7dd, 0xea8e, 0xe730, 0xe9ea, 0xe730, 0xe9ea, 0xe765, 0xea26, 0xe765, +0xea26, 0xe7d4, 0xea9b, 0xe7d4, 0xea9b, 0xe810, 0xeadc, 0xe810, 0xeadc, 0xe810, 0xeadc, +0xe814, 0xeae3, 0xe814, 0xeae3, 0xe83c, 0xeb0d, 0xe83c, 0xeb0d, 0xe849, 0xeb18, 0xe849, +0xeb18, 0xe909, 0xebd5, 0xe909, 0xebd5, 0xe9ff, 0xecc6, 0xe9ff, 0xecc6, 0xea91, 0xed51, +0xea91, 0xed51, 0xea91, 0xed51, 0xeab3, 0xed6b, 0xeab3, 0xed6b, 0xeb3f, 0xedee, 0xeb3f, +0xedee, 0xec63, 0xef09, 0xec63, 0xef09, 0xed08, 0xefa6, 0xed08, 0xefa6, 0xee15, 0xf0aa, +0xee15, 0xf0aa, 0xee87, 0xf117, 0xee87, 0xf117, 0xee87, 0xf117, 0xefb3, 0xf23e, 0xefb3, +0xf23e, 0xf11d, 0xf3a5, 0xf11d, 0xf3a5, 0xf117, 0xf39f, 0xf117, 0xf39f, 0xf1a6, 0xf431, +0xf1a6, 0xf431, 0xf198, 0xf427, 0xf198, 0xf427, 0xf198, 0xf427, 0xf133, 0xf3c8, 0xf133, +0xf3c8, 0xf15e, 0xf3fc, 0xf15e, 0xf3fc, 0xf249, 0xf4ee, 0xf249, 0xf4ee, 0xf2e2, 0xf58f, +0xf2e2, 0xf58f, 0xf311, 0xf5c6, 0xf311, 0xf5c6, 0xf433, 0xf6ed, 0xf433, 0xf6ed, 0xf433, +0xf6ed, 0xf4c9, 0xf784, 0xf4c9, 0xf784, 0xf607, 0xf8bf, 0xf607, 0xf8bf, 0xf6ea, 0xf998, +0xf6ea, 0xf998, 0xf706, 0xf9a4, 0xf706, 0xf9a4, 0xf80a, 0xfa92, 0xf80a, 0xfa92, 0xf80a, +0xfa92, 0xf8bb, 0xfb22, 0xf8bb, 0xfb22, 0xfa2e, 0xfc6d, 0xfa2e, 0xfc6d, 0xfb7a, 0xfd87, +0xfb7a, 0xfd87, 0xfc3b, 0xfe0d, 0xfc3b, 0xfe0d, 0xfd76, 0xff06, 0xfd76, 0xff06, 0xff05, +0x49, 0xff05, 0x49, 0xff05, 0x49, 0x18b, 0x27d, 0x18b, 0x27d, 0x37c, 0x416, +0x37c, 0x416, 0x522, 0x560, 0x522, 0x560, 0x6b6, 0x694, 0x6b6, 0x694, 0x802, +0x780, 0x802, 0x780, 0x9dc, 0x8fa, 0x9dc, 0x8fa, 0x9dc, 0x8fa, 0xb06, 0x9c7, +0xb06, 0x9c7, 0xbe5, 0xa4d, 0xbe5, 0xa4d, 0xd0a, 0xb1f, 0xd0a, 0xb1f, 0xe6d, +0xc35, 0xe6d, 0xc35, 0x10a0, 0xe25, 0x10a0, 0xe25, 0x10a0, 0xe25, 0x12cd, 0x1018, +0x12cd, 0x1018, 0x13a3, 0x10be, 0x13a3, 0x10be, 0x155e, 0x1254, 0x155e, 0x1254, 0x17b8, +0x1493, 0x17b8, 0x1493, 0x1846, 0x1510, 0x1846, 0x1510, 0x1989, 0x164d, 0x1989, 0x164d, +0x1989, 0x164d, 0x1a8f, 0x1756, 0x1a8f, 0x1756, 0x1b1a, 0x17ec, 0x1b1a, 0x17ec, 0x1be5, +0x18c8, 0x1be5, 0x18c8, 0x1b97, 0x1891, 0x1b97, 0x1891, 0x1a9d, 0x17b2, 0x1a9d, 0x17b2, +0x1932, 0x1664, 0x1932, 0x1664, 0x1932, 0x1664, 0x1827, 0x1577, 0x1827, 0x1577, 0x1623, +0x1391, 0x1623, 0x1391, 0x14a0, 0x122b, 0x14a0, 0x122b, 0x13c7, 0x116d, 0x13c7, 0x116d, +0x11e1, 0xf9e, 0x11e1, 0xf9e, 0x11e1, 0xf9e, 0x1085, 0xe55, 0x1085, 0xe55, 0xf43, +0xd22, 0xf43, 0xd22, 0xe7b, 0xc65, 0xe7b, 0xc65, 0xd80, 0xb71, 0xd80, 0xb71, +0xcfa, 0xaed, 0xcfa, 0xaed, 0xcbe, 0xaaf, 0xcbe, 0xaaf, 0xcbe, 0xaaf, 0xc5d, +0xa4a, 0xc5d, 0xa4a, 0xd34, 0xb1a, 0xd34, 0xb1a, 0xca1, 0xa7f, 0xca1, 0xa7f, +0xc8a, 0xa60, 0xc8a, 0xa60, 0xd6b, 0xb39, 0xd6b, 0xb39, 0xcc9, 0xa90, 0xcc9, +0xa90, 0xcc9, 0xa90, 0xcc5, 0xa86, 0xcc5, 0xa86, 0xd4a, 0xb09, 0xd4a, 0xb09, +0xcae, 0xa6d, 0xcae, 0xa6d, 0xb10, 0x8d1, 0xb10, 0x8d1, 0xa20, 0x7e8, 0xa20, +0x7e8, 0xa20, 0x7e8, 0x974, 0x746, 0x974, 0x746, 0x85d, 0x63b, 0x85d, 0x63b, +0x7ad, 0x59b, 0x7ad, 0x59b, 0x6d9, 0x4d9, 0x6d9, 0x4d9, 0x629, 0x43e, 0x629, +0x43e, 0x5b0, 0x3da, 0x5b0, 0x3da, 0x5b0, 0x3da, 0x577, 0x3b8, 0x577, 0x3b8, +0x59a, 0x3f3, 0x59a, 0x3f3, 0x5bd, 0x42e, 0x5bd, 0x42e, 0x601, 0x48a, 0x601, +0x48a, 0x64c, 0x4ec, 0x64c, 0x4ec, 0x57f, 0x434, 0x57f, 0x434, 0x57f, 0x434, +0x461, 0x32b, 0x461, 0x32b, 0x41b, 0x2f8, 0x41b, 0x2f8, 0x25a, 0x149, 0x25a, +0x149, 0x13e, 0x3c, 0x13e, 0x3c, 0x108, 0x14, 0x108, 0x14, 0x108, 0x14, +0xffc1, 0xfed9, 0xffc1, 0xfed9, 0xffb7, 0xfeda, 0xffb7, 0xfeda, 0xffd5, 0xff01, 0xffd5, +0xff01, 0xff8b, 0xfebf, 0xff8b, 0xfebf, 0xfec0, 0xfdfc, 0xfec0, 0xfdfc, 0xfe59, 0xfd9b, +0xfe59, 0xfd9b, 0xfe59, 0xfd9b, 0xfe36, 0xfd7c, 0xfe36, 0xfd7c, 0xfd83, 0xfccd, 0xfd83, +0xfccd, 0xfde0, 0xfd2c, 0xfde0, 0xfd2c, 0xfcc1, 0xfc0e, 0xfcc1, 0xfc0e, 0xfb29, 0xfa77, +0xfb29, 0xfa77, 0xfb2c, 0xfa78, 0xfb2c, 0xfa78, 0xfb2c, 0xfa78, 0xfb17, 0xfa61, 0xfb17, +0xfa61, 0xfb0e, 0xfa55, 0xfb0e, 0xfa55, 0xfb4a, 0xfa8c, 0xfb4a, 0xfa8c, 0xfb4e, 0xfa88, +0xfb4e, 0xfa88, 0xfb52, 0xfa84, 0xfb52, 0xfa84, 0xfb52, 0xfa84, 0xfc4b, 0xfb73, 0xfc4b, +0xfb73, 0xfce1, 0xfbfd, 0xfce1, 0xfbfd, 0xfc6b, 0xfb7b, 0xfc6b, 0xfb7b, 0xfbde, 0xfae0, +0xfbde, 0xfae0, 0xfba7, 0xfa9a, 0xfba7, 0xfa9a, 0xfc5f, 0xfb44, 0xfc5f, 0xfb44, 0xfc5f, +0xfb44, 0xfcc8, 0xfb9d, 0xfcc8, 0xfb9d, 0xfc9c, 0xfb62, 0xfc9c, 0xfb62, 0xfd30, 0xfbe8, +0xfd30, 0xfbe8, 0xfdcb, 0xfc75, 0xfdcb, 0xfc75, 0xfefe, 0xfd9b, 0xfefe, 0xfd9b, 0x11f, +0xffb1, 0x11f, 0xffb1, 0x11f, 0xffb1, 0x253, 0xdb, 0x253, 0xdb, 0x345, 0x1c5, +0x345, 0x1c5, 0x42f, 0x2a7, 0x42f, 0x2a7, 0x4f1, 0x363, 0x4f1, 0x363, 0x5c1, +0x42e, 0x5c1, 0x42e, 0x5c1, 0x42e, 0x5f2, 0x45b, 0x5f2, 0x45b, 0x6d5, 0x53a, +0x6d5, 0x53a, 0x6f4, 0x554, 0x6f4, 0x554, 0x650, 0x4aa, 0x650, 0x4aa, 0x850, +0x6a4, 0x850, 0x6a4, 0x9af, 0x7fa, 0x9af, 0x7fa, 0x9af, 0x7fa, 0x968, 0x7a7, +0x968, 0x7a7, 0xa16, 0x847, 0xa16, 0x847, 0xa85, 0x8a4, 0xa85, 0x8a4, 0xb3b, +0x946, 0xb3b, 0x946, 0xbbf, 0x9b1, 0xbbf, 0x9b1, 0xc01, 0x9d6, 0xc01, 0x9d6, +0xc01, 0x9d6, 0xcbd, 0xa72, 0xcbd, 0xa72, 0xd79, 0xb0a, 0xd79, 0xb0a, 0xea0, +0xc0a, 0xea0, 0xc0a, 0xf8a, 0xccb, 0xf8a, 0xccb, 0x1114, 0xe2b, 0x1114, 0xe2b, +0x1114, 0xe2b, 0x1328, 0x1013, 0x1328, 0x1013, 0x14c4, 0x1182, 0x14c4, 0x1182, 0x159c, +0x122f, 0x159c, 0x122f, 0x15e1, 0x1249, 0x15e1, 0x1249, 0x1674, 0x12b4, 0x1674, 0x12b4, +0x177c, 0x1397, 0x177c, 0x1397, 0x177c, 0x1397, 0x18d1, 0x14cc, 0x18d1, 0x14cc, 0x1944, +0x1522, 0x1944, 0x1522, 0x1951, 0x1517, 0x1951, 0x1517, 0x19aa, 0x155f, 0x19aa, 0x155f, +0x1a9e, 0x1646, 0x1a9e, 0x1646, 0x1b4d, 0x16ee, 0x1b4d, 0x16ee, 0x1b4d, 0x16ee, 0x1ae3, +0x1684, 0x1ae3, 0x1684, 0x1b30, 0x16d7, 0x1b30, 0x16d7, 0x1b86, 0x1736, 0x1b86, 0x1736, +0x1b75, 0x1736, 0x1b75, 0x1736, 0x1bb4, 0x1788, 0x1bb4, 0x1788, 0x1bb4, 0x1788, 0x1b66, +0x1753, 0x1b66, 0x1753, 0x1aa3, 0x16ac, 0x1aa3, 0x16ac, 0x1ae6, 0x170d, 0x1ae6, 0x170d, +0x1b17, 0x175f, 0x1b17, 0x175f, 0x1a9b, 0x1706, 0x1a9b, 0x1706, 0x1ae4, 0x1773, 0x1ae4, +0x1773, 0x1ae4, 0x1773, 0x1a84, 0x1738, 0x1a84, 0x1738, 0x19c5, 0x169f, 0x19c5, 0x169f, +0x18fa, 0x15fa, 0x18fa, 0x15fa, 0x17ec, 0x1512, 0x17ec, 0x1512, 0x173c, 0x1488, 0x173c, +0x1488, 0x173c, 0x1488, 0x167b, 0x13ed, 0x167b, 0x13ed, 0x162c, 0x13c4, 0x162c, 0x13c4, +0x14f6, 0x12b4, 0x14f6, 0x12b4, 0x1450, 0x1233, 0x1450, 0x1233, 0x1441, 0x124b, 0x1441, +0x124b, 0x127a, 0x10aa, 0x127a, 0x10aa, 0x127a, 0x10aa, 0x116b, 0xfc2, 0x116b, 0xfc2, +0x1037, 0xeb5, 0x1037, 0xeb5, 0xf4f, 0xdf4, 0xf4f, 0xdf4, 0xf6c, 0xe39, 0xf6c, +0xe39, 0xdf0, 0xce6, 0xdf0, 0xce6, 0xc60, 0xb7d, 0xc60, 0xb7d, 0xc60, 0xb7d, +0xc6d, 0xbb1, 0xc6d, 0xbb1, 0xcaf, 0xc1b, 0xcaf, 0xc1b, 0xbfb, 0xb8d, 0xbfb, +0xb8d, 0xbd7, 0xb8f, 0xbd7, 0xb8f, 0xbde, 0xbba, 0xbde, 0xbba, 0xbde, 0xbba, +0xb40, 0xb3e, 0xb40, 0xb3e, 0xaae, 0xacd, 0xaae, 0xacd, 0x9ec, 0xa28, 0x9ec, +0xa28, 0x8a7, 0x8fe, 0x8a7, 0x8fe, 0x7ac, 0x81b, 0x7ac, 0x81b, 0x7d6, 0x85a, +0x7d6, 0x85a, 0x7d6, 0x85a, 0x70d, 0x7a3, 0x70d, 0x7a3, 0x5e5, 0x68a, 0x5e5, +0x68a, 0x503, 0x5b5, 0x503, 0x5b5, 0x465, 0x520, 0x465, 0x520, 0x3ea, 0x4ab, +0x3ea, 0x4ab, 0x2db, 0x3a1, 0x2db, 0x3a1, 0x2db, 0x3a1, 0x213, 0x2dc, 0x213, +0x2dc, 0x7a, 0x144, 0x7a, 0x144, 0xfffe, 0xc9, 0xfffe, 0xc9, 0x4f, 0x11a, +0x4f, 0x11a, 0xffae, 0x79, 0xffae, 0x79, 0xffae, 0x79, 0xfed6, 0xffa1, 0xfed6, +0xffa1, 0xfe3e, 0xff0b, 0xfe3e, 0xff0b, 0xfe16, 0xfee5, 0xfe16, 0xfee5, 0xfd8b, 0xfe5e, +0xfd8b, 0xfe5e, 0xfdad, 0xfe86, 0xfdad, 0xfe86, 0xfcde, 0xfdbe, 0xfcde, 0xfdbe, 0xfcde, +0xfdbe, 0xfbbd, 0xfca6, 0xfbbd, 0xfca6, 0xfba6, 0xfc9a, 0xfba6, 0xfc9a, 0xfac9, 0xfbca, +0xfac9, 0xfbca, 0xf9de, 0xfaee, 0xf9de, 0xfaee, 0xf9a0, 0xfac1, 0xf9a0, 0xfac1, 0xf8f6, +0xfa29, 0xf8f6, 0xfa29, 0xf8f6, 0xfa29, 0xf741, 0xf886, 0xf741, 0xf886, 0xf6c7, 0xf821, +0xf6c7, 0xf821, 0xf709, 0xf877, 0xf709, 0xf877, 0xf641, 0xf7c3, 0xf641, 0xf7c3, 0xf5bd, +0xf754, 0xf5bd, 0xf754, 0xf5bd, 0xf754, 0xf5e4, 0xf78e, 0xf5e4, 0xf78e, 0xf516, 0xf6d4, +0xf516, 0xf6d4, 0xf4af, 0xf67f, 0xf4af, 0xf67f, 0xf559, 0xf739, 0xf559, 0xf739, 0xf490, +0xf680, 0xf490, 0xf680, 0xf3cc, 0xf5ca, 0xf3cc, 0xf5ca, 0xf3cc, 0xf5ca, 0xf3fd, 0xf607, +0xf3fd, 0xf607, 0xf4c1, 0xf6d4, 0xf4c1, 0xf6d4, 0xf59b, 0xf7b6, 0xf59b, 0xf7b6, 0xf63d, +0xf85e, 0xf63d, 0xf85e, 0xf68c, 0xf8b2, 0xf68c, 0xf8b2, 0xf5e1, 0xf808, 0xf5e1, 0xf808, +0xf5e1, 0xf808, 0xf5b0, 0xf7d9, 0xf5b0, 0xf7d9, 0xf562, 0xf78a, 0xf562, 0xf78a, 0xf39a, +0xf5c0, 0xf39a, 0xf5c0, 0xf268, 0xf48c, 0xf268, 0xf48c, 0xf240, 0xf461, 0xf240, 0xf461, +0xf240, 0xf461, 0xf22c, 0xf449, 0xf22c, 0xf449, 0xf302, 0xf51c, 0xf302, 0xf51c, 0xf33f, +0xf556, 0xf33f, 0xf556, 0xf390, 0xf5a4, 0xf390, 0xf5a4, 0xf433, 0xf646, 0xf433, 0xf646, +0xf3ee, 0xf601, 0xf3ee, 0xf601, 0xf3ee, 0xf601, 0xf42e, 0xf643, 0xf42e, 0xf643, 0xf3a2, +0xf5ba, 0xf3a2, 0xf5ba, 0xf300, 0xf51e, 0xf300, 0xf51e, 0xf30f, 0xf535, 0xf30f, 0xf535, +0xf28f, 0xf4bf, 0xf28f, 0xf4bf, 0xf1df, 0xf41d, 0xf1df, 0xf41d, 0xf1df, 0xf41d, 0xf1aa, +0xf3f7, 0xf1aa, 0xf3f7, 0xf0d9, 0xf338, 0xf0d9, 0xf338, 0xf04a, 0xf2bd, 0xf04a, 0xf2bd, +0xf073, 0xf2fd, 0xf073, 0xf2fd, 0xef43, 0xf1e5, 0xef43, 0xf1e5, 0xef43, 0xf1e5, 0xeec1, +0xf17c, 0xeec1, 0xf17c, 0xee4d, 0xf123, 0xee4d, 0xf123, 0xed2c, 0xf01e, 0xed2c, 0xf01e, +0xebe0, 0xeeee, 0xebe0, 0xeeee, 0xeace, 0xedf8, 0xeace, 0xedf8, 0xea6d, 0xedb2, 0xea6d, +0xedb2, 0xea6d, 0xedb2, 0xe942, 0xeca1, 0xe942, 0xeca1, 0xe8b9, 0xec31, 0xe8b9, 0xec31, +0xe8a8, 0xec37, 0xe8a8, 0xec37, 0xe814, 0xebb8, 0xe814, 0xebb8, 0xe764, 0xeb1b, 0xe764, +0xeb1b, 0xe6b4, 0xea7b, 0xe6b4, 0xea7b, 0xe6b4, 0xea7b, 0xe5eb, 0xe9be, 0xe5eb, 0xe9be, +0xe64e, 0xea2c, 0xe64e, 0xea2c, 0xe697, 0xea7c, 0xe697, 0xea7c, 0xe622, 0xea0c, 0xe622, +0xea0c, 0xe636, 0xea21, 0xe636, 0xea21, 0xe636, 0xea21, 0xe52f, 0xe91a, 0xe52f, 0xe91a, +0xe639, 0xea20, 0xe639, 0xea20, 0xe67f, 0xea60, 0xe67f, 0xea60, 0xe3de, 0xe7b7, 0xe3de, +0xe7b7, 0xe38d, 0xe75c, 0xe38d, 0xe75c, 0xe3c5, 0xe788, 0xe3c5, 0xe788, 0xe3c5, 0xe788, +0xe3fe, 0xe7b4, 0xe3fe, 0xe7b4, 0xe4b3, 0xe85a, 0xe4b3, 0xe85a, 0xe483, 0xe81a, 0xe483, +0xe81a, 0xe4b3, 0xe839, 0xe4b3, 0xe839, 0xe60e, 0xe982, 0xe60e, 0xe982, 0xe7b6, 0xeb18, +0xe7b6, 0xeb18, 0xe7b6, 0xeb18, 0xe910, 0xec5e, 0xe910, 0xec5e, 0xe940, 0xec7b, 0xe940, +0xec7b, 0xe8cf, 0xebf5, 0xe8cf, 0xebf5, 0xe8f3, 0xec04, 0xe8f3, 0xec04, 0xe920, 0xec1b, +0xe920, 0xec1b, 0xe920, 0xec1b, 0xe8cf, 0xebb5, 0xe8cf, 0xebb5, 0xe7d6, 0xeaa6, 0xe7d6, +0xeaa6, 0xe7d2, 0xea8c, 0xe7d2, 0xea8c, 0xe91f, 0xebc2, 0xe91f, 0xebc2, 0xe93f, 0xebcc, +0xe93f, 0xebcc, 0xe880, 0xeaf9, 0xe880, 0xeaf9, 0xe880, 0xeaf9, 0xe86b, 0xeacf, 0xe86b, +0xeacf, 0xe87e, 0xeacf, 0xe87e, 0xeacf, 0xe916, 0xeb55, 0xe916, 0xeb55, 0xe96e, 0xeb9d, +0xe96e, 0xeb9d, 0xe986, 0xeba8, 0xe986, 0xeba8, 0xea06, 0xec1e, 0xea06, 0xec1e, 0xea06, +0xec1e, 0xea14, 0xec24, 0xea14, 0xec24, 0xead7, 0xece3, 0xead7, 0xece3, 0xec5f, 0xee6a, +0xec5f, 0xee6a, 0xed80, 0xef8e, 0xed80, 0xef8e, 0xedce, 0xefe3, 0xedce, 0xefe3, 0xedce, +0xefe3, 0xeeac, 0xf0cb, 0xeeac, 0xf0cb, 0xef91, 0xf1bd, 0xef91, 0xf1bd, 0xf004, 0xf241, +0xf004, 0xf241, 0xf011, 0xf261, 0xf011, 0xf261, 0xef05, 0xf16a, 0xef05, 0xf16a, 0xee8a, +0xf105, 0xee8a, 0xf105, 0xee8a, 0xf105, 0xee35, 0xf0c6, 0xee35, 0xf0c6, 0xef2b, 0xf1d2, +0xef2b, 0xf1d2, 0xef6e, 0xf228, 0xef6e, 0xf228, 0xef49, 0xf215, 0xef49, 0xf215, 0xf033, +0xf30c, 0xf033, 0xf30c, 0xf033, 0xf30c, 0xf034, 0xf315, 0xf034, 0xf315, 0xf1ca, 0xf4af, +0xf1ca, 0xf4af, 0xf2ef, 0xf5d0, 0xf2ef, 0xf5d0, 0xf42e, 0xf704, 0xf42e, 0xf704, 0xf519, +0xf7db, 0xf519, 0xf7db, 0xf4b1, 0xf759, 0xf4b1, 0xf759, 0xf4b1, 0xf759, 0xf573, 0xf7f7, +0xf573, 0xf7f7, 0xf51f, 0xf776, 0xf51f, 0xf776, 0xf4ce, 0xf6f0, 0xf4ce, 0xf6f0, 0xf658, +0xf83d, 0xf658, 0xf83d, 0xf868, 0xfa07, 0xf868, 0xfa07, 0xf9e1, 0xfb35, 0xf9e1, 0xfb35, +0xf9e1, 0xfb35, 0xfc83, 0xfd86, 0xfc83, 0xfd86, 0xff12, 0xffbf, 0xff12, 0xffbf, 0xd9, +0x12d, 0xd9, 0x12d, 0x35e, 0x358, 0x35e, 0x358, 0x4b2, 0x451, 0x4b2, 0x451, +0x4b2, 0x451, 0x58b, 0x4cf, 0x58b, 0x4cf, 0x6a4, 0x590, 0x6a4, 0x590, 0x87d, +0x716, 0x87d, 0x716, 0x9ba, 0x804, 0x9ba, 0x804, 0xa84, 0x885, 0xa84, 0x885, +0xcff, 0xac0, 0xcff, 0xac0, 0xcff, 0xac0, 0xeda, 0xc62, 0xeda, 0xc62, 0x10e2, +0xe3b, 0x10e2, 0xe3b, 0x13da, 0x110e, 0x13da, 0x110e, 0x150e, 0x1226, 0x150e, 0x1226, +0x1550, 0x1257, 0x1550, 0x1257, 0x16d5, 0x13d3, 0x16d5, 0x13d3, 0x16d5, 0x13d3, 0x17fb, +0x14fb, 0x17fb, 0x14fb, 0x1736, 0x1441, 0x1736, 0x1441, 0x1698, 0x13b5, 0x1698, 0x13b5, +0x169b, 0x13d2, 0x169b, 0x13d2, 0x15fd, 0x1353, 0x15fd, 0x1353, 0x15fd, 0x1353, 0x1588, +0x1302, 0x1588, 0x1302, 0x1574, 0x1315, 0x1574, 0x1315, 0x14ca, 0x1295, 0x14ca, 0x1295, +0x1341, 0x1137, 0x1341, 0x1137, 0x121d, 0x103d, 0x121d, 0x103d, 0x10ff, 0xf47, 0x10ff, +0xf47, 0x10ff, 0xf47, 0xffd, 0xe6b, 0xffd, 0xe6b, 0xfb7, 0xe47, 0xfb7, 0xe47, +0xdd0, 0xc7e, 0xdd0, 0xc7e, 0xcf9, 0xbbf, 0xcf9, 0xbbf, 0xd79, 0xc52, 0xd79, +0xc52, 0xde9, 0xcd0, 0xde9, 0xcd0, 0xde9, 0xcd0, 0xec3, 0xdb1, 0xec3, 0xdb1, +0xe86, 0xd75, 0xe86, 0xd75, 0xedb, 0xdc7, 0xedb, 0xdc7, 0xef4, 0xdd7, 0xef4, +0xdd7, 0xf66, 0xe3d, 0xf66, 0xe3d, 0xf66, 0xe3d, 0xfd0, 0xe96, 0xfd0, 0xe96, +0xf4f, 0xe03, 0xf4f, 0xe03, 0xe4e, 0xcee, 0xe4e, 0xcee, 0xd8b, 0xc16, 0xd8b, +0xc16, 0xea8, 0xd1f, 0xea8, 0xd1f, 0xdc7, 0xc2b, 0xdc7, 0xc2b, 0xdc7, 0xc2b, +0xd0c, 0xb5f, 0xd0c, 0xb5f, 0xd2f, 0xb74, 0xd2f, 0xb74, 0xc2c, 0xa68, 0xc2c, +0xa68, 0xc09, 0xa3f, 0xc09, 0xa3f, 0xc87, 0xabc, 0xc87, 0xabc, 0xc6e, 0xaa7, +0xc6e, 0xaa7, 0xc6e, 0xaa7, 0xbc9, 0xa0a, 0xbc9, 0xa0a, 0xc94, 0xae3, 0xc94, +0xae3, 0xbc4, 0xa26, 0xbc4, 0xa26, 0xa9e, 0x916, 0xa9e, 0x916, 0xa5a, 0x8ec, +0xa5a, 0x8ec, 0xa5a, 0x8ec, 0x94a, 0x7fa, 0x94a, 0x7fa, 0x94d, 0x81c, 0x94d, +0x81c, 0x83f, 0x72f, 0x83f, 0x72f, 0x6c3, 0x5d4, 0x6c3, 0x5d4, 0x644, 0x577, +0x644, 0x577, 0x5d1, 0x523, 0x5d1, 0x523, 0x5d1, 0x523, 0x4a9, 0x419, 0x4a9, +0x419, 0x3f5, 0x380, 0x3f5, 0x380, 0x36b, 0x30d, 0x36b, 0x30d, 0x2a3, 0x259, +0x2a3, 0x259, 0x2f7, 0x2bd, 0x2f7, 0x2bd, 0x1e8, 0x1b9, 0x1e8, 0x1b9, 0x1e8, +0x1b9, 0xda, 0xb1, 0xda, 0xb1, 0x125, 0xfe, 0x125, 0xfe, 0x9f, 0x75, +0x9f, 0x75, 0xffa2, 0xff70, 0xffa2, 0xff70, 0xffbf, 0xff82, 0xffbf, 0xff82, 0xffbf, +0xff82, 0x1a, 0xffcf, 0x1a, 0xffcf, 0xffcd, 0xff71, 0xffcd, 0xff71, 0x3, 0xff93, +0x3, 0xff93, 0xff8e, 0xff0a, 0xff8e, 0xff0a, 0xfeb8, 0xfe1e, 0xfeb8, 0xfe1e, 0xff07, +0xfe57, 0xff07, 0xfe57, 0xff07, 0xfe57, 0xfe53, 0xfd8f, 0xfe53, 0xfd8f, 0xfcc0, 0xfbe7, +0xfcc0, 0xfbe7, 0xfd16, 0xfc2c, 0xfd16, 0xfc2c, 0xfd6d, 0xfc72, 0xfd6d, 0xfc72, 0xfd8c, +0xfc84, 0xfd8c, 0xfc84, 0xfe3c, 0xfd2a, 0xfe3c, 0xfd2a, 0xfe3c, 0xfd2a, 0xfdc6, 0xfcab, +0xfdc6, 0xfcab, 0xfd9d, 0xfc7d, 0xfd9d, 0xfc7d, 0xfee1, 0xfdbd, 0xfee1, 0xfdbd, 0xfffe, +0xfed9, 0xfffe, 0xfed9, 0x3c, 0xff18, 0x3c, 0xff18, 0x3c, 0xff18, 0xb1, 0xff8e, +0xb1, 0xff8e, 0x13e, 0x1e, 0x13e, 0x1e, 0x270, 0x154, 0x270, 0x154, 0x2cf, +0x1b5, 0x2cf, 0x1b5, 0x276, 0x15d, 0x276, 0x15d, 0x22d, 0x115, 0x22d, 0x115, +0x22d, 0x115, 0x173, 0x58, 0x173, 0x58, 0x280, 0x160, 0x280, 0x160, 0x301, +0x1d9, 0x301, 0x1d9, 0x3ac, 0x278, 0x3ac, 0x278, 0x3e3, 0x29f, 0x3e3, 0x29f, +0x3a5, 0x24f, 0x3a5, 0x24f, 0x3a5, 0x24f, 0x55f, 0x3f1, 0x55f, 0x3f1, 0x5e2, +0x459, 0x5e2, 0x459, 0x66d, 0x4c6, 0x66d, 0x4c6, 0x68e, 0x4c5, 0x68e, 0x4c5, +0x63c, 0x44f, 0x63c, 0x44f, 0x63c, 0x44f, 0x6db, 0x4c7, 0x6db, 0x4c7, 0x718, +0x4db, 0x718, 0x4db, 0x7c4, 0x55c, 0x7c4, 0x55c, 0x967, 0x6d4, 0x967, 0x6d4, +0xb09, 0x84c, 0xb09, 0x84c, 0xc7d, 0x996, 0xc7d, 0x996, 0xc7d, 0x996, 0xe11, +0xb01, 0xe11, 0xb01, 0xebd, 0xb87, 0xebd, 0xb87, 0xf67, 0xc0c, 0xf67, 0xc0c, +0x1081, 0xd06, 0x1081, 0xd06, 0x1198, 0xdff, 0x1198, 0xdff, 0x12cd, 0xf1b, 0x12cd, +0xf1b, 0x12cd, 0xf1b, 0x13eb, 0x1024, 0x13eb, 0x1024, 0x14a4, 0x10cc, 0x14a4, 0x10cc, +0x14f3, 0x110e, 0x14f3, 0x110e, 0x158c, 0x119e, 0x158c, 0x119e, 0x1706, 0x1315, 0x1706, +0x1315, 0x1706, 0x1315, 0x1825, 0x1434, 0x1825, 0x1434, 0x1821, 0x1434, 0x1821, 0x1434, +0x18a9, 0x14c4, 0x18a9, 0x14c4, 0x1892, 0x14b9, 0x1892, 0x14b9, 0x1849, 0x147f, 0x1849, +0x147f, 0x17e9, 0x1430, 0x17e9, 0x1430, 0x17e9, 0x1430, 0x16d7, 0x1332, 0x16d7, 0x1332, +0x1722, 0x1394, 0x1722, 0x1394, 0x1792, 0x141c, 0x1792, 0x141c, 0x1775, 0x1419, 0x1775, +0x1419, 0x1888, 0x1548, 0x1888, 0x1548, 0x1888, 0x1548, 0x19cb, 0x16a7, 0x19cb, 0x16a7, +0x18b2, 0x15ab, 0x18b2, 0x15ab, 0x17c9, 0x14e0, 0x17c9, 0x14e0, 0x17ba, 0x14f0, 0x17ba, +0x14f0, 0x1772, 0x14c8, 0x1772, 0x14c8, 0x1731, 0x14a7, 0x1731, 0x14a7, 0x1731, 0x14a7, +0x1674, 0x140b, 0x1674, 0x140b, 0x1599, 0x1351, 0x1599, 0x1351, 0x141a, 0x11f4, 0x141a, +0x11f4, 0x13c1, 0x11be, 0x13c1, 0x11be, 0x1331, 0x1152, 0x1331, 0x1152, 0x1223, 0x1068, +0x1223, 0x1068, 0x1223, 0x1068, 0x11ca, 0x1034, 0x11ca, 0x1034, 0x10da, 0xf69, 0x10da, +0xf69, 0x1065, 0xf19, 0x1065, 0xf19, 0x107f, 0xf59, 0x107f, 0xf59, 0x1071, 0xf71, +0x1071, 0xf71, 0x1071, 0xf71, 0xfef, 0xf15, 0xfef, 0xf15, 0x1040, 0xf8a, 0x1040, +0xf8a, 0xff4, 0xf63, 0xff4, 0xf63, 0xf66, 0xef9, 0xf66, 0xef9, 0xfa4, 0xf59, +0xfa4, 0xf59, 0xed5, 0xeab, 0xed5, 0xeab, 0xed5, 0xeab, 0xde5, 0xdda, 0xde5, +0xdda, 0xced, 0xcff, 0xced, 0xcff, 0xcd3, 0xcff, 0xcd3, 0xcff, 0xcfa, 0xd3e, +0xcfa, 0xd3e, 0xc37, 0xc91, 0xc37, 0xc91, 0xbe9, 0xc55, 0xbe9, 0xc55, 0xbe9, +0xc55, 0xbd5, 0xc50, 0xbd5, 0xc50, 0xacd, 0xb55, 0xacd, 0xb55, 0x98e, 0xa1f, +0x98e, 0xa1f, 0x8ab, 0x943, 0x8ab, 0x943, 0x784, 0x821, 0x784, 0x821, 0x784, +0x821, 0x5ea, 0x689, 0x5ea, 0x689, 0x4f2, 0x591, 0x4f2, 0x591, 0x4d9, 0x577, +0x4d9, 0x577, 0x3e4, 0x480, 0x3e4, 0x480, 0x40b, 0x4a4, 0x40b, 0x4a4, 0x36f, +0x404, 0x36f, 0x404, 0x36f, 0x404, 0x1fc, 0x28e, 0x1fc, 0x28e, 0x2df, 0x36d, +0x2df, 0x36d, 0x2c2, 0x34f, 0x2c2, 0x34f, 0x195, 0x221, 0x195, 0x221, 0x51, +0xdd, 0x51, 0xdd, 0xff2d, 0xffbb, 0xff2d, 0xffbb, 0xff2d, 0xffbb, 0xfdeb, 0xfe7e, +0xfdeb, 0xfe7e, 0xfd1e, 0xfdb8, 0xfd1e, 0xfdb8, 0xfd0d, 0xfdb0, 0xfd0d, 0xfdb0, 0xfcd5, +0xfd82, 0xfcd5, 0xfd82, 0xfca1, 0xfd5a, 0xfca1, 0xfd5a, 0xfca1, 0xfd5a, 0xfbe1, 0xfca9, +0xfbe1, 0xfca9, 0xfb9f, 0xfc78, 0xfb9f, 0xfc78, 0xfb3e, 0xfc28, 0xfb3e, 0xfc28, 0xfa8e, +0xfb8b, 0xfa8e, 0xfb8b, 0xf93d, 0xfa4d, 0xf93d, 0xfa4d, 0xf88e, 0xf9b1, 0xf88e, 0xf9b1, +0xf88e, 0xf9b1, 0xf874, 0xf9aa, 0xf874, 0xf9aa, 0xf7e5, 0xf92e, 0xf7e5, 0xf92e, 0xf831, +0xf98c, 0xf831, 0xf98c, 0xf70b, 0xf876, 0xf70b, 0xf876, 0xf689, 0xf803, 0xf689, 0xf803, +0xf758, 0xf8e0, 0xf758, 0xf8e0, 0xf758, 0xf8e0, 0xf751, 0xf8e3, 0xf751, 0xf8e3, 0xf7c2, +0xf95e, 0xf7c2, 0xf95e, 0xf814, 0xf9b7, 0xf814, 0xf9b7, 0xf7a2, 0xf94a, 0xf7a2, 0xf94a, +0xf792, 0xf93d, 0xf792, 0xf93d, 0xf792, 0xf93d, 0xf6df, 0xf88b, 0xf6df, 0xf88b, 0xf505, +0xf6b2, 0xf505, 0xf6b2, 0xf44f, 0xf5fa, 0xf44f, 0xf5fa, 0xf3c8, 0xf571, 0xf3c8, 0xf571, +0xf2b7, 0xf45d, 0xf2b7, 0xf45d, 0xf1ad, 0xf350, 0xf1ad, 0xf350, 0xf1ad, 0xf350, 0xf1dc, +0xf37d, 0xf1dc, 0xf37d, 0xf297, 0xf436, 0xf297, 0xf436, 0xf275, 0xf413, 0xf275, 0xf413, +0xf378, 0xf517, 0xf378, 0xf517, 0xf3d9, 0xf57b, 0xf3d9, 0xf57b, 0xf2a8, 0xf44e, 0xf2a8, +0xf44e, 0xf2a8, 0xf44e, 0xf24a, 0xf3f6, 0xf24a, 0xf3f6, 0xf1eb, 0xf3a1, 0xf1eb, 0xf3a1, +0xf122, 0xf2e4, 0xf122, 0xf2e4, 0xf03a, 0xf20a, 0xf03a, 0xf20a, 0xeed9, 0xf0b9, 0xeed9, +0xf0b9, 0xeed9, 0xf0b9, 0xeeb4, 0xf0a8, 0xeeb4, 0xf0a8, 0xeeb2, 0xf0bb, 0xeeb2, 0xf0bb, +0xee29, 0xf049, 0xee29, 0xf049, 0xeda3, 0xefdc, 0xeda3, 0xefdc, 0xecc7, 0xef19, 0xecc7, +0xef19, 0xec19, 0xee86, 0xec19, 0xee86, 0xec19, 0xee86, 0xea8b, 0xed15, 0xea8b, 0xed15, +0xe91a, 0xebbf, 0xe91a, 0xebbf, 0xe7bf, 0xea80, 0xe7bf, 0xea80, 0xe6a4, 0xe980, 0xe6a4, +0xe980, 0xe5f8, 0xe8ee, 0xe5f8, 0xe8ee, 0xe51c, 0xe82c, 0xe51c, 0xe82c, 0xe51c, 0xe82c, +0xe497, 0xe7be, 0xe497, 0xe7be, 0xe46c, 0xe7a9, 0xe46c, 0xe7a9, 0xe43d, 0xe78e, 0xe43d, +0xe78e, 0xe3a4, 0xe707, 0xe3a4, 0xe707, 0xe398, 0xe70b, 0xe398, 0xe70b, 0xe398, 0xe70b, +0xe2e8, 0xe668, 0xe2e8, 0xe668, 0xe2ab, 0xe635, 0xe2ab, 0xe635, 0xe224, 0xe5b7, 0xe224, +0xe5b7, 0xe0ea, 0xe483, 0xe0ea, 0xe483, 0xe115, 0xe4b2, 0xe115, 0xe4b2, 0xe0ac, 0xe44a, +0xe0ac, 0xe44a, 0xe0ac, 0xe44a, 0xe035, 0xe3d1, 0xe035, 0xe3d1, 0xe02e, 0xe3c6, 0xe02e, +0xe3c6, 0xdff6, 0xe388, 0xdff6, 0xe388, 0xdf9f, 0xe327, 0xdf9f, 0xe327, 0xdff7, 0xe374, +0xdff7, 0xe374, 0xdfad, 0xe31d, 0xdfad, 0xe31d, 0xdfad, 0xe31d, 0xdf46, 0xe2a5, 0xdf46, +0xe2a5, 0xe049, 0xe396, 0xe049, 0xe396, 0xe172, 0xe4aa, 0xe172, 0xe4aa, 0xe25a, 0xe57b, +0xe25a, 0xe57b, 0xe2f9, 0xe601, 0xe2f9, 0xe601, 0xe2f9, 0xe601, 0xe497, 0xe784, 0xe497, +0xe784, 0xe52b, 0xe7fb, 0xe52b, 0xe7fb, 0xe5df, 0xe891, 0xe5df, 0xe891, 0xe68a, 0xe91c, +0xe68a, 0xe91c, 0xe597, 0xe807, 0xe597, 0xe807, 0xe666, 0xe8b4, 0xe666, 0xe8b4, 0xe666, +0xe8b4, 0xe7ae, 0xe9da, 0xe7ae, 0xe9da, 0xe7e6, 0xe9ef, 0xe7e6, 0xe9ef, 0xe7ee, 0xe9d5, +0xe7ee, 0xe9d5, 0xe86a, 0xea2f, 0xe86a, 0xea2f, 0xe83f, 0xe9e4, 0xe83f, 0xe9e4, 0xe902, +0xea88, 0xe902, 0xea88, 0xe902, 0xea88, 0xea3b, 0xeba6, 0xea3b, 0xeba6, 0xea7e, 0xebd0, +0xea7e, 0xebd0, 0xeb7d, 0xecba, 0xeb7d, 0xecba, 0xeb86, 0xecb1, 0xeb86, 0xecb1, 0xebf1, +0xed0f, 0xebf1, 0xed0f, 0xebf1, 0xed0f, 0xed82, 0xee98, 0xed82, 0xee98, 0xef7d, 0xf08f, +0xef7d, 0xf08f, 0xf0e6, 0xf1f9, 0xf0e6, 0xf1f9, 0xf17a, 0xf293, 0xf17a, 0xf293, 0xf273, +0xf397, 0xf273, 0xf397, 0xf2d9, 0xf40b, 0xf2d9, 0xf40b, 0xf2d9, 0xf40b, 0xf3ab, 0xf4f1, +0xf3ab, 0xf4f1, 0xf3f8, 0xf554, 0xf3f8, 0xf554, 0xf35e, 0xf4d5, 0xf35e, 0xf4d5, 0xf31e, +0xf4b1, 0xf31e, 0xf4b1, 0xf2d2, 0xf483, 0xf2d2, 0xf483, 0xf2d2, 0xf483, 0xf3ef, 0xf5bd, +0xf3ef, 0xf5bd, 0xf5dd, 0xf7ca, 0xf5dd, 0xf7ca, 0xf58d, 0xf795, 0xf58d, 0xf795, 0xf4d4, +0xf6f5, 0xf4d4, 0xf6f5, 0xf62b, 0xf862, 0xf62b, 0xf862, 0xf6c8, 0xf911, 0xf6c8, 0xf911, +0xf6c8, 0xf911, 0xf791, 0xf9e6, 0xf791, 0xf9e6, 0xf854, 0xfaaf, 0xf854, 0xfaaf, 0xf79f, +0xf9f8, 0xf79f, 0xf9f8, 0xf85a, 0xfaaa, 0xf85a, 0xfaaa, 0xf8e5, 0xfb24, 0xf8e5, 0xfb24, +0xf8e5, 0xfb0d, 0xf8e5, 0xfb0d, 0xf8e5, 0xfb0d, 0xf96e, 0xfb74, 0xf96e, 0xfb74, 0xf97a, +0xfb58, 0xf97a, 0xfb58, 0xfa2e, 0xfbdb, 0xfa2e, 0xfbdb, 0xfbd4, 0xfd4a, 0xfbd4, 0xfd4a, +0xfda9, 0xfee0, 0xfda9, 0xfee0, 0xfda9, 0xfee0, 0xff47, 0x3b, 0xff47, 0x3b, 0xf1, +0x19c, 0xf1, 0x19c, 0x315, 0x375, 0x315, 0x375, 0x4f5, 0x507, 0x4f5, 0x507, +0x672, 0x634, 0x672, 0x634, 0x8ba, 0x82d, 0x8ba, 0x82d, 0x8ba, 0x82d, 0xa0f, +0x935, 0xa0f, 0x935, 0xad2, 0x9ad, 0xad2, 0x9ad, 0xc3a, 0xace, 0xc3a, 0xace, +0xd08, 0xb59, 0xd08, 0xb59, 0xf2d, 0xd42, 0xf2d, 0xd42, 0x11a3, 0xf83, 0x11a3, +0xf83, 0x11a3, 0xf83, 0x1342, 0x10f4, 0x1342, 0x10f4, 0x158a, 0x1314, 0x158a, 0x1314, +0x1758, 0x14c4, 0x1758, 0x14c4, 0x17ba, 0x150f, 0x17ba, 0x150f, 0x1796, 0x14dd, 0x1796, +0x14dd, 0x1796, 0x14dd, 0x1757, 0x1497, 0x1757, 0x1497, 0x1751, 0x1491, 0x1751, 0x1491, +0x1754, 0x149c, 0x1754, 0x149c, 0x16fd, 0x1451, 0x16fd, 0x1451, 0x173a, 0x14a0, 0x173a, +0x14a0, 0x16ba, 0x1436, 0x16ba, 0x1436, 0x16ba, 0x1436, 0x168e, 0x1424, 0x168e, 0x1424, +0x1647, 0x13f8, 0x1647, 0x13f8, 0x14f4, 0x12c1, 0x14f4, 0x12c1, 0x1415, 0x11ff, 0x1415, +0x11ff, 0x11f2, 0xff8, 0x11f2, 0xff8, 0x10b5, 0xed5, 0x10b5, 0xed5, 0x10b5, 0xed5, +0xf66, 0xd9f, 0xf66, 0xd9f, 0xcc9, 0xb17, 0xcc9, 0xb17, 0xc2b, 0xa8a, 0xc2b, +0xa8a, 0xc74, 0xae1, 0xc74, 0xae1, 0xcef, 0xb67, 0xcef, 0xb67, 0xcef, 0xb67, +0xdf4, 0xc71, 0xdf4, 0xc71, 0xe72, 0xcf1, 0xe72, 0xcf1, 0xe47, 0xcc6, 0xe47, +0xcc6, 0xe34, 0xcae, 0xe34, 0xcae, 0xd57, 0xbca, 0xd57, 0xbca, 0xc19, 0xa83, +0xc19, 0xa83, 0xc19, 0xa83, 0xb17, 0x977, 0xb17, 0x977, 0xa5b, 0x8b0, 0xa5b, +0x8b0, 0xac8, 0x911, 0xac8, 0x911, 0xace, 0x90d, 0xace, 0x90d, 0xa27, 0x85c, +0xa27, 0x85c, 0x956, 0x784, 0x956, 0x784, 0x956, 0x784, 0x96d, 0x796, 0x96d, +0x796, 0x9c7, 0x7ee, 0x9c7, 0x7ee, 0x84f, 0x677, 0x84f, 0x677, 0x804, 0x632, +0x804, 0x632, 0x8c7, 0x6fd, 0x8c7, 0x6fd, 0x8c7, 0x6fd, 0x891, 0x6d3, 0x891, +0x6d3, 0x7cd, 0x61f, 0x7cd, 0x61f, 0x665, 0x4cb, 0x665, 0x4cb, 0x5e5, 0x461, +0x5e5, 0x461, 0x5b2, 0x446, 0x5b2, 0x446, 0x4ca, 0x379, 0x4ca, 0x379, 0x4ca, +0x379, 0x460, 0x32b, 0x460, 0x32b, 0x3a4, 0x28c, 0x3a4, 0x28c, 0x21a, 0x120, +0x21a, 0x120, 0x156, 0x79, 0x156, 0x79, 0x125, 0x64, 0x125, 0x64, 0xb4, +0xd, 0xb4, 0xd, 0xb4, 0xd, 0xffe4, 0xff56, 0xffe4, 0xff56, 0xff73, 0xfefb, +0xff73, 0xfefb, 0xff3f, 0xfeda, 0xff3f, 0xfeda, 0xfdeb, 0xfd96, 0xfdeb, 0xfd96, 0xfd74, +0xfd2b, 0xfd74, 0xfd2b, 0xfd74, 0xfd2b, 0xfd44, 0xfd05, 0xfd44, 0xfd05, 0xfc5b, 0xfc22, +0xfc5b, 0xfc22, 0xfc72, 0xfc3b, 0xfc72, 0xfc3b, 0xfc66, 0xfc30, 0xfc66, 0xfc30, 0xfc8c, +0xfc53, 0xfc8c, 0xfc53, 0xfd36, 0xfcf8, 0xfd36, 0xfcf8, 0xfd36, 0xfcf8, 0xfcb3, 0xfc6e, +0xfcb3, 0xfc6e, 0xfbbd, 0xfb70, 0xfbbd, 0xfb70, 0xfb86, 0xfb30, 0xfb86, 0xfb30, 0xfaec, +0xfa8d, 0xfaec, 0xfa8d, 0xfaa6, 0xfa3f, 0xfaa6, 0xfa3f, 0xfaff, 0xfa8f, 0xfaff, 0xfa8f, +0xfaff, 0xfa8f, 0xfa8e, 0xfa18, 0xfa8e, 0xfa18, 0xfa6f, 0xf9f3, 0xfa6f, 0xf9f3, 0xfaea, +0xfa6c, 0xfaea, 0xfa6c, 0xfb60, 0xfae0, 0xfb60, 0xfae0, 0xfbcd, 0xfb4f, 0xfbcd, 0xfb4f, +0xfbcd, 0xfb4f, 0xfc8f, 0xfc14, 0xfc8f, 0xfc14, 0xfd3a, 0xfcc5, 0xfd3a, 0xfcc5, 0xfdd4, +0xfd67, 0xfdd4, 0xfd67, 0xfebd, 0xfe5a, 0xfebd, 0xfe5a, 0xff2d, 0xfed5, 0xff2d, 0xfed5, +0x10, 0xffc5, 0x10, 0xffc5, 0x10, 0xffc5, 0x112, 0xd4, 0x112, 0xd4, 0x102, +0xd2, 0x102, 0xd2, 0x17e, 0x15a, 0x17e, 0x15a, 0x293, 0x27c, 0x293, 0x27c, +0x2c9, 0x2bc, 0x2c9, 0x2bc, 0x2f1, 0x2ec, 0x2f1, 0x2ec, 0x2f1, 0x2ec, 0x2e6, +0x2e7, 0x2e6, 0x2e7, 0x29f, 0x2a3, 0x29f, 0x2a3, 0x3d1, 0x3d4, 0x3d1, 0x3d4, +0x4dc, 0x4db, 0x4dc, 0x4db, 0x5ed, 0x5e3, 0x5ed, 0x5e3, 0x5ed, 0x5e3, 0x7d4, +0x7be, 0x7d4, 0x7be, 0x892, 0x86a, 0x892, 0x86a, 0x98b, 0x94d, 0x98b, 0x94d, +0x9e1, 0x989, 0x9e1, 0x989, 0x91d, 0x8a7, 0x91d, 0x8a7, 0x942, 0x8aa, 0x942, +0x8aa, 0x942, 0x8aa, 0x9c0, 0x903, 0x9c0, 0x903, 0xacf, 0x9e9, 0xacf, 0x9e9, +0xbbe, 0xaad, 0xbbe, 0xaad, 0xd21, 0xbe4, 0xd21, 0xbe4, 0xf4c, 0xde1, 0xf4c, +0xde1, 0x10c5, 0xf2c, 0x10c5, 0xf2c, 0x10c5, 0xf2c, 0x11dd, 0x1014, 0x11dd, 0x1014, +0x1310, 0x1119, 0x1310, 0x1119, 0x13de, 0x11ba, 0x13de, 0x11ba, 0x1497, 0x1247, 0x1497, +0x1247, 0x157e, 0x1304, 0x157e, 0x1304, 0x157e, 0x1304, 0x15e6, 0x1345, 0x15e6, 0x1345, +0x16f6, 0x1431, 0x16f6, 0x1431, 0x17b9, 0x14d2, 0x17b9, 0x14d2, 0x18eb, 0x15e6, 0x18eb, +0x15e6, 0x1b45, 0x1826, 0x1b45, 0x1826, 0x1c97, 0x1962, 0x1c97, 0x1962, 0x1c97, 0x1962, +0x1d09, 0x19c2, 0x1d09, 0x19c2, 0x1cfe, 0x19a8, 0x1cfe, 0x19a8, 0x1d1f, 0x19be, 0x1d1f, +0x19be, 0x1c60, 0x18f7, 0x1c60, 0x18f7, 0x1b6b, 0x17fd, 0x1b6b, 0x17fd, 0x1b6b, 0x17fd, +0x1b5a, 0x17ea, 0x1b5a, 0x17ea, 0x1b7c, 0x180e, 0x1b7c, 0x180e, 0x1bf1, 0x1887, 0x1bf1, +0x1887, 0x1c7b, 0x1917, 0x1c7b, 0x1917, 0x1cb5, 0x1959, 0x1cb5, 0x1959, 0x1c4c, 0x18f9, +0x1c4c, 0x18f9, 0x1c4c, 0x18f9, 0x1ba6, 0x185f, 0x1ba6, 0x185f, 0x1b0b, 0x17d1, 0x1b0b, +0x17d1, 0x1b17, 0x17eb, 0x1b17, 0x17eb, 0x1a29, 0x170b, 0x1a29, 0x170b, 0x1898, 0x1589, +0x1898, 0x1589, 0x17c4, 0x14c6, 0x17c4, 0x14c6, 0x17c4, 0x14c6, 0x1679, 0x138b, 0x1679, +0x138b, 0x157c, 0x12a0, 0x157c, 0x12a0, 0x149b, 0x11d0, 0x149b, 0x11d0, 0x1318, 0x1061, +0x1318, 0x1061, 0x1203, 0xf5f, 0x1203, 0xf5f, 0x1203, 0xf5f, 0x1186, 0xef5, 0x1186, +0xef5, 0x1066, 0xde9, 0x1066, 0xde9, 0xfbf, 0xd57, 0xfbf, 0xd57, 0xf79, 0xd27, +0xf79, 0xd27, 0xf56, 0xd1b, 0xf56, 0xd1b, 0xf99, 0xd75, 0xf99, 0xd75, 0xf99, +0xd75, 0xea9, 0xc9d, 0xea9, 0xc9d, 0xdea, 0xbf7, 0xdea, 0xbf7, 0xd5d, 0xb84, +0xd5d, 0xb84, 0xd0f, 0xb51, 0xd0f, 0xb51, 0xc9e, 0xafa, 0xc9e, 0xafa, 0xaef, +0x967, 0xaef, 0x967, 0xaef, 0x967, 0x9d0, 0x864, 0x9d0, 0x864, 0x993, 0x844, +0x993, 0x844, 0xa3c, 0x90a, 0xa3c, 0x90a, 0xa51, 0x93b, 0xa51, 0x93b, 0x923, +0x82a, 0x923, 0x82a, 0x923, 0x82a, 0x822, 0x745, 0x822, 0x745, 0x6dc, 0x61b, +0x6dc, 0x61b, 0x57b, 0x4d6, 0x57b, 0x4d6, 0x43a, 0x3b0, 0x43a, 0x3b0, 0x30a, +0x299, 0x30a, 0x299, 0x1d3, 0x17b, 0x1d3, 0x17b, 0x1d3, 0x17b, 0xee, 0xae, +0xee, 0xae, 0xeb, 0xc2, 0xeb, 0xc2, 0xb4, 0xa1, 0xb4, 0xa1, 0xff95, +0xff96, 0xff95, 0xff96, 0xfe82, 0xfe97, 0xfe82, 0xfe97, 0xfe4f, 0xfe78, 0xfe4f, 0xfe78, +0xfe4f, 0xfe78, 0xfdbc, 0xfdf6, 0xfdbc, 0xfdf6, 0xfd1b, 0xfd66, 0xfd1b, 0xfd66, 0xfc4f, +0xfcab, 0xfc4f, 0xfcab, 0xfb7e, 0xfbea, 0xfb7e, 0xfbea, 0xfb22, 0xfb9d, 0xfb22, 0xfb9d, +0xfb22, 0xfb9d, 0xf9c7, 0xfa51, 0xf9c7, 0xfa51, 0xfa27, 0xfac1, 0xfa27, 0xfac1, 0xfb06, +0xfbae, 0xfb06, 0xfbae, 0xfa5a, 0xfb12, 0xfa5a, 0xfb12, 0xf994, 0xfa5c, 0xf994, 0xfa5c, +0xf88b, 0xf962, 0xf88b, 0xf962, 0xf88b, 0xf962, 0xf762, 0xf84a, 0xf762, 0xf84a, 0xf63c, +0xf735, 0xf63c, 0xf735, 0xf639, 0xf743, 0xf639, 0xf743, 0xf626, 0xf742, 0xf626, 0xf742, +0xf652, 0xf780, 0xf652, 0xf780, 0xf69a, 0xf7db, 0xf69a, 0xf7db, 0xf69a, 0xf7db, 0xf679, +0xf7cd, 0xf679, 0xf7cd, 0xf6ac, 0xf813, 0xf6ac, 0xf813, 0xf5be, 0xf739, 0xf5be, 0xf739, +0xf5cc, 0xf75a, 0xf5cc, 0xf75a, 0xf6f1, 0xf892, 0xf6f1, 0xf892, 0xf6f1, 0xf892, 0xf6e7, +0xf89a, 0xf6e7, 0xf89a, 0xf6d6, 0xf89c, 0xf6d6, 0xf89c, 0xf7c8, 0xf99f, 0xf7c8, 0xf99f, +0xf853, 0xfa3a, 0xf853, 0xfa3a, 0xf7d8, 0xf9cf, 0xf7d8, 0xf9cf, 0xf77f, 0xf984, 0xf77f, +0xf984, 0xf77f, 0xf984, 0xf754, 0xf966, 0xf754, 0xf966, 0xf67b, 0xf897, 0xf67b, 0xf897, +0xf506, 0xf72c, 0xf506, 0xf72c, 0xf36e, 0xf59d, 0xf36e, 0xf59d, 0xf28d, 0xf4c3, 0xf28d, +0xf4c3, 0xf2e7, 0xf523, 0xf2e7, 0xf523, 0xf2e7, 0xf523, 0xf34b, 0xf58c, 0xf34b, 0xf58c, +0xf483, 0xf6c7, 0xf483, 0xf6c7, 0xf544, 0xf78a, 0xf544, 0xf78a, 0xf4a7, 0xf6f0, 0xf4a7, +0xf6f0, 0xf4d1, 0xf71c, 0xf4d1, 0xf71c, 0xf4d1, 0xf71c, 0xf449, 0xf696, 0xf449, 0xf696, +0xf30b, 0xf559, 0xf30b, 0xf559, 0xf26b, 0xf4bc, 0xf26b, 0xf4bc, 0xf212, 0xf466, 0xf212, +0xf466, 0xf1c0, 0xf418, 0xf1c0, 0xf418, 0xf1a1, 0xf3ff, 0xf1a1, 0xf3ff, 0xf1a1, 0xf3ff, +0xf1b6, 0xf41a, 0xf1b6, 0xf41a, 0xf1b5, 0xf422, 0xf1b5, 0xf422, 0xf139, 0xf3b1, 0xf139, +0xf3b1, 0xf064, 0xf2e9, 0xf064, 0xf2e9, 0xef57, 0xf1eb, 0xef57, 0xf1eb, 0xeda7, 0xf04c, +0xeda7, 0xf04c, 0xeda7, 0xf04c, 0xed25, 0xefdd, 0xed25, 0xefdd, 0xec6c, 0xef3a, 0xec6c, +0xef3a, 0xea8f, 0xed75, 0xea8f, 0xed75, 0xe9b0, 0xecaf, 0xe9b0, 0xecaf, 0xe8da, 0xebf3, +0xe8da, 0xebf3, 0xe8da, 0xebf3, 0xe95b, 0xec8f, 0xe95b, 0xec8f, 0xe9db, 0xed2b, 0xe9db, +0xed2b, 0xe8ac, 0xec19, 0xe8ac, 0xec19, 0xe82a, 0xebb3, 0xe82a, 0xebb3, 0xe7f2, 0xeb97, +0xe7f2, 0xeb97, 0xe7ad, 0xeb6c, 0xe7ad, 0xeb6c, 0xe7ad, 0xeb6c, 0xe64f, 0xea27, 0xe64f, +0xea27, 0xe4e3, 0xe8d1, 0xe4e3, 0xe8d1, 0xe461, 0xe862, 0xe461, 0xe862, 0xe3ee, 0xe801, +0xe3ee, 0xe801, 0xe40e, 0xe82e, 0xe40e, 0xe82e, 0xe376, 0xe79f, 0xe376, 0xe79f, 0xe376, +0xe79f, 0xe2f2, 0xe721, 0xe2f2, 0xe721, 0xe2e9, 0xe719, 0xe2e9, 0xe719, 0xe298, 0xe6c5, +0xe298, 0xe6c5, 0xe2e3, 0xe707, 0xe2e3, 0xe707, 0xe2c0, 0xe6d8, 0xe2c0, 0xe6d8, 0xe2c0, +0xe6d8, 0xe27b, 0xe681, 0xe27b, 0xe681, 0xe3bf, 0xe7b0, 0xe3bf, 0xe7b0, 0xe4a7, 0xe87f, +0xe4a7, 0xe87f, 0xe4ba, 0xe875, 0xe4ba, 0xe875, 0xe4f3, 0xe88e, 0xe4f3, 0xe88e, 0xe45b, +0xe7d2, 0xe45b, 0xe7d2, 0xe45b, 0xe7d2, 0xe4ad, 0xe7fe, 0xe4ad, 0xe7fe, 0xe605, 0xe92f, +0xe605, 0xe92f, 0xe6a2, 0xe9a4, 0xe6a2, 0xe9a4, 0xe6e3, 0xe9bc, 0xe6e3, 0xe9bc, 0xe72f, +0xe9df, 0xe72f, 0xe9df, 0xe7b4, 0xea3c, 0xe7b4, 0xea3c, 0xe7b4, 0xea3c, 0xe835, 0xea97, +0xe835, 0xea97, 0xe8b5, 0xeaf2, 0xe8b5, 0xeaf2, 0xe906, 0xeb22, 0xe906, 0xeb22, 0xe8a8, +0xeaa6, 0xe8a8, 0xeaa6, 0xe819, 0xe9fd, 0xe819, 0xe9fd, 0xe819, 0xe9fd, 0xe81d, 0xe9e9, +0xe81d, 0xe9e9, 0xe819, 0xe9d4, 0xe819, 0xe9d4, 0xe845, 0xe9f2, 0xe845, 0xe9f2, 0xe955, +0xeaf9, 0xe955, 0xeaf9, 0xeb09, 0xeca9, 0xeb09, 0xeca9, 0xecee, 0xee8f, 0xecee, 0xee8f, +0xecee, 0xee8f, 0xedde, 0xef83, 0xedde, 0xef83, 0xee1a, 0xefc9, 0xee1a, 0xefc9, 0xeea3, +0xf05e, 0xeea3, 0xf05e, 0xee65, 0xf031, 0xee65, 0xf031, 0xedbe, 0xef9c, 0xedbe, 0xef9c, +0xedbe, 0xef9c, 0xee2c, 0xf01f, 0xee2c, 0xf01f, 0xee7b, 0xf083, 0xee7b, 0xf083, 0xee2a, +0xf049, 0xee2a, 0xf049, 0xee56, 0xf08b, 0xee56, 0xf08b, 0xef10, 0xf15a, 0xef10, 0xf15a, +0xef8e, 0xf1eb, 0xef8e, 0xf1eb, 0xef8e, 0xf1eb, 0xefe9, 0xf256, 0xefe9, 0xf256, 0xf0b1, +0xf32b, 0xf0b1, 0xf32b, 0xf1c1, 0xf444, 0xf1c1, 0xf444, 0xf288, 0xf50f, 0xf288, 0xf50f, +0xf2dd, 0xf562, 0xf2dd, 0xf562, 0xf29d, 0xf51b, 0xf29d, 0xf51b, 0xf29d, 0xf51b, 0xf2cf, +0xf540, 0xf2cf, 0xf540, 0xf353, 0xf5b0, 0xf353, 0xf5b0, 0xf25e, 0xf4a1, 0xf25e, 0xf4a1, +0xf2e0, 0xf502, 0xf2e0, 0xf502, 0xf350, 0xf54b, 0xf350, 0xf54b, 0xf350, 0xf54b, 0xf344, +0xf513, 0xf344, 0xf513, 0xf49f, 0xf63b, 0xf49f, 0xf63b, 0xf4d0, 0xf634, 0xf4d0, 0xf634, +0xf652, 0xf77a, 0xf652, 0xf77a, 0xf7f3, 0xf8dc, 0xf7f3, 0xf8dc, 0xf9f6, 0xfa9c, 0xf9f6, +0xfa9c, 0xf9f6, 0xfa9c, 0xfcb3, 0xfd13, 0xfcb3, 0xfd13, 0xfe3c, 0xfe57, 0xfe3c, 0xfe57, +0x9, 0xffdc, 0x9, 0xffdc, 0x1b7, 0x144, 0x1b7, 0x144, 0x439, 0x380, 0x439, +0x380, 0x52c, 0x42f, 0x52c, 0x42f, 0x52c, 0x42f, 0x58c, 0x44e, 0x58c, 0x44e, +0x78a, 0x60f, 0x78a, 0x60f, 0x9b1, 0x7fc, 0x9b1, 0x7fc, 0xcb3, 0xac8, 0xcb3, +0xac8, 0xf34, 0xd19, 0xf34, 0xd19, 0xf34, 0xd19, 0x10e7, 0xea0, 0x10e7, 0xea0, +0x1256, 0xfe9, 0x1256, 0xfe9, 0x1338, 0x10aa, 0x1338, 0x10aa, 0x13d3, 0x1129, 0x13d3, +0x1129, 0x146d, 0x11ad, 0x146d, 0x11ad, 0x150f, 0x123d, 0x150f, 0x123d, 0x150f, 0x123d, +0x15d5, 0x12f7, 0x15d5, 0x12f7, 0x16c8, 0x13e1, 0x16c8, 0x13e1, 0x1779, 0x148e, 0x1779, +0x148e, 0x17f1, 0x1506, 0x17f1, 0x1506, 0x1818, 0x152f, 0x1818, 0x152f, 0x182c, 0x1548, +0x182c, 0x1548, 0x182c, 0x1548, 0x17ff, 0x1522, 0x17ff, 0x1522, 0x16bf, 0x13ec, 0x16bf, +0x13ec, 0x156a, 0x12a0, 0x156a, 0x12a0, 0x1423, 0x1164, 0x1423, 0x1164, 0x1335, 0x1081, +0x1335, 0x1081, 0x1335, 0x1081, 0x125c, 0xfb4, 0x125c, 0xfb4, 0x10dd, 0xe40, 0x10dd, +0xe40, 0x10e8, 0xe56, 0x10e8, 0xe56, 0x10bc, 0xe33, 0x10bc, 0xe33, 0x105e, 0xddf, +0x105e, 0xddf, 0x1126, 0xeb0, 0x1126, 0xeb0, 0x1126, 0xeb0, 0x115f, 0xef1, 0x115f, +0xef1, 0x115c, 0xef5, 0x115c, 0xef5, 0x115a, 0xefa, 0x115a, 0xefa, 0x121d, 0xfc5, +0x121d, 0xfc5, 0x11a1, 0xf50, 0x11a1, 0xf50, 0x10dc, 0xe92, 0x10dc, 0xe92, 0x10dc, +0xe92, 0x119e, 0xf5b, 0x119e, 0xf5b, 0x1159, 0xf20, 0x1159, 0xf20, 0x10f7, 0xec7, +0x10f7, 0xec7, 0x10d7, 0xeb3, 0x10d7, 0xeb3, 0x1052, 0xe3b, 0x1052, 0xe3b, 0x1052, +0xe3b, 0x104c, 0xe43, 0x104c, 0xe43, 0x1085, 0xe8c, 0x1085, 0xe8c, 0x1033, 0xe4d, +0x1033, 0xe4d, 0xfa3, 0xdd1, 0xfa3, 0xdd1, 0xeb0, 0xcf4, 0xeb0, 0xcf4, 0xdc8, +0xc25, 0xdc8, 0xc25, 0xdc8, 0xc25, 0xd77, 0xbee, 0xd77, 0xbee, 0xcc7, 0xb59, +0xcc7, 0xb59, 0xb70, 0xa1f, 0xb70, 0xa1f, 0xa14, 0x8e0, 0xa14, 0x8e0, 0x963, +0x84c, 0x963, 0x84c, 0x91a, 0x821, 0x91a, 0x821, 0x91a, 0x821, 0x80a, 0x72f, +0x80a, 0x72f, 0x63f, 0x581, 0x63f, 0x581, 0x59e, 0x4fb, 0x59e, 0x4fb, 0x5b0, +0x527, 0x5b0, 0x527, 0x574, 0x503, 0x574, 0x503, 0x574, 0x503, 0x527, 0x4cb, +0x527, 0x4cb, 0x443, 0x3fa, 0x443, 0x3fa, 0x32c, 0x2f3, 0x32c, 0x2f3, 0x2f3, +0x2c6, 0x2f3, 0x2c6, 0x321, 0x2fd, 0x321, 0x2fd, 0x238, 0x21b, 0x238, 0x21b, +0x238, 0x21b, 0x12b, 0x111, 0x12b, 0x111, 0xe6, 0xcc, 0xe6, 0xcc, 0xfa, +0xde, 0xfa, 0xde, 0x9a, 0x79, 0x9a, 0x79, 0xff70, 0xff48, 0xff70, 0xff48, +0xfe99, 0xfe68, 0xfe99, 0xfe68, 0xfe99, 0xfe68, 0xfdc9, 0xfd8d, 0xfdc9, 0xfd8d, 0xfd4f, +0xfd08, 0xfd4f, 0xfd08, 0xfda9, 0xfd57, 0xfda9, 0xfd57, 0xfd52, 0xfcf4, 0xfd52, 0xfcf4, +0xfcb3, 0xfc4a, 0xfcb3, 0xfc4a, 0xfcb3, 0xfc4a, 0xfc03, 0xfb90, 0xfc03, 0xfb90, 0xfba0, +0xfb23, 0xfba0, 0xfb23, 0xfc48, 0xfbc3, 0xfc48, 0xfbc3, 0xfbf5, 0xfb69, 0xfbf5, 0xfb69, +0xfbd4, 0xfb44, 0xfbd4, 0xfb44, 0xfc85, 0xfbf1, 0xfc85, 0xfbf1, 0xfc85, 0xfbf1, 0xfd20, +0xfc8c, 0xfd20, 0xfc8c, 0xfe05, 0xfd72, 0xfe05, 0xfd72, 0xfe46, 0xfdb5, 0xfe46, 0xfdb5, +0xfe77, 0xfdea, 0xfe77, 0xfdea, 0xff1b, 0xfe93, 0xff1b, 0xfe93, 0x59, 0xffd7, 0x59, +0xffd7, 0x59, 0xffd7, 0x7c, 0, 0x7c, 0, 0xffd3, 0xff5e, 0xffd3, 0xff5e, +0xffec, 0xff7d, 0xffec, 0xff7d, 0xffd4, 0xff6a, 0xffd4, 0xff6a, 0xa, 0xffa4, 0xa, +0xffa4, 0xa, 0xffa4, 0x2d, 0xffca, 0x2d, 0xffca, 0x8c, 0x2a, 0x8c, 0x2a, +0xc3, 0x60, 0xc3, 0x60, 0x1b7, 0x14f, 0x1b7, 0x14f, 0x37a, 0x30c, 0x37a, +0x30c, 0x422, 0x3a9, 0x422, 0x3a9, 0x422, 0x3a9, 0x4e2, 0x45c, 0x4e2, 0x45c, +0x4de, 0x449, 0x4de, 0x449, 0x56e, 0x4c5, 0x56e, 0x4c5, 0x5d4, 0x514, 0x5d4, +0x514, 0x4ca, 0x3f1, 0x4ca, 0x3f1, 0x4f6, 0x401, 0x4f6, 0x401, 0x4f6, 0x401, +0x4e6, 0x3d2, 0x4e6, 0x3d2, 0x62a, 0x4f5, 0x62a, 0x4f5, 0x867, 0x70f, 0x867, +0x70f, 0x9d9, 0x85d, 0x9d9, 0x85d, 0xb68, 0x9c6, 0xb68, 0x9c6, 0xb68, 0x9c6, +0xc0a, 0xa42, 0xc0a, 0xa42, 0xd56, 0xb67, 0xd56, 0xb67, 0xe99, 0xc84, 0xe99, +0xc84, 0xf52, 0xd17, 0xf52, 0xd17, 0x1096, 0xe35, 0x1096, 0xe35, 0x1213, 0xf8e, +0x1213, 0xf8e, 0x1213, 0xf8e, 0x13a3, 0x10fc, 0x13a3, 0x10fc, 0x148e, 0x11c6, 0x148e, +0x11c6, 0x1609, 0x1322, 0x1609, 0x1322, 0x17df, 0x14dd, 0x17df, 0x14dd, 0x18a0, 0x1584, +0x18a0, 0x1584, 0x18a0, 0x1584, 0x1872, 0x153e, 0x1872, 0x153e, 0x18ca, 0x1582, 0x18ca, +0x1582, 0x1973, 0x161a, 0x1973, 0x161a, 0x198b, 0x1622, 0x198b, 0x1622, 0x1955, 0x15e1, +0x1955, 0x15e1, 0x189f, 0x1522, 0x189f, 0x1522, 0x189f, 0x1522, 0x1902, 0x157e, 0x1902, +0x157e, 0x1917, 0x158f, 0x1917, 0x158f, 0x1979, 0x15f0, 0x1979, 0x15f0, 0x1ade, 0x1756, +0x1ade, 0x1756, 0x1ab5, 0x1730, 0x1ab5, 0x1730, 0x1b26, 0x17a5, 0x1b26, 0x17a5, 0x1b26, +0x17a5, 0x1b2a, 0x17b0, 0x1b2a, 0x17b0, 0x1b0c, 0x179a, 0x1b0c, 0x179a, 0x19cb, 0x1663, +0x19cb, 0x1663, 0x170d, 0x13af, 0x170d, 0x13af, 0x174f, 0x13fd, 0x174f, 0x13fd, 0x174f, +0x13fd, 0x166b, 0x1326, 0x166b, 0x1326, 0x157d, 0x1247, 0x157d, 0x1247, 0x15a1, 0x1279, +0x15a1, 0x1279, 0x1456, 0x113d, 0x1456, 0x113d, 0x13f8, 0x10f0, 0x13f8, 0x10f0, 0x138d, +0x1096, 0x138d, 0x1096, 0x138d, 0x1096, 0x13c7, 0x10e2, 0x13c7, 0x10e2, 0x13c4, 0x10f1, +0x13c4, 0x10f1, 0x1318, 0x1059, 0x1318, 0x1059, 0x1269, 0xfbf, 0x1269, 0xfbf, 0x1105, +0xe70, 0x1105, 0xe70, 0x101c, 0xd9e, 0x101c, 0xd9e, 0x101c, 0xd9e, 0xf97, 0xd31, +0xf97, 0xd31, 0xf5d, 0xd10, 0xf5d, 0xd10, 0xf78, 0xd46, 0xf78, 0xd46, 0xf96, +0xd80, 0xf96, 0xd80, 0xeef, 0xcf6, 0xeef, 0xcf6, 0xeef, 0xcf6, 0xf0a, 0xd30, +0xf0a, 0xd30, 0xf5c, 0xda1, 0xf5c, 0xda1, 0xea8, 0xd0e, 0xea8, 0xd0e, 0xdfc, +0xc85, 0xdfc, 0xc85, 0xcad, 0xb5a, 0xcad, 0xb5a, 0xbdf, 0xab0, 0xbdf, 0xab0, +0xbdf, 0xab0, 0xae6, 0x9dc, 0xae6, 0x9dc, 0x969, 0x884, 0x969, 0x884, 0x8cb, +0x80c, 0x8cb, 0x80c, 0x772, 0x6d7, 0x772, 0x6d7, 0x5ae, 0x538, 0x5ae, 0x538, +0x4ae, 0x45c, 0x4ae, 0x45c, 0x4ae, 0x45c, 0x3ea, 0x3bb, 0x3ea, 0x3bb, 0x3a1, +0x393, 0x3a1, 0x393, 0x2ce, 0x2e0, 0x2ce, 0x2e0, 0x168, 0x199, 0x168, 0x199, +0x71, 0xbe, 0x71, 0xbe, 0x71, 0xbe, 0xffb7, 0x1f, 0xffb7, 0x1f, 0xff45, +0xffc5, 0xff45, 0xffc5, 0xfe75, 0xff0c, 0xfe75, 0xff0c, 0xfd95, 0xfe42, 0xfd95, 0xfe42, +0xfd06, 0xfdc6, 0xfd06, 0xfdc6, 0xfd4b, 0xfe1d, 0xfd4b, 0xfe1d, 0xfd4b, 0xfe1d, 0xfddc, +0xfebf, 0xfddc, 0xfebf, 0xfdac, 0xfe9e, 0xfdac, 0xfe9e, 0xfcec, 0xfded, 0xfcec, 0xfded, +0xfc86, 0xfd95, 0xfc86, 0xfd95, 0xfc7d, 0xfd9a, 0xfc7d, 0xfd9a, 0xfb95, 0xfcc1, 0xfb95, +0xfcc1, 0xfb95, 0xfcc1, 0xfa83, 0xfbbd, 0xfa83, 0xfbbd, 0xf8cd, 0xfa16, 0xf8cd, 0xfa16, +0xf7db, 0xf934, 0xf7db, 0xf934, 0xf82c, 0xf996, 0xf82c, 0xf996, 0xf78b, 0xf906, 0xf78b, +0xf906, 0xf78b, 0xf906, 0xf6ab, 0xf838, 0xf6ab, 0xf838, 0xf6f8, 0xf89a, 0xf6f8, 0xf89a, +0xf806, 0xf9bc, 0xf806, 0xf9bc, 0xf7ee, 0xf9b9, 0xf7ee, 0xf9b9, 0xf7e0, 0xf9c1, 0xf7e0, +0xf9c1, 0xf7a4, 0xf99c, 0xf7a4, 0xf99c, 0xf7a4, 0xf99c, 0xf756, 0xf963, 0xf756, 0xf963, +0xf7f2, 0xfa15, 0xf7f2, 0xfa15, 0xf7e1, 0xfa19, 0xf7e1, 0xfa19, 0xf752, 0xf99d, 0xf752, +0xf99d, 0xf6b9, 0xf916, 0xf6b9, 0xf916, 0xf650, 0xf8bd, 0xf650, 0xf8bd, 0xf650, 0xf8bd, +0xf553, 0xf7cf, 0xf553, 0xf7cf, 0xf3f3, 0xf67a, 0xf3f3, 0xf67a, 0xf313, 0xf5a4, 0xf313, +0xf5a4, 0xf256, 0xf4ee, 0xf256, 0xf4ee, 0xf247, 0xf4e4, 0xf247, 0xf4e4, 0xf247, 0xf4e4, +0xf308, 0xf5a7, 0xf308, 0xf5a7, 0xf381, 0xf61f, 0xf381, 0xf61f, 0xf3a5, 0xf641, 0xf3a5, +0xf641, 0xf365, 0xf5fd, 0xf365, 0xf5fd, 0xf2a0, 0xf532, 0xf2a0, 0xf532, 0xf21f, 0xf4ab, +0xf21f, 0xf4ab, 0xf21f, 0xf4ab, 0xf100, 0xf385, 0xf100, 0xf385, 0xf019, 0xf297, 0xf019, +0xf297, 0xefef, 0xf265, 0xefef, 0xf265, 0xefa0, 0xf210, 0xefa0, 0xf210, 0xefb7, 0xf223, +0xefb7, 0xf223, 0xef11, 0xf17a, 0xef11, 0xf17a, 0xef11, 0xf17a, 0xee7c, 0xf0e3, 0xee7c, +0xf0e3, 0xee7e, 0xf0e5, 0xee7e, 0xf0e5, 0xedfb, 0xf066, 0xedfb, 0xf066, 0xed56, 0xefc6, +0xed56, 0xefc6, 0xec0f, 0xee88, 0xec0f, 0xee88, 0xec0f, 0xee88, 0xead0, 0xed53, 0xead0, +0xed53, 0xe980, 0xec0f, 0xe980, 0xec0f, 0xe7da, 0xea77, 0xe7da, 0xea77, 0xe708, 0xe9b5, +0xe708, 0xe9b5, 0xe68b, 0xe94a, 0xe68b, 0xe94a, 0xe647, 0xe917, 0xe647, 0xe917, 0xe647, +0xe917, 0xe6d8, 0xe9ba, 0xe6d8, 0xe9ba, 0xe776, 0xea6a, 0xe776, 0xea6a, 0xe749, 0xea4f, +0xe749, 0xea4f, 0xe719, 0xea2e, 0xe719, 0xea2e, 0xe619, 0xe93d, 0xe619, 0xe93d, 0xe4c3, +0xe7f3, 0xe4c3, 0xe7f3, 0xe4c3, 0xe7f3, 0xe390, 0xe6cb, 0xe390, 0xe6cb, 0xe249, 0xe58d, +0xe249, 0xe58d, 0xe288, 0xe5d1, 0xe288, 0xe5d1, 0xe1ee, 0xe53a, 0xe1ee, 0xe53a, 0xe13c, +0xe488, 0xe13c, 0xe488, 0xe13c, 0xe488, 0xe196, 0xe4e0, 0xe196, 0xe4e0, 0xe160, 0xe4a5, +0xe160, 0xe4a5, 0xe1d0, 0xe50e, 0xe1d0, 0xe50e, 0xe24d, 0xe582, 0xe24d, 0xe582, 0xe2e5, +0xe610, 0xe2e5, 0xe610, 0xe36a, 0xe689, 0xe36a, 0xe689, 0xe36a, 0xe689, 0xe351, 0xe664, +0xe351, 0xe664, 0xe38d, 0xe692, 0xe38d, 0xe692, 0xe35a, 0xe652, 0xe35a, 0xe652, 0xe322, +0xe60b, 0xe322, 0xe60b, 0xe3de, 0xe6b9, 0xe3de, 0xe6b9, 0xe492, 0xe760, 0xe492, 0xe760, +0xe492, 0xe760, 0xe60a, 0xe8cb, 0xe60a, 0xe8cb, 0xe761, 0xea15, 0xe761, 0xea15, 0xe782, +0xea2b, 0xe782, 0xea2b, 0xe811, 0xeaae, 0xe811, 0xeaae, 0xe879, 0xeb0c, 0xe879, 0xeb0c, +0xe879, 0xeb0c, 0xe915, 0xeb9c, 0xe915, 0xeb9c, 0xe9d8, 0xec56, 0xe9d8, 0xec56, 0xea4d, +0xecc0, 0xea4d, 0xecc0, 0xea9d, 0xed06, 0xea9d, 0xed06, 0xea86, 0xece4, 0xea86, 0xece4, +0xeaf5, 0xed48, 0xeaf5, 0xed48, 0xeaf5, 0xed48, 0xebd6, 0xee1e, 0xebd6, 0xee1e, 0xeca2, +0xeedf, 0xeca2, 0xeedf, 0xed8a, 0xefbb, 0xed8a, 0xefbb, 0xee1c, 0xf041, 0xee1c, 0xf041, +0xeed6, 0xf0ee, 0xeed6, 0xf0ee, 0xeed6, 0xf0ee, 0xf08a, 0xf295, 0xf08a, 0xf295, 0xf169, +0xf366, 0xf169, 0xf366, 0xf1c5, 0xf3b6, 0xf1c5, 0xf3b6, 0xf226, 0xf40a, 0xf226, 0xf40a, +0xf2d5, 0xf4ad, 0xf2d5, 0xf4ad, 0xf3de, 0xf5ab, 0xf3de, 0xf5ab, 0xf3de, 0xf5ab, 0xf418, +0xf5da, 0xf418, 0xf5da, 0xf446, 0xf5fe, 0xf446, 0xf5fe, 0xf493, 0xf642, 0xf493, 0xf642, +0xf601, 0xf7a9, 0xf601, 0xf7a9, 0xf6a5, 0xf846, 0xf6a5, 0xf846, 0xf6a1, 0xf83d, 0xf6a1, +0xf83d, 0xf6a1, 0xf83d, 0xf758, 0xf8ee, 0xf758, 0xf8ee, 0xf7f9, 0xf98a, 0xf7f9, 0xf98a, +0xf8ec, 0xfa78, 0xf8ec, 0xfa78, 0xf845, 0xf9cb, 0xf845, 0xf9cb, 0xf7d2, 0xf951, 0xf7d2, +0xf951, 0xf7d2, 0xf951, 0xf7ac, 0xf922, 0xf7ac, 0xf922, 0xf738, 0xf8a3, 0xf738, 0xf8a3, +0xf75c, 0xf8b8, 0xf75c, 0xf8b8, 0xf75f, 0xf8aa, 0xf75f, 0xf8aa, 0xf7ea, 0xf91f, 0xf7ea, +0xf91f, 0xf840, 0xf95a, 0xf840, 0xf95a, 0xf840, 0xf95a, 0xf8ad, 0xf9a8, 0xf8ad, 0xf9a8, +0xf8f3, 0xf9c9, 0xf8f3, 0xf9c9, 0xf994, 0xfa3f, 0xf994, 0xfa3f, 0xfab0, 0xfb2b, 0xfab0, +0xfb2b, 0xfc04, 0xfc4b, 0xfc04, 0xfc4b, 0xfe6a, 0xfe77, 0xfe6a, 0xfe77, 0xfe6a, 0xfe77, +0xcb, 0x9a, 0xcb, 0x9a, 0x316, 0x2a2, 0x316, 0x2a2, 0x54f, 0x497, 0x54f, +0x497, 0x718, 0x61a, 0x718, 0x61a, 0x866, 0x721, 0x866, 0x721, 0x866, 0x721, +0x9fd, 0x871, 0x9fd, 0x871, 0xb5c, 0x98a, 0xb5c, 0x98a, 0xc51, 0xa3d, 0xc51, +0xa3d, 0xd90, 0xb3e, 0xd90, 0xb3e, 0xf3c, 0xcb0, 0xf3c, 0xcb0, 0x1132, 0xe73, +0x1132, 0xe73, 0x1132, 0xe73, 0x11ee, 0xf03, 0x11ee, 0xf03, 0x12d0, 0xfc1, 0x12d0, +0xfc1, 0x1419, 0x10ee, 0x1419, 0x10ee, 0x1547, 0x1209, 0x1547, 0x1209, 0x15f0, 0x12a9, +0x15f0, 0x12a9, 0x152c, 0x11e5, 0x152c, 0x11e5, 0x152c, 0x11e5, 0x153c, 0x11fd, 0x153c, +0x11fd, 0x159d, 0x126e, 0x159d, 0x126e, 0x15d3, 0x12bc, 0x15d3, 0x12bc, 0x1641, 0x1349, +0x1641, 0x1349, 0x15ff, 0x132c, 0x15ff, 0x132c, 0x15ff, 0x132c, 0x15e0, 0x1336, 0x15e0, +0x1336, 0x154e, 0x12d1, 0x154e, 0x12d1, 0x13e5, 0x1197, 0x13e5, 0x1197, 0x1296, 0x1079, +0x1296, 0x1079, 0x110c, 0xf1e, 0x110c, 0xf1e, 0xfe6, 0xe25, 0xfe6, 0xe25, 0xfe6, +0xe25, 0xe80, 0xceb, 0xe80, 0xceb, 0xd1d, 0xbb0, 0xd1d, 0xbb0, 0xcfe, 0xbb4, +0xcfe, 0xbb4, 0xc7f, 0xb53, 0xc7f, 0xb53, 0xc6d, 0xb5a, 0xc6d, 0xb5a, 0xca2, +0xba2, 0xca2, 0xba2, 0xca2, 0xba2, 0xc4a, 0xb57, 0xc4a, 0xb57, 0xb16, 0xa2b, +0xb16, 0xa2b, 0xa28, 0x93f, 0xa28, 0x93f, 0xaa4, 0x9b9, 0xaa4, 0x9b9, 0xa57, +0x965, 0xa57, 0x965, 0xa57, 0x965, 0xa32, 0x937, 0xa32, 0x937, 0xa4f, 0x948, +0xa4f, 0x948, 0xb02, 0x9ed, 0xb02, 0x9ed, 0xb8d, 0xa69, 0xb8d, 0xa69, 0xb72, +0xa40, 0xb72, 0xa40, 0xb78, 0xa38, 0xb78, 0xa38, 0xb78, 0xa38, 0xa12, 0x8c7, +0xa12, 0x8c7, 0x92d, 0x7d8, 0x92d, 0x7d8, 0x8c0, 0x765, 0x8c0, 0x765, 0x821, +0x6c2, 0x821, 0x6c2, 0x7a5, 0x646, 0x7a5, 0x646, 0x75f, 0x603, 0x75f, 0x603, +0x75f, 0x603, 0x6a2, 0x54e, 0x6a2, 0x54e, 0x5b8, 0x46d, 0x5b8, 0x46d, 0x54f, +0x412, 0x54f, 0x412, 0x460, 0x332, 0x460, 0x332, 0x3ef, 0x2d3, 0x3ef, 0x2d3, +0x3ef, 0x2d3, 0x2c7, 0x1be, 0x2c7, 0x1be, 0x1ef, 0xf9, 0x1ef, 0xf9, 0x1c2, +0xe0, 0x1c2, 0xe0, 0x15f, 0x90, 0x15f, 0x90, 0x149, 0x8c, 0x149, 0x8c, +0xa9, 0xfffc, 0xa9, 0xfffc, 0xa9, 0xfffc, 0x86, 0xffe8, 0x86, 0xffe8, 0xfff3, +0xff61, 0xfff3, 0xff61, 0xff55, 0xfecd, 0xff55, 0xfecd, 0xff07, 0xfe87, 0xff07, 0xfe87, +0xfeaa, 0xfe2f, 0xfeaa, 0xfe2f, 0xfe40, 0xfdc8, 0xfe40, 0xfdc8, 0xfe40, 0xfdc8, 0xfd5c, +0xfce6, 0xfd5c, 0xfce6, 0xfd23, 0xfcac, 0xfd23, 0xfcac, 0xfcf3, 0xfc7a, 0xfcf3, 0xfc7a, +0xfc97, 0xfc1b, 0xfc97, 0xfc1b, 0xfc23, 0xfba4, 0xfc23, 0xfba4, 0xfc23, 0xfba4, 0xfb97, +0xfb16, 0xfb97, 0xfb16, 0xfb36, 0xfab2, 0xfb36, 0xfab2, 0xfb10, 0xfa8b, 0xfb10, 0xfa8b, +0xfb36, 0xfab2, 0xfb36, 0xfab2, 0xfaa7, 0xfa25, 0xfaa7, 0xfa25, 0xfa22, 0xf9a3, 0xfa22, +0xf9a3, 0xfa22, 0xf9a3, 0xfae2, 0xfa69, 0xfae2, 0xfa69, 0xfc23, 0xfbb2, 0xfc23, 0xfbb2, +0xfcdd, 0xfc76, 0xfcdd, 0xfc76, 0xfcd7, 0xfc7c, 0xfcd7, 0xfc7c, 0xfd65, 0xfd16, 0xfd65, +0xfd16, 0xfde5, 0xfda4, 0xfde5, 0xfda4, 0xfde5, 0xfda4, 0xfd8e, 0xfd5b, 0xfd8e, 0xfd5b, +0xfe52, 0xfe2d, 0xfe52, 0xfe2d, 0xfec1, 0xfeaa, 0xfec1, 0xfeaa, 0xfed7, 0xfecc, 0xfed7, +0xfecc, 0xff8a, 0xff8a, 0xff8a, 0xff8a, 0xff8a, 0xff8a, 0xffde, 0xffe7, 0xffde, 0xffe7, +0x7d, 0x8b, 0x7d, 0x8b, 0xbd, 0xce, 0xbd, 0xce, 0xf3, 0x104, 0xf3, +0x104, 0x1b4, 0x1c1, 0x1b4, 0x1c1, 0x2e8, 0x2ed, 0x2e8, 0x2ed, 0x2e8, 0x2ed, +0x375, 0x36e, 0x375, 0x36e, 0x322, 0x30c, 0x322, 0x30c, 0x36b, 0x342, 0x36b, +0x342, 0x462, 0x424, 0x462, 0x424, 0x602, 0x5ab, 0x602, 0x5ab, 0x6a4, 0x632, +0x6a4, 0x632, 0x6a4, 0x632, 0x752, 0x6c1, 0x752, 0x6c1, 0x894, 0x7e5, 0x894, +0x7e5, 0x8e8, 0x818, 0x8e8, 0x818, 0x90b, 0x81b, 0x90b, 0x81b, 0x8e1, 0x7d0, +0x8e1, 0x7d0, 0x8e1, 0x7d0, 0x8d7, 0x7a6, 0x8d7, 0x7a6, 0x984, 0x833, 0x984, +0x833, 0xb03, 0x993, 0xb03, 0x993, 0xc44, 0xab7, 0xc44, 0xab7, 0xd49, 0xba2, +0xd49, 0xba2, 0xe59, 0xc9a, 0xe59, 0xc9a, 0xe59, 0xc9a, 0xf63, 0xd8e, 0xf63, +0xd8e, 0x1086, 0xe9d, 0x1086, 0xe9d, 0x114a, 0xf51, 0x114a, 0xf51, 0x12c2, 0x10ba, +0x12c2, 0x10ba, 0x1411, 0x11fe, 0x1411, 0x11fe, 0x1411, 0x11fe, 0x15bd, 0x13a0, 0x15bd, +0x13a0, 0x17cd, 0x15a9, 0x17cd, 0x15a9, 0x1998, 0x176f, 0x1998, 0x176f, 0x1ac1, 0x1896, +0x1ac1, 0x1896, 0x1af3, 0x18c7, 0x1af3, 0x18c7, 0x1bae, 0x1984, 0x1bae, 0x1984, 0x1bae, +0x1984, 0x1bf4, 0x19cd, 0x1bf4, 0x19cd, 0x1c31, 0x1a0e, 0x1c31, 0x1a0e, 0x1bd4, 0x19b7, +0x1bd4, 0x19b7, 0x1b4d, 0x1937, 0x1b4d, 0x1937, 0x1b21, 0x1913, 0x1b21, 0x1913, 0x1b16, +0x1910, 0x1b16, 0x1910, 0x1b16, 0x1910, 0x1b72, 0x1975, 0x1b72, 0x1975, 0x1b1c, 0x1929, +0x1b1c, 0x1929, 0x1bbd, 0x19d4, 0x1bbd, 0x19d4, 0x1c43, 0x1a63, 0x1c43, 0x1a63, 0x1c68, +0x1a92, 0x1c68, 0x1a92, 0x1c68, 0x1a92, 0x1b5f, 0x1993, 0x1b5f, 0x1993, 0x195b, 0x1799, +0x195b, 0x1799, 0x179b, 0x15e2, 0x179b, 0x15e2, 0x1642, 0x1492, 0x1642, 0x1492, 0x165f, +0x14b6, 0x165f, 0x14b6, 0x15a1, 0x13ff, 0x15a1, 0x13ff, 0x15a1, 0x13ff, 0x1475, 0x12da, +0x1475, 0x12da, 0x1375, 0x11e0, 0x1375, 0x11e0, 0x12eb, 0x115b, 0x12eb, 0x115b, 0x120d, +0x1080, 0x120d, 0x1080, 0x11db, 0x1051, 0x11db, 0x1051, 0x112f, 0xfa8, 0x112f, 0xfa8, +0x112f, 0xfa8, 0xf69, 0xde3, 0xf69, 0xde3, 0xfda, 0xe57, 0xfda, 0xe57, 0xf61, +0xddf, 0xf61, 0xddf, 0xf1a, 0xd9a, 0xf1a, 0xd9a, 0xdb5, 0xc38, 0xdb5, 0xc38, +0xdb5, 0xc38, 0xca2, 0xb29, 0xca2, 0xb29, 0xcb8, 0xb43, 0xcb8, 0xb43, 0xb97, +0xa28, 0xb97, 0xa28, 0xc33, 0xacd, 0xc33, 0xacd, 0xb2b, 0x9cf, 0xb2b, 0x9cf, +0xadc, 0x98e, 0xadc, 0x98e, 0xadc, 0x98e, 0xb3b, 0x9fd, 0xb3b, 0x9fd, 0xa21, +0x8f5, 0xa21, 0x8f5, 0x9c0, 0x8aa, 0x9c0, 0x8aa, 0x93a, 0x83b, 0x93a, 0x83b, +0x8e0, 0x7fc, 0x8e0, 0x7fc, 0x7fa, 0x734, 0x7fa, 0x734, 0x7fa, 0x734, 0x654, +0x5ad, 0x654, 0x5ad, 0x4fd, 0x478, 0x4fd, 0x478, 0x41e, 0x3bd, 0x41e, 0x3bd, +0x1ee, 0x1b3, 0x1ee, 0x1b3, 0xf8, 0xe2, 0xf8, 0xe2, 0xf8, 0xe2, 0xa2, +0xb2, 0xa2, 0xb2, 0xffdf, 0x14, 0xffdf, 0x14, 0xffa9, 0x4, 0xffa9, 0x4, +0xfd7d, 0xfdfc, 0xfd7d, 0xfdfc, 0xfcb8, 0xfd59, 0xfcb8, 0xfd59, 0xfbe6, 0xfca7, 0xfbe6, +0xfca7, 0xfbe6, 0xfca7, 0xfab0, 0xfb8f, 0xfab0, 0xfb8f, 0xfb15, 0xfc0f, 0xfb15, 0xfc0f, +0xfab0, 0xfbc3, 0xfab0, 0xfbc3, 0xfab5, 0xfbde, 0xfab5, 0xfbde, 0xfaba, 0xfbf6, 0xfaba, +0xfbf6, 0xfacc, 0xfc18, 0xfacc, 0xfc18, 0xfacc, 0xfc18, 0xfaa2, 0xfbfc, 0xfaa2, 0xfbfc, +0xf9a6, 0xfb0b, 0xf9a6, 0xfb0b, 0xf942, 0xfab1, 0xf942, 0xfab1, 0xf8b5, 0xfa2c, 0xf8b5, +0xfa2c, 0xf827, 0xf9a4, 0xf827, 0xf9a4, 0xf827, 0xf9a4, 0xf7c8, 0xf94b, 0xf7c8, 0xf94b, +0xf737, 0xf8be, 0xf737, 0xf8be, 0xf6ed, 0xf879, 0xf6ed, 0xf879, 0xf689, 0xf819, 0xf689, +0xf819, 0xf6c5, 0xf858, 0xf6c5, 0xf858, 0xf673, 0xf80a, 0xf673, 0xf80a, 0xf673, 0xf80a, +0xf5fb, 0xf796, 0xf5fb, 0xf796, 0xf6a3, 0xf841, 0xf6a3, 0xf841, 0xf6ad, 0xf84f, 0xf6ad, +0xf84f, 0xf718, 0xf8bd, 0xf718, 0xf8bd, 0xf6cd, 0xf874, 0xf6cd, 0xf874, 0xf6ae, 0xf857, +0xf6ae, 0xf857, 0xf6ae, 0xf857, 0xf783, 0xf92c, 0xf783, 0xf92c, 0xf7aa, 0xf952, 0xf7aa, +0xf952, 0xf7bc, 0xf961, 0xf7bc, 0xf961, 0xf79f, 0xf93e, 0xf79f, 0xf93e, 0xf7e5, 0xf97c, +0xf7e5, 0xf97c, 0xf7e5, 0xf97c, 0xf74d, 0xf8d9, 0xf74d, 0xf8d9, 0xf69e, 0xf81f, 0xf69e, +0xf81f, 0xf655, 0xf7c6, 0xf655, 0xf7c6, 0xf592, 0xf6f2, 0xf592, 0xf6f2, 0xf504, 0xf650, +0xf504, 0xf650, 0xf5b8, 0xf6f0, 0xf5b8, 0xf6f0, 0xf5b8, 0xf6f0, 0xf6ae, 0xf7d0, 0xf6ae, +0xf7d0, 0xf68e, 0xf79a, 0xf68e, 0xf79a, 0xf712, 0xf809, 0xf712, 0xf809, 0xf66e, 0xf751, +0xf66e, 0xf751, 0xf62c, 0xf6fc, 0xf62c, 0xf6fc, 0xf617, 0xf6d9, 0xf617, 0xf6d9, 0xf617, +0xf6d9, 0xf5a9, 0xf65e, 0xf5a9, 0xf65e, 0xf5b2, 0xf660, 0xf5b2, 0xf660, 0xf3db, 0xf487, +0xf3db, 0xf487, 0xf41a, 0xf4c9, 0xf41a, 0xf4c9, 0xf4e0, 0xf599, 0xf4e0, 0xf599, 0xf4e0, +0xf599, 0xf4b2, 0xf57a, 0xf4b2, 0xf57a, 0xf4b5, 0xf593, 0xf4b5, 0xf593, 0xf3de, 0xf4d8, +0xf3de, 0xf4d8, 0xf35c, 0xf478, 0xf35c, 0xf478, 0xf1f1, 0xf335, 0xf1f1, 0xf335, 0xf0a7, +0xf216, 0xf0a7, 0xf216, 0xf0a7, 0xf216, 0xefbe, 0xf15e, 0xefbe, 0xf15e, 0xee6b, 0xf03d, +0xee6b, 0xf03d, 0xed65, 0xef6c, 0xed65, 0xef6c, 0xecee, 0xef2a, 0xecee, 0xef2a, 0xec8b, +0xeefc, 0xec8b, 0xeefc, 0xec23, 0xeec7, 0xec23, 0xeec7, 0xec23, 0xeec7, 0xebfb, 0xeece, +0xebfb, 0xeece, 0xeb11, 0xee11, 0xeb11, 0xee11, 0xea97, 0xedbe, 0xea97, 0xedbe, 0xe9d3, +0xed1b, 0xe9d3, 0xed1b, 0xe859, 0xebbc, 0xe859, 0xebbc, 0xe859, 0xebbc, 0xe781, 0xeaf8, +0xe781, 0xeaf8, 0xe6d1, 0xea54, 0xe6d1, 0xea54, 0xe6f2, 0xea7a, 0xe6f2, 0xea7a, 0xe67d, +0xea03, 0xe67d, 0xea03, 0xe5fc, 0xe979, 0xe5fc, 0xe979, 0xe669, 0xe9d7, 0xe669, 0xe9d7, +0xe669, 0xe9d7, 0xe60e, 0xe968, 0xe60e, 0xe968, 0xe620, 0xe960, 0xe620, 0xe960, 0xe5d8, +0xe8fa, 0xe5d8, 0xe8fa, 0xe52d, 0xe82f, 0xe52d, 0xe82f, 0xe523, 0xe804, 0xe523, 0xe804, +0xe50f, 0xe7ce, 0xe50f, 0xe7ce, 0xe50f, 0xe7ce, 0xe52e, 0xe7ca, 0xe52e, 0xe7ca, 0xe4f4, +0xe770, 0xe4f4, 0xe770, 0xe51e, 0xe77c, 0xe51e, 0xe77c, 0xe5aa, 0xe7ed, 0xe5aa, 0xe7ed, +0xe6a8, 0xe8d3, 0xe6a8, 0xe8d3, 0xe6a8, 0xe8d3, 0xe7cd, 0xe9e4, 0xe7cd, 0xe9e4, 0xe81b, +0xea21, 0xe81b, 0xea21, 0xe80f, 0xea0a, 0xe80f, 0xea0a, 0xe8aa, 0xea9d, 0xe8aa, 0xea9d, +0xe9fc, 0xebe9, 0xe9fc, 0xebe9, 0xea0d, 0xebf8, 0xea0d, 0xebf8, 0xea0d, 0xebf8, 0xea64, +0xec50, 0xea64, 0xec50, 0xea53, 0xec42, 0xea53, 0xec42, 0xe954, 0xeb47, 0xe954, 0xeb47, +0xea15, 0xec0c, 0xea15, 0xec0c, 0xeb00, 0xecfa, 0xeb00, 0xecfa, 0xeb00, 0xecfa, 0xeb66, +0xed63, 0xeb66, 0xed63, 0xeb50, 0xed4e, 0xeb50, 0xed4e, 0xebf8, 0xedf6, 0xebf8, 0xedf6, +0xed0c, 0xef07, 0xed0c, 0xef07, 0xed00, 0xeef5, 0xed00, 0xeef5, 0xedc4, 0xefb2, 0xedc4, +0xefb2, 0xedc4, 0xefb2, 0xee29, 0xf00c, 0xee29, 0xf00c, 0xedd4, 0xefa9, 0xedd4, 0xefa9, +0xeea5, 0xf06c, 0xeea5, 0xf06c, 0xef2f, 0xf0e7, 0xef2f, 0xf0e7, 0xef6d, 0xf113, 0xef6d, +0xf113, 0xf025, 0xf1ba, 0xf025, 0xf1ba, 0xf025, 0xf1ba, 0xf0bf, 0xf242, 0xf0bf, 0xf242, +0xf1cf, 0xf343, 0xf1cf, 0xf343, 0xf275, 0xf3da, 0xf275, 0xf3da, 0xf2e9, 0xf441, 0xf2e9, +0xf441, 0xf398, 0xf4e4, 0xf398, 0xf4e4, 0xf398, 0xf4e4, 0xf383, 0xf4c7, 0xf383, 0xf4c7, +0xf39e, 0xf4dc, 0xf39e, 0xf4dc, 0xf324, 0xf45d, 0xf324, 0xf45d, 0xf2a2, 0xf3da, 0xf2a2, +0xf3da, 0xf2db, 0xf412, 0xf2db, 0xf412, 0xf2fd, 0xf434, 0xf2fd, 0xf434, 0xf2fd, 0xf434, +0xf3ac, 0xf4e4, 0xf3ac, 0xf4e4, 0xf401, 0xf53a, 0xf401, 0xf53a, 0xf437, 0xf56f, 0xf437, +0xf56f, 0xf3cd, 0xf500, 0xf3cd, 0xf500, 0xf374, 0xf4a1, 0xf374, 0xf4a1, 0xf47b, 0xf59c, +0xf47b, 0xf59c, 0xf47b, 0xf59c, 0xf468, 0xf579, 0xf468, 0xf579, 0xf509, 0xf603, 0xf509, +0xf603, 0xf619, 0xf6f7, 0xf619, 0xf6f7, 0xf716, 0xf7d0, 0xf716, 0xf7d0, 0xf9cf, 0xfa5f, +0xf9cf, 0xfa5f, 0xf9cf, 0xfa5f, 0xfb4b, 0xfba9, 0xfb4b, 0xfba9, 0xfcf5, 0xfd1a, 0xfcf5, +0xfd1a, 0xfef8, 0xfede, 0xfef8, 0xfede, 0x106, 0xa8, 0x106, 0xa8, 0x3ff, 0x357, +0x3ff, 0x357, 0x53a, 0x445, 0x53a, 0x445, 0x53a, 0x445, 0x741, 0x5fc, 0x741, +0x5fc, 0x937, 0x7a1, 0x937, 0x7a1, 0x9ff, 0x817, 0x9ff, 0x817, 0xc89, 0xa52, +0xc89, 0xa52, 0xef2, 0xc6d, 0xef2, 0xc6d, 0x10fb, 0xe2e, 0x10fb, 0xe2e, 0x10fb, +0xe2e, 0x129e, 0xf8e, 0x129e, 0xf8e, 0x13e4, 0x1097, 0x13e4, 0x1097, 0x15cd, 0x124b, +0x15cd, 0x124b, 0x1674, 0x12c5, 0x1674, 0x12c5, 0x173f, 0x136d, 0x173f, 0x136d, 0x173f, +0x136d, 0x1862, 0x1475, 0x1862, 0x1475, 0x18f9, 0x14fb, 0x18f9, 0x14fb, 0x1aa2, 0x169b, +0x1aa2, 0x169b, 0x1b82, 0x177c, 0x1b82, 0x177c, 0x1bfa, 0x17fd, 0x1bfa, 0x17fd, 0x1bcb, +0x17de, 0x1bcb, 0x17de, 0x1bcb, 0x17de, 0x1b77, 0x17a0, 0x1b77, 0x17a0, 0x1c73, 0x18b9, +0x1c73, 0x18b9, 0x1bae, 0x1814, 0x1bae, 0x1814, 0x1ae2, 0x176c, 0x1ae2, 0x176c, 0x1a74, +0x1723, 0x1a74, 0x1723, 0x199b, 0x1671, 0x199b, 0x1671, 0x199b, 0x1671, 0x193b, 0x1638, +0x193b, 0x1638, 0x1805, 0x1527, 0x1805, 0x1527, 0x1707, 0x144c, 0x1707, 0x144c, 0x1618, +0x137e, 0x1618, 0x137e, 0x156a, 0x12ee, 0x156a, 0x12ee, 0x156a, 0x12ee, 0x158d, 0x132a, +0x158d, 0x132a, 0x158e, 0x1341, 0x158e, 0x1341, 0x1597, 0x135c, 0x1597, 0x135c, 0x152e, +0x1302, 0x152e, 0x1302, 0x1505, 0x12e3, 0x1505, 0x12e3, 0x1555, 0x133b, 0x1555, 0x133b, +0x1555, 0x133b, 0x1532, 0x131d, 0x1532, 0x131d, 0x15c8, 0x13b7, 0x15c8, 0x13b7, 0x1615, +0x1407, 0x1615, 0x1407, 0x1577, 0x136b, 0x1577, 0x136b, 0x14b7, 0x12ad, 0x14b7, 0x12ad, +0x1323, 0x111d, 0x1323, 0x111d, 0x1323, 0x111d, 0x1221, 0x101f, 0x1221, 0x101f, 0x1117, +0xf1c, 0x1117, 0xf1c, 0xfa7, 0xdb5, 0xfa7, 0xdb5, 0xebd, 0xcd7, 0xebd, 0xcd7, +0xd3c, 0xb65, 0xd3c, 0xb65, 0xd3c, 0xb65, 0xba8, 0x9e3, 0xba8, 0x9e3, 0xaae, +0x8fe, 0xaae, 0x8fe, 0x9e3, 0x84b, 0x9e3, 0x84b, 0x934, 0x7b7, 0x934, 0x7b7, +0x892, 0x733, 0x892, 0x733, 0x7e1, 0x6a2, 0x7e1, 0x6a2, 0x7e1, 0x6a2, 0x7d9, +0x6bc, 0x7d9, 0x6bc, 0x756, 0x65d, 0x756, 0x65d, 0x662, 0x58d, 0x662, 0x58d, +0x5b0, 0x4fe, 0x5b0, 0x4fe, 0x423, 0x396, 0x423, 0x396, 0x304, 0x29c, 0x304, +0x29c, 0x304, 0x29c, 0x217, 0x1d3, 0x217, 0x1d3, 0xa6, 0x85, 0xa6, 0x85, +0xff26, 0xff27, 0xff26, 0xff27, 0xfd88, 0xfdaa, 0xfd88, 0xfdaa, 0xfc46, 0xfc87, 0xfc46, +0xfc87, 0xfc46, 0xfc87, 0xfba9, 0xfc09, 0xfba9, 0xfc09, 0xfa7e, 0xfafc, 0xfa7e, 0xfafc, +0xf96a, 0xfa03, 0xf96a, 0xfa03, 0xf8e2, 0xf998, 0xf8e2, 0xf998, 0xf767, 0xf838, 0xf767, +0xf838, 0xf6ad, 0xf798, 0xf6ad, 0xf798, 0xf6ad, 0xf798, 0xf596, 0xf69a, 0xf596, 0xf69a, +0xf432, 0xf550, 0xf432, 0xf550, 0xf35a, 0xf492, 0xf35a, 0xf492, 0xf225, 0xf376, 0xf225, +0xf376, 0xf232, 0xf39c, 0xf232, 0xf39c, 0xf226, 0xf3a9, 0xf226, 0xf3a9, 0xf226, 0xf3a9, +0xf214, 0xf3b0, 0xf214, 0xf3b0, 0xf1f0, 0xf3a3, 0xf1f0, 0xf3a3, 0xf135, 0xf2fe, 0xf135, +0xf2fe, 0xf0ed, 0xf2cb, 0xf0ed, 0xf2cb, 0xf0c2, 0xf2b3, 0xf0c2, 0xf2b3, 0xf0c2, 0xf2b3, +0xf01e, 0xf221, 0xf01e, 0xf221, 0xef8c, 0xf19c, 0xef8c, 0xf19c, 0xef80, 0xf19b, 0xef80, +0xf19b, 0xeeee, 0xf10f, 0xeeee, 0xf10f, 0xef18, 0xf13c, 0xef18, 0xf13c, 0xeef1, 0xf112, +0xeef1, 0xf112, 0xeef1, 0xf112, 0xee7b, 0xf095, 0xee7b, 0xf095, 0xeef9, 0xf105, 0xeef9, +0xf105, 0xef44, 0xf13c, 0xef44, 0xf13c, 0xf033, 0xf212, 0xf033, 0xf212, 0xf03c, 0xf1fb, +0xf03c, 0xf1fb, 0xf076, 0xf210, 0xf076, 0xf210, 0xf076, 0xf210, 0xf1f8, 0xf367, 0xf1f8, +0xf367, 0xf2b0, 0xf3ef, 0xf2b0, 0xf3ef, 0xf3b1, 0xf4ba, 0xf3b1, 0xf4ba, 0xf51d, 0xf5ec, +0xf51d, 0xf5ec, 0xf6f0, 0xf781, 0xf6f0, 0xf781, 0xf6f0, 0xf781, 0xf91e, 0xf96d, 0xf91e, +0xf96d, 0xfb1a, 0xfb24, 0xfb1a, 0xfb24, 0xfcbb, 0xfc80, 0xfcbb, 0xfc80, 0xfdee, 0xfd6c, +0xfdee, 0xfd6c, 0xffe6, 0xff1d, 0xffe6, 0xff1d, 0x159, 0x4a, 0x159, 0x4a, 0x159, +0x4a, 0x24f, 0xfc, 0x24f, 0xfc, 0x427, 0x292, 0x427, 0x292, 0x582, 0x3ae, +0x582, 0x3ae, 0x6d4, 0x4c6, 0x6d4, 0x4c6, 0x839, 0x5f6, 0x839, 0x5f6, 0x839, +0x5f6, 0x9c3, 0x74f, 0x9c3, 0x74f, 0xb6d, 0x8ce, 0xb6d, 0x8ce, 0xce2, 0xa1e, +0xce2, 0xa1e, 0xebe, 0xbdb, 0xebe, 0xbdb, 0x1057, 0xd5b, 0x1057, 0xd5b, 0x1204, +0xef7, 0x1204, 0xef7, 0x1204, 0xef7, 0x13f7, 0x10dd, 0x13f7, 0x10dd, 0x1522, 0x1203, +0x1522, 0x1203, 0x1574, 0x1255, 0x1574, 0x1255, 0x164a, 0x1331, 0x164a, 0x1331, 0x1754, +0x1446, 0x1754, 0x1446, 0x17e7, 0x14e8, 0x17e7, 0x14e8, 0x17e7, 0x14e8, 0x17f9, 0x150e, +0x17f9, 0x150e, 0x17bf, 0x14eb, 0x17bf, 0x14eb, 0x180f, 0x1554, 0x180f, 0x1554, 0x1809, +0x156a, 0x1809, 0x156a, 0x183f, 0x15be, 0x183f, 0x15be, 0x183f, 0x15be, 0x1832, 0x15d0, +0x1832, 0x15d0, 0x1838, 0x15f4, 0x1838, 0x15f4, 0x188c, 0x1666, 0x188c, 0x1666, 0x1840, +0x1637, 0x1840, 0x1637, 0x186d, 0x167f, 0x186d, 0x167f, 0x17d3, 0x15ff, 0x17d3, 0x15ff, +0x17d3, 0x15ff, 0x1743, 0x1586, 0x1743, 0x1586, 0x16dd, 0x1534, 0x16dd, 0x1534, 0x1649, +0x14b0, 0x1649, 0x14b0, 0x15fc, 0x1471, 0x15fc, 0x1471, 0x14c7, 0x1346, 0x14c7, 0x1346, +0x13b8, 0x123d, 0x13b8, 0x123d, 0x13b8, 0x123d, 0x1316, 0x119e, 0x1316, 0x119e, 0x134f, +0x11d6, 0x134f, 0x11d6, 0x13a9, 0x122b, 0x13a9, 0x122b, 0x12de, 0x1158, 0x12de, 0x1158, +0x11f5, 0x1063, 0x11f5, 0x1063, 0x11f5, 0x1063, 0x113f, 0xf9f, 0x113f, 0xf9f, 0x1153, +0xfa3, 0x1153, 0xfa3, 0x118a, 0xfc8, 0x118a, 0xfc8, 0x1092, 0xebc, 0x1092, 0xebc, +0xf76, 0xd8b, 0xf76, 0xd8b, 0xed5, 0xcd4, 0xed5, 0xcd4, 0xed5, 0xcd4, 0xfb8, +0xda2, 0xfb8, 0xda2, 0x10b8, 0xe8d, 0x10b8, 0xe8d, 0x1038, 0xdf9, 0x1038, 0xdf9, +0x10e4, 0xe92, 0x10e4, 0xe92, 0x1124, 0xec2, 0x1124, 0xec2, 0x10fc, 0xe8c, 0x10fc, +0xe8c, 0x10fc, 0xe8c, 0x11c5, 0xf49, 0x11c5, 0xf49, 0x120b, 0xf88, 0x120b, 0xf88, +0x1248, 0xfc0, 0x1248, 0xfc0, 0x11ed, 0xf65, 0x11ed, 0xf65, 0x11af, 0xf2a, 0x11af, +0xf2a, 0x11af, 0xf2a, 0x11c7, 0xf4a, 0x11c7, 0xf4a, 0x1181, 0xf0f, 0x1181, 0xf0f, +0x1111, 0xeaf, 0x1111, 0xeaf, 0x10f6, 0xea7, 0x10f6, 0xea7, 0x10a2, 0xe6a, 0x10a2, +0xe6a, 0x1016, 0xdf8, 0x1016, 0xdf8, 0x1016, 0xdf8, 0xf8b, 0xd8a, 0xf8b, 0xd8a, +0xe5e, 0xc7f, 0xe5e, 0xc7f, 0xdd8, 0xc1b, 0xdd8, 0xc1b, 0xd0c, 0xb74, 0xd0c, +0xb74, 0xcd4, 0xb62, 0xcd4, 0xb62, 0xce7, 0xb9d, 0xce7, 0xb9d, 0xce7, 0xb9d, +0xc2d, 0xb0b, 0xc2d, 0xb0b, 0xbbe, 0xac4, 0xbbe, 0xac4, 0xaf5, 0xa23, 0xaf5, +0xa23, 0xa66, 0x9bb, 0xa66, 0x9bb, 0x970, 0x8ec, 0x970, 0x8ec, 0x970, 0x8ec, +0x8de, 0x87e, 0x8de, 0x87e, 0x82f, 0x7f1, 0x82f, 0x7f1, 0x728, 0x70b, 0x728, +0x70b, 0x637, 0x639, 0x637, 0x639, 0x4d8, 0x4f6, 0x4d8, 0x4f6, 0x44f, 0x488, +0x44f, 0x488, 0x44f, 0x488, 0x30c, 0x35c, 0x30c, 0x35c, 0x299, 0x2ff, 0x299, +0x2ff, 0x2ab, 0x323, 0x2ab, 0x323, 0x193, 0x21b, 0x193, 0x21b, 0xe9, 0x17f, +0xe9, 0x17f, 0x4d, 0xf0, 0x4d, 0xf0, 0x4d, 0xf0, 0xfff6, 0xa4, 0xfff6, +0xa4, 0xff25, 0xffdc, 0xff25, 0xffdc, 0xfdcd, 0xfe8b, 0xfdcd, 0xfe8b, 0xfd95, 0xfe5a, +0xfd95, 0xfe5a, 0xfd7d, 0xfe47, 0xfd7d, 0xfe47, 0xfd7d, 0xfe47, 0xfc6e, 0xfd3e, 0xfc6e, +0xfd3e, 0xfc23, 0xfcf7, 0xfc23, 0xfcf7, 0xfbad, 0xfc85, 0xfbad, 0xfc85, 0xfb59, 0xfc36, +0xfb59, 0xfc36, 0xfbd0, 0xfcb2, 0xfbd0, 0xfcb2, 0xfb38, 0xfc20, 0xfb38, 0xfc20, 0xfb38, +0xfc20, 0xfb1b, 0xfc09, 0xfb1b, 0xfc09, 0xfa71, 0xfb68, 0xfa71, 0xfb68, 0xf9a7, 0xfaa7, +0xf9a7, 0xfaa7, 0xf8b9, 0xf9c4, 0xf8b9, 0xf9c4, 0xf702, 0xf819, 0xf702, 0xf819, 0xf6e1, +0xf807, 0xf6e1, 0xf807, 0xf6e1, 0xf807, 0xf5e2, 0xf719, 0xf5e2, 0xf719, 0xf4a6, 0xf5f1, +0xf4a6, 0xf5f1, 0xf41e, 0xf581, 0xf41e, 0xf581, 0xf33b, 0xf4b7, 0xf33b, 0xf4b7, 0xf2c1, +0xf45a, 0xf2c1, 0xf45a, 0xf2c1, 0xf45a, 0xf179, 0xf332, 0xf179, 0xf332, 0xf016, 0xf1f2, +0xf016, 0xf1f2, 0xef60, 0xf163, 0xef60, 0xf163, 0xeef3, 0xf120, 0xeef3, 0xf120, 0xeec0, +0xf11b, 0xeec0, 0xf11b, 0xede8, 0xf072, 0xede8, 0xf072, 0xede8, 0xf072, 0xecc1, 0xef7d, +0xecc1, 0xef7d, 0xebb6, 0xeea7, 0xebb6, 0xeea7, 0xea37, 0xed5f, 0xea37, 0xed5f, 0xe930, +0xec90, 0xe930, 0xec90, 0xe813, 0xebab, 0xe813, 0xebab, 0xe6ca, 0xea9a, 0xe6ca, 0xea9a, +0xe6ca, 0xea9a, 0xe64d, 0xea55, 0xe64d, 0xea55, 0xe4db, 0xe918, 0xe4db, 0xe918, 0xe378, +0xe7e8, 0xe378, 0xe7e8, 0xe271, 0xe710, 0xe271, 0xe710, 0xe15c, 0xe627, 0xe15c, 0xe627, +0xe15c, 0xe627, 0xe0ab, 0xe59c, 0xe0ab, 0xe59c, 0xdfce, 0xe4e0, 0xdfce, 0xe4e0, 0xdfea, +0xe516, 0xdfea, 0xe516, 0xdf5b, 0xe49a, 0xdf5b, 0xe49a, 0xde46, 0xe390, 0xde46, 0xe390, +0xddc5, 0xe312, 0xddc5, 0xe312, 0xddc5, 0xe312, 0xdccb, 0xe214, 0xdccb, 0xe214, 0xdc2f, +0xe16a, 0xdc2f, 0xe16a, 0xdc20, 0xe146, 0xdc20, 0xe146, 0xdc61, 0xe16a, 0xdc61, 0xe16a, +0xdc88, 0xe16c, 0xdc88, 0xe16c, 0xdd10, 0xe1c8, 0xdd10, 0xe1c8, 0xdd10, 0xe1c8, 0xdda7, +0xe22f, 0xdda7, 0xe22f, 0xddfc, 0xe24d, 0xddfc, 0xe24d, 0xdea0, 0xe2b6, 0xdea0, 0xe2b6, +0xdf39, 0xe311, 0xdf39, 0xe311, 0xe014, 0xe3ac, 0xe014, 0xe3ac, 0xe014, 0xe3ac, 0xe0ff, +0xe456, 0xe0ff, 0xe456, 0xe23c, 0xe553, 0xe23c, 0xe553, 0xe381, 0xe659, 0xe381, 0xe659, +0xe505, 0xe7a0, 0xe505, 0xe7a0, 0xe702, 0xe964, 0xe702, 0xe964, 0xe85f, 0xea8b, 0xe85f, +0xea8b, 0xe85f, 0xea8b, 0xea38, 0xec34, 0xea38, 0xec34, 0xec83, 0xee54, 0xec83, 0xee54, +0xedd4, 0xef80, 0xedd4, 0xef80, 0xee7f, 0xf00c, 0xee7f, 0xf00c, 0xeebc, 0xf030, 0xeebc, +0xf030, 0xeebc, 0xf030, 0xee81, 0xefe2, 0xee81, 0xefe2, 0xee76, 0xefc9, 0xee76, 0xefc9, +0xef10, 0xf05b, 0xef10, 0xf05b, 0xf045, 0xf18d, 0xf045, 0xf18d, 0xf0c1, 0xf209, 0xf0c1, +0xf209, 0xf0ba, 0xf207, 0xf0ba, 0xf207, 0xf0ba, 0xf207, 0xf13e, 0xf291, 0xf13e, 0xf291, +0xf165, 0xf2c2, 0xf165, 0xf2c2, 0xf1ea, 0xf350, 0xf1ea, 0xf350, 0xf25b, 0xf3cb, 0xf25b, +0xf3cb, 0xf1d0, 0xf34b, 0xf1d0, 0xf34b, 0xf182, 0xf306, 0xf182, 0xf306, 0xf182, 0xf306, +0xf1fa, 0xf386, 0xf1fa, 0xf386, 0xf2d0, 0xf462, 0xf2d0, 0xf462, 0xf348, 0xf4e0, 0xf348, +0xf4e0, 0xf37e, 0xf519, 0xf37e, 0xf519, 0xf40f, 0xf5ab, 0xf40f, 0xf5ab, 0xf40f, 0xf5ab, +0xf4fe, 0xf699, 0xf4fe, 0xf699, 0xf5ad, 0xf745, 0xf5ad, 0xf745, 0xf659, 0xf7ee, 0xf659, +0xf7ee, 0xf681, 0xf810, 0xf681, 0xf810, 0xf61d, 0xf7a5, 0xf61d, 0xf7a5, 0xf651, 0xf7d1, +0xf651, 0xf7d1, 0xf651, 0xf7d1, 0xf642, 0xf7ba, 0xf642, 0xf7ba, 0xf58f, 0xf6ff, 0xf58f, +0xf6ff, 0xf4fa, 0xf661, 0xf4fa, 0xf661, 0xf4de, 0xf63b, 0xf4de, 0xf63b, 0xf4f0, 0xf643, +0xf4f0, 0xf643, 0xf516, 0xf65e, 0xf516, 0xf65e, 0xf516, 0xf65e, 0xf495, 0xf5d2, 0xf495, +0xf5d2, 0xf40a, 0xf53a, 0xf40a, 0xf53a, 0xf478, 0xf599, 0xf478, 0xf599, 0xf4e7, 0xf5f8, +0xf4e7, 0xf5f8, 0xf5c8, 0xf6c4, 0xf5c8, 0xf6c4, 0xf5c8, 0xf6c4, 0xf613, 0xf6fa, 0xf613, +0xf6fa, 0xf631, 0xf6fd, 0xf631, 0xf6fd, 0xf788, 0xf836, 0xf788, 0xf836, 0xf86b, 0xf8f6, +0xf86b, 0xf8f6, 0xf92a, 0xf98d, 0xf92a, 0xf98d, 0xfa66, 0xfa9d, 0xfa66, 0xfa9d, 0xfa66, +0xfa9d, 0xfc07, 0xfc0c, 0xfc07, 0xfc0c, 0xfe7f, 0xfe4e, 0xfe7f, 0xfe4e, 0xe7, 0x7b, +0xe7, 0x7b, 0x2d0, 0x226, 0x2d0, 0x226, 0x4b5, 0x3c9, 0x4b5, 0x3c9, 0x5da, +0x4aa, 0x5da, 0x4aa, 0x5da, 0x4aa, 0x6f3, 0x57e, 0x6f3, 0x57e, 0x8c2, 0x707, +0x8c2, 0x707, 0xab1, 0x8b1, 0xab1, 0x8b1, 0xce9, 0xaa6, 0xce9, 0xaa6, 0xe87, +0xc05, 0xe87, 0xc05, 0xe87, 0xc05, 0xff4, 0xd37, 0xff4, 0xd37, 0x11b7, 0xec4, +0x11b7, 0xec4, 0x139a, 0x1078, 0x139a, 0x1078, 0x1602, 0x12b9, 0x1602, 0x12b9, 0x1760, +0x13f8, 0x1760, 0x13f8, 0x1863, 0x14e4, 0x1863, 0x14e4, 0x1863, 0x14e4, 0x1a63, 0x16d7, +0x1a63, 0x16d7, 0x1bd2, 0x1841, 0x1bd2, 0x1841, 0x1cb9, 0x192d, 0x1cb9, 0x192d, 0x1d3a, +0x19b9, 0x1d3a, 0x19b9, 0x1db7, 0x1a4b, 0x1db7, 0x1a4b, 0x1e91, 0x1b40, 0x1e91, 0x1b40, +0x1e91, 0x1b40, 0x1e68, 0x1b36, 0x1e68, 0x1b36, 0x1de8, 0x1adc, 0x1de8, 0x1adc, 0x1cc0, +0x19db, 0x1cc0, 0x19db, 0x1af2, 0x1837, 0x1af2, 0x1837, 0x1950, 0x16bf, 0x1950, 0x16bf, +0x1950, 0x16bf, 0x1746, 0x14de, 0x1746, 0x14de, 0x15ec, 0x13ac, 0x15ec, 0x13ac, 0x148b, +0x126e, 0x148b, 0x126e, 0x1340, 0x1143, 0x1340, 0x1143, 0x130d, 0x112a, 0x130d, 0x112a, +0x1304, 0x1135, 0x1304, 0x1135, 0x1304, 0x1135, 0x12f7, 0x1137, 0x12f7, 0x1137, 0x1287, +0x10cf, 0x1287, 0x10cf, 0x126c, 0x10b8, 0x126c, 0x10b8, 0x12ad, 0x10f6, 0x12ad, 0x10f6, +0x12a5, 0x10e6, 0x12a5, 0x10e6, 0x12e3, 0x1119, 0x12e3, 0x1119, 0x12e3, 0x1119, 0x127f, +0x10a6, 0x127f, 0x10a6, 0x11c3, 0xfd9, 0x11c3, 0xfd9, 0x11ff, 0x1004, 0x11ff, 0x1004, +0x1198, 0xf8c, 0x1198, 0xf8c, 0x1032, 0xe17, 0x1032, 0xe17, 0x1032, 0xe17, 0xf0c, +0xce5, 0xf0c, 0xce5, 0xe37, 0xc07, 0xe37, 0xc07, 0xd71, 0xb3d, 0xd71, 0xb3d, +0xbc9, 0x996, 0xbc9, 0x996, 0xa6e, 0x842, 0xa6e, 0x842, 0x989, 0x76c, 0x989, +0x76c, 0x989, 0x76c, 0x873, 0x669, 0x873, 0x669, 0x8a5, 0x6b6, 0x8a5, 0x6b6, +0x8bc, 0x6ee, 0x8bc, 0x6ee, 0x80d, 0x665, 0x80d, 0x665, 0x78e, 0x613, 0x78e, +0x613, 0x6e5, 0x59b, 0x6e5, 0x59b, 0x6e5, 0x59b, 0x5e5, 0x4ce, 0x5e5, 0x4ce, +0x4e6, 0x406, 0x4e6, 0x406, 0x3d1, 0x32a, 0x3d1, 0x32a, 0x23a, 0x1cc, 0x23a, +0x1cc, 0xf8, 0xc3, 0xf8, 0xc3, 0xf8, 0xc3, 0xffde, 0xffe2, 0xffde, 0xffe2, +0xfeb6, 0xfeef, 0xfeb6, 0xfeef, 0xfd95, 0xfe02, 0xfd95, 0xfe02, 0xfc51, 0xfcf0, 0xfc51, +0xfcf0, 0xfb41, 0xfc0d, 0xfb41, 0xfc0d, 0xfa12, 0xfb09, 0xfa12, 0xfb09, 0xfa12, 0xfb09, +0xf933, 0xfa4f, 0xf933, 0xfa4f, 0xf81f, 0xf95d, 0xf81f, 0xf95d, 0xf6a4, 0xf801, 0xf6a4, +0xf801, 0xf583, 0xf6fa, 0xf583, 0xf6fa, 0xf4ae, 0xf63c, 0xf4ae, 0xf63c, 0xf49f, 0xf641, +0xf49f, 0xf641, 0xf49f, 0xf641, 0xf4df, 0xf692, 0xf4df, 0xf692, 0xf4ee, 0xf6b0, 0xf4ee, +0xf6b0, 0xf4da, 0xf6a8, 0xf4da, 0xf6a8, 0xf477, 0xf64f, 0xf477, 0xf64f, 0xf3cb, 0xf5ab, +0xf3cb, 0xf5ab, 0xf3cb, 0xf5ab, 0xf2e1, 0xf4c7, 0xf2e1, 0xf4c7, 0xf23b, 0xf425, 0xf23b, +0xf425, 0xf296, 0xf483, 0xf296, 0xf483, 0xf345, 0xf532, 0xf345, 0xf532, 0xf333, 0xf51e, +0xf333, 0xf51e, 0xf2e9, 0xf4ce, 0xf2e9, 0xf4ce, 0xf2e9, 0xf4ce, 0xf24b, 0xf427, 0xf24b, +0xf427, 0xf1d0, 0xf3a1, 0xf1d0, 0xf3a1, 0xf248, 0xf409, 0xf248, 0xf409, 0xf28c, 0xf43a, +0xf28c, 0xf43a, 0xf296, 0xf42c, 0xf296, 0xf42c, 0xf32c, 0xf4a5, 0xf32c, 0xf4a5, 0xf32c, +0xf4a5, 0xf40e, 0xf566, 0xf40e, 0xf566, 0xf4c6, 0xf5f8, 0xf4c6, 0xf5f8, 0xf554, 0xf65b, +0xf554, 0xf65b, 0xf5cf, 0xf6a8, 0xf5cf, 0xf6a8, 0xf681, 0xf727, 0xf681, 0xf727, 0xf681, +0xf727, 0xf7c8, 0xf837, 0xf7c8, 0xf837, 0xf8fe, 0xf933, 0xf8fe, 0xf933, 0xf9e6, 0xf9e0, +0xf9e6, 0xf9e0, 0xfb01, 0xfabd, 0xfb01, 0xfabd, 0xfcfa, 0xfc78, 0xfcfa, 0xfc78, 0xffd5, +0xff16, 0xffd5, 0xff16, 0xffd5, 0xff16, 0x227, 0x12a, 0x227, 0x12a, 0x422, 0x2ea, +0x422, 0x2ea, 0x5ed, 0x47c, 0x5ed, 0x47c, 0x6db, 0x535, 0x6db, 0x535, 0x7fa, +0x621, 0x7fa, 0x621, 0x7fa, 0x621, 0x898, 0x692, 0x898, 0x692, 0x8c1, 0x691, +0x8c1, 0x691, 0x98e, 0x73b, 0x98e, 0x73b, 0xab2, 0x83f, 0xab2, 0x83f, 0xcc4, +0xa37, 0xcc4, 0xa37, 0xef5, 0xc53, 0xef5, 0xc53, 0xef5, 0xc53, 0x10a8, 0xdf6, +0x10a8, 0xdf6, 0x1229, 0xf6c, 0x1229, 0xf6c, 0x1359, 0x1094, 0x1359, 0x1094, 0x14ba, +0x11f2, 0x14ba, 0x11f2, 0x160d, 0x1345, 0x160d, 0x1345, 0x16af, 0x13ea, 0x16af, 0x13ea, +0x16af, 0x13ea, 0x1733, 0x1474, 0x1733, 0x1474, 0x184b, 0x1594, 0x184b, 0x1594, 0x191e, +0x1672, 0x191e, 0x1672, 0x19df, 0x173f, 0x19df, 0x173f, 0x1a55, 0x17c3, 0x1a55, 0x17c3, +0x1a55, 0x17c3, 0x1a0f, 0x178d, 0x1a0f, 0x178d, 0x1a6a, 0x17f9, 0x1a6a, 0x17f9, 0x1af1, +0x1893, 0x1af1, 0x1893, 0x1ae4, 0x189a, 0x1ae4, 0x189a, 0x1a73, 0x183f, 0x1a73, 0x183f, +0x19d3, 0x17b7, 0x19d3, 0x17b7, 0x19d3, 0x17b7, 0x1914, 0x1712, 0x1914, 0x1712, 0x186f, +0x1688, 0x186f, 0x1688, 0x1861, 0x1696, 0x1861, 0x1696, 0x1882, 0x16d6, 0x1882, 0x16d6, +0x180c, 0x1680, 0x180c, 0x1680, 0x1769, 0x15fe, 0x1769, 0x15fe, 0x1769, 0x15fe, 0x16c8, +0x157e, 0x16c8, 0x157e, 0x14f7, 0x13cf, 0x14f7, 0x13cf, 0x1356, 0x1250, 0x1356, 0x1250, +0x129c, 0x11b6, 0x129c, 0x11b6, 0x11d6, 0x110f, 0x11d6, 0x110f, 0x11d6, 0x110f, 0x11ad, +0x1103, 0x11ad, 0x1103, 0x1147, 0x10b8, 0x1147, 0x10b8, 0x1031, 0xfb7, 0x1031, 0xfb7, +0xeef, 0xe88, 0xeef, 0xe88, 0xda7, 0xd4e, 0xda7, 0xd4e, 0xd09, 0xcb8, 0xd09, +0xcb8, 0xd09, 0xcb8, 0xc41, 0xbf2, 0xc41, 0xbf2, 0xb1f, 0xacd, 0xb1f, 0xacd, +0xad0, 0xa75, 0xad0, 0xa75, 0xa5a, 0x9f0, 0xa5a, 0x9f0, 0xa24, 0x9a5, 0xa24, +0x9a5, 0xab5, 0xa1b, 0xab5, 0xa1b, 0xab5, 0xa1b, 0xab0, 0x9f8, 0xab0, 0x9f8, +0xab3, 0x9d9, 0xab3, 0x9d9, 0xaa8, 0x9aa, 0xaa8, 0x9aa, 0xaac, 0x987, 0xaac, +0x987, 0xb09, 0x9bd, 0xb09, 0x9bd, 0xb09, 0x9bd, 0xae9, 0x977, 0xae9, 0x977, +0xa9e, 0x907, 0xa9e, 0x907, 0xa49, 0x88f, 0xa49, 0x88f, 0xa60, 0x887, 0xa60, +0x887, 0xad1, 0x8de, 0xad1, 0x8de, 0xadc, 0x8d5, 0xadc, 0x8d5, 0xadc, 0x8d5, +0xafd, 0x8e7, 0xafd, 0x8e7, 0xaf4, 0x8d6, 0xaf4, 0x8d6, 0xad3, 0x8b3, 0xad3, +0x8b3, 0xb34, 0x919, 0xb34, 0x919, 0xab7, 0x8a8, 0xab7, 0x8a8, 0x985, 0x787, +0x985, 0x787, 0x985, 0x787, 0x8cd, 0x6e7, 0x8cd, 0x6e7, 0x848, 0x67f, 0x848, +0x67f, 0x7ce, 0x626, 0x7ce, 0x626, 0x72b, 0x5a8, 0x72b, 0x5a8, 0x6cd, 0x571, +0x6cd, 0x571, 0x6cd, 0x571, 0x63a, 0x507, 0x63a, 0x507, 0x581, 0x477, 0x581, +0x477, 0x51d, 0x43c, 0x51d, 0x43c, 0x469, 0x3b0, 0x469, 0x3b0, 0x412, 0x37f, +0x412, 0x37f, 0x3d4, 0x365, 0x3d4, 0x365, 0x3d4, 0x365, 0x362, 0x314, 0x362, +0x314, 0x2d5, 0x2a4, 0x2d5, 0x2a4, 0x21a, 0x203, 0x21a, 0x203, 0x1bb, 0x1bb, +0x1bb, 0x1bb, 0x131, 0x144, 0x131, 0x144, 0xba, 0xdd, 0xba, 0xdd, 0xba, +0xdd, 0x29, 0x5b, 0x29, 0x5b, 0xff3a, 0xff77, 0xff3a, 0xff77, 0xff28, 0xff70, +0xff28, 0xff70, 0xfeed, 0xff3d, 0xfeed, 0xff3d, 0xfe86, 0xfedf, 0xfe86, 0xfedf, 0xfe86, +0xfedf, 0xfe81, 0xfee3, 0xfe81, 0xfee3, 0xfdc3, 0xfe2f, 0xfdc3, 0xfe2f, 0xfd76, 0xfdee, +0xfd76, 0xfdee, 0xfd3a, 0xfdbd, 0xfd3a, 0xfdbd, 0xfcf1, 0xfd84, 0xfcf1, 0xfd84, 0xfca7, +0xfd4a, 0xfca7, 0xfd4a, 0xfca7, 0xfd4a, 0xfb56, 0xfc0c, 0xfb56, 0xfc0c, 0xfb1a, 0xfbe6, +0xfb1a, 0xfbe6, 0xfb9d, 0xfc80, 0xfb9d, 0xfc80, 0xfc44, 0xfd41, 0xfc44, 0xfd41, 0xfd50, +0xfe68, 0xfd50, 0xfe68, 0xfd1e, 0xfe53, 0xfd1e, 0xfe53, 0xfd1e, 0xfe53, 0xfbee, 0xfd41, +0xfbee, 0xfd41, 0xfa8c, 0xfbfe, 0xfa8c, 0xfbfe, 0xf952, 0xfae3, 0xf952, 0xfae3, 0xf7fb, +0xf9ac, 0xf7fb, 0xf9ac, 0xf68d, 0xf85e, 0xf68d, 0xf85e, 0xf68d, 0xf85e, 0xf576, 0xf767, +0xf576, 0xf767, 0xf499, 0xf6a9, 0xf499, 0xf6a9, 0xf472, 0xf6a1, 0xf472, 0xf6a1, 0xf4ca, +0xf717, 0xf4ca, 0xf717, 0xf461, 0xf6cd, 0xf461, 0xf6cd, 0xf362, 0xf5ec, 0xf362, 0xf5ec, +0xf362, 0xf5ec, 0xf286, 0xf52f, 0xf286, 0xf52f, 0xf1a5, 0xf46b, 0xf1a5, 0xf46b, 0xf0e9, +0xf3ce, 0xf0e9, 0xf3ce, 0xeff7, 0xf2fc, 0xeff7, 0xf2fc, 0xeecd, 0xf1f1, 0xeecd, 0xf1f1, +0xedb8, 0xf0fc, 0xedb8, 0xf0fc, 0xedb8, 0xf0fc, 0xecd7, 0xf03c, 0xecd7, 0xf03c, 0xecaf, +0xf035, 0xecaf, 0xf035, 0xec48, 0xefef, 0xec48, 0xefef, 0xeb56, 0xef1e, 0xeb56, 0xef1e, +0xea29, 0xee11, 0xea29, 0xee11, 0xea29, 0xee11, 0xe8e5, 0xecec, 0xe8e5, 0xecec, 0xe7c8, +0xebec, 0xe7c8, 0xebec, 0xe641, 0xea7f, 0xe641, 0xea7f, 0xe55f, 0xe9b5, 0xe55f, 0xe9b5, +0xe4fc, 0xe966, 0xe4fc, 0xe966, 0xe475, 0xe8ee, 0xe475, 0xe8ee, 0xe475, 0xe8ee, 0xe46b, +0xe8ed, 0xe46b, 0xe8ed, 0xe3dc, 0xe863, 0xe3dc, 0xe863, 0xe34f, 0xe7d3, 0xe34f, 0xe7d3, +0xe30b, 0xe786, 0xe30b, 0xe786, 0xe2b1, 0xe71b, 0xe2b1, 0xe71b, 0xe20b, 0xe65f, 0xe20b, +0xe65f, 0xe20b, 0xe65f, 0xe108, 0xe53e, 0xe108, 0xe53e, 0xe140, 0xe551, 0xe140, 0xe551, +0xe1f8, 0xe5de, 0xe1f8, 0xe5de, 0xe264, 0xe619, 0xe264, 0xe619, 0xe213, 0xe593, 0xe213, +0xe593, 0xe213, 0xe593, 0xe184, 0xe4ca, 0xe184, 0xe4ca, 0xe200, 0xe509, 0xe200, 0xe509, +0xe283, 0xe54d, 0xe283, 0xe54d, 0xe363, 0xe5ed, 0xe363, 0xe5ed, 0xe44f, 0xe699, 0xe44f, +0xe699, 0xe554, 0xe75f, 0xe554, 0xe75f, 0xe554, 0xe75f, 0xe67e, 0xe84c, 0xe67e, 0xe84c, +0xe736, 0xe8ca, 0xe736, 0xe8ca, 0xe851, 0xe9af, 0xe851, 0xe9af, 0xe957, 0xea83, 0xe957, +0xea83, 0xead3, 0xebd3, 0xead3, 0xebd3, 0xead3, 0xebd3, 0xec4d, 0xed26, 0xec4d, 0xed26, +0xece4, 0xed9c, 0xece4, 0xed9c, 0xed62, 0xedfe, 0xed62, 0xedfe, 0xed83, 0xee0a, 0xed83, +0xee0a, 0xedbb, 0xee31, 0xedbb, 0xee31, 0xee58, 0xeec2, 0xee58, 0xeec2, 0xee58, 0xeec2, +0xeee1, 0xef45, 0xeee1, 0xef45, 0xef60, 0xefc1, 0xef60, 0xefc1, 0xefc2, 0xf024, 0xefc2, +0xf024, 0xef69, 0xefcf, 0xef69, 0xefcf, 0xef48, 0xefb4, 0xef48, 0xefb4, 0xefc1, 0xf035, +0xefc1, 0xf035, 0xefc1, 0xf035, 0xef6a, 0xefe8, 0xef6a, 0xefe8, 0xef6d, 0xeff5, 0xef6d, +0xeff5, 0xef66, 0xeff8, 0xef66, 0xeff8, 0xeee1, 0xef7e, 0xeee1, 0xef7e, 0xef2f, 0xefd6, +0xef2f, 0xefd6, 0xef2f, 0xefd6, 0xef34, 0xefe6, 0xef34, 0xefe6, 0xef9c, 0xf058, 0xef9c, +0xf058, 0xf036, 0xf0fc, 0xf036, 0xf0fc, 0xf092, 0xf161, 0xf092, 0xf161, 0xf17d, 0xf256, +0xf17d, 0xf256, 0xf1f6, 0xf2da, 0xf1f6, 0xf2da, 0xf1f6, 0xf2da, 0xf232, 0xf320, 0xf232, +0xf320, 0xf200, 0xf2f9, 0xf200, 0xf2f9, 0xf210, 0xf314, 0xf210, 0xf314, 0xf23a, 0xf34a, +0xf23a, 0xf34a, 0xf1fd, 0xf31a, 0xf1fd, 0xf31a, 0xf1e0, 0xf309, 0xf1e0, 0xf309, 0xf1e0, +0xf309, 0xf137, 0xf26d, 0xf137, 0xf26d, 0xf0a3, 0xf1e5, 0xf0a3, 0xf1e5, 0xeff6, 0xf144, +0xeff6, 0xf144, 0xefd1, 0xf129, 0xefd1, 0xf129, 0xef56, 0xf0b7, 0xef56, 0xf0b7, 0xef56, +0xf0b7, 0xeea8, 0xf00f, 0xeea8, 0xf00f, 0xef43, 0xf0ad, 0xef43, 0xf0ad, 0xef68, 0xf0d0, +0xef68, 0xf0d0, 0xefe6, 0xf147, 0xefe6, 0xf147, 0xf04b, 0xf1a2, 0xf04b, 0xf1a2, 0xf0a8, +0xf1ed, 0xf0a8, 0xf1ed, 0xf0a8, 0xf1ed, 0xf136, 0xf264, 0xf136, 0xf264, 0xf160, 0xf270, +0xf160, 0xf270, 0xf2b1, 0xf39c, 0xf2b1, 0xf39c, 0xf408, 0xf4c9, 0xf408, 0xf4c9, 0xf5bd, +0xf64d, 0xf5bd, 0xf64d, 0xf848, 0xf8a1, 0xf848, 0xf8a1, 0xf848, 0xf8a1, 0xfae9, 0xfb06, +0xfae9, 0xfb06, 0xfd78, 0xfd54, 0xfd78, 0xfd54, 0xffe0, 0xff79, 0xffe0, 0xff79, 0x2bb, +0x20c, 0x2bb, 0x20c, 0x4f0, 0x3fa, 0x4f0, 0x3fa, 0x4f0, 0x3fa, 0x688, 0x548, +0x688, 0x548, 0x866, 0x6df, 0x866, 0x6df, 0xa2d, 0x860, 0xa2d, 0x860, 0xbe4, +0x9d5, 0xbe4, 0x9d5, 0xe23, 0xbd6, 0xe23, 0xbd6, 0x1081, 0xdfb, 0x1081, 0xdfb, +0x1081, 0xdfb, 0x128a, 0xfd2, 0x128a, 0xfd2, 0x14c2, 0x11de, 0x14c2, 0x11de, 0x16b5, +0x13ab, 0x16b5, 0x13ab, 0x1875, 0x154d, 0x1875, 0x154d, 0x19be, 0x167f, 0x19be, 0x167f, +0x1a57, 0x1709, 0x1a57, 0x1709, 0x1a57, 0x1709, 0x1b29, 0x17d1, 0x1b29, 0x17d1, 0x1c36, +0x18db, 0x1c36, 0x18db, 0x1d55, 0x19fc, 0x1d55, 0x19fc, 0x1d78, 0x1a27, 0x1d78, 0x1a27, +0x1d4c, 0x1a05, 0x1d4c, 0x1a05, 0x1d4c, 0x1a05, 0x1d44, 0x1a0b, 0x1d44, 0x1a0b, 0x1c97, +0x196e, 0x1c97, 0x196e, 0x1c37, 0x191e, 0x1c37, 0x191e, 0x1ae4, 0x17dd, 0x1ae4, 0x17dd, +0x195f, 0x1668, 0x195f, 0x1668, 0x1826, 0x153f, 0x1826, 0x153f, 0x1826, 0x153f, 0x1650, +0x1376, 0x1650, 0x1376, 0x15bc, 0x12ee, 0x15bc, 0x12ee, 0x1541, 0x127c, 0x1541, 0x127c, +0x14fd, 0x123f, 0x14fd, 0x123f, 0x1512, 0x1259, 0x1512, 0x1259, 0x1412, 0x115c, 0x1412, +0x115c, 0x1412, 0x115c, 0x139e, 0x10ea, 0x139e, 0x10ea, 0x13fe, 0x114b, 0x13fe, 0x114b, +0x144e, 0x119b, 0x144e, 0x119b, 0x1419, 0x1166, 0x1419, 0x1166, 0x1401, 0x114f, 0x1401, +0x114f, 0x1401, 0x114f, 0x1453, 0x11a4, 0x1453, 0x11a4, 0x147d, 0x11d3, 0x147d, 0x11d3, +0x14be, 0x121b, 0x14be, 0x121b, 0x1448, 0x11ae, 0x1448, 0x11ae, 0x1306, 0x107b, 0x1306, +0x107b, 0x119b, 0xf21, 0x119b, 0xf21, 0x119b, 0xf21, 0xfd0, 0xd6b, 0xfd0, 0xd6b, +0xe54, 0xc08, 0xe54, 0xc08, 0xd3e, 0xb10, 0xd3e, 0xb10, 0xc32, 0xa25, 0xc32, +0xa25, 0xbd4, 0x9ea, 0xbd4, 0x9ea, 0xbb4, 0x9f2, 0xbb4, 0x9f2, 0xbb4, 0x9f2, +0xbcd, 0xa35, 0xbcd, 0xa35, 0xbf0, 0xa84, 0xbf0, 0xa84, 0xb01, 0x9c3, 0xb01, +0x9c3, 0xa2b, 0x91c, 0xa2b, 0x91c, 0x951, 0x872, 0x951, 0x872, 0x951, 0x872, +0x806, 0x757, 0x806, 0x757, 0x6e7, 0x669, 0x6e7, 0x669, 0x4d1, 0x482, 0x4d1, +0x482, 0x32d, 0x30f, 0x32d, 0x30f, 0x25c, 0x26c, 0x25c, 0x26c, 0x121, 0x15f, +0x121, 0x15f, 0x121, 0x15f, 0x45, 0xaf, 0x45, 0xaf, 0xfec6, 0xff5b, 0xfec6, +0xff5b, 0xfd21, 0xfde1, 0xfd21, 0xfde1, 0xfbf8, 0xfce0, 0xfbf8, 0xfce0, 0xfad6, 0xfbe5, +0xfad6, 0xfbe5, 0xfa07, 0xfb3c, 0xfa07, 0xfb3c, 0xfa07, 0xfb3c, 0xf890, 0xf9e8, 0xf890, +0xf9e8, 0xf6df, 0xf859, 0xf6df, 0xf859, 0xf598, 0xf733, 0xf598, 0xf733, 0xf4a0, 0xf659, +0xf4a0, 0xf659, 0xf426, 0xf5fa, 0xf426, 0xf5fa, 0xf426, 0xf5fa, 0xf41a, 0xf607, 0xf41a, +0xf607, 0xf38c, 0xf58e, 0xf38c, 0xf58e, 0xf250, 0xf464, 0xf250, 0xf464, 0xf184, 0xf3a5, +0xf184, 0xf3a5, 0xf143, 0xf36d, 0xf143, 0xf36d, 0xf13f, 0xf36d, 0xf13f, 0xf36d, 0xf13f, +0xf36d, 0xf116, 0xf342, 0xf116, 0xf342, 0xf0f9, 0xf31e, 0xf0f9, 0xf31e, 0xf03e, 0xf256, +0xf03e, 0xf256, 0xefad, 0xf1b2, 0xefad, 0xf1b2, 0xefdc, 0xf1c8, 0xefdc, 0xf1c8, 0xef5e, +0xf12b, 0xef5e, 0xf12b, 0xef5e, 0xf12b, 0xef59, 0xf101, 0xef59, 0xf101, 0xef85, 0xf103, +0xef85, 0xf103, 0xefd5, 0xf124, 0xefd5, 0xf124, 0xf0ed, 0xf208, 0xf0ed, 0xf208, 0xf244, +0xf328, 0xf244, 0xf328, 0xf244, 0xf328, 0xf38f, 0xf439, 0xf38f, 0xf439, 0xf423, 0xf491, +0xf423, 0xf491, 0xf4ac, 0xf4dd, 0xf4ac, 0xf4dd, 0xf57e, 0xf571, 0xf57e, 0xf571, 0xf6cc, +0xf682, 0xf6cc, 0xf682, 0xf846, 0xf7bf, 0xf846, 0xf7bf, 0xf846, 0xf7bf, 0xf974, 0xf8b3, +0xf974, 0xf8b3, 0xfa73, 0xf97a, 0xfa73, 0xf97a, 0xfbad, 0xfa80, 0xfbad, 0xfa80, 0xfddc, +0xfc7e, 0xfddc, 0xfc7e, 0x58, 0xfece, 0x58, 0xfece, 0x58, 0xfece, 0x2e5, 0x131, +0x2e5, 0x131, 0x468, 0x28f, 0x468, 0x28f, 0x4a1, 0x2a6, 0x4a1, 0x2a6, 0x4bb, +0x2a3, 0x4bb, 0x2a3, 0x4cb, 0x298, 0x4cb, 0x298, 0x54d, 0x302, 0x54d, 0x302, +0x54d, 0x302, 0x597, 0x337, 0x597, 0x337, 0x5f3, 0x380, 0x5f3, 0x380, 0x6fc, +0x476, 0x6fc, 0x476, 0x84f, 0x5b9, 0x84f, 0x5b9, 0xa98, 0x7f2, 0xa98, 0x7f2, +0xc75, 0x9bf, 0xc75, 0x9bf, 0xc75, 0x9bf, 0xd61, 0xa9c, 0xd61, 0xa9c, 0xe81, +0xbad, 0xe81, 0xbad, 0xf67, 0xc85, 0xf67, 0xc85, 0x1087, 0xd97, 0x1087, 0xd97, +0x11f7, 0xefa, 0x11f7, 0xefa, 0x11f7, 0xefa, 0x1366, 0x105d, 0x1366, 0x105d, 0x14ad, +0x119a, 0x14ad, 0x119a, 0x1579, 0x125e, 0x1579, 0x125e, 0x16c3, 0x13a4, 0x16c3, 0x13a4, +0x17f3, 0x14d2, 0x17f3, 0x14d2, 0x1861, 0x1543, 0x1861, 0x1543, 0x1861, 0x1543, 0x191a, +0x1603, 0x191a, 0x1603, 0x1990, 0x1686, 0x1990, 0x1686, 0x197d, 0x1684, 0x197d, 0x1684, +0x191e, 0x163c, 0x191e, 0x163c, 0x187f, 0x15b8, 0x187f, 0x15b8, 0x1885, 0x15e0, 0x1885, +0x15e0, 0x1885, 0x15e0, 0x189f, 0x1621, 0x189f, 0x1621, 0x186c, 0x1618, 0x186c, 0x1618, +0x1821, 0x15fb, 0x1821, 0x15fb, 0x177c, 0x1587, 0x177c, 0x1587, 0x1698, 0x14d6, 0x1698, +0x14d6, 0x1698, 0x14d6, 0x1531, 0x13a4, 0x1531, 0x13a4, 0x144a, 0x12f0, 0x144a, 0x12f0, +0x13dc, 0x12b3, 0x13dc, 0x12b3, 0x134d, 0x1254, 0x134d, 0x1254, 0x131c, 0x124f, 0x131c, +0x124f, 0x1244, 0x119e, 0x1244, 0x119e, 0x1244, 0x119e, 0x1103, 0x107f, 0x1103, 0x107f, +0x1037, 0xfce, 0x1037, 0xfce, 0xf4c, 0xef9, 0xf4c, 0xef9, 0xe5b, 0xe15, 0xe5b, +0xe15, 0xd8c, 0xd4d, 0xd8c, 0xd4d, 0xcf5, 0xcb6, 0xcf5, 0xcb6, 0xcf5, 0xcb6, +0xce1, 0xc9c, 0xce1, 0xc9c, 0xc9b, 0xc49, 0xc9b, 0xc49, 0xc9a, 0xc36, 0xc9a, +0xc36, 0xd6b, 0xcf1, 0xd6b, 0xcf1, 0xdfc, 0xd67, 0xdfc, 0xd67, 0xdfc, 0xd67, +0xe7e, 0xdcd, 0xe7e, 0xdcd, 0xef1, 0xe23, 0xef1, 0xe23, 0xf25, 0xe38, 0xf25, +0xe38, 0xf47, 0xe3d, 0xf47, 0xe3d, 0xf33, 0xe0e, 0xf33, 0xe0e, 0xef5, 0xdb8, +0xef5, 0xdb8, 0xef5, 0xdb8, 0xec3, 0xd72, 0xec3, 0xd72, 0xf14, 0xdb2, 0xf14, +0xdb2, 0xf94, 0xe27, 0xf94, 0xe27, 0x1024, 0xeb1, 0x1024, 0xeb1, 0x1060, 0xeec, +0x1060, 0xeec, 0xff9, 0xe89, 0xff9, 0xe89, 0xff9, 0xe89, 0xf7b, 0xe14, 0xf7b, +0xe14, 0xeb6, 0xd5c, 0xeb6, 0xd5c, 0xdcb, 0xc82, 0xdcb, 0xc82, 0xcda, 0xba5, +0xcda, 0xba5, 0xbeb, 0xacc, 0xbeb, 0xacc, 0xbeb, 0xacc, 0xb6f, 0xa6a, 0xb6f, +0xa6a, 0xacb, 0x9df, 0xacb, 0x9df, 0x9fa, 0x927, 0x9fa, 0x927, 0x996, 0x8dd, +0x996, 0x8dd, 0x8d9, 0x838, 0x8d9, 0x838, 0x837, 0x7ad, 0x837, 0x7ad, 0x837, +0x7ad, 0x810, 0x79b, 0x810, 0x79b, 0x73e, 0x6dd, 0x73e, 0x6dd, 0x65b, 0x60b, +0x65b, 0x60b, 0x5d3, 0x592, 0x5d3, 0x592, 0x520, 0x4ec, 0x520, 0x4ec, 0x4bc, +0x493, 0x4bc, 0x493, 0x4bc, 0x493, 0x446, 0x429, 0x446, 0x429, 0x352, 0x33e, +0x352, 0x33e, 0x299, 0x28f, 0x299, 0x28f, 0x208, 0x208, 0x208, 0x208, 0x1de, +0x1ea, 0x1de, 0x1ea, 0x1de, 0x1ea, 0x160, 0x178, 0x160, 0x178, 0x2b, 0x51, +0x2b, 0x51, 0xffd8, 0xe, 0xffd8, 0xe, 0xff8b, 0xffd3, 0xff8b, 0xffd3, 0xfea4, +0xff00, 0xfea4, 0xff00, 0xfdd2, 0xfe45, 0xfdd2, 0xfe45, 0xfdd2, 0xfe45, 0xfcec, 0xfd77, +0xfcec, 0xfd77, 0xfb86, 0xfc2c, 0xfb86, 0xfc2c, 0xfa20, 0xfae1, 0xfa20, 0xfae1, 0xf970, +0xfa4d, 0xf970, 0xfa4d, 0xf8e1, 0xf9db, 0xf8e1, 0xf9db, 0xf8c1, 0xf9d8, 0xf8c1, 0xf9d8, +0xf8c1, 0xf9d8, 0xf92c, 0xfa5f, 0xf92c, 0xfa5f, 0xf977, 0xfac5, 0xf977, 0xfac5, 0xf95b, +0xfac1, 0xf95b, 0xfac1, 0xf957, 0xfad4, 0xf957, 0xfad4, 0xf901, 0xfa92, 0xf901, 0xfa92, +0xf901, 0xfa92, 0xf77f, 0xf922, 0xf77f, 0xf922, 0xf5e5, 0xf797, 0xf5e5, 0xf797, 0xf41f, +0xf5dd, 0xf41f, 0xf5dd, 0xf2a8, 0xf46f, 0xf2a8, 0xf46f, 0xf1c3, 0xf391, 0xf1c3, 0xf391, +0xf0de, 0xf2b1, 0xf0de, 0xf2b1, 0xf0de, 0xf2b1, 0xf07d, 0xf254, 0xf07d, 0xf254, 0xefe2, +0xf1bc, 0xefe2, 0xf1bc, 0xef8b, 0xf167, 0xef8b, 0xf167, 0xef49, 0xf128, 0xef49, 0xf128, +0xee6c, 0xf04f, 0xee6c, 0xf04f, 0xedb6, 0xef9e, 0xedb6, 0xef9e, 0xedb6, 0xef9e, 0xecac, +0xee9c, 0xecac, 0xee9c, 0xebbc, 0xedb5, 0xebbc, 0xedb5, 0xeaa2, 0xeca8, 0xeaa2, 0xeca8, +0xe937, 0xeb4d, 0xe937, 0xeb4d, 0xe8aa, 0xead3, 0xe8aa, 0xead3, 0xe8aa, 0xead3, 0xe893, +0xead2, 0xe893, 0xead2, 0xe8aa, 0xeb01, 0xe8aa, 0xeb01, 0xe851, 0xeac3, 0xe851, 0xeac3, +0xe718, 0xe9a6, 0xe718, 0xe9a6, 0xe5d5, 0xe880, 0xe5d5, 0xe880, 0xe4bd, 0xe786, 0xe4bd, +0xe786, 0xe4bd, 0xe786, 0xe3a3, 0xe689, 0xe3a3, 0xe689, 0xe27d, 0xe57f, 0xe27d, 0xe57f, +0xe15b, 0xe477, 0xe15b, 0xe477, 0xe0c1, 0xe3f3, 0xe0c1, 0xe3f3, 0xe085, 0xe3ca, 0xe085, +0xe3ca, 0xe06a, 0xe3be, 0xe06a, 0xe3be, 0xe06a, 0xe3be, 0xe0b1, 0xe40f, 0xe0b1, 0xe40f, +0xe05c, 0xe3be, 0xe05c, 0xe3be, 0xdfdb, 0xe33b, 0xdfdb, 0xe33b, 0xdf84, 0xe2de, 0xdf84, +0xe2de, 0xdf3e, 0xe28b, 0xdf3e, 0xe28b, 0xdf3e, 0xe28b, 0xdfb6, 0xe2f1, 0xdfb6, 0xe2f1, +0xdfc5, 0xe2e9, 0xdfc5, 0xe2e9, 0xe01c, 0xe325, 0xe01c, 0xe325, 0xe027, 0xe311, 0xe027, +0xe311, 0xdf8f, 0xe257, 0xdf8f, 0xe257, 0xe000, 0xe2a5, 0xe000, 0xe2a5, 0xe000, 0xe2a5, +0xe05b, 0xe2db, 0xe05b, 0xe2db, 0xe156, 0xe3b1, 0xe156, 0xe3b1, 0xe2ed, 0xe524, 0xe2ed, +0xe524, 0xe3c7, 0xe5db, 0xe3c7, 0xe5db, 0xe481, 0xe675, 0xe481, 0xe675, 0xe481, 0xe675, +0xe597, 0xe76e, 0xe597, 0xe76e, 0xe70d, 0xe8c9, 0xe70d, 0xe8c9, 0xe895, 0xea3c, 0xe895, +0xea3c, 0xea3d, 0xebd1, 0xea3d, 0xebd1, 0xeb65, 0xeceb, 0xeb65, 0xeceb, 0xebcb, 0xed47, +0xebcb, 0xed47, 0xebcb, 0xed47, 0xec94, 0xee09, 0xec94, 0xee09, 0xedde, 0xef50, 0xedde, +0xef50, 0xee8c, 0xeffe, 0xee8c, 0xeffe, 0xef10, 0xf084, 0xef10, 0xf084, 0xeffa, 0xf173, +0xeffa, 0xf173, 0xf0c2, 0xf241, 0xf0c2, 0xf241, 0xf0c2, 0xf241, 0xf199, 0xf31f, 0xf199, +0xf31f, 0xf22b, 0xf3b9, 0xf22b, 0xf3b9, 0xf2a1, 0xf436, 0xf2a1, 0xf436, 0xf2c5, 0xf460, +0xf2c5, 0xf460, 0xf29f, 0xf440, 0xf29f, 0xf440, 0xf29f, 0xf440, 0xf340, 0xf4e5, 0xf340, +0xf4e5, 0xf3a0, 0xf548, 0xf3a0, 0xf548, 0xf3b0, 0xf55b, 0xf3b0, 0xf55b, 0xf3ee, 0xf59a, +0xf3ee, 0xf59a, 0xf3ea, 0xf596, 0xf3ea, 0xf596, 0xf426, 0xf5d2, 0xf426, 0xf5d2, 0xf426, +0xf5d2, 0xf4f1, 0xf69c, 0xf4f1, 0xf69c, 0xf622, 0xf7cd, 0xf622, 0xf7cd, 0xf6c8, 0xf873, +0xf6c8, 0xf873, 0xf72b, 0xf8d7, 0xf72b, 0xf8d7, 0xf7e7, 0xf995, 0xf7e7, 0xf995, 0xf80f, +0xf9c0, 0xf80f, 0xf9c0, 0xf80f, 0xf9c0, 0xf811, 0xf9c7, 0xf811, 0xf9c7, 0xf802, 0xf9bf, +0xf802, 0xf9bf, 0xf7f6, 0xf9bb, 0xf7f6, 0xf9bb, 0xf804, 0xf9d4, 0xf804, 0xf9d4, 0xf74d, +0xf929, 0xf74d, 0xf929, 0xf74d, 0xf929, 0xf67f, 0xf867, 0xf67f, 0xf867, 0xf5e4, 0xf7da, +0xf5e4, 0xf7da, 0xf576, 0xf778, 0xf576, 0xf778, 0xf549, 0xf757, 0xf549, 0xf757, 0xf4f8, +0xf711, 0xf4f8, 0xf711, 0xf531, 0xf751, 0xf531, 0xf751, 0xf531, 0xf751, 0xf624, 0xf848, +0xf624, 0xf848, 0xf6d9, 0xf8fe, 0xf6d9, 0xf8fe, 0xf745, 0xf964, 0xf745, 0xf964, 0xf77a, +0xf98f, 0xf77a, 0xf98f, 0xf75e, 0xf962, 0xf75e, 0xf962, 0xf7aa, 0xf996, 0xf7aa, 0xf996, +0xf7aa, 0xf996, 0xf80a, 0xf9d8, 0xf80a, 0xf9d8, 0xf85c, 0xfa04, 0xf85c, 0xfa04, 0xf907, +0xfa83, 0xf907, 0xfa83, 0xfa16, 0xfb5f, 0xfa16, 0xfb5f, 0xfc29, 0xfd39, 0xfc29, 0xfd39, +0xfc29, 0xfd39, 0xfee9, 0xffb9, 0xfee9, 0xffb9, 0x18f, 0x21b, 0x18f, 0x21b, 0x3cd, +0x412, 0x3cd, 0x412, 0x573, 0x56d, 0x573, 0x56d, 0x6c3, 0x670, 0x6c3, 0x670, +0x840, 0x7a0, 0x840, 0x7a0, 0x840, 0x7a0, 0x963, 0x876, 0x963, 0x876, 0xa14, +0x8dc, 0xa14, 0x8dc, 0xbbc, 0xa3d, 0xbbc, 0xa3d, 0xe28, 0xc65, 0xe28, 0xc65, +0x10f4, 0xef3, 0x10f4, 0xef3, 0x13d4, 0x119a, 0x13d4, 0x119a, 0x13d4, 0x119a, 0x15bc, +0x1351, 0x15bc, 0x1351, 0x1730, 0x1499, 0x1730, 0x1499, 0x185e, 0x15a5, 0x185e, 0x15a5, +0x1946, 0x1671, 0x1946, 0x1671, 0x1a3f, 0x1757, 0x1a3f, 0x1757, 0x1a3f, 0x1757, 0x1ac6, +0x17d2, 0x1ac6, 0x17d2, 0x1b07, 0x180e, 0x1b07, 0x180e, 0x1b3e, 0x1848, 0x1b3e, 0x1848, +0x1b7b, 0x188d, 0x1b7b, 0x188d, 0x1ba8, 0x18c8, 0x1ba8, 0x18c8, 0x1ba7, 0x18d9, 0x1ba7, +0x18d9, 0x1ba7, 0x18d9, 0x1b9a, 0x18e1, 0x1b9a, 0x18e1, 0x1ae1, 0x1840, 0x1ae1, 0x1840, +0x1984, 0x16fd, 0x1984, 0x16fd, 0x1800, 0x1594, 0x1800, 0x1594, 0x1656, 0x1404, 0x1656, +0x1404, 0x14a3, 0x126b, 0x14a3, 0x126b, 0x14a3, 0x126b, 0x1378, 0x1158, 0x1378, 0x1158, +0x1291, 0x1088, 0x1291, 0x1088, 0x1182, 0xf8c, 0x1182, 0xf8c, 0x113d, 0xf58, 0x113d, +0xf58, 0x1165, 0xf8e, 0x1165, 0xf8e, 0x1165, 0xf8e, 0x1193, 0xfc7, 0x1193, 0xfc7, +0x118d, 0xfc9, 0x118d, 0xfc9, 0x10f8, 0xf3a, 0x10f8, 0xf3a, 0x1082, 0xec7, 0x1082, +0xec7, 0x1029, 0xe6f, 0x1029, 0xe6f, 0xffd, 0xe44, 0xffd, 0xe44, 0xffd, 0xe44, +0xfdb, 0xe21, 0xfdb, 0xe21, 0xf5b, 0xd9f, 0xf5b, 0xd9f, 0xe51, 0xc94, 0xe51, +0xc94, 0xcfc, 0xb3f, 0xcfc, 0xb3f, 0xbcc, 0xa11, 0xbcc, 0xa11, 0xb11, 0x95a, +0xb11, 0x95a, 0xb11, 0x95a, 0xabe, 0x90e, 0xabe, 0x90e, 0x9f5, 0x84e, 0x9f5, +0x84e, 0x93a, 0x79f, 0x93a, 0x79f, 0x8c7, 0x73d, 0x8c7, 0x73d, 0x854, 0x6dd, +0x854, 0x6dd, 0x854, 0x6dd, 0x849, 0x6ea, 0x849, 0x6ea, 0x807, 0x6c5, 0x807, +0x6c5, 0x724, 0x601, 0x724, 0x601, 0x639, 0x539, 0x639, 0x539, 0x5c8, 0x4f0, +0x5c8, 0x4f0, 0x4f0, 0x440, 0x4f0, 0x440, 0x4f0, 0x440, 0x35e, 0x2dc, 0x35e, +0x2dc, 0x221, 0x1cd, 0x221, 0x1cd, 0x15b, 0x138, 0x15b, 0x138, 0xac, 0xbc, +0xac, 0xbc, 0xffd1, 0x13, 0xffd1, 0x13, 0xfed1, 0xff46, 0xfed1, 0xff46, 0xfed1, +0xff46, 0xfdbf, 0xfe67, 0xfdbf, 0xfe67, 0xfcbe, 0xfd98, 0xfcbe, 0xfd98, 0xfbd1, 0xfcdc, +0xfbd1, 0xfcdc, 0xfab5, 0xfbef, 0xfab5, 0xfbef, 0xf9b1, 0xfb17, 0xf9b1, 0xfb17, 0xf9b1, +0xfb17, 0xf8d2, 0xfa61, 0xf8d2, 0xfa61, 0xf7fe, 0xf9b4, 0xf7fe, 0xf9b4, 0xf789, 0xf961, +0xf789, 0xf961, 0xf75d, 0xf954, 0xf75d, 0xf954, 0xf6f0, 0xf901, 0xf6f0, 0xf901, 0xf641, +0xf868, 0xf641, 0xf868, 0xf641, 0xf868, 0xf5b1, 0xf7e8, 0xf5b1, 0xf7e8, 0xf523, 0xf766, +0xf523, 0xf766, 0xf4a0, 0xf6ea, 0xf4a0, 0xf6ea, 0xf425, 0xf670, 0xf425, 0xf670, 0xf3ab, +0xf5f2, 0xf3ab, 0xf5f2, 0xf391, 0xf5cf, 0xf391, 0xf5cf, 0xf391, 0xf5cf, 0xf39b, 0xf5cc, +0xf39b, 0xf5cc, 0xf357, 0xf576, 0xf357, 0xf576, 0xf2db, 0xf4e3, 0xf2db, 0xf4e3, 0xf281, +0xf46e, 0xf281, 0xf46e, 0xf26b, 0xf43a, 0xf26b, 0xf43a, 0xf26b, 0xf43a, 0xf29f, 0xf44b, +0xf29f, 0xf44b, 0xf2d4, 0xf45b, 0xf2d4, 0xf45b, 0xf306, 0xf465, 0xf306, 0xf465, 0xf38f, +0xf4c5, 0xf38f, 0xf4c5, 0xf3f7, 0xf501, 0xf3f7, 0xf501, 0xf470, 0xf54d, 0xf470, 0xf54d, +0xf470, 0xf54d, 0xf58e, 0xf63d, 0xf58e, 0xf63d, 0xf6e6, 0xf766, 0xf6e6, 0xf766, 0xf835, +0xf887, 0xf835, 0xf887, 0xf94e, 0xf970, 0xf94e, 0xf970, 0xfa23, 0xfa17, 0xfa23, 0xfa17, +0xfa23, 0xfa17, 0xfb3b, 0xfb01, 0xfb3b, 0xfb01, 0xfc8a, 0xfc24, 0xfc8a, 0xfc24, 0xfdfa, +0xfd68, 0xfdfa, 0xfd68, 0xfff8, 0xff3b, 0xfff8, 0xff3b, 0x20b, 0x124, 0x20b, 0x124, +0x3c1, 0x2b2, 0x3c1, 0x2b2, 0x3c1, 0x2b2, 0x519, 0x3e2, 0x519, 0x3e2, 0x5f8, +0x49b, 0x5f8, 0x49b, 0x68c, 0x509, 0x68c, 0x509, 0x729, 0x581, 0x729, 0x581, +0x7eb, 0x61f, 0x7eb, 0x61f, 0x8a5, 0x6b6, 0x8a5, 0x6b6, 0x8a5, 0x6b6, 0x9a1, +0x78f, 0x9a1, 0x78f, 0xaea, 0x8b6, 0xaea, 0x8b6, 0xc77, 0xa22, 0xc77, 0xa22, +0xe1d, 0xba7, 0xe1d, 0xba7, 0xf73, 0xcdd, 0xf73, 0xcdd, 0xf73, 0xcdd, 0x10b1, +0xdfd, 0x10b1, 0xdfd, 0x11d9, 0xf08, 0x11d9, 0xf08, 0x1320, 0x1034, 0x1320, 0x1034, +0x141a, 0x1115, 0x141a, 0x1115, 0x149f, 0x1183, 0x149f, 0x1183, 0x159b, 0x126b, 0x159b, +0x126b, 0x159b, 0x126b, 0x16de, 0x139d, 0x16de, 0x139d, 0x1843, 0x14f5, 0x1843, 0x14f5, +0x1989, 0x1633, 0x1989, 0x1633, 0x1a6d, 0x1713, 0x1a6d, 0x1713, 0x1b61, 0x1807, 0x1b61, +0x1807, 0x1bbd, 0x1868, 0x1bbd, 0x1868, 0x1bbd, 0x1868, 0x1b43, 0x17f8, 0x1b43, 0x17f8, +0x1aae, 0x1773, 0x1aae, 0x1773, 0x19fb, 0x16d5, 0x19fb, 0x16d5, 0x1956, 0x1649, 0x1956, +0x1649, 0x1931, 0x1642, 0x1931, 0x1642, 0x1931, 0x1642, 0x1927, 0x165a, 0x1927, 0x165a, +0x189a, 0x15f2, 0x189a, 0x15f2, 0x17cd, 0x154c, 0x17cd, 0x154c, 0x16f6, 0x149f, 0x16f6, +0x149f, 0x1608, 0x13dd, 0x1608, 0x13dd, 0x1544, 0x1344, 0x1544, 0x1344, 0x1544, 0x1344, +0x148e, 0x12ba, 0x148e, 0x12ba, 0x13e8, 0x123d, 0x13e8, 0x123d, 0x1354, 0x11d0, 0x1354, +0x11d0, 0x1297, 0x1138, 0x1297, 0x1138, 0x117c, 0x103c, 0x117c, 0x103c, 0x1030, 0xf0c, +0x1030, 0xf0c, 0x1030, 0xf0c, 0xef3, 0xde6, 0xef3, 0xde6, 0xdbf, 0xcc2, 0xdbf, +0xcc2, 0xcf0, 0xbfe, 0xcf0, 0xbfe, 0xc23, 0xb36, 0xc23, 0xb36, 0xb48, 0xa5b, +0xb48, 0xa5b, 0xb48, 0xa5b, 0xaf0, 0x9fe, 0xaf0, 0x9fe, 0xae0, 0x9e3, 0xae0, +0x9e3, 0xaf3, 0x9e7, 0xaf3, 0x9e7, 0xb39, 0xa1a, 0xb39, 0xa1a, 0xb68, 0xa33, +0xb68, 0xa33, 0xb52, 0xa06, 0xb52, 0xa06, 0xb52, 0xa06, 0xb6e, 0xa0a, 0xb6e, +0xa0a, 0xb4c, 0x9d0, 0xb4c, 0x9d0, 0xaf9, 0x965, 0xaf9, 0x965, 0xae3, 0x93a, +0xae3, 0x93a, 0xa83, 0x8c8, 0xa83, 0x8c8, 0xaca, 0x900, 0xaca, 0x900, 0xaca, +0x900, 0xb9b, 0x9c6, 0xb9b, 0x9c6, 0xc37, 0xa5d, 0xc37, 0xa5d, 0xca8, 0xacd, +0xca8, 0xacd, 0xc67, 0xa92, 0xc67, 0xa92, 0xbd0, 0xa05, 0xbd0, 0xa05, 0xbd0, +0xa05, 0xb41, 0x984, 0xb41, 0x984, 0xae0, 0x938, 0xae0, 0x938, 0xa7f, 0x8ef, +0xa7f, 0x8ef, 0x9bc, 0x849, 0x9bc, 0x849, 0x8c9, 0x775, 0x8c9, 0x775, 0x7fb, +0x6c8, 0x7fb, 0x6c8, 0x7fb, 0x6c8, 0x772, 0x663, 0x772, 0x663, 0x694, 0x5a8, +0x694, 0x5a8, 0x5b6, 0x4ee, 0x5b6, 0x4ee, 0x567, 0x4c2, 0x567, 0x4c2, 0x533, +0x4b0, 0x533, 0x4b0, 0x4d5, 0x471, 0x4d5, 0x471, 0x4d5, 0x471, 0x435, 0x3ed, +0x435, 0x3ed, 0x369, 0x33a, 0x369, 0x33a, 0x2b5, 0x29d, 0x2b5, 0x29d, 0x28e, +0x289, 0x28e, 0x289, 0x279, 0x284, 0x279, 0x284, 0x279, 0x284, 0x1fc, 0x214, +0x1fc, 0x214, 0x1aa, 0x1cd, 0x1aa, 0x1cd, 0x1c0, 0x1ed, 0x1c0, 0x1ed, 0x1a7, +0x1da, 0x1a7, 0x1da, 0x110, 0x14a, 0x110, 0x14a, 0xa2, 0xe2, 0xa2, 0xe2, +0xa2, 0xe2, 0x4, 0x4b, 0x4, 0x4b, 0xff75, 0xffc4, 0xff75, 0xffc4, 0xff65, +0xffbe, 0xff65, 0xffbe, 0xfea4, 0xff07, 0xfea4, 0xff07, 0xfd68, 0xfdd9, 0xfd68, 0xfdd9, +0xfc53, 0xfcd5, 0xfc53, 0xfcd5, 0xfc53, 0xfcd5, 0xfbad, 0xfc41, 0xfbad, 0xfc41, 0xfb51, +0xfbfb, 0xfb51, 0xfbfb, 0xfac4, 0xfb85, 0xfac4, 0xfb85, 0xfa57, 0xfb31, 0xfa57, 0xfb31, +0xfa47, 0xfb3d, 0xfa47, 0xfb3d, 0xfa47, 0xfb3d, 0xfaac, 0xfbbe, 0xfaac, 0xfbbe, 0xfb3f, +0xfc6d, 0xfb3f, 0xfc6d, 0xfbf1, 0xfd3b, 0xfbf1, 0xfd3b, 0xfc42, 0xfda8, 0xfc42, 0xfda8, +0xfbdf, 0xfd5e, 0xfbdf, 0xfd5e, 0xfb5a, 0xfcf1, 0xfb5a, 0xfcf1, 0xfb5a, 0xfcf1, 0xfa53, +0xfbff, 0xfa53, 0xfbff, 0xf8cb, 0xfa89, 0xf8cb, 0xfa89, 0xf724, 0xf8ef, 0xf724, 0xf8ef, +0xf5ad, 0xf782, 0xf5ad, 0xf782, 0xf4df, 0xf6ba, 0xf4df, 0xf6ba, 0xf4ba, 0xf698, 0xf4ba, +0xf698, 0xf4ba, 0xf698, 0xf4c9, 0xf6a6, 0xf4c9, 0xf6a6, 0xf499, 0xf671, 0xf499, 0xf671, +0xf468, 0xf63a, 0xf468, 0xf63a, 0xf3d9, 0xf5a3, 0xf3d9, 0xf5a3, 0xf2d3, 0xf493, 0xf2d3, +0xf493, 0xf2d3, 0xf493, 0xf1b1, 0xf367, 0xf1b1, 0xf367, 0xf06a, 0xf217, 0xf06a, 0xf217, +0xef88, 0xf12e, 0xef88, 0xf12e, 0xef1e, 0xf0be, 0xef1e, 0xf0be, 0xeefb, 0xf097, 0xeefb, +0xf097, 0xeeb3, 0xf04e, 0xeeb3, 0xf04e, 0xeeb3, 0xf04e, 0xee3f, 0xefdd, 0xee3f, 0xefdd, +0xee03, 0xefa7, 0xee03, 0xefa7, 0xedb1, 0xef60, 0xedb1, 0xef60, 0xed2b, 0xeee8, 0xed2b, +0xeee8, 0xec5d, 0xee2b, 0xec5d, 0xee2b, 0xeb6a, 0xed4d, 0xeb6a, 0xed4d, 0xeb6a, 0xed4d, +0xea41, 0xec3a, 0xea41, 0xec3a, 0xe922, 0xeb34, 0xe922, 0xeb34, 0xe87a, 0xeaa5, 0xe87a, +0xeaa5, 0xe7da, 0xea1e, 0xe7da, 0xea1e, 0xe756, 0xe9b1, 0xe756, 0xe9b1, 0xe756, 0xe9b1, +0xe706, 0xe977, 0xe706, 0xe977, 0xe6b5, 0xe938, 0xe6b5, 0xe938, 0xe5f6, 0xe888, 0xe5f6, +0xe888, 0xe50f, 0xe7ab, 0xe50f, 0xe7ab, 0xe47e, 0xe71f, 0xe47e, 0xe71f, 0xe3ee, 0xe68e, +0xe3ee, 0xe68e, 0xe3ee, 0xe68e, 0xe3b3, 0xe64d, 0xe3b3, 0xe64d, 0xe3c6, 0xe654, 0xe3c6, +0xe654, 0xe37f, 0xe5fc, 0xe37f, 0xe5fc, 0xe2e9, 0xe54f, 0xe2e9, 0xe54f, 0xe316, 0xe561, +0xe316, 0xe561, 0xe316, 0xe561, 0xe3cf, 0xe5fa, 0xe3cf, 0xe5fa, 0xe416, 0xe61e, 0xe416, +0xe61e, 0xe4cf, 0xe6b1, 0xe4cf, 0xe6b1, 0xe5aa, 0xe765, 0xe5aa, 0xe765, 0xe677, 0xe80b, +0xe677, 0xe80b, 0xe7b4, 0xe921, 0xe7b4, 0xe921, 0xe7b4, 0xe921, 0xe8c8, 0xea0f, 0xe8c8, +0xea0f, 0xe9e1, 0xeb06, 0xe9e1, 0xeb06, 0xeabc, 0xebc2, 0xeabc, 0xebc2, 0xeb69, 0xec53, +0xeb69, 0xec53, 0xec3d, 0xed10, 0xec3d, 0xed10, 0xeccb, 0xed8c, 0xeccb, 0xed8c, 0xeccb, +0xed8c, 0xed91, 0xee44, 0xed91, 0xee44, 0xeeaa, 0xef56, 0xeeaa, 0xef56, 0xef4b, 0xeff3, +0xef4b, 0xeff3, 0xefa5, 0xf04f, 0xefa5, 0xf04f, 0xf061, 0xf111, 0xf061, 0xf111, 0xf061, +0xf111, 0xf12d, 0xf1e7, 0xf12d, 0xf1e7, 0xf1cf, 0xf297, 0xf1cf, 0xf297, 0xf20b, 0xf2e4, +0xf20b, 0xf2e4, 0xf1ed, 0xf2d7, 0xf1ed, 0xf2d7, 0xf1c7, 0xf2c5, 0xf1c7, 0xf2c5, 0xf177, +0xf289, 0xf177, 0xf289, 0xf177, 0xf289, 0xf169, 0xf290, 0xf169, 0xf290, 0xf15e, 0xf29a, +0xf15e, 0xf29a, 0xf15c, 0xf2ac, 0xf15c, 0xf2ac, 0xf1d5, 0xf337, 0xf1d5, 0xf337, 0xf242, +0xf3b7, 0xf242, 0xf3b7, 0xf2b4, 0xf439, 0xf2b4, 0xf439, 0xf2b4, 0xf439, 0xf31c, 0xf4b1, +0xf31c, 0xf4b1, 0xf355, 0xf4f9, 0xf355, 0xf4f9, 0xf38a, 0xf53c, 0xf38a, 0xf53c, 0xf3d8, +0xf597, 0xf3d8, 0xf597, 0xf409, 0xf5d4, 0xf409, 0xf5d4, 0xf409, 0xf5d4, 0xf421, 0xf5f7, +0xf421, 0xf5f7, 0xf478, 0xf65a, 0xf478, 0xf65a, 0xf457, 0xf645, 0xf457, 0xf645, 0xf39d, +0xf597, 0xf39d, 0xf597, 0xf2ce, 0xf4d4, 0xf2ce, 0xf4d4, 0xf23e, 0xf44f, 0xf23e, 0xf44f, +0xf23e, 0xf44f, 0xf1f6, 0xf414, 0xf1f6, 0xf414, 0xf1a1, 0xf3c9, 0xf1a1, 0xf3c9, 0xf182, +0xf3b5, 0xf182, 0xf3b5, 0xf167, 0xf3a2, 0xf167, 0xf3a2, 0xf14a, 0xf38c, 0xf14a, 0xf38c, +0xf189, 0xf3cf, 0xf189, 0xf3cf, 0xf189, 0xf3cf, 0xf1fa, 0xf440, 0xf1fa, 0xf440, 0xf275, +0xf4b7, 0xf275, 0xf4b7, 0xf2b4, 0xf4ed, 0xf2b4, 0xf4ed, 0xf321, 0xf54c, 0xf321, 0xf54c, +0xf3dc, 0xf5f4, 0xf3dc, 0xf5f4, 0xf3dc, 0xf5f4, 0xf446, 0xf643, 0xf446, 0xf643, 0xf4b0, +0xf68c, 0xf4b0, 0xf68c, 0xf52a, 0xf6de, 0xf52a, 0xf6de, 0xf5bd, 0xf740, 0xf5bd, 0xf740, +0xf7a1, 0xf8ee, 0xf7a1, 0xf8ee, 0xfa69, 0xfb78, 0xfa69, 0xfb78, 0xfa69, 0xfb78, 0xfcc5, +0xfd8f, 0xfcc5, 0xfd8f, 0xff19, 0xff99, 0xff19, 0xff99, 0x13a, 0x16a, 0x13a, 0x16a, +0x2f2, 0x2cf, 0x2f2, 0x2cf, 0x494, 0x41a, 0x494, 0x41a, 0x5e5, 0x512, 0x5e5, +0x512, 0x5e5, 0x512, 0x755, 0x629, 0x755, 0x629, 0x94b, 0x7c7, 0x94b, 0x7c7, +0xbc1, 0x9e7, 0xbc1, 0x9e7, 0xe9a, 0xc6d, 0xe9a, 0xc6d, 0x1121, 0xea5, 0x1121, +0xea5, 0x1121, 0xea5, 0x12ea, 0x1025, 0x12ea, 0x1025, 0x1471, 0x116a, 0x1471, 0x116a, +0x1625, 0x12e3, 0x1625, 0x12e3, 0x17b8, 0x1442, 0x17b8, 0x1442, 0x1916, 0x1575, 0x1916, +0x1575, 0x1a2e, 0x166b, 0x1a2e, 0x166b, 0x1a2e, 0x166b, 0x1aa0, 0x16c4, 0x1aa0, 0x16c4, +0x1b1d, 0x1730, 0x1b1d, 0x1730, 0x1bef, 0x17f9, 0x1bef, 0x17f9, 0x1c75, 0x187f, 0x1c75, +0x187f, 0x1cd1, 0x18e2, 0x1cd1, 0x18e2, 0x1cfc, 0x191a, 0x1cfc, 0x191a, 0x1cfc, 0x191a, +0x1cb0, 0x18e1, 0x1cb0, 0x18e1, 0x1bfb, 0x1843, 0x1bfb, 0x1843, 0x1acc, 0x1730, 0x1acc, +0x1730, 0x1976, 0x15f7, 0x1976, 0x15f7, 0x1845, 0x14e6, 0x1845, 0x14e6, 0x1845, 0x14e6, +0x1746, 0x1408, 0x1746, 0x1408, 0x16b2, 0x1394, 0x16b2, 0x1394, 0x163c, 0x133f, 0x163c, +0x133f, 0x15be, 0x12df, 0x15be, 0x12df, 0x1582, 0x12c0, 0x1582, 0x12c0, 0x1518, 0x1271, +0x1518, 0x1271, 0x1518, 0x1271, 0x146e, 0x11e0, 0x146e, 0x11e0, 0x13c0, 0x1148, 0x13c0, +0x1148, 0x130f, 0x10ac, 0x130f, 0x10ac, 0x1312, 0x10c0, 0x1312, 0x10c0, 0x133e, 0x10fe, +0x133e, 0x10fe, 0x129f, 0x106d, 0x129f, 0x106d, 0x129f, 0x106d, 0x11a3, 0xf80, 0x11a3, +0xf80, 0x1093, 0xe7f, 0x1093, 0xe7f, 0xfef, 0xde9, 0xfef, 0xde9, 0xfbb, 0xdc5, +0xfbb, 0xdc5, 0xf5a, 0xd75, 0xf5a, 0xd75, 0xf5a, 0xd75, 0xf1c, 0xd4a, 0xf1c, +0xd4a, 0xed1, 0xd14, 0xed1, 0xd14, 0xe55, 0xcb0, 0xe55, 0xcb0, 0xe10, 0xc86, +0xe10, 0xc86, 0xd76, 0xc09, 0xd76, 0xc09, 0xc8f, 0xb43, 0xc8f, 0xb43, 0xc8f, +0xb43, 0xbdf, 0xab8, 0xbdf, 0xab8, 0xb1e, 0xa1f, 0xb1e, 0xa1f, 0xa28, 0x955, +0xa28, 0x955, 0x8e9, 0x843, 0x8e9, 0x843, 0x76e, 0x6f9, 0x76e, 0x6f9, 0x63c, +0x5f8, 0x63c, 0x5f8, 0x63c, 0x5f8, 0x580, 0x570, 0x580, 0x570, 0x4db, 0x500, +0x4db, 0x500, 0x3fb, 0x455, 0x3fb, 0x455, 0x2d7, 0x365, 0x2d7, 0x365, 0x182, +0x243, 0x182, 0x243, 0x182, 0x243, 0xfff7, 0xeb, 0xfff7, 0xeb, 0xfe7d, 0xffa2, +0xfe7d, 0xffa2, 0xfd51, 0xfea3, 0xfd51, 0xfea3, 0xfc06, 0xfd83, 0xfc06, 0xfd83, 0xfaeb, +0xfc90, 0xfaeb, 0xfc90, 0xfa66, 0xfc2e, 0xfa66, 0xfc2e, 0xfa66, 0xfc2e, 0xf9f3, 0xfbdb, +0xf9f3, 0xfbdb, 0xf95f, 0xfb62, 0xf95f, 0xfb62, 0xf891, 0xfaab, 0xf891, 0xfaab, 0xf7a9, +0xf9d5, 0xf7a9, 0xf9d5, 0xf70f, 0xf949, 0xf70f, 0xf949, 0xf6b7, 0xf8f9, 0xf6b7, 0xf8f9, +0xf6b7, 0xf8f9, 0xf622, 0xf867, 0xf622, 0xf867, 0xf531, 0xf776, 0xf531, 0xf776, 0xf425, +0xf664, 0xf425, 0xf664, 0xf33a, 0xf56f, 0xf33a, 0xf56f, 0xf29e, 0xf4c4, 0xf29e, 0xf4c4, +0xf29e, 0xf4c4, 0xf1f7, 0xf40b, 0xf1f7, 0xf40b, 0xf169, 0xf367, 0xf169, 0xf367, 0xf10c, +0xf2f0, 0xf10c, 0xf2f0, 0xf0a0, 0xf267, 0xf0a0, 0xf267, 0xf00d, 0xf1b5, 0xf00d, 0xf1b5, +0xef50, 0xf0d5, 0xef50, 0xf0d5, 0xef50, 0xf0d5, 0xef0a, 0xf06a, 0xef0a, 0xf06a, 0xef17, +0xf051, 0xef17, 0xf051, 0xef63, 0xf075, 0xef63, 0xf075, 0xf035, 0xf11e, 0xf035, 0xf11e, +0xf140, 0xf1ff, 0xf140, 0xf1ff, 0xf140, 0xf1ff, 0xf266, 0xf2fb, 0xf266, 0xf2fb, 0xf331, +0xf39b, 0xf331, 0xf39b, 0xf3db, 0xf41b, 0xf3db, 0xf41b, 0xf4fa, 0xf50f, 0xf4fa, 0xf50f, +0xf631, 0xf61d, 0xf631, 0xf61d, 0xf713, 0xf6d7, 0xf713, 0xf6d7, 0xf713, 0xf6d7, 0xf7fc, +0xf798, 0xf7fc, 0xf798, 0xf94d, 0xf8c4, 0xf94d, 0xf8c4, 0xfadd, 0xfa30, 0xfadd, 0xfa30, +0xfc9a, 0xfbca, 0xfc9a, 0xfbca, 0xfe26, 0xfd35, 0xfe26, 0xfd35, 0xff86, 0xfe76, 0xff86, +0xfe76, 0xff86, 0xfe76, 0xeb, 0xffbd, 0xeb, 0xffbd, 0x249, 0xff, 0x249, 0xff, +0x358, 0x1f4, 0x358, 0x1f4, 0x3da, 0x25d, 0x3da, 0x25d, 0x46d, 0x2d8, 0x46d, +0x2d8, 0x46d, 0x2d8, 0x549, 0x39f, 0x549, 0x39f, 0x6bc, 0x4fd, 0x6bc, 0x4fd, +0x880, 0x6ad, 0x880, 0x6ad, 0xa17, 0x831, 0xa17, 0x831, 0xba6, 0x9ae, 0xba6, +0x9ae, 0xca5, 0xa9c, 0xca5, 0xa9c, 0xca5, 0xa9c, 0xd7f, 0xb67, 0xd7f, 0xb67, +0xe78, 0xc50, 0xe78, 0xc50, 0xf6a, 0xd35, 0xf6a, 0xd35, 0x10d2, 0xe90, 0x10d2, +0xe90, 0x124b, 0xffd, 0x124b, 0xffd, 0x13b8, 0x1160, 0x13b8, 0x1160, 0x13b8, 0x1160, +0x154e, 0x12ed, 0x154e, 0x12ed, 0x16b4, 0x144d, 0x16b4, 0x144d, 0x17b9, 0x154c, 0x17b9, +0x154c, 0x18c6, 0x1657, 0x18c6, 0x1657, 0x19fc, 0x178d, 0x19fc, 0x178d, 0x19fc, 0x178d, +0x1a6f, 0x1803, 0x1a6f, 0x1803, 0x1a2d, 0x17c7, 0x1a2d, 0x17c7, 0x1a31, 0x17d4, 0x1a31, +0x17d4, 0x1a31, 0x17df, 0x1a31, 0x17df, 0x199b, 0x1758, 0x199b, 0x1758, 0x18d4, 0x16a3, +0x18d4, 0x16a3, 0x18d4, 0x16a3, 0x181a, 0x15ff, 0x181a, 0x15ff, 0x17a0, 0x159c, 0x17a0, +0x159c, 0x17ab, 0x15c2, 0x17ab, 0x15c2, 0x17bc, 0x15ef, 0x17bc, 0x15ef, 0x1758, 0x15a8, +0x1758, 0x15a8, 0x1670, 0x14df, 0x1670, 0x14df, 0x1670, 0x14df, 0x1561, 0x13ef, 0x1561, +0x13ef, 0x14b5, 0x1363, 0x14b5, 0x1363, 0x1417, 0x12e3, 0x1417, 0x12e3, 0x1327, 0x1211, +0x1327, 0x1211, 0x120a, 0x110f, 0x120a, 0x110f, 0x120a, 0x110f, 0x10fb, 0x1019, 0x10fb, +0x1019, 0x100f, 0xf43, 0x100f, 0xf43, 0xf62, 0xea8, 0xf62, 0xea8, 0xf08, 0xe5d, +0xf08, 0xe5d, 0xeb0, 0xe0f, 0xeb0, 0xe0f, 0xe96, 0xdfb, 0xe96, 0xdfb, 0xe96, +0xdfb, 0xec1, 0xe28, 0xec1, 0xe28, 0xed0, 0xe34, 0xed0, 0xe34, 0xecb, 0xe29, +0xecb, 0xe29, 0xe55, 0xdaa, 0xe55, 0xdaa, 0xda5, 0xcec, 0xda5, 0xcec, 0xd6d, +0xca4, 0xd6d, 0xca4, 0xd6d, 0xca4, 0xd73, 0xc98, 0xd73, 0xc98, 0xd1f, 0xc30, +0xd1f, 0xc30, 0xd0f, 0xc0c, 0xd0f, 0xc0c, 0xd83, 0xc6c, 0xd83, 0xc6c, 0xdcb, +0xca0, 0xdcb, 0xca0, 0xdcb, 0xca0, 0xe85, 0xd49, 0xe85, 0xd49, 0xf69, 0xe1d, +0xf69, 0xe1d, 0xfc1, 0xe68, 0xfc1, 0xe68, 0xfa7, 0xe45, 0xfa7, 0xe45, 0xf56, +0xdee, 0xf56, 0xdee, 0xf5f, 0xdf6, 0xf5f, 0xdf6, 0xf5f, 0xdf6, 0xf27, 0xdc0, +0xf27, 0xdc0, 0xe95, 0xd35, 0xe95, 0xd35, 0xe2c, 0xcd7, 0xe2c, 0xcd7, 0xdcf, +0xc89, 0xdcf, 0xc89, 0xd8d, 0xc5a, 0xd8d, 0xc5a, 0xd3f, 0xc23, 0xd3f, 0xc23, +0xd3f, 0xc23, 0xcb5, 0xbb1, 0xcb5, 0xbb1, 0xbdd, 0xaf4, 0xbdd, 0xaf4, 0xafe, +0xa32, 0xafe, 0xa32, 0x9d4, 0x927, 0x9d4, 0x927, 0x836, 0x7a7, 0x836, 0x7a7, +0x836, 0x7a7, 0x701, 0x690, 0x701, 0x690, 0x680, 0x62d, 0x680, 0x62d, 0x5fa, +0x5c2, 0x5fa, 0x5c2, 0x535, 0x519, 0x535, 0x519, 0x4db, 0x4d7, 0x4db, 0x4d7, +0x480, 0x493, 0x480, 0x493, 0x480, 0x493, 0x3f9, 0x420, 0x3f9, 0x420, 0x3a4, +0x3de, 0x3a4, 0x3de, 0x2fb, 0x345, 0x2fb, 0x345, 0x21d, 0x275, 0x21d, 0x275, +0x19f, 0x204, 0x19f, 0x204, 0x12c, 0x19d, 0x12c, 0x19d, 0x12c, 0x19d, 0x1f, +0x9a, 0x1f, 0x9a, 0xfee6, 0xff6c, 0xfee6, 0xff6c, 0xfdc3, 0xfe53, 0xfdc3, 0xfe53, +0xfc82, 0xfd1d, 0xfc82, 0xfd1d, 0xfba2, 0xfc47, 0xfba2, 0xfc47, 0xfba2, 0xfc47, 0xfb35, +0xfbe7, 0xfb35, 0xfbe7, 0xfaee, 0xfbae, 0xfaee, 0xfbae, 0xfa5b, 0xfb2a, 0xfa5b, 0xfb2a, +0xf96e, 0xfa4e, 0xf96e, 0xfa4e, 0xf8e8, 0xf9da, 0xf8e8, 0xf9da, 0xf8e7, 0xf9ed, 0xf8e7, +0xf9ed, 0xf8e7, 0xf9ed, 0xf8c6, 0xf9e0, 0xf8c6, 0xf9e0, 0xf89d, 0xf9cd, 0xf89d, 0xf9cd, +0xf8b6, 0xf9fd, 0xf8b6, 0xf9fd, 0xf89f, 0xf9fc, 0xf89f, 0xf9fc, 0xf860, 0xf9d3, 0xf860, +0xf9d3, 0xf7a5, 0xf92d, 0xf7a5, 0xf92d, 0xf7a5, 0xf92d, 0xf607, 0xf7a2, 0xf607, 0xf7a2, +0xf46b, 0xf618, 0xf46b, 0xf618, 0xf2f6, 0xf4b4, 0xf2f6, 0xf4b4, 0xf18f, 0xf359, 0xf18f, +0xf359, 0xf0bb, 0xf291, 0xf0bb, 0xf291, 0xf0bb, 0xf291, 0xf00c, 0xf1eb, 0xf00c, 0xf1eb, +0xef32, 0xf116, 0xef32, 0xf116, 0xee80, 0xf068, 0xee80, 0xf068, 0xede9, 0xefd2, 0xede9, +0xefd2, 0xed2b, 0xef13, 0xed2b, 0xef13, 0xec60, 0xee47, 0xec60, 0xee47, 0xec60, 0xee47, +0xebf4, 0xedd7, 0xebf4, 0xedd7, 0xeb9a, 0xed7a, 0xeb9a, 0xed7a, 0xeb2b, 0xed08, 0xeb2b, +0xed08, 0xeacf, 0xecaa, 0xeacf, 0xecaa, 0xea48, 0xec22, 0xea48, 0xec22, 0xe9d9, 0xebb4, +0xe9d9, 0xebb4, 0xe9d9, 0xebb4, 0xe9be, 0xeb9c, 0xe9be, 0xeb9c, 0xe9ef, 0xebd3, 0xe9ef, +0xebd3, 0xe9b9, 0xeba5, 0xe9b9, 0xeba5, 0xe872, 0xea6a, 0xe872, 0xea6a, 0xe6f8, 0xe8ff, +0xe6f8, 0xe8ff, 0xe6f8, 0xe8ff, 0xe60d, 0xe825, 0xe60d, 0xe825, 0xe558, 0xe784, 0xe558, +0xe784, 0xe4c5, 0xe707, 0xe4c5, 0xe707, 0xe48a, 0xe6e2, 0xe48a, 0xe6e2, 0xe40d, 0xe67d, +0xe40d, 0xe67d, 0xe3a1, 0xe629, 0xe3a1, 0xe629, 0xe3a1, 0xe629, 0xe3a5, 0xe643, 0xe3a5, +0xe643, 0xe33d, 0xe5f0, 0xe33d, 0xe5f0, 0xe275, 0xe53a, 0xe275, 0xe53a, 0xe1eb, 0xe4bf, +0xe1eb, 0xe4bf, 0xe1d3, 0xe4b2, 0xe1d3, 0xe4b2, 0xe1d3, 0xe4b2, 0xe1d5, 0xe4b9, 0xe1d5, +0xe4b9, 0xe1f0, 0xe4d5, 0xe1f0, 0xe4d5, 0xe1e8, 0xe4c9, 0xe1e8, 0xe4c9, 0xe189, 0xe45f, +0xe189, 0xe45f, 0xe1e4, 0xe4a9, 0xe1e4, 0xe4a9, 0xe2ea, 0xe599, 0xe2ea, 0xe599, 0xe2ea, +0xe599, 0xe3cf, 0xe663, 0xe3cf, 0xe663, 0xe49b, 0xe710, 0xe49b, 0xe710, 0xe5bd, 0xe80f, +0xe5bd, 0xe80f, 0xe72b, 0xe956, 0xe72b, 0xe956, 0xe862, 0xea65, 0xe862, 0xea65, 0xe95f, +0xeb39, 0xe95f, 0xeb39, 0xe95f, 0xeb39, 0xea12, 0xebc1, 0xea12, 0xebc1, 0xea84, 0xec0b, +0xea84, 0xec0b, 0xeb3a, 0xec9a, 0xeb3a, 0xec9a, 0xec7e, 0xedba, 0xec7e, 0xedba, 0xedb9, +0xeed6, 0xedb9, 0xeed6, 0xedb9, 0xeed6, 0xeea0, 0xefa1, 0xeea0, 0xefa1, 0xefa1, 0xf08a, +0xefa1, 0xf08a, 0xf0d7, 0xf1af, 0xf0d7, 0xf1af, 0xf22c, 0xf2f8, 0xf22c, 0xf2f8, 0xf34f, +0xf414, 0xf34f, 0xf414, 0xf41e, 0xf4e2, 0xf41e, 0xf4e2, 0xf41e, 0xf4e2, 0xf467, 0xf52e, +0xf467, 0xf52e, 0xf470, 0xf53f, 0xf470, 0xf53f, 0xf4ad, 0xf588, 0xf4ad, 0xf588, 0xf499, +0xf583, 0xf499, 0xf583, 0xf479, 0xf576, 0xf479, 0xf576, 0xf4d6, 0xf5e6, 0xf4d6, 0xf5e6, +0xf4d6, 0xf5e6, 0xf547, 0xf66c, 0xf547, 0xf66c, 0xf5d8, 0xf711, 0xf5d8, 0xf711, 0xf692, +0xf7e0, 0xf692, 0xf7e0, 0xf6cd, 0xf82e, 0xf6cd, 0xf82e, 0xf6d8, 0xf84a, 0xf6d8, 0xf84a, +0xf6d8, 0xf84a, 0xf769, 0xf8ea, 0xf769, 0xf8ea, 0xf7c9, 0xf957, 0xf7c9, 0xf957, 0xf7b1, +0xf94a, 0xf7b1, 0xf94a, 0xf792, 0xf933, 0xf792, 0xf933, 0xf764, 0xf90a, 0xf764, 0xf90a, +0xf742, 0xf8ea, 0xf742, 0xf8ea, 0xf742, 0xf8ea, 0xf712, 0xf8bc, 0xf712, 0xf8bc, 0xf6e4, +0xf88d, 0xf6e4, 0xf88d, 0xf6f8, 0xf89f, 0xf6f8, 0xf89f, 0xf704, 0xf8a8, 0xf704, 0xf8a8, +0xf71d, 0xf8be, 0xf71d, 0xf8be, 0xf722, 0xf8c0, 0xf722, 0xf8c0, 0xf722, 0xf8c0, 0xf6cd, +0xf867, 0xf6cd, 0xf867, 0xf671, 0xf807, 0xf671, 0xf807, 0xf653, 0xf7e5, 0xf653, 0xf7e5, +0xf688, 0xf816, 0xf688, 0xf816, 0xf68f, 0xf81a, 0xf68f, 0xf81a, 0xf68f, 0xf81a, 0xf6a7, +0xf82d, 0xf6a7, 0xf82d, 0xf708, 0xf888, 0xf708, 0xf888, 0xf72a, 0xf8a3, 0xf72a, 0xf8a3, +0xf7a7, 0xf916, 0xf7a7, 0xf916, 0xf84f, 0xf9b1, 0xf84f, 0xf9b1, 0xf88e, 0xf9e0, 0xf88e, +0xf9e0, 0xf88e, 0xf9e0, 0xf8df, 0xfa1d, 0xf8df, 0xfa1d, 0xf971, 0xfa95, 0xf971, 0xfa95, +0xfa14, 0xfb18, 0xfa14, 0xfb18, 0xfb15, 0xfbf3, 0xfb15, 0xfbf3, 0xfc81, 0xfd34, 0xfc81, +0xfd34, 0xfdb9, 0xfe3b, 0xfdb9, 0xfe3b, 0xfdb9, 0xfe3b, 0xff2d, 0xff76, 0xff2d, 0xff76, +0x10c, 0x116, 0x10c, 0x116, 0x2d7, 0x29d, 0x2d7, 0x29d, 0x4ab, 0x428, 0x4ab, +0x428, 0x680, 0x5b1, 0x680, 0x5b1, 0x680, 0x5b1, 0x85a, 0x73b, 0x85a, 0x73b, +0xa4a, 0x8d9, 0xa4a, 0x8d9, 0xc05, 0xa41, 0xc05, 0xa41, 0xd84, 0xb6f, 0xd84, +0xb6f, 0xf53, 0xcee, 0xf53, 0xcee, 0x1117, 0xe66, 0x1117, 0xe66, 0x1117, 0xe66, +0x12a4, 0xfac, 0x12a4, 0xfac, 0x141a, 0x10e1, 0x141a, 0x10e1, 0x14ec, 0x1179, 0x14ec, +0x1179, 0x15a7, 0x1203, 0x15a7, 0x1203, 0x16be, 0x12f1, 0x16be, 0x12f1, 0x17d6, 0x13e9, +0x17d6, 0x13e9, 0x17d6, 0x13e9, 0x18b2, 0x14af, 0x18b2, 0x14af, 0x1949, 0x153b, 0x1949, +0x153b, 0x1970, 0x155f, 0x1970, 0x155f, 0x194f, 0x1546, 0x194f, 0x1546, 0x1966, 0x156c, +0x1966, 0x156c, 0x1966, 0x156c, 0x1943, 0x1561, 0x1943, 0x1561, 0x18c3, 0x14ff, 0x18c3, +0x14ff, 0x17eb, 0x144d, 0x17eb, 0x144d, 0x16d4, 0x135f, 0x16d4, 0x135f, 0x15e0, 0x1299, +0x15e0, 0x1299, 0x14f5, 0x11dd, 0x14f5, 0x11dd, 0x14f5, 0x11dd, 0x1421, 0x113a, 0x1421, +0x113a, 0x135d, 0x10a8, 0x135d, 0x10a8, 0x12e8, 0x1063, 0x12e8, 0x1063, 0x12a3, 0x104e, +0x12a3, 0x104e, 0x1213, 0xfec, 0x1213, 0xfec, 0x114b, 0xf4e, 0x114b, 0xf4e, 0x114b, +0xf4e, 0x1048, 0xe72, 0x1048, 0xe72, 0xf6e, 0xdbe, 0xf6e, 0xdbe, 0xee0, 0xd50, +0xee0, 0xd50, 0xe2f, 0xcbe, 0xe2f, 0xcbe, 0xda7, 0xc51, 0xda7, 0xc51, 0xda7, +0xc51, 0xd47, 0xc0a, 0xd47, 0xc0a, 0xcb2, 0xb8c, 0xcb2, 0xb8c, 0xc8b, 0xb7b, +0xc8b, 0xb7b, 0xcd7, 0xbdb, 0xcd7, 0xbdb, 0xcaf, 0xbc7, 0xcaf, 0xbc7, 0xc3f, +0xb6b, 0xc3f, 0xb6b, 0xc3f, 0xb6b, 0xc07, 0xb48, 0xc07, 0xb48, 0xbc9, 0xb1f, +0xbc9, 0xb1f, 0xb6d, 0xada, 0xb6d, 0xada, 0xb14, 0xa9b, 0xb14, 0xa9b, 0xa14, +0x9b4, 0xa14, 0x9b4, 0x8c0, 0x87c, 0x8c0, 0x87c, 0x8c0, 0x87c, 0x7db, 0x7b4, +0x7db, 0x7b4, 0x6be, 0x6b6, 0x6be, 0x6b6, 0x5a5, 0x5bd, 0x5a5, 0x5bd, 0x50d, +0x545, 0x50d, 0x545, 0x46a, 0x4c2, 0x46a, 0x4c2, 0x46a, 0x4c2, 0x3b3, 0x42c, +0x3b3, 0x42c, 0x2f5, 0x38e, 0x2f5, 0x38e, 0x1a2, 0x25b, 0x1a2, 0x25b, 0x3a, +0x112, 0x3a, 0x112, 0xff34, 0x29, 0xff34, 0x29, 0xfe24, 0xff34, 0xfe24, 0xff34, +0xfe24, 0xff34, 0xfd51, 0xfe7b, 0xfd51, 0xfe7b, 0xfc8a, 0xfdcc, 0xfc8a, 0xfdcc, 0xfbc9, +0xfd20, 0xfbc9, 0xfd20, 0xfb62, 0xfccc, 0xfb62, 0xfccc, 0xfadf, 0xfc5a, 0xfadf, 0xfc5a, +0xfa44, 0xfbcf, 0xfa44, 0xfbcf, 0xfa44, 0xfbcf, 0xf997, 0xfb30, 0xf997, 0xfb30, 0xf8a4, +0xfa48, 0xf8a4, 0xfa48, 0xf7fa, 0xf9a8, 0xf7fa, 0xf9a8, 0xf7cb, 0xf981, 0xf7cb, 0xf981, +0xf73e, 0xf8fa, 0xf73e, 0xf8fa, 0xf73e, 0xf8fa, 0xf654, 0xf816, 0xf654, 0xf816, 0xf593, +0xf757, 0xf593, 0xf757, 0xf514, 0xf6d9, 0xf514, 0xf6d9, 0xf4e7, 0xf6ac, 0xf4e7, 0xf6ac, +0xf4a5, 0xf667, 0xf4a5, 0xf667, 0xf409, 0xf5c6, 0xf409, 0xf5c6, 0xf409, 0xf5c6, 0xf353, +0xf509, 0xf353, 0xf509, 0xf2f3, 0xf49e, 0xf2f3, 0xf49e, 0xf2b3, 0xf451, 0xf2b3, 0xf451, +0xf250, 0xf3dd, 0xf250, 0xf3dd, 0xf20d, 0xf386, 0xf20d, 0xf386, 0xf20d, 0xf386, 0xf1d2, +0xf333, 0xf1d2, 0xf333, 0xf1d5, 0xf31a, 0xf1d5, 0xf31a, 0xf246, 0xf36d, 0xf246, 0xf36d, +0xf2ca, 0xf3ce, 0xf2ca, 0xf3ce, 0xf32f, 0xf40d, 0xf32f, 0xf40d, 0xf3d6, 0xf48c, 0xf3d6, +0xf48c, 0xf3d6, 0xf48c, 0xf4d4, 0xf55f, 0xf4d4, 0xf55f, 0xf60b, 0xf66a, 0xf60b, 0xf66a, +0xf790, 0xf7c1, 0xf790, 0xf7c1, 0xf8a9, 0xf8ab, 0xf8a9, 0xf8ab, 0xf930, 0xf904, 0xf930, +0xf904, 0xf9dc, 0xf981, 0xf9dc, 0xf981, 0xf9dc, 0xf981, 0xfad3, 0xfa4d, 0xfad3, 0xfa4d, +0xfc09, 0xfb59, 0xfc09, 0xfb59, 0xfd96, 0xfcbe, 0xfd96, 0xfcbe, 0xff6a, 0xfe6f, 0xff6a, +0xfe6f, 0x17b, 0x5f, 0x17b, 0x5f, 0x17b, 0x5f, 0x3b8, 0x280, 0x3b8, 0x280, +0x5a4, 0x455, 0x5a4, 0x455, 0x707, 0x5a5, 0x707, 0x5a5, 0x83a, 0x6c8, 0x83a, +0x6c8, 0x96e, 0x7f0, 0x96e, 0x7f0, 0xa88, 0x901, 0xa88, 0x901, 0xa88, 0x901, +0xb8f, 0xa03, 0xb8f, 0xa03, 0xc62, 0xad3, 0xc62, 0xad3, 0xd27, 0xb97, 0xd27, +0xb97, 0xe3a, 0xca9, 0xe3a, 0xca9, 0xf41, 0xdaf, 0xf41, 0xdaf, 0x1049, 0xeb6, +0x1049, 0xeb6, 0x1049, 0xeb6, 0x1163, 0xfcd, 0x1163, 0xfcd, 0x123f, 0x10a6, 0x123f, +0x10a6, 0x131d, 0x117e, 0x131d, 0x117e, 0x1467, 0x12bf, 0x1467, 0x12bf, 0x1599, 0x13e6, +0x1599, 0x13e6, 0x1599, 0x13e6, 0x167f, 0x14be, 0x167f, 0x14be, 0x17be, 0x15ed, 0x17be, +0x15ed, 0x18de, 0x16fb, 0x18de, 0x16fb, 0x19c7, 0x17d0, 0x19c7, 0x17d0, 0x1a63, 0x1857, +0x1a63, 0x1857, 0x1a60, 0x183e, 0x1a60, 0x183e, 0x1a60, 0x183e, 0x1a77, 0x183f, 0x1a77, +0x183f, 0x1a71, 0x1825, 0x1a71, 0x1825, 0x19e8, 0x178a, 0x19e8, 0x178a, 0x1902, 0x1695, +0x1902, 0x1695, 0x183d, 0x15c3, 0x183d, 0x15c3, 0x17f8, 0x1576, 0x17f8, 0x1576, 0x17f8, +0x1576, 0x1808, 0x1583, 0x1808, 0x1583, 0x1812, 0x158f, 0x1812, 0x158f, 0x1773, 0x14f7, +0x1773, 0x14f7, 0x1651, 0x13e0, 0x1651, 0x13e0, 0x152e, 0x12ce, 0x152e, 0x12ce, 0x152e, +0x12ce, 0x1443, 0x11f8, 0x1443, 0x11f8, 0x1392, 0x1160, 0x1392, 0x1160, 0x12e2, 0x10cd, +0x12e2, 0x10cd, 0x11de, 0xfe8, 0x11de, 0xfe8, 0x10a3, 0xecd, 0x10a3, 0xecd, 0xfa8, +0xdf4, 0xfa8, 0xdf4, 0xfa8, 0xdf4, 0xee9, 0xd55, 0xee9, 0xd55, 0xe64, 0xcef, +0xe64, 0xcef, 0xd9f, 0xc47, 0xd9f, 0xc47, 0xc8a, 0xb4c, 0xc8a, 0xb4c, 0xbec, +0xac4, 0xbec, 0xac4, 0xb9e, 0xa88, 0xb9e, 0xa88, 0xb9e, 0xa88, 0xaf0, 0x9e7, +0xaf0, 0x9e7, 0xa1a, 0x919, 0xa1a, 0x919, 0x9a9, 0x8ab, 0x9a9, 0x8ab, 0x959, +0x85a, 0x959, 0x85a, 0x95f, 0x85b, 0x95f, 0x85b, 0x95f, 0x85b, 0x99b, 0x88e, +0x99b, 0x88e, 0x997, 0x87f, 0x997, 0x87f, 0x9b1, 0x88d, 0x9b1, 0x88d, 0x9b2, +0x87f, 0x9b2, 0x87f, 0x9c5, 0x885, 0x9c5, 0x885, 0xa21, 0x8d5, 0xa21, 0x8d5, +0xa21, 0x8d5, 0xa5c, 0x905, 0xa5c, 0x905, 0xa5e, 0x900, 0xa5e, 0x900, 0xa3e, +0x8dd, 0xa3e, 0x8dd, 0xa36, 0x8d7, 0xa36, 0x8d7, 0xa59, 0x8ff, 0xa59, 0x8ff, +0xa8e, 0x93f, 0xa8e, 0x93f, 0xa8e, 0x93f, 0xa86, 0x947, 0xa86, 0x947, 0xa51, +0x928, 0xa51, 0x928, 0xa34, 0x925, 0xa34, 0x925, 0x9ba, 0x8c8, 0x9ba, 0x8c8, +0x8f2, 0x821, 0x8f2, 0x821, 0x8f2, 0x821, 0x82f, 0x781, 0x82f, 0x781, 0x709, +0x680, 0x709, 0x680, 0x5da, 0x576, 0x5da, 0x576, 0x527, 0x4e8, 0x527, 0x4e8, +0x4b4, 0x498, 0x4b4, 0x498, 0x459, 0x45d, 0x459, 0x45d, 0x459, 0x45d, 0x431, +0x453, 0x431, 0x453, 0x42b, 0x466, 0x42b, 0x466, 0x3d2, 0x423, 0x3d2, 0x423, +0x3a7, 0x408, 0x3a7, 0x408, 0x3de, 0x44a, 0x3de, 0x44a, 0x3be, 0x431, 0x3be, +0x431, 0x3be, 0x431, 0x368, 0x3dc, 0x368, 0x3dc, 0x2d1, 0x344, 0x2d1, 0x344, +0x213, 0x280, 0x213, 0x280, 0x176, 0x1db, 0x176, 0x1db, 0xdc, 0x137, 0xdc, +0x137, 0xdc, 0x137, 0x26, 0x76, 0x26, 0x76, 0xff60, 0xffa4, 0xff60, 0xffa4, +0xfec9, 0xff03, 0xfec9, 0xff03, 0xfe80, 0xfeb1, 0xfe80, 0xfeb1, 0xfead, 0xfed7, 0xfead, +0xfed7, 0xfed3, 0xfef9, 0xfed3, 0xfef9, 0xfed3, 0xfef9, 0xfe6b, 0xfe91, 0xfe6b, 0xfe91, +0xfdb8, 0xfde2, 0xfdb8, 0xfde2, 0xfd14, 0xfd45, 0xfd14, 0xfd45, 0xfc90, 0xfccc, 0xfc90, +0xfccc, 0xfc2c, 0xfc77, 0xfc2c, 0xfc77, 0xfbcb, 0xfc28, 0xfbcb, 0xfc28, 0xfbcb, 0xfc28, +0xfb54, 0xfbc7, 0xfb54, 0xfbc7, 0xfb34, 0xfbbe, 0xfb34, 0xfbbe, 0xfb18, 0xfbbb, 0xfb18, +0xfbbb, 0xfaf9, 0xfbb5, 0xfaf9, 0xfbb5, 0xfadf, 0xfbb5, 0xfadf, 0xfbb5, 0xfadf, 0xfbb5, +0xf9be, 0xfaae, 0xf9be, 0xfaae, 0xf83d, 0xf945, 0xf83d, 0xf945, 0xf73e, 0xf85c, 0xf73e, +0xf85c, 0xf63b, 0xf76c, 0xf63b, 0xf76c, 0xf521, 0xf663, 0xf521, 0xf663, 0xf447, 0xf597, +0xf447, 0xf597, 0xf447, 0xf597, 0xf363, 0xf4be, 0xf363, 0xf4be, 0xf2a3, 0xf406, 0xf2a3, +0xf406, 0xf268, 0xf3d1, 0xf268, 0xf3d1, 0xf202, 0xf36f, 0xf202, 0xf36f, 0xf154, 0xf2c5, +0xf154, 0xf2c5, 0xf08e, 0xf201, 0xf08e, 0xf201, 0xf08e, 0xf201, 0xefee, 0xf163, 0xefee, +0xf163, 0xefb3, 0xf12b, 0xefb3, 0xf12b, 0xef66, 0xf0e3, 0xef66, 0xf0e3, 0xef0f, 0xf093, +0xef0f, 0xf093, 0xef14, 0xf0a2, 0xef14, 0xf0a2, 0xef14, 0xf0a2, 0xef46, 0xf0e2, 0xef46, +0xf0e2, 0xeeff, 0xf0ac, 0xeeff, 0xf0ac, 0xee74, 0xf036, 0xee74, 0xf036, 0xedde, 0xefb8, +0xedde, 0xefb8, 0xed0d, 0xef04, 0xed0d, 0xef04, 0xec4d, 0xee64, 0xec4d, 0xee64, 0xec4d, +0xee64, 0xeb27, 0xed60, 0xeb27, 0xed60, 0xe9b6, 0xec13, 0xe9b6, 0xec13, 0xe8d3, 0xeb55, +0xe8d3, 0xeb55, 0xe82e, 0xead6, 0xe82e, 0xead6, 0xe795, 0xea62, 0xe795, 0xea62, 0xe795, +0xea62, 0xe763, 0xea52, 0xe763, 0xea52, 0xe731, 0xea40, 0xe731, 0xea40, 0xe668, 0xe992, +0xe668, 0xe992, 0xe539, 0xe878, 0xe539, 0xe878, 0xe432, 0xe781, 0xe432, 0xe781, 0xe35c, +0xe6b4, 0xe35c, 0xe6b4, 0xe35c, 0xe6b4, 0xe2c0, 0xe61a, 0xe2c0, 0xe61a, 0xe2ab, 0xe600, +0xe2ab, 0xe600, 0xe2c2, 0xe60a, 0xe2c2, 0xe60a, 0xe2eb, 0xe61f, 0xe2eb, 0xe61f, 0xe357, +0xe670, 0xe357, 0xe670, 0xe3e1, 0xe6d9, 0xe3e1, 0xe6d9, 0xe3e1, 0xe6d9, 0xe479, 0xe74a, +0xe479, 0xe74a, 0xe518, 0xe7be, 0xe518, 0xe7be, 0xe5ce, 0xe847, 0xe5ce, 0xe847, 0xe697, +0xe8df, 0xe697, 0xe8df, 0xe755, 0xe96c, 0xe755, 0xe96c, 0xe755, 0xe96c, 0xe804, 0xe9ea, +0xe804, 0xe9ea, 0xe916, 0xeacd, 0xe916, 0xeacd, 0xea4c, 0xebd7, 0xea4c, 0xebd7, 0xeb2e, +0xec90, 0xeb2e, 0xec90, 0xec26, 0xed64, 0xec26, 0xed64, 0xed16, 0xee35, 0xed16, 0xee35, +0xed16, 0xee35, 0xede7, 0xeeed, 0xede7, 0xeeed, 0xeed3, 0xefc6, 0xeed3, 0xefc6, 0xefb3, +0xf098, 0xefb3, 0xf098, 0xf01e, 0xf0fc, 0xf01e, 0xf0fc, 0xf051, 0xf12d, 0xf051, 0xf12d, +0xf066, 0xf145, 0xf066, 0xf145, 0xf066, 0xf145, 0xf04b, 0xf130, 0xf04b, 0xf130, 0xf0d5, +0xf1c5, 0xf0d5, 0xf1c5, 0xf149, 0xf245, 0xf149, 0xf245, 0xf14e, 0xf259, 0xf14e, 0xf259, +0xf1f8, 0xf313, 0xf1f8, 0xf313, 0xf1f8, 0xf313, 0xf2ac, 0xf3d5, 0xf2ac, 0xf3d5, 0xf2e3, +0xf41a, 0xf2e3, 0xf41a, 0xf308, 0xf44b, 0xf308, 0xf44b, 0xf311, 0xf45f, 0xf311, 0xf45f, +0xf2f0, 0xf445, 0xf2f0, 0xf445, 0xf2f7, 0xf452, 0xf2f7, 0xf452, 0xf2f7, 0xf452, 0xf312, +0xf46f, 0xf312, 0xf46f, 0xf322, 0xf47e, 0xf322, 0xf47e, 0xf2fc, 0xf455, 0xf2fc, 0xf455, +0xf2ae, 0xf402, 0xf2ae, 0xf402, 0xf2df, 0xf42c, 0xf2df, 0xf42c, 0xf31b, 0xf460, 0xf31b, +0xf460, 0xf31b, 0xf460, 0xf312, 0xf44e, 0xf312, 0xf44e, 0xf306, 0xf43a, 0xf306, 0xf43a, +0xf312, 0xf43e, 0xf312, 0xf43e, 0xf309, 0xf42e, 0xf309, 0xf42e, 0xf2c7, 0xf3e6, 0xf2c7, +0xf3e6, 0xf2c7, 0xf3e6, 0xf29a, 0xf3b6, 0xf29a, 0xf3b6, 0xf22f, 0xf349, 0xf22f, 0xf349, +0xf1f9, 0xf312, 0xf1f9, 0xf312, 0xf23b, 0xf355, 0xf23b, 0xf355, 0xf25d, 0xf378, 0xf25d, +0xf378, 0xf29f, 0xf3bc, 0xf29f, 0xf3bc, 0xf29f, 0xf3bc, 0xf305, 0xf424, 0xf305, 0xf424, +0xf3b0, 0xf4ce, 0xf3b0, 0xf4ce, 0xf4c1, 0xf5dd, 0xf4c1, 0xf5dd, 0xf5fa, 0xf710, 0xf5fa, +0xf710, 0xf6e0, 0xf7ec, 0xf6e0, 0xf7ec, 0xf72c, 0xf82a, 0xf72c, 0xf82a, 0xf72c, 0xf82a, +0xf77c, 0xf864, 0xf77c, 0xf864, 0xf7cf, 0xf89c, 0xf7cf, 0xf89c, 0xf846, 0xf8ef, 0xf846, +0xf8ef, 0xf976, 0xf9f4, 0xf976, 0xf9f4, 0xfb18, 0xfb64, 0xfb18, 0xfb64, 0xfb18, 0xfb64, +0xfcfd, 0xfd0f, 0xfcfd, 0xfd0f, 0xff52, 0xff23, 0xff52, 0xff23, 0x1f6, 0x180, 0x1f6, +0x180, 0x467, 0x3a3, 0x467, 0x3a3, 0x628, 0x513, 0x628, 0x513, 0x78e, 0x624, +0x78e, 0x624, 0x78e, 0x624, 0x93c, 0x77c, 0x93c, 0x77c, 0xb27, 0x911, 0xb27, +0x911, 0xcd9, 0xa6f, 0xcd9, 0xa6f, 0xea5, 0xbe8, 0xea5, 0xbe8, 0x10e9, 0xde0, +0x10e9, 0xde0, 0x12f9, 0xfa9, 0x12f9, 0xfa9, 0x12f9, 0xfa9, 0x14b8, 0x1128, 0x14b8, +0x1128, 0x1662, 0x129c, 0x1662, 0x129c, 0x17a8, 0x13b4, 0x17a8, 0x13b4, 0x18d5, 0x14be, +0x18d5, 0x14be, 0x1a1c, 0x15ec, 0x1a1c, 0x15ec, 0x1a1c, 0x15ec, 0x1ad7, 0x1698, 0x1ad7, +0x1698, 0x1b05, 0x16c3, 0x1b05, 0x16c3, 0x1b51, 0x1714, 0x1b51, 0x1714, 0x1bc9, 0x179b, +0x1bc9, 0x179b, 0x1c7b, 0x1864, 0x1c7b, 0x1864, 0x1d1b, 0x1922, 0x1d1b, 0x1922, 0x1d1b, +0x1922, 0x1d46, 0x1971, 0x1d46, 0x1971, 0x1d5a, 0x19ae, 0x1d5a, 0x19ae, 0x1d2d, 0x19ac, +0x1d2d, 0x19ac, 0x1c6e, 0x191a, 0x1c6e, 0x191a, 0x1b43, 0x181d, 0x1b43, 0x181d, 0x1a37, +0x173e, 0x1a37, 0x173e, 0x1a37, 0x173e, 0x1953, 0x1685, 0x1953, 0x1685, 0x183d, 0x1597, +0x183d, 0x1597, 0x173e, 0x14be, 0x173e, 0x14be, 0x1652, 0x13f4, 0x1652, 0x13f4, 0x153b, +0x12fb, 0x153b, 0x12fb, 0x153b, 0x12fb, 0x1401, 0x11da, 0x1401, 0x11da, 0x130a, 0x10fa, +0x130a, 0x10fa, 0x126d, 0x1070, 0x126d, 0x1070, 0x11f1, 0x1005, 0x11f1, 0x1005, 0x117a, +0xf9d, 0x117a, 0xf9d, 0x115c, 0xf8c, 0x115c, 0xf8c, 0x115c, 0xf8c, 0x11b5, 0xff2, +0x11b5, 0xff2, 0x11a5, 0xfef, 0x11a5, 0xfef, 0x11b1, 0x100a, 0x11b1, 0x100a, 0x11ad, +0x1016, 0x11ad, 0x1016, 0x1119, 0xf94, 0x1119, 0xf94, 0x10ca, 0xf5b, 0x10ca, 0xf5b, +0x10ca, 0xf5b, 0x1063, 0xf0c, 0x1063, 0xf0c, 0xf93, 0xe57, 0xf93, 0xe57, 0xe6d, +0xd4f, 0xe6d, 0xd4f, 0xd20, 0xc23, 0xd20, 0xc23, 0xbd8, 0xb00, 0xbd8, 0xb00, +0xbd8, 0xb00, 0xaef, 0xa3d, 0xaef, 0xa3d, 0xa4a, 0x9c0, 0xa4a, 0x9c0, 0x928, +0x8c7, 0x928, 0x8c7, 0x80d, 0x7d5, 0x80d, 0x7d5, 0x706, 0x6f7, 0x706, 0x6f7, +0x59a, 0x5b2, 0x59a, 0x5b2, 0x59a, 0x5b2, 0x431, 0x46f, 0x431, 0x46f, 0x2f5, +0x358, 0x2f5, 0x358, 0x1c7, 0x24c, 0x1c7, 0x24c, 0xdd, 0x180, 0xdd, 0x180, +0xfff6, 0xb5, 0xfff6, 0xb5, 0xff22, 0xfffa, 0xff22, 0xfffa, 0xff22, 0xfffa, 0xfe85, +0xff73, 0xfe85, 0xff73, 0xfd93, 0xfe94, 0xfd93, 0xfe94, 0xfcb2, 0xfdc4, 0xfcb2, 0xfdc4, +0xfbf3, 0xfd13, 0xfbf3, 0xfd13, 0xfae0, 0xfc0d, 0xfae0, 0xfc0d, 0xfae0, 0xfc0d, 0xf9e0, +0xfb18, 0xf9e0, 0xfb18, 0xf914, 0xfa56, 0xf914, 0xfa56, 0xf810, 0xf95b, 0xf810, 0xf95b, +0xf6e5, 0xf83a, 0xf6e5, 0xf83a, 0xf608, 0xf765, 0xf608, 0xf765, 0xf533, 0xf699, 0xf533, +0xf699, 0xf533, 0xf699, 0xf443, 0xf5b3, 0xf443, 0xf5b3, 0xf37f, 0xf4f7, 0xf37f, 0xf4f7, +0xf2bf, 0xf440, 0xf2bf, 0xf440, 0xf1df, 0xf369, 0xf1df, 0xf369, 0xf0f7, 0xf288, 0xf0f7, +0xf288, 0xf0f7, 0xf288, 0xf01e, 0xf1b5, 0xf01e, 0xf1b5, 0xefb3, 0xf14f, 0xefb3, 0xf14f, +0xef76, 0xf114, 0xef76, 0xf114, 0xeec3, 0xf05f, 0xeec3, 0xf05f, 0xedee, 0xef86, 0xedee, +0xef86, 0xed52, 0xeee2, 0xed52, 0xeee2, 0xed52, 0xeee2, 0xed1c, 0xeea0, 0xed1c, 0xeea0, +0xed33, 0xeea7, 0xed33, 0xeea7, 0xed65, 0xeec5, 0xed65, 0xeec5, 0xedd4, 0xef1a, 0xedd4, +0xef1a, 0xee76, 0xefa0, 0xee76, 0xefa0, 0xef96, 0xf09e, 0xef96, 0xf09e, 0xef96, 0xf09e, +0xf109, 0xf1ec, 0xf109, 0xf1ec, 0xf20f, 0xf2cb, 0xf20f, 0xf2cb, 0xf2c1, 0xf352, 0xf2c1, +0xf352, 0xf355, 0xf3bb, 0xf355, 0xf3bb, 0xf3e2, 0xf41a, 0xf3e2, 0xf41a, 0xf3e2, 0xf41a, +0xf515, 0xf520, 0xf515, 0xf520, 0xf684, 0xf662, 0xf684, 0xf662, 0xf7e4, 0xf796, 0xf7e4, +0xf796, 0xf9e9, 0xf970, 0xf9e9, 0xf970, 0xfbd9, 0xfb37, 0xfbd9, 0xfb37, 0xfdf6, 0xfd2e, +0xfdf6, 0xfd2e, 0xfdf6, 0xfd2e, 0x81, 0xff95, 0x81, 0xff95, 0x258, 0x14b, 0x258, +0x14b, 0x3d1, 0x2a6, 0x3d1, 0x2a6, 0x52d, 0x3e6, 0x52d, 0x3e6, 0x63c, 0x4dc, +0x63c, 0x4dc, 0x706, 0x58f, 0x706, 0x58f, 0x706, 0x58f, 0x7c3, 0x637, 0x7c3, +0x637, 0x89f, 0x6fe, 0x89f, 0x6fe, 0x9c1, 0x80d, 0x9c1, 0x80d, 0xb6d, 0x9a5, +0xb6d, 0x9a5, 0xcda, 0xaff, 0xcda, 0xaff, 0xcda, 0xaff, 0xe42, 0xc53, 0xe42, +0xc53, 0xfdf, 0xddc, 0xfdf, 0xddc, 0x1147, 0xf2e, 0x1147, 0xf2e, 0x12f2, 0x10c3, +0x12f2, 0x10c3, 0x1472, 0x122c, 0x1472, 0x122c, 0x157e, 0x1321, 0x157e, 0x1321, 0x157e, +0x1321, 0x16ba, 0x1445, 0x16ba, 0x1445, 0x181b, 0x1590, 0x181b, 0x1590, 0x1941, 0x16a1, +0x1941, 0x16a1, 0x1a53, 0x179e, 0x1a53, 0x179e, 0x1b0b, 0x1846, 0x1b0b, 0x1846, 0x1b35, +0x1861, 0x1b35, 0x1861, 0x1b35, 0x1861, 0x1b60, 0x1881, 0x1b60, 0x1881, 0x1b25, 0x1840, +0x1b25, 0x1840, 0x1a8c, 0x17a6, 0x1a8c, 0x17a6, 0x1a67, 0x1785, 0x1a67, 0x1785, 0x1a5e, +0x1786, 0x1a5e, 0x1786, 0x1a5e, 0x1786, 0x19ff, 0x1737, 0x19ff, 0x1737, 0x197d, 0x16ca, +0x197d, 0x16ca, 0x18ef, 0x1658, 0x18ef, 0x1658, 0x1821, 0x15aa, 0x1821, 0x15aa, 0x174d, +0x14fb, 0x174d, 0x14fb, 0x16a5, 0x147c, 0x16a5, 0x147c, 0x16a5, 0x147c, 0x15fc, 0x13ff, +0x15fc, 0x13ff, 0x153f, 0x1370, 0x153f, 0x1370, 0x1435, 0x1296, 0x1435, 0x1296, 0x1355, +0x11e6, 0x1355, 0x11e6, 0x12f7, 0x11b7, 0x12f7, 0x11b7, 0x12ad, 0x119b, 0x12ad, 0x119b, +0x12ad, 0x119b, 0x1218, 0x112f, 0x1218, 0x112f, 0x1132, 0x1071, 0x1132, 0x1071, 0x103e, +0xf9f, 0x103e, 0xf9f, 0xf56, 0xed5, 0xf56, 0xed5, 0xe9d, 0xe34, 0xe9d, 0xe34, +0xe9d, 0xe34, 0xdc9, 0xd73, 0xdc9, 0xd73, 0xcdc, 0xc93, 0xcdc, 0xc93, 0xc50, +0xc0e, 0xc50, 0xc0e, 0xc45, 0xc06, 0xc45, 0xc06, 0xc4f, 0xc0d, 0xc4f, 0xc0d, +0xc38, 0xbef, 0xc38, 0xbef, 0xc38, 0xbef, 0xc41, 0xbee, 0xc41, 0xbee, 0xc43, +0xbe2, 0xc43, 0xbe2, 0xc90, 0xc20, 0xc90, 0xc20, 0xcca, 0xc4a, 0xcca, 0xc4a, +0xc9a, 0xc08, 0xc9a, 0xc08, 0xcdb, 0xc39, 0xcdb, 0xc39, 0xcdb, 0xc39, 0xd2c, +0xc7b, 0xd2c, 0xc7b, 0xd6f, 0xcb0, 0xd6f, 0xcb0, 0xe14, 0xd4a, 0xe14, 0xd4a, +0xe71, 0xd9e, 0xe71, 0xd9e, 0xe94, 0xdbb, 0xe94, 0xdbb, 0xe94, 0xdbb, 0xeb9, +0xdde, 0xeb9, 0xdde, 0xeb0, 0xdd5, 0xeb0, 0xdd5, 0xe77, 0xda1, 0xe77, 0xda1, +0xdae, 0xcdf, 0xdae, 0xcdf, 0xc99, 0xbd4, 0xc99, 0xbd4, 0xb92, 0xad9, 0xb92, +0xad9, 0xb92, 0xad9, 0xae0, 0xa36, 0xae0, 0xa36, 0xa2d, 0x993, 0xa2d, 0x993, +0x91f, 0x898, 0x91f, 0x898, 0x86e, 0x7f8, 0x86e, 0x7f8, 0x7c0, 0x75e, 0x7c0, +0x75e, 0x712, 0x6c3, 0x712, 0x6c3, 0x712, 0x6c3, 0x689, 0x64c, 0x689, 0x64c, +0x603, 0x5d8, 0x603, 0x5d8, 0x595, 0x57b, 0x595, 0x57b, 0x551, 0x547, 0x551, +0x547, 0x528, 0x52c, 0x528, 0x52c, 0x528, 0x52c, 0x4be, 0x4d0, 0x4be, 0x4d0, +0x428, 0x447, 0x428, 0x447, 0x2fd, 0x328, 0x2fd, 0x328, 0x19c, 0x1d3, 0x19c, +0x1d3, 0x98, 0xda, 0x98, 0xda, 0xffb9, 0x6, 0xffb9, 0x6, 0xffb9, 0x6, +0xfee7, 0xff3f, 0xfee7, 0xff3f, 0xfe5f, 0xfec3, 0xfe5f, 0xfec3, 0xfe26, 0xfe96, 0xfe26, +0xfe96, 0xfdc0, 0xfe3d, 0xfdc0, 0xfe3d, 0xfd81, 0xfe0b, 0xfd81, 0xfe0b, 0xfd03, 0xfd9c, +0xfd03, 0xfd9c, 0xfd03, 0xfd9c, 0xfc29, 0xfcd3, 0xfc29, 0xfcd3, 0xfb30, 0xfbec, 0xfb30, +0xfbec, 0xf9c3, 0xfa92, 0xf9c3, 0xfa92, 0xf873, 0xf957, 0xf873, 0xf957, 0xf766, 0xf85f, +0xf766, 0xf85f, 0xf766, 0xf85f, 0xf69d, 0xf7ac, 0xf69d, 0xf7ac, 0xf659, 0xf77f, 0xf659, +0xf77f, 0xf682, 0xf7bf, 0xf682, 0xf7bf, 0xf69c, 0xf7f1, 0xf69c, 0xf7f1, 0xf67b, 0xf7e8, +0xf67b, 0xf7e8, 0xf62f, 0xf7b3, 0xf62f, 0xf7b3, 0xf62f, 0xf7b3, 0xf53d, 0xf6d6, 0xf53d, +0xf6d6, 0xf3e8, 0xf597, 0xf3e8, 0xf597, 0xf295, 0xf458, 0xf295, 0xf458, 0xf120, 0xf2f6, +0xf120, 0xf2f6, 0xefc6, 0xf1ae, 0xefc6, 0xf1ae, 0xeedc, 0xf0d4, 0xeedc, 0xf0d4, 0xeedc, +0xf0d4, 0xee42, 0xf049, 0xee42, 0xf049, 0xedb7, 0xefcc, 0xedb7, 0xefcc, 0xed60, 0xef82, +0xed60, 0xef82, 0xeccf, 0xeefd, 0xeccf, 0xeefd, 0xec51, 0xee8a, 0xec51, 0xee8a, 0xec51, +0xee8a, 0xec26, 0xee6a, 0xec26, 0xee6a, 0xeb72, 0xedc2, 0xeb72, 0xedc2, 0xeae1, 0xed3b, +0xeae1, 0xed3b, 0xea89, 0xecef, 0xea89, 0xecef, 0xea0a, 0xec7c, 0xea0a, 0xec7c, 0xe9b7, +0xec37, 0xe9b7, 0xec37, 0xe9b7, 0xec37, 0xe948, 0xebd6, 0xe948, 0xebd6, 0xe8fe, 0xeb9b, +0xe8fe, 0xeb9b, 0xe91e, 0xebcb, 0xe91e, 0xebcb, 0xe90f, 0xebcd, 0xe90f, 0xebcd, 0xe852, +0xeb21, 0xe852, 0xeb21, 0xe852, 0xeb21, 0xe732, 0xea14, 0xe732, 0xea14, 0xe5fe, 0xe8f2, +0xe5fe, 0xe8f2, 0xe50e, 0xe813, 0xe50e, 0xe813, 0xe4a1, 0xe7b7, 0xe4a1, 0xe7b7, 0xe453, +0xe778, 0xe453, 0xe778, 0xe3d4, 0xe707, 0xe3d4, 0xe707, 0xe3d4, 0xe707, 0xe357, 0xe695, +0xe357, 0xe695, 0xe2d5, 0xe619, 0xe2d5, 0xe619, 0xe233, 0xe57b, 0xe233, 0xe57b, 0xe204, +0xe54b, 0xe204, 0xe54b, 0xe21a, 0xe55c, 0xe21a, 0xe55c, 0xe1ef, 0xe526, 0xe1ef, 0xe526, +0xe1ef, 0xe526, 0xe1d7, 0xe4ff, 0xe1d7, 0xe4ff, 0xe234, 0xe547, 0xe234, 0xe547, 0xe2bd, +0xe5b6, 0xe2bd, 0xe5b6, 0xe348, 0xe623, 0xe348, 0xe623, 0xe3bd, 0xe675, 0xe3bd, 0xe675, +0xe3bd, 0xe675, 0xe401, 0xe692, 0xe401, 0xe692, 0xe49d, 0xe705, 0xe49d, 0xe705, 0xe570, +0xe7ab, 0xe570, 0xe7ab, 0xe613, 0xe821, 0xe613, 0xe821, 0xe6cc, 0xe8ac, 0xe6cc, 0xe8ac, +0xe7d5, 0xe988, 0xe7d5, 0xe988, 0xe7d5, 0xe988, 0xe8f3, 0xea7b, 0xe8f3, 0xea7b, 0xea89, +0xebe9, 0xea89, 0xebe9, 0xec5e, 0xed98, 0xec5e, 0xed98, 0xedc0, 0xeed9, 0xedc0, 0xeed9, +0xeefa, 0xeff7, 0xeefa, 0xeff7, 0xefbd, 0xf0a3, 0xefbd, 0xf0a3, 0xefbd, 0xf0a3, 0xf075, +0xf14b, 0xf075, 0xf14b, 0xf130, 0xf1fb, 0xf130, 0xf1fb, 0xf166, 0xf22b, 0xf166, 0xf22b, +0xf18f, 0xf254, 0xf18f, 0xf254, 0xf252, 0xf31c, 0xf252, 0xf31c, 0xf252, 0xf31c, 0xf357, +0xf42b, 0xf357, 0xf42b, 0xf3d6, 0xf4b8, 0xf3d6, 0xf4b8, 0xf48f, 0xf582, 0xf48f, 0xf582, +0xf543, 0xf648, 0xf543, 0xf648, 0xf5c6, 0xf6df, 0xf5c6, 0xf6df, 0xf644, 0xf770, 0xf644, +0xf770, 0xf644, 0xf770, 0xf61c, 0xf75b, 0xf61c, 0xf75b, 0xf5bd, 0xf70e, 0xf5bd, 0xf70e, +0xf58e, 0xf6ed, 0xf58e, 0xf6ed, 0xf57c, 0xf6e7, 0xf57c, 0xf6e7, 0xf54f, 0xf6c3, 0xf54f, +0xf6c3, 0xf533, 0xf6ac, 0xf533, 0xf6ac, 0xf533, 0xf6ac, 0xf51b, 0xf695, 0xf51b, 0xf695, +0xf545, 0xf6bc, 0xf545, 0xf6bc, 0xf5bf, 0xf731, 0xf5bf, 0xf731, 0xf5e4, 0xf74d, 0xf5e4, +0xf74d, 0xf620, 0xf77e, 0xf620, 0xf77e, 0xf620, 0xf77e, 0xf661, 0xf7b3, 0xf661, 0xf7b3, +0xf65d, 0xf7a2, 0xf65d, 0xf7a2, 0xf666, 0xf79d, 0xf666, 0xf79d, 0xf6a2, 0xf7cd, 0xf6a2, +0xf7cd, 0xf6de, 0xf7fd, 0xf6de, 0xf7fd, 0xf6ba, 0xf7d0, 0xf6ba, 0xf7d0, 0xf6ba, 0xf7d0, +0xf65c, 0xf76a, 0xf65c, 0xf76a, 0xf612, 0xf71c, 0xf612, 0xf71c, 0xf616, 0xf71e, 0xf616, +0xf71e, 0xf652, 0xf75b, 0xf652, 0xf75b, 0xf67d, 0xf788, 0xf67d, 0xf788, 0xf6bb, 0xf7cc, +0xf6bb, 0xf7cc, 0xf6bb, 0xf7cc, 0xf778, 0xf88e, 0xf778, 0xf88e, 0xf876, 0xf992, 0xf876, +0xf992, 0xf917, 0xfa38, 0xf917, 0xfa38, 0xf96b, 0xfa90, 0xf96b, 0xfa90, 0xf95b, 0xfa80, +0xf95b, 0xfa80, 0xf95b, 0xfa80, 0xf8e9, 0xfa0b, 0xf8e9, 0xfa0b, 0xf8d9, 0xf9f2, 0xf8d9, +0xf9f2, 0xf923, 0xfa2e, 0xf923, 0xfa2e, 0xf9a8, 0xfa9e, 0xf9a8, 0xfa9e, 0xfade, 0xfbb8, +0xfade, 0xfbb8, 0xfca8, 0xfd5f, 0xfca8, 0xfd5f, 0xfca8, 0xfd5f, 0xfee0, 0xff6d, 0xfee0, +0xff6d, 0x12a, 0x184, 0x12a, 0x184, 0x323, 0x344, 0x323, 0x344, 0x4e8, 0x4c9, +0x4e8, 0x4c9, 0x66c, 0x609, 0x66c, 0x609, 0x7a4, 0x6f8, 0x7a4, 0x6f8, 0x7a4, +0x6f8, 0x8de, 0x7e6, 0x8de, 0x7e6, 0xa52, 0x90e, 0xa52, 0x90e, 0xb89, 0x9f8, +0xb89, 0x9f8, 0xd0e, 0xb32, 0xd0e, 0xb32, 0xf02, 0xcdd, 0xf02, 0xcdd, 0xf02, +0xcdd, 0x109b, 0xe33, 0x109b, 0xe33, 0x1286, 0xfe1, 0x1286, 0xfe1, 0x1434, 0x1158, +0x1434, 0x1158, 0x1520, 0x1217, 0x1520, 0x1217, 0x15e4, 0x12b6, 0x15e4, 0x12b6, 0x1625, +0x12da, 0x1625, 0x12da, 0x1625, 0x12da, 0x1632, 0x12d4, 0x1632, 0x12d4, 0x16c9, 0x1361, +0x16c9, 0x1361, 0x17a9, 0x1440, 0x17a9, 0x1440, 0x1825, 0x14c3, 0x1825, 0x14c3, 0x1891, +0x153d, 0x1891, 0x153d, 0x1917, 0x15d8, 0x1917, 0x15d8, 0x1917, 0x15d8, 0x1948, 0x1623, +0x1948, 0x1623, 0x1920, 0x1619, 0x1920, 0x1619, 0x18b9, 0x15d2, 0x18b9, 0x15d2, 0x17dc, +0x1518, 0x17dc, 0x1518, 0x1666, 0x13c5, 0x1666, 0x13c5, 0x1666, 0x13c5, 0x1513, 0x1295, +0x1513, 0x1295, 0x141e, 0x11c1, 0x141e, 0x11c1, 0x1329, 0x10eb, 0x1329, 0x10eb, 0x1201, +0xfe0, 0x1201, 0xfe0, 0x10a4, 0xe9c, 0x10a4, 0xe9c, 0xf97, 0xda7, 0xf97, 0xda7, +0xf97, 0xda7, 0xecd, 0xcf2, 0xecd, 0xcf2, 0xe4e, 0xc85, 0xe4e, 0xc85, 0xe33, +0xc79, 0xe33, 0xc79, 0xdd0, 0xc25, 0xdd0, 0xc25, 0xd7f, 0xbe1, 0xd7f, 0xbe1, +0xdb3, 0xc22, 0xdb3, 0xc22, 0xdb3, 0xc22, 0xe16, 0xc92, 0xe16, 0xc92, 0xe6b, +0xcf6, 0xe6b, 0xcf6, 0xe73, 0xd0e, 0xe73, 0xd0e, 0xe5f, 0xd0b, 0xe5f, 0xd0b, +0xe25, 0xce5, 0xe25, 0xce5, 0xe25, 0xce5, 0xdb8, 0xc8e, 0xdb8, 0xc8e, 0xcba, +0xba9, 0xcba, 0xba9, 0xb2c, 0xa36, 0xb2c, 0xa36, 0xa1c, 0x944, 0xa1c, 0x944, +0x97d, 0x8c5, 0x97d, 0x8c5, 0x8eb, 0x855, 0x8eb, 0x855, 0x8eb, 0x855, 0x848, +0x7d4, 0x848, 0x7d4, 0x76e, 0x71e, 0x76e, 0x71e, 0x669, 0x63d, 0x669, 0x63d, +0x58d, 0x585, 0x58d, 0x585, 0x4c5, 0x4df, 0x4c5, 0x4df, 0x3b0, 0x3ec, 0x3b0, +0x3ec, 0x3b0, 0x3ec, 0x293, 0x2ef, 0x293, 0x2ef, 0x19c, 0x216, 0x19c, 0x216, +0xf7, 0x18e, 0xf7, 0x18e, 0x3a, 0xeb, 0x3a, 0xeb, 0xff43, 0xd, 0xff43, +0xd, 0xff43, 0xd, 0xfe90, 0xff72, 0xfe90, 0xff72, 0xfe3c, 0xff32, 0xfe3c, 0xff32, +0xfdc9, 0xfed5, 0xfdc9, 0xfed5, 0xfd07, 0xfe25, 0xfd07, 0xfe25, 0xfc49, 0xfd79, 0xfc49, +0xfd79, 0xfb3d, 0xfc80, 0xfb3d, 0xfc80, 0xfb3d, 0xfc80, 0xfa28, 0xfb7d, 0xfa28, 0xfb7d, +0xf935, 0xfa9b, 0xf935, 0xfa9b, 0xf833, 0xf9ab, 0xf833, 0xf9ab, 0xf777, 0xf901, 0xf777, +0xf901, 0xf6fa, 0xf895, 0xf6fa, 0xf895, 0xf6fa, 0xf895, 0xf64f, 0xf7fb, 0xf64f, 0xf7fb, +0xf569, 0xf724, 0xf569, 0xf724, 0xf48d, 0xf657, 0xf48d, 0xf657, 0xf38d, 0xf564, 0xf38d, +0xf564, 0xf2b6, 0xf498, 0xf2b6, 0xf498, 0xf24f, 0xf439, 0xf24f, 0xf439, 0xf24f, 0xf439, +0xf1e7, 0xf3d5, 0xf1e7, 0xf3d5, 0xf16b, 0xf359, 0xf16b, 0xf359, 0xf118, 0xf302, 0xf118, +0xf302, 0xf0aa, 0xf28c, 0xf0aa, 0xf28c, 0xf011, 0xf1e5, 0xf011, 0xf1e5, 0xefc2, 0xf183, +0xefc2, 0xf183, 0xefc2, 0xf183, 0xefab, 0xf155, 0xefab, 0xf155, 0xefb0, 0xf13c, 0xefb0, +0xf13c, 0xf011, 0xf17b, 0xf011, 0xf17b, 0xf0df, 0xf223, 0xf0df, 0xf223, 0xf1fd, 0xf317, +0xf1fd, 0xf317, 0xf1fd, 0xf317, 0xf32d, 0xf41b, 0xf32d, 0xf41b, 0xf3fa, 0xf4b9, 0xf3fa, +0xf4b9, 0xf502, 0xf58f, 0xf502, 0xf58f, 0xf63c, 0xf698, 0xf63c, 0xf698, 0xf713, 0xf73d, +0xf713, 0xf73d, 0xf841, 0xf83c, 0xf841, 0xf83c, 0xf841, 0xf83c, 0xf98b, 0xf956, 0xf98b, +0xf956, 0xfaf3, 0xfa92, 0xfaf3, 0xfa92, 0xfd17, 0xfc8c, 0xfd17, 0xfc8c, 0xffa0, 0xfeee, +0xffa0, 0xfeee, 0x1f6, 0x121, 0x1f6, 0x121, 0x44b, 0x354, 0x44b, 0x354, 0x44b, +0x354, 0x693, 0x57f, 0x693, 0x57f, 0x83a, 0x70b, 0x83a, 0x70b, 0x984, 0x83c, +0x984, 0x83c, 0xa2e, 0x8d0, 0xa2e, 0x8d0, 0xa7d, 0x90a, 0xa7d, 0x90a, 0xa7d, +0x90a, 0xb45, 0x9bd, 0xb45, 0x9bd, 0xc87, 0xaec, 0xc87, 0xaec, 0xdb7, 0xc07, +0xdb7, 0xc07, 0xede, 0xd19, 0xede, 0xd19, 0x1052, 0xe79, 0x1052, 0xe79, 0x1176, +0xf84, 0x1176, 0xf84, 0x1176, 0xf84, 0x12b0, 0x10a7, 0x12b0, 0x10a7, 0x1411, 0x11ed, +0x1411, 0x11ed, 0x1533, 0x12f4, 0x1533, 0x12f4, 0x1649, 0x13ee, 0x1649, 0x13ee, 0x1779, +0x1501, 0x1779, 0x1501, 0x18c1, 0x162d, 0x18c1, 0x162d, 0x18c1, 0x162d, 0x19f5, 0x1745, +0x19f5, 0x1745, 0x1b27, 0x185d, 0x1b27, 0x185d, 0x1bcb, 0x18e8, 0x1bcb, 0x18e8, 0x1c7b, +0x1982, 0x1c7b, 0x1982, 0x1ce4, 0x19dc, 0x1ce4, 0x19dc, 0x1ce4, 0x19dc, 0x1c67, 0x1950, +0x1c67, 0x1950, 0x1c21, 0x1903, 0x1c21, 0x1903, 0x1b9e, 0x187f, 0x1b9e, 0x187f, 0x1ae2, +0x17c5, 0x1ae2, 0x17c5, 0x1a5a, 0x174a, 0x1a5a, 0x174a, 0x19e5, 0x16e4, 0x19e5, 0x16e4, +0x19e5, 0x16e4, 0x1955, 0x166a, 0x1955, 0x166a, 0x186d, 0x15a2, 0x186d, 0x15a2, 0x1795, +0x14e9, 0x1795, 0x14e9, 0x16af, 0x142a, 0x16af, 0x142a, 0x15d7, 0x137d, 0x15d7, 0x137d, +0x14f0, 0x12c1, 0x14f0, 0x12c1, 0x14f0, 0x12c1, 0x13d1, 0x11d1, 0x13d1, 0x11d1, 0x12f0, +0x111e, 0x12f0, 0x111e, 0x124d, 0x10a9, 0x124d, 0x10a9, 0x11a1, 0x102a, 0x11a1, 0x102a, +0x10f6, 0xfa9, 0x10f6, 0xfa9, 0x10f6, 0xfa9, 0x1032, 0xf0c, 0x1032, 0xf0c, 0xee8, +0xde2, 0xee8, 0xde2, 0xdd7, 0xcf1, 0xdd7, 0xcf1, 0xd22, 0xc51, 0xd22, 0xc51, +0xc1a, 0xb5b, 0xc1a, 0xb5b, 0xb37, 0xa86, 0xb37, 0xa86, 0xb37, 0xa86, 0xa78, +0x9c9, 0xa78, 0x9c9, 0x9d7, 0x92b, 0x9d7, 0x92b, 0x9b7, 0x906, 0x9b7, 0x906, +0x9be, 0x900, 0x9be, 0x900, 0x9cf, 0x906, 0x9cf, 0x906, 0x9fa, 0x921, 0x9fa, +0x921, 0x9fa, 0x921, 0x9ca, 0x8da, 0x9ca, 0x8da, 0x976, 0x877, 0x976, 0x877, +0x965, 0x84e, 0x965, 0x84e, 0x945, 0x81b, 0x945, 0x81b, 0x927, 0x7ef, 0x927, +0x7ef, 0x927, 0x7ef, 0x978, 0x82b, 0x978, 0x82b, 0xa26, 0x8d3, 0xa26, 0x8d3, +0xaee, 0x98f, 0xaee, 0x98f, 0xb8d, 0xa2d, 0xb8d, 0xa2d, 0xbed, 0xa8e, 0xbed, +0xa8e, 0xbfe, 0xaa4, 0xbfe, 0xaa4, 0xbfe, 0xaa4, 0xbf4, 0xaa9, 0xbf4, 0xaa9, +0xba4, 0xa68, 0xba4, 0xa68, 0xaea, 0x9c5, 0xaea, 0x9c5, 0xa56, 0x94a, 0xa56, +0x94a, 0x9c7, 0x8da, 0x9c7, 0x8da, 0x92c, 0x861, 0x92c, 0x861, 0x92c, 0x861, +0x8ba, 0x812, 0x8ba, 0x812, 0x809, 0x788, 0x809, 0x788, 0x749, 0x6f2, 0x749, +0x6f2, 0x6f1, 0x6be, 0x6f1, 0x6be, 0x686, 0x67b, 0x686, 0x67b, 0x686, 0x67b, +0x5fd, 0x61d, 0x5fd, 0x61d, 0x568, 0x5a7, 0x568, 0x5a7, 0x4d1, 0x537, 0x4d1, +0x537, 0x46c, 0x4f3, 0x46c, 0x4f3, 0x422, 0x4c4, 0x422, 0x4c4, 0x395, 0x453, +0x395, 0x453, 0x395, 0x453, 0x2be, 0x392, 0x2be, 0x392, 0x1f2, 0x2dc, 0x1f2, +0x2dc, 0x109, 0x1fd, 0x109, 0x1fd, 0x5e, 0x166, 0x5e, 0x166, 0xd, 0x11a, +0xd, 0x11a, 0xff50, 0x62, 0xff50, 0x62, 0xff50, 0x62, 0xfebd, 0xffe1, 0xfebd, +0xffe1, 0xfee9, 0, 0xfee9, 0, 0xfef0, 0x19, 0xfef0, 0x19, 0xfefe, 0x28, +0xfefe, 0x28, 0xfea3, 0xffc2, 0xfea3, 0xffc2, 0xfea3, 0xffc2, 0xfd90, 0xfec8, 0xfd90, +0xfec8, 0xfc60, 0xfd8a, 0xfc60, 0xfd8a, 0xfaf4, 0xfc25, 0xfaf4, 0xfc25, 0xfa0e, 0xfb52, +0xfa0e, 0xfb52, 0xf94e, 0xfa88, 0xf94e, 0xfa88, 0xf858, 0xf9a6, 0xf858, 0xf9a6, 0xf858, +0xf9a6, 0xf889, 0xf9e4, 0xf889, 0xf9e4, 0xf8c0, 0xfa1d, 0xf8c0, 0xfa1d, 0xf8d3, 0xfa48, +0xf8d3, 0xfa48, 0xf920, 0xfa9b, 0xf920, 0xfa9b, 0xf89e, 0xfa2f, 0xf89e, 0xfa2f, 0xf7e5, +0xf97f, 0xf7e5, 0xf97f, 0xf7e5, 0xf97f, 0xf702, 0xf8ae, 0xf702, 0xf8ae, 0xf532, 0xf6f3, +0xf532, 0xf6f3, 0xf394, 0xf552, 0xf394, 0xf552, 0xf2bd, 0xf49e, 0xf2bd, 0xf49e, 0xf183, +0xf35d, 0xf183, 0xf35d, 0xf183, 0xf35d, 0xf13a, 0xf321, 0xf13a, 0xf321, 0xf0fc, 0xf2f5, +0xf0fc, 0xf2f5, 0xf0de, 0xf2cb, 0xf0de, 0xf2cb, 0xf147, 0xf344, 0xf147, 0xf344, 0xf129, +0xf328, 0xf129, 0xf328, 0xf12c, 0xf323, 0xf12c, 0xf323, 0xf12c, 0xf323, 0xf048, 0xf244, +0xf048, 0xf244, 0xef70, 0xf170, 0xef70, 0xf170, 0xeee1, 0xf0cf, 0xeee1, 0xf0cf, 0xee04, +0xf005, 0xee04, 0xf005, 0xee61, 0xf051, 0xee61, 0xf051, 0xee61, 0xf051, 0xee9f, 0xf09a, +0xee9f, 0xf09a, 0xee64, 0xf05f, 0xee64, 0xf05f, 0xee9f, 0xf098, 0xee9f, 0xf098, 0xedec, +0xf000, 0xedec, 0xf000, 0xed26, 0xef21, 0xed26, 0xef21, 0xec27, 0xee5a, 0xec27, 0xee5a, +0xec27, 0xee5a, 0xea74, 0xec96, 0xea74, 0xec96, 0xe93c, 0xeb72, 0xe93c, 0xeb72, 0xe810, +0xea7d, 0xe810, 0xea7d, 0xe765, 0xe9b4, 0xe765, 0xe9b4, 0xe6bc, 0xe947, 0xe6bc, 0xe947, +0xe597, 0xe83f, 0xe597, 0xe83f, 0xe597, 0xe83f, 0xe4ea, 0xe787, 0xe4ea, 0xe787, 0xe3eb, +0xe6c6, 0xe3eb, 0xe6c6, 0xe40d, 0xe6fa, 0xe40d, 0xe6fa, 0xe3e0, 0xe6bf, 0xe3e0, 0xe6bf, +0xe339, 0xe661, 0xe339, 0xe661, 0xe339, 0xe661, 0xe343, 0xe651, 0xe343, 0xe651, 0xe296, +0xe5b8, 0xe296, 0xe5b8, 0xe2cc, 0xe60a, 0xe2cc, 0xe60a, 0xe311, 0xe62e, 0xe311, 0xe62e, +0xe29c, 0xe5da, 0xe29c, 0xe5da, 0xe2d3, 0xe5ec, 0xe2d3, 0xe5ec, 0xe2d3, 0xe5ec, 0xe2bf, +0xe5e7, 0xe2bf, 0xe5e7, 0xe302, 0xe604, 0xe302, 0xe604, 0xe45e, 0xe757, 0xe45e, 0xe757, +0xe43f, 0xe72f, 0xe43f, 0xe72f, 0xe5b0, 0xe862, 0xe5b0, 0xe862, 0xe6ce, 0xe998, 0xe6ce, +0xe998, 0xe6ce, 0xe998, 0xe7b8, 0xea4b, 0xe7b8, 0xea4b, 0xea3e, 0xecaa, 0xea3e, 0xecaa, +0xea80, 0xed04, 0xea80, 0xed04, 0xeb43, 0xed8d, 0xeb43, 0xed8d, 0xec13, 0xee38, 0xec13, +0xee38, 0xec13, 0xee38, 0xebb7, 0xee16, 0xebb7, 0xee16, 0xece7, 0xeee4, 0xece7, 0xeee4, +0xed39, 0xef51, 0xed39, 0xef51, 0xedba, 0xeff7, 0xedba, 0xeff7, 0xef5a, 0xf133, 0xef5a, +0xf133, 0xefd9, 0xf219, 0xefd9, 0xf219, 0xefd9, 0xf219, 0xf14b, 0xf358, 0xf14b, 0xf358, +0xf1ad, 0xf3b6, 0xf1ad, 0xf3b6, 0xf264, 0xf4b3, 0xf264, 0xf4b3, 0xf296, 0xf49e, 0xf296, +0xf49e, 0xf222, 0xf46b, 0xf222, 0xf46b, 0xf2bd, 0xf502, 0xf2bd, 0xf502, 0xf2bd, 0xf502, +0xf2a1, 0xf4ca, 0xf2a1, 0xf4ca, 0xf207, 0xf466, 0xf207, 0xf466, 0xf176, 0xf3ac, 0xf176, +0xf3ac, 0xf0ca, 0xf30e, 0xf0ca, 0xf30e, 0xf0f7, 0xf335, 0xf0f7, 0xf335, 0xf0f7, 0xf335, +0xf150, 0xf373, 0xf150, 0xf373, 0xf14f, 0xf381, 0xf14f, 0xf381, 0xf1a2, 0xf39a, 0xf1a2, +0xf39a, 0xf09a, 0xf2a1, 0xf09a, 0xf2a1, 0xf166, 0xf347, 0xf166, 0xf347, 0xf169, 0xf327, +0xf169, 0xf327, 0xf169, 0xf327, 0xf13b, 0xf2f0, 0xf13b, 0xf2f0, 0xf210, 0xf3a1, 0xf210, +0xf3a1, 0xf232, 0xf3b0, 0xf232, 0xf3b0, 0xf2c6, 0xf417, 0xf2c6, 0xf417, 0xf2b1, 0xf410, +0xf2b1, 0xf410, 0xf292, 0xf3b8, 0xf292, 0xf3b8, 0xf292, 0xf3b8, 0xf28f, 0xf3ae, 0xf28f, +0xf3ae, 0xf1e9, 0xf305, 0xf1e9, 0xf305, 0xf22e, 0xf32c, 0xf22e, 0xf32c, 0xf2c4, 0xf3bb, +0xf2c4, 0xf3bb, 0xf327, 0xf41d, 0xf327, 0xf41d, 0xf327, 0xf41d, 0xf452, 0xf544, 0xf452, +0xf544, 0xf53f, 0xf612, 0xf53f, 0xf612, 0xf62d, 0xf724, 0xf62d, 0xf724, 0xf6c1, 0xf789, +0xf6c1, 0xf789, 0xf6dc, 0xf7b6, 0xf6dc, 0xf7b6, 0xf6f7, 0xf7c5, 0xf6f7, 0xf7c5, 0xf6f7, +0xf7c5, 0xf762, 0xf809, 0xf762, 0xf809, 0xf6e9, 0xf7a6, 0xf6e9, 0xf7a6, 0xf862, 0xf8ea, +0xf862, 0xf8ea, 0xf960, 0xf9cf, 0xf960, 0xf9cf, 0xfb5d, 0xfbb9, 0xfb5d, 0xfbb9, 0xfdb5, +0xfde9, 0xfdb5, 0xfde9, 0xfdb5, 0xfde9, 0xff97, 0xff7b, 0xff97, 0xff7b, 0x270, 0x250, +0x270, 0x250, 0x383, 0x31d, 0x383, 0x31d, 0x58d, 0x4c6, 0x58d, 0x4c6, 0x681, +0x5af, 0x681, 0x5af, 0x681, 0x5af, 0x71d, 0x5fb, 0x71d, 0x5fb, 0x8dd, 0x74f, +0x8dd, 0x74f, 0xaa9, 0x90c, 0xaa9, 0x90c, 0xc7f, 0xa9b, 0xc7f, 0xa9b, 0xf58, +0xcf5, 0xf58, 0xcf5, 0x109a, 0xe59, 0x109a, 0xe59, 0x109a, 0xe59, 0x131d, 0x105d, +0x131d, 0x105d, 0x154a, 0x1262, 0x154a, 0x1262, 0x160a, 0x1324, 0x160a, 0x1324, 0x1704, +0x13ab, 0x1704, 0x13ab, 0x184c, 0x1511, 0x184c, 0x1511, 0x1950, 0x15e9, 0x1950, 0x15e9, +0x1950, 0x15e9, 0x1a57, 0x16c7, 0x1a57, 0x16c7, 0x1b82, 0x17fd, 0x1b82, 0x17fd, 0x1b1a, +0x17a0, 0x1b1a, 0x17a0, 0x1d70, 0x19bb, 0x1d70, 0x19bb, 0x1e39, 0x1ab3, 0x1e39, 0x1ab3, +0x1e39, 0x1ab3, 0x1ec9, 0x1b65, 0x1ec9, 0x1b65, 0x1ede, 0x1b29, 0x1ede, 0x1b29, 0x1d91, +0x1a45, 0x1d91, 0x1a45, 0x1d24, 0x19d4, 0x1d24, 0x19d4, 0x1c79, 0x1906, 0x1c79, 0x1906, +0x1af0, 0x17d4, 0x1af0, 0x17d4, 0x1af0, 0x17d4, 0x199f, 0x1678, 0x199f, 0x1678, 0x1885, +0x1565, 0x1885, 0x1565, 0x16f8, 0x1400, 0x16f8, 0x1400, 0x15b4, 0x12cf, 0x15b4, 0x12cf, +0x153e, 0x125f, 0x153e, 0x125f, 0x13d5, 0x110f, 0x13d5, 0x110f, 0x13d5, 0x110f, 0x12f6, +0x1057, 0x12f6, 0x1057, 0x12eb, 0x1036, 0x12eb, 0x1036, 0x11fd, 0xf9a, 0x11fd, 0xf9a, +0x1260, 0xfe1, 0x1260, 0xfe1, 0x1256, 0xffb, 0x1256, 0xffb, 0x1256, 0xffb, 0x12f6, +0x10ee, 0x12f6, 0x10ee, 0x125b, 0x1007, 0x125b, 0x1007, 0x1226, 0x105c, 0x1226, 0x105c, +0x115c, 0xf7a, 0x115c, 0xf7a, 0x109f, 0xeee, 0x109f, 0xeee, 0xfb3, 0xe2f, 0xfb3, +0xe2f, 0xfb3, 0xe2f, 0xe79, 0xd11, 0xe79, 0xd11, 0xd4b, 0xc3b, 0xd4b, 0xc3b, +0xc1e, 0xad4, 0xc1e, 0xad4, 0xb21, 0xa80, 0xb21, 0xa80, 0xa5f, 0x997, 0xa5f, +0x997, 0x981, 0x8e2, 0x981, 0x8e2, 0x981, 0x8e2, 0x7ac, 0x775, 0x7ac, 0x775, +0x77b, 0x735, 0x77b, 0x735, 0x59f, 0x589, 0x59f, 0x589, 0x4b9, 0x4db, 0x4b9, +0x4db, 0x3a4, 0x3e2, 0x3a4, 0x3e2, 0x3a4, 0x3e2, 0x2fe, 0x340, 0x2fe, 0x340, +0x254, 0x2f2, 0x254, 0x2f2, 0x20e, 0x274, 0x20e, 0x274, 0xfb, 0x1d4, 0xfb, +0x1d4, 0x38, 0xe9, 0x38, 0xe9, 0xff6a, 0x39, 0xff6a, 0x39, 0xff6a, 0x39, +0xfec0, 0xffde, 0xfec0, 0xffde, 0xfe0c, 0xfee7, 0xfe0c, 0xfee7, 0xfc84, 0xfdc1, 0xfc84, +0xfdc1, 0xfbb8, 0xfcd4, 0xfbb8, 0xfcd4, 0xf9db, 0xfb42, 0xf9db, 0xfb42, 0xf9db, 0xfb42, +0xf9d7, 0xfb14, 0xf9d7, 0xfb14, 0xf7c7, 0xf949, 0xf7c7, 0xf949, 0xf6fd, 0xf894, 0xf6fd, +0xf894, 0xf5a9, 0xf731, 0xf5a9, 0xf731, 0xf495, 0xf651, 0xf495, 0xf651, 0xf3bf, 0xf593, +0xf3bf, 0xf593, 0xf3bf, 0xf593, 0xf2e4, 0xf4cc, 0xf2e4, 0xf4cc, 0xf247, 0xf400, 0xf247, +0xf400, 0xf0b4, 0xf30e, 0xf0b4, 0xf30e, 0xf023, 0xf1e7, 0xf023, 0xf1e7, 0xef35, 0xf16b, +0xef35, 0xf16b, 0xee9a, 0xf0cc, 0xee9a, 0xf0cc, 0xee9a, 0xf0cc, 0xee18, 0xf00d, 0xee18, +0xf00d, 0xece4, 0xef3e, 0xece4, 0xef3e, 0xec27, 0xedfb, 0xec27, 0xedfb, 0xec14, 0xee61, +0xec14, 0xee61, 0xeba2, 0xed69, 0xeba2, 0xed69, 0xeba2, 0xed69, 0xec0f, 0xee07, 0xec0f, +0xee07, 0xebc1, 0xed84, 0xebc1, 0xed84, 0xeb96, 0xed2e, 0xeb96, 0xed2e, 0xeb7f, 0xed20, +0xeb7f, 0xed20, 0xed12, 0xee29, 0xed12, 0xee29, 0xeda2, 0xef19, 0xeda2, 0xef19, 0xeda2, +0xef19, 0xeee0, 0xefa8, 0xeee0, 0xefa8, 0xef49, 0xf01a, 0xef49, 0xf01a, 0xf061, 0xf111, +0xf061, 0xf111, 0xf174, 0xf1d2, 0xf174, 0xf1d2, 0xf22c, 0xf253, 0xf22c, 0xf253, 0xf3ce, +0xf3d8, 0xf3ce, 0xf3d8, 0xf3ce, 0xf3d8, 0xf477, 0xf46e, 0xf477, 0xf46e, 0xf780, 0xf6d9, +0xf780, 0xf6d9, 0xf9f0, 0xf9a1, 0xf9f0, 0xf9a1, 0xfcfb, 0xfc33, 0xfcfb, 0xfc33, 0xfef9, +0xfdf0, 0xfef9, 0xfdf0, 0xfef9, 0xfdf0, 0x130, 0x4a, 0x130, 0x4a, 0x274, 0x117, +0x274, 0x117, 0x3ec, 0x290, 0x3ec, 0x290, 0x4ee, 0x360, 0x4ee, 0x360, 0x5f6, +0x42b, 0x5f6, 0x42b, 0x6f9, 0x52e, 0x6f9, 0x52e, 0x6f9, 0x52e, 0x8b3, 0x69b, +0x8b3, 0x69b, 0xa3b, 0x7fc, 0xa3b, 0x7fc, 0xb79, 0x931, 0xb79, 0x931, 0xd0f, +0xa81, 0xd0f, 0xa81, 0xe90, 0xbd2, 0xe90, 0xbd2, 0x106d, 0xd9c, 0x106d, 0xd9c, +0x106d, 0xd9c, 0x1130, 0xe45, 0x1130, 0xe45, 0x132d, 0xfda, 0x132d, 0xfda, 0x13d2, +0x1092, 0x13d2, 0x1092, 0x154b, 0x11fa, 0x154b, 0x11fa, 0x162a, 0x125f, 0x162a, 0x125f, +0x162a, 0x125f, 0x17f5, 0x145a, 0x17f5, 0x145a, 0x1887, 0x14d7, 0x1887, 0x14d7, 0x1a6e, +0x1660, 0x1a6e, 0x1660, 0x1b6c, 0x1795, 0x1b6c, 0x1795, 0x1c6c, 0x187a, 0x1c6c, 0x187a, +0x1d54, 0x193f, 0x1d54, 0x193f, 0x1d54, 0x193f, 0x1c5b, 0x1877, 0x1c5b, 0x1877, 0x1d00, +0x18f7, 0x1d00, 0x18f7, 0x1c73, 0x18a4, 0x1c73, 0x18a4, 0x1c8f, 0x18ba, 0x1c8f, 0x18ba, +0x1bda, 0x181a, 0x1bda, 0x181a, 0x1b8c, 0x1808, 0x1b8c, 0x1808, 0x1b8c, 0x1808, 0x1a7b, +0x1716, 0x1a7b, 0x1716, 0x1a44, 0x16e4, 0x1a44, 0x16e4, 0x19c1, 0x16b3, 0x19c1, 0x16b3, +0x19cd, 0x170b, 0x19cd, 0x170b, 0x1933, 0x1632, 0x1933, 0x1632, 0x1933, 0x1632, 0x18a4, +0x165d, 0x18a4, 0x165d, 0x1834, 0x15c5, 0x1834, 0x15c5, 0x1782, 0x1560, 0x1782, 0x1560, +0x16c3, 0x14d8, 0x16c3, 0x14d8, 0x15f2, 0x1416, 0x15f2, 0x1416, 0x1510, 0x13b2, 0x1510, +0x13b2, 0x1510, 0x13b2, 0x1418, 0x124d, 0x1418, 0x124d, 0x12f8, 0x11fd, 0x12f8, 0x11fd, +0x11f9, 0x10ae, 0x11f9, 0x10ae, 0x1116, 0xffe, 0x1116, 0xffe, 0xf59, 0xe81, 0xf59, +0xe81, 0xf29, 0xe37, 0xf29, 0xe37, 0xf29, 0xe37, 0xdf7, 0xd4f, 0xdf7, 0xd4f, +0xe99, 0xdac, 0xe99, 0xdac, 0xe03, 0xd96, 0xe03, 0xd96, 0xe7a, 0xdb0, 0xe7a, +0xdb0, 0xe3d, 0xdb8, 0xe3d, 0xdb8, 0xe3d, 0xdb8, 0xde3, 0xd44, 0xde3, 0xd44, +0xd1e, 0xca5, 0xd1e, 0xca5, 0xcd8, 0xc53, 0xcd8, 0xc53, 0xd64, 0xcad, 0xd64, +0xcad, 0xd8e, 0xd64, 0xd8e, 0xd64, 0xec8, 0xdfb, 0xec8, 0xdfb, 0xec8, 0xdfb, +0xeb0, 0xe4d, 0xeb0, 0xe4d, 0xff2, 0xf85, 0xff2, 0xf85, 0xfd0, 0xf3b, 0xfd0, +0xf3b, 0x10a4, 0x103f, 0x10a4, 0x103f, 0x1047, 0xfbc, 0x1047, 0xfbc, 0xfce, 0xf6a, +0xfce, 0xf6a, 0xfce, 0xf6a, 0xfb8, 0xf47, 0xfb8, 0xf47, 0xfe4, 0xf4d, 0xfe4, +0xf4d, 0xe61, 0xe15, 0xe61, 0xe15, 0xd72, 0xd04, 0xd72, 0xd04, 0xc53, 0xba5, +0xc53, 0xba5, 0xc53, 0xba5, 0xb5f, 0xb39, 0xb5f, 0xb39, 0xaea, 0xa4a, 0xaea, +0xa4a, 0xa23, 0x9b0, 0xa23, 0x9b0, 0xa7c, 0xa0c, 0xa7c, 0xa0c, 0xa3b, 0x9c1, +0xa3b, 0x9c1, 0xa1d, 0x9a5, 0xa1d, 0x9a5, 0xa1d, 0x9a5, 0x89e, 0x7fa, 0x89e, +0x7fa, 0x856, 0x807, 0x856, 0x807, 0x722, 0x66d, 0x722, 0x66d, 0x661, 0x5e4, +0x661, 0x5e4, 0x4b7, 0x41c, 0x4b7, 0x41c, 0x400, 0x382, 0x400, 0x382, 0x400, +0x382, 0x38a, 0x2da, 0x38a, 0x2da, 0x390, 0x2f6, 0x390, 0x2f6, 0x2c9, 0x24e, +0x2c9, 0x24e, 0x207, 0x146, 0x207, 0x146, 0x1d1, 0x155, 0x1d1, 0x155, 0x1d1, +0x155, 0x153, 0xa0, 0x153, 0xa0, 0x7a, 0x1f, 0x7a, 0x1f, 0xffbe, 0xfefa, +0xffbe, 0xfefa, 0xff6a, 0xfefc, 0xff6a, 0xfefc, 0xfd60, 0xfd17, 0xfd60, 0xfd17, 0xfcad, +0xfbfa, 0xfcad, 0xfbfa, 0xfcad, 0xfbfa, 0xfa8f, 0xfa5c, 0xfa8f, 0xfa5c, 0xfa5c, 0xfa19, +0xfa5c, 0xfa19, 0xf94e, 0xf8f4, 0xf94e, 0xf8f4, 0xf7e5, 0xf7c8, 0xf7e5, 0xf7c8, 0xf6ce, +0xf6c1, 0xf6ce, 0xf6c1, 0xf6f0, 0xf6dc, 0xf6f0, 0xf6dc, 0xf6f0, 0xf6dc, 0xf6d0, 0xf6fc, +0xf6d0, 0xf6fc, 0xf75c, 0xf74d, 0xf75c, 0xf74d, 0xf6ee, 0xf772, 0xf6ee, 0xf772, 0xf6c9, +0xf6e6, 0xf6c9, 0xf6e6, 0xf6ee, 0xf73e, 0xf6ee, 0xf73e, 0xf6ee, 0xf73e, 0xf5b5, 0xf676, +0xf5b5, 0xf676, 0xf4f4, 0xf523, 0xf4f4, 0xf523, 0xf208, 0xf2d7, 0xf208, 0xf2d7, 0xf1c1, +0xf23e, 0xf1c1, 0xf23e, 0xf04c, 0xf125, 0xf04c, 0xf125, 0xefe8, 0xf079, 0xefe8, 0xf079, +0xefe8, 0xf079, 0xeedf, 0xefae, 0xeedf, 0xefae, 0xee9a, 0xef82, 0xee9a, 0xef82, 0xee1f, +0xeebf, 0xee1f, 0xeebf, 0xedeb, 0xeeed, 0xedeb, 0xeeed, 0xed63, 0xee08, 0xed63, 0xee08, +0xed63, 0xee08, 0xec21, 0xed4e, 0xec21, 0xed4e, 0xebc7, 0xec41, 0xebc7, 0xec41, 0xeae5, +0xec06, 0xeae5, 0xec06, 0xeb34, 0xec22, 0xeb34, 0xec22, 0xeac7, 0xeb66, 0xeac7, 0xeb66, +0xea73, 0xebb0, 0xea73, 0xebb0, 0xea73, 0xebb0, 0xea4b, 0xeafb, 0xea4b, 0xeafb, 0xea3d, +0xeb73, 0xea3d, 0xeb73, 0xe9ea, 0xeaa5, 0xe9ea, 0xeaa5, 0xe9cc, 0xeb0a, 0xe9cc, 0xeb0a, +0xe8b8, 0xe9dc, 0xe8b8, 0xe9dc, 0xe84d, 0xe932, 0xe84d, 0xe932, 0xe84d, 0xe932, 0xe6b4, +0xe832, 0xe6b4, 0xe832, 0xe64e, 0xe780, 0xe64e, 0xe780, 0xe4e7, 0xe63c, 0xe4e7, 0xe63c, +0xe476, 0xe5ea, 0xe476, 0xe5ea, 0xe3e4, 0xe58b, 0xe3e4, 0xe58b, 0xe3e4, 0xe58b, 0xe3cb, +0xe53e, 0xe3cb, 0xe53e, 0xe42c, 0xe5f5, 0xe42c, 0xe5f5, 0xe42b, 0xe5f2, 0xe42b, 0xe5f2, +0xe404, 0xe5d0, 0xe404, 0xe5d0, 0xe2b8, 0xe4be, 0xe2b8, 0xe4be, 0xe38c, 0xe554, 0xe38c, +0xe554, 0xe38c, 0xe554, 0xe29c, 0xe4d5, 0xe29c, 0xe4d5, 0xe35b, 0xe561, 0xe35b, 0xe561, +0xe296, 0xe475, 0xe296, 0xe475, 0xe23d, 0xe4a0, 0xe23d, 0xe4a0, 0xe228, 0xe42d, 0xe228, +0xe42d, 0xe2b2, 0xe492, 0xe2b2, 0xe492, 0xe2b2, 0xe492, 0xe289, 0xe4e4, 0xe289, 0xe4e4, +0xe3e7, 0xe5db, 0xe3e7, 0xe5db, 0xe455, 0xe631, 0xe455, 0xe631, 0xe4c5, 0xe6e1, 0xe4c5, +0xe6e1, 0xe757, 0xe93c, 0xe757, 0xe93c, 0xe757, 0xe93c, 0xe816, 0xe9da, 0xe816, 0xe9da, +0xe9f5, 0xebbe, 0xe9f5, 0xebbe, 0xeaf5, 0xeccc, 0xeaf5, 0xeccc, 0xecb8, 0xee48, 0xecb8, +0xee48, 0xed85, 0xef19, 0xed85, 0xef19, 0xee18, 0xefca, 0xee18, 0xefca, 0xee18, 0xefca, +0xeeaf, 0xf008, 0xeeaf, 0xf008, 0xf07e, 0xf213, 0xf07e, 0xf213, 0xf1a0, 0xf2fa, 0xf1a0, +0xf2fa, 0xf34f, 0xf4a0, 0xf34f, 0xf4a0, 0xf40b, 0xf5b0, 0xf40b, 0xf5b0, 0xf5cd, 0xf6b0, +0xf5cd, 0xf6b0, 0xf5cd, 0xf6b0, 0xf651, 0xf7f2, 0xf651, 0xf7f2, 0xf767, 0xf8b7, 0xf767, +0xf8b7, 0xf798, 0xf88c, 0xf798, 0xf88c, 0xf73d, 0xf8cb, 0xf73d, 0xf8cb, 0xf842, 0xf965, +0xf842, 0xf965, 0xf842, 0xf965, 0xf780, 0xf8b9, 0xf780, 0xf8b9, 0xf87e, 0xf986, 0xf87e, +0xf986, 0xf710, 0xf8a0, 0xf710, 0xf8a0, 0xf7a6, 0xf870, 0xf7a6, 0xf870, 0xf67c, 0xf7b7, +0xf67c, 0xf7b7, 0xf64f, 0xf79c, 0xf64f, 0xf79c, 0xf64f, 0xf79c, 0xf596, 0xf659, 0xf596, +0xf659, 0xf4c0, 0xf621, 0xf4c0, 0xf621, 0xf4f8, 0xf59f, 0xf4f8, 0xf59f, 0xf514, 0xf67f, +0xf514, 0xf67f, 0xf546, 0xf5d9, 0xf546, 0xf5d9, 0xf519, 0xf637, 0xf519, 0xf637, 0xf519, +0xf637, 0xf57f, 0xf679, 0xf57f, 0xf679, 0xf5b3, 0xf655, 0xf5b3, 0xf655, 0xf6c9, 0xf80b, +0xf6c9, 0xf80b, 0xf647, 0xf69a, 0xf647, 0xf69a, 0xf656, 0xf7ca, 0xf656, 0xf7ca, 0xf656, +0xf7ca, 0xf6dd, 0xf743, 0xf6dd, 0xf743, 0xf636, 0xf71d, 0xf636, 0xf71d, 0xf549, 0xf670, +0xf549, 0xf670, 0xf5b9, 0xf637, 0xf5b9, 0xf637, 0xf52e, 0xf633, 0xf52e, 0xf633, 0xf5bf, +0xf6a1, 0xf5bf, 0xf6a1, 0xf5bf, 0xf6a1, 0xf5b5, 0xf6a9, 0xf5b5, 0xf6a9, 0xf61d, 0xf6b8, +0xf61d, 0xf6b8, 0xf541, 0xf67d, 0xf541, 0xf67d, 0xf740, 0xf7e8, 0xf740, 0xf7e8, 0xf7bc, +0xf8b1, 0xf7bc, 0xf8b1, 0xf746, 0xf80a, 0xf746, 0xf80a, 0xf746, 0xf80a, 0xf7b8, 0xf8aa, +0xf7b8, 0xf8aa, 0xf809, 0xf8d6, 0xf809, 0xf8d6, 0xfa34, 0xfaa2, 0xfa34, 0xfaa2, 0xfa57, +0xfb8d, 0xfa57, 0xfb8d, 0xfcec, 0xfd09, 0xfcec, 0xfd09, 0xfcec, 0xfd09, 0xfcd8, 0xfda5, +0xfcd8, 0xfda5, 0xa, 0x6c, 0xa, 0x6c, 0x36c, 0x3b0, 0x36c, 0x3b0, 0x4bc, +0x519, 0x4bc, 0x519, 0x546, 0x52d, 0x546, 0x52d, 0x639, 0x65b, 0x639, 0x65b, +0x639, 0x65b, 0x5e8, 0x5bb, 0x5e8, 0x5bb, 0x7d3, 0x779, 0x7d3, 0x779, 0x9f3, +0x96a, 0x9f3, 0x96a, 0xa8a, 0xa5e, 0xa8a, 0xa5e, 0xd82, 0xc3e, 0xd82, 0xc3e, +0xfc6, 0xf3b, 0xfc6, 0xf3b, 0xfc6, 0xf3b, 0x1214, 0x1125, 0x1214, 0x1125, 0x1264, +0x10e9, 0x1264, 0x10e9, 0x154d, 0x144e, 0x154d, 0x144e, 0x15e5, 0x1438, 0x15e5, 0x1438, +0x1590, 0x144e, 0x1590, 0x144e, 0x1590, 0x144e, 0x16e2, 0x14b2, 0x16e2, 0x14b2, 0x188f, +0x171d, 0x188f, 0x171d, 0x199a, 0x1795, 0x199a, 0x1795, 0x1bb8, 0x193b, 0x1bb8, 0x193b, +0x1d88, 0x1bd3, 0x1d88, 0x1bd3, 0x1fd8, 0x1d1c, 0x1fd8, 0x1d1c, 0x1fd8, 0x1d1c, 0x1e39, +0x1be5, 0x1e39, 0x1be5, 0x1e28, 0x1b93, 0x1e28, 0x1b93, 0x1ca5, 0x19e9, 0x1ca5, 0x19e9, +0x18e5, 0x1632, 0x18e5, 0x1632, 0x19d5, 0x16e2, 0x19d5, 0x16e2, 0x194a, 0x1662, 0x194a, +0x1662, 0x194a, 0x1662, 0x1946, 0x1641, 0x1946, 0x1641, 0x15c6, 0x12cf, 0x15c6, 0x12cf, +0x173e, 0x13ed, 0x173e, 0x13ed, 0x1567, 0x126c, 0x1567, 0x126c, 0x1503, 0x1211, 0x1503, +0x1211, 0x1503, 0x1211, 0x1606, 0x1266, 0x1606, 0x1266, 0x10ea, 0xe3b, 0x10ea, 0xe3b, +0x116d, 0xe75, 0x116d, 0xe75, 0x1331, 0xfa3, 0x1331, 0xfa3, 0x141a, 0x11bc, 0x141a, +0x11bc, 0x159d, 0x12b2, 0x159d, 0x12b2, 0x159d, 0x12b2, 0x111b, 0xe0f, 0x111b, 0xe0f, +0xf33, 0xcf2, 0xf33, 0xcf2, 0x107a, 0xe0f, 0x107a, 0xe0f, 0xed2, 0xc2c, 0xed2, +0xc2c, 0xe51, 0xc84, 0xe51, 0xc84, 0xb9f, 0x997, 0xb9f, 0x997, 0xb9f, 0x997, +0xbc3, 0x9ab, 0xbc3, 0x9ab, 0xd4e, 0xc2f, 0xd4e, 0xc2f, 0xca7, 0xab3, 0xca7, +0xab3, 0x87b, 0x775, 0x87b, 0x775, 0x828, 0x73a, 0x828, 0x73a, 0x828, 0x73a, +0x766, 0x5fd, 0x766, 0x5fd, 0x635, 0x5e1, 0x635, 0x5e1, 0x6a6, 0x605, 0x6a6, +0x605, 0x314, 0x259, 0x314, 0x259, 0x192, 0x188, 0x192, 0x188, 0x309, 0x30b, +0x309, 0x30b, 0x309, 0x30b, 0x14d, 0xed, 0x14d, 0xed, 0x219, 0x27c, 0x219, +0x27c, 0x122, 0x18f, 0x122, 0x18f, 0xfff3, 0x13, 0xfff3, 0x13, 0x6d, 0x10b, +0x6d, 0x10b, 0x6d, 0x10b, 0xfce2, 0xfdc8, 0xfce2, 0xfdc8, 0xfdcb, 0xfe52, 0xfdcb, +0xfe52, 0xf9f3, 0xfae1, 0xf9f3, 0xfae1, 0xf974, 0xfab9, 0xf974, 0xfab9, 0xf791, 0xf868, +0xf791, 0xf868, 0xf7be, 0xf939, 0xf7be, 0xf939, 0xf7be, 0xf939, 0xf70e, 0xf84d, 0xf70e, +0xf84d, 0xf5e6, 0xf76f, 0xf5e6, 0xf76f, 0xf6ce, 0xf86d, 0xf6ce, 0xf86d, 0xf32b, 0xf4be, +0xf32b, 0xf4be, 0xf3d7, 0xf5b3, 0xf3d7, 0xf5b3, 0xf203, 0xf3e4, 0xf203, 0xf3e4, 0xf203, +0xf3e4, 0xefe7, 0xf1da, 0xefe7, 0xf1da, 0xee61, 0xf02f, 0xee61, 0xf02f, 0xedd3, 0xf04d, +0xedd3, 0xf04d, 0xec19, 0xede8, 0xec19, 0xede8, 0xeecc, 0xf0e9, 0xeecc, 0xf0e9, 0xeecc, +0xf0e9, 0xed17, 0xef94, 0xed17, 0xef94, 0xec16, 0xee0b, 0xec16, 0xee0b, 0xefe4, 0xf200, +0xefe4, 0xf200, 0xee1f, 0xf076, 0xee1f, 0xf076, 0xebe1, 0xee08, 0xebe1, 0xee08, 0xedb2, +0xef6f, 0xedb2, 0xef6f, 0xedb2, 0xef6f, 0xed21, 0xef8b, 0xed21, 0xef8b, 0xebb9, 0xed7c, +0xebb9, 0xed7c, 0xf053, 0xf224, 0xf053, 0xf224, 0xf13b, 0xf325, 0xf13b, 0xf325, 0xf1d7, +0xf35d, 0xf1d7, 0xf35d, 0xf402, 0xf5da, 0xf402, 0xf5da, 0xf402, 0xf5da, 0xf4dc, 0xf5fb, +0xf4dc, 0xf5fb, 0xf5bb, 0xf751, 0xf5bb, 0xf751, 0xf685, 0xf7f1, 0xf685, 0xf7f1, 0xf723, +0xf7ba, 0xf723, 0xf7ba, 0xf848, 0xf9e8, 0xf848, 0xf9e8, 0xf848, 0xf9e8, 0xf9c4, 0xfa6a, +0xf9c4, 0xfa6a, 0xfd28, 0xfdb8, 0xfd28, 0xfdb8, 0xffca, 0x133, 0xffca, 0x133, 0x39e, +0x33d, 0x39e, 0x33d, 0x430, 0x583, 0x430, 0x583, 0x6f0, 0x715, 0x6f0, 0x715, +0x6f0, 0x715, 0x896, 0x831, 0x896, 0x831, 0x95d, 0xae2, 0x95d, 0xae2, 0xc3b, +0xb15, 0xc3b, 0xb15, 0xa6d, 0xacb, 0xa6d, 0xacb, 0xb5b, 0xbc9, 0xb5b, 0xbc9, +0xcf1, 0xbe8, 0xcf1, 0xbe8, 0xcf1, 0xbe8, 0xc3a, 0xc52, 0xc3a, 0xc52, 0xda6, +0xd7b, 0xda6, 0xd7b, 0x1151, 0x1064, 0x1151, 0x1064, 0xed9, 0xe74, 0xed9, 0xe74, +0x1372, 0x12ff, 0x1372, 0x12ff, 0x1372, 0x12ff, 0x147d, 0x1350, 0x147d, 0x1350, 0x140b, +0x13a5, 0x140b, 0x13a5, 0x1397, 0x1249, 0x1397, 0x1249, 0x13b4, 0x1306, 0x13b4, 0x1306, +0x187f, 0x1743, 0x187f, 0x1743, 0x1890, 0x175f, 0x1890, 0x175f, 0x1890, 0x175f, 0x1aab, +0x19c1, 0x1aab, 0x19c1, 0x1bfc, 0x1a37, 0x1bfc, 0x1a37, 0x1bc8, 0x1b30, 0x1bc8, 0x1b30, +0x1a17, 0x17f5, 0x1a17, 0x17f5, 0x1d3a, 0x1c4e, 0x1d3a, 0x1c4e, 0x1ad1, 0x19a0, 0x1ad1, +0x19a0, 0x1ad1, 0x19a0, 0x186d, 0x1619, 0x186d, 0x1619, 0x1966, 0x18db, 0x1966, 0x18db, +0x1a73, 0x18c8, 0x1a73, 0x18c8, 0x1b07, 0x18de, 0x1b07, 0x18de, 0x1b5c, 0x1ad0, 0x1b5c, +0x1ad0, 0x1b5c, 0x1ad0, 0x1a9d, 0x18e2, 0x1a9d, 0x18e2, 0x187c, 0x1652, 0x187c, 0x1652, +0x1920, 0x18ee, 0x1920, 0x18ee, 0x1751, 0x14ee, 0x1751, 0x14ee, 0x16d0, 0x15a4, 0x16d0, +0x15a4, 0x1581, 0x149b, 0x1581, 0x149b, 0x1581, 0x149b, 0x14d6, 0x12a9, 0x14d6, 0x12a9, +0x17be, 0x172e, 0x17be, 0x172e, 0x17de, 0x1618, 0x17de, 0x1618, 0x13d2, 0x128f, 0x13d2, +0x128f, 0x129c, 0x1182, 0x129c, 0x1182, 0x114a, 0xfe6, 0x114a, 0xfe6, 0x114a, 0xfe6, +0xf39, 0xdbe, 0xf39, 0xdbe, 0xe69, 0xd76, 0xe69, 0xd76, 0xe37, 0xcd4, 0xe37, +0xcd4, 0xac3, 0x920, 0xac3, 0x920, 0xc51, 0xb90, 0xc51, 0xb90, 0xc51, 0xb90, +0xdae, 0xbe8, 0xdae, 0xbe8, 0xd48, 0xc22, 0xd48, 0xc22, 0xe67, 0xcd6, 0xe67, +0xcd6, 0xc39, 0xb14, 0xc39, 0xb14, 0xdc7, 0xc22, 0xdc7, 0xc22, 0x1013, 0xe5e, +0x1013, 0xe5e, 0x1013, 0xe5e, 0xd83, 0xc98, 0xd83, 0xc98, 0xc8a, 0xa42, 0xc8a, +0xa42, 0xde6, 0xcac, 0xde6, 0xcac, 0xc4c, 0xa88, 0xc4c, 0xa88, 0x112c, 0xf64, +0x112c, 0xf64, 0xf8e, 0xdd3, 0xf8e, 0xdd3, 0xf8e, 0xdd3, 0x104f, 0xe47, 0x104f, +0xe47, 0x107c, 0xf00, 0x107c, 0xf00, 0xf67, 0xced, 0xf67, 0xced, 0x11cd, 0x1028, +0x11cd, 0x1028, 0xf65, 0xd49, 0xf65, 0xd49, 0xf65, 0xd49, 0xf3a, 0xce2, 0xf3a, +0xce2, 0xf0c, 0xd44, 0xf0c, 0xd44, 0x10c1, 0xe16, 0x10c1, 0xe16, 0xea1, 0xcbf, +0xea1, 0xcbf, 0xfb8, 0xd51, 0xfb8, 0xd51, 0xf9e, 0xcf6, 0xf9e, 0xcf6, 0xf9e, +0xcf6, 0xcc9, 0xae9, 0xcc9, 0xae9, 0xe03, 0xb49, 0xe03, 0xb49, 0xced, 0xa5f, +0xced, 0xa5f, 0xa7a, 0x84b, 0xa7a, 0x84b, 0x8f9, 0x66b, 0x8f9, 0x66b, 0x6dd, +0x41d, 0x6dd, 0x41d, 0x6dd, 0x41d, 0x8aa, 0x667, 0x8aa, 0x667, 0x6f6, 0x490, +0x6f6, 0x490, 0x480, 0x1a8, 0x480, 0x1a8, 0x42f, 0x1ec, 0x42f, 0x1ec, 0x381, +0x13f, 0x381, 0x13f, 0x381, 0x13f, 0x27e, 0xffb5, 0x27e, 0xffb5, 0x3a3, 0x16d, +0x3a3, 0x16d, 0x35a, 0x151, 0x35a, 0x151, 0xfe46, 0xfb81, 0xfe46, 0xfb81, 0xffb3, +0xfe00, 0xffb3, 0xfe00, 0xffb4, 0xfd6b, 0xffb4, 0xfd6b, 0xffb4, 0xfd6b, 0x6a, 0xfe4b, +0x6a, 0xfe4b, 0xff9b, 0xfe22, 0xff9b, 0xfe22, 0x25, 0xfdd3, 0x25, 0xfdd3, 0xfde1, +0xfca3, 0xfde1, 0xfca3, 0xffce, 0xfe30, 0xffce, 0xfe30, 0xff17, 0xfd95, 0xff17, 0xfd95, +0xff17, 0xfd95, 0xfbb3, 0xfa7e, 0xfbb3, 0xfa7e, 0xf9bf, 0xf8e2, 0xf9bf, 0xf8e2, 0xf269, +0xf144, 0xf269, 0xf144, 0xf4ee, 0xf3fe, 0xf4ee, 0xf3fe, 0xf412, 0xf41c, 0xf412, 0xf41c, +0xf412, 0xf41c, 0xf4c9, 0xf3c7, 0xf4c9, 0xf3c7, 0xf462, 0xf441, 0xf462, 0xf441, 0xf531, +0xf583, 0xf531, 0xf583, 0xf6b9, 0xf69c, 0xf6b9, 0xf69c, 0xf4aa, 0xf4ad, 0xf4aa, 0xf4ad, +0xf482, 0xf5cd, 0xf482, 0xf5cd, 0xf482, 0xf5cd, 0xf285, 0xf2a2, 0xf285, 0xf2a2, 0xf1da, +0xf2a1, 0xf1da, 0xf2a1, 0xf2dc, 0xf4d7, 0xf2dc, 0xf4d7, 0xf409, 0xf40c, 0xf409, 0xf40c, +0xf3af, 0xf631, 0xf3af, 0xf631, 0xf3af, 0xf631, 0xf52d, 0xf65e, 0xf52d, 0xf65e, 0xf280, +0xf3f7, 0xf280, 0xf3f7, 0xf3ac, 0xf681, 0xf3ac, 0xf681, 0xf5ca, 0xf70a, 0xf5ca, 0xf70a, +0xee7a, 0xf124, 0xee7a, 0xf124, 0xf218, 0xf4a3, 0xf218, 0xf4a3, 0xf218, 0xf4a3, 0xeff2, +0xf254, 0xeff2, 0xf254, 0xefec, 0xf261, 0xefec, 0xf261, 0xf1d9, 0xf53b, 0xf1d9, 0xf53b, +0xedf7, 0xf07d, 0xedf7, 0xf07d, 0xf2e5, 0xf5b6, 0xf2e5, 0xf5b6, 0xebaf, 0xef74, 0xebaf, +0xef74, 0xebaf, 0xef74, 0xf0e4, 0xf385, 0xf0e4, 0xf385, 0xf1c3, 0xf529, 0xf1c3, 0xf529, +0xecc4, 0xf043, 0xecc4, 0xf043, 0xeb58, 0xeea3, 0xeb58, 0xeea3, 0xea11, 0xed53, 0xea11, +0xed53, 0xea11, 0xed53, 0xea5e, 0xee19, 0xea5e, 0xee19, 0xe5f9, 0xe941, 0xe5f9, 0xe941, +0xeaf1, 0xee76, 0xeaf1, 0xee76, 0xe905, 0xec9c, 0xe905, 0xec9c, 0xe701, 0xea3b, 0xe701, +0xea3b, 0xe638, 0xea06, 0xe638, 0xea06, 0xe638, 0xea06, 0xe757, 0xea81, 0xe757, 0xea81, +0xe318, 0xe67c, 0xe318, 0xe67c, 0xe17d, 0xe513, 0xe17d, 0xe513, 0xdfca, 0xe2f0, 0xdfca, +0xe2f0, 0xdff3, 0xe303, 0xdff3, 0xe303, 0xe39a, 0xe73a, 0xe39a, 0xe73a, 0xe39a, 0xe73a, +0xe2b2, 0xe576, 0xe2b2, 0xe576, 0xe394, 0xe6a5, 0xe394, 0xe6a5, 0xddbb, 0xe0ef, 0xddbb, +0xe0ef, 0xe1e1, 0xe470, 0xe1e1, 0xe470, 0xe1bb, 0xe4ea, 0xe1bb, 0xe4ea, 0xe1bb, 0xe4ea, +0xdf20, 0xe159, 0xdf20, 0xe159, 0xe020, 0xe33b, 0xe020, 0xe33b, 0xdfff, 0xe265, 0xdfff, +0xe265, 0xe338, 0xe54b, 0xe338, 0xe54b, 0xe3cf, 0xe6d2, 0xe3cf, 0xe6d2, 0xe754, 0xe92a, +0xe754, 0xe92a, 0xe754, 0xe92a, 0xe5ee, 0xe81a, 0xe5ee, 0xe81a, 0xe69e, 0xe8f6, 0xe69e, +0xe8f6, 0xe824, 0xea16, 0xe824, 0xea16, 0xe52f, 0xe6f0, 0xe52f, 0xe6f0, 0xe976, 0xeb8a, +0xe976, 0xeb8a, 0xe90a, 0xeadd, 0xe90a, 0xeadd, 0xe90a, 0xeadd, 0xe915, 0xea8f, 0xe915, +0xea8f, 0xeab2, 0xec99, 0xeab2, 0xec99, 0xec15, 0xedac, 0xec15, 0xedac, 0xee5d, 0xefa7, +0xee5d, 0xefa7, 0xef42, 0xf131, 0xef42, 0xf131, 0xef42, 0xf131, 0xed8d, 0xee9e, 0xed8d, +0xee9e, 0xec4b, 0xedb3, 0xec4b, 0xedb3, 0xee6c, 0xf070, 0xee6c, 0xf070, 0xed65, 0xeda3, +0xed65, 0xeda3, 0xedb5, 0xefe4, 0xedb5, 0xefe4, 0xecbc, 0xee1d, 0xecbc, 0xee1d, 0xecbc, +0xee1d, 0xf016, 0xf041, 0xf016, 0xf041, 0xee8d, 0xf123, 0xee8d, 0xf123, 0xef5a, 0xf008, +0xef5a, 0xf008, 0xed48, 0xedf1, 0xed48, 0xedf1, 0xeb10, 0xed76, 0xeb10, 0xed76, 0xebef, +0xec4a, 0xebef, 0xec4a, 0xebef, 0xec4a, 0xe7ce, 0xe906, 0xe7ce, 0xe906, 0xece6, 0xeee5, +0xece6, 0xeee5, 0xee83, 0xeea0, 0xee83, 0xeea0, 0xee43, 0xf060, 0xee43, 0xf060, 0xf0ad, +0xf192, 0xf0ad, 0xf192, 0xf0ad, 0xf192, 0xef0a, 0xefcd, 0xef0a, 0xefcd, 0xeea8, 0xf0e1, +0xeea8, 0xf0e1, 0xf201, 0xf217, 0xf201, 0xf217, 0xed9e, 0xef7b, 0xed9e, 0xef7b, 0xf11c, +0xf23c, 0xf11c, 0xf23c, 0xf0f4, 0xf1c0, 0xf0f4, 0xf1c0, 0xf0f4, 0xf1c0, 0xef3a, 0xf0e0, +0xef3a, 0xf0e0, 0xf2ac, 0xf344, 0xf2ac, 0xf344, 0xf0f1, 0xf294, 0xf0f1, 0xf294, 0xf1ac, +0xf257, 0xf1ac, 0xf257, 0xf1bc, 0xf2b7, 0xf1bc, 0xf2b7, 0xf463, 0xf5eb, 0xf463, 0xf5eb, +0xf463, 0xf5eb, 0xf4a9, 0xf4eb, 0xf4a9, 0xf4eb, 0xf718, 0xf843, 0xf718, 0xf843, 0xf726, +0xf83d, 0xf726, 0xf83d, 0xf766, 0xf7a6, 0xf766, 0xf7a6, 0xf7a5, 0xf89b, 0xf7a5, 0xf89b, +0xf7a5, 0xf89b, 0xf701, 0xf7ad, 0xf701, 0xf7ad, 0xf8cf, 0xf91c, 0xf8cf, 0xf91c, 0xfa2a, +0xfab3, 0xfa2a, 0xfab3, 0xfc7d, 0xfccb, 0xfc7d, 0xfccb, 0x32, 0x6b, 0x32, 0x6b, +0xd9, 0xf2, 0xd9, 0xf2, 0xd9, 0xf2, 0x65, 0x4e, 0x65, 0x4e, 0x2ae, +0x2aa, 0x2ae, 0x2aa, 0x2d7, 0x28b, 0x2d7, 0x28b, 0x5c1, 0x53b, 0x5c1, 0x53b, +0x8dc, 0x884, 0x8dc, 0x884, 0xa56, 0x98f, 0xa56, 0x98f, 0xa56, 0x98f, 0xc61, +0xba2, 0xc61, 0xba2, 0xc0d, 0xafc, 0xc0d, 0xafc, 0x115f, 0x1065, 0x115f, 0x1065, +0x1679, 0x1555, 0x1679, 0x1555, 0x14f2, 0x1321, 0x14f2, 0x1321, 0x14f2, 0x1321, 0x161d, +0x1514, 0x161d, 0x1514, 0x1605, 0x1433, 0x1605, 0x1433, 0x1ae4, 0x18bf, 0x1ae4, 0x18bf, +0x1b4f, 0x19ce, 0x1b4f, 0x19ce, 0x1d66, 0x1b31, 0x1d66, 0x1b31, 0x1f5b, 0x1cd4, 0x1f5b, +0x1cd4, 0x1f5b, 0x1cd4, 0x1d64, 0x1b74, 0x1d64, 0x1b74, 0x2382, 0x20e3, 0x2382, 0x20e3, +0x236c, 0x20b5, 0x236c, 0x20b5, 0x22a0, 0x2031, 0x22a0, 0x2031, 0x2551, 0x224e, 0x2551, +0x224e, 0x24ff, 0x225b, 0x24ff, 0x225b, 0x24ff, 0x225b, 0x25dd, 0x22ae, 0x25dd, 0x22ae, +0x2618, 0x233f, 0x2618, 0x233f, 0x220b, 0x1eec, 0x220b, 0x1eec, 0x2277, 0x1f55, 0x2277, +0x1f55, 0x231a, 0x1fed, 0x231a, 0x1fed, 0x231a, 0x1fed, 0x22a7, 0x1f6c, 0x22a7, 0x1f6c, +0x2112, 0x1e30, 0x2112, 0x1e30, 0x2273, 0x1ea5, 0x2273, 0x1ea5, 0x1c66, 0x19d5, 0x1c66, +0x19d5, 0x19ec, 0x167c, 0x19ec, 0x167c, 0x1c5d, 0x1922, 0x1c5d, 0x1922, 0x1c5d, 0x1922, +0x18ce, 0x15fd, 0x18ce, 0x15fd, 0x1a27, 0x16f8, 0x1a27, 0x16f8, 0x164f, 0x138b, 0x164f, +0x138b, 0x154f, 0x1222, 0x154f, 0x1222, 0x173d, 0x14fc, 0x173d, 0x14fc, 0x15d6, 0x12d5, +0x15d6, 0x12d5, 0x15d6, 0x12d5, 0x11e5, 0xf81, 0x11e5, 0xf81, 0x1184, 0xf2e, 0x1184, +0xf2e, 0xd1a, 0xaf9, 0xd1a, 0xaf9, 0xd4c, 0xb05, 0xd4c, 0xb05, 0xe03, 0xc2b, +0xe03, 0xc2b, 0xe03, 0xc2b, 0x9af, 0x85f, 0x9af, 0x85f, 0xb40, 0x8e2, 0xb40, +0x8e2, 0xa5b, 0x9ed, 0xa5b, 0x9ed, 0x86f, 0x69d, 0x86f, 0x69d, 0x6dc, 0x61d, +0x6dc, 0x61d, 0x422, 0x3b0, 0x422, 0x3b0, 0x422, 0x3b0, 0x326, 0x1d7, 0x326, +0x1d7, 0x3be, 0x45c, 0x3be, 0x45c, 0xfe78, 0xfda8, 0xfe78, 0xfda8, 0xfff9, 0x2a, +0xfff9, 0x2a, 0xffa7, 0x57, 0xffa7, 0x57, 0xffa7, 0x57, 0xfec8, 0xfee5, 0xfec8, +0xfee5, 0xff, 0x1ba, 0xff, 0x1ba, 0xfe6f, 0xffa3, 0xfe6f, 0xffa3, 0xff1f, 0x8, +0xff1f, 0x8, 0xfc18, 0xfd4a, 0xfc18, 0xfd4a, 0xf941, 0xfb06, 0xf941, 0xfb06, 0xf941, +0xfb06, 0xf736, 0xf8b7, 0xf736, 0xf8b7, 0xf628, 0xf801, 0xf628, 0xf801, 0xf8f6, 0xfae9, +0xf8f6, 0xfae9, 0xf357, 0xf5c1, 0xf357, 0xf5c1, 0xf216, 0xf3fd, 0xf216, 0xf3fd, 0xf185, +0xf43f, 0xf185, 0xf43f, 0xf185, 0xf43f, 0xf0c7, 0xf336, 0xf0c7, 0xf336, 0xf394, 0xf61b, +0xf394, 0xf61b, 0xedb3, 0xf0c8, 0xedb3, 0xf0c8, 0xecc8, 0xeeff, 0xecc8, 0xeeff, 0xecac, +0xf03b, 0xecac, 0xf03b, 0xecac, 0xf03b, 0xef2c, 0xf1a6, 0xef2c, 0xf1a6, 0xedb3, 0xf09a, +0xedb3, 0xf09a, 0xed55, 0xf0c6, 0xed55, 0xf0c6, 0xee76, 0xf0f6, 0xee76, 0xf0f6, 0xed1a, +0xf052, 0xed1a, 0xf052, 0xf178, 0xf469, 0xf178, 0xf469, 0xf178, 0xf469, 0xee31, 0xf127, +0xee31, 0xf127, 0xea1b, 0xece2, 0xea1b, 0xece2, 0xec30, 0xef15, 0xec30, 0xef15, 0xeb90, +0xee5d, 0xeb90, 0xee5d, 0xebc7, 0xee61, 0xebc7, 0xee61, 0xeb0c, 0xed90, 0xeb0c, 0xed90, +0xeb0c, 0xed90, 0xe98f, 0xec1b, 0xe98f, 0xec1b, 0xed30, 0xefa0, 0xed30, 0xefa0, 0xec13, +0xedf3, 0xec13, 0xedf3, 0xefb3, 0xf220, 0xefb3, 0xf220, 0xee82, 0xf05c, 0xee82, 0xf05c, +0xee82, 0xf05c, 0xee3b, 0xefca, 0xee3b, 0xefca, 0xf36b, 0xf552, 0xf36b, 0xf552, 0xf471, +0xf5c1, 0xf471, 0xf5c1, 0xf829, 0xf979, 0xf829, 0xf979, 0xfa7c, 0xfb8b, 0xfa7c, 0xfb8b, +0xfb4f, 0xfc56, 0xfb4f, 0xfc56, 0xfb4f, 0xfc56, 0xff25, 0xffdd, 0xff25, 0xffdd, 0xeb, +0x169, 0xeb, 0x169, 0x1dc, 0x263, 0x1dc, 0x263, 0x4e1, 0x4f2, 0x4e1, 0x4f2, +0x14a, 0x18b, 0x14a, 0x18b, 0x2c4, 0x246, 0x2c4, 0x246, 0x2c4, 0x246, 0x50a, +0x503, 0x50a, 0x503, 0x810, 0x7a6, 0x810, 0x7a6, 0x724, 0x5f0, 0x724, 0x5f0, +0x670, 0x654, 0x670, 0x654, 0xb19, 0x9b5, 0xb19, 0x9b5, 0xb19, 0x9b5, 0xdd6, +0xca3, 0xdd6, 0xca3, 0x11e3, 0x10f5, 0x11e3, 0x10f5, 0x10bf, 0xf13, 0x10bf, 0xf13, +0xe39, 0xcc5, 0xe39, 0xcc5, 0x1174, 0xfc9, 0x1174, 0xfc9, 0x1379, 0x11bf, 0x1379, +0x11bf, 0x1379, 0x11bf, 0x1394, 0x11a8, 0x1394, 0x11a8, 0x16d1, 0x14e0, 0x16d1, 0x14e0, +0x1302, 0x10de, 0x1302, 0x10de, 0x122a, 0x103a, 0x122a, 0x103a, 0x13fb, 0x118e, 0x13fb, +0x118e, 0x146e, 0x1230, 0x146e, 0x1230, 0x146e, 0x1230, 0x1687, 0x146b, 0x1687, 0x146b, +0x1444, 0x119f, 0x1444, 0x119f, 0x13fa, 0x11b1, 0x13fa, 0x11b1, 0x16dc, 0x1470, 0x16dc, +0x1470, 0x1723, 0x14b5, 0x1723, 0x14b5, 0x1723, 0x14b5, 0x1702, 0x145e, 0x1702, 0x145e, +0x13ca, 0x1179, 0x13ca, 0x1179, 0x147c, 0x1202, 0x147c, 0x1202, 0x1712, 0x1475, 0x1712, +0x1475, 0x1501, 0x1296, 0x1501, 0x1296, 0x14b1, 0x125b, 0x14b1, 0x125b, 0x14b1, 0x125b, +0x1359, 0x10c4, 0x1359, 0x10c4, 0x157b, 0x1302, 0x157b, 0x1302, 0x1780, 0x1566, 0x1780, +0x1566, 0x18b1, 0x15f9, 0x18b1, 0x15f9, 0x1685, 0x1487, 0x1685, 0x1487, 0x114b, 0xeb9, +0x114b, 0xeb9, 0x114b, 0xeb9, 0x1188, 0xf7f, 0x1188, 0xf7f, 0x1302, 0x10d8, 0x1302, +0x10d8, 0x125a, 0xfba, 0x125a, 0xfba, 0x113a, 0xfdd, 0x113a, 0xfdd, 0xe91, 0xbd1, +0xe91, 0xbd1, 0xe91, 0xbd1, 0x10a9, 0xeda, 0x10a9, 0xeda, 0x1051, 0xe8a, 0x1051, +0xe8a, 0x110b, 0xeac, 0x110b, 0xeac, 0xf9d, 0xe0f, 0xf9d, 0xe0f, 0xf4b, 0xd2f, +0xf4b, 0xd2f, 0x13bb, 0x1202, 0x13bb, 0x1202, 0x13bb, 0x1202, 0x1072, 0xeb7, 0x1072, +0xeb7, 0x1541, 0x133f, 0x1541, 0x133f, 0x1073, 0xf01, 0x1073, 0xf01, 0x10f7, 0xf3d, +0x10f7, 0xf3d, 0x15e8, 0x13f7, 0x15e8, 0x13f7, 0x122a, 0x10f8, 0x122a, 0x10f8, 0x122a, +0x10f8, 0x14e6, 0x130a, 0x14e6, 0x130a, 0x1274, 0x10e9, 0x1274, 0x10e9, 0xfe9, 0xe81, +0xfe9, 0xe81, 0x124d, 0x10a9, 0x124d, 0x10a9, 0x140c, 0x12ca, 0x140c, 0x12ca, 0x140c, +0x12ca, 0x1567, 0x13a3, 0x1567, 0x13a3, 0x121d, 0x1108, 0x121d, 0x1108, 0x1056, 0xedd, +0x1056, 0xedd, 0x1612, 0x147e, 0x1612, 0x147e, 0x12ac, 0x11b2, 0x12ac, 0x11b2, 0x1486, +0x1312, 0x1486, 0x1312, 0x1486, 0x1312, 0x14a8, 0x134c, 0x14a8, 0x134c, 0x1052, 0xf55, +0x1052, 0xf55, 0x130f, 0x11ab, 0x130f, 0x11ab, 0x1395, 0x128d, 0x1395, 0x128d, 0x1636, +0x1517, 0x1636, 0x1517, 0x1399, 0x1255, 0x1399, 0x1255, 0x1399, 0x1255, 0x1025, 0xf98, +0x1025, 0xf98, 0xef7, 0xd5e, 0xef7, 0xd5e, 0xd95, 0xd0e, 0xd95, 0xd0e, 0x1042, +0xf6c, 0x1042, 0xf6c, 0xc39, 0xaf3, 0xc39, 0xaf3, 0xc39, 0xaf3, 0xaca, 0xa8f, +0xaca, 0xa8f, 0xcfb, 0xbd8, 0xcfb, 0xbd8, 0xa99, 0xa37, 0xa99, 0xa37, 0xb9b, +0xad8, 0xb9b, 0xad8, 0x83d, 0x7bd, 0x83d, 0x7bd, 0x5c1, 0x57c, 0x5c1, 0x57c, +0x5c1, 0x57c, 0x5ec, 0x53b, 0x5ec, 0x53b, 0x419, 0x403, 0x419, 0x403, 0x3f5, +0x3b3, 0x3f5, 0x3b3, 0x305, 0x2cd, 0x305, 0x2cd, 0xffec, 0xffcd, 0xffec, 0xffcd, +0x14a, 0x179, 0x14a, 0x179, 0x14a, 0x179, 0x27f, 0x270, 0x27f, 0x270, 0x1a9, +0x1d6, 0x1a9, 0x1d6, 0xfdea, 0xfe3b, 0xfdea, 0xfe3b, 0xfc7d, 0xfcda, 0xfc7d, 0xfcda, +0xfd34, 0xfd86, 0xfd34, 0xfd86, 0xfd34, 0xfd86, 0xfb0f, 0xfb95, 0xfb0f, 0xfb95, 0xfc35, +0xfcfd, 0xfc35, 0xfcfd, 0xf69e, 0xf700, 0xf69e, 0xf700, 0xf386, 0xf47b, 0xf386, 0xf47b, +0xf420, 0xf4ec, 0xf420, 0xf4ec, 0xf737, 0xf81c, 0xf737, 0xf81c, 0xf737, 0xf81c, 0xf63f, +0xf73e, 0xf63f, 0xf73e, 0xf295, 0xf3a5, 0xf295, 0xf3a5, 0xf20f, 0xf342, 0xf20f, 0xf342, +0xeffb, 0xf11f, 0xeffb, 0xf11f, 0xf1cd, 0xf315, 0xf1cd, 0xf315, 0xf1cd, 0xf315, 0xf0d6, +0xf22d, 0xf0d6, 0xf22d, 0xeccc, 0xee59, 0xeccc, 0xee59, 0xec63, 0xed7b, 0xec63, 0xed7b, +0xeee1, 0xf0c0, 0xeee1, 0xf0c0, 0xf06a, 0xf1e7, 0xf06a, 0xf1e7, 0xf2b1, 0xf3fa, 0xf2b1, +0xf3fa, 0xf2b1, 0xf3fa, 0xedc4, 0xefde, 0xedc4, 0xefde, 0xebaf, 0xed0c, 0xebaf, 0xed0c, +0xede8, 0xefaf, 0xede8, 0xefaf, 0xed9b, 0xef60, 0xed9b, 0xef60, 0xed7b, 0xef35, 0xed7b, +0xef35, 0xe851, 0xea1e, 0xe851, 0xea1e, 0xe851, 0xea1e, 0xe787, 0xe936, 0xe787, 0xe936, +0xe632, 0xe822, 0xe632, 0xe822, 0xe2af, 0xe45f, 0xe2af, 0xe45f, 0xe4a0, 0xe67a, 0xe4a0, +0xe67a, 0xe1ea, 0xe3a2, 0xe1ea, 0xe3a2, 0xe1ea, 0xe3a2, 0xdfa4, 0xe187, 0xdfa4, 0xe187, +0xdf4c, 0xe10f, 0xdf4c, 0xe10f, 0xddc8, 0xdf5a, 0xddc8, 0xdf5a, 0xddf0, 0xdffb, 0xddf0, +0xdffb, 0xddaa, 0xdf2f, 0xddaa, 0xdf2f, 0xdf08, 0xe0b1, 0xdf08, 0xe0b1, 0xdf08, 0xe0b1, +0xdd03, 0xded6, 0xdd03, 0xded6, 0xdd03, 0xde8b, 0xdd03, 0xde8b, 0xdde7, 0xdf81, 0xdde7, +0xdf81, 0xdbc1, 0xdd4e, 0xdbc1, 0xdd4e, 0xdba6, 0xdd47, 0xdba6, 0xdd47, 0xdc49, 0xdda3, +0xdc49, 0xdda3, 0xdc49, 0xdda3, 0xdbba, 0xdd38, 0xdbba, 0xdd38, 0xdcb7, 0xde1f, 0xdcb7, +0xde1f, 0xdc98, 0xde00, 0xdc98, 0xde00, 0xdb23, 0xdc51, 0xdb23, 0xdc51, 0xd937, 0xda86, +0xd937, 0xda86, 0xd937, 0xda86, 0xda48, 0xdbb4, 0xda48, 0xdbb4, 0xdddd, 0xde9f, 0xdddd, +0xde9f, 0xdbc6, 0xdd48, 0xdbc6, 0xdd48, 0xdc66, 0xdd52, 0xdc66, 0xdd52, 0xded9, 0xdfcd, +0xded9, 0xdfcd, 0xe18e, 0xe2bc, 0xe18e, 0xe2bc, 0xe18e, 0xe2bc, 0xe29d, 0xe353, 0xe29d, +0xe353, 0xe68a, 0xe7b3, 0xe68a, 0xe7b3, 0xea03, 0xeaa1, 0xea03, 0xeaa1, 0xe8d0, 0xe9c1, +0xe8d0, 0xe9c1, 0xeb4c, 0xec1c, 0xeb4c, 0xec1c, 0xeeb6, 0xef5f, 0xeeb6, 0xef5f, 0xeeb6, +0xef5f, 0xee67, 0xef22, 0xee67, 0xef22, 0xefc8, 0xf07c, 0xefc8, 0xf07c, 0xf3c9, 0xf47c, +0xf3c9, 0xf47c, 0xf24c, 0xf2bd, 0xf24c, 0xf2bd, 0xf360, 0xf421, 0xf360, 0xf421, 0xf360, +0xf421, 0xf39a, 0xf431, 0xf39a, 0xf431, 0xf44c, 0xf4af, 0xf44c, 0xf4af, 0xf72b, 0xf7c1, +0xf72b, 0xf7c1, 0xf67b, 0xf73d, 0xf67b, 0xf73d, 0xf83a, 0xf849, 0xf83a, 0xf849, 0xfaf8, +0xfbce, 0xfaf8, 0xfbce, 0xfaf8, 0xfbce, 0xfa9c, 0xfb12, 0xfa9c, 0xfb12, 0xfa36, 0xfa62, +0xfa36, 0xfa62, 0xfab7, 0xfbab, 0xfab7, 0xfbab, 0xfc15, 0xfc0e, 0xfc15, 0xfc0e, 0xfc57, +0xfd37, 0xfc57, 0xfd37, 0xfbe4, 0xfc2e, 0xfbe4, 0xfc2e, 0xfbe4, 0xfc2e, 0xfd2e, 0xfd8c, +0xfd2e, 0xfd8c, 0xfc26, 0xfcf7, 0xfc26, 0xfcf7, 0xfb0e, 0xfb32, 0xfb0e, 0xfb32, 0xf9ea, +0xfa9c, 0xf9ea, 0xfa9c, 0xf944, 0xf9b5, 0xf944, 0xf9b5, 0xf944, 0xf9b5, 0xf87d, 0xf917, +0xf87d, 0xf917, 0xf709, 0xf765, 0xf709, 0xf765, 0xf975, 0xfa28, 0xf975, 0xfa28, 0xfa17, +0xfa9b, 0xfa17, 0xfa9b, 0xf970, 0xf9e8, 0xf970, 0xf9e8, 0xfbc9, 0xfc73, 0xfbc9, 0xfc73, +0xfbc9, 0xfc73, 0xf8ab, 0xf92c, 0xf8ab, 0xf92c, 0xf94d, 0xfa03, 0xf94d, 0xfa03, 0xfa45, +0xfa99, 0xfa45, 0xfa99, 0xf929, 0xfa0d, 0xf929, 0xfa0d, 0xfb22, 0xfb93, 0xfb22, 0xfb93, +0xf6f4, 0xf77b, 0xf6f4, 0xf77b, 0xf6f4, 0xf77b, 0xf7cc, 0xf890, 0xf7cc, 0xf890, 0xf9af, +0xfa28, 0xf9af, 0xfa28, 0xf965, 0xfa03, 0xf965, 0xfa03, 0xf9f3, 0xfa78, 0xf9f3, 0xfa78, +0xf90d, 0xf9c0, 0xf90d, 0xf9c0, 0xf90d, 0xf9c0, 0xf9eb, 0xfa47, 0xf9eb, 0xfa47, 0xf90a, +0xf9b1, 0xf90a, 0xf9b1, 0xf898, 0xf90e, 0xf898, 0xf90e, 0xf8c3, 0xf933, 0xf8c3, 0xf933, +0xf909, 0xf995, 0xf909, 0xf995, 0xfb00, 0xfb3a, 0xfb00, 0xfb3a, 0xfb00, 0xfb3a, 0xf87a, +0xf90a, 0xf87a, 0xf90a, 0xfb56, 0xfb9d, 0xfb56, 0xfb9d, 0xfc97, 0xfcbd, 0xfc97, 0xfcbd, +0xfabf, 0xfb35, 0xfabf, 0xfb35, 0xffcd, 0xffee, 0xffcd, 0xffee, 0xfb20, 0xfb17, 0xfb20, +0xfb17, 0xfb20, 0xfb17, 0xfb57, 0xfbb6, 0xfb57, 0xfbb6, 0xfed9, 0xfebc, 0xfed9, 0xfebc, +0xfdd6, 0xfdc2, 0xfdd6, 0xfdc2, 0xfe75, 0xfe8a, 0xfe75, 0xfe8a, 0xfdaa, 0xfd66, 0xfdaa, +0xfd66, 0xfdaa, 0xfd66, 0x13a, 0x11a, 0x13a, 0x11a, 0x41a, 0x3c3, 0x41a, 0x3c3, +0x68e, 0x653, 0x68e, 0x653, 0x8cd, 0x867, 0x8cd, 0x867, 0x95d, 0x8d8, 0x95d, +0x8d8, 0xad9, 0xa7c, 0xad9, 0xa7c, 0xad9, 0xa7c, 0xbc1, 0xb23, 0xbc1, 0xb23, +0xe61, 0xdc5, 0xe61, 0xdc5, 0x1033, 0xf98, 0x1033, 0xf98, 0x1006, 0xf4f, 0x1006, +0xf4f, 0x1151, 0x1099, 0x1151, 0x1099, 0x1049, 0xf7e, 0x1049, 0xf7e, 0x1049, 0xf7e, +0x10ac, 0xfd7, 0x10ac, 0xfd7, 0x1415, 0x135a, 0x1415, 0x135a, 0x1261, 0x1166, 0x1261, +0x1166, 0x1372, 0x1290, 0x1372, 0x1290, 0x14ab, 0x13f6, 0x14ab, 0x13f6, 0x14ab, 0x13f6, +0xfbe, 0xea0, 0xfbe, 0xea0, 0x1419, 0x1348, 0x1419, 0x1348, 0x13c4, 0x1303, 0x13c4, +0x1303, 0x112a, 0x1012, 0x112a, 0x1012, 0x141b, 0x1369, 0x141b, 0x1369, 0x1237, 0x1156, +0x1237, 0x1156, 0x1237, 0x1156, 0x1267, 0x119d, 0x1267, 0x119d, 0x123e, 0x1189, 0x123e, +0x1189, 0x130b, 0x1231, 0x130b, 0x1231, 0x1229, 0x11ca, 0x1229, 0x11ca, 0x1340, 0x1261, +0x1340, 0x1261, 0x12b8, 0x124d, 0x12b8, 0x124d, 0x12b8, 0x124d, 0x108f, 0x1046, 0x108f, +0x1046, 0xfaa, 0xef2, 0xfaa, 0xef2, 0xbb9, 0xbc6, 0xbb9, 0xbc6, 0xc29, 0xbc6, +0xc29, 0xbc6, 0xbbd, 0xb95, 0xbbd, 0xb95, 0xbbd, 0xb95, 0x96a, 0x9a4, 0x96a, +0x9a4, 0xa0d, 0x9d0, 0xa0d, 0x9d0, 0x998, 0x9fd, 0x998, 0x9fd, 0x929, 0x984, +0x929, 0x984, 0xcaf, 0xcc0, 0xcaf, 0xcc0, 0xb82, 0xc58, 0xb82, 0xc58, 0xb82, +0xc58, 0xb89, 0xc12, 0xb89, 0xc12, 0xd30, 0xda5, 0xd30, 0xda5, 0xa29, 0xb5a, +0xa29, 0xb5a, 0xac5, 0xb7f, 0xac5, 0xb7f, 0xa27, 0xb18, 0xa27, 0xb18, 0xa27, +0xb18, 0xa28, 0xb82, 0xa28, 0xb82, 0xb67, 0xc77, 0xb67, 0xc77, 0xa69, 0xbbd, +0xa69, 0xbbd, 0xa7a, 0xbfa, 0xa7a, 0xbfa, 0x8d2, 0xa38, 0x8d2, 0xa38, 0x981, +0xb20, 0x981, 0xb20, 0x981, 0xb20, 0x876, 0xa25, 0x876, 0xa25, 0x68d, 0x82d, +0x68d, 0x82d, 0x718, 0x8fd, 0x718, 0x8fd, 0x4fb, 0x6c8, 0x4fb, 0x6c8, 0x561, +0x734, 0x561, 0x734, 0x521, 0x72a, 0x521, 0x72a, 0x521, 0x72a, 0x346, 0x53b, +0x346, 0x53b, 0x47c, 0x65e, 0x47c, 0x65e, 0x3a2, 0x5c8, 0x3a2, 0x5c8, 0x143, +0x347, 0x143, 0x347, 0x147, 0x32e, 0x147, 0x32e, 0x147, 0x32e, 0xffa9, 0x1de, +0xffa9, 0x1de, 0xfffd, 0x1e8, 0xfffd, 0x1e8, 0xfd10, 0xff17, 0xfd10, 0xff17, 0xfa38, +0xfc35, 0xfa38, 0xfc35, 0xfac9, 0xfcb8, 0xfac9, 0xfcb8, 0xf9ff, 0xfbf4, 0xf9ff, 0xfbf4, +0xf9ff, 0xfbf4, 0xfa43, 0xfc05, 0xfa43, 0xfc05, 0xf90f, 0xfaf8, 0xf90f, 0xfaf8, 0xf891, +0xfa46, 0xf891, 0xfa46, 0xf668, 0xf80d, 0xf668, 0xf80d, 0xf764, 0xf908, 0xf764, 0xf908, +0xf5e1, 0xf76d, 0xf5e1, 0xf76d, 0xf5e1, 0xf76d, 0xf34a, 0xf4ae, 0xf34a, 0xf4ae, 0xf2e8, +0xf448, 0xf2e8, 0xf448, 0xf28c, 0xf3d6, 0xf28c, 0xf3d6, 0xf4c2, 0xf5df, 0xf4c2, 0xf5df, +0xf1e9, 0xf300, 0xf1e9, 0xf300, 0xf1e9, 0xf300, 0xf194, 0xf281, 0xf194, 0xf281, 0xf433, +0xf514, 0xf433, 0xf514, 0xf2da, 0xf38b, 0xf2da, 0xf38b, 0xf433, 0xf4d2, 0xf433, 0xf4d2, +0xf662, 0xf6e3, 0xf662, 0xf6e3, 0xf2e3, 0xf348, 0xf2e3, 0xf348, 0xf2e3, 0xf348, 0xf468, +0xf49b, 0xf468, 0xf49b, 0xf727, 0xf753, 0xf727, 0xf753, 0xf67c, 0xf68f, 0xf67c, 0xf68f, +0xf965, 0xf923, 0xf965, 0xf923, 0xf884, 0xf86a, 0xf884, 0xf86a, 0xf846, 0xf7e4, 0xf846, +0xf7e4, 0xf846, 0xf7e4, 0xfe6d, 0xfde4, 0xfe6d, 0xfde4, 0xfa, 0x6c, 0xfa, 0x6c, +0xfe37, 0xfd83, 0xfe37, 0xfd83, 0xfe97, 0xfdb3, 0xfe97, 0xfdb3, 0x98, 0xffa1, 0x98, +0xffa1, 0x98, 0xffa1, 0xffc0, 0xfec2, 0xffc0, 0xfec2, 0x14f, 0xfffd, 0x14f, 0xfffd, +0xb9, 0xff87, 0xb9, 0xff87, 0xff60, 0xfde8, 0xff60, 0xfde8, 0x348, 0x1be, 0x348, +0x1be, 0x43f, 0x2b3, 0x43f, 0x2b3, 0x43f, 0x2b3, 0x57f, 0x3a4, 0x57f, 0x3a4, +0x6ce, 0x50f, 0x6ce, 0x50f, 0x444, 0x252, 0x444, 0x252, 0x64d, 0x436, 0x64d, +0x436, 0x889, 0x672, 0x889, 0x672, 0x8d5, 0x6a7, 0x8d5, 0x6a7, 0x8d5, 0x6a7, +0xbd5, 0x96f, 0xbd5, 0x96f, 0x9a5, 0x74d, 0x9a5, 0x74d, 0x84c, 0x5de, 0x84c, +0x5de, 0x99a, 0x6f0, 0x99a, 0x6f0, 0x98e, 0x705, 0x98e, 0x705, 0x98e, 0x705, +0xba2, 0x8e6, 0xba2, 0x8e6, 0xbb1, 0x8e9, 0xbb1, 0x8e9, 0xbfa, 0x92b, 0xbfa, +0x92b, 0xd1b, 0xa31, 0xd1b, 0xa31, 0xda3, 0xab7, 0xda3, 0xab7, 0xea3, 0xb9e, +0xea3, 0xb9e, 0xea3, 0xb9e, 0xe56, 0xb4e, 0xe56, 0xb4e, 0xf8c, 0xc77, 0xf8c, +0xc77, 0x10e1, 0xdc6, 0x10e1, 0xdc6, 0x10e6, 0xdb8, 0x10e6, 0xdb8, 0x1206, 0xee0, +0x1206, 0xee0, 0x10ff, 0xdcf, 0x10ff, 0xdcf, 0x10ff, 0xdcf, 0x128b, 0xf4a, 0x128b, +0xf4a, 0x1477, 0x1148, 0x1477, 0x1148, 0x1610, 0x12d4, 0x1610, 0x12d4, 0x1603, 0x12c6, +0x1603, 0x12c6, 0x1260, 0xf26, 0x1260, 0xf26, 0x1260, 0xf26, 0x1257, 0xf25, 0x1257, +0xf25, 0x11e8, 0xeae, 0x11e8, 0xeae, 0x110e, 0xddd, 0x110e, 0xddd, 0x114b, 0xe25, +0x114b, 0xe25, 0x110c, 0xde2, 0x110c, 0xde2, 0xed3, 0xbb6, 0xed3, 0xbb6, 0xed3, +0xbb6, 0x1264, 0xf4c, 0x1264, 0xf4c, 0x16e5, 0x13da, 0x16e5, 0x13da, 0x14ac, 0x11a4, +0x14ac, 0x11a4, 0x15a3, 0x12a8, 0x15a3, 0x12a8, 0x16cd, 0x13e1, 0x16cd, 0x13e1, 0x168f, +0x13a8, 0x168f, 0x13a8, 0x168f, 0x13a8, 0x1870, 0x1597, 0x1870, 0x1597, 0x1915, 0x1649, +0x1915, 0x1649, 0x17ed, 0x152f, 0x17ed, 0x152f, 0x19c9, 0x1711, 0x19c9, 0x1711, 0x1bf7, +0x1954, 0x1bf7, 0x1954, 0x1bf7, 0x1954, 0x1c9c, 0x1a04, 0x1c9c, 0x1a04, 0x1cb2, 0x1a24, +0x1cb2, 0x1a24, 0x1ae8, 0x186a, 0x1ae8, 0x186a, 0x19d6, 0x1766, 0x19d6, 0x1766, 0x1aef, +0x188e, 0x1aef, 0x188e, 0x1cea, 0x1a90, 0x1cea, 0x1a90, 0x1cea, 0x1a90, 0x1ca5, 0x1a63, +0x1ca5, 0x1a63, 0x1bc8, 0x198d, 0x1bc8, 0x198d, 0x1b52, 0x1925, 0x1b52, 0x1925, 0x1de7, +0x1bce, 0x1de7, 0x1bce, 0x219a, 0x1f8b, 0x219a, 0x1f8b, 0x21d7, 0x1fda, 0x21d7, 0x1fda, +0x21d7, 0x1fda, 0x21d4, 0x1fe3, 0x21d4, 0x1fe3, 0x2148, 0x1f6c, 0x2148, 0x1f6c, 0x22de, +0x210f, 0x22de, 0x210f, 0x22cd, 0x2110, 0x22cd, 0x2110, 0x1f46, 0x1d9b, 0x1f46, 0x1d9b, +0x1f46, 0x1d9b, 0x1bf1, 0x1a58, 0x1bf1, 0x1a58, 0x19f8, 0x1874, 0x19f8, 0x1874, 0x1a24, +0x18af, 0x1a24, 0x18af, 0x1810, 0x16b7, 0x1810, 0x16b7, 0x1582, 0x1439, 0x1582, 0x1439, +0x13f0, 0x12bd, 0x13f0, 0x12bd, 0x13f0, 0x12bd, 0x12cd, 0x11b5, 0x12cd, 0x11b5, 0x1209, +0x1105, 0x1209, 0x1105, 0x11da, 0x10ec, 0x11da, 0x10ec, 0xffe, 0xf2d, 0xffe, 0xf2d, +0xc58, 0xb9e, 0xc58, 0xb9e, 0xc20, 0xb7a, 0xc20, 0xb7a, 0xc20, 0xb7a, 0xbb9, +0xb33, 0xbb9, 0xb33, 0x991, 0x91e, 0x991, 0x91e, 0x871, 0x81a, 0x871, 0x81a, +0x64b, 0x60e, 0x64b, 0x60e, 0x53f, 0x518, 0x53f, 0x518, 0x53f, 0x518, 0x606, +0x5fd, 0x606, 0x5fd, 0x33b, 0x347, 0x33b, 0x347, 0xfea9, 0xfed0, 0xfea9, 0xfed0, +0xfc87, 0xfcc7, 0xfc87, 0xfcc7, 0xfbc0, 0xfc1a, 0xfbc0, 0xfc1a, 0xfa85, 0xfaf7, 0xfa85, +0xfaf7, 0xfa85, 0xfaf7, 0xf889, 0xf916, 0xf889, 0xf916, 0xf4da, 0xf581, 0xf4da, 0xf581, +0xf0e8, 0xf1a6, 0xf0e8, 0xf1a6, 0xf146, 0xf223, 0xf146, 0xf223, 0xf11a, 0xf20f, 0xf11a, +0xf20f, 0xf11a, 0xf20f, 0xee2a, 0xef3a, 0xee2a, 0xef3a, 0xee94, 0xefbf, 0xee94, 0xefbf, +0xecf1, 0xee37, 0xecf1, 0xee37, 0xec0f, 0xed6e, 0xec0f, 0xed6e, 0xee72, 0xefec, 0xee72, +0xefec, 0xeb85, 0xed1a, 0xeb85, 0xed1a, 0xeb85, 0xed1a, 0xeae7, 0xec94, 0xeae7, 0xec94, +0xebea, 0xedb0, 0xebea, 0xedb0, 0xe9b6, 0xeb94, 0xe9b6, 0xeb94, 0xe91a, 0xeb0f, 0xe91a, +0xeb0f, 0xe88c, 0xea95, 0xe88c, 0xea95, 0xe7f0, 0xea0e, 0xe7f0, 0xea0e, 0xe7f0, 0xea0e, +0xe5d4, 0xe806, 0xe5d4, 0xe806, 0xe492, 0xe6d4, 0xe492, 0xe6d4, 0xe6bf, 0xe912, 0xe6bf, +0xe912, 0xe54c, 0xe7ad, 0xe54c, 0xe7ad, 0xe30e, 0xe57d, 0xe30e, 0xe57d, 0xe30e, 0xe57d, +0xe23c, 0xe4b6, 0xe23c, 0xe4b6, 0xe0ca, 0xe34f, 0xe0ca, 0xe34f, 0xe02b, 0xe2bb, 0xe02b, +0xe2bb, 0xdc4a, 0xdee4, 0xdc4a, 0xdee4, 0xdb4b, 0xddee, 0xdb4b, 0xddee, 0xdb13, 0xddc0, +0xdb13, 0xddc0, 0xdb13, 0xddc0, 0xda94, 0xdd4a, 0xda94, 0xdd4a, 0xddc5, 0xe085, 0xddc5, +0xe085, 0xdbd1, 0xde9d, 0xdbd1, 0xde9d, 0xdac1, 0xdd98, 0xdac1, 0xdd98, 0xdb12, 0xddf6, +0xdb12, 0xddf6, 0xdb76, 0xde68, 0xdb76, 0xde68, 0xdb76, 0xde68, 0xdb39, 0xde3b, 0xdb39, +0xde3b, 0xd8c4, 0xdbd7, 0xd8c4, 0xdbd7, 0xd907, 0xdc2b, 0xd907, 0xdc2b, 0xd929, 0xdc60, +0xd929, 0xdc60, 0xdc4e, 0xdf99, 0xdc4e, 0xdf99, 0xdc4e, 0xdf99, 0xdddc, 0xe13a, 0xdddc, +0xe13a, 0xdc09, 0xdf7b, 0xdc09, 0xdf7b, 0xdb7e, 0xdf03, 0xdb7e, 0xdf03, 0xdb02, 0xde9a, +0xdb02, 0xde9a, 0xdc18, 0xdfc0, 0xdc18, 0xdfc0, 0xdc3c, 0xdff4, 0xdc3c, 0xdff4, 0xdc3c, +0xdff4, 0xdcff, 0xe0c2, 0xdcff, 0xe0c2, 0xdd75, 0xe143, 0xdd75, 0xe143, 0xdc95, 0xe06a, +0xdc95, 0xe06a, 0xe0de, 0xe4b5, 0xe0de, 0xe4b5, 0xe2c8, 0xe69f, 0xe2c8, 0xe69f, 0xe1a8, +0xe57c, 0xe1a8, 0xe57c, 0xe1a8, 0xe57c, 0xe565, 0xe931, 0xe565, 0xe931, 0xe6f0, 0xeab0, +0xe6f0, 0xeab0, 0xe7e3, 0xeb94, 0xe7e3, 0xeb94, 0xe880, 0xec1f, 0xe880, 0xec1f, 0xe89b, +0xec24, 0xe89b, 0xec24, 0xe89b, 0xec24, 0xea77, 0xede8, 0xea77, 0xede8, 0xecd7, 0xf02e, +0xecd7, 0xf02e, 0xf0d2, 0xf40d, 0xf0d2, 0xf40d, 0xf138, 0xf454, 0xf138, 0xf454, 0xf33b, +0xf63a, 0xf33b, 0xf63a, 0xf4e6, 0xf7c6, 0xf4e6, 0xf7c6, 0xf4e6, 0xf7c6, 0xf3d5, 0xf697, +0xf3d5, 0xf697, 0xf5ea, 0xf88f, 0xf5ea, 0xf88f, 0xf50a, 0xf792, 0xf50a, 0xf792, 0xf5b4, +0xf822, 0xf5b4, 0xf822, 0xf844, 0xfa98, 0xf844, 0xfa98, 0xf6cd, 0xf909, 0xf6cd, 0xf909, +0xf6cd, 0xf909, 0xf884, 0xfaaa, 0xf884, 0xfaaa, 0xf90f, 0xfb21, 0xf90f, 0xfb21, 0xf7ac, +0xf9ab, 0xf7ac, 0xf9ab, 0xf9e8, 0xfbd5, 0xf9e8, 0xfbd5, 0xf9b3, 0xfb8f, 0xf9b3, 0xfb8f, +0xf9b3, 0xfb8f, 0xf9e0, 0xfbad, 0xf9e0, 0xfbad, 0xfa8e, 0xfc4c, 0xfa8e, 0xfc4c, 0xf998, +0xfb47, 0xf998, 0xfb47, 0xf729, 0xf8c8, 0xf729, 0xf8c8, 0xf619, 0xf7a8, 0xf619, 0xf7a8, +0xf6f3, 0xf872, 0xf6f3, 0xf872, 0xf6f3, 0xf872, 0xf55d, 0xf6cb, 0xf55d, 0xf6cb, 0xf5a6, +0xf702, 0xf5a6, 0xf702, 0xf567, 0xf6af, 0xf567, 0xf6af, 0xf634, 0xf768, 0xf634, 0xf768, +0xf819, 0xf936, 0xf819, 0xf936, 0xf7d7, 0xf8dd, 0xf7d7, 0xf8dd, 0xf7d7, 0xf8dd, 0xf724, +0xf813, 0xf724, 0xf813, 0xf578, 0xf64e, 0xf578, 0xf64e, 0xf452, 0xf50f, 0xf452, 0xf50f, +0xf527, 0xf5cd, 0xf527, 0xf5cd, 0xf72d, 0xf7ba, 0xf72d, 0xf7ba, 0xf72d, 0xf7ba, 0xf547, +0xf5bc, 0xf547, 0xf5bc, 0xf330, 0xf38e, 0xf330, 0xf38e, 0xf3f4, 0xf43d, 0xf3f4, 0xf43d, +0xf4b8, 0xf4ec, 0xf4b8, 0xf4ec, 0xf3ef, 0xf410, 0xf3ef, 0xf410, 0xf360, 0xf36f, 0xf360, +0xf36f, 0xf360, 0xf36f, 0xf3dc, 0xf3da, 0xf3dc, 0xf3da, 0xf42b, 0xf418, 0xf42b, 0xf418, +0xf6ef, 0xf6cc, 0xf6ef, 0xf6cc, 0xf6f5, 0xf6c4, 0xf6f5, 0xf6c4, 0xf37c, 0xf33c, 0xf37c, +0xf33c, 0xf294, 0xf244, 0xf294, 0xf244, 0xf294, 0xf244, 0xf546, 0xf4e6, 0xf546, 0xf4e6, +0xf741, 0xf6cf, 0xf741, 0xf6cf, 0xf6bf, 0xf639, 0xf6bf, 0xf639, 0xf68e, 0xf5f3, 0xf68e, +0xf5f3, 0xf773, 0xf6c0, 0xf773, 0xf6c0, 0xf773, 0xf6c0, 0xf96a, 0xf89c, 0xf96a, 0xf89c, +0xfb2e, 0xfa42, 0xfb2e, 0xfa42, 0xfb66, 0xfa5a, 0xfb66, 0xfa5a, 0xfbfe, 0xface, 0xfbfe, +0xface, 0xfe8e, 0xfd38, 0xfe8e, 0xfd38, 0x11b, 0xff9c, 0x11b, 0xff9c, 0x11b, 0xff9c, +0x37d, 0x1d4, 0x37d, 0x1d4, 0x3dc, 0x207, 0x3dc, 0x207, 0x4ed, 0x2ec, 0x4ed, +0x2ec, 0x80f, 0x5e2, 0x80f, 0x5e2, 0xb2f, 0x8d6, 0xb2f, 0x8d6, 0xef6, 0xc72, +0xef6, 0xc72, 0xef6, 0xc72, 0x117b, 0xed0, 0x117b, 0xed0, 0x1242, 0xf72, 0x1242, +0xf72, 0x1327, 0x1036, 0x1327, 0x1036, 0x1665, 0x1358, 0x1665, 0x1358, 0x1647, 0x1323, +0x1647, 0x1323, 0x1647, 0x1323, 0x15e2, 0x12ac, 0x15e2, 0x12ac, 0x17da, 0x1498, 0x17da, +0x1498, 0x176d, 0x1425, 0x176d, 0x1425, 0x1aaa, 0x1760, 0x1aaa, 0x1760, 0x1e6e, 0x1b29, +0x1e6e, 0x1b29, 0x1ceb, 0x19b0, 0x1ceb, 0x19b0, 0x1ceb, 0x19b0, 0x1b46, 0x1819, 0x1b46, +0x1819, 0x1b27, 0x180e, 0x1b27, 0x180e, 0x1afa, 0x17f8, 0x1afa, 0x17f8, 0x1c96, 0x19ad, +0x1c96, 0x19ad, 0x1cda, 0x1a0d, 0x1cda, 0x1a0d, 0x1a8a, 0x17da, 0x1a8a, 0x17da, 0x1a8a, +0x17da, 0x1a4f, 0x17bd, 0x1a4f, 0x17bd, 0x1bfc, 0x1988, 0x1bfc, 0x1988, 0x1d7e, 0x1b27, +0x1d7e, 0x1b27, 0x1df9, 0x1bbe, 0x1df9, 0x1bbe, 0x1b72, 0x1952, 0x1b72, 0x1952, 0x1b72, +0x1952, 0x19cf, 0x17c8, 0x19cf, 0x17c8, 0x19fa, 0x180a, 0x19fa, 0x180a, 0x1601, 0x1427, +0x1601, 0x1427, 0x13fe, 0x1237, 0x13fe, 0x1237, 0x1402, 0x124b, 0x1402, 0x124b, 0x11f3, +0x104c, 0x11f3, 0x104c, 0x11f3, 0x104c, 0x1215, 0x107d, 0x1215, 0x107d, 0x13df, 0x1255, +0x13df, 0x1255, 0x1413, 0x1296, 0x1413, 0x1296, 0x1411, 0x12a2, 0x1411, 0x12a2, 0x14b3, +0x1352, 0x14b3, 0x1352, 0x14b3, 0x1352, 0x139e, 0x124d, 0x139e, 0x124d, 0x12b9, 0x1178, +0x12b9, 0x1178, 0x123c, 0x110d, 0x123c, 0x110d, 0x11f2, 0x10d7, 0x11f2, 0x10d7, 0x129e, +0x1198, 0x129e, 0x1198, 0x1369, 0x127a, 0x1369, 0x127a, 0x1369, 0x127a, 0x137a, 0x12a3, +0x137a, 0x12a3, 0x13da, 0x131e, 0x13da, 0x131e, 0x11b1, 0x1110, 0x11b1, 0x1110, 0xfe9, +0xf63, 0xfe9, 0xf63, 0x1063, 0xff9, 0x1063, 0xff9, 0xe7a, 0xe2d, 0xe7a, 0xe2d, +0xe7a, 0xe2d, 0xe07, 0xdd5, 0xe07, 0xdd5, 0xb83, 0xb6c, 0xb83, 0xb6c, 0x982, +0x983, 0x982, 0x983, 0x835, 0x84e, 0x835, 0x84e, 0x781, 0x7af, 0x781, 0x7af, +0x781, 0x7af, 0x777, 0x7b8, 0x777, 0x7b8, 0x45b, 0x4ae, 0x45b, 0x4ae, 0x413, +0x474, 0x413, 0x474, 0x265, 0x2d4, 0x265, 0x2d4, 0x13b, 0x1b5, 0x13b, 0x1b5, +0xfe6c, 0xfef0, 0xfe6c, 0xfef0, 0xfe6c, 0xfef0, 0xfafa, 0xfb89, 0xfafa, 0xfb89, 0xf9ae, +0xfa45, 0xf9ae, 0xfa45, 0xf6d7, 0xf777, 0xf6d7, 0xf777, 0xf7c3, 0xf86d, 0xf7c3, 0xf86d, +0xf6ca, 0xf77e, 0xf6ca, 0xf77e, 0xf469, 0xf529, 0xf469, 0xf529, 0xf469, 0xf529, 0xf425, +0xf4f3, 0xf425, 0xf4f3, 0xf34e, 0xf42b, 0xf34e, 0xf42b, 0xf2bf, 0xf3ad, 0xf2bf, 0xf3ad, +0xf13d, 0xf23e, 0xf13d, 0xf23e, 0xeece, 0xefe3, 0xeece, 0xefe3, 0xeece, 0xefe3, 0xee19, +0xef44, 0xee19, 0xef44, 0xeda2, 0xeee3, 0xeda2, 0xeee3, 0xec52, 0xedaa, 0xec52, 0xedaa, +0xea63, 0xebd1, 0xea63, 0xebd1, 0xe9d7, 0xeb59, 0xe9d7, 0xeb59, 0xeb75, 0xed0a, 0xeb75, +0xed0a, 0xeb75, 0xed0a, 0xebe0, 0xed84, 0xebe0, 0xed84, 0xed00, 0xeeb0, 0xed00, 0xeeb0, +0xec35, 0xeded, 0xec35, 0xeded, 0xebc6, 0xed7f, 0xebc6, 0xed7f, 0xed75, 0xef2b, 0xed75, +0xef2b, 0xef3c, 0xf0e7, 0xef3c, 0xf0e7, 0xef3c, 0xf0e7, 0xf15f, 0xf2f9, 0xf15f, 0xf2f9, +0xf016, 0xf198, 0xf016, 0xf198, 0xeff9, 0xf15d, 0xeff9, 0xf15d, 0xf277, 0xf3b6, 0xf277, +0xf3b6, 0xf3af, 0xf4c3, 0xf3af, 0xf4c3, 0xf3af, 0xf4c3, 0xf43d, 0xf520, 0xf43d, 0xf520, +0xf440, 0xf4ee, 0xf440, 0xf4ee, 0xf3c0, 0xf435, 0xf3c0, 0xf435, 0xf678, 0xf6b1, 0xf678, +0xf6b1, 0xf9c3, 0xf9be, 0xf9c3, 0xf9be, 0xfba2, 0xfb60, 0xfba2, 0xfb60, 0xfba2, 0xfb60, +0xfcfa, 0xfc7b, 0xfcfa, 0xfc7b, 0xfd4a, 0xfc8f, 0xfd4a, 0xfc8f, 0xffd7, 0xfee3, 0xffd7, +0xfee3, 0xb3, 0xff8a, 0xb3, 0xff8a, 0x1ba, 0x60, 0x1ba, 0x60, 0x474, 0x2ed, +0x474, 0x2ed, 0x474, 0x2ed, 0x54c, 0x39f, 0x54c, 0x39f, 0x62b, 0x45d, 0x62b, +0x45d, 0x923, 0x739, 0x923, 0x739, 0xb80, 0x981, 0xb80, 0x981, 0xa32, 0x822, +0xa32, 0x822, 0xa32, 0x822, 0xa2d, 0x812, 0xa2d, 0x812, 0xaae, 0x88c, 0xaae, +0x88c, 0xb97, 0x971, 0xb97, 0x971, 0xd27, 0xb01, 0xd27, 0xb01, 0xc91, 0xa6c, +0xc91, 0xa6c, 0xdb7, 0xb96, 0xdb7, 0xb96, 0xdb7, 0xb96, 0x105a, 0xe3d, 0x105a, +0xe3d, 0x1285, 0x106d, 0x1285, 0x106d, 0x148e, 0x127a, 0x148e, 0x127a, 0x1414, 0x1203, +0x1414, 0x1203, 0x130f, 0x1101, 0x130f, 0x1101, 0x15a3, 0x1396, 0x15a3, 0x1396, 0x15a3, +0x1396, 0x17d5, 0x15c8, 0x17d5, 0x15c8, 0x1715, 0x1506, 0x1715, 0x1506, 0x1705, 0x14f4, +0x1705, 0x14f4, 0x183c, 0x1629, 0x183c, 0x1629, 0x197e, 0x1768, 0x197e, 0x1768, 0x197e, +0x1768, 0x1bb6, 0x199c, 0x1bb6, 0x199c, 0x1c43, 0x1a27, 0x1c43, 0x1a27, 0x1ba4, 0x1986, +0x1ba4, 0x1986, 0x1ce0, 0x1ac1, 0x1ce0, 0x1ac1, 0x1b0c, 0x18ef, 0x1b0c, 0x18ef, 0x18fc, +0x16e2, 0x18fc, 0x16e2, 0x18fc, 0x16e2, 0x193e, 0x1729, 0x193e, 0x1729, 0x1708, 0x14fb, +0x1708, 0x14fb, 0x179e, 0x159a, 0x179e, 0x159a, 0x1988, 0x178f, 0x1988, 0x178f, 0x17ae, +0x15c1, 0x17ae, 0x15c1, 0x17f5, 0x1614, 0x17f5, 0x1614, 0x17f5, 0x1614, 0x19e4, 0x1810, +0x19e4, 0x1810, 0x1b77, 0x19b0, 0x1b77, 0x19b0, 0x1c3e, 0x1a82, 0x1c3e, 0x1a82, 0x1abb, +0x1908, 0x1abb, 0x1908, 0x193f, 0x1794, 0x193f, 0x1794, 0x193f, 0x1794, 0x18d6, 0x172f, +0x18d6, 0x172f, 0x1979, 0x17d2, 0x1979, 0x17d2, 0x1915, 0x176a, 0x1915, 0x176a, 0x195c, +0x17aa, 0x195c, 0x17aa, 0x1a38, 0x187b, 0x1a38, 0x187b, 0x1978, 0x17ab, 0x1978, 0x17ab, +0x1978, 0x17ab, 0x1b09, 0x192a, 0x1b09, 0x192a, 0x1a91, 0x189d, 0x1a91, 0x189d, 0x1762, +0x1557, 0x1762, 0x1557, 0x16ab, 0x1486, 0x16ab, 0x1486, 0x16cc, 0x148e, 0x16cc, 0x148e, +0x17cd, 0x1578, 0x17cd, 0x1578, 0x17cd, 0x1578, 0x17ad, 0x1541, 0x17ad, 0x1541, 0x17be, +0x1540, 0x17be, 0x1540, 0x193c, 0x16b0, 0x193c, 0x16b0, 0x195a, 0x16c5, 0x195a, 0x16c5, +0x1a5a, 0x17c3, 0x1a5a, 0x17c3, 0x1a5a, 0x17c3, 0x1b36, 0x18a4, 0x1b36, 0x18a4, 0x1ac2, +0x183c, 0x1ac2, 0x183c, 0x19b3, 0x1743, 0x19b3, 0x1743, 0x1728, 0x14d6, 0x1728, 0x14d6, +0x15f3, 0x13c6, 0x15f3, 0x13c6, 0x158c, 0x138d, 0x158c, 0x138d, 0x158c, 0x138d, 0x1270, +0x10a5, 0x1270, 0x10a5, 0x1048, 0xeba, 0x1048, 0xeba, 0xe05, 0xcb7, 0xe05, 0xcb7, +0xb19, 0xa11, 0xb19, 0xa11, 0xb7a, 0xabb, 0xb7a, 0xabb, 0xa6a, 0x9f5, 0xa6a, +0x9f5, 0xa6a, 0x9f5, 0x756, 0x72c, 0x756, 0x72c, 0x545, 0x564, 0x545, 0x564, +0x459, 0x4c0, 0x459, 0x4c0, 0x268, 0x312, 0x268, 0x312, 0x13c, 0x225, 0x13c, +0x225, 0x13c, 0x225, 0xff7e, 0xa0, 0xff7e, 0xa0, 0xfbd1, 0xfd26, 0xfbd1, 0xfd26, +0xfcba, 0xfe3c, 0xfcba, 0xfe3c, 0xfb9b, 0xfd43, 0xfb9b, 0xfd43, 0xf827, 0xf9ed, 0xf827, +0xf9ed, 0xf6ac, 0xf88b, 0xf6ac, 0xf88b, 0xf6ac, 0xf88b, 0xf48f, 0xf681, 0xf48f, 0xf681, +0xf3f0, 0xf5ee, 0xf3f0, 0xf5ee, 0xf4ab, 0xf6b2, 0xf4ab, 0xf6b2, 0xf48a, 0xf695, 0xf48a, +0xf695, 0xf32b, 0xf537, 0xf32b, 0xf537, 0xf32b, 0xf537, 0xf165, 0xf371, 0xf165, 0xf371, +0xee53, 0xf05e, 0xee53, 0xf05e, 0xee39, 0xf043, 0xee39, 0xf043, 0xee86, 0xf08f, 0xee86, +0xf08f, 0xeaa1, 0xecab, 0xeaa1, 0xecab, 0xe905, 0xeb13, 0xe905, 0xeb13, 0xe905, 0xeb13, +0xe92b, 0xeb3f, 0xe92b, 0xeb3f, 0xe8a8, 0xeac4, 0xe8a8, 0xeac4, 0xe99c, 0xebc4, 0xe99c, +0xebc4, 0xe9d5, 0xec0a, 0xe9d5, 0xec0a, 0xe906, 0xeb4b, 0xe906, 0xeb4b, 0xe986, 0xebdc, +0xe986, 0xebdc, 0xe986, 0xebdc, 0xe938, 0xeba1, 0xe938, 0xeba1, 0xe9a6, 0xec22, 0xe9a6, +0xec22, 0xe9ec, 0xec7b, 0xe9ec, 0xec7b, 0xe7e6, 0xea87, 0xe7e6, 0xea87, 0xe726, 0xe9d8, +0xe726, 0xe9d8, 0xe726, 0xe9d8, 0xe7c7, 0xea88, 0xe7c7, 0xea88, 0xe82a, 0xeaf8, 0xe82a, +0xeaf8, 0xe832, 0xeb0a, 0xe832, 0xeb0a, 0xe7bf, 0xea9e, 0xe7bf, 0xea9e, 0xe648, 0xe92c, +0xe648, 0xe92c, 0xe485, 0xe76c, 0xe485, 0xe76c, 0xe485, 0xe76c, 0xe3a6, 0xe68d, 0xe3a6, +0xe68d, 0xe322, 0xe608, 0xe322, 0xe608, 0xe18a, 0xe46d, 0xe18a, 0xe46d, 0xe14d, 0xe42e, +0xe14d, 0xe42e, 0xe215, 0xe4f4, 0xe215, 0xe4f4, 0xe30b, 0xe5e8, 0xe30b, 0xe5e8, 0xe30b, +0xe5e8, 0xe29a, 0xe578, 0xe29a, 0xe578, 0xe0f9, 0xe3d9, 0xe0f9, 0xe3d9, 0xe2d0, 0xe5b7, +0xe2d0, 0xe5b7, 0xe2aa, 0xe59a, 0xe2aa, 0xe59a, 0xe341, 0xe63e, 0xe341, 0xe63e, 0xe341, +0xe63e, 0xe3e8, 0xe6f7, 0xe3e8, 0xe6f7, 0xe267, 0xe58a, 0xe267, 0xe58a, 0xe48d, 0xe7c9, +0xe48d, 0xe7c9, 0xe433, 0xe789, 0xe433, 0xe789, 0xe4a3, 0xe816, 0xe4a3, 0xe816, 0xe73f, +0xead0, 0xe73f, 0xead0, 0xe73f, 0xead0, 0xe686, 0xea35, 0xe686, 0xea35, 0xe54e, 0xe91a, +0xe54e, 0xe91a, 0xe4fb, 0xe8e1, 0xe4fb, 0xe8e1, 0xe56a, 0xe968, 0xe56a, 0xe968, 0xe5ee, +0xe9ff, 0xe5ee, 0xe9ff, 0xe714, 0xeb32, 0xe714, 0xeb32, 0xe714, 0xeb32, 0xe79a, 0xebbf, +0xe79a, 0xebbf, 0xe7c4, 0xebe8, 0xe7c4, 0xebe8, 0xe9e4, 0xee01, 0xe9e4, 0xee01, 0xeab1, +0xeebd, 0xeab1, 0xeebd, 0xebd8, 0xefcc, 0xebd8, 0xefcc, 0xebd8, 0xefcc, 0xeddb, 0xf1b0, +0xeddb, 0xf1b0, 0xecbf, 0xf06d, 0xecbf, 0xf06d, 0xec60, 0xefe0, 0xec60, 0xefe0, 0xed4c, +0xf099, 0xed4c, 0xf099, 0xeec3, 0xf1d9, 0xeec3, 0xf1d9, 0xf123, 0xf3fe, 0xf123, 0xf3fe, +0xf123, 0xf3fe, 0xf2ba, 0xf559, 0xf2ba, 0xf559, 0xf406, 0xf66a, 0xf406, 0xf66a, 0xf5f0, +0xf81a, 0xf5f0, 0xf81a, 0xf704, 0xf8f7, 0xf704, 0xf8f7, 0xf628, 0xf7e8, 0xf628, 0xf7e8, +0xf6f3, 0xf887, 0xf6f3, 0xf887, 0xf6f3, 0xf887, 0xf7c0, 0xf92d, 0xf7c0, 0xf92d, 0xf785, +0xf8d3, 0xf785, 0xf8d3, 0xf892, 0xf9ca, 0xf892, 0xf9ca, 0xf940, 0xfa6a, 0xf940, 0xfa6a, +0xf7e0, 0xf903, 0xf7e0, 0xf903, 0xf7e0, 0xf903, 0xf78e, 0xf8b3, 0xf78e, 0xf8b3, 0xf93b, +0xfa6a, 0xf93b, 0xfa6a, 0xf7df, 0xf91f, 0xf7df, 0xf91f, 0xf731, 0xf887, 0xf731, 0xf887, +0xf7cf, 0xf940, 0xf7cf, 0xf940, 0xf677, 0xf806, 0xf677, 0xf806, 0xf677, 0xf806, 0xf6c6, +0xf875, 0xf6c6, 0xf875, 0xf637, 0xf807, 0xf637, 0xf807, 0xf397, 0xf588, 0xf397, 0xf588, +0xf37b, 0xf58a, 0xf37b, 0xf58a, 0xf2c4, 0xf4ef, 0xf2c4, 0xf4ef, 0xf153, 0xf396, 0xf153, +0xf396, 0xf153, 0xf396, 0xf172, 0xf3c8, 0xf172, 0xf3c8, 0xf061, 0xf2c4, 0xf061, 0xf2c4, +0xf06d, 0xf2d9, 0xf06d, 0xf2d9, 0xf230, 0xf49d, 0xf230, 0xf49d, 0xf30f, 0xf579, 0xf30f, +0xf579, 0xf30f, 0xf579, 0xf10b, 0xf36b, 0xf10b, 0xf36b, 0xf056, 0xf2a8, 0xf056, 0xf2a8, +0xf0fc, 0xf33b, 0xf0fc, 0xf33b, 0xf01e, 0xf245, 0xf01e, 0xf245, 0xf08d, 0xf299, 0xf08d, +0xf299, 0xeebe, 0xf0ab, 0xeebe, 0xf0ab, 0xeebe, 0xf0ab, 0xed80, 0xef4e, 0xed80, 0xef4e, +0xee53, 0xeffe, 0xee53, 0xeffe, 0xee67, 0xefef, 0xee67, 0xefef, 0xee0d, 0xef70, 0xee0d, +0xef70, 0xedbd, 0xeefb, 0xedbd, 0xeefb, 0xee47, 0xef5f, 0xee47, 0xef5f, 0xee47, 0xef5f, +0xef86, 0xf077, 0xef86, 0xf077, 0xf2d3, 0xf39b, 0xf2d3, 0xf39b, 0xf2cf, 0xf36e, 0xf2cf, +0xf36e, 0xf196, 0xf209, 0xf196, 0xf209, 0xf2cb, 0xf311, 0xf2cb, 0xf311, 0xf2cb, 0xf311, +0xf2a6, 0xf2bb, 0xf2a6, 0xf2bb, 0xf4bb, 0xf49a, 0xf4bb, 0xf49a, 0xf5c3, 0xf569, 0xf5c3, +0xf569, 0xf43f, 0xf3a8, 0xf43f, 0xf3a8, 0xf5c2, 0xf4e9, 0xf5c2, 0xf4e9, 0xf713, 0xf5f2, +0xf713, 0xf5f2, 0xf713, 0xf5f2, 0xf8c8, 0xf75c, 0xf8c8, 0xf75c, 0xfa2e, 0xf871, 0xfa2e, +0xf871, 0xf968, 0xf757, 0xf968, 0xf757, 0xf9e2, 0xf779, 0xf9e2, 0xf779, 0xface, 0xf80a, +0xface, 0xf80a, 0xfeba, 0xfb9a, 0xfeba, 0xfb9a, 0xfeba, 0xfb9a, 0x202, 0xfe86, 0x202, +0xfe86, 0x2cc, 0xfef6, 0x2cc, 0xfef6, 0x62b, 0x1fe, 0x62b, 0x1fe, 0x9ca, 0x54a, +0x9ca, 0x54a, 0xe16, 0x948, 0xe16, 0x948, 0xe16, 0x948, 0x128d, 0xd78, 0x128d, +0xd78, 0x14a5, 0xf53, 0x14a5, 0xf53, 0x1585, 0xffe, 0x1585, 0xffe, 0x176a, 0x11b9, +0x176a, 0x11b9, 0x1998, 0x13c8, 0x1998, 0x13c8, 0x1a6a, 0x1487, 0x1a6a, 0x1487, 0x1a6a, +0x1487, 0x1af0, 0x1504, 0x1af0, 0x1504, 0x1a5d, 0x1474, 0x1a5d, 0x1474, 0x19b7, 0x13dc, +0x19b7, 0x13dc, 0x1cdb, 0x1717, 0x1cdb, 0x1717, 0x1e16, 0x1873, 0x1e16, 0x1873, 0x1cda, +0x175e, 0x1cda, 0x175e, 0x1cda, 0x175e, 0x1f9c, 0x1a4f, 0x1f9c, 0x1a4f, 0x1f84, 0x1a69, +0x1f84, 0x1a69, 0x1edc, 0x19f7, 0x1edc, 0x19f7, 0x1f33, 0x1a85, 0x1f33, 0x1a85, 0x1d24, +0x18ad, 0x1d24, 0x18ad, 0x1d24, 0x18ad, 0x1eb0, 0x1a6e, 0x1eb0, 0x1a6e, 0x1eb4, 0x1aa6, +0x1eb4, 0x1aa6, 0x1ea8, 0x1ac8, 0x1ea8, 0x1ac8, 0x20d5, 0x1d20, 0x20d5, 0x1d20, 0x1e66, +0x1ad5, 0x1e66, 0x1ad5, 0x1b76, 0x1805, 0x1b76, 0x1805, 0x1b76, 0x1805, 0x18f9, 0x15a3, +0x18f9, 0x15a3, 0x16a9, 0x1367, 0x16a9, 0x1367, 0x1505, 0x11d4, 0x1505, 0x11d4, 0x13c2, +0x109d, 0x13c2, 0x109d, 0x1486, 0x116b, 0x1486, 0x116b, 0x1486, 0x116b, 0x1302, 0xfef, +0x1302, 0xfef, 0x1351, 0x1044, 0x1351, 0x1044, 0x14a6, 0x11a1, 0x14a6, 0x11a1, 0x1374, +0x1078, 0x1374, 0x1078, 0x144d, 0x115d, 0x144d, 0x115d, 0x127c, 0xf9c, 0x127c, 0xf9c, +0x127c, 0xf9c, 0x10b0, 0xde5, 0x10b0, 0xde5, 0x10da, 0xe29, 0x10da, 0xe29, 0x111d, +0xe8b, 0x111d, 0xe8b, 0x1292, 0x1025, 0x1292, 0x1025, 0x12a3, 0x1062, 0x12a3, 0x1062, +0x1309, 0x10f9, 0x1309, 0x10f9, 0x1309, 0x10f9, 0x1220, 0x1047, 0x1220, 0x1047, 0x10cc, +0xf2d, 0x10cc, 0xf2d, 0xf8a, 0xe2a, 0xf8a, 0xe2a, 0xcce, 0xbb0, 0xcce, 0xbb0, +0xb8c, 0xab1, 0xb8c, 0xab1, 0xb8c, 0xab1, 0x99d, 0x906, 0x99d, 0x906, 0x876, +0x823, 0x876, 0x823, 0x790, 0x780, 0x790, 0x780, 0x5fd, 0x62d, 0x5fd, 0x62d, +0x5ed, 0x65b, 0x5ed, 0x65b, 0x2b3, 0x35d, 0x2b3, 0x35d, 0x2b3, 0x35d, 0x1db, +0x2bb, 0x1db, 0x2bb, 0x189, 0x29c, 0x189, 0x29c, 0xfde1, 0xff24, 0xfde1, 0xff24, +0xfd86, 0xfef4, 0xfd86, 0xfef4, 0xfa54, 0xfbe9, 0xfa54, 0xfbe9, 0xf8e7, 0xfaa1, 0xf8e7, +0xfaa1, 0xf8e7, 0xfaa1, 0xf918, 0xfaf5, 0xf918, 0xfaf5, 0xf54e, 0xf74c, 0xf54e, 0xf74c, +0xf3a9, 0xf5c6, 0xf3a9, 0xf5c6, 0xf0d6, 0xf312, 0xf0d6, 0xf312, 0xef32, 0xf18c, 0xef32, +0xf18c, 0xef32, 0xf18c, 0xf070, 0xf2e9, 0xf070, 0xf2e9, 0xf16c, 0xf405, 0xf16c, 0xf405, +0xf0f0, 0xf3a9, 0xf0f0, 0xf3a9, 0xefe4, 0xf2bc, 0xefe4, 0xf2bc, 0xf04f, 0xf348, 0xf04f, +0xf348, 0xee23, 0xf13c, 0xee23, 0xf13c, 0xee23, 0xf13c, 0xee2a, 0xf162, 0xee2a, 0xf162, +0xedf5, 0xf14a, 0xedf5, 0xf14a, 0xe9d7, 0xed46, 0xe9d7, 0xed46, 0xeb0f, 0xee94, 0xeb0f, +0xee94, 0xeb85, 0xef1b, 0xeb85, 0xef1b, 0xeb0d, 0xeeae, 0xeb0d, 0xeeae, 0xeb0d, 0xeeae, +0xecbf, 0xf063, 0xecbf, 0xf063, 0xeabb, 0xee59, 0xeabb, 0xee59, 0xecf6, 0xf086, 0xecf6, +0xf086, 0xf177, 0xf4ef, 0xf177, 0xf4ef, 0xf256, 0xf5ab, 0xf256, 0xf5ab, 0xf256, 0xf5ab, +0xf385, 0xf6ad, 0xf385, 0xf6ad, 0xf32a, 0xf61b, 0xf32a, 0xf61b, 0xf20b, 0xf4ba, 0xf20b, +0xf4ba, 0xf25d, 0xf4c2, 0xf25d, 0xf4c2, 0xf33e, 0xf54f, 0xf33e, 0xf54f, 0xf3ad, 0xf564, +0xf3ad, 0xf564, 0xf3ad, 0xf564, 0xf4ec, 0xf644, 0xf4ec, 0xf644, 0xf7d9, 0xf8cd, 0xf7d9, +0xf8cd, 0xfa43, 0xfad1, 0xfa43, 0xfad1, 0xfc7d, 0xfca5, 0xfc7d, 0xfca5, 0xff66, 0xff2a, +0xff66, 0xff2a, 0x74, 0xffd7, 0x74, 0xffd7, 0x74, 0xffd7, 0x7b, 0xff82, 0x7b, +0xff82, 0x1e1, 0x93, 0x1e1, 0x93, 0x346, 0x1ab, 0x346, 0x1ab, 0x567, 0x388, +0x567, 0x388, 0x72e, 0x515, 0x72e, 0x515, 0x72e, 0x515, 0x83e, 0x5f5, 0x83e, +0x5f5, 0xa0a, 0x79c, 0xa0a, 0x79c, 0xb98, 0x90f, 0xb98, 0x90f, 0xe0c, 0xb72, +0xe0c, 0xb72, 0xf6d, 0xccc, 0xf6d, 0xccc, 0xe8b, 0xbea, 0xe8b, 0xbea, 0xe8b, +0xbea, 0xeef, 0xc56, 0xeef, 0xc56, 0x1075, 0xdea, 0x1075, 0xdea, 0x1077, 0xdfd, +0x1077, 0xdfd, 0xf5a, 0xcf4, 0xf5a, 0xcf4, 0xf66, 0xd17, 0xf66, 0xd17, 0x10e5, +0xeac, 0x10e5, 0xeac, 0x10e5, 0xeac, 0x11fd, 0xfd8, 0x11fd, 0xfd8, 0x1326, 0x1114, +0x1326, 0x1114, 0x1548, 0x1345, 0x1548, 0x1345, 0x15be, 0x13c7, 0x15be, 0x13c7, 0x1617, +0x1427, 0x1617, 0x1427, 0x1617, 0x1427, 0x17cb, 0x15df, 0x17cb, 0x15df, 0x1762, 0x1574, +0x1762, 0x1574, 0x16fe, 0x150b, 0x16fe, 0x150b, 0x17eb, 0x15f0, 0x17eb, 0x15f0, 0x17d1, +0x15ca, 0x17d1, 0x15ca, 0x1a0e, 0x17f9, 0x1a0e, 0x17f9, 0x1a0e, 0x17f9, 0x1bc2, 0x199d, +0x1bc2, 0x199d, 0x1a03, 0x17cf, 0x1a03, 0x17cf, 0x1a11, 0x17cd, 0x1a11, 0x17cd, 0x19a5, +0x1753, 0x19a5, 0x1753, 0x1879, 0x161a, 0x1879, 0x161a, 0x17de, 0x1574, 0x17de, 0x1574, +0x17de, 0x1574, 0x1673, 0x1402, 0x1673, 0x1402, 0x15e9, 0x1372, 0x15e9, 0x1372, 0x165e, +0x13e5, 0x165e, 0x13e5, 0x1728, 0x14af, 0x1728, 0x14af, 0x17c8, 0x1552, 0x17c8, 0x1552, +0x17c8, 0x1552, 0x191d, 0x16ab, 0x191d, 0x16ab, 0x1900, 0x1693, 0x1900, 0x1693, 0x18a5, +0x163f, 0x18a5, 0x163f, 0x1850, 0x15f0, 0x1850, 0x15f0, 0x15a5, 0x134a, 0x15a5, 0x134a, +0x15a6, 0x134e, 0x15a6, 0x134e, 0x15a6, 0x134e, 0x1709, 0x14b2, 0x1709, 0x14b2, 0x17ef, +0x1596, 0x17ef, 0x1596, 0x191e, 0x16c1, 0x191e, 0x16c1, 0x1889, 0x1625, 0x1889, 0x1625, +0x1774, 0x1505, 0x1774, 0x1505, 0x172f, 0x14b3, 0x172f, 0x14b3, 0x172f, 0x14b3, 0x16e0, +0x1456, 0x16e0, 0x1456, 0x15a6, 0x130c, 0x15a6, 0x130c, 0x14ce, 0x1224, 0x14ce, 0x1224, +0x14f0, 0x1236, 0x14f0, 0x1236, 0x160a, 0x1342, 0x160a, 0x1342, 0x160a, 0x1342, 0x17ca, +0x14f6, 0x17ca, 0x14f6, 0x184a, 0x1570, 0x184a, 0x1570, 0x191c, 0x1641, 0x191c, 0x1641, +0x1962, 0x168b, 0x1962, 0x168b, 0x1930, 0x1666, 0x1930, 0x1666, 0x1bf8, 0x1942, 0x1bf8, +0x1942, 0x1bf8, 0x1942, 0x1c55, 0x19bc, 0x1c55, 0x19bc, 0x1ac6, 0x1853, 0x1ac6, 0x1853, +0x1985, 0x1740, 0x1985, 0x1740, 0x17b6, 0x15a8, 0x17b6, 0x15a8, 0x17a7, 0x15d7, 0x17a7, +0x15d7, 0x149e, 0x1315, 0x149e, 0x1315, 0x149e, 0x1315, 0x11bb, 0x107d, 0x11bb, 0x107d, +0xfe6, 0xef7, 0xfe6, 0xef7, 0xdd0, 0xd34, 0xdd0, 0xd34, 0xe48, 0xe01, 0xe48, +0xe01, 0xd40, 0xd4d, 0xd40, 0xd4d, 0xd40, 0xd4d, 0xc35, 0xc93, 0xc35, 0xc93, +0xa2e, 0xadb, 0xa2e, 0xadb, 0x8ff, 0x9f4, 0x8ff, 0x9f4, 0x94e, 0xa86, 0x94e, +0xa86, 0x6b9, 0x82b, 0x6b9, 0x82b, 0x5c2, 0x767, 0x5c2, 0x767, 0x5c2, 0x767, +0x2af, 0x47d, 0x2af, 0x47d, 0xfe7f, 0x6d, 0xfe7f, 0x6d, 0xfe8f, 0x93, 0xfe8f, +0x93, 0xfba8, 0xfdb9, 0xfba8, 0xfdb9, 0xf909, 0xfb1f, 0xf909, 0xfb1f, 0xf909, 0xfb1f, +0xf8f7, 0xfb0a, 0xf8f7, 0xfb0a, 0xf915, 0xfb1d, 0xf915, 0xfb1d, 0xfbeb, 0xfde5, 0xfbeb, +0xfde5, 0xfb7c, 0xfd62, 0xfb7c, 0xfd62, 0xf8bd, 0xfa8d, 0xf8bd, 0xfa8d, 0xf69c, 0xf854, +0xf69c, 0xf854, 0xf69c, 0xf854, 0xf473, 0xf614, 0xf473, 0xf614, 0xf371, 0xf4fc, 0xf371, +0xf4fc, 0xf2c8, 0xf43f, 0xf2c8, 0xf43f, 0xf2f3, 0xf45a, 0xf2f3, 0xf45a, 0xf145, 0xf2a0, +0xf145, 0xf2a0, 0xf150, 0xf2a4, 0xf150, 0xf2a4, 0xf150, 0xf2a4, 0xf295, 0xf3e7, 0xf295, +0xf3e7, 0xf2e1, 0xf436, 0xf2e1, 0xf436, 0xf37f, 0xf4db, 0xf37f, 0xf4db, 0xf028, 0xf191, +0xf028, 0xf191, 0xeed1, 0xf04a, 0xeed1, 0xf04a, 0xeed1, 0xf04a, 0xef41, 0xf0ce, 0xef41, +0xf0ce, 0xed0b, 0xeeae, 0xed0b, 0xeeae, 0xecb5, 0xee70, 0xecb5, 0xee70, 0xec77, 0xee4b, +0xec77, 0xee4b, 0xeb89, 0xed76, 0xeb89, 0xed76, 0xeb47, 0xed4b, 0xeb47, 0xed4b, 0xeb47, +0xed4b, 0xeb07, 0xed21, 0xeb07, 0xed21, 0xeabf, 0xeced, 0xeabf, 0xeced, 0xe8a5, 0xeae5, +0xe8a5, 0xeae5, 0xe6ed, 0xe93c, 0xe6ed, 0xe93c, 0xe6ec, 0xe948, 0xe6ec, 0xe948, 0xe5eb, +0xe851, 0xe5eb, 0xe851, 0xe5eb, 0xe851, 0xe467, 0xe6d6, 0xe467, 0xe6d6, 0xe29b, 0xe513, +0xe29b, 0xe513, 0xe195, 0xe413, 0xe195, 0xe413, 0xe146, 0xe3cb, 0xe146, 0xe3cb, 0xe080, +0xe30d, 0xe080, 0xe30d, 0xe080, 0xe30d, 0xdf4b, 0xe1e0, 0xdf4b, 0xe1e0, 0xdf30, 0xe1d1, +0xdf30, 0xe1d1, 0xe06d, 0xe31b, 0xe06d, 0xe31b, 0xdf3c, 0xe1fc, 0xdf3c, 0xe1fc, 0xde4a, +0xe11d, 0xde4a, 0xe11d, 0xde50, 0xe13b, 0xde50, 0xe13b, 0xde50, 0xe13b, 0xdcf9, 0xdfff, +0xdcf9, 0xdfff, 0xdd10, 0xe034, 0xdd10, 0xe034, 0xdd47, 0xe08b, 0xdd47, 0xe08b, 0xdd41, +0xe0a7, 0xdd41, 0xe0a7, 0xde1e, 0xe1a7, 0xde1e, 0xe1a7, 0xdcca, 0xe075, 0xdcca, 0xe075, +0xdcca, 0xe075, 0xdcf1, 0xe0be, 0xdcf1, 0xe0be, 0xdf22, 0xe30e, 0xdf22, 0xe30e, 0xdda0, +0xe1a7, 0xdda0, 0xe1a7, 0xdca9, 0xe0c7, 0xdca9, 0xe0c7, 0xdd39, 0xe167, 0xdd39, 0xe167, +0xdd39, 0xe167, 0xddfc, 0xe235, 0xddfc, 0xe235, 0xdec2, 0xe2fe, 0xdec2, 0xe2fe, 0xdea0, +0xe2d7, 0xdea0, 0xe2d7, 0xdfb6, 0xe3e1, 0xdfb6, 0xe3e1, 0xdf65, 0xe37c, 0xdf65, 0xe37c, +0xdf2b, 0xe326, 0xdf2b, 0xe326, 0xdf2b, 0xe326, 0xdef2, 0xe2ca, 0xdef2, 0xe2ca, 0xde40, +0xe1f0, 0xde40, 0xe1f0, 0xe062, 0xe3e4, 0xe062, 0xe3e4, 0xe1e3, 0xe533, 0xe1e3, 0xe533, +0xe46e, 0xe78b, 0xe46e, 0xe78b, 0xe7c0, 0xeaa9, 0xe7c0, 0xeaa9, 0xe7c0, 0xeaa9, 0xe85b, +0xeb11, 0xe85b, 0xeb11, 0xeab8, 0xed3d, 0xeab8, 0xed3d, 0xed22, 0xef7a, 0xed22, 0xef7a, +0xed6a, 0xef99, 0xed6a, 0xef99, 0xeeb9, 0xf0c6, 0xeeb9, 0xf0c6, 0xeeb9, 0xf0c6, 0xef3b, +0xf12d, 0xef3b, 0xf12d, 0xee9f, 0xf07f, 0xee9f, 0xf07f, 0xef22, 0xf0f7, 0xef22, 0xf0f7, +0xf12e, 0xf301, 0xf12e, 0xf301, 0xf1c7, 0xf3a0, 0xf1c7, 0xf3a0, 0xf1dc, 0xf3c3, 0xf1dc, +0xf3c3, 0xf1dc, 0xf3c3, 0xf272, 0xf46d, 0xf272, 0xf46d, 0xf06f, 0xf284, 0xf06f, 0xf284, +0xf1d4, 0xf40a, 0xf1d4, 0xf40a, 0xf3cd, 0xf626, 0xf3cd, 0xf626, 0xf258, 0xf4d6, 0xf258, +0xf4d6, 0xf309, 0xf5ad, 0xf309, 0xf5ad, 0xf309, 0xf5ad, 0xf2c2, 0xf58b, 0xf2c2, 0xf58b, +0xf288, 0xf574, 0xf288, 0xf574, 0xf391, 0xf69d, 0xf391, 0xf69d, 0xf24d, 0xf574, 0xf24d, +0xf574, 0xf07f, 0xf3bb, 0xf07f, 0xf3bb, 0xf07f, 0xf3bb, 0xf04f, 0xf39a, 0xf04f, 0xf39a, +0xf161, 0xf4b4, 0xf161, 0xf4b4, 0xf24b, 0xf59e, 0xf24b, 0xf59e, 0xf315, 0xf662, 0xf315, +0xf662, 0xf3c5, 0xf704, 0xf3c5, 0xf704, 0xf48e, 0xf7b7, 0xf48e, 0xf7b7, 0xf48e, 0xf7b7, +0xf56a, 0xf879, 0xf56a, 0xf879, 0xf554, 0xf842, 0xf554, 0xf842, 0xf4fb, 0xf7c4, 0xf4fb, +0xf7c4, 0xf4c0, 0xf75f, 0xf4c0, 0xf75f, 0xf486, 0xf6f9, 0xf486, 0xf6f9, 0xf534, 0xf779, +0xf534, 0xf779, 0xf534, 0xf779, 0xf5cb, 0xf7df, 0xf5cb, 0xf7df, 0xf469, 0xf64d, 0xf469, +0xf64d, 0xf3be, 0xf570, 0xf3be, 0xf570, 0xf62a, 0xf7ab, 0xf62a, 0xf7ab, 0xf892, 0xf9e2, +0xf892, 0xf9e2, 0xf892, 0xf9e2, 0xfa3d, 0xfb5e, 0xfa3d, 0xfb5e, 0xfaa3, 0xfb94, 0xfaa3, +0xfb94, 0xf975, 0xfa36, 0xf975, 0xfa36, 0xfa0a, 0xfa9c, 0xfa0a, 0xfa9c, 0xfaf6, 0xfb58, +0xfaf6, 0xfb58, 0xfae0, 0xfb11, 0xfae0, 0xfb11, 0xfae0, 0xfb11, 0xfaed, 0xfaeb, 0xfaed, +0xfaeb, 0xfb8b, 0xfb55, 0xfb8b, 0xfb55, 0xfc90, 0xfc23, 0xfc90, 0xfc23, 0xfe48, 0xfda3, +0xfe48, 0xfda3, 0x108, 0x26, 0x108, 0x26, 0x22c, 0x10c, 0x22c, 0x10c, 0x22c, +0x10c, 0x1d1, 0x70, 0x1d1, 0x70, 0xe7, 0xff42, 0xe7, 0xff42, 0x162, 0xff78, +0x162, 0xff78, 0x309, 0xd7, 0x309, 0xd7, 0x453, 0x1da, 0x453, 0x1da, 0x453, +0x1da, 0x6f5, 0x437, 0x6f5, 0x437, 0x8a6, 0x5a3, 0x8a6, 0x5a3, 0xc33, 0x8ef, +0xc33, 0x8ef, 0x1018, 0xc96, 0x1018, 0xc96, 0x1092, 0xcd7, 0x1092, 0xcd7, 0x13b9, +0xfcd, 0x13b9, 0xfcd, 0x13b9, 0xfcd, 0x16f5, 0x12de, 0x16f5, 0x12de, 0x18c4, 0x148b, +0x18c4, 0x148b, 0x1bae, 0x175c, 0x1bae, 0x175c, 0x1cde, 0x187b, 0x1cde, 0x187b, 0x1be3, +0x1779, 0x1be3, 0x1779, 0x1ba8, 0x1740, 0x1ba8, 0x1740, 0x1ba8, 0x1740, 0x1da6, 0x194a, +0x1da6, 0x194a, 0x1dc6, 0x197f, 0x1dc6, 0x197f, 0x1d7d, 0x1951, 0x1d7d, 0x1951, 0x1ebb, +0x1ab2, 0x1ebb, 0x1ab2, 0x1ec2, 0x1ae2, 0x1ec2, 0x1ae2, 0x1ec2, 0x1ae2, 0x1fcb, 0x1c18, +0x1fcb, 0x1c18, 0x1fd3, 0x1c50, 0x1fd3, 0x1c50, 0x1f30, 0x1bde, 0x1f30, 0x1bde, 0x1fd7, +0x1cb6, 0x1fd7, 0x1cb6, 0x1e2a, 0x1b3a, 0x1e2a, 0x1b3a, 0x1d87, 0x1ac4, 0x1d87, 0x1ac4, +0x1d87, 0x1ac4, 0x1dea, 0x1b52, 0x1dea, 0x1b52, 0x1c24, 0x19b2, 0x1c24, 0x19b2, 0x1bb1, +0x1961, 0x1bb1, 0x1961, 0x1b38, 0x1904, 0x1b38, 0x1904, 0x1855, 0x1637, 0x1855, 0x1637, +0x1855, 0x1637, 0x1574, 0x1366, 0x1574, 0x1366, 0x13de, 0x11dc, 0x13de, 0x11dc, 0x1240, +0x1044, 0x1240, 0x1044, 0x111e, 0xf25, 0x111e, 0xf25, 0x1116, 0xf1c, 0x1116, 0xf1c, +0xe8f, 0xc93, 0xe8f, 0xc93, 0xe8f, 0xc93, 0xd01, 0xb01, 0xd01, 0xb01, 0xeea, +0xce6, 0xeea, 0xce6, 0xe91, 0xc8b, 0xe91, 0xc8b, 0xdec, 0xbe4, 0xdec, 0xbe4, +0xe05, 0xc00, 0xe05, 0xc00, 0xcdd, 0xade, 0xcdd, 0xade, 0xcdd, 0xade, 0xd5c, +0xb67, 0xd5c, 0xb67, 0xe32, 0xc4c, 0xe32, 0xc4c, 0xe83, 0xcb2, 0xe83, 0xcb2, +0xfc7, 0xe10, 0xfc7, 0xe10, 0x1013, 0xe79, 0x1013, 0xe79, 0x1013, 0xe79, 0xfd7, +0xe61, 0xfd7, 0xe61, 0xe8b, 0xd3c, 0xe8b, 0xd3c, 0xc58, 0xb34, 0xc58, 0xb34, +0xb11, 0xa1a, 0xb11, 0xa1a, 0x8c9, 0x801, 0x8c9, 0x801, 0x709, 0x671, 0x709, +0x671, 0x709, 0x671, 0x5a4, 0x53d, 0x5a4, 0x53d, 0x480, 0x449, 0x480, 0x449, +0x589, 0x581, 0x589, 0x581, 0x3c8, 0x3ed, 0x3c8, 0x3ed, 0x8d, 0xdc, 0x8d, +0xdc, 0x12, 0x89, 0x12, 0x89, 0x12, 0x89, 0xfe80, 0xff1b, 0xfe80, 0xff1b, +0xfc94, 0xfd52, 0xfc94, 0xfd52, 0xfc2e, 0xfd0a, 0xfc2e, 0xfd0a, 0xfa7d, 0xfb76, 0xfa7d, +0xfb76, 0xf983, 0xfa95, 0xf983, 0xfa95, 0xf983, 0xfa95, 0xf947, 0xfa71, 0xf947, 0xfa71, +0xf64e, 0xf78d, 0xf64e, 0xf78d, 0xf38c, 0xf4e1, 0xf38c, 0xf4e1, 0xf283, 0xf3ec, 0xf283, +0xf3ec, 0xf07b, 0xf1f8, 0xf07b, 0xf1f8, 0xf04b, 0xf1db, 0xf04b, 0xf1db, 0xf04b, 0xf1db, +0xf12e, 0xf2d2, 0xf12e, 0xf2d2, 0xef57, 0xf10f, 0xef57, 0xf10f, 0xef23, 0xf0ef, 0xef23, +0xf0ef, 0xef2e, 0xf10e, 0xef2e, 0xf10e, 0xeeba, 0xf0ad, 0xeeba, 0xf0ad, 0xef6b, 0xf170, +0xef6b, 0xf170, 0xef6b, 0xf170, 0xed76, 0xef8c, 0xed76, 0xef8c, 0xec4f, 0xee73, 0xec4f, +0xee73, 0xed50, 0xef80, 0xed50, 0xef80, 0xeceb, 0xef22, 0xeceb, 0xef22, 0xeb84, 0xedbe, +0xeb84, 0xedbe, 0xeb84, 0xedbe, 0xebac, 0xede3, 0xebac, 0xede3, 0xec45, 0xee73, 0xec45, +0xee73, 0xed59, 0xef77, 0xed59, 0xef77, 0xf186, 0xf38d, 0xf186, 0xf38d, 0xf219, 0xf402, +0xf219, 0xf402, 0xef54, 0xf118, 0xef54, 0xf118, 0xef54, 0xf118, 0xf021, 0xf1b8, 0xf021, +0xf1b8, 0xf03d, 0xf1a0, 0xf03d, 0xf1a0, 0xefdf, 0xf109, 0xefdf, 0xf109, 0xf1fe, 0xf2e8, +0xf1fe, 0xf2e8, 0xf2e4, 0xf38b, 0xf2e4, 0xf38b, 0xf396, 0xf3f5, 0xf396, 0xf3f5, 0xf396, +0xf3f5, 0xf64b, 0xf661, 0xf64b, 0xf661, 0xfa9d, 0xfa69, 0xfa9d, 0xfa69, 0xfd9a, 0xfd1d, +0xfd9a, 0xfd1d, 0xfe9c, 0xfdd6, 0xfe9c, 0xfdd6, 0xffa4, 0xfe9a, 0xffa4, 0xfe9a, 0xffa4, +0xfe9a, 0xffd2, 0xfe87, 0xffd2, 0xfe87, 0x143, 0xffbe, 0x143, 0xffbe, 0x332, 0x179, +0x332, 0x179, 0x5af, 0x3c7, 0x5af, 0x3c7, 0x67e, 0x471, 0x67e, 0x471, 0x575, +0x349, 0x575, 0x349, 0x575, 0x349, 0x868, 0x626, 0x868, 0x626, 0x96d, 0x71c, +0x96d, 0x71c, 0xa18, 0x7bf, 0xa18, 0x7bf, 0xcbf, 0xa65, 0xcbf, 0xa65, 0xc61, +0xa0b, 0xc61, 0xa0b, 0xd8f, 0xb42, 0xd8f, 0xb42, 0xd8f, 0xb42, 0xed3, 0xc94, +0xed3, 0xc94, 0xdb9, 0xb8a, 0xdb9, 0xb8a, 0xe58, 0xc3a, 0xe58, 0xc3a, 0xef3, +0xce7, 0xef3, 0xce7, 0xfe9, 0xdee, 0xfe9, 0xdee, 0xfe9, 0xdee, 0x11a1, 0xfb7, +0x11a1, 0xfb7, 0x1167, 0xf8a, 0x1167, 0xf8a, 0x1291, 0x10c0, 0x1291, 0x10c0, 0x13aa, +0x11e0, 0x13aa, 0x11e0, 0x1401, 0x123b, 0x1401, 0x123b, 0x1660, 0x149a, 0x1660, 0x149a, +0x1660, 0x149a, 0x1703, 0x1539, 0x1703, 0x1539, 0x15f8, 0x1427, 0x15f8, 0x1427, 0x166c, +0x1491, 0x166c, 0x1491, 0x16c4, 0x14dc, 0x16c4, 0x14dc, 0x1667, 0x146e, 0x1667, 0x146e, +0x1840, 0x1636, 0x1840, 0x1636, 0x1840, 0x1636, 0x1981, 0x1764, 0x1981, 0x1764, 0x189e, +0x166d, 0x189e, 0x166d, 0x190a, 0x16c5, 0x190a, 0x16c5, 0x19c3, 0x176a, 0x19c3, 0x176a, +0x1948, 0x16dd, 0x1948, 0x16dd, 0x1948, 0x16dd, 0x1928, 0x16ab, 0x1928, 0x16ab, 0x188f, +0x1602, 0x188f, 0x1602, 0x1793, 0x14f7, 0x1793, 0x14f7, 0x18fb, 0x1650, 0x18fb, 0x1650, +0x1a03, 0x174b, 0x1a03, 0x174b, 0x19cb, 0x1707, 0x19cb, 0x1707, 0x19cb, 0x1707, 0x18dd, +0x160d, 0x18dd, 0x160d, 0x1822, 0x1546, 0x1822, 0x1546, 0x1835, 0x154e, 0x1835, 0x154e, +0x1766, 0x1472, 0x1766, 0x1472, 0x170f, 0x140e, 0x170f, 0x140e, 0x16d3, 0x13c2, 0x16d3, +0x13c2, 0x16d3, 0x13c2, 0x17d0, 0x14b0, 0x17d0, 0x14b0, 0x187a, 0x1548, 0x187a, 0x1548, +0x186f, 0x152b, 0x186f, 0x152b, 0x18fa, 0x15a1, 0x18fa, 0x15a1, 0x1737, 0x13ca, 0x1737, +0x13ca, 0x1737, 0x13ca, 0x1562, 0x11e1, 0x1562, 0x11e1, 0x1615, 0x127f, 0x1615, 0x127f, +0x174c, 0x13a3, 0x174c, 0x13a3, 0x16ec, 0x1331, 0x16ec, 0x1331, 0x1739, 0x136f, 0x1739, +0x136f, 0x1841, 0x146b, 0x1841, 0x146b, 0x1841, 0x146b, 0x1884, 0x14a7, 0x1884, 0x14a7, +0x198b, 0x15ac, 0x198b, 0x15ac, 0x1a3f, 0x1663, 0x1a3f, 0x1663, 0x1a38, 0x1666, 0x1a38, +0x1666, 0x1b4b, 0x178a, 0x1b4b, 0x178a, 0x1bd9, 0x182f, 0x1bd9, 0x182f, 0x1bd9, 0x182f, +0x1bc5, 0x1839, 0x1bc5, 0x1839, 0x1b85, 0x181f, 0x1b85, 0x181f, 0x198f, 0x1657, 0x198f, +0x1657, 0x1859, 0x1554, 0x1859, 0x1554, 0x163f, 0x1373, 0x163f, 0x1373, 0x163f, 0x1373, +0x13e6, 0x1158, 0x13e6, 0x1158, 0x1301, 0x10b4, 0x1301, 0x10b4, 0x115a, 0xf52, 0x115a, +0xf52, 0xf4b, 0xd8b, 0xf4b, 0xd8b, 0xdcf, 0xc56, 0xdcf, 0xc56, 0xdff, 0xccd, +0xdff, 0xccd, 0xdff, 0xccd, 0xbd0, 0xae4, 0xbd0, 0xae4, 0xa82, 0x9d9, 0xa82, +0x9d9, 0xada, 0xa70, 0xada, 0xa70, 0x789, 0x75b, 0x789, 0x75b, 0x4fe, 0x506, +0x4fe, 0x506, 0x4fe, 0x506, 0x2b3, 0x2ec, 0x2b3, 0x2ec, 0xff15, 0xff79, 0xff15, +0xff79, 0xfd48, 0xfdd0, 0xfd48, 0xfdd0, 0xfc2d, 0xfcd5, 0xfc2d, 0xfcd5, 0xfa12, 0xfad4, +0xfa12, 0xfad4, 0xf949, 0xfa20, 0xf949, 0xfa20, 0xf949, 0xfa20, 0xf989, 0xfa70, 0xf989, +0xfa70, 0xf9b0, 0xfaa4, 0xf9b0, 0xfaa4, 0xf955, 0xfa51, 0xf955, 0xfa51, 0xf792, 0xf896, +0xf792, 0xf896, 0xf5c7, 0xf6d0, 0xf5c7, 0xf6d0, 0xf4d4, 0xf5e2, 0xf4d4, 0xf5e2, 0xf4d4, +0xf5e2, 0xf4c8, 0xf5dc, 0xf4c8, 0xf5dc, 0xf3bf, 0xf4d9, 0xf3bf, 0xf4d9, 0xf182, 0xf2a3, +0xf182, 0xf2a3, 0xf04f, 0xf17a, 0xf04f, 0xf17a, 0xf192, 0xf2c8, 0xf192, 0xf2c8, 0xf192, +0xf2c8, 0xf28f, 0xf3d4, 0xf28f, 0xf3d4, 0xf283, 0xf3d9, 0xf283, 0xf3d9, 0xf27c, 0xf3e5, +0xf27c, 0xf3e5, 0xf0bc, 0xf23b, 0xf0bc, 0xf23b, 0xeeac, 0xf044, 0xeeac, 0xf044, 0xedf1, +0xefa2, 0xedf1, 0xefa2, 0xedf1, 0xefa2, 0xee7a, 0xf046, 0xee7a, 0xf046, 0xed1f, 0xef08, +0xed1f, 0xef08, 0xeba6, 0xedac, 0xeba6, 0xedac, 0xebf2, 0xee14, 0xebf2, 0xee14, 0xeb88, +0xedc7, 0xeb88, 0xedc7, 0xeac9, 0xed24, 0xeac9, 0xed24, 0xeac9, 0xed24, 0xe928, 0xeb9d, +0xe928, 0xeb9d, 0xe7d1, 0xea5f, 0xe7d1, 0xea5f, 0xe746, 0xe9ec, 0xe746, 0xe9ec, 0xe753, +0xea0e, 0xe753, 0xea0e, 0xe644, 0xe913, 0xe644, 0xe913, 0xe644, 0xe913, 0xe408, 0xe6e9, +0xe408, 0xe6e9, 0xe340, 0xe632, 0xe340, 0xe632, 0xe2f9, 0xe5fa, 0xe2f9, 0xe5fa, 0xe1e8, +0xe4f7, 0xe1e8, 0xe4f7, 0xe118, 0xe434, 0xe118, 0xe434, 0xe0cc, 0xe3f6, 0xe0cc, 0xe3f6, +0xe0cc, 0xe3f6, 0xe07a, 0xe3af, 0xe07a, 0xe3af, 0xe0f5, 0xe437, 0xe0f5, 0xe437, 0xe142, +0xe490, 0xe142, 0xe490, 0xe166, 0xe4c0, 0xe166, 0xe4c0, 0xe037, 0xe39d, 0xe037, 0xe39d, +0xdee2, 0xe254, 0xdee2, 0xe254, 0xdee2, 0xe254, 0xde9e, 0xe21c, 0xde9e, 0xe21c, 0xde8d, +0xe216, 0xde8d, 0xe216, 0xdf7e, 0xe310, 0xdf7e, 0xe310, 0xdfc6, 0xe362, 0xdfc6, 0xe362, +0xe0e9, 0xe48c, 0xe0e9, 0xe48c, 0xe0e9, 0xe48c, 0xe0ac, 0xe454, 0xe0ac, 0xe454, 0xdfc4, +0xe36f, 0xdfc4, 0xe36f, 0xe0ae, 0xe45a, 0xe0ae, 0xe45a, 0xe15f, 0xe506, 0xe15f, 0xe506, +0xe2c7, 0xe667, 0xe2c7, 0xe667, 0xe2e0, 0xe675, 0xe2e0, 0xe675, 0xe2e0, 0xe675, 0xe2a6, +0xe62c, 0xe2a6, 0xe62c, 0xe29f, 0xe612, 0xe29f, 0xe612, 0xe16a, 0xe4c6, 0xe16a, 0xe4c6, +0xe18e, 0xe4cf, 0xe18e, 0xe4cf, 0xe254, 0xe576, 0xe254, 0xe576, 0xe221, 0xe521, 0xe221, +0xe521, 0xe221, 0xe521, 0xe30d, 0xe5ea, 0xe30d, 0xe5ea, 0xe437, 0xe6ee, 0xe437, 0xe6ee, +0xe43c, 0xe6cc, 0xe43c, 0xe6cc, 0xe535, 0xe79e, 0xe535, 0xe79e, 0xe81b, 0xea5e, 0xe81b, +0xea5e, 0xe81b, 0xea5e, 0xeb40, 0xed5e, 0xeb40, 0xed5e, 0xed6b, 0xef66, 0xed6b, 0xef66, +0xef8f, 0xf16a, 0xef8f, 0xf16a, 0xf078, 0xf237, 0xf078, 0xf237, 0xf2d2, 0xf479, 0xf2d2, +0xf479, 0xf438, 0xf5cd, 0xf438, 0xf5cd, 0xf438, 0xf5cd, 0xf2c7, 0xf44e, 0xf2c7, 0xf44e, +0xf39e, 0xf51d, 0xf39e, 0xf51d, 0xf3b0, 0xf52d, 0xf3b0, 0xf52d, 0xf4a0, 0xf620, 0xf4a0, +0xf620, 0xf5b9, 0xf742, 0xf5b9, 0xf742, 0xf434, 0xf5cc, 0xf434, 0xf5cc, 0xf434, 0xf5cc, +0xf4c4, 0xf66e, 0xf4c4, 0xf66e, 0xf5eb, 0xf7ad, 0xf5eb, 0xf7ad, 0xf55d, 0xf73b, 0xf55d, +0xf73b, 0xf51d, 0xf719, 0xf51d, 0xf719, 0xf549, 0xf766, 0xf549, 0xf766, 0xf549, 0xf766, +0xf63a, 0xf879, 0xf63a, 0xf879, 0xf7a1, 0xfa03, 0xf7a1, 0xfa03, 0xf65f, 0xf8e5, 0xf65f, +0xf8e5, 0xf40a, 0xf6b3, 0xf40a, 0xf6b3, 0xf32d, 0xf5f7, 0xf32d, 0xf5f7, 0xf2da, 0xf5c5, +0xf2da, 0xf5c5, 0xf2da, 0xf5c5, 0xf295, 0xf59e, 0xf295, 0xf59e, 0xf408, 0xf72c, 0xf408, +0xf72c, 0xf423, 0xf760, 0xf423, 0xf760, 0xf267, 0xf5b9, 0xf267, 0xf5b9, 0xf30b, 0xf66e, +0xf30b, 0xf66e, 0xf348, 0xf6b8, 0xf348, 0xf6b8, 0xf348, 0xf6b8, 0xf40a, 0xf784, 0xf40a, +0xf784, 0xf390, 0xf70f, 0xf390, 0xf70f, 0xf11c, 0xf49c, 0xf11c, 0xf49c, 0xf134, 0xf4b2, +0xf134, 0xf4b2, 0xf229, 0xf5a1, 0xf229, 0xf5a1, 0xf229, 0xf5a1, 0xf1f7, 0xf564, 0xf1f7, +0xf564, 0xf052, 0xf3b0, 0xf052, 0xf3b0, 0xefe9, 0xf334, 0xefe9, 0xf334, 0xf0eb, 0xf420, +0xf0eb, 0xf420, 0xf30c, 0xf625, 0xf30c, 0xf625, 0xf550, 0xf84b, 0xf550, 0xf84b, 0xf550, +0xf84b, 0xf4b7, 0xf78f, 0xf4b7, 0xf78f, 0xf3f3, 0xf6a4, 0xf3f3, 0xf6a4, 0xf3c9, 0xf64f, +0xf3c9, 0xf64f, 0xf3ad, 0xf604, 0xf3ad, 0xf604, 0xf54d, 0xf771, 0xf54d, 0xf771, 0xf4e8, +0xf6d4, 0xf4e8, 0xf6d4, 0xf4e8, 0xf6d4, 0xf3f9, 0xf5ab, 0xf3f9, 0xf5ab, 0xf658, 0xf7cb, +0xf658, 0xf7cb, 0xf786, 0xf8b8, 0xf786, 0xf8b8, 0xf950, 0xfa3d, 0xf950, 0xfa3d, 0xfa23, +0xfac9, 0xfa23, 0xfac9, 0xfa23, 0xfac9, 0xf81b, 0xf878, 0xf81b, 0xf878, 0xf80f, 0xf821, +0xf80f, 0xf821, 0xf90c, 0xf8d2, 0xf90c, 0xf8d2, 0xfae0, 0xfa59, 0xfae0, 0xfa59, 0xfd57, +0xfc83, 0xfd57, 0xfc83, 0xffbf, 0xfea0, 0xffbf, 0xfea0, 0xffbf, 0xfea0, 0xd3, 0xff6b, +0xd3, 0xff6b, 0x360, 0x1af, 0x360, 0x1af, 0x814, 0x61e, 0x814, 0x61e, 0x958, +0x720, 0x958, 0x720, 0xb55, 0x8df, 0xb55, 0x8df, 0xf4b, 0xc9b, 0xf4b, 0xc9b, +0xf4b, 0xc9b, 0x1110, 0xe2a, 0x1110, 0xe2a, 0x12ea, 0xfd4, 0x12ea, 0xfd4, 0x13bc, +0x107b, 0x13bc, 0x107b, 0x1399, 0x1032, 0x1399, 0x1032, 0x1529, 0x11a0, 0x1529, 0x11a0, +0x1529, 0x11a0, 0x15b1, 0x120c, 0x15b1, 0x120c, 0x1781, 0x13c4, 0x1781, 0x13c4, 0x18ee, +0x151e, 0x18ee, 0x151e, 0x176e, 0x1390, 0x176e, 0x1390, 0x18b3, 0x14ca, 0x18b3, 0x14ca, +0x1b2f, 0x173f, 0x1b2f, 0x173f, 0x1b2f, 0x173f, 0x1cb4, 0x18c0, 0x1cb4, 0x18c0, 0x1d12, +0x191c, 0x1d12, 0x191c, 0x1c85, 0x1890, 0x1c85, 0x1890, 0x1c27, 0x1835, 0x1c27, 0x1835, +0x1c63, 0x1875, 0x1c63, 0x1875, 0x1c63, 0x1875, 0x1d22, 0x1938, 0x1d22, 0x1938, 0x1bd7, +0x17f3, 0x1bd7, 0x17f3, 0x19f0, 0x1614, 0x19f0, 0x1614, 0x1926, 0x1551, 0x1926, 0x1551, +0x183f, 0x1472, 0x183f, 0x1472, 0x1795, 0x13d0, 0x1795, 0x13d0, 0x1795, 0x13d0, 0x1745, +0x138a, 0x1745, 0x138a, 0x15ee, 0x123c, 0x15ee, 0x123c, 0x1438, 0x1091, 0x1438, 0x1091, +0x12f4, 0xf59, 0x12f4, 0xf59, 0x1284, 0xef6, 0x1284, 0xef6, 0x12da, 0xf5a, 0x12da, +0xf5a, 0x12da, 0xf5a, 0x12f8, 0xf89, 0x12f8, 0xf89, 0x12f3, 0xf96, 0x12f3, 0xf96, +0x12c3, 0xf7a, 0x12c3, 0xf7a, 0x131f, 0xfec, 0x131f, 0xfec, 0x131e, 0x1004, 0x131e, +0x1004, 0x131e, 0x1004, 0x1311, 0x1012, 0x1311, 0x1012, 0x134e, 0x106c, 0x134e, 0x106c, +0x1440, 0x117e, 0x1440, 0x117e, 0x15a4, 0x1306, 0x15a4, 0x1306, 0x153b, 0x12c1, 0x153b, +0x12c1, 0x14e5, 0x1293, 0x14e5, 0x1293, 0x14e5, 0x1293, 0x1450, 0x1228, 0x1450, 0x1228, +0x1462, 0x1266, 0x1462, 0x1266, 0x13cb, 0x11fc, 0x13cb, 0x11fc, 0x10dc, 0xf3c, 0x10dc, +0xf3c, 0xff8, 0xe8a, 0xff8, 0xe8a, 0xefc, 0xdbf, 0xefc, 0xdbf, 0xefc, 0xdbf, +0xda7, 0xc9e, 0xda7, 0xc9e, 0xd17, 0xc42, 0xd17, 0xc42, 0xa51, 0x9b3, 0xa51, +0x9b3, 0x7da, 0x773, 0x7da, 0x773, 0x6ec, 0x6bb, 0x6ec, 0x6bb, 0x6ec, 0x6bb, +0x604, 0x60b, 0x604, 0x60b, 0x504, 0x543, 0x504, 0x543, 0x392, 0x40a, 0x392, +0x40a, 0x20c, 0x2bb, 0x20c, 0x2bb, 0xfff3, 0xda, 0xfff3, 0xda, 0xff87, 0xa6, +0xff87, 0xa6, 0xff87, 0xa6, 0xfe5d, 0xffb3, 0xfe5d, 0xffb3, 0xfa80, 0xfc0c, 0xfa80, +0xfc0c, 0xf9e4, 0xfba5, 0xf9e4, 0xfba5, 0xf96a, 0xfb5e, 0xf96a, 0xfb5e, 0xf8ea, 0xfb0e, +0xf8ea, 0xfb0e, 0xf8d7, 0xfb2a, 0xf8d7, 0xfb2a, 0xf8d7, 0xfb2a, 0xf5f6, 0xf873, 0xf5f6, +0xf873, 0xf52d, 0xf7d2, 0xf52d, 0xf7d2, 0xf4fc, 0xf7c4, 0xf4fc, 0xf7c4, 0xf4e4, 0xf7cb, +0xf4e4, 0xf7cb, 0xf663, 0xf964, 0xf663, 0xf964, 0xf663, 0xf964, 0xf466, 0xf77c, 0xf466, +0xf77c, 0xf1a5, 0xf4c9, 0xf1a5, 0xf4c9, 0xf253, 0xf581, 0xf253, 0xf581, 0xf1ee, 0xf51e, +0xf1ee, 0xf51e, 0xf06b, 0xf398, 0xf06b, 0xf398, 0xf11a, 0xf43d, 0xf11a, 0xf43d, 0xf11a, +0xf43d, 0xf142, 0xf454, 0xf142, 0xf454, 0xf0c9, 0xf3c3, 0xf0c9, 0xf3c3, 0xf1e8, 0xf4c5, +0xf1e8, 0xf4c5, 0xf262, 0xf51a, 0xf262, 0xf51a, 0xf0e3, 0xf371, 0xf0e3, 0xf371, 0xefcd, +0xf22d, 0xefcd, 0xf22d, 0xefcd, 0xf22d, 0xefd5, 0xf1ff, 0xefd5, 0xf1ff, 0xf055, 0xf246, +0xf055, 0xf246, 0xf0b0, 0xf264, 0xf0b0, 0xf264, 0xf061, 0xf1d4, 0xf061, 0xf1d4, 0xf10f, +0xf23f, 0xf10f, 0xf23f, 0xf10f, 0xf23f, 0xf322, 0xf40c, 0xf322, 0xf40c, 0xf600, 0xf6a2, +0xf600, 0xf6a2, 0xf8fa, 0xf954, 0xf8fa, 0xf954, 0xf9d5, 0xf9e6, 0xf9d5, 0xf9e6, 0xfa46, +0xfa0f, 0xfa46, 0xfa0f, 0xfc9d, 0xfc1f, 0xfc9d, 0xfc1f, 0xfc9d, 0xfc1f, 0xfd6d, 0xfca9, +0xfd6d, 0xfca9, 0xfe24, 0xfd1c, 0xfe24, 0xfd1c, 0xff6f, 0xfe25, 0xff6f, 0xfe25, 0xff26, +0xfd9e, 0xff26, 0xfd9e, 0x17e, 0xffbc, 0x17e, 0xffbc, 0x3f5, 0x1fc, 0x3f5, 0x1fc, +0x3f5, 0x1fc, 0x4c1, 0x294, 0x4c1, 0x294, 0x62c, 0x3d1, 0x62c, 0x3d1, 0x613, +0x38f, 0x613, 0x38f, 0x68f, 0x3e5, 0x68f, 0x3e5, 0x7c9, 0x4ff, 0x7c9, 0x4ff, +0x7c9, 0x4ff, 0x78a, 0x4a4, 0x78a, 0x4a4, 0x887, 0x58a, 0x887, 0x58a, 0xa72, +0x762, 0xa72, 0x762, 0xa90, 0x773, 0xa90, 0x773, 0xb56, 0x82e, 0xb56, 0x82e, +0xc5e, 0x930, 0xc5e, 0x930, 0xc5e, 0x930, 0xbc2, 0x891, 0xbc2, 0x891, 0xce8, +0x9b9, 0xce8, 0x9b9, 0xf29, 0xbfe, 0xf29, 0xbfe, 0x10ab, 0xd86, 0x10ab, 0xd86, +0x12d3, 0xfb7, 0x12d3, 0xfb7, 0x13eb, 0x10d9, 0x13eb, 0x10d9, 0x13eb, 0x10d9, 0x137c, +0x1077, 0x137c, 0x1077, 0x1424, 0x112c, 0x1424, 0x112c, 0x1485, 0x119b, 0x1485, 0x119b, +0x13ad, 0x10d2, 0x13ad, 0x10d2, 0x14b4, 0x11e7, 0x14b4, 0x11e7, 0x14b4, 0x11e7, 0x15fd, +0x133f, 0x15fd, 0x133f, 0x154c, 0x129c, 0x154c, 0x129c, 0x161c, 0x1379, 0x161c, 0x1379, +0x1695, 0x13fe, 0x1695, 0x13fe, 0x15d1, 0x1346, 0x15d1, 0x1346, 0x16c8, 0x1447, 0x16c8, +0x1447, 0x16c8, 0x1447, 0x1600, 0x1387, 0x1600, 0x1387, 0x1621, 0x13ae, 0x1621, 0x13ae, +0x1799, 0x152b, 0x1799, 0x152b, 0x15a7, 0x133c, 0x15a7, 0x133c, 0x1594, 0x132b, 0x1594, +0x132b, 0x175e, 0x14f4, 0x175e, 0x14f4, 0x175e, 0x14f4, 0x16d2, 0x1467, 0x16d2, 0x1467, +0x1685, 0x1416, 0x1685, 0x1416, 0x177a, 0x1506, 0x177a, 0x1506, 0x1730, 0x14b5, 0x1730, +0x14b5, 0x1673, 0x13ef, 0x1673, 0x13ef, 0x1673, 0x13ef, 0x1723, 0x1496, 0x1723, 0x1496, +0x16f4, 0x145d, 0x16f4, 0x145d, 0x1611, 0x1370, 0x1611, 0x1370, 0x1636, 0x1389, 0x1636, +0x1389, 0x1728, 0x1470, 0x1728, 0x1470, 0x18f0, 0x162d, 0x18f0, 0x162d, 0x18f0, 0x162d, +0x193e, 0x1671, 0x193e, 0x1671, 0x17e3, 0x150d, 0x17e3, 0x150d, 0x1854, 0x1576, 0x1854, +0x1576, 0x19cb, 0x16e8, 0x19cb, 0x16e8, 0x1b30, 0x184a, 0x1b30, 0x184a, 0x1c3c, 0x1955, +0x1c3c, 0x1955, 0x1c3c, 0x1955, 0x1b92, 0x18ae, 0x1b92, 0x18ae, 0x1c8e, 0x19b0, 0x1c8e, +0x19b0, 0x1e74, 0x1ba0, 0x1e74, 0x1ba0, 0x1db0, 0x1ae9, 0x1db0, 0x1ae9, 0x1d0c, 0x1a56, +0x1d0c, 0x1a56, 0x1d0c, 0x1a56, 0x1c66, 0x19c6, 0x1c66, 0x19c6, 0x1bca, 0x1943, 0x1bca, +0x1943, 0x1c35, 0x19cc, 0x1c35, 0x19cc, 0x1b27, 0x18df, 0x1b27, 0x18df, 0x197b, 0x1758, +0x197b, 0x1758, 0x1650, 0x1455, 0x1650, 0x1455, 0x1650, 0x1455, 0x1412, 0x1242, 0x1412, +0x1242, 0x154a, 0x13a7, 0x154a, 0x13a7, 0x13c2, 0x124f, 0x13c2, 0x124f, 0x1195, 0x1052, +0x1195, 0x1052, 0x10d8, 0xfc7, 0x10d8, 0xfc7, 0x10d8, 0xfc7, 0xf64, 0xe85, 0xf64, +0xe85, 0xf1d, 0xe70, 0xf1d, 0xe70, 0xd2a, 0xcad, 0xd2a, 0xcad, 0x930, 0x8e2, +0x930, 0x8e2, 0x624, 0x604, 0x624, 0x604, 0x45b, 0x466, 0x45b, 0x466, 0x45b, +0x466, 0x2fd, 0x332, 0x2fd, 0x332, 0x14c, 0x1a7, 0x14c, 0x1a7, 0xff33, 0xffb2, +0xff33, 0xffb2, 0xfbd9, 0xfc78, 0xfbd9, 0xfc78, 0xfa75, 0xfb33, 0xfa75, 0xfb33, 0xfb60, +0xfc39, 0xfb60, 0xfc39, 0xfb60, 0xfc39, 0xfab5, 0xfba8, 0xfab5, 0xfba8, 0xf9c3, 0xfacc, +0xf9c3, 0xfacc, 0xf906, 0xfa25, 0xf906, 0xfa25, 0xf8bd, 0xf9ef, 0xf8bd, 0xf9ef, 0xf8b9, +0xf9fe, 0xf8b9, 0xf9fe, 0xf8b9, 0xf9fe, 0xf722, 0xf878, 0xf722, 0xf878, 0xf592, 0xf6fa, +0xf592, 0xf6fa, 0xf4a2, 0xf61b, 0xf4a2, 0xf61b, 0xf474, 0xf5ff, 0xf474, 0xf5ff, 0xf503, +0xf6a0, 0xf503, 0xf6a0, 0xf556, 0xf706, 0xf556, 0xf706, 0xf556, 0xf706, 0xf4f7, 0xf6bb, +0xf4f7, 0xf6bb, 0xf300, 0xf4d9, 0xf300, 0xf4d9, 0xf10a, 0xf2fa, 0xf10a, 0xf2fa, 0xefbc, +0xf1c4, 0xefbc, 0xf1c4, 0xeebf, 0xf0e0, 0xeebf, 0xf0e0, 0xedfd, 0xf038, 0xedfd, 0xf038, +0xedfd, 0xf038, 0xeccc, 0xef21, 0xeccc, 0xef21, 0xebfc, 0xee6d, 0xebfc, 0xee6d, 0xeb6b, +0xedf8, 0xeb6b, 0xedf8, 0xeaf8, 0xeda2, 0xeaf8, 0xeda2, 0xe953, 0xec1a, 0xe953, 0xec1a, +0xe953, 0xec1a, 0xe7fa, 0xeadf, 0xe7fa, 0xeadf, 0xe837, 0xeb39, 0xe837, 0xeb39, 0xe6b6, +0xe9d5, 0xe6b6, 0xe9d5, 0xe5bd, 0xe8f8, 0xe5bd, 0xe8f8, 0xe46a, 0xe7c1, 0xe46a, 0xe7c1, +0xe20c, 0xe57e, 0xe20c, 0xe57e, 0xe20c, 0xe57e, 0xe1f9, 0xe586, 0xe1f9, 0xe586, 0xe102, +0xe4aa, 0xe102, 0xe4aa, 0xe03e, 0xe400, 0xe03e, 0xe400, 0xdfeb, 0xe3c7, 0xdfeb, 0xe3c7, +0xde56, 0xe24c, 0xde56, 0xe24c, 0xde5f, 0xe26e, 0xde5f, 0xe26e, 0xde5f, 0xe26e, 0xdef0, +0xe318, 0xdef0, 0xe318, 0xdf53, 0xe394, 0xdf53, 0xe394, 0xdecf, 0xe329, 0xdecf, 0xe329, +0xde3f, 0xe2b1, 0xde3f, 0xe2b1, 0xde8a, 0xe314, 0xde8a, 0xe314, 0xde8a, 0xe314, 0xddc4, +0xe265, 0xddc4, 0xe265, 0xdeb6, 0xe36d, 0xdeb6, 0xe36d, 0xded0, 0xe39c, 0xded0, 0xe39c, +0xddb5, 0xe294, 0xddb5, 0xe294, 0xdf7f, 0xe46f, 0xdf7f, 0xe46f, 0xdf38, 0xe436, 0xdf38, +0xe436, 0xdf38, 0xe436, 0xdf56, 0xe461, 0xdf56, 0xe461, 0xe1d7, 0xe6ea, 0xe1d7, 0xe6ea, +0xe203, 0xe71a, 0xe203, 0xe71a, 0xe239, 0xe751, 0xe239, 0xe751, 0xe174, 0xe688, 0xe174, +0xe688, 0xe026, 0xe531, 0xe026, 0xe531, 0xe026, 0xe531, 0xe028, 0xe525, 0xe028, 0xe525, +0xdf65, 0xe44f, 0xdf65, 0xe44f, 0xe05d, 0xe52f, 0xe05d, 0xe52f, 0xe222, 0xe6d8, 0xe222, +0xe6d8, 0xe2df, 0xe774, 0xe2df, 0xe774, 0xe2df, 0xe774, 0xe364, 0xe7d4, 0xe364, 0xe7d4, +0xe360, 0xe7a8, 0xe360, 0xe7a8, 0xe489, 0xe8a5, 0xe489, 0xe8a5, 0xe62f, 0xea1e, 0xe62f, +0xea1e, 0xe80b, 0xebc9, 0xe80b, 0xebc9, 0xe9c9, 0xed57, 0xe9c9, 0xed57, 0xe9c9, 0xed57, +0xea82, 0xede1, 0xea82, 0xede1, 0xecdd, 0xf00d, 0xecdd, 0xf00d, 0xef32, 0xf235, 0xef32, +0xf235, 0xf085, 0xf35d, 0xf085, 0xf35d, 0xf102, 0xf3b3, 0xf102, 0xf3b3, 0xf016, 0xf2a4, +0xf016, 0xf2a4, 0xf016, 0xf2a4, 0xf1a4, 0xf413, 0xf1a4, 0xf413, 0xf3d6, 0xf62a, 0xf3d6, +0xf62a, 0xf42a, 0xf668, 0xf42a, 0xf668, 0xf3a4, 0xf5d2, 0xf3a4, 0xf5d2, 0xf285, 0xf4a8, +0xf285, 0xf4a8, 0xf285, 0xf4a8, 0xf368, 0xf585, 0xf368, 0xf585, 0xf480, 0xf69b, 0xf480, +0xf69b, 0xf519, 0xf736, 0xf519, 0xf736, 0xf6ad, 0xf8d0, 0xf6ad, 0xf8d0, 0xf63f, 0xf86a, +0xf63f, 0xf86a, 0xf5b9, 0xf7f0, 0xf5b9, 0xf7f0, 0xf5b9, 0xf7f0, 0xf6b2, 0xf8f5, 0xf6b2, +0xf8f5, 0xf64a, 0xf89b, 0xf64a, 0xf89b, 0xf566, 0xf7c5, 0xf566, 0xf7c5, 0xf4a1, 0xf70d, +0xf4a1, 0xf70d, 0xf3dc, 0xf654, 0xf3dc, 0xf654, 0xf477, 0xf6fa, 0xf477, 0xf6fa, 0xf477, +0xf6fa, 0xf557, 0xf7e2, 0xf557, 0xf7e2, 0xf445, 0xf6d7, 0xf445, 0xf6d7, 0xf373, 0xf608, +0xf373, 0xf608, 0xf4b7, 0xf74d, 0xf4b7, 0xf74d, 0xf585, 0xf818, 0xf585, 0xf818, 0xf585, +0xf818, 0xf567, 0xf7f3, 0xf567, 0xf7f3, 0xf41a, 0xf69e, 0xf41a, 0xf69e, 0xf366, 0xf5dd, +0xf366, 0xf5dd, 0xf504, 0xf76d, 0xf504, 0xf76d, 0xf5d6, 0xf82c, 0xf5d6, 0xf82c, 0xf544, +0xf786, 0xf544, 0xf786, 0xf544, 0xf786, 0xf450, 0xf67b, 0xf450, 0xf67b, 0xf3c5, 0xf5d6, +0xf3c5, 0xf5d6, 0xf3c6, 0xf5bb, 0xf3c6, 0xf5bb, 0xf566, 0xf73d, 0xf566, 0xf73d, 0xf6ee, +0xf8a5, 0xf6ee, 0xf8a5, 0xf647, 0xf7dc, 0xf647, 0xf7dc, 0xf647, 0xf7dc, 0xf72e, 0xf89e, +0xf72e, 0xf89e, 0xf748, 0xf890, 0xf748, 0xf890, 0xf71c, 0xf83a, 0xf71c, 0xf83a, 0xf917, +0xfa08, 0xf917, 0xfa08, 0xf8db, 0xf99c, 0xf8db, 0xf99c, 0xf8db, 0xf99c, 0xf929, 0xf9b7, +0xf929, 0xf9b7, 0xfa4a, 0xfaa3, 0xfa4a, 0xfaa3, 0xfa4c, 0xfa6b, 0xfa4c, 0xfa6b, 0xfbff, +0xfbe3, 0xfbff, 0xfbe3, 0xfc1c, 0xfbc0, 0xfc1c, 0xfbc0, 0xfb3c, 0xfa9d, 0xfb3c, 0xfa9d, +0xfb3c, 0xfa9d, 0xfd63, 0xfc80, 0xfd63, 0xfc80, 0xfecf, 0xfda4, 0xfecf, 0xfda4, 0xfeb8, +0xfd44, 0xfeb8, 0xfd44, 0xff8e, 0xfdcf, 0xff8e, 0xfdcf, 0xdf, 0xfed5, 0xdf, 0xfed5, +0x37b, 0x126, 0x37b, 0x126, 0x37b, 0x126, 0x774, 0x4d5, 0x774, 0x4d5, 0xa95, +0x7ad, 0xa95, 0x7ad, 0xca4, 0x977, 0xca4, 0x977, 0xe8a, 0xb1b, 0xe8a, 0xb1b, +0x104f, 0xca2, 0x104f, 0xca2, 0x104f, 0xca2, 0x1281, 0xe9b, 0x1281, 0xe9b, 0x14d5, +0x10bb, 0x14d5, 0x10bb, 0x15ea, 0x11a3, 0x15ea, 0x11a3, 0x1752, 0x12e4, 0x1752, 0x12e4, +0x18ef, 0x1461, 0x18ef, 0x1461, 0x18ae, 0x1407, 0x18ae, 0x1407, 0x18ae, 0x1407, 0x19bb, +0x1501, 0x19bb, 0x1501, 0x1a55, 0x1591, 0x1a55, 0x1591, 0x198b, 0x14c2, 0x198b, 0x14c2, +0x1b0d, 0x1645, 0x1b0d, 0x1645, 0x1ba0, 0x16df, 0x1ba0, 0x16df, 0x1ba0, 0x16df, 0x1c97, +0x17e2, 0x1c97, 0x17e2, 0x1db8, 0x1913, 0x1db8, 0x1913, 0x1ce3, 0x1851, 0x1ce3, 0x1851, +0x1cc5, 0x184a, 0x1cc5, 0x184a, 0x1b57, 0x16f4, 0x1b57, 0x16f4, 0x194d, 0x1503, 0x194d, +0x1503, 0x194d, 0x1503, 0x17fb, 0x13cc, 0x17fb, 0x13cc, 0x1724, 0x1310, 0x1724, 0x1310, +0x16de, 0x12e3, 0x16de, 0x12e3, 0x15d6, 0x11f6, 0x15d6, 0x11f6, 0x1524, 0x115c, 0x1524, +0x115c, 0x1493, 0x10e3, 0x1493, 0x10e3, 0x1493, 0x10e3, 0x1362, 0xfca, 0x1362, 0xfca, +0x11f3, 0xe72, 0x11f3, 0xe72, 0x102f, 0xcc5, 0x102f, 0xcc5, 0xf02, 0xbb1, 0xf02, +0xbb1, 0xe55, 0xb1c, 0xe55, 0xb1c, 0xe55, 0xb1c, 0xd2e, 0xa0e, 0xd2e, 0xa0e, +0xd54, 0xa4f, 0xd54, 0xa4f, 0xefa, 0xc12, 0xefa, 0xc12, 0x1038, 0xd70, 0x1038, +0xd70, 0x1079, 0xdd4, 0x1079, 0xdd4, 0xf92, 0xd13, 0xf92, 0xd13, 0xf92, 0xd13, +0xfc3, 0xd6e, 0xfc3, 0xd6e, 0x1186, 0xf5e, 0x1186, 0xf5e, 0x1144, 0xf4c, 0x1144, +0xf4c, 0xf4e, 0xd8a, 0xf4e, 0xd8a, 0xebc, 0xd2f, 0xebc, 0xd2f, 0xeba, 0xd67, +0xeba, 0xd67, 0xeba, 0xd67, 0xe87, 0xd70, 0xe87, 0xd70, 0xdff, 0xd26, 0xdff, +0xd26, 0xc3f, 0xba4, 0xc3f, 0xba4, 0xadf, 0xa83, 0xadf, 0xa83, 0x9b6, 0x998, +0x9b6, 0x998, 0x9b6, 0x998, 0x7bb, 0x7da, 0x7bb, 0x7da, 0x617, 0x672, 0x617, +0x672, 0x411, 0x4a5, 0x411, 0x4a5, 0x209, 0x2d4, 0x209, 0x2d4, 0x1d9, 0x2d8, +0x1d9, 0x2d8, 0x160, 0x290, 0x160, 0x290, 0x160, 0x290, 0xfffc, 0x158, 0xfffc, +0x158, 0xfee3, 0x68, 0xfee3, 0x68, 0xfd73, 0xff1e, 0xfd73, 0xff1e, 0xfc66, 0xfe34, +0xfc66, 0xfe34, 0xfc03, 0xfdf0, 0xfc03, 0xfdf0, 0xfaaa, 0xfcb3, 0xfaaa, 0xfcb3, 0xfaaa, +0xfcb3, 0xf84a, 0xfa6c, 0xf84a, 0xfa6c, 0xf6bd, 0xf8f6, 0xf6bd, 0xf8f6, 0xf5b4, 0xf802, +0xf5b4, 0xf802, 0xf4f8, 0xf759, 0xf4f8, 0xf759, 0xf385, 0xf5f7, 0xf385, 0xf5f7, 0xf385, +0xf5f7, 0xf1e1, 0xf462, 0xf1e1, 0xf462, 0xf32d, 0xf5bc, 0xf32d, 0xf5bc, 0xf404, 0xf69e, +0xf404, 0xf69e, 0xf2ea, 0xf58f, 0xf2ea, 0xf58f, 0xf1fa, 0xf4a6, 0xf1fa, 0xf4a6, 0xf13f, +0xf3f0, 0xf13f, 0xf3f0, 0xf13f, 0xf3f0, 0xf196, 0xf448, 0xf196, 0xf448, 0xf338, 0xf5e9, +0xf338, 0xf5e9, 0xf3b2, 0xf65c, 0xf3b2, 0xf65c, 0xf17c, 0xf41b, 0xf17c, 0xf41b, 0xefab, +0xf239, 0xefab, 0xf239, 0xef56, 0xf1cc, 0xef56, 0xf1cc, 0xef56, 0xf1cc, 0xefe5, 0xf23d, +0xefe5, 0xf23d, 0xf055, 0xf288, 0xf055, 0xf288, 0xefe7, 0xf1ee, 0xefe7, 0xf1ee, 0xef66, +0xf139, 0xef66, 0xf139, 0xeeb1, 0xf049, 0xeeb1, 0xf049, 0xeeb1, 0xf049, 0xefd3, 0xf128, +0xefd3, 0xf128, 0xf18b, 0xf298, 0xf18b, 0xf298, 0xf14d, 0xf20a, 0xf14d, 0xf20a, 0xf10f, +0xf178, 0xf10f, 0xf178, 0xf20c, 0xf21c, 0xf20c, 0xf21c, 0xf4bd, 0xf471, 0xf4bd, 0xf471, +0xf4bd, 0xf471, 0xf7e2, 0xf738, 0xf7e2, 0xf738, 0xfa04, 0xf8fb, 0xfa04, 0xf8fb, 0xfb85, +0xfa1d, 0xfb85, 0xfa1d, 0xfd5a, 0xfb96, 0xfd5a, 0xfb96, 0x19, 0xfdfb, 0x19, 0xfdfb, +0xbb, 0xfe48, 0xbb, 0xfe48, 0xbb, 0xfe48, 0x2c, 0xfd69, 0x2c, 0xfd69, 0xf7, +0xfdea, 0xf7, 0xfdea, 0x220, 0xfed0, 0x220, 0xfed0, 0x42e, 0xa2, 0x42e, 0xa2, +0x51b, 0x15d, 0x51b, 0x15d, 0x51b, 0x15d, 0x667, 0x27d, 0x667, 0x27d, 0x86e, +0x461, 0x86e, 0x461, 0x8da, 0x4b3, 0x8da, 0x4b3, 0xb07, 0x6cd, 0xb07, 0x6cd, +0xd9b, 0x954, 0xd9b, 0x954, 0xe27, 0x9db, 0xe27, 0x9db, 0xe27, 0x9db, 0xe06, +0x9b9, 0xe06, 0x9b9, 0xe24, 0x9dc, 0xe24, 0x9dc, 0xe99, 0xa59, 0xe99, 0xa59, +0xfc8, 0xb94, 0xfc8, 0xb94, 0x102b, 0xc05, 0x102b, 0xc05, 0xf82, 0xb6c, 0xf82, +0xb6c, 0xf82, 0xb6c, 0x11bf, 0xdb9, 0x11bf, 0xdb9, 0x1429, 0x1033, 0x1429, 0x1033, +0x1459, 0x1074, 0x1459, 0x1074, 0x1566, 0x1191, 0x1566, 0x1191, 0x16d0, 0x130a, 0x16d0, +0x130a, 0x16d0, 0x130a, 0x1704, 0x134e, 0x1704, 0x134e, 0x17c3, 0x141b, 0x17c3, 0x141b, +0x18b8, 0x151f, 0x18b8, 0x151f, 0x18a3, 0x151a, 0x18a3, 0x151a, 0x1964, 0x15eb, 0x1964, +0x15eb, 0x194b, 0x15e2, 0x194b, 0x15e2, 0x194b, 0x15e2, 0x1a26, 0x16d0, 0x1a26, 0x16d0, +0x1d04, 0x19c2, 0x1d04, 0x19c2, 0x1ce3, 0x19b7, 0x1ce3, 0x19b7, 0x1cfa, 0x19e6, 0x1cfa, +0x19e6, 0x1e23, 0x1b2a, 0x1e23, 0x1b2a, 0x1ccb, 0x19ef, 0x1ccb, 0x19ef, 0x1ccb, 0x19ef, +0x1c3d, 0x1980, 0x1c3d, 0x1980, 0x1c5c, 0x19c1, 0x1c5c, 0x19c1, 0x1a18, 0x17a0, 0x1a18, +0x17a0, 0x18f1, 0x169d, 0x18f1, 0x169d, 0x1ad4, 0x18a4, 0x1ad4, 0x18a4, 0x1ad4, 0x18a4, +0x1bcd, 0x19c0, 0x1bcd, 0x19c0, 0x1bbe, 0x19d5, 0x1bbe, 0x19d5, 0x1aaa, 0x18e2, 0x1aaa, +0x18e2, 0x18bc, 0x1713, 0x18bc, 0x1713, 0x198f, 0x1801, 0x198f, 0x1801, 0x18e5, 0x1770, +0x18e5, 0x1770, 0x18e5, 0x1770, 0x16ad, 0x154d, 0x16ad, 0x154d, 0x16a3, 0x1552, 0x16a3, +0x1552, 0x167a, 0x1534, 0x167a, 0x1534, 0x17bf, 0x167f, 0x17bf, 0x167f, 0x189e, 0x1761, +0x189e, 0x1761, 0x1790, 0x1651, 0x1790, 0x1651, 0x1790, 0x1651, 0x17f1, 0x16ad, 0x17f1, +0x16ad, 0x19ee, 0x18a2, 0x19ee, 0x18a2, 0x1a28, 0x18d2, 0x1a28, 0x18d2, 0x19bd, 0x185c, +0x19bd, 0x185c, 0x1a89, 0x191d, 0x1a89, 0x191d, 0x1a89, 0x191d, 0x1898, 0x1722, 0x1898, +0x1722, 0x186f, 0x16ef, 0x186f, 0x16ef, 0x1a83, 0x18fe, 0x1a83, 0x18fe, 0x1ab0, 0x1928, +0x1ab0, 0x1928, 0x1a8b, 0x1904, 0x1a8b, 0x1904, 0x18c0, 0x1740, 0x18c0, 0x1740, 0x18c0, +0x1740, 0x18d0, 0x175b, 0x18d0, 0x175b, 0x19b0, 0x184b, 0x19b0, 0x184b, 0x17f4, 0x16a4, +0x17f4, 0x16a4, 0x16ac, 0x1577, 0x16ac, 0x1577, 0x145f, 0x1349, 0x145f, 0x1349, 0x145f, +0x1349, 0x1277, 0x1184, 0x1277, 0x1184, 0x1285, 0x11b7, 0x1285, 0x11b7, 0x10d3, 0x102d, +0x10d3, 0x102d, 0xe9c, 0xe1f, 0xe9c, 0xe1f, 0xcc0, 0xc6c, 0xcc0, 0xc6c, 0xa8b, +0xa5e, 0xa8b, 0xa5e, 0xa8b, 0xa5e, 0x8ac, 0x8a6, 0x8ac, 0x8a6, 0x613, 0x62f, +0x613, 0x62f, 0x34d, 0x389, 0x34d, 0x389, 0xfc, 0x152, 0xfc, 0x152, 0x96, +0x102, 0x96, 0x102, 0x8a, 0x107, 0x8a, 0x107, 0x8a, 0x107, 0xfdde, 0xfe65, +0xfdde, 0xfe65, 0xfafb, 0xfb88, 0xfafb, 0xfb88, 0xf865, 0xf8f1, 0xf865, 0xf8f1, 0xf800, +0xf887, 0xf800, 0xf887, 0xf930, 0xf9ae, 0xf930, 0xf9ae, 0xf930, 0xf9ae, 0xf871, 0xf8e4, +0xf871, 0xf8e4, 0xf72f, 0xf793, 0xf72f, 0xf793, 0xf537, 0xf58a, 0xf537, 0xf58a, 0xf551, +0xf594, 0xf551, 0xf594, 0xf76f, 0xf7a2, 0xf76f, 0xf7a2, 0xf699, 0xf6be, 0xf699, 0xf6be, +0xf699, 0xf6be, 0xf54a, 0xf562, 0xf54a, 0xf562, 0xf41f, 0xf42e, 0xf41f, 0xf42e, 0xf36d, +0xf378, 0xf36d, 0xf378, 0xf41f, 0xf428, 0xf41f, 0xf428, 0xf3e5, 0xf3f2, 0xf3e5, 0xf3f2, +0xf343, 0xf358, 0xf343, 0xf358, 0xf343, 0xf358, 0xf1d4, 0xf1f6, 0xf1d4, 0xf1f6, 0xf17e, +0xf1b1, 0xf17e, 0xf1b1, 0xf1aa, 0xf1f3, 0xf1aa, 0xf1f3, 0xefab, 0xf00c, 0xefab, 0xf00c, +0xed75, 0xedf2, 0xed75, 0xedf2, 0xed75, 0xedf2, 0xebdf, 0xec79, 0xebdf, 0xec79, 0xeb87, +0xec40, 0xeb87, 0xec40, 0xeb0b, 0xebe5, 0xeb0b, 0xebe5, 0xea0b, 0xeb05, 0xea0b, 0xeb05, +0xe8e6, 0xe9ff, 0xe8e6, 0xe9ff, 0xe798, 0xe8d0, 0xe798, 0xe8d0, 0xe798, 0xe8d0, 0xe812, +0xe968, 0xe812, 0xe968, 0xe94f, 0xeac0, 0xe94f, 0xeac0, 0xe8db, 0xea66, 0xe8db, 0xea66, +0xe6f6, 0xe89a, 0xe6f6, 0xe89a, 0xe5a3, 0xe75d, 0xe5a3, 0xe75d, 0xe506, 0xe6d6, 0xe506, +0xe6d6, 0xe506, 0xe6d6, 0xe51e, 0xe702, 0xe51e, 0xe702, 0xe48a, 0xe683, 0xe48a, 0xe683, +0xe304, 0xe512, 0xe304, 0xe512, 0xe258, 0xe47d, 0xe258, 0xe47d, 0xe1d4, 0xe411, 0xe1d4, +0xe411, 0xe1d4, 0xe411, 0xe265, 0xe4bb, 0xe265, 0xe4bb, 0xe303, 0xe575, 0xe303, 0xe575, +0xe1db, 0xe46c, 0xe1db, 0xe46c, 0xe127, 0xe3da, 0xe127, 0xe3da, 0xe0ea, 0xe3c2, 0xe0ea, +0xe3c2, 0xdf9c, 0xe29c, 0xdf9c, 0xe29c, 0xdf9c, 0xe29c, 0xdfac, 0xe2d6, 0xdfac, 0xe2d6, +0xe0b9, 0xe410, 0xe0b9, 0xe410, 0xe054, 0xe3d8, 0xe054, 0xe3d8, 0xe178, 0xe52a, 0xe178, +0xe52a, 0xe31c, 0xe6fc, 0xe31c, 0xe6fc, 0xe30c, 0xe719, 0xe30c, 0xe719, 0xe30c, 0xe719, +0xe31a, 0xe752, 0xe31a, 0xe752, 0xe26d, 0xe6cc, 0xe26d, 0xe6cc, 0xe1bf, 0xe641, 0xe1bf, +0xe641, 0xe173, 0xe613, 0xe173, 0xe613, 0xdfd4, 0xe48b, 0xdfd4, 0xe48b, 0xdfd4, 0xe48b, +0xde9f, 0xe368, 0xde9f, 0xe368, 0xdebf, 0xe392, 0xdebf, 0xe392, 0xdfa1, 0xe476, 0xdfa1, +0xe476, 0xe0e3, 0xe5b3, 0xe0e3, 0xe5b3, 0xe1df, 0xe6a4, 0xe1df, 0xe6a4, 0xe24b, 0xe6fd, +0xe24b, 0xe6fd, 0xe24b, 0xe6fd, 0xe2bf, 0xe758, 0xe2bf, 0xe758, 0xe4c1, 0xe93c, 0xe4c1, +0xe93c, 0xe610, 0xea68, 0xe610, 0xea68, 0xe653, 0xea85, 0xe653, 0xea85, 0xe6ec, 0xeaf7, +0xe6ec, 0xeaf7, 0xe80f, 0xebf1, 0xe80f, 0xebf1, 0xe80f, 0xebf1, 0xeb4f, 0xef09, 0xeb4f, +0xef09, 0xed87, 0xf11a, 0xed87, 0xf11a, 0xee46, 0xf1b5, 0xee46, 0xf1b5, 0xefb7, 0xf306, +0xefb7, 0xf306, 0xf18a, 0xf4bd, 0xf18a, 0xf4bd, 0xf18a, 0xf4bd, 0xf33f, 0xf65b, 0xf33f, +0xf65b, 0xf33e, 0xf649, 0xf33e, 0xf649, 0xf259, 0xf559, 0xf259, 0xf559, 0xf0ee, 0xf3e8, +0xf0ee, 0xf3e8, 0xf0dc, 0xf3d4, 0xf0dc, 0xf3d4, 0xf356, 0xf653, 0xf356, 0xf653, 0xf356, +0xf653, 0xf442, 0xf747, 0xf442, 0xf747, 0xf370, 0xf681, 0xf370, 0xf681, 0xf36d, 0xf68c, +0xf36d, 0xf68c, 0xf466, 0xf795, 0xf466, 0xf795, 0xf531, 0xf870, 0xf531, 0xf870, 0xf4fb, +0xf849, 0xf4fb, 0xf849, 0xf4fb, 0xf849, 0xf3d0, 0xf72b, 0xf3d0, 0xf72b, 0xf1ff, 0xf566, +0xf1ff, 0xf566, 0xf19d, 0xf50b, 0xf19d, 0xf50b, 0xf1fe, 0xf570, 0xf1fe, 0xf570, 0xf213, +0xf585, 0xf213, 0xf585, 0xf213, 0xf585, 0xf1cf, 0xf53c, 0xf1cf, 0xf53c, 0xf053, 0xf3b6, +0xf053, 0xf3b6, 0xf176, 0xf4cb, 0xf176, 0xf4cb, 0xf362, 0xf6a4, 0xf362, 0xf6a4, 0xf2e9, +0xf614, 0xf2e9, 0xf614, 0xf223, 0xf533, 0xf223, 0xf533, 0xf223, 0xf533, 0xf138, 0xf42a, +0xf138, 0xf42a, 0xf21d, 0xf4ef, 0xf21d, 0xf4ef, 0xf41b, 0xf6cb, 0xf41b, 0xf6cb, 0xf53b, +0xf7c8, 0xf53b, 0xf7c8, 0xf3da, 0xf643, 0xf3da, 0xf643, 0xf238, 0xf47e, 0xf238, 0xf47e, +0xf238, 0xf47e, 0xf32b, 0xf54d, 0xf32b, 0xf54d, 0xf417, 0xf616, 0xf417, 0xf616, 0xf5d9, +0xf7b6, 0xf5d9, 0xf7b6, 0xf5b9, 0xf774, 0xf5b9, 0xf774, 0xf3f5, 0xf58e, 0xf3f5, 0xf58e, +0xf3f5, 0xf58e, 0xf487, 0xf5ff, 0xf487, 0xf5ff, 0xf610, 0xf766, 0xf610, 0xf766, 0xf803, +0xf936, 0xf803, 0xf936, 0xf7e6, 0xf8f4, 0xf7e6, 0xf8f4, 0xf61d, 0xf704, 0xf61d, 0xf704, +0xf612, 0xf6ce, 0xf612, 0xf6ce, 0xf612, 0xf6ce, 0xf7a7, 0xf835, 0xf7a7, 0xf835, 0xf860, +0xf8bc, 0xf860, 0xf8bc, 0xf865, 0xf889, 0xf865, 0xf889, 0xf98e, 0xf976, 0xf98e, 0xf976, +0xfab4, 0xfa5c, 0xfab4, 0xfa5c, 0xfcad, 0xfc0f, 0xfcad, 0xfc0f, 0xfcad, 0xfc0f, 0xfdf7, +0xfd0e, 0xfdf7, 0xfd0e, 0xfda4, 0xfc6e, 0xfda4, 0xfc6e, 0xfebf, 0xfd37, 0xfebf, 0xfd37, +0xe5, 0xff09, 0xe5, 0xff09, 0x462, 0x231, 0x462, 0x231, 0x462, 0x231, 0x68b, +0x404, 0x68b, 0x404, 0x682, 0x3a8, 0x682, 0x3a8, 0x871, 0x545, 0x871, 0x545, +0xbb4, 0x839, 0xbb4, 0x839, 0xf76, 0xbb3, 0xf76, 0xbb3, 0x11cd, 0xdc7, 0x11cd, +0xdc7, 0x11cd, 0xdc7, 0x12ef, 0xead, 0x12ef, 0xead, 0x1466, 0xff1, 0x1466, 0xff1, +0x157a, 0x10da, 0x157a, 0x10da, 0x177f, 0x12bd, 0x177f, 0x12bd, 0x1870, 0x1397, 0x1870, +0x1397, 0x1870, 0x1397, 0x18bf, 0x13d6, 0x18bf, 0x13d6, 0x193b, 0x144d, 0x193b, 0x144d, +0x19b1, 0x14c6, 0x19b1, 0x14c6, 0x1bec, 0x170b, 0x1bec, 0x170b, 0x1cdf, 0x1810, 0x1cdf, +0x1810, 0x1ce0, 0x1828, 0x1ce0, 0x1828, 0x1ce0, 0x1828, 0x1ce2, 0x1847, 0x1ce2, 0x1847, +0x1ba2, 0x1726, 0x1ba2, 0x1726, 0x1b02, 0x16a8, 0x1b02, 0x16a8, 0x19ef, 0x15b9, 0x19ef, +0x15b9, 0x188c, 0x1479, 0x188c, 0x1479, 0x18d5, 0x14e4, 0x18d5, 0x14e4, 0x18d5, 0x14e4, +0x18e2, 0x1511, 0x18e2, 0x1511, 0x1874, 0x14c2, 0x1874, 0x14c2, 0x17ee, 0x1457, 0x17ee, +0x1457, 0x170c, 0x138f, 0x170c, 0x138f, 0x16c0, 0x1358, 0x16c0, 0x1358, 0x16c0, 0x1358, +0x162a, 0x12d7, 0x162a, 0x12d7, 0x1543, 0x1200, 0x1543, 0x1200, 0x143d, 0x110a, 0x143d, +0x110a, 0x131c, 0xff9, 0x131c, 0xff9, 0x11c0, 0xeac, 0x11c0, 0xeac, 0x110a, 0xe06, +0x110a, 0xe06, 0x110a, 0xe06, 0x12e3, 0xff0, 0x12e3, 0xff0, 0x13ed, 0x110e, 0x13ed, +0x110e, 0x12ff, 0x1037, 0x12ff, 0x1037, 0x12d5, 0x1029, 0x12d5, 0x1029, 0x1332, 0x10a6, +0x1332, 0x10a6, 0x13dd, 0x1176, 0x13dd, 0x1176, 0x13dd, 0x1176, 0x13c5, 0x1188, 0x13c5, +0x1188, 0x1289, 0x107a, 0x1289, 0x107a, 0x12e2, 0x1107, 0x12e2, 0x1107, 0x1374, 0x11d0, +0x1374, 0x11d0, 0x136e, 0x1206, 0x136e, 0x1206, 0x136e, 0x1206, 0x1406, 0x12dc, 0x1406, +0x12dc, 0x1217, 0x112e, 0x1217, 0x112e, 0x104a, 0xfa2, 0x104a, 0xfa2, 0x102a, 0xfc4, +0x102a, 0xfc4, 0xe73, 0xe4d, 0xe73, 0xe4d, 0xbe8, 0xc02, 0xbe8, 0xc02, 0xbe8, +0xc02, 0x8d0, 0x928, 0x8d0, 0x928, 0x720, 0x7b1, 0x720, 0x7b1, 0x734, 0x7fc, +0x734, 0x7fc, 0x6e3, 0x7dd, 0x6e3, 0x7dd, 0x50e, 0x636, 0x50e, 0x636, 0x2ee, +0x43f, 0x2ee, 0x43f, 0x2ee, 0x43f, 0x292, 0x40a, 0x292, 0x40a, 0x2b0, 0x44a, +0x2b0, 0x44a, 0x355, 0x50d, 0x355, 0x50d, 0x1a5, 0x379, 0x1a5, 0x379, 0xfdaa, +0xff98, 0xfdaa, 0xff98, 0xfdaa, 0xff98, 0xfc93, 0xfe9b, 0xfc93, 0xfe9b, 0xfbd6, 0xfdf6, +0xfbd6, 0xfdf6, 0xfafd, 0xfd34, 0xfafd, 0xfd34, 0xfa37, 0xfc87, 0xfa37, 0xfc87, 0xf7ff, +0xfa68, 0xf7ff, 0xfa68, 0xf7f0, 0xfa74, 0xf7f0, 0xfa74, 0xf7f0, 0xfa74, 0xf8e8, 0xfb89, +0xf8e8, 0xfb89, 0xf831, 0xfaf0, 0xf831, 0xfaf0, 0xf5eb, 0xf8c8, 0xf5eb, 0xf8c8, 0xf4c6, +0xf7c3, 0xf4c6, 0xf7c3, 0xf5c3, 0xf8e0, 0xf5c3, 0xf8e0, 0xf62f, 0xf96b, 0xf62f, 0xf96b, +0xf62f, 0xf96b, 0xf5e1, 0xf93b, 0xf5e1, 0xf93b, 0xf37f, 0xf6f4, 0xf37f, 0xf6f4, 0xf1d4, +0xf561, 0xf1d4, 0xf561, 0xf0e2, 0xf481, 0xf0e2, 0xf481, 0xef0c, 0xf2b8, 0xef0c, 0xf2b8, +0xef0c, 0xf2b8, 0xef38, 0xf2ea, 0xef38, 0xf2ea, 0xed83, 0xf133, 0xed83, 0xf133, 0xebad, +0xef52, 0xebad, 0xef52, 0xec7b, 0xf00d, 0xec7b, 0xf00d, 0xed76, 0xf0ea, 0xed76, 0xf0ea, +0xee76, 0xf1c4, 0xee76, 0xf1c4, 0xee76, 0xf1c4, 0xeedb, 0xf1f8, 0xeedb, 0xf1f8, 0xef11, +0xf1f4, 0xef11, 0xf1f4, 0xef17, 0xf1b7, 0xef17, 0xf1b7, 0xf0c3, 0xf319, 0xf0c3, 0xf319, +0xf291, 0xf495, 0xf291, 0xf495, 0xf2c0, 0xf46e, 0xf2c0, 0xf46e, 0xf2c0, 0xf46e, 0xf481, +0xf5d5, 0xf481, 0xf5d5, 0xf62b, 0xf721, 0xf62b, 0xf721, 0xf7cd, 0xf865, 0xf7cd, 0xf865, +0xf9cb, 0xfa05, 0xf9cb, 0xfa05, 0xfa43, 0xfa21, 0xfa43, 0xfa21, 0xfa43, 0xfa21, 0xfbab, +0xfb2f, 0xfbab, 0xfb2f, 0xfd62, 0xfc90, 0xfd62, 0xfc90, 0xfdfb, 0xfcd9, 0xfdfb, 0xfcd9, +0xfea9, 0xfd3e, 0xfea9, 0xfd3e, 0xff92, 0xfde3, 0xff92, 0xfde3, 0xe4, 0xfef8, 0xe4, +0xfef8, 0xe4, 0xfef8, 0x26d, 0x4b, 0x26d, 0x4b, 0x48e, 0x23e, 0x48e, 0x23e, +0x723, 0x4ac, 0x723, 0x4ac, 0x90e, 0x675, 0x90e, 0x675, 0x957, 0x6a2, 0x957, +0x6a2, 0x98e, 0x6c3, 0x98e, 0x6c3, 0x98e, 0x6c3, 0xa92, 0x7b3, 0xa92, 0x7b3, +0xa94, 0x7a5, 0xa94, 0x7a5, 0xa6a, 0x76e, 0xa6a, 0x76e, 0xaf6, 0x7ed, 0xaf6, +0x7ed, 0xc47, 0x932, 0xc47, 0x932, 0xc47, 0x932, 0xd5b, 0xa3a, 0xd5b, 0xa3a, +0xe7d, 0xb50, 0xe7d, 0xb50, 0x1034, 0xcfa, 0x1034, 0xcfa, 0x113e, 0xdf6, 0x113e, +0xdf6, 0x122a, 0xed3, 0x122a, 0xed3, 0x12bd, 0xf56, 0x12bd, 0xf56, 0x12bd, 0xf56, +0x12ec, 0xf75, 0x12ec, 0xf75, 0x12a0, 0xf19, 0x12a0, 0xf19, 0x13d0, 0x103a, 0x13d0, +0x103a, 0x1616, 0x1272, 0x1616, 0x1272, 0x167c, 0x12cb, 0x167c, 0x12cb, 0x16fa, 0x1340, +0x16fa, 0x1340, 0x16fa, 0x1340, 0x1722, 0x1360, 0x1722, 0x1360, 0x17bf, 0x13f9, 0x17bf, +0x13f9, 0x1928, 0x1563, 0x1928, 0x1563, 0x18c3, 0x1502, 0x18c3, 0x1502, 0x17ff, 0x1446, +0x17ff, 0x1446, 0x17ff, 0x1446, 0x16dc, 0x1330, 0x16dc, 0x1330, 0x1548, 0x11ad, 0x1548, +0x11ad, 0x156f, 0x11e8, 0x156f, 0x11e8, 0x16c8, 0x1359, 0x16c8, 0x1359, 0x16d1, 0x137c, +0x16d1, 0x137c, 0x1685, 0x134a, 0x1685, 0x134a, 0x1685, 0x134a, 0x163b, 0x131c, 0x163b, +0x131c, 0x14ec, 0x11e9, 0x14ec, 0x11e9, 0x154b, 0x1262, 0x154b, 0x1262, 0x151f, 0x124e, +0x151f, 0x124e, 0x12b3, 0xff8, 0x12b3, 0xff8, 0x12ac, 0x1004, 0x12ac, 0x1004, 0x12ac, +0x1004, 0x1406, 0x116c, 0x1406, 0x116c, 0x141b, 0x118b, 0x141b, 0x118b, 0x155b, 0x12d0, +0x155b, 0x12d0, 0x16fd, 0x1474, 0x16fd, 0x1474, 0x1712, 0x1486, 0x1712, 0x1486, 0x1712, +0x1486, 0x180b, 0x1579, 0x180b, 0x1579, 0x189d, 0x1601, 0x189d, 0x1601, 0x183e, 0x1597, +0x183e, 0x1597, 0x1860, 0x15ad, 0x1860, 0x15ad, 0x177d, 0x14be, 0x177d, 0x14be, 0x1892, +0x15c8, 0x1892, 0x15c8, 0x1892, 0x15c8, 0x1a5b, 0x1788, 0x1a5b, 0x1788, 0x1969, 0x1691, +0x1969, 0x1691, 0x18c1, 0x15e8, 0x18c1, 0x15e8, 0x1867, 0x1593, 0x1867, 0x1593, 0x1876, +0x15ad, 0x1876, 0x15ad, 0x1876, 0x15ad, 0x1a34, 0x177d, 0x1a34, 0x177d, 0x1b0a, 0x186c, +0x1b0a, 0x186c, 0x1919, 0x169b, 0x1919, 0x169b, 0x183c, 0x15e5, 0x183c, 0x15e5, 0x1855, +0x162c, 0x1855, 0x162c, 0x168e, 0x149a, 0x168e, 0x149a, 0x168e, 0x149a, 0x15b4, 0x13f9, +0x15b4, 0x13f9, 0x13d6, 0x1259, 0x13d6, 0x1259, 0x114b, 0x1010, 0x114b, 0x1010, 0x1026, +0xf2f, 0x1026, 0xf2f, 0xd80, 0xcce, 0xd80, 0xcce, 0xa65, 0x9f7, 0xa65, 0x9f7, +0xa65, 0x9f7, 0x897, 0x86c, 0x897, 0x86c, 0x7ac, 0x7c0, 0x7ac, 0x7c0, 0x689, +0x6da, 0x689, 0x6da, 0x58b, 0x613, 0x58b, 0x613, 0x3a4, 0x45e, 0x3a4, 0x45e, +0x3a4, 0x45e, 0x18e, 0x274, 0x18e, 0x274, 0x24, 0x12f, 0x24, 0x12f, 0xfe19, +0xff43, 0xfe19, 0xff43, 0xfd9b, 0xfedd, 0xfd9b, 0xfedd, 0xfc1e, 0xfd74, 0xfc1e, 0xfd74, +0xfa6a, 0xfbcd, 0xfa6a, 0xfbcd, 0xfa6a, 0xfbcd, 0xfb37, 0xfca3, 0xfb37, 0xfca3, 0xfb63, +0xfcd4, 0xfb63, 0xfcd4, 0xfba6, 0xfd19, 0xfba6, 0xfd19, 0xfcde, 0xfe51, 0xfcde, 0xfe51, +0xfd0c, 0xfe7e, 0xfd0c, 0xfe7e, 0xfc0b, 0xfd7d, 0xfc0b, 0xfd7d, 0xfc0b, 0xfd7d, 0xfba8, +0xfd19, 0xfba8, 0xfd19, 0xfa3a, 0xfbad, 0xfa3a, 0xfbad, 0xf878, 0xf9ef, 0xf878, 0xf9ef, +0xf81b, 0xf998, 0xf81b, 0xf998, 0xf70a, 0xf890, 0xf70a, 0xf890, 0xf70a, 0xf890, 0xf6cc, +0xf85f, 0xf6cc, 0xf85f, 0xf5e1, 0xf784, 0xf5e1, 0xf784, 0xf3e8, 0xf59e, 0xf3e8, 0xf59e, +0xf378, 0xf543, 0xf378, 0xf543, 0xf248, 0xf42b, 0xf248, 0xf42b, 0xf03c, 0xf237, 0xf03c, +0xf237, 0xf03c, 0xf237, 0xee92, 0xf0a7, 0xee92, 0xf0a7, 0xecef, 0xef1e, 0xecef, 0xef1e, +0xeac7, 0xed10, 0xeac7, 0xed10, 0xea3c, 0xec9d, 0xea3c, 0xec9d, 0xea6b, 0xece4, 0xea6b, +0xece4, 0xe9b5, 0xec43, 0xe9b5, 0xec43, 0xe9b5, 0xec43, 0xeacb, 0xed6c, 0xeacb, 0xed6c, +0xe9fa, 0xecab, 0xe9fa, 0xecab, 0xe8d6, 0xeb96, 0xe8d6, 0xeb96, 0xe8a3, 0xeb70, 0xe8a3, +0xeb70, 0xe69f, 0xe976, 0xe69f, 0xe976, 0xe69f, 0xe976, 0xe5dd, 0xe8bd, 0xe5dd, 0xe8bd, +0xe419, 0xe701, 0xe419, 0xe701, 0xe329, 0xe618, 0xe329, 0xe618, 0xe294, 0xe58b, 0xe294, +0xe58b, 0xe07f, 0xe380, 0xe07f, 0xe380, 0xe106, 0xe411, 0xe106, 0xe411, 0xe106, 0xe411, +0xe1ac, 0xe4c4, 0xe1ac, 0xe4c4, 0xe1e2, 0xe509, 0xe1e2, 0xe509, 0xe11a, 0xe454, 0xe11a, +0xe454, 0xdfce, 0xe31e, 0xdfce, 0xe31e, 0xe011, 0xe37a, 0xe011, 0xe37a, 0xdfc6, 0xe34b, +0xdfc6, 0xe34b, 0xdfc6, 0xe34b, 0xdfc3, 0xe367, 0xdfc3, 0xe367, 0xe05a, 0xe420, 0xe05a, +0xe420, 0xe03d, 0xe427, 0xe03d, 0xe427, 0xe07f, 0xe48d, 0xe07f, 0xe48d, 0xe127, 0xe55a, +0xe127, 0xe55a, 0xe127, 0xe55a, 0xe005, 0xe45b, 0xe005, 0xe45b, 0xde61, 0xe2d7, 0xde61, +0xe2d7, 0xde68, 0xe2fc, 0xde68, 0xe2fc, 0xddac, 0xe25a, 0xddac, 0xe25a, 0xdc36, 0xe0f7, +0xdc36, 0xe0f7, 0xdc0c, 0xe0db, 0xdc0c, 0xe0db, 0xdc0c, 0xe0db, 0xdbf5, 0xe0ca, 0xdbf5, +0xe0ca, 0xdcbc, 0xe18f, 0xdcbc, 0xe18f, 0xdf00, 0xe3c9, 0xdf00, 0xe3c9, 0xdf1e, 0xe3d6, +0xdf1e, 0xe3d6, 0xdea7, 0xe343, 0xdea7, 0xe343, 0xe0a8, 0xe522, 0xe0a8, 0xe522, 0xe0a8, +0xe522, 0xe1d4, 0xe624, 0xe1d4, 0xe624, 0xe2bf, 0xe6de, 0xe2bf, 0xe6de, 0xe3ad, 0xe795, +0xe3ad, 0xe795, 0xe326, 0xe6d2, 0xe326, 0xe6d2, 0xe4b7, 0xe824, 0xe4b7, 0xe824, 0xe4b7, +0xe824, 0xe773, 0xea9e, 0xe773, 0xea9e, 0xe9ba, 0xeca1, 0xe9ba, 0xeca1, 0xeb63, 0xee08, +0xeb63, 0xee08, 0xec1e, 0xee82, 0xec1e, 0xee82, 0xed9a, 0xefc0, 0xed9a, 0xefc0, 0xef1d, +0xf109, 0xef1d, 0xf109, 0xef1d, 0xf109, 0xef52, 0xf108, 0xef52, 0xf108, 0xee80, 0xf005, +0xee80, 0xf005, 0xefc4, 0xf11f, 0xefc4, 0xf11f, 0xf1c7, 0xf2fd, 0xf1c7, 0xf2fd, 0xf264, +0xf37c, 0xf264, 0xf37c, 0xf399, 0xf499, 0xf399, 0xf499, 0xf399, 0xf499, 0xf311, 0xf3ff, +0xf311, 0xf3ff, 0xf2bb, 0xf39d, 0xf2bb, 0xf39d, 0xf542, 0xf61d, 0xf542, 0xf61d, 0xf6e0, +0xf7b7, 0xf6e0, 0xf7b7, 0xf63b, 0xf713, 0xf63b, 0xf713, 0xf63b, 0xf713, 0xf5fe, 0xf6d7, +0xf5fe, 0xf6d7, 0xf6b4, 0xf792, 0xf6b4, 0xf792, 0xf6b9, 0xf79b, 0xf6b9, 0xf79b, 0xf7e8, +0xf8d0, 0xf7e8, 0xf8d0, 0xf7a0, 0xf88d, 0xf7a0, 0xf88d, 0xf5d6, 0xf6c6, 0xf5d6, 0xf6c6, +0xf5d6, 0xf6c6, 0xf6fc, 0xf7ee, 0xf6fc, 0xf7ee, 0xf68c, 0xf77f, 0xf68c, 0xf77f, 0xf62e, +0xf71e, 0xf62e, 0xf71e, 0xf707, 0xf7f4, 0xf707, 0xf7f4, 0xf634, 0xf71c, 0xf634, 0xf71c, +0xf793, 0xf875, 0xf793, 0xf875, 0xf793, 0xf875, 0xf8c6, 0xf9a0, 0xf8c6, 0xf9a0, 0xf93e, +0xfa0f, 0xf93e, 0xfa0f, 0xfa31, 0xfaf9, 0xfa31, 0xfaf9, 0xf971, 0xfa30, 0xf971, 0xfa30, +0xf8f7, 0xf9ad, 0xf8f7, 0xf9ad, 0xf8f7, 0xf9ad, 0xf96f, 0xfa1e, 0xf96f, 0xfa1e, 0xfa0c, +0xfab3, 0xfa0c, 0xfab3, 0xf94b, 0xf9ec, 0xf94b, 0xf9ec, 0xf896, 0xf932, 0xf896, 0xf932, +0xf9b5, 0xfa4c, 0xf9b5, 0xfa4c, 0xfaae, 0xfb41, 0xfaae, 0xfb41, 0xfaae, 0xfb41, 0xfc95, +0xfd25, 0xfc95, 0xfd25, 0xfdd2, 0xfe5e, 0xfdd2, 0xfe5e, 0xfc69, 0xfcf0, 0xfc69, 0xfcf0, +0xfae2, 0xfb63, 0xfae2, 0xfb63, 0xf9ea, 0xfa63, 0xf9ea, 0xfa63, 0xfa73, 0xfae1, 0xfa73, +0xfae1, 0xfa73, 0xfae1, 0xfbf2, 0xfc51, 0xfbf2, 0xfc51, 0xfc2e, 0xfc7b, 0xfc2e, 0xfc7b, +0xfc7d, 0xfcb3, 0xfc7d, 0xfcb3, 0xfe34, 0xfe4d, 0xfe34, 0xfe4d, 0x14, 0xc, 0x14, +0xc, 0x14, 0xc, 0x175, 0x146, 0x175, 0x146, 0x292, 0x237, 0x292, 0x237, +0x36b, 0x2df, 0x36b, 0x2df, 0x3fc, 0x33b, 0x3fc, 0x33b, 0x4ee, 0x3f5, 0x4ee, +0x3f5, 0x60c, 0x4d8, 0x60c, 0x4d8, 0x60c, 0x4d8, 0x664, 0x4f2, 0x664, 0x4f2, +0x7eb, 0x63a, 0x7eb, 0x63a, 0xa2f, 0x840, 0xa2f, 0x840, 0xccc, 0xaa0, 0xccc, +0xaa0, 0x106a, 0xe03, 0x106a, 0xe03, 0x106a, 0xe03, 0x11c4, 0xf27, 0x11c4, 0xf27, +0x1281, 0xfb2, 0x1281, 0xfb2, 0x1436, 0x113b, 0x1436, 0x113b, 0x1473, 0x1153, 0x1473, +0x1153, 0x14c6, 0x1187, 0x14c6, 0x1187, 0x15cb, 0x1275, 0x15cb, 0x1275, 0x15cb, 0x1275, +0x15aa, 0x1245, 0x15aa, 0x1245, 0x1648, 0x12dc, 0x1648, 0x12dc, 0x1797, 0x142a, 0x1797, +0x142a, 0x17a9, 0x1444, 0x17a9, 0x1444, 0x17e2, 0x148a, 0x17e2, 0x148a, 0x172f, 0x13eb, +0x172f, 0x13eb, 0x172f, 0x13eb, 0x15c1, 0x1295, 0x15c1, 0x1295, 0x154a, 0x123a, 0x154a, +0x123a, 0x149c, 0x11ac, 0x149c, 0x11ac, 0x1395, 0x10c5, 0x1395, 0x10c5, 0x130b, 0x105d, +0x130b, 0x105d, 0x130b, 0x105d, 0x129d, 0x1010, 0x129d, 0x1010, 0x12ba, 0x104d, 0x12ba, +0x104d, 0x1375, 0x1127, 0x1375, 0x1127, 0x124a, 0x1017, 0x124a, 0x1017, 0x10cd, 0xeb3, +0x10cd, 0xeb3, 0x113c, 0xf38, 0x113c, 0xf38, 0x113c, 0xf38, 0x1099, 0xea9, 0x1099, +0xea9, 0xf1d, 0xd3b, 0xf1d, 0xd3b, 0xe69, 0xc94, 0xe69, 0xc94, 0xd04, 0xb39, +0xd04, 0xb39, 0xd4c, 0xb88, 0xd4c, 0xb88, 0xf28, 0xd6b, 0xf28, 0xd6b, 0xf28, +0xd6b, 0xe88, 0xcd1, 0xe88, 0xcd1, 0xde5, 0xc33, 0xde5, 0xc33, 0xe71, 0xcc6, +0xe71, 0xcc6, 0xe56, 0xcb3, 0xe56, 0xcb3, 0xf00, 0xd66, 0xf00, 0xd66, 0xf00, +0xd66, 0xe5e, 0xcd0, 0xe5e, 0xcd0, 0xc50, 0xad0, 0xc50, 0xad0, 0xcd4, 0xb66, +0xcd4, 0xb66, 0xd8f, 0xc35, 0xd8f, 0xc35, 0xe72, 0xd30, 0xe72, 0xd30, 0xee2, +0xdbb, 0xee2, 0xdbb, 0xee2, 0xdbb, 0xd03, 0xbf9, 0xd03, 0xbf9, 0xc30, 0xb46, +0xc30, 0xb46, 0xb72, 0xaa9, 0xb72, 0xaa9, 0xa68, 0x9c1, 0xa68, 0x9c1, 0x901, +0x87d, 0x901, 0x87d, 0x7d9, 0x778, 0x7d9, 0x778, 0x7d9, 0x778, 0x6c1, 0x682, +0x6c1, 0x682, 0x520, 0x502, 0x520, 0x502, 0x505, 0x506, 0x505, 0x506, 0x3a6, +0x3c5, 0x3a6, 0x3c5, 0x2ef, 0x32a, 0x2ef, 0x32a, 0x2ef, 0x32a, 0x35c, 0x3af, +0x35c, 0x3af, 0x254, 0x2bf, 0x254, 0x2bf, 0x217, 0x296, 0x217, 0x296, 0xcb, +0x15d, 0xcb, 0x15d, 0xfe75, 0xff18, 0xfe75, 0xff18, 0xfe23, 0xfed6, 0xfe23, 0xfed6, +0xfe23, 0xfed6, 0xfe83, 0xff45, 0xfe83, 0xff45, 0xfd96, 0xfe67, 0xfd96, 0xfe67, 0xfc40, +0xfd20, 0xfc40, 0xfd20, 0xfafb, 0xfbec, 0xfafb, 0xfbec, 0xfa00, 0xfb02, 0xfa00, 0xfb02, +0xf9f9, 0xfb0e, 0xf9f9, 0xfb0e, 0xf9f9, 0xfb0e, 0xf99f, 0xfac8, 0xf99f, 0xfac8, 0xf916, +0xfa56, 0xf916, 0xfa56, 0xf8b9, 0xfa12, 0xf8b9, 0xfa12, 0xf863, 0xf9d5, 0xf863, 0xf9d5, +0xf931, 0xfabe, 0xf931, 0xfabe, 0xf931, 0xfabe, 0xf936, 0xfae0, 0xf936, 0xfae0, 0xf743, +0xf908, 0xf743, 0xf908, 0xf51c, 0xf6fc, 0xf51c, 0xf6fc, 0xf3da, 0xf5d3, 0xf3da, 0xf5d3, +0xf2c5, 0xf4d5, 0xf2c5, 0xf4d5, 0xf1ad, 0xf3d0, 0xf1ad, 0xf3d0, 0xf1ad, 0xf3d0, 0xf0ff, +0xf330, 0xf0ff, 0xf330, 0xef6a, 0xf1a4, 0xef6a, 0xf1a4, 0xf01d, 0xf259, 0xf01d, 0xf259, +0xf26b, 0xf4a2, 0xf26b, 0xf4a2, 0xf330, 0xf55a, 0xf330, 0xf55a, 0xf400, 0xf615, 0xf400, +0xf615, 0xf400, 0xf615, 0xf35b, 0xf553, 0xf35b, 0xf553, 0xf3e5, 0xf5b6, 0xf3e5, 0xf5b6, +0xf54a, 0xf6ed, 0xf54a, 0xf6ed, 0xf541, 0xf6ad, 0xf541, 0xf6ad, 0xf60d, 0xf73c, 0xf60d, +0xf73c, 0xf60d, 0xf73c, 0xf607, 0xf6f1, 0xf607, 0xf6f1, 0xf775, 0xf814, 0xf775, 0xf814, +0xfa81, 0xfad2, 0xfa81, 0xfad2, 0xfbfd, 0xfbfb, 0xfbfd, 0xfbfb, 0xfd44, 0xfced, 0xfd44, +0xfced, 0xfe2f, 0xfd83, 0xfe2f, 0xfd83, 0xfe2f, 0xfd83, 0xff8f, 0xfe8e, 0xff8f, 0xfe8e, +0x16e, 0x1a, 0x16e, 0x1a, 0x18a, 0xffe6, 0x18a, 0xffe6, 0x129, 0xff38, 0x129, +0xff38, 0x281, 0x49, 0x281, 0x49, 0x4a6, 0x22e, 0x4a6, 0x22e, 0x4a6, 0x22e, +0x719, 0x466, 0x719, 0x466, 0x969, 0x681, 0x969, 0x681, 0x9e7, 0x6d2, 0x9e7, +0x6d2, 0xaaa, 0x770, 0xaaa, 0x770, 0xbc1, 0x867, 0xbc1, 0x867, 0xbc1, 0x867, +0xbb5, 0x843, 0xbb5, 0x843, 0xcdb, 0x956, 0xcdb, 0x956, 0xdb3, 0xa22, 0xdb3, +0xa22, 0xd28, 0x98f, 0xd28, 0x98f, 0xdfd, 0xa61, 0xdfd, 0xa61, 0xf08, 0xb6c, +0xf08, 0xb6c, 0xf08, 0xb6c, 0xfd3, 0xc39, 0xfd3, 0xc39, 0x11b1, 0xe1d, 0x11b1, +0xe1d, 0x12a9, 0xf1c, 0x12a9, 0xf1c, 0x12fc, 0xf78, 0x12fc, 0xf78, 0x1447, 0x10cc, +0x1447, 0x10cc, 0x152d, 0x11bc, 0x152d, 0x11bc, 0x152d, 0x11bc, 0x154a, 0x11e4, 0x154a, +0x11e4, 0x160f, 0x12b4, 0x160f, 0x12b4, 0x16f2, 0x13a3, 0x16f2, 0x13a3, 0x1876, 0x1533, +0x1876, 0x1533, 0x1a7e, 0x1749, 0x1a7e, 0x1749, 0x1a7e, 0x1749, 0x19f0, 0x16c9, 0x19f0, +0x16c9, 0x1900, 0x15e8, 0x1900, 0x15e8, 0x1957, 0x1651, 0x1957, 0x1651, 0x1983, 0x1691, +0x1983, 0x1691, 0x19d9, 0x16fc, 0x19d9, 0x16fc, 0x18f3, 0x162e, 0x18f3, 0x162e, 0x18f3, +0x162e, 0x1752, 0x14a7, 0x1752, 0x14a7, 0x180e, 0x157f, 0x180e, 0x157f, 0x1952, 0x16e1, +0x1952, 0x16e1, 0x1847, 0x15f6, 0x1847, 0x15f6, 0x16e9, 0x14b9, 0x16e9, 0x14b9, 0x1696, +0x1488, 0x1696, 0x1488, 0x1696, 0x1488, 0x15f1, 0x1405, 0x15f1, 0x1405, 0x153b, 0x1371, +0x153b, 0x1371, 0x151f, 0x1374, 0x151f, 0x1374, 0x12a7, 0x111b, 0x12a7, 0x111b, 0x1175, +0x1004, 0x1175, 0x1004, 0x1175, 0x1004, 0x1357, 0x11fe, 0x1357, 0x11fe, 0x137b, 0x1236, +0x137b, 0x1236, 0x1454, 0x1320, 0x1454, 0x1320, 0x1417, 0x12ee, 0x1417, 0x12ee, 0x1380, +0x125d, 0x1380, 0x125d, 0x15a9, 0x1487, 0x15a9, 0x1487, 0x15a9, 0x1487, 0x15c4, 0x149e, +0x15c4, 0x149e, 0x150f, 0x13e0, 0x150f, 0x13e0, 0x1521, 0x13e6, 0x1521, 0x13e6, 0x142e, +0x12e3, 0x142e, 0x12e3, 0x14e9, 0x138b, 0x14e9, 0x138b, 0x14e9, 0x138b, 0x1616, 0x14a3, +0x1616, 0x14a3, 0x1490, 0x1306, 0x1490, 0x1306, 0x13c9, 0x1229, 0x13c9, 0x1229, 0x1478, +0x12c2, 0x1478, 0x12c2, 0x152a, 0x1361, 0x152a, 0x1361, 0x1584, 0x13aa, 0x1584, 0x13aa, +0x1584, 0x13aa, 0x153d, 0x1355, 0x153d, 0x1355, 0x14dc, 0x12ec, 0x14dc, 0x12ec, 0x1518, +0x1324, 0x1518, 0x1324, 0x15f3, 0x1401, 0x15f3, 0x1401, 0x14ad, 0x12c3, 0x14ad, 0x12c3, +0x121f, 0x1042, 0x121f, 0x1042, 0x121f, 0x1042, 0xf95, 0xdcc, 0xf95, 0xdcc, 0xd13, +0xb62, 0xd13, 0xb62, 0xbf8, 0xa66, 0xbf8, 0xa66, 0xaca, 0x95a, 0xaca, 0x95a, +0x8e9, 0x7a0, 0x8e9, 0x7a0, 0x8e9, 0x7a0, 0x732, 0x613, 0x732, 0x613, 0x58f, +0x49c, 0x58f, 0x49c, 0x4ef, 0x42a, 0x4ef, 0x42a, 0x42f, 0x397, 0x42f, 0x397, +0x232, 0x1c7, 0x232, 0x1c7, 0x18, 0xffd9, 0x18, 0xffd9, 0x18, 0xffd9, 0xfd97, +0xfd81, 0xfd97, 0xfd81, 0xfc6b, 0xfc7b, 0xfc6b, 0xfc7b, 0xfbde, 0xfc11, 0xfbde, 0xfc11, +0xfaaa, 0xfafd, 0xfaaa, 0xfafd, 0xf98c, 0xf9fa, 0xf98c, 0xf9fa, 0xf948, 0xf9cd, 0xf948, +0xf9cd, 0xf948, 0xf9cd, 0xfb5b, 0xfbf3, 0xfb5b, 0xfbf3, 0xfcf9, 0xfda0, 0xfcf9, 0xfda0, +0xfd09, 0xfdbc, 0xfd09, 0xfdbc, 0xfc0d, 0xfcc8, 0xfc0d, 0xfcc8, 0xfb2a, 0xfbec, 0xfb2a, +0xfbec, 0xfb2a, 0xfbec, 0xfab6, 0xfb7c, 0xfab6, 0xfb7c, 0xf9b0, 0xfa79, 0xf9b0, 0xfa79, +0xf874, 0xf940, 0xf874, 0xf940, 0xf65a, 0xf729, 0xf65a, 0xf729, 0xf5e3, 0xf6b4, 0xf5e3, +0xf6b4, 0xf6a0, 0xf776, 0xf6a0, 0xf776, 0xf6a0, 0xf776, 0xf5e1, 0xf6bc, 0xf5e1, 0xf6bc, +0xf45a, 0xf53d, 0xf45a, 0xf53d, 0xf2e6, 0xf3d4, 0xf2e6, 0xf3d4, 0xf177, 0xf270, 0xf177, +0xf270, 0xefe6, 0xf0ee, 0xefe6, 0xf0ee, 0xef10, 0xf029, 0xef10, 0xf029, 0xef10, 0xf029, +0xed41, 0xee6d, 0xed41, 0xee6d, 0xeae3, 0xec24, 0xeae3, 0xec24, 0xead8, 0xec2f, 0xead8, +0xec2f, 0xeb5e, 0xeccb, 0xeb5e, 0xeccb, 0xeb8e, 0xed13, 0xeb8e, 0xed13, 0xeb8e, 0xed13, +0xeba8, 0xed45, 0xeba8, 0xed45, 0xeb08, 0xecbe, 0xeb08, 0xecbe, 0xeaef, 0xecbd, 0xeaef, +0xecbd, 0xe9f2, 0xebd6, 0xe9f2, 0xebd6, 0xe7e3, 0xe9de, 0xe7e3, 0xe9de, 0xe6a2, 0xe8b4, +0xe6a2, 0xe8b4, 0xe6a2, 0xe8b4, 0xe4cd, 0xe6f4, 0xe4cd, 0xe6f4, 0xe3ba, 0xe5f6, 0xe3ba, +0xe5f6, 0xe3f6, 0xe646, 0xe3f6, 0xe646, 0xe340, 0xe5a5, 0xe340, 0xe5a5, 0xe2fc, 0xe574, +0xe2fc, 0xe574, 0xe3ad, 0xe639, 0xe3ad, 0xe639, 0xe3ad, 0xe639, 0xe3a2, 0xe643, 0xe3a2, +0xe643, 0xe337, 0xe5ef, 0xe337, 0xe5ef, 0xe314, 0xe5e3, 0xe314, 0xe5e3, 0xe2de, 0xe5c7, +0xe2de, 0xe5c7, 0xe273, 0xe578, 0xe273, 0xe578, 0xe273, 0xe578, 0xe260, 0xe581, 0xe260, +0xe581, 0xe328, 0xe668, 0xe328, 0xe668, 0xe395, 0xe6f7, 0xe395, 0xe6f7, 0xe332, 0xe6b7, +0xe332, 0xe6b7, 0xe24e, 0xe5f7, 0xe24e, 0xe5f7, 0xe10e, 0xe4dc, 0xe10e, 0xe4dc, 0xe10e, +0xe4dc, 0xe0e6, 0xe4da, 0xe0e6, 0xe4da, 0xe10e, 0xe526, 0xe10e, 0xe526, 0xe0e9, 0xe526, +0xe0e9, 0xe526, 0xe085, 0xe4e4, 0xe085, 0xe4e4, 0xdfb5, 0xe434, 0xdfb5, 0xe434, 0xe02a, +0xe4c5, 0xe02a, 0xe4c5, 0xe02a, 0xe4c5, 0xe139, 0xe5eb, 0xe139, 0xe5eb, 0xe251, 0xe717, +0xe251, 0xe717, 0xe383, 0xe856, 0xe383, 0xe856, 0xe46a, 0xe944, 0xe46a, 0xe944, 0xe54c, +0xea26, 0xe54c, 0xea26, 0xe54c, 0xea26, 0xe57d, 0xea51, 0xe57d, 0xea51, 0xe539, 0xea00, +0xe539, 0xea00, 0xe586, 0xea38, 0xe586, 0xea38, 0xe6e5, 0xeb7d, 0xe6e5, 0xeb7d, 0xe8d0, +0xed46, 0xe8d0, 0xed46, 0xea2f, 0xee7d, 0xea2f, 0xee7d, 0xea2f, 0xee7d, 0xeb51, 0xef73, +0xeb51, 0xef73, 0xeccb, 0xf0bc, 0xeccb, 0xf0bc, 0xedea, 0xf1a7, 0xedea, 0xf1a7, 0xef28, +0xf2ae, 0xef28, 0xf2ae, 0xf088, 0xf3d5, 0xf088, 0xf3d5, 0xf18a, 0xf49e, 0xf18a, 0xf49e, +0xf18a, 0xf49e, 0xf233, 0xf50d, 0xf233, 0xf50d, 0xf30a, 0xf5ad, 0xf30a, 0xf5ad, 0xf420, +0xf68d, 0xf420, 0xf68d, 0xf3b1, 0xf5eb, 0xf3b1, 0xf5eb, 0xf36a, 0xf575, 0xf36a, 0xf575, +0xf36a, 0xf575, 0xf3f2, 0xf5d1, 0xf3f2, 0xf5d1, 0xf47f, 0xf637, 0xf47f, 0xf637, 0xf501, +0xf697, 0xf501, 0xf697, 0xf4db, 0xf652, 0xf4db, 0xf652, 0xf4de, 0xf63c, 0xf4de, 0xf63c, +0xf59a, 0xf6e3, 0xf59a, 0xf6e3, 0xf59a, 0xf6e3, 0xf71a, 0xf853, 0xf71a, 0xf853, 0xf749, +0xf875, 0xf749, 0xf875, 0xf63a, 0xf75d, 0xf63a, 0xf75d, 0xf575, 0xf692, 0xf575, 0xf692, +0xf569, 0xf682, 0xf569, 0xf682, 0xf57b, 0xf691, 0xf57b, 0xf691, 0xf57b, 0xf691, 0xf568, +0xf67e, 0xf568, 0xf67e, 0xf5d0, 0xf6e6, 0xf5d0, 0xf6e6, 0xf564, 0xf67a, 0xf564, 0xf67a, +0xf546, 0xf65d, 0xf546, 0xf65d, 0xf669, 0xf780, 0xf669, 0xf780, 0xf669, 0xf780, 0xf7ff, +0xf915, 0xf7ff, 0xf915, 0xf84a, 0xf95f, 0xf84a, 0xf95f, 0xf727, 0xf83a, 0xf727, 0xf83a, +0xf68c, 0xf79d, 0xf68c, 0xf79d, 0xf5d3, 0xf6e0, 0xf5d3, 0xf6e0, 0xf4fb, 0xf604, 0xf4fb, +0xf604, 0xf4fb, 0xf604, 0xf56c, 0xf671, 0xf56c, 0xf671, 0xf5c4, 0xf6c4, 0xf5c4, 0xf6c4, +0xf528, 0xf622, 0xf528, 0xf622, 0xf66e, 0xf762, 0xf66e, 0xf762, 0xf825, 0xf913, 0xf825, +0xf913, 0xf869, 0xf951, 0xf869, 0xf951, 0xf869, 0xf951, 0xf903, 0xf9e4, 0xf903, 0xf9e4, +0xf892, 0xf96b, 0xf892, 0xf96b, 0xf75e, 0xf82f, 0xf75e, 0xf82f, 0xf807, 0xf8cf, 0xf807, +0xf8cf, 0xf817, 0xf8d5, 0xf817, 0xf8d5, 0xf817, 0xf8d5, 0xf7c2, 0xf874, 0xf7c2, 0xf874, +0xf8e9, 0xf98e, 0xf8e9, 0xf98e, 0xf9d2, 0xfa65, 0xf9d2, 0xfa65, 0xfbf5, 0xfc75, 0xfbf5, +0xfc75, 0xfde4, 0xfe4f, 0xfde4, 0xfe4f, 0xfe83, 0xfed3, 0xfe83, 0xfed3, 0xfe83, 0xfed3, +0xff7d, 0xffb1, 0xff7d, 0xffb1, 0x74, 0x85, 0x74, 0x85, 0x119, 0x105, 0x119, +0x105, 0x1e8, 0x1ab, 0x1e8, 0x1ab, 0x2d6, 0x26c, 0x2d6, 0x26c, 0x2d6, 0x26c, +0x260, 0x1c6, 0x260, 0x1c6, 0x3d5, 0x307, 0x3d5, 0x307, 0x70c, 0x607, 0x70c, +0x607, 0x964, 0x826, 0x964, 0x826, 0xc43, 0xacb, 0xc43, 0xacb, 0xdd9, 0xc28, +0xdd9, 0xc28, 0xdd9, 0xc28, 0xe43, 0xc58, 0xe43, 0xc58, 0xfca, 0xda6, 0xfca, +0xda6, 0x1194, 0xf3a, 0x1194, 0xf3a, 0x128e, 0x1000, 0x128e, 0x1000, 0x138b, 0x10ce, +0x138b, 0x10ce, 0x140f, 0x1127, 0x140f, 0x1127, 0x140f, 0x1127, 0x13ac, 0x109e, 0x13ac, +0x109e, 0x149e, 0x1170, 0x149e, 0x1170, 0x1615, 0x12cc, 0x1615, 0x12cc, 0x158d, 0x1231, +0x158d, 0x1231, 0x1535, 0x11cc, 0x1535, 0x11cc, 0x1535, 0x11cc, 0x152f, 0x11c0, 0x152f, +0x11c0, 0x1463, 0x10f4, 0x1463, 0x10f4, 0x1491, 0x1128, 0x1491, 0x1128, 0x13ed, 0x1090, +0x13ed, 0x1090, 0x1367, 0x101b, 0x1367, 0x101b, 0x1492, 0x115c, 0x1492, 0x115c, 0x1492, +0x115c, 0x145b, 0x113e, 0x145b, 0x113e, 0x13cc, 0x10cb, 0x13cc, 0x10cb, 0x141f, 0x113c, +0x141f, 0x113c, 0x136b, 0x10a8, 0x136b, 0x10a8, 0x12f3, 0x1050, 0x12f3, 0x1050, 0x1327, +0x10a5, 0x1327, 0x10a5, 0x1327, 0x10a5, 0x1240, 0xfdd, 0x1240, 0xfdd, 0x1162, 0xf1e, +0x1162, 0xf1e, 0x1188, 0xf5f, 0x1188, 0xf5f, 0x1183, 0xf74, 0x1183, 0xf74, 0x117a, +0xf84, 0x117a, 0xf84, 0x117a, 0xf84, 0x121e, 0x103d, 0x121e, 0x103d, 0x11cd, 0xfff, +0x11cd, 0xfff, 0x1140, 0xf83, 0x1140, 0xf83, 0x11e8, 0x103a, 0x11e8, 0x103a, 0x11c3, +0x1023, 0x11c3, 0x1023, 0x10fb, 0xf68, 0x10fb, 0xf68, 0x10fb, 0xf68, 0x10d8, 0xf50, +0x10d8, 0xf50, 0x1100, 0xf83, 0x1100, 0xf83, 0x10ec, 0xf7a, 0x10ec, 0xf7a, 0x1066, +0xf00, 0x1066, 0xf00, 0xf67, 0xe0d, 0xf67, 0xe0d, 0xee3, 0xd97, 0xee3, 0xd97, +0xee3, 0xd97, 0xf55, 0xe18, 0xf55, 0xe18, 0xf07, 0xdda, 0xf07, 0xdda, 0xe66, +0xd4b, 0xe66, 0xd4b, 0xd63, 0xc5c, 0xd63, 0xc5c, 0xb16, 0xa23, 0xb16, 0xa23, +0xb16, 0xa23, 0xa4f, 0x973, 0xa4f, 0x973, 0xa62, 0x99c, 0xa62, 0x99c, 0x8f4, +0x846, 0x8f4, 0x846, 0x7d0, 0x739, 0x7d0, 0x739, 0x745, 0x6c6, 0x745, 0x6c6, +0x611, 0x5a9, 0x611, 0x5a9, 0x611, 0x5a9, 0x564, 0x512, 0x564, 0x512, 0x579, +0x53b, 0x579, 0x53b, 0x43d, 0x412, 0x43d, 0x412, 0x3bf, 0x3a6, 0x3bf, 0x3a6, +0x3fc, 0x3f3, 0x3fc, 0x3f3, 0x260, 0x265, 0x260, 0x265, 0x260, 0x265, 0x14e, +0x160, 0x14e, 0x160, 0x10, 0x2d, 0x10, 0x2d, 0xfd94, 0xfdbb, 0xfd94, 0xfdbb, +0xfc87, 0xfcb8, 0xfc87, 0xfcb8, 0xfc2b, 0xfc65, 0xfc2b, 0xfc65, 0xfc2b, 0xfc65, 0xfbca, +0xfc0d, 0xfbca, 0xfc0d, 0xfbf6, 0xfc42, 0xfbf6, 0xfc42, 0xfb62, 0xfbb8, 0xfb62, 0xfbb8, +0xfb28, 0xfb89, 0xfb28, 0xfb89, 0xfbca, 0xfc36, 0xfbca, 0xfc36, 0xfae4, 0xfb5e, 0xfae4, +0xfb5e, 0xfae4, 0xfb5e, 0xf85c, 0xf8e5, 0xf85c, 0xf8e5, 0xf5f0, 0xf68a, 0xf5f0, 0xf68a, +0xf3de, 0xf48a, 0xf3de, 0xf48a, 0xf20c, 0xf2ca, 0xf20c, 0xf2ca, 0xf0ed, 0xf1bf, 0xf0ed, +0xf1bf, 0xeef3, 0xefd8, 0xeef3, 0xefd8, 0xeef3, 0xefd8, 0xedd3, 0xeecc, 0xedd3, 0xeecc, +0xef57, 0xf062, 0xef57, 0xf062, 0xf068, 0xf183, 0xf068, 0xf183, 0xf15a, 0xf282, 0xf15a, +0xf282, 0xf1f8, 0xf32a, 0xf1f8, 0xf32a, 0xf1f8, 0xf32a, 0xf0cc, 0xf205, 0xf0cc, 0xf205, +0xf0e5, 0xf21f, 0xf0e5, 0xf21f, 0xf16d, 0xf2a2, 0xf16d, 0xf2a2, 0xf0bf, 0xf1ea, 0xf0bf, +0xf1ea, 0xf13b, 0xf257, 0xf13b, 0xf257, 0xf22c, 0xf332, 0xf22c, 0xf332, 0xf22c, 0xf332, +0xf3c5, 0xf4af, 0xf3c5, 0xf4af, 0xf5ca, 0xf692, 0xf5ca, 0xf692, 0xf6bb, 0xf75b, 0xf6bb, +0xf75b, 0xf7e6, 0xf85a, 0xf7e6, 0xf85a, 0xf942, 0xf984, 0xf942, 0xf984, 0xfa07, 0xfa15, +0xfa07, 0xfa15, 0xfa07, 0xfa15, 0xfaca, 0xfaa0, 0xfaca, 0xfaa0, 0xfb80, 0xfb1c, 0xfb80, +0xfb1c, 0xfb64, 0xfac5, 0xfb64, 0xfac5, 0xfbc2, 0xfaea, 0xfbc2, 0xfaea, 0xfce8, 0xfbd6, +0xfce8, 0xfbd6, 0xfce8, 0xfbd6, 0xfea7, 0xfd5f, 0xfea7, 0xfd5f, 0x142, 0xffc6, 0x142, +0xffc6, 0x2b8, 0x10c, 0x2b8, 0x10c, 0x37f, 0x1a7, 0x37f, 0x1a7, 0x57c, 0x37d, +0x57c, 0x37d, 0x7a6, 0x585, 0x7a6, 0x585, 0x7a6, 0x585, 0x8ff, 0x6c1, 0x8ff, +0x6c1, 0x9b6, 0x761, 0x9b6, 0x761, 0x951, 0x6e9, 0x951, 0x6e9, 0x949, 0x6d4, +0x949, 0x6d4, 0xaa4, 0x828, 0xaa4, 0x828, 0xbc0, 0x93f, 0xbc0, 0x93f, 0xbc0, +0x93f, 0xc9d, 0xa1b, 0xc9d, 0xa1b, 0xdcb, 0xb4b, 0xdcb, 0xb4b, 0xe3c, 0xbc1, +0xe3c, 0xbc1, 0xf48, 0xcd4, 0xf48, 0xcd4, 0x1119, 0xead, 0x1119, 0xead, 0x1119, +0xead, 0x114c, 0xee9, 0x114c, 0xee9, 0x1250, 0xff7, 0x1250, 0xff7, 0x142b, 0x11dc, +0x142b, 0x11dc, 0x1533, 0x12ee, 0x1533, 0x12ee, 0x161e, 0x13e3, 0x161e, 0x13e3, 0x15a9, +0x1377, 0x15a9, 0x1377, 0x15a9, 0x1377, 0x14d6, 0x12af, 0x14d6, 0x12af, 0x15d2, 0x13b4, +0x15d2, 0x13b4, 0x1741, 0x152d, 0x1741, 0x152d, 0x1785, 0x157c, 0x1785, 0x157c, 0x1794, +0x1596, 0x1794, 0x1596, 0x170e, 0x151d, 0x170e, 0x151d, 0x170e, 0x151d, 0x166d, 0x1489, +0x166d, 0x1489, 0x1748, 0x1573, 0x1748, 0x1573, 0x16e1, 0x151c, 0x16e1, 0x151c, 0x14af, +0x12fc, 0x14af, 0x12fc, 0x1416, 0x1276, 0x1416, 0x1276, 0x1416, 0x1276, 0x13de, 0x1253, +0x13de, 0x1253, 0x13ba, 0x1246, 0x13ba, 0x1246, 0x1431, 0x12d4, 0x1431, 0x12d4, 0x130f, +0x11c9, 0x130f, 0x11c9, 0x12dd, 0x11ae, 0x12dd, 0x11ae, 0x1427, 0x130f, 0x1427, 0x130f, +0x1427, 0x130f, 0x14b5, 0x13b3, 0x14b5, 0x13b3, 0x14d5, 0x13e7, 0x14d5, 0x13e7, 0x14e2, +0x1406, 0x14e2, 0x1406, 0x1529, 0x145d, 0x1529, 0x145d, 0x15ef, 0x152f, 0x15ef, 0x152f, +0x15ef, 0x152f, 0x1629, 0x1572, 0x1629, 0x1572, 0x14e8, 0x1437, 0x14e8, 0x1437, 0x142f, +0x1381, 0x142f, 0x1381, 0x1454, 0x13a4, 0x1454, 0x13a4, 0x14b8, 0x1403, 0x14b8, 0x1403, +0x151a, 0x145e, 0x151a, 0x145e, 0x151a, 0x145e, 0x14ee, 0x1426, 0x14ee, 0x1426, 0x1456, +0x1382, 0x1456, 0x1382, 0x145c, 0x1379, 0x145c, 0x1379, 0x15ac, 0x14b9, 0x15ac, 0x14b9, +0x15f2, 0x14f0, 0x15f2, 0x14f0, 0x1597, 0x1485, 0x1597, 0x1485, 0x1597, 0x1485, 0x15c4, +0x14a4, 0x15c4, 0x14a4, 0x158d, 0x1461, 0x158d, 0x1461, 0x15d5, 0x149f, 0x15d5, 0x149f, +0x15b1, 0x1476, 0x15b1, 0x1476, 0x134b, 0x120e, 0x134b, 0x120e, 0x134b, 0x120e, 0x107a, +0xf3f, 0x107a, 0xf3f, 0xf12, 0xddf, 0xf12, 0xddf, 0xe1a, 0xcf2, 0xe1a, 0xcf2, +0xcdf, 0xbc8, 0xcdf, 0xbc8, 0xb6e, 0xa6c, 0xb6e, 0xa6c, 0x964, 0x87c, 0x964, +0x87c, 0x964, 0x87c, 0x868, 0x79e, 0x868, 0x79e, 0x928, 0x87f, 0x928, 0x87f, +0x8b0, 0x82b, 0x8b0, 0x82b, 0x6e1, 0x683, 0x6e1, 0x683, 0x430, 0x3fa, 0x430, +0x3fa, 0x1cc, 0x1be, 0x1cc, 0x1be, 0x1cc, 0x1be, 0x1d7, 0x1f3, 0x1d7, 0x1f3, +0x193, 0x1d7, 0x193, 0x1d7, 0xff7b, 0xffe8, 0xff7b, 0xffe8, 0xfe74, 0xff07, 0xfe74, +0xff07, 0xff14, 0xffcb, 0xff14, 0xffcb, 0xff14, 0xffcb, 0xff9b, 0x74, 0xff9b, 0x74, +0x9a, 0x193, 0x9a, 0x193, 0x31, 0x147, 0x31, 0x147, 0xfe4d, 0xff7d, 0xfe4d, +0xff7d, 0xfe81, 0xffc9, 0xfe81, 0xffc9, 0xfe72, 0xffce, 0xfe72, 0xffce, 0xfe72, 0xffce, +0xfd01, 0xfe6f, 0xfd01, 0xfe6f, 0xfc22, 0xfda1, 0xfc22, 0xfda1, 0xfb06, 0xfc93, 0xfb06, +0xfc93, 0xf9d1, 0xfb6b, 0xf9d1, 0xfb6b, 0xfa2d, 0xfbd2, 0xfa2d, 0xfbd2, 0xf9a1, 0xfb51, +0xf9a1, 0xfb51, 0xf9a1, 0xfb51, 0xf6d8, 0xf891, 0xf6d8, 0xf891, 0xf54a, 0xf70c, 0xf54a, +0xf70c, 0xf38b, 0xf556, 0xf38b, 0xf556, 0xf1c7, 0xf39b, 0xf1c7, 0xf39b, 0xf121, 0xf2fd, +0xf121, 0xf2fd, 0xf121, 0xf2fd, 0xee96, 0xf07b, 0xee96, 0xf07b, 0xed0a, 0xeef8, 0xed0a, +0xeef8, 0xecf8, 0xeeed, 0xecf8, 0xeeed, 0xec59, 0xee57, 0xec59, 0xee57, 0xed30, 0xef37, +0xed30, 0xef37, 0xed8b, 0xef9b, 0xed8b, 0xef9b, 0xed8b, 0xef9b, 0xebdf, 0xedf7, 0xebdf, +0xedf7, 0xeb6f, 0xed8f, 0xeb6f, 0xed8f, 0xec44, 0xee6c, 0xec44, 0xee6c, 0xeb21, 0xed52, +0xeb21, 0xed52, 0xe9e3, 0xec1c, 0xe9e3, 0xec1c, 0xe8a2, 0xeae5, 0xe8a2, 0xeae5, 0xe8a2, +0xeae5, 0xe678, 0xe8c3, 0xe678, 0xe8c3, 0xe6ba, 0xe910, 0xe6ba, 0xe910, 0xe68b, 0xe8ec, +0xe68b, 0xe8ec, 0xe453, 0xe6c0, 0xe453, 0xe6c0, 0xe3af, 0xe62a, 0xe3af, 0xe62a, 0xe3af, +0xe62a, 0xe3f6, 0xe681, 0xe3f6, 0xe681, 0xe3cf, 0xe66c, 0xe3cf, 0xe66c, 0xe367, 0xe617, +0xe367, 0xe617, 0xe260, 0xe525, 0xe260, 0xe525, 0xe175, 0xe452, 0xe175, 0xe452, 0xe226, +0xe51d, 0xe226, 0xe51d, 0xe226, 0xe51d, 0xe2ec, 0xe5fe, 0xe2ec, 0xe5fe, 0xe1fd, 0xe52c, +0xe1fd, 0xe52c, 0xe08a, 0xe3d7, 0xe08a, 0xe3d7, 0xdf3a, 0xe2a4, 0xdf3a, 0xe2a4, 0xdfe4, +0xe36d, 0xdfe4, 0xe36d, 0xe185, 0xe52c, 0xe185, 0xe52c, 0xe185, 0xe52c, 0xe0c4, 0xe486, +0xe0c4, 0xe486, 0xdfab, 0xe388, 0xdfab, 0xe388, 0xdf32, 0xe325, 0xdf32, 0xe325, 0xdf8f, +0xe396, 0xdf8f, 0xe396, 0xe0fe, 0xe514, 0xe0fe, 0xe514, 0xe0fe, 0xe514, 0xe189, 0xe5aa, +0xe189, 0xe5aa, 0xe09f, 0xe4c5, 0xe09f, 0xe4c5, 0xe05c, 0xe481, 0xe05c, 0xe481, 0xe205, +0xe624, 0xe205, 0xe624, 0xe2c6, 0xe6d8, 0xe2c6, 0xe6d8, 0xe2b5, 0xe6b6, 0xe2b5, 0xe6b6, +0xe2b5, 0xe6b6, 0xe360, 0xe749, 0xe360, 0xe749, 0xe438, 0xe803, 0xe438, 0xe803, 0xe572, +0xe91b, 0xe572, 0xe91b, 0xe700, 0xea82, 0xe700, 0xea82, 0xe78f, 0xeae7, 0xe78f, 0xeae7, +0xe7dc, 0xeb07, 0xe7dc, 0xeb07, 0xe7dc, 0xeb07, 0xe9d5, 0xecd1, 0xe9d5, 0xecd1, 0xec67, +0xef33, 0xec67, 0xef33, 0xee5f, 0xf0fb, 0xee5f, 0xf0fb, 0xeed4, 0xf140, 0xeed4, 0xf140, +0xeec0, 0xf0fe, 0xeec0, 0xf0fe, 0xeec0, 0xf0fe, 0xef8d, 0xf19e, 0xef8d, 0xf19e, 0xf12d, +0xf314, 0xf12d, 0xf314, 0xf290, 0xf451, 0xf290, 0xf451, 0xf24b, 0xf3e8, 0xf24b, 0xf3e8, +0xf1db, 0xf357, 0xf1db, 0xf357, 0xf21e, 0xf37d, 0xf21e, 0xf37d, 0xf21e, 0xf37d, 0xf2fe, +0xf443, 0xf2fe, 0xf443, 0xf453, 0xf581, 0xf453, 0xf581, 0xf575, 0xf68d, 0xf575, 0xf68d, +0xf6ab, 0xf7b0, 0xf6ab, 0xf7b0, 0xf825, 0xf919, 0xf825, 0xf919, 0xf9f5, 0xfad8, 0xf9f5, +0xfad8, 0xf9f5, 0xfad8, 0xfc40, 0xfd12, 0xfc40, 0xfd12, 0xfd3a, 0xfdfc, 0xfd3a, 0xfdfc, +0xfc93, 0xfd43, 0xfc93, 0xfd43, 0xfc2b, 0xfcc9, 0xfc2b, 0xfcc9, 0xfc9a, 0xfd24, 0xfc9a, +0xfd24, 0xfc9a, 0xfd24, 0xfd39, 0xfdae, 0xfd39, 0xfdae, 0xfcd0, 0xfd2d, 0xfcd0, 0xfd2d, +0xfd02, 0xfd47, 0xfd02, 0xfd47, 0xfe60, 0xfe8b, 0xfe60, 0xfe8b, 0x78, 0x88, 0x78, +0x88, 0x338, 0x32d, 0x338, 0x32d, 0x338, 0x32d, 0x457, 0x430, 0x457, 0x430, +0x3e1, 0x3a0, 0x3e1, 0x3a0, 0x413, 0x3b9, 0x413, 0x3b9, 0x563, 0x4f0, 0x563, +0x4f0, 0x625, 0x59d, 0x625, 0x59d, 0x5b2, 0x517, 0x5b2, 0x517, 0x5b2, 0x517, +0x404, 0x35a, 0x404, 0x35a, 0x392, 0x2dc, 0x392, 0x2dc, 0x5c2, 0x504, 0x5c2, +0x504, 0x6fe, 0x63b, 0x6fe, 0x63b, 0x615, 0x551, 0x615, 0x551, 0x615, 0x551, +0x4e9, 0x427, 0x4e9, 0x427, 0x4af, 0x3f3, 0x4af, 0x3f3, 0x53c, 0x489, 0x53c, +0x489, 0x511, 0x468, 0x511, 0x468, 0x314, 0x276, 0x314, 0x276, 0x21b, 0x188, +0x21b, 0x188, 0x21b, 0x188, 0x2bb, 0x233, 0x2bb, 0x233, 0x334, 0x2b6, 0x334, +0x2b6, 0x438, 0x3c1, 0x438, 0x3c1, 0x47b, 0x40b, 0x47b, 0x40b, 0x3da, 0x36b, +0x3da, 0x36b, 0x3da, 0x36b, 0x4a1, 0x430, 0x4a1, 0x430, 0x68a, 0x614, 0x68a, +0x614, 0x64d, 0x5cc, 0x64d, 0x5cc, 0x4a9, 0x41a, 0x4a9, 0x41a, 0x3b9, 0x318, +0x3b9, 0x318, 0x2a8, 0x1f2, 0x2a8, 0x1f2, 0x2a8, 0x1f2, 0x2b5, 0x1e6, 0x2b5, +0x1e6, 0x33b, 0x251, 0x33b, 0x251, 0x2a0, 0x19a, 0x2a0, 0x19a, 0x290, 0x16c, +0x290, 0x16c, 0x3cd, 0x28c, 0x3cd, 0x28c, 0x556, 0x3fa, 0x556, 0x3fa, 0x556, +0x3fa, 0x67d, 0x507, 0x67d, 0x507, 0x6cb, 0x53e, 0x6cb, 0x53e, 0x638, 0x497, +0x638, 0x497, 0x5df, 0x42f, 0x5df, 0x42f, 0x675, 0x4ba, 0x675, 0x4ba, 0x675, +0x4ba, 0x6b0, 0x4ef, 0x6b0, 0x4ef, 0x5c1, 0x3ff, 0x5c1, 0x3ff, 0x40f, 0x251, +0x40f, 0x251, 0x2bb, 0x106, 0x2bb, 0x106, 0x2b9, 0x111, 0x2b9, 0x111, 0x1d8, +0x41, 0x1d8, 0x41, 0x1d8, 0x41, 0xfff7, 0xfe74, 0xfff7, 0xfe74, 0xfec8, 0xfd5b, +0xfec8, 0xfd5b, 0xfe2c, 0xfcd6, 0xfe2c, 0xfcd6, 0xfe6c, 0xfd2e, 0xfe6c, 0xfd2e, 0xfecf, +0xfda9, 0xfecf, 0xfda9, 0xfe67, 0xfd57, 0xfe67, 0xfd57, 0xfe67, 0xfd57, 0xfd8c, 0xfc91, +0xfd8c, 0xfc91, 0xfe47, 0xfd5f, 0xfe47, 0xfd5f, 0xfffb, 0xff23, 0xfffb, 0xff23, 0x91, +0xffc4, 0x91, 0xffc4, 0xd2, 0xf, 0xd2, 0xf, 0xd2, 0xf, 0x73, 0xffb6, +0x73, 0xffb6, 0xffe1, 0xff26, 0xffe1, 0xff26, 0x77, 0xffbd, 0x77, 0xffbd, 0xfd, +0x40, 0xfd, 0x40, 0xffca, 0xff09, 0xffca, 0xff09, 0xff9b, 0xfed4, 0xff9b, 0xfed4, +0xff9b, 0xfed4, 0x14b, 0x7f, 0x14b, 0x7f, 0x226, 0x154, 0x226, 0x154, 0x340, +0x269, 0x340, 0x269, 0x367, 0x28c, 0x367, 0x28c, 0x246, 0x168, 0x246, 0x168, +0x2e8, 0x20a, 0x2e8, 0x20a, 0x2e8, 0x20a, 0x38d, 0x2b1, 0x38d, 0x2b1, 0x274, +0x19e, 0x274, 0x19e, 0x1cb, 0xfb, 0x1cb, 0xfb, 0x1f6, 0x130, 0x1f6, 0x130, +0x2f9, 0x23f, 0x2f9, 0x23f, 0x2f9, 0x23f, 0x4f5, 0x448, 0x4f5, 0x448, 0x49e, +0x3ff, 0x49e, 0x3ff, 0x301, 0x270, 0x301, 0x270, 0x373, 0x2ef, 0x373, 0x2ef, +0x468, 0x3f1, 0x468, 0x3f1, 0x4e7, 0x47a, 0x4e7, 0x47a, 0x4e7, 0x47a, 0x4d6, +0x470, 0x4d6, 0x470, 0x2f3, 0x293, 0x2f3, 0x293, 0x23e, 0x1df, 0x23e, 0x1df, +0x428, 0x3c6, 0x428, 0x3c6, 0x490, 0x428, 0x490, 0x428, 0x478, 0x407, 0x478, +0x407, 0x478, 0x407, 0x548, 0x4ca, 0x548, 0x4ca, 0x605, 0x575, 0x605, 0x575, +0x79e, 0x6fc, 0x79e, 0x6fc, 0x92e, 0x877, 0x92e, 0x877, 0x8d7, 0x80a, 0x8d7, +0x80a, 0x8d7, 0x80a, 0x838, 0x755, 0x838, 0x755, 0x86e, 0x776, 0x86e, 0x776, +0x872, 0x766, 0x872, 0x766, 0x984, 0x868, 0x984, 0x868, 0xa09, 0x8e0, 0xa09, +0x8e0, 0x97c, 0x849, 0x97c, 0x849, 0x97c, 0x849, 0xa7d, 0x945, 0xa7d, 0x945, +0xc66, 0xb2e, 0xc66, 0xb2e, 0xd40, 0xc0e, 0xd40, 0xc0e, 0xd19, 0xbf1, 0xd19, +0xbf1, 0xbc1, 0xaa8, 0xbc1, 0xaa8, 0x96a, 0x864, 0x96a, 0x864, 0x96a, 0x864, +0x89e, 0x7b0, 0x89e, 0x7b0, 0x79e, 0x6ca, 0x79e, 0x6ca, 0x5c2, 0x50a, 0x5c2, +0x50a, 0x4da, 0x43f, 0x4da, 0x43f, 0x4b8, 0x43a, 0x4b8, 0x43a, 0x4b8, 0x43a, +0x50b, 0x4a8, 0x50b, 0x4a8, 0x5ae, 0x564, 0x5ae, 0x564, 0x614, 0x5e0, 0x614, +0x5e0, 0x512, 0x4f0, 0x512, 0x4f0, 0x457, 0x442, 0x457, 0x442, 0x45d, 0x44f, +0x45d, 0x44f, 0x45d, 0x44f, 0x3c7, 0x3ba, 0x3c7, 0x3ba, 0x218, 0x208, 0x218, +0x208, 0xac, 0x91, 0xac, 0x91, 0x4e, 0x25, 0x4e, 0x25, 0x8e, 0x51, +0x8e, 0x51, 0x146, 0xf1, 0x146, 0xf1, 0x146, 0xf1, 0x18b, 0x11b, 0x18b, +0x11b, 0x244, 0x1b8, 0x244, 0x1b8, 0x369, 0x2c0, 0x369, 0x2c0, 0x49d, 0x3d6, +0x49d, 0x3d6, 0x564, 0x480, 0x564, 0x480, 0x564, 0x480, 0x550, 0x453, 0x550, +0x453, 0x438, 0x323, 0x438, 0x323, 0x34f, 0x228, 0x34f, 0x228, 0x3b3, 0x27e, +0x3b3, 0x27e, 0x392, 0x253, 0x392, 0x253, 0x377, 0x233, 0x377, 0x233, 0x377, +0x233, 0x361, 0x21e, 0x361, 0x21e, 0x41f, 0x2e1, 0x41f, 0x2e1, 0x60a, 0x4d4, +0x60a, 0x4d4, 0x6ba, 0x590, 0x6ba, 0x590, 0x610, 0x4f4, 0x610, 0x4f4, 0x5eb, +0x4de, 0x5eb, 0x4de, 0x5eb, 0x4de, 0x657, 0x559, 0x657, 0x559, 0x657, 0x568, +0x657, 0x568, 0x71d, 0x639, 0x71d, 0x639, 0x720, 0x644, 0x720, 0x644, 0x5ea, +0x514, 0x5ea, 0x514, 0x5ea, 0x514, 0x67c, 0x5a4, 0x67c, 0x5a4, 0x7ed, 0x70f, +0x7ed, 0x70f, 0x7e7, 0x6fc, 0x7e7, 0x6fc, 0x7e9, 0x6eb, 0x7e9, 0x6eb, 0x7eb, +0x6d5, 0x7eb, 0x6d5, 0x80e, 0x6db, 0x80e, 0x6db, 0x80e, 0x6db, 0x9a4, 0x84d, +0x9a4, 0x84d, 0xa3c, 0x8bf, 0xa3c, 0x8bf, 0xaad, 0x906, 0xaad, 0x906, 0xbe7, +0xa15, 0xbe7, 0xa15, 0xd46, 0xb48, 0xd46, 0xb48, 0xeef, 0xcc6, 0xeef, 0xcc6, +0xeef, 0xcc6, 0x107d, 0xe2b, 0x107d, 0xe2b, 0x10f8, 0xe81, 0x10f8, 0xe81, 0x10c0, +0xe28, 0x10c0, 0xe28, 0x11a9, 0xef7, 0x11a9, 0xef7, 0x1174, 0xeaf, 0x1174, 0xeaf, +0x1174, 0xeaf, 0x10b0, 0xdde, 0x10b0, 0xdde, 0xfe9, 0xd12, 0xfe9, 0xd12, 0xe8a, +0xbb6, 0xe8a, 0xbb6, 0xf00, 0xc35, 0xf00, 0xc35, 0xff0, 0xd36, 0xff0, 0xd36, +0xffa, 0xd57, 0xffa, 0xd57, 0xffa, 0xd57, 0x1012, 0xd8b, 0x1012, 0xd8b, 0x106e, +0xe06, 0x106e, 0xe06, 0x106a, 0xe24, 0x106a, 0xe24, 0xff8, 0xdd6, 0xff8, 0xdd6, +0xf0e, 0xd0e, 0xf0e, 0xd0e, 0xf0e, 0xd0e, 0xe2a, 0xc4a, 0xe2a, 0xc4a, 0xde4, +0xc22, 0xde4, 0xc22, 0xdf4, 0xc4b, 0xdf4, 0xc4b, 0xe28, 0xc91, 0xe28, 0xc91, +0xde8, 0xc5d, 0xde8, 0xc5d, 0xd5b, 0xbd4, 0xd5b, 0xbd4, 0xd5b, 0xbd4, 0xd18, +0xb8e, 0xd18, 0xb8e, 0xd54, 0xbbf, 0xd54, 0xbbf, 0xd25, 0xb7d, 0xd25, 0xb7d, +0xcdc, 0xb1a, 0xcdc, 0xb1a, 0xcf8, 0xb15, 0xcf8, 0xb15, 0xcc9, 0xac2, 0xcc9, +0xac2, 0xcc9, 0xac2, 0xcb1, 0xa7f, 0xcb1, 0xa7f, 0xd9c, 0xb3e, 0xd9c, 0xb3e, +0xef3, 0xc67, 0xef3, 0xc67, 0xf38, 0xc7e, 0xf38, 0xc7e, 0x101a, 0xd35, 0x101a, +0xd35, 0x101a, 0xd35, 0x123d, 0xf30, 0x123d, 0xf30, 0x144c, 0x111b, 0x144c, 0x111b, +0x14d7, 0x1188, 0x14d7, 0x1188, 0x1444, 0x10de, 0x1444, 0x10de, 0x141a, 0x10a7, 0x141a, +0x10a7, 0x13bc, 0x1043, 0x13bc, 0x1043, 0x13bc, 0x1043, 0x13a9, 0x1033, 0x13a9, 0x1033, +0x12fa, 0xf90, 0x12fa, 0xf90, 0x11ea, 0xe94, 0x11ea, 0xe94, 0x11d8, 0xea0, 0x11d8, +0xea0, 0x1262, 0xf50, 0x1262, 0xf50, 0x135e, 0x1077, 0x135e, 0x1077, 0x135e, 0x1077, +0x1429, 0x1175, 0x1429, 0x1175, 0x1382, 0x1106, 0x1382, 0x1106, 0x11c4, 0xf83, 0x11c4, +0xf83, 0x1199, 0xf96, 0x1199, 0xf96, 0x115f, 0xf9d, 0x115f, 0xf9d, 0x115f, 0xf9d, +0x1008, 0xe86, 0x1008, 0xe86, 0xf03, 0xdc1, 0xf03, 0xdc1, 0xe14, 0xd11, 0xe14, +0xd11, 0xe27, 0xd61, 0xe27, 0xd61, 0xeb9, 0xe2d, 0xeb9, 0xe2d, 0xe5b, 0xe07, +0xe5b, 0xe07, 0xe5b, 0xe07, 0xda9, 0xd8a, 0xda9, 0xd8a, 0xd74, 0xd85, 0xd74, +0xd85, 0xd31, 0xd71, 0xd31, 0xd71, 0xd11, 0xd7c, 0xd11, 0xd7c, 0xbd5, 0xc69, +0xbd5, 0xc69, 0x8e0, 0x99a, 0x8e0, 0x99a, 0x8e0, 0x99a, 0x721, 0x801, 0x721, +0x801, 0x64b, 0x74f, 0x64b, 0x74f, 0x47e, 0x5a7, 0x47e, 0x5a7, 0x2d6, 0x422, +0x2d6, 0x422, 0x120, 0x291, 0x120, 0x291, 0x120, 0x291, 0xff91, 0x128, 0xff91, +0x128, 0xff07, 0xc5, 0xff07, 0xc5, 0xfd0a, 0xfef1, 0xfd0a, 0xfef1, 0xfa99, 0xfca9, +0xfa99, 0xfca9, 0xf8fc, 0xfb38, 0xf8fc, 0xfb38, 0xf703, 0xf96b, 0xf703, 0xf96b, 0xf703, +0xf96b, 0xf4c0, 0xf755, 0xf4c0, 0xf755, 0xf25d, 0xf51f, 0xf25d, 0xf51f, 0xf0a3, 0xf393, +0xf0a3, 0xf393, 0xeed3, 0xf1f1, 0xeed3, 0xf1f1, 0xed83, 0xf0ce, 0xed83, 0xf0ce, 0xecc6, +0xf03d, 0xecc6, 0xf03d, 0xecc6, 0xf03d, 0xec04, 0xefa5, 0xec04, 0xefa5, 0xeb5c, 0xef25, +0xeb5c, 0xef25, 0xe991, 0xed80, 0xe991, 0xed80, 0xe796, 0xeba7, 0xe796, 0xeba7, 0xe634, +0xea66, 0xe634, 0xea66, 0xe634, 0xea66, 0xe480, 0xe8cf, 0xe480, 0xe8cf, 0xe27a, 0xe6e3, +0xe27a, 0xe6e3, 0xe108, 0xe589, 0xe108, 0xe589, 0xdf7d, 0xe413, 0xdf7d, 0xe413, 0xde22, +0xe2ca, 0xde22, 0xe2ca, 0xdd87, 0xe240, 0xdd87, 0xe240, 0xdd87, 0xe240, 0xdc38, 0xe100, +0xdc38, 0xe100, 0xda7b, 0xdf50, 0xda7b, 0xdf50, 0xd922, 0xde03, 0xd922, 0xde03, 0xd817, +0xdd02, 0xd817, 0xdd02, 0xd6df, 0xdbd5, 0xd6df, 0xdbd5, 0xd579, 0xda79, 0xd579, 0xda79, +0xd579, 0xda79, 0xd457, 0xd960, 0xd457, 0xd960, 0xd395, 0xd8a7, 0xd395, 0xd8a7, 0xd39e, +0xd8b9, 0xd39e, 0xd8b9, 0xd47e, 0xd9a1, 0xd47e, 0xd9a1, 0xd4c9, 0xd9f4, 0xd4c9, 0xd9f4, +0xd4c9, 0xd9f4, 0xd49f, 0xd9d0, 0xd49f, 0xd9d0, 0xd540, 0xda76, 0xd540, 0xda76, 0xd68b, +0xdbc5, 0xd68b, 0xdbc5, 0xd784, 0xdcc0, 0xd784, 0xdcc0, 0xd6fe, 0xdc3a, 0xd6fe, 0xdc3a, +0xd6a6, 0xdbdf, 0xd6a6, 0xdbdf, 0xd6a6, 0xdbdf, 0xd790, 0xdcc3, 0xd790, 0xdcc3, 0xd8ca, +0xddf4, 0xd8ca, 0xddf4, 0xda47, 0xdf64, 0xda47, 0xdf64, 0xdbb7, 0xe0c4, 0xdbb7, 0xe0c4, +0xdcc6, 0xe1be, 0xdcc6, 0xe1be, 0xddb8, 0xe299, 0xddb8, 0xe299, 0xddb8, 0xe299, 0xdf03, +0xe3c9, 0xdf03, 0xe3c9, 0xdfa7, 0xe44e, 0xdfa7, 0xe44e, 0xdfb9, 0xe43f, 0xdfb9, 0xe43f, +0xe0b9, 0xe51c, 0xe0b9, 0xe51c, 0xe21e, 0xe65a, 0xe21e, 0xe65a, 0xe21e, 0xe65a, 0xe3dc, +0xe7f0, 0xe3dc, 0xe7f0, 0xe602, 0xe9ec, 0xe602, 0xe9ec, 0xe6ad, 0xea6d, 0xe6ad, 0xea6d, +0xe7a8, 0xeb3d, 0xe7a8, 0xeb3d, 0xe9fe, 0xed69, 0xe9fe, 0xed69, 0xead3, 0xee13, 0xead3, +0xee13, 0xead3, 0xee13, 0xeb6b, 0xee81, 0xeb6b, 0xee81, 0xec31, 0xef1f, 0xec31, 0xef1f, +0xec38, 0xeefe, 0xec38, 0xeefe, 0xecb4, 0xef53, 0xecb4, 0xef53, 0xed48, 0xefc2, 0xed48, +0xefc2, 0xeddb, 0xf031, 0xeddb, 0xf031, 0xeddb, 0xf031, 0xeef9, 0xf12c, 0xeef9, 0xf12c, +0xf032, 0xf243, 0xf032, 0xf243, 0xf1c3, 0xf3b2, 0xf1c3, 0xf3b2, 0xf42e, 0xf5fc, 0xf42e, +0xf5fc, 0xf660, 0xf80e, 0xf660, 0xf80e, 0xf660, 0xf80e, 0xf7d6, 0xf963, 0xf7d6, 0xf963, +0xf8fb, 0xfa67, 0xf8fb, 0xfa67, 0xf9a0, 0xfaeb, 0xf9a0, 0xfaeb, 0xf9f7, 0xfb20, 0xf9f7, +0xfb20, 0xfb0c, 0xfc13, 0xfb0c, 0xfc13, 0xfc33, 0xfd16, 0xfc33, 0xfd16, 0xfc33, 0xfd16, +0xfcc2, 0xfd81, 0xfcc2, 0xfd81, 0xfdf0, 0xfe8a, 0xfdf0, 0xfe8a, 0xfefb, 0xff70, 0xfefb, +0xff70, 0x43, 0x93, 0x43, 0x93, 0x26a, 0x295, 0x26a, 0x295, 0x31a, 0x320, +0x31a, 0x320, 0x31a, 0x320, 0x32a, 0x30c, 0x32a, 0x30c, 0x493, 0x452, 0x493, +0x452, 0x573, 0x511, 0x573, 0x511, 0x537, 0x4b6, 0x537, 0x4b6, 0x4db, 0x43c, +0x4db, 0x43c, 0x4db, 0x43c, 0x4d4, 0x41b, 0x4d4, 0x41b, 0x579, 0x4a8, 0x579, +0x4a8, 0x541, 0x45a, 0x541, 0x45a, 0x499, 0x39f, 0x499, 0x39f, 0x525, 0x41b, +0x525, 0x41b, 0x62c, 0x515, 0x62c, 0x515, 0x62c, 0x515, 0x6ad, 0x58b, 0x6ad, +0x58b, 0x720, 0x5f6, 0x720, 0x5f6, 0x727, 0x5f6, 0x727, 0x5f6, 0x648, 0x513, +0x648, 0x513, 0x66a, 0x532, 0x66a, 0x532, 0x66a, 0x532, 0x701, 0x5c6, 0x701, +0x5c6, 0x71d, 0x5e1, 0x71d, 0x5e1, 0x7d2, 0x695, 0x7d2, 0x695, 0x8a7, 0x769, +0x8a7, 0x769, 0x8d5, 0x797, 0x8d5, 0x797, 0x98c, 0x84c, 0x98c, 0x84c, 0x98c, +0x84c, 0xa97, 0x954, 0xa97, 0x954, 0xa91, 0x94c, 0xa91, 0x94c, 0x9ec, 0x8a2, +0x9ec, 0x8a2, 0x89c, 0x74e, 0x89c, 0x74e, 0x7ff, 0x6ac, 0x7ff, 0x6ac, 0x7ab, +0x651, 0x7ab, 0x651, 0x7ab, 0x651, 0x707, 0x5a6, 0x707, 0x5a6, 0x7cd, 0x664, +0x7cd, 0x664, 0x880, 0x70f, 0x880, 0x70f, 0x950, 0x7d6, 0x950, 0x7d6, 0xaf6, +0x974, 0xaf6, 0x974, 0xaf6, 0x974, 0xbe4, 0xa58, 0xbe4, 0xa58, 0xc69, 0xad4, +0xc69, 0xad4, 0xd1d, 0xb7e, 0xd1d, 0xb7e, 0xd0e, 0xb66, 0xd0e, 0xb66, 0xc11, +0xa5f, 0xc11, 0xa5f, 0xada, 0x91e, 0xada, 0x91e, 0xada, 0x91e, 0x9b3, 0x7ed, +0x9b3, 0x7ed, 0x8d3, 0x703, 0x8d3, 0x703, 0x898, 0x6bd, 0x898, 0x6bd, 0x849, +0x665, 0x849, 0x665, 0x76e, 0x57f, 0x76e, 0x57f, 0x6e2, 0x4e9, 0x6e2, 0x4e9, +0x6e2, 0x4e9, 0x64d, 0x44a, 0x64d, 0x44a, 0x626, 0x419, 0x626, 0x419, 0x5c5, +0x3af, 0x5c5, 0x3af, 0x4ce, 0x2b0, 0x4ce, 0x2b0, 0x4c9, 0x2a5, 0x4c9, 0x2a5, +0x4c9, 0x2a5, 0x4be, 0x295, 0x4be, 0x295, 0x579, 0x34d, 0x579, 0x34d, 0x766, +0x53a, 0x766, 0x53a, 0x838, 0x60e, 0x838, 0x60e, 0x8c5, 0x6a2, 0x8c5, 0x6a2, +0xa6d, 0x855, 0xa6d, 0x855, 0xa6d, 0x855, 0xac2, 0x8b9, 0xac2, 0x8b9, 0xa36, +0x841, 0xa36, 0x841, 0xa03, 0x827, 0xa03, 0x827, 0x8f7, 0x73a, 0x8f7, 0x73a, +0x90c, 0x773, 0x90c, 0x773, 0x9b0, 0x83f, 0x9b0, 0x83f, 0x9b0, 0x83f, 0x969, +0x825, 0x969, 0x825, 0x94c, 0x83a, 0x94c, 0x83a, 0x96b, 0x890, 0x96b, 0x890, +0x913, 0x871, 0x913, 0x871, 0x814, 0x7ad, 0x814, 0x7ad, 0x814, 0x7ad, 0x714, +0x6eb, 0x714, 0x6eb, 0x683, 0x698, 0x683, 0x698, 0x696, 0x6e9, 0x696, 0x6e9, +0x654, 0x6e4, 0x654, 0x6e4, 0x65f, 0x729, 0x65f, 0x729, 0x715, 0x815, 0x715, +0x815, 0x715, 0x815, 0x6c4, 0x7f6, 0x6c4, 0x7f6, 0x648, 0x7a7, 0x648, 0x7a7, +0x706, 0x88c, 0x706, 0x88c, 0x6fa, 0x8a1, 0x6fa, 0x8a1, 0x5b1, 0x771, 0x5b1, +0x771, 0x572, 0x744, 0x572, 0x744, 0x572, 0x744, 0x4a8, 0x686, 0x4a8, 0x686, +0x38d, 0x56e, 0x38d, 0x56e, 0x38c, 0x56a, 0x38c, 0x56a, 0x340, 0x514, 0x340, +0x514, 0x31d, 0x4e1, 0x31d, 0x4e1, 0x31d, 0x4e1, 0x366, 0x515, 0x366, 0x515, +0x418, 0x5ad, 0x418, 0x5ad, 0x54f, 0x6c8, 0x54f, 0x6c8, 0x629, 0x783, 0x629, +0x783, 0x67a, 0x7b4, 0x67a, 0x7b4, 0x644, 0x75d, 0x644, 0x75d, 0x644, 0x75d, +0x5d8, 0x6d1, 0x5d8, 0x6d1, 0x66d, 0x748, 0x66d, 0x748, 0x70d, 0x7cb, 0x70d, +0x7cb, 0x6d3, 0x777, 0x6d3, 0x777, 0x693, 0x720, 0x693, 0x720, 0x6ec, 0x766, +0x6ec, 0x766, 0x6ec, 0x766, 0x7d3, 0x83f, 0x7d3, 0x83f, 0x7ca, 0x82a, 0x7ca, +0x82a, 0x6f3, 0x74b, 0x6f3, 0x74b, 0x5c0, 0x613, 0x5c0, 0x613, 0x504, 0x556, +0x504, 0x556, 0x504, 0x556, 0x544, 0x596, 0x544, 0x596, 0x541, 0x595, 0x541, +0x595, 0x46e, 0x4c5, 0x46e, 0x4c5, 0x2ed, 0x346, 0x2ed, 0x346, 0x241, 0x29c, +0x241, 0x29c, 0x1e5, 0x241, 0x1e5, 0x241, 0x1e5, 0x241, 0x111, 0x16c, 0x111, +0x16c, 0xc4, 0x119, 0xc4, 0x119, 0xac, 0xfb, 0xac, 0xfb, 0x9a, 0xdd, +0x9a, 0xdd, 0x126, 0x159, 0x126, 0x159, 0xe6, 0x106, 0xe6, 0x106, 0xe6, +0x106, 0xff78, 0xff80, 0xff78, 0xff80, 0xff2b, 0xff18, 0xff2b, 0xff18, 0xfe5d, 0xfe2b, +0xfe5d, 0xfe2b, 0xfd34, 0xfcdf, 0xfd34, 0xfcdf, 0xfd6d, 0xfcf4, 0xfd6d, 0xfcf4, 0xfd6d, +0xfcf4, 0xfd65, 0xfcc5, 0xfd65, 0xfcc5, 0xfdf4, 0xfd2b, 0xfdf4, 0xfd2b, 0xff3d, 0xfe49, +0xff3d, 0xfe49, 0xffe0, 0xfec2, 0xffe0, 0xfec2, 0x9e, 0xff56, 0x9e, 0xff56, 0x178, +0x8, 0x178, 0x8, 0x178, 0x8, 0x140, 0xffa8, 0x140, 0xffa8, 0xa4, 0xfee8, +0xa4, 0xfee8, 0x63, 0xfe84, 0x63, 0xfe84, 0x46, 0xfe48, 0x46, 0xfe48, 0xd4, +0xfeb9, 0xd4, 0xfeb9, 0x16e, 0xff3a, 0x16e, 0xff3a, 0x16e, 0xff3a, 0x1af, 0xff64, +0x1af, 0xff64, 0x2d9, 0x7c, 0x2d9, 0x7c, 0x440, 0x1d2, 0x440, 0x1d2, 0x4a7, +0x22b, 0x4a7, 0x22b, 0x5be, 0x336, 0x5be, 0x336, 0x5be, 0x336, 0x6e0, 0x44e, +0x6e0, 0x44e, 0x639, 0x3a0, 0x639, 0x3a0, 0x5df, 0x33e, 0x5df, 0x33e, 0x5c0, +0x318, 0x5c0, 0x318, 0x49c, 0x1ed, 0x49c, 0x1ed, 0x4c0, 0x20c, 0x4c0, 0x20c, +0x4c0, 0x20c, 0x5d4, 0x319, 0x5d4, 0x319, 0x63a, 0x378, 0x63a, 0x378, 0x696, +0x3cc, 0x696, 0x3cc, 0x69c, 0x3cb, 0x69c, 0x3cb, 0x73b, 0x462, 0x73b, 0x462, +0x82b, 0x549, 0x82b, 0x549, 0x82b, 0x549, 0x802, 0x518, 0x802, 0x518, 0x796, +0x4a4, 0x796, 0x4a4, 0x7ae, 0x4b5, 0x7ae, 0x4b5, 0x872, 0x572, 0x872, 0x572, +0x971, 0x66d, 0x971, 0x66d, 0x971, 0x66d, 0xacd, 0x7c5, 0xacd, 0x7c5, 0xb52, +0x849, 0xb52, 0x849, 0xb59, 0x852, 0xb59, 0x852, 0xc6f, 0x96d, 0xc6f, 0x96d, +0xc9c, 0x9a1, 0xc9c, 0x9a1, 0xc3b, 0x94b, 0xc3b, 0x94b, 0xc3b, 0x94b, 0xbf5, +0x913, 0xbf5, 0x913, 0xb10, 0x840, 0xb10, 0x840, 0xb72, 0x8b7, 0xb72, 0x8b7, +0xd3b, 0xa97, 0xd3b, 0xa97, 0xdec, 0xb62, 0xdec, 0xb62, 0xdec, 0xb62, 0xdb7, +0xb4a, 0xdb7, 0xb4a, 0xe4c, 0xbfd, 0xe4c, 0xbfd, 0xf31, 0xd02, 0xf31, 0xd02, +0xf8e, 0xd7f, 0xf8e, 0xd7f, 0xee7, 0xcfa, 0xee7, 0xcfa, 0xe2a, 0xc5d, 0xe2a, +0xc5d, 0xe2a, 0xc5d, 0xe83, 0xcd6, 0xe83, 0xcd6, 0xf0a, 0xd7b, 0xf0a, 0xd7b, +0xf3b, 0xdc8, 0xf3b, 0xdc8, 0xf17, 0xdbe, 0xf17, 0xdbe, 0xed4, 0xd90, 0xed4, +0xd90, 0xe9f, 0xd6e, 0xe9f, 0xd6e, 0xe9f, 0xd6e, 0xe73, 0xd52, 0xe73, 0xd52, +0xe83, 0xd6d, 0xe83, 0xd6d, 0xdf6, 0xce7, 0xdf6, 0xce7, 0xd0f, 0xc04, 0xd0f, +0xc04, 0xd11, 0xc05, 0xd11, 0xc05, 0xd11, 0xc05, 0xda5, 0xc94, 0xda5, 0xc94, +0xde1, 0xcc7, 0xde1, 0xcc7, 0xdd4, 0xcaf, 0xdd4, 0xcaf, 0xe55, 0xd20, 0xe55, +0xd20, 0xed5, 0xd8e, 0xed5, 0xd8e, 0xf24, 0xdc9, 0xf24, 0xdc9, 0xf24, 0xdc9, +0x1015, 0xea4, 0x1015, 0xea4, 0x10d0, 0xf48, 0x10d0, 0xf48, 0x1110, 0xf70, 0x1110, +0xf70, 0x10e8, 0xf31, 0x10e8, 0xf31, 0x103b, 0xe6c, 0x103b, 0xe6c, 0x104e, 0xe69, +0x104e, 0xe69, 0x104e, 0xe69, 0x109c, 0xea2, 0x109c, 0xea2, 0x104e, 0xe41, 0x104e, +0xe41, 0x1098, 0xe7b, 0x1098, 0xe7b, 0x1111, 0xee8, 0x1111, 0xee8, 0x1187, 0xf53, +0x1187, 0xf53, 0x1187, 0xf53, 0x11f5, 0xfbc, 0x11f5, 0xfbc, 0x1107, 0xecc, 0x1107, +0xecc, 0x107b, 0xe42, 0x107b, 0xe42, 0x1152, 0xf20, 0x1152, 0xf20, 0x11b9, 0xf93, +0x11b9, 0xf93, 0x11ed, 0xfd6, 0x11ed, 0xfd6, 0x11ed, 0xfd6, 0x11c5, 0xfc2, 0x11c5, +0xfc2, 0x10d3, 0xee8, 0x10d3, 0xee8, 0x104c, 0xe7e, 0x104c, 0xe7e, 0x102d, 0xe7f, +0x102d, 0xe7f, 0xf56, 0xdcb, 0xf56, 0xdcb, 0xe9c, 0xd37, 0xe9c, 0xd37, 0xe9c, +0xd37, 0xf1c, 0xde1, 0xf1c, 0xde1, 0xf55, 0xe46, 0xf55, 0xe46, 0xf18, 0xe37, +0xf18, 0xe37, 0xe4a, 0xd97, 0xe4a, 0xd97, 0xc0a, 0xb87, 0xc0a, 0xb87, 0xc0a, +0xb87, 0xa4a, 0x9f8, 0xa4a, 0x9f8, 0x8ea, 0x8c8, 0x8ea, 0x8c8, 0x694, 0x6a1, +0x694, 0x6a1, 0x428, 0x464, 0x428, 0x464, 0x201, 0x26b, 0x201, 0x26b, 0x35, +0xcb, 0x35, 0xcb, 0x35, 0xcb, 0xff49, 0xb, 0xff49, 0xb, 0xfe85, 0xff6f, +0xfe85, 0xff6f, 0xfcd7, 0xfde9, 0xfcd7, 0xfde9, 0xfacb, 0xfc02, 0xfacb, 0xfc02, 0xf897, +0xf9f2, 0xf897, 0xf9f2, 0xf6c3, 0xf840, 0xf6c3, 0xf840, 0xf6c3, 0xf840, 0xf50b, 0xf6aa, +0xf50b, 0xf6aa, 0xf2a9, 0xf469, 0xf2a9, 0xf469, 0xf113, 0xf2f2, 0xf113, 0xf2f2, 0xf031, +0xf22f, 0xf031, 0xf22f, 0xef72, 0xf18f, 0xef72, 0xf18f, 0xef72, 0xf18f, 0xeefc, 0xf139, +0xeefc, 0xf139, 0xee29, 0xf087, 0xee29, 0xf087, 0xed0c, 0xef8b, 0xed0c, 0xef8b, 0xebb6, +0xee58, 0xebb6, 0xee58, 0xea0a, 0xecd0, 0xea0a, 0xecd0, 0xe77e, 0xea69, 0xe77e, 0xea69, +0xe77e, 0xea69, 0xe42e, 0xe740, 0xe42e, 0xe740, 0xe1d0, 0xe50b, 0xe1d0, 0xe50b, 0xe0a2, +0xe406, 0xe0a2, 0xe406, 0xdf5d, 0xe2ec, 0xdf5d, 0xe2ec, 0xde13, 0xe1cd, 0xde13, 0xe1cd, +0xddd1, 0xe1b6, 0xddd1, 0xe1b6, 0xddd1, 0xe1b6, 0xdd3e, 0xe14e, 0xdd3e, 0xe14e, 0xdb19, +0xdf52, 0xdb19, 0xdf52, 0xd96b, 0xddcc, 0xd96b, 0xddcc, 0xd820, 0xdca6, 0xd820, 0xdca6, +0xd65f, 0xdb07, 0xd65f, 0xdb07, 0xd65f, 0xdb07, 0xd50c, 0xd9d2, 0xd50c, 0xd9d2, 0xd40a, +0xd8ea, 0xd40a, 0xd8ea, 0xd403, 0xd8f8, 0xd403, 0xd8f8, 0xd49d, 0xd9a1, 0xd49d, 0xd9a1, +0xd4a3, 0xd9b0, 0xd4a3, 0xd9b0, 0xd54d, 0xda5e, 0xd54d, 0xda5e, 0xd54d, 0xda5e, 0xd698, +0xdba6, 0xd698, 0xdba6, 0xd73d, 0xdc43, 0xd73d, 0xdc43, 0xd7e6, 0xdcdd, 0xd7e6, 0xdcdd, +0xd7d5, 0xdcb8, 0xd7d5, 0xdcb8, 0xd74b, 0xdc16, 0xd74b, 0xdc16, 0xd85d, 0xdd0a, 0xd85d, +0xdd0a, 0xd85d, 0xdd0a, 0xd976, 0xde02, 0xd976, 0xde02, 0xda81, 0xdeea, 0xda81, 0xdeea, +0xdc85, 0xe0c8, 0xdc85, 0xe0c8, 0xddd5, 0xe1f3, 0xddd5, 0xe1f3, 0xde80, 0xe277, 0xde80, +0xe277, 0xde80, 0xe277, 0xdff4, 0xe3c6, 0xdff4, 0xe3c6, 0xe0d5, 0xe484, 0xe0d5, 0xe484, +0xe03c, 0xe3cb, 0xe03c, 0xe3cb, 0xe121, 0xe492, 0xe121, 0xe492, 0xe307, 0xe65e, 0xe307, +0xe65e, 0xe437, 0xe779, 0xe437, 0xe779, 0xe437, 0xe779, 0xe5e3, 0xe913, 0xe5e3, 0xe913, +0xe76a, 0xea8d, 0xe76a, 0xea8d, 0xe87d, 0xeb96, 0xe87d, 0xeb96, 0xe9d7, 0xeceb, 0xe9d7, +0xeceb, 0xeb16, 0xee26, 0xeb16, 0xee26, 0xeb9b, 0xeeab, 0xeb9b, 0xeeab, 0xeb9b, 0xeeab, +0xebd1, 0xeee1, 0xebd1, 0xeee1, 0xec15, 0xef25, 0xec15, 0xef25, 0xece1, 0xefef, 0xece1, +0xefef, 0xee35, 0xf141, 0xee35, 0xf141, 0xeede, 0xf1e4, 0xeede, 0xf1e4, 0xeede, 0xf1e4, +0xef86, 0xf282, 0xef86, 0xf282, 0xf0c9, 0xf3b5, 0xf0c9, 0xf3b5, 0xf25b, 0xf533, 0xf25b, +0xf533, 0xf460, 0xf71d, 0xf460, 0xf71d, 0xf588, 0xf823, 0xf588, 0xf823, 0xf61c, 0xf88d, +0xf61c, 0xf88d, 0xf61c, 0xf88d, 0xf7eb, 0xfa2b, 0xf7eb, 0xfa2b, 0xf98d, 0xfb96, 0xf98d, +0xfb96, 0xfa43, 0xfc0f, 0xfa43, 0xfc0f, 0xfbc5, 0xfd4e, 0xfbc5, 0xfd4e, 0xfd1c, 0xfe5d, +0xfd1c, 0xfe5d, 0xfd3d, 0xfe34, 0xfd3d, 0xfe34, 0xfd3d, 0xfe34, 0xfe76, 0xff1f, 0xfe76, +0xff1f, 0xe7, 0x142, 0xe7, 0x142, 0x20b, 0x21a, 0x20b, 0x21a, 0x2b8, 0x27d, +0x2b8, 0x27d, 0x3d4, 0x352, 0x3d4, 0x352, 0x3d4, 0x352, 0x495, 0x3d1, 0x495, +0x3d1, 0x5b1, 0x4b1, 0x5b1, 0x4b1, 0x709, 0x5d6, 0x709, 0x5d6, 0x7de, 0x680, +0x7de, 0x680, 0x7e5, 0x664, 0x7e5, 0x664, 0x75e, 0x5c5, 0x75e, 0x5c5, 0x75e, +0x5c5, 0x725, 0x57d, 0x725, 0x57d, 0x6e6, 0x53a, 0x6e6, 0x53a, 0x6ea, 0x542, +0x6ea, 0x542, 0x81d, 0x682, 0x81d, 0x682, 0x946, 0x7bf, 0x946, 0x7bf, 0x946, +0x7bf, 0x97c, 0x80f, 0x97c, 0x80f, 0x9b0, 0x864, 0x9b0, 0x864, 0xa90, 0x967, +0xa90, 0x967, 0xb66, 0xa63, 0xb66, 0xa63, 0xb73, 0xa97, 0xb73, 0xa97, 0xb82, +0xacc, 0xb82, 0xacc, 0xb82, 0xacc, 0xb8c, 0xaf9, 0xb8c, 0xaf9, 0xb62, 0xaf0, +0xb62, 0xaf0, 0xba3, 0xb4c, 0xba3, 0xb4c, 0xc50, 0xc0f, 0xc50, 0xc0f, 0xd64, +0xd33, 0xd64, 0xd33, 0xe37, 0xe0f, 0xe37, 0xe0f, 0xe37, 0xe0f, 0xe65, 0xe40, +0xe65, 0xe40, 0xdc2, 0xd98, 0xdc2, 0xd98, 0xceb, 0xcb5, 0xceb, 0xcb5, 0xc6e, +0xc27, 0xc6e, 0xc27, 0xb48, 0xaeb, 0xb48, 0xaeb, 0xb48, 0xaeb, 0xa2e, 0x9b5, +0xa2e, 0x9b5, 0xa51, 0x9ba, 0xa51, 0x9ba, 0xaf2, 0xa3b, 0xaf2, 0xa3b, 0xb65, +0xa8c, 0xb65, 0xa8c, 0xc6f, 0xb76, 0xc6f, 0xb76, 0xd86, 0xc6c, 0xd86, 0xc6c, +0xd86, 0xc6c, 0xda7, 0xc70, 0xda7, 0xc70, 0xd92, 0xc42, 0xd92, 0xc42, 0xd16, +0xbaf, 0xd16, 0xbaf, 0xbae, 0xa35, 0xbae, 0xa35, 0x98b, 0x805, 0x98b, 0x805, +0x811, 0x683, 0x811, 0x683, 0x811, 0x683, 0x7db, 0x649, 0x7db, 0x649, 0x746, +0x5b4, 0x746, 0x5b4, 0x6bb, 0x52e, 0x6bb, 0x52e, 0x6ea, 0x564, 0x6ea, 0x564, +0x644, 0x4c8, 0x644, 0x4c8, 0x644, 0x4c8, 0x536, 0x3c6, 0x536, 0x3c6, 0x4d6, +0x371, 0x4d6, 0x371, 0x382, 0x229, 0x382, 0x229, 0x1e0, 0x91, 0x1e0, 0x91, +0x1c1, 0x7a, 0x1c1, 0x7a, 0x20b, 0xca, 0x20b, 0xca, 0x20b, 0xca, 0x2f1, +0x1b3, 0x2f1, 0x1b3, 0x475, 0x335, 0x475, 0x335, 0x498, 0x355, 0x498, 0x355, +0x46c, 0x320, 0x46c, 0x320, 0x56a, 0x414, 0x56a, 0x414, 0x5a3, 0x440, 0x5a3, +0x440, 0x5a3, 0x440, 0x4d9, 0x367, 0x4d9, 0x367, 0x482, 0x300, 0x482, 0x300, +0x460, 0x2cf, 0x460, 0x2cf, 0x3e2, 0x241, 0x3e2, 0x241, 0x367, 0x1ba, 0x367, +0x1ba, 0x367, 0x1ba, 0x417, 0x260, 0x417, 0x260, 0x528, 0x36c, 0x528, 0x36c, +0x4a7, 0x2eb, 0x4a7, 0x2eb, 0x429, 0x272, 0x429, 0x272, 0x48b, 0x2df, 0x48b, +0x2df, 0x34e, 0x1b5, 0x34e, 0x1b5, 0x34e, 0x1b5, 0x267, 0xe7, 0x267, 0xe7, +0x334, 0x1d1, 0x334, 0x1d1, 0x2e3, 0x1a6, 0x2e3, 0x1a6, 0x2a7, 0x194, 0x2a7, +0x194, 0x369, 0x284, 0x369, 0x284, 0x3e5, 0x331, 0x3e5, 0x331, 0x3e5, 0x331, +0x445, 0x3c5, 0x445, 0x3c5, 0x4b5, 0x46a, 0x4b5, 0x46a, 0x452, 0x43a, 0x452, +0x43a, 0x37a, 0x395, 0x37a, 0x395, 0x30b, 0x354, 0x30b, 0x354, 0x30b, 0x354, +0x255, 0x2c8, 0x255, 0x2c8, 0x217, 0x2ae, 0x217, 0x2ae, 0x1d1, 0x285, 0x1d1, +0x285, 0x191, 0x25b, 0x191, 0x25b, 0x1d0, 0x2a9, 0x1d0, 0x2a9, 0x141, 0x221, +0x141, 0x221, 0x141, 0x221, 0x134, 0x214, 0x134, 0x214, 0x1ca, 0x2a2, 0x1ca, +0x2a2, 0x1ff, 0x2c9, 0x1ff, 0x2c9, 0x265, 0x31c, 0x265, 0x31c, 0x327, 0x3c6, +0x327, 0x3c6, 0x36d, 0x3f1, 0x36d, 0x3f1, 0x36d, 0x3f1, 0x3b2, 0x418, 0x3b2, +0x418, 0x429, 0x473, 0x429, 0x473, 0x363, 0x390, 0x363, 0x390, 0x33e, 0x352, +0x33e, 0x352, 0x408, 0x405, 0x408, 0x405, 0x408, 0x405, 0x3da, 0x3c6, 0x3da, +0x3c6, 0x369, 0x349, 0x369, 0x349, 0x2f5, 0x2cf, 0x2f5, 0x2cf, 0x34d, 0x328, +0x34d, 0x328, 0x45c, 0x43e, 0x45c, 0x43e, 0x45e, 0x44d, 0x45e, 0x44d, 0x45e, +0x44d, 0x44a, 0x44c, 0x44a, 0x44c, 0x492, 0x4ac, 0x492, 0x4ac, 0x41f, 0x454, +0x41f, 0x454, 0x34b, 0x39f, 0x34b, 0x39f, 0x20b, 0x27e, 0x20b, 0x27e, 0x32, +0xc5, 0x32, 0xc5, 0x32, 0xc5, 0xff3c, 0xffed, 0xff3c, 0xffed, 0xff96, 0x60, +0xff96, 0x60, 0xff9f, 0x7f, 0xff9f, 0x7f, 0xffec, 0xdb, 0xffec, 0xdb, 0x7e, +0x175, 0x7e, 0x175, 0x7e, 0x175, 0x11, 0x109, 0x11, 0x109, 0xffa0, 0x8f, +0xffa0, 0x8f, 0xff0e, 0xffed, 0xff0e, 0xffed, 0xfe79, 0xff3e, 0xfe79, 0xff3e, 0xfe5e, +0xff02, 0xfe5e, 0xff02, 0xfe43, 0xfebd, 0xfe43, 0xfebd, 0xfe43, 0xfebd, 0xfe19, 0xfe63, +0xfe19, 0xfe63, 0xfe7f, 0xfe93, 0xfe7f, 0xfe93, 0xffdd, 0xffb7, 0xffdd, 0xffb7, 0x190, +0x12e, 0x190, 0x12e, 0x253, 0x1b3, 0x253, 0x1b3, 0x1f3, 0x116, 0x1f3, 0x116, +0x1f3, 0x116, 0x282, 0x16a, 0x282, 0x16a, 0x2e1, 0x193, 0x2e1, 0x193, 0x235, +0xb5, 0x235, 0xb5, 0x286, 0xdc, 0x286, 0xdc, 0x320, 0x152, 0x320, 0x152, +0x320, 0x152, 0x343, 0x15a, 0x343, 0x15a, 0x480, 0x284, 0x480, 0x284, 0x74e, +0x548, 0x74e, 0x548, 0x8bd, 0x6b4, 0x8bd, 0x6b4, 0x912, 0x70f, 0x912, 0x70f, +0x9d6, 0x7e1, 0x9d6, 0x7e1, 0x9d6, 0x7e1, 0x9bc, 0x7d9, 0x9bc, 0x7d9, 0x91e, +0x753, 0x91e, 0x753, 0x8b2, 0x702, 0x8b2, 0x702, 0x8bb, 0x728, 0x8bb, 0x728, +0x8bb, 0x744, 0x8bb, 0x744, 0x906, 0x7ab, 0x906, 0x7ab, 0x906, 0x7ab, 0x97c, +0x839, 0x97c, 0x839, 0x94e, 0x81f, 0x94e, 0x81f, 0x94b, 0x82b, 0x94b, 0x82b, +0x94c, 0x835, 0x94c, 0x835, 0x947, 0x831, 0x947, 0x831, 0x947, 0x831, 0x91e, +0x802, 0x91e, 0x802, 0x8f5, 0x7cc, 0x8f5, 0x7cc, 0x93a, 0x7fd, 0x93a, 0x7fd, +0x96d, 0x815, 0x96d, 0x815, 0xa4e, 0x8d5, 0xa4e, 0x8d5, 0xb86, 0x9e8, 0xb86, +0x9e8, 0xb86, 0x9e8, 0xb9b, 0x9d2, 0xb9b, 0x9d2, 0xb7f, 0x98b, 0xb7f, 0x98b, +0xb8f, 0x96e, 0xb8f, 0x96e, 0xb17, 0x8c9, 0xb17, 0x8c9, 0xa4d, 0x7d6, 0xa4d, +0x7d6, 0xa4d, 0x7d6, 0x9d9, 0x73b, 0x9d9, 0x73b, 0xa03, 0x743, 0xa03, 0x743, +0xa46, 0x76a, 0xa46, 0x76a, 0xb53, 0x863, 0xb53, 0x863, 0xca9, 0x9ac, 0xca9, +0x9ac, 0xd98, 0xa96, 0xd98, 0xa96, 0xd98, 0xa96, 0xec4, 0xbc5, 0xec4, 0xbc5, +0xf44, 0xc51, 0xf44, 0xc51, 0xefe, 0xc1f, 0xefe, 0xc1f, 0xea7, 0xbe3, 0xea7, +0xbe3, 0xe5a, 0xbb8, 0xe5a, 0xbb8, 0xdd3, 0xb58, 0xdd3, 0xb58, 0xdd3, 0xb58, +0xd95, 0xb45, 0xd95, 0xb45, 0xdab, 0xb8a, 0xdab, 0xb8a, 0xd1d, 0xb2b, 0xd1d, +0xb2b, 0xcbd, 0xafc, 0xcbd, 0xafc, 0xc9b, 0xb08, 0xc9b, 0xb08, 0xc9b, 0xb08, +0xbcf, 0xa69, 0xbcf, 0xa69, 0xb0c, 0x9cf, 0xb0c, 0x9cf, 0xa6a, 0x951, 0xa6a, +0x951, 0x96d, 0x874, 0x96d, 0x874, 0x8ed, 0x80c, 0x8ed, 0x80c, 0x8ca, 0x7fa, +0x8ca, 0x7fa, 0x8ca, 0x7fa, 0x8bf, 0x7fb, 0x8bf, 0x7fb, 0x8d1, 0x811, 0x8d1, +0x811, 0x844, 0x781, 0x844, 0x781, 0x841, 0x776, 0x841, 0x776, 0x971, 0x897, +0x971, 0x897, 0xa54, 0x967, 0xa54, 0x967, 0xa54, 0x967, 0xa83, 0x97f, 0xa83, +0x97f, 0xaec, 0x9ce, 0xaec, 0x9ce, 0xb2d, 0x9f2, 0xb2d, 0x9f2, 0xb49, 0x9f1, +0xb49, 0x9f1, 0xc27, 0xab1, 0xc27, 0xab1, 0xc27, 0xab1, 0xbf5, 0xa63, 0xbf5, +0xa63, 0xb03, 0x956, 0xb03, 0x956, 0xb71, 0x9ac, 0xb71, 0x9ac, 0xbb3, 0x9da, +0xbb3, 0x9da, 0xb74, 0x98a, 0xb74, 0x98a, 0xbf0, 0x9fa, 0xbf0, 0x9fa, 0xbf0, +0x9fa, 0xcb8, 0xaba, 0xcb8, 0xaba, 0xdac, 0xbab, 0xdac, 0xbab, 0xe93, 0xc95, +0xe93, 0xc95, 0xf03, 0xd0c, 0xf03, 0xd0c, 0xf48, 0xd5c, 0xf48, 0xd5c, 0xf51, +0xd75, 0xf51, 0xd75, 0xf51, 0xd75, 0xe7c, 0xcb5, 0xe7c, 0xcb5, 0xdd3, 0xc24, +0xdd3, 0xc24, 0xd93, 0xc00, 0xd93, 0xc00, 0xc38, 0xac2, 0xc38, 0xac2, 0xbcd, +0xa79, 0xbcd, 0xa79, 0xbcd, 0xa79, 0xc14, 0xae2, 0xc14, 0xae2, 0xb74, 0xa66, +0xb74, 0xa66, 0xc3a, 0xb53, 0xc3a, 0xb53, 0xcd2, 0xc12, 0xcd2, 0xc12, 0xb7e, +0xae6, 0xb7e, 0xae6, 0x9f5, 0x986, 0x9f5, 0x986, 0x9f5, 0x986, 0x80b, 0x7c5, +0x80b, 0x7c5, 0x5ab, 0x58e, 0x5ab, 0x58e, 0x419, 0x426, 0x419, 0x426, 0x2c0, +0x2f6, 0x2c0, 0x2f6, 0x151, 0x1b1, 0x151, 0x1b1, 0x132, 0x1bd, 0x132, 0x1bd, +0x132, 0x1bd, 0x15d, 0x212, 0x15d, 0x212, 0x5a, 0x139, 0x5a, 0x139, 0xfe9f, +0xffa8, 0xfe9f, 0xffa8, 0xfc44, 0xfd78, 0xfc44, 0xfd78, 0xf9df, 0xfb3d, 0xf9df, 0xfb3d, +0xf9df, 0xfb3d, 0xf826, 0xf9ae, 0xf826, 0xf9ae, 0xf619, 0xf7ca, 0xf619, 0xf7ca, 0xf428, +0xf603, 0xf428, 0xf603, 0xf37b, 0xf57f, 0xf37b, 0xf57f, 0xf354, 0xf581, 0xf354, 0xf581, +0xf30a, 0xf55f, 0xf30a, 0xf55f, 0xf30a, 0xf55f, 0xf24d, 0xf4c9, 0xf24d, 0xf4c9, 0xf1a4, +0xf446, 0xf1a4, 0xf446, 0xf104, 0xf3cc, 0xf104, 0xf3cc, 0xef83, 0xf270, 0xef83, 0xf270, +0xed99, 0xf0a9, 0xed99, 0xf0a9, 0xeb86, 0xeeb8, 0xeb86, 0xeeb8, 0xeb86, 0xeeb8, 0xe95c, +0xecb0, 0xe95c, 0xecb0, 0xe7d0, 0xeb44, 0xe7d0, 0xeb44, 0xe731, 0xeac4, 0xe731, 0xeac4, +0xe694, 0xea44, 0xe694, 0xea44, 0xe4c6, 0xe892, 0xe4c6, 0xe892, 0xe4c6, 0xe892, 0xe2e2, +0xe6c8, 0xe2e2, 0xe6c8, 0xe195, 0xe594, 0xe195, 0xe594, 0xe01d, 0xe433, 0xe01d, 0xe433, +0xdeb5, 0xe2e1, 0xdeb5, 0xe2e1, 0xdd4a, 0xe189, 0xdd4a, 0xe189, 0xdbf1, 0xe043, 0xdbf1, +0xe043, 0xdbf1, 0xe043, 0xdb1a, 0xdf7c, 0xdb1a, 0xdf7c, 0xdb99, 0xe008, 0xdb99, 0xe008, +0xdc70, 0xe0eb, 0xdc70, 0xe0eb, 0xdc70, 0xe0f3, 0xdc70, 0xe0f3, 0xdd06, 0xe190, 0xdd06, +0xe190, 0xdd33, 0xe1c1, 0xdd33, 0xe1c1, 0xdd33, 0xe1c1, 0xdcdd, 0xe16c, 0xdcdd, 0xe16c, +0xdd01, 0xe18d, 0xdd01, 0xe18d, 0xdd00, 0xe187, 0xdd00, 0xe187, 0xdcc1, 0xe13f, 0xdcc1, +0xe13f, 0xdcf0, 0xe162, 0xdcf0, 0xe162, 0xdcf0, 0xe162, 0xde25, 0xe288, 0xde25, 0xe288, +0xdef8, 0xe34a, 0xdef8, 0xe34a, 0xe02a, 0xe467, 0xe02a, 0xe467, 0xe1b6, 0xe5db, 0xe1b6, +0xe5db, 0xe24d, 0xe657, 0xe24d, 0xe657, 0xe2f6, 0xe6e4, 0xe2f6, 0xe6e4, 0xe2f6, 0xe6e4, +0xe339, 0xe708, 0xe339, 0xe708, 0xe341, 0xe6f0, 0xe341, 0xe6f0, 0xe3c5, 0xe752, 0xe3c5, +0xe752, 0xe444, 0xe7af, 0xe444, 0xe7af, 0xe518, 0xe860, 0xe518, 0xe860, 0xe705, 0xea2a, +0xe705, 0xea2a, 0xe705, 0xea2a, 0xe898, 0xeb9c, 0xe898, 0xeb9c, 0xe937, 0xec18, 0xe937, +0xec18, 0xea25, 0xece5, 0xea25, 0xece5, 0xeae5, 0xed84, 0xeae5, 0xed84, 0xeb28, 0xeda9, +0xeb28, 0xeda9, 0xeb28, 0xeda9, 0xeb0b, 0xed6f, 0xeb0b, 0xed6f, 0xeb26, 0xed6d, 0xeb26, +0xed6d, 0xec1e, 0xee4b, 0xec1e, 0xee4b, 0xed3d, 0xef51, 0xed3d, 0xef51, 0xedaf, 0xefaa, +0xedaf, 0xefaa, 0xedf7, 0xefdc, 0xedf7, 0xefdc, 0xedf7, 0xefdc, 0xee60, 0xf030, 0xee60, +0xf030, 0xeee1, 0xf09b, 0xeee1, 0xf09b, 0xf0da, 0xf280, 0xf0da, 0xf280, 0xf2f5, 0xf487, +0xf2f5, 0xf487, 0xf3e2, 0xf560, 0xf3e2, 0xf560, 0xf516, 0xf681, 0xf516, 0xf681, 0xf516, +0xf681, 0xf674, 0xf7ca, 0xf674, 0xf7ca, 0xf75c, 0xf89e, 0xf75c, 0xf89e, 0xf795, 0xf8c2, +0xf795, 0xf8c2, 0xf739, 0xf851, 0xf739, 0xf851, 0xf75f, 0xf862, 0xf75f, 0xf862, 0xf75f, +0xf862, 0xf85a, 0xf947, 0xf85a, 0xf947, 0xf9c0, 0xfa97, 0xf9c0, 0xfa97, 0xfaed, 0xfbae, +0xfaed, 0xfbae, 0xfb40, 0xfbeb, 0xfb40, 0xfbeb, 0xfc06, 0xfc9b, 0xfc06, 0xfc9b, 0xfdef, +0xfe6f, 0xfdef, 0xfe6f, 0xfdef, 0xfe6f, 0xffa3, 0x10, 0xffa3, 0x10, 0x38, 0x92, +0x38, 0x92, 0x52, 0x99, 0x52, 0x99, 0x6b, 0xa2, 0x6b, 0xa2, 0xbd, +0xe5, 0xbd, 0xe5, 0xbd, 0xe5, 0x14f, 0x16a, 0x14f, 0x16a, 0x130, 0x13e, +0x130, 0x13e, 0x174, 0x178, 0x174, 0x178, 0x1ad, 0x1a7, 0x1ad, 0x1a7, 0x241, +0x233, 0x241, 0x233, 0x4b5, 0x4a1, 0x4b5, 0x4a1, 0x4b5, 0x4a1, 0x65f, 0x644, +0x65f, 0x644, 0x6e8, 0x6c7, 0x6e8, 0x6c7, 0x758, 0x732, 0x758, 0x732, 0x78e, +0x763, 0x78e, 0x763, 0x7c6, 0x796, 0x7c6, 0x796, 0x888, 0x851, 0x888, 0x851, +0x888, 0x851, 0x8a9, 0x86b, 0x8a9, 0x86b, 0x7ea, 0x7a3, 0x7ea, 0x7a3, 0x92d, +0x8dd, 0x92d, 0x8dd, 0xad0, 0xa75, 0xad0, 0xa75, 0xb7f, 0xb18, 0xb7f, 0xb18, +0xb7f, 0xb18, 0xc54, 0xbdf, 0xc54, 0xbdf, 0xc04, 0xb80, 0xc04, 0xb80, 0xb16, +0xa81, 0xb16, 0xa81, 0xa9c, 0x9f4, 0xa9c, 0x9f4, 0x9e6, 0x92b, 0x9e6, 0x92b, +0x914, 0x845, 0x914, 0x845, 0x914, 0x845, 0x8b1, 0x7cd, 0x8b1, 0x7cd, 0x8f1, +0x7f8, 0x8f1, 0x7f8, 0xa0d, 0x8fe, 0xa0d, 0x8fe, 0xb0e, 0x9eb, 0xb0e, 0x9eb, +0xb4e, 0xa17, 0xb4e, 0xa17, 0xb9b, 0xa50, 0xb9b, 0xa50, 0xb9b, 0xa50, 0xbe3, +0xa86, 0xbe3, 0xa86, 0xb31, 0x9c3, 0xb31, 0x9c3, 0xabb, 0x93d, 0xabb, 0x93d, +0xa4a, 0x8be, 0xa4a, 0x8be, 0x91d, 0x786, 0x91d, 0x786, 0x91d, 0x786, 0x969, +0x7c7, 0x969, 0x7c7, 0x9b2, 0x807, 0x9b2, 0x807, 0x8e8, 0x735, 0x8e8, 0x735, +0x825, 0x66c, 0x825, 0x66c, 0x6cb, 0x50d, 0x6cb, 0x50d, 0x5c3, 0x401, 0x5c3, +0x401, 0x5c3, 0x401, 0x5f2, 0x42c, 0x5f2, 0x42c, 0x586, 0x3bd, 0x586, 0x3bd, +0x448, 0x27d, 0x448, 0x27d, 0x504, 0x336, 0x504, 0x336, 0x671, 0x4a1, 0x671, +0x4a1, 0x6bd, 0x4eb, 0x6bd, 0x4eb, 0x6bd, 0x4eb, 0x754, 0x57e, 0x754, 0x57e, +0x810, 0x637, 0x810, 0x637, 0x848, 0x66d, 0x848, 0x66d, 0x8b2, 0x6d3, 0x8b2, +0x6d3, 0x949, 0x767, 0x949, 0x767, 0x949, 0x767, 0x8bc, 0x6d8, 0x8bc, 0x6d8, +0x763, 0x57d, 0x763, 0x57d, 0x6ce, 0x4e7, 0x6ce, 0x4e7, 0x79e, 0x5b7, 0x79e, +0x5b7, 0x831, 0x64b, 0x831, 0x64b, 0x82d, 0x64b, 0x82d, 0x64b, 0x82d, 0x64b, +0x81f, 0x642, 0x81f, 0x642, 0x799, 0x5c3, 0x799, 0x5c3, 0x775, 0x5aa, 0x775, +0x5aa, 0x719, 0x55b, 0x719, 0x55b, 0x651, 0x4a3, 0x651, 0x4a3, 0x538, 0x39c, +0x538, 0x39c, 0x538, 0x39c, 0x4fa, 0x373, 0x4fa, 0x373, 0x66d, 0x4fe, 0x66d, +0x4fe, 0x790, 0x63b, 0x790, 0x63b, 0x850, 0x717, 0x850, 0x717, 0x8b2, 0x796, +0x8b2, 0x796, 0x8b2, 0x796, 0x8f1, 0x7f4, 0x8f1, 0x7f4, 0x91b, 0x83d, 0x91b, +0x83d, 0x8d8, 0x81a, 0x8d8, 0x81a, 0x847, 0x7a8, 0x847, 0x7a8, 0x717, 0x696, +0x717, 0x696, 0x6c1, 0x65e, 0x6c1, 0x65e, 0x6c1, 0x65e, 0x6e5, 0x69d, 0x6e5, +0x69d, 0x658, 0x62a, 0x658, 0x62a, 0x5bd, 0x5a5, 0x5bd, 0x5a5, 0x4a5, 0x4a2, +0x4a5, 0x4a2, 0x3bb, 0x3ca, 0x3bb, 0x3ca, 0x40f, 0x42c, 0x40f, 0x42c, 0x40f, +0x42c, 0x4e1, 0x509, 0x4e1, 0x509, 0x529, 0x559, 0x529, 0x559, 0x49b, 0x4d1, +0x49b, 0x4d1, 0x4ad, 0x4e6, 0x4ad, 0x4e6, 0x595, 0x5cf, 0x595, 0x5cf, 0x595, +0x5cf, 0x5de, 0x617, 0x5de, 0x617, 0x4c7, 0x4fd, 0x4c7, 0x4fd, 0x304, 0x335, +0x304, 0x335, 0x25d, 0x288, 0x25d, 0x288, 0x1e4, 0x209, 0x1e4, 0x209, 0x16e, +0x18c, 0x16e, 0x18c, 0x16e, 0x18c, 0x1c2, 0x1d9, 0x1c2, 0x1d9, 0x16d, 0x17e, +0x16d, 0x17e, 0x15f, 0x16a, 0x15f, 0x16a, 0x284, 0x28a, 0x284, 0x28a, 0x329, +0x32a, 0x329, 0x32a, 0x31e, 0x31a, 0x31e, 0x31a, 0x31e, 0x31a, 0x303, 0x2fc, +0x303, 0x2fc, 0x25d, 0x253, 0x25d, 0x253, 0x1ce, 0x1c0, 0x1ce, 0x1c0, 0x179, +0x169, 0x179, 0x169, 0x5d, 0x49, 0x5d, 0x49, 0x5d, 0x49, 0xff2d, 0xff15, +0xff2d, 0xff15, 0xfec2, 0xfea5, 0xfec2, 0xfea5, 0xfe85, 0xfe61, 0xfe85, 0xfe61, 0xfe75, +0xfe4a, 0xfe75, 0xfe4a, 0xfe92, 0xfe5d, 0xfe92, 0xfe5d, 0xfdad, 0xfd6d, 0xfdad, 0xfd6d, +0xfdad, 0xfd6d, 0xfcc4, 0xfc78, 0xfcc4, 0xfc78, 0xfc67, 0xfc0c, 0xfc67, 0xfc0c, 0xfbf9, +0xfb8d, 0xfbf9, 0xfb8d, 0xfaeb, 0xfa6c, 0xfaeb, 0xfa6c, 0xf931, 0xf89e, 0xf931, 0xf89e, +0xf9ca, 0xf922, 0xf9ca, 0xf922, 0xf9ca, 0xf922, 0xfb83, 0xfac4, 0xfb83, 0xfac4, 0xfc0a, +0xfb34, 0xfc0a, 0xfb34, 0xfd1a, 0xfc2c, 0xfd1a, 0xfc2c, 0xfe55, 0xfd4f, 0xfe55, 0xfd4f, +0xfeb1, 0xfd94, 0xfeb1, 0xfd94, 0xfeb1, 0xfd94, 0xff17, 0xfde4, 0xff17, 0xfde4, 0xffc3, +0xfe7c, 0xffc3, 0xfe7c, 0xff50, 0xfdf6, 0xff50, 0xfdf6, 0xff11, 0xfda8, 0xff11, 0xfda8, +0x2e, 0xfeb7, 0x2e, 0xfeb7, 0x17b, 0xfff9, 0x17b, 0xfff9, 0x17b, 0xfff9, 0x2e4, +0x15a, 0x2e4, 0x15a, 0x398, 0x20b, 0x398, 0x20b, 0x429, 0x29a, 0x429, 0x29a, +0x52a, 0x39d, 0x52a, 0x39d, 0x5f0, 0x468, 0x5f0, 0x468, 0x6d2, 0x552, 0x6d2, +0x552, 0x6d2, 0x552, 0x6c7, 0x551, 0x6c7, 0x551, 0x668, 0x4fe, 0x668, 0x4fe, +0x76b, 0x610, 0x76b, 0x610, 0x803, 0x6b6, 0x803, 0x6b6, 0x788, 0x64c, 0x788, +0x64c, 0x788, 0x64c, 0x777, 0x64b, 0x777, 0x64b, 0x759, 0x63d, 0x759, 0x63d, +0x711, 0x604, 0x711, 0x604, 0x7be, 0x6bf, 0x7be, 0x6bf, 0x7fb, 0x707, 0x7fb, +0x707, 0x715, 0x62c, 0x715, 0x62c, 0x715, 0x62c, 0x722, 0x640, 0x722, 0x640, +0x7c0, 0x6e3, 0x7c0, 0x6e3, 0x83a, 0x75f, 0x83a, 0x75f, 0x90f, 0x833, 0x90f, +0x833, 0x995, 0x8b6, 0x995, 0x8b6, 0x995, 0x8b6, 0x9e2, 0x8fc, 0x9e2, 0x8fc, +0xa28, 0x93a, 0xa28, 0x93a, 0x9e8, 0x8ee, 0x9e8, 0x8ee, 0x9ab, 0x8a3, 0x9ab, +0x8a3, 0x9b5, 0x89e, 0x9b5, 0x89e, 0x982, 0x85b, 0x982, 0x85b, 0x982, 0x85b, +0xa21, 0x8e8, 0xa21, 0x8e8, 0xb7b, 0xa30, 0xb7b, 0xa30, 0xc56, 0xafa, 0xc56, +0xafa, 0xd42, 0xbd4, 0xd42, 0xbd4, 0xe38, 0xcba, 0xe38, 0xcba, 0xf29, 0xd9b, +0xf29, 0xd9b, 0xf29, 0xd9b, 0x1025, 0xe8a, 0x1025, 0xe8a, 0x1027, 0xe7f, 0x1027, +0xe7f, 0xf6e, 0xdbd, 0xf6e, 0xdbd, 0xf57, 0xd9d, 0xf57, 0xd9d, 0xf93, 0xdd4, +0xf93, 0xdd4, 0xf93, 0xdd4, 0xf9b, 0xdd9, 0xf9b, 0xdd9, 0xfe0, 0xe1b, 0xfe0, +0xe1b, 0xfb0, 0xdeb, 0xfb0, 0xdeb, 0xef0, 0xd2d, 0xef0, 0xd2d, 0xeaf, 0xcef, +0xeaf, 0xcef, 0xe72, 0xcb5, 0xe72, 0xcb5, 0xe72, 0xcb5, 0xd98, 0xbdf, 0xd98, +0xbdf, 0xc6f, 0xaba, 0xc6f, 0xaba, 0xb93, 0x9e1, 0xb93, 0x9e1, 0xbe8, 0xa39, +0xbe8, 0xa39, 0xc6d, 0xac0, 0xc6d, 0xac0, 0xbe4, 0xa36, 0xbe4, 0xa36, 0xbe4, +0xa36, 0xae8, 0x938, 0xae8, 0x938, 0x9e7, 0x834, 0x9e7, 0x834, 0x98a, 0x7d1, +0x98a, 0x7d1, 0xa4f, 0x88e, 0xa4f, 0x88e, 0xaf4, 0x929, 0xaf4, 0x929, 0xaf4, +0x929, 0xaca, 0x8f2, 0xaca, 0x8f2, 0xb8d, 0x9a7, 0xb8d, 0x9a7, 0xd75, 0xb80, +0xd75, 0xb80, 0xecb, 0xcc5, 0xecb, 0xcc5, 0xee4, 0xccd, 0xee4, 0xccd, 0xe3e, +0xc16, 0xe3e, 0xc16, 0xe3e, 0xc16, 0xdbb, 0xb82, 0xdbb, 0xb82, 0xd9a, 0xb52, +0xd9a, 0xb52, 0xe2d, 0xbd7, 0xe2d, 0xbd7, 0xeda, 0xc79, 0xeda, 0xc79, 0xf6a, +0xd01, 0xf6a, 0xd01, 0x1084, 0xe18, 0x1084, 0xe18, 0x1084, 0xe18, 0x11a3, 0xf37, +0x11a3, 0xf37, 0x1230, 0xfc9, 0x1230, 0xfc9, 0x1237, 0xfdb, 0x1237, 0xfdb, 0x126d, +0x1021, 0x126d, 0x1021, 0x123c, 0x1006, 0x123c, 0x1006, 0x123c, 0x1006, 0x11ac, 0xf91, +0x11ac, 0xf91, 0x113d, 0xf43, 0x113d, 0xf43, 0x1012, 0xe3f, 0x1012, 0xe3f, 0xe9f, +0xcf7, 0xe9f, 0xcf7, 0xdb1, 0xc3a, 0xdb1, 0xc3a, 0xd63, 0xc22, 0xd63, 0xc22, +0xd63, 0xc22, 0xd1c, 0xc13, 0xd1c, 0xc13, 0xcce, 0xc00, 0xcce, 0xc00, 0xc64, +0xbd5, 0xc64, 0xbd5, 0xb22, 0xad3, 0xb22, 0xad3, 0x966, 0x958, 0x966, 0x958, +0x78b, 0x7bd, 0x78b, 0x7bd, 0x78b, 0x7bd, 0x5a1, 0x614, 0x5a1, 0x614, 0x3c9, +0x47a, 0x3c9, 0x47a, 0x24a, 0x338, 0x24a, 0x338, 0x16b, 0x294, 0x16b, 0x294, +0xf5, 0x256, 0xf5, 0x256, 0xf5, 0x256, 0x72, 0x207, 0x72, 0x207, 0xff39, +0xff, 0xff39, 0xff, 0xfd60, 0xff53, 0xfd60, 0xff53, 0xfbcb, 0xfde8, 0xfbcb, 0xfde8, +0xfa0b, 0xfc4d, 0xfa0b, 0xfc4d, 0xf791, 0xf9f5, 0xf791, 0xf9f5, 0xf791, 0xf9f5, 0xf582, +0xf805, 0xf582, 0xf805, 0xf3ed, 0xf68c, 0xf3ed, 0xf68c, 0xf23d, 0xf4f4, 0xf23d, 0xf4f4, +0xf109, 0xf3d7, 0xf109, 0xf3d7, 0xf018, 0xf2fa, 0xf018, 0xf2fa, 0xee97, 0xf18d, 0xee97, +0xf18d, 0xee97, 0xf18d, 0xeda9, 0xf0b1, 0xeda9, 0xf0b1, 0xed7b, 0xf094, 0xed7b, 0xf094, +0xec67, 0xef91, 0xec67, 0xef91, 0xeaa2, 0xeddd, 0xeaa2, 0xeddd, 0xe8cb, 0xec17, 0xe8cb, +0xec17, 0xe8cb, 0xec17, 0xe773, 0xead0, 0xe773, 0xead0, 0xe6ed, 0xea5c, 0xe6ed, 0xea5c, +0xe5cd, 0xe94d, 0xe5cd, 0xe94d, 0xe38c, 0xe71f, 0xe38c, 0xe71f, 0xe175, 0xe519, 0xe175, +0xe519, 0xdfbf, 0xe375, 0xdfbf, 0xe375, 0xdfbf, 0xe375, 0xdede, 0xe2a5, 0xdede, 0xe2a5, +0xde13, 0xe1ea, 0xde13, 0xe1ea, 0xdbcf, 0xdfb6, 0xdbcf, 0xdfb6, 0xda26, 0xde1a, 0xda26, +0xde1a, 0xd982, 0xdd82, 0xd982, 0xdd82, 0xd947, 0xdd51, 0xd947, 0xdd51, 0xd947, 0xdd51, +0xd9ee, 0xddfe, 0xd9ee, 0xddfe, 0xda45, 0xde59, 0xda45, 0xde59, 0xd9fe, 0xde12, 0xd9fe, +0xde12, 0xda57, 0xde68, 0xda57, 0xde68, 0xdb61, 0xdf6c, 0xdb61, 0xdf6c, 0xdb61, 0xdf6c, +0xdb4e, 0xdf4f, 0xdb4e, 0xdf4f, 0xdb37, 0xdf29, 0xdb37, 0xdf29, 0xdb88, 0xdf68, 0xdb88, +0xdf68, 0xdb5f, 0xdf2b, 0xdb5f, 0xdf2b, 0xdc47, 0xdff9, 0xdc47, 0xdff9, 0xdcfb, 0xe091, +0xdcfb, 0xe091, 0xdcfb, 0xe091, 0xdd29, 0xe0a1, 0xdd29, 0xe0a1, 0xde85, 0xe1dc, 0xde85, +0xe1dc, 0xdff4, 0xe328, 0xdff4, 0xe328, 0xe0e8, 0xe3f8, 0xe0e8, 0xe3f8, 0xe1ea, 0xe4d3, +0xe1ea, 0xe4d3, 0xe1fa, 0xe4bd, 0xe1fa, 0xe4bd, 0xe1fa, 0xe4bd, 0xe1d4, 0xe46f, 0xe1d4, +0xe46f, 0xe2f6, 0xe56a, 0xe2f6, 0xe56a, 0xe470, 0xe6be, 0xe470, 0xe6be, 0xe64e, 0xe876, +0xe64e, 0xe876, 0xe818, 0xea1b, 0xe818, 0xea1b, 0xe818, 0xea1b, 0xe906, 0xeae6, 0xe906, +0xeae6, 0xea28, 0xebe6, 0xea28, 0xebe6, 0xeb30, 0xeccf, 0xeb30, 0xeccf, 0xeb8e, 0xed10, +0xeb8e, 0xed10, 0xec3c, 0xeda2, 0xec3c, 0xeda2, 0xed50, 0xee9e, 0xed50, 0xee9e, 0xed50, +0xee9e, 0xee3d, 0xef73, 0xee3d, 0xef73, 0xefbd, 0xf0df, 0xefbd, 0xf0df, 0xf12f, 0xf23f, +0xf12f, 0xf23f, 0xf12e, 0xf22f, 0xf12e, 0xf22f, 0xf0e2, 0xf1d6, 0xf0e2, 0xf1d6, 0xf120, +0xf209, 0xf120, 0xf209, 0xf120, 0xf209, 0xf1ae, 0xf28e, 0xf1ae, 0xf28e, 0xf2ce, 0xf3a8, +0xf2ce, 0xf3a8, 0xf3fd, 0xf4d2, 0xf3fd, 0xf4d2, 0xf566, 0xf638, 0xf566, 0xf638, 0xf74e, +0xf81f, 0xf74e, 0xf81f, 0xf74e, 0xf81f, 0xf918, 0xf9e9, 0xf918, 0xf9e9, 0xfa95, 0xfb69, +0xfa95, 0xfb69, 0xfac5, 0xfb9c, 0xfac5, 0xfb9c, 0xfa03, 0xfadd, 0xfa03, 0xfadd, 0xfa47, +0xfb26, 0xfa47, 0xfb26, 0xfb57, 0xfc3a, 0xfb57, 0xfc3a, 0xfb57, 0xfc3a, 0xfbd4, 0xfcbb, +0xfbd4, 0xfcbb, 0xfc65, 0xfd51, 0xfc65, 0xfd51, 0xfdad, 0xfe9c, 0xfdad, 0xfe9c, 0xff37, +0x28, 0xff37, 0x28, 0xd5, 0x1c9, 0xd5, 0x1c9, 0xd5, 0x1c9, 0x184, 0x277, +0x184, 0x277, 0x1f1, 0x2e2, 0x1f1, 0x2e2, 0x286, 0x373, 0x286, 0x373, 0x2d3, +0x3bb, 0x2d3, 0x3bb, 0x376, 0x455, 0x376, 0x455, 0x36e, 0x442, 0x36e, 0x442, +0x36e, 0x442, 0x377, 0x43d, 0x377, 0x43d, 0x462, 0x519, 0x462, 0x519, 0x559, +0x5fd, 0x559, 0x5fd, 0x6eb, 0x779, 0x6eb, 0x779, 0x8ff, 0x976, 0x8ff, 0x976, +0xa25, 0xa82, 0xa25, 0xa82, 0xa25, 0xa82, 0xa92, 0xad5, 0xa92, 0xad5, 0xbf6, +0xc1c, 0xbf6, 0xc1c, 0xce4, 0xced, 0xce4, 0xced, 0xc6b, 0xc55, 0xc6b, 0xc55, +0xc62, 0xc2f, 0xc62, 0xc2f, 0xc62, 0xc2f, 0xc22, 0xbd1, 0xc22, 0xbd1, 0xbfe, +0xb91, 0xbfe, 0xb91, 0xd4c, 0xcc3, 0xd4c, 0xcc3, 0xe1a, 0xd78, 0xe1a, 0xd78, +0xe17, 0xd5e, 0xe17, 0xd5e, 0xe46, 0xd77, 0xe46, 0xd77, 0xe46, 0xd77, 0xe43, +0xd62, 0xe43, 0xd62, 0xe23, 0xd32, 0xe23, 0xd32, 0xd68, 0xc69, 0xd68, 0xc69, +0xc24, 0xb1c, 0xc24, 0xb1c, 0xb68, 0xa57, 0xb68, 0xa57, 0xad9, 0x9c3, 0xad9, +0x9c3, 0xad9, 0x9c3, 0xa43, 0x92a, 0xa43, 0x92a, 0xa11, 0x8f6, 0xa11, 0x8f6, +0x9a1, 0x887, 0x9a1, 0x887, 0x92e, 0x814, 0x92e, 0x814, 0x95b, 0x842, 0x95b, +0x842, 0x95b, 0x842, 0x919, 0x800, 0x919, 0x800, 0x890, 0x778, 0x890, 0x778, +0x8c8, 0x7b0, 0x8c8, 0x7b0, 0x8b8, 0x79e, 0x8b8, 0x79e, 0x852, 0x733, 0x852, +0x733, 0x8e2, 0x7be, 0x8e2, 0x7be, 0x8e2, 0x7be, 0x872, 0x746, 0x872, 0x746, +0x653, 0x51b, 0x653, 0x51b, 0x550, 0x40c, 0x550, 0x40c, 0x534, 0x3e0, 0x534, +0x3e0, 0x4df, 0x379, 0x4df, 0x379, 0x495, 0x31c, 0x495, 0x31c, 0x495, 0x31c, +0x479, 0x2ec, 0x479, 0x2ec, 0x42f, 0x28d, 0x42f, 0x28d, 0x3cc, 0x213, 0x3cc, +0x213, 0x41f, 0x251, 0x41f, 0x251, 0x453, 0x271, 0x453, 0x271, 0x453, 0x271, +0x452, 0x25c, 0x452, 0x25c, 0x4da, 0x2d4, 0x4da, 0x2d4, 0x575, 0x360, 0x575, +0x360, 0x548, 0x328, 0x548, 0x328, 0x4c1, 0x29a, 0x4c1, 0x29a, 0x4f4, 0x2ca, +0x4f4, 0x2ca, 0x4f4, 0x2ca, 0x4f2, 0x2c9, 0x4f2, 0x2c9, 0x4d1, 0x2ad, 0x4d1, +0x2ad, 0x4a8, 0x28e, 0x4a8, 0x28e, 0x416, 0x20b, 0x416, 0x20b, 0x3a6, 0x1ae, +0x3a6, 0x1ae, 0x34f, 0x16e, 0x34f, 0x16e, 0x34f, 0x16e, 0x3e0, 0x21a, 0x3e0, +0x21a, 0x400, 0x257, 0x400, 0x257, 0x30c, 0x184, 0x30c, 0x184, 0x269, 0x103, +0x269, 0x103, 0x203, 0xc1, 0x203, 0xc1, 0x203, 0xc1, 0x27a, 0x15d, 0x27a, +0x15d, 0x385, 0x28c, 0x385, 0x28c, 0x45d, 0x387, 0x45d, 0x387, 0x46f, 0x3bb, +0x46f, 0x3bb, 0x4c6, 0x432, 0x4c6, 0x432, 0x5cc, 0x556, 0x5cc, 0x556, 0x5cc, +0x556, 0x59e, 0x542, 0x59e, 0x542, 0x5bf, 0x57a, 0x5bf, 0x57a, 0x622, 0x5f1, +0x622, 0x5f1, 0x544, 0x523, 0x544, 0x523, 0x4c1, 0x4ad, 0x4c1, 0x4ad, 0x4d6, +0x4cb, 0x4d6, 0x4cb, 0x4d6, 0x4cb, 0x452, 0x44d, 0x452, 0x44d, 0x32d, 0x32a, +0x32d, 0x32a, 0x24d, 0x24a, 0x24d, 0x24a, 0x209, 0x205, 0x209, 0x205, 0x239, +0x231, 0x239, 0x231, 0x239, 0x231, 0x24a, 0x23d, 0x24a, 0x23d, 0x24d, 0x23a, +0x24d, 0x23a, 0x33e, 0x326, 0x33e, 0x326, 0x465, 0x447, 0x465, 0x447, 0x4e2, +0x4bf, 0x4e2, 0x4bf, 0x4ce, 0x4a7, 0x4ce, 0x4a7, 0x4ce, 0x4a7, 0x35c, 0x334, +0x35c, 0x334, 0x1ab, 0x183, 0x1ab, 0x183, 0x163, 0x13c, 0x163, 0x13c, 0xac, +0x89, 0xac, 0x89, 0xffda, 0xffbd, 0xffda, 0xffbd, 0x7a, 0x65, 0x7a, 0x65, +0x7a, 0x65, 0xd9, 0xce, 0xd9, 0xce, 0x13d, 0x13e, 0x13d, 0x13e, 0x2a2, +0x2b0, 0x2a2, 0x2b0, 0x2bc, 0x2d8, 0x2bc, 0x2d8, 0x236, 0x261, 0x236, 0x261, +0x236, 0x261, 0x305, 0x33f, 0x305, 0x33f, 0x285, 0x2cd, 0x285, 0x2cd, 0x16b, +0x1c2, 0x16b, 0x1c2, 0x179, 0x1dd, 0x179, 0x1dd, 0x8f, 0xfe, 0x8f, 0xfe, +0xff87, 0x1, 0xff87, 0x1, 0xff87, 0x1, 0xff62, 0xffe4, 0xff62, 0xffe4, 0xffa1, +0x28, 0xffa1, 0x28, 0xffe4, 0x6f, 0xffe4, 0x6f, 0xff4f, 0xffda, 0xff4f, 0xffda, +0xff0b, 0xff94, 0xff0b, 0xff94, 0xff42, 0xffc6, 0xff42, 0xffc6, 0xff42, 0xffc6, 0xfe2e, +0xfeab, 0xfe2e, 0xfeab, 0xfc86, 0xfcfa, 0xfc86, 0xfcfa, 0xfbc9, 0xfc31, 0xfbc9, 0xfc31, +0xfb95, 0xfbef, 0xfb95, 0xfbef, 0xfbd4, 0xfc20, 0xfbd4, 0xfc20, 0xfbd4, 0xfc20, 0xfd2c, +0xfd67, 0xfd2c, 0xfd67, 0xfe19, 0xfe45, 0xfe19, 0xfe45, 0xfe6e, 0xfe88, 0xfe6e, 0xfe88, +0x27, 0x31, 0x27, 0x31, 0x155, 0x14e, 0x155, 0x14e, 0x144, 0x12d, 0x144, +0x12d, 0x144, 0x12d, 0x1ec, 0x1c7, 0x1ec, 0x1c7, 0x26f, 0x23c, 0x26f, 0x23c, +0x2a6, 0x268, 0x2a6, 0x268, 0x37e, 0x336, 0x37e, 0x336, 0x4a9, 0x459, 0x4a9, +0x459, 0x581, 0x52c, 0x581, 0x52c, 0x581, 0x52c, 0x614, 0x5bc, 0x614, 0x5bc, +0x729, 0x6cf, 0x729, 0x6cf, 0x876, 0x81c, 0x876, 0x81c, 0x933, 0x8db, 0x933, +0x8db, 0x9c5, 0x972, 0x9c5, 0x972, 0x9c5, 0x972, 0x9df, 0x991, 0x9df, 0x991, +0x9b5, 0x96e, 0x9b5, 0x96e, 0xa8a, 0xa4a, 0xa8a, 0xa4a, 0xb08, 0xad0, 0xb08, +0xad0, 0xa4e, 0xa1d, 0xa4e, 0xa1d, 0x95c, 0x933, 0x95c, 0x933, 0x95c, 0x933, +0x8e5, 0x8c4, 0x8e5, 0x8c4, 0x8f2, 0x8d6, 0x8f2, 0x8d6, 0x8e8, 0x8d2, 0x8e8, +0x8d2, 0x89c, 0x88a, 0x89c, 0x88a, 0x84b, 0x83b, 0x84b, 0x83b, 0x84b, 0x83b, +0x826, 0x817, 0x826, 0x817, 0x831, 0x821, 0x831, 0x821, 0x8a6, 0x893, 0x8a6, +0x893, 0x8b8, 0x8a0, 0x8b8, 0x8a0, 0x809, 0x7eb, 0x809, 0x7eb, 0x7f5, 0x7cf, +0x7f5, 0x7cf, 0x7f5, 0x7cf, 0x821, 0x7f1, 0x821, 0x7f1, 0x7dd, 0x7a1, 0x7dd, +0x7a1, 0x82f, 0x7e6, 0x82f, 0x7e6, 0x8b5, 0x85f, 0x8b5, 0x85f, 0x8af, 0x84a, +0x8af, 0x84a, 0x98d, 0x919, 0x98d, 0x919, 0x98d, 0x919, 0xa69, 0x9e5, 0xa69, +0x9e5, 0xa56, 0x9c4, 0xa56, 0x9c4, 0xb64, 0xac3, 0xb64, 0xac3, 0xcb0, 0xbff, +0xcb0, 0xbff, 0xd2c, 0xc6e, 0xd2c, 0xc6e, 0xd2c, 0xc6e, 0xdc6, 0xcfb, 0xdc6, +0xcfb, 0xd93, 0xcbb, 0xd93, 0xcbb, 0xcf4, 0xc11, 0xcf4, 0xc11, 0xd07, 0xc19, +0xd07, 0xc19, 0xcd5, 0xbdd, 0xcd5, 0xbdd, 0xc9e, 0xb9d, 0xc9e, 0xb9d, 0xc9e, +0xb9d, 0xc1c, 0xb12, 0xc1c, 0xb12, 0xb2d, 0xa1b, 0xb2d, 0xa1b, 0xb45, 0xa2c, +0xb45, 0xa2c, 0xb2c, 0xa0b, 0xb2c, 0xa0b, 0xa21, 0x8f9, 0xa21, 0x8f9, 0x9b4, +0x884, 0x9b4, 0x884, 0x9b4, 0x884, 0x9a8, 0x86f, 0x9a8, 0x86f, 0x8f9, 0x7b7, +0x8f9, 0x7b7, 0x8da, 0x78d, 0x8da, 0x78d, 0x8bc, 0x764, 0x8bc, 0x764, 0x727, +0x5c3, 0x727, 0x5c3, 0x727, 0x5c3, 0x644, 0x4d2, 0x644, 0x4d2, 0x678, 0x4f6, +0x678, 0x4f6, 0x685, 0x4f3, 0x685, 0x4f3, 0x6b3, 0x50f, 0x6b3, 0x50f, 0x6f2, +0x53c, 0x6f2, 0x53c, 0x7a1, 0x5d8, 0x7a1, 0x5d8, 0x7a1, 0x5d8, 0x900, 0x723, +0x900, 0x723, 0xa4e, 0x85e, 0xa4e, 0x85e, 0xadb, 0x8d8, 0xadb, 0x8d8, 0xa8f, +0x87a, 0xa8f, 0x87a, 0xa48, 0x823, 0xa48, 0x823, 0xadd, 0x8a9, 0xadd, 0x8a9, +0xadd, 0x8a9, 0xb9f, 0x95e, 0xb9f, 0x95e, 0xc32, 0x9e6, 0xc32, 0x9e6, 0xd48, +0xaf5, 0xd48, 0xaf5, 0xe41, 0xbea, 0xe41, 0xbea, 0xeff, 0xca8, 0xeff, 0xca8, +0xeff, 0xca8, 0x109e, 0xe4a, 0x109e, 0xe4a, 0x120f, 0xfc2, 0x120f, 0xfc2, 0x127b, +0x1039, 0x127b, 0x1039, 0x125f, 0x102c, 0x125f, 0x102c, 0x1231, 0x1011, 0x1231, 0x1011, +0x1228, 0x1020, 0x1228, 0x1020, 0x1228, 0x1020, 0x1162, 0xf74, 0x1162, 0xf74, 0x104d, +0xe7b, 0x104d, 0xe7b, 0xf62, 0xdb0, 0xf62, 0xdb0, 0xeec, 0xd5d, 0xeec, 0xd5d, +0xf4d, 0xde2, 0xf4d, 0xde2, 0xf62, 0xe1c, 0xf62, 0xe1c, 0xf62, 0xe1c, 0xe8f, +0xd70, 0xe8f, 0xd70, 0xd56, 0xc5f, 0xd56, 0xc5f, 0xcb7, 0xbe7, 0xcb7, 0xbe7, +0xbf3, 0xb49, 0xbf3, 0xb49, 0xabd, 0xa39, 0xabd, 0xa39, 0xabd, 0xa39, 0x964, +0x905, 0x964, 0x905, 0x761, 0x726, 0x761, 0x726, 0x62c, 0x613, 0x62c, 0x613, +0x59d, 0x5a4, 0x59d, 0x5a4, 0x484, 0x4aa, 0x484, 0x4aa, 0x379, 0x3bc, 0x379, +0x3bc, 0x379, 0x3bc, 0x29a, 0x2f9, 0x29a, 0x2f9, 0x1b5, 0x22e, 0x1b5, 0x22e, +0xc9, 0x15c, 0xc9, 0x15c, 0xff61, 0xc, 0xff61, 0xc, 0xfd55, 0xfe18, 0xfd55, +0xfe18, 0xfb5c, 0xfc37, 0xfb5c, 0xfc37, 0xfb5c, 0xfc37, 0xf9ac, 0xfa9f, 0xf9ac, 0xfa9f, +0xf83d, 0xf948, 0xf83d, 0xf948, 0xf6da, 0xf7ff, 0xf6da, 0xf7ff, 0xf565, 0xf6a4, 0xf565, +0xf6a4, 0xf441, 0xf59c, 0xf441, 0xf59c, 0xf441, 0xf59c, 0xf36b, 0xf4e3, 0xf36b, 0xf4e3, +0xf254, 0xf3ea, 0xf254, 0xf3ea, 0xf108, 0xf2bf, 0xf108, 0xf2bf, 0xf044, 0xf21c, 0xf044, +0xf21c, 0xef3c, 0xf137, 0xef3c, 0xf137, 0xed94, 0xefb2, 0xed94, 0xefb2, 0xed94, 0xefb2, +0xebf6, 0xee39, 0xebf6, 0xee39, 0xe990, 0xebf8, 0xe990, 0xebf8, 0xe71d, 0xe9aa, 0xe71d, +0xe9aa, 0xe59b, 0xe84c, 0xe59b, 0xe84c, 0xe414, 0xe6e9, 0xe414, 0xe6e9, 0xe296, 0xe58c, +0xe296, 0xe58c, 0xe296, 0xe58c, 0xe165, 0xe47b, 0xe165, 0xe47b, 0xe076, 0xe3aa, 0xe076, +0xe3aa, 0xdf69, 0xe2b7, 0xdf69, 0xe2b7, 0xde85, 0xe1ea, 0xde85, 0xe1ea, 0xde29, 0xe1a2, +0xde29, 0xe1a2, 0xde29, 0xe1a2, 0xddb0, 0xe139, 0xddb0, 0xe139, 0xdd3b, 0xe0cf, 0xdd3b, +0xe0cf, 0xdca2, 0xe03c, 0xdca2, 0xe03c, 0xdc77, 0xe014, 0xdc77, 0xe014, 0xdcce, 0xe069, +0xdcce, 0xe069, 0xdcbd, 0xe051, 0xdcbd, 0xe051, 0xdcbd, 0xe051, 0xdcdd, 0xe067, 0xdcdd, +0xe067, 0xdd4b, 0xe0c6, 0xdd4b, 0xe0c6, 0xddbd, 0xe126, 0xddbd, 0xe126, 0xde26, 0xe17b, +0xde26, 0xe17b, 0xde65, 0xe1a2, 0xde65, 0xe1a2, 0xde7d, 0xe1a1, 0xde7d, 0xe1a1, 0xde7d, +0xe1a1, 0xdf4e, 0xe256, 0xdf4e, 0xe256, 0xe0b7, 0xe3a3, 0xe0b7, 0xe3a3, 0xe160, 0xe430, +0xe160, 0xe430, 0xe192, 0xe445, 0xe192, 0xe445, 0xe1c1, 0xe458, 0xe1c1, 0xe458, 0xe1c1, +0xe458, 0xe22f, 0xe4ab, 0xe22f, 0xe4ab, 0xe347, 0xe5a8, 0xe347, 0xe5a8, 0xe4ca, 0xe712, +0xe4ca, 0xe712, 0xe580, 0xe7b1, 0xe580, 0xe7b1, 0xe555, 0xe770, 0xe555, 0xe770, 0xe595, +0xe79d, 0xe595, 0xe79d, 0xe595, 0xe79d, 0xe688, 0xe87e, 0xe688, 0xe87e, 0xe81d, 0xea03, +0xe81d, 0xea03, 0xe971, 0xeb48, 0xe971, 0xeb48, 0xe9da, 0xeba3, 0xe9da, 0xeba3, 0xeaad, +0xec6a, 0xeaad, 0xec6a, 0xec51, 0xee01, 0xec51, 0xee01, 0xec51, 0xee01, 0xed56, 0xeefa, +0xed56, 0xeefa, 0xed8a, 0xef22, 0xed8a, 0xef22, 0xed73, 0xeefe, 0xed73, 0xeefe, 0xed86, +0xef04, 0xed86, 0xef04, 0xee59, 0xefc8, 0xee59, 0xefc8, 0xee59, 0xefc8, 0xef5d, 0xf0bc, +0xef5d, 0xf0bc, 0xefbf, 0xf10d, 0xefbf, 0xf10d, 0xf02d, 0xf168, 0xf02d, 0xf168, 0xf1b7, +0xf2dc, 0xf1b7, 0xf2dc, 0xf353, 0xf462, 0xf353, 0xf462, 0xf480, 0xf576, 0xf480, 0xf576, +0xf480, 0xf576, 0xf530, 0xf60c, 0xf530, 0xf60c, 0xf504, 0xf5c5, 0xf504, 0xf5c5, 0xf55a, +0xf5ff, 0xf55a, 0xf5ff, 0xf5fb, 0xf683, 0xf5fb, 0xf683, 0xf640, 0xf6aa, 0xf640, 0xf6aa, +0xf640, 0xf6aa, 0xf711, 0xf75e, 0xf711, 0xf75e, 0xf872, 0xf8a2, 0xf872, 0xf8a2, 0xf9d4, +0xf9e9, 0xf9d4, 0xf9e9, 0xfb85, 0xfb7f, 0xfb85, 0xfb7f, 0xfd17, 0xfcf8, 0xfd17, 0xfcf8, +0xfdf0, 0xfdba, 0xfdf0, 0xfdba, 0xfdf0, 0xfdba, 0xff26, 0xfedb, 0xff26, 0xfedb, 0x1a, +0xffbd, 0x1a, 0xffbd, 0x4f, 0xffe3, 0x4f, 0xffe3, 0x100, 0x86, 0x100, 0x86, +0x141, 0xbd, 0x141, 0xbd, 0xca, 0x3f, 0xca, 0x3f, 0xca, 0x3f, 0x1b1, +0x121, 0x1b1, 0x121, 0x384, 0x2f1, 0x384, 0x2f1, 0x4e6, 0x453, 0x4e6, 0x453, +0x6c8, 0x636, 0x6c8, 0x636, 0x840, 0x7b0, 0x840, 0x7b0, 0x840, 0x7b0, 0x918, +0x88a, 0x918, 0x88a, 0xa9d, 0xa13, 0xa9d, 0xa13, 0xb40, 0xab9, 0xb40, 0xab9, +0xb01, 0xa7d, 0xb01, 0xa7d, 0xae7, 0xa65, 0xae7, 0xa65, 0xa4c, 0x9cc, 0xa4c, +0x9cc, 0xa4c, 0x9cc, 0xa40, 0x9be, 0xa40, 0x9be, 0xb23, 0xaa0, 0xb23, 0xaa0, +0xb4b, 0xac4, 0xb4b, 0xac4, 0xb3b, 0xaaf, 0xb3b, 0xaaf, 0xc2c, 0xb97, 0xc2c, +0xb97, 0xc96, 0xbf8, 0xc96, 0xbf8, 0xc96, 0xbf8, 0xc55, 0xbac, 0xc55, 0xbac, +0xbfc, 0xb46, 0xbfc, 0xb46, 0xa7a, 0x9b6, 0xa7a, 0x9b6, 0x99f, 0x8cc, 0x99f, +0x8cc, 0x9b0, 0x8ce, 0x9b0, 0x8ce, 0x9b0, 0x8ce, 0x8e1, 0x7f0, 0x8e1, 0x7f0, +0x80a, 0x708, 0x80a, 0x708, 0x715, 0x605, 0x715, 0x605, 0x669, 0x54b, 0x669, +0x54b, 0x734, 0x609, 0x734, 0x609, 0x819, 0x6e3, 0x819, 0x6e3, 0x819, 0x6e3, +0x7d6, 0x696, 0x7d6, 0x696, 0x7e3, 0x69c, 0x7e3, 0x69c, 0x875, 0x728, 0x875, +0x728, 0x814, 0x6c4, 0x814, 0x6c4, 0x75a, 0x609, 0x75a, 0x609, 0x681, 0x530, +0x681, 0x530, 0x681, 0x530, 0x58b, 0x43d, 0x58b, 0x43d, 0x599, 0x44f, 0x599, +0x44f, 0x67c, 0x537, 0x67c, 0x537, 0x6e1, 0x5a3, 0x6e1, 0x5a3, 0x667, 0x52f, +0x667, 0x52f, 0x667, 0x52f, 0x60a, 0x4d9, 0x60a, 0x4d9, 0x689, 0x55f, 0x689, +0x55f, 0x6de, 0x5ba, 0x6de, 0x5ba, 0x679, 0x55b, 0x679, 0x55b, 0x60b, 0x4f2, +0x60b, 0x4f2, 0x601, 0x4ec, 0x601, 0x4ec, 0x601, 0x4ec, 0x673, 0x561, 0x673, +0x561, 0x660, 0x550, 0x660, 0x550, 0x658, 0x549, 0x658, 0x549, 0x6bb, 0x5ab, +0x6bb, 0x5ab, 0x6f4, 0x5e4, 0x6f4, 0x5e4, 0x7b8, 0x6a6, 0x7b8, 0x6a6, 0x7b8, +0x6a6, 0x7c3, 0x6af, 0x7c3, 0x6af, 0x685, 0x570, 0x685, 0x570, 0x5af, 0x49a, +0x5af, 0x49a, 0x5b6, 0x4a2, 0x5b6, 0x4a2, 0x5f3, 0x4e1, 0x5f3, 0x4e1, 0x5f3, +0x4e1, 0x649, 0x53c, 0x649, 0x53c, 0x65b, 0x555, 0x65b, 0x555, 0x5a3, 0x4a6, +0x5a3, 0x4a6, 0x5aa, 0x4ba, 0x5aa, 0x4ba, 0x6ba, 0x5db, 0x6ba, 0x5db, 0x6d1, +0x605, 0x6d1, 0x605, 0x6d1, 0x605, 0x6bb, 0x605, 0x6bb, 0x605, 0x735, 0x699, +0x735, 0x699, 0x718, 0x698, 0x718, 0x698, 0x7aa, 0x749, 0x7aa, 0x749, 0x8aa, +0x86a, 0x8aa, 0x86a, 0x8cf, 0x8b2, 0x8cf, 0x8b2, 0x8cf, 0x8b2, 0x8db, 0x8e2, +0x8db, 0x8e2, 0x893, 0x8bd, 0x893, 0x8bd, 0x8b6, 0x904, 0x8b6, 0x904, 0x965, +0x9d6, 0x965, 0x9d6, 0x8aa, 0x93c, 0x8aa, 0x93c, 0x8aa, 0x93c, 0x6f6, 0x7a7, +0x6f6, 0x7a7, 0x5c4, 0x690, 0x5c4, 0x690, 0x502, 0x5e7, 0x502, 0x5e7, 0x4a2, +0x59b, 0x4a2, 0x59b, 0x47a, 0x585, 0x47a, 0x585, 0x3bb, 0x4d2, 0x3bb, 0x4d2, +0x3bb, 0x4d2, 0x352, 0x471, 0x352, 0x471, 0x470, 0x593, 0x470, 0x593, 0x528, +0x64a, 0x528, 0x64a, 0x4a9, 0x5c7, 0x4a9, 0x5c7, 0x36c, 0x483, 0x36c, 0x483, +0x14c, 0x258, 0x14c, 0x258, 0x14c, 0x258, 0xd, 0x10c, 0xd, 0x10c, 0xfff9, +0xe9, 0xfff9, 0xe9, 0xff83, 0x63, 0xff83, 0x63, 0xff07, 0xffd6, 0xff07, 0xffd6, +0xff9b, 0x59, 0xff9b, 0x59, 0xff9b, 0x59, 0x73, 0x122, 0x73, 0x122, 0xc0, +0x160, 0xc0, 0x160, 0xfe, 0x190, 0xfe, 0x190, 0x129, 0x1af, 0x129, 0x1af, +0x15c, 0x1d9, 0x15c, 0x1d9, 0x17c, 0x1f1, 0x17c, 0x1f1, 0x17c, 0x1f1, 0x182, +0x1f3, 0x182, 0x1f3, 0xde, 0x14c, 0xde, 0x14c, 0xff6d, 0xffda, 0xff6d, 0xffda, +0xfe7c, 0xfeea, 0xfe7c, 0xfeea, 0xfdf2, 0xfe62, 0xfdf2, 0xfe62, 0xfd67, 0xfdda, 0xfd67, +0xfdda, 0xfd67, 0xfdda, 0xfcf1, 0xfd66, 0xfcf1, 0xfd66, 0xfc9f, 0xfd17, 0xfc9f, 0xfd17, +0xfc74, 0xfced, 0xfc74, 0xfced, 0xfc07, 0xfc7f, 0xfc07, 0xfc7f, 0xfb76, 0xfbeb, 0xfb76, +0xfbeb, 0xfb76, 0xfbeb, 0xfb1d, 0xfb8c, 0xfb1d, 0xfb8c, 0xfa5c, 0xfac2, 0xfa5c, 0xfac2, +0xfa17, 0xfa71, 0xfa17, 0xfa71, 0xfa58, 0xfaa2, 0xfa58, 0xfaa2, 0xf989, 0xf9bf, 0xf989, +0xf9bf, 0xf98f, 0xf9ad, 0xf98f, 0xf9ad, 0xf98f, 0xf9ad, 0xfa8f, 0xfa92, 0xfa8f, 0xfa92, +0xfbc9, 0xfbae, 0xfbc9, 0xfbae, 0xfd63, 0xfd26, 0xfd63, 0xfd26, 0xfe58, 0xfdf9, 0xfe58, +0xfdf9, 0xff51, 0xfecd, 0xff51, 0xfecd, 0xe, 0xff64, 0xe, 0xff64, 0xe, 0xff64, +0xfe, 0x2f, 0xfe, 0x2f, 0x222, 0x12d, 0x222, 0x12d, 0x260, 0x149, 0x260, +0x149, 0x32f, 0x1f6, 0x32f, 0x1f6, 0x430, 0x2d8, 0x430, 0x2d8, 0x430, 0x2d8, +0x476, 0x304, 0x476, 0x304, 0x5ab, 0x421, 0x5ab, 0x421, 0x79f, 0x603, 0x79f, +0x603, 0x87f, 0x6d5, 0x87f, 0x6d5, 0x8d7, 0x724, 0x8d7, 0x724, 0x9a7, 0x7ef, +0x9a7, 0x7ef, 0x9a7, 0x7ef, 0xa2f, 0x877, 0xa2f, 0x877, 0xa36, 0x882, 0xa36, +0x882, 0x9d9, 0x82d, 0x9d9, 0x82d, 0x925, 0x784, 0x925, 0x784, 0x8fd, 0x769, +0x8fd, 0x769, 0x8fd, 0x769, 0x8e8, 0x763, 0x8e8, 0x763, 0x8ac, 0x738, 0x8ac, +0x738, 0x8c4, 0x75f, 0x8c4, 0x75f, 0x865, 0x710, 0x865, 0x710, 0x8c5, 0x77f, +0x8c5, 0x77f, 0x9f0, 0x8b7, 0x9f0, 0x8b7, 0x9f0, 0x8b7, 0x98b, 0x85d, 0x98b, +0x85d, 0x889, 0x763, 0x889, 0x763, 0x808, 0x6e6, 0x808, 0x6e6, 0x78e, 0x66d, +0x78e, 0x66d, 0x7d5, 0x6b2, 0x7d5, 0x6b2, 0x87d, 0x755, 0x87d, 0x755, 0x87d, +0x755, 0x862, 0x732, 0x862, 0x732, 0x8c3, 0x787, 0x8c3, 0x787, 0xa14, 0x8cb, +0xa14, 0x8cb, 0xa63, 0x90c, 0xa63, 0x90c, 0xa77, 0x910, 0xa77, 0x910, 0xa77, +0x910, 0xb47, 0x9d0, 0xb47, 0x9d0, 0xb6f, 0x9e7, 0xb6f, 0x9e7, 0xc21, 0xa8b, +0xc21, 0xa8b, 0xddc, 0xc38, 0xddc, 0xc38, 0xede, 0xd2f, 0xede, 0xd2f, 0xf29, +0xd72, 0xf29, 0xd72, 0xf29, 0xd72, 0xf1f, 0xd62, 0xf1f, 0xd62, 0xf2a, 0xd6b, +0xf2a, 0xd6b, 0xf5d, 0xd9f, 0xf5d, 0xd9f, 0xed6, 0xd1c, 0xed6, 0xd1c, 0xe2e, +0xc7c, 0xe2e, 0xc7c, 0xe09, 0xc61, 0xe09, 0xc61, 0xe09, 0xc61, 0xd93, 0xbf8, +0xd93, 0xbf8, 0xcfe, 0xb72, 0xcfe, 0xb72, 0xcf5, 0xb78, 0xcf5, 0xb78, 0xcc8, +0xb5c, 0xcc8, 0xb5c, 0xc33, 0xad7, 0xc33, 0xad7, 0xc33, 0xad7, 0xc3f, 0xaf1, +0xc3f, 0xaf1, 0xc0b, 0xacb, 0xc0b, 0xacb, 0xaf9, 0x9c3, 0xaf9, 0x9c3, 0xa31, +0x903, 0xa31, 0x903, 0x990, 0x865, 0x990, 0x865, 0x8d6, 0x7ab, 0x8d6, 0x7ab, +0x8d6, 0x7ab, 0x898, 0x768, 0x898, 0x768, 0x8e0, 0x7a6, 0x8e0, 0x7a6, 0x8be, +0x776, 0x8be, 0x776, 0x962, 0x809, 0x962, 0x809, 0xabc, 0x94c, 0xabc, 0x94c, +0xb6b, 0x9e3, 0xb6b, 0x9e3, 0xb6b, 0x9e3, 0xc75, 0xad0, 0xc75, 0xad0, 0xd11, +0xb4f, 0xd11, 0xb4f, 0xd47, 0xb66, 0xd47, 0xb66, 0xdca, 0xbcb, 0xdca, 0xbcb, +0xe5e, 0xc42, 0xe5e, 0xc42, 0xe5e, 0xc42, 0xeeb, 0xcb4, 0xeeb, 0xcb4, 0xfb0, +0xd60, 0xfb0, 0xd60, 0x10cd, 0xe69, 0x10cd, 0xe69, 0x119b, 0xf28, 0x119b, 0xf28, +0x129e, 0x1022, 0x129e, 0x1022, 0x135b, 0x10db, 0x135b, 0x10db, 0x135b, 0x10db, 0x13f5, +0x1177, 0x13f5, 0x1177, 0x1466, 0x11f2, 0x1466, 0x11f2, 0x13ec, 0x1188, 0x13ec, 0x1188, +0x13a9, 0x115b, 0x13a9, 0x115b, 0x13bc, 0x118a, 0x13bc, 0x118a, 0x12f6, 0x10e6, 0x12f6, +0x10e6, 0x12f6, 0x10e6, 0x11b5, 0xfcc, 0x11b5, 0xfcc, 0x1147, 0xf89, 0x1147, 0xf89, +0x102e, 0xe9d, 0x102e, 0xe9d, 0xef3, 0xd92, 0xef3, 0xd92, 0xe66, 0xd36, 0xe66, +0xd36, 0xe66, 0xd36, 0xcae, 0xbaf, 0xcae, 0xbaf, 0xb6b, 0xa9b, 0xb6b, 0xa9b, +0xb1b, 0xa79, 0xb1b, 0xa79, 0xa70, 0x9f8, 0xa70, 0x9f8, 0x969, 0x919, 0x969, +0x919, 0x84b, 0x81e, 0x84b, 0x81e, 0x84b, 0x81e, 0x71c, 0x70d, 0x71c, 0x70d, +0x5b8, 0x5c3, 0x5b8, 0x5c3, 0x4a4, 0x4c3, 0x4a4, 0x4c3, 0x378, 0x3a8, 0x378, +0x3a8, 0x2a8, 0x2e4, 0x2a8, 0x2e4, 0x25f, 0x2a3, 0x25f, 0x2a3, 0x25f, 0x2a3, +0x17d, 0x1c7, 0x17d, 0x1c7, 0x1e, 0x6d, 0x1e, 0x6d, 0xfe18, 0xfe6a, 0xfe18, +0xfe6a, 0xfbe1, 0xfc36, 0xfbe1, 0xfc36, 0xfa11, 0xfa6a, 0xfa11, 0xfa6a, 0xfa11, 0xfa6a, +0xf800, 0xf85e, 0xf800, 0xf85e, 0xf5c2, 0xf62a, 0xf5c2, 0xf62a, 0xf421, 0xf495, 0xf421, +0xf495, 0xf274, 0xf2fa, 0xf274, 0xf2fa, 0xf08a, 0xf127, 0xf08a, 0xf127, 0xefce, 0xf087, +0xefce, 0xf087, 0xefce, 0xf087, 0xef49, 0xf026, 0xef49, 0xf026, 0xee5f, 0xef64, 0xee5f, +0xef64, 0xeda6, 0xeeda, 0xeda6, 0xeeda, 0xec6f, 0xedd7, 0xec6f, 0xedd7, 0xeae1, 0xec81, +0xeae1, 0xec81, 0xe922, 0xeaff, 0xe922, 0xeaff, 0xe922, 0xeaff, 0xe703, 0xe91e, 0xe703, +0xe91e, 0xe4f5, 0xe752, 0xe4f5, 0xe752, 0xe33d, 0xe5dc, 0xe33d, 0xe5dc, 0xe153, 0xe432, +0xe153, 0xe432, 0xdfc9, 0xe2e7, 0xdfc9, 0xe2e7, 0xdfc9, 0xe2e7, 0xdec6, 0xe21f, 0xdec6, +0xe21f, 0xddf8, 0xe189, 0xddf8, 0xe189, 0xddc6, 0xe188, 0xddc6, 0xe188, 0xdcfc, 0xe0e8, +0xdcfc, 0xe0e8, 0xdc21, 0xe02f, 0xdc21, 0xe02f, 0xdb12, 0xdf3b, 0xdb12, 0xdf3b, 0xdb12, +0xdf3b, 0xda13, 0xde4d, 0xda13, 0xde4d, 0xda21, 0xde63, 0xda21, 0xde63, 0xda05, 0xde47, +0xda05, 0xde47, 0xda5e, 0xde97, 0xda5e, 0xde97, 0xda1f, 0xde46, 0xda1f, 0xde46, 0xda94, +0xdea2, 0xda94, 0xdea2, 0xda94, 0xdea2, 0xdbbf, 0xdfad, 0xdbbf, 0xdfad, 0xdb70, 0xdf39, +0xdb70, 0xdf39, 0xdc21, 0xdfc1, 0xdc21, 0xdfc1, 0xdc4a, 0xdfbd, 0xdc4a, 0xdfbd, 0xdc12, +0xdf58, 0xdc12, 0xdf58, 0xdc12, 0xdf58, 0xdce2, 0xdff8, 0xdce2, 0xdff8, 0xdd67, 0xe050, +0xdd67, 0xe050, 0xde9b, 0xe158, 0xde9b, 0xe158, 0xdfa5, 0xe23a, 0xdfa5, 0xe23a, 0xe059, +0xe2cb, 0xe059, 0xe2cb, 0xe1b7, 0xe40a, 0xe1b7, 0xe40a, 0xe1b7, 0xe40a, 0xe2b9, 0xe4f3, +0xe2b9, 0xe4f3, 0xe356, 0xe57c, 0xe356, 0xe57c, 0xe41d, 0xe636, 0xe41d, 0xe636, 0xe456, +0xe668, 0xe456, 0xe668, 0xe534, 0xe744, 0xe534, 0xe744, 0xe714, 0xe927, 0xe714, 0xe927, +0xe714, 0xe927, 0xe868, 0xea83, 0xe868, 0xea83, 0xe920, 0xeb45, 0xe920, 0xeb45, 0xe9d4, +0xec07, 0xe9d4, 0xec07, 0xeb0a, 0xed4c, 0xeb0a, 0xed4c, 0xebf7, 0xee49, 0xebf7, 0xee49, +0xebf7, 0xee49, 0xed20, 0xef7f, 0xed20, 0xef7f, 0xee04, 0xf070, 0xee04, 0xf070, 0xeea6, +0xf11b, 0xeea6, 0xf11b, 0xefda, 0xf255, 0xefda, 0xf255, 0xf056, 0xf2d2, 0xf056, 0xf2d2, +0xf0c5, 0xf33b, 0xf0c5, 0xf33b, 0xf0c5, 0xf33b, 0xf121, 0xf38e, 0xf121, 0xf38e, 0xf1eb, +0xf447, 0xf1eb, 0xf447, 0xf31d, 0xf562, 0xf31d, 0xf562, 0xf444, 0xf66c, 0xf444, 0xf66c, +0xf57e, 0xf784, 0xf57e, 0xf784, 0xf57e, 0xf784, 0xf60a, 0xf7e8, 0xf60a, 0xf7e8, 0xf68a, +0xf83c, 0xf68a, 0xf83c, 0xf6b8, 0xf83c, 0xf6b8, 0xf83c, 0xf6e4, 0xf836, 0xf6e4, 0xf836, +0xf7fd, 0xf91c, 0xf7fd, 0xf91c, 0xf9db, 0xfac6, 0xf9db, 0xfac6, 0xf9db, 0xfac6, 0xfb1d, +0xfbd5, 0xfb1d, 0xfbd5, 0xfc30, 0xfcb6, 0xfc30, 0xfcb6, 0xfd12, 0xfd6a, 0xfd12, 0xfd6a, +0xfda1, 0xfdce, 0xfda1, 0xfdce, 0xff8b, 0xff92, 0xff8b, 0xff92, 0x43, 0x29, 0x43, +0x29, 0x43, 0x29, 0x101, 0xca, 0x101, 0xca, 0x292, 0x245, 0x292, 0x245, +0x315, 0x2b7, 0x315, 0x2b7, 0x4ac, 0x444, 0x4ac, 0x444, 0x59c, 0x52e, 0x59c, +0x52e, 0x59c, 0x52e, 0x58b, 0x51d, 0x58b, 0x51d, 0x72c, 0x6c2, 0x72c, 0x6c2, +0x920, 0x8be, 0x920, 0x8be, 0x9c0, 0x968, 0x9c0, 0x968, 0xb14, 0xac9, 0xb14, +0xac9, 0xc78, 0xc3b, 0xc78, 0xc3b, 0xc78, 0xc3b, 0xc84, 0xc54, 0xc84, 0xc54, +0xdda, 0xdb8, 0xdda, 0xdb8, 0xe90, 0xe7a, 0xe90, 0xe7a, 0xdbe, 0xdb0, 0xdbe, +0xdb0, 0xd72, 0xd6b, 0xd72, 0xd6b, 0xd0e, 0xd0a, 0xd0e, 0xd0a, 0xd0e, 0xd0a, +0xd36, 0xd31, 0xd36, 0xd31, 0xd61, 0xd57, 0xd61, 0xd57, 0xcd9, 0xcc6, 0xcd9, +0xcc6, 0xceb, 0xccb, 0xceb, 0xccb, 0xe1e, 0xdec, 0xe1e, 0xdec, 0xe1e, 0xdec, +0xe53, 0xe0d, 0xe53, 0xe0d, 0xd44, 0xce7, 0xd44, 0xce7, 0xcdb, 0xc64, 0xcdb, +0xc64, 0xbac, 0xb1a, 0xbac, 0xb1a, 0xab8, 0xa0a, 0xab8, 0xa0a, 0x9b5, 0x8eb, +0x9b5, 0x8eb, 0x9b5, 0x8eb, 0x76e, 0x689, 0x76e, 0x689, 0x66d, 0x56e, 0x66d, +0x56e, 0x6cd, 0x5b6, 0x6cd, 0x5b6, 0x823, 0x6f7, 0x823, 0x6f7, 0x8bd, 0x77f, +0x8bd, 0x77f, 0x8b9, 0x76c, 0x8b9, 0x76c, 0x8b9, 0x76c, 0x8a4, 0x74c, 0x8a4, +0x74c, 0x87b, 0x71c, 0x87b, 0x71c, 0x93b, 0x7da, 0x93b, 0x7da, 0x828, 0x6c8, +0x828, 0x6c8, 0x6d9, 0x57d, 0x6d9, 0x57d, 0x6d9, 0x57d, 0x6f0, 0x59d, 0x6f0, +0x59d, 0x609, 0x4c1, 0x609, 0x4c1, 0x5fa, 0x4c0, 0x5fa, 0x4c0, 0x757, 0x62c, +0x757, 0x62c, 0x638, 0x51e, 0x638, 0x51e, 0x52d, 0x426, 0x52d, 0x426, 0x52d, +0x426, 0x5aa, 0x4b4, 0x5aa, 0x4b4, 0x432, 0x34e, 0x432, 0x34e, 0x435, 0x362, +0x435, 0x362, 0x386, 0x2c3, 0x386, 0x2c3, 0x1f9, 0x145, 0x1f9, 0x145, 0x24b, +0x1a4, 0x24b, 0x1a4, 0x24b, 0x1a4, 0x26d, 0x1d0, 0x26d, 0x1d0, 0x3f5, 0x361, +0x3f5, 0x361, 0x40f, 0x383, 0x40f, 0x383, 0x31d, 0x296, 0x31d, 0x296, 0x27a, +0x1f7, 0x27a, 0x1f7, 0x27a, 0x1f7, 0x31f, 0x29f, 0x31f, 0x29f, 0x3ed, 0x36f, +0x3ed, 0x36f, 0x1a0, 0x123, 0x1a0, 0x123, 0x179, 0xfe, 0x179, 0xfe, 0x17f, +0x105, 0x17f, 0x105, 0x1b1, 0x13a, 0x1b1, 0x13a, 0x1b1, 0x13a, 0x3e9, 0x377, +0x3e9, 0x377, 0x376, 0x309, 0x376, 0x309, 0x297, 0x231, 0x297, 0x231, 0x2d2, +0x276, 0x2d2, 0x276, 0x378, 0x327, 0x378, 0x327, 0x424, 0x3e1, 0x424, 0x3e1, +0x424, 0x3e1, 0x3b8, 0x384, 0x3b8, 0x384, 0x365, 0x343, 0x365, 0x343, 0x427, +0x418, 0x427, 0x418, 0x574, 0x579, 0x574, 0x579, 0x653, 0x66e, 0x653, 0x66e, +0x653, 0x66e, 0x613, 0x644, 0x613, 0x644, 0x5bb, 0x602, 0x5bb, 0x602, 0x541, +0x59f, 0x541, 0x59f, 0x55c, 0x5ce, 0x55c, 0x5ce, 0x649, 0x6cf, 0x649, 0x6cf, +0x4a0, 0x537, 0x4a0, 0x537, 0x4a0, 0x537, 0x386, 0x42d, 0x386, 0x42d, 0x39d, +0x451, 0x39d, 0x451, 0x2c0, 0x37e, 0x2c0, 0x37e, 0x374, 0x43a, 0x374, 0x43a, +0x363, 0x42d, 0x363, 0x42d, 0x34c, 0x418, 0x34c, 0x418, 0x34c, 0x418, 0x3b4, +0x47f, 0x3b4, 0x47f, 0x34e, 0x415, 0x34e, 0x415, 0x38d, 0x44e, 0x38d, 0x44e, +0x2a6, 0x35f, 0x2a6, 0x35f, 0x1ea, 0x298, 0x1ea, 0x298, 0x1ea, 0x298, 0x12c, +0x1cf, 0x12c, 0x1cf, 0x166, 0x1fd, 0x166, 0x1fd, 0x2d9, 0x364, 0x2d9, 0x364, +0x19f, 0x21f, 0x19f, 0x21f, 0x1bf, 0x233, 0x1bf, 0x233, 0x1bf, 0x229, 0x1bf, +0x229, 0x1bf, 0x229, 0x1ba, 0x21b, 0x1ba, 0x21b, 0x36c, 0x3c6, 0x36c, 0x3c6, +0x351, 0x3a5, 0x351, 0x3a5, 0x3e9, 0x439, 0x3e9, 0x439, 0x336, 0x384, 0x336, +0x384, 0x333, 0x381, 0x333, 0x381, 0x333, 0x381, 0x39c, 0x3ec, 0x39c, 0x3ec, +0x1c1, 0x213, 0x1c1, 0x213, 0x100, 0x155, 0x100, 0x155, 0x1, 0x5a, 0x1, +0x5a, 0x85, 0xe0, 0x85, 0xe0, 0x85, 0xe0, 0x82, 0xe1, 0x82, 0xe1, +0xff2c, 0xff8c, 0xff2c, 0xff8c, 0xfefa, 0xff5a, 0xfefa, 0xff5a, 0xfe2b, 0xfe8a, 0xfe2b, +0xfe8a, 0xfe79, 0xfed4, 0xfe79, 0xfed4, 0xff6b, 0xffbf, 0xff6b, 0xffbf, 0xff6b, 0xffbf, +0xfead, 0xfef7, 0xfead, 0xfef7, 0xfd9d, 0xfdda, 0xfd9d, 0xfdda, 0xfd49, 0xfd76, 0xfd49, +0xfd76, 0xfcd9, 0xfcf2, 0xfcd9, 0xfcf2, 0xfd6a, 0xfd6d, 0xfd6a, 0xfd6d, 0xfe19, 0xfe02, +0xfe19, 0xfe02, 0xfe19, 0xfe02, 0xfeda, 0xfea7, 0xfeda, 0xfea7, 0xa4, 0x53, 0xa4, +0x53, 0x24e, 0x1de, 0x24e, 0x1de, 0x442, 0x3b2, 0x442, 0x3b2, 0x526, 0x475, +0x526, 0x475, 0x526, 0x475, 0x539, 0x468, 0x539, 0x468, 0x53e, 0x44e, 0x53e, +0x44e, 0x5ec, 0x4df, 0x5ec, 0x4df, 0x6f4, 0x5cc, 0x6f4, 0x5cc, 0x716, 0x5d6, +0x716, 0x5d6, 0x7c7, 0x672, 0x7c7, 0x672, 0x7c7, 0x672, 0x856, 0x6ef, 0x856, +0x6ef, 0x9b0, 0x83c, 0x9b0, 0x83c, 0xb83, 0xa05, 0xb83, 0xa05, 0xbd0, 0xa4c, +0xbd0, 0xa4c, 0xbd9, 0xa52, 0xbd9, 0xa52, 0xbd9, 0xa52, 0xb92, 0xa0d, 0xb92, +0xa0d, 0xb73, 0x9f2, 0xb73, 0x9f2, 0xb67, 0x9ec, 0xb67, 0x9ec, 0xaed, 0x97b, +0xaed, 0x97b, 0xa72, 0x909, 0xa72, 0x909, 0x9c6, 0x868, 0x9c6, 0x868, 0x9c6, +0x868, 0x9e8, 0x896, 0x9e8, 0x896, 0xa30, 0x8e8, 0xa30, 0x8e8, 0x9cc, 0x88d, +0x9cc, 0x88d, 0x8e1, 0x7a8, 0x8e1, 0x7a8, 0x819, 0x6e5, 0x819, 0x6e5, 0x77c, +0x649, 0x77c, 0x649, 0x77c, 0x649, 0x667, 0x533, 0x667, 0x533, 0x5fd, 0x4c4, +0x5fd, 0x4c4, 0x5dd, 0x49c, 0x5dd, 0x49c, 0x69f, 0x552, 0x69f, 0x552, 0x79f, +0x643, 0x79f, 0x643, 0x79f, 0x643, 0x915, 0x7a6, 0x915, 0x7a6, 0xa70, 0x8ec, +0xa70, 0x8ec, 0x9d0, 0x835, 0x9d0, 0x835, 0xa95, 0x8e2, 0xa95, 0x8e2, 0xb0c, +0x93f, 0xb0c, 0x93f, 0xb0e, 0x927, 0xb0e, 0x927, 0xb0e, 0x927, 0xbd2, 0x9d2, +0xbd2, 0x9d2, 0xb75, 0x95d, 0xb75, 0x95d, 0xc33, 0xa05, 0xc33, 0xa05, 0xd3a, +0xaf8, 0xd3a, 0xaf8, 0xd54, 0xb01, 0xd54, 0xb01, 0xd3c, 0xadc, 0xd3c, 0xadc, +0xd3c, 0xadc, 0xca2, 0xa38, 0xca2, 0xa38, 0xc4e, 0x9de, 0xc4e, 0x9de, 0xc23, +0x9b1, 0xc23, 0x9b1, 0xb90, 0x920, 0xb90, 0x920, 0xae6, 0x87b, 0xae6, 0x87b, +0xae6, 0x87b, 0xa4d, 0x7ea, 0xa4d, 0x7ea, 0xa98, 0x840, 0xa98, 0x840, 0xac9, +0x87e, 0xac9, 0x87e, 0xa68, 0x82b, 0xa68, 0x82b, 0x9d9, 0x7ac, 0x9d9, 0x7ac, +0x8d8, 0x6bb, 0x8d8, 0x6bb, 0x8d8, 0x6bb, 0x86b, 0x65d, 0x86b, 0x65d, 0x78a, +0x58a, 0x78a, 0x58a, 0x6b1, 0x4be, 0x6b1, 0x4be, 0x673, 0x48a, 0x673, 0x48a, +0x60b, 0x42a, 0x60b, 0x42a, 0x638, 0x45c, 0x638, 0x45c, 0x638, 0x45c, 0x69c, +0x4c1, 0x69c, 0x4c1, 0x634, 0x458, 0x634, 0x458, 0x637, 0x455, 0x637, 0x455, +0x73a, 0x552, 0x73a, 0x552, 0x828, 0x636, 0x828, 0x636, 0x828, 0x636, 0x9cd, +0x7cf, 0x9cd, 0x7cf, 0xa98, 0x88d, 0xa98, 0x88d, 0xb2f, 0x916, 0xb2f, 0x916, +0xbf2, 0x9cc, 0xbf2, 0x9cc, 0xc46, 0xa13, 0xc46, 0xa13, 0xdea, 0xbad, 0xdea, +0xbad, 0xdea, 0xbad, 0xe67, 0xc22, 0xe67, 0xc22, 0xe97, 0xc4e, 0xe97, 0xc4e, +0xf82, 0xd38, 0xf82, 0xd38, 0x1043, 0xdfc, 0x1043, 0xdfc, 0x1169, 0xf2b, 0x1169, +0xf2b, 0x1206, 0xfd5, 0x1206, 0xfd5, 0x1206, 0xfd5, 0x125e, 0x1040, 0x125e, 0x1040, +0x12ff, 0x10fa, 0x12ff, 0x10fa, 0x13d2, 0x11eb, 0x13d2, 0x11eb, 0x144d, 0x1288, 0x144d, +0x1288, 0x136f, 0x11d1, 0x136f, 0x11d1, 0x136f, 0x11d1, 0x1206, 0x1093, 0x1206, 0x1093, +0x1157, 0x1013, 0x1157, 0x1013, 0x1076, 0xf62, 0x1076, 0xf62, 0xf8c, 0xeaa, 0xf8c, +0xeaa, 0xe3a, 0xd8b, 0xe3a, 0xd8b, 0xd2c, 0xcb1, 0xd2c, 0xcb1, 0xd2c, 0xcb1, +0xd1a, 0xcd2, 0xd1a, 0xcd2, 0xd18, 0xd00, 0xd18, 0xd00, 0xd7e, 0xd95, 0xd7e, +0xd95, 0xc58, 0xc9a, 0xc58, 0xc9a, 0xa20, 0xa8b, 0xa20, 0xa8b, 0x8f4, 0x984, +0x8f4, 0x984, 0x8f4, 0x984, 0x85b, 0x90c, 0x85b, 0x90c, 0x775, 0x843, 0x775, +0x843, 0x653, 0x73b, 0x653, 0x73b, 0x56e, 0x66e, 0x56e, 0x66e, 0x502, 0x615, +0x502, 0x615, 0x502, 0x615, 0x48c, 0x5b0, 0x48c, 0x5b0, 0x30d, 0x441, 0x30d, +0x441, 0x143, 0x286, 0x143, 0x286, 0xff59, 0xaa, 0xff59, 0xaa, 0xfd81, 0xfee0, +0xfd81, 0xfee0, 0xfbd0, 0xfd3f, 0xfbd0, 0xfd3f, 0xfbd0, 0xfd3f, 0xf9d9, 0xfb59, 0xf9d9, +0xfb59, 0xf7a0, 0xf934, 0xf7a0, 0xf934, 0xf60c, 0xf7b6, 0xf60c, 0xf7b6, 0xf5d4, 0xf797, +0xf5d4, 0xf797, 0xf572, 0xf752, 0xf572, 0xf752, 0xf47a, 0xf67a, 0xf47a, 0xf67a, 0xf47a, +0xf67a, 0xf311, 0xf535, 0xf311, 0xf535, 0xf1f3, 0xf43e, 0xf1f3, 0xf43e, 0xf10e, 0xf383, +0xf10e, 0xf383, 0xef6f, 0xf211, 0xef6f, 0xf211, 0xed7c, 0xf04b, 0xed7c, 0xf04b, 0xed7c, +0xf04b, 0xeb85, 0xee83, 0xeb85, 0xee83, 0xe9cf, 0xecfb, 0xe9cf, 0xecfb, 0xe80a, 0xeb65, +0xe80a, 0xeb65, 0xe6eb, 0xea72, 0xe6eb, 0xea72, 0xe55b, 0xe90d, 0xe55b, 0xe90d, 0xe326, +0xe6ff, 0xe326, 0xe6ff, 0xe326, 0xe6ff, 0xe1ec, 0xe5e7, 0xe1ec, 0xe5e7, 0xe08f, 0xe4a7, +0xe08f, 0xe4a7, 0xdf8a, 0xe3bb, 0xdf8a, 0xe3bb, 0xdeae, 0xe2f1, 0xdeae, 0xe2f1, 0xdcea, +0xe13b, 0xdcea, 0xe13b, 0xdc0a, 0xe060, 0xdc0a, 0xe060, 0xdc0a, 0xe060, 0xdb34, 0xdf8b, +0xdb34, 0xdf8b, 0xda09, 0xde5b, 0xda09, 0xde5b, 0xda35, 0xde7c, 0xda35, 0xde7c, 0xd9a1, +0xddd7, 0xd9a1, 0xddd7, 0xd967, 0xdd89, 0xd967, 0xdd89, 0xd967, 0xdd89, 0xda36, 0xde41, +0xda36, 0xde41, 0xda23, 0xde13, 0xda23, 0xde13, 0xd9b3, 0xdd86, 0xd9b3, 0xdd86, 0xd92c, +0xdce1, 0xd92c, 0xdce1, 0xd987, 0xdd1e, 0xd987, 0xdd1e, 0xda47, 0xddc0, 0xda47, 0xddc0, +0xda47, 0xddc0, 0xdb40, 0xde9d, 0xdb40, 0xde9d, 0xdbfc, 0xdf3e, 0xdbfc, 0xdf3e, 0xdc37, +0xdf62, 0xdc37, 0xdf62, 0xdd17, 0xe02d, 0xdd17, 0xe02d, 0xdd9b, 0xe09f, 0xdd9b, 0xe09f, +0xde74, 0xe169, 0xde74, 0xe169, 0xde74, 0xe169, 0xdf9f, 0xe288, 0xdf9f, 0xe288, 0xe095, +0xe376, 0xe095, 0xe376, 0xe1da, 0xe4b4, 0xe1da, 0xe4b4, 0xe3bf, 0xe694, 0xe3bf, 0xe694, +0xe5c7, 0xe899, 0xe5c7, 0xe899, 0xe5c7, 0xe899, 0xe631, 0xe8ff, 0xe631, 0xe8ff, 0xe730, +0xe9fc, 0xe730, 0xe9fc, 0xe89d, 0xeb65, 0xe89d, 0xeb65, 0xe9c7, 0xec88, 0xe9c7, 0xec88, +0xeb47, 0xedff, 0xeb47, 0xedff, 0xebe6, 0xee93, 0xebe6, 0xee93, 0xebe6, 0xee93, 0xec25, +0xeec2, 0xec25, 0xeec2, 0xed21, 0xefab, 0xed21, 0xefab, 0xee22, 0xf094, 0xee22, 0xf094, +0xee24, 0xf079, 0xee24, 0xf079, 0xee2d, 0xf060, 0xee2d, 0xf060, 0xee2d, 0xf060, 0xed3b, +0xef48, 0xed3b, 0xef48, 0xed89, 0xef6c, 0xed89, 0xef6c, 0xefa0, 0xf155, 0xefa0, 0xf155, +0xf101, 0xf283, 0xf101, 0xf283, 0xf1e1, 0xf32f, 0xf1e1, 0xf32f, 0xf235, 0xf34e, 0xf235, +0xf34e, 0xf235, 0xf34e, 0xf292, 0xf374, 0xf292, 0xf374, 0xf3d3, 0xf47e, 0xf3d3, 0xf47e, +0xf5a4, 0xf61a, 0xf5a4, 0xf61a, 0xf665, 0xf6a8, 0xf665, 0xf6a8, 0xf6d6, 0xf6e7, 0xf6d6, +0xf6e7, 0xf757, 0xf73c, 0xf757, 0xf73c, 0xf757, 0xf73c, 0xf837, 0xf7f2, 0xf837, 0xf7f2, +0xfa32, 0xf9c8, 0xfa32, 0xf9c8, 0xfb72, 0xfae9, 0xfb72, 0xfae9, 0xfc68, 0xfbc5, 0xfc68, +0xfbc5, 0xfd5b, 0xfca3, 0xfd5b, 0xfca3, 0xfd5b, 0xfca3, 0xfea4, 0xfddc, 0xfea4, 0xfddc, +0x87, 0xffb4, 0x87, 0xffb4, 0x14e, 0x75, 0x14e, 0x75, 0x207, 0x12c, 0x207, +0x12c, 0x2c3, 0x1e9, 0x2c3, 0x1e9, 0x3eb, 0x315, 0x3eb, 0x315, 0x3eb, 0x315, +0x4fb, 0x42a, 0x4fb, 0x42a, 0x568, 0x49e, 0x568, 0x49e, 0x6af, 0x5eb, 0x6af, +0x5eb, 0x809, 0x74b, 0x809, 0x74b, 0x8bf, 0x805, 0x8bf, 0x805, 0x9f2, 0x93a, +0x9f2, 0x93a, 0x9f2, 0x93a, 0xa93, 0x9da, 0xa93, 0x9da, 0xab4, 0x9f7, 0xab4, +0x9f7, 0xadf, 0xa1a, 0xadf, 0xa1a, 0xa9b, 0x9cb, 0xa9b, 0x9cb, 0xac8, 0x9e9, +0xac8, 0x9e9, 0xac8, 0x9e9, 0xaaf, 0x9bd, 0xaaf, 0x9bd, 0xb75, 0xa6f, 0xb75, +0xa6f, 0xc41, 0xb22, 0xc41, 0xb22, 0xcea, 0xbb1, 0xcea, 0xbb1, 0xd22, 0xbcc, +0xd22, 0xbcc, 0xd37, 0xbc5, 0xd37, 0xbc5, 0xd37, 0xbc5, 0xd90, 0xc01, 0xd90, +0xc01, 0xcec, 0xb42, 0xcec, 0xb42, 0xc06, 0xa41, 0xc06, 0xa41, 0xb4b, 0x96f, +0xb4b, 0x96f, 0xa68, 0x878, 0xa68, 0x878, 0xa09, 0x808, 0xa09, 0x808, 0xa09, +0x808, 0xa44, 0x836, 0xa44, 0x836, 0xa39, 0x824, 0xa39, 0x824, 0x9ca, 0x7b2, +0x9ca, 0x7b2, 0x8c5, 0x6b0, 0x8c5, 0x6b0, 0x8f9, 0x6ec, 0x8f9, 0x6ec, 0x8f9, +0x6ec, 0x95b, 0x75a, 0x95b, 0x75a, 0x9ff, 0x80e, 0x9ff, 0x80e, 0xa90, 0x8b4, +0xa90, 0x8b4, 0xa8a, 0x8c6, 0xa8a, 0x8c6, 0xa90, 0x8e6, 0xa90, 0x8e6, 0xacc, +0x93e, 0xacc, 0x93e, 0xacc, 0x93e, 0xad0, 0x95f, 0xad0, 0x95f, 0xb04, 0x9b0, +0xb04, 0x9b0, 0xa6c, 0x934, 0xa6c, 0x934, 0x9f1, 0x8d4, 0x9f1, 0x8d4, 0xab6, +0x9b2, 0xab6, 0x9b2, 0xa77, 0x989, 0xa77, 0x989, 0xa77, 0x989, 0xa2e, 0x953, +0xa2e, 0x953, 0x95e, 0x892, 0x95e, 0x892, 0x90b, 0x849, 0x90b, 0x849, 0x8f5, +0x83a, 0x8f5, 0x83a, 0x90c, 0x853, 0x90c, 0x853, 0x90c, 0x853, 0x8b6, 0x7fd, +0x8b6, 0x7fd, 0x898, 0x7db, 0x898, 0x7db, 0x877, 0x7b3, 0x877, 0x7b3, 0x8e0, +0x812, 0x8e0, 0x812, 0x948, 0x86f, 0x948, 0x86f, 0x87b, 0x796, 0x87b, 0x796, +0x87b, 0x796, 0x787, 0x696, 0x787, 0x696, 0x7a7, 0x6ab, 0x7a7, 0x6ab, 0x879, +0x772, 0x879, 0x772, 0x808, 0x6fa, 0x808, 0x6fa, 0x818, 0x705, 0x818, 0x705, +0x6c7, 0x5b3, 0x6c7, 0x5b3, 0x6c7, 0x5b3, 0x6d0, 0x5be, 0x6d0, 0x5be, 0x753, +0x647, 0x753, 0x647, 0x794, 0x693, 0x794, 0x693, 0x7a6, 0x6b3, 0x7a6, 0x6b3, +0x6ca, 0x5ea, 0x6ca, 0x5ea, 0x6ca, 0x5ea, 0x6df, 0x615, 0x6df, 0x615, 0x73f, +0x68e, 0x73f, 0x68e, 0x74c, 0x6b8, 0x74c, 0x6b8, 0x73a, 0x6c4, 0x73a, 0x6c4, +0x6ea, 0x694, 0x6ea, 0x694, 0x6b9, 0x683, 0x6b9, 0x683, 0x6b9, 0x683, 0x7aa, +0x794, 0x7aa, 0x794, 0x7c6, 0x7ce, 0x7c6, 0x7ce, 0x74c, 0x771, 0x74c, 0x771, +0x639, 0x678, 0x639, 0x678, 0x6a9, 0x6ff, 0x6a9, 0x6ff, 0x68c, 0x6f4, 0x68c, +0x6f4, 0x68c, 0x6f4, 0x61d, 0x694, 0x61d, 0x694, 0x592, 0x614, 0x592, 0x614, +0x454, 0x4db, 0x454, 0x4db, 0x357, 0x3df, 0x357, 0x3df, 0x2e6, 0x36a, 0x2e6, +0x36a, 0x2e6, 0x36a, 0x341, 0x3be, 0x341, 0x3be, 0x2bc, 0x32d, 0x2bc, 0x32d, +0x238, 0x29b, 0x238, 0x29b, 0x1bc, 0x20e, 0x1bc, 0x20e, 0x194, 0x1d3, 0x194, +0x1d3, 0x153, 0x17e, 0x153, 0x17e, 0x153, 0x17e, 0x16d, 0x185, 0x16d, 0x185, +0x8b, 0x90, 0x8b, 0x90, 0x72, 0x65, 0x72, 0x65, 0xffe2, 0xffc5, 0xffe2, +0xffc5, 0x1f, 0xfff5, 0x1f, 0xfff5, 0x92, 0x5f, 0x92, 0x5f, 0x92, 0x5f, +0x17, 0xffdd, 0x17, 0xffdd, 0x81, 0x45, 0x81, 0x45, 0xc6, 0x8a, 0xc6, +0x8a, 0x10a, 0xd3, 0x10a, 0xd3, 0xd0, 0xa2, 0xd0, 0xa2, 0xd0, 0xa2, +0xbb, 0x98, 0xbb, 0x98, 0xfff3, 0xffde, 0xfff3, 0xffde, 0x1b, 0x17, 0x1b, +0x17, 0xff61, 0xff6d, 0xff61, 0xff6d, 0xff0a, 0xff29, 0xff0a, 0xff29, 0xfe34, 0xfe65, +0xfe34, 0xfe65, 0xfe34, 0xfe65, 0xfd5d, 0xfd9e, 0xfd5d, 0xfd9e, 0xfd28, 0xfd78, 0xfd28, +0xfd78, 0xfd90, 0xfded, 0xfd90, 0xfded, 0xfd07, 0xfd6d, 0xfd07, 0xfd6d, 0xfc4d, 0xfcb9, +0xfc4d, 0xfcb9, 0xfc8d, 0xfcfa, 0xfc8d, 0xfcfa, 0xfc8d, 0xfcfa, 0xfb8c, 0xfbf6, 0xfb8c, +0xfbf6, 0xfba3, 0xfc05, 0xfba3, 0xfc05, 0xfb0b, 0xfb62, 0xfb0b, 0xfb62, 0xfaf3, 0xfb39, +0xfaf3, 0xfb39, 0xfaec, 0xfb1c, 0xfaec, 0xfb1c, 0xfaec, 0xfb1c, 0xfc4b, 0xfc62, 0xfc4b, +0xfc62, 0xfce9, 0xfce5, 0xfce9, 0xfce5, 0xfe0b, 0xfde8, 0xfe0b, 0xfde8, 0xff58, 0xff16, +0xff58, 0xff16, 0xffff, 0xff9c, 0xffff, 0xff9c, 0x1a7, 0x122, 0x1a7, 0x122, 0x1a7, +0x122, 0x2ca, 0x225, 0x2ca, 0x225, 0x2a6, 0x1e2, 0x2a6, 0x1e2, 0x3ad, 0x2ce, +0x3ad, 0x2ce, 0x4b6, 0x3bd, 0x4b6, 0x3bd, 0x4d5, 0x3c6, 0x4d5, 0x3c6, 0x4d5, +0x3c6, 0x6a0, 0x57f, 0x6a0, 0x57f, 0x683, 0x555, 0x683, 0x555, 0x704, 0x5cc, +0x704, 0x5cc, 0x76f, 0x633, 0x76f, 0x633, 0x8e4, 0x7a8, 0x8e4, 0x7a8, 0x8d5, +0x79d, 0x8d5, 0x79d, 0x8d5, 0x79d, 0x9d3, 0x8a3, 0x9d3, 0x8a3, 0xa29, 0x904, +0xa29, 0x904, 0x9ff, 0x8e7, 0x9ff, 0x8e7, 0xa38, 0x92f, 0xa38, 0x92f, 0xa0c, +0x913, 0xa0c, 0x913, 0xad0, 0x9e6, 0xad0, 0x9e6, 0xad0, 0x9e6, 0x9f8, 0x91e, +0x9f8, 0x91e, 0xa81, 0x9b5, 0xa81, 0x9b5, 0xa1a, 0x959, 0xa1a, 0x959, 0xaa1, +0x9e9, 0xaa1, 0x9e9, 0x9f6, 0x944, 0x9f6, 0x944, 0x9f6, 0x944, 0x98f, 0x8df, +0x98f, 0x8df, 0x930, 0x87e, 0x930, 0x87e, 0x923, 0x86b, 0x923, 0x86b, 0x8ec, +0x82a, 0x8ec, 0x82a, 0xa0d, 0x93d, 0xa0d, 0x93d, 0xabc, 0x9db, 0xabc, 0x9db, +0xabc, 0x9db, 0xb8e, 0xa98, 0xb8e, 0xa98, 0xcfc, 0xbef, 0xcfc, 0xbef, 0xecd, +0xda7, 0xecd, 0xda7, 0x10a3, 0xf63, 0x10a3, 0xf63, 0x1004, 0xea9, 0x1004, 0xea9, +0x1138, 0xfc3, 0x1138, 0xfc3, 0x1138, 0xfc3, 0x1046, 0xeb7, 0x1046, 0xeb7, 0x1131, +0xf8b, 0x1131, 0xf8b, 0x1190, 0xfd5, 0x1190, 0xfd5, 0x12eb, 0x111d, 0x12eb, 0x111d, +0x12c7, 0x10ea, 0x12c7, 0x10ea, 0x12c7, 0x10ea, 0x1258, 0x106f, 0x1258, 0x106f, 0x138b, +0x119a, 0x138b, 0x119a, 0x128a, 0x1096, 0x128a, 0x1096, 0x1235, 0x1040, 0x1235, 0x1040, +0x108b, 0xe99, 0x108b, 0xe99, 0xf40, 0xd53, 0xf40, 0xd53, 0xf40, 0xd53, 0x103a, +0xe56, 0x103a, 0xe56, 0xf4c, 0xd72, 0xf4c, 0xd72, 0xe38, 0xc69, 0xe38, 0xc69, +0xde4, 0xc22, 0xde4, 0xc22, 0xbae, 0x9f7, 0xbae, 0x9f7, 0xc8f, 0xae3, 0xc8f, +0xae3, 0xc8f, 0xae3, 0xcf8, 0xb55, 0xcf8, 0xb55, 0xc25, 0xa88, 0xc25, 0xa88, +0xa33, 0x89a, 0xa33, 0x89a, 0xa65, 0x8cd, 0xa65, 0x8cd, 0x96a, 0x7cf, 0x96a, +0x7cf, 0x96a, 0x7cf, 0xa10, 0x86f, 0xa10, 0x86f, 0x9f4, 0x848, 0x9f4, 0x848, +0x90e, 0x754, 0x90e, 0x754, 0xb12, 0x948, 0xb12, 0x948, 0xb4f, 0x971, 0xb4f, +0x971, 0xdb0, 0xbbd, 0xdb0, 0xbbd, 0xdb0, 0xbbd, 0xe4e, 0xc43, 0xe4e, 0xc43, +0xd88, 0xb64, 0xd88, 0xb64, 0xdfd, 0xbc1, 0xdfd, 0xbc1, 0xf0d, 0xcba, 0xf0d, +0xcba, 0xdbb, 0xb52, 0xdbb, 0xb52, 0xf55, 0xcd9, 0xf55, 0xcd9, 0xf55, 0xcd9, +0xec5, 0xc3a, 0xec5, 0xc3a, 0xea8, 0xc12, 0xea8, 0xc12, 0x10d3, 0xe36, 0x10d3, +0xe36, 0x11c9, 0xf2b, 0x11c9, 0xf2b, 0x1212, 0xf79, 0x1212, 0xf79, 0x1212, 0xf79, +0x10e3, 0xe54, 0x10e3, 0xe54, 0x10d9, 0xe5b, 0x10d9, 0xe5b, 0x10b4, 0xe4c, 0x10b4, +0xe4c, 0x1175, 0xf29, 0x1175, 0xf29, 0x112d, 0xf03, 0x112d, 0xf03, 0x10b2, 0xeb0, +0x10b2, 0xeb0, 0x10b2, 0xeb0, 0xe70, 0xc98, 0xe70, 0xc98, 0xe2e, 0xc85, 0xe2e, +0xc85, 0xdb8, 0xc40, 0xdb8, 0xc40, 0xd07, 0xbc4, 0xd07, 0xbc4, 0xbee, 0xadf, +0xbee, 0xadf, 0xb53, 0xa7a, 0xb53, 0xa7a, 0xb53, 0xa7a, 0xc11, 0xb6d, 0xc11, +0xb6d, 0xcb2, 0xc43, 0xcb2, 0xc43, 0xd0c, 0xccf, 0xd0c, 0xccf, 0xb27, 0xb1b, +0xb27, 0xb1b, 0x98e, 0x9b1, 0x98e, 0x9b1, 0x98e, 0x9b1, 0x99c, 0x9eb, 0x99c, +0x9eb, 0x9fb, 0xa73, 0x9fb, 0xa73, 0x813, 0x8b2, 0x813, 0x8b2, 0x72e, 0x7f0, +0x72e, 0x7f0, 0x5a5, 0x688, 0x5a5, 0x688, 0x519, 0x61c, 0x519, 0x61c, 0x519, +0x61c, 0x579, 0x69a, 0x579, 0x69a, 0x365, 0x4a2, 0x365, 0x4a2, 0xff5f, 0xb8, +0xff5f, 0xb8, 0xfead, 0x22, 0xfead, 0x22, 0xfd77, 0xff08, 0xfd77, 0xff08, 0xfb95, +0xfd44, 0xfb95, 0xfd44, 0xfb95, 0xfd44, 0xf9d6, 0xfba3, 0xf9d6, 0xfba3, 0xf6e9, 0xf8d7, +0xf6e9, 0xf8d7, 0xf68b, 0xf89b, 0xf68b, 0xf89b, 0xf3db, 0xf610, 0xf3db, 0xf610, 0xf24f, +0xf4aa, 0xf24f, 0xf4aa, 0xf24f, 0xf4aa, 0xf186, 0xf40a, 0xf186, 0xf40a, 0xee31, 0xf0e0, +0xee31, 0xf0e0, 0xec26, 0xef01, 0xec26, 0xef01, 0xec6f, 0xef77, 0xec6f, 0xef77, 0xe9f2, +0xed28, 0xe9f2, 0xed28, 0xe86b, 0xebcf, 0xe86b, 0xebcf, 0xe86b, 0xebcf, 0xe6c9, 0xea5a, +0xe6c9, 0xea5a, 0xe300, 0xe6bb, 0xe300, 0xe6bb, 0xe183, 0xe567, 0xe183, 0xe567, 0xe089, +0xe494, 0xe089, 0xe494, 0xdfd4, 0xe401, 0xdfd4, 0xe401, 0xdebf, 0xe309, 0xdebf, 0xe309, +0xdebf, 0xe309, 0xdd1a, 0xe17e, 0xdd1a, 0xe17e, 0xdc6e, 0xe0e5, 0xdc6e, 0xe0e5, 0xdc2f, +0xe0b3, 0xdc2f, 0xe0b3, 0xda79, 0xdf05, 0xda79, 0xdf05, 0xd8bf, 0xdd4d, 0xd8bf, 0xdd4d, +0xd8bf, 0xdd4d, 0xd6bf, 0xdb49, 0xd6bf, 0xdb49, 0xd539, 0xd9b9, 0xd539, 0xd9b9, 0xd6e6, +0xdb56, 0xd6e6, 0xdb56, 0xd7ea, 0xdc45, 0xd7ea, 0xdc45, 0xd65c, 0xda9e, 0xd65c, 0xda9e, +0xd659, 0xda7f, 0xd659, 0xda7f, 0xd659, 0xda7f, 0xd69d, 0xdaa3, 0xd69d, 0xdaa3, 0xd7bf, +0xdba3, 0xd7bf, 0xdba3, 0xd81e, 0xdbdd, 0xd81e, 0xdbdd, 0xd7e7, 0xdb81, 0xd7e7, 0xdb81, +0xd7f2, 0xdb68, 0xd7f2, 0xdb68, 0xd828, 0xdb79, 0xd828, 0xdb79, 0xd828, 0xdb79, 0xd9ea, +0xdd18, 0xd9ea, 0xdd18, 0xdb6b, 0xde78, 0xdb6b, 0xde78, 0xdc7a, 0xdf67, 0xdc7a, 0xdf67, +0xdb8e, 0xde5e, 0xdb8e, 0xde5e, 0xdd58, 0xe00f, 0xdd58, 0xe00f, 0xdd58, 0xe00f, 0xe021, +0xe2c0, 0xe021, 0xe2c0, 0xe08e, 0xe319, 0xe08e, 0xe319, 0xe0e7, 0xe35f, 0xe0e7, 0xe35f, +0xe253, 0xe4bb, 0xe253, 0xe4bb, 0xe3d5, 0xe62f, 0xe3d5, 0xe62f, 0xe546, 0xe794, 0xe546, +0xe794, 0xe546, 0xe794, 0xe827, 0xea6a, 0xe827, 0xea6a, 0xe870, 0xeaa8, 0xe870, 0xeaa8, +0xeada, 0xed07, 0xeada, 0xed07, 0xedef, 0xf011, 0xedef, 0xf011, 0xedfb, 0xf011, 0xedfb, +0xf011, 0xedfb, 0xf011, 0xef2a, 0xf132, 0xef2a, 0xf132, 0xede4, 0xefdd, 0xede4, 0xefdd, +0xed99, 0xef81, 0xed99, 0xef81, 0xede3, 0xefb8, 0xede3, 0xefb8, 0xee10, 0xefd0, 0xee10, +0xefd0, 0xede6, 0xef8e, 0xede6, 0xef8e, 0xede6, 0xef8e, 0xee82, 0xf010, 0xee82, 0xf010, +0xf067, 0xf1da, 0xf067, 0xf1da, 0xf0fe, 0xf254, 0xf0fe, 0xf254, 0xf367, 0xf49f, 0xf367, +0xf49f, 0xf361, 0xf47a, 0xf361, 0xf47a, 0xf362, 0xf45c, 0xf362, 0xf45c, 0xf362, 0xf45c, +0xf27f, 0xf35a, 0xf27f, 0xf35a, 0xf306, 0xf3c3, 0xf306, 0xf3c3, 0xf56b, 0xf60b, 0xf56b, +0xf60b, 0xf4c4, 0xf549, 0xf4c4, 0xf549, 0xf4a2, 0xf50d, 0xf4a2, 0xf50d, 0xf4a2, 0xf50d, +0xf621, 0xf676, 0xf621, 0xf676, 0xf857, 0xf899, 0xf857, 0xf899, 0xfaaf, 0xfae0, 0xfaaf, +0xfae0, 0xfb92, 0xfbb6, 0xfb92, 0xfbb6, 0xfbb0, 0xfbca, 0xfbb0, 0xfbca, 0xfd14, 0xfd27, +0xfd14, 0xfd27, 0xfd14, 0xfd27, 0xfe9b, 0xfeab, 0xfe9b, 0xfeab, 0x124, 0x132, 0x124, +0x132, 0x3cd, 0x3dc, 0x3cd, 0x3dc, 0x4c8, 0x4d9, 0x4c8, 0x4d9, 0x4bf, 0x4d4, +0x4bf, 0x4d4, 0x7b2, 0x7cc, 0x7b2, 0x7cc, 0x7b2, 0x7cc, 0x8cd, 0x8eb, 0x8cd, +0x8eb, 0x894, 0x8b7, 0x894, 0x8b7, 0xa12, 0xa38, 0xa12, 0xa38, 0xaa6, 0xace, +0xaa6, 0xace, 0x9fa, 0xa21, 0x9fa, 0xa21, 0x9fa, 0xa21, 0xad1, 0xaf6, 0xad1, +0xaf6, 0xbd6, 0xbf6, 0xbd6, 0xbf6, 0xc05, 0xc1e, 0xc05, 0xc1e, 0xc6b, 0xc79, +0xc6b, 0xc79, 0xc04, 0xc04, 0xc04, 0xc04, 0xc07, 0xbf5, 0xc07, 0xbf5, 0xc07, +0xbf5, 0xb3d, 0xb17, 0xb3d, 0xb17, 0xb74, 0xb37, 0xb74, 0xb37, 0xa93, 0xa3d, +0xa93, 0xa3d, 0xb16, 0xaa5, 0xb16, 0xaa5, 0xb3f, 0xab1, 0xb3f, 0xab1, 0xc6d, +0xbc2, 0xc6d, 0xbc2, 0xc6d, 0xbc2, 0xbbd, 0xaf3, 0xbbd, 0xaf3, 0xc97, 0xbae, +0xc97, 0xbae, 0xd9f, 0xc97, 0xd9f, 0xc97, 0xc41, 0xb1c, 0xc41, 0xb1c, 0xbc7, +0xa85, 0xbc7, 0xa85, 0xbc7, 0xa85, 0x972, 0x815, 0x972, 0x815, 0xb1a, 0x9a5, +0xb1a, 0x9a5, 0xa6b, 0x8df, 0xa6b, 0x8df, 0xbe9, 0xa48, 0xbe9, 0xa48, 0xd07, +0xb53, 0xd07, 0xb53, 0xd5c, 0xb99, 0xd5c, 0xb99, 0xd5c, 0xb99, 0xf44, 0xd74, +0xf44, 0xd74, 0xfd4, 0xdf8, 0xfd4, 0xdf8, 0xed3, 0xcee, 0xed3, 0xcee, 0xef7, +0xd0b, 0xef7, 0xd0b, 0xeb2, 0xcc0, 0xeb2, 0xcc0, 0xde0, 0xbea, 0xde0, 0xbea, +0xde0, 0xbea, 0xec2, 0xcc9, 0xec2, 0xcc9, 0xdd4, 0xbd8, 0xdd4, 0xbd8, 0xd3f, +0xb41, 0xd3f, 0xb41, 0xca7, 0xaa6, 0xca7, 0xaa6, 0xd6e, 0xb6b, 0xd6e, 0xb6b, +0xd6e, 0xb6b, 0xc0d, 0xa07, 0xc0d, 0xa07, 0xa24, 0x81b, 0xa24, 0x81b, 0x7e8, +0x5dc, 0x7e8, 0x5dc, 0x5c1, 0x3b0, 0x5c1, 0x3b0, 0x36f, 0x15a, 0x36f, 0x15a, +0x449, 0x22f, 0x449, 0x22f, 0x449, 0x22f, 0x2d9, 0xba, 0x2d9, 0xba, 0x190, +0xff6c, 0x190, 0xff6c, 0x19b, 0xff73, 0x19b, 0xff73, 0xdb, 0xfeaf, 0xdb, 0xfeaf, +0x33, 0xfe04, 0x33, 0xfe04, 0xff01, 0xfcd1, 0xff01, 0xfcd1, 0xff01, 0xfcd1, 0x74, +0xfe43, 0x74, 0xfe43, 0xfee8, 0xfcba, 0xfee8, 0xfcba, 0xff32, 0xfd09, 0xff32, 0xfd09, +0xfde7, 0xfbc5, 0xfde7, 0xfbc5, 0xfeed, 0xfcd5, 0xfeed, 0xfcd5, 0xfeed, 0xfcd5, 0xff1d, +0xfd12, 0xff1d, 0xfd12, 0xffbe, 0xfdc4, 0xffbe, 0xfdc4, 0x1d6, 0xffef, 0x1d6, 0xffef, +0xf1, 0xff21, 0xf1, 0xff21, 0xfef9, 0xfd42, 0xfef9, 0xfd42, 0xb9, 0xff1f, 0xb9, +0xff1f, 0xb9, 0xff1f, 0xe4, 0xff69, 0xe4, 0xff69, 0x83, 0xff29, 0x83, 0xff29, +0x11c, 0xffe5, 0x11c, 0xffe5, 0xff78, 0xfe66, 0xff78, 0xfe66, 0x288, 0x19c, 0x288, +0x19c, 0x31a, 0x255, 0x31a, 0x255, 0x31a, 0x255, 0x651, 0x5b2, 0x651, 0x5b2, +0x598, 0x520, 0x598, 0x520, 0x533, 0x4e1, 0x533, 0x4e1, 0x4d5, 0x4a7, 0x4d5, +0x4a7, 0x4d1, 0x4c7, 0x4d1, 0x4c7, 0x4d1, 0x4c7, 0x54d, 0x565, 0x54d, 0x565, +0x3b2, 0x3e9, 0x3b2, 0x3e9, 0x1cf, 0x223, 0x1cf, 0x223, 0x223, 0x292, 0x223, +0x292, 0x266, 0x2ed, 0x266, 0x2ed, 0xfffa, 0x96, 0xfffa, 0x96, 0xfffa, 0x96, +0x2a4, 0x352, 0x2a4, 0x352, 0x250, 0x30e, 0x250, 0x30e, 0x83, 0x14e, 0x83, +0x14e, 0xfe65, 0xff3b, 0xfe65, 0xff3b, 0x164, 0x243, 0x164, 0x243, 0xff84, 0x6a, +0xff84, 0x6a, 0xff84, 0x6a, 0xff62, 0x4c, 0xff62, 0x4c, 0xa0, 0x18e, 0xa0, +0x18e, 0xfdbc, 0xfead, 0xfdbc, 0xfead, 0xffb3, 0xa5, 0xffb3, 0xa5, 0x38b, 0x47d, +0x38b, 0x47d, 0x38b, 0x47d, 0x3ce, 0x4c1, 0x3ce, 0x4c1, 0x2df, 0x3d2, 0x2df, +0x3d2, 0x285, 0x377, 0x285, 0x377, 0x276, 0x368, 0x276, 0x368, 0x452, 0x543, +0x452, 0x543, 0x305, 0x3f6, 0x305, 0x3f6, 0x305, 0x3f6, 0x52d, 0x61d, 0x52d, +0x61d, 0x55d, 0x64c, 0x55d, 0x64c, 0x7aa, 0x898, 0x7aa, 0x898, 0x678, 0x765, +0x678, 0x765, 0x4f5, 0x5e0, 0x4f5, 0x5e0, 0x5af, 0x698, 0x5af, 0x698, 0x5af, +0x698, 0x480, 0x566, 0x480, 0x566, 0x2ef, 0x3d2, 0x2ef, 0x3d2, 0x33c, 0x419, +0x33c, 0x419, 0x41c, 0x4f4, 0x41c, 0x4f4, 0x4f5, 0x5c6, 0x4f5, 0x5c6, 0x4f5, +0x5c6, 0x796, 0x85e, 0x796, 0x85e, 0x6a1, 0x760, 0x6a1, 0x760, 0x486, 0x53a, +0x486, 0x53a, 0x478, 0x520, 0x478, 0x520, 0x5dc, 0x677, 0x5dc, 0x677, 0x2bc, +0x348, 0x2bc, 0x348, 0x2bc, 0x348, 0x592, 0x60f, 0x592, 0x60f, 0x426, 0x493, +0x426, 0x493, 0x68b, 0x6e8, 0x68b, 0x6e8, 0x71f, 0x76c, 0x71f, 0x76c, 0x7a3, +0x7e0, 0x7a3, 0x7e0, 0x7a3, 0x7e0, 0x9e5, 0xa12, 0x9e5, 0xa12, 0x6b0, 0x6cd, +0x6b0, 0x6cd, 0x6e2, 0x6f1, 0x6e2, 0x6f1, 0x438, 0x439, 0x438, 0x439, 0x565, +0x55b, 0x565, 0x55b, 0x4a7, 0x493, 0x4a7, 0x493, 0x4a7, 0x493, 0x610, 0x5f4, +0x610, 0x5f4, 0x711, 0x6ee, 0x711, 0x6ee, 0x6d0, 0x6a8, 0x6d0, 0x6a8, 0x766, +0x73b, 0x766, 0x73b, 0x976, 0x94b, 0x976, 0x94b, 0x55c, 0x532, 0x55c, 0x532, +0x55c, 0x532, 0x5b2, 0x58a, 0x5b2, 0x58a, 0x6a0, 0x67c, 0x6a0, 0x67c, 0x3d0, +0x3b1, 0x3d0, 0x3b1, 0x420, 0x407, 0x420, 0x407, 0x331, 0x31e, 0x331, 0x31e, +0x331, 0x31e, 0x4a1, 0x496, 0x4a1, 0x496, 0x38e, 0x38a, 0x38e, 0x38a, 0x65f, +0x661, 0x65f, 0x661, 0x4de, 0x4e6, 0x4de, 0x4e6, 0x2f3, 0x300, 0x2f3, 0x300, +0x398, 0x3a8, 0x398, 0x3a8, 0x398, 0x3a8, 0x39e, 0x3b0, 0x39e, 0x3b0, 0x387, +0x399, 0x387, 0x399, 0x4f8, 0x507, 0x4f8, 0x507, 0x3ce, 0x3d8, 0x3ce, 0x3d8, +0x44e, 0x451, 0x44e, 0x451, 0x5a4, 0x59e, 0x5a4, 0x59e, 0x5a4, 0x59e, 0x6c2, +0x6b0, 0x6c2, 0x6b0, 0x85e, 0x83d, 0x85e, 0x83d, 0x887, 0x856, 0x887, 0x856, +0x9d5, 0x991, 0x9d5, 0x991, 0x76c, 0x713, 0x76c, 0x713, 0x76c, 0x713, 0x6c3, +0x654, 0x6c3, 0x654, 0x8fc, 0x875, 0x8fc, 0x875, 0x9ef, 0x94e, 0x9ef, 0x94e, +0x6cf, 0x613, 0x6cf, 0x613, 0xcc8, 0xbf2, 0xcc8, 0xbf2, 0xc81, 0xb8e, 0xc81, +0xb8e, 0xc81, 0xb8e, 0xae5, 0x9d5, 0xae5, 0x9d5, 0xcf9, 0xbcc, 0xcf9, 0xbcc, +0xad0, 0x986, 0xad0, 0x986, 0xa72, 0x90c, 0xa72, 0x90c, 0x859, 0x6d6, 0x859, +0x6d6, 0x6e8, 0x548, 0x6e8, 0x548, 0x6e8, 0x548, 0x61f, 0x463, 0x61f, 0x463, +0x750, 0x578, 0x750, 0x578, 0x8aa, 0x6b6, 0x8aa, 0x6b6, 0xa0b, 0x7fc, 0xa0b, +0x7fc, 0x936, 0x70d, 0x936, 0x70d, 0x936, 0x70d, 0x986, 0x741, 0x986, 0x741, +0x98a, 0x72b, 0x98a, 0x72b, 0xa2e, 0x7b5, 0xa2e, 0x7b5, 0x83d, 0x5aa, 0x83d, +0x5aa, 0xae4, 0x837, 0xae4, 0x837, 0xbdf, 0x918, 0xbdf, 0x918, 0xbdf, 0x918, +0xc60, 0x97f, 0xc60, 0x97f, 0x100e, 0xd13, 0x100e, 0xd13, 0xdb1, 0xa9d, 0xdb1, +0xa9d, 0xf58, 0xc2b, 0xf58, 0xc2b, 0x12d6, 0xf92, 0x12d6, 0xf92, 0x11cf, 0xe73, +0x11cf, 0xe73, 0x11cf, 0xe73, 0x1284, 0xf12, 0x1284, 0xf12, 0x1456, 0x10d1, 0x1456, +0x10d1, 0x121b, 0xe83, 0x121b, 0xe83, 0x164c, 0x12a4, 0x164c, 0x12a4, 0x1597, 0x11e0, +0x1597, 0x11e0, 0x1597, 0x11e0, 0x16a0, 0x12dd, 0x16a0, 0x12dd, 0x1839, 0x146e, 0x1839, +0x146e, 0x16a7, 0x12d6, 0x16a7, 0x12d6, 0x17d4, 0x1402, 0x17d4, 0x1402, 0x1827, 0x1457, +0x1827, 0x1457, 0x1863, 0x1499, 0x1863, 0x1499, 0x1863, 0x1499, 0x18e9, 0x152a, 0x18e9, +0x152a, 0x1823, 0x1472, 0x1823, 0x1472, 0x1697, 0x12f9, 0x1697, 0x12f9, 0x1838, 0x14b1, +0x1838, 0x14b1, 0x14f5, 0x1189, 0x14f5, 0x1189, 0x1587, 0x123a, 0x1587, 0x123a, 0x1587, +0x123a, 0x138d, 0x1064, 0x138d, 0x1064, 0x1384, 0x1082, 0x1384, 0x1082, 0x1379, 0x10a2, +0x1379, 0x10a2, 0x1195, 0xeed, 0x1195, 0xeed, 0x109b, 0xe23, 0x109b, 0xe23, 0x109b, +0xe23, 0xea8, 0xc65, 0xea8, 0xc65, 0x108f, 0xe81, 0x108f, 0xe81, 0xe78, 0xca3, +0xe78, 0xca3, 0xeba, 0xd1f, 0xeba, 0xd1f, 0xeb2, 0xd53, 0xeb2, 0xd53, 0xfb4, +0xe90, 0xfb4, 0xe90, 0xfb4, 0xe90, 0xd70, 0xc8a, 0xd70, 0xc8a, 0x987, 0x8de, +0x987, 0x8de, 0xb1f, 0xab4, 0xb1f, 0xab4, 0x93c, 0x910, 0x93c, 0x910, 0x56b, +0x57d, 0x56b, 0x57d, 0x319, 0x369, 0x319, 0x369, 0x319, 0x369, 0x2d7, 0x364, +0x2d7, 0x364, 0x372, 0x43b, 0x372, 0x43b, 0x188, 0x28e, 0x188, 0x28e, 0xfe09, +0xff4a, 0xfe09, 0xff4a, 0xf95b, 0xfad6, 0xf95b, 0xfad6, 0xf95b, 0xfad6, 0xf71a, 0xf8d0, +0xf71a, 0xf8d0, 0xf571, 0xf75f, 0xf571, 0xf75f, 0xf37b, 0xf5a1, 0xf37b, 0xf5a1, 0xf111, +0xf36e, 0xf111, 0xf36e, 0xeecc, 0xf15e, 0xeecc, 0xf15e, 0xef6d, 0xf234, 0xef6d, 0xf234, +0xef6d, 0xf234, 0xeef8, 0xf1f2, 0xeef8, 0xf1f2, 0xed8e, 0xf0b9, 0xed8e, 0xf0b9, 0xea2d, +0xed88, 0xea2d, 0xed88, 0xe83d, 0xebc5, 0xe83d, 0xebc5, 0xe80b, 0xebbe, 0xe80b, 0xebbe, +0xe55b, 0xe938, 0xe55b, 0xe938, 0xe55b, 0xe938, 0xe1a4, 0xe5a7, 0xe1a4, 0xe5a7, 0xe1fe, +0xe625, 0xe1fe, 0xe625, 0xe0a2, 0xe4e9, 0xe0a2, 0xe4e9, 0xdfc8, 0xe42c, 0xdfc8, 0xe42c, +0xdfdd, 0xe45c, 0xdfdd, 0xe45c, 0xdfdd, 0xe45c, 0xdd07, 0xe19d, 0xdd07, 0xe19d, 0xdb9c, +0xe045, 0xdb9c, 0xe045, 0xdbb0, 0xe069, 0xdbb0, 0xe069, 0xdaf8, 0xdfbd, 0xdaf8, 0xdfbd, +0xd7f1, 0xdcbe, 0xd7f1, 0xdcbe, 0xd897, 0xdd69, 0xd897, 0xdd69, 0xd897, 0xdd69, 0xd818, +0xdceb, 0xd818, 0xdceb, 0xd892, 0xdd63, 0xd892, 0xdd63, 0xda6f, 0xdf3a, 0xda6f, 0xdf3a, +0xdba8, 0xe06a, 0xdba8, 0xe06a, 0xdb6b, 0xe021, 0xdb6b, 0xe021, 0xdb34, 0xdfdb, 0xdb34, +0xdfdb, 0xdb34, 0xdfdb, 0xde44, 0xe2da, 0xde44, 0xe2da, 0xdc26, 0xe0a8, 0xdc26, 0xe0a8, +0xda7d, 0xdee9, 0xda7d, 0xdee9, 0xdaff, 0xdf53, 0xdaff, 0xdf53, 0xdbd0, 0xe00a, 0xdbd0, +0xe00a, 0xdbd0, 0xe00a, 0xe0e1, 0xe500, 0xe0e1, 0xe500, 0xe0eb, 0xe4ed, 0xe0eb, 0xe4ed, +0xde0e, 0xe1f3, 0xde0e, 0xe1f3, 0xe098, 0xe45e, 0xe098, 0xe45e, 0xe186, 0xe52d, 0xe186, +0xe52d, 0xe382, 0xe709, 0xe382, 0xe709, 0xe382, 0xe709, 0xe5b0, 0xe917, 0xe5b0, 0xe917, +0xe3c3, 0xe70a, 0xe3c3, 0xe70a, 0xe58e, 0xe8b5, 0xe58e, 0xe8b5, 0xe762, 0xea69, 0xe762, +0xea69, 0xe839, 0xeb1f, 0xe839, 0xeb1f, 0xe839, 0xeb1f, 0xea9a, 0xed60, 0xea9a, 0xed60, +0xea4d, 0xecf3, 0xea4d, 0xecf3, 0xeb14, 0xed9a, 0xeb14, 0xed9a, 0xec1a, 0xee80, 0xec1a, +0xee80, 0xe9f4, 0xec3c, 0xe9f4, 0xec3c, 0xe94f, 0xeb79, 0xe94f, 0xeb79, 0xe94f, 0xeb79, +0xea27, 0xec32, 0xea27, 0xec32, 0xe87f, 0xea6d, 0xe87f, 0xea6d, 0xe9ec, 0xebbd, 0xe9ec, +0xebbd, 0xec4e, 0xee03, 0xec4e, 0xee03, 0xec7c, 0xee15, 0xec7c, 0xee15, 0xebef, 0xed6e, +0xebef, 0xed6e, 0xebef, 0xed6e, 0xedcb, 0xef2f, 0xedcb, 0xef2f, 0xedbb, 0xef06, 0xedbb, +0xef06, 0xeb99, 0xeccc, 0xeb99, 0xeccc, 0xed03, 0xee1e, 0xed03, 0xee1e, 0xebb1, 0xecb5, +0xebb1, 0xecb5, 0xebb1, 0xecb5, 0xec5f, 0xed4d, 0xec5f, 0xed4d, 0xed8b, 0xee63, 0xed8b, +0xee63, 0xefcc, 0xf08f, 0xefcc, 0xf08f, 0xf14f, 0xf1fd, 0xf14f, 0xf1fd, 0xf192, 0xf22d, +0xf192, 0xf22d, 0xf162, 0xf1ea, 0xf162, 0xf1ea, 0xf162, 0xf1ea, 0xf45f, 0xf4d4, 0xf45f, +0xf4d4, 0xf534, 0xf596, 0xf534, 0xf596, 0xf4ca, 0xf51b, 0xf4ca, 0xf51b, 0xf597, 0xf5d6, +0xf597, 0xf5d6, 0xf369, 0xf396, 0xf369, 0xf396, 0xf85e, 0xf87a, 0xf85e, 0xf87a, 0xf85e, +0xf87a, 0xf80f, 0xf819, 0xf80f, 0xf819, 0xf969, 0xf961, 0xf969, 0xf961, 0xfbf5, 0xfbdb, +0xfbf5, 0xfbdb, 0xfd32, 0xfd06, 0xfd32, 0xfd06, 0xff7c, 0xff3d, 0xff7c, 0xff3d, 0xff7c, +0xff3d, 0xff4f, 0xfefd, 0xff4f, 0xfefd, 0xff89, 0xff23, 0xff89, 0xff23, 0xfef4, 0xfe7a, +0xfef4, 0xfe7a, 0x21, 0xff93, 0x21, 0xff93, 0x17d, 0xda, 0x17d, 0xda, 0x271, +0x1b8, 0x271, 0x1b8, 0x271, 0x1b8, 0x435, 0x365, 0x435, 0x365, 0x3eb, 0x304, +0x3eb, 0x304, 0x34e, 0x250, 0x34e, 0x250, 0x61e, 0x508, 0x61e, 0x508, 0x4f1, +0x3c3, 0x4f1, 0x3c3, 0x4ef, 0x3a8, 0x4ef, 0x3a8, 0x4ef, 0x3a8, 0x3ec, 0x28c, +0x3ec, 0x28c, 0x3dd, 0x264, 0x3dd, 0x264, 0x5f2, 0x460, 0x5f2, 0x460, 0x658, +0x4ad, 0x658, 0x4ad, 0x713, 0x54f, 0x713, 0x54f, 0x713, 0x54f, 0x884, 0x6a8, +0x884, 0x6a8, 0x7ac, 0x5b9, 0x7ac, 0x5b9, 0x755, 0x54a, 0x755, 0x54a, 0xab3, +0x891, 0xab3, 0x891, 0xc08, 0x9d0, 0xc08, 0x9d0, 0xaee, 0x8a0, 0xaee, 0x8a0, +0xaee, 0x8a0, 0xc32, 0x9d0, 0xc32, 0x9d0, 0xd18, 0xaa4, 0xd18, 0xaa4, 0xd27, +0xaa0, 0xd27, 0xaa0, 0x1159, 0xec3, 0x1159, 0xec3, 0xff5, 0xd50, 0xff5, 0xd50, +0x132f, 0x107d, 0x132f, 0x107d, 0x132f, 0x107d, 0x14dc, 0x121e, 0x14dc, 0x121e, 0x14ae, +0x11e7, 0x14ae, 0x11e7, 0x14b5, 0x11e6, 0x14b5, 0x11e6, 0x1376, 0x10a2, 0x1376, 0x10a2, +0x14f2, 0x121a, 0x14f2, 0x121a, 0x14f2, 0x121a, 0x160c, 0x1332, 0x160c, 0x1332, 0x17fb, +0x1522, 0x17fb, 0x1522, 0x19a9, 0x16d3, 0x19a9, 0x16d3, 0x172c, 0x145a, 0x172c, 0x145a, +0x133c, 0x1071, 0x133c, 0x1071, 0x1798, 0x14d7, 0x1798, 0x14d7, 0x1798, 0x14d7, 0x1424, +0x116e, 0x1424, 0x116e, 0x12c2, 0x1019, 0x12c2, 0x1019, 0x105b, 0xdc2, 0x105b, 0xdc2, +0xcd7, 0xa50, 0xcd7, 0xa50, 0xc23, 0x9b0, 0xc23, 0x9b0, 0xb52, 0x8f5, 0xb52, +0x8f5, 0xb52, 0x8f5, 0xc5f, 0xa1a, 0xc5f, 0xa1a, 0x960, 0x734, 0x960, 0x734, +0x89a, 0x68a, 0x89a, 0x68a, 0xa3b, 0x848, 0xa3b, 0x848, 0x902, 0x72e, 0x902, +0x72e, 0x902, 0x72e, 0x6b3, 0x500, 0x6b3, 0x500, 0x719, 0x587, 0x719, 0x587, +0x7ca, 0x65b, 0x7ca, 0x65b, 0xa3d, 0x8f1, 0xa3d, 0x8f1, 0x73f, 0x618, 0x73f, +0x618, 0x945, 0x843, 0x945, 0x843, 0x945, 0x843, 0x7a9, 0x6cc, 0x7a9, 0x6cc, +0x5b4, 0x4fe, 0x5b4, 0x4fe, 0x927, 0x897, 0x927, 0x897, 0x7ef, 0x785, 0x7ef, +0x785, 0x509, 0x4c5, 0x509, 0x4c5, 0x405, 0x3e7, 0x405, 0x3e7, 0x405, 0x3e7, +0x39f, 0x3a6, 0x39f, 0x3a6, 0x56e, 0x599, 0x56e, 0x599, 0x779, 0x7c8, 0x779, +0x7c8, 0x3e3, 0x455, 0x3e3, 0x455, 0x565, 0x5f9, 0x565, 0x5f9, 0x565, 0x5f9, +0x446, 0x4f9, 0x446, 0x4f9, 0x28a, 0x35c, 0x28a, 0x35c, 0xfffc, 0xeb, 0xfffc, +0xeb, 0x8b, 0x196, 0x8b, 0x196, 0xff30, 0x55, 0xff30, 0x55, 0x15, 0x151, +0x15, 0x151, 0x15, 0x151, 0xff8d, 0xdf, 0xff8d, 0xdf, 0xfdb8, 0xff1e, 0xfdb8, +0xff1e, 0xfd9b, 0xff13, 0xfd9b, 0xff13, 0xf950, 0xfad7, 0xf950, 0xfad7, 0xfc2b, 0xfdbf, +0xfc2b, 0xfdbf, 0xfca1, 0xfe3f, 0xfca1, 0xfe3f, 0xfca1, 0xfe3f, 0xf8f3, 0xfa99, 0xf8f3, +0xfa99, 0xf5ae, 0xf75a, 0xf5ae, 0xf75a, 0xf6f2, 0xf8a1, 0xf6f2, 0xf8a1, 0xf540, 0xf6f0, +0xf540, 0xf6f0, 0xf9c0, 0xfb6e, 0xf9c0, 0xfb6e, 0xf9c0, 0xfb6e, 0xf997, 0xfb42, 0xf997, +0xfb42, 0xf6d6, 0xf87b, 0xf6d6, 0xf87b, 0xf91f, 0xfabb, 0xf91f, 0xfabb, 0xf94f, 0xfae0, +0xf94f, 0xfae0, 0xf9af, 0xfb33, 0xf9af, 0xfb33, 0xf8d2, 0xfa47, 0xf8d2, 0xfa47, 0xf8d2, +0xfa47, 0xf972, 0xfad6, 0xf972, 0xfad6, 0xf733, 0xf884, 0xf733, 0xf884, 0xfaf4, 0xfc2f, +0xfaf4, 0xfc2f, 0xfcac, 0xfdd1, 0xfcac, 0xfdd1, 0xfb09, 0xfc16, 0xfb09, 0xfc16, 0xfc94, +0xfd88, 0xfc94, 0xfd88, 0xfc94, 0xfd88, 0xfc5f, 0xfd38, 0xfc5f, 0xfd38, 0xfe85, 0xff42, +0xfe85, 0xff42, 0xffc7, 0x66, 0xffc7, 0x66, 0xfba2, 0xfc23, 0xfba2, 0xfc23, 0xfdec, +0xfe4f, 0xfdec, 0xfe4f, 0xfdec, 0xfe4f, 0xfb5c, 0xfb9f, 0xfb5c, 0xfb9f, 0xfbb4, 0xfbd8, +0xfbb4, 0xfbd8, 0xfe10, 0xfe14, 0xfe10, 0xfe14, 0xfb58, 0xfb3c, 0xfb58, 0xfb3c, 0xfc73, +0xfc37, 0xfc73, 0xfc37, 0xfefa, 0xfe9e, 0xfefa, 0xfe9e, 0xfefa, 0xfe9e, 0xa5, 0x2b, +0xa5, 0x2b, 0xff04, 0xfe6a, 0xff04, 0xfe6a, 0x10b, 0x53, 0x10b, 0x53, 0xff9d, +0xfec9, 0xff9d, 0xfec9, 0x162, 0x70, 0x162, 0x70, 0x162, 0x70, 0x1c6, 0xb9, +0x1c6, 0xb9, 0x28e, 0x168, 0x28e, 0x168, 0x38c, 0x24c, 0x38c, 0x24c, 0x5aa, +0x454, 0x5aa, 0x454, 0x596, 0x429, 0x596, 0x429, 0x4bb, 0x33a, 0x4bb, 0x33a, +0x4bb, 0x33a, 0x6f0, 0x55d, 0x6f0, 0x55d, 0x4d0, 0x32c, 0x4d0, 0x32c, 0x59b, +0x3e8, 0x59b, 0x3e8, 0x8c4, 0x704, 0x8c4, 0x704, 0x988, 0x7bc, 0x988, 0x7bc, +0x9f4, 0x81e, 0x9f4, 0x81e, 0x9f4, 0x81e, 0xedd, 0xd00, 0xedd, 0xd00, 0xf82, +0xd9f, 0xf82, 0xd9f, 0x12b5, 0x10cf, 0x12b5, 0x10cf, 0xeb1, 0xcc8, 0xeb1, 0xcc8, +0x10dc, 0xef3, 0x10dc, 0xef3, 0x10dc, 0xef3, 0x1234, 0x104c, 0x1234, 0x104c, 0xf8d, +0xda9, 0xf8d, 0xda9, 0x12d7, 0x10f7, 0x12d7, 0x10f7, 0x10f9, 0xf1f, 0x10f9, 0xf1f, +0x1339, 0x1167, 0x1339, 0x1167, 0x125d, 0x1094, 0x125d, 0x1094, 0x125d, 0x1094, 0x12e2, +0x1123, 0x12e2, 0x1123, 0x1240, 0x108d, 0x1240, 0x108d, 0x1358, 0x11b0, 0x1358, 0x11b0, +0x1374, 0x11d9, 0x1374, 0x11d9, 0x1171, 0xfe4, 0x1171, 0xfe4, 0x12e0, 0x1162, 0x12e0, +0x1162, 0x12e0, 0x1162, 0x1141, 0xfd2, 0x1141, 0xfd2, 0xf00, 0xda0, 0xf00, 0xda0, +0x1300, 0x11ae, 0x1300, 0x11ae, 0x12cb, 0x1188, 0x12cb, 0x1188, 0x13cc, 0x1298, 0x13cc, +0x1298, 0x13cc, 0x1298, 0x13c3, 0x129e, 0x13c3, 0x129e, 0x11f1, 0x10da, 0x11f1, 0x10da, +0x139a, 0x1290, 0x139a, 0x1290, 0xfef, 0xef2, 0xfef, 0xef2, 0x1071, 0xf80, 0x1071, +0xf80, 0xfa9, 0xec2, 0xfa9, 0xec2, 0xfa9, 0xec2, 0xfce, 0xef1, 0xfce, 0xef1, +0xf9a, 0xec5, 0xf9a, 0xec5, 0xfda, 0xf0c, 0xfda, 0xf0c, 0xeda, 0xe12, 0xeda, +0xe12, 0xdb1, 0xced, 0xdb1, 0xced, 0xd58, 0xc98, 0xd58, 0xc98, 0xd58, 0xc98, +0xb71, 0xab1, 0xb71, 0xab1, 0xa5e, 0x99e, 0xa5e, 0x99e, 0xa32, 0x96f, 0xa32, +0x96f, 0xb16, 0xa4f, 0xb16, 0xa4f, 0xa66, 0x999, 0xa66, 0x999, 0xa66, 0x999, +0x9cb, 0x8f7, 0x9cb, 0x8f7, 0x92b, 0x84e, 0x92b, 0x84e, 0xa13, 0x92b, 0xa13, +0x92b, 0x974, 0x880, 0x974, 0x880, 0x93e, 0x83d, 0x93e, 0x83d, 0x7f6, 0x6e5, +0x7f6, 0x6e5, 0x7f6, 0x6e5, 0x5d8, 0x4b7, 0x5d8, 0x4b7, 0x52b, 0x3f9, 0x52b, +0x3f9, 0x604, 0x4bf, 0x604, 0x4bf, 0x79d, 0x645, 0x79d, 0x645, 0x999, 0x82c, +0x999, 0x82c, 0x6e2, 0x560, 0x6e2, 0x560, 0x6e2, 0x560, 0x8c7, 0x731, 0x8c7, +0x731, 0xad3, 0x927, 0xad3, 0x927, 0x8f0, 0x72e, 0x8f0, 0x72e, 0x978, 0x7a0, +0x978, 0x7a0, 0x7ff, 0x612, 0x7ff, 0x612, 0x7ff, 0x612, 0x9e6, 0x7e4, 0x9e6, +0x7e4, 0xb2b, 0x914, 0xb2b, 0x914, 0xccb, 0xaa1, 0xccb, 0xaa1, 0xd6c, 0xb30, +0xd6c, 0xb30, 0xe0a, 0xbbc, 0xe0a, 0xbbc, 0xd87, 0xb29, 0xd87, 0xb29, 0xd87, +0xb29, 0xfb3, 0xd48, 0xfb3, 0xd48, 0x1041, 0xdc9, 0x1041, 0xdc9, 0xeba, 0xc38, +0xeba, 0xc38, 0xd12, 0xa86, 0xd12, 0xa86, 0xd72, 0xae0, 0xd72, 0xae0, 0xf1f, +0xc89, 0xf1f, 0xc89, 0xf1f, 0xc89, 0xc9f, 0xa08, 0xc9f, 0xa08, 0xc97, 0xa01, +0xc97, 0xa01, 0xb4f, 0x8bd, 0xb4f, 0x8bd, 0xdec, 0xb61, 0xdec, 0xb61, 0xd4e, +0xacb, 0xd4e, 0xacb, 0xd4e, 0xacb, 0xcd9, 0xa62, 0xcd9, 0xa62, 0xd6b, 0xb03, +0xd6b, 0xb03, 0xbb9, 0x963, 0xbb9, 0x963, 0xc62, 0xa22, 0xc62, 0xa22, 0xc09, +0x9e1, 0xc09, 0x9e1, 0xc5a, 0xa4c, 0xc5a, 0xa4c, 0xc5a, 0xa4c, 0xb6d, 0x97d, +0xb6d, 0x97d, 0xb17, 0x947, 0xb17, 0x947, 0xd7e, 0xbd1, 0xd7e, 0xbd1, 0xe2a, +0xca3, 0xe2a, 0xca3, 0xc5f, 0xb00, 0xc5f, 0xb00, 0xa7b, 0x946, 0xa7b, 0x946, +0xa7b, 0x946, 0x829, 0x720, 0x829, 0x720, 0x88f, 0x7b4, 0x88f, 0x7b4, 0x837, +0x78c, 0x837, 0x78c, 0x650, 0x5d8, 0x650, 0x5d8, 0x463, 0x41d, 0x463, 0x41d, +0x463, 0x41d, 0x373, 0x362, 0x373, 0x362, 0x2ca, 0x2ef, 0x2ca, 0x2ef, 0xd1, +0x12d, 0xd1, 0x12d, 0xfec6, 0xff58, 0xfec6, 0xff58, 0xfbdc, 0xfca6, 0xfbdc, 0xfca6, +0xfa22, 0xfb24, 0xfa22, 0xfb24, 0xfa22, 0xfb24, 0xf97e, 0xfab8, 0xf97e, 0xfab8, 0xf707, +0xf878, 0xf707, 0xf878, 0xf491, 0xf639, 0xf491, 0xf639, 0xf4bb, 0xf699, 0xf4bb, 0xf699, +0xf41b, 0xf630, 0xf41b, 0xf630, 0xf244, 0xf48d, 0xf244, 0xf48d, 0xf244, 0xf48d, 0xf397, +0xf613, 0xf397, 0xf613, 0xf1bb, 0xf469, 0xf1bb, 0xf469, 0xec1c, 0xeefb, 0xec1c, 0xeefb, +0xeb64, 0xee71, 0xeb64, 0xee71, 0xe9e4, 0xed1e, 0xe9e4, 0xed1e, 0xe9e4, 0xed1e, 0xe857, +0xebbc, 0xe857, 0xebbc, 0xe85b, 0xebe9, 0xe85b, 0xebe9, 0xe743, 0xeaf7, 0xe743, 0xeaf7, +0xe6da, 0xeab2, 0xe6da, 0xeab2, 0xe492, 0xe88b, 0xe492, 0xe88b, 0xe31f, 0xe738, 0xe31f, +0xe738, 0xe31f, 0xe738, 0xe27a, 0xe6af, 0xe27a, 0xe6af, 0xded1, 0xe31f, 0xded1, 0xe31f, +0xde9e, 0xe303, 0xde9e, 0xe303, 0xe013, 0xe48d, 0xe013, 0xe48d, 0xded3, 0xe35d, 0xded3, +0xe35d, 0xde5b, 0xe2f5, 0xde5b, 0xe2f5, 0xde5b, 0xe2f5, 0xdef1, 0xe397, 0xdef1, 0xe397, +0xde7f, 0xe32d, 0xde7f, 0xe32d, 0xdf90, 0xe445, 0xdf90, 0xe445, 0xe14c, 0xe605, 0xe14c, +0xe605, 0xdcf9, 0xe1b4, 0xdcf9, 0xe1b4, 0xdcf9, 0xe1b4, 0xdbda, 0xe094, 0xdbda, 0xe094, +0xde7b, 0xe331, 0xde7b, 0xe331, 0xdd62, 0xe212, 0xdd62, 0xe212, 0xddc6, 0xe26e, 0xddc6, +0xe26e, 0xddde, 0xe27b, 0xddde, 0xe27b, 0xde1e, 0xe2af, 0xde1e, 0xe2af, 0xde1e, 0xe2af, +0xdffd, 0xe47f, 0xdffd, 0xe47f, 0xdef4, 0xe366, 0xdef4, 0xe366, 0xe000, 0xe460, 0xe000, +0xe460, 0xe118, 0xe563, 0xe118, 0xe563, 0xdfec, 0xe422, 0xdfec, 0xe422, 0xdfec, 0xe422, +0xe04e, 0xe46c, 0xe04e, 0xe46c, 0xe240, 0xe646, 0xe240, 0xe646, 0xe2c9, 0xe6b6, 0xe2c9, +0xe6b6, 0xe536, 0xe908, 0xe536, 0xe908, 0xe7b6, 0xeb6c, 0xe7b6, 0xeb6c, 0xe670, 0xea0a, +0xe670, 0xea0a, 0xe670, 0xea0a, 0xe790, 0xeb0c, 0xe790, 0xeb0c, 0xe50f, 0xe86d, 0xe50f, +0xe86d, 0xe5fb, 0xe93b, 0xe5fb, 0xe93b, 0xe697, 0xe9b7, 0xe697, 0xe9b7, 0xe4df, 0xe7e0, +0xe4df, 0xe7e0, 0xe58d, 0xe86e, 0xe58d, 0xe86e, 0xe58d, 0xe86e, 0xe353, 0xe613, 0xe353, +0xe613, 0xe5b8, 0xe858, 0xe5b8, 0xe858, 0xe514, 0xe794, 0xe514, 0xe794, 0xe2ab, 0xe50b, +0xe2ab, 0xe50b, 0xe3b0, 0xe5f0, 0xe3b0, 0xe5f0, 0xe3b0, 0xe5f0, 0xe216, 0xe436, 0xe216, +0xe436, 0xe39d, 0xe59d, 0xe39d, 0xe59d, 0xe39a, 0xe57c, 0xe39a, 0xe57c, 0xe16d, 0xe330, +0xe16d, 0xe330, 0xe32e, 0xe4d3, 0xe32e, 0xe4d3, 0xe3ba, 0xe541, 0xe3ba, 0xe541, 0xe3ba, +0xe541, 0xe59a, 0xe704, 0xe59a, 0xe704, 0xe78c, 0xe8da, 0xe78c, 0xe8da, 0xe75a, 0xe88c, +0xe75a, 0xe88c, 0xe89e, 0xe9b5, 0xe89e, 0xe9b5, 0xeb71, 0xec6e, 0xeb71, 0xec6e, 0xeb30, +0xec13, 0xeb30, 0xec13, 0xeb30, 0xec13, 0xecb7, 0xed81, 0xecb7, 0xed81, 0xed43, 0xedf5, +0xed43, 0xedf5, 0xedcd, 0xee68, 0xedcd, 0xee68, 0xf237, 0xf2bb, 0xf237, 0xf2bb, 0xf397, +0xf406, 0xf397, 0xf406, 0xf397, 0xf406, 0xf553, 0xf5ae, 0xf553, 0xf5ae, 0xf681, 0xf6c8, +0xf681, 0xf6c8, 0xf859, 0xf88d, 0xf859, 0xf88d, 0xfa85, 0xfaa8, 0xfa85, 0xfaa8, 0xfc64, +0xfc76, 0xfc64, 0xfc76, 0xfc34, 0xfc36, 0xfc34, 0xfc36, 0xfc34, 0xfc36, 0xff00, 0xfef2, +0xff00, 0xfef2, 0x90, 0x74, 0x90, 0x74, 0x14, 0xffea, 0x14, 0xffea, 0x249, +0x212, 0x249, 0x212, 0x36b, 0x328, 0x36b, 0x328, 0x589, 0x53a, 0x589, 0x53a, +0x589, 0x53a, 0x503, 0x4a9, 0x503, 0x4a9, 0x573, 0x50f, 0x573, 0x50f, 0x735, +0x6c7, 0x735, 0x6c7, 0x7f1, 0x77b, 0x7f1, 0x77b, 0x8b2, 0x833, 0x8b2, 0x833, +0x8b2, 0x833, 0x9c4, 0x93d, 0x9c4, 0x93d, 0xa29, 0x99a, 0xa29, 0x99a, 0xaa6, +0xa10, 0xaa6, 0xa10, 0xcb3, 0xc16, 0xcb3, 0xc16, 0xe92, 0xdef, 0xe92, 0xdef, +0xebe, 0xe14, 0xebe, 0xe14, 0xebe, 0xe14, 0x1041, 0xf91, 0x1041, 0xf91, 0xf22, +0xe6c, 0xf22, 0xe6c, 0x11d1, 0x1116, 0x11d1, 0x1116, 0x13d5, 0x1315, 0x13d5, 0x1315, +0x133e, 0x1279, 0x133e, 0x1279, 0x167b, 0x15b0, 0x167b, 0x15b0, 0x167b, 0x15b0, 0x14dd, +0x140d, 0x14dd, 0x140d, 0x18e9, 0x1814, 0x18e9, 0x1814, 0x1908, 0x182e, 0x1908, 0x182e, +0x1736, 0x1657, 0x1736, 0x1657, 0x1924, 0x1841, 0x1924, 0x1841, 0x1924, 0x1841, 0x17da, +0x16f3, 0x17da, 0x16f3, 0x1848, 0x175c, 0x1848, 0x175c, 0x1b01, 0x1a11, 0x1b01, 0x1a11, +0x19d5, 0x18e1, 0x19d5, 0x18e1, 0x189f, 0x17a7, 0x189f, 0x17a7, 0x1ac2, 0x19c6, 0x1ac2, +0x19c6, 0x1ac2, 0x19c6, 0x19b4, 0x18b4, 0x19b4, 0x18b4, 0x1b1f, 0x1a1c, 0x1b1f, 0x1a1c, +0x1ae0, 0x19d9, 0x1ae0, 0x19d9, 0x1867, 0x175d, 0x1867, 0x175d, 0x16b5, 0x15a9, 0x16b5, +0x15a9, 0x1678, 0x1569, 0x1678, 0x1569, 0x1678, 0x1569, 0x140f, 0x12ff, 0x140f, 0x12ff, +0x1047, 0xf36, 0x1047, 0xf36, 0xf8a, 0xe79, 0xf8a, 0xe79, 0xf25, 0xe13, 0xf25, +0xe13, 0xd45, 0xc33, 0xd45, 0xc33, 0xd45, 0xc33, 0xcf1, 0xbe1, 0xcf1, 0xbe1, +0xaf7, 0x9e8, 0xaf7, 0x9e8, 0x939, 0x82d, 0x939, 0x82d, 0x9e7, 0x8dd, 0x9e7, +0x8dd, 0x782, 0x67b, 0x782, 0x67b, 0x8f9, 0x7f7, 0x8f9, 0x7f7, 0x8f9, 0x7f7, +0x92b, 0x82d, 0x92b, 0x82d, 0x76e, 0x677, 0x76e, 0x677, 0x99d, 0x8ac, 0x99d, +0x8ac, 0x9a5, 0x8bb, 0x9a5, 0x8bb, 0x7db, 0x6f9, 0x7db, 0x6f9, 0x866, 0x78c, +0x866, 0x78c, 0x866, 0x78c, 0x45f, 0x38e, 0x45f, 0x38e, 0x30b, 0x244, 0x30b, +0x244, 0x37e, 0x2c1, 0x37e, 0x2c1, 0x294, 0x1e2, 0x294, 0x1e2, 0x3b1, 0x30a, +0x3b1, 0x30a, 0x3b1, 0x30a, 0x3a3, 0x308, 0x3a3, 0x308, 0x470, 0x3e0, 0x470, +0x3e0, 0x4d2, 0x44f, 0x4d2, 0x44f, 0x58f, 0x518, 0x58f, 0x518, 0x441, 0x3d6, +0x441, 0x3d6, 0x311, 0x2b1, 0x311, 0x2b1, 0x311, 0x2b1, 0x113, 0xbf, 0x113, +0xbf, 0x15e, 0x117, 0x15e, 0x117, 0x162, 0x126, 0x162, 0x126, 0xffef, 0xffbe, +0xffef, 0xffbe, 0xfe1b, 0xfdf5, 0xfe1b, 0xfdf5, 0xfead, 0xfe91, 0xfead, 0xfe91, 0xfead, +0xfe91, 0xfe21, 0xfe0d, 0xfe21, 0xfe0d, 0xfb87, 0xfb7c, 0xfb87, 0xfb7c, 0xfb6b, 0xfb68, +0xfb6b, 0xfb68, 0xf919, 0xf91d, 0xf919, 0xf91d, 0xfaba, 0xfac3, 0xfaba, 0xfac3, 0xfaba, +0xfac3, 0xf8be, 0xf8cc, 0xf8be, 0xf8cc, 0xf63a, 0xf64b, 0xf63a, 0xf64b, 0xf870, 0xf884, +0xf870, 0xf884, 0xf77f, 0xf794, 0xf77f, 0xf794, 0xf877, 0xf88b, 0xf877, 0xf88b, 0xfa3e, +0xfa51, 0xfa3e, 0xfa51, 0xfa3e, 0xfa51, 0xf788, 0xf798, 0xf788, 0xf798, 0xf96c, 0xf978, +0xf96c, 0xf978, 0xf99b, 0xf9a1, 0xf99b, 0xf9a1, 0xf948, 0xf947, 0xf948, 0xf947, 0xf9b0, +0xf9a6, 0xf9b0, 0xf9a6, 0xf85f, 0xf84b, 0xf85f, 0xf84b, 0xf85f, 0xf84b, 0xf8cb, 0xf8ac, +0xf8cb, 0xf8ac, 0xf778, 0xf74d, 0xf778, 0xf74d, 0xf930, 0xf8f7, 0xf930, 0xf8f7, 0xf99e, +0xf957, 0xf99e, 0xf957, 0xfb9e, 0xfb47, 0xfb9e, 0xfb47, 0xfb9e, 0xfb47, 0xfce3, 0xfc7c, +0xfce3, 0xfc7c, 0xfdb9, 0xfd40, 0xfdb9, 0xfd40, 0xfed6, 0xfe4b, 0xfed6, 0xfe4b, 0xfdaf, +0xfd10, 0xfdaf, 0xfd10, 0xfdb1, 0xfcff, 0xfdb1, 0xfcff, 0xfeb5, 0xfdee, 0xfeb5, 0xfdee, +0xfeb5, 0xfdee, 0xfd63, 0xfc88, 0xfd63, 0xfc88, 0xfced, 0xfbfd, 0xfced, 0xfbfd, 0xfede, +0xfdd9, 0xfede, 0xfdd9, 0xc9, 0xffb0, 0xc9, 0xffb0, 0x1b4, 0x85, 0x1b4, 0x85, +0x1b4, 0x85, 0x197, 0x54, 0x197, 0x54, 0x43e, 0x2e6, 0x43e, 0x2e6, 0x486, +0x31b, 0x486, 0x31b, 0x5fe, 0x480, 0x5fe, 0x480, 0x740, 0x5af, 0x740, 0x5af, +0x78f, 0x5ee, 0x78f, 0x5ee, 0x78f, 0x5ee, 0x86e, 0x6bb, 0x86e, 0x6bb, 0x888, +0x6c6, 0x888, 0x6c6, 0x919, 0x748, 0x919, 0x748, 0xa8c, 0x8ae, 0xa8c, 0x8ae, +0x9d2, 0x7e8, 0x9d2, 0x7e8, 0xa9c, 0x8a7, 0xa9c, 0x8a7, 0xa9c, 0x8a7, 0xca9, +0xaab, 0xca9, 0xaab, 0xd6a, 0xb64, 0xd6a, 0xb64, 0xef6, 0xce9, 0xef6, 0xce9, +0xda0, 0xb8e, 0xda0, 0xb8e, 0xfc2, 0xdad, 0xfc2, 0xdad, 0xfc2, 0xdad, 0x1130, +0xf19, 0x1130, 0xf19, 0x112d, 0xf15, 0x112d, 0xf15, 0x112d, 0xf16, 0x112d, 0xf16, +0x1114, 0xeff, 0x1114, 0xeff, 0x1205, 0xff4, 0x1205, 0xff4, 0x12a0, 0x1094, 0x12a0, +0x1094, 0x12a0, 0x1094, 0x1363, 0x115d, 0x1363, 0x115d, 0x1313, 0x1115, 0x1313, 0x1115, +0x122b, 0x1035, 0x122b, 0x1035, 0x11be, 0xfd2, 0x11be, 0xfd2, 0x1306, 0x1124, 0x1306, +0x1124, 0x12ca, 0x10f4, 0x12ca, 0x10f4, 0x12ca, 0x10f4, 0x10f5, 0xf2b, 0x10f5, 0xf2b, +0x1227, 0x106a, 0x1227, 0x106a, 0x11f8, 0x1048, 0x11f8, 0x1048, 0xf97, 0xdf6, 0xf97, +0xdf6, 0x1129, 0xf96, 0x1129, 0xf96, 0x1129, 0xf96, 0x10e2, 0xf5d, 0x10e2, 0xf5d, +0xf1c, 0xda6, 0xf1c, 0xda6, 0x1000, 0xe98, 0x1000, 0xe98, 0x1060, 0xf06, 0x1060, +0xf06, 0xda2, 0xc57, 0xda2, 0xc57, 0xcc0, 0xb83, 0xcc0, 0xb83, 0xcc0, 0xb83, +0xced, 0xbbd, 0xced, 0xbbd, 0xc24, 0xb00, 0xc24, 0xb00, 0xad2, 0x9ba, 0xad2, +0x9ba, 0x922, 0x815, 0x922, 0x815, 0x915, 0x812, 0x915, 0x812, 0x848, 0x74f, +0x848, 0x74f, 0x848, 0x74f, 0x7cc, 0x6db, 0x7cc, 0x6db, 0x6f5, 0x60c, 0x6f5, +0x60c, 0x6d8, 0x5f3, 0x6d8, 0x5f3, 0x5c8, 0x4e9, 0x5c8, 0x4e9, 0x3bb, 0x2df, +0x3bb, 0x2df, 0x3bb, 0x2df, 0x302, 0x228, 0x302, 0x228, 0x10c, 0x32, 0x10c, +0x32, 0xff98, 0xfebd, 0xff98, 0xfebd, 0xc9, 0xffec, 0xc9, 0xffec, 0x126, 0x46, +0x126, 0x46, 0x2ab, 0x1c7, 0x2ab, 0x1c7, 0x2ab, 0x1c7, 0x29b, 0x1b0, 0x29b, +0x1b0, 0x9b, 0xffa9, 0x9b, 0xffa9, 0x181, 0x86, 0x181, 0x86, 0x153, 0x4e, +0x153, 0x4e, 0x10, 0xff00, 0x10, 0xff00, 0xfd86, 0xfc6a, 0xfd86, 0xfc6a, 0xfd86, +0xfc6a, 0xfe27, 0xfcfe, 0xfe27, 0xfcfe, 0x53, 0xff1c, 0x53, 0xff1c, 0x83, 0xff3d, +0x83, 0xff3d, 0x16b, 0x15, 0x16b, 0x15, 0xe6, 0xff80, 0xe6, 0xff80, 0xe6, +0xff80, 0x1, 0xfe8a, 0x1, 0xfe8a, 0x167, 0xffdf, 0x167, 0xffdf, 0x357, 0x1bd, +0x357, 0x1bd, 0x466, 0x2bb, 0x466, 0x2bb, 0x5c5, 0x408, 0x5c5, 0x408, 0x6f1, +0x523, 0x6f1, 0x523, 0x6f1, 0x523, 0xa56, 0x877, 0xa56, 0x877, 0xdeb, 0xbfa, +0xdeb, 0xbfa, 0xede, 0xcdd, 0xede, 0xcdd, 0x100a, 0xdf9, 0x100a, 0xdf9, 0x1127, +0xf07, 0x1127, 0xf07, 0x12b0, 0x1082, 0x12b0, 0x1082, 0x12b0, 0x1082, 0x13b1, 0x1176, +0x13b1, 0x1176, 0x1328, 0x10e1, 0x1328, 0x10e1, 0x10fa, 0xea8, 0x10fa, 0xea8, 0x1051, +0xdf7, 0x1051, 0xdf7, 0x113d, 0xedb, 0x113d, 0xedb, 0x113d, 0xedb, 0xfcb, 0xd63, +0xfcb, 0xd63, 0x111b, 0xeb0, 0x111b, 0xeb0, 0x1120, 0xeb3, 0x1120, 0xeb3, 0xfbd, +0xd51, 0xfbd, 0xd51, 0x10f8, 0xe8e, 0x10f8, 0xe8e, 0x1134, 0xed0, 0x1134, 0xed0, +0x1134, 0xed0, 0x125f, 0x1002, 0x125f, 0x1002, 0x1117, 0xec4, 0x1117, 0xec4, 0x10ee, +0xea8, 0x10ee, 0xea8, 0x12ba, 0x1083, 0x12ba, 0x1083, 0x1345, 0x1120, 0x1345, 0x1120, +0x144c, 0x123b, 0x144c, 0x123b, 0x144c, 0x123b, 0x1376, 0x117d, 0x1376, 0x117d, 0x133b, +0x115c, 0x133b, 0x115c, 0x1298, 0x10d5, 0x1298, 0x10d5, 0x1393, 0x11f0, 0x1393, 0x11f0, +0x1441, 0x12c0, 0x1441, 0x12c0, 0x1441, 0x12c0, 0x1200, 0x10a4, 0x1200, 0x10a4, 0x1126, +0xff1, 0x1126, 0xff1, 0xf90, 0xe85, 0xf90, 0xe85, 0xdc3, 0xce4, 0xdc3, 0xce4, +0xd17, 0xc67, 0xd17, 0xc67, 0xbe9, 0xb6a, 0xbe9, 0xb6a, 0xbe9, 0xb6a, 0x94e, +0x902, 0x94e, 0x902, 0x797, 0x780, 0x797, 0x780, 0x792, 0x7b1, 0x792, 0x7b1, +0x69f, 0x6f7, 0x69f, 0x6f7, 0x1a4, 0x236, 0x1a4, 0x236, 0xfed7, 0xffa4, 0xfed7, +0xffa4, 0xfed7, 0xffa4, 0xfe9b, 0xffa4, 0xfe9b, 0xffa4, 0xfc37, 0xfd7e, 0xfc37, 0xfd7e, +0xfc42, 0xfdc8, 0xfc42, 0xfdc8, 0xf999, 0xfb5d, 0xf999, 0xfb5d, 0xf5db, 0xf7df, 0xf5db, +0xf7df, 0xf5db, 0xf7df, 0xf4c6, 0xf708, 0xf4c6, 0xf708, 0xf3fd, 0xf67f, 0xf3fd, 0xf67f, +0xf3d3, 0xf694, 0xf3d3, 0xf694, 0xf165, 0xf464, 0xf165, 0xf464, 0xee9d, 0xf1da, 0xee9d, +0xf1da, 0xec72, 0xefeb, 0xec72, 0xefeb, 0xec72, 0xefeb, 0xeb15, 0xeeca, 0xeb15, 0xeeca, +0xeafd, 0xeeeb, 0xeafd, 0xeeeb, 0xe7d8, 0xebfe, 0xe7d8, 0xebfe, 0xe3b4, 0xe810, 0xe3b4, +0xe810, 0xe3fd, 0xe88d, 0xe3fd, 0xe88d, 0xe415, 0xe8d6, 0xe415, 0xe8d6, 0xe415, 0xe8d6, +0xe16d, 0xe65d, 0xe16d, 0xe65d, 0xdf59, 0xe474, 0xdf59, 0xe474, 0xde71, 0xe3b5, 0xde71, +0xe3b5, 0xde4d, 0xe3b6, 0xde4d, 0xe3b6, 0xddc1, 0xe34c, 0xddc1, 0xe34c, 0xddc1, 0xe34c, +0xdce0, 0xe289, 0xdce0, 0xe289, 0xdb8d, 0xe151, 0xdb8d, 0xe151, 0xda84, 0xe05e, 0xda84, +0xe05e, 0xd9ef, 0xdfdd, 0xd9ef, 0xdfdd, 0xd909, 0xdf06, 0xd909, 0xdf06, 0xd78e, 0xdd96, +0xd78e, 0xdd96, 0xd78e, 0xdd96, 0xd5a8, 0xdbb8, 0xd5a8, 0xdbb8, 0xd4e6, 0xdafa, 0xd4e6, +0xdafa, 0xd6db, 0xdcee, 0xd6db, 0xdcee, 0xd92b, 0xdf3a, 0xd92b, 0xdf3a, 0xd92a, 0xdf32, +0xd92a, 0xdf32, 0xd92a, 0xdf32, 0xd90f, 0xdf0c, 0xd90f, 0xdf0c, 0xd909, 0xdef7, 0xd909, +0xdef7, 0xd9ba, 0xdf97, 0xd9ba, 0xdf97, 0xd940, 0xdf08, 0xd940, 0xdf08, 0xd8ac, 0xde5c, +0xd8ac, 0xde5c, 0xda05, 0xdf9a, 0xda05, 0xdf9a, 0xda05, 0xdf9a, 0xda44, 0xdfbc, 0xda44, +0xdfbc, 0xdb27, 0xe07f, 0xdb27, 0xe07f, 0xdcac, 0xe1e2, 0xdcac, 0xe1e2, 0xde4f, 0xe362, +0xde4f, 0xe362, 0xdeee, 0xe3da, 0xdeee, 0xe3da, 0xdeca, 0xe38e, 0xdeca, 0xe38e, 0xdeca, +0xe38e, 0xdf30, 0xe3ca, 0xdf30, 0xe3ca, 0xdee3, 0xe351, 0xdee3, 0xe351, 0xde99, 0xe2da, +0xde99, 0xe2da, 0xdda5, 0xe1b8, 0xdda5, 0xe1b8, 0xdd35, 0xe118, 0xdd35, 0xe118, 0xdd35, +0xe118, 0xdf8b, 0xe33d, 0xdf8b, 0xe33d, 0xe03d, 0xe3bd, 0xe03d, 0xe3bd, 0xdf57, 0xe2a5, +0xdf57, 0xe2a5, 0xe027, 0xe341, 0xe027, 0xe341, 0xdf89, 0xe26f, 0xdf89, 0xe26f, 0xdf68, +0xe21a, 0xdf68, 0xe21a, 0xdf68, 0xe21a, 0xdfab, 0xe228, 0xdfab, 0xe228, 0xdf22, 0xe16a, +0xdf22, 0xe16a, 0xdfd2, 0xe1e5, 0xdfd2, 0xe1e5, 0xe1ef, 0xe3cd, 0xe1ef, 0xe3cd, 0xe433, +0xe5dc, 0xe433, 0xe5dc, 0xe528, 0xe69e, 0xe528, 0xe69e, 0xe528, 0xe69e, 0xe75e, 0xe8a0, +0xe75e, 0xe8a0, 0xe73c, 0xe84b, 0xe73c, 0xe84b, 0xe745, 0xe822, 0xe745, 0xe822, 0xea02, +0xeaae, 0xea02, 0xeaae, 0xeb38, 0xebb4, 0xeb38, 0xebb4, 0xeb38, 0xebb4, 0xedaa, 0xedf8, +0xedaa, 0xedf8, 0xf00c, 0xf02d, 0xf00c, 0xf02d, 0xf1de, 0xf1d3, 0xf1de, 0xf1d3, 0xf353, +0xf31f, 0xf353, 0xf31f, 0xf3cd, 0xf371, 0xf3cd, 0xf371, 0xf5be, 0xf53b, 0xf5be, 0xf53b, +0xf5be, 0xf53b, 0xf79b, 0xf6f4, 0xf79b, 0xf6f4, 0xf8f9, 0xf82e, 0xf8f9, 0xf82e, 0xfc05, +0xfb19, 0xfc05, 0xfb19, 0xfd65, 0xfc5a, 0xfd65, 0xfc5a, 0xfe7a, 0xfd52, 0xfe7a, 0xfd52, +0x105, 0xffc1, 0x105, 0xffc1, 0x105, 0xffc1, 0x310, 0x1b2, 0x310, 0x1b2, 0x517, +0x3a0, 0x517, 0x3a0, 0x63b, 0x4ad, 0x63b, 0x4ad, 0x903, 0x75f, 0x903, 0x75f, +0x8c3, 0x70b, 0x8c3, 0x70b, 0x8c3, 0x70b, 0x962, 0x797, 0x962, 0x797, 0xd0b, +0xb2d, 0xd0b, 0xb2d, 0xc9e, 0xaaf, 0xc9e, 0xaaf, 0xcd4, 0xad5, 0xcd4, 0xad5, +0xd21, 0xb13, 0xd21, 0xb13, 0xf57, 0xd3b, 0xf57, 0xd3b, 0xf57, 0xd3b, 0xf2f, +0xd05, 0xf2f, 0xd05, 0xdc5, 0xb8d, 0xdc5, 0xb8d, 0xff7, 0xdb2, 0xff7, 0xdb2, +0x1001, 0xdaf, 0x1001, 0xdaf, 0x11db, 0xf7d, 0x11db, 0xf7d, 0x1307, 0x109e, 0x1307, +0x109e, 0x1307, 0x109e, 0x13cf, 0x115b, 0x13cf, 0x115b, 0x15b0, 0x1332, 0x15b0, 0x1332, +0x15f9, 0x1371, 0x15f9, 0x1371, 0x169b, 0x1409, 0x169b, 0x1409, 0x1753, 0x14b8, 0x1753, +0x14b8, 0x1753, 0x14b8, 0x183e, 0x159b, 0x183e, 0x159b, 0x17b3, 0x1508, 0x17b3, 0x1508, +0x17a5, 0x14f3, 0x17a5, 0x14f3, 0x196f, 0x16b6, 0x196f, 0x16b6, 0x1a52, 0x1794, 0x1a52, +0x1794, 0x19f6, 0x1733, 0x19f6, 0x1733, 0x19f6, 0x1733, 0x19e8, 0x1721, 0x19e8, 0x1721, +0x1a75, 0x17ac, 0x1a75, 0x17ac, 0x1a99, 0x17ce, 0x1a99, 0x17ce, 0x1a63, 0x1797, 0x1a63, +0x1797, 0x1b49, 0x187e, 0x1b49, 0x187e, 0x1bd4, 0x190b, 0x1bd4, 0x190b, 0x1bd4, 0x190b, +0x1978, 0x16b1, 0x1978, 0x16b1, 0x18b5, 0x15f3, 0x18b5, 0x15f3, 0x190e, 0x1651, 0x190e, +0x1651, 0x15b6, 0x1300, 0x15b6, 0x1300, 0x12d4, 0x1025, 0x12d4, 0x1025, 0x12d4, 0x1025, +0x1286, 0xfdf, 0x1286, 0xfdf, 0x1224, 0xf87, 0x1224, 0xf87, 0x1154, 0xec2, 0x1154, +0xec2, 0xe6e, 0xbe6, 0xe6e, 0xbe6, 0xb58, 0x8dd, 0xb58, 0x8dd, 0x9d9, 0x76a, +0x9d9, 0x76a, 0x9d9, 0x76a, 0x8ab, 0x649, 0x8ab, 0x649, 0x8ab, 0x657, 0x8ab, +0x657, 0x848, 0x602, 0x848, 0x602, 0x723, 0x4ec, 0x723, 0x4ec, 0x6a9, 0x481, +0x6a9, 0x481, 0x7ea, 0x5d0, 0x7ea, 0x5d0, 0x7ea, 0x5d0, 0x803, 0x5f9, 0x803, +0x5f9, 0x68f, 0x494, 0x68f, 0x494, 0x5f3, 0x406, 0x5f3, 0x406, 0x5f2, 0x414, +0x5f2, 0x414, 0x6db, 0x50c, 0x6db, 0x50c, 0x6db, 0x50c, 0x665, 0x4a6, 0x665, +0x4a6, 0x57d, 0x3cd, 0x57d, 0x3cd, 0x373, 0x1d2, 0x373, 0x1d2, 0x100, 0xff6f, +0x100, 0xff6f, 0x11c, 0xff9b, 0x11c, 0xff9b, 0x15d, 0xffeb, 0x15d, 0xffeb, 0x15d, +0xffeb, 0x1b, 0xfeba, 0x1b, 0xfeba, 0xffa1, 0xfe51, 0xffa1, 0xfe51, 0x120, 0xffe1, +0x120, 0xffe1, 0x1b2, 0x86, 0x1b2, 0x86, 0x12f, 0x15, 0x12f, 0x15, 0xffa6, +0xfe9f, 0xffa6, 0xfe9f, 0xffa6, 0xfe9f, 0xfefd, 0xfe0a, 0xfefd, 0xfe0a, 0xff0e, 0xfe30, +0xff0e, 0xfe30, 0xff86, 0xfebd, 0xff86, 0xfebd, 0xff21, 0xfe6e, 0xff21, 0xfe6e, 0xfc87, +0xfbeb, 0xfc87, 0xfbeb, 0xfc87, 0xfbeb, 0xfba6, 0xfb20, 0xfba6, 0xfb20, 0xfaf7, 0xfa88, +0xfaf7, 0xfa88, 0xfb02, 0xfaaa, 0xfb02, 0xfaaa, 0xf9d6, 0xf996, 0xf9d6, 0xf996, 0xf7f5, +0xf7cb, 0xf7f5, 0xf7cb, 0xf669, 0xf656, 0xf669, 0xf656, 0xf669, 0xf656, 0xf557, 0xf559, +0xf557, 0xf559, 0xf77f, 0xf796, 0xf77f, 0xf796, 0xf6a5, 0xf6cf, 0xf6a5, 0xf6cf, 0xf5eb, +0xf627, 0xf5eb, 0xf627, 0xf725, 0xf772, 0xf725, 0xf772, 0xf6c2, 0xf71e, 0xf6c2, 0xf71e, +0xf6c2, 0xf71e, 0xf6ea, 0xf753, 0xf6ea, 0xf753, 0xf6ff, 0xf772, 0xf6ff, 0xf772, 0xf675, +0xf6f1, 0xf675, 0xf6f1, 0xf62c, 0xf6ae, 0xf62c, 0xf6ae, 0xf724, 0xf7aa, 0xf724, 0xf7aa, +0xf724, 0xf7aa, 0xf8f3, 0xf97b, 0xf8f3, 0xf97b, 0xfa4d, 0xfad4, 0xfa4d, 0xfad4, 0xfa78, +0xfafc, 0xfa78, 0xfafc, 0xfa57, 0xfad6, 0xfa57, 0xfad6, 0xfa43, 0xfabb, 0xfa43, 0xfabb, +0xfbcd, 0xfc3b, 0xfbcd, 0xfc3b, 0xfbcd, 0xfc3b, 0xfbf8, 0xfc5a, 0xfbf8, 0xfc5a, 0xfa2a, +0xfa80, 0xfa2a, 0xfa80, 0xfb4f, 0xfb97, 0xfb4f, 0xfb97, 0xfd18, 0xfd50, 0xfd18, 0xfd50, +0xff0d, 0xff36, 0xff0d, 0xff36, 0xff0d, 0xff36, 0x64, 0x7c, 0x64, 0x7c, 0xd6, +0xdc, 0xd6, 0xdc, 0x7c, 0x71, 0x7c, 0x71, 0xff90, 0xff74, 0xff90, 0xff74, +0xd6, 0xa9, 0xd6, 0xa9, 0x212, 0x1d4, 0x212, 0x1d4, 0x212, 0x1d4, 0x300, +0x2b2, 0x300, 0x2b2, 0x4ea, 0x48d, 0x4ea, 0x48d, 0x634, 0x5c8, 0x634, 0x5c8, +0x65f, 0x5e6, 0x65f, 0x5e6, 0x708, 0x682, 0x708, 0x682, 0x641, 0x5b0, 0x641, +0x5b0, 0x641, 0x5b0, 0x5b8, 0x51d, 0x5b8, 0x51d, 0x722, 0x67d, 0x722, 0x67d, +0x7f6, 0x749, 0x7f6, 0x749, 0x9b1, 0x8fc, 0x9b1, 0x8fc, 0xa81, 0x9c5, 0xa81, +0x9c5, 0xa81, 0x9c5, 0xbad, 0xaea, 0xbad, 0xaea, 0xd70, 0xca7, 0xd70, 0xca7, +0xf19, 0xe4b, 0xf19, 0xe4b, 0x10a4, 0xfd2, 0x10a4, 0xfd2, 0x1056, 0xf7f, 0x1056, +0xf7f, 0x1094, 0xfb9, 0x1094, 0xfb9, 0x1094, 0xfb9, 0x1049, 0xf6a, 0x1049, 0xf6a, +0x11ac, 0x10c9, 0x11ac, 0x10c9, 0x1307, 0x1221, 0x1307, 0x1221, 0x1390, 0x12a7, 0x1390, +0x12a7, 0x154b, 0x145e, 0x154b, 0x145e, 0x144d, 0x135d, 0x144d, 0x135d, 0x144d, 0x135d, +0x13d4, 0x12e0, 0x13d4, 0x12e0, 0x1396, 0x12a0, 0x1396, 0x12a0, 0x11fc, 0x1103, 0x11fc, +0x1103, 0x11a2, 0x10a6, 0x11a2, 0x10a6, 0x1211, 0x1113, 0x1211, 0x1113, 0x1211, 0x1113, +0x11a9, 0x10aa, 0x11a9, 0x10aa, 0x11e4, 0x10e4, 0x11e4, 0x10e4, 0x1304, 0x1204, 0x1304, +0x1204, 0x1259, 0x1159, 0x1259, 0x1159, 0x1261, 0x1163, 0x1261, 0x1163, 0x12d4, 0x11d8, +0x12d4, 0x11d8, 0x12d4, 0x11d8, 0x123c, 0x1143, 0x123c, 0x1143, 0x1246, 0x1152, 0x1246, +0x1152, 0x1202, 0x1113, 0x1202, 0x1113, 0xfe5, 0xefd, 0xfe5, 0xefd, 0xec5, 0xde4, +0xec5, 0xde4, 0xf1a, 0xe42, 0xf1a, 0xe42, 0xf1a, 0xe42, 0xd45, 0xc76, 0xd45, +0xc76, 0xc24, 0xb60, 0xc24, 0xb60, 0xc27, 0xb6d, 0xc27, 0xb6d, 0xb3f, 0xa91, +0xb3f, 0xa91, 0xaeb, 0xa49, 0xaeb, 0xa49, 0xaeb, 0xa49, 0x9e2, 0x94a, 0x9e2, +0x94a, 0x979, 0x8ed, 0x979, 0x8ed, 0x970, 0x8ee, 0x970, 0x8ee, 0x70b, 0x693, +0x70b, 0x693, 0x5ae, 0x540, 0x5ae, 0x540, 0x519, 0x4b2, 0x519, 0x4b2, 0x519, +0x4b2, 0x40d, 0x3ad, 0x40d, 0x3ad, 0x303, 0x2a8, 0x303, 0x2a8, 0x25f, 0x206, +0x25f, 0x206, 0x2d1, 0x279, 0x2d1, 0x279, 0x2f4, 0x29a, 0x2f4, 0x29a, 0x4d3, +0x476, 0x4d3, 0x476, 0x4d3, 0x476, 0x603, 0x59f, 0x603, 0x59f, 0x5c9, 0x55c, +0x5c9, 0x55c, 0x56b, 0x4f3, 0x56b, 0x4f3, 0x47e, 0x3f9, 0x47e, 0x3f9, 0x55d, +0x4c8, 0x55d, 0x4c8, 0x55d, 0x4c8, 0x5cf, 0x528, 0x5cf, 0x528, 0x550, 0x496, +0x550, 0x496, 0x40c, 0x33c, 0x40c, 0x33c, 0x3c0, 0x2da, 0x3c0, 0x2da, 0x51c, +0x41e, 0x51c, 0x41e, 0x54f, 0x43a, 0x54f, 0x43a, 0x54f, 0x43a, 0x67c, 0x54e, +0x67c, 0x54e, 0x846, 0x701, 0x846, 0x701, 0x7be, 0x661, 0x7be, 0x661, 0x837, +0x6c3, 0x837, 0x6c3, 0xa23, 0x899, 0xa23, 0x899, 0xb6c, 0x9ce, 0xb6c, 0x9ce, +0xb6c, 0x9ce, 0xd67, 0xbb6, 0xd67, 0xbb6, 0xdee, 0xc2d, 0xdee, 0xc2d, 0xefa, +0xd2a, 0xefa, 0xd2a, 0xfe5, 0xe08, 0xfe5, 0xe08, 0xeaf, 0xcc9, 0xeaf, 0xcc9, +0xeaf, 0xcc9, 0xe4b, 0xc5e, 0xe4b, 0xc5e, 0xf46, 0xd55, 0xf46, 0xd55, 0x10a6, +0xeb4, 0x10a6, 0xeb4, 0xfbd, 0xdcc, 0xfbd, 0xdcc, 0xf13, 0xd26, 0xf13, 0xd26, +0xd90, 0xba9, 0xd90, 0xba9, 0xd90, 0xba9, 0xd1f, 0xb41, 0xd1f, 0xb41, 0x1086, +0xeb2, 0x1086, 0xeb2, 0x10a7, 0xee0, 0x10a7, 0xee0, 0xf6e, 0xdb7, 0xf6e, 0xdb7, +0xf0c, 0xd65, 0xf0c, 0xd65, 0xe4e, 0xcba, 0xe4e, 0xcba, 0xe4e, 0xcba, 0xed9, +0xd58, 0xed9, 0xd58, 0xf06, 0xd9b, 0xf06, 0xd9b, 0xf10, 0xdbb, 0xf10, 0xdbb, +0xefb, 0xdbd, 0xefb, 0xdbd, 0xdfd, 0xcd7, 0xdfd, 0xcd7, 0xdfd, 0xcd7, 0xea2, +0xd95, 0xea2, 0xd95, 0xe3a, 0xd47, 0xe3a, 0xd47, 0xcba, 0xbe2, 0xcba, 0xbe2, +0xd02, 0xc45, 0xd02, 0xc45, 0xded, 0xd4d, 0xded, 0xd4d, 0xe17, 0xd95, 0xe17, +0xd95, 0xe17, 0xd95, 0xbe2, 0xb7e, 0xbe2, 0xb7e, 0xba4, 0xb61, 0xba4, 0xb61, +0xaeb, 0xac9, 0xaeb, 0xac9, 0x85f, 0x860, 0x85f, 0x860, 0x728, 0x74d, 0x728, +0x74d, 0x455, 0x4a1, 0x455, 0x4a1, 0x455, 0x4a1, 0x24c, 0x2bf, 0x24c, 0x2bf, +0x15d, 0x1fa, 0x15d, 0x1fa, 0x189, 0x251, 0x189, 0x251, 0xa4, 0x19a, 0xa4, +0x19a, 0xfe09, 0xff2d, 0xfe09, 0xff2d, 0xfe09, 0xff2d, 0xfcf6, 0xfe4a, 0xfcf6, 0xfe4a, +0xfa74, 0xfbfa, 0xfa74, 0xfbfa, 0xf888, 0xfa41, 0xf888, 0xfa41, 0xf79a, 0xf987, 0xf79a, +0xf987, 0xf473, 0xf695, 0xf473, 0xf695, 0xf27b, 0xf4d3, 0xf27b, 0xf4d3, 0xf27b, 0xf4d3, +0xf380, 0xf60e, 0xf380, 0xf60e, 0xf3af, 0xf673, 0xf3af, 0xf673, 0xf158, 0xf451, 0xf158, +0xf451, 0xee93, 0xf1c1, 0xee93, 0xf1c1, 0xed10, 0xf072, 0xed10, 0xf072, 0xeb9d, 0xef31, +0xeb9d, 0xef31, 0xeb9d, 0xef31, 0xe97e, 0xed42, 0xe97e, 0xed42, 0xe7c6, 0xebb8, 0xe7c6, +0xebb8, 0xe5c6, 0xe9e3, 0xe5c6, 0xe9e3, 0xe46e, 0xe8b4, 0xe46e, 0xe8b4, 0xe2fb, 0xe766, +0xe2fb, 0xe766, 0xe2fb, 0xe766, 0xe265, 0xe6f2, 0xe265, 0xe6f2, 0xe38c, 0xe838, 0xe38c, +0xe838, 0xe324, 0xe7e9, 0xe324, 0xe7e9, 0xe36a, 0xe846, 0xe36a, 0xe846, 0xe2ca, 0xe7b9, +0xe2ca, 0xe7b9, 0xe035, 0xe532, 0xe035, 0xe532, 0xe035, 0xe532, 0xdeb5, 0xe3bd, 0xdeb5, +0xe3bd, 0xdcdb, 0xe1eb, 0xdcdb, 0xe1eb, 0xdc16, 0xe129, 0xdc16, 0xe129, 0xdbcc, 0xe0df, +0xdbcc, 0xe0df, 0xdad6, 0xdfe5, 0xdad6, 0xdfe5, 0xdad6, 0xdfe5, 0xdb0c, 0xe015, 0xdb0c, +0xe015, 0xdb5a, 0xe05a, 0xdb5a, 0xe05a, 0xdb63, 0xe057, 0xdb63, 0xe057, 0xda5d, 0xdf44, +0xda5d, 0xdf44, 0xd9c4, 0xde9c, 0xd9c4, 0xde9c, 0xdb12, 0xdfd9, 0xdb12, 0xdfd9, 0xdb12, +0xdfd9, 0xdbae, 0xe062, 0xdbae, 0xe062, 0xdcfa, 0xe19b, 0xdcfa, 0xe19b, 0xdde2, 0xe270, +0xdde2, 0xe270, 0xde4c, 0xe2c5, 0xde4c, 0xe2c5, 0xdf81, 0xe3e5, 0xdf81, 0xe3e5, 0xdf03, +0xe352, 0xdf03, 0xe352, 0xdf03, 0xe352, 0xdf93, 0xe3cd, 0xdf93, 0xe3cd, 0xe028, 0xe44e, +0xe028, 0xe44e, 0xe08c, 0xe49d, 0xe08c, 0xe49d, 0xe265, 0xe661, 0xe265, 0xe661, 0xe258, +0xe63f, 0xe258, 0xe63f, 0xe258, 0xe63f, 0xe1f0, 0xe5c2, 0xe1f0, 0xe5c2, 0xe1b1, 0xe56d, +0xe1b1, 0xe56d, 0xe1bb, 0xe560, 0xe1bb, 0xe560, 0xe2b1, 0xe640, 0xe2b1, 0xe640, 0xe236, +0xe5ad, 0xe236, 0xe5ad, 0xe15e, 0xe4bd, 0xe15e, 0xe4bd, 0xe15e, 0xe4bd, 0xe00a, 0xe34f, +0xe00a, 0xe34f, 0xdf4c, 0xe276, 0xdf4c, 0xe276, 0xe12e, 0xe43b, 0xe12e, 0xe43b, 0xe107, +0xe3f5, 0xe107, 0xe3f5, 0xe038, 0xe305, 0xe038, 0xe305, 0xe0e0, 0xe38a, 0xe0e0, 0xe38a, +0xe0e0, 0xe38a, 0xe055, 0xe2db, 0xe055, 0xe2db, 0xdff6, 0xe256, 0xdff6, 0xe256, 0xe07c, +0xe2b4, 0xe07c, 0xe2b4, 0xe277, 0xe485, 0xe277, 0xe485, 0xe36d, 0xe54f, 0xe36d, 0xe54f, +0xe36d, 0xe54f, 0xe3e9, 0xe59e, 0xe3e9, 0xe59e, 0xe54e, 0xe6d5, 0xe54e, 0xe6d5, 0xe5f7, +0xe74e, 0xe5f7, 0xe74e, 0xe8c4, 0xe9eb, 0xe8c4, 0xe9eb, 0xebd2, 0xecc9, 0xebd2, 0xecc9, +0xed31, 0xedf8, 0xed31, 0xedf8, 0xed31, 0xedf8, 0xee3d, 0xeed5, 0xee3d, 0xeed5, 0xef33, +0xef9b, 0xef33, 0xef9b, 0xf15e, 0xf198, 0xf15e, 0xf198, 0xf39d, 0xf3ab, 0xf39d, 0xf3ab, +0xf482, 0xf464, 0xf482, 0xf464, 0xf5e1, 0xf59a, 0xf5e1, 0xf59a, 0xf5e1, 0xf59a, 0xf6af, +0xf640, 0xf6af, 0xf640, 0xf7df, 0xf74b, 0xf7df, 0xf74b, 0xfb07, 0xfa50, 0xfb07, 0xfa50, +0xfb78, 0xfaa1, 0xfb78, 0xfaa1, 0xfbd7, 0xfae3, 0xfbd7, 0xfae3, 0xfbd7, 0xfae3, 0xfe26, +0xfd16, 0xfe26, 0xfd16, 0x56, 0xff2d, 0x56, 0xff2d, 0x23c, 0xfc, 0x23c, 0xfc, +0x217, 0xc2, 0x217, 0xc2, 0x238, 0xcf, 0x238, 0xcf, 0x3a0, 0x226, 0x3a0, +0x226, 0x3a0, 0x226, 0x5b5, 0x42a, 0x5b5, 0x42a, 0x80a, 0x66f, 0x80a, 0x66f, +0x957, 0x7ad, 0x957, 0x7ad, 0x9ec, 0x834, 0x9ec, 0x834, 0xa2d, 0x866, 0xa2d, +0x866, 0xb9a, 0x9c4, 0xb9a, 0x9c4, 0xb9a, 0x9c4, 0xd4c, 0xb66, 0xd4c, 0xb66, +0xd37, 0xb42, 0xd37, 0xb42, 0xd7c, 0xb76, 0xd7c, 0xb76, 0xdbe, 0xba7, 0xdbe, +0xba7, 0xf71, 0xd48, 0xf71, 0xd48, 0xf71, 0xd48, 0x12b9, 0x107c, 0x12b9, 0x107c, +0x1265, 0x1014, 0x1265, 0x1014, 0x12a1, 0x103c, 0x12a1, 0x103c, 0x140c, 0x1191, 0x140c, +0x1191, 0x13df, 0x114e, 0x13df, 0x114e, 0x13c7, 0x1120, 0x13c7, 0x1120, 0x13c7, 0x1120, +0x137b, 0x10bf, 0x137b, 0x10bf, 0x141d, 0x114a, 0x141d, 0x114a, 0x14eb, 0x1204, 0x14eb, +0x1204, 0x16e4, 0x13ea, 0x16e4, 0x13ea, 0x18f6, 0x15e9, 0x18f6, 0x15e9, 0x1930, 0x1612, +0x1930, 0x1612, 0x1930, 0x1612, 0x18dc, 0x15b0, 0x18dc, 0x15b0, 0x193b, 0x1603, 0x193b, +0x1603, 0x1afe, 0x17bd, 0x1afe, 0x17bd, 0x19d9, 0x1691, 0x19d9, 0x1691, 0x1873, 0x1529, +0x1873, 0x1529, 0x1873, 0x1529, 0x1915, 0x15cb, 0x1915, 0x15cb, 0x1699, 0x1352, 0x1699, +0x1352, 0x1514, 0x11d4, 0x1514, 0x11d4, 0x158d, 0x1258, 0x158d, 0x1258, 0x142a, 0x1103, +0x142a, 0x1103, 0x1266, 0xf50, 0x1266, 0xf50, 0x1266, 0xf50, 0x110a, 0xe09, 0x110a, +0xe09, 0x1140, 0xe56, 0x1140, 0xe56, 0x1001, 0xd32, 0x1001, 0xd32, 0xdbe, 0xb0c, +0xdbe, 0xb0c, 0xd91, 0xafd, 0xd91, 0xafd, 0xc56, 0x9e2, 0xc56, 0x9e2, 0xc56, +0x9e2, 0xb60, 0x90e, 0xb60, 0x90e, 0xb22, 0x8f3, 0xb22, 0x8f3, 0xac2, 0x8b7, +0xac2, 0x8b7, 0x98e, 0x7a7, 0x98e, 0x7a7, 0x887, 0x6c4, 0x887, 0x6c4, 0x887, +0x6c4, 0x9db, 0x83c, 0x9db, 0x83c, 0x93f, 0x7c3, 0x93f, 0x7c3, 0x783, 0x62a, +0x783, 0x62a, 0x7ce, 0x696, 0x7ce, 0x696, 0x85c, 0x745, 0x85c, 0x745, 0x8a6, +0x7ae, 0x8a6, 0x7ae, 0x8a6, 0x7ae, 0x7ea, 0x710, 0x7ea, 0x710, 0x678, 0x5bb, +0x678, 0x5bb, 0x652, 0x5b0, 0x652, 0x5b0, 0x640, 0x5ba, 0x640, 0x5ba, 0x622, +0x5b5, 0x622, 0x5b5, 0x586, 0x532, 0x586, 0x532, 0x586, 0x532, 0x48c, 0x450, +0x48c, 0x450, 0x50f, 0x4ea, 0x50f, 0x4ea, 0x554, 0x546, 0x554, 0x546, 0x6bc, +0x6c5, 0x6bc, 0x6c5, 0x6cb, 0x6eb, 0x6cb, 0x6eb, 0x6cb, 0x6eb, 0x410, 0x446, +0x410, 0x446, 0x298, 0x2e6, 0x298, 0x2e6, 0x1d1, 0x236, 0x1d1, 0x236, 0x16f, +0x1ed, 0x16f, 0x1ed, 0xffda, 0x70, 0xffda, 0x70, 0xfd9e, 0xfe4c, 0xfd9e, 0xfe4c, +0xfd9e, 0xfe4c, 0xfc89, 0xfd51, 0xfc89, 0xfd51, 0xfc55, 0xfd36, 0xfc55, 0xfd36, 0xfc9c, +0xfd96, 0xfc9c, 0xfd96, 0xfb2e, 0xfc41, 0xfb2e, 0xfc41, 0xf917, 0xfa43, 0xf917, 0xfa43, +0xf89f, 0xf9e2, 0xf89f, 0xf9e2, 0xf89f, 0xf9e2, 0xf8c5, 0xfa1f, 0xf8c5, 0xfa1f, 0xf934, +0xfaa3, 0xf934, 0xfaa3, 0xf8c8, 0xfa4b, 0xf8c8, 0xfa4b, 0xf6e3, 0xf878, 0xf6e3, 0xf878, +0xf5ed, 0xf791, 0xf5ed, 0xf791, 0xf5ed, 0xf791, 0xf5ae, 0xf75d, 0xf5ae, 0xf75d, 0xf758, +0xf911, 0xf758, 0xf911, 0xf866, 0xfa25, 0xf866, 0xfa25, 0xf79d, 0xf95e, 0xf79d, 0xf95e, +0xf865, 0xfa24, 0xf865, 0xfa24, 0xf81f, 0xf9d9, 0xf81f, 0xf9d9, 0xf81f, 0xf9d9, 0xf82b, +0xf9dc, 0xf82b, 0xf9dc, 0xf86b, 0xfa0e, 0xf86b, 0xfa0e, 0xf7f8, 0xf98a, 0xf7f8, 0xf98a, +0xf799, 0xf917, 0xf799, 0xf917, 0xf787, 0xf8ed, 0xf787, 0xf8ed, 0xf787, 0xf8ed, 0xf8e8, +0xfa32, 0xf8e8, 0xfa32, 0xf913, 0xfa3e, 0xf913, 0xfa3e, 0xfa3a, 0xfb44, 0xfa3a, 0xfb44, +0xfb06, 0xfbed, 0xfb06, 0xfbed, 0xfaa6, 0xfb68, 0xfaa6, 0xfb68, 0xfcbb, 0xfd57, 0xfcbb, +0xfd57, 0xfcbb, 0xfd57, 0xfd2c, 0xfda1, 0xfd2c, 0xfda1, 0xfcd2, 0xfd1f, 0xfcd2, 0xfd1f, +0xfe21, 0xfe48, 0xfe21, 0xfe48, 0xff15, 0xff15, 0xff15, 0xff15, 0x138, 0x112, 0x138, +0x112, 0x31e, 0x2d5, 0x31e, 0x2d5, 0x31e, 0x2d5, 0x30f, 0x2a4, 0x30f, 0x2a4, +0x389, 0x2fe, 0x389, 0x2fe, 0x4c9, 0x421, 0x4c9, 0x421, 0x5e0, 0x51d, 0x5e0, +0x51d, 0x509, 0x42e, 0x509, 0x42e, 0x509, 0x42e, 0x424, 0x333, 0x424, 0x333, +0x482, 0x37f, 0x482, 0x37f, 0x510, 0x3fe, 0x510, 0x3fe, 0x721, 0x601, 0x721, +0x601, 0x8df, 0x7b5, 0x8df, 0x7b5, 0x9e3, 0x8b0, 0x9e3, 0x8b0, 0x9e3, 0x8b0, +0xa2e, 0x8f4, 0xa2e, 0x8f4, 0xaf3, 0x9b5, 0xaf3, 0x9b5, 0xc7e, 0xb3d, 0xc7e, +0xb3d, 0xc57, 0xb15, 0xc57, 0xb15, 0xcd5, 0xb91, 0xcd5, 0xb91, 0xee5, 0xda0, +0xee5, 0xda0, 0xee5, 0xda0, 0x105d, 0xf18, 0x105d, 0xf18, 0x1106, 0xfc0, 0x1106, +0xfc0, 0x1202, 0x10bc, 0x1202, 0x10bc, 0x12aa, 0x1163, 0x12aa, 0x1163, 0x1359, 0x1210, +0x1359, 0x1210, 0x1359, 0x1210, 0x1401, 0x12b6, 0x1401, 0x12b6, 0x140b, 0x12bd, 0x140b, +0x12bd, 0x12ca, 0x1179, 0x12ca, 0x1179, 0x11db, 0x1086, 0x11db, 0x1086, 0x1333, 0x11d8, +0x1333, 0x11d8, 0x12bb, 0x115b, 0x12bb, 0x115b, 0x12bb, 0x115b, 0x1285, 0x111f, 0x1285, +0x111f, 0x12cf, 0x1163, 0x12cf, 0x1163, 0x123d, 0x10cb, 0x123d, 0x10cb, 0x13de, 0x1266, +0x13de, 0x1266, 0x1518, 0x139b, 0x1518, 0x139b, 0x13d6, 0x1254, 0x13d6, 0x1254, 0x13d6, +0x1254, 0x114f, 0xfc9, 0x114f, 0xfc9, 0x1081, 0xef8, 0x1081, 0xef8, 0x110c, 0xf81, +0x110c, 0xf81, 0x113e, 0xfb3, 0x113e, 0xfb3, 0x100c, 0xe82, 0x100c, 0xe82, 0x100c, +0xe82, 0xd52, 0xbcb, 0xd52, 0xbcb, 0xcd3, 0xb4f, 0xcd3, 0xb4f, 0xd8c, 0xc0d, +0xd8c, 0xc0d, 0xc77, 0xaff, 0xc77, 0xaff, 0xb72, 0xa02, 0xb72, 0xa02, 0x9fc, +0x895, 0x9fc, 0x895, 0x9fc, 0x895, 0x85d, 0x6ff, 0x85d, 0x6ff, 0x8fe, 0x7aa, +0x8fe, 0x7aa, 0x902, 0x7b7, 0x902, 0x7b7, 0x97a, 0x838, 0x97a, 0x838, 0x8e4, +0x7ab, 0x8e4, 0x7ab, 0x683, 0x552, 0x683, 0x552, 0x683, 0x552, 0x67f, 0x555, +0x67f, 0x555, 0x635, 0x50f, 0x635, 0x50f, 0x5c4, 0x4a0, 0x5c4, 0x4a0, 0x562, +0x43f, 0x562, 0x43f, 0x66b, 0x546, 0x66b, 0x546, 0x66b, 0x546, 0x86d, 0x743, +0x86d, 0x743, 0x90d, 0x7db, 0x90d, 0x7db, 0x988, 0x84b, 0x988, 0x84b, 0x8b0, +0x765, 0x8b0, 0x765, 0x7f5, 0x699, 0x7f5, 0x699, 0x703, 0x594, 0x703, 0x594, +0x703, 0x594, 0x5e7, 0x461, 0x5e7, 0x461, 0x58b, 0x3ec, 0x58b, 0x3ec, 0x4ae, +0x2f4, 0x4ae, 0x2f4, 0x5ef, 0x418, 0x5ef, 0x418, 0x8ec, 0x6f7, 0x8ec, 0x6f7, +0x8dd, 0x6c9, 0x8dd, 0x6c9, 0x8dd, 0x6c9, 0x7ec, 0x5b7, 0x7ec, 0x5b7, 0x8c3, +0x670, 0x8c3, 0x670, 0x9ee, 0x77b, 0x9ee, 0x77b, 0xc07, 0x976, 0xc07, 0x976, +0xd73, 0xac5, 0xd73, 0xac5, 0xd73, 0xac5, 0xef6, 0xc2d, 0xef6, 0xc2d, 0xee5, +0xc03, 0xee5, 0xc03, 0xdfb, 0xb03, 0xdfb, 0xb03, 0x100a, 0xd00, 0x100a, 0xd00, +0x1089, 0xd6e, 0x1089, 0xd6e, 0xf78, 0xc52, 0xf78, 0xc52, 0xf78, 0xc52, 0xf0c, +0xbdd, 0xf0c, 0xbdd, 0xf0c, 0xbd8, 0xf0c, 0xbd8, 0xe5e, 0xb2a, 0xe5e, 0xb2a, +0xe88, 0xb56, 0xe88, 0xb56, 0xfd1, 0xca5, 0xfd1, 0xca5, 0xeec, 0xbca, 0xeec, +0xbca, 0xeec, 0xbca, 0xe94, 0xb7f, 0xe94, 0xb7f, 0xfaf, 0xcaa, 0xfaf, 0xcaa, +0x1004, 0xd12, 0x1004, 0xd12, 0xfc7, 0xcea, 0xfc7, 0xcea, 0x109e, 0xdd8, 0x109e, +0xdd8, 0x109e, 0xdd8, 0x11a0, 0xef4, 0x11a0, 0xef4, 0x11ef, 0xf5e, 0x11ef, 0xf5e, +0x1175, 0xf00, 0x1175, 0xf00, 0x104a, 0xdf3, 0x104a, 0xdf3, 0xfe0, 0xda7, 0xfe0, +0xda7, 0xf4d, 0xd33, 0xf4d, 0xd33, 0xf4d, 0xd33, 0xf7a, 0xd7e, 0xf7a, 0xd7e, +0xf49, 0xd6d, 0xf49, 0xd6d, 0xe1a, 0xc5e, 0xe1a, 0xc5e, 0xe02, 0xc66, 0xe02, +0xc66, 0xdd8, 0xc5d, 0xdd8, 0xc5d, 0xd9e, 0xc43, 0xd9e, 0xc43, 0xd9e, 0xc43, +0xcf9, 0xbc0, 0xcf9, 0xbc0, 0xae1, 0x9cb, 0xae1, 0x9cb, 0x821, 0x72d, 0x821, +0x72d, 0x65e, 0x58e, 0x65e, 0x58e, 0x689, 0x5de, 0x689, 0x5de, 0x689, 0x5de, +0x649, 0x5c6, 0x649, 0x5c6, 0x45d, 0x402, 0x45d, 0x402, 0x29b, 0x26a, 0x29b, +0x26a, 0x16b, 0x166, 0x16b, 0x166, 0x12, 0x3c, 0x12, 0x3c, 0xfddb, 0xfe36, +0xfddb, 0xfe36, 0xfddb, 0xfe36, 0xfbc5, 0xfc52, 0xfbc5, 0xfc52, 0xf925, 0xf9e8, 0xf925, +0xf9e8, 0xf700, 0xf7fa, 0xf700, 0xf7fa, 0xf792, 0xf8c6, 0xf792, 0xf8c6, 0xf74a, 0xf8b9, +0xf74a, 0xf8b9, 0xf65b, 0xf807, 0xf65b, 0xf807, 0xf65b, 0xf807, 0xf4bc, 0xf6a7, 0xf4bc, +0xf6a7, 0xf2e3, 0xf50d, 0xf2e3, 0xf50d, 0xf277, 0xf4e2, 0xf277, 0xf4e2, 0xf083, 0xf32f, +0xf083, 0xf32f, 0xedf0, 0xf0dd, 0xedf0, 0xf0dd, 0xedf0, 0xf0dd, 0xeb6f, 0xee9c, 0xeb6f, +0xee9c, 0xe9a4, 0xed11, 0xe9a4, 0xed11, 0xe93a, 0xece5, 0xe93a, 0xece5, 0xe88f, 0xec76, +0xe88f, 0xec76, 0xe6c2, 0xeae3, 0xe6c2, 0xeae3, 0xe438, 0xe891, 0xe438, 0xe891, 0xe438, +0xe891, 0xe3e1, 0xe86d, 0xe3e1, 0xe86d, 0xe3e1, 0xe89e, 0xe3e1, 0xe89e, 0xe29d, 0xe787, +0xe29d, 0xe787, 0xe20f, 0xe722, 0xe20f, 0xe722, 0xdfb8, 0xe4ef, 0xdfb8, 0xe4ef, 0xdfb8, +0xe4ef, 0xddf8, 0xe34f, 0xddf8, 0xe34f, 0xde25, 0xe396, 0xde25, 0xe396, 0xdbe6, 0xe16e, +0xdbe6, 0xe16e, 0xdaa7, 0xe040, 0xdaa7, 0xe040, 0xda91, 0xe037, 0xda91, 0xe037, 0xd9ae, +0xdf5c, 0xd9ae, 0xdf5c, 0xd9ae, 0xdf5c, 0xd9db, 0xdf8c, 0xd9db, 0xdf8c, 0xd982, 0xdf32, +0xd982, 0xdf32, 0xd87e, 0xde2a, 0xd87e, 0xde2a, 0xd79c, 0xdd3f, 0xd79c, 0xdd3f, 0xd8b4, +0xde4a, 0xd8b4, 0xde4a, 0xdafd, 0xe084, 0xdafd, 0xe084, 0xdafd, 0xe084, 0xdb39, 0xe0ae, +0xdb39, 0xe0ae, 0xdaf8, 0xe058, 0xdaf8, 0xe058, 0xdb4f, 0xe098, 0xdb4f, 0xe098, 0xdb87, +0xe0b8, 0xdb87, 0xe0b8, 0xdb1f, 0xe035, 0xdb1f, 0xe035, 0xdb1f, 0xe035, 0xda35, 0xdf30, +0xda35, 0xdf30, 0xda35, 0xdf14, 0xda35, 0xdf14, 0xda66, 0xdf29, 0xda66, 0xdf29, 0xdbb1, +0xe057, 0xdbb1, 0xe057, 0xdec8, 0xe351, 0xdec8, 0xe351, 0xdf37, 0xe3a3, 0xdf37, 0xe3a3, +0xdf37, 0xe3a3, 0xdeb0, 0xe2ff, 0xdeb0, 0xe2ff, 0xdfac, 0xe3de, 0xdfac, 0xe3de, 0xdfc3, +0xe3d8, 0xdfc3, 0xe3d8, 0xdf23, 0xe31a, 0xdf23, 0xe31a, 0xde4c, 0xe226, 0xde4c, 0xe226, +0xddd9, 0xe196, 0xddd9, 0xe196, 0xddd9, 0xe196, 0xddc7, 0xe165, 0xddc7, 0xe165, 0xde6e, +0xe1ed, 0xde6e, 0xe1ed, 0xde9c, 0xe1fb, 0xde9c, 0xe1fb, 0xddb9, 0xe0f6, 0xddb9, 0xe0f6, +0xde49, 0xe163, 0xde49, 0xe163, 0xde49, 0xe163, 0xdf51, 0xe247, 0xdf51, 0xe247, 0xdf96, +0xe265, 0xdf96, 0xe265, 0xe065, 0xe30a, 0xe065, 0xe30a, 0xe163, 0xe3dd, 0xe163, 0xe3dd, +0xe215, 0xe462, 0xe215, 0xe462, 0xe31f, 0xe53c, 0xe31f, 0xe53c, 0xe31f, 0xe53c, 0xe416, +0xe601, 0xe416, 0xe601, 0xe5e7, 0xe79e, 0xe5e7, 0xe79e, 0xe766, 0xe8e8, 0xe766, 0xe8e8, +0xe8ac, 0xe9f6, 0xe8ac, 0xe9f6, 0xebb3, 0xecc5, 0xebb3, 0xecc5, 0xede6, 0xeebf, 0xede6, +0xeebf, 0xede6, 0xeebf, 0xeec5, 0xef64, 0xeec5, 0xef64, 0xef78, 0xefde, 0xef78, 0xefde, +0xf182, 0xf1b0, 0xf182, 0xf1b0, 0xf38e, 0xf385, 0xf38e, 0xf385, 0xf4f2, 0xf4b4, 0xf4f2, +0xf4b4, 0xf4f2, 0xf4b4, 0xf6a8, 0xf638, 0xf6a8, 0xf638, 0xf7ac, 0xf70d, 0xf7ac, 0xf70d, +0xfa4c, 0xf981, 0xfa4c, 0xf981, 0xfc74, 0xfb81, 0xfc74, 0xfb81, 0xfdef, 0xfcd9, 0xfdef, +0xfcd9, 0x41, 0xff0b, 0x41, 0xff0b, 0x41, 0xff0b, 0xf6, 0xffa5, 0xf6, 0xffa5, +0x225, 0xbf, 0x225, 0xbf, 0x36b, 0x1f2, 0x36b, 0x1f2, 0x4b9, 0x333, 0x4b9, +0x333, 0x693, 0x504, 0x693, 0x504, 0x701, 0x56d, 0x701, 0x56d, 0x701, 0x56d, +0x867, 0x6d1, 0x867, 0x6d1, 0x9c9, 0x834, 0x9c9, 0x834, 0xa30, 0x89f, 0xa30, +0x89f, 0xb25, 0x999, 0xb25, 0x999, 0xc4c, 0xac6, 0xc4c, 0xac6, 0xc4c, 0xac6, +0xd9b, 0xc1c, 0xd9b, 0xc1c, 0xd4f, 0xbd7, 0xd4f, 0xbd7, 0xeac, 0xd39, 0xeac, +0xd39, 0x1115, 0xfa8, 0x1115, 0xfa8, 0x11fe, 0x1094, 0x11fe, 0x1094, 0x13e2, 0x127a, +0x13e2, 0x127a, 0x13e2, 0x127a, 0x1449, 0x12df, 0x1449, 0x12df, 0x1401, 0x1294, 0x1401, +0x1294, 0x1365, 0x11f2, 0x1365, 0x11f2, 0x13ae, 0x1233, 0x13ae, 0x1233, 0x1525, 0x139f, +0x1525, 0x139f, 0x148c, 0x12fa, 0x148c, 0x12fa, 0x148c, 0x12fa, 0x15b1, 0x1410, 0x15b1, +0x1410, 0x17a1, 0x15f1, 0x17a1, 0x15f1, 0x177d, 0x15bb, 0x177d, 0x15bb, 0x18b8, 0x16e6, +0x18b8, 0x16e6, 0x1bd0, 0x19ed, 0x1bd0, 0x19ed, 0x1bd0, 0x19ed, 0x1cc1, 0x1ace, 0x1cc1, +0x1ace, 0x1c11, 0x1a0f, 0x1c11, 0x1a0f, 0x1bab, 0x199c, 0x1bab, 0x199c, 0x1ab1, 0x1897, +0x1ab1, 0x1897, 0x19ce, 0x17ab, 0x19ce, 0x17ab, 0x192e, 0x1705, 0x192e, 0x1705, 0x192e, +0x1705, 0x1820, 0x15f4, 0x1820, 0x15f4, 0x15de, 0x13b2, 0x15de, 0x13b2, 0x1431, 0x1208, +0x1431, 0x1208, 0x1433, 0x1211, 0x1433, 0x1211, 0x151d, 0x1305, 0x151d, 0x1305, 0x14e0, +0x12d4, 0x14e0, 0x12d4, 0x14e0, 0x12d4, 0x12d6, 0x10d8, 0x12d6, 0x10d8, 0x11bd, 0xfcf, +0x11bd, 0xfcf, 0x10dd, 0xf01, 0x10dd, 0xf01, 0x1060, 0xe96, 0x1060, 0xe96, 0x100a, +0xe53, 0x100a, 0xe53, 0x100a, 0xe53, 0xe34, 0xc90, 0xe34, 0xc90, 0xdce, 0xc3c, +0xdce, 0xc3c, 0xec4, 0xd44, 0xec4, 0xd44, 0xd8e, 0xc1d, 0xd8e, 0xc1d, 0xc5c, +0xafa, 0xc5c, 0xafa, 0xba1, 0xa4b, 0xba1, 0xa4b, 0xba1, 0xa4b, 0xa80, 0x933, +0xa80, 0x933, 0xaef, 0x9aa, 0xaef, 0x9aa, 0xb74, 0xa35, 0xb74, 0xa35, 0xa79, +0x93d, 0xa79, 0x93d, 0x854, 0x71a, 0x854, 0x71a, 0x844, 0x709, 0x844, 0x709, +0x844, 0x709, 0x8ea, 0x7ad, 0x8ea, 0x7ad, 0x830, 0x6ef, 0x830, 0x6ef, 0x5bb, +0x476, 0x5bb, 0x476, 0x341, 0x1f9, 0x341, 0x1f9, 0x506, 0x3bb, 0x506, 0x3bb, +0x506, 0x3bb, 0x522, 0x3d3, 0x522, 0x3d3, 0x4e7, 0x395, 0x4e7, 0x395, 0x5e3, +0x491, 0x5e3, 0x491, 0x539, 0x3e7, 0x539, 0x3e7, 0x5c7, 0x477, 0x5c7, 0x477, +0x4e6, 0x39b, 0x4e6, 0x39b, 0x4e6, 0x39b, 0x38c, 0x248, 0x38c, 0x248, 0x1e6, +0xab, 0x1e6, 0xab, 0xff28, 0xfdf8, 0xff28, 0xfdf8, 0xfe4f, 0xfd2c, 0xfe4f, 0xfd2c, +0xfed7, 0xfdc3, 0xfed7, 0xfdc3, 0xfeae, 0xfdab, 0xfeae, 0xfdab, 0xfeae, 0xfdab, 0xfd1e, +0xfc2e, 0xfd1e, 0xfc2e, 0xfb4a, 0xfa6d, 0xfb4a, 0xfa6d, 0xf956, 0xf88d, 0xf956, 0xf88d, +0xf787, 0xf6d3, 0xf787, 0xf6d3, 0xf665, 0xf5c5, 0xf665, 0xf5c5, 0xf665, 0xf5c5, 0xf517, +0xf48c, 0xf517, 0xf48c, 0xf4a1, 0xf429, 0xf4a1, 0xf429, 0xf4f3, 0xf48f, 0xf4f3, 0xf48f, +0xf3c8, 0xf375, 0xf3c8, 0xf375, 0xf46f, 0xf42d, 0xf46f, 0xf42d, 0xf4ba, 0xf487, 0xf4ba, +0xf487, 0xf4ba, 0xf487, 0xf395, 0xf36f, 0xf395, 0xf36f, 0xf5b8, 0xf59e, 0xf5b8, 0xf59e, +0xf67a, 0xf66a, 0xf67a, 0xf66a, 0xf603, 0xf5fc, 0xf603, 0xf5fc, 0xf640, 0xf63f, 0xf640, +0xf63f, 0xf640, 0xf63f, 0xf5fd, 0xf602, 0xf5fd, 0xf602, 0xf562, 0xf56a, 0xf562, 0xf56a, +0xf48c, 0xf496, 0xf48c, 0xf496, 0xf486, 0xf492, 0xf486, 0xf492, 0xf516, 0xf521, 0xf516, +0xf521, 0xf5c5, 0xf5ce, 0xf5c5, 0xf5ce, 0xf5c5, 0xf5ce, 0xf63f, 0xf645, 0xf63f, 0xf645, +0xf838, 0xf83b, 0xf838, 0xf83b, 0xf8ff, 0xf8fe, 0xf8ff, 0xf8fe, 0xf8db, 0xf8d4, 0xf8db, +0xf8d4, 0xfa23, 0xfa16, 0xfa23, 0xfa16, 0xfb4c, 0xfb37, 0xfb4c, 0xfb37, 0xfb4c, 0xfb37, +0xfce1, 0xfcc4, 0xfce1, 0xfcc4, 0xfe49, 0xfe23, 0xfe49, 0xfe23, 0xff81, 0xff51, 0xff81, +0xff51, 0xff82, 0xff47, 0xff82, 0xff47, 0xe5, 0x9f, 0xe5, 0x9f, 0xe5, 0x9f, +0x285, 0x232, 0x285, 0x232, 0x219, 0x1b9, 0x219, 0x1b9, 0x309, 0x29b, 0x309, +0x29b, 0x33b, 0x2bf, 0x33b, 0x2bf, 0x394, 0x309, 0x394, 0x309, 0x49c, 0x402, +0x49c, 0x402, 0x49c, 0x402, 0x5ad, 0x503, 0x5ad, 0x503, 0x7d6, 0x71d, 0x7d6, +0x71d, 0x98a, 0x8c1, 0x98a, 0x8c1, 0xb56, 0xa7e, 0xb56, 0xa7e, 0xc3c, 0xb56, +0xc3c, 0xb56, 0xc0f, 0xb1b, 0xc0f, 0xb1b, 0xc0f, 0xb1b, 0xd03, 0xc03, 0xd03, +0xc03, 0xd02, 0xbf7, 0xd02, 0xbf7, 0xc0d, 0xaf8, 0xc0d, 0xaf8, 0xc5b, 0xb3d, +0xc5b, 0xb3d, 0xde5, 0xcc0, 0xde5, 0xcc0, 0xde5, 0xcc0, 0x1015, 0xeec, 0x1015, +0xeec, 0x111a, 0xfec, 0x111a, 0xfec, 0x123b, 0x110a, 0x123b, 0x110a, 0x1308, 0x11d6, +0x1308, 0x11d6, 0x1348, 0x1216, 0x1348, 0x1216, 0x133f, 0x120e, 0x133f, 0x120e, 0x133f, +0x120e, 0x126e, 0x113f, 0x126e, 0x113f, 0x135e, 0x1230, 0x135e, 0x1230, 0x12e5, 0x11b9, +0x12e5, 0x11b9, 0x1355, 0x122c, 0x1355, 0x122c, 0x152b, 0x1404, 0x152b, 0x1404, 0x144f, +0x132a, 0x144f, 0x132a, 0x144f, 0x132a, 0x13df, 0x12bc, 0x13df, 0x12bc, 0x1356, 0x1234, +0x1356, 0x1234, 0x13ec, 0x12ca, 0x13ec, 0x12ca, 0x1465, 0x1342, 0x1465, 0x1342, 0x12f3, +0x11d0, 0x12f3, 0x11d0, 0x12f3, 0x11d0, 0x123c, 0x1117, 0x123c, 0x1117, 0x1170, 0x1049, +0x1170, 0x1049, 0x10bd, 0xf94, 0x10bd, 0xf94, 0xff7, 0xecb, 0xff7, 0xecb, 0xf78, +0xe49, 0xf78, 0xe49, 0xeed, 0xdbc, 0xeed, 0xdbc, 0xeed, 0xdbc, 0xe09, 0xcd7, +0xe09, 0xcd7, 0xe15, 0xce2, 0xe15, 0xce2, 0xc7b, 0xb48, 0xc7b, 0xb48, 0xa96, +0x965, 0xa96, 0x965, 0x9c0, 0x892, 0x9c0, 0x892, 0x7e1, 0x6b8, 0x7e1, 0x6b8, +0x7e1, 0x6b8, 0x77f, 0x65d, 0x77f, 0x65d, 0x684, 0x569, 0x684, 0x569, 0x535, +0x424, 0x535, 0x424, 0x6a0, 0x59a, 0x6a0, 0x59a, 0x6fc, 0x602, 0x6fc, 0x602, +0x6fc, 0x602, 0x664, 0x577, 0x664, 0x577, 0x53a, 0x45b, 0x53a, 0x45b, 0x4a2, +0x3d1, 0x4a2, 0x3d1, 0x558, 0x495, 0x558, 0x495, 0x5ae, 0x4fa, 0x5ae, 0x4fa, +0x7a6, 0x6fe, 0x7a6, 0x6fe, 0x7a6, 0x6fe, 0x934, 0x898, 0x934, 0x898, 0x8b1, +0x81f, 0x8b1, 0x81f, 0x7fe, 0x774, 0x7fe, 0x774, 0x7c1, 0x73c, 0x7c1, 0x73c, +0x739, 0x6b8, 0x739, 0x6b8, 0x609, 0x587, 0x609, 0x587, 0x609, 0x587, 0x630, +0x5ac, 0x630, 0x5ac, 0x634, 0x5aa, 0x634, 0x5aa, 0x522, 0x48f, 0x522, 0x48f, +0x589, 0x4eb, 0x589, 0x4eb, 0x675, 0x5c8, 0x675, 0x5c8, 0x675, 0x5c8, 0x739, +0x67b, 0x739, 0x67b, 0x839, 0x769, 0x839, 0x769, 0x889, 0x7a4, 0x889, 0x7a4, +0x94e, 0x852, 0x94e, 0x852, 0xa45, 0x932, 0xa45, 0x932, 0xaa5, 0x97b, 0xaa5, +0x97b, 0xaa5, 0x97b, 0xba8, 0xa66, 0xba8, 0xa66, 0xc00, 0xaa7, 0xc00, 0xaa7, +0xbe3, 0xa73, 0xbe3, 0xa73, 0xcea, 0xb65, 0xcea, 0xb65, 0xd74, 0xbdc, 0xd74, +0xbdc, 0xd75, 0xbcc, 0xd75, 0xbcc, 0xd75, 0xbcc, 0xd32, 0xb79, 0xd32, 0xb79, +0xccb, 0xb05, 0xccb, 0xb05, 0xd28, 0xb57, 0xd28, 0xb57, 0xd0d, 0xb34, 0xd0d, +0xb34, 0xcca, 0xaed, 0xcca, 0xaed, 0xcca, 0xaed, 0xce7, 0xb07, 0xce7, 0xb07, +0xd41, 0xb62, 0xd41, 0xb62, 0xd9a, 0xbbe, 0xd9a, 0xbbe, 0xde5, 0xc0e, 0xde5, +0xc0e, 0xdf5, 0xc26, 0xdf5, 0xc26, 0xd17, 0xb52, 0xd17, 0xb52, 0xd17, 0xb52, +0xdf2, 0xc39, 0xdf2, 0xc39, 0xeab, 0xcff, 0xeab, 0xcff, 0xe5a, 0xcbe, 0xe5a, +0xcbe, 0xf0a, 0xd7f, 0xf0a, 0xd7f, 0xdcf, 0xc57, 0xdcf, 0xc57, 0xd5b, 0xbf7, +0xd5b, 0xbf7, 0xd5b, 0xbf7, 0xe70, 0xd21, 0xe70, 0xd21, 0xe0e, 0xcd6, 0xe0e, +0xcd6, 0xd36, 0xc15, 0xd36, 0xc15, 0xbc4, 0xabc, 0xbc4, 0xabc, 0xb27, 0xa38, +0xb27, 0xa38, 0xb27, 0xa38, 0xb27, 0xa52, 0xb27, 0xa52, 0xa10, 0x956, 0xa10, +0x956, 0x8f0, 0x853, 0x8f0, 0x853, 0x832, 0x7b2, 0x832, 0x7b2, 0x7c6, 0x764, +0x7c6, 0x764, 0x7c2, 0x780, 0x7c2, 0x780, 0x7c2, 0x780, 0x73d, 0x71b, 0x73d, +0x71b, 0x4cd, 0x4cd, 0x4cd, 0x4cd, 0x2f4, 0x316, 0x2f4, 0x316, 0x233, 0x279, +0x233, 0x279, 0xfff5, 0x60, 0xfff5, 0x60, 0xfe94, 0xff24, 0xfe94, 0xff24, 0xfe94, +0xff24, 0xfc9e, 0xfd54, 0xfc9e, 0xfd54, 0xf9be, 0xfa9d, 0xf9be, 0xfa9d, 0xf9a2, 0xfaaa, +0xf9a2, 0xfaaa, 0xf9bd, 0xfaef, 0xf9bd, 0xfaef, 0xf8a4, 0xfa01, 0xf8a4, 0xfa01, 0xf8a4, +0xfa01, 0xf738, 0xf8c2, 0xf738, 0xf8c2, 0xf549, 0xf700, 0xf549, 0xf700, 0xf368, 0xf54e, +0xf368, 0xf54e, 0xf214, 0xf429, 0xf214, 0xf429, 0xf099, 0xf2df, 0xf099, 0xf2df, 0xeedf, +0xf157, 0xeedf, 0xf157, 0xeedf, 0xf157, 0xed55, 0xf000, 0xed55, 0xf000, 0xec82, 0xef60, +0xec82, 0xef60, 0xec70, 0xef81, 0xec70, 0xef81, 0xeb5c, 0xeea1, 0xeb5c, 0xeea1, 0xeb47, +0xeec0, 0xeb47, 0xeec0, 0xeb47, 0xeec0, 0xec00, 0xefac, 0xec00, 0xefac, 0xea1b, 0xedf9, +0xea1b, 0xedf9, 0xe760, 0xeb70, 0xe760, 0xeb70, 0xe5fe, 0xea3f, 0xe5fe, 0xea3f, 0xe480, +0xe8f0, 0xe480, 0xe8f0, 0xe224, 0xe6c0, 0xe224, 0xe6c0, 0xe224, 0xe6c0, 0xe1e8, 0xe6ae, +0xe1e8, 0xe6ae, 0xe159, 0xe647, 0xe159, 0xe647, 0xdead, 0xe3be, 0xdead, 0xe3be, 0xde0b, +0xe33c, 0xde0b, 0xe33c, 0xdd2d, 0xe279, 0xdd2d, 0xe279, 0xdbfd, 0xe160, 0xdbfd, 0xe160, +0xdbfd, 0xe160, 0xdc30, 0xe1a6, 0xdc30, 0xe1a6, 0xdbea, 0xe16d, 0xdbea, 0xe16d, 0xdc81, +0xe20d, 0xdc81, 0xe20d, 0xdcb5, 0xe244, 0xdcb5, 0xe244, 0xdd07, 0xe296, 0xdd07, 0xe296, +0xdd07, 0xe296, 0xde57, 0xe3e0, 0xde57, 0xe3e0, 0xde94, 0xe413, 0xde94, 0xe413, 0xdf20, +0xe491, 0xdf20, 0xe491, 0xde78, 0xe3d7, 0xde78, 0xe3d7, 0xdd1f, 0xe26b, 0xdd1f, 0xe26b, +0xdc0a, 0xe13f, 0xdc0a, 0xe13f, 0xdc0a, 0xe13f, 0xdbb1, 0xe0cc, 0xdbb1, 0xe0cc, 0xdcbb, +0xe1bc, 0xdcbb, 0xe1bc, 0xdd0b, 0xe1f1, 0xdd0b, 0xe1f1, 0xdf56, 0xe420, 0xdf56, 0xe420, +0xe079, 0xe528, 0xe079, 0xe528, 0xe061, 0xe4f5, 0xe061, 0xe4f5, 0xe061, 0xe4f5, 0xe21f, +0xe699, 0xe21f, 0xe699, 0xe1a8, 0xe609, 0xe1a8, 0xe609, 0xe0ac, 0xe4f5, 0xe0ac, 0xe4f5, +0xdf59, 0xe38c, 0xdf59, 0xe38c, 0xde91, 0xe2b0, 0xde91, 0xe2b0, 0xde91, 0xe2b0, 0xdf05, +0xe310, 0xdf05, 0xe310, 0xde79, 0xe271, 0xde79, 0xe271, 0xdf40, 0xe325, 0xdf40, 0xe325, +0xe011, 0xe3e4, 0xe011, 0xe3e4, 0xdf3b, 0xe2fc, 0xdf3b, 0xe2fc, 0xde91, 0xe23f, 0xde91, +0xe23f, 0xde91, 0xe23f, 0xdee8, 0xe282, 0xdee8, 0xe282, 0xdfde, 0xe361, 0xdfde, 0xe361, +0xe01e, 0xe388, 0xe01e, 0xe388, 0xe0e5, 0xe434, 0xe0e5, 0xe434, 0xe2af, 0xe5df, 0xe2af, +0xe5df, 0xe3d2, 0xe6e1, 0xe3d2, 0xe6e1, 0xe3d2, 0xe6e1, 0xe539, 0xe822, 0xe539, 0xe822, +0xe6ac, 0xe96c, 0xe6ac, 0xe96c, 0xe861, 0xeaf5, 0xe861, 0xeaf5, 0xe977, 0xebdb, 0xe977, +0xebdb, 0xeab6, 0xece8, 0xeab6, 0xece8, 0xeab6, 0xece8, 0xecf7, 0xeef4, 0xecf7, 0xeef4, +0xed33, 0xeef9, 0xed33, 0xeef9, 0xeeb8, 0xf046, 0xeeb8, 0xf046, 0xef62, 0xf0b8, 0xef62, +0xf0b8, 0xee91, 0xefae, 0xee91, 0xefae, 0xf0b8, 0xf19e, 0xf0b8, 0xf19e, 0xf0b8, 0xf19e, +0xf2c7, 0xf377, 0xf2c7, 0xf377, 0xf496, 0xf512, 0xf496, 0xf512, 0xf623, 0xf66e, 0xf623, +0xf66e, 0xf78e, 0xf7ac, 0xf78e, 0xf7ac, 0xf879, 0xf86e, 0xf879, 0xf86e, 0xf964, 0xf934, +0xf964, 0xf934, 0xf964, 0xf934, 0xfb80, 0xfb2f, 0xfb80, 0xfb2f, 0xfc12, 0xfba6, 0xfc12, +0xfba6, 0xfcee, 0xfc6b, 0xfcee, 0xfc6b, 0xff7a, 0xfee4, 0xff7a, 0xfee4, 0x15b, 0xb6, +0x15b, 0xb6, 0x15b, 0xb6, 0x245, 0x195, 0x245, 0x195, 0x3d0, 0x318, 0x3d0, +0x318, 0x556, 0x498, 0x556, 0x498, 0x5cd, 0x50a, 0x5cd, 0x50a, 0x684, 0x5be, +0x684, 0x5be, 0x848, 0x77e, 0x848, 0x77e, 0x848, 0x77e, 0x958, 0x88a, 0x958, +0x88a, 0x970, 0x89c, 0x970, 0x89c, 0xb54, 0xa79, 0xb54, 0xa79, 0xc91, 0xbad, +0xc91, 0xbad, 0xbb9, 0xac9, 0xbb9, 0xac9, 0xcd8, 0xbd8, 0xcd8, 0xbd8, 0xcd8, +0xbd8, 0xf16, 0xe04, 0xf16, 0xe04, 0xf51, 0xe29, 0xf51, 0xe29, 0xefd, 0xdbd, +0xefd, 0xdbd, 0xf21, 0xdc6, 0xf21, 0xdc6, 0xf4c, 0xdd4, 0xf4c, 0xdd4, 0xf4c, +0xdd4, 0xfb6, 0xe1f, 0xfb6, 0xe1f, 0x11bb, 0x1005, 0x11bb, 0x1005, 0x1436, 0x1260, +0x1436, 0x1260, 0x144e, 0x1258, 0x144e, 0x1258, 0x15c9, 0x13b5, 0x15c9, 0x13b5, 0x1746, +0x1515, 0x1746, 0x1515, 0x1746, 0x1515, 0x16fc, 0x14b0, 0x16fc, 0x14b0, 0x16c4, 0x1461, +0x16c4, 0x1461, 0x155f, 0x12e8, 0x155f, 0x12e8, 0x1522, 0x129b, 0x1522, 0x129b, 0x151e, +0x128b, 0x151e, 0x128b, 0x1495, 0x11fb, 0x1495, 0x11fb, 0x1495, 0x11fb, 0x12f7, 0x1058, +0x12f7, 0x1058, 0x1259, 0xfbb, 0x1259, 0xfbb, 0x13d6, 0x113d, 0x13d6, 0x113d, 0x12ff, +0x106d, 0x12ff, 0x106d, 0x1278, 0xff1, 0x1278, 0xff1, 0x1278, 0xff1, 0x116c, 0xef2, +0x116c, 0xef2, 0x1016, 0xdab, 0x1016, 0xdab, 0x1020, 0xdc5, 0x1020, 0xdc5, 0xf4d, +0xd03, 0xf4d, 0xd03, 0xf40, 0xd07, 0xf40, 0xd07, 0xe3b, 0xc11, 0xe3b, 0xc11, +0xe3b, 0xc11, 0xc07, 0x9ec, 0xc07, 0x9ec, 0xc1f, 0xa12, 0xc1f, 0xa12, 0xd40, +0xb3f, 0xd40, 0xb3f, 0xc96, 0xa9f, 0xc96, 0xa9f, 0xb5a, 0x96b, 0xb5a, 0x96b, +0xaef, 0x905, 0xaef, 0x905, 0xaef, 0x905, 0xacb, 0x8e6, 0xacb, 0x8e6, 0xb3f, +0x95c, 0xb3f, 0x95c, 0xaf8, 0x917, 0xaf8, 0x917, 0xa22, 0x841, 0xa22, 0x841, +0xab0, 0x8d0, 0xab0, 0x8d0, 0xab0, 0x8d0, 0xb0a, 0x92b, 0xb0a, 0x92b, 0xa60, +0x883, 0xa60, 0x883, 0x8de, 0x704, 0x8de, 0x704, 0x703, 0x52d, 0x703, 0x52d, +0x6f6, 0x528, 0x6f6, 0x528, 0x761, 0x59c, 0x761, 0x59c, 0x761, 0x59c, 0x7e5, +0x62e, 0x7e5, 0x62e, 0x7df, 0x637, 0x7df, 0x637, 0x5eb, 0x456, 0x5eb, 0x456, +0x558, 0x3d9, 0x558, 0x3d9, 0x672, 0x50c, 0x672, 0x50c, 0x6ba, 0x570, 0x6ba, +0x570, 0x6ba, 0x570, 0x561, 0x434, 0x561, 0x434, 0x3b2, 0x2a4, 0x3b2, 0x2a4, +0x331, 0x243, 0x331, 0x243, 0x2c9, 0x1fb, 0x2c9, 0x1fb, 0x1a7, 0xfa, 0x1a7, +0xfa, 0x1a7, 0xfa, 0x11c, 0x8f, 0x11c, 0x8f, 0xffe4, 0xff75, 0xffe4, 0xff75, +0xfd2f, 0xfcdc, 0xfd2f, 0xfcdc, 0xfc4b, 0xfc13, 0xfc4b, 0xfc13, 0xfb8f, 0xfb6d, 0xfb8f, +0xfb6d, 0xf971, 0xf963, 0xf971, 0xf963, 0xf971, 0xf963, 0xf847, 0xf849, 0xf847, 0xf849, +0xf815, 0xf824, 0xf815, 0xf824, 0xf764, 0xf77c, 0xf764, 0xf77c, 0xf726, 0xf744, 0xf726, +0xf744, 0xf965, 0xf985, 0xf965, 0xf985, 0xf965, 0xf985, 0xfa85, 0xfaa4, 0xfa85, 0xfaa4, +0xfaa0, 0xfabc, 0xfaa0, 0xfabc, 0xfb7f, 0xfb94, 0xfb7f, 0xfb94, 0xfa4e, 0xfa5c, 0xfa4e, +0xfa5c, 0xf92a, 0xf92e, 0xf92a, 0xf92e, 0xf88d, 0xf886, 0xf88d, 0xf886, 0xf88d, 0xf886, +0xf79c, 0xf78a, 0xf79c, 0xf78a, 0xf795, 0xf778, 0xf795, 0xf778, 0xf81d, 0xf7f5, 0xf81d, +0xf7f5, 0xf9a9, 0xf976, 0xf9a9, 0xf976, 0xfa1a, 0xf9de, 0xfa1a, 0xf9de, 0xf9b0, 0xf96b, +0xf9b0, 0xf96b, 0xf9b0, 0xf96b, 0xfabf, 0xfa71, 0xfabf, 0xfa71, 0xfc05, 0xfbb0, 0xfc05, +0xfbb0, 0xfd56, 0xfcfb, 0xfd56, 0xfcfb, 0xfeaf, 0xfe4e, 0xfeaf, 0xfe4e, 0x24, 0xffbe, +0x24, 0xffbe, 0x24, 0xffbe, 0xf2, 0x87, 0xf2, 0x87, 0x26d, 0x1fc, 0x26d, +0x1fc, 0x4f6, 0x47f, 0x4f6, 0x47f, 0x480, 0x403, 0x480, 0x403, 0x38a, 0x304, +0x38a, 0x304, 0x428, 0x399, 0x428, 0x399, 0x428, 0x399, 0x44f, 0x3b5, 0x44f, +0x3b5, 0x4b1, 0x40a, 0x4b1, 0x40a, 0x521, 0x46b, 0x521, 0x46b, 0x57d, 0x4b6, +0x57d, 0x4b6, 0x60c, 0x533, 0x60c, 0x533, 0x70d, 0x61f, 0x70d, 0x61f, 0x70d, +0x61f, 0x902, 0x7ff, 0x902, 0x7ff, 0x99f, 0x885, 0x99f, 0x885, 0x929, 0x7f8, +0x929, 0x7f8, 0xa4c, 0x903, 0xa4c, 0x903, 0xb69, 0xa08, 0xb69, 0xa08, 0xb69, +0xa08, 0xbaf, 0xa37, 0xbaf, 0xa37, 0xbf3, 0xa64, 0xbf3, 0xa64, 0xcc3, 0xb1e, +0xcc3, 0xb1e, 0xdf1, 0xc3a, 0xdf1, 0xc3a, 0xec6, 0xcfd, 0xec6, 0xcfd, 0xf01, +0xd2a, 0xf01, 0xd2a, 0xf01, 0xd2a, 0xf92, 0xdaf, 0xf92, 0xdaf, 0x1149, 0xf5c, +0x1149, 0xf5c, 0x122a, 0x1038, 0x122a, 0x1038, 0x1343, 0x114d, 0x1343, 0x114d, 0x134b, +0x1154, 0x134b, 0x1154, 0x1232, 0x103d, 0x1232, 0x103d, 0x1232, 0x103d, 0x1304, 0x1113, +0x1304, 0x1113, 0x12b9, 0x10cf, 0x12b9, 0x10cf, 0x11e3, 0x1001, 0x11e3, 0x1001, 0x11ec, +0x1014, 0x11ec, 0x1014, 0x121e, 0x1050, 0x121e, 0x1050, 0x121e, 0x1050, 0x12e7, 0x1124, +0x12e7, 0x1124, 0x13f6, 0x123e, 0x13f6, 0x123e, 0x13c0, 0x1213, 0x13c0, 0x1213, 0x11e0, +0x103e, 0x11e0, 0x103e, 0x1066, 0xecd, 0x1066, 0xecd, 0xf7b, 0xdeb, 0xf7b, 0xdeb, +0xf7b, 0xdeb, 0xf9d, 0xe14, 0xf9d, 0xe14, 0x1005, 0xe81, 0x1005, 0xe81, 0xf93, +0xe13, 0xf93, 0xe13, 0xea7, 0xd2a, 0xea7, 0xd2a, 0xdce, 0xc52, 0xdce, 0xc52, +0xd45, 0xbc8, 0xd45, 0xbc8, 0xd45, 0xbc8, 0xbaa, 0xa2b, 0xbaa, 0xa2b, 0x974, +0x7f2, 0x974, 0x7f2, 0x828, 0x6a1, 0x828, 0x6a1, 0x7d6, 0x64b, 0x7d6, 0x64b, +0x71e, 0x58d, 0x71e, 0x58d, 0x71e, 0x58d, 0x657, 0x4bf, 0x657, 0x4bf, 0x6f8, +0x559, 0x6f8, 0x559, 0x759, 0x5b3, 0x759, 0x5b3, 0x6a2, 0x4f7, 0x6a2, 0x4f7, +0x722, 0x56f, 0x722, 0x56f, 0x756, 0x59d, 0x756, 0x59d, 0x756, 0x59d, 0x67e, +0x4be, 0x67e, 0x4be, 0x6d4, 0x50e, 0x6d4, 0x50e, 0x79b, 0x5ce, 0x79b, 0x5ce, +0x896, 0x6c3, 0x896, 0x6c3, 0x882, 0x6a8, 0x882, 0x6a8, 0x88d, 0x6ad, 0x88d, +0x6ad, 0x88d, 0x6ad, 0x8e5, 0x6fe, 0x8e5, 0x6fe, 0x90c, 0x71d, 0x90c, 0x71d, +0x992, 0x79b, 0x992, 0x79b, 0x876, 0x677, 0x876, 0x677, 0x80d, 0x604, 0x80d, +0x604, 0x80d, 0x604, 0x84b, 0x639, 0x84b, 0x639, 0x95f, 0x743, 0x95f, 0x743, +0xa8b, 0x865, 0xa8b, 0x865, 0xb56, 0x924, 0xb56, 0x924, 0xc84, 0xa46, 0xc84, +0xa46, 0xbf2, 0x9a8, 0xbf2, 0x9a8, 0xbf2, 0x9a8, 0xcb1, 0xa5a, 0xcb1, 0xa5a, +0xcc4, 0xa60, 0xcc4, 0xa60, 0xbd2, 0x961, 0xbd2, 0x961, 0xc56, 0x9d9, 0xc56, +0x9d9, 0xc53, 0x9ca, 0xc53, 0x9ca, 0xcbd, 0xa28, 0xcbd, 0xa28, 0xcbd, 0xa28, +0xc85, 0x9e5, 0xc85, 0x9e5, 0xba7, 0x8fd, 0xba7, 0x8fd, 0xc5c, 0x9a9, 0xc5c, +0x9a9, 0xd81, 0xac6, 0xd81, 0xac6, 0xdc8, 0xb07, 0xdc8, 0xb07, 0xdc8, 0xb07, +0xe12, 0xb4b, 0xe12, 0xb4b, 0xdd7, 0xb0c, 0xdd7, 0xb0c, 0xd94, 0xac8, 0xd94, +0xac8, 0xe56, 0xb89, 0xe56, 0xb89, 0xebd, 0xbf1, 0xebd, 0xbf1, 0xe49, 0xb81, +0xe49, 0xb81, 0xe49, 0xb81, 0xe02, 0xb3f, 0xe02, 0xb3f, 0xe1d, 0xb61, 0xe1d, +0xb61, 0xee5, 0xc33, 0xee5, 0xc33, 0x1056, 0xdb1, 0x1056, 0xdb1, 0xfc9, 0xd31, +0xfc9, 0xd31, 0xf3a, 0xcb3, 0xf3a, 0xcb3, 0xf3a, 0xcb3, 0xf14, 0xca2, 0xf14, +0xca2, 0xe0d, 0xbb1, 0xe0d, 0xbb1, 0xd99, 0xb57, 0xd99, 0xb57, 0xcd7, 0xab2, +0xcd7, 0xab2, 0xd34, 0xb2e, 0xd34, 0xb2e, 0xd34, 0xb2e, 0xe41, 0xc5e, 0xe41, +0xc5e, 0xe7c, 0xcbf, 0xe7c, 0xcbf, 0xd7f, 0xbeb, 0xd7f, 0xbeb, 0xc6a, 0xb02, +0xc6a, 0xb02, 0xb9c, 0xa63, 0xb9c, 0xa63, 0x9eb, 0x8e5, 0x9eb, 0x8e5, 0x9eb, +0x8e5, 0x8ae, 0x7dd, 0x8ae, 0x7dd, 0x801, 0x767, 0x801, 0x767, 0x7b2, 0x751, +0x7b2, 0x751, 0x689, 0x664, 0x689, 0x664, 0x55d, 0x573, 0x55d, 0x573, 0x446, +0x49b, 0x446, 0x49b, 0x446, 0x49b, 0x2e2, 0x374, 0x2e2, 0x374, 0x268, 0x339, +0x268, 0x339, 0x108, 0x217, 0x108, 0x217, 0xff0a, 0x57, 0xff0a, 0x57, 0xfd3f, +0xfec9, 0xfd3f, 0xfec9, 0xfd3f, 0xfec9, 0xfb37, 0xfcfc, 0xfb37, 0xfcfc, 0xf93b, 0xfb3a, +0xf93b, 0xfb3a, 0xf867, 0xfa9f, 0xf867, 0xfa9f, 0xf7c0, 0xfa2f, 0xf7c0, 0xfa2f, 0xf615, +0xf8b9, 0xf615, 0xf8b9, 0xf50d, 0xf7e4, 0xf50d, 0xf7e4, 0xf50d, 0xf7e4, 0xf4c3, 0xf7ca, +0xf4c3, 0xf7ca, 0xf309, 0xf640, 0xf309, 0xf640, 0xefd0, 0xf334, 0xefd0, 0xf334, 0xedd7, +0xf167, 0xedd7, 0xf167, 0xed17, 0xf0d1, 0xed17, 0xf0d1, 0xed17, 0xf0d1, 0xec43, 0xf026, +0xec43, 0xf026, 0xeb55, 0xef61, 0xeb55, 0xef61, 0xeb23, 0xef57, 0xeb23, 0xef57, 0xea5b, +0xeeb6, 0xea5b, 0xeeb6, 0xe8a1, 0xed22, 0xe8a1, 0xed22, 0xe788, 0xec2f, 0xe788, 0xec2f, +0xe788, 0xec2f, 0xe59e, 0xea6b, 0xe59e, 0xea6b, 0xe335, 0xe827, 0xe335, 0xe827, 0xe22c, +0xe743, 0xe22c, 0xe743, 0xe280, 0xe7ba, 0xe280, 0xe7ba, 0xe0cd, 0xe62b, 0xe0cd, 0xe62b, +0xde64, 0xe3e3, 0xde64, 0xe3e3, 0xde64, 0xe3e3, 0xdd58, 0xe2f8, 0xdd58, 0xe2f8, 0xdbe0, +0xe19d, 0xdbe0, 0xe19d, 0xdbde, 0xe1b6, 0xdbde, 0xe1b6, 0xdb0e, 0xe0fe, 0xdb0e, 0xe0fe, +0xd921, 0xdf26, 0xd921, 0xdf26, 0xd921, 0xdf26, 0xd8d0, 0xdee7, 0xd8d0, 0xdee7, 0xd8d3, +0xdef7, 0xd8d3, 0xdef7, 0xd926, 0xdf52, 0xd926, 0xdf52, 0xd8e4, 0xdf14, 0xd8e4, 0xdf14, +0xd7cb, 0xddfa, 0xd7cb, 0xddfa, 0xd7a7, 0xddd1, 0xd7a7, 0xddd1, 0xd7a7, 0xddd1, 0xd7c1, +0xdde0, 0xd7c1, 0xdde0, 0xd75b, 0xdd6b, 0xd75b, 0xdd6b, 0xd7c1, 0xddbe, 0xd7c1, 0xddbe, +0xd7fc, 0xdde1, 0xd7fc, 0xdde1, 0xd72f, 0xdcf9, 0xd72f, 0xdcf9, 0xd77e, 0xdd29, 0xd77e, +0xdd29, 0xd77e, 0xdd29, 0xd968, 0xdef2, 0xd968, 0xdef2, 0xda9a, 0xe002, 0xda9a, 0xe002, +0xdafd, 0xe040, 0xdafd, 0xe040, 0xdc0e, 0xe12c, 0xdc0e, 0xe12c, 0xddf1, 0xe2e9, 0xddf1, +0xe2e9, 0xddf1, 0xe2e9, 0xdec9, 0xe39c, 0xdec9, 0xe39c, 0xde16, 0xe2c5, 0xde16, 0xe2c5, +0xde40, 0xe2cb, 0xde40, 0xe2cb, 0xde29, 0xe293, 0xde29, 0xe293, 0xde23, 0xe26d, 0xde23, +0xe26d, 0xdef5, 0xe320, 0xdef5, 0xe320, 0xdef5, 0xe320, 0xdf39, 0xe347, 0xdf39, 0xe347, +0xdf94, 0xe387, 0xdf94, 0xe387, 0xe02f, 0xe408, 0xe02f, 0xe408, 0xe0bb, 0xe47b, 0xe0bb, +0xe47b, 0xe080, 0xe427, 0xe080, 0xe427, 0xe069, 0xe3f8, 0xe069, 0xe3f8, 0xe069, 0xe3f8, +0xe068, 0xe3df, 0xe068, 0xe3df, 0xe0b4, 0xe412, 0xe0b4, 0xe412, 0xe19e, 0xe4e1, 0xe19e, +0xe4e1, 0xe286, 0xe5ac, 0xe286, 0xe5ac, 0xe455, 0xe75e, 0xe455, 0xe75e, 0xe455, 0xe75e, +0xe5ac, 0xe893, 0xe5ac, 0xe893, 0xe7d0, 0xea94, 0xe7d0, 0xea94, 0xea59, 0xecf7, 0xea59, +0xecf7, 0xeae1, 0xed56, 0xeae1, 0xed56, 0xebc5, 0xee0f, 0xebc5, 0xee0f, 0xed1e, 0xef39, +0xed1e, 0xef39, 0xed1e, 0xef39, 0xee80, 0xf06b, 0xee80, 0xf06b, 0xf0ca, 0xf283, 0xf0ca, +0xf283, 0xf2a7, 0xf42d, 0xf2a7, 0xf42d, 0xf3a4, 0xf4f6, 0xf3a4, 0xf4f6, 0xf5ad, 0xf6ca, +0xf5ad, 0xf6ca, 0xf88f, 0xf978, 0xf88f, 0xf978, 0xf88f, 0xf978, 0xf902, 0xf9b8, 0xf902, +0xf9b8, 0xf938, 0xf9bc, 0xf938, 0xf9bc, 0xfbfd, 0xfc53, 0xfbfd, 0xfc53, 0xfd49, 0xfd72, +0xfd49, 0xfd72, 0xfdeb, 0xfdea, 0xfdeb, 0xfdea, 0xfdeb, 0xfdea, 0xff7c, 0xff55, 0xff7c, +0xff55, 0x9c, 0x53, 0x9c, 0x53, 0x1c3, 0x15b, 0x1c3, 0x15b, 0x332, 0x2ae, +0x332, 0x2ae, 0x575, 0x4d8, 0x575, 0x4d8, 0x6b2, 0x600, 0x6b2, 0x600, 0x6b2, +0x600, 0x78a, 0x6c5, 0x78a, 0x6c5, 0x9a0, 0x8ca, 0x9a0, 0x8ca, 0xc8b, 0xba6, +0xc8b, 0xba6, 0xe86, 0xd94, 0xe86, 0xd94, 0xf0e, 0xe0e, 0xf0e, 0xe0e, 0x103c, +0xf2f, 0x103c, 0xf2f, 0x103c, 0xf2f, 0xfec, 0xed2, 0xfec, 0xed2, 0xffc, 0xed3, +0xffc, 0xed3, 0x114c, 0x1013, 0x114c, 0x1013, 0x1149, 0xfff, 0x1149, 0xfff, 0x120d, +0x10af, 0x120d, 0x10af, 0x120d, 0x10af, 0x12a3, 0x1130, 0x12a3, 0x1130, 0x1278, 0x10ee, +0x1278, 0x10ee, 0x12f3, 0x1150, 0x12f3, 0x1150, 0x132e, 0x1170, 0x132e, 0x1170, 0x1362, +0x1189, 0x1362, 0x1189, 0x13fa, 0x1205, 0x13fa, 0x1205, 0x13fa, 0x1205, 0x14f8, 0x12e6, +0x14f8, 0x12e6, 0x16b9, 0x148c, 0x16b9, 0x148c, 0x178c, 0x1544, 0x178c, 0x1544, 0x1817, +0x15b6, 0x1817, 0x15b6, 0x18c2, 0x164a, 0x18c2, 0x164a, 0x17eb, 0x155f, 0x17eb, 0x155f, +0x17eb, 0x155f, 0x16e9, 0x144c, 0x16e9, 0x144c, 0x1637, 0x138c, 0x1637, 0x138c, 0x154a, +0x1295, 0x154a, 0x1295, 0x140d, 0x1152, 0x140d, 0x1152, 0x138f, 0x10d2, 0x138f, 0x10d2, +0x138f, 0x10d2, 0x1353, 0x1098, 0x1353, 0x1098, 0x130c, 0x1057, 0x130c, 0x1057, 0x1312, +0x1065, 0x1312, 0x1065, 0x1292, 0xff1, 0x1292, 0xff1, 0x1293, 0x1001, 0x1293, 0x1001, +0x11e9, 0xf68, 0x11e9, 0xf68, 0x11e9, 0xf68, 0x1099, 0xe29, 0x1099, 0xe29, 0x101f, +0xdc2, 0x101f, 0xdc2, 0xfdd, 0xd93, 0xfdd, 0xd93, 0xfb8, 0xd82, 0xfb8, 0xd82, +0xfc2, 0xd9f, 0xfc2, 0xd9f, 0xe6a, 0xc58, 0xe6a, 0xc58, 0xe6a, 0xc58, 0xc69, +0xa69, 0xc69, 0xa69, 0xbc0, 0x9ce, 0xbc0, 0x9ce, 0xa98, 0x8b5, 0xa98, 0x8b5, +0x97e, 0x7a6, 0x97e, 0x7a6, 0x93e, 0x772, 0x93e, 0x772, 0x93e, 0x772, 0x8f3, +0x730, 0x8f3, 0x730, 0x82e, 0x675, 0x82e, 0x675, 0x7f6, 0x646, 0x7f6, 0x646, +0x81c, 0x674, 0x81c, 0x674, 0x66d, 0x4ce, 0x66d, 0x4ce, 0x57e, 0x3e9, 0x57e, +0x3e9, 0x57e, 0x3e9, 0x55e, 0x3d5, 0x55e, 0x3d5, 0x4d5, 0x359, 0x4d5, 0x359, +0x4ef, 0x382, 0x4ef, 0x382, 0x48f, 0x333, 0x48f, 0x333, 0x379, 0x232, 0x379, +0x232, 0x2a4, 0x173, 0x2a4, 0x173, 0x2a4, 0x173, 0x379, 0x262, 0x379, 0x262, +0x501, 0x405, 0x501, 0x405, 0x4b5, 0x3d7, 0x4b5, 0x3d7, 0x3fc, 0x33e, 0x3fc, +0x33e, 0x41e, 0x381, 0x41e, 0x381, 0x41e, 0x381, 0x321, 0x2a6, 0x321, 0x2a6, +0x15b, 0x103, 0x15b, 0x103, 0xd9, 0xa2, 0xd9, 0xa2, 0x11b, 0x106, 0x11b, +0x106, 0xffb4, 0xffbf, 0xffb4, 0xffbf, 0xfed3, 0xfefb, 0xfed3, 0xfefb, 0xfed3, 0xfefb, +0xfedb, 0xff1e, 0xfedb, 0xff1e, 0xfc58, 0xfcb4, 0xfc58, 0xfcb4, 0xf9fc, 0xfa6c, 0xf9fc, +0xfa6c, 0xf853, 0xf8d4, 0xf853, 0xf8d4, 0xf6a3, 0xf731, 0xf6a3, 0xf731, 0xf6a3, 0xf731, +0xf5a3, 0xf63a, 0xf5a3, 0xf63a, 0xf660, 0xf6fc, 0xf660, 0xf6fc, 0xf7c7, 0xf865, 0xf7c7, +0xf865, 0xf7bd, 0xf859, 0xf7bd, 0xf859, 0xf974, 0xfa0c, 0xf974, 0xfa0c, 0xfa12, 0xfaa3, +0xfa12, 0xfaa3, 0xfa12, 0xfaa3, 0xf8b3, 0xf93b, 0xf8b3, 0xf93b, 0xf817, 0xf895, 0xf817, +0xf895, 0xf6d2, 0xf744, 0xf6d2, 0xf744, 0xf701, 0xf768, 0xf701, 0xf768, 0xf78a, 0xf7e5, +0xf78a, 0xf7e5, 0xf64e, 0xf69f, 0xf64e, 0xf69f, 0xf64e, 0xf69f, 0xf586, 0xf5cc, 0xf586, +0xf5cc, 0xf595, 0xf5d3, 0xf595, 0xf5d3, 0xf683, 0xf6b9, 0xf683, 0xf6b9, 0xf7d1, 0xf801, +0xf7d1, 0xf801, 0xf7bc, 0xf7e8, 0xf7bc, 0xf7e8, 0xf7bc, 0xf7e8, 0xf7e2, 0xf809, 0xf7e2, +0xf809, 0xf9b4, 0xf9d9, 0xf9b4, 0xf9d9, 0xfb1d, 0xfb40, 0xfb1d, 0xfb40, 0xfb49, 0xfb6a, +0xfb49, 0xfb6a, 0xfc94, 0xfcb3, 0xfc94, 0xfcb3, 0xfdfb, 0xfe17, 0xfdfb, 0xfe17, 0xfdfb, +0xfe17, 0xfe79, 0xfe91, 0xfe79, 0xfe91, 0xfff0, 0x2, 0xfff0, 0x2, 0x1, 0xb, +0x1, 0xb, 0xff9c, 0xff9c, 0xff9c, 0xff9c, 0xffdf, 0xffd2, 0xffdf, 0xffd2, 0x96, +0x79, 0x96, 0x79, 0x96, 0x79, 0x275, 0x245, 0x275, 0x245, 0x2fe, 0x2b9, +0x2fe, 0x2b9, 0x34d, 0x2ef, 0x34d, 0x2ef, 0x482, 0x408, 0x482, 0x408, 0x679, +0x5e2, 0x679, 0x5e2, 0x679, 0x5e2, 0x80c, 0x755, 0x80c, 0x755, 0x823, 0x74c, +0x823, 0x74c, 0x817, 0x71f, 0x817, 0x71f, 0x8ee, 0x7d3, 0x8ee, 0x7d3, 0xa82, +0x946, 0xa82, 0x946, 0xb49, 0x9ee, 0xb49, 0x9ee, 0xb49, 0x9ee, 0xb98, 0xa1e, +0xb98, 0xa1e, 0xb95, 0x9ff, 0xb95, 0x9ff, 0xbdc, 0xa2c, 0xbdc, 0xa2c, 0xcf3, +0xb2d, 0xcf3, 0xb2d, 0xe16, 0xc3d, 0xe16, 0xc3d, 0xf38, 0xd50, 0xf38, 0xd50, +0xf38, 0xd50, 0xfc0, 0xdcd, 0xfc0, 0xdcd, 0x10a8, 0xeae, 0x10a8, 0xeae, 0x129b, +0x109e, 0x129b, 0x109e, 0x133b, 0x113d, 0x133b, 0x113d, 0x1266, 0x106c, 0x1266, 0x106c, +0x1266, 0x106c, 0x1293, 0x109e, 0x1293, 0x109e, 0x1315, 0x1128, 0x1315, 0x1128, 0x133c, +0x1159, 0x133c, 0x1159, 0x13c0, 0x11e7, 0x13c0, 0x11e7, 0x13e9, 0x121a, 0x13e9, 0x121a, +0x12de, 0x111a, 0x12de, 0x111a, 0x12de, 0x111a, 0x1291, 0x10d8, 0x1291, 0x10d8, 0x1285, +0x10d5, 0x1285, 0x10d5, 0x10ef, 0xf47, 0x10ef, 0xf47, 0x10e4, 0xf41, 0x10e4, 0xf41, +0x1182, 0xfe2, 0x1182, 0xfe2, 0x110d, 0xf6f, 0x110d, 0xf6f, 0x110d, 0xf6f, 0x1012, +0xe74, 0x1012, 0xe74, 0xf05, 0xd63, 0xf05, 0xd63, 0xe28, 0xc81, 0xe28, 0xc81, +0xcc8, 0xb19, 0xcc8, 0xb19, 0xb37, 0x97f, 0xb37, 0x97f, 0xb37, 0x97f, 0x9fb, +0x838, 0x9fb, 0x838, 0x9ae, 0x7e0, 0x9ae, 0x7e0, 0x83a, 0x660, 0x83a, 0x660, +0x74a, 0x563, 0x74a, 0x563, 0x731, 0x53e, 0x731, 0x53e, 0x610, 0x412, 0x610, +0x412, 0x610, 0x412, 0x66f, 0x466, 0x66f, 0x466, 0x6af, 0x49e, 0x6af, 0x49e, +0x737, 0x51e, 0x737, 0x51e, 0x8a7, 0x688, 0x8a7, 0x688, 0x90d, 0x6ea, 0x90d, +0x6ea, 0x91a, 0x6f4, 0x91a, 0x6f4, 0x91a, 0x6f4, 0x8f2, 0x6cb, 0x8f2, 0x6cb, +0x823, 0x5fd, 0x823, 0x5fd, 0x80e, 0x5ea, 0x80e, 0x5ea, 0x94d, 0x72e, 0x94d, +0x72e, 0xa32, 0x817, 0xa32, 0x817, 0xa32, 0x817, 0xa1b, 0x804, 0xa1b, 0x804, +0x95c, 0x74b, 0x95c, 0x74b, 0x988, 0x77c, 0x988, 0x77c, 0x9c0, 0x7b9, 0x9c0, +0x7b9, 0x8e2, 0x6df, 0x8e2, 0x6df, 0x8ae, 0x6af, 0x8ae, 0x6af, 0x8ae, 0x6af, +0x9b0, 0x7b2, 0x9b0, 0x7b2, 0xaaa, 0x8ad, 0xaaa, 0x8ad, 0xbf6, 0x9f7, 0xbf6, +0x9f7, 0xd77, 0xb75, 0xd77, 0xb75, 0xd4f, 0xb49, 0xd4f, 0xb49, 0xd5d, 0xb51, +0xd5d, 0xb51, 0xd5d, 0xb51, 0xc7d, 0xa69, 0xc7d, 0xa69, 0xb1e, 0x900, 0xb1e, +0x900, 0xb47, 0x91f, 0xb47, 0x91f, 0xa2b, 0x7f8, 0xa2b, 0x7f8, 0x969, 0x729, +0x969, 0x729, 0x969, 0x729, 0xacf, 0x883, 0xacf, 0x883, 0xc63, 0xa0b, 0xc63, +0xa0b, 0xd14, 0xab0, 0xd14, 0xab0, 0xda4, 0xb36, 0xda4, 0xb36, 0xd17, 0xaa0, +0xd17, 0xaa0, 0xcd5, 0xa55, 0xcd5, 0xa55, 0xcd5, 0xa55, 0xd72, 0xaed, 0xd72, +0xaed, 0xc7f, 0x9f7, 0xc7f, 0x9f7, 0xc11, 0x988, 0xc11, 0x988, 0xc00, 0x979, +0xc00, 0x979, 0xc28, 0x9a5, 0xc28, 0x9a5, 0xd5b, 0xae1, 0xd5b, 0xae1, 0xd5b, +0xae1, 0xe39, 0xbcb, 0xe39, 0xbcb, 0xdf4, 0xb95, 0xdf4, 0xb95, 0xcea, 0xa9c, +0xcea, 0xa9c, 0xc69, 0xa31, 0xc69, 0xa31, 0xc46, 0xa27, 0xc46, 0xa27, 0xc46, +0xa27, 0xc35, 0xa31, 0xc35, 0xa31, 0xbe0, 0x9fb, 0xbe0, 0x9fb, 0xbd9, 0xa16, +0xbd9, 0xa16, 0xd1d, 0xb7e, 0xd1d, 0xb7e, 0xdd1, 0xc58, 0xdd1, 0xc58, 0xce2, +0xb91, 0xce2, 0xb91, 0xce2, 0xb91, 0xbca, 0xaa2, 0xbca, 0xaa2, 0xaa8, 0x9ab, +0xaa8, 0x9ab, 0xaf4, 0xa23, 0xaf4, 0xa23, 0xc2e, 0xb89, 0xc2e, 0xb89, 0xb3d, +0xac6, 0xb3d, 0xac6, 0x9d1, 0x986, 0x9d1, 0x986, 0x9d1, 0x986, 0x986, 0x968, +0x986, 0x968, 0x9d0, 0x9de, 0x9d0, 0x9de, 0x960, 0x99a, 0x960, 0x99a, 0x8a4, +0x909, 0x8a4, 0x909, 0x733, 0x7c2, 0x733, 0x7c2, 0x733, 0x7c2, 0x518, 0x5d1, +0x518, 0x5d1, 0x4c7, 0x5a9, 0x4c7, 0x5a9, 0x48d, 0x596, 0x48d, 0x596, 0x2d9, +0x409, 0x2d9, 0x409, 0x1f, 0x175, 0x1f, 0x175, 0xfe87, 0x2, 0xfe87, 0x2, +0xfe87, 0x2, 0xfd62, 0xff02, 0xfd62, 0xff02, 0xfb3d, 0xfd02, 0xfb3d, 0xfd02, 0xf9b2, +0xfb9c, 0xf9b2, 0xfb9c, 0xf83b, 0xfa4a, 0xf83b, 0xfa4a, 0xf7ee, 0xfa22, 0xf7ee, 0xfa22, +0xf7ee, 0xfa22, 0xf849, 0xfaa4, 0xf849, 0xfaa4, 0xf763, 0xf9e4, 0xf763, 0xf9e4, 0xf603, +0xf8ac, 0xf603, 0xf8ac, 0xf4d2, 0xf7a4, 0xf4d2, 0xf7a4, 0xf498, 0xf794, 0xf498, 0xf794, +0xf584, 0xf8ac, 0xf584, 0xf8ac, 0xf584, 0xf8ac, 0xf4fb, 0xf84f, 0xf4fb, 0xf84f, 0xf226, +0xf5a7, 0xf226, 0xf5a7, 0xefaa, 0xf359, 0xefaa, 0xf359, 0xee50, 0xf22e, 0xee50, 0xf22e, +0xedb8, 0xf1c5, 0xedb8, 0xf1c5, 0xecb3, 0xf0ee, 0xecb3, 0xf0ee, 0xecb3, 0xf0ee, 0xea09, +0xee72, 0xea09, 0xee72, 0xe704, 0xeb9a, 0xe704, 0xeb9a, 0xe5b9, 0xea7a, 0xe5b9, 0xea7a, +0xe4f0, 0xe9db, 0xe4f0, 0xe9db, 0xe39c, 0xe8ad, 0xe39c, 0xe8ad, 0xe39c, 0xe8ad, 0xe29d, +0xe7d1, 0xe29d, 0xe7d1, 0xe158, 0xe6ac, 0xe158, 0xe6ac, 0xe0ed, 0xe65c, 0xe0ed, 0xe65c, +0xe0b5, 0xe63b, 0xe0b5, 0xe63b, 0xe007, 0xe59f, 0xe007, 0xe59f, 0xdfea, 0xe590, 0xdfea, +0xe590, 0xdfea, 0xe590, 0xde93, 0xe441, 0xde93, 0xe441, 0xdd1c, 0xe2ce, 0xdd1c, 0xe2ce, +0xdd45, 0xe2f5, 0xdd45, 0xe2f5, 0xdc5f, 0xe208, 0xdc5f, 0xe208, 0xdabd, 0xe05b, 0xdabd, +0xe05b, 0xda9b, 0xe02a, 0xda9b, 0xe02a, 0xda9b, 0xe02a, 0xda71, 0xdfed, 0xda71, 0xdfed, +0xda0e, 0xdf74, 0xda0e, 0xdf74, 0xda24, 0xdf71, 0xda24, 0xdf71, 0xda74, 0xdfa5, 0xda74, +0xdfa5, 0xdb22, 0xe036, 0xdb22, 0xe036, 0xdb22, 0xe036, 0xdc15, 0xe10b, 0xdc15, 0xe10b, +0xdd2e, 0xe206, 0xdd2e, 0xe206, 0xdd8d, 0xe247, 0xdd8d, 0xe247, 0xdd14, 0xe1b0, 0xdd14, +0xe1b0, 0xdd2c, 0xe1ab, 0xdd2c, 0xe1ab, 0xde30, 0xe293, 0xde30, 0xe293, 0xde30, 0xe293, +0xdee2, 0xe32b, 0xdee2, 0xe32b, 0xdf46, 0xe377, 0xdf46, 0xe377, 0xdf37, 0xe351, 0xdf37, +0xe351, 0xde76, 0xe27a, 0xde76, 0xe27a, 0xdf2f, 0xe31f, 0xdf2f, 0xe31f, 0xe167, 0xe543, +0xe167, 0xe543, 0xe167, 0xe543, 0xe1d7, 0xe5a0, 0xe1d7, 0xe5a0, 0xe1c8, 0xe57f, 0xe1c8, +0xe57f, 0xe26a, 0xe60e, 0xe26a, 0xe60e, 0xe17a, 0xe50a, 0xe17a, 0xe50a, 0xe14d, 0xe4c7, +0xe14d, 0xe4c7, 0xe14d, 0xe4c7, 0xe13c, 0xe49f, 0xe13c, 0xe49f, 0xe04c, 0xe396, 0xe04c, +0xe396, 0xe13b, 0xe469, 0xe13b, 0xe469, 0xe317, 0xe626, 0xe317, 0xe626, 0xe4a5, 0xe791, +0xe4a5, 0xe791, 0xe5da, 0xe8a1, 0xe5da, 0xe8a1, 0xe5da, 0xe8a1, 0xe6e6, 0xe984, 0xe6e6, +0xe984, 0xe75e, 0xe9d0, 0xe75e, 0xe9d0, 0xe849, 0xea8b, 0xe849, 0xea8b, 0xe9a8, 0xebb8, +0xe9a8, 0xebb8, 0xeae7, 0xecc3, 0xeae7, 0xecc3, 0xeb83, 0xed29, 0xeb83, 0xed29, 0xeb83, +0xed29, 0xeb45, 0xecb2, 0xeb45, 0xecb2, 0xedb5, 0xeeea, 0xedb5, 0xeeea, 0xf0c6, 0xf1c2, +0xf0c6, 0xf1c2, 0xf1e8, 0xf2ab, 0xf1e8, 0xf2ab, 0xf2ed, 0xf379, 0xf2ed, 0xf379, 0xf2ed, +0xf379, 0xf356, 0xf3ad, 0xf356, 0xf3ad, 0xf3e1, 0xf405, 0xf3e1, 0xf405, 0xf5cb, 0xf5bf, +0xf5cb, 0xf5bf, 0xf764, 0xf72b, 0xf764, 0xf72b, 0xf7f0, 0xf78d, 0xf7f0, 0xf78d, 0xf918, +0xf890, 0xf918, 0xf890, 0xf918, 0xf890, 0xfb35, 0xfa8b, 0xfb35, 0xfa8b, 0xfdd6, 0xfd0d, +0xfdd6, 0xfd0d, 0x1d, 0xff3b, 0x1d, 0xff3b, 0x164, 0x6b, 0x164, 0x6b, 0x256, +0x149, 0x256, 0x149, 0x402, 0x2e4, 0x402, 0x2e4, 0x402, 0x2e4, 0x623, 0x4f6, +0x623, 0x4f6, 0x761, 0x627, 0x761, 0x627, 0x75a, 0x614, 0x75a, 0x614, 0x7f8, +0x6a6, 0x7f8, 0x6a6, 0xa23, 0x8c6, 0xa23, 0x8c6, 0xa23, 0x8c6, 0xaf9, 0x990, +0xaf9, 0x990, 0xaf8, 0x983, 0xaf8, 0x983, 0xad9, 0x956, 0xad9, 0x956, 0xa7f, +0x8ec, 0xa7f, 0x8ec, 0xb4a, 0x9a5, 0xb4a, 0x9a5, 0xc48, 0xa8f, 0xc48, 0xa8f, +0xc48, 0xa8f, 0xd36, 0xb68, 0xd36, 0xb68, 0xdd9, 0xbf3, 0xdd9, 0xbf3, 0xe19, +0xc19, 0xe19, 0xc19, 0xf13, 0xcf9, 0xf13, 0xcf9, 0x10b8, 0xe82, 0x10b8, 0xe82, +0x10d9, 0xe86, 0x10d9, 0xe86, 0x10d9, 0xe86, 0x10da, 0xe6b, 0x10da, 0xe6b, 0x1232, +0xfa7, 0x1232, 0xfa7, 0x12c1, 0x101a, 0x12c1, 0x101a, 0x12fb, 0x103b, 0x12fb, 0x103b, +0x1265, 0xf8d, 0x1265, 0xf8d, 0x1265, 0xf8d, 0x11c5, 0xed8, 0x11c5, 0xed8, 0x1288, +0xf89, 0x1288, 0xf89, 0x13a9, 0x109b, 0x13a9, 0x109b, 0x1395, 0x107c, 0x1395, 0x107c, +0x1252, 0xf32, 0x1252, 0xf32, 0x1210, 0xeee, 0x1210, 0xeee, 0x1210, 0xeee, 0x11f3, +0xed2, 0x11f3, 0xed2, 0x11b2, 0xe97, 0x11b2, 0xe97, 0x11a3, 0xe91, 0x11a3, 0xe91, +0x110d, 0xe09, 0x110d, 0xe09, 0x110b, 0xe17, 0x110b, 0xe17, 0x1149, 0xe69, 0x1149, +0xe69, 0x1149, 0xe69, 0x1121, 0xe57, 0x1121, 0xe57, 0x10a8, 0xdf6, 0x10a8, 0xdf6, +0xed5, 0xc3d, 0xed5, 0xc3d, 0xe35, 0xbb8, 0xe35, 0xbb8, 0xf06, 0xca5, 0xf06, +0xca5, 0xf06, 0xca5, 0xdf8, 0xbb3, 0xdf8, 0xbb3, 0xd67, 0xb3e, 0xd67, 0xb3e, +0xd1b, 0xb0e, 0xd1b, 0xb0e, 0xc4b, 0xa59, 0xc4b, 0xa59, 0xd09, 0xb31, 0xd09, +0xb31, 0xdbb, 0xbfc, 0xdbb, 0xbfc, 0xdbb, 0xbfc, 0xc18, 0xa71, 0xc18, 0xa71, +0xa20, 0x88f, 0xa20, 0x88f, 0x9d5, 0x859, 0x9d5, 0x859, 0x8e4, 0x77c, 0x8e4, +0x77c, 0x88a, 0x736, 0x88a, 0x736, 0x8ae, 0x76c, 0x8ae, 0x76c, 0x8ae, 0x76c, +0x7e4, 0x6b4, 0x7e4, 0x6b4, 0x744, 0x626, 0x744, 0x626, 0x663, 0x557, 0x663, +0x557, 0x6da, 0x5df, 0x6da, 0x5df, 0x6b1, 0x5c9, 0x6b1, 0x5c9, 0x6b1, 0x5c9, +0x4b2, 0x3dd, 0x4b2, 0x3dd, 0x4b8, 0x3f6, 0x4b8, 0x3f6, 0x5fa, 0x54d, 0x5fa, +0x54d, 0x679, 0x5e1, 0x679, 0x5e1, 0x718, 0x697, 0x718, 0x697, 0x66a, 0x600, +0x66a, 0x600, 0x66a, 0x600, 0x4a1, 0x44f, 0x4a1, 0x44f, 0x461, 0x429, 0x461, +0x429, 0x455, 0x437, 0x455, 0x437, 0x3b2, 0x3ae, 0x3b2, 0x3ae, 0x348, 0x35e, +0x348, 0x35e, 0x348, 0x35e, 0x236, 0x266, 0x236, 0x266, 0x92, 0xda, 0x92, +0xda, 0xff44, 0xffa5, 0xff44, 0xffa5, 0xfd52, 0xfdca, 0xfd52, 0xfdca, 0xfb66, 0xfbf3, +0xfb66, 0xfbf3, 0xfa57, 0xfaf8, 0xfa57, 0xfaf8, 0xfa57, 0xfaf8, 0xfa22, 0xfad4, 0xfa22, +0xfad4, 0xfb6d, 0xfc2d, 0xfb6d, 0xfc2d, 0xfb36, 0xfc03, 0xfb36, 0xfc03, 0xfa7c, 0xfb52, +0xfa7c, 0xfb52, 0xfad8, 0xfbb4, 0xfad8, 0xfbb4, 0xfa30, 0xfb0f, 0xfa30, 0xfb0f, 0xfa30, +0xfb0f, 0xf967, 0xfa46, 0xf967, 0xfa46, 0xf829, 0xf905, 0xf829, 0xf905, 0xf6f6, 0xf7cb, +0xf6f6, 0xf7cb, 0xf659, 0xf726, 0xf659, 0xf726, 0xf5e4, 0xf6a4, 0xf5e4, 0xf6a4, 0xf5e4, +0xf6a4, 0xf6c7, 0xf778, 0xf6c7, 0xf778, 0xf7e9, 0xf88a, 0xf7e9, 0xf88a, 0xf7e2, 0xf870, +0xf7e2, 0xf870, 0xf814, 0xf88d, 0xf814, 0xf88d, 0xf951, 0xf9b3, 0xf951, 0xf9b3, 0xfa71, +0xfabb, 0xfa71, 0xfabb, 0xfa71, 0xfabb, 0xfb6e, 0xfba0, 0xfb6e, 0xfba0, 0xfc64, 0xfc7d, +0xfc64, 0xfc7d, 0xfd4e, 0xfd4d, 0xfd4e, 0xfd4d, 0xfe8c, 0xfe71, 0xfe8c, 0xfe71, 0xff72, +0xff3d, 0xff72, 0xff3d, 0xffbd, 0xff6e, 0xffbd, 0xff6e, 0xffbd, 0xff6e, 0xffa8, 0xff40, +0xffa8, 0xff40, 0xffb0, 0xff30, 0xffb0, 0xff30, 0xfffd, 0xff65, 0xfffd, 0xff65, 0x93, +0xffe4, 0x93, 0xffe4, 0x142, 0x7c, 0x142, 0x7c, 0x142, 0x7c, 0x1a1, 0xc6, +0x1a1, 0xc6, 0x2da, 0x1ea, 0x2da, 0x1ea, 0x496, 0x392, 0x496, 0x392, 0x60d, +0x4f7, 0x60d, 0x4f7, 0x6ee, 0x5c6, 0x6ee, 0x5c6, 0x696, 0x55d, 0x696, 0x55d, +0x696, 0x55d, 0x6fd, 0x5b4, 0x6fd, 0x5b4, 0x838, 0x6de, 0x838, 0x6de, 0x972, +0x80a, 0x972, 0x80a, 0xad1, 0x95a, 0xad1, 0x95a, 0xb49, 0x9c4, 0xb49, 0x9c4, +0xbdc, 0xa4a, 0xbdc, 0xa4a, 0xbdc, 0xa4a, 0xcfd, 0xb5f, 0xcfd, 0xb5f, 0xdcd, +0xc24, 0xdcd, 0xc24, 0xd7d, 0xbc8, 0xd7d, 0xbc8, 0xd47, 0xb88, 0xd47, 0xb88, +0xe99, 0xcd1, 0xe99, 0xcd1, 0xe99, 0xcd1, 0xf4c, 0xd7b, 0xf4c, 0xd7b, 0x101f, +0xe47, 0x101f, 0xe47, 0x10cb, 0xeec, 0x10cb, 0xeec, 0x1013, 0xe2e, 0x1013, 0xe2e, +0x1063, 0xe7b, 0x1063, 0xe7b, 0x11a7, 0xfbc, 0x11a7, 0xfbc, 0x11a7, 0xfbc, 0x12c2, +0x10d5, 0x12c2, 0x10d5, 0x1265, 0x1078, 0x1265, 0x1078, 0x113f, 0xf53, 0x113f, 0xf53, +0x10f2, 0xf0a, 0x10f2, 0xf0a, 0x1097, 0xeb3, 0x1097, 0xeb3, 0x1038, 0xe5b, 0x1038, +0xe5b, 0x1038, 0xe5b, 0xfad, 0xdd7, 0xfad, 0xdd7, 0xf0e, 0xd41, 0xf0e, 0xd41, +0xec7, 0xd05, 0xec7, 0xd05, 0xf24, 0xd6e, 0xf24, 0xd6e, 0xf5a, 0xdb1, 0xf5a, +0xdb1, 0xf5a, 0xdb1, 0xe60, 0xcc5, 0xe60, 0xcc5, 0xd5d, 0xbd2, 0xd5d, 0xbd2, +0xc11, 0xa96, 0xc11, 0xa96, 0xad0, 0x964, 0xad0, 0x964, 0xa66, 0x90c, 0xa66, +0x90c, 0x9f6, 0x8ac, 0x9f6, 0x8ac, 0x9f6, 0x8ac, 0x99e, 0x865, 0x99e, 0x865, +0x97f, 0x857, 0x97f, 0x857, 0x9a2, 0x88b, 0x9a2, 0x88b, 0x912, 0x80b, 0x912, +0x80b, 0x743, 0x64a, 0x743, 0x64a, 0x6b3, 0x5c8, 0x6b3, 0x5c8, 0x6b3, 0x5c8, +0x751, 0x674, 0x751, 0x674, 0x761, 0x691, 0x761, 0x691, 0x785, 0x6c1, 0x785, +0x6c1, 0x7af, 0x6f5, 0x7af, 0x6f5, 0x7e4, 0x733, 0x7e4, 0x733, 0x7e4, 0x733, +0x7f9, 0x751, 0x7f9, 0x751, 0x814, 0x772, 0x814, 0x772, 0x881, 0x7e6, 0x881, +0x7e6, 0x7ef, 0x758, 0x7ef, 0x758, 0x797, 0x704, 0x797, 0x704, 0x873, 0x7e1, +0x873, 0x7e1, 0x873, 0x7e1, 0x945, 0x8b5, 0x945, 0x8b5, 0x9ae, 0x91d, 0x9ae, +0x91d, 0x9c8, 0x936, 0x9c8, 0x936, 0xa33, 0x99d, 0xa33, 0x99d, 0xada, 0xa3f, +0xada, 0xa3f, 0xb9e, 0xafe, 0xb9e, 0xafe, 0xb9e, 0xafe, 0xc7a, 0xbd2, 0xc7a, +0xbd2, 0xcf2, 0xc43, 0xcf2, 0xc43, 0xcbd, 0xc04, 0xcbd, 0xc04, 0xbf8, 0xb34, +0xbf8, 0xb34, 0xacf, 0x9ff, 0xacf, 0x9ff, 0xacf, 0x9ff, 0xa07, 0x929, 0xa07, +0x929, 0x9d4, 0x8e8, 0x9d4, 0x8e8, 0x903, 0x807, 0x903, 0x807, 0x877, 0x76a, +0x877, 0x76a, 0x868, 0x74a, 0x868, 0x74a, 0x906, 0x7d7, 0x906, 0x7d7, 0x906, +0x7d7, 0x9bf, 0x87e, 0x9bf, 0x87e, 0xa21, 0x8ce, 0xa21, 0x8ce, 0xb50, 0x9ea, +0xb50, 0x9ea, 0xb7a, 0xa02, 0xb7a, 0xa02, 0xbf7, 0xa6d, 0xbf7, 0xa6d, 0xce9, +0xb4e, 0xce9, 0xb4e, 0xce9, 0xb4e, 0xcad, 0xb02, 0xcad, 0xb02, 0xc56, 0xa9b, +0xc56, 0xa9b, 0xc71, 0xaa8, 0xc71, 0xaa8, 0xcf0, 0xb1a, 0xcf0, 0xb1a, 0xc80, +0xa9f, 0xc80, 0xa9f, 0xc80, 0xa9f, 0xc0c, 0xa22, 0xc0c, 0xa22, 0xb90, 0x99f, +0xb90, 0x99f, 0xb16, 0x920, 0xb16, 0x920, 0xb8d, 0x994, 0xb8d, 0x994, 0xc0e, +0xa16, 0xc0e, 0xa16, 0xc83, 0xa8e, 0xc83, 0xa8e, 0xc83, 0xa8e, 0xc1f, 0xa2f, +0xc1f, 0xa2f, 0xba0, 0x9b8, 0xba0, 0x9b8, 0xbcd, 0x9f0, 0xbcd, 0x9f0, 0xade, +0x90f, 0xade, 0x90f, 0xa49, 0x88b, 0xa49, 0x88b, 0xac0, 0x915, 0xac0, 0x915, +0xac0, 0x915, 0xa5f, 0x8cb, 0xa5f, 0x8cb, 0xa32, 0x8b8, 0xa32, 0x8b8, 0x9d7, +0x879, 0x9d7, 0x879, 0x95b, 0x81c, 0x95b, 0x81c, 0x986, 0x869, 0x986, 0x869, +0x986, 0x869, 0x969, 0x870, 0x969, 0x870, 0x8f6, 0x823, 0x8f6, 0x823, 0x82a, +0x77f, 0x82a, 0x77f, 0x71d, 0x69c, 0x71d, 0x69c, 0x6a1, 0x64b, 0x6a1, 0x64b, +0x75b, 0x731, 0x75b, 0x731, 0x75b, 0x731, 0x6cf, 0x6d3, 0x6cf, 0x6d3, 0x5bb, +0x5ef, 0x5bb, 0x5ef, 0x4f0, 0x554, 0x4f0, 0x554, 0x2b5, 0x34a, 0x2b5, 0x34a, +0x12b, 0x1f1, 0x12b, 0x1f1, 0x12b, 0x1f1, 0xff23, 0x1a, 0xff23, 0x1a, 0xfc58, +0xfd82, 0xfc58, 0xfd82, 0xfafb, 0xfc57, 0xfafb, 0xfc57, 0xf94c, 0xfad9, 0xf94c, 0xfad9, +0xf7b0, 0xf970, 0xf7b0, 0xf970, 0xf6b4, 0xf8a6, 0xf6b4, 0xf8a6, 0xf6b4, 0xf8a6, 0xf582, +0xf7a7, 0xf582, 0xf7a7, 0xf5d2, 0xf829, 0xf5d2, 0xf829, 0xf63b, 0xf8c5, 0xf63b, 0xf8c5, +0xf59f, 0xf85b, 0xf59f, 0xf85b, 0xf53e, 0xf82e, 0xf53e, 0xf82e, 0xf3d7, 0xf6f9, 0xf3d7, +0xf6f9, 0xf3d7, 0xf6f9, 0xf17f, 0xf4d4, 0xf17f, 0xf4d4, 0xefae, 0xf336, 0xefae, 0xf336, +0xee35, 0xf1ef, 0xee35, 0xf1ef, 0xec2f, 0xf01c, 0xec2f, 0xf01c, 0xeae1, 0xef01, 0xeae1, +0xef01, 0xeae1, 0xef01, 0xea30, 0xee81, 0xea30, 0xee81, 0xe924, 0xeda5, 0xe924, 0xeda5, +0xe7b8, 0xec68, 0xe7b8, 0xec68, 0xe5ab, 0xea89, 0xe5ab, 0xea89, 0xe451, 0xe95a, 0xe451, +0xe95a, 0xe2ff, 0xe832, 0xe2ff, 0xe832, 0xe2ff, 0xe832, 0xe1a6, 0xe6ff, 0xe1a6, 0xe6ff, +0xe123, 0xe69f, 0xe123, 0xe69f, 0xe096, 0xe631, 0xe096, 0xe631, 0xdfed, 0xe5a4, 0xdfed, +0xe5a4, 0xdf15, 0xe4e2, 0xdf15, 0xe4e2, 0xde1b, 0xe3f9, 0xde1b, 0xe3f9, 0xde1b, 0xe3f9, +0xdc8d, 0xe278, 0xdc8d, 0xe278, 0xdaaf, 0xe0a1, 0xdaaf, 0xe0a1, 0xd996, 0xdf89, 0xd996, +0xdf89, 0xd8eb, 0xdeda, 0xd8eb, 0xdeda, 0xd8bf, 0xdea5, 0xd8bf, 0xdea5, 0xd8bf, 0xdea5, +0xd84f, 0xde25, 0xd84f, 0xde25, 0xd852, 0xde15, 0xd852, 0xde15, 0xd910, 0xdeba, 0xd910, +0xdeba, 0xd970, 0xdefe, 0xd970, 0xdefe, 0xda6a, 0xdfd8, 0xda6a, 0xdfd8, 0xda94, 0xdfe0, +0xda94, 0xdfe0, 0xda94, 0xdfe0, 0xda92, 0xdfb9, 0xda92, 0xdfb9, 0xdb07, 0xe008, 0xdb07, +0xe008, 0xdba9, 0xe083, 0xdba9, 0xe083, 0xdce8, 0xe19a, 0xdce8, 0xe19a, 0xddeb, 0xe277, +0xddeb, 0xe277, 0xdf81, 0xe3e7, 0xdf81, 0xe3e7, 0xdf81, 0xe3e7, 0xe041, 0xe483, 0xe041, +0xe483, 0xe0ac, 0xe4cb, 0xe0ac, 0xe4cb, 0xe0eb, 0xe4ea, 0xe0eb, 0xe4ea, 0xe0e7, 0xe4c8, +0xe0e7, 0xe4c8, 0xe1fa, 0xe5c0, 0xe1fa, 0xe5c0, 0xe1fa, 0xe5c0, 0xe296, 0xe642, 0xe296, +0xe642, 0xe339, 0xe6cd, 0xe339, 0xe6cd, 0xe329, 0xe6a8, 0xe329, 0xe6a8, 0xe230, 0xe59a, +0xe230, 0xe59a, 0xe237, 0xe58c, 0xe237, 0xe58c, 0xe26f, 0xe5b1, 0xe26f, 0xe5b1, 0xe26f, +0xe5b1, 0xe288, 0xe5b5, 0xe288, 0xe5b5, 0xe33e, 0xe655, 0xe33e, 0xe655, 0xe3e5, 0xe6e3, +0xe3e5, 0xe6e3, 0xe485, 0xe768, 0xe485, 0xe768, 0xe5b6, 0xe87b, 0xe5b6, 0xe87b, 0xe683, +0xe925, 0xe683, 0xe925, 0xe683, 0xe925, 0xe741, 0xe9bd, 0xe741, 0xe9bd, 0xe8dc, 0xeb2f, +0xe8dc, 0xeb2f, 0xea32, 0xec57, 0xea32, 0xec57, 0xebf3, 0xede6, 0xebf3, 0xede6, 0xee0e, +0xefcc, 0xee0e, 0xefcc, 0xee0e, 0xefcc, 0xeebf, 0xf043, 0xeebf, 0xf043, 0xf023, 0xf16c, +0xf023, 0xf16c, 0xf159, 0xf264, 0xf159, 0xf264, 0xf147, 0xf214, 0xf147, 0xf214, 0xf1e2, +0xf26f, 0xf1e2, 0xf26f, 0xf2f6, 0xf345, 0xf2f6, 0xf345, 0xf2f6, 0xf345, 0xf516, 0xf528, +0xf516, 0xf528, 0xf742, 0xf71b, 0xf742, 0xf71b, 0xf85c, 0xf7fe, 0xf85c, 0xf7fe, 0xf91d, +0xf88d, 0xf91d, 0xf88d, 0xfa0c, 0xf950, 0xfa0c, 0xf950, 0xfb8a, 0xfaa6, 0xfb8a, 0xfaa6, +0xfb8a, 0xfaa6, 0xfdff, 0xfcf9, 0xfdff, 0xfcf9, 0x17, 0xfef6, 0x17, 0xfef6, 0xe8, +0xffb2, 0xe8, 0xffb2, 0x33a, 0x1f6, 0x33a, 0x1f6, 0x65a, 0x50d, 0x65a, 0x50d, +0x65a, 0x50d, 0x831, 0x6e0, 0x831, 0x6e0, 0x9cc, 0x87c, 0x9cc, 0x87c, 0xae7, +0x99c, 0xae7, 0x99c, 0xb4b, 0xa08, 0xb4b, 0xa08, 0xc29, 0xaef, 0xc29, 0xaef, +0xcc9, 0xb99, 0xcc9, 0xb99, 0xcc9, 0xb99, 0xc0f, 0xaea, 0xc0f, 0xaea, 0xbdb, +0xabe, 0xbdb, 0xabe, 0xc8d, 0xb77, 0xc8d, 0xb77, 0xdc9, 0xcb7, 0xdc9, 0xcb7, +0xfa2, 0xe90, 0xfa2, 0xe90, 0x1040, 0xf2a, 0x1040, 0xf2a, 0x1040, 0xf2a, 0x1151, +0x1031, 0x1151, 0x1031, 0x12b4, 0x1187, 0x12b4, 0x1187, 0x12ea, 0x11aa, 0x12ea, 0x11aa, +0x133f, 0x11e8, 0x133f, 0x11e8, 0x11f5, 0x1082, 0x11f5, 0x1082, 0x11f5, 0x1082, 0x1114, +0xf82, 0x1114, 0xf82, 0x123a, 0x1086, 0x123a, 0x1086, 0x126c, 0x1094, 0x126c, 0x1094, +0x1236, 0x1039, 0x1236, 0x1039, 0x1298, 0x1076, 0x1298, 0x1076, 0x12ab, 0x1065, 0x12ab, +0x1065, 0x12ab, 0x1065, 0x12e5, 0x107c, 0x12e5, 0x107c, 0x13dc, 0x1154, 0x13dc, 0x1154, +0x1409, 0x1165, 0x1409, 0x1165, 0x138c, 0x10d1, 0x138c, 0x10d1, 0x1368, 0x109c, 0x1368, +0x109c, 0x1364, 0x108b, 0x1364, 0x108b, 0x1364, 0x108b, 0x1399, 0x10ba, 0x1399, 0x10ba, +0x13ac, 0x10cc, 0x13ac, 0x10cc, 0x136b, 0x1091, 0x136b, 0x1091, 0x13b0, 0x10e0, 0x13b0, +0x10e0, 0x1315, 0x1055, 0x1315, 0x1055, 0x1315, 0x1055, 0x1208, 0xf5d, 0x1208, 0xf5d, +0x11a4, 0xf11, 0x11a4, 0xf11, 0xfca, 0xd53, 0xfca, 0xd53, 0xea8, 0xc4e, 0xea8, +0xc4e, 0xe4b, 0xc0f, 0xe4b, 0xc0f, 0xd3f, 0xb21, 0xd3f, 0xb21, 0xd3f, 0xb21, +0xcee, 0xaee, 0xcee, 0xaee, 0xce2, 0xafd, 0xce2, 0xafd, 0xc6d, 0xaa1, 0xc6d, +0xaa1, 0xb97, 0x9e1, 0xb97, 0x9e1, 0xaa0, 0x8fd, 0xaa0, 0x8fd, 0x92e, 0x799, +0x92e, 0x799, 0x92e, 0x799, 0x81a, 0x690, 0x81a, 0x690, 0x758, 0x5d4, 0x758, +0x5d4, 0x790, 0x60f, 0x790, 0x60f, 0x809, 0x686, 0x809, 0x686, 0x71b, 0x593, +0x71b, 0x593, 0x71b, 0x593, 0x6cc, 0x53d, 0x6cc, 0x53d, 0x67f, 0x4e7, 0x67f, +0x4e7, 0x55a, 0x3b8, 0x55a, 0x3b8, 0x4a6, 0x2fa, 0x4a6, 0x2fa, 0x412, 0x25b, +0x412, 0x25b, 0x326, 0x165, 0x326, 0x165, 0x326, 0x165, 0x2e8, 0x120, 0x2e8, +0x120, 0x36b, 0x19e, 0x36b, 0x19e, 0x446, 0x277, 0x446, 0x277, 0x3e3, 0x216, +0x3e3, 0x216, 0x2fb, 0x133, 0x2fb, 0x133, 0x2fb, 0x133, 0x2b9, 0xfb, 0x2b9, +0xfb, 0x1f5, 0x45, 0x1f5, 0x45, 0x1d9, 0x3a, 0x1d9, 0x3a, 0x1ac, 0x23, +0x1ac, 0x23, 0x99, 0xff2a, 0x99, 0xff2a, 0xfe56, 0xfd03, 0xfe56, 0xfd03, 0xfe56, +0xfd03, 0xfd69, 0xfc36, 0xfd69, 0xfc36, 0xfd4f, 0xfc3d, 0xfd4f, 0xfc3d, 0xfbcc, 0xfadd, +0xfbcc, 0xfadd, 0xfbc7, 0xfafd, 0xfbc7, 0xfafd, 0xfb39, 0xfa93, 0xfb39, 0xfa93, 0xf9ff, +0xf97d, 0xf9ff, 0xf97d, 0xf9ff, 0xf97d, 0xf98e, 0xf92e, 0xf98e, 0xf92e, 0xf950, 0xf911, +0xf950, 0xf911, 0xf856, 0xf835, 0xf856, 0xf835, 0xf737, 0xf732, 0xf737, 0xf732, 0xf77b, +0xf78f, 0xf77b, 0xf78f, 0xf77b, 0xf78f, 0xf796, 0xf7c0, 0xf796, 0xf7c0, 0xf7bc, 0xf7f8, +0xf7bc, 0xf7f8, 0xf672, 0xf6bc, 0xf672, 0xf6bc, 0xf588, 0xf5dd, 0xf588, 0xf5dd, 0xf63a, +0xf696, 0xf63a, 0xf696, 0xf5db, 0xf63b, 0xf5db, 0xf63b, 0xf5db, 0xf63b, 0xf673, 0xf6d3, +0xf673, 0xf6d3, 0xf63c, 0xf69a, 0xf63c, 0xf69a, 0xf582, 0xf5da, 0xf582, 0xf5da, 0xf7b0, +0xf801, 0xf7b0, 0xf801, 0xf9af, 0xf9f7, 0xf9af, 0xf9f7, 0xfa76, 0xfab2, 0xfa76, 0xfab2, +0xfa76, 0xfab2, 0xfb0b, 0xfb39, 0xfb0b, 0xfb39, 0xfadf, 0xfaff, 0xfadf, 0xfaff, 0xfb4c, +0xfb5d, 0xfb4c, 0xfb5d, 0xfd10, 0xfd10, 0xfd10, 0xfd10, 0xfdc5, 0xfdb5, 0xfdc5, 0xfdb5, +0xfdc5, 0xfdb5, 0xfd71, 0xfd51, 0xfd71, 0xfd51, 0xfed0, 0xfea0, 0xfed0, 0xfea0, 0x29, +0xffe9, 0x29, 0xffe9, 0x1db, 0x18c, 0x1db, 0x18c, 0x426, 0x3c8, 0x426, 0x3c8, +0x44c, 0x3df, 0x44c, 0x3df, 0x44c, 0x3df, 0x533, 0x4b9, 0x533, 0x4b9, 0x6d4, +0x64d, 0x6d4, 0x64d, 0x75b, 0x6c7, 0x75b, 0x6c7, 0x723, 0x685, 0x723, 0x685, +0x62b, 0x583, 0x62b, 0x583, 0x740, 0x68f, 0x740, 0x68f, 0x740, 0x68f, 0x9ca, +0x911, 0x9ca, 0x911, 0xb01, 0xa41, 0xb01, 0xa41, 0xb74, 0xaae, 0xb74, 0xaae, +0xbee, 0xb22, 0xbee, 0xb22, 0xc73, 0xba2, 0xc73, 0xba2, 0xc73, 0xba2, 0xdad, +0xcd7, 0xdad, 0xcd7, 0xecc, 0xdf2, 0xecc, 0xdf2, 0xe7c, 0xd9e, 0xe7c, 0xd9e, +0xe45, 0xd62, 0xe45, 0xd62, 0xf53, 0xe6c, 0xf53, 0xe6c, 0x10fe, 0x1013, 0x10fe, +0x1013, 0x10fe, 0x1013, 0x1197, 0x10a6, 0x1197, 0x10a6, 0x116b, 0x1074, 0x116b, 0x1074, +0x11ea, 0x10ed, 0x11ea, 0x10ed, 0x12c8, 0x11c4, 0x12c8, 0x11c4, 0x1373, 0x1266, 0x1373, +0x1266, 0x137d, 0x1267, 0x137d, 0x1267, 0x137d, 0x1267, 0x12eb, 0x11cb, 0x12eb, 0x11cb, +0x11a7, 0x107c, 0x11a7, 0x107c, 0x116d, 0x1036, 0x116d, 0x1036, 0x11d8, 0x1095, 0x11d8, +0x1095, 0x11a8, 0x1058, 0x11a8, 0x1058, 0x11a8, 0x1058, 0x1179, 0x101c, 0x1179, 0x101c, +0x1138, 0xfcf, 0x1138, 0xfcf, 0x11de, 0x1069, 0x11de, 0x1069, 0x1190, 0x1011, 0x1190, +0x1011, 0xfff, 0xe76, 0xfff, 0xe76, 0xe4e, 0xcbe, 0xe4e, 0xcbe, 0xe4e, 0xcbe, +0xc73, 0xadc, 0xc73, 0xadc, 0xc2c, 0xa92, 0xc2c, 0xa92, 0xc7b, 0xae0, 0xc7b, +0xae0, 0xb90, 0x9f7, 0xb90, 0x9f7, 0xa5c, 0x8c9, 0xa5c, 0x8c9, 0xa57, 0x8cb, +0xa57, 0x8cb, 0xa57, 0x8cb, 0xa74, 0x8f3, 0xa74, 0x8f3, 0x9cd, 0x85a, 0x9cd, +0x85a, 0x998, 0x835, 0x998, 0x835, 0x906, 0x7b6, 0x906, 0x7b6, 0x7f4, 0x6b8, +0x7f4, 0x6b8, 0x7f4, 0x6b8, 0x86f, 0x74a, 0x86f, 0x74a, 0x951, 0x843, 0x951, +0x843, 0x9a4, 0x8ad, 0x9a4, 0x8ad, 0x9ae, 0x8ce, 0x9ae, 0x8ce, 0x96c, 0x8a2, +0x96c, 0x8a2, 0x9af, 0x8fa, 0x9af, 0x8fa, 0x9af, 0x8fa, 0x908, 0x865, 0x908, +0x865, 0x7ea, 0x758, 0x7ea, 0x758, 0x72d, 0x6a8, 0x72d, 0x6a8, 0x656, 0x5da, +0x656, 0x5da, 0x6ea, 0x675, 0x6ea, 0x675, 0x81e, 0x7ac, 0x81e, 0x7ac, 0x81e, +0x7ac, 0x873, 0x800, 0x873, 0x800, 0x91a, 0x8a2, 0x91a, 0x8a2, 0xa39, 0x9b8, +0xa39, 0x9b8, 0xa8c, 0xa00, 0xa8c, 0xa00, 0xa45, 0x9ab, 0xa45, 0x9ab, 0xa45, +0x9ab, 0xa64, 0x9b9, 0xa64, 0x9b9, 0x9e7, 0x929, 0x9e7, 0x929, 0x9a7, 0x8d5, +0x9a7, 0x8d5, 0xb2a, 0xa43, 0xb2a, 0xa43, 0xaac, 0x9b1, 0xaac, 0x9b1, 0x977, +0x867, 0x977, 0x867, 0x977, 0x867, 0x8b6, 0x792, 0x8b6, 0x792, 0x715, 0x5de, +0x715, 0x5de, 0x6ae, 0x565, 0x6ae, 0x565, 0x66a, 0x513, 0x66a, 0x513, 0x6f2, +0x58e, 0x6f2, 0x58e, 0x72a, 0x5bc, 0x72a, 0x5bc, 0x72a, 0x5bc, 0x717, 0x5a0, +0x717, 0x5a0, 0x824, 0x6a7, 0x824, 0x6a7, 0x864, 0x6e2, 0x864, 0x6e2, 0x834, +0x6af, 0x834, 0x6af, 0x7b2, 0x62c, 0x7b2, 0x62c, 0x7b2, 0x62c, 0x808, 0x681, +0x808, 0x681, 0x859, 0x6d1, 0x859, 0x6d1, 0x830, 0x6a9, 0x830, 0x6a9, 0x83d, +0x6b5, 0x83d, 0x6b5, 0x6f6, 0x56e, 0x6f6, 0x56e, 0x6ab, 0x520, 0x6ab, 0x520, +0x6ab, 0x520, 0x7c8, 0x63b, 0x7c8, 0x63b, 0x8c2, 0x731, 0x8c2, 0x731, 0x953, +0x7be, 0x953, 0x7be, 0x8ce, 0x733, 0x8ce, 0x733, 0x887, 0x6e5, 0x887, 0x6e5, +0x85b, 0x6b3, 0x85b, 0x6b3, 0x85b, 0x6b3, 0x8dd, 0x72e, 0x8dd, 0x72e, 0x968, +0x7b2, 0x968, 0x7b2, 0x84a, 0x68e, 0x84a, 0x68e, 0x816, 0x655, 0x816, 0x655, +0x85e, 0x69b, 0x85e, 0x69b, 0x85e, 0x69b, 0x8ef, 0x72d, 0x8ef, 0x72d, 0x9c0, +0x800, 0x9c0, 0x800, 0x953, 0x79a, 0x953, 0x79a, 0x99a, 0x7ec, 0x99a, 0x7ec, +0xa9b, 0x8fc, 0xa9b, 0x8fc, 0xa4d, 0x8c1, 0xa4d, 0x8c1, 0xa4d, 0x8c1, 0x923, +0x7af, 0x923, 0x7af, 0x865, 0x70e, 0x865, 0x70e, 0x7f7, 0x6c0, 0x7f7, 0x6c0, +0x8a7, 0x795, 0x8a7, 0x795, 0x944, 0x85a, 0x944, 0x85a, 0x944, 0x85a, 0x7eb, +0x72c, 0x7eb, 0x72c, 0x6dc, 0x64d, 0x6dc, 0x64d, 0x6aa, 0x64b, 0x6aa, 0x64b, +0x5ff, 0x5d2, 0x5ff, 0x5d2, 0x49d, 0x4a4, 0x49d, 0x4a4, 0x1fa, 0x234, 0x1fa, +0x234, 0x1fa, 0x234, 0xff77, 0xffe5, 0xff77, 0xffe5, 0xfe5c, 0xfefe, 0xfe5c, 0xfefe, +0xfdf6, 0xfecb, 0xfdf6, 0xfecb, 0xfdc4, 0xfeca, 0xfdc4, 0xfeca, 0xfd64, 0xfe9a, 0xfd64, +0xfe9a, 0xfcd3, 0xfe38, 0xfcd3, 0xfe38, 0xfcd3, 0xfe38, 0xfcd4, 0xfe67, 0xfcd4, 0xfe67, +0xfd67, 0xff27, 0xfd67, 0xff27, 0xfc08, 0xfdf5, 0xfc08, 0xfdf5, 0xf9b3, 0xfbcb, 0xf9b3, +0xfbcb, 0xf866, 0xfaaa, 0xf866, 0xfaaa, 0xf866, 0xfaaa, 0xf7d4, 0xfa44, 0xf7d4, 0xfa44, +0xf746, 0xf9e3, 0xf746, 0xf9e3, 0xf4ea, 0xf7b5, 0xf4ea, 0xf7b5, 0xf1f2, 0xf4ed, 0xf1f2, +0xf4ed, 0xefc2, 0xf2ee, 0xefc2, 0xf2ee, 0xeeea, 0xf249, 0xeeea, 0xf249, 0xeeea, 0xf249, +0xee2c, 0xf1c0, 0xee2c, 0xf1c0, 0xece3, 0xf0ae, 0xece3, 0xf0ae, 0xebd0, 0xefd3, 0xebd0, +0xefd3, 0xea99, 0xeed6, 0xea99, 0xeed6, 0xeabb, 0xef32, 0xeabb, 0xef32, 0xeab6, 0xef68, +0xeab6, 0xef68, 0xeab6, 0xef68, 0xe8c0, 0xedab, 0xe8c0, 0xedab, 0xe6e6, 0xec08, 0xe6e6, +0xec08, 0xe59d, 0xeaf5, 0xe59d, 0xeaf5, 0xe4c7, 0xea51, 0xe4c7, 0xea51, 0xe41f, 0xe9d7, +0xe41f, 0xe9d7, 0xe41f, 0xe9d7, 0xe1d6, 0xe7b6, 0xe1d6, 0xe7b6, 0xdf2c, 0xe52e, 0xdf2c, +0xe52e, 0xdd4d, 0xe36b, 0xdd4d, 0xe36b, 0xdc9c, 0xe2ce, 0xdc9c, 0xe2ce, 0xdcc7, 0xe306, +0xdcc7, 0xe306, 0xdc66, 0xe2aa, 0xdc66, 0xe2aa, 0xdc66, 0xe2aa, 0xdbb6, 0xe1f7, 0xdbb6, +0xe1f7, 0xdb0c, 0xe142, 0xdb0c, 0xe142, 0xdb66, 0xe18a, 0xdb66, 0xe18a, 0xdbbf, 0xe1ca, +0xdbbf, 0xe1ca, 0xdb8b, 0xe177, 0xdb8b, 0xe177, 0xdae4, 0xe0ab, 0xdae4, 0xe0ab, 0xdae4, +0xe0ab, 0xdaec, 0xe08a, 0xdaec, 0xe08a, 0xdc16, 0xe188, 0xdc16, 0xe188, 0xdd13, 0xe256, +0xdd13, 0xe256, 0xddc6, 0xe2da, 0xddc6, 0xe2da, 0xde5d, 0xe341, 0xde5d, 0xe341, 0xde5d, +0xe341, 0xdfcb, 0xe480, 0xdfcb, 0xe480, 0xe0f9, 0xe581, 0xe0f9, 0xe581, 0xe1e3, 0xe641, +0xe1e3, 0xe641, 0xe218, 0xe64e, 0xe218, 0xe64e, 0xe1df, 0xe5f1, 0xe1df, 0xe5f1, 0xe207, +0xe5f8, 0xe207, 0xe5f8, 0xe207, 0xe5f8, 0xe2ed, 0xe6c1, 0xe2ed, 0xe6c1, 0xe407, 0xe7c1, +0xe407, 0xe7c1, 0xe3f8, 0xe79a, 0xe3f8, 0xe79a, 0xe45b, 0xe7e8, 0xe45b, 0xe7e8, 0xe3fd, +0xe775, 0xe3fd, 0xe775, 0xe3ac, 0xe710, 0xe3ac, 0xe710, 0xe3ac, 0xe710, 0xe3ef, 0xe73e, +0xe3ef, 0xe73e, 0xe2fc, 0xe635, 0xe2fc, 0xe635, 0xe2c8, 0xe5e8, 0xe2c8, 0xe5e8, 0xe3ab, +0xe6af, 0xe3ab, 0xe6af, 0xe3cd, 0xe6b1, 0xe3cd, 0xe6b1, 0xe3cd, 0xe6b1, 0xe4e0, 0xe79e, +0xe4e0, 0xe79e, 0xe696, 0xe929, 0xe696, 0xe929, 0xe7ae, 0xea11, 0xe7ae, 0xea11, 0xe9b3, +0xebe0, 0xe9b3, 0xebe0, 0xeaec, 0xecdd, 0xeaec, 0xecdd, 0xeb5d, 0xed0c, 0xeb5d, 0xed0c, +0xeb5d, 0xed0c, 0xeb7b, 0xece5, 0xeb7b, 0xece5, 0xebb4, 0xecd4, 0xebb4, 0xecd4, 0xecfd, +0xedd1, 0xecfd, 0xedd1, 0xef15, 0xef9c, 0xef15, 0xef9c, 0xf085, 0xf0bd, 0xf085, 0xf0bd, +0xf155, 0xf13f, 0xf155, 0xf13f, 0xf155, 0xf13f, 0xf25b, 0xf1fa, 0xf25b, 0xf1fa, 0xf2e9, +0xf240, 0xf2e9, 0xf240, 0xf4d7, 0xf3ea, 0xf4d7, 0xf3ea, 0xf736, 0xf60c, 0xf736, 0xf60c, +0xf901, 0xf79f, 0xf901, 0xf79f, 0xf901, 0xf79f, 0xfaa0, 0xf90e, 0xfaa0, 0xf90e, 0xfcd8, +0xfb1d, 0xfcd8, 0xfb1d, 0xff27, 0xfd4b, 0xff27, 0xfd4b, 0x127, 0xff33, 0x127, 0xff33, +0x299, 0x93, 0x299, 0x93, 0x344, 0x134, 0x344, 0x134, 0x344, 0x134, 0x504, +0x2f0, 0x504, 0x2f0, 0x71e, 0x50b, 0x71e, 0x50b, 0x8af, 0x6a3, 0x8af, 0x6a3, +0x86f, 0x66b, 0x86f, 0x66b, 0x834, 0x63a, 0x834, 0x63a, 0x855, 0x667, 0x855, +0x667, 0x855, 0x667, 0x933, 0x74f, 0x933, 0x74f, 0xa9c, 0x8c1, 0xa9c, 0x8c1, +0xb9c, 0x9c6, 0xb9c, 0x9c6, 0xd79, 0xba5, 0xd79, 0xba5, 0xe6d, 0xc95, 0xe6d, +0xc95, 0xe6d, 0xc95, 0x1070, 0xe8f, 0x1070, 0xe8f, 0x118c, 0xf9c, 0x118c, 0xf9c, +0x10c5, 0xec1, 0x10c5, 0xec1, 0x109a, 0xe7d, 0x109a, 0xe7d, 0x111a, 0xede, 0x111a, +0xede, 0x1189, 0xf2a, 0x1189, 0xf2a, 0x1189, 0xf2a, 0x10e7, 0xe62, 0x10e7, 0xe62, +0x1038, 0xd8a, 0x1038, 0xd8a, 0xf95, 0xcbc, 0xf95, 0xcbc, 0x105a, 0xd55, 0x105a, +0xd55, 0x11d4, 0xea4, 0x11d4, 0xea4, 0x12e3, 0xf8b, 0x12e3, 0xf8b, 0x12e3, 0xf8b, +0x12ea, 0xf6b, 0x12ea, 0xf6b, 0x128f, 0xeef, 0x128f, 0xeef, 0x132d, 0xf70, 0x132d, +0xf70, 0x13a2, 0xfcd, 0x13a2, 0xfcd, 0x131f, 0xf38, 0x131f, 0xf38, 0x131f, 0xf38, +0x12a5, 0xeb3, 0x12a5, 0xeb3, 0x12c5, 0xece, 0x12c5, 0xece, 0x12fd, 0xf07, 0x12fd, +0xf07, 0x13ac, 0xfbd, 0x13ac, 0xfbd, 0x130a, 0xf29, 0x130a, 0xf29, 0x1212, 0xe42, +0x1212, 0xe42, 0x1212, 0xe42, 0x1241, 0xe88, 0x1241, 0xe88, 0x1211, 0xe72, 0x1211, +0xe72, 0x1190, 0xe0d, 0x1190, 0xe0d, 0x1139, 0xdd4, 0x1139, 0xdd4, 0x1052, 0xd0c, +0x1052, 0xd0c, 0xf68, 0xc41, 0xf68, 0xc41, 0xf68, 0xc41, 0xf10, 0xc07, 0xf10, +0xc07, 0xf05, 0xc1a, 0xf05, 0xc1a, 0xdcb, 0xafc, 0xdcb, 0xafc, 0xb1d, 0x868, +0xb1d, 0x868, 0xaa0, 0x802, 0xaa0, 0x802, 0xaa0, 0x802, 0xaa0, 0x818, 0xaa0, +0x818, 0x9f4, 0x77f, 0x9f4, 0x77f, 0x966, 0x702, 0x966, 0x702, 0x84e, 0x5fa, +0x84e, 0x5fa, 0x755, 0x511, 0x755, 0x511, 0x6f6, 0x4c0, 0x6f6, 0x4c0, 0x6f6, +0x4c0, 0x719, 0x4f3, 0x719, 0x4f3, 0x658, 0x442, 0x658, 0x442, 0x60a, 0x405, +0x60a, 0x405, 0x67f, 0x48c, 0x67f, 0x48c, 0x699, 0x4bc, 0x699, 0x4bc, 0x699, +0x4bc, 0x660, 0x49b, 0x660, 0x49b, 0x575, 0x3cb, 0x575, 0x3cb, 0x4e9, 0x35d, +0x4e9, 0x35d, 0x5a1, 0x436, 0x5a1, 0x436, 0x61e, 0x4d6, 0x61e, 0x4d6, 0x608, +0x4e6, 0x608, 0x4e6, 0x608, 0x4e6, 0x457, 0x35f, 0x457, 0x35f, 0x236, 0x168, +0x236, 0x168, 0x2a7, 0x204, 0x2a7, 0x204, 0x2d6, 0x25f, 0x2d6, 0x25f, 0x20e, +0x1c4, 0x20e, 0x1c4, 0x156, 0x138, 0x156, 0x138, 0x156, 0x138, 0x129, 0x136, +0x129, 0x136, 0xab, 0xe0, 0xab, 0xe0, 0x1, 0x5e, 0x1, 0x5e, 0xfed1, +0xff52, 0xfed1, 0xff52, 0xfbf2, 0xfc95, 0xfbf2, 0xfc95, 0xfbf2, 0xfc95, 0xfaab, 0xfb6c, +0xfaab, 0xfb6c, 0xfa91, 0xfb6e, 0xfa91, 0xfb6e, 0xf997, 0xfa8b, 0xf997, 0xfa8b, 0xf82d, +0xf936, 0xf82d, 0xf936, 0xf70a, 0xf824, 0xf70a, 0xf824, 0xf65a, 0xf783, 0xf65a, 0xf783, +0xf65a, 0xf783, 0xf794, 0xf8c9, 0xf794, 0xf8c9, 0xf7c5, 0xf903, 0xf7c5, 0xf903, 0xf71f, +0xf864, 0xf71f, 0xf864, 0xf73f, 0xf889, 0xf73f, 0xf889, 0xf6c7, 0xf816, 0xf6c7, 0xf816, +0xf78d, 0xf8de, 0xf78d, 0xf8de, 0xf78d, 0xf8de, 0xf7cc, 0xf91e, 0xf7cc, 0xf91e, 0xf723, +0xf874, 0xf723, 0xf874, 0xf6c7, 0xf817, 0xf6c7, 0xf817, 0xf8f9, 0xfa46, 0xf8f9, 0xfa46, +0xf954, 0xfa9d, 0xf954, 0xfa9d, 0xf954, 0xfa9d, 0xf97c, 0xfabf, 0xf97c, 0xfabf, 0xfa6e, +0xfbab, 0xfa6e, 0xfbab, 0xf8b9, 0xf9ed, 0xf8b9, 0xf9ed, 0xf9d8, 0xfb02, 0xf9d8, 0xfb02, +0xfa5a, 0xfb77, 0xfa5a, 0xfb77, 0xfadf, 0xfbec, 0xfadf, 0xfbec, 0xfadf, 0xfbec, 0xfb5c, +0xfc57, 0xfb5c, 0xfc57, 0xfbd5, 0xfcbc, 0xfbd5, 0xfcbc, 0xfd9d, 0xfe6c, 0xfd9d, 0xfe6c, +0xfe74, 0xff29, 0xfe74, 0xff29, 0xfff8, 0x91, 0xfff8, 0x91, 0x10, 0x8b, 0x10, +0x8b, 0x10, 0x8b, 0xffcc, 0x26, 0xffcc, 0x26, 0x90, 0xc8, 0x90, 0xc8, +0x25f, 0x273, 0x25f, 0x273, 0x390, 0x380, 0x390, 0x380, 0x3dd, 0x3a9, 0x3dd, +0x3a9, 0x3dd, 0x3a9, 0x53d, 0x4e6, 0x53d, 0x4e6, 0x6a4, 0x62b, 0x6a4, 0x62b, +0x80b, 0x773, 0x80b, 0x773, 0x940, 0x88b, 0x940, 0x88b, 0xac1, 0x9f2, 0xac1, +0x9f2, 0xad6, 0x9f0, 0xad6, 0x9f0, 0xad6, 0x9f0, 0xa0f, 0x915, 0xa0f, 0x915, +0xaed, 0x9e4, 0xaed, 0x9e4, 0xb32, 0xa1f, 0xb32, 0xa1f, 0xb42, 0xa28, 0xb42, +0xa28, 0xbb1, 0xa94, 0xbb1, 0xa94, 0xc7d, 0xb61, 0xc7d, 0xb61, 0xc7d, 0xb61, +0xddc, 0xcc3, 0xddc, 0xcc3, 0xe85, 0xd74, 0xe85, 0xd74, 0xed4, 0xdcb, 0xed4, +0xdcb, 0xe77, 0xd7a, 0xe77, 0xd7a, 0xf27, 0xe36, 0xf27, 0xe36, 0xf27, 0xe36, +0x10ad, 0xfc9, 0x10ad, 0xfc9, 0x1083, 0xfad, 0x1083, 0xfad, 0xf69, 0xea0, 0xf69, +0xea0, 0xea2, 0xde5, 0xea2, 0xde5, 0xf3c, 0xe8b, 0xf3c, 0xe8b, 0xf60, 0xeb7, +0xf60, 0xeb7, 0xf60, 0xeb7, 0xf97, 0xef7, 0xf97, 0xef7, 0xecf, 0xe34, 0xecf, +0xe34, 0xdaa, 0xd13, 0xdaa, 0xd13, 0xde0, 0xd4c, 0xde0, 0xd4c, 0xd88, 0xcf5, +0xd88, 0xcf5, 0xd79, 0xce7, 0xd79, 0xce7, 0xd79, 0xce7, 0xbf1, 0xb5e, 0xbf1, +0xb5e, 0xb1c, 0xa88, 0xb1c, 0xa88, 0xb84, 0xaf0, 0xb84, 0xaf0, 0xbe3, 0xb4e, +0xbe3, 0xb4e, 0xb97, 0xb03, 0xb97, 0xb03, 0xb97, 0xb03, 0xb54, 0xac3, 0xb54, +0xac3, 0xb35, 0xaa6, 0xb35, 0xaa6, 0xafd, 0xa73, 0xafd, 0xa73, 0xb74, 0xaf1, +0xb74, 0xaf1, 0xac9, 0xa4f, 0xac9, 0xa4f, 0xa67, 0x9f7, 0xa67, 0x9f7, 0xa67, +0x9f7, 0xa42, 0x9dd, 0xa42, 0x9dd, 0xac6, 0xa6d, 0xac6, 0xa6d, 0xa98, 0xa4c, +0xa98, 0xa4c, 0xa4b, 0xa0d, 0xa4b, 0xa0d, 0x99f, 0x96e, 0x99f, 0x96e, 0x9a8, +0x982, 0x9a8, 0x982, 0x9a8, 0x982, 0xac0, 0xaa5, 0xac0, 0xaa5, 0xaa2, 0xa90, +0xaa2, 0xa90, 0xa27, 0xa1b, 0xa27, 0xa1b, 0x944, 0x93b, 0x944, 0x93b, 0x9f3, +0x9eb, 0x9f3, 0x9eb, 0x9f3, 0x9eb, 0xb1f, 0xb13, 0xb1f, 0xb13, 0xc0e, 0xbfb, +0xc0e, 0xbfb, 0xcb3, 0xc96, 0xcb3, 0xc96, 0xc45, 0xc19, 0xc45, 0xc19, 0xbda, +0xb9c, 0xbda, 0xb9c, 0xc50, 0xbfe, 0xc50, 0xbfe, 0xc50, 0xbfe, 0xc05, 0xb9b, +0xc05, 0xb9b, 0xbd7, 0xb53, 0xbd7, 0xb53, 0xa87, 0x9e8, 0xa87, 0x9e8, 0x9b5, +0x8f9, 0x9b5, 0x8f9, 0xadd, 0xa04, 0xadd, 0xa04, 0xa4c, 0x956, 0xa4c, 0x956, +0xa4c, 0x956, 0x96c, 0x859, 0x96c, 0x859, 0x88b, 0x75c, 0x88b, 0x75c, 0x84a, +0x701, 0x84a, 0x701, 0x84b, 0x6e9, 0x84b, 0x6e9, 0x882, 0x709, 0x882, 0x709, +0x882, 0x709, 0x799, 0x60d, 0x799, 0x60d, 0x6ab, 0x50d, 0x6ab, 0x50d, 0x774, +0x5c6, 0x774, 0x5c6, 0x8e5, 0x72a, 0x8e5, 0x72a, 0x9a3, 0x7dc, 0x9a3, 0x7dc, +0x922, 0x752, 0x922, 0x752, 0x922, 0x752, 0x93e, 0x766, 0x93e, 0x766, 0x97b, +0x79d, 0x97b, 0x79d, 0x90b, 0x728, 0x90b, 0x728, 0x863, 0x67c, 0x863, 0x67c, +0x75c, 0x571, 0x75c, 0x571, 0x60b, 0x41e, 0x60b, 0x41e, 0x60b, 0x41e, 0x749, +0x55a, 0x749, 0x55a, 0x815, 0x625, 0x815, 0x625, 0x847, 0x656, 0x847, 0x656, +0x7dd, 0x5ed, 0x7dd, 0x5ed, 0x6f2, 0x503, 0x6f2, 0x503, 0x6f2, 0x503, 0x731, +0x546, 0x731, 0x546, 0x75e, 0x579, 0x75e, 0x579, 0x737, 0x559, 0x737, 0x559, +0x6b7, 0x4e3, 0x6b7, 0x4e3, 0x7a7, 0x5e0, 0x7a7, 0x5e0, 0x86b, 0x6b5, 0x86b, +0x6b5, 0x86b, 0x6b5, 0x924, 0x782, 0x924, 0x782, 0x8df, 0x756, 0x8df, 0x756, +0x90d, 0x7a0, 0x90d, 0x7a0, 0x9f1, 0x8a4, 0x9f1, 0x8a4, 0xa9f, 0x976, 0xa9f, +0x976, 0xa9f, 0x976, 0xadb, 0x9da, 0xadb, 0x9da, 0xa66, 0x991, 0xa66, 0x991, +0x97e, 0x8d6, 0x97e, 0x8d6, 0x93b, 0x8c3, 0x93b, 0x8c3, 0xa1e, 0x9d8, 0xa1e, +0x9d8, 0x957, 0x944, 0x957, 0x944, 0x957, 0x944, 0x89a, 0x8bb, 0x89a, 0x8bb, +0x77a, 0x7ce, 0x77a, 0x7ce, 0x5f8, 0x67d, 0x5f8, 0x67d, 0x420, 0x4d5, 0x420, +0x4d5, 0x26c, 0x350, 0x26c, 0x350, 0x61, 0x170, 0x61, 0x170, 0x61, 0x170, +0xff20, 0x57, 0xff20, 0x57, 0xfe1c, 0xff78, 0xfe1c, 0xff78, 0xfcfe, 0xfe7d, 0xfcfe, +0xfe7d, 0xfd66, 0xff03, 0xfd66, 0xff03, 0xfd0f, 0xfec9, 0xfd0f, 0xfec9, 0xfd0f, 0xfec9, +0xfcf2, 0xfec6, 0xfcf2, 0xfec6, 0xfcec, 0xfed8, 0xfcec, 0xfed8, 0xfc5f, 0xfe63, 0xfc5f, +0xfe63, 0xfb63, 0xfd7d, 0xfb63, 0xfd7d, 0xfa37, 0xfc68, 0xfa37, 0xfc68, 0xf847, 0xfa91, +0xf847, 0xfa91, 0xf847, 0xfa91, 0xf60c, 0xf870, 0xf60c, 0xf870, 0xf498, 0xf718, 0xf498, +0xf718, 0xf335, 0xf5d3, 0xf335, 0xf5d3, 0xf116, 0xf3d6, 0xf116, 0xf3d6, 0xef5a, 0xf240, +0xef5a, 0xf240, 0xee7b, 0xf189, 0xee7b, 0xf189, 0xee7b, 0xf189, 0xeda5, 0xf0de, 0xeda5, +0xf0de, 0xed01, 0xf069, 0xed01, 0xf069, 0xecab, 0xf043, 0xecab, 0xf043, 0xeb21, 0xeeeb, +0xeb21, 0xeeeb, 0xe95e, 0xed5a, 0xe95e, 0xed5a, 0xe95e, 0xed5a, 0xe90b, 0xed3a, 0xe90b, +0xed3a, 0xe7f2, 0xec50, 0xe7f2, 0xec50, 0xe630, 0xeabc, 0xe630, 0xeabc, 0xe484, 0xe93a, +0xe484, 0xe93a, 0xe225, 0xe6ff, 0xe225, 0xe6ff, 0xe051, 0xe54a, 0xe051, 0xe54a, 0xe051, +0xe54a, 0xdefd, 0xe40e, 0xdefd, 0xe40e, 0xdd57, 0xe278, 0xdd57, 0xe278, 0xdc6b, 0xe194, +0xdc6b, 0xe194, 0xdc0e, 0xe136, 0xdc0e, 0xe136, 0xdbae, 0xe0cd, 0xdbae, 0xe0cd, 0xdb2c, +0xe038, 0xdb2c, 0xe038, 0xdb2c, 0xe038, 0xdb5d, 0xe04f, 0xdb5d, 0xe04f, 0xdaea, 0xdfbc, +0xdaea, 0xdfbc, 0xdb4a, 0xdff4, 0xdb4a, 0xdff4, 0xdb8f, 0xe00c, 0xdb8f, 0xe00c, 0xdb92, +0xdfdd, 0xdb92, 0xdfdd, 0xdb92, 0xdfdd, 0xdc24, 0xe03d, 0xdc24, 0xe03d, 0xdb8d, 0xdf71, +0xdb8d, 0xdf71, 0xdbf1, 0xdfa0, 0xdbf1, 0xdfa0, 0xde4c, 0xe1c9, 0xde4c, 0xe1c9, 0xe05c, +0xe3a9, 0xe05c, 0xe3a9, 0xe0f8, 0xe419, 0xe0f8, 0xe419, 0xe0f8, 0xe419, 0xe24b, 0xe546, +0xe24b, 0xe546, 0xe253, 0xe52d, 0xe253, 0xe52d, 0xe339, 0xe5fa, 0xe339, 0xe5fa, 0xe446, +0xe6f3, 0xe446, 0xe6f3, 0xe4cb, 0xe76c, 0xe4cb, 0xe76c, 0xe542, 0xe7dc, 0xe542, 0xe7dc, +0xe542, 0xe7dc, 0xe5d5, 0xe86e, 0xe5d5, 0xe86e, 0xe757, 0xe9f4, 0xe757, 0xe9f4, 0xe7b1, +0xea56, 0xe7b1, 0xea56, 0xe813, 0xeac2, 0xe813, 0xeac2, 0xe813, 0xeace, 0xe813, 0xeace, +0xe813, 0xeace, 0xe83d, 0xeb03, 0xe83d, 0xeb03, 0xe879, 0xeb49, 0xe879, 0xeb49, 0xe85b, +0xeb32, 0xe85b, 0xeb32, 0xe74a, 0xea23, 0xe74a, 0xea23, 0xe743, 0xea1a, 0xe743, 0xea1a, +0xe82f, 0xeafc, 0xe82f, 0xeafc, 0xe82f, 0xeafc, 0xe986, 0xec42, 0xe986, 0xec42, 0xea6f, +0xed14, 0xea6f, 0xed14, 0xea42, 0xecc6, 0xea42, 0xecc6, 0xea5d, 0xecba, 0xea5d, 0xecba, +0xebdf, 0xee0e, 0xebdf, 0xee0e, 0xec59, 0xee52, 0xec59, 0xee52, 0xec59, 0xee52, 0xec02, +0xedc0, 0xec02, 0xedc0, 0xec6f, 0xedef, 0xec6f, 0xedef, 0xebeb, 0xed28, 0xebeb, 0xed28, +0xed73, 0xee6c, 0xed73, 0xee6c, 0xeeab, 0xef60, 0xeeab, 0xef60, 0xeeab, 0xef60, 0xf0c5, +0xf138, 0xf0c5, 0xf138, 0xf28d, 0xf2c0, 0xf28d, 0xf2c0, 0xf4a2, 0xf499, 0xf4a2, 0xf499, +0xf6df, 0xf6a0, 0xf6df, 0xf6a0, 0xf846, 0xf7d8, 0xf846, 0xf7d8, 0xfa3b, 0xf9a7, 0xfa3b, +0xf9a7, 0xfa3b, 0xf9a7, 0xfacd, 0xfa18, 0xfacd, 0xfa18, 0xfcd2, 0xfc06, 0xfcd2, 0xfc06, +0xff3d, 0xfe62, 0xff3d, 0xfe62, 0x156, 0x74, 0x156, 0x74, 0x266, 0x183, 0x266, +0x183, 0x4ac, 0x3cf, 0x4ac, 0x3cf, 0x4ac, 0x3cf, 0x591, 0x4bf, 0x591, 0x4bf, +0x6d7, 0x616, 0x6d7, 0x616, 0x7ca, 0x71a, 0x7ca, 0x71a, 0x656, 0x5ba, 0x656, +0x5ba, 0x713, 0x68a, 0x713, 0x68a, 0x713, 0x68a, 0x7c4, 0x74c, 0x7c4, 0x74c, +0x926, 0x8bd, 0x926, 0x8bd, 0xa37, 0x9d7, 0xa37, 0x9d7, 0xb9f, 0xb44, 0xb9f, +0xb44, 0xc48, 0xbeb, 0xc48, 0xbeb, 0xd72, 0xd0b, 0xd72, 0xd0b, 0xd72, 0xd0b, +0xe34, 0xdbd, 0xe34, 0xdbd, 0xe4b, 0xdbc, 0xe4b, 0xdbc, 0xd20, 0xc73, 0xd20, +0xc73, 0xbc9, 0xaf7, 0xbc9, 0xaf7, 0xcb9, 0xbbc, 0xcb9, 0xbbc, 0xcc4, 0xb97, +0xcc4, 0xb97, 0xcc4, 0xb97, 0xdd5, 0xc75, 0xdd5, 0xc75, 0xe96, 0xcff, 0xe96, +0xcff, 0xfd8, 0xe0a, 0xfd8, 0xe0a, 0x1083, 0xe7f, 0x1083, 0xe7f, 0x11d0, 0xf97, +0x11d0, 0xf97, 0x11d0, 0xf97, 0x11a4, 0xf39, 0x11a4, 0xf39, 0x11cf, 0xf37, 0x11cf, +0xf37, 0x132f, 0x106f, 0x132f, 0x106f, 0x1312, 0x1031, 0x1312, 0x1031, 0x13c9, 0x10cd, +0x13c9, 0x10cd, 0x13cf, 0x10c2, 0x13cf, 0x10c2, 0x13cf, 0x10c2, 0x13ea, 0x10d3, 0x13ea, +0x10d3, 0x1361, 0x1048, 0x1361, 0x1048, 0x1367, 0x1054, 0x1367, 0x1054, 0x13b2, 0x10ac, +0x13b2, 0x10ac, 0x1445, 0x1155, 0x1445, 0x1155, 0x1251, 0xf7c, 0x1251, 0xf7c, 0x1251, +0xf7c, 0x11b0, 0xefc, 0x11b0, 0xefc, 0x11ea, 0xf5c, 0x11ea, 0xf5c, 0x1035, 0xdcf, +0x1035, 0xdcf, 0x101c, 0xde2, 0x101c, 0xde2, 0xfed, 0xde0, 0xfed, 0xde0, 0xfed, +0xde0, 0xf46, 0xd66, 0xf46, 0xd66, 0xf3d, 0xd8b, 0xf3d, 0xd8b, 0xe60, 0xcd8, +0xe60, 0xcd8, 0xcd7, 0xb79, 0xcd7, 0xb79, 0xd0a, 0xbd2, 0xd0a, 0xbd2, 0xca6, +0xb92, 0xca6, 0xb92, 0xca6, 0xb92, 0xc48, 0xb54, 0xc48, 0xb54, 0xb7a, 0xaa3, +0xb7a, 0xaa3, 0xa39, 0x97b, 0xa39, 0x97b, 0x96b, 0x8c4, 0x96b, 0x8c4, 0x844, +0x7b1, 0x844, 0x7b1, 0x844, 0x7b1, 0x5cc, 0x548, 0x5cc, 0x548, 0x65b, 0x5e6, +0x65b, 0x5e6, 0x59c, 0x534, 0x59c, 0x534, 0x448, 0x3ec, 0x448, 0x3ec, 0x389, +0x338, 0x389, 0x338, 0x296, 0x250, 0x296, 0x250, 0x296, 0x250, 0x291, 0x257, +0x291, 0x257, 0x265, 0x236, 0x265, 0x236, 0x3c6, 0x3a3, 0x3c6, 0x3a3, 0x107, +0xf3, 0x107, 0xf3, 0x132, 0x12d, 0x132, 0x12d, 0x150, 0x15c, 0x150, 0x15c, +0x150, 0x15c, 0xd, 0x2b, 0xd, 0x2b, 0xff68, 0xff9b, 0xff68, 0xff9b, 0xffa6, +0xffed, 0xffa6, 0xffed, 0xfe76, 0xfed3, 0xfe76, 0xfed3, 0xff65, 0xffd8, 0xff65, 0xffd8, +0xff65, 0xffd8, 0xd9, 0x162, 0xd9, 0x162, 0x45, 0xe4, 0x45, 0xe4, 0xe8, +0x19e, 0xe8, 0x19e, 0xfe83, 0xff4d, 0xfe83, 0xff4d, 0xfea1, 0xff7f, 0xfea1, 0xff7f, +0xfb7f, 0xfc6f, 0xfb7f, 0xfc6f, 0xfb7f, 0xfc6f, 0xf9da, 0xfada, 0xf9da, 0xfada, 0xf8f8, +0xfa06, 0xf8f8, 0xfa06, 0xf8aa, 0xf9c3, 0xf8aa, 0xf9c3, 0xf8ad, 0xf9cf, 0xf8ad, 0xf9cf, +0xf833, 0xf95b, 0xf833, 0xf95b, 0xf711, 0xf83c, 0xf711, 0xf83c, 0xf711, 0xf83c, 0xf6d0, +0xf7fa, 0xf6d0, 0xf7fa, 0xf8c0, 0xf9e7, 0xf8c0, 0xf9e7, 0xf846, 0xf966, 0xf846, 0xf966, +0xf852, 0xf968, 0xf852, 0xf968, 0xf6c8, 0xf7d1, 0xf6c8, 0xf7d1, 0xf6c8, 0xf7d1, 0xf893, +0xf98b, 0xf893, 0xf98b, 0xf95d, 0xfa41, 0xf95d, 0xfa41, 0xfa07, 0xfad4, 0xfa07, 0xfad4, +0xfa29, 0xfadd, 0xfa29, 0xfadd, 0xfa45, 0xfade, 0xfa45, 0xfade, 0xfbda, 0xfc53, 0xfbda, +0xfc53, 0xfbda, 0xfc53, 0xfbfb, 0xfc53, 0xfbfb, 0xfc53, 0xfc20, 0xfc55, 0xfc20, 0xfc55, +0xfb21, 0xfb31, 0xfb21, 0xfb31, 0xfa31, 0xfa1a, 0xfa31, 0xfa1a, 0xfc0d, 0xfbce, 0xfc0d, +0xfbce, 0xfe03, 0xfd9b, 0xfe03, 0xfd9b, 0xfe03, 0xfd9b, 0xfe31, 0xfda1, 0xfe31, 0xfda1, +0x29, 0xff70, 0x29, 0xff70, 0xff8c, 0xfeac, 0xff8c, 0xfeac, 0xff32, 0xfe2a, 0xff32, +0xfe2a, 0x2a7, 0x17b, 0x2a7, 0x17b, 0x2a7, 0x17b, 0x2ab, 0x15c, 0x2ab, 0x15c, +0x2c6, 0x157, 0x2c6, 0x157, 0x44a, 0x2bd, 0x44a, 0x2bd, 0x2eb, 0x145, 0x2eb, +0x145, 0x612, 0x457, 0x612, 0x457, 0x7bf, 0x5f3, 0x7bf, 0x5f3, 0x7bf, 0x5f3, +0x7f8, 0x61f, 0x7f8, 0x61f, 0x8a1, 0x6bf, 0x8a1, 0x6bf, 0xa43, 0x85d, 0xa43, +0x85d, 0xb6a, 0x986, 0xb6a, 0x986, 0xbea, 0xa0b, 0xbea, 0xa0b, 0xd02, 0xb2c, +0xd02, 0xb2c, 0xd02, 0xb2c, 0xc94, 0xaca, 0xc94, 0xaca, 0xeb8, 0xcff, 0xeb8, +0xcff, 0xe2f, 0xc88, 0xe2f, 0xc88, 0xe43, 0xcb0, 0xe43, 0xcb0, 0xecc, 0xd4e, +0xecc, 0xd4e, 0xecc, 0xd4e, 0xf90, 0xe28, 0xf90, 0xe28, 0xf6b, 0xe18, 0xf6b, +0xe18, 0x1140, 0x1001, 0x1140, 0x1001, 0x11aa, 0x107e, 0x11aa, 0x107e, 0xf65, 0xe49, +0xf65, 0xe49, 0xe74, 0xd66, 0xe74, 0xd66, 0xe74, 0xd66, 0xeca, 0xdc6, 0xeca, +0xdc6, 0xf94, 0xe97, 0xf94, 0xe97, 0xf3f, 0xe45, 0xf3f, 0xe45, 0xfe5, 0xeea, +0xfe5, 0xeea, 0xe50, 0xd50, 0xe50, 0xd50, 0xf62, 0xe5a, 0xf62, 0xe5a, 0xf62, +0xe5a, 0xf27, 0xe13, 0xf27, 0xe13, 0xd13, 0xbf1, 0xd13, 0xbf1, 0xb40, 0xa0d, +0xb40, 0xa0d, 0x94d, 0x808, 0x94d, 0x808, 0x941, 0x7e8, 0x941, 0x7e8, 0x941, +0x7e8, 0xb4f, 0x9e2, 0xb4f, 0x9e2, 0xa71, 0x8f0, 0xa71, 0x8f0, 0x9b4, 0x81f, +0x9b4, 0x81f, 0xa61, 0x8ba, 0xa61, 0x8ba, 0xab2, 0x8fc, 0xab2, 0x8fc, 0xb94, +0x9cf, 0xb94, 0x9cf, 0xb94, 0x9cf, 0xb1a, 0x94a, 0xb1a, 0x94a, 0xaf5, 0x91c, +0xaf5, 0x91c, 0xb4c, 0x96d, 0xb4c, 0x96d, 0xbc1, 0x9df, 0xbc1, 0x9df, 0xb2f, +0x94c, 0xb2f, 0x94c, 0xc0c, 0xa2b, 0xc0c, 0xa2b, 0xc0c, 0xa2b, 0x8cc, 0x6ef, +0x8cc, 0x6ef, 0x844, 0x66b, 0x844, 0x66b, 0x706, 0x533, 0x706, 0x533, 0x70c, +0x53e, 0x70c, 0x53e, 0x808, 0x640, 0x808, 0x640, 0x808, 0x640, 0x50a, 0x345, +0x50a, 0x345, 0x594, 0x3d0, 0x594, 0x3d0, 0x6ea, 0x526, 0x6ea, 0x526, 0x83e, +0x676, 0x83e, 0x676, 0x8cc, 0x6fd, 0x8cc, 0x6fd, 0xaf1, 0x918, 0xaf1, 0x918, +0xaf1, 0x918, 0xa93, 0x8ab, 0xa93, 0x8ab, 0xa65, 0x86b, 0xa65, 0x86b, 0xa48, +0x837, 0xa48, 0x837, 0xb39, 0x90e, 0xb39, 0x90e, 0xba5, 0x95d, 0xba5, 0x95d, +0xd4d, 0xae4, 0xd4d, 0xae4, 0xd4d, 0xae4, 0xed6, 0xc4a, 0xed6, 0xc4a, 0x105a, +0xda9, 0x105a, 0xda9, 0x1261, 0xf8b, 0x1261, 0xf8b, 0x11be, 0xec2, 0x11be, 0xec2, +0x1176, 0xe55, 0x1176, 0xe55, 0x1176, 0xe55, 0xea8, 0xb64, 0xea8, 0xb64, 0xf6f, +0xc0a, 0xf6f, 0xc0a, 0x114b, 0xdc7, 0x114b, 0xdc7, 0x11b1, 0xe13, 0x11b1, 0xe13, +0x10d5, 0xd21, 0x10d5, 0xd21, 0x11a7, 0xde1, 0x11a7, 0xde1, 0x11a7, 0xde1, 0x1103, +0xd30, 0x1103, 0xd30, 0x109b, 0xcc2, 0x109b, 0xcc2, 0x117e, 0xda4, 0x117e, 0xda4, +0x1060, 0xc8c, 0x1060, 0xc8c, 0x1077, 0xcae, 0x1077, 0xcae, 0xfe7, 0xc2e, 0xfe7, +0xc2e, 0xfe7, 0xc2e, 0xf8c, 0xbea, 0xf8c, 0xbea, 0xfb5, 0xc2f, 0xfb5, 0xc2f, +0xda0, 0xa3a, 0xda0, 0xa3a, 0xb97, 0x856, 0xb97, 0x856, 0xad1, 0x7b8, 0xad1, +0x7b8, 0xad1, 0x7b8, 0x878, 0x58c, 0x878, 0x58c, 0x7a2, 0x4e5, 0x7a2, 0x4e5, +0x555, 0x2ca, 0x555, 0x2ca, 0x43b, 0x1e4, 0x43b, 0x1e4, 0x441, 0x21f, 0x441, +0x21f, 0x30a, 0x11e, 0x30a, 0x11e, 0x30a, 0x11e, 0x2aa, 0xf6, 0x2aa, 0xf6, +0x35d, 0x1e1, 0x35d, 0x1e1, 0x2f4, 0x1b0, 0x2f4, 0x1b0, 0x249, 0x13d, 0x249, +0x13d, 0xff93, 0xfebf, 0xff93, 0xfebf, 0xff93, 0xfebf, 0xff86, 0xfee8, 0xff86, 0xfee8, +0xff26, 0xfec0, 0xff26, 0xfec0, 0xfd2c, 0xfcfb, 0xfd2c, 0xfcfb, 0xfd82, 0xfd86, 0xfd82, +0xfd86, 0xfbea, 0xfc22, 0xfbea, 0xfc22, 0xfb8f, 0xfbfa, 0xfb8f, 0xfbfa, 0xfb8f, 0xfbfa, +0xf924, 0xf9c1, 0xf924, 0xf9c1, 0xfd04, 0xfdd2, 0xfd04, 0xfdd2, 0xf9fc, 0xfafa, 0xf9fc, +0xfafa, 0xf858, 0xf984, 0xf858, 0xf984, 0xf9aa, 0xfb04, 0xf9aa, 0xfb04, 0xf85e, 0xf9e4, +0xf85e, 0xf9e4, 0xf85e, 0xf9e4, 0xf9e5, 0xfb96, 0xf9e5, 0xfb96, 0xf812, 0xf9ed, 0xf812, +0xf9ed, 0xf986, 0xfb89, 0xf986, 0xfb89, 0xf6e3, 0xf90e, 0xf6e3, 0xf90e, 0xf78e, 0xf9de, +0xf78e, 0xf9de, 0xf78e, 0xf9de, 0xf540, 0xf7b5, 0xf540, 0xf7b5, 0xf3b5, 0xf64d, 0xf3b5, +0xf64d, 0xf24e, 0xf508, 0xf24e, 0xf508, 0xf196, 0xf471, 0xf196, 0xf471, 0xf23a, 0xf534, +0xf23a, 0xf534, 0xf195, 0xf4ae, 0xf195, 0xf4ae, 0xf195, 0xf4ae, 0xf27c, 0xf5b2, 0xf27c, +0xf5b2, 0xeffb, 0xf34d, 0xeffb, 0xf34d, 0xf114, 0xf482, 0xf114, 0xf482, 0xeff8, 0xf381, +0xeff8, 0xf381, 0xeffd, 0xf39f, 0xeffd, 0xf39f, 0xee2d, 0xf1e7, 0xee2d, 0xf1e7, 0xee2d, +0xf1e7, 0xee15, 0xf1e6, 0xee15, 0xf1e6, 0xecca, 0xf0b0, 0xecca, 0xf0b0, 0xebe5, 0xefdf, +0xebe5, 0xefdf, 0xed6f, 0xf17c, 0xed6f, 0xf17c, 0xec35, 0xf052, 0xec35, 0xf052, 0xec35, +0xf052, 0xebbf, 0xefe9, 0xebbf, 0xefe9, 0xea95, 0xeecb, 0xea95, 0xeecb, 0xec41, 0xf07f, +0xec41, 0xf07f, 0xeda0, 0xf1e2, 0xeda0, 0xf1e2, 0xedee, 0xf231, 0xedee, 0xf231, 0xec0e, +0xf04f, 0xec0e, 0xf04f, 0xec0e, 0xf04f, 0xed61, 0xf19c, 0xed61, 0xf19c, 0xed35, 0xf165, +0xed35, 0xf165, 0xed62, 0xf182, 0xed62, 0xf182, 0xec59, 0xf066, 0xec59, 0xf066, 0xeb33, +0xef28, 0xeb33, 0xef28, 0xeba9, 0xef81, 0xeba9, 0xef81, 0xeba9, 0xef81, 0xeaa0, 0xee57, +0xeaa0, 0xee57, 0xed20, 0xf0b3, 0xed20, 0xf0b3, 0xec71, 0xefde, 0xec71, 0xefde, 0xed30, +0xf073, 0xed30, 0xf073, 0xebe9, 0xef00, 0xebe9, 0xef00, 0xebe9, 0xef00, 0xecb4, 0xef9e, +0xecb4, 0xef9e, 0xed68, 0xf025, 0xed68, 0xf025, 0xec5f, 0xeeef, 0xec5f, 0xeeef, 0xeb6c, +0xedd1, 0xeb6c, 0xedd1, 0xeb62, 0xed9e, 0xeb62, 0xed9e, 0xed3d, 0xef52, 0xed3d, 0xef52, +0xed3d, 0xef52, 0xedca, 0xefbd, 0xedca, 0xefbd, 0xef7e, 0xf153, 0xef7e, 0xf153, 0xedc0, +0xef7c, 0xedc0, 0xef7c, 0xf007, 0xf1af, 0xf007, 0xf1af, 0xeff8, 0xf192, 0xeff8, 0xf192, +0xefce, 0xf160, 0xefce, 0xf160, 0xefce, 0xf160, 0xf009, 0xf199, 0xf009, 0xf199, 0xeebb, +0xf04e, 0xeebb, 0xf04e, 0xeedf, 0xf07b, 0xeedf, 0xf07b, 0xee15, 0xefbf, 0xee15, 0xefbf, +0xef78, 0xf134, 0xef78, 0xf134, 0xef78, 0xf134, 0xf036, 0xf208, 0xf036, 0xf208, 0xf00e, +0xf1f9, 0xf00e, 0xf1f9, 0xecf9, 0xeefe, 0xecf9, 0xeefe, 0xec86, 0xeea7, 0xec86, 0xeea7, +0xeae8, 0xed24, 0xeae8, 0xed24, 0xe864, 0xeaba, 0xe864, 0xeaba, 0xe864, 0xeaba, 0xe824, +0xea92, 0xe824, 0xea92, 0xe448, 0xe6cb, 0xe448, 0xe6cb, 0xe197, 0xe42c, 0xe197, 0xe42c, +0xe181, 0xe422, 0xe181, 0xe422, 0xe152, 0xe3fb, 0xe152, 0xe3fb, 0xe0c4, 0xe36e, 0xe0c4, +0xe36e, 0xe0c4, 0xe36e, 0xdf8e, 0xe236, 0xdf8e, 0xe236, 0xe01e, 0xe2bd, 0xe01e, 0xe2bd, +0xe184, 0xe413, 0xe184, 0xe413, 0xe41b, 0xe697, 0xe41b, 0xe697, 0xe50f, 0xe772, 0xe50f, +0xe772, 0xe50f, 0xe772, 0xe37d, 0xe5c2, 0xe37d, 0xe5c2, 0xe429, 0xe64d, 0xe429, 0xe64d, +0xe5ae, 0xe7ae, 0xe5ae, 0xe7ae, 0xe73c, 0xe916, 0xe73c, 0xe916, 0xe942, 0xeaf5, 0xe942, +0xeaf5, 0xec04, 0xed8f, 0xec04, 0xed8f, 0xec04, 0xed8f, 0xec3b, 0xed9e, 0xec3b, 0xed9e, +0xef1d, 0xf05a, 0xef1d, 0xf05a, 0xf1a1, 0xf2ba, 0xf1a1, 0xf2ba, 0xf1f6, 0xf2eb, 0xf1f6, +0xf2eb, 0xf42e, 0xf504, 0xf42e, 0xf504, 0xf3ce, 0xf487, 0xf3ce, 0xf487, 0xf3ce, 0xf487, +0xf601, 0xf6a0, 0xf601, 0xf6a0, 0xfa4f, 0xfad7, 0xfa4f, 0xfad7, 0xf92e, 0xf9a3, 0xf92e, +0xf9a3, 0xfc77, 0xfcdb, 0xfc77, 0xfcdb, 0xfe79, 0xfecf, 0xfe79, 0xfecf, 0xfe79, 0xfecf, +0xfb4a, 0xfb92, 0xfb4a, 0xfb92, 0xfd83, 0xfdbf, 0xfd83, 0xfdbf, 0xfe2a, 0xfe5b, 0xfe2a, +0xfe5b, 0xf0, 0x115, 0xf0, 0x115, 0x1b7, 0x1ce, 0x1b7, 0x1ce, 0x257, 0x260, +0x257, 0x260, 0x257, 0x260, 0x402, 0x3f8, 0x402, 0x3f8, 0x5a2, 0x584, 0x5a2, +0x584, 0x959, 0x921, 0x959, 0x921, 0x8a3, 0x84e, 0x8a3, 0x84e, 0xa5d, 0x9e7, +0xa5d, 0x9e7, 0xc20, 0xb84, 0xc20, 0xb84, 0xc20, 0xb84, 0xb36, 0xa6f, 0xb36, +0xa6f, 0xdff, 0xd09, 0xdff, 0xd09, 0x1019, 0xef0, 0x1019, 0xef0, 0xf3c, 0xddb, +0xf3c, 0xddb, 0x1109, 0xf6f, 0x1109, 0xf6f, 0x1109, 0xf6f, 0x1405, 0x122e, 0x1405, +0x122e, 0x144b, 0x1236, 0x144b, 0x1236, 0x159d, 0x134a, 0x159d, 0x134a, 0x1689, 0x13f9, +0x1689, 0x13f9, 0x178f, 0x14c3, 0x178f, 0x14c3, 0x1b68, 0x1863, 0x1b68, 0x1863, 0x1b68, +0x1863, 0x1ab1, 0x1776, 0x1ab1, 0x1776, 0x1d28, 0x19bd, 0x1d28, 0x19bd, 0x1bbf, 0x1829, +0x1bbf, 0x1829, 0x1b10, 0x1756, 0x1b10, 0x1756, 0x1c77, 0x189f, 0x1c77, 0x189f, 0x1b02, +0x1715, 0x1b02, 0x1715, 0x1b02, 0x1715, 0x1d0e, 0x1913, 0x1d0e, 0x1913, 0x1cc6, 0x18c6, +0x1cc6, 0x18c6, 0x1ab4, 0x16b8, 0x1ab4, 0x16b8, 0x18d0, 0x14e1, 0x18d0, 0x14e1, 0x1bb0, +0x17d5, 0x1bb0, 0x17d5, 0x1bb0, 0x17d5, 0x18c9, 0x150b, 0x18c9, 0x150b, 0x16c4, 0x132a, +0x16c4, 0x132a, 0x156a, 0x11fc, 0x156a, 0x11fc, 0x14b3, 0x1176, 0x14b3, 0x1176, 0x14a4, +0x119f, 0x14a4, 0x119f, 0x1375, 0x10ab, 0x1375, 0x10ab, 0x1375, 0x10ab, 0x1316, 0x108b, +0x1316, 0x108b, 0xeaf, 0xc67, 0xeaf, 0xc67, 0xe9f, 0xc9b, 0xe9f, 0xc9b, 0x1106, +0xf47, 0x1106, 0xf47, 0xe2a, 0xcb0, 0xe2a, 0xcb0, 0xe2a, 0xcb0, 0xc69, 0xb33, +0xc69, 0xb33, 0x8da, 0x7e5, 0x8da, 0x7e5, 0x752, 0x69c, 0x752, 0x69c, 0x8e1, +0x868, 0x8e1, 0x868, 0x660, 0x620, 0x660, 0x620, 0x723, 0x719, 0x723, 0x719, +0x723, 0x719, 0xfefb, 0xff21, 0xfefb, 0xff21, 0x267, 0x2ba, 0x267, 0x2ba, 0xfebb, +0xff35, 0xfebb, 0xff35, 0xfcf7, 0xfd94, 0xfcf7, 0xfd94, 0xfd9b, 0xfe58, 0xfd9b, 0xfe58, +0xf8d8, 0xf9b0, 0xf8d8, 0xf9b0, 0xf8d8, 0xf9b0, 0xfd0f, 0xfdfe, 0xfd0f, 0xfdfe, 0xf94b, +0xfa4f, 0xf94b, 0xfa4f, 0xfd40, 0xfe55, 0xfd40, 0xfe55, 0xf946, 0xfa6a, 0xf946, 0xfa6a, +0xfae7, 0xfc18, 0xfae7, 0xfc18, 0xfae7, 0xfc18, 0xf93c, 0xfa78, 0xf93c, 0xfa78, 0xf9d1, +0xfb17, 0xf9d1, 0xfb17, 0xf962, 0xfab1, 0xf962, 0xfab1, 0xf9f6, 0xfb4e, 0xf9f6, 0xfb4e, +0xfcdd, 0xfe40, 0xfcdd, 0xfe40, 0xf9ef, 0xfb5a, 0xf9ef, 0xfb5a, 0xf9ef, 0xfb5a, 0xfc78, +0xfded, 0xfc78, 0xfded, 0xfa60, 0xfbe0, 0xfa60, 0xfbe0, 0xfdc3, 0xff4e, 0xfdc3, 0xff4e, +0xf9e7, 0xfb7d, 0xf9e7, 0xfb7d, 0xfa2a, 0xfbcc, 0xfa2a, 0xfbcc, 0xf911, 0xfabe, 0xf911, +0xfabe, 0xf911, 0xfabe, 0xf713, 0xf8cc, 0xf713, 0xf8cc, 0xf81b, 0xf9de, 0xf81b, 0xf9de, +0xf81c, 0xf9e7, 0xf81c, 0xf9e7, 0xf577, 0xf74a, 0xf577, 0xf74a, 0xf6c1, 0xf899, 0xf6c1, +0xf899, 0xf6c1, 0xf899, 0xf7a7, 0xf981, 0xf7a7, 0xf981, 0xf639, 0xf812, 0xf639, 0xf812, +0xf89d, 0xfa71, 0xf89d, 0xfa71, 0xf785, 0xf951, 0xf785, 0xf951, 0xf894, 0xfa53, 0xf894, +0xfa53, 0xf8a0, 0xfa4c, 0xf8a0, 0xfa4c, 0xf8a0, 0xfa4c, 0xfa4c, 0xfbe2, 0xfa4c, 0xfbe2, +0xf821, 0xf99a, 0xf821, 0xf99a, 0xf7f7, 0xf94f, 0xf7f7, 0xf94f, 0xf906, 0xfa38, 0xf906, +0xfa38, 0xfb2e, 0xfc36, 0xfb2e, 0xfc36, 0xfae6, 0xfbbf, 0xfae6, 0xfbbf, 0xfae6, 0xfbbf, +0xfd08, 0xfdaf, 0xfd08, 0xfdaf, 0xfb24, 0xfb96, 0xfb24, 0xfb96, 0xfbe6, 0xfc20, 0xfbe6, +0xfc20, 0x4f, 0x50, 0x4f, 0x50, 0x25, 0xffed, 0x25, 0xffed, 0x25, 0xffed, +0x34a, 0x2d8, 0x34a, 0x2d8, 0x364, 0x2ba, 0x364, 0x2ba, 0x71e, 0x63d, 0x71e, +0x63d, 0x800, 0x6ec, 0x800, 0x6ec, 0x8c5, 0x781, 0x8c5, 0x781, 0x87f, 0x711, +0x87f, 0x711, 0x87f, 0x711, 0x94f, 0x7bb, 0x94f, 0x7bb, 0x7dc, 0x629, 0x7dc, +0x629, 0x90b, 0x73e, 0x90b, 0x73e, 0xe2a, 0xc4a, 0xe2a, 0xc4a, 0xfc4, 0xdd9, +0xfc4, 0xdd9, 0x10da, 0xeea, 0x10da, 0xeea, 0x10da, 0xeea, 0x1215, 0x1027, 0x1215, +0x1027, 0x1095, 0xeb0, 0x1095, 0xeb0, 0x110d, 0xf37, 0x110d, 0xf37, 0x1368, 0x11a9, +0x1368, 0x11a9, 0xec5, 0xd21, 0xec5, 0xd21, 0xec5, 0xd21, 0xe76, 0xcf1, 0xe76, +0xcf1, 0x10ed, 0xf8d, 0x10ed, 0xf8d, 0xf6c, 0xe32, 0xf6c, 0xe32, 0x104c, 0xf3c, +0x104c, 0xf3c, 0xfe3, 0xefd, 0xfe3, 0xefd, 0xb06, 0xa4c, 0xb06, 0xa4c, 0xb06, +0xa4c, 0xbc0, 0xb31, 0xbc0, 0xb31, 0xc59, 0xbf4, 0xc59, 0xbf4, 0xca1, 0xc64, +0xca1, 0xc64, 0x6d9, 0x6c2, 0x6d9, 0x6c2, 0x5e8, 0x5f4, 0x5e8, 0x5f4, 0x494, +0x4be, 0x494, 0x4be, 0x494, 0x4be, 0x3fb, 0x43e, 0x3fb, 0x43e, 0x62e, 0x688, +0x62e, 0x688, 0x203, 0x26d, 0x203, 0x26d, 0x249, 0x2bf, 0x249, 0x2bf, 0xf8, +0x175, 0xf8, 0x175, 0xf8, 0x175, 0x2b0, 0x330, 0x2b0, 0x330, 0x1fc, 0x27a, +0x1fc, 0x27a, 0x4e, 0xc6, 0x4e, 0xc6, 0xfe15, 0xfe84, 0xfe15, 0xfe84, 0xfffd, +0x5f, 0xfffd, 0x5f, 0x137, 0x18a, 0x137, 0x18a, 0x137, 0x18a, 0x26a, 0x2ab, +0x26a, 0x2ab, 0xff33, 0xff61, 0xff33, 0xff61, 0xfda1, 0xfdbb, 0xfda1, 0xfdbb, 0x9, +0xe, 0x9, 0xe, 0xffed, 0xffdd, 0xffed, 0xffdd, 0xffa2, 0xff7e, 0xffa2, 0xff7e, +0xffa2, 0xff7e, 0xfeba, 0xfe82, 0xfeba, 0xfe82, 0x9a, 0x4e, 0x9a, 0x4e, 0xff96, +0xff37, 0xff96, 0xff37, 0x44f, 0x3de, 0x44f, 0x3de, 0x266, 0x1e4, 0x266, 0x1e4, +0x266, 0x1e4, 0x428, 0x396, 0x428, 0x396, 0x381, 0x2df, 0x381, 0x2df, 0x15b, +0xa9, 0x15b, 0xa9, 0x560, 0x49f, 0x560, 0x49f, 0x302, 0x231, 0x302, 0x231, +0x170, 0x8d, 0x170, 0x8d, 0x170, 0x8d, 0x2ed, 0x1f7, 0x2ed, 0x1f7, 0x29, +0xff1f, 0x29, 0xff1f, 0x4d3, 0x3b2, 0x4d3, 0x3b2, 0x9bc, 0x881, 0x9bc, 0x881, +0x687, 0x530, 0x687, 0x530, 0x78a, 0x614, 0x78a, 0x614, 0x78a, 0x614, 0x71f, +0x586, 0x71f, 0x586, 0x861, 0x6a2, 0x861, 0x6a2, 0x8e5, 0x6fd, 0x8e5, 0x6fd, +0xe35, 0xc21, 0xe35, 0xc21, 0xa25, 0x7e2, 0xa25, 0x7e2, 0xa25, 0x7e2, 0xd91, +0xb1d, 0xd91, 0xb1d, 0x111e, 0xe77, 0x111e, 0xe77, 0x11e8, 0xf0d, 0x11e8, 0xf0d, +0x153d, 0x122e, 0x153d, 0x122e, 0x14fa, 0x11b8, 0x14fa, 0x11b8, 0x169d, 0x1327, 0x169d, +0x1327, 0x169d, 0x1327, 0x14bf, 0x1118, 0x14bf, 0x1118, 0x18b5, 0x14e0, 0x18b5, 0x14e0, +0x1690, 0x1290, 0x1690, 0x1290, 0x1908, 0x14e2, 0x1908, 0x14e2, 0x15c5, 0x117e, 0x15c5, +0x117e, 0x16c2, 0x1260, 0x16c2, 0x1260, 0x16c2, 0x1260, 0x1941, 0x14ca, 0x1941, 0x14ca, +0x1804, 0x1380, 0x1804, 0x1380, 0x18e4, 0x1459, 0x18e4, 0x1459, 0x173d, 0x12b4, 0x173d, +0x12b4, 0x180e, 0x138e, 0x180e, 0x138e, 0x180e, 0x138e, 0x192f, 0x14c0, 0x192f, 0x14c0, +0x1b50, 0x16f9, 0x1b50, 0x16f9, 0x175e, 0x1327, 0x175e, 0x1327, 0x17ae, 0x139e, 0x17ae, +0x139e, 0x1916, 0x1535, 0x1916, 0x1535, 0x1780, 0x13d3, 0x1780, 0x13d3, 0x1780, 0x13d3, +0x16c9, 0x1355, 0x16c9, 0x1355, 0x170d, 0x13d8, 0x170d, 0x13d8, 0x1597, 0x12a4, 0x1597, +0x12a4, 0x1619, 0x136c, 0x1619, 0x136c, 0x1509, 0x12a4, 0x1509, 0x12a4, 0x1509, 0x12a4, +0x1438, 0x121d, 0x1438, 0x121d, 0x12e9, 0x1119, 0x12e9, 0x1119, 0x129a, 0x1114, 0x129a, +0x1114, 0x1195, 0x1059, 0x1195, 0x1059, 0xf9e, 0xeab, 0xf9e, 0xeab, 0xe11, 0xd64, +0xe11, 0xd64, 0xe11, 0xd64, 0xbcf, 0xb66, 0xbcf, 0xb66, 0xc2b, 0xc04, 0xc2b, +0xc04, 0xa10, 0xa28, 0xa10, 0xa28, 0xa97, 0xae9, 0xa97, 0xae9, 0x8c3, 0x94d, +0x8c3, 0x94d, 0x67b, 0x739, 0x67b, 0x739, 0x67b, 0x739, 0x70d, 0x7fb, 0x70d, +0x7fb, 0x539, 0x653, 0x539, 0x653, 0x217, 0x35b, 0x217, 0x35b, 0x336, 0x4a1, +0x336, 0x4a1, 0xfd8e, 0xff1c, 0xfd8e, 0xff1c, 0xfd8e, 0xff1c, 0xfe9e, 0x4c, 0xfe9e, +0x4c, 0xfbaa, 0xfd77, 0xfbaa, 0xfd77, 0xf5b6, 0xf7a0, 0xf5b6, 0xf7a0, 0xf8ae, 0xfab3, +0xf8ae, 0xfab3, 0xf575, 0xf794, 0xf575, 0xf794, 0xf613, 0xf84a, 0xf613, 0xf84a, 0xf613, +0xf84a, 0xf5fa, 0xf849, 0xf5fa, 0xf849, 0xf4ba, 0xf71f, 0xf4ba, 0xf71f, 0xf1cc, 0xf448, +0xf1cc, 0xf448, 0xf317, 0xf5a9, 0xf317, 0xf5a9, 0xf11f, 0xf3c7, 0xf11f, 0xf3c7, 0xef39, +0xf1f6, 0xef39, 0xf1f6, 0xef39, 0xf1f6, 0xedc4, 0xf097, 0xedc4, 0xf097, 0xf043, 0xf32a, +0xf043, 0xf32a, 0xf05e, 0xf35a, 0xf05e, 0xf35a, 0xeece, 0xf1dd, 0xeece, 0xf1dd, 0xf0c2, +0xf3e2, 0xf0c2, 0xf3e2, 0xf0c2, 0xf3e2, 0xee65, 0xf196, 0xee65, 0xf196, 0xeeec, 0xf22d, +0xeeec, 0xf22d, 0xeb11, 0xee5e, 0xeb11, 0xee5e, 0xeb39, 0xee91, 0xeb39, 0xee91, 0xe97f, +0xecdf, 0xe97f, 0xecdf, 0xe920, 0xec85, 0xe920, 0xec85, 0xe920, 0xec85, 0xe92a, 0xec91, +0xe92a, 0xec91, 0xe993, 0xecf9, 0xe993, 0xecf9, 0xe868, 0xebc9, 0xe868, 0xebc9, 0xe91a, +0xec72, 0xe91a, 0xec72, 0xe89b, 0xebe8, 0xe89b, 0xebe8, 0xe3b1, 0xe6ef, 0xe3b1, 0xe6ef, +0xe3b1, 0xe6ef, 0xe732, 0xea5d, 0xe732, 0xea5d, 0xe60c, 0xe921, 0xe60c, 0xe921, 0xe58e, +0xe88a, 0xe58e, 0xe88a, 0xe69b, 0xe97d, 0xe69b, 0xe97d, 0xe617, 0xe8dc, 0xe617, 0xe8dc, +0xe617, 0xe8dc, 0xe86c, 0xeb12, 0xe86c, 0xeb12, 0xe84c, 0xead2, 0xe84c, 0xead2, 0xea69, +0xeccf, 0xea69, 0xeccf, 0xec9b, 0xeee1, 0xec9b, 0xeee1, 0xe93c, 0xeb63, 0xe93c, 0xeb63, +0xeba4, 0xedae, 0xeba4, 0xedae, 0xeba4, 0xedae, 0xeab6, 0xeca4, 0xeab6, 0xeca4, 0xeb4a, +0xed1f, 0xeb4a, 0xed1f, 0xeae1, 0xeca1, 0xeae1, 0xeca1, 0xeb5d, 0xed0c, 0xeb5d, 0xed0c, +0xee27, 0xefc8, 0xee27, 0xefc8, 0xeb89, 0xed21, 0xeb89, 0xed21, 0xeb89, 0xed21, 0xed7e, +0xef12, 0xed7e, 0xef12, 0xed27, 0xeebb, 0xed27, 0xeebb, 0xedb2, 0xef4d, 0xedb2, 0xef4d, +0xed91, 0xef36, 0xed91, 0xef36, 0xee2c, 0xefe1, 0xee2c, 0xefe1, 0xee2c, 0xefe1, 0xeae0, +0xecaa, 0xeae0, 0xecaa, 0xe8e7, 0xeac9, 0xe8e7, 0xeac9, 0xe885, 0xea83, 0xe885, 0xea83, +0xe7d4, 0xe9f2, 0xe7d4, 0xe9f2, 0xe9a3, 0xebe3, 0xe9a3, 0xebe3, 0xe798, 0xe9fc, 0xe798, +0xe9fc, 0xe798, 0xe9fc, 0xe80d, 0xea97, 0xe80d, 0xea97, 0xe79a, 0xea49, 0xe79a, 0xea49, +0xe834, 0xeb09, 0xe834, 0xeb09, 0xe5bc, 0xe8b7, 0xe5bc, 0xe8b7, 0xe02f, 0xe34e, 0xe02f, +0xe34e, 0xe028, 0xe368, 0xe028, 0xe368, 0xe028, 0xe368, 0xe000, 0xe35f, 0xe000, 0xe35f, +0xdfe0, 0xe35b, 0xdfe0, 0xe35b, 0xde28, 0xe1bb, 0xde28, 0xe1bb, 0xdbf7, 0xdf9d, 0xdbf7, +0xdf9d, 0xdcb0, 0xe067, 0xdcb0, 0xe067, 0xdcb0, 0xe067, 0xda0e, 0xddd0, 0xda0e, 0xddd0, +0xda10, 0xddd8, 0xda10, 0xddd8, 0xdb21, 0xdeea, 0xdb21, 0xdeea, 0xda74, 0xde3a, 0xda74, +0xde3a, 0xdaf3, 0xdeb2, 0xdaf3, 0xdeb2, 0xdbc1, 0xdf74, 0xdbc1, 0xdf74, 0xdbc1, 0xdf74, +0xdce3, 0xe086, 0xdce3, 0xe086, 0xde13, 0xe1a2, 0xde13, 0xe1a2, 0xe0da, 0xe452, 0xe0da, +0xe452, 0xe311, 0xe66e, 0xe311, 0xe66e, 0xe392, 0xe6d2, 0xe392, 0xe6d2, 0xe5bb, 0xe8dc, +0xe5bb, 0xe8dc, 0xe5bb, 0xe8dc, 0xe936, 0xec36, 0xe936, 0xec36, 0xec82, 0xef60, 0xec82, +0xef60, 0xede5, 0xf09e, 0xede5, 0xf09e, 0xf043, 0xf2d7, 0xf043, 0xf2d7, 0xf349, 0xf5b6, +0xf349, 0xf5b6, 0xf349, 0xf5b6, 0xf542, 0xf789, 0xf542, 0xf789, 0xf851, 0xfa70, 0xf851, +0xfa70, 0xf769, 0xf960, 0xf769, 0xf960, 0xf9d9, 0xfba8, 0xf9d9, 0xfba8, 0xf8fe, 0xfaa4, +0xf8fe, 0xfaa4, 0xf9e1, 0xfb5d, 0xf9e1, 0xfb5d, 0xf9e1, 0xfb5d, 0xfc0f, 0xfd61, 0xfc0f, +0xfd61, 0xfddb, 0xff01, 0xfddb, 0xff01, 0x283, 0x37d, 0x283, 0x37d, 0x1f4, 0x2c1, +0x1f4, 0x2c1, 0x3c6, 0x465, 0x3c6, 0x465, 0x5cd, 0x63b, 0x5cd, 0x63b, 0x5cd, +0x63b, 0x7f3, 0x830, 0x7f3, 0x830, 0x624, 0x62d, 0x624, 0x62d, 0x7a6, 0x77b, +0x7a6, 0x77b, 0x99e, 0x93c, 0x99e, 0x93c, 0xaab, 0xa11, 0xaab, 0xa11, 0xaab, +0xa11, 0xc19, 0xb46, 0xc19, 0xb46, 0xeae, 0xda0, 0xeae, 0xda0, 0xff8, 0xeaf, +0xff8, 0xeaf, 0x10a0, 0xf1b, 0x10a0, 0xf1b, 0x14a3, 0x12e2, 0x14a3, 0x12e2, 0x14d5, +0x12d7, 0x14d5, 0x12d7, 0x14d5, 0x12d7, 0x166e, 0x1434, 0x166e, 0x1434, 0x1561, 0x12ed, +0x1561, 0x12ed, 0x18e7, 0x163a, 0x18e7, 0x163a, 0x1ac5, 0x17e1, 0x1ac5, 0x17e1, 0x1dbe, +0x1aa6, 0x1dbe, 0x1aa6, 0x2086, 0x1d3d, 0x2086, 0x1d3d, 0x2086, 0x1d3d, 0x20b3, 0x1d3e, +0x20b3, 0x1d3e, 0x237f, 0x1fe2, 0x237f, 0x1fe2, 0x21d0, 0x1e0f, 0x21d0, 0x1e0f, 0x23a5, +0x1fc6, 0x23a5, 0x1fc6, 0x23e8, 0x1ff2, 0x23e8, 0x1ff2, 0x23e8, 0x1ff2, 0x2222, 0x1e1a, +0x2222, 0x1e1a, 0x238f, 0x1f7c, 0x238f, 0x1f7c, 0x2357, 0x1f40, 0x2357, 0x1f40, 0x2150, +0x1d3c, 0x2150, 0x1d3c, 0x1f6d, 0x1b64, 0x1f6d, 0x1b64, 0x1db7, 0x19be, 0x1db7, 0x19be, +0x1db7, 0x19be, 0x1f8a, 0x1ba9, 0x1f8a, 0x1ba9, 0x1cf1, 0x192e, 0x1cf1, 0x192e, 0x1b6b, +0x17cc, 0x1b6b, 0x17cc, 0x1958, 0x15e4, 0x1958, 0x15e4, 0x162b, 0x12e7, 0x162b, 0x12e7, +0x162b, 0x12e7, 0x1778, 0x1468, 0x1778, 0x1468, 0x1559, 0x1282, 0x1559, 0x1282, 0x150a, +0x126f, 0x150a, 0x126f, 0x153d, 0x12e1, 0x153d, 0x12e1, 0x1530, 0x1315, 0x1530, 0x1315, +0x1267, 0x108e, 0x1267, 0x108e, 0x1267, 0x108e, 0x11a5, 0x100e, 0x11a5, 0x100e, 0xf7c, +0xe27, 0xf7c, 0xe27, 0xc45, 0xb31, 0xc45, 0xb31, 0xa86, 0x9b1, 0xa86, 0x9b1, +0x754, 0x6bb, 0x754, 0x6bb, 0x476, 0x417, 0x476, 0x417, 0x476, 0x417, 0x11, +0xffe8, 0x11, 0xffe8, 0x7e, 0x86, 0x7e, 0x86, 0xff2b, 0xff60, 0xff2b, 0xff60, +0xfddd, 0xfe3b, 0xfddd, 0xfe3b, 0xfadb, 0xfb5c, 0xfadb, 0xfb5c, 0xfadb, 0xfb5c, 0xf9b4, +0xfa54, 0xf9b4, 0xfa54, 0xfaac, 0xfb67, 0xfaac, 0xfb67, 0xf719, 0xf7e9, 0xf719, 0xf7e9, +0xf8c7, 0xf9a7, 0xf8c7, 0xf9a7, 0xf79c, 0xf888, 0xf79c, 0xf888, 0xf59a, 0xf68e, 0xf59a, +0xf68e, 0xf59a, 0xf68e, 0xf7fb, 0xf8f3, 0xf7fb, 0xf8f3, 0xf764, 0xf85d, 0xf764, 0xf85d, +0xf7e9, 0xf8e0, 0xf7e9, 0xf8e0, 0xf8e1, 0xf9d5, 0xf8e1, 0xf9d5, 0xf5ea, 0xf6d7, 0xf5ea, +0xf6d7, 0xf6e3, 0xf7c8, 0xf6e3, 0xf7c8, 0xf6e3, 0xf7c8, 0xf723, 0xf7fe, 0xf723, 0xf7fe, +0xf4f8, 0xf5c9, 0xf4f8, 0xf5c9, 0xf730, 0xf7f5, 0xf730, 0xf7f5, 0xf767, 0xf821, 0xf767, +0xf821, 0xf52c, 0xf5db, 0xf52c, 0xf5db, 0xf52c, 0xf5db, 0xf43c, 0xf4de, 0xf43c, 0xf4de, +0xf276, 0xf30c, 0xf276, 0xf30c, 0xf173, 0xf1fd, 0xf173, 0xf1fd, 0xee75, 0xeef3, 0xee75, +0xeef3, 0xeaba, 0xeb2b, 0xeaba, 0xeb2b, 0xee89, 0xeeed, 0xee89, 0xeeed, 0xee89, 0xeeed, +0xed9a, 0xedf0, 0xed9a, 0xedf0, 0xece5, 0xed2c, 0xece5, 0xed2c, 0xedb4, 0xedeb, 0xedb4, +0xedeb, 0xeced, 0xed13, 0xeced, 0xed13, 0xf0a5, 0xf0b7, 0xf0a5, 0xf0b7, 0xf1ff, 0xf1fc, +0xf1ff, 0xf1fc, 0xf1ff, 0xf1fc, 0xf3d4, 0xf3ba, 0xf3d4, 0xf3ba, 0xf3f0, 0xf3bd, 0xf3f0, +0xf3bd, 0xf3c2, 0xf374, 0xf3c2, 0xf374, 0xf39a, 0xf330, 0xf39a, 0xf330, 0xf4e3, 0xf459, +0xf4e3, 0xf459, 0xf4e3, 0xf459, 0xf870, 0xf7c6, 0xf870, 0xf7c6, 0xfb68, 0xfa9c, 0xfb68, +0xfa9c, 0xff51, 0xfe61, 0xff51, 0xfe61, 0x3b3, 0x29f, 0x3b3, 0x29f, 0x3f4, 0x2bb, +0x3f4, 0x2bb, 0x36f, 0x212, 0x36f, 0x212, 0x36f, 0x212, 0x7fc, 0x67b, 0x7fc, +0x67b, 0xb0e, 0x96a, 0xb0e, 0x96a, 0xe21, 0xc5b, 0xe21, 0xc5b, 0xf43, 0xd60, +0xf43, 0xd60, 0xffe, 0xdff, 0xffe, 0xdff, 0x12f6, 0x10de, 0x12f6, 0x10de, 0x12f6, +0x10de, 0x1566, 0x1339, 0x1566, 0x1339, 0x1654, 0x1417, 0x1654, 0x1417, 0x1811, 0x15c8, +0x1811, 0x15c8, 0x1a48, 0x17fa, 0x1a48, 0x17fa, 0x1b92, 0x1943, 0x1b92, 0x1943, 0x1b92, +0x1943, 0x1e27, 0x1bdc, 0x1e27, 0x1bdc, 0x1cea, 0x1aa9, 0x1cea, 0x1aa9, 0x1c09, 0x19d7, +0x1c09, 0x19d7, 0x1c2f, 0x1a11, 0x1c2f, 0x1a11, 0x1b55, 0x1950, 0x1b55, 0x1950, 0x1dd1, +0x1bea, 0x1dd1, 0x1bea, 0x1dd1, 0x1bea, 0x1cfc, 0x1b37, 0x1cfc, 0x1b37, 0x1a97, 0x18f7, +0x1a97, 0x18f7, 0x1cb8, 0x1b41, 0x1cb8, 0x1b41, 0x1b2d, 0x19e1, 0x1b2d, 0x19e1, 0x1871, +0x1752, 0x1871, 0x1752, 0x1890, 0x179f, 0x1890, 0x179f, 0x1890, 0x179f, 0x17ad, 0x16ea, +0x17ad, 0x16ea, 0x150d, 0x1477, 0x150d, 0x1477, 0x1496, 0x142d, 0x1496, 0x142d, 0x16f4, +0x16b6, 0x16f4, 0x16b6, 0x1645, 0x162f, 0x1645, 0x162f, 0x1645, 0x162f, 0x13d0, 0x13e0, +0x13d0, 0x13e0, 0xf66, 0xf99, 0xf66, 0xf99, 0xd04, 0xd56, 0xd04, 0xd56, 0xba8, +0xc14, 0xba8, 0xc14, 0x9d9, 0xa5a, 0x9d9, 0xa5a, 0xa03, 0xa96, 0xa03, 0xa96, +0xa03, 0xa96, 0x8c5, 0x965, 0x8c5, 0x965, 0x8a4, 0x94d, 0x8a4, 0x94d, 0x834, +0x8e1, 0x834, 0x8e1, 0x703, 0x7b0, 0x703, 0x7b0, 0x6c1, 0x769, 0x6c1, 0x769, +0x6ef, 0x790, 0x6ef, 0x790, 0x6ef, 0x790, 0x664, 0x6fa, 0x664, 0x6fa, 0x545, +0x5cd, 0x545, 0x5cd, 0x412, 0x48a, 0x412, 0x48a, 0x30b, 0x371, 0x30b, 0x371, +0x145, 0x198, 0x145, 0x198, 0x145, 0x198, 0x142, 0x181, 0x142, 0x181, 0x162, +0x18c, 0x162, 0x18c, 0xb4, 0xca, 0xb4, 0xca, 0x13f, 0x141, 0x13f, 0x141, +0xfe7f, 0xfe6c, 0xfe7f, 0xfe6c, 0xfd9b, 0xfd75, 0xfd9b, 0xfd75, 0xfd9b, 0xfd75, 0xfaec, +0xfab4, 0xfaec, 0xfab4, 0xfa4d, 0xfa03, 0xfa4d, 0xfa03, 0xf8ee, 0xf893, 0xf8ee, 0xf893, +0xf46c, 0xf401, 0xf46c, 0xf401, 0xf6f5, 0xf67a, 0xf6f5, 0xf67a, 0xf738, 0xf6ad, 0xf738, +0xf6ad, 0xf738, 0xf6ad, 0xf506, 0xf46b, 0xf506, 0xf46b, 0xf393, 0xf2e9, 0xf393, 0xf2e9, +0xf19e, 0xf0e3, 0xf19e, 0xf0e3, 0xf18a, 0xf0be, 0xf18a, 0xf0be, 0xf4da, 0xf3fa, 0xf4da, +0xf3fa, 0xf4da, 0xf3fa, 0xf619, 0xf525, 0xf619, 0xf525, 0xf73f, 0xf634, 0xf73f, 0xf634, +0xf7e3, 0xf6bf, 0xf7e3, 0xf6bf, 0xf6fe, 0xf5be, 0xf6fe, 0xf5be, 0xf7d2, 0xf672, 0xf7d2, +0xf672, 0xf88e, 0xf70c, 0xf88e, 0xf70c, 0xf88e, 0xf70c, 0xf927, 0xf780, 0xf927, 0xf780, +0xfbc0, 0xf9f1, 0xfbc0, 0xf9f1, 0xff3b, 0xfd42, 0xff3b, 0xfd42, 0xff7e, 0xfd57, 0xff7e, +0xfd57, 0x66, 0xfe10, 0x66, 0xfe10, 0x37, 0xfdb1, 0x37, 0xfdb1, 0x37, 0xfdb1, +0xd2, 0xfe1a, 0xd2, 0xfe1a, 0x387, 0x9d, 0x387, 0x9d, 0x501, 0x1e6, 0x501, +0x1e6, 0x635, 0x2ea, 0x635, 0x2ea, 0x712, 0x398, 0x712, 0x398, 0x712, 0x398, +0x619, 0x274, 0x619, 0x274, 0x6d0, 0x302, 0x6d0, 0x302, 0x64e, 0x25c, 0x64e, +0x25c, 0x7b1, 0x3a0, 0x7b1, 0x3a0, 0x94a, 0x521, 0x94a, 0x521, 0x9b5, 0x579, +0x9b5, 0x579, 0x9b5, 0x579, 0xcf3, 0x8aa, 0xcf3, 0x8aa, 0xad0, 0x682, 0xad0, +0x682, 0xc58, 0x80b, 0xc58, 0x80b, 0xb06, 0x6c3, 0xb06, 0x6c3, 0xb23, 0x6f1, +0xb23, 0x6f1, 0xb23, 0x6f1, 0xe16, 0x9fc, 0xe16, 0x9fc, 0xb5c, 0x761, 0xb5c, +0x761, 0xb74, 0x79f, 0xb74, 0x79f, 0xc92, 0x8e9, 0xc92, 0x8e9, 0xbb1, 0x83a, +0xbb1, 0x83a, 0xd20, 0x9df, 0xd20, 0x9df, 0xd20, 0x9df, 0x10bb, 0xdb4, 0x10bb, +0xdb4, 0xea7, 0xbde, 0xea7, 0xbde, 0xd31, 0xaa8, 0xd31, 0xaa8, 0xded, 0xba6, +0xded, 0xba6, 0xdfa, 0xbf6, 0xdfa, 0xbf6, 0x96e, 0x7ac, 0x96e, 0x7ac, 0x96e, +0x7ac, 0x8da, 0x75a, 0x8da, 0x75a, 0x947, 0x807, 0x947, 0x807, 0x84c, 0x74b, +0x84c, 0x74b, 0xc1c, 0xb57, 0xc1c, 0xb57, 0xafd, 0xa71, 0xafd, 0xa71, 0xafd, +0xa71, 0xb0e, 0xab8, 0xb0e, 0xab8, 0xa72, 0xa4f, 0xa72, 0xa4f, 0x963, 0x96e, +0x963, 0x96e, 0x81d, 0x853, 0x81d, 0x853, 0x649, 0x6a8, 0x649, 0x6a8, 0x6df, +0x762, 0x6df, 0x762, 0x6df, 0x762, 0x609, 0x6ad, 0x609, 0x6ad, 0x613, 0x6d7, +0x613, 0x6d7, 0x61d, 0x6fd, 0x61d, 0x6fd, 0x581, 0x67c, 0x581, 0x67c, 0x42e, +0x543, 0x42e, 0x543, 0x25a, 0x388, 0x25a, 0x388, 0x25a, 0x388, 0x153, 0x299, +0x153, 0x299, 0x11f, 0x27e, 0x11f, 0x27e, 0x12e, 0x2a6, 0x12e, 0x2a6, 0x263, +0x3f4, 0x263, 0x3f4, 0x23e, 0x3ea, 0x23e, 0x3ea, 0x23e, 0x3ea, 0x1c0, 0x387, +0x1c0, 0x387, 0x41e, 0x601, 0x41e, 0x601, 0x414, 0x614, 0x414, 0x614, 0x24a, +0x468, 0x24a, 0x468, 0x11a, 0x356, 0x11a, 0x356, 0xee, 0x348, 0xee, 0x348, +0xee, 0x348, 0xff63, 0x1dc, 0xff63, 0x1dc, 0xfdd3, 0x6b, 0xfdd3, 0x6b, 0xfa5a, +0xfd0e, 0xfa5a, 0xfd0e, 0xf6d0, 0xf9a0, 0xf6d0, 0xf9a0, 0xfa59, 0xfd42, 0xfa59, 0xfd42, +0xf9d4, 0xfcd4, 0xf9d4, 0xfcd4, 0xf9d4, 0xfcd4, 0xf831, 0xfb45, 0xf831, 0xfb45, 0xf721, +0xfa45, 0xf721, 0xfa45, 0xf4e0, 0xf810, 0xf4e0, 0xf810, 0xf52b, 0xf864, 0xf52b, 0xf864, +0xf531, 0xf86d, 0xf531, 0xf86d, 0xf531, 0xf86d, 0xf3cd, 0xf708, 0xf3cd, 0xf708, 0xf0ea, +0xf41e, 0xf0ea, 0xf41e, 0xf00a, 0xf334, 0xf00a, 0xf334, 0xf0db, 0xf3f5, 0xf0db, 0xf3f5, +0xeff0, 0xf2f6, 0xeff0, 0xf2f6, 0xee20, 0xf10e, 0xee20, 0xf10e, 0xee20, 0xf10e, 0xeede, +0xf1b2, 0xeede, 0xf1b2, 0xee5b, 0xf111, 0xee5b, 0xf111, 0xedfa, 0xf090, 0xedfa, 0xf090, +0xee8c, 0xf101, 0xee8c, 0xf101, 0xee8b, 0xf0de, 0xee8b, 0xf0de, 0xecec, 0xef1d, 0xecec, +0xef1d, 0xecec, 0xef1d, 0xecba, 0xeeca, 0xecba, 0xeeca, 0xec33, 0xee24, 0xec33, 0xee24, +0xebb1, 0xed86, 0xebb1, 0xed86, 0xed3c, 0xeef9, 0xed3c, 0xeef9, 0xec0b, 0xedb4, 0xec0b, +0xedb4, 0xec0b, 0xedb4, 0xebef, 0xed88, 0xebef, 0xed88, 0xeae1, 0xec70, 0xeae1, 0xec70, +0xebe4, 0xed6e, 0xebe4, 0xed6e, 0xecd2, 0xee5e, 0xecd2, 0xee5e, 0xebcc, 0xed61, 0xebcc, +0xed61, 0xeae6, 0xec88, 0xeae6, 0xec88, 0xeae6, 0xec88, 0xeb19, 0xecd0, 0xeb19, 0xecd0, +0xea24, 0xebf4, 0xea24, 0xebf4, 0xe8d3, 0xeac2, 0xe8d3, 0xeac2, 0xe820, 0xea32, 0xe820, +0xea32, 0xe70d, 0xe947, 0xe70d, 0xe947, 0xe4f7, 0xe75b, 0xe4f7, 0xe75b, 0xe4f7, 0xe75b, +0xe24e, 0xe4e0, 0xe24e, 0xe4e0, 0xe2bf, 0xe57f, 0xe2bf, 0xe57f, 0xe273, 0xe561, 0xe273, +0xe561, 0xe420, 0xe73c, 0xe420, 0xe73c, 0xe1f4, 0xe53d, 0xe1f4, 0xe53d, 0xe1f4, 0xe53d, +0xe038, 0xe3aa, 0xe038, 0xe3aa, 0xddad, 0xe146, 0xddad, 0xe146, 0xdb9b, 0xdf56, 0xdb9b, +0xdf56, 0xda6d, 0xde45, 0xda6d, 0xde45, 0xd7d5, 0xdbc5, 0xd7d5, 0xdbc5, 0xd810, 0xdc13, +0xd810, 0xdc13, 0xd810, 0xdc13, 0xd78a, 0xdb98, 0xd78a, 0xdb98, 0xdaae, 0xdec1, 0xdaae, +0xdec1, 0xdad7, 0xdee9, 0xdad7, 0xdee9, 0xdbfa, 0xe004, 0xdbfa, 0xe004, 0xdea5, 0xe2a1, +0xdea5, 0xe2a1, 0xdf7f, 0xe368, 0xdf7f, 0xe368, 0xdf7f, 0xe368, 0xe0ef, 0xe4bf, 0xe0ef, +0xe4bf, 0xe382, 0xe735, 0xe382, 0xe735, 0xe3fd, 0xe78d, 0xe3fd, 0xe78d, 0xe3d1, 0xe73c, +0xe3d1, 0xe73c, 0xe688, 0xe9cc, 0xe688, 0xe9cc, 0xe688, 0xe9cc, 0xe7c7, 0xeae1, 0xe7c7, +0xeae1, 0xea2d, 0xed1c, 0xea2d, 0xed1c, 0xec13, 0xeed7, 0xec13, 0xeed7, 0xee36, 0xf0ce, +0xee36, 0xf0ce, 0xefbd, 0xf22a, 0xefbd, 0xf22a, 0xf0f0, 0xf334, 0xf0f0, 0xf334, 0xf0f0, +0xf334, 0xf4c5, 0xf6e1, 0xf4c5, 0xf6e1, 0xf6fc, 0xf8f1, 0xf6fc, 0xf8f1, 0xf8bf, 0xfa90, +0xf8bf, 0xfa90, 0xfabf, 0xfc6d, 0xfabf, 0xfc6d, 0xfebb, 0x48, 0xfebb, 0x48, 0x138, +0x2a6, 0x138, 0x2a6, 0x138, 0x2a6, 0x16d, 0x2bd, 0x16d, 0x2bd, 0x41e, 0x551, +0x41e, 0x551, 0x1ca, 0x2e0, 0x1ca, 0x2e0, 0x1f2, 0x2eb, 0x1f2, 0x2eb, 0x577, +0x653, 0x577, 0x653, 0x577, 0x653, 0x545, 0x602, 0x545, 0x602, 0x66d, 0x70b, +0x66d, 0x70b, 0x88c, 0x907, 0x88c, 0x907, 0x977, 0x9cd, 0x977, 0x9cd, 0xcad, +0xcdb, 0xcad, 0xcdb, 0xd1c, 0xd1f, 0xd1c, 0xd1f, 0xd1c, 0xd1f, 0xd8e, 0xd63, +0xd8e, 0xd63, 0xe80, 0xe23, 0xe80, 0xe23, 0xd37, 0xca5, 0xd37, 0xca5, 0xfb5, +0xeea, 0xfb5, 0xeea, 0xca6, 0xba0, 0xca6, 0xba0, 0xdda, 0xc97, 0xdda, 0xc97, +0xdda, 0xc97, 0x10c2, 0xf40, 0x10c2, 0xf40, 0x1185, 0xfc4, 0x1185, 0xfc4, 0x151c, +0x131a, 0x151c, 0x131a, 0x18db, 0x169a, 0x18db, 0x169a, 0x1b21, 0x18a3, 0x1b21, 0x18a3, +0x1b21, 0x18a3, 0x1bec, 0x1933, 0x1bec, 0x1933, 0x1de7, 0x1af6, 0x1de7, 0x1af6, 0x1c66, +0x1942, 0x1c66, 0x1942, 0x1d37, 0x19e5, 0x1d37, 0x19e5, 0x1cf5, 0x197c, 0x1cf5, 0x197c, +0x1bf5, 0x185b, 0x1bf5, 0x185b, 0x1bf5, 0x185b, 0x1b96, 0x17e3, 0x1b96, 0x17e3, 0x1c5a, +0x1896, 0x1c5a, 0x1896, 0x1ea1, 0x1ad4, 0x1ea1, 0x1ad4, 0x1c5c, 0x188f, 0x1c5c, 0x188f, +0x1b20, 0x175b, 0x1b20, 0x175b, 0x1b20, 0x175b, 0x1b8f, 0x17db, 0x1b8f, 0x17db, 0x190b, +0x1570, 0x190b, 0x1570, 0x188a, 0x1510, 0x188a, 0x1510, 0x1820, 0x14ce, 0x1820, 0x14ce, +0x1716, 0x13f3, 0x1716, 0x13f3, 0x16d0, 0x13e2, 0x16d0, 0x13e2, 0x16d0, 0x13e2, 0x1595, +0x12e0, 0x1595, 0x12e0, 0x1482, 0x120a, 0x1482, 0x120a, 0x11a2, 0xf6b, 0x11a2, 0xf6b, +0x1286, 0x1091, 0x1286, 0x1091, 0x1329, 0x1178, 0x1329, 0x1178, 0x118b, 0x101c, 0x118b, +0x101c, 0x118b, 0x101c, 0xfae, 0xe82, 0xfae, 0xe82, 0xc81, 0xb95, 0xc81, 0xb95, +0x981, 0x8d1, 0x981, 0x8d1, 0x7f7, 0x781, 0x7f7, 0x781, 0x641, 0x600, 0x641, +0x600, 0x641, 0x600, 0x2fc, 0x2ec, 0x2fc, 0x2ec, 0x164, 0x180, 0x164, 0x180, +0xfe30, 0xfe72, 0xfe30, 0xfe72, 0xfa50, 0xfab3, 0xfa50, 0xfab3, 0xf830, 0xf8b0, 0xf830, +0xf8b0, 0xf895, 0xf92c, 0xf895, 0xf92c, 0xf895, 0xf92c, 0xf62a, 0xf6d3, 0xf62a, 0xf6d3, +0xf595, 0xf64c, 0xf595, 0xf64c, 0xf8cd, 0xf98f, 0xf8cd, 0xf98f, 0xf611, 0xf6da, 0xf611, +0xf6da, 0xf519, 0xf5e6, 0xf519, 0xf5e6, 0xf4f4, 0xf5c4, 0xf4f4, 0xf5c4, 0xf4f4, 0xf5c4, +0xf329, 0xf3f9, 0xf329, 0xf3f9, 0xf413, 0xf4e4, 0xf413, 0xf4e4, 0xf5b5, 0xf687, 0xf5b5, +0xf687, 0xf44f, 0xf521, 0xf44f, 0xf521, 0xf263, 0xf336, 0xf263, 0xf336, 0xf263, 0xf336, +0xf3a8, 0xf47d, 0xf3a8, 0xf47d, 0xf61d, 0xf6f6, 0xf61d, 0xf6f6, 0xf794, 0xf872, 0xf794, +0xf872, 0xf5c9, 0xf6ad, 0xf5c9, 0xf6ad, 0xf426, 0xf512, 0xf426, 0xf512, 0xf196, 0xf28b, +0xf196, 0xf28b, 0xf196, 0xf28b, 0xeff1, 0xf0f0, 0xeff1, 0xf0f0, 0xefe8, 0xf0f1, 0xefe8, +0xf0f1, 0xef5b, 0xf06e, 0xef5b, 0xf06e, 0xed6a, 0xee86, 0xed6a, 0xee86, 0xed0d, 0xee30, +0xed0d, 0xee30, 0xef5c, 0xf084, 0xef5c, 0xf084, 0xef5c, 0xf084, 0xee2f, 0xef5a, 0xee2f, +0xef5a, 0xede4, 0xef0f, 0xede4, 0xef0f, 0xeea1, 0xefc8, 0xeea1, 0xefc8, 0xee9f, 0xefbd, +0xee9f, 0xefbd, 0xed7b, 0xee8a, 0xed7b, 0xee8a, 0xed7b, 0xee8a, 0xedf6, 0xeef2, 0xedf6, +0xeef2, 0xee7c, 0xef5f, 0xee7c, 0xef5f, 0xef00, 0xefc5, 0xef00, 0xefc5, 0xf01a, 0xf0ba, +0xf01a, 0xf0ba, 0xf23b, 0xf2b1, 0xf23b, 0xf2b1, 0xf68a, 0xf6d1, 0xf68a, 0xf6d1, 0xf68a, +0xf6d1, 0xf773, 0xf786, 0xf773, 0xf786, 0xfb4f, 0xfb2b, 0xfb4f, 0xfb2b, 0xfd6e, 0xfd0f, +0xfd6e, 0xfd0f, 0xff05, 0xfe68, 0xff05, 0xfe68, 0x2c4, 0x1e8, 0x2c4, 0x1e8, 0x562, +0x447, 0x562, 0x447, 0x562, 0x447, 0x9ba, 0x860, 0x9ba, 0x860, 0xb9a, 0xa04, +0xb9a, 0xa04, 0xd9f, 0xbcf, 0xd9f, 0xbcf, 0x1187, 0xf81, 0x1187, 0xf81, 0x149e, +0x1267, 0x149e, 0x1267, 0x149e, 0x1267, 0x155c, 0x12fb, 0x155c, 0x12fb, 0x1714, 0x148f, +0x1714, 0x148f, 0x1777, 0x14d6, 0x1777, 0x14d6, 0x15fc, 0x1347, 0x15fc, 0x1347, 0x173f, +0x147f, 0x173f, 0x147f, 0x1930, 0x166d, 0x1930, 0x166d, 0x1930, 0x166d, 0x1956, 0x169a, +0x1956, 0x169a, 0x19a2, 0x16f4, 0x19a2, 0x16f4, 0x1a31, 0x179a, 0x1a31, 0x179a, 0x1903, +0x168b, 0x1903, 0x168b, 0x19a8, 0x1756, 0x19a8, 0x1756, 0x1983, 0x175e, 0x1983, 0x175e, +0x1983, 0x175e, 0x186d, 0x1679, 0x186d, 0x1679, 0x1688, 0x14cb, 0x1688, 0x14cb, 0x15d9, +0x1454, 0x15d9, 0x1454, 0x172f, 0x15e5, 0x172f, 0x15e5, 0x1632, 0x1525, 0x1632, 0x1525, +0x1632, 0x1525, 0x15bf, 0x14ec, 0x15bf, 0x14ec, 0x155a, 0x14c2, 0x155a, 0x14c2, 0x145f, +0x13fe, 0x145f, 0x13fe, 0x1277, 0x1249, 0x1277, 0x1249, 0x100e, 0x1010, 0x100e, 0x1010, +0xe0d, 0xe39, 0xe0d, 0xe39, 0xe0d, 0xe39, 0xcf3, 0xd43, 0xcf3, 0xd43, 0xb76, +0xbe4, 0xb76, 0xbe4, 0xa4e, 0xad4, 0xa4e, 0xad4, 0x8d5, 0x96c, 0x8d5, 0x96c, +0x6ea, 0x78d, 0x6ea, 0x78d, 0x757, 0x7ff, 0x757, 0x7ff, 0x757, 0x7ff, 0x63d, +0x6e5, 0x63d, 0x6e5, 0x572, 0x615, 0x572, 0x615, 0x571, 0x60b, 0x571, 0x60b, +0x3ba, 0x446, 0x3ba, 0x446, 0x1b8, 0x234, 0x1b8, 0x234, 0x1b8, 0x234, 0x7a, +0xe4, 0x7a, 0xe4, 0x4d, 0xa5, 0x4d, 0xa5, 0x226, 0x26a, 0x226, 0x26a, +0x3b0, 0x3e0, 0x3b0, 0x3e0, 0x1bb, 0x1da, 0x1bb, 0x1da, 0xfeaa, 0xfeb8, 0xfeaa, +0xfeb8, 0xfeaa, 0xfeb8, 0xff61, 0xff60, 0xff61, 0xff60, 0x95, 0x8a, 0x95, 0x8a, +0xff9c, 0xff87, 0xff9c, 0xff87, 0xb7, 0x9b, 0xb7, 0x9b, 0x34, 0x14, 0x34, +0x14, 0xff53, 0xff32, 0xff53, 0xff32, 0xff53, 0xff32, 0xfef2, 0xfed2, 0xfef2, 0xfed2, +0xfeb3, 0xfe95, 0xfeb3, 0xfe95, 0xfcad, 0xfc92, 0xfcad, 0xfc92, 0xfaee, 0xfad7, 0xfaee, +0xfad7, 0xfb29, 0xfb16, 0xfb29, 0xfb16, 0xfb29, 0xfb16, 0xf8cb, 0xf8bb, 0xf8cb, 0xf8bb, +0xf890, 0xf880, 0xf890, 0xf880, 0xf8d9, 0xf8c7, 0xf8d9, 0xf8c7, 0xfa68, 0xfa50, 0xfa68, +0xfa50, 0xfa92, 0xfa72, 0xfa92, 0xfa72, 0xfc3e, 0xfc10, 0xfc3e, 0xfc10, 0xfc3e, 0xfc10, +0xff18, 0xfed9, 0xff18, 0xfed9, 0xfe74, 0xfe1e, 0xfe74, 0xfe1e, 0x15, 0xffa2, 0x15, +0xffa2, 0xd5, 0x40, 0xd5, 0x40, 0x28d, 0x1d1, 0x28d, 0x1d1, 0x37b, 0x293, +0x37b, 0x293, 0x37b, 0x293, 0x595, 0x47d, 0x595, 0x47d, 0x782, 0x635, 0x782, +0x635, 0x850, 0x6cb, 0x850, 0x6cb, 0xc91, 0xad0, 0xc91, 0xad0, 0xde4, 0xbe7, +0xde4, 0xbe7, 0xde4, 0xbe7, 0xea7, 0xc6c, 0xea7, 0xc6c, 0x10a9, 0xe31, 0x10a9, +0xe31, 0x10c8, 0xe14, 0x10c8, 0xe14, 0x1119, 0xe2b, 0x1119, 0xe2b, 0x129b, 0xf76, +0x129b, 0xf76, 0x11cd, 0xe77, 0x11cd, 0xe77, 0x11cd, 0xe77, 0x11ac, 0xe28, 0x11ac, +0xe28, 0x13dd, 0x1032, 0x13dd, 0x1032, 0x152a, 0x115e, 0x152a, 0x115e, 0x1455, 0x1070, +0x1455, 0x1070, 0x1418, 0x1022, 0x1418, 0x1022, 0x1418, 0x1022, 0x13fe, 0xffe, 0x13fe, +0xffe, 0x12b2, 0xeb1, 0x12b2, 0xeb1, 0x13ec, 0xff2, 0x13ec, 0xff2, 0x14db, 0x10f0, +0x14db, 0x10f0, 0x14b5, 0x10e1, 0x14b5, 0x10e1, 0x1233, 0xe7d, 0x1233, 0xe7d, 0x1233, +0xe7d, 0x12b1, 0xf1f, 0x12b1, 0xf1f, 0x13d3, 0x106b, 0x13d3, 0x106b, 0x11aa, 0xe72, +0x11aa, 0xe72, 0x1325, 0x1021, 0x1325, 0x1021, 0x12f6, 0x1029, 0x12f6, 0x1029, 0x1288, +0xff4, 0x1288, 0xff4, 0x1288, 0xff4, 0x12fe, 0x10a4, 0x12fe, 0x10a4, 0x122d, 0x100f, +0x122d, 0x100f, 0x11ad, 0xfc9, 0x11ad, 0xfc9, 0x1035, 0xe8a, 0x1035, 0xe8a, 0xf5f, +0xdea, 0xf5f, 0xdea, 0xf5f, 0xdea, 0x1034, 0xef3, 0x1034, 0xef3, 0xea3, 0xd91, +0xea3, 0xd91, 0xbff, 0xb19, 0xbff, 0xb19, 0xbfd, 0xb3f, 0xbfd, 0xb3f, 0xa11, +0x976, 0xa11, 0x976, 0x711, 0x696, 0x711, 0x696, 0x711, 0x696, 0x62e, 0x5cd, +0x62e, 0x5cd, 0x4ed, 0x4a3, 0x4ed, 0x4a3, 0x2b1, 0x27a, 0x2b1, 0x27a, 0x3e5, +0x3bf, 0x3e5, 0x3bf, 0x52b, 0x513, 0x52b, 0x513, 0x2fa, 0x2ef, 0x2fa, 0x2ef, +0x2fa, 0x2ef, 0x229, 0x22a, 0x229, 0x22a, 0x168, 0x175, 0x168, 0x175, 0x18, +0x33, 0x18, 0x33, 0xff2f, 0xff59, 0xff2f, 0xff59, 0xfdab, 0xfde5, 0xfdab, 0xfde5, +0xfdab, 0xfde5, 0xfdaa, 0xfdf8, 0xfdaa, 0xfdf8, 0xfd7f, 0xfde5, 0xfd7f, 0xfde5, 0xfc87, +0xfd08, 0xfc87, 0xfd08, 0xfdc5, 0xfe66, 0xfdc5, 0xfe66, 0xfd1e, 0xfde3, 0xfd1e, 0xfde3, +0xfacc, 0xfbbb, 0xfacc, 0xfbbb, 0xfacc, 0xfbbb, 0xfb1a, 0xfc36, 0xfb1a, 0xfc36, 0xfc0d, +0xfd59, 0xfc0d, 0xfd59, 0xf9ef, 0xfb6f, 0xf9ef, 0xfb6f, 0xf7c6, 0xf97d, 0xf7c6, 0xf97d, +0xf70f, 0xf8ff, 0xf70f, 0xf8ff, 0xf408, 0xf633, 0xf408, 0xf633, 0xf408, 0xf633, 0xf24c, +0xf4b1, 0xf24c, 0xf4b1, 0xf1df, 0xf47d, 0xf1df, 0xf47d, 0xf0c2, 0xf398, 0xf0c2, 0xf398, +0xeeb4, 0xf1bf, 0xeeb4, 0xf1bf, 0xecba, 0xeff6, 0xecba, 0xeff6, 0xecba, 0xeff6, 0xec0b, +0xef73, 0xec0b, 0xef73, 0xeab1, 0xee40, 0xeab1, 0xee40, 0xea34, 0xede3, 0xea34, 0xede3, +0xeabe, 0xee86, 0xeabe, 0xee86, 0xe944, 0xed1e, 0xe944, 0xed1e, 0xe787, 0xeb6b, 0xe787, +0xeb6b, 0xe787, 0xeb6b, 0xe7cc, 0xebb2, 0xe7cc, 0xebb2, 0xe6ac, 0xea8c, 0xe6ac, 0xea8c, +0xe595, 0xe968, 0xe595, 0xe968, 0xe536, 0xe8f6, 0xe536, 0xe8f6, 0xe40f, 0xe7b5, 0xe40f, +0xe7b5, 0xe3b1, 0xe737, 0xe3b1, 0xe737, 0xe3b1, 0xe737, 0xe4f4, 0xe856, 0xe4f4, 0xe856, +0xe5d6, 0xe910, 0xe5d6, 0xe910, 0xe71c, 0xea2b, 0xe71c, 0xea2b, 0xe857, 0xeb3a, 0xe857, +0xeb3a, 0xe6ce, 0xe985, 0xe6ce, 0xe985, 0xe6ce, 0xe985, 0xe751, 0xe9dc, 0xe751, 0xe9dc, +0xe6da, 0xe93c, 0xe6da, 0xe93c, 0xe576, 0xe7b1, 0xe576, 0xe7b1, 0xe3d8, 0xe5f0, 0xe3d8, +0xe5f0, 0xe115, 0xe310, 0xe115, 0xe310, 0xe21a, 0xe3fd, 0xe21a, 0xe3fd, 0xe21a, 0xe3fd, +0xe3bd, 0xe58e, 0xe3bd, 0xe58e, 0xe3c0, 0xe584, 0xe3c0, 0xe584, 0xe487, 0xe646, 0xe487, +0xe646, 0xe5d1, 0xe790, 0xe5d1, 0xe790, 0xe501, 0xe6c8, 0xe501, 0xe6c8, 0xe641, 0xe814, +0xe641, 0xe814, 0xe641, 0xe814, 0xe61c, 0xe801, 0xe61c, 0xe801, 0xe323, 0xe520, 0xe323, +0xe520, 0xe3a5, 0xe5bd, 0xe3a5, 0xe5bd, 0xe566, 0xe79c, 0xe566, 0xe79c, 0xe5ff, 0xe856, +0xe5ff, 0xe856, 0xe5ff, 0xe856, 0xe5c0, 0xe838, 0xe5c0, 0xe838, 0xe79c, 0xea36, 0xe79c, +0xea36, 0xe890, 0xeb4b, 0xe890, 0xeb4b, 0xe706, 0xe9e0, 0xe706, 0xe9e0, 0xe55a, 0xe850, +0xe55a, 0xe850, 0xe478, 0xe788, 0xe478, 0xe788, 0xe478, 0xe788, 0xe2db, 0xe600, 0xe2db, +0xe600, 0xe14a, 0xe47f, 0xe14a, 0xe47f, 0xe10b, 0xe44b, 0xe10b, 0xe44b, 0xe03d, 0xe383, +0xe03d, 0xe383, 0xe01e, 0xe365, 0xe01e, 0xe365, 0xe100, 0xe441, 0xe100, 0xe441, 0xe100, +0xe441, 0xe2d1, 0xe607, 0xe2d1, 0xe607, 0xe286, 0xe5ad, 0xe286, 0xe5ad, 0xe4b3, 0xe7c6, +0xe4b3, 0xe7c6, 0xe7f0, 0xeae9, 0xe7f0, 0xeae9, 0xe738, 0xea14, 0xe738, 0xea14, 0xe738, +0xea14, 0xe860, 0xeb1d, 0xe860, 0xeb1d, 0xe973, 0xec0f, 0xe973, 0xec0f, 0xea6a, 0xece2, +0xea6a, 0xece2, 0xec56, 0xeeaa, 0xec56, 0xeeaa, 0xecd3, 0xef03, 0xecd3, 0xef03, 0xed8f, +0xef9c, 0xed8f, 0xef9c, 0xed8f, 0xef9c, 0xef2e, 0xf118, 0xef2e, 0xf118, 0xf0b9, 0xf282, +0xf0b9, 0xf282, 0xf393, 0xf53e, 0xf393, 0xf53e, 0xf58f, 0xf71f, 0xf58f, 0xf71f, 0xf62d, +0xf7a4, 0xf62d, 0xf7a4, 0xf832, 0xf994, 0xf832, 0xf994, 0xf832, 0xf994, 0xfab1, 0xfc00, +0xfab1, 0xfc00, 0xfd32, 0xfe71, 0xfd32, 0xfe71, 0xff55, 0x88, 0xff55, 0x88, 0xab, +0x1d3, 0xab, 0x1d3, 0x165, 0x283, 0x165, 0x283, 0x165, 0x283, 0x2dd, 0x3f2, +0x2dd, 0x3f2, 0x32e, 0x43c, 0x32e, 0x43c, 0x3a9, 0x4af, 0x3a9, 0x4af, 0x45e, +0x55b, 0x45e, 0x55b, 0x2aa, 0x39b, 0x2aa, 0x39b, 0x42c, 0x510, 0x42c, 0x510, +0x42c, 0x510, 0x6a1, 0x774, 0x6a1, 0x774, 0x6db, 0x799, 0x6db, 0x799, 0x8c0, +0x964, 0x8c0, 0x964, 0x8b1, 0x936, 0x8b1, 0x936, 0x827, 0x887, 0x827, 0x887, +0x979, 0x9b0, 0x979, 0x9b0, 0x979, 0x9b0, 0x922, 0x929, 0x922, 0x929, 0xa6e, +0xa3f, 0xa6e, 0xa3f, 0xb1b, 0xab1, 0xb1b, 0xab1, 0xb53, 0xaa9, 0xb53, 0xaa9, +0xd9b, 0xcac, 0xd9b, 0xcac, 0xd9b, 0xcac, 0xfcf, 0xe98, 0xfcf, 0xe98, 0x1184, +0x1002, 0x1184, 0x1002, 0x11aa, 0xfda, 0x11aa, 0xfda, 0x125f, 0x1041, 0x125f, 0x1041, +0x1339, 0x10cc, 0x1339, 0x10cc, 0x14ca, 0x1210, 0x14ca, 0x1210, 0x14ca, 0x1210, 0x167b, +0x1377, 0x167b, 0x1377, 0x1791, 0x1446, 0x1791, 0x1446, 0x1863, 0x14d7, 0x1863, 0x14d7, +0x1916, 0x154f, 0x1916, 0x154f, 0x1992, 0x1596, 0x1992, 0x1596, 0x1992, 0x1596, 0x1902, +0x14da, 0x1902, 0x14da, 0x191d, 0x14d1, 0x191d, 0x14d1, 0x187b, 0x1415, 0x187b, 0x1415, +0x18c5, 0x144e, 0x18c5, 0x144e, 0x18ea, 0x146d, 0x18ea, 0x146d, 0x1845, 0x13cb, 0x1845, +0x13cb, 0x1845, 0x13cb, 0x194e, 0x14e2, 0x194e, 0x14e2, 0x19fc, 0x15a7, 0x19fc, 0x15a7, +0x199d, 0x1568, 0x199d, 0x1568, 0x1a68, 0x165c, 0x1a68, 0x165c, 0x18b9, 0x14de, 0x18b9, +0x14de, 0x15ff, 0x125a, 0x15ff, 0x125a, 0x15ff, 0x125a, 0x1700, 0x1397, 0x1700, 0x1397, +0x14d9, 0x11b2, 0x14d9, 0x11b2, 0x135f, 0x107b, 0x135f, 0x107b, 0x135f, 0x10c1, 0x135f, +0x10c1, 0x1298, 0x1041, 0x1298, 0x1041, 0x1298, 0x1041, 0x117c, 0xf6b, 0x117c, 0xf6b, +0xe5b, 0xc8f, 0xe5b, 0xc8f, 0xc40, 0xab7, 0xc40, 0xab7, 0x97f, 0x836, 0x97f, +0x836, 0x809, 0x6fd, 0x809, 0x6fd, 0x6ce, 0x5f9, 0x6ce, 0x5f9, 0x6ce, 0x5f9, +0x464, 0x3c2, 0x464, 0x3c2, 0xffde, 0xff6b, 0xffde, 0xff6b, 0xfcd2, 0xfc88, 0xfcd2, +0xfc88, 0xfe09, 0xfde5, 0xfe09, 0xfde5, 0xfd23, 0xfd1f, 0xfd23, 0xfd1f, 0xfc59, 0xfc71, +0xfc59, 0xfc71, 0xfc59, 0xfc71, 0xfc18, 0xfc49, 0xfc18, 0xfc49, 0xfa78, 0xfabf, 0xfa78, +0xfabf, 0xfa29, 0xfa83, 0xfa29, 0xfa83, 0xfa52, 0xfabe, 0xfa52, 0xfabe, 0xf974, 0xf9f2, +0xf974, 0xf9f2, 0xf974, 0xf9f2, 0xfaf5, 0xfb83, 0xfaf5, 0xfb83, 0xfbc5, 0xfc64, 0xfbc5, +0xfc64, 0xfc32, 0xfce4, 0xfc32, 0xfce4, 0xfdae, 0xfe73, 0xfdae, 0xfe73, 0xfdc4, 0xfea0, +0xfdc4, 0xfea0, 0xff58, 0x4b, 0xff58, 0x4b, 0xff58, 0x4b, 0xfe23, 0xff30, 0xfe23, +0xff30, 0xfbf8, 0xfd22, 0xfbf8, 0xfd22, 0xfa98, 0xfbe0, 0xfa98, 0xfbe0, 0xf822, 0xf98a, +0xf822, 0xf98a, 0xf6fd, 0xf887, 0xf6fd, 0xf887, 0xf647, 0xf7f3, 0xf647, 0xf7f3, 0xf647, +0xf7f3, 0xf555, 0xf725, 0xf555, 0xf725, 0xf476, 0xf667, 0xf476, 0xf667, 0xf3ba, 0xf5cc, +0xf3ba, 0xf5cc, 0xf1bb, 0xf3ec, 0xf1bb, 0xf3ec, 0xf15e, 0xf3ab, 0xf15e, 0xf3ab, 0xf15e, +0xf3ab, 0xf0d3, 0xf338, 0xf0d3, 0xf338, 0xef1b, 0xf193, 0xef1b, 0xf193, 0xef73, 0xf1fb, +0xef73, 0xf1fb, 0xee71, 0xf101, 0xee71, 0xf101, 0xeef3, 0xf184, 0xeef3, 0xf184, 0xf1aa, +0xf437, 0xf1aa, 0xf437, 0xf1aa, 0xf437, 0xf1d9, 0xf45a, 0xf1d9, 0xf45a, 0xf288, 0xf4f6, +0xf288, 0xf4f6, 0xf321, 0xf574, 0xf321, 0xf574, 0xf2c2, 0xf4f4, 0xf2c2, 0xf4f4, 0xf45b, +0xf664, 0xf45b, 0xf664, 0xf4ec, 0xf6c6, 0xf4ec, 0xf6c6, 0xf4ec, 0xf6c6, 0xf652, 0xf7f7, +0xf652, 0xf7f7, 0xfa3f, 0xfba9, 0xfa3f, 0xfba9, 0xfd59, 0xfe84, 0xfd59, 0xfe84, 0x29, +0x113, 0x29, 0x113, 0x2d7, 0x37c, 0x2d7, 0x37c, 0x2d7, 0x37c, 0x56a, 0x5c9, +0x56a, 0x5c9, 0x84f, 0x867, 0x84f, 0x867, 0xac1, 0xa93, 0xac1, 0xa93, 0xcaa, +0xc38, 0xcaa, 0xc38, 0xead, 0xdf9, 0xead, 0xdf9, 0xf87, 0xe94, 0xf87, 0xe94, +0xf87, 0xe94, 0xfb9, 0xe8c, 0xfb9, 0xe8c, 0x1155, 0xff4, 0x1155, 0xff4, 0x12fd, +0x116c, 0x12fd, 0x116c, 0x13a1, 0x11e7, 0x13a1, 0x11e7, 0x142f, 0x1253, 0x142f, 0x1253, +0x1591, 0x1399, 0x1591, 0x1399, 0x1591, 0x1399, 0x16fb, 0x14ef, 0x16fb, 0x14ef, 0x1654, +0x143a, 0x1654, 0x143a, 0x150b, 0x12e9, 0x150b, 0x12e9, 0x15b5, 0x1392, 0x15b5, 0x1392, +0x14e0, 0x12c1, 0x14e0, 0x12c1, 0x14e0, 0x12c1, 0x13cb, 0x11b5, 0x13cb, 0x11b5, 0x15ab, +0x13a3, 0x15ab, 0x13a3, 0x14bf, 0x12ca, 0x14bf, 0x12ca, 0x1367, 0x1186, 0x1367, 0x1186, +0x14f6, 0x132c, 0x14f6, 0x132c, 0x142f, 0x127b, 0x142f, 0x127b, 0x142f, 0x127b, 0x11eb, +0x1050, 0x11eb, 0x1050, 0xfc9, 0xe45, 0xfc9, 0xe45, 0xe50, 0xce2, 0xe50, 0xce2, +0xd74, 0xc1a, 0xd74, 0xc1a, 0xca3, 0xb5a, 0xca3, 0xb5a, 0xd70, 0xc36, 0xd70, +0xc36, 0xd70, 0xc36, 0xd3a, 0xc0b, 0xd3a, 0xc0b, 0xb27, 0x9ff, 0xb27, 0x9ff, +0x9df, 0x8bb, 0x9df, 0x8bb, 0x986, 0x862, 0x986, 0x862, 0x822, 0x6fa, 0x822, +0x6fa, 0x822, 0x6fa, 0x6f6, 0x5c7, 0x6f6, 0x5c7, 0x6f6, 0x5bc, 0x6f6, 0x5bc, +0x64d, 0x507, 0x64d, 0x507, 0x5df, 0x48a, 0x5df, 0x48a, 0x574, 0x410, 0x574, +0x410, 0x4f3, 0x37f, 0x4f3, 0x37f, 0x4f3, 0x37f, 0x3b7, 0x233, 0x3b7, 0x233, +0x2f5, 0x161, 0x2f5, 0x161, 0x38d, 0x1ec, 0x38d, 0x1ec, 0x291, 0xe4, 0x291, +0xe4, 0x4d, 0xfe97, 0x4d, 0xfe97, 0xff38, 0xfd7d, 0xff38, 0xfd7d, 0xff38, 0xfd7d, +0xff61, 0xfda3, 0xff61, 0xfda3, 0xffac, 0xfdf0, 0xffac, 0xfdf0, 0xc5, 0xff0e, 0xc5, +0xff0e, 0xffe7, 0xfe39, 0xffe7, 0xfe39, 0xfe9a, 0xfcf9, 0xfe9a, 0xfcf9, 0xfe9a, 0xfcf9, +0xfed8, 0xfd46, 0xfed8, 0xfd46, 0xfe0d, 0xfc8e, 0xfe0d, 0xfc8e, 0xfdbe, 0xfc52, 0xfdbe, +0xfc52, 0xfc80, 0xfb2b, 0xfc80, 0xfb2b, 0xfa5d, 0xf91f, 0xfa5d, 0xf91f, 0xfab3, 0xf98b, +0xfab3, 0xf98b, 0xfab3, 0xf98b, 0xfb89, 0xfa77, 0xfb89, 0xfa77, 0xfad0, 0xf9d2, 0xfad0, +0xf9d2, 0xfc0e, 0xfb21, 0xfc0e, 0xfb21, 0xfd04, 0xfc26, 0xfd04, 0xfc26, 0xfd51, 0xfc7c, +0xfd51, 0xfc7c, 0xfe4b, 0xfd7c, 0xfe4b, 0xfd7c, 0xfe4b, 0xfd7c, 0xfceb, 0xfc1b, 0xfceb, +0xfc1b, 0xfce5, 0xfc0f, 0xfce5, 0xfc0f, 0xfd54, 0xfc73, 0xfd54, 0xfc73, 0xfe86, 0xfd93, +0xfe86, 0xfd93, 0x7e, 0xff73, 0x7e, 0xff73, 0x7e, 0xff73, 0x185, 0x5c, 0x185, +0x5c, 0x2fe, 0x1b2, 0x2fe, 0x1b2, 0x406, 0x293, 0x406, 0x293, 0x601, 0x462, +0x601, 0x462, 0x74a, 0x57c, 0x74a, 0x57c, 0x946, 0x746, 0x946, 0x746, 0x946, +0x746, 0xac9, 0x896, 0xac9, 0x896, 0xb3d, 0x8d6, 0xb3d, 0x8d6, 0xd19, 0xa80, +0xd19, 0xa80, 0xe3c, 0xb72, 0xe3c, 0xb72, 0x101e, 0xd26, 0x101e, 0xd26, 0x101e, +0xd26, 0x1033, 0xd10, 0x1033, 0xd10, 0xf36, 0xbef, 0xf36, 0xbef, 0xfe4, 0xc7d, +0xfe4, 0xc7d, 0xfc0, 0xc3e, 0xfc0, 0xc3e, 0xfd5, 0xc40, 0xfd5, 0xc40, 0xfe9, +0xc48, 0xfe9, 0xc48, 0xfe9, 0xc48, 0xfbf, 0xc19, 0xfbf, 0xc19, 0x113e, 0xd9c, +0x113e, 0xd9c, 0x12bf, 0xf27, 0x12bf, 0xf27, 0x12a0, 0xf1b, 0x12a0, 0xf1b, 0x1224, +0xeb7, 0x1224, 0xeb7, 0x100f, 0xcc2, 0x100f, 0xcc2, 0x100f, 0xcc2, 0xdf4, 0xacc, +0xdf4, 0xacc, 0xe1d, 0xb20, 0xe1d, 0xb20, 0xcbd, 0x9ef, 0xcbd, 0x9ef, 0xb73, +0x8d8, 0xb73, 0x8d8, 0xd05, 0xaa1, 0xd05, 0xaa1, 0xd05, 0xaa1, 0xd79, 0xb4d, +0xd79, 0xb4d, 0xda4, 0xbb2, 0xda4, 0xbb2, 0xe5b, 0xca3, 0xe5b, 0xca3, 0xbd2, +0xa54, 0xbd2, 0xa54, 0xa5e, 0x919, 0xa5e, 0x919, 0xaf6, 0x9e8, 0xaf6, 0x9e8, +0xaf6, 0x9e8, 0x9f1, 0x919, 0x9f1, 0x919, 0x996, 0x8f0, 0x996, 0x8f0, 0x854, +0x7de, 0x854, 0x7de, 0x7f6, 0x7ac, 0x7f6, 0x7ac, 0x83c, 0x81c, 0x83c, 0x81c, +0x667, 0x66e, 0x667, 0x66e, 0x667, 0x66e, 0x542, 0x56c, 0x542, 0x56c, 0x392, +0x3dc, 0x392, 0x3dc, 0x3a0, 0x408, 0x3a0, 0x408, 0x5b9, 0x63c, 0x5b9, 0x63c, +0x53c, 0x5d8, 0x53c, 0x5d8, 0x53c, 0x5d8, 0x31c, 0x3cf, 0x31c, 0x3cf, 0x1f5, +0x2c0, 0x1f5, 0x2c0, 0x1d9, 0x2b9, 0x1d9, 0x2b9, 0x364, 0x45a, 0x364, 0x45a, +0x446, 0x552, 0x446, 0x552, 0x2ba, 0x3dc, 0x2ba, 0x3dc, 0x2ba, 0x3dc, 0x1b0, +0x2ea, 0x1b0, 0x2ea, 0x5f, 0x1b1, 0x5f, 0x1b1, 0x4f, 0x1bb, 0x4f, 0x1bb, +0xffff, 0x186, 0xffff, 0x186, 0xfe6e, 0x12, 0xfe6e, 0x12, 0xfe0e, 0xffd0, 0xfe0e, +0xffd0, 0xfe0e, 0xffd0, 0xfdbe, 0xff9f, 0xfdbe, 0xff9f, 0xfdca, 0xffcc, 0xfdca, 0xffcc, +0xfdd5, 0xfff8, 0xfdd5, 0xfff8, 0xfd9f, 0xffe3, 0xfd9f, 0xffe3, 0xfc39, 0xfe9e, 0xfc39, +0xfe9e, 0xfc39, 0xfe9e, 0xfb50, 0xfdd6, 0xfb50, 0xfdd6, 0xf9b6, 0xfc5c, 0xf9b6, 0xfc5c, +0xf6bd, 0xf981, 0xf6bd, 0xf981, 0xf596, 0xf875, 0xf596, 0xf875, 0xf4e9, 0xf7e1, 0xf4e9, +0xf7e1, 0xf3d8, 0xf6e5, 0xf3d8, 0xf6e5, 0xf3d8, 0xf6e5, 0xf3b6, 0xf6d5, 0xf3b6, 0xf6d5, +0xf33b, 0xf668, 0xf33b, 0xf668, 0xf233, 0xf569, 0xf233, 0xf569, 0xf211, 0xf54b, 0xf211, +0xf54b, 0xf0cb, 0xf404, 0xf0cb, 0xf404, 0xf068, 0xf39b, 0xf068, 0xf39b, 0xf068, 0xf39b, +0xee46, 0xf16f, 0xee46, 0xf16f, 0xec54, 0xef6d, 0xec54, 0xef6d, 0xecc3, 0xefc8, 0xecc3, +0xefc8, 0xebdf, 0xeece, 0xebdf, 0xeece, 0xee0d, 0xf0e0, 0xee0d, 0xf0e0, 0xee0d, 0xf0e0, +0xef5e, 0xf213, 0xef5e, 0xf213, 0xef6e, 0xf204, 0xef6e, 0xf204, 0xefa5, 0xf21a, 0xefa5, +0xf21a, 0xee6e, 0xf0c2, 0xee6e, 0xf0c2, 0xee10, 0xf044, 0xee10, 0xf044, 0xed6a, 0xef7e, +0xed6a, 0xef7e, 0xed6a, 0xef7e, 0xebb3, 0xeda9, 0xebb3, 0xeda9, 0xeb94, 0xed71, 0xeb94, +0xed71, 0xec4c, 0xee13, 0xec4c, 0xee13, 0xeb07, 0xecbc, 0xeb07, 0xecbc, 0xeace, 0xec77, +0xeace, 0xec77, 0xe9f3, 0xeb95, 0xe9f3, 0xeb95, 0xe9f3, 0xeb95, 0xe9a0, 0xeb42, 0xe9a0, +0xeb42, 0xeb38, 0xecdf, 0xeb38, 0xecdf, 0xebb8, 0xed6b, 0xebb8, 0xed6b, 0xea51, 0xec15, +0xea51, 0xec15, 0xe87a, 0xea57, 0xe87a, 0xea57, 0xe87a, 0xea57, 0xe7fc, 0xe9f6, 0xe7fc, +0xe9f6, 0xe7a6, 0xe9c2, 0xe7a6, 0xe9c2, 0xe81b, 0xea5e, 0xe81b, 0xea5e, 0xe819, 0xea86, +0xe819, 0xea86, 0xe924, 0xebbe, 0xe924, 0xebbe, 0xe9df, 0xeca8, 0xe9df, 0xeca8, 0xe9df, +0xeca8, 0xe912, 0xec0b, 0xe912, 0xec0b, 0xe866, 0xeb90, 0xe866, 0xeb90, 0xe690, 0xe9e9, +0xe690, 0xe9e9, 0xe45f, 0xe7e5, 0xe45f, 0xe7e5, 0xe355, 0xe705, 0xe355, 0xe705, 0xe41a, +0xe7f2, 0xe41a, 0xe7f2, 0xe41a, 0xe7f2, 0xe335, 0xe72f, 0xe335, 0xe72f, 0xe1bd, 0xe5d5, +0xe1bd, 0xe5d5, 0xe1f3, 0xe623, 0xe1f3, 0xe623, 0xe253, 0xe696, 0xe253, 0xe696, 0xe1cc, +0xe61a, 0xe1cc, 0xe61a, 0xe1cc, 0xe61a, 0xe167, 0xe5bc, 0xe167, 0xe5bc, 0xe0af, 0xe504, +0xe0af, 0xe504, 0xdf55, 0xe3a3, 0xdf55, 0xe3a3, 0xe04d, 0xe490, 0xe04d, 0xe490, 0xe173, +0xe5a4, 0xe173, 0xe5a4, 0xe200, 0xe61a, 0xe200, 0xe61a, 0xe200, 0xe61a, 0xe160, 0xe55f, +0xe160, 0xe55f, 0xe0c8, 0xe4a8, 0xe0c8, 0xe4a8, 0xe17d, 0xe53b, 0xe17d, 0xe53b, 0xe217, +0xe5ae, 0xe217, 0xe5ae, 0xe313, 0xe682, 0xe313, 0xe682, 0xe37d, 0xe6c2, 0xe37d, 0xe6c2, +0xe37d, 0xe6c2, 0xe57a, 0xe894, 0xe57a, 0xe894, 0xe819, 0xeb06, 0xe819, 0xeb06, 0xe9ed, +0xecad, 0xe9ed, 0xecad, 0xebc2, 0xee54, 0xebc2, 0xee54, 0xedba, 0xf01f, 0xedba, 0xf01f, +0xedba, 0xf01f, 0xf09a, 0xf2d1, 0xf09a, 0xf2d1, 0xf20e, 0xf418, 0xf20e, 0xf418, 0xf39b, +0xf577, 0xf39b, 0xf577, 0xf423, 0xf5d2, 0xf423, 0xf5d2, 0xf41a, 0xf59b, 0xf41a, 0xf59b, +0xf690, 0xf7e3, 0xf690, 0xf7e3, 0xf690, 0xf7e3, 0xf869, 0xf98e, 0xf869, 0xf98e, 0xfb28, +0xfc1e, 0xfb28, 0xfc1e, 0xfcf6, 0xfdbc, 0xfcf6, 0xfdbc, 0xfce8, 0xfd7b, 0xfce8, 0xfd7b, +0xfd16, 0xfd76, 0xfd16, 0xfd76, 0xfbb7, 0xfbe1, 0xfbb7, 0xfbe1, 0xfbb7, 0xfbe1, 0xfb63, +0xfb56, 0xfb63, 0xfb56, 0xfd0e, 0xfcc7, 0xfd0e, 0xfcc7, 0xfdbb, 0xfd38, 0xfdbb, 0xfd38, +0xfecf, 0xfe0e, 0xfecf, 0xfe0e, 0x13d, 0x3c, 0x13d, 0x3c, 0x13d, 0x3c, 0x1eb, +0xa8, 0x1eb, 0xa8, 0x34d, 0x1c7, 0x34d, 0x1c7, 0x4c8, 0x2fd, 0x4c8, 0x2fd, +0x592, 0x382, 0x592, 0x382, 0x79f, 0x549, 0x79f, 0x549, 0xaa5, 0x809, 0xaa5, +0x809, 0xaa5, 0x809, 0xd2d, 0xa4b, 0xd2d, 0xa4b, 0xd38, 0xa12, 0xd38, 0xa12, +0xef4, 0xb8d, 0xef4, 0xb8d, 0x11e4, 0xe3e, 0x11e4, 0xe3e, 0x14d5, 0x10f4, 0x14d5, +0x10f4, 0x14d5, 0x10f4, 0x167a, 0x1261, 0x167a, 0x1261, 0x174d, 0x1303, 0x174d, 0x1303, +0x18cd, 0x1456, 0x18cd, 0x1456, 0x19e8, 0x154a, 0x19e8, 0x154a, 0x1b71, 0x16b2, 0x1b71, +0x16b2, 0x1ba6, 0x16ce, 0x1ba6, 0x16ce, 0x1ba6, 0x16ce, 0x1b7b, 0x1692, 0x1b7b, 0x1692, +0x1af6, 0x1602, 0x1af6, 0x1602, 0x1d3f, 0x1849, 0x1d3f, 0x1849, 0x1fab, 0x1abb, 0x1fab, +0x1abb, 0x1fdc, 0x1afa, 0x1fdc, 0x1afa, 0x202a, 0x1b5d, 0x202a, 0x1b5d, 0x202a, 0x1b5d, +0x1f76, 0x1ac7, 0x1f76, 0x1ac7, 0x1fd6, 0x1b4b, 0x1fd6, 0x1b4b, 0x1f65, 0x1b07, 0x1f65, +0x1b07, 0x1ebc, 0x1a91, 0x1ebc, 0x1a91, 0x1d4c, 0x1958, 0x1d4c, 0x1958, 0x1d4c, 0x1958, +0x1cb3, 0x18fe, 0x1cb3, 0x18fe, 0x1dfc, 0x1a89, 0x1dfc, 0x1a89, 0x1df8, 0x1acc, 0x1df8, +0x1acc, 0x1c39, 0x1957, 0x1c39, 0x1957, 0x19ba, 0x1724, 0x19ba, 0x1724, 0x196b, 0x1723, +0x196b, 0x1723, 0x196b, 0x1723, 0x18ca, 0x16d1, 0x18ca, 0x16d1, 0x1695, 0x14eb, 0x1695, +0x14eb, 0x135b, 0x1200, 0x135b, 0x1200, 0xfb3, 0xea6, 0xfb3, 0xea6, 0xd75, 0xcb3, +0xd75, 0xcb3, 0xc2a, 0xbb1, 0xc2a, 0xbb1, 0xc2a, 0xbb1, 0x96a, 0x938, 0x96a, +0x938, 0x60b, 0x61c, 0x60b, 0x61c, 0x35c, 0x3ad, 0x35c, 0x3ad, 0x271, 0x2fe, +0x271, 0x2fe, 0x326, 0x3ec, 0x326, 0x3ec, 0x326, 0x3ec, 0x140, 0x23b, 0x140, +0x23b, 0xff68, 0x94, 0xff68, 0x94, 0xfd8e, 0xfee7, 0xfd8e, 0xfee7, 0xfb96, 0xfd19, +0xfb96, 0xfd19, 0xfca4, 0xfe4d, 0xfca4, 0xfe4d, 0xfdcb, 0xff98, 0xfdcb, 0xff98, 0xfdcb, +0xff98, 0xfd92, 0xff7f, 0xfd92, 0xff7f, 0xfda2, 0xffae, 0xfda2, 0xffae, 0xfe19, 0x40, +0xfe19, 0x40, 0xfd8b, 0xffcc, 0xfd8b, 0xffcc, 0xfc4c, 0xfea5, 0xfc4c, 0xfea5, 0xfa18, +0xfc86, 0xfa18, 0xfc86, 0xfa18, 0xfc86, 0xf841, 0xfac3, 0xf841, 0xfac3, 0xf7d9, 0xfa6e, +0xf7d9, 0xfa6e, 0xf868, 0xfb0d, 0xf868, 0xfb0d, 0xf853, 0xfb07, 0xf853, 0xfb07, 0xf656, +0xf917, 0xf656, 0xf917, 0xf656, 0xf917, 0xf4b8, 0xf784, 0xf4b8, 0xf784, 0xf38f, 0xf663, +0xf38f, 0xf663, 0xf246, 0xf520, 0xf246, 0xf520, 0xf173, 0xf44f, 0xf173, 0xf44f, 0xeffc, +0xf2d8, 0xeffc, 0xf2d8, 0xed75, 0xf04c, 0xed75, 0xf04c, 0xed75, 0xf04c, 0xec21, 0xeeef, +0xec21, 0xeeef, 0xec7b, 0xef3c, 0xec7b, 0xef3c, 0xed03, 0xefb2, 0xed03, 0xefb2, 0xed38, +0xefd0, 0xed38, 0xefd0, 0xedb9, 0xf035, 0xedb9, 0xf035, 0xee0a, 0xf066, 0xee0a, 0xf066, +0xee0a, 0xf066, 0xed37, 0xef6c, 0xed37, 0xef6c, 0xec24, 0xee2e, 0xec24, 0xee2e, 0xebbc, +0xed96, 0xebbc, 0xed96, 0xec28, 0xedcd, 0xec28, 0xedcd, 0xef2d, 0xf098, 0xef2d, 0xf098, +0xef2d, 0xf098, 0xf4f1, 0xf620, 0xf4f1, 0xf620, 0xf7ea, 0xf8d9, 0xf7ea, 0xf8d9, 0xf9b3, +0xfa5f, 0xf9b3, 0xfa5f, 0xfc96, 0xfcfd, 0xfc96, 0xfcfd, 0xfdd8, 0xfdf9, 0xfdd8, 0xfdf9, +0x50, 0x2b, 0x50, 0x2b, 0x50, 0x2b, 0x2cf, 0x263, 0x2cf, 0x263, 0x40c, +0x35c, 0x40c, 0x35c, 0x62f, 0x53d, 0x62f, 0x53d, 0x881, 0x750, 0x881, 0x750, +0xaf4, 0x989, 0xaf4, 0x989, 0xc09, 0xa68, 0xc09, 0xa68, 0xc09, 0xa68, 0xccb, +0xaf9, 0xccb, 0xaf9, 0xeb3, 0xcb7, 0xeb3, 0xcb7, 0x1036, 0xe16, 0x1036, 0xe16, +0x11f7, 0xfba, 0x11f7, 0xfba, 0x12aa, 0x1058, 0x12aa, 0x1058, 0x12aa, 0x1058, 0x1361, +0x1102, 0x1361, 0x1102, 0x143e, 0x11d8, 0x143e, 0x11d8, 0x1556, 0x12f1, 0x1556, 0x12f1, +0x164d, 0x13ef, 0x164d, 0x13ef, 0x151a, 0x12ca, 0x151a, 0x12ca, 0x1562, 0x1326, 0x1562, +0x1326, 0x1562, 0x1326, 0x157f, 0x135b, 0x157f, 0x135b, 0x1603, 0x13fd, 0x1603, 0x13fd, +0x1538, 0x1353, 0x1538, 0x1353, 0x11dd, 0x101b, 0x11dd, 0x101b, 0x1147, 0xfa9, 0x1147, +0xfa9, 0x1167, 0xfee, 0x1167, 0xfee, 0x1167, 0xfee, 0x11bf, 0x106a, 0x11bf, 0x106a, +0x11be, 0x108d, 0x11be, 0x108d, 0x10cc, 0xfbb, 0x10cc, 0xfbb, 0xf6f, 0xe7b, 0xf6f, +0xe7b, 0xd88, 0xcaf, 0xd88, 0xcaf, 0xd88, 0xcaf, 0xbbb, 0xaf8, 0xbbb, 0xaf8, +0xafa, 0xa49, 0xafa, 0xa49, 0xa5c, 0x9b8, 0xa5c, 0x9b8, 0x947, 0x8ab, 0x947, +0x8ab, 0x8ae, 0x818, 0x8ae, 0x818, 0x7c8, 0x732, 0x7c8, 0x732, 0x7c8, 0x732, +0x76c, 0x6d2, 0x76c, 0x6d2, 0x699, 0x5fa, 0x699, 0x5fa, 0x5ad, 0x505, 0x5ad, +0x505, 0x4c0, 0x40e, 0x4c0, 0x40e, 0x4ff, 0x442, 0x4ff, 0x442, 0x582, 0x4ba, +0x582, 0x4ba, 0x582, 0x4ba, 0x4d5, 0x403, 0x4d5, 0x403, 0x4c5, 0x3e9, 0x4c5, +0x3e9, 0x3be, 0x2da, 0x3be, 0x2da, 0x45b, 0x372, 0x45b, 0x372, 0x58c, 0x4a0, +0x58c, 0x4a0, 0x58c, 0x4a0, 0x5ff, 0x514, 0x5ff, 0x514, 0x5a6, 0x4bd, 0x5a6, +0x4bd, 0x468, 0x384, 0x468, 0x384, 0x430, 0x353, 0x430, 0x353, 0x2f5, 0x222, +0x2f5, 0x222, 0x268, 0x1a0, 0x268, 0x1a0, 0x268, 0x1a0, 0x2a6, 0x1ea, 0x2a6, +0x1ea, 0x28e, 0x1dd, 0x28e, 0x1dd, 0x356, 0x2b0, 0x356, 0x2b0, 0x37e, 0x2e2, +0x37e, 0x2e2, 0x1a0, 0x10b, 0x1a0, 0x10b, 0x1b, 0xff8b, 0x1b, 0xff8b, 0x1b, +0xff8b, 0xffb1, 0xff21, 0xffb1, 0xff21, 0xff76, 0xfee3, 0xff76, 0xfee3, 0x73, 0xffd7, +0x73, 0xffd7, 0xfe, 0x55, 0xfe, 0x55, 0x85, 0xffc9, 0x85, 0xffc9, 0x85, +0xffc9, 0xca, 0xfff6, 0xca, 0xfff6, 0x1ac, 0xbc, 0x1ac, 0xbc, 0x231, 0x11f, +0x231, 0x11f, 0x202, 0xca, 0x202, 0xca, 0x2aa, 0x148, 0x2aa, 0x148, 0x50f, +0x37f, 0x50f, 0x37f, 0x50f, 0x37f, 0x729, 0x568, 0x729, 0x568, 0x8c0, 0x6cd, +0x8c0, 0x6cd, 0xa90, 0x86a, 0xa90, 0x86a, 0xb7f, 0x926, 0xb7f, 0x926, 0xbd3, +0x947, 0xbd3, 0x947, 0xbd3, 0x947, 0xdb3, 0xaf5, 0xdb3, 0xaf5, 0xf1e, 0xc31, +0xf1e, 0xc31, 0xee8, 0xbcf, 0xee8, 0xbcf, 0x106d, 0xd2b, 0x106d, 0xd2b, 0x1224, +0xebe, 0x1224, 0xebe, 0x1259, 0xed4, 0x1259, 0xed4, 0x1259, 0xed4, 0x110a, 0xd6b, +0x110a, 0xd6b, 0xf8d, 0xbd9, 0xf8d, 0xbd9, 0xf65, 0xba2, 0xf65, 0xba2, 0x1039, +0xc6c, 0x1039, 0xc6c, 0x11f0, 0xe20, 0x11f0, 0xe20, 0x1250, 0xe82, 0x1250, 0xe82, +0x1250, 0xe82, 0x10d0, 0xd0a, 0x10d0, 0xd0a, 0x1064, 0xcab, 0x1064, 0xcab, 0x1107, +0xd62, 0x1107, 0xd62, 0x1043, 0xcb5, 0x1043, 0xcb5, 0xe9c, 0xb2a, 0xe9c, 0xb2a, +0xe9c, 0xb2a, 0xc44, 0x8f4, 0xc44, 0x8f4, 0xb9d, 0x871, 0xb9d, 0x871, 0xbff, +0x8fb, 0xbff, 0x8fb, 0xbc8, 0x8f0, 0xbc8, 0x8f0, 0xb8d, 0x8e4, 0xb8d, 0x8e4, +0xa2f, 0x7b6, 0xa2f, 0x7b6, 0xa2f, 0x7b6, 0xa67, 0x821, 0xa67, 0x821, 0xb55, +0x943, 0xb55, 0x943, 0xb67, 0x98a, 0xb67, 0x98a, 0x957, 0x7b1, 0x957, 0x7b1, +0x5bc, 0x44c, 0x5bc, 0x44c, 0x30b, 0x1d1, 0x30b, 0x1d1, 0x30b, 0x1d1, 0x280, +0x17c, 0x280, 0x17c, 0x2ec, 0x21d, 0x2ec, 0x21d, 0x217, 0x17b, 0x217, 0x17b, +0x204, 0x19b, 0x204, 0x19b, 0x1e5, 0x1ae, 0x1e5, 0x1ae, 0x1e5, 0x1ae, 0x2a0, +0x299, 0x2a0, 0x299, 0x22a, 0x250, 0x22a, 0x250, 0x13, 0x66, 0x13, 0x66, +0xfe5d, 0xfedb, 0xfe5d, 0xfedb, 0xfe2a, 0xfed2, 0xfe2a, 0xfed2, 0xcc, 0x19b, 0xcc, +0x19b, 0xcc, 0x19b, 0x164, 0x25a, 0x164, 0x25a, 0xc1, 0x1dc, 0xc1, 0x1dc, +0x6, 0x145, 0x6, 0x145, 0xfeee, 0x51, 0xfeee, 0x51, 0xfed6, 0x5c, 0xfed6, +0x5c, 0xfeb5, 0x5e, 0xfeb5, 0x5e, 0xfeb5, 0x5e, 0xfd41, 0xff0b, 0xfd41, 0xff0b, +0xfc41, 0xfe2e, 0xfc41, 0xfe2e, 0xfc40, 0xfe4e, 0xfc40, 0xfe4e, 0xfba0, 0xfdce, 0xfba0, +0xfdce, 0xfa75, 0xfcc4, 0xfa75, 0xfcc4, 0xfa75, 0xfcc4, 0xf87b, 0xfae9, 0xf87b, 0xfae9, +0xf761, 0xf9ee, 0xf761, 0xf9ee, 0xf719, 0xf9c3, 0xf719, 0xf9c3, 0xf7f6, 0xfabd, 0xf7f6, +0xfabd, 0xf799, 0xfa7a, 0xf799, 0xfa7a, 0xf678, 0xf972, 0xf678, 0xf972, 0xf678, 0xf972, +0xf5e8, 0xf8f7, 0xf5e8, 0xf8f7, 0xf425, 0xf748, 0xf425, 0xf748, 0xf2fb, 0xf62e, 0xf2fb, +0xf62e, 0xf234, 0xf574, 0xf234, 0xf574, 0xf227, 0xf571, 0xf227, 0xf571, 0xf06b, 0xf3ba, +0xf06b, 0xf3ba, 0xf06b, 0xf3ba, 0xef54, 0xf2a5, 0xef54, 0xf2a5, 0xeed8, 0xf228, 0xeed8, +0xf228, 0xece4, 0xf02f, 0xece4, 0xf02f, 0xed41, 0xf084, 0xed41, 0xf084, 0xede8, 0xf11f, +0xede8, 0xf11f, 0xede8, 0xf11f, 0xee2d, 0xf156, 0xee2d, 0xf156, 0xee0a, 0xf122, 0xee0a, +0xf122, 0xee68, 0xf16d, 0xee68, 0xf16d, 0xeea5, 0xf194, 0xeea5, 0xf194, 0xedc0, 0xf098, +0xedc0, 0xf098, 0xed17, 0xefd8, 0xed17, 0xefd8, 0xed17, 0xefd8, 0xeca8, 0xef50, 0xeca8, +0xef50, 0xec76, 0xef05, 0xec76, 0xef05, 0xeb2f, 0xeda6, 0xeb2f, 0xeda6, 0xeb7b, 0xedda, +0xeb7b, 0xedda, 0xecb3, 0xeefb, 0xecb3, 0xeefb, 0xec20, 0xee52, 0xec20, 0xee52, 0xec20, +0xee52, 0xeb79, 0xed97, 0xeb79, 0xed97, 0xea01, 0xec0c, 0xea01, 0xec0c, 0xe851, 0xea4c, +0xe851, 0xea4c, 0xe8d4, 0xeac1, 0xe8d4, 0xeac1, 0xeadb, 0xecbc, 0xeadb, 0xecbc, 0xeadb, +0xecbc, 0xec5a, 0xee32, 0xec5a, 0xee32, 0xece6, 0xeeb8, 0xece6, 0xeeb8, 0xec66, 0xee34, +0xec66, 0xee34, 0xebc6, 0xed95, 0xebc6, 0xed95, 0xebbf, 0xed92, 0xebbf, 0xed92, 0xeb84, +0xed5e, 0xeb84, 0xed5e, 0xeb84, 0xed5e, 0xebcd, 0xedb1, 0xebcd, 0xedb1, 0xec6d, 0xee60, +0xec6d, 0xee60, 0xec1f, 0xee23, 0xec1f, 0xee23, 0xea95, 0xecaf, 0xea95, 0xecaf, 0xea16, +0xec48, 0xea16, 0xec48, 0xe9b8, 0xec05, 0xe9b8, 0xec05, 0xe9b8, 0xec05, 0xe8b1, 0xeb1b, +0xe8b1, 0xeb1b, 0xe9a1, 0xec2c, 0xe9a1, 0xec2c, 0xe97f, 0xec2b, 0xe97f, 0xec2b, 0xe89e, +0xeb6c, 0xe89e, 0xeb6c, 0xe8ef, 0xebdf, 0xe8ef, 0xebdf, 0xe8ef, 0xebdf, 0xe82e, 0xeb40, +0xe82e, 0xeb40, 0xe68b, 0xe9bc, 0xe68b, 0xe9bc, 0xe649, 0xe997, 0xe649, 0xe997, 0xe6aa, +0xea11, 0xe6aa, 0xea11, 0xe6d1, 0xea4e, 0xe6d1, 0xea4e, 0xe68c, 0xea18, 0xe68c, 0xea18, +0xe68c, 0xea18, 0xe4df, 0xe875, 0xe4df, 0xe875, 0xe476, 0xe810, 0xe476, 0xe810, 0xe3d6, +0xe76c, 0xe3d6, 0xe76c, 0xe3a5, 0xe730, 0xe3a5, 0xe730, 0xe4a0, 0xe818, 0xe4a0, 0xe818, +0xe469, 0xe7c7, 0xe469, 0xe7c7, 0xe469, 0xe7c7, 0xe4c8, 0xe806, 0xe4c8, 0xe806, 0xe5ae, +0xe8c5, 0xe5ae, 0xe8c5, 0xe63f, 0xe92a, 0xe63f, 0xe92a, 0xe6c4, 0xe97c, 0xe6c4, 0xe97c, +0xe7f3, 0xea75, 0xe7f3, 0xea75, 0xe7f3, 0xea75, 0xe8bf, 0xeb09, 0xe8bf, 0xeb09, 0xeaba, +0xecc9, 0xeaba, 0xecc9, 0xec6c, 0xee40, 0xec6c, 0xee40, 0xedb2, 0xef4c, 0xedb2, 0xef4c, +0xeffb, 0xf15b, 0xeffb, 0xf15b, 0xf0a3, 0xf1cd, 0xf0a3, 0xf1cd, 0xf0a3, 0xf1cd, 0xf1b2, +0xf2a9, 0xf1b2, 0xf2a9, 0xf2a1, 0xf369, 0xf2a1, 0xf369, 0xf34d, 0xf3eb, 0xf34d, 0xf3eb, +0xf5c1, 0xf638, 0xf5c1, 0xf638, 0xf94e, 0xf9a3, 0xf94e, 0xf9a3, 0xfb32, 0xfb69, 0xfb32, +0xfb69, 0xfb32, 0xfb69, 0xfcc6, 0xfce3, 0xfcc6, 0xfce3, 0xfd0b, 0xfd10, 0xfd0b, 0xfd10, +0xfcb8, 0xfca8, 0xfcb8, 0xfca8, 0xff3e, 0xff19, 0xff3e, 0xff19, 0xff80, 0xff47, 0xff80, +0xff47, 0xff80, 0xff47, 0xff43, 0xfef4, 0xff43, 0xfef4, 0xffed, 0xff86, 0xffed, 0xff86, +0x5c, 0xffda, 0x5c, 0xffda, 0x137, 0x96, 0x137, 0x96, 0x301, 0x23c, 0x301, +0x23c, 0x463, 0x375, 0x463, 0x375, 0x463, 0x375, 0x54e, 0x431, 0x54e, 0x431, +0x84f, 0x6ff, 0x84f, 0x6ff, 0x93e, 0x7b5, 0x93e, 0x7b5, 0x9ac, 0x7e6, 0x9ac, +0x7e6, 0xa67, 0x860, 0xa67, 0x860, 0xa67, 0x860, 0xb8c, 0x942, 0xb8c, 0x942, +0xe86, 0xbf6, 0xe86, 0xbf6, 0x1022, 0xd4e, 0x1022, 0xd4e, 0x1193, 0xe7b, 0x1193, +0xe7b, 0x131b, 0xfc3, 0x131b, 0xfc3, 0x1455, 0x10c1, 0x1455, 0x10c1, 0x1455, 0x10c1, +0x15d0, 0x1205, 0x15d0, 0x1205, 0x1748, 0x134e, 0x1748, 0x134e, 0x1908, 0x14e7, 0x1908, +0x14e7, 0x19e8, 0x15aa, 0x19e8, 0x15aa, 0x1bc5, 0x1774, 0x1bc5, 0x1774, 0x1e2e, 0x19d4, +0x1e2e, 0x19d4, 0x1e2e, 0x19d4, 0x1d56, 0x18fe, 0x1d56, 0x18fe, 0x1d98, 0x194d, 0x1d98, +0x194d, 0x1e68, 0x1a34, 0x1e68, 0x1a34, 0x1ec5, 0x1ab2, 0x1ec5, 0x1ab2, 0x1fc6, 0x1bdf, +0x1fc6, 0x1bdf, 0x1fc6, 0x1bdf, 0x1ee9, 0x1b34, 0x1ee9, 0x1b34, 0x1fe4, 0x1c6a, 0x1fe4, +0x1c6a, 0x20f7, 0x1dbf, 0x20f7, 0x1dbf, 0x208d, 0x1d9b, 0x208d, 0x1d9b, 0x1ec0, 0x1c19, +0x1ec0, 0x1c19, 0x1b6b, 0x1911, 0x1b6b, 0x1911, 0x1b6b, 0x1911, 0x19a7, 0x179b, 0x19a7, +0x179b, 0x190b, 0x174e, 0x190b, 0x174e, 0x192d, 0x17be, 0x192d, 0x17be, 0x177e, 0x165d, +0x177e, 0x165d, 0x1544, 0x146e, 0x1544, 0x146e, 0x1399, 0x130a, 0x1399, 0x130a, 0x1399, +0x130a, 0x109b, 0x1051, 0x109b, 0x1051, 0xf12, 0xf08, 0xf12, 0xf08, 0xcff, 0xd32, +0xcff, 0xd32, 0xacf, 0xb3a, 0xacf, 0xb3a, 0x960, 0x9fd, 0x960, 0x9fd, 0x960, +0x9fd, 0x5f2, 0x6bd, 0x5f2, 0x6bd, 0x392, 0x486, 0x392, 0x486, 0xb1, 0x1c9, +0xb1, 0x1c9, 0xfe5f, 0xff97, 0xfe5f, 0xff97, 0xfe75, 0xffc7, 0xfe75, 0xffc7, 0xfe0e, +0xff75, 0xfe0e, 0xff75, 0xfe0e, 0xff75, 0xfe06, 0xff7e, 0xfe06, 0xff7e, 0xfda0, 0xff23, +0xfda0, 0xff23, 0xfbb6, 0xfd41, 0xfbb6, 0xfd41, 0xf9aa, 0xfb38, 0xf9aa, 0xfb38, 0xf8e9, +0xfa77, 0xf8e9, 0xfa77, 0xf769, 0xf8f3, 0xf769, 0xf8f3, 0xf769, 0xf8f3, 0xf7a2, 0xf924, +0xf7a2, 0xf924, 0xf856, 0xf9ce, 0xf856, 0xf9ce, 0xf761, 0xf8cd, 0xf761, 0xf8cd, 0xf7ef, +0xf94d, 0xf7ef, 0xf94d, 0xf7ae, 0xf8fd, 0xf7ae, 0xf8fd, 0xf7ae, 0xf8fd, 0xf676, 0xf7b5, +0xf676, 0xf7b5, 0xf451, 0xf581, 0xf451, 0xf581, 0xf2e2, 0xf403, 0xf2e2, 0xf403, 0xf19f, +0xf2b3, 0xf19f, 0xf2b3, 0xf148, 0xf250, 0xf148, 0xf250, 0xf1de, 0xf2dd, 0xf1de, 0xf2dd, +0xf1de, 0xf2dd, 0xf18a, 0xf282, 0xf18a, 0xf282, 0xf209, 0xf2fc, 0xf209, 0xf2fc, 0xf0c6, +0xf1b7, 0xf0c6, 0xf1b7, 0xefdd, 0xf0cd, 0xefdd, 0xf0cd, 0xee81, 0xef73, 0xee81, 0xef73, +0xec62, 0xed56, 0xec62, 0xed56, 0xec62, 0xed56, 0xecd0, 0xedc8, 0xecd0, 0xedc8, 0xede2, +0xeedd, 0xede2, 0xeedd, 0xeddd, 0xeeda, 0xeddd, 0xeeda, 0xed79, 0xee75, 0xed79, 0xee75, +0xed95, 0xee8d, 0xed95, 0xee8d, 0xed95, 0xee8d, 0xed82, 0xee72, 0xed82, 0xee72, 0xee57, +0xef3a, 0xee57, 0xef3a, 0xf054, 0xf126, 0xf054, 0xf126, 0xf217, 0xf2d1, 0xf217, 0xf2d1, +0xf3ac, 0xf447, 0xf3ac, 0xf447, 0xf672, 0xf6e8, 0xf672, 0xf6e8, 0xf672, 0xf6e8, 0xf85b, +0xf8a5, 0xf85b, 0xf8a5, 0xfa8f, 0xfaa8, 0xfa8f, 0xfaa8, 0xfe19, 0xfdfb, 0xfe19, 0xfdfb, +0x1ad, 0x154, 0x1ad, 0x154, 0x46e, 0x3d7, 0x46e, 0x3d7, 0x577, 0x49f, 0x577, +0x49f, 0x577, 0x49f, 0x7a0, 0x688, 0x7a0, 0x688, 0x961, 0x80a, 0x961, 0x80a, +0xbf4, 0xa60, 0xbf4, 0xa60, 0xe50, 0xc84, 0xe50, 0xc84, 0x1041, 0xe42, 0x1041, +0xe42, 0x1041, 0xe42, 0x11f2, 0xfc8, 0x11f2, 0xfc8, 0x1237, 0xfeb, 0x1237, 0xfeb, +0x14c1, 0x125b, 0x14c1, 0x125b, 0x15ff, 0x138a, 0x15ff, 0x138a, 0x16a1, 0x1427, 0x16a1, +0x1427, 0x168f, 0x141b, 0x168f, 0x141b, 0x168f, 0x141b, 0x16e5, 0x1481, 0x16e5, 0x1481, +0x1946, 0x16fb, 0x1946, 0x16fb, 0x1a65, 0x183c, 0x1a65, 0x183c, 0x1b40, 0x1941, 0x1b40, +0x1941, 0x1a88, 0x18b8, 0x1a88, 0x18b8, 0x1944, 0x17a8, 0x1944, 0x17a8, 0x1944, 0x17a8, +0x17ff, 0x169a, 0x17ff, 0x169a, 0x1637, 0x150a, 0x1637, 0x150a, 0x14b2, 0x13bd, 0x14b2, +0x13bd, 0x13f2, 0x1332, 0x13f2, 0x1332, 0x1415, 0x1386, 0x1415, 0x1386, 0x1415, 0x1386, +0x144e, 0x13ec, 0x144e, 0x13ec, 0x13fd, 0x13c2, 0x13fd, 0x13c2, 0x126f, 0x1255, 0x126f, +0x1255, 0x1147, 0x1145, 0x1147, 0x1145, 0x10fd, 0x110c, 0x10fd, 0x110c, 0x1089, 0x10a2, +0x1089, 0x10a2, 0x1089, 0x10a2, 0xf75, 0xf91, 0xf75, 0xf91, 0xe66, 0xe7d, 0xe66, +0xe7d, 0xd1c, 0xd2a, 0xd1c, 0xd2a, 0xaf2, 0xaf0, 0xaf2, 0xaf0, 0x8b0, 0x89b, +0x8b0, 0x89b, 0x784, 0x758, 0x784, 0x758, 0x784, 0x758, 0x701, 0x6bd, 0x701, +0x6bd, 0x69a, 0x63e, 0x69a, 0x63e, 0x67a, 0x606, 0x67a, 0x606, 0x53c, 0x4b1, +0x53c, 0x4b1, 0x46b, 0x3cc, 0x46b, 0x3cc, 0x46b, 0x3cc, 0x485, 0x3d4, 0x485, +0x3d4, 0x530, 0x472, 0x530, 0x472, 0x4ea, 0x421, 0x4ea, 0x421, 0x2cd, 0x1fe, +0x2cd, 0x1fe, 0x2cc, 0x1fa, 0x2cc, 0x1fa, 0x1f2, 0x120, 0x1f2, 0x120, 0x1f2, +0x120, 0x88, 0xffbb, 0x88, 0xffbb, 0x103, 0x3c, 0x103, 0x3c, 0x15, 0xff56, +0x15, 0xff56, 0x69, 0xffb5, 0x69, 0xffb5, 0x191, 0xe7, 0x191, 0xe7, 0x1dd, +0x13c, 0x1dd, 0x13c, 0x1dd, 0x13c, 0x227, 0x18f, 0x227, 0x18f, 0x1f4, 0x163, +0x1f4, 0x163, 0x22f, 0x1a3, 0x22f, 0x1a3, 0xd6, 0x4b, 0xd6, 0x4b, 0xff17, +0xfe89, 0xff17, 0xfe89, 0xff17, 0xfe89, 0xff56, 0xfec2, 0xff56, 0xfec2, 0xff50, 0xfeb0, +0xff50, 0xfeb0, 0xfec7, 0xfe18, 0xfec7, 0xfe18, 0xfe30, 0xfd6d, 0xfe30, 0xfd6d, 0xfd2d, +0xfc51, 0xfd2d, 0xfc51, 0xfccd, 0xfbd5, 0xfccd, 0xfbd5, 0xfccd, 0xfbd5, 0xfc95, 0xfb7b, +0xfc95, 0xfb7b, 0xfd85, 0xfc47, 0xfd85, 0xfc47, 0xff37, 0xfdd0, 0xff37, 0xfdd0, 0xff74, +0xfde2, 0xff74, 0xfde2, 0xd6, 0xff17, 0xd6, 0xff17, 0xd6, 0xff17, 0x254, 0x64, +0x254, 0x64, 0x40d, 0x1ee, 0x40d, 0x1ee, 0x682, 0x432, 0x682, 0x432, 0x89c, +0x61c, 0x89c, 0x61c, 0xaa4, 0x7f4, 0xaa4, 0x7f4, 0xa64, 0x787, 0xa64, 0x787, +0xa64, 0x787, 0xad2, 0x7cb, 0xad2, 0x7cb, 0xc68, 0x93a, 0xc68, 0x93a, 0xcce, +0x97e, 0xcce, 0x97e, 0xe16, 0xaa8, 0xe16, 0xaa8, 0x105d, 0xcd6, 0x105d, 0xcd6, +0x11a6, 0xe0d, 0x11a6, 0xe0d, 0x11a6, 0xe0d, 0x121b, 0xe76, 0x121b, 0xe76, 0x1125, +0xd79, 0x1125, 0xd79, 0xfbb, 0xc10, 0xfbb, 0xc10, 0xf40, 0xb9b, 0xf40, 0xb9b, +0xdd3, 0xa3b, 0xdd3, 0xa3b, 0xdd3, 0xa3b, 0xd52, 0x9cd, 0xd52, 0x9cd, 0xdcf, +0xa63, 0xdcf, 0xa63, 0xf2f, 0xbdf, 0xf2f, 0xbdf, 0x1019, 0xcea, 0x1019, 0xcea, +0xed9, 0xbcf, 0xed9, 0xbcf, 0xdb8, 0xad4, 0xdb8, 0xad4, 0xdb8, 0xad4, 0xc5b, +0x99f, 0xc5b, 0x99f, 0xbad, 0x919, 0xbad, 0x919, 0xc52, 0x9e6, 0xc52, 0x9e6, +0xc82, 0xa3d, 0xc82, 0xa3d, 0xbc0, 0x9a0, 0xbc0, 0x9a0, 0xbd1, 0x9d4, 0xbd1, +0x9d4, 0xbd1, 0x9d4, 0xc2b, 0xa4e, 0xc2b, 0xa4e, 0xc0a, 0xa49, 0xc0a, 0xa49, +0xad1, 0x929, 0xad1, 0x929, 0x8b2, 0x721, 0x8b2, 0x721, 0x7b2, 0x633, 0x7b2, +0x633, 0x7b2, 0x633, 0x723, 0x5b6, 0x723, 0x5b6, 0x7db, 0x67c, 0x7db, 0x67c, +0x85f, 0x70d, 0x85f, 0x70d, 0x763, 0x61c, 0x763, 0x61c, 0x6d7, 0x59c, 0x6d7, +0x59c, 0x629, 0x4fb, 0x629, 0x4fb, 0x629, 0x4fb, 0x53c, 0x41c, 0x53c, 0x41c, +0x5f0, 0x4e1, 0x5f0, 0x4e1, 0x642, 0x546, 0x642, 0x546, 0x5aa, 0x4c6, 0x5aa, +0x4c6, 0x593, 0x4c9, 0x593, 0x4c9, 0x4b6, 0x40b, 0x4b6, 0x40b, 0x4b6, 0x40b, +0x517, 0x48e, 0x517, 0x48e, 0x520, 0x4bd, 0x520, 0x4bd, 0x4d6, 0x49d, 0x4d6, +0x49d, 0x5fa, 0x5ee, 0x5fa, 0x5ee, 0x5ff, 0x623, 0x5ff, 0x623, 0x5ff, 0x623, +0x458, 0x4ad, 0x458, 0x4ad, 0x162, 0x1ea, 0x162, 0x1ea, 0xff1b, 0xffd6, 0xff1b, +0xffd6, 0xfd42, 0xfe31, 0xfd42, 0xfe31, 0xfcae, 0xfdcf, 0xfcae, 0xfdcf, 0xfd92, 0xfee5, +0xfd92, 0xfee5, 0xfd92, 0xfee5, 0xfd00, 0xfe83, 0xfd00, 0xfe83, 0xfd26, 0xfed6, 0xfd26, +0xfed6, 0xfda8, 0xff84, 0xfda8, 0xff84, 0xfd37, 0xff3d, 0xfd37, 0xff3d, 0xfc4d, 0xfe7a, +0xfc4d, 0xfe7a, 0xfa0d, 0xfc60, 0xfa0d, 0xfc60, 0xfa0d, 0xfc60, 0xf8e5, 0xfb5c, 0xf8e5, +0xfb5c, 0xf78a, 0xfa24, 0xf78a, 0xfa24, 0xf515, 0xf7d1, 0xf515, 0xf7d1, 0xf317, 0xf5f5, +0xf317, 0xf5f5, 0xf0ad, 0xf3ad, 0xf0ad, 0xf3ad, 0xf0ad, 0xf3ad, 0xef0b, 0xf22d, 0xef0b, +0xf22d, 0xeec2, 0xf207, 0xeec2, 0xf207, 0xeef2, 0xf259, 0xeef2, 0xf259, 0xeec2, 0xf24c, +0xeec2, 0xf24c, 0xeeea, 0xf299, 0xeeea, 0xf299, 0xee15, 0xf1e7, 0xee15, 0xf1e7, 0xee15, +0xf1e7, 0xec5a, 0xf04e, 0xec5a, 0xf04e, 0xeb6e, 0xef83, 0xeb6e, 0xef83, 0xeb2e, 0xef61, +0xeb2e, 0xef61, 0xec3b, 0xf089, 0xec3b, 0xf089, 0xec9f, 0xf104, 0xec9f, 0xf104, 0xec1e, +0xf096, 0xec1e, 0xf096, 0xec1e, 0xf096, 0xeb6d, 0xeff1, 0xeb6d, 0xeff1, 0xeabe, 0xef49, +0xeabe, 0xef49, 0xea8d, 0xef17, 0xea8d, 0xef17, 0xeaa4, 0xef26, 0xeaa4, 0xef26, 0xeae3, +0xef55, 0xeae3, 0xef55, 0xeae3, 0xef55, 0xeab8, 0xef15, 0xeab8, 0xef15, 0xe929, 0xed68, +0xe929, 0xed68, 0xe84a, 0xec66, 0xe84a, 0xec66, 0xe846, 0xec3b, 0xe846, 0xec3b, 0xe768, +0xeb32, 0xe768, 0xeb32, 0xe771, 0xeb0c, 0xe771, 0xeb0c, 0xe771, 0xeb0c, 0xe705, 0xea71, +0xe705, 0xea71, 0xe7c0, 0xeafe, 0xe7c0, 0xeafe, 0xe8bc, 0xebcd, 0xe8bc, 0xebcd, 0xe996, +0xec7f, 0xe996, 0xec7f, 0xea27, 0xeced, 0xea27, 0xeced, 0xe805, 0xeaad, 0xe805, 0xeaad, +0xe805, 0xeaad, 0xe771, 0xea03, 0xe771, 0xea03, 0xe712, 0xe996, 0xe712, 0xe996, 0xe6e8, +0xe966, 0xe6e8, 0xe966, 0xe766, 0xe9e7, 0xe766, 0xe9e7, 0xe6c8, 0xe953, 0xe6c8, 0xe953, +0xe6c8, 0xe953, 0xe69f, 0xe93d, 0xe69f, 0xe93d, 0xe72d, 0xe9e4, 0xe72d, 0xe9e4, 0xe6bd, +0xe992, 0xe6bd, 0xe992, 0xe633, 0xe92c, 0xe633, 0xe92c, 0xe68c, 0xe9ab, 0xe68c, 0xe9ab, +0xe605, 0xe94c, 0xe605, 0xe94c, 0xe605, 0xe94c, 0xe5f7, 0xe964, 0xe5f7, 0xe964, 0xe568, +0xe8fa, 0xe568, 0xe8fa, 0xe472, 0xe825, 0xe472, 0xe825, 0xe2c4, 0xe693, 0xe2c4, 0xe693, +0xe0cc, 0xe4b0, 0xe0cc, 0xe4b0, 0xdef4, 0xe2e7, 0xdef4, 0xe2e7, 0xdef4, 0xe2e7, 0xdd5c, +0xe155, 0xdd5c, 0xe155, 0xddc6, 0xe1bd, 0xddc6, 0xe1bd, 0xdd70, 0xe15d, 0xdd70, 0xe15d, +0xdd71, 0xe14c, 0xdd71, 0xe14c, 0xdeef, 0xe2ae, 0xdeef, 0xe2ae, 0xdeef, 0xe2ae, 0xe150, +0xe4ee, 0xe150, 0xe4ee, 0xe337, 0xe6ab, 0xe337, 0xe6ab, 0xe3f5, 0xe73b, 0xe3f5, 0xe73b, +0xe3c5, 0xe6d9, 0xe3c5, 0xe6d9, 0xe33d, 0xe61b, 0xe33d, 0xe61b, 0xe32c, 0xe5d2, 0xe32c, +0xe5d2, 0xe32c, 0xe5d2, 0xe421, 0xe68e, 0xe421, 0xe68e, 0xe706, 0xe93a, 0xe706, 0xe93a, +0xe900, 0xeafb, 0xe900, 0xeafb, 0xeb5b, 0xed1f, 0xeb5b, 0xed1f, 0xed53, 0xeee0, 0xed53, +0xeee0, 0xeed1, 0xf02b, 0xeed1, 0xf02b, 0xeed1, 0xf02b, 0xf074, 0xf19b, 0xf074, 0xf19b, +0xf171, 0xf269, 0xf171, 0xf269, 0xf385, 0xf44e, 0xf385, 0xf44e, 0xf411, 0xf4ae, 0xf411, +0xf4ae, 0xf529, 0xf599, 0xf529, 0xf599, 0xf529, 0xf599, 0xf73b, 0xf780, 0xf73b, 0xf780, +0xf8a4, 0xf8bc, 0xf8a4, 0xf8bc, 0xf9cc, 0xf9b7, 0xf9cc, 0xf9b7, 0xfa31, 0xf9ed, 0xfa31, +0xf9ed, 0xfa0f, 0xf99c, 0xfa0f, 0xf99c, 0xf96a, 0xf8c5, 0xf96a, 0xf8c5, 0xf96a, 0xf8c5, +0xf9ae, 0xf8d5, 0xf9ae, 0xf8d5, 0xfa94, 0xf986, 0xfa94, 0xf986, 0xfc9d, 0xfb57, 0xfc9d, +0xfb57, 0xff81, 0xfe02, 0xff81, 0xfe02, 0x1dc, 0x22, 0x1dc, 0x22, 0x1dc, 0x22, +0x450, 0x25b, 0x450, 0x25b, 0x6cf, 0x49f, 0x6cf, 0x49f, 0x8ad, 0x643, 0x8ad, +0x643, 0x9d4, 0x730, 0x9d4, 0x730, 0xab5, 0x7da, 0xab5, 0x7da, 0xb9d, 0x88c, +0xb9d, 0x88c, 0xb9d, 0x88c, 0xd5c, 0xa1a, 0xd5c, 0xa1a, 0xfe9, 0xc79, 0xfe9, +0xc79, 0x115e, 0xdc5, 0x115e, 0xdc5, 0x12ce, 0xf11, 0x12ce, 0xf11, 0x15a2, 0x11c5, +0x15a2, 0x11c5, 0x1753, 0x135c, 0x1753, 0x135c, 0x1753, 0x135c, 0x19ae, 0x15a3, 0x19ae, +0x15a3, 0x1c0a, 0x17f1, 0x1c0a, 0x17f1, 0x1cc6, 0x18a5, 0x1cc6, 0x18a5, 0x1f40, 0x1b1c, +0x1f40, 0x1b1c, 0x2050, 0x1c2f, 0x2050, 0x1c2f, 0x2050, 0x1c2f, 0x2041, 0x1c2a, 0x2041, +0x1c2a, 0x2093, 0x1c8c, 0x2093, 0x1c8c, 0x2047, 0x1c55, 0x2047, 0x1c55, 0x2266, 0x1e91, +0x2266, 0x1e91, 0x24e1, 0x212e, 0x24e1, 0x212e, 0x25e5, 0x225a, 0x25e5, 0x225a, 0x25e5, +0x225a, 0x25fa, 0x229e, 0x25fa, 0x229e, 0x257e, 0x2255, 0x257e, 0x2255, 0x24f6, 0x2208, +0x24f6, 0x2208, 0x2400, 0x2151, 0x2400, 0x2151, 0x2296, 0x202d, 0x2296, 0x202d, 0x20bc, +0x1e9d, 0x20bc, 0x1e9d, 0x20bc, 0x1e9d, 0x2013, 0x1e41, 0x2013, 0x1e41, 0x1f88, 0x1e08, +0x1f88, 0x1e08, 0x1eb4, 0x1d87, 0x1eb4, 0x1d87, 0x1d14, 0x1c3d, 0x1d14, 0x1c3d, 0x194d, +0x18cb, 0x194d, 0x18cb, 0x194d, 0x18cb, 0x1698, 0x166a, 0x1698, 0x166a, 0x154e, 0x1573, +0x154e, 0x1573, 0x142a, 0x149e, 0x142a, 0x149e, 0x12ae, 0x136e, 0x12ae, 0x136e, 0x1003, +0x1107, 0x1003, 0x1107, 0xc8b, 0xdcd, 0xc8b, 0xdcd, 0xc8b, 0xdcd, 0x905, 0xa7c, +0x905, 0xa7c, 0x678, 0x81d, 0x678, 0x81d, 0x543, 0x70b, 0x543, 0x70b, 0x3a0, +0x583, 0x3a0, 0x583, 0x99, 0x28c, 0x99, 0x28c, 0xfeb8, 0xb3, 0xfeb8, 0xb3, +0xfeb8, 0xb3, 0xfe66, 0x5f, 0xfe66, 0x5f, 0xfdf2, 0xffe2, 0xfdf2, 0xffe2, 0xfde0, +0xffc0, 0xfde0, 0xffc0, 0xfddd, 0xffa6, 0xfddd, 0xffa6, 0xfc8f, 0xfe3e, 0xfc8f, 0xfe3e, +0xfc8f, 0xfe3e, 0xfc07, 0xfd99, 0xfc07, 0xfd99, 0xfc0b, 0xfd7f, 0xfc0b, 0xfd7f, 0xfb0d, +0xfc63, 0xfb0d, 0xfc63, 0xfaa5, 0xfbe0, 0xfaa5, 0xfbe0, 0xf9b9, 0xfadb, 0xf9b9, 0xfadb, +0xf8c1, 0xf9d0, 0xf8c1, 0xf9d0, 0xf8c1, 0xf9d0, 0xf7f4, 0xf8f4, 0xf7f4, 0xf8f4, 0xf71e, +0xf816, 0xf71e, 0xf816, 0xf707, 0xf7ff, 0xf707, 0xf7ff, 0xf69c, 0xf799, 0xf69c, 0xf799, +0xf625, 0xf72e, 0xf625, 0xf72e, 0xf4a2, 0xf5bc, 0xf4a2, 0xf5bc, 0xf4a2, 0xf5bc, 0xf34b, +0xf47c, 0xf34b, 0xf47c, 0xf212, 0xf35e, 0xf212, 0xf35e, 0xefe8, 0xf151, 0xefe8, 0xf151, +0xee88, 0xf00f, 0xee88, 0xf00f, 0xec06, 0xedaa, 0xec06, 0xedaa, 0xec06, 0xedaa, 0xe9e7, +0xeba6, 0xe9e7, 0xeba6, 0xea38, 0xec10, 0xea38, 0xec10, 0xea19, 0xec03, 0xea19, 0xec03, +0xea7f, 0xec75, 0xea7f, 0xec75, 0xec98, 0xee91, 0xec98, 0xee91, 0xedb1, 0xefa5, 0xedb1, +0xefa5, 0xedb1, 0xefa5, 0xee09, 0xeff0, 0xee09, 0xeff0, 0xeea0, 0xf070, 0xeea0, 0xf070, +0xeece, 0xf07c, 0xeece, 0xf07c, 0xef67, 0xf0ea, 0xef67, 0xf0ea, 0xf116, 0xf265, 0xf116, +0xf265, 0xf494, 0xf5a8, 0xf494, 0xf5a8, 0xf494, 0xf5a8, 0xf89b, 0xf96c, 0xf89b, 0xf96c, +0xfb66, 0xfbee, 0xfb66, 0xfbee, 0xfce4, 0xfd1f, 0xfce4, 0xfd1f, 0xfdda, 0xfdc6, 0xfdda, +0xfdc6, 0xff16, 0xfeb0, 0xff16, 0xfeb0, 0xff16, 0xfeb0, 0xffc5, 0xff0e, 0xffc5, 0xff0e, +0x10f, 0x9, 0x10f, 0x9, 0x2df, 0x18e, 0x2df, 0x18e, 0x56d, 0x3d5, 0x56d, +0x3d5, 0x84e, 0x674, 0x84e, 0x674, 0x9be, 0x7a9, 0x9be, 0x7a9, 0x9be, 0x7a9, +0xc18, 0x9d1, 0xc18, 0x9d1, 0xdc1, 0xb4e, 0xdc1, 0xb4e, 0xeb4, 0xc1f, 0xeb4, +0xc1f, 0x10c3, 0xe14, 0x10c3, 0xe14, 0x1156, 0xe96, 0x1156, 0xe96, 0x1194, 0xecb, +0x1194, 0xecb, 0x1194, 0xecb, 0x1236, 0xf6c, 0x1236, 0xf6c, 0x129f, 0xfdc, 0x129f, +0xfdc, 0x13ff, 0x114b, 0x13ff, 0x114b, 0x14f5, 0x1256, 0x14f5, 0x1256, 0x153c, 0x12b7, +0x153c, 0x12b7, 0x153c, 0x12b7, 0x14c5, 0x1260, 0x14c5, 0x1260, 0x129d, 0x105b, 0x129d, +0x105b, 0x10d8, 0xebd, 0x10d8, 0xebd, 0xff7, 0xe03, 0xff7, 0xe03, 0xfbc, 0xdf3, +0xfbc, 0xdf3, 0xf26, 0xd87, 0xf26, 0xd87, 0xf26, 0xd87, 0xe88, 0xd13, 0xe88, +0xd13, 0xe79, 0xd2d, 0xe79, 0xd2d, 0xd72, 0xc4d, 0xd72, 0xc4d, 0xcd3, 0xbd2, +0xcd3, 0xbd2, 0xb9f, 0xabf, 0xb9f, 0xabf, 0x9f7, 0x935, 0x9f7, 0x935, 0x9f7, +0x935, 0x813, 0x76b, 0x813, 0x76b, 0x613, 0x581, 0x613, 0x581, 0x595, 0x513, +0x595, 0x513, 0x55b, 0x4e5, 0x55b, 0x4e5, 0x5af, 0x543, 0x5af, 0x543, 0x5af, +0x543, 0x5b7, 0x54e, 0x5b7, 0x54e, 0x559, 0x4f1, 0x559, 0x4f1, 0x540, 0x4d6, +0x540, 0x4d6, 0x538, 0x4c7, 0x538, 0x4c7, 0x4e0, 0x468, 0x4e0, 0x468, 0x385, +0x304, 0x385, 0x304, 0x385, 0x304, 0x272, 0x1e7, 0x272, 0x1e7, 0x220, 0x18b, +0x220, 0x18b, 0x1a2, 0x105, 0x1a2, 0x105, 0x1e1, 0x13c, 0x1e1, 0x13c, 0x315, +0x269, 0x315, 0x269, 0x31e, 0x26e, 0x31e, 0x26e, 0x31e, 0x26e, 0x354, 0x2a4, +0x354, 0x2a4, 0x381, 0x2d1, 0x381, 0x2d1, 0x35e, 0x2b1, 0x35e, 0x2b1, 0x372, +0x2cb, 0x372, 0x2cb, 0x388, 0x2e7, 0x388, 0x2e7, 0x388, 0x2e7, 0x471, 0x3d8, +0x471, 0x3d8, 0x472, 0x3e1, 0x472, 0x3e1, 0x500, 0x475, 0x500, 0x475, 0x4fd, +0x477, 0x4fd, 0x477, 0x3d4, 0x34f, 0x3d4, 0x34f, 0x2c9, 0x241, 0x2c9, 0x241, +0x2c9, 0x241, 0x139, 0xa9, 0x139, 0xa9, 0x84, 0xffe6, 0x84, 0xffe6, 0xfef2, +0xfe3f, 0xfef2, 0xfe3f, 0xfe33, 0xfd63, 0xfe33, 0xfd63, 0xff4a, 0xfe55, 0xff4a, 0xfe55, +0xff4a, 0xfe55, 0xc8, 0xffa8, 0xc8, 0xffa8, 0x256, 0x102, 0x256, 0x102, 0x345, +0x1b7, 0x345, 0x1b7, 0x48e, 0x2bf, 0x48e, 0x2bf, 0x50d, 0x2f9, 0x50d, 0x2f9, +0x5eb, 0x38f, 0x5eb, 0x38f, 0x5eb, 0x38f, 0x7a7, 0x501, 0x7a7, 0x501, 0x8d6, +0x5e6, 0x8d6, 0x5e6, 0xa37, 0x700, 0xa37, 0x700, 0xbfe, 0x883, 0xbfe, 0x883, +0xdee, 0xa36, 0xdee, 0xa36, 0xf38, 0xb4a, 0xf38, 0xb4a, 0xf38, 0xb4a, 0x1054, +0xc39, 0x1054, 0xc39, 0x1166, 0xd2b, 0x1166, 0xd2b, 0x126c, 0xe1b, 0x126c, 0xe1b, +0x13d3, 0xf7a, 0x13d3, 0xf7a, 0x147c, 0x1026, 0x147c, 0x1026, 0x147c, 0x1026, 0x147d, +0x1039, 0x147d, 0x1039, 0x13c2, 0xf9c, 0x13c2, 0xf9c, 0x129c, 0xe9f, 0x129c, 0xe9f, +0x12ac, 0xee2, 0x12ac, 0xee2, 0x1389, 0xffc, 0x1389, 0xffc, 0x1515, 0x11cd, 0x1515, +0x11cd, 0x1515, 0x11cd, 0x1633, 0x1335, 0x1633, 0x1335, 0x162b, 0x1379, 0x162b, 0x1379, +0x15fd, 0x1399, 0x15fd, 0x1399, 0x14a5, 0x128e, 0x14a5, 0x128e, 0x13a4, 0x11d7, 0x13a4, +0x11d7, 0x12ca, 0x1143, 0x12ca, 0x1143, 0x12ca, 0x1143, 0x10bb, 0xf73, 0x10bb, 0xf73, +0xf77, 0xe68, 0xf77, 0xe68, 0xebd, 0xddd, 0xebd, 0xddd, 0xead, 0xdf4, 0xead, +0xdf4, 0xeda, 0xe3f, 0xeda, 0xe3f, 0xeda, 0xe3f, 0xe16, 0xd91, 0xe16, 0xd91, +0xd09, 0xc90, 0xd09, 0xc90, 0xba5, 0xb30, 0xba5, 0xb30, 0x9ec, 0x976, 0x9ec, +0x976, 0x913, 0x895, 0x913, 0x895, 0x8e5, 0x85b, 0x8e5, 0x85b, 0x8e5, 0x85b, +0x8cb, 0x831, 0x8cb, 0x831, 0x90a, 0x85f, 0x90a, 0x85f, 0x8e6, 0x829, 0x8e6, +0x829, 0x8ce, 0x800, 0x8ce, 0x800, 0x846, 0x769, 0x846, 0x769, 0x7a7, 0x6be, +0x7a7, 0x6be, 0x7a7, 0x6be, 0x77c, 0x689, 0x77c, 0x689, 0x741, 0x649, 0x741, +0x649, 0x7cc, 0x6d3, 0x7cc, 0x6d3, 0x81c, 0x727, 0x81c, 0x727, 0x828, 0x73b, +0x828, 0x73b, 0x828, 0x73b, 0x79e, 0x6bc, 0x79e, 0x6bc, 0x6d0, 0x5fe, 0x6d0, +0x5fe, 0x5db, 0x51c, 0x5db, 0x51c, 0x439, 0x390, 0x439, 0x390, 0x298, 0x207, +0x298, 0x207, 0x1c, 0xffa6, 0x1c, 0xffa6, 0x1c, 0xffa6, 0xfda7, 0xfd4d, 0xfda7, +0xfd4d, 0xfbc9, 0xfb8e, 0xfbc9, 0xfb8e, 0xfb35, 0xfb19, 0xfb35, 0xfb19, 0xfb3d, 0xfb42, +0xfb3d, 0xfb42, 0xfad4, 0xfafb, 0xfad4, 0xfafb, 0xfae2, 0xfb2d, 0xfae2, 0xfb2d, 0xfae2, +0xfb2d, 0xf9ef, 0xfa60, 0xf9ef, 0xfa60, 0xf8bc, 0xf956, 0xf8bc, 0xf956, 0xf87b, 0xf93f, +0xf87b, 0xf93f, 0xf767, 0xf858, 0xf767, 0xf858, 0xf510, 0xf632, 0xf510, 0xf632, 0xf510, +0xf632, 0xf309, 0xf45e, 0xf309, 0xf45e, 0xf1d8, 0xf363, 0xf1d8, 0xf363, 0xf130, 0xf2f4, +0xf130, 0xf2f4, 0xf038, 0xf237, 0xf038, 0xf237, 0xeec7, 0xf103, 0xeec7, 0xf103, 0xee0c, +0xf088, 0xee0c, 0xf088, 0xee0c, 0xf088, 0xecc8, 0xef84, 0xecc8, 0xef84, 0xebc0, 0xeebb, +0xebc0, 0xeebb, 0xeb44, 0xee7e, 0xeb44, 0xee7e, 0xe9b4, 0xed29, 0xe9b4, 0xed29, 0xe8c6, +0xec74, 0xe8c6, 0xec74, 0xe854, 0xec36, 0xe854, 0xec36, 0xe854, 0xec36, 0xe7bd, 0xebce, +0xe7bd, 0xebce, 0xe705, 0xeb3e, 0xe705, 0xeb3e, 0xe695, 0xeaf0, 0xe695, 0xeaf0, 0xe72a, +0xeb9e, 0xe72a, 0xeb9e, 0xe750, 0xebd4, 0xe750, 0xebd4, 0xe750, 0xebd4, 0xe67a, 0xeb05, +0xe67a, 0xeb05, 0xe52f, 0xe9ba, 0xe52f, 0xe9ba, 0xe4e6, 0xe968, 0xe4e6, 0xe968, 0xe578, +0xe9e8, 0xe578, 0xe9e8, 0xe6dc, 0xeb35, 0xe6dc, 0xeb35, 0xe83b, 0xec74, 0xe83b, 0xec74, +0xe83b, 0xec74, 0xe869, 0xec7e, 0xe869, 0xec7e, 0xe8f9, 0xece5, 0xe8f9, 0xece5, 0xe841, +0xec00, 0xe841, 0xec00, 0xe773, 0xeb04, 0xe773, 0xeb04, 0xe7a1, 0xeb03, 0xe7a1, 0xeb03, +0xe78a, 0xeabd, 0xe78a, 0xeabd, 0xe78a, 0xeabd, 0xe83b, 0xeb41, 0xe83b, 0xeb41, 0xe8f1, +0xebcb, 0xe8f1, 0xebcb, 0xea0c, 0xecbd, 0xea0c, 0xecbd, 0xeb23, 0xedaf, 0xeb23, 0xedaf, +0xeb61, 0xedcc, 0xeb61, 0xedcc, 0xeb61, 0xedcc, 0xeb10, 0xed5e, 0xeb10, 0xed5e, 0xea5e, +0xec92, 0xea5e, 0xec92, 0xea87, 0xeca7, 0xea87, 0xeca7, 0xeab4, 0xecc2, 0xeab4, 0xecc2, +0xea47, 0xec48, 0xea47, 0xec48, 0xea74, 0xec6a, 0xea74, 0xec6a, 0xea74, 0xec6a, 0xeb30, +0xed1e, 0xeb30, 0xed1e, 0xeccd, 0xeeb6, 0xeccd, 0xeeb6, 0xee06, 0xefeb, 0xee06, 0xefeb, +0xeea0, 0xf083, 0xeea0, 0xf083, 0xef42, 0xf122, 0xef42, 0xf122, 0xee10, 0xefef, 0xee10, +0xefef, 0xee10, 0xefef, 0xece0, 0xeebd, 0xece0, 0xeebd, 0xeb4a, 0xed26, 0xeb4a, 0xed26, +0xe94a, 0xeb24, 0xe94a, 0xeb24, 0xe896, 0xea6e, 0xe896, 0xea6e, 0xe776, 0xe94d, 0xe776, +0xe94d, 0xe776, 0xe94d, 0xe6ce, 0xe8a2, 0xe6ce, 0xe8a2, 0xe679, 0xe84b, 0xe679, 0xe84b, +0xe603, 0xe7d3, 0xe603, 0xe7d3, 0xe6c9, 0xe896, 0xe6c9, 0xe896, 0xe7fc, 0xe9c9, 0xe7fc, +0xe9c9, 0xe81e, 0xe9e9, 0xe81e, 0xe9e9, 0xe81e, 0xe9e9, 0xe816, 0xe9e1, 0xe816, 0xe9e1, +0xe723, 0xe8ee, 0xe723, 0xe8ee, 0xe61b, 0xe7e7, 0xe61b, 0xe7e7, 0xe6a7, 0xe874, 0xe6a7, +0xe874, 0xe6bb, 0xe88a, 0xe6bb, 0xe88a, 0xe72f, 0xe900, 0xe72f, 0xe900, 0xe72f, 0xe900, +0xe7c3, 0xe996, 0xe7c3, 0xe996, 0xe94f, 0xeb23, 0xe94f, 0xeb23, 0xeb87, 0xed5c, 0xeb87, +0xed5c, 0xecc8, 0xee9d, 0xecc8, 0xee9d, 0xee2b, 0xefff, 0xee2b, 0xefff, 0xee2b, 0xefff, +0xee32, 0xf002, 0xee32, 0xf002, 0xee60, 0xf02a, 0xee60, 0xf02a, 0xf042, 0xf205, 0xf042, +0xf205, 0xf27b, 0xf432, 0xf27b, 0xf432, 0xf425, 0xf5cf, 0xf425, 0xf5cf, 0xf570, 0xf709, +0xf570, 0xf709, 0xf570, 0xf709, 0xf6b2, 0xf836, 0xf6b2, 0xf836, 0xf77f, 0xf8ec, 0xf77f, +0xf8ec, 0xf751, 0xf8a1, 0xf751, 0xf8a1, 0xf62b, 0xf75c, 0xf62b, 0xf75c, 0xf617, 0xf724, +0xf617, 0xf724, 0xf617, 0xf724, 0xf683, 0xf768, 0xf683, 0xf768, 0xf77e, 0xf838, 0xf77e, +0xf838, 0xf9e5, 0xfa6f, 0xf9e5, 0xfa6f, 0xfb51, 0xfba7, 0xfb51, 0xfba7, 0xfcaf, 0xfcce, +0xfcaf, 0xfcce, 0xfe5b, 0xfe3e, 0xfe5b, 0xfe3e, 0xfe5b, 0xfe3e, 0x30, 0xffd4, 0x30, +0xffd4, 0x28d, 0x1ef, 0x28d, 0x1ef, 0x2bb, 0x1d7, 0x2bb, 0x1d7, 0x311, 0x1e5, +0x311, 0x1e5, 0x48b, 0x315, 0x48b, 0x315, 0x641, 0x480, 0x641, 0x480, 0x641, +0x480, 0x9ea, 0x7de, 0x9ea, 0x7de, 0xce8, 0xa90, 0xce8, 0xa90, 0xf4e, 0xcad, +0xf4e, 0xcad, 0x1187, 0xe9e, 0x1187, 0xe9e, 0x12c7, 0xf99, 0x12c7, 0xf99, 0x12c7, +0xf99, 0x1565, 0x11f8, 0x1565, 0x11f8, 0x1825, 0x147e, 0x1825, 0x147e, 0x1a20, 0x1646, +0x1a20, 0x1646, 0x1c13, 0x180e, 0x1c13, 0x180e, 0x1d73, 0x194c, 0x1d73, 0x194c, 0x1f12, +0x1ad2, 0x1f12, 0x1ad2, 0x1f12, 0x1ad2, 0x206e, 0x1c20, 0x206e, 0x1c20, 0x2116, 0x1cc5, +0x2116, 0x1cc5, 0x21e5, 0x1d9d, 0x21e5, 0x1d9d, 0x231d, 0x1ee9, 0x231d, 0x1ee9, 0x2404, +0x1ff1, 0x2404, 0x1ff1, 0x2320, 0x1f38, 0x2320, 0x1f38, 0x2320, 0x1f38, 0x21c6, 0x1e14, +0x21c6, 0x1e14, 0x20b9, 0x1d46, 0x20b9, 0x1d46, 0x1fed, 0x1cc2, 0x1fed, 0x1cc2, 0x1fab, +0x1cd0, 0x1fab, 0x1cd0, 0x1e92, 0x1c0e, 0x1e92, 0x1c0e, 0x1e92, 0x1c0e, 0x1d32, 0x1b08, +0x1d32, 0x1b08, 0x1be8, 0x1a1c, 0x1be8, 0x1a1c, 0x19fa, 0x188c, 0x19fa, 0x188c, 0x1794, +0x1685, 0x1794, 0x1685, 0x1595, 0x14e3, 0x1595, 0x14e3, 0x147b, 0x1423, 0x147b, 0x1423, +0x147b, 0x1423, 0x13ac, 0x13a8, 0x13ac, 0x13a8, 0x135b, 0x13a5, 0x135b, 0x13a5, 0x1267, +0x12f9, 0x1267, 0x12f9, 0xfde, 0x10b1, 0xfde, 0x10b1, 0xdc5, 0xed1, 0xdc5, 0xed1, +0xb0e, 0xc49, 0xb0e, 0xc49, 0xb0e, 0xc49, 0x77f, 0x8e1, 0x77f, 0x8e1, 0x472, +0x5f3, 0x472, 0x5f3, 0x123, 0x2bb, 0x123, 0x2bb, 0xfed8, 0x80, 0xfed8, 0x80, +0xfd32, 0xfee4, 0xfd32, 0xfee4, 0xfd32, 0xfee4, 0xfca7, 0xfe5d, 0xfca7, 0xfe5d, 0xfbfa, +0xfdae, 0xfbfa, 0xfdae, 0xfa0b, 0xfbbb, 0xfa0b, 0xfbbb, 0xf8fb, 0xfaa3, 0xf8fb, 0xfaa3, +0xf725, 0xf8c4, 0xf725, 0xf8c4, 0xf5da, 0xf76f, 0xf5da, 0xf76f, 0xf5da, 0xf76f, 0xf56d, +0xf6f8, 0xf56d, 0xf6f8, 0xf43d, 0xf5c0, 0xf43d, 0xf5c0, 0xf3d9, 0xf554, 0xf3d9, 0xf554, +0xf486, 0xf5fd, 0xf486, 0xf5fd, 0xf579, 0xf6ed, 0xf579, 0xf6ed, 0xf6b7, 0xf82b, 0xf6b7, +0xf82b, 0xf6b7, 0xf82b, 0xf70e, 0xf885, 0xf70e, 0xf885, 0xf5e5, 0xf762, 0xf5e5, 0xf762, +0xf537, 0xf6bd, 0xf537, 0xf6bd, 0xf3d8, 0xf568, 0xf3d8, 0xf568, 0xf23b, 0xf3d9, 0xf23b, +0xf3d9, 0xf23b, 0xf3d9, 0xf107, 0xf2b3, 0xf107, 0xf2b3, 0xf012, 0xf1ce, 0xf012, 0xf1ce, +0xefd8, 0xf1a3, 0xefd8, 0xf1a3, 0xef45, 0xf121, 0xef45, 0xf121, 0xeef9, 0xf0e3, 0xeef9, +0xf0e3, 0xed50, 0xef48, 0xed50, 0xef48, 0xed50, 0xef48, 0xec6d, 0xee70, 0xec6d, 0xee70, +0xecf1, 0xeefd, 0xecf1, 0xeefd, 0xecf9, 0xef0b, 0xecf9, 0xef0b, 0xee41, 0xf054, 0xee41, +0xf054, 0xee5e, 0xf06e, 0xee5e, 0xf06e, 0xef02, 0xf10a, 0xef02, 0xf10a, 0xef02, 0xf10a, +0xf136, 0xf331, 0xf136, 0xf331, 0xf2a4, 0xf48c, 0xf2a4, 0xf48c, 0xf473, 0xf643, 0xf473, +0xf643, 0xf5f5, 0xf7a6, 0xf5f5, 0xf7a6, 0xf7d4, 0xf960, 0xf7d4, 0xf960, 0xf7d4, 0xf960, +0xfaa9, 0xfc0b, 0xfaa9, 0xfc0b, 0xfd12, 0xfe43, 0xfd12, 0xfe43, 0xfe34, 0xff30, 0xfe34, +0xff30, 0xff03, 0xffc5, 0xff03, 0xffc5, 0xfc, 0x180, 0xfc, 0x180, 0x3ef, 0x431, +0x3ef, 0x431, 0x3ef, 0x431, 0x769, 0x767, 0x769, 0x767, 0x9b4, 0x96c, 0x9b4, +0x96c, 0xbc2, 0xb34, 0xbc2, 0xb34, 0xe23, 0xd4e, 0xe23, 0xd4e, 0x1076, 0xf5c, +0x1076, 0xf5c, 0x133c, 0x11e1, 0x133c, 0x11e1, 0x133c, 0x11e1, 0x13fe, 0x1264, 0x13fe, +0x1264, 0x144e, 0x127a, 0x144e, 0x127a, 0x1571, 0x136a, 0x1571, 0x136a, 0x1721, 0x14ed, +0x1721, 0x14ed, 0x19c6, 0x176c, 0x19c6, 0x176c, 0x19c6, 0x176c, 0x1a9b, 0x1823, 0x1a9b, +0x1823, 0x1a38, 0x17aa, 0x1a38, 0x17aa, 0x1a78, 0x17db, 0x1a78, 0x17db, 0x1a2b, 0x1789, +0x1a2b, 0x1789, 0x190e, 0x166d, 0x190e, 0x166d, 0x1879, 0x15e1, 0x1879, 0x15e1, 0x1879, +0x15e1, 0x17b7, 0x152e, 0x17b7, 0x152e, 0x1713, 0x149f, 0x1713, 0x149f, 0x16dc, 0x1481, +0x16dc, 0x1481, 0x163e, 0x1400, 0x163e, 0x1400, 0x16bf, 0x14a0, 0x16bf, 0x14a0, 0x16b6, +0x14b7, 0x16b6, 0x14b7, 0x16b6, 0x14b7, 0x163f, 0x1460, 0x163f, 0x1460, 0x15dc, 0x141c, +0x15dc, 0x141c, 0x13f1, 0x124e, 0x13f1, 0x124e, 0x1247, 0x10bd, 0x1247, 0x10bd, 0x1055, +0xee1, 0x1055, 0xee1, 0x1055, 0xee1, 0xea1, 0xd3e, 0xea1, 0xd3e, 0xd99, 0xc44, +0xd99, 0xc44, 0xc26, 0xada, 0xc26, 0xada, 0xbaf, 0xa67, 0xbaf, 0xa67, 0xaa0, +0x958, 0xaa0, 0x958, 0x90c, 0x7c1, 0x90c, 0x7c1, 0x90c, 0x7c1, 0x846, 0x6f6, +0x846, 0x6f6, 0x691, 0x53b, 0x691, 0x53b, 0x560, 0x402, 0x560, 0x402, 0x56d, +0x407, 0x56d, 0x407, 0x489, 0x31d, 0x489, 0x31d, 0x419, 0x2a8, 0x419, 0x2a8, +0x419, 0x2a8, 0x3ed, 0x27b, 0x3ed, 0x27b, 0x209, 0x99, 0x209, 0x99, 0x125, +0xffbb, 0x125, 0xffbb, 0x279, 0x11a, 0x279, 0x11a, 0x461, 0x312, 0x461, 0x312, +0x461, 0x312, 0x505, 0x3c9, 0x505, 0x3c9, 0x444, 0x320, 0x444, 0x320, 0x40f, +0x307, 0x40f, 0x307, 0x42c, 0x343, 0x42c, 0x343, 0x47c, 0x3b3, 0x47c, 0x3b3, +0x4dc, 0x436, 0x4dc, 0x436, 0x4dc, 0x436, 0x484, 0x400, 0x484, 0x400, 0x328, +0x2c5, 0x328, 0x2c5, 0x203, 0x1be, 0x203, 0x1be, 0xf1, 0xc7, 0xf1, 0xc7, +0xfe7e, 0xfe6a, 0xfe7e, 0xfe6a, 0xfe7e, 0xfe6a, 0xfba9, 0xfba5, 0xfba9, 0xfba5, 0xf935, +0xf93c, 0xf935, 0xf93c, 0xf96d, 0xf977, 0xf96d, 0xf977, 0xfac4, 0xfac8, 0xfac4, 0xfac8, +0xfb46, 0xfb3e, 0xfb46, 0xfb3e, 0xfc60, 0xfc43, 0xfc60, 0xfc43, 0xfc60, 0xfc43, 0xfcb1, +0xfc77, 0xfcb1, 0xfc77, 0xfd88, 0xfd29, 0xfd88, 0xfd29, 0xfe73, 0xfde9, 0xfe73, 0xfde9, +0xfe8c, 0xfdd0, 0xfe8c, 0xfdd0, 0xff5f, 0xfe6c, 0xff5f, 0xfe6c, 0xb9, 0xff8a, 0xb9, +0xff8a, 0xb9, 0xff8a, 0x2ad, 0x13f, 0x2ad, 0x13f, 0x53f, 0x38f, 0x53f, 0x38f, +0x816, 0x624, 0x816, 0x624, 0x9d3, 0x79f, 0x9d3, 0x79f, 0xba3, 0x92e, 0xba3, +0x92e, 0xba3, 0x92e, 0xe27, 0xb74, 0xe27, 0xb74, 0xf65, 0xc78, 0xf65, 0xc78, +0xfe1, 0xcbe, 0xfe1, 0xcbe, 0x1044, 0xcf1, 0x1044, 0xcf1, 0x10bb, 0xd3e, 0x10bb, +0xd3e, 0x11bd, 0xe1e, 0x11bd, 0xe1e, 0x11bd, 0xe1e, 0x12b4, 0xefa, 0x12b4, 0xefa, +0x12eb, 0xf1e, 0x12eb, 0xf1e, 0x1304, 0xf2d, 0x1304, 0xf2d, 0x1266, 0xe8c, 0x1266, +0xe8c, 0x1248, 0xe75, 0x1248, 0xe75, 0x138d, 0xfc9, 0x138d, 0xfc9, 0x138d, 0xfc9, +0x1392, 0xfe6, 0x1392, 0xfe6, 0x1391, 0x1003, 0x1391, 0x1003, 0x1397, 0x1030, 0x1397, +0x1030, 0x136e, 0x1034, 0x136e, 0x1034, 0x13ac, 0x10a6, 0x13ac, 0x10a6, 0x13ac, 0x10a6, +0x126f, 0xfa2, 0x126f, 0xfa2, 0x1109, 0xe7a, 0x1109, 0xe7a, 0xf07, 0xcba, 0xf07, +0xcba, 0xd36, 0xb2d, 0xd36, 0xb2d, 0xcff, 0xb3d, 0xcff, 0xb3d, 0xb9c, 0xa21, +0xb9c, 0xa21, 0xb9c, 0xa21, 0xad9, 0x9a6, 0xad9, 0x9a6, 0xab3, 0x9c7, 0xab3, +0x9c7, 0xa3a, 0x993, 0xa3a, 0x993, 0xb37, 0xad1, 0xb37, 0xad1, 0xb35, 0xb0e, +0xb35, 0xb0e, 0xa02, 0xa14, 0xa02, 0xa14, 0xa02, 0xa14, 0x906, 0x94d, 0x906, +0x94d, 0x881, 0x8f8, 0x881, 0x8f8, 0x826, 0x8c6, 0x826, 0x8c6, 0x76e, 0x831, +0x76e, 0x831, 0x795, 0x875, 0x795, 0x875, 0x795, 0x875, 0x7a2, 0x899, 0x7a2, +0x899, 0x7de, 0x8e6, 0x7de, 0x8e6, 0x875, 0x988, 0x875, 0x988, 0x808, 0x922, +0x808, 0x922, 0x74f, 0x86a, 0x74f, 0x86a, 0x673, 0x78d, 0x673, 0x78d, 0x673, +0x78d, 0x616, 0x72b, 0x616, 0x72b, 0x51a, 0x629, 0x51a, 0x629, 0x1f1, 0x2f9, +0x1f1, 0x2f9, 0xff3c, 0x3d, 0xff3c, 0x3d, 0xfeb2, 0xffac, 0xfeb2, 0xffac, 0xfee8, +0xffde, 0xfee8, 0xffde, 0xfee8, 0xffde, 0xfed4, 0xffc7, 0xfed4, 0xffc7, 0xfe66, 0xff59, +0xfe66, 0xff59, 0xfdcb, 0xfec2, 0xfdcb, 0xfec2, 0xfc5c, 0xfd5a, 0xfc5c, 0xfd5a, 0xfaeb, +0xfbf5, 0xfaeb, 0xfbf5, 0xfaeb, 0xfbf5, 0xfa37, 0xfb51, 0xfa37, 0xfb51, 0xf904, 0xfa32, +0xf904, 0xfa32, 0xf8b1, 0xf9f6, 0xf8b1, 0xf9f6, 0xf808, 0xf967, 0xf808, 0xf967, 0xf689, +0xf805, 0xf689, 0xf805, 0xf5a8, 0xf743, 0xf5a8, 0xf743, 0xf5a8, 0xf743, 0xf3a6, 0xf560, +0xf3a6, 0xf560, 0xf1ee, 0xf3c9, 0xf1ee, 0xf3c9, 0xf09a, 0xf295, 0xf09a, 0xf295, 0xeef9, +0xf111, 0xeef9, 0xf111, 0xed43, 0xef77, 0xed43, 0xef77, 0xeb0a, 0xed57, 0xeb0a, 0xed57, +0xeb0a, 0xed57, 0xea88, 0xece9, 0xea88, 0xece9, 0xeb3e, 0xedb0, 0xeb3e, 0xedb0, 0xeb75, +0xedf2, 0xeb75, 0xedf2, 0xeb88, 0xee0c, 0xeb88, 0xee0c, 0xeb1a, 0xed9f, 0xeb1a, 0xed9f, +0xeb1a, 0xed9f, 0xea0c, 0xec8d, 0xea0c, 0xec8d, 0xe9bf, 0xec36, 0xe9bf, 0xec36, 0xe9d4, +0xec3b, 0xe9d4, 0xec3b, 0xe8f0, 0xeb43, 0xe8f0, 0xeb43, 0xe7ae, 0xe9ea, 0xe7ae, 0xe9ea, +0xe6b9, 0xe8d9, 0xe6b9, 0xe8d9, 0xe6b9, 0xe8d9, 0xe6eb, 0xe8ec, 0xe6eb, 0xe8ec, 0xe840, +0xea21, 0xe840, 0xea21, 0xe950, 0xeb0f, 0xe950, 0xeb0f, 0xe980, 0xeb1d, 0xe980, 0xeb1d, +0xe966, 0xeae2, 0xe966, 0xeae2, 0xe97b, 0xead7, 0xe97b, 0xead7, 0xe97b, 0xead7, 0xe9bf, +0xeafe, 0xe9bf, 0xeafe, 0xe93b, 0xea60, 0xe93b, 0xea60, 0xe7dd, 0xe8ed, 0xe7dd, 0xe8ed, +0xe753, 0xe852, 0xe753, 0xe852, 0xe756, 0xe84a, 0xe756, 0xe84a, 0xe756, 0xe84a, 0xe831, +0xe91f, 0xe831, 0xe91f, 0xe953, 0xea42, 0xe953, 0xea42, 0xe924, 0xea1a, 0xe924, 0xea1a, +0xe8c4, 0xe9c9, 0xe8c4, 0xe9c9, 0xe961, 0xea7b, 0xe961, 0xea7b, 0xeace, 0xec02, 0xeace, +0xec02, 0xeace, 0xec02, 0xeb41, 0xec97, 0xeb41, 0xec97, 0xeb15, 0xec92, 0xeb15, 0xec92, +0xeae8, 0xec92, 0xeae8, 0xec92, 0xea7a, 0xec54, 0xea7a, 0xec54, 0xeacf, 0xecdd, 0xeacf, +0xecdd, 0xeb61, 0xeda7, 0xeb61, 0xeda7, 0xeb61, 0xeda7, 0xebf4, 0xee73, 0xebf4, 0xee73, +0xebd8, 0xee92, 0xebd8, 0xee92, 0xeb1e, 0xee12, 0xeb1e, 0xee12, 0xea85, 0xedb1, 0xea85, +0xedb1, 0xe900, 0xec63, 0xe900, 0xec63, 0xe900, 0xec63, 0xe718, 0xeaaf, 0xe718, 0xeaaf, +0xe607, 0xe9ce, 0xe607, 0xe9ce, 0xe55d, 0xe94f, 0xe55d, 0xe94f, 0xe49a, 0xe8b2, 0xe49a, +0xe8b2, 0xe409, 0xe841, 0xe409, 0xe841, 0xe2f9, 0xe749, 0xe2f9, 0xe749, 0xe2f9, 0xe749, +0xe123, 0xe585, 0xe123, 0xe585, 0xdf98, 0xe404, 0xdf98, 0xe404, 0xdef6, 0xe366, 0xdef6, +0xe366, 0xde71, 0xe2de, 0xde71, 0xe2de, 0xde2e, 0xe290, 0xde2e, 0xe290, 0xdf1f, 0xe36f, +0xdf1f, 0xe36f, 0xdf1f, 0xe36f, 0xe048, 0xe481, 0xe048, 0xe481, 0xe0f6, 0xe511, 0xe0f6, +0xe511, 0xe06a, 0xe463, 0xe06a, 0xe463, 0xe03f, 0xe412, 0xe03f, 0xe412, 0xe10b, 0xe4b4, +0xe10b, 0xe4b4, 0xe10b, 0xe4b4, 0xe1c4, 0xe540, 0xe1c4, 0xe540, 0xe40d, 0xe75a, 0xe40d, +0xe75a, 0xe60d, 0xe92a, 0xe60d, 0xe92a, 0xe733, 0xea1f, 0xe733, 0xea1f, 0xe837, 0xeaf2, +0xe837, 0xeaf2, 0xe860, 0xeae9, 0xe860, 0xeae9, 0xe860, 0xeae9, 0xe9a8, 0xec01, 0xe9a8, +0xec01, 0xebf7, 0xee1f, 0xebf7, 0xee1f, 0xed3e, 0xef37, 0xed3e, 0xef37, 0xee3a, 0xf004, +0xee3a, 0xf004, 0xef7e, 0xf119, 0xef7e, 0xf119, 0xef7e, 0xf119, 0xefa5, 0xf112, 0xefa5, +0xf112, 0xf059, 0xf197, 0xf059, 0xf197, 0xf1a6, 0xf2b5, 0xf1a6, 0xf2b5, 0xf2f8, 0xf3d7, +0xf2f8, 0xf3d7, 0xf567, 0xf614, 0xf567, 0xf614, 0xf750, 0xf7ca, 0xf750, 0xf7ca, 0xf750, +0xf7ca, 0xf8ff, 0xf942, 0xf8ff, 0xf942, 0xf9d2, 0xf9dc, 0xf9d2, 0xf9dc, 0xfa25, 0xf9f2, +0xfa25, 0xf9f2, 0xfbbe, 0xfb4a, 0xfbbe, 0xfb4a, 0xfd7c, 0xfcc4, 0xfd7c, 0xfcc4, 0xff48, +0xfe49, 0xff48, 0xfe49, 0xff48, 0xfe49, 0xf0, 0xffa5, 0xf0, 0xffa5, 0x2a1, 0x107, +0x2a1, 0x107, 0x509, 0x31e, 0x509, 0x31e, 0x7bd, 0x57f, 0x7bd, 0x57f, 0xa4e, +0x7bc, 0xa4e, 0x7bc, 0xa4e, 0x7bc, 0xced, 0xa05, 0xced, 0xa05, 0xf6f, 0xc33, +0xf6f, 0xc33, 0x123b, 0xead, 0x123b, 0xead, 0x153e, 0x115f, 0x153e, 0x115f, 0x179a, +0x1371, 0x179a, 0x1371, 0x1a94, 0x1625, 0x1a94, 0x1625, 0x1a94, 0x1625, 0x1dca, 0x191c, +0x1dca, 0x191c, 0x20de, 0x1bf9, 0x20de, 0x1bf9, 0x2391, 0x1e7e, 0x2391, 0x1e7e, 0x25ad, +0x2076, 0x25ad, 0x2076, 0x2842, 0x22f3, 0x2842, 0x22f3, 0x2a15, 0x24b8, 0x2a15, 0x24b8, +0x2a15, 0x24b8, 0x2b5f, 0x2602, 0x2b5f, 0x2602, 0x2c5f, 0x270e, 0x2c5f, 0x270e, 0x2c73, +0x273a, 0x2c73, 0x273a, 0x2ccd, 0x27ba, 0x2ccd, 0x27ba, 0x2e2b, 0x2949, 0x2e2b, 0x2949, +0x2e2b, 0x2949, 0x2f65, 0x2ac0, 0x2f65, 0x2ac0, 0x2f44, 0x2ae8, 0x2f44, 0x2ae8, 0x2e3d, +0x2a33, 0x2e3d, 0x2a33, 0x2bca, 0x281a, 0x2bca, 0x281a, 0x28ea, 0x259c, 0x28ea, 0x259c, +0x26f8, 0x2412, 0x26f8, 0x2412, 0x26f8, 0x2412, 0x2502, 0x2288, 0x2502, 0x2288, 0x2362, +0x2157, 0x2362, 0x2157, 0x21ed, 0x2052, 0x21ed, 0x2052, 0x2047, 0x1f1b, 0x2047, 0x1f1b, +0x1f30, 0x1e70, 0x1f30, 0x1e70, 0x1dd7, 0x1d80, 0x1dd7, 0x1d80, 0x1dd7, 0x1d80, 0x1bdf, +0x1bec, 0x1bdf, 0x1bec, 0x199d, 0x1a06, 0x199d, 0x1a06, 0x16de, 0x179c, 0x16de, 0x179c, +0x1434, 0x153e, 0x1434, 0x153e, 0x1123, 0x1270, 0x1123, 0x1270, 0x1123, 0x1270, 0xd93, +0xf19, 0xd93, 0xf19, 0xa3f, 0xbf3, 0xa3f, 0xbf3, 0x749, 0x922, 0x749, 0x922, +0x52a, 0x71d, 0x52a, 0x71d, 0x383, 0x586, 0x383, 0x586, 0x176, 0x381, 0x176, +0x381, 0x176, 0x381, 0xff29, 0x133, 0xff29, 0x133, 0xfd28, 0xff2a, 0xfd28, 0xff2a, +0xfaa4, 0xfc97, 0xfaa4, 0xfc97, 0xf850, 0xfa30, 0xf850, 0xfa30, 0xf718, 0xf8e0, 0xf718, +0xf8e0, 0xf647, 0xf7f5, 0xf647, 0xf7f5, 0xf647, 0xf7f5, 0xf620, 0xf7b1, 0xf620, 0xf7b1, +0xf63e, 0xf7b4, 0xf63e, 0xf7b4, 0xf692, 0xf7ec, 0xf692, 0xf7ec, 0xf6a9, 0xf7ea, 0xf6a9, +0xf7ea, 0xf61a, 0xf745, 0xf61a, 0xf745, 0xf61a, 0xf745, 0xf51b, 0xf631, 0xf51b, 0xf631, +0xf408, 0xf50f, 0xf408, 0xf50f, 0xf2e4, 0xf3e0, 0xf2e4, 0xf3e0, 0xf123, 0xf219, 0xf123, +0xf219, 0xefdc, 0xf0d0, 0xefdc, 0xf0d0, 0xef06, 0xeffb, 0xef06, 0xeffb, 0xef06, 0xeffb, +0xee31, 0xef2d, 0xee31, 0xef2d, 0xecbd, 0xedc2, 0xecbd, 0xedc2, 0xeb7d, 0xec8e, 0xeb7d, +0xec8e, 0xeb10, 0xec2f, 0xeb10, 0xec2f, 0xea1a, 0xeb48, 0xea1a, 0xeb48, 0xe9f5, 0xeb32, +0xe9f5, 0xeb32, 0xe9f5, 0xeb32, 0xea0a, 0xeb56, 0xea0a, 0xeb56, 0xe9ab, 0xeb03, 0xe9ab, +0xeb03, 0xe9e0, 0xeb42, 0xe9e0, 0xeb42, 0xeb04, 0xec6b, 0xeb04, 0xec6b, 0xec79, 0xede1, +0xec79, 0xede1, 0xec79, 0xede1, 0xedc1, 0xef25, 0xedc1, 0xef25, 0xef0a, 0xf064, 0xef0a, +0xf064, 0xef38, 0xf082, 0xef38, 0xf082, 0xefb9, 0xf0ec, 0xefb9, 0xf0ec, 0xf076, 0xf18b, +0xf076, 0xf18b, 0xf0e5, 0xf1d6, 0xf0e5, 0xf1d6, 0xf0e5, 0xf1d6, 0xf273, 0xf33a, 0xf273, +0xf33a, 0xf520, 0xf5b6, 0xf520, 0xf5b6, 0xf8aa, 0xf90b, 0xf8aa, 0xf90b, 0xfbf2, 0xfc19, +0xfbf2, 0xfc19, 0xfec9, 0xfeb3, 0xfec9, 0xfeb3, 0x8b, 0x35, 0x8b, 0x35, 0x8b, +0x35, 0x223, 0x18c, 0x223, 0x18c, 0x441, 0x368, 0x441, 0x368, 0x62d, 0x513, +0x62d, 0x513, 0x91c, 0x7c2, 0x91c, 0x7c2, 0xc16, 0xa80, 0xc16, 0xa80, 0xc16, +0xa80, 0xdf2, 0xc24, 0xdf2, 0xc24, 0xf57, 0xd57, 0xf57, 0xd57, 0x1148, 0xf1b, +0x1148, 0xf1b, 0x1331, 0x10de, 0x1331, 0x10de, 0x14af, 0x123c, 0x14af, 0x123c, 0x156d, +0x12e2, 0x156d, 0x12e2, 0x156d, 0x12e2, 0x1562, 0x12c8, 0x1562, 0x12c8, 0x1659, 0x13b6, +0x1659, 0x13b6, 0x16ff, 0x145b, 0x16ff, 0x145b, 0x1635, 0x1398, 0x1635, 0x1398, 0x14b3, +0x1224, 0x14b3, 0x1224, 0x13bc, 0x1141, 0x13bc, 0x1141, 0x13bc, 0x1141, 0x13bc, 0x115b, +0x13bc, 0x115b, 0x13a7, 0x1163, 0x13a7, 0x1163, 0x1301, 0x10e0, 0x1301, 0x10e0, 0x11c1, +0xfc5, 0x11c1, 0xfc5, 0x10be, 0xee8, 0x10be, 0xee8, 0x10be, 0xee8, 0xfe3, 0xe35, +0xfe3, 0xe35, 0xfad, 0xe27, 0xfad, 0xe27, 0xf38, 0xdda, 0xf38, 0xdda, 0xe01, +0xcc8, 0xe01, 0xcc8, 0xd84, 0xc6f, 0xd84, 0xc6f, 0xcd3, 0xbdf, 0xcd3, 0xbdf, +0xcd3, 0xbdf, 0xbc1, 0xaeb, 0xbc1, 0xaeb, 0xa7b, 0x9c0, 0xa7b, 0x9c0, 0x8c6, +0x822, 0x8c6, 0x822, 0x677, 0x5e7, 0x677, 0x5e7, 0x4ea, 0x46b, 0x4ea, 0x46b, +0x498, 0x427, 0x498, 0x427, 0x498, 0x427, 0x3b1, 0x34c, 0x3b1, 0x34c, 0x337, +0x2db, 0x337, 0x2db, 0x380, 0x32b, 0x380, 0x32b, 0x393, 0x346, 0x393, 0x346, +0x318, 0x2d1, 0x318, 0x2d1, 0x318, 0x2d1, 0x271, 0x232, 0x271, 0x232, 0x229, +0x1f1, 0x229, 0x1f1, 0x1f5, 0x1c7, 0x1f5, 0x1c7, 0x29d, 0x27a, 0x29d, 0x27a, +0x3d1, 0x3bc, 0x3d1, 0x3bc, 0x47a, 0x474, 0x47a, 0x474, 0x47a, 0x474, 0x514, +0x521, 0x514, 0x521, 0x5f2, 0x612, 0x5f2, 0x612, 0x6ed, 0x723, 0x6ed, 0x723, +0x7b1, 0x7fe, 0x7b1, 0x7fe, 0x714, 0x77a, 0x714, 0x77a, 0x714, 0x77a, 0x5ba, +0x638, 0x5ba, 0x638, 0x487, 0x51d, 0x487, 0x51d, 0x37d, 0x429, 0x37d, 0x429, +0x333, 0x3f3, 0x333, 0x3f3, 0x2a4, 0x373, 0x2a4, 0x373, 0x1bf, 0x29a, 0x1bf, +0x29a, 0x1bf, 0x29a, 0x179, 0x25a, 0x179, 0x25a, 0x1cb, 0x2ac, 0x1cb, 0x2ac, +0x1df, 0x2b8, 0x1df, 0x2b8, 0xe0, 0x1a9, 0xe0, 0x1a9, 0xff94, 0x45, 0xff94, +0x45, 0xfee1, 0xff71, 0xfee1, 0xff71, 0xfee1, 0xff71, 0xff6d, 0xffd3, 0xff6d, 0xffd3, +0xd9, 0x10c, 0xd9, 0x10c, 0x23e, 0x236, 0x23e, 0x236, 0x396, 0x349, 0x396, +0x349, 0x51b, 0x483, 0x51b, 0x483, 0x51b, 0x483, 0x5f8, 0x50d, 0x5f8, 0x50d, +0x6c1, 0x57e, 0x6c1, 0x57e, 0x8f9, 0x75a, 0x8f9, 0x75a, 0xb64, 0x965, 0xb64, +0x965, 0xd84, 0xb24, 0xd84, 0xb24, 0xf46, 0xc85, 0xf46, 0xc85, 0xf46, 0xc85, +0x108e, 0xd6f, 0x108e, 0xd6f, 0x1130, 0xdb6, 0x1130, 0xdb6, 0x11c4, 0xdf3, 0x11c4, +0xdf3, 0x13ca, 0xfa8, 0x13ca, 0xfa8, 0x15ef, 0x1184, 0x15ef, 0x1184, 0x17bb, 0x1311, +0x17bb, 0x1311, 0x17bb, 0x1311, 0x18d1, 0x13f2, 0x18d1, 0x13f2, 0x18e3, 0x13da, 0x18e3, +0x13da, 0x1918, 0x13f1, 0x1918, 0x13f1, 0x195d, 0x1424, 0x195d, 0x1424, 0x1986, 0x1447, +0x1986, 0x1447, 0x1986, 0x1447, 0x1982, 0x144a, 0x1982, 0x144a, 0x199f, 0x147a, 0x199f, +0x147a, 0x199a, 0x1493, 0x199a, 0x1493, 0x18a7, 0x13ca, 0x18a7, 0x13ca, 0x16b4, 0x120b, +0x16b4, 0x120b, 0x14b7, 0x104c, 0x14b7, 0x104c, 0x14b7, 0x104c, 0x1315, 0xeef, 0x1315, +0xeef, 0x1188, 0xdae, 0x1188, 0xdae, 0x1093, 0xd0b, 0x1093, 0xd0b, 0xf73, 0xc40, +0xf73, 0xc40, 0xdf2, 0xb17, 0xdf2, 0xb17, 0xd19, 0xa98, 0xd19, 0xa98, 0xd19, +0xa98, 0xd14, 0xaed, 0xd14, 0xaed, 0xd6b, 0xb9d, 0xd6b, 0xb9d, 0xdc2, 0xc4a, +0xdc2, 0xc4a, 0xdd7, 0xcb3, 0xdd7, 0xcb3, 0xd8a, 0xcb4, 0xd8a, 0xcb4, 0xd8a, +0xcb4, 0xcfb, 0xc70, 0xcfb, 0xc70, 0xcd7, 0xc91, 0xcd7, 0xc91, 0xd8b, 0xd84, +0xd8b, 0xd84, 0xd35, 0xd68, 0xd35, 0xd68, 0xbbb, 0xc21, 0xbbb, 0xc21, 0xaf3, +0xb87, 0xaf3, 0xb87, 0xaf3, 0xb87, 0xabe, 0xb7a, 0xabe, 0xb7a, 0x9fe, 0xadd, +0x9fe, 0xadd, 0x825, 0x922, 0x825, 0x922, 0x655, 0x76b, 0x655, 0x76b, 0x4f9, +0x625, 0x4f9, 0x625, 0x388, 0x4c7, 0x388, 0x4c7, 0x388, 0x4c7, 0x226, 0x375, +0x226, 0x375, 0x14a, 0x2a7, 0x14a, 0x2a7, 0xce, 0x237, 0xce, 0x237, 0x80, +0x1f4, 0x80, 0x1f4, 0xffed, 0x16d, 0xffed, 0x16d, 0xffed, 0x16d, 0xfe66, 0xfff1, +0xfe66, 0xfff1, 0xfcf1, 0xfe87, 0xfcf1, 0xfe87, 0xfb80, 0xfd23, 0xfb80, 0xfd23, 0xfa7d, +0xfc2d, 0xfa7d, 0xfc2d, 0xfa95, 0xfc53, 0xfa95, 0xfc53, 0xfa62, 0xfc30, 0xfa62, 0xfc30, +0xfa62, 0xfc30, 0xf951, 0xfb2f, 0xf951, 0xfb2f, 0xf7e1, 0xf9d0, 0xf7e1, 0xf9d0, 0xf6ff, +0xf900, 0xf6ff, 0xf900, 0xf63b, 0xf850, 0xf63b, 0xf850, 0xf537, 0xf75f, 0xf537, 0xf75f, +0xf3c3, 0xf5fe, 0xf3c3, 0xf5fe, 0xf3c3, 0xf5fe, 0xf1ad, 0xf3fc, 0xf1ad, 0xf3fc, 0xef9f, +0xf201, 0xef9f, 0xf201, 0xedf5, 0xf069, 0xedf5, 0xf069, 0xec9b, 0xef20, 0xec9b, 0xef20, +0xeab7, 0xed4b, 0xeab7, 0xed4b, 0xeab7, 0xed4b, 0xe9a7, 0xec48, 0xe9a7, 0xec48, 0xe9c0, +0xec6e, 0xe9c0, 0xec6e, 0xe96c, 0xec22, 0xe96c, 0xec22, 0xe8ce, 0xeb8b, 0xe8ce, 0xeb8b, +0xe74b, 0xea0e, 0xe74b, 0xea0e, 0xe571, 0xe835, 0xe571, 0xe835, 0xe571, 0xe835, 0xe47a, +0xe73d, 0xe47a, 0xe73d, 0xe44a, 0xe70a, 0xe44a, 0xe70a, 0xe482, 0xe73c, 0xe482, 0xe73c, +0xe436, 0xe6e8, 0xe436, 0xe6e8, 0xe400, 0xe6a8, 0xe400, 0xe6a8, 0xe4fb, 0xe797, 0xe4fb, +0xe797, 0xe4fb, 0xe797, 0xe61d, 0xe8ab, 0xe61d, 0xe8ab, 0xe70d, 0xe98c, 0xe70d, 0xe98c, +0xe755, 0xe9c4, 0xe755, 0xe9c4, 0xe693, 0xe8f3, 0xe693, 0xe8f3, 0xe6ce, 0xe91e, 0xe6ce, +0xe91e, 0xe6ce, 0xe91e, 0xe7bc, 0xe9fc, 0xe7bc, 0xe9fc, 0xe7ed, 0xea1f, 0xe7ed, 0xea1f, +0xe796, 0xe9ba, 0xe796, 0xe9ba, 0xe7bb, 0xe9d4, 0xe7bb, 0xe9d4, 0xe853, 0xea63, 0xe853, +0xea63, 0xe843, 0xea4b, 0xe843, 0xea4b, 0xe843, 0xea4b, 0xe830, 0xea33, 0xe830, 0xea33, +0xe85f, 0xea60, 0xe85f, 0xea60, 0xe8fa, 0xeafc, 0xe8fa, 0xeafc, 0xe9cc, 0xebd3, 0xe9cc, +0xebd3, 0xea79, 0xec87, 0xea79, 0xec87, 0xeb48, 0xed61, 0xeb48, 0xed61, 0xeb48, 0xed61, +0xebe0, 0xee05, 0xebe0, 0xee05, 0xec8f, 0xeec5, 0xec8f, 0xeec5, 0xed8e, 0xefd5, 0xed8e, +0xefd5, 0xee4f, 0xf0aa, 0xee4f, 0xf0aa, 0xed97, 0xf008, 0xed97, 0xf008, 0xed97, 0xf008, +0xec79, 0xef01, 0xec79, 0xef01, 0xec90, 0xef2f, 0xec90, 0xef2f, 0xec91, 0xef47, 0xec91, +0xef47, 0xec03, 0xeed0, 0xec03, 0xeed0, 0xeb62, 0xee45, 0xeb62, 0xee45, 0xeaa1, 0xed98, +0xeaa1, 0xed98, 0xeaa1, 0xed98, 0xe9b4, 0xecbc, 0xe9b4, 0xecbc, 0xe93e, 0xec56, 0xe93e, +0xec56, 0xe86e, 0xeb92, 0xe86e, 0xeb92, 0xe667, 0xe993, 0xe667, 0xe993, 0xe436, 0xe767, +0xe436, 0xe767, 0xe263, 0xe594, 0xe263, 0xe594, 0xe263, 0xe594, 0xe1a8, 0xe4d6, 0xe1a8, +0xe4d6, 0xe15b, 0xe482, 0xe15b, 0xe482, 0xe02e, 0xe349, 0xe02e, 0xe349, 0xdf29, 0xe234, +0xdf29, 0xe234, 0xdf4b, 0xe243, 0xdf4b, 0xe243, 0xdf4b, 0xe243, 0xdfd8, 0xe2b9, 0xdfd8, +0xe2b9, 0xdfd3, 0xe299, 0xdfd3, 0xe299, 0xdf42, 0xe1eb, 0xdf42, 0xe1eb, 0xdf1c, 0xe1a5, +0xdf1c, 0xe1a5, 0xe03b, 0xe2a3, 0xe03b, 0xe2a3, 0xe1ce, 0xe413, 0xe1ce, 0xe413, 0xe1ce, +0xe413, 0xe326, 0xe547, 0xe326, 0xe547, 0xe464, 0xe662, 0xe464, 0xe662, 0xe565, 0xe73e, +0xe565, 0xe73e, 0xe70b, 0xe8c1, 0xe70b, 0xe8c1, 0xe964, 0xeaf7, 0xe964, 0xeaf7, 0xe964, +0xeaf7, 0xeaeb, 0xec5c, 0xeaeb, 0xec5c, 0xebba, 0xed0a, 0xebba, 0xed0a, 0xebfe, 0xed2f, +0xebfe, 0xed2f, 0xec7e, 0xed91, 0xec7e, 0xed91, 0xee9f, 0xef94, 0xee9f, 0xef94, 0xf0a7, +0xf17f, 0xf0a7, 0xf17f, 0xf0a7, 0xf17f, 0xf231, 0xf2ee, 0xf231, 0xf2ee, 0xf3b0, 0xf451, +0xf3b0, 0xf451, 0xf48d, 0xf512, 0xf48d, 0xf512, 0xf537, 0xf5a0, 0xf537, 0xf5a0, 0xf557, +0xf5a2, 0xf557, 0xf5a2, 0xf539, 0xf564, 0xf539, 0xf564, 0xf539, 0xf564, 0xf54d, 0xf557, +0xf54d, 0xf557, 0xf640, 0xf626, 0xf640, 0xf626, 0xf7f5, 0xf7b3, 0xf7f5, 0xf7b3, 0xf995, +0xf928, 0xf995, 0xf928, 0xfb28, 0xfa8c, 0xfb28, 0xfa8c, 0xfb28, 0xfa8c, 0xfc31, 0xfb62, +0xfc31, 0xfb62, 0xfdea, 0xfce5, 0xfdea, 0xfce5, 0xe7, 0xffa6, 0xe7, 0xffa6, 0x3d4, +0x254, 0x3d4, 0x254, 0x612, 0x450, 0x612, 0x450, 0x853, 0x64b, 0x853, 0x64b, +0x853, 0x64b, 0xb51, 0x901, 0xb51, 0x901, 0xe34, 0xb9c, 0xe34, 0xb9c, 0x1169, +0xe85, 0x1169, 0xe85, 0x153b, 0x120d, 0x153b, 0x120d, 0x1848, 0x14d1, 0x1848, 0x14d1, +0x1ac5, 0x1707, 0x1ac5, 0x1707, 0x1ac5, 0x1707, 0x1d91, 0x1990, 0x1d91, 0x1990, 0x2011, +0x1bd0, 0x2011, 0x1bd0, 0x2239, 0x1dbf, 0x2239, 0x1dbf, 0x2480, 0x1fd5, 0x2480, 0x1fd5, +0x264a, 0x2174, 0x264a, 0x2174, 0x264a, 0x2174, 0x276b, 0x2274, 0x276b, 0x2274, 0x2848, +0x233a, 0x2848, 0x233a, 0x292e, 0x2412, 0x292e, 0x2412, 0x2a0b, 0x24ed, 0x2a0b, 0x24ed, +0x2ab2, 0x259d, 0x2ab2, 0x259d, 0x2ac2, 0x25c2, 0x2ac2, 0x25c2, 0x2ac2, 0x25c2, 0x29d0, +0x24f0, 0x29d0, 0x24f0, 0x281a, 0x2365, 0x281a, 0x2365, 0x263e, 0x21be, 0x263e, 0x21be, +0x24ca, 0x208a, 0x24ca, 0x208a, 0x23ea, 0x1ff3, 0x23ea, 0x1ff3, 0x2322, 0x1f7b, 0x2322, +0x1f7b, 0x2322, 0x1f7b, 0x21a1, 0x1e51, 0x21a1, 0x1e51, 0x2003, 0x1d10, 0x2003, 0x1d10, +0x1ee0, 0x1c4f, 0x1ee0, 0x1c4f, 0x1e07, 0x1bd9, 0x1e07, 0x1bd9, 0x1cc4, 0x1afb, 0x1cc4, +0x1afb, 0x1cc4, 0x1afb, 0x1aa6, 0x1941, 0x1aa6, 0x1941, 0x1866, 0x1765, 0x1866, 0x1765, +0x15fe, 0x155c, 0x15fe, 0x155c, 0x13b1, 0x136a, 0x13b1, 0x136a, 0x108a, 0x109a, 0x108a, +0x109a, 0xc45, 0xca3, 0xc45, 0xca3, 0xc45, 0xca3, 0x912, 0x9b9, 0x912, 0x9b9, +0x6db, 0x7c2, 0x6db, 0x7c2, 0x447, 0x567, 0x447, 0x567, 0x10c, 0x25c, 0x10c, +0x25c, 0xfd52, 0xfeca, 0xfd52, 0xfeca, 0xf958, 0xfaf0, 0xf958, 0xfaf0, 0xf958, 0xfaf0, +0xf6fa, 0xf8ab, 0xf6fa, 0xf8ab, 0xf5e3, 0xf7a5, 0xf5e3, 0xf7a5, 0xf4b2, 0xf680, 0xf4b2, +0xf680, 0xf4ae, 0xf683, 0xf4ae, 0xf683, 0xf4b7, 0xf68f, 0xf4b7, 0xf68f, 0xf4b7, 0xf68f, +0xf45f, 0xf637, 0xf45f, 0xf637, 0xf494, 0xf669, 0xf494, 0xf669, 0xf486, 0xf659, 0xf486, +0xf659, 0xf45d, 0xf62d, 0xf45d, 0xf62d, 0xf4f8, 0xf6c7, 0xf4f8, 0xf6c7, 0xf5bc, 0xf78c, +0xf5bc, 0xf78c, 0xf5bc, 0xf78c, 0xf594, 0xf768, 0xf594, 0xf768, 0xf49d, 0xf677, 0xf49d, +0xf677, 0xf2fe, 0xf4e2, 0xf2fe, 0xf4e2, 0xf16f, 0xf361, 0xf16f, 0xf361, 0xf08b, 0xf28e, +0xf08b, 0xf28e, 0xf03c, 0xf254, 0xf03c, 0xf254, 0xf03c, 0xf254, 0xefd2, 0xf201, 0xefd2, +0xf201, 0xeecb, 0xf114, 0xeecb, 0xf114, 0xee37, 0xf09b, 0xee37, 0xf09b, 0xee1a, 0xf099, +0xee1a, 0xf099, 0xeda1, 0xf03b, 0xeda1, 0xf03b, 0xeda1, 0xf03b, 0xed41, 0xeff3, 0xed41, +0xeff3, 0xed23, 0xefeb, 0xed23, 0xefeb, 0xecfe, 0xefd9, 0xecfe, 0xefd9, 0xedeb, 0xf0d3, +0xedeb, 0xf0d3, 0xef53, 0xf241, 0xef53, 0xf241, 0xef8e, 0xf27b, 0xef8e, 0xf27b, 0xef8e, +0xf27b, 0xef22, 0xf206, 0xef22, 0xf206, 0xef64, 0xf237, 0xef64, 0xf237, 0xf0f6, 0xf3af, +0xf0f6, 0xf3af, 0xf315, 0xf5ac, 0xf315, 0xf5ac, 0xf551, 0xf7bb, 0xf551, 0xf7bb, 0xf706, +0xf93c, 0xf706, 0xf93c, 0xf706, 0xf93c, 0xf938, 0xfb30, 0xf938, 0xfb30, 0xfc5a, 0xfe0e, +0xfc5a, 0xfe0e, 0xfee3, 0x4c, 0xfee3, 0x4c, 0x173, 0x28b, 0x173, 0x28b, 0x3de, +0x4a2, 0x3de, 0x4a2, 0x3de, 0x4a2, 0x62e, 0x69a, 0x62e, 0x69a, 0x84f, 0x862, +0x84f, 0x862, 0xa38, 0x9f2, 0xa38, 0x9f2, 0xc9d, 0xc00, 0xc9d, 0xc00, 0xee9, +0xdf7, 0xee9, 0xdf7, 0x113e, 0xffc, 0x113e, 0xffc, 0x113e, 0xffc, 0x137d, 0x11f1, +0x137d, 0x11f1, 0x154f, 0x1380, 0x154f, 0x1380, 0x1605, 0x13f9, 0x1605, 0x13f9, 0x1655, +0x1416, 0x1655, 0x1416, 0x1777, 0x150e, 0x1777, 0x150e, 0x18be, 0x1634, 0x18be, 0x1634, +0x18be, 0x1634, 0x19e5, 0x1743, 0x19e5, 0x1743, 0x1a69, 0x17b8, 0x1a69, 0x17b8, 0x1aaf, +0x17f8, 0x1aaf, 0x17f8, 0x1af4, 0x183f, 0x1af4, 0x183f, 0x1a92, 0x17e7, 0x1a92, 0x17e7, +0x1a92, 0x17e7, 0x19f4, 0x1759, 0x19f4, 0x1759, 0x1925, 0x16a0, 0x1925, 0x16a0, 0x182c, +0x15c1, 0x182c, 0x15c1, 0x17aa, 0x155c, 0x17aa, 0x155c, 0x170c, 0x14de, 0x170c, 0x14de, +0x1622, 0x1415, 0x1622, 0x1415, 0x1622, 0x1415, 0x159e, 0x13b2, 0x159e, 0x13b2, 0x14dd, +0x1310, 0x14dd, 0x1310, 0x13f6, 0x1248, 0x13f6, 0x1248, 0x1337, 0x11a4, 0x1337, 0x11a4, +0x121f, 0x10a3, 0x121f, 0x10a3, 0x1047, 0xee0, 0x1047, 0xee0, 0x1047, 0xee0, 0xe81, +0xd2a, 0xe81, 0xd2a, 0xd3b, 0xbf1, 0xd3b, 0xbf1, 0xb69, 0xa28, 0xb69, 0xa28, +0x924, 0x7e9, 0x924, 0x7e9, 0x69e, 0x566, 0x69e, 0x566, 0x69e, 0x566, 0x4eb, +0x3b4, 0x4eb, 0x3b4, 0x42b, 0x2f3, 0x42b, 0x2f3, 0x46a, 0x330, 0x46a, 0x330, +0x594, 0x458, 0x594, 0x458, 0x582, 0x444, 0x582, 0x444, 0x505, 0x3c8, 0x505, +0x3c8, 0x505, 0x3c8, 0x4b8, 0x37d, 0x4b8, 0x37d, 0x49e, 0x368, 0x49e, 0x368, +0x514, 0x3e6, 0x514, 0x3e6, 0x583, 0x461, 0x583, 0x461, 0x62d, 0x51a, 0x62d, +0x51a, 0x62d, 0x51a, 0x69c, 0x59b, 0x69c, 0x59b, 0x674, 0x58a, 0x674, 0x58a, +0x5da, 0x50a, 0x5da, 0x50a, 0x51d, 0x46a, 0x51d, 0x46a, 0x442, 0x3ac, 0x442, +0x3ac, 0x353, 0x2dc, 0x353, 0x2dc, 0x353, 0x2dc, 0x27b, 0x224, 0x27b, 0x224, +0x1c8, 0x18f, 0x1c8, 0x18f, 0x106, 0xea, 0x106, 0xea, 0xffe6, 0xffe3, 0xffe6, +0xffe3, 0xfee4, 0xfef7, 0xfee4, 0xfef7, 0xfdcb, 0xfdee, 0xfdcb, 0xfdee, 0xfdcb, 0xfdee, +0xfcba, 0xfce5, 0xfcba, 0xfce5, 0xfb4d, 0xfb7b, 0xfb4d, 0xfb7b, 0xf9e2, 0xfa0a, 0xf9e2, +0xfa0a, 0xf9c8, 0xf9e1, 0xf9c8, 0xf9e1, 0xfa04, 0xfa07, 0xfa04, 0xfa07, 0xfa04, 0xfa07, +0xfa52, 0xfa33, 0xfa52, 0xfa33, 0xfaf4, 0xfaac, 0xfaf4, 0xfaac, 0xfbb6, 0xfb3b, 0xfbb6, +0xfb3b, 0xfd3d, 0xfc88, 0xfd3d, 0xfc88, 0xff6f, 0xfe77, 0xff6f, 0xfe77, 0xfb, 0xffba, +0xfb, 0xffba, 0xfb, 0xffba, 0x200, 0x71, 0x200, 0x71, 0x313, 0x132, 0x313, +0x132, 0x47d, 0x248, 0x47d, 0x248, 0x648, 0x3bd, 0x648, 0x3bd, 0x78f, 0x4ae, +0x78f, 0x4ae, 0x8f8, 0x5c4, 0x8f8, 0x5c4, 0x8f8, 0x5c4, 0xadf, 0x75c, 0xadf, +0x75c, 0xcf5, 0x929, 0xcf5, 0x929, 0xf16, 0xb07, 0xf16, 0xb07, 0x110f, 0xcc6, +0x110f, 0xcc6, 0x1269, 0xdef, 0x1269, 0xdef, 0x1269, 0xdef, 0x12bd, 0xe1d, 0x12bd, +0xe1d, 0x135e, 0xea4, 0x135e, 0xea4, 0x1420, 0xf57, 0x1420, 0xf57, 0x14a7, 0xfdc, +0x14a7, 0xfdc, 0x1547, 0x1085, 0x1547, 0x1085, 0x1533, 0x1088, 0x1533, 0x1088, 0x1533, +0x1088, 0x148f, 0x1005, 0x148f, 0x1005, 0x14a4, 0x1047, 0x14a4, 0x1047, 0x14c1, 0x109b, +0x14c1, 0x109b, 0x134f, 0xf6a, 0x134f, 0xf6a, 0x11ca, 0xe2d, 0x11ca, 0xe2d, 0x10ef, +0xda0, 0x10ef, 0xda0, 0x10ef, 0xda0, 0x1035, 0xd39, 0x1035, 0xd39, 0xf5f, 0xcba, +0xf5f, 0xcba, 0xebc, 0xc70, 0xebc, 0xc70, 0xe4f, 0xc5d, 0xe4f, 0xc5d, 0xdc3, +0xc29, 0xdc3, 0xc29, 0xdc3, 0xc29, 0xe13, 0xccf, 0xe13, 0xccf, 0xe2f, 0xd3e, +0xe2f, 0xd3e, 0xdea, 0xd48, 0xdea, 0xd48, 0xe1d, 0xdc3, 0xe1d, 0xdc3, 0xe68, +0xe51, 0xe68, 0xe51, 0xeeb, 0xf10, 0xeeb, 0xf10, 0xeeb, 0xf10, 0xf36, 0xf90, +0xf36, 0xf90, 0xf5e, 0xfe6, 0xf5e, 0xfe6, 0xfcf, 0x107e, 0xfcf, 0x107e, 0x104e, +0x111e, 0x104e, 0x111e, 0xfb3, 0x109d, 0xfb3, 0x109d, 0xe08, 0xf06, 0xe08, 0xf06, +0xe08, 0xf06, 0xc48, 0xd56, 0xc48, 0xd56, 0xa89, 0xba2, 0xa89, 0xba2, 0x905, +0xa26, 0x905, 0xa26, 0x81d, 0x943, 0x81d, 0x943, 0x77d, 0x8a6, 0x77d, 0x8a6, +0x77d, 0x8a6, 0x678, 0x7a5, 0x678, 0x7a5, 0x5db, 0x70a, 0x5db, 0x70a, 0x564, +0x697, 0x564, 0x697, 0x423, 0x55a, 0x423, 0x55a, 0x27d, 0x3bb, 0x27d, 0x3bb, +0x172, 0x2b9, 0x172, 0x2b9, 0x172, 0x2b9, 0x13d, 0x28f, 0x13d, 0x28f, 0xd4, +0x235, 0xd4, 0x235, 0xfff3, 0x164, 0xfff3, 0x164, 0xfe44, 0xffc8, 0xfe44, 0xffc8, +0xfc63, 0xfdfe, 0xfc63, 0xfdfe, 0xfadf, 0xfc91, 0xfadf, 0xfc91, 0xfadf, 0xfc91, 0xf972, +0xfb3e, 0xf972, 0xfb3e, 0xf821, 0xfa08, 0xf821, 0xfa08, 0xf708, 0xf90a, 0xf708, 0xf90a, +0xf621, 0xf83f, 0xf621, 0xf83f, 0xf4fb, 0xf734, 0xf4fb, 0xf734, 0xf4fb, 0xf734, 0xf435, +0xf689, 0xf435, 0xf689, 0xf269, 0xf4d5, 0xf269, 0xf4d5, 0xefa9, 0xf22d, 0xefa9, 0xf22d, +0xee27, 0xf0c0, 0xee27, 0xf0c0, 0xed60, 0xf00a, 0xed60, 0xf00a, 0xecd7, 0xef91, 0xecd7, +0xef91, 0xecd7, 0xef91, 0xebd4, 0xee9a, 0xebd4, 0xee9a, 0xea5c, 0xed2c, 0xea5c, 0xed2c, +0xe89b, 0xeb70, 0xe89b, 0xeb70, 0xe727, 0xe9ff, 0xe727, 0xe9ff, 0xe6ce, 0xe9a6, 0xe6ce, +0xe9a6, 0xe654, 0xe929, 0xe654, 0xe929, 0xe654, 0xe929, 0xe61c, 0xe8ec, 0xe61c, 0xe8ec, +0xe63e, 0xe906, 0xe63e, 0xe906, 0xe5d3, 0xe892, 0xe5d3, 0xe892, 0xe5f0, 0xe8a5, 0xe5f0, +0xe8a5, 0xe695, 0xe93e, 0xe695, 0xe93e, 0xe695, 0xe93e, 0xe689, 0xe926, 0xe689, 0xe926, +0xe615, 0xe8a6, 0xe615, 0xe8a6, 0xe5f2, 0xe877, 0xe5f2, 0xe877, 0xe650, 0xe8ca, 0xe650, +0xe8ca, 0xe65d, 0xe8cc, 0xe65d, 0xe8cc, 0xe5d6, 0xe83c, 0xe5d6, 0xe83c, 0xe5d6, 0xe83c, +0xe5bb, 0xe819, 0xe5bb, 0xe819, 0xe647, 0xe8a0, 0xe647, 0xe8a0, 0xe755, 0xe9aa, 0xe755, +0xe9aa, 0xe842, 0xea94, 0xe842, 0xea94, 0xe8da, 0xeb2d, 0xe8da, 0xeb2d, 0xe8df, 0xeb34, +0xe8df, 0xeb34, 0xe8df, 0xeb34, 0xe84e, 0xeaa8, 0xe84e, 0xeaa8, 0xe85b, 0xeabb, 0xe85b, +0xeabb, 0xe929, 0xeb92, 0xe929, 0xeb92, 0xea0b, 0xec7d, 0xea0b, 0xec7d, 0xeaa5, 0xed23, +0xeaa5, 0xed23, 0xeaa5, 0xed23, 0xeb93, 0xee1f, 0xeb93, 0xee1f, 0xec3b, 0xeed5, 0xec3b, +0xeed5, 0xebe3, 0xee8c, 0xebe3, 0xee8c, 0xeb49, 0xee03, 0xeb49, 0xee03, 0xeaa4, 0xed6f, +0xeaa4, 0xed6f, 0xea08, 0xece5, 0xea08, 0xece5, 0xea08, 0xece5, 0xe94d, 0xec3b, 0xe94d, +0xec3b, 0xe8c3, 0xebc3, 0xe8c3, 0xebc3, 0xe850, 0xeb62, 0xe850, 0xeb62, 0xe7db, 0xeafe, +0xe7db, 0xeafe, 0xe754, 0xea87, 0xe754, 0xea87, 0xe641, 0xe984, 0xe641, 0xe984, 0xe641, +0xe984, 0xe558, 0xe8a9, 0xe558, 0xe8a9, 0xe44e, 0xe7ac, 0xe44e, 0xe7ac, 0xe335, 0xe69e, +0xe335, 0xe69e, 0xe283, 0xe5f6, 0xe283, 0xe5f6, 0xe11f, 0xe49a, 0xe11f, 0xe49a, 0xe11f, +0xe49a, 0xdf42, 0xe2c4, 0xdf42, 0xe2c4, 0xddef, 0xe175, 0xddef, 0xe175, 0xdcf5, 0xe07d, +0xdcf5, 0xe07d, 0xdc4a, 0xdfd4, 0xdc4a, 0xdfd4, 0xdbfe, 0xdf85, 0xdbfe, 0xdf85, 0xdc03, +0xdf87, 0xdc03, 0xdf87, 0xdc03, 0xdf87, 0xdc29, 0xdfa8, 0xdc29, 0xdfa8, 0xdbe8, 0xdf5f, +0xdbe8, 0xdf5f, 0xdb85, 0xdef3, 0xdb85, 0xdef3, 0xdb0d, 0xde70, 0xdb0d, 0xde70, 0xdada, +0xde31, 0xdada, 0xde31, 0xdada, 0xde31, 0xdb61, 0xdeaa, 0xdb61, 0xdeaa, 0xdc75, 0xdfaf, +0xdc75, 0xdfaf, 0xdddb, 0xe104, 0xdddb, 0xe104, 0xdf6b, 0xe281, 0xdf6b, 0xe281, 0xe198, +0xe49b, 0xe198, 0xe49b, 0xe38b, 0xe679, 0xe38b, 0xe679, 0xe38b, 0xe679, 0xe4c1, 0xe799, +0xe4c1, 0xe799, 0xe585, 0xe845, 0xe585, 0xe845, 0xe69d, 0xe943, 0xe69d, 0xe943, 0xe8db, +0xeb65, 0xe8db, 0xeb65, 0xeb45, 0xedb1, 0xeb45, 0xedb1, 0xeda1, 0xefed, 0xeda1, 0xefed, +0xeda1, 0xefed, 0xefac, 0xf1d4, 0xefac, 0xf1d4, 0xf13e, 0xf33f, 0xf13e, 0xf33f, 0xf2a5, +0xf47d, 0xf2a5, 0xf47d, 0xf37e, 0xf528, 0xf37e, 0xf528, 0xf435, 0xf5ad, 0xf435, 0xf5ad, +0xf435, 0xf5ad, 0xf545, 0xf686, 0xf545, 0xf686, 0xf683, 0xf789, 0xf683, 0xf789, 0xf7b0, +0xf876, 0xf7b0, 0xf876, 0xf8e3, 0xf963, 0xf8e3, 0xf963, 0xfaa3, 0xfad8, 0xfaa3, 0xfad8, +0xfd2c, 0xfd11, 0xfd2c, 0xfd11, 0xfd2c, 0xfd11, 0xffdf, 0xff6f, 0xffdf, 0xff6f, 0x25b, +0x191, 0x25b, 0x191, 0x4bf, 0x397, 0x4bf, 0x397, 0x75c, 0x5d1, 0x75c, 0x5d1, +0xa55, 0x865, 0xa55, 0x865, 0xd9d, 0xb45, 0xd9d, 0xb45, 0xd9d, 0xb45, 0x1161, +0xea1, 0x1161, 0xea1, 0x1563, 0x123a, 0x1563, 0x123a, 0x19b9, 0x1627, 0x19b9, 0x1627, +0x1dc9, 0x19d2, 0x1dc9, 0x19d2, 0x20df, 0x1c86, 0x20df, 0x1c86, 0x20df, 0x1c86, 0x23ce, +0x1f17, 0x23ce, 0x1f17, 0x2709, 0x21fb, 0x2709, 0x21fb, 0x29c3, 0x2466, 0x29c3, 0x2466, +0x2bb4, 0x2610, 0x2bb4, 0x2610, 0x2d92, 0x27b0, 0x2d92, 0x27b0, 0x2ec5, 0x28b1, 0x2ec5, +0x28b1, 0x2ec5, 0x28b1, 0x2f9a, 0x2960, 0x2f9a, 0x2960, 0x3069, 0x2a14, 0x3069, 0x2a14, +0x306a, 0x2a08, 0x306a, 0x2a08, 0x3116, 0x2ab4, 0x3116, 0x2ab4, 0x3245, 0x2bf0, 0x3245, +0x2bf0, 0x3218, 0x2bde, 0x3218, 0x2bde, 0x3218, 0x2bde, 0x312e, 0x2b1b, 0x312e, 0x2b1b, +0x304d, 0x2a6d, 0x304d, 0x2a6d, 0x2f71, 0x29ce, 0x2f71, 0x29ce, 0x2e65, 0x290b, 0x2e65, +0x290b, 0x2c9c, 0x2793, 0x2c9c, 0x2793, 0x2c9c, 0x2793, 0x2a7e, 0x25ce, 0x2a7e, 0x25ce, +0x2814, 0x23c3, 0x2814, 0x23c3, 0x25d7, 0x21e9, 0x25d7, 0x21e9, 0x24a4, 0x211c, 0x24a4, +0x211c, 0x235f, 0x203e, 0x235f, 0x203e, 0x21ce, 0x1f15, 0x21ce, 0x1f15, 0x21ce, 0x1f15, +0x1fd9, 0x1d84, 0x1fd9, 0x1d84, 0x1d8d, 0x1b9b, 0x1d8d, 0x1b9b, 0x1b53, 0x19be, 0x1b53, +0x19be, 0x18ec, 0x17af, 0x18ec, 0x17af, 0x1679, 0x158d, 0x1679, 0x158d, 0x132c, 0x128a, +0x132c, 0x128a, 0x132c, 0x128a, 0xfb8, 0xf58, 0xfb8, 0xf58, 0xc3e, 0xc18, 0xc3e, +0xc18, 0x7e0, 0x7ed, 0x7e0, 0x7ed, 0x3ab, 0x3e2, 0x3ab, 0x3e2, 0xff68, 0xffc1, +0xff68, 0xffc1, 0xff68, 0xffc1, 0xfbb2, 0xfc27, 0xfbb2, 0xfc27, 0xf9ae, 0xfa38, 0xf9ae, +0xfa38, 0xf838, 0xf8d2, 0xf838, 0xf8d2, 0xf6fa, 0xf7a0, 0xf6fa, 0xf7a0, 0xf674, 0xf722, +0xf674, 0xf722, 0xf622, 0xf6d5, 0xf622, 0xf6d5, 0xf622, 0xf6d5, 0xf560, 0xf618, 0xf560, +0xf618, 0xf44a, 0xf506, 0xf44a, 0xf506, 0xf327, 0xf3e7, 0xf327, 0xf3e7, 0xf1e8, 0xf2ae, +0xf1e8, 0xf2ae, 0xf10a, 0xf1d9, 0xf10a, 0xf1d9, 0xf069, 0xf143, 0xf069, 0xf143, 0xf069, +0xf143, 0xefcd, 0xf0b5, 0xefcd, 0xf0b5, 0xefbd, 0xf0b7, 0xefbd, 0xf0b7, 0xef57, 0xf068, +0xef57, 0xf068, 0xee87, 0xefb0, 0xee87, 0xefb0, 0xedcd, 0xef12, 0xedcd, 0xef12, 0xedcd, +0xef12, 0xed6a, 0xeece, 0xed6a, 0xeece, 0xed0d, 0xee92, 0xed0d, 0xee92, 0xebf8, 0xed9f, +0xebf8, 0xed9f, 0xeb16, 0xece0, 0xeb16, 0xece0, 0xe9ee, 0xebd9, 0xe9ee, 0xebd9, 0xe930, +0xeb3b, 0xe930, 0xeb3b, 0xe930, 0xeb3b, 0xe928, 0xeb50, 0xe928, 0xeb50, 0xe803, 0xea44, +0xe803, 0xea44, 0xe6e6, 0xe93b, 0xe6e6, 0xe93b, 0xe680, 0xe8e4, 0xe680, 0xe8e4, 0xe632, +0xe89d, 0xe632, 0xe89d, 0xe643, 0xe8af, 0xe643, 0xe8af, 0xe643, 0xe8af, 0xe733, 0xe998, +0xe733, 0xe998, 0xe86c, 0xeac0, 0xe86c, 0xeac0, 0xe9cf, 0xec0a, 0xe9cf, 0xec0a, 0xeba9, +0xedc3, 0xeba9, 0xedc3, 0xed42, 0xef33, 0xed42, 0xef33, 0xed42, 0xef33, 0xeebd, 0xf07d, +0xeebd, 0xf07d, 0xf073, 0xf1fa, 0xf073, 0xf1fa, 0xf2ee, 0xf435, 0xf2ee, 0xf435, 0xf5f4, +0xf6f5, 0xf5f4, 0xf6f5, 0xf8a5, 0xf95d, 0xf8a5, 0xf95d, 0xfba5, 0xfc0f, 0xfba5, 0xfc0f, +0xfba5, 0xfc0f, 0xff50, 0xff6b, 0xff50, 0xff6b, 0x29c, 0x266, 0x29c, 0x266, 0x593, +0x50e, 0x593, 0x50e, 0x860, 0x78c, 0x860, 0x78c, 0xb2b, 0xa0d, 0xb2b, 0xa0d, +0xe1c, 0xcb7, 0xe1c, 0xcb7, 0xe1c, 0xcb7, 0xfd5, 0xe2f, 0xfd5, 0xe2f, 0x10ca, +0xee9, 0x10ca, 0xee9, 0x113f, 0xf2c, 0x113f, 0xf2c, 0x11e3, 0xfa4, 0x11e3, 0xfa4, +0x138f, 0x112e, 0x138f, 0x112e, 0x138f, 0x112e, 0x1505, 0x128a, 0x1505, 0x128a, 0x160e, +0x1383, 0x160e, 0x1383, 0x16a2, 0x140f, 0x16a2, 0x140f, 0x176e, 0x14dc, 0x176e, 0x14dc, +0x186e, 0x15e5, 0x186e, 0x15e5, 0x1894, 0x161a, 0x1894, 0x161a, 0x1894, 0x161a, 0x1802, +0x159e, 0x1802, 0x159e, 0x16e9, 0x14a1, 0x16e9, 0x14a1, 0x15b1, 0x1389, 0x15b1, 0x1389, +0x15a0, 0x139c, 0x15a0, 0x139c, 0x15f3, 0x1415, 0x15f3, 0x1415, 0x1578, 0x13c0, 0x1578, +0x13c0, 0x1578, 0x13c0, 0x1535, 0x13a4, 0x1535, 0x13a4, 0x1488, 0x131d, 0x1488, 0x131d, +0x13be, 0x1277, 0x13be, 0x1277, 0x12fb, 0x11d6, 0x12fb, 0x11d6, 0x1173, 0x106c, 0x1173, +0x106c, 0x1173, 0x106c, 0xff1, 0xf05, 0xff1, 0xf05, 0xe11, 0xd3c, 0xe11, 0xd3c, +0xc0b, 0xb48, 0xc0b, 0xb48, 0xa1f, 0x96b, 0xa1f, 0x96b, 0x80e, 0x764, 0x80e, +0x764, 0x6e7, 0x644, 0x6e7, 0x644, 0x6e7, 0x644, 0x71b, 0x67b, 0x71b, 0x67b, +0x7ad, 0x70e, 0x7ad, 0x70e, 0x805, 0x766, 0x805, 0x766, 0x7d4, 0x732, 0x7d4, +0x732, 0x74f, 0x6ab, 0x74f, 0x6ab, 0x74f, 0x6ab, 0x7a0, 0x6fa, 0x7a0, 0x6fa, +0x86d, 0x7c5, 0x86d, 0x7c5, 0x8d9, 0x832, 0x8d9, 0x832, 0x911, 0x86c, 0x911, +0x86c, 0x91e, 0x87e, 0x91e, 0x87e, 0x918, 0x880, 0x918, 0x880, 0x918, 0x880, +0x9a5, 0x917, 0x9a5, 0x917, 0xa5b, 0x9da, 0xa5b, 0x9da, 0xa3e, 0x9ce, 0xa3e, +0x9ce, 0x996, 0x938, 0x996, 0x938, 0x8c1, 0x878, 0x8c1, 0x878, 0x808, 0x7d3, +0x808, 0x7d3, 0x808, 0x7d3, 0x73a, 0x71b, 0x73a, 0x71b, 0x62f, 0x624, 0x62f, +0x624, 0x52d, 0x536, 0x52d, 0x536, 0x449, 0x462, 0x449, 0x462, 0x400, 0x427, +0x400, 0x427, 0x400, 0x427, 0x3a6, 0x3d6, 0x3a6, 0x3d6, 0x28a, 0x2bd, 0x28a, +0x2bd, 0xc7, 0xf8, 0xc7, 0xf8, 0xff45, 0xff6c, 0xff45, 0xff6c, 0xfecf, 0xfee5, +0xfecf, 0xfee5, 0xfe83, 0xfe81, 0xfe83, 0xfe81, 0xfe83, 0xfe81, 0xfe5a, 0xfe39, 0xfe5a, +0xfe39, 0xfe69, 0xfe21, 0xfe69, 0xfe21, 0xff2c, 0xfeb4, 0xff2c, 0xfeb4, 0x4b, 0xff9d, +0x4b, 0xff9d, 0x1b3, 0xc9, 0x1b3, 0xc9, 0x3c5, 0x29a, 0x3c5, 0x29a, 0x3c5, +0x29a, 0x4e7, 0x375, 0x4e7, 0x375, 0x5d3, 0x418, 0x5d3, 0x418, 0x798, 0x591, +0x798, 0x591, 0x9bc, 0x76a, 0x9bc, 0x76a, 0xbf9, 0x95b, 0xbf9, 0x95b, 0xbf9, +0x95b, 0xee1, 0xbfa, 0xee1, 0xbfa, 0x1229, 0xefc, 0x1229, 0xefc, 0x146c, 0x10fe, +0x146c, 0x10fe, 0x15cf, 0x1226, 0x15cf, 0x1226, 0x16ae, 0x12d1, 0x16ae, 0x12d1, 0x1752, +0x1349, 0x1752, 0x1349, 0x1752, 0x1349, 0x1852, 0x1426, 0x1852, 0x1426, 0x1960, 0x151a, +0x1960, 0x151a, 0x1925, 0x14ce, 0x1925, 0x14ce, 0x1860, 0x1404, 0x1860, 0x1404, 0x17d0, +0x1376, 0x17d0, 0x1376, 0x1731, 0x12e5, 0x1731, 0x12e5, 0x1731, 0x12e5, 0x1610, 0x11da, +0x1610, 0x11da, 0x1479, 0x1062, 0x1479, 0x1062, 0x1326, 0xf37, 0x1326, 0xf37, 0x1181, +0xdc0, 0x1181, 0xdc0, 0x10a1, 0xd13, 0x10a1, 0xd13, 0x10a1, 0xd13, 0x107b, 0xd27, +0x107b, 0xd27, 0xff6, 0xcde, 0xff6, 0xcde, 0xf29, 0xc52, 0xf29, 0xc52, 0xe95, +0xc00, 0xe95, 0xc00, 0xe36, 0xbe3, 0xe36, 0xbe3, 0xe2f, 0xc1d, 0xe2f, 0xc1d, +0xe2f, 0xc1d, 0xe66, 0xc95, 0xe66, 0xc95, 0xd85, 0xbf1, 0xd85, 0xbf1, 0xd15, +0xbbd, 0xd15, 0xbbd, 0xd32, 0xc11, 0xd32, 0xc11, 0xd5e, 0xc72, 0xd5e, 0xc72, +0xe16, 0xd59, 0xe16, 0xd59, 0xe16, 0xd59, 0xe1c, 0xd8a, 0xe1c, 0xd8a, 0xd41, +0xcd5, 0xd41, 0xcd5, 0xc9a, 0xc51, 0xc9a, 0xc51, 0xc2b, 0xc00, 0xc2b, 0xc00, +0xa9e, 0xa8d, 0xa9e, 0xa8d, 0xa9e, 0xa8d, 0x87a, 0x881, 0x87a, 0x881, 0x63d, +0x658, 0x63d, 0x658, 0x484, 0x4b2, 0x484, 0x4b2, 0x3d4, 0x412, 0x3d4, 0x412, +0x32c, 0x37b, 0x32c, 0x37b, 0x24d, 0x2ac, 0x24d, 0x2ac, 0x24d, 0x2ac, 0x15a, +0x1c8, 0x15a, 0x1c8, 0x68, 0xe7, 0x68, 0xe7, 0xffa6, 0x38, 0xffa6, 0x38, +0xfee5, 0xff8d, 0xfee5, 0xff8d, 0xfd68, 0xfe27, 0xfd68, 0xfe27, 0xfbc7, 0xfca1, 0xfbc7, +0xfca1, 0xfbc7, 0xfca1, 0xfaed, 0xfbe3, 0xfaed, 0xfbe3, 0xfb18, 0xfc2f, 0xfb18, 0xfc2f, +0xfb30, 0xfc6a, 0xfb30, 0xfc6a, 0xfa20, 0xfb81, 0xfa20, 0xfb81, 0xf925, 0xfaaf, 0xf925, +0xfaaf, 0xf925, 0xfaaf, 0xf821, 0xf9d7, 0xf821, 0xf9d7, 0xf6b1, 0xf895, 0xf6b1, 0xf895, +0xf576, 0xf789, 0xf576, 0xf789, 0xf396, 0xf5da, 0xf396, 0xf5da, 0xf124, 0xf398, 0xf124, +0xf398, 0xefbb, 0xf260, 0xefbb, 0xf260, 0xefbb, 0xf260, 0xef09, 0xf1dd, 0xef09, 0xf1dd, +0xed75, 0xf077, 0xed75, 0xf077, 0xeb14, 0xee41, 0xeb14, 0xee41, 0xe969, 0xecbd, 0xe969, +0xecbd, 0xe89a, 0xec11, 0xe89a, 0xec11, 0xe7ca, 0xeb61, 0xe7ca, 0xeb61, 0xe7ca, 0xeb61, +0xe6d2, 0xea82, 0xe6d2, 0xea82, 0xe532, 0xe8f7, 0xe532, 0xe8f7, 0xe3df, 0xe7b2, 0xe3df, +0xe7b2, 0xe465, 0xe83f, 0xe465, 0xe83f, 0xe53a, 0xe916, 0xe53a, 0xe916, 0xe53a, 0xe916, +0xe523, 0xe8fa, 0xe523, 0xe8fa, 0xe4c9, 0xe895, 0xe4c9, 0xe895, 0xe499, 0xe854, 0xe499, +0xe854, 0xe479, 0xe81e, 0xe479, 0xe81e, 0xe44f, 0xe7d7, 0xe44f, 0xe7d7, 0xe453, 0xe7bc, +0xe453, 0xe7bc, 0xe453, 0xe7bc, 0xe42f, 0xe774, 0xe42f, 0xe774, 0xe4f8, 0xe815, 0xe4f8, +0xe815, 0xe672, 0xe965, 0xe672, 0xe965, 0xe726, 0xe9ef, 0xe726, 0xe9ef, 0xe781, 0xea1f, +0xe781, 0xea1f, 0xe7fe, 0xea71, 0xe7fe, 0xea71, 0xe7fe, 0xea71, 0xe8fc, 0xeb46, 0xe8fc, +0xeb46, 0xea1d, 0xec41, 0xea1d, 0xec41, 0xeb82, 0xed82, 0xeb82, 0xed82, 0xec09, 0xede9, +0xec09, 0xede9, 0xec07, 0xedcc, 0xec07, 0xedcc, 0xec07, 0xedcc, 0xec78, 0xee28, 0xec78, +0xee28, 0xebf4, 0xed94, 0xebf4, 0xed94, 0xebad, 0xed44, 0xebad, 0xed44, 0xec47, 0xedda, +0xec47, 0xedda, 0xed16, 0xeeac, 0xed16, 0xeeac, 0xee64, 0xf003, 0xee64, 0xf003, 0xee64, +0xf003, 0xefc0, 0xf16f, 0xefc0, 0xf16f, 0xf049, 0xf20e, 0xf049, 0xf20e, 0xf049, 0xf229, +0xf049, 0xf229, 0xef9e, 0xf19e, 0xef9e, 0xf19e, 0xeef9, 0xf11d, 0xeef9, 0xf11d, 0xee6c, +0xf0b8, 0xee6c, 0xf0b8, 0xee6c, 0xf0b8, 0xed00, 0xef77, 0xed00, 0xef77, 0xeb96, 0xee3a, +0xeb96, 0xee3a, 0xea98, 0xed68, 0xea98, 0xed68, 0xeaca, 0xedc9, 0xeaca, 0xedc9, 0xeb24, +0xee50, 0xeb24, 0xee50, 0xeb24, 0xee50, 0xeae3, 0xee3b, 0xeae3, 0xee3b, 0xe9bb, 0xed3d, +0xe9bb, 0xed3d, 0xe7eb, 0xeb94, 0xe7eb, 0xeb94, 0xe65c, 0xea27, 0xe65c, 0xea27, 0xe48c, +0xe876, 0xe48c, 0xe876, 0xe2e8, 0xe6eb, 0xe2e8, 0xe6eb, 0xe2e8, 0xe6eb, 0xe06a, 0xe482, +0xe06a, 0xe482, 0xde6f, 0xe295, 0xde6f, 0xe295, 0xdda2, 0xe1d2, 0xdda2, 0xe1d2, 0xdcd4, +0xe107, 0xdcd4, 0xe107, 0xdc4e, 0xe07e, 0xdc4e, 0xe07e, 0xdc4e, 0xe07e, 0xdb6e, 0xdf94, +0xdb6e, 0xdf94, 0xda83, 0xde9b, 0xda83, 0xde9b, 0xda03, 0xde06, 0xda03, 0xde06, 0xda8f, +0xde79, 0xda8f, 0xde79, 0xdbe4, 0xdfaf, 0xdbe4, 0xdfaf, 0xdc70, 0xe017, 0xdc70, 0xe017, +0xdc70, 0xe017, 0xdcba, 0xe03a, 0xdcba, 0xe03a, 0xde3f, 0xe193, 0xde3f, 0xe193, 0xdff2, +0xe318, 0xdff2, 0xe318, 0xe1a8, 0xe49c, 0xe1a8, 0xe49c, 0xe2e0, 0xe5a2, 0xe2e0, 0xe5a2, +0xe364, 0xe5f1, 0xe364, 0xe5f1, 0xe364, 0xe5f1, 0xe514, 0xe76a, 0xe514, 0xe76a, 0xe741, +0xe960, 0xe741, 0xe960, 0xe93d, 0xeb23, 0xe93d, 0xeb23, 0xeaa3, 0xec52, 0xeaa3, 0xec52, +0xec2e, 0xeda4, 0xec2e, 0xeda4, 0xec2e, 0xeda4, 0xeddd, 0xef1b, 0xeddd, 0xef1b, 0xef43, +0xf049, 0xef43, 0xf049, 0xf0c8, 0xf197, 0xf0c8, 0xf197, 0xf15c, 0xf1f3, 0xf15c, 0xf1f3, +0xf1d7, 0xf237, 0xf1d7, 0xf237, 0xf291, 0xf2ba, 0xf291, 0xf2ba, 0xf291, 0xf2ba, 0xf37f, +0xf372, 0xf37f, 0xf372, 0xf4cb, 0xf486, 0xf4cb, 0xf486, 0xf638, 0xf5bc, 0xf638, 0xf5bc, +0xf85f, 0xf7ab, 0xf85f, 0xf7ab, 0xfae2, 0xf9f6, 0xfae2, 0xf9f6, 0xfd85, 0xfc61, 0xfd85, +0xfc61, 0xfd85, 0xfc61, 0x19, 0xfeba, 0x19, 0xfeba, 0x268, 0xcf, 0x268, 0xcf, +0x4d8, 0x303, 0x4d8, 0x303, 0x783, 0x571, 0x783, 0x571, 0xa58, 0x809, 0xa58, +0x809, 0xa58, 0x809, 0xd77, 0xaeb, 0xd77, 0xaeb, 0x10b1, 0xde7, 0x10b1, 0xde7, +0x13ef, 0x10e8, 0x13ef, 0x10e8, 0x177b, 0x1438, 0x177b, 0x1438, 0x1b3c, 0x17be, 0x1b3c, +0x17be, 0x1f54, 0x1b9d, 0x1f54, 0x1b9d, 0x1f54, 0x1b9d, 0x2300, 0x1f13, 0x2300, 0x1f13, +0x2554, 0x2134, 0x2554, 0x2134, 0x2701, 0x22b3, 0x2701, 0x22b3, 0x2892, 0x241d, 0x2892, +0x241d, 0x29f8, 0x2560, 0x29f8, 0x2560, 0x2a76, 0x25c3, 0x2a76, 0x25c3, 0x2a76, 0x25c3, +0x2ac1, 0x25fa, 0x2ac1, 0x25fa, 0x2b6a, 0x2696, 0x2b6a, 0x2696, 0x2bef, 0x2718, 0x2bef, +0x2718, 0x2c84, 0x27b3, 0x2c84, 0x27b3, 0x2c80, 0x27be, 0x2c80, 0x27be, 0x2c80, 0x27be, +0x2c44, 0x279a, 0x2c44, 0x279a, 0x2c75, 0x27ed, 0x2c75, 0x27ed, 0x2cf4, 0x2896, 0x2cf4, +0x2896, 0x2c37, 0x280c, 0x2c37, 0x280c, 0x2a2f, 0x263f, 0x2a2f, 0x263f, 0x2871, 0x24c2, +0x2871, 0x24c2, 0x2871, 0x24c2, 0x26bc, 0x2355, 0x26bc, 0x2355, 0x2534, 0x2219, 0x2534, +0x2219, 0x22c8, 0x1ffe, 0x22c8, 0x1ffe, 0x1f90, 0x1d18, 0x1f90, 0x1d18, 0x1d43, 0x1b1e, +0x1d43, 0x1b1e, 0x1bdd, 0x1a0c, 0x1bdd, 0x1a0c, 0x1bdd, 0x1a0c, 0x1ac9, 0x194a, 0x1ac9, +0x194a, 0x195f, 0x182e, 0x195f, 0x182e, 0x169f, 0x15b9, 0x169f, 0x15b9, 0x13bf, 0x131e, +0x13bf, 0x131e, 0x113f, 0x10dd, 0x113f, 0x10dd, 0x113f, 0x10dd, 0xddc, 0xdb3, 0xddc, +0xdb3, 0xa23, 0xa2b, 0xa23, 0xa2b, 0x5b3, 0x5e5, 0x5b3, 0x5e5, 0x20a, 0x25f, +0x20a, 0x25f, 0xff4e, 0xffbd, 0xff4e, 0xffbd, 0xfc46, 0xfcc9, 0xfc46, 0xfcc9, 0xfc46, +0xfcc9, 0xf95a, 0xf9ea, 0xf95a, 0xf9ea, 0xf70a, 0xf7a2, 0xf70a, 0xf7a2, 0xf5ed, 0xf688, +0xf5ed, 0xf688, 0xf537, 0xf5d2, 0xf537, 0xf5d2, 0xf530, 0xf5c8, 0xf530, 0xf5c8, 0xf4bf, +0xf554, 0xf4bf, 0xf554, 0xf4bf, 0xf554, 0xf418, 0xf4aa, 0xf418, 0xf4aa, 0xf3c5, 0xf455, +0xf3c5, 0xf455, 0xf342, 0xf3d3, 0xf342, 0xf3d3, 0xf296, 0xf32b, 0xf296, 0xf32b, 0xf1a5, +0xf244, 0xf1a5, 0xf244, 0xf1a5, 0xf244, 0xf18b, 0xf239, 0xf18b, 0xf239, 0xf1ae, 0xf271, +0xf1ae, 0xf271, 0xf27a, 0xf358, 0xf27a, 0xf358, 0xf381, 0xf480, 0xf381, 0xf480, 0xf33d, +0xf463, 0xf33d, 0xf463, 0xf236, 0xf389, 0xf236, 0xf389, 0xf236, 0xf389, 0xf181, 0xf306, +0xf181, 0xf306, 0xf0df, 0xf299, 0xf0df, 0xf299, 0xf068, 0xf259, 0xf068, 0xf259, 0xf039, +0xf262, 0xf039, 0xf262, 0xeefe, 0xf15f, 0xeefe, 0xf15f, 0xee4b, 0xf0e2, 0xee4b, 0xf0e2, +0xee4b, 0xf0e2, 0xee21, 0xf0ea, 0xee21, 0xf0ea, 0xed41, 0xf036, 0xed41, 0xf036, 0xec2f, +0xef49, 0xec2f, 0xef49, 0xeb49, 0xee7f, 0xeb49, 0xee7f, 0xea76, 0xedbe, 0xea76, 0xedbe, +0xea76, 0xedbe, 0xea92, 0xede1, 0xea92, 0xede1, 0xec19, 0xef62, 0xec19, 0xef62, 0xed0e, +0xf044, 0xed0e, 0xf044, 0xedbf, 0xf0d6, 0xedbf, 0xf0d6, 0xef74, 0xf25d, 0xef74, 0xf25d, +0xf1f9, 0xf4a8, 0xf1f9, 0xf4a8, 0xf1f9, 0xf4a8, 0xf46b, 0xf6d3, 0xf46b, 0xf6d3, 0xf6b0, +0xf8c5, 0xf6b0, 0xf8c5, 0xf89c, 0xfa54, 0xf89c, 0xfa54, 0xfa35, 0xfb86, 0xfa35, 0xfb86, +0xfce0, 0xfdc3, 0xfce0, 0xfdc3, 0x22, 0x91, 0x22, 0x91, 0x22, 0x91, 0x36d, +0x365, 0x36d, 0x365, 0x6ab, 0x62c, 0x6ab, 0x62c, 0x981, 0x88a, 0x981, 0x88a, +0xc2e, 0xac3, 0xc2e, 0xac3, 0xe9b, 0xcc0, 0xe9b, 0xcc0, 0xe9b, 0xcc0, 0x108f, +0xe4d, 0x108f, 0xe4d, 0x121d, 0xf7b, 0x121d, 0xf7b, 0x1318, 0x1022, 0x1318, 0x1022, +0x1403, 0x10c5, 0x1403, 0x10c5, 0x1552, 0x11d9, 0x1552, 0x11d9, 0x166b, 0x12c3, 0x166b, +0x12c3, 0x166b, 0x12c3, 0x1826, 0x145f, 0x1826, 0x145f, 0x1a36, 0x165f, 0x1a36, 0x165f, +0x1b03, 0x1729, 0x1b03, 0x1729, 0x1b26, 0x1757, 0x1b26, 0x1757, 0x1a6b, 0x16b4, 0x1a6b, +0x16b4, 0x193a, 0x15a7, 0x193a, 0x15a7, 0x193a, 0x15a7, 0x1937, 0x15d2, 0x1937, 0x15d2, +0x1933, 0x1606, 0x1933, 0x1606, 0x183a, 0x154b, 0x183a, 0x154b, 0x1754, 0x14aa, 0x1754, +0x14aa, 0x1679, 0x1417, 0x1679, 0x1417, 0x1679, 0x1417, 0x1500, 0x12e8, 0x1500, 0x12e8, +0x140d, 0x123f, 0x140d, 0x123f, 0x136f, 0x11ea, 0x136f, 0x11ea, 0x121a, 0x10db, 0x121a, +0x10db, 0x107f, 0xf80, 0x107f, 0xf80, 0xee0, 0xe1d, 0xee0, 0xe1d, 0xee0, 0xe1d, +0xd26, 0xc99, 0xd26, 0xc99, 0xb17, 0xab7, 0xb17, 0xab7, 0x99c, 0x962, 0x99c, +0x962, 0x818, 0x7fc, 0x818, 0x7fc, 0x6f1, 0x6ec, 0x6f1, 0x6ec, 0x6f1, 0x6ec, +0x729, 0x733, 0x729, 0x733, 0x737, 0x749, 0x737, 0x749, 0x69d, 0x6b1, 0x69d, +0x6b1, 0x5fb, 0x60b, 0x5fb, 0x60b, 0x5e2, 0x5eb, 0x5e2, 0x5eb, 0x639, 0x636, +0x639, 0x636, 0x639, 0x636, 0x708, 0x6f9, 0x708, 0x6f9, 0x6e7, 0x6c9, 0x6e7, +0x6c9, 0x66b, 0x63f, 0x66b, 0x63f, 0x695, 0x65b, 0x695, 0x65b, 0x686, 0x641, +0x686, 0x641, 0x684, 0x634, 0x684, 0x634, 0x684, 0x634, 0x678, 0x622, 0x678, +0x622, 0x6d1, 0x678, 0x6d1, 0x678, 0x722, 0x6c9, 0x722, 0x6c9, 0x761, 0x70c, +0x761, 0x70c, 0x6e5, 0x695, 0x6e5, 0x695, 0x6e5, 0x695, 0x55e, 0x516, 0x55e, +0x516, 0x366, 0x329, 0x366, 0x329, 0x243, 0x210, 0x243, 0x210, 0x250, 0x228, +0x250, 0x228, 0x1c8, 0x1aa, 0x1c8, 0x1aa, 0x15f, 0x149, 0x15f, 0x149, 0x15f, +0x149, 0xc8, 0xb6, 0xc8, 0xb6, 0xfff2, 0xffdf, 0xfff2, 0xffdf, 0xfed0, 0xfeb8, +0xfed0, 0xfeb8, 0xfd0a, 0xfce6, 0xfd0a, 0xfce6, 0xfb90, 0xfb5a, 0xfb90, 0xfb5a, 0xfa99, +0xfa4a, 0xfa99, 0xfa4a, 0xfa99, 0xfa4a, 0xf9ef, 0xf97e, 0xf9ef, 0xf97e, 0xf9e4, 0xf94c, +0xf9e4, 0xf94c, 0xfa9f, 0xf9d7, 0xfa9f, 0xf9d7, 0xfb48, 0xfa49, 0xfb48, 0xfa49, 0xfc91, +0xfb55, 0xfc91, 0xfb55, 0xfc91, 0xfb55, 0xfe37, 0xfcb9, 0xfe37, 0xfcb9, 0x20, 0xfe5b, +0x20, 0xfe5b, 0x222, 0x15, 0x222, 0x15, 0x3fb, 0x1a2, 0x3fb, 0x1a2, 0x5ab, +0x307, 0x5ab, 0x307, 0x7d1, 0x4e3, 0x7d1, 0x4e3, 0x7d1, 0x4e3, 0xb6a, 0x835, +0xb6a, 0x835, 0xe71, 0xafa, 0xe71, 0xafa, 0x110b, 0xd58, 0x110b, 0xd58, 0x135c, +0xf74, 0x135c, 0xf74, 0x1504, 0x10ef, 0x1504, 0x10ef, 0x164d, 0x1215, 0x164d, 0x1215, +0x164d, 0x1215, 0x1716, 0x12c5, 0x1716, 0x12c5, 0x1747, 0x12ea, 0x1747, 0x12ea, 0x1691, +0x1230, 0x1691, 0x1230, 0x1637, 0x11e0, 0x1637, 0x11e0, 0x15b2, 0x116e, 0x15b2, 0x116e, +0x15b2, 0x116e, 0x14d1, 0x10ab, 0x14d1, 0x10ab, 0x13fa, 0xffd, 0x13fa, 0xffd, 0x12fb, +0xf2f, 0x12fb, 0xf2f, 0x124e, 0xebb, 0x124e, 0xebb, 0x11ae, 0xe5c, 0x11ae, 0xe5c, +0x1174, 0xe68, 0x1174, 0xe68, 0x1174, 0xe68, 0x1196, 0xed3, 0x1196, 0xed3, 0x1188, +0xf11, 0x1188, 0xf11, 0x1179, 0xf50, 0x1179, 0xf50, 0x10f9, 0xf1d, 0x10f9, 0xf1d, +0xff3, 0xe64, 0xff3, 0xe64, 0xf91, 0xe4c, 0xf91, 0xe4c, 0xf91, 0xe4c, 0xf7e, +0xe7e, 0xf7e, 0xe7e, 0xfb2, 0xef3, 0xfb2, 0xef3, 0x1117, 0x1095, 0x1117, 0x1095, +0x11f7, 0x11ac, 0x11f7, 0x11ac, 0x1213, 0x11f8, 0x1213, 0x11f8, 0x1213, 0x11f8, 0x12a3, +0x12b3, 0x12a3, 0x12b3, 0x12a0, 0x12d5, 0x12a0, 0x12d5, 0x1238, 0x128c, 0x1238, 0x128c, +0x11a4, 0x1212, 0x11a4, 0x1212, 0x105a, 0x10de, 0x105a, 0x10de, 0xed3, 0xf68, 0xed3, +0xf68, 0xed3, 0xf68, 0xd4b, 0xdef, 0xd4b, 0xdef, 0xbd2, 0xc81, 0xbd2, 0xc81, +0xab1, 0xb6b, 0xab1, 0xb6b, 0x9bb, 0xa7e, 0x9bb, 0xa7e, 0x8c5, 0x992, 0x8c5, +0x992, 0x844, 0x91b, 0x844, 0x91b, 0x844, 0x91b, 0x7c1, 0x8a5, 0x7c1, 0x8a5, +0x70f, 0x801, 0x70f, 0x801, 0x594, 0x695, 0x594, 0x695, 0x3b4, 0x4c9, 0x3b4, +0x4c9, 0x231, 0x35d, 0x231, 0x35d, 0x231, 0x35d, 0xffe8, 0x12d, 0xffe8, 0x12d, +0xfe25, 0xff87, 0xfe25, 0xff87, 0xfdeb, 0xff6d, 0xfdeb, 0xff6d, 0xfdad, 0xff51, 0xfdad, +0xff51, 0xfd52, 0xff1c, 0xfd52, 0xff1c, 0xfd6c, 0xff5d, 0xfd6c, 0xff5d, 0xfd6c, 0xff5d, +0xfc36, 0xfe50, 0xfc36, 0xfe50, 0xfa70, 0xfcb3, 0xfa70, 0xfcb3, 0xf93a, 0xfba8, 0xf93a, +0xfba8, 0xf7ca, 0xfa62, 0xf7ca, 0xfa62, 0xf65f, 0xf921, 0xf65f, 0xf921, 0xf4bc, 0xf7a6, +0xf4bc, 0xf7a6, 0xf4bc, 0xf7a6, 0xf2f6, 0xf605, 0xf2f6, 0xf605, 0xf0d5, 0xf409, 0xf0d5, +0xf409, 0xef85, 0xf2da, 0xef85, 0xf2da, 0xee39, 0xf1aa, 0xee39, 0xf1aa, 0xec56, 0xefe1, +0xec56, 0xefe1, 0xec56, 0xefe1, 0xeb1a, 0xeebb, 0xeb1a, 0xeebb, 0xea01, 0xedb2, 0xea01, +0xedb2, 0xe8fe, 0xecbb, 0xe8fe, 0xecbb, 0xe7ed, 0xebb1, 0xe7ed, 0xebb1, 0xe757, 0xeb1c, +0xe757, 0xeb1c, 0xe643, 0xea04, 0xe643, 0xea04, 0xe643, 0xea04, 0xe515, 0xe8ce, 0xe515, +0xe8ce, 0xe48b, 0xe835, 0xe48b, 0xe835, 0xe3ea, 0xe780, 0xe3ea, 0xe780, 0xe2f6, 0xe673, +0xe2f6, 0xe673, 0xe208, 0xe567, 0xe208, 0xe567, 0xe221, 0xe55f, 0xe221, 0xe55f, 0xe221, +0xe55f, 0xe286, 0xe59e, 0xe286, 0xe59e, 0xe3ee, 0xe6dc, 0xe3ee, 0xe6dc, 0xe5f1, 0xe8b3, +0xe5f1, 0xe8b3, 0xe73b, 0xe9ce, 0xe73b, 0xe9ce, 0xe88a, 0xeaec, 0xe88a, 0xeaec, 0xe88a, +0xeaec, 0xea0e, 0xec3e, 0xea0e, 0xec3e, 0xeaa4, 0xeca3, 0xeaa4, 0xeca3, 0xeb0b, 0xecda, +0xeb0b, 0xecda, 0xebbb, 0xed5b, 0xebbb, 0xed5b, 0xeb47, 0xecb9, 0xeb47, 0xecb9, 0xeb4b, +0xec95, 0xeb4b, 0xec95, 0xeb4b, 0xec95, 0xeb8e, 0xecb3, 0xeb8e, 0xecb3, 0xeb98, 0xec9d, +0xeb98, 0xec9d, 0xec3e, 0xed29, 0xec3e, 0xed29, 0xec7a, 0xed52, 0xec7a, 0xed52, 0xec4b, +0xed17, 0xec4b, 0xed17, 0xec2c, 0xecf4, 0xec2c, 0xecf4, 0xec2c, 0xecf4, 0xebde, 0xecaa, +0xebde, 0xecaa, 0xec28, 0xecff, 0xec28, 0xecff, 0xece3, 0xedcd, 0xece3, 0xedcd, 0xebf9, +0xecfd, 0xebf9, 0xecfd, 0xeac1, 0xebe8, 0xeac1, 0xebe8, 0xeac1, 0xebe8, 0xe9af, 0xeafe, +0xe9af, 0xeafe, 0xe7f3, 0xe971, 0xe7f3, 0xe971, 0xe6c3, 0xe874, 0xe6c3, 0xe874, 0xe641, +0xe82a, 0xe641, 0xe82a, 0xe648, 0xe86c, 0xe648, 0xe86c, 0xe62d, 0xe88d, 0xe62d, 0xe88d, +0xe62d, 0xe88d, 0xe5ad, 0xe84a, 0xe5ad, 0xe84a, 0xe4cd, 0xe7a5, 0xe4cd, 0xe7a5, 0xe356, +0xe668, 0xe356, 0xe668, 0xe1c2, 0xe50b, 0xe1c2, 0xe50b, 0xe023, 0xe39d, 0xe023, 0xe39d, +0xe023, 0xe39d, 0xddeb, 0xe191, 0xddeb, 0xe191, 0xdb67, 0xdf32, 0xdb67, 0xdf32, 0xd981, +0xdd69, 0xd981, 0xdd69, 0xd852, 0xdc4f, 0xd852, 0xdc4f, 0xd766, 0xdb70, 0xd766, 0xdb70, +0xd642, 0xda50, 0xd642, 0xda50, 0xd642, 0xda50, 0xd4f3, 0xd8fb, 0xd4f3, 0xd8fb, 0xd3f9, +0xd7f4, 0xd3f9, 0xd7f4, 0xd3d5, 0xd7b9, 0xd3d5, 0xd7b9, 0xd47e, 0xd844, 0xd47e, 0xd844, +0xd533, 0xd8d3, 0xd533, 0xd8d3, 0xd5c2, 0xd936, 0xd5c2, 0xd936, 0xd5c2, 0xd936, 0xd693, +0xd9d5, 0xd693, 0xd9d5, 0xd793, 0xda9f, 0xd793, 0xda9f, 0xd8c0, 0xdb93, 0xd8c0, 0xdb93, +0xdae6, 0xdd7c, 0xdae6, 0xdd7c, 0xdd65, 0xdfbe, 0xdd65, 0xdfbe, 0xdd65, 0xdfbe, 0xdf79, +0xe195, 0xdf79, 0xe195, 0xe21b, 0xe3f8, 0xe21b, 0xe3f8, 0xe446, 0xe5e7, 0xe446, 0xe5e7, +0xe60b, 0xe771, 0xe60b, 0xe771, 0xe83b, 0xe969, 0xe83b, 0xe969, 0xea29, 0xeb21, 0xea29, +0xeb21, 0xea29, 0xeb21, 0xec09, 0xecce, 0xec09, 0xecce, 0xed9f, 0xee34, 0xed9f, 0xee34, +0xef46, 0xefad, 0xef46, 0xefad, 0xf01a, 0xf055, 0xf01a, 0xf055, 0xf092, 0xf0a2, 0xf092, +0xf0a2, 0xf1ef, 0xf1d5, 0xf1ef, 0xf1d5, 0xf1ef, 0xf1d5, 0xf38e, 0xf34b, 0xf38e, 0xf34b, +0xf591, 0xf525, 0xf591, 0xf525, 0xf783, 0xf6ec, 0xf783, 0xf6ec, 0xf971, 0xf8ad, 0xf971, +0xf8ad, 0xfb69, 0xfa76, 0xfb69, 0xfa76, 0xfb69, 0xfa76, 0xfde0, 0xfcbb, 0xfde0, 0xfcbb, +0xc2, 0xff68, 0xc2, 0xff68, 0x3e7, 0x253, 0x3e7, 0x253, 0x77d, 0x5ac, 0x77d, +0x5ac, 0xaff, 0x8ec, 0xaff, 0x8ec, 0xeaa, 0xc52, 0xeaa, 0xc52, 0xeaa, 0xc52, +0x11fc, 0xf5c, 0x11fc, 0xf5c, 0x1558, 0x126c, 0x1558, 0x126c, 0x19a2, 0x1669, 0x19a2, +0x1669, 0x1de7, 0x1a5f, 0x1de7, 0x1a5f, 0x2197, 0x1dc1, 0x2197, 0x1dc1, 0x2571, 0x214d, +0x2571, 0x214d, 0x2571, 0x214d, 0x2861, 0x23f4, 0x2861, 0x23f4, 0x2ac6, 0x2613, 0x2ac6, +0x2613, 0x2d17, 0x2824, 0x2d17, 0x2824, 0x2e09, 0x28dc, 0x2e09, 0x28dc, 0x2e7c, 0x291f, +0x2e7c, 0x291f, 0x2e7c, 0x291f, 0x2ee8, 0x2964, 0x2ee8, 0x2964, 0x3038, 0x2a97, 0x3038, +0x2a97, 0x3196, 0x2be5, 0x3196, 0x2be5, 0x31f5, 0x2c3f, 0x31f5, 0x2c3f, 0x31f2, 0x2c45, +0x31f2, 0x2c45, 0x316e, 0x2bd7, 0x316e, 0x2bd7, 0x316e, 0x2bd7, 0x3125, 0x2bb1, 0x3125, +0x2bb1, 0x3152, 0x2c0d, 0x3152, 0x2c0d, 0x30ff, 0x2bf6, 0x30ff, 0x2bf6, 0x2f90, 0x2acd, +0x2f90, 0x2acd, 0x2dde, 0x296d, 0x2dde, 0x296d, 0x2c3c, 0x2824, 0x2c3c, 0x2824, 0x2c3c, +0x2824, 0x2ab2, 0x26fb, 0x2ab2, 0x26fb, 0x28c4, 0x2574, 0x28c4, 0x2574, 0x26a5, 0x23bf, +0x26a5, 0x23bf, 0x24d1, 0x2257, 0x24d1, 0x2257, 0x234c, 0x213e, 0x234c, 0x213e, 0x234c, +0x213e, 0x224f, 0x20ac, 0x224f, 0x20ac, 0x2025, 0x1ee8, 0x2025, 0x1ee8, 0x1ccd, 0x1bf1, +0x1ccd, 0x1bf1, 0x196c, 0x18ea, 0x196c, 0x18ea, 0x1691, 0x1661, 0x1691, 0x1661, 0x13a1, +0x13ba, 0x13a1, 0x13ba, 0x13a1, 0x13ba, 0x10a6, 0x10fd, 0x10a6, 0x10fd, 0xd88, 0xe13, +0xd88, 0xe13, 0x911, 0x9c5, 0x911, 0x9c5, 0x553, 0x626, 0x553, 0x626, 0x20c, +0x2f3, 0x20c, 0x2f3, 0xfe83, 0xff74, 0xfe83, 0xff74, 0xfe83, 0xff74, 0xfbdc, 0xfccf, +0xfbdc, 0xfccf, 0xf93d, 0xfa2b, 0xf93d, 0xfa2b, 0xf712, 0xf7f3, 0xf712, 0xf7f3, 0xf58a, +0xf65b, 0xf58a, 0xf65b, 0xf437, 0xf4f3, 0xf437, 0xf4f3, 0xf437, 0xf4f3, 0xf2f8, 0xf39e, +0xf2f8, 0xf39e, 0xf1cc, 0xf25d, 0xf1cc, 0xf25d, 0xf1c1, 0xf23e, 0xf1c1, 0xf23e, 0xf268, +0xf2d5, 0xf268, 0xf2d5, 0xf2e1, 0xf342, 0xf2e1, 0xf342, 0xf364, 0xf3be, 0xf364, 0xf3be, +0xf364, 0xf3be, 0xf3d2, 0xf42d, 0xf3d2, 0xf42d, 0xf448, 0xf4ab, 0xf448, 0xf4ab, 0xf4c1, +0xf534, 0xf4c1, 0xf534, 0xf4a4, 0xf52e, 0xf4a4, 0xf52e, 0xf38c, 0xf434, 0xf38c, 0xf434, +0xf268, 0xf336, 0xf268, 0xf336, 0xf268, 0xf336, 0xf1da, 0xf2d2, 0xf1da, 0xf2d2, 0xf11f, +0xf248, 0xf11f, 0xf248, 0xf05d, 0xf1ba, 0xf05d, 0xf1ba, 0xeefe, 0xf091, 0xeefe, 0xf091, +0xed11, 0xeed9, 0xed11, 0xeed9, 0xed11, 0xeed9, 0xec5a, 0xee57, 0xec5a, 0xee57, 0xebba, +0xede7, 0xebba, 0xede7, 0xea46, 0xeca0, 0xea46, 0xeca0, 0xe8cf, 0xeb4d, 0xe8cf, 0xeb4d, +0xe78a, 0xea24, 0xe78a, 0xea24, 0xe6bf, 0xe96b, 0xe6bf, 0xe96b, 0xe6bf, 0xe96b, 0xe65b, +0xe90e, 0xe65b, 0xe90e, 0xe6bd, 0xe96a, 0xe6bd, 0xe96a, 0xe758, 0xe9f3, 0xe758, 0xe9f3, +0xe8d3, 0xeb4e, 0xe8d3, 0xeb4e, 0xeb3d, 0xed8b, 0xeb3d, 0xed8b, 0xecc1, 0xeed5, 0xecc1, +0xeed5, 0xecc1, 0xeed5, 0xeeac, 0xf07a, 0xeeac, 0xf07a, 0xf120, 0xf29d, 0xf120, 0xf29d, +0xf3bc, 0xf4df, 0xf3bc, 0xf4df, 0xf773, 0xf833, 0xf773, 0xf833, 0xfb2f, 0xfb87, 0xfb2f, +0xfb87, 0xfb2f, 0xfb87, 0xfde8, 0xfdd2, 0xfde8, 0xfdd2, 0x6b, 0xffe6, 0x6b, 0xffe6, +0x35d, 0x269, 0x35d, 0x269, 0x676, 0x515, 0x676, 0x515, 0x8d3, 0x70a, 0x8d3, +0x70a, 0xa48, 0x81d, 0xa48, 0x81d, 0xa48, 0x81d, 0xbea, 0x967, 0xbea, 0x967, +0xda6, 0xad3, 0xda6, 0xad3, 0xfbb, 0xca4, 0xfbb, 0xca4, 0x11e6, 0xe97, 0x11e6, +0xe97, 0x1325, 0xfac, 0x1325, 0xfac, 0x13e3, 0x104c, 0x13e3, 0x104c, 0x13e3, 0x104c, +0x1538, 0x1190, 0x1538, 0x1190, 0x16aa, 0x12ff, 0x16aa, 0x12ff, 0x17c5, 0x1424, 0x17c5, +0x1424, 0x18fb, 0x156e, 0x18fb, 0x156e, 0x18b5, 0x1547, 0x18b5, 0x1547, 0x18b5, 0x1547, +0x185b, 0x1515, 0x185b, 0x1515, 0x18bb, 0x15a4, 0x18bb, 0x15a4, 0x1831, 0x154f, 0x1831, +0x154f, 0x1744, 0x149b, 0x1744, 0x149b, 0x163f, 0x13d0, 0x163f, 0x13d0, 0x15af, 0x137b, +0x15af, 0x137b, 0x15af, 0x137b, 0x1553, 0x1359, 0x1553, 0x1359, 0x14b2, 0x12ef, 0x14b2, +0x12ef, 0x1331, 0x11a1, 0x1331, 0x11a1, 0x1126, 0xfc4, 0x1126, 0xfc4, 0x104b, 0xf11, +0x104b, 0xf11, 0x104b, 0xf11, 0x1028, 0xf10, 0x1028, 0xf10, 0xf53, 0xe56, 0xf53, +0xe56, 0xdee, 0xd06, 0xdee, 0xd06, 0xc9d, 0xbc4, 0xc9d, 0xbc4, 0xb89, 0xab9, +0xb89, 0xab9, 0xba5, 0xad9, 0xba5, 0xad9, 0xba5, 0xad9, 0xc0f, 0xb43, 0xc0f, +0xb43, 0xb31, 0xa63, 0xb31, 0xa63, 0xa88, 0x9b5, 0xa88, 0x9b5, 0xaf1, 0xa19, +0xaf1, 0xa19, 0xb8c, 0xaae, 0xb8c, 0xaae, 0xc5a, 0xb79, 0xc5a, 0xb79, 0xc5a, +0xb79, 0xc97, 0xbb5, 0xc97, 0xbb5, 0xbba, 0xada, 0xbba, 0xada, 0xb77, 0xa9d, +0xb77, 0xa9d, 0xbd7, 0xb07, 0xbd7, 0xb07, 0xb93, 0xad3, 0xb93, 0xad3, 0xb93, +0xad3, 0xa9d, 0x9f1, 0xa9d, 0x9f1, 0x9e0, 0x94c, 0x9e0, 0x94c, 0xa1c, 0x9a4, +0xa1c, 0x9a4, 0xad8, 0xa81, 0xad8, 0xa81, 0xb44, 0xb0f, 0xb44, 0xb0f, 0xad2, +0xac0, 0xad2, 0xac0, 0xad2, 0xac0, 0x9ea, 0x9fc, 0x9ea, 0x9fc, 0x923, 0x958, +0x923, 0x958, 0x81d, 0x873, 0x81d, 0x873, 0x6f4, 0x767, 0x6f4, 0x767, 0x5ab, +0x637, 0x5ab, 0x637, 0x3df, 0x47f, 0x3df, 0x47f, 0x3df, 0x47f, 0x27c, 0x328, +0x27c, 0x328, 0x137, 0x1e8, 0x137, 0x1e8, 0xff38, 0xffe6, 0xff38, 0xffe6, 0xfd72, +0xfe14, 0xfd72, 0xfe14, 0xfc05, 0xfc92, 0xfc05, 0xfc92, 0xfc05, 0xfc92, 0xfb38, 0xfba8, +0xfb38, 0xfba8, 0xfb02, 0xfb4c, 0xfb02, 0xfb4c, 0xfabe, 0xfada, 0xfabe, 0xfada, 0xfb5c, +0xfb42, 0xfb5c, 0xfb42, 0xfce4, 0xfc8f, 0xfce4, 0xfc8f, 0xfed4, 0xfe3d, 0xfed4, 0xfe3d, +0xfed4, 0xfe3d, 0xdc, 0, 0xdc, 0, 0x268, 0x145, 0x268, 0x145, 0x3bf, +0x253, 0x3bf, 0x253, 0x5b6, 0x401, 0x5b6, 0x401, 0x825, 0x628, 0x825, 0x628, +0xad6, 0x894, 0xad6, 0x894, 0xad6, 0x894, 0xe26, 0xba4, 0xe26, 0xba4, 0x1066, +0xda8, 0x1066, 0xda8, 0x1278, 0xf86, 0x1278, 0xf86, 0x1547, 0x1227, 0x1547, 0x1227, +0x1617, 0x12d1, 0x1617, 0x12d1, 0x1617, 0x12d1, 0x1570, 0x120c, 0x1570, 0x120c, 0x1486, +0x110d, 0x1486, 0x110d, 0x13df, 0x1059, 0x13df, 0x1059, 0x1417, 0x108d, 0x1417, 0x108d, +0x14ef, 0x1168, 0x14ef, 0x1168, 0x14d5, 0x115a, 0x14d5, 0x115a, 0x14d5, 0x115a, 0x12de, +0xf75, 0x12de, 0xf75, 0x1196, 0xe45, 0x1196, 0xe45, 0x114a, 0xe16, 0x114a, 0xe16, +0x1113, 0xe01, 0x1113, 0xe01, 0x113f, 0xe51, 0x113f, 0xe51, 0x1121, 0xe5a, 0x1121, +0xe5a, 0x1121, 0xe5a, 0x10a9, 0xe0a, 0x10a9, 0xe0a, 0x10bd, 0xe47, 0x10bd, 0xe47, +0x1127, 0xeda, 0x1127, 0xeda, 0x1048, 0xe23, 0x1048, 0xe23, 0xf27, 0xd28, 0xf27, +0xd28, 0xf27, 0xd28, 0xf52, 0xd78, 0xf52, 0xd78, 0xf94, 0xddc, 0xf94, 0xddc, +0xf8d, 0xdf5, 0xf8d, 0xdf5, 0xf38, 0xdbd, 0xf38, 0xdbd, 0xe70, 0xd0f, 0xe70, +0xd0f, 0xe36, 0xcee, 0xe36, 0xcee, 0xe36, 0xcee, 0xe6f, 0xd3e, 0xe6f, 0xd3e, +0xe93, 0xd77, 0xe93, 0xd77, 0xd98, 0xc90, 0xd98, 0xc90, 0xb44, 0xa50, 0xb44, +0xa50, 0x994, 0x8b4, 0x994, 0x8b4, 0x887, 0x7bb, 0x887, 0x7bb, 0x887, 0x7bb, +0x7a3, 0x6ed, 0x7a3, 0x6ed, 0x6f0, 0x650, 0x6f0, 0x650, 0x5de, 0x558, 0x5de, +0x558, 0x512, 0x4a7, 0x512, 0x4a7, 0x4b5, 0x467, 0x4b5, 0x467, 0x4b5, 0x467, +0x3f3, 0x3c6, 0x3f3, 0x3c6, 0x2bd, 0x2b2, 0x2bd, 0x2b2, 0x115, 0x130, 0x115, +0x130, 0xff0e, 0xff51, 0xff0e, 0xff51, 0xfd9c, 0xfe0b, 0xfd9c, 0xfe0b, 0xfc80, 0xfd1c, +0xfc80, 0xfd1c, 0xfc80, 0xfd1c, 0xfac8, 0xfb92, 0xfac8, 0xfb92, 0xf8fa, 0xf9f5, 0xf8fa, +0xf9f5, 0xf7f5, 0xf921, 0xf7f5, 0xf921, 0xf771, 0xf8cf, 0xf771, 0xf8cf, 0xf70b, 0xf89b, +0xf70b, 0xf89b, 0xf67e, 0xf83f, 0xf67e, 0xf83f, 0xf67e, 0xf83f, 0xf51f, 0xf711, 0xf51f, +0xf711, 0xf429, 0xf64a, 0xf429, 0xf64a, 0xf3d5, 0xf623, 0xf3d5, 0xf623, 0xf283, 0xf4fc, +0xf283, 0xf4fc, 0xf086, 0xf326, 0xf086, 0xf326, 0xf086, 0xf326, 0xeea2, 0xf167, 0xeea2, +0xf167, 0xeccd, 0xefb4, 0xeccd, 0xefb4, 0xeb74, 0xee79, 0xeb74, 0xee79, 0xeb56, 0xee76, +0xeb56, 0xee76, 0xeaa9, 0xede0, 0xeaa9, 0xede0, 0xe8eb, 0xec36, 0xe8eb, 0xec36, 0xe8eb, +0xec36, 0xe7e1, 0xeb3d, 0xe7e1, 0xeb3d, 0xe6de, 0xea46, 0xe6de, 0xea46, 0xe5ef, 0xe961, +0xe5ef, 0xe961, 0xe57d, 0xe8f6, 0xe57d, 0xe8f6, 0xe4e5, 0xe860, 0xe4e5, 0xe860, 0xe3eb, +0xe767, 0xe3eb, 0xe767, 0xe3eb, 0xe767, 0xe30d, 0xe688, 0xe30d, 0xe688, 0xe2ab, 0xe621, +0xe2ab, 0xe621, 0xe1fa, 0xe568, 0xe1fa, 0xe568, 0xe1b1, 0xe517, 0xe1b1, 0xe517, 0xe2f1, +0xe64c, 0xe2f1, 0xe64c, 0xe2f1, 0xe64c, 0xe47d, 0xe7cb, 0xe47d, 0xe7cb, 0xe563, 0xe8a2, +0xe563, 0xe8a2, 0xe6c2, 0xe9f2, 0xe6c2, 0xe9f2, 0xe88e, 0xebac, 0xe88e, 0xebac, 0xea3e, +0xed4a, 0xea3e, 0xed4a, 0xec2b, 0xef24, 0xec2b, 0xef24, 0xec2b, 0xef24, 0xed05, 0xefea, +0xed05, 0xefea, 0xed03, 0xefd3, 0xed03, 0xefd3, 0xedf4, 0xf0b0, 0xedf4, 0xf0b0, 0xefa3, +0xf24a, 0xefa3, 0xf24a, 0xf0ea, 0xf37d, 0xf0ea, 0xf37d, 0xf169, 0xf3e8, 0xf169, 0xf3e8, +0xf169, 0xf3e8, 0xf13c, 0xf3a9, 0xf13c, 0xf3a9, 0xf0f6, 0xf353, 0xf0f6, 0xf353, 0xf0fa, +0xf349, 0xf0fa, 0xf349, 0xf113, 0xf357, 0xf113, 0xf357, 0xf160, 0xf39b, 0xf160, 0xf39b, +0xf160, 0xf39b, 0xf128, 0xf35e, 0xf128, 0xf35e, 0xf107, 0xf33c, 0xf107, 0xf33c, 0xf1c2, +0xf3fa, 0xf1c2, 0xf3fa, 0xf1ef, 0xf42f, 0xf1ef, 0xf42f, 0xf1a0, 0xf3eb, 0xf1a0, 0xf3eb, +0xf0d5, 0xf332, 0xf0d5, 0xf332, 0xf0d5, 0xf332, 0xf004, 0xf276, 0xf004, 0xf276, 0xefee, +0xf27a, 0xefee, 0xf27a, 0xef18, 0xf1c3, 0xef18, 0xf1c3, 0xedc7, 0xf095, 0xedc7, 0xf095, +0xec52, 0xef46, 0xec52, 0xef46, 0xec52, 0xef46, 0xea4a, 0xed67, 0xea4a, 0xed67, 0xe944, +0xec8c, 0xe944, 0xec8c, 0xe8ca, 0xec3f, 0xe8ca, 0xec3f, 0xe734, 0xead6, 0xe734, 0xead6, +0xe4e6, 0xe8b5, 0xe4e6, 0xe8b5, 0xe2d8, 0xe6d2, 0xe2d8, 0xe6d2, 0xe2d8, 0xe6d2, 0xe11b, +0xe53e, 0xe11b, 0xe53e, 0xdfdb, 0xe424, 0xdfdb, 0xe424, 0xdf34, 0xe39e, 0xdf34, 0xe39e, +0xdd57, 0xe1dd, 0xdd57, 0xe1dd, 0xdb60, 0xdffd, 0xdb60, 0xdffd, 0xdae7, 0xdf93, 0xdae7, +0xdf93, 0xdae7, 0xdf93, 0xda00, 0xdeb4, 0xda00, 0xdeb4, 0xd8e5, 0xdd99, 0xd8e5, 0xdd99, +0xd88e, 0xdd3b, 0xd88e, 0xdd3b, 0xd8a1, 0xdd3f, 0xd8a1, 0xdd3f, 0xd8c6, 0xdd4c, 0xd8c6, +0xdd4c, 0xd8c6, 0xdd4c, 0xd95f, 0xddc5, 0xd95f, 0xddc5, 0xda0c, 0xde4b, 0xda0c, 0xde4b, +0xd9e5, 0xddf6, 0xd9e5, 0xddf6, 0xda78, 0xde55, 0xda78, 0xde55, 0xdc64, 0xe007, 0xdc64, +0xe007, 0xde8f, 0xe1f2, 0xde8f, 0xe1f2, 0xde8f, 0xe1f2, 0xe08d, 0xe3ae, 0xe08d, 0xe3ae, +0xe2e3, 0xe5bd, 0xe2e3, 0xe5bd, 0xe52a, 0xe7bb, 0xe52a, 0xe7bb, 0xe6c1, 0xe90a, 0xe6c1, +0xe90a, 0xe8bb, 0xeab9, 0xe8bb, 0xeab9, 0xea8a, 0xec3e, 0xea8a, 0xec3e, 0xea8a, 0xec3e, +0xeb2e, 0xec98, 0xeb2e, 0xec98, 0xec16, 0xed38, 0xec16, 0xed38, 0xede9, 0xeec6, 0xede9, +0xeec6, 0xef86, 0xf01e, 0xef86, 0xf01e, 0xf1ec, 0xf242, 0xf1ec, 0xf242, 0xf1ec, 0xf242, +0xf484, 0xf49a, 0xf484, 0xf49a, 0xf574, 0xf54c, 0xf574, 0xf54c, 0xf6cb, 0xf666, 0xf6cb, +0xf666, 0xf88f, 0xf7f0, 0xf88f, 0xf7f0, 0xfa17, 0xf93d, 0xfa17, 0xf93d, 0xfc02, 0xfaef, +0xfc02, 0xfaef, 0xfc02, 0xfaef, 0xfde8, 0xfc9c, 0xfde8, 0xfc9c, 0x18, 0xfe93, 0x18, +0xfe93, 0x2c5, 0x107, 0x2c5, 0x107, 0x58f, 0x396, 0x58f, 0x396, 0x86f, 0x63b, +0x86f, 0x63b, 0xc1d, 0x9ae, 0xc1d, 0x9ae, 0xc1d, 0x9ae, 0x1018, 0xd6b, 0x1018, +0xd6b, 0x13b3, 0x10c9, 0x13b3, 0x10c9, 0x16d3, 0x13ab, 0x16d3, 0x13ab, 0x19b6, 0x1651, +0x19b6, 0x1651, 0x1d37, 0x1994, 0x1d37, 0x1994, 0x1d37, 0x1994, 0x2095, 0x1cb7, 0x2095, +0x1cb7, 0x233e, 0x1f27, 0x233e, 0x1f27, 0x250e, 0x20c1, 0x250e, 0x20c1, 0x2632, 0x21b5, +0x2632, 0x21b5, 0x27e2, 0x2338, 0x27e2, 0x2338, 0x29fc, 0x252d, 0x29fc, 0x252d, 0x29fc, +0x252d, 0x2bf8, 0x270b, 0x2bf8, 0x270b, 0x2dba, 0x28b6, 0x2dba, 0x28b6, 0x2e66, 0x2955, +0x2e66, 0x2955, 0x2e70, 0x295b, 0x2e70, 0x295b, 0x2e97, 0x2989, 0x2e97, 0x2989, 0x2e78, +0x297a, 0x2e78, 0x297a, 0x2e78, 0x297a, 0x2de7, 0x2904, 0x2de7, 0x2904, 0x2d2b, 0x286d, +0x2d2b, 0x286d, 0x2cc1, 0x2831, 0x2cc1, 0x2831, 0x2bd7, 0x277f, 0x2bd7, 0x277f, 0x2a89, +0x2672, 0x2a89, 0x2672, 0x2a89, 0x2672, 0x28a8, 0x24d7, 0x28a8, 0x24d7, 0x25cd, 0x224a, +0x25cd, 0x224a, 0x2404, 0x20d4, 0x2404, 0x20d4, 0x22e7, 0x200d, 0x22e7, 0x200d, 0x2103, +0x1e81, 0x2103, 0x1e81, 0x1eba, 0x1c90, 0x1eba, 0x1c90, 0x1eba, 0x1c90, 0x1c95, 0x1ac4, +0x1c95, 0x1ac4, 0x1a7b, 0x1900, 0x1a7b, 0x1900, 0x17eb, 0x16c2, 0x17eb, 0x16c2, 0x14e5, +0x1409, 0x14e5, 0x1409, 0x11b4, 0x111f, 0x11b4, 0x111f, 0xed0, 0xe7c, 0xed0, 0xe7c, +0xed0, 0xe7c, 0xca2, 0xc88, 0xca2, 0xc88, 0xa98, 0xab0, 0xa98, 0xab0, 0x75d, +0x79f, 0x75d, 0x79f, 0x3ac, 0x411, 0x3ac, 0x411, 0x9e, 0x11e, 0x9e, 0x11e, +0x9e, 0x11e, 0xfdb9, 0xfe4e, 0xfdb9, 0xfe4e, 0xfac9, 0xfb6c, 0xfac9, 0xfb6c, 0xf7bc, +0xf868, 0xf7bc, 0xf868, 0xf4e2, 0xf592, 0xf4e2, 0xf592, 0xf2e4, 0xf396, 0xf2e4, 0xf396, +0xf295, 0xf346, 0xf295, 0xf346, 0xf295, 0xf346, 0xf31d, 0xf3cc, 0xf31d, 0xf3cc, 0xf38f, +0xf43e, 0xf38f, 0xf43e, 0xf3d8, 0xf487, 0xf3d8, 0xf487, 0xf35c, 0xf40e, 0xf35c, 0xf40e, +0xf395, 0xf44e, 0xf395, 0xf44e, 0xf45e, 0xf521, 0xf45e, 0xf521, 0xf45e, 0xf521, 0xf4c7, +0xf599, 0xf4c7, 0xf599, 0xf58e, 0xf674, 0xf58e, 0xf674, 0xf5cf, 0xf6ce, 0xf5cf, 0xf6ce, +0xf597, 0xf6b3, 0xf597, 0xf6b3, 0xf5f3, 0xf732, 0xf5f3, 0xf732, 0xf5f3, 0xf732, 0xf617, +0xf77b, 0xf617, 0xf77b, 0xf4d0, 0xf65d, 0xf4d0, 0xf65d, 0xf315, 0xf4cd, 0xf315, 0xf4cd, +0xf1e1, 0xf3c4, 0xf1e1, 0xf3c4, 0xf165, 0xf373, 0xf165, 0xf373, 0xf15c, 0xf394, 0xf15c, +0xf394, 0xf15c, 0xf394, 0xf0bf, 0xf31d, 0xf0bf, 0xf31d, 0xef68, 0xf1e8, 0xef68, 0xf1e8, +0xedc9, 0xf065, 0xedc9, 0xf065, 0xecad, 0xef5e, 0xecad, 0xef5e, 0xebbb, 0xee78, 0xebbb, +0xee78, 0xeaaa, 0xed6b, 0xeaaa, 0xed6b, 0xeaaa, 0xed6b, 0xea47, 0xed01, 0xea47, 0xed01, +0xea64, 0xed0d, 0xea64, 0xed0d, 0xeada, 0xed68, 0xeada, 0xed68, 0xebcb, 0xee33, 0xebcb, +0xee33, 0xed04, 0xef3a, 0xed04, 0xef3a, 0xed04, 0xef3a, 0xee82, 0xf07e, 0xee82, 0xf07e, +0xf0c3, 0xf27c, 0xf0c3, 0xf27c, 0xf369, 0xf4d5, 0xf369, 0xf4d5, 0xf59b, 0xf6b4, 0xf59b, +0xf6b4, 0xf814, 0xf8d5, 0xf814, 0xf8d5, 0xfb94, 0xfbf7, 0xfb94, 0xfbf7, 0xfb94, 0xfbf7, +0xfe93, 0xfe97, 0xfe93, 0xfe97, 0x11d, 0xc1, 0x11d, 0xc1, 0x443, 0x388, 0x443, +0x388, 0x6d6, 0x5c0, 0x6d6, 0x5c0, 0x8f0, 0x782, 0x8f0, 0x782, 0xb04, 0x944, +0xb04, 0x944, 0xb04, 0x944, 0xc99, 0xa8f, 0xc99, 0xa8f, 0xe19, 0xbcd, 0xe19, +0xbcd, 0x1075, 0xdf1, 0x1075, 0xdf1, 0x129f, 0xfed, 0x129f, 0xfed, 0x13cf, 0x10fa, +0x13cf, 0x10fa, 0x13cf, 0x10fa, 0x14b2, 0x11c5, 0x14b2, 0x11c5, 0x150c, 0x1212, 0x150c, +0x1212, 0x15ab, 0x12ae, 0x15ab, 0x12ae, 0x1646, 0x1351, 0x1646, 0x1351, 0x1675, 0x1391, +0x1675, 0x1391, 0x168b, 0x13c0, 0x168b, 0x13c0, 0x168b, 0x13c0, 0x165c, 0x13b1, 0x165c, +0x13b1, 0x1620, 0x139c, 0x1620, 0x139c, 0x1585, 0x132a, 0x1585, 0x132a, 0x14ba, 0x128e, +0x14ba, 0x128e, 0x13a2, 0x11a5, 0x13a2, 0x11a5, 0x13a2, 0x11a5, 0x1292, 0x10c5, 0x1292, +0x10c5, 0x11b7, 0x1018, 0x11b7, 0x1018, 0x1106, 0xf94, 0x1106, 0xf94, 0x10c6, 0xf7c, +0x10c6, 0xf7c, 0x1063, 0xf3e, 0x1063, 0xf3e, 0x102c, 0xf27, 0x102c, 0xf27, 0x102c, +0xf27, 0xf86, 0xe9c, 0xf86, 0xe9c, 0xe64, 0xd90, 0xe64, 0xd90, 0xdac, 0xce8, +0xdac, 0xce8, 0xc4c, 0xb93, 0xc4c, 0xb93, 0xacf, 0xa1c, 0xacf, 0xa1c, 0xa58, +0x9a7, 0xa58, 0x9a7, 0xa58, 0x9a7, 0x9fc, 0x949, 0x9fc, 0x949, 0x9da, 0x922, +0x9da, 0x922, 0xa0d, 0x950, 0xa0d, 0x950, 0x9d6, 0x911, 0x9d6, 0x911, 0x91d, +0x851, 0x91d, 0x851, 0x91d, 0x851, 0x889, 0x7b7, 0x889, 0x7b7, 0x8b4, 0x7de, +0x8b4, 0x7de, 0x82f, 0x758, 0x82f, 0x758, 0x6f9, 0x622, 0x6f9, 0x622, 0x610, +0x53f, 0x610, 0x53f, 0x515, 0x44c, 0x515, 0x44c, 0x515, 0x44c, 0x50a, 0x44e, +0x50a, 0x44e, 0x5d7, 0x52d, 0x5d7, 0x52d, 0x6a1, 0x60a, 0x6a1, 0x60a, 0x7a9, +0x729, 0x7a9, 0x729, 0x85a, 0x7f3, 0x85a, 0x7f3, 0x83c, 0x7ef, 0x83c, 0x7ef, +0x83c, 0x7ef, 0x7e5, 0x7b2, 0x7e5, 0x7b2, 0x70a, 0x6f2, 0x70a, 0x6f2, 0x584, +0x584, 0x584, 0x584, 0x46a, 0x47f, 0x46a, 0x47f, 0x3cc, 0x3f3, 0x3cc, 0x3f3, +0x3cc, 0x3f3, 0x321, 0x354, 0x321, 0x354, 0x1b1, 0x1eb, 0x1b1, 0x1eb, 0xffb9, +0xfff4, 0xffb9, 0xfff4, 0xfe16, 0xfe4b, 0xfe16, 0xfe4b, 0xfcb2, 0xfcd9, 0xfcb2, 0xfcd9, +0xfb9c, 0xfbae, 0xfb9c, 0xfbae, 0xfb9c, 0xfbae, 0xfabf, 0xfab4, 0xfabf, 0xfab4, 0xf9f4, +0xf9c5, 0xf9f4, 0xf9c5, 0xf981, 0xf927, 0xf981, 0xf927, 0xfa1c, 0xf992, 0xfa1c, 0xf992, +0xfb97, 0xfad6, 0xfb97, 0xfad6, 0xfdab, 0xfcb0, 0xfdab, 0xfcb0, 0xfdab, 0xfcb0, 0xffdc, +0xfea4, 0xffdc, 0xfea4, 0x1d6, 0x5e, 0x1d6, 0x5e, 0x49a, 0x2e2, 0x49a, 0x2e2, +0x772, 0x57a, 0x772, 0x57a, 0xa29, 0x7f3, 0xa29, 0x7f3, 0xa29, 0x7f3, 0xcdd, +0xa6c, 0xcdd, 0xa6c, 0xede, 0xc36, 0xede, 0xc36, 0x1092, 0xdb8, 0x1092, 0xdb8, +0x1284, 0xf7d, 0x1284, 0xf7d, 0x14a7, 0x117a, 0x14a7, 0x117a, 0x15ea, 0x129e, 0x15ea, +0x129e, 0x15ea, 0x129e, 0x1650, 0x12ed, 0x1650, 0x12ed, 0x166f, 0x12fc, 0x166f, 0x12fc, +0x1651, 0x12d5, 0x1651, 0x12d5, 0x1644, 0x12c5, 0x1644, 0x12c5, 0x1684, 0x130a, 0x1684, +0x130a, 0x1699, 0x1329, 0x1699, 0x1329, 0x1699, 0x1329, 0x163b, 0x12db, 0x163b, 0x12db, +0x1632, 0x12e5, 0x1632, 0x12e5, 0x15d9, 0x12a4, 0x15d9, 0x12a4, 0x14e5, 0x11cb, 0x14e5, +0x11cb, 0x14a4, 0x11a6, 0x14a4, 0x11a6, 0x14a4, 0x11a6, 0x14d7, 0x11f5, 0x14d7, 0x11f5, +0x14e1, 0x121d, 0x14e1, 0x121d, 0x156f, 0x12c8, 0x156f, 0x12c8, 0x15f1, 0x1365, 0x15f1, +0x1365, 0x15b8, 0x1346, 0x15b8, 0x1346, 0x1551, 0x12f7, 0x1551, 0x12f7, 0x1551, 0x12f7, +0x14e3, 0x129e, 0x14e3, 0x129e, 0x1494, 0x1262, 0x1494, 0x1262, 0x13f9, 0x11d7, 0x13f9, +0x11d7, 0x134a, 0x1136, 0x134a, 0x1136, 0x126b, 0x1062, 0x126b, 0x1062, 0x1156, 0xf58, +0x1156, 0xf58, 0x1156, 0xf58, 0x1121, 0xf2a, 0x1121, 0xf2a, 0x1143, 0xf54, 0x1143, +0xf54, 0x113e, 0xf56, 0x113e, 0xf56, 0x10ae, 0xecd, 0x10ae, 0xecd, 0xfa9, 0xdcf, +0xfa9, 0xdcf, 0xfa9, 0xdcf, 0xefc, 0xd2c, 0xefc, 0xd2c, 0xe4a, 0xc84, 0xe4a, +0xc84, 0xcde, 0xb25, 0xcde, 0xb25, 0xb29, 0x97f, 0xb29, 0x97f, 0x985, 0x7ee, +0x985, 0x7ee, 0x7ee, 0x66c, 0x7ee, 0x66c, 0x7ee, 0x66c, 0x6a1, 0x539, 0x6a1, +0x539, 0x52b, 0x3e0, 0x52b, 0x3e0, 0x3bf, 0x295, 0x3bf, 0x295, 0x286, 0x182, +0x286, 0x182, 0x10b, 0x30, 0x10b, 0x30, 0xff31, 0xfe83, 0xff31, 0xfe83, 0xff31, +0xfe83, 0xfd95, 0xfd18, 0xfd95, 0xfd18, 0xfc68, 0xfc1f, 0xfc68, 0xfc1f, 0xfb4e, 0xfb3c, +0xfb4e, 0xfb3c, 0xfa90, 0xfab9, 0xfa90, 0xfab9, 0xfa1e, 0xfa84, 0xfa1e, 0xfa84, 0xfa1e, +0xfa84, 0xfa29, 0xface, 0xfa29, 0xface, 0xf9f8, 0xfadf, 0xf9f8, 0xfadf, 0xf9a5, 0xfacf, +0xf9a5, 0xfacf, 0xf8a3, 0xfa12, 0xf8a3, 0xfa12, 0xf61c, 0xf7cf, 0xf61c, 0xf7cf, 0xf458, +0xf651, 0xf458, 0xf651, 0xf458, 0xf651, 0xf312, 0xf550, 0xf312, 0xf550, 0xf148, 0xf3ca, +0xf148, 0xf3ca, 0xef73, 0xf238, 0xef73, 0xf238, 0xede0, 0xf0e6, 0xede0, 0xf0e6, 0xebf8, +0xef3d, 0xebf8, 0xef3d, 0xea2a, 0xedaa, 0xea2a, 0xedaa, 0xea2a, 0xedaa, 0xe9a1, 0xed59, +0xe9a1, 0xed59, 0xe84f, 0xec3b, 0xe84f, 0xec3b, 0xe604, 0xea1f, 0xe604, 0xea1f, 0xe3e2, +0xe825, 0xe3e2, 0xe825, 0xe237, 0xe69e, 0xe237, 0xe69e, 0xe237, 0xe69e, 0xe12c, 0xe5af, +0xe12c, 0xe5af, 0xe0b9, 0xe552, 0xe0b9, 0xe552, 0xe0d9, 0xe580, 0xe0d9, 0xe580, 0xe08f, +0xe53d, 0xe08f, 0xe53d, 0xe175, 0xe622, 0xe175, 0xe622, 0xe38b, 0xe830, 0xe38b, 0xe830, +0xe38b, 0xe830, 0xe4e7, 0xe97b, 0xe4e7, 0xe97b, 0xe64c, 0xeac9, 0xe64c, 0xeac9, 0xe729, +0xeb87, 0xe729, 0xeb87, 0xe72b, 0xeb64, 0xe72b, 0xeb64, 0xe7c8, 0xebd6, 0xe7c8, 0xebd6, +0xe903, 0xece0, 0xe903, 0xece0, 0xe903, 0xece0, 0xea5a, 0xee03, 0xea5a, 0xee03, 0xeb8f, +0xef00, 0xeb8f, 0xef00, 0xec69, 0xefa0, 0xec69, 0xefa0, 0xed29, 0xf026, 0xed29, 0xf026, +0xedf8, 0xf0ba, 0xedf8, 0xf0ba, 0xedf8, 0xf0ba, 0xee60, 0xf0e8, 0xee60, 0xf0e8, 0xee1f, +0xf071, 0xee1f, 0xf071, 0xedb1, 0xefd0, 0xedb1, 0xefd0, 0xed01, 0xeef1, 0xed01, 0xeef1, +0xec47, 0xee0f, 0xec47, 0xee0f, 0xeb87, 0xed2d, 0xeb87, 0xed2d, 0xeb87, 0xed2d, 0xeaf7, +0xec81, 0xeaf7, 0xec81, 0xeb86, 0xecfd, 0xeb86, 0xecfd, 0xec73, 0xeddf, 0xec73, 0xeddf, +0xed9a, 0xef03, 0xed9a, 0xef03, 0xee1a, 0xef88, 0xee1a, 0xef88, 0xee1a, 0xef88, 0xed87, +0xef02, 0xed87, 0xef02, 0xed13, 0xeea2, 0xed13, 0xeea2, 0xec3b, 0xede5, 0xec3b, 0xede5, +0xeaf7, 0xecc2, 0xeaf7, 0xecc2, 0xe981, 0xeb73, 0xe981, 0xeb73, 0xe7f4, 0xea0f, 0xe7f4, +0xea0f, 0xe7f4, 0xea0f, 0xe638, 0xe880, 0xe638, 0xe880, 0xe4f1, 0xe767, 0xe4f1, 0xe767, +0xe36d, 0xe612, 0xe36d, 0xe612, 0xe0f4, 0xe3c7, 0xe0f4, 0xe3c7, 0xdf33, 0xe233, 0xdf33, +0xe233, 0xdd8b, 0xe0b5, 0xdd8b, 0xe0b5, 0xdd8b, 0xe0b5, 0xdbc2, 0xdf10, 0xdbc2, 0xdf10, +0xda6e, 0xdddc, 0xda6e, 0xdddc, 0xd982, 0xdd0b, 0xd982, 0xdd0b, 0xd829, 0xdbc8, 0xd829, +0xdbc8, 0xd704, 0xdab1, 0xd704, 0xdab1, 0xd704, 0xdab1, 0xd6d3, 0xda87, 0xd6d3, 0xda87, +0xd582, 0xd936, 0xd582, 0xd936, 0xd41f, 0xd7ce, 0xd41f, 0xd7ce, 0xd379, 0xd71c, 0xd379, +0xd71c, 0xd32e, 0xd6bf, 0xd32e, 0xd6bf, 0xd375, 0xd6ed, 0xd375, 0xd6ed, 0xd375, 0xd6ed, +0xd42a, 0xd786, 0xd42a, 0xd786, 0xd567, 0xd8a2, 0xd567, 0xd8a2, 0xd664, 0xd97c, 0xd664, +0xd97c, 0xd7d3, 0xdac3, 0xd7d3, 0xdac3, 0xd9e9, 0xdcb2, 0xd9e9, 0xdcb2, 0xdc14, 0xdeb2, +0xdc14, 0xdeb2, 0xdc14, 0xdeb2, 0xde6e, 0xe0e2, 0xde6e, 0xe0e2, 0xe170, 0xe3b9, 0xe170, +0xe3b9, 0xe3d8, 0xe5f7, 0xe3d8, 0xe5f7, 0xe532, 0xe728, 0xe532, 0xe728, 0xe734, 0xe901, +0xe734, 0xe901, 0xe734, 0xe901, 0xe8af, 0xea53, 0xe8af, 0xea53, 0xea41, 0xebbd, 0xea41, +0xebbd, 0xecc0, 0xee14, 0xecc0, 0xee14, 0xeed7, 0xf002, 0xeed7, 0xf002, 0xf0e1, 0xf1e4, +0xf0e1, 0xf1e4, 0xf2a1, 0xf379, 0xf2a1, 0xf379, 0xf2a1, 0xf379, 0xf41f, 0xf4cb, 0xf41f, +0xf4cb, 0xf622, 0xf6a0, 0xf622, 0xf6a0, 0xf80d, 0xf858, 0xf80d, 0xf858, 0xf991, 0xf9a7, +0xf991, 0xf9a7, 0xfb64, 0xfb41, 0xfb64, 0xfb41, 0xfd7d, 0xfd1c, 0xfd7d, 0xfd1c, 0xfd7d, +0xfd1c, 0x5e, 0xffba, 0x5e, 0xffba, 0x3de, 0x2f2, 0x3de, 0x2f2, 0x6f9, 0x5c1, +0x6f9, 0x5c1, 0x9f4, 0x86b, 0x9f4, 0x86b, 0xd15, 0xb37, 0xd15, 0xb37, 0xd15, +0xb37, 0x1087, 0xe4f, 0x1087, 0xe4f, 0x141b, 0x1188, 0x141b, 0x1188, 0x174a, 0x1459, +0x174a, 0x1459, 0x1a20, 0x16d1, 0x1a20, 0x16d1, 0x1d8f, 0x19e2, 0x1d8f, 0x19e2, 0x2164, +0x1d5b, 0x2164, 0x1d5b, 0x2164, 0x1d5b, 0x24ef, 0x208e, 0x24ef, 0x208e, 0x27b3, 0x22fd, +0x27b3, 0x22fd, 0x294f, 0x244c, 0x294f, 0x244c, 0x2acb, 0x2582, 0x2acb, 0x2582, 0x2c30, +0x26a9, 0x2c30, 0x26a9, 0x2d19, 0x2760, 0x2d19, 0x2760, 0x2d19, 0x2760, 0x2dd4, 0x27f3, +0x2dd4, 0x27f3, 0x2ec6, 0x28c9, 0x2ec6, 0x28c9, 0x2f8c, 0x2981, 0x2f8c, 0x2981, 0x3076, +0x2a6a, 0x3076, 0x2a6a, 0x318b, 0x2b8b, 0x318b, 0x2b8b, 0x318b, 0x2b8b, 0x313d, 0x2b57, +0x313d, 0x2b57, 0x307a, 0x2abb, 0x307a, 0x2abb, 0x2ffd, 0x2a72, 0x2ffd, 0x2a72, 0x2f32, +0x29e7, 0x2f32, 0x29e7, 0x2e0c, 0x290b, 0x2e0c, 0x290b, 0x2d2a, 0x287e, 0x2d2a, 0x287e, +0x2d2a, 0x287e, 0x2c10, 0x27c1, 0x2c10, 0x27c1, 0x2a53, 0x2667, 0x2a53, 0x2667, 0x290e, +0x258b, 0x290e, 0x258b, 0x2747, 0x242f, 0x2747, 0x242f, 0x24ff, 0x2254, 0x24ff, 0x2254, +0x2225, 0x1fe7, 0x2225, 0x1fe7, 0x2225, 0x1fe7, 0x1e93, 0x1cc0, 0x1e93, 0x1cc0, 0x1b34, +0x19c8, 0x1b34, 0x19c8, 0x181c, 0x1713, 0x181c, 0x1713, 0x15bf, 0x1513, 0x15bf, 0x1513, +0x133c, 0x12e5, 0x133c, 0x12e5, 0x133c, 0x12e5, 0x106b, 0x1061, 0x106b, 0x1061, 0xe23, +0xe5e, 0xe23, 0xe5e, 0xb9d, 0xc14, 0xb9d, 0xc14, 0x7ab, 0x855, 0x7ab, 0x855, +0x377, 0x44c, 0x377, 0x44c, 0xffa6, 0x9c, 0xffa6, 0x9c, 0xffa6, 0x9c, 0xfc31, +0xfd42, 0xfc31, 0xfd42, 0xfa0b, 0xfb30, 0xfa0b, 0xfb30, 0xf7e5, 0xf917, 0xf7e5, 0xf917, +0xf610, 0xf74b, 0xf610, 0xf74b, 0xf55d, 0xf69d, 0xf55d, 0xf69d, 0xf50c, 0xf64e, 0xf50c, +0xf64e, 0xf50c, 0xf64e, 0xf4fa, 0xf63e, 0xf4fa, 0xf63e, 0xf4cf, 0xf615, 0xf4cf, 0xf615, +0xf48b, 0xf5d3, 0xf48b, 0xf5d3, 0xf4c0, 0xf60c, 0xf4c0, 0xf60c, 0xf529, 0xf67d, 0xf529, +0xf67d, 0xf529, 0xf67d, 0xf4e8, 0xf647, 0xf4e8, 0xf647, 0xf514, 0xf681, 0xf514, 0xf681, +0xf5a9, 0xf728, 0xf5a9, 0xf728, 0xf603, 0xf799, 0xf603, 0xf799, 0xf636, 0xf7e7, 0xf636, +0xf7e7, 0xf605, 0xf7d4, 0xf605, 0xf7d4, 0xf605, 0xf7d4, 0xf581, 0xf770, 0xf581, 0xf770, +0xf435, 0xf647, 0xf435, 0xf647, 0xf304, 0xf539, 0xf304, 0xf539, 0xf204, 0xf45c, 0xf204, +0xf45c, 0xf0b1, 0xf32a, 0xf0b1, 0xf32a, 0xef6c, 0xf204, 0xef6c, 0xf204, 0xef6c, 0xf204, +0xee3d, 0xf0f0, 0xee3d, 0xf0f0, 0xed50, 0xf019, 0xed50, 0xf019, 0xecc5, 0xef9c, 0xecc5, +0xef9c, 0xec1b, 0xeef9, 0xec1b, 0xeef9, 0xea8d, 0xed6a, 0xea8d, 0xed6a, 0xea8d, 0xed6a, +0xe94c, 0xec20, 0xe94c, 0xec20, 0xe90d, 0xebcc, 0xe90d, 0xebcc, 0xe8e6, 0xeb88, 0xe8e6, +0xeb88, 0xe912, 0xeb8b, 0xe912, 0xeb8b, 0xea32, 0xec79, 0xea32, 0xec79, 0xeb6a, 0xed74, +0xeb6a, 0xed74, 0xeb6a, 0xed74, 0xecda, 0xeea0, 0xecda, 0xeea0, 0xef73, 0xf0ed, 0xef73, +0xf0ed, 0xf1e3, 0xf308, 0xf1e3, 0xf308, 0xf389, 0xf454, 0xf389, 0xf454, 0xf51b, 0xf588, +0xf51b, 0xf588, 0xf747, 0xf754, 0xf747, 0xf754, 0xf747, 0xf754, 0xf9bb, 0xf965, 0xf9bb, +0xf965, 0xfcba, 0xfc02, 0xfcba, 0xfc02, 0x3, 0xfeeb, 0x3, 0xfeeb, 0x281, 0x10d, +0x281, 0x10d, 0x540, 0x374, 0x540, 0x374, 0x540, 0x374, 0x7dc, 0x5bf, 0x7dc, +0x5bf, 0xa20, 0x7b9, 0xa20, 0x7b9, 0xc4e, 0x9a5, 0xc4e, 0x9a5, 0xe4e, 0xb6d, +0xe4e, 0xb6d, 0xff1, 0xce2, 0xff1, 0xce2, 0x112a, 0xdf7, 0x112a, 0xdf7, 0x112a, +0xdf7, 0x1289, 0xf3d, 0x1289, 0xf3d, 0x1322, 0xfc8, 0x1322, 0xfc8, 0x13dd, 0x107e, +0x13dd, 0x107e, 0x156d, 0x1213, 0x156d, 0x1213, 0x16ef, 0x13a3, 0x16ef, 0x13a3, 0x16ef, +0x13a3, 0x1747, 0x1412, 0x1747, 0x1412, 0x16b6, 0x139f, 0x16b6, 0x139f, 0x168d, 0x139a, +0x168d, 0x139a, 0x15fc, 0x1331, 0x15fc, 0x1331, 0x15c0, 0x1323, 0x15c0, 0x1323, 0x1513, +0x12a5, 0x1513, 0x12a5, 0x1513, 0x12a5, 0x135a, 0x111d, 0x135a, 0x111d, 0x129f, 0x1093, +0x129f, 0x1093, 0x127d, 0x10a1, 0x127d, 0x10a1, 0x12af, 0x1102, 0x12af, 0x1102, 0x12c6, +0x1145, 0x12c6, 0x1145, 0x11d6, 0x107e, 0x11d6, 0x107e, 0x11d6, 0x107e, 0x108a, 0xf55, +0x108a, 0xf55, 0x101f, 0xf0b, 0x101f, 0xf0b, 0x101c, 0xf22, 0x101c, 0xf22, 0xf8d, +0xeaa, 0xf8d, 0xeaa, 0xf20, 0xe4d, 0xf20, 0xe4d, 0xf20, 0xe4d, 0xead, 0xde6, +0xead, 0xde6, 0xe27, 0xd68, 0xe27, 0xd68, 0xdf0, 0xd33, 0xdf0, 0xd33, 0xdbb, +0xcfe, 0xdbb, 0xcfe, 0xd65, 0xca3, 0xd65, 0xca3, 0xcb9, 0xbf1, 0xcb9, 0xbf1, +0xcb9, 0xbf1, 0xc2d, 0xb5c, 0xc2d, 0xb5c, 0xba0, 0xac4, 0xba0, 0xac4, 0xb0b, +0xa24, 0xb0b, 0xa24, 0xad6, 0x9e3, 0xad6, 0x9e3, 0xa60, 0x962, 0xa60, 0x962, +0xa7f, 0x976, 0xa7f, 0x976, 0xa7f, 0x976, 0xb42, 0xa2f, 0xb42, 0xa2f, 0xbf7, +0xadc, 0xbf7, 0xadc, 0xc8d, 0xb6b, 0xc8d, 0xb6b, 0xc73, 0xb4c, 0xc73, 0xb4c, +0xbe9, 0xabf, 0xbe9, 0xabf, 0xbe9, 0xabf, 0xab0, 0x985, 0xab0, 0x985, 0x99d, +0x872, 0x99d, 0x872, 0x935, 0x80c, 0x935, 0x80c, 0x8b0, 0x78a, 0x8b0, 0x78a, +0x7ff, 0x6dc, 0x7ff, 0x6dc, 0x738, 0x619, 0x738, 0x619, 0x738, 0x619, 0x65c, +0x540, 0x65c, 0x540, 0x4b2, 0x399, 0x4b2, 0x399, 0x33f, 0x227, 0x33f, 0x227, +0x1c3, 0xa9, 0x1c3, 0xa9, 0xffcc, 0xfeaf, 0xffcc, 0xfeaf, 0xfe50, 0xfd2d, 0xfe50, +0xfd2d, 0xfe50, 0xfd2d, 0xfcb2, 0xfb86, 0xfcb2, 0xfb86, 0xfcad, 0xfb75, 0xfcad, 0xfb75, +0xfe26, 0xfcdd, 0xfe26, 0xfcdd, 0xff22, 0xfdc5, 0xff22, 0xfdc5, 0xffe8, 0xfe73, 0xffe8, +0xfe73, 0xffe8, 0xfe73, 0xc9, 0xff38, 0xc9, 0xff38, 0x237, 0x88, 0x237, 0x88, +0x471, 0x29f, 0x471, 0x29f, 0x718, 0x522, 0x718, 0x522, 0x90a, 0x6ee, 0x90a, +0x6ee, 0xa44, 0x801, 0xa44, 0x801, 0xa44, 0x801, 0xba1, 0x937, 0xba1, 0x937, +0xd54, 0xac2, 0xd54, 0xac2, 0xee2, 0xc2b, 0xee2, 0xc2b, 0x100c, 0xd31, 0x100c, +0xd31, 0x112e, 0xe33, 0x112e, 0xe33, 0x11f9, 0xee2, 0x11f9, 0xee2, 0x11f9, 0xee2, +0x12ca, 0xf9c, 0x12ca, 0xf9c, 0x1395, 0x1056, 0x1395, 0x1056, 0x13ec, 0x10a1, 0x13ec, +0x10a1, 0x1492, 0x1143, 0x1492, 0x1143, 0x15b1, 0x1265, 0x15b1, 0x1265, 0x15b1, 0x1265, +0x1635, 0x12f4, 0x1635, 0x12f4, 0x15c8, 0x1299, 0x15c8, 0x1299, 0x14aa, 0x1196, 0x14aa, +0x1196, 0x130c, 0x1019, 0x130c, 0x1019, 0x123f, 0xf74, 0x123f, 0xf74, 0x120e, 0xf72, +0x120e, 0xf72, 0x120e, 0xf72, 0x1207, 0xf9f, 0x1207, 0xf9f, 0x1217, 0xfe8, 0x1217, +0xfe8, 0x11c0, 0xfcd, 0x11c0, 0xfcd, 0x11c6, 0x1012, 0x11c6, 0x1012, 0x1164, 0xff1, +0x1164, 0xff1, 0x10ab, 0xf7a, 0x10ab, 0xf7a, 0x10ab, 0xf7a, 0xfbf, 0xece, 0xfbf, +0xece, 0xdda, 0xd28, 0xdda, 0xd28, 0xc64, 0xbed, 0xc64, 0xbed, 0xb30, 0xaf0, +0xb30, 0xaf0, 0xa02, 0x9f4, 0xa02, 0x9f4, 0xa02, 0x9f4, 0x99d, 0x9bb, 0x99d, +0x9bb, 0x959, 0x99e, 0x959, 0x99e, 0x938, 0x99d, 0x938, 0x99d, 0x95f, 0x9de, +0x95f, 0x9de, 0x946, 0x9d7, 0x946, 0x9d7, 0x8c5, 0x961, 0x8c5, 0x961, 0x8c5, +0x961, 0x80c, 0x8ae, 0x80c, 0x8ae, 0x6eb, 0x78c, 0x6eb, 0x78c, 0x58e, 0x62a, +0x58e, 0x62a, 0x44f, 0x4e3, 0x44f, 0x4e3, 0x29e, 0x326, 0x29e, 0x326, 0xe9, +0x163, 0xe9, 0x163, 0xe9, 0x163, 0xff3f, 0xffab, 0xff3f, 0xffab, 0xfdd9, 0xfe38, +0xfdd9, 0xfe38, 0xfd07, 0xfd5b, 0xfd07, 0xfd5b, 0xfb71, 0xfbbc, 0xfb71, 0xfbbc, 0xf99f, +0xf9e5, 0xf99f, 0xf9e5, 0xf99f, 0xf9e5, 0xf7b4, 0xf7fb, 0xf7b4, 0xf7fb, 0xf662, 0xf6af, +0xf662, 0xf6af, 0xf5d4, 0xf62f, 0xf5d4, 0xf62f, 0xf46d, 0xf4dd, 0xf46d, 0xf4dd, 0xf3c1, +0xf44c, 0xf3c1, 0xf44c, 0xf413, 0xf4c1, 0xf413, 0xf4c1, 0xf413, 0xf4c1, 0xf4b9, 0xf592, +0xf4b9, 0xf592, 0xf523, 0xf62d, 0xf523, 0xf62d, 0xf50c, 0xf64e, 0xf50c, 0xf64e, 0xf46a, +0xf5ea, 0xf46a, 0xf5ea, 0xf2a7, 0xf469, 0xf2a7, 0xf469, 0xf11e, 0xf326, 0xf11e, 0xf326, +0xf11e, 0xf326, 0xef53, 0xf1a4, 0xef53, 0xf1a4, 0xed6e, 0xf009, 0xed6e, 0xf009, 0xec5e, +0xef42, 0xec5e, 0xef42, 0xebdf, 0xef0b, 0xebdf, 0xef0b, 0xeb05, 0xee77, 0xeb05, 0xee77, +0xeb05, 0xee77, 0xe970, 0xed23, 0xe970, 0xed23, 0xe863, 0xec52, 0xe863, 0xec52, 0xe686, +0xeaab, 0xe686, 0xeaab, 0xe4c7, 0xe91a, 0xe4c7, 0xe91a, 0xe414, 0xe88d, 0xe414, 0xe88d, +0xe2dd, 0xe773, 0xe2dd, 0xe773, 0xe2dd, 0xe773, 0xe234, 0xe6de, 0xe234, 0xe6de, 0xe2c1, +0xe776, 0xe2c1, 0xe776, 0xe400, 0xe8b6, 0xe400, 0xe8b6, 0xe538, 0xe9e5, 0xe538, 0xe9e5, +0xe675, 0xeb12, 0xe675, 0xeb12, 0xe78e, 0xec13, 0xe78e, 0xec13, 0xe78e, 0xec13, 0xe871, +0xecd6, 0xe871, 0xecd6, 0xe948, 0xed87, 0xe948, 0xed87, 0xe9d0, 0xede3, 0xe9d0, 0xede3, +0xeac8, 0xeeab, 0xeac8, 0xeeab, 0xec76, 0xf027, 0xec76, 0xf027, 0xec76, 0xf027, 0xee81, +0xf1fe, 0xee81, 0xf1fe, 0xf045, 0xf38e, 0xf045, 0xf38e, 0xf1c6, 0xf4dc, 0xf1c6, 0xf4dc, +0xf2ea, 0xf5ce, 0xf2ea, 0xf5ce, 0xf315, 0xf5cb, 0xf315, 0xf5cb, 0xf365, 0xf5f2, 0xf365, +0xf5f2, 0xf365, 0xf5f2, 0xf3f3, 0xf65b, 0xf3f3, 0xf65b, 0xf3bc, 0xf605, 0xf3bc, 0xf605, +0xf359, 0xf589, 0xf359, 0xf589, 0xf29d, 0xf4bc, 0xf29d, 0xf4bc, 0xf1c3, 0xf3d6, 0xf1c3, +0xf3d6, 0xf1c3, 0xf3d6, 0xf206, 0xf415, 0xf206, 0xf415, 0xf2d9, 0xf4ea, 0xf2d9, 0xf4ea, +0xf35f, 0xf579, 0xf35f, 0xf579, 0xf34a, 0xf573, 0xf34a, 0xf573, 0xf2ed, 0xf529, 0xf2ed, +0xf529, 0xf296, 0xf4ea, 0xf296, 0xf4ea, 0xf296, 0xf4ea, 0xf263, 0xf4d4, 0xf263, 0xf4d4, +0xf183, 0xf412, 0xf183, 0xf412, 0xefce, 0xf27f, 0xefce, 0xf27f, 0xee8f, 0xf161, 0xee8f, +0xf161, 0xed5f, 0xf053, 0xed5f, 0xf053, 0xec46, 0xef5b, 0xec46, 0xef5b, 0xec46, 0xef5b, +0xead8, 0xee0c, 0xead8, 0xee0c, 0xe906, 0xec57, 0xe906, 0xec57, 0xe6f5, 0xea60, 0xe6f5, +0xea60, 0xe51b, 0xe89c, 0xe51b, 0xe89c, 0xe47a, 0xe80d, 0xe47a, 0xe80d, 0xe47a, 0xe80d, +0xe35d, 0xe6fe, 0xe35d, 0xe6fe, 0xe23c, 0xe5e5, 0xe23c, 0xe5e5, 0xe164, 0xe511, 0xe164, +0xe511, 0xe04b, 0xe3f7, 0xe04b, 0xe3f7, 0xdf42, 0xe2e9, 0xdf42, 0xe2e9, 0xddc9, 0xe166, +0xddc9, 0xe166, 0xddc9, 0xe166, 0xdbd4, 0xdf63, 0xdbd4, 0xdf63, 0xd935, 0xdcb2, 0xd935, +0xdcb2, 0xd793, 0xdafb, 0xd793, 0xdafb, 0xd74a, 0xda9a, 0xd74a, 0xda9a, 0xd719, 0xda4e, +0xd719, 0xda4e, 0xd700, 0xda19, 0xd700, 0xda19, 0xd700, 0xda19, 0xd7b4, 0xdaaf, 0xd7b4, +0xdaaf, 0xd8c2, 0xdb9e, 0xd8c2, 0xdb9e, 0xd973, 0xdc30, 0xd973, 0xdc30, 0xdaf5, 0xdd92, +0xdaf5, 0xdd92, 0xdc58, 0xded4, 0xdc58, 0xded4, 0xdc58, 0xded4, 0xdd1c, 0xdf79, 0xdd1c, +0xdf79, 0xde9a, 0xe0d6, 0xde9a, 0xe0d6, 0xe108, 0xe324, 0xe108, 0xe324, 0xe42f, 0xe62b, +0xe42f, 0xe62b, 0xe7a6, 0xe981, 0xe7a6, 0xe981, 0xea76, 0xec30, 0xea76, 0xec30, 0xea76, +0xec30, 0xec70, 0xee08, 0xec70, 0xee08, 0xee15, 0xef8a, 0xee15, 0xef8a, 0xef1e, 0xf06e, +0xef1e, 0xf06e, 0xf071, 0xf19b, 0xf071, 0xf19b, 0xf203, 0xf303, 0xf203, 0xf303, 0xf320, +0xf3f4, 0xf320, 0xf3f4, 0xf320, 0xf3f4, 0xf477, 0xf51c, 0xf477, 0xf51c, 0xf645, 0xf6b7, +0xf645, 0xf6b7, 0xf85b, 0xf897, 0xf85b, 0xf897, 0xfa54, 0xfa55, 0xfa54, 0xfa55, 0xfc37, +0xfbfb, 0xfc37, 0xfbfb, 0xfc37, 0xfbfb, 0xfe19, 0xfd9b, 0xfe19, 0xfd9b, 0x5, 0xff41, +0x5, 0xff41, 0x210, 0x103, 0x210, 0x103, 0x4ec, 0x395, 0x4ec, 0x395, 0x802, +0x65c, 0x802, 0x65c, 0xa4e, 0x858, 0xa4e, 0x858, 0xa4e, 0x858, 0xcda, 0xa94, +0xcda, 0xa94, 0xf84, 0xced, 0xf84, 0xced, 0x1237, 0xf50, 0x1237, 0xf50, 0x15c3, +0x128d, 0x15c3, 0x128d, 0x19a2, 0x1620, 0x19a2, 0x1620, 0x1cbc, 0x18f1, 0x1cbc, 0x18f1, +0x1cbc, 0x18f1, 0x1fa0, 0x1b91, 0x1fa0, 0x1b91, 0x226a, 0x1e1c, 0x226a, 0x1e1c, 0x2461, +0x1fdb, 0x2461, 0x1fdb, 0x2632, 0x217b, 0x2632, 0x217b, 0x2774, 0x2294, 0x2774, 0x2294, +0x2774, 0x2294, 0x27fa, 0x22fa, 0x27fa, 0x22fa, 0x28d0, 0x23b9, 0x28d0, 0x23b9, 0x29c3, +0x24a0, 0x29c3, 0x24a0, 0x2a44, 0x251f, 0x2a44, 0x251f, 0x2ae8, 0x25ca, 0x2ae8, 0x25ca, +0x2af4, 0x25e9, 0x2af4, 0x25e9, 0x2af4, 0x25e9, 0x2a4c, 0x255e, 0x2a4c, 0x255e, 0x2a55, +0x258d, 0x2a55, 0x258d, 0x29de, 0x2545, 0x29de, 0x2545, 0x28f3, 0x2493, 0x28f3, 0x2493, +0x2858, 0x2439, 0x2858, 0x2439, 0x278b, 0x23b4, 0x278b, 0x23b4, 0x278b, 0x23b4, 0x2679, +0x22f0, 0x2679, 0x22f0, 0x24ea, 0x21b5, 0x24ea, 0x21b5, 0x2318, 0x203a, 0x2318, 0x203a, +0x212e, 0x1eaa, 0x212e, 0x1eaa, 0x1efb, 0x1cd3, 0x1efb, 0x1cd3, 0x1efb, 0x1cd3, 0x1c55, +0x1a8a, 0x1c55, 0x1a8a, 0x19df, 0x186f, 0x19df, 0x186f, 0x1736, 0x161f, 0x1736, 0x161f, +0x1456, 0x1394, 0x1456, 0x1394, 0x1287, 0x1216, 0x1287, 0x1216, 0x1107, 0x10e3, 0x1107, +0x10e3, 0x1107, 0x10e3, 0xf21, 0xf43, 0xf21, 0xf43, 0xd08, 0xd6a, 0xd08, 0xd6a, +0x9b6, 0xa4f, 0x9b6, 0xa4f, 0x576, 0x641, 0x576, 0x641, 0x27b, 0x370, 0x27b, +0x370, 0xffc4, 0xda, 0xffc4, 0xda, 0xffc4, 0xda, 0xfce1, 0xfe12, 0xfce1, 0xfe12, +0xfa96, 0xfbdb, 0xfa96, 0xfbdb, 0xf8f0, 0xfa42, 0xf8f0, 0xfa42, 0xf899, 0xf9f3, 0xf899, +0xf9f3, 0xf793, 0xf8f1, 0xf793, 0xf8f1, 0xf793, 0xf8f1, 0xf678, 0xf7d4, 0xf678, 0xf7d4, +0xf5fd, 0xf755, 0xf5fd, 0xf755, 0xf5e8, 0xf73c, 0xf5e8, 0xf73c, 0xf6e5, 0xf832, 0xf6e5, +0xf832, 0xf778, 0xf8be, 0xf778, 0xf8be, 0xf81f, 0xf960, 0xf81f, 0xf960, 0xf81f, 0xf960, +0xf86d, 0xf9aa, 0xf86d, 0xf9aa, 0xf8e6, 0xfa22, 0xf8e6, 0xfa22, 0xf9cc, 0xfb09, 0xf9cc, +0xfb09, 0xfa5a, 0xfb9d, 0xfa5a, 0xfb9d, 0xfa74, 0xfbc0, 0xfa74, 0xfbc0, 0xf946, 0xfa9f, +0xf946, 0xfa9f, 0xf946, 0xfa9f, 0xf88c, 0xf9f6, 0xf88c, 0xf9f6, 0xf77e, 0xf8fd, 0xf77e, +0xf8fd, 0xf69e, 0xf834, 0xf69e, 0xf834, 0xf621, 0xf7d0, 0xf621, 0xf7d0, 0xf521, 0xf6eb, +0xf521, 0xf6eb, 0xf521, 0xf6eb, 0xf4bf, 0xf6a3, 0xf4bf, 0xf6a3, 0xf3be, 0xf5bc, 0xf3be, +0xf5bc, 0xf2e2, 0xf4f7, 0xf2e2, 0xf4f7, 0xf0fd, 0xf326, 0xf0fd, 0xf326, 0xeeb3, 0xf0eb, +0xeeb3, 0xf0eb, 0xed14, 0xef55, 0xed14, 0xef55, 0xed14, 0xef55, 0xeb34, 0xed77, 0xeb34, +0xed77, 0xeb0e, 0xed4b, 0xeb0e, 0xed4b, 0xeb2c, 0xed5a, 0xeb2c, 0xed5a, 0xec05, 0xee1a, +0xec05, 0xee1a, 0xed6f, 0xef62, 0xed6f, 0xef62, 0xee2d, 0xeff3, 0xee2d, 0xeff3, 0xee2d, +0xeff3, 0xef46, 0xf0d5, 0xef46, 0xf0d5, 0xf056, 0xf1a4, 0xf056, 0xf1a4, 0xf1f0, 0xf2f4, +0xf1f0, 0xf2f4, 0xf375, 0xf427, 0xf375, 0xf427, 0xf5e3, 0xf63c, 0xf5e3, 0xf63c, 0xf5e3, +0xf63c, 0xf903, 0xf8fe, 0xf903, 0xf8fe, 0xfbcf, 0xfb66, 0xfbcf, 0xfb66, 0xff58, 0xfe8a, +0xff58, 0xfe8a, 0x23c, 0x108, 0x23c, 0x108, 0x53c, 0x3a3, 0x53c, 0x3a3, 0x81b, +0x621, 0x81b, 0x621, 0x81b, 0x621, 0x9a8, 0x752, 0x9a8, 0x752, 0xaf3, 0x847, +0xaf3, 0x847, 0xbea, 0x8f2, 0xbea, 0x8f2, 0xdb0, 0xa74, 0xdb0, 0xa74, 0xfa2, +0xc2e, 0xfa2, 0xc2e, 0xfa2, 0xc2e, 0x10f3, 0xd52, 0x10f3, 0xd52, 0x120f, 0xe4f, +0x120f, 0xe4f, 0x1254, 0xe81, 0x1254, 0xe81, 0x12db, 0xf02, 0x12db, 0xf02, 0x138b, +0xfb9, 0x138b, 0xfb9, 0x1429, 0x106b, 0x1429, 0x106b, 0x1429, 0x106b, 0x1464, 0x10c3, +0x1464, 0x10c3, 0x1425, 0x10ac, 0x1425, 0x10ac, 0x1406, 0x10bd, 0x1406, 0x10bd, 0x1362, +0x1050, 0x1362, 0x1050, 0x12fc, 0x1026, 0x12fc, 0x1026, 0x11f2, 0xf5c, 0x11f2, 0xf5c, +0x11f2, 0xf5c, 0x1105, 0xeaf, 0x1105, 0xeaf, 0x1108, 0xef2, 0x1108, 0xef2, 0x109f, +0xec7, 0x109f, 0xec7, 0x1059, 0xebb, 0x1059, 0xebb, 0xf9e, 0xe34, 0xf9e, 0xe34, +0xf9e, 0xe34, 0xf15, 0xdd9, 0xf15, 0xdd9, 0xf2b, 0xe15, 0xf2b, 0xe15, 0xf2d, +0xe35, 0xf2d, 0xe35, 0xecb, 0xde7, 0xecb, 0xde7, 0xde9, 0xd11, 0xde9, 0xd11, +0xd3e, 0xc6a, 0xd3e, 0xc6a, 0xd3e, 0xc6a, 0xc9c, 0xbc3, 0xc9c, 0xbc3, 0xbda, +0xaf5, 0xbda, 0xaf5, 0xaa9, 0x9b2, 0xaa9, 0x9b2, 0x961, 0x852, 0x961, 0x852, +0x895, 0x76a, 0x895, 0x76a, 0x7d1, 0x687, 0x7d1, 0x687, 0x7d1, 0x687, 0x6b1, +0x548, 0x6b1, 0x548, 0x66f, 0x4e7, 0x66f, 0x4e7, 0x6a3, 0x4fe, 0x6a3, 0x4fe, +0x703, 0x544, 0x703, 0x544, 0x811, 0x63c, 0x811, 0x63c, 0x811, 0x63c, 0x7f1, +0x60c, 0x7f1, 0x60c, 0x7e7, 0x5f8, 0x7e7, 0x5f8, 0x7d5, 0x5e2, 0x7d5, 0x5e2, +0x7de, 0x5ef, 0x7de, 0x5ef, 0x8eb, 0x706, 0x8eb, 0x706, 0x95b, 0x787, 0x95b, +0x787, 0x95b, 0x787, 0x932, 0x774, 0x932, 0x774, 0x868, 0x6c6, 0x868, 0x6c6, +0x817, 0x694, 0x817, 0x694, 0x758, 0x5f8, 0x758, 0x5f8, 0x624, 0x4e8, 0x624, +0x4e8, 0x468, 0x350, 0x468, 0x350, 0x468, 0x350, 0x258, 0x163, 0x258, 0x163, +0x184, 0xb0, 0x184, 0xb0, 0x25, 0xff6d, 0x25, 0xff6d, 0xff23, 0xfe81, 0xff23, +0xfe81, 0xfda0, 0xfd0e, 0xfda0, 0xfd0e, 0xfda0, 0xfd0e, 0xfc62, 0xfbda, 0xfc62, 0xfbda, +0xfc79, 0xfbf1, 0xfc79, 0xfbf1, 0xfcce, 0xfc3e, 0xfcce, 0xfc3e, 0xfe05, 0xfd64, 0xfe05, +0xfd64, 0xfdea, 0xfd2f, 0xfdea, 0xfd2f, 0xfebe, 0xfde1, 0xfebe, 0xfde1, 0xfebe, 0xfde1, +0xe2, 0xffdc, 0xe2, 0xffdc, 0x28f, 0x158, 0x28f, 0x158, 0x4b1, 0x344, 0x4b1, +0x344, 0x689, 0x4e3, 0x689, 0x4e3, 0x854, 0x671, 0x854, 0x671, 0xa08, 0x7e6, +0xa08, 0x7e6, 0xa08, 0x7e6, 0xcad, 0xa4e, 0xcad, 0xa4e, 0xea6, 0xc0b, 0xea6, +0xc0b, 0xf5f, 0xc8c, 0xf5f, 0xc8c, 0x10ec, 0xde6, 0x10ec, 0xde6, 0x11db, 0xea9, +0x11db, 0xea9, 0x11db, 0xea9, 0x1353, 0xffd, 0x1353, 0xffd, 0x15a7, 0x1235, 0x15a7, +0x1235, 0x16ba, 0x1336, 0x16ba, 0x1336, 0x172b, 0x139f, 0x172b, 0x139f, 0x17aa, 0x1420, +0x17aa, 0x1420, 0x183a, 0x14bc, 0x183a, 0x14bc, 0x183a, 0x14bc, 0x1841, 0x14da, 0x1841, +0x14da, 0x17cc, 0x1485, 0x17cc, 0x1485, 0x17b3, 0x1493, 0x17b3, 0x1493, 0x1722, 0x1433, +0x1722, 0x1433, 0x16c5, 0x140c, 0x16c5, 0x140c, 0x16f5, 0x1477, 0x16f5, 0x1477, 0x16f5, +0x1477, 0x164d, 0x140e, 0x164d, 0x140e, 0x15e7, 0x13ea, 0x15e7, 0x13ea, 0x1598, 0x13dd, +0x1598, 0x13dd, 0x14bf, 0x1346, 0x14bf, 0x1346, 0x1435, 0x12fc, 0x1435, 0x12fc, 0x1435, +0x12fc, 0x1314, 0x1217, 0x1314, 0x1217, 0x10f0, 0x102b, 0x10f0, 0x102b, 0xf76, 0xee4, +0xf76, 0xee4, 0xef9, 0xe93, 0xef9, 0xe93, 0xe42, 0xe02, 0xe42, 0xe02, 0xdf9, +0xdd8, 0xdf9, 0xdd8, 0xdf9, 0xdd8, 0xe38, 0xe2f, 0xe38, 0xe2f, 0xe88, 0xe91, +0xe88, 0xe91, 0xe91, 0xea4, 0xe91, 0xea4, 0xdc0, 0xdd9, 0xdc0, 0xdd9, 0xc86, +0xc9f, 0xc86, 0xc9f, 0xb5f, 0xb74, 0xb5f, 0xb74, 0xb5f, 0xb74, 0xafe, 0xb0c, +0xafe, 0xb0c, 0xa31, 0xa36, 0xa31, 0xa36, 0x926, 0x920, 0x926, 0x920, 0x84f, +0x840, 0x84f, 0x840, 0x65f, 0x647, 0x65f, 0x647, 0x65f, 0x647, 0x50b, 0x4ed, +0x50b, 0x4ed, 0x392, 0x371, 0x392, 0x371, 0x110, 0xf1, 0x110, 0xf1, 0xff2d, +0xff15, 0xff2d, 0xff15, 0xfdbb, 0xfdaf, 0xfdbb, 0xfdaf, 0xfcd7, 0xfcde, 0xfcd7, 0xfcde, +0xfcd7, 0xfcde, 0xfbf9, 0xfc19, 0xfbf9, 0xfc19, 0xfaf4, 0xfb33, 0xfaf4, 0xfb33, 0xf9c5, +0xfa2a, 0xf9c5, 0xfa2a, 0xf83d, 0xf8cf, 0xf83d, 0xf8cf, 0xf80b, 0xf8ce, 0xf80b, 0xf8ce, +0xf87c, 0xf976, 0xf87c, 0xf976, 0xf87c, 0xf976, 0xf872, 0xf9a8, 0xf872, 0xf9a8, 0xf8a3, +0xfa17, 0xf8a3, 0xfa17, 0xf809, 0xf9c0, 0xf809, 0xf9c0, 0xf71a, 0xf913, 0xf71a, 0xf913, +0xf666, 0xf8a3, 0xf666, 0xf8a3, 0xf666, 0xf8a3, 0xf502, 0xf783, 0xf502, 0xf783, 0xf2fe, +0xf5c1, 0xf2fe, 0xf5c1, 0xf060, 0xf362, 0xf060, 0xf362, 0xee54, 0xf191, 0xee54, 0xf191, +0xec95, 0xf00a, 0xec95, 0xf00a, 0xea7b, 0xee21, 0xea7b, 0xee21, 0xea7b, 0xee21, 0xe872, +0xec44, 0xe872, 0xec44, 0xe6b3, 0xeaa9, 0xe6b3, 0xeaa9, 0xe641, 0xea55, 0xe641, 0xea55, +0xe60a, 0xea33, 0xe60a, 0xea33, 0xe5cc, 0xea02, 0xe5cc, 0xea02, 0xe585, 0xe9c1, 0xe585, +0xe9c1, 0xe585, 0xe9c1, 0xe4a1, 0xe8da, 0xe4a1, 0xe8da, 0xe44c, 0xe87a, 0xe44c, 0xe87a, +0xe436, 0xe852, 0xe436, 0xe852, 0xe438, 0xe83b, 0xe438, 0xe83b, 0xe4c1, 0xe8a4, 0xe4c1, +0xe8a4, 0xe4c1, 0xe8a4, 0xe58c, 0xe949, 0xe58c, 0xe949, 0xe6b6, 0xea49, 0xe6b6, 0xea49, +0xe880, 0xebe4, 0xe880, 0xebe4, 0xe99f, 0xecd1, 0xe99f, 0xecd1, 0xe9ec, 0xece9, 0xe9ec, +0xece9, 0xeaf8, 0xedbf, 0xeaf8, 0xedbf, 0xeaf8, 0xedbf, 0xec3d, 0xeece, 0xec3d, 0xeece, +0xedca, 0xf026, 0xedca, 0xf026, 0xef0c, 0xf135, 0xef0c, 0xf135, 0xef0c, 0xf105, 0xef0c, +0xf105, 0xef04, 0xf0d0, 0xef04, 0xf0d0, 0xef04, 0xf0d0, 0xef0f, 0xf0b2, 0xef0f, 0xf0b2, +0xef52, 0xf0d2, 0xef52, 0xf0d2, 0xef8b, 0xf0ee, 0xef8b, 0xf0ee, 0xef50, 0xf09c, 0xef50, +0xf09c, 0xefb0, 0xf0ed, 0xefb0, 0xf0ed, 0xf01b, 0xf150, 0xf01b, 0xf150, 0xf01b, 0xf150, +0xf03b, 0xf16e, 0xf03b, 0xf16e, 0xeffe, 0xf138, 0xeffe, 0xf138, 0xef3d, 0xf083, 0xef3d, +0xf083, 0xef18, 0xf073, 0xef18, 0xf073, 0xef5f, 0xf0d5, 0xef5f, 0xf0d5, 0xef73, 0xf10a, +0xef73, 0xf10a, 0xef73, 0xf10a, 0xeec0, 0xf07e, 0xeec0, 0xf07e, 0xed43, 0xef2c, 0xed43, +0xef2c, 0xeb66, 0xed7f, 0xeb66, 0xed7f, 0xe9bc, 0xec08, 0xe9bc, 0xec08, 0xe86d, 0xeaed, +0xe86d, 0xeaed, 0xe86d, 0xeaed, 0xe644, 0xe8fb, 0xe644, 0xe8fb, 0xe47b, 0xe768, 0xe47b, +0xe768, 0xe33e, 0xe660, 0xe33e, 0xe660, 0xe198, 0xe4ee, 0xe198, 0xe4ee, 0xe0a3, 0xe42a, +0xe0a3, 0xe42a, 0xe02b, 0xe3e1, 0xe02b, 0xe3e1, 0xe02b, 0xe3e1, 0xdf7f, 0xe35f, 0xdf7f, +0xe35f, 0xde86, 0xe28b, 0xde86, 0xe28b, 0xddb1, 0xe1d6, 0xddb1, 0xe1d6, 0xdcbf, 0xe0fd, +0xdcbf, 0xe0fd, 0xdb1c, 0xdf6c, 0xdb1c, 0xdf6c, 0xd93f, 0xdd9c, 0xd93f, 0xdd9c, 0xd93f, +0xdd9c, 0xd79d, 0xdbff, 0xd79d, 0xdbff, 0xd667, 0xdac7, 0xd667, 0xdac7, 0xd5a6, 0xd9fd, +0xd5a6, 0xd9fd, 0xd553, 0xd99b, 0xd553, 0xd99b, 0xd511, 0xd943, 0xd511, 0xd943, 0xd511, +0xd943, 0xd563, 0xd979, 0xd563, 0xd979, 0xd63b, 0xda2e, 0xd63b, 0xda2e, 0xd6e8, 0xdab4, +0xd6e8, 0xdab4, 0xd802, 0xdba3, 0xd802, 0xdba3, 0xd8d8, 0xdc49, 0xd8d8, 0xdc49, 0xd9bf, +0xdcfd, 0xd9bf, 0xdcfd, 0xd9bf, 0xdcfd, 0xdbfc, 0xdf05, 0xdbfc, 0xdf05, 0xdeaf, 0xe17f, +0xdeaf, 0xe17f, 0xe198, 0xe42e, 0xe198, 0xe42e, 0xe4c8, 0xe723, 0xe4c8, 0xe723, 0xe77a, +0xe99a, 0xe77a, 0xe99a, 0xe9fb, 0xebdf, 0xe9fb, 0xebdf, 0xe9fb, 0xebdf, 0xec98, 0xee40, +0xec98, 0xee40, 0xee52, 0xefbe, 0xee52, 0xefbe, 0xefcd, 0xf0fd, 0xefcd, 0xf0fd, 0xf1ea, +0xf2df, 0xf1ea, 0xf2df, 0xf400, 0xf4bb, 0xf400, 0xf4bb, 0xf400, 0xf4bb, 0xf5ff, 0xf67f, +0xf5ff, 0xf67f, 0xf762, 0xf7a7, 0xf762, 0xf7a7, 0xf8d4, 0xf8df, 0xf8d4, 0xf8df, 0xfad2, +0xfaa2, 0xfad2, 0xfaa2, 0xfce8, 0xfc7d, 0xfce8, 0xfc7d, 0xff52, 0xfeaa, 0xff52, 0xfeaa, +0xff52, 0xfeaa, 0x13d, 0x57, 0x13d, 0x57, 0x358, 0x234, 0x358, 0x234, 0x5ac, +0x448, 0x5ac, 0x448, 0x7d3, 0x62c, 0x7d3, 0x62c, 0xa6e, 0x884, 0xa6e, 0x884, +0xc68, 0xa38, 0xc68, 0xa38, 0xc68, 0xa38, 0xe4d, 0xbd7, 0xe4d, 0xbd7, 0x1127, +0xe69, 0x1127, 0xe69, 0x145c, 0x1156, 0x145c, 0x1156, 0x1734, 0x13e6, 0x1734, 0x13e6, +0x19cf, 0x1639, 0x19cf, 0x1639, 0x19cf, 0x1639, 0x1c96, 0x18ba, 0x1c96, 0x18ba, 0x1fa0, +0x1b80, 0x1fa0, 0x1b80, 0x22cb, 0x1e6a, 0x22cb, 0x1e6a, 0x259b, 0x20fe, 0x259b, 0x20fe, +0x27bc, 0x22e7, 0x27bc, 0x22e7, 0x2874, 0x236f, 0x2874, 0x236f, 0x2874, 0x236f, 0x290c, +0x23de, 0x290c, 0x23de, 0x2a29, 0x24da, 0x2a29, 0x24da, 0x2b1f, 0x25b9, 0x2b1f, 0x25b9, +0x2bcd, 0x2659, 0x2bcd, 0x2659, 0x2be1, 0x266a, 0x2be1, 0x266a, 0x2c79, 0x270a, 0x2c79, +0x270a, 0x2c79, 0x270a, 0x2cd9, 0x277f, 0x2cd9, 0x277f, 0x2c9e, 0x2763, 0x2c9e, 0x2763, +0x2c37, 0x2727, 0x2c37, 0x2727, 0x2b6d, 0x2693, 0x2b6d, 0x2693, 0x2a37, 0x259e, 0x2a37, +0x259e, 0x2a37, 0x259e, 0x28b4, 0x2465, 0x28b4, 0x2465, 0x2763, 0x2367, 0x2763, 0x2367, +0x257c, 0x21db, 0x257c, 0x21db, 0x23b6, 0x2076, 0x23b6, 0x2076, 0x21cc, 0x1ef0, 0x21cc, +0x1ef0, 0x1f62, 0x1ced, 0x1f62, 0x1ced, 0x1f62, 0x1ced, 0x1d3e, 0x1b31, 0x1d3e, 0x1b31, +0x1a9b, 0x18f6, 0x1a9b, 0x18f6, 0x17e2, 0x16a2, 0x17e2, 0x16a2, 0x1531, 0x1452, 0x1531, +0x1452, 0x124b, 0x11c7, 0x124b, 0x11c7, 0xfb7, 0xf86, 0xfb7, 0xf86, 0xfb7, 0xf86, +0xd64, 0xd7e, 0xd64, 0xd7e, 0xaad, 0xb07, 0xaad, 0xb07, 0x8cc, 0x95d, 0x8cc, +0x95d, 0x6f0, 0x7ad, 0x6f0, 0x7ad, 0x40b, 0x4e7, 0x40b, 0x4e7, 0x40b, 0x4e7, +0x1c1, 0x2b2, 0x1c1, 0x2b2, 0xfedf, 0xffdc, 0xfedf, 0xffdc, 0xfc08, 0xfd05, 0xfc08, +0xfd05, 0xfa31, 0xfb25, 0xfa31, 0xfb25, 0xf8cd, 0xf9b1, 0xf8cd, 0xf9b1, 0xf7de, 0xf8aa, +0xf7de, 0xf8aa, 0xf7de, 0xf8aa, 0xf6d5, 0xf785, 0xf6d5, 0xf785, 0xf6d5, 0xf767, 0xf6d5, +0xf767, 0xf751, 0xf7c2, 0xf751, 0xf7c2, 0xf752, 0xf7a2, 0xf752, 0xf7a2, 0xf755, 0xf787, +0xf755, 0xf787, 0xf763, 0xf77a, 0xf763, 0xf77a, 0xf763, 0xf77a, 0xf7f0, 0xf7f2, 0xf7f0, +0xf7f2, 0xf8a1, 0xf893, 0xf8a1, 0xf893, 0xf8d5, 0xf8be, 0xf8d5, 0xf8be, 0xf86f, 0xf858, +0xf86f, 0xf858, 0xf82e, 0xf81f, 0xf82e, 0xf81f, 0xf82e, 0xf81f, 0xf866, 0xf867, 0xf866, +0xf867, 0xf83f, 0xf859, 0xf83f, 0xf859, 0xf80c, 0xf847, 0xf80c, 0xf847, 0xf78b, 0xf7ee, +0xf78b, 0xf7ee, 0xf636, 0xf6c7, 0xf636, 0xf6c7, 0xf50d, 0xf5d1, 0xf50d, 0xf5d1, 0xf50d, +0xf5d1, 0xf458, 0xf551, 0xf458, 0xf551, 0xf2ea, 0xf41a, 0xf2ea, 0xf41a, 0xf0fe, 0xf265, +0xf0fe, 0xf265, 0xefb0, 0xf14a, 0xefb0, 0xf14a, 0xee55, 0xf01f, 0xee55, 0xf01f, 0xed0d, +0xef00, 0xed0d, 0xef00, 0xed0d, 0xef00, 0xec3b, 0xee50, 0xec3b, 0xee50, 0xeb7e, 0xedac, +0xeb7e, 0xedac, 0xeab9, 0xecf5, 0xeab9, 0xecf5, 0xeaa2, 0xece1, 0xeaa2, 0xece1, 0xeb77, +0xedad, 0xeb77, 0xedad, 0xeb77, 0xedad, 0xebec, 0xee0b, 0xebec, 0xee0b, 0xeca4, 0xeea1, +0xeca4, 0xeea1, 0xedfc, 0xefca, 0xedfc, 0xefca, 0xef90, 0xf123, 0xef90, 0xf123, 0xf17b, +0xf2c9, 0xf17b, 0xf2c9, 0xf36d, 0xf46d, 0xf36d, 0xf46d, 0xf36d, 0xf46d, 0xf611, 0xf6ba, +0xf611, 0xf6ba, 0xf937, 0xf985, 0xf937, 0xf985, 0xfcca, 0xfcb7, 0xfcca, 0xfcb7, 0x52, +0xffdb, 0x52, 0xffdb, 0x276, 0x19c, 0x276, 0x19c, 0x276, 0x19c, 0x468, 0x32d, +0x468, 0x32d, 0x65d, 0x4c3, 0x65d, 0x4c3, 0x7ec, 0x5fb, 0x7ec, 0x5fb, 0xa24, +0x7e2, 0xa24, 0x7e2, 0xc45, 0x9bb, 0xc45, 0x9bb, 0xe06, 0xb3e, 0xe06, 0xb3e, +0xe06, 0xb3e, 0xfb1, 0xcb6, 0xfb1, 0xcb6, 0x115a, 0xe37, 0x115a, 0xe37, 0x1276, +0xf37, 0x1276, 0xf37, 0x129e, 0xf4f, 0x129e, 0xf4f, 0x1292, 0xf3d, 0x1292, 0xf3d, +0x1262, 0xf14, 0x1262, 0xf14, 0x1262, 0xf14, 0x130d, 0xfcf, 0x130d, 0xfcf, 0x13c8, +0x10a2, 0x13c8, 0x10a2, 0x13b5, 0x10b0, 0x13b5, 0x10b0, 0x1301, 0x1022, 0x1301, 0x1022, +0x11ab, 0xef8, 0x11ab, 0xef8, 0x11ab, 0xef8, 0x10cb, 0xe46, 0x10cb, 0xe46, 0x107a, +0xe25, 0x107a, 0xe25, 0x10ca, 0xea5, 0x10ca, 0xea5, 0x10e3, 0xeeb, 0x10e3, 0xeeb, +0x10c3, 0xef8, 0x10c3, 0xef8, 0x10ba, 0xf16, 0x10ba, 0xf16, 0x10ba, 0xf16, 0x10c8, +0xf48, 0x10c8, 0xf48, 0x10de, 0xf7c, 0x10de, 0xf7c, 0x1038, 0xeee, 0x1038, 0xeee, +0xf99, 0xe62, 0xf99, 0xe62, 0xf0d, 0xde2, 0xf0d, 0xde2, 0xe7b, 0xd57, 0xe7b, +0xd57, 0xe7b, 0xd57, 0xda3, 0xc80, 0xda3, 0xc80, 0xc9b, 0xb76, 0xc9b, 0xb76, +0xbf5, 0xac9, 0xbf5, 0xac9, 0xb38, 0xa03, 0xb38, 0xa03, 0xa9d, 0x95d, 0xa9d, +0x95d, 0xa9d, 0x95d, 0xaab, 0x960, 0xaab, 0x960, 0xa9a, 0x944, 0xa9a, 0x944, +0xa4d, 0x8ed, 0xa4d, 0x8ed, 0xa39, 0x8d2, 0xa39, 0x8d2, 0x9e0, 0x874, 0x9e0, +0x874, 0x9a4, 0x838, 0x9a4, 0x838, 0x9a4, 0x838, 0x976, 0x80e, 0x976, 0x80e, +0xa21, 0x8c2, 0xa21, 0x8c2, 0xad8, 0x987, 0xad8, 0x987, 0xa7c, 0x93e, 0xa7c, +0x93e, 0x9c2, 0x89b, 0x9c2, 0x89b, 0x913, 0x807, 0x913, 0x807, 0x913, 0x807, +0x933, 0x846, 0x933, 0x846, 0x8f7, 0x82d, 0x8f7, 0x82d, 0x88d, 0x7e6, 0x88d, +0x7e6, 0x7f4, 0x771, 0x7f4, 0x771, 0x709, 0x6ab, 0x709, 0x6ab, 0x709, 0x6ab, +0x625, 0x5ea, 0x625, 0x5ea, 0x50a, 0x4f0, 0x50a, 0x4f0, 0x3ec, 0x3f0, 0x3ec, +0x3f0, 0x280, 0x29c, 0x280, 0x29c, 0x177, 0x1a7, 0x177, 0x1a7, 0x100, 0x13e, +0x100, 0x13e, 0x100, 0x13e, 0x131, 0x175, 0x131, 0x175, 0x107, 0x14c, 0x107, +0x14c, 0xaa, 0xe7, 0xaa, 0xe7, 0x7b, 0xa9, 0x7b, 0xa9, 0x77, 0x90, +0x77, 0x90, 0x15b, 0x157, 0x15b, 0x157, 0x15b, 0x157, 0x20b, 0x1e3, 0x20b, +0x1e3, 0x29e, 0x24d, 0x29e, 0x24d, 0x33d, 0x2be, 0x33d, 0x2be, 0x4a2, 0x3f2, +0x4a2, 0x3f2, 0x677, 0x591, 0x677, 0x591, 0x677, 0x591, 0x825, 0x70a, 0x825, +0x70a, 0x9c8, 0x875, 0x9c8, 0x875, 0xac5, 0x93d, 0xac5, 0x93d, 0xc75, 0xab8, +0xc75, 0xab8, 0xe5d, 0xc6f, 0xe5d, 0xc6f, 0x101d, 0xe01, 0x101d, 0xe01, 0x101d, +0xe01, 0x1203, 0xfbf, 0x1203, 0xfbf, 0x134a, 0x10e4, 0x134a, 0x10e4, 0x1461, 0x11de, +0x1461, 0x11de, 0x14fc, 0x1264, 0x14fc, 0x1264, 0x155b, 0x12b5, 0x155b, 0x12b5, 0x15f7, +0x134a, 0x15f7, 0x134a, 0x15f7, 0x134a, 0x15fa, 0x134d, 0x15fa, 0x134d, 0x1601, 0x135c, +0x1601, 0x135c, 0x15b7, 0x1321, 0x15b7, 0x1321, 0x14f2, 0x1271, 0x14f2, 0x1271, 0x1446, +0x11e0, 0x1446, 0x11e0, 0x1446, 0x11e0, 0x1322, 0x10dc, 0x1322, 0x10dc, 0x1250, 0x102f, +0x1250, 0x102f, 0x11d0, 0xfd6, 0x11d0, 0xfd6, 0x1103, 0xf34, 0x1103, 0xf34, 0xf94, +0xdf2, 0xf94, 0xdf2, 0xe23, 0xcaf, 0xe23, 0xcaf, 0xe23, 0xcaf, 0xd34, 0xbee, +0xd34, 0xbee, 0xc26, 0xb0f, 0xc26, 0xb0f, 0xb68, 0xa7d, 0xb68, 0xa7d, 0xace, +0xa0f, 0xace, 0xa0f, 0xa3f, 0x9aa, 0xa3f, 0x9aa, 0x9bb, 0x94d, 0x9bb, 0x94d, +0x9bb, 0x94d, 0x95e, 0x914, 0x95e, 0x914, 0x970, 0x947, 0x970, 0x947, 0x91a, +0x911, 0x91a, 0x911, 0x861, 0x875, 0x861, 0x875, 0x7c7, 0x7f5, 0x7c7, 0x7f5, +0x7c7, 0x7f5, 0x747, 0x78c, 0x747, 0x78c, 0x693, 0x6ee, 0x693, 0x6ee, 0x515, +0x584, 0x515, 0x584, 0x39d, 0x41e, 0x39d, 0x41e, 0x259, 0x2eb, 0x259, 0x2eb, +0xba, 0x15d, 0xba, 0x15d, 0xba, 0x15d, 0xff40, 0xfff3, 0xff40, 0xfff3, 0xfdda, +0xfe9e, 0xfdda, 0xfe9e, 0xfc6e, 0xfd43, 0xfc6e, 0xfd43, 0xfaee, 0xfbd5, 0xfaee, 0xfbd5, +0xf9ba, 0xfab4, 0xf9ba, 0xfab4, 0xf87c, 0xf98b, 0xf87c, 0xf98b, 0xf87c, 0xf98b, 0xf749, +0xf86d, 0xf749, 0xf86d, 0xf6a3, 0xf7dd, 0xf6a3, 0xf7dd, 0xf5fd, 0xf750, 0xf5fd, 0xf750, +0xf557, 0xf6c3, 0xf557, 0xf6c3, 0xf542, 0xf6c9, 0xf542, 0xf6c9, 0xf542, 0xf6c9, 0xf5b3, +0xf756, 0xf5b3, 0xf756, 0xf5d1, 0xf791, 0xf5d1, 0xf791, 0xf66e, 0xf84b, 0xf66e, 0xf84b, +0xf68b, 0xf887, 0xf68b, 0xf887, 0xf5ba, 0xf7d6, 0xf5ba, 0xf7d6, 0xf4f7, 0xf734, 0xf4f7, +0xf734, 0xf4f7, 0xf734, 0xf3d5, 0xf632, 0xf3d5, 0xf632, 0xf249, 0xf4c6, 0xf249, 0xf4c6, +0xf053, 0xf2f1, 0xf053, 0xf2f1, 0xeee2, 0xf1a0, 0xeee2, 0xf1a0, 0xed46, 0xf024, 0xed46, +0xf024, 0xec25, 0xef22, 0xec25, 0xef22, 0xec25, 0xef22, 0xeb85, 0xeea0, 0xeb85, 0xeea0, +0xeab2, 0xedea, 0xeab2, 0xedea, 0xea63, 0xedb7, 0xea63, 0xedb7, 0xea02, 0xed6f, 0xea02, +0xed6f, 0xe94c, 0xecd1, 0xe94c, 0xecd1, 0xe94c, 0xecd1, 0xe847, 0xebe2, 0xe847, 0xebe2, +0xe7f2, 0xeb9f, 0xe7f2, 0xeb9f, 0xe7ad, 0xeb6b, 0xe7ad, 0xeb6b, 0xe7a8, 0xeb72, 0xe7a8, +0xeb72, 0xe836, 0xec0a, 0xe836, 0xec0a, 0xe8f3, 0xeccc, 0xe8f3, 0xeccc, 0xe8f3, 0xeccc, +0xe9cc, 0xeda8, 0xe9cc, 0xeda8, 0xeab7, 0xee90, 0xeab7, 0xee90, 0xebb7, 0xef8a, 0xebb7, +0xef8a, 0xec1b, 0xefe3, 0xec1b, 0xefe3, 0xed47, 0xf100, 0xed47, 0xf100, 0xed47, 0xf100, +0xee77, 0xf21c, 0xee77, 0xf21c, 0xef5b, 0xf2e9, 0xef5b, 0xf2e9, 0xf04a, 0xf3bd, 0xf04a, +0xf3bd, 0xf117, 0xf46c, 0xf117, 0xf46c, 0xf1ef, 0xf523, 0xf1ef, 0xf523, 0xf245, 0xf556, +0xf245, 0xf556, 0xf245, 0xf556, 0xf27a, 0xf566, 0xf27a, 0xf566, 0xf260, 0xf527, 0xf260, +0xf527, 0xf2c2, 0xf563, 0xf2c2, 0xf563, 0xf329, 0xf5a5, 0xf329, 0xf5a5, 0xf382, 0xf5db, +0xf382, 0xf5db, 0xf375, 0xf5ae, 0xf375, 0xf5ae, 0xf375, 0xf5ae, 0xf2ea, 0xf505, 0xf2ea, +0xf505, 0xf269, 0xf46c, 0xf269, 0xf46c, 0xf1f5, 0xf3e4, 0xf1f5, 0xf3e4, 0xf241, 0xf421, +0xf241, 0xf421, 0xf18c, 0xf364, 0xf18c, 0xf364, 0xf18c, 0xf364, 0xeff3, 0xf1c8, 0xeff3, +0xf1c8, 0xeeb5, 0xf08e, 0xeeb5, 0xf08e, 0xedea, 0xefcf, 0xedea, 0xefcf, 0xed29, 0xef1f, +0xed29, 0xef1f, 0xec66, 0xee73, 0xec66, 0xee73, 0xeb3d, 0xed68, 0xeb3d, 0xed68, 0xeb3d, +0xed68, 0xe99d, 0xebea, 0xe99d, 0xebea, 0xe876, 0xeae9, 0xe876, 0xeae9, 0xe6ee, 0xe98b, +0xe6ee, 0xe98b, 0xe593, 0xe85c, 0xe593, 0xe85c, 0xe4e9, 0xe7df, 0xe4e9, 0xe7df, 0xe452, +0xe773, 0xe452, 0xe773, 0xe452, 0xe773, 0xe383, 0xe6cf, 0xe383, 0xe6cf, 0xe2e5, 0xe658, +0xe2e5, 0xe658, 0xe1fb, 0xe593, 0xe1fb, 0xe593, 0xe036, 0xe3eb, 0xe036, 0xe3eb, 0xde2d, +0xe1fa, 0xde2d, 0xe1fa, 0xde2d, 0xe1fa, 0xdc59, 0xe037, 0xdc59, 0xe037, 0xdae0, 0xdec7, +0xdae0, 0xdec7, 0xd99c, 0xdd82, 0xd99c, 0xdd82, 0xd8f0, 0xdccd, 0xd8f0, 0xdccd, 0xd82b, +0xdbf7, 0xd82b, 0xdbf7, 0xd7b6, 0xdb66, 0xd7b6, 0xdb66, 0xd7b6, 0xdb66, 0xd7f8, 0xdb84, +0xd7f8, 0xdb84, 0xd8df, 0xdc3e, 0xd8df, 0xdc3e, 0xd9ff, 0xdd28, 0xd9ff, 0xdd28, 0xda9d, +0xdd8b, 0xda9d, 0xdd8b, 0xdb9e, 0xde4a, 0xdb9e, 0xde4a, 0xdd4c, 0xdfb0, 0xdd4c, 0xdfb0, +0xdd4c, 0xdfb0, 0xdf55, 0xe16e, 0xdf55, 0xe16e, 0xe162, 0xe32c, 0xe162, 0xe32c, 0xe414, +0xe58e, 0xe414, 0xe58e, 0xe6ef, 0xe818, 0xe6ef, 0xe818, 0xe9cf, 0xeaa8, 0xe9cf, 0xeaa8, +0xe9cf, 0xeaa8, 0xecdb, 0xed65, 0xecdb, 0xed65, 0xef22, 0xef60, 0xef22, 0xef60, 0xf0e2, +0xf0d7, 0xf0e2, 0xf0d7, 0xf2d9, 0xf28a, 0xf2d9, 0xf28a, 0xf4ef, 0xf45f, 0xf4ef, 0xf45f, +0xf665, 0xf598, 0xf665, 0xf598, 0xf665, 0xf598, 0xf7ec, 0xf6e9, 0xf7ec, 0xf6e9, 0xf9c5, +0xf88e, 0xf9c5, 0xf88e, 0xfc07, 0xfaa2, 0xfc07, 0xfaa2, 0xfe50, 0xfcc1, 0xfe50, 0xfcc1, +0xfff9, 0xfe43, 0xfff9, 0xfe43, 0x10b, 0xff2f, 0x10b, 0xff2f, 0x10b, 0xff2f, 0x240, +0x43, 0x240, 0x43, 0x45d, 0x23e, 0x45d, 0x23e, 0x6b7, 0x477, 0x6b7, 0x477, +0x882, 0x622, 0x882, 0x622, 0x9f7, 0x774, 0x9f7, 0x774, 0x9f7, 0x774, 0xc20, +0x97a, 0xc20, 0x97a, 0xdcf, 0xb04, 0xdcf, 0xb04, 0xfd2, 0xce0, 0xfd2, 0xce0, +0x126a, 0xf4e, 0x126a, 0xf4e, 0x14ec, 0x11a4, 0x14ec, 0x11a4, 0x1832, 0x14bb, 0x1832, +0x14bb, 0x1832, 0x14bb, 0x1ad9, 0x1731, 0x1ad9, 0x1731, 0x1d3c, 0x1963, 0x1d3c, 0x1963, +0x1f31, 0x1b26, 0x1f31, 0x1b26, 0x20e6, 0x1ca9, 0x20e6, 0x1ca9, 0x22f2, 0x1e85, 0x22f2, +0x1e85, 0x2478, 0x1fdd, 0x2478, 0x1fdd, 0x2478, 0x1fdd, 0x2562, 0x209e, 0x2562, 0x209e, +0x25fa, 0x2110, 0x25fa, 0x2110, 0x263f, 0x2137, 0x263f, 0x2137, 0x26e0, 0x21c0, 0x26e0, +0x21c0, 0x2827, 0x22f9, 0x2827, 0x22f9, 0x2827, 0x22f9, 0x28c8, 0x2395, 0x28c8, 0x2395, +0x2935, 0x2407, 0x2935, 0x2407, 0x28fa, 0x23dc, 0x28fa, 0x23dc, 0x2807, 0x2305, 0x2807, +0x2305, 0x26e5, 0x220a, 0x26e5, 0x220a, 0x25ee, 0x2148, 0x25ee, 0x2148, 0x25ee, 0x2148, +0x24b8, 0x204f, 0x24b8, 0x204f, 0x228d, 0x1e6e, 0x228d, 0x1e6e, 0x214f, 0x1d83, 0x214f, +0x1d83, 0x2003, 0x1c93, 0x2003, 0x1c93, 0x1e6e, 0x1b63, 0x1e6e, 0x1b63, 0x1c9c, 0x19fb, +0x1c9c, 0x19fb, 0x1c9c, 0x19fb, 0x19e9, 0x17b7, 0x19e9, 0x17b7, 0x17a6, 0x15e6, 0x17a6, +0x15e6, 0x157f, 0x1433, 0x157f, 0x1433, 0x1332, 0x1258, 0x1332, 0x1258, 0x10e6, 0x107c, +0x10e6, 0x107c, 0x10e6, 0x107c, 0xe90, 0xe93, 0xe90, 0xe93, 0xc8e, 0xcf7, 0xc8e, +0xcf7, 0xb01, 0xbca, 0xb01, 0xbca, 0x8f9, 0xa18, 0x8f9, 0xa18, 0x61d, 0x789, +0x61d, 0x789, 0x30f, 0x4bf, 0x30f, 0x4bf, 0x30f, 0x4bf, 0xa3, 0x28b, 0xa3, +0x28b, 0xff0b, 0x121, 0xff0b, 0x121, 0xfde1, 0x1a, 0xfde1, 0x1a, 0xfcaa, 0xfefa, +0xfcaa, 0xfefa, 0xfac3, 0xfd21, 0xfac3, 0xfd21, 0xf97a, 0xfbdd, 0xf97a, 0xfbdd, 0xf97a, +0xfbdd, 0xf94f, 0xfbaf, 0xf94f, 0xfbaf, 0xf946, 0xfb9c, 0xf946, 0xfb9c, 0xf8fe, 0xfb45, +0xf8fe, 0xfb45, 0xf8b1, 0xfae4, 0xf8b1, 0xfae4, 0xf8ce, 0xfaec, 0xf8ce, 0xfaec, 0xf8ce, +0xfaec, 0xf956, 0xfb5d, 0xf956, 0xfb5d, 0xfa33, 0xfc25, 0xfa33, 0xfc25, 0xfab6, 0xfc94, +0xfab6, 0xfc94, 0xfab7, 0xfc84, 0xfab7, 0xfc84, 0xfab4, 0xfc75, 0xfab4, 0xfc75, 0xfac1, +0xfc7a, 0xfac1, 0xfc7a, 0xfac1, 0xfc7a, 0xfad1, 0xfc88, 0xfad1, 0xfc88, 0xfa64, 0xfc1f, +0xfa64, 0xfc1f, 0xf984, 0xfb49, 0xf984, 0xfb49, 0xf8d2, 0xfaa7, 0xf8d2, 0xfaa7, 0xf7b7, +0xf99f, 0xf7b7, 0xf99f, 0xf6ae, 0xf8ae, 0xf6ae, 0xf8ae, 0xf6ae, 0xf8ae, 0xf5e7, 0xf802, +0xf5e7, 0xf802, 0xf484, 0xf6bb, 0xf484, 0xf6bb, 0xf341, 0xf595, 0xf341, 0xf595, 0xf216, +0xf485, 0xf216, 0xf485, 0xf11e, 0xf3a5, 0xf11e, 0xf3a5, 0xf11e, 0xf3a5, 0xeffb, 0xf296, +0xeffb, 0xf296, 0xee8d, 0xf137, 0xee8d, 0xf137, 0xed7f, 0xf030, 0xed7f, 0xf030, 0xeced, +0xef9b, 0xeced, 0xef9b, 0xed22, 0xefc5, 0xed22, 0xefc5, 0xed4e, 0xefdb, 0xed4e, 0xefdb, +0xed4e, 0xefdb, 0xed6f, 0xefda, 0xed6f, 0xefda, 0xee05, 0xf043, 0xee05, 0xf043, 0xef48, +0xf14d, 0xef48, 0xf14d, 0xf0f7, 0xf2b9, 0xf0f7, 0xf2b9, 0xf346, 0xf4bb, 0xf346, 0xf4bb, +0xf346, 0xf4bb, 0xf5fa, 0xf717, 0xf5fa, 0xf717, 0xf83f, 0xf8fc, 0xf83f, 0xf8fc, 0xfb17, +0xfb6e, 0xfb17, 0xfb6e, 0xfdb6, 0xfda1, 0xfdb6, 0xfda1, 0xff8f, 0xff0b, 0xff8f, 0xff0b, +0x198, 0xa4, 0x198, 0xa4, 0x198, 0xa4, 0x3ba, 0x255, 0x3ba, 0x255, 0x5a0, +0x3ce, 0x5a0, 0x3ce, 0x77f, 0x545, 0x77f, 0x545, 0x8d1, 0x634, 0x8d1, 0x634, +0xa57, 0x760, 0xa57, 0x760, 0xd06, 0x9bd, 0xd06, 0x9bd, 0xd06, 0x9bd, 0xe98, +0xb08, 0xe98, 0xb08, 0x1008, 0xc3c, 0x1008, 0xc3c, 0x113a, 0xd3f, 0x113a, 0xd3f, +0x1147, 0xd29, 0x1147, 0xd29, 0x11c9, 0xd95, 0x11c9, 0xd95, 0x11c9, 0xd95, 0x1258, +0xe1a, 0x1258, 0xe1a, 0x1288, 0xe4c, 0x1288, 0xe4c, 0x120c, 0xddc, 0x120c, 0xddc, +0x1172, 0xd59, 0x1172, 0xd59, 0x10cf, 0xcd4, 0x10cf, 0xcd4, 0x10d1, 0xcfd, 0x10d1, +0xcfd, 0x10d1, 0xcfd, 0x10ba, 0xd12, 0x10ba, 0xd12, 0x1089, 0xd12, 0x1089, 0xd12, +0x10ac, 0xd67, 0x10ac, 0xd67, 0x101e, 0xd0e, 0x101e, 0xd0e, 0x1042, 0xd67, 0x1042, +0xd67, 0xf91, 0xce8, 0xf91, 0xce8, 0xf91, 0xce8, 0xebb, 0xc43, 0xebb, 0xc43, +0xe7b, 0xc30, 0xe7b, 0xc30, 0xe1d, 0xbfb, 0xe1d, 0xbfb, 0xdbf, 0xbc1, 0xdbf, +0xbc1, 0xd4d, 0xb6e, 0xd4d, 0xb6e, 0xd4d, 0xb6e, 0xc96, 0xad0, 0xc96, 0xad0, +0xab4, 0x903, 0xab4, 0x903, 0xa18, 0x878, 0xa18, 0x878, 0xa0e, 0x879, 0xa0e, +0x879, 0xa83, 0x8f7, 0xa83, 0x8f7, 0xa72, 0x8eb, 0xa72, 0x8eb, 0xa72, 0x8eb, +0x9d6, 0x851, 0x9d6, 0x851, 0x9fe, 0x87b, 0x9fe, 0x87b, 0x940, 0x7be, 0x940, +0x7be, 0x976, 0x7f5, 0x976, 0x7f5, 0x900, 0x781, 0x900, 0x781, 0x7fc, 0x681, +0x7fc, 0x681, 0x7fc, 0x681, 0x739, 0x5c4, 0x739, 0x5c4, 0x74a, 0x5dd, 0x74a, +0x5dd, 0x78d, 0x62b, 0x78d, 0x62b, 0x6b0, 0x55c, 0x6b0, 0x55c, 0x60e, 0x4cb, +0x60e, 0x4cb, 0x60e, 0x4cb, 0x4dd, 0x3ac, 0x4dd, 0x3ac, 0x538, 0x41c, 0x538, +0x41c, 0x53e, 0x438, 0x53e, 0x438, 0x4ac, 0x3bc, 0x4ac, 0x3bc, 0x42a, 0x351, +0x42a, 0x351, 0x34a, 0x287, 0x34a, 0x287, 0x34a, 0x287, 0x309, 0x25a, 0x309, +0x25a, 0x1e0, 0x142, 0x1e0, 0x142, 0x1b0, 0x120, 0x1b0, 0x120, 0x147, 0xc1, +0x147, 0xc1, 0xe9, 0x68, 0xe9, 0x68, 0xf2, 0x71, 0xf2, 0x71, 0xf2, +0x71, 0x69, 0xffe2, 0x69, 0xffe2, 0x5b, 0xffc8, 0x5b, 0xffc8, 0xfffc, 0xff57, +0xfffc, 0xff57, 0x3b, 0xff7d, 0x3b, 0xff7d, 0xc7, 0xffeb, 0xc7, 0xffeb, 0xc7, +0xffeb, 0x165, 0x64, 0x165, 0x64, 0x1e7, 0xbe, 0x1e7, 0xbe, 0x284, 0x12f, +0x284, 0x12f, 0x3ef, 0x269, 0x3ef, 0x269, 0x567, 0x3af, 0x567, 0x3af, 0x764, +0x577, 0x764, 0x577, 0x764, 0x577, 0x9ca, 0x7a9, 0x9ca, 0x7a9, 0xb7d, 0x928, +0xb7d, 0x928, 0xd6e, 0xae8, 0xd6e, 0xae8, 0xfea, 0xd35, 0xfea, 0xd35, 0x113e, +0xe5d, 0x113e, 0xe5d, 0x1294, 0xf8e, 0x1294, 0xf8e, 0x1294, 0xf8e, 0x143d, 0x1116, +0x143d, 0x1116, 0x1567, 0x1225, 0x1567, 0x1225, 0x173b, 0x13e5, 0x173b, 0x13e5, 0x18aa, +0x1549, 0x18aa, 0x1549, 0x18ba, 0x1554, 0x18ba, 0x1554, 0x18ba, 0x1554, 0x18e7, 0x1584, +0x18e7, 0x1584, 0x18be, 0x1565, 0x18be, 0x1565, 0x1833, 0x14ec, 0x1833, 0x14ec, 0x17ff, +0x14d2, 0x17ff, 0x14d2, 0x1751, 0x1443, 0x1751, 0x1443, 0x16a9, 0x13c0, 0x16a9, 0x13c0, +0x16a9, 0x13c0, 0x15ba, 0x12fc, 0x15ba, 0x12fc, 0x149e, 0x1210, 0x149e, 0x1210, 0x13b0, +0x1154, 0x13b0, 0x1154, 0x125c, 0x1036, 0x125c, 0x1036, 0x10cc, 0xede, 0x10cc, 0xede, +0xf9b, 0xde5, 0xf9b, 0xde5, 0xf9b, 0xde5, 0xed6, 0xd5a, 0xed6, 0xd5a, 0xdd9, +0xc95, 0xdd9, 0xc95, 0xd61, 0xc55, 0xd61, 0xc55, 0xc91, 0xbba, 0xc91, 0xbba, +0xbbe, 0xb1a, 0xbbe, 0xb1a, 0xbbe, 0xb1a, 0xb89, 0xb14, 0xb89, 0xb14, 0xa7b, +0xa33, 0xa7b, 0xa33, 0x95a, 0x93c, 0x95a, 0x93c, 0x869, 0x870, 0x869, 0x870, +0x7c6, 0x7ef, 0x7c6, 0x7ef, 0x734, 0x77b, 0x734, 0x77b, 0x734, 0x77b, 0x664, +0x6c5, 0x664, 0x6c5, 0x53f, 0x5b8, 0x53f, 0x5b8, 0x3ff, 0x48c, 0x3ff, 0x48c, +0x3ba, 0x458, 0x3ba, 0x458, 0x30a, 0x3b9, 0x30a, 0x3b9, 0x18d, 0x24a, 0x18d, +0x24a, 0x18d, 0x24a, 0xffb0, 0x79, 0xffb0, 0x79, 0xfdf7, 0xfecd, 0xfdf7, 0xfecd, +0xfd5d, 0xfe3e, 0xfd5d, 0xfe3e, 0xfcb0, 0xfd9e, 0xfcb0, 0xfd9e, 0xfbcc, 0xfcc6, 0xfbcc, +0xfcc6, 0xfbcc, 0xfcc6, 0xfb0b, 0xfc13, 0xfb0b, 0xfc13, 0xfa69, 0xfb80, 0xfa69, 0xfb80, +0xf98c, 0xfab4, 0xf98c, 0xfab4, 0xf866, 0xf9a0, 0xf866, 0xf9a0, 0xf7a8, 0xf8f6, 0xf7a8, +0xf8f6, 0xf6f7, 0xf85c, 0xf6f7, 0xf85c, 0xf6f7, 0xf85c, 0xf651, 0xf7cd, 0xf651, 0xf7cd, +0xf669, 0xf7ff, 0xf669, 0xf7ff, 0xf6ab, 0xf85c, 0xf6ab, 0xf85c, 0xf651, 0xf81e, 0xf651, +0xf81e, 0xf625, 0xf80f, 0xf625, 0xf80f, 0xf588, 0xf791, 0xf588, 0xf791, 0xf588, 0xf791, +0xf47c, 0xf6a3, 0xf47c, 0xf6a3, 0xf320, 0xf564, 0xf320, 0xf564, 0xf13f, 0xf3a1, 0xf13f, +0xf3a1, 0xef9e, 0xf21c, 0xef9e, 0xf21c, 0xee3f, 0xf0d8, 0xee3f, 0xf0d8, 0xee3f, 0xf0d8, +0xed95, 0xf047, 0xed95, 0xf047, 0xecf5, 0xefbd, 0xecf5, 0xefbd, 0xecb9, 0xef95, 0xecb9, +0xef95, 0xebc8, 0xeeb5, 0xebc8, 0xeeb5, 0xeab7, 0xedb2, 0xeab7, 0xedb2, 0xeaa3, 0xedaa, +0xeaa3, 0xedaa, 0xeaa3, 0xedaa, 0xea02, 0xed0f, 0xea02, 0xed0f, 0xe9a5, 0xecb6, 0xe9a5, +0xecb6, 0xe8a4, 0xebb4, 0xe8a4, 0xebb4, 0xe80c, 0xeb19, 0xe80c, 0xeb19, 0xe848, 0xeb4e, +0xe848, 0xeb4e, 0xe848, 0xeb4e, 0xe8d8, 0xebd4, 0xe8d8, 0xebd4, 0xe9d3, 0xecc2, 0xe9d3, +0xecc2, 0xeac9, 0xeda9, 0xeac9, 0xeda9, 0xebf4, 0xeec2, 0xebf4, 0xeec2, 0xec57, 0xef12, +0xec57, 0xef12, 0xecc7, 0xef6d, 0xecc7, 0xef6d, 0xecc7, 0xef6d, 0xecf8, 0xef89, 0xecf8, +0xef89, 0xed38, 0xefb5, 0xed38, 0xefb5, 0xed8b, 0xeff3, 0xed8b, 0xeff3, 0xee77, 0xf0cb, +0xee77, 0xf0cb, 0xefb4, 0xf1f5, 0xefb4, 0xf1f5, 0xf06c, 0xf29e, 0xf06c, 0xf29e, 0xf06c, +0xf29e, 0xf167, 0xf38b, 0xf167, 0xf38b, 0xf156, 0xf36e, 0xf156, 0xf36e, 0xf1c0, 0xf3d1, +0xf1c0, 0xf3d1, 0xf1d9, 0xf3e6, 0xf1d9, 0xf3e6, 0xf13a, 0xf347, 0xf13a, 0xf347, 0xf13a, +0xf347, 0xf0eb, 0xf2fc, 0xf0eb, 0xf2fc, 0xf025, 0xf23f, 0xf025, 0xf23f, 0xef7f, 0xf1a6, +0xef7f, 0xf1a6, 0xeece, 0xf106, 0xeece, 0xf106, 0xee60, 0xf0ad, 0xee60, 0xf0ad, 0xed7b, +0xefe2, 0xed7b, 0xefe2, 0xed7b, 0xefe2, 0xec7a, 0xeefd, 0xec7a, 0xeefd, 0xec3c, 0xeee0, +0xec3c, 0xeee0, 0xec07, 0xeece, 0xec07, 0xeece, 0xeb38, 0xee25, 0xeb38, 0xee25, 0xea7a, +0xed8f, 0xea7a, 0xed8f, 0xea10, 0xed4d, 0xea10, 0xed4d, 0xea10, 0xed4d, 0xe969, 0xeccf, +0xe969, 0xeccf, 0xe871, 0xec00, 0xe871, 0xec00, 0xe6df, 0xea95, 0xe6df, 0xea95, 0xe5ac, +0xe989, 0xe5ac, 0xe989, 0xe51d, 0xe91d, 0xe51d, 0xe91d, 0xe51d, 0xe91d, 0xe478, 0xe899, +0xe478, 0xe899, 0xe2d9, 0xe716, 0xe2d9, 0xe716, 0xe194, 0xe5ea, 0xe194, 0xe5ea, 0xe106, +0xe56e, 0xe106, 0xe56e, 0xdfca, 0xe440, 0xdfca, 0xe440, 0xdef5, 0xe372, 0xdef5, 0xe372, +0xdef5, 0xe372, 0xddea, 0xe269, 0xddea, 0xe269, 0xdcbf, 0xe139, 0xdcbf, 0xe139, 0xdc62, +0xe0d0, 0xdc62, 0xe0d0, 0xdc26, 0xe082, 0xdc26, 0xe082, 0xdc20, 0xe064, 0xdc20, 0xe064, +0xdc2e, 0xe053, 0xdc2e, 0xe053, 0xdc2e, 0xe053, 0xdb70, 0xdf71, 0xdb70, 0xdf71, 0xdb74, +0xdf4b, 0xdb74, 0xdf4b, 0xdc83, 0xe02c, 0xdc83, 0xe02c, 0xdd3f, 0xe0b4, 0xdd3f, 0xe0b4, +0xdf47, 0xe286, 0xdf47, 0xe286, 0xdf47, 0xe286, 0xe147, 0xe44b, 0xe147, 0xe44b, 0xe2b3, +0xe57b, 0xe2b3, 0xe57b, 0xe568, 0xe7f1, 0xe568, 0xe7f1, 0xe83a, 0xea83, 0xe83a, 0xea83, +0xeab3, 0xecbc, 0xeab3, 0xecbc, 0xed04, 0xeecc, 0xed04, 0xeecc, 0xed04, 0xeecc, 0xef31, +0xf0b8, 0xef31, 0xf0b8, 0xf133, 0xf27b, 0xf133, 0xf27b, 0xf34b, 0xf453, 0xf34b, 0xf453, +0xf56c, 0xf637, 0xf56c, 0xf637, 0xf738, 0xf7c7, 0xf738, 0xf7c7, 0xf971, 0xf9c4, 0xf971, +0xf9c4, 0xf971, 0xf9c4, 0xfbcc, 0xfbe5, 0xfbcc, 0xfbe5, 0xfddf, 0xfdbe, 0xfddf, 0xfdbe, +0xff73, 0xff1a, 0xff73, 0xff1a, 0x94, 0x3, 0x94, 0x3, 0x218, 0x150, 0x218, +0x150, 0x218, 0x150, 0x388, 0x287, 0x388, 0x287, 0x4fc, 0x3c3, 0x4fc, 0x3c3, +0x691, 0x51f, 0x691, 0x51f, 0x801, 0x656, 0x801, 0x656, 0x999, 0x7b4, 0x999, +0x7b4, 0xb12, 0x8f2, 0xb12, 0x8f2, 0xb12, 0x8f2, 0xc87, 0xa2a, 0xc87, 0xa2a, +0xe17, 0xb7d, 0xe17, 0xb7d, 0x100d, 0xd36, 0x100d, 0xd36, 0x1272, 0xf5d, 0x1272, +0xf5d, 0x1501, 0x11b0, 0x1501, 0x11b0, 0x178c, 0x13ff, 0x178c, 0x13ff, 0x178c, 0x13ff, +0x19e8, 0x1620, 0x19e8, 0x1620, 0x1c35, 0x1836, 0x1c35, 0x1836, 0x1e1f, 0x19ed, 0x1e1f, +0x19ed, 0x203c, 0x1bdb, 0x203c, 0x1bdb, 0x2282, 0x1df7, 0x2282, 0x1df7, 0x2282, 0x1df7, +0x23c7, 0x1f19, 0x23c7, 0x1f19, 0x24f2, 0x2028, 0x24f2, 0x2028, 0x25bf, 0x20e1, 0x25bf, +0x20e1, 0x25b3, 0x20ca, 0x25b3, 0x20ca, 0x2680, 0x2196, 0x2680, 0x2196, 0x2779, 0x2297, +0x2779, 0x2297, 0x2779, 0x2297, 0x283c, 0x236d, 0x283c, 0x236d, 0x289a, 0x23e7, 0x289a, +0x23e7, 0x27e3, 0x2356, 0x27e3, 0x2356, 0x2686, 0x2229, 0x2686, 0x2229, 0x24a6, 0x2082, +0x24a6, 0x2082, 0x2300, 0x1f1f, 0x2300, 0x1f1f, 0x2300, 0x1f1f, 0x214b, 0x1db2, 0x214b, +0x1db2, 0x1fbb, 0x1c73, 0x1fbb, 0x1c73, 0x1e08, 0x1b15, 0x1e08, 0x1b15, 0x1caf, 0x1a15, +0x1caf, 0x1a15, 0x1bd6, 0x1998, 0x1bd6, 0x1998, 0x1bd6, 0x1998, 0x1a11, 0x1831, 0x1a11, +0x1831, 0x17f0, 0x166c, 0x17f0, 0x166c, 0x1535, 0x140d, 0x1535, 0x140d, 0x12c0, 0x11f1, +0x12c0, 0x11f1, 0x1099, 0x101e, 0x1099, 0x101e, 0xe84, 0xe5a, 0xe84, 0xe5a, 0xe84, +0xe5a, 0xc76, 0xc95, 0xc76, 0xc95, 0xa9c, 0xafe, 0xa9c, 0xafe, 0x90d, 0x9aa, +0x90d, 0x9aa, 0x6a9, 0x77a, 0x6a9, 0x77a, 0x4bd, 0x5ba, 0x4bd, 0x5ba, 0x2ad, +0x3ce, 0x2ad, 0x3ce, 0x2ad, 0x3ce, 0xec, 0x22b, 0xec, 0x22b, 0xff06, 0x5c, +0xff06, 0x5c, 0xfc9e, 0xfe05, 0xfc9e, 0xfe05, 0xfb39, 0xfcab, 0xfb39, 0xfcab, 0xfa2e, +0xfba7, 0xfa2e, 0xfba7, 0xfa2e, 0xfba7, 0xf9d9, 0xfb56, 0xf9d9, 0xfb56, 0xf93e, 0xfabd, +0xf93e, 0xfabd, 0xf8b7, 0xfa35, 0xf8b7, 0xfa35, 0xf8b2, 0xfa31, 0xf8b2, 0xfa31, 0xf92f, +0xfaaf, 0xf92f, 0xfaaf, 0xf95e, 0xfae1, 0xf95e, 0xfae1, 0xf95e, 0xfae1, 0xf8ec, 0xfa73, +0xf8ec, 0xfa73, 0xf9a9, 0xfb38, 0xf9a9, 0xfb38, 0xfa66, 0xfc00, 0xfa66, 0xfc00, 0xfac0, +0xfc69, 0xfac0, 0xfc69, 0xfaeb, 0xfca6, 0xfaeb, 0xfca6, 0xfb41, 0xfd11, 0xfb41, 0xfd11, +0xfb41, 0xfd11, 0xfb21, 0xfd09, 0xfb21, 0xfd09, 0xfa5f, 0xfc61, 0xfa5f, 0xfc61, 0xf985, +0xfba3, 0xf985, 0xfba3, 0xf7e6, 0xfa1f, 0xf7e6, 0xfa1f, 0xf6d8, 0xf92e, 0xf6d8, 0xf92e, +0xf6d8, 0xf92e, 0xf607, 0xf876, 0xf607, 0xf876, 0xf4c0, 0xf747, 0xf4c0, 0xf747, 0xf38e, +0xf628, 0xf38e, 0xf628, 0xf29c, 0xf545, 0xf29c, 0xf545, 0xf1dc, 0xf48e, 0xf1dc, 0xf48e, +0xf05d, 0xf310, 0xf05d, 0xf310, 0xf05d, 0xf310, 0xee86, 0xf133, 0xee86, 0xf133, 0xedda, +0xf078, 0xedda, 0xf078, 0xed1c, 0xefa3, 0xed1c, 0xefa3, 0xec21, 0xee87, 0xec21, 0xee87, +0xebf2, 0xee2d, 0xebf2, 0xee2d, 0xebf2, 0xee2d, 0xeb20, 0xed27, 0xeb20, 0xed27, 0xeb77, +0xed42, 0xeb77, 0xed42, 0xed45, 0xeeca, 0xed45, 0xeeca, 0xeebf, 0xeff8, 0xeebf, 0xeff8, +0xf08f, 0xf175, 0xf08f, 0xf175, 0xf2aa, 0xf337, 0xf2aa, 0xf337, 0xf2aa, 0xf337, 0xf4e6, +0xf516, 0xf4e6, 0xf516, 0xf6a1, 0xf673, 0xf6a1, 0xf673, 0xf7dc, 0xf74c, 0xf7dc, 0xf74c, +0xf93e, 0xf84d, 0xf93e, 0xf84d, 0xfb58, 0xfa07, 0xfb58, 0xfa07, 0xfdfd, 0xfc50, 0xfdfd, +0xfc50, 0xfdfd, 0xfc50, 0xc5, 0xfebf, 0xc5, 0xfebf, 0x3a3, 0x14a, 0x3a3, 0x14a, +0x615, 0x370, 0x615, 0x370, 0x842, 0x559, 0x842, 0x559, 0xa2f, 0x70a, 0xa2f, +0x70a, 0xa2f, 0x70a, 0xbb8, 0x860, 0xbb8, 0x860, 0xd1d, 0x99c, 0xd1d, 0x99c, +0xe74, 0xad3, 0xe74, 0xad3, 0xf59, 0xba2, 0xf59, 0xba2, 0xfef, 0xc2c, 0xfef, +0xc2c, 0x103a, 0xc75, 0x103a, 0xc75, 0x103a, 0xc75, 0x109d, 0xcde, 0x109d, 0xcde, +0x116b, 0xdba, 0x116b, 0xdba, 0x11b5, 0xe19, 0x11b5, 0xe19, 0x11b8, 0xe38, 0x11b8, +0xe38, 0x1193, 0xe34, 0x1193, 0xe34, 0x116b, 0xe30, 0x116b, 0xe30, 0x116b, 0xe30, +0x115b, 0xe49, 0x115b, 0xe49, 0x111a, 0xe33, 0x111a, 0xe33, 0x10f4, 0xe39, 0x10f4, +0xe39, 0x1119, 0xe8b, 0x1119, 0xe8b, 0x113d, 0xedc, 0x113d, 0xedc, 0x113d, 0xedc, +0x10cf, 0xe98, 0x10cf, 0xe98, 0x104b, 0xe3e, 0x104b, 0xe3e, 0xf95, 0xdaf, 0xf95, +0xdaf, 0xe80, 0xcbf, 0xe80, 0xcbf, 0xda7, 0xc08, 0xda7, 0xc08, 0xd1a, 0xb9a, +0xd1a, 0xb9a, 0xd1a, 0xb9a, 0xc70, 0xb0d, 0xc70, 0xb0d, 0xbb5, 0xa6d, 0xbb5, +0xa6d, 0xba1, 0xa71, 0xba1, 0xa71, 0xbed, 0xad4, 0xbed, 0xad4, 0xbff, 0xafb, +0xbff, 0xafb, 0xb62, 0xa72, 0xb62, 0xa72, 0xb62, 0xa72, 0xa9a, 0x9bd, 0xa9a, +0x9bd, 0x9bf, 0x8f5, 0x9bf, 0x8f5, 0x915, 0x85f, 0x915, 0x85f, 0x8ea, 0x848, +0x8ea, 0x848, 0x848, 0x7bb, 0x848, 0x7bb, 0x848, 0x7bb, 0x7fc, 0x786, 0x7fc, +0x786, 0x7e0, 0x780, 0x7e0, 0x780, 0x789, 0x741, 0x789, 0x741, 0x719, 0x6e9, +0x719, 0x6e9, 0x6b5, 0x69f, 0x6b5, 0x69f, 0x6d8, 0x6db, 0x6d8, 0x6db, 0x6d8, +0x6db, 0x6db, 0x6f8, 0x6db, 0x6f8, 0x6a5, 0x6d9, 0x6a5, 0x6d9, 0x61e, 0x669, +0x61e, 0x669, 0x626, 0x685, 0x626, 0x685, 0x67e, 0x6ee, 0x67e, 0x6ee, 0x662, +0x6e0, 0x662, 0x6e0, 0x662, 0x6e0, 0x649, 0x6d0, 0x649, 0x6d0, 0x587, 0x613, +0x587, 0x613, 0x4d5, 0x55f, 0x4d5, 0x55f, 0x43d, 0x4c0, 0x43d, 0x4c0, 0x2f7, +0x36e, 0x2f7, 0x36e, 0x2f7, 0x36e, 0x1e8, 0x24b, 0x1e8, 0x24b, 0x19f, 0x1e8, +0x19f, 0x1e8, 0x184, 0x1ae, 0x184, 0x1ae, 0x10f, 0x112, 0x10f, 0x112, 0xab, +0x82, 0xab, 0x82, 0xcf, 0x76, 0xcf, 0x76, 0xcf, 0x76, 0x143, 0xb5, +0x143, 0xb5, 0x1c5, 0xff, 0x1c5, 0xff, 0x250, 0x150, 0x250, 0x150, 0x30c, +0x1cf, 0x30c, 0x1cf, 0x4bd, 0x344, 0x4bd, 0x344, 0x700, 0x54a, 0x700, 0x54a, +0x700, 0x54a, 0x8db, 0x6eb, 0x8db, 0x6eb, 0xadf, 0x8b7, 0xadf, 0x8b7, 0xcc4, +0xa68, 0xcc4, 0xa68, 0xe46, 0xbbc, 0xe46, 0xbbc, 0xfef, 0xd3c, 0xfef, 0xd3c, +0xfef, 0xd3c, 0x1114, 0xe3f, 0x1114, 0xe3f, 0x126f, 0xf7e, 0x126f, 0xf7e, 0x145f, +0x115a, 0x145f, 0x115a, 0x1565, 0x1254, 0x1565, 0x1254, 0x160b, 0x12f6, 0x160b, 0x12f6, +0x1646, 0x1334, 0x1646, 0x1334, 0x1646, 0x1334, 0x168e, 0x1387, 0x168e, 0x1387, 0x174e, +0x145a, 0x174e, 0x145a, 0x172e, 0x1453, 0x172e, 0x1453, 0x16b3, 0x13f7, 0x16b3, 0x13f7, +0x15b7, 0x1321, 0x15b7, 0x1321, 0x143a, 0x11cd, 0x143a, 0x11cd, 0x143a, 0x11cd, 0x12bf, +0x1080, 0x12bf, 0x1080, 0x114e, 0xf3f, 0x114e, 0xf3f, 0x1003, 0xe26, 0x1003, 0xe26, +0xe9b, 0xcf1, 0xe9b, 0xcf1, 0xdde, 0xc67, 0xdde, 0xc67, 0xdde, 0xc67, 0xda2, +0xc5d, 0xda2, 0xc5d, 0xcf7, 0xbe3, 0xcf7, 0xbe3, 0xc15, 0xb30, 0xc15, 0xb30, +0xb0d, 0xa55, 0xb0d, 0xa55, 0x9b7, 0x927, 0x9b7, 0x927, 0x8d8, 0x86e, 0x8d8, +0x86e, 0x8d8, 0x86e, 0x813, 0x7ca, 0x813, 0x7ca, 0x67f, 0x654, 0x67f, 0x654, +0x50f, 0x4fd, 0x50f, 0x4fd, 0x455, 0x459, 0x455, 0x459, 0x3b8, 0x3cd, 0x3b8, +0x3cd, 0x2da, 0x2fe, 0x2da, 0x2fe, 0x2da, 0x2fe, 0x25b, 0x28a, 0x25b, 0x28a, +0x1d3, 0x20a, 0x1d3, 0x20a, 0xfa, 0x137, 0xfa, 0x137, 0x1f, 0x61, 0x1f, +0x61, 0xff2f, 0xff74, 0xff2f, 0xff74, 0xff2f, 0xff74, 0xfeb3, 0xfefb, 0xfeb3, 0xfefb, +0xfe07, 0xfe51, 0xfe07, 0xfe51, 0xfd2b, 0xfd77, 0xfd2b, 0xfd77, 0xfc90, 0xfce1, 0xfc90, +0xfce1, 0xfbf1, 0xfc46, 0xfbf1, 0xfc46, 0xfb28, 0xfb83, 0xfb28, 0xfb83, 0xfb28, 0xfb83, +0xf9f8, 0xfa5c, 0xf9f8, 0xfa5c, 0xf8f7, 0xf965, 0xf8f7, 0xf965, 0xf7d2, 0xf84c, 0xf7d2, +0xf84c, 0xf69b, 0xf724, 0xf69b, 0xf724, 0xf66e, 0xf708, 0xf66e, 0xf708, 0xf680, 0xf72e, +0xf680, 0xf72e, 0xf680, 0xf72e, 0xf649, 0xf70d, 0xf649, 0xf70d, 0xf679, 0xf755, 0xf679, +0xf755, 0xf6c2, 0xf7b9, 0xf6c2, 0xf7b9, 0xf6d3, 0xf7e5, 0xf6d3, 0xf7e5, 0xf62a, 0xf758, +0xf62a, 0xf758, 0xf62a, 0xf758, 0xf54d, 0xf699, 0xf54d, 0xf699, 0xf4ff, 0xf669, 0xf4ff, +0xf669, 0xf466, 0xf5ee, 0xf466, 0xf5ee, 0xf38b, 0xf530, 0xf38b, 0xf530, 0xf1fb, 0xf3bd, +0xf1fb, 0xf3bd, 0xf0f4, 0xf2d1, 0xf0f4, 0xf2d1, 0xf0f4, 0xf2d1, 0xf105, 0xf2fb, 0xf105, +0xf2fb, 0xf0ff, 0xf30c, 0xf0ff, 0xf30c, 0xf129, 0xf34b, 0xf129, 0xf34b, 0xf057, 0xf28a, +0xf057, 0xf28a, 0xef83, 0xf1c5, 0xef83, 0xf1c5, 0xef83, 0xf1c5, 0xeed5, 0xf123, 0xeed5, +0xf123, 0xed87, 0xefdc, 0xed87, 0xefdc, 0xed12, 0xef6a, 0xed12, 0xef6a, 0xed1f, 0xef78, +0xed1f, 0xef78, 0xed9d, 0xeff2, 0xed9d, 0xeff2, 0xee5b, 0xf0aa, 0xee5b, 0xf0aa, 0xee5b, +0xf0aa, 0xeeaf, 0xf0f3, 0xeeaf, 0xf0f3, 0xee9f, 0xf0d7, 0xee9f, 0xf0d7, 0xeedd, 0xf105, +0xeedd, 0xf105, 0xef72, 0xf187, 0xef72, 0xf187, 0xef72, 0xf174, 0xef72, 0xf174, 0xef75, +0xf162, 0xef75, 0xf162, 0xef75, 0xf162, 0xf036, 0xf20e, 0xf036, 0xf20e, 0xf1c3, 0xf385, +0xf1c3, 0xf385, 0xf3ab, 0xf558, 0xf3ab, 0xf558, 0xf508, 0xf6a0, 0xf508, 0xf6a0, 0xf5c8, +0xf74d, 0xf5c8, 0xf74d, 0xf5c8, 0xf74d, 0xf630, 0xf7a5, 0xf630, 0xf7a5, 0xf5f7, 0xf75e, +0xf5f7, 0xf75e, 0xf545, 0xf6a0, 0xf545, 0xf6a0, 0xf491, 0xf5e5, 0xf491, 0xf5e5, 0xf423, +0xf573, 0xf423, 0xf573, 0xf39c, 0xf4eb, 0xf39c, 0xf4eb, 0xf39c, 0xf4eb, 0xf2c9, 0xf41c, +0xf2c9, 0xf41c, 0xf221, 0xf37c, 0xf221, 0xf37c, 0xf13e, 0xf2a5, 0xf13e, 0xf2a5, 0xf049, +0xf1bf, 0xf049, 0xf1bf, 0xefb5, 0xf13f, 0xefb5, 0xf13f, 0xef38, 0xf0d9, 0xef38, 0xf0d9, +0xef38, 0xf0d9, 0xeeb5, 0xf070, 0xeeb5, 0xf070, 0xedf5, 0xefcc, 0xedf5, 0xefcc, 0xecee, +0xeee3, 0xecee, 0xeee3, 0xecad, 0xeec2, 0xecad, 0xeec2, 0xeccf, 0xef06, 0xeccf, 0xef06, +0xeccf, 0xef06, 0xec8d, 0xeee5, 0xec8d, 0xeee5, 0xec32, 0xeeaa, 0xec32, 0xeeaa, 0xeaa0, +0xed39, 0xeaa0, 0xed39, 0xe85f, 0xeb18, 0xe85f, 0xeb18, 0xe619, 0xe8ef, 0xe619, 0xe8ef, +0xe471, 0xe762, 0xe471, 0xe762, 0xe471, 0xe762, 0xe3a8, 0xe6b2, 0xe3a8, 0xe6b2, 0xe25d, +0xe57c, 0xe25d, 0xe57c, 0xe162, 0xe494, 0xe162, 0xe494, 0xe065, 0xe3a6, 0xe065, 0xe3a6, +0xdf8c, 0xe2d8, 0xdf8c, 0xe2d8, 0xdfcf, 0xe323, 0xdfcf, 0xe323, 0xdfcf, 0xe323, 0xdfd4, +0xe32b, 0xdfd4, 0xe32b, 0xdefb, 0xe252, 0xdefb, 0xe252, 0xddf6, 0xe149, 0xddf6, 0xe149, +0xdd20, 0xe06b, 0xdd20, 0xe06b, 0xdc76, 0xdfb7, 0xdc76, 0xdfb7, 0xdc76, 0xdfb7, 0xdc13, +0xdf45, 0xdc13, 0xdf45, 0xdbbe, 0xdede, 0xdbbe, 0xdede, 0xdc30, 0xdf3c, 0xdc30, 0xdf3c, +0xdd15, 0xe009, 0xdd15, 0xe009, 0xddf0, 0xe0ca, 0xddf0, 0xe0ca, 0xdf96, 0xe254, 0xdf96, +0xe254, 0xdf96, 0xe254, 0xe139, 0xe3d8, 0xe139, 0xe3d8, 0xe321, 0xe5a0, 0xe321, 0xe5a0, +0xe5cd, 0xe829, 0xe5cd, 0xe829, 0xe7fe, 0xea36, 0xe7fe, 0xea36, 0xe97e, 0xeb8f, 0xe97e, +0xeb8f, 0xebb2, 0xed9b, 0xebb2, 0xed9b, 0xebb2, 0xed9b, 0xee9d, 0xf05c, 0xee9d, 0xf05c, +0xf105, 0xf298, 0xf105, 0xf298, 0xf380, 0xf4e5, 0xf380, 0xf4e5, 0xf5ae, 0xf6e3, 0xf5ae, +0xf6e3, 0xf772, 0xf875, 0xf772, 0xf875, 0xf772, 0xf875, 0xf94d, 0xfa1c, 0xf94d, 0xfa1c, +0xfaa9, 0xfb42, 0xfaa9, 0xfb42, 0xfc6b, 0xfccc, 0xfc6b, 0xfccc, 0xfe54, 0xfe7b, 0xfe54, +0xfe7b, 0x17, 0x1, 0x17, 0x1, 0x1bd, 0x169, 0x1bd, 0x169, 0x1bd, 0x169, +0x2d8, 0x244, 0x2d8, 0x244, 0x43a, 0x364, 0x43a, 0x364, 0x579, 0x460, 0x579, +0x460, 0x6b0, 0x553, 0x6b0, 0x553, 0x83b, 0x699, 0x83b, 0x699, 0x9c5, 0x7dd, +0x9c5, 0x7dd, 0x9c5, 0x7dd, 0xb56, 0x928, 0xb56, 0x928, 0xc81, 0xa0e, 0xc81, +0xa0e, 0xe58, 0xba1, 0xe58, 0xba1, 0x10b1, 0xdb9, 0x10b1, 0xdb9, 0x12a2, 0xf6a, +0x12a2, 0xf6a, 0x12a2, 0xf6a, 0x14fd, 0x1189, 0x14fd, 0x1189, 0x171d, 0x1370, 0x171d, +0x1370, 0x1921, 0x1541, 0x1921, 0x1541, 0x1afb, 0x16ed, 0x1afb, 0x16ed, 0x1c6e, 0x1837, +0x1c6e, 0x1837, 0x1e70, 0x1a16, 0x1e70, 0x1a16, 0x1e70, 0x1a16, 0x1fe7, 0x1b73, 0x1fe7, +0x1b73, 0x213c, 0x1cb4, 0x213c, 0x1cb4, 0x22b7, 0x1e24, 0x22b7, 0x1e24, 0x23d2, 0x1f3d, +0x23d2, 0x1f3d, 0x24db, 0x204b, 0x24db, 0x204b, 0x2510, 0x208f, 0x2510, 0x208f, 0x2510, +0x208f, 0x24c8, 0x205d, 0x24c8, 0x205d, 0x2461, 0x2016, 0x2461, 0x2016, 0x2392, 0x1f6e, +0x2392, 0x1f6e, 0x2205, 0x1e11, 0x2205, 0x1e11, 0x2057, 0x1c99, 0x2057, 0x1c99, 0x2057, +0x1c99, 0x1f44, 0x1bc4, 0x1f44, 0x1bc4, 0x1ecb, 0x1b8e, 0x1ecb, 0x1b8e, 0x1e83, 0x1b8c, +0x1e83, 0x1b8c, 0x1da1, 0x1af5, 0x1da1, 0x1af5, 0x1c0c, 0x19af, 0x1c0c, 0x19af, 0x1a46, +0x1837, 0x1a46, 0x1837, 0x1a46, 0x1837, 0x18e8, 0x1729, 0x18e8, 0x1729, 0x1787, 0x1617, +0x1787, 0x1617, 0x15bf, 0x149c, 0x15bf, 0x149c, 0x13ad, 0x12d4, 0x13ad, 0x12d4, 0x1209, +0x1177, 0x1209, 0x1177, 0x1075, 0x1025, 0x1075, 0x1025, 0x1075, 0x1025, 0xed3, 0xebf, +0xed3, 0xebf, 0xd9f, 0xdc1, 0xd9f, 0xdc1, 0xbd7, 0xc28, 0xbd7, 0xc28, 0x9cc, +0xa46, 0x9cc, 0xa46, 0x796, 0x832, 0x796, 0x832, 0x796, 0x832, 0x579, 0x630, +0x579, 0x630, 0x3a8, 0x474, 0x3a8, 0x474, 0x1e0, 0x2b9, 0x1e0, 0x2b9, 0xaf, +0x191, 0xaf, 0x191, 0xffca, 0xaf, 0xffca, 0xaf, 0xfed6, 0xffbb, 0xfed6, 0xffbb, +0xfed6, 0xffbb, 0xfe2f, 0xff0f, 0xfe2f, 0xff0f, 0xfd78, 0xfe52, 0xfd78, 0xfe52, 0xfcbc, +0xfd8e, 0xfcbc, 0xfd8e, 0xfca4, 0xfd6e, 0xfca4, 0xfd6e, 0xfc6d, 0xfd2e, 0xfc6d, 0xfd2e, +0xfc6c, 0xfd27, 0xfc6c, 0xfd27, 0xfc6c, 0xfd27, 0xfc89, 0xfd3f, 0xfc89, 0xfd3f, 0xfd18, +0xfdcc, 0xfd18, 0xfdcc, 0xfdd3, 0xfe88, 0xfdd3, 0xfe88, 0xfdc5, 0xfe80, 0xfdc5, 0xfe80, +0xfdf1, 0xfeb4, 0xfdf1, 0xfeb4, 0xfdf1, 0xfeb4, 0xfd69, 0xfe39, 0xfd69, 0xfe39, 0xfc88, +0xfd68, 0xfc88, 0xfd68, 0xfc33, 0xfd27, 0xfc33, 0xfd27, 0xfc2d, 0xfd38, 0xfc2d, 0xfd38, +0xfba1, 0xfcc6, 0xfba1, 0xfcc6, 0xfa5d, 0xfb9d, 0xfa5d, 0xfb9d, 0xfa5d, 0xfb9d, 0xf911, +0xfa6d, 0xf911, 0xfa6d, 0xf789, 0xf901, 0xf789, 0xf901, 0xf689, 0xf81d, 0xf689, 0xf81d, +0xf590, 0xf73c, 0xf590, 0xf73c, 0xf3fb, 0xf5bd, 0xf3fb, 0xf5bd, 0xf3fb, 0xf5bd, 0xf24c, +0xf420, 0xf24c, 0xf420, 0xf110, 0xf2f1, 0xf110, 0xf2f1, 0xeff5, 0xf1de, 0xeff5, 0xf1de, +0xeeed, 0xf0d6, 0xeeed, 0xf0d6, 0xee72, 0xf057, 0xee72, 0xf057, 0xee6c, 0xf044, 0xee6c, +0xf044, 0xee6c, 0xf044, 0xeeee, 0xf0b2, 0xeeee, 0xf0b2, 0xef59, 0xf103, 0xef59, 0xf103, +0xefd5, 0xf15e, 0xefd5, 0xf15e, 0xf05f, 0xf1c0, 0xf05f, 0xf1c0, 0xf0f9, 0xf22c, 0xf0f9, +0xf22c, 0xf22c, 0xf32c, 0xf22c, 0xf32c, 0xf22c, 0xf32c, 0xf391, 0xf45a, 0xf391, 0xf45a, +0xf53d, 0xf5cc, 0xf53d, 0xf5cc, 0xf73f, 0xf791, 0xf73f, 0xf791, 0xf970, 0xf984, 0xf970, +0xf984, 0xfbde, 0xfbb4, 0xfbde, 0xfbb4, 0xfbde, 0xfbb4, 0xfe1f, 0xfdb9, 0xfe1f, 0xfdb9, +0x40, 0xff9f, 0x40, 0xff9f, 0x240, 0x168, 0x240, 0x168, 0x419, 0x30d, 0x419, +0x30d, 0x62f, 0x4f4, 0x62f, 0x4f4, 0x77d, 0x619, 0x77d, 0x619, 0x77d, 0x619, +0x89a, 0x712, 0x89a, 0x712, 0x9fe, 0x859, 0x9fe, 0x859, 0xade, 0x922, 0xade, +0x922, 0xbda, 0xa0e, 0xbda, 0xa0e, 0xca2, 0xacd, 0xca2, 0xacd, 0xd5c, 0xb82, +0xd5c, 0xb82, 0xd5c, 0xb82, 0xdf3, 0xc1a, 0xdf3, 0xc1a, 0xe3d, 0xc6a, 0xe3d, +0xc6a, 0xec5, 0xcfd, 0xec5, 0xcfd, 0xedb, 0xd21, 0xedb, 0xd21, 0xe78, 0xccf, +0xe78, 0xccf, 0xe78, 0xccf, 0xe5a, 0xcc4, 0xe5a, 0xcc4, 0xeb1, 0xd2f, 0xeb1, +0xd2f, 0xeb7, 0xd4a, 0xeb7, 0xd4a, 0xe45, 0xceb, 0xe45, 0xceb, 0xded, 0xca7, +0xded, 0xca7, 0xcd3, 0xb9e, 0xcd3, 0xb9e, 0xcd3, 0xb9e, 0xb96, 0xa70, 0xb96, +0xa70, 0xb29, 0xa11, 0xb29, 0xa11, 0xaa6, 0x999, 0xaa6, 0x999, 0xa53, 0x94e, +0xa53, 0x94e, 0x9d1, 0x8d2, 0x9d1, 0x8d2, 0x965, 0x868, 0x965, 0x868, 0x965, +0x868, 0x9ce, 0x8d2, 0x9ce, 0x8d2, 0xa02, 0x906, 0xa02, 0x906, 0x9ec, 0x8ee, +0x9ec, 0x8ee, 0x964, 0x862, 0x964, 0x862, 0x8a6, 0x79f, 0x8a6, 0x79f, 0x8a6, +0x79f, 0x864, 0x75a, 0x864, 0x75a, 0x7ce, 0x6bf, 0x7ce, 0x6bf, 0x676, 0x564, +0x676, 0x564, 0x563, 0x450, 0x563, 0x450, 0x516, 0x402, 0x516, 0x402, 0x4b7, +0x3a6, 0x4b7, 0x3a6, 0x4b7, 0x3a6, 0x481, 0x374, 0x481, 0x374, 0x4b7, 0x3b1, +0x4b7, 0x3b1, 0x496, 0x399, 0x496, 0x399, 0x49c, 0x3aa, 0x49c, 0x3aa, 0x495, +0x3b1, 0x495, 0x3b1, 0x426, 0x351, 0x426, 0x351, 0x426, 0x351, 0x3fe, 0x339, +0x3fe, 0x339, 0x439, 0x386, 0x439, 0x386, 0x50d, 0x46b, 0x50d, 0x46b, 0x60b, +0x57c, 0x60b, 0x57c, 0x6b0, 0x632, 0x6b0, 0x632, 0x6b0, 0x632, 0x707, 0x699, +0x707, 0x699, 0x6b2, 0x652, 0x6b2, 0x652, 0x57c, 0x528, 0x57c, 0x528, 0x48a, +0x43f, 0x48a, 0x43f, 0x3d7, 0x393, 0x3d7, 0x393, 0x305, 0x2c2, 0x305, 0x2c2, +0x305, 0x2c2, 0x27c, 0x238, 0x27c, 0x238, 0x1cd, 0x183, 0x1cd, 0x183, 0x181, +0x12f, 0x181, 0x12f, 0x120, 0xc0, 0x120, 0xc0, 0x9f, 0x2d, 0x9f, 0x2d, +0x59, 0xffd3, 0x59, 0xffd3, 0x59, 0xffd3, 0x63, 0xffc5, 0x63, 0xffc5, 0x105, +0x4c, 0x105, 0x4c, 0x1e7, 0x111, 0x1e7, 0x111, 0x381, 0x28d, 0x381, 0x28d, +0x515, 0x401, 0x515, 0x401, 0x515, 0x401, 0x6d2, 0x59f, 0x6d2, 0x59f, 0x901, +0x7af, 0x901, 0x7af, 0xb42, 0x9d2, 0xb42, 0x9d2, 0xd41, 0xbb5, 0xd41, 0xbb5, +0xe77, 0xcd0, 0xe77, 0xcd0, 0xfe7, 0xe2a, 0xfe7, 0xe2a, 0xfe7, 0xe2a, 0x11ae, +0xfdf, 0x11ae, 0xfdf, 0x132b, 0x114c, 0x132b, 0x114c, 0x149a, 0x12b1, 0x149a, 0x12b1, +0x1644, 0x1455, 0x1644, 0x1455, 0x1778, 0x1588, 0x1778, 0x1588, 0x184b, 0x165f, 0x184b, +0x165f, 0x184b, 0x165f, 0x1873, 0x1690, 0x1873, 0x1690, 0x17b9, 0x15e4, 0x17b9, 0x15e4, +0x16ea, 0x1526, 0x16ea, 0x1526, 0x15f6, 0x1449, 0x15f6, 0x1449, 0x14f8, 0x1365, 0x14f8, +0x1365, 0x14f8, 0x1365, 0x13d2, 0x125d, 0x13d2, 0x125d, 0x12a0, 0x114b, 0x12a0, 0x114b, +0x11aa, 0x1079, 0x11aa, 0x1079, 0x10f0, 0xfe3, 0x10f0, 0xfe3, 0x102e, 0xf47, 0x102e, +0xf47, 0xf55, 0xe95, 0xf55, 0xe95, 0xf55, 0xe95, 0xe1d, 0xd83, 0xe1d, 0xd83, +0xd33, 0xcbe, 0xd33, 0xcbe, 0xcce, 0xc7e, 0xcce, 0xc7e, 0xc22, 0xbf5, 0xc22, +0xbf5, 0xb5e, 0xb51, 0xb5e, 0xb51, 0xa01, 0xa13, 0xa01, 0xa13, 0xa01, 0xa13, +0x8ee, 0x91b, 0x8ee, 0x91b, 0x7ff, 0x844, 0x7ff, 0x844, 0x6c3, 0x71e, 0x6c3, +0x71e, 0x5a5, 0x611, 0x5a5, 0x611, 0x4ab, 0x525, 0x4ab, 0x525, 0x4ab, 0x525, +0x42a, 0x4b0, 0x42a, 0x4b0, 0x388, 0x415, 0x388, 0x415, 0x369, 0x3fc, 0x369, +0x3fc, 0x337, 0x3cb, 0x337, 0x3cb, 0x279, 0x30d, 0x279, 0x30d, 0x1ed, 0x27f, +0x1ed, 0x27f, 0x1ed, 0x27f, 0x183, 0x210, 0x183, 0x210, 0x121, 0x1aa, 0x121, +0x1aa, 0x23, 0xa6, 0x23, 0xa6, 0xff25, 0xffa2, 0xff25, 0xffa2, 0xfdf2, 0xfe6a, +0xfdf2, 0xfe6a, 0xfc38, 0xfcab, 0xfc38, 0xfcab, 0xfc38, 0xfcab, 0xfb07, 0xfb75, 0xfb07, +0xfb75, 0xfa09, 0xfa75, 0xfa09, 0xfa75, 0xf928, 0xf995, 0xf928, 0xf995, 0xf8bb, 0xf92a, +0xf8bb, 0xf92a, 0xf83b, 0xf8af, 0xf83b, 0xf8af, 0xf83b, 0xf8af, 0xf7c6, 0xf840, 0xf7c6, +0xf840, 0xf734, 0xf7b9, 0xf734, 0xf7b9, 0xf650, 0xf6e1, 0xf650, 0xf6e1, 0xf5a7, 0xf649, +0xf5a7, 0xf649, 0xf579, 0xf62d, 0xf579, 0xf62d, 0xf5b4, 0xf67e, 0xf5b4, 0xf67e, 0xf5b4, +0xf67e, 0xf5a8, 0xf68a, 0xf5a8, 0xf68a, 0xf509, 0xf605, 0xf509, 0xf605, 0xf419, 0xf532, +0xf419, 0xf532, 0xf324, 0xf45b, 0xf324, 0xf45b, 0xf285, 0xf3db, 0xf285, 0xf3db, 0xf285, +0xf3db, 0xf1db, 0xf350, 0xf1db, 0xf350, 0xf11f, 0xf2b4, 0xf11f, 0xf2b4, 0xf050, 0xf205, +0xf050, 0xf205, 0xefa7, 0xf17b, 0xefa7, 0xf17b, 0xef30, 0xf122, 0xef30, 0xf122, 0xee4a, +0xf058, 0xee4a, 0xf058, 0xee4a, 0xf058, 0xed60, 0xef89, 0xed60, 0xef89, 0xecab, 0xeeec, +0xecab, 0xeeec, 0xec79, 0xeed0, 0xec79, 0xeed0, 0xec65, 0xeece, 0xec65, 0xeece, 0xebb5, +0xee2d, 0xebb5, 0xee2d, 0xeb15, 0xed99, 0xeb15, 0xed99, 0xeb15, 0xed99, 0xeaf4, 0xed7f, +0xeaf4, 0xed7f, 0xeb4c, 0xeddc, 0xeb4c, 0xeddc, 0xeb7f, 0xee0f, 0xeb7f, 0xee0f, 0xebcb, +0xee58, 0xebcb, 0xee58, 0xece6, 0xef6d, 0xece6, 0xef6d, 0xece6, 0xef6d, 0xee6b, 0xf0e8, +0xee6b, 0xf0e8, 0xef66, 0xf1d6, 0xef66, 0xf1d6, 0xf072, 0xf2d3, 0xf072, 0xf2d3, 0xf19e, +0xf3ee, 0xf19e, 0xf3ee, 0xf223, 0xf460, 0xf223, 0xf460, 0xf2c5, 0xf4ee, 0xf2c5, 0xf4ee, +0xf2c5, 0xf4ee, 0xf2a1, 0xf4b5, 0xf2a1, 0xf4b5, 0xf26d, 0xf46d, 0xf26d, 0xf46d, 0xf241, +0xf42b, 0xf241, 0xf42b, 0xf181, 0xf357, 0xf181, 0xf357, 0xf113, 0xf2d6, 0xf113, 0xf2d6, +0xf086, 0xf239, 0xf086, 0xf239, 0xf086, 0xf239, 0xf01b, 0xf1be, 0xf01b, 0xf1be, 0xef6d, +0xf104, 0xef6d, 0xf104, 0xeed0, 0xf05e, 0xeed0, 0xf05e, 0xee0f, 0xef98, 0xee0f, 0xef98, +0xed6f, 0xeef7, 0xed6f, 0xeef7, 0xed6f, 0xeef7, 0xed17, 0xeea0, 0xed17, 0xeea0, 0xec99, +0xee27, 0xec99, 0xee27, 0xeccc, 0xee63, 0xeccc, 0xee63, 0xecf7, 0xee9b, 0xecf7, 0xee9b, +0xed5c, 0xef11, 0xed5c, 0xef11, 0xed37, 0xeeff, 0xed37, 0xeeff, 0xed37, 0xeeff, 0xebd8, +0xedb6, 0xebd8, 0xedb6, 0xea43, 0xec39, 0xea43, 0xec39, 0xe8b1, 0xeac1, 0xe8b1, 0xeac1, +0xe727, 0xe954, 0xe727, 0xe954, 0xe62f, 0xe878, 0xe62f, 0xe878, 0xe588, 0xe7ee, 0xe588, +0xe7ee, 0xe588, 0xe7ee, 0xe4a5, 0xe726, 0xe4a5, 0xe726, 0xe478, 0xe715, 0xe478, 0xe715, +0xe49d, 0xe754, 0xe49d, 0xe754, 0xe489, 0xe757, 0xe489, 0xe757, 0xe3f4, 0xe6d7, 0xe3f4, +0xe6d7, 0xe3f4, 0xe6d7, 0xe2f7, 0xe5eb, 0xe2f7, 0xe5eb, 0xe22b, 0xe52c, 0xe22b, 0xe52c, +0xe166, 0xe470, 0xe166, 0xe470, 0xe097, 0xe3a6, 0xe097, 0xe3a6, 0xe03d, 0xe34c, 0xe03d, +0xe34c, 0xdfef, 0xe2fa, 0xdfef, 0xe2fa, 0xdfef, 0xe2fa, 0xdf93, 0xe295, 0xdf93, 0xe295, +0xe027, 0xe31b, 0xe027, 0xe31b, 0xe0b5, 0xe398, 0xe0b5, 0xe398, 0xe1a3, 0xe46f, 0xe1a3, +0xe46f, 0xe2ea, 0xe59b, 0xe2ea, 0xe59b, 0xe458, 0xe6ea, 0xe458, 0xe6ea, 0xe458, 0xe6ea, +0xe620, 0xe891, 0xe620, 0xe891, 0xe7a2, 0xe9ee, 0xe7a2, 0xe9ee, 0xe972, 0xeb97, 0xe972, +0xeb97, 0xeb6f, 0xed6a, 0xeb6f, 0xed6a, 0xee69, 0xf039, 0xee69, 0xf039, 0xee69, 0xf039, +0xf141, 0xf2e4, 0xf141, 0xf2e4, 0xf371, 0xf4e7, 0xf371, 0xf4e7, 0xf5ba, 0xf701, 0xf5ba, +0xf701, 0xf7b2, 0xf8cb, 0xf7b2, 0xf8cb, 0xf9de, 0xfac7, 0xf9de, 0xfac7, 0xfb9f, 0xfc59, +0xfb9f, 0xfc59, 0xfb9f, 0xfc59, 0xfd72, 0xfdfc, 0xfd72, 0xfdfc, 0xff2d, 0xff87, 0xff2d, +0xff87, 0x7d, 0xa8, 0x7d, 0xa8, 0x1b7, 0x1b2, 0x1b7, 0x1b2, 0x2bd, 0x288, +0x2bd, 0x288, 0x3ee, 0x388, 0x3ee, 0x388, 0x3ee, 0x388, 0x4c1, 0x42b, 0x4c1, +0x42b, 0x5a4, 0x4dc, 0x5a4, 0x4dc, 0x6f9, 0x5ff, 0x6f9, 0x5ff, 0x869, 0x73b, +0x869, 0x73b, 0x997, 0x835, 0x997, 0x835, 0x997, 0x835, 0xa92, 0x8fa, 0xa92, +0x8fa, 0xbc1, 0x9f3, 0xbc1, 0x9f3, 0xce8, 0xae2, 0xce8, 0xae2, 0xe52, 0xc14, +0xe52, 0xc14, 0x1059, 0xde2, 0x1059, 0xde2, 0x1275, 0xfc6, 0x1275, 0xfc6, 0x1275, +0xfc6, 0x1418, 0x1131, 0x1418, 0x1131, 0x15f8, 0x12db, 0x15f8, 0x12db, 0x1838, 0x14e4, +0x1838, 0x14e4, 0x1a66, 0x16df, 0x1a66, 0x16df, 0x1cc2, 0x190b, 0x1cc2, 0x190b, 0x1eaa, +0x1ac6, 0x1eaa, 0x1ac6, 0x1eaa, 0x1ac6, 0x204c, 0x1c41, 0x204c, 0x1c41, 0x21ac, 0x1d7d, +0x21ac, 0x1d7d, 0x2269, 0x1e1c, 0x2269, 0x1e1c, 0x22a2, 0x1e3f, 0x22a2, 0x1e3f, 0x2251, +0x1dde, 0x2251, 0x1dde, 0x2251, 0x1dde, 0x222b, 0x1daf, 0x222b, 0x1daf, 0x220f, 0x1d94, +0x220f, 0x1d94, 0x21c7, 0x1d53, 0x21c7, 0x1d53, 0x210f, 0x1caa, 0x210f, 0x1caa, 0x1fcf, +0x1b83, 0x1fcf, 0x1b83, 0x1f07, 0x1ada, 0x1f07, 0x1ada, 0x1f07, 0x1ada, 0x1e67, 0x1a62, +0x1e67, 0x1a62, 0x1d15, 0x193f, 0x1d15, 0x193f, 0x1be1, 0x183f, 0x1be1, 0x183f, 0x1b37, +0x17d0, 0x1b37, 0x17d0, 0x1a7b, 0x1754, 0x1a7b, 0x1754, 0x1935, 0x1651, 0x1935, 0x1651, +0x1935, 0x1651, 0x1774, 0x14d7, 0x1774, 0x14d7, 0x1605, 0x13b1, 0x1605, 0x13b1, 0x142c, +0x1221, 0x142c, 0x1221, 0x122b, 0x1068, 0x122b, 0x1068, 0x1038, 0xebd, 0x1038, 0xebd, +0x1038, 0xebd, 0xe59, 0xd23, 0xe59, 0xd23, 0xcf9, 0xc04, 0xcf9, 0xc04, 0xb52, +0xa9a, 0xb52, 0xa9a, 0x9bd, 0x93d, 0x9bd, 0x93d, 0x79e, 0x752, 0x79e, 0x752, +0x5d9, 0x5ba, 0x5d9, 0x5ba, 0x5d9, 0x5ba, 0x42a, 0x433, 0x42a, 0x433, 0x24e, +0x279, 0x24e, 0x279, 0x137, 0x17e, 0x137, 0x17e, 0xffcf, 0x2c, 0xffcf, 0x2c, +0xfec1, 0xff2f, 0xfec1, 0xff2f, 0xfdb6, 0xfe32, 0xfdb6, 0xfe32, 0xfdb6, 0xfe32, 0xfcc1, +0xfd46, 0xfcc1, 0xfd46, 0xfc21, 0xfcac, 0xfc21, 0xfcac, 0xfbac, 0xfc3c, 0xfbac, 0xfc3c, +0xfb88, 0xfc1a, 0xfb88, 0xfc1a, 0xfba5, 0xfc3a, 0xfba5, 0xfc3a, 0xfba5, 0xfc3a, 0xfbe7, +0xfc7f, 0xfbe7, 0xfc7f, 0xfc05, 0xfca2, 0xfc05, 0xfca2, 0xfc67, 0xfd0c, 0xfc67, 0xfd0c, +0xfc1b, 0xfcca, 0xfc1b, 0xfcca, 0xfb7b, 0xfc36, 0xfb7b, 0xfc36, 0xfac4, 0xfb91, 0xfac4, +0xfb91, 0xfac4, 0xfb91, 0xfa29, 0xfb0a, 0xfa29, 0xfb0a, 0xfa06, 0xfb00, 0xfa06, 0xfb00, +0xf9b8, 0xface, 0xf9b8, 0xface, 0xf943, 0xfa79, 0xf943, 0xfa79, 0xf841, 0xf99a, 0xf841, +0xf99a, 0xf841, 0xf99a, 0xf74a, 0xf8c7, 0xf74a, 0xf8c7, 0xf6a2, 0xf845, 0xf6a2, 0xf845, +0xf57e, 0xf748, 0xf57e, 0xf748, 0xf3fb, 0xf5eb, 0xf3fb, 0xf5eb, 0xf2a6, 0xf4bb, 0xf2a6, +0xf4bb, 0xf15d, 0xf393, 0xf15d, 0xf393, 0xf15d, 0xf393, 0xf015, 0xf269, 0xf015, 0xf269, +0xeed2, 0xf13e, 0xeed2, 0xf13e, 0xede0, 0xf05f, 0xede0, 0xf05f, 0xed42, 0xefcd, 0xed42, +0xefcd, 0xecd2, 0xef60, 0xecd2, 0xef60, 0xecad, 0xef36, 0xecad, 0xef36, 0xecad, 0xef36, +0xec50, 0xeecc, 0xec50, 0xeecc, 0xec19, 0xee7d, 0xec19, 0xee7d, 0xec14, 0xee58, 0xec14, +0xee58, 0xed17, 0xef32, 0xed17, 0xef32, 0xeed0, 0xf0b9, 0xeed0, 0xf0b9, 0xeed0, 0xf0b9, +0xf068, 0xf216, 0xf068, 0xf216, 0xf24d, 0xf3b9, 0xf24d, 0xf3b9, 0xf413, 0xf535, 0xf413, +0xf535, 0xf65f, 0xf734, 0xf65f, 0xf734, 0xf889, 0xf90a, 0xf889, 0xf90a, 0xfa73, 0xfa9f, +0xfa73, 0xfa9f, 0xfa73, 0xfa9f, 0xfcc8, 0xfc9d, 0xfcc8, 0xfc9d, 0xfeab, 0xfe29, 0xfeab, +0xfe29, 0xaf, 0xffd7, 0xaf, 0xffd7, 0x33f, 0x213, 0x33f, 0x213, 0x575, 0x3fa, +0x575, 0x3fa, 0x713, 0x54e, 0x713, 0x54e, 0x713, 0x54e, 0x898, 0x690, 0x898, +0x690, 0x9f3, 0x7af, 0x9f3, 0x7af, 0xb3a, 0x8c2, 0xb3a, 0x8c2, 0xc83, 0x9e0, +0xc83, 0x9e0, 0xdcb, 0xb07, 0xdcb, 0xb07, 0xdcb, 0xb07, 0xef5, 0xc19, 0xef5, +0xc19, 0xf33, 0xc48, 0xf33, 0xc48, 0xf23, 0xc33, 0xf23, 0xc33, 0xf78, 0xc8b, +0xf78, 0xc8b, 0xfd6, 0xcf6, 0xfd6, 0xcf6, 0x1011, 0xd44, 0x1011, 0xd44, 0x1011, +0xd44, 0x1028, 0xd76, 0x1028, 0xd76, 0x1073, 0xde2, 0x1073, 0xde2, 0x106c, 0xe01, +0x106c, 0xe01, 0x1002, 0xdc1, 0x1002, 0xdc1, 0xf19, 0xd05, 0xf19, 0xd05, 0xe47, +0xc62, 0xe47, 0xc62, 0xe47, 0xc62, 0xe04, 0xc50, 0xe04, 0xc50, 0xd9a, 0xc17, +0xd9a, 0xc17, 0xdc0, 0xc6d, 0xdc0, 0xc6d, 0xd93, 0xc6f, 0xd93, 0xc6f, 0xd5e, +0xc67, 0xd5e, 0xc67, 0xd5e, 0xc67, 0xd85, 0xcb9, 0xd85, 0xcb9, 0xcfb, 0xc57, +0xcfb, 0xc57, 0xc52, 0xbd4, 0xc52, 0xbd4, 0xbc1, 0xb65, 0xbc1, 0xb65, 0xba6, +0xb6a, 0xba6, 0xb6a, 0xbac, 0xb8c, 0xbac, 0xb8c, 0xbac, 0xb8c, 0xb21, 0xb1b, +0xb21, 0xb1b, 0x9e4, 0x9f6, 0x9e4, 0x9f6, 0x8ca, 0x8f1, 0x8ca, 0x8f1, 0x87a, +0x8b3, 0x87a, 0x8b3, 0x82e, 0x877, 0x82e, 0x877, 0x765, 0x7bd, 0x765, 0x7bd, +0x765, 0x7bd, 0x72d, 0x793, 0x72d, 0x793, 0x763, 0x7d5, 0x763, 0x7d5, 0x700, +0x77d, 0x700, 0x77d, 0x6e0, 0x768, 0x6e0, 0x768, 0x6ed, 0x77d, 0x6ed, 0x77d, +0x6ed, 0x77d, 0x74b, 0x7e3, 0x74b, 0x7e3, 0x775, 0x812, 0x775, 0x812, 0x79c, +0x83e, 0x79c, 0x83e, 0x847, 0x8eb, 0x847, 0x8eb, 0x85e, 0x903, 0x85e, 0x903, +0x863, 0x905, 0x863, 0x905, 0x863, 0x905, 0x85f, 0x8fc, 0x85f, 0x8fc, 0x80d, +0x8a1, 0x80d, 0x8a1, 0x71b, 0x7a3, 0x71b, 0x7a3, 0x59d, 0x614, 0x59d, 0x614, +0x438, 0x49b, 0x438, 0x49b, 0x340, 0x38b, 0x340, 0x38b, 0x340, 0x38b, 0x270, +0x29e, 0x270, 0x29e, 0x169, 0x176, 0x169, 0x176, 0xe2, 0xca, 0xe2, 0xca, +0x10d, 0xcc, 0x10d, 0xcc, 0xe2, 0x74, 0xe2, 0x74, 0xe2, 0x74, 0xb6, +0x19, 0xb6, 0x19, 0x15c, 0x8d, 0x15c, 0x8d, 0x1b1, 0xad, 0x1b1, 0xad, +0x1fc, 0xc3, 0x1fc, 0xc3, 0x2a4, 0x135, 0x2a4, 0x135, 0x437, 0x292, 0x437, +0x292, 0x437, 0x292, 0x687, 0x4ae, 0x687, 0x4ae, 0x83f, 0x633, 0x83f, 0x633, +0x9d8, 0x79d, 0x9d8, 0x79d, 0xb47, 0x8e0, 0xb47, 0x8e0, 0xcf1, 0xa63, 0xcf1, +0xa63, 0xeed, 0xc3c, 0xeed, 0xc3c, 0xeed, 0xc3c, 0x108c, 0xdbe, 0x108c, 0xdbe, +0x11a6, 0xec2, 0x11a6, 0xec2, 0x130a, 0x1016, 0x130a, 0x1016, 0x1471, 0x1175, 0x1471, +0x1175, 0x1514, 0x1215, 0x1514, 0x1215, 0x1514, 0x1215, 0x1551, 0x1257, 0x1551, 0x1257, +0x14dd, 0x11ef, 0x14dd, 0x11ef, 0x1418, 0x113d, 0x1418, 0x113d, 0x1357, 0x1094, 0x1357, +0x1094, 0x1308, 0x1064, 0x1308, 0x1064, 0x1270, 0xff0, 0x1270, 0xff0, 0x1270, 0xff0, +0x1177, 0xf20, 0x1177, 0xf20, 0x10a9, 0xe7d, 0x10a9, 0xe7d, 0xf9a, 0xd9e, 0xf9a, +0xd9e, 0xeb6, 0xceb, 0xeb6, 0xceb, 0xd5b, 0xbc4, 0xd5b, 0xbc4, 0xc84, 0xb20, +0xc84, 0xb20, 0xc84, 0xb20, 0xc02, 0xad2, 0xc02, 0xad2, 0xafd, 0xa00, 0xafd, +0xa00, 0xa71, 0x9a5, 0xa71, 0x9a5, 0x95c, 0x8c0, 0x95c, 0x8c0, 0x7ce, 0x75f, +0x7ce, 0x75f, 0x7ce, 0x75f, 0x647, 0x601, 0x647, 0x601, 0x50d, 0x4ec, 0x50d, +0x4ec, 0x43a, 0x43c, 0x43a, 0x43c, 0x2fb, 0x31c, 0x2fb, 0x31c, 0x1e7, 0x223, +0x1e7, 0x223, 0x159, 0x1ac, 0x159, 0x1ac, 0x159, 0x1ac, 0x151, 0x1b7, 0x151, +0x1b7, 0x17d, 0x1f3, 0x17d, 0x1f3, 0x15a, 0x1dd, 0x15a, 0x1dd, 0x120, 0x1ae, +0x120, 0x1ae, 0xcd, 0x163, 0xcd, 0x163, 0x89, 0x126, 0x89, 0x126, 0x89, +0x126, 0xffd7, 0x79, 0xffd7, 0x79, 0xfe9b, 0xff42, 0xfe9b, 0xff42, 0xfda0, 0xfe4c, +0xfda0, 0xfe4c, 0xfcc5, 0xfd76, 0xfcc5, 0xfd76, 0xfbbb, 0xfc72, 0xfbbb, 0xfc72, 0xfbbb, +0xfc72, 0xfb04, 0xfbc2, 0xfb04, 0xfbc2, 0xfa76, 0xfb3e, 0xfa76, 0xfb3e, 0xf986, 0xfa58, +0xf986, 0xfa58, 0xf87d, 0xf95d, 0xf87d, 0xf95d, 0xf788, 0xf878, 0xf788, 0xf878, 0xf6e7, +0xf7e8, 0xf6e7, 0xf7e8, 0xf6e7, 0xf7e8, 0xf643, 0xf759, 0xf643, 0xf759, 0xf5a9, 0xf6d7, +0xf5a9, 0xf6d7, 0xf597, 0xf6de, 0xf597, 0xf6de, 0xf593, 0xf6f6, 0xf593, 0xf6f6, 0xf5ad, +0xf72d, 0xf5ad, 0xf72d, 0xf5ad, 0xf72d, 0xf5d5, 0xf774, 0xf5d5, 0xf774, 0xf5b3, 0xf772, +0xf5b3, 0xf772, 0xf5b4, 0xf792, 0xf5b4, 0xf792, 0xf5d7, 0xf7d5, 0xf5d7, 0xf7d5, 0xf5a4, +0xf7c2, 0xf5a4, 0xf7c2, 0xf4c1, 0xf6fd, 0xf4c1, 0xf6fd, 0xf4c1, 0xf6fd, 0xf39b, 0xf5f4, +0xf39b, 0xf5f4, 0xf320, 0xf593, 0xf320, 0xf593, 0xf27a, 0xf505, 0xf27a, 0xf505, 0xf1e4, +0xf484, 0xf1e4, 0xf484, 0xf108, 0xf3b9, 0xf108, 0xf3b9, 0xeffc, 0xf2bb, 0xeffc, 0xf2bb, +0xeffc, 0xf2bb, 0xefe9, 0xf2b1, 0xefe9, 0xf2b1, 0xef14, 0xf1e1, 0xef14, 0xf1e1, 0xee2f, +0xf0fd, 0xee2f, 0xf0fd, 0xed3f, 0xf009, 0xed3f, 0xf009, 0xecad, 0xef70, 0xecad, 0xef70, +0xecad, 0xef70, 0xece3, 0xef99, 0xece3, 0xef99, 0xeccf, 0xef75, 0xeccf, 0xef75, 0xed64, +0xeff6, 0xed64, 0xeff6, 0xed83, 0xeffd, 0xed83, 0xeffd, 0xedf2, 0xf052, 0xedf2, 0xf052, +0xef0e, 0xf150, 0xef0e, 0xf150, 0xef0e, 0xf150, 0xf005, 0xf228, 0xf005, 0xf228, 0xf0f6, +0xf2f8, 0xf0f6, 0xf2f8, 0xf1d3, 0xf3b2, 0xf1d3, 0xf3b2, 0xf30d, 0xf4c9, 0xf30d, 0xf4c9, +0xf3c2, 0xf55b, 0xf3c2, 0xf55b, 0xf408, 0xf57f, 0xf408, 0xf57f, 0xf408, 0xf57f, 0xf3f3, +0xf548, 0xf3f3, 0xf548, 0xf336, 0xf46b, 0xf336, 0xf46b, 0xf246, 0xf35d, 0xf246, 0xf35d, +0xf1bc, 0xf2b8, 0xf1bc, 0xf2b8, 0xf1a5, 0xf287, 0xf1a5, 0xf287, 0xf1a5, 0xf287, 0xf1bc, +0xf289, 0xf1bc, 0xf289, 0xf1b3, 0xf26e, 0xf1b3, 0xf26e, 0xf124, 0xf1d1, 0xf124, 0xf1d1, +0xf04c, 0xf0ef, 0xf04c, 0xf0ef, 0xefc1, 0xf05e, 0xefc1, 0xf05e, 0xefbd, 0xf059, 0xefbd, +0xf059, 0xefbd, 0xf059, 0xef79, 0xf017, 0xef79, 0xf017, 0xef13, 0xefb8, 0xef13, 0xefb8, +0xef07, 0xefb7, 0xef07, 0xefb7, 0xef29, 0xefea, 0xef29, 0xefea, 0xeed2, 0xefa6, 0xeed2, +0xefa6, 0xed83, 0xee6e, 0xed83, 0xee6e, 0xed83, 0xee6e, 0xebad, 0xecb2, 0xebad, 0xecb2, +0xea6d, 0xeb90, 0xea6d, 0xeb90, 0xe97a, 0xeabd, 0xe97a, 0xeabd, 0xe85f, 0xe9c5, 0xe85f, +0xe9c5, 0xe795, 0xe91f, 0xe795, 0xe91f, 0xe795, 0xe91f, 0xe6a4, 0xe854, 0xe6a4, 0xe854, +0xe66d, 0xe843, 0xe66d, 0xe843, 0xe609, 0xe805, 0xe609, 0xe805, 0xe53f, 0xe761, 0xe53f, +0xe761, 0xe451, 0xe699, 0xe451, 0xe699, 0xe331, 0xe59c, 0xe331, 0xe59c, 0xe331, 0xe59c, +0xe30d, 0xe599, 0xe30d, 0xe599, 0xe240, 0xe4ea, 0xe240, 0xe4ea, 0xe18d, 0xe451, 0xe18d, +0xe451, 0xe0e6, 0xe3c1, 0xe0e6, 0xe3c1, 0xe041, 0xe32f, 0xe041, 0xe32f, 0xe069, 0xe364, +0xe069, 0xe364, 0xe069, 0xe364, 0xe061, 0xe365, 0xe061, 0xe365, 0xe124, 0xe42b, 0xe124, +0xe42b, 0xe19e, 0xe4a1, 0xe19e, 0xe4a1, 0xe23d, 0xe538, 0xe23d, 0xe538, 0xe356, 0xe642, +0xe356, 0xe642, 0xe356, 0xe642, 0xe43f, 0xe715, 0xe43f, 0xe715, 0xe5fd, 0xe8b7, 0xe5fd, +0xe8b7, 0xe7f6, 0xea8f, 0xe7f6, 0xea8f, 0xea23, 0xec95, 0xea23, 0xec95, 0xec50, 0xee96, +0xec50, 0xee96, 0xeeca, 0xf0df, 0xeeca, 0xf0df, 0xeeca, 0xf0df, 0xf14f, 0xf32d, 0xf14f, +0xf32d, 0xf349, 0xf4ee, 0xf349, 0xf4ee, 0xf563, 0xf6ca, 0xf563, 0xf6ca, 0xf773, 0xf899, +0xf773, 0xf899, 0xf9bd, 0xfaa0, 0xf9bd, 0xfaa0, 0xfb70, 0xfc0d, 0xfb70, 0xfc0d, 0xfb70, +0xfc0d, 0xfc93, 0xfcea, 0xfc93, 0xfcea, 0xfdb5, 0xfdc5, 0xfdb5, 0xfdc5, 0xfe91, 0xfe59, +0xfe91, 0xfe59, 0xff92, 0xff13, 0xff92, 0xff13, 0xb3, 0xffed, 0xb3, 0xffed, 0xb3, +0xffed, 0x21b, 0x110, 0x21b, 0x110, 0x366, 0x217, 0x366, 0x217, 0x49f, 0x30f, +0x49f, 0x30f, 0x575, 0x3a5, 0x575, 0x3a5, 0x607, 0x3fa, 0x607, 0x3fa, 0x6c8, +0x481, 0x6c8, 0x481, 0x6c8, 0x481, 0x77f, 0x501, 0x77f, 0x501, 0x908, 0x655, +0x908, 0x655, 0xa74, 0x790, 0xa74, 0x790, 0xbbf, 0x8ad, 0xbbf, 0x8ad, 0xd96, +0xa59, 0xd96, 0xa59, 0xf43, 0xbde, 0xf43, 0xbde, 0xf43, 0xbde, 0x1175, 0xdec, +0x1175, 0xdec, 0x1411, 0x1067, 0x1411, 0x1067, 0x1671, 0x12a9, 0x1671, 0x12a9, 0x18b5, +0x14d3, 0x18b5, 0x14d3, 0x1a82, 0x168b, 0x1a82, 0x168b, 0x1a82, 0x168b, 0x1c97, 0x188e, +0x1c97, 0x188e, 0x1e7d, 0x1a65, 0x1e7d, 0x1a65, 0x1f1d, 0x1afc, 0x1f1d, 0x1afc, 0x1f3f, +0x1b18, 0x1f3f, 0x1b18, 0x1f4d, 0x1b24, 0x1f4d, 0x1b24, 0x2007, 0x1be3, 0x2007, 0x1be3, +0x2007, 0x1be3, 0x207d, 0x1c61, 0x207d, 0x1c61, 0x20a7, 0x1c99, 0x20a7, 0x1c99, 0x209b, +0x1c9f, 0x209b, 0x1c9f, 0x2019, 0x1c35, 0x2019, 0x1c35, 0x1ff3, 0x1c2b, 0x1ff3, 0x1c2b, +0x1f03, 0x1b5e, 0x1f03, 0x1b5e, 0x1f03, 0x1b5e, 0x1e15, 0x1a97, 0x1e15, 0x1a97, 0x1d1d, +0x19ca, 0x1d1d, 0x19ca, 0x1c60, 0x193d, 0x1c60, 0x193d, 0x1c20, 0x1932, 0x1c20, 0x1932, +0x1b4d, 0x1898, 0x1b4d, 0x1898, 0x1b4d, 0x1898, 0x1a07, 0x178d, 0x1a07, 0x178d, 0x184b, +0x160f, 0x184b, 0x160f, 0x16c9, 0x14ce, 0x16c9, 0x14ce, 0x1530, 0x1377, 0x1530, 0x1377, +0x13db, 0x1265, 0x13db, 0x1265, 0x128b, 0x1157, 0x128b, 0x1157, 0x128b, 0x1157, 0x1104, +0x1013, 0x1104, 0x1013, 0xf90, 0xedf, 0xf90, 0xedf, 0xde0, 0xd6e, 0xde0, 0xd6e, +0xc3c, 0xc07, 0xc3c, 0xc07, 0xa72, 0xa75, 0xa72, 0xa75, 0x8e6, 0x920, 0x8e6, +0x920, 0x8e6, 0x920, 0x74c, 0x7b6, 0x74c, 0x7b6, 0x5bb, 0x653, 0x5bb, 0x653, +0x469, 0x52b, 0x469, 0x52b, 0x323, 0x409, 0x323, 0x409, 0x1e7, 0x2ed, 0x1e7, +0x2ed, 0x1e7, 0x2ed, 0x7c, 0x19d, 0x7c, 0x19d, 0xffbf, 0xf7, 0xffbf, 0xf7, +0xff7f, 0xcc, 0xff7f, 0xcc, 0xfec8, 0x24, 0xfec8, 0x24, 0xfe4d, 0xffb7, 0xfe4d, +0xffb7, 0xfde5, 0xff5a, 0xfde5, 0xff5a, 0xfde5, 0xff5a, 0xfda9, 0xff28, 0xfda9, 0xff28, +0xfe40, 0xffc8, 0xfe40, 0xffc8, 0xfe26, 0xffb6, 0xfe26, 0xffb6, 0xfd93, 0xff2a, 0xfd93, +0xff2a, 0xfced, 0xfe8c, 0xfced, 0xfe8c, 0xfced, 0xfe8c, 0xfc92, 0xfe3b, 0xfc92, 0xfe3b, +0xfc5f, 0xfe12, 0xfc5f, 0xfe12, 0xfb91, 0xfd4f, 0xfb91, 0xfd4f, 0xfb34, 0xfd00, 0xfb34, +0xfd00, 0xfacd, 0xfca8, 0xfacd, 0xfca8, 0xfab4, 0xfc9f, 0xfab4, 0xfc9f, 0xfab4, 0xfc9f, +0xfa1b, 0xfc17, 0xfa1b, 0xfc17, 0xf8bc, 0xfaca, 0xf8bc, 0xfaca, 0xf76c, 0xf98d, 0xf76c, +0xf98d, 0xf5c6, 0xf7f9, 0xf5c6, 0xf7f9, 0xf4f1, 0xf735, 0xf4f1, 0xf735, 0xf3a9, 0xf5fb, +0xf3a9, 0xf5fb, 0xf3a9, 0xf5fb, 0xf24a, 0xf4a9, 0xf24a, 0xf4a9, 0xf1b8, 0xf420, 0xf1b8, +0xf420, 0xf0d3, 0xf33f, 0xf0d3, 0xf33f, 0xefef, 0xf25b, 0xefef, 0xf25b, 0xeea3, 0xf109, +0xeea3, 0xf109, 0xeea3, 0xf109, 0xedad, 0xf006, 0xedad, 0xf006, 0xed62, 0xefa7, 0xed62, +0xefa7, 0xed8f, 0xefba, 0xed8f, 0xefba, 0xedf4, 0xeffb, 0xedf4, 0xeffb, 0xee89, 0xf066, +0xee89, 0xf066, 0xf003, 0xf1ad, 0xf003, 0xf1ad, 0xf003, 0xf1ad, 0xf173, 0xf2e3, 0xf173, +0xf2e3, 0xf32d, 0xf45c, 0xf32d, 0xf45c, 0xf53b, 0xf623, 0xf53b, 0xf623, 0xf731, 0xf7cc, +0xf731, 0xf7cc, 0xf8a2, 0xf8ec, 0xf8a2, 0xf8ec, 0xf9f5, 0xf9e9, 0xf9f5, 0xf9e9, 0xf9f5, +0xf9e9, 0xfc3c, 0xfbd9, 0xfc3c, 0xfbd9, 0xfe77, 0xfdbc, 0xfe77, 0xfdbc, 0x97, 0xff83, +0x97, 0xff83, 0x272, 0x107, 0x272, 0x107, 0x464, 0x2a6, 0x464, 0x2a6, 0x464, +0x2a6, 0x607, 0x3f9, 0x607, 0x3f9, 0x75b, 0x504, 0x75b, 0x504, 0x90a, 0x670, +0x90a, 0x670, 0xa1a, 0x745, 0xa1a, 0x745, 0xb4b, 0x845, 0xb4b, 0x845, 0xc2b, +0x8fc, 0xc2b, 0x8fc, 0xc2b, 0x8fc, 0xcf9, 0x9ab, 0xcf9, 0x9ab, 0xddb, 0xa7a, +0xddb, 0xa7a, 0xe05, 0xa9a, 0xe05, 0xa9a, 0xe65, 0xafb, 0xe65, 0xafb, 0xebf, +0xb60, 0xebf, 0xb60, 0xedf, 0xb95, 0xedf, 0xb95, 0xedf, 0xb95, 0xeb1, 0xb85, +0xeb1, 0xb85, 0xe16, 0xb10, 0xe16, 0xb10, 0xd81, 0xaa8, 0xd81, 0xaa8, 0xcd4, +0xa2e, 0xcd4, 0xa2e, 0xc87, 0xa19, 0xc87, 0xa19, 0xc87, 0xa19, 0xca3, 0xa70, +0xca3, 0xa70, 0xc33, 0xa3e, 0xc33, 0xa3e, 0xbeb, 0xa34, 0xbeb, 0xa34, 0xbc7, +0xa4e, 0xbc7, 0xa4e, 0xb99, 0xa5d, 0xb99, 0xa5d, 0xb3c, 0xa3b, 0xb3c, 0xa3b, +0xb3c, 0xa3b, 0xa6e, 0x9a4, 0xa6e, 0x9a4, 0x9e1, 0x949, 0x9e1, 0x949, 0x979, +0x910, 0x979, 0x910, 0x970, 0x92e, 0x970, 0x92e, 0x86e, 0x850, 0x86e, 0x850, +0x74e, 0x74d, 0x74e, 0x74d, 0x74e, 0x74d, 0x70b, 0x721, 0x70b, 0x721, 0x670, +0x699, 0x670, 0x699, 0x5fe, 0x634, 0x5fe, 0x634, 0x563, 0x5a1, 0x563, 0x5a1, +0x4de, 0x521, 0x4de, 0x521, 0x4de, 0x521, 0x430, 0x473, 0x430, 0x473, 0x3e8, +0x429, 0x3e8, 0x429, 0x464, 0x4a1, 0x464, 0x4a1, 0x497, 0x4ce, 0x497, 0x4ce, +0x4e2, 0x513, 0x4e2, 0x513, 0x545, 0x570, 0x545, 0x570, 0x545, 0x570, 0x5be, +0x5e2, 0x5be, 0x5e2, 0x642, 0x661, 0x642, 0x661, 0x6e8, 0x703, 0x6e8, 0x703, +0x739, 0x751, 0x739, 0x751, 0x789, 0x7a0, 0x789, 0x7a0, 0x82a, 0x841, 0x82a, +0x841, 0x82a, 0x841, 0x7c6, 0x7df, 0x7c6, 0x7df, 0x6f1, 0x70c, 0x6f1, 0x70c, +0x616, 0x634, 0x616, 0x634, 0x4bb, 0x4dd, 0x4bb, 0x4dd, 0x387, 0x3ac, 0x387, +0x3ac, 0x387, 0x3ac, 0x2a5, 0x2cc, 0x2a5, 0x2cc, 0x214, 0x23c, 0x214, 0x23c, +0x1a6, 0x1cc, 0x1a6, 0x1cc, 0x171, 0x193, 0x171, 0x193, 0x187, 0x1a2, 0x187, +0x1a2, 0x136, 0x145, 0x136, 0x145, 0x136, 0x145, 0x111, 0x110, 0x111, 0x110, +0x130, 0x11c, 0x130, 0x11c, 0x185, 0x158, 0x185, 0x158, 0x2a1, 0x258, 0x2a1, +0x258, 0x483, 0x419, 0x483, 0x419, 0x6a1, 0x612, 0x6a1, 0x612, 0x6a1, 0x612, +0x821, 0x76a, 0x821, 0x76a, 0x9b4, 0x8d1, 0x9b4, 0x8d1, 0xb68, 0xa58, 0xb68, +0xa58, 0xd2b, 0xbec, 0xd2b, 0xbec, 0xf20, 0xdb2, 0xf20, 0xdb2, 0xf20, 0xdb2, +0x10c1, 0xf24, 0x10c1, 0xf24, 0x12bb, 0x10f2, 0x12bb, 0x10f2, 0x146b, 0x1277, 0x146b, +0x1277, 0x1532, 0x1317, 0x1532, 0x1317, 0x159e, 0x1362, 0x159e, 0x1362, 0x15c3, 0x136a, +0x15c3, 0x136a, 0x15c3, 0x136a, 0x15ce, 0x1360, 0x15ce, 0x1360, 0x15be, 0x1340, 0x15be, +0x1340, 0x1583, 0x12fd, 0x1583, 0x12fd, 0x147f, 0x11f8, 0x147f, 0x11f8, 0x13b0, 0x1130, +0x13b0, 0x1130, 0x13a3, 0x1131, 0x13a3, 0x1131, 0x13a3, 0x1131, 0x130a, 0x10ad, 0x130a, +0x10ad, 0x1242, 0x1000, 0x1242, 0x1000, 0x1163, 0xf43, 0x1163, 0xf43, 0x1091, 0xe96, +0x1091, 0xe96, 0xf6e, 0xd9d, 0xf6e, 0xd9d, 0xf6e, 0xd9d, 0xe3a, 0xc95, 0xe3a, +0xc95, 0xd1f, 0xba8, 0xd1f, 0xba8, 0xb86, 0xa3f, 0xb86, 0xa3f, 0xa4a, 0x931, +0xa4a, 0x931, 0x919, 0x82d, 0x919, 0x82d, 0x845, 0x785, 0x845, 0x785, 0x845, +0x785, 0x75b, 0x6c2, 0x75b, 0x6c2, 0x61a, 0x5a6, 0x61a, 0x5a6, 0x4b5, 0x460, +0x4b5, 0x460, 0x353, 0x31a, 0x353, 0x31a, 0x308, 0x2e4, 0x308, 0x2e4, 0x2a2, +0x290, 0x2a2, 0x290, 0x2a2, 0x290, 0x297, 0x292, 0x297, 0x292, 0x2ef, 0x2f3, +0x2ef, 0x2f3, 0x2e1, 0x2ea, 0x2e1, 0x2ea, 0x28f, 0x29a, 0x28f, 0x29a, 0x1a2, +0x1ae, 0x1a2, 0x1ae, 0x1a2, 0x1ae, 0xa2, 0xac, 0xa2, 0xac, 0xff93, 0xff9b, +0xff93, 0xff9b, 0xfee2, 0xfee9, 0xfee2, 0xfee9, 0xfe82, 0xfe89, 0xfe82, 0xfe89, 0xfdb6, +0xfdbe, 0xfdb6, 0xfdbe, 0xfcee, 0xfcfb, 0xfcee, 0xfcfb, 0xfcee, 0xfcfb, 0xfbbe, 0xfbd3, +0xfbbe, 0xfbd3, 0xfa32, 0xfa53, 0xfa32, 0xfa53, 0xf95b, 0xf98d, 0xf95b, 0xf98d, 0xf84f, +0xf896, 0xf84f, 0xf896, 0xf710, 0xf771, 0xf710, 0xf771, 0xf710, 0xf771, 0xf60a, 0xf688, +0xf60a, 0xf688, 0xf540, 0xf5e0, 0xf540, 0xf5e0, 0xf507, 0xf5ce, 0xf507, 0xf5ce, 0xf4f4, +0xf5e4, 0xf4f4, 0xf5e4, 0xf50d, 0xf62a, 0xf50d, 0xf62a, 0xf523, 0xf66e, 0xf523, 0xf66e, +0xf523, 0xf66e, 0xf5cd, 0xf747, 0xf5cd, 0xf747, 0xf63d, 0xf7e7, 0xf63d, 0xf7e7, 0xf610, +0xf7e9, 0xf610, 0xf7e9, 0xf55e, 0xf765, 0xf55e, 0xf765, 0xf3a1, 0xf5d3, 0xf3a1, 0xf5d3, +0xf26c, 0xf4c8, 0xf26c, 0xf4c8, 0xf26c, 0xf4c8, 0xf17f, 0xf400, 0xf17f, 0xf400, 0xf0d9, +0xf37b, 0xf0d9, 0xf37b, 0xf084, 0xf343, 0xf084, 0xf343, 0xf002, 0xf2d9, 0xf002, 0xf2d9, +0xef86, 0xf270, 0xef86, 0xf270, 0xef86, 0xf270, 0xee69, 0xf160, 0xee69, 0xf160, 0xed74, +0xf073, 0xed74, 0xf073, 0xecdf, 0xefe1, 0xecdf, 0xefe1, 0xec10, 0xef10, 0xec10, 0xef10, +0xeb81, 0xee7a, 0xeb81, 0xee7a, 0xeba8, 0xee96, 0xeba8, 0xee96, 0xeba8, 0xee96, 0xebe2, +0xeec0, 0xebe2, 0xeec0, 0xebe0, 0xeeac, 0xebe0, 0xeeac, 0xec7e, 0xef35, 0xec7e, 0xef35, +0xecf4, 0xef93, 0xecf4, 0xef93, 0xed2c, 0xefb0, 0xed2c, 0xefb0, 0xedcb, 0xf035, 0xedcb, +0xf035, 0xedcb, 0xf035, 0xee70, 0xf0bd, 0xee70, 0xf0bd, 0xef51, 0xf183, 0xef51, 0xf183, +0xf025, 0xf23b, 0xf025, 0xf23b, 0xf0ff, 0xf2fb, 0xf0ff, 0xf2fb, 0xf123, 0xf306, 0xf123, +0xf306, 0xf123, 0xf306, 0xf0da, 0xf2a6, 0xf0da, 0xf2a6, 0xf12a, 0xf2e0, 0xf12a, 0xf2e0, +0xf10c, 0xf2b0, 0xf10c, 0xf2b0, 0xf0d5, 0xf269, 0xf0d5, 0xf269, 0xf069, 0xf1f0, 0xf069, +0xf1f0, 0xeff7, 0xf173, 0xeff7, 0xf173, 0xeff7, 0xf173, 0xefc5, 0xf13b, 0xefc5, 0xf13b, +0xefa1, 0xf113, 0xefa1, 0xf113, 0xefab, 0xf11d, 0xefab, 0xf11d, 0xef98, 0xf10e, 0xef98, +0xf10e, 0xefa2, 0xf11f, 0xefa2, 0xf11f, 0xeefa, 0xf080, 0xeefa, 0xf080, 0xeefa, 0xf080, +0xee7d, 0xf010, 0xee7d, 0xf010, 0xee6a, 0xf00c, 0xee6a, 0xf00c, 0xedca, 0xef7e, 0xedca, +0xef7e, 0xed5f, 0xef27, 0xed5f, 0xef27, 0xeca9, 0xee87, 0xeca9, 0xee87, 0xeca9, 0xee87, +0xec0a, 0xedff, 0xec0a, 0xedff, 0xebb5, 0xedc3, 0xebb5, 0xedc3, 0xeb01, 0xed29, 0xeb01, +0xed29, 0xea3d, 0xec7f, 0xea3d, 0xec7f, 0xe948, 0xeba3, 0xe948, 0xeba3, 0xe8d8, 0xeb4d, +0xe8d8, 0xeb4d, 0xe8d8, 0xeb4d, 0xe86c, 0xeaf9, 0xe86c, 0xeaf9, 0xe785, 0xea2a, 0xe785, +0xea2a, 0xe6c5, 0xe980, 0xe6c5, 0xe980, 0xe625, 0xe8f4, 0xe625, 0xe8f4, 0xe600, 0xe8e1, +0xe600, 0xe8e1, 0xe551, 0xe840, 0xe551, 0xe840, 0xe551, 0xe840, 0xe489, 0xe784, 0xe489, +0xe784, 0xe3b5, 0xe6b9, 0xe3b5, 0xe6b9, 0xe31a, 0xe623, 0xe31a, 0xe623, 0xe397, 0xe6a1, +0xe397, 0xe6a1, 0xe372, 0xe67a, 0xe372, 0xe67a, 0xe372, 0xe67a, 0xe388, 0xe68a, 0xe388, +0xe68a, 0xe383, 0xe679, 0xe383, 0xe679, 0xe322, 0xe60a, 0xe322, 0xe60a, 0xe34f, 0xe624, +0xe34f, 0xe624, 0xe3ef, 0xe6ad, 0xe3ef, 0xe6ad, 0xe524, 0xe7c6, 0xe524, 0xe7c6, 0xe524, +0xe7c6, 0xe6b2, 0xe934, 0xe6b2, 0xe934, 0xe939, 0xeb97, 0xe939, 0xeb97, 0xeb75, 0xedac, +0xeb75, 0xedac, 0xeda9, 0xefb4, 0xeda9, 0xefb4, 0xeff4, 0xf1d1, 0xeff4, 0xf1d1, 0xf194, +0xf33f, 0xf194, 0xf33f, 0xf194, 0xf33f, 0xf372, 0xf4e9, 0xf372, 0xf4e9, 0xf544, 0xf684, +0xf544, 0xf684, 0xf771, 0xf877, 0xf771, 0xf877, 0xf95e, 0xfa2a, 0xf95e, 0xfa2a, 0xfae8, +0xfb77, 0xfae8, 0xfb77, 0xfae8, 0xfb77, 0xfcab, 0xfcfd, 0xfcab, 0xfcfd, 0xfdcc, 0xfde1, +0xfdcc, 0xfde1, 0xfeeb, 0xfec1, 0xfeeb, 0xfec1, 0x5b, 0xfff5, 0x5b, 0xfff5, 0x16b, +0xc7, 0x16b, 0xc7, 0x24f, 0x170, 0x24f, 0x170, 0x24f, 0x170, 0x34b, 0x232, +0x34b, 0x232, 0x44f, 0x2fe, 0x44f, 0x2fe, 0x50f, 0x387, 0x50f, 0x387, 0x5ed, +0x430, 0x5ed, 0x430, 0x6fc, 0x50c, 0x6fc, 0x50c, 0x7f2, 0x5d3, 0x7f2, 0x5d3, +0x7f2, 0x5d3, 0x8e0, 0x692, 0x8e0, 0x692, 0x9c4, 0x74a, 0x9c4, 0x74a, 0xb1c, +0x878, 0xb1c, 0x878, 0xc57, 0x98a, 0xc57, 0x98a, 0xdf2, 0xaff, 0xdf2, 0xaff, +0xdf2, 0xaff, 0x104f, 0xd37, 0x104f, 0xd37, 0x12cb, 0xf91, 0x12cb, 0xf91, 0x1588, +0x122c, 0x1588, 0x122c, 0x17e5, 0x1469, 0x17e5, 0x1469, 0x19e3, 0x1648, 0x19e3, 0x1648, +0x1b2f, 0x1778, 0x1b2f, 0x1778, 0x1b2f, 0x1778, 0x1bfc, 0x182a, 0x1bfc, 0x182a, 0x1cf4, +0x1909, 0x1cf4, 0x1909, 0x1dc0, 0x19be, 0x1dc0, 0x19be, 0x1e5d, 0x1a47, 0x1e5d, 0x1a47, +0x1ef6, 0x1acf, 0x1ef6, 0x1acf, 0x1f97, 0x1b63, 0x1f97, 0x1b63, 0x1f97, 0x1b63, 0x1fee, +0x1bb1, 0x1fee, 0x1bb1, 0x200f, 0x1bcc, 0x200f, 0x1bcc, 0x2006, 0x1bc3, 0x2006, 0x1bc3, +0x1fac, 0x1b6f, 0x1fac, 0x1b6f, 0x1f45, 0x1b13, 0x1f45, 0x1b13, 0x1f45, 0x1b13, 0x1e96, +0x1a76, 0x1e96, 0x1a76, 0x1dc1, 0x19b8, 0x1dc1, 0x19b8, 0x1ce4, 0x18fa, 0x1ce4, 0x18fa, +0x1bf7, 0x1832, 0x1bf7, 0x1832, 0x1b1e, 0x1784, 0x1b1e, 0x1784, 0x19a2, 0x163a, 0x19a2, +0x163a, 0x19a2, 0x163a, 0x188b, 0x1559, 0x188b, 0x1559, 0x1790, 0x149a, 0x1790, 0x149a, +0x15fa, 0x1343, 0x15fa, 0x1343, 0x1492, 0x121e, 0x1492, 0x121e, 0x12b1, 0x1082, 0x12b1, +0x1082, 0x113e, 0xf55, 0x113e, 0xf55, 0x113e, 0xf55, 0xff5, 0xe53, 0xff5, 0xe53, +0xeb8, 0xd5c, 0xeb8, 0xd5c, 0xd87, 0xc6e, 0xd87, 0xc6e, 0xbcf, 0xaf7, 0xbcf, +0xaf7, 0xa11, 0x976, 0xa11, 0x976, 0xa11, 0x976, 0x7f3, 0x791, 0x7f3, 0x791, +0x625, 0x5f5, 0x625, 0x5f5, 0x454, 0x452, 0x454, 0x452, 0x2f3, 0x319, 0x2f3, +0x319, 0x206, 0x24d, 0x206, 0x24d, 0x107, 0x16b, 0x107, 0x16b, 0x107, 0x16b, +0x9d, 0x117, 0x9d, 0x117, 0xffa9, 0x36, 0xffa9, 0x36, 0xfe9c, 0xff37, 0xfe9c, +0xff37, 0xfdc8, 0xfe6d, 0xfdc8, 0xfe6d, 0xfc80, 0xfd2e, 0xfc80, 0xfd2e, 0xfc80, 0xfd2e, +0xfbe2, 0xfc97, 0xfbe2, 0xfc97, 0xfbcc, 0xfc88, 0xfbcc, 0xfc88, 0xfb50, 0xfc14, 0xfb50, +0xfc14, 0xfae1, 0xfbaf, 0xfae1, 0xfbaf, 0xfab6, 0xfb90, 0xfab6, 0xfb90, 0xfac1, 0xfbab, +0xfac1, 0xfbab, 0xfac1, 0xfbab, 0xfaa5, 0xfba1, 0xfaa5, 0xfba1, 0xfa6f, 0xfb82, 0xfa6f, +0xfb82, 0xfa3e, 0xfb6c, 0xfa3e, 0xfb6c, 0xfa2d, 0xfb7a, 0xfa2d, 0xfb7a, 0xf9d9, 0xfb48, +0xf9d9, 0xfb48, 0xf8a4, 0xfa38, 0xf8a4, 0xfa38, 0xf8a4, 0xfa38, 0xf76f, 0xf92a, 0xf76f, +0xf92a, 0xf604, 0xf7e8, 0xf604, 0xf7e8, 0xf4fe, 0xf70b, 0xf4fe, 0xf70b, 0xf41c, 0xf650, +0xf41c, 0xf650, 0xf298, 0xf4f1, 0xf298, 0xf4f1, 0xf298, 0xf4f1, 0xf196, 0xf410, 0xf196, +0xf410, 0xf0ab, 0xf342, 0xf0ab, 0xf342, 0xef55, 0xf202, 0xef55, 0xf202, 0xee00, 0xf0bd, +0xee00, 0xf0bd, 0xed13, 0xefd7, 0xed13, 0xefd7, 0xec28, 0xeeeb, 0xec28, 0xeeeb, 0xec28, +0xeeeb, 0xeb90, 0xee47, 0xeb90, 0xee47, 0xeb50, 0xedf4, 0xeb50, 0xedf4, 0xeb5d, 0xede3, +0xeb5d, 0xede3, 0xec09, 0xee68, 0xec09, 0xee68, 0xecd0, 0xeeff, 0xecd0, 0xeeff, 0xee59, +0xf050, 0xee59, 0xf050, 0xee59, 0xf050, 0xf019, 0xf1d1, 0xf019, 0xf1d1, 0xf1aa, 0xf31c, +0xf1aa, 0xf31c, 0xf3dd, 0xf504, 0xf3dd, 0xf504, 0xf5d5, 0xf6af, 0xf5d5, 0xf6af, 0xf74f, +0xf7d8, 0xf74f, 0xf7d8, 0xf74f, 0xf7d8, 0xf8f6, 0xf92d, 0xf8f6, 0xf92d, 0xfafb, 0xfae3, +0xfafb, 0xfae3, 0xfd3d, 0xfcd6, 0xfd3d, 0xfcd6, 0xff6c, 0xfebb, 0xff6c, 0xfebb, 0x1b0, +0xba, 0x1b0, 0xba, 0x3c2, 0x28c, 0x3c2, 0x28c, 0x3c2, 0x28c, 0x583, 0x414, +0x583, 0x414, 0x70d, 0x56d, 0x70d, 0x56d, 0x84a, 0x681, 0x84a, 0x681, 0x9a3, +0x7ba, 0x9a3, 0x7ba, 0xb08, 0x906, 0xb08, 0x906, 0xc8c, 0xa7b, 0xc8c, 0xa7b, +0xc8c, 0xa7b, 0xdb1, 0xb99, 0xdb1, 0xb99, 0xe7c, 0xc64, 0xe7c, 0xc64, 0xf01, +0xcf1, 0xf01, 0xcf1, 0xf08, 0xd07, 0xf08, 0xd07, 0xf2f, 0xd42, 0xf2f, 0xd42, +0xf2f, 0xd42, 0xee8, 0xd15, 0xee8, 0xd15, 0xe7b, 0xcc6, 0xe7b, 0xcc6, 0xe43, +0xcad, 0xe43, 0xcad, 0xe32, 0xcbe, 0xe32, 0xcbe, 0xea9, 0xd58, 0xea9, 0xd58, +0xed1, 0xda3, 0xed1, 0xda3, 0xed1, 0xda3, 0xea2, 0xd95, 0xea2, 0xd95, 0xe94, +0xda7, 0xe94, 0xda7, 0xe71, 0xda2, 0xe71, 0xda2, 0xe27, 0xd72, 0xe27, 0xd72, +0xd9f, 0xd01, 0xd9f, 0xd01, 0xd0f, 0xc84, 0xd0f, 0xc84, 0xd0f, 0xc84, 0xc6d, +0xbf1, 0xc6d, 0xbf1, 0xbc0, 0xb4f, 0xbc0, 0xb4f, 0xb48, 0xadd, 0xb48, 0xadd, +0xb23, 0xabb, 0xb23, 0xabb, 0xb3c, 0xad3, 0xb3c, 0xad3, 0xb3c, 0xad3, 0xae2, +0xa74, 0xae2, 0xa74, 0xa89, 0xa15, 0xa89, 0xa15, 0x9c6, 0x949, 0x9c6, 0x949, +0x8fc, 0x874, 0x8fc, 0x874, 0x881, 0x7ee, 0x881, 0x7ee, 0x7ab, 0x70d, 0x7ab, +0x70d, 0x7ab, 0x70d, 0x7c1, 0x718, 0x7c1, 0x718, 0x80d, 0x75b, 0x80d, 0x75b, +0x88b, 0x7d1, 0x88b, 0x7d1, 0x903, 0x843, 0x903, 0x843, 0x932, 0x86f, 0x932, +0x86f, 0x94b, 0x887, 0x94b, 0x887, 0x94b, 0x887, 0x8eb, 0x829, 0x8eb, 0x829, +0x8fd, 0x841, 0x8fd, 0x841, 0x8bc, 0x809, 0x8bc, 0x809, 0x8ff, 0x857, 0x8ff, +0x857, 0x9d2, 0x937, 0x9d2, 0x937, 0x9d2, 0x937, 0xa05, 0x979, 0xa05, 0x979, +0x9a3, 0x926, 0x9a3, 0x926, 0x8cb, 0x85e, 0x8cb, 0x85e, 0x81e, 0x7c1, 0x81e, +0x7c1, 0x6d7, 0x688, 0x6d7, 0x688, 0x58b, 0x548, 0x58b, 0x548, 0x58b, 0x548, +0x4bc, 0x482, 0x4bc, 0x482, 0x3c9, 0x394, 0x3c9, 0x394, 0x320, 0x2eb, 0x320, +0x2eb, 0x2f3, 0x2ba, 0x2f3, 0x2ba, 0x2d8, 0x294, 0x2d8, 0x294, 0x282, 0x22f, +0x282, 0x22f, 0x282, 0x22f, 0x23c, 0x1d4, 0x23c, 0x1d4, 0x265, 0x1e2, 0x265, +0x1e2, 0x305, 0x262, 0x305, 0x262, 0x403, 0x33b, 0x403, 0x33b, 0x537, 0x446, +0x537, 0x446, 0x537, 0x446, 0x670, 0x554, 0x670, 0x554, 0x7fd, 0x6b2, 0x7fd, +0x6b2, 0xa0d, 0x892, 0xa0d, 0x892, 0xc5e, 0xab5, 0xc5e, 0xab5, 0xe47, 0xc70, +0xe47, 0xc70, 0xfb6, 0xdb3, 0xfb6, 0xdb3, 0xfb6, 0xdb3, 0x10ed, 0xec4, 0x10ed, +0xec4, 0x11fd, 0xfb1, 0x11fd, 0xfb1, 0x12bb, 0x1051, 0x12bb, 0x1051, 0x130b, 0x108a, +0x130b, 0x108a, 0x139b, 0x110a, 0x139b, 0x110a, 0x1422, 0x1189, 0x1422, 0x1189, 0x1422, +0x1189, 0x1453, 0x11ba, 0x1453, 0x11ba, 0x1412, 0x1180, 0x1412, 0x1180, 0x13af, 0x112a, +0x13af, 0x112a, 0x1352, 0x10e2, 0x1352, 0x10e2, 0x12d2, 0x107b, 0x12d2, 0x107b, 0x12d2, +0x107b, 0x126e, 0x1037, 0x126e, 0x1037, 0x117b, 0xf67, 0x117b, 0xf67, 0x10b0, 0xec3, +0x10b0, 0xec3, 0xfa4, 0xddf, 0xfa4, 0xddf, 0xdfe, 0xc62, 0xdfe, 0xc62, 0xca2, +0xb2e, 0xca2, 0xb2e, 0xca2, 0xb2e, 0xb20, 0x9d3, 0xb20, 0x9d3, 0xa11, 0x8e9, +0xa11, 0x8e9, 0x8ee, 0x7e8, 0x8ee, 0x7e8, 0x7e6, 0x6fe, 0x7e6, 0x6fe, 0x756, +0x688, 0x756, 0x688, 0x63a, 0x582, 0x63a, 0x582, 0x63a, 0x582, 0x525, 0x47e, +0x525, 0x47e, 0x429, 0x390, 0x429, 0x390, 0x342, 0x2b2, 0x342, 0x2b2, 0x2a2, +0x218, 0x2a2, 0x218, 0x269, 0x1e3, 0x269, 0x1e3, 0x269, 0x1e3, 0x27b, 0x1f7, +0x27b, 0x1f7, 0x254, 0x1d1, 0x254, 0x1d1, 0x1f6, 0x174, 0x1f6, 0x174, 0x13c, +0xbb, 0x13c, 0xbb, 0xb2, 0x35, 0xb2, 0x35, 0x42, 0xffcb, 0x42, 0xffcb, +0x42, 0xffcb, 0xff92, 0xff23, 0xff92, 0xff23, 0xff4c, 0xfee9, 0xff4c, 0xfee9, 0xfed7, +0xfe84, 0xfed7, 0xfe84, 0xfe01, 0xfdc4, 0xfe01, 0xfdc4, 0xfcff, 0xfcda, 0xfcff, 0xfcda, +0xfcff, 0xfcda, 0xfb87, 0xfb7e, 0xfb87, 0xfb7e, 0xfa16, 0xfa2f, 0xfa16, 0xfa2f, 0xf8bd, +0xf8fb, 0xf8bd, 0xf8fb, 0xf77c, 0xf7e2, 0xf77c, 0xf7e2, 0xf67d, 0xf70e, 0xf67d, 0xf70e, +0xf589, 0xf647, 0xf589, 0xf647, 0xf589, 0xf647, 0xf503, 0xf5f0, 0xf503, 0xf5f0, 0xf529, +0xf645, 0xf529, 0xf645, 0xf560, 0xf6ac, 0xf560, 0xf6ac, 0xf595, 0xf711, 0xf595, 0xf711, +0xf64d, 0xf7f9, 0xf64d, 0xf7f9, 0xf6ff, 0xf8d9, 0xf6ff, 0xf8d9, 0xf6ff, 0xf8d9, 0xf6f2, +0xf8f8, 0xf6f2, 0xf8f8, 0xf68c, 0xf8bc, 0xf68c, 0xf8bc, 0xf5f6, 0xf84f, 0xf5f6, 0xf84f, +0xf56f, 0xf7ed, 0xf56f, 0xf7ed, 0xf4d6, 0xf777, 0xf4d6, 0xf777, 0xf4d6, 0xf777, 0xf429, +0xf6ea, 0xf429, 0xf6ea, 0xf39d, 0xf67c, 0xf39d, 0xf67c, 0xf2f9, 0xf5f3, 0xf2f9, 0xf5f3, +0xf27b, 0xf58d, 0xf27b, 0xf58d, 0xf1ad, 0xf4d4, 0xf1ad, 0xf4d4, 0xf0d8, 0xf412, 0xf0d8, +0xf412, 0xf0d8, 0xf412, 0xeff4, 0xf33e, 0xeff4, 0xf33e, 0xef14, 0xf26b, 0xef14, 0xf26b, +0xee55, 0xf1b6, 0xee55, 0xf1b6, 0xed52, 0xf0bb, 0xed52, 0xf0bb, 0xed39, 0xf0a6, 0xed39, +0xf0a6, 0xed31, 0xf09f, 0xed31, 0xf09f, 0xed31, 0xf09f, 0xecee, 0xf059, 0xecee, 0xf059, +0xecea, 0xf051, 0xecea, 0xf051, 0xed21, 0xf07f, 0xed21, 0xf07f, 0xedab, 0xf0fc, 0xedab, +0xf0fc, 0xee01, 0xf143, 0xee01, 0xf143, 0xee01, 0xf143, 0xee7d, 0xf1aa, 0xee7d, 0xf1aa, +0xeeb9, 0xf1d1, 0xeeb9, 0xf1d1, 0xef44, 0xf241, 0xef44, 0xf241, 0xeffb, 0xf2dc, 0xeffb, +0xf2dc, 0xf08e, 0xf351, 0xf08e, 0xf351, 0xf12b, 0xf3ce, 0xf12b, 0xf3ce, 0xf12b, 0xf3ce, +0xf143, 0xf3c4, 0xf143, 0xf3c4, 0xf174, 0xf3d2, 0xf174, 0xf3d2, 0xf177, 0xf3b2, 0xf177, +0xf3b2, 0xf12c, 0xf345, 0xf12c, 0xf345, 0xf0da, 0xf2d2, 0xf0da, 0xf2d2, 0xf0c0, 0xf298, +0xf0c0, 0xf298, 0xf0c0, 0xf298, 0xf0fc, 0xf2b7, 0xf0fc, 0xf2b7, 0xf171, 0xf312, 0xf171, +0xf312, 0xf1ce, 0xf358, 0xf1ce, 0xf358, 0xf13d, 0xf2b3, 0xf13d, 0xf2b3, 0xf01a, 0xf181, +0xf01a, 0xf181, 0xf01a, 0xf181, 0xef00, 0xf05c, 0xef00, 0xf05c, 0xee35, 0xef8a, 0xee35, +0xef8a, 0xedce, 0xef20, 0xedce, 0xef20, 0xed58, 0xeeab, 0xed58, 0xeeab, 0xed12, 0xee6a, +0xed12, 0xee6a, 0xed2b, 0xee8c, 0xed2b, 0xee8c, 0xed2b, 0xee8c, 0xecda, 0xee46, 0xecda, +0xee46, 0xec41, 0xedbb, 0xec41, 0xedbb, 0xeb75, 0xecff, 0xeb75, 0xecff, 0xea72, 0xec0c, +0xea72, 0xec0c, 0xe981, 0xeb2e, 0xe981, 0xeb2e, 0xe897, 0xea55, 0xe897, 0xea55, 0xe897, +0xea55, 0xe786, 0xe956, 0xe786, 0xe956, 0xe661, 0xe843, 0xe661, 0xe843, 0xe602, 0xe7f3, +0xe602, 0xe7f3, 0xe57a, 0xe779, 0xe57a, 0xe779, 0xe4e9, 0xe6f4, 0xe4e9, 0xe6f4, 0xe4e9, +0xe6f4, 0xe4a3, 0xe6b6, 0xe4a3, 0xe6b6, 0xe424, 0xe63e, 0xe424, 0xe63e, 0xe425, 0xe642, +0xe425, 0xe642, 0xe3b9, 0xe5d6, 0xe3b9, 0xe5d6, 0xe337, 0xe550, 0xe337, 0xe550, 0xe2b8, +0xe4cb, 0xe2b8, 0xe4cb, 0xe2b8, 0xe4cb, 0xe227, 0xe430, 0xe227, 0xe430, 0xe255, 0xe450, +0xe255, 0xe450, 0xe2d6, 0xe4c1, 0xe2d6, 0xe4c1, 0xe3b4, 0xe58a, 0xe3b4, 0xe58a, 0xe486, +0xe644, 0xe486, 0xe644, 0xe5ad, 0xe751, 0xe5ad, 0xe751, 0xe5ad, 0xe751, 0xe750, 0xe8d6, +0xe750, 0xe8d6, 0xe915, 0xea7b, 0xe915, 0xea7b, 0xeb11, 0xec54, 0xeb11, 0xec54, 0xed11, +0xee2f, 0xed11, 0xee2f, 0xef57, 0xf04f, 0xef57, 0xf04f, 0xef57, 0xf04f, 0xf13e, 0xf20e, +0xf13e, 0xf20e, 0xf2e2, 0xf388, 0xf2e2, 0xf388, 0xf500, 0xf57b, 0xf500, 0xf57b, 0xf6ea, +0xf73a, 0xf6ea, 0xf73a, 0xf882, 0xf8a7, 0xf882, 0xf8a7, 0xfa3e, 0xfa37, 0xfa3e, 0xfa37, +0xfa3e, 0xfa37, 0xfbde, 0xfbad, 0xfbde, 0xfbad, 0xfcd1, 0xfc77, 0xfcd1, 0xfc77, 0xfd66, +0xfce3, 0xfd66, 0xfce3, 0xfe2f, 0xfd85, 0xfe2f, 0xfd85, 0xfeca, 0xfdfc, 0xfeca, 0xfdfc, +0xff91, 0xfea0, 0xff91, 0xfea0, 0xff91, 0xfea0, 0xc4, 0xffb1, 0xc4, 0xffb1, 0x1b8, +0x86, 0x1b8, 0x86, 0x27e, 0x12e, 0x27e, 0x12e, 0x34d, 0x1e1, 0x34d, 0x1e1, +0x461, 0x2da, 0x461, 0x2da, 0x461, 0x2da, 0x55b, 0x3b9, 0x55b, 0x3b9, 0x5fb, +0x43f, 0x5fb, 0x43f, 0x6f6, 0x521, 0x6f6, 0x521, 0x8b8, 0x6ca, 0x8b8, 0x6ca, +0xaf4, 0x8eb, 0xaf4, 0x8eb, 0xd2a, 0xb05, 0xd2a, 0xb05, 0xd2a, 0xb05, 0xf72, +0xd30, 0xf72, 0xd30, 0x1170, 0xf0f, 0x1170, 0xf0f, 0x139b, 0x111a, 0x139b, 0x111a, +0x15be, 0x131b, 0x15be, 0x131b, 0x171e, 0x1458, 0x171e, 0x1458, 0x1889, 0x159e, 0x1889, +0x159e, 0x1889, 0x159e, 0x1992, 0x1683, 0x1992, 0x1683, 0x1acc, 0x1799, 0x1acc, 0x1799, +0x1c0c, 0x18b5, 0x1c0c, 0x18b5, 0x1ce9, 0x1971, 0x1ce9, 0x1971, 0x1e0a, 0x1a73, 0x1e0a, +0x1a73, 0x1e0a, 0x1a73, 0x1ec2, 0x1b12, 0x1ec2, 0x1b12, 0x1f44, 0x1b7e, 0x1f44, 0x1b7e, +0x1f8a, 0x1bb6, 0x1f8a, 0x1bb6, 0x2004, 0x1c28, 0x2004, 0x1c28, 0x1fdb, 0x1bff, 0x1fdb, +0x1bff, 0x1f25, 0x1b52, 0x1f25, 0x1b52, 0x1f25, 0x1b52, 0x1ed8, 0x1b16, 0x1ed8, 0x1b16, +0x1dce, 0x1a28, 0x1dce, 0x1a28, 0x1d05, 0x1985, 0x1d05, 0x1985, 0x1c79, 0x1927, 0x1c79, +0x1927, 0x1c03, 0x18e8, 0x1c03, 0x18e8, 0x1b63, 0x1886, 0x1b63, 0x1886, 0x1b63, 0x1886, +0x19fd, 0x1767, 0x19fd, 0x1767, 0x189b, 0x1651, 0x189b, 0x1651, 0x16d1, 0x14d6, 0x16d1, +0x14d6, 0x153e, 0x1397, 0x153e, 0x1397, 0x144f, 0x12fb, 0x144f, 0x12fb, 0x144f, 0x12fb, +0x13a1, 0x12a0, 0x13a1, 0x12a0, 0x1283, 0x11d3, 0x1283, 0x11d3, 0x10d4, 0x1072, 0x10d4, +0x1072, 0xf34, 0xf18, 0xf34, 0xf18, 0xd2f, 0xd55, 0xd2f, 0xd55, 0xb3f, 0xb9e, +0xb3f, 0xb9e, 0xb3f, 0xb9e, 0x988, 0xa16, 0x988, 0xa16, 0x7e5, 0x89a, 0x7e5, +0x89a, 0x6ac, 0x780, 0x6ac, 0x780, 0x57b, 0x663, 0x57b, 0x663, 0x496, 0x58a, +0x496, 0x58a, 0x496, 0x58a, 0x3ce, 0x4c7, 0x3ce, 0x4c7, 0x246, 0x33c, 0x246, +0x33c, 0x9c, 0x189, 0x9c, 0x189, 0xff59, 0x39, 0xff59, 0x39, 0xfe51, 0xff22, +0xfe51, 0xff22, 0xfd83, 0xfe43, 0xfd83, 0xfe43, 0xfd83, 0xfe43, 0xfd31, 0xfddf, 0xfd31, +0xfddf, 0xfd0b, 0xfdab, 0xfd0b, 0xfdab, 0xfcd8, 0xfd6c, 0xfcd8, 0xfd6c, 0xfd1f, 0xfdac, +0xfd1f, 0xfdac, 0xfd45, 0xfdcf, 0xfd45, 0xfdcf, 0xfd38, 0xfdc7, 0xfd38, 0xfdc7, 0xfd38, +0xfdc7, 0xfcd7, 0xfd70, 0xfcd7, 0xfd70, 0xfc6e, 0xfd17, 0xfc6e, 0xfd17, 0xfc2f, 0xfcf0, +0xfc2f, 0xfcf0, 0xfb4a, 0xfc27, 0xfb4a, 0xfc27, 0xfa9e, 0xfb9c, 0xfa9e, 0xfb9c, 0xfa9e, +0xfb9c, 0xfa18, 0xfb3c, 0xfa18, 0xfb3c, 0xf9ac, 0xfaf8, 0xf9ac, 0xfaf8, 0xf8f6, 0xfa6b, +0xf8f6, 0xfa6b, 0xf7c5, 0xf963, 0xf7c5, 0xf963, 0xf66a, 0xf82f, 0xf66a, 0xf82f, 0xf49a, +0xf682, 0xf49a, 0xf682, 0xf49a, 0xf682, 0xf351, 0xf556, 0xf351, 0xf556, 0xf1ed, 0xf409, +0xf1ed, 0xf409, 0xf044, 0xf270, 0xf044, 0xf270, 0xeee6, 0xf118, 0xeee6, 0xf118, 0xee1a, +0xf049, 0xee1a, 0xf049, 0xedd1, 0xeff3, 0xedd1, 0xeff3, 0xedd1, 0xeff3, 0xed12, 0xef1b, +0xed12, 0xef1b, 0xec8d, 0xee74, 0xec8d, 0xee74, 0xecc5, 0xee7f, 0xecc5, 0xee7f, 0xed86, +0xef0a, 0xed86, 0xef0a, 0xee8b, 0xefce, 0xee8b, 0xefce, 0xee8b, 0xefce, 0xefed, 0xf0e9, +0xefed, 0xf0e9, 0xf16f, 0xf21d, 0xf16f, 0xf21d, 0xf2d0, 0xf32b, 0xf2d0, 0xf32b, 0xf4ab, +0xf4af, 0xf4ab, 0xf4af, 0xf679, 0xf624, 0xf679, 0xf624, 0xf83e, 0xf78f, 0xf83e, 0xf78f, +0xf83e, 0xf78f, 0xfa7f, 0xf977, 0xfa7f, 0xf977, 0xfcb1, 0xfb53, 0xfcb1, 0xfb53, 0xfedd, +0xfd2d, 0xfedd, 0xfd2d, 0x116, 0xff19, 0x116, 0xff19, 0x2bc, 0x78, 0x2bc, 0x78, +0x463, 0x1e0, 0x463, 0x1e0, 0x463, 0x1e0, 0x5fb, 0x341, 0x5fb, 0x341, 0x751, +0x469, 0x751, 0x469, 0x923, 0x616, 0x923, 0x616, 0xb05, 0x7dc, 0xb05, 0x7dc, +0xc5f, 0x925, 0xc5f, 0x925, 0xc5f, 0x925, 0xd26, 0x9e4, 0xd26, 0x9e4, 0xd9f, +0xa5d, 0xd9f, 0xa5d, 0xda0, 0xa67, 0xda0, 0xa67, 0xdb0, 0xa88, 0xdb0, 0xa88, +0xdb9, 0xaaa, 0xdb9, 0xaaa, 0xd9f, 0xab0, 0xd9f, 0xab0, 0xd9f, 0xab0, 0xdc1, +0xaf6, 0xdc1, 0xaf6, 0xdb9, 0xb18, 0xdb9, 0xb18, 0xe04, 0xb8f, 0xe04, 0xb8f, +0xd99, 0xb54, 0xd99, 0xb54, 0xd2e, 0xb1b, 0xd2e, 0xb1b, 0xd67, 0xb86, 0xd67, +0xb86, 0xd67, 0xb86, 0xd47, 0xb98, 0xd47, 0xb98, 0xd2e, 0xbb1, 0xd2e, 0xbb1, +0xc8f, 0xb41, 0xc8f, 0xb41, 0xbc7, 0xaa7, 0xbc7, 0xaa7, 0xac2, 0x9cb, 0xac2, +0x9cb, 0xac2, 0x9cb, 0xa23, 0x953, 0xa23, 0x953, 0x9ce, 0x921, 0x9ce, 0x921, +0x95d, 0x8cf, 0x95d, 0x8cf, 0x984, 0x911, 0x984, 0x911, 0x913, 0x8b7, 0x913, +0x8b7, 0x8a9, 0x85f, 0x8a9, 0x85f, 0x8a9, 0x85f, 0x824, 0x7ea, 0x824, 0x7ea, +0x758, 0x72b, 0x758, 0x72b, 0x6e5, 0x6c1, 0x6e5, 0x6c1, 0x69b, 0x67e, 0x69b, +0x67e, 0x684, 0x66e, 0x684, 0x66e, 0x656, 0x645, 0x656, 0x645, 0x656, 0x645, +0x6c3, 0x6b7, 0x6c3, 0x6b7, 0x6fb, 0x6f5, 0x6fb, 0x6f5, 0x6d5, 0x6d5, 0x6d5, +0x6d5, 0x752, 0x75b, 0x752, 0x75b, 0x799, 0x7ac, 0x799, 0x7ac, 0x799, 0x7ac, +0x765, 0x784, 0x765, 0x784, 0x75c, 0x78a, 0x75c, 0x78a, 0x79b, 0x7da, 0x79b, +0x7da, 0x7cc, 0x81d, 0x7cc, 0x81d, 0x815, 0x87a, 0x815, 0x87a, 0x88f, 0x909, +0x88f, 0x909, 0x88f, 0x909, 0x8b5, 0x946, 0x8b5, 0x946, 0x868, 0x90d, 0x868, +0x90d, 0x7e5, 0x89e, 0x7e5, 0x89e, 0x70e, 0x7d9, 0x70e, 0x7d9, 0x5fa, 0x6d3, +0x5fa, 0x6d3, 0x4f4, 0x5d8, 0x4f4, 0x5d8, 0x4f4, 0x5d8, 0x458, 0x541, 0x458, +0x541, 0x3e6, 0x4ce, 0x3e6, 0x4ce, 0x37f, 0x460, 0x37f, 0x460, 0x372, 0x444, +0x372, 0x444, 0x36d, 0x42a, 0x36d, 0x42a, 0x36d, 0x42a, 0x388, 0x428, 0x388, +0x428, 0x369, 0x3e4, 0x369, 0x3e4, 0x342, 0x392, 0x342, 0x392, 0x3c0, 0x3df, +0x3c0, 0x3df, 0x4ea, 0x4d3, 0x4ea, 0x4d3, 0x6ac, 0x65a, 0x6ac, 0x65a, 0x6ac, +0x65a, 0x8dd, 0x84c, 0x8dd, 0x84c, 0xb09, 0xa38, 0xb09, 0xa38, 0xc62, 0xb51, +0xc62, 0xb51, 0xddf, 0xc8e, 0xddf, 0xc8e, 0xf42, 0xdb4, 0xf42, 0xdb4, 0x104d, +0xe87, 0x104d, 0xe87, 0x104d, 0xe87, 0x11ca, 0xfd0, 0x11ca, 0xfd0, 0x12c9, 0x10a2, +0x12c9, 0x10a2, 0x139c, 0x114f, 0x139c, 0x114f, 0x1477, 0x120c, 0x1477, 0x120c, 0x1537, +0x12b8, 0x1537, 0x12b8, 0x1537, 0x12b8, 0x15bc, 0x1330, 0x15bc, 0x1330, 0x15ec, 0x135c, +0x15ec, 0x135c, 0x160c, 0x1381, 0x160c, 0x1381, 0x15cc, 0x134f, 0x15cc, 0x134f, 0x157c, +0x1314, 0x157c, 0x1314, 0x14dd, 0x128f, 0x14dd, 0x128f, 0x14dd, 0x128f, 0x13f8, 0x11cb, +0x13f8, 0x11cb, 0x12db, 0x10d2, 0x12db, 0x10d2, 0x118c, 0xfab, 0x118c, 0xfab, 0x1045, +0xe8e, 0x1045, 0xe8e, 0xe9c, 0xd0f, 0xe9c, 0xd0f, 0xd28, 0xbc4, 0xd28, 0xbc4, +0xd28, 0xbc4, 0xbff, 0xac3, 0xbff, 0xac3, 0xae8, 0x9d2, 0xae8, 0x9d2, 0x9f2, +0x8fe, 0x9f2, 0x8fe, 0x8ee, 0x81a, 0x8ee, 0x81a, 0x83d, 0x785, 0x83d, 0x785, +0x83d, 0x785, 0x7ba, 0x71a, 0x7ba, 0x71a, 0x6ce, 0x642, 0x6ce, 0x642, 0x5e5, +0x56b, 0x5e5, 0x56b, 0x50f, 0x4a4, 0x50f, 0x4a4, 0x403, 0x3a4, 0x403, 0x3a4, +0x309, 0x2b5, 0x309, 0x2b5, 0x309, 0x2b5, 0x23b, 0x1f2, 0x23b, 0x1f2, 0x1d6, +0x196, 0x1d6, 0x196, 0x17b, 0x146, 0x17b, 0x146, 0x158, 0x12f, 0x158, 0x12f, +0x13a, 0x11e, 0x13a, 0x11e, 0x13a, 0x11e, 0xb5, 0xa9, 0xb5, 0xa9, 0x46, +0x4c, 0x46, 0x4c, 0xffba, 0xffd5, 0xffba, 0xffd5, 0xfec8, 0xfefa, 0xfec8, 0xfefa, +0xfd17, 0xfd64, 0xfd17, 0xfd64, 0xfb9c, 0xfc06, 0xfb9c, 0xfc06, 0xfb9c, 0xfc06, 0xfa53, +0xfadb, 0xfa53, 0xfadb, 0xf922, 0xf9cb, 0xf922, 0xf9cb, 0xf7e4, 0xf8af, 0xf7e4, 0xf8af, +0xf672, 0xf75f, 0xf672, 0xf75f, 0xf607, 0xf718, 0xf607, 0xf718, 0xf596, 0xf6c9, 0xf596, +0xf6c9, 0xf596, 0xf6c9, 0xf551, 0xf6a7, 0xf551, 0xf6a7, 0xf548, 0xf6bf, 0xf548, 0xf6bf, +0xf545, 0xf6db, 0xf545, 0xf6db, 0xf570, 0xf724, 0xf570, 0xf724, 0xf563, 0xf734, 0xf563, +0xf734, 0xf563, 0xf734, 0xf56a, 0xf755, 0xf56a, 0xf755, 0xf51c, 0xf720, 0xf51c, 0xf720, +0xf519, 0xf734, 0xf519, 0xf734, 0xf4de, 0xf70e, 0xf4de, 0xf70e, 0xf454, 0xf699, 0xf454, +0xf699, 0xf3c2, 0xf61a, 0xf3c2, 0xf61a, 0xf3c2, 0xf61a, 0xf33a, 0xf5a3, 0xf33a, 0xf5a3, +0xf2c0, 0xf53a, 0xf2c0, 0xf53a, 0xf177, 0xf402, 0xf177, 0xf402, 0xf07d, 0xf318, 0xf07d, +0xf318, 0xefb9, 0xf262, 0xefb9, 0xf262, 0xeecd, 0xf185, 0xeecd, 0xf185, 0xeecd, 0xf185, +0xee0b, 0xf0d0, 0xee0b, 0xf0d0, 0xed2b, 0xeffd, 0xed2b, 0xeffd, 0xec3d, 0xef1b, 0xec3d, +0xef1b, 0xeb8d, 0xee74, 0xeb8d, 0xee74, 0xeb30, 0xee1f, 0xeb30, 0xee1f, 0xeb30, 0xee1f, +0xeae9, 0xeddf, 0xeae9, 0xeddf, 0xeae0, 0xedda, 0xeae0, 0xedda, 0xead5, 0xedd0, 0xead5, +0xedd0, 0xeab5, 0xedae, 0xeab5, 0xedae, 0xea9e, 0xed91, 0xea9e, 0xed91, 0xea96, 0xed81, +0xea96, 0xed81, 0xea96, 0xed81, 0xeafa, 0xedd9, 0xeafa, 0xedd9, 0xebe5, 0xeeb5, 0xebe5, +0xeeb5, 0xecc8, 0xef86, 0xecc8, 0xef86, 0xed8b, 0xf034, 0xed8b, 0xf034, 0xedfe, 0xf08f, +0xedfe, 0xf08f, 0xee15, 0xf08c, 0xee15, 0xf08c, 0xee15, 0xf08c, 0xee29, 0xf085, 0xee29, +0xf085, 0xee1c, 0xf05b, 0xee1c, 0xf05b, 0xee56, 0xf079, 0xee56, 0xf079, 0xeea0, 0xf0a7, +0xeea0, 0xf0a7, 0xef0a, 0xf0f6, 0xef0a, 0xf0f6, 0xef0a, 0xf0f6, 0xef89, 0xf15c, 0xef89, +0xf15c, 0xefc8, 0xf184, 0xefc8, 0xf184, 0xef81, 0xf129, 0xef81, 0xf129, 0xeed2, 0xf069, +0xeed2, 0xf069, 0xee65, 0xefef, 0xee65, 0xefef, 0xed95, 0xef16, 0xed95, 0xef16, 0xed95, +0xef16, 0xed0b, 0xee87, 0xed0b, 0xee87, 0xece5, 0xee61, 0xece5, 0xee61, 0xecd0, 0xee50, +0xecd0, 0xee50, 0xed05, 0xee8d, 0xed05, 0xee8d, 0xecf7, 0xee8a, 0xecf7, 0xee8a, 0xed04, +0xeea7, 0xed04, 0xeea7, 0xed04, 0xeea7, 0xecbd, 0xee73, 0xecbd, 0xee73, 0xec3a, 0xee05, +0xec3a, 0xee05, 0xeb9f, 0xed82, 0xeb9f, 0xed82, 0xeab2, 0xecaf, 0xeab2, 0xecaf, 0xe9ec, +0xec04, 0xe9ec, 0xec04, 0xe9ec, 0xec04, 0xe909, 0xeb3d, 0xe909, 0xeb3d, 0xe83f, 0xea90, +0xe83f, 0xea90, 0xe76f, 0xe9dc, 0xe76f, 0xe9dc, 0xe6ce, 0xe957, 0xe6ce, 0xe957, 0xe6a3, +0xe946, 0xe6a3, 0xe946, 0xe653, 0xe90f, 0xe653, 0xe90f, 0xe653, 0xe90f, 0xe5f3, 0xe8c6, +0xe5f3, 0xe8c6, 0xe5a4, 0xe88b, 0xe5a4, 0xe88b, 0xe585, 0xe87d, 0xe585, 0xe87d, 0xe51d, +0xe824, 0xe51d, 0xe824, 0xe489, 0xe79a, 0xe489, 0xe79a, 0xe484, 0xe79c, 0xe484, 0xe79c, +0xe484, 0xe79c, 0xe4b8, 0xe7d3, 0xe4b8, 0xe7d3, 0xe4d7, 0xe7f0, 0xe4d7, 0xe7f0, 0xe4f3, +0xe805, 0xe4f3, 0xe805, 0xe577, 0xe87f, 0xe577, 0xe87f, 0xe646, 0xe93e, 0xe646, 0xe93e, +0xe646, 0xe93e, 0xe72f, 0xea12, 0xe72f, 0xea12, 0xe8e4, 0xebad, 0xe8e4, 0xebad, 0xeb11, +0xedbc, 0xeb11, 0xedbc, 0xecc3, 0xef4b, 0xecc3, 0xef4b, 0xee8f, 0xf0f0, 0xee8f, 0xf0f0, +0xf069, 0xf2a0, 0xf069, 0xf2a0, 0xf069, 0xf2a0, 0xf21a, 0xf422, 0xf21a, 0xf422, 0xf459, +0xf631, 0xf459, 0xf631, 0xf6ab, 0xf84f, 0xf6ab, 0xf84f, 0xf888, 0xf9f6, 0xf888, 0xf9f6, +0xf9f8, 0xfb30, 0xf9f8, 0xfb30, 0xfb88, 0xfc88, 0xfb88, 0xfc88, 0xfb88, 0xfc88, 0xfd0c, +0xfdd4, 0xfd0c, 0xfdd4, 0xfe01, 0xfe92, 0xfe01, 0xfe92, 0xfe62, 0xfebd, 0xfe62, 0xfebd, +0xff01, 0xff27, 0xff01, 0xff27, 0x57, 0x4b, 0x57, 0x4b, 0x57, 0x4b, 0x181, +0x144, 0x181, 0x144, 0x296, 0x22b, 0x296, 0x22b, 0x32c, 0x295, 0x32c, 0x295, +0x3e6, 0x325, 0x3e6, 0x325, 0x4f8, 0x40f, 0x4f8, 0x40f, 0x5e7, 0x4d8, 0x5e7, +0x4d8, 0x5e7, 0x4d8, 0x6fc, 0x5c8, 0x6fc, 0x5c8, 0x81a, 0x6c1, 0x81a, 0x6c1, +0x9ac, 0x830, 0x9ac, 0x830, 0xb12, 0x973, 0xb12, 0x973, 0xc84, 0xac0, 0xc84, +0xac0, 0xde7, 0xbfe, 0xde7, 0xbfe, 0xde7, 0xbfe, 0xfab, 0xd9c, 0xfab, 0xd9c, +0x11cc, 0xf94, 0x11cc, 0xf94, 0x1370, 0x110e, 0x1370, 0x110e, 0x1553, 0x12c5, 0x1553, +0x12c5, 0x16e0, 0x1425, 0x16e0, 0x1425, 0x16e0, 0x1425, 0x1846, 0x155e, 0x1846, 0x155e, +0x19aa, 0x1692, 0x19aa, 0x1692, 0x1b39, 0x17f2, 0x1b39, 0x17f2, 0x1cbc, 0x1948, 0x1cbc, +0x1948, 0x1dcb, 0x1a2b, 0x1dcb, 0x1a2b, 0x1ee4, 0x1b1b, 0x1ee4, 0x1b1b, 0x1ee4, 0x1b1b, +0x1f8d, 0x1b9d, 0x1f8d, 0x1b9d, 0x1ff7, 0x1be7, 0x1ff7, 0x1be7, 0x2044, 0x1c19, 0x2044, +0x1c19, 0x2035, 0x1bf7, 0x2035, 0x1bf7, 0x1fc2, 0x1b78, 0x1fc2, 0x1b78, 0x1f09, 0x1abd, +0x1f09, 0x1abd, 0x1f09, 0x1abd, 0x1e5b, 0x1a14, 0x1e5b, 0x1a14, 0x1de2, 0x19aa, 0x1de2, +0x19aa, 0x1d5f, 0x1940, 0x1d5f, 0x1940, 0x1cc9, 0x18cd, 0x1cc9, 0x18cd, 0x1c0a, 0x1839, +0x1c0a, 0x1839, 0x1c0a, 0x1839, 0x1b10, 0x1771, 0x1b10, 0x1771, 0x19fe, 0x169a, 0x19fe, +0x169a, 0x18d4, 0x15b1, 0x18d4, 0x15b1, 0x17be, 0x14e2, 0x17be, 0x14e2, 0x1662, 0x13d0, +0x1662, 0x13d0, 0x1520, 0x12da, 0x1520, 0x12da, 0x1520, 0x12da, 0x13c2, 0x11c9, 0x13c2, +0x11c9, 0x120d, 0x1061, 0x120d, 0x1061, 0x1028, 0xec6, 0x1028, 0xec6, 0xe5b, 0xd40, +0xe5b, 0xd40, 0xd13, 0xc3b, 0xd13, 0xc3b, 0xd13, 0xc3b, 0xb4c, 0xab2, 0xb4c, +0xab2, 0x969, 0x905, 0x969, 0x905, 0x7fe, 0x7cb, 0x7fe, 0x7cb, 0x6dc, 0x6d2, +0x6dc, 0x6d2, 0x578, 0x591, 0x578, 0x591, 0x3dc, 0x411, 0x3dc, 0x411, 0x3dc, +0x411, 0x246, 0x290, 0x246, 0x290, 0x71, 0xcb, 0x71, 0xcb, 0xff16, 0xff7b, +0xff16, 0xff7b, 0xfdcd, 0xfe3a, 0xfdcd, 0xfe3a, 0xfc85, 0xfcf6, 0xfc85, 0xfcf6, 0xfbb0, +0xfc23, 0xfbb0, 0xfc23, 0xfbb0, 0xfc23, 0xfb52, 0xfbc7, 0xfb52, 0xfbc7, 0xfb90, 0xfc07, +0xfb90, 0xfc07, 0xfbdb, 0xfc56, 0xfbdb, 0xfc56, 0xfbe6, 0xfc66, 0xfbe6, 0xfc66, 0xfba7, +0xfc2f, 0xfba7, 0xfc2f, 0xfba7, 0xfc2f, 0xfb13, 0xfba7, 0xfb13, 0xfba7, 0xfa59, 0xfafc, +0xfa59, 0xfafc, 0xf9f4, 0xfaa9, 0xf9f4, 0xfaa9, 0xf9b5, 0xfa80, 0xf9b5, 0xfa80, 0xf91b, +0xf9fe, 0xf91b, 0xf9fe, 0xf89d, 0xf99b, 0xf89d, 0xf99b, 0xf89d, 0xf99b, 0xf872, 0xf98c, +0xf872, 0xf98c, 0xf83a, 0xf972, 0xf83a, 0xf972, 0xf755, 0xf8ab, 0xf755, 0xf8ab, 0xf5a2, +0xf714, 0xf5a2, 0xf714, 0xf400, 0xf58c, 0xf400, 0xf58c, 0xf286, 0xf428, 0xf286, 0xf428, +0xf286, 0xf428, 0xf10c, 0xf2c0, 0xf10c, 0xf2c0, 0xefe7, 0xf1a9, 0xefe7, 0xf1a9, 0xeecb, +0xf094, 0xeecb, 0xf094, 0xedc6, 0xef8e, 0xedc6, 0xef8e, 0xed36, 0xeef6, 0xed36, 0xeef6, +0xed36, 0xeef6, 0xeca6, 0xee57, 0xeca6, 0xee57, 0xec25, 0xedbf, 0xec25, 0xedbf, 0xec06, +0xed80, 0xec06, 0xed80, 0xec15, 0xed67, 0xec15, 0xed67, 0xec95, 0xedb8, 0xec95, 0xedb8, +0xedb5, 0xeea2, 0xedb5, 0xeea2, 0xedb5, 0xeea2, 0xef49, 0xeffb, 0xef49, 0xeffb, 0xf10a, +0xf17b, 0xf10a, 0xf17b, 0xf2dd, 0xf309, 0xf2dd, 0xf309, 0xf47d, 0xf460, 0xf47d, 0xf460, +0xf64e, 0xf5e6, 0xf64e, 0xf5e6, 0xf875, 0xf7c0, 0xf875, 0xf7c0, 0xf875, 0xf7c0, 0xfa71, +0xf971, 0xfa71, 0xf971, 0xfc90, 0xfb44, 0xfc90, 0xfb44, 0xfea5, 0xfd12, 0xfea5, 0xfd12, +0x100, 0xff28, 0x100, 0xff28, 0x334, 0x11c, 0x334, 0x11c, 0x334, 0x11c, 0x54a, +0x2f9, 0x54a, 0x2f9, 0x75c, 0x4d6, 0x75c, 0x4d6, 0x90f, 0x65c, 0x90f, 0x65c, +0xabf, 0x7e6, 0xabf, 0x7e6, 0xbb1, 0x8ba, 0xbb1, 0x8ba, 0xc64, 0x957, 0xc64, +0x957, 0xc64, 0x957, 0xcf5, 0x9db, 0xcf5, 0x9db, 0xdcf, 0xab0, 0xdcf, 0xab0, +0xe7a, 0xb5d, 0xe7a, 0xb5d, 0xe60, 0xb4e, 0xe60, 0xb4e, 0xea6, 0xba6, 0xea6, +0xba6, 0xebd, 0xbd5, 0xebd, 0xbd5, 0xebd, 0xbd5, 0xedd, 0xc12, 0xedd, 0xc12, +0xeed, 0xc45, 0xeed, 0xc45, 0xef4, 0xc75, 0xef4, 0xc75, 0xf00, 0xcaa, 0xf00, +0xcaa, 0xf03, 0xcdb, 0xf03, 0xcdb, 0xf03, 0xcdb, 0xf1f, 0xd26, 0xf1f, 0xd26, +0xea5, 0xcdb, 0xea5, 0xcdb, 0xe20, 0xc85, 0xe20, 0xc85, 0xd5d, 0xbef, 0xd5d, +0xbef, 0xc81, 0xb3f, 0xc81, 0xb3f, 0xc0e, 0xaf5, 0xc0e, 0xaf5, 0xc0e, 0xaf5, +0xb96, 0xaa3, 0xb96, 0xaa3, 0xb7f, 0xaaf, 0xb7f, 0xaaf, 0xbbe, 0xb0d, 0xbbe, +0xb0d, 0xb89, 0xaf2, 0xb89, 0xaf2, 0xb2d, 0xaad, 0xb2d, 0xaad, 0xaed, 0xa81, +0xaed, 0xa81, 0xaed, 0xa81, 0xa81, 0xa24, 0xa81, 0xa24, 0x9e8, 0x997, 0x9e8, +0x997, 0x973, 0x92b, 0x973, 0x92b, 0x8f6, 0x8b7, 0x8f6, 0x8b7, 0x83d, 0x803, +0x83d, 0x803, 0x83d, 0x803, 0x821, 0x7eb, 0x821, 0x7eb, 0x83a, 0x80a, 0x83a, +0x80a, 0x857, 0x82a, 0x857, 0x82a, 0x87b, 0x854, 0x87b, 0x854, 0x89c, 0x87b, +0x89c, 0x87b, 0x8a1, 0x888, 0x8a1, 0x888, 0x8a1, 0x888, 0x7fb, 0x7ec, 0x7fb, +0x7ec, 0x80e, 0x80a, 0x80e, 0x80a, 0x8b0, 0x8b8, 0x8b0, 0x8b8, 0x919, 0x930, +0x919, 0x930, 0x932, 0x959, 0x932, 0x959, 0x8f6, 0x92d, 0x8f6, 0x92d, 0x8f6, +0x92d, 0x8bd, 0x904, 0x8bd, 0x904, 0x8a5, 0x8fc, 0x8a5, 0x8fc, 0x891, 0x8f7, +0x891, 0x8f7, 0x766, 0x7d8, 0x766, 0x7d8, 0x629, 0x6a5, 0x629, 0x6a5, 0x629, +0x6a5, 0x544, 0x5c6, 0x544, 0x5c6, 0x480, 0x504, 0x480, 0x504, 0x459, 0x4db, +0x459, 0x4db, 0x3c7, 0x441, 0x3c7, 0x441, 0x339, 0x3a5, 0x339, 0x3a5, 0x319, +0x372, 0x319, 0x372, 0x319, 0x372, 0x308, 0x348, 0x308, 0x348, 0x314, 0x336, +0x314, 0x336, 0x3a0, 0x39d, 0x3a0, 0x39d, 0x49f, 0x474, 0x49f, 0x474, 0x5a7, +0x54f, 0x5a7, 0x54f, 0x6f7, 0x670, 0x6f7, 0x670, 0x6f7, 0x670, 0x845, 0x78b, +0x845, 0x78b, 0x999, 0x8ac, 0x999, 0x8ac, 0xb15, 0x9f3, 0xb15, 0x9f3, 0xc75, +0xb20, 0xc75, 0xb20, 0xde2, 0xc5a, 0xde2, 0xc5a, 0xde2, 0xc5a, 0xf1e, 0xd68, +0xf1e, 0xd68, 0x1044, 0xe62, 0x1044, 0xe62, 0x1158, 0xf4e, 0x1158, 0xf4e, 0x122a, +0xfff, 0x122a, 0xfff, 0x1349, 0x1100, 0x1349, 0x1100, 0x1451, 0x11f2, 0x1451, 0x11f2, +0x1451, 0x11f2, 0x14e8, 0x1278, 0x14e8, 0x1278, 0x1563, 0x12e8, 0x1563, 0x12e8, 0x155c, +0x12dd, 0x155c, 0x12dd, 0x14d3, 0x1255, 0x14d3, 0x1255, 0x13d4, 0x115d, 0x13d4, 0x115d, +0x12aa, 0x103e, 0x12aa, 0x103e, 0x12aa, 0x103e, 0x118b, 0xf2f, 0x118b, 0xf2f, 0x1065, +0xe1c, 0x1065, 0xe1c, 0xf70, 0xd3d, 0xf70, 0xd3d, 0xe24, 0xc09, 0xe24, 0xc09, +0xcd3, 0xad2, 0xcd3, 0xad2, 0xcd3, 0xad2, 0xb6f, 0x989, 0xb6f, 0x989, 0xa20, +0x853, 0xa20, 0x853, 0x986, 0x7d3, 0x986, 0x7d3, 0x90b, 0x771, 0x90b, 0x771, +0x87c, 0x6fa, 0x87c, 0x6fa, 0x7b2, 0x647, 0x7b2, 0x647, 0x7b2, 0x647, 0x728, +0x5d2, 0x728, 0x5d2, 0x630, 0x4ed, 0x630, 0x4ed, 0x515, 0x3e4, 0x515, 0x3e4, +0x484, 0x363, 0x484, 0x363, 0x381, 0x26f, 0x381, 0x26f, 0x381, 0x26f, 0x2e6, +0x1e2, 0x2e6, 0x1e2, 0x294, 0x19e, 0x294, 0x19e, 0x286, 0x19e, 0x286, 0x19e, +0x23e, 0x163, 0x23e, 0x163, 0x19b, 0xce, 0x19b, 0xce, 0x18a, 0xcc, 0x18a, +0xcc, 0x18a, 0xcc, 0x15a, 0xac, 0x15a, 0xac, 0xd2, 0x36, 0xd2, 0x36, +0xff9e, 0xff16, 0xff9e, 0xff16, 0xfe76, 0xfe04, 0xfe76, 0xfe04, 0xfd46, 0xfceb, 0xfd46, +0xfceb, 0xfc06, 0xfbc4, 0xfc06, 0xfbc4, 0xfc06, 0xfbc4, 0xfaff, 0xfada, 0xfaff, 0xfada, +0xf9b5, 0xf9ae, 0xf9b5, 0xf9ae, 0xf8f6, 0xf90e, 0xf8f6, 0xf90e, 0xf85b, 0xf895, 0xf85b, +0xf895, 0xf7d8, 0xf836, 0xf7d8, 0xf836, 0xf7d8, 0xf836, 0xf750, 0xf7d4, 0xf750, 0xf7d4, +0xf6ac, 0xf756, 0xf6ac, 0xf756, 0xf694, 0xf767, 0xf694, 0xf767, 0xf6aa, 0xf7a6, 0xf6aa, +0xf7a6, 0xf6a0, 0xf7c5, 0xf6a0, 0xf7c5, 0xf698, 0xf7e6, 0xf698, 0xf7e6, 0xf698, 0xf7e6, +0xf6d3, 0xf84b, 0xf6d3, 0xf84b, 0xf6ff, 0xf8a1, 0xf6ff, 0xf8a1, 0xf716, 0xf8e0, 0xf716, +0xf8e0, 0xf705, 0xf8f7, 0xf705, 0xf8f7, 0xf67f, 0xf899, 0xf67f, 0xf899, 0xf5ba, 0xf7f9, +0xf5ba, 0xf7f9, 0xf5ba, 0xf7f9, 0xf4d1, 0xf733, 0xf4d1, 0xf733, 0xf3b3, 0xf636, 0xf3b3, +0xf636, 0xf287, 0xf52a, 0xf287, 0xf52a, 0xf173, 0xf432, 0xf173, 0xf432, 0xf060, 0xf338, +0xf060, 0xf338, 0xf060, 0xf338, 0xef44, 0xf232, 0xef44, 0xf232, 0xee43, 0xf144, 0xee43, +0xf144, 0xeda1, 0xf0b1, 0xeda1, 0xf0b1, 0xed0a, 0xf026, 0xed0a, 0xf026, 0xec68, 0xef8b, +0xec68, 0xef8b, 0xebe1, 0xef08, 0xebe1, 0xef08, 0xebe1, 0xef08, 0xeb82, 0xeeaa, 0xeb82, +0xeeaa, 0xeb28, 0xee4c, 0xeb28, 0xee4c, 0xeac0, 0xeddd, 0xeac0, 0xeddd, 0xea72, 0xed84, +0xea72, 0xed84, 0xea45, 0xed4a, 0xea45, 0xed4a, 0xeab9, 0xedad, 0xeab9, 0xedad, 0xeab9, +0xedad, 0xeb92, 0xee73, 0xeb92, 0xee73, 0xec87, 0xef52, 0xec87, 0xef52, 0xed1c, 0xefd0, +0xed1c, 0xefd0, 0xed64, 0xefff, 0xed64, 0xefff, 0xee14, 0xf095, 0xee14, 0xf095, 0xee14, +0xf095, 0xeeba, 0xf122, 0xeeba, 0xf122, 0xef3c, 0xf18a, 0xef3c, 0xf18a, 0xef72, 0xf1a7, +0xef72, 0xf1a7, 0xefe0, 0xf1fc, 0xefe0, 0xf1fc, 0xf061, 0xf267, 0xf061, 0xf267, 0xf056, +0xf247, 0xf056, 0xf247, 0xf056, 0xf247, 0xf032, 0xf211, 0xf032, 0xf211, 0xefdb, 0xf1aa, +0xefdb, 0xf1aa, 0xef96, 0xf159, 0xef96, 0xf159, 0xef76, 0xf130, 0xef76, 0xf130, 0xef19, +0xf0ce, 0xef19, 0xf0ce, 0xee38, 0xefeb, 0xee38, 0xefeb, 0xee38, 0xefeb, 0xed53, 0xef08, +0xed53, 0xef08, 0xecfc, 0xeeb7, 0xecfc, 0xeeb7, 0xece9, 0xeeae, 0xece9, 0xeeae, 0xed18, +0xeeea, 0xed18, 0xeeea, 0xed32, 0xef15, 0xed32, 0xef15, 0xed32, 0xef15, 0xed17, 0xef0e, +0xed17, 0xef0e, 0xecc1, 0xeecf, 0xecc1, 0xeecf, 0xec00, 0xee29, 0xec00, 0xee29, 0xeb3c, +0xed81, 0xeb3c, 0xed81, 0xea5d, 0xecc0, 0xea5d, 0xecc0, 0xe8f3, 0xeb76, 0xe8f3, 0xeb76, +0xe8f3, 0xeb76, 0xe7ba, 0xea5d, 0xe7ba, 0xea5d, 0xe6f4, 0xe9b8, 0xe6f4, 0xe9b8, 0xe662, +0xe946, 0xe662, 0xe946, 0xe626, 0xe929, 0xe626, 0xe929, 0xe5cd, 0xe8ed, 0xe5cd, 0xe8ed, +0xe59f, 0xe8d9, 0xe59f, 0xe8d9, 0xe59f, 0xe8d9, 0xe54e, 0xe8a0, 0xe54e, 0xe8a0, 0xe4b7, +0xe81e, 0xe4b7, 0xe81e, 0xe471, 0xe7e8, 0xe471, 0xe7e8, 0xe41d, 0xe79f, 0xe41d, 0xe79f, +0xe3c1, 0xe749, 0xe3c1, 0xe749, 0xe3c1, 0xe749, 0xe3cf, 0xe757, 0xe3cf, 0xe757, 0xe407, +0xe78b, 0xe407, 0xe78b, 0xe3c6, 0xe73e, 0xe3c6, 0xe73e, 0xe416, 0xe77d, 0xe416, 0xe77d, +0xe4ef, 0xe83e, 0xe4ef, 0xe83e, 0xe5ac, 0xe8dd, 0xe5ac, 0xe8dd, 0xe5ac, 0xe8dd, 0xe6d4, +0xe9e1, 0xe6d4, 0xe9e1, 0xe82c, 0xeb0f, 0xe82c, 0xeb0f, 0xe9e8, 0xec9d, 0xe9e8, 0xec9d, +0xebaa, 0xee2c, 0xebaa, 0xee2c, 0xed6d, 0xefb8, 0xed6d, 0xefb8, 0xef2b, 0xf13b, 0xef2b, +0xf13b, 0xef2b, 0xf13b, 0xf0c5, 0xf298, 0xf0c5, 0xf298, 0xf292, 0xf426, 0xf292, 0xf426, +0xf48b, 0xf5df, 0xf48b, 0xf5df, 0xf6be, 0xf7d0, 0xf6be, 0xf7d0, 0xf890, 0xf960, 0xf890, +0xf960, 0xf890, 0xf960, 0xf9fe, 0xfa8d, 0xf9fe, 0xfa8d, 0xfaf5, 0xfb44, 0xfaf5, 0xfb44, +0xfbed, 0xfbfd, 0xfbed, 0xfbfd, 0xfd37, 0xfd0a, 0xfd37, 0xfd0a, 0xfe42, 0xfdd9, 0xfe42, +0xfdd9, 0xff09, 0xfe67, 0xff09, 0xfe67, 0xff09, 0xfe67, 0xff6e, 0xfe94, 0xff6e, 0xfe94, +0x2b, 0xff1b, 0x2b, 0xff1b, 0x168, 0x24, 0x168, 0x24, 0x2b1, 0x13b, 0x2b1, +0x13b, 0x3c6, 0x21e, 0x3c6, 0x21e, 0x4df, 0x306, 0x4df, 0x306, 0x4df, 0x306, +0x659, 0x450, 0x659, 0x450, 0x78b, 0x551, 0x78b, 0x551, 0x89a, 0x62e, 0x89a, +0x62e, 0x9f2, 0x755, 0x9f2, 0x755, 0xb6c, 0x89d, 0xb6c, 0x89d, 0xb6c, 0x89d, +0xd0f, 0xa0d, 0xd0f, 0xa0d, 0xf0d, 0xbd7, 0xf0d, 0xbd7, 0x10f9, 0xd90, 0x10f9, +0xd90, 0x12cc, 0xf2e, 0x12cc, 0xf2e, 0x14fa, 0x1129, 0x14fa, 0x1129, 0x1705, 0x1300, +0x1705, 0x1300, 0x1705, 0x1300, 0x18ea, 0x14b3, 0x18ea, 0x14b3, 0x1adf, 0x1678, 0x1adf, +0x1678, 0x1cb7, 0x1824, 0x1cb7, 0x1824, 0x1e6e, 0x19b2, 0x1e6e, 0x19b2, 0x1ff8, 0x1b18, +0x1ff8, 0x1b18, 0x2106, 0x1c07, 0x2106, 0x1c07, 0x2106, 0x1c07, 0x219b, 0x1c85, 0x219b, +0x1c85, 0x21ad, 0x1c87, 0x21ad, 0x1c87, 0x2163, 0x1c35, 0x2163, 0x1c35, 0x217c, 0x1c4f, +0x217c, 0x1c4f, 0x218f, 0x1c6b, 0x218f, 0x1c6b, 0x218f, 0x1c6b, 0x216d, 0x1c5c, 0x216d, +0x1c5c, 0x211f, 0x1c2c, 0x211f, 0x1c2c, 0x20b5, 0x1be8, 0x20b5, 0x1be8, 0x201f, 0x1b81, +0x201f, 0x1b81, 0x1f41, 0x1adc, 0x1f41, 0x1adc, 0x1e91, 0x1a6c, 0x1e91, 0x1a6c, 0x1e91, +0x1a6c, 0x1da5, 0x19c7, 0x1da5, 0x19c7, 0x1c77, 0x18e7, 0x1c77, 0x18e7, 0x1b26, 0x17ea, +0x1b26, 0x17ea, 0x1a59, 0x1773, 0x1a59, 0x1773, 0x1975, 0x16e9, 0x1975, 0x16e9, 0x1975, +0x16e9, 0x17c9, 0x1599, 0x17c9, 0x1599, 0x1686, 0x14b1, 0x1686, 0x14b1, 0x1504, 0x138a, +0x1504, 0x138a, 0x1331, 0x120f, 0x1331, 0x120f, 0x1172, 0x10a5, 0x1172, 0x10a5, 0xf6f, +0xef2, 0xf6f, 0xef2, 0xf6f, 0xef2, 0xd4e, 0xd1c, 0xd4e, 0xd1c, 0xb81, 0xb94, +0xb81, 0xb94, 0xa39, 0xa8b, 0xa39, 0xa8b, 0x8a1, 0x92b, 0x8a1, 0x92b, 0x6a0, +0x75c, 0x6a0, 0x75c, 0x4b6, 0x59d, 0x4b6, 0x59d, 0x4b6, 0x59d, 0x30b, 0x418, +0x30b, 0x418, 0x15f, 0x28b, 0x15f, 0x28b, 0xff9a, 0xe0, 0xff9a, 0xe0, 0xfe64, +0xffc1, 0xfe64, 0xffc1, 0xfded, 0xff5c, 0xfded, 0xff5c, 0xfded, 0xff5c, 0xfd79, 0xfef7, +0xfd79, 0xfef7, 0xfd11, 0xfe9e, 0xfd11, 0xfe9e, 0xfcd0, 0xfe69, 0xfcd0, 0xfe69, 0xfc97, +0xfe3e, 0xfc97, 0xfe3e, 0xfc5b, 0xfe10, 0xfc5b, 0xfe10, 0xfbd9, 0xfd9d, 0xfbd9, 0xfd9d, +0xfbd9, 0xfd9d, 0xfb96, 0xfd6c, 0xfb96, 0xfd6c, 0xfb2f, 0xfd19, 0xfb2f, 0xfd19, 0xfaba, +0xfcbb, 0xfaba, 0xfcbb, 0xfa78, 0xfc93, 0xfa78, 0xfc93, 0xfa0e, 0xfc46, 0xfa0e, 0xfc46, +0xf9aa, 0xfc01, 0xf9aa, 0xfc01, 0xf9aa, 0xfc01, 0xf8fc, 0xfb75, 0xf8fc, 0xfb75, 0xf826, +0xfac3, 0xf826, 0xfac3, 0xf6fb, 0xf9bc, 0xf6fb, 0xf9bc, 0xf589, 0xf86e, 0xf589, 0xf86e, +0xf3ef, 0xf6f7, 0xf3ef, 0xf6f7, 0xf3ef, 0xf6f7, 0xf1fa, 0xf523, 0xf1fa, 0xf523, 0xeffa, +0xf341, 0xeffa, 0xf341, 0xee5f, 0xf1be, 0xee5f, 0xf1be, 0xed22, 0xf095, 0xed22, 0xf095, +0xec20, 0xef9f, 0xec20, 0xef9f, 0xeb5a, 0xeedf, 0xeb5a, 0xeedf, 0xeb5a, 0xeedf, 0xea5a, +0xeddc, 0xea5a, 0xeddc, 0xe9b9, 0xed2f, 0xe9b9, 0xed2f, 0xe986, 0xece7, 0xe986, 0xece7, +0xe99b, 0xecdd, 0xe99b, 0xecdd, 0xea42, 0xed5a, 0xea42, 0xed5a, 0xeb1d, 0xee02, 0xeb1d, +0xee02, 0xeb1d, 0xee02, 0xec49, 0xeef3, 0xec49, 0xeef3, 0xedcf, 0xf033, 0xedcf, 0xf033, +0xefc5, 0xf1dc, 0xefc5, 0xf1dc, 0xf1b9, 0xf37c, 0xf1b9, 0xf37c, 0xf3af, 0xf518, 0xf3af, +0xf518, 0xf3af, 0xf518, 0xf5ba, 0xf6c5, 0xf5ba, 0xf6c5, 0xf7e5, 0xf88f, 0xf7e5, 0xf88f, +0xfaa3, 0xfaea, 0xfaa3, 0xfaea, 0xfd2a, 0xfd0e, 0xfd2a, 0xfd0e, 0xff83, 0xff04, 0xff83, +0xff04, 0x1e8, 0x10b, 0x1e8, 0x10b, 0x1e8, 0x10b, 0x475, 0x33d, 0x475, 0x33d, +0x6fd, 0x571, 0x6fd, 0x571, 0x88a, 0x6b0, 0x88a, 0x6b0, 0x9af, 0x78f, 0x9af, +0x78f, 0xae5, 0x888, 0xae5, 0x888, 0xbe1, 0x950, 0xbe1, 0x950, 0xbe1, 0x950, +0xcb6, 0x9fb, 0xcb6, 0x9fb, 0xd4b, 0xa71, 0xd4b, 0xa71, 0xd99, 0xaa9, 0xd99, +0xaa9, 0xdee, 0xaf2, 0xdee, 0xaf2, 0xe4c, 0xb4e, 0xe4c, 0xb4e, 0xe4c, 0xb4e, +0xe80, 0xb88, 0xe80, 0xb88, 0xe98, 0xbaf, 0xe98, 0xbaf, 0xe7d, 0xba9, 0xe7d, +0xba9, 0xe53, 0xb9b, 0xe53, 0xb9b, 0xe33, 0xb9c, 0xe33, 0xb9c, 0xdcf, 0xb5d, +0xdcf, 0xb5d, 0xdcf, 0xb5d, 0xd46, 0xafb, 0xd46, 0xafb, 0xcec, 0xaca, 0xcec, +0xaca, 0xc8a, 0xa92, 0xc8a, 0xa92, 0xc16, 0xa47, 0xc16, 0xa47, 0xbed, 0xa45, +0xbed, 0xa45, 0xb9b, 0xa18, 0xb9b, 0xa18, 0xb9b, 0xa18, 0xb13, 0x9b2, 0xb13, +0x9b2, 0xace, 0x98d, 0xace, 0x98d, 0xae4, 0x9bd, 0xae4, 0x9bd, 0xafc, 0x9ed, +0xafc, 0x9ed, 0xad8, 0x9db, 0xad8, 0x9db, 0xad8, 0x9db, 0xaaa, 0x9bc, 0xaaa, +0x9bc, 0xa43, 0x960, 0xa43, 0x960, 0x9ab, 0x8d0, 0x9ab, 0x8d0, 0x954, 0x87f, +0x954, 0x87f, 0x96d, 0x89b, 0x96d, 0x89b, 0x968, 0x897, 0x968, 0x897, 0x968, +0x897, 0x961, 0x891, 0x961, 0x891, 0x976, 0x8a7, 0x976, 0x8a7, 0x927, 0x859, +0x927, 0x859, 0x8f0, 0x823, 0x8f0, 0x823, 0x8d1, 0x807, 0x8d1, 0x807, 0x8b0, +0x7ec, 0x8b0, 0x7ec, 0x8b0, 0x7ec, 0x8c3, 0x806, 0x8c3, 0x806, 0x928, 0x874, +0x928, 0x874, 0x96b, 0x8c2, 0x96b, 0x8c2, 0x984, 0x8e8, 0x984, 0x8e8, 0x9c7, +0x93b, 0x9c7, 0x93b, 0x9c7, 0x93b, 0x9f9, 0x97d, 0x9f9, 0x97d, 0xa3a, 0x9d0, +0xa3a, 0x9d0, 0x9e6, 0x98e, 0x9e6, 0x98e, 0x924, 0x8dc, 0x924, 0x8dc, 0x884, +0x84d, 0x884, 0x84d, 0x80c, 0x7e2, 0x80c, 0x7e2, 0x80c, 0x7e2, 0x771, 0x753, +0x771, 0x753, 0x68d, 0x678, 0x68d, 0x678, 0x5ea, 0x5d9, 0x5ea, 0x5d9, 0x56f, +0x55e, 0x56f, 0x55e, 0x541, 0x52b, 0x541, 0x52b, 0x528, 0x508, 0x528, 0x508, +0x528, 0x508, 0x529, 0x4fa, 0x529, 0x4fa, 0x582, 0x53f, 0x582, 0x53f, 0x615, +0x5b7, 0x615, 0x5b7, 0x702, 0x685, 0x702, 0x685, 0x7fc, 0x75c, 0x7fc, 0x75c, +0x7fc, 0x75c, 0x8f0, 0x828, 0x8f0, 0x828, 0x9e7, 0x8f4, 0x9e7, 0x8f4, 0xaf1, +0x9d1, 0xaf1, 0x9d1, 0xc32, 0xae2, 0xc32, 0xae2, 0xd91, 0xc11, 0xd91, 0xc11, +0xee2, 0xd33, 0xee2, 0xd33, 0xee2, 0xd33, 0x1035, 0xe57, 0x1035, 0xe57, 0x11dc, +0xfd3, 0x11dc, 0xfd3, 0x138f, 0x115c, 0x138f, 0x115c, 0x14b4, 0x125c, 0x14b4, 0x125c, +0x15d4, 0x135b, 0x15d4, 0x135b, 0x16ba, 0x1426, 0x16ba, 0x1426, 0x16ba, 0x1426, 0x1704, +0x145c, 0x1704, 0x145c, 0x1723, 0x146c, 0x1723, 0x146c, 0x16a4, 0x13e5, 0x16a4, 0x13e5, +0x160f, 0x134e, 0x160f, 0x134e, 0x154c, 0x1290, 0x154c, 0x1290, 0x154c, 0x1290, 0x1447, +0x1196, 0x1447, 0x1196, 0x13bd, 0x111d, 0x13bd, 0x111d, 0x12f2, 0x1069, 0x12f2, 0x1069, +0x1192, 0xf24, 0x1192, 0xf24, 0xfd9, 0xd8c, 0xfd9, 0xd8c, 0xe55, 0xc2c, 0xe55, +0xc2c, 0xe55, 0xc2c, 0xd00, 0xafe, 0xd00, 0xafe, 0xbcf, 0x9f7, 0xbcf, 0x9f7, +0xb09, 0x95c, 0xb09, 0x95c, 0xa41, 0x8bf, 0xa41, 0x8bf, 0x971, 0x81b, 0x971, +0x81b, 0x971, 0x81b, 0x8a4, 0x779, 0x8a4, 0x779, 0x80c, 0x70b, 0x80c, 0x70b, +0x743, 0x669, 0x743, 0x669, 0x604, 0x551, 0x604, 0x551, 0x549, 0x4b9, 0x549, +0x4b9, 0x4d7, 0x468, 0x4d7, 0x468, 0x4d7, 0x468, 0x3ee, 0x39d, 0x3ee, 0x39d, +0x2f7, 0x2c2, 0x2f7, 0x2c2, 0x254, 0x237, 0x254, 0x237, 0x204, 0x1fd, 0x204, +0x1fd, 0x1b8, 0x1c5, 0x1b8, 0x1c5, 0x12b, 0x14a, 0x12b, 0x14a, 0x12b, 0x14a, +0x63, 0x92, 0x63, 0x92, 0xff61, 0xff9f, 0xff61, 0xff9f, 0xfe6c, 0xfeb8, 0xfe6c, +0xfeb8, 0xfd90, 0xfdea, 0xfd90, 0xfdea, 0xfc9a, 0xfd02, 0xfc9a, 0xfd02, 0xfc9a, 0xfd02, +0xfba2, 0xfc18, 0xfba2, 0xfc18, 0xfa92, 0xfb16, 0xfa92, 0xfb16, 0xf97e, 0xfa12, 0xf97e, +0xfa12, 0xf877, 0xf91d, 0xf877, 0xf91d, 0xf745, 0xf7fe, 0xf745, 0xf7fe, 0xf634, 0xf701, +0xf634, 0xf701, 0xf634, 0xf701, 0xf557, 0xf63b, 0xf557, 0xf63b, 0xf4b3, 0xf5b0, 0xf4b3, +0xf5b0, 0xf472, 0xf58a, 0xf472, 0xf58a, 0xf464, 0xf598, 0xf464, 0xf598, 0xf47b, 0xf5ce, +0xf47b, 0xf5ce, 0xf491, 0xf604, 0xf491, 0xf604, 0xf491, 0xf604, 0xf49c, 0xf631, 0xf49c, +0xf631, 0xf4d1, 0xf687, 0xf4d1, 0xf687, 0xf518, 0xf6f2, 0xf518, 0xf6f2, 0xf50b, 0xf709, +0xf50b, 0xf709, 0xf46d, 0xf68f, 0xf46d, 0xf68f, 0xf46d, 0xf68f, 0xf369, 0xf5ae, 0xf369, +0xf5ae, 0xf24c, 0xf4b5, 0xf24c, 0xf4b5, 0xf105, 0xf391, 0xf105, 0xf391, 0xefa4, 0xf250, +0xefa4, 0xf250, 0xee5b, 0xf126, 0xee5b, 0xf126, 0xed2b, 0xf015, 0xed2b, 0xf015, 0xed2b, +0xf015, 0xec1d, 0xef21, 0xec1d, 0xef21, 0xeb01, 0xee1f, 0xeb01, 0xee1f, 0xea4b, 0xed7e, +0xea4b, 0xed7e, 0xe9a4, 0xecea, 0xe9a4, 0xecea, 0xe8de, 0xec34, 0xe8de, 0xec34, 0xe83b, +0xeb9d, 0xe83b, 0xeb9d, 0xe83b, 0xeb9d, 0xe761, 0xeacc, 0xe761, 0xeacc, 0xe6ab, 0xea1c, +0xe6ab, 0xea1c, 0xe622, 0xe995, 0xe622, 0xe995, 0xe607, 0xe979, 0xe607, 0xe979, 0xe640, +0xe9ad, 0xe640, 0xe9ad, 0xe640, 0xe9ad, 0xe679, 0xe9df, 0xe679, 0xe9df, 0xe6ad, 0xea08, +0xe6ad, 0xea08, 0xe72f, 0xea7d, 0xe72f, 0xea7d, 0xe84e, 0xeb8c, 0xe84e, 0xeb8c, 0xe94c, +0xec78, 0xe94c, 0xec78, 0xea53, 0xed6a, 0xea53, 0xed6a, 0xea53, 0xed6a, 0xeb55, 0xee57, +0xeb55, 0xee57, 0xec05, 0xeef0, 0xec05, 0xeef0, 0xecb2, 0xef86, 0xecb2, 0xef86, 0xed8c, +0xf048, 0xed8c, 0xf048, 0xee42, 0xf0e6, 0xee42, 0xf0e6, 0xee6c, 0xf0fa, 0xee6c, 0xf0fa, +0xee6c, 0xf0fa, 0xee5c, 0xf0d4, 0xee5c, 0xf0d4, 0xee48, 0xf0ac, 0xee48, 0xf0ac, 0xedfa, +0xf04d, 0xedfa, 0xf04d, 0xed6e, 0xefb1, 0xed6e, 0xefb1, 0xed55, 0xef8c, 0xed55, 0xef8c, +0xed55, 0xef8c, 0xed97, 0xefc5, 0xed97, 0xefc5, 0xedb0, 0xefd8, 0xedb0, 0xefd8, 0xedbc, +0xefe1, 0xedbc, 0xefe1, 0xedb7, 0xefde, 0xedb7, 0xefde, 0xed92, 0xefbe, 0xed92, 0xefbe, +0xed4e, 0xef83, 0xed4e, 0xef83, 0xed4e, 0xef83, 0xecfa, 0xef3c, 0xecfa, 0xef3c, 0xecc0, +0xef11, 0xecc0, 0xef11, 0xec68, 0xeecc, 0xec68, 0xeecc, 0xebb0, 0xee29, 0xebb0, 0xee29, +0xeb24, 0xedb3, 0xeb24, 0xedb3, 0xea81, 0xed29, 0xea81, 0xed29, 0xea81, 0xed29, 0xe99e, +0xec5f, 0xe99e, 0xec5f, 0xe8e9, 0xebc3, 0xe8e9, 0xebc3, 0xe833, 0xeb25, 0xe833, 0xeb25, +0xe76a, 0xea73, 0xe76a, 0xea73, 0xe6d4, 0xe9f2, 0xe6d4, 0xe9f2, 0xe6d4, 0xe9f2, 0xe6d9, +0xea08, 0xe6d9, 0xea08, 0xe6d7, 0xea14, 0xe6d7, 0xea14, 0xe692, 0xe9d8, 0xe692, 0xe9d8, +0xe67a, 0xe9c4, 0xe67a, 0xe9c4, 0xe67f, 0xe9c7, 0xe67f, 0xe9c7, 0xe6bb, 0xe9fb, 0xe6bb, +0xe9fb, 0xe6bb, 0xe9fb, 0xe701, 0xea33, 0xe701, 0xea33, 0xe6ec, 0xea09, 0xe6ec, 0xea09, +0xe67e, 0xe980, 0xe67e, 0xe980, 0xe66f, 0xe94f, 0xe66f, 0xe94f, 0xe702, 0xe9b9, 0xe702, +0xe9b9, 0xe7c0, 0xea49, 0xe7c0, 0xea49, 0xe7c0, 0xea49, 0xe89f, 0xeaf4, 0xe89f, 0xeaf4, +0xe9f5, 0xec11, 0xe9f5, 0xec11, 0xebb4, 0xed93, 0xebb4, 0xed93, 0xed97, 0xef34, 0xed97, +0xef34, 0xef68, 0xf0c2, 0xef68, 0xf0c2, 0xef68, 0xf0c2, 0xf0f6, 0xf20a, 0xf0f6, 0xf20a, +0xf279, 0xf346, 0xf279, 0xf346, 0xf474, 0xf4fb, 0xf474, 0xf4fb, 0xf6c0, 0xf701, 0xf6c0, +0xf701, 0xf8d2, 0xf8cf, 0xf8d2, 0xf8cf, 0xfac5, 0xfa80, 0xfac5, 0xfa80, 0xfac5, 0xfa80, +0xfca2, 0xfc1e, 0xfca2, 0xfc1e, 0xfe3b, 0xfd7b, 0xfe3b, 0xfd7b, 0xff7c, 0xfe85, 0xff7c, +0xfe85, 0x12, 0xfee6, 0x12, 0xfee6, 0x6b, 0xff10, 0x6b, 0xff10, 0x154, 0xffcd, +0x154, 0xffcd, 0x154, 0xffcd, 0x235, 0x87, 0x235, 0x87, 0x2ef, 0x11d, 0x2ef, +0x11d, 0x3fa, 0x207, 0x3fa, 0x207, 0x518, 0x307, 0x518, 0x307, 0x650, 0x424, +0x650, 0x424, 0x650, 0x424, 0x759, 0x514, 0x759, 0x514, 0x828, 0x5ca, 0x828, +0x5ca, 0x903, 0x68c, 0x903, 0x68c, 0x9c9, 0x73a, 0x9c9, 0x73a, 0xaa4, 0x7fc, +0xaa4, 0x7fc, 0xbd8, 0x916, 0xbd8, 0x916, 0xbd8, 0x916, 0xd5a, 0xa7c, 0xd5a, +0xa7c, 0xf14, 0xc19, 0xf14, 0xc19, 0x113c, 0xe23, 0x113c, 0xe23, 0x13b3, 0x107a, +0x13b3, 0x107a, 0x1612, 0x12b8, 0x1612, 0x12b8, 0x1876, 0x14fb, 0x1876, 0x14fb, 0x1876, +0x14fb, 0x1a98, 0x16fa, 0x1a98, 0x16fa, 0x1c18, 0x1859, 0x1c18, 0x1859, 0x1d95, 0x19b6, +0x1d95, 0x19b6, 0x1f18, 0x1b1b, 0x1f18, 0x1b1b, 0x2074, 0x1c5b, 0x2074, 0x1c5b, 0x2074, +0x1c5b, 0x2178, 0x1d49, 0x2178, 0x1d49, 0x2218, 0x1dd7, 0x2218, 0x1dd7, 0x2294, 0x1e47, +0x2294, 0x1e47, 0x227d, 0x1e2b, 0x227d, 0x1e2b, 0x2237, 0x1de7, 0x2237, 0x1de7, 0x2200, +0x1dba, 0x2200, 0x1dba, 0x2200, 0x1dba, 0x217a, 0x1d48, 0x217a, 0x1d48, 0x20c8, 0x1cb2, +0x20c8, 0x1cb2, 0x204e, 0x1c5d, 0x204e, 0x1c5d, 0x1fc3, 0x1bff, 0x1fc3, 0x1bff, 0x1ec0, +0x1b32, 0x1ec0, 0x1b32, 0x1ec0, 0x1b32, 0x1de4, 0x1a94, 0x1de4, 0x1a94, 0x1d0c, 0x1a01, +0x1d0c, 0x1a01, 0x1c14, 0x1954, 0x1c14, 0x1954, 0x1b39, 0x18c9, 0x1b39, 0x18c9, 0x1a39, +0x181e, 0x1a39, 0x181e, 0x18e8, 0x1723, 0x18e8, 0x1723, 0x18e8, 0x1723, 0x1789, 0x161b, +0x1789, 0x161b, 0x1628, 0x1511, 0x1628, 0x1511, 0x148c, 0x13ca, 0x148c, 0x13ca, 0x127e, +0x120f, 0x127e, 0x120f, 0x1004, 0xfe3, 0x1004, 0xfe3, 0xde6, 0xe0e, 0xde6, 0xe0e, +0xde6, 0xe0e, 0xc1d, 0xc87, 0xc1d, 0xc87, 0xa2d, 0xad1, 0xa2d, 0xad1, 0x817, +0x8ef, 0x817, 0x8ef, 0x638, 0x73b, 0x638, 0x73b, 0x48f, 0x5b5, 0x48f, 0x5b5, +0x48f, 0x5b5, 0x2d3, 0x415, 0x2d3, 0x415, 0x121, 0x277, 0x121, 0x277, 0xff72, +0xd4, 0xff72, 0xd4, 0xfe22, 0xff8b, 0xfe22, 0xff8b, 0xfd3a, 0xfea3, 0xfd3a, 0xfea3, +0xfc5f, 0xfdc5, 0xfc5f, 0xfdc5, 0xfc5f, 0xfdc5, 0xfb79, 0xfcd8, 0xfb79, 0xfcd8, 0xfab5, +0xfc0b, 0xfab5, 0xfc0b, 0xfa0a, 0xfb56, 0xfa0a, 0xfb56, 0xf9ab, 0xfaed, 0xf9ab, 0xfaed, +0xf9aa, 0xfae4, 0xf9aa, 0xfae4, 0xf98d, 0xfac2, 0xf98d, 0xfac2, 0xf98d, 0xfac2, 0xf984, +0xfab6, 0xf984, 0xfab6, 0xf980, 0xfab2, 0xf980, 0xfab2, 0xf969, 0xfaa1, 0xf969, 0xfaa1, +0xf919, 0xfa5b, 0xf919, 0xfa5b, 0xf8a1, 0xf9f2, 0xf8a1, 0xf9f2, 0xf8a1, 0xf9f2, 0xf855, +0xf9b9, 0xf855, 0xf9b9, 0xf7a8, 0xf923, 0xf7a8, 0xf923, 0xf67b, 0xf811, 0xf67b, 0xf811, +0xf533, 0xf6e6, 0xf533, 0xf6e6, 0xf3bb, 0xf58e, 0xf3bb, 0xf58e, 0xf21b, 0xf40e, 0xf21b, +0xf40e, 0xf21b, 0xf40e, 0xf0c9, 0xf2db, 0xf0c9, 0xf2db, 0xef95, 0xf1c5, 0xef95, 0xf1c5, +0xee56, 0xf0a1, 0xee56, 0xf0a1, 0xed63, 0xefc4, 0xed63, 0xefc4, 0xec66, 0xeed8, 0xec66, +0xeed8, 0xeb2e, 0xedab, 0xeb2e, 0xedab, 0xeb2e, 0xedab, 0xea31, 0xecb1, 0xea31, 0xecb1, +0xe997, 0xec12, 0xe997, 0xec12, 0xe95e, 0xebcb, 0xe95e, 0xebcb, 0xe9b2, 0xec08, 0xe9b2, +0xec08, 0xea61, 0xec97, 0xea61, 0xec97, 0xea61, 0xec97, 0xeb4d, 0xed59, 0xeb4d, 0xed59, +0xeca4, 0xee7d, 0xeca4, 0xee7d, 0xee44, 0xefe1, 0xee44, 0xefe1, 0xefab, 0xf104, 0xefab, +0xf104, 0xf0f3, 0xf202, 0xf0f3, 0xf202, 0xf328, 0xf3e6, 0xf328, 0xf3e6, 0xf328, 0xf3e6, +0xf63f, 0xf6a9, 0xf63f, 0xf6a9, 0xf911, 0xf924, 0xf911, 0xf924, 0xfb9b, 0xfb53, 0xfb9b, +0xfb53, 0xfe5b, 0xfdbb, 0xfe5b, 0xfdbb, 0x126, 0x2d, 0x126, 0x2d, 0x39c, 0x24d, +0x39c, 0x24d, 0x39c, 0x24d, 0x5ae, 0x40f, 0x5ae, 0x40f, 0x77a, 0x58f, 0x77a, +0x58f, 0x8f2, 0x6c2, 0x8f2, 0x6c2, 0xa29, 0x7bc, 0xa29, 0x7bc, 0xb5d, 0x8bb, +0xb5d, 0x8bb, 0xb5d, 0x8bb, 0xca7, 0x9d9, 0xca7, 0x9d9, 0xde6, 0xaf5, 0xde6, +0xaf5, 0xede, 0xbd5, 0xede, 0xbd5, 0xf89, 0xc71, 0xf89, 0xc71, 0xfee, 0xccf, +0xfee, 0xccf, 0xfe5, 0xcc9, 0xfe5, 0xcc9, 0xfe5, 0xcc9, 0xfb7, 0xca6, 0xfb7, +0xca6, 0xf83, 0xc83, 0xf83, 0xc83, 0xf2e, 0xc48, 0xf2e, 0xc48, 0xf25, 0xc5c, +0xf25, 0xc5c, 0xf3d, 0xc96, 0xf3d, 0xc96, 0xf67, 0xce5, 0xf67, 0xce5, 0xf67, +0xce5, 0xf6a, 0xd10, 0xf6a, 0xd10, 0xf28, 0xcf5, 0xf28, 0xcf5, 0xede, 0xcd2, +0xede, 0xcd2, 0xe22, 0xc3d, 0xe22, 0xc3d, 0xd49, 0xb87, 0xd49, 0xb87, 0xd49, +0xb87, 0xcb0, 0xb10, 0xcb0, 0xb10, 0xc7b, 0xaf9, 0xc7b, 0xaf9, 0xc68, 0xb00, +0xc68, 0xb00, 0xc54, 0xb01, 0xc54, 0xb01, 0xc76, 0xb35, 0xc76, 0xb35, 0xc8c, +0xb5a, 0xc8c, 0xb5a, 0xc8c, 0xb5a, 0xc9c, 0xb73, 0xc9c, 0xb73, 0xc5c, 0xb39, +0xc5c, 0xb39, 0xbda, 0xaba, 0xbda, 0xaba, 0xb5e, 0xa3f, 0xb5e, 0xa3f, 0xacb, +0x9aa, 0xacb, 0x9aa, 0xa40, 0x91d, 0xa40, 0x91d, 0xa40, 0x91d, 0x9fa, 0x8d3, +0x9fa, 0x8d3, 0x9bc, 0x892, 0x9bc, 0x892, 0x961, 0x835, 0x961, 0x835, 0x943, +0x816, 0x943, 0x816, 0x95a, 0x82e, 0x95a, 0x82e, 0x95a, 0x82e, 0x972, 0x84a, +0x972, 0x84a, 0x94f, 0x82c, 0x94f, 0x82c, 0x909, 0x7ef, 0x909, 0x7ef, 0x8e5, +0x7d6, 0x8e5, 0x7d6, 0x92d, 0x82b, 0x92d, 0x82b, 0x9b0, 0x8bd, 0x9b0, 0x8bd, +0x9b0, 0x8bd, 0x9da, 0x8f8, 0x9da, 0x8f8, 0x9a9, 0x8da, 0x9a9, 0x8da, 0x946, +0x889, 0x946, 0x889, 0x8fa, 0x850, 0x8fa, 0x850, 0x86d, 0x7d5, 0x86d, 0x7d5, +0x76e, 0x6e6, 0x76e, 0x6e6, 0x76e, 0x6e6, 0x66c, 0x5f2, 0x66c, 0x5f2, 0x59b, +0x52b, 0x59b, 0x52b, 0x519, 0x4af, 0x519, 0x4af, 0x4d1, 0x469, 0x4d1, 0x469, +0x487, 0x41d, 0x487, 0x41d, 0x487, 0x41d, 0x47b, 0x408, 0x47b, 0x408, 0x4bd, +0x43b, 0x4bd, 0x43b, 0x4cd, 0x437, 0x4cd, 0x437, 0x522, 0x473, 0x522, 0x473, +0x59f, 0x4d1, 0x59f, 0x4d1, 0x5f1, 0x4fe, 0x5f1, 0x4fe, 0x5f1, 0x4fe, 0x694, +0x579, 0x694, 0x579, 0x7b0, 0x668, 0x7b0, 0x668, 0x917, 0x79f, 0x917, 0x79f, +0xa74, 0x8ca, 0xa74, 0x8ca, 0xc30, 0xa53, 0xc30, 0xa53, 0xe46, 0xc36, 0xe46, +0xc36, 0xe46, 0xc36, 0x103f, 0xdfd, 0x103f, 0xdfd, 0x11d2, 0xf60, 0x11d2, 0xf60, +0x12f1, 0x1052, 0x12f1, 0x1052, 0x13fb, 0x1132, 0x13fb, 0x1132, 0x14b8, 0x11cb, 0x14b8, +0x11cb, 0x14b8, 0x11cb, 0x1554, 0x1248, 0x1554, 0x1248, 0x15ed, 0x12c9, 0x15ed, 0x12c9, +0x164b, 0x1316, 0x164b, 0x1316, 0x164e, 0x130f, 0x164e, 0x130f, 0x15c4, 0x1281, 0x15c4, +0x1281, 0x14ea, 0x11ac, 0x14ea, 0x11ac, 0x14ea, 0x11ac, 0x13e6, 0x10b3, 0x13e6, 0x10b3, +0x12d3, 0xfb3, 0x12d3, 0xfb3, 0x11b3, 0xeab, 0x11b3, 0xeab, 0x1044, 0xd5c, 0x1044, +0xd5c, 0xec4, 0xbff, 0xec4, 0xbff, 0xec4, 0xbff, 0xd93, 0xaf7, 0xd93, 0xaf7, +0xca7, 0xa37, 0xca7, 0xa37, 0xba2, 0x961, 0xba2, 0x961, 0xabd, 0x8ad, 0xabd, +0x8ad, 0xa68, 0x889, 0xa68, 0x889, 0xa23, 0x877, 0xa23, 0x877, 0xa23, 0x877, +0x967, 0x7ec, 0x967, 0x7ec, 0x86d, 0x723, 0x86d, 0x723, 0x775, 0x65a, 0x775, +0x65a, 0x69e, 0x5b0, 0x69e, 0x5b0, 0x5c9, 0x505, 0x5c9, 0x505, 0x4b4, 0x416, +0x4b4, 0x416, 0x4b4, 0x416, 0x3e4, 0x36b, 0x3e4, 0x36b, 0x3a1, 0x349, 0x3a1, +0x349, 0x335, 0x2fb, 0x335, 0x2fb, 0x262, 0x243, 0x262, 0x243, 0x1a0, 0x19a, +0x1a0, 0x19a, 0x1a0, 0x19a, 0x120, 0x130, 0x120, 0x130, 0xcf, 0xf5, 0xcf, +0xf5, 0x5f, 0x99, 0x5f, 0x99, 0xffa8, 0xfff5, 0xffa8, 0xfff5, 0xfefa, 0xff59, +0xfefa, 0xff59, 0xfe22, 0xfe95, 0xfe22, 0xfe95, 0xfe22, 0xfe95, 0xfd2b, 0xfdb2, 0xfd2b, +0xfdb2, 0xfc1d, 0xfcb8, 0xfc1d, 0xfcb8, 0xfabf, 0xfb6f, 0xfabf, 0xfb6f, 0xf940, 0xfa08, +0xf940, 0xfa08, 0xf7e4, 0xf8c5, 0xf7e4, 0xf8c5, 0xf6d3, 0xf7cf, 0xf6d3, 0xf7cf, 0xf6d3, +0xf7cf, 0xf616, 0xf72e, 0xf616, 0xf72e, 0xf5e9, 0xf720, 0xf5e9, 0xf720, 0xf5dd, 0xf734, +0xf5dd, 0xf734, 0xf5d6, 0xf74f, 0xf5d6, 0xf74f, 0xf60a, 0xf7a6, 0xf60a, 0xf7a6, 0xf60a, +0xf7a6, 0xf637, 0xf7f7, 0xf637, 0xf7f7, 0xf656, 0xf83b, 0xf656, 0xf83b, 0xf61a, 0xf824, +0xf61a, 0xf824, 0xf5b6, 0xf7e5, 0xf5b6, 0xf7e5, 0xf53d, 0xf790, 0xf53d, 0xf790, 0xf491, +0xf708, 0xf491, 0xf708, 0xf491, 0xf708, 0xf3d7, 0xf671, 0xf3d7, 0xf671, 0xf311, 0xf5cb, +0xf311, 0xf5cb, 0xf1d2, 0xf4aa, 0xf1d2, 0xf4aa, 0xf03c, 0xf330, 0xf03c, 0xf330, 0xeefd, +0xf20b, 0xeefd, 0xf20b, 0xedb1, 0xf0d5, 0xedb1, 0xf0d5, 0xedb1, 0xf0d5, 0xec56, 0xef8e, +0xec56, 0xef8e, 0xeb17, 0xee5e, 0xeb17, 0xee5e, 0xea13, 0xed67, 0xea13, 0xed67, 0xe9a6, +0xed03, 0xe9a6, 0xed03, 0xe95d, 0xecc0, 0xe95d, 0xecc0, 0xe95d, 0xecc0, 0xe8a4, 0xec09, +0xe8a4, 0xec09, 0xe7e0, 0xeb44, 0xe7e0, 0xeb44, 0xe77c, 0xeadc, 0xe77c, 0xeadc, 0xe6c3, +0xea1c, 0xe6c3, 0xea1c, 0xe5e1, 0xe930, 0xe5e1, 0xe930, 0xe568, 0xe8aa, 0xe568, 0xe8aa, +0xe568, 0xe8aa, 0xe575, 0xe8a8, 0xe575, 0xe8a8, 0xe650, 0xe972, 0xe650, 0xe972, 0xe7e5, +0xeaf4, 0xe7e5, 0xeaf4, 0xe989, 0xec84, 0xe989, 0xec84, 0xea90, 0xed74, 0xea90, 0xed74, +0xeb31, 0xee00, 0xeb31, 0xee00, 0xeb31, 0xee00, 0xec0c, 0xeec3, 0xec0c, 0xeec3, 0xece8, +0xef89, 0xece8, 0xef89, 0xed59, 0xefe4, 0xed59, 0xefe4, 0xedc7, 0xf03d, 0xedc7, 0xf03d, +0xee36, 0xf098, 0xee36, 0xf098, 0xee36, 0xf098, 0xee55, 0xf0a5, 0xee55, 0xf0a5, 0xee1f, +0xf05f, 0xee1f, 0xf05f, 0xede2, 0xf014, 0xede2, 0xf014, 0xedf6, 0xf01c, 0xedf6, 0xf01c, +0xee0e, 0xf02c, 0xee0e, 0xf02c, 0xee23, 0xf03d, 0xee23, 0xf03d, 0xee23, 0xf03d, 0xee04, +0xf01d, 0xee04, 0xf01d, 0xed8c, 0xefa7, 0xed8c, 0xefa7, 0xecd4, 0xeef5, 0xecd4, 0xeef5, +0xec2f, 0xee5a, 0xec2f, 0xee5a, 0xec1a, 0xee52, 0xec1a, 0xee52, 0xebf8, 0xee40, 0xebf8, +0xee40, 0xebf8, 0xee40, 0xebc2, 0xee1e, 0xebc2, 0xee1e, 0xebd4, 0xee46, 0xebd4, 0xee46, +0xebc5, 0xee50, 0xebc5, 0xee50, 0xeb40, 0xede6, 0xeb40, 0xede6, 0xea4b, 0xed0d, 0xea4b, +0xed0d, 0xea4b, 0xed0d, 0xe93e, 0xec1c, 0xe93e, 0xec1c, 0xe840, 0xeb3b, 0xe840, 0xeb3b, +0xe76b, 0xea81, 0xe76b, 0xea81, 0xe687, 0xe9b8, 0xe687, 0xe9b8, 0xe5b1, 0xe8fb, 0xe5b1, +0xe8fb, 0xe570, 0xe8cf, 0xe570, 0xe8cf, 0xe570, 0xe8cf, 0xe567, 0xe8d8, 0xe567, 0xe8d8, +0xe559, 0xe8d8, 0xe559, 0xe8d8, 0xe584, 0xe90c, 0xe584, 0xe90c, 0xe5b3, 0xe93e, 0xe5b3, +0xe93e, 0xe59e, 0xe927, 0xe59e, 0xe927, 0xe570, 0xe8f2, 0xe570, 0xe8f2, 0xe570, 0xe8f2, +0xe52f, 0xe8a1, 0xe52f, 0xe8a1, 0xe4d0, 0xe82e, 0xe4d0, 0xe82e, 0xe4a3, 0xe7e5, 0xe4a3, +0xe7e5, 0xe4f7, 0xe816, 0xe4f7, 0xe816, 0xe572, 0xe86a, 0xe572, 0xe86a, 0xe572, 0xe86a, +0xe5d8, 0xe8a1, 0xe5d8, 0xe8a1, 0xe6d2, 0xe968, 0xe6d2, 0xe968, 0xe837, 0xea95, 0xe837, +0xea95, 0xe981, 0xeba4, 0xe981, 0xeba4, 0xeac9, 0xecad, 0xeac9, 0xecad, 0xec4e, 0xedf1, +0xec4e, 0xedf1, 0xec4e, 0xedf1, 0xee4c, 0xefac, 0xee4c, 0xefac, 0xf087, 0xf1a3, 0xf087, +0xf1a3, 0xf283, 0xf35b, 0xf283, 0xf35b, 0xf44d, 0xf4e3, 0xf44d, 0xf4e3, 0xf676, 0xf6ca, +0xf676, 0xf6ca, 0xf8a0, 0xf8b6, 0xf8a0, 0xf8b6, 0xf8a0, 0xf8b6, 0xfa34, 0xfa0d, 0xfa34, +0xfa0d, 0xfb6b, 0xfb0c, 0xfb6b, 0xfb0c, 0xfc74, 0xfbe0, 0xfc74, 0xfbe0, 0xfd41, 0xfc7c, +0xfd41, 0xfc7c, 0xfe3d, 0xfd4a, 0xfe3d, 0xfd4a, 0xfe3d, 0xfd4a, 0xff8c, 0xfe70, 0xff8c, +0xfe70, 0xb2, 0xff70, 0xb2, 0xff70, 0x1ba, 0x55, 0x1ba, 0x55, 0x2cf, 0x14b, +0x2cf, 0x14b, 0x3f6, 0x255, 0x3f6, 0x255, 0x4c1, 0x305, 0x4c1, 0x305, 0x4c1, +0x305, 0x554, 0x37e, 0x554, 0x37e, 0x628, 0x439, 0x628, 0x439, 0x6e7, 0x4df, +0x6e7, 0x4df, 0x7b1, 0x58f, 0x7b1, 0x58f, 0x8d0, 0x693, 0x8d0, 0x693, 0xa93, +0x83a, 0xa93, 0x83a, 0xa93, 0x83a, 0xcb3, 0xa3d, 0xcb3, 0xa3d, 0xeea, 0xc53, +0xeea, 0xc53, 0x116a, 0xeb1, 0x116a, 0xeb1, 0x13f6, 0x1118, 0x13f6, 0x1118, 0x166d, +0x136a, 0x166d, 0x136a, 0x166d, 0x136a, 0x188c, 0x1562, 0x188c, 0x1562, 0x1a8e, 0x173b, +0x1a8e, 0x173b, 0x1c97, 0x191d, 0x1c97, 0x191d, 0x1e8a, 0x1ae8, 0x1e8a, 0x1ae8, 0x2093, +0x1ccb, 0x2093, 0x1ccb, 0x2244, 0x1e59, 0x2244, 0x1e59, 0x2244, 0x1e59, 0x234a, 0x1f40, +0x234a, 0x1f40, 0x23ec, 0x1fc8, 0x23ec, 0x1fc8, 0x2435, 0x1ffc, 0x2435, 0x1ffc, 0x23de, +0x1f97, 0x23de, 0x1f97, 0x2372, 0x1f24, 0x2372, 0x1f24, 0x2372, 0x1f24, 0x236f, 0x1f23, +0x236f, 0x1f23, 0x237c, 0x1f3b, 0x237c, 0x1f3b, 0x237b, 0x1f4f, 0x237b, 0x1f4f, 0x2354, +0x1f46, 0x2354, 0x1f46, 0x22ad, 0x1ec6, 0x22ad, 0x1ec6, 0x21e3, 0x1e2d, 0x21e3, 0x1e2d, +0x21e3, 0x1e2d, 0x2160, 0x1de4, 0x2160, 0x1de4, 0x20b1, 0x1d77, 0x20b1, 0x1d77, 0x1fb7, +0x1cc8, 0x1fb7, 0x1cc8, 0x1e81, 0x1be1, 0x1e81, 0x1be1, 0x1d21, 0x1ad6, 0x1d21, 0x1ad6, +0x1bc0, 0x19cd, 0x1bc0, 0x19cd, 0x1bc0, 0x19cd, 0x1a55, 0x18bc, 0x1a55, 0x18bc, 0x18ca, +0x178c, 0x18ca, 0x178c, 0x16d3, 0x15ef, 0x16d3, 0x15ef, 0x1458, 0x13ca, 0x1458, 0x13ca, +0x11a5, 0x116a, 0x11a5, 0x116a, 0x11a5, 0x116a, 0xf08, 0xf19, 0xf08, 0xf19, 0xc66, +0xcbd, 0xc66, 0xcbd, 0xa47, 0xadc, 0xa47, 0xadc, 0x8cf, 0x99b, 0x8cf, 0x99b, +0x759, 0x851, 0x759, 0x851, 0x60c, 0x727, 0x60c, 0x727, 0x60c, 0x727, 0x497, +0x5cc, 0x497, 0x5cc, 0x2e4, 0x42a, 0x2e4, 0x42a, 0x156, 0x2a4, 0x156, 0x2a4, +0xffd1, 0x121, 0xffd1, 0x121, 0xfe37, 0xff81, 0xfe37, 0xff81, 0xfcd1, 0xfe11, 0xfcd1, +0xfe11, 0xfcd1, 0xfe11, 0xfbe2, 0xfd13, 0xfbe2, 0xfd13, 0xfb33, 0xfc53, 0xfb33, 0xfc53, +0xfadc, 0xfbea, 0xfadc, 0xfbea, 0xfab6, 0xfbb3, 0xfab6, 0xfbb3, 0xfad0, 0xfbbd, 0xfad0, +0xfbbd, 0xfad0, 0xfbbd, 0xfb2a, 0xfc0a, 0xfb2a, 0xfc0a, 0xfb47, 0xfc21, 0xfb47, 0xfc21, +0xfb3c, 0xfc13, 0xfb3c, 0xfc13, 0xfad1, 0xfbad, 0xfad1, 0xfbad, 0xf9e7, 0xface, 0xf9e7, +0xface, 0xf8fa, 0xf9f3, 0xf8fa, 0xf9f3, 0xf8fa, 0xf9f3, 0xf83e, 0xf950, 0xf83e, 0xf950, +0xf78d, 0xf8be, 0xf78d, 0xf8be, 0xf6da, 0xf830, 0xf6da, 0xf830, 0xf5da, 0xf75b, 0xf5da, +0xf75b, 0xf483, 0xf632, 0xf483, 0xf632, 0xf315, 0xf4f4, 0xf315, 0xf4f4, 0xf315, 0xf4f4, +0xf158, 0xf368, 0xf158, 0xf368, 0xef91, 0xf1d2, 0xef91, 0xf1d2, 0xee0a, 0xf078, 0xee0a, +0xf078, 0xeca3, 0xef3a, 0xeca3, 0xef3a, 0xeb42, 0xedfc, 0xeb42, 0xedfc, 0xeb42, 0xedfc, +0xea15, 0xecec, 0xea15, 0xecec, 0xe96b, 0xec54, 0xe96b, 0xec54, 0xe8e0, 0xebd1, 0xe8e0, +0xebd1, 0xe82c, 0xeb1a, 0xe82c, 0xeb1a, 0xe7d6, 0xeab5, 0xe7d6, 0xeab5, 0xe858, 0xeb1b, +0xe858, 0xeb1b, 0xe858, 0xeb1b, 0xe919, 0xebb4, 0xe919, 0xebb4, 0xe9d4, 0xec3a, 0xe9d4, +0xec3a, 0xeb43, 0xed68, 0xeb43, 0xed68, 0xed7a, 0xef52, 0xed7a, 0xef52, 0xf006, 0xf189, +0xf006, 0xf189, 0xf2d3, 0xf3f8, 0xf2d3, 0xf3f8, 0xf2d3, 0xf3f8, 0xf5af, 0xf66f, 0xf5af, +0xf66f, 0xf876, 0xf8cb, 0xf876, 0xf8cb, 0xfb55, 0xfb3f, 0xfb55, 0xfb3f, 0xfe26, 0xfda2, +0xfe26, 0xfda2, 0xb8, 0xffc8, 0xb8, 0xffc8, 0xb8, 0xffc8, 0x2e5, 0x18c, 0x2e5, +0x18c, 0x502, 0x345, 0x502, 0x345, 0x736, 0x51e, 0x736, 0x51e, 0x909, 0x69e, +0x909, 0x69e, 0xa8a, 0x7d7, 0xa8a, 0x7d7, 0xbb9, 0x8ca, 0xbb9, 0x8ca, 0xbb9, +0x8ca, 0xcd4, 0x9b5, 0xcd4, 0x9b5, 0xdd2, 0xa90, 0xdd2, 0xa90, 0xe77, 0xb21, +0xe77, 0xb21, 0xeaf, 0xb51, 0xeaf, 0xb51, 0xe5f, 0xb06, 0xe5f, 0xb06, 0xe05, +0xabe, 0xe05, 0xabe, 0xe05, 0xabe, 0xd9e, 0xa73, 0xd9e, 0xa73, 0xd8d, 0xa89, +0xd8d, 0xa89, 0xdff, 0xb29, 0xdff, 0xb29, 0xe51, 0xbb1, 0xe51, 0xbb1, 0xe5f, +0xbf9, 0xe5f, 0xbf9, 0xe5f, 0xbf9, 0xe0b, 0xbe4, 0xe0b, 0xbe4, 0xd79, 0xb91, +0xd79, 0xb91, 0xcd5, 0xb2c, 0xcd5, 0xb2c, 0xc2e, 0xac3, 0xc2e, 0xac3, 0xb7d, +0xa4c, 0xb7d, 0xa4c, 0xaf1, 0x9f6, 0xaf1, 0x9f6, 0xaf1, 0x9f6, 0xac9, 0x9fd, +0xac9, 0x9fd, 0xae1, 0xa3f, 0xae1, 0xa3f, 0xb1a, 0xa9a, 0xb1a, 0xa9a, 0xb43, +0xade, 0xb43, 0xade, 0xb60, 0xb0e, 0xb60, 0xb0e, 0xb91, 0xb4b, 0xb91, 0xb4b, +0xb91, 0xb4b, 0xb84, 0xb44, 0xb84, 0xb44, 0xb06, 0xac6, 0xb06, 0xac6, 0xa95, +0xa4f, 0xa95, 0xa4f, 0xa45, 0x9f4, 0xa45, 0x9f4, 0xa19, 0x9bb, 0xa19, 0x9bb, +0xa19, 0x9bb, 0xa2a, 0x9be, 0xa2a, 0x9be, 0xa1d, 0x9a1, 0xa1d, 0x9a1, 0x9ee, +0x962, 0x9ee, 0x962, 0x9a4, 0x90a, 0x9a4, 0x90a, 0x94c, 0x8a6, 0x94c, 0x8a6, +0x8e0, 0x831, 0x8e0, 0x831, 0x8e0, 0x831, 0x8a1, 0x7ed, 0x8a1, 0x7ed, 0x8e9, +0x834, 0x8e9, 0x834, 0x98d, 0x8db, 0x98d, 0x8db, 0xa2b, 0x981, 0xa2b, 0x981, +0xa7b, 0x9dc, 0xa7b, 0x9dc, 0xa80, 0x9f0, 0xa80, 0x9f0, 0xa80, 0x9f0, 0xa53, +0x9d5, 0xa53, 0x9d5, 0xa5f, 0x9f5, 0xa5f, 0x9f5, 0xa3c, 0x9e7, 0xa3c, 0x9e7, +0x989, 0x949, 0x989, 0x949, 0x8fb, 0x8ce, 0x8fb, 0x8ce, 0x8fb, 0x8ce, 0x8a5, +0x88a, 0x8a5, 0x88a, 0x80a, 0x7fd, 0x80a, 0x7fd, 0x74c, 0x74a, 0x74c, 0x74a, +0x6f1, 0x6f2, 0x6f1, 0x6f2, 0x65e, 0x65e, 0x65e, 0x65e, 0x5a5, 0x59c, 0x5a5, +0x59c, 0x5a5, 0x59c, 0x570, 0x558, 0x570, 0x558, 0x553, 0x522, 0x553, 0x522, +0x51f, 0x4d0, 0x51f, 0x4d0, 0x537, 0x4c1, 0x537, 0x4c1, 0x5bc, 0x51a, 0x5bc, +0x51a, 0x639, 0x563, 0x639, 0x563, 0x639, 0x563, 0x6fb, 0x5ec, 0x6fb, 0x5ec, +0x84e, 0x702, 0x84e, 0x702, 0xa07, 0x87b, 0xa07, 0x87b, 0xc2d, 0xa5e, 0xc2d, +0xa5e, 0xe3b, 0xc2a, 0xe3b, 0xc2a, 0xe3b, 0xc2a, 0x102f, 0xddb, 0x102f, 0xddb, +0x1225, 0xf92, 0x1225, 0xf92, 0x13d2, 0x1102, 0x13d2, 0x1102, 0x152f, 0x1228, 0x152f, +0x1228, 0x1689, 0x1351, 0x1689, 0x1351, 0x17a9, 0x1447, 0x17a9, 0x1447, 0x17a9, 0x1447, +0x1856, 0x14d1, 0x1856, 0x14d1, 0x18eb, 0x154d, 0x18eb, 0x154d, 0x1935, 0x1587, 0x1935, +0x1587, 0x1907, 0x1551, 0x1907, 0x1551, 0x1871, 0x14bd, 0x1871, 0x14bd, 0x1871, 0x14bd, +0x179b, 0x13f2, 0x179b, 0x13f2, 0x165f, 0x12cb, 0x165f, 0x12cb, 0x14c5, 0x114e, 0x14c5, +0x114e, 0x13a7, 0x1053, 0x13a7, 0x1053, 0x1303, 0xfda, 0x1303, 0xfda, 0x121b, 0xf23, +0x121b, 0xf23, 0x121b, 0xf23, 0x10cc, 0xe09, 0x10cc, 0xe09, 0xf63, 0xcd9, 0xf63, +0xcd9, 0xe5e, 0xc0f, 0xe5e, 0xc0f, 0xdf0, 0xbde, 0xdf0, 0xbde, 0xd12, 0xb3e, +0xd12, 0xb3e, 0xb8b, 0x9f3, 0xb8b, 0x9f3, 0xb8b, 0x9f3, 0xa52, 0x8f5, 0xa52, +0x8f5, 0x98d, 0x869, 0x98d, 0x869, 0x8d5, 0x7e7, 0x8d5, 0x7e7, 0x807, 0x74b, +0x807, 0x74b, 0x70a, 0x67d, 0x70a, 0x67d, 0x70a, 0x67d, 0x5bb, 0x558, 0x5bb, +0x558, 0x4ba, 0x47c, 0x4ba, 0x47c, 0x3ce, 0x3b2, 0x3ce, 0x3b2, 0x2c4, 0x2c5, +0x2c4, 0x2c5, 0x244, 0x25e, 0x244, 0x25e, 0x1e7, 0x217, 0x1e7, 0x217, 0x1e7, +0x217, 0x1a5, 0x1e7, 0x1a5, 0x1e7, 0x152, 0x1a4, 0x152, 0x1a4, 0xae, 0x10d, +0xae, 0x10d, 0xffb5, 0x20, 0xffb5, 0x20, 0xfe6e, 0xfee5, 0xfe6e, 0xfee5, 0xfd47, +0xfdc7, 0xfd47, 0xfdc7, 0xfd47, 0xfdc7, 0xfbc9, 0xfc54, 0xfbc9, 0xfc54, 0xfa12, 0xfaa8, +0xfa12, 0xfaa8, 0xf8bc, 0xf95f, 0xf8bc, 0xf95f, 0xf772, 0xf822, 0xf772, 0xf822, 0xf605, +0xf6c6, 0xf605, 0xf6c6, 0xf605, 0xf6c6, 0xf50d, 0xf5e0, 0xf50d, 0xf5e0, 0xf48e, 0xf574, +0xf48e, 0xf574, 0xf43e, 0xf53b, 0xf43e, 0xf53b, 0xf44e, 0xf564, 0xf44e, 0xf564, 0xf449, +0xf57a, 0xf449, 0xf57a, 0xf3fa, 0xf54a, 0xf3fa, 0xf54a, 0xf3fa, 0xf54a, 0xf3c8, 0xf538, +0xf3c8, 0xf538, 0xf38c, 0xf51e, 0xf38c, 0xf51e, 0xf2f1, 0xf4a7, 0xf2f1, 0xf4a7, 0xf296, +0xf472, 0xf296, 0xf472, 0xf278, 0xf47b, 0xf278, 0xf47b, 0xf1e0, 0xf40a, 0xf1e0, 0xf40a, +0xf1e0, 0xf40a, 0xf102, 0xf354, 0xf102, 0xf354, 0xefc2, 0xf23c, 0xefc2, 0xf23c, 0xee57, +0xf0f7, 0xee57, 0xf0f7, 0xecf0, 0xefb6, 0xecf0, 0xefb6, 0xeb47, 0xee32, 0xeb47, 0xee32, +0xeb47, 0xee32, 0xe990, 0xec9d, 0xe990, 0xec9d, 0xe829, 0xeb55, 0xe829, 0xeb55, 0xe741, +0xea8a, 0xe741, 0xea8a, 0xe66f, 0xe9d2, 0xe66f, 0xe9d2, 0xe58d, 0xe905, 0xe58d, 0xe905, +0xe47b, 0xe805, 0xe47b, 0xe805, 0xe47b, 0xe805, 0xe33d, 0xe6d4, 0xe33d, 0xe6d4, 0xe22d, +0xe5cb, 0xe22d, 0xe5cb, 0xe160, 0xe501, 0xe160, 0xe501, 0xe0bb, 0xe45a, 0xe0bb, 0xe45a, +0xe063, 0xe3fc, 0xe063, 0xe3fc, 0xe0e8, 0xe474, 0xe0e8, 0xe474, 0xe0e8, 0xe474, 0xe23c, +0xe5b7, 0xe23c, 0xe5b7, 0xe3b4, 0xe71a, 0xe3b4, 0xe71a, 0xe505, 0xe852, 0xe505, 0xe852, +0xe682, 0xe9b0, 0xe682, 0xe9b0, 0xe7d4, 0xeae1, 0xe7d4, 0xeae1, 0xe7d4, 0xeae1, 0xe8c3, +0xebad, 0xe8c3, 0xebad, 0xe99c, 0xec5f, 0xe99c, 0xec5f, 0xea47, 0xece3, 0xea47, 0xece3, +0xeb1a, 0xed8e, 0xeb1a, 0xed8e, 0xec15, 0xee61, 0xec15, 0xee61, 0xed1f, 0xef45, 0xed1f, +0xef45, 0xed1f, 0xef45, 0xee1f, 0xf021, 0xee1f, 0xf021, 0xee9b, 0xf07b, 0xee9b, 0xf07b, +0xee86, 0xf048, 0xee86, 0xf048, 0xeea7, 0xf04f, 0xeea7, 0xf04f, 0xeed1, 0xf065, 0xeed1, +0xf065, 0xee3b, 0xefc0, 0xee3b, 0xefc0, 0xee3b, 0xefc0, 0xedb0, 0xef2d, 0xedb0, 0xef2d, +0xed3a, 0xeeb5, 0xed3a, 0xeeb5, 0xecc4, 0xee44, 0xecc4, 0xee44, 0xecae, 0xee3a, 0xecae, +0xee3a, 0xec91, 0xee30, 0xec91, 0xee30, 0xec91, 0xee30, 0xec68, 0xee21, 0xec68, 0xee21, +0xec42, 0xee1a, 0xec42, 0xee1a, 0xec44, 0xee41, 0xec44, 0xee41, 0xec53, 0xee7b, 0xec53, +0xee7b, 0xec14, 0xee6a, 0xec14, 0xee6a, 0xeb2b, 0xedb4, 0xeb2b, 0xedb4, 0xeb2b, 0xedb4, +0xe9de, 0xec9a, 0xe9de, 0xec9a, 0xe8b2, 0xeba4, 0xe8b2, 0xeba4, 0xe7ba, 0xeae0, 0xe7ba, +0xeae0, 0xe6ff, 0xea5a, 0xe6ff, 0xea5a, 0xe67f, 0xea0b, 0xe67f, 0xea0b, 0xe67b, 0xea36, +0xe67b, 0xea36, 0xe67b, 0xea36, 0xe67e, 0xea63, 0xe67e, 0xea63, 0xe674, 0xea7e, 0xe674, +0xea7e, 0xe6de, 0xeb06, 0xe6de, 0xeb06, 0xe70b, 0xeb4a, 0xe70b, 0xeb4a, 0xe69c, 0xeaeb, +0xe69c, 0xeaeb, 0xe69c, 0xeaeb, 0xe637, 0xea8e, 0xe637, 0xea8e, 0xe61b, 0xea73, 0xe61b, +0xea73, 0xe602, 0xea51, 0xe602, 0xea51, 0xe5c7, 0xea06, 0xe5c7, 0xea06, 0xe576, 0xe99c, +0xe576, 0xe99c, 0xe599, 0xe99f, 0xe599, 0xe99f, 0xe599, 0xe99f, 0xe64d, 0xea2c, 0xe64d, +0xea2c, 0xe727, 0xead9, 0xe727, 0xead9, 0xe81f, 0xeb9e, 0xe81f, 0xeb9e, 0xe999, 0xece1, +0xe999, 0xece1, 0xeb86, 0xee93, 0xeb86, 0xee93, 0xed84, 0xf052, 0xed84, 0xf052, 0xed84, +0xf052, 0xefab, 0xf239, 0xefab, 0xf239, 0xf1b1, 0xf3fd, 0xf1b1, 0xf3fd, 0xf39d, 0xf5a7, +0xf39d, 0xf5a7, 0xf582, 0xf74b, 0xf582, 0xf74b, 0xf78b, 0xf913, 0xf78b, 0xf913, 0xf78b, +0xf913, 0xf9a3, 0xfaec, 0xf9a3, 0xfaec, 0xfb49, 0xfc54, 0xfb49, 0xfc54, 0xfce0, 0xfdb0, +0xfce0, 0xfdb0, 0xfe72, 0xff09, 0xfe72, 0xff09, 0xffb5, 0x15, 0xffb5, 0x15, 0x76, +0xa1, 0x76, 0xa1, 0x76, 0xa1, 0x109, 0x102, 0x109, 0x102, 0x1ab, 0x174, +0x1ab, 0x174, 0x25d, 0x1f7, 0x25d, 0x1f7, 0x321, 0x28d, 0x321, 0x28d, 0x3d7, +0x315, 0x3d7, 0x315, 0x49b, 0x3ab, 0x49b, 0x3ab, 0x49b, 0x3ab, 0x4ec, 0x3ce, +0x4ec, 0x3ce, 0x560, 0x413, 0x560, 0x413, 0x66b, 0x4ed, 0x66b, 0x4ed, 0x7c0, +0x60f, 0x7c0, 0x60f, 0x966, 0x781, 0x966, 0x781, 0x966, 0x781, 0xb4f, 0x933, +0xb4f, 0x933, 0xd62, 0xb0d, 0xd62, 0xb0d, 0xf6f, 0xce0, 0xf6f, 0xce0, 0x1211, +0xf46, 0x1211, 0xf46, 0x14d5, 0x11cc, 0x14d5, 0x11cc, 0x1742, 0x13fc, 0x1742, 0x13fc, +0x1742, 0x13fc, 0x1994, 0x1610, 0x1994, 0x1610, 0x1bb9, 0x17f7, 0x1bb9, 0x17f7, 0x1dd2, +0x19d5, 0x1dd2, 0x19d5, 0x1fa1, 0x1b6c, 0x1fa1, 0x1b6c, 0x2151, 0x1ce6, 0x2151, 0x1ce6, +0x2151, 0x1ce6, 0x22d9, 0x1e3e, 0x22d9, 0x1e3e, 0x2419, 0x1f53, 0x2419, 0x1f53, 0x24ba, +0x1fd0, 0x24ba, 0x1fd0, 0x24a5, 0x1f9d, 0x24a5, 0x1f9d, 0x24a8, 0x1f8b, 0x24a8, 0x1f8b, +0x250a, 0x1fe1, 0x250a, 0x1fe1, 0x250a, 0x1fe1, 0x2569, 0x203e, 0x2569, 0x203e, 0x2566, +0x2041, 0x2566, 0x2041, 0x2515, 0x2001, 0x2515, 0x2001, 0x24a1, 0x1fa8, 0x24a1, 0x1fa8, +0x243e, 0x1f69, 0x243e, 0x1f69, 0x23a5, 0x1efd, 0x23a5, 0x1efd, 0x23a5, 0x1efd, 0x22af, +0x1e3d, 0x22af, 0x1e3d, 0x2167, 0x1d34, 0x2167, 0x1d34, 0x202e, 0x1c41, 0x202e, 0x1c41, +0x1f66, 0x1bc4, 0x1f66, 0x1bc4, 0x1e84, 0x1b32, 0x1e84, 0x1b32, 0x1e84, 0x1b32, 0x1d1c, +0x1a1e, 0x1d1c, 0x1a1e, 0x1b07, 0x185f, 0x1b07, 0x185f, 0x18d1, 0x1680, 0x18d1, 0x1680, +0x1628, 0x142f, 0x1628, 0x142f, 0x1326, 0x1182, 0x1326, 0x1182, 0x1093, 0xf42, 0x1093, +0xf42, 0x1093, 0xf42, 0xe29, 0xd27, 0xe29, 0xd27, 0xc2b, 0xb72, 0xc2b, 0xb72, +0xa7d, 0xa08, 0xa7d, 0xa08, 0x8fe, 0x8c6, 0x8fe, 0x8c6, 0x75b, 0x75a, 0x75b, +0x75a, 0x563, 0x591, 0x563, 0x591, 0x563, 0x591, 0x34b, 0x3a0, 0x34b, 0x3a0, +0x127, 0x19d, 0x127, 0x19d, 0xff42, 0xffd2, 0xff42, 0xffd2, 0xfd6e, 0xfe12, 0xfd6e, +0xfe12, 0xfbdf, 0xfc91, 0xfbdf, 0xfc91, 0xfbdf, 0xfc91, 0xfac0, 0xfb7c, 0xfac0, 0xfb7c, +0xf9f6, 0xfab6, 0xf9f6, 0xfab6, 0xf978, 0xfa3b, 0xf978, 0xfa3b, 0xf961, 0xfa26, 0xf961, +0xfa26, 0xf978, 0xfa3c, 0xf978, 0xfa3c, 0xf984, 0xfa49, 0xf984, 0xfa49, 0xf984, 0xfa49, +0xf993, 0xfa59, 0xf993, 0xfa59, 0xf9a6, 0xfa70, 0xf9a6, 0xfa70, 0xf9a3, 0xfa74, 0xf9a3, +0xfa74, 0xf8f6, 0xf9d2, 0xf8f6, 0xf9d2, 0xf824, 0xf90e, 0xf824, 0xf90e, 0xf76a, 0xf868, +0xf76a, 0xf868, 0xf76a, 0xf868, 0xf6c2, 0xf7d7, 0xf6c2, 0xf7d7, 0xf662, 0xf792, 0xf662, +0xf792, 0xf5cb, 0xf71b, 0xf5cb, 0xf71b, 0xf4d5, 0xf647, 0xf4d5, 0xf647, 0xf388, 0xf51e, +0xf388, 0xf51e, 0xf388, 0xf51e, 0xf230, 0xf3ec, 0xf230, 0xf3ec, 0xf09f, 0xf282, 0xf09f, +0xf282, 0xeecd, 0xf0d4, 0xeecd, 0xf0d4, 0xed0a, 0xef34, 0xed0a, 0xef34, 0xebbb, 0xee04, +0xebbb, 0xee04, 0xeaee, 0xed51, 0xeaee, 0xed51, 0xeaee, 0xed51, 0xe9d3, 0xec49, 0xe9d3, +0xec49, 0xe881, 0xeb04, 0xe881, 0xeb04, 0xe7a3, 0xea29, 0xe7a3, 0xea29, 0xe76e, 0xe9ee, +0xe76e, 0xe9ee, 0xe7ac, 0xea1d, 0xe7ac, 0xea1d, 0xe83b, 0xea90, 0xe83b, 0xea90, 0xe83b, +0xea90, 0xe8da, 0xeb0a, 0xe8da, 0xeb0a, 0xea1c, 0xec1d, 0xea1c, 0xec1d, 0xec41, 0xee07, +0xec41, 0xee07, 0xeea8, 0xf02a, 0xeea8, 0xf02a, 0xf16f, 0xf2a4, 0xf16f, 0xf2a4, 0xf16f, +0xf2a4, 0xf450, 0xf530, 0xf450, 0xf530, 0xf753, 0xf7d7, 0xf753, 0xf7d7, 0xfa40, 0xfa64, +0xfa40, 0xfa64, 0xfcf1, 0xfcb1, 0xfcf1, 0xfcb1, 0xff7e, 0xfed9, 0xff7e, 0xfed9, 0x1f1, +0xe6, 0x1f1, 0xe6, 0x1f1, 0xe6, 0x4a9, 0x33b, 0x4a9, 0x33b, 0x76d, 0x59f, +0x76d, 0x59f, 0x9d2, 0x7a9, 0x9d2, 0x7a9, 0xb6a, 0x8ee, 0xb6a, 0x8ee, 0xcdb, +0xa13, 0xcdb, 0xa13, 0xe15, 0xb0b, 0xe15, 0xb0b, 0xe15, 0xb0b, 0xedb, 0xb99, +0xedb, 0xb99, 0xfb1, 0xc42, 0xfb1, 0xc42, 0x1041, 0xcaf, 0x1041, 0xcaf, 0x10a1, +0xcf8, 0x10a1, 0xcf8, 0x10d4, 0xd1f, 0x10d4, 0xd1f, 0x10d4, 0xd1f, 0x10c4, 0xd0e, +0x10c4, 0xd0e, 0x109a, 0xced, 0x109a, 0xced, 0x10ea, 0xd4d, 0x10ea, 0xd4d, 0x115a, +0xdd7, 0x115a, 0xdd7, 0x114d, 0xdea, 0x114d, 0xdea, 0x1128, 0xdea, 0x1128, 0xdea, +0x1128, 0xdea, 0x10d1, 0xdbc, 0x10d1, 0xdbc, 0x1070, 0xd87, 0x1070, 0xd87, 0xfd5, +0xd19, 0xfd5, 0xd19, 0xeef, 0xc60, 0xeef, 0xc60, 0xe3c, 0xbd9, 0xe3c, 0xbd9, +0xdee, 0xbb4, 0xdee, 0xbb4, 0xdee, 0xbb4, 0xdb1, 0xb9e, 0xdb1, 0xb9e, 0xd6e, +0xb7f, 0xd6e, 0xb7f, 0xd8f, 0xbbf, 0xd8f, 0xbbf, 0xde0, 0xc2c, 0xde0, 0xc2c, +0xe0f, 0xc73, 0xe0f, 0xc73, 0xe0f, 0xc73, 0xdac, 0xc23, 0xdac, 0xc23, 0xcff, +0xb87, 0xcff, 0xb87, 0xc6e, 0xb03, 0xc6e, 0xb03, 0xc21, 0xac3, 0xc21, 0xac3, +0xc11, 0xabc, 0xc11, 0xabc, 0xb88, 0xa3e, 0xb88, 0xa3e, 0xb88, 0xa3e, 0xac1, +0x980, 0xac1, 0x980, 0xa2b, 0x8f5, 0xa2b, 0x8f5, 0xa02, 0x8d8, 0xa02, 0x8d8, +0x9f1, 0x8d6, 0x9f1, 0x8d6, 0x96f, 0x866, 0x96f, 0x866, 0x8e3, 0x7ee, 0x8e3, +0x7ee, 0x8e3, 0x7ee, 0x8cd, 0x7f0, 0x8cd, 0x7f0, 0x935, 0x872, 0x935, 0x872, +0x980, 0x8d9, 0x980, 0x8d9, 0x96d, 0x8e5, 0x96d, 0x8e5, 0x980, 0x918, 0x980, +0x918, 0x980, 0x918, 0x994, 0x94d, 0x994, 0x94d, 0x942, 0x91b, 0x942, 0x91b, +0x910, 0x908, 0x910, 0x908, 0x8ce, 0x8e3, 0x8ce, 0x8e3, 0x852, 0x87e, 0x852, +0x87e, 0x819, 0x859, 0x819, 0x859, 0x819, 0x859, 0x7c1, 0x810, 0x7c1, 0x810, +0x715, 0x76b, 0x715, 0x76b, 0x655, 0x6aa, 0x655, 0x6aa, 0x5a5, 0x5f2, 0x5a5, +0x5f2, 0x50a, 0x546, 0x50a, 0x546, 0x490, 0x4b4, 0x490, 0x4b4, 0x490, 0x4b4, +0x418, 0x419, 0x418, 0x419, 0x3b2, 0x388, 0x3b2, 0x388, 0x382, 0x327, 0x382, +0x327, 0x358, 0x2c4, 0x358, 0x2c4, 0x3a9, 0x2d6, 0x3a9, 0x2d6, 0x3a9, 0x2d6, +0x498, 0x381, 0x498, 0x381, 0x5e0, 0x481, 0x5e0, 0x481, 0x74d, 0x5a5, 0x74d, +0x5a5, 0x8c6, 0x6d4, 0x8c6, 0x6d4, 0xabe, 0x882, 0xabe, 0x882, 0xcfb, 0xa78, +0xcfb, 0xa78, 0xcfb, 0xa78, 0xf38, 0xc72, 0xf38, 0xc72, 0x1195, 0xe91, 0x1195, +0xe91, 0x1362, 0x1026, 0x1362, 0x1026, 0x14c6, 0x115a, 0x14c6, 0x115a, 0x1629, 0x1295, +0x1629, 0x1295, 0x1629, 0x1295, 0x16e5, 0x1332, 0x16e5, 0x1332, 0x1759, 0x1391, 0x1759, +0x1391, 0x17a1, 0x13ce, 0x17a1, 0x13ce, 0x17ae, 0x13d9, 0x17ae, 0x13d9, 0x17e4, 0x1418, +0x17e4, 0x1418, 0x17b4, 0x13f8, 0x17b4, 0x13f8, 0x17b4, 0x13f8, 0x16dd, 0x133c, 0x16dd, +0x133c, 0x15bf, 0x1240, 0x15bf, 0x1240, 0x1510, 0x11ba, 0x1510, 0x11ba, 0x1473, 0x114d, +0x1473, 0x114d, 0x134e, 0x105c, 0x134e, 0x105c, 0x1231, 0xf78, 0x1231, 0xf78, 0x1231, +0xf78, 0x1118, 0xe9a, 0x1118, 0xe9a, 0xff8, 0xdb8, 0xff8, 0xdb8, 0xee5, 0xce4, +0xee5, 0xce4, 0xdce, 0xc0b, 0xdce, 0xc0b, 0xcc6, 0xb43, 0xcc6, 0xb43, 0xcc6, +0xb43, 0xc0c, 0xac5, 0xc0c, 0xac5, 0xb8a, 0xa7e, 0xb8a, 0xa7e, 0xaba, 0x9e7, +0xaba, 0x9e7, 0x9a4, 0x907, 0x9a4, 0x907, 0x878, 0x80f, 0x878, 0x80f, 0x755, +0x71b, 0x755, 0x71b, 0x755, 0x71b, 0x64e, 0x642, 0x64e, 0x642, 0x53f, 0x55e, +0x53f, 0x55e, 0x426, 0x46d, 0x426, 0x46d, 0x392, 0x3ff, 0x392, 0x3ff, 0x392, +0x424, 0x392, 0x424, 0x34c, 0x400, 0x34c, 0x400, 0x34c, 0x400, 0x2ba, 0x390, +0x2ba, 0x390, 0x224, 0x31a, 0x224, 0x31a, 0x17c, 0x291, 0x17c, 0x291, 0xae, +0x1e2, 0xae, 0x1e2, 0xffa2, 0xf6, 0xffa2, 0xf6, 0xffa2, 0xf6, 0xfe65, 0xffd8, +0xfe65, 0xffd8, 0xfcdd, 0xfe6f, 0xfcdd, 0xfe6f, 0xfb31, 0xfce2, 0xfb31, 0xfce2, 0xf98e, +0xfb5f, 0xf98e, 0xfb5f, 0xf810, 0xfa01, 0xf810, 0xfa01, 0xf726, 0xf939, 0xf726, 0xf939, +0xf726, 0xf939, 0xf68b, 0xf8be, 0xf68b, 0xf8be, 0xf5e9, 0xf83c, 0xf5e9, 0xf83c, 0xf59b, +0xf80f, 0xf59b, 0xf80f, 0xf54a, 0xf7e0, 0xf54a, 0xf7e0, 0xf4fa, 0xf7af, 0xf4fa, 0xf7af, +0xf4a9, 0xf77e, 0xf4a9, 0xf77e, 0xf4a9, 0xf77e, 0xf3d7, 0xf6cc, 0xf3d7, 0xf6cc, 0xf30a, +0xf61f, 0xf30a, 0xf61f, 0xf2ac, 0xf5df, 0xf2ac, 0xf5df, 0xf2b8, 0xf608, 0xf2b8, 0xf608, +0xf2ad, 0xf619, 0xf2ad, 0xf619, 0xf2ad, 0xf619, 0xf24e, 0xf5d5, 0xf24e, 0xf5d5, 0xf1b3, +0xf553, 0xf1b3, 0xf553, 0xf093, 0xf44b, 0xf093, 0xf44b, 0xef3c, 0xf30a, 0xef3c, 0xf30a, +0xed76, 0xf158, 0xed76, 0xf158, 0xeb72, 0xef65, 0xeb72, 0xef65, 0xeb72, 0xef65, 0xe9ff, +0xee00, 0xe9ff, 0xee00, 0xe8dd, 0xecea, 0xe8dd, 0xecea, 0xe7a6, 0xebbc, 0xe7a6, 0xebbc, +0xe640, 0xea5a, 0xe640, 0xea5a, 0xe4fb, 0xe916, 0xe4fb, 0xe916, 0xe3fd, 0xe815, 0xe3fd, +0xe815, 0xe3fd, 0xe815, 0xe324, 0xe734, 0xe324, 0xe734, 0xe249, 0xe64d, 0xe249, 0xe64d, +0xe178, 0xe56b, 0xe178, 0xe56b, 0xe0f7, 0xe4d4, 0xe0f7, 0xe4d4, 0xe12a, 0xe4ed, 0xe12a, +0xe4ed, 0xe12a, 0xe4ed, 0xe209, 0xe5ad, 0xe209, 0xe5ad, 0xe300, 0xe67f, 0xe300, 0xe67f, +0xe426, 0xe77d, 0xe426, 0xe77d, 0xe567, 0xe892, 0xe567, 0xe892, 0xe69e, 0xe998, 0xe69e, +0xe998, 0xe7b9, 0xea81, 0xe7b9, 0xea81, 0xe7b9, 0xea81, 0xe88f, 0xeb21, 0xe88f, 0xeb21, +0xe962, 0xebbd, 0xe962, 0xebbd, 0xea3c, 0xec61, 0xea3c, 0xec61, 0xeb5d, 0xed4a, 0xeb5d, +0xed4a, 0xecbb, 0xee74, 0xecbb, 0xee74, 0xedfb, 0xef80, 0xedfb, 0xef80, 0xedfb, 0xef80, +0xeeb2, 0xf007, 0xeeb2, 0xf007, 0xeea8, 0xefd1, 0xeea8, 0xefd1, 0xee4b, 0xef4d, 0xee4b, +0xef4d, 0xedeb, 0xeecd, 0xedeb, 0xeecd, 0xedc6, 0xee8e, 0xedc6, 0xee8e, 0xedc6, 0xee8e, +0xedc3, 0xee79, 0xedc3, 0xee79, 0xed50, 0xedfc, 0xed50, 0xedfc, 0xec87, 0xed30, 0xec87, +0xed30, 0xebfa, 0xeca9, 0xebfa, 0xeca9, 0xeba2, 0xec5f, 0xeba2, 0xec5f, 0xeba1, 0xec75, +0xeba1, 0xec75, 0xeba1, 0xec75, 0xebf3, 0xece4, 0xebf3, 0xece4, 0xec1f, 0xed36, 0xec1f, +0xed36, 0xebee, 0xed31, 0xebee, 0xed31, 0xeb8d, 0xed01, 0xeb8d, 0xed01, 0xeb06, 0xecb0, +0xeb06, 0xecb0, 0xe9da, 0xebbd, 0xe9da, 0xebbd, 0xe9da, 0xebbd, 0xe88d, 0xeaac, 0xe88d, +0xeaac, 0xe759, 0xe9b5, 0xe759, 0xe9b5, 0xe668, 0xe900, 0xe668, 0xe900, 0xe5e7, 0xe8ba, +0xe5e7, 0xe8ba, 0xe56f, 0xe87b, 0xe56f, 0xe87b, 0xe56f, 0xe87b, 0xe55f, 0xe8a0, 0xe55f, +0xe8a0, 0xe54e, 0xe8bf, 0xe54e, 0xe8bf, 0xe534, 0xe8ce, 0xe534, 0xe8ce, 0xe4f4, 0xe8b1, +0xe4f4, 0xe8b1, 0xe481, 0xe85a, 0xe481, 0xe85a, 0xe47f, 0xe86b, 0xe47f, 0xe86b, 0xe47f, +0xe86b, 0xe46d, 0xe864, 0xe46d, 0xe864, 0xe3ec, 0xe7e6, 0xe3ec, 0xe7e6, 0xe311, 0xe705, +0xe311, 0xe705, 0xe291, 0xe677, 0xe291, 0xe677, 0xe29e, 0xe66d, 0xe29e, 0xe66d, 0xe2ff, +0xe6b1, 0xe2ff, 0xe6b1, 0xe2ff, 0xe6b1, 0xe387, 0xe713, 0xe387, 0xe713, 0xe3f6, 0xe756, +0xe3f6, 0xe756, 0xe4d8, 0xe806, 0xe4d8, 0xe806, 0xe671, 0xe969, 0xe671, 0xe969, 0xe885, +0xeb43, 0xe885, 0xeb43, 0xe885, 0xeb43, 0xea8f, 0xed0f, 0xea8f, 0xed0f, 0xec88, 0xeec9, +0xec88, 0xeec9, 0xeea8, 0xf0a8, 0xeea8, 0xf0a8, 0xf0d9, 0xf297, 0xf0d9, 0xf297, 0xf2f5, +0xf472, 0xf2f5, 0xf472, 0xf539, 0xf675, 0xf539, 0xf675, 0xf539, 0xf675, 0xf790, 0xf88d, +0xf790, 0xf88d, 0xf9bf, 0xfa7e, 0xf9bf, 0xfa7e, 0xfbf6, 0xfc79, 0xfbf6, 0xfc79, 0xfda2, +0xfdeb, 0xfda2, 0xfdeb, 0xfeeb, 0xfefc, 0xfeeb, 0xfefc, 0xffe9, 0xffc5, 0xffe9, 0xffc5, +0xffe9, 0xffc5, 0xb3, 0x5c, 0xb3, 0x5c, 0x176, 0xed, 0x176, 0xed, 0x1eb, +0x132, 0x1eb, 0x132, 0x288, 0x19f, 0x288, 0x19f, 0x32b, 0x214, 0x32b, 0x214, +0x32b, 0x214, 0x3e9, 0x2a2, 0x3e9, 0x2a2, 0x4d0, 0x35b, 0x4d0, 0x35b, 0x611, +0x46c, 0x611, 0x46c, 0x794, 0x5bd, 0x794, 0x5bd, 0x8f8, 0x6ee, 0x8f8, 0x6ee, +0xa9e, 0x85f, 0xa9e, 0x85f, 0xa9e, 0x85f, 0xc94, 0xa1f, 0xc94, 0xa1f, 0xf0c, +0xc5e, 0xf0c, 0xc5e, 0x11ba, 0xed3, 0x11ba, 0xed3, 0x1416, 0x10f4, 0x1416, 0x10f4, +0x164a, 0x12eb, 0x164a, 0x12eb, 0x164a, 0x12eb, 0x18de, 0x1543, 0x18de, 0x1543, 0x1b73, +0x179b, 0x1b73, 0x179b, 0x1dd2, 0x19bf, 0x1dd2, 0x19bf, 0x2014, 0x1bc8, 0x2014, 0x1bc8, +0x21ee, 0x1d6b, 0x21ee, 0x1d6b, 0x23fa, 0x1f45, 0x23fa, 0x1f45, 0x23fa, 0x1f45, 0x25d9, +0x20f8, 0x25d9, 0x20f8, 0x2710, 0x2207, 0x2710, 0x2207, 0x279d, 0x2275, 0x279d, 0x2275, +0x27a8, 0x2268, 0x27a8, 0x2268, 0x27b1, 0x2264, 0x27b1, 0x2264, 0x27fb, 0x22a9, 0x27fb, +0x22a9, 0x27fb, 0x22a9, 0x2857, 0x230b, 0x2857, 0x230b, 0x283f, 0x2303, 0x283f, 0x2303, +0x2815, 0x22f6, 0x2815, 0x22f6, 0x27c0, 0x22c8, 0x27c0, 0x22c8, 0x26ee, 0x2228, 0x26ee, +0x2228, 0x26ee, 0x2228, 0x25b7, 0x212d, 0x25b7, 0x212d, 0x2489, 0x2045, 0x2489, 0x2045, +0x2372, 0x1f7e, 0x2372, 0x1f7e, 0x2231, 0x1e95, 0x2231, 0x1e95, 0x2107, 0x1dc9, 0x2107, +0x1dc9, 0x1f85, 0x1cac, 0x1f85, 0x1cac, 0x1f85, 0x1cac, 0x1dcf, 0x1b5d, 0x1dcf, 0x1b5d, +0x1bac, 0x19a4, 0x1bac, 0x19a4, 0x192b, 0x178e, 0x192b, 0x178e, 0x16be, 0x158c, 0x16be, +0x158c, 0x144d, 0x1384, 0x144d, 0x1384, 0x11e6, 0x1181, 0x11e6, 0x1181, 0x11e6, 0x1181, +0xf69, 0xf63, 0xf69, 0xf63, 0xd6b, 0xdbe, 0xd6b, 0xdbe, 0xb7f, 0xc23, 0xb7f, +0xc23, 0x96e, 0xa5c, 0x96e, 0xa5c, 0x790, 0x8be, 0x790, 0x8be, 0x790, 0x8be, +0x5ac, 0x711, 0x5ac, 0x711, 0x385, 0x518, 0x385, 0x518, 0x12e, 0x2e6, 0x12e, +0x2e6, 0xff58, 0x12c, 0xff58, 0x12c, 0xfd87, 0xff6f, 0xfd87, 0xff6f, 0xfbe5, 0xfdd9, +0xfbe5, 0xfdd9, 0xfbe5, 0xfdd9, 0xfab7, 0xfcb0, 0xfab7, 0xfcb0, 0xf9db, 0xfbd4, 0xf9db, +0xfbd4, 0xf969, 0xfb5f, 0xf969, 0xfb5f, 0xf924, 0xfb14, 0xf924, 0xfb14, 0xf91f, 0xfb07, +0xf91f, 0xfb07, 0xf8ec, 0xfacc, 0xf8ec, 0xfacc, 0xf8ec, 0xfacc, 0xf8d5, 0xfaad, 0xf8d5, +0xfaad, 0xf8c4, 0xfa98, 0xf8c4, 0xfa98, 0xf84f, 0xfa20, 0xf84f, 0xfa20, 0xf7c7, 0xf99a, +0xf7c7, 0xf99a, 0xf743, 0xf91b, 0xf743, 0xf91b, 0xf743, 0xf91b, 0xf6ed, 0xf8ce, 0xf6ed, +0xf8ce, 0xf682, 0xf871, 0xf682, 0xf871, 0xf5d8, 0xf7da, 0xf5d8, 0xf7da, 0xf520, 0xf737, +0xf520, 0xf737, 0xf440, 0xf66f, 0xf440, 0xf66f, 0xf325, 0xf56e, 0xf325, 0xf56e, 0xf325, +0xf56e, 0xf1a2, 0xf407, 0xf1a2, 0xf407, 0xef7c, 0xf1fb, 0xef7c, 0xf1fb, 0xed7c, 0xf014, +0xed7c, 0xf014, 0xebfd, 0xeea9, 0xebfd, 0xeea9, 0xea53, 0xed0f, 0xea53, 0xed0f, 0xe88e, +0xeb53, 0xe88e, 0xeb53, 0xe88e, 0xeb53, 0xe724, 0xe9ec, 0xe724, 0xe9ec, 0xe67f, 0xe940, +0xe67f, 0xe940, 0xe653, 0xe903, 0xe653, 0xe903, 0xe629, 0xe8bf, 0xe629, 0xe8bf, 0xe603, +0xe872, 0xe603, 0xe872, 0xe603, 0xe872, 0xe654, 0xe891, 0xe654, 0xe891, 0xe756, 0xe957, +0xe756, 0xe957, 0xe8f0, 0xeaaa, 0xe8f0, 0xeaaa, 0xeb31, 0xec9a, 0xeb31, 0xec9a, 0xed97, +0xeea6, 0xed97, 0xeea6, 0xf034, 0xf0e2, 0xf034, 0xf0e2, 0xf034, 0xf0e2, 0xf340, 0xf387, +0xf340, 0xf387, 0xf652, 0xf62d, 0xf652, 0xf62d, 0xf91e, 0xf88c, 0xf91e, 0xf88c, 0xfbc0, +0xfac0, 0xfbc0, 0xfac0, 0xfe74, 0xfd08, 0xfe74, 0xfd08, 0x14a, 0xff76, 0x14a, 0xff76, +0x14a, 0xff76, 0x436, 0x200, 0x436, 0x200, 0x6c4, 0x434, 0x6c4, 0x434, 0x8cf, +0x5ee, 0x8cf, 0x5ee, 0xa74, 0x74e, 0xa74, 0x74e, 0xb86, 0x826, 0xb86, 0x826, +0xb86, 0x826, 0xc63, 0x8d5, 0xc63, 0x8d5, 0xd87, 0x9d9, 0xd87, 0x9d9, 0xe54, +0xa93, 0xe54, 0xa93, 0xeab, 0xae4, 0xeab, 0xae4, 0xed6, 0xb16, 0xed6, 0xb16, +0xee7, 0xb39, 0xee7, 0xb39, 0xee7, 0xb39, 0xf25, 0xb93, 0xf25, 0xb93, 0xf5f, +0xbf3, 0xf5f, 0xbf3, 0xf68, 0xc28, 0xf68, 0xc28, 0xf41, 0xc33, 0xf41, 0xc33, +0xf3f, 0xc66, 0xf3f, 0xc66, 0xf3d, 0xc9c, 0xf3d, 0xc9c, 0xf3d, 0xc9c, 0xf02, +0xc98, 0xf02, 0xc98, 0xe6e, 0xc39, 0xe6e, 0xc39, 0xd9d, 0xb9a, 0xd9d, 0xb9a, +0xd38, 0xb62, 0xd38, 0xb62, 0xd3f, 0xb90, 0xd3f, 0xb90, 0xd3f, 0xb90, 0xd28, +0xb9a, 0xd28, 0xb9a, 0xd01, 0xb8b, 0xd01, 0xb8b, 0xd2d, 0xbc8, 0xd2d, 0xbc8, +0xd32, 0xbd6, 0xd32, 0xbd6, 0xd5c, 0xc01, 0xd5c, 0xc01, 0xd7b, 0xc1b, 0xd7b, +0xc1b, 0xd7b, 0xc1b, 0xd56, 0xbeb, 0xd56, 0xbeb, 0xd7c, 0xc01, 0xd7c, 0xc01, +0xd7d, 0xbed, 0xd7d, 0xbed, 0xd21, 0xb7b, 0xd21, 0xb7b, 0xc64, 0xaa6, 0xc64, +0xaa6, 0xbcf, 0x9fb, 0xbcf, 0x9fb, 0xbcf, 0x9fb, 0xb66, 0x97c, 0xb66, 0x97c, +0xafb, 0x8ff, 0xafb, 0x8ff, 0xaa7, 0x89e, 0xaa7, 0x89e, 0xa30, 0x81e, 0xa30, +0x81e, 0x9bc, 0x7a8, 0x9bc, 0x7a8, 0x9bc, 0x7a8, 0x9d6, 0x7c6, 0x9d6, 0x7c6, +0xa89, 0x884, 0xa89, 0x884, 0xb41, 0x94d, 0xb41, 0x94d, 0xbab, 0x9d0, 0xbab, +0x9d0, 0xbca, 0xa0d, 0xbca, 0xa0d, 0xbe1, 0xa48, 0xbe1, 0xa48, 0xbe1, 0xa48, +0xbbc, 0xa4b, 0xbbc, 0xa4b, 0xbac, 0xa67, 0xbac, 0xa67, 0xb87, 0xa6f, 0xb87, +0xa6f, 0xb4d, 0xa63, 0xb4d, 0xa63, 0xb45, 0xa89, 0xb45, 0xa89, 0xaff, 0xa6f, +0xaff, 0xa6f, 0xaff, 0xa6f, 0xac7, 0xa5f, 0xac7, 0xa5f, 0xa2e, 0x9eb, 0xa2e, +0x9eb, 0x926, 0x902, 0x926, 0x902, 0x7f7, 0x7eb, 0x7f7, 0x7eb, 0x6bb, 0x6c1, +0x6bb, 0x6c1, 0x6bb, 0x6c1, 0x5aa, 0x5bb, 0x5aa, 0x5bb, 0x501, 0x515, 0x501, +0x515, 0x4a5, 0x4b4, 0x4a5, 0x4b4, 0x48b, 0x48f, 0x48b, 0x48f, 0x4af, 0x4a1, +0x4af, 0x4a1, 0x4ef, 0x4c7, 0x4ef, 0x4c7, 0x4ef, 0x4c7, 0x5da, 0x595, 0x5da, +0x595, 0x6f2, 0x68b, 0x6f2, 0x68b, 0x864, 0x7d8, 0x864, 0x7d8, 0xa70, 0x9be, +0xa70, 0x9be, 0xc92, 0xbb8, 0xc92, 0xbb8, 0xc92, 0xbb8, 0xe86, 0xd86, 0xe86, +0xd86, 0x1048, 0xf23, 0x1048, 0xf23, 0x1207, 0x10c0, 0x1207, 0x10c0, 0x139a, 0x1234, +0x139a, 0x1234, 0x151c, 0x139d, 0x151c, 0x139d, 0x15fd, 0x146a, 0x15fd, 0x146a, 0x15fd, +0x146a, 0x1674, 0x14d4, 0x1674, 0x14d4, 0x1739, 0x1591, 0x1739, 0x1591, 0x17e6, 0x163c, +0x17e6, 0x163c, 0x1829, 0x1686, 0x1829, 0x1686, 0x1800, 0x1668, 0x1800, 0x1668, 0x1796, +0x160f, 0x1796, 0x160f, 0x1796, 0x160f, 0x172c, 0x15bb, 0x172c, 0x15bb, 0x16ca, 0x1574, +0x16ca, 0x1574, 0x1611, 0x14da, 0x1611, 0x14da, 0x14eb, 0x13d5, 0x14eb, 0x13d5, 0x13d1, +0x12df, 0x13d1, 0x12df, 0x13d1, 0x12df, 0x12d6, 0x1209, 0x12d6, 0x1209, 0x11d0, 0x1129, +0x11d0, 0x1129, 0x10a6, 0x1024, 0x10a6, 0x1024, 0xf4c, 0xeed, 0xf4c, 0xeed, 0xe3b, +0xdfd, 0xe3b, 0xdfd, 0xd8a, 0xd6b, 0xd8a, 0xd6b, 0xd8a, 0xd6b, 0xce1, 0xcdd, +0xce1, 0xcdd, 0xbfa, 0xc0f, 0xbfa, 0xc0f, 0xb2f, 0xb59, 0xb2f, 0xb59, 0xa46, +0xa81, 0xa46, 0xa81, 0x926, 0x96e, 0x926, 0x96e, 0x812, 0x864, 0x812, 0x864, +0x812, 0x864, 0x6cb, 0x723, 0x6cb, 0x723, 0x5a7, 0x603, 0x5a7, 0x603, 0x497, +0x4f4, 0x497, 0x4f4, 0x40f, 0x46c, 0x40f, 0x46c, 0x3b2, 0x40c, 0x3b2, 0x40c, +0x3b2, 0x40c, 0x33b, 0x391, 0x33b, 0x391, 0x2d7, 0x32a, 0x2d7, 0x32a, 0x22e, +0x27d, 0x22e, 0x27d, 0x16e, 0x1b9, 0x16e, 0x1b9, 0x5d, 0xa7, 0x5d, 0xa7, +0xff26, 0xff70, 0xff26, 0xff70, 0xff26, 0xff70, 0xfdc8, 0xfe13, 0xfdc8, 0xfe13, 0xfc62, +0xfcb1, 0xfc62, 0xfcb1, 0xfae8, 0xfb3e, 0xfae8, 0xfb3e, 0xf9c2, 0xfa22, 0xf9c2, 0xfa22, +0xf8b7, 0xf924, 0xf8b7, 0xf924, 0xf758, 0xf7d5, 0xf758, 0xf7d5, 0xf758, 0xf7d5, 0xf650, +0xf6df, 0xf650, 0xf6df, 0xf581, 0xf627, 0xf581, 0xf627, 0xf4ff, 0xf5bd, 0xf4ff, 0xf5bd, +0xf461, 0xf53b, 0xf461, 0xf53b, 0xf375, 0xf46c, 0xf375, 0xf46c, 0xf375, 0xf46c, 0xf29f, +0xf3b7, 0xf29f, 0xf3b7, 0xf21a, 0xf354, 0xf21a, 0xf354, 0xf1e7, 0xf345, 0xf1e7, 0xf345, +0xf1e8, 0xf36b, 0xf1e8, 0xf36b, 0xf19f, 0xf347, 0xf19f, 0xf347, 0xf14c, 0xf31b, 0xf14c, +0xf31b, 0xf14c, 0xf31b, 0xf126, 0xf31b, 0xf126, 0xf31b, 0xf06d, 0xf287, 0xf06d, 0xf287, +0xef33, 0xf171, 0xef33, 0xf171, 0xed4c, 0xefae, 0xed4c, 0xefae, 0xeb37, 0xedba, 0xeb37, +0xedba, 0xe928, 0xebca, 0xe928, 0xebca, 0xe928, 0xebca, 0xe725, 0xe9e3, 0xe725, 0xe9e3, +0xe56d, 0xe844, 0xe56d, 0xe844, 0xe3c6, 0xe6b3, 0xe3c6, 0xe6b3, 0xe26e, 0xe56d, 0xe26e, +0xe56d, 0xe178, 0xe484, 0xe178, 0xe484, 0xe178, 0xe484, 0xe09c, 0xe3b2, 0xe09c, 0xe3b2, +0xdf97, 0xe2b2, 0xdf97, 0xe2b2, 0xded1, 0xe1ed, 0xded1, 0xe1ed, 0xde7b, 0xe193, 0xde7b, +0xe193, 0xde96, 0xe1a6, 0xde96, 0xe1a6, 0xdef7, 0xe1fa, 0xdef7, 0xe1fa, 0xdef7, 0xe1fa, +0xdf9e, 0xe290, 0xdf9e, 0xe290, 0xe080, 0xe35d, 0xe080, 0xe35d, 0xe16f, 0xe435, 0xe16f, +0xe435, 0xe299, 0xe543, 0xe299, 0xe543, 0xe39a, 0xe627, 0xe39a, 0xe627, 0xe49a, 0xe708, +0xe49a, 0xe708, 0xe49a, 0xe708, 0xe5c2, 0xe80f, 0xe5c2, 0xe80f, 0xe74a, 0xe977, 0xe74a, +0xe977, 0xe963, 0xeb6f, 0xe963, 0xeb6f, 0xeab2, 0xec9e, 0xeab2, 0xec9e, 0xeb91, 0xed61, +0xeb91, 0xed61, 0xeb91, 0xed61, 0xecbc, 0xee71, 0xecbc, 0xee71, 0xed28, 0xeec6, 0xed28, +0xeec6, 0xed6b, 0xeef6, 0xed6b, 0xeef6, 0xed86, 0xef02, 0xed86, 0xef02, 0xecf7, 0xee6b, +0xecf7, 0xee6b, 0xec9d, 0xee0e, 0xec9d, 0xee0e, 0xec9d, 0xee0e, 0xece7, 0xee5a, 0xece7, +0xee5a, 0xed2b, 0xeea6, 0xed2b, 0xeea6, 0xed39, 0xeec4, 0xed39, 0xeec4, 0xed1b, 0xeebb, +0xed1b, 0xeebb, 0xec60, 0xee1a, 0xec60, 0xee1a, 0xec37, 0xee13, 0xec37, 0xee13, 0xec37, +0xee13, 0xec5b, 0xee5c, 0xec5b, 0xee5c, 0xec21, 0xee4c, 0xec21, 0xee4c, 0xebf8, 0xee51, +0xebf8, 0xee51, 0xeb95, 0xee1e, 0xeb95, 0xee1e, 0xeb0e, 0xedc9, 0xeb0e, 0xedc9, 0xeb0e, +0xedc9, 0xeab9, 0xeda7, 0xeab9, 0xeda7, 0xea76, 0xed98, 0xea76, 0xed98, 0xe998, 0xecec, +0xe998, 0xecec, 0xe8a6, 0xec28, 0xe8a6, 0xec28, 0xe7d3, 0xeb81, 0xe7d3, 0xeb81, 0xe6ff, +0xead5, 0xe6ff, 0xead5, 0xe6ff, 0xead5, 0xe6cf, 0xeac7, 0xe6cf, 0xeac7, 0xe6a3, 0xeab7, +0xe6a3, 0xeab7, 0xe5fa, 0xea24, 0xe5fa, 0xea24, 0xe5f0, 0xea28, 0xe5f0, 0xea28, 0xe5e9, +0xea29, 0xe5e9, 0xea29, 0xe544, 0xe982, 0xe544, 0xe982, 0xe544, 0xe982, 0xe4d6, 0xe90a, +0xe4d6, 0xe90a, 0xe47a, 0xe89c, 0xe47a, 0xe89c, 0xe46e, 0xe876, 0xe46e, 0xe876, 0xe483, +0xe869, 0xe483, 0xe869, 0xe4bd, 0xe87a, 0xe4bd, 0xe87a, 0xe4bd, 0xe87a, 0xe4cb, 0xe858, +0xe4cb, 0xe858, 0xe4ed, 0xe843, 0xe4ed, 0xe843, 0xe61f, 0xe93a, 0xe61f, 0xe93a, 0xe73b, +0xea16, 0xe73b, 0xea16, 0xe8ad, 0xeb42, 0xe8ad, 0xeb42, 0xeabd, 0xed0b, 0xeabd, 0xed0b, +0xeabd, 0xed0b, 0xec3f, 0xee43, 0xec3f, 0xee43, 0xee75, 0xf02d, 0xee75, 0xf02d, 0xf0f1, +0xf25d, 0xf0f1, 0xf25d, 0xf2bf, 0xf3e0, 0xf2bf, 0xf3e0, 0xf4f7, 0xf5cc, 0xf4f7, 0xf5cc, +0xf746, 0xf7cf, 0xf746, 0xf7cf, 0xf746, 0xf7cf, 0xf9f3, 0xfa33, 0xf9f3, 0xfa33, 0xfc60, +0xfc59, 0xfc60, 0xfc59, 0xfe38, 0xfdec, 0xfe38, 0xfdec, 0xfff4, 0xff65, 0xfff4, 0xff65, +0xe1, 0x11, 0xe1, 0x11, 0xe1, 0x11, 0x17d, 0x6e, 0x17d, 0x6e, 0x1d5, +0x8a, 0x1d5, 0x8a, 0x1cf, 0x48, 0x1cf, 0x48, 0x263, 0xa3, 0x263, 0xa3, +0x352, 0x15b, 0x352, 0x15b, 0x419, 0x1eb, 0x419, 0x1eb, 0x419, 0x1eb, 0x52f, +0x2cb, 0x52f, 0x2cb, 0x62e, 0x395, 0x62e, 0x395, 0x7ab, 0x4dd, 0x7ab, 0x4dd, +0x906, 0x603, 0x906, 0x603, 0xa86, 0x74f, 0xa86, 0x74f, 0xa86, 0x74f, 0xc74, +0x90a, 0xc74, 0x90a, 0xe01, 0xa63, 0xe01, 0xa63, 0x1019, 0xc48, 0x1019, 0xc48, +0x11d4, 0xdd1, 0x11d4, 0xdd1, 0x143b, 0x1006, 0x143b, 0x1006, 0x16c3, 0x125f, 0x16c3, +0x125f, 0x16c3, 0x125f, 0x1906, 0x1475, 0x1906, 0x1475, 0x1bb9, 0x16fd, 0x1bb9, 0x16fd, +0x1df9, 0x1916, 0x1df9, 0x1916, 0x2044, 0x1b3e, 0x2044, 0x1b3e, 0x224d, 0x1d29, 0x224d, +0x1d29, 0x2398, 0x1e5c, 0x2398, 0x1e5c, 0x2398, 0x1e5c, 0x249a, 0x1f4c, 0x249a, 0x1f4c, +0x25d2, 0x2079, 0x25d2, 0x2079, 0x26d3, 0x2176, 0x26d3, 0x2176, 0x2803, 0x22ac, 0x2803, +0x22ac, 0x2810, 0x22c5, 0x2810, 0x22c5, 0x2810, 0x22c5, 0x2802, 0x22cd, 0x2802, 0x22cd, +0x27fa, 0x22e3, 0x27fa, 0x22e3, 0x2799, 0x22aa, 0x2799, 0x22aa, 0x2802, 0x2343, 0x2802, +0x2343, 0x26d0, 0x2249, 0x26d0, 0x2249, 0x259b, 0x2155, 0x259b, 0x2155, 0x259b, 0x2155, +0x2470, 0x2071, 0x2470, 0x2071, 0x232f, 0x1f7e, 0x232f, 0x1f7e, 0x221a, 0x1ebc, 0x221a, +0x1ebc, 0x20d4, 0x1dcf, 0x20d4, 0x1dcf, 0x1f39, 0x1c90, 0x1f39, 0x1c90, 0x1d1c, 0x1ad1, +0x1d1c, 0x1ad1, 0x1d1c, 0x1ad1, 0x1ba1, 0x19b5, 0x1ba1, 0x19b5, 0x1993, 0x1807, 0x1993, +0x1807, 0x1756, 0x1629, 0x1756, 0x1629, 0x148c, 0x13ba, 0x148c, 0x13ba, 0x1221, 0x11a8, +0x1221, 0x11a8, 0x1221, 0x11a8, 0xfc9, 0xfa4, 0xfc9, 0xfa4, 0xd3e, 0xd68, 0xd3e, +0xd68, 0xb4e, 0xbc1, 0xb4e, 0xbc1, 0x92e, 0x9e3, 0x92e, 0x9e3, 0x75b, 0x84b, +0x75b, 0x84b, 0x4ea, 0x60e, 0x4ea, 0x60e, 0x4ea, 0x60e, 0x327, 0x478, 0x327, +0x478, 0x131, 0x2a7, 0x131, 0x2a7, 0xfee6, 0x7a, 0xfee6, 0x7a, 0xfe11, 0xffbc, +0xfe11, 0xffbc, 0xfcaa, 0xfe67, 0xfcaa, 0xfe67, 0xfb66, 0xfd30, 0xfb66, 0xfd30, 0xfb66, +0xfd30, 0xfa8c, 0xfc5e, 0xfa8c, 0xfc5e, 0xf962, 0xfb38, 0xf962, 0xfb38, 0xf8eb, 0xfac3, +0xf8eb, 0xfac3, 0xf80d, 0xf9e6, 0xf80d, 0xf9e6, 0xf7d3, 0xf9ac, 0xf7d3, 0xf9ac, 0xf7d3, +0xf9ac, 0xf826, 0xf9fe, 0xf826, 0xf9fe, 0xf7a9, 0xf983, 0xf7a9, 0xf983, 0xf833, 0xfa0f, +0xf833, 0xfa0f, 0xf867, 0xfa49, 0xf867, 0xfa49, 0xf87e, 0xfa68, 0xf87e, 0xfa68, 0xf8a0, +0xfa95, 0xf8a0, 0xfa95, 0xf8a0, 0xfa95, 0xf7b2, 0xf9b4, 0xf7b2, 0xf9b4, 0xf6cb, 0xf8dd, +0xf6cb, 0xf8dd, 0xf617, 0xf83d, 0xf617, 0xf83d, 0xf56e, 0xf7a9, 0xf56e, 0xf7a9, 0xf460, +0xf6b2, 0xf460, 0xf6b2, 0xf2ee, 0xf557, 0xf2ee, 0xf557, 0xf2ee, 0xf557, 0xf128, 0xf3a7, +0xf128, 0xf3a7, 0xef97, 0xf22b, 0xef97, 0xf22b, 0xed99, 0xf040, 0xed99, 0xf040, 0xeb96, +0xee4b, 0xeb96, 0xee4b, 0xea08, 0xecc7, 0xea08, 0xecc7, 0xea08, 0xecc7, 0xe87b, 0xeb3e, +0xe87b, 0xeb3e, 0xe7b5, 0xea74, 0xe7b5, 0xea74, 0xe703, 0xe9b6, 0xe703, 0xe9b6, 0xe6d1, +0xe96f, 0xe6d1, 0xe96f, 0xe6a8, 0xe927, 0xe6a8, 0xe927, 0xe6cd, 0xe924, 0xe6cd, 0xe924, +0xe6cd, 0xe924, 0xe7e8, 0xea0e, 0xe7e8, 0xea0e, 0xe8d2, 0xeabd, 0xe8d2, 0xeabd, 0xeacd, +0xec72, 0xeacd, 0xec72, 0xec81, 0xedd9, 0xec81, 0xedd9, 0xee59, 0xef5c, 0xee59, 0xef5c, +0xf149, 0xf1f0, 0xf149, 0xf1f0, 0xf149, 0xf1f0, 0xf36f, 0xf3b4, 0xf36f, 0xf3b4, 0xf6e0, +0xf6bf, 0xf6e0, 0xf6bf, 0xfa26, 0xf99e, 0xfa26, 0xf99e, 0xfd19, 0xfc28, 0xfd19, 0xfc28, +0x5f, 0xff06, 0x5f, 0xff06, 0x5f, 0xff06, 0x2ac, 0xee, 0x2ac, 0xee, 0x5b4, +0x396, 0x5b4, 0x396, 0x7ce, 0x556, 0x7ce, 0x556, 0x9bf, 0x6f5, 0x9bf, 0x6f5, +0xbd1, 0x8be, 0xbd1, 0x8be, 0xcd2, 0x97f, 0xcd2, 0x97f, 0xcd2, 0x97f, 0xdf0, +0xa6a, 0xdf0, 0xa6a, 0xedc, 0xb2d, 0xedc, 0xb2d, 0xf82, 0xbb8, 0xf82, 0xbb8, +0x101b, 0xc41, 0x101b, 0xc41, 0x109a, 0xcbc, 0x109a, 0xcbc, 0x10ff, 0xd29, 0x10ff, +0xd29, 0x10ff, 0xd29, 0x111c, 0xd59, 0x111c, 0xd59, 0x1094, 0xcee, 0x1094, 0xcee, +0x10d2, 0xd53, 0x10d2, 0xd53, 0x1100, 0xdaf, 0x1100, 0xdaf, 0x1086, 0xd69, 0x1086, +0xd69, 0x1086, 0xd69, 0x1080, 0xd9c, 0x1080, 0xd9c, 0x105a, 0xdb2, 0x105a, 0xdb2, +0x1064, 0xdfb, 0x1064, 0xdfb, 0x100a, 0xde0, 0x100a, 0xde0, 0xfaf, 0xdc1, 0xfaf, +0xdc1, 0xf6a, 0xdb8, 0xf6a, 0xdb8, 0xf6a, 0xdb8, 0xedd, 0xd62, 0xedd, 0xd62, +0xf45, 0xdfe, 0xf45, 0xdfe, 0xf65, 0xe4c, 0xf65, 0xe4c, 0xee4, 0xdf4, 0xee4, +0xdf4, 0xf23, 0xe55, 0xf23, 0xe55, 0xf0c, 0xe5a, 0xf0c, 0xe5a, 0xf0c, 0xe5a, +0xe93, 0xdf7, 0xe93, 0xdf7, 0xe2f, 0xda4, 0xe2f, 0xda4, 0xddd, 0xd5d, 0xddd, +0xd5d, 0xd07, 0xc8e, 0xd07, 0xc8e, 0xc2d, 0xbb7, 0xc2d, 0xbb7, 0xc2d, 0xbb7, +0xc3a, 0xbc3, 0xc3a, 0xbc3, 0xba9, 0xb2f, 0xba9, 0xb2f, 0xb20, 0xaa2, 0xb20, +0xaa2, 0xaa6, 0xa23, 0xaa6, 0xa23, 0xa29, 0x9a0, 0xa29, 0x9a0, 0x9a6, 0x919, +0x9a6, 0x919, 0x9a6, 0x919, 0x91f, 0x88f, 0x91f, 0x88f, 0x969, 0x8d7, 0x969, +0x8d7, 0x99c, 0x90a, 0x99c, 0x90a, 0x9a0, 0x911, 0x9a0, 0x911, 0x9b8, 0x92e, +0x9b8, 0x92e, 0x9dc, 0x959, 0x9dc, 0x959, 0x9dc, 0x959, 0x9b6, 0x93b, 0x9b6, +0x93b, 0x9dd, 0x96c, 0x9dd, 0x96c, 0xa0a, 0x9a4, 0xa0a, 0x9a4, 0x9fd, 0x9a1, +0x9fd, 0x9a1, 0x9ab, 0x959, 0x9ab, 0x959, 0x9ab, 0x959, 0x951, 0x908, 0x951, +0x908, 0x8de, 0x89d, 0x8de, 0x89d, 0x75e, 0x720, 0x75e, 0x720, 0x5fa, 0x5be, +0x5fa, 0x5be, 0x44f, 0x40f, 0x44f, 0x40f, 0x2fa, 0x2b3, 0x2fa, 0x2b3, 0x2fa, +0x2b3, 0x292, 0x23f, 0x292, 0x23f, 0x235, 0x1d0, 0x235, 0x1d0, 0x20e, 0x193, +0x20e, 0x193, 0x24f, 0x1b8, 0x24f, 0x1b8, 0x2a5, 0x1ee, 0x2a5, 0x1ee, 0x2a5, +0x1ee, 0x318, 0x23c, 0x318, 0x23c, 0x413, 0x30d, 0x413, 0x30d, 0x4f8, 0x3c6, +0x4f8, 0x3c6, 0x604, 0x4a3, 0x604, 0x4a3, 0x764, 0x5d2, 0x764, 0x5d2, 0x8fb, +0x737, 0x8fb, 0x737, 0x8fb, 0x737, 0xac9, 0x8d4, 0xac9, 0x8d4, 0xcbb, 0xa94, +0xcbb, 0xa94, 0xeae, 0xc59, 0xeae, 0xc59, 0x1071, 0xdef, 0x1071, 0xdef, 0x120a, +0xf60, 0x120a, 0xf60, 0x1355, 0x1087, 0x1355, 0x1087, 0x1355, 0x1087, 0x1461, 0x1175, +0x1461, 0x1175, 0x1560, 0x125b, 0x1560, 0x125b, 0x15cf, 0x12b8, 0x15cf, 0x12b8, 0x16a3, +0x1381, 0x16a3, 0x1381, 0x17c5, 0x149f, 0x17c5, 0x149f, 0x17c5, 0x149f, 0x17f4, 0x14d1, +0x17f4, 0x14d1, 0x17fb, 0x14e1, 0x17fb, 0x14e1, 0x1747, 0x143e, 0x1747, 0x143e, 0x167d, +0x138a, 0x167d, 0x138a, 0x1598, 0x12c3, 0x1598, 0x12c3, 0x1509, 0x1256, 0x1509, 0x1256, +0x1509, 0x1256, 0x1499, 0x120d, 0x1499, 0x120d, 0x1381, 0x1120, 0x1381, 0x1120, 0x126d, +0x103a, 0x126d, 0x103a, 0x10e5, 0xee3, 0x10e5, 0xee3, 0xfe0, 0xe10, 0xfe0, 0xe10, +0xe70, 0xcd3, 0xe70, 0xcd3, 0xe70, 0xcd3, 0xd3b, 0xbd2, 0xd3b, 0xbd2, 0xc84, +0xb4d, 0xc84, 0xb4d, 0xc04, 0xafe, 0xc04, 0xafe, 0xb62, 0xa8c, 0xb62, 0xa8c, +0xa81, 0x9d7, 0xa81, 0x9d7, 0xa81, 0x9d7, 0x9a0, 0x920, 0x9a0, 0x920, 0x83a, +0x7e1, 0x83a, 0x7e1, 0x798, 0x763, 0x798, 0x763, 0x688, 0x674, 0x688, 0x674, +0x5e5, 0x5ef, 0x5e5, 0x5ef, 0x537, 0x55b, 0x537, 0x55b, 0x537, 0x55b, 0x471, +0x4ad, 0x471, 0x4ad, 0x3d8, 0x42b, 0x3d8, 0x42b, 0x2b2, 0x318, 0x2b2, 0x318, +0x21a, 0x293, 0x21a, 0x293, 0x13d, 0x1c9, 0x13d, 0x1c9, 0x39, 0xd6, 0x39, +0xd6, 0x39, 0xd6, 0xff16, 0xffc6, 0xff16, 0xffc6, 0xfde1, 0xfea4, 0xfde1, 0xfea4, +0xfc3d, 0xfd14, 0xfc3d, 0xfd14, 0xfaa1, 0xfb8e, 0xfaa1, 0xfb8e, 0xf8d0, 0xf9d6, 0xf8d0, +0xf9d6, 0xf8d0, 0xf9d6, 0xf713, 0xf834, 0xf713, 0xf834, 0xf5a2, 0xf6e0, 0xf5a2, 0xf6e0, +0xf44b, 0xf5a9, 0xf44b, 0xf5a9, 0xf35c, 0xf4dd, 0xf35c, 0xf4dd, 0xf2c8, 0xf46e, 0xf2c8, +0xf46e, 0xf2a6, 0xf473, 0xf2a6, 0xf473, 0xf2a6, 0xf473, 0xf1e9, 0xf3e0, 0xf1e9, 0xf3e0, +0xf1b3, 0xf3d5, 0xf1b3, 0xf3d5, 0xf15d, 0xf3ab, 0xf15d, 0xf3ab, 0xf11a, 0xf394, 0xf11a, +0xf394, 0xf124, 0xf3ca, 0xf124, 0xf3ca, 0xf124, 0xf3f5, 0xf124, 0xf3f5, 0xf124, 0xf3f5, +0xf0a5, 0xf39f, 0xf0a5, 0xf39f, 0xef4c, 0xf26d, 0xef4c, 0xf26d, 0xee2c, 0xf170, 0xee2c, +0xf170, 0xec60, 0xefc3, 0xec60, 0xefc3, 0xea72, 0xedf1, 0xea72, 0xedf1, 0xea72, 0xedf1, +0xe857, 0xebec, 0xe857, 0xebec, 0xe671, 0xea17, 0xe671, 0xea17, 0xe4b3, 0xe864, 0xe4b3, +0xe864, 0xe394, 0xe74a, 0xe394, 0xe74a, 0xe2e4, 0xe699, 0xe2e4, 0xe699, 0xe216, 0xe5c5, +0xe216, 0xe5c5, 0xe216, 0xe5c5, 0xe160, 0xe503, 0xe160, 0xe503, 0xe102, 0xe493, 0xe102, +0xe493, 0xe10c, 0xe487, 0xe10c, 0xe487, 0xe073, 0xe3d4, 0xe073, 0xe3d4, 0xe091, 0xe3d3, +0xe091, 0xe3d3, 0xe072, 0xe392, 0xe072, 0xe392, 0xe072, 0xe392, 0xe0f1, 0xe3ed, 0xe0f1, +0xe3ed, 0xe28f, 0xe565, 0xe28f, 0xe565, 0xe3e4, 0xe695, 0xe3e4, 0xe695, 0xe506, 0xe790, +0xe506, 0xe790, 0xe64e, 0xe8b3, 0xe64e, 0xe8b3, 0xe64e, 0xe8b3, 0xe7eb, 0xea2c, 0xe7eb, +0xea2c, 0xe90b, 0xeb2b, 0xe90b, 0xeb2b, 0xe9fd, 0xebff, 0xe9fd, 0xebff, 0xeaa0, 0xec86, +0xeaa0, 0xec86, 0xebc4, 0xed94, 0xebc4, 0xed94, 0xecc3, 0xee81, 0xecc3, 0xee81, 0xecc3, +0xee81, 0xed82, 0xef32, 0xed82, 0xef32, 0xee33, 0xefd9, 0xee33, 0xefd9, 0xedf6, 0xef98, +0xedf6, 0xef98, 0xedc2, 0xef65, 0xedc2, 0xef65, 0xee05, 0xefac, 0xee05, 0xefac, 0xed9a, +0xef4b, 0xed9a, 0xef4b, 0xed9a, 0xef4b, 0xed75, 0xef33, 0xed75, 0xef33, 0xedb3, 0xef83, +0xedb3, 0xef83, 0xed00, 0xeee4, 0xed00, 0xeee4, 0xed01, 0xeefd, 0xed01, 0xeefd, 0xecd2, +0xeee9, 0xecd2, 0xeee9, 0xecd2, 0xeee9, 0xec91, 0xeec6, 0xec91, 0xeec6, 0xec49, 0xee9d, +0xec49, 0xee9d, 0xec08, 0xee7b, 0xec08, 0xee7b, 0xec0b, 0xeea0, 0xec0b, 0xeea0, 0xebdb, +0xee91, 0xebdb, 0xee91, 0xebcd, 0xeea5, 0xebcd, 0xeea5, 0xebcd, 0xeea5, 0xeae2, 0xeddb, +0xeae2, 0xeddb, 0xe9ae, 0xecc8, 0xe9ae, 0xecc8, 0xe870, 0xebaa, 0xe870, 0xebaa, 0xe7cb, +0xeb23, 0xe7cb, 0xeb23, 0xe695, 0xea0a, 0xe695, 0xea0a, 0xe57b, 0xe90c, 0xe57b, 0xe90c, +0xe57b, 0xe90c, 0xe4d1, 0xe87a, 0xe4d1, 0xe87a, 0xe401, 0xe7c0, 0xe401, 0xe7c0, 0xe408, +0xe7da, 0xe408, 0xe7da, 0xe36d, 0xe74e, 0xe36d, 0xe74e, 0xe2b3, 0xe6a0, 0xe2b3, 0xe6a0, +0xe2b3, 0xe6a0, 0xe1fa, 0xe5ef, 0xe1fa, 0xe5ef, 0xe199, 0xe593, 0xe199, 0xe593, 0xe160, +0xe558, 0xe160, 0xe558, 0xe107, 0xe4fa, 0xe107, 0xe4fa, 0xe0c0, 0xe4a8, 0xe0c0, 0xe4a8, +0xe081, 0xe45a, 0xe081, 0xe45a, 0xe081, 0xe45a, 0xe0f7, 0xe4ba, 0xe0f7, 0xe4ba, 0xe15e, +0xe507, 0xe15e, 0xe507, 0xe1a5, 0xe52e, 0xe1a5, 0xe52e, 0xe276, 0xe5d9, 0xe276, 0xe5d9, +0xe40d, 0xe745, 0xe40d, 0xe745, 0xe673, 0xe97b, 0xe673, 0xe97b, 0xe673, 0xe97b, 0xe931, +0xec04, 0xe931, 0xec04, 0xeba8, 0xee42, 0xeba8, 0xee42, 0xedb5, 0xf010, 0xedb5, 0xf010, +0xeffe, 0xf218, 0xeffe, 0xf218, 0xf33c, 0xf511, 0xf33c, 0xf511, 0xf33c, 0xf511, 0xf686, +0xf813, 0xf686, 0xf813, 0xf8d4, 0xfa17, 0xf8d4, 0xfa17, 0xfabe, 0xfbb4, 0xfabe, 0xfbb4, +0xfc9e, 0xfd47, 0xfc9e, 0xfd47, 0xfdcc, 0xfe29, 0xfdcc, 0xfe29, 0xff21, 0xff30, 0xff21, +0xff30, 0xff21, 0xff30, 0x1d, 0xffdf, 0x1d, 0xffdf, 0x13f, 0xb6, 0x13f, 0xb6, +0x236, 0x163, 0x236, 0x163, 0x2da, 0x1bf, 0x2da, 0x1bf, 0x48f, 0x32e, 0x48f, +0x32e, 0x48f, 0x32e, 0x50c, 0x368, 0x50c, 0x368, 0x676, 0x491, 0x676, 0x491, +0x751, 0x52f, 0x751, 0x52f, 0x806, 0x5a9, 0x806, 0x5a9, 0xa7f, 0x7ea, 0xa7f, +0x7ea, 0xbc9, 0x8fe, 0xbc9, 0x8fe, 0xbc9, 0x8fe, 0xd67, 0xa6a, 0xd67, 0xa6a, +0xeeb, 0xbbe, 0xeeb, 0xbbe, 0x10c8, 0xd6d, 0x10c8, 0xd6d, 0x131e, 0xf9a, 0x131e, +0xf9a, 0x1590, 0x11e3, 0x1590, 0x11e3, 0x17d1, 0x13fe, 0x17d1, 0x13fe, 0x17d1, 0x13fe, +0x19bc, 0x15c7, 0x19bc, 0x15c7, 0x1bdc, 0x17c7, 0x1bdc, 0x17c7, 0x1e61, 0x1a2e, 0x1e61, +0x1a2e, 0x2182, 0x1d35, 0x2182, 0x1d35, 0x237f, 0x1f1a, 0x237f, 0x1f1a, 0x237f, 0x1f1a, +0x24d2, 0x205a, 0x24d2, 0x205a, 0x267e, 0x21f6, 0x267e, 0x21f6, 0x27e7, 0x2354, 0x27e7, +0x2354, 0x2877, 0x23de, 0x2877, 0x23de, 0x28ab, 0x2410, 0x28ab, 0x2410, 0x2892, 0x23fc, +0x2892, 0x23fc, 0x2892, 0x23fc, 0x2868, 0x23dd, 0x2868, 0x23dd, 0x2884, 0x240a, 0x2884, +0x240a, 0x28f1, 0x248f, 0x28f1, 0x248f, 0x2840, 0x23fb, 0x2840, 0x23fb, 0x276e, 0x234e, +0x276e, 0x234e, 0x2740, 0x234c, 0x2740, 0x234c, 0x2740, 0x234c, 0x258e, 0x21cd, 0x258e, +0x21cd, 0x23f3, 0x206a, 0x23f3, 0x206a, 0x21ca, 0x1e80, 0x21ca, 0x1e80, 0x1fba, 0x1cb5, +0x1fba, 0x1cb5, 0x1edc, 0x1c1f, 0x1edc, 0x1c1f, 0x1edc, 0x1c1f, 0x1dd7, 0x1b67, 0x1dd7, +0x1b67, 0x1bcc, 0x19ab, 0x1bcc, 0x19ab, 0x1965, 0x1796, 0x1965, 0x1796, 0x1756, 0x15d9, +0x1756, 0x15d9, 0x1510, 0x13e6, 0x1510, 0x13e6, 0x128d, 0x11b4, 0x128d, 0x11b4, 0x128d, +0x11b4, 0xf84, 0xefb, 0xf84, 0xefb, 0xd1b, 0xcdf, 0xd1b, 0xcdf, 0xa43, 0xa50, +0xa43, 0xa50, 0x83d, 0x88e, 0x83d, 0x88e, 0x77b, 0x80b, 0x77b, 0x80b, 0x5fa, +0x6c4, 0x5fa, 0x6c4, 0x5fa, 0x6c4, 0x36a, 0x468, 0x36a, 0x468, 0x2cd, 0x3f8, +0x2cd, 0x3f8, 0x1da, 0x32d, 0x1da, 0x32d, 0xff06, 0x7b, 0xff06, 0x7b, 0xfed9, +0x6a, 0xfed9, 0x6a, 0xfed9, 0x6a, 0xfc92, 0xfe3a, 0xfc92, 0xfe3a, 0xfae0, 0xfc9c, +0xfae0, 0xfc9c, 0xfabc, 0xfc87, 0xfabc, 0xfc87, 0xfa23, 0xfbfb, 0xfa23, 0xfbfb, 0xfa26, +0xfc09, 0xfa26, 0xfc09, 0xf9a9, 0xfb96, 0xf9a9, 0xfb96, 0xf9a9, 0xfb96, 0xf9dc, 0xfbd2, +0xf9dc, 0xfbd2, 0xfa35, 0xfc35, 0xfa35, 0xfc35, 0xfa2c, 0xfc36, 0xfa2c, 0xfc36, 0xf9cf, +0xfbe6, 0xf9cf, 0xfbe6, 0xfa31, 0xfc56, 0xfa31, 0xfc56, 0xf930, 0xfb65, 0xf930, 0xfb65, +0xf930, 0xfb65, 0xf8e3, 0xfb2b, 0xf8e3, 0xfb2b, 0xf866, 0xfac2, 0xf866, 0xfac2, 0xf86e, +0xfadf, 0xf86e, 0xfadf, 0xf684, 0xf90b, 0xf684, 0xf90b, 0xf517, 0xf7b4, 0xf517, 0xf7b4, +0xf517, 0xf7b4, 0xf507, 0xf7bb, 0xf507, 0xf7bb, 0xf20b, 0xf4d2, 0xf20b, 0xf4d2, 0xf1f9, +0xf4d0, 0xf1f9, 0xf4d0, 0xeeb8, 0xf19b, 0xeeb8, 0xf19b, 0xec88, 0xef72, 0xec88, 0xef72, +0xea41, 0xed2b, 0xea41, 0xed2b, 0xea41, 0xed2b, 0xea12, 0xecf4, 0xea12, 0xecf4, 0xeb13, +0xede5, 0xeb13, 0xede5, 0xe8af, 0xeb67, 0xe8af, 0xeb67, 0xe9e1, 0xec75, 0xe9e1, 0xec75, +0xe9fd, 0xec62, 0xe9fd, 0xec62, 0xea69, 0xec96, 0xea69, 0xec96, 0xe90a, 0xeaf3, 0xe90a, +0xeaf3, 0xea15, 0xebb0, 0xea15, 0xebb0, 0xeb4c, 0xec90, 0xeb4c, 0xec90, 0xeb4c, 0xec90, +0xec94, 0xed78, 0xec94, 0xed78, 0xefbf, 0xf03b, 0xefbf, 0xf03b, 0xf144, 0xf152, 0xf144, +0xf152, 0xf450, 0xf3ec, 0xf450, 0xf3ec, 0xf591, 0xf4b9, 0xf591, 0xf4b9, 0xf591, 0xf4b9, +0xf8eb, 0xf79d, 0xf8eb, 0xf79d, 0xfc94, 0xfad2, 0xfc94, 0xfad2, 0xfd83, 0xfb50, 0xfd83, +0xfb50, 0xff77, 0xfcd7, 0xff77, 0xfcd7, 0x2e9, 0xffe5, 0x2e9, 0xffe5, 0x4e9, 0x187, +0x4e9, 0x187, 0x4e9, 0x187, 0x60a, 0x256, 0x60a, 0x256, 0x8a7, 0x4ac, 0x8a7, +0x4ac, 0x9fc, 0x5c7, 0x9fc, 0x5c7, 0x9fd, 0x59b, 0x9fd, 0x59b, 0xc49, 0x7c9, +0xc49, 0x7c9, 0xc65, 0x7d4, 0xc65, 0x7d4, 0xc65, 0x7d4, 0xb6c, 0x6d7, 0xb6c, +0x6d7, 0xc93, 0x809, 0xc93, 0x809, 0xb70, 0x6fe, 0xb70, 0x6fe, 0xc65, 0x816, +0xc65, 0x816, 0xd46, 0x926, 0xd46, 0x926, 0xd46, 0x926, 0xc1d, 0x835, 0xc1d, +0x835, 0xcf5, 0x94b, 0xcf5, 0x94b, 0xd98, 0xa34, 0xd98, 0xa34, 0xd27, 0xa0d, +0xd27, 0xa0d, 0xe5b, 0xb8d, 0xe5b, 0xb8d, 0xd89, 0xb08, 0xd89, 0xb08, 0xd89, +0xb08, 0xc48, 0xa13, 0xc48, 0xa13, 0xc8a, 0xa9f, 0xc8a, 0xa9f, 0xcf2, 0xb4d, +0xcf2, 0xb4d, 0xdbf, 0xc5c, 0xdbf, 0xc5c, 0xcdb, 0xbb3, 0xcdb, 0xbb3, 0xe7d, +0xd89, 0xe7d, 0xd89, 0xe7d, 0xd89, 0xda1, 0xcda, 0xda1, 0xcda, 0xe06, 0xd65, +0xe06, 0xd65, 0xe33, 0xdb0, 0xe33, 0xdb0, 0xb51, 0xae4, 0xb51, 0xae4, 0xc14, +0xbb7, 0xc14, 0xbb7, 0xc14, 0xbb7, 0xa5a, 0xa08, 0xa5a, 0xa08, 0xa39, 0x9eb, +0xa39, 0x9eb, 0xbb8, 0xb6a, 0xbb8, 0xb6a, 0xba3, 0xb51, 0xba3, 0xb51, 0xad3, +0xa7b, 0xad3, 0xa7b, 0xb88, 0xb28, 0xb88, 0xb28, 0xb88, 0xb28, 0xb77, 0xb10, +0xb77, 0xb10, 0xa1f, 0x9b1, 0xa1f, 0x9b1, 0xa57, 0x9e3, 0xa57, 0x9e3, 0x8f3, +0x87b, 0x8f3, 0x87b, 0x987, 0x90f, 0x987, 0x90f, 0xab6, 0xa40, 0xab6, 0xa40, +0xab6, 0xa40, 0xbea, 0xb79, 0xbea, 0xb79, 0xc93, 0xc2b, 0xc93, 0xc2b, 0xe2a, +0xdce, 0xe2a, 0xdce, 0xec9, 0xe7b, 0xec9, 0xe7b, 0xf66, 0xf2a, 0xf66, 0xf2a, +0xf66, 0xf2a, 0xf80, 0xf56, 0xf80, 0xf56, 0xc87, 0xc6f, 0xc87, 0xc6f, 0xe00, +0xdfb, 0xe00, 0xdfb, 0xc1c, 0xc28, 0xc1c, 0xc28, 0xb1a, 0xb36, 0xb1a, 0xb36, +0xb44, 0xb6b, 0xb44, 0xb6b, 0xb44, 0xb6b, 0x9e5, 0xa14, 0x9e5, 0xa14, 0x9d7, +0xa0a, 0x9d7, 0xa0a, 0x7cb, 0x7fc, 0x7cb, 0x7fc, 0x793, 0x7bb, 0x793, 0x7bb, +0x6a3, 0x6bc, 0x6a3, 0x6bc, 0x6a3, 0x6bc, 0x520, 0x523, 0x520, 0x523, 0x4c7, +0x4ae, 0x4c7, 0x4ae, 0x634, 0x5f9, 0x634, 0x5f9, 0x636, 0x5d2, 0x636, 0x5d2, +0x6af, 0x61d, 0x6af, 0x61d, 0x861, 0x79b, 0x861, 0x79b, 0x861, 0x79b, 0x94a, +0x84e, 0x94a, 0x84e, 0x9a0, 0x86a, 0x9a0, 0x86a, 0xb41, 0x9d0, 0xb41, 0x9d0, +0xe10, 0xc64, 0xe10, 0xc64, 0xf4a, 0xd63, 0xf4a, 0xd63, 0x113f, 0xf1f, 0x113f, +0xf1f, 0x113f, 0xf1f, 0x1325, 0x10d0, 0x1325, 0x10d0, 0x159d, 0x1316, 0x159d, 0x1316, +0x16bf, 0x140c, 0x16bf, 0x140c, 0x18f0, 0x1618, 0x18f0, 0x1618, 0x19ef, 0x16f7, 0x19ef, +0x16f7, 0x19ef, 0x16f7, 0x1a0c, 0x16fd, 0x1a0c, 0x16fd, 0x1ae6, 0x17c7, 0x1ae6, 0x17c7, +0x1b68, 0x1841, 0x1b68, 0x1841, 0x1a57, 0x1730, 0x1a57, 0x1730, 0x1884, 0x1563, 0x1884, +0x1563, 0x18c6, 0x15b4, 0x18c6, 0x15b4, 0x18c6, 0x15b4, 0x17b5, 0x14b7, 0x17b5, 0x14b7, +0x1882, 0x159f, 0x1882, 0x159f, 0x172e, 0x146b, 0x172e, 0x146b, 0x15bf, 0x1321, 0x15bf, +0x1321, 0x145e, 0x11e8, 0x145e, 0x11e8, 0x121f, 0xfd3, 0x121f, 0xfd3, 0x121f, 0xfd3, +0x101a, 0xdfa, 0x101a, 0xdfa, 0xde2, 0xbed, 0xde2, 0xbed, 0xd13, 0xb4a, 0xd13, +0xb4a, 0xbc3, 0xa26, 0xbc3, 0xa26, 0xb10, 0x99e, 0xb10, 0x99e, 0xb10, 0x99e, +0xa8b, 0x941, 0xa8b, 0x941, 0x9a5, 0x881, 0x9a5, 0x881, 0x8a0, 0x7a0, 0x8a0, +0x7a0, 0x866, 0x788, 0x866, 0x788, 0x56e, 0x4b0, 0x56e, 0x4b0, 0x59f, 0x4fe, +0x59f, 0x4fe, 0x59f, 0x4fe, 0x4de, 0x459, 0x4de, 0x459, 0x27a, 0x211, 0x27a, +0x211, 0x2cb, 0x27c, 0x2cb, 0x27c, 0xa5, 0x70, 0xa5, 0x70, 0x1a0, 0x185, +0x1a0, 0x185, 0x2a0, 0x29f, 0x2a0, 0x29f, 0x2a0, 0x29f, 0xdf, 0xfa, 0xdf, +0xfa, 0xb4, 0xec, 0xb4, 0xec, 0xff73, 0xffcb, 0xff73, 0xffcb, 0xfcb1, 0xfd2a, +0xfcb1, 0xfd2a, 0xfb93, 0xfc2f, 0xfb93, 0xfc2f, 0xfb93, 0xfc2f, 0xf8c1, 0xf984, 0xf8c1, +0xf984, 0xf772, 0xf85d, 0xf772, 0xf85d, 0xf5c0, 0xf6d5, 0xf5c0, 0xf6d5, 0xf4a6, 0xf5e6, +0xf4a6, 0xf5e6, 0xf442, 0xf5b0, 0xf442, 0xf5b0, 0xf296, 0xf434, 0xf296, 0xf434, 0xf296, +0xf434, 0xf249, 0xf416, 0xf249, 0xf416, 0xef9c, 0xf199, 0xef9c, 0xf199, 0xef79, 0xf1a5, +0xef79, 0xf1a5, 0xee9f, 0xf0f9, 0xee9f, 0xf0f9, 0xed20, 0xefa9, 0xed20, 0xefa9, 0xed79, +0xf02d, 0xed79, 0xf02d, 0xed79, 0xf02d, 0xed0e, 0xefec, 0xed0e, 0xefec, 0xed78, 0xf07d, +0xed78, 0xf07d, 0xed44, 0xf06d, 0xed44, 0xf06d, 0xebc7, 0xef12, 0xebc7, 0xef12, 0xea67, +0xedd0, 0xea67, 0xedd0, 0xea67, 0xedd0, 0xe90e, 0xec90, 0xe90e, 0xec90, 0xe7b5, 0xeb4f, +0xe7b5, 0xeb4f, 0xe5a1, 0xe94d, 0xe5a1, 0xe94d, 0xe3b3, 0xe76e, 0xe3b3, 0xe76e, 0xe3e9, +0xe7af, 0xe3e9, 0xe7af, 0xe319, 0xe6e7, 0xe319, 0xe6e7, 0xe319, 0xe6e7, 0xe1b8, 0xe58a, +0xe1b8, 0xe58a, 0xe259, 0xe62b, 0xe259, 0xe62b, 0xe1f2, 0xe5c1, 0xe1f2, 0xe5c1, 0xe042, +0xe40a, 0xe042, 0xe40a, 0xe09e, 0xe45c, 0xe09e, 0xe45c, 0xdfc7, 0xe377, 0xdfc7, 0xe377, +0xdfc7, 0xe377, 0xdf46, 0xe2e5, 0xdf46, 0xe2e5, 0xdffb, 0xe385, 0xdffb, 0xe385, 0xe1c3, +0xe535, 0xe1c3, 0xe535, 0xe2e8, 0xe63e, 0xe2e8, 0xe63e, 0xe34c, 0xe685, 0xe34c, 0xe685, +0xe34c, 0xe685, 0xe4f8, 0xe810, 0xe4f8, 0xe810, 0xe5b9, 0xe8ac, 0xe5b9, 0xe8ac, 0xe72e, +0xe9fc, 0xe72e, 0xe9fc, 0xe8ab, 0xeb50, 0xe8ab, 0xeb50, 0xea91, 0xed0d, 0xea91, 0xed0d, +0xeb52, 0xeda4, 0xeb52, 0xeda4, 0xeb52, 0xeda4, 0xec0f, 0xee35, 0xec0f, 0xee35, 0xee6f, +0xf06b, 0xee6f, 0xf06b, 0xf03f, 0xf212, 0xf03f, 0xf212, 0xefb9, 0xf164, 0xefb9, 0xf164, +0xf1d0, 0xf357, 0xf1d0, 0xf357, 0xf25d, 0xf3c3, 0xf25d, 0xf3c3, 0xf25d, 0xf3c3, 0xf118, +0xf262, 0xf118, 0xf262, 0xf2da, 0xf40c, 0xf2da, 0xf40c, 0xf149, 0xf26b, 0xf149, 0xf26b, +0xf0b4, 0xf1cd, 0xf0b4, 0xf1cd, 0xf15b, 0xf272, 0xf15b, 0xf272, 0xf15b, 0xf272, 0xef98, +0xf0b5, 0xef98, 0xf0b5, 0xf00b, 0xf137, 0xf00b, 0xf137, 0xf20f, 0xf352, 0xf20f, 0xf352, +0xef0d, 0xf06e, 0xef0d, 0xf06e, 0xf039, 0xf1c2, 0xf039, 0xf1c2, 0xf031, 0xf1e8, 0xf031, +0xf1e8, 0xf031, 0xf1e8, 0xedf4, 0xefe1, 0xedf4, 0xefe1, 0xf068, 0xf290, 0xf068, 0xf290, +0xedba, 0xf022, 0xedba, 0xf022, 0xeb2c, 0xedd7, 0xeb2c, 0xedd7, 0xeb21, 0xee11, 0xeb21, +0xee11, 0xea6b, 0xed9f, 0xea6b, 0xed9f, 0xea6b, 0xed9f, 0xeaa1, 0xee19, 0xeaa1, 0xee19, +0xe8e6, 0xec9f, 0xe8e6, 0xec9f, 0xe45e, 0xe852, 0xe45e, 0xe852, 0xe41f, 0xe849, 0xe41f, +0xe849, 0xe372, 0xe7c8, 0xe372, 0xe7c8, 0xe372, 0xe7c8, 0xe242, 0xe6bd, 0xe242, 0xe6bd, +0xe183, 0xe619, 0xe183, 0xe619, 0xe1d0, 0xe675, 0xe1d0, 0xe675, 0xdfa3, 0xe44b, 0xdfa3, +0xe44b, 0xdf4b, 0xe3ea, 0xdf4b, 0xe3ea, 0xe19b, 0xe624, 0xe19b, 0xe624, 0xe19b, 0xe624, +0xde47, 0xe2af, 0xde47, 0xe2af, 0xdfad, 0xe3e8, 0xdfad, 0xe3e8, 0xdddb, 0xe1dd, 0xdddb, +0xe1dd, 0xdea8, 0xe269, 0xdea8, 0xe269, 0xe0a8, 0xe41e, 0xe0a8, 0xe41e, 0xe061, 0xe386, +0xe061, 0xe386, 0xe061, 0xe386, 0xe24d, 0xe51b, 0xe24d, 0xe51b, 0xe4b7, 0xe72a, 0xe4b7, +0xe72a, 0xe6ce, 0xe8e4, 0xe6ce, 0xe8e4, 0xe84f, 0xea07, 0xe84f, 0xea07, 0xec8d, 0xede8, +0xec8d, 0xede8, 0xec8d, 0xede8, 0xedc5, 0xeec8, 0xedc5, 0xeec8, 0xf08e, 0xf13a, 0xf08e, +0xf13a, 0xf1f6, 0xf252, 0xf1f6, 0xf252, 0xf628, 0xf63b, 0xf628, 0xf63b, 0xf7ef, 0xf7c0, +0xf7ef, 0xf7c0, 0xfa0d, 0xf9a3, 0xfa0d, 0xf9a3, 0xfa0d, 0xf9a3, 0xfea1, 0xfe04, 0xfea1, +0xfe04, 0xfe23, 0xfd5b, 0xfe23, 0xfd5b, 0x8c, 0xffa1, 0x8c, 0xffa1, 0x14e, 0x46, +0x14e, 0x46, 0x1aa, 0x8b, 0x1aa, 0x8b, 0x1aa, 0x8b, 0x32a, 0x1fa, 0x32a, +0x1fa, 0x481, 0x342, 0x481, 0x342, 0x638, 0x4ee, 0x638, 0x4ee, 0x79f, 0x64a, +0x79f, 0x64a, 0x78b, 0x62a, 0x78b, 0x62a, 0xb82, 0xa15, 0xb82, 0xa15, 0xb82, +0xa15, 0x992, 0x815, 0x992, 0x815, 0x8e8, 0x756, 0x8e8, 0x756, 0xeca, 0xd1f, +0xeca, 0xd1f, 0xeb1, 0xce6, 0xeb1, 0xce6, 0x1086, 0xe95, 0x1086, 0xe95, 0x1197, +0xf7a, 0x1197, 0xf7a, 0x1197, 0xf7a, 0x15d9, 0x1389, 0x15d9, 0x1389, 0x15cc, 0x1342, +0x15cc, 0x1342, 0x175d, 0x1495, 0x175d, 0x1495, 0x1c50, 0x1943, 0x1c50, 0x1943, 0x1e46, +0x1af2, 0x1e46, 0x1af2, 0x1e46, 0x1af2, 0x22e6, 0x1f48, 0x22e6, 0x1f48, 0x24f9, 0x2110, +0x24f9, 0x2110, 0x29e8, 0x25b5, 0x29e8, 0x25b5, 0x28b1, 0x2438, 0x28b1, 0x2438, 0x2b14, +0x2659, 0x2b14, 0x2659, 0x2d69, 0x2872, 0x2d69, 0x2872, 0x2d69, 0x2872, 0x2afb, 0x25d0, +0x2afb, 0x25d0, 0x2ce0, 0x278b, 0x2ce0, 0x278b, 0x2ab7, 0x2543, 0x2ab7, 0x2543, 0x2c09, +0x2681, 0x2c09, 0x2681, 0x2ca3, 0x2716, 0x2ca3, 0x2716, 0x2c93, 0x270f, 0x2c93, 0x270f, +0x2c93, 0x270f, 0x2a6a, 0x24fc, 0x2a6a, 0x24fc, 0x27d1, 0x2287, 0x27d1, 0x2287, 0x255c, +0x2044, 0x255c, 0x2044, 0x22cb, 0x1df1, 0x22cb, 0x1df1, 0x21f2, 0x1d63, 0x21f2, 0x1d63, +0x21f2, 0x1d63, 0x1e1c, 0x19e3, 0x1e1c, 0x19e3, 0x1d72, 0x1998, 0x1d72, 0x1998, 0x1d5e, +0x19ea, 0x1d5e, 0x19ea, 0x1ac9, 0x17c1, 0x1ac9, 0x17c1, 0x1837, 0x159d, 0x1837, 0x159d, +0x1664, 0x143b, 0x1664, 0x143b, 0x1664, 0x143b, 0x1139, 0xf7f, 0x1139, 0xf7f, 0x1037, +0xeea, 0x1037, 0xeea, 0xbd0, 0xaec, 0xbd0, 0xaec, 0x854, 0x7d1, 0x854, 0x7d1, +0x8c7, 0x89e, 0x8c7, 0x89e, 0x473, 0x49a, 0x473, 0x49a, 0x473, 0x49a, 0x48d, +0x4fb, 0x48d, 0x4fb, 0x47e, 0x528, 0x47e, 0x528, 0x29c, 0x377, 0x29c, 0x377, +0xfea5, 0xffa5, 0xfea5, 0xffa5, 0xfd88, 0xfea4, 0xfd88, 0xfea4, 0xfd88, 0xfea4, 0xf916, +0xfa44, 0xf916, 0xfa44, 0xf9e1, 0xfb18, 0xf9e1, 0xfb18, 0xf9ff, 0xfb36, 0xf9ff, 0xfb36, +0xf6e9, 0xf81b, 0xf6e9, 0xf81b, 0xf918, 0xfa40, 0xf918, 0xfa40, 0xf837, 0xf953, 0xf837, +0xf953, 0xf837, 0xf953, 0xf99f, 0xfaad, 0xf99f, 0xfaad, 0xf78b, 0xf88c, 0xf78b, 0xf88c, +0xf796, 0xf88c, 0xf796, 0xf88c, 0xf5c6, 0xf6b4, 0xf5c6, 0xf6b4, 0xf715, 0xf800, 0xf715, +0xf800, 0xf91b, 0xfa09, 0xf91b, 0xfa09, 0xf91b, 0xfa09, 0xf7fa, 0xf8f2, 0xf7fa, 0xf8f2, +0xfab2, 0xfbbb, 0xfab2, 0xfbbb, 0xf9dd, 0xfafe, 0xf9dd, 0xfafe, 0xf77a, 0xf8bb, 0xf77a, +0xf8bb, 0xf7f8, 0xf95d, 0xf7f8, 0xf95d, 0xf7f8, 0xf95d, 0xf7ed, 0xf97f, 0xf7ed, 0xf97f, +0xf71c, 0xf8dd, 0xf71c, 0xf8dd, 0xf5b4, 0xf7a8, 0xf5b4, 0xf7a8, 0xf249, 0xf471, 0xf249, +0xf471, 0xf504, 0xf760, 0xf504, 0xf760, 0xf279, 0xf507, 0xf279, 0xf507, 0xf279, 0xf507, +0xf0b3, 0xf36f, 0xf0b3, 0xf36f, 0xf049, 0xf32c, 0xf049, 0xf32c, 0xee67, 0xf169, 0xee67, +0xf169, 0xef4e, 0xf267, 0xef4e, 0xf267, 0xefa0, 0xf2c4, 0xefa0, 0xf2c4, 0xeec0, 0xf1e2, +0xeec0, 0xf1e2, 0xeec0, 0xf1e2, 0xebe5, 0xeef8, 0xebe5, 0xeef8, 0xed41, 0xf038, 0xed41, +0xf038, 0xec88, 0xef54, 0xec88, 0xef54, 0xecc2, 0xef55, 0xecc2, 0xef55, 0xee3e, 0xf08b, +0xee3e, 0xf08b, 0xee3e, 0xf08b, 0xf062, 0xf25d, 0xf062, 0xf25d, 0xf0c9, 0xf265, 0xf0c9, +0xf265, 0xf3e7, 0xf51c, 0xf3e7, 0xf51c, 0xf884, 0xf94a, 0xf884, 0xf94a, 0xf904, 0xf955, +0xf904, 0xf955, 0xf9a3, 0xf97b, 0xf9a3, 0xf97b, 0xf9a3, 0xf97b, 0xfe76, 0xfdd4, 0xfe76, +0xfdd4, 0x258, 0x13d, 0x258, 0x13d, 0x199, 0x9, 0x199, 0x9, 0x648, 0x448, +0x648, 0x448, 0x97f, 0x718, 0x97f, 0x718, 0xc72, 0x9ac, 0xc72, 0x9ac, 0xc72, +0x9ac, 0xcff, 0x9e6, 0xcff, 0x9e6, 0xe3b, 0xadb, 0xe3b, 0xadb, 0x1043, 0xcaa, +0x1043, 0xcaa, 0xe56, 0xa91, 0xe56, 0xa91, 0xefc, 0xb1a, 0xefc, 0xb1a, 0xefc, +0xb1a, 0x1274, 0xe84, 0x1274, 0xe84, 0x11b8, 0xdc7, 0x11b8, 0xdc7, 0xf51, 0xb6b, +0xf51, 0xb6b, 0x11e6, 0xe18, 0x11e6, 0xe18, 0x1238, 0xe8c, 0x1238, 0xe8c, 0x118e, +0xe0d, 0x118e, 0xe0d, 0x118e, 0xe0d, 0x1290, 0xf41, 0x1290, 0xf41, 0x1136, 0xe1d, +0x1136, 0xe1d, 0xf60, 0xc81, 0xf60, 0xc81, 0x123c, 0xf98, 0x123c, 0xf98, 0xf60, +0xcf7, 0xf60, 0xcf7, 0x1027, 0xdf7, 0x1027, 0xdf7, 0x1027, 0xdf7, 0x104d, 0xe52, +0x104d, 0xe52, 0xc84, 0xab9, 0xc84, 0xab9, 0xf48, 0xda6, 0xf48, 0xda6, 0xe41, +0xcc2, 0xe41, 0xcc2, 0xcbc, 0xb57, 0xcbc, 0xb57, 0xcbc, 0xb57, 0xbf2, 0xa9f, +0xbf2, 0xa9f, 0xb2b, 0x9e4, 0xb2b, 0x9e4, 0xa5d, 0x919, 0xa5d, 0x919, 0xc64, +0xb1c, 0xc64, 0xb1c, 0xa61, 0x90e, 0xa61, 0x90e, 0xa3a, 0x8d8, 0xa3a, 0x8d8, +0xa3a, 0x8d8, 0xb42, 0x9cc, 0xb42, 0x9cc, 0x977, 0x7ea, 0x977, 0x7ea, 0x95a, +0x7b4, 0x95a, 0x7b4, 0x82f, 0x66e, 0x82f, 0x66e, 0x884, 0x6aa, 0x884, 0x6aa, +0x658, 0x466, 0x658, 0x466, 0x658, 0x466, 0x7d9, 0x5d3, 0x7d9, 0x5d3, 0x7a4, +0x58d, 0x7a4, 0x58d, 0x5dc, 0x3b8, 0x5dc, 0x3b8, 0x726, 0x4fa, 0x726, 0x4fa, +0x6ec, 0x4bf, 0x6ec, 0x4bf, 0x6ec, 0x4bf, 0x858, 0x62e, 0x858, 0x62e, 0xbfe, +0x9dd, 0xbfe, 0x9dd, 0xabb, 0x8a9, 0xabb, 0x8a9, 0x9ec, 0x7ee, 0x9ec, 0x7ee, +0xa25, 0x83f, 0xa25, 0x83f, 0x742, 0x578, 0x742, 0x578, 0x742, 0x578, 0x956, +0x7ab, 0x956, 0x7ab, 0x791, 0x607, 0x791, 0x607, 0x5a4, 0x43d, 0x5a4, 0x43d, +0x7af, 0x66a, 0x7af, 0x66a, 0x844, 0x71f, 0x844, 0x71f, 0x844, 0x71f, 0x65c, +0x556, 0x65c, 0x556, 0x4e2, 0x3fa, 0x4e2, 0x3fa, 0x3ab, 0x2db, 0x3ab, 0x2db, +0xffe3, 0xff28, 0xffe3, 0xff28, 0x2bc, 0x211, 0x2bc, 0x211, 0x17f, 0xdf, 0x17f, +0xdf, 0x17f, 0xdf, 0xfe87, 0xfdeb, 0xfe87, 0xfdeb, 0x2d9, 0x23e, 0x2d9, 0x23e, +0x23f, 0x19d, 0x23f, 0x19d, 0x399, 0x2ec, 0x399, 0x2ec, 0x582, 0x4c5, 0x582, +0x4c5, 0x3fd, 0x32b, 0x3fd, 0x32b, 0x3fd, 0x32b, 0x471, 0x386, 0x471, 0x386, +0x59d, 0x496, 0x59d, 0x496, 0x7b8, 0x693, 0x7b8, 0x693, 0xb4b, 0xa06, 0xb4b, +0xa06, 0xc24, 0xabd, 0xc24, 0xabd, 0xc24, 0xabd, 0xef8, 0xd6f, 0xef8, 0xd6f, +0x152a, 0x1380, 0x152a, 0x1380, 0x138e, 0x11c4, 0x138e, 0x11c4, 0x15df, 0x13f8, 0x15df, +0x13f8, 0x1926, 0x1725, 0x1926, 0x1725, 0x18ac, 0x1694, 0x18ac, 0x1694, 0x18ac, 0x1694, +0x1906, 0x16db, 0x1906, 0x16db, 0x1bc1, 0x1987, 0x1bc1, 0x1987, 0x1c68, 0x1a25, 0x1c68, +0x1a25, 0x1997, 0x1750, 0x1997, 0x1750, 0x1c56, 0x1a10, 0x1c56, 0x1a10, 0x1cfa, 0x1aba, +0x1cfa, 0x1aba, 0x1cfa, 0x1aba, 0x1d47, 0x1b12, 0x1d47, 0x1b12, 0x19d1, 0x17ae, 0x19d1, +0x17ae, 0x1840, 0x1633, 0x1840, 0x1633, 0x1739, 0x1547, 0x1739, 0x1547, 0x16a6, 0x14d3, +0x16a6, 0x14d3, 0x16a6, 0x14d3, 0x16d6, 0x1528, 0x16d6, 0x1528, 0x12ea, 0x1163, 0x12ea, +0x1163, 0x12f0, 0x1195, 0x12f0, 0x1195, 0x1158, 0x102c, 0x1158, 0x102c, 0x11a4, 0x10a9, +0x11a4, 0x10a9, 0xffb, 0xf34, 0xffb, 0xf34, 0xffb, 0xf34, 0xd8f, 0xcfd, 0xd8f, +0xcfd, 0xbce, 0xb73, 0xbce, 0xb73, 0x9aa, 0x985, 0x9aa, 0x985, 0x825, 0x838, +0x825, 0x838, 0x6d0, 0x71a, 0x6d0, 0x71a, 0x63e, 0x6be, 0x63e, 0x6be, 0x63e, +0x6be, 0x393, 0x448, 0x393, 0x448, 0x3a9, 0x492, 0x3a9, 0x492, 0x3b4, 0x4ce, +0x3b4, 0x4ce, 0x336, 0x47f, 0x336, 0x47f, 0x219, 0x38f, 0x219, 0x38f, 0x219, +0x38f, 0xff27, 0xc6, 0xff27, 0xc6, 0xfe32, 0xfff8, 0xfe32, 0xfff8, 0xfd16, 0xfeff, +0xfd16, 0xfeff, 0xfae7, 0xfcef, 0xfae7, 0xfcef, 0xf9d0, 0xfbf3, 0xf9d0, 0xfbf3, 0xf7e7, +0xfa23, 0xf7e7, 0xfa23, 0xf7e7, 0xfa23, 0xf690, 0xf8df, 0xf690, 0xf8df, 0xf621, 0xf881, +0xf621, 0xf881, 0xf5cd, 0xf839, 0xf5cd, 0xf839, 0xf3c0, 0xf635, 0xf3c0, 0xf635, 0xf20a, +0xf484, 0xf20a, 0xf484, 0xf1ee, 0xf46b, 0xf1ee, 0xf46b, 0xf1ee, 0xf46b, 0xf058, 0xf2d5, +0xf058, 0xf2d5, 0xf182, 0xf3fc, 0xf182, 0xf3fc, 0xf0f4, 0xf36a, 0xf0f4, 0xf36a, 0xec8b, +0xeefb, 0xec8b, 0xeefb, 0xee38, 0xf0a1, 0xee38, 0xf0a1, 0xee38, 0xf0a1, 0xed73, 0xefd5, +0xed73, 0xefd5, 0xec40, 0xee9a, 0xec40, 0xee9a, 0xee31, 0xf085, 0xee31, 0xf085, 0xead6, +0xed24, 0xead6, 0xed24, 0xec4f, 0xee99, 0xec4f, 0xee99, 0xeb6b, 0xedb2, 0xeb6b, 0xedb2, +0xeb6b, 0xedb2, 0xea04, 0xec4c, 0xea04, 0xec4c, 0xe6d5, 0xe91e, 0xe6d5, 0xe91e, 0xe482, +0xe6cf, 0xe482, 0xe6cf, 0xe5e3, 0xe837, 0xe5e3, 0xe837, 0xe411, 0xe66e, 0xe411, 0xe66e, +0xe429, 0xe691, 0xe429, 0xe691, 0xe429, 0xe691, 0xe057, 0xe2cd, 0xe057, 0xe2cd, 0xe169, +0xe3ed, 0xe169, 0xe3ed, 0xe0c1, 0xe355, 0xe0c1, 0xe355, 0xdf1f, 0xe1c4, 0xdf1f, 0xe1c4, +0xe1f1, 0xe4a6, 0xe1f1, 0xe4a6, 0xe1f1, 0xe4a6, 0xdf0e, 0xe1d4, 0xdf0e, 0xe1d4, 0xdca7, +0xdf7c, 0xdca7, 0xdf7c, 0xe226, 0xe508, 0xe226, 0xe508, 0xe26a, 0xe557, 0xe26a, 0xe557, +0xe1bb, 0xe4b0, 0xe1bb, 0xe4b0, 0xe4f7, 0xe7f1, 0xe4f7, 0xe7f1, 0xe4f7, 0xe7f1, 0xe47b, +0xe777, 0xe47b, 0xe777, 0xe739, 0xea32, 0xe739, 0xea32, 0xe7e1, 0xead3, 0xe7e1, 0xead3, +0xea49, 0xed32, 0xea49, 0xed32, 0xebf8, 0xeed3, 0xebf8, 0xeed3, 0xece8, 0xefb0, 0xece8, +0xefb0, 0xece8, 0xefb0, 0xef7d, 0xf231, 0xef7d, 0xf231, 0xf369, 0xf607, 0xf369, 0xf607, +0xf160, 0xf3e5, 0xf160, 0xf3e5, 0xef36, 0xf1a3, 0xef36, 0xf1a3, 0xf333, 0xf588, 0xf333, +0xf588, 0xf333, 0xf588, 0xf238, 0xf476, 0xf238, 0xf476, 0xefe5, 0xf20e, 0xefe5, 0xf20e, +0xef94, 0xf1ac, 0xef94, 0xf1ac, 0xf223, 0xf42f, 0xf223, 0xf42f, 0xf213, 0xf418, 0xf213, +0xf418, 0xf403, 0xf607, 0xf403, 0xf607, 0xf403, 0xf607, 0xf335, 0xf540, 0xf335, 0xf540, +0xf271, 0xf489, 0xf271, 0xf489, 0xf15a, 0xf387, 0xf15a, 0xf387, 0xf04d, 0xf297, 0xf04d, +0xf297, 0xf00b, 0xf27a, 0xf00b, 0xf27a, 0xeed2, 0xf16d, 0xeed2, 0xf16d, 0xeed2, 0xf16d, +0xef61, 0xf22d, 0xef61, 0xf22d, 0xef19, 0xf21e, 0xef19, 0xf21e, 0xeff7, 0xf338, 0xeff7, +0xf338, 0xeccc, 0xf04c, 0xeccc, 0xf04c, 0xec22, 0xefe3, 0xec22, 0xefe3, 0xec22, 0xefe3, +0xe949, 0xed4b, 0xe949, 0xed4b, 0xe71c, 0xeb5e, 0xe71c, 0xeb5e, 0xe5bc, 0xea3a, 0xe5bc, +0xea3a, 0xe53f, 0xe9f5, 0xe53f, 0xe9f5, 0xe351, 0xe838, 0xe351, 0xe838, 0xe2a8, 0xe7b8, +0xe2a8, 0xe7b8, 0xe2a8, 0xe7b8, 0xe278, 0xe7a8, 0xe278, 0xe7a8, 0xe0bf, 0xe603, 0xe0bf, +0xe603, 0xe354, 0xe8a2, 0xe354, 0xe8a2, 0xdfd6, 0xe521, 0xdfd6, 0xe521, 0xe019, 0xe556, +0xe019, 0xe556, 0xdecb, 0xe3ed, 0xdecb, 0xe3ed, 0xdecb, 0xe3ed, 0xde76, 0xe372, 0xde76, +0xe372, 0xdf8f, 0xe458, 0xdf8f, 0xe458, 0xe05e, 0xe4eb, 0xe05e, 0xe4eb, 0xe07c, 0xe4c4, +0xe07c, 0xe4c4, 0xdf59, 0xe353, 0xdf59, 0xe353, 0xdf59, 0xe353, 0xe166, 0xe50d, 0xe166, +0xe50d, 0xe21b, 0xe56b, 0xe21b, 0xe56b, 0xe571, 0xe867, 0xe571, 0xe867, 0xe8ad, 0xeb47, +0xe8ad, 0xeb47, 0xe8ea, 0xeb2a, 0xe8ea, 0xeb2a, 0xeb1a, 0xed04, 0xeb1a, 0xed04, 0xeb1a, +0xed04, 0xf0a9, 0xf240, 0xf0a9, 0xf240, 0xf0aa, 0xf1f5, 0xf0aa, 0xf1f5, 0xf2e4, 0xf3e9, +0xf2e4, 0xf3e9, 0xf4ba, 0xf582, 0xf4ba, 0xf582, 0xf828, 0xf8bb, 0xf828, 0xf8bb, 0xf828, +0xf8bb, 0xfa91, 0xfaf8, 0xfa91, 0xfaf8, 0xfa95, 0xfad9, 0xfa95, 0xfad9, 0xfd12, 0xfd3b, +0xfd12, 0xfd3b, 0xfc29, 0xfc3e, 0xfc29, 0xfc3e, 0xfe1b, 0xfe24, 0xfe1b, 0xfe24, 0xfedc, +0xfede, 0xfedc, 0xfede, 0xfedc, 0xfede, 0xfeec, 0xfeea, 0xfeec, 0xfeea, 0xff3b, 0xff38, +0xff3b, 0xff38, 0xaf, 0xad, 0xaf, 0xad, 0xb8, 0xb4, 0xb8, 0xb4, 0x38c, +0x385, 0x38c, 0x385, 0x365, 0x355, 0x365, 0x355, 0x365, 0x355, 0x2b9, 0x29b, +0x2b9, 0x29b, 0x782, 0x750, 0x782, 0x750, 0x98e, 0x93f, 0x98e, 0x93f, 0xbe5, +0xb71, 0xbe5, 0xb71, 0xc13, 0xb71, 0xc13, 0xb71, 0xc13, 0xb71, 0xe31, 0xd57, +0xe31, 0xd57, 0x12b8, 0x119e, 0x12b8, 0x119e, 0x15d7, 0x1475, 0x15d7, 0x1475, 0x1789, +0x15d9, 0x1789, 0x15d9, 0x1cfa, 0x1af5, 0x1cfa, 0x1af5, 0x1ea0, 0x1c41, 0x1ea0, 0x1c41, +0x1ea0, 0x1c41, 0x2224, 0x1f6b, 0x2224, 0x1f6b, 0x28af, 0x259a, 0x28af, 0x259a, 0x27ba, +0x244c, 0x27ba, 0x244c, 0x2916, 0x2552, 0x2916, 0x2552, 0x2b18, 0x2704, 0x2b18, 0x2704, +0x2bd8, 0x277c, 0x2bd8, 0x277c, 0x2bd8, 0x277c, 0x2caf, 0x2816, 0x2caf, 0x2816, 0x2e2b, +0x295f, 0x2e2b, 0x295f, 0x2ae0, 0x25ef, 0x2ae0, 0x25ef, 0x2b45, 0x263d, 0x2b45, 0x263d, +0x2dee, 0x28dd, 0x2dee, 0x28dd, 0x2dee, 0x28dd, 0x2ab5, 0x25ab, 0x2ab5, 0x25ab, 0x2c68, +0x2773, 0x2c68, 0x2773, 0x2a8f, 0x25c0, 0x2a8f, 0x25c0, 0x2790, 0x22f3, 0x2790, 0x22f3, +0x27f8, 0x239b, 0x27f8, 0x239b, 0x2504, 0x20f1, 0x2504, 0x20f1, 0x2504, 0x20f1, 0x2316, +0x1f58, 0x2316, 0x1f58, 0x22f6, 0x1f94, 0x22f6, 0x1f94, 0x1f89, 0x1c89, 0x1f89, 0x1c89, +0x1d5f, 0x1ac4, 0x1d5f, 0x1ac4, 0x1c42, 0x1a0d, 0x1c42, 0x1a0d, 0x1808, 0x1638, 0x1808, +0x1638, 0x1808, 0x1638, 0x1757, 0x15e9, 0x1757, 0x15e9, 0x1362, 0x1250, 0x1362, 0x1250, +0x10b7, 0xff9, 0x10b7, 0xff9, 0x112c, 0x10bb, 0x112c, 0x10bb, 0xe70, 0xe41, 0xe70, +0xe41, 0xe70, 0xe41, 0xb9d, 0xba4, 0xb9d, 0xba4, 0xaee, 0xb21, 0xaee, 0xb21, +0xa3e, 0xa92, 0xa3e, 0xa92, 0x5c8, 0x630, 0x5c8, 0x630, 0x4be, 0x530, 0x4be, +0x530, 0x7b, 0xeb, 0x7b, 0xeb, 0x7b, 0xeb, 0xff35, 0xff9b, 0xff35, 0xff9b, +0xfee3, 0xff37, 0xfee3, 0xff37, 0xfe8e, 0xfeca, 0xfe8e, 0xfeca, 0xff13, 0xff33, 0xff13, +0xff33, 0xfc4e, 0xfc4e, 0xfc4e, 0xfc4e, 0xfd0b, 0xfceb, 0xfd0b, 0xfceb, 0xfd0b, 0xfceb, +0xfb04, 0xfac5, 0xfb04, 0xfac5, 0xfc72, 0xfc16, 0xfc72, 0xfc16, 0xfbe9, 0xfb74, 0xfbe9, +0xfb74, 0xfbcc, 0xfb42, 0xfbcc, 0xfb42, 0xfca8, 0xfc11, 0xfca8, 0xfc11, 0xfca8, 0xfc11, +0xfbd7, 0xfb39, 0xfbd7, 0xfb39, 0xfd22, 0xfc85, 0xfd22, 0xfc85, 0xfcfa, 0xfc66, 0xfcfa, +0xfc66, 0xf99f, 0xf91a, 0xf99f, 0xf91a, 0xf982, 0xf914, 0xf982, 0xf914, 0xfa49, 0xf9f7, +0xfa49, 0xf9f7, 0xfa49, 0xf9f7, 0xf765, 0xf735, 0xf765, 0xf735, 0xf77b, 0xf770, 0xf77b, +0xf770, 0xf2a9, 0xf2c7, 0xf2a9, 0xf2c7, 0xf387, 0xf3cd, 0xf387, 0xf3cd, 0xf20f, 0xf27d, +0xf20f, 0xf27d, 0xef09, 0xef9d, 0xef09, 0xef9d, 0xef09, 0xef9d, 0xf08c, 0xf141, 0xf08c, +0xf141, 0xed56, 0xee26, 0xed56, 0xee26, 0xec49, 0xed2e, 0xec49, 0xed2e, 0xebdf, 0xecd0, +0xebdf, 0xecd0, 0xeaf9, 0xebec, 0xeaf9, 0xebec, 0xeaf9, 0xebec, 0xe94c, 0xea37, 0xe94c, +0xea37, 0xe8bc, 0xe995, 0xe8bc, 0xe995, 0xe790, 0xe84d, 0xe790, 0xe84d, 0xe7e4, 0xe879, +0xe7e4, 0xe879, 0xe7b3, 0xe817, 0xe7b3, 0xe817, 0xe741, 0xe76a, 0xe741, 0xe76a, 0xe741, +0xe76a, 0xe99a, 0xe981, 0xe99a, 0xe981, 0xeb6f, 0xeb0c, 0xeb6f, 0xeb0c, 0xecf5, 0xec43, +0xecf5, 0xec43, 0xf034, 0xef2f, 0xf034, 0xef2f, 0xf0fd, 0xefa2, 0xf0fd, 0xefa2, 0xf284, +0xf0d5, 0xf284, 0xf0d5, 0xf284, 0xf0d5, 0xf837, 0xf634, 0xf837, 0xf634, 0xfb21, 0xf8cc, +0xfb21, 0xf8cc, 0xfc4c, 0xf9ab, 0xfc4c, 0xf9ab, 0xffb6, 0xfccf, 0xffb6, 0xfccf, 0x16a, +0xfe45, 0x16a, 0xfe45, 0x16a, 0xfe45, 0x340, 0xffe5, 0x340, 0xffe5, 0x72d, 0x3a5, +0x72d, 0x3a5, 0x56a, 0x1bf, 0x56a, 0x1bf, 0x61f, 0x25b, 0x61f, 0x25b, 0x535, +0x162, 0x535, 0x162, 0x76e, 0x395, 0x76e, 0x395, 0x76e, 0x395, 0xab3, 0x6de, +0xab3, 0x6de, 0x9a3, 0x5da, 0x9a3, 0x5da, 0xb30, 0x77a, 0xb30, 0x77a, 0xb64, +0x7c8, 0xb64, 0x7c8, 0xc3b, 0x8bd, 0xc3b, 0x8bd, 0xce9, 0x98d, 0xce9, 0x98d, +0xce9, 0x98d, 0xeea, 0xbb2, 0xeea, 0xbb2, 0xd29, 0xa15, 0xd29, 0xa15, 0xd35, +0xa44, 0xd35, 0xa44, 0xf96, 0xcc9, 0xf96, 0xcc9, 0xfe0, 0xd31, 0xfe0, 0xd31, +0xfe0, 0xd31, 0xe94, 0xc02, 0xe94, 0xc02, 0x1037, 0xdbd, 0x1037, 0xdbd, 0xe60, +0xbf9, 0xe60, 0xbf9, 0xe35, 0xbdc, 0xe35, 0xbdc, 0x103b, 0xdec, 0x103b, 0xdec, +0xd98, 0xb4e, 0xd98, 0xb4e, 0xd98, 0xb4e, 0xef7, 0xcad, 0xef7, 0xcad, 0xd41, +0xaf4, 0xd41, 0xaf4, 0xfaf, 0xd5c, 0xfaf, 0xd5c, 0xf26, 0xccc, 0xf26, 0xccc, +0xf95, 0xd33, 0xf95, 0xd33, 0xe44, 0xbda, 0xe44, 0xbda, 0xe44, 0xbda, 0xd8a, +0xb18, 0xd8a, 0xb18, 0xf19, 0xca3, 0xf19, 0xca3, 0xc8d, 0xa16, 0xc8d, 0xa16, +0xf26, 0xcb2, 0xf26, 0xcb2, 0xd14, 0xaa8, 0xd14, 0xaa8, 0xd14, 0xaa8, 0xd6c, +0xb0d, 0xd6c, 0xb0d, 0xdd1, 0xb86, 0xdd1, 0xb86, 0xd7a, 0xb47, 0xd7a, 0xb47, +0xf73, 0xd5f, 0xf73, 0xd5f, 0xf71, 0xd81, 0xf71, 0xd81, 0xe16, 0xc4e, 0xe16, +0xc4e, 0xe16, 0xc4e, 0x10ac, 0xf12, 0x10ac, 0xf12, 0xfc4, 0xe5a, 0xfc4, 0xe5a, +0xeb8, 0xd82, 0xeb8, 0xd82, 0xfb7, 0xeb5, 0xfb7, 0xeb5, 0xc75, 0xba7, 0xc75, +0xba7, 0xc75, 0xba7, 0xee0, 0xe45, 0xee0, 0xe45, 0xe94, 0xe2b, 0xe94, 0xe2b, +0xdaa, 0xd6f, 0xdaa, 0xd6f, 0xd3c, 0xd2a, 0xd3c, 0xd2a, 0xcd1, 0xce2, 0xcd1, +0xce2, 0xd8b, 0xdba, 0xd8b, 0xdba, 0xd8b, 0xdba, 0xbaf, 0xbf4, 0xbaf, 0xbf4, +0x937, 0x98a, 0x937, 0x98a, 0x67a, 0x6d4, 0x67a, 0x6d4, 0x46f, 0x4c7, 0x46f, +0x4c7, 0x5d1, 0x620, 0x5d1, 0x620, 0x672, 0x6b0, 0x672, 0x6b0, 0x672, 0x6b0, +0x5a1, 0x5c8, 0x5a1, 0x5c8, 0x5d2, 0x5db, 0x5d2, 0x5db, 0x5bd, 0x5a4, 0x5bd, +0x5a4, 0x588, 0x546, 0x588, 0x546, 0x4de, 0x472, 0x4de, 0x472, 0x4de, 0x472, +0x633, 0x59a, 0x633, 0x59a, 0x562, 0x49b, 0x562, 0x49b, 0x7b0, 0x6ba, 0x7b0, +0x6ba, 0xc32, 0xb10, 0xc32, 0xb10, 0xe55, 0xd07, 0xe55, 0xd07, 0xf50, 0xddc, +0xf50, 0xddc, 0xf50, 0xddc, 0x1220, 0x1087, 0x1220, 0x1087, 0x14ff, 0x1346, 0x14ff, +0x1346, 0x16f2, 0x151f, 0x16f2, 0x151f, 0x16ea, 0x1502, 0x16ea, 0x1502, 0x15a9, 0x13b0, +0x15a9, 0x13b0, 0x17b5, 0x15b1, 0x17b5, 0x15b1, 0x17b5, 0x15b1, 0x17d8, 0x15cf, 0x17d8, +0x15cf, 0x19b9, 0x17b0, 0x19b9, 0x17b0, 0x1863, 0x165e, 0x1863, 0x165e, 0x175d, 0x1560, +0x175d, 0x1560, 0x1739, 0x1549, 0x1739, 0x1549, 0x1739, 0x1549, 0x16b8, 0x14d7, 0x16b8, +0x14d7, 0x1601, 0x1431, 0x1601, 0x1431, 0x1609, 0x144d, 0x1609, 0x144d, 0x1646, 0x149e, +0x1646, 0x149e, 0x1222, 0x1090, 0x1222, 0x1090, 0x1233, 0x10b6, 0x1233, 0x10b6, 0x1233, +0x10b6, 0x1134, 0xfcd, 0x1134, 0xfcd, 0xecb, 0xd78, 0xecb, 0xd78, 0xbef, 0xab1, +0xbef, 0xab1, 0xb6f, 0xa45, 0xb6f, 0xa45, 0xa0e, 0x8f7, 0xa0e, 0x8f7, 0x8aa, +0x7a4, 0x8aa, 0x7a4, 0x8aa, 0x7a4, 0x78a, 0x696, 0x78a, 0x696, 0x3e1, 0x2fe, +0x3e1, 0x2fe, 0x3e5, 0x314, 0x3e5, 0x314, 0x334, 0x274, 0x334, 0x274, 0x325, +0x277, 0x325, 0x277, 0x325, 0x277, 0x10b, 0x70, 0x10b, 0x70, 0xff57, 0xfed0, +0xff57, 0xfed0, 0xfe7e, 0xfe0c, 0xfe7e, 0xfe0c, 0xfd9c, 0xfd41, 0xfd9c, 0xfd41, 0xfe79, +0xfe36, 0xfe79, 0xfe36, 0xfcea, 0xfcc1, 0xfcea, 0xfcc1, 0xfcea, 0xfcc1, 0xfa6d, 0xfa60, +0xfa6d, 0xfa60, 0xf7f3, 0xf803, 0xf7f3, 0xf803, 0xf7d6, 0xf804, 0xf7d6, 0xf804, 0xf8b4, +0xf902, 0xf8b4, 0xf902, 0xf78f, 0xf7fe, 0xf78f, 0xf7fe, 0xf538, 0xf5c9, 0xf538, 0xf5c9, +0xf538, 0xf5c9, 0xf380, 0xf433, 0xf380, 0xf433, 0xf27c, 0xf351, 0xf27c, 0xf351, 0xf1d3, +0xf2c9, 0xf1d3, 0xf2c9, 0xf0e0, 0xf1f8, 0xf0e0, 0xf1f8, 0xeeab, 0xefe2, 0xeeab, 0xefe2, +0xeeab, 0xefe2, 0xedff, 0xef56, 0xedff, 0xef56, 0xefa7, 0xf11b, 0xefa7, 0xf11b, 0xf12f, +0xf2c0, 0xf12f, 0xf2c0, 0xef3d, 0xf0e8, 0xef3d, 0xf0e8, 0xefbf, 0xf184, 0xefbf, 0xf184, +0xeffa, 0xf1d7, 0xeffa, 0xf1d7, 0xeffa, 0xf1d7, 0xef52, 0xf146, 0xef52, 0xf146, 0xf114, +0xf31e, 0xf114, 0xf31e, 0xee83, 0xf0a2, 0xee83, 0xf0a2, 0xeee0, 0xf114, 0xeee0, 0xf114, +0xee13, 0xf05b, 0xee13, 0xf05b, 0xef52, 0xf1af, 0xef52, 0xf1af, 0xef52, 0xf1af, 0xf088, +0xf2f9, 0xf088, 0xf2f9, 0xecd9, 0xef60, 0xecd9, 0xef60, 0xec0a, 0xeea8, 0xec0a, 0xeea8, +0xeb76, 0xee2a, 0xeb76, 0xee2a, 0xeafb, 0xedc8, 0xeafb, 0xedc8, 0xeafb, 0xedc8, 0xe930, +0xec15, 0xe930, 0xec15, 0xe887, 0xeb87, 0xe887, 0xeb87, 0xe7cc, 0xeae5, 0xe7cc, 0xeae5, +0xe8b9, 0xebed, 0xe8b9, 0xebed, 0xe896, 0xebe5, 0xe896, 0xebe5, 0xe903, 0xec6c, 0xe903, +0xec6c, 0xe903, 0xec6c, 0xe7dd, 0xeb5e, 0xe7dd, 0xeb5e, 0xe6e2, 0xea7b, 0xe6e2, 0xea7b, +0xe967, 0xed16, 0xe967, 0xed16, 0xe8a0, 0xec61, 0xe8a0, 0xec61, 0xe979, 0xed49, 0xe979, +0xed49, 0xea6c, 0xee48, 0xea6c, 0xee48, 0xea6c, 0xee48, 0xec50, 0xf035, 0xec50, 0xf035, +0xee2d, 0xf216, 0xee2d, 0xf216, 0xef9e, 0xf386, 0xef9e, 0xf386, 0xf095, 0xf477, 0xf095, +0xf477, 0xf035, 0xf40d, 0xf035, 0xf40d, 0xf035, 0xf40d, 0xf011, 0xf3db, 0xf011, 0xf3db, +0xf422, 0xf7d9, 0xf422, 0xf7d9, 0xf594, 0xf935, 0xf594, 0xf935, 0xf527, 0xf8ae, 0xf527, +0xf8ae, 0xf60d, 0xf978, 0xf60d, 0xf978, 0xf458, 0xf7a5, 0xf458, 0xf7a5, 0xf458, 0xf7a5, +0xf44b, 0xf779, 0xf44b, 0xf779, 0xf499, 0xf7a8, 0xf499, 0xf7a8, 0xf763, 0xfa52, 0xf763, +0xfa52, 0xf637, 0xf909, 0xf637, 0xf909, 0xf685, 0xf93c, 0xf685, 0xf93c, 0xf6f3, 0xf992, +0xf6f3, 0xf992, 0xf6f3, 0xf992, 0xf594, 0xf81f, 0xf594, 0xf81f, 0xf5a5, 0xf820, 0xf5a5, +0xf820, 0xf243, 0xf4b3, 0xf243, 0xf4b3, 0xf138, 0xf3a3, 0xf138, 0xf3a3, 0xf15d, 0xf3c8, +0xf15d, 0xf3c8, 0xf15d, 0xf3c8, 0xefa5, 0xf214, 0xefa5, 0xf214, 0xee73, 0xf0ec, 0xee73, +0xf0ec, 0xecc3, 0xef4c, 0xecc3, 0xef4c, 0xeb1e, 0xedbb, 0xeb1e, 0xedbb, 0xeb7b, 0xee30, +0xeb7b, 0xee30, 0xe926, 0xebf6, 0xe926, 0xebf6, 0xe926, 0xebf6, 0xe7ff, 0xeaed, 0xe7ff, +0xeaed, 0xe50b, 0xe818, 0xe50b, 0xe818, 0xe2f5, 0xe622, 0xe2f5, 0xe622, 0xe234, 0xe57f, +0xe234, 0xe57f, 0xe104, 0xe46d, 0xe104, 0xe46d, 0xdf30, 0xe2b4, 0xdf30, 0xe2b4, 0xdf30, +0xe2b4, 0xdb5e, 0xdefb, 0xdb5e, 0xdefb, 0xdbf0, 0xdfa0, 0xdbf0, 0xdfa0, 0xdb3a, 0xdef9, +0xdb3a, 0xdef9, 0xdb07, 0xded0, 0xdb07, 0xded0, 0xdbca, 0xdf97, 0xdbca, 0xdf97, 0xdbca, +0xdf97, 0xdaa9, 0xde73, 0xdaa9, 0xde73, 0xda1a, 0xdddc, 0xda1a, 0xdddc, 0xdc5e, 0xe011, +0xdc5e, 0xe011, 0xdd69, 0xe106, 0xdd69, 0xe106, 0xdd2e, 0xe0af, 0xdd2e, 0xe0af, 0xdd29, +0xe08a, 0xdd29, 0xe08a, 0xdd29, 0xe08a, 0xdf13, 0xe24e, 0xdf13, 0xe24e, 0xe0a3, 0xe3b4, +0xe0a3, 0xe3b4, 0xe278, 0xe55b, 0xe278, 0xe55b, 0xe3eb, 0xe69d, 0xe3eb, 0xe69d, 0xe443, +0xe6c3, 0xe443, 0xe6c3, 0xe443, 0xe6c3, 0xe873, 0xeabe, 0xe873, 0xeabe, 0xeb49, 0xed5e, +0xeb49, 0xed5e, 0xef77, 0xf155, 0xef77, 0xf155, 0xf018, 0xf1c1, 0xf018, 0xf1c1, 0xf12c, +0xf2a0, 0xf12c, 0xf2a0, 0xf429, 0xf568, 0xf429, 0xf568, 0xf429, 0xf568, 0xf7e9, 0xf8f4, +0xf7e9, 0xf8f4, 0xf9b2, 0xfa8c, 0xf9b2, 0xfa8c, 0xf974, 0xfa1d, 0xf974, 0xfa1d, 0xfa47, +0xfac1, 0xfa47, 0xfac1, 0xfb97, 0xfbe2, 0xfb97, 0xfbe2, 0xfdb9, 0xfdd7, 0xfdb9, 0xfdd7, +0xfdb9, 0xfdd7, 0xfd0b, 0xfcfc, 0xfd0b, 0xfcfc, 0x16, 0xffda, 0x16, 0xffda, 0xfdfe, +0xfd94, 0xfdfe, 0xfd94, 0xffd9, 0xff41, 0xffd9, 0xff41, 0x205, 0x13e, 0x205, 0x13e, +0x205, 0x13e, 0x2c7, 0x1d0, 0x2c7, 0x1d0, 0x5fa, 0x4d1, 0x5fa, 0x4d1, 0x453, +0x2f5, 0x453, 0x2f5, 0x8ff, 0x76c, 0x8ff, 0x76c, 0xdd3, 0xc07, 0xdd3, 0xc07, +0xfb1, 0xdad, 0xfb1, 0xdad, 0xfb1, 0xdad, 0x1147, 0xf08, 0x1147, 0xf08, 0x14b3, +0x1239, 0x14b3, 0x1239, 0x189d, 0x15e9, 0x189d, 0x15e9, 0x1c22, 0x1933, 0x1c22, 0x1933, +0x1e42, 0x1b19, 0x1e42, 0x1b19, 0x2071, 0x1d11, 0x2071, 0x1d11, 0x2071, 0x1d11, 0x2224, +0x1e90, 0x2224, 0x1e90, 0x2490, 0x20cb, 0x2490, 0x20cb, 0x2766, 0x2377, 0x2766, 0x2377, +0x2989, 0x2574, 0x2989, 0x2574, 0x2a29, 0x25f5, 0x2a29, 0x25f5, 0x2a29, 0x25f5, 0x2828, +0x23dd, 0x2828, 0x23dd, 0x2af2, 0x2697, 0x2af2, 0x2697, 0x2a26, 0x25c4, 0x2a26, 0x25c4, +0x291c, 0x24bc, 0x291c, 0x24bc, 0x2962, 0x250d, 0x2962, 0x250d, 0x2827, 0x23e5, 0x2827, +0x23e5, 0x2827, 0x23e5, 0x2820, 0x23fa, 0x2820, 0x23fa, 0x2808, 0x2408, 0x2808, 0x2408, +0x2776, 0x23a2, 0x2776, 0x23a2, 0x2472, 0x20d2, 0x2472, 0x20d2, 0x2336, 0x1fd0, 0x2336, +0x1fd0, 0x231a, 0x1ff4, 0x231a, 0x1ff4, 0x231a, 0x1ff4, 0x2114, 0x1e32, 0x2114, 0x1e32, +0x1e43, 0x1ba7, 0x1e43, 0x1ba7, 0x1c95, 0x1a42, 0x1c95, 0x1a42, 0x1a89, 0x187f, 0x1a89, +0x187f, 0x1947, 0x1786, 0x1947, 0x1786, 0x1947, 0x1786, 0x1800, 0x1685, 0x1800, 0x1685, +0x159e, 0x1468, 0x159e, 0x1468, 0x1340, 0x124b, 0x1340, 0x124b, 0x1179, 0x10c1, 0x1179, +0x10c1, 0x115a, 0x10db, 0x115a, 0x10db, 0xe8c, 0xe3f, 0xe8c, 0xe3f, 0xe8c, 0xe3f, +0xb73, 0xb53, 0xb73, 0xb53, 0xa71, 0xa79, 0xa71, 0xa79, 0x680, 0x6aa, 0x680, +0x6aa, 0x5c4, 0x60a, 0x5c4, 0x60a, 0x6c6, 0x723, 0x6c6, 0x723, 0x444, 0x4b4, +0x444, 0x4b4, 0x444, 0x4b4, 0x1fd, 0x27d, 0x1fd, 0x27d, 0x71, 0xfd, 0x71, +0xfd, 0x131, 0x1c7, 0x131, 0x1c7, 0xa7, 0x146, 0xa7, 0x146, 0xfef6, 0xff9e, +0xfef6, 0xff9e, 0xfef6, 0xff9e, 0xfd34, 0xfde4, 0xfd34, 0xfde4, 0xfd47, 0xfe01, 0xfd47, +0xfe01, 0xfccd, 0xfd93, 0xfccd, 0xfd93, 0xfbd3, 0xfca8, 0xfbd3, 0xfca8, 0xfd61, 0xfe47, +0xfd61, 0xfe47, 0xfb2c, 0xfc27, 0xfb2c, 0xfc27, 0xfb2c, 0xfc27, 0xfa55, 0xfb67, 0xfa55, +0xfb67, 0xfb31, 0xfc5f, 0xfb31, 0xfc5f, 0xf9e4, 0xfb30, 0xf9e4, 0xfb30, 0xf8f4, 0xfa61, +0xf8f4, 0xfa61, 0xf724, 0xf8b5, 0xf724, 0xf8b5, 0xf5ca, 0xf780, 0xf5ca, 0xf780, 0xf5ca, +0xf780, 0xf776, 0xf954, 0xf776, 0xf954, 0xf5fb, 0xf7ff, 0xf5fb, 0xf7ff, 0xf34e, 0xf578, +0xf34e, 0xf578, 0xf364, 0xf5b2, 0xf364, 0xf5b2, 0xf02c, 0xf29d, 0xf02c, 0xf29d, 0xf02c, +0xf29d, 0xeeac, 0xf13b, 0xeeac, 0xf13b, 0xee6c, 0xf115, 0xee6c, 0xf115, 0xec11, 0xeece, +0xec11, 0xeece, 0xea35, 0xed00, 0xea35, 0xed00, 0xe863, 0xeb36, 0xe863, 0xeb36, 0xe990, +0xec62, 0xe990, 0xec62, 0xe990, 0xec62, 0xe8ff, 0xebc9, 0xe8ff, 0xebc9, 0xe5f6, 0xe8af, +0xe5f6, 0xe8af, 0xe4de, 0xe77e, 0xe4de, 0xe77e, 0xe5e2, 0xe861, 0xe5e2, 0xe861, 0xe6b9, +0xe90f, 0xe6b9, 0xe90f, 0xe6d2, 0xe8f6, 0xe6d2, 0xe8f6, 0xe6d2, 0xe8f6, 0xe930, 0xeb1c, +0xe930, 0xeb1c, 0xea38, 0xebe6, 0xea38, 0xebe6, 0xedb7, 0xef20, 0xedb7, 0xef20, 0xf0fc, +0xf21a, 0xf0fc, 0xf21a, 0xf277, 0xf347, 0xf277, 0xf347, 0xf277, 0xf347, 0xf639, 0xf6b8, +0xf639, 0xf6b8, 0xf7c4, 0xf7ef, 0xf7c4, 0xf7ef, 0xf946, 0xf91c, 0xf946, 0xf91c, 0xfd1d, +0xfc9e, 0xfd1d, 0xfc9e, 0xfef5, 0xfe21, 0xfef5, 0xfe21, 0xfeee, 0xfdc7, 0xfeee, 0xfdc7, +0xfeee, 0xfdc7, 0xffc4, 0xfe4d, 0xffc4, 0xfe4d, 0x169, 0xffa6, 0x169, 0xffa6, 0x5ba, +0x3af, 0x5ba, 0x3af, 0x685, 0x435, 0x685, 0x435, 0x79d, 0x50f, 0x79d, 0x50f, +0x9a3, 0x6dc, 0x9a3, 0x6dc, 0x9a3, 0x6dc, 0xa15, 0x71c, 0xa15, 0x71c, 0xbc9, +0x8a3, 0xbc9, 0x8a3, 0xca8, 0x95d, 0xca8, 0x95d, 0xdaf, 0xa44, 0xdaf, 0xa44, +0xd1d, 0x999, 0xd1d, 0x999, 0xd1d, 0x999, 0xe9f, 0xb07, 0xe9f, 0xb07, 0x101b, +0xc77, 0x101b, 0xc77, 0xfea, 0xc3f, 0xfea, 0xc3f, 0xfff, 0xc53, 0xfff, 0xc53, +0x107e, 0xcd6, 0x107e, 0xcd6, 0x1061, 0xcc0, 0x1061, 0xcc0, 0x1061, 0xcc0, 0xfeb, +0xc57, 0xfeb, 0xc57, 0xf1b, 0xb99, 0xf1b, 0xb99, 0xfb6, 0xc48, 0xfb6, 0xc48, +0xfcd, 0xc77, 0xfcd, 0xc77, 0xf79, 0xc3d, 0xf79, 0xc3d, 0x1205, 0xee5, 0x1205, +0xee5, 0x1205, 0xee5, 0x117a, 0xe7a, 0x117a, 0xe7a, 0xff5, 0xd14, 0xff5, 0xd14, +0xeed, 0xc2f, 0xeed, 0xc2f, 0x1046, 0xdaa, 0x1046, 0xdaa, 0xf66, 0xced, 0xf66, +0xced, 0xf66, 0xced, 0xf32, 0xcdd, 0xf32, 0xcdd, 0xe88, 0xc57, 0xe88, 0xc57, +0xc62, 0xa55, 0xc62, 0xa55, 0xe52, 0xc69, 0xe52, 0xc69, 0xe51, 0xc8b, 0xe51, +0xc8b, 0xff5, 0xe51, 0xff5, 0xe51, 0xff5, 0xe51, 0xf43, 0xdc2, 0xf43, 0xdc2, +0xe83, 0xd22, 0xe83, 0xd22, 0xf22, 0xde1, 0xf22, 0xde1, 0xf08, 0xde5, 0xf08, +0xde5, 0xe26, 0xd21, 0xe26, 0xd21, 0xe26, 0xd21, 0xbfd, 0xb13, 0xbfd, 0xb13, +0xc1c, 0xb4a, 0xc1c, 0xb4a, 0xb66, 0xaab, 0xb66, 0xaab, 0xddb, 0xd35, 0xddb, +0xd35, 0xe76, 0xde3, 0xe76, 0xde3, 0xb18, 0xa96, 0xb18, 0xa96, 0xb18, 0xa96, +0xd44, 0xcd0, 0xd44, 0xcd0, 0xd0f, 0xca5, 0xd0f, 0xca5, 0xbee, 0xb8c, 0xbee, +0xb8c, 0xc51, 0xbf5, 0xc51, 0xbf5, 0x96c, 0x911, 0x96c, 0x911, 0x89f, 0x843, +0x89f, 0x843, 0x89f, 0x843, 0x766, 0x706, 0x766, 0x706, 0x783, 0x71c, 0x783, +0x71c, 0x525, 0x4b4, 0x525, 0x4b4, 0x2c8, 0x24a, 0x2c8, 0x24a, 0x3d5, 0x347, +0x3d5, 0x347, 0x3d5, 0x347, 0x37b, 0x2da, 0x37b, 0x2da, 0x514, 0x45f, 0x514, +0x45f, 0x3cb, 0x2ff, 0x3cb, 0x2ff, 0x272, 0x18e, 0x272, 0x18e, 0x370, 0x273, +0x370, 0x273, 0x449, 0x332, 0x449, 0x332, 0x449, 0x332, 0x5de, 0x4ac, 0x5de, +0x4ac, 0x753, 0x607, 0x753, 0x607, 0xa1e, 0x8b8, 0xa1e, 0x8b8, 0xcc0, 0xb41, +0xcc0, 0xb41, 0xd90, 0xbf9, 0xd90, 0xbf9, 0x1048, 0xe9c, 0x1048, 0xe9c, 0x1048, +0xe9c, 0x1193, 0xfd4, 0x1193, 0xfd4, 0x1247, 0x1077, 0x1247, 0x1077, 0x14da, 0x12fd, +0x14da, 0x12fd, 0x172e, 0x1546, 0x172e, 0x1546, 0x18a4, 0x16b6, 0x18a4, 0x16b6, 0x18a4, +0x16b6, 0x1781, 0x1590, 0x1781, 0x1590, 0x1812, 0x1623, 0x1812, 0x1623, 0x17ca, 0x15e0, +0x17ca, 0x15e0, 0x1739, 0x1559, 0x1739, 0x1559, 0x176e, 0x159b, 0x176e, 0x159b, 0x1615, +0x1453, 0x1615, 0x1453, 0x1615, 0x1453, 0x1555, 0x13a8, 0x1555, 0x13a8, 0x14f8, 0x1363, +0x14f8, 0x1363, 0x1460, 0x12e5, 0x1460, 0x12e5, 0x138c, 0x122e, 0x138c, 0x122e, 0x10d2, +0xf93, 0x10d2, 0xf93, 0xf95, 0xe77, 0xf95, 0xe77, 0xf95, 0xe77, 0xe4b, 0xd4f, +0xe4b, 0xd4f, 0x9d6, 0x8fc, 0x9d6, 0x8fc, 0xa0d, 0x956, 0xa0d, 0x956, 0x83b, +0x7a6, 0x83b, 0x7a6, 0x5e1, 0x56e, 0x5e1, 0x56e, 0x5e1, 0x56e, 0x62f, 0x5dc, +0x62f, 0x5dc, 0x549, 0x515, 0x549, 0x515, 0x499, 0x482, 0x499, 0x482, 0x3c1, +0x3c5, 0x3c1, 0x3c5, 0x448, 0x465, 0x448, 0x465, 0x2d8, 0x30c, 0x2d8, 0x30c, +0x2d8, 0x30c, 0x2b6, 0x2fe, 0x2b6, 0x2fe, 0x2a5, 0x2ff, 0x2a5, 0x2ff, 0xffeb, +0x53, 0xffeb, 0x53, 0xfd77, 0xfdec, 0xfd77, 0xfdec, 0xfc81, 0xfd01, 0xfc81, 0xfd01, +0xfdd3, 0xfe5c, 0xfdd3, 0xfe5c, 0xfdd3, 0xfe5c, 0xfdd5, 0xfe65, 0xfdd5, 0xfe65, 0xfbfd, +0xfc93, 0xfbfd, 0xfc93, 0xfb0b, 0xfba6, 0xfb0b, 0xfba6, 0xf9dd, 0xfa7c, 0xf9dd, 0xfa7c, +0xf928, 0xf9cb, 0xf928, 0xf9cb, 0xf928, 0xf9cb, 0xf99d, 0xfa44, 0xf99d, 0xfa44, 0xf7be, +0xf869, 0xf7be, 0xf869, 0xf62f, 0xf6df, 0xf62f, 0xf6df, 0xf5e0, 0xf697, 0xf5e0, 0xf697, +0xf5f5, 0xf6b3, 0xf5f5, 0xf6b3, 0xf5ab, 0xf672, 0xf5ab, 0xf672, 0xf5ab, 0xf672, 0xf38b, +0xf45c, 0xf38b, 0xf45c, 0xf446, 0xf524, 0xf446, 0xf524, 0xf49f, 0xf58c, 0xf49f, 0xf58c, +0xf206, 0xf303, 0xf206, 0xf303, 0xf23a, 0xf34b, 0xf23a, 0xf34b, 0xf15f, 0xf285, 0xf15f, +0xf285, 0xf15f, 0xf285, 0xefdd, 0xf11b, 0xefdd, 0xf11b, 0xf15e, 0xf2b6, 0xf15e, 0xf2b6, +0xf20d, 0xf382, 0xf20d, 0xf382, 0xf13b, 0xf2cd, 0xf13b, 0xf2cd, 0xf0c6, 0xf276, 0xf0c6, +0xf276, 0xf0c6, 0xf276, 0xf14b, 0xf31b, 0xf14b, 0xf31b, 0xf004, 0xf1f5, 0xf004, 0xf1f5, +0xef41, 0xf153, 0xef41, 0xf153, 0xef06, 0xf138, 0xef06, 0xf138, 0xec61, 0xeeb4, 0xec61, +0xeeb4, 0xeb76, 0xede7, 0xeb76, 0xede7, 0xeb76, 0xede7, 0xeaf6, 0xed84, 0xeaf6, 0xed84, +0xea1b, 0xecc4, 0xea1b, 0xecc4, 0xea02, 0xecc3, 0xea02, 0xecc3, 0xe849, 0xeb1f, 0xe849, +0xeb1f, 0xe86f, 0xeb56, 0xe86f, 0xeb56, 0xe84e, 0xeb42, 0xe84e, 0xeb42, 0xe84e, 0xeb42, +0xe57d, 0xe878, 0xe57d, 0xe878, 0xe563, 0xe862, 0xe563, 0xe862, 0xe6dc, 0xe9d9, 0xe6dc, +0xe9d9, 0xe7b3, 0xeaaa, 0xe7b3, 0xeaaa, 0xe7cd, 0xeab9, 0xe7cd, 0xeab9, 0xe7cd, 0xeab9, +0xe9f2, 0xeccd, 0xe9f2, 0xeccd, 0xeac0, 0xed86, 0xeac0, 0xed86, 0xe9f9, 0xeca4, 0xe9f9, +0xeca4, 0xecfe, 0xef8b, 0xecfe, 0xef8b, 0xed8f, 0xeffa, 0xed8f, 0xeffa, 0xee1e, 0xf065, +0xee1e, 0xf065, 0xee1e, 0xf065, 0xef2b, 0xf14b, 0xef2b, 0xf14b, 0xee09, 0xf000, 0xee09, +0xf000, 0xef8e, 0xf15b, 0xef8e, 0xf15b, 0xf024, 0xf1c9, 0xf024, 0xf1c9, 0xef79, 0xf0f6, +0xef79, 0xf0f6, 0xf062, 0xf1ba, 0xf062, 0xf1ba, 0xf062, 0xf1ba, 0xf16f, 0xf2a5, 0xf16f, +0xf2a5, 0xf1a8, 0xf2c0, 0xf1a8, 0xf2c0, 0xf18f, 0xf28d, 0xf18f, 0xf28d, 0xf292, 0xf37c, +0xf292, 0xf37c, 0xf24d, 0xf329, 0xf24d, 0xf329, 0xf24d, 0xf329, 0xf10d, 0xf1e0, 0xf10d, +0xf1e0, 0xf0d3, 0xf1a5, 0xf0d3, 0xf1a5, 0xef1a, 0xeff1, 0xef1a, 0xeff1, 0xedb1, 0xee94, +0xedb1, 0xee94, 0xec86, 0xed7c, 0xec86, 0xed7c, 0xec15, 0xed24, 0xec15, 0xed24, 0xec15, +0xed24, 0xebf3, 0xed21, 0xebf3, 0xed21, 0xe9ea, 0xeb3c, 0xe9ea, 0xeb3c, 0xe9d5, 0xeb50, +0xe9d5, 0xeb50, 0xe872, 0xea1a, 0xe872, 0xea1a, 0xe691, 0xe868, 0xe691, 0xe868, 0xe5bc, +0xe7c3, 0xe5bc, 0xe7c3, 0xe5bc, 0xe7c3, 0xe5a3, 0xe7dc, 0xe5a3, 0xe7dc, 0xe553, 0xe7bd, +0xe553, 0xe7bd, 0xe1e8, 0xe482, 0xe1e8, 0xe482, 0xe0ea, 0xe3b1, 0xe0ea, 0xe3b1, 0xe119, +0xe40a, 0xe119, 0xe40a, 0xe119, 0xe40a, 0xe017, 0xe32e, 0xe017, 0xe32e, 0xdf31, 0xe269, +0xdf31, 0xe269, 0xdf05, 0xe258, 0xdf05, 0xe258, 0xdd92, 0xe0f9, 0xdd92, 0xe0f9, 0xde09, +0xe17f, 0xde09, 0xe17f, 0xe06c, 0xe3e9, 0xe06c, 0xe3e9, 0xe06c, 0xe3e9, 0xe0a6, 0xe423, +0xe0a6, 0xe423, 0xe2e4, 0xe659, 0xe2e4, 0xe659, 0xe269, 0xe5d1, 0xe269, 0xe5d1, 0xe15a, +0xe4ad, 0xe15a, 0xe4ad, 0xe1ea, 0xe522, 0xe1ea, 0xe522, 0xe1ea, 0xe522, 0xe183, 0xe49a, +0xe183, 0xe49a, 0xe393, 0xe684, 0xe393, 0xe684, 0xe59d, 0xe863, 0xe59d, 0xe863, 0xe7ce, +0xea64, 0xe7ce, 0xea64, 0xe9e5, 0xec49, 0xe9e5, 0xec49, 0xebf6, 0xee23, 0xebf6, 0xee23, +0xebf6, 0xee23, 0xefee, 0xf1e2, 0xefee, 0xf1e2, 0xf277, 0xf430, 0xf277, 0xf430, 0xf436, +0xf5b3, 0xf436, 0xf5b3, 0xf690, 0xf7cf, 0xf690, 0xf7cf, 0xf8d2, 0xf9d4, 0xf8d2, 0xf9d4, +0xfb16, 0xfbd9, 0xfb16, 0xfbd9, 0xfb16, 0xfbd9, 0xfc62, 0xfce7, 0xfc62, 0xfce7, 0xfe8f, +0xfed6, 0xfe8f, 0xfed6, 0xff83, 0xff8c, 0xff83, 0xff8c, 0x5b, 0x26, 0x5b, 0x26, +0x267, 0x1f5, 0x267, 0x1f5, 0x267, 0x1f5, 0x2a5, 0x1f5, 0x2a5, 0x1f5, 0x2bb, +0x1ce, 0x2bb, 0x1ce, 0x218, 0xef, 0x218, 0xef, 0x3fe, 0x298, 0x3fe, 0x298, +0x678, 0x4d5, 0x678, 0x4d5, 0x71b, 0x53d, 0x71b, 0x53d, 0x71b, 0x53d, 0x9c2, +0x7a8, 0x9c2, 0x7a8, 0xbc4, 0x96e, 0xbc4, 0x96e, 0xd5a, 0xac9, 0xd5a, 0xac9, +0x1166, 0xe9a, 0x1166, 0xe9a, 0x162b, 0x1325, 0x162b, 0x1325, 0x1884, 0x1546, 0x1884, +0x1546, 0x1884, 0x1546, 0x1a1b, 0x16a6, 0x1a1b, 0x16a6, 0x1bee, 0x1844, 0x1bee, 0x1844, +0x1e45, 0x1a69, 0x1e45, 0x1a69, 0x20dd, 0x1cd1, 0x20dd, 0x1cd1, 0x2375, 0x1f3e, 0x2375, +0x1f3e, 0x2375, 0x1f3e, 0x25ea, 0x218a, 0x25ea, 0x218a, 0x26c1, 0x223f, 0x26c1, 0x223f, +0x2816, 0x2376, 0x2816, 0x2376, 0x29c4, 0x250b, 0x29c4, 0x250b, 0x2bd5, 0x270a, 0x2bd5, +0x270a, 0x2c03, 0x272c, 0x2c03, 0x272c, 0x2c03, 0x272c, 0x2c1b, 0x2740, 0x2c1b, 0x2740, +0x2cde, 0x2805, 0x2cde, 0x2805, 0x2ae5, 0x2614, 0x2ae5, 0x2614, 0x2a1a, 0x2559, 0x2a1a, +0x2559, 0x29f9, 0x254f, 0x29f9, 0x254f, 0x2994, 0x2508, 0x2994, 0x2508, 0x2994, 0x2508, +0x288f, 0x2426, 0x288f, 0x2426, 0x285c, 0x241e, 0x285c, 0x241e, 0x2748, 0x233a, 0x2748, +0x233a, 0x22d2, 0x1ef7, 0x22d2, 0x1ef7, 0x20a1, 0x1d00, 0x20a1, 0x1d00, 0x20a1, 0x1d00, +0x1eac, 0x1b47, 0x1eac, 0x1b47, 0x1c58, 0x1931, 0x1c58, 0x1931, 0x1b7c, 0x1896, 0x1b7c, +0x1896, 0x1955, 0x16b0, 0x1955, 0x16b0, 0x1801, 0x159e, 0x1801, 0x159e, 0x16b7, 0x1495, +0x16b7, 0x1495, 0x16b7, 0x1495, 0x153e, 0x135c, 0x153e, 0x135c, 0x14cf, 0x132c, 0x14cf, +0x132c, 0x111b, 0xfb4, 0x111b, 0xfb4, 0xe14, 0xce6, 0xe14, 0xce6, 0xcb0, 0xbb8, +0xcb0, 0xbb8, 0x9fd, 0x936, 0x9fd, 0x936, 0x9fd, 0x936, 0x852, 0x7bb, 0x852, +0x7bb, 0x5f3, 0x586, 0x5f3, 0x586, 0x480, 0x43b, 0x480, 0x43b, 0x246, 0x224, +0x246, 0x224, 0xfeea, 0xfee8, 0xfeea, 0xfee8, 0xfeea, 0xfee8, 0xfe2f, 0xfe4a, 0xfe2f, +0xfe4a, 0xfcbb, 0xfcf1, 0xfcbb, 0xfcf1, 0xfbf9, 0xfc46, 0xfbf9, 0xfc46, 0xfccf, 0xfd32, +0xfccf, 0xfd32, 0xfa51, 0xfac9, 0xfa51, 0xfac9, 0xf7bb, 0xf846, 0xf7bb, 0xf846, 0xf7bb, +0xf846, 0xf702, 0xf7a1, 0xf702, 0xf7a1, 0xf654, 0xf706, 0xf654, 0xf706, 0xf72f, 0xf7f5, +0xf72f, 0xf7f5, 0xf5c8, 0xf6a2, 0xf5c8, 0xf6a2, 0xf4ee, 0xf5dd, 0xf4ee, 0xf5dd, 0xf5bb, +0xf6c1, 0xf5bb, 0xf6c1, 0xf5bb, 0xf6c1, 0xf532, 0xf650, 0xf532, 0xf650, 0xf498, 0xf5d0, +0xf498, 0xf5d0, 0xf3e0, 0xf532, 0xf3e0, 0xf532, 0xf486, 0xf5f3, 0xf486, 0xf5f3, 0xf290, +0xf41a, 0xf290, 0xf41a, 0xf290, 0xf41a, 0xf2dc, 0xf483, 0xf2dc, 0xf483, 0xf47f, 0xf644, +0xf47f, 0xf644, 0xf27d, 0xf45f, 0xf27d, 0xf45f, 0xf260, 0xf45d, 0xf260, 0xf45d, 0xf08f, +0xf2a8, 0xf08f, 0xf2a8, 0xef67, 0xf198, 0xef67, 0xf198, 0xef67, 0xf198, 0xeed1, 0xf119, +0xeed1, 0xf119, 0xeb36, 0xed91, 0xeb36, 0xed91, 0xe9e8, 0xec52, 0xe9e8, 0xec52, 0xea91, +0xed05, 0xea91, 0xed05, 0xea76, 0xecf1, 0xea76, 0xecf1, 0xe98d, 0xec09, 0xe98d, 0xec09, +0xe98d, 0xec09, 0xe7a2, 0xea18, 0xe7a2, 0xea18, 0xe66a, 0xe8d5, 0xe66a, 0xe8d5, 0xe65a, +0xe8b3, 0xe65a, 0xe8b3, 0xe6e6, 0xe927, 0xe6e6, 0xe927, 0xe848, 0xea6b, 0xe848, 0xea6b, +0xe848, 0xea6b, 0xe985, 0xeb83, 0xe985, 0xeb83, 0xeb3f, 0xed12, 0xeb3f, 0xed12, 0xecdd, +0xee7f, 0xecdd, 0xee7f, 0xf099, 0xf205, 0xf099, 0xf205, 0xf4d1, 0xf602, 0xf4d1, 0xf602, +0xf69f, 0xf792, 0xf69f, 0xf792, 0xf69f, 0xf792, 0xf8a0, 0xf950, 0xf8a0, 0xf950, 0xf98a, +0xf9f5, 0xf98a, 0xf9f5, 0xfaee, 0xfb13, 0xfaee, 0xfb13, 0xfd5f, 0xfd3c, 0xfd5f, 0xfd3c, +0xff4e, 0xfee3, 0xff4e, 0xfee3, 0x114, 0x63, 0x114, 0x63, 0x114, 0x63, 0x435, +0x340, 0x435, 0x340, 0x78c, 0x655, 0x78c, 0x655, 0x940, 0x7cb, 0x940, 0x7cb, +0x9ba, 0x80d, 0x9ba, 0x80d, 0x9a1, 0x7c0, 0x9a1, 0x7c0, 0x9a1, 0x7c0, 0xae8, +0x8d9, 0xae8, 0x8d9, 0xbad, 0x977, 0xbad, 0x977, 0xccc, 0xa76, 0xccc, 0xa76, +0xe13, 0xba4, 0xe13, 0xba4, 0xe89, 0xc09, 0xe89, 0xc09, 0xf39, 0xcaf, 0xf39, +0xcaf, 0xf39, 0xcaf, 0x1074, 0xde7, 0x1074, 0xde7, 0x1182, 0xefb, 0x1182, 0xefb, +0x118e, 0xf14, 0x118e, 0xf14, 0x11da, 0xf73, 0x11da, 0xf73, 0xfc9, 0xd7b, 0xfc9, +0xd7b, 0x1074, 0xe46, 0x1074, 0xe46, 0x1074, 0xe46, 0x117e, 0xf74, 0x117e, 0xf74, +0xf7e, 0xd9c, 0xf7e, 0xd9c, 0x10f8, 0xf42, 0x10f8, 0xf42, 0xf9f, 0xe17, 0xf9f, +0xe17, 0xe5d, 0xd06, 0xe5d, 0xd06, 0xe5d, 0xd06, 0xf28, 0xe02, 0xf28, 0xe02, +0xd60, 0xc6b, 0xd60, 0xc6b, 0xeae, 0xdea, 0xeae, 0xdea, 0xeb1, 0xe1b, 0xeb1, +0xe1b, 0xd20, 0xcb7, 0xd20, 0xcb7, 0xd77, 0xd39, 0xd77, 0xd39, 0xd77, 0xd39, +0xbfa, 0xbe3, 0xbfa, 0xbe3, 0xcb2, 0xcbe, 0xcb2, 0xcbe, 0xdd8, 0xe04, 0xdd8, +0xe04, 0xea1, 0xee8, 0xea1, 0xee8, 0xf15, 0xf73, 0xf15, 0xf73, 0xf15, 0xf73, +0xd87, 0xdf6, 0xd87, 0xdf6, 0xdba, 0xe37, 0xdba, 0xe37, 0xc39, 0xcc0, 0xc39, +0xcc0, 0xc2d, 0xcb8, 0xc2d, 0xcb8, 0xb7c, 0xc07, 0xb7c, 0xc07, 0x995, 0xa1c, +0x995, 0xa1c, 0x995, 0xa1c, 0xb3a, 0xbbb, 0xb3a, 0xbbb, 0xb05, 0xb7b, 0xb05, +0xb7b, 0xc12, 0xc7b, 0xc12, 0xc7b, 0xc41, 0xc9a, 0xc41, 0xc9a, 0xb3b, 0xb81, +0xb3b, 0xb81, 0xb61, 0xb93, 0xb61, 0xb93, 0xb61, 0xb93, 0xa19, 0xa34, 0xa19, +0xa34, 0xadb, 0xadf, 0xadb, 0xadf, 0xa6c, 0xa57, 0xa6c, 0xa57, 0x7a6, 0x778, +0x7a6, 0x778, 0x6ff, 0x6b6, 0x6ff, 0x6b6, 0x6ff, 0x6b6, 0x6e4, 0x681, 0x6e4, +0x681, 0x6c6, 0x648, 0x6c6, 0x648, 0x55a, 0x4c0, 0x55a, 0x4c0, 0x1c5, 0x110, +0x1c5, 0x110, 0x1b5, 0xe5, 0x1b5, 0xe5, 0x247, 0x15b, 0x247, 0x15b, 0x247, +0x15b, 0x1aa, 0xa3, 0x1aa, 0xa3, 0x210, 0xee, 0x210, 0xee, 0x12c, 0xffef, +0x12c, 0xffef, 0x171, 0x19, 0x171, 0x19, 0x2d2, 0x15f, 0x2d2, 0x15f, 0x57e, +0x3f2, 0x57e, 0x3f2, 0x57e, 0x3f2, 0x703, 0x55d, 0x703, 0x55d, 0x779, 0x5bb, +0x779, 0x5bb, 0xa1d, 0x846, 0xa1d, 0x846, 0xc1b, 0xa2d, 0xc1b, 0xa2d, 0xf26, +0xd22, 0xf26, 0xd22, 0xf26, 0xd22, 0x1190, 0xf78, 0x1190, 0xf78, 0x11ea, 0xfbe, +0x11ea, 0xfbe, 0x135f, 0x1121, 0x135f, 0x1121, 0x1558, 0x130a, 0x1558, 0x130a, 0x16a4, +0x1448, 0x16a4, 0x1448, 0x169d, 0x1435, 0x169d, 0x1435, 0x169d, 0x1435, 0x1608, 0x1397, +0x1608, 0x1397, 0x15e7, 0x136e, 0x15e7, 0x136e, 0x16b3, 0x1437, 0x16b3, 0x1437, 0x1727, +0x14a8, 0x1727, 0x14a8, 0x1510, 0x1292, 0x1510, 0x1292, 0x13fa, 0x1180, 0x13fa, 0x1180, +0x13fa, 0x1180, 0x141b, 0x11a7, 0x141b, 0x11a7, 0x13a7, 0x113d, 0x13a7, 0x113d, 0x1441, +0x11e3, 0x1441, 0x11e3, 0x1173, 0xf22, 0x1173, 0xf22, 0xed6, 0xc96, 0xed6, 0xc96, +0xed6, 0xc96, 0xe0c, 0xbdf, 0xe0c, 0xbdf, 0xa73, 0x85b, 0xa73, 0x85b, 0xa13, +0x810, 0xa13, 0x810, 0x992, 0x7a8, 0x992, 0x7a8, 0x5c8, 0x3f6, 0x5c8, 0x3f6, +0x506, 0x34f, 0x506, 0x34f, 0x506, 0x34f, 0x65b, 0x4bf, 0x65b, 0x4bf, 0x6e4, +0x563, 0x6e4, 0x563, 0x65e, 0x4f8, 0x65e, 0x4f8, 0x56d, 0x423, 0x56d, 0x423, +0x3a9, 0x27b, 0x3a9, 0x27b, 0x1a7, 0x94, 0x1a7, 0x94, 0x1a7, 0x94, 0x19c, +0xa4, 0x19c, 0xa4, 0x11f, 0x41, 0x11f, 0x41, 0xff65, 0xfea1, 0xff65, 0xfea1, +0xfe4c, 0xfda1, 0xfe4c, 0xfda1, 0xfe2c, 0xfd99, 0xfe2c, 0xfd99, 0xfe2c, 0xfd99, 0xff4a, +0xfece, 0xff4a, 0xfece, 0xfd82, 0xfd1e, 0xfd82, 0xfd1e, 0xfb4c, 0xfaff, 0xfb4c, 0xfaff, +0xfb0b, 0xfad4, 0xfb0b, 0xfad4, 0xf93b, 0xf91a, 0xf93b, 0xf91a, 0xf8ba, 0xf8b0, 0xf8ba, +0xf8b0, 0xf8ba, 0xf8b0, 0xf7d7, 0xf7e4, 0xf7d7, 0xf7e4, 0xf5f1, 0xf615, 0xf5f1, 0xf615, +0xf548, 0xf584, 0xf548, 0xf584, 0xf539, 0xf58f, 0xf539, 0xf58f, 0xf5a3, 0xf613, 0xf5a3, +0xf613, 0xf4bd, 0xf549, 0xf4bd, 0xf549, 0xf4bd, 0xf549, 0xf3ce, 0xf478, 0xf3ce, 0xf478, +0xf31a, 0xf3e3, 0xf31a, 0xf3e3, 0xf1df, 0xf2c9, 0xf1df, 0xf2c9, 0xf161, 0xf26d, 0xf161, +0xf26d, 0xf0de, 0xf210, 0xf0de, 0xf210, 0xf0de, 0xf210, 0xf006, 0xf15d, 0xf006, 0xf15d, +0xf068, 0xf1e7, 0xf068, 0xf1e7, 0xf19b, 0xf342, 0xf19b, 0xf342, 0xf1a5, 0xf376, 0xf1a5, +0xf376, 0xf0d7, 0xf2d3, 0xf0d7, 0xf2d3, 0xf068, 0xf28e, 0xf068, 0xf28e, 0xf068, 0xf28e, +0xf0d3, 0xf324, 0xf0d3, 0xf324, 0xf0d9, 0xf354, 0xf0d9, 0xf354, 0xef4c, 0xf1f0, 0xef4c, +0xf1f0, 0xed8f, 0xf05a, 0xed8f, 0xf05a, 0xecc3, 0xefb3, 0xecc3, 0xefb3, 0xeca1, 0xefb3, +0xeca1, 0xefb3, 0xeca1, 0xefb3, 0xec17, 0xef48, 0xec17, 0xef48, 0xeb66, 0xeeb3, 0xeb66, +0xeeb3, 0xeaf3, 0xee57, 0xeaf3, 0xee57, 0xe972, 0xece9, 0xe972, 0xece9, 0xe966, 0xecec, +0xe966, 0xecec, 0xe966, 0xecec, 0xe9d9, 0xed68, 0xe9d9, 0xed68, 0xe91a, 0xecad, 0xe91a, +0xecad, 0xea22, 0xedb5, 0xea22, 0xedb5, 0xea83, 0xee10, 0xea83, 0xee10, 0xebe3, 0xef65, +0xebe3, 0xef65, 0xed73, 0xf0e5, 0xed73, 0xf0e5, 0xed73, 0xf0e5, 0xecb4, 0xf012, 0xecb4, +0xf012, 0xedd8, 0xf11e, 0xedd8, 0xf11e, 0xee93, 0xf1be, 0xee93, 0xf1be, 0xeee2, 0xf1ee, +0xeee2, 0xf1ee, 0xef6e, 0xf259, 0xef6e, 0xf259, 0xf03c, 0xf306, 0xf03c, 0xf306, 0xf03c, +0xf306, 0xf0f2, 0xf399, 0xf0f2, 0xf399, 0xf095, 0xf319, 0xf095, 0xf319, 0xf2ec, 0xf54e, +0xf2ec, 0xf54e, 0xf39b, 0xf5dc, 0xf39b, 0xf5dc, 0xf269, 0xf48c, 0xf269, 0xf48c, 0xf269, +0xf48c, 0xf23f, 0xf447, 0xf23f, 0xf447, 0xf1fa, 0xf3e9, 0xf1fa, 0xf3e9, 0xf336, 0xf511, +0xf336, 0xf511, 0xf2a9, 0xf474, 0xf2a9, 0xf474, 0xf33a, 0xf4fa, 0xf33a, 0xf4fa, 0xf3d1, +0xf58c, 0xf3d1, 0xf58c, 0xf3d1, 0xf58c, 0xf13d, 0xf2f6, 0xf13d, 0xf2f6, 0xf183, 0xf340, +0xf183, 0xf340, 0xf15c, 0xf322, 0xf15c, 0xf322, 0xefaf, 0xf182, 0xefaf, 0xf182, 0xed56, +0xef3b, 0xed56, 0xef3b, 0xebc6, 0xedc1, 0xebc6, 0xedc1, 0xebc6, 0xedc1, 0xed16, 0xef2a, +0xed16, 0xef2a, 0xec38, 0xee66, 0xec38, 0xee66, 0xebda, 0xee26, 0xebda, 0xee26, 0xeb67, +0xedd2, 0xeb67, 0xedd2, 0xe8f6, 0xeb80, 0xe8f6, 0xeb80, 0xe8f6, 0xeb80, 0xe7ff, 0xeaa8, +0xe7ff, 0xeaa8, 0xe74c, 0xea12, 0xe74c, 0xea12, 0xe623, 0xe905, 0xe623, 0xe905, 0xe39c, +0xe696, 0xe39c, 0xe696, 0xe202, 0xe512, 0xe202, 0xe512, 0xe20f, 0xe530, 0xe20f, 0xe530, +0xe20f, 0xe530, 0xe195, 0xe4c2, 0xe195, 0xe4c2, 0xe15f, 0xe494, 0xe15f, 0xe494, 0xe0fd, +0xe434, 0xe0fd, 0xe434, 0xe1df, 0xe513, 0xe1df, 0xe513, 0xe3ae, 0xe6d9, 0xe3ae, 0xe6d9, +0xe3ae, 0xe6d9, 0xe416, 0xe732, 0xe416, 0xe732, 0xe405, 0xe70c, 0xe405, 0xe70c, 0xe3b1, +0xe69d, 0xe3b1, 0xe69d, 0xe3d2, 0xe69e, 0xe3d2, 0xe69e, 0xe48c, 0xe732, 0xe48c, 0xe732, +0xe534, 0xe7b0, 0xe534, 0xe7b0, 0xe534, 0xe7b0, 0xe64a, 0xe897, 0xe64a, 0xe897, 0xe69b, +0xe8b5, 0xe69b, 0xe8b5, 0xe845, 0xea29, 0xe845, 0xea29, 0xeb1b, 0xecc6, 0xeb1b, 0xecc6, +0xed1b, 0xee8c, 0xed1b, 0xee8c, 0xefa2, 0xf0d6, 0xefa2, 0xf0d6, 0xefa2, 0xf0d6, 0xf0a7, +0xf19d, 0xf0a7, 0xf19d, 0xf2aa, 0xf362, 0xf2aa, 0xf362, 0xf57b, 0xf5f5, 0xf57b, 0xf5f5, +0xf68f, 0xf6cb, 0xf68f, 0xf6cb, 0xf8c3, 0xf8c3, 0xf8c3, 0xf8c3, 0xf8c3, 0xf8c3, 0xfa9c, +0xfa61, 0xfa9c, 0xfa61, 0xfc3e, 0xfbca, 0xfc3e, 0xfbca, 0xfdd0, 0xfd24, 0xfdd0, 0xfd24, +0xfea4, 0xfdc3, 0xfea4, 0xfdc3, 0xfefd, 0xfde8, 0xfefd, 0xfde8, 0xff03, 0xfdbe, 0xff03, +0xfdbe, 0xff03, 0xfdbe, 0x69, 0xfef5, 0x69, 0xfef5, 0xd9, 0xff3a, 0xd9, 0xff3a, +0xfc, 0xff32, 0xfc, 0xff32, 0x1ed, 0xfffc, 0x1ed, 0xfffc, 0x285, 0x6e, 0x285, +0x6e, 0x4fd, 0x2c3, 0x4fd, 0x2c3, 0x4fd, 0x2c3, 0x84e, 0x5f2, 0x84e, 0x5f2, +0xb62, 0x8e5, 0xb62, 0x8e5, 0xe12, 0xb75, 0xe12, 0xb75, 0xf9a, 0xce0, 0xf9a, +0xce0, 0x123e, 0xf68, 0x123e, 0xf68, 0x123e, 0xf68, 0x14e8, 0x11f6, 0x14e8, 0x11f6, +0x15a8, 0x129c, 0x15a8, 0x129c, 0x16f7, 0x13d2, 0x16f7, 0x13d2, 0x1970, 0x1633, 0x1970, +0x1633, 0x1b52, 0x17ff, 0x1b52, 0x17ff, 0x1cdf, 0x1977, 0x1cdf, 0x1977, 0x1cdf, 0x1977, +0x1f3f, 0x1bc5, 0x1f3f, 0x1bc5, 0x20ce, 0x1d43, 0x20ce, 0x1d43, 0x20c6, 0x1d2e, 0x20c6, +0x1d2e, 0x2275, 0x1ed1, 0x2275, 0x1ed1, 0x23f6, 0x204a, 0x23f6, 0x204a, 0x2229, 0x1e78, +0x2229, 0x1e78, 0x2229, 0x1e78, 0x21d8, 0x1e27, 0x21d8, 0x1e27, 0x22a1, 0x1ef3, 0x22a1, +0x1ef3, 0x22ca, 0x1f24, 0x22ca, 0x1f24, 0x245b, 0x20c2, 0x245b, 0x20c2, 0x23fa, 0x2072, +0x23fa, 0x2072, 0x23fa, 0x2072, 0x22e2, 0x1f70, 0x22e2, 0x1f70, 0x2222, 0x1ecb, 0x2222, +0x1ecb, 0x2093, 0x1d5c, 0x2093, 0x1d5c, 0x1fd0, 0x1cbe, 0x1fd0, 0x1cbe, 0x1d29, 0x1a40, +0x1d29, 0x1a40, 0x1a2d, 0x1772, 0x1a2d, 0x1772, 0x1a2d, 0x1772, 0x1988, 0x16fe, 0x1988, +0x16fe, 0x194b, 0x16f6, 0x194b, 0x16f6, 0x18a9, 0x168c, 0x18a9, 0x168c, 0x17c2, 0x15e0, +0x17c2, 0x15e0, 0x1600, 0x145a, 0x1600, 0x145a, 0x1395, 0x122c, 0x1395, 0x122c, 0x1395, +0x122c, 0x1260, 0x1134, 0x1260, 0x1134, 0x112f, 0x1040, 0x112f, 0x1040, 0xf3f, 0xe8d, +0xf3f, 0xe8d, 0xd85, 0xd0d, 0xd85, 0xd0d, 0xc14, 0xbd4, 0xc14, 0xbd4, 0xc14, +0xbd4, 0xacf, 0xac5, 0xacf, 0xac5, 0x993, 0x9bb, 0x993, 0x9bb, 0x829, 0x880, +0x829, 0x880, 0x5f0, 0x671, 0x5f0, 0x671, 0x436, 0x4de, 0x436, 0x4de, 0x2d7, +0x3a1, 0x2d7, 0x3a1, 0x2d7, 0x3a1, 0x1bc, 0x2a4, 0x1bc, 0x2a4, 0x148, 0x249, +0x148, 0x249, 0x58, 0x16f, 0x58, 0x16f, 0xff7e, 0xa6, 0xff7e, 0xa6, 0xfebf, +0xfff5, 0xfebf, 0xfff5, 0xfe14, 0xff55, 0xfe14, 0xff55, 0xfe14, 0xff55, 0xfc84, 0xfdce, +0xfc84, 0xfdce, 0xfa98, 0xfbe7, 0xfa98, 0xfbe7, 0xfa71, 0xfbc5, 0xfa71, 0xfbc5, 0xf9ef, +0xfb46, 0xf9ef, 0xfb46, 0xf973, 0xfacd, 0xf973, 0xfacd, 0xf973, 0xfacd, 0xf9ad, 0xfb0a, +0xf9ad, 0xfb0a, 0xf944, 0xfaa4, 0xf944, 0xfaa4, 0xfa40, 0xfba3, 0xfa40, 0xfba3, 0xfa93, +0xfbfc, 0xfa93, 0xfbfc, 0xf97e, 0xfaec, 0xf97e, 0xfaec, 0xf970, 0xfae6, 0xf970, 0xfae6, +0xf970, 0xfae6, 0xf8ec, 0xfa6b, 0xf8ec, 0xfa6b, 0xf7f0, 0xf979, 0xf7f0, 0xf979, 0xf739, +0xf8ce, 0xf739, 0xf8ce, 0xf5e7, 0xf789, 0xf5e7, 0xf789, 0xf37a, 0xf52a, 0xf37a, 0xf52a, +0xf27c, 0xf439, 0xf27c, 0xf439, 0xf27c, 0xf439, 0xf1ed, 0xf3b8, 0xf1ed, 0xf3b8, 0xf0a7, +0xf27f, 0xf0a7, 0xf27f, 0xf037, 0xf21b, 0xf037, 0xf21b, 0xee2b, 0xf019, 0xee2b, 0xf019, +0xecd8, 0xeece, 0xecd8, 0xeece, 0xecd8, 0xeece, 0xec1d, 0xee18, 0xec1d, 0xee18, 0xebe7, +0xede3, 0xebe7, 0xede3, 0xed07, 0xef00, 0xed07, 0xef00, 0xebe3, 0xedd5, 0xebe3, 0xedd5, +0xec0d, 0xedf2, 0xec0d, 0xedf2, 0xed95, 0xef69, 0xed95, 0xef69, 0xed95, 0xef69, 0xef29, +0xf0e7, 0xef29, 0xf0e7, 0xf0bc, 0xf25e, 0xf0bc, 0xf25e, 0xf1d6, 0xf356, 0xf1d6, 0xf356, +0xf467, 0xf5c0, 0xf467, 0xf5c0, 0xf570, 0xf69d, 0xf570, 0xf69d, 0xf6f4, 0xf7f2, 0xf6f4, +0xf7f2, 0xf6f4, 0xf7f2, 0xf953, 0xfa1d, 0xf953, 0xfa1d, 0xfa80, 0xfb11, 0xfa80, 0xfb11, +0xfda4, 0xfdfb, 0xfda4, 0xfdfb, 0xff53, 0xff6e, 0xff53, 0xff6e, 0x50, 0x2d, 0x50, +0x2d, 0x50, 0x2d, 0x26b, 0x20a, 0x26b, 0x20a, 0x355, 0x2b8, 0x355, 0x2b8, +0x520, 0x448, 0x520, 0x448, 0x650, 0x53f, 0x650, 0x53f, 0x81d, 0x6d7, 0x81d, +0x6d7, 0x95d, 0x7e6, 0x95d, 0x7e6, 0x95d, 0x7e6, 0x809, 0x666, 0x809, 0x666, +0x910, 0x747, 0x910, 0x747, 0x9df, 0x7f6, 0x9df, 0x7f6, 0x97e, 0x77d, 0x97e, +0x77d, 0xa1a, 0x806, 0xa1a, 0x806, 0xa20, 0x802, 0xa20, 0x802, 0xa20, 0x802, +0x970, 0x74f, 0x970, 0x74f, 0xa20, 0x803, 0xa20, 0x803, 0xc1a, 0xa09, 0xc1a, +0xa09, 0xb37, 0x938, 0xb37, 0x938, 0xa06, 0x820, 0xa06, 0x820, 0xa06, 0x820, +0xa69, 0x8a2, 0xa69, 0x8a2, 0xa3f, 0x89c, 0xa3f, 0x89c, 0xa6e, 0x8f4, 0xa6e, +0x8f4, 0x92a, 0x7dc, 0x92a, 0x7dc, 0x829, 0x70a, 0x829, 0x70a, 0x91c, 0x82e, +0x91c, 0x82e, 0x91c, 0x82e, 0x8b9, 0x7fd, 0x8b9, 0x7fd, 0x8a7, 0x81d, 0x8a7, +0x81d, 0x8d5, 0x87c, 0x8d5, 0x87c, 0x7a4, 0x77b, 0x7a4, 0x77b, 0x7d9, 0x7dc, +0x7d9, 0x7dc, 0x7d9, 0x7dc, 0x8ef, 0x91c, 0x8ef, 0x91c, 0x96a, 0x9bd, 0x96a, +0x9bd, 0xa4c, 0xac1, 0xa4c, 0xac1, 0xa8e, 0xb20, 0xa8e, 0xb20, 0x93d, 0x9e7, +0x93d, 0x9e7, 0x9f3, 0xaae, 0x9f3, 0xaae, 0x9f3, 0xaae, 0xa8f, 0xb57, 0xa8f, +0xb57, 0x894, 0x962, 0x894, 0x962, 0x88e, 0x95e, 0x88e, 0x95e, 0x8ec, 0x9b8, +0x8ec, 0x9b8, 0x92c, 0x9f0, 0x92c, 0x9f0, 0x955, 0xa0b, 0x955, 0xa0b, 0x955, +0xa0b, 0x8a3, 0x947, 0x8a3, 0x947, 0x959, 0x9e7, 0x959, 0x9e7, 0xa20, 0xa95, +0xa20, 0xa95, 0x9f7, 0xa50, 0x9f7, 0xa50, 0x90d, 0x947, 0x90d, 0x947, 0x90d, +0x947, 0x8f4, 0x90e, 0x8f4, 0x90e, 0x900, 0x8f7, 0x900, 0x8f7, 0x8cc, 0x8a0, +0x8cc, 0x8a0, 0x97d, 0x92d, 0x97d, 0x92d, 0x939, 0x8c5, 0x939, 0x8c5, 0x83e, +0x7a6, 0x83e, 0x7a6, 0x83e, 0x7a6, 0x780, 0x6c4, 0x780, 0x6c4, 0x6c0, 0x5e1, +0x6c0, 0x5e1, 0x4f0, 0x3ee, 0x4f0, 0x3ee, 0x3ae, 0x289, 0x3ae, 0x289, 0x400, +0x2ba, 0x400, 0x2ba, 0x3f1, 0x28b, 0x3f1, 0x28b, 0x3f1, 0x28b, 0x4fc, 0x375, +0x4fc, 0x375, 0x696, 0x4f1, 0x696, 0x4f1, 0x789, 0x5c6, 0x789, 0x5c6, 0x870, +0x690, 0x870, 0x690, 0x8eb, 0x6ef, 0x8eb, 0x6ef, 0x8eb, 0x6ef, 0xa71, 0x85a, +0xa71, 0x85a, 0xc01, 0x9d1, 0xc01, 0x9d1, 0xd79, 0xb2f, 0xd79, 0xb2f, 0xf04, +0xca3, 0xf04, 0xca3, 0x1000, 0xd89, 0x1000, 0xd89, 0x12fb, 0x1070, 0x12fb, 0x1070, +0x12fb, 0x1070, 0x1470, 0x11d2, 0x1470, 0x11d2, 0x15b5, 0x1307, 0x15b5, 0x1307, 0x1861, +0x15a5, 0x1861, 0x15a5, 0x1852, 0x158b, 0x1852, 0x158b, 0x193b, 0x166c, 0x193b, 0x166c, +0x195c, 0x1688, 0x195c, 0x1688, 0x195c, 0x1688, 0x189f, 0x15ca, 0x189f, 0x15ca, 0x193d, +0x1669, 0x193d, 0x1669, 0x17ef, 0x1521, 0x17ef, 0x1521, 0x1843, 0x157f, 0x1843, 0x157f, +0x1955, 0x16a0, 0x1955, 0x16a0, 0x1955, 0x16a0, 0x170c, 0x1469, 0x170c, 0x1469, 0x1599, +0x130c, 0x1599, 0x130c, 0x15cc, 0x1359, 0x15cc, 0x1359, 0x1387, 0x1131, 0x1387, 0x1131, +0x107b, 0xe47, 0x107b, 0xe47, 0xf51, 0xd40, 0xf51, 0xd40, 0xf51, 0xd40, 0xd22, +0xb38, 0xd22, 0xb38, 0xaee, 0x92d, 0xaee, 0x92d, 0xb81, 0x9ea, 0xb81, 0x9ea, +0xa9f, 0x932, 0xa9f, 0x932, 0x914, 0x7d3, 0x914, 0x7d3, 0x85e, 0x747, 0x85e, +0x747, 0x85e, 0x747, 0x6e6, 0x5f9, 0x6e6, 0x5f9, 0x76b, 0x6a6, 0x76b, 0x6a6, +0x5d1, 0x532, 0x5d1, 0x532, 0x2ba, 0x23e, 0x2ba, 0x23e, 0x2b1, 0x256, 0x2b1, +0x256, 0x2b1, 0x256, 0x20c, 0x1ce, 0x20c, 0x1ce, 0xca, 0xa5, 0xca, 0xa5, +0xffe7, 0xffd7, 0xffe7, 0xffd7, 0xfedd, 0xfedf, 0xfedd, 0xfedf, 0xfdcb, 0xfdda, 0xfdcb, +0xfdda, 0xfd02, 0xfd1b, 0xfd02, 0xfd1b, 0xfd02, 0xfd1b, 0xfc8b, 0xfcaa, 0xfc8b, 0xfcaa, +0xfbaf, 0xfbd0, 0xfbaf, 0xfbd0, 0xfac2, 0xfae2, 0xfac2, 0xfae2, 0xf9af, 0xf9cc, 0xf9af, +0xf9cc, 0xf884, 0xf89c, 0xf884, 0xf89c, 0xf7c5, 0xf7d7, 0xf7c5, 0xf7d7, 0xf7c5, 0xf7d7, +0xf671, 0xf67d, 0xf671, 0xf67d, 0xf52e, 0xf532, 0xf52e, 0xf532, 0xf514, 0xf513, 0xf514, +0xf513, 0xf4b8, 0xf4b2, 0xf4b8, 0xf4b2, 0xf495, 0xf48c, 0xf495, 0xf48c, 0xf495, 0xf48c, +0xf36e, 0xf365, 0xf36e, 0xf365, 0xf1af, 0xf1a9, 0xf1af, 0xf1a9, 0xf20a, 0xf20b, 0xf20a, +0xf20b, 0xf262, 0xf26d, 0xf262, 0xf26d, 0xf1f5, 0xf20f, 0xf1f5, 0xf20f, 0xf1a2, 0xf1ce, +0xf1a2, 0xf1ce, 0xf1a2, 0xf1ce, 0xf1bd, 0xf200, 0xf1bd, 0xf200, 0xf1a1, 0xf1ff, 0xf1a1, +0xf1ff, 0xf184, 0xf201, 0xf184, 0xf201, 0xf24e, 0xf2ec, 0xf24e, 0xf2ec, 0xf24c, 0xf310, +0xf24c, 0xf310, 0xf168, 0xf254, 0xf168, 0xf254, 0xf168, 0xf254, 0xf0c8, 0xf1dd, 0xf0c8, +0xf1dd, 0xf06c, 0xf1ac, 0xf06c, 0xf1ac, 0xef97, 0xf102, 0xef97, 0xf102, 0xedd7, 0xef6d, +0xedd7, 0xef6d, 0xecb3, 0xee72, 0xecb3, 0xee72, 0xecb3, 0xee72, 0xeb94, 0xed7b, 0xeb94, +0xed7b, 0xead7, 0xece3, 0xead7, 0xece3, 0xeba9, 0xedd7, 0xeba9, 0xedd7, 0xeaa4, 0xecf0, +0xeaa4, 0xecf0, 0xea3e, 0xeca2, 0xea3e, 0xeca2, 0xea56, 0xeccf, 0xea56, 0xeccf, 0xea56, +0xeccf, 0xe9a2, 0xec2a, 0xe9a2, 0xec2a, 0xec1f, 0xeeb0, 0xec1f, 0xeeb0, 0xec18, 0xeeac, +0xec18, 0xeeac, 0xeaf0, 0xed82, 0xeaf0, 0xed82, 0xec73, 0xeeff, 0xec73, 0xeeff, 0xeccb, +0xef4a, 0xeccb, 0xef4a, 0xeccb, 0xef4a, 0xecc8, 0xef36, 0xecc8, 0xef36, 0xecb0, 0xef09, +0xecb0, 0xef09, 0xedfe, 0xf040, 0xedfe, 0xf040, 0xeefd, 0xf123, 0xeefd, 0xf123, 0xef98, +0xf1a2, 0xef98, 0xf1a2, 0xef98, 0xf1a2, 0xf200, 0xf3ed, 0xf200, 0xf3ed, 0xf29a, 0xf46a, +0xf29a, 0xf46a, 0xf29f, 0xf453, 0xf29f, 0xf453, 0xf310, 0xf4aa, 0xf310, 0xf4aa, 0xf3e0, +0xf562, 0xf3e0, 0xf562, 0xf476, 0xf5e4, 0xf476, 0xf5e4, 0xf476, 0xf5e4, 0xf2f0, 0xf450, +0xf2f0, 0xf450, 0xf3bd, 0xf513, 0xf3bd, 0xf513, 0xf4b3, 0xf604, 0xf4b3, 0xf604, 0xf36c, +0xf4be, 0xf36c, 0xf4be, 0xf40c, 0xf565, 0xf40c, 0xf565, 0xf371, 0xf4d7, 0xf371, 0xf4d7, +0xf371, 0xf4d7, 0xf18e, 0xf308, 0xf18e, 0xf308, 0xf101, 0xf295, 0xf101, 0xf295, 0xf086, +0xf239, 0xf086, 0xf239, 0xf005, 0xf1dc, 0xf005, 0xf1dc, 0xee98, 0xf098, 0xee98, 0xf098, +0xee98, 0xf098, 0xed2e, 0xef59, 0xed2e, 0xef59, 0xeca5, 0xeeff, 0xeca5, 0xeeff, 0xebc1, +0xee4c, 0xebc1, 0xee4c, 0xeb03, 0xedc0, 0xeb03, 0xedc0, 0xea7d, 0xed6a, 0xea7d, 0xed6a, +0xe973, 0xec90, 0xe973, 0xec90, 0xe973, 0xec90, 0xe901, 0xec4b, 0xe901, 0xec4b, 0xe80e, +0xeb82, 0xe80e, 0xeb82, 0xe5fe, 0xe997, 0xe5fe, 0xe997, 0xe525, 0xe8de, 0xe525, 0xe8de, +0xe41c, 0xe7ee, 0xe41c, 0xe7ee, 0xe41c, 0xe7ee, 0xe314, 0xe6fa, 0xe314, 0xe6fa, 0xe365, +0xe756, 0xe365, 0xe756, 0xe387, 0xe77d, 0xe387, 0xe77d, 0xe372, 0xe763, 0xe372, 0xe763, +0xe43b, 0xe821, 0xe43b, 0xe821, 0xe53d, 0xe90e, 0xe53d, 0xe90e, 0xe53d, 0xe90e, 0xe51d, +0xe8d3, 0xe51d, 0xe8d3, 0xe508, 0xe89c, 0xe508, 0xe89c, 0xe424, 0xe78d, 0xe424, 0xe78d, +0xe3f6, 0xe72f, 0xe3f6, 0xe72f, 0xe5f3, 0xe8f6, 0xe5f3, 0xe8f6, 0xe62c, 0xe8f5, 0xe62c, +0xe8f5, 0xe62c, 0xe8f5, 0xe72b, 0xe9b5, 0xe72b, 0xe9b5, 0xe97d, 0xebc6, 0xe97d, 0xebc6, +0xea98, 0xec9c, 0xea98, 0xec9c, 0xed0b, 0xeeca, 0xed0b, 0xeeca, 0xef8d, 0xf105, 0xef8d, +0xf105, 0xef8d, 0xf105, 0xf0ab, 0xf1dc, 0xf0ab, 0xf1dc, 0xf234, 0xf31f, 0xf234, 0xf31f, +0xf434, 0xf4da, 0xf434, 0xf4da, 0xf633, 0xf696, 0xf633, 0xf696, 0xf881, 0xf8a3, 0xf881, +0xf8a3, 0xfa24, 0xfa07, 0xfa24, 0xfa07, 0xfa24, 0xfa07, 0xfa81, 0xfa28, 0xfa81, 0xfa28, +0xfbc2, 0xfb30, 0xfbc2, 0xfb30, 0xfde5, 0xfd1c, 0xfde5, 0xfd1c, 0xff51, 0xfe55, 0xff51, +0xfe55, 0xff94, 0xfe66, 0xff94, 0xfe66, 0xff31, 0xfdd3, 0xff31, 0xfdd3, 0xff31, 0xfdd3, +0xac, 0xff21, 0xac, 0xff21, 0x2ae, 0xf7, 0x2ae, 0xf7, 0x36d, 0x18b, 0x36d, +0x18b, 0x50a, 0x2fe, 0x50a, 0x2fe, 0x72d, 0x4f8, 0x72d, 0x4f8, 0x72d, 0x4f8, +0x90d, 0x6af, 0x90d, 0x6af, 0xb77, 0x8ef, 0xb77, 0x8ef, 0xee4, 0xc34, 0xee4, +0xc34, 0x1088, 0xdaf, 0x1088, 0xdaf, 0x1112, 0xe10, 0x1112, 0xe10, 0x144a, 0x1120, +0x144a, 0x1120, 0x144a, 0x1120, 0x1603, 0x12b1, 0x1603, 0x12b1, 0x166c, 0x12f2, 0x166c, +0x12f2, 0x1893, 0x14f2, 0x1893, 0x14f2, 0x1a29, 0x1663, 0x1a29, 0x1663, 0x1b53, 0x1768, +0x1b53, 0x1768, 0x1d53, 0x1948, 0x1d53, 0x1948, 0x1d53, 0x1948, 0x200f, 0x1be6, 0x200f, +0x1be6, 0x20bf, 0x1c7b, 0x20bf, 0x1c7b, 0x204a, 0x1bef, 0x204a, 0x1bef, 0x21b4, 0x1d47, +0x21b4, 0x1d47, 0x2285, 0x1e0b, 0x2285, 0x1e0b, 0x2285, 0x1e0b, 0x227d, 0x1dfb, 0x227d, +0x1dfb, 0x228f, 0x1e0d, 0x228f, 0x1e0d, 0x2211, 0x1d93, 0x2211, 0x1d93, 0x2273, 0x1e01, +0x2273, 0x1e01, 0x22e0, 0x1e81, 0x22e0, 0x1e81, 0x21ff, 0x1db9, 0x21ff, 0x1db9, 0x21ff, +0x1db9, 0x2084, 0x1c5e, 0x2084, 0x1c5e, 0x1deb, 0x19eb, 0x1deb, 0x19eb, 0x1c8d, 0x18ba, +0x1c8d, 0x18ba, 0x1cca, 0x1929, 0x1cca, 0x1929, 0x1bc5, 0x185c, 0x1bc5, 0x185c, 0x1ae3, +0x17b6, 0x1ae3, 0x17b6, 0x1ae3, 0x17b6, 0x1a42, 0x1756, 0x1a42, 0x1756, 0x1923, 0x167b, +0x1923, 0x167b, 0x17d7, 0x1575, 0x17d7, 0x1575, 0x15b6, 0x139c, 0x15b6, 0x139c, 0x1416, +0x1244, 0x1416, 0x1244, 0x1416, 0x1244, 0x12c5, 0x113c, 0x12c5, 0x113c, 0x10b2, 0xf72, +0x10b2, 0xf72, 0xefe, 0xe03, 0xefe, 0xe03, 0xd98, 0xce1, 0xd98, 0xce1, 0xcdc, +0xc67, 0xcdc, 0xc67, 0xb31, 0xafa, 0xb31, 0xafa, 0xb31, 0xafa, 0x92f, 0x932, +0x92f, 0x932, 0x8cb, 0x903, 0x8cb, 0x903, 0x5e7, 0x650, 0x5e7, 0x650, 0x322, +0x3b7, 0x322, 0x3b7, 0x25f, 0x31b, 0x25f, 0x31b, 0x149, 0x228, 0x149, 0x228, +0x149, 0x228, 0x191, 0x28d, 0x191, 0x28d, 0xd9, 0x1ee, 0xd9, 0x1ee, 0xff26, +0x50, 0xff26, 0x50, 0xfe15, 0xff51, 0xfe15, 0xff51, 0xfd33, 0xfe7d, 0xfd33, 0xfe7d, +0xfd33, 0xfe7d, 0xfbf4, 0xfd49, 0xfbf4, 0xfd49, 0xfa69, 0xfbc7, 0xfa69, 0xfbc7, 0xf9e2, +0xfb47, 0xf9e2, 0xfb47, 0xf962, 0xface, 0xf962, 0xface, 0xf992, 0xfb03, 0xf992, 0xfb03, +0xf9f0, 0xfb67, 0xf9f0, 0xfb67, 0xf9f0, 0xfb67, 0xf9a8, 0xfb25, 0xf9a8, 0xfb25, 0xf9f7, +0xfb7b, 0xf9f7, 0xfb7b, 0xf9e7, 0xfb73, 0xf9e7, 0xfb73, 0xfa57, 0xfbeb, 0xfa57, 0xfbeb, +0xfae6, 0xfc85, 0xfae6, 0xfc85, 0xf9cb, 0xfb76, 0xf9cb, 0xfb76, 0xf9cb, 0xfb76, 0xf888, +0xfa3f, 0xf888, 0xfa3f, 0xf727, 0xf8ed, 0xf727, 0xf8ed, 0xf638, 0xf80d, 0xf638, 0xf80d, +0xf4f3, 0xf6d7, 0xf4f3, 0xf6d7, 0xf2e3, 0xf4d6, 0xf2e3, 0xf4d6, 0xf2e3, 0xf4d6, 0xf1f5, +0xf3f6, 0xf1f5, 0xf3f6, 0xefbd, 0xf1cc, 0xefbd, 0xf1cc, 0xeeac, 0xf0c6, 0xeeac, 0xf0c6, +0xef0f, 0xf132, 0xef0f, 0xf132, 0xed62, 0xef8b, 0xed62, 0xef8b, 0xec28, 0xee53, 0xec28, +0xee53, 0xec28, 0xee53, 0xeb8b, 0xedb4, 0xeb8b, 0xedb4, 0xeba5, 0xedc8, 0xeba5, 0xedc8, +0xebe3, 0xedf9, 0xebe3, 0xedf9, 0xec11, 0xee15, 0xec11, 0xee15, 0xec90, 0xee7d, 0xec90, +0xee7d, 0xed29, 0xeef8, 0xed29, 0xeef8, 0xed29, 0xeef8, 0xef1c, 0xf0c8, 0xef1c, 0xf0c8, +0xf0c5, 0xf249, 0xf0c5, 0xf249, 0xf19d, 0xf2f3, 0xf19d, 0xf2f3, 0xf21c, 0xf33f, 0xf21c, +0xf33f, 0xf450, 0xf53b, 0xf450, 0xf53b, 0xf450, 0xf53b, 0xf811, 0xf8c1, 0xf811, 0xf8c1, +0xf92a, 0xf99c, 0xf92a, 0xf99c, 0xfa30, 0xfa61, 0xfa30, 0xfa61, 0xfcad, 0xfc9d, 0xfcad, +0xfc9d, 0xfdac, 0xfd5a, 0xfdac, 0xfd5a, 0xffa2, 0xff10, 0xffa2, 0xff10, 0xffa2, 0xff10, +0x2ab, 0x1da, 0x2ab, 0x1da, 0x3f0, 0x2e3, 0x3f0, 0x2e3, 0x488, 0x342, 0x488, +0x342, 0x660, 0x4e7, 0x660, 0x4e7, 0x8a3, 0x6fb, 0x8a3, 0x6fb, 0x846, 0x675, +0x846, 0x675, 0x846, 0x675, 0x829, 0x636, 0x829, 0x636, 0x8f6, 0x6e8, 0x8f6, +0x6e8, 0x8a8, 0x686, 0x8a8, 0x686, 0x9ee, 0x7bf, 0x9ee, 0x7bf, 0xb40, 0x90c, +0xb40, 0x90c, 0xb40, 0x90c, 0xb8a, 0x958, 0xb8a, 0x958, 0xc26, 0x9fc, 0xc26, +0x9fc, 0xcda, 0xabf, 0xcda, 0xabf, 0xcd3, 0xacd, 0xcd3, 0xacd, 0xcbf, 0xad2, +0xcbf, 0xad2, 0xcd4, 0xb06, 0xcd4, 0xb06, 0xcd4, 0xb06, 0xc44, 0xa99, 0xc44, +0xa99, 0xbbe, 0xa38, 0xbbe, 0xa38, 0xb54, 0x9f5, 0xb54, 0x9f5, 0xb99, 0xa61, +0xb99, 0xa61, 0xbdb, 0xacc, 0xbdb, 0xacc, 0xbdb, 0xacc, 0xbd3, 0xaeb, 0xbd3, +0xaeb, 0xc3e, 0xb7d, 0xc3e, 0xb7d, 0xd09, 0xc6d, 0xd09, 0xc6d, 0xca6, 0xc2b, +0xca6, 0xc2b, 0xc29, 0xbce, 0xc29, 0xbce, 0xd77, 0xd38, 0xd77, 0xd38, 0xd77, +0xd38, 0xdab, 0xd84, 0xdab, 0xd84, 0xdea, 0xdd7, 0xdea, 0xdd7, 0xe15, 0xe12, +0xe15, 0xe12, 0xd3b, 0xd44, 0xd3b, 0xd44, 0xd70, 0xd81, 0xd70, 0xd81, 0xd12, +0xd29, 0xd12, 0xd29, 0xd12, 0xd29, 0xc09, 0xc21, 0xc09, 0xc21, 0xc3d, 0xc53, +0xc3d, 0xc53, 0xce5, 0xcf6, 0xce5, 0xcf6, 0xcba, 0xcc4, 0xcba, 0xcc4, 0xd47, +0xd48, 0xd47, 0xd48, 0xd47, 0xd48, 0xdeb, 0xde1, 0xdeb, 0xde1, 0xd7c, 0xd65, +0xd7c, 0xd65, 0xd5e, 0xd3b, 0xd5e, 0xd3b, 0xc97, 0xc65, 0xc97, 0xc65, 0xb88, +0xb47, 0xb88, 0xb47, 0xba5, 0xb56, 0xba5, 0xb56, 0xba5, 0xb56, 0xaf1, 0xa93, +0xaf1, 0xa93, 0xa52, 0x9e5, 0xa52, 0x9e5, 0xacb, 0xa4f, 0xacb, 0xa4f, 0xaf4, +0xa6a, 0xaf4, 0xa6a, 0xaa5, 0xa0c, 0xaa5, 0xa0c, 0x822, 0x77a, 0x822, 0x77a, +0x822, 0x77a, 0x610, 0x559, 0x610, 0x559, 0x513, 0x44d, 0x513, 0x44d, 0x49a, +0x3c4, 0x49a, 0x3c4, 0x5f2, 0x50b, 0x5f2, 0x50b, 0x57c, 0x485, 0x57c, 0x485, +0x57c, 0x485, 0x593, 0x489, 0x593, 0x489, 0x71c, 0x600, 0x71c, 0x600, 0x77d, +0x64c, 0x77d, 0x64c, 0x804, 0x6be, 0x804, 0x6be, 0x8a3, 0x746, 0x8a3, 0x746, +0x8ca, 0x755, 0x8ca, 0x755, 0x8ca, 0x755, 0x9cd, 0x840, 0x9cd, 0x840, 0xbb7, +0xa11, 0xbb7, 0xa11, 0xc9b, 0xadb, 0xc9b, 0xadb, 0xd18, 0xb3e, 0xd18, 0xb3e, +0xe16, 0xc22, 0xe16, 0xc22, 0x1060, 0xe52, 0x1060, 0xe52, 0x1060, 0xe52, 0x1229, +0x1002, 0x1229, 0x1002, 0x12ed, 0x10af, 0x12ed, 0x10af, 0x13e3, 0x118f, 0x13e3, 0x118f, +0x13c5, 0x115e, 0x13c5, 0x115e, 0x1394, 0x111d, 0x1394, 0x111d, 0x1394, 0x111d, 0x13da, +0x1156, 0x13da, 0x1156, 0x1526, 0x1299, 0x1526, 0x1299, 0x1503, 0x1271, 0x1503, 0x1271, +0x1302, 0x106f, 0x1302, 0x106f, 0x12e8, 0x1058, 0x12e8, 0x1058, 0x12d6, 0x1050, 0x12d6, +0x1050, 0x12d6, 0x1050, 0x113d, 0xec5, 0x113d, 0xec5, 0xf91, 0xd2c, 0xf91, 0xd2c, +0xd9f, 0xb53, 0xd9f, 0xb53, 0xbb2, 0x983, 0xbb2, 0x983, 0xabd, 0x8b0, 0xabd, +0x8b0, 0x9a5, 0x7be, 0x9a5, 0x7be, 0x9a5, 0x7be, 0x8e3, 0x726, 0x8e3, 0x726, +0x88c, 0x6fd, 0x88c, 0x6fd, 0x6b3, 0x554, 0x6b3, 0x554, 0x4df, 0x3b2, 0x4df, +0x3b2, 0x4b3, 0x3b9, 0x4b3, 0x3b9, 0x4b3, 0x3b9, 0x35f, 0x299, 0x35f, 0x299, +0x1c0, 0x12e, 0x1c0, 0x12e, 0x165, 0x105, 0x165, 0x105, 0xffc2, 0xff93, 0xffc2, +0xff93, 0xff01, 0xff00, 0xff01, 0xff00, 0xfe50, 0xfe7a, 0xfe50, 0xfe7a, 0xfe50, 0xfe7a, +0xfcb0, 0xfd02, 0xfcb0, 0xfd02, 0xfbda, 0xfc4f, 0xfbda, 0xfc4f, 0xfb10, 0xfba4, 0xfb10, +0xfba4, 0xfa92, 0xfb40, 0xfa92, 0xfb40, 0xf969, 0xfa2c, 0xf969, 0xfa2c, 0xf898, 0xf96b, +0xf898, 0xf96b, 0xf898, 0xf96b, 0xf85e, 0xf93c, 0xf85e, 0xf93c, 0xf7d5, 0xf8b9, 0xf7d5, +0xf8b9, 0xf71d, 0xf803, 0xf71d, 0xf803, 0xf6b2, 0xf797, 0xf6b2, 0xf797, 0xf612, 0xf6f2, +0xf612, 0xf6f2, 0xf612, 0xf6f2, 0xf4bc, 0xf594, 0xf4bc, 0xf594, 0xf4b9, 0xf587, 0xf4b9, +0xf587, 0xf479, 0xf53b, 0xf479, 0xf53b, 0xf36e, 0xf425, 0xf36e, 0xf425, 0xf35d, 0xf408, +0xf35d, 0xf408, 0xf341, 0xf3e1, 0xf341, 0xf3e1, 0xf341, 0xf3e1, 0xf2cc, 0xf363, 0xf2cc, +0xf363, 0xf329, 0xf3b8, 0xf329, 0xf3b8, 0xf347, 0xf3d2, 0xf347, 0xf3d2, 0xf3a7, 0xf431, +0xf3a7, 0xf431, 0xf433, 0xf4c0, 0xf433, 0xf4c0, 0xf35f, 0xf3f2, 0xf35f, 0xf3f2, 0xf35f, +0xf3f2, 0xf3c1, 0xf45d, 0xf3c1, 0xf45d, 0xf3ff, 0xf4a9, 0xf3ff, 0xf4a9, 0xf3f6, 0xf4b0, +0xf3f6, 0xf4b0, 0xf530, 0xf5ff, 0xf530, 0xf5ff, 0xf526, 0xf60c, 0xf526, 0xf60c, 0xf526, +0xf60c, 0xf404, 0xf502, 0xf404, 0xf502, 0xf38e, 0xf4a8, 0xf38e, 0xf4a8, 0xf2eb, 0xf420, +0xf2eb, 0xf420, 0xf1a9, 0xf2fa, 0xf1a9, 0xf2fa, 0xf179, 0xf2e4, 0xf179, 0xf2e4, 0xf063, +0xf1e9, 0xf063, 0xf1e9, 0xf063, 0xf1e9, 0xefbd, 0xf15a, 0xefbd, 0xf15a, 0xf084, 0xf236, +0xf084, 0xf236, 0xef0f, 0xf0d3, 0xef0f, 0xf0d3, 0xeef2, 0xf0c4, 0xeef2, 0xf0c4, 0xf06b, +0xf247, 0xf06b, 0xf247, 0xeeca, 0xf0ab, 0xeeca, 0xf0ab, 0xeeca, 0xf0ab, 0xeea4, 0xf086, +0xeea4, 0xf086, 0xf09c, 0xf27b, 0xf09c, 0xf27b, 0xef81, 0xf157, 0xef81, 0xf157, 0xef08, +0xf0d2, 0xef08, 0xf0d2, 0xefc8, 0xf181, 0xefc8, 0xf181, 0xefc8, 0xf181, 0xefe5, 0xf18a, +0xefe5, 0xf18a, 0xf09d, 0xf22b, 0xf09d, 0xf22b, 0xf0ab, 0xf220, 0xf0ab, 0xf220, 0xf17d, +0xf2d9, 0xf17d, 0xf2d9, 0xf2a9, 0xf3ea, 0xf2a9, 0xf3ea, 0xf295, 0xf3bd, 0xf295, 0xf3bd, +0xf295, 0xf3bd, 0xf46f, 0xf57f, 0xf46f, 0xf57f, 0xf6aa, 0xf7a5, 0xf6aa, 0xf7a5, 0xf5c5, +0xf6ae, 0xf5c5, 0xf6ae, 0xf594, 0xf66f, 0xf594, 0xf66f, 0xf5b1, 0xf682, 0xf5b1, 0xf682, +0xf50e, 0xf5dc, 0xf50e, 0xf5dc, 0xf50e, 0xf5dc, 0xf54a, 0xf61a, 0xf54a, 0xf61a, 0xf51b, +0xf5f5, 0xf51b, 0xf5f5, 0xf516, 0xf5ff, 0xf516, 0xf5ff, 0xf450, 0xf54f, 0xf450, 0xf54f, +0xf46b, 0xf588, 0xf46b, 0xf588, 0xf46b, 0xf588, 0xf502, 0xf642, 0xf502, 0xf642, 0xf430, +0xf59a, 0xf430, 0xf59a, 0xf346, 0xf4e1, 0xf346, 0xf4e1, 0xf188, 0xf357, 0xf188, 0xf357, +0xf006, 0xf20e, 0xf006, 0xf20e, 0xeef4, 0xf138, 0xeef4, 0xf138, 0xeef4, 0xf138, 0xee2f, +0xf0b2, 0xee2f, 0xf0b2, 0xed20, 0xefe3, 0xed20, 0xefe3, 0xec2c, 0xef2f, 0xec2c, 0xef2f, +0xec40, 0xef82, 0xec40, 0xef82, 0xeb37, 0xeeb7, 0xeb37, 0xeeb7, 0xeb37, 0xeeb7, 0xe95c, +0xed16, 0xe95c, 0xed16, 0xe82e, 0xec1f, 0xe82e, 0xec1f, 0xe7ae, 0xebcf, 0xe7ae, 0xebcf, +0xe6dd, 0xeb2a, 0xe6dd, 0xeb2a, 0xe62e, 0xea9f, 0xe62e, 0xea9f, 0xe634, 0xeac1, 0xe634, +0xeac1, 0xe634, 0xeac1, 0xe5d1, 0xea72, 0xe5d1, 0xea72, 0xe581, 0xea2d, 0xe581, 0xea2d, +0xe52d, 0xe9dc, 0xe52d, 0xe9dc, 0xe4e4, 0xe98c, 0xe4e4, 0xe98c, 0xe5aa, 0xea43, 0xe5aa, +0xea43, 0xe526, 0xe9a6, 0xe526, 0xe9a6, 0xe526, 0xe9a6, 0xe490, 0xe8ef, 0xe490, 0xe8ef, +0xe4a8, 0xe8dd, 0xe4a8, 0xe8dd, 0xe428, 0xe82c, 0xe428, 0xe82c, 0xe61d, 0xe9ea, 0xe61d, +0xe9ea, 0xe70d, 0xea9b, 0xe70d, 0xea9b, 0xe70d, 0xea9b, 0xe718, 0xea62, 0xe718, 0xea62, +0xe910, 0xec12, 0xe910, 0xec12, 0xe9ab, 0xec62, 0xe9ab, 0xec62, 0xea67, 0xecd0, 0xea67, +0xecd0, 0xec48, 0xee61, 0xec48, 0xee61, 0xee10, 0xefd9, 0xee10, 0xefd9, 0xee10, 0xefd9, +0xefaa, 0xf123, 0xefaa, 0xf123, 0xf19f, 0xf2c8, 0xf19f, 0xf2c8, 0xf37b, 0xf456, 0xf37b, +0xf456, 0xf50f, 0xf59f, 0xf50f, 0xf59f, 0xf6c3, 0xf70b, 0xf6c3, 0xf70b, 0xf7de, 0xf7e0, +0xf7de, 0xf7e0, 0xf7de, 0xf7e0, 0xf8ba, 0xf87a, 0xf8ba, 0xf87a, 0xf96d, 0xf8ef, 0xf96d, +0xf8ef, 0xfa6b, 0xf9b2, 0xfa6b, 0xf9b2, 0xfb77, 0xfa88, 0xfb77, 0xfa88, 0xfbbb, 0xfa99, +0xfbbb, 0xfa99, 0xfbbb, 0xfa99, 0xfd41, 0xfbef, 0xfd41, 0xfbef, 0x3e, 0xfec0, 0x3e, +0xfec0, 0xbe, 0xff16, 0xbe, 0xff16, 0x183, 0xffb5, 0x183, 0xffb5, 0x49a, 0x2a6, +0x49a, 0x2a6, 0x609, 0x3f1, 0x609, 0x3f1, 0x609, 0x3f1, 0x854, 0x61a, 0x854, +0x61a, 0xba3, 0x948, 0xba3, 0x948, 0xdde, 0xb62, 0xdde, 0xb62, 0xf60, 0xcc4, +0xf60, 0xcc4, 0x107a, 0xdbd, 0x107a, 0xdbd, 0x12bf, 0xfe2, 0x12bf, 0xfe2, 0x12bf, +0xfe2, 0x1435, 0x1139, 0x1435, 0x1139, 0x1565, 0x1248, 0x1565, 0x1248, 0x17da, 0x149f, +0x17da, 0x149f, 0x18ab, 0x1552, 0x18ab, 0x1552, 0x1900, 0x158a, 0x1900, 0x158a, 0x1900, +0x158a, 0x1af7, 0x1765, 0x1af7, 0x1765, 0x1d12, 0x1967, 0x1d12, 0x1967, 0x1df6, 0x1a34, +0x1df6, 0x1a34, 0x1e64, 0x1a8f, 0x1e64, 0x1a8f, 0x1fc5, 0x1be1, 0x1fc5, 0x1be1, 0x206b, +0x1c7b, 0x206b, 0x1c7b, 0x206b, 0x1c7b, 0x216c, 0x1d76, 0x216c, 0x1d76, 0x2269, 0x1e72, +0x2269, 0x1e72, 0x2141, 0x1d4f, 0x2141, 0x1d4f, 0x20e3, 0x1cfc, 0x20e3, 0x1cfc, 0x203f, +0x1c6a, 0x203f, 0x1c6a, 0x1f53, 0x1b97, 0x1f53, 0x1b97, 0x1f53, 0x1b97, 0x1ea7, 0x1b0a, +0x1ea7, 0x1b0a, 0x1e13, 0x1a9b, 0x1e13, 0x1a9b, 0x1e55, 0x1b08, 0x1e55, 0x1b08, 0x1d3a, +0x1a1f, 0x1d3a, 0x1a1f, 0x1c1b, 0x1937, 0x1c1b, 0x1937, 0x1c1b, 0x1937, 0x1b22, 0x187a, +0x1b22, 0x187a, 0x1a24, 0x17bd, 0x1a24, 0x17bd, 0x1945, 0x1721, 0x1945, 0x1721, 0x1855, +0x1679, 0x1855, 0x1679, 0x17b4, 0x1622, 0x17b4, 0x1622, 0x1533, 0x13ec, 0x1533, 0x13ec, +0x1533, 0x13ec, 0x134a, 0x124d, 0x134a, 0x124d, 0x1285, 0x11d4, 0x1285, 0x11d4, 0x1114, +0x10ad, 0x1114, 0x10ad, 0x103b, 0x101c, 0x103b, 0x101c, 0xead, 0xed4, 0xead, 0xed4, +0xd60, 0xdc9, 0xd60, 0xdc9, 0xd60, 0xdc9, 0xc2a, 0xcd3, 0xc2a, 0xcd3, 0x972, +0xa56, 0x972, 0xa56, 0x74b, 0x866, 0x74b, 0x866, 0x534, 0x682, 0x534, 0x682, +0x42a, 0x5a6, 0x42a, 0x5a6, 0x42a, 0x5a6, 0x351, 0x4f6, 0x351, 0x4f6, 0xdc, +0x2a6, 0xdc, 0x2a6, 0xff8a, 0x174, 0xff8a, 0x174, 0xfe3f, 0x46, 0xfe3f, 0x46, +0xfd42, 0xff60, 0xfd42, 0xff60, 0xfc8e, 0xfec1, 0xfc8e, 0xfec1, 0xfc8e, 0xfec1, 0xfb54, +0xfd99, 0xfb54, 0xfd99, 0xfaad, 0xfcff, 0xfaad, 0xfcff, 0xf977, 0xfbd5, 0xf977, 0xfbd5, +0xf977, 0xfbde, 0xf977, 0xfbde, 0xf9fe, 0xfc6d, 0xf9fe, 0xfc6d, 0xf9bf, 0xfc33, 0xf9bf, +0xfc33, 0xf9bf, 0xfc33, 0xfa8c, 0xfd04, 0xfa8c, 0xfd04, 0xfafd, 0xfd79, 0xfafd, 0xfd79, +0xfaa8, 0xfd26, 0xfaa8, 0xfd26, 0xfa5b, 0xfcda, 0xfa5b, 0xfcda, 0xf9b6, 0xfc36, 0xf9b6, +0xfc36, 0xf9b6, 0xfc36, 0xf8cd, 0xfb4d, 0xf8cd, 0xfb4d, 0xf799, 0xfa18, 0xf799, 0xfa18, +0xf761, 0xf9df, 0xf761, 0xf9df, 0xf6c7, 0xf941, 0xf6c7, 0xf941, 0xf452, 0xf6c8, 0xf452, +0xf6c8, 0xf399, 0xf609, 0xf399, 0xf609, 0xf399, 0xf609, 0xf370, 0xf5d8, 0xf370, 0xf5d8, +0xf1b2, 0xf411, 0xf1b2, 0xf411, 0xf0c6, 0xf318, 0xf0c6, 0xf318, 0xf06e, 0xf2b1, 0xf06e, +0xf2b1, 0xeef1, 0xf123, 0xeef1, 0xf123, 0xedd4, 0xeff1, 0xedd4, 0xeff1, 0xedd4, 0xeff1, +0xee94, 0xf098, 0xee94, 0xf098, 0xef32, 0xf11b, 0xef32, 0xf11b, 0xef24, 0xf0ee, 0xef24, +0xf0ee, 0xef27, 0xf0ce, 0xef27, 0xf0ce, 0xefcd, 0xf14f, 0xefcd, 0xf14f, 0xefcd, 0xf14f, +0xeffa, 0xf153, 0xeffa, 0xf153, 0xefe1, 0xf10e, 0xefe1, 0xf10e, 0xf1b0, 0xf2af, 0xf1b0, +0xf2af, 0xf25a, 0xf329, 0xf25a, 0xf329, 0xf275, 0xf311, 0xf275, 0xf311, 0xf585, 0xf5ed, +0xf585, 0xf5ed, 0xf585, 0xf5ed, 0xf8ba, 0xf8ee, 0xf8ba, 0xf8ee, 0xfa1f, 0xfa1e, 0xfa1f, +0xfa1e, 0xfb51, 0xfb1b, 0xfb51, 0xfb1b, 0xfc9d, 0xfc34, 0xfc9d, 0xfc34, 0xfdcc, 0xfd32, +0xfdcc, 0xfd32, 0xff70, 0xfea7, 0xff70, 0xfea7, 0xff70, 0xfea7, 0xaf, 0xffba, 0xaf, +0xffba, 0xc6, 0xffa9, 0xc6, 0xffa9, 0xf5, 0xffb3, 0xf5, 0xffb3, 0x241, 0xe0, +0x241, 0xe0, 0x37c, 0x200, 0x37c, 0x200, 0x37c, 0x200, 0x36c, 0x1da, 0x36c, +0x1da, 0x334, 0x191, 0x334, 0x191, 0x3b6, 0x208, 0x3b6, 0x208, 0x48a, 0x2d7, +0x48a, 0x2d7, 0x56d, 0x3b8, 0x56d, 0x3b8, 0x5de, 0x42d, 0x5de, 0x42d, 0x5de, +0x42d, 0x6c2, 0x51b, 0x6c2, 0x51b, 0x723, 0x589, 0x723, 0x589, 0x69d, 0x512, +0x69d, 0x512, 0x750, 0x5d9, 0x750, 0x5d9, 0x6b8, 0x557, 0x6b8, 0x557, 0x6b8, +0x557, 0x5ef, 0x4a5, 0x5ef, 0x4a5, 0x65a, 0x528, 0x65a, 0x528, 0x61d, 0x503, +0x61d, 0x503, 0x694, 0x592, 0x694, 0x592, 0x69f, 0x5b4, 0x69f, 0x5b4, 0x6c1, +0x5ea, 0x6c1, 0x5ea, 0x6c1, 0x5ea, 0x824, 0x75e, 0x824, 0x75e, 0x907, 0x850, +0x907, 0x850, 0x8b4, 0x808, 0x8b4, 0x808, 0x8a0, 0x7fb, 0x8a0, 0x7fb, 0x932, +0x891, 0x932, 0x891, 0x8ee, 0x84c, 0x8ee, 0x84c, 0x8ee, 0x84c, 0x953, 0x8ac, +0x953, 0x8ac, 0x9ee, 0x93c, 0x9ee, 0x93c, 0x978, 0x8ba, 0x978, 0x8ba, 0x991, +0x8c2, 0x991, 0x8c2, 0xa49, 0x966, 0xa49, 0x966, 0xa49, 0x966, 0xaae, 0x9b4, +0xaae, 0x9b4, 0xa52, 0x940, 0xa52, 0x940, 0x9c8, 0x89c, 0x9c8, 0x89c, 0x997, +0x84f, 0x997, 0x84f, 0x9ce, 0x86a, 0x9ce, 0x86a, 0xab4, 0x935, 0xab4, 0x935, +0xab4, 0x935, 0xb28, 0x98e, 0xb28, 0x98e, 0xacd, 0x919, 0xacd, 0x919, 0xac4, +0x8f8, 0xac4, 0x8f8, 0xa95, 0x8b3, 0xa95, 0x8b3, 0xb02, 0x90d, 0xb02, 0x90d, +0xb9c, 0x995, 0xb9c, 0x995, 0xb9c, 0x995, 0xafc, 0x8e6, 0xafc, 0x8e6, 0xb44, +0x923, 0xb44, 0x923, 0xb30, 0x906, 0xb30, 0x906, 0x9b2, 0x781, 0x9b2, 0x781, +0x968, 0x733, 0x968, 0x733, 0x968, 0x733, 0x84a, 0x613, 0x84a, 0x613, 0x6e5, +0x4ad, 0x6e5, 0x4ad, 0x73a, 0x503, 0x73a, 0x503, 0x743, 0x50d, 0x743, 0x50d, +0x7d4, 0x5a1, 0x7d4, 0x5a1, 0x74f, 0x51d, 0x74f, 0x51d, 0x74f, 0x51d, 0x79b, +0x56b, 0x79b, 0x56b, 0xa5a, 0x82a, 0xa5a, 0x82a, 0xb0b, 0x8dc, 0xb0b, 0x8dc, +0xbe2, 0x9b1, 0xbe2, 0x9b1, 0xc59, 0xa25, 0xc59, 0xa25, 0xc74, 0xa3c, 0xc74, +0xa3c, 0xc74, 0xa3c, 0xdeb, 0xbac, 0xdeb, 0xbac, 0xf60, 0xd19, 0xf60, 0xd19, +0x1180, 0xf2f, 0x1180, 0xf2f, 0x11da, 0xf7f, 0x11da, 0xf7f, 0x11d5, 0xf6e, 0x11d5, +0xf6e, 0x11d5, 0xf6e, 0x139f, 0x112b, 0x139f, 0x112b, 0x1556, 0x12d5, 0x1556, 0x12d5, +0x157f, 0x12f2, 0x157f, 0x12f2, 0x1586, 0x12ec, 0x1586, 0x12ec, 0x1710, 0x146a, 0x1710, +0x146a, 0x172e, 0x147e, 0x172e, 0x147e, 0x172e, 0x147e, 0x1792, 0x14d9, 0x1792, 0x14d9, +0x1808, 0x1549, 0x1808, 0x1549, 0x16c0, 0x13fd, 0x16c0, 0x13fd, 0x16bc, 0x13f9, 0x16bc, +0x13f9, 0x15d9, 0x1319, 0x15d9, 0x1319, 0x14e0, 0x1227, 0x14e0, 0x1227, 0x14e0, 0x1227, +0x1449, 0x119a, 0x1449, 0x119a, 0x11d9, 0xf39, 0x11d9, 0xf39, 0x1117, 0xe89, 0x1117, +0xe89, 0x10c3, 0xe4c, 0x10c3, 0xe4c, 0xfd1, 0xd74, 0xfd1, 0xd74, 0xfd1, 0xd74, +0xef2, 0xcb3, 0xef2, 0xcb3, 0xd50, 0xb33, 0xd50, 0xb33, 0xc5f, 0xa67, 0xc5f, +0xa67, 0xb12, 0x942, 0xb12, 0x942, 0x9b3, 0x80d, 0x9b3, 0x80d, 0x77b, 0x601, +0x77b, 0x601, 0x77b, 0x601, 0x534, 0x3e8, 0x534, 0x3e8, 0x4ee, 0x3d1, 0x4ee, +0x3d1, 0x4ae, 0x3c0, 0x4ae, 0x3c0, 0x48a, 0x3cc, 0x48a, 0x3cc, 0x336, 0x2a7, +0x336, 0x2a7, 0x180, 0x11f, 0x180, 0x11f, 0x180, 0x11f, 0x12e, 0xfa, 0x12e, +0xfa, 0x45, 0x3c, 0x45, 0x3c, 0xfee0, 0xff00, 0xfee0, 0xff00, 0xfd30, 0xfd77, +0xfd30, 0xfd77, 0xfaba, 0xfb25, 0xfaba, 0xfb25, 0xfaba, 0xfb25, 0xf933, 0xf9c0, 0xf933, +0xf9c0, 0xf93f, 0xf9eb, 0xf93f, 0xf9eb, 0xf917, 0xf9df, 0xf917, 0xf9df, 0xf89b, 0xf97c, +0xf89b, 0xf97c, 0xf77a, 0xf872, 0xf77a, 0xf872, 0xf5b4, 0xf6c0, 0xf5b4, 0xf6c0, 0xf5b4, +0xf6c0, 0xf4b3, 0xf5d1, 0xf4b3, 0xf5d1, 0xf3c1, 0xf4ee, 0xf3c1, 0xf4ee, 0xf280, 0xf3ba, +0xf280, 0xf3ba, 0xf29e, 0xf3e5, 0xf29e, 0xf3e5, 0xf328, 0xf47a, 0xf328, 0xf47a, 0xf36c, +0xf4c6, 0xf36c, 0xf4c6, 0xf36c, 0xf4c6, 0xf4a2, 0xf606, 0xf4a2, 0xf606, 0xf419, 0xf586, +0xf419, 0xf586, 0xf2c6, 0xf43c, 0xf2c6, 0xf43c, 0xf334, 0xf4b4, 0xf334, 0xf4b4, 0xf2ec, +0xf476, 0xf2ec, 0xf476, 0xf2ec, 0xf476, 0xf283, 0xf418, 0xf283, 0xf418, 0xf27a, 0xf41a, +0xf27a, 0xf41a, 0xf1dd, 0xf389, 0xf1dd, 0xf389, 0xf1ee, 0xf3a7, 0xf1ee, 0xf3a7, 0xf1d8, +0xf39f, 0xf1d8, 0xf39f, 0xf1a0, 0xf375, 0xf1a0, 0xf375, 0xf1a0, 0xf375, 0xf21c, 0xf3fe, +0xf21c, 0xf3fe, 0xf0b0, 0xf2a1, 0xf0b0, 0xf2a1, 0xef74, 0xf173, 0xef74, 0xf173, 0xf05f, +0xf26c, 0xf05f, 0xf26c, 0xefa6, 0xf1be, 0xefa6, 0xf1be, 0xedde, 0xf002, 0xedde, 0xf002, +0xedde, 0xf002, 0xee31, 0xf05d, 0xee31, 0xf05d, 0xef3a, 0xf16d, 0xef3a, 0xf16d, 0xef19, +0xf150, 0xef19, 0xf150, 0xefa9, 0xf1e2, 0xefa9, 0xf1e2, 0xef70, 0xf1a7, 0xef70, 0xf1a7, +0xef70, 0xf1a7, 0xedaa, 0xefdb, 0xedaa, 0xefdb, 0xed90, 0xefb9, 0xed90, 0xefb9, 0xeea4, +0xf0c2, 0xeea4, 0xf0c2, 0xef85, 0xf194, 0xef85, 0xf194, 0xeeec, 0xf0e9, 0xeeec, 0xf0e9, +0xee83, 0xf06c, 0xee83, 0xf06c, 0xee83, 0xf06c, 0xf05b, 0xf22c, 0xf05b, 0xf22c, 0xf12d, +0xf2e5, 0xf12d, 0xf2e5, 0xf159, 0xf2f7, 0xf159, 0xf2f7, 0xf2c4, 0xf448, 0xf2c4, 0xf448, +0xf365, 0xf4ce, 0xf365, 0xf4ce, 0xf46f, 0xf5be, 0xf46f, 0xf5be, 0xf46f, 0xf5be, 0xf62c, +0xf761, 0xf62c, 0xf761, 0xf66e, 0xf78d, 0xf66e, 0xf78d, 0xf5a1, 0xf6ab, 0xf5a1, 0xf6ab, +0xf4e8, 0xf5e1, 0xf4e8, 0xf5e1, 0xf509, 0xf5f5, 0xf509, 0xf5f5, 0xf509, 0xf5f5, 0xf472, +0xf555, 0xf472, 0xf555, 0xf3ae, 0xf48d, 0xf3ae, 0xf48d, 0xf37e, 0xf45e, 0xf37e, 0xf45e, +0xf34b, 0xf430, 0xf34b, 0xf430, 0xf3b8, 0xf4a8, 0xf3b8, 0xf4a8, 0xf447, 0xf548, 0xf447, +0xf548, 0xf447, 0xf548, 0xf427, 0xf53d, 0xf427, 0xf53d, 0xf18b, 0xf2bb, 0xf18b, 0xf2bb, +0xf04d, 0xf19c, 0xf04d, 0xf19c, 0xf0de, 0xf24f, 0xf0de, 0xf24f, 0xef21, 0xf0b8, 0xef21, +0xf0b8, 0xef21, 0xf0b8, 0xee66, 0xf027, 0xee66, 0xf027, 0xedb5, 0xefa2, 0xedb5, 0xefa2, +0xec9c, 0xeeb6, 0xec9c, 0xeeb6, 0xed0a, 0xef53, 0xed0a, 0xef53, 0xec49, 0xeec1, 0xec49, +0xeec1, 0xeb22, 0xedc8, 0xeb22, 0xedc8, 0xeb22, 0xedc8, 0xeac2, 0xed96, 0xeac2, 0xed96, +0xea71, 0xed70, 0xea71, 0xed70, 0xea84, 0xedac, 0xea84, 0xedac, 0xea64, 0xedb3, 0xea64, +0xedb3, 0xe8cd, 0xec3f, 0xe8cd, 0xec3f, 0xe70c, 0xea9d, 0xe70c, 0xea9d, 0xe70c, 0xea9d, +0xe768, 0xeb13, 0xe768, 0xeb13, 0xe757, 0xeb19, 0xe757, 0xeb19, 0xe738, 0xeb0a, 0xe738, +0xeb0a, 0xe823, 0xec02, 0xe823, 0xec02, 0xe69b, 0xea80, 0xe69b, 0xea80, 0xe69b, 0xea80, +0xe6a2, 0xea88, 0xe6a2, 0xea88, 0xe8c0, 0xeca2, 0xe8c0, 0xeca2, 0xe8ac, 0xec84, 0xe8ac, +0xec84, 0xe8d4, 0xec9c, 0xe8d4, 0xec9c, 0xe907, 0xecbb, 0xe907, 0xecbb, 0xe91b, 0xecb5, +0xe91b, 0xecb5, 0xe91b, 0xecb5, 0xeafd, 0xee78, 0xeafd, 0xee78, 0xec3c, 0xef93, 0xec3c, +0xef93, 0xebc7, 0xeef5, 0xebc7, 0xeef5, 0xecf6, 0xeff7, 0xecf6, 0xeff7, 0xee71, 0xf141, +0xee71, 0xf141, 0xefc2, 0xf25c, 0xefc2, 0xf25c, 0xefc2, 0xf25c, 0xf2c6, 0xf528, 0xf2c6, +0xf528, 0xf419, 0xf63f, 0xf419, 0xf63f, 0xf4c9, 0xf6b0, 0xf4c9, 0xf6b0, 0xf6bb, 0xf85f, +0xf6bb, 0xf85f, 0xf807, 0xf966, 0xf807, 0xf966, 0xf807, 0xf966, 0xf947, 0xfa5f, 0xf947, +0xfa5f, 0xfa44, 0xfb13, 0xfa44, 0xfb13, 0xfa4c, 0xfad1, 0xfa4c, 0xfad1, 0xfc88, 0xfcc2, +0xfc88, 0xfcc2, 0xff53, 0xff40, 0xff53, 0xff40, 0xff88, 0xff28, 0xff88, 0xff28, 0xff88, +0xff28, 0x11b, 0x6d, 0x11b, 0x6d, 0x2ae, 0x1b2, 0x2ae, 0x1b2, 0x3b6, 0x26c, +0x3b6, 0x26c, 0x60d, 0x475, 0x60d, 0x475, 0x75c, 0x576, 0x75c, 0x576, 0x85b, +0x629, 0x85b, 0x629, 0x85b, 0x629, 0x99d, 0x71e, 0x99d, 0x71e, 0xc61, 0x998, +0xc61, 0x998, 0xf92, 0xc80, 0xf92, 0xc80, 0x10f3, 0xd99, 0x10f3, 0xd99, 0x1237, +0xe97, 0x1237, 0xe97, 0x1237, 0xe97, 0x132b, 0xf47, 0x132b, 0xf47, 0x1469, 0x1044, +0x1469, 0x1044, 0x1624, 0x11c0, 0x1624, 0x11c0, 0x16f1, 0x1251, 0x16f1, 0x1251, 0x175d, +0x1284, 0x175d, 0x1284, 0x18b2, 0x13a4, 0x18b2, 0x13a4, 0x18b2, 0x13a4, 0x1bf8, 0x16ba, +0x1bf8, 0x16ba, 0x1eca, 0x1961, 0x1eca, 0x1961, 0x2172, 0x1be3, 0x2172, 0x1be3, 0x24f5, +0x1f46, 0x24f5, 0x1f46, 0x25c6, 0x1ffe, 0x25c6, 0x1ffe, 0x25fe, 0x2023, 0x25fe, 0x2023, +0x25fe, 0x2023, 0x26bc, 0x20d7, 0x26bc, 0x20d7, 0x2647, 0x205f, 0x2647, 0x205f, 0x252c, +0x1f4a, 0x252c, 0x1f4a, 0x254c, 0x1f7a, 0x254c, 0x1f7a, 0x2836, 0x227d, 0x2836, 0x227d, +0x2836, 0x227d, 0x29a7, 0x2411, 0x29a7, 0x2411, 0x28f9, 0x2390, 0x28f9, 0x2390, 0x27a3, +0x2273, 0x27a3, 0x2273, 0x25ee, 0x2100, 0x25ee, 0x2100, 0x2520, 0x207e, 0x2520, 0x207e, +0x24d7, 0x208b, 0x24d7, 0x208b, 0x24d7, 0x208b, 0x248a, 0x209c, 0x248a, 0x209c, 0x2253, +0x1ecd, 0x2253, 0x1ecd, 0x207d, 0x1d65, 0x207d, 0x1d65, 0x1eaa, 0x1c07, 0x1eaa, 0x1c07, +0x1b32, 0x190a, 0x1b32, 0x190a, 0x1919, 0x176f, 0x1919, 0x176f, 0x1919, 0x176f, 0x1623, +0x14fb, 0x1623, 0x14fb, 0x12d8, 0x1232, 0x12d8, 0x1232, 0x11d3, 0x11b0, 0x11d3, 0x11b0, +0x108a, 0x10e7, 0x108a, 0x10e7, 0xdb9, 0xe93, 0xdb9, 0xe93, 0xdb9, 0xe93, 0xaa9, +0xbfb, 0xaa9, 0xbfb, 0x7f2, 0x9b7, 0x7f2, 0x9b7, 0x489, 0x6ba, 0x489, 0x6ba, +0xe3, 0x377, 0xe3, 0x377, 0xfd2a, 0x17, 0xfd2a, 0x17, 0xf933, 0xfc70, 0xf933, +0xfc70, 0xf933, 0xfc70, 0xf603, 0xf985, 0xf603, 0xf985, 0xf370, 0xf72c, 0xf370, 0xf72c, +0xf246, 0xf631, 0xf246, 0xf631, 0xef8a, 0xf39a, 0xef8a, 0xf39a, 0xeb8e, 0xefb6, 0xeb8e, +0xefb6, 0xeb96, 0xefce, 0xeb96, 0xefce, 0xeb96, 0xefce, 0xeb31, 0xef70, 0xeb31, 0xef70, +0xe960, 0xed9c, 0xe960, 0xed9c, 0xe884, 0xecb5, 0xe884, 0xecb5, 0xe741, 0xeb61, 0xe741, +0xeb61, 0xe6f9, 0xeb01, 0xe6f9, 0xeb01, 0xe6f9, 0xeb01, 0xe7f1, 0xebdd, 0xe7f1, 0xebdd, +0xe9ac, 0xed79, 0xe9ac, 0xed79, 0xe96d, 0xed18, 0xe96d, 0xed18, 0xe7df, 0xeb66, 0xe7df, +0xeb66, 0xe725, 0xea85, 0xe725, 0xea85, 0xe6c8, 0xea03, 0xe6c8, 0xea03, 0xe6c8, 0xea03, +0xe786, 0xea9b, 0xe786, 0xea9b, 0xe795, 0xea84, 0xe795, 0xea84, 0xe816, 0xeae0, 0xe816, +0xeae0, 0xe8c4, 0xeb6a, 0xe8c4, 0xeb6a, 0xe8a9, 0xeb2b, 0xe8a9, 0xeb2b, 0xe9d1, 0xec30, +0xe9d1, 0xec30, 0xe9d1, 0xec30, 0xe92f, 0xeb69, 0xe92f, 0xeb69, 0xe7ca, 0xe9df, 0xe7ca, +0xe9df, 0xe8ea, 0xeada, 0xe8ea, 0xeada, 0xea90, 0xec59, 0xea90, 0xec59, 0xebec, 0xed8b, +0xebec, 0xed8b, 0xebec, 0xed8b, 0xece0, 0xee52, 0xece0, 0xee52, 0xee00, 0xef44, 0xee00, +0xef44, 0xef2b, 0xf03c, 0xef2b, 0xf03c, 0xf0fd, 0xf1d8, 0xf0fd, 0xf1d8, 0xf331, 0xf3d3, +0xf331, 0xf3d3, 0xf32e, 0xf394, 0xf32e, 0xf394, 0xf32e, 0xf394, 0xf43f, 0xf466, 0xf43f, +0xf466, 0xf692, 0xf677, 0xf692, 0xf677, 0xf9a3, 0xf945, 0xf9a3, 0xf945, 0xfd62, 0xfcc0, +0xfd62, 0xfcc0, 0xfe62, 0xfd7b, 0xfe62, 0xfd7b, 0x31, 0xff07, 0x31, 0xff07, 0x31, +0xff07, 0x24f, 0xe4, 0x24f, 0xe4, 0x49c, 0x2f3, 0x49c, 0x2f3, 0x881, 0x69f, +0x881, 0x69f, 0xa5b, 0x847, 0xa5b, 0x847, 0xb56, 0x916, 0xb56, 0x916, 0xb56, +0x916, 0xbc4, 0x960, 0xbc4, 0x960, 0xcd6, 0xa57, 0xcd6, 0xa57, 0xe2c, 0xb9b, +0xe2c, 0xb9b, 0xef2, 0xc5a, 0xef2, 0xc5a, 0x10dc, 0xe47, 0x10dc, 0xe47, 0x1124, +0xe9c, 0x1124, 0xe9c, 0x1124, 0xe9c, 0x10c3, 0xe52, 0x10c3, 0xe52, 0xfb7, 0xd67, +0xfb7, 0xd67, 0xd2f, 0xb09, 0xd2f, 0xb09, 0xcd4, 0xae0, 0xcd4, 0xae0, 0xd9a, +0xbe0, 0xd9a, 0xbe0, 0xd9a, 0xbe0, 0xd8c, 0xc10, 0xd8c, 0xc10, 0xca2, 0xb69, +0xca2, 0xb69, 0xb6f, 0xa7c, 0xb6f, 0xa7c, 0xaba, 0xa0e, 0xaba, 0xa0e, 0xa01, +0x99b, 0xa01, 0x99b, 0x978, 0x956, 0x978, 0x956, 0x978, 0x956, 0x7f1, 0x810, +0x7f1, 0x810, 0x566, 0x5c2, 0x566, 0x5c2, 0x3ca, 0x45b, 0x3ca, 0x45b, 0x2e2, +0x3a3, 0x2e2, 0x3a3, 0x1fb, 0x2e2, 0x1fb, 0x2e2, 0x56, 0x15b, 0x56, 0x15b, +0x56, 0x15b, 0xfeff, 0x1b, 0xfeff, 0x1b, 0xfec5, 0xffed, 0xfec5, 0xffed, 0xfe35, +0xff61, 0xfe35, 0xff61, 0xfea5, 0xffcd, 0xfea5, 0xffcd, 0xffdd, 0xf7, 0xffdd, 0xf7, +0xffdd, 0xf7, 0xfeee, 0xfff5, 0xfeee, 0xfff5, 0xfea1, 0xff8e, 0xfea1, 0xff8e, 0x12c, +0x1f9, 0x12c, 0x1f9, 0x2f9, 0x3a4, 0x2f9, 0x3a4, 0x39f, 0x423, 0x39f, 0x423, +0x585, 0x5e2, 0x585, 0x5e2, 0x585, 0x5e2, 0x793, 0x7c8, 0x793, 0x7c8, 0x7e9, +0x7f6, 0x7e9, 0x7f6, 0x80b, 0x7f2, 0x80b, 0x7f2, 0x810, 0x7d3, 0x810, 0x7d3, +0x6d6, 0x677, 0x6d6, 0x677, 0x689, 0x60c, 0x689, 0x60c, 0x689, 0x60c, 0x84d, +0x7b7, 0x84d, 0x7b7, 0xab7, 0xa0b, 0xab7, 0xa0b, 0xb1f, 0xa60, 0xb1f, 0xa60, +0xa77, 0x9a9, 0xa77, 0x9a9, 0xaca, 0x9f0, 0xaca, 0x9f0, 0xaca, 0x9f0, 0x9a1, +0x8bd, 0x9a1, 0x8bd, 0x828, 0x73c, 0x828, 0x73c, 0x829, 0x735, 0x829, 0x735, +0x7ca, 0x6ce, 0x7ca, 0x6ce, 0x719, 0x614, 0x719, 0x614, 0x7b6, 0x6a5, 0x7b6, +0x6a5, 0x7b6, 0x6a5, 0x8f4, 0x7d5, 0x8f4, 0x7d5, 0x807, 0x6d6, 0x807, 0x6d6, +0x785, 0x63c, 0x785, 0x63c, 0x8e5, 0x781, 0x8e5, 0x781, 0x96f, 0x7eb, 0x96f, +0x7eb, 0xae6, 0x93b, 0xae6, 0x93b, 0xae6, 0x93b, 0xcee, 0xb18, 0xcee, 0xb18, +0xe2f, 0xc27, 0xe2f, 0xc27, 0xf7c, 0xd40, 0xf7c, 0xd40, 0x111f, 0xeaa, 0x111f, +0xeaa, 0x1349, 0x1099, 0x1349, 0x1099, 0x1349, 0x1099, 0x149f, 0x11b2, 0x149f, 0x11b2, +0x1626, 0x12fc, 0x1626, 0x12fc, 0x1932, 0x15cb, 0x1932, 0x15cb, 0x1c27, 0x1885, 0x1c27, +0x1885, 0x1d42, 0x196a, 0x1d42, 0x196a, 0x1e19, 0x1a0f, 0x1e19, 0x1a0f, 0x1e19, 0x1a0f, +0x2038, 0x1c03, 0x2038, 0x1c03, 0x216d, 0x1d14, 0x216d, 0x1d14, 0x23bf, 0x1f4c, 0x23bf, +0x1f4c, 0x26cc, 0x2249, 0x26cc, 0x2249, 0x262a, 0x21a0, 0x262a, 0x21a0, 0x2494, 0x2010, +0x2494, 0x2010, 0x2494, 0x2010, 0x23cc, 0x1f59, 0x23cc, 0x1f59, 0x210f, 0x1cba, 0x210f, +0x1cba, 0x1d3d, 0x1911, 0x1d3d, 0x1911, 0x1aa3, 0x16ac, 0x1aa3, 0x16ac, 0x1881, 0x14c8, +0x1881, 0x14c8, 0x1881, 0x14c8, 0x16d1, 0x1362, 0x16d1, 0x1362, 0x15fa, 0x12de, 0x15fa, +0x12de, 0x146c, 0x11a9, 0x146c, 0x11a9, 0x1209, 0xfa7, 0x1209, 0xfa7, 0xf1f, 0xd23, +0xf1f, 0xd23, 0xc7a, 0xae8, 0xc7a, 0xae8, 0xc7a, 0xae8, 0xa48, 0x921, 0xa48, +0x921, 0x684, 0x5c9, 0x684, 0x5c9, 0x2ed, 0x29c, 0x2ed, 0x29c, 0xffdf, 0xfff6, +0xffdf, 0xfff6, 0xfc14, 0xfc8f, 0xfc14, 0xfc8f, 0xf9e5, 0xfabf, 0xf9e5, 0xfabf, 0xf9e5, +0xfabf, 0xf8d3, 0xfa06, 0xf8d3, 0xfa06, 0xf7b0, 0xf934, 0xf7b0, 0xf934, 0xf6a7, 0xf875, +0xf6a7, 0xf875, 0xf66c, 0xf87a, 0xf66c, 0xf87a, 0xf57e, 0xf7c5, 0xf57e, 0xf7c5, 0xf57e, +0xf7c5, 0xf2ba, 0xf530, 0xf2ba, 0xf530, 0xf12c, 0xf3c7, 0xf12c, 0xf3c7, 0xefad, 0xf265, +0xefad, 0xf265, 0xeed4, 0xf1a0, 0xeed4, 0xf1a0, 0xefa9, 0xf281, 0xefa9, 0xf281, 0xef5e, +0xf23a, 0xef5e, 0xf23a, 0xef5e, 0xf23a, 0xeed0, 0xf1a9, 0xeed0, 0xf1a9, 0xee48, 0xf117, +0xee48, 0xf117, 0xedbd, 0xf07d, 0xedbd, 0xf07d, 0xecc7, 0xef72, 0xecc7, 0xef72, 0xeb22, +0xedb4, 0xeb22, 0xedb4, 0xeb4f, 0xedc4, 0xeb4f, 0xedc4, 0xeb4f, 0xedc4, 0xec50, 0xeea4, +0xec50, 0xeea4, 0xed28, 0xef5a, 0xed28, 0xef5a, 0xee8e, 0xf09b, 0xee8e, 0xf09b, 0xef4d, +0xf134, 0xef4d, 0xf134, 0xeef9, 0xf0b9, 0xeef9, 0xf0b9, 0xeef9, 0xf0b9, 0xee15, 0xefae, +0xee15, 0xefae, 0xeef4, 0xf064, 0xeef4, 0xf064, 0xf063, 0xf1ab, 0xf063, 0xf1ab, 0xf075, +0xf195, 0xf075, 0xf195, 0xf136, 0xf22f, 0xf136, 0xf22f, 0xf1f8, 0xf2cb, 0xf1f8, 0xf2cb, +0xf1f8, 0xf2cb, 0xf29d, 0xf34b, 0xf29d, 0xf34b, 0xf375, 0xf3ff, 0xf375, 0xf3ff, 0xf569, +0xf5d1, 0xf569, 0xf5d1, 0xf673, 0xf6ba, 0xf673, 0xf6ba, 0xf604, 0xf62d, 0xf604, 0xf62d, +0xf864, 0xf871, 0xf864, 0xf871, 0xf864, 0xf871, 0xf9c2, 0xf9b4, 0xf9c2, 0xf9b4, 0xf91b, +0xf8f8, 0xf91b, 0xf8f8, 0xf8fb, 0xf8c5, 0xf8fb, 0xf8c5, 0xfa26, 0xf9e0, 0xfa26, 0xf9e0, +0xfbd4, 0xfb83, 0xfbd4, 0xfb83, 0xfbd4, 0xfb83, 0xfc20, 0xfbc9, 0xfc20, 0xfbc9, 0xfd7a, +0xfd20, 0xfd7a, 0xfd20, 0xfdd0, 0xfd79, 0xfdd0, 0xfd79, 0xfcc5, 0xfc74, 0xfcc5, 0xfc74, +0xfd2a, 0xfce5, 0xfd2a, 0xfce5, 0xfdca, 0xfd97, 0xfdca, 0xfd97, 0xfdca, 0xfd97, 0xfca1, +0xfc83, 0xfca1, 0xfc83, 0xfb6d, 0xfb69, 0xfb6d, 0xfb69, 0xfcf4, 0xfd0e, 0xfcf4, 0xfd0e, +0xfceb, 0xfd26, 0xfceb, 0xfd26, 0xfba9, 0xfc09, 0xfba9, 0xfc09, 0xfbc1, 0xfc48, 0xfbc1, +0xfc48, 0xfbc1, 0xfc48, 0xf9ea, 0xfa9a, 0xf9ea, 0xfa9a, 0xf7de, 0xf8b8, 0xf7de, 0xf8b8, +0xf7c4, 0xf8c9, 0xf7c4, 0xf8c9, 0xf7ad, 0xf8dc, 0xf7ad, 0xf8dc, 0xf744, 0xf89d, 0xf744, +0xf89d, 0xf744, 0xf89d, 0xf6f7, 0xf877, 0xf6f7, 0xf877, 0xf74e, 0xf8f4, 0xf74e, 0xf8f4, +0xf735, 0xf8fe, 0xf735, 0xf8fe, 0xf533, 0xf71b, 0xf533, 0xf71b, 0xf322, 0xf526, 0xf322, +0xf526, 0xf20b, 0xf427, 0xf20b, 0xf427, 0xf20b, 0xf427, 0xf011, 0xf241, 0xf011, 0xf241, +0xedf3, 0xf033, 0xedf3, 0xf033, 0xedd4, 0xf021, 0xedd4, 0xf021, 0xebcf, 0xee24, 0xebcf, +0xee24, 0xe900, 0xeb5c, 0xe900, 0xeb5c, 0xe900, 0xeb5c, 0xe956, 0xebb5, 0xe956, 0xebb5, +0xe8d3, 0xeb33, 0xe8d3, 0xeb33, 0xe78e, 0xe9ef, 0xe78e, 0xe9ef, 0xe72b, 0xe98a, 0xe72b, +0xe98a, 0xe680, 0xe8de, 0xe680, 0xe8de, 0xe4ed, 0xe74b, 0xe4ed, 0xe74b, 0xe4ed, 0xe74b, +0xe407, 0xe665, 0xe407, 0xe665, 0xe445, 0xe6a5, 0xe445, 0xe6a5, 0xe47f, 0xe6e2, 0xe47f, +0xe6e2, 0xe524, 0xe78d, 0xe524, 0xe78d, 0xe52f, 0xe7a0, 0xe52f, 0xe7a0, 0xe685, 0xe8ff, +0xe685, 0xe8ff, 0xe685, 0xe8ff, 0xe703, 0xe98a, 0xe703, 0xe98a, 0xe596, 0xe82b, 0xe596, +0xe82b, 0xe695, 0xe939, 0xe695, 0xe939, 0xe681, 0xe935, 0xe681, 0xe935, 0xe4e5, 0xe7a9, +0xe4e5, 0xe7a9, 0xe4e5, 0xe7a9, 0xe566, 0xe839, 0xe566, 0xe839, 0xe55c, 0xe83c, 0xe55c, +0xe83c, 0xe402, 0xe6ed, 0xe402, 0xe6ed, 0xe420, 0xe713, 0xe420, 0xe713, 0xe481, 0xe776, +0xe481, 0xe776, 0xe47c, 0xe76f, 0xe47c, 0xe76f, 0xe47c, 0xe76f, 0xe4d9, 0xe7c5, 0xe4d9, +0xe7c5, 0xe539, 0xe815, 0xe539, 0xe815, 0xe613, 0xe8d9, 0xe613, 0xe8d9, 0xe731, 0xe9d8, +0xe731, 0xe9d8, 0xe7de, 0xea5f, 0xe7de, 0xea5f, 0xe841, 0xea94, 0xe841, 0xea94, 0xe841, +0xea94, 0xe95d, 0xeb7a, 0xe95d, 0xeb7a, 0xead3, 0xecb3, 0xead3, 0xecb3, 0xecf8, 0xee93, +0xecf8, 0xee93, 0xef6a, 0xf0bb, 0xef6a, 0xf0bb, 0xf22a, 0xf32b, 0xf22a, 0xf32b, 0xf22a, +0xf32b, 0xf614, 0xf6c1, 0xf614, 0xf6c1, 0xf904, 0xf95b, 0xf904, 0xf95b, 0xfb5c, 0xfb5a, +0xfb5c, 0xfb5a, 0xfd59, 0xfcfe, 0xfd59, 0xfcfe, 0xfed9, 0xfe25, 0xfed9, 0xfe25, 0x154, +0x4a, 0x154, 0x4a, 0x154, 0x4a, 0x4ae, 0x351, 0x4ae, 0x351, 0x799, 0x5ee, +0x799, 0x5ee, 0x901, 0x70e, 0x901, 0x70e, 0xa9c, 0x868, 0xa9c, 0x868, 0xde9, +0xb7b, 0xde9, 0xb7b, 0x10c7, 0xe27, 0x10c7, 0xe27, 0x10c7, 0xe27, 0x1202, 0xf39, +0x1202, 0xf39, 0x12b9, 0xfcf, 0x12b9, 0xfcf, 0x122f, 0xf2d, 0x122f, 0xf2d, 0x1194, +0xe83, 0x1194, 0xe83, 0x128b, 0xf73, 0x128b, 0xf73, 0x128b, 0xf73, 0x134f, 0x1037, +0x134f, 0x1037, 0x132f, 0x101e, 0x132f, 0x101e, 0x13c0, 0x10bd, 0x13c0, 0x10bd, 0x142e, +0x113d, 0x142e, 0x113d, 0x1431, 0x1157, 0x1431, 0x1157, 0x15d4, 0x1314, 0x15d4, 0x1314, +0x15d4, 0x1314, 0x1503, 0x1260, 0x1503, 0x1260, 0x1340, 0x10ba, 0x1340, 0x10ba, 0x13b8, +0x1150, 0x13b8, 0x1150, 0x12ea, 0x10a0, 0x12ea, 0x10a0, 0x12c0, 0x1093, 0x12c0, 0x1093, +0x1379, 0x1168, 0x1379, 0x1168, 0x1379, 0x1168, 0x133d, 0x1145, 0x133d, 0x1145, 0x12d1, +0x10f0, 0x12d1, 0x10f0, 0x1236, 0x106b, 0x1236, 0x106b, 0x1069, 0xeb1, 0x1069, 0xeb1, +0xf7b, 0xdd4, 0xf7b, 0xdd4, 0xf7b, 0xdd4, 0xfff, 0xe68, 0xfff, 0xe68, 0xf29, +0xda1, 0xf29, 0xda1, 0xf10, 0xd96, 0xf10, 0xd96, 0xf82, 0xe17, 0xf82, 0xe17, +0xf29, 0xdcd, 0xf29, 0xdcd, 0xf7b, 0xe2f, 0xf7b, 0xe2f, 0xf7b, 0xe2f, 0xf7a, +0xe40, 0xf7a, 0xe40, 0xf1e, 0xdf8, 0xf1e, 0xdf8, 0xfaa, 0xe9b, 0xfaa, 0xe9b, +0xea1, 0xdac, 0xea1, 0xdac, 0xd66, 0xc8e, 0xd66, 0xc8e, 0xdab, 0xcf3, 0xdab, +0xcf3, 0xdab, 0xcf3, 0xbd7, 0xb42, 0xbd7, 0xb42, 0xbdc, 0xb6c, 0xbdc, 0xb6c, +0xd9e, 0xd54, 0xd9e, 0xd54, 0xd24, 0xd03, 0xd24, 0xd03, 0xd22, 0xd2a, 0xd22, +0xd2a, 0xd22, 0xd2a, 0xd49, 0xd79, 0xd49, 0xd79, 0xbee, 0xc46, 0xbee, 0xc46, +0xa4a, 0xac7, 0xa4a, 0xac7, 0xa74, 0xb12, 0xa74, 0xb12, 0xa20, 0xadc, 0xa20, +0xadc, 0x8f0, 0x9c4, 0x8f0, 0x9c4, 0x8f0, 0x9c4, 0x866, 0x94c, 0x866, 0x94c, +0x77e, 0x86f, 0x77e, 0x86f, 0x705, 0x7fb, 0x705, 0x7fb, 0x59a, 0x68e, 0x59a, +0x68e, 0x4a8, 0x591, 0x4a8, 0x591, 0x4cc, 0x5a3, 0x4cc, 0x5a3, 0x4cc, 0x5a3, +0x326, 0x3e5, 0x326, 0x3e5, 0x30a, 0x3aa, 0x30a, 0x3aa, 0x4cc, 0x548, 0x4cc, +0x548, 0x560, 0x5b4, 0x560, 0x5b4, 0x5eb, 0x613, 0x5eb, 0x613, 0x5eb, 0x613, +0x69b, 0x695, 0x69b, 0x695, 0x694, 0x661, 0x694, 0x661, 0x5e5, 0x587, 0x5e5, +0x587, 0x6b3, 0x62c, 0x6b3, 0x62c, 0x86e, 0x7c2, 0x86e, 0x7c2, 0x8a9, 0x7df, +0x8a9, 0x7df, 0x8a9, 0x7df, 0x8dc, 0x7fb, 0x8dc, 0x7fb, 0x95a, 0x86a, 0x95a, +0x86a, 0x9b4, 0x8bf, 0x9b4, 0x8bf, 0x8cc, 0x7dc, 0x8cc, 0x7dc, 0x8f4, 0x814, +0x8f4, 0x814, 0xa5c, 0x996, 0xa5c, 0x996, 0xa5c, 0x996, 0x858, 0x7b6, 0x858, +0x7b6, 0x5e2, 0x56f, 0x5e2, 0x56f, 0x398, 0x35d, 0x398, 0x35d, 0x44, 0x48, +0x44, 0x48, 0xfe0a, 0xfe53, 0xfe0a, 0xfe53, 0xfe0a, 0xfe53, 0xfc79, 0xfd0d, 0xfc79, +0xfd0d, 0xfa2b, 0xfb0d, 0xfa2b, 0xfb0d, 0xf736, 0xf865, 0xf736, 0xf865, 0xf691, 0xf80e, +0xf691, 0xf80e, 0xf67e, 0xf845, 0xf67e, 0xf845, 0xf482, 0xf68f, 0xf482, 0xf68f, 0xf482, +0xf68f, 0xf2f4, 0xf53f, 0xf2f4, 0xf53f, 0xf188, 0xf409, 0xf188, 0xf409, 0xeeed, 0xf19a, +0xeeed, 0xf19a, 0xecb7, 0xef85, 0xecb7, 0xef85, 0xec55, 0xef37, 0xec55, 0xef37, 0xeb4d, +0xee36, 0xeb4d, 0xee36, 0xeb4d, 0xee36, 0xe90b, 0xebef, 0xe90b, 0xebef, 0xe92f, 0xec00, +0xe92f, 0xec00, 0xea5e, 0xed0f, 0xea5e, 0xed0f, 0xea7c, 0xed02, 0xea7c, 0xed02, 0xebbb, +0xee0a, 0xebbb, 0xee0a, 0xebbb, 0xee0a, 0xedb9, 0xefca, 0xedb9, 0xefca, 0xef01, 0xf0cb, +0xef01, 0xf0cb, 0xefae, 0xf12b, 0xefae, 0xf12b, 0xf0cb, 0xf1f6, 0xf0cb, 0xf1f6, 0xf1eb, +0xf2c4, 0xf1eb, 0xf2c4, 0xf2db, 0xf360, 0xf2db, 0xf360, 0xf2db, 0xf360, 0xf58d, 0xf5c1, +0xf58d, 0xf5c1, 0xf85b, 0xf842, 0xf85b, 0xf842, 0xf99a, 0xf938, 0xf99a, 0xf938, 0xfa84, +0xf9e1, 0xfa84, 0xf9e1, 0xfb5f, 0xfa82, 0xfb5f, 0xfa82, 0xfb5f, 0xfa82, 0xfae0, 0xf9d3, +0xfae0, 0xf9d3, 0xfafe, 0xf9c9, 0xfafe, 0xf9c9, 0xfd03, 0xfbaf, 0xfd03, 0xfbaf, 0xfdb2, +0xfc49, 0xfdb2, 0xfc49, 0xfea8, 0xfd33, 0xfea8, 0xfd33, 0x70, 0xfef5, 0x70, 0xfef5, +0x70, 0xfef5, 0x73, 0xfefa, 0x73, 0xfefa, 0x16, 0xfea5, 0x16, 0xfea5, 0x4f, +0xfeea, 0x4f, 0xfeea, 0x2f, 0xfed7, 0x2f, 0xfed7, 0x3b, 0xfef2, 0x3b, 0xfef2, +0xe5, 0xffaa, 0xe5, 0xffaa, 0xe5, 0xffaa, 0x16e, 0x3f, 0x16e, 0x3f, 0x297, +0x170, 0x297, 0x170, 0x3af, 0x28b, 0x3af, 0x28b, 0x515, 0x3ee, 0x515, 0x3ee, +0x75c, 0x62c, 0x75c, 0x62c, 0x75c, 0x62c, 0x7fe, 0x6bd, 0x7fe, 0x6bd, 0x835, +0x6dc, 0x835, 0x6dc, 0x9cf, 0x856, 0x9cf, 0x856, 0xb0f, 0x971, 0xb0f, 0x971, +0xc30, 0xa67, 0xc30, 0xa67, 0xe38, 0xc3e, 0xe38, 0xc3e, 0xe38, 0xc3e, 0xec3, +0xc96, 0xec3, 0xc96, 0xf44, 0xce1, 0xf44, 0xce1, 0x123e, 0xfa7, 0x123e, 0xfa7, +0x14fc, 0x1231, 0x14fc, 0x1231, 0x167f, 0x1383, 0x167f, 0x1383, 0x1716, 0x13ef, 0x1716, +0x13ef, 0x1716, 0x13ef, 0x171d, 0x13d3, 0x171d, 0x13d3, 0x16fb, 0x1395, 0x16fb, 0x1395, +0x1760, 0x13ea, 0x1760, 0x13ea, 0x1827, 0x14aa, 0x1827, 0x14aa, 0x1872, 0x14fb, 0x1872, +0x14fb, 0x1872, 0x14fb, 0x18d6, 0x1571, 0x18d6, 0x1571, 0x186d, 0x1526, 0x186d, 0x1526, +0x17da, 0x14be, 0x17da, 0x14be, 0x15ff, 0x1319, 0x15ff, 0x1319, 0x1280, 0xfdb, 0x1280, +0xfdb, 0x1148, 0xeee, 0x1148, 0xeee, 0x1148, 0xeee, 0x1084, 0xe7d, 0x1084, 0xe7d, +0xec4, 0xd16, 0xec4, 0xd16, 0xe44, 0xcf4, 0xe44, 0xcf4, 0xdf4, 0xd04, 0xdf4, +0xd04, 0xc83, 0xbf3, 0xc83, 0xbf3, 0xc1c, 0xbeb, 0xc1c, 0xbeb, 0xc1c, 0xbeb, +0xbe3, 0xc0d, 0xbe3, 0xc0d, 0x91b, 0x99c, 0x91b, 0x99c, 0x751, 0x820, 0x751, +0x820, 0x6c2, 0x7d6, 0x6c2, 0x7d6, 0x531, 0x680, 0x531, 0x680, 0x531, 0x680, +0x478, 0x5f7, 0x478, 0x5f7, 0x42e, 0x5d1, 0x42e, 0x5d1, 0x387, 0x542, 0x387, +0x542, 0x3b3, 0x579, 0x3b3, 0x579, 0x461, 0x625, 0x461, 0x625, 0x44a, 0x601, +0x44a, 0x601, 0x44a, 0x601, 0x43e, 0x5de, 0x43e, 0x5de, 0x3da, 0x558, 0x3da, +0x558, 0x3a5, 0x4f8, 0x3a5, 0x4f8, 0x4fa, 0x61c, 0x4fa, 0x61c, 0x5e1, 0x6cb, +0x5e1, 0x6cb, 0x6f3, 0x7a1, 0x6f3, 0x7a1, 0x6f3, 0x7a1, 0x8f0, 0x960, 0x8f0, +0x960, 0xa92, 0xac2, 0xa92, 0xac2, 0xb63, 0xb54, 0xb63, 0xb54, 0xc26, 0xbda, +0xc26, 0xbda, 0xc00, 0xb79, 0xc00, 0xb79, 0xc00, 0xb79, 0xb1c, 0xa5f, 0xb1c, +0xa5f, 0xc81, 0xb92, 0xc81, 0xb92, 0xd8b, 0xc70, 0xd8b, 0xc70, 0xdc0, 0xc7e, +0xdc0, 0xc7e, 0xe65, 0xd02, 0xe65, 0xd02, 0xdf1, 0xc74, 0xdf1, 0xc74, 0xdf1, +0xc74, 0xdd8, 0xc46, 0xdd8, 0xc46, 0xddf, 0xc3e, 0xddf, 0xc3e, 0xd77, 0xbca, +0xd77, 0xbca, 0xcc3, 0xb10, 0xcc3, 0xb10, 0xc6b, 0xab6, 0xc6b, 0xab6, 0xc16, +0xa61, 0xc16, 0xa61, 0xc16, 0xa61, 0xb9a, 0x9e7, 0xb9a, 0x9e7, 0xbef, 0xa40, +0xbef, 0xa40, 0xaaf, 0x906, 0xaaf, 0x906, 0x9d1, 0x82d, 0x9d1, 0x82d, 0xa42, +0x8a4, 0xa42, 0x8a4, 0xa42, 0x8a4, 0x9f0, 0x858, 0x9f0, 0x858, 0xaef, 0x95d, +0xaef, 0x95d, 0xbf4, 0xa68, 0xbf4, 0xa68, 0xbbc, 0xa35, 0xbbc, 0xa35, 0xb65, +0x9e4, 0xb65, 0x9e4, 0xab1, 0x936, 0xab1, 0x936, 0xab1, 0x936, 0x9aa, 0x837, +0x9aa, 0x837, 0x92f, 0x7c5, 0x92f, 0x7c5, 0x9a5, 0x846, 0x9a5, 0x846, 0x92a, +0x7d9, 0x92a, 0x7d9, 0x81d, 0x6de, 0x81d, 0x6de, 0x72e, 0x606, 0x72e, 0x606, +0x72e, 0x606, 0x571, 0x463, 0x571, 0x463, 0x485, 0x396, 0x485, 0x396, 0x3bc, +0x2f1, 0x3bc, 0x2f1, 0x228, 0x188, 0x228, 0x188, 0x126, 0xb5, 0x126, 0xb5, +0x126, 0xb5, 0xff4f, 0xff11, 0xff4f, 0xff11, 0xfd29, 0xfd24, 0xfd29, 0xfd24, 0xfc75, +0xfcad, 0xfc75, 0xfcad, 0xfb28, 0xfba0, 0xfb28, 0xfba0, 0xf974, 0xfa2e, 0xf974, 0xfa2e, +0xf883, 0xf983, 0xf883, 0xf983, 0xf883, 0xf983, 0xf770, 0xf8b5, 0xf770, 0xf8b5, 0xf685, +0xf80f, 0xf685, 0xf80f, 0xf51f, 0xf6ee, 0xf51f, 0xf6ee, 0xf2bd, 0xf4cf, 0xf2bd, 0xf4cf, +0xf0cb, 0xf31b, 0xf0cb, 0xf31b, 0xefdd, 0xf269, 0xefdd, 0xf269, 0xefdd, 0xf269, 0xee7d, +0xf13f, 0xee7d, 0xf13f, 0xecec, 0xefde, 0xecec, 0xefde, 0xec0a, 0xef26, 0xec0a, 0xef26, +0xea42, 0xed81, 0xea42, 0xed81, 0xe836, 0xeb91, 0xe836, 0xeb91, 0xe836, 0xeb91, 0xe6d0, +0xea40, 0xe6d0, 0xea40, 0xe636, 0xe9b4, 0xe636, 0xe9b4, 0xe614, 0xe998, 0xe614, 0xe998, +0xe57c, 0xe8ff, 0xe57c, 0xe8ff, 0xe536, 0xe8b2, 0xe536, 0xe8b2, 0xe53d, 0xe8ac, 0xe53d, +0xe8ac, 0xe53d, 0xe8ac, 0xe517, 0xe873, 0xe517, 0xe873, 0xe501, 0xe847, 0xe501, 0xe847, +0xe529, 0xe854, 0xe529, 0xe854, 0xe52f, 0xe83b, 0xe52f, 0xe83b, 0xe5a8, 0xe894, 0xe5a8, +0xe894, 0xe5ee, 0xe8b8, 0xe5ee, 0xe8b8, 0xe5ee, 0xe8b8, 0xe599, 0xe840, 0xe599, 0xe840, +0xe605, 0xe888, 0xe605, 0xe888, 0xe672, 0xe8d1, 0xe672, 0xe8d1, 0xe72e, 0xe969, 0xe72e, +0xe969, 0xe854, 0xea6c, 0xe854, 0xea6c, 0xe854, 0xea6c, 0xe99f, 0xeb94, 0xe99f, 0xeb94, +0xeaff, 0xecd3, 0xeaff, 0xecd3, 0xec36, 0xedea, 0xec36, 0xedea, 0xed19, 0xeeab, 0xed19, +0xeeab, 0xed83, 0xeef6, 0xed83, 0xeef6, 0xee22, 0xef75, 0xee22, 0xef75, 0xee22, 0xef75, +0xee75, 0xefa7, 0xee75, 0xefa7, 0xefcf, 0xf0e1, 0xefcf, 0xf0e1, 0xf12b, 0xf21c, 0xf12b, +0xf21c, 0xf102, 0xf1d1, 0xf102, 0xf1d1, 0xf16f, 0xf21b, 0xf16f, 0xf21b, 0xf16f, 0xf21b, +0xf25b, 0xf2e4, 0xf25b, 0xf2e4, 0xf2e5, 0xf34a, 0xf2e5, 0xf34a, 0xf326, 0xf365, 0xf326, +0xf365, 0xf411, 0xf42a, 0xf411, 0xf42a, 0xf512, 0xf505, 0xf512, 0xf505, 0xf604, 0xf5d2, +0xf604, 0xf5d2, 0xf604, 0xf5d2, 0xf7e5, 0xf78f, 0xf7e5, 0xf78f, 0xf981, 0xf909, 0xf981, +0xf909, 0xf9e6, 0xf94e, 0xf9e6, 0xf94e, 0xf953, 0xf89f, 0xf953, 0xf89f, 0xf8a9, 0xf7de, +0xf8a9, 0xf7de, 0xf8e3, 0xf805, 0xf8e3, 0xf805, 0xf8e3, 0xf805, 0xf9c3, 0xf8d9, 0xf9c3, +0xf8d9, 0xfabf, 0xf9d0, 0xfabf, 0xf9d0, 0xfbce, 0xfae0, 0xfbce, 0xfae0, 0xfbfd, 0xfb1a, +0xfbfd, 0xfb1a, 0xfc47, 0xfb77, 0xfc47, 0xfb77, 0xfc47, 0xfb77, 0xfd41, 0xfc8d, 0xfd41, +0xfc8d, 0xfd3c, 0xfcac, 0xfd3c, 0xfcac, 0xfc70, 0xfc0d, 0xfc70, 0xfc0d, 0xfb76, 0xfb49, +0xfb76, 0xfb49, 0xfab7, 0xfac7, 0xfab7, 0xfac7, 0xf8bf, 0xf913, 0xf8bf, 0xf913, 0xf8bf, +0xf913, 0xf627, 0xf6c6, 0xf627, 0xf6c6, 0xf4ca, 0xf5b7, 0xf4ca, 0xf5b7, 0xf2a6, 0xf3e6, +0xf2a6, 0xf3e6, 0xf10d, 0xf2a1, 0xf10d, 0xf2a1, 0xf0c1, 0xf2ab, 0xf0c1, 0xf2ab, 0xefa8, +0xf1e7, 0xefa8, 0xf1e7, 0xefa8, 0xf1e7, 0xeedd, 0xf16e, 0xeedd, 0xf16e, 0xee19, 0xf0f7, +0xee19, 0xf0f7, 0xec89, 0xefb0, 0xec89, 0xefb0, 0xeb63, 0xeecc, 0xeb63, 0xeecc, 0xea80, +0xee23, 0xea80, 0xee23, 0xea80, 0xee23, 0xe926, 0xecfa, 0xe926, 0xecfa, 0xe858, 0xec53, +0xe858, 0xec53, 0xe7c4, 0xebdb, 0xe7c4, 0xebdb, 0xe65b, 0xea82, 0xe65b, 0xea82, 0xe67b, +0xeaa8, 0xe67b, 0xeaa8, 0xe6af, 0xead6, 0xe6af, 0xead6, 0xe6af, 0xead6, 0xe665, 0xea7c, +0xe665, 0xea7c, 0xe83f, 0xec39, 0xe83f, 0xec39, 0xe91e, 0xecf2, 0xe91e, 0xecf2, 0xe947, +0xeceb, 0xe947, 0xeceb, 0xea91, 0xedfd, 0xea91, 0xedfd, 0xeb49, 0xee75, 0xeb49, 0xee75, +0xeb49, 0xee75, 0xec18, 0xeefe, 0xec18, 0xeefe, 0xeef3, 0xf18e, 0xeef3, 0xf18e, 0xf14d, +0xf397, 0xf14d, 0xf397, 0xf2b0, 0xf4a7, 0xf2b0, 0xf4a7, 0xf5e7, 0xf789, 0xf5e7, 0xf789, +0xf5e7, 0xf789, 0xf76b, 0xf8b5, 0xf76b, 0xf8b5, 0xf8b3, 0xf9a5, 0xf8b3, 0xf9a5, 0xfaa8, +0xfb43, 0xfaa8, 0xfb43, 0xfb3a, 0xfb7f, 0xfb3a, 0xfb7f, 0xfda3, 0xfd93, 0xfda3, 0xfd93, +0x2b, 0xffc6, 0x2b, 0xffc6, 0x2b, 0xffc6, 0x1ad, 0xf6, 0x1ad, 0xf6, 0x43b, +0x334, 0x43b, 0x334, 0x705, 0x5af, 0x705, 0x5af, 0x804, 0x661, 0x804, 0x661, +0x95d, 0x76f, 0x95d, 0x76f, 0xb23, 0x8ec, 0xb23, 0x8ec, 0xb23, 0x8ec, 0xb3b, +0x8bc, 0xb3b, 0x8bc, 0xd69, 0xaa2, 0xd69, 0xaa2, 0x1058, 0xd4b, 0x1058, 0xd4b, +0x11cf, 0xe7e, 0x11cf, 0xe7e, 0x13ed, 0x1058, 0x13ed, 0x1058, 0x13ed, 0x1058, 0x15d5, +0x11fe, 0x15d5, 0x11fe, 0x1710, 0x12fa, 0x1710, 0x12fa, 0x190b, 0x14b8, 0x190b, 0x14b8, +0x1afb, 0x166d, 0x1afb, 0x166d, 0x1c18, 0x1753, 0x1c18, 0x1753, 0x1e42, 0x194b, 0x1e42, +0x194b, 0x1e42, 0x194b, 0x2065, 0x1b41, 0x2065, 0x1b41, 0x21b1, 0x1c66, 0x21b1, 0x1c66, +0x2314, 0x1da9, 0x2314, 0x1da9, 0x239f, 0x1e1c, 0x239f, 0x1e1c, 0x24b1, 0x1f1f, 0x24b1, +0x1f1f, 0x2682, 0x20e9, 0x2682, 0x20e9, 0x2682, 0x20e9, 0x270c, 0x2178, 0x270c, 0x2178, +0x26dc, 0x2156, 0x26dc, 0x2156, 0x25d8, 0x206b, 0x25d8, 0x206b, 0x2401, 0x1eb8, 0x2401, +0x1eb8, 0x2375, 0x1e5a, 0x2375, 0x1e5a, 0x2375, 0x1e5a, 0x241e, 0x1f3b, 0x241e, 0x1f3b, +0x234b, 0x1eab, 0x234b, 0x1eab, 0x2190, 0x1d3b, 0x2190, 0x1d3b, 0x20eb, 0x1ce9, 0x20eb, +0x1ce9, 0x1f03, 0x1b5a, 0x1f03, 0x1b5a, 0x1c14, 0x18ca, 0x1c14, 0x18ca, 0x1c14, 0x18ca, +0x1a08, 0x1721, 0x1a08, 0x1721, 0x1738, 0x14b6, 0x1738, 0x14b6, 0x13d2, 0x11b5, 0x13d2, +0x11b5, 0x1204, 0x104c, 0x1204, 0x104c, 0x10ab, 0xf55, 0x10ab, 0xf55, 0xe27, 0xd30, +0xe27, 0xd30, 0xe27, 0xd30, 0xc1e, 0xb80, 0xc1e, 0xb80, 0x954, 0x90a, 0x954, +0x90a, 0x5b4, 0x5b5, 0x5b4, 0x5b5, 0x2ae, 0x2f3, 0x2ae, 0x2f3, 0xff75, 0xfff5, +0xff75, 0xfff5, 0xff75, 0xfff5, 0xfd13, 0xfdc6, 0xfd13, 0xfdc6, 0xfaa5, 0xfb81, 0xfaa5, +0xfb81, 0xf7c7, 0xf8c5, 0xf7c7, 0xf8c5, 0xf64e, 0xf765, 0xf64e, 0xf765, 0xf53e, 0xf666, +0xf53e, 0xf666, 0xf381, 0xf4b5, 0xf381, 0xf4b5, 0xf381, 0xf4b5, 0xf2f7, 0xf431, 0xf2f7, +0xf431, 0xf29e, 0xf3da, 0xf29e, 0xf3da, 0xf0e3, 0xf21f, 0xf0e3, 0xf21f, 0xf087, 0xf1c0, +0xf087, 0xf1c0, 0xf0b9, 0xf1ee, 0xf0b9, 0xf1ee, 0xefc2, 0xf0f5, 0xefc2, 0xf0f5, 0xefc2, +0xf0f5, 0xf05c, 0xf18f, 0xf05c, 0xf18f, 0xf1f6, 0xf32b, 0xf1f6, 0xf32b, 0xf219, 0xf354, +0xf219, 0xf354, 0xf2d4, 0xf419, 0xf2d4, 0xf419, 0xf2f8, 0xf44b, 0xf2f8, 0xf44b, 0xf2f8, +0xf44b, 0xf1e7, 0xf34c, 0xf1e7, 0xf34c, 0xf1cc, 0xf346, 0xf1cc, 0xf346, 0xf0eb, 0xf27f, +0xf0eb, 0xf27f, 0xf05e, 0xf20e, 0xf05e, 0xf20e, 0xf079, 0xf246, 0xf079, 0xf246, 0xf0a0, +0xf28c, 0xf0a0, 0xf28c, 0xf0a0, 0xf28c, 0xf18b, 0xf395, 0xf18b, 0xf395, 0xf1c9, 0xf3ef, +0xf1c9, 0xf3ef, 0xf114, 0xf353, 0xf114, 0xf353, 0xf0b4, 0xf307, 0xf0b4, 0xf307, 0xf08e, +0xf2ef, 0xf08e, 0xf2ef, 0xef04, 0xf16b, 0xef04, 0xf16b, 0xef04, 0xf16b, 0xee53, 0xf0b8, +0xee53, 0xf0b8, 0xef3d, 0xf199, 0xef3d, 0xf199, 0xef55, 0xf19c, 0xef55, 0xf19c, 0xf047, +0xf270, 0xf047, 0xf270, 0xf1f0, 0xf3f0, 0xf1f0, 0xf3f0, 0xf1f0, 0xf3f0, 0xf253, 0xf420, +0xf253, 0xf420, 0xf39e, 0xf52f, 0xf39e, 0xf52f, 0xf68a, 0xf7d7, 0xf68a, 0xf7d7, 0xf9c8, +0xfac8, 0xf9c8, 0xfac8, 0xfcb3, 0xfd60, 0xfcb3, 0xfd60, 0xfead, 0xff03, 0xfead, 0xff03, +0xfead, 0xff03, 0xae, 0xa8, 0xae, 0xa8, 0x2c8, 0x266, 0x2c8, 0x266, 0x50d, +0x44f, 0x50d, 0x44f, 0x77d, 0x665, 0x77d, 0x665, 0x9b3, 0x846, 0x9b3, 0x846, +0x9b3, 0x846, 0xb72, 0x9b6, 0xb72, 0x9b6, 0xd11, 0xb0d, 0xd11, 0xb0d, 0xe81, +0xc3f, 0xe81, 0xc3f, 0xe1c, 0xba7, 0xe1c, 0xba7, 0xec5, 0xc27, 0xec5, 0xc27, +0x1024, 0xd6a, 0x1024, 0xd6a, 0x1024, 0xd6a, 0xffe, 0xd34, 0xffe, 0xd34, 0x103b, +0xd6e, 0x103b, 0xd6e, 0xfe1, 0xd1e, 0xfe1, 0xd1e, 0xeba, 0xc0c, 0xeba, 0xc0c, +0xdca, 0xb3c, 0xdca, 0xb3c, 0xd87, 0xb23, 0xd87, 0xb23, 0xd87, 0xb23, 0xcfe, +0xacd, 0xcfe, 0xacd, 0xb95, 0x99e, 0xb95, 0x99e, 0xa9f, 0x8e8, 0xa9f, 0x8e8, +0xa0a, 0x895, 0xa0a, 0x895, 0x9e3, 0x8b4, 0x9e3, 0x8b4, 0x9e3, 0x8b4, 0x9b3, +0x8ca, 0x9b3, 0x8ca, 0x8bd, 0x818, 0x8bd, 0x818, 0x7de, 0x77c, 0x7de, 0x77c, +0x681, 0x65d, 0x681, 0x65d, 0x56e, 0x583, 0x56e, 0x583, 0x567, 0x5af, 0x567, +0x5af, 0x567, 0x5af, 0x415, 0x48a, 0x415, 0x48a, 0x2b9, 0x352, 0x2b9, 0x352, +0x1d0, 0x286, 0x1d0, 0x286, 0x8b, 0x157, 0x8b, 0x157, 0xff8b, 0x66, 0xff8b, +0x66, 0xff3a, 0x1e, 0xff3a, 0x1e, 0xff3a, 0x1e, 0xff7f, 0x65, 0xff7f, 0x65, +0xff43, 0x26, 0xff43, 0x26, 0xfff3, 0xcf, 0xfff3, 0xcf, 0xffdb, 0xac, 0xffdb, +0xac, 0xfef4, 0xffb9, 0xfef4, 0xffb9, 0xfef4, 0xffb9, 0xfef5, 0xffad, 0xfef5, 0xffad, +0xfebc, 0xff66, 0xfebc, 0xff66, 0xff9f, 0x3c, 0xff9f, 0x3c, 0x8f, 0x11f, 0x8f, +0x11f, 0xc9, 0x14f, 0xc9, 0x14f, 0x119, 0x197, 0x119, 0x197, 0x119, 0x197, +0x158, 0x1d1, 0x158, 0x1d1, 0x171, 0x1e5, 0x171, 0x1e5, 0x250, 0x2c3, 0x250, +0x2c3, 0x35d, 0x3d0, 0x35d, 0x3d0, 0x323, 0x397, 0x323, 0x397, 0x3c8, 0x43d, +0x3c8, 0x43d, 0x3c8, 0x43d, 0x4e0, 0x556, 0x4e0, 0x556, 0x509, 0x57e, 0x509, +0x57e, 0x581, 0x5f3, 0x581, 0x5f3, 0x611, 0x67c, 0x611, 0x67c, 0x64d, 0x6ac, +0x64d, 0x6ac, 0x64d, 0x6ac, 0x7a9, 0x7f8, 0x7a9, 0x7f8, 0x88a, 0x8c3, 0x88a, +0x8c3, 0x867, 0x883, 0x867, 0x883, 0x995, 0x98e, 0x995, 0x98e, 0xa67, 0xa35, +0xa67, 0xa35, 0xae7, 0xa84, 0xae7, 0xa84, 0xae7, 0xa84, 0xc36, 0xb9b, 0xc36, +0xb9b, 0xdc7, 0xcee, 0xdc7, 0xcee, 0xf6e, 0xe51, 0xf6e, 0xe51, 0x11a9, 0x1045, +0x11a9, 0x1045, 0x1343, 0x1195, 0x1343, 0x1195, 0x132b, 0x1131, 0x132b, 0x1131, 0x132b, +0x1131, 0x140f, 0x11c9, 0x140f, 0x11c9, 0x1596, 0x1305, 0x1596, 0x1305, 0x17bc, 0x14e3, +0x17bc, 0x14e3, 0x1ade, 0x17c2, 0x1ade, 0x17c2, 0x1c0f, 0x18b7, 0x1c0f, 0x18b7, 0x1c0f, +0x18b7, 0x1c96, 0x1909, 0x1c96, 0x1909, 0x1e06, 0x1a4e, 0x1e06, 0x1a4e, 0x1ecd, 0x1af3, +0x1ecd, 0x1af3, 0x1f7c, 0x1b8c, 0x1f7c, 0x1b8c, 0x1f7b, 0x1b7f, 0x1f7b, 0x1b7f, 0x1e55, +0x1a5b, 0x1e55, 0x1a5b, 0x1e55, 0x1a5b, 0x1deb, 0x19fe, 0x1deb, 0x19fe, 0x1d86, 0x19b3, +0x1d86, 0x19b3, 0x1beb, 0x183e, 0x1beb, 0x183e, 0x1a3c, 0x16c0, 0x1a3c, 0x16c0, 0x192c, +0x15eb, 0x192c, 0x15eb, 0x16f0, 0x13f3, 0x16f0, 0x13f3, 0x16f0, 0x13f3, 0x158f, 0x12df, +0x158f, 0x12df, 0x14d8, 0x127c, 0x14d8, 0x127c, 0x121f, 0x101b, 0x121f, 0x101b, 0x1046, +0xe9e, 0x1046, 0xe9e, 0xe59, 0xd0f, 0xe59, 0xd0f, 0xe59, 0xd0f, 0xbc9, 0xadd, +0xbc9, 0xadd, 0x9c7, 0x938, 0x9c7, 0x938, 0x71a, 0x6e5, 0x71a, 0x6e5, 0x3b9, +0x3da, 0x3b9, 0x3da, 0x171, 0x1e4, 0x171, 0x1e4, 0x73, 0x131, 0x73, 0x131, +0x73, 0x131, 0xfe6e, 0xff70, 0xfe6e, 0xff70, 0xfc46, 0xfd86, 0xfc46, 0xfd86, 0xf9cb, +0xfb41, 0xf9cb, 0xfb41, 0xf76d, 0xf911, 0xf76d, 0xf911, 0xf6a4, 0xf86f, 0xf6a4, 0xf86f, +0xf5da, 0xf7c3, 0xf5da, 0xf7c3, 0xf5da, 0xf7c3, 0xf4a9, 0xf6aa, 0xf4a9, 0xf6aa, 0xf359, +0xf56c, 0xf359, 0xf56c, 0xf16a, 0xf389, 0xf16a, 0xf389, 0xf011, 0xf237, 0xf011, 0xf237, +0xf003, 0xf22a, 0xf003, 0xf22a, 0xf003, 0xf22a, 0xef0a, 0xf130, 0xef0a, 0xf130, 0xee5c, +0xf07e, 0xee5c, 0xf07e, 0xee8e, 0xf0a9, 0xee8e, 0xf0a9, 0xede3, 0xeff6, 0xede3, 0xeff6, +0xed75, 0xef7f, 0xed75, 0xef7f, 0xed84, 0xef84, 0xed84, 0xef84, 0xed84, 0xef84, 0xecfd, +0xeef4, 0xecfd, 0xeef4, 0xed41, 0xef2e, 0xed41, 0xef2e, 0xef3c, 0xf11f, 0xef3c, 0xf11f, +0xf018, 0xf1f1, 0xf018, 0xf1f1, 0xf06b, 0xf23c, 0xf06b, 0xf23c, 0xf0b5, 0xf27d, 0xf0b5, +0xf27d, 0xf0b5, 0xf27d, 0xeffa, 0xf1b9, 0xeffa, 0xf1b9, 0xf032, 0xf1e7, 0xf032, 0xf1e7, +0xf11f, 0xf2cb, 0xf11f, 0xf2cb, 0xf101, 0xf2a3, 0xf101, 0xf2a3, 0xf048, 0xf1de, 0xf048, +0xf1de, 0xf048, 0xf1de, 0xf0e2, 0xf26b, 0xf0e2, 0xf26b, 0xf217, 0xf392, 0xf217, 0xf392, +0xf2cc, 0xf438, 0xf2cc, 0xf438, 0xf2f0, 0xf44b, 0xf2f0, 0xf44b, 0xf308, 0xf451, 0xf308, +0xf451, 0xf448, 0xf57e, 0xf448, 0xf57e, 0xf448, 0xf57e, 0xf591, 0xf6b4, 0xf591, 0xf6b4, +0xf662, 0xf770, 0xf662, 0xf770, 0xf7a1, 0xf89b, 0xf7a1, 0xf89b, 0xf8b7, 0xf99c, 0xf8b7, +0xf99c, 0xf927, 0xf9f9, 0xf927, 0xf9f9, 0xf9db, 0xfa9c, 0xf9db, 0xfa9c, 0xf9db, 0xfa9c, +0xfa29, 0xfada, 0xfa29, 0xfada, 0xf9bf, 0xfa62, 0xf9bf, 0xfa62, 0xfa4d, 0xfae5, 0xfa4d, +0xfae5, 0xfb5f, 0xfbef, 0xfb5f, 0xfbef, 0xfb12, 0xfb9e, 0xfb12, 0xfb9e, 0xfb12, 0xfb9e, +0xfa7d, 0xfb08, 0xfa7d, 0xfb08, 0xfa5f, 0xfaee, 0xfa5f, 0xfaee, 0xfa07, 0xfa9e, 0xfa07, +0xfa9e, 0xfb17, 0xfbb9, 0xfb17, 0xfbb9, 0xfc47, 0xfcf8, 0xfc47, 0xfcf8, 0xfbfd, 0xfcc1, +0xfbfd, 0xfcc1, 0xfbfd, 0xfcc1, 0xfb4b, 0xfc25, 0xfb4b, 0xfc25, 0xfa6a, 0xfb5c, 0xfa6a, +0xfb5c, 0xf9c3, 0xfad1, 0xf9c3, 0xfad1, 0xf98c, 0xfab6, 0xf98c, 0xfab6, 0xf8d4, 0xfa1c, +0xf8d4, 0xfa1c, 0xf8d4, 0xfa1c, 0xf7c3, 0xf929, 0xf7c3, 0xf929, 0xf7da, 0xf95d, 0xf7da, +0xf95d, 0xf7bf, 0xf960, 0xf7bf, 0xf960, 0xf775, 0xf931, 0xf775, 0xf931, 0xf714, 0xf8ea, +0xf714, 0xf8ea, 0xf4c4, 0xf6b2, 0xf4c4, 0xf6b2, 0xf4c4, 0xf6b2, 0xf286, 0xf48a, 0xf286, +0xf48a, 0xf1ff, 0xf415, 0xf1ff, 0xf415, 0xf104, 0xf32b, 0xf104, 0xf32b, 0xef2f, 0xf164, +0xef2f, 0xf164, 0xee28, 0xf067, 0xee28, 0xf067, 0xec51, 0xee99, 0xec51, 0xee99, 0xec51, +0xee99, 0xeaae, 0xecfc, 0xeaae, 0xecfc, 0xea85, 0xecd8, 0xea85, 0xecd8, 0xe8e8, 0xeb3e, +0xe8e8, 0xeb3e, 0xe6d9, 0xe932, 0xe6d9, 0xe932, 0xe67f, 0xe8d9, 0xe67f, 0xe8d9, 0xe67f, +0xe8d9, 0xe698, 0xe8f4, 0xe698, 0xe8f4, 0xe624, 0xe882, 0xe624, 0xe882, 0xe582, 0xe7e3, +0xe582, 0xe7e3, 0xe4c2, 0xe727, 0xe4c2, 0xe727, 0xe502, 0xe76c, 0xe502, 0xe76c, 0xe60b, +0xe87b, 0xe60b, 0xe87b, 0xe60b, 0xe87b, 0xe6ae, 0xe927, 0xe6ae, 0xe927, 0xe6df, 0xe960, +0xe6df, 0xe960, 0xe5c2, 0xe84d, 0xe5c2, 0xe84d, 0xe433, 0xe6c8, 0xe433, 0xe6c8, 0xe3ef, +0xe68e, 0xe3ef, 0xe68e, 0xe415, 0xe6be, 0xe415, 0xe6be, 0xe415, 0xe6be, 0xe375, 0xe627, +0xe375, 0xe627, 0xe3a1, 0xe65a, 0xe3a1, 0xe65a, 0xe454, 0xe712, 0xe454, 0xe712, 0xe4de, +0xe79d, 0xe4de, 0xe79d, 0xe54c, 0xe809, 0xe54c, 0xe809, 0xe54c, 0xe809, 0xe4c1, 0xe777, +0xe4c1, 0xe777, 0xe45a, 0xe704, 0xe45a, 0xe704, 0xe4e0, 0xe779, 0xe4e0, 0xe779, 0xe677, +0xe8f8, 0xe677, 0xe8f8, 0xe7ae, 0xea11, 0xe7ae, 0xea11, 0xe81f, 0xea5e, 0xe81f, 0xea5e, +0xe81f, 0xea5e, 0xe898, 0xeaac, 0xe898, 0xeaac, 0xe969, 0xeb4d, 0xe969, 0xeb4d, 0xeb99, +0xed45, 0xeb99, 0xed45, 0xedb8, 0xef29, 0xedb8, 0xef29, 0xef27, 0xf057, 0xef27, 0xf057, +0xf0ab, 0xf197, 0xf0ab, 0xf197, 0xf0ab, 0xf197, 0xf306, 0xf3ab, 0xf306, 0xf3ab, 0xf656, +0xf6b1, 0xf656, 0xf6b1, 0xf911, 0xf922, 0xf911, 0xf922, 0xfb2c, 0xfaf3, 0xfb2c, 0xfaf3, +0xfd4f, 0xfccd, 0xfd4f, 0xfccd, 0xfd4f, 0xfccd, 0xffd3, 0xff0b, 0xffd3, 0xff0b, 0x2d5, +0x1cb, 0x2d5, 0x1cb, 0x560, 0x418, 0x560, 0x418, 0x7f2, 0x671, 0x7f2, 0x671, +0xa0a, 0x856, 0xa0a, 0x856, 0xb05, 0x925, 0xb05, 0x925, 0xb05, 0x925, 0xd0f, +0xb0a, 0xd0f, 0xb0a, 0xe4e, 0xc2b, 0xe4e, 0xc2b, 0xddf, 0xba5, 0xddf, 0xba5, +0xe20, 0xbd7, 0xe20, 0xbd7, 0xf65, 0xd13, 0xf65, 0xd13, 0x1063, 0xe0f, 0x1063, +0xe0f, 0x1063, 0xe0f, 0xfec, 0xd9b, 0xfec, 0xd9b, 0xf6b, 0xd22, 0xf6b, 0xd22, +0xedc, 0xca0, 0xedc, 0xca0, 0xf1b, 0xcee, 0xf1b, 0xcee, 0x10c4, 0xea8, 0x10c4, +0xea8, 0x10c4, 0xea8, 0x11b1, 0xfa8, 0x11b1, 0xfa8, 0x11e5, 0xfef, 0x11e5, 0xfef, +0x1258, 0x1074, 0x1258, 0x1074, 0x131a, 0x1147, 0x131a, 0x1147, 0x1359, 0x1194, 0x1359, +0x1194, 0x1325, 0x116c, 0x1325, 0x116c, 0x1325, 0x116c, 0x12b4, 0x1104, 0x12b4, 0x1104, +0x121b, 0x1071, 0x121b, 0x1071, 0x1202, 0x1059, 0x1202, 0x1059, 0x1249, 0x109f, 0x1249, +0x109f, 0x1213, 0x1064, 0x1213, 0x1064, 0x1141, 0xf8b, 0x1141, 0xf8b, 0x1141, 0xf8b, +0x108b, 0xecc, 0x108b, 0xecc, 0x10f0, 0xf26, 0x10f0, 0xf26, 0x11f3, 0x101d, 0x11f3, +0x101d, 0x11d9, 0xff8, 0x11d9, 0xff8, 0x1147, 0xf5b, 0x1147, 0xf5b, 0x1147, 0xf5b, +0x1088, 0xe93, 0x1088, 0xe93, 0x1017, 0xe1b, 0x1017, 0xe1b, 0x1080, 0xe81, 0x1080, +0xe81, 0x10b6, 0xeb6, 0x10b6, 0xeb6, 0x100c, 0xe11, 0x100c, 0xe11, 0x103b, 0xe49, +0x103b, 0xe49, 0x103b, 0xe49, 0x11c2, 0xfde, 0x11c2, 0xfde, 0x110a, 0xf37, 0x110a, +0xf37, 0xf97, 0xddb, 0xf97, 0xddb, 0xec9, 0xd28, 0xec9, 0xd28, 0xd86, 0xc03, +0xd86, 0xc03, 0xd5d, 0xbfc, 0xd5d, 0xbfc, 0xd5d, 0xbfc, 0xda4, 0xc67, 0xda4, +0xc67, 0xd1d, 0xc05, 0xd1d, 0xc05, 0xc22, 0xb30, 0xc22, 0xb30, 0xb49, 0xa7d, +0xb49, 0xa7d, 0xa28, 0x980, 0xa28, 0x980, 0xa28, 0x980, 0x92a, 0x8a3, 0x92a, +0x8a3, 0x757, 0x6ef, 0x757, 0x6ef, 0x4bd, 0x46f, 0x4bd, 0x46f, 0x3ca, 0x391, +0x3ca, 0x391, 0x315, 0x2ed, 0x315, 0x2ed, 0x206, 0x1e9, 0x206, 0x1e9, 0x206, +0x1e9, 0x1e6, 0x1ce, 0x1e6, 0x1ce, 0x1a1, 0x18a, 0x1a1, 0x18a, 0x159, 0x13d, +0x159, 0x13d, 0x32a, 0x305, 0x32a, 0x305, 0x48a, 0x458, 0x48a, 0x458, 0x3f9, +0x3b7, 0x3f9, 0x3b7, 0x3f9, 0x3b7, 0x425, 0x3d0, 0x425, 0x3d0, 0x45b, 0x3f3, +0x45b, 0x3f3, 0x4c6, 0x44b, 0x4c6, 0x44b, 0x65c, 0x5d0, 0x65c, 0x5d0, 0x6bc, +0x621, 0x6bc, 0x621, 0x6bc, 0x621, 0x65c, 0x5b5, 0x65c, 0x5b5, 0x7ea, 0x73d, +0x7ea, 0x73d, 0x960, 0x8b2, 0x960, 0x8b2, 0x938, 0x88f, 0x938, 0x88f, 0x8d6, +0x838, 0x8d6, 0x838, 0x817, 0x78d, 0x817, 0x78d, 0x817, 0x78d, 0x6f7, 0x687, +0x6f7, 0x687, 0x635, 0x5e6, 0x635, 0x5e6, 0x51f, 0x4f9, 0x51f, 0x4f9, 0x3ae, +0x3b6, 0x3ae, 0x3b6, 0x28f, 0x2cb, 0x28f, 0x2cb, 0xad, 0x121, 0xad, 0x121, +0xad, 0x121, 0xff37, 0xffe6, 0xff37, 0xffe6, 0xfda0, 0xfe8c, 0xfda0, 0xfe8c, 0xfa72, +0xfb9a, 0xfa72, 0xfb9a, 0xf879, 0xf9dd, 0xf879, 0xf9dd, 0xf7c6, 0xf963, 0xf7c6, 0xf963, +0xf7c6, 0xf963, 0xf621, 0xf7f3, 0xf621, 0xf7f3, 0xf4c9, 0xf6cb, 0xf4c9, 0xf6cb, 0xf409, +0xf634, 0xf409, 0xf634, 0xf196, 0xf3e2, 0xf196, 0xf3e2, 0xf080, 0xf2e6, 0xf080, 0xf2e6, +0xf0b9, 0xf32f, 0xf0b9, 0xf32f, 0xf0b9, 0xf32f, 0xef55, 0xf1d0, 0xef55, 0xf1d0, 0xef05, +0xf17c, 0xef05, 0xf17c, 0xef12, 0xf17c, 0xef12, 0xf17c, 0xee3a, 0xf08e, 0xee3a, 0xf08e, +0xee9c, 0xf0d0, 0xee9c, 0xf0d0, 0xee9c, 0xf0d0, 0xf014, 0xf221, 0xf014, 0xf221, 0xf063, +0xf242, 0xf063, 0xf242, 0xf0fa, 0xf2a5, 0xf0fa, 0xf2a5, 0xf2b4, 0xf426, 0xf2b4, 0xf426, +0xf396, 0xf4cd, 0xf396, 0xf4cd, 0xf457, 0xf550, 0xf457, 0xf550, 0xf457, 0xf550, 0xf4b4, +0xf56e, 0xf4b4, 0xf56e, 0xf542, 0xf5bf, 0xf542, 0xf5bf, 0xf7a0, 0xf7e2, 0xf7a0, 0xf7e2, +0xf9e2, 0xf9ec, 0xf9e2, 0xf9ec, 0xfab4, 0xfa89, 0xfab4, 0xfa89, 0xfb2c, 0xfad2, 0xfb2c, +0xfad2, 0xfb2c, 0xfad2, 0xfae3, 0xfa60, 0xfae3, 0xfa60, 0xfb1d, 0xfa75, 0xfb1d, 0xfa75, +0xfc8d, 0xfbc6, 0xfc8d, 0xfbc6, 0xfcd4, 0xfbf5, 0xfcd4, 0xfbf5, 0xfd2b, 0xfc38, 0xfd2b, +0xfc38, 0xfd2b, 0xfc38, 0xfeb5, 0xfdb3, 0xfeb5, 0xfdb3, 0x35, 0xff29, 0x35, 0xff29, +0x128, 0x16, 0x128, 0x16, 0x240, 0x129, 0x240, 0x129, 0x28b, 0x171, 0x28b, +0x171, 0x209, 0xed, 0x209, 0xed, 0x209, 0xed, 0x2e4, 0x1c6, 0x2e4, 0x1c6, +0x3ce, 0x2ac, 0x3ce, 0x2ac, 0x468, 0x341, 0x468, 0x341, 0x53b, 0x40c, 0x53b, +0x40c, 0x5ac, 0x471, 0x5ac, 0x471, 0x673, 0x52a, 0x673, 0x52a, 0x673, 0x52a, +0x7b2, 0x657, 0x7b2, 0x657, 0x870, 0x6fe, 0x870, 0x6fe, 0x8e5, 0x75a, 0x8e5, +0x75a, 0xa06, 0x85e, 0xa06, 0x85e, 0xbbd, 0x9f7, 0xbbd, 0x9f7, 0xbbd, 0x9f7, +0xd83, 0xb9c, 0xd83, 0xb9c, 0xe9b, 0xc92, 0xe9b, 0xc92, 0xe88, 0xc5e, 0xe88, +0xc5e, 0xeef, 0xca5, 0xeef, 0xca5, 0x1121, 0xeb9, 0x1121, 0xeb9, 0x128b, 0x1009, +0x128b, 0x1009, 0x128b, 0x1009, 0x1327, 0x108f, 0x1327, 0x108f, 0x13a9, 0x10ff, 0x13a9, +0x10ff, 0x1373, 0x10be, 0x1373, 0x10be, 0x1420, 0x1166, 0x1420, 0x1166, 0x14c9, 0x1211, +0x14c9, 0x1211, 0x1460, 0x11b1, 0x1460, 0x11b1, 0x1460, 0x11b1, 0x13b8, 0x111a, 0x13b8, +0x111a, 0x13a1, 0x111a, 0x13a1, 0x111a, 0x12dc, 0x1073, 0x12dc, 0x1073, 0x11e4, 0xfa0, +0x11e4, 0xfa0, 0x11c0, 0xfa5, 0x11c0, 0xfa5, 0x11c0, 0xfa5, 0x1044, 0xe57, 0x1044, +0xe57, 0xf26, 0xd69, 0xf26, 0xd69, 0xf48, 0xdbd, 0xf48, 0xdbd, 0xf3e, 0xde6, +0xf3e, 0xde6, 0xf34, 0xe0e, 0xf34, 0xe0e, 0xeba, 0xdc5, 0xeba, 0xdc5, 0xeba, +0xdc5, 0xde7, 0xd20, 0xde7, 0xd20, 0xd1b, 0xc7c, 0xd1b, 0xc7c, 0xbf1, 0xb77, +0xbf1, 0xb77, 0xa78, 0xa1b, 0xa78, 0xa1b, 0x913, 0x8cd, 0x913, 0x8cd, 0x83d, +0x807, 0x83d, 0x807, 0x83d, 0x807, 0x86a, 0x83c, 0x86a, 0x83c, 0x7f1, 0x7c4, +0x7f1, 0x7c4, 0x60b, 0x5d7, 0x60b, 0x5d7, 0x4bc, 0x47a, 0x4bc, 0x47a, 0x4e9, +0x492, 0x4e9, 0x492, 0x4e9, 0x492, 0x4f3, 0x482, 0x4f3, 0x482, 0x55d, 0x4cd, +0x55d, 0x4cd, 0x688, 0x5d5, 0x688, 0x5d5, 0x66b, 0x592, 0x66b, 0x592, 0x6c4, +0x5c3, 0x6c4, 0x5c3, 0x89e, 0x775, 0x89e, 0x775, 0x89e, 0x775, 0xa52, 0x901, +0xa52, 0x901, 0xb36, 0x9bf, 0xb36, 0x9bf, 0xbfc, 0xa61, 0xbfc, 0xa61, 0xcde, +0xb23, 0xcde, 0xb23, 0xd59, 0xb81, 0xd59, 0xb81, 0xda2, 0xbb4, 0xda2, 0xbb4, +0xda2, 0xbb4, 0xd8a, 0xb89, 0xd8a, 0xb89, 0xd75, 0xb67, 0xd75, 0xb67, 0xdd2, +0xbbd, 0xdd2, 0xbbd, 0xf0e, 0xcf6, 0xf0e, 0xcf6, 0xfae, 0xd99, 0xfae, 0xd99, +0xfae, 0xd99, 0xf35, 0xd28, 0xf35, 0xd28, 0xf0c, 0xd0b, 0xf0c, 0xd0b, 0xe53, +0xc62, 0xe53, 0xc62, 0xd0e, 0xb2f, 0xd0e, 0xb2f, 0xc19, 0xa50, 0xc19, 0xa50, +0xb53, 0x9a1, 0xb53, 0x9a1, 0xb53, 0x9a1, 0xa1d, 0x882, 0xa1d, 0x882, 0xa0a, +0x887, 0xa0a, 0x887, 0xaaf, 0x943, 0xaaf, 0x943, 0xa22, 0x8cd, 0xa22, 0x8cd, +0x94e, 0x80e, 0x94e, 0x80e, 0x824, 0x6f7, 0x824, 0x6f7, 0x824, 0x6f7, 0x75e, +0x643, 0x75e, 0x643, 0x75d, 0x651, 0x75d, 0x651, 0x7af, 0x6af, 0x7af, 0x6af, +0x82b, 0x735, 0x82b, 0x735, 0x83b, 0x74e, 0x83b, 0x74e, 0x83b, 0x74e, 0x7d9, +0x6f2, 0x7d9, 0x6f2, 0x735, 0x654, 0x735, 0x654, 0x6ac, 0x5cf, 0x6ac, 0x5cf, +0x5b1, 0x4d8, 0x5b1, 0x4d8, 0x4fd, 0x428, 0x4fd, 0x428, 0x573, 0x4a3, 0x573, +0x4a3, 0x573, 0x4a3, 0x566, 0x49c, 0x566, 0x49c, 0x4a6, 0x3e4, 0x4a6, 0x3e4, +0x383, 0x2cc, 0x383, 0x2cc, 0x215, 0x16a, 0x215, 0x16a, 0x203, 0x169, 0x203, +0x169, 0x208, 0x182, 0x208, 0x182, 0x208, 0x182, 0xa4, 0x36, 0xa4, 0x36, +0xfecc, 0xfe79, 0xfecc, 0xfe79, 0xfd3e, 0xfd0b, 0xfd3e, 0xfd0b, 0xfbb5, 0xfba6, 0xfbb5, +0xfba6, 0xfa21, 0xfa3a, 0xfa21, 0xfa3a, 0xfa21, 0xfa3a, 0xf94d, 0xf990, 0xf94d, 0xf990, +0xf7d6, 0xf848, 0xf7d6, 0xf848, 0xf655, 0xf6f8, 0xf655, 0xf6f8, 0xf594, 0xf66a, 0xf594, +0xf66a, 0xf4af, 0xf5ba, 0xf4af, 0xf5ba, 0xf36f, 0xf4b0, 0xf36f, 0xf4b0, 0xf36f, 0xf4b0, +0xf13a, 0xf2b2, 0xf13a, 0xf2b2, 0xefb4, 0xf163, 0xefb4, 0xf163, 0xef18, 0xf0fd, 0xef18, +0xf0fd, 0xee0a, 0xf024, 0xee0a, 0xf024, 0xecb6, 0xef04, 0xecb6, 0xef04, 0xec23, 0xeea1, +0xec23, 0xeea1, 0xec23, 0xeea1, 0xeb33, 0xedde, 0xeb33, 0xedde, 0xe99b, 0xec70, 0xe99b, +0xec70, 0xe91f, 0xec1b, 0xe91f, 0xec1b, 0xe79d, 0xeabb, 0xe79d, 0xeabb, 0xe5aa, 0xe8e5, +0xe5aa, 0xe8e5, 0xe5aa, 0xe8e5, 0xe591, 0xe8e5, 0xe591, 0xe8e5, 0xe55d, 0xe8c6, 0xe55d, +0xe8c6, 0xe3f3, 0xe76c, 0xe3f3, 0xe76c, 0xe33b, 0xe6bf, 0xe33b, 0xe6bf, 0xe32e, 0xe6b7, +0xe32e, 0xe6b7, 0xe2ea, 0xe675, 0xe2ea, 0xe675, 0xe2ea, 0xe675, 0xe3eb, 0xe775, 0xe3eb, +0xe775, 0xe56d, 0xe8f0, 0xe56d, 0xe8f0, 0xe63e, 0xe9b7, 0xe63e, 0xe9b7, 0xe684, 0xe9f0, +0xe684, 0xe9f0, 0xe6cc, 0xea27, 0xe6cc, 0xea27, 0xe6cc, 0xea27, 0xe79a, 0xeae1, 0xe79a, +0xeae1, 0xe85b, 0xeb8b, 0xe85b, 0xeb8b, 0xe8ba, 0xebd2, 0xe8ba, 0xebd2, 0xe9b8, 0xecb5, +0xe9b8, 0xecb5, 0xeb79, 0xee59, 0xeb79, 0xee59, 0xecdc, 0xef9d, 0xecdc, 0xef9d, 0xecdc, +0xef9d, 0xee74, 0xf114, 0xee74, 0xf114, 0xeee6, 0xf166, 0xeee6, 0xf166, 0xee27, 0xf084, +0xee27, 0xf084, 0xeeb0, 0xf0ea, 0xeeb0, 0xf0ea, 0xef41, 0xf158, 0xef41, 0xf158, 0xef64, +0xf158, 0xef64, 0xf158, 0xef64, 0xf158, 0xf079, 0xf24a, 0xf079, 0xf24a, 0xf192, 0xf341, +0xf192, 0xf341, 0xf1f4, 0xf381, 0xf1f4, 0xf381, 0xf2ff, 0xf46c, 0xf2ff, 0xf46c, 0xf488, +0xf5d7, 0xf488, 0xf5d7, 0xf488, 0xf5d7, 0xf515, 0xf647, 0xf515, 0xf647, 0xf52d, 0xf645, +0xf52d, 0xf645, 0xf5df, 0xf6e0, 0xf5df, 0xf6e0, 0xf700, 0xf7ee, 0xf700, 0xf7ee, 0xf81d, +0xf8fb, 0xf81d, 0xf8fb, 0xf858, 0xf92a, 0xf858, 0xf92a, 0xf858, 0xf92a, 0xf80a, 0xf8d4, +0xf80a, 0xf8d4, 0xf840, 0xf906, 0xf840, 0xf906, 0xf8e7, 0xf9ae, 0xf8e7, 0xf9ae, 0xfa94, +0xfb61, 0xfa94, 0xfb61, 0xfbf6, 0xfccd, 0xfbf6, 0xfccd, 0xfba6, 0xfc8c, 0xfba6, 0xfc8c, +0xfba6, 0xfc8c, 0xfab5, 0xfbae, 0xfab5, 0xfbae, 0xfa40, 0xfb52, 0xfa40, 0xfb52, 0xf97b, +0xfaa8, 0xf97b, 0xfaa8, 0xf7d2, 0xf91d, 0xf7d2, 0xf91d, 0xf719, 0xf886, 0xf719, 0xf886, +0xf719, 0xf886, 0xf6ef, 0xf87f, 0xf6ef, 0xf87f, 0xf618, 0xf7cc, 0xf618, 0xf7cc, 0xf432, +0xf60b, 0xf432, 0xf60b, 0xf1b8, 0xf3b6, 0xf1b8, 0xf3b6, 0xefcc, 0xf1ed, 0xefcc, 0xf1ed, +0xeebf, 0xf101, 0xeebf, 0xf101, 0xeebf, 0xf101, 0xee1e, 0xf07f, 0xee1e, 0xf07f, 0xed15, +0xef91, 0xed15, 0xef91, 0xecc7, 0xef59, 0xecc7, 0xef59, 0xecb3, 0xef57, 0xecb3, 0xef57, +0xec05, 0xeeb4, 0xec05, 0xeeb4, 0xebc0, 0xee76, 0xebc0, 0xee76, 0xebc0, 0xee76, 0xeb63, +0xee19, 0xeb63, 0xee19, 0xea97, 0xed46, 0xea97, 0xed46, 0xe9b5, 0xec58, 0xe9b5, 0xec58, +0xe8f9, 0xeb89, 0xe8f9, 0xeb89, 0xe90b, 0xeb82, 0xe90b, 0xeb82, 0xe90b, 0xeb82, 0xe9a6, +0xebff, 0xe9a6, 0xebff, 0xe9f4, 0xec2a, 0xe9f4, 0xec2a, 0xeb24, 0xed33, 0xeb24, 0xed33, +0xec9f, 0xee83, 0xec9f, 0xee83, 0xed95, 0xef4a, 0xed95, 0xef4a, 0xefbf, 0xf144, 0xefbf, +0xf144, 0xefbf, 0xf144, 0xf219, 0xf36c, 0xf219, 0xf36c, 0xf326, 0xf447, 0xf326, 0xf447, +0xf48c, 0xf579, 0xf48c, 0xf579, 0xf6b2, 0xf76d, 0xf6b2, 0xf76d, 0xf81d, 0xf8a7, 0xf81d, +0xf8a7, 0xfa2c, 0xfa87, 0xfa2c, 0xfa87, 0xfa2c, 0xfa87, 0xfcd3, 0xfd00, 0xfcd3, 0xfd00, +0xfe13, 0xfe14, 0xfe13, 0xfe14, 0xff11, 0xfee8, 0xff11, 0xfee8, 0x1e, 0xffcd, 0x1e, +0xffcd, 0x89, 0x12, 0x89, 0x12, 0x89, 0x12, 0x166, 0xca, 0x166, 0xca, +0x2ca, 0x20a, 0x2ca, 0x20a, 0x499, 0x3b6, 0x499, 0x3b6, 0x74b, 0x644, 0x74b, +0x644, 0x947, 0x81c, 0x947, 0x81c, 0xb0b, 0x9bb, 0xb0b, 0x9bb, 0xb0b, 0x9bb, +0xcf2, 0xb7c, 0xcf2, 0xb7c, 0xdc1, 0xc23, 0xdc1, 0xc23, 0xeb9, 0xcf0, 0xeb9, +0xcf0, 0xfca, 0xdd5, 0xfca, 0xdd5, 0x10d8, 0xeb5, 0x10d8, 0xeb5, 0x126a, 0x1016, +0x126a, 0x1016, 0x126a, 0x1016, 0x1468, 0x11e1, 0x1468, 0x11e1, 0x1651, 0x1395, 0x1651, +0x1395, 0x17d7, 0x14e6, 0x17d7, 0x14e6, 0x19a7, 0x1681, 0x19a7, 0x1681, 0x1b4c, 0x17f1, +0x1b4c, 0x17f1, 0x1b4c, 0x17f1, 0x1ccc, 0x193f, 0x1ccc, 0x193f, 0x1e71, 0x1ab5, 0x1e71, +0x1ab5, 0x1f8c, 0x1ba5, 0x1f8c, 0x1ba5, 0x2019, 0x1c0c, 0x2019, 0x1c0c, 0x20e2, 0x1cb5, +0x20e2, 0x1cb5, 0x21c8, 0x1d84, 0x21c8, 0x1d84, 0x21c8, 0x1d84, 0x2219, 0x1dc6, 0x2219, +0x1dc6, 0x2244, 0x1dec, 0x2244, 0x1dec, 0x2351, 0x1efe, 0x2351, 0x1efe, 0x247f, 0x203c, +0x247f, 0x203c, 0x240c, 0x1fe3, 0x240c, 0x1fe3, 0x22a6, 0x1ea4, 0x22a6, 0x1ea4, 0x22a6, +0x1ea4, 0x2160, 0x1d8f, 0x2160, 0x1d8f, 0x2023, 0x1c8e, 0x2023, 0x1c8e, 0x1ec5, 0x1b76, +0x1ec5, 0x1b76, 0x1d8f, 0x1a8e, 0x1d8f, 0x1a8e, 0x1c59, 0x19af, 0x1c59, 0x19af, 0x1c59, +0x19af, 0x19f2, 0x17a5, 0x19f2, 0x17a5, 0x1728, 0x153d, 0x1728, 0x153d, 0x1555, 0x13cf, +0x1555, 0x13cf, 0x12bf, 0x11a0, 0x12bf, 0x11a0, 0xf38, 0xe7f, 0xf38, 0xe7f, 0xd2e, +0xcda, 0xd2e, 0xcda, 0xd2e, 0xcda, 0xb3b, 0xb48, 0xb3b, 0xb48, 0x836, 0x89f, +0x836, 0x89f, 0x5b1, 0x66f, 0x5b1, 0x66f, 0x34b, 0x456, 0x34b, 0x456, 0xdc, +0x22c, 0xdc, 0x22c, 0xfedb, 0x65, 0xfedb, 0x65, 0xfedb, 0x65, 0xfcf0, 0xfeaa, +0xfcf0, 0xfeaa, 0xfb65, 0xfd45, 0xfb65, 0xfd45, 0xfa20, 0xfc1c, 0xfa20, 0xfc1c, 0xf7f7, +0xfa04, 0xf7f7, 0xfa04, 0xf582, 0xf797, 0xf582, 0xf797, 0xf582, 0xf797, 0xf3f6, 0xf60a, +0xf3f6, 0xf60a, 0xf307, 0xf513, 0xf307, 0xf513, 0xf1e1, 0xf3de, 0xf1e1, 0xf3de, 0xf110, +0xf2f9, 0xf110, 0xf2f9, 0xf11b, 0xf2ed, 0xf11b, 0xf2ed, 0xf0f7, 0xf2af, 0xf0f7, 0xf2af, +0xf0f7, 0xf2af, 0xf0f3, 0xf291, 0xf0f3, 0xf291, 0xf107, 0xf28a, 0xf107, 0xf28a, 0xf167, +0xf2d2, 0xf167, 0xf2d2, 0xf1f4, 0xf349, 0xf1f4, 0xf349, 0xf227, 0xf36b, 0xf227, 0xf36b, +0xf339, 0xf46f, 0xf339, 0xf46f, 0xf339, 0xf46f, 0xf41a, 0xf548, 0xf41a, 0xf548, 0xf437, +0xf561, 0xf437, 0xf561, 0xf418, 0xf543, 0xf418, 0xf543, 0xf393, 0xf4c4, 0xf393, 0xf4c4, +0xf343, 0xf47d, 0xf343, 0xf47d, 0xf343, 0xf47d, 0xf337, 0xf47e, 0xf337, 0xf47e, 0xf331, +0xf487, 0xf331, 0xf487, 0xf28d, 0xf3f1, 0xf28d, 0xf3f1, 0xf16f, 0xf2e3, 0xf16f, 0xf2e3, +0xf100, 0xf281, 0xf100, 0xf281, 0xf06f, 0xf1fa, 0xf06f, 0xf1fa, 0xf06f, 0xf1fa, 0xef93, +0xf123, 0xef93, 0xf123, 0xefe3, 0xf173, 0xefe3, 0xf173, 0xf003, 0xf18d, 0xf003, 0xf18d, +0xf03a, 0xf1b6, 0xf03a, 0xf1b6, 0xf1cb, 0xf332, 0xf1cb, 0xf332, 0xf1cb, 0xf332, 0xf2a9, +0xf3f1, 0xf2a9, 0xf3f1, 0xf365, 0xf486, 0xf365, 0xf486, 0xf520, 0xf611, 0xf520, 0xf611, +0xf6c5, 0xf77f, 0xf6c5, 0xf77f, 0xf8ae, 0xf929, 0xf8ae, 0xf929, 0xfb6a, 0xfba0, 0xfb6a, +0xfba0, 0xfb6a, 0xfba0, 0xfe56, 0xfe42, 0xfe56, 0xfe42, 0xf1, 0x8e, 0xf1, 0x8e, +0x305, 0x252, 0x305, 0x252, 0x45e, 0x359, 0x45e, 0x359, 0x5c8, 0x474, 0x5c8, +0x474, 0x7dd, 0x63c, 0x7dd, 0x63c, 0x7dd, 0x63c, 0x9d2, 0x7e9, 0x9d2, 0x7e9, +0xbfa, 0x9cf, 0xbfa, 0x9cf, 0xde2, 0xb7c, 0xde2, 0xb7c, 0xe23, 0xb8c, 0xe23, +0xb8c, 0xeb8, 0xbfa, 0xeb8, 0xbfa, 0xeb8, 0xbfa, 0xfad, 0xcd3, 0xfad, 0xcd3, +0xf36, 0xc4b, 0xf36, 0xc4b, 0xf18, 0xc29, 0xf18, 0xc29, 0xf72, 0xc89, 0xf72, +0xc89, 0xec5, 0xbef, 0xec5, 0xbef, 0xe5a, 0xba1, 0xe5a, 0xba1, 0xe5a, 0xba1, +0xe27, 0xb93, 0xe27, 0xb93, 0xd13, 0xaaf, 0xd13, 0xaaf, 0xc77, 0xa4a, 0xc77, +0xa4a, 0xc00, 0xa0e, 0xc00, 0xa0e, 0xb4a, 0x999, 0xb4a, 0x999, 0xadb, 0x96c, +0xadb, 0x96c, 0xadb, 0x96c, 0xa49, 0x91e, 0xa49, 0x91e, 0x99f, 0x8b7, 0x99f, +0x8b7, 0x899, 0x7f0, 0x899, 0x7f0, 0x7c7, 0x75b, 0x7c7, 0x75b, 0x6cc, 0x698, +0x6cc, 0x698, 0x6cc, 0x698, 0x606, 0x603, 0x606, 0x603, 0x5d3, 0x5fa, 0x5d3, +0x5fa, 0x494, 0x4df, 0x494, 0x4df, 0x338, 0x39e, 0x338, 0x39e, 0x20e, 0x288, +0x20e, 0x288, 0xba, 0x141, 0xba, 0x141, 0xba, 0x141, 0xffab, 0x38, 0xffab, +0x38, 0xfea1, 0xff2d, 0xfea1, 0xff2d, 0xfe91, 0xff16, 0xfe91, 0xff16, 0xff55, 0xffd0, +0xff55, 0xffd0, 0xff44, 0xffb0, 0xff44, 0xffb0, 0xff2c, 0xff87, 0xff2c, 0xff87, 0xff2c, +0xff87, 0xfff5, 0x3e, 0xfff5, 0x3e, 0x3e, 0x74, 0x3e, 0x74, 0x28, 0x4c, +0x28, 0x4c, 0x150, 0x164, 0x150, 0x164, 0x267, 0x26c, 0x267, 0x26c, 0x267, +0x26c, 0x226, 0x21e, 0x226, 0x21e, 0x310, 0x2ff, 0x310, 0x2ff, 0x449, 0x431, +0x449, 0x431, 0x404, 0x3e8, 0x404, 0x3e8, 0x4fc, 0x4df, 0x4fc, 0x4df, 0x655, +0x639, 0x655, 0x639, 0x655, 0x639, 0x6b4, 0x69b, 0x6b4, 0x69b, 0x87a, 0x863, +0x87a, 0x863, 0x9e0, 0x9ca, 0x9e0, 0x9ca, 0x94b, 0x936, 0x94b, 0x936, 0x93d, +0x926, 0x93d, 0x926, 0x970, 0x954, 0x970, 0x954, 0x970, 0x954, 0x964, 0x93d, +0x964, 0x93d, 0x979, 0x943, 0x979, 0x943, 0x9a7, 0x95d, 0x9a7, 0x95d, 0xa9b, +0xa35, 0xa9b, 0xa35, 0xb24, 0xa9c, 0xb24, 0xa9c, 0xb24, 0xa9c, 0xb3b, 0xa89, +0xb3b, 0xa89, 0xc56, 0xb75, 0xc56, 0xb75, 0xda2, 0xc8b, 0xda2, 0xc8b, 0xe53, +0xd00, 0xe53, 0xd00, 0x1004, 0xe70, 0x1004, 0xe70, 0x1253, 0x107b, 0x1253, 0x107b, +0x1253, 0x107b, 0x1398, 0x1178, 0x1398, 0x1178, 0x1577, 0x130f, 0x1577, 0x130f, 0x17b9, +0x150a, 0x17b9, 0x150a, 0x186a, 0x1575, 0x186a, 0x1575, 0x1964, 0x162c, 0x1964, 0x162c, +0x1bb3, 0x183f, 0x1bb3, 0x183f, 0x1bb3, 0x183f, 0x1cf3, 0x1948, 0x1cf3, 0x1948, 0x1dc4, +0x19eb, 0x1dc4, 0x19eb, 0x1eb8, 0x1aba, 0x1eb8, 0x1aba, 0x1eb8, 0x1a9f, 0x1eb8, 0x1a9f, +0x1f23, 0x1afb, 0x1f23, 0x1afb, 0x1f23, 0x1afb, 0x1f69, 0x1b3e, 0x1f69, 0x1b3e, 0x1f16, +0x1af4, 0x1f16, 0x1af4, 0x1e4e, 0x1a40, 0x1e4e, 0x1a40, 0x1ce3, 0x18f6, 0x1ce3, 0x18f6, +0x1b9a, 0x17d9, 0x1b9a, 0x17d9, 0x1964, 0x15d9, 0x1964, 0x15d9, 0x1964, 0x15d9, 0x16e3, +0x1398, 0x16e3, 0x1398, 0x1526, 0x1224, 0x1526, 0x1224, 0x1337, 0x1084, 0x1337, 0x1084, +0x1153, 0xef5, 0x1153, 0xef5, 0xfcd, 0xdc8, 0xfcd, 0xdc8, 0xe8d, 0xce2, 0xe8d, +0xce2, 0xe8d, 0xce2, 0xcf5, 0xba6, 0xcf5, 0xba6, 0xa75, 0x980, 0xa75, 0x980, +0x826, 0x788, 0x826, 0x788, 0x5a1, 0x557, 0x5a1, 0x557, 0x293, 0x296, 0x293, +0x296, 0x293, 0x296, 0x92, 0xdd, 0x92, 0xdd, 0xff3f, 0xffca, 0xff3f, 0xffca, +0xfd2b, 0xfdef, 0xfd2b, 0xfdef, 0xfac0, 0xfbb4, 0xfac0, 0xfbb4, 0xf8ec, 0xfa07, 0xf8ec, +0xfa07, 0xf703, 0xf83d, 0xf703, 0xf83d, 0xf703, 0xf83d, 0xf562, 0xf6b3, 0xf562, 0xf6b3, +0xf44f, 0xf5af, 0xf44f, 0xf5af, 0xf27a, 0xf3e2, 0xf27a, 0xf3e2, 0xf0d7, 0xf241, 0xf0d7, +0xf241, 0xf069, 0xf1cf, 0xf069, 0xf1cf, 0xefc3, 0xf121, 0xefc3, 0xf121, 0xefc3, 0xf121, +0xef40, 0xf093, 0xef40, 0xf093, 0xf004, 0xf149, 0xf004, 0xf149, 0xf082, 0xf1b9, 0xf082, +0xf1b9, 0xf0cc, 0xf1f4, 0xf0cc, 0xf1f4, 0xf0fc, 0xf216, 0xf0fc, 0xf216, 0xf0fc, 0xf216, +0xf08f, 0xf19c, 0xf08f, 0xf19c, 0xf051, 0xf153, 0xf051, 0xf153, 0xefeb, 0xf0e5, 0xefeb, +0xf0e5, 0xf042, 0xf136, 0xf042, 0xf136, 0xf131, 0xf224, 0xf131, 0xf224, 0xf19f, 0xf292, +0xf19f, 0xf292, 0xf19f, 0xf292, 0xf264, 0xf35b, 0xf264, 0xf35b, 0xf2e0, 0xf3dd, 0xf2e0, +0xf3dd, 0xf1c5, 0xf2cc, 0xf1c5, 0xf2cc, 0xf0c6, 0xf1d7, 0xf0c6, 0xf1d7, 0xf0d2, 0xf1ef, +0xf0d2, 0xf1ef, 0xf034, 0xf15e, 0xf034, 0xf15e, 0xf034, 0xf15e, 0xeffb, 0xf132, 0xeffb, +0xf132, 0xf163, 0xf2a6, 0xf163, 0xf2a6, 0xf2de, 0xf42c, 0xf2de, 0xf42c, 0xf3b3, 0xf50a, +0xf3b3, 0xf50a, 0xf503, 0xf661, 0xf503, 0xf661, 0xf503, 0xf661, 0xf665, 0xf7c8, 0xf665, +0xf7c8, 0xf699, 0xf7fd, 0xf699, 0xf7fd, 0xf708, 0xf86b, 0xf708, 0xf86b, 0xf7a9, 0xf908, +0xf7a9, 0xf908, 0xf779, 0xf8d0, 0xf779, 0xf8d0, 0xf7ae, 0xf8fb, 0xf7ae, 0xf8fb, 0xf7ae, +0xf8fb, 0xf856, 0xf996, 0xf856, 0xf996, 0xf889, 0xf9bb, 0xf889, 0xf9bb, 0xf890, 0xf9b3, +0xf890, 0xf9b3, 0xf914, 0xfa27, 0xf914, 0xfa27, 0xfa25, 0xfb28, 0xfa25, 0xfb28, 0xfa25, +0xfb28, 0xfad6, 0xfbc9, 0xfad6, 0xfbc9, 0xfb41, 0xfc26, 0xfb41, 0xfc26, 0xfb4a, 0xfc24, +0xfb4a, 0xfc24, 0xfa9b, 0xfb6c, 0xfa9b, 0xfb6c, 0xfa98, 0xfb63, 0xfa98, 0xfb63, 0xfad2, +0xfb9b, 0xfad2, 0xfb9b, 0xfad2, 0xfb9b, 0xfaf9, 0xfbc4, 0xfaf9, 0xfbc4, 0xfade, 0xfbb1, +0xfade, 0xfbb1, 0xfa35, 0xfb14, 0xfa35, 0xfb14, 0xf9dc, 0xfacb, 0xf9dc, 0xfacb, 0xf901, +0xfa05, 0xf901, 0xfa05, 0xf7e0, 0xf8fd, 0xf7e0, 0xf8fd, 0xf7e0, 0xf8fd, 0xf719, 0xf854, +0xf719, 0xf854, 0xf5b5, 0xf711, 0xf5b5, 0xf711, 0xf480, 0xf600, 0xf480, 0xf600, 0xf497, +0xf63d, 0xf497, 0xf63d, 0xf445, 0xf613, 0xf445, 0xf613, 0xf445, 0xf613, 0xf327, 0xf51e, +0xf327, 0xf51e, 0xf22a, 0xf44a, 0xf22a, 0xf44a, 0xf113, 0xf35c, 0xf113, 0xf35c, 0xf028, +0xf297, 0xf028, 0xf297, 0xef25, 0xf1ba, 0xef25, 0xf1ba, 0xedd6, 0xf08d, 0xedd6, 0xf08d, +0xedd6, 0xf08d, 0xec5e, 0xef34, 0xec5e, 0xef34, 0xeb2a, 0xee1c, 0xeb2a, 0xee1c, 0xe9b5, +0xecbf, 0xe9b5, 0xecbf, 0xe86a, 0xeb87, 0xe86a, 0xeb87, 0xe812, 0xeb3e, 0xe812, 0xeb3e, +0xe6eb, 0xea22, 0xe6eb, 0xea22, 0xe6eb, 0xea22, 0xe5f6, 0xe934, 0xe5f6, 0xe934, 0xe5c3, +0xe903, 0xe5c3, 0xe903, 0xe4d9, 0xe819, 0xe4d9, 0xe819, 0xe3ee, 0xe72a, 0xe3ee, 0xe72a, +0xe399, 0xe6cf, 0xe399, 0xe6cf, 0xe399, 0xe6cf, 0xe3b1, 0xe6dd, 0xe3b1, 0xe6dd, 0xe439, +0xe759, 0xe439, 0xe759, 0xe4f1, 0xe805, 0xe4f1, 0xe805, 0xe546, 0xe84b, 0xe546, 0xe84b, +0xe4ec, 0xe7e3, 0xe4ec, 0xe7e3, 0xe3b7, 0xe69e, 0xe3b7, 0xe69e, 0xe3b7, 0xe69e, 0xe24b, +0xe523, 0xe24b, 0xe523, 0xe1ef, 0xe4b6, 0xe1ef, 0xe4b6, 0xe24b, 0xe503, 0xe24b, 0xe503, +0xe26d, 0xe515, 0xe26d, 0xe515, 0xe327, 0xe5bf, 0xe327, 0xe5bf, 0xe422, 0xe6a9, 0xe422, +0xe6a9, 0xe422, 0xe6a9, 0xe45c, 0xe6d2, 0xe45c, 0xe6d2, 0xe49d, 0xe700, 0xe49d, 0xe700, +0xe509, 0xe759, 0xe509, 0xe759, 0xe4f2, 0xe72c, 0xe4f2, 0xe72c, 0xe4dc, 0xe6fe, 0xe4dc, +0xe6fe, 0xe4dc, 0xe6fe, 0xe5bb, 0xe7c2, 0xe5bb, 0xe7c2, 0xe641, 0xe82b, 0xe641, 0xe82b, +0xe772, 0xe93a, 0xe772, 0xe93a, 0xe9e3, 0xeb86, 0xe9e3, 0xeb86, 0xebf3, 0xed6d, 0xebf3, +0xed6d, 0xee69, 0xefb7, 0xee69, 0xefb7, 0xee69, 0xefb7, 0xf097, 0xf1b4, 0xf097, 0xf1b4, +0xf33e, 0xf428, 0xf33e, 0xf428, 0xf6e0, 0xf792, 0xf6e0, 0xf792, 0xfa11, 0xfa88, 0xfa11, +0xfa88, 0xfceb, 0xfd26, 0xfceb, 0xfd26, 0xff69, 0xff66, 0xff69, 0xff66, 0xff69, 0xff66, +0x19b, 0x157, 0x19b, 0x157, 0x3e7, 0x363, 0x3e7, 0x363, 0x704, 0x640, 0x704, +0x640, 0x9b8, 0x8b5, 0x9b8, 0x8b5, 0xb82, 0xa43, 0xb82, 0xa43, 0xb82, 0xa43, +0xd30, 0xbb7, 0xd30, 0xbb7, 0xde0, 0xc31, 0xde0, 0xc31, 0xded, 0xc0c, 0xded, +0xc0c, 0xe79, 0xc6b, 0xe79, 0xc6b, 0xe7c, 0xc45, 0xe7c, 0xc45, 0xe6b, 0xc13, +0xe6b, 0xc13, 0xe6b, 0xc13, 0xfe5, 0xd70, 0xfe5, 0xd70, 0x112a, 0xe9e, 0x112a, +0xe9e, 0x11ea, 0xf4e, 0x11ea, 0xf4e, 0x1297, 0xfef, 0x1297, 0xfef, 0x12a5, 0xff8, +0x12a5, 0xff8, 0x12e4, 0x1035, 0x12e4, 0x1035, 0x12e4, 0x1035, 0x1339, 0x108d, 0x1339, +0x108d, 0x131f, 0x107a, 0x131f, 0x107a, 0x1302, 0x1067, 0x1302, 0x1067, 0x1349, 0x10bb, +0x1349, 0x10bb, 0x1397, 0x1117, 0x1397, 0x1117, 0x1397, 0x1117, 0x1435, 0x11c5, 0x1435, +0x11c5, 0x14f8, 0x1298, 0x14f8, 0x1298, 0x1514, 0x12c5, 0x1514, 0x12c5, 0x14fb, 0x12bc, +0x14fb, 0x12bc, 0x1502, 0x12d2, 0x1502, 0x12d2, 0x1472, 0x1251, 0x1472, 0x1251, 0x1472, +0x1251, 0x133d, 0x112a, 0x133d, 0x112a, 0x121c, 0x1017, 0x121c, 0x1017, 0x116f, 0xf77, +0x116f, 0xf77, 0x115c, 0xf70, 0x115c, 0xf70, 0x1187, 0xfa8, 0x1187, 0xfa8, 0x123f, +0x106d, 0x123f, 0x106d, 0x123f, 0x106d, 0x129c, 0x10d8, 0x129c, 0x10d8, 0x11ae, 0xff9, +0x11ae, 0xff9, 0x108f, 0xeeb, 0x108f, 0xeeb, 0x1034, 0xea4, 0x1034, 0xea4, 0x1048, +0xece, 0x1048, 0xece, 0x1048, 0xece, 0xff6, 0xe95, 0xff6, 0xe95, 0x1049, 0xf05, +0x1049, 0xf05, 0x10c1, 0xf9c, 0x10c1, 0xf9c, 0x1023, 0xf20, 0x1023, 0xf20, 0xef5, +0xe18, 0xef5, 0xe18, 0xdf9, 0xd45, 0xdf9, 0xd45, 0xdf9, 0xd45, 0xd2f, 0xca5, +0xd2f, 0xca5, 0xc5c, 0xbfd, 0xc5c, 0xbfd, 0xc0c, 0xbda, 0xc0c, 0xbda, 0xb17, +0xb11, 0xb17, 0xb11, 0x9be, 0x9e3, 0x9be, 0x9e3, 0x8a8, 0x8f7, 0x8a8, 0x8f7, +0x8a8, 0x8f7, 0x738, 0x7ad, 0x738, 0x7ad, 0x5f7, 0x68e, 0x5f7, 0x68e, 0x469, +0x51e, 0x469, 0x51e, 0x2c6, 0x392, 0x2c6, 0x392, 0x23e, 0x31c, 0x23e, 0x31c, +0x23e, 0x31c, 0x26a, 0x354, 0x26a, 0x354, 0x28b, 0x378, 0x28b, 0x378, 0x2c4, +0x3ae, 0x2c4, 0x3ae, 0x292, 0x372, 0x292, 0x372, 0x238, 0x306, 0x238, 0x306, +0x2a1, 0x358, 0x2a1, 0x358, 0x2a1, 0x358, 0x32e, 0x3c9, 0x32e, 0x3c9, 0x391, +0x40a, 0x391, 0x40a, 0x474, 0x4c9, 0x474, 0x4c9, 0x5b1, 0x5df, 0x5b1, 0x5df, +0x62d, 0x634, 0x62d, 0x634, 0x5cc, 0x5ac, 0x5cc, 0x5ac, 0x5cc, 0x5ac, 0x56b, +0x526, 0x56b, 0x526, 0x609, 0x5a2, 0x609, 0x5a2, 0x791, 0x70e, 0x791, 0x70e, +0x919, 0x87f, 0x919, 0x87f, 0xa01, 0x956, 0xa01, 0x956, 0xa01, 0x956, 0x9d8, +0x925, 0x9d8, 0x925, 0x8e6, 0x833, 0x8e6, 0x833, 0x808, 0x75e, 0x808, 0x75e, +0x72a, 0x692, 0x72a, 0x692, 0x554, 0x4d6, 0x554, 0x4d6, 0x35b, 0x300, 0x35b, +0x300, 0x35b, 0x300, 0x175, 0x143, 0x175, 0x143, 0xff18, 0xff17, 0xff18, 0xff17, +0xfcfc, 0xfd30, 0xfcfc, 0xfd30, 0xfb2c, 0xfb9a, 0xfb2c, 0xfb9a, 0xf949, 0xf9f3, 0xf949, +0xf9f3, 0xf949, 0xf9f3, 0xf735, 0xf81a, 0xf735, 0xf81a, 0xf59e, 0xf6bf, 0xf59e, 0xf6bf, +0xf47c, 0xf5d6, 0xf47c, 0xf5d6, 0xf32b, 0xf4ba, 0xf32b, 0xf4ba, 0xf1db, 0xf399, 0xf1db, +0xf399, 0xf0f5, 0xf2da, 0xf0f5, 0xf2da, 0xf0f5, 0xf2da, 0xefe3, 0xf1e7, 0xefe3, 0xf1e7, +0xeec9, 0xf0e3, 0xeec9, 0xf0e3, 0xeeaf, 0xf0d4, 0xeeaf, 0xf0d4, 0xee6d, 0xf093, 0xee6d, +0xf093, 0xedbb, 0xefd7, 0xedbb, 0xefd7, 0xed6b, 0xef73, 0xed6b, 0xef73, 0xed6b, 0xef73, +0xeda0, 0xef8b, 0xeda0, 0xef8b, 0xedf2, 0xefb6, 0xedf2, 0xefb6, 0xee4c, 0xefe0, 0xee4c, +0xefe0, 0xef5b, 0xf0b9, 0xef5b, 0xf0b9, 0xf0a2, 0xf1c3, 0xf0a2, 0xf1c3, 0xf0a2, 0xf1c3, +0xf1c0, 0xf2a0, 0xf1c0, 0xf2a0, 0xf2be, 0xf35b, 0xf2be, 0xf35b, 0xf3d3, 0xf42c, 0xf3d3, +0xf42c, 0xf4f1, 0xf507, 0xf4f1, 0xf507, 0xf614, 0xf5e7, 0xf614, 0xf5e7, 0xf807, 0xf79c, +0xf807, 0xf79c, 0xf807, 0xf79c, 0xf9b6, 0xf911, 0xf9b6, 0xf911, 0xfa79, 0xf9a0, 0xfa79, +0xf9a0, 0xfb50, 0xfa49, 0xfb50, 0xfa49, 0xfbea, 0xfabd, 0xfbea, 0xfabd, 0xfcc1, 0xfb75, +0xfcc1, 0xfb75, 0xfe2b, 0xfcc7, 0xfe2b, 0xfcc7, 0xfe2b, 0xfcc7, 0xff8e, 0xfe19, 0xff8e, +0xfe19, 0x11e, 0xffa0, 0x11e, 0xffa0, 0x2cb, 0x148, 0x2cb, 0x148, 0x3c1, 0x23e, +0x3c1, 0x23e, 0x340, 0x1c2, 0x340, 0x1c2, 0x340, 0x1c2, 0x339, 0x1c2, 0x339, +0x1c2, 0x3c4, 0x255, 0x3c4, 0x255, 0x39f, 0x23a, 0x39f, 0x23a, 0x42d, 0x2cf, +0x42d, 0x2cf, 0x551, 0x3fa, 0x551, 0x3fa, 0x689, 0x535, 0x689, 0x535, 0x689, +0x535, 0x791, 0x63c, 0x791, 0x63c, 0x8f6, 0x79b, 0x8f6, 0x79b, 0xa09, 0x8a3, +0xa09, 0x8a3, 0xa17, 0x8a1, 0xa17, 0x8a1, 0xa7d, 0x8f2, 0xa7d, 0x8f2, 0xb71, +0x9cc, 0xb71, 0x9cc, 0xb71, 0x9cc, 0xd79, 0xbb7, 0xd79, 0xbb7, 0xf77, 0xd93, +0xf77, 0xd93, 0x1116, 0xf0e, 0x1116, 0xf0e, 0x1299, 0x106c, 0x1299, 0x106c, 0x130c, +0x10ba, 0x130c, 0x10ba, 0x130c, 0x10ba, 0x1400, 0x118c, 0x1400, 0x118c, 0x151e, 0x1289, +0x151e, 0x1289, 0x1510, 0x125e, 0x1510, 0x125e, 0x1581, 0x12b8, 0x1581, 0x12b8, 0x1659, +0x137f, 0x1659, 0x137f, 0x15f2, 0x1310, 0x15f2, 0x1310, 0x15f2, 0x1310, 0x15b8, 0x12d5, +0x15b8, 0x12d5, 0x1659, 0x137e, 0x1659, 0x137e, 0x1646, 0x137c, 0x1646, 0x137c, 0x15f9, +0x134a, 0x15f9, 0x134a, 0x169a, 0x140e, 0x169a, 0x140e, 0x169e, 0x143e, 0x169e, 0x143e, +0x169e, 0x143e, 0x15a2, 0x1376, 0x15a2, 0x1376, 0x1507, 0x1314, 0x1507, 0x1314, 0x1408, +0x1254, 0x1408, 0x1254, 0x12e9, 0x1178, 0x12e9, 0x1178, 0x1233, 0x1107, 0x1233, 0x1107, +0x1233, 0x1107, 0x115f, 0x1077, 0x115f, 0x1077, 0x1015, 0xf71, 0x1015, 0xf71, 0xe13, +0xdb1, 0xe13, 0xdb1, 0xc7d, 0xc57, 0xc7d, 0xc57, 0xba6, 0xbb6, 0xba6, 0xbb6, +0xa01, 0xa3f, 0xa01, 0xa3f, 0xa01, 0xa3f, 0x845, 0x8aa, 0x845, 0x8aa, 0x79f, +0x820, 0x79f, 0x820, 0x665, 0x6f8, 0x665, 0x6f8, 0x513, 0x5af, 0x513, 0x5af, +0x4d3, 0x56c, 0x4d3, 0x56c, 0x48c, 0x518, 0x48c, 0x518, 0x48c, 0x518, 0x3f1, +0x467, 0x3f1, 0x467, 0x45b, 0x4b1, 0x45b, 0x4b1, 0x4dc, 0x50b, 0x4dc, 0x50b, +0x43b, 0x43b, 0x43b, 0x43b, 0x4b6, 0x483, 0x4b6, 0x483, 0x4b6, 0x483, 0x5c4, +0x559, 0x5c4, 0x559, 0x6c2, 0x61d, 0x6c2, 0x61d, 0x85a, 0x77b, 0x85a, 0x77b, +0xa79, 0x960, 0xa79, 0x960, 0xc74, 0xb24, 0xc74, 0xb24, 0xda5, 0xc22, 0xda5, +0xc22, 0xda5, 0xc22, 0xf0a, 0xd58, 0xf0a, 0xd58, 0xf2d, 0xd53, 0xf2d, 0xd53, +0xe4f, 0xc53, 0xe4f, 0xc53, 0xdb2, 0xb9c, 0xdb2, 0xb9c, 0xd8b, 0xb63, 0xd8b, +0xb63, 0xe45, 0xc13, 0xe45, 0xc13, 0xe45, 0xc13, 0xee3, 0xcaf, 0xee3, 0xcaf, +0xf74, 0xd46, 0xf74, 0xd46, 0xf71, 0xd4f, 0xf71, 0xd4f, 0xe7a, 0xc6a, 0xe7a, +0xc6a, 0xd17, 0xb1f, 0xd17, 0xb1f, 0xd17, 0xb1f, 0xb87, 0x9ab, 0xb87, 0x9ab, +0x991, 0x7d4, 0x991, 0x7d4, 0x80f, 0x672, 0x80f, 0x672, 0x80e, 0x693, 0x80e, +0x693, 0x7cb, 0x672, 0x7cb, 0x672, 0x72b, 0x5f1, 0x72b, 0x5f1, 0x72b, 0x5f1, +0x76a, 0x64e, 0x76a, 0x64e, 0x707, 0x605, 0x707, 0x605, 0x634, 0x54a, 0x634, +0x54a, 0x6c9, 0x5f2, 0x6c9, 0x5f2, 0x6a5, 0x5dd, 0x6a5, 0x5dd, 0x5f7, 0x53a, +0x5f7, 0x53a, 0x5f7, 0x53a, 0x647, 0x592, 0x647, 0x592, 0x5ee, 0x53c, 0x5ee, +0x53c, 0x5a5, 0x4f4, 0x5a5, 0x4f4, 0x59a, 0x4e9, 0x59a, 0x4e9, 0x4f0, 0x43d, +0x4f0, 0x43d, 0x4f0, 0x43d, 0x4c8, 0x414, 0x4c8, 0x414, 0x53c, 0x486, 0x53c, +0x486, 0x4f5, 0x441, 0x4f5, 0x441, 0x3e0, 0x330, 0x3e0, 0x330, 0x287, 0x1e0, +0x287, 0x1e0, 0x15c, 0xc2, 0x15c, 0xc2, 0x15c, 0xc2, 0x7c, 0xfff4, 0x7c, +0xfff4, 0xff6a, 0xfefb, 0xff6a, 0xfefb, 0xfe7b, 0xfe2b, 0xfe7b, 0xfe2b, 0xfe4f, 0xfe26, +0xfe4f, 0xfe26, 0xfd84, 0xfd86, 0xfd84, 0xfd86, 0xfb48, 0xfb7e, 0xfb48, 0xfb7e, 0xfb48, +0xfb7e, 0xf9cc, 0xfa3b, 0xf9cc, 0xfa3b, 0xf7dd, 0xf88a, 0xf7dd, 0xf88a, 0xf56b, 0xf65b, +0xf56b, 0xf65b, 0xf473, 0xf5aa, 0xf473, 0xf5aa, 0xf36b, 0xf4ec, 0xf36b, 0xf4ec, 0xf36b, +0xf4ec, 0xf276, 0xf440, 0xf276, 0xf440, 0xf209, 0xf41e, 0xf209, 0xf41e, 0xf1dd, 0xf43c, +0xf1dd, 0xf43c, 0xf0f4, 0xf399, 0xf0f4, 0xf399, 0xefd3, 0xf2bc, 0xefd3, 0xf2bc, 0xeebc, +0xf1e4, 0xeebc, 0xf1e4, 0xeebc, 0xf1e4, 0xec90, 0xeff1, 0xec90, 0xeff1, 0xea62, 0xedf5, +0xea62, 0xedf5, 0xe840, 0xebff, 0xe840, 0xebff, 0xe6cd, 0xeaaf, 0xe6cd, 0xeaaf, 0xe565, +0xe963, 0xe565, 0xe963, 0xe565, 0xe963, 0xe400, 0xe812, 0xe400, 0xe812, 0xe375, 0xe793, +0xe375, 0xe793, 0xe2db, 0xe6fc, 0xe2db, 0xe6fc, 0xe2c5, 0xe6e2, 0xe2c5, 0xe6e2, 0xe290, +0xe6a3, 0xe290, 0xe6a3, 0xe209, 0xe60a, 0xe209, 0xe60a, 0xe209, 0xe60a, 0xe1b7, 0xe5a2, +0xe1b7, 0xe5a2, 0xe210, 0xe5df, 0xe210, 0xe5df, 0xe367, 0xe717, 0xe367, 0xe717, 0xe4d7, +0xe865, 0xe4d7, 0xe865, 0xe62c, 0xe995, 0xe62c, 0xe995, 0xe736, 0xea7a, 0xe736, 0xea7a, +0xe736, 0xea7a, 0xe7b0, 0xeacd, 0xe7b0, 0xeacd, 0xe7d8, 0xeace, 0xe7d8, 0xeace, 0xe854, +0xeb24, 0xe854, 0xeb24, 0xe917, 0xebc1, 0xe917, 0xebc1, 0xe9ce, 0xec54, 0xe9ce, 0xec54, +0xe9ce, 0xec54, 0xeb3f, 0xeda1, 0xeb3f, 0xeda1, 0xed26, 0xef67, 0xed26, 0xef67, 0xee45, +0xf066, 0xee45, 0xf066, 0xeed3, 0xf0d6, 0xeed3, 0xf0d6, 0xeeb3, 0xf098, 0xeeb3, 0xf098, +0xee42, 0xf00b, 0xee42, 0xf00b, 0xee42, 0xf00b, 0xeec4, 0xf073, 0xeec4, 0xf073, 0xef5c, +0xf0f0, 0xef5c, 0xf0f0, 0xeff9, 0xf175, 0xeff9, 0xf175, 0xf194, 0xf2f7, 0xf194, 0xf2f7, +0xf345, 0xf48f, 0xf345, 0xf48f, 0xf41c, 0xf54f, 0xf41c, 0xf54f, 0xf41c, 0xf54f, 0xf4f4, +0xf611, 0xf4f4, 0xf611, 0xf5cd, 0xf6d3, 0xf5cd, 0xf6d3, 0xf694, 0xf786, 0xf694, 0xf786, +0xf7ea, 0xf8c9, 0xf7ea, 0xf8c9, 0xf935, 0xfa04, 0xf935, 0xfa04, 0xf935, 0xfa04, 0xf9fe, +0xfabe, 0xf9fe, 0xfabe, 0xf9b4, 0xfa68, 0xf9b4, 0xfa68, 0xf96c, 0xfa18, 0xf96c, 0xfa18, +0xf986, 0xfa2d, 0xf986, 0xfa2d, 0xf9a8, 0xfa4f, 0xf9a8, 0xfa4f, 0xfaa0, 0xfb4d, 0xfaa0, +0xfb4d, 0xfaa0, 0xfb4d, 0xfb8c, 0xfc42, 0xfb8c, 0xfc42, 0xfb9b, 0xfc61, 0xfb9b, 0xfc61, +0xfa56, 0xfb30, 0xfa56, 0xfb30, 0xf8c1, 0xf9b5, 0xf8c1, 0xf9b5, 0xf740, 0xf853, 0xf740, +0xf853, 0xf56c, 0xf6a3, 0xf56c, 0xf6a3, 0xf56c, 0xf6a3, 0xf42a, 0xf589, 0xf42a, 0xf589, +0xf329, 0xf4b5, 0xf329, 0xf4b5, 0xf193, 0xf34d, 0xf193, 0xf34d, 0xefbf, 0xf1ab, 0xefbf, +0xf1ab, 0xef0e, 0xf12d, 0xef0e, 0xf12d, 0xef0e, 0xf12d, 0xee57, 0xf0a8, 0xee57, 0xf0a8, +0xecd0, 0xef54, 0xecd0, 0xef54, 0xeb7c, 0xee2f, 0xeb7c, 0xee2f, 0xea23, 0xed02, 0xea23, +0xed02, 0xe906, 0xec0e, 0xe906, 0xec0e, 0xe87b, 0xeba6, 0xe87b, 0xeba6, 0xe87b, 0xeba6, +0xe85e, 0xeba6, 0xe85e, 0xeba6, 0xe7e1, 0xeb40, 0xe7e1, 0xeb40, 0xe787, 0xeaf5, 0xe787, +0xeaf5, 0xe7ca, 0xeb3f, 0xe7ca, 0xeb3f, 0xe7cc, 0xeb40, 0xe7cc, 0xeb40, 0xe87d, 0xebe8, +0xe87d, 0xebe8, 0xe87d, 0xebe8, 0xe985, 0xecde, 0xe985, 0xecde, 0xea1c, 0xed5c, 0xea1c, +0xed5c, 0xeae6, 0xee03, 0xeae6, 0xee03, 0xeba0, 0xee95, 0xeba0, 0xee95, 0xecf4, 0xefba, +0xecf4, 0xefba, 0xecf4, 0xefba, 0xeea9, 0xf139, 0xeea9, 0xf139, 0xf00c, 0xf262, 0xf00c, +0xf262, 0xf1b2, 0xf3ca, 0xf1b2, 0xf3ca, 0xf379, 0xf54e, 0xf379, 0xf54e, 0xf4e1, 0xf671, +0xf4e1, 0xf671, 0xf621, 0xf76b, 0xf621, 0xf76b, 0xf621, 0xf76b, 0xf795, 0xf897, 0xf795, +0xf897, 0xf8a1, 0xf959, 0xf8a1, 0xf959, 0xfa07, 0xfa78, 0xfa07, 0xfa78, 0xfc03, 0xfc2b, +0xfc03, 0xfc2b, 0xfd73, 0xfd52, 0xfd73, 0xfd52, 0xfeaf, 0xfe47, 0xfeaf, 0xfe47, 0xfeaf, +0xfe47, 0x1c, 0xff6e, 0x1c, 0xff6e, 0x1d1, 0xde, 0x1d1, 0xde, 0x3d9, 0x2a1, +0x3d9, 0x2a1, 0x657, 0x4db, 0x657, 0x4db, 0x83b, 0x67a, 0x83b, 0x67a, 0x83b, +0x67a, 0x9c7, 0x7c2, 0x9c7, 0x7c2, 0xba3, 0x95a, 0xba3, 0x95a, 0xce1, 0xa54, +0xce1, 0xa54, 0xe10, 0xb3e, 0xe10, 0xb3e, 0xf40, 0xc29, 0xf40, 0xc29, 0x10b2, +0xd55, 0x10b2, 0xd55, 0x10b2, 0xd55, 0x12b2, 0xf0f, 0x12b2, 0xf0f, 0x1521, 0x113a, +0x1521, 0x113a, 0x177b, 0x134f, 0x177b, 0x134f, 0x190d, 0x149e, 0x190d, 0x149e, 0x1a7e, +0x15cf, 0x1a7e, 0x15cf, 0x1bc0, 0x16d3, 0x1bc0, 0x16d3, 0x1bc0, 0x16d3, 0x1cd8, 0x17b2, +0x1cd8, 0x17b2, 0x1e31, 0x18d7, 0x1e31, 0x18d7, 0x2027, 0x1aa0, 0x2027, 0x1aa0, 0x22eb, +0x1d3e, 0x22eb, 0x1d3e, 0x252e, 0x1f64, 0x252e, 0x1f64, 0x252e, 0x1f64, 0x25fe, 0x2020, +0x25fe, 0x2020, 0x263c, 0x2056, 0x263c, 0x2056, 0x2676, 0x2092, 0x2676, 0x2092, 0x2651, +0x207c, 0x2651, 0x207c, 0x26c1, 0x2107, 0x26c1, 0x2107, 0x274a, 0x21b9, 0x274a, 0x21b9, +0x274a, 0x21b9, 0x260a, 0x20ae, 0x260a, 0x20ae, 0x24d0, 0x1fb6, 0x24d0, 0x1fb6, 0x23c8, +0x1efb, 0x23c8, 0x1efb, 0x21ea, 0x1d75, 0x21ea, 0x1d75, 0x2090, 0x1c7f, 0x2090, 0x1c7f, +0x1eae, 0x1b08, 0x1eae, 0x1b08, 0x1eae, 0x1b08, 0x1c63, 0x1930, 0x1c63, 0x1930, 0x1a07, +0x174d, 0x1a07, 0x174d, 0x1770, 0x1532, 0x1770, 0x1532, 0x1512, 0x1353, 0x1512, 0x1353, +0x1267, 0x1127, 0x1267, 0x1127, 0x1267, 0x1127, 0xf92, 0xecf, 0xf92, 0xecf, 0xc8e, +0xc44, 0xc8e, 0xc44, 0xa3e, 0xa69, 0xa3e, 0xa69, 0x772, 0x809, 0x772, 0x809, +0x49f, 0x59a, 0x49f, 0x59a, 0x321, 0x477, 0x321, 0x477, 0x321, 0x477, 0x120, +0x2c7, 0x120, 0x2c7, 0xff0a, 0xf6, 0xff0a, 0xf6, 0xfd0b, 0xff31, 0xfd0b, 0xff31, +0xfaf1, 0xfd44, 0xfaf1, 0xfd44, 0xf8e9, 0xfb5f, 0xf8e9, 0xfb5f, 0xf760, 0xf9ee, 0xf760, +0xf9ee, 0xf760, 0xf9ee, 0xf5cd, 0xf86a, 0xf5cd, 0xf86a, 0xf3ee, 0xf68f, 0xf3ee, 0xf68f, +0xf25e, 0xf4fd, 0xf25e, 0xf4fd, 0xf07b, 0xf30f, 0xf07b, 0xf30f, 0xef8d, 0xf213, 0xef8d, +0xf213, 0xef8d, 0xf213, 0xef7e, 0xf1f2, 0xef7e, 0xf1f2, 0xefda, 0xf23a, 0xefda, 0xf23a, +0xf0ba, 0xf305, 0xf0ba, 0xf305, 0xf12b, 0xf362, 0xf12b, 0xf362, 0xf1f3, 0xf417, 0xf1f3, +0xf417, 0xf359, 0xf56d, 0xf359, 0xf56d, 0xf359, 0xf56d, 0xf40a, 0xf612, 0xf40a, 0xf612, +0xf3e1, 0xf5e0, 0xf3e1, 0xf5e0, 0xf3b9, 0xf5b5, 0xf3b9, 0xf5b5, 0xf323, 0xf51f, 0xf323, +0xf51f, 0xf1f9, 0xf3f8, 0xf1f9, 0xf3f8, 0xf1f9, 0xf3f8, 0xf0f2, 0xf2f8, 0xf0f2, 0xf2f8, +0xf085, 0xf294, 0xf085, 0xf294, 0xf034, 0xf24d, 0xf034, 0xf24d, 0xf026, 0xf24b, 0xf026, +0xf24b, 0xf0bd, 0xf2eb, 0xf0bd, 0xf2eb, 0xf072, 0xf2a7, 0xf072, 0xf2a7, 0xf072, 0xf2a7, +0xef56, 0xf18e, 0xef56, 0xf18e, 0xeed0, 0xf106, 0xeed0, 0xf106, 0xee95, 0xf0c2, 0xee95, +0xf0c2, 0xee0e, 0xf02a, 0xee0e, 0xf02a, 0xedec, 0xefee, 0xedec, 0xefee, 0xeea0, 0xf07e, +0xeea0, 0xf07e, 0xeea0, 0xf07e, 0xefeb, 0xf19d, 0xefeb, 0xf19d, 0xf159, 0xf2d3, 0xf159, +0xf2d3, 0xf2ff, 0xf438, 0xf2ff, 0xf438, 0xf4c7, 0xf5b5, 0xf4c7, 0xf5b5, 0xf695, 0xf72e, +0xf695, 0xf72e, 0xf695, 0xf72e, 0xf8b9, 0xf8f7, 0xf8b9, 0xf8f7, 0xfb43, 0xfb1f, 0xfb43, +0xfb1f, 0xfe92, 0xfe06, 0xfe92, 0xfe06, 0x14c, 0x57, 0x14c, 0x57, 0x3c6, 0x265, +0x3c6, 0x265, 0x63c, 0x472, 0x63c, 0x472, 0x63c, 0x472, 0x7c9, 0x597, 0x7c9, +0x597, 0x9df, 0x74c, 0x9df, 0x74c, 0xb9a, 0x8ab, 0xb9a, 0x8ab, 0xd2c, 0x9ec, +0xd2c, 0x9ec, 0xf32, 0xbaa, 0xf32, 0xbaa, 0x1004, 0xc40, 0x1004, 0xc40, 0x1004, +0xc40, 0x1024, 0xc32, 0x1024, 0xc32, 0x104c, 0xc3a, 0x104c, 0xc3a, 0x104f, 0xc2b, +0x104f, 0xc2b, 0x1073, 0xc4c, 0x1073, 0xc4c, 0x1131, 0xd15, 0x1131, 0xd15, 0x1131, +0xd15, 0x11cc, 0xdc9, 0x11cc, 0xdc9, 0x1174, 0xd96, 0x1174, 0xd96, 0x108f, 0xce2, +0x108f, 0xce2, 0xf88, 0xc16, 0xf88, 0xc16, 0xe7d, 0xb4e, 0xe7d, 0xb4e, 0xd4c, +0xa68, 0xd4c, 0xa68, 0xd4c, 0xa68, 0xc04, 0x96f, 0xc04, 0x96f, 0xb0f, 0x8cb, +0xb0f, 0x8cb, 0xa6a, 0x878, 0xa6a, 0x878, 0xa00, 0x860, 0xa00, 0x860, 0xa09, +0x8b7, 0xa09, 0x8b7, 0x967, 0x85f, 0x967, 0x85f, 0x967, 0x85f, 0x7a0, 0x6db, +0x7a0, 0x6db, 0x629, 0x5a1, 0x629, 0x5a1, 0x4df, 0x48c, 0x4df, 0x48c, 0x2fb, +0x2d4, 0x2fb, 0x2d4, 0x166, 0x164, 0x166, 0x164, 0x166, 0x164, 0x73, 0x8d, +0x73, 0x8d, 0xff89, 0xffb6, 0xff89, 0xffb6, 0xff18, 0xff51, 0xff18, 0xff51, 0xff42, +0xff7f, 0xff42, 0xff7f, 0xff35, 0xff71, 0xff35, 0xff71, 0xff18, 0xff4f, 0xff18, 0xff4f, +0xff18, 0xff4f, 0xff4c, 0xff7a, 0xff4c, 0xff7a, 0xff3b, 0xff5d, 0xff3b, 0xff5d, 0xfee6, +0xfefc, 0xfee6, 0xfefc, 0xff45, 0xff4f, 0xff45, 0xff4f, 0x6c, 0x6b, 0x6c, 0x6b, +0x1ae, 0x1a4, 0x1ae, 0x1a4, 0x1ae, 0x1a4, 0x34c, 0x33d, 0x34c, 0x33d, 0x4cb, +0x4b9, 0x4cb, 0x4b9, 0x50d, 0x4fc, 0x50d, 0x4fc, 0x55b, 0x54e, 0x55b, 0x54e, +0x66d, 0x668, 0x66d, 0x668, 0x66d, 0x668, 0x744, 0x74a, 0x744, 0x74a, 0x7a7, +0x7ba, 0x7a7, 0x7ba, 0x84b, 0x86c, 0x84b, 0x86c, 0x9b3, 0x9e2, 0x9b3, 0x9e2, +0xa1b, 0xa58, 0xa1b, 0xa58, 0x9b5, 0x9fd, 0x9b5, 0x9fd, 0x9b5, 0x9fd, 0x951, +0x9a1, 0x951, 0x9a1, 0x814, 0x868, 0x814, 0x868, 0x72d, 0x77f, 0x72d, 0x77f, +0x775, 0x7be, 0x775, 0x7be, 0x89a, 0x8d2, 0x89a, 0x8d2, 0x91b, 0x93a, 0x91b, +0x93a, 0x91b, 0x93a, 0x9f4, 0x9f2, 0x9f4, 0x9f2, 0xb8e, 0xb62, 0xb8e, 0xb62, +0xc75, 0xc16, 0xc75, 0xc16, 0xe19, 0xd80, 0xe19, 0xd80, 0xfb3, 0xed8, 0xfb3, +0xed8, 0xfb3, 0xed8, 0x10f6, 0xfd2, 0x10f6, 0xfd2, 0x1267, 0x10f5, 0x1267, 0x10f5, +0x1427, 0x1264, 0x1427, 0x1264, 0x163a, 0x1423, 0x163a, 0x1423, 0x179f, 0x1534, 0x179f, +0x1534, 0x18ef, 0x1632, 0x18ef, 0x1632, 0x18ef, 0x1632, 0x1a84, 0x1778, 0x1a84, 0x1778, +0x1d07, 0x19b1, 0x1d07, 0x19b1, 0x1ff4, 0x1c5b, 0x1ff4, 0x1c5b, 0x21d3, 0x1e00, 0x21d3, +0x1e00, 0x2209, 0x1e07, 0x2209, 0x1e07, 0x215e, 0x1d37, 0x215e, 0x1d37, 0x215e, 0x1d37, +0x20d9, 0x1c9a, 0x20d9, 0x1c9a, 0x1feb, 0x1ba1, 0x1feb, 0x1ba1, 0x1ef4, 0x1aaf, 0x1ef4, +0x1aaf, 0x1e3f, 0x1a0c, 0x1e3f, 0x1a0c, 0x1da6, 0x1992, 0x1da6, 0x1992, 0x1da6, 0x1992, +0x1cf0, 0x190a, 0x1cf0, 0x190a, 0x1bd7, 0x182b, 0x1bd7, 0x182b, 0x1a2b, 0x16c6, 0x1a2b, +0x16c6, 0x17bd, 0x14a9, 0x17bd, 0x14a9, 0x1489, 0x11cf, 0x1489, 0x11cf, 0x11bf, 0xf67, +0x11bf, 0xf67, 0x11bf, 0xf67, 0xff5, 0xe05, 0xff5, 0xe05, 0xdc4, 0xc41, 0xdc4, +0xc41, 0xbb4, 0xa9e, 0xbb4, 0xa9e, 0x999, 0x8f2, 0x999, 0x8f2, 0x71a, 0x6e1, +0x71a, 0x6e1, 0x508, 0x539, 0x508, 0x539, 0x508, 0x539, 0x28f, 0x326, 0x28f, +0x326, 0xff94, 0x8b, 0xff94, 0x8b, 0xfd01, 0xfe51, 0xfd01, 0xfe51, 0xfa93, 0xfc35, +0xfa93, 0xfc35, 0xf7dc, 0xf9c6, 0xf7dc, 0xf9c6, 0xf7dc, 0xf9c6, 0xf56b, 0xf794, 0xf56b, +0xf794, 0xf38e, 0xf5ed, 0xf38e, 0xf5ed, 0xf236, 0xf4c1, 0xf236, 0xf4c1, 0xf155, 0xf403, +0xf155, 0xf403, 0xf0af, 0xf377, 0xf0af, 0xf377, 0xef80, 0xf25a, 0xef80, 0xf25a, 0xef80, +0xf25a, 0xee8b, 0xf16f, 0xee8b, 0xf16f, 0xee2f, 0xf116, 0xee2f, 0xf116, 0xeddd, 0xf0c2, +0xeddd, 0xf0c2, 0xee0d, 0xf0eb, 0xee0d, 0xf0eb, 0xedfc, 0xf0cf, 0xedfc, 0xf0cf, 0xee8f, +0xf153, 0xee8f, 0xf153, 0xee8f, 0xf153, 0xef53, 0xf206, 0xef53, 0xf206, 0xeed8, 0xf179, +0xeed8, 0xf179, 0xeea5, 0xf133, 0xeea5, 0xf133, 0xee75, 0xf0f0, 0xee75, 0xf0f0, 0xee03, +0xf06b, 0xee03, 0xf06b, 0xee03, 0xf06b, 0xee74, 0xf0ca, 0xee74, 0xf0ca, 0xef87, 0xf1cc, +0xef87, 0xf1cc, 0xefd7, 0xf20a, 0xefd7, 0xf20a, 0xef65, 0xf189, 0xef65, 0xf189, 0xef3a, +0xf14f, 0xef3a, 0xf14f, 0xef26, 0xf12c, 0xef26, 0xf12c, 0xef26, 0xf12c, 0xef3c, 0xf134, +0xef3c, 0xf134, 0xefb7, 0xf19f, 0xefb7, 0xf19f, 0xf044, 0xf21d, 0xf044, 0xf21d, 0xf0b4, +0xf27c, 0xf0b4, 0xf27c, 0xf128, 0xf2de, 0xf128, 0xf2de, 0xf128, 0xf2de, 0xf217, 0xf3ba, +0xf217, 0xf3ba, 0xf27c, 0xf40a, 0xf27c, 0xf40a, 0xf273, 0xf3ea, 0xf273, 0xf3ea, 0xf31b, +0xf47a, 0xf31b, 0xf47a, 0xf3cc, 0xf511, 0xf3cc, 0xf511, 0xf504, 0xf62d, 0xf504, 0xf62d, +0xf504, 0xf62d, 0xf6a3, 0xf7b0, 0xf6a3, 0xf7b0, 0xf83c, 0xf92b, 0xf83c, 0xf92b, 0xf93b, +0xfa0d, 0xf93b, 0xfa0d, 0xf96c, 0xfa22, 0xf96c, 0xfa22, 0xf9b0, 0xfa4a, 0xf9b0, 0xfa4a, +0xf9f7, 0xfa78, 0xf9f7, 0xfa78, 0xf9f7, 0xfa78, 0xfad1, 0xfb3b, 0xfad1, 0xfb3b, 0xfb67, +0xfbbe, 0xfb67, 0xfbbe, 0xfbe9, 0xfc31, 0xfbe9, 0xfc31, 0xfc70, 0xfcae, 0xfc70, 0xfcae, +0xfbe4, 0xfc1e, 0xfbe4, 0xfc1e, 0xfbe4, 0xfc1e, 0xfb37, 0xfb72, 0xfb37, 0xfb72, 0xfa53, +0xfa95, 0xfa53, 0xfa95, 0xf9e4, 0xfa34, 0xf9e4, 0xfa34, 0xfa2f, 0xfa94, 0xfa2f, 0xfa94, +0xf9a2, 0xfa21, 0xf9a2, 0xfa21, 0xf945, 0xf9e5, 0xf945, 0xf9e5, 0xf945, 0xf9e5, 0xf930, +0xf9f6, 0xf930, 0xf9f6, 0xf7c6, 0xf8b8, 0xf7c6, 0xf8b8, 0xf6ef, 0xf811, 0xf6ef, 0xf811, +0xf633, 0xf788, 0xf633, 0xf788, 0xf437, 0xf5c2, 0xf437, 0xf5c2, 0xf346, 0xf50a, 0xf346, +0xf50a, 0xf346, 0xf50a, 0xf31f, 0xf51d, 0xf31f, 0xf51d, 0xf28d, 0xf4c5, 0xf28d, 0xf4c5, +0xf1d8, 0xf448, 0xf1d8, 0xf448, 0xf16d, 0xf415, 0xf16d, 0xf415, 0xf04e, 0xf32b, 0xf04e, +0xf32b, 0xf04e, 0xf32b, 0xeed6, 0xf1e6, 0xeed6, 0xf1e6, 0xee14, 0xf151, 0xee14, 0xf151, +0xec93, 0xeffa, 0xec93, 0xeffa, 0xeaa3, 0xee30, 0xeaa3, 0xee30, 0xe89e, 0xec4c, 0xe89e, +0xec4c, 0xe6a5, 0xea6f, 0xe6a5, 0xea6f, 0xe6a5, 0xea6f, 0xe52b, 0xe90d, 0xe52b, 0xe90d, +0xe332, 0xe727, 0xe332, 0xe727, 0xe21b, 0xe61e, 0xe21b, 0xe61e, 0xe249, 0xe657, 0xe249, +0xe657, 0xe205, 0xe61a, 0xe205, 0xe61a, 0xe1dd, 0xe5f6, 0xe1dd, 0xe5f6, 0xe1dd, 0xe5f6, +0xe1bb, 0xe5d5, 0xe1bb, 0xe5d5, 0xe168, 0xe581, 0xe168, 0xe581, 0xe167, 0xe57d, 0xe167, +0xe57d, 0xe1ea, 0xe5fb, 0xe1ea, 0xe5fb, 0xe1c5, 0xe5d0, 0xe1c5, 0xe5d0, 0xe1c5, 0xe5d0, +0xe09b, 0xe49e, 0xe09b, 0xe49e, 0xe03b, 0xe435, 0xe03b, 0xe435, 0xdf95, 0xe385, 0xdf95, +0xe385, 0xdf17, 0xe2fa, 0xdf17, 0xe2fa, 0xdf2d, 0xe302, 0xdf2d, 0xe302, 0xdf60, 0xe324, +0xdf60, 0xe324, 0xdf60, 0xe324, 0xe062, 0xe414, 0xe062, 0xe414, 0xe0c9, 0xe464, 0xe0c9, +0xe464, 0xe11a, 0xe49b, 0xe11a, 0xe49b, 0xe109, 0xe46b, 0xe109, 0xe46b, 0xe06a, 0xe3a8, +0xe06a, 0xe3a8, 0xe09b, 0xe3b0, 0xe09b, 0xe3b0, 0xe09b, 0xe3b0, 0xe16d, 0xe452, 0xe16d, +0xe452, 0xe300, 0xe5b0, 0xe300, 0xe5b0, 0xe510, 0xe784, 0xe510, 0xe784, 0xe76b, 0xe99d, +0xe76b, 0xe99d, 0xea29, 0xec13, 0xea29, 0xec13, 0xea29, 0xec13, 0xed19, 0xeeb5, 0xed19, +0xeeb5, 0xf002, 0xf149, 0xf002, 0xf149, 0xf314, 0xf403, 0xf314, 0xf403, 0xf605, 0xf696, +0xf605, 0xf696, 0xf930, 0xf961, 0xf930, 0xf961, 0xfd12, 0xfce0, 0xfd12, 0xfce0, 0xfd12, +0xfce0, 0xa4, 0xf, 0xa4, 0xf, 0x3b2, 0x2b9, 0x3b2, 0x2b9, 0x60c, 0x4b1, +0x60c, 0x4b1, 0x79f, 0x5e4, 0x79f, 0x5e4, 0x905, 0x6ee, 0x905, 0x6ee, 0xb27, +0x8b9, 0xb27, 0x8b9, 0xb27, 0x8b9, 0xd67, 0xaa9, 0xd67, 0xaa9, 0xecb, 0xbc2, +0xecb, 0xbc2, 0xfd9, 0xc8e, 0xfd9, 0xc8e, 0xff9, 0xc74, 0xff9, 0xc74, 0x1056, +0xca0, 0x1056, 0xca0, 0x1056, 0xca0, 0x11d6, 0xdf7, 0x11d6, 0xdf7, 0x12a5, 0xea6, +0x12a5, 0xea6, 0x132c, 0xf16, 0x132c, 0xf16, 0x140c, 0xfe6, 0x140c, 0xfe6, 0x14bc, +0x1090, 0x14bc, 0x1090, 0x14a9, 0x107c, 0x14a9, 0x107c, 0x14a9, 0x107c, 0x13ec, 0xfc5, +0x13ec, 0xfc5, 0x13cc, 0xfaf, 0x13cc, 0xfaf, 0x1405, 0xff7, 0x1405, 0xff7, 0x1464, +0x106a, 0x1464, 0x106a, 0x1532, 0x114c, 0x1532, 0x114c, 0x1629, 0x125a, 0x1629, 0x125a, +0x1629, 0x125a, 0x16da, 0x1322, 0x16da, 0x1322, 0x170d, 0x136c, 0x170d, 0x136c, 0x174f, +0x13c5, 0x174f, 0x13c5, 0x16cb, 0x1356, 0x16cb, 0x1356, 0x161e, 0x12bd, 0x161e, 0x12bd, +0x161e, 0x12bd, 0x164d, 0x12ff, 0x164d, 0x12ff, 0x15ee, 0x12b1, 0x15ee, 0x12b1, 0x153e, +0x1211, 0x153e, 0x1211, 0x14af, 0x1191, 0x14af, 0x1191, 0x13fb, 0x10ed, 0x13fb, 0x10ed, +0x135f, 0x1060, 0x135f, 0x1060, 0x135f, 0x1060, 0x1343, 0x1053, 0x1343, 0x1053, 0x136a, +0x108b, 0x136a, 0x108b, 0x12a7, 0xfdb, 0x12a7, 0xfdb, 0x11ee, 0xf37, 0x11ee, 0xf37, +0x11d3, 0xf35, 0x11d3, 0xf35, 0x119f, 0xf1e, 0x119f, 0xf1e, 0x119f, 0xf1e, 0x11b4, +0xf52, 0x11b4, 0xf52, 0x119c, 0xf5d, 0x119c, 0xf5d, 0x115a, 0xf43, 0x115a, 0xf43, +0x10c8, 0xedb, 0x10c8, 0xedb, 0xfc3, 0xe04, 0xfc3, 0xe04, 0xfc3, 0xe04, 0xe70, +0xce1, 0xe70, 0xce1, 0xcb1, 0xb54, 0xcb1, 0xb54, 0xbc6, 0xa9c, 0xbc6, 0xa9c, +0xb4c, 0xa55, 0xb4c, 0xa55, 0xad4, 0xa0f, 0xad4, 0xa0f, 0xa63, 0x9ce, 0xa63, +0x9ce, 0xa63, 0x9ce, 0x985, 0x91b, 0x985, 0x91b, 0x837, 0x7f5, 0x837, 0x7f5, +0x60d, 0x5ee, 0x60d, 0x5ee, 0x401, 0x3fe, 0x401, 0x3fe, 0x26d, 0x27f, 0x26d, +0x27f, 0x143, 0x163, 0x143, 0x163, 0x143, 0x163, 0x102, 0x128, 0x102, 0x128, +0x12a, 0x14e, 0x12a, 0x14e, 0x190, 0x1ab, 0x190, 0x1ab, 0x1f8, 0x202, 0x1f8, +0x202, 0x278, 0x26a, 0x278, 0x26a, 0x278, 0x26a, 0x2ce, 0x2a3, 0x2ce, 0x2a3, +0x2a4, 0x257, 0x2a4, 0x257, 0x2b7, 0x245, 0x2b7, 0x245, 0x323, 0x289, 0x323, +0x289, 0x456, 0x395, 0x456, 0x395, 0x5ff, 0x517, 0x5ff, 0x517, 0x5ff, 0x517, +0x75b, 0x650, 0x75b, 0x650, 0x8a4, 0x779, 0x8a4, 0x779, 0x9ed, 0x8a9, 0x9ed, +0x8a9, 0xb5d, 0xa07, 0xb5d, 0xa07, 0xc9a, 0xb3b, 0xc9a, 0xb3b, 0xc9a, 0xb3b, +0xd46, 0xbe6, 0xd46, 0xbe6, 0xcb1, 0xb5b, 0xcb1, 0xb5b, 0xad4, 0x993, 0xad4, +0x993, 0x873, 0x750, 0x873, 0x750, 0x647, 0x54e, 0x647, 0x54e, 0x467, 0x3a2, +0x467, 0x3a2, 0x467, 0x3a2, 0x2dd, 0x254, 0x2dd, 0x254, 0x20c, 0x1c8, 0x20c, +0x1c8, 0x7f, 0x86, 0x7f, 0x86, 0xfe86, 0xfedf, 0xfe86, 0xfedf, 0xfc42, 0xfcee, +0xfc42, 0xfcee, 0xf97b, 0xfa7d, 0xf97b, 0xfa7d, 0xf97b, 0xfa7d, 0xf6d4, 0xf82c, 0xf6d4, +0xf82c, 0xf3cf, 0xf57b, 0xf3cf, 0xf57b, 0xf18c, 0xf388, 0xf18c, 0xf388, 0xf0c1, 0xf307, +0xf0c1, 0xf307, 0xf06a, 0xf2f1, 0xf06a, 0xf2f1, 0xf06a, 0xf2f1, 0xef04, 0xf1c4, 0xef04, +0xf1c4, 0xedec, 0xf0db, 0xedec, 0xf0db, 0xed2d, 0xf03f, 0xed2d, 0xf03f, 0xec4e, 0xef77, +0xec4e, 0xef77, 0xec81, 0xefb5, 0xec81, 0xefb5, 0xebec, 0xef1e, 0xebec, 0xef1e, 0xebec, +0xef1e, 0xeb70, 0xee94, 0xeb70, 0xee94, 0xebb2, 0xeebb, 0xebb2, 0xeebb, 0xebb8, 0xee9b, +0xebb8, 0xee9b, 0xec15, 0xeec9, 0xec15, 0xeec9, 0xed3e, 0xefb9, 0xed3e, 0xefb9, 0xeebc, +0xf0f8, 0xeebc, 0xf0f8, 0xeebc, 0xf0f8, 0xefdb, 0xf1d0, 0xefdb, 0xf1d0, 0xf120, 0xf2cb, +0xf120, 0xf2cb, 0xf21f, 0xf37d, 0xf21f, 0xf37d, 0xf349, 0xf458, 0xf349, 0xf458, 0xf4be, +0xf57f, 0xf4be, 0xf57f, 0xf4be, 0xf57f, 0xf625, 0xf699, 0xf625, 0xf699, 0xf87c, 0xf8a7, +0xf87c, 0xf8a7, 0xfadd, 0xfac2, 0xfadd, 0xfac2, 0xfc3c, 0xfbe1, 0xfc3c, 0xfbe1, 0xfd6f, +0xfcd9, 0xfd6f, 0xfcd9, 0xfe8d, 0xfdc1, 0xfe8d, 0xfdc1, 0xfe8d, 0xfdc1, 0xff1e, 0xfe23, +0xff1e, 0xfe23, 0xffd8, 0xfeb4, 0xffd8, 0xfeb4, 0xdf, 0xff98, 0xdf, 0xff98, 0x1bc, +0x56, 0x1bc, 0x56, 0x2e2, 0x163, 0x2e2, 0x163, 0x39b, 0x207, 0x39b, 0x207, +0x39b, 0x207, 0x36d, 0x1c7, 0x36d, 0x1c7, 0x3d7, 0x220, 0x3d7, 0x220, 0x408, +0x244, 0x408, 0x244, 0x3e0, 0x20e, 0x3e0, 0x20e, 0x435, 0x255, 0x435, 0x255, +0x435, 0x255, 0x4d4, 0x2e7, 0x4d4, 0x2e7, 0x5fa, 0x3fe, 0x5fa, 0x3fe, 0x70d, +0x501, 0x70d, 0x501, 0x833, 0x616, 0x833, 0x616, 0x934, 0x704, 0x934, 0x704, +0xa7d, 0x83a, 0xa7d, 0x83a, 0xa7d, 0x83a, 0xbe7, 0x990, 0xbe7, 0x990, 0xd2d, +0xac2, 0xd2d, 0xac2, 0xf22, 0xca2, 0xf22, 0xca2, 0x10f7, 0xe64, 0x10f7, 0xe64, +0x1217, 0xf74, 0x1217, 0xf74, 0x12f8, 0x1048, 0x12f8, 0x1048, 0x12f8, 0x1048, 0x1427, +0x116d, 0x1427, 0x116d, 0x149f, 0x11e0, 0x149f, 0x11e0, 0x15ae, 0x12f0, 0x15ae, 0x12f0, +0x17f4, 0x153e, 0x17f4, 0x153e, 0x199a, 0x16f2, 0x199a, 0x16f2, 0x199a, 0x16f2, 0x1a8b, +0x17f8, 0x1a8b, 0x17f8, 0x1a85, 0x180f, 0x1a85, 0x180f, 0x1a32, 0x17df, 0x1a32, 0x17df, +0x19d3, 0x17ac, 0x19d3, 0x17ac, 0x197a, 0x1785, 0x197a, 0x1785, 0x1948, 0x178b, 0x1948, +0x178b, 0x1948, 0x178b, 0x1976, 0x17f7, 0x1976, 0x17f7, 0x198e, 0x1851, 0x198e, 0x1851, +0x1839, 0x1741, 0x1839, 0x1741, 0x16a9, 0x15f9, 0x16a9, 0x15f9, 0x1485, 0x141d, 0x1485, +0x141d, 0x118c, 0x116a, 0x118c, 0x116a, 0x118c, 0x116a, 0xfb5, 0xfd8, 0xfb5, 0xfd8, +0xdf8, 0xe5c, 0xdf8, 0xe5c, 0xca7, 0xd48, 0xca7, 0xd48, 0xc89, 0xd60, 0xc89, +0xd60, 0xbab, 0xcb0, 0xbab, 0xcb0, 0xbab, 0xcb0, 0xb08, 0xc33, 0xb08, 0xc33, +0xaa1, 0xbe9, 0xaa1, 0xbe9, 0x930, 0xa8b, 0x930, 0xa8b, 0x7ad, 0x910, 0x7ad, +0x910, 0x6a7, 0x809, 0x6a7, 0x809, 0x52a, 0x680, 0x52a, 0x680, 0x52a, 0x680, +0x344, 0x485, 0x344, 0x485, 0x29e, 0x3c0, 0x29e, 0x3c0, 0x222, 0x31d, 0x222, +0x31d, 0x227, 0x2f3, 0x227, 0x2f3, 0x375, 0x40c, 0x375, 0x40c, 0x502, 0x560, +0x502, 0x560, 0x502, 0x560, 0x700, 0x721, 0x700, 0x721, 0x89a, 0x87c, 0x89a, +0x87c, 0x9b3, 0x955, 0x9b3, 0x955, 0xab4, 0xa17, 0xab4, 0xa17, 0xbcb, 0xaf2, +0xbcb, 0xaf2, 0xbcb, 0xaf2, 0xd2f, 0xc1d, 0xd2f, 0xc1d, 0xe83, 0xd3d, 0xe83, +0xd3d, 0xf85, 0xe11, 0xf85, 0xe11, 0xfe9, 0xe4d, 0xfe9, 0xe4d, 0x104c, 0xe90, +0x104c, 0xe90, 0x1094, 0xebf, 0x1094, 0xebf, 0x1094, 0xebf, 0x1079, 0xe93, 0x1079, +0xe93, 0x10a1, 0xeb2, 0x10a1, 0xeb2, 0x100e, 0xe1d, 0x100e, 0xe1d, 0xef6, 0xd09, +0xef6, 0xd09, 0xe2b, 0xc4a, 0xe2b, 0xc4a, 0xcf4, 0xb23, 0xcf4, 0xb23, 0xcf4, +0xb23, 0xb93, 0x9d6, 0xb93, 0x9d6, 0xa2a, 0x885, 0xa2a, 0x885, 0x933, 0x7a8, +0x933, 0x7a8, 0x878, 0x708, 0x878, 0x708, 0x789, 0x634, 0x789, 0x634, 0x789, +0x634, 0x6f5, 0x5bb, 0x6f5, 0x5bb, 0x5df, 0x4bc, 0x5df, 0x4bc, 0x50b, 0x3fd, +0x50b, 0x3fd, 0x542, 0x447, 0x542, 0x447, 0x528, 0x43b, 0x528, 0x43b, 0x4f6, +0x414, 0x4f6, 0x414, 0x4f6, 0x414, 0x585, 0x4a9, 0x585, 0x4a9, 0x68e, 0x5b5, +0x68e, 0x5b5, 0x735, 0x65c, 0x735, 0x65c, 0x753, 0x676, 0x753, 0x676, 0x74d, +0x66b, 0x74d, 0x66b, 0x683, 0x59b, 0x683, 0x59b, 0x683, 0x59b, 0x545, 0x457, +0x545, 0x457, 0x509, 0x417, 0x509, 0x417, 0x592, 0x49c, 0x592, 0x49c, 0x5d4, +0x4de, 0x5d4, 0x4de, 0x4dc, 0x3e9, 0x4dc, 0x3e9, 0x4dc, 0x3e9, 0x39e, 0x2b4, +0x39e, 0x2b4, 0x25e, 0x182, 0x25e, 0x182, 0x63, 0xff9c, 0x63, 0xff9c, 0xff81, +0xfed5, 0xff81, 0xfed5, 0xfe96, 0xfe0c, 0xfe96, 0xfe0c, 0xfd77, 0xfd17, 0xfd77, 0xfd17, +0xfd77, 0xfd17, 0xfd01, 0xfcd1, 0xfd01, 0xfcd1, 0xfbbc, 0xfbc3, 0xfbbc, 0xfbc3, 0xfa3a, +0xfa7e, 0xfa3a, 0xfa7e, 0xf86d, 0xf8f4, 0xf86d, 0xf8f4, 0xf6d5, 0xf7a2, 0xf6d5, 0xf7a2, +0xf6d5, 0xf7a2, 0xf521, 0xf638, 0xf521, 0xf638, 0xf336, 0xf499, 0xf336, 0xf499, 0xf219, +0xf3c8, 0xf219, 0xf3c8, 0xf0d2, 0xf2cd, 0xf0d2, 0xf2cd, 0xef3a, 0xf181, 0xef3a, 0xf181, +0xeddc, 0xf06a, 0xeddc, 0xf06a, 0xeddc, 0xf06a, 0xec70, 0xef42, 0xec70, 0xef42, 0xea3e, +0xed4e, 0xea3e, 0xed4e, 0xe8ac, 0xebf3, 0xe8ac, 0xebf3, 0xe7b3, 0xeb2c, 0xe7b3, 0xeb2c, +0xe623, 0xe9c5, 0xe623, 0xe9c5, 0xe4da, 0xe89e, 0xe4da, 0xe89e, 0xe4da, 0xe89e, 0xe3a5, +0xe783, 0xe3a5, 0xe783, 0xe22c, 0xe61b, 0xe22c, 0xe61b, 0xe0b2, 0xe4ab, 0xe0b2, 0xe4ab, +0xdff3, 0xe3ee, 0xdff3, 0xe3ee, 0xdfc7, 0xe3bc, 0xdfc7, 0xe3bc, 0xdfc7, 0xe3bc, 0xdf70, +0xe359, 0xdf70, 0xe359, 0xdf70, 0xe347, 0xdf70, 0xe347, 0xe07a, 0xe43a, 0xe07a, 0xe43a, +0xe196, 0xe53b, 0xe196, 0xe53b, 0xe21d, 0xe5a3, 0xe21d, 0xe5a3, 0xe362, 0xe6c8, 0xe362, +0xe6c8, 0xe362, 0xe6c8, 0xe4ef, 0xe833, 0xe4ef, 0xe833, 0xe5c9, 0xe8ea, 0xe5c9, 0xe8ea, +0xe6a6, 0xe9a5, 0xe6a6, 0xe9a5, 0xe751, 0xea2e, 0xe751, 0xea2e, 0xe772, 0xea2d, 0xe772, +0xea2d, 0xe887, 0xeb24, 0xe887, 0xeb24, 0xe887, 0xeb24, 0xea58, 0xecd7, 0xea58, 0xecd7, +0xeb55, 0xedb8, 0xeb55, 0xedb8, 0xec59, 0xeea3, 0xec59, 0xeea3, 0xecf3, 0xef24, 0xecf3, +0xef24, 0xec2c, 0xee47, 0xec2c, 0xee47, 0xec2c, 0xee47, 0xec1f, 0xee26, 0xec1f, 0xee26, +0xecb9, 0xeead, 0xecb9, 0xeead, 0xed48, 0xef2a, 0xed48, 0xef2a, 0xeea2, 0xf072, 0xeea2, +0xf072, 0xf024, 0xf1e2, 0xf024, 0xf1e2, 0xf1e7, 0xf394, 0xf1e7, 0xf394, 0xf1e7, 0xf394, +0xf35c, 0xf4f7, 0xf35c, 0xf4f7, 0xf466, 0xf5ef, 0xf466, 0xf5ef, 0xf563, 0xf6db, 0xf563, +0xf6db, 0xf5ed, 0xf752, 0xf5ed, 0xf752, 0xf67b, 0xf7cf, 0xf67b, 0xf7cf, 0xf737, 0xf87a, +0xf737, 0xf87a, 0xf737, 0xf87a, 0xf83f, 0xf972, 0xf83f, 0xf972, 0xf8f8, 0xfa1b, 0xf8f8, +0xfa1b, 0xf9ea, 0xfb00, 0xf9ea, 0xfb00, 0xfb13, 0xfc1d, 0xfb13, 0xfc1d, 0xfaf1, 0xfbf4, +0xfaf1, 0xfbf4, 0xfaf1, 0xfbf4, 0xfabd, 0xfbba, 0xfabd, 0xfbba, 0xfb48, 0xfc45, 0xfb48, +0xfc45, 0xfb86, 0xfc86, 0xfb86, 0xfc86, 0xfb43, 0xfc4b, 0xfb43, 0xfc4b, 0xfa28, 0xfb3e, +0xfa28, 0xfb3e, 0xf816, 0xf93f, 0xf816, 0xf93f, 0xf816, 0xf93f, 0xf5c2, 0xf702, 0xf5c2, +0xf702, 0xf3fa, 0xf557, 0xf3fa, 0xf557, 0xf307, 0xf486, 0xf307, 0xf486, 0xf1d1, 0xf376, +0xf1d1, 0xf376, 0xf064, 0xf233, 0xf064, 0xf233, 0xeeff, 0xf0fb, 0xeeff, 0xf0fb, 0xeeff, +0xf0fb, 0xed57, 0xef81, 0xed57, 0xef81, 0xebb3, 0xee0d, 0xebb3, 0xee0d, 0xea45, 0xeccf, +0xea45, 0xeccf, 0xe8fd, 0xebb5, 0xe8fd, 0xebb5, 0xe7c6, 0xeaaa, 0xe7c6, 0xeaaa, 0xe7c6, +0xeaaa, 0xe7ac, 0xeab9, 0xe7ac, 0xeab9, 0xe84e, 0xeb7f, 0xe84e, 0xeb7f, 0xe8d2, 0xec20, +0xe8d2, 0xec20, 0xe8d2, 0xec38, 0xe8d2, 0xec38, 0xe913, 0xec89, 0xe913, 0xec89, 0xea42, +0xedbf, 0xea42, 0xedbf, 0xea42, 0xedbf, 0xea9b, 0xee17, 0xea9b, 0xee17, 0xeb2c, 0xee9e, +0xeb2c, 0xee9e, 0xec01, 0xef5f, 0xec01, 0xef5f, 0xebb9, 0xeefa, 0xebb9, 0xeefa, 0xec39, +0xef54, 0xec39, 0xef54, 0xed36, 0xf023, 0xed36, 0xf023, 0xed36, 0xf023, 0xed3d, 0xeff3, +0xed3d, 0xeff3, 0xedab, 0xf024, 0xedab, 0xf024, 0xeee3, 0xf118, 0xeee3, 0xf118, 0xefec, +0xf1d7, 0xefec, 0xf1d7, 0xf193, 0xf331, 0xf193, 0xf331, 0xf193, 0xf331, 0xf40f, 0xf55b, +0xf40f, 0xf55b, 0xf596, 0xf68e, 0xf596, 0xf68e, 0xf6ce, 0xf772, 0xf6ce, 0xf772, 0xf912, +0xf962, 0xf912, 0xf962, 0xfb5c, 0xfb58, 0xfb5c, 0xfb58, 0xfd81, 0xfd2b, 0xfd81, 0xfd2b, +0xfd81, 0xfd2b, 0xff15, 0xfe70, 0xff15, 0xfe70, 0xf, 0xff1d, 0xf, 0xff1d, 0x184, +0x48, 0x184, 0x48, 0x334, 0x1b3, 0x334, 0x1b3, 0x546, 0x383, 0x546, 0x383, +0x7e7, 0x5e8, 0x7e7, 0x5e8, 0x7e7, 0x5e8, 0x9ed, 0x7b3, 0x9ed, 0x7b3, 0xb8d, +0x91e, 0xb8d, 0x91e, 0xcf1, 0xa4f, 0xcf1, 0xa4f, 0xd06, 0xa35, 0xd06, 0xa35, +0xd8a, 0xa8d, 0xd8a, 0xa8d, 0xd8a, 0xa8d, 0xef9, 0xbd2, 0xef9, 0xbd2, 0x1029, +0xcdb, 0x1029, 0xcdb, 0x120e, 0xe9a, 0x120e, 0xe9a, 0x14d1, 0x1138, 0x14d1, 0x1138, +0x16ff, 0x1344, 0x16ff, 0x1344, 0x18eb, 0x1510, 0x18eb, 0x1510, 0x18eb, 0x1510, 0x1b82, +0x1789, 0x1b82, 0x1789, 0x1d58, 0x1941, 0x1d58, 0x1941, 0x1f56, 0x1b25, 0x1f56, 0x1b25, +0x21af, 0x1d66, 0x21af, 0x1d66, 0x238c, 0x1f30, 0x238c, 0x1f30, 0x25e8, 0x217c, 0x25e8, +0x217c, 0x25e8, 0x217c, 0x27c9, 0x2352, 0x27c9, 0x2352, 0x28c8, 0x244b, 0x28c8, 0x244b, +0x2946, 0x24c8, 0x2946, 0x24c8, 0x29c7, 0x2551, 0x29c7, 0x2551, 0x2a5f, 0x25f7, 0x2a5f, +0x25f7, 0x2a5f, 0x25f7, 0x2a4b, 0x25f9, 0x2a4b, 0x25f9, 0x2962, 0x252e, 0x2962, 0x252e, +0x27e2, 0x23d4, 0x27e2, 0x23d4, 0x263e, 0x225f, 0x263e, 0x225f, 0x2437, 0x208e, 0x2437, +0x208e, 0x21b0, 0x1e47, 0x21b0, 0x1e47, 0x21b0, 0x1e47, 0x1fa5, 0x1c82, 0x1fa5, 0x1c82, +0x1df8, 0x1b21, 0x1df8, 0x1b21, 0x1c05, 0x1981, 0x1c05, 0x1981, 0x1a8b, 0x185d, 0x1a8b, +0x185d, 0x18ef, 0x171b, 0x18ef, 0x171b, 0x15d8, 0x1461, 0x15d8, 0x1461, 0x15d8, 0x1461, +0x11c7, 0x10ac, 0x11c7, 0x10ac, 0xe37, 0xd79, 0xe37, 0xd79, 0xafa, 0xa96, 0xafa, +0xa96, 0x7bd, 0x7af, 0x7bd, 0x7af, 0x553, 0x597, 0x553, 0x597, 0x553, 0x597, +0x36a, 0x3fa, 0x36a, 0x3fa, 0x1e8, 0x2be, 0x1e8, 0x2be, 0xd3, 0x1e6, 0xd3, +0x1e6, 0xff55, 0x9d, 0xff55, 0x9d, 0xfd15, 0xfe8a, 0xfd15, 0xfe8a, 0xfab9, 0xfc53, +0xfab9, 0xfc53, 0xfab9, 0xfc53, 0xf889, 0xfa3f, 0xf889, 0xfa3f, 0xf6c0, 0xf889, 0xf6c0, +0xf889, 0xf522, 0xf6f8, 0xf522, 0xf6f8, 0xf386, 0xf562, 0xf386, 0xf562, 0xf224, 0xf401, +0xf224, 0xf401, 0xf224, 0xf401, 0xf152, 0xf32a, 0xf152, 0xf32a, 0xf1a4, 0xf374, 0xf1a4, +0xf374, 0xf22f, 0xf3f5, 0xf22f, 0xf3f5, 0xf283, 0xf43e, 0xf283, 0xf43e, 0xf25f, 0xf40f, +0xf25f, 0xf40f, 0xf25f, 0xf404, 0xf25f, 0xf404, 0xf25f, 0xf404, 0xf24b, 0xf3e8, 0xf24b, +0xf3e8, 0xf1c1, 0xf35a, 0xf1c1, 0xf35a, 0xf232, 0xf3c8, 0xf232, 0xf3c8, 0xf244, 0xf3dc, +0xf244, 0xf3dc, 0xf238, 0xf3d6, 0xf238, 0xf3d6, 0xf2f7, 0xf49e, 0xf2f7, 0xf49e, 0xf2f7, +0xf49e, 0xf307, 0xf4b9, 0xf307, 0xf4b9, 0xf261, 0xf422, 0xf261, 0xf422, 0xf167, 0xf339, +0xf167, 0xf339, 0xf081, 0xf264, 0xf081, 0xf264, 0xeff4, 0xf1e7, 0xeff4, 0xf1e7, 0xeff4, +0xf1e7, 0xef37, 0xf139, 0xef37, 0xf139, 0xee88, 0xf095, 0xee88, 0xf095, 0xed82, 0xef96, +0xed82, 0xef96, 0xec62, 0xee77, 0xec62, 0xee77, 0xebcd, 0xeddc, 0xebcd, 0xeddc, 0xeb2b, +0xed2d, 0xeb2b, 0xed2d, 0xeb2b, 0xed2d, 0xeb44, 0xed2f, 0xeb44, 0xed2f, 0xec0f, 0xedda, +0xec0f, 0xedda, 0xeda1, 0xef42, 0xeda1, 0xef42, 0xef83, 0xf0f1, 0xef83, 0xf0f1, 0xf17c, +0xf2ad, 0xf17c, 0xf2ad, 0xf3ea, 0xf4d4, 0xf3ea, 0xf4d4, 0xf3ea, 0xf4d4, 0xf618, 0xf6b4, +0xf618, 0xf6b4, 0xf94d, 0xf994, 0xf94d, 0xf994, 0xfcec, 0xfcd7, 0xfcec, 0xfcd7, 0xe, +0xff9a, 0xe, 0xff9a, 0x300, 0x22a, 0x300, 0x22a, 0x300, 0x22a, 0x5c8, 0x490, +0x5c8, 0x490, 0x8a5, 0x70b, 0x8a5, 0x70b, 0xb44, 0x94d, 0xb44, 0x94d, 0xd9a, +0xb49, 0xd9a, 0xb49, 0xf54, 0xcb1, 0xf54, 0xcb1, 0x1129, 0xe3e, 0x1129, 0xe3e, +0x1129, 0xe3e, 0x1385, 0x105b, 0x1385, 0x105b, 0x152d, 0x11d0, 0x152d, 0x11d0, 0x155e, +0x11da, 0x155e, 0x11da, 0x1498, 0x10fa, 0x1498, 0x10fa, 0x1409, 0x105e, 0x1409, 0x105e, +0x13fc, 0x1052, 0x13fc, 0x1052, 0x13fc, 0x1052, 0x13c5, 0x1029, 0x13c5, 0x1029, 0x13d8, +0x1055, 0x13d8, 0x1055, 0x1372, 0x1015, 0x1372, 0x1015, 0x1264, 0xf37, 0x1264, 0xf37, +0x1181, 0xe8c, 0x1181, 0xe8c, 0x1181, 0xe8c, 0xfbc, 0xd06, 0xfbc, 0xd06, 0xde1, +0xb71, 0xde1, 0xb71, 0xb92, 0x96a, 0xb92, 0x96a, 0x957, 0x779, 0x957, 0x779, +0x8b8, 0x724, 0x8b8, 0x724, 0x8bb, 0x76f, 0x8bb, 0x76f, 0x8bb, 0x76f, 0x85c, +0x755, 0x85c, 0x755, 0x72d, 0x666, 0x72d, 0x666, 0x63c, 0x5af, 0x63c, 0x5af, +0x52d, 0x4d3, 0x52d, 0x4d3, 0x3ca, 0x39b, 0x3ca, 0x39b, 0x263, 0x258, 0x263, +0x258, 0x263, 0x258, 0x9c, 0xac, 0x9c, 0xac, 0xfe83, 0xfea6, 0xfe83, 0xfea6, +0xfdb5, 0xfde3, 0xfdb5, 0xfde3, 0xfdb9, 0xfdeb, 0xfdb9, 0xfdeb, 0xfc90, 0xfcc1, 0xfc90, +0xfcc1, 0xfc90, 0xfcc1, 0xfc60, 0xfc89, 0xfc60, 0xfc89, 0xfce8, 0xfd05, 0xfce8, 0xfd05, +0xfddc, 0xfdea, 0xfddc, 0xfdea, 0xff1b, 0xff17, 0xff1b, 0xff17, 0xffda, 0xffc5, 0xffda, +0xffc5, 0x76, 0x4f, 0x76, 0x4f, 0x76, 0x4f, 0x136, 0xfe, 0x136, 0xfe, +0x37c, 0x336, 0x37c, 0x336, 0x52f, 0x4dc, 0x52f, 0x4dc, 0x6db, 0x67f, 0x6db, +0x67f, 0x833, 0x7d1, 0x833, 0x7d1, 0x859, 0x7f3, 0x859, 0x7f3, 0x859, 0x7f3, +0x943, 0x8de, 0x943, 0x8de, 0x91c, 0x8b9, 0x91c, 0x8b9, 0x909, 0x8aa, 0x909, +0x8aa, 0x8fc, 0x8a2, 0x8fc, 0x8a2, 0x81d, 0x7c8, 0x81d, 0x7c8, 0x81d, 0x7c8, +0x804, 0x7b3, 0x804, 0x7b3, 0x7fe, 0x7b0, 0x7fe, 0x7b0, 0x761, 0x713, 0x761, +0x713, 0x6d1, 0x67e, 0x6d1, 0x67e, 0x71f, 0x6c2, 0x71f, 0x6c2, 0x72e, 0x6c1, +0x72e, 0x6c1, 0x72e, 0x6c1, 0x79f, 0x71d, 0x79f, 0x71d, 0x878, 0x7d9, 0x878, +0x7d9, 0x85c, 0x798, 0x85c, 0x798, 0x903, 0x814, 0x903, 0x814, 0xb49, 0xa28, +0xb49, 0xa28, 0xd11, 0xbb7, 0xd11, 0xbb7, 0xd11, 0xbb7, 0xe5f, 0xcc7, 0xe5f, +0xcc7, 0x1114, 0xf38, 0x1114, 0xf38, 0x1339, 0x1116, 0x1339, 0x1116, 0x15ee, 0x1382, +0x15ee, 0x1382, 0x195e, 0x16a8, 0x195e, 0x16a8, 0x195e, 0x16a8, 0x1b27, 0x1828, 0x1b27, +0x1828, 0x1d62, 0x1a1b, 0x1d62, 0x1a1b, 0x1f19, 0x1b8f, 0x1f19, 0x1b8f, 0x20b5, 0x1cee, +0x20b5, 0x1cee, 0x22ae, 0x1eb0, 0x22ae, 0x1eb0, 0x23c6, 0x1f9a, 0x23c6, 0x1f9a, 0x23c6, +0x1f9a, 0x244f, 0x1ffe, 0x244f, 0x1ffe, 0x242c, 0x1fc1, 0x242c, 0x1fc1, 0x23e6, 0x1f6b, +0x23e6, 0x1f6b, 0x22c2, 0x1e44, 0x22c2, 0x1e44, 0x21e3, 0x1d6e, 0x21e3, 0x1d6e, 0x20e5, +0x1c85, 0x20e5, 0x1c85, 0x20e5, 0x1c85, 0x1fc2, 0x1b82, 0x1fc2, 0x1b82, 0x1f36, 0x1b21, +0x1f36, 0x1b21, 0x1daf, 0x19cf, 0x1daf, 0x19cf, 0x1ab3, 0x1712, 0x1ab3, 0x1712, 0x17b8, +0x145d, 0x17b8, 0x145d, 0x17b8, 0x145d, 0x1609, 0x12fb, 0x1609, 0x12fb, 0x12a6, 0xfe9, +0x12a6, 0xfe9, 0x100a, 0xda2, 0x100a, 0xda2, 0xd87, 0xb75, 0xd87, 0xb75, 0x9c9, +0x80d, 0x9c9, 0x80d, 0x8a6, 0x73f, 0x8a6, 0x73f, 0x8a6, 0x73f, 0x65b, 0x547, +0x65b, 0x547, 0x3d6, 0x310, 0x3d6, 0x310, 0x159, 0xdd, 0x159, 0xdd, 0xfe6f, +0xfe36, 0xfe6f, 0xfe36, 0xfd0d, 0xfd12, 0xfd0d, 0xfd12, 0xfb09, 0xfb45, 0xfb09, 0xfb45, +0xfb09, 0xfb45, 0xf85d, 0xf8c8, 0xf85d, 0xf8c8, 0xf4db, 0xf56f, 0xf4db, 0xf56f, 0xf25d, +0xf314, 0xf25d, 0xf314, 0xf0a2, 0xf174, 0xf0a2, 0xf174, 0xee98, 0xef81, 0xee98, 0xef81, +0xee98, 0xef81, 0xee50, 0xef4a, 0xee50, 0xef4a, 0xed57, 0xee5f, 0xed57, 0xee5f, 0xebe0, +0xecf3, 0xebe0, 0xecf3, 0xece8, 0xee03, 0xece8, 0xee03, 0xecd8, 0xedfa, 0xecd8, 0xedfa, +0xebae, 0xecd7, 0xebae, 0xecd7, 0xebae, 0xecd7, 0xeca2, 0xedd2, 0xeca2, 0xedd2, 0xeccf, +0xee06, 0xeccf, 0xee06, 0xee2b, 0xef6c, 0xee2b, 0xef6c, 0xf097, 0xf1e3, 0xf097, 0xf1e3, +0xf026, 0xf17f, 0xf026, 0xf17f, 0xf026, 0xf17f, 0xefce, 0xf135, 0xefce, 0xf135, 0xeffb, +0xf173, 0xeffb, 0xf173, 0xf0af, 0xf239, 0xf0af, 0xf239, 0xf0af, 0xf24b, 0xf0af, 0xf24b, +0xf091, 0xf241, 0xf091, 0xf241, 0xf022, 0xf1e5, 0xf022, 0xf1e5, 0xf022, 0xf1e5, 0xed5f, +0xef34, 0xed5f, 0xef34, 0xee0f, 0xeff5, 0xee0f, 0xeff5, 0xee28, 0xf01b, 0xee28, 0xf01b, +0xecef, 0xeeed, 0xecef, 0xeeed, 0xed85, 0xef8a, 0xed85, 0xef8a, 0xecbd, 0xeec5, 0xecbd, +0xeec5, 0xecbd, 0xeec5, 0xedf6, 0xeffc, 0xedf6, 0xeffc, 0xef7a, 0xf17a, 0xef7a, 0xf17a, +0xefa4, 0xf198, 0xefa4, 0xf198, 0xf01f, 0xf202, 0xf01f, 0xf202, 0xf154, 0xf322, 0xf154, +0xf322, 0xf154, 0xf322, 0xf2fc, 0xf4b1, 0xf2fc, 0xf4b1, 0xf4d5, 0xf66c, 0xf4d5, 0xf66c, +0xf5a0, 0xf717, 0xf5a0, 0xf717, 0xf5af, 0xf703, 0xf5af, 0xf703, 0xf6d2, 0xf803, 0xf6d2, +0xf803, 0xf871, 0xf97f, 0xf871, 0xf97f, 0xf871, 0xf97f, 0xfa29, 0xfb15, 0xfa29, 0xfb15, +0xf94a, 0xfa15, 0xf94a, 0xfa15, 0xf9a7, 0xfa55, 0xf9a7, 0xfa55, 0xfa2d, 0xfac2, 0xfa2d, +0xfac2, 0xfb1f, 0xfba0, 0xfb1f, 0xfba0, 0xfcf1, 0xfd63, 0xfcf1, 0xfd63, 0xfcf1, 0xfd63, +0xfaab, 0xfb15, 0xfaab, 0xfb15, 0xfa05, 0xfa6e, 0xfa05, 0xfa6e, 0xf8f7, 0xf965, 0xf8f7, +0xf965, 0xf91a, 0xf995, 0xf91a, 0xf995, 0xfa88, 0xfb17, 0xfa88, 0xfb17, 0xfa88, 0xfb17, +0xf9a9, 0xfa52, 0xf9a9, 0xfa52, 0xf948, 0xfa13, 0xf948, 0xfa13, 0xf7b7, 0xf8aa, 0xf7b7, +0xf8aa, 0xf74f, 0xf86f, 0xf74f, 0xf86f, 0xf684, 0xf7d6, 0xf684, 0xf7d6, 0xf4a2, 0xf629, +0xf4a2, 0xf629, 0xf4a2, 0xf629, 0xf3b4, 0xf574, 0xf3b4, 0xf574, 0xf313, 0xf50e, 0xf313, +0xf50e, 0xf316, 0xf54c, 0xf316, 0xf54c, 0xf313, 0xf587, 0xf313, 0xf587, 0xf264, 0xf513, +0xf264, 0xf513, 0xf163, 0xf44f, 0xf163, 0xf44f, 0xf163, 0xf44f, 0xf067, 0xf38d, 0xf067, +0xf38d, 0xeee7, 0xf245, 0xeee7, 0xf245, 0xedca, 0xf15e, 0xedca, 0xf15e, 0xeb5d, 0xef24, +0xeb5d, 0xef24, 0xe8a0, 0xec98, 0xe8a0, 0xec98, 0xe8a0, 0xec98, 0xe6ce, 0xeaf5, 0xe6ce, +0xeaf5, 0xe422, 0xe874, 0xe422, 0xe874, 0xe2d3, 0xe74e, 0xe2d3, 0xe74e, 0xe0ef, 0xe591, +0xe0ef, 0xe591, 0xdf31, 0xe3f8, 0xdf31, 0xe3f8, 0xdf87, 0xe470, 0xdf87, 0xe470, 0xdf87, +0xe470, 0xdf3b, 0xe444, 0xdf3b, 0xe444, 0xe048, 0xe570, 0xe048, 0xe570, 0xdf8d, 0xe4d0, +0xdf8d, 0xe4d0, 0xddd2, 0xe32f, 0xddd2, 0xe32f, 0xddf8, 0xe36c, 0xddf8, 0xe36c, 0xdd6f, +0xe2f8, 0xdd6f, 0xe2f8, 0xdd6f, 0xe2f8, 0xde1d, 0xe3b8, 0xde1d, 0xe3b8, 0xdd86, 0xe32e, +0xdd86, 0xe32e, 0xdcc8, 0xe27a, 0xdcc8, 0xe27a, 0xdc8b, 0xe240, 0xdc8b, 0xe240, 0xdc0c, +0xe1c0, 0xdc0c, 0xe1c0, 0xdc0c, 0xe1c0, 0xdcbf, 0xe26c, 0xdcbf, 0xe26c, 0xdc49, 0xe1e7, +0xdc49, 0xe1e7, 0xdc60, 0xe1e7, 0xdc60, 0xe1e7, 0xdd67, 0xe2ce, 0xdd67, 0xe2ce, 0xddf8, +0xe338, 0xddf8, 0xe338, 0xdeb6, 0xe3c4, 0xdeb6, 0xe3c4, 0xdeb6, 0xe3c4, 0xdfac, 0xe47e, +0xdfac, 0xe47e, 0xdf91, 0xe41e, 0xdf91, 0xe41e, 0xe107, 0xe545, 0xe107, 0xe545, 0xe30d, +0xe6f3, 0xe30d, 0xe6f3, 0xe526, 0xe8ab, 0xe526, 0xe8ab, 0xe842, 0xeb5e, 0xe842, 0xeb5e, +0xe842, 0xeb5e, 0xe9f9, 0xeca4, 0xe9f9, 0xeca4, 0xed67, 0xef9c, 0xed67, 0xef9c, 0xf0b3, +0xf26c, 0xf0b3, 0xf26c, 0xf44d, 0xf588, 0xf44d, 0xf588, 0xf7a0, 0xf85b, 0xf7a0, 0xf85b, +0xf7a0, 0xf85b, 0xf9e2, 0xfa1c, 0xf9e2, 0xfa1c, 0xfd3f, 0xfcfa, 0xfd3f, 0xfcfa, 0xa, +0xff49, 0xa, 0xff49, 0x421, 0x2e9, 0x421, 0x2e9, 0x7b7, 0x60d, 0x7b7, 0x60d, +0xa04, 0x7f1, 0xa04, 0x7f1, 0xa04, 0x7f1, 0xc2d, 0x9b9, 0xc2d, 0x9b9, 0xe11, +0xb45, 0xe11, 0xb45, 0xfbf, 0xca7, 0xfbf, 0xca7, 0x11c6, 0xe6d, 0x11c6, 0xe6d, +0x123f, 0xeae, 0x123f, 0xeae, 0x1182, 0xdc6, 0x1182, 0xdc6, 0x1182, 0xdc6, 0x1251, +0xe75, 0x1251, 0xe75, 0x125b, 0xe69, 0x125b, 0xe69, 0x1399, 0xf9a, 0x1399, 0xf9a, +0x151d, 0x111b, 0x151d, 0x111b, 0x1640, 0x1243, 0x1640, 0x1243, 0x1640, 0x1243, 0x1742, +0x134f, 0x1742, 0x134f, 0x16d1, 0x12ee, 0x16d1, 0x12ee, 0x16ba, 0x12ed, 0x16ba, 0x12ed, +0x15ec, 0x1235, 0x15ec, 0x1235, 0x1592, 0x11f4, 0x1592, 0x11f4, 0x15b5, 0x1230, 0x15b5, +0x1230, 0x15b5, 0x1230, 0x15dc, 0x126f, 0x15dc, 0x126f, 0x16e9, 0x1393, 0x16e9, 0x1393, +0x17f5, 0x14b4, 0x17f5, 0x14b4, 0x18ad, 0x157e, 0x18ad, 0x157e, 0x18f2, 0x15d3, 0x18f2, +0x15d3, 0x18cd, 0x15ba, 0x18cd, 0x15ba, 0x18cd, 0x15ba, 0x18de, 0x15d6, 0x18de, 0x15d6, +0x192b, 0x162b, 0x192b, 0x162b, 0x1871, 0x1577, 0x1871, 0x1577, 0x17ef, 0x14fb, 0x17ef, +0x14fb, 0x1774, 0x1486, 0x1774, 0x1486, 0x1774, 0x1486, 0x16ac, 0x13c5, 0x16ac, 0x13c5, +0x1620, 0x1342, 0x1620, 0x1342, 0x14be, 0x11ec, 0x14be, 0x11ec, 0x13f9, 0x1136, 0x13f9, +0x1136, 0x131f, 0x1071, 0x131f, 0x1071, 0x1300, 0x106d, 0x1300, 0x106d, 0x1300, 0x106d, +0x1328, 0x10b4, 0x1328, 0x10b4, 0x1230, 0xfe1, 0x1230, 0xfe1, 0x11d2, 0xfb0, 0x11d2, +0xfb0, 0x107d, 0xe8d, 0x107d, 0xe8d, 0x1070, 0xeb7, 0x1070, 0xeb7, 0x10b9, 0xf3c, +0x10b9, 0xf3c, 0x10b9, 0xf3c, 0x103c, 0xf00, 0x103c, 0xf00, 0xfe8, 0xeef, 0xfe8, +0xeef, 0xe3d, 0xd88, 0xe3d, 0xd88, 0xd33, 0xcc3, 0xd33, 0xcc3, 0xbc0, 0xb92, +0xbc0, 0xb92, 0xbc0, 0xb92, 0xa03, 0xa16, 0xa03, 0xa16, 0x835, 0x883, 0x835, +0x883, 0x69e, 0x721, 0x69e, 0x721, 0x4f1, 0x5a3, 0x4f1, 0x5a3, 0x32a, 0x402, +0x32a, 0x402, 0x1ff, 0x2f3, 0x1ff, 0x2f3, 0x1ff, 0x2f3, 0xff79, 0x7e, 0xff79, +0x7e, 0xfd9b, 0xfea7, 0xfd9b, 0xfea7, 0xfcb3, 0xfdbc, 0xfcb3, 0xfdbc, 0xfc6f, 0xfd69, +0xfc6f, 0xfd69, 0xfd0c, 0xfdee, 0xfd0c, 0xfdee, 0xfd0c, 0xfdee, 0xfde8, 0xfea7, 0xfde8, +0xfea7, 0xfee3, 0xff79, 0xfee3, 0xff79, 0x1b, 0x81, 0x1b, 0x81, 0x1b6, 0x1e7, +0x1b6, 0x1e7, 0x319, 0x310, 0x319, 0x310, 0x488, 0x446, 0x488, 0x446, 0x488, +0x446, 0x608, 0x58d, 0x608, 0x58d, 0x822, 0x770, 0x822, 0x770, 0xa9b, 0x9b8, +0xa9b, 0x9b8, 0xc2f, 0xb21, 0xc2f, 0xb21, 0xc8d, 0xb5d, 0xc8d, 0xb5d, 0xc70, +0xb26, 0xc70, 0xb26, 0xc70, 0xb26, 0xbbf, 0xa67, 0xbbf, 0xa67, 0xb92, 0xa38, +0xb92, 0xa38, 0xb8f, 0xa3d, 0xb8f, 0xa3d, 0x977, 0x83b, 0x977, 0x83b, 0x70f, +0x5f3, 0x70f, 0x5f3, 0x70f, 0x5f3, 0x512, 0x423, 0x512, 0x423, 0x349, 0x28f, +0x349, 0x28f, 0x226, 0x1aa, 0x226, 0x1aa, 0xf8, 0xc2, 0xf8, 0xc2, 0xff0f, +0xff23, 0xff0f, 0xff23, 0xfcc3, 0xfd24, 0xfcc3, 0xfd24, 0xfcc3, 0xfd24, 0xfa49, 0xfaf7, +0xfa49, 0xfaf7, 0xf769, 0xf864, 0xf769, 0xf864, 0xf3f0, 0xf532, 0xf3f0, 0xf532, 0xf11d, +0xf2a2, 0xf11d, 0xf2a2, 0xef75, 0xf135, 0xef75, 0xf135, 0xee1e, 0xf00f, 0xee1e, 0xf00f, +0xee1e, 0xf00f, 0xee1f, 0xf036, 0xee1f, 0xf036, 0xed87, 0xefb8, 0xed87, 0xefb8, 0xece9, +0xef28, 0xece9, 0xef28, 0xed05, 0xef45, 0xed05, 0xef45, 0xecf5, 0xef29, 0xecf5, 0xef29, +0xecf5, 0xef29, 0xed05, 0xef20, 0xed05, 0xef20, 0xec53, 0xee49, 0xec53, 0xee49, 0xebfe, +0xedc4, 0xebfe, 0xedc4, 0xecaa, 0xee38, 0xecaa, 0xee38, 0xed42, 0xee90, 0xed42, 0xee90, +0xed23, 0xee2d, 0xed23, 0xee2d, 0xed23, 0xee2d, 0xee34, 0xeef5, 0xee34, 0xeef5, 0xef1c, +0xef92, 0xef1c, 0xef92, 0xf096, 0xf0c2, 0xf096, 0xf0c2, 0xf2e4, 0xf2c8, 0xf2e4, 0xf2c8, +0xf4b7, 0xf458, 0xf4b7, 0xf458, 0xf61f, 0xf582, 0xf61f, 0xf582, 0xf61f, 0xf582, 0xf6f9, +0xf625, 0xf6f9, 0xf625, 0xf97b, 0xf878, 0xf97b, 0xf878, 0xfae9, 0xf9c0, 0xfae9, 0xf9c0, +0xfca8, 0xfb63, 0xfca8, 0xfb63, 0xff36, 0xfddc, 0xff36, 0xfddc, 0xff36, 0xfddc, 0x9c, +0xff37, 0x9c, 0xff37, 0x270, 0x107, 0x270, 0x107, 0x32f, 0x1c9, 0x32f, 0x1c9, +0x346, 0x1e8, 0x346, 0x1e8, 0x33c, 0x1eb, 0x33c, 0x1eb, 0x2ab, 0x169, 0x2ab, +0x169, 0x2ab, 0x169, 0x2be, 0x18c, 0x2be, 0x18c, 0x371, 0x24e, 0x371, 0x24e, +0x3a9, 0x293, 0x3a9, 0x293, 0x3bd, 0x2b0, 0x3bd, 0x2b0, 0x40c, 0x301, 0x40c, +0x301, 0x3a1, 0x293, 0x3a1, 0x293, 0x3a1, 0x293, 0x417, 0x2ff, 0x417, 0x2ff, +0x4f7, 0x3cd, 0x4f7, 0x3cd, 0x534, 0x3ef, 0x534, 0x3ef, 0x5a7, 0x43f, 0x5a7, +0x43f, 0x6d6, 0x544, 0x6d6, 0x544, 0x6d6, 0x544, 0x8e6, 0x723, 0x8e6, 0x723, +0xa2e, 0x835, 0xa2e, 0x835, 0xc57, 0xa24, 0xc57, 0xa24, 0xe71, 0xc01, 0xe71, +0xc01, 0x1000, 0xd52, 0x1000, 0xd52, 0x1300, 0x1016, 0x1300, 0x1016, 0x1300, 0x1016, +0x1573, 0x124f, 0x1573, 0x124f, 0x17ec, 0x1493, 0x17ec, 0x1493, 0x19e0, 0x1659, 0x19e0, +0x1659, 0x1a84, 0x16d6, 0x1a84, 0x16d6, 0x1ce1, 0x1918, 0x1ce1, 0x1918, 0x1e29, 0x1a4f, +0x1e29, 0x1a4f, 0x1e29, 0x1a4f, 0x1efc, 0x1b1e, 0x1efc, 0x1b1e, 0x2050, 0x1c79, 0x2050, +0x1c79, 0x1f1b, 0x1b58, 0x1f1b, 0x1b58, 0x1e28, 0x1a87, 0x1e28, 0x1a87, 0x1d47, 0x19d4, +0x1d47, 0x19d4, 0x1d47, 0x19d4, 0x1bcd, 0x1892, 0x1bcd, 0x1892, 0x1b8e, 0x1896, 0x1b8e, +0x1896, 0x1b19, 0x186e, 0x1b19, 0x186e, 0x1a32, 0x17da, 0x1a32, 0x17da, 0x18d7, 0x16d7, +0x18d7, 0x16d7, 0x1642, 0x149e, 0x1642, 0x149e, 0x1642, 0x149e, 0x1447, 0x12ff, 0x1447, +0x12ff, 0x1137, 0x104a, 0x1137, 0x104a, 0xfe2, 0xf4c, 0xfe2, 0xf4c, 0xe50, 0xe0d, +0xe50, 0xe0d, 0xba0, 0xba8, 0xba0, 0xba8, 0xb3f, 0xb8a, 0xb3f, 0xb8a, 0xb3f, +0xb8a, 0x9e8, 0xa6d, 0x9e8, 0xa6d, 0x930, 0x9e3, 0x930, 0x9e3, 0x862, 0x937, +0x862, 0x937, 0x6f4, 0x7de, 0x6f4, 0x7de, 0x687, 0x77b, 0x687, 0x77b, 0x687, +0x77b, 0x588, 0x67b, 0x588, 0x67b, 0x48d, 0x572, 0x48d, 0x572, 0x3ea, 0x4b9, +0x3ea, 0x4b9, 0x2a6, 0x354, 0x2a6, 0x354, 0x2e6, 0x36d, 0x2e6, 0x36d, 0x33c, +0x395, 0x33c, 0x395, 0x33c, 0x395, 0x427, 0x44e, 0x427, 0x44e, 0x587, 0x579, +0x587, 0x579, 0x781, 0x73e, 0x781, 0x73e, 0x930, 0x8b8, 0x930, 0x8b8, 0x9cc, +0x922, 0x9cc, 0x922, 0xb0d, 0xa34, 0xb0d, 0xa34, 0xb0d, 0xa34, 0xc79, 0xb77, +0xc79, 0xb77, 0xd9f, 0xc79, 0xd9f, 0xc79, 0xf17, 0xdd5, 0xf17, 0xdd5, 0x1151, +0xff9, 0x1151, 0xff9, 0x11e5, 0x107e, 0x11e5, 0x107e, 0x11e5, 0x107e, 0x133b, 0x11cc, +0x133b, 0x11cc, 0x1331, 0x11c2, 0x1331, 0x11c2, 0x1271, 0x1107, 0x1271, 0x1107, 0x1184, +0x1025, 0x1184, 0x1025, 0x1064, 0xf15, 0x1064, 0xf15, 0xfa3, 0xe66, 0xfa3, 0xe66, +0xfa3, 0xe66, 0xe29, 0xd01, 0xe29, 0xd01, 0xca9, 0xb97, 0xca9, 0xb97, 0xabe, +0x9c2, 0xabe, 0x9c2, 0x941, 0x85a, 0x941, 0x85a, 0x7f6, 0x721, 0x7f6, 0x721, +0x613, 0x54d, 0x613, 0x54d, 0x613, 0x54d, 0x4c4, 0x40a, 0x4c4, 0x40a, 0x3c7, +0x315, 0x3c7, 0x315, 0x308, 0x259, 0x308, 0x259, 0x3c7, 0x316, 0x3c7, 0x316, +0x347, 0x291, 0x347, 0x291, 0x347, 0x291, 0x3f9, 0x33a, 0x3f9, 0x33a, 0x4b5, +0x3ea, 0x4b5, 0x3ea, 0x4d0, 0x3f6, 0x4d0, 0x3f6, 0x4b5, 0x3cc, 0x4b5, 0x3cc, +0x59d, 0x4a4, 0x59d, 0x4a4, 0x554, 0x44d, 0x554, 0x44d, 0x554, 0x44d, 0x5ab, +0x497, 0x5ab, 0x497, 0x61f, 0x503, 0x61f, 0x503, 0x46e, 0x34e, 0x46e, 0x34e, +0x476, 0x358, 0x476, 0x358, 0x38d, 0x277, 0x38d, 0x277, 0x38d, 0x277, 0x3a0, +0x29b, 0x3a0, 0x29b, 0x346, 0x259, 0x346, 0x259, 0x296, 0x1c9, 0x296, 0x1c9, +0x129, 0x86, 0x129, 0x86, 0x39, 0xffc7, 0x39, 0xffc7, 0xff2b, 0xfef2, 0xff2b, +0xfef2, 0xff2b, 0xfef2, 0xfe26, 0xfe2e, 0xfe26, 0xfe2e, 0xfd75, 0xfdc4, 0xfd75, 0xfdc4, +0xfbc2, 0xfc5e, 0xfbc2, 0xfc5e, 0xf9bb, 0xfaa8, 0xf9bb, 0xfaa8, 0xf825, 0xf965, 0xf825, +0xf965, 0xf5b5, 0xf74a, 0xf5b5, 0xf74a, 0xf5b5, 0xf74a, 0xf2b2, 0xf49d, 0xf2b2, 0xf49d, +0xf0fc, 0xf33b, 0xf0fc, 0xf33b, 0xee5d, 0xf0ed, 0xee5d, 0xf0ed, 0xec9c, 0xef78, 0xec9c, +0xef78, 0xec06, 0xef29, 0xec06, 0xef29, 0xec06, 0xef29, 0xeb42, 0xeea6, 0xeb42, 0xeea6, +0xe9c2, 0xed60, 0xe9c2, 0xed60, 0xe93e, 0xed0d, 0xe93e, 0xed0d, 0xe7b4, 0xebac, 0xe7b4, +0xebac, 0xe6e0, 0xeaf8, 0xe6e0, 0xeaf8, 0xe530, 0xe95f, 0xe530, 0xe95f, 0xe530, 0xe95f, +0xe409, 0xe847, 0xe409, 0xe847, 0xe1d2, 0xe616, 0xe1d2, 0xe616, 0xdf5f, 0xe3a1, 0xdf5f, +0xe3a1, 0xde1f, 0xe259, 0xde1f, 0xe259, 0xdc78, 0xe0a3, 0xdc78, 0xe0a3, 0xdc84, 0xe09c, +0xdc84, 0xe09c, 0xdc84, 0xe09c, 0xdbac, 0xdfac, 0xdbac, 0xdfac, 0xdd4a, 0xe12f, 0xdd4a, +0xe12f, 0xde40, 0xe209, 0xde40, 0xe209, 0xdf9a, 0xe345, 0xdf9a, 0xe345, 0xe090, 0xe41d, +0xe090, 0xe41d, 0xe090, 0xe41d, 0xe1be, 0xe52f, 0xe1be, 0xe52f, 0xe287, 0xe5dd, 0xe287, +0xe5dd, 0xe42c, 0xe769, 0xe42c, 0xe769, 0xe70e, 0xea35, 0xe70e, 0xea35, 0xe7cd, 0xeae0, +0xe7cd, 0xeae0, 0xe913, 0xec15, 0xe913, 0xec15, 0xe913, 0xec15, 0xea5f, 0xed54, 0xea5f, +0xed54, 0xeb09, 0xedf3, 0xeb09, 0xedf3, 0xeb3e, 0xee20, 0xeb3e, 0xee20, 0xebde, 0xeeba, +0xebde, 0xeeba, 0xec82, 0xef59, 0xec82, 0xef59, 0xed5e, 0xf032, 0xed5e, 0xf032, 0xed5e, +0xf032, 0xeda0, 0xf070, 0xeda0, 0xf070, 0xeeb4, 0xf181, 0xeeb4, 0xf181, 0xef3e, 0xf207, +0xef3e, 0xf207, 0xefa1, 0xf265, 0xefa1, 0xf265, 0xf056, 0xf314, 0xf056, 0xf314, 0xf056, +0xf314, 0xf16a, 0xf420, 0xf16a, 0xf420, 0xf177, 0xf423, 0xf177, 0xf423, 0xf231, 0xf4d1, +0xf231, 0xf4d1, 0xf3a4, 0xf637, 0xf3a4, 0xf637, 0xf33d, 0xf5c0, 0xf33d, 0xf5c0, 0xf3c2, +0xf635, 0xf3c2, 0xf635, 0xf3c2, 0xf635, 0xf534, 0xf795, 0xf534, 0xf795, 0xf604, 0xf855, +0xf604, 0xf855, 0xf735, 0xf975, 0xf735, 0xf975, 0xf88c, 0xfabb, 0xf88c, 0xfabb, 0xf8e8, +0xfb09, 0xf8e8, 0xfb09, 0xfa1d, 0xfc32, 0xfa1d, 0xfc32, 0xfa1d, 0xfc32, 0xfb31, 0xfd3e, +0xfb31, 0xfd3e, 0xfb82, 0xfd89, 0xfb82, 0xfd89, 0xfa27, 0xfc2d, 0xfa27, 0xfc2d, 0xfa04, +0xfc0e, 0xfa04, 0xfc0e, 0xf91d, 0xfb2f, 0xf91d, 0xfb2f, 0xf91d, 0xfb2f, 0xf7a5, 0xf9c4, +0xf7a5, 0xf9c4, 0xf5b7, 0xf7e8, 0xf5b7, 0xf7e8, 0xf24d, 0xf495, 0xf24d, 0xf495, 0xf032, +0xf295, 0xf032, 0xf295, 0xef04, 0xf185, 0xef04, 0xf185, 0xee02, 0xf0a5, 0xee02, 0xf0a5, +0xee02, 0xf0a5, 0xed6f, 0xf035, 0xed6f, 0xf035, 0xebef, 0xeeda, 0xebef, 0xeeda, 0xea6a, +0xed7b, 0xea6a, 0xed7b, 0xeaed, 0xee22, 0xeaed, 0xee22, 0xe911, 0xec69, 0xe911, 0xec69, +0xe8b7, 0xec2f, 0xe8b7, 0xec2f, 0xe8b7, 0xec2f, 0xe86c, 0xec00, 0xe86c, 0xec00, 0xe72e, +0xeada, 0xe72e, 0xeada, 0xe762, 0xeb1f, 0xe762, 0xeb1f, 0xe89a, 0xec64, 0xe89a, 0xec64, +0xe8e4, 0xecb2, 0xe8e4, 0xecb2, 0xe8e4, 0xecb2, 0xe912, 0xecdd, 0xe912, 0xecdd, 0xea76, +0xee37, 0xea76, 0xee37, 0xe9a4, 0xed54, 0xe9a4, 0xed54, 0xea16, 0xedae, 0xea16, 0xedae, +0xeab6, 0xee2d, 0xeab6, 0xee2d, 0xea83, 0xedd3, 0xea83, 0xedd3, 0xea83, 0xedd3, 0xeaf6, +0xee18, 0xeaf6, 0xee18, 0xebc2, 0xeeb1, 0xebc2, 0xeeb1, 0xed02, 0xefb8, 0xed02, 0xefb8, +0xede6, 0xf05f, 0xede6, 0xf05f, 0xef11, 0xf14a, 0xef11, 0xf14a, 0xf07a, 0xf270, 0xf07a, +0xf270, 0xf07a, 0xf270, 0xf2a4, 0xf454, 0xf2a4, 0xf454, 0xf4d0, 0xf63a, 0xf4d0, 0xf63a, +0xf6e9, 0xf80c, 0xf6e9, 0xf80c, 0xf95a, 0xfa36, 0xf95a, 0xfa36, 0xfa7e, 0xfb14, 0xfa7e, +0xfb14, 0xfa7e, 0xfb14, 0xfc67, 0xfcb7, 0xfc67, 0xfcb7, 0xff5a, 0xff64, 0xff5a, 0xff64, +0x30c, 0x2d2, 0x30c, 0x2d2, 0x57a, 0x4fe, 0x57a, 0x4fe, 0x790, 0x6d2, 0x790, +0x6d2, 0x8d3, 0x7d3, 0x8d3, 0x7d3, 0x8d3, 0x7d3, 0x993, 0x853, 0x993, 0x853, +0xb7b, 0x9fb, 0xb7b, 0x9fb, 0xc9b, 0xadb, 0xc9b, 0xadb, 0xdd7, 0xbd7, 0xdd7, +0xbd7, 0xf72, 0xd31, 0xf72, 0xd31, 0x117b, 0xef9, 0x117b, 0xef9, 0x117b, 0xef9, +0x12a8, 0xfe4, 0x12a8, 0xfe4, 0x1477, 0x1171, 0x1477, 0x1171, 0x1679, 0x1330, 0x1679, +0x1330, 0x17fc, 0x1470, 0x17fc, 0x1470, 0x1a5c, 0x168e, 0x1a5c, 0x168e, 0x1a5c, 0x168e, +0x1ba2, 0x1791, 0x1ba2, 0x1791, 0x1c65, 0x1814, 0x1c65, 0x1814, 0x2073, 0x1be3, 0x2073, +0x1be3, 0x223e, 0x1d74, 0x223e, 0x1d74, 0x23fc, 0x1efb, 0x23fc, 0x1efb, 0x2586, 0x2053, +0x2586, 0x2053, 0x2586, 0x2053, 0x260e, 0x20ae, 0x260e, 0x20ae, 0x281e, 0x229a, 0x281e, +0x229a, 0x29f2, 0x2451, 0x29f2, 0x2451, 0x29f3, 0x243f, 0x29f3, 0x243f, 0x27f4, 0x2235, +0x27f4, 0x2235, 0x28c7, 0x2308, 0x28c7, 0x2308, 0x28c7, 0x2308, 0x28a6, 0x22f3, 0x28a6, +0x22f3, 0x2887, 0x22ea, 0x2887, 0x22ea, 0x25ce, 0x2053, 0x25ce, 0x2053, 0x23ec, 0x1e9d, +0x23ec, 0x1e9d, 0x2318, 0x1e01, 0x2318, 0x1e01, 0x2318, 0x1e01, 0x21ad, 0x1cd8, 0x21ad, +0x1cd8, 0x1fc3, 0x1b3b, 0x1fc3, 0x1b3b, 0x1b9a, 0x1766, 0x1b9a, 0x1766, 0x18a2, 0x14ca, +0x18a2, 0x14ca, 0x16a0, 0x132a, 0x16a0, 0x132a, 0x15d8, 0x12ca, 0x15d8, 0x12ca, 0x15d8, +0x12ca, 0x136f, 0x10cb, 0x136f, 0x10cb, 0xf15, 0xcde, 0xf15, 0xcde, 0xc52, 0xa88, +0xc52, 0xa88, 0x876, 0x719, 0x876, 0x719, 0x4a0, 0x3ac, 0x4a0, 0x3ac, 0x4a0, +0x3ac, 0x2b4, 0x226, 0x2b4, 0x226, 0xfddd, 0xfdb1, 0xfddd, 0xfdb1, 0xfbd3, 0xfc02, +0xfbd3, 0xfc02, 0xf9f9, 0xfa7d, 0xf9f9, 0xfa7d, 0xfa9e, 0xfb70, 0xfa9e, 0xfb70, 0xfa80, +0xfb96, 0xfa80, 0xfb96, 0xfa80, 0xfb96, 0xf8c9, 0xfa1d, 0xf8c9, 0xfa1d, 0xf8d3, 0xfa5c, +0xf8d3, 0xfa5c, 0xf64d, 0xf802, 0xf64d, 0xf802, 0xf48f, 0xf669, 0xf48f, 0xf669, 0xf43f, +0xf636, 0xf43f, 0xf636, 0xf148, 0xf356, 0xf148, 0xf356, 0xf148, 0xf356, 0xeff2, 0xf210, +0xeff2, 0xf210, 0xefab, 0xf1d4, 0xefab, 0xf1d4, 0xeecb, 0xf0fa, 0xeecb, 0xf0fa, 0xf065, +0xf296, 0xf065, 0xf296, 0xee27, 0xf057, 0xee27, 0xf057, 0xee27, 0xf057, 0xef90, 0xf1bc, +0xef90, 0xf1bc, 0xef7c, 0xf1a3, 0xef7c, 0xf1a3, 0xf1ee, 0xf40d, 0xf1ee, 0xf40d, 0xf1cc, +0xf3e2, 0xf1cc, 0xf3e2, 0xf060, 0xf26d, 0xf060, 0xf26d, 0xf17e, 0xf381, 0xf17e, 0xf381, +0xf17e, 0xf381, 0xf22c, 0xf424, 0xf22c, 0xf424, 0xf594, 0xf77f, 0xf594, 0xf77f, 0xf4af, +0xf68c, 0xf4af, 0xf68c, 0xf4fe, 0xf6cb, 0xf4fe, 0xf6cb, 0xf36f, 0xf52a, 0xf36f, 0xf52a, +0xf3a6, 0xf54b, 0xf3a6, 0xf54b, 0xf3a6, 0xf54b, 0xf368, 0xf4f4, 0xf368, 0xf4f4, 0xf197, +0xf306, 0xf197, 0xf306, 0xf0fd, 0xf249, 0xf0fd, 0xf249, 0xf0eb, 0xf20f, 0xf0eb, 0xf20f, +0xf155, 0xf24c, 0xf155, 0xf24c, 0xf155, 0xf24c, 0xf286, 0xf349, 0xf286, 0xf349, 0xf04d, +0xf0d6, 0xf04d, 0xf0d6, 0xf058, 0xf0a1, 0xf058, 0xf0a1, 0xf0aa, 0xf0ae, 0xf0aa, 0xf0ae, +0xf235, 0xf1ed, 0xf235, 0xf1ed, 0xf5c7, 0xf52e, 0xf5c7, 0xf52e, 0xf5c7, 0xf52e, 0xf68b, +0xf59e, 0xf68b, 0xf59e, 0xfa2b, 0xf8e5, 0xfa2b, 0xf8e5, 0xfbb7, 0xfa18, 0xfbb7, 0xfa18, +0xffa1, 0xfda7, 0xffa1, 0xfda7, 0x31a, 0xc6, 0x31a, 0xc6, 0x5ae, 0x302, 0x5ae, +0x302, 0x5ae, 0x302, 0x80c, 0x50c, 0x80c, 0x50c, 0xc8a, 0x93b, 0xc8a, 0x93b, +0xf54, 0xbbd, 0xf54, 0xbbd, 0x11d0, 0xdf9, 0x11d0, 0xdf9, 0x1317, 0xf09, 0x1317, +0xf09, 0x1317, 0xf09, 0x12c3, 0xe88, 0x12c3, 0xe88, 0x144d, 0xff1, 0x144d, 0xff1, +0x159b, 0x112a, 0x159b, 0x112a, 0x1784, 0x130a, 0x1784, 0x130a, 0x176a, 0x12f5, 0x176a, +0x12f5, 0x155c, 0x10f9, 0x155c, 0x10f9, 0x155c, 0x10f9, 0x13ab, 0xf66, 0x13ab, 0xf66, +0x12c0, 0xea5, 0x12c0, 0xea5, 0x110b, 0xd25, 0x110b, 0xd25, 0x1256, 0xeaf, 0x1256, +0xeaf, 0x10de, 0xd7e, 0x10de, 0xd7e, 0xec7, 0xbb7, 0xec7, 0xbb7, 0xec7, 0xbb7, +0xc13, 0x958, 0xc13, 0x958, 0xc32, 0x9cf, 0xc32, 0x9cf, 0xadc, 0x8d5, 0xadc, +0x8d5, 0xa41, 0x895, 0xa41, 0x895, 0x990, 0x83d, 0x990, 0x83d, 0x990, 0x83d, +0x6c3, 0x5c8, 0x6c3, 0x5c8, 0x549, 0x4a0, 0x549, 0x4a0, 0x46c, 0x410, 0x46c, +0x410, 0x370, 0x359, 0x370, 0x359, 0xffbf, 0xffe5, 0xffbf, 0xffe5, 0x16e, 0x1c8, +0x16e, 0x1c8, 0x16e, 0x1c8, 0x1d, 0xa1, 0x1d, 0xa1, 0x169, 0x20e, 0x169, +0x20e, 0xfeff, 0xffba, 0xfeff, 0xffba, 0xfc4e, 0xfd16, 0xfc4e, 0xfd16, 0xfd75, 0xfe41, +0xfd75, 0xfe41, 0xfc0f, 0xfcd6, 0xfc0f, 0xfcd6, 0xfc0f, 0xfcd6, 0xfd2e, 0xfde9, 0xfd2e, +0xfde9, 0xfdae, 0xfe56, 0xfdae, 0xfe56, 0xfc93, 0xfd22, 0xfc93, 0xfd22, 0xfe64, 0xfed6, +0xfe64, 0xfed6, 0x1cd, 0x21e, 0x1cd, 0x21e, 0x1cd, 0x21e, 0x2a2, 0x2d0, 0x2a2, +0x2d0, 0x447, 0x451, 0x447, 0x451, 0x52d, 0x513, 0x52d, 0x513, 0x5e6, 0x5a9, +0x5e6, 0x5a9, 0x711, 0x6b2, 0x711, 0x6b2, 0x8e4, 0x865, 0x8e4, 0x865, 0x8e4, +0x865, 0x953, 0x8b6, 0x953, 0x8b6, 0xa8d, 0x9d4, 0xa8d, 0x9d4, 0x8db, 0x80b, +0x8db, 0x80b, 0xa38, 0x950, 0xa38, 0x950, 0x8b8, 0x7bc, 0x8b8, 0x7bc, 0x721, +0x612, 0x721, 0x612, 0x721, 0x612, 0x816, 0x6f4, 0x816, 0x6f4, 0x5b5, 0x480, +0x5b5, 0x480, 0x6ff, 0x5b5, 0x6ff, 0x5b5, 0x57e, 0x41e, 0x57e, 0x41e, 0x55d, +0x3e4, 0x55d, 0x3e4, 0x55d, 0x3e4, 0x3e1, 0x24b, 0x3e1, 0x24b, 0x52c, 0x375, +0x52c, 0x375, 0x6a8, 0x4cc, 0x6a8, 0x4cc, 0x58c, 0x385, 0x58c, 0x385, 0x736, +0x4ff, 0x736, 0x4ff, 0x7a3, 0x537, 0x7a3, 0x537, 0x7a3, 0x537, 0xa1b, 0x776, +0xa1b, 0x776, 0xd72, 0xa8e, 0xd72, 0xa8e, 0xf9e, 0xc79, 0xf9e, 0xc79, 0x1183, +0xe1b, 0x1183, 0xe1b, 0x1345, 0xf99, 0x1345, 0xf99, 0x1676, 0x1285, 0x1676, 0x1285, +0x1676, 0x1285, 0x1a11, 0x15de, 0x1a11, 0x15de, 0x1df8, 0x1986, 0x1df8, 0x1986, 0x1f29, +0x1a7e, 0x1f29, 0x1a7e, 0x2261, 0x1d84, 0x2261, 0x1d84, 0x24f3, 0x1fec, 0x24f3, 0x1fec, +0x24f3, 0x1fec, 0x2536, 0x200f, 0x2536, 0x200f, 0x26f7, 0x21bd, 0x26f7, 0x21bd, 0x2522, +0x1fe1, 0x2522, 0x1fe1, 0x2523, 0x1fe9, 0x2523, 0x1fe9, 0x2513, 0x1fed, 0x2513, 0x1fed, +0x25b1, 0x20af, 0x25b1, 0x20af, 0x25b1, 0x20af, 0x229d, 0x1dce, 0x229d, 0x1dce, 0x2159, +0x1ccb, 0x2159, 0x1ccb, 0x211c, 0x1cde, 0x211c, 0x1cde, 0x1e4e, 0x1a6d, 0x1e4e, 0x1a6d, +0x1dff, 0x1a85, 0x1dff, 0x1a85, 0x19b3, 0x16ac, 0x19b3, 0x16ac, 0x19b3, 0x16ac, 0x153d, +0x12b1, 0x153d, 0x12b1, 0x11c2, 0xfb7, 0x11c2, 0xfb7, 0xf7a, 0xdf6, 0xf7a, 0xdf6, +0xd33, 0xc37, 0xd33, 0xc37, 0x9ef, 0x97d, 0x9ef, 0x97d, 0x9ef, 0x97d, 0x5eb, +0x5ff, 0x5eb, 0x5ff, 0x373, 0x409, 0x373, 0x409, 0x10f, 0x223, 0x10f, 0x223, +0xff72, 0xfa, 0xff72, 0xfa, 0xff41, 0x135, 0xff41, 0x135, 0xfc88, 0xfedd, 0xfc88, +0xfedd, 0xfc88, 0xfedd, 0xf947, 0xfbf2, 0xf947, 0xfbf2, 0xf718, 0xfa0c, 0xf718, 0xfa0c, +0xf549, 0xf87a, 0xf549, 0xf87a, 0xf100, 0xf462, 0xf100, 0xf462, 0xeffa, 0xf380, 0xeffa, +0xf380, 0xeffa, 0xf380, 0xefaa, 0xf349, 0xefaa, 0xf349, 0xed40, 0xf0ec, 0xed40, 0xf0ec, +0xedad, 0xf15d, 0xedad, 0xf15d, 0xec64, 0xf00f, 0xec64, 0xf00f, 0xec35, 0xefd4, 0xec35, +0xefd4, 0xeabc, 0xee4a, 0xeabc, 0xee4a, 0xeabc, 0xee4a, 0xec27, 0xef9e, 0xec27, 0xef9e, +0xee58, 0xf1b5, 0xee58, 0xf1b5, 0xee6c, 0xf1ae, 0xee6c, 0xf1ae, 0xf086, 0xf3ad, 0xf086, +0xf3ad, 0xf017, 0xf322, 0xf017, 0xf322, 0xf234, 0xf525, 0xf234, 0xf525, 0xf234, 0xf525, +0xf411, 0xf6ea, 0xf411, 0xf6ea, 0xf3aa, 0xf66e, 0xf3aa, 0xf66e, 0xf240, 0xf4f2, 0xf240, +0xf4f2, 0xf100, 0xf3a2, 0xf100, 0xf3a2, 0xef17, 0xf1ab, 0xef17, 0xf1ab, 0xef17, 0xf1ab, +0xef44, 0xf1cb, 0xef44, 0xf1cb, 0xecb9, 0xef34, 0xecb9, 0xef34, 0xec77, 0xeee8, 0xec77, +0xeee8, 0xedf7, 0xf05d, 0xedf7, 0xf05d, 0xed51, 0xefaa, 0xed51, 0xefaa, 0xee56, 0xf09f, +0xee56, 0xf09f, 0xee56, 0xf09f, 0xec80, 0xeeb7, 0xec80, 0xeeb7, 0xec18, 0xee38, 0xec18, +0xee38, 0xebb3, 0xedb6, 0xebb3, 0xedb6, 0xec98, 0xee7a, 0xec98, 0xee7a, 0xec4d, 0xee09, +0xec4d, 0xee09, 0xef87, 0xf118, 0xef87, 0xf118, 0xef87, 0xf118, 0xf20a, 0xf36a, 0xf20a, +0xf36a, 0xf0aa, 0xf1d5, 0xf0aa, 0xf1d5, 0xf19f, 0xf290, 0xf19f, 0xf290, 0xf504, 0xf5b8, +0xf504, 0xf5b8, 0xf58c, 0xf601, 0xf58c, 0xf601, 0xf58c, 0xf601, 0xf60b, 0xf641, 0xf60b, +0xf641, 0xf9ad, 0xf9a5, 0xf9ad, 0xf9a5, 0xf936, 0xf8f2, 0xf936, 0xf8f2, 0xfb67, 0xfaed, +0xfb67, 0xfaed, 0xff22, 0xfe76, 0xff22, 0xfe76, 0xfd1e, 0xfc48, 0xfd1e, 0xfc48, 0xfd1e, +0xfc48, 0xfe42, 0xfd4b, 0xfe42, 0xfd4b, 0x4a, 0xff3d, 0x4a, 0xff3d, 0xffc5, 0xfead, +0xffc5, 0xfead, 0x34, 0xff1d, 0x34, 0xff1d, 0xfcad, 0xfba4, 0xfcad, 0xfba4, 0xfc6d, +0xfb7f, 0xfc6d, 0xfb7f, 0xfc6d, 0xfb7f, 0xfcd8, 0xfc14, 0xfcd8, 0xfc14, 0xfe71, 0xfde1, +0xfe71, 0xfde1, 0xfd8e, 0xfd40, 0xfd8e, 0xfd40, 0xfcd5, 0xfcd3, 0xfcd5, 0xfcd3, 0xfa9a, +0xfaee, 0xfa9a, 0xfaee, 0xfa9a, 0xfaee, 0xf78e, 0xf841, 0xf78e, 0xf841, 0xf680, 0xf798, +0xf680, 0xf798, 0xf576, 0xf6f7, 0xf576, 0xf6f7, 0xf3ce, 0xf5bc, 0xf3ce, 0xf5bc, 0xf117, +0xf373, 0xf117, 0xf373, 0xf419, 0xf6e0, 0xf419, 0xf6e0, 0xf419, 0xf6e0, 0xf1db, 0xf50b, +0xf1db, 0xf50b, 0xf151, 0xf4e5, 0xf151, 0xf4e5, 0xee2c, 0xf21d, 0xee2c, 0xf21d, 0xebce, +0xf014, 0xebce, 0xf014, 0xeb5a, 0xefec, 0xeb5a, 0xefec, 0xe7fb, 0xeccd, 0xe7fb, 0xeccd, +0xe7fb, 0xeccd, 0xe54d, 0xea56, 0xe54d, 0xea56, 0xe2b1, 0xe7e6, 0xe2b1, 0xe7e6, 0xde64, +0xe3b8, 0xde64, 0xe3b8, 0xddcb, 0xe334, 0xddcb, 0xe334, 0xde69, 0xe3de, 0xde69, 0xe3de, +0xde69, 0xe3de, 0xdbe3, 0xe158, 0xdbe3, 0xe158, 0xdb60, 0xe0cd, 0xdb60, 0xe0cd, 0xdb0d, +0xe06a, 0xdb0d, 0xe06a, 0xdc57, 0xe19d, 0xdc57, 0xe19d, 0xd91d, 0xde47, 0xd91d, 0xde47, +0xd95a, 0xde64, 0xd95a, 0xde64, 0xd95a, 0xde64, 0xd955, 0xde3b, 0xd955, 0xde3b, 0xd873, +0xdd34, 0xd873, 0xdd34, 0xd920, 0xddb9, 0xd920, 0xddb9, 0xdc83, 0xe0f5, 0xdc83, 0xe0f5, +0xdc47, 0xe092, 0xdc47, 0xe092, 0xdd73, 0xe199, 0xdd73, 0xe199, 0xdd73, 0xe199, 0xddc1, +0xe1c1, 0xddc1, 0xe1c1, 0xdc61, 0xe03c, 0xdc61, 0xe03c, 0xdf24, 0xe2da, 0xdf24, 0xe2da, +0xdf49, 0xe2da, 0xdf49, 0xe2da, 0xdfcf, 0xe33a, 0xdfcf, 0xe33a, 0xdfcf, 0xe33a, 0xdee0, +0xe224, 0xdee0, 0xe224, 0xe15e, 0xe47a, 0xe15e, 0xe47a, 0xe01d, 0xe30c, 0xe01d, 0xe30c, +0xe3ac, 0xe66b, 0xe3ac, 0xe66b, 0xe4bd, 0xe746, 0xe4bd, 0xe746, 0xe36f, 0xe5be, 0xe36f, +0xe5be, 0xe36f, 0xe5be, 0xe78d, 0xe99c, 0xe78d, 0xe99c, 0xe974, 0xeb3c, 0xe974, 0xeb3c, +0xe960, 0xeadb, 0xe960, 0xeadb, 0xed54, 0xee7c, 0xed54, 0xee7c, 0xefc1, 0xf090, 0xefc1, +0xf090, 0xf388, 0xf3f8, 0xf388, 0xf3f8, 0xf388, 0xf3f8, 0xf99e, 0xf9ad, 0xf99e, 0xf9ad, +0xfad2, 0xfa7b, 0xfad2, 0xfa7b, 0x1, 0xff43, 0x1, 0xff43, 0x1d2, 0xac, 0x1d2, +0xac, 0x3f0, 0x263, 0x3f0, 0x263, 0x3f0, 0x263, 0x7bf, 0x5ce, 0x7bf, 0x5ce, +0xb67, 0x916, 0xb67, 0x916, 0xcb6, 0xa0d, 0xcb6, 0xa0d, 0x11fb, 0xf00, 0x11fb, +0xf00, 0x13c4, 0x1080, 0x13c4, 0x1080, 0x1506, 0x1183, 0x1506, 0x1183, 0x1506, 0x1183, +0x1946, 0x1590, 0x1946, 0x1590, 0x18cf, 0x14f2, 0x18cf, 0x14f2, 0x19a3, 0x15ab, 0x19a3, +0x15ab, 0x1a87, 0x1680, 0x1a87, 0x1680, 0x1a1f, 0x1616, 0x1a1f, 0x1616, 0x1c6f, 0x186f, +0x1c6f, 0x186f, 0x1c6f, 0x186f, 0x1eb0, 0x1ac4, 0x1eb0, 0x1ac4, 0x1d88, 0x19b9, 0x1d88, +0x19b9, 0x20ed, 0x1d44, 0x20ed, 0x1d44, 0x2193, 0x1e17, 0x2193, 0x1e17, 0x208c, 0x1d41, +0x208c, 0x1d41, 0x208c, 0x1d41, 0x2050, 0x1d3a, 0x2050, 0x1d3a, 0x20c0, 0x1de1, 0x20c0, +0x1de1, 0x1df8, 0x1b50, 0x1df8, 0x1b50, 0x1f1d, 0x1ca9, 0x1f1d, 0x1ca9, 0x1f11, 0x1cce, +0x1f11, 0x1cce, 0x1d1b, 0x1b06, 0x1d1b, 0x1b06, 0x1d1b, 0x1b06, 0x1dd6, 0x1be8, 0x1dd6, +0x1be8, 0x1d8f, 0x1bc3, 0x1d8f, 0x1bc3, 0x1f06, 0x1d54, 0x1f06, 0x1d54, 0x1f55, 0x1db7, +0x1f55, 0x1db7, 0x1c50, 0x1abe, 0x1c50, 0x1abe, 0x18fd, 0x1772, 0x18fd, 0x1772, 0x18fd, +0x1772, 0x19d0, 0x1845, 0x19d0, 0x1845, 0x14d3, 0x1344, 0x14d3, 0x1344, 0x14d5, 0x133f, +0x14d5, 0x133f, 0x12b9, 0x1119, 0x12b9, 0x1119, 0xd98, 0xbee, 0xd98, 0xbee, 0xd98, +0xbee, 0xcdd, 0xb2a, 0xcdd, 0xb2a, 0xd05, 0xb4a, 0xd05, 0xb4a, 0xc9e, 0xade, +0xc9e, 0xade, 0xc31, 0xa71, 0xc31, 0xa71, 0xba1, 0x9e7, 0xba1, 0x9e7, 0xa6f, +0x8c2, 0xa6f, 0x8c2, 0xa6f, 0x8c2, 0xb3f, 0x9a5, 0xb3f, 0x9a5, 0xb34, 0x9b4, +0xb34, 0x9b4, 0x9eb, 0x88d, 0x9eb, 0x88d, 0x821, 0x6eb, 0x821, 0x6eb, 0x954, +0x84c, 0x954, 0x84c, 0x954, 0x84c, 0x6c5, 0x5f0, 0x6c5, 0x5f0, 0x656, 0x5b8, +0x656, 0x5b8, 0x349, 0x2e4, 0x349, 0x2e4, 0x13d, 0x112, 0x13d, 0x112, 0xbf, +0xcf, 0xbf, 0xcf, 0xfe06, 0xfe4d, 0xfe06, 0xfe4d, 0xfe06, 0xfe4d, 0xfd45, 0xfdc0, +0xfd45, 0xfdc0, 0xfb58, 0xfc02, 0xfb58, 0xfc02, 0xf9c8, 0xfa9a, 0xf9c8, 0xfa9a, 0xf8f7, +0xf9ea, 0xf8f7, 0xf9ea, 0xfb12, 0xfc1d, 0xfb12, 0xfc1d, 0xf96f, 0xfa8a, 0xf96f, 0xfa8a, +0xf96f, 0xfa8a, 0xfb03, 0xfc26, 0xfb03, 0xfc26, 0xfc7b, 0xfd9c, 0xfc7b, 0xfd9c, 0xfa50, +0xfb67, 0xfa50, 0xfb67, 0xfd05, 0xfe0b, 0xfd05, 0xfe0b, 0xfe25, 0xff14, 0xfe25, 0xff14, +0xfe25, 0xff14, 0xff25, 0xfff9, 0xff25, 0xfff9, 0x25f, 0x315, 0x25f, 0x315, 0x357, +0x3ed, 0x357, 0x3ed, 0x636, 0x6ad, 0x636, 0x6ad, 0x76f, 0x7ca, 0x76f, 0x7ca, +0x6f2, 0x735, 0x6f2, 0x735, 0x6f2, 0x735, 0x8f5, 0x925, 0x8f5, 0x925, 0x883, +0x8a9, 0x883, 0x8a9, 0x882, 0x8a7, 0x882, 0x8a7, 0x74c, 0x779, 0x74c, 0x779, +0x549, 0x589, 0x549, 0x589, 0x649, 0x6a7, 0x649, 0x6a7, 0x649, 0x6a7, 0x484, +0x50b, 0x484, 0x50b, 0x3c3, 0x47e, 0x3c3, 0x47e, 0x15b, 0x252, 0x15b, 0x252, +0xff3c, 0x79, 0xff3c, 0x79, 0xfea4, 0x2d, 0xfea4, 0x2d, 0xfea4, 0x2d, 0xfb34, +0xfd0e, 0xfb34, 0xfd0e, 0xfbc4, 0xfdf2, 0xfbc4, 0xfdf2, 0xfa84, 0xfd08, 0xfa84, 0xfd08, +0xf810, 0xfae8, 0xf810, 0xfae8, 0xf671, 0xf99a, 0xf671, 0xf99a, 0xf50f, 0xf883, 0xf50f, +0xf883, 0xf50f, 0xf883, 0xf2b1, 0xf669, 0xf2b1, 0xf669, 0xf268, 0xf65a, 0xf268, 0xf65a, +0xf183, 0xf5a3, 0xf183, 0xf5a3, 0xf016, 0xf459, 0xf016, 0xf459, 0xf0a1, 0xf4fa, 0xf0a1, +0xf4fa, 0xef9d, 0xf3fc, 0xef9d, 0xf3fc, 0xef9d, 0xf3fc, 0xf245, 0xf69d, 0xf245, 0xf69d, +0xf28d, 0xf6cf, 0xf28d, 0xf6cf, 0xf166, 0xf583, 0xf166, 0xf583, 0xf31c, 0xf708, 0xf31c, +0xf708, 0xf367, 0xf718, 0xf367, 0xf718, 0xf367, 0xf718, 0xf352, 0xf6bc, 0xf352, 0xf6bc, +0xf479, 0xf792, 0xf479, 0xf792, 0xf347, 0xf60a, 0xf347, 0xf60a, 0xf499, 0xf700, 0xf499, +0xf700, 0xf7f1, 0xf9f9, 0xf7f1, 0xf9f9, 0xf761, 0xf90a, 0xf761, 0xf90a, 0xf761, 0xf90a, +0xf7e2, 0xf92c, 0xf7e2, 0xf92c, 0xf815, 0xf904, 0xf815, 0xf904, 0xf8a8, 0xf940, 0xf8a8, +0xf940, 0xfced, 0xfd33, 0xfced, 0xfd33, 0xfe88, 0xfe83, 0xfe88, 0xfe83, 0xfcb5, 0xfc6e, +0xfcb5, 0xfc6e, 0xfcb5, 0xfc6e, 0xfdb2, 0xfd31, 0xfdb2, 0xfd31, 0x7d, 0xffca, 0x7d, +0xffca, 0xff83, 0xfea7, 0xff83, 0xfea7, 0x27a, 0x17c, 0x27a, 0x17c, 0x276, 0x15d, +0x276, 0x15d, 0x276, 0x15d, 0x94, 0xff68, 0x94, 0xff68, 0x3b1, 0x275, 0x3b1, +0x275, 0x2e1, 0x199, 0x2e1, 0x199, 0x1d9, 0x87, 0x1d9, 0x87, 0x243, 0xe8, +0x243, 0xe8, 0x255, 0xf0, 0x255, 0xf0, 0x255, 0xf0, 0xc5, 0xff53, 0xc5, +0xff53, 0x41f, 0x29c, 0x41f, 0x29c, 0x242, 0xaa, 0x242, 0xaa, 0x2de, 0x12a, +0x2de, 0x12a, 0x3de, 0x209, 0x3de, 0x209, 0x387, 0x189, 0x387, 0x189, 0x387, +0x189, 0x774, 0x546, 0x774, 0x546, 0x77d, 0x519, 0x77d, 0x519, 0x927, 0x687, +0x927, 0x687, 0xb7e, 0x89d, 0xb7e, 0x89d, 0x1038, 0xd12, 0x1038, 0xd12, 0x1038, +0xd12, 0x11e7, 0xe79, 0x11e7, 0xe79, 0x1544, 0x118d, 0x1544, 0x118d, 0x15d4, 0x11d6, +0x15d4, 0x11d6, 0x1751, 0x130f, 0x1751, 0x130f, 0x1ae4, 0x1662, 0x1ae4, 0x1662, 0x1d85, +0x18cb, 0x1d85, 0x18cb, 0x1d85, 0x18cb, 0x1e48, 0x195d, 0x1e48, 0x195d, 0x201a, 0x1b0a, +0x201a, 0x1b0a, 0x21a3, 0x1c79, 0x21a3, 0x1c79, 0x20ca, 0x1b93, 0x20ca, 0x1b93, 0x2254, +0x1d1e, 0x2254, 0x1d1e, 0x2095, 0x1b6e, 0x2095, 0x1b6e, 0x2095, 0x1b6e, 0x1ed5, 0x19cb, +0x1ed5, 0x19cb, 0x1d22, 0x1844, 0x1d22, 0x1844, 0x1c00, 0x175c, 0x1c00, 0x175c, 0x1956, +0x14f8, 0x1956, 0x14f8, 0x196a, 0x155d, 0x196a, 0x155d, 0x196a, 0x155d, 0x14ee, 0x113b, +0x14ee, 0x113b, 0x131f, 0xfce, 0x131f, 0xfce, 0x128b, 0xfa1, 0x128b, 0xfa1, 0xeca, +0xc4b, 0xeca, 0xc4b, 0xe3d, 0xc29, 0xe3d, 0xc29, 0xb70, 0x9c5, 0xb70, 0x9c5, +0xb70, 0x9c5, 0x79b, 0x655, 0x79b, 0x655, 0x890, 0x7a9, 0x890, 0x7a9, 0x89d, +0x80b, 0x89d, 0x80b, 0x6d2, 0x68c, 0x6d2, 0x68c, 0x9d7, 0x9d1, 0x9d7, 0x9d1, +0x7e3, 0x811, 0x7e3, 0x811, 0x7e3, 0x811, 0x75a, 0x7ac, 0x75a, 0x7ac, 0x7cd, +0x837, 0x7cd, 0x837, 0x642, 0x6b5, 0x642, 0x6b5, 0x6d2, 0x741, 0x6d2, 0x741, +0x899, 0x8f6, 0x899, 0x8f6, 0x899, 0x8f6, 0x79d, 0x7dc, 0x79d, 0x7dc, 0x9b8, +0x9cf, 0x9b8, 0x9cf, 0x92e, 0x915, 0x92e, 0x915, 0x82f, 0x7e0, 0x82f, 0x7e0, +0xaa1, 0xa15, 0xaa1, 0xa15, 0xa81, 0x9b8, 0xa81, 0x9b8, 0xa81, 0x9b8, 0xaae, +0x9a6, 0xaae, 0x9a6, 0xdff, 0xcb9, 0xdff, 0xcb9, 0xe09, 0xc8a, 0xe09, 0xc8a, +0xf09, 0xd54, 0xf09, 0xd54, 0x1370, 0x118d, 0x1370, 0x118d, 0x1245, 0x103d, 0x1245, +0x103d, 0x1245, 0x103d, 0x15f2, 0x13cb, 0x15f2, 0x13cb, 0x1407, 0x11cc, 0x1407, 0x11cc, +0x1516, 0x12d0, 0x1516, 0x12d0, 0x12b1, 0x106a, 0x12b1, 0x106a, 0x10eb, 0xeac, 0x10eb, +0xeac, 0x10eb, 0xeac, 0x1181, 0xf51, 0x1181, 0xf51, 0xb0d, 0x8f4, 0xb0d, 0x8f4, +0x888, 0x68c, 0x888, 0x68c, 0x7d0, 0x5f5, 0x7d0, 0x5f5, 0x7a4, 0x5ed, 0x7a4, +0x5ed, 0x4fc, 0x36b, 0x4fc, 0x36b, 0x4fc, 0x36b, 0x249, 0xdd, 0x249, 0xdd, +0xff44, 0xfdfd, 0xff44, 0xfdfd, 0x5, 0xfedf, 0x5, 0xfedf, 0xfe06, 0xfcfd, 0xfe06, +0xfcfd, 0xfcf8, 0xfc07, 0xfcf8, 0xfc07, 0xfcf8, 0xfc07, 0xfa00, 0xf921, 0xfa00, 0xf921, +0xf9ca, 0xf8f7, 0xf9ca, 0xf8f7, 0xfd53, 0xfc86, 0xfd53, 0xfc86, 0xfecd, 0xfe00, 0xfecd, +0xfe00, 0xfed2, 0xfe00, 0xfed2, 0xfe00, 0xffca, 0xfeee, 0xffca, 0xfeee, 0xffca, 0xfeee, +0x28, 0xff3e, 0x28, 0xff3e, 0xffdb, 0xfee1, 0xffdb, 0xfee1, 0x2a7, 0x19d, 0x2a7, +0x19d, 0x13f, 0x24, 0x13f, 0x24, 0xe0, 0xffb7, 0xe0, 0xffb7, 0x14c, 0x19, +0x14c, 0x19, 0x14c, 0x19, 0x29b, 0x164, 0x29b, 0x164, 0x137, 0x3, 0x137, +0x3, 0x15e, 0x35, 0x15e, 0x35, 0x15d, 0x48, 0x15d, 0x48, 0xff04, 0xfe0c, +0xff04, 0xfe0c, 0xff04, 0xfe0c, 0xfce8, 0xfc19, 0xfce8, 0xfc19, 0xfcc6, 0xfc29, 0xfcc6, +0xfc29, 0xf87a, 0xf81a, 0xf87a, 0xf81a, 0xf5e8, 0xf5cf, 0xf5e8, 0xf5cf, 0xf643, 0xf679, +0xf643, 0xf679, 0xf442, 0xf4d0, 0xf442, 0xf4d0, 0xf442, 0xf4d0, 0xf358, 0xf443, 0xf358, +0xf443, 0xf004, 0xf151, 0xf004, 0xf151, 0xeff5, 0xf1a6, 0xeff5, 0xf1a6, 0xedac, 0xefc3, +0xedac, 0xefc3, 0xeb75, 0xedef, 0xeb75, 0xedef, 0xe8fc, 0xebd6, 0xe8fc, 0xebd6, 0xe8fc, +0xebd6, 0xe6b0, 0xe9e4, 0xe6b0, 0xe9e4, 0xe4fd, 0xe885, 0xe4fd, 0xe885, 0xe50f, 0xe8e0, +0xe50f, 0xe8e0, 0xe444, 0xe855, 0xe444, 0xe855, 0xe551, 0xe995, 0xe551, 0xe995, 0xe551, +0xe995, 0xe503, 0xe96f, 0xe503, 0xe96f, 0xe3b2, 0xe837, 0xe3b2, 0xe837, 0xe1f8, 0xe688, +0xe1f8, 0xe688, 0xdf59, 0xe3e8, 0xdf59, 0xe3e8, 0xe2e1, 0xe760, 0xe2e1, 0xe760, 0xdfa9, +0xe40e, 0xdfa9, 0xe40e, 0xdfa9, 0xe40e, 0xe0f3, 0xe531, 0xe0f3, 0xe531, 0xe1cd, 0xe5da, +0xe1cd, 0xe5da, 0xdf85, 0xe35a, 0xdf85, 0xe35a, 0xe213, 0xe5a8, 0xe213, 0xe5a8, 0xe361, +0xe6b2, 0xe361, 0xe6b2, 0xe500, 0xe809, 0xe500, 0xe809, 0xe500, 0xe809, 0xe6b9, 0xe978, +0xe6b9, 0xe978, 0xea04, 0xec7b, 0xea04, 0xec7b, 0xedd6, 0xf005, 0xedd6, 0xf005, 0xef2b, +0xf117, 0xef2b, 0xf117, 0xf002, 0xf1b0, 0xf002, 0xf1b0, 0xf002, 0xf1b0, 0xf2f4, 0xf469, +0xf2f4, 0xf469, 0xf432, 0xf574, 0xf432, 0xf574, 0xf3ea, 0xf500, 0xf3ea, 0xf500, 0xf6ae, +0xf7a0, 0xf6ae, 0xf7a0, 0xf746, 0xf81c, 0xf746, 0xf81c, 0xf7dd, 0xf89c, 0xf7dd, 0xf89c, +0xf7dd, 0xf89c, 0xf937, 0xf9e6, 0xf937, 0xf9e6, 0xf819, 0xf8bf, 0xf819, 0xf8bf, 0xf997, +0xfa38, 0xf997, 0xfa38, 0xf8b5, 0xf955, 0xf8b5, 0xf955, 0xf7bc, 0xf85d, 0xf7bc, 0xf85d, +0xf9d8, 0xfa7d, 0xf9d8, 0xfa7d, 0xf9d8, 0xfa7d, 0xf8ec, 0xf996, 0xf8ec, 0xf996, 0xf58c, +0xf63a, 0xf58c, 0xf63a, 0xf6ae, 0xf761, 0xf6ae, 0xf761, 0xf3d0, 0xf484, 0xf3d0, 0xf484, +0xf390, 0xf445, 0xf390, 0xf445, 0xf390, 0xf445, 0xf5b5, 0xf668, 0xf5b5, 0xf668, 0xf4cc, +0xf57b, 0xf4cc, 0xf57b, 0xf8a6, 0xf94e, 0xf8a6, 0xf94e, 0xf8e3, 0xf983, 0xf8e3, 0xf983, +0xfa34, 0xfacb, 0xfa34, 0xfacb, 0xfa77, 0xfb03, 0xfa77, 0xfb03, 0xfa77, 0xfb03, 0xf9e3, +0xfa65, 0xf9e3, 0xfa65, 0xf8c6, 0xf940, 0xf8c6, 0xf940, 0xf945, 0xf9b8, 0xf945, 0xf9b8, +0xf967, 0xf9d7, 0xf967, 0xf9d7, 0xf7d7, 0xf847, 0xf7d7, 0xf847, 0xf935, 0xf9aa, 0xf935, +0xf9aa, 0xf935, 0xf9aa, 0xf523, 0xf5a3, 0xf523, 0xf5a3, 0xf42c, 0xf4bd, 0xf42c, 0xf4bd, +0xf45a, 0xf504, 0xf45a, 0xf504, 0xf19e, 0xf267, 0xf19e, 0xf267, 0xf122, 0xf210, 0xf122, +0xf210, 0xf122, 0xf210, 0xefa8, 0xf0c3, 0xefa8, 0xf0c3, 0xec2d, 0xed79, 0xec2d, 0xed79, +0xebe4, 0xed67, 0xebe4, 0xed67, 0xeccf, 0xee8d, 0xeccf, 0xee8d, 0xe9b1, 0xebad, 0xe9b1, +0xebad, 0xe989, 0xebc5, 0xe989, 0xebc5, 0xe989, 0xebc5, 0xe8d1, 0xeb4c, 0xe8d1, 0xeb4c, +0xe76b, 0xea23, 0xe76b, 0xea23, 0xe63d, 0xe931, 0xe63d, 0xe931, 0xe3e6, 0xe710, 0xe3e6, +0xe710, 0xe2b1, 0xe60a, 0xe2b1, 0xe60a, 0xe209, 0xe58b, 0xe209, 0xe58b, 0xe209, 0xe58b, +0xe1ec, 0xe58d, 0xe1ec, 0xe58d, 0xe287, 0xe63d, 0xe287, 0xe63d, 0xe291, 0xe651, 0xe291, +0xe651, 0xe01b, 0xe3db, 0xe01b, 0xe3db, 0xe296, 0xe649, 0xe296, 0xe649, 0xe296, 0xe649, +0xe3f6, 0xe791, 0xe3f6, 0xe791, 0xe3e5, 0xe75c, 0xe3e5, 0xe75c, 0xe562, 0xe8ab, 0xe562, +0xe8ab, 0xe6b1, 0xe9c2, 0xe6b1, 0xe9c2, 0xe6ac, 0xe97a, 0xe6ac, 0xe97a, 0xe877, 0xeafc, +0xe877, 0xeafc, 0xe877, 0xeafc, 0xeaa8, 0xecdd, 0xeaa8, 0xecdd, 0xe935, 0xeb14, 0xe935, +0xeb14, 0xebfa, 0xed80, 0xebfa, 0xed80, 0xeeb8, 0xefe2, 0xeeb8, 0xefe2, 0xf185, 0xf253, +0xf185, 0xf253, 0xf44c, 0xf4bd, 0xf44c, 0xf4bd, 0xf44c, 0xf4bd, 0xf666, 0xf67d, 0xf666, +0xf67d, 0xfa55, 0xfa13, 0xfa55, 0xfa13, 0xfead, 0xfe17, 0xfead, 0xfe17, 0x5c, 0xff76, +0x5c, 0xff76, 0x513, 0x3e1, 0x513, 0x3e1, 0x513, 0x3e1, 0x9e2, 0x86a, 0x9e2, +0x86a, 0xba9, 0x9f1, 0xba9, 0x9f1, 0xd8c, 0xb97, 0xd8c, 0xb97, 0x1041, 0xe16, +0x1041, 0xe16, 0x123d, 0xfdf, 0x123d, 0xfdf, 0x1414, 0x1186, 0x1414, 0x1186, 0x1414, +0x1186, 0x15c1, 0x1308, 0x15c1, 0x1308, 0x15d0, 0x12ed, 0x15d0, 0x12ed, 0x18c2, 0x15b8, +0x18c2, 0x15b8, 0x1911, 0x15e2, 0x1911, 0x15e2, 0x1b98, 0x1845, 0x1b98, 0x1845, 0x1bea, +0x1872, 0x1bea, 0x1872, 0x1bea, 0x1872, 0x1c14, 0x1879, 0x1c14, 0x1879, 0x1d3d, 0x1980, +0x1d3d, 0x1980, 0x1e8e, 0x1aaf, 0x1e8e, 0x1aaf, 0x20d4, 0x1cd4, 0x20d4, 0x1cd4, 0x229b, +0x1e7b, 0x229b, 0x1e7b, 0x229b, 0x1e7b, 0x25ac, 0x216f, 0x25ac, 0x216f, 0x25b2, 0x215a, +0x25b2, 0x215a, 0x27b5, 0x2347, 0x27b5, 0x2347, 0x282b, 0x23ab, 0x282b, 0x23ab, 0x26a0, +0x2214, 0x26a0, 0x2214, 0x27d9, 0x234a, 0x27d9, 0x234a, 0x27d9, 0x234a, 0x2a29, 0x259d, +0x2a29, 0x259d, 0x28c2, 0x2443, 0x28c2, 0x2443, 0x292b, 0x24c3, 0x292b, 0x24c3, 0x2b2e, +0x26e7, 0x2b2e, 0x26e7, 0x2958, 0x253e, 0x2958, 0x253e, 0x2958, 0x253e, 0x270d, 0x232b, +0x270d, 0x232b, 0x257d, 0x21de, 0x257d, 0x21de, 0x2331, 0x1fe1, 0x2331, 0x1fe1, 0x20e3, +0x1deb, 0x20e3, 0x1deb, 0x1c80, 0x19ea, 0x1c80, 0x19ea, 0x1c05, 0x19d9, 0x1c05, 0x19d9, +0x1c05, 0x19d9, 0x19f5, 0x183a, 0x19f5, 0x183a, 0x14b5, 0x1371, 0x14b5, 0x1371, 0x1335, +0x126c, 0x1335, 0x126c, 0x107f, 0x1032, 0x107f, 0x1032, 0xd86, 0xdb5, 0xd86, 0xdb5, +0xb09, 0xbb4, 0xb09, 0xbb4, 0xb09, 0xbb4, 0x9d0, 0xaf1, 0x9d0, 0xaf1, 0x6e3, +0x876, 0x6e3, 0x876, 0x49c, 0x698, 0x49c, 0x698, 0xb4, 0x311, 0xb4, 0x311, +0xfe84, 0x138, 0xfe84, 0x138, 0xfe84, 0x138, 0xfcaf, 0xffae, 0xfcaf, 0xffae, 0xfd05, +0x43, 0xfd05, 0x43, 0xf9a7, 0xfd19, 0xf9a7, 0xfd19, 0xf91a, 0xfcb1, 0xf91a, 0xfcb1, +0xf897, 0xfc48, 0xf897, 0xfc48, 0xf41a, 0xf7d9, 0xf41a, 0xf7d9, 0xf41a, 0xf7d9, 0xf620, +0xf9e1, 0xf620, 0xf9e1, 0xf2e0, 0xf69a, 0xf2e0, 0xf69a, 0xf18b, 0xf533, 0xf18b, 0xf533, +0xeffd, 0xf38c, 0xeffd, 0xf38c, 0xf141, 0xf4b0, 0xf141, 0xf4b0, 0xedd5, 0xf11f, 0xedd5, +0xf11f, 0xedd5, 0xf11f, 0xec3e, 0xef5f, 0xec3e, 0xef5f, 0xecb4, 0xefaa, 0xecb4, 0xefaa, +0xedaa, 0xf074, 0xedaa, 0xf074, 0xefc0, 0xf25e, 0xefc0, 0xf25e, 0xed03, 0xef76, 0xed03, +0xef76, 0xed03, 0xef76, 0xefc1, 0xf20c, 0xefc1, 0xf20c, 0xf0ed, 0xf313, 0xf0ed, 0xf313, +0xf1b2, 0xf3b5, 0xf1b2, 0xf3b5, 0xf05c, 0xf240, 0xf05c, 0xf240, 0xf193, 0xf35a, 0xf193, +0xf35a, 0xf10b, 0xf2b9, 0xf10b, 0xf2b9, 0xf10b, 0xf2b9, 0xf096, 0xf22d, 0xf096, 0xf22d, +0xf173, 0xf2f3, 0xf173, 0xf2f3, 0xeefa, 0xf065, 0xeefa, 0xf065, 0xedc1, 0xef16, 0xedc1, +0xef16, 0xed5f, 0xee9e, 0xed5f, 0xee9e, 0xeea4, 0xefc9, 0xeea4, 0xefc9, 0xeea4, 0xefc9, +0xef37, 0xf040, 0xef37, 0xf040, 0xec09, 0xecf2, 0xec09, 0xecf2, 0xeb02, 0xebc5, 0xeb02, +0xebc5, 0xed45, 0xeddd, 0xed45, 0xeddd, 0xed31, 0xed9a, 0xed31, 0xed9a, 0xed31, 0xed9a, +0xed4c, 0xed7f, 0xed4c, 0xed7f, 0xed2b, 0xed22, 0xed2b, 0xed22, 0xeebc, 0xee74, 0xeebc, +0xee74, 0xf2e0, 0xf253, 0xf2e0, 0xf253, 0xf5f7, 0xf522, 0xf5f7, 0xf522, 0xfabb, 0xf99d, +0xfabb, 0xf99d, 0xfabb, 0xf99d, 0xfd4a, 0xfbe1, 0xfd4a, 0xfbe1, 0xfe47, 0xfc92, 0xfe47, +0xfc92, 0x467, 0x26a, 0x467, 0x26a, 0x4a0, 0x25f, 0x4a0, 0x25f, 0x879, 0x5f9, +0x879, 0x5f9, 0xb96, 0x8dd, 0xb96, 0x8dd, 0xb96, 0x8dd, 0xb33, 0x84a, 0xb33, +0x84a, 0xfa5, 0xc95, 0xfa5, 0xc95, 0x101c, 0xcf1, 0x101c, 0xcf1, 0xe97, 0xb5b, +0xe97, 0xb5b, 0xdff, 0xac0, 0xdff, 0xac0, 0xdff, 0xac0, 0xdb2, 0xa7b, 0xdb2, +0xa7b, 0xe41, 0xb1f, 0xe41, 0xb1f, 0xf48, 0xc46, 0xf48, 0xc46, 0xd2a, 0xa54, +0xd2a, 0xa54, 0xe2f, 0xb8e, 0xe2f, 0xb8e, 0xb59, 0x8f8, 0xb59, 0x8f8, 0xb59, +0x8f8, 0xbb8, 0x99e, 0xbb8, 0x99e, 0xcd0, 0xb01, 0xcd0, 0xb01, 0xa2c, 0x8ad, +0xa2c, 0x8ad, 0xa6e, 0x941, 0xa6e, 0x941, 0x943, 0x869, 0x943, 0x869, 0x8b1, +0x826, 0x8b1, 0x826, 0x8b1, 0x826, 0x897, 0x858, 0x897, 0x858, 0x8d9, 0x8e1, +0x8d9, 0x8e1, 0x51d, 0x563, 0x51d, 0x563, 0x59c, 0x619, 0x59c, 0x619, 0x50f, +0x5b8, 0x50f, 0x5b8, 0x50f, 0x5b8, 0x490, 0x55c, 0x490, 0x55c, 0x735, 0x819, +0x735, 0x819, 0x515, 0x605, 0x515, 0x605, 0x5f5, 0x6e7, 0x5f5, 0x6e7, 0x67e, +0x766, 0x67e, 0x766, 0x5b6, 0x68c, 0x5b6, 0x68c, 0x5b6, 0x68c, 0x94b, 0xa05, +0x94b, 0xa05, 0x76a, 0x802, 0x76a, 0x802, 0x6ae, 0x71d, 0x6ae, 0x71d, 0x97b, +0x9bc, 0x97b, 0x9bc, 0x71b, 0x72c, 0x71b, 0x72c, 0x82e, 0x80f, 0x82e, 0x80f, +0x82e, 0x80f, 0x9c9, 0x977, 0x9c9, 0x977, 0xa97, 0xa16, 0xa97, 0xa16, 0xc8f, +0xbe1, 0xc8f, 0xbe1, 0xf97, 0xec1, 0xf97, 0xec1, 0x10b9, 0xfbf, 0x10b9, 0xfbf, +0x10b9, 0xfbf, 0x108e, 0xf76, 0x108e, 0xf76, 0x129c, 0x116d, 0x129c, 0x116d, 0x145d, +0x131b, 0x145d, 0x131b, 0x1519, 0x13cc, 0x1519, 0x13cc, 0x143c, 0x12e8, 0x143c, 0x12e8, +0x1463, 0x130e, 0x1463, 0x130e, 0x1463, 0x130e, 0x143d, 0x12ea, 0x143d, 0x12ea, 0x11b9, +0x106c, 0x11b9, 0x106c, 0xf5b, 0xe16, 0xf5b, 0xe16, 0xf1c, 0xddf, 0xf1c, 0xddf, +0xf5f, 0xe2a, 0xf5f, 0xe2a, 0xf13, 0xde5, 0xf13, 0xde5, 0xf13, 0xde5, 0x1004, +0xed9, 0x1004, 0xed9, 0xfb0, 0xe83, 0xfb0, 0xe83, 0xe31, 0xcff, 0xe31, 0xcff, +0xdce, 0xc91, 0xdce, 0xc91, 0xd01, 0xbb4, 0xd01, 0xbb4, 0xd01, 0xbb4, 0xd9d, +0xc38, 0xd9d, 0xc38, 0xfc6, 0xe45, 0xfc6, 0xe45, 0x1215, 0x1072, 0x1215, 0x1072, +0x15c7, 0x13fd, 0x15c7, 0x13fd, 0x18f7, 0x1702, 0x18f7, 0x1702, 0x1ac1, 0x189f, 0x1ac1, +0x189f, 0x1ac1, 0x189f, 0x1deb, 0x1b99, 0x1deb, 0x1b99, 0x1ddf, 0x1b5e, 0x1ddf, 0x1b5e, +0x1d6c, 0x1abd, 0x1d6c, 0x1abd, 0x2020, 0x1d45, 0x2020, 0x1d45, 0x20dd, 0x1ddc, 0x20dd, +0x1ddc, 0x2373, 0x2052, 0x2373, 0x2052, 0x2373, 0x2052, 0x264a, 0x2310, 0x264a, 0x2310, +0x24e3, 0x2198, 0x24e3, 0x2198, 0x2329, 0x1fd7, 0x2329, 0x1fd7, 0x22f4, 0x1fa6, 0x22f4, +0x1fa6, 0x22ff, 0x1fc0, 0x22ff, 0x1fc0, 0x22ff, 0x1fc0, 0x218c, 0x1e67, 0x218c, 0x1e67, +0x1eca, 0x1bca, 0x1eca, 0x1bca, 0x1ca4, 0x19d4, 0x1ca4, 0x19d4, 0x195b, 0x16c5, 0x195b, +0x16c5, 0x168c, 0x1439, 0x168c, 0x1439, 0x12e7, 0x10e1, 0x12e7, 0x10e1, 0x12e7, 0x10e1, +0xed2, 0xd1e, 0xed2, 0xd1e, 0xca5, 0xb49, 0xca5, 0xb49, 0xa5a, 0x958, 0xa5a, +0x958, 0x974, 0x8d0, 0x974, 0x8d0, 0x4ef, 0x4a8, 0x4ef, 0x4a8, 0x4ef, 0x4a8, +0xe3, 0xf6, 0xe3, 0xf6, 0xfef3, 0xff5e, 0xfef3, 0xff5e, 0xfa93, 0xfb51, 0xfa93, +0xfb51, 0xf8a6, 0xf9b0, 0xf8a6, 0xf9b0, 0xf594, 0xf6e3, 0xf594, 0xf6e3, 0xf315, 0xf49f, +0xf315, 0xf49f, 0xf315, 0xf49f, 0xf187, 0xf345, 0xf187, 0xf345, 0xf2cc, 0xf4b4, 0xf2cc, +0xf4b4, 0xf228, 0xf42f, 0xf228, 0xf42f, 0xecac, 0xeeca, 0xecac, 0xeeca, 0xec52, 0xee7d, +0xec52, 0xee7d, 0xea74, 0xeca3, 0xea74, 0xeca3, 0xea74, 0xeca3, 0xe930, 0xeb5c, 0xe930, +0xeb5c, 0xe867, 0xea8a, 0xe867, 0xea8a, 0xe64c, 0xe85f, 0xe64c, 0xe85f, 0xe527, 0xe727, +0xe527, 0xe727, 0xe381, 0xe56a, 0xe381, 0xe56a, 0xe381, 0xe56a, 0xe3f1, 0xe5c1, 0xe3f1, +0xe5c1, 0xe4d8, 0xe68e, 0xe4d8, 0xe68e, 0xe422, 0xe5bf, 0xe422, 0xe5bf, 0xe59b, 0xe721, +0xe59b, 0xe721, 0xe7be, 0xe92d, 0xe7be, 0xe92d, 0xe84f, 0xe9ab, 0xe84f, 0xe9ab, 0xe84f, +0xe9ab, 0xea24, 0xeb71, 0xea24, 0xeb71, 0xeb36, 0xec76, 0xeb36, 0xec76, 0xec06, 0xed3d, +0xec06, 0xed3d, 0xecd0, 0xee00, 0xecd0, 0xee00, 0xeebe, 0xefeb, 0xeebe, 0xefeb, 0xed69, +0xee94, 0xed69, 0xee94, 0xed69, 0xee94, 0xec35, 0xed60, 0xec35, 0xed60, 0xebe0, 0xed0c, +0xebe0, 0xed0c, 0xeb9f, 0xeccc, 0xeb9f, 0xeccc, 0xec66, 0xed92, 0xec66, 0xed92, 0xeb3b, +0xec64, 0xeb3b, 0xec64, 0xeb3b, 0xec64, 0xeaf9, 0xec1d, 0xeaf9, 0xec1d, 0xe9bc, 0xead7, +0xe9bc, 0xead7, 0xea29, 0xeb37, 0xea29, 0xeb37, 0xea19, 0xeb16, 0xea19, 0xeb16, 0xe978, +0xea60, 0xe978, 0xea60, 0xeb20, 0xebed, 0xeb20, 0xebed, 0xeb20, 0xebed, 0xeca9, 0xed57, +0xeca9, 0xed57, 0xef33, 0xefbd, 0xef33, 0xefbd, 0xf314, 0xf377, 0xf314, 0xf377, 0xf496, +0xf4cf, 0xf496, 0xf4cf, 0xf74d, 0xf75b, 0xf74d, 0xf75b, 0xfa51, 0xfa32, 0xfa51, 0xfa32, +0xfa51, 0xfa32, 0xfc04, 0xfbb8, 0xfc04, 0xfbb8, 0xff94, 0xff1e, 0xff94, 0xff1e, 0xe2, +0x45, 0xe2, 0x45, 0x1db, 0x11a, 0x1db, 0x11a, 0x5a7, 0x4c7, 0x5a7, 0x4c7, +0x5a7, 0x4c7, 0x857, 0x75f, 0x857, 0x75f, 0x959, 0x851, 0x959, 0x851, 0x942, +0x831, 0x942, 0x831, 0x979, 0x869, 0x979, 0x869, 0x923, 0x81d, 0x923, 0x81d, +0x71e, 0x62b, 0x71e, 0x62b, 0x71e, 0x62b, 0x87b, 0x7a4, 0x87b, 0x7a4, 0x69f, +0x5ed, 0x69f, 0x5ed, 0x55c, 0x4d8, 0x55c, 0x4d8, 0x424, 0x3d5, 0x424, 0x3d5, +0x264, 0x251, 0x264, 0x251, 0x3d2, 0x401, 0x3d2, 0x401, 0x3d2, 0x401, 0xff9c, +0x10, 0xff9c, 0x10, 0xfec4, 0xff82, 0xfec4, 0xff82, 0x68, 0x170, 0x68, 0x170, +0xfc8b, 0xfddf, 0xfc8b, 0xfddf, 0xfa30, 0xfbcd, 0xfa30, 0xfbcd, 0xfa30, 0xfbcd, 0xf894, +0xfa78, 0xf894, 0xfa78, 0xf544, 0xf76d, 0xf544, 0xf76d, 0xf381, 0xf5ea, 0xf381, 0xf5ea, +0xf1c0, 0xf464, 0xf1c0, 0xf464, 0xef0f, 0xf1e8, 0xef0f, 0xf1e8, 0xec6e, 0xef75, 0xec6e, +0xef75, 0xec6e, 0xef75, 0xec1e, 0xef4c, 0xec1e, 0xef4c, 0xeb34, 0xee84, 0xeb34, 0xee84, +0xe98d, 0xecf8, 0xe98d, 0xecf8, 0xe635, 0xe9b5, 0xe635, 0xe9b5, 0xe2bc, 0xe64c, 0xe2bc, +0xe64c, 0xdf6a, 0xe306, 0xdf6a, 0xe306, 0xdf6a, 0xe306, 0xdbbb, 0xdf5e, 0xdbbb, 0xdf5e, +0xdaa1, 0xde47, 0xdaa1, 0xde47, 0xd7e8, 0xdb8f, 0xd7e8, 0xdb8f, 0xd783, 0xdb2b, 0xd783, +0xdb2b, 0xd6d0, 0xda76, 0xd6d0, 0xda76, 0xd6d0, 0xda76, 0xd667, 0xda0b, 0xd667, 0xda0b, +0xd7bf, 0xdb62, 0xd7bf, 0xdb62, 0xd905, 0xdca7, 0xd905, 0xdca7, 0xd90b, 0xdcae, 0xd90b, +0xdcae, 0xd819, 0xdbbc, 0xd819, 0xdbbc, 0xd979, 0xdd1d, 0xd979, 0xdd1d, 0xd979, 0xdd1d, +0xdada, 0xde7f, 0xdada, 0xde7f, 0xdc63, 0xe00b, 0xdc63, 0xe00b, 0xdcfc, 0xe0a4, 0xdcfc, +0xe0a4, 0xdc6e, 0xe014, 0xdc6e, 0xe014, 0xdbd3, 0xdf75, 0xdbd3, 0xdf75, 0xdcf9, 0xe093, +0xdcf9, 0xe093, 0xdcf9, 0xe093, 0xdd51, 0xe0df, 0xdd51, 0xe0df, 0xdbb1, 0xdf2e, 0xdbb1, +0xdf2e, 0xdaf4, 0xde59, 0xdaf4, 0xde59, 0xdc0e, 0xdf54, 0xdc0e, 0xdf54, 0xdcdf, 0xdffe, +0xdcdf, 0xdffe, 0xdcdf, 0xdffe, 0xdcbc, 0xdfad, 0xdcbc, 0xdfad, 0xdd39, 0xdff3, 0xdd39, +0xdff3, 0xde50, 0xe0ca, 0xde50, 0xe0ca, 0xdf81, 0xe1b4, 0xdf81, 0xe1b4, 0xe1c9, 0xe3ad, +0xe1c9, 0xe3ad, 0xe5e6, 0xe774, 0xe5e6, 0xe774, 0xe5e6, 0xe774, 0xe7cc, 0xe8fe, 0xe7cc, +0xe8fe, 0xeb0a, 0xebdc, 0xeb0a, 0xebdc, 0xf0bc, 0xf12a, 0xf0bc, 0xf12a, 0xf499, 0xf4a1, +0xf499, 0xf4a1, 0xf8d4, 0xf876, 0xf8d4, 0xf876, 0xfd4c, 0xfc89, 0xfd4c, 0xfc89, 0xfd4c, +0xfc89, 0x31, 0xff0b, 0x31, 0xff0b, 0x308, 0x183, 0x308, 0x183, 0x88d, 0x6b0, +0x88d, 0x6b0, 0xb76, 0x948, 0xb76, 0x948, 0xcd6, 0xa5e, 0xcd6, 0xa5e, 0xcd6, +0xa5e, 0xfd2, 0xd1a, 0xfd2, 0xd1a, 0x103c, 0xd4d, 0x103c, 0xd4d, 0x14cd, 0x11b2, +0x14cd, 0x11b2, 0x1832, 0x14f5, 0x1832, 0x14f5, 0x185c, 0x1507, 0x185c, 0x1507, 0x1b53, +0x17ee, 0x1b53, 0x17ee, 0x1b53, 0x17ee, 0x1cae, 0x1943, 0x1cae, 0x1943, 0x1d68, 0x19ff, +0x1d68, 0x19ff, 0x1dca, 0x1a69, 0x1dca, 0x1a69, 0x1ca9, 0x1956, 0x1ca9, 0x1956, 0x1bd5, +0x1893, 0x1bd5, 0x1893, 0x1d74, 0x1a46, 0x1d74, 0x1a46, 0x1d74, 0x1a46, 0x1dc0, 0x1aa9, +0x1dc0, 0x1aa9, 0x1fa9, 0x1ca7, 0x1fa9, 0x1ca7, 0x2067, 0x1d79, 0x2067, 0x1d79, 0x1d51, +0x1a75, 0x1d51, 0x1a75, 0x1e09, 0x1b3b, 0x1e09, 0x1b3b, 0x1e09, 0x1b3b, 0x1de9, 0x1b25, +0x1de9, 0x1b25, 0x1c4f, 0x1992, 0x1c4f, 0x1992, 0x1d0d, 0x1a52, 0x1d0d, 0x1a52, 0x1cde, +0x1a21, 0x1cde, 0x1a21, 0x1b1c, 0x1858, 0x1b1c, 0x1858, 0x1b62, 0x1895, 0x1b62, 0x1895, +0x1b62, 0x1895, 0x1a27, 0x1750, 0x1a27, 0x1750, 0x19b9, 0x16d5, 0x19b9, 0x16d5, 0x1996, +0x16a6, 0x1996, 0x16a6, 0x15f3, 0x12f8, 0x15f3, 0x12f8, 0x14dd, 0x11db, 0x14dd, 0x11db, +0x14dd, 0x11db, 0x1387, 0x1082, 0x1387, 0x1082, 0x1086, 0xd82, 0x1086, 0xd82, 0x1009, +0xd0f, 0x1009, 0xd0f, 0x10bb, 0xdd3, 0x10bb, 0xdd3, 0x10c3, 0xdf4, 0x10c3, 0xdf4, +0x11fa, 0xf4d, 0x11fa, 0xf4d, 0x11fa, 0xf4d, 0x11a6, 0xf25, 0x11a6, 0xf25, 0x1106, +0xeb9, 0x1106, 0xeb9, 0x1175, 0xf65, 0x1175, 0xf65, 0x10cf, 0xf04, 0x10cf, 0xf04, +0x112c, 0xfac, 0x112c, 0xfac, 0x1072, 0xf43, 0x1072, 0xf43, 0x1072, 0xf43, 0xf78, +0xe9d, 0xf78, 0xe9d, 0xf00, 0xe7b, 0xf00, 0xe7b, 0xe61, 0xe32, 0xe61, 0xe32, +0xc23, 0xc47, 0xc23, 0xc47, 0x9d9, 0xa4d, 0x9d9, 0xa4d, 0x9d9, 0xa4d, 0x8ff, +0x9bd, 0x8ff, 0x9bd, 0x63d, 0x73e, 0x63d, 0x73e, 0x4ee, 0x628, 0x4ee, 0x628, +0x400, 0x569, 0x400, 0x569, 0x1bb, 0x348, 0x1bb, 0x348, 0x12f, 0x2d2, 0x12f, +0x2d2, 0x12f, 0x2d2, 0x165, 0x313, 0x165, 0x313, 0xff5d, 0x10a, 0xff5d, 0x10a, +0xfe9b, 0x39, 0xfe9b, 0x39, 0xbf, 0x244, 0xbf, 0x244, 0xff9a, 0xfd, 0xff9a, +0xfd, 0xffd6, 0x10e, 0xffd6, 0x10e, 0xffd6, 0x10e, 0x2e8, 0x3ee, 0x2e8, 0x3ee, +0x4db, 0x5aa, 0x4db, 0x5aa, 0x6a7, 0x73c, 0x6a7, 0x73c, 0x73b, 0x795, 0x73b, +0x795, 0x7c8, 0x7eb, 0x7c8, 0x7eb, 0x7c8, 0x7eb, 0x91a, 0x907, 0x91a, 0x907, +0x9c8, 0x985, 0x9c8, 0x985, 0xae7, 0xa7c, 0xae7, 0xa7c, 0xb8c, 0xb01, 0xb8c, +0xb01, 0xab5, 0xa14, 0xab5, 0xa14, 0xb21, 0xa75, 0xb21, 0xa75, 0xb21, 0xa75, +0x94c, 0x89f, 0x94c, 0x89f, 0x61d, 0x57a, 0x61d, 0x57a, 0x473, 0x3e4, 0x473, +0x3e4, 0x2bc, 0x24c, 0x2bc, 0x24c, 0x18d, 0x143, 0x18d, 0x143, 0x28, 0xc, +0x28, 0xc, 0x28, 0xc, 0xfded, 0xfe04, 0xfded, 0xfe04, 0xfa87, 0xfad4, 0xfa87, +0xfad4, 0xf9f0, 0xfa75, 0xf9f0, 0xfa75, 0xf9ac, 0xfa68, 0xf9ac, 0xfa68, 0xf5fc, 0xf6ed, +0xf5fc, 0xf6ed, 0xf5fc, 0xf6ed, 0xf4ab, 0xf5cb, 0xf4ab, 0xf5cb, 0xf3f9, 0xf542, 0xf3f9, +0xf542, 0xf217, 0xf380, 0xf217, 0xf380, 0xf1f2, 0xf372, 0xf1f2, 0xf372, 0xef34, 0xf0bf, +0xef34, 0xf0bf, 0xec30, 0xedba, 0xec30, 0xedba, 0xec30, 0xedba, 0xeb68, 0xece7, 0xeb68, +0xece7, 0xeace, 0xec36, 0xeace, 0xec36, 0xed73, 0xeeb8, 0xed73, 0xeeb8, 0xee22, 0xef3a, +0xee22, 0xef3a, 0xed25, 0xee07, 0xed25, 0xee07, 0xee7c, 0xef21, 0xee7c, 0xef21, 0xee7c, +0xef21, 0xef6e, 0xefcf, 0xef6e, 0xefcf, 0xf064, 0xf07e, 0xf064, 0xf07e, 0xf0cf, 0xf0a1, +0xf0cf, 0xf0a1, 0xeff8, 0xef82, 0xeff8, 0xef82, 0xef5a, 0xee9e, 0xef5a, 0xee9e, 0xef5a, +0xee9e, 0xf022, 0xef26, 0xf022, 0xef26, 0xefad, 0xee78, 0xefad, 0xee78, 0xefa1, 0xee3b, +0xefa1, 0xee3b, 0xf113, 0xef87, 0xf113, 0xef87, 0xf255, 0xf0ad, 0xf255, 0xf0ad, 0xf4c0, +0xf309, 0xf4c0, 0xf309, 0xf4c0, 0xf309, 0xf769, 0xf5af, 0xf769, 0xf5af, 0xf9b1, 0xf7ff, +0xf9b1, 0xf7ff, 0xfb14, 0xf976, 0xfb14, 0xf976, 0xfd63, 0xfbe3, 0xfd63, 0xfbe3, 0xffff, +0xfea8, 0xffff, 0xfea8, 0x77, 0xff4f, 0x77, 0xff4f, 0x77, 0xff4f, 0x56, 0xff64, +0x56, 0xff64, 0x36, 0xff7d, 0x36, 0xff7d, 0xffd0, 0xff52, 0xffd0, 0xff52, 0x4c, +0x8, 0x4c, 0x8, 0xa0, 0x93, 0xa0, 0x93, 0xa0, 0x93, 0x24, 0x4a, +0x24, 0x4a, 0x9a, 0xed, 0x9a, 0xed, 0x1a3, 0x218, 0x1a3, 0x218, 0x249, +0x2d8, 0x249, 0x2d8, 0x2c7, 0x363, 0x2c7, 0x363, 0x41b, 0x4ba, 0x41b, 0x4ba, +0x41b, 0x4ba, 0x53b, 0x5d0, 0x53b, 0x5d0, 0x6ac, 0x72b, 0x6ac, 0x72b, 0x8b5, +0x913, 0x8b5, 0x913, 0xb33, 0xb66, 0xb33, 0xb66, 0xd79, 0xd78, 0xd79, 0xd78, +0x1082, 0x1045, 0x1082, 0x1045, 0x1082, 0x1045, 0x1406, 0x1389, 0x1406, 0x1389, 0x1508, +0x1447, 0x1508, 0x1447, 0x17e6, 0x16df, 0x17e6, 0x16df, 0x19a7, 0x185c, 0x19a7, 0x185c, +0x1a46, 0x18bb, 0x1a46, 0x18bb, 0x1a46, 0x18bb, 0x1d67, 0x1ba1, 0x1d67, 0x1ba1, 0x1f53, +0x1d5a, 0x1f53, 0x1d5a, 0x2013, 0x1df2, 0x2013, 0x1df2, 0x2097, 0x1e58, 0x2097, 0x1e58, +0x204c, 0x1dfa, 0x204c, 0x1dfa, 0x1e2d, 0x1bd6, 0x1e2d, 0x1bd6, 0x1e2d, 0x1bd6, 0x1d24, +0x1ad4, 0x1d24, 0x1ad4, 0x1b98, 0x195c, 0x1b98, 0x195c, 0x192c, 0x1712, 0x192c, 0x1712, +0x1878, 0x168a, 0x1878, 0x168a, 0x167c, 0x14c4, 0x167c, 0x14c4, 0x13e8, 0x126f, 0x13e8, +0x126f, 0x13e8, 0x126f, 0x122e, 0x10fa, 0x122e, 0x10fa, 0xfe7, 0xefd, 0xfe7, 0xefd, +0xf19, 0xe7a, 0xf19, 0xe7a, 0xf24, 0xece, 0xf24, 0xece, 0xc76, 0xc68, 0xc76, +0xc68, 0xc76, 0xc68, 0xab1, 0xae4, 0xab1, 0xae4, 0x9c8, 0xa36, 0x9c8, 0xa36, +0x922, 0x9c1, 0x922, 0x9c1, 0x8fb, 0x9c0, 0x8fb, 0x9c0, 0x7dd, 0x8bb, 0x7dd, +0x8bb, 0x62f, 0x719, 0x62f, 0x719, 0x62f, 0x719, 0x552, 0x63b, 0x552, 0x63b, +0x696, 0x770, 0x696, 0x770, 0x6ec, 0x7a9, 0x6ec, 0x7a9, 0x7b9, 0x84d, 0x7b9, +0x84d, 0x726, 0x785, 0x726, 0x785, 0x5ea, 0x60a, 0x5ea, 0x60a, 0x5ea, 0x60a, +0x698, 0x671, 0x698, 0x671, 0x544, 0x4d0, 0x544, 0x4d0, 0x4ed, 0x429, 0x4ed, +0x429, 0x65b, 0x545, 0x65b, 0x545, 0x5a1, 0x43a, 0x5a1, 0x43a, 0x5a1, 0x43a, +0x596, 0x3e2, 0x596, 0x3e2, 0x6db, 0x4de, 0x6db, 0x4de, 0x797, 0x559, 0x797, +0x559, 0xa48, 0x7d3, 0xa48, 0x7d3, 0xa2a, 0x788, 0xa2a, 0x788, 0xb36, 0x873, +0xb36, 0x873, 0xb36, 0x873, 0xdb5, 0xadd, 0xdb5, 0xadd, 0xc6f, 0x98f, 0xc6f, +0x98f, 0xe80, 0xba5, 0xe80, 0xba5, 0xe77, 0xbad, 0xe77, 0xbad, 0xb91, 0x8e3, +0xb91, 0x8e3, 0xb91, 0x8e3, 0xb6b, 0x8e3, 0xb6b, 0x8e3, 0xb97, 0x93e, 0xb97, +0x93e, 0xa15, 0x7f2, 0xa15, 0x7f2, 0x7fe, 0x617, 0x7fe, 0x617, 0x63e, 0x495, +0x63e, 0x495, 0x4f3, 0x389, 0x4f3, 0x389, 0x4f3, 0x389, 0x53a, 0x40f, 0x53a, +0x40f, 0x323, 0x233, 0x323, 0x233, 0xffb6, 0xfefe, 0xffb6, 0xfefe, 0xfe9f, 0xfe19, +0xfe9f, 0xfe19, 0xfd82, 0xfd27, 0xfd82, 0xfd27, 0xfc45, 0xfc0d, 0xfc45, 0xfc0d, 0xfc45, +0xfc0d, 0xfd65, 0xfd49, 0xfd65, 0xfd49, 0xfd67, 0xfd5e, 0xfd67, 0xfd5e, 0xfd04, 0xfd05, +0xfd04, 0xfd05, 0xff35, 0xff39, 0xff35, 0xff39, 0x19c, 0x19c, 0x19c, 0x19c, 0x19c, +0x19c, 0x3a3, 0x399, 0x3a3, 0x399, 0x3aa, 0x394, 0x3aa, 0x394, 0x43d, 0x417, +0x43d, 0x417, 0x5b2, 0x57b, 0x5b2, 0x57b, 0x621, 0x5db, 0x621, 0x5db, 0x67c, +0x62a, 0x67c, 0x62a, 0x67c, 0x62a, 0x751, 0x6f7, 0x751, 0x6f7, 0x772, 0x716, +0x772, 0x716, 0x64a, 0x5f4, 0x64a, 0x5f4, 0x6ac, 0x665, 0x6ac, 0x665, 0x64e, +0x620, 0x64e, 0x620, 0x437, 0x42b, 0x437, 0x42b, 0x437, 0x42b, 0x380, 0x3a1, +0x380, 0x3a1, 0x379, 0x3d1, 0x379, 0x3d1, 0x219, 0x2b3, 0x219, 0x2b3, 0xffd4, +0xb7, 0xffd4, 0xb7, 0xfc98, 0xfdcc, 0xfc98, 0xfdcc, 0xfc98, 0xfdcc, 0xfa43, 0xfbce, +0xfa43, 0xfbce, 0xf926, 0xfb0c, 0xf926, 0xfb0c, 0xf7f1, 0xfa34, 0xf7f1, 0xfa34, 0xf7fc, +0xfa9d, 0xf7fc, 0xfa9d, 0xf709, 0xfa07, 0xf709, 0xfa07, 0xf49b, 0xf7f1, 0xf49b, 0xf7f1, +0xf49b, 0xf7f1, 0xf1dc, 0xf584, 0xf1dc, 0xf584, 0xef97, 0xf38a, 0xef97, 0xf38a, 0xed3c, +0xf171, 0xed3c, 0xf171, 0xec46, 0xf0b1, 0xec46, 0xf0b1, 0xebd8, 0xf06e, 0xebd8, 0xf06e, +0xea9a, 0xef4f, 0xea9a, 0xef4f, 0xea9a, 0xef4f, 0xec53, 0xf119, 0xec53, 0xf119, 0xecf5, +0xf1bf, 0xecf5, 0xf1bf, 0xece0, 0xf1a1, 0xece0, 0xf1a1, 0xedc1, 0xf26c, 0xedc1, 0xf26c, +0xec0d, 0xf099, 0xec0d, 0xf099, 0xec0d, 0xf099, 0xeadc, 0xef3d, 0xeadc, 0xef3d, 0xeb0b, +0xef3a, 0xeb0b, 0xef3a, 0xea9b, 0xee8f, 0xea9b, 0xee8f, 0xead9, 0xee8e, 0xead9, 0xee8e, +0xeb59, 0xeecd, 0xeb59, 0xeecd, 0xebe9, 0xef19, 0xebe9, 0xef19, 0xebe9, 0xef19, 0xece8, +0xefd5, 0xece8, 0xefd5, 0xee70, 0xf11d, 0xee70, 0xf11d, 0xf02c, 0xf29b, 0xf02c, 0xf29b, +0xf0c1, 0xf2f8, 0xf0c1, 0xf2f8, 0xf2a8, 0xf4ae, 0xf2a8, 0xf4ae, 0xf467, 0xf642, 0xf467, +0xf642, 0xf467, 0xf642, 0xf57b, 0xf733, 0xf57b, 0xf733, 0xf718, 0xf8b5, 0xf718, 0xf8b5, +0xf887, 0xfa12, 0xf887, 0xfa12, 0xfa20, 0xfb9f, 0xfa20, 0xfb9f, 0xfa2a, 0xfba5, 0xfa2a, +0xfba5, 0xfa2a, 0xfba5, 0xf9c7, 0xfb43, 0xf9c7, 0xfb43, 0xf961, 0xfae5, 0xf961, 0xfae5, +0xf784, 0xf914, 0xf784, 0xf914, 0xf424, 0xf5c3, 0xf424, 0xf5c3, 0xf345, 0xf4f5, 0xf345, +0xf4f5, 0xf2f9, 0xf4bb, 0xf2f9, 0xf4bb, 0xf2f9, 0xf4bb, 0xf11c, 0xf2ef, 0xf11c, 0xf2ef, +0xf07a, 0xf25d, 0xf07a, 0xf25d, 0xefb5, 0xf1a6, 0xefb5, 0xf1a6, 0xf023, 0xf21f, 0xf023, +0xf21f, 0xf012, 0xf215, 0xf012, 0xf215, 0xf022, 0xf229, 0xf022, 0xf229, 0xf022, 0xf229, +0xefbe, 0xf1c5, 0xefbe, 0xf1c5, 0xee74, 0xf077, 0xee74, 0xf077, 0xefae, 0xf1a9, 0xefae, +0xf1a9, 0xf063, 0xf253, 0xf063, 0xf253, 0xefdb, 0xf1bf, 0xefdb, 0xf1bf, 0xefdb, 0xf1bf, +0xefc5, 0xf19a, 0xefc5, 0xf19a, 0xf0d3, 0xf299, 0xf0d3, 0xf299, 0xf1c9, 0xf37f, 0xf1c9, +0xf37f, 0xf27e, 0xf426, 0xf27e, 0xf426, 0xf2c7, 0xf463, 0xf2c7, 0xf463, 0xf2a4, 0xf437, +0xf2a4, 0xf437, 0xf2a4, 0xf437, 0xf2ef, 0xf47c, 0xf2ef, 0xf47c, 0xf361, 0xf4ec, 0xf361, +0xf4ec, 0xf2d1, 0xf45d, 0xf2d1, 0xf45d, 0xf05f, 0xf1f1, 0xf05f, 0xf1f1, 0xef3e, 0xf0da, +0xef3e, 0xf0da, 0xef0c, 0xf0b6, 0xef0c, 0xf0b6, 0xef0c, 0xf0b6, 0xeda1, 0xef5d, 0xeda1, +0xef5d, 0xeb4f, 0xed1f, 0xeb4f, 0xed1f, 0xe9b9, 0xeb9f, 0xe9b9, 0xeb9f, 0xe826, 0xea23, +0xe826, 0xea23, 0xe698, 0xe8ab, 0xe698, 0xe8ab, 0xe698, 0xe8ab, 0xe5f5, 0xe81e, 0xe5f5, +0xe81e, 0xe568, 0xe7a4, 0xe568, 0xe7a4, 0xe5ca, 0xe816, 0xe5ca, 0xe816, 0xe5e5, 0xe83c, +0xe5e5, 0xe83c, 0xe619, 0xe877, 0xe619, 0xe877, 0xe4f8, 0xe755, 0xe4f8, 0xe755, 0xe4f8, +0xe755, 0xe2e9, 0xe540, 0xe2e9, 0xe540, 0xe0f1, 0xe33b, 0xe0f1, 0xe33b, 0xe014, 0xe248, +0xe014, 0xe248, 0xe1e2, 0xe3f9, 0xe1e2, 0xe3f9, 0xe413, 0xe607, 0xe413, 0xe607, 0xe631, +0xe7fa, 0xe631, 0xe7fa, 0xe631, 0xe7fa, 0xe66b, 0xe803, 0xe66b, 0xe803, 0xe8a7, 0xea09, +0xe8a7, 0xea09, 0xeb05, 0xec2c, 0xeb05, 0xec2c, 0xeb42, 0xec2c, 0xeb42, 0xec2c, 0xec11, +0xecba, 0xec11, 0xecba, 0xec11, 0xecba, 0xeb72, 0xebd9, 0xeb72, 0xebd9, 0xecbb, 0xece0, +0xecbb, 0xece0, 0xef82, 0xef66, 0xef82, 0xef66, 0xf316, 0xf2bb, 0xf316, 0xf2bb, 0xf589, +0xf4f1, 0xf589, 0xf4f1, 0xf688, 0xf5b6, 0xf688, 0xf5b6, 0xf688, 0xf5b6, 0xf9bb, 0xf8b4, +0xf9bb, 0xf8b4, 0xfdcb, 0xfc92, 0xfdcb, 0xfc92, 0x141, 0xffdb, 0x141, 0xffdb, 0x4c9, +0x33a, 0x4c9, 0x33a, 0x85f, 0x6ac, 0x85f, 0x6ac, 0xa3c, 0x868, 0xa3c, 0x868, +0xa3c, 0x868, 0xce6, 0xaf4, 0xce6, 0xaf4, 0xff3, 0xde6, 0xff3, 0xde6, 0x1246, +0x1021, 0x1246, 0x1021, 0x134b, 0x110f, 0x134b, 0x110f, 0x13ce, 0x117b, 0x13ce, 0x117b, +0x13ce, 0x117b, 0x1576, 0x130c, 0x1576, 0x130c, 0x159f, 0x131d, 0x159f, 0x131d, 0x15f6, +0x135c, 0x15f6, 0x135c, 0x1654, 0x13a0, 0x1654, 0x13a0, 0x1642, 0x1371, 0x1642, 0x1371, +0x167b, 0x138b, 0x167b, 0x138b, 0x167b, 0x138b, 0x16d2, 0x13c2, 0x16d2, 0x13c2, 0x167e, +0x134d, 0x167e, 0x134d, 0x15cf, 0x127c, 0x15cf, 0x127c, 0x15e3, 0x126e, 0x15e3, 0x126e, +0x171d, 0x1385, 0x171d, 0x1385, 0x171d, 0x1385, 0x1887, 0x14cf, 0x1887, 0x14cf, 0x1880, +0x14a9, 0x1880, 0x14a9, 0x1a6b, 0x167b, 0x1a6b, 0x167b, 0x1c40, 0x183a, 0x1c40, 0x183a, +0x1e43, 0x1a2f, 0x1e43, 0x1a2f, 0x206a, 0x1c4f, 0x206a, 0x1c4f, 0x206a, 0x1c4f, 0x2079, +0x1c5f, 0x2079, 0x1c5f, 0x2172, 0x1d61, 0x2172, 0x1d61, 0x21df, 0x1de2, 0x21df, 0x1de2, +0x2227, 0x1e48, 0x2227, 0x1e48, 0x22d4, 0x1f1e, 0x22d4, 0x1f1e, 0x230e, 0x1f8b, 0x230e, +0x1f8b, 0x230e, 0x1f8b, 0x220a, 0x1ec3, 0x220a, 0x1ec3, 0x208a, 0x1d89, 0x208a, 0x1d89, +0x1d81, 0x1ad0, 0x1d81, 0x1ad0, 0x1ada, 0x187f, 0x1ada, 0x187f, 0x1aa6, 0x18a8, 0x1aa6, +0x18a8, 0x1aa6, 0x18a8, 0x17f3, 0x1656, 0x17f3, 0x1656, 0x14d6, 0x139e, 0x14d6, 0x139e, +0x1224, 0x1151, 0x1224, 0x1151, 0xf6f, 0xf02, 0xf6f, 0xf02, 0xdd3, 0xdc7, 0xdd3, +0xdc7, 0xcac, 0xcfe, 0xcac, 0xcfe, 0xcac, 0xcfe, 0x959, 0xa04, 0x959, 0xa04, +0x5dd, 0x6d8, 0x5dd, 0x6d8, 0x541, 0x683, 0x541, 0x683, 0x1cf, 0x34f, 0x1cf, +0x34f, 0xff4a, 0xfc, 0xff4a, 0xfc, 0xfe38, 0x11, 0xfe38, 0x11, 0xfe38, 0x11, +0xfb6b, 0xfd5d, 0xfb6b, 0xfd5d, 0xfb03, 0xfd04, 0xfb03, 0xfd04, 0xfa35, 0xfc39, 0xfa35, +0xfc39, 0xf8ab, 0xfaa6, 0xf8ab, 0xfaa6, 0xf9a7, 0xfb8f, 0xf9a7, 0xfb8f, 0xf9a7, 0xfb8f, +0xf97f, 0xfb4c, 0xf97f, 0xfb4c, 0xf7ea, 0xf992, 0xf7ea, 0xf992, 0xf77e, 0xf8fc, 0xf77e, +0xf8fc, 0xf568, 0xf6b7, 0xf568, 0xf6b7, 0xf41c, 0xf538, 0xf41c, 0xf538, 0xf493, 0xf57c, +0xf493, 0xf57c, 0xf493, 0xf57c, 0xf39f, 0xf455, 0xf39f, 0xf455, 0xf283, 0xf307, 0xf283, +0xf307, 0xf253, 0xf2a9, 0xf253, 0xf2a9, 0xf27b, 0xf2a6, 0xf27b, 0xf2a6, 0xf310, 0xf317, +0xf310, 0xf317, 0xf3d7, 0xf3bf, 0xf3d7, 0xf3bf, 0xf3d7, 0xf3bf, 0xf222, 0xf1f3, 0xf222, +0xf1f3, 0xf29f, 0xf25f, 0xf29f, 0xf25f, 0xf5db, 0xf591, 0xf5db, 0xf591, 0xf693, 0xf645, +0xf693, 0xf645, 0xf761, 0xf715, 0xf761, 0xf715, 0xf761, 0xf715, 0xf769, 0xf723, 0xf769, +0xf723, 0xf6ec, 0xf6b0, 0xf6ec, 0xf6b0, 0xf7b5, 0xf786, 0xf7b5, 0xf786, 0xf781, 0xf760, +0xf781, 0xf760, 0xf66f, 0xf65a, 0xf66f, 0xf65a, 0xf56d, 0xf563, 0xf56d, 0xf563, 0xf56d, +0xf563, 0xf461, 0xf45f, 0xf461, 0xf45f, 0xf415, 0xf416, 0xf415, 0xf416, 0xf3d5, 0xf3d4, +0xf3d5, 0xf3d4, 0xf29e, 0xf292, 0xf29e, 0xf292, 0xf242, 0xf225, 0xf242, 0xf225, 0xf2b9, +0xf282, 0xf2b9, 0xf282, 0xf2b9, 0xf282, 0xf3e9, 0xf390, 0xf3e9, 0xf390, 0xf4dc, 0xf459, +0xf4dc, 0xf459, 0xf4f2, 0xf43e, 0xf4f2, 0xf43e, 0xf6d3, 0xf5e6, 0xf6d3, 0xf5e6, 0xfadb, +0xf9b0, 0xfadb, 0xf9b0, 0xfadb, 0xf9b0, 0xfdfe, 0xfc90, 0xfdfe, 0xfc90, 0xff7c, 0xfdc7, +0xff7c, 0xfdc7, 0x27c, 0x81, 0x27c, 0x81, 0x50b, 0x2c9, 0x50b, 0x2c9, 0x69e, +0x418, 0x69e, 0x418, 0x88d, 0x5c7, 0x88d, 0x5c7, 0x88d, 0x5c7, 0x9b4, 0x6b5, +0x9b4, 0x6b5, 0xafc, 0x7cb, 0xafc, 0x7cb, 0xc1e, 0x8c6, 0xc1e, 0x8c6, 0xdd8, +0xa64, 0xdd8, 0xa64, 0x1023, 0xc9e, 0x1023, 0xc9e, 0x12da, 0xf51, 0x12da, 0xf51, +0x12da, 0xf51, 0x1394, 0x1016, 0x1394, 0x1016, 0x125a, 0xef2, 0x125a, 0xef2, 0x124f, +0xf0c, 0x124f, 0xf0c, 0x1164, 0xe51, 0x1164, 0xe51, 0x110a, 0xe32, 0x110a, 0xe32, +0x110a, 0xe32, 0x108f, 0xdfd, 0x108f, 0xdfd, 0xe5b, 0xc18, 0xe5b, 0xc18, 0xcff, +0xb10, 0xcff, 0xb10, 0xc09, 0xa73, 0xc09, 0xa73, 0xc16, 0xadb, 0xc16, 0xadb, +0xcf0, 0xc10, 0xcf0, 0xc10, 0xcf0, 0xc10, 0xb76, 0xaee, 0xb76, 0xaee, 0xa14, +0x9e1, 0xa14, 0x9e1, 0xa5d, 0xa77, 0xa5d, 0xa77, 0x915, 0x974, 0x915, 0x974, +0x7f0, 0x889, 0x7f0, 0x889, 0x7ad, 0x874, 0x7ad, 0x874, 0x7ad, 0x874, 0x70b, +0x7f5, 0x70b, 0x7f5, 0x733, 0x833, 0x733, 0x833, 0x85f, 0x968, 0x85f, 0x968, +0x82b, 0x92e, 0x82b, 0x92e, 0x732, 0x824, 0x732, 0x824, 0x732, 0x824, 0x7d2, +0x8a7, 0x7d2, 0x8a7, 0x78c, 0x839, 0x78c, 0x839, 0x753, 0x7d0, 0x753, 0x7d0, +0x7f4, 0x838, 0x7f4, 0x838, 0x7a4, 0x7aa, 0x7a4, 0x7aa, 0x79c, 0x760, 0x79c, +0x760, 0x79c, 0x760, 0x777, 0x6f9, 0x777, 0x6f9, 0x744, 0x684, 0x744, 0x684, +0x7bd, 0x6bc, 0x7bd, 0x6bc, 0x78d, 0x64f, 0x78d, 0x64f, 0x84a, 0x6d4, 0x84a, +0x6d4, 0x9d6, 0x82f, 0x9d6, 0x82f, 0x9d6, 0x82f, 0xa58, 0x887, 0xa58, 0x887, +0xb37, 0x944, 0xb37, 0x944, 0xc05, 0x9f9, 0xc05, 0x9f9, 0xd04, 0xae5, 0xd04, +0xae5, 0xd51, 0xb28, 0xd51, 0xb28, 0xd51, 0xb28, 0xd03, 0xad8, 0xd03, 0xad8, +0xcc9, 0xaa0, 0xcc9, 0xaa0, 0xb9e, 0x97d, 0xb9e, 0x97d, 0xb66, 0x950, 0xb66, +0x950, 0xb1f, 0x916, 0xb1f, 0x916, 0xa5a, 0x85d, 0xa5a, 0x85d, 0xa5a, 0x85d, +0x9f6, 0x803, 0x9f6, 0x803, 0x93f, 0x754, 0x93f, 0x754, 0x94f, 0x767, 0x94f, +0x767, 0xa33, 0x848, 0xa33, 0x848, 0xb11, 0x91d, 0xb11, 0x91d, 0xb9d, 0x998, +0xb9d, 0x998, 0xb9d, 0x998, 0xb5c, 0x93e, 0xb5c, 0x93e, 0xbde, 0x99f, 0xbde, +0x99f, 0xd86, 0xb20, 0xd86, 0xb20, 0xfcc, 0xd37, 0xfcc, 0xd37, 0x11bb, 0xef2, +0x11bb, 0xef2, 0x11bb, 0xef2, 0x129c, 0xf9a, 0x129c, 0xf9a, 0x14e6, 0x11a9, 0x14e6, +0x11a9, 0x1795, 0x141c, 0x1795, 0x141c, 0x1a61, 0x16ad, 0x1a61, 0x16ad, 0x1c50, 0x1865, +0x1c50, 0x1865, 0x1d78, 0x195a, 0x1d78, 0x195a, 0x1d78, 0x195a, 0x1f47, 0x1b00, 0x1f47, +0x1b00, 0x2034, 0x1bcc, 0x2034, 0x1bcc, 0x214b, 0x1cce, 0x214b, 0x1cce, 0x20eb, 0x1c68, +0x20eb, 0x1c68, 0x1fa5, 0x1b29, 0x1fa5, 0x1b29, 0x1fa5, 0x1b29, 0x1eab, 0x1a45, 0x1eab, +0x1a45, 0x1d71, 0x1932, 0x1d71, 0x1932, 0x1c17, 0x180f, 0x1c17, 0x180f, 0x19f5, 0x1634, +0x19f5, 0x1634, 0x176e, 0x1403, 0x176e, 0x1403, 0x15d3, 0x12cd, 0x15d3, 0x12cd, 0x15d3, +0x12cd, 0x14b3, 0x121e, 0x14b3, 0x121e, 0x1149, 0xf31, 0x1149, 0xf31, 0xe47, 0xcb3, +0xe47, 0xcb3, 0xc73, 0xb6a, 0xc73, 0xb6a, 0x9ee, 0x975, 0x9ee, 0x975, 0x86b, +0x882, 0x86b, 0x882, 0x86b, 0x882, 0x790, 0x836, 0x790, 0x836, 0x31d, 0x44d, +0x31d, 0x44d, 0xfe3a, 0xffec, 0xfe3a, 0xffec, 0xfbf7, 0xfe24, 0xfbf7, 0xfe24, 0xf858, +0xfaf4, 0xf858, 0xfaf4, 0xf858, 0xfaf4, 0xf5eb, 0xf8ea, 0xf5eb, 0xf8ea, 0xf3e3, 0xf736, +0xf3e3, 0xf736, 0xf2b8, 0xf650, 0xf2b8, 0xf650, 0xf2bf, 0xf68c, 0xf2bf, 0xf68c, 0xf195, +0xf588, 0xf195, 0xf588, 0xf125, 0xf52d, 0xf125, 0xf52d, 0xf125, 0xf52d, 0xef5d, 0xf36c, +0xef5d, 0xf36c, 0xebbc, 0xefc6, 0xebbc, 0xefc6, 0xea20, 0xee17, 0xea20, 0xee17, 0xea5e, +0xee38, 0xea5e, 0xee38, 0xe814, 0xebc8, 0xe814, 0xebc8, 0xe673, 0xe9fb, 0xe673, 0xe9fb, +0xe673, 0xe9fb, 0xe5cc, 0xe924, 0xe5cc, 0xe924, 0xe4ae, 0xe7d4, 0xe4ae, 0xe7d4, 0xe603, +0xe8f7, 0xe603, 0xe8f7, 0xe7ca, 0xea8d, 0xe7ca, 0xea8d, 0xe8e5, 0xeb7b, 0xe8e5, 0xeb7b, +0xe8e5, 0xeb7b, 0xea78, 0xece6, 0xea78, 0xece6, 0xeca2, 0xeeee, 0xeca2, 0xeeee, 0xed78, +0xefaa, 0xed78, 0xefaa, 0xedb2, 0xefd0, 0xedb2, 0xefd0, 0xed06, 0xef18, 0xed06, 0xef18, +0xecd2, 0xeee1, 0xecd2, 0xeee1, 0xecd2, 0xeee1, 0xedb0, 0xefc2, 0xedb0, 0xefc2, 0xed58, +0xef72, 0xed58, 0xef72, 0xed1b, 0xef41, 0xed1b, 0xef41, 0xec74, 0xeeaa, 0xec74, 0xeeaa, +0xeb0e, 0xed56, 0xeb0e, 0xed56, 0xea7f, 0xecd9, 0xea7f, 0xecd9, 0xea7f, 0xecd9, 0xeb20, +0xed8a, 0xeb20, 0xed8a, 0xea08, 0xec7e, 0xea08, 0xec7e, 0xe9d9, 0xec56, 0xe9d9, 0xec56, +0xea34, 0xecb2, 0xea34, 0xecb2, 0xe9fe, 0xec76, 0xe9fe, 0xec76, 0xe9fe, 0xec76, 0xec5c, +0xeec5, 0xec5c, 0xeec5, 0xed92, 0xefe4, 0xed92, 0xefe4, 0xef0e, 0xf140, 0xef0e, 0xf140, +0xf201, 0xf40b, 0xf201, 0xf40b, 0xf44a, 0xf623, 0xf44a, 0xf623, 0xf66c, 0xf80d, 0xf66c, +0xf80d, 0xf66c, 0xf80d, 0xf915, 0xfa78, 0xf915, 0xfa78, 0xfb0e, 0xfc30, 0xfb0e, 0xfc30, +0xfcb9, 0xfd97, 0xfcb9, 0xfd97, 0xffb6, 0x51, 0xffb6, 0x51, 0x25e, 0x2b7, 0x25e, +0x2b7, 0x4da, 0x4f4, 0x4da, 0x4f4, 0x4da, 0x4f4, 0x6cb, 0x6ae, 0x6cb, 0x6ae, +0x82e, 0x7e2, 0x82e, 0x7e2, 0x90f, 0x89e, 0x90f, 0x89e, 0x896, 0x80d, 0x896, +0x80d, 0x74b, 0x6b7, 0x74b, 0x6b7, 0x74b, 0x6b7, 0x713, 0x682, 0x713, 0x682, +0x724, 0x6a6, 0x724, 0x6a6, 0x609, 0x5ac, 0x609, 0x5ac, 0x5b9, 0x58d, 0x5b9, +0x58d, 0x547, 0x55b, 0x547, 0x55b, 0x34c, 0x3ad, 0x34c, 0x3ad, 0x34c, 0x3ad, +0x9c, 0x156, 0x9c, 0x156, 0xfe73, 0xff91, 0xfe73, 0xff91, 0xfc78, 0xfe02, 0xfc78, +0xfe02, 0xfa5f, 0xfc5b, 0xfa5f, 0xfc5b, 0xf8de, 0xfb51, 0xf8de, 0xfb51, 0xf83f, 0xfb2a, +0xf83f, 0xfb2a, 0xf83f, 0xfb2a, 0xf77d, 0xfadf, 0xf77d, 0xfadf, 0xf653, 0xfa28, 0xf653, +0xfa28, 0xf522, 0xf965, 0xf522, 0xf965, 0xf1c8, 0xf671, 0xf1c8, 0xf671, 0xee49, 0xf34e, +0xee49, 0xf34e, 0xee49, 0xf34e, 0xed66, 0xf2bd, 0xed66, 0xf2bd, 0xecc6, 0xf263, 0xecc6, +0xf263, 0xea08, 0xefde, 0xea08, 0xefde, 0xe737, 0xed38, 0xe737, 0xed38, 0xe5a4, 0xebc3, +0xe5a4, 0xebc3, 0xe3ce, 0xe9fe, 0xe3ce, 0xe9fe, 0xe3ce, 0xe9fe, 0xe26c, 0xe8a1, 0xe26c, +0xe8a1, 0xe0ea, 0xe718, 0xe0ea, 0xe718, 0xdf4f, 0xe56c, 0xdf4f, 0xe56c, 0xded6, 0xe4d8, +0xded6, 0xe4d8, 0xde4a, 0xe42b, 0xde4a, 0xe42b, 0xddee, 0xe3a8, 0xddee, 0xe3a8, 0xddee, +0xe3a8, 0xdd7f, 0xe30d, 0xdd7f, 0xe30d, 0xdcc0, 0xe21e, 0xdcc0, 0xe21e, 0xdde9, 0xe316, +0xdde9, 0xe316, 0xdf5b, 0xe457, 0xdf5b, 0xe457, 0xe01d, 0xe4e8, 0xe01d, 0xe4e8, 0xe01d, +0xe4e8, 0xe0c9, 0xe564, 0xe0c9, 0xe564, 0xe079, 0xe4e5, 0xe079, 0xe4e5, 0xe132, 0xe570, +0xe132, 0xe570, 0xe35c, 0xe76f, 0xe35c, 0xe76f, 0xe3cc, 0xe7b3, 0xe3cc, 0xe7b3, 0xe37d, +0xe73a, 0xe37d, 0xe73a, 0xe37d, 0xe73a, 0xe4de, 0xe870, 0xe4de, 0xe870, 0xe562, 0xe8c8, +0xe562, 0xe8c8, 0xe5cf, 0xe906, 0xe5cf, 0xe906, 0xe607, 0xe90d, 0xe607, 0xe90d, 0xe481, +0xe751, 0xe481, 0xe751, 0xe3e7, 0xe67b, 0xe3e7, 0xe67b, 0xe3e7, 0xe67b, 0xe454, 0xe6a7, +0xe454, 0xe6a7, 0xe5fb, 0xe806, 0xe5fb, 0xe806, 0xe768, 0xe924, 0xe768, 0xe924, 0xe80c, +0xe973, 0xe80c, 0xe973, 0xea04, 0xeb0f, 0xea04, 0xeb0f, 0xea04, 0xeb0f, 0xec55, 0xecfe, +0xec55, 0xecfe, 0xef67, 0xefa8, 0xef67, 0xefa8, 0xf33c, 0xf311, 0xf33c, 0xf311, 0xf5d0, +0xf538, 0xf5d0, 0xf538, 0xf91c, 0xf814, 0xf91c, 0xf814, 0xfde2, 0xfc6c, 0xfde2, 0xfc6c, +0xfde2, 0xfc6c, 0x1df, 0xfffd, 0x1df, 0xfffd, 0x519, 0x2cf, 0x519, 0x2cf, 0x830, +0x585, 0x830, 0x585, 0xb4f, 0x84b, 0xb4f, 0x84b, 0xe7f, 0xb2c, 0xe7f, 0xb2c, +0x1274, 0xedd, 0x1274, 0xedd, 0x1274, 0xedd, 0x1544, 0x1175, 0x1544, 0x1175, 0x1676, +0x127e, 0x1676, 0x127e, 0x1760, 0x134c, 0x1760, 0x134c, 0x178b, 0x1368, 0x178b, 0x1368, +0x183f, 0x141c, 0x183f, 0x141c, 0x183f, 0x141c, 0x186c, 0x1455, 0x186c, 0x1455, 0x1896, +0x1498, 0x1896, 0x1498, 0x195e, 0x1583, 0x195e, 0x1583, 0x18de, 0x1530, 0x18de, 0x1530, +0x1852, 0x14d9, 0x1852, 0x14d9, 0x1851, 0x1511, 0x1851, 0x1511, 0x1851, 0x1511, 0x17e2, +0x14e0, 0x17e2, 0x14e0, 0x17ac, 0x14e9, 0x17ac, 0x14e9, 0x1801, 0x157c, 0x1801, 0x157c, +0x173a, 0x14f1, 0x173a, 0x14f1, 0x158c, 0x137b, 0x158c, 0x137b, 0x158c, 0x137b, 0x13b7, +0x11d8, 0x13b7, 0x11d8, 0x11bd, 0x1009, 0x11bd, 0x1009, 0x1009, 0xe79, 0x1009, 0xe79, +0xee1, 0xd6b, 0xee1, 0xd6b, 0xe89, 0xd27, 0xe89, 0xd27, 0xeac, 0xd55, 0xeac, +0xd55, 0xeac, 0xd55, 0xf03, 0xdae, 0xf03, 0xdae, 0xefe, 0xda6, 0xefe, 0xda6, +0xece, 0xd6d, 0xece, 0xd6d, 0xe36, 0xcc8, 0xe36, 0xcc8, 0xc1c, 0xa9e, 0xc1c, +0xa9e, 0xad6, 0x946, 0xad6, 0x946, 0xad6, 0x946, 0xb0b, 0x96b, 0xb0b, 0x96b, +0xa5c, 0x8ae, 0xa5c, 0x8ae, 0xa20, 0x867, 0xa20, 0x867, 0xa2c, 0x86d, 0xa2c, +0x86d, 0x95b, 0x79d, 0x95b, 0x79d, 0x95b, 0x79d, 0x90f, 0x757, 0x90f, 0x757, +0x91a, 0x770, 0x91a, 0x770, 0x91d, 0x789, 0x91d, 0x789, 0x92e, 0x7b7, 0x92e, +0x7b7, 0x9b0, 0x85d, 0x9b0, 0x85d, 0x9eb, 0x8c3, 0x9eb, 0x8c3, 0x9eb, 0x8c3, +0x9f7, 0x8fe, 0x9f7, 0x8fe, 0xb23, 0xa5d, 0xb23, 0xa5d, 0xb9d, 0xb0c, 0xb9d, +0xb0c, 0xb21, 0xac6, 0xb21, 0xac6, 0xade, 0xab7, 0xade, 0xab7, 0x9a7, 0x9b2, +0x9a7, 0x9b2, 0x9a7, 0x9b2, 0x7f3, 0x82a, 0x7f3, 0x82a, 0x60c, 0x669, 0x60c, +0x669, 0x35a, 0x3d5, 0x35a, 0x3d5, 0x1c2, 0x252, 0x1c2, 0x252, 0x194, 0x22f, +0x194, 0x22f, 0x194, 0x22f, 0x195, 0x230, 0x195, 0x230, 0x202, 0x292, 0x202, +0x292, 0x21a, 0x295, 0x21a, 0x295, 0x171, 0x1cc, 0x171, 0x1cc, 0x207, 0x238, +0x207, 0x238, 0x2a8, 0x2a6, 0x2a8, 0x2a6, 0x2a8, 0x2a6, 0x2be, 0x283, 0x2be, +0x283, 0x38b, 0x311, 0x38b, 0x311, 0x38c, 0x2d0, 0x38c, 0x2d0, 0x521, 0x420, +0x521, 0x420, 0x80c, 0x6c8, 0x80c, 0x6c8, 0x976, 0x7f1, 0x976, 0x7f1, 0x976, +0x7f1, 0xb19, 0x958, 0xb19, 0x958, 0xd38, 0xb43, 0xd38, 0xb43, 0xd8d, 0xb6b, +0xd8d, 0xb6b, 0xcc7, 0xa83, 0xcc7, 0xa83, 0xdaf, 0xb54, 0xdaf, 0xb54, 0xdaf, +0xb54, 0xdbd, 0xb57, 0xdbd, 0xb57, 0xc81, 0xa1f, 0xc81, 0xa1f, 0xbf2, 0x99f, +0xbf2, 0x99f, 0xa3c, 0x806, 0xa3c, 0x806, 0x7fa, 0x5ee, 0x7fa, 0x5ee, 0x67c, +0x4a4, 0x67c, 0x4a4, 0x67c, 0x4a4, 0x548, 0x3af, 0x548, 0x3af, 0x46e, 0x31e, +0x46e, 0x31e, 0x23c, 0x13b, 0x23c, 0x13b, 0xfe29, 0xfd7c, 0xfe29, 0xfd7c, 0xfa9b, +0xfa46, 0xfa9b, 0xfa46, 0xf875, 0xf877, 0xf875, 0xf877, 0xf875, 0xf877, 0xf8a4, 0xf8fd, +0xf8a4, 0xf8fd, 0xf849, 0xf8f4, 0xf849, 0xf8f4, 0xf5bc, 0xf6b5, 0xf5bc, 0xf6b5, 0xf3cb, +0xf509, 0xf3cb, 0xf509, 0xf1f0, 0xf36b, 0xf1f0, 0xf36b, 0xf1f0, 0xf36b, 0xefc3, 0xf170, +0xefc3, 0xf170, 0xee5f, 0xf033, 0xee5f, 0xf033, 0xee21, 0xf010, 0xee21, 0xf010, 0xed8a, +0xef88, 0xed8a, 0xef88, 0xeda9, 0xefa9, 0xeda9, 0xefa9, 0xeeea, 0xf0e1, 0xeeea, 0xf0e1, +0xeeea, 0xf0e1, 0xef1e, 0xf101, 0xef1e, 0xf101, 0xee2a, 0xefee, 0xee2a, 0xefee, 0xed3c, +0xeeda, 0xed3c, 0xeeda, 0xed5d, 0xeecc, 0xed5d, 0xeecc, 0xed82, 0xeebe, 0xed82, 0xeebe, +0xed0e, 0xee12, 0xed0e, 0xee12, 0xed0e, 0xee12, 0xed86, 0xee51, 0xed86, 0xee51, 0xefa6, +0xf038, 0xefa6, 0xf038, 0xefbc, 0xf017, 0xefbc, 0xf017, 0xf07f, 0xf0a6, 0xf07f, 0xf0a6, +0xf386, 0xf37c, 0xf386, 0xf37c, 0xf386, 0xf37c, 0xf435, 0xf401, 0xf435, 0xf401, 0xf5e8, +0xf58e, 0xf5e8, 0xf58e, 0xf7d8, 0xf761, 0xf7d8, 0xf761, 0xf8fb, 0xf86d, 0xf8fb, 0xf86d, +0xfb0f, 0xfa70, 0xfb0f, 0xfa70, 0xfbb3, 0xfb09, 0xfbb3, 0xfb09, 0xfbb3, 0xfb09, 0xfc6a, +0xfbbc, 0xfc6a, 0xfbbc, 0xfece, 0xfe20, 0xfece, 0xfe20, 0x45, 0xff99, 0x45, 0xff99, +0x1c7, 0x11f, 0x1c7, 0x11f, 0x409, 0x366, 0x409, 0x366, 0x3ec, 0x34c, 0x3ec, +0x34c, 0x3ec, 0x34c, 0x3a6, 0x307, 0x3a6, 0x307, 0x426, 0x384, 0x426, 0x384, +0x3b1, 0x307, 0x3b1, 0x307, 0x3d9, 0x31f, 0x3d9, 0x31f, 0x525, 0x456, 0x525, +0x456, 0x525, 0x456, 0x5b6, 0x4c9, 0x5b6, 0x4c9, 0x700, 0x5ec, 0x700, 0x5ec, +0x906, 0x7c5, 0x906, 0x7c5, 0x953, 0x7dd, 0x953, 0x7dd, 0xa47, 0x895, 0xa47, +0x895, 0xae8, 0x8f5, 0xae8, 0x8f5, 0xae8, 0x8f5, 0xbf3, 0x9ba, 0xbf3, 0x9ba, +0xed1, 0xc51, 0xed1, 0xc51, 0x109e, 0xdd5, 0x109e, 0xdd5, 0x11cc, 0xebb, 0x11cc, +0xebb, 0x1404, 0x10ae, 0x1404, 0x10ae, 0x1724, 0x1390, 0x1724, 0x1390, 0x1724, 0x1390, +0x19aa, 0x15dd, 0x19aa, 0x15dd, 0x1bb6, 0x17bb, 0x1bb6, 0x17bb, 0x1d40, 0x191f, 0x1d40, +0x191f, 0x1db5, 0x197c, 0x1db5, 0x197c, 0x1d26, 0x18e1, 0x1d26, 0x18e1, 0x1d26, 0x18e1, +0x1c96, 0x1853, 0x1c96, 0x1853, 0x1bf2, 0x17c0, 0x1bf2, 0x17c0, 0x1a4c, 0x1638, 0x1a4c, +0x1638, 0x1880, 0x1498, 0x1880, 0x1498, 0x17b2, 0x1403, 0x17b2, 0x1403, 0x17ab, 0x143f, +0x17ab, 0x143f, 0x17ab, 0x143f, 0x1671, 0x1353, 0x1671, 0x1353, 0x1496, 0x11cf, 0x1496, +0x11cf, 0x1259, 0xfee, 0x1259, 0xfee, 0x1076, 0xe6b, 0x1076, 0xe6b, 0xfd2, 0xe29, +0xfd2, 0xe29, 0xee8, 0xd9f, 0xee8, 0xd9f, 0xee8, 0xd9f, 0xdf0, 0xd03, 0xdf0, +0xd03, 0xdd9, 0xd44, 0xdd9, 0xd44, 0xe40, 0xdf9, 0xe40, 0xdf9, 0xcd5, 0xcd4, +0xcd5, 0xcd4, 0xacc, 0xb05, 0xacc, 0xb05, 0xacc, 0xb05, 0x91a, 0x981, 0x91a, +0x981, 0x82d, 0x8b5, 0x82d, 0x8b5, 0x98e, 0xa2a, 0x98e, 0xa2a, 0x9a9, 0xa4b, +0x9a9, 0xa4b, 0x904, 0x99f, 0x904, 0x99f, 0x913, 0x99c, 0x913, 0x99c, 0x913, +0x99c, 0x93a, 0x9a5, 0x93a, 0x9a5, 0xafc, 0xb41, 0xafc, 0xb41, 0xadd, 0xaf4, +0xadd, 0xaf4, 0x984, 0x968, 0x984, 0x968, 0xa3c, 0x9ea, 0xa3c, 0x9ea, 0xa3c, +0x9ea, 0xa05, 0x97d, 0xa05, 0x97d, 0x9a1, 0x8e5, 0x9a1, 0x8e5, 0x9ac, 0x8bf, +0x9ac, 0x8bf, 0x858, 0x740, 0x858, 0x740, 0x87c, 0x740, 0x87c, 0x740, 0xa7f, +0x928, 0xa7f, 0x928, 0xa7f, 0x928, 0xb4a, 0x9e2, 0xb4a, 0x9e2, 0xc47, 0xada, +0xc47, 0xada, 0xe1b, 0xcb4, 0xe1b, 0xcb4, 0xdf8, 0xca1, 0xdf8, 0xca1, 0xd78, +0xc3b, 0xd78, 0xc3b, 0xe46, 0xd2e, 0xe46, 0xd2e, 0xe46, 0xd2e, 0xdeb, 0xcff, +0xdeb, 0xcff, 0xcd3, 0xc1b, 0xcd3, 0xc1b, 0xc40, 0xbc1, 0xc40, 0xbc1, 0xbaa, +0xb67, 0xbaa, 0xb67, 0xb20, 0xb19, 0xb20, 0xb19, 0xb20, 0xb19, 0x8a1, 0x8d6, +0x8a1, 0x8d6, 0x52d, 0x59b, 0x52d, 0x59b, 0x362, 0x404, 0x362, 0x404, 0x132, +0x200, 0x132, 0x200, 0xff14, 0x6, 0xff14, 0x6, 0xfe23, 0xff30, 0xfe23, 0xff30, +0xfe23, 0xff30, 0xfc10, 0xfd2d, 0xfc10, 0xfd2d, 0xfaeb, 0xfc0d, 0xfaeb, 0xfc0d, 0xfbab, +0xfcc7, 0xfbab, 0xfcc7, 0xfbd3, 0xfcde, 0xfbd3, 0xfcde, 0xfc41, 0xfd33, 0xfc41, 0xfd33, +0xfc68, 0xfd37, 0xfc68, 0xfd37, 0xfc68, 0xfd37, 0xfcca, 0xfd6e, 0xfcca, 0xfd6e, 0xfd60, +0xfdd5, 0xfd60, 0xfdd5, 0xfdf0, 0xfe31, 0xfdf0, 0xfe31, 0xfe19, 0xfe26, 0xfe19, 0xfe26, +0xfce4, 0xfcbd, 0xfce4, 0xfcbd, 0xfce4, 0xfcbd, 0xfd6b, 0xfd14, 0xfd6b, 0xfd14, 0xfe7e, +0xfdfd, 0xfe7e, 0xfdfd, 0xb, 0xff66, 0xb, 0xff66, 0x10e, 0x4e, 0x10e, 0x4e, +0x84, 0xffb5, 0x84, 0xffb5, 0xa0, 0xffce, 0xa0, 0xffce, 0xa0, 0xffce, 0xff9c, +0xfed3, 0xff9c, 0xfed3, 0xfeb5, 0xfe02, 0xfeb5, 0xfe02, 0xfdcf, 0xfd40, 0xfdcf, 0xfd40, +0xfbe2, 0xfb82, 0xfbe2, 0xfb82, 0xfa14, 0xf9f1, 0xfa14, 0xf9f1, 0xf8db, 0xf8ff, 0xf8db, +0xf8ff, 0xf8db, 0xf8ff, 0xf7e2, 0xf855, 0xf7e2, 0xf855, 0xf634, 0xf6fe, 0xf634, 0xf6fe, +0xf485, 0xf5aa, 0xf485, 0xf5aa, 0xf37c, 0xf500, 0xf37c, 0xf500, 0xf300, 0xf4e2, 0xf300, +0xf4e2, 0xf300, 0xf4e2, 0xf222, 0xf460, 0xf222, 0xf460, 0xf06b, 0xf300, 0xf06b, 0xf300, +0xef3e, 0xf222, 0xef3e, 0xf222, 0xedf2, 0xf11d, 0xedf2, 0xf11d, 0xece4, 0xf04a, 0xece4, +0xf04a, 0xee10, 0xf1a6, 0xee10, 0xf1a6, 0xee10, 0xf1a6, 0xedd4, 0xf18b, 0xedd4, 0xf18b, +0xecf8, 0xf0c2, 0xecf8, 0xf0c2, 0xeda8, 0xf176, 0xeda8, 0xf176, 0xee07, 0xf1cc, 0xee07, +0xf1cc, 0xee12, 0xf1bf, 0xee12, 0xf1bf, 0xecba, 0xf041, 0xecba, 0xf041, 0xecba, 0xf041, +0xebc4, 0xef1a, 0xebc4, 0xef1a, 0xecaf, 0xefca, 0xecaf, 0xefca, 0xedd8, 0xf0b0, 0xedd8, +0xf0b0, 0xee08, 0xf096, 0xee08, 0xf096, 0xef6c, 0xf1ac, 0xef6c, 0xf1ac, 0xef6c, 0xf1ac, +0xf0a1, 0xf292, 0xf0a1, 0xf292, 0xf003, 0xf1a5, 0xf003, 0xf1a5, 0xf175, 0xf2ca, 0xf175, +0xf2ca, 0xf30b, 0xf418, 0xf30b, 0xf418, 0xf387, 0xf453, 0xf387, 0xf453, 0xf556, 0xf5e8, +0xf556, 0xf5e8, 0xf556, 0xf5e8, 0xf758, 0xf7b9, 0xf758, 0xf7b9, 0xf81f, 0xf85a, 0xf81f, +0xf85a, 0xf906, 0xf925, 0xf906, 0xf925, 0xf8fa, 0xf908, 0xf8fa, 0xf908, 0xf88e, 0xf896, +0xf88e, 0xf896, 0xf8b0, 0xf8bc, 0xf8b0, 0xf8bc, 0xf8b0, 0xf8bc, 0xf7f8, 0xf812, 0xf7f8, +0xf812, 0xf8f3, 0xf924, 0xf8f3, 0xf924, 0xf90c, 0xf95b, 0xf90c, 0xf95b, 0xf6de, 0xf750, +0xf6de, 0xf750, 0xf670, 0xf70b, 0xf670, 0xf70b, 0xf670, 0xf70b, 0xf630, 0xf6f7, 0xf630, +0xf6f7, 0xf4be, 0xf5b1, 0xf4be, 0xf5b1, 0xf404, 0xf524, 0xf404, 0xf524, 0xf30e, 0xf459, +0xf30e, 0xf459, 0xf12d, 0xf2a1, 0xf12d, 0xf2a1, 0xf04d, 0xf1e7, 0xf04d, 0xf1e7, 0xf04d, +0xf1e7, 0xf046, 0xf201, 0xf046, 0xf201, 0xee4b, 0xf022, 0xee4b, 0xf022, 0xeccd, 0xeeb9, +0xeccd, 0xeeb9, 0xee41, 0xf03f, 0xee41, 0xf03f, 0xef11, 0xf11b, 0xef11, 0xf11b, 0xf088, +0xf299, 0xf088, 0xf299, 0xf088, 0xf299, 0xf163, 0xf377, 0xf163, 0xf377, 0xf102, 0xf316, +0xf102, 0xf316, 0xf1a6, 0xf3b8, 0xf1a6, 0xf3b8, 0xf1c2, 0xf3d0, 0xf1c2, 0xf3d0, 0xf2d3, +0xf4dd, 0xf2d3, 0xf4dd, 0xf2d3, 0xf4dd, 0xf36b, 0xf572, 0xf36b, 0xf572, 0xf2a4, 0xf4a9, +0xf2a4, 0xf4a9, 0xf34d, 0xf554, 0xf34d, 0xf554, 0xf450, 0xf65a, 0xf450, 0xf65a, 0xf376, +0xf588, 0xf376, 0xf588, 0xf286, 0xf4a4, 0xf286, 0xf4a4, 0xf286, 0xf4a4, 0xf12c, 0xf35a, +0xf12c, 0xf35a, 0xef66, 0xf1a8, 0xef66, 0xf1a8, 0xeef6, 0xf151, 0xeef6, 0xf151, 0xedaf, +0xf025, 0xedaf, 0xf025, 0xeae0, 0xed74, 0xeae0, 0xed74, 0xe927, 0xebdb, 0xe927, 0xebdb, +0xe927, 0xebdb, 0xe9d9, 0xecae, 0xe9d9, 0xecae, 0xe9f2, 0xece6, 0xe9f2, 0xece6, 0xea02, +0xed14, 0xea02, 0xed14, 0xea02, 0xed2e, 0xea02, 0xed2e, 0xe871, 0xebb5, 0xe871, 0xebb5, +0xe871, 0xebb5, 0xe6c6, 0xea1b, 0xe6c6, 0xea1b, 0xe5a1, 0xe901, 0xe5a1, 0xe901, 0xe5a9, +0xe90c, 0xe5a9, 0xe90c, 0xe466, 0xe7c4, 0xe466, 0xe7c4, 0xe3ad, 0xe6fe, 0xe3ad, 0xe6fe, +0xe571, 0xe8ac, 0xe571, 0xe8ac, 0xe571, 0xe8ac, 0xe6eb, 0xea06, 0xe6eb, 0xea06, 0xe88b, +0xeb7f, 0xe88b, 0xeb7f, 0xea9b, 0xed5e, 0xea9b, 0xed5e, 0xeb60, 0xedeb, 0xeb60, 0xedeb, +0xebcb, 0xee16, 0xebcb, 0xee16, 0xed66, 0xef6d, 0xed66, 0xef6d, 0xed66, 0xef6d, 0xef31, +0xf0ee, 0xef31, 0xf0ee, 0xf0a4, 0xf214, 0xf0a4, 0xf214, 0xf23f, 0xf35f, 0xf23f, 0xf35f, +0xf4cb, 0xf59a, 0xf4cb, 0xf59a, 0xf700, 0xf77e, 0xf700, 0xf77e, 0xf700, 0xf77e, 0xf896, +0xf8c4, 0xf896, 0xf8c4, 0xfa49, 0xfa2b, 0xfa49, 0xfa2b, 0xfc8a, 0xfc23, 0xfc8a, 0xfc23, +0xff02, 0xfe56, 0xff02, 0xfe56, 0x230, 0x143, 0x230, 0x143, 0x66e, 0x546, 0x66e, +0x546, 0x66e, 0x546, 0x836, 0x6da, 0x836, 0x6da, 0x9b4, 0x827, 0x9b4, 0x827, +0xc3f, 0xa88, 0xc3f, 0xa88, 0xe32, 0xc56, 0xe32, 0xc56, 0x1022, 0xe24, 0x1022, +0xe24, 0x1022, 0xe24, 0x11b1, 0xf96, 0x11b1, 0xf96, 0x1276, 0x1042, 0x1276, 0x1042, +0x1245, 0xff9, 0x1245, 0xff9, 0x12b5, 0x1053, 0x12b5, 0x1053, 0x11ed, 0xf76, 0x11ed, +0xf76, 0x100b, 0xd80, 0x100b, 0xd80, 0x100b, 0xd80, 0xf62, 0xcc2, 0xf62, 0xcc2, +0xece, 0xc1a, 0xece, 0xc1a, 0xfa1, 0xcd7, 0xfa1, 0xcd7, 0x117d, 0xe9b, 0x117d, +0xe9b, 0x1243, 0xf4a, 0x1243, 0xf4a, 0x1301, 0xfef, 0x1301, 0xfef, 0x1301, 0xfef, +0x1439, 0x110e, 0x1439, 0x110e, 0x156d, 0x1229, 0x156d, 0x1229, 0x175e, 0x1403, 0x175e, +0x1403, 0x17f4, 0x1483, 0x17f4, 0x1483, 0x188a, 0x1506, 0x188a, 0x1506, 0x188a, 0x1506, +0x1b33, 0x17a0, 0x1b33, 0x17a0, 0x1c43, 0x18a5, 0x1c43, 0x18a5, 0x1d99, 0x19f6, 0x1d99, +0x19f6, 0x1f8d, 0x1bec, 0x1f8d, 0x1bec, 0x2052, 0x1cba, 0x2052, 0x1cba, 0x2081, 0x1cfa, +0x2081, 0x1cfa, 0x2081, 0x1cfa, 0x2090, 0x1d22, 0x2090, 0x1d22, 0x2137, 0x1dec, 0x2137, +0x1dec, 0x1fd6, 0x1cb5, 0x1fd6, 0x1cb5, 0x1e6e, 0x1b80, 0x1e6e, 0x1b80, 0x1de8, 0x1b35, +0x1de8, 0x1b35, 0x1c37, 0x19c6, 0x1c37, 0x19c6, 0x1c37, 0x19c6, 0x1acb, 0x18a3, 0x1acb, +0x18a3, 0x18b0, 0x16d5, 0x18b0, 0x16d5, 0x15c7, 0x143e, 0x15c7, 0x143e, 0x12fa, 0x11c5, +0x12fa, 0x11c5, 0x1053, 0xf74, 0x1053, 0xf74, 0x1053, 0xf74, 0xde9, 0xd5f, 0xde9, +0xd5f, 0xb6f, 0xb37, 0xb6f, 0xb37, 0x946, 0x95e, 0x946, 0x95e, 0x7f0, 0x852, +0x7f0, 0x852, 0x6fe, 0x7a3, 0x6fe, 0x7a3, 0x5ea, 0x6cc, 0x5ea, 0x6cc, 0x5ea, +0x6cc, 0x363, 0x479, 0x363, 0x479, 0x52, 0x193, 0x52, 0x193, 0xfe68, 0xffcb, +0xfe68, 0xffcb, 0xfe00, 0xff7a, 0xfe00, 0xff7a, 0xfe61, 0xffea, 0xfe61, 0xffea, 0xfc3e, +0xfdcd, 0xfc3e, 0xfdcd, 0xfc3e, 0xfdcd, 0xfa78, 0xfc04, 0xfa78, 0xfc04, 0xfa93, 0xfc15, +0xfa93, 0xfc15, 0xf9e1, 0xfb51, 0xf9e1, 0xfb51, 0xf8ec, 0xfa46, 0xf8ec, 0xfa46, 0xf7e6, +0xf926, 0xf7e6, 0xf926, 0xf7e6, 0xf926, 0xf665, 0xf787, 0xf665, 0xf787, 0xf541, 0xf644, +0xf541, 0xf644, 0xf57f, 0xf664, 0xf57f, 0xf664, 0xf4b9, 0xf580, 0xf4b9, 0xf580, 0xf3c1, +0xf46d, 0xf3c1, 0xf46d, 0xf3b3, 0xf446, 0xf3b3, 0xf446, 0xf3b3, 0xf446, 0xf42b, 0xf4ab, +0xf42b, 0xf4ab, 0xf4da, 0xf54a, 0xf4da, 0xf54a, 0xf574, 0xf5da, 0xf574, 0xf5da, 0xf6cb, +0xf72c, 0xf6cb, 0xf72c, 0xf724, 0xf784, 0xf724, 0xf784, 0xf7c5, 0xf829, 0xf7c5, 0xf829, +0xf7c5, 0xf829, 0xf823, 0xf88f, 0xf823, 0xf88f, 0xf74b, 0xf7c2, 0xf74b, 0xf7c2, 0xf6ac, +0xf730, 0xf6ac, 0xf730, 0xf6ee, 0xf780, 0xf6ee, 0xf780, 0xf7c3, 0xf863, 0xf7c3, 0xf863, +0xf7c3, 0xf863, 0xf803, 0xf8b0, 0xf803, 0xf8b0, 0xf7e9, 0xf8a0, 0xf7e9, 0xf8a0, 0xf698, +0xf755, 0xf698, 0xf755, 0xf50b, 0xf5ca, 0xf50b, 0xf5ca, 0xf3a1, 0xf45c, 0xf3a1, 0xf45c, +0xf2de, 0xf38f, 0xf2de, 0xf38f, 0xf2de, 0xf38f, 0xf2fe, 0xf39f, 0xf2fe, 0xf39f, 0xf28e, +0xf317, 0xf28e, 0xf317, 0xf385, 0xf3f0, 0xf385, 0xf3f0, 0xf5fc, 0xf642, 0xf5fc, 0xf642, +0xf75b, 0xf776, 0xf75b, 0xf776, 0xf7df, 0xf7c9, 0xf7df, 0xf7c9, 0xf7df, 0xf7c9, 0xf8e8, +0xf89d, 0xf8e8, 0xf89d, 0xf98e, 0xf90b, 0xf98e, 0xf90b, 0xfaa8, 0xf9eb, 0xfaa8, 0xf9eb, +0xfd8c, 0xfc93, 0xfd8c, 0xfc93, 0xffda, 0xfea7, 0xffda, 0xfea7, 0xffda, 0xfea7, 0x1ba, +0x50, 0x1ba, 0x50, 0x55c, 0x3bd, 0x55c, 0x3bd, 0x84b, 0x67c, 0x84b, 0x67c, +0xa64, 0x86c, 0xa64, 0x86c, 0xc12, 0x9f8, 0xc12, 0x9f8, 0xba3, 0x96f, 0xba3, +0x96f, 0xba3, 0x96f, 0xbca, 0x984, 0xbca, 0x984, 0xc7a, 0xa2b, 0xc7a, 0xa2b, +0xd2c, 0xade, 0xd2c, 0xade, 0xe3d, 0xbf8, 0xe3d, 0xbf8, 0xd99, 0xb65, 0xd99, +0xb65, 0xc67, 0xa4d, 0xc67, 0xa4d, 0xc67, 0xa4d, 0xccf, 0xad5, 0xccf, 0xad5, +0xd65, 0xb91, 0xd65, 0xb91, 0xc93, 0xaea, 0xc93, 0xaea, 0xbc2, 0xa46, 0xbc2, +0xa46, 0xb02, 0x9b6, 0xb02, 0x9b6, 0xb02, 0x9b6, 0x9e8, 0x8cc, 0x9e8, 0x8cc, +0x9fe, 0x90f, 0x9fe, 0x90f, 0x9f7, 0x934, 0x9f7, 0x934, 0x89b, 0x801, 0x89b, +0x801, 0x8b6, 0x83f, 0x8b6, 0x83f, 0x8d1, 0x878, 0x8d1, 0x878, 0x8d1, 0x878, +0x7b3, 0x771, 0x7b3, 0x771, 0x7b8, 0x787, 0x7b8, 0x787, 0x6fc, 0x6d4, 0x6fc, +0x6d4, 0x62f, 0x60a, 0x62f, 0x60a, 0x671, 0x646, 0x671, 0x646, 0x5d6, 0x5a0, +0x5d6, 0x5a0, 0x5d6, 0x5a0, 0x53d, 0x4f7, 0x53d, 0x4f7, 0x51e, 0x4c2, 0x51e, +0x4c2, 0x5af, 0x53a, 0x5af, 0x53a, 0x6ed, 0x65c, 0x6ed, 0x65c, 0x6e6, 0x638, +0x6e6, 0x638, 0x6e6, 0x638, 0x663, 0x598, 0x663, 0x598, 0x64e, 0x566, 0x64e, +0x566, 0x5bc, 0x4b9, 0x5bc, 0x4b9, 0x53e, 0x424, 0x53e, 0x424, 0x51b, 0x3ee, +0x51b, 0x3ee, 0x4f9, 0x3bc, 0x4f9, 0x3bc, 0x4f9, 0x3bc, 0x540, 0x3fa, 0x540, +0x3fa, 0x6f3, 0x5a8, 0x6f3, 0x5a8, 0x87c, 0x731, 0x87c, 0x731, 0x934, 0x7f0, +0x934, 0x7f0, 0x9e7, 0x8ad, 0x9e7, 0x8ad, 0x98e, 0x863, 0x98e, 0x863, 0x98e, +0x863, 0x97c, 0x863, 0x97c, 0x863, 0xa32, 0x92d, 0xa32, 0x92d, 0xb8b, 0xa9a, +0xb8b, 0xa9a, 0xcc2, 0xbe6, 0xcc2, 0xbe6, 0xc74, 0xbac, 0xc74, 0xbac, 0xc74, +0xbac, 0xc6b, 0xbb4, 0xc6b, 0xbb4, 0xcd1, 0xc27, 0xcd1, 0xc27, 0xbd9, 0xb38, +0xbd9, 0xb38, 0xa9f, 0xa02, 0xa9f, 0xa02, 0xa48, 0x9a7, 0xa48, 0x9a7, 0x9d1, +0x926, 0x9d1, 0x926, 0x9d1, 0x926, 0xb5d, 0xaa0, 0xb5d, 0xaa0, 0xd76, 0xca1, +0xd76, 0xca1, 0xd1c, 0xc27, 0xd1c, 0xc27, 0xd87, 0xc6b, 0xd87, 0xc6b, 0xebc, +0xd74, 0xebc, 0xd74, 0xebc, 0xd74, 0x1025, 0xeac, 0x1025, 0xeac, 0x117a, 0xfcc, +0x117a, 0xfcc, 0x119e, 0xfb9, 0x119e, 0xfb9, 0x1288, 0x106b, 0x1288, 0x106b, 0x153e, +0x12ea, 0x153e, 0x12ea, 0x1768, 0x14e0, 0x1768, 0x14e0, 0x1768, 0x14e0, 0x17d5, 0x151c, +0x17d5, 0x151c, 0x1893, 0x15af, 0x1893, 0x15af, 0x18b3, 0x15ac, 0x18b3, 0x15ac, 0x1901, +0x15de, 0x1901, 0x15de, 0x1ac1, 0x178d, 0x1ac1, 0x178d, 0x1af8, 0x17bc, 0x1af8, 0x17bc, +0x1af8, 0x17bc, 0x19c1, 0x1689, 0x19c1, 0x1689, 0x1929, 0x1600, 0x1929, 0x1600, 0x18e8, +0x15db, 0x18e8, 0x15db, 0x1821, 0x153a, 0x1821, 0x153a, 0x168c, 0x13d5, 0x168c, 0x13d5, +0x168c, 0x13d5, 0x1393, 0x1117, 0x1393, 0x1117, 0x10f7, 0xebf, 0x10f7, 0xebf, 0xf49, +0xd5c, 0xf49, 0xd5c, 0xdaf, 0xc12, 0xdaf, 0xc12, 0xc28, 0xadf, 0xc28, 0xadf, +0x97e, 0x88d, 0x97e, 0x88d, 0x97e, 0x88d, 0x5d4, 0x53a, 0x5d4, 0x53a, 0x2ae, +0x26b, 0x2ae, 0x26b, 0x36, 0x45, 0x36, 0x45, 0xfd12, 0xfd70, 0xfd12, 0xfd70, +0xfa70, 0xfb17, 0xfa70, 0xfb17, 0xf832, 0xf91a, 0xf832, 0xf91a, 0xf832, 0xf91a, 0xf69f, +0xf7bf, 0xf69f, 0xf7bf, 0xf5e4, 0xf733, 0xf5e4, 0xf733, 0xf46f, 0xf5e5, 0xf46f, 0xf5e5, +0xf2a6, 0xf439, 0xf2a6, 0xf439, 0xf086, 0xf22c, 0xf086, 0xf22c, 0xf086, 0xf22c, 0xeeba, +0xf06a, 0xeeba, 0xf06a, 0xecab, 0xee5e, 0xecab, 0xee5e, 0xec40, 0xedee, 0xec40, 0xedee, +0xec1a, 0xedbd, 0xec1a, 0xedbd, 0xea4b, 0xebdf, 0xea4b, 0xebdf, 0xea24, 0xeba5, 0xea24, +0xeba5, 0xea24, 0xeba5, 0xeaa6, 0xec14, 0xeaa6, 0xec14, 0xea87, 0xebe1, 0xea87, 0xebe1, +0xe9e0, 0xeb27, 0xe9e0, 0xeb27, 0xe993, 0xeaca, 0xe993, 0xeaca, 0xe966, 0xea92, 0xe966, +0xea92, 0xe9a3, 0xeac8, 0xe9a3, 0xeac8, 0xe9a3, 0xeac8, 0xeb43, 0xec67, 0xeb43, 0xec67, +0xed61, 0xee8b, 0xed61, 0xee8b, 0xee75, 0xefa9, 0xee75, 0xefa9, 0xef35, 0xf07b, 0xef35, +0xf07b, 0xf017, 0xf175, 0xf017, 0xf175, 0xf017, 0xf175, 0xefd5, 0xf150, 0xefd5, 0xf150, +0xf106, 0xf2a2, 0xf106, 0xf2a2, 0xf255, 0xf416, 0xf255, 0xf416, 0xf325, 0xf50d, 0xf325, +0xf50d, 0xf3ee, 0xf5fc, 0xf3ee, 0xf5fc, 0xf37d, 0xf5b1, 0xf37d, 0xf5b1, 0xf37d, 0xf5b1, +0xf307, 0xf55e, 0xf307, 0xf55e, 0xf20c, 0xf482, 0xf20c, 0xf482, 0xf1c3, 0xf453, 0xf1c3, +0xf453, 0xf2bc, 0xf55f, 0xf2bc, 0xf55f, 0xf3e0, 0xf68d, 0xf3e0, 0xf68d, 0xf475, 0xf724, +0xf475, 0xf724, 0xf475, 0xf724, 0xf5c3, 0xf86c, 0xf5c3, 0xf86c, 0xf762, 0xf9fb, 0xf762, +0xf9fb, 0xf777, 0xf9f6, 0xf777, 0xf9f6, 0xf859, 0xfab4, 0xf859, 0xfab4, 0xf9e8, 0xfc19, +0xf9e8, 0xfc19, 0xf9e8, 0xfc19, 0xfab0, 0xfcaf, 0xfab0, 0xfcaf, 0xfce9, 0xfeaf, 0xfce9, +0xfeaf, 0xffee, 0x177, 0xffee, 0x177, 0x186, 0x2cf, 0x186, 0x2cf, 0x3c9, 0x4d1, +0x3c9, 0x4d1, 0x594, 0x65c, 0x594, 0x65c, 0x594, 0x65c, 0x6cb, 0x755, 0x6cb, +0x755, 0x88d, 0x8df, 0x88d, 0x8df, 0x8fe, 0x91e, 0x8fe, 0x91e, 0x9dd, 0x9d3, +0x9dd, 0x9d3, 0xab2, 0xa87, 0xab2, 0xa87, 0xa30, 0x9ef, 0xa30, 0x9ef, 0xa30, +0x9ef, 0x9a2, 0x957, 0x9a2, 0x957, 0x8cd, 0x884, 0x8cd, 0x884, 0x670, 0x635, +0x670, 0x635, 0x3a2, 0x380, 0x3a2, 0x380, 0x225, 0x228, 0x225, 0x228, 0x225, +0x228, 0xd8, 0x10b, 0xd8, 0x10b, 0xffff, 0x6c, 0xffff, 0x6c, 0xff2a, 0xffd9, +0xff2a, 0xffd9, 0xfd19, 0xfe11, 0xfd19, 0xfe11, 0xfbaa, 0xfcf0, 0xfbaa, 0xfcf0, 0xfadb, +0xfc72, 0xfadb, 0xfc72, 0xfadb, 0xfc72, 0xf857, 0xfa41, 0xf857, 0xfa41, 0xf517, 0xf753, +0xf517, 0xf753, 0xf301, 0xf58e, 0xf301, 0xf58e, 0xf0ec, 0xf3c6, 0xf0ec, 0xf3c6, 0xef06, +0xf228, 0xef06, 0xf228, 0xed5d, 0xf0c1, 0xed5d, 0xf0c1, 0xed5d, 0xf0c1, 0xeb3a, 0xeed9, +0xeb3a, 0xeed9, 0xe98e, 0xed5f, 0xe98e, 0xed5f, 0xe83c, 0xec37, 0xe83c, 0xec37, 0xe737, +0xeb54, 0xe737, 0xeb54, 0xe5d2, 0xea09, 0xe5d2, 0xea09, 0xe5d2, 0xea09, 0xe396, 0xe7de, +0xe396, 0xe7de, 0xe214, 0xe665, 0xe214, 0xe665, 0xe1fd, 0xe651, 0xe1fd, 0xe651, 0xe129, +0xe57a, 0xe129, 0xe57a, 0xe09e, 0xe4e7, 0xe09e, 0xe4e7, 0xe0b6, 0xe4f4, 0xe0b6, 0xe4f4, +0xe0b6, 0xe4f4, 0xdf25, 0xe355, 0xdf25, 0xe355, 0xdf75, 0xe396, 0xdf75, 0xe396, 0xdff5, +0xe406, 0xdff5, 0xe406, 0xdf25, 0xe326, 0xdf25, 0xe326, 0xdfea, 0xe3dc, 0xdfea, 0xe3dc, +0xe171, 0xe555, 0xe171, 0xe555, 0xe171, 0xe555, 0xe327, 0xe6ff, 0xe327, 0xe6ff, 0xe3ad, +0xe77a, 0xe3ad, 0xe77a, 0xe3c0, 0xe784, 0xe3c0, 0xe784, 0xe43a, 0xe7f4, 0xe43a, 0xe7f4, +0xe4e5, 0xe897, 0xe4e5, 0xe897, 0xe4e5, 0xe897, 0xe59f, 0xe948, 0xe59f, 0xe948, 0xe6e7, +0xea85, 0xe6e7, 0xea85, 0xe7fb, 0xeb8c, 0xe7fb, 0xeb8c, 0xe77d, 0xeafd, 0xe77d, 0xeafd, +0xe7c5, 0xeb30, 0xe7c5, 0xeb30, 0xe7e7, 0xeb38, 0xe7e7, 0xeb38, 0xe7e7, 0xeb38, 0xe6de, +0xea0d, 0xe6de, 0xea0d, 0xe751, 0xea58, 0xe751, 0xea58, 0xe7cc, 0xeaa3, 0xe7cc, 0xeaa3, +0xe79f, 0xea3e, 0xe79f, 0xea3e, 0xea68, 0xecc6, 0xea68, 0xecc6, 0xece6, 0xeefc, 0xece6, +0xeefc, 0xece6, 0xeefc, 0xee2f, 0xeff5, 0xee2f, 0xeff5, 0xf0c0, 0xf230, 0xf0c0, 0xf230, +0xf2a7, 0xf3b9, 0xf2a7, 0xf3b9, 0xf598, 0xf647, 0xf598, 0xf647, 0xf97a, 0xf9c4, 0xf97a, +0xf9c4, 0xf97a, 0xf9c4, 0xfc89, 0xfc6a, 0xfc89, 0xfc6a, 0xff1f, 0xfe97, 0xff1f, 0xfe97, +0x1d6, 0xe7, 0x1d6, 0xe7, 0x461, 0x30b, 0x461, 0x30b, 0x78a, 0x5d3, 0x78a, +0x5d3, 0xa9e, 0x88b, 0xa9e, 0x88b, 0xa9e, 0x88b, 0xc05, 0x99d, 0xc05, 0x99d, +0xe67, 0xbb2, 0xe67, 0xbb2, 0x10b2, 0xdb9, 0x10b2, 0xdb9, 0x11f7, 0xec3, 0x11f7, +0xec3, 0x1407, 0x10a3, 0x1407, 0x10a3, 0x1407, 0x10a3, 0x1567, 0x11de, 0x1567, 0x11de, +0x14b7, 0x1113, 0x14b7, 0x1113, 0x14b0, 0x10fa, 0x14b0, 0x10fa, 0x14e0, 0x1123, 0x14e0, +0x1123, 0x1445, 0x1087, 0x1445, 0x1087, 0x14ee, 0x1138, 0x14ee, 0x1138, 0x14ee, 0x1138, +0x145e, 0x10b7, 0x145e, 0x10b7, 0x13a5, 0x1010, 0x13a5, 0x1010, 0x12f5, 0xf76, 0x12f5, +0xf76, 0x10bc, 0xd56, 0x10bc, 0xd56, 0xf48, 0xbfc, 0xf48, 0xbfc, 0xe5c, 0xb29, +0xe5c, 0xb29, 0xe5c, 0xb29, 0xe49, 0xb2e, 0xe49, 0xb2e, 0xe83, 0xb7d, 0xe83, +0xb7d, 0xdc3, 0xace, 0xdc3, 0xace, 0xcbd, 0x9d6, 0xcbd, 0x9d6, 0xccc, 0x9f0, +0xccc, 0x9f0, 0xccc, 0x9f0, 0xcae, 0x9d9, 0xcae, 0x9d9, 0xbc7, 0x8f4, 0xbc7, +0x8f4, 0xc4d, 0x979, 0xc4d, 0x979, 0xcb0, 0x9d8, 0xcb0, 0x9d8, 0xc55, 0x977, +0xc55, 0x977, 0xbcb, 0x8e7, 0xbcb, 0x8e7, 0xbcb, 0x8e7, 0xb9f, 0x8b5, 0xb9f, +0x8b5, 0xbf6, 0x908, 0xbf6, 0x908, 0xb07, 0x816, 0xb07, 0x816, 0xaa3, 0x7b4, +0xaa3, 0x7b4, 0xad3, 0x7e9, 0xad3, 0x7e9, 0xa3f, 0x760, 0xa3f, 0x760, 0xa3f, +0x760, 0xa90, 0x7c4, 0xa90, 0x7c4, 0xb1b, 0x868, 0xb1b, 0x868, 0xb30, 0x89c, +0xb30, 0x89c, 0xc04, 0x998, 0xc04, 0x998, 0xc6f, 0xa31, 0xc6f, 0xa31, 0xc6f, +0xa31, 0xb70, 0x968, 0xb70, 0x968, 0xa1b, 0x84e, 0xa1b, 0x84e, 0x973, 0x7e6, +0x973, 0x7e6, 0x941, 0x7f9, 0x941, 0x7f9, 0x916, 0x815, 0x916, 0x815, 0x973, +0x8ba, 0x973, 0x8ba, 0x973, 0x8ba, 0x8e2, 0x871, 0x8e2, 0x871, 0x86e, 0x843, +0x86e, 0x843, 0x88e, 0x8a5, 0x88e, 0x8a5, 0x6df, 0x733, 0x6df, 0x733, 0x462, +0x4ee, 0x462, 0x4ee, 0x1e8, 0x2a3, 0x1e8, 0x2a3, 0x1e8, 0x2a3, 0x55, 0x136, +0x55, 0x136, 0x4b, 0x149, 0x4b, 0x149, 0xa5, 0x1b6, 0xa5, 0x1b6, 0x95, +0x1ae, 0x95, 0x1ae, 0xcb, 0x1e1, 0xcb, 0x1e1, 0xcb, 0x1e1, 0x11a, 0x225, +0x11a, 0x225, 0x219, 0x30f, 0x219, 0x30f, 0x2e8, 0x3c1, 0x2e8, 0x3c1, 0x1b8, +0x26e, 0x1b8, 0x26e, 0x1fd, 0x288, 0x1fd, 0x288, 0x3af, 0x40d, 0x3af, 0x40d, +0x3af, 0x40d, 0x4d2, 0x501, 0x4d2, 0x501, 0x5ac, 0x5ab, 0x5ac, 0x5ab, 0x6a3, +0x674, 0x6a3, 0x674, 0x6e1, 0x687, 0x6e1, 0x687, 0x7d2, 0x752, 0x7d2, 0x752, +0xa64, 0x9c4, 0xa64, 0x9c4, 0xa64, 0x9c4, 0xa60, 0x9a9, 0xa60, 0x9a9, 0x944, +0x87f, 0x944, 0x87f, 0x8b8, 0x7ee, 0x8b8, 0x7ee, 0x839, 0x774, 0x839, 0x774, +0x75b, 0x6a5, 0x75b, 0x6a5, 0x75b, 0x6a5, 0x529, 0x48c, 0x529, 0x48c, 0x2f7, +0x27c, 0x2f7, 0x27c, 0x124, 0xd4, 0x124, 0xd4, 0x1b, 0xfffd, 0x1b, 0xfffd, +0xffba, 0xffd5, 0xffba, 0xffd5, 0xff0d, 0xff66, 0xff0d, 0xff66, 0xff0d, 0xff66, 0xfcd7, +0xfd6f, 0xfcd7, 0xfd6f, 0xfa20, 0xfaf8, 0xfa20, 0xfaf8, 0xf85e, 0xf976, 0xf85e, 0xf976, +0xf731, 0xf885, 0xf731, 0xf885, 0xf5e7, 0xf773, 0xf5e7, 0xf773, 0xf4fb, 0xf6b7, 0xf4fb, +0xf6b7, 0xf4fb, 0xf6b7, 0xf4b0, 0xf696, 0xf4b0, 0xf696, 0xf35a, 0xf560, 0xf35a, 0xf560, +0xf246, 0xf462, 0xf246, 0xf462, 0xf195, 0xf3bd, 0xf195, 0xf3bd, 0xf08e, 0xf2b5, 0xf08e, +0xf2b5, 0xf08e, 0xf2b5, 0xf04e, 0xf26b, 0xf04e, 0xf26b, 0xf0b4, 0xf2bb, 0xf0b4, 0xf2bb, +0xf11f, 0xf306, 0xf11f, 0xf306, 0xf199, 0xf357, 0xf199, 0xf357, 0xf277, 0xf403, 0xf277, +0xf403, 0xf300, 0xf455, 0xf300, 0xf455, 0xf300, 0xf455, 0xf3a3, 0xf4ba, 0xf3a3, 0xf4ba, +0xf412, 0xf4e8, 0xf412, 0xf4e8, 0xf41c, 0xf4b0, 0xf41c, 0xf4b0, 0xf475, 0xf4c6, 0xf475, +0xf4c6, 0xf463, 0xf473, 0xf463, 0xf473, 0xf554, 0xf525, 0xf554, 0xf525, 0xf554, 0xf525, +0xf839, 0xf7d0, 0xf839, 0xf7d0, 0xfa63, 0xf9c7, 0xfa63, 0xf9c7, 0xfbc4, 0xfaf9, 0xfbc4, +0xfaf9, 0xfd75, 0xfc84, 0xfd75, 0xfc84, 0xfec0, 0xfdb0, 0xfec0, 0xfdb0, 0xfec0, 0xfdb0, +0x94, 0xff6d, 0x94, 0xff6d, 0x1b7, 0x7f, 0x1b7, 0x7f, 0x22a, 0xe9, 0x22a, +0xe9, 0x402, 0x2be, 0x402, 0x2be, 0x615, 0x4d2, 0x615, 0x4d2, 0x7d7, 0x69a, +0x7d7, 0x69a, 0x7d7, 0x69a, 0x97c, 0x847, 0x97c, 0x847, 0x9e3, 0x8b7, 0x9e3, +0x8b7, 0x8ae, 0x78a, 0x8ae, 0x78a, 0x868, 0x74b, 0x868, 0x74b, 0x835, 0x71c, +0x835, 0x71c, 0x762, 0x649, 0x762, 0x649, 0x762, 0x649, 0x791, 0x673, 0x791, +0x673, 0x7b3, 0x68a, 0x7b3, 0x68a, 0x93f, 0x804, 0x93f, 0x804, 0xa9d, 0x94a, +0xa9d, 0x94a, 0xb86, 0xa14, 0xb86, 0xa14, 0xb86, 0xa14, 0xd34, 0xb9c, 0xd34, +0xb9c, 0xc9e, 0xadb, 0xc9e, 0xadb, 0xcb8, 0xac6, 0xcb8, 0xac6, 0xf05, 0xcdf, +0xf05, 0xcdf, 0x104b, 0xdf0, 0x104b, 0xdf0, 0x11ec, 0xf5b, 0x11ec, 0xf5b, 0x11ec, +0xf5b, 0x1487, 0x11c1, 0x1487, 0x11c1, 0x1548, 0x124f, 0x1548, 0x124f, 0x1634, 0x130c, +0x1634, 0x130c, 0x182c, 0x14dc, 0x182c, 0x14dc, 0x1913, 0x15a2, 0x1913, 0x15a2, 0x1a38, +0x16ae, 0x1a38, 0x16ae, 0x1a38, 0x16ae, 0x1ab4, 0x171b, 0x1ab4, 0x171b, 0x1a90, 0x16f3, +0x1a90, 0x16f3, 0x1a46, 0x16af, 0x1a46, 0x16af, 0x18ae, 0x1529, 0x18ae, 0x1529, 0x170f, +0x13a6, 0x170f, 0x13a6, 0x170f, 0x13a6, 0x1689, 0x1348, 0x1689, 0x1348, 0x15e6, 0x12d6, +0x15e6, 0x12d6, 0x14c5, 0x11ef, 0x14c5, 0x11ef, 0x142d, 0x1199, 0x142d, 0x1199, 0x1267, +0x101a, 0x1267, 0x101a, 0x10ac, 0xeab, 0x10ac, 0xeab, 0x10ac, 0xeab, 0x1093, 0xedf, +0x1093, 0xedf, 0xf0d, 0xda7, 0xf0d, 0xda7, 0xd22, 0xc09, 0xd22, 0xc09, 0xc8d, +0xbbe, 0xc8d, 0xbbe, 0xb95, 0xb0a, 0xb95, 0xb0a, 0xb95, 0xb0a, 0xb57, 0xb0a, +0xb57, 0xb0a, 0xb56, 0xb40, 0xb56, 0xb40, 0x9bc, 0x9d3, 0x9bc, 0x9d3, 0x9b1, +0x9eb, 0x9b1, 0x9eb, 0xa72, 0xac6, 0xa72, 0xac6, 0x978, 0x9da, 0x978, 0x9da, +0x978, 0x9da, 0x90c, 0x974, 0x90c, 0x974, 0x88f, 0x8f2, 0x88f, 0x8f2, 0x717, +0x76c, 0x717, 0x76c, 0x774, 0x7b4, 0x774, 0x7b4, 0x7c5, 0x7e9, 0x7c5, 0x7e9, +0x64b, 0x64e, 0x64b, 0x64e, 0x64b, 0x64e, 0x5fd, 0x5dc, 0x5fd, 0x5dc, 0x5a3, +0x55c, 0x5a3, 0x55c, 0x5a2, 0x535, 0x5a2, 0x535, 0x678, 0x5e7, 0x678, 0x5e7, +0x5df, 0x52c, 0x5df, 0x52c, 0x5df, 0x52c, 0x65f, 0x58f, 0x65f, 0x58f, 0x7df, +0x6f9, 0x7df, 0x6f9, 0x884, 0x78d, 0x884, 0x78d, 0x9ce, 0x8ce, 0x9ce, 0x8ce, +0xaa2, 0x9a1, 0xaa2, 0x9a1, 0x999, 0x89e, 0x999, 0x89e, 0x999, 0x89e, 0x9b9, +0x8cc, 0x9b9, 0x8cc, 0xa63, 0x98b, 0xa63, 0x98b, 0x974, 0x8b8, 0x974, 0x8b8, +0x938, 0x89e, 0x938, 0x89e, 0x8ac, 0x836, 0x8ac, 0x836, 0x787, 0x73a, 0x787, +0x73a, 0x787, 0x73a, 0x6c1, 0x69e, 0x6c1, 0x69e, 0x4dd, 0x4e3, 0x4dd, 0x4e3, +0x268, 0x297, 0x268, 0x297, 0x56, 0xab, 0x56, 0xab, 0xfdb5, 0xfe2b, 0xfdb5, +0xfe2b, 0xfdb5, 0xfe2b, 0xfba9, 0xfc3c, 0xfba9, 0xfc3c, 0xfb6b, 0xfc15, 0xfb6b, 0xfc15, +0xfa00, 0xfaba, 0xfa00, 0xfaba, 0xf8d5, 0xf997, 0xf8d5, 0xf997, 0xf86b, 0xf92f, 0xf86b, +0xf92f, 0xf79d, 0xf85c, 0xf79d, 0xf85c, 0xf79d, 0xf85c, 0xf87d, 0xf930, 0xf87d, 0xf930, +0xf8e0, 0xf982, 0xf8e0, 0xf982, 0xf8fb, 0xf987, 0xf8fb, 0xf987, 0xf9e3, 0xfa55, 0xf9e3, +0xfa55, 0xfa97, 0xfaeb, 0xfa97, 0xfaeb, 0xfb11, 0xfb49, 0xfb11, 0xfb49, 0xfb11, 0xfb49, +0xfb94, 0xfbae, 0xfb94, 0xfbae, 0xfb9a, 0xfb99, 0xfb9a, 0xfb99, 0xfb86, 0xfb6e, 0xfb86, +0xfb6e, 0xfc97, 0xfc6c, 0xfc97, 0xfc6c, 0xfcfe, 0xfcc6, 0xfcfe, 0xfcc6, 0xfcfe, 0xfcc6, +0xfdeb, 0xfdae, 0xfdeb, 0xfdae, 0xfe95, 0xfe5a, 0xfe95, 0xfe5a, 0xfd5e, 0xfd2f, 0xfd5e, +0xfd2f, 0xfd02, 0xfce6, 0xfd02, 0xfce6, 0xfc61, 0xfc62, 0xfc61, 0xfc62, 0xfb1b, 0xfb41, +0xfb1b, 0xfb41, 0xfb1b, 0xfb41, 0xfa96, 0xfae9, 0xfa96, 0xfae9, 0xf960, 0xf9e9, 0xf960, +0xf9e9, 0xf82c, 0xf8ef, 0xf82c, 0xf8ef, 0xf7dc, 0xf8de, 0xf7dc, 0xf8de, 0xf638, 0xf77c, +0xf638, 0xf77c, 0xf4e1, 0xf66a, 0xf4e1, 0xf66a, 0xf4e1, 0xf66a, 0xf4a5, 0xf672, 0xf4a5, +0xf672, 0xf381, 0xf591, 0xf381, 0xf591, 0xf2ea, 0xf53a, 0xf2ea, 0xf53a, 0xf292, 0xf51c, +0xf292, 0xf51c, 0xf139, 0xf3f7, 0xf139, 0xf3f7, 0xf139, 0xf3f7, 0xf0ae, 0xf399, 0xf0ae, +0xf399, 0xf0de, 0xf3ed, 0xf0de, 0xf3ed, 0xf08a, 0xf3b4, 0xf08a, 0xf3b4, 0xf075, 0xf3af, +0xf075, 0xf3af, 0xefd9, 0xf31a, 0xefd9, 0xf31a, 0xef28, 0xf265, 0xef28, 0xf265, 0xef28, +0xf265, 0xef0c, 0xf23c, 0xef0c, 0xf23c, 0xeeee, 0xf208, 0xeeee, 0xf208, 0xefab, 0xf2a5, +0xefab, 0xf2a5, 0xf0ab, 0xf37f, 0xf0ab, 0xf37f, 0xf0ed, 0xf393, 0xf0ed, 0xf393, 0xf127, +0xf39c, 0xf127, 0xf39c, 0xf127, 0xf39c, 0xf262, 0xf4a2, 0xf262, 0xf4a2, 0xf2f0, 0xf4fa, +0xf2f0, 0xf4fa, 0xf2ca, 0xf49d, 0xf2ca, 0xf49d, 0xf2f9, 0xf496, 0xf2f9, 0xf496, 0xf2bd, +0xf426, 0xf2bd, 0xf426, 0xf2bd, 0xf426, 0xf2fd, 0xf436, 0xf2fd, 0xf436, 0xf3c4, 0xf4d2, +0xf3c4, 0xf4d2, 0xf40e, 0xf4f6, 0xf40e, 0xf4f6, 0xf432, 0xf4fb, 0xf432, 0xf4fb, 0xf5eb, +0xf69b, 0xf5eb, 0xf69b, 0xf752, 0xf7f1, 0xf752, 0xf7f1, 0xf752, 0xf7f1, 0xf729, 0xf7be, +0xf729, 0xf7be, 0xf70b, 0xf79d, 0xf70b, 0xf79d, 0xf674, 0xf708, 0xf674, 0xf708, 0xf6fb, +0xf798, 0xf6fb, 0xf798, 0xf74a, 0xf7f5, 0xf74a, 0xf7f5, 0xf5e4, 0xf6a1, 0xf5e4, 0xf6a1, +0xf5e4, 0xf6a1, 0xf486, 0xf559, 0xf486, 0xf559, 0xf346, 0xf431, 0xf346, 0xf431, 0xf2b7, +0xf3bb, 0xf2b7, 0xf3bb, 0xf217, 0xf336, 0xf217, 0xf336, 0xf141, 0xf279, 0xf141, 0xf279, +0xf141, 0xf279, 0xf105, 0xf255, 0xf105, 0xf255, 0xf0dc, 0xf244, 0xf0dc, 0xf244, 0xefbc, +0xf139, 0xefbc, 0xf139, 0xeecf, 0xf05e, 0xeecf, 0xf05e, 0xee7b, 0xf019, 0xee7b, 0xf019, +0xede6, 0xef91, 0xede6, 0xef91, 0xede6, 0xef91, 0xef7e, 0xf133, 0xef7e, 0xf133, 0xf14a, +0xf307, 0xf14a, 0xf307, 0xf154, 0xf317, 0xf154, 0xf317, 0xf166, 0xf32d, 0xf166, 0xf32d, +0xf1b6, 0xf381, 0xf1b6, 0xf381, 0xf26b, 0xf439, 0xf26b, 0xf439, 0xf26b, 0xf439, 0xf367, +0xf538, 0xf367, 0xf538, 0xf3eb, 0xf5c1, 0xf3eb, 0xf5c1, 0xf3d6, 0xf5b2, 0xf3d6, 0xf5b2, +0xf471, 0xf655, 0xf471, 0xf655, 0xf4c3, 0xf6b1, 0xf4c3, 0xf6b1, 0xf4c3, 0xf6b1, 0xf53e, +0xf739, 0xf53e, 0xf739, 0xf581, 0xf78b, 0xf581, 0xf78b, 0xf39f, 0xf5bc, 0xf39f, 0xf5bc, +0xf269, 0xf49b, 0xf269, 0xf49b, 0xf193, 0xf3db, 0xf193, 0xf3db, 0xf008, 0xf268, 0xf008, +0xf268, 0xf008, 0xf268, 0xefe5, 0xf25f, 0xefe5, 0xf25f, 0xefc4, 0xf256, 0xefc4, 0xf256, +0xee89, 0xf134, 0xee89, 0xf134, 0xeecc, 0xf18e, 0xeecc, 0xf18e, 0xee82, 0xf159, 0xee82, +0xf159, 0xecc5, 0xefac, 0xecc5, 0xefac, 0xecc5, 0xefac, 0xec7f, 0xef72, 0xec7f, 0xef72, +0xec25, 0xef20, 0xec25, 0xef20, 0xebd4, 0xeed0, 0xebd4, 0xeed0, 0xec58, 0xef4f, 0xec58, +0xef4f, 0xeca1, 0xef8c, 0xeca1, 0xef8c, 0xeca1, 0xef8c, 0xecf5, 0xefcb, 0xecf5, 0xefcb, +0xed78, 0xf033, 0xed78, 0xf033, 0xedec, 0xf083, 0xedec, 0xf083, 0xef4c, 0xf1b8, 0xef4c, +0xf1b8, 0xf0f1, 0xf32c, 0xf0f1, 0xf32c, 0xf0ef, 0xf2f1, 0xf0ef, 0xf2f1, 0xf0ef, 0xf2f1, +0xf1ad, 0xf371, 0xf1ad, 0xf371, 0xf3e5, 0xf565, 0xf3e5, 0xf565, 0xf54d, 0xf685, 0xf54d, +0xf685, 0xf69b, 0xf788, 0xf69b, 0xf788, 0xf7d1, 0xf871, 0xf7d1, 0xf871, 0xf7d1, 0xf871, +0xf81b, 0xf86c, 0xf81b, 0xf86c, 0xf9ab, 0xf9ae, 0xf9ab, 0xf9ae, 0xfc79, 0xfc2e, 0xfc79, +0xfc2e, 0xfe4a, 0xfdb3, 0xfe4a, 0xfdb3, 0x51, 0xff71, 0x51, 0xff71, 0x2bc, 0x196, +0x2bc, 0x196, 0x2bc, 0x196, 0x495, 0x32d, 0x495, 0x32d, 0x72d, 0x588, 0x72d, +0x588, 0x958, 0x779, 0x958, 0x779, 0x9fc, 0x7ea, 0x9fc, 0x7ea, 0xaf3, 0x8b2, +0xaf3, 0x8b2, 0xc2f, 0x9c3, 0xc2f, 0x9c3, 0xc2f, 0x9c3, 0xd7d, 0xaea, 0xd7d, +0xaea, 0xe65, 0xbb0, 0xe65, 0xbb0, 0xe12, 0xb3f, 0xe12, 0xb3f, 0xe79, 0xb8a, +0xe79, 0xb8a, 0xf4e, 0xc48, 0xf4e, 0xc48, 0xf4e, 0xc48, 0xe6e, 0xb51, 0xe6e, +0xb51, 0xe77, 0xb45, 0xe77, 0xb45, 0xf25, 0xbe0, 0xf25, 0xbe0, 0xed8, 0xb80, +0xed8, 0xb80, 0x1020, 0xcb7, 0x1020, 0xcb7, 0x11be, 0xe44, 0x11be, 0xe44, 0x11be, +0xe44, 0x12d6, 0xf4c, 0x12d6, 0xf4c, 0x13c3, 0x102a, 0x13c3, 0x102a, 0x142e, 0x1087, +0x142e, 0x1087, 0x146f, 0x10bb, 0x146f, 0x10bb, 0x1522, 0x1163, 0x1522, 0x1163, 0x16b7, +0x12f1, 0x16b7, 0x12f1, 0x16b7, 0x12f1, 0x1857, 0x148d, 0x1857, 0x148d, 0x1a27, 0x165d, +0x1a27, 0x165d, 0x1b09, 0x1745, 0x1b09, 0x1745, 0x1c0f, 0x1855, 0x1c0f, 0x1855, 0x1d4b, +0x19a1, 0x1d4b, 0x19a1, 0x1d4b, 0x19a1, 0x1d9d, 0x1a0b, 0x1d9d, 0x1a0b, 0x1eb6, 0x1b43, +0x1eb6, 0x1b43, 0x1e6a, 0x1b1e, 0x1e6a, 0x1b1e, 0x1d48, 0x1a2a, 0x1d48, 0x1a2a, 0x1d0a, +0x1a22, 0x1d0a, 0x1a22, 0x1afb, 0x1852, 0x1afb, 0x1852, 0x1afb, 0x1852, 0x1951, 0x16ed, +0x1951, 0x16ed, 0x199a, 0x1783, 0x199a, 0x1783, 0x1821, 0x165d, 0x1821, 0x165d, 0x1568, +0x13fb, 0x1568, 0x13fb, 0x1339, 0x1227, 0x1339, 0x1227, 0x115a, 0x10a6, 0x115a, 0x10a6, +0x115a, 0x10a6, 0xf90, 0xf3b, 0xf90, 0xf3b, 0xd8a, 0xd96, 0xd8a, 0xd96, 0xae8, +0xb51, 0xae8, 0xb51, 0x77d, 0x842, 0x77d, 0x842, 0x497, 0x5b3, 0x497, 0x5b3, +0x497, 0x5b3, 0x327, 0x494, 0x327, 0x494, 0x266, 0x41d, 0x266, 0x41d, 0xa6, +0x2a0, 0xa6, 0x2a0, 0xfed3, 0x105, 0xfed3, 0x105, 0xfe5b, 0xbe, 0xfe5b, 0xbe, +0xfd44, 0xffcc, 0xfd44, 0xffcc, 0xfd44, 0xffcc, 0xfb32, 0xfdd5, 0xfb32, 0xfdd5, 0xfa2a, +0xfcdd, 0xfa2a, 0xfcdd, 0xf894, 0xfb4d, 0xf894, 0xfb4d, 0xf729, 0xf9de, 0xf729, 0xf9de, +0xf7c0, 0xfa67, 0xf7c0, 0xfa67, 0xf704, 0xf996, 0xf704, 0xf996, 0xf704, 0xf996, 0xf598, +0xf80c, 0xf598, 0xf80c, 0xf533, 0xf783, 0xf533, 0xf783, 0xf55b, 0xf781, 0xf55b, 0xf781, +0xf57c, 0xf774, 0xf57c, 0xf774, 0xf51b, 0xf6e2, 0xf51b, 0xf6e2, 0xf51b, 0xf6e2, 0xf443, +0xf5d7, 0xf443, 0xf5d7, 0xf394, 0xf4f5, 0xf394, 0xf4f5, 0xf42a, 0xf557, 0xf42a, 0xf557, +0xf50c, 0xf608, 0xf50c, 0xf608, 0xf653, 0xf720, 0xf653, 0xf720, 0xf660, 0xf700, 0xf660, +0xf700, 0xf660, 0xf700, 0xf628, 0xf69f, 0xf628, 0xf69f, 0xf774, 0xf7c5, 0xf774, 0xf7c5, +0xf74e, 0xf77d, 0xf74e, 0xf77d, 0xf70b, 0xf71a, 0xf70b, 0xf71a, 0xf74d, 0xf742, 0xf74d, +0xf742, 0xf770, 0xf74c, 0xf770, 0xf74c, 0xf770, 0xf74c, 0xf7bb, 0xf780, 0xf7bb, 0xf780, +0xf822, 0xf7d3, 0xf822, 0xf7d3, 0xf932, 0xf8cf, 0xf932, 0xf8cf, 0xf872, 0xf7fb, 0xf872, +0xf7fb, 0xf706, 0xf67a, 0xf706, 0xf67a, 0xf706, 0xf67a, 0xf5e3, 0xf542, 0xf5e3, 0xf542, +0xf411, 0xf358, 0xf411, 0xf358, 0xf42b, 0xf359, 0xf42b, 0xf359, 0xf45f, 0xf371, 0xf45f, +0xf371, 0xf4fa, 0xf3ec, 0xf4fa, 0xf3ec, 0xf699, 0xf569, 0xf699, 0xf569, 0xf699, 0xf569, +0xf7a3, 0xf64e, 0xf7a3, 0xf64e, 0xf9c2, 0xf846, 0xf9c2, 0xf846, 0xfb36, 0xf991, 0xfb36, +0xf991, 0xfc4b, 0xfa7b, 0xfc4b, 0xfa7b, 0xfdd0, 0xfbd5, 0xfdd0, 0xfbd5, 0xfefb, 0xfcd6, +0xfefb, 0xfcd6, 0xfefb, 0xfcd6, 0x100, 0xfeb2, 0x100, 0xfeb2, 0x321, 0xad, 0x321, +0xad, 0x4bb, 0x225, 0x4bb, 0x225, 0x6ce, 0x41b, 0x6ce, 0x41b, 0x8d3, 0x60a, +0x8d3, 0x60a, 0x8d3, 0x60a, 0xa13, 0x73a, 0xa13, 0x73a, 0xb74, 0x893, 0xb74, +0x893, 0xcb0, 0x9d0, 0xcb0, 0x9d0, 0xd26, 0xa51, 0xd26, 0xa51, 0xcdd, 0xa1d, +0xcdd, 0xa1d, 0xd0e, 0xa6a, 0xd0e, 0xa6a, 0xd0e, 0xa6a, 0xd63, 0xae7, 0xd63, +0xae7, 0xcf5, 0xaa8, 0xcf5, 0xaa8, 0xcfc, 0xae8, 0xcfc, 0xae8, 0xd60, 0xb8c, +0xd60, 0xb8c, 0xd0c, 0xb7d, 0xd0c, 0xb7d, 0xbaa, 0xa65, 0xbaa, 0xa65, 0xbaa, +0xa65, 0xae6, 0x9ef, 0xae6, 0x9ef, 0xa5d, 0x9b5, 0xa5d, 0x9b5, 0x859, 0x801, +0x859, 0x801, 0x6ef, 0x6e4, 0x6ef, 0x6e4, 0x6d0, 0x710, 0x6d0, 0x710, 0x6d0, +0x710, 0x614, 0x69a, 0x614, 0x69a, 0x5c5, 0x68a, 0x5c5, 0x68a, 0x622, 0x71f, +0x622, 0x71f, 0x52a, 0x656, 0x52a, 0x656, 0x3ea, 0x53c, 0x3ea, 0x53c, 0x36a, +0x4d7, 0x36a, 0x4d7, 0x36a, 0x4d7, 0x287, 0x404, 0x287, 0x404, 0x14b, 0x2cf, +0x14b, 0x2cf, 0x57, 0x1d7, 0x57, 0x1d7, 0xffc4, 0x136, 0xffc4, 0x136, 0xffe7, +0x142, 0xffe7, 0x142, 0xc, 0x147, 0xc, 0x147, 0xc, 0x147, 0xad, 0x1c2, +0xad, 0x1c2, 0x1a5, 0x28e, 0x1a5, 0x28e, 0x210, 0x2c9, 0x210, 0x2c9, 0x278, +0x2fe, 0x278, 0x2fe, 0x2f1, 0x342, 0x2f1, 0x342, 0x2f1, 0x342, 0x42c, 0x448, +0x42c, 0x448, 0x4c4, 0x4ac, 0x4c4, 0x4ac, 0x53b, 0x4f1, 0x53b, 0x4f1, 0x5f8, +0x581, 0x5f8, 0x581, 0x69b, 0x5fa, 0x69b, 0x5fa, 0x97b, 0x8b6, 0x97b, 0x8b6, +0x97b, 0x8b6, 0xb2a, 0xa45, 0xb2a, 0xa45, 0xafa, 0x9fa, 0xafa, 0x9fa, 0xc04, +0xaf0, 0xc04, 0xaf0, 0xc8e, 0xb6a, 0xc8e, 0xb6a, 0xd6f, 0xc40, 0xd6f, 0xc40, +0xd6f, 0xc40, 0xe6d, 0xd36, 0xe6d, 0xd36, 0xe4b, 0xd0e, 0xe4b, 0xd0e, 0xe55, +0xd14, 0xe55, 0xd14, 0xe29, 0xce4, 0xe29, 0xce4, 0xe2a, 0xce1, 0xe2a, 0xce1, +0xdf7, 0xca7, 0xdf7, 0xca7, 0xdf7, 0xca7, 0xdd2, 0xc79, 0xdd2, 0xc79, 0xdf8, +0xc92, 0xdf8, 0xc92, 0xf07, 0xd90, 0xf07, 0xd90, 0x10d3, 0xf45, 0x10d3, 0xf45, +0x1092, 0xee8, 0x1092, 0xee8, 0x1070, 0xea5, 0x1070, 0xea5, 0x1070, 0xea5, 0x10f0, +0xeff, 0x10f0, 0xeff, 0x11c6, 0xfaa, 0x11c6, 0xfaa, 0x12ef, 0x10a4, 0x12ef, 0x10a4, +0x12df, 0x1062, 0x12df, 0x1062, 0x1368, 0x10b8, 0x1368, 0x10b8, 0x1368, 0x10b8, 0x14f2, +0x120f, 0x14f2, 0x120f, 0x1618, 0x1303, 0x1618, 0x1303, 0x1786, 0x1442, 0x1786, 0x1442, +0x192c, 0x15bd, 0x192c, 0x15bd, 0x197f, 0x15ec, 0x197f, 0x15ec, 0x1a94, 0x16e5, 0x1a94, +0x16e5, 0x1a94, 0x16e5, 0x1bb2, 0x17f1, 0x1bb2, 0x17f1, 0x1b5d, 0x1795, 0x1b5d, 0x1795, +0x1b34, 0x176f, 0x1b34, 0x176f, 0x19a6, 0x15f1, 0x19a6, 0x15f1, 0x1822, 0x148b, 0x1822, +0x148b, 0x1773, 0x1407, 0x1773, 0x1407, 0x1773, 0x1407, 0x14c7, 0x1192, 0x14c7, 0x1192, +0x128c, 0xf9a, 0x128c, 0xf9a, 0x1184, 0xee1, 0x1184, 0xee1, 0xf1e, 0xcd4, 0xf1e, +0xcd4, 0xd30, 0xb48, 0xd30, 0xb48, 0xd30, 0xb48, 0xb27, 0x9a7, 0xb27, 0x9a7, +0x7e0, 0x6ce, 0x7e0, 0x6ce, 0x4b7, 0x415, 0x4b7, 0x415, 0x1b9, 0x189, 0x1b9, +0x189, 0xff00, 0xff40, 0xff00, 0xff40, 0xfca5, 0xfd51, 0xfca5, 0xfd51, 0xfca5, 0xfd51, +0xfa98, 0xfbac, 0xfa98, 0xfbac, 0xf840, 0xf9b4, 0xf840, 0xf9b4, 0xf63b, 0xf806, 0xf63b, +0xf806, 0xf45d, 0xf675, 0xf45d, 0xf675, 0xf284, 0xf4dd, 0xf284, 0xf4dd, 0xf1a0, 0xf430, +0xf1a0, 0xf430, 0xf1a0, 0xf430, 0xf07f, 0xf339, 0xf07f, 0xf339, 0xee8d, 0xf165, 0xee8d, +0xf165, 0xed75, 0xf05f, 0xed75, 0xf05f, 0xebfe, 0xeef0, 0xebfe, 0xeef0, 0xea29, 0xed18, +0xea29, 0xed18, 0xea29, 0xed18, 0xea32, 0xed16, 0xea32, 0xed16, 0xe92a, 0xebfb, 0xe92a, +0xebfb, 0xe8b5, 0xeb6e, 0xe8b5, 0xeb6e, 0xe9f4, 0xec91, 0xe9f4, 0xec91, 0xe9da, 0xec58, +0xe9da, 0xec58, 0xea8a, 0xecea, 0xea8a, 0xecea, 0xea8a, 0xecea, 0xeb27, 0xed69, 0xeb27, +0xed69, 0xeb45, 0xed6c, 0xeb45, 0xed6c, 0xec72, 0xee81, 0xec72, 0xee81, 0xed15, 0xef12, +0xed15, 0xef12, 0xedd5, 0xefc5, 0xedd5, 0xefc5, 0xef81, 0xf169, 0xef81, 0xf169, 0xef81, +0xf169, 0xf11b, 0xf302, 0xf11b, 0xf302, 0xf214, 0xf3ff, 0xf214, 0xf3ff, 0xf325, 0xf51b, +0xf325, 0xf51b, 0xf447, 0xf64c, 0xf447, 0xf64c, 0xf505, 0xf71d, 0xf505, 0xf71d, 0xf505, +0xf71d, 0xf619, 0xf845, 0xf619, 0xf845, 0xf5dc, 0xf81f, 0xf5dc, 0xf81f, 0xf542, 0xf79b, +0xf542, 0xf79b, 0xf599, 0xf807, 0xf599, 0xf807, 0xf572, 0xf7f2, 0xf572, 0xf7f2, 0xf5ce, +0xf85a, 0xf5ce, 0xf85a, 0xf5ce, 0xf85a, 0xf681, 0xf915, 0xf681, 0xf915, 0xf72b, 0xf9c1, +0xf72b, 0xf9c1, 0xf84f, 0xfae0, 0xf84f, 0xfae0, 0xf8b3, 0xfb36, 0xf8b3, 0xfb36, 0xf854, +0xfac2, 0xf854, 0xfac2, 0xf975, 0xfbc6, 0xf975, 0xfbc6, 0xf975, 0xfbc6, 0xfa51, 0xfc7e, +0xfa51, 0xfc7e, 0xfb62, 0xfd65, 0xfb62, 0xfd65, 0xfe16, 0xffe9, 0xfe16, 0xffe9, 0xff47, +0xe5, 0xff47, 0xe5, 0x15d, 0x2c5, 0x15d, 0x2c5, 0x15d, 0x2c5, 0x3b6, 0x4e5, +0x3b6, 0x4e5, 0x407, 0x4ff, 0x407, 0x4ff, 0x4ce, 0x591, 0x4ce, 0x591, 0x5ee, +0x680, 0x5ee, 0x680, 0x6bf, 0x726, 0x6bf, 0x726, 0x732, 0x775, 0x732, 0x775, +0x732, 0x775, 0x6b6, 0x6de, 0x6b6, 0x6de, 0x618, 0x62e, 0x618, 0x62e, 0x602, +0x611, 0x602, 0x611, 0x54d, 0x560, 0x54d, 0x560, 0x47a, 0x49c, 0x47a, 0x49c, +0x2f5, 0x332, 0x2f5, 0x332, 0x2f5, 0x332, 0x5c, 0xbe, 0x5c, 0xbe, 0xff3b, +0xffcb, 0xff3b, 0xffcb, 0xfeb9, 0xff80, 0xfeb9, 0xff80, 0xfce6, 0xfdeb, 0xfce6, 0xfdeb, +0xfafe, 0xfc47, 0xfafe, 0xfc47, 0xfafe, 0xfc47, 0xf8b9, 0xfa4a, 0xf8b9, 0xfa4a, 0xf637, +0xf812, 0xf637, 0xf812, 0xf497, 0xf6bc, 0xf497, 0xf6bc, 0xf331, 0xf59f, 0xf331, 0xf59f, +0xf1a8, 0xf45b, 0xf1a8, 0xf45b, 0xf036, 0xf329, 0xf036, 0xf329, 0xf036, 0xf329, 0xef73, +0xf29f, 0xef73, 0xf29f, 0xedcf, 0xf12d, 0xedcf, 0xf12d, 0xec3e, 0xefc6, 0xec3e, 0xefc6, +0xea69, 0xee10, 0xea69, 0xee10, 0xe8bd, 0xec7a, 0xe8bd, 0xec7a, 0xe8c7, 0xec91, 0xe8c7, +0xec91, 0xe8c7, 0xec91, 0xe6f0, 0xeabc, 0xe6f0, 0xeabc, 0xe58c, 0xe951, 0xe58c, 0xe951, +0xe49b, 0xe851, 0xe49b, 0xe851, 0xe37d, 0xe71c, 0xe37d, 0xe71c, 0xe3ce, 0xe750, 0xe3ce, +0xe750, 0xe3ce, 0xe750, 0xe31c, 0xe67c, 0xe31c, 0xe67c, 0xe260, 0xe59a, 0xe260, 0xe59a, +0xe289, 0xe59a, 0xe289, 0xe59a, 0xe327, 0xe60e, 0xe327, 0xe60e, 0xe351, 0xe60e, 0xe351, +0xe60e, 0xe410, 0xe6a3, 0xe410, 0xe6a3, 0xe410, 0xe6a3, 0xe4e1, 0xe74d, 0xe4e1, 0xe74d, +0xe4ad, 0xe6f4, 0xe4ad, 0xe6f4, 0xe5e4, 0xe809, 0xe5e4, 0xe809, 0xe648, 0xe84d, 0xe648, +0xe84d, 0xe60d, 0xe7f7, 0xe60d, 0xe7f7, 0xe6bb, 0xe88c, 0xe6bb, 0xe88c, 0xe6bb, 0xe88c, +0xe716, 0xe8d1, 0xe716, 0xe8d1, 0xe827, 0xe9cd, 0xe827, 0xe9cd, 0xe962, 0xeaf5, 0xe962, +0xeaf5, 0xea6d, 0xebee, 0xea6d, 0xebee, 0xebce, 0xed3c, 0xebce, 0xed3c, 0xebce, 0xed3c, +0xecaf, 0xee08, 0xecaf, 0xee08, 0xebe2, 0xed25, 0xebe2, 0xed25, 0xebc3, 0xeceb, 0xebc3, +0xeceb, 0xec47, 0xed52, 0xec47, 0xed52, 0xebed, 0xecd6, 0xebed, 0xecd6, 0xee2f, 0xeef0, +0xee2f, 0xeef0, 0xee2f, 0xeef0, 0xf008, 0xf09c, 0xf008, 0xf09c, 0xf0b5, 0xf118, 0xf0b5, +0xf118, 0xf35d, 0xf388, 0xf35d, 0xf388, 0xf541, 0xf52f, 0xf541, 0xf52f, 0xf692, 0xf641, +0xf692, 0xf641, 0xf692, 0xf641, 0xf893, 0xf7fe, 0xf893, 0xf7fe, 0xfada, 0xf9fe, 0xfada, +0xf9fe, 0xfca0, 0xfb7c, 0xfca0, 0xfb7c, 0xfe7e, 0xfd12, 0xfe7e, 0xfd12, 0x8f, 0xfedc, +0x8f, 0xfedc, 0x2ac, 0xb4, 0x2ac, 0xb4, 0x2ac, 0xb4, 0x4fe, 0x2c4, 0x4fe, +0x2c4, 0x73e, 0x4c6, 0x73e, 0x4c6, 0xa75, 0x7c6, 0xa75, 0x7c6, 0xce7, 0xa07, +0xce7, 0xa07, 0xe26, 0xb1e, 0xe26, 0xb1e, 0xf8d, 0xc64, 0xf8d, 0xc64, 0xf8d, +0xc64, 0x101c, 0xcda, 0x101c, 0xcda, 0xf90, 0xc3f, 0xf90, 0xc3f, 0xfd3, 0xc7c, +0xfd3, 0xc7c, 0x100c, 0xcb8, 0x100c, 0xcb8, 0xee8, 0xb9f, 0xee8, 0xb9f, 0xee8, +0xb9f, 0xe9c, 0xb66, 0xe9c, 0xb66, 0xec7, 0xbad, 0xec7, 0xbad, 0xd9d, 0xaa3, +0xd9d, 0xaa3, 0xd17, 0xa43, 0xd17, 0xa43, 0xc39, 0x98f, 0xc39, 0x98f, 0xb17, +0x89b, 0xb17, 0x89b, 0xb17, 0x89b, 0xb58, 0x90c, 0xb58, 0x90c, 0xaf4, 0x8d7, +0xaf4, 0x8d7, 0xb1f, 0x932, 0xb1f, 0x932, 0xb67, 0x9a8, 0xb67, 0x9a8, 0xb21, +0x98e, 0xb21, 0x98e, 0xb7e, 0xa15, 0xb7e, 0xa15, 0xb7e, 0xa15, 0xbce, 0xa89, +0xbce, 0xa89, 0xb0c, 0x9e9, 0xb0c, 0x9e9, 0xabb, 0x9b4, 0xabb, 0x9b4, 0xb1f, +0xa30, 0xb1f, 0xa30, 0xad8, 0x9fb, 0xad8, 0x9fb, 0xad8, 0x9fb, 0xab0, 0x9e3, +0xab0, 0x9e3, 0xa47, 0x984, 0xa47, 0x984, 0xa15, 0x95a, 0xa15, 0x95a, 0xb39, +0xa82, 0xb39, 0xa82, 0xc13, 0xb5d, 0xc13, 0xb5d, 0xb84, 0xace, 0xb84, 0xace, +0xb84, 0xace, 0xb80, 0xaca, 0xb80, 0xaca, 0xc0f, 0xb58, 0xc0f, 0xb58, 0xbb6, +0xaff, 0xbb6, 0xaff, 0xc0a, 0xb54, 0xc0a, 0xb54, 0xc0b, 0xb59, 0xc0b, 0xb59, +0xb3b, 0xa8e, 0xb3b, 0xa8e, 0xb3b, 0xa8e, 0xc1e, 0xb78, 0xc1e, 0xb78, 0xcb6, +0xc1b, 0xcb6, 0xc1b, 0xc9d, 0xc10, 0xc9d, 0xc10, 0xba9, 0xb2b, 0xba9, 0xb2b, +0xa9b, 0xa2e, 0xa9b, 0xa2e, 0xa9b, 0xa2e, 0xaa2, 0xa4a, 0xaa2, 0xa4a, 0xa17, +0x9d3, 0xa17, 0x9d3, 0x92f, 0x901, 0x92f, 0x901, 0x8be, 0x8a4, 0x8be, 0x8a4, +0x871, 0x86c, 0x871, 0x86c, 0x7a6, 0x7b4, 0x7a6, 0x7b4, 0x7a6, 0x7b4, 0x698, +0x6b5, 0x698, 0x6b5, 0x545, 0x56f, 0x545, 0x56f, 0x3cd, 0x400, 0x3cd, 0x400, +0x341, 0x377, 0x341, 0x377, 0x40c, 0x441, 0x40c, 0x441, 0x42f, 0x45f, 0x42f, +0x45f, 0x42f, 0x45f, 0x404, 0x42a, 0x404, 0x42a, 0x3ea, 0x400, 0x3ea, 0x400, +0x443, 0x444, 0x443, 0x444, 0x4ba, 0x4a2, 0x4ba, 0x4a2, 0x4ff, 0x4ca, 0x4ff, +0x4ca, 0x4ff, 0x4ca, 0x4fc, 0x4a8, 0x4fc, 0x4a8, 0x557, 0x4e2, 0x557, 0x4e2, +0x632, 0x59a, 0x632, 0x59a, 0x710, 0x656, 0x710, 0x656, 0x83d, 0x762, 0x83d, +0x762, 0x7d9, 0x6df, 0x7d9, 0x6df, 0x7d9, 0x6df, 0x837, 0x722, 0x837, 0x722, +0x87f, 0x753, 0x87f, 0x753, 0x832, 0x6f4, 0x832, 0x6f4, 0x8c9, 0x77f, 0x8c9, +0x77f, 0x890, 0x741, 0x890, 0x741, 0x7bd, 0x670, 0x7bd, 0x670, 0x7bd, 0x670, +0x6eb, 0x5a7, 0x6eb, 0x5a7, 0x548, 0x413, 0x548, 0x413, 0x3f6, 0x2d8, 0x3f6, +0x2d8, 0x268, 0x166, 0x268, 0x166, 0xe2, 0x2, 0xe2, 0x2, 0xe2, 0x2, +0xfff1, 0xff37, 0xfff1, 0xff37, 0xfec6, 0xfe37, 0xfec6, 0xfe37, 0xfd7b, 0xfd18, 0xfd7b, +0xfd18, 0xfb8f, 0xfb59, 0xfb8f, 0xfb59, 0xf9c6, 0xf9be, 0xf9c6, 0xf9be, 0xf723, 0xf746, +0xf723, 0xf746, 0xf723, 0xf746, 0xf632, 0xf67d, 0xf632, 0xf67d, 0xf541, 0xf5b1, 0xf541, +0xf5b1, 0xf3d0, 0xf460, 0xf3d0, 0xf460, 0xf314, 0xf3bd, 0xf314, 0xf3bd, 0xf250, 0xf30b, +0xf250, 0xf30b, 0xf26c, 0xf332, 0xf26c, 0xf332, 0xf26c, 0xf332, 0xf2ae, 0xf377, 0xf2ae, +0xf377, 0xf2d4, 0xf397, 0xf2d4, 0xf397, 0xf243, 0xf2f9, 0xf243, 0xf2f9, 0xf234, 0xf2d6, +0xf234, 0xf2d6, 0xf27f, 0xf306, 0xf27f, 0xf306, 0xf27f, 0xf306, 0xf2cc, 0xf331, 0xf2cc, +0xf331, 0xf366, 0xf3a5, 0xf366, 0xf3a5, 0xf3e7, 0xf3fb, 0xf3e7, 0xf3fb, 0xf471, 0xf458, +0xf471, 0xf458, 0xf5ac, 0xf565, 0xf5ac, 0xf565, 0xf718, 0xf6a1, 0xf718, 0xf6a1, 0xf718, +0xf6a1, 0xf8a0, 0xf7fc, 0xf8a0, 0xf7fc, 0xf95c, 0xf88d, 0xf95c, 0xf88d, 0xfb4a, 0xfa52, +0xfb4a, 0xfa52, 0xfdbc, 0xfca1, 0xfdbc, 0xfca1, 0xfe87, 0xfd4d, 0xfe87, 0xfd4d, 0xffb9, +0xfe67, 0xffb9, 0xfe67, 0xffb9, 0xfe67, 0xb6, 0xff52, 0xb6, 0xff52, 0x14e, 0xffde, +0x14e, 0xffde, 0x2a7, 0x131, 0x2a7, 0x131, 0x49f, 0x328, 0x49f, 0x328, 0x5b4, +0x441, 0x5b4, 0x441, 0x5b4, 0x441, 0x63a, 0x4d0, 0x63a, 0x4d0, 0x6b5, 0x558, +0x6b5, 0x558, 0x6b8, 0x569, 0x6b8, 0x569, 0x697, 0x558, 0x697, 0x558, 0x745, +0x615, 0x745, 0x615, 0x72f, 0x60e, 0x72f, 0x60e, 0x72f, 0x60e, 0x746, 0x62f, +0x746, 0x62f, 0x6fc, 0x5ee, 0x6fc, 0x5ee, 0x753, 0x648, 0x753, 0x648, 0x8df, +0x7d4, 0x8df, 0x7d4, 0x8d1, 0x7be, 0x8d1, 0x7be, 0x8f6, 0x7d6, 0x8f6, 0x7d6, +0x8f6, 0x7d6, 0x922, 0x7ef, 0x922, 0x7ef, 0x9af, 0x862, 0x9af, 0x862, 0xa04, +0x899, 0xa04, 0x899, 0xaf6, 0x968, 0xaf6, 0x968, 0xccf, 0xb1b, 0xccf, 0xb1b, +0xccf, 0xb1b, 0xef2, 0xd14, 0xef2, 0xd14, 0x115c, 0xf53, 0x115c, 0xf53, 0x1228, +0xff4, 0x1228, 0xff4, 0x12e9, 0x108c, 0x12e9, 0x108c, 0x1459, 0x11d6, 0x1459, 0x11d6, +0x157b, 0x12d5, 0x157b, 0x12d5, 0x157b, 0x12d5, 0x16d1, 0x140f, 0x16d1, 0x140f, 0x16f4, +0x141d, 0x16f4, 0x141d, 0x17bf, 0x14db, 0x17bf, 0x14db, 0x1880, 0x1597, 0x1880, 0x1597, +0x1906, 0x1622, 0x1906, 0x1622, 0x1906, 0x1622, 0x1977, 0x16a1, 0x1977, 0x16a1, 0x1769, +0x14ab, 0x1769, 0x14ab, 0x16e4, 0x1447, 0x16e4, 0x1447, 0x162b, 0x13b7, 0x162b, 0x13b7, +0x1590, 0x134e, 0x1590, 0x134e, 0x1432, 0x1229, 0x1432, 0x1229, 0x1432, 0x1229, 0x11b9, +0xfed, 0x11b9, 0xfed, 0xfbc, 0xe32, 0xfbc, 0xe32, 0xe53, 0xd0d, 0xe53, 0xd0d, +0xe87, 0xd86, 0xe87, 0xd86, 0xddd, 0xd1f, 0xddd, 0xd1f, 0xd31, 0xcb4, 0xd31, +0xcb4, 0xd31, 0xcb4, 0xccd, 0xc8c, 0xccd, 0xc8c, 0xc9d, 0xc92, 0xc9d, 0xc92, +0xc0f, 0xc34, 0xc0f, 0xc34, 0xab3, 0xaff, 0xab3, 0xaff, 0x934, 0x99e, 0x934, +0x99e, 0x934, 0x99e, 0x8a1, 0x920, 0x8a1, 0x920, 0x821, 0x8ac, 0x821, 0x8ac, +0x6e0, 0x76c, 0x6e0, 0x76c, 0x522, 0x5a7, 0x522, 0x5a7, 0x411, 0x486, 0x411, +0x486, 0x372, 0x3d0, 0x372, 0x3d0, 0x372, 0x3d0, 0x4d8, 0x51a, 0x4d8, 0x51a, +0x562, 0x582, 0x562, 0x582, 0x4e0, 0x4dc, 0x4e0, 0x4dc, 0x663, 0x638, 0x663, +0x638, 0x650, 0x5ff, 0x650, 0x5ff, 0x77d, 0x708, 0x77d, 0x708, 0x77d, 0x708, +0x793, 0x6fc, 0x793, 0x6fc, 0x789, 0x6d5, 0x789, 0x6d5, 0x828, 0x75d, 0x828, +0x75d, 0x805, 0x72a, 0x805, 0x72a, 0x8f7, 0x813, 0x8f7, 0x813, 0x8f7, 0x813, +0x87d, 0x799, 0x87d, 0x799, 0x7a3, 0x6c6, 0x7a3, 0x6c6, 0x765, 0x698, 0x765, +0x698, 0x6f6, 0x641, 0x6f6, 0x641, 0x74d, 0x6b7, 0x74d, 0x6b7, 0x6be, 0x64c, +0x6be, 0x64c, 0x6be, 0x64c, 0x5ea, 0x5a3, 0x5ea, 0x5a3, 0x4e2, 0x4c9, 0x4e2, +0x4c9, 0x325, 0x33d, 0x325, 0x33d, 0x251, 0x29a, 0x251, 0x29a, 0xff82, 0xfffd, +0xff82, 0xfffd, 0xfdd8, 0xfe82, 0xfdd8, 0xfe82, 0xfdd8, 0xfe82, 0xfbb3, 0xfc89, 0xfbb3, +0xfc89, 0xf9ea, 0xfae9, 0xf9ea, 0xfae9, 0xf9bd, 0xfade, 0xf9bd, 0xfade, 0xf876, 0xf9b3, +0xf876, 0xf9b3, 0xf77b, 0xf8cd, 0xf77b, 0xf8cd, 0xf77b, 0xf8cd, 0xf6f9, 0xf859, 0xf6f9, +0xf859, 0xf667, 0xf7ce, 0xf667, 0xf7ce, 0xf60e, 0xf774, 0xf60e, 0xf774, 0xf6ce, 0xf82c, +0xf6ce, 0xf82c, 0xf5bc, 0xf70d, 0xf5bc, 0xf70d, 0xf5a7, 0xf6e5, 0xf5a7, 0xf6e5, 0xf5a7, +0xf6e5, 0xf684, 0xf7ac, 0xf684, 0xf7ac, 0xf746, 0xf855, 0xf746, 0xf855, 0xf9c4, 0xfab9, +0xf9c4, 0xfab9, 0xfabf, 0xfb9a, 0xfabf, 0xfb9a, 0xfae6, 0xfba7, 0xfae6, 0xfba7, 0xfb9f, +0xfc4b, 0xfb9f, 0xfc4b, 0xfb9f, 0xfc4b, 0xfb9a, 0xfc33, 0xfb9a, 0xfc33, 0xfbc9, 0xfc55, +0xfbc9, 0xfc55, 0xfaf4, 0xfb78, 0xfaf4, 0xfb78, 0xfb48, 0xfbcc, 0xfb48, 0xfbcc, 0xfb16, +0xfba0, 0xfb16, 0xfba0, 0xfb16, 0xfba0, 0xfa6e, 0xfb05, 0xfa6e, 0xfb05, 0xfa31, 0xfadd, +0xfa31, 0xfadd, 0xfa23, 0xfaea, 0xfa23, 0xfaea, 0xfac1, 0xfbaa, 0xfac1, 0xfbaa, 0xf9f2, +0xfb01, 0xf9f2, 0xfb01, 0xfa4a, 0xfb85, 0xfa4a, 0xfb85, 0xfa4a, 0xfb85, 0xf86e, 0xf9d6, +0xf86e, 0xf9d6, 0xf71b, 0xf8b3, 0xf71b, 0xf8b3, 0xf5e2, 0xf7a9, 0xf5e2, 0xf7a9, 0xf480, +0xf675, 0xf480, 0xf675, 0xf43a, 0xf65c, 0xf43a, 0xf65c, 0xf479, 0xf6c2, 0xf479, 0xf6c2, +0xf479, 0xf6c2, 0xf4da, 0xf746, 0xf4da, 0xf746, 0xf43d, 0xf6c5, 0xf43d, 0xf6c5, 0xf3f7, +0xf694, 0xf3f7, 0xf694, 0xf300, 0xf5a9, 0xf300, 0xf5a9, 0xf2cf, 0xf57d, 0xf2cf, 0xf57d, +0xf2cf, 0xf57d, 0xf24b, 0xf4f5, 0xf24b, 0xf4f5, 0xf178, 0xf415, 0xf178, 0xf415, 0xf143, +0xf3cc, 0xf143, 0xf3cc, 0xf190, 0xf3fd, 0xf190, 0xf3fd, 0xf21c, 0xf467, 0xf21c, 0xf467, +0xf2cd, 0xf4f0, 0xf2cd, 0xf4f0, 0xf2cd, 0xf4f0, 0xf1cf, 0xf3c6, 0xf1cf, 0xf3c6, 0xf1e4, +0xf3ac, 0xf1e4, 0xf3ac, 0xf1a3, 0xf33b, 0xf1a3, 0xf33b, 0xf1d7, 0xf33f, 0xf1d7, 0xf33f, +0xf2d6, 0xf40e, 0xf2d6, 0xf40e, 0xf240, 0xf34c, 0xf240, 0xf34c, 0xf240, 0xf34c, 0xf20c, +0xf2f0, 0xf20c, 0xf2f0, 0xf318, 0xf3d8, 0xf318, 0xf3d8, 0xf55b, 0xf5fe, 0xf55b, 0xf5fe, +0xf5bf, 0xf64a, 0xf5bf, 0xf64a, 0xf698, 0xf714, 0xf698, 0xf714, 0xf698, 0xf714, 0xf725, +0xf799, 0xf725, 0xf799, 0xf760, 0xf7d3, 0xf760, 0xf7d3, 0xf7e1, 0xf85a, 0xf7e1, 0xf85a, +0xf7fc, 0xf882, 0xf7fc, 0xf882, 0xf712, 0xf7ab, 0xf712, 0xf7ab, 0xf680, 0xf732, 0xf680, +0xf732, 0xf680, 0xf732, 0xf60f, 0xf6dd, 0xf60f, 0xf6dd, 0xf5fd, 0xf6ea, 0xf5fd, 0xf6ea, +0xf58b, 0xf69a, 0xf58b, 0xf69a, 0xf4cc, 0xf5fc, 0xf4cc, 0xf5fc, 0xf4a8, 0xf5f9, 0xf4a8, +0xf5f9, 0xf3ea, 0xf55b, 0xf3ea, 0xf55b, 0xf3ea, 0xf55b, 0xf31b, 0xf4a9, 0xf31b, 0xf4a9, +0xf241, 0xf3e8, 0xf241, 0xf3e8, 0xf2dc, 0xf499, 0xf2dc, 0xf499, 0xf21b, 0xf3e9, 0xf21b, +0xf3e9, 0xf263, 0xf43d, 0xf263, 0xf43d, 0xf263, 0xf43d, 0xf254, 0xf435, 0xf254, 0xf435, +0xf1e9, 0xf3cc, 0xf1e9, 0xf3cc, 0xf245, 0xf424, 0xf245, 0xf424, 0xf284, 0xf45c, 0xf284, +0xf45c, 0xf2f4, 0xf4c2, 0xf2f4, 0xf4c2, 0xf357, 0xf518, 0xf357, 0xf518, 0xf357, 0xf518, +0xf3f8, 0xf5aa, 0xf3f8, 0xf5aa, 0xf46a, 0xf60d, 0xf46a, 0xf60d, 0xf5e0, 0xf772, 0xf5e0, +0xf772, 0xf71c, 0xf89f, 0xf71c, 0xf89f, 0xf7d3, 0xf94a, 0xf7d3, 0xf94a, 0xf817, 0xf984, +0xf817, 0xf984, 0xf817, 0xf984, 0xf7a3, 0xf90a, 0xf7a3, 0xf90a, 0xf659, 0xf7bd, 0xf659, +0xf7bd, 0xf57d, 0xf6e4, 0xf57d, 0xf6e4, 0xf497, 0xf604, 0xf497, 0xf604, 0xf465, 0xf5dc, +0xf465, 0xf5dc, 0xf465, 0xf5dc, 0xf3a1, 0xf526, 0xf3a1, 0xf526, 0xf305, 0xf49c, 0xf305, +0xf49c, 0xf326, 0xf4d2, 0xf326, 0xf4d2, 0xf38e, 0xf551, 0xf38e, 0xf551, 0xf324, 0xf500, +0xf324, 0xf500, 0xf2ab, 0xf49f, 0xf2ab, 0xf49f, 0xf2ab, 0xf49f, 0xf17d, 0xf388, 0xf17d, +0xf388, 0xefbf, 0xf1e0, 0xefbf, 0xf1e0, 0xefb2, 0xf1e4, 0xefb2, 0xf1e4, 0xef5f, 0xf19e, +0xef5f, 0xf19e, 0xefe4, 0xf22b, 0xefe4, 0xf22b, 0xefe4, 0xf22b, 0xef4f, 0xf197, 0xef4f, +0xf197, 0xf0aa, 0xf2ed, 0xf0aa, 0xf2ed, 0xf185, 0xf3bc, 0xf185, 0xf3bc, 0xf1f9, 0xf41c, +0xf1f9, 0xf41c, 0xf32a, 0xf530, 0xf32a, 0xf530, 0xf2ed, 0xf4cf, 0xf2ed, 0xf4cf, 0xf2ed, +0xf4cf, 0xf2fc, 0xf4b3, 0xf2fc, 0xf4b3, 0xf34a, 0xf4ce, 0xf34a, 0xf4ce, 0xf348, 0xf493, +0xf348, 0xf493, 0xf388, 0xf496, 0xf388, 0xf496, 0xf4a5, 0xf571, 0xf4a5, 0xf571, 0xf5f8, +0xf680, 0xf5f8, 0xf680, 0xf5f8, 0xf680, 0xf7ff, 0xf840, 0xf7ff, 0xf840, 0xf9ab, 0xf9a5, +0xf9ab, 0xf9a5, 0xfc41, 0xfbf4, 0xfc41, 0xfbf4, 0xfde7, 0xfd55, 0xfde7, 0xfd55, 0xff29, +0xfe55, 0xff29, 0xfe55, 0xff29, 0xfe55, 0xffe4, 0xfed1, 0xffe4, 0xfed1, 0x124, 0xffd8, +0x124, 0xffd8, 0x22c, 0xac, 0x22c, 0xac, 0x2fc, 0x14d, 0x2fc, 0x14d, 0x457, +0x27f, 0x457, 0x27f, 0x574, 0x379, 0x574, 0x379, 0x574, 0x379, 0x6a0, 0x489, +0x6a0, 0x489, 0x829, 0x5fa, 0x829, 0x5fa, 0x94e, 0x70d, 0x94e, 0x70d, 0x952, +0x703, 0x952, 0x703, 0xace, 0x875, 0xace, 0x875, 0xb35, 0x8d5, 0xb35, 0x8d5, +0xb35, 0x8d5, 0xc77, 0xa12, 0xc77, 0xa12, 0xd54, 0xaeb, 0xd54, 0xaeb, 0xe05, +0xb9a, 0xe05, 0xb9a, 0xeab, 0xc3d, 0xeab, 0xc3d, 0xf9f, 0xd2e, 0xf9f, 0xd2e, +0xf9f, 0xd2e, 0x1065, 0xdef, 0x1065, 0xdef, 0x1053, 0xdd8, 0x1053, 0xdd8, 0x1150, +0xece, 0x1150, 0xece, 0x1230, 0xfa5, 0x1230, 0xfa5, 0x1291, 0xffb, 0x1291, 0xffb, +0x132f, 0x108f, 0x132f, 0x108f, 0x132f, 0x108f, 0x1472, 0x11c7, 0x1472, 0x11c7, 0x1511, +0x125a, 0x1511, 0x125a, 0x16a5, 0x13e5, 0x16a5, 0x13e5, 0x1770, 0x14a8, 0x1770, 0x14a8, +0x184b, 0x157f, 0x184b, 0x157f, 0x1872, 0x15a4, 0x1872, 0x15a4, 0x1872, 0x15a4, 0x198a, +0x16c1, 0x198a, 0x16c1, 0x1a59, 0x1798, 0x1a59, 0x1798, 0x1a11, 0x1760, 0x1a11, 0x1760, +0x194c, 0x16b1, 0x194c, 0x16b1, 0x1963, 0x16e5, 0x1963, 0x16e5, 0x1963, 0x16e5, 0x19de, +0x1786, 0x19de, 0x1786, 0x1887, 0x165b, 0x1887, 0x165b, 0x183b, 0x1643, 0x183b, 0x1643, +0x1616, 0x1459, 0x1616, 0x1459, 0x145a, 0x12df, 0x145a, 0x12df, 0x12ef, 0x11ba, 0x12ef, +0x11ba, 0x12ef, 0x11ba, 0x108e, 0xfa5, 0x108e, 0xfa5, 0xdcb, 0xd30, 0xdcb, 0xd30, +0xbcb, 0xb81, 0xbcb, 0xb81, 0xa16, 0xa1d, 0xa16, 0xa1d, 0x8a2, 0x8fa, 0x8a2, +0x8fa, 0x6a3, 0x749, 0x6a3, 0x749, 0x6a3, 0x749, 0x401, 0x4f2, 0x401, 0x4f2, +0x20d, 0x343, 0x20d, 0x343, 0x48, 0x1bd, 0x48, 0x1bd, 0xfec9, 0x77, 0xfec9, +0x77, 0xfd4d, 0xff2a, 0xfd4d, 0xff2a, 0xfd4d, 0xff2a, 0xfba8, 0xfdac, 0xfba8, 0xfdac, +0xfaf5, 0xfd16, 0xfaf5, 0xfd16, 0xfaf5, 0xfd2a, 0xfaf5, 0xfd2a, 0xfa39, 0xfc78, 0xfa39, +0xfc78, 0xf988, 0xfbc8, 0xf988, 0xfbc8, 0xf856, 0xfa8d, 0xf856, 0xfa8d, 0xf856, 0xfa8d, +0xf776, 0xf99e, 0xf776, 0xf99e, 0xf5fb, 0xf80a, 0xf5fb, 0xf80a, 0xf672, 0xf863, 0xf672, +0xf863, 0xf4ed, 0xf6bb, 0xf4ed, 0xf6bb, 0xf38b, 0xf531, 0xf38b, 0xf531, 0xf3ab, 0xf527, +0xf3ab, 0xf527, 0xf3ab, 0xf527, 0xf2ef, 0xf440, 0xf2ef, 0xf440, 0xf32b, 0xf450, 0xf32b, +0xf450, 0xf3f3, 0xf4ed, 0xf3f3, 0xf4ed, 0xf47a, 0xf54b, 0xf47a, 0xf54b, 0xf448, 0xf4f2, +0xf448, 0xf4f2, 0xf448, 0xf4f2, 0xf4e4, 0xf56b, 0xf4e4, 0xf56b, 0xf41a, 0xf481, 0xf41a, +0xf481, 0xf567, 0xf5b2, 0xf567, 0xf5b2, 0xf600, 0xf634, 0xf600, 0xf634, 0xf6d2, 0xf6f3, +0xf6d2, 0xf6f3, 0xf74f, 0xf75f, 0xf74f, 0xf75f, 0xf74f, 0xf75f, 0xf7a2, 0xf7a5, 0xf7a2, +0xf7a5, 0xf873, 0xf86c, 0xf873, 0xf86c, 0xf83d, 0xf82d, 0xf83d, 0xf82d, 0xf70a, 0xf6f2, +0xf70a, 0xf6f2, 0xf5af, 0xf58f, 0xf5af, 0xf58f, 0xf57f, 0xf555, 0xf57f, 0xf555, 0xf57f, +0xf555, 0xf443, 0xf40f, 0xf443, 0xf40f, 0xf41a, 0xf3d8, 0xf41a, 0xf3d8, 0xf419, 0xf3c6, +0xf419, 0xf3c6, 0xf4f9, 0xf491, 0xf4f9, 0xf491, 0xf5ef, 0xf56e, 0xf5ef, 0xf56e, 0xf5ef, +0xf56e, 0xf7ca, 0xf72c, 0xf7ca, 0xf72c, 0xf943, 0xf883, 0xf943, 0xf883, 0xfa1a, 0xf935, +0xfa1a, 0xf935, 0xfa27, 0xf919, 0xfa27, 0xf919, 0xfb49, 0xfa10, 0xfb49, 0xfa10, 0xfc92, +0xfb2b, 0xfc92, 0xfb2b, 0xfc92, 0xfb2b, 0xfd71, 0xfbdc, 0xfd71, 0xfbdc, 0xfebb, 0xfcf8, +0xfebb, 0xfcf8, 0xffb6, 0xfdc6, 0xffb6, 0xfdc6, 0x197, 0xff7d, 0x197, 0xff7d, 0x3b8, +0x179, 0x3b8, 0x179, 0x59e, 0x33f, 0x59e, 0x33f, 0x59e, 0x33f, 0x6f8, 0x480, +0x6f8, 0x480, 0x932, 0x6a9, 0x932, 0x6a9, 0x976, 0x6e5, 0x976, 0x6e5, 0xafa, +0x869, 0xafa, 0x869, 0xb23, 0x89d, 0xb23, 0x89d, 0xb23, 0x89d, 0xb6e, 0x8fd, +0xb6e, 0x8fd, 0xbfe, 0x9ab, 0xbfe, 0x9ab, 0xb22, 0x8f8, 0xb22, 0x8f8, 0xaab, +0x8b2, 0xaab, 0x8b2, 0x9f8, 0x838, 0x9f8, 0x838, 0x948, 0x7c9, 0x948, 0x7c9, +0x948, 0x7c9, 0x7ec, 0x6b3, 0x7ec, 0x6b3, 0x7c6, 0x6d7, 0x7c6, 0x6d7, 0x6c1, +0x61e, 0x6c1, 0x61e, 0x588, 0x532, 0x588, 0x532, 0x466, 0x45d, 0x466, 0x45d, +0x3de, 0x41e, 0x3de, 0x41e, 0x3de, 0x41e, 0x3a0, 0x424, 0x3a0, 0x424, 0x397, +0x45a, 0x397, 0x45a, 0x362, 0x45c, 0x362, 0x45c, 0x2c3, 0x3ec, 0x2c3, 0x3ec, +0x178, 0x2c6, 0x178, 0x2c6, 0x178, 0x2c6, 0x17f, 0x2e7, 0x17f, 0x2e7, 0xdc, +0x253, 0xdc, 0x253, 0x47, 0x1c3, 0x47, 0x1c3, 0x86, 0x1fc, 0x86, 0x1fc, +0x73, 0x1d9, 0x73, 0x1d9, 0xe2, 0x22f, 0xe2, 0x22f, 0xe2, 0x22f, 0x1d5, +0x300, 0x1d5, 0x300, 0x39c, 0x49d, 0x39c, 0x49d, 0x327, 0x3f9, 0x327, 0x3f9, +0x4aa, 0x548, 0x4aa, 0x548, 0x66f, 0x6d5, 0x66f, 0x6d5, 0x66f, 0x6d5, 0x70e, +0x73c, 0x70e, 0x73c, 0x799, 0x78e, 0x799, 0x78e, 0x8bc, 0x87a, 0x8bc, 0x87a, +0xa54, 0x9de, 0xa54, 0x9de, 0xb8c, 0xae5, 0xb8c, 0xae5, 0xc0d, 0xb3a, 0xc0d, +0xb3a, 0xc0d, 0xb3a, 0xdc2, 0xcc8, 0xdc2, 0xcc8, 0xe45, 0xd2a, 0xe45, 0xd2a, +0xee7, 0xdb2, 0xee7, 0xdb2, 0xfc6, 0xe7c, 0xfc6, 0xe7c, 0xf49, 0xdee, 0xf49, +0xdee, 0x1105, 0xfa0, 0x1105, 0xfa0, 0x1105, 0xfa0, 0x1115, 0xfa9, 0x1115, 0xfa9, +0x126f, 0x10ff, 0x126f, 0x10ff, 0x1330, 0x11bf, 0x1330, 0x11bf, 0x140a, 0x1297, 0x140a, +0x1297, 0x141c, 0x12a7, 0x141c, 0x12a7, 0x141c, 0x12a7, 0x1416, 0x129e, 0x1416, 0x129e, +0x135e, 0x11e1, 0x135e, 0x11e1, 0x1339, 0x11b2, 0x1339, 0x11b2, 0x130c, 0x1178, 0x130c, +0x1178, 0x1197, 0xff1, 0x1197, 0xff1, 0x12ab, 0x10ed, 0x12ab, 0x10ed, 0x12ab, 0x10ed, +0x12d1, 0x10f6, 0x12d1, 0x10f6, 0x1414, 0x1217, 0x1414, 0x1217, 0x1354, 0x1130, 0x1354, +0x1130, 0x1381, 0x1133, 0x1381, 0x1133, 0x142b, 0x11af, 0x142b, 0x11af, 0x1392, 0x10e7, +0x1392, 0x10e7, 0x1392, 0x10e7, 0x14d9, 0x11fe, 0x14d9, 0x11fe, 0x15b6, 0x12ad, 0x15b6, +0x12ad, 0x1548, 0x1213, 0x1548, 0x1213, 0x165a, 0x12fe, 0x165a, 0x12fe, 0x17a1, 0x1425, +0x17a1, 0x1425, 0x17a1, 0x1425, 0x193c, 0x15a7, 0x193c, 0x15a7, 0x1aac, 0x1707, 0x1aac, +0x1707, 0x1a3a, 0x168f, 0x1a3a, 0x168f, 0x19e2, 0x163e, 0x19e2, 0x163e, 0x19b8, 0x1626, +0x19b8, 0x1626, 0x17bd, 0x144a, 0x17bd, 0x144a, 0x17bd, 0x144a, 0x1669, 0x1321, 0x1669, +0x1321, 0x15b8, 0x12a8, 0x15b8, 0x12a8, 0x12dd, 0x1011, 0x12dd, 0x1011, 0x1399, 0x111c, +0x1399, 0x111c, 0x12c4, 0x10a0, 0x12c4, 0x10a0, 0x1145, 0xf83, 0x1145, 0xf83, 0x1145, +0xf83, 0xe82, 0xd28, 0xe82, 0xd28, 0xbf9, 0xb0c, 0xbf9, 0xb0c, 0x915, 0x898, +0x915, 0x898, 0x5a1, 0x596, 0x5a1, 0x596, 0x405, 0x46a, 0x405, 0x46a, 0x405, +0x46a, 0x24, 0xf5, 0x24, 0xf5, 0xfede, 0x18, 0xfede, 0x18, 0xfd95, 0xff2f, +0xfd95, 0xff2f, 0xfc7a, 0xfe6e, 0xfc7a, 0xfe6e, 0xfad3, 0xfd15, 0xfad3, 0xfd15, 0xf8a0, +0xfb28, 0xf8a0, 0xfb28, 0xf8a0, 0xfb28, 0xf5c7, 0xf888, 0xf5c7, 0xf888, 0xf30f, 0xf5ff, +0xf30f, 0xf5ff, 0xf0bc, 0xf3cf, 0xf0bc, 0xf3cf, 0xee7b, 0xf1a6, 0xee7b, 0xf1a6, 0xed37, +0xf070, 0xed37, 0xf070, 0xeb8c, 0xeec9, 0xeb8c, 0xeec9, 0xeb8c, 0xeec9, 0xec08, 0xef42, +0xec08, 0xef42, 0xecb6, 0xefe5, 0xecb6, 0xefe5, 0xeba4, 0xeec2, 0xeba4, 0xeec2, 0xecc0, +0xefca, 0xecc0, 0xefca, 0xebab, 0xee9f, 0xebab, 0xee9f, 0xebab, 0xee9f, 0xeb08, 0xede5, +0xeb08, 0xede5, 0xee0c, 0xf0d2, 0xee0c, 0xf0d2, 0xeda4, 0xf055, 0xeda4, 0xf055, 0xee3b, +0xf0d9, 0xee3b, 0xf0d9, 0xefd0, 0xf261, 0xefd0, 0xf261, 0xf08d, 0xf313, 0xf08d, 0xf313, +0xf08d, 0xf313, 0xf140, 0xf3c1, 0xf140, 0xf3c1, 0xf342, 0xf5c2, 0xf342, 0xf5c2, 0xf3ef, +0xf672, 0xf3ef, 0xf672, 0xf47c, 0xf706, 0xf47c, 0xf706, 0xf567, 0xf7fb, 0xf567, 0xf7fb, +0xf74b, 0xf9ea, 0xf74b, 0xf9ea, 0xf74b, 0xf9ea, 0xf86b, 0xfb17, 0xf86b, 0xfb17, 0xf771, +0xfa29, 0xf771, 0xfa29, 0xf732, 0xf9f3, 0xf732, 0xf9f3, 0xf817, 0xfadf, 0xf817, 0xfadf, +0xf8b5, 0xfb7f, 0xf8b5, 0xfb7f, 0xf8b5, 0xfb7f, 0xf6dd, 0xf9a4, 0xf6dd, 0xf9a4, 0xf892, +0xfb4e, 0xf892, 0xfb4e, 0xf772, 0xfa1c, 0xf772, 0xfa1c, 0xf762, 0xf9f2, 0xf762, 0xf9f2, +0xf851, 0xfabe, 0xf851, 0xfabe, 0xf7ef, 0xfa32, 0xf7ef, 0xfa32, 0xf7ef, 0xfa32, 0xf88d, +0xfa9c, 0xf88d, 0xfa9c, 0xf9bc, 0xfb90, 0xf9bc, 0xfb90, 0xfc3a, 0xfdcc, 0xfc3a, 0xfdcc, +0xfc84, 0xfdd0, 0xfc84, 0xfdd0, 0xfe84, 0xff84, 0xfe84, 0xff84, 0x28, 0xda, 0x28, +0xda, 0x28, 0xda, 0xff3b, 0xff9f, 0xff3b, 0xff9f, 0xfff5, 0xc, 0xfff5, 0xc, +0xde, 0xaa, 0xde, 0xaa, 0x3e, 0xffc5, 0x3e, 0xffc5, 0x25e, 0x1a7, 0x25e, +0x1a7, 0x25e, 0x1a7, 0x29e, 0x1b0, 0x29e, 0x1b0, 0x34a, 0x22f, 0x34a, 0x22f, +0x3f3, 0x2b6, 0x3f3, 0x2b6, 0x331, 0x1de, 0x331, 0x1de, 0x1cc, 0x70, 0x1cc, +0x70, 0x4a, 0xfef1, 0x4a, 0xfef1, 0x4a, 0xfef1, 0xff00, 0xfdb7, 0xff00, 0xfdb7, +0xfd5f, 0xfc32, 0xfd5f, 0xfc32, 0xfba1, 0xfa9b, 0xfba1, 0xfa9b, 0xf9ac, 0xf8d8, 0xf9ac, +0xf8d8, 0xfaea, 0xfa52, 0xfaea, 0xfa52, 0xf91b, 0xf8c5, 0xf91b, 0xf8c5, 0xf91b, 0xf8c5, +0xf766, 0xf759, 0xf766, 0xf759, 0xf5af, 0xf5f0, 0xf5af, 0xf5f0, 0xf2e3, 0xf372, 0xf2e3, +0xf372, 0xf226, 0xf304, 0xf226, 0xf304, 0xf0cc, 0xf1f8, 0xf0cc, 0xf1f8, 0xf0cc, 0xf1f8, +0xeefc, 0xf072, 0xeefc, 0xf072, 0xeea5, 0xf061, 0xeea5, 0xf061, 0xed16, 0xef11, 0xed16, +0xef11, 0xed0f, 0xef42, 0xed0f, 0xef42, 0xed7a, 0xefdc, 0xed7a, 0xefdc, 0xeb5b, 0xede3, +0xeb5b, 0xede3, 0xeb5b, 0xede3, 0xe944, 0xebea, 0xe944, 0xebea, 0xe783, 0xea3e, 0xe783, +0xea3e, 0xe73f, 0xea06, 0xe73f, 0xea06, 0xe5d5, 0xe89e, 0xe5d5, 0xe89e, 0xe586, 0xe84c, +0xe586, 0xe84c, 0xe493, 0xe74e, 0xe493, 0xe74e, 0xe493, 0xe74e, 0xe505, 0xe7b0, 0xe505, +0xe7b0, 0xe611, 0xe8a9, 0xe611, 0xe8a9, 0xe601, 0xe882, 0xe601, 0xe882, 0xe6af, 0xe918, +0xe6af, 0xe918, 0xe64f, 0xe8a0, 0xe64f, 0xe8a0, 0xe64f, 0xe8a0, 0xe532, 0xe76c, 0xe532, +0xe76c, 0xe668, 0xe88c, 0xe668, 0xe88c, 0xe6c0, 0xe8d1, 0xe6c0, 0xe8d1, 0xe70d, 0xe90e, +0xe70d, 0xe90e, 0xe985, 0xeb7a, 0xe985, 0xeb7a, 0xea15, 0xec02, 0xea15, 0xec02, 0xea15, +0xec02, 0xec2a, 0xee12, 0xec2a, 0xee12, 0xed78, 0xef5e, 0xed78, 0xef5e, 0xee3c, 0xf022, +0xee3c, 0xf022, 0xefb5, 0xf19d, 0xefb5, 0xf19d, 0xef3b, 0xf125, 0xef3b, 0xf125, 0xef3b, +0xf125, 0xee42, 0xf02e, 0xee42, 0xf02e, 0xf074, 0xf25e, 0xf074, 0xf25e, 0xf19f, 0xf386, +0xf19f, 0xf386, 0xf295, 0xf474, 0xf295, 0xf474, 0xf24b, 0xf41c, 0xf24b, 0xf41c, 0xf28e, +0xf44a, 0xf28e, 0xf44a, 0xf28e, 0xf44a, 0xf433, 0xf5d2, 0xf433, 0xf5d2, 0xf3d8, 0xf552, +0xf3d8, 0xf552, 0xf3ce, 0xf519, 0xf3ce, 0xf519, 0xf3a9, 0xf4be, 0xf3a9, 0xf4be, 0xf4f6, +0xf5cb, 0xf4f6, 0xf5cb, 0xf55e, 0xf5ea, 0xf55e, 0xf5ea, 0xf55e, 0xf5ea, 0xf786, 0xf7c1, +0xf786, 0xf7c1, 0xf91b, 0xf8fe, 0xf91b, 0xf8fe, 0xfb89, 0xfb0e, 0xfb89, 0xfb0e, 0xfd66, +0xfc89, 0xfd66, 0xfc89, 0xfef9, 0xfdb7, 0xfef9, 0xfdb7, 0xfef9, 0xfdb7, 0x1d5, 0x2e, +0x1d5, 0x2e, 0x377, 0x16b, 0x377, 0x16b, 0x530, 0x2c2, 0x530, 0x2c2, 0x6c0, +0x3f5, 0x6c0, 0x3f5, 0x8af, 0x58e, 0x8af, 0x58e, 0xa8b, 0x71c, 0xa8b, 0x71c, +0xa8b, 0x71c, 0xb8a, 0x7d7, 0xb8a, 0x7d7, 0xbbb, 0x7cf, 0xbbb, 0x7cf, 0xd2a, +0x910, 0xd2a, 0x910, 0xd30, 0x8f5, 0xd30, 0x8f5, 0xd83, 0x935, 0xd83, 0x935, +0xe15, 0x9c0, 0xe15, 0x9c0, 0xe15, 0x9c0, 0xee2, 0xa94, 0xee2, 0xa94, 0xe1d, +0x9e1, 0xe1d, 0x9e1, 0xe42, 0xa24, 0xe42, 0xa24, 0xe86, 0xa8f, 0xe86, 0xa8f, +0xdc2, 0x9fc, 0xdc2, 0x9fc, 0xdc2, 0x9fc, 0xd60, 0x9d2, 0xd60, 0x9d2, 0xde0, +0xa8e, 0xde0, 0xa8e, 0xd7f, 0xa6d, 0xd7f, 0xa6d, 0xc84, 0x9b4, 0xc84, 0x9b4, +0xde2, 0xb55, 0xde2, 0xb55, 0xbcc, 0x97f, 0xbcc, 0x97f, 0xbcc, 0x97f, 0xcf9, +0xae9, 0xcf9, 0xae9, 0xe3f, 0xc67, 0xe3f, 0xc67, 0xe54, 0xcaf, 0xe54, 0xcaf, +0xf04, 0xd8d, 0xf04, 0xd8d, 0xe41, 0xcef, 0xe41, 0xcef, 0xdfb, 0xcc8, 0xdfb, +0xcc8, 0xdfb, 0xcc8, 0xe35, 0xd18, 0xe35, 0xd18, 0xd18, 0xc0d, 0xd18, 0xc0d, +0xc25, 0xb24, 0xc25, 0xb24, 0xc46, 0xb4a, 0xc46, 0xb4a, 0xcd7, 0xbdc, 0xcd7, +0xbdc, 0xcd7, 0xbdc, 0xdbc, 0xcbe, 0xdbc, 0xcbe, 0xbce, 0xacc, 0xbce, 0xacc, +0xcaa, 0xba3, 0xcaa, 0xba3, 0xdbd, 0xcb2, 0xdbd, 0xcb2, 0xd21, 0xc13, 0xd21, +0xc13, 0xd01, 0xbf4, 0xd01, 0xbf4, 0xd01, 0xbf4, 0xc8b, 0xb84, 0xc8b, 0xb84, +0xaa5, 0x9a6, 0xaa5, 0x9a6, 0xb8a, 0xa9b, 0xb8a, 0xa9b, 0xcdf, 0xc04, 0xcdf, +0xc04, 0xab1, 0x9f1, 0xab1, 0x9f1, 0x984, 0x8e4, 0x984, 0x8e4, 0x984, 0x8e4, +0x8e6, 0x86b, 0x8e6, 0x86b, 0x7fd, 0x7ab, 0x7fd, 0x7ab, 0x882, 0x85c, 0x882, +0x85c, 0x7e7, 0x7f1, 0x7e7, 0x7f1, 0x5c5, 0x5ff, 0x5c5, 0x5ff, 0x5c5, 0x5ff, +0x5c5, 0x62e, 0x5c5, 0x62e, 0x4e7, 0x57e, 0x4e7, 0x57e, 0x39c, 0x45e, 0x39c, +0x45e, 0x1b1, 0x299, 0x1b1, 0x299, 0x66, 0x16f, 0x66, 0x16f, 0xa5, 0x1c7, +0xa5, 0x1c7, 0xa5, 0x1c7, 0xad, 0x1e1, 0xad, 0x1e1, 0x2c, 0x169, 0x2c, +0x169, 0xffdd, 0x11b, 0xffdd, 0x11b, 0xff20, 0x55, 0xff20, 0x55, 0xffe7, 0x10c, +0xffe7, 0x10c, 0x3d, 0x148, 0x3d, 0x148, 0x3d, 0x148, 0xb0, 0x19b, 0xb0, +0x19b, 0x107, 0x1ca, 0x107, 0x1ca, 0x132, 0x1c9, 0x132, 0x1c9, 0x2d1, 0x339, +0x2d1, 0x339, 0x215, 0x24a, 0x215, 0x24a, 0x215, 0x24a, 0x263, 0x265, 0x263, +0x265, 0x227, 0x1f6, 0x227, 0x1f6, 0x18b, 0x12b, 0x18b, 0x12b, 0x1e9, 0x15e, +0x1e9, 0x15e, 0x4b6, 0x406, 0x4b6, 0x406, 0x438, 0x369, 0x438, 0x369, 0x438, +0x369, 0x490, 0x3ab, 0x490, 0x3ab, 0x557, 0x464, 0x557, 0x464, 0x3f7, 0x300, +0x3f7, 0x300, 0x3d6, 0x2e5, 0x3d6, 0x2e5, 0x2c2, 0x1e0, 0x2c2, 0x1e0, 0x186, +0xbc, 0x186, 0xbc, 0x186, 0xbc, 0xff44, 0xfe9a, 0xff44, 0xfe9a, 0xfee2, 0xfe60, +0xfee2, 0xfe60, 0xfd07, 0xfcb3, 0xfd07, 0xfcb3, 0xfbd7, 0xfbb5, 0xfbd7, 0xfbb5, 0xf84e, +0xf862, 0xf84e, 0xf862, 0xf84e, 0xf862, 0xf786, 0xf7d2, 0xf786, 0xf7d2, 0xf7e5, 0xf869, +0xf7e5, 0xf869, 0xf6e8, 0xf7a1, 0xf6e8, 0xf7a1, 0xf79e, 0xf889, 0xf79e, 0xf889, 0xf6ad, +0xf7c5, 0xf6ad, 0xf7c5, 0xf550, 0xf68e, 0xf550, 0xf68e, 0xf550, 0xf68e, 0xf4de, 0xf63c, +0xf4de, 0xf63c, 0xf6b0, 0xf824, 0xf6b0, 0xf824, 0xf6ed, 0xf86f, 0xf6ed, 0xf86f, 0xf825, +0xf9ab, 0xf825, 0xf9ab, 0xf733, 0xf8b5, 0xf733, 0xf8b5, 0xf747, 0xf8bb, 0xf747, 0xf8bb, +0xf747, 0xf8bb, 0xf8b1, 0xfa0e, 0xf8b1, 0xfa0e, 0xf89e, 0xf9dd, 0xf89e, 0xf9dd, 0xf8c4, +0xf9de, 0xf8c4, 0xf9de, 0xf974, 0xfa64, 0xf974, 0xfa64, 0xfa6f, 0xfb31, 0xfa6f, 0xfb31, +0xfa6f, 0xfb31, 0xfc93, 0xfd24, 0xfc93, 0xfd24, 0xfda1, 0xfe00, 0xfda1, 0xfe00, 0xfe09, +0xfe37, 0xfe09, 0xfe37, 0x1d4, 0x1d2, 0x1d4, 0x1d2, 0x282, 0x254, 0x282, 0x254, +0x325, 0x2ce, 0x325, 0x2ce, 0x325, 0x2ce, 0x2dc, 0x263, 0x2dc, 0x263, 0x21e, +0x188, 0x21e, 0x188, 0x445, 0x399, 0x445, 0x399, 0x484, 0x3c8, 0x484, 0x3c8, +0x51a, 0x454, 0x51a, 0x454, 0x5d4, 0x50b, 0x5d4, 0x50b, 0x5d4, 0x50b, 0x648, +0x582, 0x648, 0x582, 0x7c4, 0x705, 0x7c4, 0x705, 0x690, 0x5dd, 0x690, 0x5dd, +0x606, 0x562, 0x606, 0x562, 0x67a, 0x5e6, 0x67a, 0x5e6, 0x67a, 0x5e6, 0x5be, +0x539, 0x5be, 0x539, 0x543, 0x4ce, 0x543, 0x4ce, 0x4ca, 0x460, 0x4ca, 0x460, +0x371, 0x310, 0x371, 0x310, 0x3c0, 0x364, 0x3c0, 0x364, 0x3bf, 0x361, 0x3bf, +0x361, 0x3bf, 0x361, 0x2ef, 0x289, 0x2ef, 0x289, 0x2ca, 0x257, 0x2ca, 0x257, +0x11e, 0x95, 0x11e, 0x95, 0x1e1, 0x13d, 0x1e1, 0x13d, 0x2aa, 0x1e4, 0x2aa, +0x1e4, 0x2aa, 0x1e4, 0x3e5, 0x2f8, 0x3e5, 0x2f8, 0x414, 0x2fb, 0x414, 0x2fb, +0x59e, 0x455, 0x59e, 0x455, 0x8de, 0x763, 0x8de, 0x763, 0xaf7, 0x949, 0xaf7, +0x949, 0xd0c, 0xb2b, 0xd0c, 0xb2b, 0xd0c, 0xb2b, 0xe65, 0xc55, 0xe65, 0xc55, +0xdc2, 0xb84, 0xdc2, 0xb84, 0xe48, 0xbe2, 0xe48, 0xbe2, 0x1040, 0xdb7, 0x1040, +0xdb7, 0xfa7, 0xd03, 0xfa7, 0xd03, 0x10ef, 0xe38, 0x10ef, 0xe38, 0x10ef, 0xe38, +0x1183, 0xec2, 0x1183, 0xec2, 0x10c3, 0xe00, 0x10c3, 0xe00, 0x1025, 0xd6a, 0x1025, +0xd6a, 0x12ab, 0x1000, 0x12ab, 0x1000, 0x102e, 0xd9d, 0x102e, 0xd9d, 0x102e, 0xd9d, +0xe32, 0xbc1, 0xe32, 0xbc1, 0xe86, 0xc3d, 0xe86, 0xc3d, 0xdc2, 0xba6, 0xdc2, +0xba6, 0xf71, 0xd87, 0xf71, 0xd87, 0xd1e, 0xb69, 0xd1e, 0xb69, 0xc19, 0xa99, +0xc19, 0xa99, 0xc19, 0xa99, 0xb3a, 0x9ef, 0xb3a, 0x9ef, 0xb70, 0xa58, 0xb70, +0xa58, 0xaf4, 0xa0c, 0xaf4, 0xa0c, 0xa4e, 0x991, 0xa4e, 0x991, 0x883, 0x7eb, +0x883, 0x7eb, 0x8ed, 0x873, 0x8ed, 0x873, 0x8ed, 0x873, 0xa82, 0xa1f, 0xa82, +0xa1f, 0xaba, 0xa65, 0xaba, 0xa65, 0xa4c, 0x9fc, 0xa4c, 0x9fc, 0x9db, 0x989, +0x9db, 0x989, 0xa95, 0xa39, 0xa95, 0xa39, 0xa95, 0xa39, 0x877, 0x80b, 0x877, +0x80b, 0xc05, 0xb82, 0xc05, 0xb82, 0xaa6, 0xa06, 0xaa6, 0xa06, 0xa21, 0x962, +0xa21, 0x962, 0xf1d, 0xe3b, 0xf1d, 0xe3b, 0xdd0, 0xcca, 0xdd0, 0xcca, 0xdd0, +0xcca, 0xee8, 0xdbf, 0xee8, 0xdbf, 0x112e, 0xfe4, 0x112e, 0xfe4, 0x10e8, 0xf81, +0x10e8, 0xf81, 0x1160, 0xfe0, 0x1160, 0xfe0, 0x12e1, 0x114e, 0x12e1, 0x114e, 0x1228, +0x1089, 0x1228, 0x1089, 0x1228, 0x1089, 0x10b7, 0xf13, 0x10b7, 0xf13, 0x1169, 0xfc8, +0x1169, 0xfc8, 0x10ad, 0xf16, 0x10ad, 0xf16, 0xfdf, 0xe5b, 0xfdf, 0xe5b, 0xf34, +0xdca, 0xf34, 0xdca, 0xf34, 0xdca, 0xf34, 0xdea, 0xf34, 0xdea, 0xeaf, 0xd8c, +0xeaf, 0xd8c, 0xd5a, 0xc63, 0xd5a, 0xc63, 0xbc2, 0xafa, 0xbc2, 0xafa, 0x86c, +0x7d6, 0x86c, 0x7d6, 0x7a2, 0x740, 0x7a2, 0x740, 0x7a2, 0x740, 0x4cc, 0x49d, +0x4cc, 0x49d, 0x23c, 0x23e, 0x23c, 0x23e, 0x1a5, 0x1d6, 0x1a5, 0x1d6, 0x8e, +0xeb, 0x8e, 0xeb, 0xffd7, 0x5c, 0xffd7, 0x5c, 0xfe89, 0xff30, 0xfe89, 0xff30, +0xfe89, 0xff30, 0xfb7b, 0xfc3f, 0xfb7b, 0xfc3f, 0xfa83, 0xfb5e, 0xfa83, 0xfb5e, 0xf9b3, +0xfa9f, 0xf9b3, 0xfa9f, 0xf77b, 0xf873, 0xf77b, 0xf873, 0xf799, 0xf897, 0xf799, 0xf897, +0xf799, 0xf897, 0xf826, 0xf927, 0xf826, 0xf927, 0xf8de, 0xf9dd, 0xf8de, 0xf9dd, 0xf8e1, +0xf9dd, 0xf8e1, 0xf9dd, 0xfb23, 0xfc1a, 0xfb23, 0xfc1a, 0xf8e2, 0xf9d3, 0xf8e2, 0xf9d3, +0xf97e, 0xfa6b, 0xf97e, 0xfa6b, 0xf97e, 0xfa6b, 0xfc40, 0xfd2a, 0xfc40, 0xfd2a, 0xfb01, +0xfbec, 0xfb01, 0xfbec, 0xfbb7, 0xfca7, 0xfbb7, 0xfca7, 0xfc04, 0xfcfe, 0xfc04, 0xfcfe, +0xfa4a, 0xfb53, 0xfa4a, 0xfb53, 0xf943, 0xfa61, 0xf943, 0xfa61, 0xf943, 0xfa61, 0xfae8, +0xfc20, 0xfae8, 0xfc20, 0xf9c5, 0xfb1e, 0xf9c5, 0xfb1e, 0xfb5c, 0xfcdc, 0xfb5c, 0xfcdc, +0xfb25, 0xfcd0, 0xfb25, 0xfcd0, 0xfa24, 0xfbfe, 0xfa24, 0xfbfe, 0xfa24, 0xfbfe, 0xfa54, +0xfc61, 0xfa54, 0xfc61, 0xf6a3, 0xf8e4, 0xf6a3, 0xf8e4, 0xf547, 0xf7bd, 0xf547, 0xf7bd, +0xf361, 0xf60c, 0xf361, 0xf60c, 0xf05a, 0xf338, 0xf05a, 0xf338, 0xefd3, 0xf2e0, 0xefd3, +0xf2e0, 0xefd3, 0xf2e0, 0xef3e, 0xf275, 0xef3e, 0xf275, 0xefa9, 0xf305, 0xefa9, 0xf305, +0xf027, 0xf3a1, 0xf027, 0xf3a1, 0xef7c, 0xf30c, 0xef7c, 0xf30c, 0xed90, 0xf12d, 0xed90, +0xf12d, 0xed27, 0xf0c8, 0xed27, 0xf0c8, 0xed27, 0xf0c8, 0xec82, 0xf01e, 0xec82, 0xf01e, +0xe7fd, 0xeb8b, 0xe7fd, 0xeb8b, 0xe89a, 0xec11, 0xe89a, 0xec11, 0xe995, 0xeced, 0xe995, +0xeced, 0xe900, 0xec31, 0xe900, 0xec31, 0xe900, 0xec31, 0xe9e8, 0xecec, 0xe9e8, 0xecec, +0xe90a, 0xebdb, 0xe90a, 0xebdb, 0xe780, 0xea1a, 0xe780, 0xea1a, 0xe963, 0xebc3, 0xe963, +0xebc3, 0xea95, 0xecb9, 0xea95, 0xecb9, 0xec10, 0xedf9, 0xec10, 0xedf9, 0xec10, 0xedf9, +0xee03, 0xefb3, 0xee03, 0xefb3, 0xed57, 0xeecf, 0xed57, 0xeecf, 0xeef7, 0xf03c, 0xeef7, +0xf03c, 0xef03, 0xf018, 0xef03, 0xf018, 0xef1c, 0xf008, 0xef1c, 0xf008, 0xf05c, 0xf124, +0xf05c, 0xf124, 0xf05c, 0xf124, 0xf137, 0xf1e3, 0xf137, 0xf1e3, 0xf0bc, 0xf151, 0xf0bc, +0xf151, 0xf2da, 0xf360, 0xf2da, 0xf360, 0xf3b7, 0xf434, 0xf3b7, 0xf434, 0xf25e, 0xf2d7, +0xf25e, 0xf2d7, 0xf25e, 0xf2d7, 0xf49e, 0xf518, 0xf49e, 0xf518, 0xf599, 0xf619, 0xf599, +0xf619, 0xf626, 0xf6b0, 0xf626, 0xf6b0, 0xf89f, 0xf934, 0xf89f, 0xf934, 0xf750, 0xf7f3, +0xf750, 0xf7f3, 0xf5aa, 0xf65a, 0xf5aa, 0xf65a, 0xf5aa, 0xf65a, 0xf728, 0xf7e5, 0xf728, +0xf7e5, 0xf58c, 0xf656, 0xf58c, 0xf656, 0xf5af, 0xf682, 0xf5af, 0xf682, 0xf4c9, 0xf5a4, +0xf4c9, 0xf5a4, 0xf4dc, 0xf5bb, 0xf4dc, 0xf5bb, 0xf72f, 0xf80f, 0xf72f, 0xf80f, 0xf72f, +0xf80f, 0xf724, 0xf802, 0xf724, 0xf802, 0xf732, 0xf80b, 0xf732, 0xf80b, 0xf81e, 0xf8ee, +0xf81e, 0xf8ee, 0xf895, 0xf95a, 0xf895, 0xf95a, 0xf7d0, 0xf889, 0xf7d0, 0xf889, 0xf7d0, +0xf889, 0xf846, 0xf8f0, 0xf846, 0xf8f0, 0xf879, 0xf915, 0xf879, 0xf915, 0xf974, 0xfa03, +0xf974, 0xfa03, 0xfa4c, 0xface, 0xfa4c, 0xface, 0xfa55, 0xfacc, 0xfa55, 0xfacc, 0xfb86, +0xfbf5, 0xfb86, 0xfbf5, 0xfb86, 0xfbf5, 0xfd16, 0xfd81, 0xfd16, 0xfd81, 0xfdc1, 0xfe2d, +0xfdc1, 0xfe2d, 0xfca5, 0xfd16, 0xfca5, 0xfd16, 0xfbc3, 0xfc3d, 0xfbc3, 0xfc3d, 0xfb14, +0xfb9d, 0xfb14, 0xfb9d, 0xfb14, 0xfb9d, 0xf99f, 0xfa3a, 0xf99f, 0xfa3a, 0xf94c, 0xfa00, +0xf94c, 0xfa00, 0xf826, 0xf8f6, 0xf826, 0xf8f6, 0xf8ad, 0xf99c, 0xf8ad, 0xf99c, 0xf92d, +0xfa3e, 0xf92d, 0xfa3e, 0xf810, 0xf943, 0xf810, 0xf943, 0xf810, 0xf943, 0xf793, 0xf8eb, +0xf793, 0xf8eb, 0xf58f, 0xf70a, 0xf58f, 0xf70a, 0xf3e8, 0xf584, 0xf3e8, 0xf584, 0xf2e4, +0xf49e, 0xf2e4, 0xf49e, 0xf1eb, 0xf3c0, 0xf1eb, 0xf3c0, 0xf0e3, 0xf2cd, 0xf0e3, 0xf2cd, +0xf0e3, 0xf2cd, 0xf0f2, 0xf2eb, 0xf0f2, 0xf2eb, 0xf0d2, 0xf2d3, 0xf0d2, 0xf2d3, 0xf122, +0xf324, 0xf122, 0xf324, 0xf196, 0xf390, 0xf196, 0xf390, 0xf103, 0xf2ed, 0xf103, 0xf2ed, +0xf103, 0xf2ed, 0xf032, 0xf204, 0xf032, 0xf204, 0xefff, 0xf1b1, 0xefff, 0xf1b1, 0xf057, +0xf1e0, 0xf057, 0xf1e0, 0xf145, 0xf29d, 0xf145, 0xf29d, 0xf0ec, 0xf20e, 0xf0ec, 0xf20e, +0xf178, 0xf25d, 0xf178, 0xf25d, 0xf178, 0xf25d, 0xf35f, 0xf402, 0xf35f, 0xf402, 0xf422, +0xf480, 0xf422, 0xf480, 0xf621, 0xf637, 0xf621, 0xf637, 0xf7b6, 0xf782, 0xf7b6, 0xf782, +0xf979, 0xf8fc, 0xf979, 0xf8fc, 0xf986, 0xf8bf, 0xf986, 0xf8bf, 0xf986, 0xf8bf, 0xfc81, +0xfb72, 0xfc81, 0xfb72, 0xfd5e, 0xfc0a, 0xfd5e, 0xfc0a, 0xfd7c, 0xfbe6, 0xfd7c, 0xfbe6, +0x91, 0xfebf, 0x91, 0xfebf, 0x161, 0xff56, 0x161, 0xff56, 0x161, 0xff56, 0x2f8, +0xba, 0x2f8, 0xba, 0x5bb, 0x34e, 0x5bb, 0x34e, 0x8a5, 0x610, 0x8a5, 0x610, +0x85f, 0x5a7, 0x85f, 0x5a7, 0xa1d, 0x747, 0xa1d, 0x747, 0xa4e, 0x760, 0xa4e, +0x760, 0xa4e, 0x760, 0xb08, 0x806, 0xb08, 0x806, 0xcc6, 0x9b3, 0xcc6, 0x9b3, +0xe68, 0xb49, 0xe68, 0xb49, 0xf1b, 0xbf3, 0xf1b, 0xbf3, 0xe79, 0xb4a, 0xe79, +0xb4a, 0x1171, 0xe3e, 0x1171, 0xe3e, 0x1171, 0xe3e, 0x1141, 0xe0b, 0x1141, 0xe0b, +0x10c4, 0xd8d, 0x10c4, 0xd8d, 0x104d, 0xd16, 0x104d, 0xd16, 0x1148, 0xe11, 0x1148, +0xe11, 0x1274, 0xf3f, 0x1274, 0xf3f, 0x1274, 0xf3f, 0x1304, 0xfd1, 0x1304, 0xfd1, +0x15b7, 0x1289, 0x15b7, 0x1289, 0x16a6, 0x137d, 0x16a6, 0x137d, 0x1868, 0x1546, 0x1868, +0x1546, 0x1a5d, 0x1745, 0x1a5d, 0x1745, 0x1a62, 0x1757, 0x1a62, 0x1757, 0x1a62, 0x1757, +0x1b89, 0x188d, 0x1b89, 0x188d, 0x1c64, 0x197c, 0x1c64, 0x197c, 0x1c9e, 0x19cf, 0x1c9e, +0x19cf, 0x1cc7, 0x1a15, 0x1cc7, 0x1a15, 0x1bf5, 0x1965, 0x1bf5, 0x1965, 0x1cd9, 0x1a71, +0x1cd9, 0x1a71, 0x1cd9, 0x1a71, 0x1c5d, 0x1a23, 0x1c5d, 0x1a23, 0x1aa8, 0x18a1, 0x1aa8, +0x18a1, 0x19a3, 0x17d7, 0x19a3, 0x17d7, 0x169b, 0x150d, 0x169b, 0x150d, 0x14a4, 0x135b, +0x14a4, 0x135b, 0x14a4, 0x135b, 0x11ec, 0x10ec, 0x11ec, 0x10ec, 0xf3d, 0xe8b, 0xf3d, +0xe8b, 0xe67, 0xe05, 0xe67, 0xe05, 0xc04, 0xbf5, 0xc04, 0xbf5, 0xb03, 0xb49, +0xb03, 0xb49, 0x885, 0x920, 0x885, 0x920, 0x885, 0x920, 0x5d0, 0x6c0, 0x5d0, +0x6c0, 0x3c7, 0x50a, 0x3c7, 0x50a, 0x155, 0x2e7, 0x155, 0x2e7, 0xff0d, 0xeb, +0xff0d, 0xeb, 0xfd3a, 0xff5e, 0xfd3a, 0xff5e, 0xfc50, 0xfeb4, 0xfc50, 0xfeb4, 0xfc50, +0xfeb4, 0xfb19, 0xfdb8, 0xfb19, 0xfdb8, 0xfbaf, 0xfe80, 0xfbaf, 0xfe80, 0xfb96, 0xfe92, +0xfb96, 0xfe92, 0xfa24, 0xfd41, 0xfa24, 0xfd41, 0xf845, 0xfb7c, 0xf845, 0xfb7c, 0xf845, +0xfb7c, 0xf6c9, 0xfa10, 0xf6c9, 0xfa10, 0xf4d6, 0xf825, 0xf4d6, 0xf825, 0xf3b3, 0xf702, +0xf3b3, 0xf702, 0xf11d, 0xf463, 0xf11d, 0xf463, 0xee5f, 0xf195, 0xee5f, 0xf195, 0xed54, +0xf074, 0xed54, 0xf074, 0xed54, 0xf074, 0xed5a, 0xf05d, 0xed5a, 0xf05d, 0xef3d, 0xf21f, +0xef3d, 0xf21f, 0xef83, 0xf23f, 0xef83, 0xf23f, 0xf029, 0xf2bb, 0xf029, 0xf2bb, 0xf19d, +0xf403, 0xf19d, 0xf403, 0xf27f, 0xf4b6, 0xf27f, 0xf4b6, 0xf27f, 0xf4b6, 0xf129, 0xf331, +0xf129, 0xf331, 0xefe3, 0xf1bb, 0xefe3, 0xf1bb, 0xefe2, 0xf18a, 0xefe2, 0xf18a, 0xefea, +0xf163, 0xefea, 0xf163, 0xf05e, 0xf1aa, 0xf05e, 0xf1aa, 0xf05e, 0xf1aa, 0xf11d, 0xf23c, +0xf11d, 0xf23c, 0xf076, 0xf16b, 0xf076, 0xf16b, 0xf033, 0xf0fe, 0xf033, 0xf0fe, 0xf0e9, +0xf18e, 0xf0e9, 0xf18e, 0xf0f8, 0xf176, 0xf0f8, 0xf176, 0xf14b, 0xf1a5, 0xf14b, 0xf1a5, +0xf14b, 0xf1a5, 0xf232, 0xf269, 0xf232, 0xf269, 0xf1a2, 0xf1b7, 0xf1a2, 0xf1b7, 0xf26e, +0xf262, 0xf26e, 0xf262, 0xf3f2, 0xf3c5, 0xf3f2, 0xf3c5, 0xf320, 0xf2d2, 0xf320, 0xf2d2, +0xf584, 0xf516, 0xf584, 0xf516, 0xf584, 0xf516, 0xf541, 0xf4b3, 0xf541, 0xf4b3, 0xf5df, +0xf531, 0xf5df, 0xf531, 0xf7ba, 0xf6ec, 0xf7ba, 0xf6ec, 0xf8ba, 0xf7cc, 0xf8ba, 0xf7cc, +0xfcbb, 0xfbae, 0xfcbb, 0xfbae, 0xfcbb, 0xfbae, 0x46, 0xff1a, 0x46, 0xff1a, 0x136, +0xffec, 0x136, 0xffec, 0x23a, 0xd4, 0x23a, 0xd4, 0x597, 0x417, 0x597, 0x417, +0x65b, 0x4c4, 0x65b, 0x4c4, 0x869, 0x6be, 0x869, 0x6be, 0x869, 0x6be, 0x95e, +0x7a2, 0x95e, 0x7a2, 0xb34, 0x96c, 0xb34, 0x96c, 0xd42, 0xb71, 0xd42, 0xb71, +0xda5, 0xbd2, 0xda5, 0xbd2, 0x104d, 0xe7d, 0x104d, 0xe7d, 0xf62, 0xd9a, 0xf62, +0xd9a, 0xf62, 0xd9a, 0x10d7, 0xf1d, 0x10d7, 0xf1d, 0x124b, 0x10a5, 0x124b, 0x10a5, +0x1044, 0xeb6, 0x1044, 0xeb6, 0x11e2, 0x1074, 0x11e2, 0x1074, 0x1237, 0x10eb, 0x1237, +0x10eb, 0x1237, 0x10eb, 0x10ce, 0xfaa, 0x10ce, 0xfaa, 0xfe0, 0xee7, 0xfe0, 0xee7, +0xda2, 0xcd6, 0xda2, 0xcd6, 0xd9a, 0xcfe, 0xd9a, 0xcfe, 0xcd5, 0xc69, 0xcd5, +0xc69, 0xa9f, 0xa64, 0xa9f, 0xa64, 0xa9f, 0xa64, 0x9fc, 0x9f0, 0x9fc, 0x9f0, +0x7c8, 0x7e8, 0x7c8, 0x7e8, 0x6e5, 0x72e, 0x6e5, 0x72e, 0x58b, 0x5fa, 0x58b, +0x5fa, 0x2c0, 0x34f, 0x2c0, 0x34f, 0x2c0, 0x34f, 0x263, 0x30c, 0x263, 0x30c, +0x262, 0x321, 0x262, 0x321, 0x22b, 0x2f8, 0x22b, 0x2f8, 0x220, 0x2f4, 0x220, +0x2f4, 0x2e8, 0x3bc, 0x2e8, 0x3bc, 0x2a0, 0x36d, 0x2a0, 0x36d, 0x2a0, 0x36d, +0x3d6, 0x495, 0x3d6, 0x495, 0x347, 0x3f2, 0x347, 0x3f2, 0x24e, 0x2df, 0x24e, +0x2df, 0x339, 0x3ab, 0x339, 0x3ab, 0x3d4, 0x421, 0x3d4, 0x421, 0x63f, 0x665, +0x63f, 0x665, 0x63f, 0x665, 0x670, 0x66a, 0x670, 0x66a, 0x816, 0x7e3, 0x816, +0x7e3, 0x866, 0x804, 0x866, 0x804, 0x8fe, 0x86d, 0x8fe, 0x86d, 0x9af, 0x8ef, +0x9af, 0x8ef, 0x9af, 0x8ef, 0x8dc, 0x7ed, 0x8dc, 0x7ed, 0x894, 0x779, 0x894, +0x779, 0x82a, 0x6e3, 0x82a, 0x6e3, 0x9c7, 0x858, 0x9c7, 0x858, 0xa2b, 0x895, +0xa2b, 0x895, 0xcfa, 0xb41, 0xcfa, 0xb41, 0xcfa, 0xb41, 0xdca, 0xbf0, 0xdca, +0xbf0, 0xe34, 0xc3c, 0xe34, 0xc3c, 0x105c, 0xe48, 0x105c, 0xe48, 0xfe5, 0xdb7, +0xfe5, 0xdb7, 0x1038, 0xdf2, 0x1038, 0xdf2, 0x1013, 0xdb6, 0x1013, 0xdb6, 0x1013, +0xdb6, 0xf2c, 0xcba, 0xf2c, 0xcba, 0xf8b, 0xd05, 0xf8b, 0xd05, 0x1069, 0xdce, +0x1069, 0xdce, 0xfe3, 0xd35, 0xfe3, 0xd35, 0xfe3, 0xd22, 0xfe3, 0xd22, 0xfe3, +0xd22, 0x103e, 0xd69, 0x103e, 0xd69, 0x106c, 0xd84, 0x106c, 0xd84, 0x104d, 0xd52, +0x104d, 0xd52, 0x107d, 0xd70, 0x107d, 0xd70, 0x108b, 0xd6d, 0x108b, 0xd6d, 0x105d, +0xd2f, 0x105d, 0xd2f, 0x105d, 0xd2f, 0x11fa, 0xebe, 0x11fa, 0xebe, 0x1490, 0x1149, +0x1490, 0x1149, 0x1652, 0x1303, 0x1652, 0x1303, 0x15ae, 0x125b, 0x15ae, 0x125b, 0x183c, +0x14ea, 0x183c, 0x14ea, 0x1a18, 0x16cb, 0x1a18, 0x16cb, 0x1a18, 0x16cb, 0x17cb, 0x148a, +0x17cb, 0x148a, 0x1886, 0x1558, 0x1886, 0x1558, 0x184a, 0x1534, 0x184a, 0x1534, 0x189e, +0x15a7, 0x189e, 0x15a7, 0x18fa, 0x162b, 0x18fa, 0x162b, 0x18fa, 0x162b, 0x183c, 0x1599, +0x183c, 0x1599, 0x1903, 0x1695, 0x1903, 0x1695, 0x1582, 0x134f, 0x1582, 0x134f, 0x12d9, +0x10e6, 0x12d9, 0x10e6, 0x101b, 0xe6e, 0x101b, 0xe6e, 0xcd9, 0xb76, 0xcd9, 0xb76, +0xcd9, 0xb76, 0xc7b, 0xb65, 0xc7b, 0xb65, 0x87e, 0x7b7, 0x87e, 0x7b7, 0x573, +0x4fe, 0x573, 0x4fe, 0x339, 0x314, 0x339, 0x314, 0x28, 0x53, 0x28, 0x53, +0xffe2, 0x59, 0xffe2, 0x59, 0xffe2, 0x59, 0xfc3a, 0xfcfb, 0xfc3a, 0xfcfb, 0xf7e5, +0xf8eb, 0xf7e5, 0xf8eb, 0xf717, 0xf85e, 0xf717, 0xf85e, 0xf4a4, 0xf625, 0xf4a4, 0xf625, +0xf1c4, 0xf379, 0xf1c4, 0xf379, 0xf1c4, 0xf379, 0xee83, 0xf064, 0xee83, 0xf064, 0xebf5, +0xedfd, 0xebf5, 0xedfd, 0xec74, 0xee99, 0xec74, 0xee99, 0xebf8, 0xee35, 0xebf8, 0xee35, +0xeb1d, 0xed6b, 0xeb1d, 0xed6b, 0xebc0, 0xee18, 0xebc0, 0xee18, 0xebc0, 0xee18, 0xeb17, +0xed73, 0xeb17, 0xed73, 0xea47, 0xeca4, 0xea47, 0xeca4, 0xe9fb, 0xec52, 0xe9fb, 0xec52, +0xe914, 0xeb64, 0xe914, 0xeb64, 0xe9e6, 0xec2c, 0xe9e6, 0xec2c, 0xea93, 0xeccc, 0xea93, +0xeccc, 0xea93, 0xeccc, 0xed32, 0xef5e, 0xed32, 0xef5e, 0xefdb, 0xf1f9, 0xefdb, 0xf1f9, +0xefe4, 0xf1f4, 0xefe4, 0xf1f4, 0xf3d7, 0xf5db, 0xf3d7, 0xf5db, 0xf62a, 0xf821, 0xf62a, +0xf821, 0xf62a, 0xf821, 0xf530, 0xf71c, 0xf530, 0xf71c, 0xf640, 0xf822, 0xf640, 0xf822, +0xf7f4, 0xf9ce, 0xf7f4, 0xf9ce, 0xf89f, 0xfa71, 0xf89f, 0xfa71, 0xf941, 0xfb0b, 0xf941, +0xfb0b, 0xfa2d, 0xfbef, 0xfa2d, 0xfbef, 0xfa2d, 0xfbef, 0xfa10, 0xfbc9, 0xfa10, 0xfbc9, +0xfbf8, 0xfda8, 0xfbf8, 0xfda8, 0xfb7c, 0xfd21, 0xfb7c, 0xfd21, 0xfa18, 0xfbb0, 0xfa18, +0xfbb0, 0xfb7e, 0xfd06, 0xfb7e, 0xfd06, 0xfb46, 0xfcbc, 0xfb46, 0xfcbc, 0xfb46, 0xfcbc, +0xfba8, 0xfd07, 0xfba8, 0xfd07, 0xfa9e, 0xfbe3, 0xfa9e, 0xfbe3, 0xfa4b, 0xfb73, 0xfa4b, +0xfb73, 0xfad8, 0xfbe1, 0xfad8, 0xfbe1, 0xfa77, 0xfb5c, 0xfa77, 0xfb5c, 0xfa77, 0xfb5c, +0xfa41, 0xfb01, 0xfa41, 0xfb01, 0xf8a1, 0xf939, 0xf8a1, 0xf939, 0xf917, 0xf988, 0xf917, +0xf988, 0xfa38, 0xfa80, 0xfa38, 0xfa80, 0xfa32, 0xfa52, 0xfa32, 0xfa52, 0xfaff, 0xfaf8, +0xfaff, 0xfaf8, 0xfaff, 0xfaf8, 0xfbed, 0xfbc3, 0xfbed, 0xfbc3, 0xfd3a, 0xfcf0, 0xfd3a, +0xfcf0, 0xff5e, 0xfef8, 0xff5e, 0xfef8, 0x125, 0xa9, 0x125, 0xa9, 0x193, 0x106, +0x193, 0x106, 0x13c, 0xa6, 0x13c, 0xa6, 0x13c, 0xa6, 0x1f9, 0x161, 0x1f9, +0x161, 0x254, 0x1c1, 0x254, 0x1c1, 0x177, 0xf1, 0x177, 0xf1, 0x196, 0x125, +0x196, 0x125, 0x23a, 0x1e4, 0x23a, 0x1e4, 0x23a, 0x1e4, 0x7d, 0x4a, 0x7d, +0x4a, 0x6, 0xfffd, 0x6, 0xfffd, 0x1ea, 0x20f, 0x1ea, 0x20f, 0x14d, 0x1a6, +0x14d, 0x1a6, 0xe5, 0x175, 0xe5, 0x175, 0xfff3, 0xbd, 0xfff3, 0xbd, 0xfff3, +0xbd, 0xfefc, 0x3, 0xfefc, 0x3, 0xfe1e, 0xff62, 0xfe1e, 0xff62, 0xfa01, 0xfb82, +0xfa01, 0xfb82, 0xf77c, 0xf939, 0xf77c, 0xf939, 0xf698, 0xf88f, 0xf698, 0xf88f, 0xf3b4, +0xf5e2, 0xf3b4, 0xf5e2, 0xf3b4, 0xf5e2, 0xf23a, 0xf49c, 0xf23a, 0xf49c, 0xf145, 0xf3d7, +0xf145, 0xf3d7, 0xef15, 0xf1d3, 0xef15, 0xf1d3, 0xee28, 0xf10d, 0xee28, 0xf10d, 0xeb94, +0xee9b, 0xeb94, 0xee9b, 0xeb94, 0xee9b, 0xe8ac, 0xebd1, 0xe8ac, 0xebd1, 0xe6a5, 0xe9e3, +0xe6a5, 0xe9e3, 0xe4a2, 0xe7f4, 0xe4a2, 0xe7f4, 0xe438, 0xe79a, 0xe438, 0xe79a, 0xe36b, +0xe6d9, 0xe36b, 0xe6d9, 0xe182, 0xe4f8, 0xe182, 0xe4f8, 0xe182, 0xe4f8, 0xe01a, 0xe395, +0xe01a, 0xe395, 0xe0f3, 0xe471, 0xe0f3, 0xe471, 0xe0ce, 0xe44b, 0xe0ce, 0xe44b, 0xdf59, +0xe2d3, 0xdf59, 0xe2d3, 0xe041, 0xe3b5, 0xe041, 0xe3b5, 0xe041, 0xe3b5, 0xe185, 0xe4f2, +0xe185, 0xe4f2, 0xe1cf, 0xe534, 0xe1cf, 0xe534, 0xe346, 0xe6a1, 0xe346, 0xe6a1, 0xe590, +0xe8e0, 0xe590, 0xe8e0, 0xe67b, 0xe9bc, 0xe67b, 0xe9bc, 0xe663, 0xe995, 0xe663, 0xe995, +0xe663, 0xe995, 0xe670, 0xe990, 0xe670, 0xe990, 0xe5bc, 0xe8c8, 0xe5bc, 0xe8c8, 0xe3c5, +0xe6ba, 0xe3c5, 0xe6ba, 0xe45e, 0xe73a, 0xe45e, 0xe73a, 0xe605, 0xe8c3, 0xe605, 0xe8c3, +0xe614, 0xe8b2, 0xe614, 0xe8b2, 0xe614, 0xe8b2, 0xe6a2, 0xe91b, 0xe6a2, 0xe91b, 0xe7c7, +0xea17, 0xe7c7, 0xea17, 0xe908, 0xeb2b, 0xe908, 0xeb2b, 0xea34, 0xec25, 0xea34, 0xec25, +0xea25, 0xebe0, 0xea25, 0xebe0, 0xea25, 0xebe0, 0xe93f, 0xeabf, 0xe93f, 0xeabf, 0xea9e, +0xebdf, 0xea9e, 0xebdf, 0xea5d, 0xeb5b, 0xea5d, 0xeb5b, 0xea34, 0xeaeb, 0xea34, 0xeaeb, +0xed01, 0xed6d, 0xed01, 0xed6d, 0xeef6, 0xef16, 0xeef6, 0xef16, 0xeef6, 0xef16, 0xf184, +0xf155, 0xf184, 0xf155, 0xf38e, 0xf30e, 0xf38e, 0xf30e, 0xf4f3, 0xf421, 0xf4f3, 0xf421, +0xf769, 0xf646, 0xf769, 0xf646, 0xf9a4, 0xf831, 0xf9a4, 0xf831, 0xf94f, 0xf78d, 0xf94f, +0xf78d, 0xf94f, 0xf78d, 0xfa21, 0xf812, 0xfa21, 0xf812, 0xfc46, 0xf9ef, 0xfc46, 0xf9ef, +0xfd52, 0xfab7, 0xfd52, 0xfab7, 0xeb, 0xfe11, 0xeb, 0xfe11, 0x300, 0xffed, 0x300, +0xffed, 0x300, 0xffed, 0x4df, 0x198, 0x4df, 0x198, 0x8bd, 0x549, 0x8bd, 0x549, +0xa1b, 0x681, 0xa1b, 0x681, 0xc34, 0x87b, 0xc34, 0x87b, 0xd85, 0x9b5, 0xd85, +0x9b5, 0xc5f, 0x87f, 0xc5f, 0x87f, 0xc5f, 0x87f, 0xe20, 0xa37, 0xe20, 0xa37, +0x11bf, 0xdd4, 0x11bf, 0xdd4, 0x13a2, 0xfbb, 0x13a2, 0xfbb, 0x1461, 0x1084, 0x1461, +0x1084, 0x16ea, 0x131d, 0x16ea, 0x131d, 0x17ae, 0x13f6, 0x17ae, 0x13f6, 0x17ae, 0x13f6, +0x1692, 0x12f2, 0x1692, 0x12f2, 0x1825, 0x14a2, 0x1825, 0x14a2, 0x1778, 0x1414, 0x1778, +0x1414, 0x16ac, 0x136a, 0x16ac, 0x136a, 0x16ed, 0x13ce, 0x16ed, 0x13ce, 0x16ed, 0x13ce, +0x16de, 0x13e3, 0x16de, 0x13e3, 0x18a3, 0x15cc, 0x18a3, 0x15cc, 0x18e0, 0x162d, 0x18e0, +0x162d, 0x198b, 0x16fd, 0x198b, 0x16fd, 0x1953, 0x16e8, 0x1953, 0x16e8, 0x1834, 0x15eb, +0x1834, 0x15eb, 0x1834, 0x15eb, 0x177d, 0x1554, 0x177d, 0x1554, 0x165a, 0x1450, 0x165a, +0x1450, 0x17fe, 0x1612, 0x17fe, 0x1612, 0x17c7, 0x15f8, 0x17c7, 0x15f8, 0x17a2, 0x15ee, +0x17a2, 0x15ee, 0x1901, 0x1768, 0x1901, 0x1768, 0x1901, 0x1768, 0x18de, 0x175e, 0x18de, +0x175e, 0x1958, 0x17f2, 0x1958, 0x17f2, 0x1843, 0x16f6, 0x1843, 0x16f6, 0x18d1, 0x179d, +0x18d1, 0x179d, 0x1807, 0x16ec, 0x1807, 0x16ec, 0x1807, 0x16ec, 0x14ea, 0x13e8, 0x14ea, +0x13e8, 0x14c7, 0x13df, 0x14c7, 0x13df, 0x1262, 0x1194, 0x1262, 0x1194, 0x110f, 0x105d, +0x110f, 0x105d, 0x1194, 0x10fd, 0x1194, 0x10fd, 0x10bf, 0x1045, 0x10bf, 0x1045, 0x10bf, +0x1045, 0x11b0, 0x1153, 0x11b0, 0x1153, 0x1183, 0x1143, 0x1183, 0x1143, 0x107e, 0x105b, +0x107e, 0x105b, 0xfef, 0xfe8, 0xfef, 0xfe8, 0xd7e, 0xd92, 0xd7e, 0xd92, 0xae1, +0xb0f, 0xae1, 0xb0f, 0xae1, 0xb0f, 0x980, 0x9c6, 0x980, 0x9c6, 0x814, 0x871, +0x814, 0x871, 0x790, 0x801, 0x790, 0x801, 0x8bd, 0x93e, 0x8bd, 0x93e, 0x880, +0x90e, 0x880, 0x90e, 0x880, 0x90e, 0x6ec, 0x784, 0x6ec, 0x784, 0x56f, 0x60e, +0x56f, 0x60e, 0x38e, 0x42f, 0x38e, 0x42f, 0x27c, 0x31c, 0x27c, 0x31c, 0x10f, +0x1ab, 0x10f, 0x1ab, 0x2e, 0xc2, 0x2e, 0xc2, 0x2e, 0xc2, 0xffeb, 0x74, +0xffeb, 0x74, 0xff2a, 0xffa4, 0xff2a, 0xffa4, 0xff60, 0xffca, 0xff60, 0xffca, 0xff3c, +0xff94, 0xff3c, 0xff94, 0xff3b, 0xff80, 0xff3b, 0xff80, 0xff23, 0xff55, 0xff23, 0xff55, +0xff23, 0xff55, 0xfe7c, 0xfe9b, 0xfe7c, 0xfe9b, 0xfdd7, 0xfde3, 0xfdd7, 0xfde3, 0xfd24, +0xfd1f, 0xfd24, 0xfd1f, 0xfc9e, 0xfc8a, 0xfc9e, 0xfc8a, 0xfccb, 0xfcab, 0xfccb, 0xfcab, +0xfccb, 0xfcab, 0xfd85, 0xfd5c, 0xfd85, 0xfd5c, 0xfd43, 0xfd14, 0xfd43, 0xfd14, 0xfcd2, +0xfca1, 0xfcd2, 0xfca1, 0xfa72, 0xfa43, 0xfa72, 0xfa43, 0xf6c4, 0xf69b, 0xf6c4, 0xf69b, +0xf57b, 0xf55c, 0xf57b, 0xf55c, 0xf57b, 0xf55c, 0xf3c2, 0xf3b1, 0xf3c2, 0xf3b1, 0xf136, +0xf136, 0xf136, 0xf136, 0xf178, 0xf18c, 0xf178, 0xf18c, 0xf20c, 0xf237, 0xf20c, 0xf237, +0xf15e, 0xf1a1, 0xf15e, 0xf1a1, 0xf10a, 0xf167, 0xf10a, 0xf167, 0xf10a, 0xf167, 0xf147, +0xf1bf, 0xf147, 0xf1bf, 0xf0f0, 0xf182, 0xf0f0, 0xf182, 0xef32, 0xefde, 0xef32, 0xefde, +0xeee7, 0xefab, 0xeee7, 0xefab, 0xef46, 0xf021, 0xef46, 0xf021, 0xef46, 0xf021, 0xeee0, +0xefce, 0xeee0, 0xefce, 0xef15, 0xf014, 0xef15, 0xf014, 0xf04a, 0xf155, 0xf04a, 0xf155, +0xf1a0, 0xf2b4, 0xf1a0, 0xf2b4, 0xf310, 0xf428, 0xf310, 0xf428, 0xf3f1, 0xf50b, 0xf3f1, +0xf50b, 0xf3f1, 0xf50b, 0xf49d, 0xf5b4, 0xf49d, 0xf5b4, 0xf538, 0xf647, 0xf538, 0xf647, +0xf42e, 0xf532, 0xf42e, 0xf532, 0xf487, 0xf57d, 0xf487, 0xf57d, 0xf41c, 0xf501, 0xf41c, +0xf501, 0xf5a2, 0xf673, 0xf5a2, 0xf673, 0xf5a2, 0xf673, 0xf812, 0xf8cd, 0xf812, 0xf8cd, +0xf7e9, 0xf88e, 0xf7e9, 0xf88e, 0xfbd6, 0xfc63, 0xfbd6, 0xfc63, 0xfde0, 0xfe55, 0xfde0, +0xfe55, 0xfe56, 0xfeb4, 0xfe56, 0xfeb4, 0xfe56, 0xfeb4, 0x39, 0x7f, 0x39, 0x7f, +0xfffd, 0x2e, 0xfffd, 0x2e, 0x167, 0x183, 0x167, 0x183, 0x306, 0x30f, 0x306, +0x30f, 0x46f, 0x466, 0x46f, 0x466, 0x6a3, 0x68a, 0x6a3, 0x68a, 0x6a3, 0x68a, +0x73f, 0x718, 0x73f, 0x718, 0x9e7, 0x9b3, 0x9e7, 0x9b3, 0xab4, 0xa74, 0xab4, +0xa74, 0x84a, 0x7ff, 0x84a, 0x7ff, 0x7fb, 0x7a6, 0x7fb, 0x7a6, 0x7fb, 0x7a6, +0x6e9, 0x689, 0x6e9, 0x689, 0x733, 0x6c9, 0x733, 0x6c9, 0x7a6, 0x730, 0x7a6, +0x730, 0x812, 0x78f, 0x812, 0x78f, 0x8c2, 0x82f, 0x8c2, 0x82f, 0x9d7, 0x933, +0x9d7, 0x933, 0x9d7, 0x933, 0xb96, 0xadf, 0xb96, 0xadf, 0xa2c, 0x95f, 0xa2c, +0x95f, 0xa01, 0x91d, 0xa01, 0x91d, 0x9b5, 0x8b6, 0x9b5, 0x8b6, 0xa24, 0x909, +0xa24, 0x909, 0xb65, 0xa2c, 0xb65, 0xa2c, 0xb65, 0xa2c, 0xc47, 0xaed, 0xc47, +0xaed, 0xf31, 0xdb7, 0xf31, 0xdb7, 0x1166, 0xfca, 0x1166, 0xfca, 0x13a0, 0x11e3, +0x13a0, 0x11e3, 0x15da, 0x13fd, 0x15da, 0x13fd, 0x15da, 0x13fd, 0x17a7, 0x15ab, 0x17a7, +0x15ab, 0x17f8, 0x15df, 0x17f8, 0x15df, 0x1886, 0x1654, 0x1886, 0x1654, 0x198c, 0x1743, +0x198c, 0x1743, 0x1844, 0x15e9, 0x1844, 0x15e9, 0x1885, 0x161d, 0x1885, 0x161d, 0x1885, +0x161d, 0x1a6a, 0x17fa, 0x1a6a, 0x17fa, 0x1a19, 0x17a6, 0x1a19, 0x17a6, 0x1aee, 0x187c, +0x1aee, 0x187c, 0x1bd0, 0x1966, 0x1bd0, 0x1966, 0x1afd, 0x18a0, 0x1afd, 0x18a0, 0x1aea, +0x189f, 0x1aea, 0x189f, 0x1aea, 0x189f, 0x18d0, 0x169b, 0x18d0, 0x169b, 0x1775, 0x155b, +0x1775, 0x155b, 0x1674, 0x1478, 0x1674, 0x1478, 0x14e8, 0x130e, 0x14e8, 0x130e, 0x13b7, +0x1200, 0x13b7, 0x1200, 0x13b7, 0x1200, 0x120c, 0x107a, 0x120c, 0x107a, 0x1117, 0xfaa, +0x1117, 0xfaa, 0x1035, 0xeed, 0x1035, 0xeed, 0xfd1, 0xead, 0xfd1, 0xead, 0xc43, +0xb41, 0xc43, 0xb41, 0x91a, 0x838, 0x91a, 0x838, 0x91a, 0x838, 0x86b, 0x7a6, +0x86b, 0x7a6, 0x660, 0x5b5, 0x660, 0x5b5, 0x602, 0x56e, 0x602, 0x56e, 0x662, +0x5e0, 0x662, 0x5e0, 0x5f8, 0x585, 0x5f8, 0x585, 0x5d2, 0x56c, 0x5d2, 0x56c, +0x5d2, 0x56c, 0x4ed, 0x48e, 0x4ed, 0x48e, 0x3d8, 0x37f, 0x3d8, 0x37f, 0x314, +0x2bc, 0x314, 0x2bc, 0x162, 0x10b, 0x162, 0x10b, 0x82, 0x29, 0x82, 0x29, +0x82, 0x29, 0x8f, 0x34, 0x8f, 0x34, 0x156, 0xf9, 0x156, 0xf9, 0x341, +0x2e0, 0x341, 0x2e0, 0x4a6, 0x443, 0x4a6, 0x443, 0x5db, 0x577, 0x5db, 0x577, +0x734, 0x6d2, 0x734, 0x6d2, 0x734, 0x6d2, 0x695, 0x635, 0x695, 0x635, 0x3bc, +0x361, 0x3bc, 0x361, 0x20b, 0x1b7, 0x20b, 0x1b7, 0x17f, 0x135, 0x17f, 0x135, +0xab, 0x6c, 0xab, 0x6c, 0xffd2, 0xffa1, 0xffd2, 0xffa1, 0xffd2, 0xffa1, 0xff60, +0xff3f, 0xff60, 0xff3f, 0xffb9, 0xffa8, 0xffb9, 0xffa8, 0x87, 0x86, 0x87, 0x86, +0xffde, 0xffef, 0xffde, 0xffef, 0xfd28, 0xfd49, 0xfd28, 0xfd49, 0xfd28, 0xfd49, 0xfb38, +0xfb69, 0xfb38, 0xfb69, 0xf99e, 0xf9dc, 0xf99e, 0xf9dc, 0xf7b0, 0xf7fa, 0xf7b0, 0xf7fa, +0xf644, 0xf697, 0xf644, 0xf697, 0xf534, 0xf58c, 0xf534, 0xf58c, 0xf573, 0xf5cd, 0xf573, +0xf5cd, 0xf573, 0xf5cd, 0xf570, 0xf5c9, 0xf570, 0xf5c9, 0xf5f5, 0xf649, 0xf5f5, 0xf649, +0xf78e, 0xf7d9, 0xf78e, 0xf7d9, 0xf5ad, 0xf5ec, 0xf5ad, 0xf5ec, 0xf4be, 0xf4ee, 0xf4be, +0xf4ee, 0xf646, 0xf665, 0xf646, 0xf665, 0xf646, 0xf665, 0xf4b8, 0xf4c4, 0xf4b8, 0xf4c4, +0xf4cb, 0xf4c2, 0xf4cb, 0xf4c2, 0xf781, 0xf763, 0xf781, 0xf763, 0xf87c, 0xf849, 0xf87c, +0xf849, 0xfae7, 0xfaa0, 0xfae7, 0xfaa0, 0xfae7, 0xfaa0, 0xfe2f, 0xfdd6, 0xfe2f, 0xfdd6, +0xff86, 0xff1c, 0xff86, 0xff1c, 0x1b6, 0x141, 0x1b6, 0x141, 0x30c, 0x28e, 0x30c, +0x28e, 0x3ff, 0x37e, 0x3ff, 0x37e, 0x541, 0x4c1, 0x541, 0x4c1, 0x541, 0x4c1, +0x543, 0x4c9, 0x543, 0x4c9, 0x659, 0x5ea, 0x659, 0x5ea, 0x75c, 0x6ff, 0x75c, +0x6ff, 0x816, 0x7cf, 0x816, 0x7cf, 0x7f7, 0x7ca, 0x7f7, 0x7ca, 0x791, 0x783, +0x791, 0x783, 0x791, 0x783, 0x62e, 0x643, 0x62e, 0x643, 0x2b8, 0x2f3, 0x2b8, +0x2f3, 0x18a, 0x1ed, 0x18a, 0x1ed, 0x82, 0x10e, 0x82, 0x10e, 0xfe46, 0xfefc, +0xfe46, 0xfefc, 0xfe46, 0xfefc, 0xfd90, 0xfe70, 0xfd90, 0xfe70, 0xfcca, 0xfdd2, 0xfcca, +0xfdd2, 0xfbb1, 0xfcdf, 0xfbb1, 0xfcdf, 0xfa04, 0xfb55, 0xfa04, 0xfb55, 0xf798, 0xf909, +0xf798, 0xf909, 0xf560, 0xf6ed, 0xf560, 0xf6ed, 0xf560, 0xf6ed, 0xf27a, 0xf41f, 0xf27a, +0xf41f, 0xf149, 0xf302, 0xf149, 0xf302, 0xf0fb, 0xf2c2, 0xf0fb, 0xf2c2, 0xefd5, 0xf1a7, +0xefd5, 0xf1a7, 0xefac, 0xf183, 0xefac, 0xf183, 0xf0a7, 0xf281, 0xf0a7, 0xf281, 0xf0a7, +0xf281, 0xf11a, 0xf2f3, 0xf11a, 0xf2f3, 0xf002, 0xf1d7, 0xf002, 0xf1d7, 0xf037, 0xf206, +0xf037, 0xf206, 0xefbd, 0xf185, 0xefbd, 0xf185, 0xef08, 0xf0c8, 0xef08, 0xf0c8, 0xef08, +0xf0c8, 0xeefb, 0xf0b3, 0xeefb, 0xf0b3, 0xeeb1, 0xf063, 0xeeb1, 0xf063, 0xf08b, 0xf237, +0xf08b, 0xf237, 0xf179, 0xf322, 0xf179, 0xf322, 0xf1f3, 0xf39b, 0xf1f3, 0xf39b, 0xf3ed, +0xf597, 0xf3ed, 0xf597, 0xf3ed, 0xf597, 0xf504, 0xf6b4, 0xf504, 0xf6b4, 0xf419, 0xf5d1, +0xf419, 0xf5d1, 0xf3de, 0xf5a2, 0xf3de, 0xf5a2, 0xf4b3, 0xf686, 0xf4b3, 0xf686, 0xf42d, +0xf611, 0xf42d, 0xf611, 0xf45b, 0xf653, 0xf45b, 0xf653, 0xf45b, 0xf653, 0xf4c6, 0xf6d3, +0xf4c6, 0xf6d3, 0xf446, 0xf668, 0xf446, 0xf668, 0xf4c4, 0xf6fc, 0xf4c4, 0xf6fc, 0xf488, +0xf6d5, 0xf488, 0xf6d5, 0xf4de, 0xf73e, 0xf4de, 0xf73e, 0xf4de, 0xf73e, 0xf53a, 0xf7ac, +0xf53a, 0xf7ac, 0xf305, 0xf587, 0xf305, 0xf587, 0xf340, 0xf5cc, 0xf340, 0xf5cc, 0xf240, +0xf4d4, 0xf240, 0xf4d4, 0xefa9, 0xf240, 0xefa9, 0xf240, 0xf053, 0xf2e9, 0xf053, 0xf2e9, +0xf053, 0xf2e9, 0xf0ac, 0xf33c, 0xf0ac, 0xf33c, 0xf08d, 0xf313, 0xf08d, 0xf313, 0xf03e, +0xf2b6, 0xf03e, 0xf2b6, 0xf07b, 0xf2e1, 0xf07b, 0xf2e1, 0xf067, 0xf2b7, 0xf067, 0xf2b7, +0xf067, 0xf2b7, 0xee64, 0xf09c, 0xee64, 0xf09c, 0xedea, 0xf008, 0xedea, 0xf008, 0xeeca, +0xf0cd, 0xeeca, 0xf0cd, 0xeef2, 0xf0db, 0xeef2, 0xf0db, 0xf017, 0xf1e6, 0xf017, 0xf1e6, +0xf15f, 0xf315, 0xf15f, 0xf315, 0xf15f, 0xf315, 0xf2fb, 0xf49c, 0xf2fb, 0xf49c, 0xf3c5, +0xf553, 0xf3c5, 0xf553, 0xf3bd, 0xf53c, 0xf3bd, 0xf53c, 0xf4dc, 0xf651, 0xf4dc, 0xf651, +0xf24d, 0xf3bc, 0xf24d, 0xf3bc, 0xefee, 0xf15c, 0xefee, 0xf15c, 0xefee, 0xf15c, 0xf00e, +0xf180, 0xf00e, 0xf180, 0xefde, 0xf159, 0xefde, 0xf159, 0xefcd, 0xf155, 0xefcd, 0xf155, +0xef67, 0xf0ff, 0xef67, 0xf0ff, 0xf010, 0xf1bc, 0xf010, 0xf1bc, 0xf010, 0xf1bc, 0xf0e2, +0xf2a3, 0xf0e2, 0xf2a3, 0xf0d2, 0xf2aa, 0xf0d2, 0xf2aa, 0xef60, 0xf14f, 0xef60, 0xf14f, +0xed9d, 0xefa2, 0xed9d, 0xefa2, 0xebfe, 0xee17, 0xebfe, 0xee17, 0xeb41, 0xed6b, 0xeb41, +0xed6b, 0xeb41, 0xed6b, 0xea39, 0xec70, 0xea39, 0xec70, 0xe8f5, 0xeb33, 0xe8f5, 0xeb33, +0xe923, 0xeb63, 0xe923, 0xeb63, 0xe9eb, 0xec27, 0xe9eb, 0xec27, 0xebd6, 0xee06, 0xebd6, +0xee06, 0xebd5, 0xedf1, 0xebd5, 0xedf1, 0xebd5, 0xedf1, 0xeb8d, 0xed8f, 0xeb8d, 0xed8f, +0xec2b, 0xee0c, 0xec2b, 0xee0c, 0xeb4a, 0xed04, 0xeb4a, 0xed04, 0xeb21, 0xecad, 0xeb21, +0xecad, 0xecbc, 0xee13, 0xecbc, 0xee13, 0xecbc, 0xee13, 0xedb2, 0xeed0, 0xedb2, 0xeed0, +0xede3, 0xeec6, 0xede3, 0xeec6, 0xef2d, 0xefd0, 0xef2d, 0xefd0, 0xf144, 0xf1a6, 0xf144, +0xf1a6, 0xf35a, 0xf37b, 0xf35a, 0xf37b, 0xf58c, 0xf56c, 0xf58c, 0xf56c, 0xf58c, 0xf56c, +0xf859, 0xf7fa, 0xf859, 0xf7fa, 0xf993, 0xf8f7, 0xf993, 0xf8f7, 0xfc43, 0xfb6e, 0xfc43, +0xfb6e, 0xffe1, 0xfed7, 0xffe1, 0xfed7, 0x23d, 0x103, 0x23d, 0x103, 0x53d, 0x3d7, +0x53d, 0x3d7, 0x53d, 0x3d7, 0x7c6, 0x63b, 0x7c6, 0x63b, 0xae2, 0x936, 0xae2, +0x936, 0xcd3, 0xb0c, 0xcd3, 0xb0c, 0xce2, 0xb04, 0xce2, 0xb04, 0xc97, 0xaa5, +0xc97, 0xaa5, 0xc97, 0xaa5, 0xe67, 0xc67, 0xe67, 0xc67, 0xf20, 0xd14, 0xf20, +0xd14, 0xf84, 0xd6d, 0xf84, 0xd6d, 0x1245, 0x1025, 0x1245, 0x1025, 0x13cd, 0x11a5, +0x13cd, 0x11a5, 0x1623, 0x13f1, 0x1623, 0x13f1, 0x1623, 0x13f1, 0x178c, 0x1550, 0x178c, +0x1550, 0x199c, 0x1755, 0x199c, 0x1755, 0x199f, 0x174a, 0x199f, 0x174a, 0x183f, 0x15da, +0x183f, 0x15da, 0x19d6, 0x175e, 0x19d6, 0x175e, 0x19e9, 0x175d, 0x19e9, 0x175d, 0x19e9, +0x175d, 0x1b58, 0x18b5, 0x1b58, 0x18b5, 0x1cd6, 0x1a1b, 0x1cd6, 0x1a1b, 0x1efc, 0x1c27, +0x1efc, 0x1c27, 0x2192, 0x1ea4, 0x2192, 0x1ea4, 0x21bb, 0x1eb5, 0x21bb, 0x1eb5, 0x21bb, +0x1eb5, 0x22bf, 0x1fa2, 0x22bf, 0x1fa2, 0x2161, 0x1e30, 0x2161, 0x1e30, 0x1f2f, 0x1bee, +0x1f2f, 0x1bee, 0x1ed8, 0x1b8d, 0x1ed8, 0x1b8d, 0x1d70, 0x1a20, 0x1d70, 0x1a20, 0x1db9, +0x1a6c, 0x1db9, 0x1a6c, 0x1db9, 0x1a6c, 0x1d57, 0x1a13, 0x1d57, 0x1a13, 0x1c7e, 0x194d, +0x1c7e, 0x194d, 0x1d15, 0x1a00, 0x1d15, 0x1a00, 0x1a97, 0x17a6, 0x1a97, 0x17a6, 0x18e2, +0x161f, 0x18e2, 0x161f, 0x16d2, 0x1445, 0x16d2, 0x1445, 0x16d2, 0x1445, 0x13d9, 0x118a, +0x13d9, 0x118a, 0x11d0, 0xfc8, 0x11d0, 0xfc8, 0xf41, 0xd86, 0xf41, 0xd86, 0xdf0, +0xc87, 0xdf0, 0xc87, 0xb80, 0xa6e, 0xb80, 0xa6e, 0xb80, 0xa6e, 0x95c, 0x8a4, +0x95c, 0x8a4, 0x80b, 0x7ad, 0x80b, 0x7ad, 0x637, 0x633, 0x637, 0x633, 0x3f7, +0x44b, 0x3f7, 0x44b, 0x185, 0x22e, 0x185, 0x22e, 0xfeaa, 0xffa4, 0xfeaa, 0xffa4, +0xfeaa, 0xffa4, 0xfb60, 0xfca3, 0xfb60, 0xfca3, 0xf89a, 0xfa20, 0xf89a, 0xfa20, 0xf616, +0xf7d7, 0xf616, 0xf7d7, 0xf5eb, 0xf7dd, 0xf5eb, 0xf7dd, 0xf47d, 0xf697, 0xf47d, 0xf697, +0xf2ff, 0xf539, 0xf2ff, 0xf539, 0xf2ff, 0xf539, 0xf266, 0xf4b5, 0xf266, 0xf4b5, 0xef97, +0xf1f2, 0xef97, 0xf1f2, 0xeded, 0xf04d, 0xeded, 0xf04d, 0xeba6, 0xee02, 0xeba6, 0xee02, +0xe9d5, 0xec26, 0xe9d5, 0xec26, 0xe9d5, 0xec26, 0xe9d3, 0xec14, 0xe9d3, 0xec14, 0xe9d8, +0xec04, 0xe9d8, 0xec04, 0xe9bd, 0xebcf, 0xe9bd, 0xebcf, 0xea1b, 0xec12, 0xea1b, 0xec12, +0xec64, 0xee3e, 0xec64, 0xee3e, 0xedd2, 0xef90, 0xedd2, 0xef90, 0xedd2, 0xef90, 0xed85, +0xef27, 0xed85, 0xef27, 0xec1f, 0xeda8, 0xec1f, 0xeda8, 0xea89, 0xebfa, 0xea89, 0xebfa, +0xe9c2, 0xeb1e, 0xe9c2, 0xeb1e, 0xe9e3, 0xeb2e, 0xe9e3, 0xeb2e, 0xeaa6, 0xebe2, 0xeaa6, +0xebe2, 0xeaa6, 0xebe2, 0xeac1, 0xebf1, 0xeac1, 0xebf1, 0xec08, 0xed2f, 0xec08, 0xed2f, +0xedb5, 0xeed5, 0xedb5, 0xeed5, 0xeedd, 0xeff7, 0xeedd, 0xeff7, 0xef86, 0xf09a, 0xef86, +0xf09a, 0xef86, 0xf09a, 0xef5a, 0xf068, 0xef5a, 0xf068, 0xf0df, 0xf1e4, 0xf0df, 0xf1e4, +0xf1d3, 0xf2ce, 0xf1d3, 0xf2ce, 0xf294, 0xf381, 0xf294, 0xf381, 0xf4ea, 0xf5c5, 0xf4ea, +0xf5c5, 0xf66c, 0xf730, 0xf66c, 0xf730, 0xf66c, 0xf730, 0xf8eb, 0xf992, 0xf8eb, 0xf992, +0xfb2e, 0xfbb3, 0xfb2e, 0xfbb3, 0xfbde, 0xfc3b, 0xfbde, 0xfc3b, 0xfcb0, 0xfcdf, 0xfcb0, +0xfcdf, 0xfcba, 0xfcb6, 0xfcba, 0xfcb6, 0xfdb4, 0xfd78, 0xfdb4, 0xfd78, 0xfdb4, 0xfd78, +0xff4c, 0xfed3, 0xff4c, 0xfed3, 0x19f, 0xe7, 0x19f, 0xe7, 0x49a, 0x3a1, 0x49a, +0x3a1, 0x6ed, 0x5b3, 0x6ed, 0x5b3, 0xa21, 0x8a6, 0xa21, 0x8a6, 0xa21, 0x8a6, +0xb13, 0x958, 0xb13, 0x958, 0xc27, 0xa32, 0xc27, 0xa32, 0xece, 0xca4, 0xece, +0xca4, 0xfcd, 0xd74, 0xfcd, 0xd74, 0x10c6, 0xe45, 0x10c6, 0xe45, 0x11f9, 0xf5a, +0x11f9, 0xf5a, 0x11f9, 0xf5a, 0x13fe, 0x114b, 0x13fe, 0x114b, 0x1611, 0x1353, 0x1611, +0x1353, 0x1763, 0x14a5, 0x1763, 0x14a5, 0x17e3, 0x152f, 0x17e3, 0x152f, 0x1840, 0x15a1, +0x1840, 0x15a1, 0x1840, 0x15a1, 0x17b7, 0x1535, 0x17b7, 0x1535, 0x1622, 0x13c7, 0x1622, +0x13c7, 0x1464, 0x1237, 0x1464, 0x1237, 0x128a, 0x1091, 0x128a, 0x1091, 0x1204, 0x1045, +0x1204, 0x1045, 0x1092, 0xf0f, 0x1092, 0xf0f, 0x1092, 0xf0f, 0xee6, 0xda1, 0xee6, +0xda1, 0xe35, 0xd2e, 0xe35, 0xd2e, 0xe87, 0xdbc, 0xe87, 0xdbc, 0xe4a, 0xdb7, +0xe4a, 0xdb7, 0xd05, 0xca7, 0xd05, 0xca7, 0xb0b, 0xad9, 0xb0b, 0xad9, 0xb0b, +0xad9, 0x7b7, 0x7ac, 0x7b7, 0x7ac, 0x6d8, 0x6ea, 0x6d8, 0x6ea, 0x650, 0x677, +0x650, 0x677, 0x60e, 0x641, 0x60e, 0x641, 0x661, 0x698, 0x661, 0x698, 0x661, +0x698, 0x64d, 0x67e, 0x64d, 0x67e, 0x761, 0x783, 0x761, 0x783, 0x7e8, 0x7f5, +0x7e8, 0x7f5, 0x6e4, 0x6d6, 0x6e4, 0x6d6, 0x5a8, 0x579, 0x5a8, 0x579, 0x589, +0x535, 0x589, 0x535, 0x589, 0x535, 0x4af, 0x433, 0x4af, 0x433, 0x56f, 0x4ca, +0x56f, 0x4ca, 0x6f5, 0x627, 0x6f5, 0x627, 0x700, 0x60b, 0x700, 0x60b, 0x88a, +0x770, 0x88a, 0x770, 0xb0d, 0x9d1, 0xb0d, 0x9d1, 0xb0d, 0x9d1, 0xd2e, 0xbd5, +0xd2e, 0xbd5, 0xd9a, 0xc2a, 0xd9a, 0xc2a, 0xc8e, 0xb0a, 0xc8e, 0xb0a, 0xd65, +0xbd3, 0xd65, 0xbd3, 0xf15, 0xd7c, 0xf15, 0xd7c, 0xf15, 0xd7c, 0xf42, 0xda5, +0xf42, 0xda5, 0xfc4, 0xe27, 0xfc4, 0xe27, 0xf8e, 0xdf5, 0xf8e, 0xdf5, 0xf46, +0xdb4, 0xf46, 0xdb4, 0xf18, 0xd8e, 0xf18, 0xd8e, 0xef3, 0xd71, 0xef3, 0xd71, +0xef3, 0xd71, 0xe69, 0xcef, 0xe69, 0xcef, 0xc97, 0xb22, 0xc97, 0xb22, 0xcb3, +0xb40, 0xcb3, 0xb40, 0xcf9, 0xb85, 0xcf9, 0xb85, 0xd23, 0xba9, 0xd23, 0xba9, +0xcf3, 0xb6e, 0xcf3, 0xb6e, 0xcf3, 0xb6e, 0xd1d, 0xb87, 0xd1d, 0xb87, 0xe64, +0xcb8, 0xe64, 0xcb8, 0xf48, 0xd81, 0xf48, 0xd81, 0xf95, 0xdae, 0xf95, 0xdae, +0xeb0, 0xca4, 0xeb0, 0xca4, 0xeb0, 0xca4, 0xe73, 0xc40, 0xe73, 0xc40, 0xef2, +0xc95, 0xef2, 0xc95, 0x10bb, 0xe35, 0x10bb, 0xe35, 0x11e1, 0xf31, 0x11e1, 0xf31, +0x12e9, 0x1013, 0x12e9, 0x1013, 0x1465, 0x116c, 0x1465, 0x116c, 0x1465, 0x116c, 0x1540, +0x1229, 0x1540, 0x1229, 0x1801, 0x14d4, 0x1801, 0x14d4, 0x1882, 0x1546, 0x1882, 0x1546, +0x1734, 0x13f3, 0x1734, 0x13f3, 0x16d7, 0x139c, 0x16d7, 0x139c, 0x145d, 0x1131, 0x145d, +0x1131, 0x145d, 0x1131, 0x12c4, 0xfb3, 0x12c4, 0xfb3, 0x12fe, 0x1014, 0x12fe, 0x1014, +0x1149, 0xe91, 0x1149, 0xe91, 0xfc3, 0xd47, 0xfc3, 0xd47, 0xef6, 0xcc0, 0xef6, +0xcc0, 0xef6, 0xcc0, 0xd68, 0xb81, 0xd68, 0xb81, 0xae1, 0x950, 0xae1, 0x950, +0x7ce, 0x698, 0x7ce, 0x698, 0x551, 0x47b, 0x551, 0x47b, 0x320, 0x2ac, 0x320, +0x2ac, 0x8b, 0x7a, 0x8b, 0x7a, 0x8b, 0x7a, 0xfd5b, 0xfdac, 0xfd5b, 0xfdac, +0xfacc, 0xfb7b, 0xfacc, 0xfb7b, 0xf831, 0xf93a, 0xf831, 0xf93a, 0xf741, 0xf89e, 0xf741, +0xf89e, 0xf71d, 0xf8c6, 0xf71d, 0xf8c6, 0xf3b5, 0xf5a3, 0xf3b5, 0xf5a3, 0xf3b5, 0xf5a3, +0xf022, 0xf24b, 0xf022, 0xf24b, 0xefbe, 0xf218, 0xefbe, 0xf218, 0xee4c, 0xf0cd, 0xee4c, +0xf0cd, 0xec40, 0xeede, 0xec40, 0xeede, 0xecef, 0xefa0, 0xecef, 0xefa0, 0xecef, 0xefa0, +0xeb34, 0xedf0, 0xeb34, 0xedf0, 0xeb11, 0xedd0, 0xeb11, 0xedd0, 0xecc6, 0xef81, 0xecc6, +0xef81, 0xec4f, 0xeefe, 0xec4f, 0xeefe, 0xecf2, 0xef92, 0xecf2, 0xef92, 0xed3f, 0xefcb, +0xed3f, 0xefcb, 0xed3f, 0xefcb, 0xee85, 0xf0fa, 0xee85, 0xf0fa, 0xf0bd, 0xf31b, 0xf0bd, +0xf31b, 0xf296, 0xf4dc, 0xf296, 0xf4dc, 0xf453, 0xf681, 0xf453, 0xf681, 0xf5cc, 0xf7e4, +0xf5cc, 0xf7e4, 0xf7be, 0xf9c3, 0xf7be, 0xf9c3, 0xf7be, 0xf9c3, 0xf923, 0xfb17, 0xf923, +0xfb17, 0xfa31, 0xfc15, 0xfa31, 0xfc15, 0xfae0, 0xfcb9, 0xfae0, 0xfcb9, 0xf98b, 0xfb5a, +0xf98b, 0xfb5a, 0xf8bc, 0xfa83, 0xf8bc, 0xfa83, 0xf8bc, 0xfa83, 0xf944, 0xfb04, 0xf944, +0xfb04, 0xfa14, 0xfbcf, 0xfa14, 0xfbcf, 0xfae7, 0xfc9c, 0xfae7, 0xfc9c, 0xfa6d, 0xfc1a, +0xfa6d, 0xfc1a, 0xfaf7, 0xfc9b, 0xfaf7, 0xfc9b, 0xfaec, 0xfc84, 0xfaec, 0xfc84, 0xfaec, +0xfc84, 0xfa61, 0xfbea, 0xfa61, 0xfbea, 0xf9df, 0xfb53, 0xf9df, 0xfb53, 0xf7db, 0xf935, +0xf7db, 0xf935, 0xf649, 0xf785, 0xf649, 0xf785, 0xf593, 0xf6aa, 0xf593, 0xf6aa, 0xf54f, +0xf63c, 0xf54f, 0xf63c, 0xf54f, 0xf63c, 0xf501, 0xf5be, 0xf501, 0xf5be, 0xf559, 0xf5e1, +0xf559, 0xf5e1, 0xf5a6, 0xf5f5, 0xf5a6, 0xf5f5, 0xf717, 0xf729, 0xf717, 0xf729, 0xf7f3, +0xf7c7, 0xf7f3, 0xf7c7, 0xf7f3, 0xf7c7, 0xf83e, 0xf7d2, 0xf83e, 0xf7d2, 0xf9be, 0xf913, +0xf9be, 0xf913, 0xf9b1, 0xf8c8, 0xf9b1, 0xf8c8, 0xfa04, 0xf8e1, 0xfa04, 0xf8e1, 0xfb60, +0xfa07, 0xfb60, 0xfa07, 0xfcec, 0xfb64, 0xfcec, 0xfb64, 0xfcec, 0xfb64, 0xfe0f, 0xfc60, +0xfe0f, 0xfc60, 0xfff5, 0xfe27, 0xfff5, 0xfe27, 0x1d4, 0xfff3, 0x1d4, 0xfff3, 0x1fd, +0x13, 0x1fd, 0x13, 0x163, 0xff7c, 0x163, 0xff7c, 0x95, 0xfebd, 0x95, 0xfebd, +0x95, 0xfebd, 0xbb, 0xfefe, 0xbb, 0xfefe, 0x156, 0xffc0, 0x156, 0xffc0, 0x1a0, +0x3d, 0x1a0, 0x3d, 0x127, 0x1, 0x127, 0x1, 0x12b, 0x4d, 0x12b, 0x4d, +0x12b, 0x4d, 0xffbb, 0xff2c, 0xffbb, 0xff2c, 0xfe3b, 0xfe03, 0xfe3b, 0xfe03, 0xfd21, +0xfd45, 0xfd21, 0xfd45, 0xf8b6, 0xf93a, 0xf8b6, 0xf93a, 0xf668, 0xf74e, 0xf668, 0xf74e, +0xf5b7, 0xf6fe, 0xf5b7, 0xf6fe, 0xf5b7, 0xf6fe, 0xf304, 0xf4ac, 0xf304, 0xf4ac, 0xf127, +0xf32d, 0xf127, 0xf32d, 0xef1b, 0xf17a, 0xef1b, 0xf17a, 0xeda7, 0xf058, 0xeda7, 0xf058, +0xecff, 0xeffb, 0xecff, 0xeffb, 0xecff, 0xeffb, 0xeb00, 0xee40, 0xeb00, 0xee40, 0xea35, +0xedb0, 0xea35, 0xedb0, 0xe7c5, 0xeb72, 0xe7c5, 0xeb72, 0xe511, 0xe8e6, 0xe511, 0xe8e6, +0xe515, 0xe909, 0xe515, 0xe909, 0xe471, 0xe87b, 0xe471, 0xe87b, 0xe471, 0xe87b, 0xe3af, +0xe7c7, 0xe3af, 0xe7c7, 0xe274, 0xe692, 0xe274, 0xe692, 0xe266, 0xe683, 0xe266, 0xe683, +0xe1fc, 0xe614, 0xe1fc, 0xe614, 0xe1ca, 0xe5d7, 0xe1ca, 0xe5d7, 0xe297, 0xe697, 0xe297, +0xe697, 0xe297, 0xe697, 0xe163, 0xe553, 0xe163, 0xe553, 0xe1c9, 0xe5a7, 0xe1c9, 0xe5a7, +0xe273, 0xe63f, 0xe273, 0xe63f, 0xe21d, 0xe5d8, 0xe21d, 0xe5d8, 0xe281, 0xe62a, 0xe281, +0xe62a, 0xe281, 0xe62a, 0xe2c6, 0xe660, 0xe2c6, 0xe660, 0xe30d, 0xe699, 0xe30d, 0xe699, +0xe3b3, 0xe732, 0xe3b3, 0xe732, 0xe479, 0xe7ed, 0xe479, 0xe7ed, 0xe4ed, 0xe856, 0xe4ed, +0xe856, 0xe518, 0xe877, 0xe518, 0xe877, 0xe518, 0xe877, 0xe564, 0xe8b7, 0xe564, 0xe8b7, +0xe662, 0xe9a8, 0xe662, 0xe9a8, 0xe762, 0xea99, 0xe762, 0xea99, 0xe7cd, 0xeaf1, 0xe7cd, +0xeaf1, 0xe7a7, 0xeab4, 0xe7a7, 0xeab4, 0xe7ec, 0xeadb, 0xe7ec, 0xeadb, 0xe7ec, 0xeadb, +0xe9f5, 0xecc1, 0xe9f5, 0xecc1, 0xebcc, 0xee6e, 0xebcc, 0xee6e, 0xec4c, 0xeebd, 0xec4c, +0xeebd, 0xecde, 0xef15, 0xecde, 0xef15, 0xedda, 0xefd0, 0xedda, 0xefd0, 0xedda, 0xefd0, +0xef25, 0xf0d2, 0xef25, 0xf0d2, 0xef78, 0xf0d5, 0xef78, 0xf0d5, 0xf05a, 0xf160, 0xf05a, +0xf160, 0xf12f, 0xf1d9, 0xf12f, 0xf1d9, 0xf22d, 0xf276, 0xf22d, 0xf276, 0xf5a0, 0xf585, +0xf5a0, 0xf585, 0xf5a0, 0xf585, 0xf6d3, 0xf652, 0xf6d3, 0xf652, 0xf7f0, 0xf709, 0xf7f0, +0xf709, 0xface, 0xf982, 0xface, 0xf982, 0xfd2b, 0xfb7e, 0xfd2b, 0xfb7e, 0x70, 0xfe67, +0x70, 0xfe67, 0x3c4, 0x165, 0x3c4, 0x165, 0x3c4, 0x165, 0x6cc, 0x41f, 0x6cc, +0x41f, 0xa5d, 0x76b, 0xa5d, 0x76b, 0xde5, 0xab8, 0xde5, 0xab8, 0x100f, 0xcb2, +0x100f, 0xcb2, 0x12c1, 0xf3f, 0x12c1, 0xf3f, 0x12c1, 0xf3f, 0x14a3, 0x1109, 0x14a3, +0x1109, 0x151d, 0x1175, 0x151d, 0x1175, 0x16e0, 0x1336, 0x16e0, 0x1336, 0x17d9, 0x1438, +0x17d9, 0x1438, 0x17bd, 0x142f, 0x17bd, 0x142f, 0x180a, 0x1497, 0x180a, 0x1497, 0x180a, +0x1497, 0x18d6, 0x1587, 0x18d6, 0x1587, 0x19d2, 0x16ac, 0x19d2, 0x16ac, 0x1a1d, 0x1724, +0x1a1d, 0x1724, 0x1a10, 0x1747, 0x1a10, 0x1747, 0x19ed, 0x1755, 0x19ed, 0x1755, 0x1962, +0x16fb, 0x1962, 0x16fb, 0x1962, 0x16fb, 0x18c8, 0x1690, 0x18c8, 0x1690, 0x1876, 0x166a, +0x1876, 0x166a, 0x18f6, 0x1712, 0x18f6, 0x1712, 0x17d2, 0x1610, 0x17d2, 0x1610, 0x17c0, +0x161b, 0x17c0, 0x161b, 0x17c0, 0x161b, 0x1937, 0x17a8, 0x1937, 0x17a8, 0x182e, 0x16af, +0x182e, 0x16af, 0x1858, 0x16e3, 0x1858, 0x16e3, 0x178f, 0x161e, 0x178f, 0x161e, 0x1590, +0x141d, 0x1590, 0x141d, 0x14a0, 0x1327, 0x14a0, 0x1327, 0x14a0, 0x1327, 0x13f3, 0x1271, +0x13f3, 0x1271, 0x1389, 0x11fb, 0x1389, 0x11fb, 0x1231, 0x1096, 0x1231, 0x1096, 0x119e, +0xff7, 0x119e, 0xff7, 0x1258, 0x10a6, 0x1258, 0x10a6, 0x12d2, 0x1117, 0x12d2, 0x1117, +0x12d2, 0x1117, 0x1219, 0x1059, 0x1219, 0x1059, 0x119c, 0xfdb, 0x119c, 0xfdb, 0x10f2, +0xf36, 0x10f2, 0xf36, 0x1080, 0xece, 0x1080, 0xece, 0xffc, 0xe5b, 0xffc, 0xe5b, +0xffc, 0xe5b, 0xe48, 0xcbd, 0xe48, 0xcbd, 0xd00, 0xb91, 0xd00, 0xb91, 0xc27, +0xadb, 0xc27, 0xadb, 0xbc3, 0xa9d, 0xbc3, 0xa9d, 0xaae, 0x9b3, 0xaae, 0x9b3, +0x999, 0x8cb, 0x999, 0x8cb, 0x999, 0x8cb, 0x7f8, 0x75a, 0x7f8, 0x75a, 0x5d3, +0x565, 0x5d3, 0x565, 0x51f, 0x4e1, 0x51f, 0x4e1, 0x4b6, 0x4a6, 0x4b6, 0x4a6, +0x377, 0x391, 0x377, 0x391, 0x255, 0x296, 0x255, 0x296, 0x255, 0x296, 0x1e8, +0x24b, 0x1e8, 0x24b, 0x1bf, 0x23c, 0x1bf, 0x23c, 0x16e, 0x200, 0x16e, 0x200, +0xffaa, 0x4b, 0xffaa, 0x4b, 0xfe62, 0xff09, 0xfe62, 0xff09, 0xfe62, 0xff09, 0xfdc9, +0xfe71, 0xfdc9, 0xfe71, 0xfdd7, 0xfe78, 0xfdd7, 0xfe78, 0xfe27, 0xfebc, 0xfe27, 0xfebc, +0xfde1, 0xfe65, 0xfde1, 0xfe65, 0xfe99, 0xff07, 0xfe99, 0xff07, 0xfef6, 0xff4d, 0xfef6, +0xff4d, 0xfef6, 0xff4d, 0xfef6, 0xff33, 0xfef6, 0xff33, 0xfedb, 0xfefe, 0xfedb, 0xfefe, +0xfe49, 0xfe53, 0xfe49, 0xfe53, 0xfd82, 0xfd76, 0xfd82, 0xfd76, 0xfd77, 0xfd59, 0xfd77, +0xfd59, 0xfcc7, 0xfc9b, 0xfcc7, 0xfc9b, 0xfcc7, 0xfc9b, 0xfb3f, 0xfb0b, 0xfb3f, 0xfb0b, +0xfa74, 0xfa3f, 0xfa74, 0xfa3f, 0xf9c1, 0xf991, 0xf9c1, 0xf991, 0xf953, 0xf930, 0xf953, +0xf930, 0xf8ce, 0xf8bf, 0xf8ce, 0xf8bf, 0xf8ce, 0xf8bf, 0xf87b, 0xf886, 0xf87b, 0xf886, +0xf7a2, 0xf7cf, 0xf7a2, 0xf7cf, 0xf724, 0xf777, 0xf724, 0xf777, 0xf6e5, 0xf763, 0xf6e5, +0xf763, 0xf755, 0xf802, 0xf755, 0xf802, 0xf916, 0xf9f4, 0xf916, 0xf9f4, 0xf916, 0xf9f4, +0xf89a, 0xf9aa, 0xf89a, 0xf9aa, 0xf7ea, 0xf92a, 0xf7ea, 0xf92a, 0xf7aa, 0xf918, 0xf7aa, +0xf918, 0xf636, 0xf7cf, 0xf636, 0xf7cf, 0xf59b, 0xf759, 0xf59b, 0xf759, 0xf441, 0xf61d, +0xf441, 0xf61d, 0xf441, 0xf61d, 0xf2af, 0xf4a1, 0xf2af, 0xf4a1, 0xf2d1, 0xf4d2, 0xf2d1, +0xf4d2, 0xf251, 0xf457, 0xf251, 0xf457, 0xf31c, 0xf51d, 0xf31c, 0xf51d, 0xf3c5, 0xf5b8, +0xf3c5, 0xf5b8, 0xf3c5, 0xf5b8, 0xf2a0, 0xf47c, 0xf2a0, 0xf47c, 0xf2b3, 0xf46f, 0xf2b3, +0xf46f, 0xf28c, 0xf41f, 0xf28c, 0xf41f, 0xf228, 0xf38a, 0xf228, 0xf38a, 0xf1d6, 0xf302, +0xf1d6, 0xf302, 0xf274, 0xf363, 0xf274, 0xf363, 0xf274, 0xf363, 0xf432, 0xf4e1, 0xf432, +0xf4e1, 0xf5af, 0xf61b, 0xf5af, 0xf61b, 0xf75b, 0xf784, 0xf75b, 0xf784, 0xf93f, 0xf925, +0xf93f, 0xf925, 0xfbbd, 0xfb62, 0xfbbd, 0xfb62, 0xfbbd, 0xfb62, 0xfe9b, 0xfe01, 0xfe9b, +0xfe01, 0xd8, 0x3, 0xd8, 0x3, 0x1cd, 0xc1, 0x1cd, 0xc1, 0x201, 0xc4, +0x201, 0xc4, 0x2b6, 0x14d, 0x2b6, 0x14d, 0x34e, 0x1c0, 0x34e, 0x1c0, 0x34e, +0x1c0, 0x2ca, 0x11d, 0x2ca, 0x11d, 0x2e9, 0x123, 0x2e9, 0x123, 0x303, 0x128, +0x303, 0x128, 0x2fe, 0x113, 0x2fe, 0x113, 0x463, 0x26c, 0x463, 0x26c, 0x5be, +0x3bd, 0x5be, 0x3bd, 0x5be, 0x3bd, 0x5e0, 0x3d7, 0x5e0, 0x3d7, 0x53d, 0x32d, +0x53d, 0x32d, 0x578, 0x361, 0x578, 0x361, 0x58f, 0x370, 0x58f, 0x370, 0x63f, +0x414, 0x63f, 0x414, 0x63f, 0x414, 0x7c0, 0x588, 0x7c0, 0x588, 0x826, 0x5dd, +0x826, 0x5dd, 0x933, 0x6d6, 0x933, 0x6d6, 0xb16, 0x8a1, 0xb16, 0x8a1, 0xcd3, +0xa42, 0xcd3, 0xa42, 0xd31, 0xa7f, 0xd31, 0xa7f, 0xd31, 0xa7f, 0xced, 0xa18, +0xced, 0xa18, 0xefd, 0xc04, 0xefd, 0xc04, 0x1147, 0xe26, 0x1147, 0xe26, 0x1269, +0xf21, 0x1269, 0xf21, 0x13a7, 0x1038, 0x13a7, 0x1038, 0x1453, 0x10bf, 0x1453, 0x10bf, +0x1453, 0x10bf, 0x15fd, 0x1246, 0x15fd, 0x1246, 0x17b9, 0x13e4, 0x17b9, 0x13e4, 0x1997, +0x15a9, 0x1997, 0x15a9, 0x1bb1, 0x17b1, 0x1bb1, 0x17b1, 0x1bf1, 0x17e5, 0x1bf1, 0x17e5, +0x1bf1, 0x17e5, 0x1cfe, 0x18ef, 0x1cfe, 0x18ef, 0x1e3b, 0x1a31, 0x1e3b, 0x1a31, 0x1edf, +0x1ae4, 0x1edf, 0x1ae4, 0x1eb8, 0x1ad4, 0x1eb8, 0x1ad4, 0x1e2f, 0x1a6b, 0x1e2f, 0x1a6b, +0x1dff, 0x1a64, 0x1dff, 0x1a64, 0x1dff, 0x1a64, 0x1cce, 0x1962, 0x1cce, 0x1962, 0x1bf5, +0x18c2, 0x1bf5, 0x18c2, 0x1a60, 0x176a, 0x1a60, 0x176a, 0x1831, 0x157d, 0x1831, 0x157d, +0x172a, 0x14bb, 0x172a, 0x14bb, 0x15e6, 0x13bf, 0x15e6, 0x13bf, 0x15e6, 0x13bf, 0x14d7, +0x12f8, 0x14d7, 0x12f8, 0x13ae, 0x1216, 0x13ae, 0x1216, 0x11cd, 0x107a, 0x11cd, 0x107a, +0x11ca, 0x10b9, 0x11ca, 0x10b9, 0x1125, 0x1052, 0x1125, 0x1052, 0x1125, 0x1052, 0xf91, +0xef6, 0xf91, 0xef6, 0xec8, 0xe5f, 0xec8, 0xe5f, 0xd15, 0xcd6, 0xd15, 0xcd6, +0xd0d, 0xcf3, 0xd0d, 0xcf3, 0xc97, 0xc9a, 0xc97, 0xc9a, 0xae7, 0xaff, 0xae7, +0xaff, 0xae7, 0xaff, 0xa68, 0xa8f, 0xa68, 0xa8f, 0x997, 0x9c6, 0x997, 0x9c6, +0x901, 0x933, 0x901, 0x933, 0x97c, 0x9ad, 0x97c, 0x9ad, 0x947, 0x972, 0x947, +0x972, 0x761, 0x785, 0x761, 0x785, 0x761, 0x785, 0x6ab, 0x6c6, 0x6ab, 0x6c6, +0x71c, 0x72e, 0x71c, 0x72e, 0x725, 0x72f, 0x725, 0x72f, 0x7e3, 0x7e6, 0x7e3, +0x7e6, 0x83c, 0x83b, 0x83c, 0x83b, 0x83c, 0x83b, 0x7a5, 0x7a3, 0x7a5, 0x7a3, +0x7f0, 0x7f2, 0x7f0, 0x7f2, 0x7ac, 0x7b5, 0x7ac, 0x7b5, 0x674, 0x68a, 0x674, +0x68a, 0x520, 0x545, 0x520, 0x545, 0x3da, 0x414, 0x3da, 0x414, 0x3da, 0x414, +0x408, 0x45a, 0x408, 0x45a, 0x371, 0x3de, 0x371, 0x3de, 0x1cf, 0x25b, 0x1cf, +0x25b, 0x7d, 0x129, 0x7d, 0x129, 0xfeef, 0xffbb, 0xfeef, 0xffbb, 0xfd1b, 0xfe06, +0xfd1b, 0xfe06, 0xfd1b, 0xfe06, 0xfc76, 0xfd80, 0xfc76, 0xfd80, 0xfb54, 0xfc7b, 0xfb54, +0xfc7b, 0xf7b0, 0xf8f1, 0xf7b0, 0xf8f1, 0xf622, 0xf77a, 0xf622, 0xf77a, 0xf676, 0xf7e0, +0xf676, 0xf7e0, 0xf676, 0xf7e0, 0xf60e, 0xf786, 0xf60e, 0xf786, 0xf517, 0xf697, 0xf517, +0xf697, 0xf41f, 0xf5a3, 0xf41f, 0xf5a3, 0xf41c, 0xf59e, 0xf41c, 0xf59e, 0xf40b, 0xf587, +0xf40b, 0xf587, 0xf44e, 0xf5c0, 0xf44e, 0xf5c0, 0xf44e, 0xf5c0, 0xf514, 0xf678, 0xf514, +0xf678, 0xf484, 0xf5d8, 0xf484, 0xf5d8, 0xf546, 0xf687, 0xf546, 0xf687, 0xf90c, 0xfa3a, +0xf90c, 0xfa3a, 0xfbad, 0xfcc6, 0xfbad, 0xfcc6, 0xfd16, 0xfe1e, 0xfd16, 0xfe1e, 0xfd16, +0xfe1e, 0xfe6c, 0xff63, 0xfe6c, 0xff63, 0xffbb, 0xa4, 0xffbb, 0xa4, 0x6d, 0x14c, +0x6d, 0x14c, 0x33, 0x10d, 0x33, 0x10d, 0x4c, 0x125, 0x4c, 0x125, 0x4c, +0x125, 0x1f, 0xfd, 0x1f, 0xfd, 0x94, 0x17d, 0x94, 0x17d, 0x104, 0x1fd, +0x104, 0x1fd, 0x184, 0x293, 0x184, 0x293, 0x186, 0x2af, 0x186, 0x2af, 0xffb2, +0xfa, 0xffb2, 0xfa, 0xffb2, 0xfa, 0xff42, 0xad, 0xff42, 0xad, 0xfeed, 0x7e, +0xfeed, 0x7e, 0xfd2e, 0xfee5, 0xfd2e, 0xfee5, 0xfbef, 0xfdcf, 0xfbef, 0xfdcf, 0xf9c1, +0xfbc8, 0xf9c1, 0xfbc8, 0xf7ac, 0xf9db, 0xf7ac, 0xf9db, 0xf7ac, 0xf9db, 0xf5ca, 0xf81c, +0xf5ca, 0xf81c, 0xf2b5, 0xf527, 0xf2b5, 0xf527, 0xf162, 0xf3f1, 0xf162, 0xf3f1, 0xefcc, +0xf272, 0xefcc, 0xf272, 0xed72, 0xf02a, 0xed72, 0xf02a, 0xed72, 0xf02a, 0xed10, 0xefd4, +0xed10, 0xefd4, 0xec70, 0xef39, 0xec70, 0xef39, 0xeab3, 0xed7a, 0xeab3, 0xed7a, 0xea0d, +0xeccc, 0xea0d, 0xeccc, 0xea60, 0xed11, 0xea60, 0xed11, 0xe9af, 0xec4d, 0xe9af, 0xec4d, +0xe9af, 0xec4d, 0xea1a, 0xec9f, 0xea1a, 0xec9f, 0xea1e, 0xec87, 0xea1e, 0xec87, 0xe948, +0xeb90, 0xe948, 0xeb90, 0xea22, 0xec48, 0xea22, 0xec48, 0xea7a, 0xec7d, 0xea7a, 0xec7d, +0xebc2, 0xeda1, 0xebc2, 0xeda1, 0xebc2, 0xeda1, 0xecfe, 0xeeb9, 0xecfe, 0xeeb9, 0xed18, +0xeeb3, 0xed18, 0xeeb3, 0xef5e, 0xf0da, 0xef5e, 0xf0da, 0xf274, 0xf3d4, 0xf274, 0xf3d4, +0xf3be, 0xf507, 0xf3be, 0xf507, 0xf3be, 0xf507, 0xf4ac, 0xf5e1, 0xf4ac, 0xf5e1, 0xf636, +0xf75c, 0xf636, 0xf75c, 0xf661, 0xf77d, 0xf661, 0xf77d, 0xf749, 0xf861, 0xf749, 0xf861, +0xf8fd, 0xfa14, 0xf8fd, 0xfa14, 0xf7fc, 0xf917, 0xf7fc, 0xf917, 0xf7fc, 0xf917, 0xf6d2, +0xf7f5, 0xf6d2, 0xf7f5, 0xf748, 0xf876, 0xf748, 0xf876, 0xf831, 0xf96d, 0xf831, 0xf96d, +0xf8a4, 0xf9ef, 0xf8a4, 0xf9ef, 0xf7f0, 0xf94b, 0xf7f0, 0xf94b, 0xf7f0, 0xf94b, 0xf825, +0xf992, 0xf825, 0xf992, 0xf8e1, 0xfa5e, 0xf8e1, 0xfa5e, 0xf853, 0xf9e1, 0xf853, 0xf9e1, +0xf80a, 0xf9a5, 0xf80a, 0xf9a5, 0xf775, 0xf91c, 0xf775, 0xf91c, 0xf58a, 0xf73b, 0xf58a, +0xf73b, 0xf58a, 0xf73b, 0xf4fa, 0xf6b2, 0xf4fa, 0xf6b2, 0xf686, 0xf842, 0xf686, 0xf842, +0xf5d1, 0xf78f, 0xf5d1, 0xf78f, 0xf3f9, 0xf5b6, 0xf3f9, 0xf5b6, 0xf4a8, 0xf661, 0xf4a8, +0xf661, 0xf50b, 0xf6bf, 0xf50b, 0xf6bf, 0xf50b, 0xf6bf, 0xf4d9, 0xf687, 0xf4d9, 0xf687, +0xf4e0, 0xf687, 0xf4e0, 0xf687, 0xf442, 0xf5e2, 0xf442, 0xf5e2, 0xf433, 0xf5cc, 0xf433, +0xf5cc, 0xf4d3, 0xf666, 0xf4d3, 0xf666, 0xf4d3, 0xf666, 0xf529, 0xf6b9, 0xf529, 0xf6b9, +0xf5bd, 0xf74c, 0xf5bd, 0xf74c, 0xf581, 0xf712, 0xf581, 0xf712, 0xf464, 0xf5fa, 0xf464, +0xf5fa, 0xf490, 0xf62f, 0xf490, 0xf62f, 0xf455, 0xf600, 0xf455, 0xf600, 0xf455, 0xf600, +0xf3ef, 0xf5aa, 0xf3ef, 0xf5aa, 0xf37b, 0xf549, 0xf37b, 0xf549, 0xf2c9, 0xf4ae, 0xf2c9, +0xf4ae, 0xf2c4, 0xf4c1, 0xf2c4, 0xf4c1, 0xf171, 0xf389, 0xf171, 0xf389, 0xf056, 0xf289, +0xf056, 0xf289, 0xf056, 0xf289, 0xefb2, 0xf202, 0xefb2, 0xf202, 0xeef2, 0xf15d, 0xeef2, +0xf15d, 0xeed8, 0xf15c, 0xeed8, 0xf15c, 0xee20, 0xf0bb, 0xee20, 0xf0bb, 0xec86, 0xef35, +0xec86, 0xef35, 0xec86, 0xef35, 0xeaa7, 0xed65, 0xeaa7, 0xed65, 0xe9c3, 0xec8b, 0xe9c3, +0xec8b, 0xe9a5, 0xec6f, 0xe9a5, 0xec6f, 0xe917, 0xebdf, 0xe917, 0xebdf, 0xe846, 0xeb03, +0xe846, 0xeb03, 0xe79e, 0xea49, 0xe79e, 0xea49, 0xe79e, 0xea49, 0xe6d3, 0xe964, 0xe6d3, +0xe964, 0xe62b, 0xe89b, 0xe62b, 0xe89b, 0xe662, 0xe8a9, 0xe662, 0xe8a9, 0xe654, 0xe86b, +0xe654, 0xe86b, 0xe564, 0xe744, 0xe564, 0xe744, 0xe613, 0xe7b6, 0xe613, 0xe7b6, 0xe613, +0xe7b6, 0xe845, 0xe9a7, 0xe845, 0xe9a7, 0xe9dd, 0xeaf9, 0xe9dd, 0xeaf9, 0xeb4a, 0xec1d, +0xeb4a, 0xec1d, 0xed66, 0xedee, 0xed66, 0xedee, 0xf020, 0xf05b, 0xf020, 0xf05b, 0xf020, +0xf05b, 0xf24d, 0xf23b, 0xf24d, 0xf23b, 0xf5c3, 0xf566, 0xf5c3, 0xf566, 0xf904, 0xf85d, +0xf904, 0xf85d, 0xfafc, 0xfa0e, 0xfafc, 0xfa0e, 0xfee1, 0xfdaf, 0xfee1, 0xfdaf, 0x224, +0xb2, 0x224, 0xb2, 0x224, 0xb2, 0x44b, 0x29e, 0x44b, 0x29e, 0x573, 0x390, +0x573, 0x390, 0x686, 0x471, 0x686, 0x471, 0x8f9, 0x6b8, 0x8f9, 0x6b8, 0xaa2, +0x839, 0xaa2, 0x839, 0xbec, 0x961, 0xbec, 0x961, 0xbec, 0x961, 0xdd5, 0xb2c, +0xdd5, 0xb2c, 0x1097, 0xdd4, 0x1097, 0xdd4, 0x12a5, 0xfcb, 0x12a5, 0xfcb, 0x14db, +0x11ee, 0x14db, 0x11ee, 0x172c, 0x142e, 0x172c, 0x142e, 0x172c, 0x142e, 0x1780, 0x1474, +0x1780, 0x1474, 0x183b, 0x1522, 0x183b, 0x1522, 0x1950, 0x162c, 0x1950, 0x162c, 0x19bb, +0x168c, 0x19bb, 0x168c, 0x1a30, 0x16f8, 0x1a30, 0x16f8, 0x1acd, 0x178b, 0x1acd, 0x178b, +0x1acd, 0x178b, 0x1bda, 0x1891, 0x1bda, 0x1891, 0x1c8f, 0x193e, 0x1c8f, 0x193e, 0x1d25, +0x19cd, 0x1d25, 0x19cd, 0x1d6c, 0x1a10, 0x1d6c, 0x1a10, 0x1cd5, 0x1975, 0x1cd5, 0x1975, +0x1d9e, 0x1a3d, 0x1d9e, 0x1a3d, 0x1d9e, 0x1a3d, 0x1e51, 0x1af3, 0x1e51, 0x1af3, 0x1e1c, +0x1ac3, 0x1e1c, 0x1ac3, 0x1e67, 0x1b18, 0x1e67, 0x1b18, 0x1e3e, 0x1afd, 0x1e3e, 0x1afd, +0x1e6f, 0x1b42, 0x1e6f, 0x1b42, 0x1e6f, 0x1b42, 0x1e6a, 0x1b57, 0x1e6a, 0x1b57, 0x1e24, +0x1b30, 0x1e24, 0x1b30, 0x1dcd, 0x1b00, 0x1dcd, 0x1b00, 0x1c9b, 0x19fc, 0x1c9b, 0x19fc, +0x1b68, 0x18fd, 0x1b68, 0x18fd, 0x1a72, 0x1841, 0x1a72, 0x1841, 0x1a72, 0x1841, 0x1911, +0x1720, 0x1911, 0x1720, 0x1781, 0x15d6, 0x1781, 0x15d6, 0x1624, 0x14c4, 0x1624, 0x14c4, +0x1415, 0x1304, 0x1415, 0x1304, 0x120e, 0x1150, 0x120e, 0x1150, 0x1020, 0xfb6, 0x1020, +0xfb6, 0x1020, 0xfb6, 0xdad, 0xd99, 0xdad, 0xd99, 0xaf3, 0xb34, 0xaf3, 0xb34, +0x861, 0x8f6, 0x861, 0x8f6, 0x62e, 0x714, 0x62e, 0x714, 0x3a1, 0x4d5, 0x3a1, +0x4d5, 0x3a1, 0x4d5, 0xab, 0x227, 0xab, 0x227, 0xfe1a, 0xffd8, 0xfe1a, 0xffd8, +0xfbf0, 0xfdea, 0xfbf0, 0xfdea, 0xfa90, 0xfcbd, 0xfa90, 0xfcbd, 0xfa11, 0xfc6a, 0xfa11, +0xfc6a, 0xf7eb, 0xfa67, 0xf7eb, 0xfa67, 0xf7eb, 0xfa67, 0xf722, 0xf9b8, 0xf722, 0xf9b8, +0xf73d, 0xf9e5, 0xf73d, 0xf9e5, 0xf544, 0xf7f4, 0xf544, 0xf7f4, 0xf4c0, 0xf771, 0xf4c0, +0xf771, 0xf39c, 0xf647, 0xf39c, 0xf647, 0xf0d2, 0xf36f, 0xf0d2, 0xf36f, 0xf0d2, 0xf36f, +0xeeb9, 0xf141, 0xeeb9, 0xf141, 0xee3c, 0xf0ab, 0xee3c, 0xf0ab, 0xedbd, 0xf00f, 0xedbd, +0xf00f, 0xece2, 0xef13, 0xece2, 0xef13, 0xed15, 0xef22, 0xed15, 0xef22, 0xed15, 0xef22, +0xecef, 0xeed7, 0xecef, 0xeed7, 0xed42, 0xef05, 0xed42, 0xef05, 0xed51, 0xeeef, 0xed51, +0xeeef, 0xed7d, 0xeef7, 0xed7d, 0xeef7, 0xee1a, 0xef72, 0xee1a, 0xef72, 0xeda1, 0xeed7, +0xeda1, 0xeed7, 0xeda1, 0xeed7, 0xee45, 0xef5d, 0xee45, 0xef5d, 0xf039, 0xf133, 0xf039, +0xf133, 0xf193, 0xf272, 0xf193, 0xf272, 0xf21f, 0xf2e4, 0xf21f, 0xf2e4, 0xf310, 0xf3bd, +0xf310, 0xf3bd, 0xf3d2, 0xf467, 0xf3d2, 0xf467, 0xf3d2, 0xf467, 0xf3c7, 0xf445, 0xf3c7, +0xf445, 0xf4eb, 0xf551, 0xf4eb, 0xf551, 0xf59d, 0xf5eb, 0xf59d, 0xf5eb, 0xf546, 0xf579, +0xf546, 0xf579, 0xf616, 0xf62d, 0xf616, 0xf62d, 0xf616, 0xf62d, 0xf6cf, 0xf6c6, 0xf6cf, +0xf6c6, 0xf7a8, 0xf77d, 0xf7a8, 0xf77d, 0xf8b9, 0xf868, 0xf8b9, 0xf868, 0xf93f, 0xf8c5, +0xf93f, 0xf8c5, 0xfa33, 0xf98d, 0xfa33, 0xf98d, 0xfba6, 0xfad0, 0xfba6, 0xfad0, 0xfba6, +0xfad0, 0xfc29, 0xfb20, 0xfc29, 0xfb20, 0xfc2a, 0xfaec, 0xfc2a, 0xfaec, 0xfd53, 0xfbde, +0xfd53, 0xfbde, 0xfec5, 0xfd1a, 0xfec5, 0xfd1a, 0x15e, 0xff7b, 0x15e, 0xff7b, 0x15e, +0xff7b, 0x3e5, 0x1cd, 0x3e5, 0x1cd, 0x5c5, 0x37a, 0x5c5, 0x37a, 0x830, 0x5b4, +0x830, 0x5b4, 0xa2f, 0x787, 0xa2f, 0x787, 0xbf3, 0x923, 0xbf3, 0x923, 0xc26, +0x936, 0xc26, 0x936, 0xc26, 0x936, 0xc92, 0x988, 0xc92, 0x988, 0xdb0, 0xa94, +0xdb0, 0xa94, 0xe63, 0xb3d, 0xe63, 0xb3d, 0x1017, 0xcee, 0x1017, 0xcee, 0x111e, +0xdfb, 0x111e, 0xdfb, 0x10be, 0xda7, 0x10be, 0xda7, 0x10be, 0xda7, 0x10ac, 0xdaa, +0x10ac, 0xdaa, 0x1191, 0xeab, 0x1191, 0xeab, 0x1136, 0xe70, 0x1136, 0xe70, 0x102c, +0xd8b, 0x102c, 0xd8b, 0x103a, 0xdc2, 0x103a, 0xdc2, 0x103a, 0xdc2, 0xff9, 0xdac, +0xff9, 0xdac, 0xf2b, 0xd0a, 0xf2b, 0xd0a, 0xda3, 0xbae, 0xda3, 0xbae, 0xc21, +0xa57, 0xc21, 0xa57, 0xb28, 0x985, 0xb28, 0x985, 0xa46, 0x8c7, 0xa46, 0x8c7, +0xa46, 0x8c7, 0xa12, 0x8b1, 0xa12, 0x8b1, 0x95c, 0x814, 0x95c, 0x814, 0x788, +0x653, 0x788, 0x653, 0x5ff, 0x4d6, 0x5ff, 0x4d6, 0x5aa, 0x486, 0x5aa, 0x486, +0x600, 0x4db, 0x600, 0x4db, 0x600, 0x4db, 0x556, 0x429, 0x556, 0x429, 0x4d1, +0x395, 0x4d1, 0x395, 0x4ec, 0x39d, 0x4ec, 0x39d, 0x486, 0x31f, 0x486, 0x31f, +0x485, 0x303, 0x485, 0x303, 0x485, 0x303, 0x4d8, 0x338, 0x4d8, 0x338, 0x6d3, +0x515, 0x6d3, 0x515, 0x8b3, 0x6d6, 0x8b3, 0x6d6, 0x977, 0x77c, 0x977, 0x77c, +0xc27, 0xa12, 0xc27, 0xa12, 0xdf1, 0xbc3, 0xdf1, 0xbc3, 0xdf1, 0xbc3, 0xe95, +0xc52, 0xe95, 0xc52, 0xf74, 0xd21, 0xf74, 0xd21, 0xfb0, 0xd52, 0xfb0, 0xd52, +0xf61, 0xcfd, 0xf61, 0xcfd, 0xf1a, 0xcb5, 0xf1a, 0xcb5, 0xf93, 0xd32, 0xf93, +0xd32, 0xf93, 0xd32, 0xf62, 0xd09, 0xf62, 0xd09, 0xf27, 0xcdc, 0xf27, 0xcdc, +0xf06, 0xcca, 0xf06, 0xcca, 0xf1e, 0xcf4, 0xf1e, 0xcf4, 0xf46, 0xd2f, 0xf46, +0xd2f, 0xf46, 0xd2f, 0xec3, 0xcc0, 0xec3, 0xcc0, 0xf3d, 0xd4d, 0xf3d, 0xd4d, +0x100e, 0xe2f, 0x100e, 0xe2f, 0x1056, 0xe86, 0x1056, 0xe86, 0x1010, 0xe4c, 0x1010, +0xe4c, 0x103d, 0xe80, 0x103d, 0xe80, 0x103d, 0xe80, 0x1143, 0xf8a, 0x1143, 0xf8a, +0x1247, 0x108b, 0x1247, 0x108b, 0x12e8, 0x1127, 0x12e8, 0x1127, 0x12d3, 0x1107, 0x12d3, +0x1107, 0x12b4, 0x10d8, 0x12b4, 0x10d8, 0x12ab, 0x10bd, 0x12ab, 0x10bd, 0x12ab, 0x10bd, +0x1314, 0x1111, 0x1314, 0x1111, 0x13a4, 0x118b, 0x13a4, 0x118b, 0x1365, 0x1134, 0x1365, +0x1134, 0x13a2, 0x115b, 0x13a2, 0x115b, 0x1415, 0x11b9, 0x1415, 0x11b9, 0x1415, 0x11b9, +0x1456, 0x11ea, 0x1456, 0x11ea, 0x1589, 0x1310, 0x1589, 0x1310, 0x15fe, 0x137f, 0x15fe, +0x137f, 0x1567, 0x12e8, 0x1567, 0x12e8, 0x1540, 0x12c8, 0x1540, 0x12c8, 0x155c, 0x12f4, +0x155c, 0x12f4, 0x155c, 0x12f4, 0x13d5, 0x1186, 0x13d5, 0x1186, 0x1240, 0x1013, 0x1240, +0x1013, 0x120b, 0x1009, 0x120b, 0x1009, 0x10af, 0xedf, 0x10af, 0xedf, 0xf5d, 0xdc8, +0xf5d, 0xdc8, 0xe44, 0xcf1, 0xe44, 0xcf1, 0xe44, 0xcf1, 0xd2c, 0xc20, 0xd2c, +0xc20, 0xad4, 0xa15, 0xad4, 0xa15, 0x871, 0x801, 0x871, 0x801, 0x75c, 0x73e, +0x75c, 0x73e, 0x4e4, 0x517, 0x4e4, 0x517, 0x4e4, 0x517, 0x2a3, 0x327, 0x2a3, +0x327, 0xffd9, 0xaa, 0xffd9, 0xaa, 0xfccd, 0xfde8, 0xfccd, 0xfde8, 0xf9b7, 0xfb17, +0xf9b7, 0xfb17, 0xf733, 0xf8d2, 0xf733, 0xf8d2, 0xf5ea, 0xf7c0, 0xf5ea, 0xf7c0, 0xf5ea, +0xf7c0, 0xf379, 0xf57e, 0xf379, 0xf57e, 0xf0cc, 0xf2f9, 0xf0cc, 0xf2f9, 0xeeab, 0xf0f6, +0xeeab, 0xf0f6, 0xee55, 0xf0b7, 0xee55, 0xf0b7, 0xeddf, 0xf050, 0xeddf, 0xf050, 0xece7, +0xef5f, 0xece7, 0xef5f, 0xece7, 0xef5f, 0xed15, 0xef8e, 0xed15, 0xef8e, 0xed07, 0xef7a, +0xed07, 0xef7a, 0xed68, 0xefd0, 0xed68, 0xefd0, 0xedfa, 0xf053, 0xedfa, 0xf053, 0xedd2, +0xf01a, 0xedd2, 0xf01a, 0xedd2, 0xf01a, 0xee02, 0xf037, 0xee02, 0xf037, 0xee2e, 0xf04e, +0xee2e, 0xf04e, 0xee2f, 0xf03b, 0xee2f, 0xf03b, 0xef71, 0xf16a, 0xef71, 0xf16a, 0xf016, +0xf1fd, 0xf016, 0xf1fd, 0xf11c, 0xf2f4, 0xf11c, 0xf2f4, 0xf11c, 0xf2f4, 0xf3f3, 0xf5be, +0xf3f3, 0xf5be, 0xf58c, 0xf74c, 0xf58c, 0xf74c, 0xf57d, 0xf735, 0xf57d, 0xf735, 0xf5e6, +0xf798, 0xf5e6, 0xf798, 0xf740, 0xf8ef, 0xf740, 0xf8ef, 0xf7d4, 0xf982, 0xf7d4, 0xf982, +0xf7d4, 0xf982, 0xf789, 0xf936, 0xf789, 0xf936, 0xf741, 0xf8ee, 0xf741, 0xf8ee, 0xf6f3, +0xf89f, 0xf6f3, 0xf89f, 0xf6e1, 0xf88b, 0xf6e1, 0xf88b, 0xf697, 0xf83e, 0xf697, 0xf83e, +0xf697, 0xf83e, 0xf56f, 0xf70f, 0xf56f, 0xf70f, 0xf442, 0xf5d9, 0xf442, 0xf5d9, 0xf2b0, +0xf43b, 0xf2b0, 0xf43b, 0xf23c, 0xf3b6, 0xf23c, 0xf3b6, 0xf277, 0xf3dc, 0xf277, 0xf3dc, +0xf14a, 0xf297, 0xf14a, 0xf297, 0xf14a, 0xf297, 0xf169, 0xf299, 0xf169, 0xf299, 0xf283, +0xf394, 0xf283, 0xf394, 0xf3a2, 0xf490, 0xf3a2, 0xf490, 0xf466, 0xf52f, 0xf466, 0xf52f, +0xf535, 0xf5d8, 0xf535, 0xf5d8, 0xf60d, 0xf689, 0xf60d, 0xf689, 0xf60d, 0xf689, 0xf6d7, +0xf72d, 0xf6d7, 0xf72d, 0xf8af, 0xf8df, 0xf8af, 0xf8df, 0xfa62, 0xfa71, 0xfa62, 0xfa71, +0xfc23, 0xfc15, 0xfc23, 0xfc15, 0xfd9d, 0xfd76, 0xfd9d, 0xfd76, 0xfd9d, 0xfd76, 0xfff3, +0xffb9, 0xfff3, 0xffb9, 0x1bd, 0x177, 0x1bd, 0x177, 0x257, 0x20e, 0x257, 0x20e, +0x451, 0x40c, 0x451, 0x40c, 0x424, 0x3ed, 0x424, 0x3ed, 0x334, 0x314, 0x334, +0x314, 0x334, 0x314, 0x443, 0x442, 0x443, 0x442, 0x3e5, 0x40d, 0x3e5, 0x40d, +0x381, 0x3d9, 0x381, 0x3d9, 0x343, 0x3d5, 0x343, 0x3d5, 0x1df, 0x2b0, 0x1df, +0x2b0, 0x1df, 0x2b0, 0x11e, 0x236, 0x11e, 0x236, 0xff54, 0xb6, 0xff54, 0xb6, +0xfe6d, 0x1e, 0xfe6d, 0x1e, 0xfe02, 0x4, 0xfe02, 0x4, 0xfbe8, 0xfe3d, 0xfbe8, +0xfe3d, 0xfa79, 0xfd21, 0xfa79, 0xfd21, 0xfa79, 0xfd21, 0xf937, 0xfc2f, 0xf937, 0xfc2f, +0xf7a8, 0xfaed, 0xf7a8, 0xfaed, 0xf4ee, 0xf87d, 0xf4ee, 0xf87d, 0xf320, 0xf6f3, 0xf320, +0xf6f3, 0xf1ca, 0xf5db, 0xf1ca, 0xf5db, 0xefa4, 0xf3eb, 0xefa4, 0xf3eb, 0xefa4, 0xf3eb, +0xee30, 0xf2a8, 0xee30, 0xf2a8, 0xeb75, 0xf014, 0xeb75, 0xf014, 0xea1d, 0xeedb, 0xea1d, +0xeedb, 0xe9b7, 0xee8c, 0xe9b7, 0xee8c, 0xe829, 0xed0d, 0xe829, 0xed0d, 0xe829, 0xed0d, +0xe788, 0xec73, 0xe788, 0xec73, 0xe5ec, 0xead7, 0xe5ec, 0xead7, 0xe3be, 0xe8a2, 0xe3be, +0xe8a2, 0xe1af, 0xe686, 0xe1af, 0xe686, 0xdff5, 0xe4b9, 0xdff5, 0xe4b9, 0xdf5c, 0xe409, +0xdf5c, 0xe409, 0xdf5c, 0xe409, 0xdea2, 0xe335, 0xdea2, 0xe335, 0xdf4a, 0xe3bf, 0xdf4a, +0xe3bf, 0xe043, 0xe498, 0xe043, 0xe498, 0xe0e0, 0xe514, 0xe0e0, 0xe514, 0xe1d2, 0xe5e3, +0xe1d2, 0xe5e3, 0xe2b0, 0xe69e, 0xe2b0, 0xe69e, 0xe2b0, 0xe69e, 0xe39d, 0xe767, 0xe39d, +0xe767, 0xe35e, 0xe704, 0xe35e, 0xe704, 0xe3ce, 0xe751, 0xe3ce, 0xe751, 0xe433, 0xe792, +0xe433, 0xe792, 0xe3b2, 0xe6ed, 0xe3b2, 0xe6ed, 0xe3b2, 0xe6ed, 0xe42f, 0xe744, 0xe42f, +0xe744, 0xe4f9, 0xe7e7, 0xe4f9, 0xe7e7, 0xe52d, 0xe7f4, 0xe52d, 0xe7f4, 0xe59c, 0xe83a, +0xe59c, 0xe83a, 0xe69a, 0xe90b, 0xe69a, 0xe90b, 0xe6d2, 0xe915, 0xe6d2, 0xe915, 0xe6d2, +0xe915, 0xe6f4, 0xe904, 0xe6f4, 0xe904, 0xe71b, 0xe8f4, 0xe71b, 0xe8f4, 0xe79d, 0xe93b, +0xe79d, 0xe93b, 0xe7c4, 0xe924, 0xe7c4, 0xe924, 0xe764, 0xe881, 0xe764, 0xe881, 0xe865, +0xe93a, 0xe865, 0xe93a, 0xe865, 0xe93a, 0xe9c9, 0xea52, 0xe9c9, 0xea52, 0xeac8, 0xeb02, +0xeac8, 0xeb02, 0xec55, 0xec3d, 0xec55, 0xec3d, 0xeded, 0xed80, 0xeded, 0xed80, 0xeed3, +0xee0f, 0xeed3, 0xee0f, 0xeed3, 0xee0f, 0xf20c, 0xf0f3, 0xf20c, 0xf0f3, 0xf518, 0xf3a9, +0xf518, 0xf3a9, 0xf6e3, 0xf51f, 0xf6e3, 0xf51f, 0xfb78, 0xf962, 0xfb78, 0xf962, 0xff67, +0xfd04, 0xff67, 0xfd04, 0x2c8, 0x1c, 0x2c8, 0x1c, 0x2c8, 0x1c, 0x635, 0x346, +0x635, 0x346, 0x7e1, 0x4b7, 0x7e1, 0x4b7, 0xaf0, 0x792, 0xaf0, 0x792, 0xe60, +0xad6, 0xe60, 0xad6, 0x10a8, 0xcfd, 0x10a8, 0xcfd, 0x12b8, 0xef3, 0x12b8, 0xef3, +0x12b8, 0xef3, 0x1437, 0x1063, 0x1437, 0x1063, 0x15cf, 0x11f6, 0x15cf, 0x11f6, 0x177e, +0x13a8, 0x177e, 0x13a8, 0x196d, 0x15a2, 0x196d, 0x15a2, 0x1a1d, 0x1666, 0x1a1d, 0x1666, +0x1a1d, 0x1666, 0x1aec, 0x1750, 0x1aec, 0x1750, 0x1cce, 0x1953, 0x1cce, 0x1953, 0x1d3a, +0x19e6, 0x1d3a, 0x19e6, 0x1e05, 0x1adb, 0x1e05, 0x1adb, 0x1df0, 0x1af3, 0x1df0, 0x1af3, +0x1c7a, 0x19ac, 0x1c7a, 0x19ac, 0x1c7a, 0x19ac, 0x1b1c, 0x187d, 0x1b1c, 0x187d, 0x1a39, +0x17c8, 0x1a39, 0x17c8, 0x1a86, 0x1842, 0x1a86, 0x1842, 0x1a12, 0x17f8, 0x1a12, 0x17f8, +0x18fe, 0x170a, 0x18fe, 0x170a, 0x1860, 0x168f, 0x1860, 0x168f, 0x1860, 0x168f, 0x1780, +0x15ce, 0x1780, 0x15ce, 0x167f, 0x14e6, 0x167f, 0x14e6, 0x1638, 0x14b5, 0x1638, 0x14b5, +0x1544, 0x13d1, 0x1544, 0x13d1, 0x145b, 0x12f4, 0x145b, 0x12f4, 0x145b, 0x12f4, 0x142d, +0x12ce, 0x142d, 0x12ce, 0x139c, 0x1243, 0x139c, 0x1243, 0x12eb, 0x1195, 0x12eb, 0x1195, +0x11ef, 0x1099, 0x11ef, 0x1099, 0x10ee, 0xf99, 0x10ee, 0xf99, 0x1021, 0xecc, 0x1021, +0xecc, 0x1021, 0xecc, 0xffd, 0xea8, 0xffd, 0xea8, 0xf74, 0xe20, 0xf74, 0xe20, +0xeb0, 0xd61, 0xeb0, 0xd61, 0xe2e, 0xce6, 0xe2e, 0xce6, 0xe3a, 0xcfb, 0xe3a, +0xcfb, 0xe4b, 0xd19, 0xe4b, 0xd19, 0xe4b, 0xd19, 0xd71, 0xc50, 0xd71, 0xc50, +0xd48, 0xc3b, 0xd48, 0xc3b, 0xc19, 0xb23, 0xc19, 0xb23, 0xacc, 0x9f0, 0xacc, +0x9f0, 0x9d7, 0x917, 0x9d7, 0x917, 0x9d7, 0x917, 0x771, 0x6cf, 0x771, 0x6cf, +0x5c3, 0x541, 0x5c3, 0x541, 0x587, 0x524, 0x587, 0x524, 0x561, 0x51e, 0x561, +0x51e, 0x400, 0x3da, 0x400, 0x3da, 0x2b2, 0x2a7, 0x2b2, 0x2a7, 0x2b2, 0x2a7, +0x22d, 0x23b, 0x22d, 0x23b, 0x120, 0x144, 0x120, 0x144, 0xf8, 0x12c, 0xf8, +0x12c, 0x12e, 0x16e, 0x12e, 0x16e, 0xffea, 0x31, 0xffea, 0x31, 0xff87, 0xffd0, +0xff87, 0xffd0, 0xff87, 0xffd0, 0x1d, 0x64, 0x1d, 0x64, 0x6d, 0xab, 0x6d, +0xab, 0xe, 0x41, 0xe, 0x41, 0xfe9f, 0xfec2, 0xfe9f, 0xfec2, 0xfd50, 0xfd60, +0xfd50, 0xfd60, 0xfd50, 0xfd60, 0xfc18, 0xfc12, 0xfc18, 0xfc12, 0xfaef, 0xfad3, 0xfaef, +0xfad3, 0xf9c1, 0xf98e, 0xf9c1, 0xf98e, 0xf9ba, 0xf971, 0xf9ba, 0xf971, 0xfa80, 0xfa22, +0xfa80, 0xfa22, 0xfa8c, 0xfa1c, 0xfa8c, 0xfa1c, 0xfa8c, 0xfa1c, 0xfb65, 0xfae6, 0xfb65, +0xfae6, 0xfbce, 0xfb44, 0xfbce, 0xfb44, 0xfb2f, 0xfa9f, 0xfb2f, 0xfa9f, 0xfbb5, 0xfb25, +0xfbb5, 0xfb25, 0xfba1, 0xfb16, 0xfba1, 0xfb16, 0xfa92, 0xfa11, 0xfa92, 0xfa11, 0xfa92, +0xfa11, 0xfaa9, 0xfa38, 0xfaa9, 0xfa38, 0xfae6, 0xfa8b, 0xfae6, 0xfa8b, 0xfadc, 0xfa9b, +0xfadc, 0xfa9b, 0xfa9b, 0xfa7a, 0xfa9b, 0xfa7a, 0xfaf2, 0xfaf3, 0xfaf2, 0xfaf3, 0xfaf2, +0xfaf3, 0xfbb4, 0xfbda, 0xfbb4, 0xfbda, 0xfb1d, 0xfb69, 0xfb1d, 0xfb69, 0xf9d0, 0xfa45, +0xf9d0, 0xfa45, 0xf890, 0xf92c, 0xf890, 0xf92c, 0xf750, 0xf811, 0xf750, 0xf811, 0xf5a5, +0xf688, 0xf5a5, 0xf688, 0xf5a5, 0xf688, 0xf483, 0xf586, 0xf483, 0xf586, 0xf368, 0xf486, +0xf368, 0xf486, 0xf26e, 0xf3a3, 0xf26e, 0xf3a3, 0xf2a9, 0xf3ee, 0xf2a9, 0xf3ee, 0xf242, +0xf391, 0xf242, 0xf391, 0xf242, 0xf391, 0xf163, 0xf2b6, 0xf163, 0xf2b6, 0xf0fa, 0xf24b, +0xf0fa, 0xf24b, 0xf16b, 0xf2b4, 0xf16b, 0xf2b4, 0xf1be, 0xf2f8, 0xf1be, 0xf2f8, 0xf229, +0xf351, 0xf229, 0xf351, 0xf353, 0xf463, 0xf353, 0xf463, 0xf353, 0xf463, 0xf403, 0xf4f7, +0xf403, 0xf4f7, 0xf53a, 0xf610, 0xf53a, 0xf610, 0xf5f1, 0xf6a7, 0xf5f1, 0xf6a7, 0xf5e9, +0xf67e, 0xf5e9, 0xf67e, 0xf62a, 0xf69d, 0xf62a, 0xf69d, 0xf662, 0xf6b6, 0xf662, 0xf6b6, +0xf662, 0xf6b6, 0xf831, 0xf866, 0xf831, 0xf866, 0xfa7d, 0xfa97, 0xfa7d, 0xfa97, 0xfbb2, +0xfbb4, 0xfbb2, 0xfbb4, 0xfd69, 0xfd55, 0xfd69, 0xfd55, 0xff93, 0xff6f, 0xff93, 0xff6f, +0xff93, 0xff6f, 0x190, 0x15f, 0x190, 0x15f, 0x39e, 0x363, 0x39e, 0x363, 0x3e0, +0x3a1, 0x3e0, 0x3a1, 0x383, 0x342, 0x383, 0x342, 0x444, 0x404, 0x444, 0x404, +0x48b, 0x44d, 0x48b, 0x44d, 0x48b, 0x44d, 0x539, 0x4ff, 0x539, 0x4ff, 0x597, +0x562, 0x597, 0x562, 0x5b4, 0x583, 0x5b4, 0x583, 0x6da, 0x6ac, 0x6da, 0x6ac, +0x881, 0x854, 0x881, 0x854, 0x9d7, 0x9a6, 0x9d7, 0x9a6, 0x9d7, 0x9a6, 0xa0b, +0x9d5, 0xa0b, 0x9d5, 0xaf7, 0xab6, 0xaf7, 0xab6, 0xb95, 0xb45, 0xb95, 0xb45, +0xc0e, 0xbab, 0xc0e, 0xbab, 0xd16, 0xc9a, 0xd16, 0xc9a, 0xd16, 0xc9a, 0xd31, +0xc97, 0xd31, 0xc97, 0xe48, 0xd8b, 0xe48, 0xd8b, 0xf0f, 0xe2c, 0xf0f, 0xe2c, +0x10aa, 0xf9c, 0x10aa, 0xf9c, 0x1478, 0x133d, 0x1478, 0x133d, 0x15fb, 0x1491, 0x15fb, +0x1491, 0x15fb, 0x1491, 0x17af, 0x1615, 0x17af, 0x1615, 0x1afb, 0x1931, 0x1afb, 0x1931, +0x1c84, 0x1a8b, 0x1c84, 0x1a8b, 0x1d48, 0x1b22, 0x1d48, 0x1b22, 0x1d68, 0x1b18, 0x1d68, +0x1b18, 0x1cfd, 0x1a88, 0x1cfd, 0x1a88, 0x1cfd, 0x1a88, 0x1c8a, 0x19f5, 0x1c8a, 0x19f5, +0x1cf5, 0x1a45, 0x1cf5, 0x1a45, 0x1dbf, 0x1af9, 0x1dbf, 0x1af9, 0x1dac, 0x1ad7, 0x1dac, +0x1ad7, 0x1dbc, 0x1adf, 0x1dbc, 0x1adf, 0x1dbc, 0x1adf, 0x1ce8, 0x1a09, 0x1ce8, 0x1a09, +0x1c1d, 0x1943, 0x1c1d, 0x1943, 0x1b08, 0x1837, 0x1b08, 0x1837, 0x1901, 0x1640, 0x1901, +0x1640, 0x1867, 0x15ba, 0x1867, 0x15ba, 0x1861, 0x15cb, 0x1861, 0x15cb, 0x1861, 0x15cb, +0x187a, 0x15fd, 0x187a, 0x15fd, 0x18d1, 0x166f, 0x18d1, 0x166f, 0x17a1, 0x155c, 0x17a1, +0x155c, 0x15cb, 0x13a1, 0x15cb, 0x13a1, 0x14bc, 0x12ac, 0x14bc, 0x12ac, 0x13f4, 0x11fc, +0x13f4, 0x11fc, 0x13f4, 0x11fc, 0x12e7, 0x1104, 0x12e7, 0x1104, 0x10b0, 0xede, 0x10b0, +0xede, 0xed5, 0xd10, 0xed5, 0xd10, 0xde0, 0xc25, 0xde0, 0xc25, 0xd8b, 0xbd3, +0xd8b, 0xbd3, 0xd8b, 0xbd3, 0xd95, 0xbde, 0xd95, 0xbde, 0xd0e, 0xb53, 0xd0e, +0xb53, 0xbd5, 0xa12, 0xbd5, 0xa12, 0xaa1, 0x8d3, 0xaa1, 0x8d3, 0xa96, 0x8bc, +0xa96, 0x8bc, 0x853, 0x66a, 0x853, 0x66a, 0x853, 0x66a, 0x65c, 0x463, 0x65c, +0x463, 0x6b0, 0x4aa, 0x6b0, 0x4aa, 0x6a5, 0x491, 0x6a5, 0x491, 0x7a0, 0x581, +0x7a0, 0x581, 0x7bd, 0x596, 0x7bd, 0x596, 0x767, 0x53c, 0x767, 0x53c, 0x767, +0x53c, 0x798, 0x56f, 0x798, 0x56f, 0x7bc, 0x599, 0x7bc, 0x599, 0x831, 0x619, +0x831, 0x619, 0x78d, 0x587, 0x78d, 0x587, 0x63b, 0x44c, 0x63b, 0x44c, 0x63b, +0x44c, 0x5fd, 0x42b, 0x5fd, 0x42b, 0x5e7, 0x438, 0x5e7, 0x438, 0x4ed, 0x366, +0x4ed, 0x366, 0x360, 0x204, 0x360, 0x204, 0x142, 0x15, 0x142, 0x15, 0xff4a, +0xfe4f, 0xff4a, 0xfe4f, 0xff4a, 0xfe4f, 0xfdbc, 0xfcf3, 0xfdbc, 0xfcf3, 0xfca3, 0xfc0d, +0xfca3, 0xfc0d, 0xfa81, 0xfa1f, 0xfa81, 0xfa1f, 0xf897, 0xf866, 0xf897, 0xf866, 0xf7c0, +0xf7be, 0xf7c0, 0xf7be, 0xf70a, 0xf734, 0xf70a, 0xf734, 0xf70a, 0xf734, 0xf832, 0xf885, +0xf832, 0xf885, 0xf8b2, 0xf929, 0xf8b2, 0xf929, 0xf845, 0xf8db, 0xf845, 0xf8db, 0xf939, +0xf9ea, 0xf939, 0xf9ea, 0xf986, 0xfa4c, 0xf986, 0xfa4c, 0xf986, 0xfa4c, 0xf892, 0xf969, +0xf892, 0xf969, 0xf7ce, 0xf8b2, 0xf7ce, 0xf8b2, 0xf7f2, 0xf8df, 0xf7f2, 0xf8df, 0xf8f8, +0xf9ea, 0xf8f8, 0xf9ea, 0xfa3c, 0xfb31, 0xfa3c, 0xfb31, 0xfbf1, 0xfce8, 0xfbf1, 0xfce8, +0xfbf1, 0xfce8, 0xfcb5, 0xfdad, 0xfcb5, 0xfdad, 0xfc7b, 0xfd74, 0xfc7b, 0xfd74, 0xfd0b, +0xfe06, 0xfd0b, 0xfe06, 0xfd49, 0xfe48, 0xfd49, 0xfe48, 0xfd5e, 0xfe64, 0xfd5e, 0xfe64, +0xfcbc, 0xfdcc, 0xfcbc, 0xfdcc, 0xfcbc, 0xfdcc, 0xfcf4, 0xfe12, 0xfcf4, 0xfe12, 0xfe5d, +0xff8d, 0xfe5d, 0xff8d, 0xfefd, 0x45, 0xfefd, 0x45, 0xffa0, 0x103, 0xffa0, 0x103, +0xff1f, 0xa2, 0xff1f, 0xa2, 0xff1f, 0xa2, 0xfe2a, 0xffd0, 0xfe2a, 0xffd0, 0xfd10, +0xfedd, 0xfd10, 0xfedd, 0xfba6, 0xfd9c, 0xfba6, 0xfd9c, 0xfa83, 0xfca5, 0xfa83, 0xfca5, +0xf8db, 0xfb29, 0xf8db, 0xfb29, 0xf68a, 0xf904, 0xf68a, 0xf904, 0xf68a, 0xf904, 0xf51b, +0xf7bf, 0xf51b, 0xf7bf, 0xf3d9, 0xf6a6, 0xf3d9, 0xf6a6, 0xf0c0, 0xf3b3, 0xf0c0, 0xf3b3, +0xee38, 0xf14c, 0xee38, 0xf14c, 0xec97, 0xefc6, 0xec97, 0xefc6, 0xeb1f, 0xee64, 0xeb1f, +0xee64, 0xeb1f, 0xee64, 0xea1c, 0xed6f, 0xea1c, 0xed6f, 0xe89a, 0xebf5, 0xe89a, 0xebf5, +0xe71c, 0xea77, 0xe71c, 0xea77, 0xe6e2, 0xea37, 0xe6e2, 0xea37, 0xe77b, 0xeac2, 0xe77b, +0xeac2, 0xe77b, 0xeac2, 0xe83c, 0xeb6f, 0xe83c, 0xeb6f, 0xe8d3, 0xebeb, 0xe8d3, 0xebeb, +0xe983, 0xec7a, 0xe983, 0xec7a, 0xea9f, 0xed71, 0xea9f, 0xed71, 0xea87, 0xed30, 0xea87, +0xed30, 0xeb0c, 0xed8a, 0xeb0c, 0xed8a, 0xeb0c, 0xed8a, 0xebc5, 0xee17, 0xebc5, 0xee17, +0xeb29, 0xed4e, 0xeb29, 0xed4e, 0xebfc, 0xedf5, 0xebfc, 0xedf5, 0xee40, 0xf00f, 0xee40, +0xf00f, 0xf075, 0xf21d, 0xf075, 0xf21d, 0xf075, 0xf21d, 0xf17c, 0xf302, 0xf17c, 0xf302, +0xf2a8, 0xf411, 0xf2a8, 0xf411, 0xf475, 0xf5c5, 0xf475, 0xf5c5, 0xf597, 0xf6d4, 0xf597, +0xf6d4, 0xf64d, 0xf77d, 0xf64d, 0xf77d, 0xf65c, 0xf785, 0xf65c, 0xf785, 0xf65c, 0xf785, +0xf647, 0xf76f, 0xf647, 0xf76f, 0xf651, 0xf77e, 0xf651, 0xf77e, 0xf6bd, 0xf7f3, 0xf6bd, +0xf7f3, 0xf75e, 0xf8a2, 0xf75e, 0xf8a2, 0xf68b, 0xf7df, 0xf68b, 0xf7df, 0xf5f3, 0xf75b, +0xf5f3, 0xf75b, 0xf5f3, 0xf75b, 0xf5d5, 0xf752, 0xf5d5, 0xf752, 0xf501, 0xf694, 0xf501, +0xf694, 0xf54c, 0xf6f4, 0xf54c, 0xf6f4, 0xf4c4, 0xf680, 0xf4c4, 0xf680, 0xf39f, 0xf56e, +0xf39f, 0xf56e, 0xf39f, 0xf56e, 0xf3a6, 0xf584, 0xf3a6, 0xf584, 0xf3c3, 0xf5ad, 0xf3c3, +0xf5ad, 0xf49e, 0xf691, 0xf49e, 0xf691, 0xf536, 0xf72d, 0xf536, 0xf72d, 0xf45e, 0xf656, +0xf45e, 0xf656, 0xf2f0, 0xf4e5, 0xf2f0, 0xf4e5, 0xf2f0, 0xf4e5, 0xf1fe, 0xf3ec, 0xf1fe, +0xf3ec, 0xf102, 0xf2e8, 0xf102, 0xf2e8, 0xefdd, 0xf1b7, 0xefdd, 0xf1b7, 0xef4c, 0xf119, +0xef4c, 0xf119, 0xefce, 0xf18d, 0xefce, 0xf18d, 0xf1bc, 0xf36d, 0xf1bc, 0xf36d, 0xf1bc, +0xf36d, 0xf37d, 0xf522, 0xf37d, 0xf522, 0xf40a, 0xf5a4, 0xf40a, 0xf5a4, 0xf3f3, 0xf586, +0xf3f3, 0xf586, 0xf3c1, 0xf550, 0xf3c1, 0xf550, 0xf320, 0xf4af, 0xf320, 0xf4af, 0xf320, +0xf4af, 0xf218, 0xf3ab, 0xf218, 0xf3ab, 0xf0ae, 0xf24b, 0xf0ae, 0xf24b, 0xef55, 0xf100, +0xef55, 0xf100, 0xeedc, 0xf099, 0xeedc, 0xf099, 0xef59, 0xf12f, 0xef59, 0xf12f, 0xefe7, +0xf1d8, 0xefe7, 0xf1d8, 0xefe7, 0xf1d8, 0xefe2, 0xf1f2, 0xefe2, 0xf1f2, 0xf02b, 0xf25b, +0xf02b, 0xf25b, 0xef7c, 0xf1cf, 0xef7c, 0xf1cf, 0xee51, 0xf0c7, 0xee51, 0xf0c7, 0xed24, +0xefbc, 0xed24, 0xefbc, 0xeb38, 0xedef, 0xeb38, 0xedef, 0xeb38, 0xedef, 0xe98f, 0xec61, +0xe98f, 0xec61, 0xe7c2, 0xeaab, 0xe7c2, 0xeaab, 0xe6cb, 0xe9c4, 0xe6cb, 0xe9c4, 0xe639, +0xe93b, 0xe639, 0xe93b, 0xe5af, 0xe8b1, 0xe5af, 0xe8b1, 0xe5af, 0xe8b1, 0xe60f, 0xe909, +0xe60f, 0xe909, 0xe5a6, 0xe88e, 0xe5a6, 0xe88e, 0xe58d, 0xe859, 0xe58d, 0xe859, 0xe5cc, +0xe872, 0xe5cc, 0xe872, 0xe590, 0xe806, 0xe590, 0xe806, 0xe6bf, 0xe8fc, 0xe6bf, 0xe8fc, +0xe6bf, 0xe8fc, 0xe84b, 0xea46, 0xe84b, 0xea46, 0xeadb, 0xec8d, 0xeadb, 0xec8d, 0xedb2, +0xef13, 0xedb2, 0xef13, 0xee80, 0xef8a, 0xee80, 0xef8a, 0xefec, 0xf09c, 0xefec, 0xf09c, +0xf1d6, 0xf228, 0xf1d6, 0xf228, 0xf1d6, 0xf228, 0xf3b6, 0xf3a9, 0xf3b6, 0xf3a9, 0xf651, +0xf5e5, 0xf651, 0xf5e5, 0xf945, 0xf87b, 0xf945, 0xf87b, 0xfc7b, 0xfb56, 0xfc7b, 0xfb56, +0x85, 0xff09, 0x85, 0xff09, 0x85, 0xff09, 0x60f, 0x441, 0x60f, 0x441, 0xa2a, +0x810, 0xa2a, 0x810, 0xc54, 0x9f5, 0xc54, 0x9f5, 0xed5, 0xc37, 0xed5, 0xc37, +0x1111, 0xe3c, 0x1111, 0xe3c, 0x1312, 0x100d, 0x1312, 0x100d, 0x1312, 0x100d, 0x147c, +0x114e, 0x147c, 0x114e, 0x1559, 0x1209, 0x1559, 0x1209, 0x171b, 0x13af, 0x171b, 0x13af, +0x1857, 0x14d4, 0x1857, 0x14d4, 0x19b8, 0x1623, 0x19b8, 0x1623, 0x1af2, 0x1750, 0x1af2, +0x1750, 0x1af2, 0x1750, 0x1ad2, 0x1724, 0x1ad2, 0x1724, 0x1baa, 0x17f3, 0x1baa, 0x17f3, +0x1c16, 0x1857, 0x1c16, 0x1857, 0x1bc1, 0x17fa, 0x1bc1, 0x17fa, 0x1b73, 0x17a4, 0x1b73, +0x17a4, 0x1b73, 0x17a4, 0x1acf, 0x16f8, 0x1acf, 0x16f8, 0x1acd, 0x16ec, 0x1acd, 0x16ec, +0x1bd1, 0x17e6, 0x1bd1, 0x17e6, 0x1d46, 0x194f, 0x1d46, 0x194f, 0x1d3e, 0x193b, 0x1d3e, +0x193b, 0x1cf4, 0x18e5, 0x1cf4, 0x18e5, 0x1cf4, 0x18e5, 0x1dc2, 0x19a7, 0x1dc2, 0x19a7, +0x1e67, 0x1a41, 0x1e67, 0x1a41, 0x1f00, 0x1ad1, 0x1f00, 0x1ad1, 0x1f49, 0x1b14, 0x1f49, +0x1b14, 0x1ed1, 0x1a9a, 0x1ed1, 0x1a9a, 0x1ef2, 0x1abf, 0x1ef2, 0x1abf, 0x1ef2, 0x1abf, +0x1f01, 0x1ad8, 0x1f01, 0x1ad8, 0x1dd2, 0x19ba, 0x1dd2, 0x19ba, 0x1ca0, 0x18a0, 0x1ca0, +0x18a0, 0x1b85, 0x17a7, 0x1b85, 0x17a7, 0x1a96, 0x16e2, 0x1a96, 0x16e2, 0x1a96, 0x16e2, +0x19d8, 0x1658, 0x19d8, 0x1658, 0x1838, 0x14f4, 0x1838, 0x14f4, 0x15bd, 0x12bf, 0x15bd, +0x12bf, 0x135f, 0x10b0, 0x135f, 0x10b0, 0x10fb, 0xea2, 0x10fb, 0xea2, 0xf7c, 0xd80, +0xf7c, 0xd80, 0xf7c, 0xd80, 0xe23, 0xc8a, 0xe23, 0xc8a, 0xb71, 0xa3f, 0xb71, +0xa3f, 0x9aa, 0x8e2, 0x9aa, 0x8e2, 0x73e, 0x6e1, 0x73e, 0x6e1, 0x476, 0x483, +0x476, 0x483, 0x334, 0x3aa, 0x334, 0x3aa, 0x334, 0x3aa, 0xbf, 0x19a, 0xbf, +0x19a, 0xfee1, 0x1b, 0xfee1, 0x1b, 0xfe25, 0xffb7, 0xfe25, 0xffb7, 0xfcf8, 0xfeda, +0xfcf8, 0xfeda, 0xfc8e, 0xfeb6, 0xfc8e, 0xfeb6, 0xfc8e, 0xfeb6, 0xfb1e, 0xfd83, 0xfb1e, +0xfd83, 0xf8a1, 0xfb38, 0xf8a1, 0xfb38, 0xf683, 0xf941, 0xf683, 0xf941, 0xf485, 0xf75e, +0xf485, 0xf75e, 0xf270, 0xf55a, 0xf270, 0xf55a, 0xf00c, 0xf2fc, 0xf00c, 0xf2fc, 0xf00c, +0xf2fc, 0xee71, 0xf15f, 0xee71, 0xf15f, 0xecea, 0xefcc, 0xecea, 0xefcc, 0xec55, 0xef24, +0xec55, 0xef24, 0xec77, 0xef2d, 0xec77, 0xef2d, 0xebb4, 0xee4b, 0xebb4, 0xee4b, 0xeb7e, +0xedf4, 0xeb7e, 0xedf4, 0xeb7e, 0xedf4, 0xebf2, 0xee43, 0xebf2, 0xee43, 0xed5d, 0xef8a, +0xed5d, 0xef8a, 0xedc1, 0xefca, 0xedc1, 0xefca, 0xed7f, 0xef65, 0xed7f, 0xef65, 0xee9d, +0xf062, 0xee9d, 0xf062, 0xee9d, 0xf062, 0xf010, 0xf1b8, 0xf010, 0xf1b8, 0xf22b, 0xf3b9, +0xf22b, 0xf3b9, 0xf3da, 0xf551, 0xf3da, 0xf551, 0xf4e7, 0xf64c, 0xf4e7, 0xf64c, 0xf655, +0xf7ac, 0xf655, 0xf7ac, 0xf74f, 0xf89a, 0xf74f, 0xf89a, 0xf74f, 0xf89a, 0xf718, 0xf85a, +0xf718, 0xf85a, 0xf6bf, 0xf7f9, 0xf6bf, 0xf7f9, 0xf64d, 0xf780, 0xf64d, 0xf780, 0xf678, +0xf7a5, 0xf678, 0xf7a5, 0xf7a6, 0xf8ca, 0xf7a6, 0xf8ca, 0xf7a6, 0xf8ca, 0xf7bc, 0xf8d6, +0xf7bc, 0xf8d6, 0xf80e, 0xf91a, 0xf80e, 0xf91a, 0xf88f, 0xf989, 0xf88f, 0xf989, 0xf921, +0xfa04, 0xf921, 0xfa04, 0xfae9, 0xfbb0, 0xfae9, 0xfbb0, 0xfbf6, 0xfc9b, 0xfbf6, 0xfc9b, +0xfbf6, 0xfc9b, 0xfc4a, 0xfcc7, 0xfc4a, 0xfcc7, 0xfce5, 0xfd34, 0xfce5, 0xfd34, 0xfdab, +0xfdc7, 0xfdab, 0xfdc7, 0xfe51, 0xfe34, 0xfe51, 0xfe34, 0xff48, 0xfeee, 0xff48, 0xfeee, +0xa0, 0x6, 0xa0, 0x6, 0xa0, 0x6, 0x184, 0xa9, 0x184, 0xa9, 0x2b4, +0x197, 0x2b4, 0x197, 0x45c, 0x2fd, 0x45c, 0x2fd, 0x610, 0x471, 0x610, 0x471, +0x7bc, 0x5e1, 0x7bc, 0x5e1, 0x7bc, 0x5e1, 0x8cc, 0x6b9, 0x8cc, 0x6b9, 0x9ac, +0x768, 0x9ac, 0x768, 0xb63, 0x8f6, 0xb63, 0x8f6, 0xd1c, 0xa8d, 0xd1c, 0xa8d, +0xe14, 0xb6c, 0xe14, 0xb6c, 0xfbc, 0xd05, 0xfbc, 0xd05, 0xfbc, 0xd05, 0x107b, +0xdbe, 0x107b, 0xdbe, 0x103b, 0xd82, 0x103b, 0xd82, 0x10b2, 0xe06, 0x10b2, 0xe06, +0xfed, 0xd57, 0xfed, 0xd57, 0xf45, 0xccc, 0xf45, 0xccc, 0xf06, 0xcb1, 0xf06, +0xcb1, 0xf06, 0xcb1, 0xf27, 0xcfc, 0xf27, 0xcfc, 0xfd9, 0xddc, 0xfd9, 0xddc, +0xf20, 0xd53, 0xf20, 0xd53, 0xde3, 0xc47, 0xde3, 0xc47, 0xbfa, 0xa8f, 0xbfa, +0xa8f, 0xbfa, 0xa8f, 0xa8e, 0x952, 0xa8e, 0x952, 0x921, 0x811, 0x921, 0x811, +0x6a5, 0x5bb, 0x6a5, 0x5bb, 0x535, 0x46c, 0x535, 0x46c, 0x44d, 0x39e, 0x44d, +0x39e, 0x455, 0x3b9, 0x455, 0x3b9, 0x455, 0x3b9, 0x538, 0x4a8, 0x538, 0x4a8, +0x5e9, 0x55d, 0x5e9, 0x55d, 0x6a4, 0x614, 0x6a4, 0x614, 0x76d, 0x6d2, 0x76d, +0x6d2, 0x84e, 0x7a2, 0x84e, 0x7a2, 0x917, 0x853, 0x917, 0x853, 0x917, 0x853, +0x927, 0x847, 0x927, 0x847, 0x841, 0x742, 0x841, 0x742, 0x7cd, 0x6ac, 0x7cd, +0x6ac, 0x7d5, 0x692, 0x7d5, 0x692, 0x76a, 0x604, 0x76a, 0x604, 0x76a, 0x604, +0x729, 0x5a1, 0x729, 0x5a1, 0x7b4, 0x60d, 0x7b4, 0x60d, 0x8d6, 0x713, 0x8d6, +0x713, 0xa26, 0x84c, 0xa26, 0x84c, 0xb01, 0x914, 0xb01, 0x914, 0xae8, 0x8ee, +0xae8, 0x8ee, 0xae8, 0x8ee, 0xb0a, 0x907, 0xb0a, 0x907, 0xbad, 0x9a8, 0xbad, +0x9a8, 0xc0e, 0xa0a, 0xc0e, 0xa0a, 0xc8e, 0xa8f, 0xc8e, 0xa8f, 0xcf2, 0xafd, +0xcf2, 0xafd, 0xd25, 0xb3c, 0xd25, 0xb3c, 0xd25, 0xb3c, 0xdb9, 0xbdf, 0xdb9, +0xbdf, 0xe2b, 0xc60, 0xe2b, 0xc60, 0xe3e, 0xc83, 0xe3e, 0xc83, 0xe89, 0xcdc, +0xe89, 0xcdc, 0xeed, 0xd4c, 0xeed, 0xd4c, 0xeed, 0xd4c, 0xf6e, 0xdd7, 0xf6e, +0xdd7, 0x1008, 0xe77, 0x1008, 0xe77, 0x1053, 0xec4, 0x1053, 0xec4, 0x111b, 0xf88, +0x111b, 0xf88, 0x1252, 0x10b7, 0x1252, 0x10b7, 0x12d1, 0x112a, 0x12d1, 0x112a, 0x12d1, +0x112a, 0x131a, 0x1162, 0x131a, 0x1162, 0x131b, 0x114e, 0x131b, 0x114e, 0x120e, 0x1029, +0x120e, 0x1029, 0x1160, 0xf60, 0x1160, 0xf60, 0x11c5, 0xfa9, 0x11c5, 0xfa9, 0x1227, +0xfee, 0x1227, 0xfee, 0x1227, 0xfee, 0x12e8, 0x1094, 0x12e8, 0x1094, 0x1416, 0x11a8, +0x1416, 0x11a8, 0x1513, 0x128f, 0x1513, 0x128f, 0x15fe, 0x1368, 0x15fe, 0x1368, 0x1666, +0x13c5, 0x1666, 0x13c5, 0x1666, 0x13c5, 0x15d0, 0x1329, 0x15d0, 0x1329, 0x146f, 0x11ca, +0x146f, 0x11ca, 0x130f, 0x1074, 0x130f, 0x1074, 0x12d7, 0x1050, 0x12d7, 0x1050, 0x12fc, +0x1090, 0x12fc, 0x1090, 0x11df, 0xf99, 0x11df, 0xf99, 0x11df, 0xf99, 0x10d2, 0xeb9, +0x10d2, 0xeb9, 0xffc, 0xe19, 0xffc, 0xe19, 0xecf, 0xd29, 0xecf, 0xd29, 0xd83, +0xc21, 0xd83, 0xc21, 0xa66, 0x94e, 0xa66, 0x94e, 0x759, 0x68f, 0x759, 0x68f, +0x759, 0x68f, 0x5fa, 0x582, 0x5fa, 0x582, 0x478, 0x453, 0x478, 0x453, 0x2de, +0x30c, 0x2de, 0x30c, 0x5c, 0xdd, 0x5c, 0xdd, 0xfd65, 0xfe35, 0xfd65, 0xfe35, +0xfd65, 0xfe35, 0xfbd1, 0xfcee, 0xfbd1, 0xfcee, 0xfaf3, 0xfc57, 0xfaf3, 0xfc57, 0xf9a5, +0xfb4a, 0xf9a5, 0xfb4a, 0xf787, 0xf966, 0xf787, 0xf966, 0xf5a2, 0xf7b4, 0xf5a2, 0xf7b4, +0xf469, 0xf6a6, 0xf469, 0xf6a6, 0xf469, 0xf6a6, 0xf340, 0xf5a0, 0xf340, 0xf5a0, 0xf227, +0xf4a1, 0xf227, 0xf4a1, 0xf0fb, 0xf389, 0xf0fb, 0xf389, 0xf049, 0xf2e2, 0xf049, 0xf2e2, +0xf053, 0xf2f1, 0xf053, 0xf2f1, 0xefb5, 0xf251, 0xefb5, 0xf251, 0xefb5, 0xf251, 0xeefb, +0xf190, 0xeefb, 0xf190, 0xef05, 0xf18e, 0xef05, 0xf18e, 0xee6f, 0xf0e9, 0xee6f, 0xf0e9, +0xeea3, 0xf10b, 0xeea3, 0xf10b, 0xefe7, 0xf23b, 0xefe7, 0xf23b, 0xefe7, 0xf23b, 0xf172, +0xf3b2, 0xf172, 0xf3b2, 0xf32d, 0xf55a, 0xf32d, 0xf55a, 0xf420, 0xf639, 0xf420, 0xf639, +0xf57b, 0xf783, 0xf57b, 0xf783, 0xf5de, 0xf7d6, 0xf5de, 0xf7d6, 0xf57e, 0xf768, 0xf57e, +0xf768, 0xf57e, 0xf768, 0xf51b, 0xf6fa, 0xf51b, 0xf6fa, 0xf41b, 0xf5f1, 0xf41b, 0xf5f1, +0xf3dd, 0xf5ac, 0xf3dd, 0xf5ac, 0xf39b, 0xf564, 0xf39b, 0xf564, 0xf325, 0xf4e9, 0xf325, +0xf4e9, 0xf2b7, 0xf477, 0xf2b7, 0xf477, 0xf2b7, 0xf477, 0xf27a, 0xf435, 0xf27a, 0xf435, +0xf192, 0xf348, 0xf192, 0xf348, 0xf107, 0xf2b5, 0xf107, 0xf2b5, 0xf13f, 0xf2e4, 0xf13f, +0xf2e4, 0xf05a, 0xf1f2, 0xf05a, 0xf1f2, 0xf05a, 0xf1f2, 0xf001, 0xf18a, 0xf001, 0xf18a, +0xf086, 0xf1fb, 0xf086, 0xf1fb, 0xf21d, 0xf379, 0xf21d, 0xf379, 0xf3b4, 0xf4f5, 0xf3b4, +0xf4f5, 0xf4f4, 0xf615, 0xf4f4, 0xf615, 0xf70c, 0xf80a, 0xf70c, 0xf80a, 0xf70c, 0xf80a, +0xf868, 0xf93f, 0xf868, 0xf93f, 0xf9ab, 0xfa59, 0xf9ab, 0xfa59, 0xfb09, 0xfb8d, 0xfb09, +0xfb8d, 0xfc32, 0xfc8b, 0xfc32, 0xfc8b, 0xfd15, 0xfd44, 0xfd15, 0xfd44, 0xfd15, 0xfd44, +0xfe25, 0xfe2d, 0xfe25, 0xfe2d, 0x39, 0x1b, 0x39, 0x1b, 0xed, 0xaf, 0xed, +0xaf, 0xf6, 0x9c, 0xf6, 0x9c, 0x145, 0xd8, 0x145, 0xd8, 0x104, 0x8a, +0x104, 0x8a, 0x104, 0x8a, 0x1e2, 0x164, 0x1e2, 0x164, 0x255, 0x1dc, 0x255, +0x1dc, 0x1b8, 0x14e, 0x1b8, 0x14e, 0x236, 0x1e4, 0x236, 0x1e4, 0x2d0, 0x2a2, +0x2d0, 0x2a2, 0x236, 0x234, 0x236, 0x234, 0x236, 0x234, 0x176, 0x1a9, 0x176, +0x1a9, 0x32, 0xa3, 0x32, 0xa3, 0xfe83, 0xff3a, 0xfe83, 0xff3a, 0xfe76, 0xff78, +0xfe76, 0xff78, 0xfd83, 0xfed5, 0xfd83, 0xfed5, 0xfd83, 0xfed5, 0xfb9b, 0xfd41, 0xfb9b, +0xfd41, 0xfa8e, 0xfc8a, 0xfa8e, 0xfc8a, 0xf8c0, 0xfb13, 0xf8c0, 0xfb13, 0xf6c6, 0xf96f, +0xf6c6, 0xf96f, 0xf4e2, 0xf7dd, 0xf4e2, 0xf7dd, 0xf268, 0xf5b1, 0xf268, 0xf5b1, 0xf268, +0xf5b1, 0xf034, 0xf3c6, 0xf034, 0xf3c6, 0xef07, 0xf2db, 0xef07, 0xf2db, 0xecf2, 0xf100, +0xecf2, 0xf100, 0xea41, 0xee81, 0xea41, 0xee81, 0xe810, 0xec79, 0xe810, 0xec79, 0xe50e, +0xe997, 0xe50e, 0xe997, 0xe50e, 0xe997, 0xe2be, 0xe75d, 0xe2be, 0xe75d, 0xe155, 0xe602, +0xe155, 0xe602, 0xe006, 0xe4b8, 0xe006, 0xe4b8, 0xdfd9, 0xe487, 0xdfd9, 0xe487, 0xdf7e, +0xe421, 0xdf7e, 0xe421, 0xdf7e, 0xe421, 0xdee5, 0xe376, 0xdee5, 0xe376, 0xdefe, 0xe379, +0xdefe, 0xe379, 0xde3d, 0xe29c, 0xde3d, 0xe29c, 0xde02, 0xe242, 0xde02, 0xe242, 0xddab, +0xe1c9, 0xddab, 0xe1c9, 0xdc91, 0xe08d, 0xdc91, 0xe08d, 0xdc91, 0xe08d, 0xdda9, 0xe181, +0xdda9, 0xe181, 0xdf1c, 0xe2d1, 0xdf1c, 0xe2d1, 0xe039, 0xe3ca, 0xe039, 0xe3ca, 0xe14d, +0xe4bd, 0xe14d, 0xe4bd, 0xe1e0, 0xe52f, 0xe1e0, 0xe52f, 0xe318, 0xe648, 0xe318, 0xe648, +0xe318, 0xe648, 0xe3f0, 0xe702, 0xe3f0, 0xe702, 0xe3c8, 0xe6bc, 0xe3c8, 0xe6bc, 0xe2d6, +0xe5ad, 0xe2d6, 0xe5ad, 0xe1d1, 0xe48b, 0xe1d1, 0xe48b, 0xe20d, 0xe4a8, 0xe20d, 0xe4a8, +0xe20d, 0xe4a8, 0xe1ed, 0xe468, 0xe1ed, 0xe468, 0xe170, 0xe3c8, 0xe170, 0xe3c8, 0xe250, +0xe482, 0xe250, 0xe482, 0xe2ee, 0xe4f5, 0xe2ee, 0xe4f5, 0xe359, 0xe531, 0xe359, 0xe531, +0xe4db, 0xe67f, 0xe4db, 0xe67f, 0xe4db, 0xe67f, 0xe6b8, 0xe821, 0xe6b8, 0xe821, 0xe835, +0xe95d, 0xe835, 0xe95d, 0xea98, 0xeb7a, 0xea98, 0xeb7a, 0xedc9, 0xee5f, 0xedc9, 0xee5f, +0xf012, 0xf058, 0xf012, 0xf058, 0xf263, 0xf253, 0xf263, 0xf253, 0xf263, 0xf253, 0xf4df, +0xf476, 0xf4df, 0xf476, 0xf787, 0xf6c2, 0xf787, 0xf6c2, 0xfaa3, 0xf982, 0xfaa3, 0xf982, +0xfd30, 0xfbb2, 0xfd30, 0xfbb2, 0x17, 0xfe3e, 0x17, 0xfe3e, 0x17, 0xfe3e, 0x3d4, +0x1a3, 0x3d4, 0x1a3, 0x6b7, 0x432, 0x6b7, 0x432, 0xa17, 0x745, 0xa17, 0x745, +0xd7b, 0xa62, 0xd7b, 0xa62, 0x102c, 0xcd4, 0x102c, 0xcd4, 0x13d1, 0x1045, 0x13d1, +0x1045, 0x13d1, 0x1045, 0x1625, 0x126f, 0x1625, 0x126f, 0x188a, 0x14b5, 0x188a, 0x14b5, +0x1a91, 0x16a7, 0x1a91, 0x16a7, 0x1ac4, 0x16d1, 0x1ac4, 0x16d1, 0x1bcf, 0x17de, 0x1bcf, +0x17de, 0x1cb7, 0x18d3, 0x1cb7, 0x18d3, 0x1cb7, 0x18d3, 0x1d43, 0x1976, 0x1d43, 0x1976, +0x1de9, 0x1a3c, 0x1de9, 0x1a3c, 0x1e24, 0x1a9e, 0x1e24, 0x1a9e, 0x1eb0, 0x1b58, 0x1eb0, +0x1b58, 0x1fae, 0x1c8a, 0x1fae, 0x1c8a, 0x1fae, 0x1c8a, 0x1f1e, 0x1c31, 0x1f1e, 0x1c31, +0x1e0d, 0x1b58, 0x1e0d, 0x1b58, 0x1c5e, 0x19e3, 0x1c5e, 0x19e3, 0x19db, 0x1799, 0x19db, +0x1799, 0x18da, 0x16cf, 0x18da, 0x16cf, 0x17bc, 0x15e5, 0x17bc, 0x15e5, 0x17bc, 0x15e5, +0x1716, 0x156f, 0x1716, 0x156f, 0x161d, 0x14a0, 0x161d, 0x14a0, 0x14a5, 0x134d, 0x14a5, +0x134d, 0x1417, 0x12dd, 0x1417, 0x12dd, 0x1327, 0x1206, 0x1327, 0x1206, 0x127d, 0x1171, +0x127d, 0x1171, 0x127d, 0x1171, 0x11c6, 0x10c7, 0x11c6, 0x10c7, 0x10b1, 0xfbb, 0x10b1, +0xfbb, 0xfc5, 0xed4, 0xfc5, 0xed4, 0xf8e, 0xe9f, 0xf8e, 0xe9f, 0xe27, 0xd38, +0xe27, 0xd38, 0xe27, 0xd38, 0xc5a, 0xb6a, 0xc5a, 0xb6a, 0xc28, 0xb37, 0xc28, +0xb37, 0xac4, 0x9d4, 0xac4, 0x9d4, 0xac5, 0x9d7, 0xac5, 0x9d7, 0xb93, 0xaab, +0xb93, 0xaab, 0xab6, 0x9d6, 0xab6, 0x9d6, 0xab6, 0x9d6, 0xb5c, 0xa8a, 0xb5c, +0xa8a, 0xbaa, 0xaea, 0xbaa, 0xaea, 0xb68, 0xabf, 0xb68, 0xabf, 0xa4d, 0x9bf, +0xa4d, 0x9bf, 0x84c, 0x7dd, 0x84c, 0x7dd, 0x7d0, 0x784, 0x7d0, 0x784, 0x7d0, +0x784, 0x6b2, 0x68d, 0x6b2, 0x68d, 0x5df, 0x5e2, 0x5df, 0x5e2, 0x522, 0x54f, +0x522, 0x54f, 0x37f, 0x3d6, 0x37f, 0x3d6, 0x294, 0x314, 0x294, 0x314, 0x294, +0x314, 0x268, 0x30f, 0x268, 0x30f, 0x24c, 0x317, 0x24c, 0x317, 0x14d, 0x237, +0x14d, 0x237, 0x10, 0x115, 0x10, 0x115, 0xfedf, 0xfff8, 0xfedf, 0xfff8, 0xfd95, +0xfebd, 0xfd95, 0xfebd, 0xfd95, 0xfebd, 0xfc4b, 0xfd7a, 0xfc4b, 0xfd7a, 0xfc31, 0xfd61, +0xfc31, 0xfd61, 0xfc24, 0xfd4e, 0xfc24, 0xfd4e, 0xfbcc, 0xfcea, 0xfbcc, 0xfcea, 0xfb8f, +0xfc9b, 0xfb8f, 0xfc9b, 0xfacc, 0xfbc0, 0xfacc, 0xfbc0, 0xfacc, 0xfbc0, 0xfae1, 0xfbbb, +0xfae1, 0xfbbb, 0xfafb, 0xfbb7, 0xfafb, 0xfbb7, 0xfbe2, 0xfc7d, 0xfbe2, 0xfc7d, 0xfcbf, +0xfd3a, 0xfcbf, 0xfd3a, 0xfdc6, 0xfe22, 0xfdc6, 0xfe22, 0xfdc6, 0xfe22, 0xff30, 0xff6e, +0xff30, 0xff6e, 0xff09, 0xff2d, 0xff09, 0xff2d, 0xfe8a, 0xfe99, 0xfe8a, 0xfe99, 0xfe1f, +0xfe1d, 0xfe1f, 0xfe1d, 0xfe06, 0xfdfb, 0xfe06, 0xfdfb, 0xfe3f, 0xfe32, 0xfe3f, 0xfe32, +0xfe3f, 0xfe32, 0xfec1, 0xfeb8, 0xfec1, 0xfeb8, 0xfe72, 0xfe75, 0xfe72, 0xfe75, 0xfe5c, +0xfe72, 0xfe5c, 0xfe72, 0xfe79, 0xfea9, 0xfe79, 0xfea9, 0xfe20, 0xfe70, 0xfe20, 0xfe70, +0xfe20, 0xfe70, 0xfd78, 0xfded, 0xfd78, 0xfded, 0xfbe9, 0xfc88, 0xfbe9, 0xfc88, 0xfb1a, +0xfbe6, 0xfb1a, 0xfbe6, 0xfabe, 0xfbb7, 0xfabe, 0xfbb7, 0xfa8b, 0xfbb3, 0xfa8b, 0xfbb3, +0xf955, 0xfaaa, 0xf955, 0xfaaa, 0xf955, 0xfaaa, 0xf85a, 0xf9da, 0xf85a, 0xf9da, 0xf74e, +0xf8f5, 0xf74e, 0xf8f5, 0xf602, 0xf7cb, 0xf602, 0xf7cb, 0xf5e7, 0xf7cb, 0xf5e7, 0xf7cb, +0xf490, 0xf689, 0xf490, 0xf689, 0xf3fb, 0xf602, 0xf3fb, 0xf602, 0xf3fb, 0xf602, 0xf391, +0xf59c, 0xf391, 0xf59c, 0xf212, 0xf419, 0xf212, 0xf419, 0xf0e3, 0xf2de, 0xf0e3, 0xf2de, +0xf012, 0xf1f7, 0xf012, 0xf1f7, 0xf012, 0xf1db, 0xf012, 0xf1db, 0xf012, 0xf1db, 0xf032, +0xf1d7, 0xf032, 0xf1d7, 0xf02c, 0xf1a8, 0xf02c, 0xf1a8, 0xf0a1, 0xf1ed, 0xf0a1, 0xf1ed, +0xf0f3, 0xf20d, 0xf0f3, 0xf20d, 0xf156, 0xf23a, 0xf156, 0xf23a, 0xf357, 0xf404, 0xf357, +0xf404, 0xf357, 0xf404, 0xf4c8, 0xf53e, 0xf4c8, 0xf53e, 0xf57a, 0xf5b8, 0xf57a, 0xf5b8, +0xf7a9, 0xf7b3, 0xf7a9, 0xf7b3, 0xf9ef, 0xf9c7, 0xf9ef, 0xf9c7, 0xfc1c, 0xfbc6, 0xfc1c, +0xfbc6, 0xfee2, 0xfe62, 0xfee2, 0xfe62, 0xfee2, 0xfe62, 0x131, 0x8b, 0x131, 0x8b, +0x383, 0x2bc, 0x383, 0x2bc, 0x55a, 0x478, 0x55a, 0x478, 0x6f1, 0x5f8, 0x6f1, +0x5f8, 0x87f, 0x772, 0x87f, 0x772, 0x87f, 0x772, 0x937, 0x81b, 0x937, 0x81b, +0xa96, 0x96d, 0xa96, 0x96d, 0xadf, 0x9ab, 0xadf, 0x9ab, 0xada, 0x99c, 0xada, +0x99c, 0xb4f, 0xa07, 0xb4f, 0xa07, 0xb49, 0x9f7, 0xb49, 0x9f7, 0xb49, 0x9f7, +0xb98, 0xa3a, 0xb98, 0xa3a, 0xbc3, 0xa57, 0xbc3, 0xa57, 0xc84, 0xb06, 0xc84, +0xb06, 0xd94, 0xc01, 0xd94, 0xc01, 0xef1, 0xd45, 0xef1, 0xd45, 0x10b0, 0xee7, +0x10b0, 0xee7, 0x10b0, 0xee7, 0x129c, 0x10b2, 0x129c, 0x10b2, 0x1466, 0x1257, 0x1466, +0x1257, 0x1638, 0x1401, 0x1638, 0x1401, 0x17a7, 0x1545, 0x17a7, 0x1545, 0x1851, 0x15c3, +0x1851, 0x15c3, 0x1851, 0x15c3, 0x188f, 0x15d4, 0x188f, 0x15d4, 0x18df, 0x15f7, 0x18df, +0x15f7, 0x1a1d, 0x170a, 0x1a1d, 0x170a, 0x1ad9, 0x179d, 0x1ad9, 0x179d, 0x1b76, 0x1816, +0x1b76, 0x1816, 0x1be4, 0x1863, 0x1be4, 0x1863, 0x1be4, 0x1863, 0x1c3d, 0x18a3, 0x1c3d, +0x18a3, 0x1cbd, 0x1910, 0x1cbd, 0x1910, 0x1ca1, 0x18e9, 0x1ca1, 0x18e9, 0x1ccc, 0x1911, +0x1ccc, 0x1911, 0x1d2e, 0x1978, 0x1d2e, 0x1978, 0x1d12, 0x196b, 0x1d12, 0x196b, 0x1d12, +0x196b, 0x1d58, 0x19c8, 0x1d58, 0x19c8, 0x1cc9, 0x195a, 0x1cc9, 0x195a, 0x1b04, 0x17bc, +0x1b04, 0x17bc, 0x1ba5, 0x188c, 0x1ba5, 0x188c, 0x1ad6, 0x17f1, 0x1ad6, 0x17f1, 0x1ad6, +0x17f1, 0x192b, 0x1680, 0x192b, 0x1680, 0x191f, 0x16b2, 0x191f, 0x16b2, 0x17c9, 0x159c, +0x17c9, 0x159c, 0x1726, 0x153a, 0x1726, 0x153a, 0x16f3, 0x1548, 0x16f3, 0x1548, 0x156d, +0x1401, 0x156d, 0x1401, 0x156d, 0x1401, 0x1352, 0x1223, 0x1352, 0x1223, 0x12ae, 0x11b7, +0x12ae, 0x11b7, 0x11b5, 0x10f1, 0x11b5, 0x10f1, 0x10a0, 0x100a, 0x10a0, 0x100a, 0xffa, +0xf8a, 0xffa, 0xf8a, 0xe2d, 0xddd, 0xe2d, 0xddd, 0xe2d, 0xddd, 0xc9e, 0xc67, +0xc9e, 0xc67, 0xb36, 0xb10, 0xb36, 0xb10, 0x97f, 0x963, 0x97f, 0x963, 0x7c3, +0x7aa, 0x7c3, 0x7aa, 0x79a, 0x77f, 0x79a, 0x77f, 0x79a, 0x77f, 0x731, 0x70f, +0x731, 0x70f, 0x6e3, 0x6b5, 0x6e3, 0x6b5, 0x6d0, 0x692, 0x6d0, 0x692, 0x5f5, +0x5a5, 0x5f5, 0x5a5, 0x601, 0x59f, 0x601, 0x59f, 0x54a, 0x4d5, 0x54a, 0x4d5, +0x54a, 0x4d5, 0x3e0, 0x358, 0x3e0, 0x358, 0x30c, 0x273, 0x30c, 0x273, 0x35f, +0x2b7, 0x35f, 0x2b7, 0x245, 0x193, 0x245, 0x193, 0x142, 0x88, 0x142, 0x88, +0x1fb, 0x13c, 0x1fb, 0x13c, 0x1fb, 0x13c, 0x205, 0x147, 0x205, 0x147, 0x2a1, +0x1e6, 0x2a1, 0x1e6, 0x2ce, 0x21b, 0x2ce, 0x21b, 0x1be, 0x115, 0x1be, 0x115, +0x3d, 0xffa2, 0x3d, 0xffa2, 0x3d, 0xffa2, 0xff60, 0xfed4, 0xff60, 0xfed4, 0xfe5a, +0xfde0, 0xfe5a, 0xfde0, 0xfcc5, 0xfc5c, 0xfcc5, 0xfc5c, 0xfbd1, 0xfb79, 0xfbd1, 0xfb79, +0xfb6a, 0xfb22, 0xfb6a, 0xfb22, 0xfba8, 0xfb6e, 0xfba8, 0xfb6e, 0xfba8, 0xfb6e, 0xfbd6, +0xfba8, 0xfbd6, 0xfba8, 0xfb4d, 0xfb27, 0xfb4d, 0xfb27, 0xfa5d, 0xfa3d, 0xfa5d, 0xfa3d, +0xfa59, 0xfa3a, 0xfa59, 0xfa3a, 0xf9d3, 0xf9b1, 0xf9d3, 0xf9b1, 0xf92b, 0xf901, 0xf92b, +0xf901, 0xf92b, 0xf901, 0xf952, 0xf91e, 0xf952, 0xf91e, 0xf8ab, 0xf869, 0xf8ab, 0xf869, +0xf933, 0xf8df, 0xf933, 0xf8df, 0xf93c, 0xf8d5, 0xf93c, 0xf8d5, 0xf83c, 0xf7c0, 0xf83c, +0xf7c0, 0xf83c, 0xf7c0, 0xf930, 0xf89d, 0xf930, 0xf89d, 0xfa1e, 0xf977, 0xfa1e, 0xf977, +0xfb19, 0xfa5d, 0xfb19, 0xfa5d, 0xfc52, 0xfb85, 0xfc52, 0xfb85, 0xfd11, 0xfc36, 0xfd11, +0xfc36, 0xfd62, 0xfc7d, 0xfd62, 0xfc7d, 0xfd62, 0xfc7d, 0xfd67, 0xfc7e, 0xfd67, 0xfc7e, +0xfda1, 0xfcb8, 0xfda1, 0xfcb8, 0xfcb0, 0xfbce, 0xfcb0, 0xfbce, 0xfc7e, 0xfbaa, 0xfc7e, +0xfbaa, 0xfc88, 0xfbc8, 0xfc88, 0xfbc8, 0xfc44, 0xfb9f, 0xfc44, 0xfb9f, 0xfc44, 0xfb9f, +0xfbe5, 0xfb60, 0xfbe5, 0xfb60, 0xfa20, 0xf9c2, 0xfa20, 0xf9c2, 0xf913, 0xf8e1, 0xf913, +0xf8e1, 0xf7a4, 0xf7a2, 0xf7a4, 0xf7a2, 0xf62c, 0xf65f, 0xf62c, 0xf65f, 0xf62c, 0xf65f, +0xf517, 0xf580, 0xf517, 0xf580, 0xf399, 0xf439, 0xf399, 0xf439, 0xf1ba, 0xf292, 0xf1ba, +0xf292, 0xeff5, 0xf103, 0xeff5, 0xf103, 0xee6e, 0xefb0, 0xee6e, 0xefb0, 0xebf0, 0xed63, +0xebf0, 0xed63, 0xebf0, 0xed63, 0xeb0b, 0xecaa, 0xeb0b, 0xecaa, 0xeb18, 0xecde, 0xeb18, +0xecde, 0xe9fd, 0xebe4, 0xe9fd, 0xebe4, 0xe962, 0xeb62, 0xe962, 0xeb62, 0xe99c, 0xebb0, +0xe99c, 0xebb0, 0xe99c, 0xebb0, 0xe928, 0xeb47, 0xe928, 0xeb47, 0xe9c4, 0xebe7, 0xe9c4, +0xebe7, 0xeb0f, 0xed2f, 0xeb0f, 0xed2f, 0xeb28, 0xed3f, 0xeb28, 0xed3f, 0xec03, 0xee0a, +0xec03, 0xee0a, 0xed9f, 0xef91, 0xed9f, 0xef91, 0xed9f, 0xef91, 0xeefc, 0xf0d5, 0xeefc, +0xf0d5, 0xeeb1, 0xf06d, 0xeeb1, 0xf06d, 0xeea6, 0xf042, 0xeea6, 0xf042, 0xeec3, 0xf03e, +0xeec3, 0xf03e, 0xef28, 0xf082, 0xef28, 0xf082, 0xf11e, 0xf257, 0xf11e, 0xf257, 0xf11e, +0xf257, 0xf2a6, 0xf3c1, 0xf2a6, 0xf3c1, 0xf475, 0xf573, 0xf475, 0xf573, 0xf5b1, 0xf696, +0xf5b1, 0xf696, 0xf700, 0xf7d1, 0xf700, 0xf7d1, 0xf745, 0xf805, 0xf745, 0xf805, 0xf745, +0xf805, 0xf6dd, 0xf791, 0xf6dd, 0xf791, 0xf7aa, 0xf858, 0xf7aa, 0xf858, 0xf880, 0xf92c, +0xf880, 0xf92c, 0xf950, 0xf9ff, 0xf950, 0xf9ff, 0xf87f, 0xf934, 0xf87f, 0xf934, 0xf862, +0xf922, 0xf862, 0xf922, 0xf862, 0xf922, 0xf822, 0xf8f0, 0xf822, 0xf8f0, 0xf6fb, 0xf7d9, +0xf6fb, 0xf7d9, 0xf6bb, 0xf7ac, 0xf6bb, 0xf7ac, 0xf547, 0xf64a, 0xf547, 0xf64a, 0xf467, +0xf57d, 0xf467, 0xf57d, 0xf443, 0xf56b, 0xf443, 0xf56b, 0xf443, 0xf56b, 0xf3f7, 0xf530, +0xf3f7, 0xf530, 0xf3b2, 0xf4f9, 0xf3b2, 0xf4f9, 0xf309, 0xf45d, 0xf309, 0xf45d, 0xf352, +0xf4b0, 0xf352, 0xf4b0, 0xf3f5, 0xf559, 0xf3f5, 0xf559, 0xf3f5, 0xf559, 0xf3d4, 0xf53c, +0xf3d4, 0xf53c, 0xf33f, 0xf4a7, 0xf33f, 0xf4a7, 0xf2d5, 0xf43b, 0xf2d5, 0xf43b, 0xf280, +0xf3e2, 0xf280, 0xf3e2, 0xf2a3, 0xf3ff, 0xf2a3, 0xf3ff, 0xf328, 0xf47d, 0xf328, 0xf47d, +0xf328, 0xf47d, 0xf359, 0xf4a7, 0xf359, 0xf4a7, 0xf389, 0xf4d1, 0xf389, 0xf4d1, 0xf379, +0xf4bc, 0xf379, 0xf4bc, 0xf376, 0xf4b5, 0xf376, 0xf4b5, 0xf30b, 0xf44a, 0xf30b, 0xf44a, +0xf28c, 0xf3cf, 0xf28c, 0xf3cf, 0xf28c, 0xf3cf, 0xf227, 0xf372, 0xf227, 0xf372, 0xf125, +0xf27c, 0xf125, 0xf27c, 0xf113, 0xf27b, 0xf113, 0xf27b, 0xf168, 0xf2e7, 0xf168, 0xf2e7, +0xf0da, 0xf273, 0xf0da, 0xf273, 0xf0da, 0xf273, 0xf063, 0xf21c, 0xf063, 0xf21c, 0xef9f, +0xf17d, 0xef9f, 0xf17d, 0xed08, 0xef0d, 0xed08, 0xef0d, 0xebab, 0xedda, 0xebab, 0xedda, +0xebbe, 0xee19, 0xebbe, 0xee19, 0xeac5, 0xed4d, 0xeac5, 0xed4d, 0xeac5, 0xed4d, 0xea52, +0xed07, 0xea52, 0xed07, 0xe96a, 0xec49, 0xe96a, 0xec49, 0xe8f5, 0xebfb, 0xe8f5, 0xebfb, +0xe8e9, 0xec12, 0xe8e9, 0xec12, 0xe824, 0xeb6b, 0xe824, 0xeb6b, 0xe8ac, 0xec0a, 0xe8ac, +0xec0a, 0xe8ac, 0xec0a, 0xe906, 0xec73, 0xe906, 0xec73, 0xe8bd, 0xec31, 0xe8bd, 0xec31, +0xe8af, 0xec21, 0xe8af, 0xec21, 0xe849, 0xebaf, 0xe849, 0xebaf, 0xe7c5, 0xeb15, 0xe7c5, +0xeb15, 0xe7c5, 0xeb15, 0xe818, 0xeb49, 0xe818, 0xeb49, 0xe9b1, 0xecb9, 0xe9b1, 0xecb9, +0xeb82, 0xee57, 0xeb82, 0xee57, 0xed9b, 0xf035, 0xed9b, 0xf035, 0xefdb, 0xf233, 0xefdb, +0xf233, 0xf15a, 0xf367, 0xf15a, 0xf367, 0xf15a, 0xf367, 0xf39d, 0xf55c, 0xf39d, 0xf55c, +0xf6c4, 0xf830, 0xf6c4, 0xf830, 0xf8e2, 0xf9f7, 0xf8e2, 0xf9f7, 0xfb27, 0xfbe4, 0xfb27, +0xfbe4, 0xfe6d, 0xfed2, 0xfe6d, 0xfed2, 0x179, 0x188, 0x179, 0x188, 0x179, 0x188, +0x4a0, 0x459, 0x4a0, 0x459, 0x7de, 0x746, 0x7de, 0x746, 0xb17, 0xa31, 0xb17, +0xa31, 0xd59, 0xc2b, 0xd59, 0xc2b, 0xed0, 0xd5f, 0xed0, 0xd5f, 0xed0, 0xd5f, +0x1138, 0xf8a, 0x1138, 0xf8a, 0x1290, 0x10ac, 0x1290, 0x10ac, 0x136e, 0x115a, 0x136e, +0x115a, 0x14c9, 0x128b, 0x14c9, 0x128b, 0x1559, 0x12f6, 0x1559, 0x12f6, 0x1533, 0x12b0, +0x1533, 0x12b0, 0x1533, 0x12b0, 0x1499, 0x11fc, 0x1499, 0x11fc, 0x14c6, 0x1212, 0x14c6, +0x1212, 0x1545, 0x127d, 0x1545, 0x127d, 0x1605, 0x132c, 0x1605, 0x132c, 0x166c, 0x1383, +0x166c, 0x1383, 0x16be, 0x13c7, 0x16be, 0x13c7, 0x16be, 0x13c7, 0x17d2, 0x14cd, 0x17d2, +0x14cd, 0x1867, 0x1553, 0x1867, 0x1553, 0x1993, 0x1671, 0x1993, 0x1671, 0x1aed, 0x17bc, +0x1aed, 0x17bc, 0x1b98, 0x1857, 0x1b98, 0x1857, 0x1b98, 0x1857, 0x1c00, 0x18b0, 0x1c00, +0x18b0, 0x1c30, 0x18d0, 0x1c30, 0x18d0, 0x1c6f, 0x1901, 0x1c6f, 0x1901, 0x1d32, 0x19b6, +0x1d32, 0x19b6, 0x1e39, 0x1ab2, 0x1e39, 0x1ab2, 0x1de2, 0x1a52, 0x1de2, 0x1a52, 0x1de2, +0x1a52, 0x1dca, 0x1a36, 0x1dca, 0x1a36, 0x1dc0, 0x1a2b, 0x1dc0, 0x1a2b, 0x1c64, 0x18d5, +0x1c64, 0x18d5, 0x1cc0, 0x193e, 0x1cc0, 0x193e, 0x1c3f, 0x18d1, 0x1c3f, 0x18d1, 0x1ae9, +0x1798, 0x1ae9, 0x1798, 0x1ae9, 0x1798, 0x1a90, 0x1763, 0x1a90, 0x1763, 0x1828, 0x1529, +0x1828, 0x1529, 0x1641, 0x1379, 0x1641, 0x1379, 0x1409, 0x1180, 0x1409, 0x1180, 0x11d8, +0xf97, 0x11d8, 0xf97, 0x11d8, 0xf97, 0x1139, 0xf48, 0x1139, 0xf48, 0xfd6, 0xe3c, +0xfd6, 0xe3c, 0xeec, 0xdaf, 0xeec, 0xdaf, 0xe17, 0xd3c, 0xe17, 0xd3c, 0xd75, +0xcff, 0xd75, 0xcff, 0xcd4, 0xcc5, 0xcd4, 0xcc5, 0xcd4, 0xcc5, 0xb6e, 0xbc8, +0xb6e, 0xbc8, 0x841, 0x900, 0x841, 0x900, 0x46c, 0x590, 0x46c, 0x590, 0x1cb, +0x34e, 0x1cb, 0x34e, 0xff7b, 0x158, 0xff7b, 0x158, 0xfe24, 0x54, 0xfe24, 0x54, +0xfe24, 0x54, 0xfcdd, 0xff56, 0xfcdd, 0xff56, 0xfb46, 0xfe01, 0xfb46, 0xfe01, 0xf889, +0xfb7b, 0xf889, 0xfb7b, 0xf611, 0xf930, 0xf611, 0xf930, 0xf46b, 0xf7ac, 0xf46b, 0xf7ac, +0xf46b, 0xf7ac, 0xf250, 0xf5aa, 0xf250, 0xf5aa, 0xf14e, 0xf4b6, 0xf14e, 0xf4b6, 0xf020, +0xf38b, 0xf020, 0xf38b, 0xef4e, 0xf2b4, 0xef4e, 0xf2b4, 0xef4c, 0xf2a6, 0xef4c, 0xf2a6, +0xef1f, 0xf266, 0xef1f, 0xf266, 0xef1f, 0xf266, 0xee26, 0xf153, 0xee26, 0xf153, 0xed38, +0xf047, 0xed38, 0xf047, 0xed6a, 0xf057, 0xed6a, 0xf057, 0xed5c, 0xf026, 0xed5c, 0xf026, +0xedc3, 0xf069, 0xedc3, 0xf069, 0xedc3, 0xf069, 0xeedc, 0xf15d, 0xeedc, 0xf15d, 0xefbe, +0xf21c, 0xefbe, 0xf21c, 0xf0bc, 0xf2f7, 0xf0bc, 0xf2f7, 0xf1fc, 0xf418, 0xf1fc, 0xf418, +0xf244, 0xf444, 0xf244, 0xf444, 0xf2b4, 0xf499, 0xf2b4, 0xf499, 0xf2b4, 0xf499, 0xf40e, +0xf5dc, 0xf40e, 0xf5dc, 0xf48e, 0xf646, 0xf48e, 0xf646, 0xf4a0, 0xf645, 0xf4a0, 0xf645, +0xf4c2, 0xf655, 0xf4c2, 0xf655, 0xf453, 0xf5d5, 0xf453, 0xf5d5, 0xf3f9, 0xf569, 0xf3f9, +0xf569, 0xf3f9, 0xf569, 0xf51e, 0xf67c, 0xf51e, 0xf67c, 0xf547, 0xf691, 0xf547, 0xf691, +0xf527, 0xf65a, 0xf527, 0xf65a, 0xf653, 0xf76c, 0xf653, 0xf76c, 0xf5e0, 0xf6da, 0xf5e0, +0xf6da, 0xf5e0, 0xf6da, 0xf5fc, 0xf6d3, 0xf5fc, 0xf6d3, 0xf735, 0xf7e5, 0xf735, 0xf7e5, +0xf751, 0xf7d4, 0xf751, 0xf7d4, 0xf88d, 0xf8df, 0xf88d, 0xf8df, 0xfab8, 0xfad4, 0xfab8, +0xfad4, 0xfaa3, 0xfa85, 0xfaa3, 0xfa85, 0xfaa3, 0xfa85, 0xfb22, 0xfac7, 0xfb22, 0xfac7, +0xfc97, 0xfbfd, 0xfc97, 0xfbfd, 0xfd47, 0xfc6b, 0xfd47, 0xfc6b, 0x67, 0xff4a, 0x67, +0xff4a, 0x36e, 0x211, 0x36e, 0x211, 0x4f9, 0x35f, 0x4f9, 0x35f, 0x4f9, 0x35f, +0x68f, 0x4ba, 0x68f, 0x4ba, 0x7ea, 0x5e0, 0x7ea, 0x5e0, 0x9da, 0x7a2, 0x9da, +0x7a2, 0xbe2, 0x981, 0xbe2, 0x981, 0xda1, 0xb21, 0xda1, 0xb21, 0xda1, 0xb21, +0xea6, 0xc10, 0xea6, 0xc10, 0xfe7, 0xd43, 0xfe7, 0xd43, 0x1122, 0xe79, 0x1122, +0xe79, 0x115e, 0xeba, 0x115e, 0xeba, 0x11b2, 0xf1d, 0x11b2, 0xf1d, 0x1160, 0xee1, +0x1160, 0xee1, 0x1160, 0xee1, 0x10d4, 0xe75, 0x10d4, 0xe75, 0x10dd, 0xea2, 0x10dd, +0xea2, 0x1028, 0xe19, 0x1028, 0xe19, 0x101d, 0xe3e, 0x101d, 0xe3e, 0x1047, 0xe9a, +0x1047, 0xe9a, 0xeee, 0xd75, 0xeee, 0xd75, 0xeee, 0xd75, 0xdd9, 0xc95, 0xdd9, +0xc95, 0xcb6, 0xba4, 0xcb6, 0xba4, 0xc0e, 0xb2c, 0xc0e, 0xb2c, 0xbd7, 0xb21, +0xbd7, 0xb21, 0xaf3, 0xa64, 0xaf3, 0xa64, 0xaf3, 0xa64, 0xa34, 0x9c7, 0xa34, +0x9c7, 0x952, 0x900, 0x952, 0x900, 0x8ba, 0x87b, 0x8ba, 0x87b, 0x8ac, 0x87a, +0x8ac, 0x87a, 0x7c7, 0x79c, 0x7c7, 0x79c, 0x630, 0x603, 0x630, 0x603, 0x630, +0x603, 0x5b8, 0x583, 0x5b8, 0x583, 0x4fc, 0x4ba, 0x4fc, 0x4ba, 0x503, 0x4ae, +0x503, 0x4ae, 0x587, 0x51c, 0x587, 0x51c, 0x499, 0x414, 0x499, 0x414, 0x484, +0x3e5, 0x484, 0x3e5, 0x484, 0x3e5, 0x47c, 0x3c0, 0x47c, 0x3c0, 0x577, 0x49e, +0x577, 0x49e, 0x719, 0x626, 0x719, 0x626, 0x916, 0x80a, 0x916, 0x80a, 0xa9f, +0x97c, 0xa9f, 0x97c, 0xa9f, 0x97c, 0xabb, 0x984, 0xabb, 0x984, 0xce3, 0xb9c, +0xce3, 0xb9c, 0xe67, 0xd13, 0xe67, 0xd13, 0xf15, 0xdb9, 0xf15, 0xdb9, 0xffc, +0xe9a, 0xffc, 0xe9a, 0xfc9, 0xe65, 0xfc9, 0xe65, 0xfc9, 0xe65, 0x1070, 0xf0d, +0x1070, 0xf0d, 0x1172, 0x1011, 0x1172, 0x1011, 0x1162, 0x1006, 0x1162, 0x1006, 0x1130, +0xfd9, 0x1130, 0xfd9, 0x1077, 0xf25, 0x1077, 0xf25, 0xfbf, 0xe71, 0xfbf, 0xe71, +0xfbf, 0xe71, 0x10d9, 0xf8d, 0x10d9, 0xf8d, 0x107a, 0xf2e, 0x107a, 0xf2e, 0x1030, +0xee1, 0x1030, 0xee1, 0x108c, 0xf37, 0x108c, 0xf37, 0x1001, 0xea3, 0x1001, 0xea3, +0x1001, 0xea3, 0x1109, 0xf9e, 0x1109, 0xf9e, 0x111b, 0xf9f, 0x111b, 0xf9f, 0x1152, +0xfc3, 0x1152, 0xfc3, 0x1163, 0xfbc, 0x1163, 0xfbc, 0x10c2, 0xf02, 0x10c2, 0xf02, +0x1160, 0xf86, 0x1160, 0xf86, 0x1160, 0xf86, 0x11d6, 0xfe0, 0x11d6, 0xfe0, 0x12f7, +0x10e5, 0x12f7, 0x10e5, 0x13f2, 0x11c4, 0x13f2, 0x11c4, 0x1525, 0x12de, 0x1525, 0x12de, +0x15e0, 0x1383, 0x15e0, 0x1383, 0x1558, 0x12ea, 0x1558, 0x12ea, 0x1558, 0x12ea, 0x1477, +0x11fc, 0x1477, 0x11fc, 0x1381, 0x10ff, 0x1381, 0x10ff, 0x1310, 0x108d, 0x1310, 0x108d, +0x124c, 0xfcf, 0x124c, 0xfcf, 0x123c, 0xfce, 0x123c, 0xfce, 0x123c, 0xfce, 0x115b, +0xf04, 0x115b, 0xf04, 0x1114, 0xeda, 0x1114, 0xeda, 0x10c0, 0xead, 0x10c0, 0xead, +0xf0a, 0xd25, 0xf0a, 0xd25, 0xe97, 0xce6, 0xe97, 0xce6, 0xbc9, 0xa54, 0xbc9, +0xa54, 0xbc9, 0xa54, 0x9ed, 0x8b8, 0x9ed, 0x8b8, 0x8f7, 0x808, 0x8f7, 0x808, +0x70d, 0x667, 0x70d, 0x667, 0x68f, 0x634, 0x68f, 0x634, 0x455, 0x447, 0x455, +0x447, 0x22b, 0x26a, 0x22b, 0x26a, 0x22b, 0x26a, 0x45, 0xd0, 0x45, 0xd0, +0xfe3e, 0xff12, 0xfe3e, 0xff12, 0xfb8e, 0xfca8, 0xfb8e, 0xfca8, 0xf7e7, 0xf943, 0xf7e7, +0xf943, 0xf584, 0xf71d, 0xf584, 0xf71d, 0xf584, 0xf71d, 0xf2f1, 0xf4bf, 0xf2f1, 0xf4bf, +0xf155, 0xf354, 0xf155, 0xf354, 0xf00c, 0xf234, 0xf00c, 0xf234, 0xee20, 0xf069, 0xee20, +0xf069, 0xecf8, 0xef5b, 0xecf8, 0xef5b, 0xec0f, 0xee85, 0xec0f, 0xee85, 0xec0f, 0xee85, +0xec7d, 0xeeff, 0xec7d, 0xeeff, 0xec44, 0xeecb, 0xec44, 0xeecb, 0xeb1e, 0xeda4, 0xeb1e, +0xeda4, 0xeb76, 0xedf6, 0xeb76, 0xedf6, 0xeb9f, 0xee14, 0xeb9f, 0xee14, 0xebe7, 0xee4d, +0xebe7, 0xee4d, 0xebe7, 0xee4d, 0xeb5e, 0xedb1, 0xeb5e, 0xedb1, 0xea96, 0xecd5, 0xea96, +0xecd5, 0xeb7a, 0xeda2, 0xeb7a, 0xeda2, 0xec67, 0xee77, 0xec67, 0xee77, 0xed97, 0xef8f, +0xed97, 0xef8f, 0xed97, 0xef8f, 0xeece, 0xf0af, 0xeece, 0xf0af, 0xef88, 0xf151, 0xef88, +0xf151, 0xefee, 0xf1a1, 0xefee, 0xf1a1, 0xf152, 0xf2f0, 0xf152, 0xf2f0, 0xf143, 0xf2cd, +0xf143, 0xf2cd, 0xf002, 0xf179, 0xf002, 0xf179, 0xf002, 0xf179, 0xefe7, 0xf14d, 0xefe7, +0xf14d, 0xef26, 0xf07c, 0xef26, 0xf07c, 0xf036, 0xf17b, 0xf036, 0xf17b, 0xf098, 0xf1cd, +0xf098, 0xf1cd, 0xf092, 0xf1b7, 0xf092, 0xf1b7, 0xf092, 0xf1b7, 0xf189, 0xf29d, 0xf189, +0xf29d, 0xf114, 0xf217, 0xf114, 0xf217, 0xf23d, 0xf32c, 0xf23d, 0xf32c, 0xf367, 0xf441, +0xf367, 0xf441, 0xf41e, 0xf4e1, 0xf41e, 0xf4e1, 0xf53b, 0xf5e5, 0xf53b, 0xf5e5, 0xf53b, +0xf5e5, 0xf674, 0xf702, 0xf674, 0xf702, 0xf894, 0xf903, 0xf894, 0xf903, 0xf9bd, 0xfa0b, +0xf9bd, 0xfa0b, 0xfafc, 0xfb28, 0xfafc, 0xfb28, 0xfc56, 0xfc5f, 0xfc56, 0xfc5f, 0xfcf6, +0xfcd9, 0xfcf6, 0xfcd9, 0xfcf6, 0xfcd9, 0xfec0, 0xfe7e, 0xfec0, 0xfe7e, 0x28, 0xffc2, +0x28, 0xffc2, 0x9a, 0x11, 0x9a, 0x11, 0x18f, 0xe5, 0x18f, 0xe5, 0x27a, +0x1b2, 0x27a, 0x1b2, 0x27a, 0x1b2, 0x3ed, 0x30b, 0x3ed, 0x30b, 0x5b6, 0x4bf, +0x5b6, 0x4bf, 0x64f, 0x548, 0x64f, 0x548, 0x55e, 0x44e, 0x55e, 0x44e, 0x4d0, +0x3bf, 0x4d0, 0x3bf, 0x51c, 0x411, 0x51c, 0x411, 0x51c, 0x411, 0x459, 0x35c, +0x459, 0x35c, 0x413, 0x32d, 0x413, 0x32d, 0x33c, 0x275, 0x33c, 0x275, 0x134, +0x93, 0x134, 0x93, 0x126, 0xb3, 0x126, 0xb3, 0xa9, 0x6c, 0xa9, 0x6c, +0xa9, 0x6c, 0xff53, 0xff53, 0xff53, 0xff53, 0xfe3a, 0xfe7b, 0xfe3a, 0xfe7b, 0xfc8c, +0xfd14, 0xfc8c, 0xfd14, 0xfadd, 0xfbb0, 0xfadd, 0xfbb0, 0xf839, 0xf959, 0xf839, 0xf959, +0xf839, 0xf959, 0xf558, 0xf6c5, 0xf558, 0xf6c5, 0xf2e6, 0xf4a1, 0xf2e6, 0xf4a1, 0xf0b4, +0xf2bd, 0xf0b4, 0xf2bd, 0xf012, 0xf265, 0xf012, 0xf265, 0xefb0, 0xf24a, 0xefb0, 0xf24a, +0xec2d, 0xef09, 0xec2d, 0xef09, 0xec2d, 0xef09, 0xea2c, 0xed45, 0xea2c, 0xed45, 0xe9d3, +0xed22, 0xe9d3, 0xed22, 0xe6ad, 0xea2b, 0xe6ad, 0xea2b, 0xe5ed, 0xe994, 0xe5ed, 0xe994, +0xe48e, 0xe855, 0xe48e, 0xe855, 0xe197, 0xe577, 0xe197, 0xe577, 0xe197, 0xe577, 0xe104, +0xe4f5, 0xe104, 0xe4f5, 0xdffd, 0xe3f7, 0xdffd, 0xe3f7, 0xdf54, 0xe350, 0xdf54, 0xe350, +0xde9f, 0xe297, 0xde9f, 0xe297, 0xdc6c, 0xe05a, 0xdc6c, 0xe05a, 0xdc6c, 0xe05a, 0xdb9d, +0xdf7b, 0xdb9d, 0xdf7b, 0xdbd6, 0xdfa0, 0xdbd6, 0xdfa0, 0xdc09, 0xdfbb, 0xdc09, 0xdfbb, +0xdca5, 0xe03d, 0xdca5, 0xe03d, 0xdc47, 0xdfc2, 0xdc47, 0xdfc2, 0xdd8c, 0xe0e8, 0xdd8c, +0xe0e8, 0xdd8c, 0xe0e8, 0xddc0, 0xe0fc, 0xddc0, 0xe0fc, 0xde33, 0xe14e, 0xde33, 0xe14e, +0xdf94, 0xe28e, 0xdf94, 0xe28e, 0xdd9b, 0xe074, 0xdd9b, 0xe074, 0xde68, 0xe120, 0xde68, +0xe120, 0xdeb5, 0xe14c, 0xdeb5, 0xe14c, 0xdeb5, 0xe14c, 0xdee3, 0xe159, 0xdee3, 0xe159, +0xe136, 0xe38a, 0xe136, 0xe38a, 0xe200, 0xe432, 0xe200, 0xe432, 0xe419, 0xe628, 0xe419, +0xe628, 0xe6df, 0xe8c8, 0xe6df, 0xe8c8, 0xe6df, 0xe8c8, 0xe7b9, 0xe97a, 0xe7b9, 0xe97a, +0xe88a, 0xea21, 0xe88a, 0xea21, 0xea38, 0xeba1, 0xea38, 0xeba1, 0xeaea, 0xec21, 0xeaea, +0xec21, 0xeeac, 0xefad, 0xeeac, 0xefad, 0xf1e7, 0xf2af, 0xf1e7, 0xf2af, 0xf1e7, 0xf2af, +0xf37d, 0xf406, 0xf37d, 0xf406, 0xf67f, 0xf6c5, 0xf67f, 0xf6c5, 0xf8c2, 0xf8c2, 0xf8c2, +0xf8c2, 0xfc24, 0xfbd9, 0xfc24, 0xfbd9, 0xfebb, 0xfe23, 0xfebb, 0xfe23, 0x1a6, 0xbf, +0x1a6, 0xbf, 0x1a6, 0xbf, 0x433, 0x2fa, 0x433, 0x2fa, 0x73b, 0x5b0, 0x73b, +0x5b0, 0xb49, 0x96c, 0xb49, 0x96c, 0xca1, 0xa74, 0xca1, 0xa74, 0xf6a, 0xcef, +0xf6a, 0xcef, 0xf6a, 0xcef, 0x1221, 0xf5d, 0x1221, 0xf5d, 0x1331, 0x1029, 0x1331, +0x1029, 0x1652, 0x130b, 0x1652, 0x130b, 0x1776, 0x13f9, 0x1776, 0x13f9, 0x174a, 0x139e, +0x174a, 0x139e, 0x19dd, 0x160b, 0x19dd, 0x160b, 0x19dd, 0x160b, 0x1b2f, 0x1741, 0x1b2f, +0x1741, 0x1c08, 0x1808, 0x1c08, 0x1808, 0x1ca7, 0x189f, 0x1ca7, 0x189f, 0x1be6, 0x17e0, +0x1be6, 0x17e0, 0x1b5d, 0x1762, 0x1b5d, 0x1762, 0x1bf8, 0x1813, 0x1bf8, 0x1813, 0x1bf8, +0x1813, 0x1c90, 0x18c9, 0x1c90, 0x18c9, 0x1b70, 0x17ce, 0x1b70, 0x17ce, 0x1b25, 0x17b1, +0x1b25, 0x17b1, 0x1a18, 0x16d6, 0x1a18, 0x16d6, 0x195a, 0x164f, 0x195a, 0x164f, 0x195a, +0x164f, 0x1912, 0x1642, 0x1912, 0x1642, 0x17c4, 0x1531, 0x17c4, 0x1531, 0x1723, 0x14ce, +0x1723, 0x14ce, 0x15ee, 0x13d6, 0x15ee, 0x13d6, 0x1466, 0x128a, 0x1466, 0x128a, 0x13e3, +0x1241, 0x13e3, 0x1241, 0x13e3, 0x1241, 0x1400, 0x1295, 0x1400, 0x1295, 0x1233, 0x10fb, +0x1233, 0x10fb, 0x1262, 0x1157, 0x1262, 0x1157, 0x126e, 0x118d, 0x126e, 0x118d, 0x106e, +0xfb1, 0x106e, 0xfb1, 0x1135, 0x1098, 0x1135, 0x1098, 0x1135, 0x1098, 0xfbb, 0xf39, +0xfbb, 0xf39, 0xe5b, 0xdef, 0xe5b, 0xdef, 0xdec, 0xd93, 0xdec, 0xd93, 0xccd, +0xc84, 0xccd, 0xc84, 0xe16, 0xdda, 0xe16, 0xdda, 0xe16, 0xdda, 0xd4c, 0xd1c, +0xd4c, 0xd1c, 0xbce, 0xba8, 0xbce, 0xba8, 0xbaa, 0xb8f, 0xbaa, 0xb8f, 0xb75, +0xb65, 0xb75, 0xb65, 0xb5a, 0xb56, 0xb5a, 0xb56, 0x967, 0x971, 0x967, 0x971, +0x967, 0x971, 0x7b3, 0x7cc, 0x7b3, 0x7cc, 0x6e9, 0x715, 0x6e9, 0x715, 0x61b, +0x65a, 0x61b, 0x65a, 0x6cd, 0x723, 0x6cd, 0x723, 0x60c, 0x67a, 0x60c, 0x67a, +0x439, 0x4c2, 0x439, 0x4c2, 0x439, 0x4c2, 0x370, 0x414, 0x370, 0x414, 0x111, +0x1d0, 0x111, 0x1d0, 0x6d, 0x148, 0x6d, 0x148, 0xfffa, 0xf0, 0xfffa, 0xf0, +0xfdbb, 0xfec8, 0xfdbb, 0xfec8, 0xfdbb, 0xfec8, 0xfe2a, 0xff4e, 0xfe2a, 0xff4e, 0xfd61, +0xfe97, 0xfd61, 0xfe97, 0xfd16, 0xfe5b, 0xfd16, 0xfe5b, 0xfddf, 0xff2d, 0xfddf, 0xff2d, +0xfce4, 0xfe37, 0xfce4, 0xfe37, 0xfd7b, 0xfecd, 0xfd7b, 0xfecd, 0xfd7b, 0xfecd, 0xfd55, +0xfea0, 0xfd55, 0xfea0, 0xfcbe, 0xfdfe, 0xfcbe, 0xfdfe, 0xfd9b, 0xfec9, 0xfd9b, 0xfec9, +0xfe15, 0xff2c, 0xfe15, 0xff2c, 0xfed0, 0xffcc, 0xfed0, 0xffcc, 0xfed0, 0xffcc, 0xffef, +0xcd, 0xffef, 0xcd, 0xfef1, 0xffad, 0xfef1, 0xffad, 0xff2c, 0xffc4, 0xff2c, 0xffc4, +0xff76, 0xffea, 0xff76, 0xffea, 0xfd46, 0xfd96, 0xfd46, 0xfd96, 0xfd6a, 0xfd97, 0xfd6a, +0xfd97, 0xfd6a, 0xfd97, 0xfc2a, 0xfc37, 0xfc2a, 0xfc37, 0xfaf7, 0xfae7, 0xfaf7, 0xfae7, +0xfb75, 0xfb4d, 0xfb75, 0xfb4d, 0xfbb1, 0xfb76, 0xfbb1, 0xfb76, 0xfc42, 0xfbfa, 0xfc42, +0xfbfa, 0xfbae, 0xfb5f, 0xfbae, 0xfb5f, 0xfbae, 0xfb5f, 0xfc9c, 0xfc4d, 0xfc9c, 0xfc4d, +0xfbf6, 0xfbae, 0xfbf6, 0xfbae, 0xfada, 0xfaa0, 0xfada, 0xfaa0, 0xfaab, 0xfa85, 0xfaab, +0xfa85, 0xf90f, 0xf902, 0xf90f, 0xf902, 0xf90f, 0xf902, 0xf904, 0xf915, 0xf904, 0xf915, +0xf84e, 0xf881, 0xf84e, 0xf881, 0xf768, 0xf7c0, 0xf768, 0xf7c0, 0xf70d, 0xf78c, 0xf70d, +0xf78c, 0xf4cc, 0xf573, 0xf4cc, 0xf573, 0xf2df, 0xf3ae, 0xf2df, 0xf3ae, 0xf2df, 0xf3ae, +0xf233, 0xf327, 0xf233, 0xf327, 0xf090, 0xf1a6, 0xf090, 0xf1a6, 0xef4c, 0xf081, 0xef4c, +0xf081, 0xee35, 0xef82, 0xee35, 0xef82, 0xed38, 0xee99, 0xed38, 0xee99, 0xee70, 0xefdd, +0xee70, 0xefdd, 0xee70, 0xefdd, 0xee44, 0xefb7, 0xee44, 0xefb7, 0xeeb6, 0xf027, 0xeeb6, +0xf027, 0xf00e, 0xf175, 0xf00e, 0xf175, 0xf067, 0xf1bf, 0xf067, 0xf1bf, 0xf259, 0xf399, +0xf259, 0xf399, 0xf259, 0xf399, 0xf3ab, 0xf4ce, 0xf3ab, 0xf4ce, 0xf492, 0xf592, 0xf492, +0xf592, 0xf5b0, 0xf687, 0xf5b0, 0xf687, 0xf7c0, 0xf86c, 0xf7c0, 0xf86c, 0xf9a5, 0xfa22, +0xf9a5, 0xfa22, 0xfb01, 0xfb4e, 0xfb01, 0xfb4e, 0xfb01, 0xfb4e, 0xfdf4, 0xfe0e, 0xfdf4, +0xfe0e, 0xd6, 0xbf, 0xd6, 0xbf, 0x41f, 0x3d8, 0x41f, 0x3d8, 0x705, 0x68e, +0x705, 0x68e, 0x856, 0x7b4, 0x856, 0x7b4, 0x918, 0x84c, 0x918, 0x84c, 0x918, +0x84c, 0x9e9, 0x8f8, 0x9e9, 0x8f8, 0xa53, 0x940, 0xa53, 0x940, 0xadd, 0x9ac, +0xadd, 0x9ac, 0xb18, 0x9cc, 0xb18, 0x9cc, 0xb18, 0x9b5, 0xb18, 0x9b5, 0xb18, +0x9b5, 0xc0e, 0xa97, 0xc0e, 0xa97, 0xc3a, 0xab1, 0xc3a, 0xab1, 0xc76, 0xadb, +0xc76, 0xadb, 0xccd, 0xb23, 0xccd, 0xb23, 0xd8c, 0xbd3, 0xd8c, 0xbd3, 0xecb, +0xd02, 0xecb, 0xd02, 0xecb, 0xd02, 0xec8, 0xcee, 0xec8, 0xcee, 0xec9, 0xcdd, +0xec9, 0xcdd, 0xf6f, 0xd6e, 0xf6f, 0xd6e, 0x1050, 0xe38, 0x1050, 0xe38, 0x122f, +0xffd, 0x122f, 0xffd, 0x134c, 0x10fd, 0x134c, 0x10fd, 0x134c, 0x10fd, 0x13c8, 0x115a, +0x13c8, 0x115a, 0x151f, 0x128f, 0x151f, 0x128f, 0x1620, 0x136c, 0x1620, 0x136c, 0x17c9, +0x14f0, 0x17c9, 0x14f0, 0x17e2, 0x14e3, 0x17e2, 0x14e3, 0x17e2, 0x14e3, 0x1911, 0x15ed, +0x1911, 0x15ed, 0x1ad3, 0x178b, 0x1ad3, 0x178b, 0x1ab6, 0x174d, 0x1ab6, 0x174d, 0x1d25, +0x199e, 0x1d25, 0x199e, 0x1e44, 0x1aa3, 0x1e44, 0x1aa3, 0x1d60, 0x19ac, 0x1d60, 0x19ac, +0x1d60, 0x19ac, 0x1d54, 0x1993, 0x1d54, 0x1993, 0x1d5e, 0x1996, 0x1d5e, 0x1996, 0x1c4d, +0x1887, 0x1c4d, 0x1887, 0x1c7a, 0x18be, 0x1c7a, 0x18be, 0x1bd0, 0x1827, 0x1bd0, 0x1827, +0x1bdb, 0x184d, 0x1bdb, 0x184d, 0x1bdb, 0x184d, 0x1cf3, 0x1989, 0x1cf3, 0x1989, 0x1b56, +0x1818, 0x1b56, 0x1818, 0x1bae, 0x18a4, 0x1bae, 0x18a4, 0x1980, 0x16b1, 0x1980, 0x16b1, +0x18ba, 0x162b, 0x18ba, 0x162b, 0x18ba, 0x162b, 0x1733, 0x14e9, 0x1733, 0x14e9, 0x13cd, +0x11cc, 0x13cd, 0x11cc, 0x1420, 0x1269, 0x1420, 0x1269, 0x1174, 0x1009, 0x1174, 0x1009, +0x112e, 0x100f, 0x112e, 0x100f, 0x1149, 0x1073, 0x1149, 0x1073, 0x1149, 0x1073, 0xf92, +0xf03, 0xf92, 0xf03, 0xe7d, 0xe31, 0xe7d, 0xe31, 0xd1e, 0xd0f, 0xd1e, 0xd0f, +0xb4a, 0xb73, 0xb4a, 0xb73, 0x8ba, 0x913, 0x8ba, 0x913, 0x7ad, 0x830, 0x7ad, +0x830, 0x7ad, 0x830, 0x724, 0x7c9, 0x724, 0x7c9, 0x6aa, 0x76a, 0x6aa, 0x76a, +0x593, 0x667, 0x593, 0x667, 0x541, 0x621, 0x541, 0x621, 0x3ff, 0x4e6, 0x3ff, +0x4e6, 0x3ff, 0x4e6, 0x3b7, 0x49f, 0x3b7, 0x49f, 0x392, 0x476, 0x392, 0x476, +0x16d, 0x249, 0x16d, 0x249, 0x103, 0x1d4, 0x103, 0x1d4, 0xff, 0x1c3, 0xff, +0x1c3, 0x20b, 0x2c1, 0x20b, 0x2c1, 0x20b, 0x2c1, 0x339, 0x3e2, 0x339, 0x3e2, +0x3e6, 0x481, 0x3e6, 0x481, 0x407, 0x497, 0x407, 0x497, 0x4cb, 0x551, 0x4cb, +0x551, 0x40b, 0x48a, 0x40b, 0x48a, 0x1f1, 0x26b, 0x1f1, 0x26b, 0x1f1, 0x26b, +0x168, 0x1e0, 0x168, 0x1e0, 0x1d, 0x97, 0x1d, 0x97, 0xffb8, 0x35, 0xffb8, +0x35, 0xffc6, 0x48, 0xffc6, 0x48, 0xffea, 0x74, 0xffea, 0x74, 0xffea, 0x74, +0xfdd6, 0xfe68, 0xfdd6, 0xfe68, 0xfbe1, 0xfc7c, 0xfbe1, 0xfc7c, 0xfbe4, 0xfc87, 0xfbe4, +0xfc87, 0xf97e, 0xfa28, 0xf97e, 0xfa28, 0xf7b0, 0xf860, 0xf7b0, 0xf860, 0xf731, 0xf7e4, +0xf731, 0xf7e4, 0xf731, 0xf7e4, 0xf628, 0xf6da, 0xf628, 0xf6da, 0xf5c9, 0xf678, 0xf5c9, +0xf678, 0xf717, 0xf7c0, 0xf717, 0xf7c0, 0xf751, 0xf7ee, 0xf751, 0xf7ee, 0xf755, 0xf7e4, +0xf755, 0xf7e4, 0xf86f, 0xf8ec, 0xf86f, 0xf8ec, 0xf86f, 0xf8ec, 0xf8ef, 0xf956, 0xf8ef, +0xf956, 0xf91d, 0xf96c, 0xf91d, 0xf96c, 0xf96f, 0xf9a4, 0xf96f, 0xf9a4, 0xfa11, 0xfa2b, +0xfa11, 0xfa2b, 0xf943, 0xf943, 0xf943, 0xf943, 0xf943, 0xf943, 0xf982, 0xf967, 0xf982, +0xf967, 0xf9e8, 0xf9b5, 0xf9e8, 0xf9b5, 0xf924, 0xf8dc, 0xf924, 0xf8dc, 0xf893, 0xf83a, +0xf893, 0xf83a, 0xf7a7, 0xf741, 0xf7a7, 0xf741, 0xf86a, 0xf7fe, 0xf86a, 0xf7fe, 0xf86a, +0xf7fe, 0xf832, 0xf7c6, 0xf832, 0xf7c6, 0xf738, 0xf6d4, 0xf738, 0xf6d4, 0xf63f, 0xf5e9, +0xf63f, 0xf5e9, 0xf5c3, 0xf584, 0xf5c3, 0xf584, 0xf751, 0xf730, 0xf751, 0xf730, 0xf751, +0xf730, 0xf6aa, 0xf6af, 0xf6aa, 0xf6af, 0xf560, 0xf591, 0xf560, 0xf591, 0xf400, 0xf465, +0xf400, 0xf465, 0xf314, 0xf3b1, 0xf314, 0xf3b1, 0xf383, 0xf45c, 0xf383, 0xf45c, 0xf1b5, +0xf2cf, 0xf1b5, 0xf2cf, 0xf1b5, 0xf2cf, 0xf0dc, 0xf238, 0xf0dc, 0xf238, 0xf056, 0xf1f5, +0xf056, 0xf1f5, 0xef73, 0xf155, 0xef73, 0xf155, 0xf03d, 0xf25f, 0xf03d, 0xf25f, 0xef20, +0xf17f, 0xef20, 0xf17f, 0xee1d, 0xf0b5, 0xee1d, 0xf0b5, 0xee1d, 0xf0b5, 0xee2b, 0xf0f7, +0xee2b, 0xf0f7, 0xee56, 0xf14f, 0xee56, 0xf14f, 0xeee8, 0xf207, 0xeee8, 0xf207, 0xedea, +0xf128, 0xedea, 0xf128, 0xede4, 0xf139, 0xede4, 0xf139, 0xede4, 0xf139, 0xeed7, 0xf23b, +0xeed7, 0xf23b, 0xef59, 0xf2c5, 0xef59, 0xf2c5, 0xefed, 0xf358, 0xefed, 0xf358, 0xf02c, +0xf390, 0xf02c, 0xf390, 0xf022, 0xf379, 0xf022, 0xf379, 0xf057, 0xf39d, 0xf057, 0xf39d, +0xf057, 0xf39d, 0xf1aa, 0xf4d8, 0xf1aa, 0xf4d8, 0xf245, 0xf55a, 0xf245, 0xf55a, 0xf2ac, +0xf5a5, 0xf2ac, 0xf5a5, 0xf347, 0xf622, 0xf347, 0xf622, 0xf4a9, 0xf766, 0xf4a9, 0xf766, +0xf5e8, 0xf889, 0xf5e8, 0xf889, 0xf5e8, 0xf889, 0xf647, 0xf8cc, 0xf647, 0xf8cc, 0xf876, +0xfae2, 0xf876, 0xfae2, 0xf92a, 0xfb81, 0xf92a, 0xfb81, 0xf8ea, 0xfb2d, 0xf8ea, 0xfb2d, +0xf9ee, 0xfc22, 0xf9ee, 0xfc22, 0xf9ee, 0xfc22, 0xfabb, 0xfce3, 0xfabb, 0xfce3, 0xfa28, +0xfc48, 0xfa28, 0xfc48, 0xf9bf, 0xfbd9, 0xf9bf, 0xfbd9, 0xf8f8, 0xfb0f, 0xf8f8, 0xfb0f, +0xf677, 0xf88d, 0xf677, 0xf88d, 0xf58b, 0xf7a1, 0xf58b, 0xf7a1, 0xf58b, 0xf7a1, 0xf59b, +0xf7b2, 0xf59b, 0xf7b2, 0xf607, 0xf81e, 0xf607, 0xf81e, 0xf52e, 0xf744, 0xf52e, 0xf744, +0xf586, 0xf799, 0xf586, 0xf799, 0xf628, 0xf835, 0xf628, 0xf835, 0xf5a3, 0xf7a6, 0xf5a3, +0xf7a6, 0xf5a3, 0xf7a6, 0xf593, 0xf788, 0xf593, 0xf788, 0xf3b1, 0xf595, 0xf3b1, 0xf595, +0xf395, 0xf563, 0xf395, 0xf563, 0xf293, 0xf447, 0xf293, 0xf447, 0xf380, 0xf516, 0xf380, +0xf516, 0xf380, 0xf516, 0xf4e6, 0xf65a, 0xf4e6, 0xf65a, 0xf3a3, 0xf4f1, 0xf3a3, 0xf4f1, +0xf547, 0xf66c, 0xf547, 0xf66c, 0xf4fc, 0xf5f7, 0xf4fc, 0xf5f7, 0xf478, 0xf548, 0xf478, +0xf548, 0xf3e4, 0xf489, 0xf3e4, 0xf489, 0xf3e4, 0xf489, 0xf216, 0xf291, 0xf216, 0xf291, +0xf10f, 0xf163, 0xf10f, 0xf163, 0xf05f, 0xf08e, 0xf05f, 0xf08e, 0xf08b, 0xf099, 0xf08b, +0xf099, 0xf037, 0xf029, 0xf037, 0xf029, 0xf05c, 0xf038, 0xf05c, 0xf038, 0xf05c, 0xf038, +0xf056, 0xf021, 0xf056, 0xf021, 0xefea, 0xefab, 0xefea, 0xefab, 0xef72, 0xef2f, 0xef72, +0xef2f, 0xee02, 0xedc1, 0xee02, 0xedc1, 0xed01, 0xecc7, 0xed01, 0xecc7, 0xed01, 0xecc7, +0xed72, 0xed46, 0xed72, 0xed46, 0xed25, 0xed0c, 0xed25, 0xed0c, 0xec83, 0xec7f, 0xec83, +0xec7f, 0xed24, 0xed38, 0xed24, 0xed38, 0xed87, 0xedb5, 0xed87, 0xedb5, 0xee47, 0xee8f, +0xee47, 0xee8f, 0xee47, 0xee8f, 0xee6c, 0xeecd, 0xee6c, 0xeecd, 0xed12, 0xed8b, 0xed12, +0xed8b, 0xec8e, 0xed1a, 0xec8e, 0xed1a, 0xec4f, 0xecea, 0xec4f, 0xecea, 0xec4b, 0xecf0, +0xec4b, 0xecf0, 0xed75, 0xee1d, 0xed75, 0xee1d, 0xed75, 0xee1d, 0xee0d, 0xeeb1, 0xee0d, +0xeeb1, 0xee95, 0xef2e, 0xee95, 0xef2e, 0xefcb, 0xf051, 0xefcb, 0xf051, 0xf178, 0xf1e4, +0xf178, 0xf1e4, 0xf274, 0xf2bd, 0xf274, 0xf2bd, 0xf274, 0xf2bd, 0xf320, 0xf340, 0xf320, +0xf340, 0xf501, 0xf4f2, 0xf501, 0xf4f2, 0xf5e7, 0xf5a4, 0xf5e7, 0xf5a4, 0xf72f, 0xf6b2, +0xf72f, 0xf6b2, 0xf947, 0xf88e, 0xf947, 0xf88e, 0xfa2f, 0xf938, 0xfa2f, 0xf938, 0xfa2f, +0xf938, 0xfb90, 0xfa59, 0xfb90, 0xfa59, 0xfe0a, 0xfc93, 0xfe0a, 0xfc93, 0x29, 0xfe76, +0x29, 0xfe76, 0x2bc, 0xce, 0x2bc, 0xce, 0x52b, 0x305, 0x52b, 0x305, 0x720, +0x4c8, 0x720, 0x4c8, 0x720, 0x4c8, 0x8ff, 0x67a, 0x8ff, 0x67a, 0x9c6, 0x71a, +0x9c6, 0x71a, 0xc60, 0x994, 0xc60, 0x994, 0xdab, 0xac5, 0xdab, 0xac5, 0xda0, +0xaa6, 0xda0, 0xaa6, 0xda0, 0xaa6, 0xf28, 0xc21, 0xf28, 0xc21, 0xf67, 0xc58, +0xf67, 0xc58, 0x1032, 0xd20, 0x1032, 0xd20, 0x1090, 0xd80, 0x1090, 0xd80, 0x1076, +0xd6b, 0x1076, 0xd6b, 0x1198, 0xe95, 0x1198, 0xe95, 0x1198, 0xe95, 0x124d, 0xf55, +0x124d, 0xf55, 0x128d, 0xfa0, 0x128d, 0xfa0, 0x1370, 0x108d, 0x1370, 0x108d, 0x13dd, +0x1105, 0x13dd, 0x1105, 0x1445, 0x1177, 0x1445, 0x1177, 0x163c, 0x1376, 0x163c, 0x1376, +0x163c, 0x1376, 0x16cd, 0x140d, 0x16cd, 0x140d, 0x171e, 0x1462, 0x171e, 0x1462, 0x17e1, +0x1527, 0x17e1, 0x1527, 0x187a, 0x15c0, 0x187a, 0x15c0, 0x1a0c, 0x1751, 0x1a0c, 0x1751, +0x1a0c, 0x1751, 0x1a11, 0x1755, 0x1a11, 0x1755, 0x1a19, 0x175c, 0x1a19, 0x175c, 0x1a80, +0x17c2, 0x1a80, 0x17c2, 0x1af8, 0x183b, 0x1af8, 0x183b, 0x1b87, 0x18ce, 0x1b87, 0x18ce, +0x1a25, 0x1774, 0x1a25, 0x1774, 0x1a25, 0x1774, 0x1991, 0x16ed, 0x1991, 0x16ed, 0x1851, +0x15c0, 0x1851, 0x15c0, 0x16d0, 0x1457, 0x16d0, 0x1457, 0x1683, 0x142a, 0x1683, 0x142a, +0x158a, 0x1358, 0x158a, 0x1358, 0x14ca, 0x12c6, 0x14ca, 0x12c6, 0x14ca, 0x12c6, 0x12ff, +0x1131, 0x12ff, 0x1131, 0x129f, 0x110e, 0x129f, 0x110e, 0x125f, 0x1113, 0x125f, 0x1113, +0x1034, 0xf32, 0x1034, 0xf32, 0xf0c, 0xe59, 0xf0c, 0xe59, 0xf0c, 0xe59, 0xdc9, +0xd6b, 0xdc9, 0xd6b, 0xbdf, 0xbd8, 0xbdf, 0xbd8, 0x991, 0x9e3, 0x991, 0x9e3, +0x7f0, 0x89b, 0x7f0, 0x89b, 0x68c, 0x790, 0x68c, 0x790, 0x484, 0x5de, 0x484, +0x5de, 0x484, 0x5de, 0x2ee, 0x49a, 0x2ee, 0x49a, 0x132, 0x32b, 0x132, 0x32b, +0xfe3b, 0x7b, 0xfe3b, 0x7b, 0xfc1e, 0xfe9d, 0xfc1e, 0xfe9d, 0xfb77, 0xfe2c, 0xfb77, +0xfe2c, 0xfb77, 0xfe2c, 0xf9c8, 0xfcab, 0xf9c8, 0xfcab, 0xf83f, 0xfb47, 0xf83f, 0xfb47, +0xf794, 0xfab8, 0xf794, 0xfab8, 0xf730, 0xfa66, 0xf730, 0xfa66, 0xf6b8, 0xf9f6, 0xf6b8, +0xf9f6, 0xf679, 0xf9b7, 0xf679, 0xf9b7, 0xf679, 0xf9b7, 0xf638, 0xf96e, 0xf638, 0xf96e, +0xf436, 0xf75d, 0xf436, 0xf75d, 0xf2d0, 0xf5e1, 0xf2d0, 0xf5e1, 0xf1f3, 0xf4e9, 0xf1f3, +0xf4e9, 0xf007, 0xf2dd, 0xf007, 0xf2dd, 0xf09b, 0xf34f, 0xf09b, 0xf34f, 0xf09b, 0xf34f, +0xf1c7, 0xf457, 0xf1c7, 0xf457, 0xf192, 0xf3fb, 0xf192, 0xf3fb, 0xf3b0, 0xf5f3, 0xf3b0, +0xf5f3, 0xf59e, 0xf7bd, 0xf59e, 0xf7bd, 0xf5c4, 0xf7bf, 0xf5c4, 0xf7bf, 0xf5c4, 0xf7bf, +0xf5db, 0xf7b4, 0xf5db, 0xf7b4, 0xf5a9, 0xf762, 0xf5a9, 0xf762, 0xf680, 0xf81b, 0xf680, +0xf81b, 0xf67d, 0xf7fd, 0xf67d, 0xf7fd, 0xf609, 0xf76f, 0xf609, 0xf76f, 0xf7bf, 0xf90d, +0xf7bf, 0xf90d, 0xf7bf, 0xf90d, 0xf8c5, 0xf9fd, 0xf8c5, 0xf9fd, 0xf933, 0xfa55, 0xf933, +0xfa55, 0xf909, 0xfa15, 0xf909, 0xfa15, 0xf8a2, 0xf997, 0xf8a2, 0xf997, 0xf863, 0xf93f, +0xf863, 0xf93f, 0xf6e2, 0xf7a4, 0xf6e2, 0xf7a4, 0xf6e2, 0xf7a4, 0xf6e8, 0xf78c, 0xf6e8, +0xf78c, 0xf733, 0xf7b8, 0xf733, 0xf7b8, 0xf7a0, 0xf802, 0xf7a0, 0xf802, 0xf997, 0xf9d1, +0xf997, 0xf9d1, 0xfc1d, 0xfc2d, 0xfc1d, 0xfc2d, 0xfc1d, 0xfc2d, 0xfde4, 0xfdc6, 0xfde4, +0xfdc6, 0xfeaa, 0xfe5c, 0xfeaa, 0xfe5c, 0x4e, 0xffcd, 0x4e, 0xffcd, 0x15d, 0xa7, +0x15d, 0xa7, 0x1ff, 0x113, 0x1ff, 0x113, 0x2e2, 0x1bf, 0x2e2, 0x1bf, 0x2e2, +0x1bf, 0x512, 0x3ba, 0x512, 0x3ba, 0x699, 0x50c, 0x699, 0x50c, 0x7fd, 0x640, +0x7fd, 0x640, 0xa53, 0x868, 0xa53, 0x868, 0xa68, 0x854, 0xa68, 0x854, 0xb88, +0x952, 0xb88, 0x952, 0xb88, 0x952, 0xbe2, 0x98e, 0xbe2, 0x98e, 0xc42, 0x9d9, +0xc42, 0x9d9, 0xdc7, 0xb50, 0xdc7, 0xb50, 0xd64, 0xae6, 0xd64, 0xae6, 0xe40, +0xbc4, 0xe40, 0xbc4, 0xe40, 0xbc4, 0xf2c, 0xcb8, 0xf2c, 0xcb8, 0xfaf, 0xd4b, +0xfaf, 0xd4b, 0xfc0, 0xd73, 0xfc0, 0xd73, 0xdda, 0xbaa, 0xdda, 0xbaa, 0xd1e, +0xb11, 0xd1e, 0xb11, 0xcd1, 0xaea, 0xcd1, 0xaea, 0xcd1, 0xaea, 0xb3c, 0x97f, +0xb3c, 0x97f, 0xa7b, 0x8ea, 0xa7b, 0x8ea, 0xa04, 0x8a1, 0xa04, 0x8a1, 0x95d, +0x827, 0x95d, 0x827, 0x851, 0x747, 0x851, 0x747, 0x6fc, 0x61c, 0x6fc, 0x61c, +0x6fc, 0x61c, 0x531, 0x478, 0x531, 0x478, 0x3f7, 0x361, 0x3f7, 0x361, 0x395, +0x31d, 0x395, 0x31d, 0x201, 0x1a3, 0x201, 0x1a3, 0x16d, 0x123, 0x16d, 0x123, +0x16d, 0x123, 0x124, 0xe7, 0x124, 0xe7, 0xfb, 0xc7, 0xfb, 0xc7, 0x196, +0x166, 0x196, 0x166, 0x246, 0x213, 0x246, 0x213, 0x22a, 0x1f0, 0x22a, 0x1f0, +0x291, 0x24c, 0x291, 0x24c, 0x291, 0x24c, 0x43f, 0x3eb, 0x43f, 0x3eb, 0x415, +0x3af, 0x415, 0x3af, 0x4cb, 0x451, 0x4cb, 0x451, 0x4c8, 0x438, 0x4c8, 0x438, +0x5b0, 0x509, 0x5b0, 0x509, 0x7d5, 0x718, 0x7d5, 0x718, 0x7d5, 0x718, 0x8a8, +0x7d5, 0x8a8, 0x7d5, 0xbc6, 0xadd, 0xbc6, 0xadd, 0xd15, 0xc19, 0xd15, 0xc19, +0xe1f, 0xd11, 0xe1f, 0xd11, 0xfc5, 0xea7, 0xfc5, 0xea7, 0xfc5, 0xea7, 0xf2c, +0xe00, 0xf2c, 0xe00, 0xfaf, 0xe78, 0xfaf, 0xe78, 0x101c, 0xedb, 0x101c, 0xedb, +0xf3a, 0xdf1, 0xf3a, 0xdf1, 0xf25, 0xdd5, 0xf25, 0xdd5, 0xebd, 0xd66, 0xebd, +0xd66, 0xebd, 0xd66, 0xe7b, 0xd20, 0xe7b, 0xd20, 0xfd2, 0xe71, 0xfd2, 0xe71, +0x1138, 0xfd1, 0x1138, 0xfd1, 0x1232, 0x10c5, 0x1232, 0x10c5, 0x11ba, 0x1046, 0x11ba, +0x1046, 0x11de, 0x1062, 0x11de, 0x1062, 0x11de, 0x1062, 0x1294, 0x110d, 0x1294, 0x110d, +0x1338, 0x11a6, 0x1338, 0x11a6, 0x1436, 0x1296, 0x1436, 0x1296, 0x13bf, 0x1211, 0x13bf, +0x1211, 0x14de, 0x1320, 0x14de, 0x1320, 0x14de, 0x1320, 0x1631, 0x1462, 0x1631, 0x1462, +0x16a4, 0x14c3, 0x16a4, 0x14c3, 0x17d9, 0x15e6, 0x17d9, 0x15e6, 0x17b2, 0x15ae, 0x17b2, +0x15ae, 0x1782, 0x156f, 0x1782, 0x156f, 0x189e, 0x167e, 0x189e, 0x167e, 0x189e, 0x167e, +0x1925, 0x16fa, 0x1925, 0x16fa, 0x18a7, 0x1675, 0x18a7, 0x1675, 0x1899, 0x1664, 0x1899, +0x1664, 0x1878, 0x1644, 0x1878, 0x1644, 0x17c3, 0x1595, 0x17c3, 0x1595, 0x16e6, 0x14c4, +0x16e6, 0x14c4, 0x16e6, 0x14c4, 0x159d, 0x138c, 0x159d, 0x138c, 0x1416, 0x121d, 0x1416, +0x121d, 0x126d, 0x1092, 0x126d, 0x1092, 0x11a0, 0xfe8, 0x11a0, 0xfe8, 0x10ae, 0xf1e, +0x10ae, 0xf1e, 0x10ae, 0xf1e, 0xec8, 0xd66, 0xec8, 0xd66, 0xdf8, 0xcc8, 0xdf8, +0xcc8, 0xce1, 0xbe7, 0xce1, 0xbe7, 0xb4f, 0xa8d, 0xb4f, 0xa8d, 0x911, 0x88b, +0x911, 0x88b, 0x603, 0x5b8, 0x603, 0x5b8, 0x603, 0x5b8, 0x438, 0x42a, 0x438, +0x42a, 0x1f6, 0x224, 0x1f6, 0x224, 0xff16, 0xff7f, 0xff16, 0xff7f, 0xfb0b, 0xfbad, +0xfb0b, 0xfbad, 0xf73e, 0xf815, 0xf73e, 0xf815, 0xf643, 0xf74b, 0xf643, 0xf74b, 0xf643, +0xf74b, 0xf4d5, 0xf60a, 0xf4d5, 0xf60a, 0xf317, 0xf475, 0xf317, 0xf475, 0xf1a0, 0xf322, +0xf1a0, 0xf322, 0xeeef, 0xf091, 0xeeef, 0xf091, 0xed3a, 0xeef4, 0xed3a, 0xeef4, 0xed3a, +0xeef4, 0xec66, 0xee36, 0xec66, 0xee36, 0xeaf3, 0xecd3, 0xeaf3, 0xecd3, 0xe9f4, 0xebdf, +0xe9f4, 0xebdf, 0xe814, 0xea06, 0xe814, 0xea06, 0xe78c, 0xe981, 0xe78c, 0xe981, 0xe8b5, +0xeaab, 0xe8b5, 0xeaab, 0xe8b5, 0xeaab, 0xe806, 0xe9fb, 0xe806, 0xe9fb, 0xe78a, 0xe97a, +0xe78a, 0xe97a, 0xe5ff, 0xe7ea, 0xe5ff, 0xe7ea, 0xe54d, 0xe733, 0xe54d, 0xe733, 0xe64a, +0xe82a, 0xe64a, 0xe82a, 0xe64a, 0xe82a, 0xe637, 0xe812, 0xe637, 0xe812, 0xe840, 0xea16, +0xe840, 0xea16, 0xe9b8, 0xeb8a, 0xe9b8, 0xeb8a, 0xeaf6, 0xecc4, 0xeaf6, 0xecc4, 0xee39, +0xf004, 0xee39, 0xf004, 0xef8a, 0xf154, 0xef8a, 0xf154, 0xef8a, 0xf154, 0xefc6, 0xf18f, +0xefc6, 0xf18f, 0xefc9, 0xf193, 0xefc9, 0xf193, 0xeef7, 0xf0c0, 0xeef7, 0xf0c0, 0xede9, +0xefb3, 0xede9, 0xefb3, 0xed4a, 0xef14, 0xed4a, 0xef14, 0xeda5, 0xef6d, 0xeda5, 0xef6d, +0xeda5, 0xef6d, 0xedf5, 0xefbb, 0xedf5, 0xefbb, 0xef37, 0xf0f9, 0xef37, 0xf0f9, 0xf08a, +0xf247, 0xf08a, 0xf247, 0xf046, 0xf1fb, 0xf046, 0xf1fb, 0xf0ca, 0xf275, 0xf0ca, 0xf275, +0xf0ca, 0xf275, 0xf12f, 0xf2ce, 0xf12f, 0xf2ce, 0xf13e, 0xf2d0, 0xf13e, 0xf2d0, 0xf29f, +0xf421, 0xf29f, 0xf421, 0xf405, 0xf575, 0xf405, 0xf575, 0xf5c3, 0xf720, 0xf5c3, 0xf720, +0xf83d, 0xf986, 0xf83d, 0xf986, 0xf83d, 0xf986, 0xface, 0xfc02, 0xface, 0xfc02, 0xfc7c, +0xfd9c, 0xfc7c, 0xfd9c, 0xfdb5, 0xfec1, 0xfdb5, 0xfec1, 0xff7a, 0x75, 0xff7a, 0x75, +0xffef, 0xdb, 0xffef, 0xdb, 0xffa6, 0x85, 0xffa6, 0x85, 0xffa6, 0x85, 0x94, +0x16b, 0x94, 0x16b, 0x145, 0x218, 0x145, 0x218, 0x10e, 0x1e0, 0x10e, 0x1e0, +0x1aa, 0x281, 0x1aa, 0x281, 0x297, 0x379, 0x297, 0x379, 0x297, 0x379, 0x2e2, +0x3d4, 0x2e2, 0x3d4, 0x310, 0x417, 0x310, 0x417, 0x2f0, 0x413, 0x2f0, 0x413, +0x27b, 0x3be, 0x27b, 0x3be, 0x136, 0x29d, 0x136, 0x29d, 0xffd1, 0x161, 0xffd1, +0x161, 0xffd1, 0x161, 0xff39, 0xf6, 0xff39, 0xf6, 0xfdef, 0xffdb, 0xfdef, 0xffdb, +0xfcba, 0xfed7, 0xfcba, 0xfed7, 0xfbac, 0xfdfa, 0xfbac, 0xfdfa, 0xfa3b, 0xfcbc, 0xfa3b, +0xfcbc, 0xfa98, 0xfd4a, 0xfa98, 0xfd4a, 0xfa98, 0xfd4a, 0xf994, 0xfc76, 0xf994, 0xfc76, +0xf818, 0xfb27, 0xf818, 0xfb27, 0xf705, 0xfa3f, 0xf705, 0xfa3f, 0xf397, 0xf6f7, 0xf397, +0xf6f7, 0xf1d4, 0xf555, 0xf1d4, 0xf555, 0xf1d4, 0xf555, 0xef95, 0xf333, 0xef95, 0xf333, +0xedf9, 0xf1af, 0xedf9, 0xf1af, 0xecf4, 0xf0bc, 0xecf4, 0xf0bc, 0xea0a, 0xeddf, 0xea0a, +0xeddf, 0xe911, 0xecee, 0xe911, 0xecee, 0xe6d7, 0xeab5, 0xe6d7, 0xeab5, 0xe6d7, 0xeab5, +0xe531, 0xe90d, 0xe531, 0xe90d, 0xe4ff, 0xe8d3, 0xe4ff, 0xe8d3, 0xe42a, 0xe7f3, 0xe42a, +0xe7f3, 0xe2fa, 0xe6b3, 0xe2fa, 0xe6b3, 0xe084, 0xe42b, 0xe084, 0xe42b, 0xdf9c, 0xe32e, +0xdf9c, 0xe32e, 0xdf9c, 0xe32e, 0xdfdc, 0xe357, 0xdfdc, 0xe357, 0xe033, 0xe395, 0xe033, +0xe395, 0xe083, 0xe3cb, 0xe083, 0xe3cb, 0xe00b, 0xe337, 0xe00b, 0xe337, 0xdfb7, 0xe2c7, +0xdfb7, 0xe2c7, 0xdfb7, 0xe2c7, 0xe137, 0xe42a, 0xe137, 0xe42a, 0xe2a0, 0xe576, 0xe2a0, +0xe576, 0xe352, 0xe60b, 0xe352, 0xe60b, 0xe49d, 0xe737, 0xe49d, 0xe737, 0xe515, 0xe78f, +0xe515, 0xe78f, 0xe6b6, 0xe90f, 0xe6b6, 0xe90f, 0xe6b6, 0xe90f, 0xe88a, 0xeac1, 0xe88a, +0xeac1, 0xe8e9, 0xeafc, 0xe8e9, 0xeafc, 0xe981, 0xeb6d, 0xe981, 0xeb6d, 0xe9eb, 0xebad, +0xe9eb, 0xebad, 0xead1, 0xec67, 0xead1, 0xec67, 0xec94, 0xedf9, 0xec94, 0xedf9, 0xec94, +0xedf9, 0xeda8, 0xeed8, 0xeda8, 0xeed8, 0xeec2, 0xefbb, 0xeec2, 0xefbb, 0xf098, 0xf155, +0xf098, 0xf155, 0xf2da, 0xf357, 0xf2da, 0xf357, 0xf5a0, 0xf5d9, 0xf5a0, 0xf5d9, 0xf5a0, +0xf5d9, 0xf725, 0xf717, 0xf725, 0xf717, 0xf865, 0xf80c, 0xf865, 0xf80c, 0xfa37, 0xf991, +0xfa37, 0xf991, 0xfc84, 0xfb8f, 0xfc84, 0xfb8f, 0xff66, 0xfe22, 0xff66, 0xfe22, 0x6c, +0xfed7, 0x6c, 0xfed7, 0x6c, 0xfed7, 0x20a, 0x25, 0x20a, 0x25, 0x576, 0x343, +0x576, 0x343, 0x815, 0x596, 0x815, 0x596, 0xaa6, 0x7df, 0xaa6, 0x7df, 0xcc3, +0x9b7, 0xcc3, 0x9b7, 0xe5d, 0xb12, 0xe5d, 0xb12, 0xe5d, 0xb12, 0xf4c, 0xbc7, +0xf4c, 0xbc7, 0x1039, 0xc81, 0x1039, 0xc81, 0x1261, 0xe7c, 0x1261, 0xe7c, 0x125d, +0xe52, 0x125d, 0xe52, 0x1354, 0xf2b, 0x1354, 0xf2b, 0x1354, 0xf2b, 0x162f, 0x11ef, +0x162f, 0x11ef, 0x16dc, 0x128c, 0x16dc, 0x128c, 0x17ae, 0x1356, 0x17ae, 0x1356, 0x17c6, +0x136d, 0x17c6, 0x136d, 0x179c, 0x1347, 0x179c, 0x1347, 0x1758, 0x130d, 0x1758, 0x130d, +0x1758, 0x130d, 0x1636, 0x11fb, 0x1636, 0x11fb, 0x165a, 0x1231, 0x165a, 0x1231, 0x1611, +0x1200, 0x1611, 0x1200, 0x163d, 0x1246, 0x163d, 0x1246, 0x17be, 0x13e3, 0x17be, 0x13e3, +0x17a5, 0x13e8, 0x17a5, 0x13e8, 0x17a5, 0x13e8, 0x16d3, 0x1335, 0x16d3, 0x1335, 0x1584, +0x1205, 0x1584, 0x1205, 0x1331, 0xfd1, 0x1331, 0xfd1, 0x122a, 0xee8, 0x122a, 0xee8, +0x10fe, 0xdd9, 0x10fe, 0xdd9, 0x10fe, 0xdd9, 0xf98, 0xc8f, 0xf98, 0xc8f, 0xea6, +0xbba, 0xea6, 0xbba, 0xe6c, 0xb9b, 0xe6c, 0xb9b, 0xf61, 0xcab, 0xf61, 0xcab, +0xec2, 0xc26, 0xec2, 0xc26, 0xe80, 0xbfe, 0xe80, 0xbfe, 0xe80, 0xbfe, 0xe48, +0xbe1, 0xe48, 0xbe1, 0xce3, 0xa99, 0xce3, 0xa99, 0xbde, 0x9b1, 0xbde, 0x9b1, +0x9c7, 0x7b8, 0x9c7, 0x7b8, 0x80c, 0x61f, 0x80c, 0x61f, 0x700, 0x537, 0x700, +0x537, 0x700, 0x537, 0x5f0, 0x44c, 0x5f0, 0x44c, 0x66e, 0x4f3, 0x66e, 0x4f3, +0x718, 0x5c8, 0x718, 0x5c8, 0x6b6, 0x595, 0x6b6, 0x595, 0x700, 0x610, 0x700, +0x610, 0x700, 0x610, 0x6bf, 0x601, 0x6bf, 0x601, 0x5f8, 0x56f, 0x5f8, 0x56f, +0x6ca, 0x677, 0x6ca, 0x677, 0x670, 0x654, 0x670, 0x654, 0x4d4, 0x4ef, 0x4d4, +0x4ef, 0x3df, 0x430, 0x3df, 0x430, 0x3df, 0x430, 0x312, 0x398, 0x312, 0x398, +0x2e5, 0x39e, 0x2e5, 0x39e, 0x23c, 0x325, 0x23c, 0x325, 0x15a, 0x270, 0x15a, +0x270, 0x5a, 0x198, 0x5a, 0x198, 0x5a, 0x198, 0xff3d, 0xa0, 0xff3d, 0xa0, +0xff88, 0x10a, 0xff88, 0x10a, 0xff1d, 0xba, 0xff1d, 0xba, 0xfeb8, 0x6b, 0xfeb8, +0x6b, 0xfe8e, 0x51, 0xfe8e, 0x51, 0xfe6d, 0x3b, 0xfe6d, 0x3b, 0xfe6d, 0x3b, +0xff97, 0x16b, 0xff97, 0x16b, 0xff2e, 0x105, 0xff2e, 0x105, 0xfec3, 0x97, 0xfec3, +0x97, 0xfeb8, 0x87, 0xfeb8, 0x87, 0xfe66, 0x2d, 0xfe66, 0x2d, 0xff9d, 0x159, +0xff9d, 0x159, 0xff9d, 0x159, 0xff49, 0xf9, 0xff49, 0xf9, 0xfe27, 0xffcb, 0xfe27, +0xffcb, 0xff37, 0xcd, 0xff37, 0xcd, 0xffa4, 0x12e, 0xffa4, 0x12e, 0x1, 0x180, +0x1, 0x180, 0x1, 0x180, 0x7, 0x17c, 0x7, 0x17c, 0xfddd, 0xff4a, 0xfddd, +0xff4a, 0xfe08, 0xff6f, 0xfe08, 0xff6f, 0xfdd1, 0xff36, 0xfdd1, 0xff36, 0xfd1e, 0xfe82, +0xfd1e, 0xfe82, 0xfd5b, 0xfec2, 0xfd5b, 0xfec2, 0xfd5b, 0xfec2, 0xfb77, 0xfce2, 0xfb77, +0xfce2, 0xfbc4, 0xfd35, 0xfbc4, 0xfd35, 0xfc20, 0xfd98, 0xfc20, 0xfd98, 0xfc27, 0xfda8, +0xfc27, 0xfda8, 0xfc07, 0xfd92, 0xfc07, 0xfd92, 0xf969, 0xfafd, 0xf969, 0xfafd, 0xf969, +0xfafd, 0xf84a, 0xf9e6, 0xf84a, 0xf9e6, 0xf76e, 0xf911, 0xf76e, 0xf911, 0xf5ed, 0xf796, +0xf5ed, 0xf796, 0xf4e4, 0xf690, 0xf4e4, 0xf690, 0xf455, 0xf602, 0xf455, 0xf602, 0xf455, +0xf602, 0xf387, 0xf530, 0xf387, 0xf530, 0xf306, 0xf4a7, 0xf306, 0xf4a7, 0xf3af, 0xf546, +0xf3af, 0xf546, 0xf3c2, 0xf54a, 0xf3c2, 0xf54a, 0xf2c1, 0xf435, 0xf2c1, 0xf435, 0xf1bb, +0xf318, 0xf1bb, 0xf318, 0xf1bb, 0xf318, 0xf18e, 0xf2d0, 0xf18e, 0xf2d0, 0xf0b6, 0xf1d9, +0xf0b6, 0xf1d9, 0xf0fa, 0xf1fb, 0xf0fa, 0xf1fb, 0xf18f, 0xf26c, 0xf18f, 0xf26c, 0xf222, +0xf2d7, 0xf222, 0xf2d7, 0xf479, 0xf505, 0xf479, 0xf505, 0xf479, 0xf505, 0xf554, 0xf5b6, +0xf554, 0xf5b6, 0xf6de, 0xf716, 0xf6de, 0xf716, 0xf820, 0xf82e, 0xf820, 0xf82e, 0xf7e5, +0xf7c9, 0xf7e5, 0xf7c9, 0xf91a, 0xf8d6, 0xf91a, 0xf8d6, 0xf91a, 0xf8d6, 0xfa46, 0xf9db, +0xfa46, 0xf9db, 0xfb9f, 0xfb0e, 0xfb9f, 0xfb0e, 0xfdae, 0xfcf9, 0xfdae, 0xfcf9, 0x25, +0xff4f, 0x25, 0xff4f, 0x27e, 0x189, 0x27e, 0x189, 0x4e1, 0x3cf, 0x4e1, 0x3cf, +0x4e1, 0x3cf, 0x6fd, 0x5d0, 0x6fd, 0x5d0, 0x755, 0x60f, 0x755, 0x60f, 0x71d, +0x5bf, 0x71d, 0x5bf, 0x7bc, 0x648, 0x7bc, 0x648, 0x808, 0x67f, 0x808, 0x67f, +0x76e, 0x5d0, 0x76e, 0x5d0, 0x76e, 0x5d0, 0x80b, 0x658, 0x80b, 0x658, 0x9d9, +0x811, 0x9d9, 0x811, 0xafd, 0x920, 0xafd, 0x920, 0xb07, 0x914, 0xb07, 0x914, +0xa8e, 0x882, 0xa8e, 0x882, 0xa8e, 0x882, 0x99e, 0x77a, 0x99e, 0x77a, 0x948, +0x709, 0x948, 0x709, 0xb12, 0x8b8, 0xb12, 0x8b8, 0xb62, 0x8eb, 0xb62, 0x8eb, +0xaa9, 0x813, 0xaa9, 0x813, 0xd0a, 0xa56, 0xd0a, 0xa56, 0xd0a, 0xa56, 0xf9a, +0xcc7, 0xf9a, 0xcc7, 0x11bc, 0xeca, 0x11bc, 0xeca, 0x140a, 0x10fa, 0x140a, 0x10fa, +0x1496, 0x1168, 0x1496, 0x1168, 0x1580, 0x1237, 0x1580, 0x1237, 0x16a3, 0x1341, 0x16a3, +0x1341, 0x16a3, 0x1341, 0x17a6, 0x142e, 0x17a6, 0x142e, 0x1952, 0x15c7, 0x1952, 0x15c7, +0x199e, 0x1604, 0x199e, 0x1604, 0x1aad, 0x170a, 0x1aad, 0x170a, 0x1c88, 0x18e0, 0x1c88, +0x18e0, 0x1c88, 0x18e0, 0x1d7d, 0x19d5, 0x1d7d, 0x19d5, 0x1ed2, 0x1b31, 0x1ed2, 0x1b31, +0x1e74, 0x1ade, 0x1e74, 0x1ade, 0x1d89, 0x1a05, 0x1d89, 0x1a05, 0x1d5b, 0x19ed, 0x1d5b, +0x19ed, 0x1cac, 0x195a, 0x1cac, 0x195a, 0x1cac, 0x195a, 0x1c6f, 0x193e, 0x1c6f, 0x193e, +0x1b70, 0x1864, 0x1b70, 0x1864, 0x1afb, 0x1818, 0x1afb, 0x1818, 0x1b3e, 0x1888, 0x1b3e, +0x1888, 0x1af1, 0x186b, 0x1af1, 0x186b, 0x1b12, 0x18bd, 0x1b12, 0x18bd, 0x1b12, 0x18bd, +0x19df, 0x17bc, 0x19df, 0x17bc, 0x190d, 0x171d, 0x190d, 0x171d, 0x1857, 0x1699, 0x1857, +0x1699, 0x16b4, 0x1528, 0x16b4, 0x1528, 0x1613, 0x14b7, 0x1613, 0x14b7, 0x1613, 0x14b7, +0x1401, 0x12d2, 0x1401, 0x12d2, 0x1264, 0x1160, 0x1264, 0x1160, 0x11fd, 0x1121, 0x11fd, +0x1121, 0x1027, 0xf6e, 0x1027, 0xf6e, 0xe8b, 0xdf3, 0xe8b, 0xdf3, 0xcf4, 0xc79, +0xcf4, 0xc79, 0xcf4, 0xc79, 0xa5c, 0x9f9, 0xa5c, 0x9f9, 0x90f, 0x8c1, 0x90f, +0x8c1, 0x9c4, 0x987, 0x9c4, 0x987, 0x9cc, 0x99d, 0x9cc, 0x99d, 0x96b, 0x946, +0x96b, 0x946, 0x8fd, 0x8e0, 0x8fd, 0x8e0, 0x8fd, 0x8e0, 0x880, 0x869, 0x880, +0x869, 0x7c6, 0x7b3, 0x7c6, 0x7b3, 0x67d, 0x66d, 0x67d, 0x66d, 0x562, 0x553, +0x562, 0x553, 0x35f, 0x352, 0x35f, 0x352, 0x35f, 0x352, 0x2cc, 0x2c0, 0x2cc, +0x2c0, 0x348, 0x33e, 0x348, 0x33e, 0x398, 0x390, 0x398, 0x390, 0x457, 0x451, +0x457, 0x451, 0x445, 0x443, 0x445, 0x443, 0x421, 0x423, 0x421, 0x423, 0x421, +0x423, 0x37b, 0x383, 0x37b, 0x383, 0x2ba, 0x2c8, 0x2ba, 0x2c8, 0x10a, 0x11f, +0x10a, 0x11f, 0xfeae, 0xfeca, 0xfeae, 0xfeca, 0xfd25, 0xfd48, 0xfd25, 0xfd48, 0xfb67, +0xfb92, 0xfb67, 0xfb92, 0xfb67, 0xfb92, 0xf96c, 0xf99f, 0xf96c, 0xf99f, 0xf840, 0xf879, +0xf840, 0xf879, 0xf725, 0xf763, 0xf725, 0xf763, 0xf63c, 0xf67e, 0xf63c, 0xf67e, 0xf746, +0xf78b, 0xf746, 0xf78b, 0xf746, 0xf78b, 0xf678, 0xf6be, 0xf678, 0xf6be, 0xf5c0, 0xf606, +0xf5c0, 0xf606, 0xf5fd, 0xf641, 0xf5fd, 0xf641, 0xf54d, 0xf58c, 0xf54d, 0xf58c, 0xf611, +0xf64a, 0xf611, 0xf64a, 0xf508, 0xf53a, 0xf508, 0xf53a, 0xf508, 0xf53a, 0xf40b, 0xf435, +0xf40b, 0xf435, 0xf3bd, 0xf3df, 0xf3bd, 0xf3df, 0xf3f2, 0xf40b, 0xf3f2, 0xf40b, 0xf5b2, +0xf5c3, 0xf5b2, 0xf5c3, 0xf562, 0xf56b, 0xf562, 0xf56b, 0xf562, 0xf56b, 0xf498, 0xf49b, +0xf498, 0xf49b, 0xf481, 0xf47f, 0xf481, 0xf47f, 0xf4de, 0xf4da, 0xf4de, 0xf4da, 0xf538, +0xf535, 0xf538, 0xf535, 0xf4aa, 0xf4ac, 0xf4aa, 0xf4ac, 0xf44d, 0xf457, 0xf44d, 0xf457, +0xf44d, 0xf457, 0xf4a6, 0xf4bd, 0xf4a6, 0xf4bd, 0xf615, 0xf63d, 0xf615, 0xf63d, 0xf7ee, +0xf82c, 0xf7ee, 0xf82c, 0xf826, 0xf87e, 0xf826, 0xf87e, 0xf78a, 0xf802, 0xf78a, 0xf802, +0xf743, 0xf7de, 0xf743, 0xf7de, 0xf743, 0xf7de, 0xf6d1, 0xf794, 0xf6d1, 0xf794, 0xf653, +0xf741, 0xf653, 0xf741, 0xf4cb, 0xf5e7, 0xf4cb, 0xf5e7, 0xf41d, 0xf56a, 0xf41d, 0xf56a, +0xf550, 0xf6d1, 0xf550, 0xf6d1, 0xf550, 0xf6d1, 0xf5ee, 0xf7a2, 0xf5ee, 0xf7a2, 0xf5e5, +0xf7ce, 0xf5e5, 0xf7ce, 0xf4e2, 0xf6ff, 0xf4e2, 0xf6ff, 0xf2a9, 0xf4f8, 0xf2a9, 0xf4f8, +0xf1ad, 0xf42d, 0xf1ad, 0xf42d, 0xf1c7, 0xf475, 0xf1c7, 0xf475, 0xf1c7, 0xf475, 0xf140, +0xf41a, 0xf140, 0xf41a, 0xf076, 0xf376, 0xf076, 0xf376, 0xf031, 0xf353, 0xf031, 0xf353, +0xf169, 0xf4a9, 0xf169, 0xf4a9, 0xf1ee, 0xf546, 0xf1ee, 0xf546, 0xf1e2, 0xf54d, 0xf1e2, +0xf54d, 0xf1e2, 0xf54d, 0xf246, 0xf5c0, 0xf246, 0xf5c0, 0xf166, 0xf4e8, 0xf166, 0xf4e8, +0xf0d8, 0xf45e, 0xf0d8, 0xf45e, 0xf16f, 0xf4f5, 0xf16f, 0xf4f5, 0xf212, 0xf592, 0xf212, +0xf592, 0xf212, 0xf592, 0xf1e5, 0xf55c, 0xf1e5, 0xf55c, 0xf23d, 0xf5a8, 0xf23d, 0xf5a8, +0xf38d, 0xf6e9, 0xf38d, 0xf6e9, 0xf4a1, 0xf7eb, 0xf4a1, 0xf7eb, 0xf58a, 0xf8c1, 0xf58a, +0xf8c1, 0xf6b5, 0xf9d8, 0xf6b5, 0xf9d8, 0xf6b5, 0xf9d8, 0xf70e, 0xfa1c, 0xf70e, 0xfa1c, +0xf790, 0xfa8a, 0xf790, 0xfa8a, 0xf9c8, 0xfcae, 0xf9c8, 0xfcae, 0xf993, 0xfc65, 0xf993, +0xfc65, 0xf9b3, 0xfc72, 0xf9b3, 0xfc72, 0xfad9, 0xfd86, 0xfad9, 0xfd86, 0xfad9, 0xfd86, +0xfa2b, 0xfcc6, 0xfa2b, 0xfcc6, 0xfa91, 0xfd1d, 0xfa91, 0xfd1d, 0xfa88, 0xfd04, 0xfa88, +0xfd04, 0xfaa4, 0xfd11, 0xfaa4, 0xfd11, 0xf9dd, 0xfc3b, 0xf9dd, 0xfc3b, 0xf9dd, 0xfc3b, +0xf8b7, 0xfb06, 0xf8b7, 0xfb06, 0xf907, 0xfb47, 0xf907, 0xfb47, 0xf7b2, 0xf9e2, 0xf7b2, +0xf9e2, 0xf751, 0xf970, 0xf751, 0xf970, 0xf745, 0xf950, 0xf745, 0xf950, 0xf5ee, 0xf7e4, +0xf5ee, 0xf7e4, 0xf5ee, 0xf7e4, 0xf63d, 0xf81c, 0xf63d, 0xf81c, 0xf5c5, 0xf78a, 0xf5c5, +0xf78a, 0xf413, 0xf5bb, 0xf413, 0xf5bb, 0xf3c0, 0xf549, 0xf3c0, 0xf549, 0xf334, 0xf49c, +0xf334, 0xf49c, 0xf30a, 0xf44e, 0xf30a, 0xf44e, 0xf30a, 0xf44e, 0xf340, 0xf45e, 0xf340, +0xf45e, 0xf386, 0xf47d, 0xf386, 0xf47d, 0xf45e, 0xf52b, 0xf45e, 0xf52b, 0xf45e, 0xf502, +0xf45e, 0xf502, 0xf4ca, 0xf544, 0xf4ca, 0xf544, 0xf4ca, 0xf544, 0xf40c, 0xf45d, 0xf40c, +0xf45d, 0xf2f6, 0xf31f, 0xf2f6, 0xf31f, 0xf272, 0xf275, 0xf272, 0xf275, 0xf16a, 0xf149, +0xf16a, 0xf149, 0xf1e4, 0xf1a3, 0xf1e4, 0xf1a3, 0xf185, 0xf128, 0xf185, 0xf128, 0xf185, +0xf128, 0xf0d4, 0xf05e, 0xf0d4, 0xf05e, 0xf0cb, 0xf041, 0xf0cb, 0xf041, 0xf027, 0xef8d, +0xf027, 0xef8d, 0xefd3, 0xef2e, 0xefd3, 0xef2e, 0xef97, 0xeeec, 0xef97, 0xeeec, 0xeeea, +0xee3d, 0xeeea, 0xee3d, 0xeeea, 0xee3d, 0xee3d, 0xed93, 0xee3d, 0xed93, 0xeed7, 0xee34, +0xeed7, 0xee34, 0xefb8, 0xef1f, 0xefb8, 0xef1f, 0xf04f, 0xefc4, 0xf04f, 0xefc4, 0xf077, +0xeffa, 0xf077, 0xeffa, 0xf077, 0xeffa, 0xf0af, 0xf043, 0xf0af, 0xf043, 0xf10f, 0xf0b4, +0xf10f, 0xf0b4, 0xf118, 0xf0cf, 0xf118, 0xf0cf, 0xf1f4, 0xf1bb, 0xf1f4, 0xf1bb, 0xf173, +0xf148, 0xf173, 0xf148, 0xf089, 0xf06b, 0xf089, 0xf06b, 0xf089, 0xf06b, 0xf101, 0xf0eb, +0xf101, 0xf0eb, 0xf111, 0xf100, 0xf111, 0xf100, 0xf14e, 0xf13f, 0xf14e, 0xf13f, 0xf17b, +0xf169, 0xf17b, 0xf169, 0xf186, 0xf16c, 0xf186, 0xf16c, 0xf283, 0xf25d, 0xf283, 0xf25d, +0xf283, 0xf25d, 0xf3a0, 0xf369, 0xf3a0, 0xf369, 0xf498, 0xf44d, 0xf498, 0xf44d, 0xf556, +0xf4f3, 0xf556, 0xf4f3, 0xf580, 0xf501, 0xf580, 0xf501, 0xf6d1, 0xf634, 0xf6d1, 0xf634, +0xf6d1, 0xf634, 0xf816, 0xf759, 0xf816, 0xf759, 0xf8a1, 0xf7c3, 0xf8a1, 0xf7c3, 0xfa37, +0xf936, 0xfa37, 0xf936, 0xfba5, 0xfa82, 0xfba5, 0xfa82, 0xfe80, 0xfd3b, 0xfe80, 0xfd3b, +0x1e3, 0x7e, 0x1e3, 0x7e, 0x1e3, 0x7e, 0x3b5, 0x233, 0x3b5, 0x233, 0x5e0, +0x442, 0x5e0, 0x442, 0x77d, 0x5c7, 0x77d, 0x5c7, 0x9ca, 0x7ff, 0x9ca, 0x7ff, +0xb8a, 0x9ad, 0xb8a, 0x9ad, 0xb75, 0x98a, 0xb75, 0x98a, 0xb75, 0x98a, 0xca6, +0xab2, 0xca6, 0xab2, 0xd58, 0xb5d, 0xd58, 0xb5d, 0xef7, 0xcf8, 0xef7, 0xcf8, +0x10b7, 0xeb7, 0x10b7, 0xeb7, 0xfc6, 0xdc8, 0xfc6, 0xdc8, 0xfc6, 0xdc8, 0xeef, +0xcf5, 0xeef, 0xcf5, 0xe02, 0xc0e, 0xe02, 0xc0e, 0xe61, 0xc73, 0xe61, 0xc73, +0xf51, 0xd6a, 0xf51, 0xd6a, 0xf9a, 0xdbb, 0xf9a, 0xdbb, 0x1083, 0xeab, 0x1083, +0xeab, 0x1083, 0xeab, 0x1126, 0xf55, 0x1126, 0xf55, 0x1357, 0x118c, 0x1357, 0x118c, +0x15d9, 0x1412, 0x15d9, 0x1412, 0x16c1, 0x14ff, 0x16c1, 0x14ff, 0x16f4, 0x1535, 0x16f4, +0x1535, 0x16e9, 0x152c, 0x16e9, 0x152c, 0x16e9, 0x152c, 0x1720, 0x1565, 0x1720, 0x1565, +0x16e3, 0x152b, 0x16e3, 0x152b, 0x168b, 0x14d5, 0x168b, 0x14d5, 0x174e, 0x159b, 0x174e, +0x159b, 0x1884, 0x16d6, 0x1884, 0x16d6, 0x1884, 0x16d6, 0x18a4, 0x16fd, 0x18a4, 0x16fd, +0x18e0, 0x1742, 0x18e0, 0x1742, 0x1909, 0x1778, 0x1909, 0x1778, 0x1851, 0x16d1, 0x1851, +0x16d1, 0x174c, 0x15e1, 0x174c, 0x15e1, 0x160c, 0x14ba, 0x160c, 0x14ba, 0x160c, 0x14ba, +0x14d4, 0x13a1, 0x14d4, 0x13a1, 0x128f, 0x117f, 0x128f, 0x117f, 0x114f, 0x1068, 0x114f, +0x1068, 0x109c, 0xfe2, 0x109c, 0xfe2, 0xec6, 0xe3d, 0xec6, 0xe3d, 0xec6, 0xe3d, +0xdff, 0xdac, 0xdff, 0xdac, 0xc76, 0xc5c, 0xc76, 0xc5c, 0x9ea, 0xa0d, 0x9ea, +0xa0d, 0x8c8, 0x929, 0x8c8, 0x929, 0x824, 0x8c5, 0x824, 0x8c5, 0x6c1, 0x7a2, +0x6c1, 0x7a2, 0x6c1, 0x7a2, 0x58e, 0x6af, 0x58e, 0x6af, 0x481, 0x5df, 0x481, +0x5df, 0x38e, 0x528, 0x38e, 0x528, 0x23b, 0x40c, 0x23b, 0x40c, 0xa0, 0x2a4, +0xa0, 0x2a4, 0xff11, 0x144, 0xff11, 0x144, 0xff11, 0x144, 0xfbea, 0xfe46, 0xfbea, +0xfe46, 0xfa5e, 0xfcdc, 0xfa5e, 0xfcdc, 0xf946, 0xfbdf, 0xf946, 0xfbdf, 0xf78b, 0xfa3a, +0xf78b, 0xfa3a, 0xf7cf, 0xfa8c, 0xf7cf, 0xfa8c, 0xf7cf, 0xfa8c, 0xf744, 0xfa08, 0xf744, +0xfa08, 0xf746, 0xfa0b, 0xf746, 0xfa0b, 0xf702, 0xf9c1, 0xf702, 0xf9c1, 0xf557, 0xf80a, +0xf557, 0xf80a, 0xf3ce, 0xf670, 0xf3ce, 0xf670, 0xf1b5, 0xf441, 0xf1b5, 0xf441, 0xf1b5, +0xf441, 0xf159, 0xf3cc, 0xf159, 0xf3cc, 0xf193, 0xf3e8, 0xf193, 0xf3e8, 0xf1c6, 0xf3fb, +0xf1c6, 0xf3fb, 0xf303, 0xf516, 0xf303, 0xf516, 0xf369, 0xf559, 0xf369, 0xf559, 0xf49a, +0xf665, 0xf49a, 0xf665, 0xf49a, 0xf665, 0xf6a7, 0xf84d, 0xf6a7, 0xf84d, 0xf697, 0xf819, +0xf697, 0xf819, 0xf5db, 0xf739, 0xf5db, 0xf739, 0xf59d, 0xf6d7, 0xf59d, 0xf6d7, 0xf5b8, +0xf6d0, 0xf5b8, 0xf6d0, 0xf5b8, 0xf6d0, 0xf677, 0xf76d, 0xf677, 0xf76d, 0xf683, 0xf758, +0xf683, 0xf758, 0xf687, 0xf73c, 0xf687, 0xf73c, 0xf64e, 0xf6e3, 0xf64e, 0xf6e3, 0xf683, +0xf6f9, 0xf683, 0xf6f9, 0xf811, 0xf868, 0xf811, 0xf868, 0xf811, 0xf868, 0xf8cc, 0xf903, +0xf8cc, 0xf903, 0xf985, 0xf99c, 0xf985, 0xf99c, 0xf980, 0xf977, 0xf980, 0xf977, 0xf91a, +0xf8ef, 0xf91a, 0xf8ef, 0xfa60, 0xfa13, 0xfa60, 0xfa13, 0xfb0a, 0xfa99, 0xfb0a, 0xfa99, +0xfb0a, 0xfa99, 0xfb89, 0xfaf4, 0xfb89, 0xfaf4, 0xfccf, 0xfc16, 0xfccf, 0xfc16, 0xfdce, +0xfcef, 0xfdce, 0xfcef, 0xff87, 0xfe82, 0xff87, 0xfe82, 0x1f4, 0xc8, 0x1f4, 0xc8, +0x1f4, 0xc8, 0x2ff, 0x1ae, 0x2ff, 0x1ae, 0x34a, 0x1d4, 0x34a, 0x1d4, 0x4f2, +0x359, 0x4f2, 0x359, 0x6e2, 0x528, 0x6e2, 0x528, 0x84f, 0x677, 0x84f, 0x677, +0x9e2, 0x7ee, 0x9e2, 0x7ee, 0x9e2, 0x7ee, 0xb1e, 0x912, 0xb1e, 0x912, 0xb89, +0x96a, 0xb89, 0x96a, 0xca6, 0xa77, 0xca6, 0xa77, 0xe0e, 0xbd6, 0xe0e, 0xbd6, +0xdbe, 0xb81, 0xdbe, 0xb81, 0xde9, 0xbad, 0xde9, 0xbad, 0xde9, 0xbad, 0xe5d, +0xc27, 0xe5d, 0xc27, 0xe11, 0xbe7, 0xe11, 0xbe7, 0xe2a, 0xc12, 0xe2a, 0xc12, +0xdd4, 0xbd2, 0xdd4, 0xbd2, 0xddb, 0xbf4, 0xddb, 0xbf4, 0xddb, 0xbf4, 0xd47, +0xb7e, 0xd47, 0xb7e, 0xbdd, 0xa36, 0xbdd, 0xa36, 0xa5f, 0x8de, 0xa5f, 0x8de, +0x7f7, 0x69d, 0x7f7, 0x69d, 0x70a, 0x5d9, 0x70a, 0x5d9, 0x6b5, 0x5ac, 0x6b5, +0x5ac, 0x6b5, 0x5ac, 0x517, 0x437, 0x517, 0x437, 0x3cc, 0x313, 0x3cc, 0x313, +0x294, 0x200, 0x294, 0x200, 0x281, 0x210, 0x281, 0x210, 0x39b, 0x349, 0x39b, +0x349, 0x34a, 0x313, 0x34a, 0x313, 0x34a, 0x313, 0x327, 0x306, 0x327, 0x306, +0x311, 0x302, 0x311, 0x302, 0x2de, 0x2db, 0x2de, 0x2db, 0x41a, 0x41e, 0x41a, +0x41e, 0x43f, 0x445, 0x43f, 0x445, 0x43f, 0x445, 0x433, 0x435, 0x433, 0x435, +0x3ab, 0x3a4, 0x3ab, 0x3a4, 0x378, 0x364, 0x378, 0x364, 0x502, 0x4dd, 0x502, +0x4dd, 0x4ca, 0x48e, 0x4ca, 0x48e, 0x51e, 0x4ca, 0x51e, 0x4ca, 0x51e, 0x4ca, +0x5e5, 0x575, 0x5e5, 0x575, 0x6aa, 0x61d, 0x6aa, 0x61d, 0x801, 0x756, 0x801, +0x756, 0x84f, 0x786, 0x84f, 0x786, 0x98c, 0x8a3, 0x98c, 0x8a3, 0xa47, 0x93f, +0xa47, 0x93f, 0xa47, 0x93f, 0xb3a, 0xa15, 0xb3a, 0xa15, 0xcd1, 0xb91, 0xcd1, +0xb91, 0xd8f, 0xc35, 0xd8f, 0xc35, 0xebc, 0xd4b, 0xebc, 0xd4b, 0xf0f, 0xd89, +0xf0f, 0xd89, 0xf0f, 0xd89, 0xf3c, 0xda3, 0xf3c, 0xda3, 0x105b, 0xeb3, 0x105b, +0xeb3, 0x1095, 0xee0, 0x1095, 0xee0, 0xfde, 0xe1e, 0xfde, 0xe1e, 0x1087, 0xebf, +0x1087, 0xebf, 0x1168, 0xf9a, 0x1168, 0xf9a, 0x1168, 0xf9a, 0x11a4, 0xfd1, 0x11a4, +0xfd1, 0x1264, 0x108e, 0x1264, 0x108e, 0x1213, 0x103d, 0x1213, 0x103d, 0x11a9, 0xfd2, +0x11a9, 0xfd2, 0x11cb, 0xff6, 0x11cb, 0xff6, 0x12af, 0x10dc, 0x12af, 0x10dc, 0x12af, +0x10dc, 0x1426, 0x1255, 0x1426, 0x1255, 0x1519, 0x134b, 0x1519, 0x134b, 0x1682, 0x14b8, +0x1682, 0x14b8, 0x171f, 0x1559, 0x171f, 0x1559, 0x1786, 0x15c5, 0x1786, 0x15c5, 0x1786, +0x15c5, 0x17d8, 0x161e, 0x17d8, 0x161e, 0x168c, 0x14da, 0x168c, 0x14da, 0x1554, 0x13aa, +0x1554, 0x13aa, 0x14e9, 0x134b, 0x14e9, 0x134b, 0x1516, 0x1385, 0x1516, 0x1385, 0x1584, +0x1402, 0x1584, 0x1402, 0x1584, 0x1402, 0x157f, 0x1410, 0x157f, 0x1410, 0x1521, 0x13c7, +0x1521, 0x13c7, 0x1451, 0x1310, 0x1451, 0x1310, 0x12b0, 0x118b, 0x12b0, 0x118b, 0x1133, +0x102e, 0x1133, 0x102e, 0xf25, 0xe44, 0xf25, 0xe44, 0xf25, 0xe44, 0xcb1, 0xbf7, +0xcb1, 0xbf7, 0xb26, 0xa97, 0xb26, 0xa97, 0x8ca, 0x868, 0x8ca, 0x868, 0x748, +0x717, 0x748, 0x717, 0x602, 0x604, 0x602, 0x604, 0x602, 0x604, 0x3ba, 0x3f0, +0x3ba, 0x3f0, 0x255, 0x2c2, 0x255, 0x2c2, 0x29, 0xcd, 0x29, 0xcd, 0xfeae, +0xff89, 0xfeae, 0xff89, 0xfdaf, 0xfebf, 0xfdaf, 0xfebf, 0xfb72, 0xfcb7, 0xfb72, 0xfcb7, +0xfb72, 0xfcb7, 0xf961, 0xfad8, 0xf961, 0xfad8, 0xf6eb, 0xf891, 0xf6eb, 0xf891, 0xf4ce, +0xf6a1, 0xf4ce, 0xf6a1, 0xf312, 0xf50c, 0xf312, 0xf50c, 0xf09a, 0xf2b6, 0xf09a, 0xf2b6, +0xf09a, 0xf2b6, 0xeeb7, 0xf0f2, 0xeeb7, 0xf0f2, 0xed86, 0xefd9, 0xed86, 0xefd9, 0xeb75, +0xedda, 0xeb75, 0xedda, 0xe9e0, 0xec52, 0xe9e0, 0xec52, 0xe904, 0xeb7e, 0xe904, 0xeb7e, +0xe826, 0xeaa0, 0xe826, 0xeaa0, 0xe826, 0xeaa0, 0xe821, 0xea97, 0xe821, 0xea97, 0xe7d4, +0xea40, 0xe7d4, 0xea40, 0xe77d, 0xe9da, 0xe77d, 0xe9da, 0xe6ea, 0xe935, 0xe6ea, 0xe935, +0xe728, 0xe95a, 0xe728, 0xe95a, 0xe87a, 0xea91, 0xe87a, 0xea91, 0xe87a, 0xea91, 0xe935, +0xeb2d, 0xe935, 0xeb2d, 0xeaa3, 0xec7b, 0xeaa3, 0xec7b, 0xeb63, 0xed18, 0xeb63, 0xed18, +0xec7c, 0xee0d, 0xec7c, 0xee0d, 0xee10, 0xef7c, 0xee10, 0xef7c, 0xee10, 0xef7c, 0xee66, +0xefac, 0xee66, 0xefac, 0xef49, 0xf06a, 0xef49, 0xf06a, 0xef87, 0xf083, 0xef87, 0xf083, +0xefc4, 0xf09d, 0xefc4, 0xf09d, 0xf0b5, 0xf16a, 0xf0b5, 0xf16a, 0xf0b4, 0xf149, 0xf0b4, +0xf149, 0xf0b4, 0xf149, 0xefdb, 0xf050, 0xefdb, 0xf050, 0xef5b, 0xefb2, 0xef5b, 0xefb2, +0xf002, 0xf03d, 0xf002, 0xf03d, 0xf0bd, 0xf0df, 0xf0bd, 0xf0df, 0xf0e8, 0xf0f2, 0xf0e8, +0xf0f2, 0xf10b, 0xf0ff, 0xf10b, 0xf0ff, 0xf10b, 0xf0ff, 0xf20e, 0xf1ef, 0xf20e, 0xf1ef, +0xf348, 0xf319, 0xf348, 0xf319, 0xf4ea, 0xf4ac, 0xf4ea, 0xf4ac, 0xf68e, 0xf644, 0xf68e, +0xf644, 0xf77a, 0xf725, 0xf77a, 0xf725, 0xf77a, 0xf725, 0xf93c, 0xf8e0, 0xf93c, 0xf8e0, +0xfa73, 0xfa11, 0xfa73, 0xfa11, 0xfb76, 0xfb10, 0xfb76, 0xfb10, 0xfc9a, 0xfc34, 0xfc9a, +0xfc34, 0xfd3d, 0xfcda, 0xfd3d, 0xfcda, 0xfe5b, 0xfdfc, 0xfe5b, 0xfdfc, 0xfe5b, 0xfdfc, +0xfefc, 0xfea4, 0xfefc, 0xfea4, 0x57, 0xa, 0x57, 0xa, 0x125, 0xe5, 0x125, +0xe5, 0x152, 0x123, 0x152, 0x123, 0x2cd, 0x2b2, 0x2cd, 0x2b2, 0x300, 0x2fb, +0x300, 0x2fb, 0x300, 0x2fb, 0x29d, 0x2b2, 0x29d, 0x2b2, 0x1cd, 0x1ff, 0x1cd, +0x1ff, 0xf6, 0x148, 0xf6, 0x148, 0x171, 0x1e7, 0x171, 0x1e7, 0x109, 0x1a6, +0x109, 0x1a6, 0x109, 0x1a6, 0xa4, 0x16a, 0xa4, 0x16a, 0x47, 0x139, 0x47, +0x139, 0xff0f, 0x2f, 0xff0f, 0x2f, 0xfeb1, 0x1, 0xfeb1, 0x1, 0xfdc2, 0xff44, +0xfdc2, 0xff44, 0xfc7b, 0xfe2f, 0xfc7b, 0xfe2f, 0xfc7b, 0xfe2f, 0xfc05, 0xfdec, 0xfc05, +0xfdec, 0xf9e5, 0xfc00, 0xf9e5, 0xfc00, 0xf80f, 0xfa5e, 0xf80f, 0xfa5e, 0xf72d, 0xf9af, +0xf72d, 0xf9af, 0xf51c, 0xf7d0, 0xf51c, 0xf7d0, 0xf315, 0xf5f9, 0xf315, 0xf5f9, 0xf315, +0xf5f9, 0xf0d6, 0xf3e9, 0xf0d6, 0xf3e9, 0xeeb5, 0xf1f4, 0xeeb5, 0xf1f4, 0xec64, 0xefcb, +0xec64, 0xefcb, 0xea6c, 0xedf9, 0xea6c, 0xedf9, 0xe971, 0xed20, 0xe971, 0xed20, 0xe971, +0xed20, 0xe804, 0xebd0, 0xe804, 0xebd0, 0xe744, 0xeb29, 0xe744, 0xeb29, 0xe6d2, 0xeacb, +0xe6d2, 0xeacb, 0xe61c, 0xea25, 0xe61c, 0xea25, 0xe53f, 0xe951, 0xe53f, 0xe951, 0xe457, +0xe86f, 0xe457, 0xe86f, 0xe457, 0xe86f, 0xe348, 0xe75e, 0xe348, 0xe75e, 0xe261, 0xe672, +0xe261, 0xe672, 0xe23a, 0xe63f, 0xe23a, 0xe63f, 0xe22c, 0xe620, 0xe22c, 0xe620, 0xe307, +0xe6e4, 0xe307, 0xe6e4, 0xe3b8, 0xe779, 0xe3b8, 0xe779, 0xe3b8, 0xe779, 0xe501, 0xe8a2, +0xe501, 0xe8a2, 0xe6b7, 0xea32, 0xe6b7, 0xea32, 0xe751, 0xeaa2, 0xe751, 0xeaa2, 0xe836, +0xeb59, 0xe836, 0xeb59, 0xe8e9, 0xebd9, 0xe8e9, 0xebd9, 0xe8e9, 0xebd9, 0xea6f, 0xed2a, +0xea6f, 0xed2a, 0xec27, 0xeea9, 0xec27, 0xeea9, 0xeddb, 0xf021, 0xeddb, 0xf021, 0xef82, +0xf18a, 0xef82, 0xf18a, 0xef77, 0xf140, 0xef77, 0xf140, 0xf011, 0xf198, 0xf011, 0xf198, +0xf011, 0xf198, 0xf18d, 0xf2d1, 0xf18d, 0xf2d1, 0xf308, 0xf409, 0xf308, 0xf409, 0xf46c, +0xf52a, 0xf46c, 0xf52a, 0xf57d, 0xf5f7, 0xf57d, 0xf5f7, 0xf6ab, 0xf6e1, 0xf6ab, 0xf6e1, +0xf83f, 0xf832, 0xf83f, 0xf832, 0xf83f, 0xf832, 0xfa5a, 0xfa0c, 0xfa5a, 0xfa0c, 0xfbe6, +0xfb57, 0xfbe6, 0xfb57, 0xfcca, 0xfbfc, 0xfcca, 0xfbfc, 0xfe4f, 0xfd43, 0xfe4f, 0xfd43, +0x6, 0xfebf, 0x6, 0xfebf, 0x6, 0xfebf, 0x176, 0xfff6, 0x176, 0xfff6, 0x3ed, +0x236, 0x3ed, 0x236, 0x5fd, 0x412, 0x5fd, 0x412, 0x706, 0x4ea, 0x706, 0x4ea, +0x8ca, 0x67f, 0x8ca, 0x67f, 0xac8, 0x852, 0xac8, 0x852, 0xac8, 0x852, 0xc8e, +0x9f0, 0xc8e, 0x9f0, 0xd68, 0xaa5, 0xd68, 0xaa5, 0xedf, 0xbfa, 0xedf, 0xbfa, +0x10b5, 0xdb3, 0x10b5, 0xdb3, 0x10f7, 0xddb, 0x10f7, 0xddb, 0x129e, 0xf6b, 0x129e, +0xf6b, 0x129e, 0xf6b, 0x1430, 0x10eb, 0x1430, 0x10eb, 0x14e2, 0x1190, 0x14e2, 0x1190, +0x1699, 0x133d, 0x1699, 0x133d, 0x1673, 0x1312, 0x1673, 0x1312, 0x1614, 0x12b2, 0x1614, +0x12b2, 0x1614, 0x12b2, 0x170a, 0x13ac, 0x170a, 0x13ac, 0x1722, 0x13cc, 0x1722, 0x13cc, +0x1642, 0x12f9, 0x1642, 0x12f9, 0x14e3, 0x11ab, 0x14e3, 0x11ab, 0x13f1, 0x10ce, 0x13f1, +0x10ce, 0x13da, 0x10d1, 0x13da, 0x10d1, 0x13da, 0x10d1, 0x1420, 0x1134, 0x1420, 0x1134, +0x13af, 0x10e4, 0x13af, 0x10e4, 0x1250, 0xfaa, 0x1250, 0xfaa, 0x108c, 0xe0d, 0x108c, +0xe0d, 0xfb4, 0xd5e, 0xfb4, 0xd5e, 0x1023, 0xdfa, 0x1023, 0xdfa, 0x1023, 0xdfa, +0x102e, 0xe32, 0x102e, 0xe32, 0xf89, 0xdbc, 0xf89, 0xdbc, 0xe2e, 0xc91, 0xe2e, +0xc91, 0xcd7, 0xb6a, 0xcd7, 0xb6a, 0xb9f, 0xa61, 0xb9f, 0xa61, 0xb9f, 0xa61, +0xa48, 0x939, 0xa48, 0x939, 0x92e, 0x84c, 0x92e, 0x84c, 0x7e8, 0x732, 0x7e8, +0x732, 0x6c0, 0x633, 0x6c0, 0x633, 0x679, 0x614, 0x679, 0x614, 0x694, 0x655, +0x694, 0x655, 0x694, 0x655, 0x5a0, 0x582, 0x5a0, 0x582, 0x529, 0x52b, 0x529, +0x52b, 0x49f, 0x4bc, 0x49f, 0x4bc, 0x306, 0x33c, 0x306, 0x33c, 0x27b, 0x2c7, +0x27b, 0x2c7, 0x27b, 0x2c7, 0x2a8, 0x306, 0x2a8, 0x306, 0x252, 0x2c1, 0x252, +0x2c1, 0x1b4, 0x230, 0x1b4, 0x230, 0x232, 0x2b8, 0x232, 0x2b8, 0x22d, 0x2bc, +0x22d, 0x2bc, 0x230, 0x2c4, 0x230, 0x2c4, 0x230, 0x2c4, 0x29b, 0x334, 0x29b, +0x334, 0x20e, 0x2a9, 0x20e, 0x2a9, 0x1f8, 0x295, 0x1f8, 0x295, 0x17b, 0x218, +0x17b, 0x218, 0x17f, 0x21c, 0x17f, 0x21c, 0xa9, 0x143, 0xa9, 0x143, 0xa9, +0x143, 0xff96, 0x2d, 0xff96, 0x2d, 0xfff1, 0x85, 0xfff1, 0x85, 0xfeec, 0xff7c, +0xfeec, 0xff7c, 0xfee9, 0xff74, 0xfee9, 0xff74, 0xfed1, 0xff57, 0xfed1, 0xff57, 0xfed1, +0xff57, 0xfd8e, 0xfe0f, 0xfd8e, 0xfe0f, 0xfd3c, 0xfdb6, 0xfd3c, 0xfdb6, 0xfd76, 0xfde9, +0xfd76, 0xfde9, 0xfe92, 0xfefd, 0xfe92, 0xfefd, 0xff5b, 0xffbe, 0xff5b, 0xffbe, 0x52, +0xab, 0x52, 0xab, 0x52, 0xab, 0x179, 0x1c8, 0x179, 0x1c8, 0x141, 0x187, +0x141, 0x187, 0x10c, 0x146, 0x10c, 0x146, 0x80, 0xaf, 0x80, 0xaf, 0xff75, +0xff98, 0xff75, 0xff98, 0xffa6, 0xffbd, 0xffa6, 0xffbd, 0xffa6, 0xffbd, 0xffb8, 0xffc3, +0xffb8, 0xffc3, 0xffa1, 0xffa1, 0xffa1, 0xffa1, 0x10, 0x5, 0x10, 0x5, 0xffc2, +0xffad, 0xffc2, 0xffad, 0xff6a, 0xff4c, 0xff6a, 0xff4c, 0xff6a, 0xff4c, 0xfea9, 0xfe83, +0xfea9, 0xfe83, 0xfd75, 0xfd49, 0xfd75, 0xfd49, 0xfccd, 0xfc9c, 0xfccd, 0xfc9c, 0xfbc1, +0xfb8d, 0xfbc1, 0xfb8d, 0xfacd, 0xfa98, 0xfacd, 0xfa98, 0xfae4, 0xfaaf, 0xfae4, 0xfaaf, +0xfae4, 0xfaaf, 0xfaf7, 0xfac5, 0xfaf7, 0xfac5, 0xfa55, 0xfa28, 0xfa55, 0xfa28, 0xf9f5, +0xf9cd, 0xf9f5, 0xf9cd, 0xfa3a, 0xfa1a, 0xfa3a, 0xfa1a, 0xfac1, 0xfaaa, 0xfac1, 0xfaaa, +0xfb6c, 0xfb5f, 0xfb6c, 0xfb5f, 0xfb6c, 0xfb5f, 0xfb74, 0xfb71, 0xfb74, 0xfb71, 0xfae5, +0xfaed, 0xfae5, 0xfaed, 0xf9f2, 0xfa06, 0xf9f2, 0xfa06, 0xf92e, 0xf94d, 0xf92e, 0xf94d, +0xf927, 0xf94f, 0xf927, 0xf94f, 0xf927, 0xf94f, 0xf870, 0xf8a2, 0xf870, 0xf8a2, 0xf830, +0xf869, 0xf830, 0xf869, 0xf894, 0xf8d2, 0xf894, 0xf8d2, 0xf83b, 0xf87e, 0xf83b, 0xf87e, +0xf829, 0xf86e, 0xf829, 0xf86e, 0xf876, 0xf8bc, 0xf876, 0xf8bc, 0xf876, 0xf8bc, 0xf924, +0xf968, 0xf924, 0xf968, 0xfa0d, 0xfa4c, 0xfa0d, 0xfa4c, 0xfb42, 0xfb7a, 0xfb42, 0xfb7a, +0xfb93, 0xfbc2, 0xfb93, 0xfbc2, 0xfb1c, 0xfb40, 0xfb1c, 0xfb40, 0xfba5, 0xfbbd, 0xfba5, +0xfbbd, 0xfba5, 0xfbbd, 0xfc94, 0xfc9e, 0xfc94, 0xfc9e, 0xfde3, 0xfdde, 0xfde3, 0xfdde, +0xfe83, 0xfe6e, 0xfe83, 0xfe6e, 0xff9f, 0xff79, 0xff9f, 0xff79, 0x1e0, 0x1a8, 0x1e0, +0x1a8, 0x1e0, 0x1a8, 0x3a2, 0x357, 0x3a2, 0x357, 0x5bb, 0x55e, 0x5bb, 0x55e, +0x67c, 0x60c, 0x67c, 0x60c, 0x603, 0x580, 0x603, 0x580, 0x6a8, 0x613, 0x6a8, +0x613, 0x6fa, 0x651, 0x6fa, 0x651, 0x6fa, 0x651, 0x6d0, 0x615, 0x6d0, 0x615, +0x70d, 0x640, 0x70d, 0x640, 0x6a7, 0x5c7, 0x6a7, 0x5c7, 0x66e, 0x57c, 0x66e, +0x57c, 0x63a, 0x535, 0x63a, 0x535, 0x5f8, 0x4e0, 0x5f8, 0x4e0, 0x5f8, 0x4e0, +0x603, 0x4d8, 0x603, 0x4d8, 0x568, 0x429, 0x568, 0x429, 0x688, 0x536, 0x688, +0x536, 0x827, 0x6c0, 0x827, 0x6c0, 0x970, 0x7f6, 0x970, 0x7f6, 0x970, 0x7f6, +0xb64, 0x9d5, 0xb64, 0x9d5, 0xcba, 0xb16, 0xcba, 0xb16, 0xee2, 0xd2a, 0xee2, +0xd2a, 0x1022, 0xe55, 0x1022, 0xe55, 0x109e, 0xebe, 0x109e, 0xebe, 0x11b3, 0xfc0, +0x11b3, 0xfc0, 0x11b3, 0xfc0, 0x1215, 0x1011, 0x1215, 0x1011, 0x130c, 0x10fa, 0x130c, +0x10fa, 0x13f3, 0x11d3, 0x13f3, 0x11d3, 0x14de, 0x12b3, 0x14de, 0x12b3, 0x16b8, 0x1485, +0x16b8, 0x1485, 0x17bc, 0x1584, 0x17bc, 0x1584, 0x17bc, 0x1584, 0x17dd, 0x15a3, 0x17dd, +0x15a3, 0x180b, 0x15d2, 0x180b, 0x15d2, 0x17fe, 0x15ca, 0x17fe, 0x15ca, 0x17d2, 0x15a6, +0x17d2, 0x15a6, 0x1781, 0x1561, 0x1781, 0x1561, 0x1781, 0x1561, 0x17cd, 0x15bc, 0x17cd, +0x15bc, 0x18c5, 0x16c6, 0x18c5, 0x16c6, 0x18bc, 0x16d2, 0x18bc, 0x16d2, 0x18a4, 0x16d1, +0x18a4, 0x16d1, 0x188e, 0x16d5, 0x188e, 0x16d5, 0x1780, 0x15e2, 0x1780, 0x15e2, 0x1780, +0x15e2, 0x16af, 0x152e, 0x16af, 0x152e, 0x1630, 0x14cc, 0x1630, 0x14cc, 0x154d, 0x1406, +0x154d, 0x1406, 0x143f, 0x1315, 0x143f, 0x1315, 0x13c8, 0x12bb, 0x13c8, 0x12bb, 0x1311, +0x121f, 0x1311, 0x121f, 0x1311, 0x121f, 0x118c, 0x10b4, 0x118c, 0x10b4, 0x1055, 0xf96, +0x1055, 0xf96, 0xeb2, 0xe0a, 0xeb2, 0xe0a, 0xd11, 0xc7e, 0xd11, 0xc7e, 0xc98, +0xc18, 0xc98, 0xc18, 0xc98, 0xc18, 0xc45, 0xbd5, 0xc45, 0xbd5, 0xbee, 0xb8e, +0xbee, 0xb8e, 0xb8b, 0xb38, 0xb8b, 0xb38, 0xaf9, 0xab2, 0xaf9, 0xab2, 0xa95, +0xa58, 0xa95, 0xa58, 0x9a8, 0x975, 0x9a8, 0x975, 0x9a8, 0x975, 0x877, 0x84d, +0x877, 0x84d, 0x7a9, 0x788, 0x7a9, 0x788, 0x617, 0x5fe, 0x617, 0x5fe, 0x536, +0x526, 0x536, 0x526, 0x52b, 0x524, 0x52b, 0x524, 0x44f, 0x450, 0x44f, 0x450, +0x44f, 0x450, 0x47b, 0x486, 0x47b, 0x486, 0x3e2, 0x3f6, 0x3e2, 0x3f6, 0x2d8, +0x2f6, 0x2d8, 0x2f6, 0x2cb, 0x2f3, 0x2cb, 0x2f3, 0x17e, 0x1b1, 0x17e, 0x1b1, +0x17e, 0x1b1, 0x81, 0xbd, 0x81, 0xbd, 0xff37, 0xff7c, 0xff37, 0xff7c, 0xfe39, +0xfe87, 0xfe39, 0xfe87, 0xfe42, 0xfe97, 0xfe42, 0xfe97, 0xfd53, 0xfdae, 0xfd53, 0xfdae, +0xfcd1, 0xfd31, 0xfcd1, 0xfd31, 0xfcd1, 0xfd31, 0xfc64, 0xfcc6, 0xfc64, 0xfcc6, 0xfc01, +0xfc63, 0xfc01, 0xfc63, 0xfbf0, 0xfc4f, 0xfbf0, 0xfc4f, 0xfaf0, 0xfb4a, 0xfaf0, 0xfb4a, +0xf9e5, 0xfa38, 0xf9e5, 0xfa38, 0xf9e5, 0xfa38, 0xf92f, 0xf979, 0xf92f, 0xf979, 0xf7de, +0xf81c, 0xf7de, 0xf81c, 0xf6a5, 0xf6d5, 0xf6a5, 0xf6d5, 0xf582, 0xf5a3, 0xf582, 0xf5a3, +0xf3d6, 0xf3e7, 0xf3d6, 0xf3e7, 0xf2de, 0xf2dd, 0xf2de, 0xf2dd, 0xf2de, 0xf2dd, 0xf2a1, +0xf28e, 0xf2a1, 0xf28e, 0xf312, 0xf2ee, 0xf312, 0xf2ee, 0xf345, 0xf310, 0xf345, 0xf310, +0xf328, 0xf2e3, 0xf328, 0xf2e3, 0xf3d4, 0xf382, 0xf3d4, 0xf382, 0xf3bd, 0xf35f, 0xf3bd, +0xf35f, 0xf3bd, 0xf35f, 0xf3cf, 0xf368, 0xf3cf, 0xf368, 0xf3fb, 0xf38e, 0xf3fb, 0xf38e, +0xf3cc, 0xf35d, 0xf3cc, 0xf35d, 0xf57c, 0xf50e, 0xf57c, 0xf50e, 0xf6f4, 0xf68a, 0xf6f4, +0xf68a, 0xf6f4, 0xf68a, 0xf763, 0xf701, 0xf763, 0xf701, 0xf89a, 0xf844, 0xf89a, 0xf844, +0xf94f, 0xf908, 0xf94f, 0xf908, 0xf9a8, 0xf974, 0xf9a8, 0xf974, 0xfa44, 0xfa25, 0xfa44, +0xfa25, 0xfa10, 0xfa07, 0xfa10, 0xfa07, 0xfa10, 0xfa07, 0xf96f, 0xf980, 0xf96f, 0xf980, +0xf953, 0xf97f, 0xf953, 0xf97f, 0xf9c9, 0xfa10, 0xf9c9, 0xfa10, 0xf985, 0xf9e7, 0xf985, +0xf9e7, 0xf867, 0xf8e4, 0xf867, 0xf8e4, 0xf77e, 0xf815, 0xf77e, 0xf815, 0xf77e, 0xf815, +0xf6fc, 0xf7ad, 0xf6fc, 0xf7ad, 0xf724, 0xf7ed, 0xf724, 0xf7ed, 0xf6e7, 0xf7c6, 0xf6e7, +0xf7c6, 0xf602, 0xf6f5, 0xf602, 0xf6f5, 0xf4e6, 0xf5eb, 0xf4e6, 0xf5eb, 0xf4e6, 0xf5eb, +0xf3ca, 0xf4de, 0xf3ca, 0xf4de, 0xf3eb, 0xf50c, 0xf3eb, 0xf50c, 0xf402, 0xf52e, 0xf402, +0xf52e, 0xf3e8, 0xf51d, 0xf3e8, 0xf51d, 0xf473, 0xf5ae, 0xf473, 0xf5ae, 0xf3d0, 0xf510, +0xf3d0, 0xf510, 0xf3d0, 0xf510, 0xf385, 0xf4c9, 0xf385, 0xf4c9, 0xf40f, 0xf555, 0xf40f, +0xf555, 0xf354, 0xf49c, 0xf354, 0xf49c, 0xf33f, 0xf488, 0xf33f, 0xf488, 0xf361, 0xf4ab, +0xf361, 0xf4ab, 0xf2f2, 0xf43c, 0xf2f2, 0xf43c, 0xf2f2, 0xf43c, 0xf46c, 0xf5b7, 0xf46c, +0xf5b7, 0xf5da, 0xf726, 0xf5da, 0xf726, 0xf639, 0xf787, 0xf639, 0xf787, 0xf63e, 0xf790, +0xf63e, 0xf790, 0xf515, 0xf66a, 0xf515, 0xf66a, 0xf515, 0xf66a, 0xf4e5, 0xf640, 0xf4e5, +0xf640, 0xf543, 0xf6a3, 0xf543, 0xf6a3, 0xf5f6, 0xf75d, 0xf5f6, 0xf75d, 0xf760, 0xf8ce, +0xf760, 0xf8ce, 0xf7c7, 0xf93d, 0xf7c7, 0xf93d, 0xf931, 0xfab0, 0xf931, 0xfab0, 0xf931, +0xfab0, 0xfa4a, 0xfbd2, 0xfa4a, 0xfbd2, 0xfa54, 0xfbe6, 0xfa54, 0xfbe6, 0xfb43, 0xfcde, +0xfb43, 0xfcde, 0xfb29, 0xfcce, 0xfb29, 0xfcce, 0xfa3d, 0xfbeb, 0xfa3d, 0xfbeb, 0xf98e, +0xfb45, 0xf98e, 0xfb45, 0xf98e, 0xfb45, 0xf949, 0xfb08, 0xf949, 0xfb08, 0xf8a6, 0xfa6e, +0xf8a6, 0xfa6e, 0xf79a, 0xf969, 0xf79a, 0xf969, 0xf74a, 0xf920, 0xf74a, 0xf920, 0xf666, +0xf842, 0xf666, 0xf842, 0xf666, 0xf842, 0xf51c, 0xf6fe, 0xf51c, 0xf6fe, 0xf474, 0xf65a, +0xf474, 0xf65a, 0xf3a2, 0xf58d, 0xf3a2, 0xf58d, 0xf2f6, 0xf4e4, 0xf2f6, 0xf4e4, 0xf301, +0xf4f2, 0xf301, 0xf4f2, 0xf2f9, 0xf4ec, 0xf2f9, 0xf4ec, 0xf2f9, 0xf4ec, 0xf3d1, 0xf5c7, +0xf3d1, 0xf5c7, 0xf50c, 0xf703, 0xf50c, 0xf703, 0xf54a, 0xf742, 0xf54a, 0xf742, 0xf58c, +0xf785, 0xf58c, 0xf785, 0xf444, 0xf63d, 0xf444, 0xf63d, 0xf290, 0xf48a, 0xf290, 0xf48a, +0xf290, 0xf48a, 0xf21c, 0xf415, 0xf21c, 0xf415, 0xf192, 0xf38b, 0xf192, 0xf38b, 0xf1f3, +0xf3eb, 0xf1f3, 0xf3eb, 0xf2db, 0xf4d1, 0xf2db, 0xf4d1, 0xf3c7, 0xf5bd, 0xf3c7, 0xf5bd, +0xf3c7, 0xf5bd, 0xf43d, 0xf632, 0xf43d, 0xf632, 0xf3f2, 0xf5e5, 0xf3f2, 0xf5e5, 0xf3d4, +0xf5c6, 0xf3d4, 0xf5c6, 0xf341, 0xf530, 0xf341, 0xf530, 0xf2bb, 0xf4a8, 0xf2bb, 0xf4a8, +0xf2b8, 0xf4a3, 0xf2b8, 0xf4a3, 0xf2b8, 0xf4a3, 0xf2c0, 0xf4a9, 0xf2c0, 0xf4a9, 0xf2ff, +0xf4e5, 0xf2ff, 0xf4e5, 0xf3a5, 0xf589, 0xf3a5, 0xf589, 0xf451, 0xf632, 0xf451, 0xf632, +0xf4cd, 0xf6aa, 0xf4cd, 0xf6aa, 0xf575, 0xf74e, 0xf575, 0xf74e, 0xf575, 0xf74e, 0xf5de, +0xf7b2, 0xf5de, 0xf7b2, 0xf5c4, 0xf792, 0xf5c4, 0xf792, 0xf5e3, 0xf7aa, 0xf5e3, 0xf7aa, +0xf672, 0xf831, 0xf672, 0xf831, 0xf5b8, 0xf76e, 0xf5b8, 0xf76e, 0xf5b8, 0xf76e, 0xf523, +0xf6ce, 0xf523, 0xf6ce, 0xf59a, 0xf737, 0xf59a, 0xf737, 0xf4ed, 0xf67b, 0xf4ed, 0xf67b, +0xf54a, 0xf6c6, 0xf54a, 0xf6c6, 0xf5e4, 0xf74b, 0xf5e4, 0xf74b, 0xf5b2, 0xf701, 0xf5b2, +0xf701, 0xf5b2, 0xf701, 0xf5f6, 0xf72a, 0xf5f6, 0xf72a, 0xf5a4, 0xf6b9, 0xf5a4, 0xf6b9, +0xf631, 0xf724, 0xf631, 0xf724, 0xf718, 0xf7e5, 0xf718, 0xf7e5, 0xf777, 0xf81b, 0xf777, +0xf81b, 0xf815, 0xf88c, 0xf815, 0xf88c, 0xf815, 0xf88c, 0xf8ab, 0xf8f3, 0xf8ab, 0xf8f3, +0xf9a0, 0xf9b5, 0xf9a0, 0xf9b5, 0xfad1, 0xfab1, 0xfad1, 0xfab1, 0xfbbb, 0xfb63, 0xfbbb, +0xfb63, 0xfd1f, 0xfc8f, 0xfd1f, 0xfc8f, 0xfd1f, 0xfc8f, 0xffce, 0xff03, 0xffce, 0xff03, +0x1db, 0xd5, 0x1db, 0xd5, 0x36e, 0x22d, 0x36e, 0x22d, 0x564, 0x3e9, 0x564, +0x3e9, 0x65b, 0x4a5, 0x65b, 0x4a5, 0x6ed, 0x500, 0x6ed, 0x500, 0x6ed, 0x500, +0x7d7, 0x5b5, 0x7d7, 0x5b5, 0x8d0, 0x67b, 0x8d0, 0x67b, 0x93a, 0x6b5, 0x93a, +0x6b5, 0x9cf, 0x71f, 0x9cf, 0x71f, 0xa8b, 0x7b3, 0xa8b, 0x7b3, 0xaef, 0x7f3, +0xaef, 0x7f3, 0xaef, 0x7f3, 0xb92, 0x878, 0xb92, 0x878, 0xb90, 0x85c, 0xb90, +0x85c, 0xc37, 0x8ee, 0xc37, 0x8ee, 0xd42, 0x9e7, 0xd42, 0x9e7, 0xd8e, 0xa27, +0xd8e, 0xa27, 0xd8e, 0xa27, 0xec6, 0xb57, 0xec6, 0xb57, 0xf79, 0xc07, 0xf79, +0xc07, 0xfb0, 0xc3f, 0xfb0, 0xc3f, 0x109f, 0xd32, 0x109f, 0xd32, 0x110a, 0xda5, +0x110a, 0xda5, 0x1169, 0xe10, 0x1169, 0xe10, 0x1169, 0xe10, 0x124f, 0xf04, 0x124f, +0xf04, 0x1380, 0x1047, 0x1380, 0x1047, 0x1443, 0x111f, 0x1443, 0x111f, 0x147a, 0x116e, +0x147a, 0x116e, 0x14dc, 0x11ea, 0x14dc, 0x11ea, 0x14dc, 0x11ea, 0x1517, 0x1243, 0x1517, +0x1243, 0x1533, 0x127f, 0x1533, 0x127f, 0x14ef, 0x125e, 0x14ef, 0x125e, 0x13cd, 0x1163, +0x13cd, 0x1163, 0x1243, 0x1002, 0x1243, 0x1002, 0x1104, 0xef0, 0x1104, 0xef0, 0x1104, +0xef0, 0x1074, 0xe92, 0x1074, 0xe92, 0xfe7, 0xe38, 0xfe7, 0xe38, 0xf14, 0xd9d, +0xf14, 0xd9d, 0xe8c, 0xd4f, 0xe8c, 0xd4f, 0xd94, 0xc95, 0xd94, 0xc95, 0xc90, +0xbd1, 0xc90, 0xbd1, 0xc90, 0xbd1, 0xc10, 0xb95, 0xc10, 0xb95, 0xa74, 0xa3d, +0xa74, 0xa3d, 0x929, 0x93a, 0x929, 0x93a, 0x916, 0x96f, 0x916, 0x96f, 0x84b, +0x8ec, 0x84b, 0x8ec, 0x84b, 0x8ec, 0x73c, 0x824, 0x73c, 0x824, 0x681, 0x7af, +0x681, 0x7af, 0x5c9, 0x73b, 0x5c9, 0x73b, 0x45e, 0x610, 0x45e, 0x610, 0x221, +0x40f, 0x221, 0x40f, 0x74, 0x29b, 0x74, 0x29b, 0x74, 0x29b, 0xfeda, 0x132, +0xfeda, 0x132, 0xfd3c, 0xffbf, 0xfd3c, 0xffbf, 0xfd52, 0xfff9, 0xfd52, 0xfff9, 0xfca8, +0xff6c, 0xfca8, 0xff6c, 0xfb58, 0xfe31, 0xfb58, 0xfe31, 0xfb56, 0xfe3c, 0xfb56, 0xfe3c, +0xfb56, 0xfe3c, 0xfa34, 0xfd1e, 0xfa34, 0xfd1e, 0xf947, 0xfc2f, 0xf947, 0xfc2f, 0xf87d, +0xfb5a, 0xf87d, 0xfb5a, 0xf6a7, 0xf971, 0xf6a7, 0xf971, 0xf531, 0xf7e2, 0xf531, 0xf7e2, +0xf531, 0xf7e2, 0xf460, 0xf6f2, 0xf460, 0xf6f2, 0xf46d, 0xf6db, 0xf46d, 0xf6db, 0xf421, +0xf667, 0xf421, 0xf667, 0xf42a, 0xf644, 0xf42a, 0xf644, 0xf4aa, 0xf695, 0xf4aa, 0xf695, +0xf4d9, 0xf694, 0xf4d9, 0xf694, 0xf4d9, 0xf694, 0xf4cc, 0xf655, 0xf4cc, 0xf655, 0xf45c, +0xf5b5, 0xf45c, 0xf5b5, 0xf455, 0xf57d, 0xf455, 0xf57d, 0xf45c, 0xf555, 0xf45c, 0xf555, +0xf4b3, 0xf57f, 0xf4b3, 0xf57f, 0xf5bd, 0xf65e, 0xf5bd, 0xf65e, 0xf5bd, 0xf65e, 0xf72b, +0xf7a4, 0xf72b, 0xf7a4, 0xf830, 0xf883, 0xf830, 0xf883, 0xf99e, 0xf9cd, 0xf99e, 0xf9cd, +0xfb2f, 0xfb3d, 0xfb2f, 0xfb3d, 0xfa7f, 0xfa6e, 0xfa7f, 0xfa6e, 0xfa7f, 0xfa6e, 0xf992, +0xf964, 0xf992, 0xf964, 0xf963, 0xf919, 0xf963, 0xf919, 0xf90c, 0xf8a8, 0xf90c, 0xf8a8, +0xf96c, 0xf8ec, 0xf96c, 0xf8ec, 0xfac8, 0xfa2e, 0xfac8, 0xfa2e, 0xfbbc, 0xfb08, 0xfbbc, +0xfb08, 0xfbbc, 0xfb08, 0xfbc6, 0xfaf6, 0xfbc6, 0xfaf6, 0xfc9c, 0xfbb0, 0xfc9c, 0xfbb0, +0xfe08, 0xfcfd, 0xfe08, 0xfcfd, 0xff28, 0xfdff, 0xff28, 0xfdff, 0x29, 0xfedf, 0x29, +0xfedf, 0x155, 0xffea, 0x155, 0xffea, 0x155, 0xffea, 0x244, 0xb8, 0x244, 0xb8, +0x2d6, 0x128, 0x2d6, 0x128, 0x471, 0x2a3, 0x471, 0x2a3, 0x619, 0x42b, 0x619, +0x42b, 0x6cf, 0x4c3, 0x6cf, 0x4c3, 0x6cf, 0x4c3, 0x7f4, 0x5ce, 0x7f4, 0x5ce, +0x8b5, 0x678, 0x8b5, 0x678, 0x8f0, 0x6a1, 0x8f0, 0x6a1, 0xa50, 0x7f3, 0xa50, +0x7f3, 0xb6d, 0x909, 0xb6d, 0x909, 0xb84, 0x91f, 0xb84, 0x91f, 0xb84, 0x91f, +0xbc7, 0x968, 0xbc7, 0x968, 0xbbb, 0x96a, 0xbbb, 0x96a, 0xb61, 0x925, 0xb61, +0x925, 0xb00, 0x8e1, 0xb00, 0x8e1, 0xa52, 0x857, 0xa52, 0x857, 0x9a8, 0x7d8, +0x9a8, 0x7d8, 0x9a8, 0x7d8, 0x84e, 0x6af, 0x84e, 0x6af, 0x700, 0x598, 0x700, +0x598, 0x641, 0x513, 0x641, 0x513, 0x54f, 0x45f, 0x54f, 0x45f, 0x527, 0x478, +0x527, 0x478, 0x527, 0x478, 0x4fe, 0x490, 0x4fe, 0x490, 0x46b, 0x43f, 0x46b, +0x43f, 0x3d4, 0x3e7, 0x3d4, 0x3e7, 0x38a, 0x3d9, 0x38a, 0x3d9, 0x3b4, 0x43d, +0x3b4, 0x43d, 0x3d8, 0x494, 0x3d8, 0x494, 0x3d8, 0x494, 0x440, 0x52a, 0x440, +0x52a, 0x3da, 0x4e9, 0x3da, 0x4e9, 0x34e, 0x47c, 0x34e, 0x47c, 0x34e, 0x493, +0x34e, 0x493, 0x389, 0x4dd, 0x389, 0x4dd, 0x3a0, 0x4f9, 0x3a0, 0x4f9, 0x3a0, +0x4f9, 0x34b, 0x4a1, 0x34b, 0x4a1, 0x33f, 0x48a, 0x33f, 0x48a, 0x382, 0x4bb, +0x382, 0x4bb, 0x468, 0x588, 0x468, 0x588, 0x47b, 0x57b, 0x47b, 0x57b, 0x47b, +0x57b, 0x442, 0x51d, 0x442, 0x51d, 0x42f, 0x4e0, 0x42f, 0x4e0, 0x46e, 0x4f1, +0x46e, 0x4f1, 0x621, 0x675, 0x621, 0x675, 0x7ac, 0x7cd, 0x7ac, 0x7cd, 0x9c0, +0x9ae, 0x9c0, 0x9ae, 0x9c0, 0x9ae, 0xb64, 0xb20, 0xb64, 0xb20, 0xc82, 0xc0b, +0xc82, 0xc0b, 0xdf7, 0xd50, 0xdf7, 0xd50, 0xeac, 0xdd6, 0xeac, 0xdd6, 0xf5d, +0xe5a, 0xf5d, 0xe5a, 0xfcf, 0xea2, 0xfcf, 0xea2, 0xfcf, 0xea2, 0x10a7, 0xf52, +0x10a7, 0xf52, 0x11b5, 0x103c, 0x11b5, 0x103c, 0x11f7, 0x105c, 0x11f7, 0x105c, 0x11b9, +0xfff, 0x11b9, 0xfff, 0x11a5, 0xfce, 0x11a5, 0xfce, 0x11a5, 0xfce, 0x11cd, 0xfdd, +0x11cd, 0xfdd, 0x11db, 0xfd2, 0x11db, 0xfd2, 0x1230, 0x1012, 0x1230, 0x1012, 0x123a, +0x1007, 0x123a, 0x1007, 0x127f, 0x103a, 0x127f, 0x103a, 0x1333, 0x10dd, 0x1333, 0x10dd, +0x1333, 0x10dd, 0x13e2, 0x117c, 0x13e2, 0x117c, 0x146b, 0x11f5, 0x146b, 0x11f5, 0x150d, +0x128a, 0x150d, 0x128a, 0x167d, 0x13ef, 0x167d, 0x13ef, 0x1748, 0x14b0, 0x1748, 0x14b0, +0x1765, 0x14c6, 0x1765, 0x14c6, 0x1765, 0x14c6, 0x16e5, 0x1441, 0x16e5, 0x1441, 0x15c5, +0x131f, 0x15c5, 0x131f, 0x15c4, 0x131f, 0x15c4, 0x131f, 0x1650, 0x13b0, 0x1650, 0x13b0, +0x165f, 0x13c8, 0x165f, 0x13c8, 0x165f, 0x13c8, 0x15d8, 0x134e, 0x15d8, 0x134e, 0x14f3, +0x127b, 0x14f3, 0x127b, 0x1428, 0x11c8, 0x1428, 0x11c8, 0x133e, 0x10fb, 0x133e, 0x10fb, +0x114e, 0xf2d, 0x114e, 0xf2d, 0xed0, 0xcd6, 0xed0, 0xcd6, 0xed0, 0xcd6, 0xc7a, +0xaac, 0xc7a, 0xaac, 0xac6, 0x929, 0xac6, 0x929, 0xa39, 0x8d2, 0xa39, 0x8d2, +0x902, 0x7d4, 0x902, 0x7d4, 0x78c, 0x69b, 0x78c, 0x69b, 0x78c, 0x69b, 0x6af, +0x5ff, 0x6af, 0x5ff, 0x58a, 0x51b, 0x58a, 0x51b, 0x427, 0x3fa, 0x427, 0x3fa, +0x204, 0x21a, 0x204, 0x21a, 0xff98, 0xfff1, 0xff98, 0xfff1, 0xfd3e, 0xfdd7, 0xfd3e, +0xfdd7, 0xfd3e, 0xfdd7, 0xfb83, 0xfc5a, 0xfb83, 0xfc5a, 0xf9f3, 0xfb05, 0xf9f3, 0xfb05, +0xf781, 0xf8ca, 0xf781, 0xf8ca, 0xf527, 0xf6a3, 0xf527, 0xf6a3, 0xf35d, 0xf507, 0xf35d, +0xf507, 0xf222, 0xf3f5, 0xf222, 0xf3f5, 0xf222, 0xf3f5, 0xf062, 0xf257, 0xf062, 0xf257, +0xee47, 0xf059, 0xee47, 0xf059, 0xecfc, 0xef24, 0xecfc, 0xef24, 0xebd8, 0xee11, 0xebd8, +0xee11, 0xeae1, 0xed24, 0xeae1, 0xed24, 0xeae1, 0xed24, 0xeb16, 0xed5f, 0xeb16, 0xed5f, +0xeb66, 0xedb0, 0xeb66, 0xedb0, 0xeaf7, 0xed3b, 0xeaf7, 0xed3b, 0xeb41, 0xed7d, 0xeb41, +0xed7d, 0xead4, 0xed03, 0xead4, 0xed03, 0xe9b7, 0xebd7, 0xe9b7, 0xebd7, 0xe9b7, 0xebd7, +0xea04, 0xec11, 0xea04, 0xec11, 0xeab9, 0xecb3, 0xeab9, 0xecb3, 0xeb86, 0xed69, 0xeb86, +0xed69, 0xecc9, 0xee95, 0xecc9, 0xee95, 0xee74, 0xf027, 0xee74, 0xf027, 0xef7d, 0xf118, +0xef7d, 0xf118, 0xef7d, 0xf118, 0xf025, 0xf1a6, 0xf025, 0xf1a6, 0xf0cc, 0xf235, 0xf0cc, +0xf235, 0xf0ae, 0xf1fe, 0xf0ae, 0xf1fe, 0xf0c4, 0xf1fb, 0xf0c4, 0xf1fb, 0xf139, 0xf258, +0xf139, 0xf258, 0xf139, 0xf258, 0xf1d0, 0xf2d6, 0xf1d0, 0xf2d6, 0xf1cf, 0xf2bc, 0xf1cf, +0xf2bc, 0xf1cb, 0xf29f, 0xf1cb, 0xf29f, 0xf261, 0xf31c, 0xf261, 0xf31c, 0xf275, 0xf315, +0xf275, 0xf315, 0xf28c, 0xf311, 0xf28c, 0xf311, 0xf28c, 0xf311, 0xf2d9, 0xf343, 0xf2d9, +0xf343, 0xf33c, 0xf38a, 0xf33c, 0xf38a, 0xf3cf, 0xf3ff, 0xf3cf, 0xf3ff, 0xf4f4, 0xf506, +0xf4f4, 0xf506, 0xf57f, 0xf572, 0xf57f, 0xf572, 0xf5d7, 0xf5aa, 0xf5d7, 0xf5aa, 0xf5d7, +0xf5aa, 0xf724, 0xf6d8, 0xf724, 0xf6d8, 0xf856, 0xf7eb, 0xf856, 0xf7eb, 0xfa4b, 0xf9c0, +0xfa4b, 0xf9c0, 0xfb6a, 0xfac2, 0xfb6a, 0xfac2, 0xfc59, 0xfb95, 0xfc59, 0xfb95, 0xfc59, +0xfb95, 0xfdde, 0xfd01, 0xfdde, 0xfd01, 0xfe7c, 0xfd88, 0xfe7c, 0xfd88, 0xff7c, 0xfe75, +0xff7c, 0xfe75, 0xffb9, 0xfea3, 0xffb9, 0xfea3, 0x39, 0xff1a, 0x39, 0xff1a, 0x157, +0x35, 0x157, 0x35, 0x157, 0x35, 0x1b3, 0x93, 0x1b3, 0x93, 0x215, 0xfe, +0x215, 0xfe, 0x24c, 0x145, 0x24c, 0x145, 0x241, 0x152, 0x241, 0x152, 0x268, +0x198, 0x268, 0x198, 0x299, 0x1ef, 0x299, 0x1ef, 0x299, 0x1ef, 0x1a7, 0x12c, +0x1a7, 0x12c, 0x68, 0x21, 0x68, 0x21, 0xff91, 0xff85, 0xff91, 0xff85, 0xff2e, +0xff63, 0xff2e, 0xff63, 0xfe53, 0xfecf, 0xfe53, 0xfecf, 0xfe53, 0xfecf, 0xfcbd, 0xfd84, +0xfcbd, 0xfd84, 0xfb3b, 0xfc50, 0xfb3b, 0xfc50, 0xf8f1, 0xfa56, 0xf8f1, 0xfa56, 0xf7c7, +0xf97e, 0xf7c7, 0xf97e, 0xf66f, 0xf878, 0xf66f, 0xf878, 0xf41f, 0xf679, 0xf41f, 0xf679, +0xf41f, 0xf679, 0xf2ad, 0xf555, 0xf2ad, 0xf555, 0xf09d, 0xf390, 0xf09d, 0xf390, 0xef57, +0xf290, 0xef57, 0xf290, 0xeece, 0xf247, 0xeece, 0xf247, 0xeda0, 0xf153, 0xeda0, 0xf153, +0xece3, 0xf0c8, 0xece3, 0xf0c8, 0xece3, 0xf0c8, 0xec25, 0xf036, 0xec25, 0xf036, 0xeb2c, +0xef5e, 0xeb2c, 0xef5e, 0xe9e0, 0xee2b, 0xe9e0, 0xee2b, 0xe83d, 0xec98, 0xe83d, 0xec98, +0xe715, 0xeb77, 0xe715, 0xeb77, 0xe715, 0xeb77, 0xe663, 0xeac3, 0xe663, 0xeac3, 0xe65a, +0xeab0, 0xe65a, 0xeab0, 0xe6d0, 0xeb13, 0xe6d0, 0xeb13, 0xe70e, 0xeb36, 0xe70e, 0xeb36, +0xe6e3, 0xeae9, 0xe6e3, 0xeae9, 0xe74c, 0xeb2b, 0xe74c, 0xeb2b, 0xe74c, 0xeb2b, 0xe89c, +0xec4f, 0xe89c, 0xec4f, 0xe983, 0xed04, 0xe983, 0xed04, 0xe9ec, 0xed39, 0xe9ec, 0xed39, +0xea5b, 0xed70, 0xea5b, 0xed70, 0xeb5d, 0xee39, 0xeb5d, 0xee39, 0xed02, 0xefa3, 0xed02, +0xefa3, 0xed02, 0xefa3, 0xeee5, 0xf14b, 0xeee5, 0xf14b, 0xeffd, 0xf229, 0xeffd, 0xf229, +0xf169, 0xf35b, 0xf169, 0xf35b, 0xf312, 0xf4cb, 0xf312, 0xf4cb, 0xf3c5, 0xf548, 0xf3c5, +0xf548, 0xf3c5, 0xf548, 0xf501, 0xf64e, 0xf501, 0xf64e, 0xf503, 0xf61c, 0xf503, 0xf61c, +0xf544, 0xf62b, 0xf544, 0xf62b, 0xf689, 0xf73f, 0xf689, 0xf73f, 0xf764, 0xf7ea, 0xf764, +0xf7ea, 0xf8ae, 0xf905, 0xf8ae, 0xf905, 0xf8ae, 0xf905, 0xf98d, 0xf9b5, 0xf98d, 0xf9b5, +0xfab2, 0xfaac, 0xfab2, 0xfaac, 0xfc07, 0xfbd3, 0xfc07, 0xfbd3, 0xfd1a, 0xfcb7, 0xfd1a, +0xfcb7, 0xfdcb, 0xfd38, 0xfdcb, 0xfd38, 0xfe98, 0xfdd5, 0xfe98, 0xfdd5, 0xfe98, 0xfdd5, +0xffbc, 0xfec8, 0xffbc, 0xfec8, 0x1b2, 0x8b, 0x1b2, 0x8b, 0x3ff, 0x2a4, 0x3ff, +0x2a4, 0x540, 0x3b2, 0x540, 0x3b2, 0x6b1, 0x4ef, 0x6b1, 0x4ef, 0x6b1, 0x4ef, +0x7f6, 0x600, 0x7f6, 0x600, 0x934, 0x70b, 0x934, 0x70b, 0xa4f, 0x7f6, 0xa4f, +0x7f6, 0xb88, 0x8ff, 0xb88, 0x8ff, 0xd41, 0xa8b, 0xd41, 0xa8b, 0xf2b, 0xc4c, +0xf2b, 0xc4c, 0xf2b, 0xc4c, 0x113f, 0xe3c, 0x113f, 0xe3c, 0x1203, 0xee0, 0x1203, +0xee0, 0x1220, 0xee4, 0x1220, 0xee4, 0x125a, 0xf0b, 0x125a, 0xf0b, 0x1276, 0xf1a, +0x1276, 0xf1a, 0x129f, 0xf3e, 0x129f, 0xf3e, 0x129f, 0xf3e, 0x125e, 0xf00, 0x125e, +0xf00, 0x11e7, 0xe92, 0x11e7, 0xe92, 0x11ef, 0xeab, 0x11ef, 0xeab, 0x11d4, 0xea8, +0x11d4, 0xea8, 0x1246, 0xf39, 0x1246, 0xf39, 0x1246, 0xf39, 0x12de, 0xff6, 0x12de, +0xff6, 0x1203, 0xf45, 0x1203, 0xf45, 0x117c, 0xeed, 0x117c, 0xeed, 0x10df, 0xe83, +0x10df, 0xe83, 0xf87, 0xd61, 0xf87, 0xd61, 0xe9e, 0xcb0, 0xe9e, 0xcb0, 0xe9e, +0xcb0, 0xd5b, 0xba6, 0xd5b, 0xba6, 0xbd9, 0xa5c, 0xbd9, 0xa5c, 0xac7, 0x982, +0xac7, 0x982, 0xa2a, 0x91b, 0xa2a, 0x91b, 0xa58, 0x97c, 0xa58, 0x97c, 0xa58, +0x97c, 0xa51, 0x9a4, 0xa51, 0x9a4, 0x97e, 0x8fe, 0x97e, 0x8fe, 0x856, 0x7fd, +0x856, 0x7fd, 0x743, 0x70e, 0x743, 0x70e, 0x682, 0x66c, 0x682, 0x66c, 0x5f3, +0x5f7, 0x5f3, 0x5f7, 0x5f3, 0x5f7, 0x567, 0x581, 0x567, 0x581, 0x420, 0x44d, +0x420, 0x44d, 0x335, 0x371, 0x335, 0x371, 0x290, 0x2d7, 0x290, 0x2d7, 0x1e7, +0x238, 0x1e7, 0x238, 0x1c3, 0x21c, 0x1c3, 0x21c, 0x1c3, 0x21c, 0x142, 0x1a2, +0x142, 0x1a2, 0xb4, 0x119, 0xb4, 0x119, 0xa2, 0x10d, 0xa2, 0x10d, 0x70, +0xe0, 0x70, 0xe0, 0x4, 0x7a, 0x4, 0x7a, 0x4, 0x7a, 0xdb, 0x158, +0xdb, 0x158, 0x134, 0x1b8, 0x134, 0x1b8, 0x175, 0x201, 0x175, 0x201, 0x211, +0x2a7, 0x211, 0x2a7, 0x13c, 0x1db, 0x13c, 0x1db, 0x144, 0x1ee, 0x144, 0x1ee, +0x144, 0x1ee, 0xbe, 0x171, 0xbe, 0x171, 0xffb9, 0x76, 0xffb9, 0x76, 0xff57, +0x1c, 0xff57, 0x1c, 0xfe5f, 0xff2a, 0xfe5f, 0xff2a, 0xfe72, 0xff41, 0xfe72, 0xff41, +0xfeb6, 0xff87, 0xfeb6, 0xff87, 0xfeb6, 0xff87, 0xfe9a, 0xff69, 0xfe9a, 0xff69, 0xff28, +0xfff3, 0xff28, 0xfff3, 0xff96, 0x59, 0xff96, 0x59, 0xffe9, 0xa0, 0xffe9, 0xa0, +0x8c, 0x134, 0x8c, 0x134, 0x8c, 0x134, 0x115, 0x1ab, 0x115, 0x1ab, 0xd6, +0x156, 0xd6, 0x156, 0x26, 0x8d, 0x26, 0x8d, 0x33, 0x80, 0x33, 0x80, +0x5c, 0x8c, 0x5c, 0x8c, 0x59, 0x6d, 0x59, 0x6d, 0x59, 0x6d, 0x3f, +0x37, 0x3f, 0x37, 0xff9e, 0xff7a, 0xff9e, 0xff7a, 0xff95, 0xff58, 0xff95, 0xff58, +0xffed, 0xff99, 0xffed, 0xff99, 0xff87, 0xff20, 0xff87, 0xff20, 0xfeb8, 0xfe43, 0xfeb8, +0xfe43, 0xfeb8, 0xfe43, 0xfce9, 0xfc6a, 0xfce9, 0xfc6a, 0xfba1, 0xfb1d, 0xfba1, 0xfb1d, +0xfc2d, 0xfbaa, 0xfc2d, 0xfbaa, 0xfc98, 0xfc1c, 0xfc98, 0xfc1c, 0xfd59, 0xfce9, 0xfd59, +0xfce9, 0xfd59, 0xfce9, 0xfde0, 0xfd82, 0xfde0, 0xfd82, 0xfe17, 0xfdd0, 0xfe17, 0xfdd0, +0xfe63, 0xfe36, 0xfe63, 0xfe36, 0xfdd5, 0xfdc7, 0xfdd5, 0xfdc7, 0xfd18, 0xfd2c, 0xfd18, +0xfd2c, 0xfc0c, 0xfc43, 0xfc0c, 0xfc43, 0xfc0c, 0xfc43, 0xfbb9, 0xfc15, 0xfbb9, 0xfc15, +0xfc67, 0xfce6, 0xfc67, 0xfce6, 0xfc82, 0xfd23, 0xfc82, 0xfd23, 0xfbe5, 0xfca6, 0xfbe5, +0xfca6, 0xfbaf, 0xfc8c, 0xfbaf, 0xfc8c, 0xfb37, 0xfc2c, 0xfb37, 0xfc2c, 0xfb37, 0xfc2c, +0xfaee, 0xfbf6, 0xfaee, 0xfbf6, 0xfade, 0xfbf3, 0xfade, 0xfbf3, 0xfa1b, 0xfb36, 0xfa1b, +0xfb36, 0xfa34, 0xfb4f, 0xfa34, 0xfb4f, 0xfa83, 0xfb96, 0xfa83, 0xfb96, 0xfa83, 0xfb96, +0xfb2b, 0xfc30, 0xfb2b, 0xfc30, 0xfaf3, 0xfbe4, 0xfaf3, 0xfbe4, 0xfa83, 0xfb59, 0xfa83, +0xfb59, 0xfaee, 0xfba4, 0xfaee, 0xfba4, 0xfa4b, 0xfadc, 0xfa4b, 0xfadc, 0xfa7f, 0xfae8, +0xfa7f, 0xfae8, 0xfa7f, 0xfae8, 0xfab3, 0xfaf0, 0xfab3, 0xfaf0, 0xfaf3, 0xfb03, 0xfaf3, +0xfb03, 0xfc9d, 0xfc7f, 0xfc9d, 0xfc7f, 0xfe47, 0xfdfb, 0xfe47, 0xfdfb, 0xff48, 0xfecf, +0xff48, 0xfecf, 0xffa0, 0xfefc, 0xffa0, 0xfefc, 0xffa0, 0xfefc, 0x88, 0xffbb, 0x88, +0xffbb, 0x210, 0x11e, 0x210, 0x11e, 0x2a6, 0x192, 0x2a6, 0x192, 0x2cd, 0x19c, +0x2cd, 0x19c, 0x363, 0x21a, 0x363, 0x21a, 0x363, 0x21a, 0x2f0, 0x192, 0x2f0, +0x192, 0x32f, 0x1c2, 0x32f, 0x1c2, 0x512, 0x399, 0x512, 0x399, 0x571, 0x3f0, +0x571, 0x3f0, 0x599, 0x413, 0x599, 0x413, 0x63e, 0x4b7, 0x63e, 0x4b7, 0x63e, +0x4b7, 0x607, 0x480, 0x607, 0x480, 0x69b, 0x514, 0x69b, 0x514, 0x775, 0x5f0, +0x775, 0x5f0, 0x80d, 0x68a, 0x80d, 0x68a, 0x87c, 0x6f9, 0x87c, 0x6f9, 0x936, +0x7b2, 0x936, 0x7b2, 0x936, 0x7b2, 0xa8a, 0x903, 0xa8a, 0x903, 0xb64, 0x9d8, +0xb64, 0x9d8, 0xcf6, 0xb63, 0xcf6, 0xb63, 0xe71, 0xcd5, 0xe71, 0xcd5, 0xf57, +0xdaf, 0xf57, 0xdaf, 0xf57, 0xdaf, 0x102d, 0xe76, 0x102d, 0xe76, 0x115e, 0xf98, +0x115e, 0xf98, 0x128b, 0x10b2, 0x128b, 0x10b2, 0x126f, 0x1084, 0x126f, 0x1084, 0x12f6, +0x10f9, 0x12f6, 0x10f9, 0x144f, 0x123f, 0x144f, 0x123f, 0x144f, 0x123f, 0x1578, 0x1356, +0x1578, 0x1356, 0x165d, 0x142c, 0x165d, 0x142c, 0x1743, 0x1505, 0x1743, 0x1505, 0x17b6, +0x156e, 0x17b6, 0x156e, 0x183b, 0x15ed, 0x183b, 0x15ed, 0x1844, 0x15f4, 0x1844, 0x15f4, +0x1844, 0x15f4, 0x175a, 0x150e, 0x175a, 0x150e, 0x1707, 0x14c3, 0x1707, 0x14c3, 0x162c, +0x13f4, 0x162c, 0x13f4, 0x1616, 0x13f0, 0x1616, 0x13f0, 0x163d, 0x142e, 0x163d, 0x142e, +0x163d, 0x142e, 0x158a, 0x1397, 0x158a, 0x1397, 0x14fb, 0x1329, 0x14fb, 0x1329, 0x141f, +0x1271, 0x141f, 0x1271, 0x133b, 0x11b3, 0x133b, 0x11b3, 0x1284, 0x1127, 0x1284, 0x1127, +0x1264, 0x1132, 0x1264, 0x1132, 0x1264, 0x1132, 0x11e7, 0x10e2, 0x11e7, 0x10e2, 0x110e, +0x1036, 0x110e, 0x1036, 0x105c, 0xfb0, 0x105c, 0xfb0, 0xf82, 0xf02, 0xf82, 0xf02, +0xe53, 0xdfb, 0xe53, 0xdfb, 0xd8e, 0xd5d, 0xd8e, 0xd5d, 0xd8e, 0xd5d, 0xd0b, +0xcfd, 0xd0b, 0xcfd, 0xbcb, 0xbdd, 0xbcb, 0xbdd, 0xabe, 0xaec, 0xabe, 0xaec, +0x986, 0x9cd, 0x986, 0x9cd, 0x891, 0x8ec, 0x891, 0x8ec, 0x891, 0x8ec, 0x7b5, +0x820, 0x7b5, 0x820, 0x68e, 0x705, 0x68e, 0x705, 0x5e8, 0x667, 0x5e8, 0x667, +0x4c4, 0x547, 0x4c4, 0x547, 0x3b5, 0x43b, 0x3b5, 0x43b, 0x2fe, 0x384, 0x2fe, +0x384, 0x2fe, 0x384, 0x22a, 0x2ae, 0x22a, 0x2ae, 0x15d, 0x1dd, 0x15d, 0x1dd, +0xffc4, 0x40, 0xffc4, 0x40, 0xfe30, 0xfea7, 0xfe30, 0xfea7, 0xfd09, 0xfd7c, 0xfd09, +0xfd7c, 0xfd09, 0xfd7c, 0xfcec, 0xfd5c, 0xfcec, 0xfd5c, 0xfdec, 0xfe59, 0xfdec, 0xfe59, +0xfd8c, 0xfdf8, 0xfd8c, 0xfdf8, 0xfd34, 0xfd9f, 0xfd34, 0xfd9f, 0xfd1c, 0xfd89, 0xfd1c, +0xfd89, 0xfc2b, 0xfc9b, 0xfc2b, 0xfc9b, 0xfc2b, 0xfc9b, 0xfc1a, 0xfc8f, 0xfc1a, 0xfc8f, +0xfb87, 0xfc03, 0xfb87, 0xfc03, 0xf9d6, 0xfa59, 0xf9d6, 0xfa59, 0xf906, 0xf992, 0xf906, +0xf992, 0xf89a, 0xf92f, 0xf89a, 0xf92f, 0xf797, 0xf836, 0xf797, 0xf836, 0xf797, 0xf836, +0xf61a, 0xf6c3, 0xf61a, 0xf6c3, 0xf491, 0xf543, 0xf491, 0xf543, 0xf3bf, 0xf479, 0xf3bf, +0xf479, 0xf31d, 0xf3df, 0xf31d, 0xf3df, 0xf2c2, 0xf389, 0xf2c2, 0xf389, 0xf2c2, 0xf389, +0xf1d5, 0xf2a0, 0xf1d5, 0xf2a0, 0xf0e9, 0xf1b7, 0xf0e9, 0xf1b7, 0xf195, 0xf263, 0xf195, +0xf263, 0xf2f5, 0xf3c2, 0xf2f5, 0xf3c2, 0xf465, 0xf52e, 0xf465, 0xf52e, 0xf4f4, 0xf5b8, +0xf4f4, 0xf5b8, 0xf4f4, 0xf5b8, 0xf614, 0xf6d1, 0xf614, 0xf6d1, 0xf6a0, 0xf755, 0xf6a0, +0xf755, 0xf68a, 0xf735, 0xf68a, 0xf735, 0xf722, 0xf7c4, 0xf722, 0xf7c4, 0xf747, 0xf7df, +0xf747, 0xf7df, 0xf7ce, 0xf85d, 0xf7ce, 0xf85d, 0xf7ce, 0xf85d, 0xf8f8, 0xf97f, 0xf8f8, +0xf97f, 0xfb63, 0xfbe2, 0xfb63, 0xfbe2, 0xfc51, 0xfcca, 0xfc51, 0xfcca, 0xfc42, 0xfcb8, +0xfc42, 0xfcb8, 0xfc91, 0xfd06, 0xfc91, 0xfd06, 0xfc91, 0xfd06, 0xfc5c, 0xfcd3, 0xfc5c, +0xfcd3, 0xfc2c, 0xfca7, 0xfc2c, 0xfca7, 0xfb7b, 0xfbfd, 0xfb7b, 0xfbfd, 0xfb4f, 0xfbda, +0xfb4f, 0xfbda, 0xfa6f, 0xfb07, 0xfa6f, 0xfb07, 0xfa60, 0xfb08, 0xfa60, 0xfb08, 0xfa60, +0xfb08, 0xfa74, 0xfb2e, 0xfa74, 0xfb2e, 0xfa86, 0xfb53, 0xfa86, 0xfb53, 0xfaec, 0xfbce, +0xfaec, 0xfbce, 0xf951, 0xfa4a, 0xf951, 0xfa4a, 0xf89d, 0xf9ad, 0xf89d, 0xf9ad, 0xf7de, +0xf904, 0xf7de, 0xf904, 0xf7de, 0xf904, 0xf6ec, 0xf829, 0xf6ec, 0xf829, 0xf651, 0xf7a2, +0xf651, 0xf7a2, 0xf595, 0xf6fa, 0xf595, 0xf6fa, 0xf500, 0xf677, 0xf500, 0xf677, 0xf4fe, +0xf683, 0xf4fe, 0xf683, 0xf4fe, 0xf683, 0xf5e5, 0xf775, 0xf5e5, 0xf775, 0xf5ee, 0xf787, +0xf5ee, 0xf787, 0xf657, 0xf7f5, 0xf657, 0xf7f5, 0xf631, 0xf7d0, 0xf631, 0xf7d0, 0xf5b5, +0xf751, 0xf5b5, 0xf751, 0xf5c6, 0xf75c, 0xf5c6, 0xf75c, 0xf5c6, 0xf75c, 0xf52d, 0xf6ba, +0xf52d, 0xf6ba, 0xf524, 0xf6a6, 0xf524, 0xf6a6, 0xf570, 0xf6e3, 0xf570, 0xf6e3, 0xf56b, +0xf6ce, 0xf56b, 0xf6ce, 0xf5b2, 0xf703, 0xf5b2, 0xf703, 0xf62a, 0xf768, 0xf62a, 0xf768, +0xf62a, 0xf768, 0xf677, 0xf7a2, 0xf677, 0xf7a2, 0xf6e6, 0xf7fe, 0xf6e6, 0xf7fe, 0xf7ac, +0xf8b3, 0xf7ac, 0xf8b3, 0xf844, 0xf93b, 0xf844, 0xf93b, 0xf8c2, 0xf9aa, 0xf8c2, 0xf9aa, +0xf8c2, 0xf9aa, 0xf9d2, 0xfaae, 0xf9d2, 0xfaae, 0xfa2a, 0xfafd, 0xfa2a, 0xfafd, 0xfad6, +0xfba3, 0xfad6, 0xfba3, 0xfae6, 0xfbaf, 0xfae6, 0xfbaf, 0xf9a5, 0xfa6e, 0xf9a5, 0xfa6e, +0xf9cc, 0xfa98, 0xf9cc, 0xfa98, 0xf9cc, 0xfa98, 0xf97c, 0xfa4e, 0xf97c, 0xfa4e, 0xf8e4, +0xf9bf, 0xf8e4, 0xf9bf, 0xf872, 0xf957, 0xf872, 0xf957, 0xf7f7, 0xf8e8, 0xf7f7, 0xf8e8, +0xf6fb, 0xf7fa, 0xf6fb, 0xf7fa, 0xf611, 0xf71f, 0xf611, 0xf71f, 0xf611, 0xf71f, 0xf634, +0xf74f, 0xf634, 0xf74f, 0xf57a, 0xf6a4, 0xf57a, 0xf6a4, 0xf4c6, 0xf5fc, 0xf4c6, 0xf5fc, +0xf3f9, 0xf53b, 0xf3f9, 0xf53b, 0xf368, 0xf4b3, 0xf368, 0xf4b3, 0xf368, 0xf4b3, 0xf339, +0xf48b, 0xf339, 0xf48b, 0xf333, 0xf489, 0xf333, 0xf489, 0xf2f5, 0xf44c, 0xf2f5, 0xf44c, +0xf2e3, 0xf438, 0xf2e3, 0xf438, 0xf3b1, 0xf501, 0xf3b1, 0xf501, 0xf458, 0xf5a0, 0xf458, +0xf5a0, 0xf458, 0xf5a0, 0xf535, 0xf672, 0xf535, 0xf672, 0xf4d4, 0xf605, 0xf4d4, 0xf605, +0xf48d, 0xf5ae, 0xf48d, 0xf5ae, 0xf4d2, 0xf5e4, 0xf4d2, 0xf5e4, 0xf5a5, 0xf6a5, 0xf5a5, +0xf6a5, 0xf739, 0xf827, 0xf739, 0xf827, 0xf739, 0xf827, 0xf6f4, 0xf7d1, 0xf6f4, 0xf7d1, +0xf684, 0xf74f, 0xf684, 0xf74f, 0xf6b0, 0xf76c, 0xf6b0, 0xf76c, 0xf715, 0xf7c3, 0xf715, +0xf7c3, 0xf7bc, 0xf85e, 0xf7bc, 0xf85e, 0xf7bc, 0xf85e, 0xf79e, 0xf837, 0xf79e, 0xf837, +0xf75e, 0xf7ef, 0xf75e, 0xf7ef, 0xf802, 0xf88f, 0xf802, 0xf88f, 0xf845, 0xf8d1, 0xf845, +0xf8d1, 0xf83d, 0xf8c9, 0xf83d, 0xf8c9, 0xf879, 0xf909, 0xf879, 0xf909, 0xf879, 0xf909, +0xf7e6, 0xf87a, 0xf7e6, 0xf87a, 0xf84e, 0xf8e9, 0xf84e, 0xf8e9, 0xf8c4, 0xf968, 0xf8c4, +0xf968, 0xf869, 0xf915, 0xf869, 0xf915, 0xf892, 0xf945, 0xf892, 0xf945, 0xf813, 0xf8ce, +0xf813, 0xf8ce, 0xf813, 0xf8ce, 0xf86e, 0xf92d, 0xf86e, 0xf92d, 0xf8b2, 0xf974, 0xf8b2, +0xf974, 0xf79e, 0xf861, 0xf79e, 0xf861, 0xf75b, 0xf81a, 0xf75b, 0xf81a, 0xf75a, 0xf812, +0xf75a, 0xf812, 0xf75a, 0xf812, 0xf807, 0xf8b4, 0xf807, 0xf8b4, 0xf876, 0xf912, 0xf876, +0xf912, 0xf894, 0xf91c, 0xf894, 0xf91c, 0xf895, 0xf903, 0xf895, 0xf903, 0xf879, 0xf8cb, +0xf879, 0xf8cb, 0xf99e, 0xf9ce, 0xf99e, 0xf9ce, 0xf99e, 0xf9ce, 0xf91c, 0xf926, 0xf91c, +0xf926, 0xf921, 0xf903, 0xf921, 0xf903, 0xf9b7, 0xf96d, 0xf9b7, 0xf96d, 0xfa28, 0xf9b1, +0xfa28, 0xf9b1, 0xfc99, 0xfbf4, 0xfc99, 0xfbf4, 0xfded, 0xfd19, 0xfded, 0xfd19, 0xfded, +0xfd19, 0xff74, 0xfe72, 0xff74, 0xfe72, 0x68, 0xff39, 0x68, 0xff39, 0x111, 0xffb6, +0x111, 0xffb6, 0x296, 0x112, 0x296, 0x112, 0x333, 0x188, 0x333, 0x188, 0x333, +0x188, 0x451, 0x284, 0x451, 0x284, 0x4d7, 0x2eb, 0x4d7, 0x2eb, 0x585, 0x37e, +0x585, 0x37e, 0x70d, 0x4f0, 0x70d, 0x4f0, 0x8c3, 0x692, 0x8c3, 0x692, 0x9e4, +0x7a5, 0x9e4, 0x7a5, 0x9e4, 0x7a5, 0xa3c, 0x7f2, 0xa3c, 0x7f2, 0xa47, 0x7f6, +0xa47, 0x7f6, 0xa04, 0x7ae, 0xa04, 0x7ae, 0xae2, 0x88c, 0xae2, 0x88c, 0xade, +0x889, 0xade, 0x889, 0xade, 0x889, 0xad9, 0x887, 0xad9, 0x887, 0xb99, 0x94b, +0xb99, 0x94b, 0xc00, 0x9b9, 0xc00, 0x9b9, 0xd61, 0xb20, 0xd61, 0xb20, 0xee1, +0xca8, 0xee1, 0xca8, 0xfb0, 0xd7e, 0xfb0, 0xd7e, 0xfb0, 0xd7e, 0xfb9, 0xd8f, +0xfb9, 0xd8f, 0x1078, 0xe57, 0x1078, 0xe57, 0x114e, 0xf34, 0x114e, 0xf34, 0x1128, +0xf17, 0x1128, 0xf17, 0x10c2, 0xeba, 0x10c2, 0xeba, 0x1155, 0xf58, 0x1155, 0xf58, +0x1155, 0xf58, 0x1159, 0xf67, 0x1159, 0xf67, 0x10ef, 0xf09, 0x10ef, 0xf09, 0x116c, +0xf94, 0x116c, 0xf94, 0xfe9, 0xe21, 0xfe9, 0xe21, 0xfe7, 0xe32, 0xfe7, 0xe32, +0xfe7, 0xe32, 0xfe7, 0xe48, 0xfe7, 0xe48, 0xf00, 0xd7a, 0xf00, 0xd7a, 0xee0, +0xd75, 0xee0, 0xd75, 0xd3c, 0xbf1, 0xd3c, 0xbf1, 0xca3, 0xb7b, 0xca3, 0xb7b, +0xc30, 0xb2e, 0xc30, 0xb2e, 0xc30, 0xb2e, 0xc15, 0xb3d, 0xc15, 0xb3d, 0xb6e, +0xac3, 0xb6e, 0xac3, 0xaa6, 0xa2b, 0xaa6, 0xa2b, 0xab5, 0xa6b, 0xab5, 0xa6b, +0x9c2, 0x9ad, 0x9c2, 0x9ad, 0x89f, 0x8c0, 0x89f, 0x8c0, 0x89f, 0x8c0, 0x787, +0x7df, 0x787, 0x7df, 0x6a8, 0x737, 0x6a8, 0x737, 0x53a, 0x600, 0x53a, 0x600, +0x4e7, 0x5e3, 0x4e7, 0x5e3, 0x409, 0x539, 0x409, 0x539, 0x409, 0x539, 0x21c, +0x37f, 0x21c, 0x37f, 0xbd, 0x24e, 0xbd, 0x24e, 0xff01, 0xbe, 0xff01, 0xbe, +0xfe4a, 0x2f, 0xfe4a, 0x2f, 0xfd98, 0xffa0, 0xfd98, 0xffa0, 0xfc64, 0xfe8b, 0xfc64, +0xfe8b, 0xfc64, 0xfe8b, 0xfb6d, 0xfdab, 0xfb6d, 0xfdab, 0xfa72, 0xfcc3, 0xfa72, 0xfcc3, +0xf956, 0xfbb4, 0xf956, 0xfbb4, 0xf8b3, 0xfb19, 0xf8b3, 0xfb19, 0xf7b9, 0xfa1f, 0xf7b9, +0xfa1f, 0xf62b, 0xf88b, 0xf62b, 0xf88b, 0xf62b, 0xf88b, 0xf4e3, 0xf738, 0xf4e3, 0xf738, +0xf44b, 0xf68e, 0xf44b, 0xf68e, 0xf3f8, 0xf625, 0xf3f8, 0xf625, 0xf299, 0xf4a9, 0xf299, +0xf4a9, 0xf16b, 0xf35b, 0xf16b, 0xf35b, 0xf16b, 0xf35b, 0xf0f3, 0xf2be, 0xf0f3, 0xf2be, +0xf1b0, 0xf353, 0xf1b0, 0xf353, 0xf358, 0xf4d0, 0xf358, 0xf4d0, 0xf4f0, 0xf63a, 0xf4f0, +0xf63a, 0xf5c4, 0xf6de, 0xf5c4, 0xf6de, 0xf5f1, 0xf6db, 0xf5f1, 0xf6db, 0xf5f1, 0xf6db, +0xf724, 0xf7dd, 0xf724, 0xf7dd, 0xf826, 0xf8ae, 0xf826, 0xf8ae, 0xf857, 0xf8af, 0xf857, +0xf8af, 0xf89e, 0xf8c7, 0xf89e, 0xf8c7, 0xf940, 0xf93c, 0xf940, 0xf93c, 0xf9db, 0xf9ac, +0xf9db, 0xf9ac, 0xf9db, 0xf9ac, 0xfa13, 0xf9bb, 0xfa13, 0xf9bb, 0xfa41, 0xf9c3, 0xfa41, +0xf9c3, 0xfa15, 0xf972, 0xfa15, 0xf972, 0xfa48, 0xf983, 0xfa48, 0xf983, 0xfc21, 0xfb3d, +0xfc21, 0xfb3d, 0xfc21, 0xfb3d, 0xfcdd, 0xfbdc, 0xfcdd, 0xfbdc, 0xfcb0, 0xfb94, 0xfcb0, +0xfb94, 0xfdd4, 0xfc9f, 0xfdd4, 0xfc9f, 0xfe62, 0xfd16, 0xfe62, 0xfd16, 0xffa6, 0xfe43, +0xffa6, 0xfe43, 0x11a, 0xffa2, 0x11a, 0xffa2, 0x11a, 0xffa2, 0x18a, 0xfffd, 0x18a, +0xfffd, 0x225, 0x84, 0x225, 0x84, 0x2d2, 0x11d, 0x2d2, 0x11d, 0x3e1, 0x219, +0x3e1, 0x219, 0x430, 0x255, 0x430, 0x255, 0x45c, 0x270, 0x45c, 0x270, 0x45c, +0x270, 0x582, 0x385, 0x582, 0x385, 0x6f5, 0x4e7, 0x6f5, 0x4e7, 0x877, 0x65a, +0x877, 0x65a, 0x99e, 0x775, 0x99e, 0x775, 0x9ee, 0x7ba, 0x9ee, 0x7ba, 0x9ee, +0x7ba, 0x9f3, 0x7b7, 0x9f3, 0x7b7, 0xa45, 0x806, 0xa45, 0x806, 0x9a1, 0x761, +0x9a1, 0x761, 0x8d8, 0x69c, 0x8d8, 0x69c, 0x876, 0x643, 0x876, 0x643, 0x7e6, +0x5c1, 0x7e6, 0x5c1, 0x7e6, 0x5c1, 0x817, 0x605, 0x817, 0x605, 0x800, 0x607, +0x800, 0x607, 0x822, 0x646, 0x822, 0x646, 0x7d6, 0x61d, 0x7d6, 0x61d, 0x710, +0x57f, 0x710, 0x57f, 0x781, 0x61d, 0x781, 0x61d, 0x781, 0x61d, 0x6bb, 0x587, +0x6bb, 0x587, 0x604, 0x503, 0x604, 0x503, 0x62d, 0x561, 0x62d, 0x561, 0x550, +0x4bb, 0x550, 0x4bb, 0x4b8, 0x45a, 0x4b8, 0x45a, 0x4b8, 0x45a, 0x4ad, 0x485, +0x4ad, 0x485, 0x483, 0x490, 0x483, 0x490, 0x4bc, 0x4fb, 0x4bc, 0x4fb, 0x453, +0x4c1, 0x453, 0x4c1, 0x3e2, 0x47a, 0x3e2, 0x47a, 0x3e9, 0x4a6, 0x3e9, 0x4a6, +0x3e9, 0x4a6, 0x2cd, 0x3a9, 0x2cd, 0x3a9, 0x273, 0x367, 0x273, 0x367, 0x27c, +0x382, 0x27c, 0x382, 0x2de, 0x3f0, 0x2de, 0x3f0, 0x348, 0x45e, 0x348, 0x45e, +0x3b6, 0x4c9, 0x3b6, 0x4c9, 0x3b6, 0x4c9, 0x4ef, 0x5fb, 0x4ef, 0x5fb, 0x4c8, +0x5c5, 0x4c8, 0x5c5, 0x5bb, 0x6a4, 0x5bb, 0x6a4, 0x73c, 0x80d, 0x73c, 0x80d, +0x752, 0x807, 0x752, 0x807, 0x752, 0x807, 0x7d5, 0x86a, 0x7d5, 0x86a, 0x91b, +0x98f, 0x91b, 0x98f, 0xa30, 0xa81, 0xa30, 0xa81, 0xbfd, 0xc2b, 0xbfd, 0xc2b, +0xd93, 0xd9e, 0xd93, 0xd9e, 0xdb4, 0xd9c, 0xdb4, 0xd9c, 0xdb4, 0xd9c, 0xe1f, +0xde6, 0xe1f, 0xde6, 0xe66, 0xe0e, 0xe66, 0xe0e, 0xf3b, 0xec6, 0xf3b, 0xec6, +0xfef, 0xf60, 0xfef, 0xf60, 0x1072, 0xfcb, 0x1072, 0xfcb, 0x10b3, 0xff7, 0x10b3, +0xff7, 0x10b3, 0xff7, 0x1080, 0xfb2, 0x1080, 0xfb2, 0x108e, 0xfb0, 0x108e, 0xfb0, +0x10cc, 0xfe1, 0x10cc, 0xfe1, 0x10e7, 0xff0, 0x10e7, 0xff0, 0x106f, 0xf6f, 0x106f, +0xf6f, 0x106f, 0xf6f, 0x112b, 0x1023, 0x112b, 0x1023, 0x11b6, 0x10a8, 0x11b6, 0x10a8, +0x12c0, 0x11ad, 0x12c0, 0x11ad, 0x13b3, 0x129c, 0x13b3, 0x129c, 0x1395, 0x127b, 0x1395, +0x127b, 0x137e, 0x1262, 0x137e, 0x1262, 0x137e, 0x1262, 0x13ed, 0x12d0, 0x13ed, 0x12d0, +0x1435, 0x1319, 0x1435, 0x1319, 0x1344, 0x122a, 0x1344, 0x122a, 0x12f7, 0x11e0, 0x12f7, +0x11e0, 0x11bc, 0x10aa, 0x11bc, 0x10aa, 0x11bc, 0x10aa, 0x11de, 0x10d4, 0x11de, 0x10d4, +0x11ea, 0x10ea, 0x11ea, 0x10ea, 0x10b8, 0xfc5, 0x10b8, 0xfc5, 0x1046, 0xf63, 0x1046, +0xf63, 0xf85, 0xeb6, 0xf85, 0xeb6, 0xf40, 0xe88, 0xf40, 0xe88, 0xf40, 0xe88, +0xe20, 0xd83, 0xe20, 0xd83, 0xd07, 0xc87, 0xd07, 0xc87, 0xaca, 0xa6c, 0xaca, +0xa6c, 0x947, 0x90f, 0x947, 0x90f, 0x895, 0x884, 0x895, 0x884, 0x6bf, 0x6da, +0x6bf, 0x6da, 0x6bf, 0x6da, 0x553, 0x59a, 0x553, 0x59a, 0x3a3, 0x418, 0x3a3, +0x418, 0x21c, 0x2c0, 0x21c, 0x2c0, 0xa1, 0x174, 0xa1, 0x174, 0xff6d, 0x70, +0xff6d, 0x70, 0xff6d, 0x70, 0xfd2f, 0xfe5f, 0xfd2f, 0xfe5f, 0xfb72, 0xfccd, 0xfb72, +0xfccd, 0xfaa7, 0xfc2b, 0xfaa7, 0xfc2b, 0xf8e6, 0xfa90, 0xf8e6, 0xfa90, 0xf711, 0xf8dd, +0xf711, 0xf8dd, 0xf58d, 0xf777, 0xf58d, 0xf777, 0xf58d, 0xf777, 0xf486, 0xf688, 0xf486, +0xf688, 0xf3ac, 0xf5c3, 0xf3ac, 0xf5c3, 0xf2fc, 0xf522, 0xf2fc, 0xf522, 0xf1eb, 0xf41b, +0xf1eb, 0xf41b, 0xf09f, 0xf2d3, 0xf09f, 0xf2d3, 0xefad, 0xf1e1, 0xefad, 0xf1e1, 0xefad, +0xf1e1, 0xeed1, 0xf0ff, 0xeed1, 0xf0ff, 0xede1, 0xf007, 0xede1, 0xf007, 0xed71, 0xef89, +0xed71, 0xef89, 0xecc4, 0xeecb, 0xecc4, 0xeecb, 0xed32, 0xef24, 0xed32, 0xef24, 0xed32, +0xef24, 0xedc5, 0xef9f, 0xedc5, 0xef9f, 0xed0d, 0xeece, 0xed0d, 0xeece, 0xed82, 0xef27, +0xed82, 0xef27, 0xed9c, 0xef24, 0xed9c, 0xef24, 0xedd5, 0xef3f, 0xedd5, 0xef3f, 0xeea0, +0xefec, 0xeea0, 0xefec, 0xeea0, 0xefec, 0xeefd, 0xf029, 0xeefd, 0xf029, 0xef79, 0xf087, +0xef79, 0xf087, 0xf035, 0xf124, 0xf035, 0xf124, 0xf149, 0xf21a, 0xf149, 0xf21a, 0xf26f, +0xf323, 0xf26f, 0xf323, 0xf2e4, 0xf37a, 0xf2e4, 0xf37a, 0xf2e4, 0xf37a, 0xf39e, 0xf419, +0xf39e, 0xf419, 0xf3a8, 0xf407, 0xf3a8, 0xf407, 0xf2a1, 0xf2e6, 0xf2a1, 0xf2e6, 0xf2e1, +0xf30d, 0xf2e1, 0xf30d, 0xf1ce, 0xf1e1, 0xf1ce, 0xf1e1, 0xf1ce, 0xf1e1, 0xf0ba, 0xf0b6, +0xf0ba, 0xf0b6, 0xf085, 0xf06c, 0xf085, 0xf06c, 0xf095, 0xf067, 0xf095, 0xf067, 0xf139, +0xf0f7, 0xf139, 0xf0f7, 0xf26d, 0xf219, 0xf26d, 0xf219, 0xf3d2, 0xf36d, 0xf3d2, 0xf36d, +0xf3d2, 0xf36d, 0xf425, 0xf3af, 0xf425, 0xf3af, 0xf5cb, 0xf547, 0xf5cb, 0xf547, 0xf6bd, +0xf62d, 0xf6bd, 0xf62d, 0xf7b5, 0xf71a, 0xf7b5, 0xf71a, 0xf85f, 0xf7bb, 0xf85f, 0xf7bb, +0xf89f, 0xf7f4, 0xf89f, 0xf7f4, 0xf89f, 0xf7f4, 0xfa66, 0xf9b6, 0xfa66, 0xf9b6, 0xfba7, +0xfaf4, 0xfba7, 0xfaf4, 0xfcd3, 0xfc1f, 0xfcd3, 0xfc1f, 0xfcf6, 0xfc44, 0xfcf6, 0xfc44, +0xfda4, 0xfcf6, 0xfda4, 0xfcf6, 0xfda4, 0xfcf6, 0xff14, 0xfe6c, 0xff14, 0xfe6c, 0xfff7, +0xff58, 0xfff7, 0xff58, 0xc3, 0x2f, 0xc3, 0x2f, 0x12a, 0xa4, 0x12a, 0xa4, +0xf0, 0x7a, 0xf0, 0x7a, 0x9a, 0x37, 0x9a, 0x37, 0x9a, 0x37, 0x23, +0xffd6, 0x23, 0xffd6, 0xfe61, 0xfe2c, 0xfe61, 0xfe2c, 0xfdb1, 0xfd96, 0xfdb1, 0xfd96, +0xfdda, 0xfddd, 0xfdda, 0xfddd, 0xfd24, 0xfd47, 0xfd24, 0xfd47, 0xfcf9, 0xfd40, 0xfcf9, +0xfd40, 0xfcf9, 0xfd40, 0xfb90, 0xfbfc, 0xfb90, 0xfbfc, 0xf9b1, 0xfa44, 0xf9b1, 0xfa44, +0xf98a, 0xfa47, 0xf98a, 0xfa47, 0xf848, 0xf931, 0xf848, 0xf931, 0xf732, 0xf84a, 0xf732, +0xf84a, 0xf732, 0xf84a, 0xf6a0, 0xf7e6, 0xf6a0, 0xf7e6, 0xf595, 0xf70b, 0xf595, 0xf70b, +0xf3b5, 0xf55b, 0xf3b5, 0xf55b, 0xf20d, 0xf3e4, 0xf20d, 0xf3e4, 0xf16f, 0xf375, 0xf16f, +0xf375, 0xefeb, 0xf21f, 0xefeb, 0xf21f, 0xefeb, 0xf21f, 0xefee, 0xf24d, 0xefee, 0xf24d, +0xef5d, 0xf1e5, 0xef5d, 0xf1e5, 0xee35, 0xf0e1, 0xee35, 0xf0e1, 0xee1a, 0xf0e7, 0xee1a, +0xf0e7, 0xeda1, 0xf08a, 0xeda1, 0xf08a, 0xec52, 0xef50, 0xec52, 0xef50, 0xec52, 0xef50, +0xeafb, 0xee09, 0xeafb, 0xee09, 0xea2d, 0xed44, 0xea2d, 0xed44, 0xe9b4, 0xeccc, 0xe9b4, +0xeccc, 0xeae2, 0xedf4, 0xeae2, 0xedf4, 0xeabc, 0xedc1, 0xeabc, 0xedc1, 0xeabc, 0xedc1, +0xe9ff, 0xecef, 0xe9ff, 0xecef, 0xea11, 0xece6, 0xea11, 0xece6, 0xebae, 0xee60, 0xebae, +0xee60, 0xed23, 0xefad, 0xed23, 0xefad, 0xed8c, 0xefe8, 0xed8c, 0xefe8, 0xedf9, 0xf023, +0xedf9, 0xf023, 0xedf9, 0xf023, 0xedeb, 0xefde, 0xedeb, 0xefde, 0xef85, 0xf13e, 0xef85, +0xf13e, 0xf025, 0xf1a3, 0xf025, 0xf1a3, 0xf11a, 0xf25b, 0xf11a, 0xf25b, 0xf212, 0xf317, +0xf212, 0xf317, 0xf2f2, 0xf3bb, 0xf2f2, 0xf3bb, 0xf2f2, 0xf3bb, 0xf511, 0xf5a0, 0xf511, +0xf5a0, 0xf684, 0xf6da, 0xf684, 0xf6da, 0xf70c, 0xf72e, 0xf70c, 0xf72e, 0xf76c, 0xf75c, +0xf76c, 0xf75c, 0xf8e6, 0xf8a8, 0xf8e6, 0xf8a8, 0xf8e6, 0xf8a8, 0xf970, 0xf908, 0xf970, +0xf908, 0xfaa2, 0xfa13, 0xfaa2, 0xfa13, 0xfbfa, 0xfb48, 0xfbfa, 0xfb48, 0xfc52, 0xfb81, +0xfc52, 0xfb81, 0xfd67, 0xfc78, 0xfd67, 0xfc78, 0xfe8d, 0xfd83, 0xfe8d, 0xfd83, 0xfe8d, +0xfd83, 0xff56, 0xfe32, 0xff56, 0xfe32, 0xe3, 0xffa6, 0xe3, 0xffa6, 0x294, 0x13e, +0x294, 0x13e, 0x4a3, 0x334, 0x4a3, 0x334, 0x607, 0x47d, 0x607, 0x47d, 0x698, +0x4f3, 0x698, 0x4f3, 0x698, 0x4f3, 0x890, 0x6cd, 0x890, 0x6cd, 0x8cf, 0x6ed, +0x8cf, 0x6ed, 0xb01, 0x8fd, 0xb01, 0x8fd, 0xd49, 0xb23, 0xd49, 0xb23, 0xdd4, +0xb89, 0xdd4, 0xb89, 0xdd4, 0xb89, 0xf69, 0xcf9, 0xf69, 0xcf9, 0x109b, 0xe06, +0x109b, 0xe06, 0x1250, 0xf97, 0x1250, 0xf97, 0x133f, 0x1063, 0x133f, 0x1063, 0x1504, +0x1208, 0x1504, 0x1208, 0x14eb, 0x11d3, 0x14eb, 0x11d3, 0x14eb, 0x11d3, 0x13af, 0x1080, +0x13af, 0x1080, 0x143a, 0x10f9, 0x143a, 0x10f9, 0x14ae, 0x1163, 0x14ae, 0x1163, 0x1476, +0x1126, 0x1476, 0x1126, 0x13fd, 0x10b1, 0x13fd, 0x10b1, 0x13fd, 0x10b1, 0x1317, 0xfd7, +0x1317, 0xfd7, 0x11da, 0xeae, 0x11da, 0xeae, 0x11df, 0xed0, 0x11df, 0xed0, 0x1100, +0xe15, 0x1100, 0xe15, 0xff0, 0xd30, 0xff0, 0xd30, 0xea4, 0xc16, 0xea4, 0xc16, +0xea4, 0xc16, 0xeff, 0xcaa, 0xeff, 0xcaa, 0xfe3, 0xdca, 0xfe3, 0xdca, 0xeaf, +0xcd6, 0xeaf, 0xcd6, 0xdea, 0xc52, 0xdea, 0xc52, 0xb8c, 0xa36, 0xb8c, 0xa36, +0x98e, 0x879, 0x98e, 0x879, 0x98e, 0x879, 0xa54, 0x97e, 0xa54, 0x97e, 0x92f, +0x895, 0x92f, 0x895, 0x6e9, 0x685, 0x6e9, 0x685, 0x62a, 0x5f8, 0x62a, 0x5f8, +0x489, 0x483, 0x489, 0x483, 0x489, 0x483, 0x4e5, 0x503, 0x4e5, 0x503, 0x3b1, +0x3ed, 0x3b1, 0x3ed, 0x1e2, 0x236, 0x1e2, 0x236, 0x14b, 0x1af, 0x14b, 0x1af, +0xfeee, 0xff5d, 0xfeee, 0xff5d, 0xff95, 0x9, 0xff95, 0x9, 0xff95, 0x9, 0xfebe, +0xff33, 0xfebe, 0xff33, 0xfe3b, 0xfeac, 0xfe3b, 0xfeac, 0xfe54, 0xfec0, 0xfe54, 0xfec0, +0xfdd0, 0xfe35, 0xfdd0, 0xfe35, 0xfedc, 0xff39, 0xfedc, 0xff39, 0xfdc0, 0xfe16, 0xfdc0, +0xfe16, 0xfdc0, 0xfe16, 0xfe56, 0xfea7, 0xfe56, 0xfea7, 0xfea1, 0xfeef, 0xfea1, 0xfeef, +0xfde0, 0xfe2e, 0xfde0, 0xfe2e, 0xff1c, 0xff6e, 0xff1c, 0xff6e, 0xfdfd, 0xfe55, 0xfdfd, +0xfe55, 0xfdfd, 0xfe55, 0xfdbf, 0xfe22, 0xfdbf, 0xfe22, 0xff94, 0x5, 0xff94, 0x5, +0xfe70, 0xfef3, 0xfe70, 0xfef3, 0xfeee, 0xff85, 0xfeee, 0xff85, 0xfeae, 0xff5b, 0xfeae, +0xff5b, 0xfd0f, 0xfdd2, 0xfd0f, 0xfdd2, 0xfd0f, 0xfdd2, 0xfdbf, 0xfe9a, 0xfdbf, 0xfe9a, +0xfced, 0xfddd, 0xfced, 0xfddd, 0xfda8, 0xfead, 0xfda8, 0xfead, 0xfd96, 0xfeac, 0xfd96, +0xfeac, 0xfc54, 0xfd78, 0xfc54, 0xfd78, 0xfe30, 0xff5d, 0xfe30, 0xff5d, 0xfe30, 0xff5d, +0xfe70, 0xffa2, 0xfe70, 0xffa2, 0xfdbf, 0xfef1, 0xfdbf, 0xfef1, 0xff61, 0x8d, 0xff61, +0x8d, 0xfe22, 0xff43, 0xfe22, 0xff43, 0xfcf1, 0xfe02, 0xfcf1, 0xfe02, 0xfcf1, 0xfe02, +0xfea6, 0xffa2, 0xfea6, 0xffa2, 0xfcec, 0xfdd0, 0xfcec, 0xfdd0, 0xfbc6, 0xfc8e, 0xfbc6, +0xfc8e, 0xfbb2, 0xfc5c, 0xfbb2, 0xfc5c, 0xfc12, 0xfc9c, 0xfc12, 0xfc9c, 0xfe66, 0xfed1, +0xfe66, 0xfed1, 0xfe66, 0xfed1, 0xff1e, 0xff6a, 0xff1e, 0xff6a, 0x11, 0x3f, 0x11, +0x3f, 0xfff0, 0x5, 0xfff0, 0x5, 0xffc7, 0xffc5, 0xffc7, 0xffc5, 0x130, 0x11d, +0x130, 0x11d, 0x7b, 0x5b, 0x7b, 0x5b, 0x7b, 0x5b, 0x68, 0x40, 0x68, +0x40, 0xc7, 0x9d, 0xc7, 0x9d, 0x9a, 0x74, 0x9a, 0x74, 0x12e, 0x111, +0x12e, 0x111, 0x176, 0x167, 0x176, 0x167, 0x176, 0x167, 0xc7, 0xcb, 0xc7, +0xcb, 0xa, 0x25, 0xa, 0x25, 0x15d, 0x192, 0x15d, 0x192, 0x7d, 0xcf, +0x7d, 0xcf, 0x9d, 0x10d, 0x9d, 0x10d, 0x106, 0x194, 0x106, 0x194, 0x106, +0x194, 0xff59, 0x5, 0xff59, 0x5, 0xffff, 0xc7, 0xffff, 0xc7, 0xfe1a, 0xfefe, +0xfe1a, 0xfefe, 0xfdf4, 0xfef0, 0xfdf4, 0xfef0, 0xfea9, 0xffba, 0xfea9, 0xffba, 0xfd87, +0xfeaa, 0xfd87, 0xfeaa, 0xfd87, 0xfeaa, 0xfd1b, 0xfe4c, 0xfd1b, 0xfe4c, 0xfc71, 0xfdac, +0xfc71, 0xfdac, 0xfbf8, 0xfd3a, 0xfbf8, 0xfd3a, 0xfc56, 0xfd9a, 0xfc56, 0xfd9a, 0xfdfd, +0xff3f, 0xfdfd, 0xff3f, 0xfdfd, 0xff3f, 0xfc8c, 0xfdca, 0xfc8c, 0xfdca, 0xfd3e, 0xfe74, +0xfd3e, 0xfe74, 0xfefa, 0x27, 0xfefa, 0x27, 0xfe9d, 0xffbd, 0xfe9d, 0xffbd, 0xfefe, +0x10, 0xfefe, 0x10, 0xfdb7, 0xfeb8, 0xfdb7, 0xfeb8, 0xfdb7, 0xfeb8, 0xfc96, 0xfd86, +0xfc96, 0xfd86, 0xfcd5, 0xfdb2, 0xfcd5, 0xfdb2, 0xfecd, 0xff97, 0xfecd, 0xff97, 0xf, +0xc5, 0xf, 0xc5, 0xffd9, 0x7a, 0xffd9, 0x7a, 0x6c, 0xf6, 0x6c, 0xf6, +0x6c, 0xf6, 0x242, 0x2b5, 0x242, 0x2b5, 0x2eb, 0x346, 0x2eb, 0x346, 0x3bd, +0x3fe, 0x3bd, 0x3fe, 0x348, 0x36d, 0x348, 0x36d, 0x12c, 0x135, 0x12c, 0x135, +0x12c, 0x135, 0x258, 0x243, 0x258, 0x243, 0x2bc, 0x287, 0x2bc, 0x287, 0x3f4, +0x39d, 0x3f4, 0x39d, 0x5d0, 0x556, 0x5d0, 0x556, 0x5af, 0x511, 0x5af, 0x511, +0x676, 0x5b2, 0x676, 0x5b2, 0x676, 0x5b2, 0x8b4, 0x7c8, 0x8b4, 0x7c8, 0x95d, +0x84a, 0x95d, 0x84a, 0x9fc, 0x8c0, 0x9fc, 0x8c0, 0xb7b, 0xa17, 0xb7b, 0xa17, +0xa5d, 0x8d1, 0xa5d, 0x8d1, 0xb81, 0x9ce, 0xb81, 0x9ce, 0xb81, 0x9ce, 0xc6b, +0xa92, 0xc6b, 0xa92, 0xd3b, 0xb3d, 0xd3b, 0xb3d, 0xfe6, 0xdc5, 0xfe6, 0xdc5, +0x1035, 0xdf4, 0x1035, 0xdf4, 0x10b3, 0xe53, 0x10b3, 0xe53, 0x10b3, 0xe53, 0x1275, +0xff9, 0x1275, 0xff9, 0x1338, 0x10a2, 0x1338, 0x10a2, 0x1450, 0x11a2, 0x1450, 0x11a2, +0x1639, 0x1374, 0x1639, 0x1374, 0x148e, 0x11b5, 0x148e, 0x11b5, 0x13c6, 0x10da, 0x13c6, +0x10da, 0x13c6, 0x10da, 0x1467, 0x116b, 0x1467, 0x116b, 0x1487, 0x117a, 0x1487, 0x117a, +0x14d6, 0x11bb, 0x14d6, 0x11bb, 0x1388, 0x105f, 0x1388, 0x105f, 0x140d, 0x10d7, 0x140d, +0x10d7, 0x13ef, 0x10ac, 0x13ef, 0x10ac, 0x13ef, 0x10ac, 0x134d, 0xfff, 0x134d, 0xfff, +0x14b5, 0x115d, 0x14b5, 0x115d, 0x15a8, 0x1247, 0x15a8, 0x1247, 0x163c, 0x12d4, 0x163c, +0x12d4, 0x1848, 0x14dc, 0x1848, 0x14dc, 0x1848, 0x14dc, 0x1943, 0x15d6, 0x1943, 0x15d6, +0x1898, 0x152d, 0x1898, 0x152d, 0x1846, 0x14e3, 0x1846, 0x14e3, 0x176e, 0x1417, 0x176e, +0x1417, 0x17cb, 0x1486, 0x17cb, 0x1486, 0x178b, 0x145e, 0x178b, 0x145e, 0x178b, 0x145e, +0x1708, 0x13fb, 0x1708, 0x13fb, 0x1707, 0x1421, 0x1707, 0x1421, 0x16ba, 0x1402, 0x16ba, +0x1402, 0x1689, 0x1406, 0x1689, 0x1406, 0x1531, 0x12ec, 0x1531, 0x12ec, 0x1531, 0x12ec, +0x1447, 0x1246, 0x1447, 0x1246, 0x127d, 0x10c8, 0x127d, 0x10c8, 0x102a, 0xec6, 0x102a, +0xec6, 0xdb2, 0xca4, 0xdb2, 0xca4, 0xb51, 0xa9d, 0xb51, 0xa9d, 0x93d, 0x8e7, +0x93d, 0x8e7, 0x93d, 0x8e7, 0x61f, 0x627, 0x61f, 0x627, 0x489, 0x4f0, 0x489, +0x4f0, 0x36e, 0x432, 0x36e, 0x432, 0x186, 0x2a5, 0x186, 0x2a5, 0x3d, 0x1b3, +0x3d, 0x1b3, 0xff35, 0xfd, 0xff35, 0xfd, 0xff35, 0xfd, 0xfc7c, 0xfe8f, 0xfc7c, +0xfe8f, 0xf9e7, 0xfc3e, 0xf9e7, 0xfc3e, 0xf778, 0xfa0c, 0xf778, 0xfa0c, 0xf37e, 0xf646, +0xf37e, 0xf646, 0xf14c, 0xf43f, 0xf14c, 0xf43f, 0xf14c, 0xf43f, 0xf00a, 0xf31f, 0xf00a, +0xf31f, 0xef01, 0xf230, 0xef01, 0xf230, 0xed6c, 0xf0ac, 0xed6c, 0xf0ac, 0xeaf2, 0xee3b, +0xeaf2, 0xee3b, 0xe8fc, 0xec46, 0xe8fc, 0xec46, 0xe7df, 0xeb23, 0xe7df, 0xeb23, 0xe7df, +0xeb23, 0xe753, 0xea8c, 0xe753, 0xea8c, 0xe5fe, 0xe926, 0xe5fe, 0xe926, 0xe49f, 0xe7b1, +0xe49f, 0xe7b1, 0xe396, 0xe68f, 0xe396, 0xe68f, 0xe499, 0xe775, 0xe499, 0xe775, 0xe626, +0xe8e2, 0xe626, 0xe8e2, 0xe626, 0xe8e2, 0xe716, 0xe9b0, 0xe716, 0xe9b0, 0xe79e, 0xea14, +0xe79e, 0xea14, 0xe7de, 0xea2e, 0xe7de, 0xea2e, 0xea11, 0xec39, 0xea11, 0xec39, 0xebc2, +0xedc1, 0xebc2, 0xedc1, 0xebc2, 0xedc1, 0xecc4, 0xee97, 0xecc4, 0xee97, 0xede3, 0xef89, +0xede3, 0xef89, 0xeed1, 0xf047, 0xeed1, 0xf047, 0xf137, 0xf27b, 0xf137, 0xf27b, 0xf4c2, +0xf5d0, 0xf4c2, 0xf5d0, 0xf5ad, 0xf684, 0xf5ad, 0xf684, 0xf5ad, 0xf684, 0xf5dc, 0xf679, +0xf5dc, 0xf679, 0xf7c8, 0xf828, 0xf7c8, 0xf828, 0xf957, 0xf979, 0xf957, 0xf979, 0xfb91, +0xfb73, 0xfb91, 0xfb73, 0xfd07, 0xfca9, 0xfd07, 0xfca9, 0xfcf8, 0xfc5b, 0xfcf8, 0xfc5b, +0xfcf8, 0xfc5b, 0xfda4, 0xfcc9, 0xfda4, 0xfcc9, 0xffc0, 0xfeaa, 0xffc0, 0xfeaa, 0x83, +0xff36, 0x83, 0xff36, 0x1d7, 0x59, 0x1d7, 0x59, 0x349, 0x1a0, 0x349, 0x1a0, +0x349, 0x1a0, 0x37a, 0x1af, 0x37a, 0x1af, 0x504, 0x321, 0x504, 0x321, 0x480, +0x290, 0x480, 0x290, 0x424, 0x232, 0x424, 0x232, 0x3ce, 0x1e7, 0x3ce, 0x1e7, +0x457, 0x287, 0x457, 0x287, 0x457, 0x287, 0x4a1, 0x2f4, 0x4a1, 0x2f4, 0x250, +0xd3, 0x250, 0xd3, 0x2dd, 0x19b, 0x2dd, 0x19b, 0x36c, 0x270, 0x36c, 0x270, +0x362, 0x2b4, 0x362, 0x2b4, 0x335, 0x2dd, 0x335, 0x2dd, 0x335, 0x2dd, 0xb3, +0xb6, 0xb3, 0xb6, 0xfdae, 0xfe0f, 0xfdae, 0xfe0f, 0xfbcd, 0xfc8d, 0xfbcd, 0xfc8d, +0xf974, 0xfa92, 0xf974, 0xfa92, 0xf7a6, 0xf91d, 0xf7a6, 0xf91d, 0xf7a6, 0xf91d, 0xf769, +0xf935, 0xf769, 0xf935, 0xf64d, 0xf867, 0xf64d, 0xf867, 0xf604, 0xf860, 0xf604, 0xf860, +0xf5ac, 0xf841, 0xf5ac, 0xf841, 0xf3c9, 0xf68b, 0xf3c9, 0xf68b, 0xf1a7, 0xf48a, 0xf1a7, +0xf48a, 0xf1a7, 0xf48a, 0xf17d, 0xf474, 0xf17d, 0xf474, 0xf159, 0xf457, 0xf159, 0xf457, +0xef1f, 0xf218, 0xef1f, 0xf218, 0xede5, 0xf0d0, 0xede5, 0xf0d0, 0xed26, 0xeff9, 0xed26, +0xeff9, 0xeda1, 0xf055, 0xeda1, 0xf055, 0xeda1, 0xf055, 0xeece, 0xf15c, 0xeece, 0xf15c, +0xee78, 0xf0dc, 0xee78, 0xf0dc, 0xeefa, 0xf133, 0xeefa, 0xf133, 0xee87, 0xf096, 0xee87, +0xf096, 0xee2c, 0xf012, 0xee2c, 0xf012, 0xee2c, 0xf012, 0xf09a, 0xf25c, 0xf09a, 0xf25c, +0xf118, 0xf2bb, 0xf118, 0xf2bb, 0xf1d3, 0xf35d, 0xf1d3, 0xf35d, 0xf282, 0xf3fb, 0xf282, +0xf3fb, 0xf24c, 0xf3bb, 0xf24c, 0xf3bb, 0xf3ab, 0xf518, 0xf3ab, 0xf518, 0xf3ab, 0xf518, +0xf1c8, 0xf339, 0xf1c8, 0xf339, 0xf02f, 0xf1ab, 0xf02f, 0xf1ab, 0xefda, 0xf165, 0xefda, +0xf165, 0xee6b, 0xf00a, 0xee6b, 0xf00a, 0xee93, 0xf046, 0xee93, 0xf046, 0xeeb6, 0xf07c, +0xeeb6, 0xf07c, 0xeeb6, 0xf07c, 0xef00, 0xf0d7, 0xef00, 0xf0d7, 0xeec1, 0xf0a4, 0xeec1, +0xf0a4, 0xee87, 0xf06f, 0xee87, 0xf06f, 0xef82, 0xf167, 0xef82, 0xf167, 0xee9a, 0xf073, +0xee9a, 0xf073, 0xee9a, 0xf073, 0xede4, 0xefa6, 0xede4, 0xefa6, 0xef59, 0xf0f8, 0xef59, +0xf0f8, 0xf0b3, 0xf224, 0xf0b3, 0xf224, 0xf1d7, 0xf310, 0xf1d7, 0xf310, 0xf2ec, 0xf3e1, +0xf2ec, 0xf3e1, 0xf58e, 0xf637, 0xf58e, 0xf637, 0xf58e, 0xf637, 0xf88b, 0xf8e0, 0xf88b, +0xf8e0, 0xf9d6, 0xf9d2, 0xf9d6, 0xf9d2, 0xfbfc, 0xfb9d, 0xfbfc, 0xfb9d, 0xfe2f, 0xfd74, +0xfe2f, 0xfd74, 0xff40, 0xfe2d, 0xff40, 0xfe2d, 0xfb, 0xff93, 0xfb, 0xff93, 0xfb, +0xff93, 0x34f, 0x19c, 0x34f, 0x19c, 0x4b9, 0x2c5, 0x4b9, 0x2c5, 0x42b, 0x203, +0x42b, 0x203, 0x459, 0x20c, 0x459, 0x20c, 0x708, 0x4a8, 0x708, 0x4a8, 0x708, +0x4a8, 0x721, 0x4be, 0x721, 0x4be, 0x5f8, 0x3a3, 0x5f8, 0x3a3, 0x65d, 0x429, +0x65d, 0x429, 0x57e, 0x37c, 0x57e, 0x37c, 0x4cf, 0x30f, 0x4cf, 0x30f, 0x304, +0x194, 0x304, 0x194, 0x304, 0x194, 0xa9, 0xff95, 0xa9, 0xff95, 0x19, 0xff6b, +0x19, 0xff6b, 0xfe71, 0xfe30, 0xfe71, 0xfe30, 0xfd85, 0xfdb4, 0xfd85, 0xfdb4, 0xfe57, +0xfef7, 0xfe57, 0xfef7, 0xfce4, 0xfdf3, 0xfce4, 0xfdf3, 0xfce4, 0xfdf3, 0xfb42, 0xfcb9, +0xfb42, 0xfcb9, 0xfb02, 0xfcda, 0xfb02, 0xfcda, 0xf9be, 0xfbeb, 0xf9be, 0xfbeb, 0xf727, +0xf99c, 0xf727, 0xf99c, 0xf446, 0xf6f4, 0xf446, 0xf6f4, 0xf446, 0xf6f4, 0xf455, 0xf72b, +0xf455, 0xf72b, 0xf46c, 0xf75a, 0xf46c, 0xf75a, 0xf3ef, 0xf6e3, 0xf3ef, 0xf6e3, 0xf56c, +0xf855, 0xf56c, 0xf855, 0xf5ef, 0xf8bb, 0xf5ef, 0xf8bb, 0xf6e6, 0xf986, 0xf6e6, 0xf986, +0xf6e6, 0xf986, 0xf7f3, 0xfa59, 0xf7f3, 0xfa59, 0xf85d, 0xfa7c, 0xf85d, 0xfa7c, 0xfa04, +0xfbd2, 0xfa04, 0xfbd2, 0xfb0f, 0xfc82, 0xfb0f, 0xfc82, 0xfbd2, 0xfce6, 0xfbd2, 0xfce6, +0xfbd2, 0xfce6, 0xfec9, 0xff79, 0xfec9, 0xff79, 0x127, 0x171, 0x127, 0x171, 0x240, +0x224, 0x240, 0x224, 0x522, 0x4a3, 0x522, 0x4a3, 0x718, 0x637, 0x718, 0x637, +0x77d, 0x641, 0x77d, 0x641, 0x77d, 0x641, 0x8cd, 0x73c, 0x8cd, 0x73c, 0xa0a, +0x82a, 0xa0a, 0x82a, 0xae2, 0x8b8, 0xae2, 0x8b8, 0xccd, 0xa62, 0xccd, 0xa62, +0xd72, 0xacc, 0xd72, 0xacc, 0xe23, 0xb4a, 0xe23, 0xb4a, 0xe23, 0xb4a, 0x1024, +0xd1d, 0x1024, 0xd1d, 0xfa8, 0xc78, 0xfa8, 0xc78, 0x10fc, 0xda9, 0x10fc, 0xda9, +0x1313, 0xfa1, 0x1313, 0xfa1, 0x128e, 0xf01, 0x128e, 0xf01, 0x128e, 0xf01, 0x1407, +0x1062, 0x1407, 0x1062, 0x156f, 0x11b6, 0x156f, 0x11b6, 0x1556, 0x118d, 0x1556, 0x118d, +0x1724, 0x134e, 0x1724, 0x134e, 0x184e, 0x146d, 0x184e, 0x146d, 0x18c2, 0x14dc, 0x18c2, +0x14dc, 0x18c2, 0x14dc, 0x1a0d, 0x1624, 0x1a0d, 0x1624, 0x19de, 0x15f9, 0x19de, 0x15f9, +0x1a56, 0x167b, 0x1a56, 0x167b, 0x1a1b, 0x1650, 0x1a1b, 0x1650, 0x19e4, 0x1631, 0x19e4, +0x1631, 0x1aba, 0x1726, 0x1aba, 0x1726, 0x1aba, 0x1726, 0x1a1a, 0x16af, 0x1a1a, 0x16af, +0x19ff, 0x16c5, 0x19ff, 0x16c5, 0x17eb, 0x14ec, 0x17eb, 0x14ec, 0x160e, 0x1353, 0x160e, +0x1353, 0x1577, 0x1308, 0x1577, 0x1308, 0x1577, 0x1308, 0x1297, 0x107e, 0x1297, 0x107e, +0xf8c, 0xdcf, 0xf8c, 0xdcf, 0xcb5, 0xb5a, 0xcb5, 0xb5a, 0xa9b, 0x9a8, 0xa9b, +0x9a8, 0x8f4, 0x86c, 0x8f4, 0x86c, 0x70d, 0x6f3, 0x70d, 0x6f3, 0x70d, 0x6f3, +0x593, 0x5e4, 0x593, 0x5e4, 0x3b5, 0x472, 0x3b5, 0x472, 0x1ca, 0x2ed, 0x1ca, +0x2ed, 0xffc6, 0x14b, 0xffc6, 0x14b, 0xfc3f, 0xfe1e, 0xfc3f, 0xfe1e, 0xf865, 0xfa96, +0xf865, 0xfa96, 0xf865, 0xfa96, 0xf535, 0xf7ae, 0xf535, 0xf7ae, 0xf37c, 0xf632, 0xf37c, +0xf632, 0xf1d3, 0xf4bb, 0xf1d3, 0xf4bb, 0xee2a, 0xf138, 0xee2a, 0xf138, 0xec56, 0xef7f, +0xec56, 0xef7f, 0xec56, 0xef7f, 0xebb7, 0xeeef, 0xebb7, 0xeeef, 0xec27, 0xef63, 0xec27, +0xef63, 0xecb2, 0xefe9, 0xecb2, 0xefe9, 0xea61, 0xed89, 0xea61, 0xed89, 0xe96d, 0xec80, +0xe96d, 0xec80, 0xe906, 0xebfc, 0xe906, 0xebfc, 0xe906, 0xebfc, 0xe8ad, 0xeb81, 0xe8ad, +0xeb81, 0xe922, 0xebd1, 0xe922, 0xebd1, 0xe94c, 0xebd3, 0xe94c, 0xebd3, 0xeae5, 0xed44, +0xeae5, 0xed44, 0xed2d, 0xef63, 0xed2d, 0xef63, 0xeec5, 0xf0d2, 0xeec5, 0xf0d2, 0xeec5, +0xf0d2, 0xeebd, 0xf0a3, 0xeebd, 0xf0a3, 0xeec8, 0xf089, 0xeec8, 0xf089, 0xeff9, 0xf198, +0xeff9, 0xf198, 0xf107, 0xf284, 0xf107, 0xf284, 0xf1ae, 0xf30b, 0xf1ae, 0xf30b, 0xf1ae, +0xf30b, 0xf1ed, 0xf32b, 0xf1ed, 0xf32b, 0xf241, 0xf361, 0xf241, 0xf361, 0xf35b, 0xf45d, +0xf35b, 0xf45d, 0xf516, 0xf5f9, 0xf516, 0xf5f9, 0xf613, 0xf6d4, 0xf613, 0xf6d4, 0xf746, +0xf7e4, 0xf746, 0xf7e4, 0xf746, 0xf7e4, 0xf867, 0xf8de, 0xf867, 0xf8de, 0xf93d, 0xf98b, +0xf93d, 0xf98b, 0xfb37, 0xfb58, 0xfb37, 0xfb58, 0xfc6f, 0xfc5f, 0xfc6f, 0xfc5f, 0xfd3f, +0xfcfb, 0xfd3f, 0xfcfb, 0xff4d, 0xfed2, 0xff4d, 0xfed2, 0xff4d, 0xfed2, 0x135, 0x81, +0x135, 0x81, 0x327, 0x239, 0x327, 0x239, 0x596, 0x46c, 0x596, 0x46c, 0x749, +0x5e5, 0x749, 0x5e5, 0x94b, 0x7ae, 0x94b, 0x7ae, 0x94b, 0x7ae, 0xb46, 0x975, +0xb46, 0x975, 0xd5c, 0xb5b, 0xd5c, 0xb5b, 0xfad, 0xd82, 0xfad, 0xd82, 0x1160, +0xf12, 0x1160, 0xf12, 0x134e, 0x10e5, 0x134e, 0x10e5, 0x142c, 0x11b2, 0x142c, 0x11b2, +0x142c, 0x11b2, 0x14f3, 0x1271, 0x14f3, 0x1271, 0x1586, 0x1307, 0x1586, 0x1307, 0x152a, +0x12b8, 0x152a, 0x12b8, 0x145f, 0x1204, 0x145f, 0x1204, 0x1346, 0x110a, 0x1346, 0x110a, +0x1249, 0x1037, 0x1249, 0x1037, 0x1249, 0x1037, 0x118e, 0xfad, 0x118e, 0xfad, 0x1121, +0xf78, 0x1121, 0xf78, 0xf10, 0xda5, 0xf10, 0xda5, 0xdf9, 0xcd0, 0xdf9, 0xcd0, +0xd7c, 0xc97, 0xd7c, 0xc97, 0xd7c, 0xc97, 0xc47, 0xba8, 0xc47, 0xba8, 0xb4e, +0xaf4, 0xb4e, 0xaf4, 0x927, 0x911, 0x927, 0x911, 0x6e6, 0x711, 0x6e6, 0x711, +0x4ab, 0x513, 0x4ab, 0x513, 0x320, 0x3c0, 0x320, 0x3c0, 0x320, 0x3c0, 0x146, +0x219, 0x146, 0x219, 0x7, 0x107, 0x7, 0x107, 0xff70, 0x96, 0xff70, 0x96, +0xfedd, 0x23, 0xfedd, 0x23, 0xfef5, 0x55, 0xfef5, 0x55, 0xfdd3, 0xff45, 0xfdd3, +0xff45, 0xfdd3, 0xff45, 0xfd7c, 0xfefb, 0xfd7c, 0xfefb, 0xfde6, 0xff6d, 0xfde6, 0xff6d, +0xfe18, 0xffa1, 0xfe18, 0xffa1, 0xfd99, 0xff1f, 0xfd99, 0xff1f, 0xfd28, 0xfea7, 0xfd28, +0xfea7, 0xfd28, 0xfea7, 0xfe1a, 0xff8e, 0xfe1a, 0xff8e, 0xff56, 0xba, 0xff56, 0xba, +0x73, 0x1c5, 0x73, 0x1c5, 0x101, 0x23d, 0x101, 0x23d, 0x1b8, 0x2db, 0x1b8, +0x2db, 0x2cd, 0x3d3, 0x2cd, 0x3d3, 0x2cd, 0x3d3, 0x3bb, 0x4a2, 0x3bb, 0x4a2, +0x3fd, 0x4c0, 0x3fd, 0x4c0, 0x53d, 0x5d9, 0x53d, 0x5d9, 0x6b9, 0x72b, 0x6b9, +0x72b, 0x789, 0x7cd, 0x789, 0x7cd, 0x951, 0x963, 0x951, 0x963, 0x951, 0x963, +0x9d9, 0x9b5, 0x9d9, 0x9b5, 0xa3b, 0x9df, 0xa3b, 0x9df, 0xc07, 0xb6f, 0xc07, +0xb6f, 0xd02, 0xc2c, 0xd02, 0xc2c, 0xdad, 0xc98, 0xdad, 0xc98, 0xdad, 0xc98, +0xeed, 0xd98, 0xeed, 0xd98, 0x10c3, 0xf2f, 0x10c3, 0xf2f, 0x13bd, 0x11ea, 0x13bd, +0x11ea, 0x156f, 0x1361, 0x156f, 0x1361, 0x16c9, 0x1485, 0x16c9, 0x1485, 0x1933, 0x16be, +0x1933, 0x16be, 0x1933, 0x16be, 0x1a4e, 0x17af, 0x1a4e, 0x17af, 0x1acd, 0x180c, 0x1acd, +0x180c, 0x1a77, 0x179e, 0x1a77, 0x179e, 0x1b0e, 0x1826, 0x1b0e, 0x1826, 0x1c66, 0x197a, +0x1c66, 0x197a, 0x1c66, 0x197a, 0x1c54, 0x196f, 0x1c54, 0x196f, 0x1cc1, 0x19ee, 0x1cc1, +0x19ee, 0x1d36, 0x1a7f, 0x1d36, 0x1a7f, 0x1cd4, 0x1a44, 0x1cd4, 0x1a44, 0x1c57, 0x19f8, +0x1c57, 0x19f8, 0x1bb9, 0x1991, 0x1bb9, 0x1991, 0x1bb9, 0x1991, 0x197d, 0x1795, 0x197d, +0x1795, 0x1710, 0x156c, 0x1710, 0x156c, 0x1595, 0x1437, 0x1595, 0x1437, 0x1365, 0x1250, +0x1365, 0x1250, 0x1253, 0x1186, 0x1253, 0x1186, 0x11a4, 0x111c, 0x11a4, 0x111c, 0x11a4, +0x111c, 0x1060, 0x1019, 0x1060, 0x1019, 0x1003, 0xff7, 0x1003, 0xff7, 0xed6, 0xeff, +0xed6, 0xeff, 0xd3a, 0xd8f, 0xd3a, 0xd8f, 0xba9, 0xc21, 0xba9, 0xc21, 0xba9, +0xc21, 0x926, 0x9b7, 0x926, 0x9b7, 0x667, 0x708, 0x667, 0x708, 0x3b9, 0x460, +0x3b9, 0x460, 0x13f, 0x1e5, 0x13f, 0x1e5, 0xfef5, 0xff93, 0xfef5, 0xff93, 0xfce8, +0xfd77, 0xfce8, 0xfd77, 0xfce8, 0xfd77, 0xfb13, 0xfb8f, 0xfb13, 0xfb8f, 0xfa0e, 0xfa73, +0xfa0e, 0xfa73, 0xf91c, 0xf96b, 0xf91c, 0xf96b, 0xf7d6, 0xf80e, 0xf7d6, 0xf80e, 0xf7a9, +0xf7cd, 0xf7a9, 0xf7cd, 0xf6e6, 0xf6fb, 0xf6e6, 0xf6fb, 0xf6e6, 0xf6fb, 0xf5b5, 0xf5bf, +0xf5b5, 0xf5bf, 0xf5a2, 0xf5a8, 0xf5a2, 0xf5a8, 0xf495, 0xf49f, 0xf495, 0xf49f, 0xf378, +0xf38d, 0xf378, 0xf38d, 0xf3d3, 0xf3fc, 0xf3d3, 0xf3fc, 0xf3d3, 0xf3fc, 0xf3bb, 0xf3ff, +0xf3bb, 0xf3ff, 0xf2ba, 0xf320, 0xf2ba, 0xf320, 0xf183, 0xf211, 0xf183, 0xf211, 0xf084, +0xf13e, 0xf084, 0xf13e, 0xef86, 0xf070, 0xef86, 0xf070, 0xef1b, 0xf035, 0xef1b, 0xf035, +0xef1b, 0xf035, 0xee08, 0xef51, 0xee08, 0xef51, 0xec65, 0xedda, 0xec65, 0xedda, 0xebde, +0xed7c, 0xebde, 0xed7c, 0xea95, 0xec55, 0xea95, 0xec55, 0xea34, 0xec0d, 0xea34, 0xec0d, +0xea29, 0xec13, 0xea29, 0xec13, 0xea29, 0xec13, 0xe982, 0xeb72, 0xe982, 0xeb72, 0xe9c0, +0xebab, 0xe9c0, 0xebab, 0xea46, 0xec22, 0xea46, 0xec22, 0xeb3b, 0xecfc, 0xeb3b, 0xecfc, +0xeb7c, 0xed18, 0xeb7c, 0xed18, 0xeb7c, 0xed18, 0xec21, 0xed90, 0xec21, 0xed90, 0xee19, +0xef52, 0xee19, 0xef52, 0xf0c7, 0xf1c5, 0xf0c7, 0xf1c5, 0xf336, 0xf3f4, 0xf336, 0xf3f4, +0xf3de, 0xf45b, 0xf3de, 0xf45b, 0xf3f4, 0xf42f, 0xf3f4, 0xf42f, 0xf3f4, 0xf42f, 0xf5a9, +0xf5a5, 0xf5a9, 0xf5a5, 0xf77b, 0xf73d, 0xf77b, 0xf73d, 0xf851, 0xf7e0, 0xf851, 0xf7e0, +0xf997, 0xf8fc, 0xf997, 0xf8fc, 0xf9a8, 0xf8eb, 0xf9a8, 0xf8eb, 0xfa6a, 0xf997, 0xfa6a, +0xf997, 0xfa6a, 0xf997, 0xfcd5, 0xfbf7, 0xfcd5, 0xfbf7, 0xfcdc, 0xfc00, 0xfcdc, 0xfc00, +0xfb53, 0xfa84, 0xfb53, 0xfa84, 0xfaba, 0xfa04, 0xfaba, 0xfa04, 0xfa41, 0xf9ad, 0xfa41, +0xf9ad, 0xfa41, 0xf9ad, 0xf998, 0xf930, 0xf998, 0xf930, 0xf88e, 0xf859, 0xf88e, 0xf859, +0xf79c, 0xf79f, 0xf79c, 0xf79f, 0xf7eb, 0xf829, 0xf7eb, 0xf829, 0xf848, 0xf8c2, 0xf848, +0xf8c2, 0xf886, 0xf93d, 0xf886, 0xf93d, 0xf886, 0xf93d, 0xf888, 0xf978, 0xf888, 0xf978, +0xf8f2, 0xfa16, 0xf8f2, 0xfa16, 0xf86b, 0xf9bd, 0xf86b, 0xf9bd, 0xf702, 0xf87b, 0xf702, +0xf87b, 0xf77e, 0xf914, 0xf77e, 0xf914, 0xf769, 0xf914, 0xf769, 0xf914, 0xf769, 0xf914, +0xf6cd, 0xf883, 0xf6cd, 0xf883, 0xf754, 0xf90d, 0xf754, 0xf90d, 0xf782, 0xf935, 0xf782, +0xf935, 0xf70a, 0xf8af, 0xf70a, 0xf8af, 0xf74a, 0xf8db, 0xf74a, 0xf8db, 0xf74a, 0xf8db, +0xf750, 0xf8c8, 0xf750, 0xf8c8, 0xf671, 0xf7cd, 0xf671, 0xf7cd, 0xf5a8, 0xf6e6, 0xf5a8, +0xf6e6, 0xf5ab, 0xf6cb, 0xf5ab, 0xf6cb, 0xf686, 0xf78a, 0xf686, 0xf78a, 0xf6b3, 0xf79e, +0xf6b3, 0xf79e, 0xf6b3, 0xf79e, 0xf6ef, 0xf7c6, 0xf6ef, 0xf7c6, 0xf7dd, 0xf8a5, 0xf7dd, +0xf8a5, 0xf8e7, 0xf9a7, 0xf8e7, 0xf9a7, 0xf911, 0xf9cf, 0xf911, 0xf9cf, 0xf86d, 0xf931, +0xf86d, 0xf931, 0xf779, 0xf84a, 0xf779, 0xf84a, 0xf779, 0xf84a, 0xf5f3, 0xf6d7, 0xf5f3, +0xf6d7, 0xf4e9, 0xf5e4, 0xf4e9, 0xf5e4, 0xf446, 0xf55d, 0xf446, 0xf55d, 0xf37b, 0xf4b0, +0xf37b, 0xf4b0, 0xf30f, 0xf464, 0xf30f, 0xf464, 0xf30f, 0xf464, 0xf2cb, 0xf440, 0xf2cb, +0xf440, 0xf294, 0xf426, 0xf294, 0xf426, 0xf276, 0xf421, 0xf276, 0xf421, 0xf0d1, 0xf291, +0xf0d1, 0xf291, 0xef87, 0xf155, 0xef87, 0xf155, 0xef43, 0xf118, 0xef43, 0xf118, 0xef43, +0xf118, 0xee91, 0xf065, 0xee91, 0xf065, 0xee27, 0xeff1, 0xee27, 0xeff1, 0xee56, 0xf00e, +0xee56, 0xf00e, 0xef8b, 0xf129, 0xef8b, 0xf129, 0xf066, 0xf1e3, 0xf066, 0xf1e3, 0xf1f3, +0xf348, 0xf1f3, 0xf348, 0xf1f3, 0xf348, 0xf3c8, 0xf4f0, 0xf3c8, 0xf4f0, 0xf472, 0xf56a, +0xf472, 0xf56a, 0xf551, 0xf617, 0xf551, 0xf617, 0xf69d, 0xf730, 0xf69d, 0xf730, 0xf74f, +0xf7b0, 0xf74f, 0xf7b0, 0xf74f, 0xf7b0, 0xf72b, 0xf75e, 0xf72b, 0xf75e, 0xf88a, 0xf894, +0xf88a, 0xf894, 0xfa27, 0xfa0d, 0xfa27, 0xfa0d, 0xfb5e, 0xfb27, 0xfb5e, 0xfb27, 0xfc97, +0xfc4d, 0xfc97, 0xfc4d, 0xfc86, 0xfc2f, 0xfc86, 0xfc2f, 0xfc86, 0xfc2f, 0xfc35, 0xfbdc, +0xfc35, 0xfbdc, 0xfbd2, 0xfb7f, 0xfbd2, 0xfb7f, 0xfb80, 0xfb3b, 0xfb80, 0xfb3b, 0xfb3b, +0xfb0b, 0xfb3b, 0xfb0b, 0xfae0, 0xfacb, 0xfae0, 0xfacb, 0xfae7, 0xfaf2, 0xfae7, 0xfaf2, +0xfae7, 0xfaf2, 0xfb09, 0xfb37, 0xfb09, 0xfb37, 0xfb2f, 0xfb82, 0xfb2f, 0xfb82, 0xfb0d, +0xfb84, 0xfb0d, 0xfb84, 0xfa74, 0xfb0e, 0xfa74, 0xfb0e, 0xf9cf, 0xfa88, 0xf9cf, 0xfa88, +0xf9cf, 0xfa88, 0xf8fe, 0xf9d0, 0xf8fe, 0xf9d0, 0xf7d8, 0xf8bd, 0xf7d8, 0xf8bd, 0xf7d0, +0xf8c0, 0xf7d0, 0xf8c0, 0xf983, 0xfa77, 0xf983, 0xfa77, 0xfa69, 0xfb57, 0xfa69, 0xfb57, +0xfabb, 0xfb9b, 0xfabb, 0xfb9b, 0xfabb, 0xfb9b, 0xfc36, 0xfcff, 0xfc36, 0xfcff, 0xfdf9, +0xfea2, 0xfdf9, 0xfea2, 0xff90, 0x13, 0xff90, 0x13, 0x4c, 0xa2, 0x4c, 0xa2, +0xed, 0x111, 0xed, 0x111, 0xed, 0x111, 0x288, 0x277, 0x288, 0x277, 0x4d1, +0x48a, 0x4d1, 0x48a, 0x708, 0x68a, 0x708, 0x68a, 0x8d1, 0x81c, 0x8d1, 0x81c, +0xafb, 0xa13, 0xafb, 0xa13, 0xccd, 0xbb6, 0xccd, 0xbb6, 0xccd, 0xbb6, 0xda9, +0xc68, 0xda9, 0xc68, 0xe33, 0xcce, 0xe33, 0xcce, 0xe47, 0xcc3, 0xe47, 0xcc3, +0xdfb, 0xc60, 0xdfb, 0xc60, 0xe7c, 0xcd1, 0xe7c, 0xcd1, 0xf69, 0xdb6, 0xf69, +0xdb6, 0xf69, 0xdb6, 0xf7f, 0xdc8, 0xf7f, 0xdc8, 0xfa4, 0xdef, 0xfa4, 0xdef, +0x106b, 0xebe, 0x106b, 0xebe, 0x1045, 0xea3, 0x1045, 0xea3, 0xfba, 0xe25, 0xfba, +0xe25, 0xfba, 0xe25, 0xfab, 0xe26, 0xfab, 0xe26, 0xfbd, 0xe47, 0xfbd, 0xe47, +0x101a, 0xeb4, 0x101a, 0xeb4, 0x1005, 0xeac, 0x1005, 0xeac, 0xfe6, 0xe99, 0xfe6, +0xe99, 0xf79, 0xe35, 0xf79, 0xe35, 0xf79, 0xe35, 0xefd, 0xdbf, 0xefd, 0xdbf, +0xf1f, 0xde5, 0xf1f, 0xde5, 0xfac, 0xe73, 0xfac, 0xe73, 0x1020, 0xee5, 0x1020, +0xee5, 0xf37, 0xdf9, 0xf37, 0xdf9, 0xe3d, 0xcfb, 0xe3d, 0xcfb, 0xe3d, 0xcfb, +0xd91, 0xc4a, 0xd91, 0xc4a, 0xd05, 0xbbb, 0xd05, 0xbbb, 0xccf, 0xb84, 0xccf, +0xb84, 0xca7, 0xb5d, 0xca7, 0xb5d, 0xc52, 0xb0e, 0xc52, 0xb0e, 0xc52, 0xb0e, +0xbff, 0xac6, 0xbff, 0xac6, 0xb95, 0xa6c, 0xb95, 0xa6c, 0xa52, 0x93f, 0xa52, +0x93f, 0x8e2, 0x7eb, 0x8e2, 0x7eb, 0x694, 0x5bf, 0x694, 0x5bf, 0x454, 0x3a8, +0x454, 0x3a8, 0x454, 0x3a8, 0x327, 0x2a9, 0x327, 0x2a9, 0x20d, 0x1c1, 0x20d, +0x1c1, 0x1ba, 0x1a5, 0x1ba, 0x1a5, 0x27c, 0x2a1, 0x27c, 0x2a1, 0x337, 0x397, +0x337, 0x397, 0x321, 0x3bc, 0x321, 0x3bc, 0x321, 0x3bc, 0x22f, 0x303, 0x22f, +0x303, 0x5f, 0x16a, 0x5f, 0x16a, 0xfe0d, 0xff4b, 0xfe0d, 0xff4b, 0xfb88, 0xfcf3, +0xfb88, 0xfcf3, 0xf96e, 0xfb00, 0xf96e, 0xfb00, 0xf96e, 0xfb00, 0xf7a0, 0xf951, 0xf7a0, +0xf951, 0xf611, 0xf7d9, 0xf611, 0xf7d9, 0xf53a, 0xf710, 0xf53a, 0xf710, 0xf4fd, 0xf6d9, +0xf4fd, 0xf6d9, 0xf514, 0xf6ec, 0xf514, 0xf6ec, 0xf574, 0xf740, 0xf574, 0xf740, 0xf574, +0xf740, 0xf596, 0xf74d, 0xf596, 0xf74d, 0xf4a8, 0xf643, 0xf4a8, 0xf643, 0xf474, 0xf5ec, +0xf474, 0xf5ec, 0xf4f7, 0xf647, 0xf4f7, 0xf647, 0xf5d8, 0xf6fb, 0xf5d8, 0xf6fb, 0xf6cf, +0xf7c2, 0xf6cf, 0xf7c2, 0xf6cf, 0xf7c2, 0xf741, 0xf802, 0xf741, 0xf802, 0xf8ec, 0xf97a, +0xf8ec, 0xf97a, 0xfac9, 0xfb25, 0xfac9, 0xfb25, 0xfc46, 0xfc70, 0xfc46, 0xfc70, 0xfd4a, +0xfd45, 0xfd4a, 0xfd45, 0xfd4a, 0xfd45, 0xfdab, 0xfd78, 0xfdab, 0xfd78, 0xfe52, 0xfdf5, +0xfe52, 0xfdf5, 0xfe39, 0xfdb6, 0xfe39, 0xfdb6, 0xfde0, 0xfd3a, 0xfde0, 0xfd3a, 0xfe17, +0xfd51, 0xfe17, 0xfd51, 0xfe00, 0xfd1d, 0xfe00, 0xfd1d, 0xfe00, 0xfd1d, 0xfdfa, 0xfcfe, +0xfdfa, 0xfcfe, 0xfe22, 0xfd0f, 0xfe22, 0xfd0f, 0xfdff, 0xfcd7, 0xfdff, 0xfcd7, 0xfe67, +0xfd2b, 0xfe67, 0xfd2b, 0xff58, 0xfe0b, 0xff58, 0xfe0b, 0x37, 0xfed8, 0x37, 0xfed8, +0x37, 0xfed8, 0x128, 0xffb8, 0x128, 0xffb8, 0x20a, 0x89, 0x20a, 0x89, 0x2bf, +0x12d, 0x2bf, 0x12d, 0x351, 0x1af, 0x351, 0x1af, 0x41c, 0x269, 0x41c, 0x269, +0x41c, 0x269, 0x492, 0x2cf, 0x492, 0x2cf, 0x447, 0x275, 0x447, 0x275, 0x4c1, +0x2e2, 0x4c1, 0x2e2, 0x57b, 0x391, 0x57b, 0x391, 0x551, 0x35e, 0x551, 0x35e, +0x596, 0x39d, 0x596, 0x39d, 0x596, 0x39d, 0x669, 0x46f, 0x669, 0x46f, 0x681, +0x48a, 0x681, 0x48a, 0x651, 0x462, 0x651, 0x462, 0x6f0, 0x50e, 0x6f0, 0x50e, +0x697, 0x4c9, 0x697, 0x4c9, 0x491, 0x2dc, 0x491, 0x2dc, 0x491, 0x2dc, 0x253, +0xbb, 0x253, 0xbb, 0x46, 0xfed2, 0x46, 0xfed2, 0xfe70, 0xfd23, 0xfe70, 0xfd23, +0xfcd6, 0xfbb6, 0xfcd6, 0xfbb6, 0xfc23, 0xfb31, 0xfc23, 0xfb31, 0xfc23, 0xfb31, 0xfc0a, +0xfb49, 0xfc0a, 0xfb49, 0xfb98, 0xfb09, 0xfb98, 0xfb09, 0xfb25, 0xfac7, 0xfb25, 0xfac7, +0xfb29, 0xfafb, 0xfb29, 0xfafb, 0xfad8, 0xfad8, 0xfad8, 0xfad8, 0xfa7d, 0xfaa8, 0xfa7d, +0xfaa8, 0xfa7d, 0xfaa8, 0xf9fa, 0xfa4a, 0xf9fa, 0xfa4a, 0xf8e8, 0xf958, 0xf8e8, 0xf958, +0xf8a9, 0xf933, 0xf8a9, 0xf933, 0xf860, 0xf8fd, 0xf860, 0xf8fd, 0xf84c, 0xf8f4, 0xf84c, +0xf8f4, 0xf922, 0xf9d0, 0xf922, 0xf9d0, 0xf922, 0xf9d0, 0xf9c4, 0xfa6f, 0xf9c4, 0xfa6f, +0xfa78, 0xfb1a, 0xfa78, 0xfb1a, 0xfba2, 0xfc33, 0xfba2, 0xfc33, 0xfcad, 0xfd28, 0xfcad, +0xfd28, 0xfcbb, 0xfd1a, 0xfcbb, 0xfd1a, 0xfcbb, 0xfd1a, 0xfc6e, 0xfcad, 0xfc6e, 0xfcad, +0xfdc6, 0xfde0, 0xfdc6, 0xfde0, 0xffe5, 0xffd7, 0xffe5, 0xffd7, 0x12a, 0xf3, 0x12a, +0xf3, 0x358, 0x2f6, 0x358, 0x2f6, 0x58b, 0x4fc, 0x58b, 0x4fc, 0x58b, 0x4fc, +0x725, 0x66b, 0x725, 0x66b, 0x931, 0x84b, 0x931, 0x84b, 0xa8a, 0x979, 0xa8a, +0x979, 0xbcb, 0xa8f, 0xbcb, 0xa8f, 0xd4c, 0xbe6, 0xd4c, 0xbe6, 0xf01, 0xd73, +0xf01, 0xd73, 0xf01, 0xd73, 0x10d4, 0xf1e, 0x10d4, 0xf1e, 0x1250, 0x1073, 0x1250, +0x1073, 0x136e, 0x116b, 0x136e, 0x116b, 0x14ad, 0x1284, 0x14ad, 0x1284, 0x1609, 0x13ba, +0x1609, 0x13ba, 0x1609, 0x13ba, 0x16b1, 0x143c, 0x16b1, 0x143c, 0x1769, 0x14ce, 0x1769, +0x14ce, 0x1880, 0x15c0, 0x1880, 0x15c0, 0x1906, 0x1621, 0x1906, 0x1621, 0x19ad, 0x16a4, +0x19ad, 0x16a4, 0x1b75, 0x184a, 0x1b75, 0x184a, 0x1b75, 0x184a, 0x1ca8, 0x195e, 0x1ca8, +0x195e, 0x1d5b, 0x19f4, 0x1d5b, 0x19f4, 0x1ec3, 0x1b44, 0x1ec3, 0x1b44, 0x1ff6, 0x1c62, +0x1ff6, 0x1c62, 0x20c9, 0x1d29, 0x20c9, 0x1d29, 0x20c9, 0x1d29, 0x2176, 0x1dce, 0x2176, +0x1dce, 0x214a, 0x1da5, 0x214a, 0x1da5, 0x2107, 0x1d6c, 0x2107, 0x1d6c, 0x21a1, 0x1e1b, +0x21a1, 0x1e1b, 0x2159, 0x1df1, 0x2159, 0x1df1, 0x208c, 0x1d4e, 0x208c, 0x1d4e, 0x208c, +0x1d4e, 0x1fda, 0x1cd1, 0x1fda, 0x1cd1, 0x1eb9, 0x1bef, 0x1eb9, 0x1bef, 0x1d22, 0x1aa2, +0x1d22, 0x1aa2, 0x1b0b, 0x18de, 0x1b0b, 0x18de, 0x18b6, 0x16e4, 0x18b6, 0x16e4, 0x152e, +0x13be, 0x152e, 0x13be, 0x152e, 0x13be, 0x1201, 0x10fa, 0x1201, 0x10fa, 0x1018, 0xf7e, +0x1018, 0xf7e, 0xdd3, 0xda7, 0xdd3, 0xda7, 0xb28, 0xb6a, 0xb28, 0xb6a, 0x903, +0x9b1, 0x903, 0x9b1, 0x903, 0x9b1, 0x784, 0x89c, 0x784, 0x89c, 0x5aa, 0x724, +0x5aa, 0x724, 0x340, 0x516, 0x340, 0x516, 0xd4, 0x2fc, 0xd4, 0x2fc, 0xfe3e, +0xad, 0xfe3e, 0xad, 0xfb45, 0xfdf1, 0xfb45, 0xfdf1, 0xfb45, 0xfdf1, 0xf908, 0xfbe4, +0xf908, 0xfbe4, 0xf726, 0xfa26, 0xf726, 0xfa26, 0xf4bc, 0xf7d4, 0xf4bc, 0xf7d4, 0xf300, +0xf623, 0xf300, 0xf623, 0xf264, 0xf587, 0xf264, 0xf587, 0xf1ba, 0xf4d3, 0xf1ba, 0xf4d3, +0xf1ba, 0xf4d3, 0xf159, 0xf45d, 0xf159, 0xf45d, 0xf16c, 0xf454, 0xf16c, 0xf454, 0xf0b9, +0xf37e, 0xf0b9, 0xf37e, 0xf025, 0xf2c2, 0xf025, 0xf2c2, 0xefb6, 0xf227, 0xefb6, 0xf227, +0xefb6, 0xf227, 0xefd9, 0xf21c, 0xefd9, 0xf21c, 0xf0c0, 0xf2d4, 0xf0c0, 0xf2d4, 0xf120, +0xf306, 0xf120, 0xf306, 0xf174, 0xf32e, 0xf174, 0xf32e, 0xf17b, 0xf30b, 0xf17b, 0xf30b, +0xf0f4, 0xf25e, 0xf0f4, 0xf25e, 0xf0f4, 0xf25e, 0xf06c, 0xf1b2, 0xf06c, 0xf1b2, 0xf00e, +0xf134, 0xf00e, 0xf134, 0xf021, 0xf12a, 0xf021, 0xf12a, 0xf14b, 0xf23a, 0xf14b, 0xf23a, +0xf27e, 0xf356, 0xf27e, 0xf356, 0xf39b, 0xf45d, 0xf39b, 0xf45d, 0xf39b, 0xf45d, 0xf4dc, +0xf58a, 0xf4dc, 0xf58a, 0xf511, 0xf5ab, 0xf511, 0xf5ab, 0xf5a9, 0xf62e, 0xf5a9, 0xf62e, +0xf661, 0xf6d0, 0xf661, 0xf6d0, 0xf69b, 0xf6f2, 0xf69b, 0xf6f2, 0xf69b, 0xf6f2, 0xf6dc, +0xf719, 0xf6dc, 0xf719, 0xf744, 0xf765, 0xf744, 0xf765, 0xf91e, 0xf921, 0xf91e, 0xf921, +0xfb29, 0xfb0c, 0xfb29, 0xfb0c, 0xfcbd, 0xfc7f, 0xfcbd, 0xfc7f, 0xff1e, 0xfebe, 0xff1e, +0xfebe, 0xff1e, 0xfebe, 0xbe, 0x3d, 0xbe, 0x3d, 0x165, 0xc4, 0x165, 0xc4, +0x2c4, 0x207, 0x2c4, 0x207, 0x371, 0x29c, 0x371, 0x29c, 0x343, 0x25c, 0x343, +0x25c, 0x36c, 0x279, 0x36c, 0x279, 0x36c, 0x279, 0x3d0, 0x2db, 0x3d0, 0x2db, +0x3d7, 0x2e8, 0x3d7, 0x2e8, 0x2fd, 0x21f, 0x2fd, 0x21f, 0x316, 0x254, 0x316, +0x254, 0x37a, 0x2df, 0x37a, 0x2df, 0x37a, 0x2df, 0x2a0, 0x238, 0x2a0, 0x238, +0x119, 0xee, 0x119, 0xee, 0xfef1, 0xff0d, 0xfef1, 0xff0d, 0xfcea, 0xfd57, 0xfcea, +0xfd57, 0xfbba, 0xfc7e, 0xfbba, 0xfc7e, 0xfacd, 0xfbef, 0xfacd, 0xfbef, 0xfacd, 0xfbef, +0xf93e, 0xfac3, 0xf93e, 0xfac3, 0xf794, 0xf97d, 0xf794, 0xf97d, 0xf696, 0xf8e3, 0xf696, +0xf8e3, 0xf678, 0xf928, 0xf678, 0xf928, 0xf5af, 0xf8be, 0xf5af, 0xf8be, 0xf45d, 0xf7c4, +0xf45d, 0xf7c4, 0xf45d, 0xf7c4, 0xf383, 0xf73b, 0xf383, 0xf73b, 0xf1be, 0xf5bd, 0xf1be, +0xf5bd, 0xf024, 0xf460, 0xf024, 0xf460, 0xef10, 0xf37d, 0xef10, 0xf37d, 0xee64, 0xf2f7, +0xee64, 0xf2f7, 0xee64, 0xf2f7, 0xee1e, 0xf2ca, 0xee1e, 0xf2ca, 0xedd0, 0xf289, 0xedd0, +0xf289, 0xede2, 0xf29c, 0xede2, 0xf29c, 0xedd3, 0xf284, 0xedd3, 0xf284, 0xed70, 0xf20d, +0xed70, 0xf20d, 0xec75, 0xf0f6, 0xec75, 0xf0f6, 0xec75, 0xf0f6, 0xec26, 0xf083, 0xec26, +0xf083, 0xece7, 0xf11b, 0xece7, 0xf11b, 0xee16, 0xf21c, 0xee16, 0xf21c, 0xefc4, 0xf39a, +0xefc4, 0xf39a, 0xf193, 0xf537, 0xf193, 0xf537, 0xf2eb, 0xf65c, 0xf2eb, 0xf65c, 0xf2eb, +0xf65c, 0xf397, 0xf6d6, 0xf397, 0xf6d6, 0xf466, 0xf775, 0xf466, 0xf775, 0xf4e4, 0xf7c5, +0xf4e4, 0xf7c5, 0xf43d, 0xf6f1, 0xf43d, 0xf6f1, 0xf28c, 0xf517, 0xf28c, 0xf517, 0xf28c, +0xf517, 0xf1f3, 0xf456, 0xf1f3, 0xf456, 0xf2ac, 0xf4e8, 0xf2ac, 0xf4e8, 0xf22f, 0xf445, +0xf22f, 0xf445, 0xf10e, 0xf2fe, 0xf10e, 0xf2fe, 0xf0e6, 0xf2b0, 0xf0e6, 0xf2b0, 0xf151, +0xf2f4, 0xf151, 0xf2f4, 0xf151, 0xf2f4, 0xf14f, 0xf2c7, 0xf14f, 0xf2c7, 0xf154, 0xf2a1, +0xf154, 0xf2a1, 0xf17b, 0xf298, 0xf17b, 0xf298, 0xf195, 0xf27e, 0xf195, 0xf27e, 0xf2b7, +0xf369, 0xf2b7, 0xf369, 0xf497, 0xf50f, 0xf497, 0xf50f, 0xf497, 0xf50f, 0xf551, 0xf58d, +0xf551, 0xf58d, 0xf61f, 0xf61c, 0xf61f, 0xf61c, 0xf83c, 0xf7f9, 0xf83c, 0xf7f9, 0xfa1f, +0xf99d, 0xfa1f, 0xf99d, 0xfb9a, 0xfada, 0xfb9a, 0xfada, 0xfb9a, 0xfada, 0xfc4a, 0xfb4f, +0xfc4a, 0xfb4f, 0xfcb1, 0xfb81, 0xfcb1, 0xfb81, 0xfdac, 0xfc4c, 0xfdac, 0xfc4c, 0xfeff, +0xfd78, 0xfeff, 0xfd78, 0xff76, 0xfdd1, 0xff76, 0xfdd1, 0xff45, 0xfd8c, 0xff45, 0xfd8c, +0xff45, 0xfd8c, 0xffad, 0xfdeb, 0xffad, 0xfdeb, 0xff56, 0xfd98, 0xff56, 0xfd98, 0xfecf, +0xfd21, 0xfecf, 0xfd21, 0xfdde, 0xfc4b, 0xfdde, 0xfc4b, 0xfc18, 0xfaad, 0xfc18, 0xfaad, +0xfaa1, 0xf969, 0xfaa1, 0xf969, 0xfaa1, 0xf969, 0xf9ef, 0xf8f2, 0xf9ef, 0xf8f2, 0xfa09, +0xf950, 0xfa09, 0xf950, 0xf993, 0xf924, 0xf993, 0xf924, 0xf873, 0xf853, 0xf873, 0xf853, +0xf763, 0xf793, 0xf763, 0xf793, 0xf763, 0xf793, 0xf6ca, 0xf74c, 0xf6ca, 0xf74c, 0xf5b0, +0xf680, 0xf5b0, 0xf680, 0xf404, 0xf51f, 0xf404, 0xf51f, 0xf2ad, 0xf40c, 0xf2ad, 0xf40c, +0xf15b, 0xf2f7, 0xf15b, 0xf2f7, 0xf04b, 0xf21a, 0xf04b, 0xf21a, 0xf04b, 0xf21a, 0xefbb, +0xf1b4, 0xefbb, 0xf1b4, 0xef82, 0xf198, 0xef82, 0xf198, 0xeed5, 0xf0fd, 0xeed5, 0xf0fd, +0xee87, 0xf0b6, 0xee87, 0xf0b6, 0xeea0, 0xf0ca, 0xeea0, 0xf0ca, 0xeea0, 0xf0ca, 0xee9c, +0xf0b7, 0xee9c, 0xf0b7, 0xef07, 0xf109, 0xef07, 0xf109, 0xef82, 0xf162, 0xef82, 0xf162, +0xf000, 0xf1b6, 0xf000, 0xf1b6, 0xf053, 0xf1db, 0xf053, 0xf1db, 0xf163, 0xf2b8, 0xf163, +0xf2b8, 0xf163, 0xf2b8, 0xf38a, 0xf4a9, 0xf38a, 0xf4a9, 0xf5a2, 0xf689, 0xf5a2, 0xf689, +0xf764, 0xf812, 0xf764, 0xf812, 0xf9ad, 0xfa23, 0xf9ad, 0xfa23, 0xfbfe, 0xfc3e, 0xfbfe, +0xfc3e, 0xfd9f, 0xfdaa, 0xfd9f, 0xfdaa, 0xfd9f, 0xfdaa, 0xff2b, 0xff04, 0xff2b, 0xff04, +0x66, 0xe, 0x66, 0xe, 0x21f, 0x198, 0x21f, 0x198, 0x470, 0x3bd, 0x470, +0x3bd, 0x69f, 0x5c0, 0x69f, 0x5c0, 0x69f, 0x5c0, 0x85a, 0x74f, 0x85a, 0x74f, +0x9b3, 0x87d, 0x9b3, 0x87d, 0xaff, 0x99c, 0xaff, 0x99c, 0xbff, 0xa6f, 0xbff, +0xa6f, 0xd58, 0xb98, 0xd58, 0xb98, 0xe93, 0xca0, 0xe93, 0xca0, 0xe93, 0xca0, +0xf1f, 0xcf7, 0xf1f, 0xcf7, 0xffc, 0xd9e, 0xffc, 0xd9e, 0x117c, 0xee5, 0x117c, +0xee5, 0x126b, 0xf9a, 0x126b, 0xf9a, 0x13a4, 0x1099, 0x13a4, 0x1099, 0x1636, 0x12f1, +0x1636, 0x12f1, 0x1636, 0x12f1, 0x181f, 0x14a2, 0x181f, 0x14a2, 0x18f1, 0x1540, 0x18f1, +0x1540, 0x19a0, 0x15c0, 0x19a0, 0x15c0, 0x1acc, 0x16c4, 0x1acc, 0x16c4, 0x1c15, 0x17ed, +0x1c15, 0x17ed, 0x1c15, 0x17ed, 0x1cf4, 0x18b5, 0x1cf4, 0x18b5, 0x1d91, 0x1946, 0x1d91, +0x1946, 0x1dc9, 0x197f, 0x1dc9, 0x197f, 0x1dcc, 0x198f, 0x1dcc, 0x198f, 0x1dad, 0x198b, +0x1dad, 0x198b, 0x1d21, 0x1927, 0x1d21, 0x1927, 0x1d21, 0x1927, 0x1bc7, 0x1801, 0x1bc7, +0x1801, 0x1a13, 0x168e, 0x1a13, 0x168e, 0x1869, 0x1531, 0x1869, 0x1531, 0x16e8, 0x1408, +0x16e8, 0x1408, 0x15a8, 0x1328, 0x15a8, 0x1328, 0x146b, 0x1252, 0x146b, 0x1252, 0x146b, +0x1252, 0x134a, 0x119d, 0x134a, 0x119d, 0x1258, 0x111a, 0x1258, 0x111a, 0x111a, 0x104d, +0x111a, 0x104d, 0xf3a, 0xedc, 0xf3a, 0xedc, 0xd86, 0xd94, 0xd86, 0xd94, 0xd86, +0xd94, 0xbed, 0xc62, 0xbed, 0xc62, 0x956, 0xa2b, 0x956, 0xa2b, 0x642, 0x76f, +0x642, 0x76f, 0x3ff, 0x57b, 0x3ff, 0x57b, 0x22d, 0x3ef, 0x22d, 0x3ef, 0x25, +0x222, 0x25, 0x222, 0x25, 0x222, 0xfe29, 0x55, 0xfe29, 0x55, 0xfca1, 0xfef3, +0xfca1, 0xfef3, 0xfbe7, 0xfe55, 0xfbe7, 0xfe55, 0xfb1c, 0xfd9d, 0xfb1c, 0xfd9d, 0xf9be, +0xfc49, 0xf9be, 0xfc49, 0xf83a, 0xfac7, 0xf83a, 0xfac7, 0xf83a, 0xfac7, 0xf6ab, 0xf934, +0xf6ab, 0xf934, 0xf539, 0xf7ba, 0xf539, 0xf7ba, 0xf4c2, 0xf737, 0xf4c2, 0xf737, 0xf477, +0xf6dc, 0xf477, 0xf6dc, 0xf387, 0xf5d9, 0xf387, 0xf5d9, 0xf387, 0xf5d9, 0xf33a, 0xf578, +0xf33a, 0xf578, 0xf2eb, 0xf515, 0xf2eb, 0xf515, 0xf2d3, 0xf4e8, 0xf2d3, 0xf4e8, 0xf2f2, +0xf4f0, 0xf2f2, 0xf4f0, 0xf25b, 0xf443, 0xf25b, 0xf443, 0xf1a8, 0xf378, 0xf1a8, 0xf378, +0xf1a8, 0xf378, 0xf0f5, 0xf2ab, 0xf0f5, 0xf2ab, 0xf06b, 0xf205, 0xf06b, 0xf205, 0xefdc, +0xf157, 0xefdc, 0xf157, 0xef85, 0xf0dd, 0xef85, 0xf0dd, 0xefae, 0xf0df, 0xefae, 0xf0df, +0xf085, 0xf18b, 0xf085, 0xf18b, 0xf085, 0xf18b, 0xf1e6, 0xf2bb, 0xf1e6, 0xf2bb, 0xf377, +0xf415, 0xf377, 0xf415, 0xf4c4, 0xf525, 0xf4c4, 0xf525, 0xf684, 0xf6a2, 0xf684, 0xf6a2, +0xf917, 0xf8ef, 0xf917, 0xf8ef, 0xf917, 0xf8ef, 0xfa7e, 0xfa0a, 0xfa7e, 0xfa0a, 0xfc49, +0xfb86, 0xfc49, 0xfb86, 0xfe17, 0xfd03, 0xfe17, 0xfd03, 0xfe84, 0xfd1e, 0xfe84, 0xfd1e, +0xff62, 0xfdac, 0xff62, 0xfdac, 0x4c, 0xfe48, 0x4c, 0xfe48, 0x4c, 0xfe48, 0x12b, +0xfedd, 0x12b, 0xfedd, 0x18f, 0xfefd, 0x18f, 0xfefd, 0x1e6, 0xff17, 0x1e6, 0xff17, +0x36f, 0x6d, 0x36f, 0x6d, 0x52b, 0x200, 0x52b, 0x200, 0x632, 0x2e9, 0x632, +0x2e9, 0x632, 0x2e9, 0x720, 0x3c5, 0x720, 0x3c5, 0x81f, 0x4be, 0x81f, 0x4be, +0x7f7, 0x49d, 0x7f7, 0x49d, 0x718, 0x3d0, 0x718, 0x3d0, 0x616, 0x2ec, 0x616, +0x2ec, 0x616, 0x2ec, 0x51d, 0x21b, 0x51d, 0x21b, 0x45d, 0x18b, 0x45d, 0x18b, +0x3ed, 0x154, 0x3ed, 0x154, 0x45c, 0x200, 0x45c, 0x200, 0x462, 0x248, 0x462, +0x248, 0x3f6, 0x220, 0x3f6, 0x220, 0x3f6, 0x220, 0x459, 0x2c7, 0x459, 0x2c7, +0x4f5, 0x3a5, 0x4f5, 0x3a5, 0x465, 0x355, 0x465, 0x355, 0x2c5, 0x1ef, 0x2c5, +0x1ef, 0x1e5, 0x143, 0x1e5, 0x143, 0x162, 0xee, 0x162, 0xee, 0x162, 0xee, +0xdc, 0x8e, 0xdc, 0x8e, 0x4e, 0x1e, 0x4e, 0x1e, 0xff8d, 0xff75, 0xff8d, +0xff75, 0xff7e, 0xff76, 0xff7e, 0xff76, 0xffe6, 0xffe7, 0xffe6, 0xffe7, 0xffe6, 0xffe7, +0xcf, 0xd3, 0xcf, 0xd3, 0x121, 0x124, 0x121, 0x124, 0x83, 0x7f, 0x83, +0x7f, 0xffff, 0xfff3, 0xffff, 0xfff3, 0x4f, 0x3b, 0x4f, 0x3b, 0x1c0, 0x1a2, +0x1c0, 0x1a2, 0x1c0, 0x1a2, 0x2c2, 0x29b, 0x2c2, 0x29b, 0x396, 0x368, 0x396, +0x368, 0x508, 0x4d5, 0x508, 0x4d5, 0x658, 0x622, 0x658, 0x622, 0x72f, 0x6f8, +0x72f, 0x6f8, 0x847, 0x813, 0x847, 0x813, 0x847, 0x813, 0x92e, 0x8fe, 0x92e, +0x8fe, 0x964, 0x93b, 0x964, 0x93b, 0x9d2, 0x9af, 0x9d2, 0x9af, 0xa47, 0xa2c, +0xa47, 0xa2c, 0xa77, 0xa60, 0xa77, 0xa60, 0xa77, 0xa60, 0xa55, 0xa40, 0xa55, +0xa40, 0xaa2, 0xa8d, 0xaa2, 0xa8d, 0xac8, 0xaad, 0xac8, 0xaad, 0xac5, 0xa9e, +0xac5, 0xa9e, 0xc22, 0xbe9, 0xc22, 0xbe9, 0xd4a, 0xcf7, 0xd4a, 0xcf7, 0xd4a, +0xcf7, 0xdb3, 0xd40, 0xdb3, 0xd40, 0xe93, 0xdfa, 0xe93, 0xdfa, 0xf9c, 0xed5, +0xf9c, 0xed5, 0x10ec, 0xff0, 0x10ec, 0xff0, 0x12fe, 0x11ca, 0x12fe, 0x11ca, 0x12fe, +0x11ca, 0x14d3, 0x1361, 0x14d3, 0x1361, 0x16ab, 0x14fa, 0x16ab, 0x14fa, 0x1944, 0x1753, +0x1944, 0x1753, 0x1b83, 0x1953, 0x1b83, 0x1953, 0x1d1c, 0x1aaf, 0x1d1c, 0x1aaf, 0x1e41, +0x1b9c, 0x1e41, 0x1b9c, 0x1e41, 0x1b9c, 0x1f09, 0x1c31, 0x1f09, 0x1c31, 0x1f1e, 0x1c1d, +0x1f1e, 0x1c1d, 0x1ee8, 0x1bc5, 0x1ee8, 0x1bc5, 0x1f13, 0x1bd9, 0x1f13, 0x1bd9, 0x1e54, +0x1b0d, 0x1e54, 0x1b0d, 0x1d12, 0x19c9, 0x1d12, 0x19c9, 0x1d12, 0x19c9, 0x1c3d, 0x18fe, +0x1c3d, 0x18fe, 0x1b38, 0x180e, 0x1b38, 0x180e, 0x19da, 0x16cf, 0x19da, 0x16cf, 0x1870, +0x158d, 0x1870, 0x158d, 0x1786, 0x14d3, 0x1786, 0x14d3, 0x1786, 0x14d3, 0x162b, 0x13af, +0x162b, 0x13af, 0x1478, 0x1237, 0x1478, 0x1237, 0x136b, 0x116a, 0x136b, 0x116a, 0x1296, +0x10d5, 0x1296, 0x10d5, 0x11b7, 0x1036, 0x11b7, 0x1036, 0x1054, 0xf12, 0x1054, 0xf12, +0x1054, 0xf12, 0xe7e, 0xd77, 0xe7e, 0xd77, 0xc86, 0xbb6, 0xc86, 0xbb6, 0xad6, +0xa36, 0xad6, 0xa36, 0x8ee, 0x879, 0x8ee, 0x879, 0x6c2, 0x670, 0x6c2, 0x670, +0x518, 0x4e3, 0x518, 0x4e3, 0x518, 0x4e3, 0x379, 0x35a, 0x379, 0x35a, 0x1af, +0x1a1, 0x1af, 0x1a1, 0xffac, 0xffaa, 0xffac, 0xffaa, 0xfdd5, 0xfddb, 0xfdd5, 0xfddb, +0xfbc3, 0xfbcd, 0xfbc3, 0xfbcd, 0xfbc3, 0xfbcd, 0xfa21, 0xfa2f, 0xfa21, 0xfa2f, 0xf914, +0xf925, 0xf914, 0xf925, 0xf796, 0xf7ab, 0xf796, 0xf7ab, 0xf723, 0xf73f, 0xf723, 0xf73f, +0xf711, 0xf738, 0xf711, 0xf738, 0xf66b, 0xf6a1, 0xf66b, 0xf6a1, 0xf66b, 0xf6a1, 0xf5b7, +0xf602, 0xf5b7, 0xf602, 0xf4e7, 0xf54c, 0xf4e7, 0xf54c, 0xf3e2, 0xf467, 0xf3e2, 0xf467, +0xf2df, 0xf389, 0xf2df, 0xf389, 0xf1cc, 0xf29f, 0xf1cc, 0xf29f, 0xf081, 0xf183, 0xf081, +0xf183, 0xf081, 0xf183, 0xf006, 0xf139, 0xf006, 0xf139, 0xefa8, 0xf10e, 0xefa8, 0xf10e, +0xef12, 0xf0ac, 0xef12, 0xf0ac, 0xee53, 0xf020, 0xee53, 0xf020, 0xecea, 0xeee8, 0xecea, +0xeee8, 0xecea, 0xeee8, 0xebf5, 0xee20, 0xebf5, 0xee20, 0xeba2, 0xedf4, 0xeba2, 0xedf4, +0xeb25, 0xed99, 0xeb25, 0xed99, 0xe9bd, 0xec4b, 0xe9bd, 0xec4b, 0xe8ff, 0xeba0, 0xe8ff, +0xeba0, 0xe962, 0xec0d, 0xe962, 0xec0d, 0xe962, 0xec0d, 0xe9c3, 0xec6f, 0xe9c3, 0xec6f, +0xeada, 0xed80, 0xeada, 0xed80, 0xebce, 0xee66, 0xebce, 0xee66, 0xec97, 0xef1a, 0xec97, +0xef1a, 0xed91, 0xeffa, 0xed91, 0xeffa, 0xeef1, 0xf13b, 0xeef1, 0xf13b, 0xeef1, 0xf13b, +0xf047, 0xf26f, 0xf047, 0xf26f, 0xf089, 0xf28d, 0xf089, 0xf28d, 0xf111, 0xf2f1, 0xf111, +0xf2f1, 0xf212, 0xf3d1, 0xf212, 0xf3d1, 0xf2fd, 0xf49d, 0xf2fd, 0xf49d, 0xf2fd, 0xf49d, +0xf3dc, 0xf561, 0xf3dc, 0xf561, 0xf4fe, 0xf66d, 0xf4fe, 0xf66d, 0xf608, 0xf768, 0xf608, +0xf768, 0xf71f, 0xf876, 0xf71f, 0xf876, 0xf7f1, 0xf945, 0xf7f1, 0xf945, 0xf735, 0xf88e, +0xf735, 0xf88e, 0xf735, 0xf88e, 0xf5ef, 0xf753, 0xf5ef, 0xf753, 0xf4c6, 0xf63a, 0xf4c6, +0xf63a, 0xf436, 0xf5be, 0xf436, 0xf5be, 0xf3a1, 0xf542, 0xf3a1, 0xf542, 0xf2f9, 0xf4b5, +0xf2f9, 0xf4b5, 0xf325, 0xf4fc, 0xf325, 0xf4fc, 0xf325, 0xf4fc, 0xf3c9, 0xf5bb, 0xf3c9, +0xf5bb, 0xf43f, 0xf649, 0xf43f, 0xf649, 0xf428, 0xf647, 0xf428, 0xf647, 0xf48d, 0xf6bd, +0xf48d, 0xf6bd, 0xf46d, 0xf6a8, 0xf46d, 0xf6a8, 0xf46d, 0xf6a8, 0xf40c, 0xf64c, 0xf40c, +0xf64c, 0xf438, 0xf676, 0xf438, 0xf676, 0xf474, 0xf6a9, 0xf474, 0xf6a9, 0xf51b, 0xf73f, +0xf51b, 0xf73f, 0xf570, 0xf77f, 0xf570, 0xf77f, 0xf636, 0xf828, 0xf636, 0xf828, 0xf636, +0xf828, 0xf756, 0xf926, 0xf756, 0xf926, 0xf817, 0xf9c3, 0xf817, 0xf9c3, 0xf82f, 0xf9b3, +0xf82f, 0xf9b3, 0xf847, 0xf9a3, 0xf847, 0xf9a3, 0xf9c4, 0xfaf8, 0xf9c4, 0xfaf8, 0xfb67, +0xfc74, 0xfb67, 0xfc74, 0xfb67, 0xfc74, 0xfcb4, 0xfd9e, 0xfcb4, 0xfd9e, 0xfdfe, 0xfec8, +0xfdfe, 0xfec8, 0xfebc, 0xff6d, 0xfebc, 0xff6d, 0xfe8b, 0xff28, 0xfe8b, 0xff28, 0xfeb3, +0xff44, 0xfeb3, 0xff44, 0xfeb3, 0xff44, 0xff50, 0xffdc, 0xff50, 0xffdc, 0xfe8f, 0xff1c, +0xfe8f, 0xff1c, 0xfd98, 0xfe2e, 0xfd98, 0xfe2e, 0xfd26, 0xfdcc, 0xfd26, 0xfdcc, 0xfcd9, +0xfd94, 0xfcd9, 0xfd94, 0xfc42, 0xfd17, 0xfc42, 0xfd17, 0xfc42, 0xfd17, 0xfb05, 0xfbf8, +0xfb05, 0xfbf8, 0xf9dd, 0xfaef, 0xf9dd, 0xfaef, 0xf879, 0xf9ad, 0xf879, 0xf9ad, 0xf7eb, +0xf940, 0xf7eb, 0xf940, 0xf80c, 0xf982, 0xf80c, 0xf982, 0xf784, 0xf917, 0xf784, 0xf917, +0xf784, 0xf917, 0xf72b, 0xf8d8, 0xf72b, 0xf8d8, 0xf701, 0xf8c5, 0xf701, 0xf8c5, 0xf6a7, +0xf87d, 0xf6a7, 0xf87d, 0xf679, 0xf85c, 0xf679, 0xf85c, 0xf6e7, 0xf8d1, 0xf6e7, 0xf8d1, +0xf6e7, 0xf8d1, 0xf6f0, 0xf8dd, 0xf6f0, 0xf8dd, 0xf6b5, 0xf8a0, 0xf6b5, 0xf8a0, 0xf70a, +0xf8f0, 0xf70a, 0xf8f0, 0xf72e, 0xf90b, 0xf72e, 0xf90b, 0xf74e, 0xf920, 0xf74e, 0xf920, +0xf7c3, 0xf989, 0xf7c3, 0xf989, 0xf7c3, 0xf989, 0xf829, 0xf9e2, 0xf829, 0xf9e2, 0xf7af, +0xf95c, 0xf7af, 0xf95c, 0xf758, 0xf8fa, 0xf758, 0xf8fa, 0xf74e, 0xf8e8, 0xf74e, 0xf8e8, +0xf691, 0xf825, 0xf691, 0xf825, 0xf5ff, 0xf791, 0xf5ff, 0xf791, 0xf5ff, 0xf791, 0xf594, +0xf727, 0xf594, 0xf727, 0xf54c, 0xf6e3, 0xf54c, 0xf6e3, 0xf500, 0xf69f, 0xf500, 0xf69f, +0xf4b7, 0xf661, 0xf4b7, 0xf661, 0xf4eb, 0xf6a1, 0xf4eb, 0xf6a1, 0xf4eb, 0xf6a1, 0xf578, +0xf73c, 0xf578, 0xf73c, 0xf60d, 0xf7df, 0xf60d, 0xf7df, 0xf669, 0xf848, 0xf669, 0xf848, +0xf6db, 0xf8c5, 0xf6db, 0xf8c5, 0xf6cb, 0xf8bd, 0xf6cb, 0xf8bd, 0xf64f, 0xf845, 0xf64f, +0xf845, 0xf64f, 0xf845, 0xf5d5, 0xf7c9, 0xf5d5, 0xf7c9, 0xf4df, 0xf6cb, 0xf4df, 0xf6cb, +0xf3f7, 0xf5d5, 0xf3f7, 0xf5d5, 0xf371, 0xf539, 0xf371, 0xf539, 0xf342, 0xf4ed, 0xf342, +0xf4ed, 0xf342, 0xf4ed, 0xf3f9, 0xf57f, 0xf3f9, 0xf57f, 0xf524, 0xf67f, 0xf524, 0xf67f, +0xf5f8, 0xf71f, 0xf5f8, 0xf71f, 0xf6d5, 0xf7c4, 0xf6d5, 0xf7c4, 0xf7a8, 0xf859, 0xf7a8, +0xf859, 0xf8bf, 0xf92d, 0xf8bf, 0xf92d, 0xf8bf, 0xf92d, 0xfa4f, 0xfa79, 0xfa4f, 0xfa79, +0xfb62, 0xfb45, 0xfb62, 0xfb45, 0xfc6b, 0xfc07, 0xfc6b, 0xfc07, 0xfe4c, 0xfda2, 0xfe4c, +0xfda2, 0x6c, 0xff7e, 0x6c, 0xff7e, 0x248, 0x119, 0x248, 0x119, 0x248, 0x119, +0x429, 0x2bd, 0x429, 0x2bd, 0x60d, 0x469, 0x60d, 0x469, 0x820, 0x648, 0x820, +0x648, 0x9e6, 0x7e2, 0x9e6, 0x7e2, 0xae0, 0x8b4, 0xae0, 0x8b4, 0xae0, 0x8b4, +0xc04, 0x9b6, 0xc04, 0x9b6, 0xd28, 0xabe, 0xd28, 0xabe, 0xdd6, 0xb55, 0xdd6, +0xb55, 0xe6a, 0xbd6, 0xe6a, 0xbd6, 0xee1, 0xc3f, 0xee1, 0xc3f, 0xeab, 0xbfd, +0xeab, 0xbfd, 0xeab, 0xbfd, 0xe6c, 0xbb6, 0xe6c, 0xbb6, 0xf9c, 0xce0, 0xf9c, +0xce0, 0x10c8, 0xe06, 0x10c8, 0xe06, 0x1095, 0xdcf, 0x1095, 0xdcf, 0x10b0, 0xde6, +0x10b0, 0xde6, 0x11b7, 0xee9, 0x11b7, 0xee9, 0x11b7, 0xee9, 0x125d, 0xf8c, 0x125d, +0xf8c, 0x12ca, 0xff7, 0x12ca, 0xff7, 0x1301, 0x102b, 0x1301, 0x102b, 0x12ca, 0xff4, +0x12ca, 0xff4, 0x12ee, 0x1018, 0x12ee, 0x1018, 0x12ee, 0x1018, 0x131f, 0x104c, 0x131f, +0x104c, 0x12ee, 0x1022, 0x12ee, 0x1022, 0x12a8, 0xfe6, 0x12a8, 0xfe6, 0x127b, 0xfc7, +0x127b, 0xfc7, 0x11bd, 0xf1b, 0x11bd, 0xf1b, 0x10cb, 0xe42, 0x10cb, 0xe42, 0x10cb, +0xe42, 0x1031, 0xdc6, 0x1031, 0xdc6, 0xf09, 0xcc3, 0xf09, 0xcc3, 0xd8f, 0xb73, +0xd8f, 0xb73, 0xc71, 0xa84, 0xc71, 0xa84, 0xafe, 0x945, 0xafe, 0x945, 0x8e2, +0x762, 0x8e2, 0x762, 0x8e2, 0x762, 0x6f7, 0x5b5, 0x6f7, 0x5b5, 0x56f, 0x46c, +0x56f, 0x46c, 0x418, 0x356, 0x418, 0x356, 0x2d4, 0x253, 0x2d4, 0x253, 0x1e6, +0x1a5, 0x1e6, 0x1a5, 0x1e6, 0x1a5, 0xe6, 0xe3, 0xe6, 0xe3, 0xffc7, 0xffff, +0xffc7, 0xffff, 0xff11, 0xff7e, 0xff11, 0xff7e, 0xfe7b, 0xff17, 0xfe7b, 0xff17, 0xfdde, +0xfea3, 0xfdde, 0xfea3, 0xfc56, 0xfd3d, 0xfc56, 0xfd3d, 0xfc56, 0xfd3d, 0xfb1f, 0xfc20, +0xfb1f, 0xfc20, 0xfa87, 0xfb9a, 0xfa87, 0xfb9a, 0xf987, 0xfaa3, 0xf987, 0xfaa3, 0xf8b1, +0xf9cf, 0xf8b1, 0xf9cf, 0xf801, 0xf919, 0xf801, 0xf919, 0xf7bd, 0xf8ca, 0xf7bd, 0xf8ca, +0xf7bd, 0xf8ca, 0xf76c, 0xf866, 0xf76c, 0xf866, 0xf71e, 0xf802, 0xf71e, 0xf802, 0xf66f, +0xf738, 0xf66f, 0xf738, 0xf55f, 0xf60b, 0xf55f, 0xf60b, 0xf536, 0xf5c4, 0xf536, 0xf5c4, +0xf536, 0xf5c4, 0xf618, 0xf686, 0xf618, 0xf686, 0xf7ab, 0xf7f9, 0xf7ab, 0xf7f9, 0xf8c7, +0xf8f7, 0xf8c7, 0xf8f7, 0xf98b, 0xf99f, 0xf98b, 0xf99f, 0xfa83, 0xfa7d, 0xfa83, 0xfa7d, +0xfba5, 0xfb87, 0xfba5, 0xfb87, 0xfba5, 0xfb87, 0xfc7c, 0xfc49, 0xfc7c, 0xfc49, 0xfcd0, +0xfc8a, 0xfcd0, 0xfc8a, 0xfd67, 0xfd0f, 0xfd67, 0xfd0f, 0xfd7e, 0xfd17, 0xfd7e, 0xfd17, +0xfd5f, 0xfcea, 0xfd5f, 0xfcea, 0xfde4, 0xfd60, 0xfde4, 0xfd60, 0xfde4, 0xfd60, 0xfe28, +0xfd95, 0xfe28, 0xfd95, 0xfe60, 0xfdbd, 0xfe60, 0xfdbd, 0xff16, 0xfe62, 0xff16, 0xfe62, +0x37, 0xff6f, 0x37, 0xff6f, 0xc8, 0xffeb, 0xc8, 0xffeb, 0xc8, 0xffeb, 0xa5, +0xffb0, 0xa5, 0xffb0, 0x11c, 0xc, 0x11c, 0xc, 0x212, 0xe5, 0x212, 0xe5, +0x2dc, 0x18f, 0x2dc, 0x18f, 0x35e, 0x1f2, 0x35e, 0x1f2, 0x485, 0x2f8, 0x485, +0x2f8, 0x485, 0x2f8, 0x58d, 0x3e0, 0x58d, 0x3e0, 0x5d9, 0x40e, 0x5d9, 0x40e, +0x6b1, 0x4cb, 0x6b1, 0x4cb, 0x78f, 0x593, 0x78f, 0x593, 0x7b3, 0x5a6, 0x7b3, +0x5a6, 0x7b0, 0x598, 0x7b0, 0x598, 0x7b0, 0x598, 0x827, 0x60b, 0x827, 0x60b, +0x817, 0x5ff, 0x817, 0x5ff, 0x7d5, 0x5cb, 0x7d5, 0x5cb, 0x7dc, 0x5e7, 0x7dc, +0x5e7, 0x74d, 0x577, 0x74d, 0x577, 0x74d, 0x577, 0x602, 0x452, 0x602, 0x452, +0x427, 0x2a6, 0x427, 0x2a6, 0x27b, 0x12f, 0x27b, 0x12f, 0xb2, 0xffa2, 0xb2, +0xffa2, 0xfeb4, 0xfde3, 0xfeb4, 0xfde3, 0xfc55, 0xfbc6, 0xfc55, 0xfbc6, 0xfc55, 0xfbc6, +0xfa81, 0xfa35, 0xfa81, 0xfa35, 0xf9a4, 0xf99b, 0xf9a4, 0xf99b, 0xf8ae, 0xf8e4, 0xf8ae, +0xf8e4, 0xf7d8, 0xf849, 0xf7d8, 0xf849, 0xf6fd, 0xf7a3, 0xf6fd, 0xf7a3, 0xf668, 0xf73c, +0xf668, 0xf73c, 0xf668, 0xf73c, 0xf5e4, 0xf6de, 0xf5e4, 0xf6de, 0xf53c, 0xf651, 0xf53c, +0xf651, 0xf48d, 0xf5b4, 0xf48d, 0xf5b4, 0xf37a, 0xf4a9, 0xf37a, 0xf4a9, 0xf2d9, 0xf406, +0xf2d9, 0xf406, 0xf2d9, 0xf406, 0xf366, 0xf487, 0xf366, 0xf487, 0xf44e, 0xf559, 0xf44e, +0xf559, 0xf597, 0xf685, 0xf597, 0xf685, 0xf74d, 0xf816, 0xf74d, 0xf816, 0xf8c6, 0xf965, +0xf8c6, 0xf965, 0xfa50, 0xfac1, 0xfa50, 0xfac1, 0xfa50, 0xfac1, 0xfb6e, 0xfbae, 0xfb6e, +0xfbae, 0xfc38, 0xfc46, 0xfc38, 0xfc46, 0xfcf0, 0xfccd, 0xfcf0, 0xfccd, 0xfdff, 0xfdad, +0xfdff, 0xfdad, 0xffa1, 0xff22, 0xffa1, 0xff22, 0x167, 0xbe, 0x167, 0xbe, 0x167, +0xbe, 0x310, 0x242, 0x310, 0x242, 0x4a4, 0x3b6, 0x4a4, 0x3b6, 0x6fb, 0x5f2, +0x6fb, 0x5f2, 0x913, 0x7f3, 0x913, 0x7f3, 0xa64, 0x931, 0xa64, 0x931, 0xa64, +0x931, 0xb8d, 0xa4b, 0xb8d, 0xa4b, 0xca0, 0xb51, 0xca0, 0xb51, 0xdd1, 0xc77, +0xdd1, 0xc77, 0xf3e, 0xdd9, 0xf3e, 0xdd9, 0x1062, 0xef2, 0x1062, 0xef2, 0x110d, +0xf91, 0x110d, 0xf91, 0x110d, 0xf91, 0x11c9, 0x103e, 0x11c9, 0x103e, 0x12f2, 0x1154, +0x12f2, 0x1154, 0x14bc, 0x1308, 0x14bc, 0x1308, 0x16d6, 0x1509, 0x16d6, 0x1509, 0x18cf, +0x16e4, 0x18cf, 0x16e4, 0x18cf, 0x16e4, 0x19c3, 0x17b7, 0x19c3, 0x17b7, 0x1b38, 0x1909, +0x1b38, 0x1909, 0x1dc7, 0x1b72, 0x1dc7, 0x1b72, 0x1f7b, 0x1d00, 0x1f7b, 0x1d00, 0x2073, +0x1dd2, 0x2073, 0x1dd2, 0x2158, 0x1e95, 0x2158, 0x1e95, 0x2158, 0x1e95, 0x2203, 0x1f20, +0x2203, 0x1f20, 0x2254, 0x1f57, 0x2254, 0x1f57, 0x2309, 0x1ffa, 0x2309, 0x1ffa, 0x235d, +0x2044, 0x235d, 0x2044, 0x2357, 0x203e, 0x2357, 0x203e, 0x230b, 0x1ffd, 0x230b, 0x1ffd, +0x230b, 0x1ffd, 0x228f, 0x1f98, 0x228f, 0x1f98, 0x2209, 0x1f35, 0x2209, 0x1f35, 0x2087, +0x1de3, 0x2087, 0x1de3, 0x1f48, 0x1ce0, 0x1f48, 0x1ce0, 0x1db3, 0x1b92, 0x1db3, 0x1b92, +0x1db3, 0x1b92, 0x1bf4, 0x1a24, 0x1bf4, 0x1a24, 0x1a1a, 0x18a5, 0x1a1a, 0x18a5, 0x17f2, +0x16de, 0x17f2, 0x16de, 0x164c, 0x159f, 0x164c, 0x159f, 0x141b, 0x13d6, 0x141b, 0x13d6, +0x11f4, 0x1219, 0x11f4, 0x1219, 0x11f4, 0x1219, 0xfab, 0x1038, 0xfab, 0x1038, 0xd53, +0xe45, 0xd53, 0xe45, 0xb31, 0xc81, 0xb31, 0xc81, 0x91a, 0xac1, 0x91a, 0xac1, +0x6cc, 0x8c0, 0x6cc, 0x8c0, 0x39f, 0x5d4, 0x39f, 0x5d4, 0x39f, 0x5d4, 0xb6, +0x321, 0xb6, 0x321, 0xfe01, 0x97, 0xfe01, 0x97, 0xfbc3, 0xfe76, 0xfbc3, 0xfe76, +0xf998, 0xfc5d, 0xf998, 0xfc5d, 0xf73b, 0xfa05, 0xf73b, 0xfa05, 0xf73b, 0xfa05, 0xf5b4, +0xf87a, 0xf5b4, 0xf87a, 0xf472, 0xf72a, 0xf472, 0xf72a, 0xf331, 0xf5d2, 0xf331, 0xf5d2, +0xf17d, 0xf402, 0xf17d, 0xf402, 0xf05a, 0xf2bf, 0xf05a, 0xf2bf, 0xf024, 0xf265, 0xf024, +0xf265, 0xf024, 0xf265, 0xf081, 0xf29e, 0xf081, 0xf29e, 0xf190, 0xf388, 0xf190, 0xf388, +0xf24c, 0xf421, 0xf24c, 0xf421, 0xf344, 0xf4fa, 0xf344, 0xf4fa, 0xf435, 0xf5cf, 0xf435, +0xf5cf, 0xf508, 0xf68b, 0xf508, 0xf68b, 0xf508, 0xf68b, 0xf535, 0xf6a5, 0xf535, 0xf6a5, +0xf50c, 0xf66e, 0xf50c, 0xf66e, 0xf58d, 0xf6e4, 0xf58d, 0xf6e4, 0xf578, 0xf6c9, 0xf578, +0xf6c9, 0xf510, 0xf65e, 0xf510, 0xf65e, 0xf510, 0xf65e, 0xf50f, 0xf659, 0xf50f, 0xf659, +0xf572, 0xf6bb, 0xf572, 0xf6bb, 0xf572, 0xf6b8, 0xf572, 0xf6b8, 0xf5ae, 0xf6f0, 0xf5ae, +0xf6f0, 0xf625, 0xf75e, 0xf625, 0xf75e, 0xf61d, 0xf74c, 0xf61d, 0xf74c, 0xf61d, 0xf74c, +0xf61f, 0xf73e, 0xf61f, 0xf73e, 0xf65a, 0xf764, 0xf65a, 0xf764, 0xf6fd, 0xf7ed, 0xf6fd, +0xf7ed, 0xf7cc, 0xf89e, 0xf7cc, 0xf89e, 0xf9c1, 0xfa6f, 0xf9c1, 0xfa6f, 0xfbcf, 0xfc57, +0xfbcf, 0xfc57, 0xfbcf, 0xfc57, 0xfd37, 0xfd95, 0xfd37, 0xfd95, 0xfea0, 0xfed3, 0xfea0, +0xfed3, 0xffd0, 0xffd8, 0xffd0, 0xffd8, 0xb5, 0x93, 0xb5, 0x93, 0x15b, 0x113, +0x15b, 0x113, 0x15b, 0x113, 0x27b, 0x212, 0x27b, 0x212, 0x357, 0x2d3, 0x357, +0x2d3, 0x399, 0x301, 0x399, 0x301, 0x3ab, 0x30a, 0x3ab, 0x30a, 0x3d1, 0x330, +0x3d1, 0x330, 0x37a, 0x2e3, 0x37a, 0x2e3, 0x37a, 0x2e3, 0x2e8, 0x267, 0x2e8, +0x267, 0x21c, 0x1ba, 0x21c, 0x1ba, 0x4e, 0x17, 0x4e, 0x17, 0xfe69, 0xfe65, +0xfe69, 0xfe65, 0xfc81, 0xfcba, 0xfc81, 0xfcba, 0xfad8, 0xfb54, 0xfad8, 0xfb54, 0xfad8, +0xfb54, 0xf949, 0xfa0d, 0xf949, 0xfa0d, 0xf80c, 0xf91c, 0xf80c, 0xf91c, 0xf700, 0xf85e, +0xf700, 0xf85e, 0xf5e6, 0xf790, 0xf5e6, 0xf790, 0xf4ba, 0xf6af, 0xf4ba, 0xf6af, 0xf4ba, +0xf6af, 0xf355, 0xf590, 0xf355, 0xf590, 0xf23b, 0xf4b6, 0xf23b, 0xf4b6, 0xf129, 0xf3dc, +0xf129, 0xf3dc, 0xf001, 0xf2e4, 0xf001, 0xf2e4, 0xee4b, 0xf155, 0xee4b, 0xf155, 0xecf9, +0xf01f, 0xecf9, 0xf01f, 0xecf9, 0xf01f, 0xec00, 0xef38, 0xec00, 0xef38, 0xeafc, 0xee3a, +0xeafc, 0xee3a, 0xea7c, 0xedb8, 0xea7c, 0xedb8, 0xe9f4, 0xed25, 0xe9f4, 0xed25, 0xe9a1, +0xecbe, 0xe9a1, 0xecbe, 0xe943, 0xec46, 0xe943, 0xec46, 0xe943, 0xec46, 0xe919, 0xebfb, +0xe919, 0xebfb, 0xe96c, 0xec2a, 0xe96c, 0xec2a, 0xe9b9, 0xec50, 0xe9b9, 0xec50, 0xea30, +0xec9f, 0xea30, 0xec9f, 0xeb3d, 0xed83, 0xeb3d, 0xed83, 0xeb3d, 0xed83, 0xebf9, 0xee18, +0xebf9, 0xee18, 0xec3d, 0xee36, 0xec3d, 0xee36, 0xeca2, 0xee79, 0xeca2, 0xee79, 0xed3f, +0xeef6, 0xed3f, 0xeef6, 0xedeb, 0xef86, 0xedeb, 0xef86, 0xee19, 0xef9c, 0xee19, 0xef9c, +0xee19, 0xef9c, 0xee5c, 0xefca, 0xee5c, 0xefca, 0xee53, 0xefaf, 0xee53, 0xefaf, 0xeeda, +0xf026, 0xeeda, 0xf026, 0xf01b, 0xf158, 0xf01b, 0xf158, 0xf065, 0xf195, 0xf065, 0xf195, +0xf053, 0xf175, 0xf053, 0xf175, 0xf053, 0xf175, 0xf06e, 0xf182, 0xf06e, 0xf182, 0xf0ba, +0xf1be, 0xf0ba, 0xf1be, 0xf0c5, 0xf1b8, 0xf0c5, 0xf1b8, 0xf17b, 0xf25b, 0xf17b, 0xf25b, +0xf259, 0xf323, 0xf259, 0xf323, 0xf259, 0xf323, 0xf230, 0xf2e2, 0xf230, 0xf2e2, 0xf354, +0xf3ec, 0xf354, 0xf3ec, 0xf564, 0xf5e0, 0xf564, 0xf5e0, 0xf6dd, 0xf73d, 0xf6dd, 0xf73d, +0xf82a, 0xf86d, 0xf82a, 0xf86d, 0xf952, 0xf979, 0xf952, 0xf979, 0xf952, 0xf979, 0xfa73, +0xfa80, 0xfa73, 0xfa80, 0xfba4, 0xfb99, 0xfba4, 0xfb99, 0xfce8, 0xfcc9, 0xfce8, 0xfcc9, +0xfdc0, 0xfd92, 0xfdc0, 0xfd92, 0xfe3c, 0xfe04, 0xfe3c, 0xfe04, 0xfed0, 0xfe95, 0xfed0, +0xfe95, 0xfed0, 0xfe95, 0xff7f, 0xff47, 0xff7f, 0xff47, 0xe, 0xffe1, 0xe, 0xffe1, +0x18, 0xfffc, 0x18, 0xfffc, 0x33, 0x2f, 0x33, 0x2f, 0x1e, 0x37, 0x1e, +0x37, 0x1e, 0x37, 0xff6c, 0xffa9, 0xff6c, 0xffa9, 0xfea8, 0xff0d, 0xfea8, 0xff0d, +0xfde4, 0xfe75, 0xfde4, 0xfe75, 0xfd1c, 0xfdda, 0xfd1c, 0xfdda, 0xfc64, 0xfd51, 0xfc64, +0xfd51, 0xfba9, 0xfcc4, 0xfba9, 0xfcc4, 0xfba9, 0xfcc4, 0xfad9, 0xfc20, 0xfad9, 0xfc20, +0xfa40, 0xfbb1, 0xfa40, 0xfbb1, 0xf9ac, 0xfb42, 0xf9ac, 0xfb42, 0xf8c3, 0xfa79, 0xf8c3, +0xfa79, 0xf78a, 0xf95a, 0xf78a, 0xf95a, 0xf78a, 0xf95a, 0xf656, 0xf838, 0xf656, 0xf838, +0xf567, 0xf755, 0xf567, 0xf755, 0xf4c9, 0xf6ba, 0xf4c9, 0xf6ba, 0xf447, 0xf636, 0xf447, +0xf636, 0xf3e6, 0xf5ca, 0xf3e6, 0xf5ca, 0xf3e1, 0xf5b4, 0xf3e1, 0xf5b4, 0xf3e1, 0xf5b4, +0xf3d9, 0xf595, 0xf3d9, 0xf595, 0xf3e0, 0xf57f, 0xf3e0, 0xf57f, 0xf3df, 0xf55c, 0xf3df, +0xf55c, 0xf432, 0xf58b, 0xf432, 0xf58b, 0xf4a7, 0xf5d8, 0xf4a7, 0xf5d8, 0xf4a7, 0xf5ae, +0xf4a7, 0xf5ae, 0xf4a7, 0xf5ae, 0xf4ac, 0xf588, 0xf4ac, 0xf588, 0xf54c, 0xf5fd, 0xf54c, +0xf5fd, 0xf673, 0xf6f8, 0xf673, 0xf6f8, 0xf6e9, 0xf743, 0xf6e9, 0xf743, 0xf7e5, 0xf814, +0xf7e5, 0xf814, 0xf7e5, 0xf814, 0xf9af, 0xf9b3, 0xf9af, 0xf9b3, 0xfac0, 0xfa9a, 0xfac0, +0xfa9a, 0xfbe0, 0xfb8f, 0xfbe0, 0xfb8f, 0xfd3a, 0xfcbf, 0xfd3a, 0xfcbf, 0xfe0b, 0xfd64, +0xfe0b, 0xfd64, 0xfec6, 0xfdf1, 0xfec6, 0xfdf1, 0xfec6, 0xfdf1, 0xb, 0xff08, 0xb, +0xff08, 0x147, 0x13, 0x147, 0x13, 0x264, 0xfc, 0x264, 0xfc, 0x3bb, 0x21d, +0x3bb, 0x21d, 0x5bd, 0x3e6, 0x5bd, 0x3e6, 0x7e5, 0x5d3, 0x7e5, 0x5d3, 0x7e5, +0x5d3, 0x9a2, 0x754, 0x9a2, 0x754, 0xb6e, 0x8e1, 0xb6e, 0x8e1, 0xcc4, 0x9f8, +0xcc4, 0x9f8, 0xe37, 0xb2c, 0xe37, 0xb2c, 0x1003, 0xcbb, 0x1003, 0xcbb, 0x1003, +0xcbb, 0x116c, 0xdea, 0x116c, 0xdea, 0x12c3, 0xf0a, 0x12c3, 0xf0a, 0x1407, 0x101e, +0x1407, 0x101e, 0x1505, 0x10f1, 0x1505, 0x10f1, 0x15be, 0x1188, 0x15be, 0x1188, 0x1704, +0x12b6, 0x1704, 0x12b6, 0x1704, 0x12b6, 0x1873, 0x1415, 0x1873, 0x1415, 0x18f8, 0x1497, +0x18f8, 0x1497, 0x1985, 0x152c, 0x1985, 0x152c, 0x19b9, 0x1572, 0x19b9, 0x1572, 0x1962, +0x1539, 0x1962, 0x1539, 0x1931, 0x1532, 0x1931, 0x1532, 0x1931, 0x1532, 0x1917, 0x154c, +0x1917, 0x154c, 0x191b, 0x158d, 0x191b, 0x158d, 0x184c, 0x1502, 0x184c, 0x1502, 0x1708, +0x140a, 0x1708, 0x140a, 0x1618, 0x136b, 0x1618, 0x136b, 0x1618, 0x136b, 0x1534, 0x12db, +0x1534, 0x12db, 0x1431, 0x122d, 0x1431, 0x122d, 0x1357, 0x11a8, 0x1357, 0x11a8, 0x12f3, +0x1197, 0x12f3, 0x1197, 0x11f3, 0x10e7, 0x11f3, 0x10e7, 0x101d, 0xf5c, 0x101d, 0xf5c, +0x101d, 0xf5c, 0xe1b, 0xda0, 0xe1b, 0xda0, 0xc60, 0xc23, 0xc60, 0xc23, 0xad0, +0xacb, 0xad0, 0xacb, 0x8e0, 0x90b, 0x8e0, 0x90b, 0x74c, 0x7a0, 0x74c, 0x7a0, +0x5e0, 0x656, 0x5e0, 0x656, 0x5e0, 0x656, 0x455, 0x4e7, 0x455, 0x4e7, 0x374, +0x41d, 0x374, 0x41d, 0x2ab, 0x365, 0x2ab, 0x365, 0x1d4, 0x29c, 0x1d4, 0x29c, +0xc5, 0x199, 0xc5, 0x199, 0xc5, 0x199, 0xff66, 0x44, 0xff66, 0x44, 0xfe04, +0xfeed, 0xfe04, 0xfeed, 0xfced, 0xfde0, 0xfced, 0xfde0, 0xfc8d, 0xfd8d, 0xfc8d, 0xfd8d, +0xfc5d, 0xfd6a, 0xfc5d, 0xfd6a, 0xfc86, 0xfda5, 0xfc86, 0xfda5, 0xfc86, 0xfda5, 0xfc54, +0xfd85, 0xfc54, 0xfd85, 0xfbd2, 0xfd18, 0xfbd2, 0xfd18, 0xfb52, 0xfcad, 0xfb52, 0xfcad, +0xfa7f, 0xfbf1, 0xfa7f, 0xfbf1, 0xf951, 0xfad9, 0xf951, 0xfad9, 0xf7b4, 0xf952, 0xf7b4, +0xf952, 0xf7b4, 0xf952, 0xf6c8, 0xf878, 0xf6c8, 0xf878, 0xf534, 0xf6f3, 0xf534, 0xf6f3, +0xf40a, 0xf5d2, 0xf40a, 0xf5d2, 0xf413, 0xf5df, 0xf413, 0xf5df, 0xf356, 0xf51e, 0xf356, +0xf51e, 0xf356, 0xf51e, 0xf2e7, 0xf4a4, 0xf2e7, 0xf4a4, 0xf362, 0xf509, 0xf362, 0xf509, +0xf3da, 0xf564, 0xf3da, 0xf564, 0xf3f9, 0xf55d, 0xf3f9, 0xf55d, 0xf4b7, 0xf5ec, 0xf4b7, +0xf5ec, 0xf4ef, 0xf5ee, 0xf4ef, 0xf5ee, 0xf4ef, 0xf5ee, 0xf4c0, 0xf581, 0xf4c0, 0xf581, +0xf5db, 0xf659, 0xf5db, 0xf659, 0xf79e, 0xf7d6, 0xf79e, 0xf7d6, 0xf961, 0xf951, 0xf961, +0xf951, 0xfb2b, 0xfad1, 0xfb2b, 0xfad1, 0xfcfb, 0xfc59, 0xfcfb, 0xfc59, 0xfcfb, 0xfc59, +0xfe8d, 0xfda8, 0xfe8d, 0xfda8, 0x77, 0xff53, 0x77, 0xff53, 0x1e1, 0x86, 0x1e1, +0x86, 0x29c, 0x112, 0x29c, 0x112, 0x2e1, 0x131, 0x2e1, 0x131, 0x2e1, 0x131, +0x2a2, 0xd8, 0x2a2, 0xd8, 0x297, 0xbd, 0x297, 0xbd, 0x2fb, 0x11d, 0x2fb, +0x11d, 0x34d, 0x175, 0x34d, 0x175, 0x299, 0xd0, 0x299, 0xd0, 0x1e4, 0x35, +0x1e4, 0x35, 0x1e4, 0x35, 0x14c, 0xffbe, 0x14c, 0xffbe, 0x77, 0xff0f, 0x77, +0xff0f, 0xff4f, 0xfe12, 0xff4f, 0xfe12, 0xfe53, 0xfd43, 0xfe53, 0xfd43, 0xfdfa, 0xfd16, +0xfdfa, 0xfd16, 0xfdc7, 0xfd0f, 0xfdc7, 0xfd0f, 0xfdc7, 0xfd0f, 0xfe0b, 0xfd7a, 0xfe0b, +0xfd7a, 0xfea4, 0xfe35, 0xfea4, 0xfe35, 0xff44, 0xfef0, 0xff44, 0xfef0, 0xff31, 0xfef0, +0xff31, 0xfef0, 0xfec6, 0xfe8f, 0xfec6, 0xfe8f, 0xfec6, 0xfe8f, 0xfdfe, 0xfdc8, 0xfdfe, +0xfdc8, 0xfd69, 0xfd2b, 0xfd69, 0xfd2b, 0xfdbb, 0xfd6b, 0xfdbb, 0xfd6b, 0xfe33, 0xfdc9, +0xfe33, 0xfdc9, 0xfef3, 0xfe69, 0xfef3, 0xfe69, 0xff75, 0xfec4, 0xff75, 0xfec4, 0xff75, +0xfec4, 0xffdc, 0xff00, 0xffdc, 0xff00, 0x4f, 0xff45, 0x4f, 0xff45, 0xd4, 0xff9b, +0xd4, 0xff9b, 0x147, 0xffe0, 0x147, 0xffe0, 0x1a5, 0x13, 0x1a5, 0x13, 0x21f, +0x65, 0x21f, 0x65, 0x21f, 0x65, 0x2b4, 0xd8, 0x2b4, 0xd8, 0x3bd, 0x1c6, +0x3bd, 0x1c6, 0x4b0, 0x2a5, 0x4b0, 0x2a5, 0x5e2, 0x3cb, 0x5e2, 0x3cb, 0x738, +0x51b, 0x738, 0x51b, 0x738, 0x51b, 0x826, 0x60c, 0x826, 0x60c, 0x8f6, 0x6e6, +0x8f6, 0x6e6, 0x9fa, 0x7fa, 0x9fa, 0x7fa, 0xaf5, 0x908, 0xaf5, 0x908, 0xbd5, +0xa00, 0xbd5, 0xa00, 0xcaf, 0xaf3, 0xcaf, 0xaf3, 0xcaf, 0xaf3, 0xca7, 0xb04, +0xca7, 0xb04, 0xc28, 0xa9e, 0xc28, 0xa9e, 0xbc0, 0xa4b, 0xbc0, 0xa4b, 0xb4c, +0x9e8, 0xb4c, 0x9e8, 0xae8, 0x98f, 0xae8, 0x98f, 0xae8, 0x98f, 0xab6, 0x964, +0xab6, 0x964, 0xad4, 0x980, 0xad4, 0x980, 0xb8d, 0xa31, 0xb8d, 0xa31, 0xca2, +0xb37, 0xca2, 0xb37, 0xdb6, 0xc37, 0xdb6, 0xc37, 0xf42, 0xda9, 0xf42, 0xda9, +0xf42, 0xda9, 0x10c7, 0xf0f, 0x10c7, 0xf0f, 0x1205, 0x102b, 0x1205, 0x102b, 0x1309, +0x110d, 0x1309, 0x110d, 0x1426, 0x1208, 0x1426, 0x1208, 0x15a3, 0x1365, 0x15a3, 0x1365, +0x16df, 0x1486, 0x16df, 0x1486, 0x16df, 0x1486, 0x17dd, 0x156f, 0x17dd, 0x156f, 0x184d, +0x15d0, 0x184d, 0x15d0, 0x18d3, 0x1650, 0x18d3, 0x1650, 0x19d0, 0x1750, 0x19d0, 0x1750, +0x1abd, 0x184b, 0x1abd, 0x184b, 0x1abd, 0x184b, 0x1bab, 0x1950, 0x1bab, 0x1950, 0x1bb2, +0x197a, 0x1bb2, 0x197a, 0x1ad4, 0x18c7, 0x1ad4, 0x18c7, 0x19ad, 0x17d5, 0x19ad, 0x17d5, +0x1876, 0x16d9, 0x1876, 0x16d9, 0x16d5, 0x157a, 0x16d5, 0x157a, 0x16d5, 0x157a, 0x14fc, +0x13e7, 0x14fc, 0x13e7, 0x13b1, 0x12e4, 0x13b1, 0x12e4, 0x12bf, 0x123b, 0x12bf, 0x123b, +0x1278, 0x123b, 0x1278, 0x123b, 0x122b, 0x1231, 0x122b, 0x1231, 0x117c, 0x11c0, 0x117c, +0x11c0, 0x117c, 0x11c0, 0x1050, 0x10cc, 0x1050, 0x10cc, 0xe67, 0xf11, 0xe67, 0xf11, +0xcc0, 0xd8f, 0xcc0, 0xd8f, 0xb8b, 0xc75, 0xb8b, 0xc75, 0xab4, 0xbaf, 0xab4, +0xbaf, 0xab4, 0xbaf, 0x991, 0xa91, 0x991, 0xa91, 0x81e, 0x91c, 0x81e, 0x91c, +0x73a, 0x82a, 0x73a, 0x82a, 0x6d9, 0x7b5, 0x6d9, 0x7b5, 0x63f, 0x6ff, 0x63f, +0x6ff, 0x52c, 0x5cb, 0x52c, 0x5cb, 0x52c, 0x5cb, 0x419, 0x494, 0x419, 0x494, +0x2ff, 0x355, 0x2ff, 0x355, 0x1f8, 0x228, 0x1f8, 0x228, 0x180, 0x18d, 0x180, +0x18d, 0x181, 0x16e, 0x181, 0x16e, 0x13f, 0x110, 0x13f, 0x110, 0x13f, 0x110, +0x11c, 0xd7, 0x11c, 0xd7, 0xfd, 0xa8, 0xfd, 0xa8, 0x53, 0xfff6, 0x53, +0xfff6, 0xff38, 0xfed9, 0xff38, 0xfed9, 0xfe18, 0xfdbe, 0xfe18, 0xfdbe, 0xfe18, 0xfdbe, +0xfdc6, 0xfd77, 0xfdc6, 0xfd77, 0xfd99, 0xfd5c, 0xfd99, 0xfd5c, 0xfd19, 0xfcf2, 0xfd19, +0xfcf2, 0xfc91, 0xfc83, 0xfc91, 0xfc83, 0xfbf2, 0xfc00, 0xfbf2, 0xfc00, 0xfaeb, 0xfb15, +0xfaeb, 0xfb15, 0xfaeb, 0xfb15, 0xfa0c, 0xfa51, 0xfa0c, 0xfa51, 0xf936, 0xf996, 0xf936, +0xf996, 0xf811, 0xf889, 0xf811, 0xf889, 0xf786, 0xf812, 0xf786, 0xf812, 0xf6c6, 0xf762, +0xf6c6, 0xf762, 0xf596, 0xf63d, 0xf596, 0xf63d, 0xf596, 0xf63d, 0xf47e, 0xf52c, 0xf47e, +0xf52c, 0xf3fa, 0xf4a9, 0xf3fa, 0xf4a9, 0xf3f6, 0xf4a2, 0xf3f6, 0xf4a2, 0xf3e0, 0xf486, +0xf3e0, 0xf486, 0xf3c1, 0xf45e, 0xf3c1, 0xf45e, 0xf3c1, 0xf45e, 0xf320, 0xf3b1, 0xf320, +0xf3b1, 0xf2a2, 0xf328, 0xf2a2, 0xf328, 0xf2ed, 0xf368, 0xf2ed, 0xf368, 0xf36f, 0xf3e0, +0xf36f, 0xf3e0, 0xf37e, 0xf3ea, 0xf37e, 0xf3ea, 0xf343, 0xf3ac, 0xf343, 0xf3ac, 0xf343, +0xf3ac, 0xf337, 0xf3a3, 0xf337, 0xf3a3, 0xf356, 0xf3cb, 0xf356, 0xf3cb, 0xf380, 0xf404, +0xf380, 0xf404, 0xf34a, 0xf3e3, 0xf34a, 0xf3e3, 0xf290, 0xf345, 0xf290, 0xf345, 0xf1f0, +0xf2c6, 0xf1f0, 0xf2c6, 0xf1f0, 0xf2c6, 0xf15d, 0xf25a, 0xf15d, 0xf25a, 0xf074, 0xf19d, +0xf074, 0xf19d, 0xefac, 0xf103, 0xefac, 0xf103, 0xeedc, 0xf064, 0xeedc, 0xf064, 0xee60, +0xf019, 0xee60, 0xf019, 0xee60, 0xf019, 0xee4a, 0xf032, 0xee4a, 0xf032, 0xee13, 0xf02a, +0xee13, 0xf02a, 0xedc9, 0xf00a, 0xedc9, 0xf00a, 0xed2b, 0xef90, 0xed2b, 0xef90, 0xec62, +0xeee5, 0xec62, 0xeee5, 0xeb98, 0xee32, 0xeb98, 0xee32, 0xeb98, 0xee32, 0xead4, 0xed7d, +0xead4, 0xed7d, 0xea12, 0xecc1, 0xea12, 0xecc1, 0xe9e6, 0xec93, 0xe9e6, 0xec93, 0xea08, +0xeca9, 0xea08, 0xeca9, 0xea1c, 0xeca9, 0xea1c, 0xeca9, 0xeabb, 0xed2e, 0xeabb, 0xed2e, +0xeabb, 0xed2e, 0xeb87, 0xedd8, 0xeb87, 0xedd8, 0xec50, 0xee7a, 0xec50, 0xee7a, 0xed24, +0xef23, 0xed24, 0xef23, 0xee7c, 0xf04c, 0xee7c, 0xf04c, 0xf023, 0xf1c3, 0xf023, 0xf1c3, +0xf023, 0xf1c3, 0xf1d1, 0xf33f, 0xf1d1, 0xf33f, 0xf418, 0xf557, 0xf418, 0xf557, 0xf624, +0xf736, 0xf624, 0xf736, 0xf79e, 0xf886, 0xf79e, 0xf886, 0xf92e, 0xf9f0, 0xf92e, 0xf9f0, +0xfa91, 0xfb32, 0xfa91, 0xfb32, 0xfa91, 0xfb32, 0xfb71, 0xfbf7, 0xfb71, 0xfbf7, 0xfbe3, +0xfc53, 0xfbe3, 0xfc53, 0xfc26, 0xfc85, 0xfc26, 0xfc85, 0xfc11, 0xfc65, 0xfc11, 0xfc65, +0xfbb5, 0xfc03, 0xfbb5, 0xfc03, 0xfbce, 0xfc1a, 0xfbce, 0xfc1a, 0xfbce, 0xfc1a, 0xfc0b, +0xfc59, 0xfc0b, 0xfc59, 0xfbdc, 0xfc2f, 0xfbdc, 0xfc2f, 0xfbac, 0xfc07, 0xfbac, 0xfc07, +0xfb98, 0xfbfd, 0xfb98, 0xfbfd, 0xfb3a, 0xfba9, 0xfb3a, 0xfba9, 0xfb3a, 0xfba9, 0xfad9, +0xfb53, 0xfad9, 0xfb53, 0xfa63, 0xfae8, 0xfa63, 0xfae8, 0xf9f1, 0xfa80, 0xf9f1, 0xfa80, +0xfa31, 0xfacb, 0xfa31, 0xfacb, 0xfac9, 0xfb6d, 0xfac9, 0xfb6d, 0xfbb5, 0xfc63, 0xfbb5, +0xfc63, 0xfbb5, 0xfc63, 0xfc74, 0xfd2c, 0xfc74, 0xfd2c, 0xfce4, 0xfda6, 0xfce4, 0xfda6, +0xfd70, 0xfe3e, 0xfd70, 0xfe3e, 0xfda0, 0xfe7c, 0xfda0, 0xfe7c, 0xfd67, 0xfe52, 0xfd67, +0xfe52, 0xfce3, 0xfde1, 0xfce3, 0xfde1, 0xfce3, 0xfde1, 0xfc1b, 0xfd2f, 0xfc1b, 0xfd2f, +0xfb59, 0xfc87, 0xfb59, 0xfc87, 0xfab3, 0xfbff, 0xfab3, 0xfbff, 0xf99f, 0xfb0d, 0xf99f, +0xfb0d, 0xf87c, 0xfa11, 0xf87c, 0xfa11, 0xf87c, 0xfa11, 0xf7a7, 0xf966, 0xf7a7, 0xf966, +0xf70f, 0xf8fb, 0xf70f, 0xf8fb, 0xf5ff, 0xf81d, 0xf5ff, 0xf81d, 0xf49c, 0xf6ec, 0xf49c, +0xf6ec, 0xf3c6, 0xf649, 0xf3c6, 0xf649, 0xf2eb, 0xf5a1, 0xf2eb, 0xf5a1, 0xf2eb, 0xf5a1, +0xf1f2, 0xf4da, 0xf1f2, 0xf4da, 0xf0ac, 0xf3c2, 0xf0ac, 0xf3c2, 0xef95, 0xf2d6, 0xef95, +0xf2d6, 0xeed7, 0xf23d, 0xeed7, 0xf23d, 0xeec6, 0xf24c, 0xeec6, 0xf24c, 0xeec6, 0xf24c, +0xeef8, 0xf295, 0xeef8, 0xf295, 0xeecf, 0xf27c, 0xeecf, 0xf27c, 0xef25, 0xf2d9, 0xef25, +0xf2d9, 0xef2a, 0xf2db, 0xef2a, 0xf2db, 0xef80, 0xf325, 0xef80, 0xf325, 0xefec, 0xf37b, +0xefec, 0xf37b, 0xefec, 0xf37b, 0xefcc, 0xf33d, 0xefcc, 0xf33d, 0xefc1, 0xf30c, 0xefc1, +0xf30c, 0xf025, 0xf340, 0xf025, 0xf340, 0xf115, 0xf3fa, 0xf115, 0xf3fa, 0xf1f1, 0xf49c, +0xf1f1, 0xf49c, 0xf2a3, 0xf50d, 0xf2a3, 0xf50d, 0xf2a3, 0xf50d, 0xf2ea, 0xf510, 0xf2ea, +0xf510, 0xf3c2, 0xf5a2, 0xf3c2, 0xf5a2, 0xf4af, 0xf647, 0xf4af, 0xf647, 0xf5b8, 0xf708, +0xf5b8, 0xf708, 0xf79a, 0xf8a2, 0xf79a, 0xf8a2, 0xf79a, 0xf8a2, 0xf957, 0xfa19, 0xf957, +0xfa19, 0xfafd, 0xfb7b, 0xfafd, 0xfb7b, 0xfcec, 0xfd29, 0xfcec, 0xfd29, 0xff0c, 0xff0a, +0xff0c, 0xff0a, 0x75, 0x37, 0x75, 0x37, 0x227, 0x1b1, 0x227, 0x1b1, 0x227, +0x1b1, 0x422, 0x376, 0x422, 0x376, 0x5a2, 0x4c2, 0x5a2, 0x4c2, 0x6ff, 0x5ee, +0x6ff, 0x5ee, 0x85f, 0x71e, 0x85f, 0x71e, 0x9fe, 0x88f, 0x9fe, 0x88f, 0xb83, +0x9e7, 0xb83, 0x9e7, 0xb83, 0x9e7, 0xd47, 0xb80, 0xd47, 0xb80, 0xeb4, 0xcc2, +0xeb4, 0xcc2, 0xfe6, 0xdc9, 0xfe6, 0xdc9, 0x1106, 0xec1, 0x1106, 0xec1, 0x11c0, +0xf54, 0x11c0, 0xf54, 0x11c0, 0xf54, 0x1219, 0xf88, 0x1219, 0xf88, 0x1254, 0xfa0, +0x1254, 0xfa0, 0x12f5, 0x1022, 0x12f5, 0x1022, 0x1371, 0x1083, 0x1371, 0x1083, 0x1453, +0x1150, 0x1453, 0x1150, 0x155d, 0x124a, 0x155d, 0x124a, 0x155d, 0x124a, 0x15c1, 0x12a6, +0x15c1, 0x12a6, 0x157a, 0x125f, 0x157a, 0x125f, 0x1543, 0x1230, 0x1543, 0x1230, 0x15a8, +0x12a7, 0x15a8, 0x12a7, 0x1643, 0x135c, 0x1643, 0x135c, 0x1698, 0x13d6, 0x1698, 0x13d6, +0x1698, 0x13d6, 0x1657, 0x13c4, 0x1657, 0x13c4, 0x1572, 0x1316, 0x1572, 0x1316, 0x13f1, +0x11d6, 0x13f1, 0x11d6, 0x12c1, 0x10ed, 0x12c1, 0x10ed, 0x1131, 0xfac, 0x1131, 0xfac, +0x1131, 0xfac, 0xf1d, 0xdec, 0xf1d, 0xdec, 0xca7, 0xbce, 0xca7, 0xbce, 0xa28, +0x9a8, 0xa28, 0x9a8, 0x858, 0x833, 0x858, 0x833, 0x632, 0x665, 0x632, 0x665, +0x49e, 0x526, 0x49e, 0x526, 0x49e, 0x526, 0x321, 0x3fa, 0x321, 0x3fa, 0x187, +0x2aa, 0x187, 0x2aa, 0x3b, 0x1a1, 0x3b, 0x1a1, 0xfe4d, 0xffec, 0xfe4d, 0xffec, +0xfc34, 0xfe04, 0xfc34, 0xfe04, 0xfa2d, 0xfc24, 0xfa2d, 0xfc24, 0xfa2d, 0xfc24, 0xf873, +0xfa86, 0xf873, 0xfa86, 0xf6c8, 0xf8ed, 0xf6c8, 0xf8ed, 0xf580, 0xf7ad, 0xf580, 0xf7ad, +0xf4ca, 0xf6f6, 0xf4ca, 0xf6f6, 0xf49c, 0xf6bf, 0xf49c, 0xf6bf, 0xf49c, 0xf6bf, 0xf53f, +0xf751, 0xf53f, 0xf751, 0xf617, 0xf812, 0xf617, 0xf812, 0xf6cc, 0xf8ab, 0xf6cc, 0xf8ab, +0xf6ee, 0xf8ae, 0xf6ee, 0xf8ae, 0xf700, 0xf89e, 0xf700, 0xf89e, 0xf706, 0xf880, 0xf706, +0xf880, 0xf706, 0xf880, 0xf6f2, 0xf849, 0xf6f2, 0xf849, 0xf7d3, 0xf907, 0xf7d3, 0xf907, +0xf8f4, 0xfa06, 0xf8f4, 0xfa06, 0xf9eb, 0xfade, 0xf9eb, 0xfade, 0xfb01, 0xfbd6, 0xfb01, +0xfbd6, 0xfbfa, 0xfcb5, 0xfbfa, 0xfcb5, 0xfbfa, 0xfcb5, 0xfcdb, 0xfd7c, 0xfcdb, 0xfd7c, +0xfd64, 0xfdee, 0xfd64, 0xfdee, 0xfd87, 0xfdfa, 0xfd87, 0xfdfa, 0xfd5f, 0xfdbd, 0xfd5f, +0xfdbd, 0xfd4f, 0xfd97, 0xfd4f, 0xfd97, 0xfd4f, 0xfd97, 0xfdd8, 0xfe09, 0xfdd8, 0xfe09, +0xfe72, 0xfe8b, 0xfe72, 0xfe8b, 0xfed1, 0xfed0, 0xfed1, 0xfed0, 0xff89, 0xff6b, 0xff89, +0xff6b, 0x7b, 0x3c, 0x7b, 0x3c, 0x13a, 0xd8, 0x13a, 0xd8, 0x13a, 0xd8, +0x1ea, 0x161, 0x1ea, 0x161, 0x2b7, 0x205, 0x2b7, 0x205, 0x36e, 0x290, 0x36e, +0x290, 0x452, 0x348, 0x452, 0x348, 0x599, 0x460, 0x599, 0x460, 0x6d0, 0x56a, +0x6d0, 0x56a, 0x6d0, 0x56a, 0x7ee, 0x65d, 0x7ee, 0x65d, 0x8f4, 0x73d, 0x8f4, +0x73d, 0xa04, 0x82a, 0xa04, 0x82a, 0xb01, 0x909, 0xb01, 0x909, 0xbe8, 0x9dc, +0xbe8, 0x9dc, 0xbe8, 0x9dc, 0xcc9, 0xab0, 0xcc9, 0xab0, 0xd58, 0xb3b, 0xd58, +0xb3b, 0xdcb, 0xbb5, 0xdcb, 0xbb5, 0xe18, 0xc13, 0xe18, 0xc13, 0xe12, 0xc29, +0xe12, 0xc29, 0xda7, 0xbe4, 0xda7, 0xbe4, 0xda7, 0xbe4, 0xd02, 0xb6f, 0xd02, +0xb6f, 0xbd2, 0xa79, 0xbd2, 0xa79, 0x9c9, 0x8b1, 0x9c9, 0x8b1, 0x752, 0x681, +0x752, 0x681, 0x50d, 0x488, 0x50d, 0x488, 0x36c, 0x335, 0x36c, 0x335, 0x36c, +0x335, 0x17c, 0x195, 0x17c, 0x195, 0xff3d, 0xffa4, 0xff3d, 0xffa4, 0xfd01, 0xfdb4, +0xfd01, 0xfdb4, 0xfaf6, 0xfbef, 0xfaf6, 0xfbef, 0xf9d0, 0xfb08, 0xf9d0, 0xfb08, 0xf9d0, +0xfb08, 0xf8b9, 0xfa28, 0xf8b9, 0xfa28, 0xf732, 0xf8cf, 0xf732, 0xf8cf, 0xf53a, 0xf6f9, +0xf53a, 0xf6f9, 0xf329, 0xf4ff, 0xf329, 0xf4ff, 0xf20a, 0xf3ec, 0xf20a, 0xf3ec, 0xf176, +0xf357, 0xf176, 0xf357, 0xf176, 0xf357, 0xf0fa, 0xf2cf, 0xf0fa, 0xf2cf, 0xf0fa, 0xf2b7, +0xf0fa, 0xf2b7, 0xf155, 0xf2f2, 0xf155, 0xf2f2, 0xf23c, 0xf3ae, 0xf23c, 0xf3ae, 0xf328, +0xf469, 0xf328, 0xf469, 0xf39c, 0xf4a4, 0xf39c, 0xf4a4, 0xf39c, 0xf4a4, 0xf417, 0xf4e2, +0xf417, 0xf4e2, 0xf495, 0xf520, 0xf495, 0xf520, 0xf5ce, 0xf615, 0xf5ce, 0xf615, 0xf7b7, +0xf7bb, 0xf7b7, 0xf7bb, 0xf95f, 0xf920, 0xf95f, 0xf920, 0xf95f, 0xf920, 0xfb12, 0xfa90, +0xfb12, 0xfa90, 0xfce0, 0xfc1f, 0xfce0, 0xfc1f, 0xfec4, 0xfdc6, 0xfec4, 0xfdc6, 0xca, +0xff91, 0xca, 0xff91, 0x22c, 0xbc, 0x22c, 0xbc, 0x371, 0x1cb, 0x371, 0x1cb, +0x371, 0x1cb, 0x545, 0x36d, 0x545, 0x36d, 0x695, 0x48d, 0x695, 0x48d, 0x7af, +0x577, 0x7af, 0x577, 0x8df, 0x67a, 0x8df, 0x67a, 0x98b, 0x6f7, 0x98b, 0x6f7, +0x98b, 0x6f7, 0xa95, 0x7d4, 0xa95, 0x7d4, 0xc2b, 0x93a, 0xc2b, 0x93a, 0xd73, +0xa52, 0xd73, 0xa52, 0xe85, 0xb33, 0xe85, 0xb33, 0xfc5, 0xc40, 0xfc5, 0xc40, +0x1136, 0xd7d, 0x1136, 0xd7d, 0x1136, 0xd7d, 0x12f4, 0xf06, 0x12f4, 0xf06, 0x1555, +0x1134, 0x1555, 0x1134, 0x17d2, 0x137e, 0x17d2, 0x137e, 0x1a5d, 0x15d7, 0x1a5d, 0x15d7, +0x1d4f, 0x189c, 0x1d4f, 0x189c, 0x1f9e, 0x1ac1, 0x1f9e, 0x1ac1, 0x1f9e, 0x1ac1, 0x210c, +0x1c0d, 0x210c, 0x1c0d, 0x21e6, 0x1ccb, 0x21e6, 0x1ccb, 0x22b9, 0x1d8a, 0x22b9, 0x1d8a, +0x23d9, 0x1ea0, 0x23d9, 0x1ea0, 0x24ae, 0x1f76, 0x24ae, 0x1f76, 0x24ae, 0x1f76, 0x2523, +0x1ff6, 0x2523, 0x1ff6, 0x24ed, 0x1fd8, 0x24ed, 0x1fd8, 0x24a8, 0x1fb6, 0x24a8, 0x1fb6, +0x24ac, 0x1fea, 0x24ac, 0x1fea, 0x2421, 0x1f9a, 0x2421, 0x1f9a, 0x22d7, 0x1e96, 0x22d7, +0x1e96, 0x22d7, 0x1e96, 0x211d, 0x1d2c, 0x211d, 0x1d2c, 0x1f2b, 0x1b92, 0x1f2b, 0x1b92, +0x1d11, 0x19d7, 0x1d11, 0x19d7, 0x1ae9, 0x1815, 0x1ae9, 0x1815, 0x188f, 0x1624, 0x188f, +0x1624, 0x168d, 0x148e, 0x168d, 0x148e, 0x168d, 0x148e, 0x154c, 0x13b9, 0x154c, 0x13b9, +0x148e, 0x1364, 0x148e, 0x1364, 0x1400, 0x133d, 0x1400, 0x133d, 0x12c5, 0x1265, 0x12c5, +0x1265, 0x10bd, 0x10b8, 0x10bd, 0x10b8, 0x10bd, 0x10b8, 0xe30, 0xe80, 0xe30, 0xe80, +0xb5b, 0xbf8, 0xb5b, 0xbf8, 0x880, 0x960, 0x880, 0x960, 0x582, 0x69b, 0x582, +0x69b, 0x29c, 0x3e5, 0x29c, 0x3e5, 0xffea, 0x159, 0xffea, 0x159, 0xffea, 0x159, +0xfdc5, 0xff51, 0xfdc5, 0xff51, 0xfbf3, 0xfd93, 0xfbf3, 0xfd93, 0xf9c3, 0xfb6e, 0xf9c3, +0xfb6e, 0xf81d, 0xf9cd, 0xf81d, 0xf9cd, 0xf69c, 0xf84a, 0xf69c, 0xf84a, 0xf580, 0xf725, +0xf580, 0xf725, 0xf580, 0xf725, 0xf55f, 0xf6f7, 0xf55f, 0xf6f7, 0xf4f5, 0xf67c, 0xf4f5, +0xf67c, 0xf48a, 0xf5fd, 0xf48a, 0xf5fd, 0xf41c, 0xf578, 0xf41c, 0xf578, 0xf40d, 0xf54f, +0xf40d, 0xf54f, 0xf40d, 0xf54f, 0xf45a, 0xf581, 0xf45a, 0xf581, 0xf484, 0xf58e, 0xf484, +0xf58e, 0xf4fe, 0xf5ea, 0xf4fe, 0xf5ea, 0xf5aa, 0xf678, 0xf5aa, 0xf678, 0xf682, 0xf72f, +0xf682, 0xf72f, 0xf7a4, 0xf830, 0xf7a4, 0xf830, 0xf7a4, 0xf830, 0xf926, 0xf98f, 0xf926, +0xf98f, 0xf968, 0xf9ad, 0xf968, 0xf9ad, 0xf927, 0xf944, 0xf927, 0xf944, 0xf92f, 0xf925, +0xf92f, 0xf925, 0xf8b2, 0xf87e, 0xf8b2, 0xf87e, 0xf870, 0xf811, 0xf870, 0xf811, 0xf870, +0xf811, 0xf80e, 0xf782, 0xf80e, 0xf782, 0xf820, 0xf767, 0xf820, 0xf767, 0xf831, 0xf74b, +0xf831, 0xf74b, 0xf870, 0xf75e, 0xf870, 0xf75e, 0xf985, 0xf847, 0xf985, 0xf847, 0xf985, +0xf847, 0xfaa9, 0xf942, 0xfaa9, 0xf942, 0xfbf8, 0xfa6a, 0xfbf8, 0xfa6a, 0xfd01, 0xfb51, +0xfd01, 0xfb51, 0xfe37, 0xfc6a, 0xfe37, 0xfc6a, 0xff2f, 0xfd4c, 0xff2f, 0xfd4c, 0xfffa, +0xfe07, 0xfffa, 0xfe07, 0xfffa, 0xfe07, 0x11b, 0xff21, 0x11b, 0xff21, 0x217, 0x1e, +0x217, 0x1e, 0x30f, 0x121, 0x30f, 0x121, 0x3a3, 0x1c8, 0x3a3, 0x1c8, 0x3b4, +0x1f7, 0x3b4, 0x1f7, 0x3d8, 0x243, 0x3d8, 0x243, 0x3d8, 0x243, 0x46f, 0x30a, +0x46f, 0x30a, 0x49e, 0x373, 0x49e, 0x373, 0x408, 0x31e, 0x408, 0x31e, 0x2c7, +0x225, 0x2c7, 0x225, 0xd5, 0x81, 0xd5, 0x81, 0xd5, 0x81, 0xfe7e, 0xfe7e, +0xfe7e, 0xfe7e, 0xfc2f, 0xfc85, 0xfc2f, 0xfc85, 0xfa45, 0xfaf4, 0xfa45, 0xfaf4, 0xf854, +0xf95c, 0xf854, 0xf95c, 0xf6a8, 0xf809, 0xf6a8, 0xf809, 0xf5da, 0xf793, 0xf5da, 0xf793, +0xf5da, 0xf793, 0xf52f, 0xf73d, 0xf52f, 0xf73d, 0xf3de, 0xf63e, 0xf3de, 0xf63e, 0xf28c, +0xf538, 0xf28c, 0xf538, 0xf10a, 0xf3fe, 0xf10a, 0xf3fe, 0xef6d, 0xf2a4, 0xef6d, 0xf2a4, +0xee38, 0xf1ab, 0xee38, 0xf1ab, 0xee38, 0xf1ab, 0xeceb, 0xf095, 0xeceb, 0xf095, 0xebf4, +0xefcf, 0xebf4, 0xefcf, 0xeb57, 0xef5c, 0xeb57, 0xef5c, 0xeb35, 0xef5e, 0xeb35, 0xef5e, +0xeae8, 0xef2f, 0xeae8, 0xef2f, 0xeae8, 0xef2f, 0xe9e6, 0xee46, 0xe9e6, 0xee46, 0xe8ad, +0xed22, 0xe8ad, 0xed22, 0xe7da, 0xec5e, 0xe7da, 0xec5e, 0xe877, 0xed05, 0xe877, 0xed05, +0xe970, 0xee04, 0xe970, 0xee04, 0xe9b8, 0xee4c, 0xe9b8, 0xee4c, 0xe9b8, 0xee4c, 0xe9a3, +0xee35, 0xe9a3, 0xee35, 0xea0c, 0xee96, 0xea0c, 0xee96, 0xeac0, 0xef3e, 0xeac0, 0xef3e, +0xeae2, 0xef4f, 0xeae2, 0xef4f, 0xeaa5, 0xeefc, 0xeaa5, 0xeefc, 0xea1d, 0xee59, 0xea1d, +0xee59, 0xea1d, 0xee59, 0xe9b7, 0xedd3, 0xe9b7, 0xedd3, 0xe9be, 0xedb5, 0xe9be, 0xedb5, +0xea09, 0xedd4, 0xea09, 0xedd4, 0xe9da, 0xed75, 0xe9da, 0xed75, 0xe99e, 0xed04, 0xe99e, +0xed04, 0xe99e, 0xed04, 0xea64, 0xed8f, 0xea64, 0xed8f, 0xebd7, 0xeec3, 0xebd7, 0xeec3, +0xed15, 0xefbe, 0xed15, 0xefbe, 0xedc9, 0xf02b, 0xedc9, 0xf02b, 0xeebe, 0xf0d8, 0xeebe, +0xf0d8, 0xefb0, 0xf17e, 0xefb0, 0xf17e, 0xefb0, 0xf17e, 0xf0ad, 0xf231, 0xf0ad, 0xf231, +0xf1f9, 0xf332, 0xf1f9, 0xf332, 0xf2f8, 0xf3ea, 0xf2f8, 0xf3ea, 0xf42c, 0xf4d8, 0xf42c, +0xf4d8, 0xf5df, 0xf64b, 0xf5df, 0xf64b, 0xf748, 0xf77a, 0xf748, 0xf77a, 0xf748, 0xf77a, +0xf845, 0xf843, 0xf845, 0xf843, 0xf96b, 0xf93d, 0xf96b, 0xf93d, 0xfa4b, 0xf9f9, 0xfa4b, +0xf9f9, 0xfb08, 0xfa9c, 0xfb08, 0xfa9c, 0xfbde, 0xfb61, 0xfbde, 0xfb61, 0xfbde, 0xfb61, +0xfc25, 0xfba2, 0xfc25, 0xfba2, 0xfc05, 0xfb84, 0xfc05, 0xfb84, 0xfc49, 0xfbd5, 0xfc49, +0xfbd5, 0xfcc9, 0xfc6a, 0xfcc9, 0xfc6a, 0xfd33, 0xfcf0, 0xfd33, 0xfcf0, 0xfe14, 0xfdf5, +0xfe14, 0xfdf5, 0xfe14, 0xfdf5, 0xfe6b, 0xfe75, 0xfe6b, 0xfe75, 0xfe35, 0xfe6d, 0xfe35, +0xfe6d, 0xfdf8, 0xfe62, 0xfdf8, 0xfe62, 0xfd23, 0xfdbf, 0xfd23, 0xfdbf, 0xfc44, 0xfd13, +0xfc44, 0xfd13, 0xfc44, 0xfd13, 0xfb40, 0xfc41, 0xfb40, 0xfc41, 0xfa52, 0xfb82, 0xfa52, +0xfb82, 0xfa06, 0xfb62, 0xfa06, 0xfb62, 0xf9e6, 0xfb6a, 0xf9e6, 0xfb6a, 0xf95b, 0xfb01, +0xf95b, 0xfb01, 0xf84f, 0xfa10, 0xf84f, 0xfa10, 0xf84f, 0xfa10, 0xf72b, 0xf903, 0xf72b, +0xf903, 0xf617, 0xf7ff, 0xf617, 0xf7ff, 0xf595, 0xf785, 0xf595, 0xf785, 0xf55a, 0xf74e, +0xf55a, 0xf74e, 0xf4ed, 0xf6de, 0xf4ed, 0xf6de, 0xf508, 0xf6f1, 0xf508, 0xf6f1, 0xf508, +0xf6f1, 0xf58a, 0xf768, 0xf58a, 0xf768, 0xf5ea, 0xf7b9, 0xf5ea, 0xf7b9, 0xf60c, 0xf7c7, +0xf60c, 0xf7c7, 0xf5ef, 0xf796, 0xf5ef, 0xf796, 0xf5ea, 0xf77b, 0xf5ea, 0xf77b, 0xf5ea, +0xf77b, 0xf648, 0xf7c3, 0xf648, 0xf7c3, 0xf782, 0xf8e6, 0xf782, 0xf8e6, 0xf8dd, 0xfa29, +0xf8dd, 0xfa29, 0xf9dc, 0xfb11, 0xf9dc, 0xfb11, 0xfadd, 0xfbfb, 0xfadd, 0xfbfb, 0xfba5, +0xfcac, 0xfba5, 0xfcac, 0xfba5, 0xfcac, 0xfc4c, 0xfd3b, 0xfc4c, 0xfd3b, 0xfc3a, 0xfd11, +0xfc3a, 0xfd11, 0xfbfb, 0xfcb7, 0xfbfb, 0xfcb7, 0xfbdd, 0xfc7c, 0xfbdd, 0xfc7c, 0xfba7, +0xfc27, 0xfba7, 0xfc27, 0xfc3d, 0xfc9a, 0xfc3d, 0xfc9a, 0xfc3d, 0xfc9a, 0xfc7d, 0xfcb2, +0xfc7d, 0xfcb2, 0xfc69, 0xfc71, 0xfc69, 0xfc71, 0xfd2e, 0xfd04, 0xfd2e, 0xfd04, 0xfe88, +0xfe26, 0xfe88, 0xfe26, 0xffbc, 0xff1d, 0xffbc, 0xff1d, 0xffbc, 0xff1d, 0xd4, 0xfff2, +0xd4, 0xfff2, 0x272, 0x149, 0x272, 0x149, 0x3fc, 0x287, 0x3fc, 0x287, 0x537, +0x372, 0x537, 0x372, 0x6ae, 0x498, 0x6ae, 0x498, 0x8a9, 0x640, 0x8a9, 0x640, +0x8a9, 0x640, 0xab5, 0x7fa, 0xab5, 0x7fa, 0xcff, 0x9f4, 0xcff, 0x9f4, 0xf97, +0xc41, 0xf97, 0xc41, 0x1168, 0xdcd, 0x1168, 0xdcd, 0x12dc, 0xf02, 0x12dc, 0xf02, +0x1466, 0x1057, 0x1466, 0x1057, 0x1466, 0x1057, 0x158f, 0x1155, 0x158f, 0x1155, 0x1679, +0x1220, 0x1679, 0x1220, 0x174e, 0x12e2, 0x174e, 0x12e2, 0x1794, 0x1322, 0x1794, 0x1322, +0x1732, 0x12c8, 0x1732, 0x12c8, 0x1732, 0x12c8, 0x169e, 0x1249, 0x169e, 0x1249, 0x1696, +0x1262, 0x1696, 0x1262, 0x16d1, 0x12cc, 0x16d1, 0x12cc, 0x167d, 0x12b0, 0x167d, 0x12b0, +0x15d1, 0x1247, 0x15d1, 0x1247, 0x1481, 0x1142, 0x1481, 0x1142, 0x1481, 0x1142, 0x1321, +0x1033, 0x1321, 0x1033, 0x123f, 0xfa8, 0x123f, 0xfa8, 0x1145, 0xf05, 0x1145, 0xf05, +0x1061, 0xe7a, 0x1061, 0xe7a, 0x1039, 0xeaa, 0x1039, 0xeaa, 0x1084, 0xf4a, 0x1084, +0xf4a, 0x1084, 0xf4a, 0x1044, 0xf5a, 0x1044, 0xf5a, 0xf81, 0xee1, 0xf81, 0xee1, +0xdfd, 0xda0, 0xdfd, 0xda0, 0xbc8, 0xba7, 0xbc8, 0xba7, 0x9f9, 0xa0b, 0x9f9, +0xa0b, 0x9f9, 0xa0b, 0x8c4, 0x902, 0x8c4, 0x902, 0x74c, 0x7ad, 0x74c, 0x7ad, +0x5c9, 0x646, 0x5c9, 0x646, 0x521, 0x5b4, 0x521, 0x5b4, 0x4ac, 0x54e, 0x4ac, +0x54e, 0x415, 0x4c2, 0x415, 0x4c2, 0x415, 0x4c2, 0x2e7, 0x39c, 0x2e7, 0x39c, +0x18f, 0x24a, 0x18f, 0x24a, 0xee, 0x1ae, 0xee, 0x1ae, 0x51, 0x116, 0x51, +0x116, 0x46, 0x110, 0x46, 0x110, 0x24, 0xf6, 0x24, 0xf6, 0x24, 0xf6, +0xffc1, 0x9f, 0xffc1, 0x9f, 0x3b, 0x127, 0x3b, 0x127, 0x79, 0x177, 0x79, +0x177, 0x6c, 0x17f, 0x6c, 0x17f, 0x20, 0x14a, 0x20, 0x14a, 0x20, 0x14a, +0xff4a, 0x8c, 0xff4a, 0x8c, 0xfe04, 0xff61, 0xfe04, 0xff61, 0xfcc8, 0xfe3f, 0xfcc8, +0xfe3f, 0xfb7e, 0xfd0e, 0xfb7e, 0xfd0e, 0xf95c, 0xfb03, 0xf95c, 0xfb03, 0xf7ea, 0xf9a3, +0xf7ea, 0xf9a3, 0xf7ea, 0xf9a3, 0xf740, 0xf907, 0xf740, 0xf907, 0xf67d, 0xf84c, 0xf67d, +0xf84c, 0xf5cc, 0xf79b, 0xf5cc, 0xf79b, 0xf505, 0xf6ce, 0xf505, 0xf6ce, 0xf431, 0xf5ea, +0xf431, 0xf5ea, 0xf344, 0xf4e5, 0xf344, 0xf4e5, 0xf344, 0xf4e5, 0xf330, 0xf4b2, 0xf330, +0xf4b2, 0xf3c4, 0xf51e, 0xf3c4, 0xf51e, 0xf421, 0xf54d, 0xf421, 0xf54d, 0xf4d4, 0xf5ca, +0xf4d4, 0xf5ca, 0xf5a4, 0xf661, 0xf5a4, 0xf661, 0xf5a4, 0xf661, 0xf647, 0xf6c7, 0xf647, +0xf6c7, 0xf6df, 0xf71f, 0xf6df, 0xf71f, 0xf7ab, 0xf7ac, 0xf7ab, 0xf7ac, 0xf91f, 0xf8e3, +0xf91f, 0xf8e3, 0xfad1, 0xfa5a, 0xfad1, 0xfa5a, 0xfcf1, 0xfc44, 0xfcf1, 0xfc44, 0xfcf1, +0xfc44, 0xff15, 0xfe39, 0xff15, 0xfe39, 0x77, 0xff73, 0x77, 0xff73, 0x1a8, 0x85, +0x1a8, 0x85, 0x263, 0x129, 0x263, 0x129, 0x2a2, 0x15b, 0x2a2, 0x15b, 0x218, +0xcc, 0x218, 0xcc, 0x218, 0xcc, 0x111, 0xffca, 0x111, 0xffca, 0xfff3, 0xfeba, +0xfff3, 0xfeba, 0xfe41, 0xfd1d, 0xfe41, 0xfd1d, 0xfce2, 0xfbd8, 0xfce2, 0xfbd8, 0xfb39, +0xfa4f, 0xfb39, 0xfa4f, 0xfb39, 0xfa4f, 0xf9a8, 0xf8e0, 0xf9a8, 0xf8e0, 0xf921, 0xf87d, +0xf921, 0xf87d, 0xf8c4, 0xf844, 0xf8c4, 0xf844, 0xf8f4, 0xf896, 0xf8f4, 0xf896, 0xf8dc, +0xf89c, 0xf8dc, 0xf89c, 0xf81d, 0xf7f7, 0xf81d, 0xf7f7, 0xf81d, 0xf7f7, 0xf7a2, 0xf78f, +0xf7a2, 0xf78f, 0xf77a, 0xf774, 0xf77a, 0xf774, 0xf7d4, 0xf7d3, 0xf7d4, 0xf7d3, 0xf812, +0xf80e, 0xf812, 0xf80e, 0xf874, 0xf865, 0xf874, 0xf865, 0xf994, 0xf972, 0xf994, 0xf972, +0xf994, 0xf972, 0xfb5d, 0xfb21, 0xfb5d, 0xfb21, 0xfd16, 0xfcba, 0xfd16, 0xfcba, 0xfe1c, +0xfd9a, 0xfe1c, 0xfd9a, 0xff37, 0xfe8c, 0xff37, 0xfe8c, 0x3a, 0xff62, 0x3a, 0xff62, +0x3a, 0xff62, 0x11c, 0x16, 0x11c, 0x16, 0x293, 0x160, 0x293, 0x160, 0x40e, +0x2ae, 0x40e, 0x2ae, 0x50e, 0x384, 0x50e, 0x384, 0x659, 0x4a8, 0x659, 0x4a8, +0x7a5, 0x5d2, 0x7a5, 0x5d2, 0x7a5, 0x5d2, 0x896, 0x6a7, 0x896, 0x6a7, 0x974, +0x76e, 0x974, 0x76e, 0xa6c, 0x855, 0xa6c, 0x855, 0xba0, 0x97e, 0xba0, 0x97e, +0xc65, 0xa3c, 0xc65, 0xa3c, 0xc65, 0xa3c, 0xd26, 0xafc, 0xd26, 0xafc, 0xdbe, +0xb96, 0xdbe, 0xb96, 0xddb, 0xbb9, 0xddb, 0xbb9, 0xdff, 0xbe5, 0xdff, 0xbe5, +0xe93, 0xc82, 0xe93, 0xc82, 0xedb, 0xcd4, 0xedb, 0xcd4, 0xedb, 0xcd4, 0xf38, +0xd39, 0xf38, 0xd39, 0x1044, 0xe4c, 0x1044, 0xe4c, 0x1057, 0xe64, 0x1057, 0xe64, +0x10da, 0xee9, 0x10da, 0xee9, 0x11b1, 0xfbe, 0x11b1, 0xfbe, 0x12a2, 0x10aa, 0x12a2, +0x10aa, 0x12a2, 0x10aa, 0x13bb, 0x11bc, 0x13bb, 0x11bc, 0x1483, 0x1278, 0x1483, 0x1278, +0x15e8, 0x13d0, 0x15e8, 0x13d0, 0x168c, 0x1465, 0x168c, 0x1465, 0x1710, 0x14d9, 0x1710, +0x14d9, 0x1710, 0x14d9, 0x17a8, 0x1561, 0x17a8, 0x1561, 0x181f, 0x15c8, 0x181f, 0x15c8, +0x1871, 0x160d, 0x1871, 0x160d, 0x18f1, 0x1682, 0x18f1, 0x1682, 0x197c, 0x1706, 0x197c, +0x1706, 0x192c, 0x16b4, 0x192c, 0x16b4, 0x192c, 0x16b4, 0x1950, 0x16db, 0x1950, 0x16db, +0x1945, 0x16d8, 0x1945, 0x16d8, 0x18f1, 0x1692, 0x18f1, 0x1692, 0x1887, 0x163b, 0x1887, +0x163b, 0x1807, 0x15d3, 0x1807, 0x15d3, 0x177e, 0x1568, 0x177e, 0x1568, 0x177e, 0x1568, +0x1694, 0x149f, 0x1694, 0x149f, 0x1598, 0x13c9, 0x1598, 0x13c9, 0x141e, 0x1276, 0x141e, +0x1276, 0x12e9, 0x116a, 0x12e9, 0x116a, 0x12ab, 0x1154, 0x12ab, 0x1154, 0x12ab, 0x1154, +0x1270, 0x1141, 0x1270, 0x1141, 0x121e, 0x1115, 0x121e, 0x1115, 0x11c4, 0x10de, 0x11c4, +0x10de, 0x10b5, 0xfee, 0x10b5, 0xfee, 0xf5a, 0xead, 0xf5a, 0xead, 0xda6, 0xd0e, +0xda6, 0xd0e, 0xda6, 0xd0e, 0xc0f, 0xb87, 0xc0f, 0xb87, 0xa7a, 0x9fd, 0xa7a, +0x9fd, 0x8fe, 0x885, 0x8fe, 0x885, 0x7d1, 0x758, 0x7d1, 0x758, 0x695, 0x616, +0x695, 0x616, 0x640, 0x5b8, 0x640, 0x5b8, 0x640, 0x5b8, 0x5bb, 0x527, 0x5bb, +0x527, 0x547, 0x4a4, 0x547, 0x4a4, 0x543, 0x48f, 0x543, 0x48f, 0x528, 0x464, +0x528, 0x464, 0x56b, 0x497, 0x56b, 0x497, 0x56b, 0x497, 0x592, 0x4b0, 0x592, +0x4b0, 0x540, 0x451, 0x540, 0x451, 0x50a, 0x412, 0x50a, 0x412, 0x51c, 0x41d, +0x51c, 0x41d, 0x4fd, 0x3fb, 0x4fd, 0x3fb, 0x4e3, 0x3e3, 0x4e3, 0x3e3, 0x4e3, +0x3e3, 0x459, 0x35d, 0x459, 0x35d, 0x373, 0x27f, 0x373, 0x27f, 0x337, 0x24e, +0x337, 0x24e, 0x371, 0x297, 0x371, 0x297, 0x253, 0x18a, 0x253, 0x18a, 0x24b, +0x194, 0x24b, 0x194, 0x24b, 0x194, 0x1fb, 0x157, 0x1fb, 0x157, 0xbb, 0x2b, +0xbb, 0x2b, 0x192, 0x117, 0x192, 0x117, 0x2a, 0xffc3, 0x2a, 0xffc3, 0xff22, +0xfece, 0xff22, 0xfece, 0xff22, 0xfece, 0xfe5a, 0xfe18, 0xfe5a, 0xfe18, 0xfd4e, 0xfd1f, +0xfd4e, 0xfd1f, 0xfdca, 0xfdab, 0xfdca, 0xfdab, 0xfd4d, 0xfd3f, 0xfd4d, 0xfd3f, 0xfe09, +0xfe0d, 0xfe09, 0xfe0d, 0xfe9a, 0xfeb0, 0xfe9a, 0xfeb0, 0xfe9a, 0xfeb0, 0xfeb3, 0xfedc, +0xfeb3, 0xfedc, 0xfdcc, 0xfe0a, 0xfdcc, 0xfe0a, 0xfd05, 0xfd5b, 0xfd05, 0xfd5b, 0xfc74, +0xfce4, 0xfc74, 0xfce4, 0xfb0a, 0xfb99, 0xfb0a, 0xfb99, 0xfb35, 0xfbe6, 0xfb35, 0xfbe6, +0xfb35, 0xfbe6, 0xfa34, 0xfb0c, 0xfa34, 0xfb0c, 0xf899, 0xf99c, 0xf899, 0xf99c, 0xf71f, +0xf852, 0xf71f, 0xf852, 0xf61e, 0xf784, 0xf61e, 0xf784, 0xf5c9, 0xf768, 0xf5c9, 0xf768, +0xf5c9, 0xf768, 0xf40e, 0xf5e6, 0xf40e, 0xf5e6, 0xf299, 0xf4af, 0xf299, 0xf4af, 0xf0e8, +0xf33b, 0xf0e8, 0xf33b, 0xeeeb, 0xf17c, 0xeeeb, 0xf17c, 0xed14, 0xefe0, 0xed14, 0xefe0, +0xea91, 0xed97, 0xea91, 0xed97, 0xea91, 0xed97, 0xe963, 0xec9f, 0xe963, 0xec9f, 0xe7ff, +0xeb6a, 0xe7ff, 0xeb6a, 0xe77f, 0xeb14, 0xe77f, 0xeb14, 0xe82f, 0xebe6, 0xe82f, 0xebe6, +0xe778, 0xeb48, 0xe778, 0xeb48, 0xe7d2, 0xebb4, 0xe7d2, 0xebb4, 0xe7d2, 0xebb4, 0xe74c, +0xeb35, 0xe74c, 0xeb35, 0xe736, 0xeb1d, 0xe736, 0xeb1d, 0xe726, 0xeb02, 0xe726, 0xeb02, +0xe5de, 0xe9a6, 0xe5de, 0xe9a6, 0xe5bd, 0xe96a, 0xe5bd, 0xe96a, 0xe5bd, 0xe96a, 0xe52e, +0xe8b9, 0xe52e, 0xe8b9, 0xe52a, 0xe88c, 0xe52a, 0xe88c, 0xe50c, 0xe840, 0xe50c, 0xe840, +0xe579, 0xe87c, 0xe579, 0xe87c, 0xe58b, 0xe85c, 0xe58b, 0xe85c, 0xe644, 0xe8e1, 0xe644, +0xe8e1, 0xe644, 0xe8e1, 0xe817, 0xea81, 0xe817, 0xea81, 0xe9a1, 0xebdb, 0xe9a1, 0xebdb, +0xec3d, 0xee48, 0xec3d, 0xee48, 0xed7f, 0xef60, 0xed7f, 0xef60, 0xef6a, 0xf124, 0xef6a, +0xf124, 0xf1e6, 0xf37f, 0xf1e6, 0xf37f, 0xf1e6, 0xf37f, 0xf426, 0xf5a2, 0xf426, 0xf5a2, +0xf63d, 0xf7a0, 0xf63d, 0xf7a0, 0xf786, 0xf8d5, 0xf786, 0xf8d5, 0xf889, 0xf9c8, 0xf889, +0xf9c8, 0xf905, 0xfa37, 0xf905, 0xfa37, 0xf905, 0xfa37, 0xf963, 0xfa8a, 0xf963, 0xfa8a, +0xf9a1, 0xfabf, 0xf9a1, 0xfabf, 0xf9b0, 0xfac5, 0xf9b0, 0xfac5, 0xf926, 0xfa32, 0xf926, +0xfa32, 0xfa9b, 0xfb9d, 0xfa9b, 0xfb9d, 0xfb05, 0xfbfb, 0xfb05, 0xfbfb, 0xfb05, 0xfbfb, +0xfab6, 0xfb9e, 0xfab6, 0xfb9e, 0xfae8, 0xfbc1, 0xfae8, 0xfbc1, 0xf9e1, 0xfaa9, 0xf9e1, +0xfaa9, 0xfa91, 0xfb45, 0xfa91, 0xfb45, 0xfa97, 0xfb36, 0xfa97, 0xfb36, 0xfaf0, 0xfb7a, +0xfaf0, 0xfb7a, 0xfaf0, 0xfb7a, 0xfbf3, 0xfc69, 0xfbf3, 0xfc69, 0xfcaf, 0xfd12, 0xfcaf, +0xfd12, 0xfdb7, 0xfe0a, 0xfdb7, 0xfe0a, 0xff5a, 0xffa2, 0xff5a, 0xffa2, 0x47, 0x89, +0x47, 0x89, 0x47, 0x89, 0xffc5, 0x7, 0xffc5, 0x7, 0x41, 0x8c, 0x41, +0x8c, 0xffe0, 0x3c, 0xffe0, 0x3c, 0xd, 0x84, 0xd, 0x84, 0xffac, 0x48, +0xffac, 0x48, 0xfe40, 0xff0b, 0xfe40, 0xff0b, 0xfe40, 0xff0b, 0xfce5, 0xfde8, 0xfce5, +0xfde8, 0xfb36, 0xfc79, 0xfb36, 0xfc79, 0xfa81, 0xfc0e, 0xfa81, 0xfc0e, 0xf8f9, 0xfad6, +0xf8f9, 0xfad6, 0xf788, 0xf9b9, 0xf788, 0xf9b9, 0xf788, 0xf9b9, 0xf55f, 0xf7e7, 0xf55f, +0xf7e7, 0xf2b2, 0xf593, 0xf2b2, 0xf593, 0xf112, 0xf44a, 0xf112, 0xf44a, 0xeebd, 0xf249, +0xeebd, 0xf249, 0xecab, 0xf085, 0xecab, 0xf085, 0xeae5, 0xef04, 0xeae5, 0xef04, 0xeae5, +0xef04, 0xe8e8, 0xed42, 0xe8e8, 0xed42, 0xe86f, 0xecf9, 0xe86f, 0xecf9, 0xe7ab, 0xec58, +0xe7ab, 0xec58, 0xe677, 0xeb38, 0xe677, 0xeb38, 0xe647, 0xeb0e, 0xe647, 0xeb0e, 0xe631, +0xeaee, 0xe631, 0xeaee, 0xe631, 0xeaee, 0xe6fc, 0xeb9f, 0xe6fc, 0xeb9f, 0xe79b, 0xec16, +0xe79b, 0xec16, 0xe83d, 0xec83, 0xe83d, 0xec83, 0xe8e1, 0xece4, 0xe8e1, 0xece4, 0xe9bb, +0xed71, 0xe9bb, 0xed71, 0xe9bb, 0xed71, 0xeb40, 0xeea1, 0xeb40, 0xeea1, 0xecdd, 0xefe1, +0xecdd, 0xefe1, 0xee46, 0xf0e8, 0xee46, 0xf0e8, 0xeef3, 0xf130, 0xeef3, 0xf130, 0xf0cf, +0xf2a7, 0xf0cf, 0xf2a7, 0xf2b7, 0xf429, 0xf2b7, 0xf429, 0xf2b7, 0xf429, 0xf49e, 0xf5af, +0xf49e, 0xf5af, 0xf6aa, 0xf75c, 0xf6aa, 0xf75c, 0xf815, 0xf86e, 0xf815, 0xf86e, 0xf9c2, +0xf9c8, 0xf9c2, 0xf9c8, 0xfba6, 0xfb5f, 0xfba6, 0xfb5f, 0xfd3f, 0xfcb0, 0xfd3f, 0xfcb0, +0xfd3f, 0xfcb0, 0xfdd3, 0xfd04, 0xfdd3, 0xfd04, 0xfe87, 0xfd7c, 0xfe87, 0xfd7c, 0xff84, +0xfe43, 0xff84, 0xfe43, 0x12f, 0xffbb, 0x12f, 0xffbb, 0x30f, 0x16b, 0x30f, 0x16b, +0x30f, 0x16b, 0x4cc, 0x2fa, 0x4cc, 0x2fa, 0x6e0, 0x4df, 0x6e0, 0x4df, 0x8e3, +0x6b4, 0x8e3, 0x6b4, 0xb19, 0x8ba, 0xb19, 0x8ba, 0xd51, 0xac0, 0xd51, 0xac0, +0xed0, 0xc0b, 0xed0, 0xc0b, 0xed0, 0xc0b, 0xffc, 0xd00, 0xffc, 0xd00, 0x11d3, +0xe9f, 0x11d3, 0xe9f, 0x13cd, 0x105f, 0x13cd, 0x105f, 0x15ed, 0x1245, 0x15ed, 0x1245, +0x1780, 0x139f, 0x1780, 0x139f, 0x182d, 0x1415, 0x182d, 0x1415, 0x182d, 0x1415, 0x183c, +0x13f1, 0x183c, 0x13f1, 0x18e5, 0x146d, 0x18e5, 0x146d, 0x19b8, 0x151b, 0x19b8, 0x151b, +0x19b3, 0x14f9, 0x19b3, 0x14f9, 0x19ff, 0x1535, 0x19ff, 0x1535, 0x19ff, 0x1535, 0x19dd, +0x150e, 0x19dd, 0x150e, 0x19ee, 0x152a, 0x19ee, 0x152a, 0x1a6d, 0x15c2, 0x1a6d, 0x15c2, +0x1a81, 0x15ff, 0x1a81, 0x15ff, 0x194e, 0x1505, 0x194e, 0x1505, 0x181d, 0x141c, 0x181d, +0x141c, 0x181d, 0x141c, 0x1732, 0x1388, 0x1732, 0x1388, 0x15da, 0x1295, 0x15da, 0x1295, +0x148a, 0x11b4, 0x148a, 0x11b4, 0x1257, 0xffb, 0x1257, 0xffb, 0x1080, 0xea6, 0x1080, +0xea6, 0xe06, 0xcb3, 0xe06, 0xcb3, 0xe06, 0xcb3, 0xb78, 0xaae, 0xb78, 0xaae, +0x999, 0x957, 0x999, 0x957, 0x79f, 0x7e2, 0x79f, 0x7e2, 0x603, 0x6c6, 0x603, +0x6c6, 0x416, 0x54f, 0x416, 0x54f, 0x416, 0x54f, 0x1a1, 0x346, 0x1a1, 0x346, +0xfedf, 0xe3, 0xfedf, 0xe3, 0xfca2, 0xfef8, 0xfca2, 0xfef8, 0xfa3c, 0xfcd4, 0xfa3c, +0xfcd4, 0xf7fb, 0xfac7, 0xf7fb, 0xfac7, 0xf65c, 0xf94a, 0xf65c, 0xf94a, 0xf65c, 0xf94a, +0xf4d3, 0xf7d5, 0xf4d3, 0xf7d5, 0xf38a, 0xf691, 0xf38a, 0xf691, 0xf305, 0xf604, 0xf305, +0xf604, 0xf305, 0xf5ee, 0xf305, 0xf5ee, 0xf367, 0xf631, 0xf367, 0xf631, 0xf47f, 0xf722, +0xf47f, 0xf722, 0xf47f, 0xf722, 0xf59c, 0xf810, 0xf59c, 0xf810, 0xf70f, 0xf950, 0xf70f, +0xf950, 0xf871, 0xfa7d, 0xf871, 0xfa7d, 0xfa06, 0xfbdc, 0xfa06, 0xfbdc, 0xfbf4, 0xfd94, +0xfbf4, 0xfd94, 0xfbf4, 0xfd94, 0xfd3c, 0xfea8, 0xfd3c, 0xfea8, 0xfdde, 0xff1a, 0xfdde, +0xff1a, 0xfedf, 0xffed, 0xfedf, 0xffed, 0xffcb, 0xb1, 0xffcb, 0xb1, 0xffb2, 0x73, +0xffb2, 0x73, 0xff72, 0x12, 0xff72, 0x12, 0xff72, 0x12, 0xff19, 0xff9a, 0xff19, +0xff9a, 0xfeda, 0xff40, 0xfeda, 0xff40, 0xfe8d, 0xfed8, 0xfe8d, 0xfed8, 0xfe63, 0xfe94, +0xfe63, 0xfe94, 0xfe1e, 0xfe34, 0xfe1e, 0xfe34, 0xfe24, 0xfe1c, 0xfe24, 0xfe1c, 0xfe24, +0xfe1c, 0xfecd, 0xfea5, 0xfecd, 0xfea5, 0xff84, 0xff38, 0xff84, 0xff38, 0xca, 0x55, +0xca, 0x55, 0x20d, 0x16c, 0x20d, 0x16c, 0x390, 0x2bd, 0x390, 0x2bd, 0x390, +0x2bd, 0x51b, 0x412, 0x51b, 0x412, 0x692, 0x550, 0x692, 0x550, 0x809, 0x68a, +0x809, 0x68a, 0x8f1, 0x734, 0x8f1, 0x734, 0x9ca, 0x7d0, 0x9ca, 0x7d0, 0xafc, +0x8c6, 0xafc, 0x8c6, 0xafc, 0x8c6, 0xc53, 0x9e5, 0xc53, 0x9e5, 0xd11, 0xa70, +0xd11, 0xa70, 0xda5, 0xad8, 0xda5, 0xad8, 0xe7f, 0xb8f, 0xe7f, 0xb8f, 0xee1, +0xbd7, 0xee1, 0xbd7, 0xede, 0xbc6, 0xede, 0xbc6, 0xede, 0xbc6, 0xe89, 0xb70, +0xe89, 0xb70, 0xd76, 0xa69, 0xd76, 0xa69, 0xc72, 0x97e, 0xc72, 0x97e, 0xb73, +0x8a5, 0xb73, 0x8a5, 0xa0d, 0x771, 0xa0d, 0x771, 0xa0d, 0x771, 0x806, 0x5a9, +0x806, 0x5a9, 0x54e, 0x339, 0x54e, 0x339, 0x2f7, 0x132, 0x2f7, 0x132, 0xf5, +0xff88, 0xf5, 0xff88, 0xff2a, 0xfe18, 0xff2a, 0xfe18, 0xfdcc, 0xfd18, 0xfdcc, 0xfd18, +0xfdcc, 0xfd18, 0xfca8, 0xfc52, 0xfca8, 0xfc52, 0xfb68, 0xfb6c, 0xfb68, 0xfb6c, 0xfa14, +0xfa6e, 0xfa14, 0xfa6e, 0xf863, 0xf90d, 0xf863, 0xf90d, 0xf651, 0xf741, 0xf651, 0xf741, +0xf494, 0xf5bf, 0xf494, 0xf5bf, 0xf494, 0xf5bf, 0xf31a, 0xf477, 0xf31a, 0xf477, 0xf1b9, +0xf33a, 0xf1b9, 0xf33a, 0xf045, 0xf1dd, 0xf045, 0xf1dd, 0xef48, 0xf0ec, 0xef48, 0xf0ec, +0xeeda, 0xf07d, 0xeeda, 0xf07d, 0xeeda, 0xf07d, 0xeec6, 0xf05b, 0xeec6, 0xf05b, 0xef37, +0xf0b5, 0xef37, 0xf0b5, 0xefdf, 0xf13b, 0xefdf, 0xf13b, 0xf0a2, 0xf1d4, 0xf0a2, 0xf1d4, +0xf1a1, 0xf2a2, 0xf1a1, 0xf2a2, 0xf348, 0xf413, 0xf348, 0xf413, 0xf348, 0xf413, 0xf4ff, +0xf590, 0xf4ff, 0xf590, 0xf65c, 0xf6b1, 0xf65c, 0xf6b1, 0xf7e7, 0xf7ff, 0xf7e7, 0xf7ff, +0xf971, 0xf94b, 0xf971, 0xf94b, 0xfb3e, 0xfadd, 0xfb3e, 0xfadd, 0xfb3e, 0xfadd, 0xfd5f, +0xfcc5, 0xfd5f, 0xfcc5, 0xff7b, 0xfea9, 0xff7b, 0xfea9, 0x175, 0x70, 0x175, 0x70, +0x350, 0x21a, 0x350, 0x21a, 0x4e8, 0x383, 0x4e8, 0x383, 0x61b, 0x489, 0x61b, +0x489, 0x61b, 0x489, 0x725, 0x56a, 0x725, 0x56a, 0x75d, 0x579, 0x75d, 0x579, +0x7af, 0x5a3, 0x7af, 0x5a3, 0x8b2, 0x67d, 0x8b2, 0x67d, 0xa06, 0x7aa, 0xa06, +0x7aa, 0xbf7, 0x971, 0xbf7, 0x971, 0xbf7, 0x971, 0xd79, 0xac9, 0xd79, 0xac9, +0xf4f, 0xc74, 0xf4f, 0xc74, 0x11c5, 0xebc, 0x11c5, 0xebc, 0x1381, 0x104b, 0x1381, +0x104b, 0x14c4, 0x1160, 0x14c4, 0x1160, 0x14c4, 0x1160, 0x1642, 0x12b1, 0x1642, 0x12b1, +0x17b3, 0x13f4, 0x17b3, 0x13f4, 0x19b9, 0x15d1, 0x19b9, 0x15d1, 0x1c42, 0x1832, 0x1c42, +0x1832, 0x1e18, 0x19e6, 0x1e18, 0x19e6, 0x2004, 0x1bb5, 0x2004, 0x1bb5, 0x2004, 0x1bb5, +0x217b, 0x1d16, 0x217b, 0x1d16, 0x2297, 0x1e25, 0x2297, 0x1e25, 0x236b, 0x1ef4, 0x236b, +0x1ef4, 0x2308, 0x1e96, 0x2308, 0x1e96, 0x2289, 0x1e27, 0x2289, 0x1e27, 0x227c, 0x1e35, +0x227c, 0x1e35, 0x227c, 0x1e35, 0x2244, 0x1e22, 0x2244, 0x1e22, 0x2160, 0x1d6e, 0x2160, +0x1d6e, 0x1fff, 0x1c48, 0x1fff, 0x1c48, 0x1e25, 0x1ab1, 0x1e25, 0x1ab1, 0x1bd3, 0x18ab, +0x1bd3, 0x18ab, 0x1bd3, 0x18ab, 0x195f, 0x168a, 0x195f, 0x168a, 0x16ee, 0x1473, 0x16ee, +0x1473, 0x14b6, 0x1297, 0x14b6, 0x1297, 0x135d, 0x119f, 0x135d, 0x119f, 0x127f, 0x1122, +0x127f, 0x1122, 0x1180, 0x1083, 0x1180, 0x1083, 0x1180, 0x1083, 0x1041, 0xfa4, 0x1041, +0xfa4, 0xe69, 0xe27, 0xe69, 0xe27, 0xcb5, 0xcc9, 0xcb5, 0xcc9, 0xb28, 0xb8e, +0xb28, 0xb8e, 0x959, 0xa09, 0x959, 0xa09, 0x77e, 0x871, 0x77e, 0x871, 0x77e, +0x871, 0x590, 0x6c0, 0x590, 0x6c0, 0x370, 0x4d4, 0x370, 0x4d4, 0x170, 0x301, +0x170, 0x301, 0xff70, 0x127, 0xff70, 0x127, 0xfdf5, 0xffc9, 0xfdf5, 0xffc9, 0xfdf5, +0xffc9, 0xfd08, 0xfef4, 0xfd08, 0xfef4, 0xfc02, 0xfe01, 0xfc02, 0xfe01, 0xfb8f, 0xfd9b, +0xfb8f, 0xfd9b, 0xfb37, 0xfd4b, 0xfb37, 0xfd4b, 0xfae7, 0xfcff, 0xfae7, 0xfcff, 0xfa59, +0xfc73, 0xfa59, 0xfc73, 0xfa59, 0xfc73, 0xf9c7, 0xfbdf, 0xf9c7, 0xfbdf, 0xf995, 0xfba8, +0xf995, 0xfba8, 0xf8d8, 0xfae4, 0xf8d8, 0xfae4, 0xf833, 0xfa35, 0xf833, 0xfa35, 0xf7ea, +0xf9e0, 0xf7ea, 0xf9e0, 0xf7a4, 0xf98d, 0xf7a4, 0xf98d, 0xf7a4, 0xf98d, 0xf7aa, 0xf982, +0xf7aa, 0xf982, 0xf7d6, 0xf99b, 0xf7d6, 0xf99b, 0xf7f2, 0xf9a1, 0xf7f2, 0xf9a1, 0xf86d, +0xfa02, 0xf86d, 0xfa02, 0xf8bb, 0xfa33, 0xf8bb, 0xfa33, 0xf8bb, 0xfa33, 0xf95e, 0xfab6, +0xf95e, 0xfab6, 0xfa88, 0xfbbc, 0xfa88, 0xfbbc, 0xfb49, 0xfc55, 0xfb49, 0xfc55, 0xfc44, +0xfd25, 0xfc44, 0xfd25, 0xfcc9, 0xfd7b, 0xfcc9, 0xfd7b, 0xfd28, 0xfdaa, 0xfd28, 0xfdaa, +0xfd28, 0xfdaa, 0xfe26, 0xfe76, 0xfe26, 0xfe76, 0xfefb, 0xff18, 0xfefb, 0xff18, 0xf, +0xfff8, 0xf, 0xfff8, 0x100, 0xb6, 0x100, 0xb6, 0x1b8, 0x13d, 0x1b8, 0x13d, +0x2e3, 0x23a, 0x2e3, 0x23a, 0x2e3, 0x23a, 0x3a8, 0x2d5, 0x3a8, 0x2d5, 0x438, +0x340, 0x438, 0x340, 0x41a, 0x302, 0x41a, 0x302, 0x37f, 0x24f, 0x37f, 0x24f, +0x34c, 0x20b, 0x34c, 0x20b, 0x34c, 0x20b, 0x2b7, 0x16c, 0x2b7, 0x16c, 0x2c1, +0x174, 0x2c1, 0x174, 0x2cb, 0x184, 0x2cb, 0x184, 0x348, 0x20f, 0x348, 0x20f, +0x3d0, 0x2ac, 0x3d0, 0x2ac, 0x2fe, 0x1f6, 0x2fe, 0x1f6, 0x2fe, 0x1f6, 0x21f, +0x139, 0x21f, 0x139, 0x12, 0xff53, 0x12, 0xff53, 0xfe34, 0xfda0, 0xfe34, 0xfda0, +0xfca2, 0xfc3c, 0xfca2, 0xfc3c, 0xfaf8, 0xfac1, 0xfaf8, 0xfac1, 0xf982, 0xf97c, 0xf982, +0xf97c, 0xf982, 0xf97c, 0xf7af, 0xf7da, 0xf7af, 0xf7da, 0xf71e, 0xf778, 0xf71e, 0xf778, +0xf603, 0xf689, 0xf603, 0xf689, 0xf4c4, 0xf575, 0xf4c4, 0xf575, 0xf335, 0xf40e, 0xf335, +0xf40e, 0xf335, 0xf40e, 0xf0ef, 0xf1ec, 0xf0ef, 0xf1ec, 0xef3f, 0xf05d, 0xef3f, 0xf05d, +0xeda3, 0xeede, 0xeda3, 0xeede, 0xecee, 0xee43, 0xecee, 0xee43, 0xeb4b, 0xecb7, 0xeb4b, +0xecb7, 0xea4e, 0xebcf, 0xea4e, 0xebcf, 0xea4e, 0xebcf, 0xea46, 0xebda, 0xea46, 0xebda, +0xe9f7, 0xeb9e, 0xe9f7, 0xeb9e, 0xeaa0, 0xec58, 0xeaa0, 0xec58, 0xeac0, 0xec8a, 0xeac0, +0xec8a, 0xeb4d, 0xed29, 0xeb4d, 0xed29, 0xec5d, 0xee4c, 0xec5d, 0xee4c, 0xec5d, 0xee4c, +0xed80, 0xef83, 0xed80, 0xef83, 0xee01, 0xf019, 0xee01, 0xf019, 0xee21, 0xf04f, 0xee21, +0xf04f, 0xee7e, 0xf0c3, 0xee7e, 0xf0c3, 0xee92, 0xf0ef, 0xee92, 0xf0ef, 0xee92, 0xf0ef, +0xef39, 0xf1ad, 0xef39, 0xf1ad, 0xee86, 0xf110, 0xee86, 0xf110, 0xed0d, 0xefab, 0xed0d, +0xefab, 0xec8a, 0xef39, 0xec8a, 0xef39, 0xec34, 0xeef0, 0xec34, 0xeef0, 0xebc0, 0xee84, +0xebc0, 0xee84, 0xebc0, 0xee84, 0xeb5b, 0xee22, 0xeb5b, 0xee22, 0xeae9, 0xedad, 0xeae9, +0xedad, 0xeaa6, 0xed60, 0xeaa6, 0xed60, 0xeb18, 0xedc2, 0xeb18, 0xedc2, 0xeb4c, 0xedde, +0xeb4c, 0xedde, 0xebb0, 0xee23, 0xebb0, 0xee23, 0xebb0, 0xee23, 0xec8f, 0xeede, 0xec8f, +0xeede, 0xed34, 0xef58, 0xed34, 0xef58, 0xeeec, 0xf0e2, 0xeeec, 0xf0e2, 0xf0ff, 0xf2c3, +0xf0ff, 0xf2c3, 0xf245, 0xf3d5, 0xf245, 0xf3d5, 0xf245, 0xf3d5, 0xf45d, 0xf5ba, 0xf45d, +0xf5ba, 0xf6f2, 0xf81d, 0xf6f2, 0xf81d, 0xf914, 0xfa0f, 0xf914, 0xfa0f, 0xfaa8, 0xfb79, +0xfaa8, 0xfb79, 0xfbc1, 0xfc6d, 0xfbc1, 0xfc6d, 0xfc34, 0xfcc3, 0xfc34, 0xfcc3, 0xfc34, +0xfcc3, 0xfc11, 0xfc8b, 0xfc11, 0xfc8b, 0xfcad, 0xfd1d, 0xfcad, 0xfd1d, 0xfd20, 0xfd8e, +0xfd20, 0xfd8e, 0xfc7e, 0xfcf5, 0xfc7e, 0xfcf5, 0xfc60, 0xfcea, 0xfc60, 0xfcea, 0xfc60, +0xfcea, 0xfc0f, 0xfcb5, 0xfc0f, 0xfcb5, 0xfbba, 0xfc85, 0xfbba, 0xfc85, 0xfc17, 0xfd0e, +0xfc17, 0xfd0e, 0xfaa2, 0xfbcb, 0xfaa2, 0xfbcb, 0xf9e1, 0xfb40, 0xf9e1, 0xfb40, 0xf841, +0xf9d8, 0xf841, 0xf9d8, 0xf841, 0xf9d8, 0xf6b1, 0xf881, 0xf6b1, 0xf881, 0xf726, 0xf92d, +0xf726, 0xf92d, 0xf539, 0xf775, 0xf539, 0xf775, 0xf553, 0xf7bf, 0xf553, 0xf7bf, 0xf543, +0xf7d7, 0xf543, 0xf7d7, 0xf49b, 0xf751, 0xf49b, 0xf751, 0xf49b, 0xf751, 0xf4a0, 0xf76e, +0xf4a0, 0xf76e, 0xf310, 0xf5ed, 0xf310, 0xf5ed, 0xf1de, 0xf4c0, 0xf1de, 0xf4c0, 0xf129, +0xf405, 0xf129, 0xf405, 0xf165, 0xf433, 0xf165, 0xf433, 0xf165, 0xf433, 0xf0be, 0xf374, +0xf0be, 0xf374, 0xf063, 0xf2fa, 0xf063, 0xf2fa, 0xef5a, 0xf1ca, 0xef5a, 0xf1ca, 0xf00f, +0xf254, 0xf00f, 0xf254, 0xf171, 0xf387, 0xf171, 0xf387, 0xf123, 0xf307, 0xf123, 0xf307, +0xf123, 0xf307, 0xf27f, 0xf430, 0xf27f, 0xf430, 0xf2f8, 0xf477, 0xf2f8, 0xf477, 0xf459, +0xf5a7, 0xf459, 0xf5a7, 0xf640, 0xf760, 0xf640, 0xf760, 0xf856, 0xf94c, 0xf856, 0xf94c, +0xf9f2, 0xfac2, 0xf9f2, 0xfac2, 0xf9f2, 0xfac2, 0xfc30, 0xfcdf, 0xfc30, 0xfcdf, 0xfe76, +0xff08, 0xfe76, 0xff08, 0xfe1c, 0xfe95, 0xfe1c, 0xfe95, 0xff0a, 0xff6e, 0xff0a, 0xff6e, +0xfeb9, 0xff0a, 0xfeb9, 0xff0a, 0xfeb9, 0xff0a, 0xfe4e, 0xfe8e, 0xfe4e, 0xfe8e, 0xff4a, +0xff78, 0xff4a, 0xff78, 0xff60, 0xff7c, 0xff60, 0xff7c, 0xff8d, 0xff94, 0xff8d, 0xff94, +0xfffa, 0xffe9, 0xfffa, 0xffe9, 0xc5, 0x99, 0xc5, 0x99, 0xc5, 0x99, 0x80, +0x31, 0x80, 0x31, 0, 0xff89, 0, 0xff89, 0xd2, 0x2c, 0xd2, 0x2c, +0x206, 0x12c, 0x206, 0x12c, 0x3bc, 0x2a6, 0x3bc, 0x2a6, 0x538, 0x3e2, 0x538, +0x3e2, 0x538, 0x3e2, 0x73a, 0x59e, 0x73a, 0x59e, 0x8ae, 0x6ca, 0x8ae, 0x6ca, +0x9f9, 0x7cb, 0x9f9, 0x7cb, 0xbfd, 0x984, 0xbfd, 0x984, 0xd3c, 0xa7b, 0xd3c, +0xa7b, 0xd3c, 0xa7b, 0xea5, 0xb9f, 0xea5, 0xb9f, 0xec6, 0xb80, 0xec6, 0xb80, +0x116c, 0xdef, 0x116c, 0xdef, 0x1232, 0xe87, 0x1232, 0xe87, 0x1350, 0xf81, 0x1350, +0xf81, 0x16d4, 0x12ee, 0x16d4, 0x12ee, 0x16d4, 0x12ee, 0x1656, 0x1264, 0x1656, 0x1264, +0x18c8, 0x14d8, 0x18c8, 0x14d8, 0x18ee, 0x150e, 0x18ee, 0x150e, 0x18ae, 0x14ea, 0x18ae, +0x14ea, 0x1745, 0x13aa, 0x1745, 0x13aa, 0x1568, 0x1201, 0x1568, 0x1201, 0x1568, 0x1201, +0x1684, 0x135a, 0x1684, 0x135a, 0x149a, 0x11b7, 0x149a, 0x11b7, 0x1413, 0x117d, 0x1413, +0x117d, 0x117a, 0xf34, 0x117a, 0xf34, 0x103a, 0xe47, 0x103a, 0xe47, 0x103a, 0xe47, +0xf82, 0xde2, 0xf82, 0xde2, 0xf4b, 0xdfc, 0xf4b, 0xdfc, 0xe2e, 0xd2c, 0xe2e, +0xd2c, 0xa7b, 0x9c0, 0xa7b, 0x9c0, 0xabb, 0xa41, 0xabb, 0xa41, 0x868, 0x826, +0x868, 0x826, 0x868, 0x826, 0x86d, 0x85a, 0x86d, 0x85a, 0x79e, 0x7b1, 0x79e, +0x7b1, 0x3bf, 0x3ef, 0x3bf, 0x3ef, 0x33f, 0x382, 0x33f, 0x382, 0x326, 0x374, +0x326, 0x374, 0x394, 0x3e4, 0x394, 0x3e4, 0x394, 0x3e4, 0x22a, 0x277, 0x22a, +0x277, 0x273, 0x2b7, 0x273, 0x2b7, 0x246, 0x27e, 0x246, 0x27e, 0x1d7, 0x1ff, +0x1d7, 0x1ff, 0x3eb, 0x403, 0x3eb, 0x403, 0x3eb, 0x403, 0x1bd, 0x1c5, 0x1bd, +0x1c5, 0x35b, 0x355, 0x35b, 0x355, 0x372, 0x361, 0x372, 0x361, 0x199, 0x180, +0x199, 0x180, 0x5a3, 0x586, 0x5a3, 0x586, 0x2ca, 0x2af, 0x2ca, 0x2af, 0x2ca, +0x2af, 0x1c3, 0x1ac, 0x1c3, 0x1ac, 0x29b, 0x28e, 0x29b, 0x28e, 0xaa, 0xab, +0xaa, 0xab, 0xab, 0xbc, 0xab, 0xbc, 0xff40, 0xff64, 0xff40, 0xff64, 0xfe3f, +0xfe76, 0xfe3f, 0xfe76, 0xfe3f, 0xfe76, 0xfd24, 0xfd6f, 0xfd24, 0xfd6f, 0xfd9e, 0xfdfd, +0xfd9e, 0xfdfd, 0xfc9e, 0xfd0d, 0xfc9e, 0xfd0d, 0xfb35, 0xfbb2, 0xfb35, 0xfbb2, 0xf9f2, +0xfa79, 0xf9f2, 0xfa79, 0xf9f2, 0xfa79, 0xf8ca, 0xf956, 0xf8ca, 0xf956, 0xf77c, 0xf808, +0xf77c, 0xf808, 0xf7ed, 0xf873, 0xf7ed, 0xf873, 0xf811, 0xf88d, 0xf811, 0xf88d, 0xf570, +0xf5dd, 0xf570, 0xf5dd, 0xf846, 0xf89e, 0xf846, 0xf89e, 0xf846, 0xf89e, 0xf7ba, 0xf7fb, +0xf7ba, 0xf7fb, 0xf8b7, 0xf8dc, 0xf8b7, 0xf8dc, 0xf7e9, 0xf7f1, 0xf7e9, 0xf7f1, 0xf70c, +0xf6f6, 0xf70c, 0xf6f6, 0xf9f4, 0xf9c0, 0xf9f4, 0xf9c0, 0xf863, 0xf814, 0xf863, 0xf814, +0xf863, 0xf814, 0xfb15, 0xfaad, 0xfb15, 0xfaad, 0xf9b2, 0xf934, 0xf9b2, 0xf934, 0xfb6e, +0xfadf, 0xfb6e, 0xfadf, 0xfc03, 0xfb69, 0xfc03, 0xfb69, 0xfcdf, 0xfc3f, 0xfcdf, 0xfc3f, +0xfcdf, 0xfc3f, 0xff2e, 0xfe8f, 0xff2e, 0xfe8f, 0xfba1, 0xfb09, 0xfba1, 0xfb09, 0xffae, +0xff22, 0xffae, 0xff22, 0xfcc7, 0xfc4e, 0xfcc7, 0xfc4e, 0xff11, 0xfeae, 0xff11, 0xfeae, +0xffc2, 0xff7b, 0xffc2, 0xff7b, 0xffc2, 0xff7b, 0xf9d6, 0xf9ac, 0xf9d6, 0xf9ac, 0xfd33, +0xfd28, 0xfd33, 0xfd28, 0xf92e, 0xf944, 0xf92e, 0xf944, 0xfa52, 0xfa87, 0xfa52, 0xfa87, +0xfa21, 0xfa72, 0xfa21, 0xfa72, 0xf71d, 0xf788, 0xf71d, 0xf788, 0xf71d, 0xf788, 0xf8ff, +0xf97f, 0xf8ff, 0xf97f, 0xf61d, 0xf6ad, 0xf61d, 0xf6ad, 0xf5da, 0xf676, 0xf5da, 0xf676, +0xf48b, 0xf52a, 0xf48b, 0xf52a, 0xf39b, 0xf438, 0xf39b, 0xf438, 0xf39b, 0xf438, 0xf166, +0xf1f9, 0xf166, 0xf1f9, 0xf222, 0xf2a4, 0xf222, 0xf2a4, 0xf4a4, 0xf510, 0xf4a4, 0xf510, +0xf320, 0xf36f, 0xf320, 0xf36f, 0xf65e, 0xf68b, 0xf65e, 0xf68b, 0xf695, 0xf69b, 0xf695, +0xf69b, 0xf695, 0xf69b, 0xf9e3, 0xf9bf, 0xf9e3, 0xf9bf, 0xfd23, 0xfcd2, 0xfd23, 0xfcd2, +0xfd0e, 0xfc8e, 0xfd0e, 0xfc8e, 0x198, 0xe7, 0x198, 0xe7, 0x1b6, 0xd6, 0x1b6, +0xd6, 0x1b6, 0xd6, 0x4d1, 0x3c1, 0x4d1, 0x3c1, 0x8c0, 0x783, 0x8c0, 0x783, +0x9b0, 0x847, 0x9b0, 0x847, 0xc2e, 0xa9b, 0xc2e, 0xa9b, 0xad7, 0x91e, 0xad7, +0x91e, 0xc49, 0xa6c, 0xc49, 0xa6c, 0xc49, 0xa6c, 0xdf3, 0xbf6, 0xdf3, 0xbf6, +0xd12, 0xaf9, 0xd12, 0xaf9, 0xe9f, 0xc6b, 0xe9f, 0xc6b, 0xcce, 0xa84, 0xcce, +0xa84, 0xd7c, 0xb1d, 0xd7c, 0xb1d, 0xf64, 0xcf4, 0xf64, 0xcf4, 0xf64, 0xcf4, +0xe30, 0xbb0, 0xe30, 0xbb0, 0xef9, 0xc6c, 0xef9, 0xc6c, 0xdfd, 0xb64, 0xdfd, +0xb64, 0xe83, 0xbe1, 0xe83, 0xbe1, 0xfe4, 0xd3a, 0xfe4, 0xd3a, 0xfe4, 0xd3a, +0x11e7, 0xf37, 0x11e7, 0xf37, 0x1545, 0x1291, 0x1545, 0x1291, 0x14cd, 0x1217, 0x14cd, +0x1217, 0x172b, 0x1476, 0x172b, 0x1476, 0x1a56, 0x17a5, 0x1a56, 0x17a5, 0x184e, 0x15a3, +0x184e, 0x15a3, 0x184e, 0x15a3, 0x1895, 0x15f3, 0x1895, 0x15f3, 0x195a, 0x16c6, 0x195a, +0x16c6, 0x1860, 0x15dc, 0x1860, 0x15dc, 0x197a, 0x170a, 0x197a, 0x170a, 0x19d6, 0x177f, +0x19d6, 0x177f, 0x19b7, 0x177c, 0x19b7, 0x177c, 0x19b7, 0x177c, 0x18ab, 0x1690, 0x18ab, +0x1690, 0x19a6, 0x17ae, 0x19a6, 0x17ae, 0x1950, 0x177f, 0x1950, 0x177f, 0x16c8, 0x1520, +0x16c8, 0x1520, 0x16d4, 0x1558, 0x16d4, 0x1558, 0x16d4, 0x1558, 0x146e, 0x131f, 0x146e, +0x131f, 0x12f7, 0x11d5, 0x12f7, 0x11d5, 0x1221, 0x112d, 0x1221, 0x112d, 0x10ed, 0x1026, +0x10ed, 0x1026, 0xf5e, 0xec2, 0xf5e, 0xec2, 0xe43, 0xdd0, 0xe43, 0xdd0, 0xe43, +0xdd0, 0xe5c, 0xe10, 0xe5c, 0xe10, 0xe53, 0xe2b, 0xe53, 0xe2b, 0xe68, 0xe5f, +0xe68, 0xe5f, 0xd55, 0xd67, 0xd55, 0xd67, 0xe39, 0xe62, 0xe39, 0xe62, 0xb89, +0xbc4, 0xb89, 0xbc4, 0xb89, 0xbc4, 0xa6a, 0xab3, 0xa6a, 0xab3, 0xb4f, 0xba2, +0xb4f, 0xba2, 0x7b3, 0x80a, 0x7b3, 0x80a, 0x79d, 0x7f6, 0x79d, 0x7f6, 0x6a5, +0x6fc, 0x6a5, 0x6fc, 0x6a5, 0x6fc, 0x52f, 0x582, 0x52f, 0x582, 0x552, 0x59d, +0x552, 0x59d, 0x354, 0x397, 0x354, 0x397, 0x357, 0x390, 0x357, 0x390, 0x32a, +0x358, 0x32a, 0x358, 0x431, 0x453, 0x431, 0x453, 0x431, 0x453, 0x649, 0x660, +0x649, 0x660, 0x564, 0x570, 0x564, 0x570, 0x6cf, 0x6d0, 0x6cf, 0x6d0, 0x86f, +0x866, 0x86f, 0x866, 0x9b3, 0x9a0, 0x9b3, 0x9a0, 0xa4f, 0xa32, 0xa4f, 0xa32, +0xa4f, 0xa32, 0x96b, 0x945, 0x96b, 0x945, 0x93b, 0x90d, 0x93b, 0x90d, 0x873, +0x83c, 0x873, 0x83c, 0x899, 0x859, 0x899, 0x859, 0x89d, 0x854, 0x89d, 0x854, +0x89d, 0x854, 0x765, 0x712, 0x765, 0x712, 0x65d, 0x601, 0x65d, 0x601, 0x79d, +0x737, 0x79d, 0x737, 0x689, 0x618, 0x689, 0x618, 0x650, 0x5d5, 0x650, 0x5d5, +0x5ec, 0x568, 0x5ec, 0x568, 0x5ec, 0x568, 0x382, 0x2f5, 0x382, 0x2f5, 0x402, +0x36e, 0x402, 0x36e, 0x259, 0x1c1, 0x259, 0x1c1, 0x357, 0x2bc, 0x357, 0x2bc, +0x386, 0x2ec, 0x386, 0x2ec, 0x34a, 0x2b6, 0x34a, 0x2b6, 0x34a, 0x2b6, 0x4c9, +0x440, 0x4c9, 0x440, 0x3ba, 0x340, 0x3ba, 0x340, 0x383, 0x31f, 0x383, 0x31f, +0x302, 0x2ba, 0x302, 0x2ba, 0x216, 0x1f0, 0x216, 0x1f0, 0x216, 0x1f0, 0x196, +0x199, 0x196, 0x199, 0x140, 0x172, 0x140, 0x172, 0xda, 0x142, 0xda, 0x142, +0xdb, 0x17e, 0xdb, 0x17e, 0xfe36, 0xff18, 0xfe36, 0xff18, 0xfda3, 0xfec9, 0xfda3, +0xfec9, 0xfda3, 0xfec9, 0xfbf4, 0xfd61, 0xfbf4, 0xfd61, 0xf981, 0xfb35, 0xf981, 0xfb35, +0xf82f, 0xfa2c, 0xf82f, 0xfa2c, 0xf36c, 0xf5b0, 0xf36c, 0xf5b0, 0xf2c4, 0xf54e, 0xf2c4, +0xf54e, 0xf06b, 0xf336, 0xf06b, 0xf336, 0xf06b, 0xf336, 0xed99, 0xf0a1, 0xed99, 0xf0a1, +0xebac, 0xeeea, 0xebac, 0xeeea, 0xe9f1, 0xed5f, 0xe9f1, 0xed5f, 0xe8a9, 0xec3e, 0xe8a9, +0xec3e, 0xe617, 0xe9cb, 0xe617, 0xe9cb, 0xe617, 0xe9cb, 0xe4e9, 0xe8b3, 0xe4e9, 0xe8b3, +0xe29e, 0xe675, 0xe29e, 0xe675, 0xe14b, 0xe525, 0xe14b, 0xe525, 0xdf8f, 0xe364, 0xdf8f, +0xe364, 0xdf89, 0xe351, 0xdf89, 0xe351, 0xde66, 0xe218, 0xde66, 0xe218, 0xde66, 0xe218, +0xdc63, 0xdff9, 0xdc63, 0xdff9, 0xddf0, 0xe164, 0xddf0, 0xe164, 0xde91, 0xe1de, 0xde91, +0xe1de, 0xdea4, 0xe1c7, 0xdea4, 0xe1c7, 0xe03a, 0xe32f, 0xe03a, 0xe32f, 0xe029, 0xe2f0, +0xe029, 0xe2f0, 0xe029, 0xe2f0, 0xe142, 0xe3da, 0xe142, 0xe3da, 0xe3fd, 0xe666, 0xe3fd, +0xe666, 0xe4ad, 0xe6ea, 0xe4ad, 0xe6ea, 0xe8f5, 0xeb07, 0xe8f5, 0xeb07, 0xe936, 0xeb1f, +0xe936, 0xeb1f, 0xe936, 0xeb1f, 0xeb60, 0xed23, 0xeb60, 0xed23, 0xeeda, 0xf07b, 0xeeda, +0xf07b, 0xede0, 0xef61, 0xede0, 0xef61, 0xf16a, 0xf2cd, 0xf16a, 0xf2cd, 0xf1d1, 0xf31b, +0xf1d1, 0xf31b, 0xf237, 0xf368, 0xf237, 0xf368, 0xf237, 0xf368, 0xf288, 0xf3a1, 0xf288, +0xf3a1, 0xf578, 0xf67c, 0xf578, 0xf67c, 0xf81e, 0xf90c, 0xf81e, 0xf90c, 0xf644, 0xf71e, +0xf644, 0xf71e, 0xf950, 0xfa14, 0xf950, 0xfa14, 0xf98b, 0xfa39, 0xf98b, 0xfa39, 0xf98b, +0xfa39, 0xf95f, 0xf9f6, 0xf95f, 0xf9f6, 0xfaeb, 0xfb6b, 0xfaeb, 0xfb6b, 0xfaa6, 0xfb0e, +0xfaa6, 0xfb0e, 0xfbd0, 0xfc21, 0xfbd0, 0xfc21, 0xfd86, 0xfdbe, 0xfd86, 0xfdbe, 0xfd86, +0xfdbe, 0x132, 0x154, 0x132, 0x154, 0x3b1, 0x3be, 0x3b1, 0x3be, 0x427, 0x421, +0x427, 0x421, 0x4d9, 0x4c4, 0x4d9, 0x4c4, 0x4b9, 0x498, 0x4b9, 0x498, 0x599, +0x572, 0x599, 0x572, 0x599, 0x572, 0x4d3, 0x4ac, 0x4d3, 0x4ac, 0x56a, 0x54b, +0x56a, 0x54b, 0x633, 0x622, 0x633, 0x622, 0x515, 0x51a, 0x515, 0x51a, 0x628, +0x64b, 0x628, 0x64b, 0x628, 0x64b, 0x56b, 0x5b3, 0x56b, 0x5b3, 0x705, 0x77b, +0x705, 0x77b, 0x75a, 0x805, 0x75a, 0x805, 0x4aa, 0x590, 0x4aa, 0x590, 0x390, +0x4b6, 0x390, 0x4b6, 0x125, 0x28f, 0x125, 0x28f, 0x125, 0x28f, 0xff7c, 0x12e, +0xff7c, 0x12e, 0xfde2, 0xffdc, 0xfde2, 0xffdc, 0xfa23, 0xfc65, 0xfa23, 0xfc65, 0xf6a7, +0xf92e, 0xf6a7, 0xf92e, 0xf446, 0xf70f, 0xf446, 0xf70f, 0xf13e, 0xf443, 0xf13e, 0xf443, +0xf13e, 0xf443, 0xf0b4, 0xf3ee, 0xf0b4, 0xf3ee, 0xee20, 0xf187, 0xee20, 0xf187, 0xea38, +0xedc1, 0xea38, 0xedc1, 0xe913, 0xecb4, 0xe913, 0xecb4, 0xe6d4, 0xea82, 0xe6d4, 0xea82, +0xe6d4, 0xea82, 0xe424, 0xe7d2, 0xe424, 0xe7d2, 0xe338, 0xe6db, 0xe338, 0xe6db, 0xe2cb, +0xe656, 0xe2cb, 0xe656, 0xdffe, 0xe365, 0xdffe, 0xe365, 0xe008, 0xe341, 0xe008, 0xe341, +0xdecb, 0xe1cc, 0xdecb, 0xe1cc, 0xdecb, 0xe1cc, 0xdfe3, 0xe2a3, 0xdfe3, 0xe2a3, 0xe24f, +0xe4c5, 0xe24f, 0xe4c5, 0xe146, 0xe36c, 0xe146, 0xe36c, 0xe423, 0xe5f5, 0xe423, 0xe5f5, +0xe43d, 0xe5b7, 0xe43d, 0xe5b7, 0xe6e3, 0xe803, 0xe6e3, 0xe803, 0xe6e3, 0xe803, 0xea53, +0xeb19, 0xea53, 0xeb19, 0xeb90, 0xebfb, 0xeb90, 0xebfb, 0xef2e, 0xef40, 0xef2e, 0xef40, +0xf13b, 0xf0f7, 0xf13b, 0xf0f7, 0xf239, 0xf1a3, 0xf239, 0xf1a3, 0xf239, 0xf1a3, 0xf2b0, +0xf1cb, 0xf2b0, 0xf1cb, 0xf4b1, 0xf381, 0xf4b1, 0xf381, 0xf5e7, 0xf472, 0xf5e7, 0xf472, +0xf816, 0xf660, 0xf816, 0xf660, 0xf954, 0xf761, 0xf954, 0xf761, 0xf8de, 0xf6b2, 0xf8de, +0xf6b2, 0xf8de, 0xf6b2, 0xfc2a, 0xf9ca, 0xfc2a, 0xf9ca, 0xfdc6, 0xfb35, 0xfdc6, 0xfb35, +0xfe57, 0xfb97, 0xfe57, 0xfb97, 0xffd8, 0xfcec, 0xffd8, 0xfcec, 0xbb, 0xfda7, 0xbb, +0xfda7, 0x40d, 0xd2, 0x40d, 0xd2, 0x40d, 0xd2, 0x584, 0x224, 0x584, 0x224, +0x76f, 0x3ed, 0x76f, 0x3ed, 0xa89, 0x6e7, 0xa89, 0x6e7, 0xbcd, 0x80c, 0xbcd, +0x80c, 0x1180, 0xda4, 0x1180, 0xda4, 0x1180, 0xda4, 0x138a, 0xf97, 0x138a, 0xf97, +0x13c8, 0xfc1, 0x13c8, 0xfc1, 0x15c8, 0x11b3, 0x15c8, 0x11b3, 0x17e0, 0x13c2, 0x17e0, +0x13c2, 0x1ae1, 0x16c1, 0x1ae1, 0x16c1, 0x1b5e, 0x1741, 0x1b5e, 0x1741, 0x1b5e, 0x1741, +0x1d9d, 0x198d, 0x1d9d, 0x198d, 0x1d4e, 0x1953, 0x1d4e, 0x1953, 0x2083, 0x1ca5, 0x2083, +0x1ca5, 0x22f1, 0x1f3b, 0x22f1, 0x1f3b, 0x220b, 0x1e84, 0x220b, 0x1e84, 0x233f, 0x1ff2, +0x233f, 0x1ff2, 0x233f, 0x1ff2, 0x1fe2, 0x1cd6, 0x1fe2, 0x1cd6, 0x2155, 0x1e93, 0x2155, +0x1e93, 0x1fba, 0x1d49, 0x1fba, 0x1d49, 0x1d0c, 0x1af1, 0x1d0c, 0x1af1, 0x1d5d, 0x1b9d, +0x1d5d, 0x1b9d, 0x1d5d, 0x1b9d, 0x17ca, 0x1669, 0x17ca, 0x1669, 0x16d7, 0x15d7, 0x16d7, +0x15d7, 0x1632, 0x1593, 0x1632, 0x1593, 0x13a8, 0x1368, 0x13a8, 0x1368, 0x1300, 0x131c, +0x1300, 0x131c, 0xfb9, 0x102c, 0xfb9, 0x102c, 0xfb9, 0x102c, 0xe23, 0xee7, 0xe23, +0xee7, 0xd7a, 0xe88, 0xd7a, 0xe88, 0x8a3, 0x9f1, 0x8a3, 0x9f1, 0x501, 0x686, +0x501, 0x686, 0x269, 0x41b, 0x269, 0x41b, 0xff2c, 0x100, 0xff2c, 0x100, 0xff2c, +0x100, 0xfeb4, 0x9f, 0xfeb4, 0x9f, 0xfc8f, 0xfe86, 0xfc8f, 0xfe86, 0xf97f, 0xfb77, +0xf97f, 0xfb77, 0xf754, 0xf943, 0xf754, 0xf943, 0xf42a, 0xf607, 0xf42a, 0xf607, 0xf42a, +0xf607, 0xf337, 0xf4fa, 0xf337, 0xf4fa, 0xf2b9, 0xf45a, 0xf2b9, 0xf45a, 0xf189, 0xf302, +0xf189, 0xf302, 0xf33a, 0xf486, 0xf33a, 0xf486, 0xf4f7, 0xf613, 0xf4f7, 0xf613, 0xf5ce, +0xf6b7, 0xf5ce, 0xf6b7, 0xf5ce, 0xf6b7, 0xf6d7, 0xf78c, 0xf6d7, 0xf78c, 0xf757, 0xf7d7, +0xf757, 0xf7d7, 0xf7dd, 0xf828, 0xf7dd, 0xf828, 0xf7ff, 0xf818, 0xf7ff, 0xf818, 0xf973, +0xf95a, 0xf973, 0xf95a, 0xf911, 0xf8c9, 0xf911, 0xf8c9, 0xf911, 0xf8c9, 0xf9b4, 0xf940, +0xf9b4, 0xf940, 0xfc18, 0xfb7a, 0xfc18, 0xfb7a, 0xfb9e, 0xfada, 0xfb9e, 0xfada, 0xfe2e, +0xfd46, 0xfe2e, 0xfd46, 0xfd6e, 0xfc66, 0xfd6e, 0xfc66, 0xfd6e, 0xfc66, 0xfb3f, 0xfa18, +0xfb3f, 0xfa18, 0xfc18, 0xfad5, 0xfc18, 0xfad5, 0xfa61, 0xf904, 0xfa61, 0xf904, 0xfc1b, +0xfaa6, 0xfc1b, 0xfaa6, 0xfc1a, 0xfa90, 0xfc1a, 0xfa90, 0xfa9e, 0xf900, 0xfa9e, 0xf900, +0xfa9e, 0xf900, 0xfd95, 0xfbe6, 0xfd95, 0xfbe6, 0xfef7, 0xfd39, 0xfef7, 0xfd39, 0xc9, +0xfefe, 0xc9, 0xfefe, 0x327, 0x154, 0x327, 0x154, 0x35f, 0x186, 0x35f, 0x186, +0x4c0, 0x2e6, 0x4c0, 0x2e6, 0x4c0, 0x2e6, 0x746, 0x56f, 0x746, 0x56f, 0x957, +0x789, 0x957, 0x789, 0xad4, 0x915, 0xad4, 0x915, 0xb37, 0x98d, 0xb37, 0x98d, +0xbfb, 0xa6d, 0xbfb, 0xa6d, 0xbfb, 0xa6d, 0xdfc, 0xc91, 0xdfc, 0xc91, 0xeae, +0xd6e, 0xeae, 0xd6e, 0xe77, 0xd68, 0xe77, 0xd68, 0xf2b, 0xe55, 0xf2b, 0xe55, +0xe22, 0xd8a, 0xe22, 0xd8a, 0xdd0, 0xd7e, 0xdd0, 0xd7e, 0xdd0, 0xd7e, 0xd4c, +0xd43, 0xd4c, 0xd43, 0xa2c, 0xa71, 0xa2c, 0xa71, 0x894, 0x92b, 0x894, 0x92b, +0x58c, 0x674, 0x58c, 0x674, 0x49e, 0x5d9, 0x49e, 0x5d9, 0x433, 0x5c1, 0x433, +0x5c1, 0x433, 0x5c1, 0x157, 0x333, 0x157, 0x333, 0xb4, 0x2da, 0xb4, 0x2da, +0xfef4, 0x15f, 0xfef4, 0x15f, 0xfe84, 0x12e, 0xfe84, 0x12e, 0xfd33, 0x12, 0xfd33, +0x12, 0xfd33, 0x12, 0xfaee, 0xfdf9, 0xfaee, 0xfdf9, 0xf994, 0xfcc2, 0xf994, 0xfcc2, +0xf7fc, 0xfb42, 0xf7fc, 0xfb42, 0xf837, 0xfb8a, 0xf837, 0xfb8a, 0xf615, 0xf96b, 0xf615, +0xf96b, 0xf4f5, 0xf843, 0xf4f5, 0xf843, 0xf4f5, 0xf843, 0xf41b, 0xf757, 0xf41b, 0xf757, +0xf1e5, 0xf504, 0xf1e5, 0xf504, 0xf160, 0xf45a, 0xf160, 0xf45a, 0xeff7, 0xf2c4, 0xeff7, +0xf2c4, 0xf000, 0xf298, 0xf000, 0xf298, 0xf000, 0xf298, 0xf130, 0xf38d, 0xf130, 0xf38d, +0xf3a3, 0xf5c0, 0xf3a3, 0xf5c0, 0xf667, 0xf840, 0xf667, 0xf840, 0xf716, 0xf8a8, 0xf716, +0xf8a8, 0xf876, 0xf9be, 0xf876, 0xf9be, 0xf89b, 0xf998, 0xf89b, 0xf998, 0xf89b, 0xf998, +0xf864, 0xf916, 0xf864, 0xf916, 0xfa0c, 0xfa72, 0xfa0c, 0xfa72, 0xfaf4, 0xfb10, 0xfaf4, +0xfb10, 0xfb74, 0xfb46, 0xfb74, 0xfb46, 0xfc26, 0xfbaf, 0xfc26, 0xfbaf, 0xfc4d, 0xfb8e, +0xfc4d, 0xfb8e, 0xfc4d, 0xfb8e, 0xfdd9, 0xfcd3, 0xfdd9, 0xfcd3, 0xffac, 0xfe60, 0xffac, +0xfe60, 0xff9a, 0xfe09, 0xff9a, 0xfe09, 0xd8, 0xff03, 0xd8, 0xff03, 0x245, 0x2d, +0x245, 0x2d, 0x245, 0x2d, 0x36c, 0x112, 0x36c, 0x112, 0x5d2, 0x338, 0x5d2, +0x338, 0x71a, 0x441, 0x71a, 0x441, 0x8f9, 0x5e2, 0x8f9, 0x5e2, 0xb82, 0x830, +0xb82, 0x830, 0xd15, 0x98b, 0xd15, 0x98b, 0xd15, 0x98b, 0xf0f, 0xb50, 0xf0f, +0xb50, 0x104b, 0xc5c, 0x104b, 0xc5c, 0x11b5, 0xd9c, 0x11b5, 0xd9c, 0x14d3, 0x1095, +0x14d3, 0x1095, 0x1689, 0x122e, 0x1689, 0x122e, 0x174c, 0x12db, 0x174c, 0x12db, 0x174c, +0x12db, 0x1832, 0x13b5, 0x1832, 0x13b5, 0x19f8, 0x1578, 0x19f8, 0x1578, 0x1be3, 0x176a, +0x1be3, 0x176a, 0x1d4c, 0x18e6, 0x1d4c, 0x18e6, 0x1f25, 0x1ada, 0x1f25, 0x1ada, 0x1f25, +0x1ada, 0x1d54, 0x1930, 0x1d54, 0x1930, 0x1d45, 0x1952, 0x1d45, 0x1952, 0x1ea6, 0x1aed, +0x1ea6, 0x1aed, 0x1c62, 0x18ec, 0x1c62, 0x18ec, 0x1c9b, 0x1970, 0x1c9b, 0x1970, 0x1bb1, +0x18d6, 0x1bb1, 0x18d6, 0x1bb1, 0x18d6, 0x1966, 0x16e2, 0x1966, 0x16e2, 0x18d8, 0x16ac, +0x18d8, 0x16ac, 0x16c7, 0x14f6, 0x16c7, 0x14f6, 0x166f, 0x14f9, 0x166f, 0x14f9, 0x153e, +0x1421, 0x153e, 0x1421, 0x1240, 0x1178, 0x1240, 0x1178, 0x1240, 0x1178, 0x12b3, 0x123c, +0x12b3, 0x123c, 0x102c, 0x1000, 0x102c, 0x1000, 0xd31, 0xd48, 0xd31, 0xd48, 0xd0e, +0xd60, 0xd0e, 0xd60, 0xa59, 0xadd, 0xa59, 0xadd, 0xa59, 0xadd, 0x869, 0x915, +0x869, 0x915, 0x751, 0x81d, 0x751, 0x81d, 0x664, 0x746, 0x664, 0x746, 0x5d7, +0x6c6, 0x5d7, 0x6c6, 0x545, 0x639, 0x545, 0x639, 0x3d8, 0x4c9, 0x3d8, 0x4c9, +0x3d8, 0x4c9, 0x21b, 0x303, 0x21b, 0x303, 0x13a, 0x213, 0x13a, 0x213, 0x1d1, +0x297, 0x1d1, 0x297, 0x468, 0x518, 0x468, 0x518, 0x406, 0x49d, 0x406, 0x49d, +0x3e5, 0x463, 0x3e5, 0x463, 0x3e5, 0x463, 0x555, 0x5b8, 0x555, 0x5b8, 0x53f, +0x589, 0x53f, 0x589, 0x548, 0x578, 0x548, 0x578, 0x4aa, 0x4c3, 0x4aa, 0x4c3, +0x2a1, 0x2a4, 0x2a1, 0x2a4, 0x2a1, 0x2a4, 0x13d, 0x12b, 0x13d, 0x12b, 0x189, +0x164, 0x189, 0x164, 0xc7, 0x8f, 0xc7, 0x8f, 0xffa7, 0xff5e, 0xffa7, 0xff5e, +0xfe35, 0xfdd9, 0xfe35, 0xfdd9, 0xfcc4, 0xfc57, 0xfcc4, 0xfc57, 0xfcc4, 0xfc57, 0xfc70, +0xfbef, 0xfc70, 0xfbef, 0xfca6, 0xfc10, 0xfca6, 0xfc10, 0xfbf1, 0xfb45, 0xfbf1, 0xfb45, +0xfbd4, 0xfb0f, 0xfbd4, 0xfb0f, 0xfd3d, 0xfc5e, 0xfd3d, 0xfc5e, 0xfcd2, 0xfbd6, 0xfcd2, +0xfbd6, 0xfcd2, 0xfbd6, 0xfe5a, 0xfd40, 0xfe5a, 0xfd40, 0xffdd, 0xfea4, 0xffdd, 0xfea4, +0x48, 0xfef0, 0x48, 0xfef0, 0x24b, 0xd3, 0x24b, 0xd3, 0x25d, 0xc8, 0x25d, +0xc8, 0x25d, 0xc8, 0x277, 0xc7, 0x277, 0xc7, 0x3b2, 0x1ea, 0x3b2, 0x1ea, +0x3eb, 0x211, 0x3eb, 0x211, 0x46f, 0x288, 0x46f, 0x288, 0x541, 0x355, 0x541, +0x355, 0x4a5, 0x2bb, 0x4a5, 0x2bb, 0x4a5, 0x2bb, 0x4b5, 0x2d7, 0x4b5, 0x2d7, +0x529, 0x35f, 0x529, 0x35f, 0x470, 0x2c4, 0x470, 0x2c4, 0x377, 0x1f2, 0x377, +0x1f2, 0x2af, 0x15b, 0x2af, 0x15b, 0xffa5, 0xfe8a, 0xffa5, 0xfe8a, 0xffa5, 0xfe8a, +0xfd9c, 0xfcc2, 0xfd9c, 0xfcc2, 0xfd92, 0xfd01, 0xfd92, 0xfd01, 0xfa3a, 0xf9f7, 0xfa3a, +0xf9f7, 0xfb13, 0xfb21, 0xfb13, 0xfb21, 0xfa64, 0xfac6, 0xfa64, 0xfac6, 0xfa64, 0xfac6, +0xf76f, 0xf827, 0xf76f, 0xf827, 0xf8ba, 0xf9c5, 0xf8ba, 0xf9c5, 0xf5a8, 0xf706, 0xf5a8, +0xf706, 0xf544, 0xf6f0, 0xf544, 0xf6f0, 0xf4ea, 0xf6df, 0xf4ea, 0xf6df, 0xf0e3, 0xf31a, +0xf0e3, 0xf31a, 0xf0e3, 0xf31a, 0xefff, 0xf272, 0xefff, 0xf272, 0xedf7, 0xf09d, 0xedf7, +0xf09d, 0xebdb, 0xeeae, 0xebdb, 0xeeae, 0xea1b, 0xed11, 0xea1b, 0xed11, 0xe9da, 0xeceb, +0xe9da, 0xeceb, 0xea84, 0xeda9, 0xea84, 0xeda9, 0xea84, 0xeda9, 0xe8d1, 0xec03, 0xe8d1, +0xec03, 0xe7f9, 0xeb30, 0xe7f9, 0xeb30, 0xe61a, 0xe952, 0xe61a, 0xe952, 0xe57f, 0xe8b4, +0xe57f, 0xe8b4, 0xe699, 0xe9c7, 0xe699, 0xe9c7, 0xe699, 0xe9c7, 0xe75c, 0xea81, 0xe75c, +0xea81, 0xea3c, 0xed56, 0xea3c, 0xed56, 0xea66, 0xed76, 0xea66, 0xed76, 0xec7c, 0xef81, +0xec7c, 0xef81, 0xeee9, 0xf1e4, 0xeee9, 0xf1e4, 0xee46, 0xf139, 0xee46, 0xf139, 0xee46, +0xf139, 0xf0b1, 0xf39d, 0xf0b1, 0xf39d, 0xf072, 0xf359, 0xf072, 0xf359, 0xef68, 0xf24a, +0xef68, 0xf24a, 0xf067, 0xf345, 0xf067, 0xf345, 0xf11d, 0xf3f7, 0xf11d, 0xf3f7, 0xf0d5, +0xf3ac, 0xf0d5, 0xf3ac, 0xf0d5, 0xf3ac, 0xf0da, 0xf3ab, 0xf0da, 0xf3ab, 0xf158, 0xf423, +0xf158, 0xf423, 0xf054, 0xf315, 0xf054, 0xf315, 0xf13d, 0xf3f1, 0xf13d, 0xf3f1, 0xf0f7, +0xf39c, 0xf0f7, 0xf39c, 0xf0f7, 0xf39c, 0xeff9, 0xf28a, 0xeff9, 0xf28a, 0xefd8, 0xf252, +0xefd8, 0xf252, 0xf02c, 0xf28a, 0xf02c, 0xf28a, 0xf28f, 0xf4cd, 0xf28f, 0xf4cd, 0xf4db, +0xf6f6, 0xf4db, 0xf6f6, 0xf6d4, 0xf8ca, 0xf6d4, 0xf8ca, 0xf6d4, 0xf8ca, 0xf774, 0xf942, +0xf774, 0xf942, 0xf832, 0xf9d7, 0xf832, 0xf9d7, 0xf968, 0xfae5, 0xf968, 0xfae5, 0xfaaa, +0xfbfe, 0xfaaa, 0xfbfe, 0xfb73, 0xfca1, 0xfb73, 0xfca1, 0xfb73, 0xfca1, 0xfbbb, 0xfcc7, +0xfbbb, 0xfcc7, 0xfe59, 0xff45, 0xfe59, 0xff45, 0x96, 0x169, 0x96, 0x169, 0x1a7, +0x266, 0x1a7, 0x266, 0x3e8, 0x49a, 0x3e8, 0x49a, 0x449, 0x4f5, 0x449, 0x4f5, +0x449, 0x4f5, 0x294, 0x340, 0x294, 0x340, 0x2fc, 0x3ae, 0x2fc, 0x3ae, 0x29b, +0x35b, 0x29b, 0x35b, 0x87, 0x15b, 0x87, 0x15b, 0xfffc, 0xe9, 0xfffc, 0xe9, +0xfe64, 0xff6c, 0xfe64, 0xff6c, 0xfe64, 0xff6c, 0xfba7, 0xfccf, 0xfba7, 0xfccf, 0xf9ef, +0xfb38, 0xf9ef, 0xfb38, 0xf784, 0xf8ee, 0xf784, 0xf8ee, 0xf645, 0xf7d0, 0xf645, 0xf7d0, +0xf57b, 0xf725, 0xf57b, 0xf725, 0xf57b, 0xf725, 0xf3e8, 0xf5ad, 0xf3e8, 0xf5ad, 0xf4a0, +0xf67b, 0xf4a0, 0xf67b, 0xf341, 0xf52e, 0xf341, 0xf52e, 0xf259, 0xf451, 0xf259, 0xf451, +0xf2f7, 0xf4f2, 0xf2f7, 0xf4f2, 0xf22e, 0xf427, 0xf22e, 0xf427, 0xf22e, 0xf427, 0xf1a1, +0xf390, 0xf1a1, 0xf390, 0xef8c, 0xf16b, 0xef8c, 0xf16b, 0xefae, 0xf176, 0xefae, 0xf176, +0xefad, 0xf157, 0xefad, 0xf157, 0xefa8, 0xf130, 0xefa8, 0xf130, 0xf05e, 0xf1c1, 0xf05e, +0xf1c1, 0xf05e, 0xf1c1, 0xef49, 0xf082, 0xef49, 0xf082, 0xf02c, 0xf139, 0xf02c, 0xf139, +0xf1a7, 0xf287, 0xf1a7, 0xf287, 0xf4a2, 0xf555, 0xf4a2, 0xf555, 0xf60e, 0xf693, 0xf60e, +0xf693, 0xf60e, 0xf693, 0xf64d, 0xf6a6, 0xf64d, 0xf6a6, 0xf79b, 0xf7cb, 0xf79b, 0xf7cb, +0xf6cc, 0xf6d5, 0xf6cc, 0xf6d5, 0xf769, 0xf74d, 0xf769, 0xf74d, 0xf77a, 0xf73c, 0xf77a, +0xf73c, 0xf75d, 0xf700, 0xf75d, 0xf700, 0xf75d, 0xf700, 0xf8db, 0xf861, 0xf8db, 0xf861, +0xf97b, 0xf8e6, 0xf97b, 0xf8e6, 0xfb4c, 0xfa9f, 0xfb4c, 0xfa9f, 0xfc14, 0xfb4e, 0xfc14, +0xfb4e, 0xfb41, 0xfa64, 0xfb41, 0xfa64, 0xfbce, 0xfad8, 0xfbce, 0xfad8, 0xfbce, 0xfad8, +0xfcba, 0xfbac, 0xfcba, 0xfbac, 0xfc65, 0xfb3d, 0xfc65, 0xfb3d, 0xfb9c, 0xfa58, 0xfb9c, +0xfa58, 0xfbfd, 0xfa9b, 0xfbfd, 0xfa9b, 0xfb81, 0xf9ff, 0xfb81, 0xf9ff, 0xfb81, 0xf9ff, +0xfd3c, 0xfb99, 0xfd3c, 0xfb99, 0xffd7, 0xfe0f, 0xffd7, 0xfe0f, 0xfff2, 0xfe05, 0xfff2, +0xfe05, 0x2a0, 0x8d, 0x2a0, 0x8d, 0x38a, 0x151, 0x38a, 0x151, 0x33b, 0xdc, +0x33b, 0xdc, 0x33b, 0xdc, 0x437, 0x1b4, 0x437, 0x1b4, 0x4b0, 0x20b, 0x4b0, +0x20b, 0x687, 0x3c5, 0x687, 0x3c5, 0x869, 0x58d, 0x869, 0x58d, 0xace, 0x7de, +0xace, 0x7de, 0xcb8, 0x9b9, 0xcb8, 0x9b9, 0xcb8, 0x9b9, 0xfee, 0xce7, 0xfee, +0xce7, 0x1214, 0xf0c, 0x1214, 0xf0c, 0x120c, 0xf0b, 0x120c, 0xf0b, 0x147a, 0x1187, +0x147a, 0x1187, 0x14cd, 0x11ef, 0x14cd, 0x11ef, 0x14cd, 0x11ef, 0x13ec, 0x112b, 0x13ec, +0x112b, 0x13cf, 0x1130, 0x13cf, 0x1130, 0x132b, 0x10b4, 0x132b, 0x10b4, 0x13e1, 0x1197, +0x13e1, 0x1197, 0x132e, 0x1114, 0x132e, 0x1114, 0x117a, 0xf92, 0x117a, 0xf92, 0x117a, +0xf92, 0x11a8, 0xff4, 0x11a8, 0xff4, 0xfeb, 0xe6a, 0xfeb, 0xe6a, 0xe9a, 0xd4b, +0xe9a, 0xd4b, 0xf72, 0xe53, 0xf72, 0xe53, 0xe54, 0xd62, 0xe54, 0xd62, 0xc41, +0xb77, 0xc41, 0xb77, 0xc41, 0xb77, 0xa63, 0x9bc, 0xa63, 0x9bc, 0x9ef, 0x966, +0x9ef, 0x966, 0x8c4, 0x853, 0x8c4, 0x853, 0x7f6, 0x797, 0x7f6, 0x797, 0x78b, +0x738, 0x78b, 0x738, 0x78b, 0x738, 0x64d, 0x601, 0x64d, 0x601, 0x60a, 0x5bf, +0x60a, 0x5bf, 0x4c1, 0x474, 0x4c1, 0x474, 0x490, 0x43d, 0x490, 0x43d, 0x3c9, +0x36d, 0x3c9, 0x36d, 0x41a, 0x3b2, 0x41a, 0x3b2, 0x41a, 0x3b2, 0x57b, 0x508, +0x57b, 0x508, 0x5d6, 0x557, 0x5d6, 0x557, 0x7a6, 0x71a, 0x7a6, 0x71a, 0x7eb, +0x756, 0x7eb, 0x756, 0x8e1, 0x842, 0x8e1, 0x842, 0x964, 0x8bf, 0x964, 0x8bf, +0x964, 0x8bf, 0x924, 0x87a, 0x924, 0x87a, 0x96b, 0x8c1, 0x96b, 0x8c1, 0x861, +0x7b7, 0x861, 0x7b7, 0x829, 0x782, 0x829, 0x782, 0x8bd, 0x81c, 0x8bd, 0x81c, +0x8bd, 0x81c, 0x87e, 0x7e4, 0x87e, 0x7e4, 0x6be, 0x62c, 0x6be, 0x62c, 0x544, +0x4bc, 0x544, 0x4bc, 0x494, 0x415, 0x494, 0x415, 0x43a, 0x3c3, 0x43a, 0x3c3, +0x3e2, 0x372, 0x3e2, 0x372, 0x3e2, 0x372, 0x2b2, 0x248, 0x2b2, 0x248, 0x66, +0, 0x66, 0, 0x52, 0xffee, 0x52, 0xffee, 0xc2, 0x5e, 0xc2, 0x5e, +0xfffa, 0xff94, 0xfffa, 0xff94, 0xfffb, 0xff91, 0xfffb, 0xff91, 0xfffb, 0xff91, 0xfea8, +0xfe39, 0xfea8, 0xfe39, 0x3, 0xff8c, 0x3, 0xff8c, 0xffe1, 0xff63, 0xffe1, 0xff63, +0xff1c, 0xfe97, 0xff1c, 0xfe97, 0xffea, 0xff5f, 0xffea, 0xff5f, 0xffea, 0xff5f, 0xfe89, +0xfdf9, 0xfe89, 0xfdf9, 0xffad, 0xff1b, 0xffad, 0xff1b, 0xffa7, 0xff16, 0xffa7, 0xff16, +0x82, 0xfff6, 0x82, 0xfff6, 0xf, 0xff8c, 0xf, 0xff8c, 0xfd51, 0xfcdb, 0xfd51, +0xfcdb, 0xfd51, 0xfcdb, 0xfde2, 0xfd7f, 0xfde2, 0xfd7f, 0xfc8b, 0xfc3f, 0xfc8b, 0xfc3f, +0xf9c4, 0xf994, 0xf9c4, 0xf994, 0xf88a, 0xf87b, 0xf88a, 0xf87b, 0xf7c4, 0xf7da, 0xf7c4, +0xf7da, 0xf600, 0xf63d, 0xf600, 0xf63d, 0xf600, 0xf63d, 0xf61a, 0xf683, 0xf61a, 0xf683, +0xf4fe, 0xf594, 0xf4fe, 0xf594, 0xf350, 0xf413, 0xf350, 0xf413, 0xf3af, 0xf4a0, 0xf3af, +0xf4a0, 0xf28a, 0xf3a7, 0xf28a, 0xf3a7, 0xf28a, 0xf3a7, 0xf38c, 0xf4d3, 0xf38c, 0xf4d3, +0xf2c4, 0xf432, 0xf2c4, 0xf432, 0xf0fa, 0xf28a, 0xf0fa, 0xf28a, 0xf204, 0xf3b3, 0xf204, +0xf3b3, 0xf1f5, 0xf3bc, 0xf1f5, 0xf3bc, 0xf2c0, 0xf49a, 0xf2c0, 0xf49a, 0xf2c0, 0xf49a, +0xf254, 0xf43a, 0xf254, 0xf43a, 0xf000, 0xf1ec, 0xf000, 0xf1ec, 0xf0a7, 0xf292, 0xf0a7, +0xf292, 0xf038, 0xf21c, 0xf038, 0xf21c, 0xee06, 0xefdd, 0xee06, 0xefdd, 0xee06, 0xefdd, +0xed8a, 0xef50, 0xed8a, 0xef50, 0xec58, 0xee07, 0xec58, 0xee07, 0xecac, 0xee40, 0xecac, +0xee40, 0xefb9, 0xf130, 0xefb9, 0xf130, 0xf413, 0xf56b, 0xf413, 0xf56b, 0xf727, 0xf85d, +0xf727, 0xf85d, 0xf727, 0xf85d, 0xf924, 0xfa39, 0xf924, 0xfa39, 0xfc5b, 0xfd4f, 0xfc5b, +0xfd4f, 0xffcf, 0xa1, 0xffcf, 0xa1, 0x2d8, 0x38b, 0x2d8, 0x38b, 0x37b, 0x410, +0x37b, 0x410, 0x4e1, 0x55a, 0x4e1, 0x55a, 0x4e1, 0x55a, 0x6f8, 0x756, 0x6f8, +0x756, 0x7a4, 0x7e9, 0x7a4, 0x7e9, 0x819, 0x848, 0x819, 0x848, 0x985, 0x99f, +0x985, 0x99f, 0xacc, 0xad2, 0xacc, 0xad2, 0xacc, 0xad2, 0xb0e, 0xb01, 0xb0e, +0xb01, 0xd1d, 0xcfd, 0xd1d, 0xcfd, 0xd23, 0xcf1, 0xd23, 0xcf1, 0xcb2, 0xc6d, +0xcb2, 0xc6d, 0xcee, 0xc96, 0xcee, 0xc96, 0xd47, 0xcdb, 0xd47, 0xcdb, 0xd47, +0xcdb, 0xfb3, 0xf31, 0xfb3, 0xf31, 0x10fe, 0x1066, 0x10fe, 0x1066, 0x129c, 0x11ed, +0x129c, 0x11ed, 0x14a0, 0x13d8, 0x14a0, 0x13d8, 0x1694, 0x15b3, 0x1694, 0x15b3, 0x18ef, +0x17f5, 0x18ef, 0x17f5, 0x18ef, 0x17f5, 0x1b8d, 0x1a7a, 0x1b8d, 0x1a7a, 0x1c8b, 0x1b60, +0x1c8b, 0x1b60, 0x1ca5, 0x1b64, 0x1ca5, 0x1b64, 0x1ed1, 0x1d7c, 0x1ed1, 0x1d7c, 0x1f35, +0x1dce, 0x1f35, 0x1dce, 0x1f35, 0x1dce, 0x1fe2, 0x1e6d, 0x1fe2, 0x1e6d, 0x21f9, 0x207b, +0x21f9, 0x207b, 0x206e, 0x1eea, 0x206e, 0x1eea, 0x1f30, 0x1dac, 0x1f30, 0x1dac, 0x201e, +0x1e9f, 0x201e, 0x1e9f, 0x1dc6, 0x1c50, 0x1dc6, 0x1c50, 0x1dc6, 0x1c50, 0x1ab2, 0x194b, +0x1ab2, 0x194b, 0x1855, 0x1701, 0x1855, 0x1701, 0x1592, 0x1455, 0x1592, 0x1455, 0x1372, +0x1250, 0x1372, 0x1250, 0x1106, 0x1003, 0x1106, 0x1003, 0xff2, 0xf0e, 0xff2, 0xf0e, +0xff2, 0xf0e, 0xee3, 0xe20, 0xee3, 0xe20, 0xdaa, 0xd09, 0xdaa, 0xd09, 0xd6d, +0xcec, 0xd6d, 0xcec, 0xc51, 0xbee, 0xc51, 0xbee, 0x9e3, 0x99c, 0x9e3, 0x99c, +0x9e3, 0x99c, 0x8bd, 0x88d, 0x8bd, 0x88d, 0x8ff, 0x8e2, 0x8ff, 0x8e2, 0x7dd, +0x7ce, 0x7dd, 0x7ce, 0x703, 0x6fd, 0x703, 0x6fd, 0x6e8, 0x6e4, 0x6e8, 0x6e4, +0x6f3, 0x6ec, 0x6f3, 0x6ec, 0x6f3, 0x6ec, 0x5ab, 0x59b, 0x5ab, 0x59b, 0x511, +0x4f3, 0x511, 0x4f3, 0x52b, 0x4fa, 0x52b, 0x4fa, 0x3d1, 0x387, 0x3d1, 0x387, +0x48e, 0x429, 0x48e, 0x429, 0x467, 0x3e4, 0x467, 0x3e4, 0x467, 0x3e4, 0x5f1, +0x54e, 0x5f1, 0x54e, 0x881, 0x7bd, 0x881, 0x7bd, 0x716, 0x631, 0x716, 0x631, +0x8ba, 0x7b4, 0x8ba, 0x7b4, 0xa73, 0x94f, 0xa73, 0x94f, 0xa73, 0x94f, 0xa74, +0x934, 0xa74, 0x934, 0xb6a, 0xa0f, 0xb6a, 0xa0f, 0xa8d, 0x91d, 0xa8d, 0x91d, +0xb39, 0x9b6, 0xb39, 0x9b6, 0xb95, 0xa03, 0xb95, 0xa03, 0xc30, 0xa93, 0xc30, +0xa93, 0xc30, 0xa93, 0xde4, 0xc40, 0xde4, 0xc40, 0xc0c, 0xa64, 0xc0c, 0xa64, +0xb7c, 0x9d4, 0xb7c, 0x9d4, 0xc59, 0xab2, 0xc59, 0xab2, 0xc24, 0xa82, 0xc24, +0xa82, 0xa48, 0x8ad, 0xa48, 0x8ad, 0xa48, 0x8ad, 0x7aa, 0x616, 0x7aa, 0x616, +0x71f, 0x594, 0x71f, 0x594, 0x6d2, 0x550, 0x6d2, 0x550, 0x804, 0x68c, 0x804, +0x68c, 0x844, 0x6d7, 0x844, 0x6d7, 0x844, 0x6d7, 0x736, 0x5d3, 0x736, 0x5d3, +0x792, 0x63a, 0x792, 0x63a, 0x6b3, 0x568, 0x6b3, 0x568, 0x60c, 0x4ce, 0x60c, +0x4ce, 0x5b3, 0x483, 0x5b3, 0x483, 0x436, 0x317, 0x436, 0x317, 0x436, 0x317, +0x399, 0x28d, 0x399, 0x28d, 0x391, 0x29c, 0x391, 0x29c, 0x3ad, 0x2d2, 0x3ad, +0x2d2, 0x4c5, 0x409, 0x4c5, 0x409, 0x3c4, 0x32b, 0x3c4, 0x32b, 0x1db, 0x16c, +0x1db, 0x16c, 0x1db, 0x16c, 0x1fb, 0x1b9, 0x1fb, 0x1b9, 0xffa8, 0xff9a, 0xffa8, +0xff9a, 0xfc0d, 0xfc37, 0xfc0d, 0xfc37, 0xfa5a, 0xfac0, 0xfa5a, 0xfac0, 0xf714, 0xf7bb, +0xf714, 0xf7bb, 0xf714, 0xf7bb, 0xf3e3, 0xf4ce, 0xf3e3, 0xf4ce, 0xf19c, 0xf2cd, 0xf19c, +0xf2cd, 0xedfa, 0xef73, 0xedfa, 0xef73, 0xec86, 0xee46, 0xec86, 0xee46, 0xea5c, 0xec61, +0xea5c, 0xec61, 0xe81d, 0xea65, 0xe81d, 0xea65, 0xe81d, 0xea65, 0xe7b1, 0xea38, 0xe7b1, +0xea38, 0xe27e, 0xe53d, 0xe27e, 0xe53d, 0xdf79, 0xe26b, 0xdf79, 0xe26b, 0xdf6f, 0xe28c, +0xdf6f, 0xe28c, 0xdbf6, 0xdf35, 0xdbf6, 0xdf35, 0xda2c, 0xdd82, 0xda2c, 0xdd82, 0xda2c, +0xdd82, 0xd8f7, 0xdc5b, 0xd8f7, 0xdc5b, 0xd875, 0xdbdd, 0xd875, 0xdbdd, 0xd8d8, 0xdc39, +0xd8d8, 0xdc39, 0xd81b, 0xdb6a, 0xd81b, 0xdb6a, 0xd8ae, 0xdbe2, 0xd8ae, 0xdbe2, 0xd8ae, +0xdbe2, 0xd757, 0xda67, 0xd757, 0xda67, 0xd70f, 0xd9f2, 0xd70f, 0xd9f2, 0xd9ba, 0xdc69, +0xd9ba, 0xdc69, 0xdc03, 0xde77, 0xdc03, 0xde77, 0xdfaf, 0xe1e4, 0xdfaf, 0xe1e4, 0xe2b1, +0xe4a3, 0xe2b1, 0xe4a3, 0xe2b1, 0xe4a3, 0xe617, 0xe7c4, 0xe617, 0xe7c4, 0xe8f6, 0xea5c, +0xe8f6, 0xea5c, 0xea9a, 0xebba, 0xea9a, 0xebba, 0xed62, 0xee3e, 0xed62, 0xee3e, 0xee2c, +0xeec5, 0xee2c, 0xeec5, 0xeecf, 0xef28, 0xeecf, 0xef28, 0xeecf, 0xef28, 0xf048, 0xf064, +0xf048, 0xf064, 0xf095, 0xf079, 0xf095, 0xf079, 0xf1bf, 0xf16e, 0xf1bf, 0xf16e, 0xf3d9, +0xf359, 0xf3d9, 0xf359, 0xf564, 0xf4b8, 0xf564, 0xf4b8, 0xf564, 0xf4b8, 0xf798, 0xf6c4, +0xf798, 0xf6c4, 0xfa3c, 0xf944, 0xfa3c, 0xf944, 0xfbe1, 0xfac9, 0xfbe1, 0xfac9, 0xfca8, +0xfb73, 0xfca8, 0xfb73, 0xff44, 0xfdf5, 0xff44, 0xfdf5, 0x27e, 0x118, 0x27e, 0x118, +0x27e, 0x118, 0x3a6, 0x22b, 0x3a6, 0x22b, 0x682, 0x4f5, 0x682, 0x4f5, 0x83b, +0x69e, 0x83b, 0x69e, 0x98a, 0x7e1, 0x98a, 0x7e1, 0xb49, 0x996, 0xb49, 0x996, +0xb49, 0x996, 0xb9e, 0x9e6, 0xb9e, 0x9e6, 0xdb2, 0xbf8, 0xdb2, 0xbf8, 0xcb0, +0xafa, 0xcb0, 0xafa, 0xd0d, 0xb60, 0xd0d, 0xb60, 0xfb3, 0xe16, 0xfb3, 0xe16, +0xe32, 0xcac, 0xe32, 0xcac, 0xe32, 0xcac, 0xea5, 0xd3e, 0xea5, 0xd3e, 0xfc1, +0xe82, 0xfc1, 0xe82, 0xe2f, 0xd21, 0xe2f, 0xd21, 0xdb6, 0xce2, 0xdb6, 0xce2, +0xc95, 0xc05, 0xc95, 0xc05, 0xa79, 0xa36, 0xa79, 0xa36, 0xa79, 0xa36, 0x987, +0x999, 0x987, 0x999, 0x737, 0x7a8, 0x737, 0x7a8, 0x46a, 0x540, 0x46a, 0x540, +0x168, 0x2a9, 0x168, 0x2a9, 0xfdfd, 0xffaf, 0xfdfd, 0xffaf, 0xfdfd, 0xffaf, 0xfb2d, +0xfd51, 0xfb2d, 0xfd51, 0xf81c, 0xfab5, 0xf81c, 0xfab5, 0xf5d8, 0xf8e4, 0xf5d8, 0xf8e4, +0xf494, 0xf811, 0xf494, 0xf811, 0xf1e7, 0xf5d1, 0xf1e7, 0xf5d1, 0xed7c, 0xf1cd, 0xed7c, +0xf1cd, 0xed7c, 0xf1cd, 0xebda, 0xf089, 0xebda, 0xf089, 0xe965, 0xee68, 0xe965, 0xee68, +0xe58f, 0xeadb, 0xe58f, 0xeadb, 0xe45c, 0xe9e5, 0xe45c, 0xe9e5, 0xe31e, 0xe8d5, 0xe31e, +0xe8d5, 0xe2c3, 0xe89b, 0xe2c3, 0xe89b, 0xe2c3, 0xe89b, 0xe148, 0xe733, 0xe148, 0xe733, +0xe00f, 0xe5fe, 0xe00f, 0xe5fe, 0xdf77, 0xe55d, 0xdf77, 0xe55d, 0xdc98, 0xe267, 0xdc98, +0xe267, 0xdbf2, 0xe19c, 0xdbf2, 0xe19c, 0xdbf2, 0xe19c, 0xddc1, 0xe33b, 0xddc1, 0xe33b, +0xdf59, 0xe498, 0xdf59, 0xe498, 0xe0d0, 0xe5ca, 0xe0d0, 0xe5ca, 0xe296, 0xe744, 0xe296, +0xe744, 0xe4b8, 0xe912, 0xe4b8, 0xe912, 0xe6ce, 0xeacf, 0xe6ce, 0xeacf, 0xe6ce, 0xeacf, +0xe867, 0xec0a, 0xe867, 0xec0a, 0xe997, 0xecda, 0xe997, 0xecda, 0xe9eb, 0xecca, 0xe9eb, +0xecca, 0xeae7, 0xed61, 0xeae7, 0xed61, 0xed2b, 0xef3f, 0xed2b, 0xef3f, 0xefb0, 0xf15f, +0xefb0, 0xf15f, 0xefb0, 0xf15f, 0xf18b, 0xf2d3, 0xf18b, 0xf2d3, 0xf2d8, 0xf3b9, 0xf2d8, +0xf3b9, 0xf543, 0xf5be, 0xf543, 0xf5be, 0xf5a3, 0xf5b6, 0xf5a3, 0xf5b6, 0xf687, 0xf634, +0xf687, 0xf634, 0xf687, 0xf634, 0xf818, 0xf75d, 0xf818, 0xf75d, 0xf794, 0xf672, 0xf794, +0xf672, 0xf901, 0xf778, 0xf901, 0xf778, 0xfa72, 0xf882, 0xfa72, 0xf882, 0xfc28, 0xf9d0, +0xfc28, 0xf9d0, 0xfecd, 0xfc0e, 0xfecd, 0xfc0e, 0xfecd, 0xfc0e, 0xfd, 0xfdd9, 0xfd, +0xfdd9, 0x38f, 0x7, 0x38f, 0x7, 0x641, 0x258, 0x641, 0x258, 0x8cc, 0x486, +0x8cc, 0x486, 0xb26, 0x688, 0xb26, 0x688, 0xe46, 0x956, 0xe46, 0x956, 0xe46, +0x956, 0x1232, 0xcf9, 0x1232, 0xcf9, 0x14cc, 0xf52, 0x14cc, 0xf52, 0x161b, 0x106b, +0x161b, 0x106b, 0x1905, 0x132b, 0x1905, 0x132b, 0x1b46, 0x154f, 0x1b46, 0x154f, 0x1b46, +0x154f, 0x1d36, 0x172f, 0x1d36, 0x172f, 0x1f05, 0x18fc, 0x1f05, 0x18fc, 0x1f31, 0x1936, +0x1f31, 0x1936, 0x1fdb, 0x19fc, 0x1fdb, 0x19fc, 0x1ee2, 0x192d, 0x1ee2, 0x192d, 0x1e86, +0x1909, 0x1e86, 0x1909, 0x1e86, 0x1909, 0x1d95, 0x185f, 0x1d95, 0x185f, 0x1af7, 0x1612, +0x1af7, 0x1612, 0x1a25, 0x159c, 0x1a25, 0x159c, 0x1879, 0x1455, 0x1879, 0x1455, 0x17df, +0x1427, 0x17df, 0x1427, 0x1795, 0x144e, 0x1795, 0x144e, 0x1795, 0x144e, 0x159e, 0x12cc, +0x159e, 0x12cc, 0x1464, 0x1207, 0x1464, 0x1207, 0x135c, 0x1174, 0x135c, 0x1174, 0x1232, +0x10bc, 0x1232, 0x10bc, 0xf7c, 0xe73, 0xf7c, 0xe73, 0xf7c, 0xe73, 0xd10, 0xc70, +0xd10, 0xc70, 0xcc7, 0xc88, 0xcc7, 0xc88, 0xaeb, 0xb05, 0xaeb, 0xb05, 0x8a3, +0x90e, 0x8a3, 0x90e, 0x6dc, 0x78f, 0x6dc, 0x78f, 0x470, 0x561, 0x470, 0x561, +0x470, 0x561, 0x2c7, 0x3ef, 0x2c7, 0x3ef, 0xe9, 0x23f, 0xe9, 0x23f, 0xa, +0x186, 0xa, 0x186, 0xff90, 0x12b, 0xff90, 0x12b, 0xfe19, 0xffcd, 0xfe19, 0xffcd, +0xfe3c, 0x3, 0xfe3c, 0x3, 0xfe3c, 0x3, 0xfec5, 0x9c, 0xfec5, 0x9c, 0xfeeb, +0xcd, 0xfeeb, 0xcd, 0xfec9, 0xb3, 0xfec9, 0xb3, 0xfe74, 0x65, 0xfe74, 0x65, +0xfe7d, 0x72, 0xfe7d, 0x72, 0xfe7d, 0x72, 0xfe40, 0x39, 0xfe40, 0x39, 0xff16, +0x110, 0xff16, 0x110, 0x52, 0x24b, 0x52, 0x24b, 0x65, 0x25c, 0x65, 0x25c, +0x78, 0x26a, 0x78, 0x26a, 0x15a, 0x345, 0x15a, 0x345, 0x15a, 0x345, 0x14b, +0x32c, 0x14b, 0x32c, 0xed, 0x2c0, 0xed, 0x2c0, 0x1ea, 0x3aa, 0x1ea, 0x3aa, +0x149, 0x2f1, 0x149, 0x2f1, 0x158, 0x2e3, 0x158, 0x2e3, 0x229, 0x392, 0x229, +0x392, 0x229, 0x392, 0xd6, 0x216, 0xd6, 0x216, 0x172, 0x286, 0x172, 0x286, +0x1fb, 0x2dc, 0x1fb, 0x2dc, 0x177, 0x222, 0x177, 0x222, 0x1e0, 0x252, 0x1e0, +0x252, 0x1e0, 0x252, 0x179, 0x1af, 0x179, 0x1af, 0x22b, 0x225, 0x22b, 0x225, +0x3ee, 0x3ac, 0x3ee, 0x3ac, 0x4af, 0x433, 0x4af, 0x433, 0x4dd, 0x42b, 0x4dd, +0x42b, 0x511, 0x42d, 0x511, 0x42d, 0x511, 0x42d, 0x6b9, 0x5aa, 0x6b9, 0x5aa, +0x8ad, 0x77b, 0x8ad, 0x77b, 0x893, 0x748, 0x893, 0x748, 0x92b, 0x7cf, 0x92b, +0x7cf, 0x9b1, 0x84f, 0x9b1, 0x84f, 0x930, 0x7d3, 0x930, 0x7d3, 0x930, 0x7d3, +0x860, 0x712, 0x860, 0x712, 0x641, 0x50d, 0x641, 0x50d, 0x46a, 0x358, 0x46a, +0x358, 0x1f9, 0x112, 0x1f9, 0x112, 0x11a, 0x65, 0x11a, 0x65, 0x11a, 0x65, +0x2c, 0xffaf, 0x2c, 0xffaf, 0xfe81, 0xfe40, 0xfe81, 0xfe40, 0xfe9f, 0xfe9d, 0xfe9f, +0xfe9d, 0xfcc1, 0xfcfd, 0xfcc1, 0xfcfd, 0xfc39, 0xfcb2, 0xfc39, 0xfcb2, 0xfbc7, 0xfc7a, +0xfbc7, 0xfc7a, 0xfbc7, 0xfc7a, 0xf95f, 0xfa48, 0xf95f, 0xfa48, 0xf821, 0xf93a, 0xf821, +0xf93a, 0xf655, 0xf797, 0xf655, 0xf797, 0xf56b, 0xf6cd, 0xf56b, 0xf6cd, 0xf5af, 0xf72a, +0xf5af, 0xf72a, 0xf5af, 0xf72a, 0xf4db, 0xf666, 0xf4db, 0xf666, 0xf42d, 0xf5be, 0xf42d, +0xf5be, 0xf3bf, 0xf54f, 0xf3bf, 0xf54f, 0xf1fa, 0xf381, 0xf1fa, 0xf381, 0xf0ce, 0xf245, +0xf0ce, 0xf245, 0xf0ba, 0xf21c, 0xf0ba, 0xf21c, 0xf0ba, 0xf21c, 0xf0ce, 0xf216, 0xf0ce, +0xf216, 0xf0fd, 0xf226, 0xf0fd, 0xf226, 0xf25b, 0xf364, 0xf25b, 0xf364, 0xf351, 0xf438, +0xf351, 0xf438, 0xf306, 0xf3cb, 0xf306, 0xf3cb, 0xf480, 0xf523, 0xf480, 0xf523, 0xf480, +0xf523, 0xf578, 0xf5fa, 0xf578, 0xf5fa, 0xf68c, 0xf6f0, 0xf68c, 0xf6f0, 0xf723, 0xf769, +0xf723, 0xf769, 0xf727, 0xf751, 0xf727, 0xf751, 0xf7ce, 0xf7dd, 0xf7ce, 0xf7dd, 0xf7ce, +0xf7dd, 0xf740, 0xf736, 0xf740, 0xf736, 0xf7ee, 0xf7ca, 0xf7ee, 0xf7ca, 0xf8e3, 0xf8a6, +0xf8e3, 0xf8a6, 0xf9ba, 0xf962, 0xf9ba, 0xf962, 0xfb4d, 0xfad8, 0xfb4d, 0xfad8, 0xfc80, +0xfbec, 0xfc80, 0xfbec, 0xfc80, 0xfbec, 0xfcc0, 0xfc08, 0xfcc0, 0xfc08, 0xfe92, 0xfdb3, +0xfe92, 0xfdb3, 0x26, 0xff1a, 0x26, 0xff1a, 0x52, 0xff17, 0x52, 0xff17, 0x2b1, +0x140, 0x2b1, 0x140, 0x4ac, 0x302, 0x4ac, 0x302, 0x4ac, 0x302, 0x830, 0x64a, +0x830, 0x64a, 0xbbc, 0x997, 0xbbc, 0x997, 0xe4b, 0xbe7, 0xe4b, 0xbe7, 0x110e, +0xe6a, 0x110e, 0xe6a, 0x12c9, 0xfe7, 0x12c9, 0xfe7, 0x12c9, 0xfe7, 0x1690, 0x1374, +0x1690, 0x1374, 0x18c5, 0x1574, 0x18c5, 0x1574, 0x195e, 0x15df, 0x195e, 0x15df, 0x1bad, +0x1807, 0x1bad, 0x1807, 0x1d49, 0x1987, 0x1d49, 0x1987, 0x1d63, 0x1990, 0x1d63, 0x1990, +0x1d63, 0x1990, 0x1dcb, 0x19f2, 0x1dcb, 0x19f2, 0x1d74, 0x19a2, 0x1d74, 0x19a2, 0x1ce8, +0x1928, 0x1ce8, 0x1928, 0x1d3e, 0x199e, 0x1d3e, 0x199e, 0x1cde, 0x1969, 0x1cde, 0x1969, +0x1c52, 0x1913, 0x1c52, 0x1913, 0x1c52, 0x1913, 0x1ab3, 0x17b3, 0x1ab3, 0x17b3, 0x1903, +0x164b, 0x1903, 0x164b, 0x1856, 0x15ed, 0x1856, 0x15ed, 0x1829, 0x1613, 0x1829, 0x1613, +0x1708, 0x1547, 0x1708, 0x1547, 0x1708, 0x1547, 0x169a, 0x152f, 0x169a, 0x152f, 0x1634, +0x151d, 0x1634, 0x151d, 0x1444, 0x137f, 0x1444, 0x137f, 0x13ee, 0x1376, 0x13ee, 0x1376, +0x1257, 0x1225, 0x1257, 0x1225, 0x1130, 0x113c, 0x1130, 0x113c, 0x1130, 0x113c, 0x102f, +0x1071, 0x102f, 0x1071, 0xf2e, 0xf9e, 0xf2e, 0xf9e, 0xe41, 0xed4, 0xe41, 0xed4, +0xb29, 0xbd8, 0xb29, 0xbd8, 0x991, 0xa53, 0x991, 0xa53, 0x761, 0x82e, 0x761, +0x82e, 0x761, 0x82e, 0x683, 0x755, 0x683, 0x755, 0x65d, 0x72d, 0x65d, 0x72d, +0x53e, 0x609, 0x53e, 0x609, 0x5c5, 0x687, 0x5c5, 0x687, 0x716, 0x7cd, 0x716, +0x7cd, 0x716, 0x7cd, 0x92b, 0x9d6, 0x92b, 0x9d6, 0x976, 0xa16, 0x976, 0xa16, +0x97c, 0xa12, 0x97c, 0xa12, 0xa2d, 0xabb, 0xa2d, 0xabb, 0x99a, 0xa21, 0x99a, +0xa21, 0x9f5, 0xa78, 0x9f5, 0xa78, 0x9f5, 0xa78, 0x9d6, 0xa57, 0x9d6, 0xa57, +0x763, 0x7e3, 0x763, 0x7e3, 0x5c3, 0x644, 0x5c3, 0x644, 0x3f4, 0x476, 0x3f4, +0x476, 0x315, 0x397, 0x315, 0x397, 0x33f, 0x3bf, 0x33f, 0x3bf, 0x33f, 0x3bf, +0x23f, 0x2bc, 0x23f, 0x2bc, 0x28f, 0x305, 0x28f, 0x305, 0xde, 0x148, 0xde, +0x148, 0xff93, 0xffed, 0xff93, 0xffed, 0xfe2c, 0xfe71, 0xfe2c, 0xfe71, 0xfe2c, 0xfe71, +0xfb34, 0xfb5e, 0xfb34, 0xfb5e, 0xfbae, 0xfbb8, 0xfbae, 0xfbb8, 0xfc20, 0xfc05, 0xfc20, +0xfc05, 0xfd62, 0xfd1e, 0xfd62, 0xfd1e, 0xfeba, 0xfe4b, 0xfeba, 0xfe4b, 0xfe37, 0xfd99, +0xfe37, 0xfd99, 0xfe37, 0xfd99, 0xff22, 0xfe56, 0xff22, 0xfe56, 0xfff3, 0xfef9, 0xfff3, +0xfef9, 0xdf, 0xffba, 0xdf, 0xffba, 0x2a0, 0x153, 0x2a0, 0x153, 0x18c, 0x1f, +0x18c, 0x1f, 0x207, 0x80, 0x207, 0x80, 0x207, 0x80, 0x520, 0x388, 0x520, +0x388, 0x542, 0x3a3, 0x542, 0x3a3, 0x5e0, 0x444, 0x5e0, 0x444, 0x592, 0x404, +0x592, 0x404, 0x437, 0x2c3, 0x437, 0x2c3, 0x437, 0x2c3, 0x2fb, 0x1ab, 0x2fb, +0x1ab, 0x153, 0x32, 0x153, 0x32, 0xc6, 0xffdd, 0xc6, 0xffdd, 0xfdba, 0xfd12, +0xfdba, 0xfd12, 0xfb78, 0xfb17, 0xfb78, 0xfb17, 0xfa9a, 0xfa85, 0xfa9a, 0xfa85, 0xfa9a, +0xfa85, 0xf8ce, 0xf908, 0xf8ce, 0xf908, 0xf785, 0xf810, 0xf785, 0xf810, 0xf69b, 0xf775, +0xf69b, 0xf775, 0xf64d, 0xf773, 0xf64d, 0xf773, 0xf3e9, 0xf557, 0xf3e9, 0xf557, 0xf22a, +0xf3d9, 0xf22a, 0xf3d9, 0xf22a, 0xf3d9, 0xf265, 0xf44e, 0xf265, 0xf44e, 0xf04e, 0xf267, +0xf04e, 0xf267, 0xef81, 0xf1c1, 0xef81, 0xf1c1, 0xf033, 0xf290, 0xf033, 0xf290, 0xef1a, +0xf189, 0xef1a, 0xf189, 0xef1a, 0xf189, 0xee62, 0xf0da, 0xee62, 0xf0da, 0xed3b, 0xefb2, +0xed3b, 0xefb2, 0xeca9, 0xef17, 0xeca9, 0xef17, 0xed17, 0xef74, 0xed17, 0xef74, 0xecef, +0xef36, 0xecef, 0xef36, 0xed2c, 0xef57, 0xed2c, 0xef57, 0xed2c, 0xef57, 0xecb5, 0xeec1, +0xecb5, 0xeec1, 0xed28, 0xef14, 0xed28, 0xef14, 0xee9b, 0xf065, 0xee9b, 0xf065, 0xef6f, +0xf118, 0xef6f, 0xf118, 0xefda, 0xf165, 0xefda, 0xf165, 0xf0fc, 0xf26b, 0xf0fc, 0xf26b, +0xf0fc, 0xf26b, 0xf25e, 0xf3b4, 0xf25e, 0xf3b4, 0xf28b, 0xf3cb, 0xf28b, 0xf3cb, 0xf3f9, +0xf528, 0xf3f9, 0xf528, 0xf430, 0xf551, 0xf430, 0xf551, 0xf30f, 0xf424, 0xf30f, 0xf424, +0xf30f, 0xf424, 0xf359, 0xf465, 0xf359, 0xf465, 0xf397, 0xf49c, 0xf397, 0xf49c, 0xf3e4, +0xf4e2, 0xf3e4, 0xf4e2, 0xf3c2, 0xf4ba, 0xf3c2, 0xf4ba, 0xf4a3, 0xf593, 0xf4a3, 0xf593, +0xf5dd, 0xf6c3, 0xf5dd, 0xf6c3, 0xf5dd, 0xf6c3, 0xf67c, 0xf755, 0xf67c, 0xf755, 0xf7fd, +0xf8c6, 0xf7fd, 0xf8c6, 0xf82f, 0xf8e5, 0xf82f, 0xf8e5, 0xf7a4, 0xf842, 0xf7a4, 0xf842, +0xf795, 0xf81a, 0xf795, 0xf81a, 0xf795, 0xf81a, 0xf884, 0xf8ea, 0xf884, 0xf8ea, 0xfa19, +0xfa60, 0xfa19, 0xfa60, 0xf96e, 0xf994, 0xf96e, 0xf994, 0xf99b, 0xf99f, 0xf99b, 0xf99f, +0xfa01, 0xf9e5, 0xfa01, 0xf9e5, 0xf98b, 0xf952, 0xf98b, 0xf952, 0xf98b, 0xf952, 0xfbf8, +0xfba6, 0xfbf8, 0xfba6, 0xfc5a, 0xfbf5, 0xfc5a, 0xfbf5, 0xfbd9, 0xfb67, 0xfbd9, 0xfb67, +0xfe05, 0xfd8e, 0xfe05, 0xfd8e, 0xfe16, 0xfda5, 0xfe16, 0xfda5, 0xfddf, 0xfd7e, 0xfddf, +0xfd7e, 0xfddf, 0xfd7e, 0xfee6, 0xfe9e, 0xfee6, 0xfe9e, 0xfe03, 0xfde0, 0xfe03, 0xfde0, +0xfd9f, 0xfdaa, 0xfd9f, 0xfdaa, 0xfda6, 0xfdeb, 0xfda6, 0xfdeb, 0xfc35, 0xfcbb, 0xfc35, +0xfcbb, 0xfc35, 0xfcbb, 0xfb0b, 0xfbda, 0xfb0b, 0xfbda, 0xf87b, 0xf999, 0xf87b, 0xf999, +0xf73e, 0xf8b0, 0xf73e, 0xf8b0, 0xf6e4, 0xf8aa, 0xf6e4, 0xf8aa, 0xf416, 0xf630, 0xf416, +0xf630, 0xf273, 0xf4e1, 0xf273, 0xf4e1, 0xf273, 0xf4e1, 0xf09f, 0xf35a, 0xf09f, 0xf35a, +0xee6e, 0xf171, 0xee6e, 0xf171, 0xecef, 0xf031, 0xecef, 0xf031, 0xec04, 0xef7b, 0xec04, +0xef7b, 0xeab9, 0xee5b, 0xeab9, 0xee5b, 0xe788, 0xeb48, 0xe788, 0xeb48, 0xe788, 0xeb48, +0xe783, 0xeb54, 0xe783, 0xeb54, 0xe803, 0xebd9, 0xe803, 0xebd9, 0xe6bf, 0xea8e, 0xe6bf, +0xea8e, 0xe7f6, 0xebb1, 0xe7f6, 0xebb1, 0xe7c6, 0xeb62, 0xe7c6, 0xeb62, 0xe7c6, 0xeb62, +0xe8e1, 0xec56, 0xe8e1, 0xec56, 0xea88, 0xedcc, 0xea88, 0xedcc, 0xe9ca, 0xecd6, 0xe9ca, +0xecd6, 0xeba1, 0xee72, 0xeba1, 0xee72, 0xec1d, 0xeeae, 0xec1d, 0xeeae, 0xee4d, 0xf09c, +0xee4d, 0xf09c, 0xee4d, 0xf09c, 0xf184, 0xf391, 0xf184, 0xf391, 0xf209, 0xf3d5, 0xf209, +0xf3d5, 0xf40e, 0xf59c, 0xf40e, 0xf59c, 0xf597, 0xf6ea, 0xf597, 0xf6ea, 0xf7a6, 0xf8c2, +0xf7a6, 0xf8c2, 0xf888, 0xf970, 0xf888, 0xf970, 0xf888, 0xf970, 0xf86b, 0xf924, 0xf86b, +0xf924, 0xf7aa, 0xf837, 0xf7aa, 0xf837, 0xf63d, 0xf6a2, 0xf63d, 0xf6a2, 0xf7a2, 0xf7e1, +0xf7a2, 0xf7e1, 0xf7fb, 0xf816, 0xf7fb, 0xf816, 0xf7fb, 0xf816, 0xf886, 0xf87e, 0xf886, +0xf87e, 0xfb3d, 0xfb10, 0xfb3d, 0xfb10, 0xfc22, 0xfbd0, 0xfc22, 0xfbd0, 0xfc5c, 0xfbe2, +0xfc5c, 0xfbe2, 0xfdb4, 0xfd0f, 0xfdb4, 0xfd0f, 0xfde2, 0xfd10, 0xfde2, 0xfd10, 0xfde2, +0xfd10, 0xfdee, 0xfcea, 0xfdee, 0xfcea, 0xfed6, 0xfd9d, 0xfed6, 0xfd9d, 0xae, 0xff3d, +0xae, 0xff3d, 0x2b8, 0x10c, 0x2b8, 0x10c, 0x2dc, 0xf4, 0x2dc, 0xf4, 0x3ec, +0x1c7, 0x3ec, 0x1c7, 0x3ec, 0x1c7, 0x642, 0x3e0, 0x642, 0x3e0, 0x760, 0x4c4, +0x760, 0x4c4, 0x885, 0x5b4, 0x885, 0x5b4, 0xa38, 0x736, 0xa38, 0x736, 0x9ed, +0x6c2, 0x9ed, 0x6c2, 0x9ed, 0x6c2, 0xb31, 0x7e6, 0xb31, 0x7e6, 0xd82, 0xa20, +0xd82, 0xa20, 0xdee, 0xa81, 0xdee, 0xa81, 0xfd4, 0xc68, 0xfd4, 0xc68, 0x1026, +0xcc6, 0x1026, 0xcc6, 0x1032, 0xceb, 0x1032, 0xceb, 0x1032, 0xceb, 0x1178, 0xe55, +0x1178, 0xe55, 0x11cd, 0xeda, 0x11cd, 0xeda, 0x11f4, 0xf3a, 0x11f4, 0xf3a, 0x108d, +0xe15, 0x108d, 0xe15, 0xe6a, 0xc3a, 0xe6a, 0xc3a, 0xe02, 0xc20, 0xe02, 0xc20, +0xe02, 0xc20, 0xe0f, 0xc7d, 0xe0f, 0xc7d, 0xe40, 0xcfe, 0xe40, 0xcfe, 0xfdf, +0xeec, 0xfdf, 0xeec, 0xe7c, 0xdd3, 0xe7c, 0xdd3, 0xcfd, 0xc99, 0xcfd, 0xc99, +0xcfd, 0xc99, 0xd2d, 0xd07, 0xd2d, 0xd07, 0xc3c, 0xc4a, 0xc3c, 0xc4a, 0xbdd, +0xc15, 0xbdd, 0xc15, 0xa65, 0xabc, 0xa65, 0xabc, 0xa2e, 0xa99, 0xa2e, 0xa99, +0x97c, 0x9ef, 0x97c, 0x9ef, 0x97c, 0x9ef, 0x72b, 0x79c, 0x72b, 0x79c, 0x5bd, +0x621, 0x5bd, 0x621, 0x45b, 0x4a9, 0x45b, 0x4a9, 0x3fd, 0x42d, 0x3fd, 0x42d, +0x3a2, 0x3ae, 0x3a2, 0x3ae, 0x438, 0x41b, 0x438, 0x41b, 0x438, 0x41b, 0x467, +0x41f, 0x467, 0x41f, 0x478, 0x403, 0x478, 0x403, 0x6a5, 0x605, 0x6a5, 0x605, +0x736, 0x66c, 0x736, 0x66c, 0x72b, 0x63b, 0x72b, 0x63b, 0x72b, 0x63b, 0x820, +0x70f, 0x820, 0x70f, 0x854, 0x727, 0x854, 0x727, 0x972, 0x82f, 0x972, 0x82f, +0xa3a, 0x8e6, 0xa3a, 0x8e6, 0xa60, 0x901, 0xa60, 0x901, 0xaf9, 0x995, 0xaf9, +0x995, 0xaf9, 0x995, 0x9ff, 0x89a, 0x9ff, 0x89a, 0xaa2, 0x940, 0xaa2, 0x940, +0xadc, 0x980, 0xadc, 0x980, 0xa05, 0x8b0, 0xa05, 0x8b0, 0xa3d, 0x8f0, 0xa3d, +0x8f0, 0x801, 0x6bb, 0x801, 0x6bb, 0x801, 0x6bb, 0x6fd, 0x5bd, 0x6fd, 0x5bd, +0x629, 0x4ed, 0x629, 0x4ed, 0x3db, 0x29f, 0x3db, 0x29f, 0x339, 0x1fa, 0x339, +0x1fa, 0x38a, 0x246, 0x38a, 0x246, 0x38a, 0x246, 0x442, 0x2f5, 0x442, 0x2f5, +0x3da, 0x281, 0x3da, 0x281, 0x2f4, 0x18f, 0x2f4, 0x18f, 0x305, 0x193, 0x305, +0x193, 0x2d4, 0x155, 0x2d4, 0x155, 0x309, 0x17f, 0x309, 0x17f, 0x309, 0x17f, +0x479, 0x2e8, 0x479, 0x2e8, 0x37b, 0x1e7, 0x37b, 0x1e7, 0x28e, 0xfe, 0x28e, +0xfe, 0x33f, 0x1ba, 0x33f, 0x1ba, 0x23f, 0xce, 0x23f, 0xce, 0x1b8, 0x64, +0x1b8, 0x64, 0x1b8, 0x64, 0xffd1, 0xfea3, 0xffd1, 0xfea3, 0xfe7d, 0xfd80, 0xfe7d, +0xfd80, 0xff68, 0xfea4, 0xff68, 0xfea4, 0xfd9e, 0xfd1c, 0xfd9e, 0xfd1c, 0xfaa8, 0xfa71, +0xfaa8, 0xfa71, 0xfaa8, 0xfa71, 0xf7c8, 0xf7e2, 0xf7c8, 0xf7e2, 0xf43d, 0xf4ad, 0xf43d, +0xf4ad, 0xf241, 0xf30a, 0xf241, 0xf30a, 0xf172, 0xf294, 0xf172, 0xf294, 0xf0a0, 0xf21c, +0xf0a0, 0xf21c, 0xf04c, 0xf21d, 0xf04c, 0xf21d, 0xf04c, 0xf21d, 0xef79, 0xf19a, 0xef79, +0xf19a, 0xef2b, 0xf194, 0xef2b, 0xf194, 0xefe1, 0xf28a, 0xefe1, 0xf28a, 0xf05a, 0xf336, +0xf05a, 0xf336, 0xefa7, 0xf2ac, 0xefa7, 0xf2ac, 0xefa7, 0xf2ac, 0xeedb, 0xf1fa, 0xeedb, +0xf1fa, 0xef2f, 0xf25c, 0xef2f, 0xf25c, 0xeffe, 0xf32a, 0xeffe, 0xf32a, 0xf0c5, 0xf3e3, +0xf0c5, 0xf3e3, 0xf03f, 0xf341, 0xf03f, 0xf341, 0xf093, 0xf36e, 0xf093, 0xf36e, 0xf093, +0xf36e, 0xf0a8, 0xf351, 0xf0a8, 0xf351, 0xf082, 0xf2f0, 0xf082, 0xf2f0, 0xf1a8, 0xf3d4, +0xf1a8, 0xf3d4, 0xf224, 0xf407, 0xf224, 0xf407, 0xf3db, 0xf572, 0xf3db, 0xf572, 0xf553, +0xf69c, 0xf553, 0xf69c, 0xf553, 0xf69c, 0xf684, 0xf77f, 0xf684, 0xf77f, 0xf847, 0xf8f5, +0xf847, 0xf8f5, 0xfa47, 0xfaaa, 0xfa47, 0xfaaa, 0xfcd6, 0xfcf1, 0xfcd6, 0xfcf1, 0xff03, +0xfedb, 0xff03, 0xfedb, 0xff03, 0xfedb, 0xfc, 0x97, 0xfc, 0x97, 0x178, 0xd9, +0x178, 0xd9, 0x2a8, 0x1d6, 0x2a8, 0x1d6, 0x417, 0x315, 0x417, 0x315, 0x500, +0x3d2, 0x500, 0x3d2, 0x720, 0x5ca, 0x720, 0x5ca, 0x720, 0x5ca, 0x831, 0x6b6, +0x831, 0x6b6, 0x9b5, 0x816, 0x9b5, 0x816, 0xb15, 0x953, 0xb15, 0x953, 0xbb7, +0x9d2, 0xbb7, 0x9d2, 0xde5, 0xbdc, 0xde5, 0xbdc, 0xe42, 0xc14, 0xe42, 0xc14, +0xe42, 0xc14, 0xeb5, 0xc62, 0xeb5, 0xc62, 0x108c, 0xe13, 0x108c, 0xe13, 0x10af, +0xe0e, 0x10af, 0xe0e, 0x12ac, 0xfe3, 0x12ac, 0xfe3, 0x1482, 0x1191, 0x1482, 0x1191, +0x1482, 0x1191, 0x1550, 0x123a, 0x1550, 0x123a, 0x1763, 0x142a, 0x1763, 0x142a, 0x189b, +0x1542, 0x189b, 0x1542, 0x1add, 0x176b, 0x1add, 0x176b, 0x1c0d, 0x1888, 0x1c0d, 0x1888, +0x1c89, 0x18fa, 0x1c89, 0x18fa, 0x1c89, 0x18fa, 0x1e4e, 0x1abe, 0x1e4e, 0x1abe, 0x1e77, +0x1af1, 0x1e77, 0x1af1, 0x1ed2, 0x1b61, 0x1ed2, 0x1b61, 0x1ead, 0x1b5d, 0x1ead, 0x1b5d, +0x1dfd, 0x1ad9, 0x1dfd, 0x1ad9, 0x1d73, 0x1a87, 0x1d73, 0x1a87, 0x1d73, 0x1a87, 0x1b1a, +0x1872, 0x1b1a, 0x1872, 0x196b, 0x1710, 0x196b, 0x1710, 0x1851, 0x164d, 0x1851, 0x164d, +0x15c5, 0x141e, 0x15c5, 0x141e, 0x1358, 0x1214, 0x1358, 0x1214, 0x1358, 0x1214, 0x1181, +0x10a2, 0x1181, 0x10a2, 0xfb3, 0xf3b, 0xfb3, 0xf3b, 0xde7, 0xdd3, 0xde7, 0xdd3, +0xb91, 0xbdf, 0xb91, 0xbdf, 0x96c, 0xa14, 0x96c, 0xa14, 0x746, 0x841, 0x746, +0x841, 0x746, 0x841, 0x4c9, 0x60e, 0x4c9, 0x60e, 0x2cc, 0x44e, 0x2cc, 0x44e, +0x127, 0x2db, 0x127, 0x2db, 0x8d, 0x265, 0x8d, 0x265, 0xffee, 0x1dc, 0xffee, +0x1dc, 0xff15, 0x10d, 0xff15, 0x10d, 0xff15, 0x10d, 0xfe71, 0x64, 0xfe71, 0x64, +0xfd63, 0xff45, 0xfd63, 0xff45, 0xfd0c, 0xfed1, 0xfd0c, 0xfed1, 0xfd0b, 0xfeab, 0xfd0b, +0xfeab, 0xfd4e, 0xfebe, 0xfd4e, 0xfebe, 0xfd4e, 0xfebe, 0xfd12, 0xfe4d, 0xfd12, 0xfe4d, +0xfd3e, 0xfe3e, 0xfd3e, 0xfe3e, 0xff8e, 0x50, 0xff8e, 0x50, 0x24a, 0x2cd, 0x24a, +0x2cd, 0x569, 0x5ac, 0x569, 0x5ac, 0x786, 0x78b, 0x786, 0x78b, 0x786, 0x78b, +0x7c4, 0x78d, 0x7c4, 0x78d, 0x8fc, 0x88d, 0x8fc, 0x88d, 0xa5d, 0x9bb, 0xa5d, +0x9bb, 0xadb, 0xa09, 0xadb, 0xa09, 0xadf, 0x9e2, 0xadf, 0x9e2, 0x990, 0x86b, +0x990, 0x86b, 0x990, 0x86b, 0x92a, 0x7e3, 0x92a, 0x7e3, 0x92b, 0x7c3, 0x92b, +0x7c3, 0x919, 0x794, 0x919, 0x794, 0xa66, 0x8c5, 0xa66, 0x8c5, 0xa5c, 0x8a0, +0xa5c, 0x8a0, 0xa5c, 0x8a0, 0x9f8, 0x821, 0x9f8, 0x821, 0xa7b, 0x888, 0xa7b, +0x888, 0xa79, 0x86b, 0xa79, 0x86b, 0x9f8, 0x7cd, 0x9f8, 0x7cd, 0xa3e, 0x7f5, +0xa3e, 0x7f5, 0xae6, 0x87f, 0xae6, 0x87f, 0xae6, 0x87f, 0xb6f, 0x8e9, 0xb6f, +0x8e9, 0xc1b, 0x978, 0xc1b, 0x978, 0xb8c, 0x8cd, 0xb8c, 0x8cd, 0xb57, 0x880, +0xb57, 0x880, 0xbaf, 0x8c5, 0xbaf, 0x8c5, 0xd5b, 0xa64, 0xd5b, 0xa64, 0xd5b, +0xa64, 0xdf5, 0xaf8, 0xdf5, 0xaf8, 0xbf6, 0x8fc, 0xbf6, 0x8fc, 0xc80, 0x995, +0xc80, 0x995, 0xc67, 0x996, 0xc67, 0x996, 0xb68, 0x8be, 0xb68, 0x8be, 0xb68, +0x8be, 0xae0, 0x869, 0xae0, 0x869, 0x87c, 0x647, 0x87c, 0x647, 0x67a, 0x494, +0x67a, 0x494, 0x4e9, 0x35e, 0x4e9, 0x35e, 0x3a7, 0x285, 0x3a7, 0x285, 0x25c, +0x1ac, 0x25c, 0x1ac, 0x25c, 0x1ac, 0xffcf, 0xff9b, 0xffcf, 0xff9b, 0xfd89, 0xfdd9, +0xfd89, 0xfdd9, 0xfbbf, 0xfc97, 0xfbbf, 0xfc97, 0xf94e, 0xfab0, 0xf94e, 0xfab0, 0xf73e, +0xf92b, 0xf73e, 0xf92b, 0xf4e6, 0xf75c, 0xf4e6, 0xf75c, 0xf4e6, 0xf75c, 0xf250, 0xf549, +0xf250, 0xf549, 0xefb1, 0xf325, 0xefb1, 0xf325, 0xec89, 0xf070, 0xec89, 0xf070, 0xea6c, +0xeebb, 0xea6c, 0xeebb, 0xe7af, 0xec58, 0xe7af, 0xec58, 0xe7af, 0xec58, 0xe469, 0xe95f, +0xe469, 0xe95f, 0xe231, 0xe764, 0xe231, 0xe764, 0xe093, 0xe5f4, 0xe093, 0xe5f4, 0xde4e, +0xe3ce, 0xde4e, 0xe3ce, 0xdc22, 0xe1b1, 0xdc22, 0xe1b1, 0xdb58, 0xe0e8, 0xdb58, 0xe0e8, +0xdb58, 0xe0e8, 0xdac4, 0xe048, 0xdac4, 0xe048, 0xdaae, 0xe019, 0xdaae, 0xe019, 0xda7d, +0xdfc6, 0xda7d, 0xdfc6, 0xdb67, 0xe085, 0xdb67, 0xe085, 0xdd45, 0xe231, 0xdd45, 0xe231, +0xdefc, 0xe3af, 0xdefc, 0xe3af, 0xdefc, 0xe3af, 0xe04f, 0xe4c7, 0xe04f, 0xe4c7, 0xe247, +0xe681, 0xe247, 0xe681, 0xe568, 0xe962, 0xe568, 0xe962, 0xe7b6, 0xeb71, 0xe7b6, 0xeb71, +0xea36, 0xedb3, 0xea36, 0xedb3, 0xea36, 0xedb3, 0xeb22, 0xee61, 0xeb22, 0xee61, 0xec6a, +0xef6e, 0xec6a, 0xef6e, 0xed5f, 0xf029, 0xed5f, 0xf029, 0xee3e, 0xf0ce, 0xee3e, 0xf0ce, +0xf0a7, 0xf300, 0xf0a7, 0xf300, 0xf038, 0xf259, 0xf038, 0xf259, 0xf038, 0xf259, 0xf201, +0xf3eb, 0xf201, 0xf3eb, 0xf417, 0xf5c9, 0xf417, 0xf5c9, 0xf475, 0xf5ed, 0xf475, 0xf5ed, +0xf605, 0xf741, 0xf605, 0xf741, 0xf6e4, 0xf7e3, 0xf6e4, 0xf7e3, 0xf6e4, 0xf7e3, 0xf8bb, +0xf97b, 0xf8bb, 0xf97b, 0xfae1, 0xfb5e, 0xfae1, 0xfb5e, 0xfd89, 0xfdc3, 0xfd89, 0xfdc3, +0xc5, 0xba, 0xc5, 0xba, 0x277, 0x226, 0x277, 0x226, 0x3ae, 0x319, 0x3ae, +0x319, 0x3ae, 0x319, 0x52c, 0x454, 0x52c, 0x454, 0x5a1, 0x48a, 0x5a1, 0x48a, +0x7b7, 0x667, 0x7b7, 0x667, 0xa86, 0x903, 0xa86, 0x903, 0xb80, 0x9d3, 0xb80, +0x9d3, 0xd49, 0xb7b, 0xd49, 0xb7b, 0xd49, 0xb7b, 0xea5, 0xcc3, 0xea5, 0xcc3, +0xe7b, 0xc92, 0xe7b, 0xc92, 0xea4, 0xcc2, 0xea4, 0xcc2, 0xfd7, 0xe0a, 0xfd7, +0xe0a, 0xf46, 0xd9d, 0xf46, 0xd9d, 0xf46, 0xd9d, 0xdf8, 0xc81, 0xdf8, 0xc81, +0xcc0, 0xb8a, 0xcc0, 0xb8a, 0xa87, 0x99f, 0xa87, 0x99f, 0x865, 0x7d8, 0x865, +0x7d8, 0x51b, 0x4f3, 0x51b, 0x4f3, 0x300, 0x345, 0x300, 0x345, 0x300, 0x345, +0xd9, 0x192, 0xd9, 0x192, 0xfe81, 0xffb4, 0xfe81, 0xffb4, 0xfd68, 0xff14, 0xfd68, +0xff14, 0xfa9e, 0xfcc4, 0xfa9e, 0xfcc4, 0xf805, 0xfaa2, 0xf805, 0xfaa2, 0xf652, 0xf960, +0xf652, 0xf960, 0xf652, 0xf960, 0xf430, 0xf7a8, 0xf430, 0xf7a8, 0xf16d, 0xf546, 0xf16d, +0xf546, 0xeeb0, 0xf2de, 0xeeb0, 0xf2de, 0xeccf, 0xf147, 0xeccf, 0xf147, 0xeb9e, 0xf052, +0xeb9e, 0xf052, 0xeb9e, 0xf052, 0xea84, 0xef67, 0xea84, 0xef67, 0xe8a7, 0xedac, 0xe8a7, +0xedac, 0xe676, 0xeb8e, 0xe676, 0xeb8e, 0xe576, 0xea96, 0xe576, 0xea96, 0xe58b, 0xeaa5, +0xe58b, 0xeaa5, 0xe584, 0xea8e, 0xe584, 0xea8e, 0xe584, 0xea8e, 0xe521, 0xea10, 0xe521, +0xea10, 0xe48d, 0xe959, 0xe48d, 0xe959, 0xe418, 0xe8b9, 0xe418, 0xe8b9, 0xe3b4, 0xe825, +0xe3b4, 0xe825, 0xe58b, 0xe9c6, 0xe58b, 0xe9c6, 0xe768, 0xeb6b, 0xe768, 0xeb6b, 0xe768, +0xeb6b, 0xe769, 0xeb2f, 0xe769, 0xeb2f, 0xe90f, 0xec97, 0xe90f, 0xec97, 0xea61, 0xeda9, +0xea61, 0xeda9, 0xeb5d, 0xee64, 0xeb5d, 0xee64, 0xec11, 0xeed6, 0xec11, 0xeed6, 0xec11, +0xeed6, 0xece4, 0xef65, 0xece4, 0xef65, 0xeeec, 0xf128, 0xeeec, 0xf128, 0xef15, 0xf10a, +0xef15, 0xf10a, 0xf07e, 0xf22a, 0xf07e, 0xf22a, 0xf33f, 0xf49f, 0xf33f, 0xf49f, 0xf440, +0xf550, 0xf440, 0xf550, 0xf440, 0xf550, 0xf51c, 0xf5d9, 0xf51c, 0xf5d9, 0xf698, 0xf6fe, +0xf698, 0xf6fe, 0xf7a2, 0xf7ad, 0xf7a2, 0xf7ad, 0xf8db, 0xf887, 0xf8db, 0xf887, 0xfaf1, +0xfa3a, 0xfaf1, 0xfa3a, 0xfd2c, 0xfc10, 0xfd2c, 0xfc10, 0xfd2c, 0xfc10, 0xff42, 0xfdbd, +0xff42, 0xfdbd, 0xffa7, 0xfdba, 0xffa7, 0xfdba, 0x191, 0xff3b, 0x191, 0xff3b, 0x3a0, +0xe4, 0x3a0, 0xe4, 0x54e, 0x22f, 0x54e, 0x22f, 0x54e, 0x22f, 0x8a3, 0x526, +0x8a3, 0x526, 0x95e, 0x58a, 0x95e, 0x58a, 0xb71, 0x74e, 0xb71, 0x74e, 0xe53, +0x9eb, 0xe53, 0x9eb, 0x1082, 0xbe1, 0x1082, 0xbe1, 0x1313, 0xe46, 0x1313, 0xe46, +0x1313, 0xe46, 0x1460, 0xf74, 0x1460, 0xf74, 0x167d, 0x1180, 0x167d, 0x1180, 0x1859, +0x135b, 0x1859, 0x135b, 0x1961, 0x1470, 0x1961, 0x1470, 0x199c, 0x14c5, 0x199c, 0x14c5, +0x198d, 0x14df, 0x198d, 0x14df, 0x198d, 0x14df, 0x18b4, 0x143b, 0x18b4, 0x143b, 0x1796, +0x135d, 0x1796, 0x135d, 0x175b, 0x136b, 0x175b, 0x136b, 0x164c, 0x12ad, 0x164c, 0x12ad, +0x1531, 0x11e9, 0x1531, 0x11e9, 0x1531, 0x11e9, 0x14d4, 0x11e5, 0x14d4, 0x11e5, 0x135f, +0x10cb, 0x135f, 0x10cb, 0x1131, 0xef9, 0x1131, 0xef9, 0x1020, 0xe41, 0x1020, 0xe41, +0xe86, 0xcfb, 0xe86, 0xcfb, 0xcd8, 0xb9d, 0xcd8, 0xb9d, 0xcd8, 0xb9d, 0xb2b, +0xa39, 0xb2b, 0xa39, 0xa83, 0x9d4, 0xa83, 0x9d4, 0x955, 0x8df, 0x955, 0x8df, +0x662, 0x61f, 0x662, 0x61f, 0x53e, 0x524, 0x53e, 0x524, 0x3c9, 0x3d1, 0x3c9, +0x3d1, 0x3c9, 0x3d1, 0x237, 0x25a, 0x237, 0x25a, 0x94, 0xca, 0x94, 0xca, +0xff42, 0xff87, 0xff42, 0xff87, 0xff31, 0xff7e, 0xff31, 0xff7e, 0x27, 0x7a, 0x27, +0x7a, 0x27, 0x7a, 0x101, 0x156, 0x101, 0x156, 0x68, 0xbd, 0x68, 0xbd, +0x56, 0xaa, 0x56, 0xaa, 0xffa8, 0xfff9, 0xffa8, 0xfff9, 0xff69, 0xffb7, 0xff69, +0xffb7, 0xff1e, 0xff6a, 0xff1e, 0xff6a, 0xff1e, 0xff6a, 0xfea4, 0xfeed, 0xfea4, 0xfeed, +0xfdd3, 0xfe18, 0xfdd3, 0xfe18, 0xfce4, 0xfd25, 0xfce4, 0xfd25, 0xfcf5, 0xfd31, 0xfcf5, +0xfd31, 0xfba3, 0xfbd7, 0xfba3, 0xfbd7, 0xfc34, 0xfc5e, 0xfc34, 0xfc5e, 0xfc34, 0xfc5e, +0xfdb5, 0xfdd2, 0xfdb5, 0xfdd2, 0xfdea, 0xfdf6, 0xfdea, 0xfdf6, 0xfd9e, 0xfd96, 0xfd9e, +0xfd96, 0xfd33, 0xfd11, 0xfd33, 0xfd11, 0xfd92, 0xfd50, 0xfd92, 0xfd50, 0xfd92, 0xfd50, +0xfd1a, 0xfcb4, 0xfd1a, 0xfcb4, 0xfcdb, 0xfc4b, 0xfcdb, 0xfc4b, 0xfd4a, 0xfc8c, 0xfd4a, +0xfc8c, 0xfdf5, 0xfd04, 0xfdf5, 0xfd04, 0xff51, 0xfe2a, 0xff51, 0xfe2a, 0x1ae, 0x4e, +0x1ae, 0x4e, 0x1ae, 0x4e, 0x380, 0x1e6, 0x380, 0x1e6, 0x3d4, 0x201, 0x3d4, +0x201, 0x4f0, 0x2e5, 0x4f0, 0x2e5, 0x569, 0x329, 0x569, 0x329, 0x5bd, 0x34d, +0x5bd, 0x34d, 0x723, 0x48a, 0x723, 0x48a, 0x723, 0x48a, 0x704, 0x448, 0x704, +0x448, 0x71a, 0x446, 0x71a, 0x446, 0x7c2, 0x4dd, 0x7c2, 0x4dd, 0x7cd, 0x4e2, +0x7cd, 0x4e2, 0x885, 0x59f, 0x885, 0x59f, 0x885, 0x59f, 0x828, 0x550, 0x828, +0x550, 0x6a3, 0x3e4, 0x6a3, 0x3e4, 0x5ad, 0x312, 0x5ad, 0x312, 0x504, 0x293, +0x504, 0x293, 0x4f3, 0x2b6, 0x4f3, 0x2b6, 0x40b, 0x208, 0x40b, 0x208, 0x40b, +0x208, 0x2ac, 0xe7, 0x2ac, 0xe7, 0x24b, 0xc8, 0x24b, 0xc8, 0x1d7, 0x97, +0x1d7, 0x97, 0x188, 0x8b, 0x188, 0x8b, 0x8f, 0xffd3, 0x8f, 0xffd3, 0x8f, +0xffd3, 0x24, 0xffa6, 0x24, 0xffa6, 0x7c, 0x38, 0x7c, 0x38, 0x22, 0x12, +0x22, 0x12, 0xff6f, 0xff8c, 0xff6f, 0xff8c, 0xfee9, 0xff2c, 0xfee9, 0xff2c, 0xff37, +0xff99, 0xff37, 0xff99, 0xff37, 0xff99, 0xfda0, 0xfe1a, 0xfda0, 0xfe1a, 0xfbd8, 0xfc61, +0xfbd8, 0xfc61, 0xfa48, 0xfadb, 0xfa48, 0xfadb, 0xf865, 0xf8fb, 0xf865, 0xf8fb, 0xf817, +0xf8aa, 0xf817, 0xf8aa, 0xf77f, 0xf80c, 0xf77f, 0xf80c, 0xf77f, 0xf80c, 0xf6e8, 0xf76b, +0xf6e8, 0xf76b, 0xf693, 0xf709, 0xf693, 0xf709, 0xf6e8, 0xf751, 0xf6e8, 0xf751, 0xf7d5, +0xf82f, 0xf7d5, 0xf82f, 0xf87c, 0xf8c9, 0xf87c, 0xf8c9, 0xf87c, 0xf8c9, 0xf8f8, 0xf938, +0xf8f8, 0xf938, 0xfac4, 0xfaf9, 0xfac4, 0xfaf9, 0xfb61, 0xfb8d, 0xfb61, 0xfb8d, 0xfaf1, +0xfb16, 0xfaf1, 0xfb16, 0xfbbb, 0xfbd9, 0xfbbb, 0xfbd9, 0xfac0, 0xfada, 0xfac0, 0xfada, +0xfac0, 0xfada, 0xfa60, 0xfa76, 0xfa60, 0xfa76, 0xf9dd, 0xf9ee, 0xf9dd, 0xf9ee, 0xf89d, +0xf8a9, 0xf89d, 0xf8a9, 0xf821, 0xf827, 0xf821, 0xf827, 0xf8c3, 0xf8c0, 0xf8c3, 0xf8c0, +0xf937, 0xf928, 0xf937, 0xf928, 0xf937, 0xf928, 0xf88a, 0xf86b, 0xf88a, 0xf86b, 0xf838, +0xf806, 0xf838, 0xf806, 0xf786, 0xf73b, 0xf786, 0xf73b, 0xf822, 0xf7ba, 0xf822, 0xf7ba, +0xf93f, 0xf8b5, 0xf93f, 0xf8b5, 0xf93f, 0xf8b5, 0xfc2d, 0xfb7d, 0xfc2d, 0xfb7d, 0xfdba, +0xfce1, 0xfdba, 0xfce1, 0xff05, 0xfe00, 0xff05, 0xfe00, 0x2a0, 0x16c, 0x2a0, 0x16c, +0x41f, 0x2bb, 0x41f, 0x2bb, 0x74b, 0x5b9, 0x74b, 0x5b9, 0x74b, 0x5b9, 0xa28, +0x869, 0xa28, 0x869, 0xc72, 0xa89, 0xc72, 0xa89, 0xe3b, 0xc2b, 0xe3b, 0xc2b, +0x1012, 0xde2, 0x1012, 0xde2, 0x1349, 0x10ff, 0x1349, 0x10ff, 0x1457, 0x11fa, 0x1457, +0x11fa, 0x1457, 0x11fa, 0x153d, 0x12d5, 0x153d, 0x12d5, 0x1640, 0x13d6, 0x1640, 0x13d6, +0x1727, 0x14c3, 0x1727, 0x14c3, 0x15f9, 0x13a3, 0x15f9, 0x13a3, 0x13c0, 0x1180, 0x13c0, +0x1180, 0x13c0, 0x1180, 0x12b0, 0x108e, 0x12b0, 0x108e, 0x11e1, 0xfe2, 0x11e1, 0xfe2, +0x11de, 0x1008, 0x11de, 0x1008, 0x1181, 0xfd7, 0x1181, 0xfd7, 0x11af, 0x1034, 0x11af, +0x1034, 0x1279, 0x112e, 0x1279, 0x112e, 0x1279, 0x112e, 0x11d0, 0x10b6, 0x11d0, 0x10b6, +0x10ab, 0xfbf, 0x10ab, 0xfbf, 0xfc0, 0xeff, 0xfc0, 0xeff, 0xe6f, 0xdd6, 0xe6f, +0xdd6, 0xee3, 0xe6d, 0xee3, 0xe6d, 0xf60, 0xf07, 0xf60, 0xf07, 0xf60, 0xf07, +0xeea, 0xea8, 0xeea, 0xea8, 0xee1, 0xeb0, 0xee1, 0xeb0, 0xe10, 0xde9, 0xe10, +0xde9, 0xe26, 0xe04, 0xe26, 0xe04, 0xdc7, 0xda4, 0xdc7, 0xda4, 0xdc7, 0xda4, +0xd17, 0xcee, 0xd17, 0xcee, 0xd15, 0xce3, 0xd15, 0xce3, 0xbf3, 0xbb4, 0xbf3, +0xbb4, 0xb45, 0xaf7, 0xb45, 0xaf7, 0xba7, 0xb4a, 0xba7, 0xb4a, 0xb57, 0xaeb, +0xb57, 0xaeb, 0xb57, 0xaeb, 0xad9, 0xa60, 0xad9, 0xa60, 0xc8c, 0xc07, 0xc8c, +0xc07, 0xe07, 0xd79, 0xe07, 0xd79, 0xfaa, 0xf17, 0xfaa, 0xf17, 0x11d4, 0x113e, +0x11d4, 0x113e, 0x11be, 0x112a, 0x11be, 0x112a, 0x11be, 0x112a, 0x11c0, 0x1130, 0x11c0, +0x1130, 0x113c, 0x10b5, 0x113c, 0x10b5, 0x105f, 0xfe3, 0x105f, 0xfe3, 0xf50, 0xee1, +0xf50, 0xee1, 0xdf6, 0xd95, 0xdf6, 0xd95, 0xdf6, 0xd95, 0xdfc, 0xda9, 0xdfc, +0xda9, 0xdc8, 0xd83, 0xdc8, 0xd83, 0xcdf, 0xca8, 0xcdf, 0xca8, 0xbe8, 0xbbb, +0xbe8, 0xbbb, 0xae2, 0xabd, 0xae2, 0xabd, 0x8ae, 0x88d, 0x8ae, 0x88d, 0x8ae, +0x88d, 0x830, 0x810, 0x830, 0x810, 0x826, 0x804, 0x826, 0x804, 0x6dd, 0x6b5, +0x6dd, 0x6b5, 0x60c, 0x5da, 0x60c, 0x5da, 0x4b7, 0x479, 0x4b7, 0x479, 0x48a, +0x43f, 0x48a, 0x43f, 0x48a, 0x43f, 0x33d, 0x2e1, 0x33d, 0x2e1, 0x25a, 0x1f0, +0x25a, 0x1f0, 0x2d7, 0x25e, 0x2d7, 0x25e, 0x2c8, 0x243, 0x2c8, 0x243, 0x388, +0x2fa, 0x388, 0x2fa, 0x388, 0x2fa, 0x46d, 0x3db, 0x46d, 0x3db, 0x54c, 0x4bb, +0x54c, 0x4bb, 0x4dc, 0x452, 0x4dc, 0x452, 0x3be, 0x342, 0x3be, 0x342, 0x357, +0x2f0, 0x357, 0x2f0, 0x375, 0x32a, 0x375, 0x32a, 0x375, 0x32a, 0x2b0, 0x287, +0x2b0, 0x287, 0x1e5, 0x1e5, 0x1e5, 0x1e5, 0xe8, 0x117, 0xe8, 0x117, 0xffdb, +0x3e, 0xffdb, 0x3e, 0xfede, 0xff77, 0xfede, 0xff77, 0xfd92, 0xfe65, 0xfd92, 0xfe65, +0xfd92, 0xfe65, 0xfdc2, 0xfece, 0xfdc2, 0xfece, 0xfcb0, 0xfdf5, 0xfcb0, 0xfdf5, 0xfb1f, +0xfc9b, 0xfb1f, 0xfc9b, 0xf8ad, 0xfa5c, 0xf8ad, 0xfa5c, 0xf62d, 0xf80a, 0xf62d, 0xf80a, +0xf62d, 0xf80a, 0xf42b, 0xf630, 0xf42b, 0xf630, 0xf1d1, 0xf3f7, 0xf1d1, 0xf3f7, 0xf0b6, +0xf2f6, 0xf0b6, 0xf2f6, 0xeedf, 0xf131, 0xeedf, 0xf131, 0xedab, 0xf007, 0xedab, 0xf007, +0xec83, 0xeee1, 0xec83, 0xeee1, 0xec83, 0xeee1, 0xebd9, 0xee32, 0xebd9, 0xee32, 0xeba9, +0xedf5, 0xeba9, 0xedf5, 0xeaf1, 0xed2c, 0xeaf1, 0xed2c, 0xea56, 0xec7a, 0xea56, 0xec7a, +0xe9ed, 0xebf8, 0xe9ed, 0xebf8, 0xe9c1, 0xebaf, 0xe9c1, 0xebaf, 0xe9c1, 0xebaf, 0xe9ea, +0xebbb, 0xe9ea, 0xebbb, 0xeb82, 0xed37, 0xeb82, 0xed37, 0xec4f, 0xede8, 0xec4f, 0xede8, +0xed8c, 0xef0c, 0xed8c, 0xef0c, 0xeeae, 0xf018, 0xeeae, 0xf018, 0xeeae, 0xf018, 0xf047, +0xf19f, 0xf047, 0xf19f, 0xf1f5, 0xf33f, 0xf1f5, 0xf33f, 0xf189, 0xf2ca, 0xf189, 0xf2ca, +0xf221, 0xf35c, 0xf221, 0xf35c, 0xf245, 0xf37e, 0xf245, 0xf37e, 0xf206, 0xf340, 0xf206, +0xf340, 0xf206, 0xf340, 0xf246, 0xf383, 0xf246, 0xf383, 0xf22a, 0xf36d, 0xf22a, 0xf36d, +0xf1a8, 0xf2f2, 0xf1a8, 0xf2f2, 0xf201, 0xf351, 0xf201, 0xf351, 0xf2ba, 0xf410, 0xf2ba, +0xf410, 0xf2ba, 0xf410, 0xf33d, 0xf497, 0xf33d, 0xf497, 0xf3ef, 0xf54a, 0xf3ef, 0xf54a, +0xf38a, 0xf4e4, 0xf38a, 0xf4e4, 0xf3d1, 0xf527, 0xf3d1, 0xf527, 0xf4af, 0xf5fd, 0xf4af, +0xf5fd, 0xf63e, 0xf782, 0xf63e, 0xf782, 0xf63e, 0xf782, 0xf7a1, 0xf8d8, 0xf7a1, 0xf8d8, +0xf8ff, 0xfa26, 0xf8ff, 0xfa26, 0xfb0c, 0xfc22, 0xfb0c, 0xfc22, 0xfab9, 0xfbbe, 0xfab9, +0xfbbe, 0xfab8, 0xfbad, 0xfab8, 0xfbad, 0xfbee, 0xfcd5, 0xfbee, 0xfcd5, 0xfbee, 0xfcd5, +0xfbd4, 0xfcaf, 0xfbd4, 0xfcaf, 0xfb90, 0xfc64, 0xfb90, 0xfc64, 0xfc2b, 0xfcfd, 0xfc2b, +0xfcfd, 0xfc92, 0xfd67, 0xfc92, 0xfd67, 0xfba3, 0xfc82, 0xfba3, 0xfc82, 0xfba3, 0xfc82, +0xfb49, 0xfc3a, 0xfb49, 0xfc3a, 0xfbf5, 0xfcfe, 0xfbf5, 0xfcfe, 0xfc64, 0xfd8c, 0xfc64, +0xfd8c, 0xfc9d, 0xfdeb, 0xfc9d, 0xfdeb, 0xfbf3, 0xfd6d, 0xfbf3, 0xfd6d, 0xfad1, 0xfc7b, +0xfad1, 0xfc7b, 0xfad1, 0xfc7b, 0xf9f8, 0xfbd7, 0xf9f8, 0xfbd7, 0xf90d, 0xfb23, 0xf90d, +0xfb23, 0xf6ed, 0xf93b, 0xf6ed, 0xf93b, 0xf449, 0xf6ce, 0xf449, 0xf6ce, 0xf2e2, 0xf59d, +0xf2e2, 0xf59d, 0xf2ae, 0xf59a, 0xf2ae, 0xf59a, 0xf2ae, 0xf59a, 0xf2ab, 0xf5c3, 0xf2ab, +0xf5c3, 0xf221, 0xf55e, 0xf221, 0xf55e, 0xf11f, 0xf47a, 0xf11f, 0xf47a, 0xef6b, 0xf2db, +0xef6b, 0xf2db, 0xee76, 0xf1f1, 0xee76, 0xf1f1, 0xee76, 0xf1f1, 0xed37, 0xf0b4, 0xed37, +0xf0b4, 0xeb8f, 0xef05, 0xeb8f, 0xef05, 0xeaf3, 0xee58, 0xeaf3, 0xee58, 0xea39, 0xed84, +0xea39, 0xed84, 0xe9d9, 0xed02, 0xe9d9, 0xed02, 0xe902, 0xec03, 0xe902, 0xec03, 0xe902, +0xec03, 0xe8b4, 0xeb87, 0xe8b4, 0xeb87, 0xe948, 0xebe8, 0xe948, 0xebe8, 0xe91d, 0xeb88, +0xe91d, 0xeb88, 0xe9d3, 0xec07, 0xe9d3, 0xec07, 0xebb7, 0xedb4, 0xebb7, 0xedb4, 0xed2f, +0xeef5, 0xed2f, 0xeef5, 0xed2f, 0xeef5, 0xee9b, 0xf02d, 0xee9b, 0xf02d, 0xf083, 0xf1e5, +0xf083, 0xf1e5, 0xf380, 0xf4b3, 0xf380, 0xf4b3, 0xf582, 0xf68c, 0xf582, 0xf68c, 0xf571, +0xf656, 0xf571, 0xf656, 0xf571, 0xf656, 0xf6fb, 0xf7bf, 0xf6fb, 0xf7bf, 0xf7a7, 0xf84e, +0xf7a7, 0xf84e, 0xf876, 0xf902, 0xf876, 0xf902, 0xfa3a, 0xfab0, 0xfa3a, 0xfab0, 0xfa77, +0xfad8, 0xfa77, 0xfad8, 0xfae3, 0xfb31, 0xfae3, 0xfb31, 0xfae3, 0xfb31, 0xfb51, 0xfb8b, +0xfb51, 0xfb8b, 0xfc90, 0xfcb6, 0xfc90, 0xfcb6, 0xfd06, 0xfd17, 0xfd06, 0xfd17, 0xfccd, +0xfcc8, 0xfccd, 0xfcc8, 0xfc2b, 0xfc0c, 0xfc2b, 0xfc0c, 0xfc42, 0xfc08, 0xfc42, 0xfc08, +0xfc42, 0xfc08, 0xfd54, 0xfcfc, 0xfd54, 0xfcfc, 0xfdd3, 0xfd5a, 0xfdd3, 0xfd5a, 0xff7b, +0xfee0, 0xff7b, 0xfee0, 0x2c, 0xff6d, 0x2c, 0xff6d, 0x1e8, 0x106, 0x1e8, 0x106, +0x1e8, 0x106, 0x3f3, 0x2ee, 0x3f3, 0x2ee, 0x43e, 0x317, 0x43e, 0x317, 0x616, +0x4d0, 0x616, 0x4d0, 0x797, 0x635, 0x797, 0x635, 0x7e9, 0x671, 0x7e9, 0x671, +0x8fa, 0x771, 0x8fa, 0x771, 0x8fa, 0x771, 0xa4d, 0x8ba, 0xa4d, 0x8ba, 0xb8a, +0x9f5, 0xb8a, 0x9f5, 0xbd9, 0xa49, 0xbd9, 0xa49, 0xbb9, 0xa36, 0xbb9, 0xa36, +0xd53, 0xbe3, 0xd53, 0xbe3, 0xdb4, 0xc61, 0xdb4, 0xc61, 0xdb4, 0xc61, 0xd9a, +0xc68, 0xd9a, 0xc68, 0xdc6, 0xcbc, 0xdc6, 0xcbc, 0xbeb, 0xb0e, 0xbeb, 0xb0e, +0x9ff, 0x951, 0x9ff, 0x951, 0x999, 0x91c, 0x999, 0x91c, 0x999, 0x91c, 0xa1c, +0x9cf, 0xa1c, 0x9cf, 0x938, 0x91b, 0x938, 0x91b, 0x9b4, 0x9c3, 0x9b4, 0x9c3, +0xa37, 0xa6e, 0xa37, 0xa6e, 0x88b, 0x8e4, 0x88b, 0x8e4, 0x7fd, 0x872, 0x7fd, +0x872, 0x7fd, 0x872, 0x756, 0x7de, 0x756, 0x7de, 0x718, 0x7ab, 0x718, 0x7ab, +0x6a7, 0x73c, 0x6a7, 0x73c, 0x637, 0x6c7, 0x637, 0x6c7, 0x688, 0x70a, 0x688, +0x70a, 0x62e, 0x69a, 0x62e, 0x69a, 0x62e, 0x69a, 0x652, 0x6a1, 0x652, 0x6a1, +0x63e, 0x66b, 0x63e, 0x66b, 0x5a8, 0x5ae, 0x5a8, 0x5ae, 0x4a4, 0x47f, 0x4a4, +0x47f, 0x2f5, 0x2a3, 0x2f5, 0x2a3, 0x2f5, 0x2a3, 0x1ba, 0x13b, 0x1ba, 0x13b, +0x1d1, 0x124, 0x1d1, 0x124, 0x212, 0x139, 0x212, 0x139, 0x291, 0x190, 0x291, +0x190, 0x45a, 0x334, 0x45a, 0x334, 0x5c6, 0x47f, 0x5c6, 0x47f, 0x5c6, 0x47f, +0x6fb, 0x598, 0x6fb, 0x598, 0x7dd, 0x663, 0x7dd, 0x663, 0x8f8, 0x76c, 0x8f8, +0x76c, 0x949, 0x7af, 0x949, 0x7af, 0x855, 0x6b2, 0x855, 0x6b2, 0x980, 0x7d7, +0x980, 0x7d7, 0x980, 0x7d7, 0xa84, 0x8d8, 0xa84, 0x8d8, 0xadc, 0x930, 0xadc, +0x930, 0xbb2, 0xa07, 0xbb2, 0xa07, 0xc08, 0xa5f, 0xc08, 0xa5f, 0xcf3, 0xb4c, +0xcf3, 0xb4c, 0xcf3, 0xb4c, 0xcf8, 0xb52, 0xcf8, 0xb52, 0xb9e, 0x9f9, 0xb9e, +0x9f9, 0xb37, 0x991, 0xb37, 0x991, 0xab4, 0x90c, 0xab4, 0x90c, 0xa50, 0x8a6, +0xa50, 0x8a6, 0xa87, 0x8d9, 0xa87, 0x8d9, 0xa87, 0x8d9, 0x94c, 0x79b, 0x94c, +0x79b, 0x8dd, 0x729, 0x8dd, 0x729, 0x88d, 0x6d7, 0x88d, 0x6d7, 0x7ee, 0x639, +0x7ee, 0x639, 0x90a, 0x759, 0x90a, 0x759, 0x9a1, 0x7f7, 0x9a1, 0x7f7, 0x9a1, +0x7f7, 0x945, 0x7a9, 0x945, 0x7a9, 0x968, 0x7df, 0x968, 0x7df, 0x9a5, 0x835, +0x9a5, 0x835, 0x8be, 0x76e, 0x8be, 0x76e, 0x836, 0x70d, 0x836, 0x70d, 0x836, +0x70d, 0x7bd, 0x6c2, 0x7bd, 0x6c2, 0x753, 0x68d, 0x753, 0x68d, 0x703, 0x678, +0x703, 0x678, 0x52e, 0x4e4, 0x52e, 0x4e4, 0x353, 0x34e, 0x353, 0x34e, 0x176, +0x1b9, 0x176, 0x1b9, 0x176, 0x1b9, 0xff94, 0x21, 0xff94, 0x21, 0xfe0d, 0xfee4, +0xfe0d, 0xfee4, 0xfc58, 0xfd79, 0xfc58, 0xfd79, 0xf92c, 0xfa93, 0xf92c, 0xfa93, 0xf6e0, +0xf88a, 0xf6e0, 0xf88a, 0xf6e0, 0xf88a, 0xf5e8, 0xf7d0, 0xf5e8, 0xf7d0, 0xf3ec, 0xf609, +0xf3ec, 0xf609, 0xf242, 0xf48d, 0xf242, 0xf48d, 0xf028, 0xf299, 0xf028, 0xf299, 0xef21, +0xf1ad, 0xef21, 0xf1ad, 0xeedb, 0xf17a, 0xeedb, 0xf17a, 0xeedb, 0xf17a, 0xee77, 0xf11d, +0xee77, 0xf11d, 0xef9b, 0xf240, 0xef9b, 0xf240, 0xefec, 0xf285, 0xefec, 0xf285, 0xeed0, +0xf156, 0xeed0, 0xf156, 0xeef6, 0xf161, 0xeef6, 0xf161, 0xef43, 0xf18b, 0xef43, 0xf18b, +0xef43, 0xf18b, 0xee71, 0xf091, 0xee71, 0xf091, 0xee79, 0xf06c, 0xee79, 0xf06c, 0xee78, +0xf03b, 0xee78, 0xf03b, 0xeedb, 0xf06c, 0xeedb, 0xf06c, 0xef96, 0xf0f4, 0xef96, 0xf0f4, +0xef96, 0xf0f4, 0xf087, 0xf1b1, 0xf087, 0xf1b1, 0xf21c, 0xf314, 0xf21c, 0xf314, 0xf4c1, +0xf587, 0xf4c1, 0xf587, 0xf84d, 0xf8e4, 0xf84d, 0xf8e4, 0xf9da, 0xfa44, 0xf9da, 0xfa44, +0xfb4a, 0xfb89, 0xfb4a, 0xfb89, 0xfb4a, 0xfb89, 0xfc36, 0xfc4b, 0xfc36, 0xfc4b, 0xfc85, +0xfc73, 0xfc85, 0xfc73, 0xfd1e, 0xfce6, 0xfd1e, 0xfce6, 0xfd85, 0xfd28, 0xfd85, 0xfd28, +0xfd7c, 0xfcfb, 0xfd7c, 0xfcfb, 0xfcc5, 0xfc20, 0xfcc5, 0xfc20, 0xfcc5, 0xfc20, 0xfe09, +0xfd3f, 0xfe09, 0xfd3f, 0xff4c, 0xfe5d, 0xff4c, 0xfe5d, 0x4a, 0xff34, 0x4a, 0xff34, +0x149, 0xb, 0x149, 0xb, 0x2ad, 0x146, 0x2ad, 0x146, 0x2ad, 0x146, 0x355, +0x1c4, 0x355, 0x1c4, 0x29c, 0xe0, 0x29c, 0xe0, 0x52f, 0x348, 0x52f, 0x348, +0x767, 0x554, 0x767, 0x554, 0x917, 0x6da, 0x917, 0x6da, 0xbde, 0x979, 0xbde, +0x979, 0xbde, 0x979, 0xd83, 0xaf9, 0xd83, 0xaf9, 0xfad, 0xd01, 0xfad, 0xd01, +0x1192, 0xeca, 0x1192, 0xeca, 0x1325, 0x1047, 0x1325, 0x1047, 0x158a, 0x129c, 0x158a, +0x129c, 0x166c, 0x1375, 0x166c, 0x1375, 0x166c, 0x1375, 0x16fe, 0x1406, 0x16fe, 0x1406, +0x18d5, 0x15e5, 0x18d5, 0x15e5, 0x18fb, 0x161a, 0x18fb, 0x161a, 0x196b, 0x16a1, 0x196b, +0x16a1, 0x199f, 0x16f3, 0x199f, 0x16f3, 0x199f, 0x16f3, 0x1908, 0x1682, 0x1908, 0x1682, +0x18c7, 0x166d, 0x18c7, 0x166d, 0x172b, 0x1502, 0x172b, 0x1502, 0x1598, 0x13a3, 0x1598, +0x13a3, 0x13ef, 0x1232, 0x13ef, 0x1232, 0x12dd, 0x1158, 0x12dd, 0x1158, 0x12dd, 0x1158, +0x1145, 0xff9, 0x1145, 0xff9, 0x104d, 0xf37, 0x104d, 0xf37, 0x1070, 0xf8e, 0x1070, +0xf8e, 0xf3e, 0xe8a, 0xf3e, 0xe8a, 0xe23, 0xd9a, 0xe23, 0xd9a, 0xc45, 0xbdf, +0xc45, 0xbdf, 0xc45, 0xbdf, 0xa52, 0xa09, 0xa52, 0xa09, 0x884, 0x850, 0x884, +0x850, 0x691, 0x66b, 0x691, 0x66b, 0x50c, 0x4ec, 0x50c, 0x4ec, 0x3c3, 0x3a1, +0x3c3, 0x3a1, 0x3c3, 0x3a1, 0x25b, 0x231, 0x25b, 0x231, 0x11e, 0xe5, 0x11e, +0xe5, 0x68, 0x1b, 0x68, 0x1b, 0xffa4, 0xff3e, 0xffa4, 0xff3e, 0xfeed, 0xfe6a, +0xfeed, 0xfe6a, 0xfdaf, 0xfd0d, 0xfdaf, 0xfd0d, 0xfdaf, 0xfd0d, 0xfe24, 0xfd5f, 0xfe24, +0xfd5f, 0xfeee, 0xfe07, 0xfeee, 0xfe07, 0xfefc, 0xfdf2, 0xfefc, 0xfdf2, 0x1, 0xfed5, +0x1, 0xfed5, 0x53, 0xff07, 0x53, 0xff07, 0x189, 0x1d, 0x189, 0x1d, 0x189, +0x1d, 0x49d, 0x314, 0x49d, 0x314, 0x80a, 0x666, 0x80a, 0x666, 0xa3b, 0x87e, +0xa3b, 0x87e, 0xaa7, 0x8d4, 0xaa7, 0x8d4, 0xaef, 0x907, 0xaef, 0x907, 0xaef, +0x907, 0xba2, 0x9a6, 0xba2, 0x9a6, 0xba5, 0x997, 0xba5, 0x997, 0xbe3, 0x9c3, +0xbe3, 0x9c3, 0xbfd, 0x9cc, 0xbfd, 0x9cc, 0xc17, 0x9d5, 0xc17, 0x9d5, 0xccc, +0xa79, 0xccc, 0xa79, 0xccc, 0xa79, 0xbc6, 0x961, 0xbc6, 0x961, 0xa8c, 0x815, +0xa8c, 0x815, 0x95f, 0x6d6, 0x95f, 0x6d6, 0x8e4, 0x649, 0x8e4, 0x649, 0x9ca, +0x71d, 0x9ca, 0x71d, 0xa73, 0x7b5, 0xa73, 0x7b5, 0xa73, 0x7b5, 0xb16, 0x849, +0xb16, 0x849, 0xbfb, 0x922, 0xbfb, 0x922, 0xca9, 0x9c6, 0xca9, 0x9c6, 0xc56, +0x96d, 0xc56, 0x96d, 0xcec, 0xa03, 0xcec, 0xa03, 0xcec, 0xa03, 0xcd5, 0x9f1, +0xcd5, 0x9f1, 0xce1, 0xa08, 0xce1, 0xa08, 0xd67, 0xaa2, 0xd67, 0xaa2, 0xd17, +0xa6c, 0xd17, 0xa6c, 0xee2, 0xc5a, 0xee2, 0xc5a, 0xefa, 0xc9d, 0xefa, 0xc9d, +0xefa, 0xc9d, 0xe31, 0xc07, 0xe31, 0xc07, 0xdfe, 0xc0f, 0xdfe, 0xc0f, 0xcf4, +0xb47, 0xcf4, 0xb47, 0xc39, 0xad5, 0xc39, 0xad5, 0x978, 0x864, 0x978, 0x864, +0x70c, 0x64c, 0x70c, 0x64c, 0x70c, 0x64c, 0x59a, 0x533, 0x59a, 0x533, 0x340, +0x335, 0x340, 0x335, 0x11b, 0x16b, 0x11b, 0x16b, 0xff93, 0x40, 0xff93, 0x40, +0xff00, 0x8, 0xff00, 0x8, 0xff00, 0x8, 0xfdb7, 0xff16, 0xfdb7, 0xff16, 0xfb36, +0xfcea, 0xfb36, 0xfcea, 0xf8cc, 0xfad0, 0xf8cc, 0xfad0, 0xf68a, 0xf8d7, 0xf68a, 0xf8d7, +0xf3c5, 0xf654, 0xf3c5, 0xf654, 0xf0d0, 0xf39b, 0xf0d0, 0xf39b, 0xf0d0, 0xf39b, 0xef17, +0xf215, 0xef17, 0xf215, 0xeda7, 0xf0d0, 0xeda7, 0xf0d0, 0xeae3, 0xee2e, 0xeae3, 0xee2e, +0xe8d5, 0xec3b, 0xe8d5, 0xec3b, 0xe703, 0xea7c, 0xe703, 0xea7c, 0xe411, 0xe796, 0xe411, +0xe796, 0xe411, 0xe796, 0xe310, 0xe699, 0xe310, 0xe699, 0xe28f, 0xe618, 0xe28f, 0xe618, +0xe1b7, 0xe538, 0xe1b7, 0xe538, 0xe125, 0xe49a, 0xe125, 0xe49a, 0xe084, 0xe3e9, 0xe084, +0xe3e9, 0xe084, 0xe3e9, 0xe0c1, 0xe412, 0xe0c1, 0xe412, 0xe103, 0xe43d, 0xe103, 0xe43d, +0xe2f8, 0xe619, 0xe2f8, 0xe619, 0xe515, 0xe81a, 0xe515, 0xe81a, 0xe624, 0xe90b, 0xe624, +0xe90b, 0xe768, 0xea31, 0xe768, 0xea31, 0xe768, 0xea31, 0xe890, 0xeb38, 0xe890, 0xeb38, +0xe9ad, 0xec33, 0xe9ad, 0xec33, 0xeaa9, 0xed0b, 0xeaa9, 0xed0b, 0xeba6, 0xede3, 0xeba6, +0xede3, 0xebce, 0xede5, 0xebce, 0xede5, 0xebce, 0xede5, 0xed8e, 0xef7c, 0xed8e, 0xef7c, +0xef2c, 0xf0f0, 0xef2c, 0xf0f0, 0xf06c, 0xf203, 0xf06c, 0xf203, 0xf2a2, 0xf40b, 0xf2a2, +0xf40b, 0xf333, 0xf46c, 0xf333, 0xf46c, 0xf3d1, 0xf4d9, 0xf3d1, 0xf4d9, 0xf3d1, 0xf4d9, +0xf462, 0xf536, 0xf462, 0xf536, 0xf653, 0xf6f2, 0xf653, 0xf6f2, 0xf859, 0xf8c4, 0xf859, +0xf8c4, 0xf9f0, 0xfa26, 0xf9f0, 0xfa26, 0xfc8f, 0xfc90, 0xfc8f, 0xfc90, 0xfd9b, 0xfd69, +0xfd9b, 0xfd69, 0xfd9b, 0xfd69, 0xff16, 0xfeb3, 0xff16, 0xfeb3, 0x1a9, 0x119, 0x1a9, +0x119, 0x3f0, 0x335, 0x3f0, 0x335, 0x56e, 0x48e, 0x56e, 0x48e, 0x67b, 0x57b, +0x67b, 0x57b, 0x67b, 0x57b, 0x760, 0x647, 0x760, 0x647, 0x879, 0x74e, 0x879, +0x74e, 0x9ec, 0x8b6, 0x9ec, 0x8b6, 0xb2d, 0x9f4, 0xb2d, 0x9f4, 0xc8e, 0xb5c, +0xc8e, 0xb5c, 0xd74, 0xc4f, 0xd74, 0xc4f, 0xd74, 0xc4f, 0xe65, 0xd56, 0xe65, +0xd56, 0xeb0, 0xdbf, 0xeb0, 0xdbf, 0xe13, 0xd48, 0xe13, 0xd48, 0xd1e, 0xc7f, +0xd1e, 0xc7f, 0xb3e, 0xad1, 0xb3e, 0xad1, 0x937, 0x903, 0x937, 0x903, 0x937, +0x903, 0x7c6, 0x7cf, 0x7c6, 0x7cf, 0x5bd, 0x605, 0x5bd, 0x605, 0x329, 0x3b3, +0x329, 0x3b3, 0x158, 0x227, 0x158, 0x227, 0xff76, 0x89, 0xff76, 0x89, 0xff76, +0x89, 0xfdfe, 0xff54, 0xfdfe, 0xff54, 0xfb9e, 0xfd35, 0xfb9e, 0xfd35, 0xf8ed, 0xfac4, +0xf8ed, 0xfac4, 0xf73a, 0xf94b, 0xf73a, 0xf94b, 0xf52e, 0xf777, 0xf52e, 0xf777, 0xf3d9, +0xf654, 0xf3d9, 0xf654, 0xf3d9, 0xf654, 0xf20e, 0xf4b7, 0xf20e, 0xf4b7, 0xf07f, 0xf351, +0xf07f, 0xf351, 0xef12, 0xf206, 0xef12, 0xf206, 0xedae, 0xf0c0, 0xedae, 0xf0c0, 0xed20, +0xf049, 0xed20, 0xf049, 0xeb75, 0xeeb1, 0xeb75, 0xeeb1, 0xeb75, 0xeeb1, 0xea3b, 0xed84, +0xea3b, 0xed84, 0xe9e2, 0xed33, 0xe9e2, 0xed33, 0xea3a, 0xed8e, 0xea3a, 0xed8e, 0xea79, +0xedcc, 0xea79, 0xedcc, 0xea35, 0xed82, 0xea35, 0xed82, 0xea35, 0xed82, 0xeb45, 0xee89, +0xeb45, 0xee89, 0xebad, 0xeee4, 0xebad, 0xeee4, 0xeb7b, 0xeea1, 0xeb7b, 0xeea1, 0xec3b, +0xef4d, 0xec3b, 0xef4d, 0xeb60, 0xee5b, 0xeb60, 0xee5b, 0xea87, 0xed68, 0xea87, 0xed68, +0xea87, 0xed68, 0xeb4f, 0xee12, 0xeb4f, 0xee12, 0xeba7, 0xee49, 0xeba7, 0xee49, 0xecb2, +0xef30, 0xecb2, 0xef30, 0xedb0, 0xf007, 0xedb0, 0xf007, 0xee9f, 0xf0ca, 0xee9f, 0xf0ca, +0xef40, 0xf13c, 0xef40, 0xf13c, 0xef40, 0xf13c, 0xefc4, 0xf18e, 0xefc4, 0xf18e, 0xf0dd, +0xf270, 0xf0dd, 0xf270, 0xf019, 0xf173, 0xf019, 0xf173, 0xf0ca, 0xf1e7, 0xf0ca, 0xf1e7, +0xf263, 0xf340, 0xf263, 0xf340, 0xf263, 0xf340, 0xf2c8, 0xf362, 0xf2c8, 0xf362, 0xf51b, +0xf56f, 0xf51b, 0xf56f, 0xf88f, 0xf89c, 0xf88f, 0xf89c, 0xfac7, 0xfa8c, 0xfac7, 0xfa8c, +0xfc93, 0xfc0e, 0xfc93, 0xfc0e, 0xff12, 0xfe44, 0xff12, 0xfe44, 0xff12, 0xfe44, 0x10c, +0xfff7, 0x10c, 0xfff7, 0x27e, 0x123, 0x27e, 0x123, 0x3b3, 0x214, 0x3b3, 0x214, +0x5b4, 0x3d6, 0x5b4, 0x3d6, 0x6fc, 0x4e2, 0x6fc, 0x4e2, 0x7e0, 0x58f, 0x7e0, +0x58f, 0x7e0, 0x58f, 0xa13, 0x792, 0xa13, 0x792, 0xb2d, 0x881, 0xb2d, 0x881, +0xc9e, 0x9ce, 0xc9e, 0x9ce, 0xea0, 0xbb4, 0xea0, 0xbb4, 0xfee, 0xced, 0xfee, +0xced, 0xfee, 0xced, 0xfca, 0xcbc, 0xfca, 0xcbc, 0xef8, 0xbe3, 0xef8, 0xbe3, +0xe47, 0xb33, 0xe47, 0xb33, 0xe86, 0xb79, 0xe86, 0xb79, 0x1029, 0xd2a, 0x1029, +0xd2a, 0x10ee, 0xe03, 0x10ee, 0xe03, 0x10ee, 0xe03, 0x11b8, 0xee6, 0x11b8, 0xee6, +0x112f, 0xe7b, 0x112f, 0xe7b, 0x108c, 0xdf9, 0x108c, 0xdf9, 0x106e, 0xdfe, 0x106e, +0xdfe, 0xf55, 0xd0b, 0xf55, 0xd0b, 0xdf9, 0xbd7, 0xdf9, 0xbd7, 0xdf9, 0xbd7, +0xc32, 0xa39, 0xc32, 0xa39, 0xc56, 0xa85, 0xc56, 0xa85, 0xc06, 0xa5e, 0xc06, +0xa5e, 0xb1f, 0x99d, 0xb1f, 0x99d, 0xa16, 0x8bb, 0xa16, 0x8bb, 0xa16, 0x8bb, +0x7d6, 0x69f, 0x7d6, 0x69f, 0x650, 0x53c, 0x650, 0x53c, 0x48d, 0x39a, 0x48d, +0x39a, 0x342, 0x26f, 0x342, 0x26f, 0x2f9, 0x244, 0x2f9, 0x244, 0x285, 0x1ee, +0x285, 0x1ee, 0x285, 0x1ee, 0x1f8, 0x17d, 0x1f8, 0x17d, 0x2a7, 0x247, 0x2a7, +0x247, 0x363, 0x31d, 0x363, 0x31d, 0x3da, 0x3ae, 0x3da, 0x3ae, 0x500, 0x4ed, +0x500, 0x4ed, 0x5bc, 0x5c3, 0x5bc, 0x5c3, 0x5bc, 0x5c3, 0x588, 0x5a9, 0x588, +0x5a9, 0x48c, 0x4c6, 0x48c, 0x4c6, 0x3ae, 0x402, 0x3ae, 0x402, 0x2ee, 0x35b, +0x2ee, 0x35b, 0x38b, 0x410, 0x38b, 0x410, 0x38b, 0x410, 0x293, 0x330, 0x293, +0x330, 0x137, 0x1ea, 0x137, 0x1ea, 0x198, 0x261, 0x198, 0x261, 0x3, 0xdf, +0x3, 0xdf, 0xff53, 0x40, 0xff53, 0x40, 0xfdfb, 0xfef5, 0xfdfb, 0xfef5, 0xfdfb, +0xfef5, 0xfc58, 0xfd5e, 0xfc58, 0xfd5e, 0xfc42, 0xfd4f, 0xfc42, 0xfd4f, 0xfbc5, 0xfcd6, +0xfbc5, 0xfcd6, 0xfcb1, 0xfdc2, 0xfcb1, 0xfdc2, 0xfd6d, 0xfe7a, 0xfd6d, 0xfe7a, 0xfcae, +0xfdb4, 0xfcae, 0xfdb4, 0xfcae, 0xfdb4, 0xfc89, 0xfd83, 0xfc89, 0xfd83, 0xfe40, 0xff2c, +0xfe40, 0xff2c, 0x15, 0xf0, 0x15, 0xf0, 0x23a, 0x301, 0x23a, 0x301, 0x383, +0x435, 0x383, 0x435, 0x383, 0x435, 0x3ab, 0x447, 0x3ab, 0x447, 0x567, 0x5ec, +0x567, 0x5ec, 0x627, 0x695, 0x627, 0x695, 0x66e, 0x6c7, 0x66e, 0x6c7, 0x725, +0x76b, 0x725, 0x76b, 0x6eb, 0x71f, 0x6eb, 0x71f, 0x6eb, 0x71f, 0x6fb, 0x721, +0x6fb, 0x721, 0x745, 0x75f, 0x745, 0x75f, 0x617, 0x62a, 0x617, 0x62a, 0x42a, +0x43a, 0x42a, 0x43a, 0x2c3, 0x2d4, 0x2c3, 0x2d4, 0x2c3, 0x2d4, 0x17f, 0x194, +0x17f, 0x194, 0xb7, 0xd5, 0xb7, 0xd5, 0xa0, 0xc9, 0xa0, 0xc9, 0x8e, +0xc5, 0x8e, 0xc5, 0xff5c, 0xffa3, 0xff5c, 0xffa3, 0xfe6f, 0xfec8, 0xfe6f, 0xfec8, +0xfe6f, 0xfec8, 0xfde5, 0xfe50, 0xfde5, 0xfe50, 0xfd0f, 0xfd8b, 0xfd0f, 0xfd8b, 0xfc43, +0xfcd1, 0xfc43, 0xfcd1, 0xfc5a, 0xfcf8, 0xfc5a, 0xfcf8, 0xfe67, 0xff12, 0xfe67, 0xff12, +0xff44, 0xfffb, 0xff44, 0xfffb, 0xff44, 0xfffb, 0xff56, 0x14, 0xff56, 0x14, 0xff0e, +0xffd0, 0xff0e, 0xffd0, 0xfdcb, 0xfe8e, 0xfdcb, 0xfe8e, 0xfd64, 0xfe24, 0xfd64, 0xfe24, +0xfd58, 0xfe12, 0xfd58, 0xfe12, 0xfd58, 0xfe12, 0xfc0b, 0xfcbb, 0xfc0b, 0xfcbb, 0xfa54, +0xfaf7, 0xfa54, 0xfaf7, 0xfa77, 0xfb0b, 0xfa77, 0xfb0b, 0xf9ba, 0xfa3e, 0xf9ba, 0xfa3e, +0xf97d, 0xf9ef, 0xf97d, 0xf9ef, 0xfb21, 0xfb80, 0xfb21, 0xfb80, 0xfb21, 0xfb80, 0xfbb2, +0xfbff, 0xfbb2, 0xfbff, 0xfc94, 0xfccf, 0xfc94, 0xfccf, 0xfe80, 0xfeab, 0xfe80, 0xfeab, +0xffcf, 0xffec, 0xffcf, 0xffec, 0xff67, 0xff78, 0xff67, 0xff78, 0xff58, 0xff60, 0xff58, +0xff60, 0xff58, 0xff60, 0xff39, 0xff3a, 0xff39, 0xff3a, 0xfe21, 0xfe1e, 0xfe21, 0xfe1e, +0xfd1d, 0xfd19, 0xfd1d, 0xfd19, 0xfceb, 0xfce9, 0xfceb, 0xfce9, 0xfd02, 0xfd03, 0xfd02, +0xfd03, 0xfd02, 0xfd03, 0xfbc1, 0xfbc6, 0xfbc1, 0xfbc6, 0xfb8d, 0xfb98, 0xfb8d, 0xfb98, +0xfb52, 0xfb63, 0xfb52, 0xfb63, 0xfa1a, 0xfa30, 0xfa1a, 0xfa30, 0xf9ea, 0xfa05, 0xf9ea, +0xfa05, 0xf95c, 0xf97a, 0xf95c, 0xf97a, 0xf95c, 0xf97a, 0xf916, 0xf935, 0xf916, 0xf935, +0xfa90, 0xfaac, 0xfa90, 0xfaac, 0xfadd, 0xfaf4, 0xfadd, 0xfaf4, 0xfafa, 0xfb08, 0xfafa, +0xfb08, 0xfd82, 0xfd85, 0xfd82, 0xfd85, 0xff4d, 0xff41, 0xff4d, 0xff41, 0xff4d, 0xff41, +0x187, 0x168, 0x187, 0x168, 0x3e3, 0x3b0, 0x3e3, 0x3b0, 0x4d8, 0x48e, 0x4d8, +0x48e, 0x68e, 0x62b, 0x68e, 0x62b, 0x89a, 0x81e, 0x89a, 0x81e, 0x89a, 0x81e, +0xacd, 0xa37, 0xacd, 0xa37, 0xc62, 0xbb3, 0xc62, 0xbb3, 0xd3c, 0xc74, 0xd3c, +0xc74, 0xdf5, 0xd18, 0xdf5, 0xd18, 0xeda, 0xde8, 0xeda, 0xde8, 0xea8, 0xda6, +0xea8, 0xda6, 0xea8, 0xda6, 0xe33, 0xd24, 0xe33, 0xd24, 0xddd, 0xcc4, 0xddd, +0xcc4, 0xc45, 0xb25, 0xc45, 0xb25, 0xc55, 0xb32, 0xc55, 0xb32, 0xcc9, 0xba6, +0xcc9, 0xba6, 0xcac, 0xb8a, 0xcac, 0xb8a, 0xcac, 0xb8a, 0xc56, 0xb38, 0xc56, +0xb38, 0xbd2, 0xab9, 0xbd2, 0xab9, 0xbaa, 0xa96, 0xbaa, 0xa96, 0xb5a, 0xa4b, +0xb5a, 0xa4b, 0xb1f, 0xa14, 0xb1f, 0xa14, 0xb1f, 0xa14, 0x923, 0x819, 0x923, +0x819, 0x8bd, 0x7b2, 0x8bd, 0x7b2, 0x96e, 0x85d, 0x96e, 0x85d, 0x928, 0x80f, +0x928, 0x80f, 0xa00, 0x8da, 0xa00, 0x8da, 0x9bb, 0x884, 0x9bb, 0x884, 0x9bb, +0x884, 0x999, 0x84c, 0x999, 0x84c, 0x9ea, 0x883, 0x9ea, 0x883, 0x9e6, 0x862, +0x9e6, 0x862, 0xa1f, 0x87c, 0xa1f, 0x87c, 0xa34, 0x86f, 0xa34, 0x86f, 0xa87, +0x8a0, 0xa87, 0x8a0, 0xa87, 0x8a0, 0xba4, 0x999, 0xba4, 0x999, 0xd9a, 0xb6e, +0xd9a, 0xb6e, 0xec0, 0xc73, 0xec0, 0xc73, 0xfbd, 0xd54, 0xfbd, 0xd54, 0x11f4, +0xf72, 0x11f4, 0xf72, 0x11f4, 0xf72, 0x133c, 0x10a5, 0x133c, 0x10a5, 0x131a, 0x1074, +0x131a, 0x1074, 0x133d, 0x108f, 0x133d, 0x108f, 0x132a, 0x1079, 0x132a, 0x1079, 0x140c, +0x115e, 0x140c, 0x115e, 0x141c, 0x1178, 0x141c, 0x1178, 0x141c, 0x1178, 0x1384, 0x10ef, +0x1384, 0x10ef, 0x13af, 0x112f, 0x13af, 0x112f, 0x11db, 0xf75, 0x11db, 0xf75, 0x11b3, +0xf6b, 0x11b3, 0xf6b, 0x1143, 0xf1e, 0x1143, 0xf1e, 0xedb, 0xcda, 0xedb, 0xcda, +0xedb, 0xcda, 0xd26, 0xb4c, 0xd26, 0xb4c, 0xb8c, 0x9d9, 0xb8c, 0x9d9, 0xb1c, +0x991, 0xb1c, 0x991, 0xb68, 0xa04, 0xb68, 0xa04, 0xc59, 0xb1c, 0xc59, 0xb1c, +0xc59, 0xb1c, 0xbbb, 0xaa2, 0xbbb, 0xaa2, 0xa64, 0x96f, 0xa64, 0x96f, 0x9bc, +0x8e8, 0x9bc, 0x8e8, 0x92c, 0x879, 0x92c, 0x879, 0x8bd, 0x828, 0x8bd, 0x828, +0x755, 0x6de, 0x755, 0x6de, 0x755, 0x6de, 0x6d3, 0x679, 0x6d3, 0x679, 0x6a7, +0x66a, 0x6a7, 0x66a, 0x65a, 0x63a, 0x65a, 0x63a, 0x5ed, 0x5eb, 0x5ed, 0x5eb, +0x4aa, 0x4c8, 0x4aa, 0x4c8, 0x40c, 0x44b, 0x40c, 0x44b, 0x40c, 0x44b, 0x410, +0x472, 0x410, 0x472, 0x2cf, 0x356, 0x2cf, 0x356, 0x114, 0x1c3, 0x114, 0x1c3, +0xffd1, 0xa9, 0xffd1, 0xa9, 0xfe41, 0xff44, 0xfe41, 0xff44, 0xfe41, 0xff44, 0xfcfe, +0xfe2d, 0xfcfe, 0xfe2d, 0xfbb5, 0xfd12, 0xfbb5, 0xfd12, 0xfb3d, 0xfcc6, 0xfb3d, 0xfcc6, +0xfa53, 0xfc08, 0xfa53, 0xfc08, 0xf8e1, 0xfabf, 0xf8e1, 0xfabf, 0xf84e, 0xfa52, 0xf84e, +0xfa52, 0xf84e, 0xfa52, 0xf74e, 0xf975, 0xf74e, 0xf975, 0xf600, 0xf844, 0xf600, 0xf844, +0xf458, 0xf6b3, 0xf458, 0xf6b3, 0xf30f, 0xf57a, 0xf30f, 0xf57a, 0xf1a1, 0xf416, 0xf1a1, +0xf416, 0xefe6, 0xf25c, 0xefe6, 0xf25c, 0xefe6, 0xf25c, 0xee47, 0xf0b8, 0xee47, 0xf0b8, +0xeccb, 0xef2f, 0xeccb, 0xef2f, 0xeb4a, 0xed98, 0xeb4a, 0xed98, 0xea56, 0xec89, 0xea56, +0xec89, 0xea6d, 0xec7d, 0xea6d, 0xec7d, 0xea6d, 0xec7d, 0xe9e6, 0xebcf, 0xe9e6, 0xebcf, +0xe9b6, 0xeb73, 0xe9b6, 0xeb73, 0xe952, 0xeae0, 0xe952, 0xeae0, 0xe964, 0xeac1, 0xe964, +0xeac1, 0xea7f, 0xebaa, 0xea7f, 0xebaa, 0xebc7, 0xecc1, 0xebc7, 0xecc1, 0xebc7, 0xecc1, +0xedbd, 0xee87, 0xedbd, 0xee87, 0xefa4, 0xf041, 0xefa4, 0xf041, 0xf214, 0xf287, 0xf214, +0xf287, 0xf37a, 0xf3c8, 0xf37a, 0xf3c8, 0xf43b, 0xf46a, 0xf43b, 0xf46a, 0xf43b, 0xf46a, +0xf4ed, 0xf501, 0xf4ed, 0xf501, 0xf4af, 0xf4ae, 0xf4af, 0xf4ae, 0xf48f, 0xf47d, 0xf48f, +0xf47d, 0xf4f4, 0xf4d9, 0xf4f4, 0xf4d9, 0xf5fe, 0xf5dd, 0xf5fe, 0xf5dd, 0xf59f, 0xf57d, +0xf59f, 0xf57d, 0xf59f, 0xf57d, 0xf568, 0xf549, 0xf568, 0xf549, 0xf5b8, 0xf59d, 0xf5b8, +0xf59d, 0xf49b, 0xf488, 0xf49b, 0xf488, 0xf55b, 0xf552, 0xf55b, 0xf552, 0xf689, 0xf689, +0xf689, 0xf689, 0xf6b1, 0xf6bb, 0xf6b1, 0xf6bb, 0xf6b1, 0xf6bb, 0xf86d, 0xf881, 0xf86d, +0xf881, 0xf8f8, 0xf916, 0xf8f8, 0xf916, 0xf901, 0xf927, 0xf901, 0xf927, 0xfa38, 0xfa66, +0xfa38, 0xfa66, 0xfadc, 0xfb11, 0xfadc, 0xfb11, 0xfadc, 0xfb11, 0xfd54, 0xfd90, 0xfd54, +0xfd90, 0xff38, 0xff7b, 0xff38, 0xff7b, 0xff13, 0xff5d, 0xff13, 0xff5d, 0xff86, 0xffd9, +0xff86, 0xffd9, 0xffb8, 0x16, 0xffb8, 0x16, 0x3e, 0xaa, 0x3e, 0xaa, 0x3e, +0xaa, 0x9a, 0x117, 0x9a, 0x117, 0x10, 0xa2, 0x10, 0xa2, 0xff24, 0xffcf, +0xff24, 0xffcf, 0xff2d, 0xfff7, 0xff2d, 0xfff7, 0xff54, 0x41, 0xff54, 0x41, 0xfe0f, +0xff24, 0xfe0f, 0xff24, 0xfe0f, 0xff24, 0xfcc6, 0xfe06, 0xfcc6, 0xfe06, 0xfa3a, 0xfbab, +0xfa3a, 0xfbab, 0xf7a4, 0xf948, 0xf7a4, 0xf948, 0xf65a, 0xf834, 0xf65a, 0xf834, 0xf5b2, +0xf7c2, 0xf5b2, 0xf7c2, 0xf5b2, 0xf7c2, 0xf507, 0xf74d, 0xf507, 0xf74d, 0xf2e6, 0xf561, +0xf2e6, 0xf561, 0xf1d4, 0xf481, 0xf1d4, 0xf481, 0xf138, 0xf413, 0xf138, 0xf413, 0xef09, +0xf20d, 0xef09, 0xf20d, 0xed83, 0xf0aa, 0xed83, 0xf0aa, 0xed83, 0xf0aa, 0xed51, 0xf092, +0xed51, 0xf092, 0xecee, 0xf041, 0xecee, 0xf041, 0xec2f, 0xef8b, 0xec2f, 0xef8b, 0xebf5, +0xef52, 0xebf5, 0xef52, 0xeb7b, 0xeece, 0xeb7b, 0xeece, 0xea7d, 0xedbd, 0xea7d, 0xedbd, +0xea7d, 0xedbd, 0xea52, 0xed76, 0xea52, 0xed76, 0xeb0d, 0xee0d, 0xeb0d, 0xee0d, 0xeabe, +0xed92, 0xeabe, 0xed92, 0xea1f, 0xecc0, 0xea1f, 0xecc0, 0xea14, 0xec7e, 0xea14, 0xec7e, +0xea14, 0xec7e, 0xe9d5, 0xec05, 0xe9d5, 0xec05, 0xeaf0, 0xece2, 0xeaf0, 0xece2, 0xed5d, +0xef0f, 0xed5d, 0xef0f, 0xef9c, 0xf10f, 0xef9c, 0xf10f, 0xf182, 0xf2b8, 0xf182, 0xf2b8, +0xf3d6, 0xf4d1, 0xf3d6, 0xf4d1, 0xf3d6, 0xf4d1, 0xf52a, 0xf5ec, 0xf52a, 0xf5ec, 0xf52f, +0xf5bd, 0xf52f, 0xf5bd, 0xf5f0, 0xf64e, 0xf5f0, 0xf64e, 0xf709, 0xf73b, 0xf709, 0xf73b, +0xf846, 0xf851, 0xf846, 0xf851, 0xfa0e, 0xf9f7, 0xfa0e, 0xf9f7, 0xfa0e, 0xf9f7, 0xfbd5, +0xfba0, 0xfbd5, 0xfba0, 0xfca2, 0xfc52, 0xfca2, 0xfc52, 0xfdea, 0xfd82, 0xfdea, 0xfd82, +0xff8e, 0xff10, 0xff8e, 0xff10, 0xffb7, 0xff25, 0xffb7, 0xff25, 0xffb7, 0xff25, 0xff12, +0xfe6c, 0xff12, 0xfe6c, 0xfeb1, 0xfdf8, 0xfeb1, 0xfdf8, 0xfe88, 0xfdba, 0xfe88, 0xfdba, +0xfebf, 0xfdde, 0xfebf, 0xfdde, 0x8b, 0xff93, 0x8b, 0xff93, 0x1fa, 0xeb, 0x1fa, +0xeb, 0x1fa, 0xeb, 0x2bb, 0x194, 0x2bb, 0x194, 0x383, 0x243, 0x383, 0x243, +0x547, 0x3ee, 0x547, 0x3ee, 0x789, 0x617, 0x789, 0x617, 0x82a, 0x6a0, 0x82a, +0x6a0, 0x926, 0x786, 0x926, 0x786, 0x926, 0x786, 0x995, 0x7e2, 0x995, 0x7e2, +0xa35, 0x874, 0xa35, 0x874, 0xb70, 0x9a4, 0xb70, 0x9a4, 0xc10, 0xa3f, 0xc10, +0xa3f, 0xd13, 0xb43, 0xd13, 0xb43, 0xd13, 0xb43, 0xd92, 0xbca, 0xd92, 0xbca, +0xdc5, 0xc0c, 0xdc5, 0xc0c, 0xdd9, 0xc35, 0xdd9, 0xc35, 0xdba, 0xc33, 0xdba, +0xc33, 0xcfc, 0xb98, 0xcfc, 0xb98, 0xbca, 0xa90, 0xbca, 0xa90, 0xbca, 0xa90, +0xac6, 0x9b9, 0xac6, 0x9b9, 0x9fa, 0x91f, 0x9fa, 0x91f, 0x8c0, 0x81a, 0x8c0, +0x81a, 0x744, 0x6d4, 0x744, 0x6d4, 0x61c, 0x5e2, 0x61c, 0x5e2, 0x523, 0x51d, +0x523, 0x51d, 0x523, 0x51d, 0x452, 0x47e, 0x452, 0x47e, 0x33a, 0x393, 0x33a, +0x393, 0x2fa, 0x37b, 0x2fa, 0x37b, 0x226, 0x2ca, 0x226, 0x2ca, 0x145, 0x203, +0x145, 0x203, 0x145, 0x203, 0x177, 0x248, 0x177, 0x248, 0x1bd, 0x299, 0x1bd, +0x299, 0x1a2, 0x282, 0x1a2, 0x282, 0x40, 0x11b, 0x40, 0x11b, 0xffad, 0x7b, +0xffad, 0x7b, 0xfeff, 0xffba, 0xfeff, 0xffba, 0xfeff, 0xffba, 0xfe81, 0xff24, 0xfe81, +0xff24, 0xfec8, 0xff4f, 0xfec8, 0xff4f, 0xfeab, 0xff12, 0xfeab, 0xff12, 0xfe91, 0xfed5, +0xfe91, 0xfed5, 0xfe95, 0xfeb7, 0xfe95, 0xfeb7, 0x29, 0x27, 0x29, 0x27, 0x29, +0x27, 0x163, 0x140, 0x163, 0x140, 0x28a, 0x247, 0x28a, 0x247, 0x493, 0x434, +0x493, 0x434, 0x5a5, 0x52e, 0x5a5, 0x52e, 0x64c, 0x5c1, 0x64c, 0x5c1, 0x64c, +0x5c1, 0x768, 0x6ce, 0x768, 0x6ce, 0x7a6, 0x700, 0x7a6, 0x700, 0x726, 0x67a, +0x726, 0x67a, 0x813, 0x763, 0x813, 0x763, 0x83a, 0x78b, 0x83a, 0x78b, 0x7f8, +0x74b, 0x7f8, 0x74b, 0x7f8, 0x74b, 0x901, 0x859, 0x901, 0x859, 0x8ed, 0x84a, +0x8ed, 0x84a, 0x838, 0x79c, 0x838, 0x79c, 0x840, 0x7aa, 0x840, 0x7aa, 0x7d5, +0x744, 0x7d5, 0x744, 0x778, 0x6eb, 0x778, 0x6eb, 0x778, 0x6eb, 0x7d8, 0x74d, +0x7d8, 0x74d, 0x86d, 0x7e3, 0x86d, 0x7e3, 0x8da, 0x84f, 0x8da, 0x84f, 0x82e, +0x7a2, 0x82e, 0x7a2, 0x8bb, 0x82d, 0x8bb, 0x82d, 0x8bb, 0x82d, 0x9c1, 0x930, +0x9c1, 0x930, 0x972, 0x8e0, 0x972, 0x8e0, 0x9ad, 0x91b, 0x9ad, 0x91b, 0x9f6, +0x966, 0x9f6, 0x966, 0xa89, 0x9ff, 0xa89, 0x9ff, 0xb46, 0xac6, 0xb46, 0xac6, +0xb46, 0xac6, 0xba4, 0xb34, 0xba4, 0xb34, 0xae7, 0xa8b, 0xae7, 0xa8b, 0x964, +0x924, 0x964, 0x924, 0x8a3, 0x884, 0x8a3, 0x884, 0x86c, 0x874, 0x86c, 0x874, +0x86c, 0x874, 0x749, 0x77e, 0x749, 0x77e, 0x48b, 0x4f2, 0x48b, 0x4f2, 0x204, +0x2a3, 0x204, 0x2a3, 0xff70, 0x4a, 0xff70, 0x4a, 0xfdb5, 0xfecd, 0xfdb5, 0xfecd, +0xfd35, 0xfe8b, 0xfd35, 0xfe8b, 0xfd35, 0xfe8b, 0xfbe3, 0xfd77, 0xfbe3, 0xfd77, 0xfa94, +0xfc65, 0xfa94, 0xfc65, 0xf92b, 0xfb35, 0xf92b, 0xfb35, 0xf793, 0xf9d2, 0xf793, 0xf9d2, +0xf640, 0xf8ae, 0xf640, 0xf8ae, 0xf4a0, 0xf734, 0xf4a0, 0xf734, 0xf4a0, 0xf734, 0xf399, +0xf64c, 0xf399, 0xf64c, 0xf2b6, 0xf57d, 0xf2b6, 0xf57d, 0xf164, 0xf437, 0xf164, 0xf437, +0xf111, 0xf3e5, 0xf111, 0xf3e5, 0xf05a, 0xf325, 0xf05a, 0xf325, 0xf05a, 0xf325, 0xef8b, +0xf244, 0xef8b, 0xf244, 0xf034, 0xf2d1, 0xf034, 0xf2d1, 0xeffb, 0xf274, 0xeffb, 0xf274, +0xee93, 0xf0e0, 0xee93, 0xf0e0, 0xee6c, 0xf086, 0xee6c, 0xf086, 0xee9c, 0xf07e, 0xee9c, +0xf07e, 0xee9c, 0xf07e, 0xee3d, 0xefe4, 0xee3d, 0xefe4, 0xef61, 0xf0ca, 0xef61, 0xf0ca, +0xf124, 0xf24e, 0xf124, 0xf24e, 0xf329, 0xf414, 0xf329, 0xf414, 0xf540, 0xf5ed, 0xf540, +0xf5ed, 0xf760, 0xf7d0, 0xf760, 0xf7d0, 0xf760, 0xf7d0, 0xfa38, 0xfa6e, 0xfa38, 0xfa6e, +0xfbb3, 0xfbb2, 0xfbb3, 0xfbb2, 0xfcf2, 0xfcbc, 0xfcf2, 0xfcbc, 0xfdd4, 0xfd6d, 0xfdd4, +0xfd6d, 0xfd43, 0xfcae, 0xfd43, 0xfcae, 0xfd43, 0xfcae, 0xfd75, 0xfcb4, 0xfd75, 0xfcb4, +0xfe4f, 0xfd63, 0xfe4f, 0xfd63, 0xfeec, 0xfdd8, 0xfeec, 0xfdd8, 0xffb0, 0xfe74, 0xffb0, +0xfe74, 0xff4a, 0xfde6, 0xff4a, 0xfde6, 0xfe3d, 0xfcb1, 0xfe3d, 0xfcb1, 0xfe3d, 0xfcb1, +0xfec7, 0xfd11, 0xfec7, 0xfd11, 0xff1b, 0xfd3b, 0xff1b, 0xfd3b, 0x5, 0xfdf9, 0x5, +0xfdf9, 0x1b0, 0xff76, 0x1b0, 0xff76, 0x21a, 0xffb1, 0x21a, 0xffb1, 0x320, 0x87, +0x320, 0x87, 0x320, 0x87, 0x46c, 0x1a2, 0x46c, 0x1a2, 0x671, 0x377, 0x671, +0x377, 0x9d2, 0x6aa, 0x9d2, 0x6aa, 0xc6c, 0x917, 0xc6c, 0x917, 0xf20, 0xba4, +0xf20, 0xba4, 0xf20, 0xba4, 0x11e7, 0xe48, 0x11e7, 0xe48, 0x137f, 0xfc4, 0x137f, +0xfc4, 0x14c0, 0x10f0, 0x14c0, 0x10f0, 0x15e5, 0x1209, 0x15e5, 0x1209, 0x16d2, 0x12f3, +0x16d2, 0x12f3, 0x176d, 0x1395, 0x176d, 0x1395, 0x176d, 0x1395, 0x17c7, 0x1401, 0x17c7, +0x1401, 0x1788, 0x13dd, 0x1788, 0x13dd, 0x169f, 0x131c, 0x169f, 0x131c, 0x1569, 0x1216, +0x1569, 0x1216, 0x1455, 0x113c, 0x1455, 0x113c, 0x1386, 0x10ad, 0x1386, 0x10ad, 0x1386, +0x10ad, 0x1213, 0xf82, 0x1213, 0xf82, 0x1122, 0xede, 0x1122, 0xede, 0x105c, 0xe68, +0x105c, 0xe68, 0xec4, 0xd23, 0xec4, 0xd23, 0xd72, 0xc22, 0xd72, 0xc22, 0xd72, +0xc22, 0xc47, 0xb46, 0xc47, 0xb46, 0xafc, 0xa47, 0xafc, 0xa47, 0x992, 0x924, +0x992, 0x924, 0x893, 0x864, 0x893, 0x864, 0x7d4, 0x7de, 0x7d4, 0x7de, 0x713, +0x74d, 0x713, 0x74d, 0x713, 0x74d, 0x687, 0x6e7, 0x687, 0x6e7, 0x564, 0x5e1, +0x564, 0x5e1, 0x3ab, 0x43c, 0x3ab, 0x43c, 0x2af, 0x34c, 0x2af, 0x34c, 0x21f, +0x2be, 0x21f, 0x2be, 0x14a, 0x1e5, 0x14a, 0x1e5, 0x14a, 0x1e5, 0xaf, 0x13f, +0xaf, 0x13f, 0xff84, 0x4, 0xff84, 0x4, 0xfe40, 0xfeac, 0xfe40, 0xfeac, 0xfd81, +0xfdd7, 0xfd81, 0xfdd7, 0xfe18, 0xfe56, 0xfe18, 0xfe56, 0xfe18, 0xfe56, 0x30, 0x56, +0x30, 0x56, 0x1d2, 0x1e0, 0x1d2, 0x1e0, 0x3d2, 0x3ca, 0x3d2, 0x3ca, 0x5e3, +0x5c6, 0x5e3, 0x5c6, 0x6ac, 0x67c, 0x6ac, 0x67c, 0x79e, 0x75e, 0x79e, 0x75e, +0x79e, 0x75e, 0x991, 0x944, 0x991, 0x944, 0xa4f, 0x9f5, 0xa4f, 0x9f5, 0xa4b, +0x9e6, 0xa4b, 0x9e6, 0xb98, 0xb28, 0xb98, 0xb28, 0xbe3, 0xb69, 0xbe3, 0xb69, +0xc7c, 0xbf5, 0xc7c, 0xbf5, 0xc7c, 0xbf5, 0xcde, 0xc49, 0xcde, 0xc49, 0xbc9, +0xb22, 0xbc9, 0xb22, 0xbee, 0xb33, 0xbee, 0xb33, 0xb72, 0xa9d, 0xb72, 0xa9d, +0xab3, 0x9c1, 0xab3, 0x9c1, 0xab3, 0x9c1, 0xabb, 0x9a6, 0xabb, 0x9a6, 0xb07, +0x9cd, 0xb07, 0x9cd, 0xb69, 0xa04, 0xb69, 0xa04, 0xb91, 0x9fe, 0xb91, 0x9fe, +0xc37, 0xa73, 0xc37, 0xa73, 0xc8a, 0xa95, 0xc8a, 0xa95, 0xc8a, 0xa95, 0xd24, +0xafd, 0xd24, 0xafd, 0xe2c, 0xbd6, 0xe2c, 0xbd6, 0xf20, 0xc9d, 0xf20, 0xc9d, +0xf3f, 0xc94, 0xf3f, 0xc94, 0xeb7, 0xbeb, 0xeb7, 0xbeb, 0xf28, 0xc43, 0xf28, +0xc43, 0xf28, 0xc43, 0xfdf, 0xce9, 0xfdf, 0xce9, 0x1026, 0xd29, 0x1026, 0xd29, +0x105e, 0xd66, 0x105e, 0xd66, 0x10e8, 0xe00, 0x10e8, 0xe00, 0x1051, 0xd85, 0x1051, +0xd85, 0x1051, 0xd85, 0xec0, 0xc1a, 0xec0, 0xc1a, 0xd4b, 0xad7, 0xd4b, 0xad7, +0xb0f, 0x8d6, 0xb0f, 0x8d6, 0x8e1, 0x6ee, 0x8e1, 0x6ee, 0x719, 0x571, 0x719, +0x571, 0x5b7, 0x462, 0x5b7, 0x462, 0x5b7, 0x462, 0x507, 0x408, 0x507, 0x408, +0x316, 0x270, 0x316, 0x270, 0xd9, 0x8c, 0xd9, 0x8c, 0xff6a, 0xff75, 0xff6a, +0xff75, 0xfce1, 0xfd42, 0xfce1, 0xfd42, 0xfac3, 0xfb74, 0xfac3, 0xfb74, 0xfac3, 0xfb74, +0xf8fe, 0xf9fa, 0xf8fe, 0xf9fa, 0xf637, 0xf776, 0xf637, 0xf776, 0xf382, 0xf4fe, 0xf382, +0xf4fe, 0xf16b, 0xf31b, 0xf16b, 0xf31b, 0xefae, 0xf18a, 0xefae, 0xf18a, 0xefae, 0xf18a, +0xee2b, 0xf02a, 0xee2b, 0xf02a, 0xece1, 0xeefc, 0xece1, 0xeefc, 0xeaa4, 0xecd4, 0xeaa4, +0xecd4, 0xe8f8, 0xeb36, 0xe8f8, 0xeb36, 0xe823, 0xea6b, 0xe823, 0xea6b, 0xe778, 0xe9c5, +0xe778, 0xe9c5, 0xe778, 0xe9c5, 0xe792, 0xe9e2, 0xe792, 0xe9e2, 0xe6da, 0xe92a, 0xe6da, +0xe92a, 0xe647, 0xe898, 0xe647, 0xe898, 0xe644, 0xe894, 0xe644, 0xe894, 0xe680, 0xe8d0, +0xe680, 0xe8d0, 0xe680, 0xe8d0, 0xe7d0, 0xea22, 0xe7d0, 0xea22, 0xe86b, 0xeac1, 0xe86b, +0xeac1, 0xe8c2, 0xeb1c, 0xe8c2, 0xeb1c, 0xe9b5, 0xec15, 0xe9b5, 0xec15, 0xe997, 0xebfc, +0xe997, 0xebfc, 0xea00, 0xec6c, 0xea00, 0xec6c, 0xea00, 0xec6c, 0xeaae, 0xed20, 0xeaae, +0xed20, 0xea86, 0xecfc, 0xea86, 0xecfc, 0xeb7b, 0xedf2, 0xeb7b, 0xedf2, 0xec9b, 0xef0f, +0xec9b, 0xef0f, 0xeccb, 0xef38, 0xeccb, 0xef38, 0xecea, 0xef4b, 0xecea, 0xef4b, 0xecea, +0xef4b, 0xedc3, 0xf010, 0xedc3, 0xf010, 0xef2e, 0xf161, 0xef2e, 0xf161, 0xf1a0, 0xf3b2, +0xf1a0, 0xf3b2, 0xf3d2, 0xf5bc, 0xf3d2, 0xf5bc, 0xf550, 0xf70b, 0xf550, 0xf70b, 0xf550, +0xf70b, 0xf71b, 0xf8a1, 0xf71b, 0xf8a1, 0xf85f, 0xf9ab, 0xf85f, 0xf9ab, 0xfa78, 0xfb84, +0xfa78, 0xfb84, 0xfc15, 0xfce1, 0xfc15, 0xfce1, 0xfd87, 0xfe0f, 0xfd87, 0xfe0f, 0xffe7, +0x2e, 0xffe7, 0x2e, 0xffe7, 0x2e, 0x172, 0x178, 0x172, 0x178, 0x316, 0x2e0, +0x316, 0x2e0, 0x47d, 0x410, 0x47d, 0x410, 0x53e, 0x4a1, 0x53e, 0x4a1, 0x601, +0x53d, 0x601, 0x53d, 0x723, 0x640, 0x723, 0x640, 0x723, 0x640, 0x7f7, 0x700, +0x7f7, 0x700, 0x85a, 0x759, 0x85a, 0x759, 0x8df, 0x7e0, 0x8df, 0x7e0, 0x920, +0x82c, 0x920, 0x82c, 0x86c, 0x78e, 0x86c, 0x78e, 0x86c, 0x78e, 0x6a2, 0x5e3, +0x6a2, 0x5e3, 0x528, 0x490, 0x528, 0x490, 0x49e, 0x434, 0x49e, 0x434, 0x507, +0x4d0, 0x507, 0x4d0, 0x49b, 0x49b, 0x49b, 0x49b, 0x34b, 0x383, 0x34b, 0x383, +0x34b, 0x383, 0x1fd, 0x26e, 0x1fd, 0x26e, 0xffb0, 0x59, 0xffb0, 0x59, 0xfdef, +0xfecd, 0xfdef, 0xfecd, 0xfc53, 0xfd63, 0xfc53, 0xfd63, 0xfa49, 0xfb85, 0xfa49, 0xfb85, +0xf86c, 0xf9cf, 0xf86c, 0xf9cf, 0xf86c, 0xf9cf, 0xf6b8, 0xf83c, 0xf6b8, 0xf83c, 0xf5c6, +0xf764, 0xf5c6, 0xf764, 0xf4d9, 0xf68c, 0xf4d9, 0xf68c, 0xf3da, 0xf59b, 0xf3da, 0xf59b, +0xf27c, 0xf447, 0xf27c, 0xf447, 0xf27c, 0xf447, 0xf11d, 0xf2ed, 0xf11d, 0xf2ed, 0xf076, +0xf248, 0xf076, 0xf248, 0xef46, 0xf118, 0xef46, 0xf118, 0xeda6, 0xef76, 0xeda6, 0xef76, +0xec7b, 0xee49, 0xec7b, 0xee49, 0xec9d, 0xee6b, 0xec9d, 0xee6b, 0xec9d, 0xee6b, 0xed9f, +0xef6c, 0xed9f, 0xef6c, 0xee79, 0xf049, 0xee79, 0xf049, 0xefff, 0xf1d4, 0xefff, 0xf1d4, +0xf087, 0xf264, 0xf087, 0xf264, 0xefd4, 0xf1bb, 0xefd4, 0xf1bb, 0xf0aa, 0xf29d, 0xf0aa, +0xf29d, 0xf0aa, 0xf29d, 0xf0d8, 0xf2d9, 0xf0d8, 0xf2d9, 0xefbe, 0xf1cd, 0xefbe, 0xf1cd, +0xef9d, 0xf1b9, 0xef9d, 0xf1b9, 0xef22, 0xf14b, 0xef22, 0xf14b, 0xeeaf, 0xf0e1, 0xeeaf, +0xf0e1, 0xeeaf, 0xf0e1, 0xef76, 0xf1ae, 0xef76, 0xf1ae, 0xefd0, 0xf208, 0xefd0, 0xf208, +0xef6d, 0xf19f, 0xef6d, 0xf19f, 0xef52, 0xf177, 0xef52, 0xf177, 0xef30, 0xf140, 0xef30, +0xf140, 0xef9f, 0xf192, 0xef9f, 0xf192, 0xef9f, 0xf192, 0xf0e5, 0xf2b2, 0xf0e5, 0xf2b2, +0xf1f0, 0xf38e, 0xf1f0, 0xf38e, 0xf390, 0xf4f8, 0xf390, 0xf4f8, 0xf4cb, 0xf5f6, 0xf4cb, +0xf5f6, 0xf5d0, 0xf6b8, 0xf5d0, 0xf6b8, 0xf844, 0xf8e4, 0xf844, 0xf8e4, 0xf844, 0xf8e4, +0xf9ea, 0xfa3f, 0xf9ea, 0xfa3f, 0xfc24, 0xfc2d, 0xfc24, 0xfc2d, 0xfef2, 0xfeae, 0xfef2, +0xfeae, 0x8e, 0xffff, 0x8e, 0xffff, 0x264, 0x18f, 0x264, 0x18f, 0x264, 0x18f, +0x31e, 0x207, 0x31e, 0x207, 0x451, 0x300, 0x451, 0x300, 0x6c0, 0x53c, 0x6c0, +0x53c, 0x882, 0x6d4, 0x882, 0x6d4, 0x9c7, 0x7fa, 0x9c7, 0x7fa, 0x9dd, 0x7f9, +0x9dd, 0x7f9, 0x9dd, 0x7f9, 0x9bc, 0x7cb, 0x9bc, 0x7cb, 0xa47, 0x853, 0xa47, +0x853, 0xa87, 0x89a, 0xa87, 0x89a, 0xa51, 0x872, 0xa51, 0x872, 0xa3c, 0x870, +0xa3c, 0x870, 0x9d3, 0x821, 0x9d3, 0x821, 0x9d3, 0x821, 0x8fc, 0x767, 0x8fc, +0x767, 0x8fc, 0x786, 0x8fc, 0x786, 0x8fc, 0x7a6, 0x8fc, 0x7a6, 0x828, 0x6f2, +0x828, 0x6f2, 0x844, 0x72b, 0x844, 0x72b, 0x844, 0x72b, 0x8f6, 0x7f7, 0x8f6, +0x7f7, 0x932, 0x848, 0x932, 0x848, 0x942, 0x86a, 0x942, 0x86a, 0x934, 0x867, +0x934, 0x867, 0x93f, 0x87a, 0x93f, 0x87a, 0x89b, 0x7d7, 0x89b, 0x7d7, 0x89b, +0x7d7, 0x82c, 0x766, 0x82c, 0x766, 0x786, 0x6ba, 0x786, 0x6ba, 0x663, 0x58f, +0x663, 0x58f, 0x618, 0x53b, 0x618, 0x53b, 0x586, 0x49f, 0x586, 0x49f, 0x4a0, +0x3b0, 0x4a0, 0x3b0, 0x4a0, 0x3b0, 0x3be, 0x2c9, 0x3be, 0x2c9, 0x350, 0x259, +0x350, 0x259, 0x3b5, 0x2c0, 0x3b5, 0x2c0, 0x50a, 0x41e, 0x50a, 0x41e, 0x604, +0x525, 0x604, 0x525, 0x604, 0x525, 0x5e5, 0x519, 0x5e5, 0x519, 0x5c5, 0x513, +0x5c5, 0x513, 0x641, 0x5af, 0x641, 0x5af, 0x722, 0x6b3, 0x722, 0x6b3, 0x76b, +0x725, 0x76b, 0x725, 0x78e, 0x773, 0x78e, 0x773, 0x78e, 0x773, 0x756, 0x768, +0x756, 0x768, 0x789, 0x7c7, 0x789, 0x7c7, 0x7cd, 0x837, 0x7cd, 0x837, 0x72f, +0x7c1, 0x72f, 0x7c1, 0x5f3, 0x6a9, 0x5f3, 0x6a9, 0x486, 0x55b, 0x486, 0x55b, +0x486, 0x55b, 0x386, 0x472, 0x386, 0x472, 0x2a5, 0x3a1, 0x2a5, 0x3a1, 0x1ca, +0x2ce, 0x1ca, 0x2ce, 0xffb3, 0xb7, 0xffb3, 0xb7, 0xfeb6, 0xffb1, 0xfeb6, 0xffb1, +0xfeb6, 0xffb1, 0xfebd, 0xffa8, 0xfebd, 0xffa8, 0xfeaf, 0xff82, 0xfeaf, 0xff82, 0x2f, +0xe5, 0x2f, 0xe5, 0x12e, 0x1c2, 0x12e, 0x1c2, 0x1a5, 0x212, 0x1a5, 0x212, +0x2b6, 0x2fc, 0x2b6, 0x2fc, 0x2b6, 0x2fc, 0x41b, 0x439, 0x41b, 0x439, 0x51e, +0x516, 0x51e, 0x516, 0x5de, 0x5b3, 0x5de, 0x5b3, 0x6ac, 0x663, 0x6ac, 0x663, +0x7b5, 0x753, 0x7b5, 0x753, 0x7b5, 0x753, 0x844, 0x7d0, 0x844, 0x7d0, 0x868, +0x7ea, 0x868, 0x7ea, 0x8db, 0x85a, 0x8db, 0x85a, 0x88b, 0x80f, 0x88b, 0x80f, +0x7fb, 0x78c, 0x7fb, 0x78c, 0x729, 0x6ce, 0x729, 0x6ce, 0x729, 0x6ce, 0x55d, +0x51a, 0x55d, 0x51a, 0x352, 0x32e, 0x352, 0x32e, 0x278, 0x276, 0x278, 0x276, +0x186, 0x1a7, 0x186, 0x1a7, 0x46, 0x8b, 0x46, 0x8b, 0xff7f, 0xffe6, 0xff7f, +0xffe6, 0xff7f, 0xffe6, 0xfdfa, 0xfe81, 0xfdfa, 0xfe81, 0xfd16, 0xfdb8, 0xfd16, 0xfdb8, +0xfe01, 0xfeb8, 0xfe01, 0xfeb8, 0xfea4, 0xff6b, 0xfea4, 0xff6b, 0xfdcc, 0xfe9a, 0xfdcc, +0xfe9a, 0xfdcc, 0xfe9a, 0xfd73, 0xfe42, 0xfd73, 0xfe42, 0xfcea, 0xfdb2, 0xfcea, 0xfdb2, +0xfc71, 0xfd2b, 0xfc71, 0xfd2b, 0xfd10, 0xfdb5, 0xfd10, 0xfdb5, 0xfd83, 0xfe0d, 0xfd83, +0xfe0d, 0xfd5b, 0xfdc5, 0xfd5b, 0xfdc5, 0xfd5b, 0xfdc5, 0xfcee, 0xfd35, 0xfcee, 0xfd35, +0xfd3c, 0xfd5e, 0xfd3c, 0xfd5e, 0xfd6f, 0xfd6c, 0xfd6f, 0xfd6c, 0xfcc4, 0xfc9d, 0xfcc4, +0xfc9d, 0xfc20, 0xfbd7, 0xfc20, 0xfbd7, 0xfcf2, 0xfc8b, 0xfcf2, 0xfc8b, 0xfcf2, 0xfc8b, +0xfd83, 0xfd03, 0xfd83, 0xfd03, 0xfe7e, 0xfdea, 0xfe7e, 0xfdea, 0x9a, 0xfff9, 0x9a, +0xfff9, 0x124, 0x7e, 0x124, 0x7e, 0x1f1, 0x14c, 0x1f1, 0x14c, 0x1f1, 0x14c, +0x2be, 0x220, 0x2be, 0x220, 0x1ad, 0x11c, 0x1ad, 0x11c, 0x92, 0x14, 0x92, +0x14, 0x21, 0xffb8, 0x21, 0xffb8, 0xfeeb, 0xfe9b, 0xfeeb, 0xfe9b, 0xfeeb, 0xfeb5, +0xfeeb, 0xfeb5, 0xfeeb, 0xfeb5, 0xfeb7, 0xfe9a, 0xfeb7, 0xfe9a, 0xfce6, 0xfce1, 0xfce6, +0xfce1, 0xfc1f, 0xfc2f, 0xfc1f, 0xfc2f, 0xfad5, 0xfaf6, 0xfad5, 0xfaf6, 0xfa3e, 0xfa6a, +0xfa3e, 0xfa6a, 0xfa14, 0xfa46, 0xfa14, 0xfa46, 0xfa14, 0xfa46, 0xf94c, 0xf97e, 0xf94c, +0xf97e, 0xf996, 0xf9c1, 0xf996, 0xf9c1, 0xf9af, 0xf9cd, 0xf9af, 0xf9cd, 0xf9c2, 0xf9cd, +0xf9c2, 0xf9cd, 0xfb00, 0xfaf3, 0xfb00, 0xfaf3, 0xfb00, 0xfaf3, 0xfbd3, 0xfba9, 0xfbd3, +0xfba9, 0xfc78, 0xfc30, 0xfc78, 0xfc30, 0xfe7d, 0xfe15, 0xfe7d, 0xfe15, 0xffe2, 0xff59, +0xffe2, 0xff59, 0x103, 0x5b, 0x103, 0x5b, 0x22e, 0x16b, 0x22e, 0x16b, 0x22e, +0x16b, 0x2e9, 0x20f, 0x2e9, 0x20f, 0x46f, 0x383, 0x46f, 0x383, 0x5af, 0x4b7, +0x5af, 0x4b7, 0x69d, 0x5a1, 0x69d, 0x5a1, 0x6e4, 0x5eb, 0x6e4, 0x5eb, 0x6a5, +0x5b6, 0x6a5, 0x5b6, 0x6a5, 0x5b6, 0x717, 0x63a, 0x717, 0x63a, 0x707, 0x642, +0x707, 0x642, 0x70f, 0x668, 0x70f, 0x668, 0x6db, 0x655, 0x6db, 0x655, 0x651, +0x5f0, 0x651, 0x5f0, 0x651, 0x5f0, 0x6c3, 0x688, 0x6c3, 0x688, 0x6d3, 0x6bd, +0x6d3, 0x6bd, 0x70f, 0x71c, 0x70f, 0x71c, 0x69c, 0x6c9, 0x69c, 0x6c9, 0x565, +0x5ab, 0x565, 0x5ab, 0x4e5, 0x53e, 0x4e5, 0x53e, 0x4e5, 0x53e, 0x4fd, 0x560, +0x4fd, 0x560, 0x57f, 0x5e3, 0x57f, 0x5e3, 0x567, 0x5c4, 0x567, 0x5c4, 0x565, +0x5b0, 0x565, 0x5b0, 0x543, 0x573, 0x543, 0x573, 0x553, 0x560, 0x553, 0x560, +0x553, 0x560, 0x53b, 0x51b, 0x53b, 0x51b, 0x4f8, 0x4a5, 0x4f8, 0x4a5, 0x534, +0x4a9, 0x534, 0x4a9, 0x527, 0x45f, 0x527, 0x45f, 0x61c, 0x516, 0x61c, 0x516, +0x61c, 0x516, 0x667, 0x522, 0x667, 0x522, 0x5d8, 0x455, 0x5d8, 0x455, 0x6a1, +0x4e3, 0x6a1, 0x4e3, 0x8cd, 0x6d9, 0x8cd, 0x6d9, 0xbb8, 0x993, 0xbb8, 0x993, +0xeb8, 0xc6a, 0xeb8, 0xc6a, 0xeb8, 0xc6a, 0x115a, 0xeeb, 0x115a, 0xeeb, 0x1255, +0xfcb, 0x1255, 0xfcb, 0x13d7, 0x113d, 0x13d7, 0x113d, 0x1540, 0x129c, 0x1540, 0x129c, +0x1501, 0x125b, 0x1501, 0x125b, 0x1543, 0x12a2, 0x1543, 0x12a2, 0x1543, 0x12a2, 0x14ab, +0x1215, 0x14ab, 0x1215, 0x14b3, 0x122c, 0x14b3, 0x122c, 0x1580, 0x130b, 0x1580, 0x130b, +0x1507, 0x12a6, 0x1507, 0x12a6, 0x143e, 0x11f2, 0x143e, 0x11f2, 0x143e, 0x11f2, 0x12d0, +0x1097, 0x12d0, 0x1097, 0x117a, 0xf53, 0x117a, 0xf53, 0x10ed, 0xed4, 0x10ed, 0xed4, +0x1068, 0xe5b, 0x1068, 0xe5b, 0xfeb, 0xde5, 0xfeb, 0xde5, 0x100d, 0xe0a, 0x100d, +0xe0a, 0x100d, 0xe0a, 0xef1, 0xcee, 0xef1, 0xcee, 0xe56, 0xc4f, 0xe56, 0xc4f, +0xedc, 0xcce, 0xedc, 0xcce, 0xe0e, 0xbf8, 0xe0e, 0xbf8, 0xed2, 0xcb5, 0xed2, +0xcb5, 0xf62, 0xd3e, 0xf62, 0xd3e, 0xf62, 0xd3e, 0xea5, 0xc7d, 0xea5, 0xc7d, +0xe47, 0xc1f, 0xe47, 0xc1f, 0xdfc, 0xbda, 0xdfc, 0xbda, 0xd53, 0xb3e, 0xd53, +0xb3e, 0xbe8, 0x9e7, 0xbe8, 0x9e7, 0xbe8, 0x9e7, 0xabf, 0x8da, 0xabf, 0x8da, +0x98e, 0x7cf, 0x98e, 0x7cf, 0x86a, 0x6da, 0x86a, 0x6da, 0x72b, 0x5d3, 0x72b, +0x5d3, 0x570, 0x459, 0x570, 0x459, 0x316, 0x248, 0x316, 0x248, 0x316, 0x248, +0xc8, 0x4a, 0xc8, 0x4a, 0xff2f, 0xff04, 0xff2f, 0xff04, 0xfe57, 0xfe85, 0xfe57, +0xfe85, 0xfd43, 0xfdcb, 0xfd43, 0xfdcb, 0xfc11, 0xfcf3, 0xfc11, 0xfcf3, 0xfabb, 0xfbf4, +0xfabb, 0xfbf4, 0xfabb, 0xfbf4, 0xf892, 0xfa1e, 0xf892, 0xfa1e, 0xf76b, 0xf944, 0xf76b, +0xf944, 0xf67a, 0xf89a, 0xf67a, 0xf89a, 0xf527, 0xf784, 0xf527, 0xf784, 0xf3d5, 0xf664, +0xf3d5, 0xf664, 0xf3d5, 0xf664, 0xf313, 0xf5cb, 0xf313, 0xf5cb, 0xf0e2, 0xf3b6, 0xf0e2, +0xf3b6, 0xeee4, 0xf1ca, 0xeee4, 0xf1ca, 0xeeef, 0xf1db, 0xeeef, 0xf1db, 0xeddb, 0xf0c2, +0xeddb, 0xf0c2, 0xecb8, 0xef90, 0xecb8, 0xef90, 0xecb8, 0xef90, 0xebab, 0xee6b, 0xebab, +0xee6b, 0xeb4c, 0xedee, 0xeb4c, 0xedee, 0xeab4, 0xed30, 0xeab4, 0xed30, 0xea5e, 0xecb0, +0xea5e, 0xecb0, 0xe9b6, 0xebdc, 0xe9b6, 0xebdc, 0xe9b6, 0xebdc, 0xe98d, 0xeb84, 0xe98d, +0xeb84, 0xeac3, 0xec8b, 0xeac3, 0xec8b, 0xeb9c, 0xed37, 0xeb9c, 0xed37, 0xeded, 0xef5d, +0xeded, 0xef5d, 0xeef1, 0xf038, 0xeef1, 0xf038, 0xf05f, 0xf181, 0xf05f, 0xf181, 0xf05f, +0xf181, 0xf152, 0xf252, 0xf152, 0xf252, 0xf1c7, 0xf2aa, 0xf1c7, 0xf2aa, 0xf33f, 0xf409, +0xf33f, 0xf409, 0xf3e5, 0xf498, 0xf3e5, 0xf498, 0xf4d1, 0xf570, 0xf4d1, 0xf570, 0xf586, +0xf614, 0xf586, 0xf614, 0xf586, 0xf614, 0xf6b9, 0xf736, 0xf6b9, 0xf736, 0xf662, 0xf6d0, +0xf662, 0xf6d0, 0xf6c9, 0xf727, 0xf6c9, 0xf727, 0xf687, 0xf6d5, 0xf687, 0xf6d5, 0xf62e, +0xf66b, 0xf62e, 0xf66b, 0xf62e, 0xf66b, 0xf7f2, 0xf81b, 0xf7f2, 0xf81b, 0xf88a, 0xf8a0, +0xf88a, 0xf8a0, 0xfa15, 0xfa14, 0xfa15, 0xfa14, 0xfb20, 0xfb09, 0xfb20, 0xfb09, 0xfc37, +0xfc08, 0xfc37, 0xfc08, 0xfd4f, 0xfd09, 0xfd4f, 0xfd09, 0xfd4f, 0xfd09, 0xfe09, 0xfdad, +0xfe09, 0xfdad, 0xfe95, 0xfe25, 0xfe95, 0xfe25, 0xfe83, 0xfe02, 0xfe83, 0xfe02, 0xfe77, +0xfdeb, 0xfe77, 0xfdeb, 0xff4f, 0xfebd, 0xff4f, 0xfebd, 0x256, 0x1c4, 0x256, 0x1c4, +0x256, 0x1c4, 0x254, 0x1cb, 0x254, 0x1cb, 0x194, 0x11d, 0x194, 0x11d, 0x395, +0x338, 0x395, 0x338, 0x431, 0x3f7, 0x431, 0x3f7, 0x36e, 0x360, 0x36e, 0x360, +0x36e, 0x360, 0x292, 0x2ba, 0x292, 0x2ba, 0x14e, 0x1b4, 0x14e, 0x1b4, 0x48, +0xf3, 0x48, 0xf3, 0xff4e, 0x43, 0xff4e, 0x43, 0xfcbd, 0xfe02, 0xfcbd, 0xfe02, +0xfa72, 0xfc09, 0xfa72, 0xfc09, 0xfa72, 0xfc09, 0xf887, 0xfa72, 0xf887, 0xfa72, 0xf700, +0xf93e, 0xf700, 0xf93e, 0xf6f7, 0xf986, 0xf6f7, 0xf986, 0xf436, 0xf711, 0xf436, 0xf711, +0xf073, 0xf393, 0xf073, 0xf393, 0xefd3, 0xf331, 0xefd3, 0xf331, 0xefd3, 0xf331, 0xef28, +0xf2bb, 0xef28, 0xf2bb, 0xed69, 0xf128, 0xed69, 0xf128, 0xec2d, 0xf00d, 0xec2d, 0xf00d, +0xead9, 0xeecf, 0xead9, 0xeecf, 0xe99a, 0xed9b, 0xe99a, 0xed9b, 0xe99a, 0xed9b, 0xe994, +0xed96, 0xe994, 0xed96, 0xe922, 0xed19, 0xe922, 0xed19, 0xe8ba, 0xec9f, 0xe8ba, 0xec9f, +0xe8f9, 0xecc3, 0xe8f9, 0xecc3, 0xe85d, 0xec05, 0xe85d, 0xec05, 0xe897, 0xec17, 0xe897, +0xec17, 0xe897, 0xec17, 0xe8df, 0xec32, 0xe8df, 0xec32, 0xe915, 0xec39, 0xe915, 0xec39, +0xe9f9, 0xecec, 0xe9f9, 0xecec, 0xea83, 0xed46, 0xea83, 0xed46, 0xeb50, 0xede3, 0xeb50, +0xede3, 0xecaf, 0xef13, 0xecaf, 0xef13, 0xecaf, 0xef13, 0xedac, 0xefe4, 0xedac, 0xefe4, +0xee86, 0xf095, 0xee86, 0xf095, 0xf027, 0xf20f, 0xf027, 0xf20f, 0xf0c6, 0xf28a, 0xf0c6, +0xf28a, 0xf1af, 0xf351, 0xf1af, 0xf351, 0xf1af, 0xf351, 0xf31d, 0xf49e, 0xf31d, 0xf49e, +0xf3e9, 0xf54b, 0xf3e9, 0xf54b, 0xf511, 0xf655, 0xf511, 0xf655, 0xf60d, 0xf731, 0xf60d, +0xf731, 0xf747, 0xf84a, 0xf747, 0xf84a, 0xf860, 0xf93f, 0xf860, 0xf93f, 0xf860, 0xf93f, +0xf9c1, 0xfa7a, 0xf9c1, 0xfa7a, 0xfaf7, 0xfb85, 0xfaf7, 0xfb85, 0xfbbe, 0xfc1f, 0xfbbe, +0xfc1f, 0xfd40, 0xfd70, 0xfd40, 0xfd70, 0xff0e, 0xff09, 0xff0e, 0xff09, 0xaa, 0x6c, +0xaa, 0x6c, 0xaa, 0x6c, 0x188, 0x110, 0x188, 0x110, 0x2be, 0x209, 0x2be, +0x209, 0x44e, 0x35c, 0x44e, 0x35c, 0x5b1, 0x484, 0x5b1, 0x484, 0x749, 0x5e2, +0x749, 0x5e2, 0x749, 0x5e2, 0x8b9, 0x71c, 0x8b9, 0x71c, 0x9d2, 0x803, 0x9d2, +0x803, 0xabf, 0x8c6, 0xabf, 0x8c6, 0xbcf, 0x9b4, 0xbcf, 0x9b4, 0xc89, 0xa55, +0xc89, 0xa55, 0xd1a, 0xad6, 0xd1a, 0xad6, 0xd1a, 0xad6, 0xd49, 0xb00, 0xd49, +0xb00, 0xcf9, 0xab5, 0xcf9, 0xab5, 0xcae, 0xa7b, 0xcae, 0xa7b, 0xc47, 0xa2f, +0xc47, 0xa2f, 0xc09, 0xa16, 0xc09, 0xa16, 0xb63, 0x99d, 0xb63, 0x99d, 0xb63, +0x99d, 0xa89, 0x8f8, 0xa89, 0x8f8, 0x9c1, 0x86b, 0x9c1, 0x86b, 0x8dc, 0x7c7, +0x8dc, 0x7c7, 0x7de, 0x70b, 0x7de, 0x70b, 0x694, 0x604, 0x694, 0x604, 0x694, +0x604, 0x58e, 0x541, 0x58e, 0x541, 0x478, 0x46b, 0x478, 0x46b, 0x371, 0x3a0, +0x371, 0x3a0, 0x27c, 0x2e1, 0x27c, 0x2e1, 0x134, 0x1c9, 0x134, 0x1c9, 0xb, +0xc7, 0xb, 0xc7, 0xb, 0xc7, 0xff74, 0x50, 0xff74, 0x50, 0xff13, 0x6, +0xff13, 0x6, 0xfe7b, 0xff7c, 0xfe7b, 0xff7c, 0xfe15, 0xff1d, 0xfe15, 0xff1d, 0xfda2, +0xfea8, 0xfda2, 0xfea8, 0xfd4d, 0xfe4a, 0xfd4d, 0xfe4a, 0xfd4d, 0xfe4a, 0xfd18, 0xfe07, +0xfd18, 0xfe07, 0xfd1e, 0xfdf9, 0xfd1e, 0xfdf9, 0xfd80, 0xfe43, 0xfd80, 0xfe43, 0xfe09, +0xfeb2, 0xfe09, 0xfeb2, 0xfeb5, 0xff43, 0xfeb5, 0xff43, 0xfeb5, 0xff43, 0xff42, 0xffb5, +0xff42, 0xffb5, 0x45, 0x9d, 0x45, 0x9d, 0x13a, 0x179, 0x13a, 0x179, 0x1ec, +0x214, 0x1ec, 0x214, 0x32b, 0x33f, 0x32b, 0x33f, 0x416, 0x418, 0x416, 0x418, +0x416, 0x418, 0x488, 0x47b, 0x488, 0x47b, 0x58b, 0x571, 0x58b, 0x571, 0x65d, +0x639, 0x65d, 0x639, 0x67e, 0x650, 0x67e, 0x650, 0x6a8, 0x671, 0x6a8, 0x671, +0x6b3, 0x673, 0x6b3, 0x673, 0x6b3, 0x673, 0x66b, 0x620, 0x66b, 0x620, 0x678, +0x622, 0x678, 0x622, 0x67f, 0x61a, 0x67f, 0x61a, 0x5f7, 0x580, 0x5f7, 0x580, +0x5d5, 0x549, 0x5d5, 0x549, 0x5d5, 0x549, 0x63f, 0x59a, 0x63f, 0x59a, 0x6d2, +0x611, 0x6d2, 0x611, 0x76f, 0x68e, 0x76f, 0x68e, 0x84f, 0x74c, 0x84f, 0x74c, +0x927, 0x7ff, 0x927, 0x7ff, 0xa4b, 0x8fe, 0xa4b, 0x8fe, 0xa4b, 0x8fe, 0xb82, +0xa0f, 0xb82, 0xa0f, 0xc7b, 0xae3, 0xc7b, 0xae3, 0xdf4, 0xc3a, 0xdf4, 0xc3a, +0xf12, 0xd3a, 0xf12, 0xd3a, 0x102d, 0xe3c, 0x102d, 0xe3c, 0x102d, 0xe3c, 0x1095, +0xe91, 0x1095, 0xe91, 0x108b, 0xe7b, 0x108b, 0xe7b, 0x1093, 0xe7f, 0x1093, 0xe7f, +0x1006, 0xdf8, 0x1006, 0xdf8, 0xf79, 0xd79, 0xf79, 0xd79, 0xe77, 0xc8f, 0xe77, +0xc8f, 0xe77, 0xc8f, 0xd43, 0xb7c, 0xd43, 0xb7c, 0xb55, 0x9b7, 0xb55, 0x9b7, +0x984, 0x818, 0x984, 0x818, 0x81d, 0x6e9, 0x81d, 0x6e9, 0x62a, 0x534, 0x62a, +0x534, 0x418, 0x364, 0x418, 0x364, 0x418, 0x364, 0x22c, 0x1bd, 0x22c, 0x1bd, +0xa1, 0x78, 0xa1, 0x78, 0xfef5, 0xff11, 0xfef5, 0xff11, 0xfd52, 0xfdb2, 0xfd52, +0xfdb2, 0xfb9f, 0xfc40, 0xfb9f, 0xfc40, 0xfb9f, 0xfc40, 0xfa2e, 0xfb0c, 0xfa2e, 0xfb0c, +0xf8ec, 0xfa01, 0xf8ec, 0xfa01, 0xf74e, 0xf892, 0xf74e, 0xf892, 0xf5ef, 0xf75d, 0xf5ef, +0xf75d, 0xf504, 0xf694, 0xf504, 0xf694, 0xf410, 0xf5ba, 0xf410, 0xf5ba, 0xf410, 0xf5ba, +0xf2d8, 0xf495, 0xf2d8, 0xf495, 0xf1b7, 0xf37f, 0xf1b7, 0xf37f, 0xf098, 0xf266, 0xf098, +0xf266, 0xef63, 0xf131, 0xef63, 0xf131, 0xeee4, 0xf0ad, 0xeee4, 0xf0ad, 0xeeff, 0xf0c0, +0xeeff, 0xf0c0, 0xeeff, 0xf0c0, 0xeecc, 0xf081, 0xeecc, 0xf081, 0xef0a, 0xf0b1, 0xef0a, +0xf0b1, 0xef91, 0xf129, 0xef91, 0xf129, 0xf048, 0xf1d0, 0xf048, 0xf1d0, 0xf18d, 0xf306, +0xf18d, 0xf306, 0xf18d, 0xf306, 0xf2e3, 0xf44d, 0xf2e3, 0xf44d, 0xf467, 0xf5c2, 0xf467, +0xf5c2, 0xf658, 0xf7a5, 0xf658, 0xf7a5, 0xf7fd, 0xf93c, 0xf7fd, 0xf93c, 0xf8b8, 0xf9e9, +0xf8b8, 0xf9e9, 0xf9b5, 0xfad7, 0xf9b5, 0xfad7, 0xf9b5, 0xfad7, 0xfa6d, 0xfb7f, 0xfa6d, +0xfb7f, 0xfb16, 0xfc16, 0xfb16, 0xfc16, 0xfc14, 0xfcfe, 0xfc14, 0xfcfe, 0xfca7, 0xfd78, +0xfca7, 0xfd78, 0xfd73, 0xfe27, 0xfd73, 0xfe27, 0xfdf2, 0xfe83, 0xfdf2, 0xfe83, 0xfdf2, +0xfe83, 0xfe54, 0xfebd, 0xfe54, 0xfebd, 0xfefd, 0xff37, 0xfefd, 0xff37, 0xff69, 0xff70, +0xff69, 0xff70, 0xffe2, 0xffaf, 0xffe2, 0xffaf, 0xe5, 0x73, 0xe5, 0x73, 0xe5, +0x73, 0x1e2, 0x12d, 0x1e2, 0x12d, 0x2df, 0x1e3, 0x2df, 0x1e3, 0x467, 0x323, +0x467, 0x323, 0x610, 0x481, 0x610, 0x481, 0x7b6, 0x5de, 0x7b6, 0x5de, 0x993, +0x773, 0x993, 0x773, 0x993, 0x773, 0xba8, 0x945, 0xba8, 0x945, 0xda8, 0xb06, +0xda8, 0xb06, 0xf44, 0xc6a, 0xf44, 0xc6a, 0x10c7, 0xdbc, 0x10c7, 0xdbc, 0x1259, +0xf27, 0x1259, 0xf27, 0x139f, 0x1050, 0x139f, 0x1050, 0x139f, 0x1050, 0x14d3, 0x1172, +0x14d3, 0x1172, 0x154f, 0x11e6, 0x154f, 0x11e6, 0x1588, 0x1223, 0x1588, 0x1223, 0x1597, +0x123f, 0x1597, 0x123f, 0x14ef, 0x11b0, 0x14ef, 0x11b0, 0x14ef, 0x11b0, 0x1497, 0x117a, +0x1497, 0x117a, 0x1383, 0x1090, 0x1383, 0x1090, 0x121f, 0xf5d, 0x121f, 0xf5d, 0x111d, +0xe91, 0x111d, 0xe91, 0xfcd, 0xd7c, 0xfcd, 0xd7c, 0xe82, 0xc6e, 0xe82, 0xc6e, +0xe82, 0xc6e, 0xd17, 0xb41, 0xd17, 0xb41, 0xbaf, 0xa15, 0xbaf, 0xa15, 0xa69, +0x90a, 0xa69, 0x90a, 0x8f4, 0x7cc, 0x8f4, 0x7cc, 0x7b8, 0x6c2, 0x7b8, 0x6c2, +0x6aa, 0x5e1, 0x6aa, 0x5e1, 0x6aa, 0x5e1, 0x596, 0x4f4, 0x596, 0x4f4, 0x4b4, +0x433, 0x4b4, 0x433, 0x37f, 0x317, 0x37f, 0x317, 0x2a1, 0x24d, 0x2a1, 0x24d, +0x1d3, 0x18d, 0x1d3, 0x18d, 0x1d3, 0x18d, 0xed, 0xb0, 0xed, 0xb0, 0x6b, +0x32, 0x6b, 0x32, 0xffb5, 0xff7c, 0xffb5, 0xff7c, 0xff33, 0xfef7, 0xff33, 0xfef7, +0xff18, 0xfed8, 0xff18, 0xfed8, 0xff0e, 0xfec7, 0xff0e, 0xfec7, 0xff0e, 0xfec7, 0xff09, +0xfebb, 0xff09, 0xfebb, 0xff6f, 0xff1a, 0xff6f, 0xff1a, 0xffd7, 0xff7b, 0xffd7, 0xff7b, +0x48, 0xffe7, 0x48, 0xffe7, 0xdc, 0x75, 0xdc, 0x75, 0x18c, 0x121, 0x18c, +0x121, 0x18c, 0x121, 0x218, 0x1aa, 0x218, 0x1aa, 0x267, 0x1f4, 0x267, 0x1f4, +0x328, 0x2b1, 0x328, 0x2b1, 0x405, 0x389, 0x405, 0x389, 0x4e8, 0x466, 0x4e8, +0x466, 0x4e8, 0x466, 0x564, 0x4d9, 0x564, 0x4d9, 0x59f, 0x508, 0x59f, 0x508, +0x5b5, 0x50f, 0x5b5, 0x50f, 0x5e6, 0x52d, 0x5e6, 0x52d, 0x663, 0x592, 0x663, +0x592, 0x6b8, 0x5cb, 0x6b8, 0x5cb, 0x6b8, 0x5cb, 0x71b, 0x60f, 0x71b, 0x60f, +0x7dc, 0x6ac, 0x7dc, 0x6ac, 0x901, 0x7a9, 0x901, 0x7a9, 0xa0c, 0x88b, 0xa0c, +0x88b, 0xb00, 0x953, 0xb00, 0x953, 0xbc4, 0x9eb, 0xbc4, 0x9eb, 0xbc4, 0x9eb, +0xcc4, 0xac0, 0xcc4, 0xac0, 0xd78, 0xb4b, 0xd78, 0xb4b, 0xe38, 0xbe4, 0xe38, +0xbe4, 0xf3f, 0xccb, 0xf3f, 0xccb, 0xfee, 0xd5e, 0xfee, 0xd5e, 0xfee, 0xd5e, +0x10ac, 0xe07, 0x10ac, 0xe07, 0x10fe, 0xe4d, 0x10fe, 0xe4d, 0x1155, 0xea0, 0x1155, +0xea0, 0x1159, 0xeaa, 0x1159, 0xeaa, 0x1133, 0xe94, 0x1133, 0xe94, 0x10a7, 0xe21, +0x10a7, 0xe21, 0x10a7, 0xe21, 0xfd4, 0xd72, 0xfd4, 0xd72, 0xf02, 0xccc, 0xf02, +0xccc, 0xdc0, 0xbbe, 0xdc0, 0xbbe, 0xcb5, 0xaf0, 0xcb5, 0xaf0, 0xb16, 0x992, +0xb16, 0x992, 0x9e8, 0x8ab, 0x9e8, 0x8ab, 0x9e8, 0x8ab, 0x91f, 0x82d, 0x91f, +0x82d, 0x7b2, 0x70b, 0x7b2, 0x70b, 0x63e, 0x5e4, 0x63e, 0x5e4, 0x4a8, 0x49a, +0x4a8, 0x49a, 0x312, 0x34d, 0x312, 0x34d, 0x312, 0x34d, 0x174, 0x1f5, 0x174, +0x1f5, 0xff9c, 0x5e, 0xff9c, 0x5e, 0xfdae, 0xfead, 0xfdae, 0xfead, 0xfbf4, 0xfd28, +0xfbf4, 0xfd28, 0xfaa8, 0xfc0d, 0xfaa8, 0xfc0d, 0xf933, 0xfac1, 0xf933, 0xfac1, 0xf933, +0xfac1, 0xf7c0, 0xf971, 0xf7c0, 0xf971, 0xf6d3, 0xf8a2, 0xf6d3, 0xf8a2, 0xf569, 0xf74f, +0xf569, 0xf74f, 0xf447, 0xf641, 0xf447, 0xf641, 0xf342, 0xf549, 0xf342, 0xf549, 0xf342, +0xf549, 0xf22b, 0xf43e, 0xf22b, 0xf43e, 0xf17f, 0xf39a, 0xf17f, 0xf39a, 0xf0cf, 0xf2f0, +0xf0cf, 0xf2f0, 0xf0a2, 0xf2c7, 0xf0a2, 0xf2c7, 0xf02d, 0xf256, 0xf02d, 0xf256, 0xf082, +0xf2ae, 0xf082, 0xf2ae, 0xf082, 0xf2ae, 0xf111, 0xf340, 0xf111, 0xf340, 0xf11c, 0xf34c, +0xf11c, 0xf34c, 0xf1cf, 0xf401, 0xf1cf, 0xf401, 0xf1e1, 0xf414, 0xf1e1, 0xf414, 0xf190, +0xf3c2, 0xf190, 0xf3c2, 0xf127, 0xf358, 0xf127, 0xf358, 0xf127, 0xf358, 0xf0b8, 0xf2e4, +0xf0b8, 0xf2e4, 0xf098, 0xf2bc, 0xf098, 0xf2bc, 0xf08d, 0xf2a5, 0xf08d, 0xf2a5, 0xf139, +0xf340, 0xf139, 0xf340, 0xf210, 0xf403, 0xf210, 0xf403, 0xf210, 0xf403, 0xf296, 0xf46d, +0xf296, 0xf46d, 0xf3aa, 0xf561, 0xf3aa, 0xf561, 0xf4b2, 0xf641, 0xf4b2, 0xf641, 0xf57b, +0xf6de, 0xf57b, 0xf6de, 0xf666, 0xf797, 0xf666, 0xf797, 0xf771, 0xf86a, 0xf771, 0xf86a, +0xf771, 0xf86a, 0xf947, 0xfa04, 0xf947, 0xfa04, 0xfb8b, 0xfc08, 0xfb8b, 0xfc08, 0xfe5e, +0xfe9a, 0xfe5e, 0xfe9a, 0x15b, 0x153, 0x15b, 0x153, 0x3ef, 0x3a4, 0x3ef, 0x3a4, +0x642, 0x5b7, 0x642, 0x5b7, 0x642, 0x5b7, 0x7cb, 0x703, 0x7cb, 0x703, 0x929, +0x828, 0x929, 0x828, 0xac8, 0x994, 0xac8, 0x994, 0xc3b, 0xadc, 0xc3b, 0xadc, +0xd12, 0xb90, 0xd12, 0xb90, 0xd12, 0xb90, 0xd41, 0xba4, 0xd41, 0xba4, 0xd68, +0xbbb, 0xd68, 0xbbb, 0xd6a, 0xbb7, 0xd6a, 0xbb7, 0xcf3, 0xb44, 0xcf3, 0xb44, +0xc6d, 0xacb, 0xc6d, 0xacb, 0xb63, 0x9d8, 0xb63, 0x9d8, 0xb63, 0x9d8, 0xa3a, +0x8cd, 0xa3a, 0x8cd, 0x970, 0x82a, 0x970, 0x82a, 0x8b0, 0x795, 0x8b0, 0x795, +0x879, 0x78f, 0x879, 0x78f, 0x83c, 0x786, 0x83c, 0x786, 0x835, 0x7b6, 0x835, +0x7b6, 0x835, 0x7b6, 0x7ab, 0x761, 0x7ab, 0x761, 0x69b, 0x686, 0x69b, 0x686, +0x6a1, 0x6bf, 0x6a1, 0x6bf, 0x6d5, 0x721, 0x6d5, 0x721, 0x6e9, 0x75f, 0x6e9, +0x75f, 0x6e9, 0x75f, 0x68d, 0x727, 0x68d, 0x727, 0x59b, 0x653, 0x59b, 0x653, +0x43e, 0x50d, 0x43e, 0x50d, 0x2ef, 0x3cf, 0x2ef, 0x3cf, 0x198, 0x282, 0x198, +0x282, 0x7f, 0x16d, 0x7f, 0x16d, 0x7f, 0x16d, 0x51, 0x13d, 0x51, 0x13d, +0xc, 0xf2, 0xc, 0xf2, 0x79, 0x155, 0x79, 0x155, 0x10f, 0x1dd, 0x10f, +0x1dd, 0x1cf, 0x28e, 0x1cf, 0x28e, 0x2cb, 0x37a, 0x2cb, 0x37a, 0x2cb, 0x37a, +0x2f4, 0x393, 0x2f4, 0x393, 0x290, 0x31f, 0x290, 0x31f, 0x1a1, 0x223, 0x1a1, +0x223, 0xa2, 0x119, 0xa2, 0x119, 0xff5e, 0xffce, 0xff5e, 0xffce, 0xff5e, 0xffce, +0xfe7d, 0xfee9, 0xfe7d, 0xfee9, 0xfdd1, 0xfe3d, 0xfdd1, 0xfe3d, 0xfddd, 0xfe4c, 0xfddd, +0xfe4c, 0xfe7f, 0xfef6, 0xfe7f, 0xfef6, 0xfe87, 0xff0a, 0xfe87, 0xff0a, 0xfe30, 0xfec2, +0xfe30, 0xfec2, 0xfe30, 0xfec2, 0xfd04, 0xfda8, 0xfd04, 0xfda8, 0xfbc9, 0xfc80, 0xfbc9, +0xfc80, 0xfa65, 0xfb33, 0xfa65, 0xfb33, 0xf997, 0xfa7c, 0xf997, 0xfa7c, 0xf9a9, 0xfaa5, +0xf9a9, 0xfaa5, 0xf9f4, 0xfb07, 0xf9f4, 0xfb07, 0xf9f4, 0xfb07, 0xfa44, 0xfb6d, 0xfa44, +0xfb6d, 0xfa26, 0xfb64, 0xfa26, 0xfb64, 0xf9e2, 0xfb32, 0xf9e2, 0xfb32, 0xf92c, 0xfa8d, +0xf92c, 0xfa8d, 0xf8d0, 0xfa40, 0xf8d0, 0xfa40, 0xf8d0, 0xfa40, 0xf884, 0xf9ff, 0xf884, +0xf9ff, 0xf800, 0xf983, 0xf800, 0xf983, 0xf780, 0xf908, 0xf780, 0xf908, 0xf700, 0xf88b, +0xf700, 0xf88b, 0xf699, 0xf823, 0xf699, 0xf823, 0xf5f2, 0xf779, 0xf5f2, 0xf779, 0xf5f2, +0xf779, 0xf56d, 0xf6ef, 0xf56d, 0xf6ef, 0xf47e, 0xf5f8, 0xf47e, 0xf5f8, 0xf364, 0xf4d4, +0xf364, 0xf4d4, 0xf2c2, 0xf426, 0xf2c2, 0xf426, 0xf24a, 0xf3a1, 0xf24a, 0xf3a1, 0xf255, +0xf39e, 0xf255, 0xf39e, 0xf255, 0xf39e, 0xf2ff, 0xf43a, 0xf2ff, 0xf43a, 0xf3b7, 0xf4e2, +0xf3b7, 0xf4e2, 0xf408, 0xf524, 0xf408, 0xf524, 0xf3b6, 0xf4c3, 0xf3b6, 0xf4c3, 0xf35b, +0xf45a, 0xf35b, 0xf45a, 0xf35b, 0xf45a, 0xf3ce, 0xf4c0, 0xf3ce, 0xf4c0, 0xf496, 0xf57c, +0xf496, 0xf57c, 0xf559, 0xf634, 0xf559, 0xf634, 0xf60b, 0xf6dd, 0xf60b, 0xf6dd, 0xf5f3, +0xf6bf, 0xf5f3, 0xf6bf, 0xf52e, 0xf5f7, 0xf52e, 0xf5f7, 0xf52e, 0xf5f7, 0xf440, 0xf508, +0xf440, 0xf508, 0xf355, 0xf420, 0xf355, 0xf420, 0xf315, 0xf3e7, 0xf315, 0xf3e7, 0xf335, +0xf412, 0xf335, 0xf412, 0xf363, 0xf44f, 0xf363, 0xf44f, 0xf361, 0xf460, 0xf361, 0xf460, +0xf361, 0xf460, 0xf343, 0xf459, 0xf343, 0xf459, 0xf357, 0xf48a, 0xf357, 0xf48a, 0xf311, +0xf463, 0xf311, 0xf463, 0xf24d, 0xf3c2, 0xf24d, 0xf3c2, 0xf16c, 0xf307, 0xf16c, 0xf307, +0xf16c, 0xf307, 0xf096, 0xf259, 0xf096, 0xf259, 0xef87, 0xf174, 0xef87, 0xf174, 0xef14, +0xf12c, 0xef14, 0xf12c, 0xee39, 0xf07b, 0xee39, 0xf07b, 0xec96, 0xef01, 0xec96, 0xef01, +0xeb39, 0xedca, 0xeb39, 0xedca, 0xeb39, 0xedca, 0xea50, 0xed04, 0xea50, 0xed04, 0xea88, +0xed5a, 0xea88, 0xed5a, 0xeb49, 0xee33, 0xeb49, 0xee33, 0xec99, 0xef93, 0xec99, 0xef93, +0xed87, 0xf08a, 0xed87, 0xf08a, 0xee65, 0xf168, 0xee65, 0xf168, 0xee65, 0xf168, 0xef7f, +0xf279, 0xef7f, 0xf279, 0xf067, 0xf34f, 0xf067, 0xf34f, 0xf25f, 0xf52c, 0xf25f, 0xf52c, +0xf45f, 0xf707, 0xf45f, 0xf707, 0xf680, 0xf8fb, 0xf680, 0xf8fb, 0xf680, 0xf8fb, 0xf8fb, +0xfb42, 0xf8fb, 0xfb42, 0xfb30, 0xfd3a, 0xfb30, 0xfd3a, 0xfd3f, 0xff08, 0xfd3f, 0xff08, +0xfe7e, 0x3, 0xfe7e, 0x3, 0xfeee, 0x2b, 0xfeee, 0x2b, 0xff50, 0x45, 0xff50, +0x45, 0xff50, 0x45, 0xff4d, 0xfffc, 0xff4d, 0xfffc, 0xff2b, 0xff95, 0xff2b, 0xff95, +0xfe5f, 0xfe8c, 0xfe5f, 0xfe8c, 0xfcea, 0xfcde, 0xfcea, 0xfcde, 0xfc6b, 0xfc2f, 0xfc6b, +0xfc2f, 0xfc6b, 0xfc2f, 0xfc2a, 0xfbc7, 0xfc2a, 0xfbc7, 0xfcdf, 0xfc5f, 0xfcdf, 0xfc5f, +0xfde5, 0xfd54, 0xfde5, 0xfd54, 0xfec4, 0xfe2c, 0xfec4, 0xfe2c, 0xff90, 0xfefc, 0xff90, +0xfefc, 0xff70, 0xfeec, 0xff70, 0xfeec, 0xff70, 0xfeec, 0xfea7, 0xfe3d, 0xfea7, 0xfe3d, +0xfd7e, 0xfd37, 0xfd7e, 0xfd37, 0xfd44, 0xfd28, 0xfd44, 0xfd28, 0xfc27, 0xfc3c, 0xfc27, +0xfc3c, 0xfb71, 0xfbbb, 0xfb71, 0xfbbb, 0xfaee, 0xfb6f, 0xfaee, 0xfb6f, 0xfaee, 0xfb6f, +0xf96d, 0xfa27, 0xf96d, 0xfa27, 0xf96b, 0xfa5d, 0xf96b, 0xfa5d, 0xf95f, 0xfa85, 0xf95f, +0xfa85, 0xf8a1, 0xf9f6, 0xf8a1, 0xf9f6, 0xf6c0, 0xf83d, 0xf6c0, 0xf83d, 0xf6c0, 0xf83d, +0xf640, 0xf7dd, 0xf640, 0xf7dd, 0xf66b, 0xf81e, 0xf66b, 0xf81e, 0xf534, 0xf6f3, 0xf534, +0xf6f3, 0xf570, 0xf731, 0xf570, 0xf731, 0xf5ed, 0xf7a4, 0xf5ed, 0xf7a4, 0xf685, 0xf827, +0xf685, 0xf827, 0xf685, 0xf827, 0xf684, 0xf807, 0xf684, 0xf807, 0xf639, 0xf793, 0xf639, +0xf793, 0xf753, 0xf87b, 0xf753, 0xf87b, 0xf7fd, 0xf8ec, 0xf7fd, 0xf8ec, 0xf886, 0xf934, +0xf886, 0xf934, 0xf986, 0xf9ef, 0xf986, 0xf9ef, 0xf986, 0xf9ef, 0xfa63, 0xfa84, 0xfa63, +0xfa84, 0xfbb4, 0xfb8b, 0xfbb4, 0xfb8b, 0xfc6e, 0xfbfb, 0xfc6e, 0xfbfb, 0xfdb9, 0xfcfb, +0xfdb9, 0xfcfb, 0x24, 0xff1f, 0x24, 0xff1f, 0x24, 0xff1f, 0x12a, 0xffe1, 0x12a, +0xffe1, 0x1d8, 0x4f, 0x1d8, 0x4f, 0x1b7, 0xfff3, 0x1b7, 0xfff3, 0x2f3, 0xf8, +0x2f3, 0xf8, 0x48a, 0x25e, 0x48a, 0x25e, 0x477, 0x21e, 0x477, 0x21e, 0x477, +0x21e, 0x537, 0x2b7, 0x537, 0x2b7, 0x48c, 0x1e9, 0x48c, 0x1e9, 0x585, 0x2c4, +0x585, 0x2c4, 0x7cd, 0x4f0, 0x7cd, 0x4f0, 0x9bc, 0x6c6, 0x9bc, 0x6c6, 0xb55, +0x849, 0xb55, 0x849, 0xb55, 0x849, 0xbb1, 0x88e, 0xbb1, 0x88e, 0xd72, 0xa3b, +0xd72, 0xa3b, 0xd5e, 0xa12, 0xd5e, 0xa12, 0xd54, 0x9f3, 0xd54, 0x9f3, 0xe97, +0xb20, 0xe97, 0xb20, 0xe97, 0xb20, 0xf0b, 0xb7e, 0xf0b, 0xb7e, 0x1025, 0xc82, +0x1025, 0xc82, 0x105e, 0xca3, 0x105e, 0xca3, 0x1028, 0xc57, 0x1028, 0xc57, 0x1016, +0xc2e, 0x1016, 0xc2e, 0x1185, 0xd87, 0x1185, 0xd87, 0x1185, 0xd87, 0x1410, 0xfff, +0x1410, 0xfff, 0x14a2, 0x1080, 0x14a2, 0x1080, 0x150f, 0x10e0, 0x150f, 0x10e0, 0x14a5, +0x106c, 0x14a5, 0x106c, 0x12f2, 0xeb4, 0x12f2, 0xeb4, 0x13eb, 0xfae, 0x13eb, 0xfae, +0x13eb, 0xfae, 0x1684, 0x124d, 0x1684, 0x124d, 0x181f, 0x13f4, 0x181f, 0x13f4, 0x17ea, +0x13d1, 0x17ea, 0x13d1, 0x1758, 0x1357, 0x1758, 0x1357, 0x1758, 0x1376, 0x1758, 0x1376, +0x1758, 0x1376, 0x171d, 0x135e, 0x171d, 0x135e, 0x176e, 0x13d8, 0x176e, 0x13d8, 0x16bb, +0x1352, 0x16bb, 0x1352, 0x14c2, 0x1189, 0x14c2, 0x1189, 0x12ed, 0xfe7, 0x12ed, 0xfe7, +0x10ab, 0xdda, 0x10ab, 0xdda, 0x10ab, 0xdda, 0xdaf, 0xb14, 0xdaf, 0xb14, 0xbab, +0x945, 0xbab, 0x945, 0xb51, 0x920, 0xb51, 0x920, 0xb30, 0x932, 0xb30, 0x932, +0xb19, 0x94b, 0xb19, 0x94b, 0xad8, 0x937, 0xad8, 0x937, 0xad8, 0x937, 0x9a2, +0x82a, 0x9a2, 0x82a, 0x8b4, 0x761, 0x8b4, 0x761, 0x9a1, 0x86f, 0x9a1, 0x86f, +0x9fa, 0x8e6, 0x9fa, 0x8e6, 0x913, 0x818, 0x913, 0x818, 0x913, 0x818, 0x91d, +0x838, 0x91d, 0x838, 0x9ba, 0x8e7, 0x9ba, 0x8e7, 0xa29, 0x966, 0xa29, 0x966, +0xb59, 0xaa5, 0xb59, 0xaa5, 0xc2c, 0xb84, 0xc2c, 0xb84, 0xc1c, 0xb7f, 0xc1c, +0xb7f, 0xc1c, 0xb7f, 0xd8a, 0xcf9, 0xd8a, 0xcf9, 0xfc4, 0xf3f, 0xfc4, 0xf3f, +0x1112, 0x1099, 0x1112, 0x1099, 0x108c, 0x1021, 0x108c, 0x1021, 0xff4, 0xf98, 0xff4, +0xf98, 0xf5c, 0xf11, 0xf5c, 0xf11, 0xf5c, 0xf11, 0xf46, 0xf0c, 0xf46, 0xf0c, +0x1149, 0x1123, 0x1149, 0x1123, 0x1271, 0x1260, 0x1271, 0x1260, 0x12b2, 0x12b7, 0x12b2, +0x12b7, 0x12d3, 0x12ed, 0x12d3, 0x12ed, 0x12d3, 0x12ed, 0x1285, 0x12b6, 0x1285, 0x12b6, +0x1076, 0x10be, 0x1076, 0x10be, 0xed5, 0xf31, 0xed5, 0xf31, 0xe95, 0xf06, 0xe95, +0xf06, 0xdbc, 0xe40, 0xdbc, 0xe40, 0xd10, 0xda5, 0xd10, 0xda5, 0xd10, 0xda5, +0xb01, 0xba4, 0xb01, 0xba4, 0x7f7, 0x8a6, 0x7f7, 0x8a6, 0x500, 0x5b9, 0x500, +0x5b9, 0x3e1, 0x4a2, 0x3e1, 0x4a2, 0x303, 0x3c9, 0x303, 0x3c9, 0x83, 0x14e, +0x83, 0x14e, 0x83, 0x14e, 0xfede, 0xffac, 0xfede, 0xffac, 0xfe35, 0xff06, 0xfe35, +0xff06, 0xfe3c, 0xff0f, 0xfe3c, 0xff0f, 0xfda4, 0xfe7b, 0xfda4, 0xfe7b, 0xfca3, 0xfd7f, +0xfca3, 0xfd7f, 0xfca3, 0xfd7f, 0xfb19, 0xfbfb, 0xfb19, 0xfbfb, 0xf8df, 0xf9ca, 0xf8df, +0xf9ca, 0xf7a9, 0xf8a0, 0xf7a9, 0xf8a0, 0xf618, 0xf71f, 0xf618, 0xf71f, 0xf3e7, 0xf501, +0xf3e7, 0xf501, 0xf3ae, 0xf4df, 0xf3ae, 0xf4df, 0xf3ae, 0xf4df, 0xf33f, 0xf48b, 0xf33f, +0xf48b, 0xf18a, 0xf2f3, 0xf18a, 0xf2f3, 0xf056, 0xf1e1, 0xf056, 0xf1e1, 0xef70, 0xf11d, +0xef70, 0xf11d, 0xeeb8, 0xf089, 0xeeb8, 0xf089, 0xedf3, 0xefea, 0xedf3, 0xefea, 0xedf3, +0xefea, 0xee77, 0xf093, 0xee77, 0xf093, 0xeccc, 0xef0b, 0xeccc, 0xef0b, 0xeac0, 0xed21, +0xeac0, 0xed21, 0xeade, 0xed5d, 0xeade, 0xed5d, 0xea49, 0xece3, 0xea49, 0xece3, 0xea49, +0xece3, 0xec09, 0xeeb7, 0xec09, 0xeeb7, 0xec21, 0xeedd, 0xec21, 0xeedd, 0xe9ff, 0xecc3, +0xe9ff, 0xecc3, 0xe916, 0xebd9, 0xe916, 0xebd9, 0xe895, 0xeb52, 0xe895, 0xeb52, 0xea1d, +0xecca, 0xea1d, 0xecca, 0xea1d, 0xecca, 0xeb4e, 0xede4, 0xeb4e, 0xede4, 0xec53, 0xeeca, +0xec53, 0xeeca, 0xecf5, 0xef46, 0xecf5, 0xef46, 0xebba, 0xedde, 0xebba, 0xedde, 0xec69, +0xee5d, 0xec69, 0xee5d, 0xec69, 0xee5d, 0xec88, 0xee45, 0xec88, 0xee45, 0xed6d, 0xeef0, +0xed6d, 0xeef0, 0xf11d, 0xf265, 0xf11d, 0xf265, 0xf340, 0xf44a, 0xf340, 0xf44a, 0xf64f, +0xf71d, 0xf64f, 0xf71d, 0xf84e, 0xf8e0, 0xf84e, 0xf8e0, 0xf84e, 0xf8e0, 0xf999, 0xf9f3, +0xf999, 0xf9f3, 0xfccb, 0xfcf0, 0xfccb, 0xfcf0, 0x43, 0x37, 0x43, 0x37, 0x399, +0x362, 0x399, 0x362, 0x54a, 0x4ed, 0x54a, 0x4ed, 0x84b, 0x7d0, 0x84b, 0x7d0, +0x84b, 0x7d0, 0xb15, 0xa81, 0xb15, 0xa81, 0xcc5, 0xc20, 0xcc5, 0xc20, 0xe9e, +0xdef, 0xe9e, 0xdef, 0xdfe, 0xd4b, 0xdfe, 0xd4b, 0xcd2, 0xc22, 0xcd2, 0xc22, +0xcd2, 0xc22, 0xcce, 0xc25, 0xcce, 0xc25, 0xc20, 0xb84, 0xc20, 0xb84, 0xb01, +0xa77, 0xb01, 0xa77, 0xb16, 0xaa0, 0xb16, 0xaa0, 0xba0, 0xb42, 0xba0, 0xb42, +0xc63, 0xc1e, 0xc63, 0xc1e, 0xc63, 0xc1e, 0xd44, 0xd1a, 0xd44, 0xd1a, 0xdd8, +0xdca, 0xdd8, 0xdca, 0xda6, 0xdb3, 0xda6, 0xdb3, 0xda0, 0xdc8, 0xda0, 0xdc8, +0xe18, 0xe5a, 0xe18, 0xe5a, 0xde3, 0xe3d, 0xde3, 0xe3d, 0xde3, 0xe3d, 0xcaf, +0xd1f, 0xcaf, 0xd1f, 0xab2, 0xb36, 0xab2, 0xb36, 0x92f, 0x9c4, 0x92f, 0x9c4, +0x7b8, 0x85d, 0x7b8, 0x85d, 0x871, 0x922, 0x871, 0x922, 0x871, 0x922, 0xab5, +0xb70, 0xab5, 0xb70, 0xb04, 0xbc8, 0xb04, 0xbc8, 0xa4f, 0xb1a, 0xa4f, 0xb1a, +0xa0a, 0xad8, 0xa0a, 0xad8, 0x9ef, 0xac0, 0x9ef, 0xac0, 0x81e, 0x8ef, 0x81e, +0x8ef, 0x81e, 0x8ef, 0x621, 0x6f1, 0x621, 0x6f1, 0x54e, 0x61c, 0x54e, 0x61c, +0x460, 0x52a, 0x460, 0x52a, 0x445, 0x50a, 0x445, 0x50a, 0x479, 0x538, 0x479, +0x538, 0x35a, 0x411, 0x35a, 0x411, 0x35a, 0x411, 0x154, 0x202, 0x154, 0x202, +0xffb5, 0x59, 0xffb5, 0x59, 0xff5e, 0xfff6, 0xff5e, 0xfff6, 0xff6a, 0xfff5, 0xff6a, +0xfff5, 0x39, 0xb5, 0x39, 0xb5, 0x39, 0xb5, 0x1f, 0x8b, 0x1f, 0x8b, +0xff95, 0xffef, 0xff95, 0xffef, 0xda, 0x120, 0xda, 0x120, 0x14f, 0x17f, 0x14f, +0x17f, 0x204, 0x21d, 0x204, 0x21d, 0x29d, 0x29d, 0x29d, 0x29d, 0x29d, 0x29d, +0x358, 0x33d, 0x358, 0x33d, 0x3aa, 0x373, 0x3aa, 0x373, 0x241, 0x1ec, 0x241, +0x1ec, 0x167, 0xf2, 0x167, 0xf2, 0x1a6, 0x110, 0x1a6, 0x110, 0x39b, 0x2e2, +0x39b, 0x2e2, 0x39b, 0x2e2, 0x3ce, 0x2f1, 0x3ce, 0x2f1, 0x34f, 0x24e, 0x34f, +0x24e, 0x44f, 0x328, 0x44f, 0x328, 0x49c, 0x34f, 0x49c, 0x34f, 0x54b, 0x3d7, +0x54b, 0x3d7, 0x54b, 0x3d7, 0x5f0, 0x454, 0x5f0, 0x454, 0x4ea, 0x327, 0x4ea, +0x327, 0x3af, 0x1c5, 0x3af, 0x1c5, 0x37e, 0x16e, 0x37e, 0x16e, 0x3a8, 0x172, +0x3a8, 0x172, 0x425, 0x1cb, 0x425, 0x1cb, 0x425, 0x1cb, 0x3cd, 0x150, 0x3cd, +0x150, 0x3d7, 0x138, 0x3d7, 0x138, 0x46e, 0x1b0, 0x46e, 0x1b0, 0x4bc, 0x1e2, +0x4bc, 0x1e2, 0x57e, 0x28a, 0x57e, 0x28a, 0x5cf, 0x2c5, 0x5cf, 0x2c5, 0x5cf, +0x2c5, 0x683, 0x367, 0x683, 0x367, 0x667, 0x33e, 0x667, 0x33e, 0x4f0, 0x1bd, +0x4f0, 0x1bd, 0x40c, 0xd6, 0x40c, 0xd6, 0x3e2, 0xad, 0x3e2, 0xad, 0x3e2, +0xad, 0x4ab, 0x17d, 0x4ab, 0x17d, 0x4d7, 0x1b7, 0x4d7, 0x1b7, 0x4c8, 0x1ba, +0x4c8, 0x1ba, 0x426, 0x131, 0x426, 0x131, 0xc2, 0xfdeb, 0xc2, 0xfdeb, 0x85, +0xfdd2, 0x85, 0xfdd2, 0x85, 0xfdd2, 0x15f, 0xfed4, 0x15f, 0xfed4, 0xff0a, 0xfcac, +0xff0a, 0xfcac, 0xfe22, 0xfbf4, 0xfe22, 0xfbf4, 0xff10, 0xfd17, 0xff10, 0xfd17, 0xfef2, +0xfd2f, 0xfef2, 0xfd2f, 0xfc8e, 0xfb02, 0xfc8e, 0xfb02, 0xfc8e, 0xfb02, 0xfcf7, 0xfba3, +0xfcf7, 0xfba3, 0xfcab, 0xfb8f, 0xfcab, 0xfb8f, 0xfa5c, 0xf976, 0xfa5c, 0xf976, 0xfad4, +0xfa22, 0xfad4, 0xfa22, 0xfad4, 0xfa54, 0xfad4, 0xfa54, 0xfad4, 0xfa54, 0xfbb6, 0xfb63, +0xfbb6, 0xfb63, 0xfdfe, 0xfdd5, 0xfdfe, 0xfdd5, 0x8e, 0x88, 0x8e, 0x88, 0x8c, +0xa6, 0x8c, 0xa6, 0xff38, 0xff6c, 0xff38, 0xff6c, 0xac, 0xf5, 0xac, 0xf5, +0xac, 0xf5, 0x13c, 0x194, 0x13c, 0x194, 0x26f, 0x2d2, 0x26f, 0x2d2, 0x4c1, +0x52b, 0x4c1, 0x52b, 0x4a1, 0x50e, 0x4a1, 0x50e, 0x620, 0x68d, 0x620, 0x68d, +0x7f7, 0x861, 0x7f7, 0x861, 0x7f7, 0x861, 0x6ea, 0x750, 0x6ea, 0x750, 0x73d, +0x7a0, 0x73d, 0x7a0, 0x8d1, 0x930, 0x8d1, 0x930, 0xa7e, 0xadc, 0xa7e, 0xadc, +0xa40, 0xa9d, 0xa40, 0xa9d, 0xa40, 0xa9d, 0x9d4, 0xa35, 0x9d4, 0xa35, 0xc55, +0xcbc, 0xc55, 0xcbc, 0xdb8, 0xe28, 0xdb8, 0xe28, 0xeb6, 0xf34, 0xeb6, 0xf34, +0xf5b, 0xfe9, 0xf5b, 0xfe9, 0xe11, 0xeb5, 0xe11, 0xeb5, 0xe11, 0xeb5, 0xd48, +0xe03, 0xd48, 0xe03, 0xe20, 0xef6, 0xe20, 0xef6, 0xf1f, 0x1011, 0xf1f, 0x1011, +0xcb8, 0xdc8, 0xcb8, 0xdc8, 0xa23, 0xb51, 0xa23, 0xb51, 0x93a, 0xa85, 0x93a, +0xa85, 0x93a, 0xa85, 0x663, 0x7ca, 0x663, 0x7ca, 0x643, 0x7c4, 0x643, 0x7c4, +0x61d, 0x7b4, 0x61d, 0x7b4, 0x359, 0x503, 0x359, 0x503, 0x191, 0x348, 0x191, +0x348, 0x191, 0x348, 0xff8b, 0x14b, 0xff8b, 0x14b, 0xfd62, 0xff25, 0xfd62, 0xff25, +0xf9f1, 0xfbb2, 0xf9f1, 0xfbb2, 0xf8f0, 0xfaa9, 0xf8f0, 0xfaa9, 0xf897, 0xfa44, 0xf897, +0xfa44, 0xf826, 0xf9c3, 0xf826, 0xf9c3, 0xf826, 0xf9c3, 0xf89a, 0xfa24, 0xf89a, 0xfa24, +0xf629, 0xf79c, 0xf629, 0xf79c, 0xf4e6, 0xf641, 0xf4e6, 0xf641, 0xf4e7, 0xf62a, 0xf4e7, +0xf62a, 0xf549, 0xf674, 0xf549, 0xf674, 0xf549, 0xf674, 0xf4e8, 0xf5fe, 0xf4e8, 0xf5fe, +0xf490, 0xf592, 0xf490, 0xf592, 0xf3d5, 0xf4c8, 0xf3d5, 0xf4c8, 0xf10b, 0xf1f3, 0xf10b, +0xf1f3, 0xf08f, 0xf173, 0xf08f, 0xf173, 0xf009, 0xf0ee, 0xf009, 0xf0ee, 0xf009, 0xf0ee, +0xeec4, 0xefaf, 0xeec4, 0xefaf, 0xef37, 0xf030, 0xef37, 0xf030, 0xef4c, 0xf058, 0xef4c, +0xf058, 0xee2a, 0xef4e, 0xee2a, 0xef4e, 0xec18, 0xed5a, 0xec18, 0xed5a, 0xea11, 0xeb73, +0xea11, 0xeb73, 0xea11, 0xeb73, 0xe8d8, 0xea5d, 0xe8d8, 0xea5d, 0xe70f, 0xe8ba, 0xe70f, +0xe8ba, 0xe67d, 0xe84c, 0xe67d, 0xe84c, 0xe5f7, 0xe7e9, 0xe5f7, 0xe7e9, 0xe49f, 0xe6b0, +0xe49f, 0xe6b0, 0xe49f, 0xe6b0, 0xe4ce, 0xe6fb, 0xe4ce, 0xe6fb, 0xe3d1, 0xe613, 0xe3d1, +0xe613, 0xe3a1, 0xe5f2, 0xe3a1, 0xe5f2, 0xe490, 0xe6e7, 0xe490, 0xe6e7, 0xe441, 0xe697, +0xe441, 0xe697, 0xe54e, 0xe799, 0xe54e, 0xe799, 0xe54e, 0xe799, 0xe7a7, 0xe9dd, 0xe7a7, +0xe9dd, 0xea0a, 0xec23, 0xea0a, 0xec23, 0xeb91, 0xed83, 0xeb91, 0xed83, 0xecf8, 0xeebc, +0xecf8, 0xeebc, 0xf047, 0xf1d5, 0xf047, 0xf1d5, 0xf2ec, 0xf43e, 0xf2ec, 0xf43e, 0xf2ec, +0xf43e, 0xf5aa, 0xf6bc, 0xf5aa, 0xf6bc, 0xf849, 0xf917, 0xf849, 0xf917, 0xf98e, 0xfa17, +0xf98e, 0xfa17, 0xfc47, 0xfc8b, 0xfc47, 0xfc8b, 0xfd76, 0xfd79, 0xfd76, 0xfd79, 0xfd76, +0xfd79, 0xfe25, 0xfde8, 0xfe25, 0xfde8, 0xfe1b, 0xfda5, 0xfe1b, 0xfda5, 0xff18, 0xfe6f, +0xff18, 0xfe6f, 0x109, 0x36, 0x109, 0x36, 0xff6f, 0xfe7b, 0xff6f, 0xfe7b, 0xff49, +0xfe3f, 0xff49, 0xfe3f, 0xff49, 0xfe3f, 0xfe8d, 0xfd75, 0xfe8d, 0xfd75, 0xfe98, 0xfd7e, +0xfe98, 0xfd7e, 0xffce, 0xfebd, 0xffce, 0xfebd, 0xfff6, 0xfef6, 0xfff6, 0xfef6, 0x24a, +0x167, 0x24a, 0x167, 0x34d, 0x28d, 0x34d, 0x28d, 0x34d, 0x28d, 0x44d, 0x3b9, +0x44d, 0x3b9, 0x59b, 0x539, 0x59b, 0x539, 0x63b, 0x611, 0x63b, 0x611, 0x73b, +0x74a, 0x73b, 0x74a, 0x51e, 0x56a, 0x51e, 0x56a, 0x51e, 0x56a, 0x22d, 0x2b6, +0x22d, 0x2b6, 0x12f, 0x1f3, 0x12f, 0x1f3, 0x137, 0x234, 0x137, 0x234, 0x186, +0x2b8, 0x186, 0x2b8, 0x187, 0x2ea, 0x187, 0x2ea, 0x32c, 0x4ba, 0x32c, 0x4ba, +0x32c, 0x4ba, 0x234, 0x3e6, 0x234, 0x3e6, 0xff55, 0x126, 0xff55, 0x126, 0xff93, +0x17b, 0xff93, 0x17b, 0xff4c, 0x143, 0xff4c, 0x143, 0xfefe, 0xfe, 0xfefe, 0xfe, +0xff8a, 0x18d, 0xff8a, 0x18d, 0xff8a, 0x18d, 0xffe1, 0x1e0, 0xffe1, 0x1e0, 0xff24, +0x119, 0xff24, 0x119, 0xfe4d, 0x34, 0xfe4d, 0x34, 0xfec7, 0x9a, 0xfec7, 0x9a, +0xff1a, 0xd7, 0xff1a, 0xd7, 0xff1a, 0xd7, 0xffb5, 0x158, 0xffb5, 0x158, 0x6a, +0x1f1, 0x6a, 0x1f1, 0x77, 0x1e1, 0x77, 0x1e1, 0xf7, 0x242, 0xf7, 0x242, +0x270, 0x39c, 0x270, 0x39c, 0x427, 0x533, 0x427, 0x533, 0x427, 0x533, 0x602, +0x6ef, 0x602, 0x6ef, 0x67b, 0x749, 0x67b, 0x749, 0x608, 0x6b6, 0x608, 0x6b6, +0x5ea, 0x679, 0x5ea, 0x679, 0x7f2, 0x862, 0x7f2, 0x862, 0x9bb, 0xa0b, 0x9bb, +0xa0b, 0x9bb, 0xa0b, 0x8bd, 0x8ed, 0x8bd, 0x8ed, 0x8ea, 0x8f9, 0x8ea, 0x8f9, +0x970, 0x95e, 0x970, 0x95e, 0xa50, 0xa1b, 0xa50, 0xa1b, 0xaac, 0xa52, 0xaac, +0xa52, 0xaac, 0xa52, 0xba6, 0xb27, 0xba6, 0xb27, 0xd12, 0xc6c, 0xd12, 0xc6c, +0xd64, 0xc96, 0xd64, 0xc96, 0xf99, 0xea1, 0xf99, 0xea1, 0x1136, 0x1013, 0x1136, +0x1013, 0x1261, 0x1112, 0x1261, 0x1112, 0x1261, 0x1112, 0x12f8, 0x117d, 0x12f8, 0x117d, +0x129f, 0x10f8, 0x129f, 0x10f8, 0x118b, 0xfb8, 0x118b, 0xfb8, 0x109c, 0xe9e, 0x109c, +0xe9e, 0x123d, 0x1015, 0x123d, 0x1015, 0x127c, 0x102d, 0x127c, 0x102d, 0x127c, 0x102d, +0x11df, 0xf6b, 0x11df, 0xf6b, 0x1214, 0xf7e, 0x1214, 0xf7e, 0x10ba, 0xe06, 0x10ba, +0xe06, 0xfba, 0xcec, 0xfba, 0xcec, 0xeb2, 0xbce, 0xeb2, 0xbce, 0xeb2, 0xbce, +0xd7e, 0xa89, 0xd7e, 0xa89, 0xd7e, 0xa7e, 0xd7e, 0xa7e, 0xc97, 0x98f, 0xc97, +0x98f, 0xc8d, 0x984, 0xc8d, 0x984, 0xd0a, 0xa03, 0xd0a, 0xa03, 0xc88, 0x98a, +0xc88, 0x98a, 0xc88, 0x98a, 0xba9, 0x8b8, 0xba9, 0x8b8, 0xaa3, 0x7c2, 0xaa3, +0x7c2, 0xa21, 0x754, 0xa21, 0x754, 0x997, 0x6e3, 0x997, 0x6e3, 0x974, 0x6db, +0x974, 0x6db, 0x9a1, 0x726, 0x9a1, 0x726, 0x9a1, 0x726, 0xa95, 0x839, 0xa95, +0x839, 0xaa6, 0x86d, 0xaa6, 0x86d, 0x8a5, 0x68e, 0x8a5, 0x68e, 0x610, 0x41c, +0x610, 0x41c, 0x45d, 0x28c, 0x45d, 0x28c, 0x45d, 0x28c, 0x316, 0x168, 0x316, +0x168, 0x242, 0xb7, 0x242, 0xb7, 0x20a, 0xa1, 0x20a, 0xa1, 0xf, 0xfec7, +0xf, 0xfec7, 0xff2c, 0xfe04, 0xff2c, 0xfe04, 0x8, 0xfefe, 0x8, 0xfefe, 0x8, +0xfefe, 0x1bb, 0xcd, 0x1bb, 0xcd, 0x355, 0x281, 0x355, 0x281, 0x381, 0x2c6, +0x381, 0x2c6, 0x3cc, 0x328, 0x3cc, 0x328, 0x32e, 0x29f, 0x32e, 0x29f, 0x2fb, +0x280, 0x2fb, 0x280, 0x2fb, 0x280, 0x4ae, 0x445, 0x4ae, 0x445, 0x678, 0x61f, +0x678, 0x61f, 0x6cd, 0x684, 0x6cd, 0x684, 0x656, 0x61b, 0x656, 0x61b, 0x68d, +0x65f, 0x68d, 0x65f, 0x68d, 0x65f, 0x6f7, 0x6d4, 0x6f7, 0x6d4, 0x6ed, 0x6d7, +0x6ed, 0x6d7, 0x874, 0x869, 0x874, 0x869, 0xa96, 0xa97, 0xa96, 0xa97, 0xb24, +0xb30, 0xb24, 0xb30, 0xad6, 0xaee, 0xad6, 0xaee, 0xad6, 0xaee, 0x985, 0x9aa, +0x985, 0x9aa, 0x886, 0x8b8, 0x886, 0x8b8, 0x855, 0x896, 0x855, 0x896, 0x775, +0x7c5, 0x775, 0x7c5, 0x5dc, 0x63d, 0x5dc, 0x63d, 0x5dc, 0x63d, 0x4ba, 0x52e, +0x4ba, 0x52e, 0x2b7, 0x33f, 0x2b7, 0x33f, 0xd0, 0x16d, 0xd0, 0x16d, 0x4f, +0x102, 0x4f, 0x102, 0xff70, 0x3c, 0xff70, 0x3c, 0xfdc8, 0xfeae, 0xfdc8, 0xfeae, +0xfdc8, 0xfeae, 0xfbd2, 0xfcd4, 0xfbd2, 0xfcd4, 0xfc12, 0xfd30, 0xfc12, 0xfd30, 0xfbcc, +0xfd07, 0xfbcc, 0xfd07, 0xf937, 0xfa8f, 0xf937, 0xfa8f, 0xf75f, 0xf8d6, 0xf75f, 0xf8d6, +0xf5e1, 0xf776, 0xf5e1, 0xf776, 0xf5e1, 0xf776, 0xf383, 0xf536, 0xf383, 0xf536, 0xf258, +0xf429, 0xf258, 0xf429, 0xf28b, 0xf478, 0xf28b, 0xf478, 0xf155, 0xf35e, 0xf155, 0xf35e, +0xef72, 0xf194, 0xef72, 0xf194, 0xef72, 0xf194, 0xedfd, 0xf037, 0xedfd, 0xf037, 0xeccc, +0xef1a, 0xeccc, 0xef1a, 0xea83, 0xece5, 0xea83, 0xece5, 0xe9c8, 0xec3a, 0xe9c8, 0xec3a, +0xeb29, 0xeda9, 0xeb29, 0xeda9, 0xeb9c, 0xee26, 0xeb9c, 0xee26, 0xeb9c, 0xee26, 0xebff, +0xee91, 0xebff, 0xee91, 0xec3e, 0xeed5, 0xec3e, 0xeed5, 0xeb7c, 0xee16, 0xeb7c, 0xee16, +0xea38, 0xecd2, 0xea38, 0xecd2, 0xea6a, 0xed02, 0xea6a, 0xed02, 0xeacc, 0xed5f, 0xeacc, +0xed5f, 0xeacc, 0xed5f, 0xeb49, 0xedd5, 0xeb49, 0xedd5, 0xeb5a, 0xedde, 0xeb5a, 0xedde, +0xe9ba, 0xec34, 0xe9ba, 0xec34, 0xe9fb, 0xec6b, 0xe9fb, 0xec6b, 0xeb13, 0xed77, 0xeb13, +0xed77, 0xeb13, 0xed77, 0xec3c, 0xee94, 0xec3c, 0xee94, 0xed8b, 0xefd5, 0xed8b, 0xefd5, +0xeca9, 0xeee6, 0xeca9, 0xeee6, 0xec4a, 0xee79, 0xec4a, 0xee79, 0xec5b, 0xee7b, 0xec5b, +0xee7b, 0xecd9, 0xeeea, 0xecd9, 0xeeea, 0xecd9, 0xeeea, 0xeec8, 0xf0cb, 0xeec8, 0xf0cb, +0xeed5, 0xf0c9, 0xeed5, 0xf0c9, 0xef79, 0xf15c, 0xef79, 0xf15c, 0xf0e1, 0xf2b4, 0xf0e1, +0xf2b4, 0xf2d3, 0xf495, 0xf2d3, 0xf495, 0xf5e5, 0xf795, 0xf5e5, 0xf795, 0xf5e5, 0xf795, +0xf884, 0xfa21, 0xf884, 0xfa21, 0xfb76, 0xfd00, 0xfb76, 0xfd00, 0xfd1d, 0xfe92, 0xfd1d, +0xfe92, 0xff58, 0xb7, 0xff58, 0xb7, 0x107, 0x24f, 0x107, 0x24f, 0x107, 0x24f, +0x258, 0x388, 0x258, 0x388, 0x587, 0x69e, 0x587, 0x69e, 0x7fb, 0x8f7, 0x7fb, +0x8f7, 0x90c, 0x9ee, 0x90c, 0x9ee, 0x902, 0x9c9, 0x902, 0x9c9, 0x94f, 0x9fc, +0x94f, 0x9fc, 0x94f, 0x9fc, 0x9ee, 0xa80, 0x9ee, 0xa80, 0xb78, 0xbef, 0xb78, +0xbef, 0xc86, 0xce4, 0xc86, 0xce4, 0xb43, 0xb88, 0xb43, 0xb88, 0x9c8, 0x9f6, +0x9c8, 0x9f6, 0x8d4, 0x8ed, 0x8d4, 0x8ed, 0x8d4, 0x8ed, 0x8c7, 0x8cd, 0x8c7, +0x8cd, 0x93e, 0x933, 0x93e, 0x933, 0x8df, 0x8c6, 0x8df, 0x8c6, 0x85b, 0x836, +0x85b, 0x836, 0x914, 0x8e5, 0x914, 0x8e5, 0x914, 0x8e5, 0xa9c, 0xa66, 0xa9c, +0xa66, 0xa4d, 0xa12, 0xa4d, 0xa12, 0x7e6, 0x7a9, 0x7e6, 0x7a9, 0x6fd, 0x6bf, +0x6fd, 0x6bf, 0x72d, 0x6ef, 0x72d, 0x6ef, 0x752, 0x717, 0x752, 0x717, 0x752, +0x717, 0x791, 0x758, 0x791, 0x758, 0x782, 0x74c, 0x782, 0x74c, 0x756, 0x722, +0x756, 0x722, 0x704, 0x6d1, 0x704, 0x6d1, 0x625, 0x5f3, 0x625, 0x5f3, 0x41d, +0x3ea, 0x41d, 0x3ea, 0x41d, 0x3ea, 0x2bf, 0x289, 0x2bf, 0x289, 0x2f9, 0x2bc, +0x2f9, 0x2bc, 0x38a, 0x346, 0x38a, 0x346, 0x399, 0x349, 0x399, 0x349, 0x290, +0x231, 0x290, 0x231, 0x290, 0x231, 0xff75, 0xff04, 0xff75, 0xff04, 0xfd05, 0xfc80, +0xfd05, 0xfc80, 0xfbf5, 0xfb57, 0xfbf5, 0xfb57, 0xfada, 0xfa21, 0xfada, 0xfa21, 0xfb17, +0xfa40, 0xfb17, 0xfa40, 0xfb69, 0xfa71, 0xfb69, 0xfa71, 0xfb69, 0xfa71, 0xfb8d, 0xfa72, +0xfb8d, 0xfa72, 0xfaf6, 0xf9b5, 0xfaf6, 0xf9b5, 0xfc00, 0xfa99, 0xfc00, 0xfa99, 0xfdb1, +0xfc22, 0xfdb1, 0xfc22, 0xfd8a, 0xfbd1, 0xfd8a, 0xfbd1, 0xfeda, 0xfcf9, 0xfeda, 0xfcf9, +0xfeda, 0xfcf9, 0xffed, 0xfde3, 0xffed, 0xfde3, 0x3f, 0xfe0b, 0x3f, 0xfe0b, 0x104, +0xfea8, 0x104, 0xfea8, 0x23d, 0xffba, 0x23d, 0xffba, 0x39b, 0xf3, 0x39b, 0xf3, +0x39b, 0xf3, 0x378, 0xab, 0x378, 0xab, 0x1ff, 0xff10, 0x1ff, 0xff10, 0x290, +0xff81, 0x290, 0xff81, 0x5ec, 0x2be, 0x5ec, 0x2be, 0x7f9, 0x4af, 0x7f9, 0x4af, +0x81d, 0x4bb, 0x81d, 0x4bb, 0x81d, 0x4bb, 0x85e, 0x4e5, 0x85e, 0x4e5, 0x980, +0x5f3, 0x980, 0x5f3, 0xb00, 0x763, 0xb00, 0x763, 0xc8a, 0x8de, 0xc8a, 0x8de, +0xea3, 0xaec, 0xea3, 0xaec, 0xf7a, 0xbbb, 0xf7a, 0xbbb, 0xf7a, 0xbbb, 0xdcf, +0xa0b, 0xdcf, 0xa0b, 0xc22, 0x85c, 0xc22, 0x85c, 0xbef, 0x82a, 0xbef, 0x82a, +0xd49, 0x989, 0xd49, 0x989, 0xe28, 0xa70, 0xe28, 0xa70, 0xe28, 0xa70, 0xe12, +0xa66, 0xe12, 0xa66, 0xdab, 0xa0e, 0xdab, 0xa0e, 0xc11, 0x885, 0xc11, 0x885, +0xb65, 0x7ef, 0xb65, 0x7ef, 0xbc6, 0x869, 0xbc6, 0x869, 0xca7, 0x966, 0xca7, +0x966, 0xca7, 0x966, 0xc92, 0x971, 0xc92, 0x971, 0xade, 0x7df, 0xade, 0x7df, +0x8d6, 0x5fd, 0x8d6, 0x5fd, 0x6f0, 0x43f, 0x6f0, 0x43f, 0x5a6, 0x320, 0x5a6, +0x320, 0x4b3, 0x258, 0x4b3, 0x258, 0x4b3, 0x258, 0x43c, 0x20f, 0x43c, 0x20f, +0x2d2, 0xd4, 0x2d2, 0xd4, 0x286, 0xb7, 0x286, 0xb7, 0x3d1, 0x232, 0x3d1, +0x232, 0x496, 0x327, 0x496, 0x327, 0x496, 0x327, 0x3f0, 0x2b0, 0x3f0, 0x2b0, +0x1f2, 0xe1, 0x1f2, 0xe1, 0x13c, 0x58, 0x13c, 0x58, 0xff5c, 0xfea3, 0xff5c, +0xfea3, 0xfcc4, 0xfc34, 0xfcc4, 0xfc34, 0xfbcb, 0xfb63, 0xfbcb, 0xfb63, 0xfbcb, 0xfb63, +0xfbab, 0xfb67, 0xfbab, 0xfb67, 0xfcb1, 0xfc8f, 0xfcb1, 0xfc8f, 0xfd63, 0xfd61, 0xfd63, +0xfd61, 0xfe62, 0xfe7c, 0xfe62, 0xfe7c, 0xffdf, 0x13, 0xffdf, 0x13, 0xffdf, 0x13, +0xc3, 0x10e, 0xc3, 0x10e, 0x1d2, 0x231, 0x1d2, 0x231, 0x1e5, 0x256, 0x1e5, +0x256, 0x234, 0x2b5, 0x234, 0x2b5, 0x2fa, 0x388, 0x2fa, 0x388, 0x1c1, 0x25b, +0x1c1, 0x25b, 0x1c1, 0x25b, 0x168, 0x20b, 0x168, 0x20b, 0x290, 0x33c, 0x290, +0x33c, 0x360, 0x413, 0x360, 0x413, 0x47a, 0x533, 0x47a, 0x533, 0x573, 0x632, +0x573, 0x632, 0x667, 0x72b, 0x667, 0x72b, 0x667, 0x72b, 0x7d2, 0x89b, 0x7d2, +0x89b, 0x839, 0x906, 0x839, 0x906, 0x834, 0x905, 0x834, 0x905, 0x921, 0x9f7, +0x921, 0x9f7, 0x963, 0xa3e, 0x963, 0xa3e, 0x963, 0xa3e, 0x8d3, 0x9b4, 0x8d3, +0x9b4, 0x84d, 0x934, 0x84d, 0x934, 0x909, 0x9f6, 0x909, 0x9f6, 0x8f5, 0x9e9, +0x8f5, 0x9e9, 0x604, 0x700, 0x604, 0x700, 0x4d2, 0x5d6, 0x4d2, 0x5d6, 0x4d2, +0x5d6, 0x4e3, 0x5f0, 0x4e3, 0x5f0, 0x30a, 0x41f, 0x30a, 0x41f, 0x21e, 0x33e, +0x21e, 0x33e, 0x1b2, 0x2dc, 0x1b2, 0x2dc, 0xfff0, 0x125, 0xfff0, 0x125, 0xfdcd, +0xff0d, 0xfdcd, 0xff0d, 0xfdcd, 0xff0d, 0xfb2e, 0xfc79, 0xfb2e, 0xfc79, 0xf967, 0xfabe, +0xf967, 0xfabe, 0xf7b9, 0xf91c, 0xf7b9, 0xf91c, 0xf628, 0xf796, 0xf628, 0xf796, 0xf4ad, +0xf627, 0xf4ad, 0xf627, 0xf4ad, 0xf627, 0xf22e, 0xf3b3, 0xf22e, 0xf3b3, 0xf1c6, 0xf355, +0xf1c6, 0xf355, 0xf199, 0xf333, 0xf199, 0xf333, 0xf0df, 0xf282, 0xf0df, 0xf282, 0xf0bf, +0xf26a, 0xf0bf, 0xf26a, 0xef0c, 0xf0be, 0xef0c, 0xf0be, 0xef0c, 0xf0be, 0xed5e, 0xef17, +0xed5e, 0xef17, 0xedc8, 0xef86, 0xedc8, 0xef86, 0xef55, 0xf116, 0xef55, 0xf116, 0xef74, +0xf137, 0xef74, 0xf137, 0xeef5, 0xf0b9, 0xeef5, 0xf0b9, 0xef17, 0xf0da, 0xef17, 0xf0da, +0xef17, 0xf0da, 0xedf6, 0xefb5, 0xedf6, 0xefb5, 0xeca6, 0xee61, 0xeca6, 0xee61, 0xecec, +0xeea0, 0xecec, 0xeea0, 0xece2, 0xee8e, 0xece2, 0xee8e, 0xeb94, 0xed37, 0xeb94, 0xed37, +0xeb94, 0xed37, 0xeaa3, 0xec3a, 0xeaa3, 0xec3a, 0xea6a, 0xebf5, 0xea6a, 0xebf5, 0xea7f, +0xebfc, 0xea7f, 0xebfc, 0xea08, 0xeb76, 0xea08, 0xeb76, 0xe969, 0xeac5, 0xe969, 0xeac5, +0xea24, 0xeb70, 0xea24, 0xeb70, 0xea24, 0xeb70, 0xeab3, 0xebed, 0xeab3, 0xebed, 0xeaea, +0xec11, 0xeaea, 0xec11, 0xeb2c, 0xec40, 0xeb2c, 0xec40, 0xead4, 0xebd5, 0xead4, 0xebd5, +0xeac1, 0xebaf, 0xeac1, 0xebaf, 0xeb11, 0xebec, 0xeb11, 0xebec, 0xeb11, 0xebec, 0xec68, +0xed30, 0xec68, 0xed30, 0xed8b, 0xee41, 0xed8b, 0xee41, 0xeee6, 0xef8a, 0xeee6, 0xef8a, +0xf1fd, 0xf290, 0xf1fd, 0xf290, 0xf4ef, 0xf572, 0xf4ef, 0xf572, 0xf4ef, 0xf572, 0xf77d, +0xf7f1, 0xf77d, 0xf7f1, 0xf90d, 0xf973, 0xf90d, 0xf973, 0xfac4, 0xfb1e, 0xfac4, 0xfb1e, +0xfcae, 0xfcfd, 0xfcae, 0xfcfd, 0xfdc0, 0xfe07, 0xfdc0, 0xfe07, 0xfff4, 0x32, 0xfff4, +0x32, 0xfff4, 0x32, 0x289, 0x2c3, 0x289, 0x2c3, 0x3bd, 0x3f3, 0x3bd, 0x3f3, +0x387, 0x3bb, 0x387, 0x3bb, 0x3aa, 0x3df, 0x3aa, 0x3df, 0x375, 0x3ad, 0x375, +0x3ad, 0x31a, 0x357, 0x31a, 0x357, 0x31a, 0x357, 0x3f9, 0x43d, 0x3f9, 0x43d, +0x421, 0x46e, 0x421, 0x46e, 0x402, 0x45b, 0x402, 0x45b, 0x361, 0x3c7, 0x361, +0x3c7, 0x32d, 0x3a2, 0x32d, 0x3a2, 0x32d, 0x3a2, 0x39b, 0x421, 0x39b, 0x421, +0x3b1, 0x44a, 0x3b1, 0x44a, 0x5a7, 0x653, 0x5a7, 0x653, 0x649, 0x70a, 0x649, +0x70a, 0x584, 0x65a, 0x584, 0x65a, 0x5fd, 0x6e8, 0x5fd, 0x6e8, 0x5fd, 0x6e8, +0x57f, 0x680, 0x57f, 0x680, 0x44d, 0x562, 0x44d, 0x562, 0x291, 0x3bb, 0x291, +0x3bb, 0x18b, 0x2c8, 0x18b, 0x2c8, 0x15e, 0x2ad, 0x15e, 0x2ad, 0xeb, 0x249, +0xeb, 0x249, 0xeb, 0x249, 0x200, 0x36b, 0x200, 0x36b, 0x27c, 0x3f2, 0x27c, +0x3f2, 0xe6, 0x264, 0xe6, 0x264, 0xffb2, 0x135, 0xffb2, 0x135, 0xff34, 0xb9, +0xff34, 0xb9, 0xff34, 0xb9, 0xff50, 0xd4, 0xff50, 0xd4, 0xff8d, 0x10b, 0xff8d, +0x10b, 0xfe22, 0xff98, 0xfe22, 0xff98, 0xfbed, 0xfd56, 0xfbed, 0xfd56, 0xfa43, 0xfb9d, +0xfa43, 0xfb9d, 0xf938, 0xfa80, 0xf938, 0xfa80, 0xf938, 0xfa80, 0xf9b6, 0xfae7, 0xf9b6, +0xfae7, 0xfa87, 0xfb9f, 0xfa87, 0xfb9f, 0xfb58, 0xfc54, 0xfb58, 0xfc54, 0xfc99, 0xfd77, +0xfc99, 0xfd77, 0xfceb, 0xfda8, 0xfceb, 0xfda8, 0xfd0c, 0xfda7, 0xfd0c, 0xfda7, 0xfd0c, +0xfda7, 0xfdf9, 0xfe6f, 0xfdf9, 0xfe6f, 0xff40, 0xff90, 0xff40, 0xff90, 0xfff8, 0x21, +0xfff8, 0x21, 0x4e, 0x4e, 0x4e, 0x4e, 0x93, 0x6b, 0x93, 0x6b, 0x93, +0x6b, 0x118, 0xc7, 0x118, 0xc7, 0x256, 0x1db, 0x256, 0x1db, 0x363, 0x2bf, +0x363, 0x2bf, 0x47d, 0x3b0, 0x47d, 0x3b0, 0x522, 0x42e, 0x522, 0x42e, 0x5e6, +0x4ca, 0x5e6, 0x4ca, 0x5e6, 0x4ca, 0x6a2, 0x55f, 0x6a2, 0x55f, 0x6af, 0x547, +0x6af, 0x547, 0x8bd, 0x730, 0x8bd, 0x730, 0xa83, 0x8d3, 0xa83, 0x8d3, 0xb76, +0x9a4, 0xb76, 0x9a4, 0xd2d, 0xb3a, 0xd2d, 0xb3a, 0xd2d, 0xb3a, 0xe41, 0xc31, +0xe41, 0xc31, 0x102a, 0xdfd, 0x102a, 0xdfd, 0x11c8, 0xf7f, 0x11c8, 0xf7f, 0x1196, +0xf35, 0x1196, 0xf35, 0x10b8, 0xe41, 0x10b8, 0xe41, 0x10b8, 0xe41, 0x1088, 0xdfd, +0x1088, 0xdfd, 0x10b4, 0xe18, 0x10b4, 0xe18, 0xff8, 0xd4d, 0xff8, 0xd4d, 0x1079, +0xdc3, 0x1079, 0xdc3, 0x1153, 0xe96, 0x1153, 0xe96, 0x10f1, 0xe2f, 0x10f1, 0xe2f, +0x10f1, 0xe2f, 0x107a, 0xdb7, 0x107a, 0xdb7, 0xf48, 0xc88, 0xf48, 0xc88, 0xd56, +0xa9d, 0xd56, 0xa9d, 0xc16, 0x968, 0xc16, 0x968, 0xc9a, 0x9fc, 0xc9a, 0x9fc, +0xc9a, 0x9fc, 0xcb9, 0xa2d, 0xcb9, 0xa2d, 0xb7f, 0x90b, 0xb7f, 0x90b, 0xaaa, +0x84f, 0xaaa, 0x84f, 0xa63, 0x827, 0xa63, 0x827, 0x9ca, 0x7af, 0x9ca, 0x7af, +0x898, 0x6a1, 0x898, 0x6a1, 0x898, 0x6a1, 0x885, 0x6b5, 0x885, 0x6b5, 0x8b9, +0x712, 0x8b9, 0x712, 0x8c1, 0x745, 0x8c1, 0x745, 0x903, 0x7b3, 0x903, 0x7b3, +0x86d, 0x74a, 0x86d, 0x74a, 0x71d, 0x627, 0x71d, 0x627, 0x71d, 0x627, 0x4f4, +0x42c, 0x4f4, 0x42c, 0x359, 0x2bd, 0x359, 0x2bd, 0x216, 0x1a6, 0x216, 0x1a6, +0x142, 0xfd, 0x142, 0xfd, 0x125, 0x108, 0x125, 0x108, 0x125, 0x108, 0xf0, +0xfa, 0xf0, 0xfa, 0x25b, 0x288, 0x25b, 0x288, 0x391, 0x3e0, 0x391, 0x3e0, +0x31a, 0x388, 0x31a, 0x388, 0x325, 0x3af, 0x325, 0x3af, 0x48b, 0x52f, 0x48b, +0x52f, 0x48b, 0x52f, 0x5e1, 0x69c, 0x5e1, 0x69c, 0x5db, 0x6a9, 0x5db, 0x6a9, +0x5b7, 0x697, 0x5b7, 0x697, 0x514, 0x603, 0x514, 0x603, 0x440, 0x53c, 0x440, +0x53c, 0x519, 0x621, 0x519, 0x621, 0x519, 0x621, 0x5fc, 0x70e, 0x5fc, 0x70e, +0x688, 0x7a3, 0x688, 0x7a3, 0x823, 0x947, 0x823, 0x947, 0x9b0, 0xada, 0x9b0, +0xada, 0xa0c, 0xb3e, 0xa0c, 0xb3e, 0xa0c, 0xb3e, 0x9ab, 0xae3, 0x9ab, 0xae3, +0x85f, 0x99e, 0x85f, 0x99e, 0x711, 0x856, 0x711, 0x856, 0x754, 0x89f, 0x754, +0x89f, 0x7d0, 0x922, 0x7d0, 0x922, 0x762, 0x8bb, 0x762, 0x8bb, 0x762, 0x8bb, +0x5e8, 0x747, 0x5e8, 0x747, 0x3f7, 0x55d, 0x3f7, 0x55d, 0x226, 0x392, 0x226, +0x392, 0xd3, 0x244, 0xd3, 0x244, 0xffdf, 0x155, 0xffdf, 0x155, 0xfd95, 0xff0f, +0xfd95, 0xff0f, 0xfd95, 0xff0f, 0xfb83, 0xfd00, 0xfb83, 0xfd00, 0xfaa1, 0xfc20, 0xfaa1, +0xfc20, 0xf993, 0xfb13, 0xf993, 0xfb13, 0xf7f8, 0xf976, 0xf7f8, 0xf976, 0xf625, 0xf7a1, +0xf625, 0xf7a1, 0xf625, 0xf7a1, 0xf50e, 0xf686, 0xf50e, 0xf686, 0xf38e, 0xf501, 0xf38e, +0xf501, 0xf161, 0xf2cc, 0xf161, 0xf2cc, 0xefd3, 0xf136, 0xefd3, 0xf136, 0xee06, 0xef5e, +0xee06, 0xef5e, 0xec1f, 0xed6c, 0xec1f, 0xed6c, 0xec1f, 0xed6c, 0xeae2, 0xec23, 0xeae2, +0xec23, 0xe8a2, 0xe9d6, 0xe8a2, 0xe9d6, 0xe670, 0xe797, 0xe670, 0xe797, 0xe5bc, 0xe6d4, +0xe5bc, 0xe6d4, 0xe60f, 0xe71a, 0xe60f, 0xe71a, 0xe75d, 0xe85a, 0xe75d, 0xe85a, 0xe75d, +0xe85a, 0xe7f0, 0xe8df, 0xe7f0, 0xe8df, 0xe7fd, 0xe8df, 0xe7fd, 0xe8df, 0xe7f7, 0xe8cd, +0xe7f7, 0xe8cd, 0xe72c, 0xe7f7, 0xe72c, 0xe7f7, 0xe6f2, 0xe7b2, 0xe6f2, 0xe7b2, 0xe6f2, +0xe7b2, 0xe7a9, 0xe85f, 0xe7a9, 0xe85f, 0xe747, 0xe7f4, 0xe747, 0xe7f4, 0xe5aa, 0xe64f, +0xe5aa, 0xe64f, 0xe513, 0xe5b0, 0xe513, 0xe5b0, 0xe62c, 0xe6c1, 0xe62c, 0xe6c1, 0xe7c9, +0xe857, 0xe7c9, 0xe857, 0xe7c9, 0xe857, 0xe8d4, 0xe95b, 0xe8d4, 0xe95b, 0xe983, 0xea02, +0xe983, 0xea02, 0xe979, 0xe9ef, 0xe979, 0xe9ef, 0xe90b, 0xe977, 0xe90b, 0xe977, 0xe965, +0xe9c6, 0xe965, 0xe9c6, 0xe999, 0xe9ef, 0xe999, 0xe9ef, 0xe999, 0xe9ef, 0xe986, 0xe9ce, +0xe986, 0xe9ce, 0xe9c1, 0xe9fb, 0xe9c1, 0xe9fb, 0xeb13, 0xeb3b, 0xeb13, 0xeb3b, 0xed6d, +0xed83, 0xed6d, 0xed83, 0xeedb, 0xeedd, 0xeedb, 0xeedd, 0xeedb, 0xeedd, 0xf10c, 0xf0f8, +0xf10c, 0xf0f8, 0xf433, 0xf409, 0xf433, 0xf409, 0xf65b, 0xf619, 0xf65b, 0xf619, 0xf8eb, +0xf890, 0xf8eb, 0xf890, 0xfaf8, 0xfa85, 0xfaf8, 0xfa85, 0xfcd9, 0xfc4c, 0xfcd9, 0xfc4c, +0xfcd9, 0xfc4c, 0xff88, 0xfee3, 0xff88, 0xfee3, 0x1f3, 0x137, 0x1f3, 0x137, 0x4fa, +0x428, 0x4fa, 0x428, 0x7d3, 0x6ed, 0x7d3, 0x6ed, 0x913, 0x81c, 0x913, 0x81c, +0xa4d, 0x947, 0xa4d, 0x947, 0xa4d, 0x947, 0xc17, 0xb06, 0xc17, 0xb06, 0xd66, +0xc4d, 0xd66, 0xc4d, 0xe16, 0xcf8, 0xe16, 0xcf8, 0xdc8, 0xcaa, 0xdc8, 0xcaa, +0xe7c, 0xd61, 0xe7c, 0xd61, 0xe7c, 0xd61, 0xf10, 0xdfd, 0xf10, 0xdfd, 0xda4, +0xc9c, 0xda4, 0xc9c, 0xc9a, 0xba1, 0xc9a, 0xba1, 0xb5a, 0xa74, 0xb5a, 0xa74, +0xae7, 0xa16, 0xae7, 0xa16, 0xbb0, 0xaf6, 0xbb0, 0xaf6, 0xbb0, 0xaf6, 0xc7e, +0xbdf, 0xc7e, 0xbdf, 0xcc5, 0xc42, 0xcc5, 0xc42, 0xbec, 0xb85, 0xbec, 0xb85, +0xb21, 0xad9, 0xb21, 0xad9, 0xa7b, 0xa51, 0xa7b, 0xa51, 0xa23, 0xa17, 0xa23, +0xa17, 0xa23, 0xa17, 0x909, 0x919, 0x909, 0x919, 0x831, 0x85d, 0x831, 0x85d, +0x889, 0x8cf, 0x889, 0x8cf, 0x7b3, 0x812, 0x7b3, 0x812, 0x704, 0x779, 0x704, +0x779, 0x704, 0x779, 0x673, 0x6fb, 0x673, 0x6fb, 0x5b7, 0x650, 0x5b7, 0x650, +0x577, 0x61e, 0x577, 0x61e, 0x469, 0x51c, 0x469, 0x51c, 0x362, 0x41d, 0x362, +0x41d, 0x1d8, 0x29a, 0x1d8, 0x29a, 0x1d8, 0x29a, 0x10, 0xd5, 0x10, 0xd5, +0xff76, 0x3d, 0xff76, 0x3d, 0xff54, 0x19, 0xff54, 0x19, 0xfdcd, 0xfe8f, 0xfdcd, +0xfe8f, 0xfb13, 0xfbd0, 0xfb13, 0xfbd0, 0xfa82, 0xfb38, 0xfa82, 0xfb38, 0xfa82, 0xfb38, +0xfacc, 0xfb7a, 0xfacc, 0xfb7a, 0xfb1d, 0xfbc2, 0xfb1d, 0xfbc2, 0xfc4d, 0xfce6, 0xfc4d, +0xfce6, 0xfd17, 0xfda5, 0xfd17, 0xfda5, 0xfd75, 0xfdf6, 0xfd75, 0xfdf6, 0xfd75, 0xfdf6, +0xfdd0, 0xfe43, 0xfdd0, 0xfe43, 0xfe76, 0xfed9, 0xfe76, 0xfed9, 0xfe52, 0xfea4, 0xfe52, +0xfea4, 0xfea9, 0xfee9, 0xfea9, 0xfee9, 0xffb6, 0xffe2, 0xffb6, 0xffe2, 0xffc3, 0xffda, +0xffc3, 0xffda, 0xffc3, 0xffda, 0xffe3, 0xffe4, 0xffe3, 0xffe4, 0x3c, 0x24, 0x3c, +0x24, 0xdd, 0xab, 0xdd, 0xab, 0x1c2, 0x174, 0x1c2, 0x174, 0x1e1, 0x175, +0x1e1, 0x175, 0x1e1, 0x175, 0x212, 0x188, 0x212, 0x188, 0x344, 0x299, 0x344, +0x299, 0x49b, 0x3cd, 0x49b, 0x3cd, 0x68f, 0x59d, 0x68f, 0x59d, 0x8e4, 0x7ce, +0x8e4, 0x7ce, 0xa9c, 0x960, 0xa9c, 0x960, 0xa9c, 0x960, 0xa9b, 0x93b, 0xa9b, +0x93b, 0x8e8, 0x763, 0x8e8, 0x763, 0x8d2, 0x728, 0x8d2, 0x728, 0x92c, 0x75f, +0x92c, 0x75f, 0x8b4, 0x6c6, 0x8b4, 0x6c6, 0x995, 0x788, 0x995, 0x788, 0x995, +0x788, 0xa98, 0x86f, 0xa98, 0x86f, 0xb58, 0x916, 0xb58, 0x916, 0xc34, 0x9de, +0xc34, 0x9de, 0xc8c, 0xa26, 0xc8c, 0xa26, 0xcef, 0xa7d, 0xcef, 0xa7d, 0xcef, +0xa7d, 0xd35, 0xabc, 0xd35, 0xabc, 0xcbb, 0xa40, 0xcbb, 0xa40, 0xb58, 0x8e0, +0xb58, 0x8e0, 0xa04, 0x795, 0xa04, 0x795, 0x911, 0x6b0, 0x911, 0x6b0, 0x8a0, +0x652, 0x8a0, 0x652, 0x8a0, 0x652, 0x82d, 0x5f6, 0x82d, 0x5f6, 0x5fd, 0x3e2, +0x5fd, 0x3e2, 0x4c1, 0x2c5, 0x4c1, 0x2c5, 0x59a, 0x3c2, 0x59a, 0x3c2, 0x66d, +0x4ba, 0x66d, 0x4ba, 0x718, 0x58d, 0x718, 0x58d, 0x718, 0x58d, 0x771, 0x610, +0x771, 0x610, 0x72f, 0x5f8, 0x72f, 0x5f8, 0x5e6, 0x4da, 0x5e6, 0x4da, 0x403, +0x321, 0x403, 0x321, 0x298, 0x1e0, 0x298, 0x1e0, 0x298, 0x1e0, 0x1d6, 0x146, +0x1d6, 0x146, 0x72, 0x7, 0x72, 0x7, 0xfeef, 0xfea7, 0xfeef, 0xfea7, 0xff93, +0xff6c, 0xff93, 0xff6c, 0x192, 0x189, 0x192, 0x189, 0x307, 0x318, 0x307, 0x318, +0x307, 0x318, 0x3d9, 0x402, 0x3d9, 0x402, 0x483, 0x4c0, 0x483, 0x4c0, 0x564, +0x5b2, 0x564, 0x5b2, 0x641, 0x69d, 0x641, 0x69d, 0x679, 0x6e0, 0x679, 0x6e0, +0x6f4, 0x763, 0x6f4, 0x763, 0x6f4, 0x763, 0x74c, 0x7c2, 0x74c, 0x7c2, 0x72e, +0x7a8, 0x72e, 0x7a8, 0x7cb, 0x847, 0x7cb, 0x847, 0x8b9, 0x937, 0x8b9, 0x937, +0x9a5, 0xa24, 0x9a5, 0xa24, 0x9a5, 0xa24, 0xa96, 0xb15, 0xa96, 0xb15, 0xc19, +0xc98, 0xc19, 0xc98, 0xd5d, 0xddb, 0xd5d, 0xddb, 0xce7, 0xd65, 0xce7, 0xd65, +0xbe4, 0xc63, 0xbe4, 0xc63, 0xbbb, 0xc3b, 0xbbb, 0xc3b, 0xbbb, 0xc3b, 0xc80, +0xd02, 0xc80, 0xd02, 0xd66, 0xde9, 0xd66, 0xde9, 0xdd7, 0xe5c, 0xdd7, 0xe5c, +0xd5b, 0xde3, 0xd5b, 0xde3, 0xbab, 0xc36, 0xbab, 0xc36, 0xa1c, 0xaab, 0xa1c, +0xaab, 0xa1c, 0xaab, 0x931, 0x9c3, 0x931, 0x9c3, 0x7d1, 0x866, 0x7d1, 0x866, +0x5c8, 0x660, 0x5c8, 0x660, 0x459, 0x4f4, 0x459, 0x4f4, 0x418, 0x4b4, 0x418, +0x4b4, 0x418, 0x4b4, 0x322, 0x3be, 0x322, 0x3be, 0x15e, 0x1fb, 0x15e, 0x1fb, +0xffc3, 0x5e, 0xffc3, 0x5e, 0xfdd5, 0xfe6f, 0xfdd5, 0xfe6f, 0xfb76, 0xfc0e, 0xfb76, +0xfc0e, 0xf85a, 0xf8ef, 0xf85a, 0xf8ef, 0xf85a, 0xf8ef, 0xf538, 0xf5ca, 0xf538, 0xf5ca, +0xf34f, 0xf3dd, 0xf34f, 0xf3dd, 0xf2e0, 0xf36a, 0xf2e0, 0xf36a, 0xf2a9, 0xf330, 0xf2a9, +0xf330, 0xf20a, 0xf28e, 0xf20a, 0xf28e, 0xf0f5, 0xf177, 0xf0f5, 0xf177, 0xf0f5, 0xf177, +0xeec9, 0xef4a, 0xeec9, 0xef4a, 0xed96, 0xee17, 0xed96, 0xee17, 0xee61, 0xeee3, 0xee61, +0xeee3, 0xeee6, 0xef6b, 0xeee6, 0xef6b, 0xee6d, 0xeef7, 0xee6d, 0xeef7, 0xee6d, 0xeef7, +0xed67, 0xedf7, 0xed67, 0xedf7, 0xec7f, 0xed17, 0xec7f, 0xed17, 0xecf9, 0xed9b, 0xecf9, +0xed9b, 0xed8c, 0xee39, 0xed8c, 0xee39, 0xec9f, 0xed58, 0xec9f, 0xed58, 0xeb41, 0xec07, +0xeb41, 0xec07, 0xeb41, 0xec07, 0xeb18, 0xebec, 0xeb18, 0xebec, 0xec6e, 0xed50, 0xec6e, +0xed50, 0xece3, 0xedd3, 0xece3, 0xedd3, 0xebf2, 0xecf0, 0xebf2, 0xecf0, 0xeb6a, 0xec74, +0xeb6a, 0xec74, 0xead3, 0xebe7, 0xead3, 0xebe7, 0xead3, 0xebe7, 0xea44, 0xeb60, 0xea44, +0xeb60, 0xea78, 0xeb9b, 0xea78, 0xeb9b, 0xea35, 0xeb5b, 0xea35, 0xeb5b, 0xea19, 0xeb40, +0xea19, 0xeb40, 0xeacf, 0xebf2, 0xeacf, 0xebf2, 0xeacf, 0xebf2, 0xeb3b, 0xec58, 0xeb3b, +0xec58, 0xeb85, 0xec98, 0xeb85, 0xec98, 0xebcb, 0xecd1, 0xebcb, 0xecd1, 0xecb0, 0xeda5, +0xecb0, 0xeda5, 0xee71, 0xef51, 0xee71, 0xef51, 0xf0d5, 0xf19e, 0xf0d5, 0xf19e, 0xf0d5, +0xf19e, 0xf33a, 0xf3eb, 0xf33a, 0xf3eb, 0xf4a3, 0xf539, 0xf4a3, 0xf539, 0xf6e4, 0xf75d, +0xf6e4, 0xf75d, 0xf9b5, 0xfa10, 0xf9b5, 0xfa10, 0xfb7f, 0xfbbd, 0xfb7f, 0xfbbd, 0xfdcf, +0xfdef, 0xfdcf, 0xfdef, 0xfdcf, 0xfdef, 0x18, 0x1b, 0x18, 0x1b, 0x173, 0x15b, +0x173, 0x15b, 0x327, 0x2f7, 0x327, 0x2f7, 0x4e3, 0x49d, 0x4e3, 0x49d, 0x5e9, +0x591, 0x5e9, 0x591, 0x5e9, 0x591, 0x65a, 0x5f3, 0x65a, 0x5f3, 0x688, 0x617, +0x688, 0x617, 0x6d2, 0x659, 0x6d2, 0x659, 0x6cc, 0x651, 0x6cc, 0x651, 0x58c, +0x513, 0x58c, 0x513, 0x3ff, 0x38c, 0x3ff, 0x38c, 0x3ff, 0x38c, 0x37e, 0x315, +0x37e, 0x315, 0x361, 0x306, 0x361, 0x306, 0x3e8, 0x39e, 0x3e8, 0x39e, 0x54c, +0x516, 0x54c, 0x516, 0x644, 0x625, 0x644, 0x625, 0x623, 0x61c, 0x623, 0x61c, +0x623, 0x61c, 0x5b7, 0x5c9, 0x5b7, 0x5c9, 0x56b, 0x598, 0x56b, 0x598, 0x43c, +0x482, 0x43c, 0x482, 0x2ca, 0x32a, 0x2ca, 0x32a, 0x257, 0x2d0, 0x257, 0x2d0, +0x257, 0x2d0, 0x26b, 0x2fb, 0x26b, 0x2fb, 0x225, 0x2ca, 0x225, 0x2ca, 0x1a8, +0x260, 0x1a8, 0x260, 0x12f, 0x1f7, 0x12f, 0x1f7, 0x54, 0x12a, 0x54, 0x12a, +0xff6e, 0x4e, 0xff6e, 0x4e, 0xff6e, 0x4e, 0xfedf, 0xffc7, 0xfedf, 0xffc7, 0xfe8f, +0xff7c, 0xfe8f, 0xff7c, 0xfdd8, 0xfec6, 0xfdd8, 0xfec6, 0xfc64, 0xfd52, 0xfc64, 0xfd52, +0xfb6d, 0xfc57, 0xfb6d, 0xfc57, 0xfb6d, 0xfc57, 0xfb02, 0xfbe6, 0xfb02, 0xfbe6, 0xfa42, +0xfb1e, 0xfa42, 0xfb1e, 0xf971, 0xfa44, 0xf971, 0xfa44, 0xf8d1, 0xf999, 0xf8d1, 0xf999, +0xf917, 0xf9d2, 0xf917, 0xf9d2, 0xf9ca, 0xfa78, 0xf9ca, 0xfa78, 0xf9ca, 0xfa78, 0xfa05, +0xfaa5, 0xfa05, 0xfaa5, 0xfaba, 0xfb4a, 0xfaba, 0xfb4a, 0xfb0f, 0xfb90, 0xfb0f, 0xfb90, +0xfac0, 0xfb30, 0xfac0, 0xfb30, 0xfbed, 0xfc4c, 0xfbed, 0xfc4c, 0xfe15, 0xfe62, 0xfe15, +0xfe62, 0xfe15, 0xfe62, 0xfff1, 0x2c, 0xfff1, 0x2c, 0x199, 0x1c0, 0x199, 0x1c0, +0x244, 0x257, 0x244, 0x257, 0x1fe, 0x1fc, 0x1fe, 0x1fc, 0x173, 0x15a, 0x173, +0x15a, 0x173, 0x15a, 0x17b, 0x149, 0x17b, 0x149, 0x27b, 0x22f, 0x27b, 0x22f, +0x35f, 0x2f7, 0x35f, 0x2f7, 0x4a0, 0x41a, 0x4a0, 0x41a, 0x5bd, 0x518, 0x5bd, +0x518, 0x6c2, 0x5fc, 0x6c2, 0x5fc, 0x6c2, 0x5fc, 0x8b5, 0x7cd, 0x8b5, 0x7cd, +0xa42, 0x937, 0xa42, 0x937, 0xbe5, 0xab6, 0xbe5, 0xab6, 0xcc3, 0xb6f, 0xcc3, +0xb6f, 0xcc9, 0xb50, 0xcc9, 0xb50, 0xdde, 0xc41, 0xdde, 0xc41, 0xdde, 0xc41, +0xe9b, 0xcdb, 0xe9b, 0xcdb, 0xf0a, 0xd29, 0xf0a, 0xd29, 0xfa1, 0xda0, 0xfa1, +0xda0, 0x1095, 0xe78, 0x1095, 0xe78, 0x120a, 0xfd3, 0x120a, 0xfd3, 0x120a, 0xfd3, +0x127a, 0x102f, 0x127a, 0x102f, 0x11fc, 0xfa1, 0x11fc, 0xfa1, 0x117b, 0xf14, 0x117b, +0xf14, 0x117f, 0xf13, 0x117f, 0xf13, 0x10e4, 0xe77, 0x10e4, 0xe77, 0xfa1, 0xd3a, +0xfa1, 0xd3a, 0xfa1, 0xd3a, 0xefc, 0xca1, 0xefc, 0xca1, 0xe55, 0xc0b, 0xe55, +0xc0b, 0xdeb, 0xbb8, 0xdeb, 0xbb8, 0xe1e, 0xc08, 0xe1e, 0xc08, 0xe26, 0xc31, +0xe26, 0xc31, 0xcf6, 0xb27, 0xcf6, 0xb27, 0xcf6, 0xb27, 0xb9e, 0x9f9, 0xb9e, +0x9f9, 0xb1d, 0x9a4, 0xb1d, 0x9a4, 0xb19, 0x9cf, 0xb19, 0x9cf, 0xbb2, 0xa98, +0xbb2, 0xa98, 0xb9d, 0xab5, 0xb9d, 0xab5, 0xb9d, 0xab5, 0xab1, 0x9fa, 0xab1, +0x9fa, 0x936, 0x8b0, 0x936, 0x8b0, 0x822, 0x7cb, 0x822, 0x7cb, 0x743, 0x718, +0x743, 0x718, 0x5a5, 0x5a3, 0x5a5, 0x5a3, 0x592, 0x5b7, 0x592, 0x5b7, 0x592, +0x5b7, 0x642, 0x68a, 0x642, 0x68a, 0x66e, 0x6d4, 0x66e, 0x6d4, 0x5d3, 0x653, +0x5d3, 0x653, 0x4e4, 0x57b, 0x4e4, 0x57b, 0x5bf, 0x668, 0x5bf, 0x668, 0x765, +0x81b, 0x765, 0x81b, 0x765, 0x81b, 0x89c, 0x95c, 0x89c, 0x95c, 0x942, 0xa09, +0x942, 0xa09, 0x9c0, 0xa8a, 0x9c0, 0xa8a, 0x954, 0xa1f, 0x954, 0xa1f, 0x865, +0x92f, 0x865, 0x92f, 0x865, 0x92f, 0x890, 0x956, 0x890, 0x956, 0x886, 0x949, +0x886, 0x949, 0x8ab, 0x969, 0x8ab, 0x969, 0x9a0, 0xa5a, 0x9a0, 0xa5a, 0xb4f, +0xc05, 0xb4f, 0xc05, 0xc70, 0xd23, 0xc70, 0xd23, 0xc70, 0xd23, 0xbf2, 0xca3, +0xbf2, 0xca3, 0xb36, 0xbe6, 0xb36, 0xbe6, 0xaa1, 0xb51, 0xaa1, 0xb51, 0xabb, +0xb6e, 0xabb, 0xb6e, 0xaa7, 0xb5d, 0xaa7, 0xb5d, 0xad5, 0xb8f, 0xad5, 0xb8f, +0xad5, 0xb8f, 0xae0, 0xba0, 0xae0, 0xba0, 0x93a, 0x9ff, 0x93a, 0x9ff, 0x7e1, +0x8ad, 0x7e1, 0x8ad, 0x5db, 0x6ae, 0x5db, 0x6ae, 0x297, 0x372, 0x297, 0x372, +0x297, 0x372, 0xffcc, 0xad, 0xffcc, 0xad, 0xfeaf, 0xff95, 0xfeaf, 0xff95, 0xfeaa, +0xff94, 0xfeaa, 0xff94, 0xfd27, 0xfe14, 0xfd27, 0xfe14, 0xfb6a, 0xfc59, 0xfb6a, 0xfc59, +0xfa68, 0xfb57, 0xfa68, 0xfb57, 0xfa68, 0xfb57, 0xf89c, 0xf989, 0xf89c, 0xf989, 0xf608, +0xf6f2, 0xf608, 0xf6f2, 0xf424, 0xf508, 0xf424, 0xf508, 0xf2a5, 0xf382, 0xf2a5, 0xf382, +0xf08f, 0xf164, 0xf08f, 0xf164, 0xeeee, 0xefb9, 0xeeee, 0xefb9, 0xeeee, 0xefb9, 0xedc0, +0xee81, 0xedc0, 0xee81, 0xecbf, 0xed75, 0xecbf, 0xed75, 0xeb1c, 0xebc8, 0xeb1c, 0xebc8, +0xe998, 0xea3a, 0xe998, 0xea3a, 0xe9b1, 0xea49, 0xe9b1, 0xea49, 0xe9b1, 0xea49, 0xea4a, +0xead9, 0xea4a, 0xead9, 0xeac2, 0xeb4a, 0xeac2, 0xeb4a, 0xeab5, 0xeb37, 0xeab5, 0xeb37, +0xeadb, 0xeb58, 0xeadb, 0xeb58, 0xeb0b, 0xeb86, 0xeb0b, 0xeb86, 0xeaa6, 0xeb1f, 0xeaa6, +0xeb1f, 0xeaa6, 0xeb1f, 0xea37, 0xeab1, 0xea37, 0xeab1, 0xe9df, 0xea5b, 0xe9df, 0xea5b, +0xe9b6, 0xea35, 0xe9b6, 0xea35, 0xe8ee, 0xe971, 0xe8ee, 0xe971, 0xe8d5, 0xe95d, 0xe8d5, +0xe95d, 0xe945, 0xe9d2, 0xe945, 0xe9d2, 0xe945, 0xe9d2, 0xe8b2, 0xe943, 0xe8b2, 0xe943, +0xe8ee, 0xe983, 0xe8ee, 0xe983, 0xea14, 0xeaab, 0xea14, 0xeaab, 0xeab0, 0xeb48, 0xeab0, +0xeb48, 0xea8b, 0xeb20, 0xea8b, 0xeb20, 0xea8b, 0xeb20, 0xea50, 0xeae2, 0xea50, 0xeae2, +0xea9a, 0xeb25, 0xea9a, 0xeb25, 0xeba2, 0xec23, 0xeba2, 0xec23, 0xed42, 0xedb6, 0xed42, +0xedb6, 0xeed3, 0xef37, 0xeed3, 0xef37, 0xef66, 0xefb8, 0xef66, 0xefb8, 0xef66, 0xefb8, +0xef77, 0xefb3, 0xef77, 0xefb3, 0xf106, 0xf12a, 0xf106, 0xf12a, 0xf2f3, 0xf2fd, 0xf2f3, +0xf2fd, 0xf4a4, 0xf493, 0xf4a4, 0xf493, 0xf735, 0xf707, 0xf735, 0xf707, 0xf9a6, 0xf95b, +0xf9a6, 0xf95b, 0xf9a6, 0xf95b, 0xfc40, 0xfbd9, 0xfc40, 0xfbd9, 0xffb6, 0xff34, 0xffb6, +0xff34, 0x2ed, 0x251, 0x2ed, 0x251, 0x4cd, 0x41a, 0x4cd, 0x41a, 0x661, 0x599, +0x661, 0x599, 0x661, 0x599, 0x863, 0x78b, 0x863, 0x78b, 0xa06, 0x921, 0xa06, +0x921, 0xb36, 0xa4a, 0xb36, 0xa4a, 0xbe9, 0xafa, 0xbe9, 0xafa, 0xce3, 0xbf6, +0xce3, 0xbf6, 0xe1a, 0xd34, 0xe1a, 0xd34, 0xe1a, 0xd34, 0xe2b, 0xd52, 0xe2b, +0xd52, 0xd41, 0xc79, 0xd41, 0xc79, 0xce3, 0xc31, 0xce3, 0xc31, 0xce8, 0xc50, +0xce8, 0xc50, 0xc27, 0xbad, 0xc27, 0xbad, 0xc27, 0xbad, 0xb3a, 0xae1, 0xb3a, +0xae1, 0xa59, 0xa23, 0xa59, 0xa23, 0x971, 0x960, 0x971, 0x960, 0x824, 0x839, +0x824, 0x839, 0x7bc, 0x7f7, 0x7bc, 0x7f7, 0x87e, 0x8df, 0x87e, 0x8df, 0x87e, +0x8df, 0x7d2, 0x857, 0x7d2, 0x857, 0x71f, 0x7c6, 0x71f, 0x7c6, 0x70b, 0x7d3, +0x70b, 0x7d3, 0x66b, 0x74f, 0x66b, 0x74f, 0x52e, 0x62b, 0x52e, 0x62b, 0x3a2, +0x4b4, 0x3a2, 0x4b4, 0x3a2, 0x4b4, 0x2dc, 0x3ff, 0x2dc, 0x3ff, 0x2b0, 0x3df, +0x2b0, 0x3df, 0x243, 0x37b, 0x243, 0x37b, 0x118, 0x254, 0x118, 0x254, 0x72, +0x1ae, 0x72, 0x1ae, 0x72, 0x1ae, 0xffff, 0x137, 0xffff, 0x137, 0xff02, 0x32, +0xff02, 0x32, 0xfe23, 0xff48, 0xfe23, 0xff48, 0xfc8b, 0xfda2, 0xfc8b, 0xfda2, 0xfb1b, +0xfc22, 0xfb1b, 0xfc22, 0xfa30, 0xfb24, 0xfa30, 0xfb24, 0xfa30, 0xfb24, 0xf9b6, 0xfa97, +0xf9b6, 0xfa97, 0xf949, 0xfa15, 0xf949, 0xfa15, 0xf84f, 0xf904, 0xf84f, 0xf904, 0xf7df, +0xf87d, 0xf7df, 0xf87d, 0xf7ff, 0xf886, 0xf7ff, 0xf886, 0xf8a5, 0xf915, 0xf8a5, 0xf915, +0xf8a5, 0xf915, 0xf919, 0xf971, 0xf919, 0xf971, 0xf9fe, 0xfa3f, 0xf9fe, 0xfa3f, 0xfb02, +0xfb2c, 0xfb02, 0xfb2c, 0xfac8, 0xfad9, 0xfac8, 0xfad9, 0xfaa9, 0xfaa2, 0xfaa9, 0xfaa2, +0xfaa9, 0xfaa2, 0xfa92, 0xfa74, 0xfa92, 0xfa74, 0xfade, 0xfaa6, 0xfade, 0xfaa6, 0xfb62, +0xfb11, 0xfb62, 0xfb11, 0xfc38, 0xfbcd, 0xfc38, 0xfbcd, 0xfd6d, 0xfce6, 0xfd6d, 0xfce6, +0xfdf3, 0xfd51, 0xfdf3, 0xfd51, 0xfdf3, 0xfd51, 0xfebf, 0xfdff, 0xfebf, 0xfdff, 0xfff3, +0xff16, 0xfff3, 0xff16, 0x1c3, 0xc8, 0x1c3, 0xc8, 0x332, 0x217, 0x332, 0x217, +0x434, 0x2fa, 0x434, 0x2fa, 0x51e, 0x3c5, 0x51e, 0x3c5, 0x51e, 0x3c5, 0x517, +0x39e, 0x517, 0x39e, 0x598, 0x402, 0x598, 0x402, 0x690, 0x4dd, 0x690, 0x4dd, +0x76d, 0x5a0, 0x76d, 0x5a0, 0x775, 0x58f, 0x775, 0x58f, 0x775, 0x58f, 0x781, +0x587, 0x781, 0x587, 0x8ae, 0x6a2, 0x8ae, 0x6a2, 0x9df, 0x7c6, 0x9df, 0x7c6, +0xac2, 0x8a1, 0xac2, 0x8a1, 0xac8, 0x8a3, 0xac8, 0x8a3, 0xb49, 0x925, 0xb49, +0x925, 0xb49, 0x925, 0xba6, 0x989, 0xba6, 0x989, 0xb4b, 0x93a, 0xb4b, 0x93a, +0xaf3, 0x8f3, 0xaf3, 0x8f3, 0x9df, 0x7f5, 0x9df, 0x7f5, 0x97c, 0x7ad, 0x97c, +0x7ad, 0x8f9, 0x749, 0x8f9, 0x749, 0x8f9, 0x749, 0x868, 0x6dc, 0x868, 0x6dc, +0x869, 0x702, 0x869, 0x702, 0x802, 0x6c6, 0x802, 0x6c6, 0x7be, 0x6ad, 0x7be, +0x6ad, 0x796, 0x6b1, 0x796, 0x6b1, 0x796, 0x6b1, 0x7e0, 0x729, 0x7e0, 0x729, +0x78e, 0x704, 0x78e, 0x704, 0x6a9, 0x64b, 0x6a9, 0x64b, 0x60b, 0x5d8, 0x60b, +0x5d8, 0x5e6, 0x5db, 0x5e6, 0x5db, 0x5e8, 0x603, 0x5e8, 0x603, 0x5e8, 0x603, +0x46b, 0x4a9, 0x46b, 0x4a9, 0x2f8, 0x356, 0x2f8, 0x356, 0x240, 0x2ba, 0x240, +0x2ba, 0x226, 0x2b7, 0x226, 0x2b7, 0x265, 0x309, 0x265, 0x309, 0x228, 0x2db, +0x228, 0x2db, 0x228, 0x2db, 0x2ce, 0x38b, 0x2ce, 0x38b, 0x3f0, 0x4b4, 0x3f0, +0x4b4, 0x509, 0x5cf, 0x509, 0x5cf, 0x619, 0x6de, 0x619, 0x6de, 0x762, 0x822, +0x762, 0x822, 0x762, 0x822, 0x8bc, 0x974, 0x8bc, 0x974, 0x971, 0xa1f, 0x971, +0xa1f, 0xa30, 0xad1, 0xa30, 0xad1, 0xaae, 0xb41, 0xaae, 0xb41, 0xb0d, 0xb90, +0xb0d, 0xb90, 0xb46, 0xbb8, 0xb46, 0xbb8, 0xb46, 0xbb8, 0xbf6, 0xc56, 0xbf6, +0xc56, 0xd7e, 0xdcd, 0xd7e, 0xdcd, 0xe7e, 0xebc, 0xe7e, 0xebc, 0xed3, 0xf02, +0xed3, 0xf02, 0xf0d, 0xf2e, 0xf0d, 0xf2e, 0xff3, 0x1007, 0xff3, 0x1007, 0xff3, +0x1007, 0x1064, 0x106d, 0x1064, 0x106d, 0xfbd, 0xfbf, 0xfbd, 0xfbf, 0xea6, 0xea2, +0xea6, 0xea2, 0xdd9, 0xdd2, 0xdd9, 0xdd2, 0xdff, 0xdf7, 0xdff, 0xdf7, 0xdff, +0xdf7, 0xde9, 0xde4, 0xde9, 0xde4, 0xd39, 0xd39, 0xd39, 0xd39, 0xb76, 0xb7e, +0xb76, 0xb7e, 0x9d9, 0x9eb, 0x9d9, 0x9eb, 0x939, 0x957, 0x939, 0x957, 0x87d, +0x8a9, 0x87d, 0x8a9, 0x87d, 0x8a9, 0x7fe, 0x83a, 0x7fe, 0x83a, 0x710, 0x75c, +0x710, 0x75c, 0x5b2, 0x610, 0x5b2, 0x610, 0x3d1, 0x441, 0x3d1, 0x441, 0x169, +0x1eb, 0x169, 0x1eb, 0xfeb0, 0xff43, 0xfeb0, 0xff43, 0xfeb0, 0xff43, 0xfbee, 0xfc91, +0xfbee, 0xfc91, 0xf984, 0xfa37, 0xf984, 0xfa37, 0xf71d, 0xf7dd, 0xf71d, 0xf7dd, 0xf635, +0xf701, 0xf635, 0xf701, 0xf5b7, 0xf68d, 0xf5b7, 0xf68d, 0xf5b7, 0xf68d, 0xf438, 0xf515, +0xf438, 0xf515, 0xf336, 0xf419, 0xf336, 0xf419, 0xf336, 0xf41d, 0xf336, 0xf41d, 0xf2e4, +0xf3cc, 0xf2e4, 0xf3cc, 0xf13d, 0xf225, 0xf13d, 0xf225, 0xf017, 0xf0fe, 0xf017, 0xf0fe, +0xf017, 0xf0fe, 0xefea, 0xf0cf, 0xefea, 0xf0cf, 0xeff2, 0xf0d3, 0xeff2, 0xf0d3, 0xf07a, +0xf156, 0xf07a, 0xf156, 0xf179, 0xf251, 0xf179, 0xf251, 0xf1c0, 0xf294, 0xf1c0, 0xf294, +0xf0f8, 0xf1c7, 0xf0f8, 0xf1c7, 0xf0f8, 0xf1c7, 0xf099, 0xf164, 0xf099, 0xf164, 0xefe7, +0xf0af, 0xefe7, 0xf0af, 0xeea0, 0xef64, 0xeea0, 0xef64, 0xed8b, 0xee4e, 0xed8b, 0xee4e, +0xed34, 0xedf4, 0xed34, 0xedf4, 0xed34, 0xedf4, 0xed6a, 0xee29, 0xed6a, 0xee29, 0xed2a, +0xede7, 0xed2a, 0xede7, 0xed44, 0xedff, 0xed44, 0xedff, 0xed8c, 0xee44, 0xed8c, 0xee44, +0xedf8, 0xeeab, 0xedf8, 0xeeab, 0xee4d, 0xeefb, 0xee4d, 0xeefb, 0xee4d, 0xeefb, 0xee57, +0xeefd, 0xee57, 0xeefd, 0xeeed, 0xef89, 0xeeed, 0xef89, 0xef4c, 0xefdb, 0xef4c, 0xefdb, +0xef97, 0xf017, 0xef97, 0xf017, 0xf008, 0xf075, 0xf008, 0xf075, 0xf008, 0xf075, 0xf177, +0xf1d0, 0xf177, 0xf1d0, 0xf344, 0xf384, 0xf344, 0xf384, 0xf488, 0xf4ae, 0xf488, 0xf4ae, +0xf6b6, 0xf6bf, 0xf6b6, 0xf6bf, 0xf90e, 0xf8f9, 0xf90e, 0xf8f9, 0xfb5e, 0xfb2a, 0xfb5e, +0xfb2a, 0xfb5e, 0xfb2a, 0xfd7b, 0xfd28, 0xfd7b, 0xfd28, 0x1f, 0xffad, 0x1f, 0xffad, +0x34d, 0x2bf, 0x34d, 0x2bf, 0x51b, 0x473, 0x51b, 0x473, 0x633, 0x574, 0x633, +0x574, 0x68d, 0x5bb, 0x68d, 0x5bb, 0x68d, 0x5bb, 0x6fd, 0x61f, 0x6fd, 0x61f, +0x846, 0x760, 0x846, 0x760, 0x976, 0x88f, 0x976, 0x88f, 0x9cf, 0x8ed, 0x9cf, +0x8ed, 0x905, 0x830, 0x905, 0x830, 0x905, 0x830, 0x7cf, 0x70d, 0x7cf, 0x70d, +0x69c, 0x5f4, 0x69c, 0x5f4, 0x61b, 0x592, 0x61b, 0x592, 0x5c3, 0x560, 0x5c3, +0x560, 0x582, 0x549, 0x582, 0x549, 0x58a, 0x57f, 0x58a, 0x57f, 0x58a, 0x57f, +0x529, 0x54f, 0x529, 0x54f, 0x4b5, 0x50d, 0x4b5, 0x50d, 0x423, 0x4ae, 0x423, +0x4ae, 0x40a, 0x4c7, 0x40a, 0x4c7, 0x434, 0x521, 0x434, 0x521, 0x381, 0x49b, +0x381, 0x49b, 0x381, 0x49b, 0x22d, 0x370, 0x22d, 0x370, 0xfe, 0x265, 0xfe, +0x265, 0xffcb, 0x14f, 0xffcb, 0x14f, 0xff2a, 0xc6, 0xff2a, 0xc6, 0xffc7, 0x173, +0xffc7, 0x173, 0xffc7, 0x173, 0xff5e, 0x113, 0xff5e, 0x113, 0xfe34, 0xffec, 0xfe34, +0xffec, 0xfd66, 0xff19, 0xfd66, 0xff19, 0xfc6c, 0xfe14, 0xfc6c, 0xfe14, 0xfb94, 0xfd2b, +0xfb94, 0xfd2b, 0xfa5a, 0xfbda, 0xfa5a, 0xfbda, 0xfa5a, 0xfbda, 0xf927, 0xfa8a, 0xf927, +0xfa8a, 0xf799, 0xf8dd, 0xf799, 0xf8dd, 0xf5dc, 0xf6fc, 0xf5dc, 0xf6fc, 0xf4fd, 0xf5f7, +0xf4fd, 0xf5f7, 0xf444, 0xf517, 0xf444, 0xf517, 0xf40d, 0xf4b7, 0xf40d, 0xf4b7, 0xf40d, +0xf4b7, 0xf4b2, 0xf533, 0xf4b2, 0xf533, 0xf5d0, 0xf628, 0xf5d0, 0xf628, 0xf631, 0xf660, +0xf631, 0xf660, 0xf626, 0xf62e, 0xf626, 0xf62e, 0xf71f, 0xf701, 0xf71f, 0xf701, 0xf71f, +0xf701, 0xf824, 0xf7e1, 0xf824, 0xf7e1, 0xf95f, 0xf8f8, 0xf95f, 0xf8f8, 0xfabc, 0xfa31, +0xfabc, 0xfa31, 0xfb1b, 0xfa70, 0xfb1b, 0xfa70, 0xfaac, 0xf9e0, 0xfaac, 0xf9e0, 0xfa3e, +0xf952, 0xfa3e, 0xf952, 0xfa3e, 0xf952, 0xfb0f, 0xfa04, 0xfb0f, 0xfa04, 0xfce2, 0xfbb9, +0xfce2, 0xfbb9, 0xfe54, 0xfd0c, 0xfe54, 0xfd0c, 0xfed6, 0xfd71, 0xfed6, 0xfd71, 0xff4d, +0xfdca, 0xff4d, 0xfdca, 0x76, 0xfed5, 0x76, 0xfed5, 0x76, 0xfed5, 0x20d, 0x50, +0x20d, 0x50, 0x370, 0x197, 0x370, 0x197, 0x3f1, 0x1fd, 0x3f1, 0x1fd, 0x4a3, +0x296, 0x4a3, 0x296, 0x618, 0x3f4, 0x618, 0x3f4, 0x618, 0x3f4, 0x753, 0x51a, +0x753, 0x51a, 0x8ac, 0x661, 0x8ac, 0x661, 0xa3b, 0x7e2, 0xa3b, 0x7e2, 0xb77, +0x913, 0xb77, 0x913, 0xd0a, 0xa9f, 0xd0a, 0xa9f, 0xe85, 0xc18, 0xe85, 0xc18, +0xe85, 0xc18, 0xf01, 0xc97, 0xf01, 0xc97, 0xfbe, 0xd5c, 0xfbe, 0xd5c, 0x1076, +0xe20, 0x1076, 0xe20, 0xfe6, 0xda2, 0xfe6, 0xda2, 0xeaa, 0xc7e, 0xeaa, 0xc7e, +0xdf6, 0xbe5, 0xdf6, 0xbe5, 0xdf6, 0xbe5, 0xdb3, 0xbc2, 0xdb3, 0xbc2, 0xcd7, +0xb0b, 0xcd7, 0xb0b, 0xc52, 0xaad, 0xc52, 0xaad, 0xc40, 0xac6, 0xc40, 0xac6, +0xb99, 0xa4d, 0xb99, 0xa4d, 0xb99, 0xa4d, 0xab6, 0x999, 0xab6, 0x999, 0xa75, +0x988, 0xa75, 0x988, 0xb0b, 0xa50, 0xb0b, 0xa50, 0xabe, 0xa34, 0xabe, 0xa34, +0x9e0, 0x986, 0x9e0, 0x986, 0x965, 0x93b, 0x965, 0x93b, 0x965, 0x93b, 0x966, +0x96a, 0x966, 0x96a, 0xa6d, 0xa9c, 0xa6d, 0xa9c, 0xaa9, 0xb01, 0xaa9, 0xb01, +0x9cd, 0xa4a, 0x9cd, 0xa4a, 0x93e, 0x9de, 0x93e, 0x9de, 0x8cc, 0x98a, 0x8cc, +0x98a, 0x8cc, 0x98a, 0x81e, 0x8f6, 0x81e, 0x8f6, 0x74a, 0x837, 0x74a, 0x837, +0x66e, 0x76d, 0x66e, 0x76d, 0x5a3, 0x6ae, 0x5a3, 0x6ae, 0x567, 0x67b, 0x567, +0x67b, 0x567, 0x67b, 0x624, 0x73a, 0x624, 0x73a, 0x743, 0x857, 0x743, 0x857, +0x831, 0x93e, 0x831, 0x93e, 0x94e, 0xa50, 0x94e, 0xa50, 0xa39, 0xb2a, 0xa39, +0xb2a, 0xa5c, 0xb3a, 0xa5c, 0xb3a, 0xa5c, 0xb3a, 0xa21, 0xae7, 0xa21, 0xae7, +0x9b1, 0xa5c, 0x9b1, 0xa5c, 0x918, 0x9a6, 0x918, 0x9a6, 0x94f, 0x9bd, 0x94f, +0x9bd, 0xafa, 0xb46, 0xafa, 0xb46, 0xc50, 0xc7b, 0xc50, 0xc7b, 0xc50, 0xc7b, +0xcc0, 0xcc9, 0xcc0, 0xcc9, 0xd5b, 0xd43, 0xd5b, 0xd43, 0xd74, 0xd3d, 0xd74, +0xd3d, 0xd24, 0xccf, 0xd24, 0xccf, 0xcab, 0xc3c, 0xcab, 0xc3c, 0xcab, 0xc3c, +0xbe3, 0xb5e, 0xbe3, 0xb5e, 0xb78, 0xae1, 0xb78, 0xae1, 0xa7b, 0x9d8, 0xa7b, +0x9d8, 0x91a, 0x86f, 0x91a, 0x86f, 0x831, 0x783, 0x831, 0x783, 0x6c2, 0x618, +0x6c2, 0x618, 0x6c2, 0x618, 0x4c5, 0x424, 0x4c5, 0x424, 0x2c0, 0x22d, 0x2c0, +0x22d, 0xc6, 0x46, 0xc6, 0x46, 0xfee3, 0xfe7a, 0xfee3, 0xfe7a, 0xfda1, 0xfd53, +0xfda1, 0xfd53, 0xfc52, 0xfc23, 0xfc52, 0xfc23, 0xfc52, 0xfc23, 0xfa9b, 0xfa8c, 0xfa9b, +0xfa8c, 0xf8dc, 0xf8ef, 0xf8dc, 0xf8ef, 0xf683, 0xf6b8, 0xf683, 0xf6b8, 0xf4cc, 0xf524, +0xf4cc, 0xf524, 0xf374, 0xf3ec, 0xf374, 0xf3ec, 0xf374, 0xf3ec, 0xf1d5, 0xf26c, 0xf1d5, +0xf26c, 0xf083, 0xf136, 0xf083, 0xf136, 0xef04, 0xefd1, 0xef04, 0xefd1, 0xed71, 0xee54, +0xed71, 0xee54, 0xec6b, 0xed61, 0xec6b, 0xed61, 0xec99, 0xed9e, 0xec99, 0xed9e, 0xec99, +0xed9e, 0xec65, 0xed76, 0xec65, 0xed76, 0xeb0a, 0xec24, 0xeb0a, 0xec24, 0xe9f2, 0xeb12, +0xe9f2, 0xeb12, 0xea11, 0xeb34, 0xea11, 0xeb34, 0xeb45, 0xec6a, 0xeb45, 0xec6a, 0xeb45, +0xec6a, 0xec2f, 0xed55, 0xec2f, 0xed55, 0xecb3, 0xedd8, 0xecb3, 0xedd8, 0xec7d, 0xeda3, +0xec7d, 0xeda3, 0xeb54, 0xec7a, 0xeb54, 0xec7a, 0xea25, 0xeb4d, 0xea25, 0xeb4d, 0xe962, +0xea8c, 0xe962, 0xea8c, 0xe962, 0xea8c, 0xe8f8, 0xea26, 0xe8f8, 0xea26, 0xe8da, 0xea0e, +0xe8da, 0xea0e, 0xe94d, 0xea87, 0xe94d, 0xea87, 0xea1d, 0xeb5d, 0xea1d, 0xeb5d, 0xeb0f, +0xec57, 0xeb0f, 0xec57, 0xebdd, 0xed2c, 0xebdd, 0xed2c, 0xebdd, 0xed2c, 0xecdd, 0xee32, +0xecdd, 0xee32, 0xed84, 0xeede, 0xed84, 0xeede, 0xed69, 0xeec5, 0xed69, 0xeec5, 0xee86, +0xefe2, 0xee86, 0xefe2, 0xf03b, 0xf192, 0xf03b, 0xf192, 0xf03b, 0xf192, 0xf1af, 0xf2fc, +0xf1af, 0xf2fc, 0xf31c, 0xf45b, 0xf31c, 0xf45b, 0xf3ff, 0xf52a, 0xf3ff, 0xf52a, 0xf4e7, +0xf5f7, 0xf4e7, 0xf5f7, 0xf55e, 0xf64f, 0xf55e, 0xf64f, 0xf668, 0xf734, 0xf668, 0xf734, +0xf668, 0xf734, 0xf8c6, 0xf969, 0xf8c6, 0xf969, 0xfbce, 0xfc43, 0xfbce, 0xfc43, 0xfed5, +0xff19, 0xfed5, 0xff19, 0xef, 0xff, 0xef, 0xff, 0x3dd, 0x3b8, 0x3dd, 0x3b8, +0x6ae, 0x655, 0x6ae, 0x655, 0x6ae, 0x655, 0x823, 0x797, 0x823, 0x797, 0x99b, +0x8df, 0x99b, 0x8df, 0xb55, 0xa6d, 0xb55, 0xa6d, 0xd3b, 0xc2d, 0xd3b, 0xc2d, +0xefb, 0xdcd, 0xefb, 0xdcd, 0xefb, 0xdcd, 0x1114, 0xfce, 0x1114, 0xfce, 0x128b, +0x1136, 0x128b, 0x1136, 0x130d, 0x11b0, 0x130d, 0x11b0, 0x1362, 0x1206, 0x1362, 0x1206, +0x139f, 0x124d, 0x139f, 0x124d, 0x134a, 0x120a, 0x134a, 0x120a, 0x134a, 0x120a, 0x1196, +0x1071, 0x1196, 0x1071, 0xfc8, 0xec4, 0xfc8, 0xec4, 0xe0d, 0xd31, 0xe0d, 0xd31, +0xcd3, 0xc23, 0xcd3, 0xc23, 0xbf6, 0xb77, 0xbf6, 0xb77, 0xad2, 0xa86, 0xad2, +0xa86, 0xad2, 0xa86, 0xa3d, 0xa26, 0xa3d, 0xa26, 0x9d1, 0x9ee, 0x9d1, 0x9ee, +0x9bd, 0xa0e, 0x9bd, 0xa0e, 0x999, 0xa1c, 0x999, 0xa1c, 0x890, 0x940, 0x890, +0x940, 0x890, 0x940, 0x6aa, 0x784, 0x6aa, 0x784, 0x4f1, 0x5f0, 0x4f1, 0x5f0, +0x3e5, 0x504, 0x3e5, 0x504, 0x30d, 0x447, 0x30d, 0x447, 0x2b1, 0x400, 0x2b1, +0x400, 0x242, 0x3a1, 0x242, 0x3a1, 0x242, 0x3a1, 0x21f, 0x389, 0x21f, 0x389, +0x1c9, 0x33a, 0x1c9, 0x33a, 0x7c, 0x1ef, 0x7c, 0x1ef, 0xff69, 0xda, 0xff69, +0xda, 0xfe3c, 0xffa9, 0xfe3c, 0xffa9, 0xfc76, 0xfddb, 0xfc76, 0xfddb, 0xfc76, 0xfddb, +0xfaa3, 0xfbfe, 0xfaa3, 0xfbfe, 0xf95f, 0xfaae, 0xf95f, 0xfaae, 0xf858, 0xf99b, 0xf858, +0xf99b, 0xf7ca, 0xf8ff, 0xf7ca, 0xf8ff, 0xf7f6, 0xf91b, 0xf7f6, 0xf91b, 0xf7f6, 0xf91b, +0xf7c9, 0xf8de, 0xf7c9, 0xf8de, 0xf779, 0xf87c, 0xf779, 0xf87c, 0xf6d5, 0xf7c5, 0xf6d5, +0xf7c5, 0xf651, 0xf72d, 0xf651, 0xf72d, 0xf6e1, 0xf7a6, 0xf6e1, 0xf7a6, 0xf762, 0xf810, +0xf762, 0xf810, 0xf762, 0xf810, 0xf766, 0xf7f9, 0xf766, 0xf7f9, 0xf749, 0xf7bf, 0xf749, +0xf7bf, 0xf7a7, 0xf7fe, 0xf7a7, 0xf7fe, 0xf8de, 0xf913, 0xf8de, 0xf913, 0xfaa0, 0xfab0, +0xfaa0, 0xfab0, 0xfba0, 0xfb88, 0xfba0, 0xfb88, 0xfba0, 0xfb88, 0xfb9b, 0xfb59, 0xfb9b, +0xfb59, 0xfc61, 0xfbf3, 0xfc61, 0xfbf3, 0xfdb5, 0xfd19, 0xfdb5, 0xfd19, 0xfeaa, 0xfde0, +0xfeaa, 0xfde0, 0xff5b, 0xfe62, 0xff5b, 0xfe62, 0xff5b, 0xfe62, 0x59, 0xff30, 0x59, +0xff30, 0x1a3, 0x4c, 0x1a3, 0x4c, 0x2a7, 0x122, 0x2a7, 0x122, 0x35e, 0x1ae, +0x35e, 0x1ae, 0x3de, 0x205, 0x3de, 0x205, 0x4a4, 0x2a7, 0x4a4, 0x2a7, 0x4a4, +0x2a7, 0x552, 0x333, 0x552, 0x333, 0x642, 0x406, 0x642, 0x406, 0x712, 0x4bc, +0x712, 0x4bc, 0x721, 0x4b7, 0x721, 0x4b7, 0x797, 0x51d, 0x797, 0x51d, 0x82b, +0x5a6, 0x82b, 0x5a6, 0x82b, 0x5a6, 0x8ee, 0x662, 0x8ee, 0x662, 0x999, 0x70c, +0x999, 0x70c, 0xa32, 0x7a6, 0xa32, 0x7a6, 0xa80, 0x7fa, 0xa80, 0x7fa, 0x9aa, +0x72f, 0x9aa, 0x72f, 0x9aa, 0x72f, 0x8dd, 0x66f, 0x8dd, 0x66f, 0x86f, 0x613, +0x86f, 0x613, 0x820, 0x5d8, 0x820, 0x5d8, 0x752, 0x520, 0x752, 0x520, 0x67f, +0x467, 0x67f, 0x467, 0x67d, 0x482, 0x67d, 0x482, 0x67d, 0x482, 0x63b, 0x45e, +0x63b, 0x45e, 0x5b8, 0x3fc, 0x5b8, 0x3fc, 0x5fa, 0x462, 0x5fa, 0x462, 0x691, +0x51f, 0x691, 0x51f, 0x5b9, 0x46f, 0x5b9, 0x46f, 0x469, 0x349, 0x469, 0x349, +0x469, 0x349, 0x3cd, 0x2d9, 0x3cd, 0x2d9, 0x359, 0x293, 0x359, 0x293, 0x2cd, +0x236, 0x2cd, 0x236, 0x23e, 0x1d6, 0x23e, 0x1d6, 0x212, 0x1d9, 0x212, 0x1d9, +0x212, 0x1d9, 0x154, 0x14b, 0x154, 0x14b, 0x7c, 0xa1, 0x7c, 0xa1, 0x78, +0xc9, 0x78, 0xc9, 0x168, 0x1e3, 0x168, 0x1e3, 0x2b6, 0x358, 0x2b6, 0x358, +0x371, 0x436, 0x371, 0x436, 0x371, 0x436, 0x4a7, 0x589, 0x4a7, 0x589, 0x645, +0x73f, 0x645, 0x73f, 0x771, 0x87e, 0x771, 0x87e, 0x7cb, 0x8e4, 0x7cb, 0x8e4, +0x7fe, 0x91b, 0x7fe, 0x91b, 0x863, 0x97f, 0x863, 0x97f, 0x863, 0x97f, 0x8d0, +0x9e4, 0x8d0, 0x9e4, 0x9b5, 0xabb, 0x9b5, 0xabb, 0xa13, 0xb06, 0xa13, 0xb06, +0xa17, 0xaf3, 0xa17, 0xaf3, 0xa7a, 0xb3a, 0xa7a, 0xb3a, 0xa7a, 0xb3a, 0xbaa, +0xc4b, 0xbaa, 0xc4b, 0xca3, 0xd23, 0xca3, 0xd23, 0xbf3, 0xc54, 0xbf3, 0xc54, +0xb60, 0xba1, 0xb60, 0xba1, 0xb2a, 0xb4c, 0xb2a, 0xb4c, 0xa8d, 0xa95, 0xa8d, +0xa95, 0xa8d, 0xa95, 0xa34, 0xa25, 0xa34, 0xa25, 0xa14, 0x9f4, 0xa14, 0x9f4, +0x997, 0x96a, 0x997, 0x96a, 0x876, 0x842, 0x876, 0x842, 0x766, 0x731, 0x766, +0x731, 0x766, 0x731, 0x6e9, 0x6b8, 0x6e9, 0x6b8, 0x64f, 0x628, 0x64f, 0x628, +0x4f6, 0x4df, 0x4f6, 0x4df, 0x36a, 0x367, 0x36a, 0x367, 0x237, 0x24b, 0x237, +0x24b, 0x76, 0xa3, 0x76, 0xa3, 0x76, 0xa3, 0xfdfc, 0xfe43, 0xfdfc, 0xfe43, +0xfbee, 0xfc50, 0xfbee, 0xfc50, 0xfa75, 0xfaf0, 0xfa75, 0xfaf0, 0xf919, 0xf9ac, 0xf919, +0xf9ac, 0xf759, 0xf800, 0xf759, 0xf800, 0xf52e, 0xf5e7, 0xf52e, 0xf5e7, 0xf52e, 0xf5e7, +0xf325, 0xf3ea, 0xf325, 0xf3ea, 0xf1c0, 0xf28f, 0xf1c0, 0xf28f, 0xf148, 0xf21b, 0xf148, +0xf21b, 0xf0ea, 0xf1bd, 0xf0ea, 0xf1bd, 0xefc6, 0xf096, 0xefc6, 0xf096, 0xefc6, 0xf096, +0xeebd, 0xef85, 0xeebd, 0xef85, 0xeeba, 0xef79, 0xeeba, 0xef79, 0xef40, 0xeff3, 0xef40, +0xeff3, 0xeff9, 0xf0a0, 0xeff9, 0xf0a0, 0xf0e2, 0xf17d, 0xf0e2, 0xf17d, 0xf1f3, 0xf283, +0xf1f3, 0xf283, 0xf1f3, 0xf283, 0xf255, 0xf2dd, 0xf255, 0xf2dd, 0xf1a7, 0xf229, 0xf1a7, +0xf229, 0xf0ba, 0xf13a, 0xf0ba, 0xf13a, 0xefe8, 0xf06a, 0xefe8, 0xf06a, 0xef81, 0xf009, +0xef81, 0xf009, 0xef63, 0xeff6, 0xef63, 0xeff6, 0xef63, 0xeff6, 0xef58, 0xeff9, 0xef58, +0xeff9, 0xeec8, 0xef7b, 0xeec8, 0xef7b, 0xee10, 0xeed8, 0xee10, 0xeed8, 0xee66, 0xef44, +0xee66, 0xef44, 0xef08, 0xeffd, 0xef08, 0xeffd, 0xef08, 0xeffd, 0xef35, 0xf040, 0xef35, +0xf040, 0xef04, 0xf024, 0xef04, 0xf024, 0xef45, 0xf078, 0xef45, 0xf078, 0xf02e, 0xf16e, +0xf02e, 0xf16e, 0xf11a, 0xf263, 0xf11a, 0xf263, 0xf1e4, 0xf32f, 0xf1e4, 0xf32f, 0xf1e4, +0xf32f, 0xf252, 0xf399, 0xf252, 0xf399, 0xf281, 0xf3bd, 0xf281, 0xf3bd, 0xf32a, 0xf452, +0xf32a, 0xf452, 0xf518, 0xf626, 0xf518, 0xf626, 0xf7b4, 0xf8a0, 0xf7b4, 0xf8a0, 0xfa43, +0xfb08, 0xfa43, 0xfb08, 0xfa43, 0xfb08, 0xfd53, 0xfdeb, 0xfd53, 0xfdeb, 0x2d, 0x92, +0x2d, 0x92, 0x236, 0x267, 0x236, 0x267, 0x3d9, 0x3d4, 0x3d9, 0x3d4, 0x559, +0x51d, 0x559, 0x51d, 0x559, 0x51d, 0x77a, 0x709, 0x77a, 0x709, 0x945, 0x8a3, +0x945, 0x8a3, 0xa38, 0x968, 0xa38, 0x968, 0xb61, 0xa6a, 0xb61, 0xa6a, 0xc65, +0xb4c, 0xc65, 0xb4c, 0xc77, 0xb44, 0xc77, 0xb44, 0xc77, 0xb44, 0xc17, 0xad3, +0xc17, 0xad3, 0xc4f, 0xb03, 0xc4f, 0xb03, 0xc42, 0xaf5, 0xc42, 0xaf5, 0xbff, +0xabb, 0xbff, 0xabb, 0xbc2, 0xa8e, 0xbc2, 0xa8e, 0xb4a, 0xa2d, 0xb4a, 0xa2d, +0xb4a, 0xa2d, 0xa8c, 0x98e, 0xa8c, 0x98e, 0x950, 0x875, 0x950, 0x875, 0x8c6, +0x813, 0x8c6, 0x813, 0x813, 0x78c, 0x813, 0x78c, 0x77f, 0x726, 0x77f, 0x726, +0x77f, 0x726, 0x74e, 0x723, 0x74e, 0x723, 0x680, 0x683, 0x680, 0x683, 0x54b, +0x57b, 0x54b, 0x57b, 0x42b, 0x486, 0x42b, 0x486, 0x40a, 0x48e, 0x40a, 0x48e, +0x341, 0x3eb, 0x341, 0x3eb, 0x341, 0x3eb, 0x20e, 0x2da, 0x20e, 0x2da, 0x112, +0x1fd, 0x112, 0x1fd, 0x7c, 0x181, 0x7c, 0x181, 0x54, 0x171, 0x54, 0x171, +0xfea5, 0xffd6, 0xfea5, 0xffd6, 0xfcc1, 0xfe03, 0xfcc1, 0xfe03, 0xfcc1, 0xfe03, 0xfaf8, +0xfc49, 0xfaf8, 0xfc49, 0xf911, 0xfa6e, 0xf911, 0xfa6e, 0xf782, 0xf8e8, 0xf782, 0xf8e8, +0xf64a, 0xf7b8, 0xf64a, 0xf7b8, 0xf61e, 0xf792, 0xf61e, 0xf792, 0xf61e, 0xf792, 0xf5d0, +0xf749, 0xf5d0, 0xf749, 0xf551, 0xf6ce, 0xf551, 0xf6ce, 0xf594, 0xf713, 0xf594, 0xf713, +0xf5ef, 0xf76e, 0xf5ef, 0xf76e, 0xf556, 0xf6d4, 0xf556, 0xf6d4, 0xf4e4, 0xf660, 0xf4e4, +0xf660, 0xf4e4, 0xf660, 0xf5c8, 0xf73e, 0xf5c8, 0xf73e, 0xf65b, 0xf7c9, 0xf65b, 0xf7c9, +0xf681, 0xf7e4, 0xf681, 0xf7e4, 0xf712, 0xf866, 0xf712, 0xf866, 0xf708, 0xf84b, 0xf708, +0xf84b, 0xf75f, 0xf88c, 0xf75f, 0xf88c, 0xf75f, 0xf88c, 0xf8e5, 0xf9f9, 0xf8e5, 0xf9f9, +0xfa22, 0xfb18, 0xfa22, 0xfb18, 0xfae5, 0xfbba, 0xfae5, 0xfbba, 0xfb45, 0xfbf7, 0xfb45, +0xfbf7, 0xfbf9, 0xfc83, 0xfbf9, 0xfc83, 0xfbf9, 0xfc83, 0xfd22, 0xfd82, 0xfd22, 0xfd82, +0xfe22, 0xfe55, 0xfe22, 0xfe55, 0xff3c, 0xff40, 0xff3c, 0xff40, 0x25, 0xfffa, 0x25, +0xfffa, 0x10f, 0xb3, 0x10f, 0xb3, 0x1d3, 0x147, 0x1d3, 0x147, 0x1d3, 0x147, +0x330, 0x274, 0x330, 0x274, 0x54e, 0x462, 0x54e, 0x462, 0x730, 0x617, 0x730, +0x617, 0x988, 0x842, 0x988, 0x842, 0xb6b, 0x9fb, 0xb6b, 0x9fb, 0xcd0, 0xb39, +0xcd0, 0xb39, 0xcd0, 0xb39, 0xdfe, 0xc42, 0xdfe, 0xc42, 0xe4b, 0xc6d, 0xe4b, +0xc6d, 0xf21, 0xd25, 0xf21, 0xd25, 0xf95, 0xd7c, 0xf95, 0xd7c, 0xee9, 0xcb6, +0xee9, 0xcb6, 0xee9, 0xcb6, 0xe47, 0xbfe, 0xe47, 0xbfe, 0xe11, 0xbb4, 0xe11, +0xbb4, 0xe67, 0xbf9, 0xe67, 0xbf9, 0xe28, 0xbac, 0xe28, 0xbac, 0xdb9, 0xb33, +0xdb9, 0xb33, 0xd0c, 0xa7d, 0xd0c, 0xa7d, 0xd0c, 0xa7d, 0xc42, 0x9af, 0xc42, +0x9af, 0xc60, 0x9cc, 0xc60, 0x9cc, 0xc30, 0x99f, 0xc30, 0x99f, 0xc02, 0x978, +0xc02, 0x978, 0xbd4, 0x955, 0xbd4, 0x955, 0xc4f, 0x9e0, 0xc4f, 0x9e0, 0xc4f, +0x9e0, 0xd1f, 0xac4, 0xd1f, 0xac4, 0xc9d, 0xa5b, 0xc9d, 0xa5b, 0xc5f, 0xa3b, +0xc5f, 0xa3b, 0xc8e, 0xa8d, 0xc8e, 0xa8d, 0xd10, 0xb36, 0xd10, 0xb36, 0xd10, +0xb36, 0xd14, 0xb66, 0xd14, 0xb66, 0xc55, 0xad6, 0xc55, 0xad6, 0xbad, 0xa5f, +0xbad, 0xa5f, 0xa43, 0x929, 0xa43, 0x929, 0x8d0, 0x7ec, 0x8d0, 0x7ec, 0x810, +0x761, 0x810, 0x761, 0x810, 0x761, 0x830, 0x7b6, 0x830, 0x7b6, 0x85d, 0x817, +0x85d, 0x817, 0x88a, 0x874, 0x88a, 0x874, 0x920, 0x936, 0x920, 0x936, 0x956, +0x994, 0x956, 0x994, 0x956, 0x994, 0x976, 0x9d6, 0x976, 0x9d6, 0x932, 0x9af, +0x932, 0x9af, 0x92c, 0x9bf, 0x92c, 0x9bf, 0x99b, 0xa3d, 0x99b, 0xa3d, 0x970, +0xa1c, 0x970, 0xa1c, 0x928, 0x9d6, 0x928, 0x9d6, 0x928, 0x9d6, 0x935, 0x9e0, +0x935, 0x9e0, 0x935, 0x9d8, 0x935, 0x9d8, 0x96b, 0xa02, 0x96b, 0xa02, 0xa53, +0xadc, 0xa53, 0xadc, 0xab8, 0xb30, 0xab8, 0xb30, 0xa54, 0xabc, 0xa54, 0xabc, +0xa54, 0xabc, 0x9fc, 0xa53, 0x9fc, 0xa53, 0x98a, 0x9d2, 0x98a, 0x9d2, 0x888, +0x8c4, 0x888, 0x8c4, 0x6de, 0x712, 0x6de, 0x712, 0x5cc, 0x5fd, 0x5cc, 0x5fd, +0x5cc, 0x5fd, 0x500, 0x533, 0x500, 0x533, 0x333, 0x36e, 0x333, 0x36e, 0x154, +0x19c, 0x154, 0x19c, 0xffc8, 0x24, 0xffc8, 0x24, 0xfdd4, 0xfe48, 0xfdd4, 0xfe48, +0xfb9c, 0xfc2c, 0xfb9c, 0xfc2c, 0xfb9c, 0xfc2c, 0xfa23, 0xfad3, 0xfa23, 0xfad3, 0xf8b4, +0xf986, 0xf8b4, 0xf986, 0xf6dd, 0xf7d2, 0xf6dd, 0xf7d2, 0xf581, 0xf69a, 0xf581, 0xf69a, +0xf44c, 0xf588, 0xf44c, 0xf588, 0xf3a1, 0xf4fd, 0xf3a1, 0xf4fd, 0xf3a1, 0xf4fd, 0xf2c7, +0xf440, 0xf2c7, 0xf440, 0xf0f1, 0xf282, 0xf0f1, 0xf282, 0xeecd, 0xf071, 0xeecd, 0xf071, +0xecf9, 0xeeab, 0xecf9, 0xeeab, 0xebaf, 0xed68, 0xebaf, 0xed68, 0xebaf, 0xed68, 0xea95, +0xec4f, 0xea95, 0xec4f, 0xe9ea, 0xeb9f, 0xe9ea, 0xeb9f, 0xe91d, 0xeac7, 0xe91d, 0xeac7, +0xe889, 0xea23, 0xe889, 0xea23, 0xe83c, 0xe9c2, 0xe83c, 0xe9c2, 0xe864, 0xe9d2, 0xe864, +0xe9d2, 0xe864, 0xe9d2, 0xe8f5, 0xea49, 0xe8f5, 0xea49, 0xe976, 0xeaaf, 0xe976, 0xeaaf, +0xea8c, 0xeba9, 0xea8c, 0xeba9, 0xea6e, 0xeb6f, 0xea6e, 0xeb6f, 0xe9d8, 0xeac0, 0xe9d8, +0xeac0, 0xe9bb, 0xea8c, 0xe9bb, 0xea8c, 0xe9bb, 0xea8c, 0xe9bb, 0xea78, 0xe9bb, 0xea78, +0xe965, 0xea11, 0xe965, 0xea11, 0xe941, 0xe9e1, 0xe941, 0xe9e1, 0xea9b, 0xeb31, 0xea9b, +0xeb31, 0xeb02, 0xeb91, 0xeb02, 0xeb91, 0xeb02, 0xeb91, 0xeb5d, 0xebe8, 0xeb5d, 0xebe8, +0xec7b, 0xed04, 0xec7b, 0xed04, 0xede2, 0xee6a, 0xede2, 0xee6a, 0xef3e, 0xefc5, 0xef3e, +0xefc5, 0xefe4, 0xf06a, 0xefe4, 0xf06a, 0xf0fd, 0xf180, 0xf0fd, 0xf180, 0xf0fd, 0xf180, +0xf1e8, 0xf266, 0xf1e8, 0xf266, 0xf33b, 0xf3b0, 0xf33b, 0xf3b0, 0xf465, 0xf4cd, 0xf465, +0xf4cd, 0xf4ee, 0xf545, 0xf4ee, 0xf545, 0xf5a0, 0xf5e0, 0xf5a0, 0xf5e0, 0xf659, 0xf67e, +0xf659, 0xf67e, 0xf659, 0xf67e, 0xf7b9, 0xf7c0, 0xf7b9, 0xf7c0, 0xf965, 0xf948, 0xf965, +0xf948, 0xfb51, 0xfb0e, 0xfb51, 0xfb0e, 0xfdbe, 0xfd51, 0xfdbe, 0xfd51, 0x7e, 0xffe7, +0x7e, 0xffe7, 0x7e, 0xffe7, 0x33f, 0x27e, 0x33f, 0x27e, 0x596, 0x4ac, 0x596, +0x4ac, 0x7db, 0x6c9, 0x7db, 0x6c9, 0xa54, 0x91f, 0xa54, 0x91f, 0xc5f, 0xb0c, +0xc5f, 0xb0c, 0xe33, 0xcc7, 0xe33, 0xcc7, 0xe33, 0xcc7, 0xfbe, 0xe3f, 0xfbe, +0xe3f, 0x1115, 0xf8d, 0x1115, 0xf8d, 0x126f, 0x10e4, 0x126f, 0x10e4, 0x1379, 0x11f4, +0x1379, 0x11f4, 0x14a7, 0x1330, 0x14a7, 0x1330, 0x14b7, 0x1356, 0x14b7, 0x1356, 0x14b7, +0x1356, 0x13f8, 0x12b5, 0x13f8, 0x12b5, 0x1332, 0x1215, 0x1332, 0x1215, 0x120e, 0x111c, +0x120e, 0x111c, 0x107b, 0xfb9, 0x107b, 0xfb9, 0xe3c, 0xdaf, 0xe3c, 0xdaf, 0xe3c, +0xdaf, 0xc7b, 0xc26, 0xc7b, 0xc26, 0xb4b, 0xb2f, 0xb4b, 0xb2f, 0xa47, 0xa65, +0xa47, 0xa65, 0x9a9, 0xa00, 0x9a9, 0xa00, 0x94b, 0x9da, 0x94b, 0x9da, 0x8d0, +0x995, 0x8d0, 0x995, 0x8d0, 0x995, 0x7fc, 0x8f3, 0x7fc, 0x8f3, 0x6de, 0x804, +0x6de, 0x804, 0x5e4, 0x733, 0x5e4, 0x733, 0x4d2, 0x647, 0x4d2, 0x647, 0x424, +0x5b9, 0x424, 0x5b9, 0x447, 0x5f9, 0x447, 0x5f9, 0x447, 0x5f9, 0x3e3, 0x5ab, +0x3e3, 0x5ab, 0x2e9, 0x4c3, 0x2e9, 0x4c3, 0x1d0, 0x3b9, 0x1d0, 0x3b9, 0x136, +0x329, 0x136, 0x329, 0x19, 0x211, 0x19, 0x211, 0x19, 0x211, 0xfe61, 0x5b, +0xfe61, 0x5b, 0xfc70, 0xfe68, 0xfc70, 0xfe68, 0xfa10, 0xfc03, 0xfa10, 0xfc03, 0xf8dd, +0xfac7, 0xf8dd, 0xfac7, 0xf852, 0xfa31, 0xf852, 0xfa31, 0xf84d, 0xfa1d, 0xf84d, 0xfa1d, +0xf84d, 0xfa1d, 0xf7a7, 0xf964, 0xf7a7, 0xf964, 0xf5e8, 0xf790, 0xf5e8, 0xf790, 0xf4cf, +0xf65e, 0xf4cf, 0xf65e, 0xf4a8, 0xf61b, 0xf4a8, 0xf61b, 0xf558, 0xf6aa, 0xf558, 0xf6aa, +0xf58b, 0xf6ba, 0xf58b, 0xf6ba, 0xf58b, 0xf6ba, 0xf56f, 0xf677, 0xf56f, 0xf677, 0xf5f2, +0xf6cf, 0xf5f2, 0xf6cf, 0xf6d1, 0xf780, 0xf6d1, 0xf780, 0xf7dc, 0xf85b, 0xf7dc, 0xf85b, +0xf8c9, 0xf914, 0xf8c9, 0xf914, 0xf8c9, 0xf914, 0xf96f, 0xf984, 0xf96f, 0xf984, 0xfa22, +0xfa00, 0xfa22, 0xfa00, 0xfb41, 0xfae6, 0xfb41, 0xfae6, 0xfc49, 0xfbb5, 0xfc49, 0xfbb5, +0xfc96, 0xfbc9, 0xfc96, 0xfbc9, 0xfd92, 0xfc8e, 0xfd92, 0xfc8e, 0xfd92, 0xfc8e, 0xffa4, +0xfe69, 0xffa4, 0xfe69, 0xf3, 0xff84, 0xf3, 0xff84, 0x146, 0xffa6, 0x146, 0xffa6, +0x177, 0xffa8, 0x177, 0xffa8, 0x273, 0x79, 0x273, 0x79, 0x384, 0x164, 0x384, +0x164, 0x384, 0x164, 0x461, 0x21f, 0x461, 0x21f, 0x53b, 0x2dc, 0x53b, 0x2dc, +0x5e1, 0x368, 0x5e1, 0x368, 0x661, 0x3d4, 0x661, 0x3d4, 0x6d4, 0x437, 0x6d4, +0x437, 0x6d4, 0x437, 0x809, 0x55f, 0x809, 0x55f, 0x989, 0x6d7, 0x989, 0x6d7, +0xaff, 0x849, 0xaff, 0x849, 0xb82, 0x8ca, 0xb82, 0x8ca, 0xbd8, 0x922, 0xbd8, +0x922, 0xc37, 0x987, 0xc37, 0x987, 0xc37, 0x987, 0xbbf, 0x918, 0xbbf, 0x918, +0xb3d, 0x8a0, 0xb3d, 0x8a0, 0xa6d, 0x7de, 0xa6d, 0x7de, 0x9d7, 0x759, 0x9d7, +0x759, 0x8e4, 0x67a, 0x8e4, 0x67a, 0x8e4, 0x67a, 0x85d, 0x609, 0x85d, 0x609, +0x847, 0x60c, 0x847, 0x60c, 0x801, 0x5e2, 0x801, 0x5e2, 0x865, 0x666, 0x865, +0x666, 0x875, 0x698, 0x875, 0x698, 0x816, 0x65f, 0x816, 0x65f, 0x816, 0x65f, +0x73a, 0x5ab, 0x73a, 0x5ab, 0x6a0, 0x53c, 0x6a0, 0x53c, 0x613, 0x4dd, 0x613, +0x4dd, 0x57e, 0x476, 0x57e, 0x476, 0x564, 0x48d, 0x564, 0x48d, 0x4cf, 0x428, +0x4cf, 0x428, 0x4cf, 0x428, 0x41c, 0x3a6, 0x41c, 0x3a6, 0x3b0, 0x369, 0x3b0, +0x369, 0x3a9, 0x390, 0x3a9, 0x390, 0x3b6, 0x3c8, 0x3b6, 0x3c8, 0x37b, 0x3b3, +0x37b, 0x3b3, 0x37b, 0x3b3, 0x3d4, 0x42f, 0x3d4, 0x42f, 0x55d, 0x5d5, 0x55d, +0x5d5, 0x6ea, 0x779, 0x6ea, 0x779, 0x786, 0x827, 0x786, 0x827, 0x7a8, 0x855, +0x7a8, 0x855, 0x802, 0x8b4, 0x802, 0x8b4, 0x802, 0x8b4, 0x86b, 0x91c, 0x86b, +0x91c, 0x895, 0x93e, 0x895, 0x93e, 0x8e3, 0x980, 0x8e3, 0x980, 0x8f3, 0x980, +0x8f3, 0x980, 0x8ca, 0x942, 0x8ca, 0x942, 0x8ad, 0x90e, 0x8ad, 0x90e, 0x8ad, +0x90e, 0x8fb, 0x945, 0x8fb, 0x945, 0x9d9, 0xa0b, 0x9d9, 0xa0b, 0xa5f, 0xa79, +0xa5f, 0xa79, 0xa64, 0xa6a, 0xa64, 0xa6a, 0xa35, 0xa29, 0xa35, 0xa29, 0xa35, +0xa29, 0xa0d, 0x9f4, 0xa0d, 0x9f4, 0x9d5, 0x9b3, 0x9d5, 0x9b3, 0x90d, 0x8e8, +0x90d, 0x8e8, 0x825, 0x803, 0x825, 0x803, 0x719, 0x6ff, 0x719, 0x6ff, 0x5f9, +0x5ee, 0x5f9, 0x5ee, 0x5f9, 0x5ee, 0x55b, 0x564, 0x55b, 0x564, 0x475, 0x496, +0x475, 0x496, 0x3d5, 0x413, 0x3d5, 0x413, 0x342, 0x3a1, 0x342, 0x3a1, 0x20a, +0x28a, 0x20a, 0x28a, 0x6f, 0x112, 0x6f, 0x112, 0x6f, 0x112, 0xfdf9, 0xfec0, +0xfdf9, 0xfec0, 0xfc6f, 0xfd59, 0xfc6f, 0xfd59, 0xfbb7, 0xfcc0, 0xfbb7, 0xfcc0, 0xf9ca, +0xfaf0, 0xf9ca, 0xfaf0, 0xf6df, 0xf81f, 0xf6df, 0xf81f, 0xf6df, 0xf81f, 0xf445, 0xf59b, +0xf445, 0xf59b, 0xf282, 0xf3e8, 0xf282, 0xf3e8, 0xf11a, 0xf28d, 0xf11a, 0xf28d, 0xf030, +0xf1ab, 0xf030, 0xf1ab, 0xef33, 0xf0b1, 0xef33, 0xf0b1, 0xee38, 0xefb7, 0xee38, 0xefb7, +0xee38, 0xefb7, 0xedec, 0xef68, 0xedec, 0xef68, 0xedad, 0xef23, 0xedad, 0xef23, 0xed3c, +0xeeaa, 0xed3c, 0xeeaa, 0xecd7, 0xee3e, 0xecd7, 0xee3e, 0xed1e, 0xee7d, 0xed1e, 0xee7d, +0xee7c, 0xefd5, 0xee7c, 0xefd5, 0xee7c, 0xefd5, 0xefe9, 0xf13c, 0xefe9, 0xf13c, 0xf0cd, +0xf21d, 0xf0cd, 0xf21d, 0xf102, 0xf251, 0xf102, 0xf251, 0xf092, 0xf1e2, 0xf092, 0xf1e2, +0xefd4, 0xf128, 0xefd4, 0xf128, 0xefd4, 0xf128, 0xee50, 0xefaa, 0xee50, 0xefaa, 0xed74, +0xeed4, 0xed74, 0xeed4, 0xedb0, 0xef19, 0xedb0, 0xef19, 0xedd9, 0xef4a, 0xedd9, 0xef4a, +0xee4c, 0xefc4, 0xee4c, 0xefc4, 0xef2b, 0xf0aa, 0xef2b, 0xf0aa, 0xef2b, 0xf0aa, 0xf002, +0xf183, 0xf002, 0xf183, 0xeffa, 0xf17a, 0xeffa, 0xf17a, 0xefcf, 0xf14a, 0xefcf, 0xf14a, +0xf02f, 0xf19f, 0xf02f, 0xf19f, 0xf0b2, 0xf211, 0xf0b2, 0xf211, 0xf1bf, 0xf307, 0xf1bf, +0xf307, 0xf1bf, 0xf307, 0xf30a, 0xf435, 0xf30a, 0xf435, 0xf416, 0xf51e, 0xf416, 0xf51e, +0xf505, 0xf5e3, 0xf505, 0xf5e3, 0xf60f, 0xf6be, 0xf60f, 0xf6be, 0xf7af, 0xf82b, 0xf7af, +0xf82b, 0xf7af, 0xf82b, 0xf9c8, 0xfa0d, 0xf9c8, 0xfa0d, 0xfc2f, 0xfc3b, 0xfc2f, 0xfc3b, +0xff11, 0xfee2, 0xff11, 0xfee2, 0x173, 0x10c, 0x173, 0x10c, 0x37d, 0x2de, 0x37d, +0x2de, 0x57c, 0x4a9, 0x57c, 0x4a9, 0x57c, 0x4a9, 0x75a, 0x658, 0x75a, 0x658, +0x957, 0x82c, 0x957, 0x82c, 0xaca, 0x97d, 0xaca, 0x97d, 0xbde, 0xa77, 0xbde, +0xa77, 0xca7, 0xb30, 0xca7, 0xb30, 0xd71, 0xbf1, 0xd71, 0xbf1, 0xd71, 0xbf1, +0xe2f, 0xcb1, 0xe2f, 0xcb1, 0xed1, 0xd5d, 0xed1, 0xd5d, 0xf37, 0xdd6, 0xf37, +0xdd6, 0xeda, 0xd95, 0xeda, 0xd95, 0xf19, 0xdf6, 0xf19, 0xdf6, 0xf19, 0xdf6, +0xf9f, 0xea6, 0xf9f, 0xea6, 0xec2, 0xdf8, 0xec2, 0xdf8, 0xcc0, 0xc28, 0xcc0, +0xc28, 0xaec, 0xa8b, 0xaec, 0xa8b, 0x99a, 0x971, 0x99a, 0x971, 0x87e, 0x88c, +0x87e, 0x88c, 0x87e, 0x88c, 0x7b8, 0x7fe, 0x7b8, 0x7fe, 0x72d, 0x7a9, 0x72d, +0x7a9, 0x68e, 0x73f, 0x68e, 0x73f, 0x5aa, 0x68c, 0x5aa, 0x68c, 0x535, 0x645, +0x535, 0x645, 0x4eb, 0x623, 0x4eb, 0x623, 0x4eb, 0x623, 0x3e0, 0x53e, 0x3e0, +0x53e, 0x29a, 0x419, 0x29a, 0x419, 0x1b8, 0x353, 0x1b8, 0x353, 0xeb, 0x29e, +0xeb, 0x29e, 0xffa4, 0x16b, 0xffa4, 0x16b, 0xffa4, 0x16b, 0xfdbb, 0xff92, 0xfdbb, +0xff92, 0xfbaa, 0xfd8d, 0xfbaa, 0xfd8d, 0xfa0b, 0xfbf7, 0xfa0b, 0xfbf7, 0xf8db, 0xfacd, +0xf8db, 0xfacd, 0xf7d0, 0xf9c6, 0xf7d0, 0xf9c6, 0xf6bf, 0xf8b5, 0xf6bf, 0xf8b5, 0xf6bf, +0xf8b5, 0xf5d8, 0xf7cb, 0xf5d8, 0xf7cb, 0xf4f5, 0xf6e3, 0xf4f5, 0xf6e3, 0xf465, 0xf64b, +0xf465, 0xf64b, 0xf3a1, 0xf57b, 0xf3a1, 0xf57b, 0xf239, 0xf406, 0xf239, 0xf406, 0xf1d3, +0xf38d, 0xf1d3, 0xf38d, 0xf1d3, 0xf38d, 0xf295, 0xf439, 0xf295, 0xf439, 0xf363, 0xf4ed, +0xf363, 0xf4ed, 0xf366, 0xf4d3, 0xf366, 0xf4d3, 0xf328, 0xf473, 0xf328, 0xf473, 0xf3bc, +0xf4e1, 0xf3bc, 0xf4e1, 0xf3bc, 0xf4e1, 0xf4bb, 0xf5b4, 0xf4bb, 0xf5b4, 0xf5ad, 0xf677, +0xf5ad, 0xf677, 0xf67f, 0xf715, 0xf67f, 0xf715, 0xf71c, 0xf77a, 0xf71c, 0xf77a, 0xf7a6, +0xf7c9, 0xf7a6, 0xf7c9, 0xf87a, 0xf85e, 0xf87a, 0xf85e, 0xf87a, 0xf85e, 0xf985, 0xf928, +0xf985, 0xf928, 0xfa5c, 0xf9bc, 0xfa5c, 0xf9bc, 0xfb55, 0xfa70, 0xfb55, 0xfa70, 0xfce8, +0xfbbe, 0xfce8, 0xfbbe, 0xfee9, 0xfd7a, 0xfee9, 0xfd7a, 0xfee9, 0xfd7a, 0x90, 0xfedc, +0x90, 0xfedc, 0x15a, 0xff63, 0x15a, 0xff63, 0x2b8, 0x80, 0x2b8, 0x80, 0x47f, +0x20a, 0x47f, 0x20a, 0x5e6, 0x337, 0x5e6, 0x337, 0x80f, 0x52a, 0x80f, 0x52a, +0x80f, 0x52a, 0xa35, 0x71f, 0xa35, 0x71f, 0xb8e, 0x84b, 0xb8e, 0x84b, 0xc7a, +0x910, 0xc7a, 0x910, 0xdb4, 0xa2a, 0xdb4, 0xa2a, 0xeec, 0xb47, 0xeec, 0xb47, +0xf53, 0xb98, 0xf53, 0xb98, 0xf53, 0xb98, 0xf7c, 0xbb2, 0xf7c, 0xbb2, 0xfb3, +0xbe1, 0xfb3, 0xbe1, 0xfd5, 0xc00, 0xfd5, 0xc00, 0xf9d, 0xbcc, 0xf9d, 0xbcc, +0xf4e, 0xb88, 0xf4e, 0xb88, 0xf4e, 0xb88, 0xeee, 0xb38, 0xeee, 0xb38, 0xe67, +0xac7, 0xe67, 0xac7, 0xdf3, 0xa6f, 0xdf3, 0xa6f, 0xd99, 0xa37, 0xd99, 0xa37, +0xd4c, 0xa12, 0xd4c, 0xa12, 0xd3f, 0xa32, 0xd3f, 0xa32, 0xd3f, 0xa32, 0xd48, +0xa6c, 0xd48, 0xa6c, 0xd56, 0xab0, 0xd56, 0xab0, 0xd7d, 0xb10, 0xd7d, 0xb10, +0xd1c, 0xaec, 0xd1c, 0xaec, 0xd35, 0xb45, 0xd35, 0xb45, 0xdec, 0xc3d, 0xdec, +0xc3d, 0xdec, 0xc3d, 0xe6a, 0xcfd, 0xe6a, 0xcfd, 0xe9d, 0xd73, 0xe9d, 0xd73, +0xe38, 0xd50, 0xe38, 0xd50, 0xcde, 0xc37, 0xcde, 0xc37, 0xae7, 0xa7f, 0xae7, +0xa7f, 0xae7, 0xa7f, 0x9e9, 0x9bd, 0x9e9, 0x9bd, 0x941, 0x94d, 0x941, 0x94d, +0x8a2, 0x8e1, 0x8a2, 0x8e1, 0x892, 0x8ff, 0x892, 0x8ff, 0x8cc, 0x962, 0x8cc, +0x962, 0x956, 0xa0e, 0x956, 0xa0e, 0x956, 0xa0e, 0x94d, 0xa20, 0x94d, 0xa20, +0x94a, 0xa33, 0x94a, 0xa33, 0x9c7, 0xac0, 0x9c7, 0xac0, 0xa00, 0xb02, 0xa00, +0xb02, 0x9fc, 0xb02, 0x9fc, 0xb02, 0x9b8, 0xabd, 0x9b8, 0xabd, 0x9b8, 0xabd, +0x980, 0xa7f, 0x980, 0xa7f, 0x940, 0xa36, 0x940, 0xa36, 0x8be, 0x9a8, 0x8be, +0x9a8, 0x87a, 0x957, 0x87a, 0x957, 0x882, 0x950, 0x882, 0x950, 0x882, 0x950, +0x8b3, 0x972, 0x8b3, 0x972, 0x8b2, 0x962, 0x8b2, 0x962, 0x8b9, 0x95d, 0x8b9, +0x95d, 0x896, 0x92f, 0x896, 0x92f, 0x76a, 0x7fa, 0x76a, 0x7fa, 0x5ef, 0x679, +0x5ef, 0x679, 0x5ef, 0x679, 0x4c3, 0x54a, 0x4c3, 0x54a, 0x380, 0x408, 0x380, +0x408, 0x1d7, 0x261, 0x1d7, 0x261, 0x3d, 0xcc, 0x3d, 0xcc, 0xfe3f, 0xfed6, +0xfe3f, 0xfed6, 0xfbfa, 0xfc9b, 0xfbfa, 0xfc9b, 0xfbfa, 0xfc9b, 0xfa8b, 0xfb36, 0xfa8b, +0xfb36, 0xf95e, 0xfa13, 0xf95e, 0xfa13, 0xf7c2, 0xf882, 0xf7c2, 0xf882, 0xf669, 0xf734, +0xf669, 0xf734, 0xf62d, 0xf701, 0xf62d, 0xf701, 0xf62d, 0xf701, 0xf5b8, 0xf693, 0xf5b8, +0xf693, 0xf46f, 0xf550, 0xf46f, 0xf550, 0xf2fc, 0xf3e0, 0xf2fc, 0xf3e0, 0xf160, 0xf246, +0xf160, 0xf246, 0xef95, 0xf07b, 0xef95, 0xf07b, 0xed96, 0xee7a, 0xed96, 0xee7a, 0xed96, +0xee7a, 0xebca, 0xecaa, 0xebca, 0xecaa, 0xea39, 0xeb14, 0xea39, 0xeb14, 0xe8f7, 0xe9cd, +0xe8f7, 0xe9cd, 0xe803, 0xe8d4, 0xe803, 0xe8d4, 0xe788, 0xe854, 0xe788, 0xe854, 0xe7af, +0xe877, 0xe7af, 0xe877, 0xe7af, 0xe877, 0xe7ea, 0xe8b0, 0xe7ea, 0xe8b0, 0xe824, 0xe8eb, +0xe824, 0xe8eb, 0xe8af, 0xe979, 0xe8af, 0xe979, 0xe8de, 0xe9af, 0xe8de, 0xe9af, 0xe8c1, +0xe99b, 0xe8c1, 0xe99b, 0xe8c1, 0xe99b, 0xe900, 0xe9e7, 0xe900, 0xe9e7, 0xe925, 0xea1b, +0xe925, 0xea1b, 0xe92f, 0xea37, 0xe92f, 0xea37, 0xe8e0, 0xe9fc, 0xe8e0, 0xe9fc, 0xe8c1, +0xe9f3, 0xe8c1, 0xe9f3, 0xe93e, 0xea86, 0xe93e, 0xea86, 0xe93e, 0xea86, 0xe9e8, 0xeb45, +0xe9e8, 0xeb45, 0xeaeb, 0xec5d, 0xeaeb, 0xec5d, 0xebe6, 0xed6b, 0xebe6, 0xed6b, 0xec93, +0xee28, 0xec93, 0xee28, 0xed7f, 0xef20, 0xed7f, 0xef20, 0xeef8, 0xf0a0, 0xeef8, 0xf0a0, +0xeef8, 0xf0a0, 0xf034, 0xf1de, 0xf034, 0xf1de, 0xf0fe, 0xf2a5, 0xf0fe, 0xf2a5, 0xf198, +0xf335, 0xf198, 0xf335, 0xf259, 0xf3e6, 0xf259, 0xf3e6, 0xf36f, 0xf4e6, 0xf36f, 0xf4e6, +0xf36f, 0xf4e6, 0xf467, 0xf5c2, 0xf467, 0xf5c2, 0xf54c, 0xf684, 0xf54c, 0xf684, 0xf680, +0xf793, 0xf680, 0xf793, 0xf7c1, 0xf8a9, 0xf7c1, 0xf8a9, 0xf92e, 0xf9e8, 0xf92e, 0xf9e8, +0xfbd1, 0xfc5b, 0xfbd1, 0xfc5b, 0xfbd1, 0xfc5b, 0xfef9, 0xff53, 0xfef9, 0xff53, 0x1b2, +0x1db, 0x1b2, 0x1db, 0x403, 0x3fd, 0x403, 0x3fd, 0x65c, 0x628, 0x65c, 0x628, +0x89d, 0x840, 0x89d, 0x840, 0xa95, 0xa13, 0xa95, 0xa13, 0xa95, 0xa13, 0xcad, +0xc0b, 0xcad, 0xc0b, 0xe88, 0xdcc, 0xe88, 0xdcc, 0x1061, 0xf93, 0x1061, 0xf93, +0x1214, 0x113a, 0x1214, 0x113a, 0x136a, 0x128a, 0x136a, 0x128a, 0x136a, 0x128a, 0x1489, +0x13aa, 0x1489, 0x13aa, 0x1568, 0x1492, 0x1568, 0x1492, 0x162d, 0x1566, 0x162d, 0x1566, +0x164b, 0x1599, 0x164b, 0x1599, 0x1534, 0x149c, 0x1534, 0x149c, 0x12f3, 0x127a, 0x12f3, +0x127a, 0x12f3, 0x127a, 0x109d, 0x1047, 0x109d, 0x1047, 0xeb0, 0xe80, 0xeb0, 0xe80, +0xcf3, 0xcec, 0xcf3, 0xcec, 0xb75, 0xb97, 0xb75, 0xb97, 0xaa8, 0xaf5, 0xaa8, +0xaf5, 0xacf, 0xb47, 0xacf, 0xb47, 0xacf, 0xb47, 0xaf5, 0xb97, 0xaf5, 0xb97, +0xae6, 0xbb1, 0xae6, 0xbb1, 0xa9f, 0xb91, 0xa9f, 0xb91, 0x9d5, 0xaec, 0x9d5, +0xaec, 0x8bd, 0x9f7, 0x8bd, 0x9f7, 0x8bd, 0x9f7, 0x7c8, 0x921, 0x7c8, 0x921, +0x766, 0x8db, 0x766, 0x8db, 0x6c1, 0x84f, 0x6c1, 0x84f, 0x5e4, 0x787, 0x5e4, +0x787, 0x55e, 0x714, 0x55e, 0x714, 0x44e, 0x612, 0x44e, 0x612, 0x44e, 0x612, +0x2ad, 0x47d, 0x2ad, 0x47d, 0xb4, 0x28b, 0xb4, 0x28b, 0xfe6c, 0x47, 0xfe6c, +0x47, 0xfc92, 0xfe6f, 0xfc92, 0xfe6f, 0xfbbf, 0xfd99, 0xfbbf, 0xfd99, 0xfbbf, 0xfd99, +0xfb52, 0xfd26, 0xfb52, 0xfd26, 0xfa28, 0xfbf3, 0xfa28, 0xfbf3, 0xf8a4, 0xfa63, 0xf8a4, +0xfa63, 0xf7d2, 0xf981, 0xf7d2, 0xf981, 0xf7e2, 0xf97e, 0xf7e2, 0xf97e, 0xf810, 0xf997, +0xf810, 0xf997, 0xf810, 0xf997, 0xf791, 0xf8fe, 0xf791, 0xf8fe, 0xf6c3, 0xf813, 0xf6c3, +0xf813, 0xf6c2, 0xf7f2, 0xf6c2, 0xf7f2, 0xf768, 0xf876, 0xf768, 0xf876, 0xf7d8, 0xf8c0, +0xf7d8, 0xf8c0, 0xf86b, 0xf92a, 0xf86b, 0xf92a, 0xf86b, 0xf92a, 0xf953, 0xf9e6, 0xf953, +0xf9e6, 0xfa1a, 0xfa7f, 0xfa1a, 0xfa7f, 0xfabb, 0xfaef, 0xfabb, 0xfaef, 0xfb85, 0xfb86, +0xfb85, 0xfb86, 0xfc52, 0xfc1e, 0xfc52, 0xfc1e, 0xfc52, 0xfc1e, 0xfd14, 0xfcaa, 0xfd14, +0xfcaa, 0xfe49, 0xfda7, 0xfe49, 0xfda7, 0xff97, 0xfebc, 0xff97, 0xfebc, 0x87, 0xff72, +0x87, 0xff72, 0x177, 0x28, 0x177, 0x28, 0x25f, 0xd5, 0x25f, 0xd5, 0x25f, +0xd5, 0x2f9, 0x135, 0x2f9, 0x135, 0x381, 0x184, 0x381, 0x184, 0x447, 0x212, +0x447, 0x212, 0x514, 0x2a9, 0x514, 0x2a9, 0x5db, 0x33d, 0x5db, 0x33d, 0x6f6, +0x426, 0x6f6, 0x426, 0x6f6, 0x426, 0x804, 0x507, 0x804, 0x507, 0x8d5, 0x5ae, +0x8d5, 0x5ae, 0x9f0, 0x6a4, 0x9f0, 0x6a4, 0xb3e, 0x7d0, 0xb3e, 0x7d0, 0xc56, +0x8ce, 0xc56, 0x8ce, 0xc56, 0x8ce, 0xd1b, 0x97c, 0xd1b, 0x97c, 0xd25, 0x977, +0xd25, 0x977, 0xcae, 0x8f7, 0xcae, 0x8f7, 0xc15, 0x85a, 0xc15, 0x85a, 0xb3d, +0x786, 0xb3d, 0x786, 0xa90, 0x6e5, 0xa90, 0x6e5, 0xa90, 0x6e5, 0x9dc, 0x643, +0x9dc, 0x643, 0x903, 0x582, 0x903, 0x582, 0x861, 0x4ff, 0x861, 0x4ff, 0x85c, +0x520, 0x85c, 0x520, 0x8db, 0x5c9, 0x8db, 0x5c9, 0x8de, 0x5fc, 0x8de, 0x5fc, +0x8de, 0x5fc, 0x816, 0x568, 0x816, 0x568, 0x6dc, 0x466, 0x6dc, 0x466, 0x622, +0x3e6, 0x622, 0x3e6, 0x626, 0x427, 0x626, 0x427, 0x63f, 0x47d, 0x63f, 0x47d, +0x63f, 0x47d, 0x631, 0x4ad, 0x631, 0x4ad, 0x5d5, 0x48d, 0x5d5, 0x48d, 0x50d, +0x400, 0x50d, 0x400, 0x4b3, 0x3de, 0x4b3, 0x3de, 0x4fc, 0x45b, 0x4fc, 0x45b, +0x4f2, 0x481, 0x4f2, 0x481, 0x4f2, 0x481, 0x4ba, 0x475, 0x4ba, 0x475, 0x4b0, +0x490, 0x4b0, 0x490, 0x520, 0x521, 0x520, 0x521, 0x569, 0x586, 0x569, 0x586, +0x584, 0x5b6, 0x584, 0x5b6, 0x622, 0x664, 0x622, 0x664, 0x622, 0x664, 0x680, +0x6cc, 0x680, 0x6cc, 0x69b, 0x6ee, 0x69b, 0x6ee, 0x6e2, 0x737, 0x6e2, 0x737, +0x77b, 0x7ce, 0x77b, 0x7ce, 0x736, 0x785, 0x736, 0x785, 0x736, 0x785, 0x606, +0x64e, 0x606, 0x64e, 0x5b6, 0x5f7, 0x5b6, 0x5f7, 0x603, 0x63b, 0x603, 0x63b, +0x63d, 0x66e, 0x63d, 0x66e, 0x6ac, 0x6d6, 0x6ac, 0x6d6, 0x79b, 0x7bf, 0x79b, +0x7bf, 0x79b, 0x7bf, 0x855, 0x875, 0x855, 0x875, 0x825, 0x843, 0x825, 0x843, +0x733, 0x752, 0x733, 0x752, 0x5c6, 0x5e9, 0x5c6, 0x5e9, 0x490, 0x4ba, 0x490, +0x4ba, 0x3a5, 0x3d8, 0x3a5, 0x3d8, 0x3a5, 0x3d8, 0x2b6, 0x2f5, 0x2b6, 0x2f5, +0x250, 0x29d, 0x250, 0x29d, 0x23a, 0x297, 0x23a, 0x297, 0x1bc, 0x22b, 0x1bc, +0x22b, 0xc3, 0x145, 0xc3, 0x145, 0xc3, 0x145, 0xff4d, 0xffe2, 0xff4d, 0xffe2, +0xfdca, 0xfe72, 0xfdca, 0xfe72, 0xfc6a, 0xfd25, 0xfc6a, 0xfd25, 0xfb28, 0xfbf7, 0xfb28, +0xfbf7, 0xf975, 0xfa55, 0xf975, 0xfa55, 0xf6fd, 0xf7ee, 0xf6fd, 0xf7ee, 0xf6fd, 0xf7ee, +0xf502, 0xf601, 0xf502, 0xf601, 0xf39e, 0xf4ab, 0xf39e, 0xf4ab, 0xf21b, 0xf334, 0xf21b, +0xf334, 0xf084, 0xf1a7, 0xf084, 0xf1a7, 0xef46, 0xf072, 0xef46, 0xf072, 0xee02, 0xef35, +0xee02, 0xef35, 0xee02, 0xef35, 0xec62, 0xed9c, 0xec62, 0xed9c, 0xeb59, 0xec98, 0xeb59, +0xec98, 0xeb26, 0xec6b, 0xeb26, 0xec6b, 0xeb85, 0xecce, 0xeb85, 0xecce, 0xebfe, 0xed4b, +0xebfe, 0xed4b, 0xebfe, 0xed4b, 0xec56, 0xeda8, 0xec56, 0xeda8, 0xecb5, 0xee0c, 0xecb5, +0xee0c, 0xed31, 0xee8d, 0xed31, 0xee8d, 0xedb7, 0xef1a, 0xedb7, 0xef1a, 0xedfb, 0xef64, +0xedfb, 0xef64, 0xee37, 0xefa6, 0xee37, 0xefa6, 0xee37, 0xefa6, 0xee11, 0xef88, 0xee11, +0xef88, 0xed7a, 0xeef7, 0xed7a, 0xeef7, 0xed41, 0xeec5, 0xed41, 0xeec5, 0xed5e, 0xeee8, +0xed5e, 0xeee8, 0xed43, 0xeed2, 0xed43, 0xeed2, 0xed2b, 0xeebe, 0xed2b, 0xeebe, 0xed2b, +0xeebe, 0xed9a, 0xef2f, 0xed9a, 0xef2f, 0xee79, 0xf00e, 0xee79, 0xf00e, 0xefcb, 0xf15c, +0xefcb, 0xf15c, 0xf0e1, 0xf26c, 0xf0e1, 0xf26c, 0xf127, 0xf2aa, 0xf127, 0xf2aa, 0xf127, +0xf2aa, 0xf13b, 0xf2b1, 0xf13b, 0xf2b1, 0xf21f, 0xf385, 0xf21f, 0xf385, 0xf38e, 0xf4e1, +0xf38e, 0xf4e1, 0xf4b0, 0xf5eb, 0xf4b0, 0xf5eb, 0xf58b, 0xf6aa, 0xf58b, 0xf6aa, 0xf65a, +0xf75b, 0xf65a, 0xf75b, 0xf65a, 0xf75b, 0xf779, 0xf859, 0xf779, 0xf859, 0xf889, 0xf946, +0xf889, 0xf946, 0xfa09, 0xfa9f, 0xfa09, 0xfa9f, 0xfc01, 0xfc6f, 0xfc01, 0xfc6f, 0xfdc5, +0xfe0b, 0xfdc5, 0xfe0b, 0xffca, 0xffe7, 0xffca, 0xffe7, 0xffca, 0xffe7, 0x251, 0x247, +0x251, 0x247, 0x4f6, 0x4c4, 0x4f6, 0x4c4, 0x6ce, 0x678, 0x6ce, 0x678, 0x85a, +0x7e2, 0x85a, 0x7e2, 0x9db, 0x944, 0x9db, 0x944, 0x9db, 0x944, 0xb01, 0xa50, +0xb01, 0xa50, 0xc19, 0xb51, 0xc19, 0xb51, 0xd19, 0xc40, 0xd19, 0xc40, 0xe1c, +0xd38, 0xe1c, 0xd38, 0xf04, 0xe1a, 0xf04, 0xe1a, 0xfaa, 0xec0, 0xfaa, 0xec0, +0xfaa, 0xec0, 0x1023, 0xf41, 0x1023, 0xf41, 0x101c, 0xf46, 0x101c, 0xf46, 0xf41, +0xe7d, 0xf41, 0xe7d, 0xded, 0xd41, 0xded, 0xd41, 0xc2c, 0xb9d, 0xc2c, 0xb9d, +0xc2c, 0xb9d, 0xa55, 0x9e8, 0xa55, 0x9e8, 0x8aa, 0x863, 0x8aa, 0x863, 0x775, +0x758, 0x775, 0x758, 0x6c6, 0x6d5, 0x6c6, 0x6d5, 0x62c, 0x66a, 0x62c, 0x66a, +0x5e0, 0x64e, 0x5e0, 0x64e, 0x5e0, 0x64e, 0x554, 0x5f4, 0x554, 0x5f4, 0x49b, +0x56b, 0x49b, 0x56b, 0x3ca, 0x4ca, 0x3ca, 0x4ca, 0x2aa, 0x3d8, 0x2aa, 0x3d8, +0x1af, 0x309, 0x1af, 0x309, 0x8b, 0x20d, 0x8b, 0x20d, 0x8b, 0x20d, 0xff15, +0xbc, 0xff15, 0xbc, 0xfe02, 0xffca, 0xfe02, 0xffca, 0xfd40, 0xff24, 0xfd40, 0xff24, +0xfbfd, 0xfdf8, 0xfbfd, 0xfdf8, 0xfa5e, 0xfc6b, 0xfa5e, 0xfc6b, 0xfa5e, 0xfc6b, 0xf917, +0xfb31, 0xf917, 0xfb31, 0xf852, 0xfa73, 0xf852, 0xfa73, 0xf745, 0xf968, 0xf745, 0xf968, +0xf617, 0xf837, 0xf617, 0xf837, 0xf4aa, 0xf6c1, 0xf4aa, 0xf6c1, 0xf304, 0xf50d, 0xf304, +0xf50d, 0xf304, 0xf50d, 0xf26d, 0xf464, 0xf26d, 0xf464, 0xf2fe, 0xf4df, 0xf2fe, 0xf4df, +0xf37c, 0xf542, 0xf37c, 0xf542, 0xf2d6, 0xf47f, 0xf2d6, 0xf47f, 0xf285, 0xf40d, 0xf285, +0xf40d, 0xf311, 0xf476, 0xf311, 0xf476, 0xf311, 0xf476, 0xf3b2, 0xf4f1, 0xf3b2, 0xf4f1, +0xf467, 0xf57f, 0xf467, 0xf57f, 0xf513, 0xf601, 0xf513, 0xf601, 0xf5c1, 0xf685, 0xf5c1, +0xf685, 0xf66a, 0xf701, 0xf66a, 0xf701, 0xf66a, 0xf701, 0xf760, 0xf7cb, 0xf760, 0xf7cb, +0xf89e, 0xf8db, 0xf89e, 0xf8db, 0xfa07, 0xfa14, 0xfa07, 0xfa14, 0xfb4c, 0xfb2a, 0xfb4c, +0xfb2a, 0xfc82, 0xfc2f, 0xfc82, 0xfc2f, 0xfe42, 0xfdbe, 0xfe42, 0xfdbe, 0xfe42, 0xfdbe, +0x5e, 0xffa9, 0x5e, 0xffa9, 0x1df, 0xf8, 0x1df, 0xf8, 0x2e1, 0x1c7, 0x2e1, +0x1c7, 0x46c, 0x31f, 0x46c, 0x31f, 0x5d3, 0x453, 0x5d3, 0x453, 0x6dc, 0x52a, +0x6dc, 0x52a, 0x6dc, 0x52a, 0x844, 0x65f, 0x844, 0x65f, 0xa0d, 0x7f7, 0xa0d, +0x7f7, 0xbf9, 0x9b3, 0xbf9, 0x9b3, 0xe16, 0xba2, 0xe16, 0xba2, 0xfc0, 0xd20, +0xfc0, 0xd20, 0xfc0, 0xd20, 0x1060, 0xd97, 0x1060, 0xd97, 0x10d3, 0xde5, 0x10d3, +0xde5, 0x11a5, 0xe95, 0x11a5, 0xe95, 0x1258, 0xf2c, 0x1258, 0xf2c, 0x1276, 0xf32, +0x1276, 0xf32, 0x1287, 0xf33, 0x1287, 0xf33, 0x1287, 0xf33, 0x12b2, 0xf53, 0x12b2, +0xf53, 0x12be, 0xf5a, 0x12be, 0xf5a, 0x1294, 0xf33, 0x1294, 0xf33, 0x1263, 0xf0b, +0x1263, 0xf0b, 0x1221, 0xed9, 0x1221, 0xed9, 0x118b, 0xe5a, 0x118b, 0xe5a, 0x118b, +0xe5a, 0x1168, 0xe54, 0x1168, 0xe54, 0x11a1, 0xeb0, 0x11a1, 0xeb0, 0x11c5, 0xefd, +0x11c5, 0xefd, 0x11af, 0xf14, 0x11af, 0xf14, 0x11bc, 0xf53, 0x11bc, 0xf53, 0x11bc, +0xf53, 0x1222, 0xfee, 0x1222, 0xfee, 0x1249, 0x104c, 0x1249, 0x104c, 0x121c, 0x1057, +0x121c, 0x1057, 0x119b, 0x100f, 0x119b, 0x100f, 0x1138, 0xfe3, 0x1138, 0xfe3, 0x1081, +0xf63, 0x1081, 0xf63, 0x1081, 0xf63, 0xf62, 0xe78, 0xf62, 0xe78, 0xeaa, 0xdf1, +0xeaa, 0xdf1, 0xded, 0xd60, 0xded, 0xd60, 0xd07, 0xca2, 0xd07, 0xca2, 0xc5a, +0xc1a, 0xc5a, 0xc1a, 0xc18, 0xbf6, 0xc18, 0xbf6, 0xc18, 0xbf6, 0xbc0, 0xbb8, +0xbc0, 0xbb8, 0xb3c, 0xb48, 0xb3c, 0xb48, 0xb0d, 0xb28, 0xb0d, 0xb28, 0xb07, +0xb2d, 0xb07, 0xb2d, 0xb0c, 0xb37, 0xb0c, 0xb37, 0xb0c, 0xb37, 0xb2a, 0xb57, +0xb2a, 0xb57, 0xb2c, 0xb59, 0xb2c, 0xb59, 0xaac, 0xad5, 0xaac, 0xad5, 0x9b6, +0x9d9, 0x9b6, 0x9d9, 0x8ab, 0x8c7, 0x8ab, 0x8c7, 0x7ed, 0x801, 0x7ed, 0x801, +0x7ed, 0x801, 0x760, 0x76d, 0x760, 0x76d, 0x72d, 0x732, 0x72d, 0x732, 0x7a7, +0x7a5, 0x7a7, 0x7a5, 0x7f1, 0x7ea, 0x7f1, 0x7ea, 0x7b3, 0x7aa, 0x7b3, 0x7aa, +0x6d8, 0x6cd, 0x6d8, 0x6cd, 0x6d8, 0x6cd, 0x55b, 0x552, 0x55b, 0x552, 0x33a, +0x335, 0x33a, 0x335, 0xca, 0xcc, 0xca, 0xcc, 0xff26, 0xff31, 0xff26, 0xff31, +0xfe1b, 0xfe32, 0xfe1b, 0xfe32, 0xfe1b, 0xfe32, 0xfcdf, 0xfd04, 0xfcdf, 0xfd04, 0xfb12, +0xfb47, 0xfb12, 0xfb47, 0xf938, 0xf97e, 0xf938, 0xf97e, 0xf7a1, 0xf7fa, 0xf7a1, 0xf7fa, +0xf661, 0xf6ce, 0xf661, 0xf6ce, 0xf5cd, 0xf64f, 0xf5cd, 0xf64f, 0xf5cd, 0xf64f, 0xf532, +0xf5c9, 0xf532, 0xf5c9, 0xf43c, 0xf4e8, 0xf43c, 0xf4e8, 0xf2e0, 0xf3a1, 0xf2e0, 0xf3a1, +0xf13d, 0xf212, 0xf13d, 0xf212, 0xef7e, 0xf067, 0xef7e, 0xf067, 0xed47, 0xee43, 0xed47, +0xee43, 0xed47, 0xee43, 0xeb28, 0xec36, 0xeb28, 0xec36, 0xe995, 0xeab4, 0xe995, 0xeab4, +0xe836, 0xe964, 0xe836, 0xe964, 0xe6a4, 0xe7e0, 0xe6a4, 0xe7e0, 0xe539, 0xe682, 0xe539, +0xe682, 0xe539, 0xe682, 0xe4f1, 0xe645, 0xe4f1, 0xe645, 0xe50a, 0xe669, 0xe50a, 0xe669, +0xe4f2, 0xe65a, 0xe4f2, 0xe65a, 0xe53f, 0xe6ae, 0xe53f, 0xe6ae, 0xe58b, 0xe701, 0xe58b, +0xe701, 0xe557, 0xe6d3, 0xe557, 0xe6d3, 0xe557, 0xe6d3, 0xe52d, 0xe6ad, 0xe52d, 0xe6ad, +0xe5da, 0xe75f, 0xe5da, 0xe75f, 0xe69e, 0xe826, 0xe69e, 0xe826, 0xe726, 0xe8b1, 0xe726, +0xe8b1, 0xe7bc, 0xe949, 0xe7bc, 0xe949, 0xe810, 0xe99e, 0xe810, 0xe99e, 0xe810, 0xe99e, +0xe851, 0xe9df, 0xe851, 0xe9df, 0xe8ae, 0xea3d, 0xe8ae, 0xea3d, 0xe942, 0xead0, 0xe942, +0xead0, 0xe9e6, 0xeb72, 0xe9e6, 0xeb72, 0xeac8, 0xec51, 0xeac8, 0xec51, 0xeac8, 0xec51, +0xebd8, 0xed5d, 0xebd8, 0xed5d, 0xecc6, 0xee46, 0xecc6, 0xee46, 0xed75, 0xeeed, 0xed75, +0xeeed, 0xedf6, 0xef65, 0xedf6, 0xef65, 0xeedb, 0xf03e, 0xeedb, 0xf03e, 0xf026, 0xf17d, +0xf026, 0xf17d, 0xf026, 0xf17d, 0xf186, 0xf2cd, 0xf186, 0xf2cd, 0xf2a4, 0xf3d8, 0xf2a4, +0xf3d8, 0xf3ad, 0xf4cc, 0xf3ad, 0xf4cc, 0xf4d7, 0xf5dd, 0xf4d7, 0xf5dd, 0xf616, 0xf701, +0xf616, 0xf701, 0xf616, 0xf701, 0xf789, 0xf857, 0xf789, 0xf857, 0xf935, 0xf9e2, 0xf935, +0xf9e2, 0xfafc, 0xfb85, 0xfafc, 0xfb85, 0xfced, 0xfd50, 0xfced, 0xfd50, 0xff99, 0xffd5, +0xff99, 0xffd5, 0x29f, 0x2b2, 0x29f, 0x2b2, 0x29f, 0x2b2, 0x4fd, 0x4e6, 0x4fd, +0x4e6, 0x6c8, 0x687, 0x6c8, 0x687, 0x89c, 0x831, 0x89c, 0x831, 0xa5b, 0x9c7, +0xa5b, 0x9c7, 0xbe2, 0xb26, 0xbe2, 0xb26, 0xd77, 0xc96, 0xd77, 0xc96, 0xd77, +0xc96, 0xf51, 0xe4e, 0xf51, 0xe4e, 0x1185, 0x1065, 0x1185, 0x1065, 0x13a4, 0x126b, +0x13a4, 0x126b, 0x14d1, 0x1384, 0x14d1, 0x1384, 0x1477, 0x131c, 0x1477, 0x131c, 0x1477, +0x131c, 0x1331, 0x11cf, 0x1331, 0x11cf, 0x11a4, 0x1040, 0x11a4, 0x1040, 0xfed, 0xe90, +0xfed, 0xe90, 0xe11, 0xcc0, 0xe11, 0xcc0, 0xc12, 0xad6, 0xc12, 0xad6, 0xa9a, +0x978, 0xa9a, 0x978, 0xa9a, 0x978, 0x9f1, 0x8ef, 0x9f1, 0x8ef, 0x9b2, 0x8d5, +0x9b2, 0x8d5, 0x999, 0x8e7, 0x999, 0x8e7, 0x92c, 0x8aa, 0x92c, 0x8aa, 0x865, +0x815, 0x865, 0x815, 0x77c, 0x761, 0x77c, 0x761, 0x77c, 0x761, 0x6d7, 0x6f2, +0x6d7, 0x6f2, 0x67a, 0x6cb, 0x67a, 0x6cb, 0x561, 0x5e8, 0x561, 0x5e8, 0x445, +0x500, 0x445, 0x500, 0x3c7, 0x4b5, 0x3c7, 0x4b5, 0x3c7, 0x4b5, 0x32c, 0x448, +0x32c, 0x448, 0x1bd, 0x303, 0x1bd, 0x303, 0xffd7, 0x144, 0xffd7, 0x144, 0xfed8, +0x66, 0xfed8, 0x66, 0xfde2, 0xff8b, 0xfde2, 0xff8b, 0xfc9b, 0xfe59, 0xfc9b, 0xfe59, +0xfc9b, 0xfe59, 0xfb1f, 0xfced, 0xfb1f, 0xfced, 0xf93a, 0xfb12, 0xf93a, 0xfb12, 0xf7c6, +0xf9a3, 0xf7c6, 0xf9a3, 0xf6c3, 0xf8a0, 0xf6c3, 0xf8a0, 0xf67b, 0xf852, 0xf67b, 0xf852, +0xf65d, 0xf82a, 0xf65d, 0xf82a, 0xf65d, 0xf82a, 0xf5e8, 0xf7a6, 0xf5e8, 0xf7a6, 0xf5cb, +0xf778, 0xf5cb, 0xf778, 0xf5d3, 0xf76a, 0xf5d3, 0xf76a, 0xf5fb, 0xf77a, 0xf5fb, 0xf77a, +0xf63e, 0xf7a4, 0xf63e, 0xf7a4, 0xf63e, 0xf7a4, 0xf6e5, 0xf82f, 0xf6e5, 0xf82f, 0xf7f5, +0xf922, 0xf7f5, 0xf922, 0xf85c, 0xf969, 0xf85c, 0xf969, 0xf874, 0xf961, 0xf874, 0xf961, +0xf91a, 0xf9e7, 0xf91a, 0xf9e7, 0xfa34, 0xfade, 0xfa34, 0xfade, 0xfa34, 0xfade, 0xfb55, +0xfbdd, 0xfb55, 0xfbdd, 0xfc7c, 0xfce0, 0xfc7c, 0xfce0, 0xfdc8, 0xfe06, 0xfdc8, 0xfe06, +0xfedc, 0xfef4, 0xfedc, 0xfef4, 0x3, 0xfff4, 0x3, 0xfff4, 0x15c, 0x124, 0x15c, +0x124, 0x15c, 0x124, 0x293, 0x233, 0x293, 0x233, 0x359, 0x2cd, 0x359, 0x2cd, +0x3c4, 0x30c, 0x3c4, 0x30c, 0x445, 0x361, 0x445, 0x361, 0x4ce, 0x3bc, 0x4ce, +0x3bc, 0x4ce, 0x3bc, 0x58d, 0x44e, 0x58d, 0x44e, 0x6dd, 0x571, 0x6dd, 0x571, +0x8d4, 0x73c, 0x8d4, 0x73c, 0xab1, 0x8ed, 0xab1, 0x8ed, 0xbd9, 0x9ec, 0xbd9, +0x9ec, 0xcc8, 0xab4, 0xcc8, 0xab4, 0xcc8, 0xab4, 0xdd0, 0xb98, 0xdd0, 0xb98, +0xe94, 0xc3d, 0xe94, 0xc3d, 0xefa, 0xc87, 0xefa, 0xc87, 0xf2f, 0xca5, 0xf2f, +0xca5, 0xf08, 0xc6c, 0xf08, 0xc6c, 0xe88, 0xbe0, 0xe88, 0xbe0, 0xe88, 0xbe0, +0xe09, 0xb5b, 0xe09, 0xb5b, 0xdd4, 0xb26, 0xdd4, 0xb26, 0xd8e, 0xae7, 0xd8e, +0xae7, 0xd55, 0xab9, 0xd55, 0xab9, 0xd75, 0xaeb, 0xd75, 0xaeb, 0xd75, 0xaeb, +0xd5d, 0xaea, 0xd5d, 0xaea, 0xccb, 0xa73, 0xccb, 0xa73, 0xc24, 0x9ec, 0xc24, +0x9ec, 0xbd6, 0x9c2, 0xbd6, 0x9c2, 0xb93, 0x9a5, 0xb93, 0x9a5, 0xb30, 0x96a, +0xb30, 0x96a, 0xb30, 0x96a, 0xb1b, 0x97e, 0xb1b, 0x97e, 0xb6b, 0x9f8, 0xb6b, +0x9f8, 0xb8a, 0xa40, 0xb8a, 0xa40, 0xb35, 0xa13, 0xb35, 0xa13, 0xab9, 0x9bd, +0xab9, 0x9bd, 0xa22, 0x949, 0xa22, 0x949, 0xa22, 0x949, 0x96a, 0x8b1, 0x96a, +0x8b1, 0x8aa, 0x80d, 0x8aa, 0x80d, 0x859, 0x7d5, 0x859, 0x7d5, 0x838, 0x7c9, +0x838, 0x7c9, 0x7e1, 0x783, 0x7e1, 0x783, 0x7e1, 0x783, 0x7d0, 0x77f, 0x7d0, +0x77f, 0x7fd, 0x7b5, 0x7fd, 0x7b5, 0x81a, 0x7d7, 0x81a, 0x7d7, 0x83b, 0x7fb, +0x83b, 0x7fb, 0x89a, 0x859, 0x89a, 0x859, 0x911, 0x8ce, 0x911, 0x8ce, 0x911, +0x8ce, 0x93d, 0x8f6, 0x93d, 0x8f6, 0x91c, 0x8d0, 0x91c, 0x8d0, 0x8a6, 0x856, +0x8a6, 0x856, 0x828, 0x7d2, 0x828, 0x7d2, 0x877, 0x81e, 0x877, 0x81e, 0x948, +0x8ec, 0x948, 0x8ec, 0x948, 0x8ec, 0x991, 0x935, 0x991, 0x935, 0x969, 0x90f, +0x969, 0x90f, 0x996, 0x940, 0x996, 0x940, 0x9cc, 0x97e, 0x9cc, 0x97e, 0x8f1, +0x8ad, 0x8f1, 0x8ad, 0x8f1, 0x8ad, 0x705, 0x6ce, 0x705, 0x6ce, 0x522, 0x4fc, +0x522, 0x4fc, 0x423, 0x410, 0x423, 0x410, 0x3ae, 0x3b0, 0x3ae, 0x3b0, 0x2c2, +0x2dc, 0x2c2, 0x2dc, 0x177, 0x1ab, 0x177, 0x1ab, 0x177, 0x1ab, 0x75, 0xc4, +0x75, 0xc4, 0xffc2, 0x2d, 0xffc2, 0x2d, 0xff29, 0xffb0, 0xff29, 0xffb0, 0xfe30, +0xfed3, 0xfe30, 0xfed3, 0xfc7e, 0xfd3c, 0xfc7e, 0xfd3c, 0xfa51, 0xfb29, 0xfa51, 0xfb29, +0xfa51, 0xfb29, 0xf82c, 0xf91d, 0xf82c, 0xf91d, 0xf62d, 0xf735, 0xf62d, 0xf735, 0xf441, +0xf55c, 0xf441, 0xf55c, 0xf2e7, 0xf414, 0xf2e7, 0xf414, 0xf217, 0xf352, 0xf217, 0xf352, +0xf217, 0xf352, 0xf0fc, 0xf243, 0xf0fc, 0xf243, 0xef50, 0xf0a0, 0xef50, 0xf0a0, 0xedc0, +0xef15, 0xedc0, 0xef15, 0xec6e, 0xedc7, 0xec6e, 0xedc7, 0xeb43, 0xec9c, 0xeb43, 0xec9c, +0xeae4, 0xec3b, 0xeae4, 0xec3b, 0xeae4, 0xec3b, 0xeb2f, 0xec83, 0xeb2f, 0xec83, 0xeb97, +0xece6, 0xeb97, 0xece6, 0xebce, 0xed16, 0xebce, 0xed16, 0xec07, 0xed49, 0xec07, 0xed49, +0xec86, 0xedc2, 0xec86, 0xedc2, 0xec86, 0xedc2, 0xecdf, 0xee13, 0xecdf, 0xee13, 0xed45, +0xee74, 0xed45, 0xee74, 0xedc1, 0xeeeb, 0xedc1, 0xeeeb, 0xee37, 0xef5c, 0xee37, 0xef5c, +0xee91, 0xefb3, 0xee91, 0xefb3, 0xee52, 0xef73, 0xee52, 0xef73, 0xee52, 0xef73, 0xee18, +0xef38, 0xee18, 0xef38, 0xede6, 0xef07, 0xede6, 0xef07, 0xeddf, 0xef02, 0xeddf, 0xef02, +0xeec9, 0xefee, 0xeec9, 0xefee, 0xefff, 0xf127, 0xefff, 0xf127, 0xf0f3, 0xf21e, 0xf0f3, +0xf21e, 0xf0f3, 0xf21e, 0xf177, 0xf2a3, 0xf177, 0xf2a3, 0xf23f, 0xf36b, 0xf23f, 0xf36b, +0xf35e, 0xf489, 0xf35e, 0xf489, 0xf3f4, 0xf51c, 0xf3f4, 0xf51c, 0xf458, 0xf579, 0xf458, +0xf579, 0xf458, 0xf579, 0xf4e8, 0xf600, 0xf4e8, 0xf600, 0xf5cb, 0xf6d7, 0xf5cb, 0xf6d7, +0xf6dc, 0xf7d8, 0xf6dc, 0xf7d8, 0xf7fb, 0xf8e2, 0xf7fb, 0xf8e2, 0xf92d, 0xf9fd, 0xf92d, +0xf9fd, 0xfa30, 0xfae4, 0xfa30, 0xfae4, 0xfa30, 0xfae4, 0xfb62, 0xfbf7, 0xfb62, 0xfbf7, +0xfd51, 0xfdc4, 0xfd51, 0xfdc4, 0xffb4, 0x2, 0xffb4, 0x2, 0x1f5, 0x21d, 0x1f5, +0x21d, 0x3f2, 0x3f2, 0x3f2, 0x3f2, 0x5dd, 0x5b4, 0x5dd, 0x5b4, 0x5dd, 0x5b4, +0x7b2, 0x760, 0x7b2, 0x760, 0x914, 0x89b, 0x914, 0x89b, 0xa48, 0x9a9, 0xa48, +0x9a9, 0xb89, 0xac7, 0xb89, 0xac7, 0xca2, 0xbc0, 0xca2, 0xbc0, 0xca2, 0xbc0, +0xda7, 0xcaa, 0xda7, 0xcaa, 0xee9, 0xdd4, 0xee9, 0xdd4, 0xfdb, 0xeb5, 0xfdb, +0xeb5, 0xfbd, 0xe8a, 0xfbd, 0xe8a, 0xf35, 0xdfb, 0xf35, 0xdfb, 0xe9e, 0xd64, +0xe9e, 0xd64, 0xe9e, 0xd64, 0xd87, 0xc52, 0xd87, 0xc52, 0xbb3, 0xa89, 0xbb3, +0xa89, 0x987, 0x86e, 0x987, 0x86e, 0x773, 0x670, 0x773, 0x670, 0x58d, 0x4a4, +0x58d, 0x4a4, 0x430, 0x365, 0x430, 0x365, 0x430, 0x365, 0x342, 0x29a, 0x342, +0x29a, 0x28e, 0x20b, 0x28e, 0x20b, 0x242, 0x1e6, 0x242, 0x1e6, 0x211, 0x1de, +0x211, 0x1de, 0x134, 0x12b, 0x134, 0x12b, 0x134, 0x12b, 0xff8e, 0xffaf, 0xff8e, +0xffaf, 0xfde1, 0xfe2b, 0xfde1, 0xfe2b, 0xfca4, 0xfd17, 0xfca4, 0xfd17, 0xfb9a, 0xfc36, +0xfb9a, 0xfc36, 0xfa36, 0xfaf7, 0xfa36, 0xfaf7, 0xf8b7, 0xf99d, 0xf8b7, 0xf99d, 0xf8b7, +0xf99d, 0xf7e9, 0xf8f1, 0xf7e9, 0xf8f1, 0xf739, 0xf860, 0xf739, 0xf860, 0xf5d4, 0xf717, +0xf5d4, 0xf717, 0xf3ea, 0xf546, 0xf3ea, 0xf546, 0xf206, 0xf379, 0xf206, 0xf379, 0xf0a6, +0xf22d, 0xf0a6, 0xf22d, 0xf0a6, 0xf22d, 0xefc8, 0xf15f, 0xefc8, 0xf15f, 0xef6d, 0xf111, +0xef6d, 0xf111, 0xef33, 0xf0e1, 0xef33, 0xf0e1, 0xeece, 0xf081, 0xeece, 0xf081, 0xee98, +0xf04d, 0xee98, 0xf04d, 0xee98, 0xf04d, 0xeea8, 0xf05c, 0xeea8, 0xf05c, 0xeee3, 0xf092, +0xeee3, 0xf092, 0xef3c, 0xf0e3, 0xef3c, 0xf0e3, 0xefe2, 0xf17c, 0xefe2, 0xf17c, 0xf05f, +0xf1e9, 0xf05f, 0xf1e9, 0xf08a, 0xf1ff, 0xf08a, 0xf1ff, 0xf08a, 0xf1ff, 0xf13f, 0xf29c, +0xf13f, 0xf29c, 0xf2a5, 0xf3e7, 0xf2a5, 0xf3e7, 0xf45a, 0xf57d, 0xf45a, 0xf57d, 0xf62b, +0xf72a, 0xf62b, 0xf72a, 0xf80e, 0xf8e7, 0xf80e, 0xf8e7, 0xf9ff, 0xfaaf, 0xf9ff, 0xfaaf, +0xf9ff, 0xfaaf, 0xfbbc, 0xfc40, 0xfbbc, 0xfc40, 0xfd2d, 0xfd83, 0xfd2d, 0xfd83, 0xfe8e, +0xfeb5, 0xfe8e, 0xfeb5, 0xffe5, 0xffdc, 0xffe5, 0xffdc, 0xf8, 0xbc, 0xf8, 0xbc, +0xf8, 0xbc, 0x1d4, 0x167, 0x1d4, 0x167, 0x2ef, 0x250, 0x2ef, 0x250, 0x42b, +0x35c, 0x42b, 0x35c, 0x5af, 0x4b1, 0x5af, 0x4b1, 0x7f5, 0x6ca, 0x7f5, 0x6ca, +0xa8e, 0x938, 0xa8e, 0x938, 0xa8e, 0x938, 0xd07, 0xb89, 0xd07, 0xb89, 0xefe, +0xd5b, 0xefe, 0xd5b, 0x106e, 0xea9, 0x106e, 0xea9, 0x1162, 0xf7f, 0x1162, 0xf7f, +0x11c2, 0xfc5, 0x11c2, 0xfc5, 0x1218, 0x1004, 0x1218, 0x1004, 0x1218, 0x1004, 0x12aa, +0x1083, 0x12aa, 0x1083, 0x1365, 0x112e, 0x1365, 0x112e, 0x13fa, 0x11b8, 0x13fa, 0x11b8, +0x1451, 0x1207, 0x1451, 0x1207, 0x14bc, 0x126d, 0x14bc, 0x126d, 0x14bc, 0x126d, 0x1511, +0x12c2, 0x1511, 0x12c2, 0x1531, 0x12e3, 0x1531, 0x12e3, 0x1515, 0x12cd, 0x1515, 0x12cd, +0x14b0, 0x126f, 0x14b0, 0x126f, 0x144a, 0x1214, 0x144a, 0x1214, 0x1436, 0x120d, 0x1436, +0x120d, 0x1436, 0x120d, 0x1494, 0x127b, 0x1494, 0x127b, 0x14c3, 0x12bb, 0x14c3, 0x12bb, +0x1483, 0x128e, 0x1483, 0x128e, 0x146a, 0x128b, 0x146a, 0x128b, 0x147d, 0x12b5, 0x147d, +0x12b5, 0x1467, 0x12b7, 0x1467, 0x12b7, 0x1467, 0x12b7, 0x1414, 0x127e, 0x1414, 0x127e, +0x13ce, 0x1254, 0x13ce, 0x1254, 0x133c, 0x11dd, 0x133c, 0x11dd, 0x124e, 0x110c, 0x124e, +0x110c, 0x11b0, 0x108a, 0x11b0, 0x108a, 0x11b0, 0x108a, 0x1123, 0x1019, 0x1123, 0x1019, +0x1056, 0xf68, 0x1056, 0xf68, 0xf71, 0xe9d, 0xf71, 0xe9d, 0xec1, 0xe06, 0xec1, +0xe06, 0xe40, 0xd9d, 0xe40, 0xd9d, 0xdb4, 0xd27, 0xdb4, 0xd27, 0xdb4, 0xd27, +0xd2e, 0xcb4, 0xd2e, 0xcb4, 0xcb9, 0xc50, 0xcb9, 0xc50, 0xc7d, 0xc22, 0xc7d, +0xc22, 0xc5c, 0xc0d, 0xc5c, 0xc0d, 0xbe5, 0xb9f, 0xbe5, 0xb9f, 0xb60, 0xb21, +0xb60, 0xb21, 0xb60, 0xb21, 0xb0f, 0xad4, 0xb0f, 0xad4, 0xa71, 0xa3a, 0xa71, +0xa3a, 0x987, 0x951, 0x987, 0x951, 0x898, 0x864, 0x898, 0x864, 0x7ea, 0x7b6, +0x7ea, 0x7b6, 0x7ea, 0x7b6, 0x7e1, 0x7ae, 0x7e1, 0x7ae, 0x814, 0x7e3, 0x814, +0x7e3, 0x753, 0x726, 0x753, 0x726, 0x54c, 0x525, 0x54c, 0x525, 0x348, 0x32a, +0x348, 0x32a, 0x1e6, 0x1d3, 0x1e6, 0x1d3, 0x1e6, 0x1d3, 0x90, 0x8b, 0x90, +0x8b, 0xfed9, 0xfee6, 0xfed9, 0xfee6, 0xfd10, 0xfd31, 0xfd10, 0xfd31, 0xfbd3, 0xfc0d, +0xfbd3, 0xfc0d, 0xface, 0xfb23, 0xface, 0xfb23, 0xface, 0xfb23, 0xf9c8, 0xfa3a, 0xf9c8, +0xfa3a, 0xf894, 0xf924, 0xf894, 0xf924, 0xf6eb, 0xf79b, 0xf6eb, 0xf79b, 0xf567, 0xf637, +0xf567, 0xf637, 0xf3d9, 0xf4c8, 0xf3d9, 0xf4c8, 0xf1f8, 0xf305, 0xf1f8, 0xf305, 0xf1f8, +0xf305, 0xf036, 0xf15f, 0xf036, 0xf15f, 0xeecb, 0xf00d, 0xeecb, 0xf00d, 0xeda2, 0xeef8, +0xeda2, 0xeef8, 0xec54, 0xedbb, 0xec54, 0xedbb, 0xeae9, 0xec5c, 0xeae9, 0xec5c, 0xe966, +0xeae0, 0xe966, 0xeae0, 0xe966, 0xeae0, 0xe822, 0xe99f, 0xe822, 0xe99f, 0xe77e, 0xe8f8, +0xe77e, 0xe8f8, 0xe708, 0xe87b, 0xe708, 0xe87b, 0xe6d8, 0xe841, 0xe6d8, 0xe841, 0xe6c7, +0xe821, 0xe6c7, 0xe821, 0xe6c7, 0xe821, 0xe697, 0xe7e0, 0xe697, 0xe7e0, 0xe685, 0xe7bd, +0xe685, 0xe7bd, 0xe6b1, 0xe7d6, 0xe6b1, 0xe7d6, 0xe74d, 0xe85f, 0xe74d, 0xe85f, 0xe846, +0xe947, 0xe846, 0xe947, 0xe945, 0xea37, 0xe945, 0xea37, 0xe945, 0xea37, 0xe9fd, 0xeae3, +0xe9fd, 0xeae3, 0xea8d, 0xeb6a, 0xea8d, 0xeb6a, 0xeb1b, 0xebf4, 0xeb1b, 0xebf4, 0xeb9f, +0xec78, 0xeb9f, 0xec78, 0xebd3, 0xecb0, 0xebd3, 0xecb0, 0xebb8, 0xec9d, 0xebb8, 0xec9d, +0xebb8, 0xec9d, 0xebec, 0xecdd, 0xebec, 0xecdd, 0xec73, 0xed74, 0xec73, 0xed74, 0xed45, +0xee58, 0xed45, 0xee58, 0xee73, 0xef98, 0xee73, 0xef98, 0xf011, 0xf149, 0xf011, 0xf149, +0xf011, 0xf149, 0xf1d3, 0xf31d, 0xf1d3, 0xf31d, 0xf2ca, 0xf425, 0xf2ca, 0xf425, 0xf31d, +0xf484, 0xf31d, 0xf484, 0xf374, 0xf4e4, 0xf374, 0xf4e4, 0xf479, 0xf5ed, 0xf479, 0xf5ed, +0xf659, 0xf7c9, 0xf659, 0xf7c9, 0xf659, 0xf7c9, 0xf863, 0xf9ca, 0xf863, 0xf9ca, 0xf9f3, +0xfb4b, 0xf9f3, 0xfb4b, 0xfade, 0xfc1e, 0xfade, 0xfc1e, 0xfbc4, 0xfce6, 0xfbc4, 0xfce6, +0xfd1d, 0xfe1a, 0xfd1d, 0xfe1a, 0xfec2, 0xff95, 0xfec2, 0xff95, 0xfec2, 0xff95, 0x7b, +0x11e, 0x7b, 0x11e, 0x26a, 0x2da, 0x26a, 0x2da, 0x4be, 0x4f8, 0x4be, 0x4f8, +0x6f2, 0x6f4, 0x6f2, 0x6f4, 0x8cc, 0x897, 0x8cc, 0x897, 0x8cc, 0x897, 0xa9b, +0xa30, 0xa9b, 0xa30, 0xc74, 0xbd5, 0xc74, 0xbd5, 0xe65, 0xd97, 0xe65, 0xd97, +0x1070, 0xf77, 0x1070, 0xf77, 0x125f, 0x1142, 0x125f, 0x1142, 0x13cb, 0x128f, 0x13cb, +0x128f, 0x13cb, 0x128f, 0x144f, 0x12fd, 0x144f, 0x12fd, 0x140a, 0x12a8, 0x140a, 0x12a8, +0x134c, 0x11e3, 0x134c, 0x11e3, 0x123a, 0x10d0, 0x123a, 0x10d0, 0x10a6, 0xf43, 0x10a6, +0xf43, 0xef2, 0xd9c, 0xef2, 0xd9c, 0xef2, 0xd9c, 0xdb3, 0xc70, 0xdb3, 0xc70, +0xc7b, 0xb50, 0xc7b, 0xb50, 0xafe, 0x9ef, 0xafe, 0x9ef, 0x986, 0x896, 0x986, +0x896, 0x84d, 0x77e, 0x84d, 0x77e, 0x84d, 0x77e, 0x745, 0x69a, 0x745, 0x69a, +0x679, 0x5f2, 0x679, 0x5f2, 0x5ce, 0x56b, 0x5ce, 0x56b, 0x4f8, 0x4ba, 0x4f8, +0x4ba, 0x448, 0x42d, 0x448, 0x42d, 0x3a4, 0x3ab, 0x3a4, 0x3ab, 0x3a4, 0x3ab, +0x289, 0x2b1, 0x289, 0x2b1, 0xf9, 0x141, 0xf9, 0x141, 0xff8a, 0xfff2, 0xff8a, +0xfff2, 0xfee3, 0xff69, 0xfee3, 0xff69, 0xfe6e, 0xff11, 0xfe6e, 0xff11, 0xfd12, 0xfdd2, +0xfd12, 0xfdd2, 0xfd12, 0xfdd2, 0xfaea, 0xfbc6, 0xfaea, 0xfbc6, 0xf8d3, 0xf9cc, 0xf8d3, +0xf9cc, 0xf760, 0xf875, 0xf760, 0xf875, 0xf64c, 0xf77d, 0xf64c, 0xf77d, 0xf542, 0xf68f, +0xf542, 0xf68f, 0xf542, 0xf68f, 0xf4a2, 0xf609, 0xf4a2, 0xf609, 0xf451, 0xf5d1, 0xf451, +0xf5d1, 0xf40e, 0xf5a6, 0xf40e, 0xf5a6, 0xf3e0, 0xf58f, 0xf3e0, 0xf58f, 0xf3ac, 0xf56d, +0xf3ac, 0xf56d, 0xf34c, 0xf51c, 0xf34c, 0xf51c, 0xf34c, 0xf51c, 0xf2f6, 0xf4d1, 0xf2f6, +0xf4d1, 0xf30f, 0xf4f0, 0xf30f, 0xf4f0, 0xf30d, 0xf4ee, 0xf30d, 0xf4ee, 0xf2f4, 0xf4ce, +0xf2f4, 0xf4ce, 0xf38e, 0xf55a, 0xf38e, 0xf55a, 0xf483, 0xf63b, 0xf483, 0xf63b, 0xf483, +0xf63b, 0xf59f, 0xf73c, 0xf59f, 0xf73c, 0xf715, 0xf88f, 0xf715, 0xf88f, 0xf8d2, 0xfa22, +0xf8d2, 0xfa22, 0xfa66, 0xfb86, 0xfa66, 0xfb86, 0xfb91, 0xfc7b, 0xfb91, 0xfc7b, 0xfb91, +0xfc7b, 0xfca1, 0xfd50, 0xfca1, 0xfd50, 0xfda5, 0xfe16, 0xfda5, 0xfe16, 0xfed1, 0xff01, +0xfed1, 0xff01, 0xfff1, 0xffdd, 0xfff1, 0xffdd, 0xa8, 0x51, 0xa8, 0x51, 0x124, +0x8a, 0x124, 0x8a, 0x124, 0x8a, 0x198, 0xbb, 0x198, 0xbb, 0x284, 0x169, +0x284, 0x169, 0x3f8, 0x2a2, 0x3f8, 0x2a2, 0x5d0, 0x444, 0x5d0, 0x444, 0x7ba, +0x5fd, 0x7ba, 0x5fd, 0x94f, 0x767, 0x94f, 0x767, 0x94f, 0x767, 0xaba, 0x8ad, +0xaba, 0x8ad, 0xba8, 0x97b, 0xba8, 0x97b, 0xc5c, 0xa15, 0xc5c, 0xa15, 0xd31, +0xad6, 0xd31, 0xad6, 0xdc2, 0xb58, 0xdc2, 0xb58, 0xdc2, 0xb58, 0xdf4, 0xb81, +0xdf4, 0xb81, 0xdbc, 0xb43, 0xdbc, 0xb43, 0xdc4, 0xb4a, 0xdc4, 0xb4a, 0xe1c, +0xba3, 0xe1c, 0xba3, 0xe37, 0xbc2, 0xe37, 0xbc2, 0xe47, 0xbd8, 0xe47, 0xbd8, +0xe47, 0xbd8, 0xe1f, 0xbb7, 0xe1f, 0xbb7, 0xde1, 0xb82, 0xde1, 0xb82, 0xdda, +0xb86, 0xdda, 0xb86, 0xdda, 0xb91, 0xdda, 0xb91, 0xdc1, 0xb84, 0xdc1, 0xb84, +0xdbc, 0xb8e, 0xdbc, 0xb8e, 0xdbc, 0xb8e, 0xdfe, 0xbdf, 0xdfe, 0xbdf, 0xe21, +0xc13, 0xe21, 0xc13, 0xe0b, 0xc0f, 0xe0b, 0xc0f, 0xda8, 0xbc1, 0xda8, 0xbc1, +0xcf1, 0xb21, 0xcf1, 0xb21, 0xcf1, 0xb21, 0xc85, 0xace, 0xc85, 0xace, 0xc89, +0xaed, 0xc89, 0xaed, 0xc9a, 0xb1b, 0xc9a, 0xb1b, 0xc4c, 0xaed, 0xc4c, 0xaed, +0xb99, 0xa5c, 0xb99, 0xa5c, 0xabc, 0x9a2, 0xabc, 0x9a2, 0xabc, 0x9a2, 0x9f6, +0x8ff, 0x9f6, 0x8ff, 0x968, 0x895, 0x968, 0x895, 0x8e3, 0x833, 0x8e3, 0x833, +0x8bc, 0x82e, 0x8bc, 0x82e, 0x939, 0x8cb, 0x939, 0x8cb, 0x939, 0x8cb, 0x9bb, +0x96a, 0x9bb, 0x96a, 0x99f, 0x969, 0x99f, 0x969, 0x93d, 0x91e, 0x93d, 0x91e, +0x94e, 0x942, 0x94e, 0x942, 0x9ab, 0x9af, 0x9ab, 0x9af, 0x9fb, 0xa09, 0x9fb, +0xa09, 0x9fb, 0xa09, 0xa02, 0xa18, 0xa02, 0xa18, 0x9a2, 0x9ba, 0x9a2, 0x9ba, +0x924, 0x93d, 0x924, 0x93d, 0x8d4, 0x8ea, 0x8d4, 0x8ea, 0x8b2, 0x8c4, 0x8b2, +0x8c4, 0x81c, 0x829, 0x81c, 0x829, 0x81c, 0x829, 0x6ef, 0x6f7, 0x6ef, 0x6f7, +0x5ee, 0x5f1, 0x5ee, 0x5f1, 0x513, 0x513, 0x513, 0x513, 0x3d4, 0x3d4, 0x3d4, +0x3d4, 0x247, 0x24a, 0x247, 0x24a, 0x247, 0x24a, 0x143, 0x14c, 0x143, 0x14c, +0x114, 0x128, 0x114, 0x128, 0xe1, 0x103, 0xe1, 0x103, 0x4d, 0x82, 0x4d, +0x82, 0xff6f, 0xffbb, 0xff6f, 0xffbb, 0xfe08, 0xfe6e, 0xfe08, 0xfe6e, 0xfe08, 0xfe6e, +0xfc2f, 0xfcb3, 0xfc2f, 0xfcb3, 0xfa70, 0xfb12, 0xfa70, 0xfb12, 0xf8f5, 0xf9b6, 0xf8f5, +0xf9b6, 0xf72a, 0xf80b, 0xf72a, 0xf80b, 0xf54d, 0xf64d, 0xf54d, 0xf64d, 0xf429, 0xf545, +0xf429, 0xf545, 0xf429, 0xf545, 0xf342, 0xf478, 0xf342, 0xf478, 0xf21d, 0xf369, 0xf21d, +0xf369, 0xf099, 0xf1f6, 0xf099, 0xf1f6, 0xeec4, 0xf02e, 0xeec4, 0xf02e, 0xed31, 0xeea2, +0xed31, 0xeea2, 0xed31, 0xeea2, 0xec08, 0xed7a, 0xec08, 0xed7a, 0xeb4e, 0xecbc, 0xeb4e, +0xecbc, 0xeaf6, 0xec5c, 0xeaf6, 0xec5c, 0xeac8, 0xec22, 0xeac8, 0xec22, 0xeae1, 0xec2b, +0xeae1, 0xec2b, 0xeb75, 0xecad, 0xeb75, 0xecad, 0xeb75, 0xecad, 0xec52, 0xed77, 0xec52, +0xed77, 0xecec, 0xedfe, 0xecec, 0xedfe, 0xed77, 0xee77, 0xed77, 0xee77, 0xee55, 0xef45, +0xee55, 0xef45, 0xef32, 0xf015, 0xef32, 0xf015, 0xefd3, 0xf0ac, 0xefd3, 0xf0ac, 0xefd3, +0xf0ac, 0xf068, 0xf13d, 0xf068, 0xf13d, 0xf100, 0xf1d5, 0xf100, 0xf1d5, 0xf13e, 0xf219, +0xf13e, 0xf219, 0xf15c, 0xf240, 0xf15c, 0xf240, 0xf1b2, 0xf2a5, 0xf1b2, 0xf2a5, 0xf1b2, +0xf2a5, 0xf223, 0xf329, 0xf223, 0xf329, 0xf2b8, 0xf3d3, 0xf2b8, 0xf3d3, 0xf37d, 0xf4b0, +0xf37d, 0xf4b0, 0xf481, 0xf5cc, 0xf481, 0xf5cc, 0xf54d, 0xf6af, 0xf54d, 0xf6af, 0xf5ae, +0xf726, 0xf5ae, 0xf726, 0xf5ae, 0xf726, 0xf606, 0xf790, 0xf606, 0xf790, 0xf669, 0xf801, +0xf669, 0xf801, 0xf756, 0xf8f5, 0xf756, 0xf8f5, 0xf8ba, 0xfa5b, 0xf8ba, 0xfa5b, 0xf9f4, +0xfb8f, 0xf9f4, 0xfb8f, 0xfb02, 0xfc8f, 0xfb02, 0xfc8f, 0xfb02, 0xfc8f, 0xfbeb, 0xfd63, +0xfbeb, 0xfd63, 0xfcbf, 0xfe1a, 0xfcbf, 0xfe1a, 0xfdb9, 0xfeef, 0xfdb9, 0xfeef, 0xff32, +0x3c, 0xff32, 0x3c, 0x126, 0x1ff, 0x126, 0x1ff, 0x126, 0x1ff, 0x35d, 0x401, +0x35d, 0x401, 0x599, 0x605, 0x599, 0x605, 0x75b, 0x78c, 0x75b, 0x78c, 0x8df, +0x8d6, 0x8df, 0x8d6, 0xa7b, 0xa39, 0xa7b, 0xa39, 0xc09, 0xb90, 0xc09, 0xb90, +0xc09, 0xb90, 0xd6a, 0xcbf, 0xd6a, 0xcbf, 0xe9a, 0xdc2, 0xe9a, 0xdc2, 0xf9c, +0xe9d, 0xf9c, 0xe9d, 0x1028, 0xf0a, 0x1028, 0xf0a, 0x1074, 0xf3e, 0x1074, 0xf3e, +0x1091, 0xf4a, 0x1091, 0xf4a, 0x1091, 0xf4a, 0xfe7, 0xe98, 0xfe7, 0xe98, 0xeb1, +0xd60, 0xeb1, 0xd60, 0xd7f, 0xc35, 0xd7f, 0xc35, 0xc3b, 0xafd, 0xc3b, 0xafd, +0xa54, 0x929, 0xa54, 0x929, 0xa54, 0x929, 0x7eb, 0x6d7, 0x7eb, 0x6d7, 0x5c6, +0x4cd, 0x5c6, 0x4cd, 0x441, 0x366, 0x441, 0x366, 0x348, 0x28d, 0x348, 0x28d, +0x275, 0x1db, 0x275, 0x1db, 0x1ce, 0x155, 0x1ce, 0x155, 0x1ce, 0x155, 0x150, +0xf8, 0x150, 0xf8, 0x8c, 0x54, 0x8c, 0x54, 0xff6d, 0xff54, 0xff6d, 0xff54, +0xfdec, 0xfdf1, 0xfdec, 0xfdf1, 0xfc25, 0xfc46, 0xfc25, 0xfc46, 0xfa5c, 0xfa99, 0xfa5c, +0xfa99, 0xfa5c, 0xfa99, 0xf8e8, 0xf940, 0xf8e8, 0xf940, 0xf7a6, 0xf816, 0xf7a6, 0xf816, +0xf5fb, 0xf684, 0xf5fb, 0xf684, 0xf425, 0xf4c8, 0xf425, 0xf4c8, 0xf2b9, 0xf374, 0xf2b9, +0xf374, 0xf2b9, 0xf374, 0xf17f, 0xf252, 0xf17f, 0xf252, 0xf031, 0xf11d, 0xf031, 0xf11d, +0xef44, 0xf04a, 0xef44, 0xf04a, 0xee9f, 0xefbf, 0xee9f, 0xefbf, 0xedaf, 0xeee7, 0xedaf, +0xeee7, 0xecf7, 0xee48, 0xecf7, 0xee48, 0xecf7, 0xee48, 0xeccb, 0xee33, 0xeccb, 0xee33, +0xecac, 0xee28, 0xecac, 0xee28, 0xec7a, 0xee08, 0xec7a, 0xee08, 0xec6d, 0xee0a, 0xec6d, +0xee0a, 0xecb3, 0xee5b, 0xecb3, 0xee5b, 0xed45, 0xeef1, 0xed45, 0xeef1, 0xed45, 0xeef1, +0xedf1, 0xef9d, 0xedf1, 0xef9d, 0xeee3, 0xf088, 0xeee3, 0xf088, 0xf063, 0xf1fb, 0xf063, +0xf1fb, 0xf229, 0xf3ab, 0xf229, 0xf3ab, 0xf401, 0xf568, 0xf401, 0xf568, 0xf401, 0xf568, +0xf5d2, 0xf716, 0xf5d2, 0xf716, 0xf762, 0xf87c, 0xf762, 0xf87c, 0xf8e2, 0xf9cd, 0xf8e2, +0xf9cd, 0xfa5a, 0xfb11, 0xfa5a, 0xfb11, 0xfbb4, 0xfc33, 0xfbb4, 0xfc33, 0xfcf5, 0xfd37, +0xfcf5, 0xfd37, 0xfcf5, 0xfd37, 0xfe1f, 0xfe23, 0xfe1f, 0xfe23, 0xff9c, 0xff61, 0xff9c, +0xff61, 0x16c, 0xf2, 0x16c, 0xf2, 0x31c, 0x264, 0x31c, 0x264, 0x4dd, 0x3ea, +0x4dd, 0x3ea, 0x6e4, 0x5ba, 0x6e4, 0x5ba, 0x6e4, 0x5ba, 0x92b, 0x7ce, 0x92b, +0x7ce, 0xb94, 0xa0a, 0xb94, 0xa0a, 0xdc9, 0xc16, 0xdc9, 0xc16, 0xf8b, 0xdb6, +0xf8b, 0xdb6, 0x10ac, 0xebc, 0x10ac, 0xebc, 0x10ac, 0xebc, 0x11c4, 0xfbd, 0x11c4, +0xfbd, 0x1313, 0x10fb, 0x1313, 0x10fb, 0x1414, 0x11f1, 0x1414, 0x11f1, 0x14ef, 0x12c5, +0x14ef, 0x12c5, 0x158a, 0x135d, 0x158a, 0x135d, 0x160f, 0x13e2, 0x160f, 0x13e2, 0x160f, +0x13e2, 0x169f, 0x1475, 0x169f, 0x1475, 0x16c7, 0x14a1, 0x16c7, 0x14a1, 0x16b2, 0x1492, +0x16b2, 0x1492, 0x166e, 0x1455, 0x166e, 0x1455, 0x1624, 0x1412, 0x1624, 0x1412, 0x1624, +0x1412, 0x15cf, 0x13c4, 0x15cf, 0x13c4, 0x156d, 0x1369, 0x156d, 0x1369, 0x154f, 0x1352, +0x154f, 0x1352, 0x1536, 0x1341, 0x1536, 0x1341, 0x1568, 0x137b, 0x1568, 0x137b, 0x15bc, +0x13d7, 0x15bc, 0x13d7, 0x15bc, 0x13d7, 0x159e, 0x13c2, 0x159e, 0x13c2, 0x153c, 0x136b, +0x153c, 0x136b, 0x14df, 0x131a, 0x14df, 0x131a, 0x14d2, 0x131c, 0x14d2, 0x131c, 0x14da, +0x1337, 0x14da, 0x1337, 0x14e0, 0x1351, 0x14e0, 0x1351, 0x14e0, 0x1351, 0x14b2, 0x133b, +0x14b2, 0x133b, 0x13e0, 0x1283, 0x13e0, 0x1283, 0x12c0, 0x117f, 0x12c0, 0x117f, 0x1180, +0x105f, 0x1180, 0x105f, 0x1023, 0xf22, 0x1023, 0xf22, 0x1023, 0xf22, 0xeac, 0xdcd, +0xeac, 0xdcd, 0xd64, 0xca8, 0xd64, 0xca8, 0xcc0, 0xc26, 0xcc0, 0xc26, 0xc52, +0xbd8, 0xc52, 0xbd8, 0xba5, 0xb4b, 0xba5, 0xb4b, 0xaed, 0xaaf, 0xaed, 0xaaf, +0xaed, 0xaaf, 0xab9, 0xa95, 0xab9, 0xa95, 0xae7, 0xad9, 0xae7, 0xad9, 0xa9e, +0xaa1, 0xa9e, 0xaa1, 0x9f0, 0xa01, 0x9f0, 0xa01, 0x93d, 0x958, 0x93d, 0x958, +0x88c, 0x8ad, 0x88c, 0x8ad, 0x88c, 0x8ad, 0x7b9, 0x7dd, 0x7b9, 0x7dd, 0x6a3, +0x6c7, 0x6a3, 0x6c7, 0x576, 0x597, 0x576, 0x597, 0x481, 0x49f, 0x481, 0x49f, +0x439, 0x452, 0x439, 0x452, 0x439, 0x452, 0x427, 0x43d, 0x427, 0x43d, 0x373, +0x387, 0x373, 0x387, 0x21a, 0x22e, 0x21a, 0x22e, 0x5b, 0x73, 0x5b, 0x73, +0xfe7c, 0xfe9a, 0xfe7c, 0xfe9a, 0xfc9a, 0xfcc4, 0xfc9a, 0xfcc4, 0xfc9a, 0xfcc4, 0xfb1c, +0xfb56, 0xfb1c, 0xfb56, 0xfa04, 0xfa52, 0xfa04, 0xfa52, 0xf8b7, 0xf91d, 0xf8b7, 0xf91d, +0xf732, 0xf7b5, 0xf732, 0xf7b5, 0xf5ab, 0xf64d, 0xf5ab, 0xf64d, 0xf470, 0xf534, 0xf470, +0xf534, 0xf470, 0xf534, 0xf32b, 0xf412, 0xf32b, 0xf412, 0xf18a, 0xf295, 0xf18a, 0xf295, +0xf03b, 0xf169, 0xf03b, 0xf169, 0xef0b, 0xf05a, 0xef0b, 0xf05a, 0xed8a, 0xeef7, 0xed8a, +0xeef7, 0xed8a, 0xeef7, 0xec0b, 0xed92, 0xec0b, 0xed92, 0xead6, 0xec72, 0xead6, 0xec72, +0xe9de, 0xeb89, 0xe9de, 0xeb89, 0xe8da, 0xea8f, 0xe8da, 0xea8f, 0xe7ed, 0xe9a4, 0xe7ed, +0xe9a4, 0xe72d, 0xe8e1, 0xe72d, 0xe8e1, 0xe72d, 0xe8e1, 0xe676, 0xe820, 0xe676, 0xe820, +0xe624, 0xe7bf, 0xe624, 0xe7bf, 0xe6a4, 0xe82b, 0xe6a4, 0xe82b, 0xe77a, 0xe8e9, 0xe77a, +0xe8e9, 0xe7d9, 0xe92d, 0xe7d9, 0xe92d, 0xe7db, 0xe911, 0xe7db, 0xe911, 0xe7db, 0xe911, +0xe816, 0xe92f, 0xe816, 0xe92f, 0xe8be, 0xe9b9, 0xe8be, 0xe9b9, 0xe99f, 0xea7e, 0xe99f, +0xea7e, 0xea8c, 0xeb51, 0xea8c, 0xeb51, 0xeb71, 0xec21, 0xeb71, 0xec21, 0xeb71, 0xec21, +0xec3f, 0xecdd, 0xec3f, 0xecdd, 0xecd8, 0xed69, 0xecd8, 0xed69, 0xed28, 0xedb0, 0xed28, +0xedb0, 0xed61, 0xede5, 0xed61, 0xede5, 0xede2, 0xee66, 0xede2, 0xee66, 0xeecc, 0xef54, +0xeecc, 0xef54, 0xeecc, 0xef54, 0xf018, 0xf0a7, 0xf018, 0xf0a7, 0xf178, 0xf210, 0xf178, +0xf210, 0xf28b, 0xf32c, 0xf28b, 0xf32c, 0xf3a5, 0xf451, 0xf3a5, 0xf451, 0xf4fd, 0xf5b1, +0xf4fd, 0xf5b1, 0xf650, 0xf70a, 0xf650, 0xf70a, 0xf650, 0xf70a, 0xf788, 0xf845, 0xf788, +0xf845, 0xf8b5, 0xf971, 0xf8b5, 0xf971, 0xf9ed, 0xfaa3, 0xf9ed, 0xfaa3, 0xfb09, 0xfbb3, +0xfb09, 0xfbb3, 0xfc43, 0xfcdc, 0xfc43, 0xfcdc, 0xfc43, 0xfcdc, 0xfd8f, 0xfe12, 0xfd8f, +0xfe12, 0xfe7c, 0xfee3, 0xfe7c, 0xfee3, 0xff79, 0xffc0, 0xff79, 0xffc0, 0xfb, 0x11e, +0xfb, 0x11e, 0x2f8, 0x2f4, 0x2f8, 0x2f4, 0x4eb, 0x4be, 0x4eb, 0x4be, 0x4eb, +0x4be, 0x6a7, 0x651, 0x6a7, 0x651, 0x870, 0x7f1, 0x870, 0x7f1, 0xa5d, 0x9b6, +0xa5d, 0x9b6, 0xc91, 0xbc7, 0xc91, 0xbc7, 0xe95, 0xdab, 0xe95, 0xdab, 0x1045, +0xf41, 0x1045, 0xf41, 0x1045, 0xf41, 0x11b1, 0x1099, 0x11b1, 0x1099, 0x1299, 0x1173, +0x1299, 0x1173, 0x130e, 0x11e1, 0x130e, 0x11e1, 0x1300, 0x11d5, 0x1300, 0x11d5, 0x129f, +0x117b, 0x129f, 0x117b, 0x129f, 0x117b, 0x11fd, 0x10e7, 0x11fd, 0x10e7, 0x112e, 0x102e, +0x112e, 0x102e, 0xff0, 0xf09, 0xff0, 0xf09, 0xdcf, 0xd08, 0xdcf, 0xd08, 0xb88, +0xae4, 0xb88, 0xae4, 0x964, 0x8e5, 0x964, 0x8e5, 0x964, 0x8e5, 0x71e, 0x6c7, +0x71e, 0x6c7, 0x4ee, 0x4bf, 0x4ee, 0x4bf, 0x376, 0x36f, 0x376, 0x36f, 0x301, +0x322, 0x301, 0x322, 0x2ed, 0x335, 0x2ed, 0x335, 0x2cd, 0x339, 0x2cd, 0x339, +0x2cd, 0x339, 0x22c, 0x2bb, 0x22c, 0x2bb, 0xf5, 0x1a3, 0xf5, 0x1a3, 0xffb9, +0x85, 0xffb9, 0x85, 0xfe81, 0xff68, 0xfe81, 0xff68, 0xfd2e, 0xfe2e, 0xfd2e, 0xfe2e, +0xfd2e, 0xfe2e, 0xfbc2, 0xfcda, 0xfbc2, 0xfcda, 0xfa73, 0xfba0, 0xfa73, 0xfba0, 0xf940, +0xfa83, 0xf940, 0xfa83, 0xf7f2, 0xf949, 0xf7f2, 0xf949, 0xf6d8, 0xf842, 0xf6d8, 0xf842, +0xf60d, 0xf789, 0xf60d, 0xf789, 0xf60d, 0xf789, 0xf55d, 0xf6ec, 0xf55d, 0xf6ec, 0xf479, +0xf61a, 0xf479, 0xf61a, 0xf366, 0xf517, 0xf366, 0xf517, 0xf2b4, 0xf476, 0xf2b4, 0xf476, +0xf21e, 0xf3ee, 0xf21e, 0xf3ee, 0xf153, 0xf32e, 0xf153, 0xf32e, 0xf153, 0xf32e, 0xf09c, +0xf280, 0xf09c, 0xf280, 0xf00d, 0xf1f7, 0xf00d, 0xf1f7, 0xefc5, 0xf1b0, 0xefc5, 0xf1b0, +0xefa0, 0xf186, 0xefa0, 0xf186, 0xeff5, 0xf1d1, 0xeff5, 0xf1d1, 0xeff5, 0xf1d1, 0xf10e, +0xf2da, 0xf10e, 0xf2da, 0xf24d, 0xf402, 0xf24d, 0xf402, 0xf3a4, 0xf53a, 0xf3a4, 0xf53a, +0xf51c, 0xf68d, 0xf51c, 0xf68d, 0xf697, 0xf7db, 0xf697, 0xf7db, 0xf81c, 0xf92c, 0xf81c, +0xf92c, 0xf81c, 0xf92c, 0xf98d, 0xfa63, 0xf98d, 0xfa63, 0xfaf6, 0xfb8d, 0xfaf6, 0xfb8d, +0xfc40, 0xfc94, 0xfc40, 0xfc94, 0xfd71, 0xfd7e, 0xfd71, 0xfd7e, 0xfec3, 0xfe86, 0xfec3, +0xfe86, 0xfec3, 0xfe86, 0x28, 0xffa1, 0x28, 0xffa1, 0x15b, 0x89, 0x15b, 0x89, +0x23e, 0x124, 0x23e, 0x124, 0x327, 0x1c7, 0x327, 0x1c7, 0x435, 0x294, 0x435, +0x294, 0x52c, 0x34e, 0x52c, 0x34e, 0x52c, 0x34e, 0x632, 0x41e, 0x632, 0x41e, +0x7a8, 0x565, 0x7a8, 0x565, 0x965, 0x6f8, 0x965, 0x6f8, 0xb27, 0x899, 0xb27, +0x899, 0xcc9, 0xa21, 0xcc9, 0xa21, 0xde4, 0xb29, 0xde4, 0xb29, 0xde4, 0xb29, +0xe50, 0xb89, 0xe50, 0xb89, 0xe8d, 0xbc2, 0xe8d, 0xbc2, 0xf19, 0xc4f, 0xf19, +0xc4f, 0xfa5, 0xce1, 0xfa5, 0xce1, 0xff7, 0xd3d, 0xff7, 0xd3d, 0xff7, 0xd3d, +0x1058, 0xdad, 0x1058, 0xdad, 0x10de, 0xe45, 0x10de, 0xe45, 0x1167, 0xee2, 0x1167, +0xee2, 0x1187, 0xf18, 0x1187, 0xf18, 0x110b, 0xeb4, 0x110b, 0xeb4, 0x1040, 0xe01, +0x1040, 0xe01, 0x1040, 0xe01, 0xf82, 0xd5d, 0xf82, 0xd5d, 0xf43, 0xd38, 0xf43, +0xd38, 0xf79, 0xd88, 0xf79, 0xd88, 0xf86, 0xdb0, 0xf86, 0xdb0, 0xf15, 0xd5b, +0xf15, 0xd5b, 0xe79, 0xcdb, 0xe79, 0xcdb, 0xe79, 0xcdb, 0xe34, 0xcb3, 0xe34, +0xcb3, 0xe2b, 0xcc9, 0xe2b, 0xcc9, 0xe0a, 0xcc8, 0xe0a, 0xcc8, 0xe12, 0xcf2, +0xe12, 0xcf2, 0xe45, 0xd47, 0xe45, 0xd47, 0xe45, 0xd47, 0xe25, 0xd4c, 0xe25, +0xd4c, 0xd63, 0xcae, 0xd63, 0xcae, 0xc1f, 0xb91, 0xc1f, 0xb91, 0xabb, 0xa53, +0xabb, 0xa53, 0x9a7, 0x965, 0x9a7, 0x965, 0x946, 0x92a, 0x946, 0x92a, 0x946, +0x92a, 0x910, 0x917, 0x910, 0x917, 0x8af, 0x8d8, 0x8af, 0x8d8, 0x89f, 0x8e7, +0x89f, 0x8e7, 0x912, 0x976, 0x912, 0x976, 0x9f9, 0xa75, 0x9f9, 0xa75, 0xa97, +0xb27, 0xa97, 0xb27, 0xa97, 0xb27, 0xa9b, 0xb39, 0xa9b, 0xb39, 0xa8a, 0xb32, +0xa8a, 0xb32, 0xa77, 0xb23, 0xa77, 0xb23, 0x9f9, 0xaa5, 0x9f9, 0xaa5, 0x8ca, +0x972, 0x8ca, 0x972, 0x8ca, 0x972, 0x765, 0x804, 0x765, 0x804, 0x63e, 0x6d2, +0x63e, 0x6d2, 0x5a7, 0x62c, 0x5a7, 0x62c, 0x588, 0x5fc, 0x588, 0x5fc, 0x554, +0x5b6, 0x554, 0x5b6, 0x4bd, 0x50e, 0x4bd, 0x50e, 0x4bd, 0x50e, 0x391, 0x3d2, +0x391, 0x3d2, 0x272, 0x2a5, 0x272, 0x2a5, 0x197, 0x1be, 0x197, 0x1be, 0xca, +0xe8, 0xca, 0xe8, 0x3f, 0x57, 0x3f, 0x57, 0xff86, 0xff9d, 0xff86, 0xff9d, +0xff86, 0xff9d, 0xfe86, 0xfea0, 0xfe86, 0xfea0, 0xfd52, 0xfd72, 0xfd52, 0xfd72, 0xfbe1, +0xfc0c, 0xfbe1, 0xfc0c, 0xfa37, 0xfa70, 0xfa37, 0xfa70, 0xf875, 0xf8bf, 0xf875, 0xf8bf, +0xf875, 0xf8bf, 0xf742, 0xf79f, 0xf742, 0xf79f, 0xf64a, 0xf6bb, 0xf64a, 0xf6bb, 0xf4e6, +0xf56c, 0xf4e6, 0xf56c, 0xf320, 0xf3ba, 0xf320, 0xf3ba, 0xf151, 0xf1ff, 0xf151, 0xf1ff, +0xefcf, 0xf08f, 0xefcf, 0xf08f, 0xefcf, 0xf08f, 0xee6d, 0xef3c, 0xee6d, 0xef3c, 0xed13, +0xedef, 0xed13, 0xedef, 0xebd3, 0xecb9, 0xebd3, 0xecb9, 0xeaf5, 0xebe0, 0xeaf5, 0xebe0, +0xeada, 0xebc8, 0xeada, 0xebc8, 0xeb42, 0xec2f, 0xeb42, 0xec2f, 0xeb42, 0xec2f, 0xebde, +0xecc8, 0xebde, 0xecc8, 0xec6c, 0xed50, 0xec6c, 0xed50, 0xecbe, 0xed9a, 0xecbe, 0xed9a, +0xed50, 0xee24, 0xed50, 0xee24, 0xee44, 0xef0f, 0xee44, 0xef0f, 0xee44, 0xef0f, 0xef38, +0xeffb, 0xef38, 0xeffb, 0xf03e, 0xf0f9, 0xf03e, 0xf0f9, 0xf1a3, 0xf259, 0xf1a3, 0xf259, +0xf31e, 0xf3d1, 0xf31e, 0xf3d1, 0xf402, 0xf4b5, 0xf402, 0xf4b5, 0xf45e, 0xf513, 0xf45e, +0xf513, 0xf45e, 0xf513, 0xf45e, 0xf519, 0xf45e, 0xf519, 0xf43a, 0xf4fe, 0xf43a, 0xf4fe, +0xf470, 0xf53f, 0xf470, 0xf53f, 0xf4e1, 0xf5bd, 0xf4e1, 0xf5bd, 0xf54c, 0xf637, 0xf54c, +0xf637, 0xf5bb, 0xf6b6, 0xf5bb, 0xf6b6, 0xf5bb, 0xf6b6, 0xf681, 0xf78b, 0xf681, 0xf78b, +0xf79a, 0xf8b3, 0xf79a, 0xf8b3, 0xf8a9, 0xf9ce, 0xf8a9, 0xf9ce, 0xf9ac, 0xfada, 0xf9ac, +0xfada, 0xfa7b, 0xfbaf, 0xfa7b, 0xfbaf, 0xfa7b, 0xfbaf, 0xfb4a, 0xfc7e, 0xfb4a, 0xfc7e, +0xfc54, 0xfd84, 0xfc54, 0xfd84, 0xfd68, 0xfe8e, 0xfd68, 0xfe8e, 0xfe7f, 0xff96, 0xfe7f, +0xff96, 0xff93, 0x94, 0xff93, 0x94, 0xa4, 0x18a, 0xa4, 0x18a, 0xa4, 0x18a, +0x1cc, 0x292, 0x1cc, 0x292, 0x364, 0x405, 0x364, 0x405, 0x527, 0x5a0, 0x527, +0x5a0, 0x6b5, 0x703, 0x6b5, 0x703, 0x87b, 0x89c, 0x87b, 0x89c, 0xa3c, 0xa2f, +0xa3c, 0xa2f, 0xa3c, 0xa2f, 0xb7c, 0xb43, 0xb7c, 0xb43, 0xc5c, 0xbf7, 0xc5c, +0xbf7, 0xd17, 0xc89, 0xd17, 0xc89, 0xdb7, 0xd05, 0xdb7, 0xd05, 0xe24, 0xd51, +0xe24, 0xd51, 0xe24, 0xd51, 0xe7c, 0xd8f, 0xe7c, 0xd8f, 0xec9, 0xdc6, 0xec9, +0xdc6, 0xf06, 0xdf4, 0xf06, 0xdf4, 0xf1e, 0xe04, 0xf1e, 0xe04, 0xe91, 0xd75, +0xe91, 0xd75, 0xd2f, 0xc17, 0xd2f, 0xc17, 0xd2f, 0xc17, 0xb52, 0xa43, 0xb52, +0xa43, 0x944, 0x844, 0x944, 0x844, 0x720, 0x633, 0x720, 0x633, 0x4c8, 0x3f3, +0x4c8, 0x3f3, 0x28c, 0x1d1, 0x28c, 0x1d1, 0x10d, 0x6f, 0x10d, 0x6f, 0x10d, +0x6f, 0x3d, 0xffbe, 0x3d, 0xffbe, 0xff93, 0xff33, 0xff93, 0xff33, 0xfeb8, 0xfe78, +0xfeb8, 0xfe78, 0xfdc4, 0xfda4, 0xfdc4, 0xfda4, 0xfc99, 0xfc98, 0xfc99, 0xfc98, 0xfc99, +0xfc98, 0xfae8, 0xfb06, 0xfae8, 0xfb06, 0xf8d9, 0xf914, 0xf8d9, 0xf914, 0xf6c4, 0xf71d, +0xf6c4, 0xf71d, 0xf4e1, 0xf556, 0xf4e1, 0xf556, 0xf333, 0xf3c4, 0xf333, 0xf3c4, 0xf1b7, +0xf262, 0xf1b7, 0xf262, 0xf1b7, 0xf262, 0xf063, 0xf128, 0xf063, 0xf128, 0xef54, 0xf033, +0xef54, 0xf033, 0xee93, 0xef8c, 0xee93, 0xef8c, 0xedde, 0xeef0, 0xedde, 0xeef0, 0xed11, +0xee3c, 0xed11, 0xee3c, 0xed11, 0xee3c, 0xec07, 0xed4a, 0xec07, 0xed4a, 0xeb04, 0xec60, +0xeb04, 0xec60, 0xea5c, 0xebd0, 0xea5c, 0xebd0, 0xea33, 0xebbe, 0xea33, 0xebbe, 0xea80, +0xec1f, 0xea80, 0xec1f, 0xeace, 0xec80, 0xeace, 0xec80, 0xeace, 0xec80, 0xeaf8, 0xecba, +0xeaf8, 0xecba, 0xeb13, 0xece1, 0xeb13, 0xece1, 0xeb87, 0xed5d, 0xeb87, 0xed5d, 0xec86, +0xee5f, 0xec86, 0xee5f, 0xedb9, 0xef8f, 0xedb9, 0xef8f, 0xef06, 0xf0d4, 0xef06, 0xf0d4, +0xef06, 0xf0d4, 0xf065, 0xf225, 0xf065, 0xf225, 0xf1e3, 0xf38d, 0xf1e3, 0xf38d, 0xf354, +0xf4e2, 0xf354, 0xf4e2, 0xf4d6, 0xf641, 0xf4d6, 0xf641, 0xf69b, 0xf7dc, 0xf69b, 0xf7dc, +0xf69b, 0xf7dc, 0xf850, 0xf961, 0xf850, 0xf961, 0xfa05, 0xfae2, 0xfa05, 0xfae2, 0xfbe1, +0xfc83, 0xfbe1, 0xfc83, 0xfdc8, 0xfe2b, 0xfdc8, 0xfe2b, 0xff67, 0xff88, 0xff67, 0xff88, +0xf6, 0xd4, 0xf6, 0xd4, 0xf6, 0xd4, 0x30f, 0x2a7, 0x30f, 0x2a7, 0x55c, +0x4ae, 0x55c, 0x4ae, 0x763, 0x670, 0x763, 0x670, 0x929, 0x7f3, 0x929, 0x7f3, +0xae6, 0x970, 0xae6, 0x970, 0xcce, 0xb1c, 0xcce, 0xb1c, 0xcce, 0xb1c, 0xf08, +0xd1d, 0xf08, 0xd1d, 0x1154, 0xf35, 0x1154, 0xf35, 0x1303, 0x10b6, 0x1303, 0x10b6, +0x13f8, 0x1182, 0x13f8, 0x1182, 0x14b6, 0x121e, 0x14b6, 0x121e, 0x14b6, 0x121e, 0x1590, +0x12db, 0x1590, 0x12db, 0x165f, 0x1394, 0x165f, 0x1394, 0x16f8, 0x141b, 0x16f8, 0x141b, +0x176e, 0x1486, 0x176e, 0x1486, 0x17d5, 0x14e7, 0x17d5, 0x14e7, 0x17ff, 0x1510, 0x17ff, +0x1510, 0x17ff, 0x1510, 0x17aa, 0x14bf, 0x17aa, 0x14bf, 0x1723, 0x1440, 0x1723, 0x1440, +0x16d6, 0x13ff, 0x16d6, 0x13ff, 0x168c, 0x13c5, 0x168c, 0x13c5, 0x1642, 0x138f, 0x1642, +0x138f, 0x1642, 0x13a6, 0x1642, 0x13a6, 0x1642, 0x13a6, 0x161c, 0x139a, 0x161c, 0x139a, +0x15c6, 0x1360, 0x15c6, 0x1360, 0x15d8, 0x1392, 0x15d8, 0x1392, 0x162d, 0x1409, 0x162d, +0x1409, 0x1614, 0x1414, 0x1614, 0x1414, 0x1614, 0x1414, 0x1566, 0x138d, 0x1566, 0x138d, +0x14fa, 0x1348, 0x14fa, 0x1348, 0x1519, 0x1391, 0x1519, 0x1391, 0x1530, 0x13d4, 0x1530, +0x13d4, 0x1499, 0x1369, 0x1499, 0x1369, 0x12ff, 0x11fb, 0x12ff, 0x11fb, 0x12ff, 0x11fb, +0x1100, 0x1029, 0x1100, 0x1029, 0xf19, 0xe6f, 0xf19, 0xe6f, 0xd61, 0xce2, 0xd61, +0xce2, 0xbcd, 0xb78, 0xbcd, 0xb78, 0xa7b, 0xa4e, 0xa7b, 0xa4e, 0x9da, 0x9d2, +0x9da, 0x9d2, 0x9da, 0x9d2, 0x9b6, 0x9d1, 0x9b6, 0x9d1, 0x9b8, 0x9f2, 0x9b8, +0x9f2, 0x97f, 0x9d4, 0x97f, 0x9d4, 0x91e, 0x98a, 0x91e, 0x98a, 0x926, 0x9a5, +0x926, 0x9a5, 0x926, 0x9a5, 0x94c, 0x9d9, 0x94c, 0x9d9, 0x8f6, 0x98e, 0x8f6, +0x98e, 0x815, 0x8b4, 0x815, 0x8b4, 0x6ef, 0x791, 0x6ef, 0x791, 0x5a0, 0x641, +0x5a0, 0x641, 0x4ba, 0x559, 0x4ba, 0x559, 0x4ba, 0x559, 0x4b5, 0x54f, 0x4b5, +0x54f, 0x4bc, 0x551, 0x4bc, 0x551, 0x41a, 0x4a8, 0x41a, 0x4a8, 0x2d9, 0x361, +0x2d9, 0x361, 0x139, 0x1bc, 0x139, 0x1bc, 0xff49, 0xffc8, 0xff49, 0xffc8, 0xff49, +0xffc8, 0xfd1b, 0xfd98, 0xfd1b, 0xfd98, 0xfb20, 0xfb9d, 0xfb20, 0xfb9d, 0xf992, 0xfa12, +0xf992, 0xfa12, 0xf872, 0xf8f8, 0xf872, 0xf8f8, 0xf7c5, 0xf855, 0xf7c5, 0xf855, 0xf7c5, +0xf855, 0xf730, 0xf7cb, 0xf730, 0xf7cb, 0xf657, 0xf700, 0xf657, 0xf700, 0xf558, 0xf612, +0xf558, 0xf612, 0xf435, 0xf500, 0xf435, 0xf500, 0xf2bb, 0xf39a, 0xf2bb, 0xf39a, 0xf0f1, +0xf1e2, 0xf0f1, 0xf1e2, 0xf0f1, 0xf1e2, 0xef30, 0xf034, 0xef30, 0xf034, 0xedea, 0xef00, +0xedea, 0xef00, 0xed26, 0xee4c, 0xed26, 0xee4c, 0xec87, 0xedbb, 0xec87, 0xedbb, 0xebc5, +0xed05, 0xebc5, 0xed05, 0xeaef, 0xec38, 0xeaef, 0xec38, 0xeaef, 0xec38, 0xea09, 0xeb57, +0xea09, 0xeb57, 0xe944, 0xea95, 0xe944, 0xea95, 0xe8d2, 0xea21, 0xe8d2, 0xea21, 0xe875, +0xe9c1, 0xe875, 0xe9c1, 0xe829, 0xe96d, 0xe829, 0xe96d, 0xe829, 0xe96d, 0xe81e, 0xe959, +0xe81e, 0xe959, 0xe87d, 0xe9ad, 0xe87d, 0xe9ad, 0xe917, 0xea3b, 0xe917, 0xea3b, 0xe9c8, +0xeadf, 0xe9c8, 0xeadf, 0xeaaf, 0xebb9, 0xeaaf, 0xebb9, 0xebcc, 0xecca, 0xebcc, 0xecca, +0xebcc, 0xecca, 0xed0c, 0xedff, 0xed0c, 0xedff, 0xee1d, 0xef07, 0xee1d, 0xef07, 0xeed2, +0xefb4, 0xeed2, 0xefb4, 0xef2c, 0xf009, 0xef2c, 0xf009, 0xef6d, 0xf047, 0xef6d, 0xf047, +0xefe9, 0xf0c2, 0xefe9, 0xf0c2, 0xefe9, 0xf0c2, 0xf09d, 0xf178, 0xf09d, 0xf178, 0xf166, +0xf244, 0xf166, 0xf244, 0xf21d, 0xf300, 0xf21d, 0xf300, 0xf30a, 0xf3f3, 0xf30a, 0xf3f3, +0xf451, 0xf541, 0xf451, 0xf541, 0xf451, 0xf541, 0xf5be, 0xf6b3, 0xf5be, 0xf6b3, 0xf722, +0xf81b, 0xf722, 0xf81b, 0xf842, 0xf93e, 0xf842, 0xf93e, 0xf912, 0xfa0e, 0xf912, 0xfa0e, +0xf999, 0xfa92, 0xf999, 0xfa92, 0xfa7b, 0xfb6e, 0xfa7b, 0xfb6e, 0xfa7b, 0xfb6e, 0xfbd3, +0xfcbc, 0xfbd3, 0xfcbc, 0xfd1d, 0xfdf8, 0xfd1d, 0xfdf8, 0xfe63, 0xff2c, 0xfe63, 0xff2c, +0xff82, 0x34, 0xff82, 0x34, 0x6f, 0x107, 0x6f, 0x107, 0x134, 0x1ae, 0x134, +0x1ae, 0x134, 0x1ae, 0x236, 0x290, 0x236, 0x290, 0x40b, 0x442, 0x40b, 0x442, +0x668, 0x67b, 0x668, 0x67b, 0x8e5, 0x8d4, 0x8e5, 0x8d4, 0xb42, 0xb0d, 0xb42, +0xb0d, 0xb42, 0xb0d, 0xd8b, 0xd32, 0xd8b, 0xd32, 0xfb3, 0xf3a, 0xfb3, 0xf3a, +0x1149, 0x10b1, 0x1149, 0x10b1, 0x1259, 0x11a7, 0x1259, 0x11a7, 0x130e, 0x1245, 0x130e, +0x1245, 0x1375, 0x1299, 0x1375, 0x1299, 0x1375, 0x1299, 0x13bb, 0x12d2, 0x13bb, 0x12d2, +0x13b3, 0x12c1, 0x13b3, 0x12c1, 0x1301, 0x120a, 0x1301, 0x120a, 0x11b3, 0x10bd, 0x11b3, +0x10bd, 0x1031, 0xf40, 0x1031, 0xf40, 0x1031, 0xf40, 0xe63, 0xd7b, 0xe63, 0xd7b, +0xbec, 0xb10, 0xbec, 0xb10, 0x95a, 0x88d, 0x95a, 0x88d, 0x758, 0x69c, 0x758, +0x69c, 0x5e7, 0x53f, 0x5e7, 0x53f, 0x4cc, 0x438, 0x4cc, 0x438, 0x4cc, 0x438, +0x3f4, 0x375, 0x3f4, 0x375, 0x35d, 0x2f4, 0x35d, 0x2f4, 0x29a, 0x245, 0x29a, +0x245, 0x1b7, 0x178, 0x1b7, 0x178, 0xe6, 0xbb, 0xe6, 0xbb, 0xffde, 0xffc6, +0xffde, 0xffc6, 0xffde, 0xffc6, 0xfe78, 0xfe72, 0xfe78, 0xfe72, 0xfcc0, 0xfcce, 0xfcc0, +0xfcce, 0xfb50, 0xfb6f, 0xfb50, 0xfb6f, 0xfa66, 0xfa97, 0xfa66, 0xfa97, 0xf9d5, 0xfa18, +0xf9d5, 0xfa18, 0xf9d5, 0xfa18, 0xf95b, 0xf9b1, 0xf95b, 0xf9b1, 0xf891, 0xf8f9, 0xf891, +0xf8f9, 0xf771, 0xf7ed, 0xf771, 0xf7ed, 0xf5f6, 0xf686, 0xf5f6, 0xf686, 0xf469, 0xf50e, +0xf469, 0xf50e, 0xf300, 0xf3bc, 0xf300, 0xf3bc, 0xf300, 0xf3bc, 0xf1e3, 0xf2b6, 0xf1e3, +0xf2b6, 0xf14e, 0xf238, 0xf14e, 0xf238, 0xf0ff, 0xf1ff, 0xf0ff, 0xf1ff, 0xf0c2, 0xf1d9, +0xf0c2, 0xf1d9, 0xf067, 0xf193, 0xf067, 0xf193, 0xf039, 0xf179, 0xf039, 0xf179, 0xf039, +0xf179, 0xf06a, 0xf1bb, 0xf06a, 0xf1bb, 0xf0ac, 0xf20b, 0xf0ac, 0xf20b, 0xf11b, 0xf285, +0xf11b, 0xf285, 0xf1d1, 0xf341, 0xf1d1, 0xf341, 0xf2f0, 0xf461, 0xf2f0, 0xf461, 0xf2f0, +0xf461, 0xf457, 0xf5c5, 0xf457, 0xf5c5, 0xf5d5, 0xf739, 0xf5d5, 0xf739, 0xf72e, 0xf883, +0xf72e, 0xf883, 0xf844, 0xf984, 0xf844, 0xf984, 0xf9bd, 0xfae2, 0xf9bd, 0xfae2, 0xfb85, +0xfc8b, 0xfb85, 0xfc8b, 0xfb85, 0xfc8b, 0xfd06, 0xfde7, 0xfd06, 0xfde7, 0xfe24, 0xfedb, +0xfe24, 0xfedb, 0xfef3, 0xff7c, 0xfef3, 0xff7c, 0xffbf, 0x18, 0xffbf, 0x18, 0x92, +0xb8, 0x92, 0xb8, 0x159, 0x14a, 0x159, 0x14a, 0x159, 0x14a, 0x21f, 0x1da, +0x21f, 0x1da, 0x312, 0x298, 0x312, 0x298, 0x48f, 0x3e0, 0x48f, 0x3e0, 0x673, +0x592, 0x673, 0x592, 0x857, 0x745, 0x857, 0x745, 0x857, 0x745, 0x9ee, 0x8ae, +0x9ee, 0x8ae, 0xb1f, 0x9b4, 0xb1f, 0x9b4, 0xc43, 0xab1, 0xc43, 0xab1, 0xd6a, +0xbb5, 0xd6a, 0xbb5, 0xe57, 0xc82, 0xe57, 0xc82, 0xf2a, 0xd3a, 0xf2a, 0xd3a, +0xf2a, 0xd3a, 0x1027, 0xe1f, 0x1027, 0xe1f, 0x1101, 0xee5, 0x1101, 0xee5, 0x1148, +0xf1c, 0x1148, 0xf1c, 0x116f, 0xf36, 0x116f, 0xf36, 0x119a, 0xf58, 0x119a, 0xf58, +0x116b, 0xf22, 0x116b, 0xf22, 0x116b, 0xf22, 0x1105, 0xeb8, 0x1105, 0xeb8, 0x1080, +0xe32, 0x1080, 0xe32, 0xfcb, 0xd7e, 0xfcb, 0xd7e, 0xec7, 0xc7d, 0xec7, 0xc7d, +0xdd3, 0xb8f, 0xdd3, 0xb8f, 0xdd3, 0xb8f, 0xd85, 0xb49, 0xd85, 0xb49, 0xdd1, +0xb9f, 0xdd1, 0xb9f, 0xe43, 0xc1d, 0xe43, 0xc1d, 0xe61, 0xc49, 0xe61, 0xc49, +0xe6c, 0xc65, 0xe6c, 0xc65, 0xe90, 0xc9c, 0xe90, 0xc9c, 0xe90, 0xc9c, 0xe80, +0xca2, 0xe80, 0xca2, 0xe36, 0xc70, 0xe36, 0xc70, 0xdb7, 0xc0a, 0xdb7, 0xc0a, +0xcdc, 0xb4b, 0xcdc, 0xb4b, 0xba9, 0xa35, 0xba9, 0xa35, 0xaac, 0x958, 0xaac, +0x958, 0xaac, 0x958, 0x9bc, 0x888, 0x9bc, 0x888, 0x88e, 0x77a, 0x88e, 0x77a, +0x7f3, 0x701, 0x7f3, 0x701, 0x82d, 0x75b, 0x82d, 0x75b, 0x887, 0x7d6, 0x887, +0x7d6, 0x887, 0x7d6, 0x879, 0x7e6, 0x879, 0x7e6, 0x864, 0x7ef, 0x864, 0x7ef, +0x883, 0x829, 0x883, 0x829, 0x889, 0x849, 0x889, 0x849, 0x886, 0x85e, 0x886, +0x85e, 0x837, 0x823, 0x837, 0x823, 0x837, 0x823, 0x769, 0x767, 0x769, 0x767, +0x625, 0x634, 0x625, 0x634, 0x4f5, 0x511, 0x4f5, 0x511, 0x465, 0x48c, 0x465, +0x48c, 0x3bf, 0x3f0, 0x3bf, 0x3f0, 0x2c3, 0x2fd, 0x2c3, 0x2fd, 0x2c3, 0x2fd, +0x1e8, 0x22a, 0x1e8, 0x22a, 0x172, 0x1bc, 0x172, 0x1bc, 0x124, 0x176, 0x124, +0x176, 0x68, 0xc3, 0x68, 0xc3, 0xff6f, 0xffd5, 0xff6f, 0xffd5, 0xff6f, 0xffd5, +0xfe66, 0xfed7, 0xfe66, 0xfed7, 0xfd43, 0xfdc2, 0xfd43, 0xfdc2, 0xfc4f, 0xfcdd, 0xfc4f, +0xfcdd, 0xfb9c, 0xfc3d, 0xfb9c, 0xfc3d, 0xfae5, 0xfb99, 0xfae5, 0xfb99, 0xf9c9, 0xfa93, +0xf9c9, 0xfa93, 0xf9c9, 0xfa93, 0xf895, 0xf977, 0xf895, 0xf977, 0xf772, 0xf86c, 0xf772, +0xf86c, 0xf5f6, 0xf70a, 0xf5f6, 0xf70a, 0xf435, 0xf562, 0xf435, 0xf562, 0xf27d, 0xf3c3, +0xf27d, 0xf3c3, 0xf12e, 0xf28b, 0xf12e, 0xf28b, 0xf12e, 0xf28b, 0xf032, 0xf1a6, 0xf032, +0xf1a6, 0xef1b, 0xf0a2, 0xef1b, 0xf0a2, 0xedf3, 0xef8b, 0xedf3, 0xef8b, 0xeccd, 0xee73, +0xeccd, 0xee73, 0xebe5, 0xed94, 0xebe5, 0xed94, 0xebe5, 0xed94, 0xeb4e, 0xed03, 0xeb4e, +0xed03, 0xeaee, 0xeca6, 0xeaee, 0xeca6, 0xeb0e, 0xecc5, 0xeb0e, 0xecc5, 0xebc7, 0xed79, +0xebc7, 0xed79, 0xeceb, 0xee94, 0xeceb, 0xee94, 0xedf4, 0xef92, 0xedf4, 0xef92, 0xedf4, +0xef92, 0xeebf, 0xf050, 0xeebf, 0xf050, 0xefa1, 0xf122, 0xefa1, 0xf122, 0xf0a6, 0xf216, +0xf0a6, 0xf216, 0xf1c1, 0xf320, 0xf1c1, 0xf320, 0xf29a, 0xf3e8, 0xf29a, 0xf3e8, 0xf349, +0xf487, 0xf349, 0xf487, 0xf349, 0xf487, 0xf409, 0xf536, 0xf409, 0xf536, 0xf4b5, 0xf5d4, +0xf4b5, 0xf5d4, 0xf52d, 0xf63f, 0xf52d, 0xf63f, 0xf54f, 0xf656, 0xf54f, 0xf656, 0xf57f, +0xf67c, 0xf57f, 0xf67c, 0xf57f, 0xf67c, 0xf5d6, 0xf6ca, 0xf5d6, 0xf6ca, 0xf664, 0xf750, +0xf664, 0xf750, 0xf755, 0xf83a, 0xf755, 0xf83a, 0xf87f, 0xf95d, 0xf87f, 0xf95d, 0xf9dd, +0xfab4, 0xf9dd, 0xfab4, 0xfb08, 0xfbd5, 0xfb08, 0xfbd5, 0xfb08, 0xfbd5, 0xfbee, 0xfcb2, +0xfbee, 0xfcb2, 0xfca6, 0xfd5d, 0xfca6, 0xfd5d, 0xfd53, 0xfdfb, 0xfd53, 0xfdfb, 0xfe6c, +0xff02, 0xfe6c, 0xff02, 0xffb9, 0x38, 0xffb9, 0x38, 0xffb9, 0x38, 0x12a, 0x190, +0x12a, 0x190, 0x283, 0x2cc, 0x283, 0x2cc, 0x382, 0x3ab, 0x382, 0x3ab, 0x446, +0x44b, 0x446, 0x44b, 0x4f8, 0x4d7, 0x4f8, 0x4d7, 0x61c, 0x5d3, 0x61c, 0x5d3, +0x61c, 0x5d3, 0x780, 0x70e, 0x780, 0x70e, 0x8fe, 0x864, 0x8fe, 0x864, 0xad2, +0xa0f, 0xad2, 0xa0f, 0xc69, 0xb7f, 0xc69, 0xb7f, 0xd63, 0xc55, 0xd63, 0xc55, +0xdfe, 0xccf, 0xdfe, 0xccf, 0xdfe, 0xccf, 0xec0, 0xd76, 0xec0, 0xd76, 0xf93, +0xe32, 0xf93, 0xe32, 0x101a, 0xea9, 0x101a, 0xea9, 0x1095, 0xf19, 0x1095, 0xf19, +0x10c1, 0xf43, 0x10c1, 0xf43, 0x10c1, 0xf43, 0x1069, 0xeee, 0x1069, 0xeee, 0xfc5, +0xe54, 0xfc5, 0xe54, 0xecb, 0xd6b, 0xecb, 0xd6b, 0xd5b, 0xc12, 0xd5b, 0xc12, +0xb46, 0xa1a, 0xb46, 0xa1a, 0x8e9, 0x7de, 0x8e9, 0x7de, 0x8e9, 0x7de, 0x6c3, +0x5de, 0x6c3, 0x5de, 0x4f9, 0x43d, 0x4f9, 0x43d, 0x37b, 0x2ea, 0x37b, 0x2ea, +0x1e9, 0x185, 0x1e9, 0x185, 0x61, 0x2b, 0x61, 0x2b, 0xfec8, 0xfec0, 0xfec8, +0xfec0, 0xfec8, 0xfec0, 0xfd18, 0xfd3d, 0xfd18, 0xfd3d, 0xfbdb, 0xfc2b, 0xfbdb, 0xfc2b, +0xfab5, 0xfb2f, 0xfab5, 0xfb2f, 0xf90d, 0xf9ae, 0xf90d, 0xf9ae, 0xf704, 0xf7c9, 0xf704, +0xf7c9, 0xf704, 0xf7c9, 0xf55f, 0xf647, 0xf55f, 0xf647, 0xf42f, 0xf537, 0xf42f, 0xf537, +0xf2d3, 0xf3f8, 0xf2d3, 0xf3f8, 0xf1ae, 0xf2ed, 0xf1ae, 0xf2ed, 0xf109, 0xf260, 0xf109, +0xf260, 0xf068, 0xf1d5, 0xf068, 0xf1d5, 0xf068, 0xf1d5, 0xef6d, 0xf0ef, 0xef6d, 0xf0ef, +0xee5e, 0xeff1, 0xee5e, 0xeff1, 0xed5f, 0xef04, 0xed5f, 0xef04, 0xec6b, 0xee1e, 0xec6b, +0xee1e, 0xebf6, 0xedb7, 0xebf6, 0xedb7, 0xebfd, 0xedc8, 0xebfd, 0xedc8, 0xebfd, 0xedc8, +0xec39, 0xee0e, 0xec39, 0xee0e, 0xec71, 0xee4d, 0xec71, 0xee4d, 0xec7c, 0xee5b, 0xec7c, +0xee5b, 0xeca5, 0xee86, 0xeca5, 0xee86, 0xed1b, 0xeefa, 0xed1b, 0xeefa, 0xed1b, 0xeefa, +0xeda3, 0xef7b, 0xeda3, 0xef7b, 0xee10, 0xefdd, 0xee10, 0xefdd, 0xeee3, 0xf0a0, 0xeee3, +0xf0a0, 0xf04b, 0xf1f4, 0xf04b, 0xf1f4, 0xf213, 0xf3a1, 0xf213, 0xf3a1, 0xf424, 0xf592, +0xf424, 0xf592, 0xf424, 0xf592, 0xf614, 0xf75c, 0xf614, 0xf75c, 0xf7d4, 0xf8f2, 0xf7d4, +0xf8f2, 0xf97a, 0xfa68, 0xf97a, 0xfa68, 0xfae3, 0xfb9b, 0xfae3, 0xfb9b, 0xfbfb, 0xfc7a, +0xfbfb, 0xfc7a, 0xfd21, 0xfd64, 0xfd21, 0xfd64, 0xfd21, 0xfd64, 0xff2d, 0xff30, 0xff2d, +0xff30, 0x1ca, 0x18d, 0x1ca, 0x18d, 0x419, 0x39a, 0x419, 0x39a, 0x609, 0x549, +0x609, 0x549, 0x7d0, 0x6cf, 0x7d0, 0x6cf, 0x7d0, 0x6cf, 0x992, 0x852, 0x992, +0x852, 0xb42, 0x9c8, 0xb42, 0x9c8, 0xcfd, 0xb4b, 0xcfd, 0xb4b, 0xeb8, 0xcd5, +0xeb8, 0xcd5, 0x1055, 0xe45, 0x1055, 0xe45, 0x1207, 0xfcf, 0x1207, 0xfcf, 0x1207, +0xfcf, 0x1390, 0x1137, 0x1390, 0x1137, 0x14dc, 0x1267, 0x14dc, 0x1267, 0x15da, 0x1351, +0x15da, 0x1351, 0x1647, 0x13af, 0x1647, 0x13af, 0x169d, 0x13fc, 0x169d, 0x13fc, 0x16fc, +0x1458, 0x16fc, 0x1458, 0x16fc, 0x1458, 0x1745, 0x14a2, 0x1745, 0x14a2, 0x174b, 0x14ad, +0x174b, 0x14ad, 0x1723, 0x148e, 0x1723, 0x148e, 0x1740, 0x14b8, 0x1740, 0x14b8, 0x174a, +0x14d2, 0x174a, 0x14d2, 0x174a, 0x14d2, 0x1724, 0x14bd, 0x1724, 0x14bd, 0x16b8, 0x1463, +0x16b8, 0x1463, 0x161c, 0x13dc, 0x161c, 0x13dc, 0x15cf, 0x13a3, 0x15cf, 0x13a3, 0x15ba, +0x13a4, 0x15ba, 0x13a4, 0x15e3, 0x13e2, 0x15e3, 0x13e2, 0x15e3, 0x13e2, 0x15f9, 0x140d, +0x15f9, 0x140d, 0x15d0, 0x13fa, 0x15d0, 0x13fa, 0x157d, 0x13bc, 0x157d, 0x13bc, 0x150a, +0x135f, 0x150a, 0x135f, 0x14af, 0x131a, 0x14af, 0x131a, 0x1427, 0x12a9, 0x1427, 0x12a9, +0x1427, 0x12a9, 0x1360, 0x11f8, 0x1360, 0x11f8, 0x1228, 0x10d7, 0x1228, 0x10d7, 0x1085, +0xf4c, 0x1085, 0xf4c, 0xee7, 0xdc7, 0xee7, 0xdc7, 0xd4e, 0xc46, 0xd4e, 0xc46, +0xd4e, 0xc46, 0xbf5, 0xb07, 0xbf5, 0xb07, 0xae9, 0xa15, 0xae9, 0xa15, 0x9fb, +0x942, 0x9fb, 0x942, 0x938, 0x899, 0x938, 0x899, 0x8ca, 0x845, 0x8ca, 0x845, +0x8cb, 0x85e, 0x8cb, 0x85e, 0x8cb, 0x85e, 0x8ee, 0x89b, 0x8ee, 0x89b, 0x913, +0x8d7, 0x913, 0x8d7, 0x905, 0x8e0, 0x905, 0x8e0, 0x882, 0x873, 0x882, 0x873, +0x7b4, 0x7b9, 0x7b4, 0x7b9, 0x6cc, 0x6e4, 0x6cc, 0x6e4, 0x6cc, 0x6e4, 0x5e5, +0x60f, 0x5e5, 0x60f, 0x49b, 0x4d6, 0x49b, 0x4d6, 0x2e7, 0x331, 0x2e7, 0x331, +0x1a1, 0x1fa, 0x1a1, 0x1fa, 0xd1, 0x139, 0xd1, 0x139, 0xd1, 0x139, 0xffe5, +0x5a, 0xffe5, 0x5a, 0xfe85, 0xff08, 0xfe85, 0xff08, 0xfcc9, 0xfd59, 0xfcc9, 0xfd59, +0xfafe, 0xfb9c, 0xfafe, 0xfb9c, 0xf931, 0xf9de, 0xf931, 0xf9de, 0xf7e9, 0xf8a6, 0xf7e9, +0xf8a6, 0xf7e9, 0xf8a6, 0xf725, 0xf7f2, 0xf725, 0xf7f2, 0xf670, 0xf74f, 0xf670, 0xf74f, +0xf59b, 0xf68c, 0xf59b, 0xf68c, 0xf480, 0xf584, 0xf480, 0xf584, 0xf35d, 0xf474, 0xf35d, +0xf474, 0xf1e1, 0xf30b, 0xf1e1, 0xf30b, 0xf1e1, 0xf30b, 0xf039, 0xf176, 0xf039, 0xf176, +0xeefc, 0xf04c, 0xeefc, 0xf04c, 0xee15, 0xef75, 0xee15, 0xef75, 0xed5e, 0xeecd, 0xed5e, +0xeecd, 0xec8a, 0xee06, 0xec8a, 0xee06, 0xec8a, 0xee06, 0xebca, 0xed50, 0xebca, 0xed50, +0xeaf4, 0xec81, 0xeaf4, 0xec81, 0xe9d3, 0xeb64, 0xe9d3, 0xeb64, 0xe8be, 0xea4f, 0xe8be, +0xea4f, 0xe7a2, 0xe930, 0xe7a2, 0xe930, 0xe6ac, 0xe834, 0xe6ac, 0xe834, 0xe6ac, 0xe834, +0xe615, 0xe793, 0xe615, 0xe793, 0xe60f, 0xe780, 0xe60f, 0xe780, 0xe661, 0xe7c2, 0xe661, +0xe7c2, 0xe6db, 0xe82b, 0xe6db, 0xe82b, 0xe7c6, 0xe903, 0xe7c6, 0xe903, 0xe7c6, 0xe903, +0xe8bf, 0xe9e8, 0xe8bf, 0xe9e8, 0xe965, 0xea79, 0xe965, 0xea79, 0xe9f0, 0xeaf0, 0xe9f0, +0xeaf0, 0xeae7, 0xebd4, 0xeae7, 0xebd4, 0xec47, 0xed23, 0xec47, 0xed23, 0xedb2, 0xee7e, +0xedb2, 0xee7e, 0xedb2, 0xee7e, 0xeed6, 0xef95, 0xeed6, 0xef95, 0xef88, 0xf03b, 0xef88, +0xf03b, 0xf00e, 0xf0b9, 0xf00e, 0xf0b9, 0xf073, 0xf119, 0xf073, 0xf119, 0xf0ca, 0xf16c, +0xf0ca, 0xf16c, 0xf176, 0xf217, 0xf176, 0xf217, 0xf176, 0xf217, 0xf28b, 0xf32d, 0xf28b, +0xf32d, 0xf3bd, 0xf460, 0xf3bd, 0xf460, 0xf50b, 0xf5b0, 0xf50b, 0xf5b0, 0xf689, 0xf730, +0xf689, 0xf730, 0xf7d2, 0xf87a, 0xf7d2, 0xf87a, 0xf7d2, 0xf87a, 0xf8c8, 0xf96f, 0xf8c8, +0xf96f, 0xf9b2, 0xfa56, 0xf9b2, 0xfa56, 0xfad4, 0xfb72, 0xfad4, 0xfb72, 0xfc47, 0xfcdc, +0xfc47, 0xfcdc, 0xfddb, 0xfe63, 0xfddb, 0xfe63, 0xff1a, 0xff92, 0xff1a, 0xff92, 0xff1a, +0xff92, 0xffe8, 0x4b, 0xffe8, 0x4b, 0x85, 0xcf, 0x85, 0xcf, 0x135, 0x164, +0x135, 0x164, 0x24e, 0x25f, 0x24e, 0x25f, 0x40a, 0x3fa, 0x40a, 0x3fa, 0x6a4, +0x671, 0x6a4, 0x671, 0x6a4, 0x671, 0x9bf, 0x96a, 0x9bf, 0x96a, 0xcc6, 0xc4e, +0xcc6, 0xc4e, 0xf18, 0xe7e, 0xf18, 0xe7e, 0x1074, 0xfba, 0x1074, 0xfba, 0x1171, +0x109a, 0x1171, 0x109a, 0x1171, 0x109a, 0x11f9, 0x1109, 0x11f9, 0x1109, 0x1218, 0x1112, +0x1218, 0x1112, 0x1219, 0x1104, 0x1219, 0x1104, 0x1237, 0x1118, 0x1237, 0x1118, 0x126e, +0x114a, 0x126e, 0x114a, 0x122a, 0x1107, 0x122a, 0x1107, 0x122a, 0x1107, 0x117e, 0x1062, +0x117e, 0x1062, 0x1058, 0xf48, 0x1058, 0xf48, 0xee6, 0xde8, 0xee6, 0xde8, 0xd3a, +0xc52, 0xd3a, 0xc52, 0xb34, 0xa67, 0xb34, 0xa67, 0x926, 0x877, 0x926, 0x877, +0x926, 0x877, 0x6e8, 0x65a, 0x6e8, 0x65a, 0x4f1, 0x486, 0x4f1, 0x486, 0x36e, +0x328, 0x36e, 0x328, 0x26e, 0x24e, 0x26e, 0x24e, 0x20c, 0x212, 0x20c, 0x212, +0x20c, 0x212, 0x190, 0x1bb, 0x190, 0x1bb, 0xad, 0xfd, 0xad, 0xfd, 0xff7e, +0xfff2, 0xff7e, 0xfff2, 0xfe7b, 0xff12, 0xfe7b, 0xff12, 0xfd8f, 0xfe47, 0xfd8f, 0xfe47, +0xfc45, 0xfd1d, 0xfc45, 0xfd1d, 0xfc45, 0xfd1d, 0xfad9, 0xfbd0, 0xfad9, 0xfbd0, 0xf9b7, +0xfacc, 0xf9b7, 0xfacc, 0xf8ff, 0xfa30, 0xf8ff, 0xfa30, 0xf82b, 0xf977, 0xf82b, 0xf977, +0xf71d, 0xf884, 0xf71d, 0xf884, 0xf5f7, 0xf778, 0xf5f7, 0xf778, 0xf5f7, 0xf778, 0xf4a6, +0xf640, 0xf4a6, 0xf640, 0xf38d, 0xf53f, 0xf38d, 0xf53f, 0xf2d9, 0xf4a2, 0xf2d9, 0xf4a2, +0xf23a, 0xf41a, 0xf23a, 0xf41a, 0xf1c3, 0xf3b6, 0xf1c3, 0xf3b6, 0xf1c3, 0xf3b6, 0xf19a, +0xf3a0, 0xf19a, 0xf3a0, 0xf183, 0xf398, 0xf183, 0xf398, 0xf163, 0xf384, 0xf163, 0xf384, +0xf13e, 0xf369, 0xf13e, 0xf369, 0xf161, 0xf38f, 0xf161, 0xf38f, 0xf1f7, 0xf425, 0xf1f7, +0xf425, 0xf1f7, 0xf425, 0xf2e4, 0xf50b, 0xf2e4, 0xf50b, 0xf405, 0xf61f, 0xf405, 0xf61f, +0xf536, 0xf73c, 0xf536, 0xf73c, 0xf67f, 0xf86b, 0xf67f, 0xf86b, 0xf7d5, 0xf99f, 0xf7d5, +0xf99f, 0xf959, 0xfaf9, 0xf959, 0xfaf9, 0xf959, 0xfaf9, 0xfac1, 0xfc30, 0xfac1, 0xfc30, +0xfc03, 0xfd3b, 0xfc03, 0xfd3b, 0xfd78, 0xfe72, 0xfd78, 0xfe72, 0xfef4, 0xffaa, 0xfef4, +0xffaa, 0x60, 0xcd, 0x60, 0xcd, 0x60, 0xcd, 0x15d, 0x17e, 0x15d, 0x17e, +0x20f, 0x1e0, 0x20f, 0x1e0, 0x2bd, 0x23b, 0x2bd, 0x23b, 0x396, 0x2c2, 0x396, +0x2c2, 0x4ce, 0x3a8, 0x4ce, 0x3a8, 0x643, 0x4cc, 0x643, 0x4cc, 0x643, 0x4cc, +0x815, 0x651, 0x815, 0x651, 0x9dd, 0x7ce, 0x9dd, 0x7ce, 0xba5, 0x952, 0xba5, +0x952, 0xd99, 0xb05, 0xd99, 0xb05, 0xf52, 0xc86, 0xf52, 0xc86, 0x10b1, 0xdb2, +0x10b1, 0xdb2, 0x10b1, 0xdb2, 0x11bf, 0xe94, 0x11bf, 0xe94, 0x12f8, 0xfa9, 0x12f8, +0xfa9, 0x13fd, 0x1092, 0x13fd, 0x1092, 0x146c, 0x10eb, 0x146c, 0x10eb, 0x1469, 0x10da, +0x1469, 0x10da, 0x1469, 0x10da, 0x1438, 0x10a1, 0x1438, 0x10a1, 0x1460, 0x10c8, 0x1460, +0x10c8, 0x1477, 0x10e5, 0x1477, 0x10e5, 0x141a, 0x1093, 0x141a, 0x1093, 0x135e, 0xfe6, +0x135e, 0xfe6, 0x1295, 0xf32, 0x1295, 0xf32, 0x1295, 0xf32, 0x11ea, 0xea0, 0x11ea, +0xea0, 0x1165, 0xe37, 0x1165, 0xe37, 0x1152, 0xe42, 0x1152, 0xe42, 0x1168, 0xe7b, +0x1168, 0xe7b, 0x1184, 0xebb, 0x1184, 0xebb, 0x119b, 0xef8, 0x119b, 0xef8, 0x119b, +0xef8, 0x114a, 0xecf, 0x114a, 0xecf, 0x108b, 0xe3a, 0x108b, 0xe3a, 0xfff, 0xdd8, +0xfff, 0xdd8, 0xfe5, 0xdeb, 0xfe5, 0xdeb, 0xf87, 0xdba, 0xf87, 0xdba, 0xf87, +0xdba, 0xeb9, 0xd19, 0xeb9, 0xd19, 0xdea, 0xc79, 0xdea, 0xc79, 0xcfa, 0xbb8, +0xcfa, 0xbb8, 0xba2, 0xa8d, 0xba2, 0xa8d, 0xa41, 0x95a, 0xa41, 0x95a, 0x90a, +0x851, 0x90a, 0x851, 0x90a, 0x851, 0x7d7, 0x74a, 0x7d7, 0x74a, 0x6f5, 0x692, +0x6f5, 0x692, 0x6c4, 0x68a, 0x6c4, 0x68a, 0x732, 0x71e, 0x732, 0x71e, 0x7b6, +0x7c7, 0x7b6, 0x7c7, 0x7ee, 0x821, 0x7ee, 0x821, 0x7ee, 0x821, 0x7be, 0x810, +0x7be, 0x810, 0x766, 0x7d4, 0x766, 0x7d4, 0x6e6, 0x76c, 0x6e6, 0x76c, 0x5bf, +0x65b, 0x5bf, 0x65b, 0x3f4, 0x4a4, 0x3f4, 0x4a4, 0x3f4, 0x4a4, 0x1e9, 0x2a9, +0x1e9, 0x2a9, 0x44, 0x113, 0x44, 0x113, 0xff4b, 0x26, 0xff4b, 0x26, 0xfeed, +0xffd3, 0xfeed, 0xffd3, 0xfeed, 0xffdd, 0xfeed, 0xffdd, 0xfee2, 0xffda, 0xfee2, 0xffda, +0xfee2, 0xffda, 0xfe9f, 0xffa0, 0xfe9f, 0xffa0, 0xfda9, 0xfeb3, 0xfda9, 0xfeb3, 0xfc30, +0xfd43, 0xfc30, 0xfd43, 0xfa91, 0xfbad, 0xfa91, 0xfbad, 0xf909, 0xfa30, 0xf909, 0xfa30, +0xf909, 0xfa30, 0xf7e9, 0xf91b, 0xf7e9, 0xf91b, 0xf6f8, 0xf836, 0xf6f8, 0xf836, 0xf621, +0xf76d, 0xf621, 0xf76d, 0xf522, 0xf67c, 0xf522, 0xf67c, 0xf40b, 0xf573, 0xf40b, 0xf573, +0xf30a, 0xf480, 0xf30a, 0xf480, 0xf30a, 0xf480, 0xf206, 0xf38a, 0xf206, 0xf38a, 0xf0e1, +0xf272, 0xf0e1, 0xf272, 0xef7a, 0xf115, 0xef7a, 0xf115, 0xee62, 0xf007, 0xee62, 0xf007, +0xed91, 0xef3e, 0xed91, 0xef3e, 0xecbf, 0xee70, 0xecbf, 0xee70, 0xecbf, 0xee70, 0xec08, +0xedba, 0xec08, 0xedba, 0xeb7b, 0xed2b, 0xeb7b, 0xed2b, 0xeb57, 0xed01, 0xeb57, 0xed01, +0xeb70, 0xed12, 0xeb70, 0xed12, 0xebb6, 0xed4b, 0xebb6, 0xed4b, 0xebb6, 0xed4b, 0xec1a, +0xeda0, 0xec1a, 0xeda0, 0xec87, 0xedfb, 0xec87, 0xedfb, 0xed32, 0xee93, 0xed32, 0xee93, +0xee11, 0xef5d, 0xee11, 0xef5d, 0xeee6, 0xf01c, 0xeee6, 0xf01c, 0xef6f, 0xf08f, 0xef6f, +0xf08f, 0xef6f, 0xf08f, 0xf001, 0xf10c, 0xf001, 0xf10c, 0xf103, 0xf1fa, 0xf103, 0xf1fa, +0xf27b, 0xf360, 0xf27b, 0xf360, 0xf438, 0xf50d, 0xf438, 0xf50d, 0xf586, 0xf64e, 0xf586, +0xf64e, 0xf603, 0xf6c2, 0xf603, 0xf6c2, 0xf603, 0xf6c2, 0xf5f5, 0xf6ac, 0xf5f5, 0xf6ac, +0xf5c5, 0xf679, 0xf5c5, 0xf679, 0xf5fb, 0xf6ae, 0xf5fb, 0xf6ae, 0xf6b2, 0xf767, 0xf6b2, +0xf767, 0xf7a8, 0xf861, 0xf7a8, 0xf861, 0xf7a8, 0xf861, 0xf8d4, 0xf992, 0xf8d4, 0xf992, +0xfa35, 0xfafa, 0xfa35, 0xfafa, 0xfb84, 0xfc4f, 0xfb84, 0xfc4f, 0xfc71, 0xfd41, 0xfc71, +0xfd41, 0xfd34, 0xfe07, 0xfd34, 0xfe07, 0xfe34, 0xff09, 0xfe34, 0xff09, 0xfe34, 0xff09, +0xff53, 0x26, 0xff53, 0x26, 0x53, 0x120, 0x53, 0x120, 0x12d, 0x1f0, 0x12d, +0x1f0, 0x1ee, 0x2a2, 0x1ee, 0x2a2, 0x269, 0x30b, 0x269, 0x30b, 0x2c3, 0x34e, +0x2c3, 0x34e, 0x2c3, 0x34e, 0x348, 0x3b8, 0x348, 0x3b8, 0x3f2, 0x443, 0x3f2, +0x443, 0x540, 0x56f, 0x540, 0x56f, 0x74c, 0x757, 0x74c, 0x757, 0x94a, 0x930, +0x94a, 0x930, 0x94a, 0x930, 0xaaa, 0xa6b, 0xaaa, 0xa6b, 0xb9b, 0xb37, 0xb9b, +0xb37, 0xc78, 0xbf1, 0xc78, 0xbf1, 0xce1, 0xc3b, 0xce1, 0xc3b, 0xcdb, 0xc19, +0xcdb, 0xc19, 0xcdd, 0xc04, 0xcdd, 0xc04, 0xcdd, 0xc04, 0xcf0, 0xc05, 0xcf0, +0xc05, 0xd0c, 0xc15, 0xd0c, 0xc15, 0xd2c, 0xc30, 0xd2c, 0xc30, 0xd1f, 0xc23, +0xd1f, 0xc23, 0xc4a, 0xb55, 0xc4a, 0xb55, 0xae1, 0x9fa, 0xae1, 0x9fa, 0xae1, +0x9fa, 0x981, 0x8ac, 0x981, 0x8ac, 0x812, 0x755, 0x812, 0x755, 0x662, 0x5c1, +0x662, 0x5c1, 0x403, 0x382, 0x403, 0x382, 0x13e, 0xde, 0x13e, 0xde, 0x13e, +0xde, 0xfee7, 0xfeac, 0xfee7, 0xfeac, 0xfd29, 0xfd12, 0xfd29, 0xfd12, 0xfbcb, 0xfbd8, +0xfbcb, 0xfbd8, 0xfa9e, 0xface, 0xfa9e, 0xface, 0xf9ab, 0xf9fd, 0xf9ab, 0xf9fd, 0xf8a7, +0xf918, 0xf8a7, 0xf918, 0xf8a7, 0xf918, 0xf77b, 0xf809, 0xf77b, 0xf809, 0xf65d, 0xf704, +0xf65d, 0xf704, 0xf535, 0xf5f3, 0xf535, 0xf5f3, 0xf41b, 0xf4ed, 0xf41b, 0xf4ed, 0xf303, +0xf3e4, 0xf303, 0xf3e4, 0xf206, 0xf2f6, 0xf206, 0xf2f6, 0xf206, 0xf2f6, 0xf13d, 0xf237, +0xf13d, 0xf237, 0xf0a9, 0xf1ad, 0xf0a9, 0xf1ad, 0xf059, 0xf164, 0xf059, 0xf164, 0xeffc, +0xf10e, 0xeffc, 0xf10e, 0xefa2, 0xf0ba, 0xefa2, 0xf0ba, 0xefa2, 0xf0ba, 0xef38, 0xf055, +0xef38, 0xf055, 0xee6a, 0xef8c, 0xee6a, 0xef8c, 0xed72, 0xee9a, 0xed72, 0xee9a, 0xecd6, +0xee03, 0xecd6, 0xee03, 0xecca, 0xedfd, 0xecca, 0xedfd, 0xecee, 0xee27, 0xecee, 0xee27, +0xecee, 0xee27, 0xed2a, 0xee67, 0xed2a, 0xee67, 0xedbc, 0xeefd, 0xedbc, 0xeefd, 0xeec0, +0xf004, 0xeec0, 0xf004, 0xeff9, 0xf13d, 0xeff9, 0xf13d, 0xf109, 0xf24b, 0xf109, 0xf24b, +0xf23c, 0xf377, 0xf23c, 0xf377, 0xf23c, 0xf377, 0xf3b9, 0xf4ea, 0xf3b9, 0xf4ea, 0xf52a, +0xf64d, 0xf52a, 0xf64d, 0xf676, 0xf786, 0xf676, 0xf786, 0xf7bb, 0xf8b2, 0xf7bb, 0xf8b2, +0xf936, 0xfa0f, 0xf936, 0xfa0f, 0xf936, 0xfa0f, 0xfb15, 0xfbc9, 0xfb15, 0xfbc9, 0xfd55, +0xfddf, 0xfd55, 0xfddf, 0xffc3, 0x1e, 0xffc3, 0x1e, 0x215, 0x23b, 0x215, 0x23b, +0x423, 0x40f, 0x423, 0x40f, 0x5d9, 0x587, 0x5d9, 0x587, 0x5d9, 0x587, 0x76f, +0x6de, 0x76f, 0x6de, 0x92c, 0x858, 0x92c, 0x858, 0xabd, 0x9a5, 0xabd, 0x9a5, +0xbe9, 0xa8c, 0xbe9, 0xa8c, 0xcfa, 0xb59, 0xcfa, 0xb59, 0xe77, 0xc95, 0xe77, +0xc95, 0xe77, 0xc95, 0x1089, 0xe67, 0x1089, 0xe67, 0x12b3, 0x1056, 0x12b3, 0x1056, +0x149e, 0x1209, 0x149e, 0x1209, 0x1630, 0x1369, 0x1630, 0x1369, 0x1796, 0x14a2, 0x1796, +0x14a2, 0x1796, 0x14a2, 0x18a5, 0x158a, 0x18a5, 0x158a, 0x1914, 0x15d8, 0x1914, 0x15d8, +0x1954, 0x15fe, 0x1954, 0x15fe, 0x1990, 0x1625, 0x1990, 0x1625, 0x19b5, 0x163d, 0x19b5, +0x163d, 0x19ca, 0x164a, 0x19ca, 0x164a, 0x19ca, 0x164a, 0x1a0c, 0x168a, 0x1a0c, 0x168a, +0x1a4d, 0x16cf, 0x1a4d, 0x16cf, 0x1a22, 0x16ad, 0x1a22, 0x16ad, 0x19e4, 0x167d, 0x19e4, +0x167d, 0x1969, 0x1613, 0x1969, 0x1613, 0x1890, 0x1550, 0x1890, 0x1550, 0x1890, 0x1550, +0x17ed, 0x14c7, 0x17ed, 0x14c7, 0x17ed, 0x14e4, 0x17ed, 0x14e4, 0x1826, 0x153d, 0x1826, +0x153d, 0x17cd, 0x1506, 0x17cd, 0x1506, 0x1712, 0x146f, 0x1712, 0x146f, 0x1712, 0x146f, +0x163f, 0x13c3, 0x163f, 0x13c3, 0x1579, 0x1325, 0x1579, 0x1325, 0x14c3, 0x1298, 0x14c3, +0x1298, 0x13f6, 0x11f6, 0x13f6, 0x11f6, 0x1312, 0x113f, 0x1312, 0x113f, 0x11d7, 0x1030, +0x11d7, 0x1030, 0x11d7, 0x1030, 0x106c, 0xef2, 0x106c, 0xef2, 0xeea, 0xd9e, 0xeea, +0xd9e, 0xd3b, 0xc1b, 0xd3b, 0xc1b, 0xb7d, 0xa8a, 0xb7d, 0xa8a, 0x9f5, 0x92e, +0x9f5, 0x92e, 0x9f5, 0x92e, 0x945, 0x8a9, 0x945, 0x8a9, 0x970, 0x8fc, 0x970, +0x8fc, 0x9ad, 0x961, 0x9ad, 0x961, 0x97f, 0x958, 0x97f, 0x958, 0x936, 0x931, +0x936, 0x931, 0x900, 0x91b, 0x900, 0x91b, 0x900, 0x91b, 0x866, 0x89e, 0x866, +0x89e, 0x740, 0x793, 0x740, 0x793, 0x5b0, 0x61b, 0x5b0, 0x61b, 0x3ee, 0x46e, +0x3ee, 0x46e, 0x247, 0x2d9, 0x247, 0x2d9, 0xd1, 0x174, 0xd1, 0x174, 0xd1, +0x174, 0xffac, 0x5e, 0xffac, 0x5e, 0xfee3, 0xffa2, 0xfee3, 0xffa2, 0xfe36, 0xff01, +0xfe36, 0xff01, 0xfd6d, 0xfe44, 0xfd6d, 0xfe44, 0xfc41, 0xfd24, 0xfc41, 0xfd24, 0xfc41, +0xfd24, 0xfaa4, 0xfb93, 0xfaa4, 0xfb93, 0xf8d6, 0xf9d2, 0xf8d6, 0xf9d2, 0xf71d, 0xf828, +0xf71d, 0xf828, 0xf5e5, 0xf6ff, 0xf5e5, 0xf6ff, 0xf535, 0xf65f, 0xf535, 0xf65f, 0xf4c0, +0xf5fd, 0xf4c0, 0xf5fd, 0xf4c0, 0xf5fd, 0xf433, 0xf584, 0xf433, 0xf584, 0xf364, 0xf4ca, +0xf364, 0xf4ca, 0xf25a, 0xf3d5, 0xf25a, 0xf3d5, 0xf132, 0xf2c3, 0xf132, 0xf2c3, 0xf016, +0xf1bd, 0xf016, 0xf1bd, 0xeebc, 0xf079, 0xeebc, 0xf079, 0xeebc, 0xf079, 0xed55, 0xef26, +0xed55, 0xef26, 0xec41, 0xee23, 0xec41, 0xee23, 0xeb64, 0xed56, 0xeb64, 0xed56, 0xeadd, +0xecdc, 0xeadd, 0xecdc, 0xea81, 0xec8a, 0xea81, 0xec8a, 0xea81, 0xec8a, 0xea1a, 0xec29, +0xea1a, 0xec29, 0xe984, 0xeb94, 0xe984, 0xeb94, 0xe8ca, 0xead8, 0xe8ca, 0xead8, 0xe827, +0xea2e, 0xe827, 0xea2e, 0xe7c5, 0xe9c2, 0xe7c5, 0xe9c2, 0xe7ec, 0xe9da, 0xe7ec, 0xe9da, +0xe7ec, 0xe9da, 0xe87b, 0xea59, 0xe87b, 0xea59, 0xe936, 0xeaff, 0xe936, 0xeaff, 0xe9db, +0xeb8e, 0xe9db, 0xeb8e, 0xea66, 0xec02, 0xea66, 0xec02, 0xeb28, 0xecac, 0xeb28, 0xecac, +0xec4c, 0xedb9, 0xec4c, 0xedb9, 0xec4c, 0xedb9, 0xedfa, 0xef51, 0xedfa, 0xef51, 0xefa2, +0xf0e5, 0xefa2, 0xf0e5, 0xf0a5, 0xf1d6, 0xf0a5, 0xf1d6, 0xf11b, 0xf23c, 0xf11b, 0xf23c, +0xf12f, 0xf243, 0xf12f, 0xf243, 0xf12f, 0xf243, 0xf137, 0xf242, 0xf137, 0xf242, 0xf171, +0xf276, 0xf171, 0xf276, 0xf1fe, 0xf300, 0xf1fe, 0xf300, 0xf2eb, 0xf3ec, 0xf2eb, 0xf3ec, +0xf40f, 0xf511, 0xf40f, 0xf511, 0xf537, 0xf63c, 0xf537, 0xf63c, 0xf537, 0xf63c, 0xf663, +0xf76b, 0xf663, 0xf76b, 0xf7cf, 0xf8da, 0xf7cf, 0xf8da, 0xf945, 0xfa52, 0xf945, 0xfa52, +0xfab1, 0xfbbf, 0xfab1, 0xfbbf, 0xfc24, 0xfd2f, 0xfc24, 0xfd2f, 0xfd38, 0xfe3d, 0xfd38, +0xfe3d, 0xfd38, 0xfe3d, 0xfde4, 0xfedf, 0xfde4, 0xfedf, 0xfe5b, 0xff48, 0xfe5b, 0xff48, +0xfeb8, 0xff92, 0xfeb8, 0xff92, 0xff3d, 0xffff, 0xff3d, 0xffff, 0x29, 0xcf, 0x29, +0xcf, 0x29, 0xcf, 0x1c9, 0x24e, 0x1c9, 0x24e, 0x40a, 0x46b, 0x40a, 0x46b, +0x682, 0x6bb, 0x682, 0x6bb, 0x8df, 0x8ee, 0x8df, 0x8ee, 0xad1, 0xab5, 0xad1, +0xab5, 0xc30, 0xbe8, 0xc30, 0xbe8, 0xc30, 0xbe8, 0xd03, 0xc91, 0xd03, 0xc91, +0xd97, 0xcfd, 0xd97, 0xcfd, 0xe19, 0xd5a, 0xe19, 0xd5a, 0xe8b, 0xdaa, 0xe8b, +0xdaa, 0xf05, 0xe08, 0xf05, 0xe08, 0xf6e, 0xe5b, 0xf6e, 0xe5b, 0xf6e, 0xe5b, +0xfcf, 0xeab, 0xfcf, 0xeab, 0xfb4, 0xe87, 0xfb4, 0xe87, 0xeeb, 0xdbb, 0xeeb, +0xdbb, 0xe1b, 0xcf0, 0xe1b, 0xcf0, 0xd42, 0xc21, 0xd42, 0xc21, 0xd42, 0xc21, +0xbda, 0xaca, 0xbda, 0xaca, 0x9a9, 0x8b0, 0x9a9, 0x8b0, 0x733, 0x656, 0x733, +0x656, 0x502, 0x445, 0x502, 0x445, 0x32c, 0x292, 0x32c, 0x292, 0x1a1, 0x12e, +0x1a1, 0x12e, 0x1a1, 0x12e, 0x85, 0x39, 0x85, 0x39, 0x26, 0x3, 0x26, +0x3, 0x8, 0xd, 0x8, 0xd, 0xff7f, 0xffaa, 0xff7f, 0xffaa, 0xfe79, 0xfeca, +0xfe79, 0xfeca, 0xfd26, 0xfd9a, 0xfd26, 0xfd9a, 0xfd26, 0xfd9a, 0xfbb8, 0xfc4d, 0xfbb8, +0xfc4d, 0xfa6b, 0xfb1e, 0xfa6b, 0xfb1e, 0xf965, 0xfa34, 0xf965, 0xfa34, 0xf875, 0xf95d, +0xf875, 0xf95d, 0xf78c, 0xf88a, 0xf78c, 0xf88a, 0xf78c, 0xf88a, 0xf6ee, 0xf800, 0xf6ee, +0xf800, 0xf680, 0xf7a4, 0xf680, 0xf7a4, 0xf5f3, 0xf726, 0xf5f3, 0xf726, 0xf539, 0xf67b, +0xf539, 0xf67b, 0xf43e, 0xf58d, 0xf43e, 0xf58d, 0xf30c, 0xf467, 0xf30c, 0xf467, 0xf30c, +0xf467, 0xf1f1, 0xf357, 0xf1f1, 0xf357, 0xf15c, 0xf2cc, 0xf15c, 0xf2cc, 0xf136, 0xf2ae, +0xf136, 0xf2ae, 0xf133, 0xf2b3, 0xf133, 0xf2b3, 0xf18f, 0xf315, 0xf18f, 0xf315, 0xf22c, +0xf3b6, 0xf22c, 0xf3b6, 0xf22c, 0xf3b6, 0xf29f, 0xf42b, 0xf29f, 0xf42b, 0xf2c8, 0xf453, +0xf2c8, 0xf453, 0xf318, 0xf49e, 0xf318, 0xf49e, 0xf3df, 0xf55d, 0xf3df, 0xf55d, 0xf505, +0xf676, 0xf505, 0xf676, 0xf505, 0xf676, 0xf671, 0xf7d1, 0xf671, 0xf7d1, 0xf7ce, 0xf917, +0xf7ce, 0xf917, 0xf924, 0xfa50, 0xf924, 0xfa50, 0xfa95, 0xfb9f, 0xfa95, 0xfb9f, 0xfc06, +0xfce7, 0xfc06, 0xfce7, 0xfd6d, 0xfe20, 0xfd6d, 0xfe20, 0xfd6d, 0xfe20, 0xfea9, 0xff27, +0xfea9, 0xff27, 0xffc3, 0x9, 0xffc3, 0x9, 0xc0, 0xc8, 0xc0, 0xc8, 0x1c6, +0x18e, 0x1c6, 0x18e, 0x30b, 0x28e, 0x30b, 0x28e, 0x43c, 0x379, 0x43c, 0x379, +0x43c, 0x379, 0x570, 0x466, 0x570, 0x466, 0x6d0, 0x57e, 0x6d0, 0x57e, 0x858, +0x6bf, 0x858, 0x6bf, 0xa0f, 0x832, 0xa0f, 0x832, 0xbfa, 0x9dc, 0xbfa, 0x9dc, +0xbfa, 0x9dc, 0xe18, 0xbbd, 0xe18, 0xbbd, 0x101d, 0xd89, 0x101d, 0xd89, 0x11da, +0xf13, 0x11da, 0xf13, 0x12eb, 0xff7, 0x12eb, 0xff7, 0x1360, 0x1045, 0x1360, 0x1045, +0x13b4, 0x1079, 0x13b4, 0x1079, 0x13b4, 0x1079, 0x1413, 0x10c0, 0x1413, 0x10c0, 0x1497, +0x1132, 0x1497, 0x1132, 0x1509, 0x1199, 0x1509, 0x1199, 0x155b, 0x11e7, 0x155b, 0x11e7, +0x1569, 0x11f7, 0x1569, 0x11f7, 0x1569, 0x11f7, 0x1526, 0x11bd, 0x1526, 0x11bd, 0x14c3, +0x1168, 0x14c3, 0x1168, 0x1445, 0x10fc, 0x1445, 0x10fc, 0x138e, 0x105e, 0x138e, 0x105e, +0x12de, 0xfc9, 0x12de, 0xfc9, 0x12a7, 0xfb1, 0x12a7, 0xfb1, 0x12a7, 0xfb1, 0x12b7, +0xfe3, 0x12b7, 0xfe3, 0x12d6, 0x1027, 0x12d6, 0x1027, 0x12c2, 0x1039, 0x12c2, 0x1039, +0x1246, 0xfe6, 0x1246, 0xfe6, 0x118b, 0xf55, 0x118b, 0xf55, 0x10d0, 0xec5, 0x10d0, +0xec5, 0x10d0, 0xec5, 0x1030, 0xe50, 0x1030, 0xe50, 0xf9d, 0xde7, 0xf9d, 0xde7, +0xee7, 0xd5c, 0xee7, 0xd5c, 0xde9, 0xc88, 0xde9, 0xc88, 0xcd0, 0xb97, 0xcd0, +0xb97, 0xcd0, 0xb97, 0xb5f, 0xa4e, 0xb5f, 0xa4e, 0x993, 0x8a8, 0x993, 0x8a8, +0x801, 0x73a, 0x801, 0x73a, 0x70d, 0x667, 0x70d, 0x667, 0x6af, 0x629, 0x6af, +0x629, 0x6a8, 0x63d, 0x6a8, 0x63d, 0x6a8, 0x63d, 0x6ee, 0x69d, 0x6ee, 0x69d, +0x734, 0x6f9, 0x734, 0x6f9, 0x733, 0x70a, 0x733, 0x70a, 0x6c4, 0x6ac, 0x6c4, +0x6ac, 0x611, 0x605, 0x611, 0x605, 0x53c, 0x53a, 0x53c, 0x53a, 0x53c, 0x53a, +0x3c1, 0x3c6, 0x3c1, 0x3c6, 0x1f1, 0x1fb, 0x1f1, 0x1fb, 0x45, 0x53, 0x45, +0x53, 0xfecb, 0xfedb, 0xfecb, 0xfedb, 0xfdd7, 0xfde9, 0xfdd7, 0xfde9, 0xfdd7, 0xfde9, +0xfdb5, 0xfdc9, 0xfdb5, 0xfdc9, 0xfe19, 0xfe30, 0xfe19, 0xfe30, 0xfdf7, 0xfe13, 0xfdf7, +0xfe13, 0xfd43, 0xfd65, 0xfd43, 0xfd65, 0xfc63, 0xfc8e, 0xfc63, 0xfc8e, 0xfb4b, 0xfb82, +0xfb4b, 0xfb82, 0xfb4b, 0xfb82, 0xf9ed, 0xfa35, 0xf9ed, 0xfa35, 0xf892, 0xf8ee, 0xf892, +0xf8ee, 0xf7bb, 0xf82e, 0xf7bb, 0xf82e, 0xf6f4, 0xf782, 0xf6f4, 0xf782, 0xf62c, 0xf6d9, +0xf62c, 0xf6d9, 0xf580, 0xf64f, 0xf580, 0xf64f, 0xf580, 0xf64f, 0xf4a9, 0xf59e, 0xf4a9, +0xf59e, 0xf39b, 0xf4b7, 0xf39b, 0xf4b7, 0xf276, 0xf3bb, 0xf276, 0xf3bb, 0xf179, 0xf2e7, +0xf179, 0xf2e7, 0xf07a, 0xf211, 0xf07a, 0xf211, 0xf07a, 0xf211, 0xef96, 0xf154, 0xef96, +0xf154, 0xef08, 0xf0ec, 0xef08, 0xf0ec, 0xef0c, 0xf112, 0xef0c, 0xf112, 0xef49, 0xf16d, +0xef49, 0xf16d, 0xef20, 0xf15d, 0xef20, 0xf15d, 0xee97, 0xf0e9, 0xee97, 0xf0e9, 0xee97, +0xf0e9, 0xede8, 0xf048, 0xede8, 0xf048, 0xed5c, 0xefc5, 0xed5c, 0xefc5, 0xecf1, 0xef5c, +0xecf1, 0xef5c, 0xed01, 0xef69, 0xed01, 0xef69, 0xedb4, 0xf013, 0xedb4, 0xf013, 0xee9e, +0xf0ef, 0xee9e, 0xf0ef, 0xee9e, 0xf0ef, 0xef9a, 0xf1d8, 0xef9a, 0xf1d8, 0xf0c0, 0xf2e7, +0xf0c0, 0xf2e7, 0xf1df, 0xf3ed, 0xf1df, 0xf3ed, 0xf2c7, 0xf4ba, 0xf2c7, 0xf4ba, 0xf3f8, +0xf5cd, 0xf3f8, 0xf5cd, 0xf3f8, 0xf5cd, 0xf55a, 0xf712, 0xf55a, 0xf712, 0xf66b, 0xf805, +0xf66b, 0xf805, 0xf6e8, 0xf867, 0xf6e8, 0xf867, 0xf6fb, 0xf85f, 0xf6fb, 0xf85f, 0xf71f, +0xf86b, 0xf71f, 0xf86b, 0xf77d, 0xf8b3, 0xf77d, 0xf8b3, 0xf77d, 0xf8b3, 0xf828, 0xf94b, +0xf828, 0xf94b, 0xf90c, 0xfa1d, 0xf90c, 0xfa1d, 0xfa1e, 0xfb21, 0xfa1e, 0xfb21, 0xfb53, +0xfc49, 0xfb53, 0xfc49, 0xfccb, 0xfdb6, 0xfccb, 0xfdb6, 0xfe65, 0xff46, 0xfe65, 0xff46, +0xfe65, 0xff46, 0xff6f, 0x46, 0xff6f, 0x46, 0xffe8, 0xb5, 0xffe8, 0xb5, 0x3b, +0xfc, 0x3b, 0xfc, 0xeb, 0x19f, 0xeb, 0x19f, 0x1e3, 0x288, 0x1e3, 0x288, +0x1e3, 0x288, 0x2b1, 0x344, 0x2b1, 0x344, 0x36f, 0x3ee, 0x36f, 0x3ee, 0x3fd, +0x464, 0x3fd, 0x464, 0x468, 0x4b5, 0x468, 0x4b5, 0x516, 0x546, 0x516, 0x546, +0x64b, 0x65b, 0x64b, 0x65b, 0x64b, 0x65b, 0x796, 0x786, 0x796, 0x786, 0x891, +0x85e, 0x891, 0x85e, 0x98a, 0x935, 0x98a, 0x935, 0xa4c, 0x9d5, 0xa4c, 0x9d5, +0xac3, 0xa2b, 0xac3, 0xa2b, 0xb12, 0xa5d, 0xb12, 0xa5d, 0xb12, 0xa5d, 0xb63, +0xa92, 0xb63, 0xa92, 0xbdb, 0xaf4, 0xbdb, 0xaf4, 0xc4e, 0xb56, 0xc4e, 0xb56, +0xc65, 0xb60, 0xc65, 0xb60, 0xbd2, 0xac7, 0xbd2, 0xac7, 0xbd2, 0xac7, 0xb02, +0x9f8, 0xb02, 0x9f8, 0xa59, 0x956, 0xa59, 0x956, 0x9c5, 0x8cf, 0x9c5, 0x8cf, +0x8c8, 0x7e6, 0x8c8, 0x7e6, 0x720, 0x657, 0x720, 0x657, 0x509, 0x45e, 0x509, +0x45e, 0x509, 0x45e, 0x295, 0x20d, 0x295, 0x20d, 0xffff, 0xff9c, 0xffff, 0xff9c, +0xfd8a, 0xfd51, 0xfd8a, 0xfd51, 0xfb77, 0xfb68, 0xfb77, 0xfb68, 0xf9d4, 0xf9f0, 0xf9d4, +0xf9f0, 0xf8bf, 0xf906, 0xf8bf, 0xf906, 0xf8bf, 0xf906, 0xf821, 0xf892, 0xf821, 0xf892, +0xf777, 0xf811, 0xf777, 0xf811, 0xf690, 0xf750, 0xf690, 0xf750, 0xf58a, 0xf66c, 0xf58a, +0xf66c, 0xf4a1, 0xf5a3, 0xf4a1, 0xf5a3, 0xf4a1, 0xf5a3, 0xf3cc, 0xf4ea, 0xf3cc, 0xf4ea, +0xf2e0, 0xf417, 0xf2e0, 0xf417, 0xf1fb, 0xf346, 0xf1fb, 0xf346, 0xf16e, 0xf2c9, 0xf16e, +0xf2c9, 0xf12d, 0xf296, 0xf12d, 0xf296, 0xf0cf, 0xf243, 0xf0cf, 0xf243, 0xf0cf, 0xf243, +0xf01d, 0xf198, 0xf01d, 0xf198, 0xef32, 0xf0b3, 0xef32, 0xf0b3, 0xee62, 0xefe6, 0xee62, +0xefe6, 0xedcf, 0xef55, 0xedcf, 0xef55, 0xed69, 0xeeef, 0xed69, 0xeeef, 0xed37, 0xeebc, +0xed37, 0xeebc, 0xed37, 0xeebc, 0xed48, 0xeecb, 0xed48, 0xeecb, 0xed94, 0xef13, 0xed94, +0xef13, 0xee1a, 0xef94, 0xee1a, 0xef94, 0xeedd, 0xf051, 0xeedd, 0xf051, 0xefb0, 0xf11c, +0xefb0, 0xf11c, 0xefb0, 0xf11c, 0xf087, 0xf1e9, 0xf087, 0xf1e9, 0xf192, 0xf2e7, 0xf192, +0xf2e7, 0xf2b7, 0xf3fc, 0xf2b7, 0xf3fc, 0xf3f2, 0xf524, 0xf3f2, 0xf524, 0xf530, 0xf64b, +0xf530, 0xf64b, 0xf67c, 0xf77c, 0xf67c, 0xf77c, 0xf67c, 0xf77c, 0xf811, 0xf8f0, 0xf811, +0xf8f0, 0xf9e1, 0xfa9c, 0xf9e1, 0xfa9c, 0xfbfd, 0xfc8f, 0xfbfd, 0xfc8f, 0xfe1e, 0xfe82, +0xfe1e, 0xfe82, 0xfffe, 0x2e, 0xfffe, 0x2e, 0xfffe, 0x2e, 0x1ad, 0x1a6, 0x1ad, +0x1a6, 0x36f, 0x32d, 0x36f, 0x32d, 0x55b, 0x4db, 0x55b, 0x4db, 0x714, 0x652, +0x714, 0x652, 0x887, 0x782, 0x887, 0x782, 0x9d1, 0x889, 0x9d1, 0x889, 0x9d1, +0x889, 0xb1a, 0x98d, 0xb1a, 0x98d, 0xc66, 0xa95, 0xc66, 0xa95, 0xdfe, 0xbec, +0xdfe, 0xbec, 0x100f, 0xdbd, 0x100f, 0xdbd, 0x124b, 0xfbd, 0x124b, 0xfbd, 0x1491, +0x11cb, 0x1491, 0x11cb, 0x1491, 0x11cb, 0x1673, 0x137a, 0x1673, 0x137a, 0x1785, 0x145f, +0x1785, 0x145f, 0x1805, 0x14b7, 0x1805, 0x14b7, 0x1885, 0x1515, 0x1885, 0x1515, 0x1916, +0x158c, 0x1916, 0x158c, 0x1916, 0x158c, 0x1994, 0x15f6, 0x1994, 0x15f6, 0x1a19, 0x166d, +0x1a19, 0x166d, 0x1a8e, 0x16dc, 0x1a8e, 0x16dc, 0x1a9d, 0x16eb, 0x1a9d, 0x16eb, 0x1a3c, +0x1690, 0x1a3c, 0x1690, 0x19f0, 0x1650, 0x19f0, 0x1650, 0x19f0, 0x1650, 0x19a1, 0x1613, +0x19a1, 0x1613, 0x18e5, 0x156e, 0x18e5, 0x156e, 0x183a, 0x14df, 0x183a, 0x14df, 0x17f0, +0x14b5, 0x17f0, 0x14b5, 0x17c9, 0x14b3, 0x17c9, 0x14b3, 0x17af, 0x14c1, 0x17af, 0x14c1, +0x17af, 0x14c1, 0x176d, 0x14aa, 0x176d, 0x14aa, 0x16e1, 0x144c, 0x16e1, 0x144c, 0x1628, +0x13c3, 0x1628, 0x13c3, 0x1548, 0x1314, 0x1548, 0x1314, 0x143e, 0x123d, 0x143e, 0x123d, +0x143e, 0x123d, 0x134e, 0x1181, 0x134e, 0x1181, 0x127d, 0x10e5, 0x127d, 0x10e5, 0x116c, +0x100a, 0x116c, 0x100a, 0xfe5, 0xeb8, 0xfe5, 0xeb8, 0xe12, 0xd18, 0xe12, 0xd18, +0xc6c, 0xba5, 0xc6c, 0xba5, 0xc6c, 0xba5, 0xb1c, 0xa85, 0xb1c, 0xa85, 0xa18, +0x9af, 0xa18, 0x9af, 0x962, 0x925, 0x962, 0x925, 0x8f8, 0x8e3, 0x8f8, 0x8e3, +0x88c, 0x89c, 0x88c, 0x89c, 0x7df, 0x810, 0x7df, 0x810, 0x7df, 0x810, 0x71b, +0x769, 0x71b, 0x769, 0x673, 0x6da, 0x673, 0x6da, 0x5fa, 0x676, 0x5fa, 0x676, +0x547, 0x5d3, 0x547, 0x5d3, 0x445, 0x4dd, 0x445, 0x4dd, 0x445, 0x4dd, 0x309, +0x3a9, 0x309, 0x3a9, 0x17f, 0x224, 0x17f, 0x224, 0xffd1, 0x78, 0xffd1, 0x78, +0xfe6b, 0xff11, 0xfe6b, 0xff11, 0xfd7e, 0xfe21, 0xfd7e, 0xfe21, 0xfca6, 0xfd45, 0xfca6, +0xfd45, 0xfca6, 0xfd45, 0xfbe9, 0xfc84, 0xfbe9, 0xfc84, 0xfb3b, 0xfbd0, 0xfb3b, 0xfbd0, +0xfa58, 0xfaea, 0xfa58, 0xfaea, 0xf941, 0xf9d1, 0xf941, 0xf9d1, 0xf816, 0xf8a5, 0xf816, +0xf8a5, 0xf6ef, 0xf781, 0xf6ef, 0xf781, 0xf6ef, 0xf781, 0xf604, 0xf69b, 0xf604, 0xf69b, +0xf55e, 0xf5fd, 0xf55e, 0xf5fd, 0xf488, 0xf531, 0xf488, 0xf531, 0xf366, 0xf41e, 0xf366, +0xf41e, 0xf231, 0xf2fa, 0xf231, 0xf2fa, 0xf231, 0xf2fa, 0xf144, 0xf221, 0xf144, 0xf221, +0xf076, 0xf168, 0xf076, 0xf168, 0xef81, 0xf08b, 0xef81, 0xf08b, 0xee7f, 0xefa1, 0xee7f, +0xefa1, 0xeda3, 0xeedd, 0xeda3, 0xeedd, 0xed1d, 0xee6f, 0xed1d, 0xee6f, 0xed1d, 0xee6f, +0xecc6, 0xee30, 0xecc6, 0xee30, 0xec69, 0xede7, 0xec69, 0xede7, 0xebef, 0xed80, 0xebef, +0xed80, 0xeb74, 0xed16, 0xeb74, 0xed16, 0xead9, 0xec88, 0xead9, 0xec88, 0xea29, 0xebe1, +0xea29, 0xebe1, 0xea29, 0xebe1, 0xe9b2, 0xeb6f, 0xe9b2, 0xeb6f, 0xe98b, 0xeb4b, 0xe98b, +0xeb4b, 0xe99f, 0xeb5d, 0xe99f, 0xeb5d, 0xea15, 0xebd0, 0xea15, 0xebd0, 0xeb2d, 0xece0, +0xeb2d, 0xece0, 0xeb2d, 0xece0, 0xec4f, 0xedf9, 0xec4f, 0xedf9, 0xed03, 0xeea1, 0xed03, +0xeea1, 0xed8f, 0xef21, 0xed8f, 0xef21, 0xee74, 0xeff9, 0xee74, 0xeff9, 0xef77, 0xf0f0, +0xef77, 0xf0f0, 0xf04e, 0xf1ba, 0xf04e, 0xf1ba, 0xf04e, 0xf1ba, 0xf0fd, 0xf25f, 0xf0fd, +0xf25f, 0xf172, 0xf2cb, 0xf172, 0xf2cb, 0xf1e4, 0xf334, 0xf1e4, 0xf334, 0xf267, 0xf3b1, +0xf267, 0xf3b1, 0xf305, 0xf44b, 0xf305, 0xf44b, 0xf399, 0xf4dc, 0xf399, 0xf4dc, 0xf399, +0xf4dc, 0xf446, 0xf587, 0xf446, 0xf587, 0xf599, 0xf6da, 0xf599, 0xf6da, 0xf770, 0xf8b0, +0xf770, 0xf8b0, 0xf912, 0xfa51, 0xf912, 0xfa51, 0xfa72, 0xfbae, 0xfa72, 0xfbae, 0xfa72, +0xfbae, 0xfbcc, 0xfd04, 0xfbcc, 0xfd04, 0xfccb, 0xfdfc, 0xfccb, 0xfdfc, 0xfd70, 0xfe97, +0xfd70, 0xfe97, 0xfe09, 0xff22, 0xfe09, 0xff22, 0xfecc, 0xffd2, 0xfecc, 0xffd2, 0xffb1, +0xa1, 0xffb1, 0xa1, 0xffb1, 0xa1, 0x89, 0x15d, 0x89, 0x15d, 0x169, 0x21d, +0x169, 0x21d, 0x280, 0x30f, 0x280, 0x30f, 0x3b9, 0x420, 0x3b9, 0x420, 0x50d, +0x548, 0x50d, 0x548, 0x6ba, 0x6c6, 0x6ba, 0x6c6, 0x6ba, 0x6c6, 0x891, 0x86d, +0x891, 0x86d, 0x9d9, 0x984, 0x9d9, 0x984, 0xa86, 0xa01, 0xa86, 0xa01, 0xb3b, +0xa87, 0xb3b, 0xa87, 0xc30, 0xb51, 0xc30, 0xb51, 0xc30, 0xb51, 0xd28, 0xc21, +0xd28, 0xc21, 0xdbf, 0xc95, 0xdbf, 0xc95, 0xdef, 0xca9, 0xdef, 0xca9, 0xdfc, +0xca0, 0xdfc, 0xca0, 0xe26, 0xcbc, 0xe26, 0xcbc, 0xe2a, 0xcb9, 0xe2a, 0xcb9, +0xe2a, 0xcb9, 0xd96, 0xc28, 0xd96, 0xc28, 0xc81, 0xb1d, 0xc81, 0xb1d, 0xaff, +0x9ad, 0xaff, 0x9ad, 0x933, 0x7fb, 0x933, 0x7fb, 0x72c, 0x615, 0x72c, 0x615, +0x507, 0x418, 0x507, 0x418, 0x507, 0x418, 0x2d8, 0x216, 0x2d8, 0x216, 0xa9, +0x18, 0xa9, 0x18, 0xfecd, 0xfe72, 0xfecd, 0xfe72, 0xfd91, 0xfd6d, 0xfd91, 0xfd6d, +0xfcb8, 0xfcce, 0xfcb8, 0xfcce, 0xfcb8, 0xfcce, 0xfc01, 0xfc51, 0xfc01, 0xfc51, 0xfb99, +0xfc22, 0xfb99, 0xfc22, 0xfb29, 0xfbea, 0xfb29, 0xfbea, 0xfa90, 0xfb87, 0xfa90, 0xfb87, +0xf9d2, 0xfafb, 0xf9d2, 0xfafb, 0xf8cc, 0xfa24, 0xf8cc, 0xfa24, 0xf8cc, 0xfa24, 0xf7d5, +0xf959, 0xf7d5, 0xf959, 0xf74e, 0xf8fa, 0xf74e, 0xf8fa, 0xf711, 0xf8e1, 0xf711, 0xf8e1, +0xf693, 0xf882, 0xf693, 0xf882, 0xf5da, 0xf7e3, 0xf5da, 0xf7e3, 0xf5da, 0xf7e3, 0xf4ec, +0xf70b, 0xf4ec, 0xf70b, 0xf3e7, 0xf619, 0xf3e7, 0xf619, 0xf304, 0xf545, 0xf304, 0xf545, +0xf245, 0xf490, 0xf245, 0xf490, 0xf1d1, 0xf423, 0xf1d1, 0xf423, 0xf19e, 0xf3f3, 0xf19e, +0xf3f3, 0xf19e, 0xf3f3, 0xf1a4, 0xf3f8, 0xf1a4, 0xf3f8, 0xf1c2, 0xf412, 0xf1c2, 0xf412, +0xf1f9, 0xf441, 0xf1f9, 0xf441, 0xf24f, 0xf48b, 0xf24f, 0xf48b, 0xf2c1, 0xf4ed, 0xf2c1, +0xf4ed, 0xf35d, 0xf575, 0xf35d, 0xf575, 0xf35d, 0xf575, 0xf431, 0xf62f, 0xf431, 0xf62f, +0xf551, 0xf732, 0xf551, 0xf732, 0xf688, 0xf847, 0xf688, 0xf847, 0xf7ee, 0xf984, 0xf7ee, +0xf984, 0xf9a1, 0xfb0b, 0xf9a1, 0xfb0b, 0xf9a1, 0xfb0b, 0xfb5a, 0xfc92, 0xfb5a, 0xfc92, +0xfccf, 0xfdd0, 0xfccf, 0xfdd0, 0xfe10, 0xfed5, 0xfe10, 0xfed5, 0xff7a, 0xfffe, 0xff7a, +0xfffe, 0xf4, 0x133, 0xf4, 0x133, 0x25c, 0x253, 0x25c, 0x253, 0x25c, 0x253, +0x3aa, 0x356, 0x3aa, 0x356, 0x4e6, 0x444, 0x4e6, 0x444, 0x643, 0x552, 0x643, +0x552, 0x7a6, 0x667, 0x7a6, 0x667, 0x8ee, 0x760, 0x8ee, 0x760, 0xa1f, 0x844, +0xa1f, 0x844, 0xa1f, 0x844, 0xb62, 0x93e, 0xb62, 0x93e, 0xce5, 0xa7b, 0xce5, +0xa7b, 0xeac, 0xc00, 0xeac, 0xc00, 0x1069, 0xd81, 0x1069, 0xd81, 0x11ce, 0xeb0, +0x11ce, 0xeb0, 0x11ce, 0xeb0, 0x12f9, 0xfad, 0x12f9, 0xfad, 0x13f8, 0x1085, 0x13f8, +0x1085, 0x14af, 0x111c, 0x14af, 0x111c, 0x1559, 0x11b0, 0x1559, 0x11b0, 0x1636, 0x127d, +0x1636, 0x127d, 0x16d7, 0x1318, 0x16d7, 0x1318, 0x16d7, 0x1318, 0x16f2, 0x1334, 0x16f2, +0x1334, 0x16b2, 0x12fd, 0x16b2, 0x12fd, 0x167e, 0x12d8, 0x167e, 0x12d8, 0x166b, 0x12dc, +0x166b, 0x12dc, 0x15f6, 0x1283, 0x15f6, 0x1283, 0x1535, 0x11e3, 0x1535, 0x11e3, 0x1535, +0x11e3, 0x1482, 0x1156, 0x1482, 0x1156, 0x13e5, 0x10e3, 0x13e5, 0x10e3, 0x137d, 0x10a7, +0x137d, 0x10a7, 0x137e, 0x10d6, 0x137e, 0x10d6, 0x136d, 0x10f6, 0x136d, 0x10f6, 0x136d, +0x10f6, 0x12c6, 0x107f, 0x12c6, 0x107f, 0x11c1, 0xfab, 0x11c1, 0xfab, 0x10a7, 0xec1, +0x10a7, 0xec1, 0xfbf, 0xe08, 0xfbf, 0xe08, 0xf04, 0xd7b, 0xf04, 0xd7b, 0xe24, +0xcc6, 0xe24, 0xcc6, 0xe24, 0xcc6, 0xcf6, 0xbc2, 0xcf6, 0xbc2, 0xb9f, 0xa93, +0xb9f, 0xa93, 0xa30, 0x949, 0xa30, 0x949, 0x8da, 0x815, 0x8da, 0x815, 0x7bb, +0x716, 0x7bb, 0x716, 0x6c4, 0x63b, 0x6c4, 0x63b, 0x6c4, 0x63b, 0x631, 0x5c1, +0x631, 0x5c1, 0x60f, 0x5b6, 0x60f, 0x5b6, 0x61d, 0x5d9, 0x61d, 0x5d9, 0x60b, +0x5d8, 0x60b, 0x5d8, 0x5d6, 0x5b2, 0x5d6, 0x5b2, 0x5d6, 0x5b2, 0x55f, 0x548, +0x55f, 0x548, 0x489, 0x47c, 0x489, 0x47c, 0x355, 0x351, 0x355, 0x351, 0x1fa, +0x1fc, 0x1fa, 0x1fc, 0xb8, 0xc0, 0xb8, 0xc0, 0xff68, 0xff74, 0xff68, 0xff74, +0xff68, 0xff74, 0xfe18, 0xfe27, 0xfe18, 0xfe27, 0xfd13, 0xfd26, 0xfd13, 0xfd26, 0xfc9a, +0xfcb0, 0xfc9a, 0xfcb0, 0xfc38, 0xfc51, 0xfc38, 0xfc51, 0xfbf7, 0xfc14, 0xfbf7, 0xfc14, +0xfbf6, 0xfc19, 0xfbf6, 0xfc19, 0xfbf6, 0xfc19, 0xfb99, 0xfbc2, 0xfb99, 0xfbc2, 0xfad4, +0xfb04, 0xfad4, 0xfb04, 0xf9c5, 0xf9fe, 0xf9c5, 0xf9fe, 0xf89f, 0xf8e4, 0xf89f, 0xf8e4, +0xf78f, 0xf7e1, 0xf78f, 0xf7e1, 0xf78f, 0xf7e1, 0xf6d6, 0xf737, 0xf6d6, 0xf737, 0xf64f, +0xf6c1, 0xf64f, 0xf6c1, 0xf5c8, 0xf64d, 0xf5c8, 0xf64d, 0xf559, 0xf5f2, 0xf559, 0xf5f2, +0xf4cd, 0xf57c, 0xf4cd, 0xf57c, 0xf423, 0xf4ea, 0xf423, 0xf4ea, 0xf423, 0xf4ea, 0xf363, +0xf440, 0xf363, 0xf440, 0xf2a0, 0xf396, 0xf2a0, 0xf396, 0xf1f1, 0xf2fe, 0xf1f1, 0xf2fe, +0xf174, 0xf298, 0xf174, 0xf298, 0xf11b, 0xf255, 0xf11b, 0xf255, 0xf0bb, 0xf209, 0xf0bb, +0xf209, 0xf0bb, 0xf209, 0xf041, 0xf1a2, 0xf041, 0xf1a2, 0xefde, 0xf14f, 0xefde, 0xf14f, +0xefa2, 0xf121, 0xefa2, 0xf121, 0xef40, 0xf0cb, 0xef40, 0xf0cb, 0xeec8, 0xf05b, 0xeec8, +0xf05b, 0xeec8, 0xf05b, 0xee7b, 0xf015, 0xee7b, 0xf015, 0xeed2, 0xf070, 0xeed2, 0xf070, +0xefe7, 0xf186, 0xefe7, 0xf186, 0xf13e, 0xf2dd, 0xf13e, 0xf2dd, 0xf24d, 0xf3ea, 0xf24d, +0xf3ea, 0xf322, 0xf4bb, 0xf322, 0xf4bb, 0xf322, 0xf4bb, 0xf415, 0xf5a8, 0xf415, 0xf5a8, +0xf505, 0xf693, 0xf505, 0xf693, 0xf5e6, 0xf76e, 0xf5e6, 0xf76e, 0xf6bf, 0xf841, 0xf6bf, +0xf841, 0xf773, 0xf8ef, 0xf773, 0xf8ef, 0xf81c, 0xf992, 0xf81c, 0xf992, 0xf81c, 0xf992, +0xf8e2, 0xfa53, 0xf8e2, 0xfa53, 0xf969, 0xfad6, 0xf969, 0xfad6, 0xf9b7, 0xfb1f, 0xf9b7, +0xfb1f, 0xfa1e, 0xfb81, 0xfa1e, 0xfb81, 0xfaad, 0xfc0c, 0xfaad, 0xfc0c, 0xfaad, 0xfc0c, +0xfb78, 0xfcd2, 0xfb78, 0xfcd2, 0xfc91, 0xfde5, 0xfc91, 0xfde5, 0xfdb3, 0xff00, 0xfdb3, +0xff00, 0xfea8, 0xffeb, 0xfea8, 0xffeb, 0xff72, 0xaa, 0xff72, 0xaa, 0xfff7, 0x120, +0xfff7, 0x120, 0xfff7, 0x120, 0x7f, 0x198, 0x7f, 0x198, 0x11a, 0x21d, 0x11a, +0x21d, 0x1c9, 0x2b4, 0x1c9, 0x2b4, 0x283, 0x351, 0x283, 0x351, 0x32b, 0x3d9, +0x32b, 0x3d9, 0x3a2, 0x42d, 0x3a2, 0x42d, 0x3a2, 0x42d, 0x3e5, 0x449, 0x3e5, +0x449, 0x45d, 0x497, 0x45d, 0x497, 0x501, 0x511, 0x501, 0x511, 0x5da, 0x5bd, +0x5da, 0x5bd, 0x69d, 0x652, 0x69d, 0x652, 0x69d, 0x652, 0x740, 0x6ca, 0x740, +0x6ca, 0x7fa, 0x759, 0x7fa, 0x759, 0x89f, 0x7d5, 0x89f, 0x7d5, 0x921, 0x833, +0x921, 0x833, 0x96e, 0x85f, 0x96e, 0x85f, 0x99c, 0x872, 0x99c, 0x872, 0x99c, +0x872, 0x96b, 0x82b, 0x96b, 0x82b, 0x910, 0x7c1, 0x910, 0x7c1, 0x8d7, 0x781, +0x8d7, 0x781, 0x86e, 0x716, 0x86e, 0x716, 0x7a8, 0x657, 0x7a8, 0x657, 0x7a8, +0x657, 0x6ab, 0x567, 0x6ab, 0x567, 0x577, 0x447, 0x577, 0x447, 0x3de, 0x2c8, +0x3de, 0x2c8, 0x1d3, 0xdd, 0x1d3, 0xdd, 0xff54, 0xfe84, 0xff54, 0xfe84, 0xfcc1, +0xfc1a, 0xfcc1, 0xfc1a, 0xfcc1, 0xfc1a, 0xfa40, 0xf9c7, 0xfa40, 0xf9c7, 0xf842, 0xf7f8, +0xf842, 0xf7f8, 0xf726, 0xf70e, 0xf726, 0xf70e, 0xf682, 0xf69c, 0xf682, 0xf69c, 0xf607, +0xf655, 0xf607, 0xf655, 0xf5a6, 0xf626, 0xf5a6, 0xf626, 0xf5a6, 0xf626, 0xf536, 0xf5e8, +0xf536, 0xf5e8, 0xf476, 0xf559, 0xf476, 0xf559, 0xf39e, 0xf4af, 0xf39e, 0xf4af, 0xf2a1, +0xf3de, 0xf2a1, 0xf3de, 0xf1a8, 0xf30f, 0xf1a8, 0xf30f, 0xf1a8, 0xf30f, 0xf119, 0xf2a7, +0xf119, 0xf2a7, 0xf0c5, 0xf277, 0xf0c5, 0xf277, 0xf05b, 0xf22e, 0xf05b, 0xf22e, 0xefb5, +0xf1a8, 0xefb5, 0xf1a8, 0xef14, 0xf123, 0xef14, 0xf123, 0xee88, 0xf0b0, 0xee88, 0xf0b0, +0xee88, 0xf0b0, 0xedfd, 0xf03c, 0xedfd, 0xf03c, 0xed76, 0xefc9, 0xed76, 0xefc9, 0xed1a, +0xef7e, 0xed1a, 0xef7e, 0xed16, 0xef89, 0xed16, 0xef89, 0xed65, 0xefe2, 0xed65, 0xefe2, +0xee0c, 0xf091, 0xee0c, 0xf091, 0xee0c, 0xf091, 0xef1c, 0xf1a4, 0xef1c, 0xf1a4, 0xf069, +0xf2f0, 0xf069, 0xf2f0, 0xf19b, 0xf41c, 0xf19b, 0xf41c, 0xf2aa, 0xf520, 0xf2aa, 0xf520, +0xf3a0, 0xf606, 0xf3a0, 0xf606, 0xf3a0, 0xf606, 0xf46d, 0xf6bc, 0xf46d, 0xf6bc, 0xf55a, +0xf78c, 0xf55a, 0xf78c, 0xf6bc, 0xf8cb, 0xf6bc, 0xf8cb, 0xf857, 0xfa3b, 0xf857, 0xfa3b, +0xf9f2, 0xfba5, 0xf9f2, 0xfba5, 0xfba1, 0xfd1d, 0xfba1, 0xfd1d, 0xfba1, 0xfd1d, 0xfd7b, +0xfeb9, 0xfd7b, 0xfeb9, 0xff6c, 0x66, 0xff6c, 0x66, 0x11f, 0x1d0, 0x11f, 0x1d0, +0x2dc, 0x33f, 0x2dc, 0x33f, 0x4c6, 0x4d8, 0x4c6, 0x4d8, 0x68e, 0x64c, 0x68e, +0x64c, 0x68e, 0x64c, 0x825, 0x78d, 0x825, 0x78d, 0x989, 0x89a, 0x989, 0x89a, +0xae4, 0x99f, 0xae4, 0x99f, 0xc52, 0xab8, 0xc52, 0xab8, 0xdee, 0xc03, 0xdee, +0xc03, 0xdee, 0xc03, 0xfad, 0xd74, 0xfad, 0xd74, 0x1196, 0xf14, 0x1196, 0xf14, +0x1381, 0x10bc, 0x1381, 0x10bc, 0x14fe, 0x11fc, 0x14fe, 0x11fc, 0x163d, 0x1305, 0x163d, +0x1305, 0x1734, 0x13ce, 0x1734, 0x13ce, 0x1734, 0x13ce, 0x17e9, 0x145d, 0x17e9, 0x145d, +0x189f, 0x14f5, 0x189f, 0x14f5, 0x1973, 0x15b3, 0x1973, 0x15b3, 0x1a37, 0x1668, 0x1a37, +0x1668, 0x1a6a, 0x1696, 0x1a6a, 0x1696, 0x1a2c, 0x1659, 0x1a2c, 0x1659, 0x1a2c, 0x1659, +0x19e2, 0x1617, 0x19e2, 0x1617, 0x1994, 0x15d7, 0x1994, 0x15d7, 0x191e, 0x1576, 0x191e, +0x1576, 0x18ac, 0x151e, 0x18ac, 0x151e, 0x1849, 0x14da, 0x1849, 0x14da, 0x1849, 0x14da, +0x1806, 0x14ba, 0x1806, 0x14ba, 0x181c, 0x14f6, 0x181c, 0x14f6, 0x1835, 0x1539, 0x1835, +0x1539, 0x17cf, 0x14fe, 0x17cf, 0x14fe, 0x1711, 0x146e, 0x1711, 0x146e, 0x1699, 0x1424, +0x1699, 0x1424, 0x1699, 0x1424, 0x1625, 0x13e0, 0x1625, 0x13e0, 0x154c, 0x1336, 0x154c, +0x1336, 0x1425, 0x123f, 0x1425, 0x123f, 0x12e8, 0x1131, 0x12e8, 0x1131, 0x119f, 0x1016, +0x119f, 0x1016, 0x1033, 0xed7, 0x1033, 0xed7, 0x1033, 0xed7, 0xed3, 0xda3, 0xed3, +0xda3, 0xd94, 0xc8e, 0xd94, 0xc8e, 0xc7a, 0xb9c, 0xc7a, 0xb9c, 0xb37, 0xa7f, +0xb37, 0xa7f, 0xa02, 0x96d, 0xa02, 0x96d, 0xa02, 0x96d, 0x924, 0x8b0, 0x924, +0x8b0, 0x869, 0x813, 0x869, 0x813, 0x7f9, 0x7bd, 0x7f9, 0x7bd, 0x7ca, 0x7a6, +0x7ca, 0x7a6, 0x792, 0x782, 0x792, 0x782, 0x701, 0x703, 0x701, 0x703, 0x701, +0x703, 0x64a, 0x65b, 0x64a, 0x65b, 0x569, 0x587, 0x569, 0x587, 0x42d, 0x454, +0x42d, 0x454, 0x2c8, 0x2f7, 0x2c8, 0x2f7, 0x12f, 0x164, 0x12f, 0x164, 0xffa5, +0xffde, 0xffa5, 0xffde, 0xffa5, 0xffde, 0xfe86, 0xfec3, 0xfe86, 0xfec3, 0xfdc7, 0xfe07, +0xfdc7, 0xfe07, 0xfd4a, 0xfd8e, 0xfd4a, 0xfd8e, 0xfcde, 0xfd25, 0xfcde, 0xfd25, 0xfc35, +0xfc81, 0xfc35, 0xfc81, 0xfc35, 0xfc81, 0xfb1a, 0xfb6b, 0xfb1a, 0xfb6b, 0xf9b4, 0xfa0d, +0xf9b4, 0xfa0d, 0xf847, 0xf8aa, 0xf847, 0xf8aa, 0xf6ee, 0xf75b, 0xf6ee, 0xf75b, 0xf5e8, +0xf662, 0xf5e8, 0xf662, 0xf51c, 0xf5a5, 0xf51c, 0xf5a5, 0xf51c, 0xf5a5, 0xf479, 0xf511, +0xf479, 0xf511, 0xf3f9, 0xf4a3, 0xf3f9, 0xf4a3, 0xf345, 0xf401, 0xf345, 0xf401, 0xf264, +0xf332, 0xf264, 0xf332, 0xf191, 0xf273, 0xf191, 0xf273, 0xf10b, 0xf1ff, 0xf10b, 0xf1ff, +0xf10b, 0xf1ff, 0xf09d, 0xf1a3, 0xf09d, 0xf1a3, 0xf01b, 0xf131, 0xf01b, 0xf131, 0xef7a, +0xf09d, 0xef7a, 0xf09d, 0xeebb, 0xefeb, 0xeebb, 0xefeb, 0xee28, 0xef61, 0xee28, 0xef61, +0xee28, 0xef61, 0xedcf, 0xef0f, 0xedcf, 0xef0f, 0xed7b, 0xeebe, 0xed7b, 0xeebe, 0xece1, +0xee25, 0xece1, 0xee25, 0xec26, 0xed69, 0xec26, 0xed69, 0xeb86, 0xecc4, 0xeb86, 0xecc4, +0xeb71, 0xecaa, 0xeb71, 0xecaa, 0xeb71, 0xecaa, 0xec04, 0xed35, 0xec04, 0xed35, 0xeccd, +0xedf5, 0xeccd, 0xedf5, 0xed83, 0xeea2, 0xed83, 0xeea2, 0xee3e, 0xef53, 0xee3e, 0xef53, +0xef06, 0xf012, 0xef06, 0xf012, 0xef75, 0xf07a, 0xef75, 0xf07a, 0xef75, 0xf07a, 0xefdd, +0xf0db, 0xefdd, 0xf0db, 0xf0b6, 0xf1b0, 0xf0b6, 0xf1b0, 0xf207, 0xf2fd, 0xf207, 0xf2fd, +0xf32e, 0xf423, 0xf32e, 0xf423, 0xf3d8, 0xf4ce, 0xf3d8, 0xf4ce, 0xf3d8, 0xf4ce, 0xf41b, +0xf514, 0xf41b, 0xf514, 0xf423, 0xf51f, 0xf423, 0xf51f, 0xf474, 0xf576, 0xf474, 0xf576, +0xf53b, 0xf642, 0xf53b, 0xf642, 0xf6c6, 0xf7d2, 0xf6c6, 0xf7d2, 0xf8ab, 0xf9bc, 0xf8ab, +0xf9bc, 0xf8ab, 0xf9bc, 0xfa81, 0xfb94, 0xfa81, 0xfb94, 0xfc09, 0xfd1c, 0xfc09, 0xfd1c, +0xfcf8, 0xfe09, 0xfcf8, 0xfe09, 0xfd69, 0xfe74, 0xfd69, 0xfe74, 0xfd75, 0xfe76, 0xfd75, +0xfe76, 0xfd75, 0xfe76, 0xfdc1, 0xfeb4, 0xfdc1, 0xfeb4, 0xfe80, 0xff60, 0xfe80, 0xff60, +0xff78, 0x42, 0xff78, 0x42, 0x3b, 0xea, 0x3b, 0xea, 0xd8, 0x168, 0xd8, +0x168, 0x1d8, 0x245, 0x1d8, 0x245, 0x1d8, 0x245, 0x2fc, 0x345, 0x2fc, 0x345, +0x3c7, 0x3e9, 0x3c7, 0x3e9, 0x46c, 0x467, 0x46c, 0x467, 0x587, 0x559, 0x587, +0x559, 0x70d, 0x6ba, 0x70d, 0x6ba, 0x888, 0x810, 0x888, 0x810, 0x888, 0x810, +0x9a3, 0x90a, 0x9a3, 0x90a, 0xa5f, 0x9a9, 0xa5f, 0x9a9, 0xaa8, 0x9da, 0xaa8, +0x9da, 0xaa9, 0x9c8, 0xaa9, 0x9c8, 0xabe, 0x9d0, 0xabe, 0x9d0, 0xabe, 0x9d0, +0xb1f, 0xa2b, 0xb1f, 0xa2b, 0xb7c, 0xa88, 0xb7c, 0xa88, 0xb55, 0xa67, 0xb55, +0xa67, 0xad3, 0x9f0, 0xad3, 0x9f0, 0x9ef, 0x91f, 0x9ef, 0x91f, 0x8b9, 0x800, +0x8b9, 0x800, 0x8b9, 0x800, 0x744, 0x6a6, 0x744, 0x6a6, 0x59e, 0x520, 0x59e, +0x520, 0x3a2, 0x345, 0x3a2, 0x345, 0x13f, 0x107, 0x13f, 0x107, 0xfeea, 0xfed8, +0xfeea, 0xfed8, 0xfcdd, 0xfcf0, 0xfcdd, 0xfcf0, 0xfcdd, 0xfcf0, 0xfb50, 0xfb8a, 0xfb50, +0xfb8a, 0xfa6c, 0xfaca, 0xfa6c, 0xfaca, 0xfa2e, 0xfab0, 0xfa2e, 0xfab0, 0xfa34, 0xfad8, +0xfa34, 0xfad8, 0xfa14, 0xfad8, 0xfa14, 0xfad8, 0xfa14, 0xfad8, 0xf9c0, 0xfaa2, 0xf9c0, +0xfaa2, 0xf94d, 0xfa4a, 0xf94d, 0xfa4a, 0xf8bc, 0xf9d4, 0xf8bc, 0xf9d4, 0xf81d, 0xf94c, +0xf81d, 0xf94c, 0xf7b6, 0xf8fc, 0xf7b6, 0xf8fc, 0xf76f, 0xf8ca, 0xf76f, 0xf8ca, 0xf76f, +0xf8ca, 0xf6ec, 0xf85c, 0xf6ec, 0xf85c, 0xf5f8, 0xf77b, 0xf5f8, 0xf77b, 0xf4d6, 0xf66c, +0xf4d6, 0xf66c, 0xf3c9, 0xf572, 0xf3c9, 0xf572, 0xf2e9, 0xf4a3, 0xf2e9, 0xf4a3, 0xf242, +0xf40e, 0xf242, 0xf40e, 0xf242, 0xf40e, 0xf1ce, 0xf3ab, 0xf1ce, 0xf3ab, 0xf180, 0xf36c, +0xf180, 0xf36c, 0xf14f, 0xf34a, 0xf14f, 0xf34a, 0xf17b, 0xf382, 0xf17b, 0xf382, 0xf1fd, +0xf40e, 0xf1fd, 0xf40e, 0xf1fd, 0xf40e, 0xf29a, 0xf4b1, 0xf29a, 0xf4b1, 0xf30c, 0xf525, +0xf30c, 0xf525, 0xf3a7, 0xf5be, 0xf3a7, 0xf5be, 0xf4b5, 0xf6c4, 0xf4b5, 0xf6c4, 0xf5d6, +0xf7d8, 0xf5d6, 0xf7d8, 0xf727, 0xf914, 0xf727, 0xf914, 0xf727, 0xf914, 0xf879, 0xfa4c, +0xf879, 0xfa4c, 0xf9ab, 0xfb5c, 0xf9ab, 0xfb5c, 0xfadd, 0xfc66, 0xfadd, 0xfc66, 0xfc3c, +0xfd96, 0xfc3c, 0xfd96, 0xfdf5, 0xff19, 0xfdf5, 0xff19, 0xff91, 0x79, 0xff91, 0x79, +0xff91, 0x79, 0xf1, 0x199, 0xf1, 0x199, 0x25a, 0x2bc, 0x25a, 0x2bc, 0x3ca, +0x3e3, 0x3ca, 0x3e3, 0x4f1, 0x4bf, 0x4f1, 0x4bf, 0x5c2, 0x543, 0x5c2, 0x543, +0x5c2, 0x543, 0x6c0, 0x5f5, 0x6c0, 0x5f5, 0x7f1, 0x6da, 0x7f1, 0x6da, 0x90f, +0x7ae, 0x90f, 0x7ae, 0xa1c, 0x875, 0xa1c, 0x875, 0xb57, 0x96e, 0xb57, 0x96e, +0xcc7, 0xaa0, 0xcc7, 0xaa0, 0xcc7, 0xaa0, 0xe2f, 0xbd1, 0xe2f, 0xbd1, 0xfaf, +0xd20, 0xfaf, 0xd20, 0x1141, 0xe88, 0x1141, 0xe88, 0x12a3, 0xfc7, 0x12a3, 0xfc7, +0x13c3, 0x10cb, 0x13c3, 0x10cb, 0x1496, 0x1188, 0x1496, 0x1188, 0x1496, 0x1188, 0x152e, +0x1212, 0x152e, 0x1212, 0x159b, 0x1277, 0x159b, 0x1277, 0x15b0, 0x128b, 0x15b0, 0x128b, +0x1599, 0x1278, 0x1599, 0x1278, 0x15a5, 0x128e, 0x15a5, 0x128e, 0x15a5, 0x128e, 0x1598, +0x128e, 0x1598, 0x128e, 0x1527, 0x1230, 0x1527, 0x1230, 0x1482, 0x11a1, 0x1482, 0x11a1, +0x1401, 0x1139, 0x1401, 0x1139, 0x1396, 0x10e9, 0x1396, 0x10e9, 0x12fd, 0x106e, 0x12fd, +0x106e, 0x12fd, 0x106e, 0x1230, 0xfc1, 0x1230, 0xfc1, 0x117a, 0xf2d, 0x117a, 0xf2d, +0x111a, 0xeef, 0x111a, 0xeef, 0x10d0, 0xec8, 0x10d0, 0xec8, 0x1032, 0xe4f, 0x1032, +0xe4f, 0xf38, 0xd7a, 0xf38, 0xd7a, 0xf38, 0xd7a, 0xe2d, 0xc94, 0xe2d, 0xc94, +0xd1a, 0xba6, 0xd1a, 0xba6, 0xc18, 0xaca, 0xc18, 0xaca, 0xb3c, 0xa12, 0xb3c, +0xa12, 0xa37, 0x931, 0xa37, 0x931, 0xa37, 0x931, 0x90a, 0x827, 0x90a, 0x827, +0x7e0, 0x71f, 0x7e0, 0x71f, 0x6e3, 0x642, 0x6e3, 0x642, 0x641, 0x5be, 0x641, +0x5be, 0x5f2, 0x58b, 0x5f2, 0x58b, 0x5bf, 0x571, 0x5bf, 0x571, 0x5bf, 0x571, +0x53f, 0x507, 0x53f, 0x507, 0x47c, 0x457, 0x47c, 0x457, 0x388, 0x372, 0x388, +0x372, 0x280, 0x276, 0x280, 0x276, 0x1b4, 0x1b4, 0x1b4, 0x1b4, 0xde, 0xe3, +0xde, 0xe3, 0xde, 0xe3, 0xffef, 0xfff7, 0xffef, 0xfff7, 0xfede, 0xfee6, 0xfede, +0xfee6, 0xfdbf, 0xfdc6, 0xfdbf, 0xfdc6, 0xfcce, 0xfcd2, 0xfcce, 0xfcd2, 0xfc28, 0xfc28, +0xfc28, 0xfc28, 0xfc28, 0xfc28, 0xfc05, 0xfc01, 0xfc05, 0xfc01, 0xfc00, 0xfbf8, 0xfc00, +0xfbf8, 0xfbf4, 0xfbe8, 0xfbf4, 0xfbe8, 0xfbdf, 0xfbd2, 0xfbdf, 0xfbd2, 0xfb8b, 0xfb7f, +0xfb8b, 0xfb7f, 0xfad9, 0xfad0, 0xfad9, 0xfad0, 0xfad9, 0xfad0, 0xf9c9, 0xf9c7, 0xf9c9, +0xf9c7, 0xf8b1, 0xf8b8, 0xf8b1, 0xf8b8, 0xf7eb, 0xf7ff, 0xf7eb, 0xf7ff, 0xf7af, 0xf7d3, +0xf7af, 0xf7d3, 0xf7b8, 0xf7ef, 0xf7b8, 0xf7ef, 0xf78d, 0xf7da, 0xf78d, 0xf7da, 0xf78d, +0xf7da, 0xf6f5, 0xf75b, 0xf6f5, 0xf75b, 0xf644, 0xf6c4, 0xf644, 0xf6c4, 0xf5c6, 0xf661, +0xf5c6, 0xf661, 0xf543, 0xf5fa, 0xf543, 0xf5fa, 0xf4a9, 0xf57c, 0xf4a9, 0xf57c, 0xf4a9, +0xf57c, 0xf438, 0xf526, 0xf438, 0xf526, 0xf3ff, 0xf506, 0xf3ff, 0xf506, 0xf3d4, 0xf4f2, +0xf3d4, 0xf4f2, 0xf3bb, 0xf4ee, 0xf3bb, 0xf4ee, 0xf36a, 0xf4ae, 0xf36a, 0xf4ae, 0xf2db, +0xf42e, 0xf2db, 0xf42e, 0xf2db, 0xf42e, 0xf24f, 0xf3ac, 0xf24f, 0xf3ac, 0xf205, 0xf369, +0xf205, 0xf369, 0xf207, 0xf36f, 0xf207, 0xf36f, 0xf224, 0xf38d, 0xf224, 0xf38d, 0xf2ad, +0xf414, 0xf2ad, 0xf414, 0xf2ad, 0xf414, 0xf3bf, 0xf521, 0xf3bf, 0xf521, 0xf526, 0xf682, +0xf526, 0xf682, 0xf653, 0xf7a9, 0xf653, 0xf7a9, 0xf70f, 0xf85d, 0xf70f, 0xf85d, 0xf793, +0xf8d9, 0xf793, 0xf8d9, 0xf812, 0xf951, 0xf812, 0xf951, 0xf812, 0xf951, 0xf8c0, 0xf9f8, +0xf8c0, 0xf9f8, 0xf995, 0xfac8, 0xf995, 0xfac8, 0xfa75, 0xfba4, 0xfa75, 0xfba4, 0xfaef, +0xfc1b, 0xfaef, 0xfc1b, 0xfb26, 0xfc51, 0xfb26, 0xfc51, 0xfb59, 0xfc84, 0xfb59, 0xfc84, +0xfb59, 0xfc84, 0xfb81, 0xfcae, 0xfb81, 0xfcae, 0xfbca, 0xfcf7, 0xfbca, 0xfcf7, 0xfc55, +0xfd82, 0xfc55, 0xfd82, 0xfd59, 0xfe87, 0xfd59, 0xfe87, 0xfe98, 0xffc3, 0xfe98, 0xffc3, +0xfe98, 0xffc3, 0xffba, 0xe1, 0xffba, 0xe1, 0x9f, 0x1c0, 0x9f, 0x1c0, 0x142, +0x259, 0x142, 0x259, 0x1fb, 0x303, 0x1fb, 0x303, 0x2ca, 0x3c1, 0x2ca, 0x3c1, +0x359, 0x43a, 0x359, 0x43a, 0x359, 0x43a, 0x3ce, 0x495, 0x3ce, 0x495, 0x426, +0x4cf, 0x426, 0x4cf, 0x463, 0x4ea, 0x463, 0x4ea, 0x483, 0x4e6, 0x483, 0x4e6, +0x45a, 0x497, 0x45a, 0x497, 0x447, 0x45b, 0x447, 0x45b, 0x447, 0x45b, 0x4a8, +0x493, 0x4a8, 0x493, 0x5a3, 0x566, 0x5a3, 0x566, 0x6ad, 0x649, 0x6ad, 0x649, +0x743, 0x6bb, 0x743, 0x6bb, 0x768, 0x6bf, 0x768, 0x6bf, 0x768, 0x6bf, 0x736, +0x670, 0x736, 0x670, 0x711, 0x632, 0x711, 0x632, 0x703, 0x612, 0x703, 0x612, +0x70e, 0x611, 0x70e, 0x611, 0x72a, 0x627, 0x72a, 0x627, 0x723, 0x620, 0x723, +0x620, 0x723, 0x620, 0x6e8, 0x5eb, 0x6e8, 0x5eb, 0x67d, 0x58d, 0x67d, 0x58d, +0x5db, 0x4fb, 0x5db, 0x4fb, 0x4d3, 0x40a, 0x4d3, 0x40a, 0x372, 0x2c4, 0x372, +0x2c4, 0x1e2, 0x151, 0x1e2, 0x151, 0x1e2, 0x151, 0xfffe, 0xff8d, 0xfffe, 0xff8d, +0xfdbb, 0xfd6c, 0xfdbb, 0xfd6c, 0xfb71, 0xfb44, 0xfb71, 0xfb44, 0xf948, 0xf93e, 0xf948, +0xf93e, 0xf78c, 0xf7a3, 0xf78c, 0xf7a3, 0xf78c, 0xf7a3, 0xf67d, 0xf6b5, 0xf67d, 0xf6b5, +0xf5d7, 0xf62f, 0xf5d7, 0xf62f, 0xf53f, 0xf5b4, 0xf53f, 0xf5b4, 0xf4cd, 0xf55d, 0xf4cd, +0xf55d, 0xf475, 0xf51d, 0xf475, 0xf51d, 0xf3d0, 0xf48f, 0xf3d0, 0xf48f, 0xf3d0, 0xf48f, +0xf307, 0xf3dc, 0xf307, 0xf3dc, 0xf279, 0xf361, 0xf279, 0xf361, 0xf23b, 0xf336, 0xf23b, +0xf336, 0xf207, 0xf313, 0xf207, 0xf313, 0xf1c8, 0xf2e5, 0xf1c8, 0xf2e5, 0xf167, 0xf296, +0xf167, 0xf296, 0xf167, 0xf296, 0xf0aa, 0xf1ea, 0xf0aa, 0xf1ea, 0xefd5, 0xf127, 0xefd5, +0xf127, 0xef32, 0xf097, 0xef32, 0xf097, 0xeedc, 0xf054, 0xeedc, 0xf054, 0xeea6, 0xf031, +0xeea6, 0xf031, 0xeea6, 0xf031, 0xeebe, 0xf05c, 0xeebe, 0xf05c, 0xef6e, 0xf11e, 0xef6e, +0xf11e, 0xf072, 0xf234, 0xf072, 0xf234, 0xf175, 0xf346, 0xf175, 0xf346, 0xf219, 0xf3f7, +0xf219, 0xf3f7, 0xf289, 0xf471, 0xf289, 0xf471, 0xf289, 0xf471, 0xf31e, 0xf50d, 0xf31e, +0xf50d, 0xf3c7, 0xf5b7, 0xf3c7, 0xf5b7, 0xf48e, 0xf67a, 0xf48e, 0xf67a, 0xf56f, 0xf752, +0xf56f, 0xf752, 0xf66b, 0xf83d, 0xf66b, 0xf83d, 0xf789, 0xf945, 0xf789, 0xf945, 0xf789, +0xf945, 0xf8e5, 0xfa84, 0xf8e5, 0xfa84, 0xfaa6, 0xfc20, 0xfaa6, 0xfc20, 0xfc8c, 0xfddb, +0xfc8c, 0xfddb, 0xfe97, 0xffb5, 0xfe97, 0xffb5, 0xbc, 0x1a3, 0xbc, 0x1a3, 0xbc, +0x1a3, 0x2a6, 0x352, 0x2a6, 0x352, 0x442, 0x4ae, 0x442, 0x4ae, 0x57a, 0x5a3, +0x57a, 0x5a3, 0x69c, 0x67f, 0x69c, 0x67f, 0x7f3, 0x790, 0x7f3, 0x790, 0x963, +0x8b9, 0x963, 0x8b9, 0x963, 0x8b9, 0xaa8, 0x9b8, 0xaa8, 0x9b8, 0xb9c, 0xa67, +0xb9c, 0xa67, 0xc8f, 0xb19, 0xc8f, 0xb19, 0xdc6, 0xc11, 0xdc6, 0xc11, 0xf4b, +0xd5c, 0xf4b, 0xd5c, 0x1110, 0xeed, 0x1110, 0xeed, 0x1110, 0xeed, 0x12d3, 0x1080, +0x12d3, 0x1080, 0x144b, 0x11cd, 0x144b, 0x11cd, 0x155d, 0x12bb, 0x155d, 0x12bb, 0x1616, +0x1355, 0x1616, 0x1355, 0x1667, 0x138c, 0x1667, 0x138c, 0x1667, 0x138c, 0x167a, 0x138b, +0x167a, 0x138b, 0x16ae, 0x13b0, 0x16ae, 0x13b0, 0x16d4, 0x13cc, 0x16d4, 0x13cc, 0x16d1, +0x13c5, 0x16d1, 0x13c5, 0x16e5, 0x13d7, 0x16e5, 0x13d7, 0x171f, 0x1414, 0x171f, 0x1414, +0x171f, 0x1414, 0x1763, 0x1460, 0x1763, 0x1460, 0x1756, 0x145c, 0x1756, 0x145c, 0x16f3, +0x1407, 0x16f3, 0x1407, 0x1665, 0x138a, 0x1665, 0x138a, 0x15ed, 0x1324, 0x15ed, 0x1324, +0x15c7, 0x1313, 0x15c7, 0x1313, 0x15c7, 0x1313, 0x15c5, 0x1329, 0x15c5, 0x1329, 0x1584, +0x1302, 0x1584, 0x1302, 0x1499, 0x1233, 0x1499, 0x1233, 0x1337, 0x10ef, 0x1337, 0x10ef, +0x11da, 0xfb2, 0x11da, 0xfb2, 0x11da, 0xfb2, 0x10bc, 0xeb5, 0x10bc, 0xeb5, 0xfd4, +0xdef, 0xfd4, 0xdef, 0xef3, 0xd31, 0xef3, 0xd31, 0xe02, 0xc65, 0xe02, 0xc65, +0xcdd, 0xb64, 0xcdd, 0xb64, 0xbb3, 0xa5f, 0xbb3, 0xa5f, 0xbb3, 0xa5f, 0xa7e, +0x94e, 0xa7e, 0x94e, 0x948, 0x83a, 0x948, 0x83a, 0x87c, 0x790, 0x87c, 0x790, +0x7e4, 0x719, 0x7e4, 0x719, 0x73c, 0x68f, 0x73c, 0x68f, 0x664, 0x5d2, 0x664, +0x5d2, 0x664, 0x5d2, 0x584, 0x50c, 0x584, 0x50c, 0x4d4, 0x471, 0x4d4, 0x471, +0x453, 0x405, 0x453, 0x405, 0x40a, 0x3cc, 0x40a, 0x3cc, 0x368, 0x338, 0x368, +0x338, 0x368, 0x338, 0x230, 0x20d, 0x230, 0x20d, 0xbf, 0xa6, 0xbf, 0xa6, +0xff3f, 0xff2f, 0xff3f, 0xff2f, 0xfde9, 0xfde1, 0xfde9, 0xfde1, 0xfd11, 0xfd10, 0xfd11, +0xfd10, 0xfcc9, 0xfccf, 0xfcc9, 0xfccf, 0xfcc9, 0xfccf, 0xfcbb, 0xfcca, 0xfcbb, 0xfcca, +0xfc61, 0xfc79, 0xfc61, 0xfc79, 0xfb89, 0xfbac, 0xfb89, 0xfbac, 0xfa46, 0xfa77, 0xfa46, +0xfa77, 0xf8c2, 0xf901, 0xf8c2, 0xf901, 0xf8c2, 0xf901, 0xf75e, 0xf7b0, 0xf75e, 0xf7b0, +0xf66a, 0xf6cf, 0xf66a, 0xf6cf, 0xf5fb, 0xf677, 0xf5fb, 0xf677, 0xf5a1, 0xf635, 0xf5a1, +0xf635, 0xf51a, 0xf5c9, 0xf51a, 0xf5c9, 0xf498, 0xf563, 0xf498, 0xf563, 0xf498, 0xf563, +0xf421, 0xf509, 0xf421, 0xf509, 0xf398, 0xf49b, 0xf398, 0xf49b, 0xf2c7, 0xf3e7, 0xf2c7, +0xf3e7, 0xf211, 0xf34c, 0xf211, 0xf34c, 0xf1a5, 0xf2f8, 0xf1a5, 0xf2f8, 0xf139, 0xf2a3, +0xf139, 0xf2a3, 0xf139, 0xf2a3, 0xf0ca, 0xf246, 0xf0ca, 0xf246, 0xf057, 0xf1e3, 0xf057, +0xf1e3, 0xefe0, 0xf178, 0xefe0, 0xf178, 0xef70, 0xf10f, 0xef70, 0xf10f, 0xef0a, 0xf0ac, +0xef0a, 0xf0ac, 0xef0a, 0xf0ac, 0xee4f, 0xeff0, 0xee4f, 0xeff0, 0xed64, 0xef01, 0xed64, +0xef01, 0xecf3, 0xee88, 0xecf3, 0xee88, 0xed29, 0xeeb4, 0xed29, 0xeeb4, 0xeddb, 0xef58, +0xeddb, 0xef58, 0xee8b, 0xeffb, 0xee8b, 0xeffb, 0xee8b, 0xeffb, 0xef32, 0xf092, 0xef32, +0xf092, 0xefdb, 0xf12a, 0xefdb, 0xf12a, 0xf072, 0xf1b2, 0xf072, 0xf1b2, 0xf13a, 0xf26b, +0xf13a, 0xf26b, 0xf23e, 0xf362, 0xf23e, 0xf362, 0xf372, 0xf48b, 0xf372, 0xf48b, 0xf372, +0xf48b, 0xf471, 0xf581, 0xf471, 0xf581, 0xf50c, 0xf614, 0xf50c, 0xf614, 0xf5a8, 0xf6ab, +0xf5a8, 0xf6ab, 0xf651, 0xf752, 0xf651, 0xf752, 0xf6ee, 0xf7ec, 0xf6ee, 0xf7ec, 0xf6ee, +0xf7ec, 0xf7a2, 0xf8a0, 0xf7a2, 0xf8a0, 0xf8e5, 0xf9e2, 0xf8e5, 0xf9e2, 0xfa80, 0xfb7d, +0xfa80, 0xfb7d, 0xfbcc, 0xfcc9, 0xfbcc, 0xfcc9, 0xfccf, 0xfdc8, 0xfccf, 0xfdc8, 0xfd93, +0xfe88, 0xfd93, 0xfe88, 0xfd93, 0xfe88, 0xfe1e, 0xff0b, 0xfe1e, 0xff0b, 0xfe6f, 0xff51, +0xfe6f, 0xff51, 0xfeab, 0xff7e, 0xfeab, 0xff7e, 0xff40, 0x1, 0xff40, 0x1, 0x2b, +0xd4, 0x2b, 0xd4, 0x132, 0x1c1, 0x132, 0x1c1, 0x132, 0x1c1, 0x221, 0x291, +0x221, 0x291, 0x2c7, 0x315, 0x2c7, 0x315, 0x32e, 0x358, 0x32e, 0x358, 0x393, +0x396, 0x393, 0x396, 0x46e, 0x44a, 0x46e, 0x44a, 0x46e, 0x44a, 0x5b7, 0x56b, +0x5b7, 0x56b, 0x6fc, 0x688, 0x6fc, 0x688, 0x82b, 0x792, 0x82b, 0x792, 0x903, +0x848, 0x903, 0x848, 0x96b, 0x892, 0x96b, 0x892, 0x9aa, 0x8b6, 0x9aa, 0x8b6, +0x9aa, 0x8b6, 0x9df, 0x8d6, 0x9df, 0x8d6, 0xa02, 0x8ea, 0xa02, 0x8ea, 0xa00, +0x8df, 0xa00, 0x8df, 0xa17, 0x8f3, 0xa17, 0x8f3, 0xa23, 0x902, 0xa23, 0x902, +0x9d1, 0x8ba, 0x9d1, 0x8ba, 0x9d1, 0x8ba, 0x91e, 0x816, 0x91e, 0x816, 0x813, +0x71f, 0x813, 0x71f, 0x6dd, 0x603, 0x6dd, 0x603, 0x56d, 0x4b0, 0x56d, 0x4b0, +0x3ad, 0x311, 0x3ad, 0x311, 0x3ad, 0x311, 0x194, 0x11b, 0x194, 0x11b, 0xff59, +0xff04, 0xff59, 0xff04, 0xfd5d, 0xfd2d, 0xfd5d, 0xfd2d, 0xfbc3, 0xfbb9, 0xfbc3, 0xfbb9, +0xfad5, 0xfaf0, 0xfad5, 0xfaf0, 0xfa76, 0xfab5, 0xfa76, 0xfab5, 0xfa76, 0xfab5, 0xfa75, +0xfad7, 0xfa75, 0xfad7, 0xfabe, 0xfb42, 0xfabe, 0xfb42, 0xfaec, 0xfb90, 0xfaec, 0xfb90, +0xfac5, 0xfb89, 0xfac5, 0xfb89, 0xfa62, 0xfb43, 0xfa62, 0xfb43, 0xf9da, 0xfad8, 0xf9da, +0xfad8, 0xf9da, 0xfad8, 0xf922, 0xfa3c, 0xf922, 0xfa3c, 0xf86f, 0xf9a5, 0xf86f, 0xf9a5, +0xf7b8, 0xf909, 0xf7b8, 0xf909, 0xf6d3, 0xf841, 0xf6d3, 0xf841, 0xf5f6, 0xf780, 0xf5f6, +0xf780, 0xf5f6, 0xf780, 0xf537, 0xf6df, 0xf537, 0xf6df, 0xf4a8, 0xf66e, 0xf4a8, 0xf66e, +0xf40a, 0xf5ee, 0xf40a, 0xf5ee, 0xf376, 0xf579, 0xf376, 0xf579, 0xf34b, 0xf56c, 0xf34b, +0xf56c, 0xf351, 0xf590, 0xf351, 0xf590, 0xf351, 0xf590, 0xf385, 0xf5e1, 0xf385, 0xf5e1, +0xf3e1, 0xf658, 0xf3e1, 0xf658, 0xf467, 0xf6f6, 0xf467, 0xf6f6, 0xf51a, 0xf7bd, 0xf51a, +0xf7bd, 0xf5c9, 0xf87b, 0xf5c9, 0xf87b, 0xf68f, 0xf94a, 0xf68f, 0xf94a, 0xf68f, 0xf94a, +0xf775, 0xfa33, 0xf775, 0xfa33, 0xf88f, 0xfb49, 0xf88f, 0xfb49, 0xf9b8, 0xfc66, 0xf9b8, +0xfc66, 0xfa86, 0xfd1f, 0xfa86, 0xfd1f, 0xfb3c, 0xfdb9, 0xfb3c, 0xfdb9, 0xfb3c, 0xfdb9, +0xfc40, 0xfe96, 0xfc40, 0xfe96, 0xfdb3, 0xffdb, 0xfdb3, 0xffdb, 0xff4f, 0x13f, 0xff4f, +0x13f, 0xa9, 0x25b, 0xa9, 0x25b, 0x1e2, 0x34f, 0x1e2, 0x34f, 0x2ec, 0x40c, +0x2ec, 0x40c, 0x2ec, 0x40c, 0x3d4, 0x4a3, 0x3d4, 0x4a3, 0x4ba, 0x534, 0x4ba, +0x534, 0x5a1, 0x5c4, 0x5a1, 0x5c4, 0x6b6, 0x67e, 0x6b6, 0x67e, 0x7ac, 0x71b, +0x7ac, 0x71b, 0x894, 0x7aa, 0x894, 0x7aa, 0x894, 0x7aa, 0x9ae, 0x86e, 0x9ae, +0x86e, 0xaf4, 0x960, 0xaf4, 0x960, 0xc72, 0xa8f, 0xc72, 0xa8f, 0xe2a, 0xbfd, +0xe2a, 0xbfd, 0x1033, 0xdc2, 0x1033, 0xdc2, 0x1033, 0xdc2, 0x1209, 0xf59, 0x1209, +0xf59, 0x1316, 0x102f, 0x1316, 0x102f, 0x1395, 0x107e, 0x1395, 0x107e, 0x13cf, 0x108f, +0x13cf, 0x108f, 0x140c, 0x10ab, 0x140c, 0x10ab, 0x1433, 0x10b6, 0x1433, 0x10b6, 0x1433, +0x10b6, 0x1423, 0x1093, 0x1423, 0x1093, 0x1436, 0x1097, 0x1436, 0x1097, 0x1477, 0x10d2, +0x1477, 0x10d2, 0x1489, 0x10e3, 0x1489, 0x10e3, 0x1426, 0x1083, 0x1426, 0x1083, 0x1357, +0xfbd, 0x1357, 0xfbd, 0x1357, 0xfbd, 0x122a, 0xe9f, 0x122a, 0xe9f, 0x1108, 0xd8f, +0x1108, 0xd8f, 0x1052, 0xcf0, 0x1052, 0xcf0, 0xff6, 0xcae, 0xff6, 0xcae, 0xfc7, +0xc9e, 0xfc7, 0xc9e, 0xfc7, 0xc9e, 0xf76, 0xc6e, 0xf76, 0xc6e, 0xec9, 0xbe5, +0xec9, 0xbe5, 0xd93, 0xad6, 0xd93, 0xad6, 0xc44, 0x9b0, 0xc44, 0x9b0, 0xb51, +0x8e9, 0xb51, 0x8e9, 0xa89, 0x84d, 0xa89, 0x84d, 0xa89, 0x84d, 0x9dd, 0x7d0, +0x9dd, 0x7d0, 0x948, 0x769, 0x948, 0x769, 0x8a2, 0x6f3, 0x8a2, 0x6f3, 0x7ad, +0x62c, 0x7ad, 0x62c, 0x68b, 0x539, 0x68b, 0x539, 0x68b, 0x539, 0x589, 0x463, +0x589, 0x463, 0x499, 0x39e, 0x499, 0x39e, 0x3af, 0x2de, 0x3af, 0x2de, 0x298, +0x1ed, 0x298, 0x1ed, 0x178, 0xef, 0x178, 0xef, 0x90, 0x27, 0x90, 0x27, +0x90, 0x27, 0xffd0, 0xff83, 0xffd0, 0xff83, 0xff44, 0xff10, 0xff44, 0xff10, 0xfec2, +0xfea3, 0xfec2, 0xfea3, 0xfe13, 0xfe05, 0xfe13, 0xfe05, 0xfd62, 0xfd62, 0xfd62, 0xfd62, +0xfcbd, 0xfcc8, 0xfcbd, 0xfcc8, 0xfcbd, 0xfcc8, 0xfc14, 0xfc27, 0xfc14, 0xfc27, 0xfb73, +0xfb8c, 0xfb73, 0xfb8c, 0xfb20, 0xfb3d, 0xfb20, 0xfb3d, 0xfb4f, 0xfb71, 0xfb4f, 0xfb71, +0xfbb1, 0xfbd5, 0xfbb1, 0xfbd5, 0xfbb1, 0xfbd5, 0xfbfa, 0xfc22, 0xfbfa, 0xfc22, 0xfbd2, +0xfbfe, 0xfbd2, 0xfbfe, 0xfb16, 0xfb48, 0xfb16, 0xfb48, 0xfa1c, 0xfa55, 0xfa1c, 0xfa55, +0xf936, 0xf979, 0xf936, 0xf979, 0xf895, 0xf8e3, 0xf895, 0xf8e3, 0xf895, 0xf8e3, 0xf7f0, +0xf84c, 0xf7f0, 0xf84c, 0xf75e, 0xf7ca, 0xf75e, 0xf7ca, 0xf6fc, 0xf77b, 0xf6fc, 0xf77b, +0xf6a9, 0xf73c, 0xf6a9, 0xf73c, 0xf66d, 0xf716, 0xf66d, 0xf716, 0xf5ea, 0xf6ab, 0xf5ea, +0xf6ab, 0xf5ea, 0xf6ab, 0xf555, 0xf62d, 0xf555, 0xf62d, 0xf506, 0xf5f6, 0xf506, 0xf5f6, +0xf4f6, 0xf5fe, 0xf4f6, 0xf5fe, 0xf4f9, 0xf617, 0xf4f9, 0xf617, 0xf4bf, 0xf5f2, 0xf4bf, +0xf5f2, 0xf4bf, 0xf5f2, 0xf495, 0xf5db, 0xf495, 0xf5db, 0xf48d, 0xf5e4, 0xf48d, 0xf5e4, +0xf46b, 0xf5cf, 0xf46b, 0xf5cf, 0xf40d, 0xf57c, 0xf40d, 0xf57c, 0xf3a0, 0xf517, 0xf3a0, +0xf517, 0xf3af, 0xf52a, 0xf3af, 0xf52a, 0xf3af, 0xf52a, 0xf429, 0xf5a7, 0xf429, 0xf5a7, +0xf4d6, 0xf654, 0xf4d6, 0xf654, 0xf580, 0xf6fa, 0xf580, 0xf6fa, 0xf615, 0xf78a, 0xf615, +0xf78a, 0xf6a0, 0xf80e, 0xf6a0, 0xf80e, 0xf715, 0xf87c, 0xf715, 0xf87c, 0xf715, 0xf87c, +0xf792, 0xf8f1, 0xf792, 0xf8f1, 0xf829, 0xf97f, 0xf829, 0xf97f, 0xf8f6, 0xfa43, 0xf8f6, +0xfa43, 0xf9d3, 0xfb19, 0xf9d3, 0xfb19, 0xfaa0, 0xfbde, 0xfaa0, 0xfbde, 0xfaa0, 0xfbde, +0xfb39, 0xfc71, 0xfb39, 0xfc71, 0xfb76, 0xfca8, 0xfb76, 0xfca8, 0xfb89, 0xfcb7, 0xfb89, +0xfcb7, 0xfbab, 0xfcd4, 0xfbab, 0xfcd4, 0xfc3a, 0xfd60, 0xfc3a, 0xfd60, 0xfd15, 0xfe36, +0xfd15, 0xfe36, 0xfd15, 0xfe36, 0xfdeb, 0xff07, 0xfdeb, 0xff07, 0xfef5, 0xd, 0xfef5, +0xd, 0x29, 0x13a, 0x29, 0x13a, 0x124, 0x22c, 0x124, 0x22c, 0x1bc, 0x2ba, +0x1bc, 0x2ba, 0x21e, 0x30e, 0x21e, 0x30e, 0x21e, 0x30e, 0x26e, 0x34e, 0x26e, +0x34e, 0x2b3, 0x380, 0x2b3, 0x380, 0x308, 0x3be, 0x308, 0x3be, 0x373, 0x410, +0x373, 0x410, 0x3a9, 0x42b, 0x3a9, 0x42b, 0x3a9, 0x42b, 0x39e, 0x400, 0x39e, +0x400, 0x376, 0x3b8, 0x376, 0x3b8, 0x34f, 0x36f, 0x34f, 0x36f, 0x35f, 0x35c, +0x35f, 0x35c, 0x3b8, 0x391, 0x3b8, 0x391, 0x438, 0x3ef, 0x438, 0x3ef, 0x438, +0x3ef, 0x47d, 0x411, 0x47d, 0x411, 0x490, 0x405, 0x490, 0x405, 0x49e, 0x3f7, +0x49e, 0x3f7, 0x4a3, 0x3e2, 0x4a3, 0x3e2, 0x4c2, 0x3ec, 0x4c2, 0x3ec, 0x4ec, +0x405, 0x4ec, 0x405, 0x4ec, 0x405, 0x524, 0x432, 0x524, 0x432, 0x549, 0x451, +0x549, 0x451, 0x540, 0x447, 0x540, 0x447, 0x51b, 0x426, 0x51b, 0x426, 0x4bd, +0x3d2, 0x4bd, 0x3d2, 0x4bd, 0x3d2, 0x421, 0x344, 0x421, 0x344, 0x30b, 0x242, +0x30b, 0x242, 0x16f, 0xbd, 0x16f, 0xbd, 0xff6d, 0xfed6, 0xff6d, 0xfed6, 0xfd28, +0xfcaf, 0xfd28, 0xfcaf, 0xfaf2, 0xfa98, 0xfaf2, 0xfa98, 0xfaf2, 0xfa98, 0xf8fc, 0xf8c5, +0xf8fc, 0xf8c5, 0xf77b, 0xf766, 0xf77b, 0xf766, 0xf654, 0xf663, 0xf654, 0xf663, 0xf570, +0xf5a2, 0xf570, 0xf5a2, 0xf4e3, 0xf539, 0xf4e3, 0xf539, 0xf4a2, 0xf51a, 0xf4a2, 0xf51a, +0xf4a2, 0xf51a, 0xf494, 0xf52d, 0xf494, 0xf52d, 0xf48b, 0xf544, 0xf48b, 0xf544, 0xf487, +0xf55f, 0xf487, 0xf55f, 0xf466, 0xf55b, 0xf466, 0xf55b, 0xf40a, 0xf51a, 0xf40a, 0xf51a, +0xf40a, 0xf51a, 0xf384, 0xf4af, 0xf384, 0xf4af, 0xf2f3, 0xf437, 0xf2f3, 0xf437, 0xf291, +0xf3ed, 0xf291, 0xf3ed, 0xf229, 0xf39c, 0xf229, 0xf39c, 0xf1ac, 0xf335, 0xf1ac, 0xf335, +0xf14a, 0xf2e9, 0xf14a, 0xf2e9, 0xf14a, 0xf2e9, 0xf116, 0xf2c9, 0xf116, 0xf2c9, 0xf13a, +0xf302, 0xf13a, 0xf302, 0xf19f, 0xf37a, 0xf19f, 0xf37a, 0xf229, 0xf416, 0xf229, 0xf416, +0xf2c1, 0xf4be, 0xf2c1, 0xf4be, 0xf369, 0xf575, 0xf369, 0xf575, 0xf369, 0xf575, 0xf437, +0xf650, 0xf437, 0xf650, 0xf4ac, 0xf6d0, 0xf4ac, 0xf6d0, 0xf4d0, 0xf6fb, 0xf4d0, 0xf6fb, +0xf52e, 0xf75b, 0xf52e, 0xf75b, 0xf5dd, 0xf80a, 0xf5dd, 0xf80a, 0xf5dd, 0xf80a, 0xf6ba, +0xf8e0, 0xf6ba, 0xf8e0, 0xf77d, 0xf998, 0xf77d, 0xf998, 0xf870, 0xfa7a, 0xf870, 0xfa7a, +0xf9e9, 0xfbdc, 0xf9e9, 0xfbdc, 0xfbc2, 0xfd97, 0xfbc2, 0xfd97, 0xfddb, 0xff8c, 0xfddb, +0xff8c, 0xfddb, 0xff8c, 0xffce, 0x154, 0xffce, 0x154, 0x163, 0x2b8, 0x163, 0x2b8, +0x2bd, 0x3db, 0x2bd, 0x3db, 0x3eb, 0x4cb, 0x3eb, 0x4cb, 0x4f9, 0x597, 0x4f9, +0x597, 0x5ee, 0x645, 0x5ee, 0x645, 0x5ee, 0x645, 0x6e8, 0x6f4, 0x6e8, 0x6f4, +0x7fe, 0x7be, 0x7fe, 0x7be, 0x92e, 0x89e, 0x92e, 0x89e, 0xa4a, 0x96b, 0xa4a, +0x96b, 0xb38, 0xa0a, 0xb38, 0xa0a, 0xb38, 0xa0a, 0xc31, 0xab5, 0xc31, 0xab5, +0xd88, 0xbc0, 0xd88, 0xbc0, 0xf69, 0xd5a, 0xf69, 0xd5a, 0x1142, 0xeef, 0x1142, +0xeef, 0x1279, 0xfe8, 0x1279, 0xfe8, 0x135d, 0x1095, 0x135d, 0x1095, 0x135d, 0x1095, +0x1421, 0x1128, 0x1421, 0x1128, 0x14c2, 0x119f, 0x14c2, 0x119f, 0x1536, 0x11f0, 0x1536, +0x11f0, 0x1598, 0x1238, 0x1598, 0x1238, 0x161b, 0x12a8, 0x161b, 0x12a8, 0x161b, 0x12a8, +0x16b8, 0x133a, 0x16b8, 0x133a, 0x175a, 0x13d8, 0x175a, 0x13d8, 0x17a1, 0x1422, 0x17a1, +0x1422, 0x1762, 0x13ec, 0x1762, 0x13ec, 0x16da, 0x1374, 0x16da, 0x1374, 0x165a, 0x1309, +0x165a, 0x1309, 0x165a, 0x1309, 0x15fc, 0x12c4, 0x15fc, 0x12c4, 0x15ae, 0x1294, 0x15ae, +0x1294, 0x1565, 0x126b, 0x1565, 0x126b, 0x14ea, 0x1213, 0x14ea, 0x1213, 0x1439, 0x1187, +0x1439, 0x1187, 0x1341, 0x10b6, 0x1341, 0x10b6, 0x1341, 0x10b6, 0x1216, 0xfb1, 0x1216, +0xfb1, 0x10fa, 0xebd, 0x10fa, 0xebd, 0x101e, 0xe07, 0x101e, 0xe07, 0xf8b, 0xd9b, +0xf8b, 0xd9b, 0xf09, 0xd3e, 0xf09, 0xd3e, 0xf09, 0xd3e, 0xe5e, 0xcb8, 0xe5e, +0xcb8, 0xd3b, 0xbb8, 0xd3b, 0xbb8, 0xbab, 0xa49, 0xbab, 0xa49, 0xa3c, 0x8fa, +0xa3c, 0x8fa, 0x908, 0x7e4, 0x908, 0x7e4, 0x7cb, 0x6c5, 0x7cb, 0x6c5, 0x7cb, +0x6c5, 0x69a, 0x5af, 0x69a, 0x5af, 0x5af, 0x4de, 0x5af, 0x4de, 0x537, 0x47e, +0x537, 0x47e, 0x4db, 0x439, 0x4db, 0x439, 0x461, 0x3d4, 0x461, 0x3d4, 0x3e2, +0x369, 0x3e2, 0x369, 0x3e2, 0x369, 0x319, 0x2b3, 0x319, 0x2b3, 0x228, 0x1d3, +0x228, 0x1d3, 0x13f, 0xfb, 0x13f, 0xfb, 0x68, 0x33, 0x68, 0x33, 0xff6c, +0xff44, 0xff6c, 0xff44, 0xff6c, 0xff44, 0xfe2d, 0xfe11, 0xfe2d, 0xfe11, 0xfd3c, 0xfd2c, +0xfd3c, 0xfd2c, 0xfcad, 0xfca8, 0xfcad, 0xfca8, 0xfc38, 0xfc3c, 0xfc38, 0xfc3c, 0xfb96, +0xfba4, 0xfb96, 0xfba4, 0xfada, 0xfaf1, 0xfada, 0xfaf1, 0xfada, 0xfaf1, 0xfa27, 0xfa46, +0xfa27, 0xfa46, 0xf931, 0xf958, 0xf931, 0xf958, 0xf803, 0xf833, 0xf803, 0xf833, 0xf6e0, +0xf719, 0xf6e0, 0xf719, 0xf60f, 0xf652, 0xf60f, 0xf652, 0xf5ca, 0xf617, 0xf5ca, 0xf617, +0xf5ca, 0xf617, 0xf5c1, 0xf61a, 0xf5c1, 0xf61a, 0xf57d, 0xf5e2, 0xf57d, 0xf5e2, 0xf4d5, +0xf548, 0xf4d5, 0xf548, 0xf42b, 0xf4ad, 0xf42b, 0xf4ad, 0xf3f4, 0xf487, 0xf3f4, 0xf487, +0xf3f4, 0xf487, 0xf3c4, 0xf469, 0xf3c4, 0xf469, 0xf34d, 0xf406, 0xf34d, 0xf406, 0xf2cc, +0xf399, 0xf2cc, 0xf399, 0xf251, 0xf333, 0xf251, 0xf333, 0xf1cf, 0xf2c7, 0xf1cf, 0xf2c7, +0xf13c, 0xf24a, 0xf13c, 0xf24a, 0xf13c, 0xf24a, 0xf0b9, 0xf1de, 0xf0b9, 0xf1de, 0xf023, +0xf15e, 0xf023, 0xf15e, 0xef78, 0xf0c8, 0xef78, 0xf0c8, 0xeeff, 0xf063, 0xeeff, 0xf063, +0xeec0, 0xf037, 0xeec0, 0xf037, 0xee99, 0xf021, 0xee99, 0xf021, 0xee99, 0xf021, 0xee9b, +0xf032, 0xee9b, 0xf032, 0xef2a, 0xf0ce, 0xef2a, 0xf0ce, 0xf05b, 0xf209, 0xf05b, 0xf209, +0xf1ac, 0xf362, 0xf1ac, 0xf362, 0xf29b, 0xf457, 0xf29b, 0xf457, 0xf29b, 0xf457, 0xf327, +0xf4e7, 0xf327, 0xf4e7, 0xf395, 0xf556, 0xf395, 0xf556, 0xf41b, 0xf5da, 0xf41b, 0xf5da, +0xf4bb, 0xf676, 0xf4bb, 0xf676, 0xf576, 0xf72d, 0xf576, 0xf72d, 0xf654, 0xf804, 0xf654, +0xf804, 0xf654, 0xf804, 0xf747, 0xf8ee, 0xf747, 0xf8ee, 0xf843, 0xf9e1, 0xf843, 0xf9e1, +0xf93a, 0xfacd, 0xf93a, 0xfacd, 0xfa07, 0xfb8f, 0xfa07, 0xfb8f, 0xfabf, 0xfc3a, 0xfabf, +0xfc3a, 0xfb96, 0xfd04, 0xfb96, 0xfd04, 0xfb96, 0xfd04, 0xfc69, 0xfdc9, 0xfc69, 0xfdc9, +0xfd28, 0xfe7a, 0xfd28, 0xfe7a, 0xfdba, 0xfefb, 0xfdba, 0xfefb, 0xfe5e, 0xff8f, 0xfe5e, +0xff8f, 0xff1a, 0x38, 0xff1a, 0x38, 0xff1a, 0x38, 0xff91, 0x9c, 0xff91, 0x9c, +0x14, 0x10a, 0x14, 0x10a, 0xbb, 0x19a, 0xbb, 0x19a, 0x189, 0x24f, 0x189, +0x24f, 0x246, 0x2f3, 0x246, 0x2f3, 0x2f0, 0x380, 0x2f0, 0x380, 0x2f0, 0x380, +0x392, 0x405, 0x392, 0x405, 0x3e8, 0x43a, 0x3e8, 0x43a, 0x444, 0x476, 0x444, +0x476, 0x4c4, 0x4d5, 0x4c4, 0x4d5, 0x559, 0x547, 0x559, 0x547, 0x5d9, 0x5a6, +0x5d9, 0x5a6, 0x5d9, 0x5a6, 0x632, 0x5de, 0x632, 0x5de, 0x66e, 0x5fa, 0x66e, +0x5fa, 0x688, 0x5f8, 0x688, 0x5f8, 0x6c7, 0x61d, 0x6c7, 0x61d, 0x703, 0x641, +0x703, 0x641, 0x703, 0x641, 0x724, 0x64f, 0x724, 0x64f, 0x756, 0x673, 0x756, +0x673, 0x761, 0x675, 0x761, 0x675, 0x6f2, 0x602, 0x6f2, 0x602, 0x5ec, 0x4ff, +0x5ec, 0x4ff, 0x4a1, 0x3bb, 0x4a1, 0x3bb, 0x4a1, 0x3bb, 0x359, 0x281, 0x359, +0x281, 0x1e2, 0x11c, 0x1e2, 0x11c, 0x3f, 0xff92, 0x3f, 0xff92, 0xfe86, 0xfdf6, +0xfe86, 0xfdf6, 0xfcc8, 0xfc59, 0xfcc8, 0xfc59, 0xfb33, 0xfae8, 0xfb33, 0xfae8, 0xfb33, +0xfae8, 0xf9dd, 0xf9b9, 0xf9dd, 0xf9b9, 0xf925, 0xf92a, 0xf925, 0xf92a, 0xf921, 0xf94f, +0xf921, 0xf94f, 0xf995, 0xf9ed, 0xf995, 0xf9ed, 0xfa4a, 0xfacc, 0xfa4a, 0xfacc, 0xfa4a, +0xfacc, 0xfad2, 0xfb7d, 0xfad2, 0xfb7d, 0xfab8, 0xfb8a, 0xfab8, 0xfb8a, 0xf9ec, 0xfae3, +0xf9ec, 0xfae3, 0xf8e5, 0xf9fe, 0xf8e5, 0xf9fe, 0xf815, 0xf94d, 0xf815, 0xf94d, 0xf777, +0xf8cc, 0xf777, 0xf8cc, 0xf777, 0xf8cc, 0xf6ec, 0xf85a, 0xf6ec, 0xf85a, 0xf677, 0xf7fb, +0xf677, 0xf7fb, 0xf61e, 0xf7b5, 0xf61e, 0xf7b5, 0xf602, 0xf7aa, 0xf602, 0xf7aa, 0xf5f9, +0xf7ae, 0xf5f9, 0xf7ae, 0xf5ba, 0xf77b, 0xf5ba, 0xf77b, 0xf5ba, 0xf77b, 0xf569, 0xf734, +0xf569, 0xf734, 0xf562, 0xf734, 0xf562, 0xf734, 0xf5dc, 0xf7b4, 0xf5dc, 0xf7b4, 0xf698, +0xf874, 0xf698, 0xf874, 0xf744, 0xf922, 0xf744, 0xf922, 0xf744, 0xf922, 0xf7e1, 0xf9bf, +0xf7e1, 0xf9bf, 0xf895, 0xfa71, 0xf895, 0xfa71, 0xf93e, 0xfb15, 0xf93e, 0xfb15, 0xf9dc, +0xfbaa, 0xf9dc, 0xfbaa, 0xfa60, 0xfc23, 0xfa60, 0xfc23, 0xfad3, 0xfc87, 0xfad3, 0xfc87, +0xfad3, 0xfc87, 0xfb78, 0xfd19, 0xfb78, 0xfd19, 0xfc5a, 0xfde3, 0xfc5a, 0xfde3, 0xfd98, +0xff04, 0xfd98, 0xff04, 0xfed5, 0x1e, 0xfed5, 0x1e, 0xffd8, 0xf9, 0xffd8, 0xf9, +0xffd8, 0xf9, 0xbf, 0x1b3, 0xbf, 0x1b3, 0x1af, 0x26e, 0x1af, 0x26e, 0x2a7, +0x32d, 0x2a7, 0x32d, 0x355, 0x39d, 0x355, 0x39d, 0x3f2, 0x3f8, 0x3f2, 0x3f8, +0x4b0, 0x470, 0x4b0, 0x470, 0x4b0, 0x470, 0x5a7, 0x51e, 0x5a7, 0x51e, 0x69c, +0x5c9, 0x69c, 0x5c9, 0x770, 0x652, 0x770, 0x652, 0x88d, 0x723, 0x88d, 0x723, +0x9d7, 0x825, 0x9d7, 0x825, 0xb5a, 0x962, 0xb5a, 0x962, 0xb5a, 0x962, 0xd1a, +0xae0, 0xd1a, 0xae0, 0xec3, 0xc4c, 0xec3, 0xc4c, 0x1026, 0xd79, 0x1026, 0xd79, +0x113d, 0xe5f, 0x113d, 0xe5f, 0x1215, 0xf0f, 0x1215, 0xf0f, 0x1215, 0xf0f, 0x129c, +0xf75, 0x129c, 0xf75, 0x12d4, 0xf95, 0x12d4, 0xf95, 0x1309, 0xfba, 0x1309, 0xfba, +0x1364, 0x100d, 0x1364, 0x100d, 0x13a3, 0x104c, 0x13a3, 0x104c, 0x13b7, 0x1067, 0x13b7, +0x1067, 0x13b7, 0x1067, 0x138a, 0x1047, 0x138a, 0x1047, 0x12de, 0xfaf, 0x12de, 0xfaf, +0x1203, 0xeed, 0x1203, 0xeed, 0x1145, 0xe4c, 0x1145, 0xe4c, 0x10a1, 0xdc8, 0x10a1, +0xdc8, 0xffd, 0xd47, 0xffd, 0xd47, 0xffd, 0xd47, 0xf71, 0xce0, 0xf71, 0xce0, +0xf1e, 0xcb4, 0xf1e, 0xcb4, 0xead, 0xc6a, 0xead, 0xc6a, 0xdda, 0xbbe, 0xdda, +0xbbe, 0xcad, 0xab9, 0xcad, 0xab9, 0xcad, 0xab9, 0xb65, 0x997, 0xb65, 0x997, +0xa6d, 0x8c4, 0xa6d, 0x8c4, 0x9f7, 0x873, 0x9f7, 0x873, 0x99d, 0x83c, 0x99d, +0x83c, 0x8f1, 0x7b2, 0x8f1, 0x7b2, 0x7f7, 0x6db, 0x7f7, 0x6db, 0x7f7, 0x6db, +0x6d5, 0x5db, 0x6d5, 0x5db, 0x5a6, 0x4cc, 0x5a6, 0x4cc, 0x460, 0x3a5, 0x460, +0x3a5, 0x326, 0x28b, 0x326, 0x28b, 0x1f5, 0x178, 0x1f5, 0x178, 0xd4, 0x75, +0xd4, 0x75, 0xd4, 0x75, 0xffe6, 0xffa3, 0xffe6, 0xffa3, 0xff2b, 0xff04, 0xff2b, +0xff04, 0xfec0, 0xfeb2, 0xfec0, 0xfeb2, 0xfe78, 0xfe83, 0xfe78, 0xfe83, 0xfe60, 0xfe80, +0xfe60, 0xfe80, 0xfe60, 0xfe80, 0xfe70, 0xfea4, 0xfe70, 0xfea4, 0xfe56, 0xfe9c, 0xfe56, +0xfe9c, 0xfdf3, 0xfe47, 0xfdf3, 0xfe47, 0xfd4c, 0xfdab, 0xfd4c, 0xfdab, 0xfcb4, 0xfd1c, +0xfcb4, 0xfd1c, 0xfc2f, 0xfc9c, 0xfc2f, 0xfc9c, 0xfc2f, 0xfc9c, 0xfbcc, 0xfc3c, 0xfbcc, +0xfc3c, 0xfbb9, 0xfc2b, 0xfbb9, 0xfc2b, 0xfbcb, 0xfc3a, 0xfbcb, 0xfc3a, 0xfbc8, 0xfc35, +0xfbc8, 0xfc35, 0xfb72, 0xfbda, 0xfb72, 0xfbda, 0xfacb, 0xfb2f, 0xfacb, 0xfb2f, 0xfacb, +0xfb2f, 0xf9de, 0xfa3d, 0xf9de, 0xfa3d, 0xf8df, 0xf93b, 0xf8df, 0xf93b, 0xf84e, 0xf8a8, +0xf84e, 0xf8a8, 0xf821, 0xf87a, 0xf821, 0xf87a, 0xf831, 0xf88b, 0xf831, 0xf88b, 0xf831, +0xf88b, 0xf83c, 0xf89b, 0xf83c, 0xf89b, 0xf80c, 0xf873, 0xf80c, 0xf873, 0xf7c1, 0xf832, +0xf7c1, 0xf832, 0xf766, 0xf7e5, 0xf766, 0xf7e5, 0xf729, 0xf7b8, 0xf729, 0xf7b8, 0xf729, +0xf7cc, 0xf729, 0xf7cc, 0xf729, 0xf7cc, 0xf75c, 0xf814, 0xf75c, 0xf814, 0xf76e, 0xf83c, +0xf76e, 0xf83c, 0xf744, 0xf829, 0xf744, 0xf829, 0xf6e8, 0xf7e4, 0xf6e8, 0xf7e4, 0xf67c, +0xf78f, 0xf67c, 0xf78f, 0xf644, 0xf76c, 0xf644, 0xf76c, 0xf644, 0xf76c, 0xf620, 0xf75b, +0xf620, 0xf75b, 0xf64f, 0xf79a, 0xf64f, 0xf79a, 0xf6a5, 0xf7fd, 0xf6a5, 0xf7fd, 0xf6de, +0xf840, 0xf6de, 0xf840, 0xf73c, 0xf8a3, 0xf73c, 0xf8a3, 0xf73c, 0xf8a3, 0xf7c3, 0xf92d, +0xf7c3, 0xf92d, 0xf85e, 0xf9c5, 0xf85e, 0xf9c5, 0xf8d9, 0xfa3b, 0xf8d9, 0xfa3b, 0xf94a, +0xfaa4, 0xf94a, 0xfaa4, 0xf9a7, 0xfaf6, 0xf9a7, 0xfaf6, 0xf9e3, 0xfb25, 0xf9e3, 0xfb25, +0xf9e3, 0xfb25, 0xfa2a, 0xfb5d, 0xfa2a, 0xfb5d, 0xfad5, 0xfbf9, 0xfad5, 0xfbf9, 0xfbf6, +0xfd0b, 0xfbf6, 0xfd0b, 0xfcf5, 0xfdfb, 0xfcf5, 0xfdfb, 0xfdb6, 0xfeae, 0xfdb6, 0xfeae, +0xfe36, 0xff23, 0xfe36, 0xff23, 0xfe36, 0xff23, 0xfe6b, 0xff4d, 0xfe6b, 0xff4d, 0xfeae, +0xff87, 0xfeae, 0xff87, 0xff0f, 0xffe1, 0xff0f, 0xffe1, 0xff86, 0x52, 0xff86, 0x52, +0x32, 0xfa, 0x32, 0xfa, 0x32, 0xfa, 0x109, 0x1cf, 0x109, 0x1cf, 0x1e6, +0x2a9, 0x1e6, 0x2a9, 0x29e, 0x35e, 0x29e, 0x35e, 0x315, 0x3d1, 0x315, 0x3d1, +0x325, 0x3db, 0x325, 0x3db, 0x2c4, 0x373, 0x2c4, 0x373, 0x2c4, 0x373, 0x26c, +0x310, 0x26c, 0x310, 0x279, 0x310, 0x279, 0x310, 0x2a8, 0x32f, 0x2a8, 0x32f, +0x29f, 0x312, 0x29f, 0x312, 0x275, 0x2d2, 0x275, 0x2d2, 0x24b, 0x28e, 0x24b, +0x28e, 0x24b, 0x28e, 0x218, 0x23f, 0x218, 0x23f, 0x209, 0x212, 0x209, 0x212, +0x258, 0x242, 0x258, 0x242, 0x2f4, 0x2c0, 0x2f4, 0x2c0, 0x3b5, 0x363, 0x3b5, +0x363, 0x3b5, 0x363, 0x45a, 0x3ed, 0x45a, 0x3ed, 0x4af, 0x42a, 0x4af, 0x42a, +0x4ca, 0x430, 0x4ca, 0x430, 0x4ad, 0x404, 0x4ad, 0x404, 0x494, 0x3e1, 0x494, +0x3e1, 0x48f, 0x3d8, 0x48f, 0x3d8, 0x48f, 0x3d8, 0x45b, 0x3a6, 0x45b, 0x3a6, +0x3c2, 0x316, 0x3c2, 0x316, 0x2d4, 0x236, 0x2d4, 0x236, 0x1c3, 0x13a, 0x1c3, +0x13a, 0x6c, 0xfffb, 0x6c, 0xfffb, 0xfed6, 0xfe84, 0xfed6, 0xfe84, 0xfed6, 0xfe84, +0xfcff, 0xfcce, 0xfcff, 0xfcce, 0xfb26, 0xfb18, 0xfb26, 0xfb18, 0xf981, 0xf997, 0xf981, +0xf997, 0xf815, 0xf851, 0xf815, 0xf851, 0xf6d6, 0xf736, 0xf6d6, 0xf736, 0xf6d6, 0xf736, +0xf5ac, 0xf62d, 0xf5ac, 0xf62d, 0xf520, 0xf5bf, 0xf520, 0xf5bf, 0xf55a, 0xf615, 0xf55a, +0xf615, 0xf5fa, 0xf6cb, 0xf5fa, 0xf6cb, 0xf667, 0xf74a, 0xf667, 0xf74a, 0xf680, 0xf771, +0xf680, 0xf771, 0xf680, 0xf771, 0xf670, 0xf76a, 0xf670, 0xf76a, 0xf624, 0xf722, 0xf624, +0xf722, 0xf5a2, 0xf6a1, 0xf5a2, 0xf6a1, 0xf4ed, 0xf5ea, 0xf4ed, 0xf5ea, 0xf443, 0xf53c, +0xf443, 0xf53c, 0xf443, 0xf53c, 0xf3ee, 0xf4e1, 0xf3ee, 0xf4e1, 0xf408, 0xf4f4, 0xf408, +0xf4f4, 0xf462, 0xf547, 0xf462, 0xf547, 0xf4a7, 0xf586, 0xf4a7, 0xf586, 0xf4b3, 0xf58c, +0xf4b3, 0xf58c, 0xf4da, 0xf5b0, 0xf4da, 0xf5b0, 0xf4da, 0xf5b0, 0xf51d, 0xf5f1, 0xf51d, +0xf5f1, 0xf557, 0xf62a, 0xf557, 0xf62a, 0xf58b, 0xf660, 0xf58b, 0xf660, 0xf5cd, 0xf6a3, +0xf5cd, 0xf6a3, 0xf64d, 0xf724, 0xf64d, 0xf724, 0xf689, 0xf761, 0xf689, 0xf761, 0xf689, +0xf761, 0xf6b5, 0xf78c, 0xf6b5, 0xf78c, 0xf745, 0xf818, 0xf745, 0xf818, 0xf839, 0xf905, +0xf839, 0xf905, 0xf958, 0xfa18, 0xf958, 0xfa18, 0xfa82, 0xfb30, 0xfa82, 0xfb30, 0xfa82, +0xfb30, 0xfbfd, 0xfc92, 0xfbfd, 0xfc92, 0xfd4f, 0xfdc4, 0xfd4f, 0xfdc4, 0xfe20, 0xfe6e, +0xfe20, 0xfe6e, 0xfec3, 0xfee2, 0xfec3, 0xfee2, 0x12, 0xfffa, 0x12, 0xfffa, 0x1bd, +0x166, 0x1bd, 0x166, 0x1bd, 0x166, 0x350, 0x2b5, 0x350, 0x2b5, 0x54f, 0x46a, +0x54f, 0x46a, 0x790, 0x65d, 0x790, 0x65d, 0x9c4, 0x83f, 0x9c4, 0x83f, 0xb1a, +0x944, 0xb1a, 0x944, 0xbf2, 0x9ca, 0xbf2, 0x9ca, 0xbf2, 0x9ca, 0xcef, 0xa77, +0xcef, 0xa77, 0xdf9, 0xb36, 0xdf9, 0xb36, 0xf60, 0xc57, 0xf60, 0xc57, 0x111c, +0xdd4, 0x111c, 0xdd4, 0x1351, 0xfd2, 0x1351, 0xfd2, 0x1351, 0xfd2, 0x15b9, 0x120d, +0x15b9, 0x120d, 0x1819, 0x144a, 0x1819, 0x144a, 0x1a2c, 0x1645, 0x1a2c, 0x1645, 0x1ba4, +0x17b0, 0x1ba4, 0x17b0, 0x1cc4, 0x18ce, 0x1cc4, 0x18ce, 0x1d8c, 0x199e, 0x1d8c, 0x199e, +0x1d8c, 0x199e, 0x1e47, 0x1a6d, 0x1e47, 0x1a6d, 0x1eef, 0x1b31, 0x1eef, 0x1b31, 0x1f22, +0x1b89, 0x1f22, 0x1b89, 0x1ee6, 0x1b79, 0x1ee6, 0x1b79, 0x1e3d, 0x1b03, 0x1e3d, 0x1b03, +0x1d6c, 0x1a6a, 0x1d6c, 0x1a6a, 0x1d6c, 0x1a6a, 0x1c9f, 0x19da, 0x1c9f, 0x19da, 0x1b98, +0x1912, 0x1b98, 0x1912, 0x1a0d, 0x17c8, 0x1a0d, 0x17c8, 0x1816, 0x1614, 0x1816, 0x1614, +0x164c, 0x148e, 0x164c, 0x148e, 0x164c, 0x148e, 0x14ed, 0x1373, 0x14ed, 0x1373, 0x1397, +0x1261, 0x1397, 0x1261, 0x1211, 0x111e, 0x1211, 0x111e, 0x1073, 0xfc3, 0x1073, 0xfc3, +0xeb4, 0xe46, 0xeb4, 0xe46, 0xccb, 0xc9e, 0xccb, 0xc9e, 0xccb, 0xc9e, 0xaf1, +0xb05, 0xaf1, 0xb05, 0x960, 0x9b3, 0x960, 0x9b3, 0x7cf, 0x862, 0x7cf, 0x862, +0x603, 0x6d3, 0x603, 0x6d3, 0x402, 0x50f, 0x402, 0x50f, 0x199, 0x2e0, 0x199, +0x2e0, 0x199, 0x2e0, 0xff02, 0x81, 0xff02, 0x81, 0xfc9b, 0xfe50, 0xfc9b, 0xfe50, +0xfa9d, 0xfc84, 0xfa9d, 0xfc84, 0xf926, 0xfb3b, 0xf926, 0xfb3b, 0xf7ee, 0xfa2c, 0xf7ee, +0xfa2c, 0xf7ee, 0xfa2c, 0xf6d4, 0xf936, 0xf6d4, 0xf936, 0xf5e6, 0xf864, 0xf5e6, 0xf864, +0xf4ec, 0xf77f, 0xf4ec, 0xf77f, 0xf395, 0xf636, 0xf395, 0xf636, 0xf21e, 0xf4c5, 0xf21e, +0xf4c5, 0xf0bc, 0xf361, 0xf0bc, 0xf361, 0xf0bc, 0xf361, 0xefaa, 0xf245, 0xefaa, 0xf245, +0xeec6, 0xf150, 0xeec6, 0xf150, 0xedc4, 0xf035, 0xedc4, 0xf035, 0xecff, 0xef51, 0xecff, +0xef51, 0xec9b, 0xeec8, 0xec9b, 0xeec8, 0xeccc, 0xeed2, 0xeccc, 0xeed2, 0xeccc, 0xeed2, +0xed5e, 0xef39, 0xed5e, 0xef39, 0xedbb, 0xef6b, 0xedbb, 0xef6b, 0xeda2, 0xef26, 0xeda2, +0xef26, 0xed48, 0xeea3, 0xed48, 0xeea3, 0xed01, 0xee36, 0xed01, 0xee36, 0xed01, 0xee36, +0xecdd, 0xedf1, 0xecdd, 0xedf1, 0xed09, 0xee01, 0xed09, 0xee01, 0xed5c, 0xee3f, 0xed5c, +0xee3f, 0xedf8, 0xeecc, 0xedf8, 0xeecc, 0xeea8, 0xef74, 0xeea8, 0xef74, 0xef14, 0xefe0, +0xef14, 0xefe0, 0xef14, 0xefe0, 0xef3e, 0xf00f, 0xef3e, 0xf00f, 0xef1d, 0xeff9, 0xef1d, +0xeff9, 0xeeff, 0xefeb, 0xeeff, 0xefeb, 0xeecf, 0xefcd, 0xeecf, 0xefcd, 0xee76, 0xef89, +0xee76, 0xef89, 0xee05, 0xef2c, 0xee05, 0xef2c, 0xee05, 0xef2c, 0xed9a, 0xeed5, 0xed9a, +0xeed5, 0xed64, 0xeeaf, 0xed64, 0xeeaf, 0xed60, 0xeeb7, 0xed60, 0xeeb7, 0xed85, 0xeee3, +0xed85, 0xeee3, 0xedd7, 0xef34, 0xedd7, 0xef34, 0xedd7, 0xef34, 0xee47, 0xef9d, 0xee47, +0xef9d, 0xeeb3, 0xeffb, 0xeeb3, 0xeffb, 0xef52, 0xf083, 0xef52, 0xf083, 0xf03d, 0xf150, +0xf03d, 0xf150, 0xf1c0, 0xf2ae, 0xf1c0, 0xf2ae, 0xf3e5, 0xf4a7, 0xf3e5, 0xf4a7, 0xf3e5, +0xf4a7, 0xf62e, 0xf6c0, 0xf62e, 0xf6c0, 0xf82b, 0xf889, 0xf82b, 0xf889, 0xf98f, 0xf9b6, +0xf98f, 0xf9b6, 0xfae7, 0xfad8, 0xfae7, 0xfad8, 0xfcae, 0xfc68, 0xfcae, 0xfc68, 0xfeff, +0xfe85, 0xfeff, 0xfe85, 0xfeff, 0xfe85, 0x195, 0xec, 0x195, 0xec, 0x3f8, 0x323, +0x3f8, 0x323, 0x609, 0x50f, 0x609, 0x50f, 0x7ad, 0x694, 0x7ad, 0x694, 0x8ff, +0x7cf, 0x8ff, 0x7cf, 0x8ff, 0x7cf, 0x9e8, 0x8a7, 0x9e8, 0x8a7, 0xa7f, 0x933, +0xa7f, 0x933, 0xaf3, 0x9a4, 0xaf3, 0x9a4, 0xb5f, 0xa11, 0xb5f, 0xa11, 0xc14, +0xacc, 0xc14, 0xacc, 0xce9, 0xbac, 0xce9, 0xbac, 0xce9, 0xbac, 0xdba, 0xc89, +0xdba, 0xc89, 0xe4d, 0xd2a, 0xe4d, 0xd2a, 0xe6d, 0xd59, 0xe6d, 0xd59, 0xe39, +0xd32, 0xe39, 0xd32, 0xe18, 0xd1e, 0xe18, 0xd1e, 0xe60, 0xd71, 0xe60, 0xd71, +0xe60, 0xd71, 0xe9b, 0xdb5, 0xe9b, 0xdb5, 0xe53, 0xd73, 0xe53, 0xd73, 0xdb8, +0xcdd, 0xdb8, 0xcdd, 0xd1e, 0xc46, 0xd1e, 0xc46, 0xc93, 0xbbd, 0xc93, 0xbbd, +0xc93, 0xbbd, 0xc58, 0xb83, 0xc58, 0xb83, 0xc72, 0xba0, 0xc72, 0xba0, 0xc9e, +0xbd0, 0xc9e, 0xbd0, 0xc8d, 0xbc6, 0xc8d, 0xbc6, 0xbf5, 0xb39, 0xbf5, 0xb39, +0xb1a, 0xa6d, 0xb1a, 0xa6d, 0xb1a, 0xa6d, 0xa0b, 0x972, 0xa0b, 0x972, 0x918, +0x899, 0x918, 0x899, 0x855, 0x7f5, 0x855, 0x7f5, 0x75c, 0x720, 0x75c, 0x720, +0x61e, 0x60d, 0x61e, 0x60d, 0x61e, 0x60d, 0x499, 0x4b6, 0x499, 0x4b6, 0x305, +0x353, 0x305, 0x353, 0x145, 0x1c7, 0x145, 0x1c7, 0xff4c, 0x3, 0xff4c, 0x3, +0xfd2d, 0xfe18, 0xfd2d, 0xfe18, 0xfb0f, 0xfc2c, 0xfb0f, 0xfc2c, 0xfb0f, 0xfc2c, 0xf90f, +0xfa5b, 0xf90f, 0xfa5b, 0xf6be, 0xf834, 0xf6be, 0xf834, 0xf458, 0xf5f2, 0xf458, 0xf5f2, +0xf265, 0xf41c, 0xf265, 0xf41c, 0xf140, 0xf30c, 0xf140, 0xf30c, 0xf102, 0xf2dc, 0xf102, +0xf2dc, 0xf102, 0xf2dc, 0xf122, 0xf300, 0xf122, 0xf300, 0xf173, 0xf350, 0xf173, 0xf350, +0xf206, 0xf3d8, 0xf206, 0xf3d8, 0xf2a7, 0xf469, 0xf2a7, 0xf469, 0xf320, 0xf4cc, 0xf320, +0xf4cc, 0xf320, 0xf4cc, 0xf336, 0xf4c9, 0xf336, 0xf4c9, 0xf31e, 0xf495, 0xf31e, 0xf495, +0xf337, 0xf492, 0xf337, 0xf492, 0xf390, 0xf4d0, 0xf390, 0xf4d0, 0xf41b, 0xf541, 0xf41b, +0xf541, 0xf4c1, 0xf5d2, 0xf4c1, 0xf5d2, 0xf4c1, 0xf5d2, 0xf54a, 0xf64b, 0xf54a, 0xf64b, +0xf599, 0xf690, 0xf599, 0xf690, 0xf5d3, 0xf6c5, 0xf5d3, 0xf6c5, 0xf5f5, 0xf6e8, 0xf5f5, +0xf6e8, 0xf5ef, 0xf6ea, 0xf5ef, 0xf6ea, 0xf5cf, 0xf6d7, 0xf5cf, 0xf6d7, 0xf5cf, 0xf6d7, +0xf5e7, 0xf701, 0xf5e7, 0xf701, 0xf648, 0xf776, 0xf648, 0xf776, 0xf6a6, 0xf7ea, 0xf6a6, +0xf7ea, 0xf6ef, 0xf849, 0xf6ef, 0xf849, 0xf704, 0xf871, 0xf704, 0xf871, 0xf704, 0xf871, +0xf734, 0xf8b1, 0xf734, 0xf8b1, 0xf794, 0xf91a, 0xf794, 0xf91a, 0xf81c, 0xf9a4, 0xf81c, +0xf9a4, 0xf8f4, 0xfa75, 0xf8f4, 0xfa75, 0xf9d9, 0xfb49, 0xf9d9, 0xfb49, 0xfaee, 0xfc41, +0xfaee, 0xfc41, 0xfaee, 0xfc41, 0xfc33, 0xfd5f, 0xfc33, 0xfd5f, 0xfd88, 0xfe80, 0xfd88, +0xfe80, 0xff02, 0xffbb, 0xff02, 0xffbb, 0xc0, 0x12e, 0xc0, 0x12e, 0x2eb, 0x306, +0x2eb, 0x306, 0x52e, 0x4ed, 0x52e, 0x4ed, 0x52e, 0x4ed, 0x71c, 0x67a, 0x71c, +0x67a, 0x8d8, 0x7d0, 0x8d8, 0x7d0, 0xaac, 0x93b, 0xaac, 0x93b, 0xcdc, 0xb03, +0xcdc, 0xb03, 0xf3e, 0xcfe, 0xf3e, 0xcfe, 0xf3e, 0xcfe, 0x1199, 0xef7, 0x1199, +0xef7, 0x1407, 0x1109, 0x1407, 0x1109, 0x1651, 0x12fe, 0x1651, 0x12fe, 0x1890, 0x14f1, +0x1890, 0x14f1, 0x1a9e, 0x16bd, 0x1a9e, 0x16bd, 0x1c5e, 0x1847, 0x1c5e, 0x1847, 0x1c5e, +0x1847, 0x1dd9, 0x1996, 0x1dd9, 0x1996, 0x1eba, 0x1a56, 0x1eba, 0x1a56, 0x1f64, 0x1aea, +0x1f64, 0x1aea, 0x1ffe, 0x1b79, 0x1ffe, 0x1b79, 0x2091, 0x1c0a, 0x2091, 0x1c0a, 0x20f0, +0x1c71, 0x20f0, 0x1c71, 0x20f0, 0x1c71, 0x20a2, 0x1c32, 0x20a2, 0x1c32, 0x1fa0, 0x1b45, +0x1fa0, 0x1b45, 0x1e43, 0x1a03, 0x1e43, 0x1a03, 0x1d08, 0x18e9, 0x1d08, 0x18e9, 0x1bbb, +0x17be, 0x1bbb, 0x17be, 0x1bbb, 0x17be, 0x1a20, 0x164a, 0x1a20, 0x164a, 0x188a, 0x14dc, +0x188a, 0x14dc, 0x1713, 0x1390, 0x1713, 0x1390, 0x15a2, 0x124c, 0x15a2, 0x124c, 0x142c, +0x1103, 0x142c, 0x1103, 0x12e5, 0xfeb, 0x12e5, 0xfeb, 0x12e5, 0xfeb, 0x11c7, 0xeff, +0x11c7, 0xeff, 0x1064, 0xdcf, 0x1064, 0xdcf, 0xea4, 0xc46, 0xea4, 0xc46, 0xca8, +0xa83, 0xca8, 0xa83, 0xabe, 0x8d5, 0xabe, 0x8d5, 0x914, 0x76a, 0x914, 0x76a, +0x914, 0x76a, 0x793, 0x62a, 0x793, 0x62a, 0x617, 0x4f3, 0x617, 0x4f3, 0x427, +0x34a, 0x427, 0x34a, 0x1d5, 0x140, 0x1d5, 0x140, 0xff5e, 0xff13, 0xff5e, 0xff13, +0xff5e, 0xff13, 0xfd10, 0xfd0f, 0xfd10, 0xfd0f, 0xfb08, 0xfb50, 0xfb08, 0xfb50, 0xf90a, +0xf997, 0xf90a, 0xf997, 0xf752, 0xf823, 0xf752, 0xf823, 0xf5da, 0xf6ea, 0xf5da, 0xf6ea, +0xf4a7, 0xf5f0, 0xf4a7, 0xf5f0, 0xf4a7, 0xf5f0, 0xf397, 0xf513, 0xf397, 0xf513, 0xf28e, +0xf434, 0xf28e, 0xf434, 0xf1a7, 0xf370, 0xf1a7, 0xf370, 0xf0f2, 0xf2d6, 0xf0f2, 0xf2d6, +0xf076, 0xf26d, 0xf076, 0xf26d, 0xefaf, 0xf1b0, 0xefaf, 0xf1b0, 0xefaf, 0xf1b0, 0xeea8, +0xf0ad, 0xeea8, 0xf0ad, 0xedc1, 0xefc2, 0xedc1, 0xefc2, 0xed4c, 0xef44, 0xed4c, 0xef44, +0xed58, 0xef42, 0xed58, 0xef42, 0xed94, 0xef6d, 0xed94, 0xef6d, 0xed94, 0xef6d, 0xee10, +0xefd7, 0xee10, 0xefd7, 0xee8d, 0xf042, 0xee8d, 0xf042, 0xeec7, 0xf06a, 0xeec7, 0xf06a, +0xeec1, 0xf056, 0xeec1, 0xf056, 0xee88, 0xf014, 0xee88, 0xf014, 0xee80, 0xf006, 0xee80, +0xf006, 0xee80, 0xf006, 0xeed4, 0xf05b, 0xeed4, 0xf05b, 0xef8a, 0xf117, 0xef8a, 0xf117, +0xf078, 0xf211, 0xf078, 0xf211, 0xf130, 0xf2db, 0xf130, 0xf2db, 0xf186, 0xf347, 0xf186, +0xf347, 0xf182, 0xf35e, 0xf182, 0xf35e, 0xf182, 0xf35e, 0xf179, 0xf372, 0xf179, 0xf372, +0xf14c, 0xf363, 0xf14c, 0xf363, 0xf0de, 0xf314, 0xf0de, 0xf314, 0xf07b, 0xf2ce, 0xf07b, +0xf2ce, 0xf055, 0xf2c1, 0xf055, 0xf2c1, 0xf055, 0xf2c1, 0xf0a4, 0xf325, 0xf0a4, 0xf325, +0xf10b, 0xf39b, 0xf10b, 0xf39b, 0xf172, 0xf408, 0xf172, 0xf408, 0xf1d7, 0xf46c, 0xf1d7, +0xf46c, 0xf233, 0xf4bd, 0xf233, 0xf4bd, 0xf27d, 0xf4f4, 0xf27d, 0xf4f4, 0xf27d, 0xf4f4, +0xf2aa, 0xf504, 0xf2aa, 0xf504, 0xf34c, 0xf581, 0xf34c, 0xf581, 0xf485, 0xf68d, 0xf485, +0xf68d, 0xf61e, 0xf7f2, 0xf61e, 0xf7f2, 0xf7ce, 0xf968, 0xf7ce, 0xf968, 0xf95d, 0xfaba, +0xf95d, 0xfaba, 0xf95d, 0xfaba, 0xfacd, 0xfbea, 0xfacd, 0xfbea, 0xfc51, 0xfd2e, 0xfc51, +0xfd2e, 0xfe44, 0xfee1, 0xfe44, 0xfee1, 0x92, 0xf2, 0x92, 0xf2, 0x2e4, 0x30b, +0x2e4, 0x30b, 0x2e4, 0x30b, 0x4dd, 0x4d1, 0x4dd, 0x4d1, 0x68e, 0x655, 0x68e, +0x655, 0x80c, 0x7ad, 0x80c, 0x7ad, 0x945, 0x8c6, 0x945, 0x8c6, 0xa2a, 0x994, +0xa2a, 0x994, 0xae5, 0xa3f, 0xae5, 0xa3f, 0xae5, 0xa3f, 0xbaf, 0xaff, 0xbaf, +0xaff, 0xc7e, 0xbcb, 0xc7e, 0xbcb, 0xd49, 0xc98, 0xd49, 0xc98, 0xe00, 0xd54, +0xe00, 0xd54, 0xe96, 0xdf2, 0xe96, 0xdf2, 0xe96, 0xdf2, 0xe9e, 0xe04, 0xe9e, +0xe04, 0xe18, 0xd89, 0xe18, 0xd89, 0xd75, 0xcf0, 0xd75, 0xcf0, 0xcec, 0xc70, +0xcec, 0xc70, 0xca8, 0xc33, 0xca8, 0xc33, 0xc65, 0xbf4, 0xc65, 0xbf4, 0xc65, +0xbf4, 0xbe9, 0xb7a, 0xbe9, 0xb7a, 0xb1e, 0xab0, 0xb1e, 0xab0, 0xa17, 0x9a6, +0xa17, 0x9a6, 0x92a, 0x8b6, 0x92a, 0x8b6, 0x898, 0x820, 0x898, 0x820, 0x87d, +0x801, 0x87d, 0x801, 0x87d, 0x801, 0x888, 0x809, 0x888, 0x809, 0x851, 0x7d1, +0x851, 0x7d1, 0x7d9, 0x75c, 0x7d9, 0x75c, 0x72f, 0x6b7, 0x72f, 0x6b7, 0x686, +0x619, 0x686, 0x619, 0x686, 0x619, 0x5f1, 0x594, 0x5f1, 0x594, 0x509, 0x4c1, +0x509, 0x4c1, 0x3bc, 0x38e, 0x3bc, 0x38e, 0x235, 0x226, 0x235, 0x226, 0x97, +0xac, 0x97, 0xac, 0xfef8, 0xff34, 0xfef8, 0xff34, 0xfef8, 0xff34, 0xfd36, 0xfd9d, +0xfd36, 0xfd9d, 0xfb64, 0xfbf7, 0xfb64, 0xfbf7, 0xf999, 0xfa58, 0xf999, 0xfa58, 0xf7a9, +0xf893, 0xf7a9, 0xf893, 0xf587, 0xf699, 0xf587, 0xf699, 0xf345, 0xf47d, 0xf345, 0xf47d, +0xf345, 0xf47d, 0xf0fd, 0xf255, 0xf0fd, 0xf255, 0xef1d, 0xf091, 0xef1d, 0xf091, 0xede1, +0xef6a, 0xede1, 0xef6a, 0xed0f, 0xeea6, 0xed0f, 0xeea6, 0xec91, 0xee30, 0xec91, 0xee30, +0xec91, 0xee30, 0xec93, 0xee33, 0xec93, 0xee33, 0xed22, 0xeebc, 0xed22, 0xeebc, 0xedcd, +0xef5e, 0xedcd, 0xef5e, 0xee3c, 0xefbd, 0xee3c, 0xefbd, 0xee70, 0xefe0, 0xee70, 0xefe0, +0xee8f, 0xefeb, 0xee8f, 0xefeb, 0xee8f, 0xefeb, 0xeeb2, 0xeffa, 0xeeb2, 0xeffa, 0xeee6, +0xf01b, 0xeee6, 0xf01b, 0xef62, 0xf086, 0xef62, 0xf086, 0xf01f, 0xf136, 0xf01f, 0xf136, +0xf0ef, 0xf1fe, 0xf0ef, 0xf1fe, 0xf1a7, 0xf2b2, 0xf1a7, 0xf2b2, 0xf1a7, 0xf2b2, 0xf217, +0xf325, 0xf217, 0xf325, 0xf24f, 0xf365, 0xf24f, 0xf365, 0xf25b, 0xf37e, 0xf25b, 0xf37e, +0xf281, 0xf3b6, 0xf281, 0xf3b6, 0xf2e2, 0xf42e, 0xf2e2, 0xf42e, 0xf2e2, 0xf42e, 0xf340, +0xf4a5, 0xf340, 0xf4a5, 0xf37a, 0xf4f9, 0xf37a, 0xf4f9, 0xf38d, 0xf525, 0xf38d, 0xf525, +0xf3ab, 0xf55a, 0xf3ab, 0xf55a, 0xf401, 0xf5c3, 0xf401, 0xf5c3, 0xf484, 0xf652, 0xf484, +0xf652, 0xf484, 0xf652, 0xf51e, 0xf6ef, 0xf51e, 0xf6ef, 0xf5ce, 0xf79a, 0xf5ce, 0xf79a, +0xf6b8, 0xf874, 0xf6b8, 0xf874, 0xf7e3, 0xf982, 0xf7e3, 0xf982, 0xf937, 0xfaae, 0xf937, +0xfaae, 0xfacf, 0xfc11, 0xfacf, 0xfc11, 0xfacf, 0xfc11, 0xfcaa, 0xfdaa, 0xfcaa, 0xfdaa, +0xfea4, 0xff57, 0xfea4, 0xff57, 0xbb, 0x117, 0xbb, 0x117, 0x2b3, 0x2ad, 0x2b3, +0x2ad, 0x480, 0x412, 0x480, 0x412, 0x480, 0x412, 0x648, 0x56c, 0x648, 0x56c, +0x82c, 0x6de, 0x82c, 0x6de, 0xa4d, 0x88d, 0xa4d, 0x88d, 0xc96, 0xa65, 0xc96, +0xa65, 0xf0a, 0xc6b, 0xf0a, 0xc6b, 0x117f, 0xe77, 0x117f, 0xe77, 0x117f, 0xe77, +0x1400, 0x1097, 0x1400, 0x1097, 0x16ac, 0x12ec, 0x16ac, 0x12ec, 0x1955, 0x1548, 0x1955, +0x1548, 0x1b97, 0x1748, 0x1b97, 0x1748, 0x1d3e, 0x18ba, 0x1d3e, 0x18ba, 0x1e9f, 0x19f1, +0x1e9f, 0x19f1, 0x1e9f, 0x19f1, 0x1fdd, 0x1b12, 0x1fdd, 0x1b12, 0x2101, 0x1c25, 0x2101, +0x1c25, 0x21cf, 0x1ced, 0x21cf, 0x1ced, 0x222a, 0x1d4c, 0x222a, 0x1d4c, 0x2245, 0x1d73, +0x2245, 0x1d73, 0x2245, 0x1d73, 0x2209, 0x1d4c, 0x2209, 0x1d4c, 0x2188, 0x1ce8, 0x2188, +0x1ce8, 0x20fb, 0x1c7c, 0x20fb, 0x1c7c, 0x2062, 0x1c08, 0x2062, 0x1c08, 0x1f88, 0x1b56, +0x1f88, 0x1b56, 0x1e5d, 0x1a55, 0x1e5d, 0x1a55, 0x1e5d, 0x1a55, 0x1cea, 0x190f, 0x1cea, +0x190f, 0x1b64, 0x17b5, 0x1b64, 0x17b5, 0x1a1d, 0x169c, 0x1a1d, 0x169c, 0x192b, 0x15d8, +0x192b, 0x15d8, 0x1858, 0x1534, 0x1858, 0x1534, 0x1746, 0x1451, 0x1746, 0x1451, 0x1746, +0x1451, 0x15e8, 0x1323, 0x15e8, 0x1323, 0x1455, 0x11c2, 0x1455, 0x11c2, 0x12bb, 0x105d, +0x12bb, 0x105d, 0x1138, 0xf0f, 0x1138, 0xf0f, 0xf99, 0xdaa, 0xf99, 0xdaa, 0xf99, +0xdaa, 0xdd3, 0xc1f, 0xdd3, 0xc1f, 0xbdc, 0xa66, 0xbdc, 0xa66, 0x9cc, 0x896, +0x9cc, 0x896, 0x7be, 0x6cb, 0x7be, 0x6cb, 0x5ad, 0x4ff, 0x5ad, 0x4ff, 0x3af, +0x346, 0x3af, 0x346, 0x3af, 0x346, 0x1ca, 0x1a7, 0x1ca, 0x1a7, 0xfff7, 0x19, +0xfff7, 0x19, 0xfe51, 0xfeb5, 0xfe51, 0xfeb5, 0xfcd5, 0xfd79, 0xfcd5, 0xfd79, 0xfb54, +0xfc33, 0xfb54, 0xfc33, 0xf9ea, 0xfaff, 0xf9ea, 0xfaff, 0xf9ea, 0xfaff, 0xf8b4, 0xf9f9, +0xf8b4, 0xf9f9, 0xf7ad, 0xf91c, 0xf7ad, 0xf91c, 0xf6b3, 0xf843, 0xf6b3, 0xf843, 0xf58e, +0xf738, 0xf58e, 0xf738, 0xf467, 0xf623, 0xf467, 0xf623, 0xf467, 0xf623, 0xf33b, 0xf503, +0xf33b, 0xf503, 0xf224, 0xf3f0, 0xf224, 0xf3f0, 0xf160, 0xf32a, 0xf160, 0xf32a, 0xf110, +0xf2d3, 0xf110, 0xf2d3, 0xf12a, 0xf2e3, 0xf12a, 0xf2e3, 0xf126, 0xf2d2, 0xf126, 0xf2d2, +0xf126, 0xf2d2, 0xf0f5, 0xf291, 0xf0f5, 0xf291, 0xf0c0, 0xf24e, 0xf0c0, 0xf24e, 0xf0a7, +0xf229, 0xf0a7, 0xf229, 0xf0ac, 0xf224, 0xf0ac, 0xf224, 0xf0cf, 0xf240, 0xf0cf, 0xf240, +0xf12f, 0xf29f, 0xf12f, 0xf29f, 0xf12f, 0xf29f, 0xf18e, 0xf302, 0xf18e, 0xf302, 0xf1c3, +0xf33f, 0xf1c3, 0xf33f, 0xf1a3, 0xf32e, 0xf1a3, 0xf32e, 0xf158, 0xf2f7, 0xf158, 0xf2f7, +0xf107, 0xf2be, 0xf107, 0xf2be, 0xf107, 0xf2be, 0xf088, 0xf25b, 0xf088, 0xf25b, 0xeff3, +0xf1e5, 0xeff3, 0xf1e5, 0xef79, 0xf18a, 0xef79, 0xf18a, 0xef44, 0xf175, 0xef44, 0xf175, +0xef1d, 0xf16b, 0xef1d, 0xf16b, 0xeeee, 0xf157, 0xeeee, 0xf157, 0xeeee, 0xf157, 0xeec6, +0xf144, 0xeec6, 0xf144, 0xee87, 0xf114, 0xee87, 0xf114, 0xee1b, 0xf0b2, 0xee1b, 0xf0b2, +0xedbb, 0xf052, 0xedbb, 0xf052, 0xedc2, 0xf052, 0xedc2, 0xf052, 0xedc2, 0xf052, 0xee36, +0xf0b6, 0xee36, 0xf0b6, 0xef1e, 0xf185, 0xef1e, 0xf185, 0xf057, 0xf29d, 0xf057, 0xf29d, +0xf187, 0xf3a5, 0xf187, 0xf3a5, 0xf29a, 0xf489, 0xf29a, 0xf489, 0xf3aa, 0xf566, 0xf3aa, +0xf566, 0xf3aa, 0xf566, 0xf4ef, 0xf673, 0xf4ef, 0xf673, 0xf6c9, 0xf813, 0xf6c9, 0xf813, +0xf938, 0xfa46, 0xf938, 0xfa46, 0xfbec, 0xfcbf, 0xfbec, 0xfcbf, 0xfe81, 0xff1b, 0xfe81, +0xff1b, 0xbd, 0x120, 0xbd, 0x120, 0xbd, 0x120, 0x286, 0x2b7, 0x286, 0x2b7, +0x3b9, 0x3bd, 0x3b9, 0x3bd, 0x4b3, 0x48e, 0x4b3, 0x48e, 0x5b8, 0x572, 0x5b8, +0x572, 0x6fc, 0x699, 0x6fc, 0x699, 0x6fc, 0x699, 0x850, 0x7d7, 0x850, 0x7d7, +0x957, 0x8cb, 0x957, 0x8cb, 0xa37, 0x99e, 0xa37, 0x99e, 0xadf, 0xa3d, 0xadf, +0xa3d, 0xb57, 0xaae, 0xb57, 0xaae, 0xb83, 0xad4, 0xb83, 0xad4, 0xb83, 0xad4, +0xb82, 0xad0, 0xb82, 0xad0, 0xb8c, 0xad5, 0xb8c, 0xad5, 0xb8a, 0xad0, 0xb8a, +0xad0, 0xb88, 0xac8, 0xb88, 0xac8, 0xb5c, 0xa96, 0xb5c, 0xa96, 0xaf7, 0xa2a, +0xaf7, 0xa2a, 0xaf7, 0xa2a, 0xa69, 0x992, 0xa69, 0x992, 0x9db, 0x8fb, 0x9db, +0x8fb, 0x96e, 0x884, 0x96e, 0x884, 0x933, 0x840, 0x933, 0x840, 0x90c, 0x810, +0x90c, 0x810, 0x90c, 0x810, 0x8ce, 0x7cd, 0x8ce, 0x7cd, 0x897, 0x794, 0x897, +0x794, 0x850, 0x74f, 0x850, 0x74f, 0x7d9, 0x6e0, 0x7d9, 0x6e0, 0x71d, 0x631, +0x71d, 0x631, 0x64a, 0x571, 0x64a, 0x571, 0x64a, 0x571, 0x56a, 0x4ab, 0x56a, +0x4ab, 0x445, 0x3a8, 0x445, 0x3a8, 0x2db, 0x266, 0x2db, 0x266, 0x143, 0xfc, +0x143, 0xfc, 0xffaa, 0xff95, 0xffaa, 0xff95, 0xfdff, 0xfe21, 0xfdff, 0xfe21, 0xfdff, +0xfe21, 0xfc3e, 0xfc9a, 0xfc3e, 0xfc9a, 0xfa5e, 0xfaf6, 0xfa5e, 0xfaf6, 0xf847, 0xf91b, +0xf847, 0xf91b, 0xf62b, 0xf73a, 0xf62b, 0xf73a, 0xf421, 0xf567, 0xf421, 0xf567, 0xf421, +0xf567, 0xf24c, 0xf3c5, 0xf24c, 0xf3c5, 0xf0e5, 0xf28c, 0xf0e5, 0xf28c, 0xefe2, 0xf1b2, +0xefe2, 0xf1b2, 0xef5a, 0xf14b, 0xef5a, 0xf14b, 0xef66, 0xf170, 0xef66, 0xf170, 0xefaf, +0xf1cc, 0xefaf, 0xf1cc, 0xefaf, 0xf1cc, 0xefdb, 0xf203, 0xefdb, 0xf203, 0xeff0, 0xf21d, +0xeff0, 0xf21d, 0xf01b, 0xf247, 0xf01b, 0xf247, 0xf069, 0xf290, 0xf069, 0xf290, 0xf0d0, +0xf2ee, 0xf0d0, 0xf2ee, 0xf166, 0xf379, 0xf166, 0xf379, 0xf166, 0xf379, 0xf229, 0xf430, +0xf229, 0xf430, 0xf2f9, 0xf4f5, 0xf2f9, 0xf4f5, 0xf3ab, 0xf59e, 0xf3ab, 0xf59e, 0xf41c, +0xf609, 0xf41c, 0xf609, 0xf46a, 0xf654, 0xf46a, 0xf654, 0xf46a, 0xf654, 0xf4a7, 0xf692, +0xf4a7, 0xf692, 0xf519, 0xf70a, 0xf519, 0xf70a, 0xf5e4, 0xf7df, 0xf5e4, 0xf7df, 0xf6cc, +0xf8d5, 0xf6cc, 0xf8d5, 0xf78e, 0xf9a7, 0xf78e, 0xf9a7, 0xf7dc, 0xfa05, 0xf7dc, 0xfa05, +0xf7dc, 0xfa05, 0xf7f8, 0xfa33, 0xf7f8, 0xfa33, 0xf817, 0xfa61, 0xf817, 0xfa61, 0xf828, +0xfa7e, 0xf828, 0xfa7e, 0xf855, 0xfab1, 0xf855, 0xfab1, 0xf890, 0xfaeb, 0xf890, 0xfaeb, +0xf8db, 0xfb2c, 0xf8db, 0xfb2c, 0xf8db, 0xfb2c, 0xf960, 0xfb9b, 0xf960, 0xfb9b, 0xfa08, +0xfc23, 0xfa08, 0xfc23, 0xfad0, 0xfcbd, 0xfad0, 0xfcbd, 0xfbd8, 0xfd89, 0xfbd8, 0xfd89, +0xfd21, 0xfe89, 0xfd21, 0xfe89, 0xfd21, 0xfe89, 0xfe83, 0xff94, 0xfe83, 0xff94, 0xffcb, +0x79, 0xffcb, 0x79, 0x12b, 0x16c, 0x12b, 0x16c, 0x2a3, 0x26c, 0x2a3, 0x26c, +0x420, 0x36a, 0x420, 0x36a, 0x5f0, 0x4b7, 0x5f0, 0x4b7, 0x5f0, 0x4b7, 0x802, +0x642, 0x802, 0x642, 0xa3d, 0x7f7, 0xa3d, 0x7f7, 0xc89, 0x9c0, 0xc89, 0x9c0, +0xed4, 0xb8d, 0xed4, 0xb8d, 0x1126, 0xd69, 0x1126, 0xd69, 0x1357, 0xf2e, 0x1357, +0xf2e, 0x1357, 0xf2e, 0x1556, 0x10cd, 0x1556, 0x10cd, 0x1737, 0x125b, 0x1737, 0x125b, +0x1941, 0x1422, 0x1941, 0x1422, 0x1b55, 0x1601, 0x1b55, 0x1601, 0x1ced, 0x1774, 0x1ced, +0x1774, 0x1ced, 0x1774, 0x1dd5, 0x1846, 0x1dd5, 0x1846, 0x1e3f, 0x18a9, 0x1e3f, 0x18a9, +0x1e5c, 0x18ce, 0x1e5c, 0x18ce, 0x1e27, 0x18ac, 0x1e27, 0x18ac, 0x1d9d, 0x1841, 0x1d9d, +0x1841, 0x1ccd, 0x179a, 0x1ccd, 0x179a, 0x1ccd, 0x179a, 0x1bdd, 0x16db, 0x1bdd, 0x16db, +0x1ac3, 0x15f8, 0x1ac3, 0x15f8, 0x197d, 0x14ee, 0x197d, 0x14ee, 0x1811, 0x13c1, 0x1811, +0x13c1, 0x168a, 0x127b, 0x168a, 0x127b, 0x1502, 0x1135, 0x1502, 0x1135, 0x1502, 0x1135, +0x13a1, 0x1016, 0x13a1, 0x1016, 0x127d, 0xf33, 0x127d, 0xf33, 0x1149, 0xe3f, 0x1149, +0xe3f, 0xfe6, 0xd1b, 0xfe6, 0xd1b, 0xe5a, 0xbcd, 0xe5a, 0xbcd, 0xe5a, 0xbcd, +0xcce, 0xa7e, 0xcce, 0xa7e, 0xb6f, 0x95b, 0xb6f, 0x95b, 0xa30, 0x858, 0xa30, +0x858, 0x904, 0x767, 0x904, 0x767, 0x7c0, 0x660, 0x7c0, 0x660, 0x64a, 0x527, +0x64a, 0x527, 0x64a, 0x527, 0x479, 0x393, 0x479, 0x393, 0x26f, 0x1c6, 0x26f, +0x1c6, 0x79, 0xd, 0x79, 0xd, 0xfea8, 0xfe7a, 0xfea8, 0xfe7a, 0xfce7, 0xfcf6, +0xfce7, 0xfcf6, 0xfb42, 0xfb8c, 0xfb42, 0xfb8c, 0xfb42, 0xfb8c, 0xf9ec, 0xfa6e, 0xf9ec, +0xfa6e, 0xf8c7, 0xf97e, 0xf8c7, 0xf97e, 0xf7c6, 0xf8ad, 0xf7c6, 0xf8ad, 0xf6c4, 0xf7d6, +0xf6c4, 0xf7d6, 0xf5d8, 0xf70f, 0xf5d8, 0xf70f, 0xf5d8, 0xf70f, 0xf522, 0xf677, 0xf522, +0xf677, 0xf483, 0xf5ee, 0xf483, 0xf5ee, 0xf40c, 0xf586, 0xf40c, 0xf586, 0xf38b, 0xf50c, +0xf38b, 0xf50c, 0xf2f3, 0xf474, 0xf2f3, 0xf474, 0xf246, 0xf3c0, 0xf246, 0xf3c0, 0xf246, +0xf3c0, 0xf1a0, 0xf30e, 0xf1a0, 0xf30e, 0xf165, 0xf2c2, 0xf165, 0xf2c2, 0xf19e, 0xf2e6, +0xf19e, 0xf2e6, 0xf227, 0xf358, 0xf227, 0xf358, 0xf2c3, 0xf3dd, 0xf2c3, 0xf3dd, 0xf2c3, +0xf3dd, 0xf34c, 0xf451, 0xf34c, 0xf451, 0xf3ac, 0xf49f, 0xf3ac, 0xf49f, 0xf3f2, 0xf4d7, +0xf3f2, 0xf4d7, 0xf439, 0xf516, 0xf439, 0xf516, 0xf498, 0xf574, 0xf498, 0xf574, 0xf529, +0xf60b, 0xf529, 0xf60b, 0xf529, 0xf60b, 0xf5c4, 0xf6b4, 0xf5c4, 0xf6b4, 0xf633, 0xf73a, +0xf633, 0xf73a, 0xf63b, 0xf760, 0xf63b, 0xf760, 0xf5ed, 0xf736, 0xf5ed, 0xf736, 0xf588, +0xf6fb, 0xf588, 0xf6fb, 0xf52c, 0xf6ce, 0xf52c, 0xf6ce, 0xf52c, 0xf6ce, 0xf4ee, 0xf6c1, +0xf4ee, 0xf6c1, 0xf4f0, 0xf6f5, 0xf4f0, 0xf6f5, 0xf508, 0xf73d, 0xf508, 0xf73d, 0xf4de, +0xf740, 0xf4de, 0xf740, 0xf481, 0xf70a, 0xf481, 0xf70a, 0xf481, 0xf70a, 0xf401, 0xf6ab, +0xf401, 0xf6ab, 0xf384, 0xf645, 0xf384, 0xf645, 0xf344, 0xf613, 0xf344, 0xf613, 0xf379, +0xf64b, 0xf379, 0xf64b, 0xf40c, 0xf6d5, 0xf40c, 0xf6d5, 0xf4c3, 0xf777, 0xf4c3, 0xf777, +0xf4c3, 0xf777, 0xf5b0, 0xf844, 0xf5b0, 0xf844, 0xf6d3, 0xf93c, 0xf6d3, 0xf93c, 0xf827, +0xfa5c, 0xf827, 0xfa5c, 0xf981, 0xfb7a, 0xf981, 0xfb7a, 0xfae8, 0xfc9d, 0xfae8, 0xfc9d, +0xfc85, 0xfdf3, 0xfc85, 0xfdf3, 0xfc85, 0xfdf3, 0xfe75, 0xff98, 0xfe75, 0xff98, 0xac, +0x184, 0xac, 0x184, 0x2c0, 0x34f, 0x2c0, 0x34f, 0x47a, 0x4c2, 0x47a, 0x4c2, +0x5a7, 0x5ae, 0x5a7, 0x5ae, 0x5a7, 0x5ae, 0x682, 0x64f, 0x682, 0x64f, 0x792, +0x72b, 0x792, 0x72b, 0x8e3, 0x851, 0x8e3, 0x851, 0xa23, 0x96f, 0xa23, 0x96f, +0xb02, 0xa34, 0xb02, 0xa34, 0xbb0, 0xad2, 0xbb0, 0xad2, 0xbb0, 0xad2, 0xc4b, +0xb64, 0xc4b, 0xb64, 0xcbd, 0xbd3, 0xcbd, 0xbd3, 0xce0, 0xbfa, 0xce0, 0xbfa, +0xcac, 0xbce, 0xcac, 0xbce, 0xc6a, 0xb99, 0xc6a, 0xb99, 0xc2f, 0xb6b, 0xc2f, +0xb6b, 0xc2f, 0xb6b, 0xbe4, 0xb2f, 0xbe4, 0xb2f, 0xb7e, 0xad7, 0xb7e, 0xad7, +0xafa, 0xa60, 0xafa, 0xa60, 0xa58, 0x9c8, 0xa58, 0x9c8, 0x999, 0x911, 0x999, +0x911, 0x999, 0x911, 0x8ce, 0x84c, 0x8ce, 0x84c, 0x819, 0x79b, 0x819, 0x79b, +0x777, 0x6fa, 0x777, 0x6fa, 0x6f7, 0x67a, 0x6f7, 0x67a, 0x6b2, 0x635, 0x6b2, +0x635, 0x670, 0x5f3, 0x670, 0x5f3, 0x670, 0x5f3, 0x60a, 0x58e, 0x60a, 0x58e, +0x569, 0x4f1, 0x569, 0x4f1, 0x495, 0x425, 0x495, 0x425, 0x396, 0x331, 0x396, +0x331, 0x259, 0x206, 0x259, 0x206, 0xe4, 0xa6, 0xe4, 0xa6, 0xe4, 0xa6, +0xff62, 0xff41, 0xff62, 0xff41, 0xfe37, 0xfe38, 0xfe37, 0xfe38, 0xfd45, 0xfd6c, 0xfd45, +0xfd6c, 0xfc12, 0xfc66, 0xfc12, 0xfc66, 0xfa5d, 0xfae0, 0xfa5d, 0xfae0, 0xfa5d, 0xfae0, +0xf859, 0xf90e, 0xf859, 0xf90e, 0xf656, 0xf73e, 0xf656, 0xf73e, 0xf438, 0xf555, 0xf438, +0xf555, 0xf203, 0xf352, 0xf203, 0xf352, 0xefef, 0xf16e, 0xefef, 0xf16e, 0xee48, 0xeff3, +0xee48, 0xeff3, 0xee48, 0xeff3, 0xed2c, 0xeefd, 0xed2c, 0xeefd, 0xec97, 0xee88, 0xec97, +0xee88, 0xec66, 0xee72, 0xec66, 0xee72, 0xec71, 0xee8f, 0xec71, 0xee8f, 0xecb1, 0xeedb, +0xecb1, 0xeedb, 0xecf7, 0xef25, 0xecf7, 0xef25, 0xecf7, 0xef25, 0xed3a, 0xef66, 0xed3a, +0xef66, 0xed61, 0xef85, 0xed61, 0xef85, 0xed6d, 0xef86, 0xed6d, 0xef86, 0xeda0, 0xefa9, +0xeda0, 0xefa9, 0xee13, 0xf00b, 0xee13, 0xf00b, 0xee13, 0xf00b, 0xeeeb, 0xf0d2, 0xeeeb, +0xf0d2, 0xf001, 0xf1d7, 0xf001, 0xf1d7, 0xf0fd, 0xf2c5, 0xf0fd, 0xf2c5, 0xf1d8, 0xf394, +0xf1d8, 0xf394, 0xf2b7, 0xf46d, 0xf2b7, 0xf46d, 0xf387, 0xf53a, 0xf387, 0xf53a, 0xf387, +0xf53a, 0xf41d, 0xf5d1, 0xf41d, 0xf5d1, 0xf47a, 0xf634, 0xf47a, 0xf634, 0xf4b6, 0xf67a, +0xf4b6, 0xf67a, 0xf4d8, 0xf6a9, 0xf4d8, 0xf6a9, 0xf4fa, 0xf6d8, 0xf4fa, 0xf6d8, 0xf543, +0xf72f, 0xf543, 0xf72f, 0xf543, 0xf72f, 0xf595, 0xf78d, 0xf595, 0xf78d, 0xf5db, 0xf7dd, +0xf5db, 0xf7dd, 0xf60b, 0xf810, 0xf60b, 0xf810, 0xf642, 0xf842, 0xf642, 0xf842, 0xf6ac, +0xf89e, 0xf6ac, 0xf89e, 0xf6ac, 0xf89e, 0xf766, 0xf940, 0xf766, 0xf940, 0xf87b, 0xfa31, +0xf87b, 0xfa31, 0xf9b9, 0xfb3d, 0xf9b9, 0xfb3d, 0xfb26, 0xfc6c, 0xfb26, 0xfc6c, 0xfc89, +0xfd84, 0xfc89, 0xfd84, 0xfdd1, 0xfe74, 0xfdd1, 0xfe74, 0xfdd1, 0xfe74, 0xff3a, 0xff79, +0xff3a, 0xff79, 0xc2, 0x92, 0xc2, 0x92, 0x27c, 0x1d6, 0x27c, 0x1d6, 0x466, +0x343, 0x466, 0x343, 0x692, 0x4ee, 0x692, 0x4ee, 0x8ec, 0x6c6, 0x8ec, 0x6c6, +0x8ec, 0x6c6, 0xb60, 0x8ba, 0xb60, 0x8ba, 0xdf7, 0xad4, 0xdf7, 0xad4, 0x106d, +0xcd4, 0x106d, 0xcd4, 0x12a8, 0xea3, 0x12a8, 0xea3, 0x14d8, 0x1073, 0x14d8, 0x1073, +0x14d8, 0x1073, 0x171e, 0x1265, 0x171e, 0x1265, 0x1954, 0x1456, 0x1954, 0x1456, 0x1b3f, +0x160c, 0x1b3f, 0x160c, 0x1cae, 0x1755, 0x1cae, 0x1755, 0x1dbd, 0x184f, 0x1dbd, 0x184f, +0x1ea2, 0x192d, 0x1ea2, 0x192d, 0x1ea2, 0x192d, 0x1f50, 0x19e5, 0x1f50, 0x19e5, 0x1f9f, +0x1a4a, 0x1f9f, 0x1a4a, 0x1f6d, 0x1a3b, 0x1f6d, 0x1a3b, 0x1ee1, 0x19db, 0x1ee1, 0x19db, +0x1e1a, 0x1949, 0x1e1a, 0x1949, 0x1d3f, 0x18aa, 0x1d3f, 0x18aa, 0x1d3f, 0x18aa, 0x1c5f, +0x180c, 0x1c5f, 0x180c, 0x1b50, 0x1740, 0x1b50, 0x1740, 0x1a22, 0x1659, 0x1a22, 0x1659, +0x18f5, 0x1571, 0x18f5, 0x1571, 0x17c7, 0x1488, 0x17c7, 0x1488, 0x17c7, 0x1488, 0x16a3, +0x13a7, 0x16a3, 0x13a7, 0x1590, 0x12d4, 0x1590, 0x12d4, 0x1489, 0x120b, 0x1489, 0x120b, +0x1376, 0x1134, 0x1376, 0x1134, 0x1223, 0x1019, 0x1223, 0x1019, 0x10a2, 0xecf, 0x10a2, +0xecf, 0x10a2, 0xecf, 0xf20, 0xd82, 0xf20, 0xd82, 0xda3, 0xc39, 0xda3, 0xc39, +0xc2b, 0xaf5, 0xc2b, 0xaf5, 0xa8b, 0x987, 0xa8b, 0x987, 0x8c4, 0x7f4, 0x8c4, +0x7f4, 0x8c4, 0x7f4, 0x705, 0x66a, 0x705, 0x66a, 0x560, 0x4fa, 0x560, 0x4fa, +0x39d, 0x36d, 0x39d, 0x36d, 0x18f, 0x195, 0x18f, 0x195, 0xffa1, 0xffdd, 0xffa1, +0xffdd, 0xfe22, 0xfe93, 0xfe22, 0xfe93, 0xfe22, 0xfe93, 0xfd0b, 0xfdaf, 0xfd0b, 0xfdaf, +0xfc08, 0xfcdd, 0xfc08, 0xfcdd, 0xfadf, 0xfbe0, 0xfadf, 0xfbe0, 0xf9c9, 0xfaf3, 0xf9c9, +0xfaf3, 0xf8cc, 0xfa18, 0xf8cc, 0xfa18, 0xf7dc, 0xf946, 0xf7dc, 0xf946, 0xf7dc, 0xf946, +0xf6ce, 0xf84e, 0xf6ce, 0xf84e, 0xf591, 0xf720, 0xf591, 0xf720, 0xf456, 0xf5ed, 0xf456, +0xf5ed, 0xf328, 0xf4c0, 0xf328, 0xf4c0, 0xf23e, 0xf3d2, 0xf23e, 0xf3d2, 0xf23e, 0xf3d2, +0xf1b1, 0xf33a, 0xf1b1, 0xf33a, 0xf19c, 0xf316, 0xf19c, 0xf316, 0xf1f6, 0xf35d, 0xf1f6, +0xf35d, 0xf26c, 0xf3bf, 0xf26c, 0xf3bf, 0xf2cb, 0xf40a, 0xf2cb, 0xf40a, 0xf2db, 0xf407, +0xf2db, 0xf407, 0xf2db, 0xf407, 0xf2a0, 0xf3bb, 0xf2a0, 0xf3bb, 0xf266, 0xf374, 0xf266, +0xf374, 0xf26f, 0xf376, 0xf26f, 0xf376, 0xf2be, 0xf3c4, 0xf2be, 0xf3c4, 0xf318, 0xf424, +0xf318, 0xf424, 0xf34a, 0xf463, 0xf34a, 0xf463, 0xf34a, 0xf463, 0xf372, 0xf49e, 0xf372, +0xf49e, 0xf381, 0xf4c9, 0xf381, 0xf4c9, 0xf35a, 0xf4c2, 0xf35a, 0xf4c2, 0xf31f, 0xf4ad, +0xf31f, 0xf4ad, 0xf2e2, 0xf498, 0xf2e2, 0xf498, 0xf2e2, 0xf498, 0xf2b8, 0xf498, 0xf2b8, +0xf498, 0xf272, 0xf47d, 0xf272, 0xf47d, 0xf1f0, 0xf423, 0xf1f0, 0xf423, 0xf14d, 0xf3a5, +0xf14d, 0xf3a5, 0xf0a0, 0xf317, 0xf0a0, 0xf317, 0xf007, 0xf296, 0xf007, 0xf296, 0xf007, +0xf296, 0xefa7, 0xf244, 0xefa7, 0xf244, 0xef86, 0xf228, 0xef86, 0xf228, 0xef8a, 0xf226, +0xef8a, 0xf226, 0xefd6, 0xf261, 0xefd6, 0xf261, 0xf07c, 0xf2ea, 0xf07c, 0xf2ea, 0xf18c, +0xf3d3, 0xf18c, 0xf3d3, 0xf18c, 0xf3d3, 0xf2d8, 0xf4ee, 0xf2d8, 0xf4ee, 0xf433, 0xf60e, +0xf433, 0xf60e, 0xf5a4, 0xf73f, 0xf5a4, 0xf73f, 0xf74e, 0xf8a2, 0xf74e, 0xf8a2, 0xf982, +0xfa8c, 0xf982, 0xfa8c, 0xf982, 0xfa8c, 0xfc19, 0xfcd8, 0xfc19, 0xfcd8, 0xfea9, 0xff1d, +0xfea9, 0xff1d, 0xb7, 0xe2, 0xb7, 0xe2, 0x235, 0x21c, 0x235, 0x21c, 0x364, +0x30d, 0x364, 0x30d, 0x489, 0x3fb, 0x489, 0x3fb, 0x489, 0x3fb, 0x5d9, 0x51d, +0x5d9, 0x51d, 0x70b, 0x629, 0x70b, 0x629, 0x810, 0x711, 0x810, 0x711, 0x8fc, +0x7e9, 0x8fc, 0x7e9, 0x9b8, 0x89a, 0x9b8, 0x89a, 0xa3d, 0x91b, 0xa3d, 0x91b, +0xa3d, 0x91b, 0xa8b, 0x96c, 0xa8b, 0x96c, 0xaa3, 0x98b, 0xaa3, 0x98b, 0xaaa, +0x99f, 0xaaa, 0x99f, 0xaba, 0x9be, 0xaba, 0x9be, 0xab7, 0x9cb, 0xab7, 0x9cb, +0xab7, 0x9cb, 0xa86, 0x9ab, 0xa86, 0x9ab, 0xa33, 0x967, 0xa33, 0x967, 0x9e4, +0x926, 0x9e4, 0x926, 0x971, 0x8be, 0x971, 0x8be, 0x8f0, 0x846, 0x8f0, 0x846, +0x886, 0x7e2, 0x886, 0x7e2, 0x886, 0x7e2, 0x844, 0x7a3, 0x844, 0x7a3, 0x825, +0x785, 0x825, 0x785, 0x7ed, 0x74d, 0x7ed, 0x74d, 0x7aa, 0x70a, 0x7aa, 0x70a, +0x732, 0x692, 0x732, 0x692, 0x68c, 0x5ef, 0x68c, 0x5ef, 0x68c, 0x5ef, 0x5e0, +0x549, 0x5e0, 0x549, 0x50a, 0x47c, 0x50a, 0x47c, 0x3ed, 0x36e, 0x3ed, 0x36e, +0x29e, 0x232, 0x29e, 0x232, 0x177, 0x125, 0x177, 0x125, 0x177, 0x125, 0x7d, +0x4c, 0x7d, 0x4c, 0xff66, 0xff5a, 0xff66, 0xff5a, 0xfe06, 0xfe26, 0xfe06, 0xfe26, +0xfc7d, 0xfccc, 0xfc7d, 0xfccc, 0xfafb, 0xfb7d, 0xfafb, 0xfb7d, 0xf964, 0xfa1c, 0xf964, +0xfa1c, 0xf964, 0xfa1c, 0xf78c, 0xf87a, 0xf78c, 0xf87a, 0xf589, 0xf6ac, 0xf589, 0xf6ac, +0xf39c, 0xf4f3, 0xf39c, 0xf4f3, 0xf203, 0xf38a, 0xf203, 0xf38a, 0xf0fb, 0xf2ae, 0xf0fb, +0xf2ae, 0xf08c, 0xf265, 0xf08c, 0xf265, 0xf08c, 0xf265, 0xf09c, 0xf293, 0xf09c, 0xf293, +0xf10e, 0xf31c, 0xf10e, 0xf31c, 0xf197, 0xf3b5, 0xf197, 0xf3b5, 0xf215, 0xf43a, 0xf215, +0xf43a, 0xf28b, 0xf4b1, 0xf28b, 0xf4b1, 0xf28b, 0xf4b1, 0xf2e7, 0xf508, 0xf2e7, 0xf508, +0xf332, 0xf547, 0xf332, 0xf547, 0xf37a, 0xf580, 0xf37a, 0xf580, 0xf3d4, 0xf5c9, 0xf3d4, +0xf5c9, 0xf44b, 0xf62d, 0xf44b, 0xf62d, 0xf4d7, 0xf6a6, 0xf4d7, 0xf6a6, 0xf4d7, 0xf6a6, +0xf598, 0xf756, 0xf598, 0xf756, 0xf688, 0xf838, 0xf688, 0xf838, 0xf776, 0xf91c, 0xf776, +0xf91c, 0xf832, 0xf9d4, 0xf832, 0xf9d4, 0xf8b8, 0xfa5a, 0xf8b8, 0xfa5a, 0xf912, 0xfabb, +0xf912, 0xfabb, 0xf912, 0xfabb, 0xf936, 0xfae9, 0xf936, 0xfae9, 0xf95e, 0xfb22, 0xf95e, +0xfb22, 0xf9b4, 0xfb8a, 0xf9b4, 0xfb8a, 0xfa0d, 0xfbf8, 0xfa0d, 0xfbf8, 0xfa55, 0xfc56, +0xfa55, 0xfc56, 0xfa55, 0xfc56, 0xfa5c, 0xfc70, 0xfa5c, 0xfc70, 0xfa2b, 0xfc4f, 0xfa2b, +0xfc4f, 0xf9f4, 0xfc23, 0xf9f4, 0xfc23, 0xf9e1, 0xfc12, 0xf9e1, 0xfc12, 0xfa33, 0xfc5e, +0xfa33, 0xfc5e, 0xfadd, 0xfcf6, 0xfadd, 0xfcf6, 0xfadd, 0xfcf6, 0xfbbb, 0xfdb7, 0xfbbb, +0xfdb7, 0xfc8b, 0xfe5b, 0xfc8b, 0xfe5b, 0xfd39, 0xfed2, 0xfd39, 0xfed2, 0xfe19, 0xff6c, +0xfe19, 0xff6c, 0xff3b, 0x3b, 0xff3b, 0x3b, 0x86, 0x128, 0x86, 0x128, 0x86, +0x128, 0x1e1, 0x21b, 0x1e1, 0x21b, 0x37a, 0x342, 0x37a, 0x342, 0x567, 0x4b8, +0x567, 0x4b8, 0x780, 0x656, 0x780, 0x656, 0x9a2, 0x7fc, 0x9a2, 0x7fc, 0x9a2, +0x7fc, 0xb9d, 0x97b, 0xb9d, 0x97b, 0xd67, 0xace, 0xd67, 0xace, 0xf35, 0xc2c, +0xf35, 0xc2c, 0x114c, 0xddd, 0x114c, 0xddd, 0x13c3, 0xff8, 0x13c3, 0xff8, 0x164e, +0x1234, 0x164e, 0x1234, 0x164e, 0x1234, 0x186d, 0x1412, 0x186d, 0x1412, 0x19df, 0x1552, +0x19df, 0x1552, 0x1a90, 0x15e1, 0x1a90, 0x15e1, 0x1ad8, 0x1616, 0x1ad8, 0x1616, 0x1afd, +0x1636, 0x1afd, 0x1636, 0x1afd, 0x1636, 0x1add, 0x1620, 0x1add, 0x1620, 0x1a88, 0x15e2, +0x1a88, 0x15e2, 0x19f8, 0x1574, 0x19f8, 0x1574, 0x1930, 0x14d8, 0x1930, 0x14d8, 0x1828, +0x1403, 0x1828, 0x1403, 0x16ee, 0x1302, 0x16ee, 0x1302, 0x16ee, 0x1302, 0x159f, 0x11f1, +0x159f, 0x11f1, 0x141a, 0x10ad, 0x141a, 0x10ad, 0x1282, 0xf55, 0x1282, 0xf55, 0x110d, +0xe21, 0x110d, 0xe21, 0xfdd, 0xd30, 0xfdd, 0xd30, 0xec4, 0xc55, 0xec4, 0xc55, +0xec4, 0xc55, 0xd9a, 0xb66, 0xd9a, 0xb66, 0xc75, 0xa7a, 0xc75, 0xa7a, 0xb53, +0x98c, 0xb53, 0x98c, 0xa3a, 0x8a6, 0xa3a, 0x8a6, 0x940, 0x7dc, 0x940, 0x7dc, +0x940, 0x7dc, 0x862, 0x72d, 0x862, 0x72d, 0x766, 0x65e, 0x766, 0x65e, 0x628, +0x54d, 0x628, 0x54d, 0x4af, 0x3ff, 0x4af, 0x3ff, 0x30e, 0x28a, 0x30e, 0x28a, +0x150, 0xf8, 0x150, 0xf8, 0x150, 0xf8, 0xff47, 0xff1b, 0xff47, 0xff1b, 0xfd33, +0xfd32, 0xfd33, 0xfd32, 0xfb6e, 0xfb98, 0xfb6e, 0xfb98, 0xfa05, 0xfa5a, 0xfa05, 0xfa5a, +0xf8fc, 0xf979, 0xf8fc, 0xf979, 0xf822, 0xf8c5, 0xf822, 0xf8c5, 0xf822, 0xf8c5, 0xf759, +0xf81f, 0xf759, 0xf81f, 0xf6ab, 0xf78f, 0xf6ab, 0xf78f, 0xf629, 0xf727, 0xf629, 0xf727, +0xf59a, 0xf6ac, 0xf59a, 0xf6ac, 0xf4ec, 0xf60c, 0xf4ec, 0xf60c, 0xf4ec, 0xf60c, 0xf440, +0xf567, 0xf440, 0xf567, 0xf383, 0xf4ab, 0xf383, 0xf4ab, 0xf2df, 0xf401, 0xf2df, 0xf401, +0xf27b, 0xf390, 0xf27b, 0xf390, 0xf285, 0xf388, 0xf285, 0xf388, 0xf2f5, 0xf3e2, 0xf2f5, +0xf3e2, 0xf2f5, 0xf3e2, 0xf3a7, 0xf47a, 0xf3a7, 0xf47a, 0xf475, 0xf52c, 0xf475, 0xf52c, +0xf4f8, 0xf591, 0xf4f8, 0xf591, 0xf525, 0xf5a2, 0xf525, 0xf5a2, 0xf53b, 0xf59e, 0xf53b, +0xf59e, 0xf578, 0xf5c5, 0xf578, 0xf5c5, 0xf578, 0xf5c5, 0xf5e2, 0xf61e, 0xf5e2, 0xf61e, +0xf65c, 0xf68c, 0xf65c, 0xf68c, 0xf6bd, 0xf6e8, 0xf6bd, 0xf6e8, 0xf6e3, 0xf711, 0xf6e3, +0xf711, 0xf6e6, 0xf71f, 0xf6e6, 0xf71f, 0xf6e6, 0xf71f, 0xf6cc, 0xf717, 0xf6cc, 0xf717, +0xf694, 0xf6f8, 0xf694, 0xf6f8, 0xf664, 0xf6e6, 0xf664, 0xf6e6, 0xf676, 0xf71c, 0xf676, +0xf71c, 0xf69e, 0xf76b, 0xf69e, 0xf76b, 0xf697, 0xf78d, 0xf697, 0xf78d, 0xf697, 0xf78d, +0xf658, 0xf777, 0xf658, 0xf777, 0xf5e7, 0xf72d, 0xf5e7, 0xf72d, 0xf56c, 0xf6d6, 0xf56c, +0xf6d6, 0xf50e, 0xf697, 0xf50e, 0xf697, 0xf4d0, 0xf670, 0xf4d0, 0xf670, 0xf4a7, 0xf656, +0xf4a7, 0xf656, 0xf4a7, 0xf656, 0xf4a9, 0xf65f, 0xf4a9, 0xf65f, 0xf4f2, 0xf6a4, 0xf4f2, +0xf6a4, 0xf5af, 0xf754, 0xf5af, 0xf754, 0xf6d1, 0xf85e, 0xf6d1, 0xf85e, 0xf806, 0xf972, +0xf806, 0xf972, 0xf806, 0xf972, 0xf936, 0xfa79, 0xf936, 0xfa79, 0xfa78, 0xfb8a, 0xfa78, +0xfb8a, 0xfc05, 0xfce0, 0xfc05, 0xfce0, 0xfdca, 0xfe6a, 0xfdca, 0xfe6a, 0xff7c, 0xffde, +0xff7c, 0xffde, 0x101, 0x125, 0x101, 0x125, 0x101, 0x125, 0x26f, 0x256, 0x26f, +0x256, 0x3ee, 0x39b, 0x3ee, 0x39b, 0x571, 0x4e7, 0x571, 0x4e7, 0x6e0, 0x626, +0x6e0, 0x626, 0x82e, 0x74b, 0x82e, 0x74b, 0x934, 0x82f, 0x934, 0x82f, 0x934, +0x82f, 0xa10, 0x8f1, 0xa10, 0x8f1, 0xaee, 0x9bd, 0xaee, 0x9bd, 0xbcc, 0xa91, +0xbcc, 0xa91, 0xc86, 0xb49, 0xc86, 0xb49, 0xce9, 0xbb0, 0xce9, 0xbb0, 0xce9, +0xbb0, 0xd14, 0xbe5, 0xd14, 0xbe5, 0xcf9, 0xbd8, 0xcf9, 0xbd8, 0xc97, 0xb88, +0xc97, 0xb88, 0xc1a, 0xb1f, 0xc1a, 0xb1f, 0xb9a, 0xab4, 0xb9a, 0xab4, 0xb23, +0xa51, 0xb23, 0xa51, 0xb23, 0xa51, 0xa63, 0x9a4, 0xa63, 0x9a4, 0x962, 0x8b6, +0x962, 0x8b6, 0x877, 0x7db, 0x877, 0x7db, 0x7d0, 0x741, 0x7d0, 0x741, 0x76b, +0x6e7, 0x76b, 0x6e7, 0x725, 0x6aa, 0x725, 0x6aa, 0x725, 0x6aa, 0x6e7, 0x673, +0x6e7, 0x673, 0x663, 0x5f7, 0x663, 0x5f7, 0x59f, 0x539, 0x59f, 0x539, 0x4c3, +0x465, 0x4c3, 0x465, 0x3d4, 0x380, 0x3d4, 0x380, 0x3d4, 0x380, 0x2e2, 0x299, +0x2e2, 0x299, 0x1ed, 0x1b3, 0x1ed, 0x1b3, 0x110, 0xea, 0x110, 0xea, 0x34, +0x26, 0x34, 0x26, 0xff50, 0xff5e, 0xff50, 0xff5e, 0xfe88, 0xfeb7, 0xfe88, 0xfeb7, +0xfe88, 0xfeb7, 0xfd96, 0xfdea, 0xfd96, 0xfdea, 0xfc40, 0xfcbd, 0xfc40, 0xfcbd, 0xfa9d, +0xfb45, 0xfa9d, 0xfb45, 0xf8b0, 0xf986, 0xf8b0, 0xf986, 0xf672, 0xf775, 0xf672, 0xf775, +0xf41d, 0xf54f, 0xf41d, 0xf54f, 0xf41d, 0xf54f, 0xf208, 0xf366, 0xf208, 0xf366, 0xf076, +0xf1fe, 0xf076, 0xf1fe, 0xef7a, 0xf128, 0xef7a, 0xf128, 0xeee1, 0xf0b0, 0xeee1, 0xf0b0, +0xee9c, 0xf088, 0xee9c, 0xf088, 0xee9c, 0xf088, 0xee8e, 0xf090, 0xee8e, 0xf090, 0xee87, +0xf099, 0xee87, 0xf099, 0xee85, 0xf0a1, 0xee85, 0xf0a1, 0xeea2, 0xf0c2, 0xeea2, 0xf0c2, +0xeedf, 0xf0fd, 0xeedf, 0xf0fd, 0xef27, 0xf141, 0xef27, 0xf141, 0xef27, 0xf141, 0xef88, +0xf198, 0xef88, 0xf198, 0xf01a, 0xf21f, 0xf01a, 0xf21f, 0xf0ec, 0xf2e5, 0xf0ec, 0xf2e5, +0xf1ce, 0xf3ba, 0xf1ce, 0xf3ba, 0xf2cd, 0xf4af, 0xf2cd, 0xf4af, 0xf3d8, 0xf5b1, 0xf3d8, +0xf5b1, 0xf3d8, 0xf5b1, 0xf4a9, 0xf67d, 0xf4a9, 0xf67d, 0xf52b, 0xf6fe, 0xf52b, 0xf6fe, +0xf56a, 0xf73f, 0xf56a, 0xf73f, 0xf591, 0xf76d, 0xf591, 0xf76d, 0xf59f, 0xf786, 0xf59f, +0xf786, 0xf59f, 0xf786, 0xf5c7, 0xf7bb, 0xf5c7, 0xf7bb, 0xf612, 0xf816, 0xf612, 0xf816, +0xf64e, 0xf863, 0xf64e, 0xf863, 0xf640, 0xf865, 0xf640, 0xf865, 0xf5fe, 0xf831, 0xf5fe, +0xf831, 0xf5cf, 0xf80d, 0xf5cf, 0xf80d, 0xf5cf, 0xf80d, 0xf5c4, 0xf806, 0xf5c4, 0xf806, +0xf60d, 0xf84c, 0xf60d, 0xf84c, 0xf6a6, 0xf8db, 0xf6a6, 0xf8db, 0xf792, 0xf9b1, 0xf792, +0xf9b1, 0xf8b8, 0xfab7, 0xf8b8, 0xfab7, 0xf8b8, 0xfab7, 0xf9da, 0xfbac, 0xf9da, 0xfbac, +0xfb07, 0xfca1, 0xfb07, 0xfca1, 0xfc68, 0xfdbe, 0xfc68, 0xfdbe, 0xfddf, 0xfee6, 0xfddf, +0xfee6, 0xff52, 0, 0xff52, 0, 0xfc, 0x148, 0xfc, 0x148, 0xfc, 0x148, +0x2ef, 0x2d1, 0x2ef, 0x2d1, 0x515, 0x489, 0x515, 0x489, 0x732, 0x635, 0x732, +0x635, 0x938, 0x7c8, 0x938, 0x7c8, 0xb34, 0x954, 0xb34, 0x954, 0xd40, 0xaf4, +0xd40, 0xaf4, 0xd40, 0xaf4, 0xf79, 0xcc8, 0xf79, 0xcc8, 0x11d8, 0xeca, 0x11d8, +0xeca, 0x1437, 0x10d8, 0x1437, 0x10d8, 0x1664, 0x12bf, 0x1664, 0x12bf, 0x1847, 0x1468, +0x1847, 0x1468, 0x1847, 0x1468, 0x1998, 0x158e, 0x1998, 0x158e, 0x1a91, 0x166a, 0x1a91, +0x166a, 0x1b7a, 0x1744, 0x1b7a, 0x1744, 0x1c54, 0x181c, 0x1c54, 0x181c, 0x1d15, 0x18e8, +0x1d15, 0x18e8, 0x1d77, 0x1961, 0x1d77, 0x1961, 0x1d77, 0x1961, 0x1d52, 0x195d, 0x1d52, +0x195d, 0x1ca7, 0x18db, 0x1ca7, 0x18db, 0x1bcc, 0x1831, 0x1bcc, 0x1831, 0x1ae6, 0x177f, +0x1ae6, 0x177f, 0x19f9, 0x16cc, 0x19f9, 0x16cc, 0x18f4, 0x1602, 0x18f4, 0x1602, 0x18f4, +0x1602, 0x17c7, 0x1511, 0x17c7, 0x1511, 0x16b2, 0x1438, 0x16b2, 0x1438, 0x15bf, 0x137e, +0x15bf, 0x137e, 0x14cf, 0x12c7, 0x14cf, 0x12c7, 0x13c3, 0x11ef, 0x13c3, 0x11ef, 0x13c3, +0x11ef, 0x12a5, 0x1104, 0x12a5, 0x1104, 0x1176, 0x1004, 0x1176, 0x1004, 0x1020, 0xeda, +0x1020, 0xeda, 0xe9b, 0xd80, 0xe9b, 0xd80, 0xd1a, 0xc27, 0xd1a, 0xc27, 0xbc4, +0xaf7, 0xbc4, 0xaf7, 0xbc4, 0xaf7, 0xa88, 0x9e1, 0xa88, 0x9e1, 0x924, 0x8a2, +0x924, 0x8a2, 0x783, 0x725, 0x783, 0x725, 0x5cd, 0x594, 0x5cd, 0x594, 0x40c, +0x3f6, 0x40c, 0x3f6, 0x254, 0x263, 0x254, 0x263, 0x254, 0x263, 0xad, 0xdf, +0xad, 0xdf, 0xff44, 0xff98, 0xff44, 0xff98, 0xfe07, 0xfe7d, 0xfe07, 0xfe7d, 0xfcdc, +0xfd71, 0xfcdc, 0xfd71, 0xfbc3, 0xfc75, 0xfbc3, 0xfc75, 0xfbc3, 0xfc75, 0xfab0, 0xfb7b, +0xfab0, 0xfb7b, 0xf9b6, 0xfa96, 0xf9b6, 0xfa96, 0xf8ad, 0xf99e, 0xf8ad, 0xf99e, 0xf79a, +0xf896, 0xf79a, 0xf896, 0xf67e, 0xf780, 0xf67e, 0xf780, 0xf54f, 0xf652, 0xf54f, 0xf652, +0xf54f, 0xf652, 0xf40d, 0xf50c, 0xf40d, 0xf50c, 0xf318, 0xf40c, 0xf318, 0xf40c, 0xf2be, +0xf3a4, 0xf2be, 0xf3a4, 0xf2e5, 0xf3ba, 0xf2e5, 0xf3ba, 0xf352, 0xf413, 0xf352, 0xf413, +0xf3a3, 0xf44e, 0xf3a3, 0xf44e, 0xf3a3, 0xf44e, 0xf3bd, 0xf452, 0xf3bd, 0xf452, 0xf39f, +0xf420, 0xf39f, 0xf420, 0xf3a0, 0xf40e, 0xf3a0, 0xf40e, 0xf3d1, 0xf430, 0xf3d1, 0xf430, +0xf42d, 0xf481, 0xf42d, 0xf481, 0xf42d, 0xf481, 0xf4ac, 0xf4fc, 0xf4ac, 0xf4fc, 0xf51d, +0xf56e, 0xf51d, 0xf56e, 0xf582, 0xf5da, 0xf582, 0xf5da, 0xf5ba, 0xf621, 0xf5ba, 0xf621, +0xf5f3, 0xf66f, 0xf5f3, 0xf66f, 0xf609, 0xf69f, 0xf609, 0xf69f, 0xf609, 0xf69f, 0xf5db, +0xf691, 0xf5db, 0xf691, 0xf56d, 0xf647, 0xf56d, 0xf647, 0xf4bd, 0xf5be, 0xf4bd, 0xf5be, +0xf3ee, 0xf518, 0xf3ee, 0xf518, 0xf32f, 0xf480, 0xf32f, 0xf480, 0xf2a4, 0xf41a, 0xf2a4, +0xf41a, 0xf2a4, 0xf41a, 0xf238, 0xf3d0, 0xf238, 0xf3d0, 0xf1f3, 0xf3a8, 0xf1f3, 0xf3a8, +0xf18f, 0xf35a, 0xf18f, 0xf35a, 0xf109, 0xf2e2, 0xf109, 0xf2e2, 0xf0a2, 0xf281, 0xf0a2, +0xf281, 0xf0a2, 0xf281, 0xf098, 0xf273, 0xf098, 0xf273, 0xf10b, 0xf2d9, 0xf10b, 0xf2d9, +0xf1e9, 0xf3a0, 0xf1e9, 0xf3a0, 0xf317, 0xf4ae, 0xf317, 0xf4ae, 0xf475, 0xf5e4, 0xf475, +0xf5e4, 0xf627, 0xf766, 0xf627, 0xf766, 0xf627, 0xf766, 0xf7f2, 0xf8fb, 0xf7f2, 0xf8fb, +0xf9bb, 0xfa89, 0xf9bb, 0xfa89, 0xfb95, 0xfc25, 0xfb95, 0xfc25, 0xfd76, 0xfdc6, 0xfd76, +0xfdc6, 0xff4d, 0xff5e, 0xff4d, 0xff5e, 0xd4, 0xa6, 0xd4, 0xa6, 0xd4, 0xa6, +0x21f, 0x1b6, 0x21f, 0x1b6, 0x354, 0x2b5, 0x354, 0x2b5, 0x465, 0x394, 0x465, +0x394, 0x556, 0x45a, 0x556, 0x45a, 0x63b, 0x51a, 0x63b, 0x51a, 0x63b, 0x51a, +0x70a, 0x5cc, 0x70a, 0x5cc, 0x7cf, 0x67a, 0x7cf, 0x67a, 0x875, 0x710, 0x875, +0x710, 0x8ef, 0x780, 0x8ef, 0x780, 0x924, 0x7b1, 0x924, 0x7b1, 0x90d, 0x799, +0x90d, 0x799, 0x90d, 0x799, 0x8da, 0x76c, 0x8da, 0x76c, 0x8ba, 0x754, 0x8ba, +0x754, 0x8e3, 0x787, 0x8e3, 0x787, 0x90e, 0x7be, 0x90e, 0x7be, 0x8fa, 0x7b8, +0x8fa, 0x7b8, 0x8a0, 0x76b, 0x8a0, 0x76b, 0x8a0, 0x76b, 0x825, 0x6fe, 0x825, +0x6fe, 0x7b3, 0x69b, 0x7b3, 0x69b, 0x73c, 0x632, 0x73c, 0x632, 0x6e0, 0x5e4, +0x6e0, 0x5e4, 0x686, 0x59a, 0x686, 0x59a, 0x686, 0x59a, 0x611, 0x534, 0x611, +0x534, 0x573, 0x4a9, 0x573, 0x4a9, 0x4a5, 0x3ee, 0x4a5, 0x3ee, 0x3c1, 0x320, +0x3c1, 0x320, 0x2ed, 0x266, 0x2ed, 0x266, 0x222, 0x1b7, 0x222, 0x1b7, 0x222, +0x1b7, 0x13e, 0xf4, 0x13e, 0xf4, 0x3e, 0x17, 0x3e, 0x17, 0xff40, 0xff40, +0xff40, 0xff40, 0xfe50, 0xfe79, 0xfe50, 0xfe79, 0xfd31, 0xfd87, 0xfd31, 0xfd87, 0xfbfe, +0xfc81, 0xfbfe, 0xfc81, 0xfbfe, 0xfc81, 0xfac6, 0xfb78, 0xfac6, 0xfb78, 0xf983, 0xfa64, +0xf983, 0xfa64, 0xf818, 0xf925, 0xf818, 0xf925, 0xf68f, 0xf7c8, 0xf68f, 0xf7c8, 0xf535, +0xf695, 0xf535, 0xf695, 0xf535, 0xf695, 0xf3ff, 0xf583, 0xf3ff, 0xf583, 0xf322, 0xf4c4, +0xf322, 0xf4c4, 0xf2ad, 0xf468, 0xf2ad, 0xf468, 0xf2ab, 0xf479, 0xf2ab, 0xf479, 0xf2f5, +0xf4cf, 0xf2f5, 0xf4cf, 0xf340, 0xf521, 0xf340, 0xf521, 0xf340, 0xf521, 0xf3a0, 0xf582, +0xf3a0, 0xf582, 0xf3fc, 0xf5da, 0xf3fc, 0xf5da, 0xf456, 0xf62c, 0xf456, 0xf62c, 0xf49e, +0xf668, 0xf49e, 0xf668, 0xf4f0, 0xf6ad, 0xf4f0, 0xf6ad, 0xf4f0, 0xf6ad, 0xf55a, 0xf70a, +0xf55a, 0xf70a, 0xf5d1, 0xf773, 0xf5d1, 0xf773, 0xf68b, 0xf822, 0xf68b, 0xf822, 0xf759, +0xf8e7, 0xf759, 0xf8e7, 0xf81b, 0xf9a3, 0xf81b, 0xf9a3, 0xf8c1, 0xfa4a, 0xf8c1, 0xfa4a, +0xf8c1, 0xfa4a, 0xf94d, 0xfada, 0xf94d, 0xfada, 0xf9d6, 0xfb6c, 0xf9d6, 0xfb6c, 0xfa58, +0xfbfd, 0xfa58, 0xfbfd, 0xfad9, 0xfc91, 0xfad9, 0xfc91, 0xfb3b, 0xfd09, 0xfb3b, 0xfd09, +0xfb7d, 0xfd64, 0xfb7d, 0xfd64, 0xfb7d, 0xfd64, 0xfb8c, 0xfd8d, 0xfb8c, 0xfd8d, 0xfb5a, +0xfd74, 0xfb5a, 0xfd74, 0xfafc, 0xfd2d, 0xfafc, 0xfd2d, 0xfa91, 0xfcd4, 0xfa91, 0xfcd4, +0xfa66, 0xfcb5, 0xfa66, 0xfcb5, 0xfa66, 0xfcb5, 0xfa76, 0xfcca, 0xfa76, 0xfcca, 0xfa96, +0xfce5, 0xfa96, 0xfce5, 0xfada, 0xfd1a, 0xfada, 0xfd1a, 0xfb46, 0xfd6b, 0xfb46, 0xfd6b, +0xfbd1, 0xfdce, 0xfbd1, 0xfdce, 0xfc7a, 0xfe43, 0xfc7a, 0xfe43, 0xfc7a, 0xfe43, 0xfd3b, +0xfec3, 0xfd3b, 0xfec3, 0xfe24, 0xff60, 0xfe24, 0xff60, 0xff64, 0x48, 0xff64, 0x48, +0xf8, 0x17b, 0xf8, 0x17b, 0x2b7, 0x2d1, 0x2b7, 0x2d1, 0x46b, 0x416, 0x46b, +0x416, 0x46b, 0x416, 0x61a, 0x552, 0x61a, 0x552, 0x7ed, 0x6b0, 0x7ed, 0x6b0, +0x9ca, 0x819, 0x9ca, 0x819, 0xbad, 0x98c, 0xbad, 0x98c, 0xdad, 0xb21, 0xdad, +0xb21, 0xdad, 0xb21, 0xfc8, 0xcd9, 0xfc8, 0xcd9, 0x11f1, 0xea7, 0x11f1, 0xea7, +0x1415, 0x107c, 0x1415, 0x107c, 0x15f9, 0x121d, 0x15f9, 0x121d, 0x1754, 0x1342, 0x1754, +0x1342, 0x1845, 0x1409, 0x1845, 0x1409, 0x1845, 0x1409, 0x18e9, 0x1492, 0x18e9, 0x1492, +0x1947, 0x14e1, 0x1947, 0x14e1, 0x1963, 0x14fa, 0x1963, 0x14fa, 0x1917, 0x14b7, 0x1917, +0x14b7, 0x1886, 0x1439, 0x1886, 0x1439, 0x17c4, 0x1394, 0x17c4, 0x1394, 0x17c4, 0x1394, +0x16d1, 0x12c5, 0x16d1, 0x12c5, 0x15aa, 0x11c9, 0x15aa, 0x11c9, 0x1444, 0x1093, 0x1444, +0x1093, 0x12e7, 0xf69, 0x12e7, 0xf69, 0x1198, 0xe4f, 0x1198, 0xe4f, 0x1198, 0xe4f, +0x1054, 0xd42, 0x1054, 0xd42, 0xf3e, 0xc63, 0xf3e, 0xc63, 0xe59, 0xbb5, 0xe59, +0xbb5, 0xd98, 0xb2a, 0xd98, 0xb2a, 0xcf9, 0xac1, 0xcf9, 0xac1, 0xc54, 0xa50, +0xc54, 0xa50, 0xc54, 0xa50, 0xb5e, 0x98d, 0xb5e, 0x98d, 0xa40, 0x8a2, 0xa40, +0x8a2, 0x907, 0x79b, 0x907, 0x79b, 0x7bc, 0x682, 0x7bc, 0x682, 0x64f, 0x548, +0x64f, 0x548, 0x4aa, 0x3d4, 0x4aa, 0x3d4, 0x4aa, 0x3d4, 0x2ff, 0x25c, 0x2ff, +0x25c, 0x170, 0xff, 0x170, 0xff, 0xfff4, 0xffb7, 0xfff4, 0xffb7, 0xfe5e, 0xfe53, +0xfe5e, 0xfe53, 0xfcdd, 0xfd03, 0xfcdd, 0xfd03, 0xfcdd, 0xfd03, 0xfb82, 0xfbda, 0xfb82, +0xfbda, 0xfa50, 0xfad6, 0xfa50, 0xfad6, 0xf950, 0xfa02, 0xf950, 0xfa02, 0xf87c, 0xf957, +0xf87c, 0xf957, 0xf7e2, 0xf8e1, 0xf7e2, 0xf8e1, 0xf741, 0xf85f, 0xf741, 0xf85f, 0xf741, +0xf85f, 0xf69e, 0xf7d6, 0xf69e, 0xf7d6, 0xf626, 0xf771, 0xf626, 0xf771, 0xf5b2, 0xf70b, +0xf5b2, 0xf70b, 0xf53a, 0xf69a, 0xf53a, 0xf69a, 0xf4d6, 0xf637, 0xf4d6, 0xf637, 0xf48d, +0xf5e8, 0xf48d, 0xf5e8, 0xf48d, 0xf5e8, 0xf478, 0xf5c8, 0xf478, 0xf5c8, 0xf4a5, 0xf5e5, +0xf4a5, 0xf5e5, 0xf514, 0xf641, 0xf514, 0xf641, 0xf58f, 0xf6a6, 0xf58f, 0xf6a6, 0xf5fc, +0xf6fc, 0xf5fc, 0xf6fc, 0xf5fc, 0xf6fc, 0xf676, 0xf75f, 0xf676, 0xf75f, 0xf6cb, 0xf79e, +0xf6cb, 0xf79e, 0xf70a, 0xf7ca, 0xf70a, 0xf7ca, 0xf732, 0xf7e3, 0xf732, 0xf7e3, 0xf769, +0xf80f, 0xf769, 0xf80f, 0xf7b0, 0xf851, 0xf7b0, 0xf851, 0xf7b0, 0xf851, 0xf7e2, 0xf884, +0xf7e2, 0xf884, 0xf825, 0xf8ce, 0xf825, 0xf8ce, 0xf85f, 0xf915, 0xf85f, 0xf915, 0xf8a1, +0xf969, 0xf8a1, 0xf969, 0xf8db, 0xf9bb, 0xf8db, 0xf9bb, 0xf8f0, 0xf9ec, 0xf8f0, 0xf9ec, +0xf8f0, 0xf9ec, 0xf8ba, 0xf9d5, 0xf8ba, 0xf9d5, 0xf843, 0xf980, 0xf843, 0xf980, 0xf7ce, +0xf92c, 0xf7ce, 0xf92c, 0xf760, 0xf8dd, 0xf760, 0xf8dd, 0xf6f7, 0xf892, 0xf6f7, 0xf892, +0xf6f7, 0xf892, 0xf680, 0xf834, 0xf680, 0xf834, 0xf613, 0xf7da, 0xf613, 0xf7da, 0xf5c5, +0xf799, 0xf5c5, 0xf799, 0xf5b2, 0xf78b, 0xf5b2, 0xf78b, 0xf5cf, 0xf7a6, 0xf5cf, 0xf7a6, +0xf622, 0xf7ed, 0xf622, 0xf7ed, 0xf622, 0xf7ed, 0xf6dc, 0xf893, 0xf6dc, 0xf893, 0xf7ed, +0xf989, 0xf7ed, 0xf989, 0xf931, 0xfaa9, 0xf931, 0xfaa9, 0xfa68, 0xfbb5, 0xfa68, 0xfbb5, +0xfb79, 0xfc96, 0xfb79, 0xfc96, 0xfc78, 0xfd60, 0xfc78, 0xfd60, 0xfc78, 0xfd60, 0xfdb7, +0xfe67, 0xfdb7, 0xfe67, 0xff53, 0xffcb, 0xff53, 0xffcb, 0x118, 0x156, 0x118, 0x156, +0x2de, 0x2e5, 0x2de, 0x2e5, 0x490, 0x462, 0x490, 0x462, 0x490, 0x462, 0x627, +0x5c8, 0x627, 0x5c8, 0x792, 0x707, 0x792, 0x707, 0x8b6, 0x806, 0x8b6, 0x806, +0x98d, 0x8bd, 0x98d, 0x8bd, 0xa4b, 0x961, 0xa4b, 0x961, 0xafb, 0x9ff, 0xafb, +0x9ff, 0xafb, 0x9ff, 0xb88, 0xa7f, 0xb88, 0xa7f, 0xbc2, 0xab3, 0xbc2, 0xab3, +0xb9b, 0xa8a, 0xb9b, 0xa8a, 0xb48, 0xa3a, 0xb48, 0xa3a, 0xaec, 0x9e5, 0xaec, +0x9e5, 0xa8a, 0x98e, 0xa8a, 0x98e, 0xa8a, 0x98e, 0xa26, 0x935, 0xa26, 0x935, +0x9c4, 0x8e0, 0x9c4, 0x8e0, 0x940, 0x86a, 0x940, 0x86a, 0x891, 0x7c8, 0x891, +0x7c8, 0x7be, 0x701, 0x7be, 0x701, 0x7be, 0x701, 0x6e5, 0x634, 0x6e5, 0x634, +0x636, 0x590, 0x636, 0x590, 0x5b6, 0x51a, 0x5b6, 0x51a, 0x53c, 0x4aa, 0x53c, +0x4aa, 0x4a4, 0x41c, 0x4a4, 0x41c, 0x3f6, 0x379, 0x3f6, 0x379, 0x3f6, 0x379, +0x341, 0x2d0, 0x341, 0x2d0, 0x2b0, 0x24b, 0x2b0, 0x24b, 0x232, 0x1dc, 0x232, +0x1dc, 0x19b, 0x158, 0x19b, 0x158, 0xcf, 0xa1, 0xcf, 0xa1, 0xcf, 0xa1, +0xffe4, 0xffce, 0xffe4, 0xffce, 0xfef5, 0xfefb, 0xfef5, 0xfefb, 0xfddf, 0xfe03, 0xfddf, +0xfe03, 0xfcaf, 0xfcf4, 0xfcaf, 0xfcf4, 0xfb68, 0xfbd2, 0xfb68, 0xfbd2, 0xfa00, 0xfa90, +0xfa00, 0xfa90, 0xfa00, 0xfa90, 0xf881, 0xf937, 0xf881, 0xf937, 0xf6fc, 0xf7d8, 0xf6fc, +0xf7d8, 0xf558, 0xf65a, 0xf558, 0xf65a, 0xf39d, 0xf4c2, 0xf39d, 0xf4c2, 0xf20a, 0xf350, +0xf20a, 0xf350, 0xf0c4, 0xf227, 0xf0c4, 0xf227, 0xf0c4, 0xf227, 0xefe0, 0xf15b, 0xefe0, +0xf15b, 0xef57, 0xf0e6, 0xef57, 0xf0e6, 0xef4b, 0xf0e8, 0xef4b, 0xf0e8, 0xef8c, 0xf132, +0xef8c, 0xf132, 0xefd3, 0xf17c, 0xefd3, 0xf17c, 0xefd3, 0xf17c, 0xf021, 0xf1ca, 0xf021, +0xf1ca, 0xf069, 0xf20b, 0xf069, 0xf20b, 0xf0bd, 0xf256, 0xf0bd, 0xf256, 0xf12d, 0xf2ba, +0xf12d, 0xf2ba, 0xf1ad, 0xf32c, 0xf1ad, 0xf32c, 0xf24c, 0xf3bd, 0xf24c, 0xf3bd, 0xf24c, +0xf3bd, 0xf325, 0xf489, 0xf325, 0xf489, 0xf413, 0xf56b, 0xf413, 0xf56b, 0xf4bb, 0xf60a, +0xf4bb, 0xf60a, 0xf519, 0xf663, 0xf519, 0xf663, 0xf555, 0xf69d, 0xf555, 0xf69d, 0xf581, +0xf6cc, 0xf581, 0xf6cc, 0xf581, 0xf6cc, 0xf5bc, 0xf70e, 0xf5bc, 0xf70e, 0xf5dd, 0xf73a, +0xf5dd, 0xf73a, 0xf5ff, 0xf76c, 0xf5ff, 0xf76c, 0xf634, 0xf7b1, 0xf634, 0xf7b1, 0xf635, +0xf7c5, 0xf635, 0xf7c5, 0xf635, 0xf7c5, 0xf604, 0xf7a7, 0xf604, 0xf7a7, 0xf5c7, 0xf77b, +0xf5c7, 0xf77b, 0xf5c6, 0xf788, 0xf5c6, 0xf788, 0xf5fa, 0xf7c5, 0xf5fa, 0xf7c5, 0xf62f, +0xf7fd, 0xf62f, 0xf7fd, 0xf688, 0xf850, 0xf688, 0xf850, 0xf688, 0xf850, 0xf74b, 0xf904, +0xf74b, 0xf904, 0xf855, 0xf9f5, 0xf855, 0xf9f5, 0xf964, 0xfae0, 0xf964, 0xfae0, 0xfa71, +0xfbbd, 0xfa71, 0xfbbd, 0xfb74, 0xfc84, 0xfb74, 0xfc84, 0xfca6, 0xfd70, 0xfca6, 0xfd70, +0xfca6, 0xfd70, 0xfe22, 0xfe9b, 0xfe22, 0xfe9b, 0xffd4, 0xfff3, 0xffd4, 0xfff3, 0x1a9, +0x166, 0x1a9, 0x166, 0x38b, 0x2e0, 0x38b, 0x2e0, 0x580, 0x469, 0x580, 0x469, +0x580, 0x469, 0x790, 0x60c, 0x790, 0x60c, 0x9a3, 0x7b2, 0x9a3, 0x7b2, 0xb8e, +0x933, 0xb8e, 0x933, 0xd7d, 0xabd, 0xd7d, 0xabd, 0xf71, 0xc54, 0xf71, 0xc54, +0x1185, 0xe14, 0x1185, 0xe14, 0x1185, 0xe14, 0x13c5, 0x100a, 0x13c5, 0x100a, 0x15d7, +0x11df, 0x15d7, 0x11df, 0x17b6, 0x138e, 0x17b6, 0x138e, 0x1960, 0x1514, 0x1960, 0x1514, +0x1aba, 0x1658, 0x1aba, 0x1658, 0x1bb8, 0x174d, 0x1bb8, 0x174d, 0x1bb8, 0x174d, 0x1c4d, +0x17e6, 0x1c4d, 0x17e6, 0x1c7b, 0x1825, 0x1c7b, 0x1825, 0x1c42, 0x1805, 0x1c42, 0x1805, +0x1ba1, 0x1786, 0x1ba1, 0x1786, 0x1abb, 0x16cb, 0x1abb, 0x16cb, 0x1abb, 0x16cb, 0x19c0, +0x1600, 0x19c0, 0x1600, 0x18d6, 0x154b, 0x18d6, 0x154b, 0x17f3, 0x149f, 0x17f3, 0x149f, +0x16f3, 0x13d8, 0x16f3, 0x13d8, 0x15ed, 0x130c, 0x15ed, 0x130c, 0x1512, 0x1269, 0x1512, +0x1269, 0x1512, 0x1269, 0x1448, 0x11d8, 0x1448, 0x11d8, 0x135e, 0x1124, 0x135e, 0x1124, +0x124c, 0x1046, 0x124c, 0x1046, 0x10fa, 0xf26, 0x10fa, 0xf26, 0xf7d, 0xddb, 0xf7d, +0xddb, 0xe0c, 0xc99, 0xe0c, 0xc99, 0xe0c, 0xc99, 0xcc7, 0xb83, 0xcc7, 0xb83, +0xb7a, 0xa64, 0xb7a, 0xa64, 0xa1b, 0x934, 0xa1b, 0x934, 0x8d1, 0x819, 0x8d1, +0x819, 0x78a, 0x703, 0x78a, 0x703, 0x78a, 0x703, 0x64d, 0x5f7, 0x64d, 0x5f7, +0x4dd, 0x4bb, 0x4dd, 0x4bb, 0x33f, 0x351, 0x33f, 0x351, 0x185, 0x1cc, 0x185, +0x1cc, 0xffdf, 0x5b, 0xffdf, 0x5b, 0xfe77, 0xff29, 0xfe77, 0xff29, 0xfe77, 0xff29, +0xfd2c, 0xfe11, 0xfd2c, 0xfe11, 0xfc16, 0xfd2c, 0xfc16, 0xfd2c, 0xfb14, 0xfc58, 0xfb14, +0xfc58, 0xfa1a, 0xfb88, 0xfa1a, 0xfb88, 0xf913, 0xfaa5, 0xf913, 0xfaa5, 0xf7fd, 0xf9ad, +0xf7fd, 0xf9ad, 0xf7fd, 0xf9ad, 0xf6dc, 0xf8a3, 0xf6dc, 0xf8a3, 0xf5ba, 0xf791, 0xf5ba, +0xf791, 0xf4cf, 0xf6ae, 0xf4cf, 0xf6ae, 0xf411, 0xf5f0, 0xf411, 0xf5f0, 0xf397, 0xf56e, +0xf397, 0xf56e, 0xf397, 0xf56e, 0xf381, 0xf54b, 0xf381, 0xf54b, 0xf3c9, 0xf57e, 0xf3c9, +0xf57e, 0xf41c, 0xf5b9, 0xf41c, 0xf5b9, 0xf473, 0xf5f3, 0xf473, 0xf5f3, 0xf4ed, 0xf64e, +0xf4ed, 0xf64e, 0xf55b, 0xf69c, 0xf55b, 0xf69c, 0xf55b, 0xf69c, 0xf5a5, 0xf6c7, 0xf5a5, +0xf6c7, 0xf5e4, 0xf6e9, 0xf5e4, 0xf6e9, 0xf645, 0xf731, 0xf645, 0xf731, 0xf6b2, 0xf789, +0xf6b2, 0xf789, 0xf72b, 0xf7f3, 0xf72b, 0xf7f3, 0xf796, 0xf856, 0xf796, 0xf856, 0xf796, +0xf856, 0xf7c6, 0xf884, 0xf7c6, 0xf884, 0xf7bf, 0xf882, 0xf7bf, 0xf882, 0xf77f, 0xf84e, +0xf77f, 0xf84e, 0xf705, 0xf7e4, 0xf705, 0xf7e4, 0xf65d, 0xf752, 0xf65d, 0xf752, 0xf65d, +0xf752, 0xf5b9, 0xf6c8, 0xf5b9, 0xf6c8, 0xf52f, 0xf65a, 0xf52f, 0xf65a, 0xf495, 0xf5dd, +0xf495, 0xf5dd, 0xf3e5, 0xf549, 0xf3e5, 0xf549, 0xf352, 0xf4d0, 0xf352, 0xf4d0, 0xf2e7, +0xf47b, 0xf2e7, 0xf47b, 0xf2e7, 0xf47b, 0xf287, 0xf42c, 0xf287, 0xf42c, 0xf221, 0xf3d0, +0xf221, 0xf3d0, 0xf1d1, 0xf384, 0xf1d1, 0xf384, 0xf1ef, 0xf39e, 0xf1ef, 0xf39e, 0xf2b8, +0xf45b, 0xf2b8, 0xf45b, 0xf3ff, 0xf58e, 0xf3ff, 0xf58e, 0xf3ff, 0xf58e, 0xf571, 0xf6e5, +0xf571, 0xf6e5, 0xf6d1, 0xf823, 0xf6d1, 0xf823, 0xf801, 0xf92b, 0xf801, 0xf92b, 0xf93a, +0xfa37, 0xf93a, 0xfa37, 0xfac5, 0xfb92, 0xfac5, 0xfb92, 0xfac5, 0xfb92, 0xfc9f, 0xfd3a, +0xfc9f, 0xfd3a, 0xfe6e, 0xfed7, 0xfe6e, 0xfed7, 0x36, 0x6e, 0x36, 0x6e, 0x1d9, +0x1e3, 0x1d9, 0x1e3, 0x31c, 0x2fb, 0x31c, 0x2fb, 0x411, 0x3c9, 0x411, 0x3c9, +0x411, 0x3c9, 0x4a5, 0x43c, 0x4a5, 0x43c, 0x549, 0x4c4, 0x549, 0x4c4, 0x603, +0x56a, 0x603, 0x56a, 0x6c0, 0x618, 0x6c0, 0x618, 0x775, 0x6c3, 0x775, 0x6c3, +0x775, 0x6c3, 0x7d4, 0x71e, 0x7d4, 0x71e, 0x806, 0x751, 0x806, 0x751, 0x80e, +0x75c, 0x80e, 0x75c, 0x808, 0x75d, 0x808, 0x75d, 0x7fb, 0x757, 0x7fb, 0x757, +0x80b, 0x770, 0x80b, 0x770, 0x80b, 0x770, 0x82b, 0x798, 0x82b, 0x798, 0x80e, +0x782, 0x80e, 0x782, 0x7be, 0x737, 0x7be, 0x737, 0x71f, 0x69c, 0x71f, 0x69c, +0x666, 0x5e5, 0x666, 0x5e5, 0x5c5, 0x544, 0x5c5, 0x544, 0x5c5, 0x544, 0x52a, +0x4a9, 0x52a, 0x4a9, 0x4aa, 0x427, 0x4aa, 0x427, 0x458, 0x3d2, 0x458, 0x3d2, +0x41b, 0x393, 0x41b, 0x393, 0x3cf, 0x348, 0x3cf, 0x348, 0x3cf, 0x348, 0x341, +0x2bc, 0x341, 0x2bc, 0x270, 0x1f1, 0x270, 0x1f1, 0x188, 0x113, 0x188, 0x113, +0x82, 0x1c, 0x82, 0x1c, 0xffaf, 0xff5c, 0xffaf, 0xff5c, 0xff31, 0xfef5, 0xff31, +0xfef5, 0xff31, 0xfef5, 0xfeb6, 0xfe99, 0xfeb6, 0xfe99, 0xfe17, 0xfe1b, 0xfe17, 0xfe1b, +0xfd6e, 0xfd98, 0xfd6e, 0xfd98, 0xfcc6, 0xfd19, 0xfcc6, 0xfd19, 0xfc04, 0xfc81, 0xfc04, +0xfc81, 0xfb1f, 0xfbc8, 0xfb1f, 0xfbc8, 0xfb1f, 0xfbc8, 0xf9dc, 0xfab0, 0xf9dc, 0xfab0, +0xf83e, 0xf93c, 0xf83e, 0xf93c, 0xf6ac, 0xf7d0, 0xf6ac, 0xf7d0, 0xf567, 0xf6ad, 0xf567, +0xf6ad, 0xf49b, 0xf5fe, 0xf49b, 0xf5fe, 0xf49b, 0xf5fe, 0xf45c, 0xf5d5, 0xf45c, 0xf5d5, +0xf4a0, 0xf629, 0xf4a0, 0xf629, 0xf550, 0xf6e2, 0xf550, 0xf6e2, 0xf5f6, 0xf78a, 0xf5f6, +0xf78a, 0xf655, 0xf7e4, 0xf655, 0xf7e4, 0xf689, 0xf80d, 0xf689, 0xf80d, 0xf689, 0xf80d, +0xf692, 0xf806, 0xf692, 0xf806, 0xf6b3, 0xf813, 0xf6b3, 0xf813, 0xf704, 0xf84c, 0xf704, +0xf84c, 0xf797, 0xf8c6, 0xf797, 0xf8c6, 0xf874, 0xf98b, 0xf874, 0xf98b, 0xf93d, 0xfa3d, +0xf93d, 0xfa3d, 0xf93d, 0xfa3d, 0xf9d2, 0xfabd, 0xf9d2, 0xfabd, 0xfa4c, 0xfb26, 0xfa4c, +0xfb26, 0xfadd, 0xfbab, 0xfadd, 0xfbab, 0xfb8b, 0xfc51, 0xfb8b, 0xfc51, 0xfc34, 0xfcf8, +0xfc34, 0xfcf8, 0xfc34, 0xfcf8, 0xfcaa, 0xfd72, 0xfcaa, 0xfd72, 0xfce0, 0xfdaf, 0xfce0, +0xfdaf, 0xfce3, 0xfdbe, 0xfce3, 0xfdbe, 0xfca1, 0xfd8c, 0xfca1, 0xfd8c, 0xfc41, 0xfd3d, +0xfc41, 0xfd3d, 0xfbdf, 0xfcec, 0xfbdf, 0xfcec, 0xfbdf, 0xfcec, 0xfb91, 0xfcad, 0xfb91, +0xfcad, 0xfb46, 0xfc6e, 0xfb46, 0xfc6e, 0xfaf3, 0xfc22, 0xfaf3, 0xfc22, 0xfac0, 0xfbef, +0xfac0, 0xfbef, 0xfaaf, 0xfbd6, 0xfaaf, 0xfbd6, 0xfaa7, 0xfbbd, 0xfaa7, 0xfbbd, 0xfaa7, +0xfbbd, 0xfab7, 0xfbb2, 0xfab7, 0xfbb2, 0xfb32, 0xfc07, 0xfb32, 0xfc07, 0xfc17, 0xfcbb, +0xfc17, 0xfcbb, 0xfd5a, 0xfdc4, 0xfd5a, 0xfdc4, 0xfed7, 0xfefd, 0xfed7, 0xfefd, 0xfed7, +0xfefd, 0x4c, 0x24, 0x4c, 0x24, 0x1b2, 0x137, 0x1b2, 0x137, 0x2f9, 0x224, +0x2f9, 0x224, 0x44e, 0x31c, 0x44e, 0x31c, 0x5db, 0x44a, 0x5db, 0x44a, 0x792, +0x5a4, 0x792, 0x5a4, 0x792, 0x5a4, 0x96c, 0x724, 0x96c, 0x724, 0xb52, 0x8b4, +0xb52, 0x8b4, 0xd3f, 0xa53, 0xd3f, 0xa53, 0xf2d, 0xbfc, 0xf2d, 0xbfc, 0x1106, +0xd99, 0x1106, 0xd99, 0x12b6, 0xf17, 0x12b6, 0xf17, 0x12b6, 0xf17, 0x1422, 0x105e, +0x1422, 0x105e, 0x1545, 0x1168, 0x1545, 0x1168, 0x1609, 0x121e, 0x1609, 0x121e, 0x1665, +0x1278, 0x1665, 0x1278, 0x1689, 0x12a5, 0x1689, 0x12a5, 0x1689, 0x12a5, 0x1669, 0x1296, +0x1669, 0x1296, 0x1601, 0x1248, 0x1601, 0x1248, 0x152f, 0x1197, 0x152f, 0x1197, 0x1420, +0x10af, 0x1420, 0x10af, 0x132b, 0xfe3, 0x132b, 0xfe3, 0x120e, 0xef4, 0x120e, 0xef4, +0x120e, 0xef4, 0x10ec, 0xe00, 0x10ec, 0xe00, 0xfdf, 0xd22, 0xfdf, 0xd22, 0xf0e, +0xc80, 0xf0e, 0xc80, 0xe6f, 0xc0f, 0xe6f, 0xc0f, 0xdbc, 0xb88, 0xdbc, 0xb88, +0xcec, 0xae3, 0xcec, 0xae3, 0xcec, 0xae3, 0xbf5, 0xa15, 0xbf5, 0xa15, 0xadf, +0x928, 0xadf, 0x928, 0x99c, 0x80c, 0x99c, 0x80c, 0x880, 0x718, 0x880, 0x718, +0x77b, 0x63a, 0x77b, 0x63a, 0x77b, 0x63a, 0x664, 0x54c, 0x664, 0x54c, 0x54c, +0x45e, 0x54c, 0x45e, 0x420, 0x35e, 0x420, 0x35e, 0x301, 0x26d, 0x301, 0x26d, +0x1ad, 0x14a, 0x1ad, 0x14a, 0x19, 0xffea, 0x19, 0xffea, 0x19, 0xffea, 0xfe6d, +0xfe72, 0xfe6d, 0xfe72, 0xfcfc, 0xfd37, 0xfcfc, 0xfd37, 0xfbc4, 0xfc36, 0xfbc4, 0xfc36, +0xfab2, 0xfb5b, 0xfab2, 0xfb5b, 0xf9e7, 0xfac5, 0xf9e7, 0xfac5, 0xf91f, 0xfa30, 0xf91f, +0xfa30, 0xf91f, 0xfa30, 0xf88b, 0xf9cb, 0xf88b, 0xf9cb, 0xf81c, 0xf987, 0xf81c, 0xf987, +0xf7b5, 0xf945, 0xf7b5, 0xf945, 0xf758, 0xf907, 0xf758, 0xf907, 0xf6e3, 0xf8aa, 0xf6e3, +0xf8aa, 0xf6e3, 0xf8aa, 0xf66f, 0xf846, 0xf66f, 0xf846, 0xf5e5, 0xf7c5, 0xf5e5, 0xf7c5, +0xf547, 0xf728, 0xf547, 0xf728, 0xf4cb, 0xf6a6, 0xf4cb, 0xf6a6, 0xf4c3, 0xf690, 0xf4c3, +0xf690, 0xf52b, 0xf6e6, 0xf52b, 0xf6e6, 0xf52b, 0xf6e6, 0xf5b8, 0xf75c, 0xf5b8, 0xf75c, +0xf65c, 0xf7e6, 0xf65c, 0xf7e6, 0xf6d8, 0xf847, 0xf6d8, 0xf847, 0xf721, 0xf873, 0xf721, +0xf873, 0xf76e, 0xf8a5, 0xf76e, 0xf8a5, 0xf78d, 0xf8ab, 0xf78d, 0xf8ab, 0xf78d, 0xf8ab, +0xf7a9, 0xf8b2, 0xf7a9, 0xf8b2, 0xf7dd, 0xf8d6, 0xf7dd, 0xf8d6, 0xf843, 0xf931, 0xf843, +0xf931, 0xf8ee, 0xf9d8, 0xf8ee, 0xf9d8, 0xf956, 0xfa40, 0xf956, 0xfa40, 0xf956, 0xfa40, +0xf979, 0xfa6b, 0xf979, 0xfa6b, 0xf96b, 0xfa6a, 0xf96b, 0xfa6a, 0xf93a, 0xfa4b, 0xf93a, +0xfa4b, 0xf8ed, 0xfa13, 0xf8ed, 0xfa13, 0xf890, 0xf9cf, 0xf890, 0xf9cf, 0xf823, 0xf97c, +0xf823, 0xf97c, 0xf823, 0xf97c, 0xf783, 0xf8f7, 0xf783, 0xf8f7, 0xf706, 0xf892, 0xf706, +0xf892, 0xf6b6, 0xf858, 0xf6b6, 0xf858, 0xf678, 0xf82d, 0xf678, 0xf82d, 0xf625, 0xf7e6, +0xf625, 0xf7e6, 0xf625, 0xf7e6, 0xf5c6, 0xf78f, 0xf5c6, 0xf78f, 0xf5a2, 0xf76a, 0xf5a2, +0xf76a, 0xf5dc, 0xf79d, 0xf5dc, 0xf79d, 0xf664, 0xf817, 0xf664, 0xf817, 0xf72d, 0xf8ca, +0xf72d, 0xf8ca, 0xf83a, 0xf9ba, 0xf83a, 0xf9ba, 0xf83a, 0xf9ba, 0xf93a, 0xfa97, 0xf93a, +0xfa97, 0xfa3e, 0xfb73, 0xfa3e, 0xfb73, 0xfb6c, 0xfc74, 0xfb6c, 0xfc74, 0xfcea, 0xfdc4, +0xfcea, 0xfdc4, 0xfead, 0xff56, 0xfead, 0xff56, 0xa2, 0x11a, 0xa2, 0x11a, 0xa2, +0x11a, 0x2b5, 0x2fd, 0x2b5, 0x2fd, 0x48e, 0x4a9, 0x48e, 0x4a9, 0x61b, 0x60b, +0x61b, 0x60b, 0x72a, 0x6f4, 0x72a, 0x6f4, 0x80d, 0x7b5, 0x80d, 0x7b5, 0x80d, +0x7b5, 0x8cc, 0x857, 0x8cc, 0x857, 0x955, 0x8c9, 0x955, 0x8c9, 0x9fb, 0x95c, +0x9fb, 0x95c, 0xa86, 0x9d9, 0xa86, 0x9d9, 0xaf1, 0xa3b, 0xaf1, 0xa3b, 0xb19, +0xa5d, 0xb19, 0xa5d, 0xb19, 0xa5d, 0xad8, 0xa1a, 0xad8, 0xa1a, 0xa66, 0x9a6, +0xa66, 0x9a6, 0x9ee, 0x92f, 0x9ee, 0x92f, 0x995, 0x8d6, 0x995, 0x8d6, 0x933, +0x875, 0x933, 0x875, 0x8a1, 0x7e3, 0x8a1, 0x7e3, 0x8a1, 0x7e3, 0x80a, 0x74a, +0x80a, 0x74a, 0x753, 0x691, 0x753, 0x691, 0x6a8, 0x5e3, 0x6a8, 0x5e3, 0x615, +0x54a, 0x615, 0x54a, 0x5ac, 0x4dc, 0x5ac, 0x4dc, 0x5ac, 0x4dc, 0x582, 0x4ab, +0x582, 0x4ab, 0x52d, 0x451, 0x52d, 0x451, 0x4f0, 0x411, 0x4f0, 0x411, 0x483, +0x3a1, 0x483, 0x3a1, 0x3da, 0x2fa, 0x3da, 0x2fa, 0x31b, 0x23f, 0x31b, 0x23f, +0x31b, 0x23f, 0x22d, 0x15b, 0x22d, 0x15b, 0x175, 0xb1, 0x175, 0xb1, 0xb0, +0, 0xb0, 0, 0x13, 0xff7c, 0x13, 0xff7c, 0xff59, 0xfee1, 0xff59, 0xfee1, +0xfe60, 0xfe0c, 0xfe60, 0xfe0c, 0xfe60, 0xfe0c, 0xfd4b, 0xfd20, 0xfd4b, 0xfd20, 0xfc09, +0xfc0b, 0xfc09, 0xfc0b, 0xfafb, 0xfb2b, 0xfafb, 0xfb2b, 0xf9ab, 0xfa0c, 0xf9ab, 0xfa0c, +0xf824, 0xf8b7, 0xf824, 0xf8b7, 0xf824, 0xf8b7, 0xf661, 0xf725, 0xf661, 0xf725, 0xf477, +0xf56b, 0xf477, 0xf56b, 0xf309, 0xf429, 0xf309, 0xf429, 0xf1ec, 0xf335, 0xf1ec, 0xf335, +0xf146, 0xf2b2, 0xf146, 0xf2b2, 0xf10d, 0xf296, 0xf10d, 0xf296, 0xf10d, 0xf296, 0xf104, +0xf2a4, 0xf104, 0xf2a4, 0xf133, 0xf2e4, 0xf133, 0xf2e4, 0xf16f, 0xf32a, 0xf16f, 0xf32a, +0xf195, 0xf355, 0xf195, 0xf355, 0xf1c2, 0xf37f, 0xf1c2, 0xf37f, 0xf22e, 0xf3e6, 0xf22e, +0xf3e6, 0xf22e, 0xf3e6, 0xf2a9, 0xf456, 0xf2a9, 0xf456, 0xf339, 0xf4d9, 0xf339, 0xf4d9, +0xf411, 0xf5a2, 0xf411, 0xf5a2, 0xf4c9, 0xf64b, 0xf4c9, 0xf64b, 0xf54d, 0xf6c0, 0xf54d, +0xf6c0, 0xf54d, 0xf6c0, 0xf5ad, 0xf713, 0xf5ad, 0xf713, 0xf60b, 0xf766, 0xf60b, 0xf766, +0xf67b, 0xf7cf, 0xf67b, 0xf7cf, 0xf6c1, 0xf811, 0xf6c1, 0xf811, 0xf6d3, 0xf824, 0xf6d3, +0xf824, 0xf6d0, 0xf824, 0xf6d0, 0xf824, 0xf6d0, 0xf824, 0xf6d7, 0xf832, 0xf6d7, 0xf832, +0xf6dd, 0xf841, 0xf6dd, 0xf841, 0xf70a, 0xf878, 0xf70a, 0xf878, 0xf710, 0xf889, 0xf710, +0xf889, 0xf6e3, 0xf865, 0xf6e3, 0xf865, 0xf6d7, 0xf860, 0xf6d7, 0xf860, 0xf6d7, 0xf860, +0xf6d8, 0xf865, 0xf6d8, 0xf865, 0xf706, 0xf88f, 0xf706, 0xf88f, 0xf741, 0xf8c0, 0xf741, +0xf8c0, 0xf7a3, 0xf911, 0xf7a3, 0xf911, 0xf820, 0xf973, 0xf820, 0xf973, 0xf820, 0xf973, +0xf8e8, 0xfa15, 0xf8e8, 0xfa15, 0xfa1f, 0xfb1e, 0xfa1f, 0xfb1e, 0xfba0, 0xfc65, 0xfba0, +0xfc65, 0xfd75, 0xfdf7, 0xfd75, 0xfdf7, 0xff1f, 0xff55, 0xff1f, 0xff55, 0xa6, 0x87, +0xa6, 0x87, 0xa6, 0x87, 0x226, 0x1ac, 0x226, 0x1ac, 0x3ce, 0x2f4, 0x3ce, +0x2f4, 0x5aa, 0x46c, 0x5aa, 0x46c, 0x794, 0x5f2, 0x794, 0x5f2, 0x9a8, 0x7a2, +0x9a8, 0x7a2, 0xba3, 0x93d, 0xba3, 0x93d, 0xba3, 0x93d, 0xda6, 0xae4, 0xda6, +0xae4, 0xfe3, 0xccc, 0xfe3, 0xccc, 0x1260, 0xefc, 0x1260, 0xefc, 0x14ed, 0x1147, +0x14ed, 0x1147, 0x1736, 0x1359, 0x1736, 0x1359, 0x1736, 0x1359, 0x1910, 0x1507, 0x1910, +0x1507, 0x1a72, 0x1649, 0x1a72, 0x1649, 0x1b5c, 0x1721, 0x1b5c, 0x1721, 0x1bd8, 0x1796, +0x1bd8, 0x1796, 0x1be8, 0x17ab, 0x1be8, 0x17ab, 0x1b77, 0x1749, 0x1b77, 0x1749, 0x1b77, +0x1749, 0x1abf, 0x16aa, 0x1abf, 0x16aa, 0x1a16, 0x1621, 0x1a16, 0x1621, 0x19a1, 0x15d3, +0x19a1, 0x15d3, 0x18e4, 0x1543, 0x18e4, 0x1543, 0x17ef, 0x1480, 0x17ef, 0x1480, 0x170c, +0x13d0, 0x170c, 0x13d0, 0x170c, 0x13d0, 0x1622, 0x131b, 0x1622, 0x131b, 0x1540, 0x126d, +0x1540, 0x126d, 0x141c, 0x117e, 0x141c, 0x117e, 0x12df, 0x1074, 0x12df, 0x1074, 0x11a0, +0xf67, 0x11a0, 0xf67, 0x11a0, 0xf67, 0x1065, 0xe5c, 0x1065, 0xe5c, 0xf2b, 0xd50, +0xf2b, 0xd50, 0xdf9, 0xc4a, 0xdf9, 0xc4a, 0xcca, 0xb46, 0xcca, 0xb46, 0xb6a, +0xa11, 0xb6a, 0xa11, 0xa73, 0x945, 0xa73, 0x945, 0xa73, 0x945, 0x9a0, 0x89c, +0x9a0, 0x89c, 0x88c, 0x7b3, 0x88c, 0x7b3, 0x751, 0x6a4, 0x751, 0x6a4, 0x5a6, +0x526, 0x5a6, 0x526, 0x3d9, 0x388, 0x3d9, 0x388, 0x210, 0x1ef, 0x210, 0x1ef, +0x210, 0x1ef, 0x69, 0x79, 0x69, 0x79, 0xff16, 0xff58, 0xff16, 0xff58, 0xfddc, +0xfe4e, 0xfddc, 0xfe4e, 0xfca4, 0xfd46, 0xfca4, 0xfd46, 0xfb7e, 0xfc4e, 0xfb7e, 0xfc4e, +0xfb7e, 0xfc4e, 0xfa56, 0xfb51, 0xfa56, 0xfb51, 0xf92f, 0xfa52, 0xf92f, 0xfa52, 0xf832, +0xf977, 0xf832, 0xf977, 0xf766, 0xf8c8, 0xf766, 0xf8c8, 0xf6a3, 0xf81c, 0xf6a3, 0xf81c, +0xf5d4, 0xf75e, 0xf5d4, 0xf75e, 0xf5d4, 0xf75e, 0xf524, 0xf6b8, 0xf524, 0xf6b8, 0xf4aa, +0xf642, 0xf4aa, 0xf642, 0xf492, 0xf627, 0xf492, 0xf627, 0xf4df, 0xf66b, 0xf4df, 0xf66b, +0xf55d, 0xf6dc, 0xf55d, 0xf6dc, 0xf55d, 0xf6dc, 0xf5e2, 0xf750, 0xf5e2, 0xf750, 0xf61d, +0xf777, 0xf61d, 0xf777, 0xf643, 0xf789, 0xf643, 0xf789, 0xf65f, 0xf790, 0xf65f, 0xf790, +0xf65e, 0xf77d, 0xf65e, 0xf77d, 0xf68c, 0xf79b, 0xf68c, 0xf79b, 0xf68c, 0xf79b, 0xf6ea, +0xf7ee, 0xf6ea, 0xf7ee, 0xf7a7, 0xf8a5, 0xf7a7, 0xf8a5, 0xf80e, 0xf90b, 0xf80e, 0xf90b, +0xf7c7, 0xf8cb, 0xf7c7, 0xf8cb, 0xf75a, 0xf86a, 0xf75a, 0xf86a, 0xf6e7, 0xf80b, 0xf6e7, +0xf80b, 0xf6e7, 0xf80b, 0xf68d, 0xf7ca, 0xf68d, 0xf7ca, 0xf5f2, 0xf74d, 0xf5f2, 0xf74d, +0xf568, 0xf6e6, 0xf568, 0xf6e6, 0xf4dd, 0xf67f, 0xf4dd, 0xf67f, 0xf445, 0xf60e, 0xf445, +0xf60e, 0xf445, 0xf60e, 0xf41f, 0xf60d, 0xf41f, 0xf60d, 0xf3b9, 0xf5ca, 0xf3b9, 0xf5ca, +0xf32b, 0xf55b, 0xf32b, 0xf55b, 0xf25a, 0xf4a3, 0xf25a, 0xf4a3, 0xf16d, 0xf3c9, 0xf16d, +0xf3c9, 0xf131, 0xf397, 0xf131, 0xf397, 0xf131, 0xf397, 0xf144, 0xf3aa, 0xf144, 0xf3aa, +0xf1ef, 0xf44d, 0xf1ef, 0xf44d, 0xf306, 0xf551, 0xf306, 0xf551, 0xf402, 0xf631, 0xf402, +0xf631, 0xf50e, 0xf718, 0xf50e, 0xf718, 0xf625, 0xf801, 0xf625, 0xf801, 0xf625, 0xf801, +0xf762, 0xf90a, 0xf762, 0xf90a, 0xf8b7, 0xfa24, 0xf8b7, 0xfa24, 0xfa7d, 0xfbab, 0xfa7d, +0xfbab, 0xfc59, 0xfd47, 0xfc59, 0xfd47, 0xfe1b, 0xfec8, 0xfe1b, 0xfec8, 0xfe1b, 0xfec8, +0xffd3, 0x40, 0xffd3, 0x40, 0x119, 0x148, 0x119, 0x148, 0x25d, 0x254, 0x25d, +0x254, 0x323, 0x2e7, 0x323, 0x2e7, 0x3c9, 0x360, 0x3c9, 0x360, 0x493, 0x405, +0x493, 0x405, 0x493, 0x405, 0x536, 0x48b, 0x536, 0x48b, 0x617, 0x555, 0x617, +0x555, 0x69d, 0x5cc, 0x69d, 0x5cc, 0x711, 0x638, 0x711, 0x638, 0x73b, 0x660, +0x73b, 0x660, 0x71f, 0x648, 0x71f, 0x648, 0x71f, 0x648, 0x6f7, 0x627, 0x6f7, +0x627, 0x6ae, 0x5e7, 0x6ae, 0x5e7, 0x68a, 0x5ce, 0x68a, 0x5ce, 0x654, 0x5a4, +0x654, 0x5a4, 0x64c, 0x5a8, 0x64c, 0x5a8, 0x64c, 0x5a8, 0x5d0, 0x535, 0x5d0, +0x535, 0x541, 0x4af, 0x541, 0x4af, 0x4cc, 0x440, 0x4cc, 0x440, 0x437, 0x3af, +0x437, 0x3af, 0x3eb, 0x366, 0x3eb, 0x366, 0x382, 0x2fc, 0x382, 0x2fc, 0x382, +0x2fc, 0x340, 0x2ba, 0x340, 0x2ba, 0x2cc, 0x245, 0x2cc, 0x245, 0x230, 0x1a8, +0x230, 0x1a8, 0x199, 0x112, 0x199, 0x112, 0x105, 0x82, 0x105, 0x82, 0x9e, +0x21, 0x9e, 0x21, 0x9e, 0x21, 0x47, 0xffd4, 0x47, 0xffd4, 0x2e, 0xffca, +0x2e, 0xffca, 0xffd5, 0xff84, 0xffd5, 0xff84, 0xff70, 0xff38, 0xff70, 0xff38, 0xff2a, +0xff0f, 0xff2a, 0xff0f, 0xff2a, 0xff0f, 0xfe90, 0xfe97, 0xfe90, 0xfe97, 0xfdd1, 0xfdfc, +0xfdd1, 0xfdfc, 0xfcfb, 0xfd4d, 0xfcfb, 0xfd4d, 0xfba7, 0xfc22, 0xfba7, 0xfc22, 0xf9e4, +0xfa88, 0xf9e4, 0xfa88, 0xf867, 0xf933, 0xf867, 0xf933, 0xf867, 0xf933, 0xf742, 0xf834, +0xf742, 0xf834, 0xf67c, 0xf790, 0xf67c, 0xf790, 0xf626, 0xf758, 0xf626, 0xf758, 0xf623, +0xf76c, 0xf623, 0xf76c, 0xf68f, 0xf7ea, 0xf68f, 0xf7ea, 0xf6e8, 0xf84e, 0xf6e8, 0xf84e, +0xf6e8, 0xf84e, 0xf70e, 0xf879, 0xf70e, 0xf879, 0xf752, 0xf8bb, 0xf752, 0xf8bb, 0xf75e, +0xf8be, 0xf75e, 0xf8be, 0xf7c4, 0xf918, 0xf7c4, 0xf918, 0xf87d, 0xf9bf, 0xf87d, 0xf9bf, +0xf87d, 0xf9bf, 0xf901, 0xfa2f, 0xf901, 0xfa2f, 0xf9c0, 0xfad7, 0xf9c0, 0xfad7, 0xfa84, +0xfb85, 0xfa84, 0xfb85, 0xfb38, 0xfc24, 0xfb38, 0xfc24, 0xfbea, 0xfcc4, 0xfbea, 0xfcc4, +0xfcb6, 0xfd81, 0xfcb6, 0xfd81, 0xfcb6, 0xfd81, 0xfd60, 0xfe21, 0xfd60, 0xfe21, 0xfda7, +0xfe63, 0xfda7, 0xfe63, 0xfdbe, 0xfe7a, 0xfdbe, 0xfe7a, 0xfdb3, 0xfe75, 0xfdb3, 0xfe75, +0xfdb7, 0xfe84, 0xfdb7, 0xfe84, 0xfd67, 0xfe43, 0xfd67, 0xfe43, 0xfd67, 0xfe43, 0xfcfa, +0xfde8, 0xfcfa, 0xfde8, 0xfc75, 0xfd77, 0xfc75, 0xfd77, 0xfb99, 0xfcaf, 0xfb99, 0xfcaf, +0xfb1a, 0xfc41, 0xfb1a, 0xfc41, 0xfaa7, 0xfbdd, 0xfaa7, 0xfbdd, 0xfaa7, 0xfbdd, 0xfa26, +0xfb65, 0xfa26, 0xfb65, 0xf9f1, 0xfb31, 0xf9f1, 0xfb31, 0xf9d3, 0xfb0b, 0xf9d3, 0xfb0b, +0xfa24, 0xfb4a, 0xfa24, 0xfb4a, 0xfacf, 0xfbd8, 0xfacf, 0xfbd8, 0xfbac, 0xfc8c, 0xfbac, +0xfc8c, 0xfbac, 0xfc8c, 0xfcd7, 0xfd81, 0xfcd7, 0xfd81, 0xfe1a, 0xfe82, 0xfe1a, 0xfe82, +0xff67, 0xff83, 0xff67, 0xff83, 0x8a, 0x4f, 0x8a, 0x4f, 0x1c9, 0x12e, 0x1c9, +0x12e, 0x31f, 0x21f, 0x31f, 0x21f, 0x31f, 0x21f, 0x4ae, 0x344, 0x4ae, 0x344, +0x697, 0x4c2, 0x697, 0x4c2, 0x868, 0x626, 0x868, 0x626, 0xa41, 0x797, 0xa41, +0x797, 0xc12, 0x906, 0xc12, 0x906, 0xc12, 0x906, 0xe3b, 0xad3, 0xe3b, 0xad3, +0x1083, 0xcca, 0x1083, 0xcca, 0x1261, 0xe63, 0x1261, 0xe63, 0x1414, 0xfdd, 0x1414, +0xfdd, 0x1594, 0x1133, 0x1594, 0x1133, 0x1675, 0x11f8, 0x1675, 0x11f8, 0x1675, 0x11f8, +0x16db, 0x1250, 0x16db, 0x1250, 0x1766, 0x12dc, 0x1766, 0x12dc, 0x1775, 0x12f9, 0x1775, +0x12f9, 0x1722, 0x12c1, 0x1722, 0x12c1, 0x16bc, 0x1280, 0x16bc, 0x1280, 0x1606, 0x11f9, +0x1606, 0x11f9, 0x1606, 0x11f9, 0x151f, 0x1149, 0x151f, 0x1149, 0x140e, 0x1075, 0x140e, +0x1075, 0x1333, 0xfdb, 0x1333, 0xfdb, 0x124b, 0xf37, 0x124b, 0xf37, 0x1122, 0xe52, +0x1122, 0xe52, 0x1122, 0xe52, 0xff1, 0xd65, 0xff1, 0xd65, 0xee9, 0xca0, 0xee9, +0xca0, 0xdd2, 0xbcb, 0xdd2, 0xbcb, 0xccb, 0xb02, 0xccb, 0xb02, 0xbfd, 0xa70, +0xbfd, 0xa70, 0xad5, 0x980, 0xad5, 0x980, 0xad5, 0x980, 0x9a2, 0x883, 0x9a2, +0x883, 0x8b7, 0x7cb, 0x8b7, 0x7cb, 0x7a9, 0x6ef, 0x7a9, 0x6ef, 0x697, 0x60d, +0x697, 0x60d, 0x594, 0x539, 0x594, 0x539, 0x594, 0x539, 0x44b, 0x41f, 0x44b, +0x41f, 0x2f2, 0x2f4, 0x2f2, 0x2f4, 0x185, 0x1b5, 0x185, 0x1b5, 0x10, 0x6e, +0x10, 0x6e, 0xfe99, 0xff26, 0xfe99, 0xff26, 0xfd2c, 0xfde7, 0xfd2c, 0xfde7, 0xfd2c, +0xfde7, 0xfbfa, 0xfce2, 0xfbfa, 0xfce2, 0xfac3, 0xfbd8, 0xfac3, 0xfbd8, 0xf9d0, 0xfb0f, +0xf9d0, 0xfb0f, 0xf8e9, 0xfa4f, 0xf8e9, 0xfa4f, 0xf829, 0xf9b3, 0xf829, 0xf9b3, 0xf7aa, +0xf953, 0xf7aa, 0xf953, 0xf7aa, 0xf953, 0xf747, 0xf90a, 0xf747, 0xf90a, 0xf708, 0xf8e0, +0xf708, 0xf8e0, 0xf66d, 0xf852, 0xf66d, 0xf852, 0xf5bf, 0xf7ac, 0xf5bf, 0xf7ac, 0xf4ff, +0xf6ef, 0xf4ff, 0xf6ef, 0xf4ff, 0xf6ef, 0xf470, 0xf65b, 0xf470, 0xf65b, 0xf47d, 0xf65d, +0xf47d, 0xf65d, 0xf516, 0xf6e7, 0xf516, 0xf6e7, 0xf5f5, 0xf7b3, 0xf5f5, 0xf7b3, 0xf6a5, +0xf84d, 0xf6a5, 0xf84d, 0xf739, 0xf8c9, 0xf739, 0xf8c9, 0xf739, 0xf8c9, 0xf782, 0xf8f9, +0xf782, 0xf8f9, 0xf76b, 0xf8ca, 0xf76b, 0xf8ca, 0xf761, 0xf8aa, 0xf761, 0xf8aa, 0xf7b9, +0xf8f0, 0xf7b9, 0xf8f0, 0xf845, 0xf96d, 0xf845, 0xf96d, 0xf8e8, 0xfa06, 0xf8e8, 0xfa06, +0xf8e8, 0xfa06, 0xf961, 0xfa7b, 0xf961, 0xfa7b, 0xf981, 0xfa9c, 0xf981, 0xfa9c, 0xf9ad, +0xface, 0xf9ad, 0xface, 0xf9bd, 0xfaea, 0xf9bd, 0xfaea, 0xf968, 0xfaa5, 0xf968, 0xfaa5, +0xf968, 0xfaa5, 0xf8fe, 0xfa4e, 0xf8fe, 0xfa4e, 0xf8bc, 0xfa21, 0xf8bc, 0xfa21, 0xf839, +0xf9b3, 0xf839, 0xf9b3, 0xf796, 0xf926, 0xf796, 0xf926, 0xf6fd, 0xf89f, 0xf6fd, 0xf89f, +0xf65e, 0xf810, 0xf65e, 0xf810, 0xf65e, 0xf810, 0xf5f3, 0xf7ae, 0xf5f3, 0xf7ae, 0xf57c, +0xf73c, 0xf57c, 0xf73c, 0xf50d, 0xf6cb, 0xf50d, 0xf6cb, 0xf4e4, 0xf698, 0xf4e4, 0xf698, +0xf50c, 0xf6ae, 0xf50c, 0xf6ae, 0xf5a0, 0xf728, 0xf5a0, 0xf728, 0xf5a0, 0xf728, 0xf65a, +0xf7c1, 0xf65a, 0xf7c1, 0xf70f, 0xf84f, 0xf70f, 0xf84f, 0xf80b, 0xf91b, 0xf80b, 0xf91b, +0xf93a, 0xfa17, 0xf93a, 0xfa17, 0xfa77, 0xfb1d, 0xfa77, 0xfb1d, 0xfa77, 0xfb1d, 0xfbe7, +0xfc52, 0xfbe7, 0xfc52, 0xfda0, 0xfdd1, 0xfda0, 0xfdd1, 0xff79, 0xff6f, 0xff79, 0xff6f, +0x146, 0x104, 0x146, 0x104, 0x31e, 0x2a6, 0x31e, 0x2a6, 0x493, 0x3eb, 0x493, +0x3eb, 0x493, 0x3eb, 0x5b6, 0x4e3, 0x5b6, 0x4e3, 0x6d2, 0x5da, 0x6d2, 0x5da, +0x793, 0x67e, 0x793, 0x67e, 0x82e, 0x703, 0x82e, 0x703, 0x8dd, 0x7a3, 0x8dd, +0x7a3, 0x982, 0x840, 0x982, 0x840, 0x982, 0x840, 0xa18, 0x8d4, 0xa18, 0x8d4, +0xa75, 0x936, 0xa75, 0x936, 0xa5f, 0x929, 0xa5f, 0x929, 0x9d1, 0x8a8, 0x9d1, +0x8a8, 0x927, 0x80d, 0x927, 0x80d, 0x927, 0x80d, 0x8a6, 0x79f, 0x8a6, 0x79f, +0x85f, 0x76b, 0x85f, 0x76b, 0x85c, 0x77c, 0x85c, 0x77c, 0x837, 0x76a, 0x837, +0x76a, 0x7ba, 0x6ff, 0x7ba, 0x6ff, 0x702, 0x659, 0x702, 0x659, 0x702, 0x659, +0x645, 0x5ac, 0x645, 0x5ac, 0x5ab, 0x522, 0x5ab, 0x522, 0x4fd, 0x481, 0x4fd, +0x481, 0x479, 0x40b, 0x479, 0x40b, 0x41a, 0x3ba, 0x41a, 0x3ba, 0x3b7, 0x365, +0x3b7, 0x365, 0x3b7, 0x365, 0x345, 0x302, 0x345, 0x302, 0x2a9, 0x276, 0x2a9, +0x276, 0x226, 0x206, 0x226, 0x206, 0x17a, 0x16d, 0x17a, 0x16d, 0xd4, 0xdd, +0xd4, 0xdd, 0xd4, 0xdd, 0x40, 0x60, 0x40, 0x60, 0xff5d, 0xff98, 0xff5d, +0xff98, 0xfeb6, 0xff0c, 0xfeb6, 0xff0c, 0xfe34, 0xfea9, 0xfe34, 0xfea9, 0xfd68, 0xfdfb, +0xfd68, 0xfdfb, 0xfc99, 0xfd4c, 0xfc99, 0xfd4c, 0xfc99, 0xfd4c, 0xfb9a, 0xfc6c, 0xfb9a, +0xfc6c, 0xfa21, 0xfb13, 0xfa21, 0xfb13, 0xf887, 0xf998, 0xf887, 0xf998, 0xf6d3, 0xf801, +0xf6d3, 0xf801, 0xf534, 0xf67d, 0xf534, 0xf67d, 0xf3fe, 0xf560, 0xf3fe, 0xf560, 0xf3fe, +0xf560, 0xf32e, 0xf4a4, 0xf32e, 0xf4a4, 0xf2ed, 0xf475, 0xf2ed, 0xf475, 0xf2d4, 0xf46a, +0xf2d4, 0xf46a, 0xf2c6, 0xf466, 0xf2c6, 0xf466, 0xf31e, 0xf4c4, 0xf31e, 0xf4c4, 0xf31e, +0xf4c4, 0xf3b3, 0xf55b, 0xf3b3, 0xf55b, 0xf43e, 0xf5e5, 0xf43e, 0xf5e5, 0xf47f, 0xf623, +0xf47f, 0xf623, 0xf4e2, 0xf67f, 0xf4e2, 0xf67f, 0xf52f, 0xf6c4, 0xf52f, 0xf6c4, 0xf55a, +0xf6e6, 0xf55a, 0xf6e6, 0xf55a, 0xf6e6, 0xf5c1, 0xf745, 0xf5c1, 0xf745, 0xf627, 0xf7a3, +0xf627, 0xf7a3, 0xf6dc, 0xf852, 0xf6dc, 0xf852, 0xf743, 0xf8b7, 0xf743, 0xf8b7, 0xf77c, +0xf8f0, 0xf77c, 0xf8f0, 0xf7bf, 0xf938, 0xf7bf, 0xf938, 0xf7bf, 0xf938, 0xf7bf, 0xf93f, +0xf7bf, 0xf93f, 0xf7d7, 0xf962, 0xf7d7, 0xf962, 0xf7b6, 0xf94e, 0xf7b6, 0xf94e, 0xf77d, +0xf924, 0xf77d, 0xf924, 0xf6cd, 0xf882, 0xf6cd, 0xf882, 0xf6cd, 0xf882, 0xf63e, 0xf800, +0xf63e, 0xf800, 0xf5ff, 0xf7ca, 0xf5ff, 0xf7ca, 0xf574, 0xf742, 0xf574, 0xf742, 0xf535, +0xf700, 0xf535, 0xf700, 0xf507, 0xf6c5, 0xf507, 0xf6c5, 0xf532, 0xf6db, 0xf532, 0xf6db, +0xf532, 0xf6db, 0xf588, 0xf711, 0xf588, 0xf711, 0xf61c, 0xf77a, 0xf61c, 0xf77a, 0xf722, +0xf84b, 0xf722, 0xf84b, 0xf811, 0xf8fc, 0xf811, 0xf8fc, 0xf963, 0xfa08, 0xf963, 0xfa08, +0xfb0a, 0xfb62, 0xfb0a, 0xfb62, 0xfb0a, 0xfb62, 0xfc83, 0xfc8a, 0xfc83, 0xfc8a, 0xfdc1, +0xfd72, 0xfdc1, 0xfd72, 0xff7c, 0xfed6, 0xff7c, 0xfed6, 0x183, 0x86, 0x183, 0x86, +0x34a, 0x1f6, 0x34a, 0x1f6, 0x34a, 0x1f6, 0x522, 0x37a, 0x522, 0x37a, 0x731, +0x537, 0x731, 0x537, 0x986, 0x73e, 0x986, 0x73e, 0xbdb, 0x948, 0xbdb, 0x948, +0xe37, 0xb5e, 0xe37, 0xb5e, 0x10dc, 0xdc1, 0x10dc, 0xdc1, 0x10dc, 0xdc1, 0x1362, +0x1009, 0x1362, 0x1009, 0x155e, 0x11cf, 0x155e, 0x11cf, 0x171e, 0x135e, 0x171e, 0x135e, +0x185d, 0x1475, 0x185d, 0x1475, 0x191b, 0x1513, 0x191b, 0x1513, 0x191b, 0x1513, 0x19e0, +0x15c2, 0x19e0, 0x15c2, 0x1a4f, 0x1626, 0x1a4f, 0x1626, 0x1a52, 0x1629, 0x1a52, 0x1629, +0x1a1a, 0x15fb, 0x1a1a, 0x15fb, 0x19d2, 0x15c8, 0x19d2, 0x15c8, 0x1989, 0x159e, 0x1989, +0x159e, 0x1989, 0x159e, 0x1947, 0x1584, 0x1947, 0x1584, 0x18e3, 0x154f, 0x18e3, 0x154f, +0x1816, 0x14b5, 0x1816, 0x14b5, 0x16fd, 0x13d3, 0x16fd, 0x13d3, 0x15bf, 0x12cc, 0x15bf, +0x12cc, 0x14a1, 0x11e5, 0x14a1, 0x11e5, 0x14a1, 0x11e5, 0x1391, 0x110b, 0x1391, 0x110b, +0x1282, 0x102e, 0x1282, 0x102e, 0x1180, 0xf5c, 0x1180, 0xf5c, 0x1063, 0xe6c, 0x1063, +0xe6c, 0xf04, 0xd39, 0xf04, 0xd39, 0xf04, 0xd39, 0xdba, 0xc1b, 0xdba, 0xc1b, +0xcae, 0xb3b, 0xcae, 0xb3b, 0xb77, 0xa32, 0xb77, 0xa32, 0xa61, 0x94e, 0xa61, +0x94e, 0x959, 0x87c, 0x959, 0x87c, 0x7ea, 0x747, 0x7ea, 0x747, 0x7ea, 0x747, +0x65d, 0x5f7, 0x65d, 0x5f7, 0x4b3, 0x48d, 0x4b3, 0x48d, 0x309, 0x324, 0x309, +0x324, 0x18f, 0x1eb, 0x18f, 0x1eb, 0x19, 0xb2, 0x19, 0xb2, 0xfe8b, 0xff5d, +0xfe8b, 0xff5d, 0xfe8b, 0xff5d, 0xfd1f, 0xfe23, 0xfd1f, 0xfe23, 0xfc02, 0xfd30, 0xfc02, +0xfd30, 0xfb15, 0xfc64, 0xfb15, 0xfc64, 0xfa4a, 0xfbb1, 0xfa4a, 0xfbb1, 0xf94f, 0xfac5, +0xf94f, 0xfac5, 0xf94f, 0xfac5, 0xf864, 0xf9e2, 0xf864, 0xf9e2, 0xf790, 0xf90f, 0xf790, +0xf90f, 0xf66e, 0xf7e8, 0xf66e, 0xf7e8, 0xf534, 0xf6a8, 0xf534, 0xf6a8, 0xf458, 0xf5c6, +0xf458, 0xf5c6, 0xf438, 0xf5a0, 0xf438, 0xf5a0, 0xf438, 0xf5a0, 0xf455, 0xf5b9, 0xf455, +0xf5b9, 0xf49a, 0xf5fd, 0xf49a, 0xf5fd, 0xf4d0, 0xf635, 0xf4d0, 0xf635, 0xf51e, 0xf687, +0xf51e, 0xf687, 0xf561, 0xf6d1, 0xf561, 0xf6d1, 0xf51d, 0xf694, 0xf51d, 0xf694, 0xf51d, +0xf694, 0xf522, 0xf6a1, 0xf522, 0xf6a1, 0xf52c, 0xf6b2, 0xf52c, 0xf6b2, 0xf56b, 0xf6f6, +0xf56b, 0xf6f6, 0xf5a6, 0xf734, 0xf5a6, 0xf734, 0xf5c7, 0xf754, 0xf5c7, 0xf754, 0xf5c7, +0xf754, 0xf5e1, 0xf76d, 0xf5e1, 0xf76d, 0xf5bb, 0xf744, 0xf5bb, 0xf744, 0xf5e9, 0xf76e, +0xf5e9, 0xf76e, 0xf583, 0xf707, 0xf583, 0xf707, 0xf54d, 0xf6d0, 0xf54d, 0xf6d0, 0xf54b, +0xf6d0, 0xf54b, 0xf6d0, 0xf54b, 0xf6d0, 0xf4ff, 0xf68b, 0xf4ff, 0xf68b, 0xf4d9, 0xf66f, +0xf4d9, 0xf66f, 0xf44f, 0xf5f1, 0xf44f, 0xf5f1, 0xf391, 0xf541, 0xf391, 0xf541, 0xf29f, +0xf45f, 0xf29f, 0xf45f, 0xf20b, 0xf3d9, 0xf20b, 0xf3d9, 0xf20b, 0xf3d9, 0xf17e, 0xf356, +0xf17e, 0xf356, 0xf12d, 0xf30a, 0xf12d, 0xf30a, 0xf13d, 0xf318, 0xf13d, 0xf318, 0xf162, +0xf332, 0xf162, 0xf332, 0xf231, 0xf3eb, 0xf231, 0xf3eb, 0xf231, 0xf3eb, 0xf302, 0xf49e, +0xf302, 0xf49e, 0xf412, 0xf584, 0xf412, 0xf584, 0xf53a, 0xf67b, 0xf53a, 0xf67b, 0xf662, +0xf76a, 0xf662, 0xf76a, 0xf783, 0xf84d, 0xf783, 0xf84d, 0xf8ca, 0xf953, 0xf8ca, 0xf953, +0xf8ca, 0xf953, 0xfa85, 0xfacc, 0xfa85, 0xfacc, 0xfc1d, 0xfc24, 0xfc1d, 0xfc24, 0xfd9e, +0xfd68, 0xfd9e, 0xfd68, 0xfed3, 0xfe65, 0xfed3, 0xfe65, 0xffc9, 0xff29, 0xffc9, 0xff29, +0xa7, 0xffdb, 0xa7, 0xffdb, 0xa7, 0xffdb, 0x17b, 0x8a, 0x17b, 0x8a, 0x1d9, +0xc9, 0x1d9, 0xc9, 0x258, 0x130, 0x258, 0x130, 0x2e9, 0x1ae, 0x2e9, 0x1ae, +0x321, 0x1d7, 0x321, 0x1d7, 0x321, 0x1d7, 0x37f, 0x22b, 0x37f, 0x22b, 0x363, +0x208, 0x363, 0x208, 0x396, 0x238, 0x396, 0x238, 0x3ba, 0x25e, 0x3ba, 0x25e, +0x3bd, 0x265, 0x3bd, 0x265, 0x402, 0x2b1, 0x402, 0x2b1, 0x402, 0x2b1, 0x42c, +0x2e7, 0x42c, 0x2e7, 0x477, 0x341, 0x477, 0x341, 0x41f, 0x2fb, 0x41f, 0x2fb, +0x3dd, 0x2cd, 0x3dd, 0x2cd, 0x380, 0x286, 0x380, 0x286, 0x2e6, 0x204, 0x2e6, +0x204, 0x2e6, 0x204, 0x2bd, 0x1f3, 0x2bd, 0x1f3, 0x25b, 0x1a7, 0x25b, 0x1a7, +0x228, 0x18a, 0x228, 0x18a, 0x1fb, 0x171, 0x1fb, 0x171, 0x19e, 0x127, 0x19e, +0x127, 0x19e, 0x127, 0x16f, 0x10a, 0x16f, 0x10a, 0x12d, 0xd8, 0x12d, 0xd8, +0xf6, 0xb3, 0xf6, 0xb3, 0xaa, 0x7b, 0xaa, 0x7b, 0x78, 0x60, 0x78, +0x60, 0x6d, 0x6f, 0x6d, 0x6f, 0x6d, 0x6f, 0x4d, 0x6f, 0x4d, 0x6f, +0x78, 0xc0, 0x78, 0xc0, 0x5, 0x78, 0x5, 0x78, 0xff59, 0xfffc, 0xff59, +0xfffc, 0xfe51, 0xff28, 0xfe51, 0xff28, 0xfcc0, 0xfdcd, 0xfcc0, 0xfdcd, 0xfcc0, 0xfdcd, +0xfb8e, 0xfcd0, 0xfb8e, 0xfcd0, 0xf9d0, 0xfb45, 0xf9d0, 0xfb45, 0xf88d, 0xfa2f, 0xf88d, +0xfa2f, 0xf7e3, 0xf9ad, 0xf7e3, 0xf9ad, 0xf795, 0xf97e, 0xf795, 0xf97e, 0xf795, 0xf97e, +0xf794, 0xf994, 0xf794, 0xf994, 0xf7a4, 0xf9b2, 0xf7a4, 0xf9b2, 0xf831, 0xfa44, 0xf831, +0xfa44, 0xf8a1, 0xfab3, 0xf8a1, 0xfab3, 0xf8b9, 0xfac4, 0xf8b9, 0xfac4, 0xf8c9, 0xfacb, +0xf8c9, 0xfacb, 0xf8c9, 0xfacb, 0xf8da, 0xfad2, 0xf8da, 0xfad2, 0xf7ec, 0xf9dd, 0xf7ec, +0xf9dd, 0xf741, 0xf92e, 0xf741, 0xf92e, 0xf747, 0xf935, 0xf747, 0xf935, 0xf764, 0xf958, +0xf764, 0xf958, 0xf78d, 0xf98c, 0xf78d, 0xf98c, 0xf78d, 0xf98c, 0xf7a2, 0xf9b0, 0xf7a2, +0xf9b0, 0xf834, 0xfa54, 0xf834, 0xfa54, 0xf884, 0xfab5, 0xf884, 0xfab5, 0xf8d1, 0xfb13, +0xf8d1, 0xfb13, 0xf907, 0xfb55, 0xf907, 0xfb55, 0xf907, 0xfb55, 0xf92c, 0xfb80, 0xf92c, +0xfb80, 0xf905, 0xfb57, 0xf905, 0xfb57, 0xf8f0, 0xfb39, 0xf8f0, 0xfb39, 0xf936, 0xfb6d, +0xf936, 0xfb6d, 0xf8ab, 0xfac9, 0xf8ab, 0xfac9, 0xf825, 0xfa23, 0xf825, 0xfa23, 0xf825, +0xfa23, 0xf7a6, 0xf97f, 0xf7a6, 0xf97f, 0xf78a, 0xf93b, 0xf78a, 0xf93b, 0xf77f, 0xf906, +0xf77f, 0xf906, 0xf746, 0xf8a3, 0xf746, 0xf8a3, 0xf79e, 0xf8d2, 0xf79e, 0xf8d2, 0xf79e, +0xf8d2, 0xf859, 0xf964, 0xf859, 0xf964, 0xf926, 0xfa0a, 0xf926, 0xfa0a, 0xf9ce, 0xfa88, +0xf9ce, 0xfa88, 0xfb0b, 0xfb98, 0xfb0b, 0xfb98, 0xfbfd, 0xfc59, 0xfbfd, 0xfc59, 0xfcb0, +0xfcd4, 0xfcb0, 0xfcd4, 0xfcb0, 0xfcd4, 0xfe42, 0xfe24, 0xfe42, 0xfe24, 0xffb0, 0xff46, +0xffb0, 0xff46, 0x104, 0x42, 0x104, 0x42, 0x2cb, 0x1a8, 0x2cb, 0x1a8, 0x4d2, +0x344, 0x4d2, 0x344, 0x6e6, 0x4e7, 0x6e6, 0x4e7, 0x6e6, 0x4e7, 0x8c2, 0x64e, +0x8c2, 0x64e, 0xa9c, 0x7b4, 0xa9c, 0x7b4, 0xc86, 0x931, 0xc86, 0x931, 0xec1, +0xb07, 0xec1, 0xb07, 0x108c, 0xc7b, 0x108c, 0xc7b, 0x108c, 0xc7b, 0x12c2, 0xe6b, +0x12c2, 0xe6b, 0x148d, 0x1002, 0x148d, 0x1002, 0x157b, 0x10d0, 0x157b, 0x10d0, 0x1688, +0x11d2, 0x1688, 0x11d2, 0x1777, 0x12c6, 0x1777, 0x12c6, 0x17ca, 0x132d, 0x17ca, 0x132d, +0x17ca, 0x132d, 0x16f7, 0x127a, 0x16f7, 0x127a, 0x16bd, 0x1268, 0x16bd, 0x1268, 0x15d6, +0x11ad, 0x15d6, 0x11ad, 0x14c4, 0x10c7, 0x14c4, 0x10c7, 0x13a0, 0xfcd, 0x13a0, 0xfcd, +0x12ac, 0xefe, 0x12ac, 0xefe, 0x12ac, 0xefe, 0x11ab, 0xe1f, 0x11ab, 0xe1f, 0x10c3, +0xd51, 0x10c3, 0xd51, 0x1006, 0xcac, 0x1006, 0xcac, 0xefb, 0xbb7, 0xefb, 0xbb7, +0xe8e, 0xb60, 0xe8e, 0xb60, 0xe8e, 0xb60, 0xda2, 0xa8d, 0xda2, 0xa8d, 0xd3e, +0xa49, 0xd3e, 0xa49, 0xc4d, 0x980, 0xc4d, 0x980, 0xb35, 0x89a, 0xb35, 0x89a, +0x9fe, 0x7a1, 0x9fe, 0x7a1, 0x926, 0x710, 0x926, 0x710, 0x926, 0x710, 0x889, +0x6c4, 0x889, 0x6c4, 0x7c6, 0x65a, 0x7c6, 0x65a, 0x68c, 0x57d, 0x68c, 0x57d, +0x503, 0x453, 0x503, 0x453, 0x378, 0x326, 0x378, 0x326, 0x18c, 0x194, 0x18c, +0x194, 0x18c, 0x194, 0xffc5, 0x20, 0xffc5, 0x20, 0xfdff, 0xfea4, 0xfdff, 0xfea4, +0xfcb3, 0xfd97, 0xfcb3, 0xfd97, 0xfb39, 0xfc53, 0xfb39, 0xfc53, 0xfacf, 0xfc13, 0xfacf, +0xfc13, 0xfacf, 0xfc13, 0xfa38, 0xfb9d, 0xfa38, 0xfb9d, 0xf9de, 0xfb5c, 0xf9de, 0xfb5c, +0xf947, 0xfad6, 0xf947, 0xfad6, 0xf935, 0xfad0, 0xf935, 0xfad0, 0xf911, 0xfab4, 0xf911, +0xfab4, 0xf88c, 0xfa36, 0xf88c, 0xfa36, 0xf88c, 0xfa36, 0xf84d, 0xf9fc, 0xf84d, 0xf9fc, +0xf77d, 0xf92e, 0xf77d, 0xf92e, 0xf793, 0xf947, 0xf793, 0xf947, 0xf797, 0xf94e, 0xf797, +0xf94e, 0xf888, 0xfa3e, 0xf888, 0xfa3e, 0xf91a, 0xfacf, 0xf91a, 0xfacf, 0xf91a, 0xfacf, +0xf996, 0xfb46, 0xf996, 0xfb46, 0xfa0f, 0xfbb9, 0xfa0f, 0xfbb9, 0xfa6c, 0xfc0d, 0xfa6c, +0xfc0d, 0xfa50, 0xfbe4, 0xfa50, 0xfbe4, 0xf9b5, 0xfb3c, 0xf9b5, 0xfb3c, 0xf9b5, 0xfb3c, +0xf999, 0xfb13, 0xf999, 0xfb13, 0xfa3d, 0xfbaa, 0xfa3d, 0xfbaa, 0xfa84, 0xfbe7, 0xfa84, +0xfbe7, 0xfada, 0xfc37, 0xfada, 0xfc37, 0xfb96, 0xfcf2, 0xfb96, 0xfcf2, 0xfb2d, 0xfc8e, +0xfb2d, 0xfc8e, 0xfb2d, 0xfc8e, 0xfb40, 0xfcac, 0xfb40, 0xfcac, 0xfb35, 0xfcb3, 0xfb35, +0xfcb3, 0xfb61, 0xfcf8, 0xfb61, 0xfcf8, 0xfa9e, 0xfc52, 0xfa9e, 0xfc52, 0xf9c1, 0xfb94, +0xf9c1, 0xfb94, 0xf924, 0xfb18, 0xf924, 0xfb18, 0xf924, 0xfb18, 0xf863, 0xfa76, 0xf863, +0xfa76, 0xf757, 0xf985, 0xf757, 0xf985, 0xf6f1, 0xf934, 0xf6f1, 0xf934, 0xf64b, 0xf89a, +0xf64b, 0xf89a, 0xf566, 0xf7b7, 0xf566, 0xf7b7, 0xf566, 0xf7b7, 0xf58f, 0xf7d7, 0xf58f, +0xf7d7, 0xf57c, 0xf7af, 0xf57c, 0xf7af, 0xf5f0, 0xf801, 0xf5f0, 0xf801, 0xf5da, 0xf7be, +0xf5da, 0xf7be, 0xf753, 0xf901, 0xf753, 0xf901, 0xf81f, 0xf98f, 0xf81f, 0xf98f, 0xf81f, +0xf98f, 0xf95f, 0xfa8b, 0xf95f, 0xfa8b, 0xfac0, 0xfba4, 0xfac0, 0xfba4, 0xfbeb, 0xfc85, +0xfbeb, 0xfc85, 0xfd6c, 0xfdbd, 0xfd6c, 0xfdbd, 0xff19, 0xff24, 0xff19, 0xff24, 0xee, +0xb6, 0xee, 0xb6, 0xee, 0xb6, 0x1e4, 0x16f, 0x1e4, 0x16f, 0x3da, 0x32f, +0x3da, 0x32f, 0x485, 0x3a8, 0x485, 0x3a8, 0x5a0, 0x49a, 0x5a0, 0x49a, 0x69f, +0x575, 0x69f, 0x575, 0x69f, 0x575, 0x6d8, 0x590, 0x6d8, 0x590, 0x6c4, 0x563, +0x6c4, 0x563, 0x810, 0x69b, 0x810, 0x69b, 0x823, 0x69e, 0x823, 0x69e, 0x868, +0x6d7, 0x868, 0x6d7, 0x868, 0x6cd, 0x868, 0x6cd, 0x868, 0x6cd, 0x883, 0x6e1, +0x883, 0x6e1, 0x916, 0x76f, 0x916, 0x76f, 0x861, 0x6b6, 0x861, 0x6b6, 0x932, +0x786, 0x932, 0x786, 0x897, 0x6ea, 0x897, 0x6ea, 0x952, 0x7a4, 0x952, 0x7a4, +0x952, 0x7a4, 0x927, 0x77a, 0x927, 0x77a, 0x887, 0x6db, 0x887, 0x6db, 0x816, +0x66a, 0x816, 0x66a, 0x7a8, 0x5fd, 0x7a8, 0x5fd, 0x744, 0x59a, 0x744, 0x59a, +0x744, 0x59a, 0x76f, 0x5c4, 0x76f, 0x5c4, 0x73d, 0x593, 0x73d, 0x593, 0x72a, +0x582, 0x72a, 0x582, 0x723, 0x57f, 0x723, 0x57f, 0x686, 0x4e9, 0x686, 0x4e9, +0x6d3, 0x541, 0x6d3, 0x541, 0x6d3, 0x541, 0x64e, 0x4cc, 0x64e, 0x4cc, 0x603, +0x498, 0x603, 0x498, 0x533, 0x3e6, 0x533, 0x3e6, 0x519, 0x3f4, 0x519, 0x3f4, +0x475, 0x381, 0x475, 0x381, 0x40a, 0x34f, 0x40a, 0x34f, 0x40a, 0x34f, 0x366, +0x2ed, 0x366, 0x2ed, 0x275, 0x247, 0x275, 0x247, 0xa9, 0xcb, 0xa9, 0xcb, +0xff3c, 0xffb3, 0xff3c, 0xffb3, 0xfda0, 0xfe6c, 0xfda0, 0xfe6c, 0xfda0, 0xfe6c, 0xfb19, +0xfc38, 0xfb19, 0xfc38, 0xf8c3, 0xfa32, 0xf8c3, 0xfa32, 0xf788, 0xf93f, 0xf788, 0xf93f, +0xf5e0, 0xf7d7, 0xf5e0, 0xf7d7, 0xf4e6, 0xf70e, 0xf4e6, 0xf70e, 0xf501, 0xf74f, 0xf501, +0xf74f, 0xf501, 0xf74f, 0xf4a9, 0xf70f, 0xf4a9, 0xf70f, 0xf509, 0xf77b, 0xf509, 0xf77b, +0xf4a2, 0xf712, 0xf4a2, 0xf712, 0xf441, 0xf6a6, 0xf441, 0xf6a6, 0xf2cf, 0xf521, 0xf2cf, +0xf521, 0xf2cf, 0xf521, 0xf26e, 0xf4a7, 0xf26e, 0xf4a7, 0xf190, 0xf3af, 0xf190, 0xf3af, +0xf1e5, 0xf3ec, 0xf1e5, 0xf3ec, 0xf128, 0xf31a, 0xf128, 0xf31a, 0xf199, 0xf37c, 0xf199, +0xf37c, 0xf1d4, 0xf3b1, 0xf1d4, 0xf3b1, 0xf1d4, 0xf3b1, 0xf245, 0xf423, 0xf245, 0xf423, +0xf39a, 0xf581, 0xf39a, 0xf581, 0xf317, 0xf510, 0xf317, 0xf510, 0xf289, 0xf499, 0xf289, +0xf499, 0xf19d, 0xf3c7, 0xf19d, 0xf3c7, 0xf04a, 0xf290, 0xf04a, 0xf290, 0xf04a, 0xf290, +0xef3a, 0xf19b, 0xef3a, 0xf19b, 0xeec9, 0xf141, 0xeec9, 0xf141, 0xeeb6, 0xf13f, 0xeeb6, +0xf13f, 0xeea9, 0xf13d, 0xeea9, 0xf13d, 0xeca5, 0xef3b, 0xeca5, 0xef3b, 0xeca5, 0xef3b, +0xede2, 0xf070, 0xede2, 0xf070, 0xea20, 0xec9d, 0xea20, 0xec9d, 0xeca4, 0xef07, 0xeca4, +0xef07, 0xef2c, 0xf16a, 0xef2c, 0xf16a, 0xee12, 0xf023, 0xee12, 0xf023, 0xf04f, 0xf22a, +0xf04f, 0xf22a, 0xf04f, 0xf22a, 0xf1d7, 0xf374, 0xf1d7, 0xf374, 0xf397, 0xf4ed, 0xf397, +0xf4ed, 0xf371, 0xf478, 0xf371, 0xf478, 0xf7d2, 0xf881, 0xf7d2, 0xf881, 0xfb3c, 0xfb8a, +0xfb3c, 0xfb8a, 0xfb70, 0xfb53, 0xfb70, 0xfb53, 0xfb70, 0xfb53, 0xfee3, 0xfe54, 0xfee3, +0xfe54, 0xd1, 0xffc8, 0xd1, 0xffc8, 0x160, 0xffd7, 0x160, 0xffd7, 0x5e8, 0x3db, +0x5e8, 0x3db, 0x67a, 0x3e8, 0x67a, 0x3e8, 0x67a, 0x3e8, 0xca2, 0x98d, 0xca2, +0x98d, 0xf20, 0xb8e, 0xf20, 0xb8e, 0x137a, 0xf75, 0x137a, 0xf75, 0x15eb, 0x117f, +0x15eb, 0x117f, 0x19a6, 0x14e4, 0x19a6, 0x14e4, 0x1f6e, 0x1a6a, 0x1f6e, 0x1a6a, 0x1f6e, +0x1a6a, 0x1c89, 0x1757, 0x1c89, 0x1757, 0x20d0, 0x1b86, 0x20d0, 0x1b86, 0x2649, 0x20fd, +0x2649, 0x20fd, 0x2293, 0x1d58, 0x2293, 0x1d58, 0x2202, 0x1cea, 0x2202, 0x1cea, 0x28ea, +0x2403, 0x28ea, 0x2403, 0x28ea, 0x2403, 0x2334, 0x1e8a, 0x2334, 0x1e8a, 0x2416, 0x1faf, +0x2416, 0x1faf, 0x2168, 0x1d48, 0x2168, 0x1d48, 0x205c, 0x1c83, 0x205c, 0x1c83, 0x1f13, +0x1b7d, 0x1f13, 0x1b7d, 0x1f13, 0x1b7d, 0x1a8d, 0x1735, 0x1a8d, 0x1735, 0x1c62, 0x1942, +0x1c62, 0x1942, 0x1b94, 0x18a6, 0x1b94, 0x18a6, 0x1801, 0x153f, 0x1801, 0x153f, 0x1804, +0x156a, 0x1804, 0x156a, 0x16ba, 0x1446, 0x16ba, 0x1446, 0x16ba, 0x1446, 0x13da, 0x118c, +0x13da, 0x118c, 0x17f7, 0x15d0, 0x17f7, 0x15d0, 0x1576, 0x137b, 0x1576, 0x137b, 0x153d, +0x1373, 0x153d, 0x1373, 0xd7c, 0xbe7, 0xd7c, 0xbe7, 0x1408, 0x12b0, 0x1408, 0x12b0, +0x1408, 0x12b0, 0x1295, 0x117f, 0x1295, 0x117f, 0xc16, 0xb46, 0xc16, 0xb46, 0x12e9, +0x1262, 0x12e9, 0x1262, 0xd61, 0xd23, 0xd61, 0xd23, 0x736, 0x740, 0x736, 0x740, +0x736, 0x740, 0x662, 0x6b0, 0x662, 0x6b0, 0x2ba, 0x347, 0x2ba, 0x347, 0xfdb9, +0xfe80, 0xfdb9, 0xfe80, 0xfe55, 0xff4f, 0xfe55, 0xff4f, 0xfbaf, 0xfcd4, 0xfbaf, 0xfcd4, +0xfb5d, 0xfca8, 0xfb5d, 0xfca8, 0xfb5d, 0xfca8, 0xf9b3, 0xfb1c, 0xf9b3, 0xfb1c, 0xfae7, +0xfc69, 0xfae7, 0xfc69, 0xf6c4, 0xf859, 0xf6c4, 0xf859, 0xf63d, 0xf7e2, 0xf63d, 0xf7e2, +0xf3f2, 0xf5a4, 0xf3f2, 0xf5a4, 0xf0ed, 0xf2a8, 0xf0ed, 0xf2a8, 0xf0ed, 0xf2a8, 0xf093, +0xf254, 0xf093, 0xf254, 0xefc9, 0xf18e, 0xefc9, 0xf18e, 0xf072, 0xf236, 0xf072, 0xf236, +0xed7d, 0xef3d, 0xed7d, 0xef3d, 0xf001, 0xf1b9, 0xf001, 0xf1b9, 0xf001, 0xf1b9, 0xefc6, +0xf171, 0xefc6, 0xf171, 0xecb5, 0xee4f, 0xecb5, 0xee4f, 0xeb1d, 0xeca2, 0xeb1d, 0xeca2, +0xeb79, 0xece6, 0xeb79, 0xece6, 0xe87d, 0xe9d1, 0xe87d, 0xe9d1, 0xe9cc, 0xeb05, 0xe9cc, +0xeb05, 0xe9cc, 0xeb05, 0xe9af, 0xead1, 0xe9af, 0xead1, 0xec57, 0xed66, 0xec57, 0xed66, +0xec7e, 0xed7f, 0xec7e, 0xed7f, 0xee26, 0xef21, 0xee26, 0xef21, 0xecf8, 0xedf6, 0xecf8, +0xedf6, 0xec45, 0xed51, 0xec45, 0xed51, 0xec45, 0xed51, 0xefd0, 0xf0f3, 0xefd0, 0xf0f3, +0xee6d, 0xefb0, 0xee6d, 0xefb0, 0xeecc, 0xf037, 0xeecc, 0xf037, 0xeb4c, 0xece3, 0xeb4c, +0xece3, 0xeda3, 0xef68, 0xeda3, 0xef68, 0xeda3, 0xef68, 0xed4e, 0xef40, 0xed4e, 0xef40, +0xeea8, 0xf0c4, 0xeea8, 0xf0c4, 0xee39, 0xf078, 0xee39, 0xf078, 0xecff, 0xef56, 0xecff, +0xef56, 0xed90, 0xeff3, 0xed90, 0xeff3, 0xed29, 0xef8b, 0xed29, 0xef8b, 0xed29, 0xef8b, +0xedfc, 0xf04f, 0xedfc, 0xf04f, 0xf124, 0xf35a, 0xf124, 0xf35a, 0xf260, 0xf46e, 0xf260, +0xf46e, 0xf551, 0xf72c, 0xf551, 0xf72c, 0xf617, 0xf7b5, 0xf617, 0xf7b5, 0xf8ac, 0xfa09, +0xf8ac, 0xfa09, 0xf8ac, 0xfa09, 0xfc72, 0xfd8a, 0xfc72, 0xfd8a, 0xf96e, 0xfa40, 0xf96e, +0xfa40, 0xfca1, 0xfd30, 0xfca1, 0xfd30, 0xfba3, 0xfbf1, 0xfba3, 0xfbf1, 0x164, 0x177, +0x164, 0x177, 0x164, 0x177, 0x229, 0x206, 0x229, 0x206, 0x390, 0x33e, 0x390, +0x33e, 0x3d6, 0x35b, 0x3d6, 0x35b, 0x2a5, 0x206, 0x2a5, 0x206, 0x4b1, 0x3f4, +0x4b1, 0x3f4, 0x1b1, 0xdb, 0x1b1, 0xdb, 0x1b1, 0xdb, 0x200, 0x114, 0x200, +0x114, 0x21c, 0x11e, 0x21c, 0x11e, 0x275, 0x168, 0x275, 0x168, 0x22e, 0x115, +0x22e, 0x115, 0x44f, 0x32c, 0x44f, 0x32c, 0x424, 0x2fc, 0x424, 0x2fc, 0x424, +0x2fc, 0x5ef, 0x4c4, 0x5ef, 0x4c4, 0x485, 0x35a, 0x485, 0x35a, 0x698, 0x572, +0x698, 0x572, 0x60b, 0x4ec, 0x60b, 0x4ec, 0x7cb, 0x6b7, 0x7cb, 0x6b7, 0x7cb, +0x6b7, 0x803, 0x6fd, 0x803, 0x6fd, 0x707, 0x611, 0x707, 0x611, 0x99d, 0x8b9, +0x99d, 0x8b9, 0x78f, 0x6bc, 0x78f, 0x6bc, 0x983, 0x8c2, 0x983, 0x8c2, 0x681, +0x5d2, 0x681, 0x5d2, 0x681, 0x5d2, 0x739, 0x69b, 0x739, 0x69b, 0x5f1, 0x563, +0x5f1, 0x563, 0x567, 0x4e9, 0x567, 0x4e9, 0x4ea, 0x47c, 0x4ea, 0x47c, 0x433, +0x3d6, 0x433, 0x3d6, 0x433, 0x3d6, 0x524, 0x4da, 0x524, 0x4da, 0x519, 0x4e5, +0x519, 0x4e5, 0x538, 0x51e, 0x538, 0x51e, 0x5ad, 0x5b1, 0x5ad, 0x5b1, 0x48c, +0x4b4, 0x48c, 0x4b4, 0x52d, 0x57c, 0x52d, 0x57c, 0x52d, 0x57c, 0x487, 0x504, +0x487, 0x504, 0x3a7, 0x455, 0x3a7, 0x455, 0x41b, 0x4fd, 0x41b, 0x4fd, 0xffa4, +0xbb, 0xffa4, 0xbb, 0xa5, 0x1f0, 0xa5, 0x1f0, 0xfd5e, 0xfedb, 0xfd5e, 0xfedb, +0xfd5e, 0xfedb, 0xfeb9, 0x65, 0xfeb9, 0x65, 0xfd16, 0xfeeb, 0xfd16, 0xfeeb, 0xfcb8, +0xfeaf, 0xfcb8, 0xfeaf, 0xfda1, 0xffb2, 0xfda1, 0xffb2, 0xfbe0, 0xfe05, 0xfbe0, 0xfe05, +0xfbe0, 0xfe05, 0xfdd3, 0x3, 0xfdd3, 0x3, 0xfc91, 0xfec4, 0xfc91, 0xfec4, 0xfcc9, +0xfefa, 0xfcc9, 0xfefa, 0xfc33, 0xfe5e, 0xfc33, 0xfe5e, 0xfb47, 0xfd66, 0xfb47, 0xfd66, +0xfc67, 0xfe79, 0xfc67, 0xfe79, 0xfc67, 0xfe79, 0xfd18, 0xff1d, 0xfd18, 0xff1d, 0xfc24, +0xfe1c, 0xfc24, 0xfe1c, 0xfd58, 0xff45, 0xfd58, 0xff45, 0xfaf4, 0xfcd8, 0xfaf4, 0xfcd8, +0xfde3, 0xffc1, 0xfde3, 0xffc1, 0xfcbd, 0xfe98, 0xfcbd, 0xfe98, 0xfcbd, 0xfe98, 0xfdf1, +0xffcb, 0xfdf1, 0xffcb, 0xfc13, 0xfdf0, 0xfc13, 0xfdf0, 0xf927, 0xfb09, 0xf927, 0xfb09, +0xfabd, 0xfca4, 0xfabd, 0xfca4, 0xf756, 0xf942, 0xf756, 0xf942, 0xf756, 0xf942, 0xf914, +0xfb04, 0xf914, 0xfb04, 0xf6c1, 0xf8b2, 0xf6c1, 0xf8b2, 0xf676, 0xf865, 0xf676, 0xf865, +0xf656, 0xf83e, 0xf656, 0xf83e, 0xf55f, 0xf73a, 0xf55f, 0xf73a, 0xf686, 0xf84e, 0xf686, +0xf84e, 0xf686, 0xf84e, 0xf5d5, 0xf781, 0xf5d5, 0xf781, 0xf464, 0xf5ed, 0xf464, 0xf5ed, +0xf533, 0xf68f, 0xf533, 0xf68f, 0xf31a, 0xf441, 0xf31a, 0xf441, 0xf649, 0xf730, 0xf649, +0xf730, 0xf5bd, 0xf65a, 0xf5bd, 0xf65a, 0xf5bd, 0xf65a, 0xf6ad, 0xf6f9, 0xf6ad, 0xf6f9, +0xf945, 0xf936, 0xf945, 0xf936, 0xf92b, 0xf8ba, 0xf92b, 0xf8ba, 0xfe61, 0xfd87, 0xfe61, +0xfd87, 0xfc68, 0xfb22, 0xfc68, 0xfb22, 0xfc68, 0xfb22, 0xfee7, 0xfd31, 0xfee7, 0xfd31, +0xff97, 0xfd70, 0xff97, 0xfd70, 0x132, 0xfe9b, 0x132, 0xfe9b, 0x4ab, 0x1a7, 0x4ab, +0x1a7, 0x5ee, 0x282, 0x5ee, 0x282, 0xa36, 0x669, 0xa36, 0x669, 0xa36, 0x669, +0xd3d, 0x917, 0xd3d, 0x917, 0xfd4, 0xb60, 0xfd4, 0xb60, 0x1489, 0xfd2, 0x1489, +0xfd2, 0x14de, 0xff1, 0x14de, 0xff1, 0x1a40, 0x1529, 0x1a40, 0x1529, 0x1d07, 0x17d4, +0x1d07, 0x17d4, 0x1d07, 0x17d4, 0x1c5d, 0x171a, 0x1c5d, 0x171a, 0x1db9, 0x1873, 0x1db9, +0x1873, 0x1bf2, 0x16b5, 0x1bf2, 0x16b5, 0x1ef3, 0x19ca, 0x1ef3, 0x19ca, 0x1bc5, 0x16ba, +0x1bc5, 0x16ba, 0x1bc5, 0x16ba, 0x1d1e, 0x183a, 0x1d1e, 0x183a, 0x1bf4, 0x173e, 0x1bf4, +0x173e, 0x19e7, 0x1565, 0x19e7, 0x1565, 0x1bdc, 0x1794, 0x1bdc, 0x1794, 0x192f, 0x1523, +0x192f, 0x1523, 0x178e, 0x13c2, 0x178e, 0x13c2, 0x178e, 0x13c2, 0x16d2, 0x1348, 0x16d2, +0x1348, 0x15ca, 0x1284, 0x15ca, 0x1284, 0x149f, 0x119e, 0x149f, 0x119e, 0x126b, 0xfae, +0x126b, 0xfae, 0x1297, 0x1020, 0x1297, 0x1020, 0xf8e, 0xd5d, 0xf8e, 0xd5d, 0xf8e, +0xd5d, 0xc38, 0xa4c, 0xc38, 0xa4c, 0xc66, 0xac0, 0xc66, 0xac0, 0x762, 0x602, +0x762, 0x602, 0x8fd, 0x7e5, 0x8fd, 0x7e5, 0x7e5, 0x714, 0x7e5, 0x714, 0x7e5, +0x714, 0x722, 0x699, 0x722, 0x699, 0x462, 0x421, 0x462, 0x421, 0x168, 0x16f, +0x168, 0x16f, 0x38, 0x86, 0x38, 0x86, 0xfc5c, 0xfcf0, 0xfc5c, 0xfcf0, 0xfd72, +0xfe4a, 0xfd72, 0xfe4a, 0xfd72, 0xfe4a, 0xfac6, 0xfbdf, 0xfac6, 0xfbdf, 0xf9a3, 0xfafa, +0xf9a3, 0xfafa, 0xfb12, 0xfca1, 0xfb12, 0xfca1, 0xfcac, 0xfe6e, 0xfcac, 0xfe6e, 0xfdd4, +0xffc3, 0xfdd4, 0xffc3, 0xfbf0, 0xfe04, 0xfbf0, 0xfe04, 0xfbf0, 0xfe04, 0xf84a, 0xfa7b, +0xf84a, 0xfa7b, 0xf789, 0xf9ce, 0xf789, 0xf9ce, 0xf709, 0xf95a, 0xf709, 0xf95a, 0xf8e0, +0xfb33, 0xf8e0, 0xfb33, 0xf777, 0xf9c4, 0xf777, 0xf9c4, 0xf777, 0xf9c4, 0xf677, 0xf8b6, +0xf677, 0xf8b6, 0xf642, 0xf86c, 0xf642, 0xf86c, 0xf680, 0xf890, 0xf680, 0xf890, 0xfa8f, +0xfc80, 0xfa8f, 0xfc80, 0xf705, 0xf8d6, 0xf705, 0xf8d6, 0xf6bc, 0xf86b, 0xf6bc, 0xf86b, +0xf6bc, 0xf86b, 0xf580, 0xf70e, 0xf580, 0xf70e, 0xf567, 0xf6d7, 0xf567, 0xf6d7, 0xf518, +0xf66d, 0xf518, 0xf66d, 0xf3e9, 0xf52a, 0xf3e9, 0xf52a, 0xf44e, 0xf582, 0xf44e, 0xf582, +0xf21d, 0xf34a, 0xf21d, 0xf34a, 0xf21d, 0xf34a, 0xf5fb, 0xf72b, 0xf5fb, 0xf72b, 0xf5e4, +0xf71e, 0xf5e4, 0xf71e, 0xf33a, 0xf485, 0xf33a, 0xf485, 0xf482, 0xf5e6, 0xf482, 0xf5e6, +0xf3f9, 0xf57b, 0xf3f9, 0xf57b, 0xf3f9, 0xf57b, 0xf355, 0xf4f8, 0xf355, 0xf4f8, 0xf38a, +0xf550, 0xf38a, 0xf550, 0xf244, 0xf42e, 0xf244, 0xf42e, 0xf1f7, 0xf403, 0xf1f7, 0xf403, +0xf250, 0xf47a, 0xf250, 0xf47a, 0xf789, 0xf9ca, 0xf789, 0xf9ca, 0xf789, 0xf9ca, 0xf76d, +0xf9be, 0xf76d, 0xf9be, 0xf622, 0xf87a, 0xf622, 0xf87a, 0xf9ee, 0xfc44, 0xf9ee, 0xfc44, +0xf87d, 0xfac5, 0xf87d, 0xfac5, 0xfbf3, 0xfe23, 0xfbf3, 0xfe23, 0xfc58, 0xfe65, 0xfc58, +0xfe65, 0xfc58, 0xfe65, 0xfc0d, 0xfded, 0xfc0d, 0xfded, 0xfc37, 0xfde1, 0xfc37, 0xfde1, +0xfdf6, 0xff63, 0xfdf6, 0xff63, 0x299, 0x3c4, 0x299, 0x3c4, 0x160, 0x245, 0x160, +0x245, 0x160, 0x245, 0x2ce, 0x36b, 0x2ce, 0x36b, 0x1c9, 0x220, 0x1c9, 0x220, +0x2a5, 0x2b8, 0x2a5, 0x2b8, 0x699, 0x66d, 0x699, 0x66d, 0x6c1, 0x65d, 0x6c1, +0x65d, 0x90b, 0x877, 0x90b, 0x877, 0x90b, 0x877, 0x840, 0x786, 0x840, 0x786, +0x7e4, 0x70d, 0x7e4, 0x70d, 0xa4b, 0x961, 0xa4b, 0x961, 0x801, 0x70e, 0x801, +0x70e, 0x952, 0x860, 0x952, 0x860, 0x952, 0x860, 0x77a, 0x691, 0x77a, 0x691, +0x758, 0x67f, 0x758, 0x67f, 0x981, 0x8bd, 0x981, 0x8bd, 0x78a, 0x6df, 0x78a, +0x6df, 0xafc, 0xa6c, 0xafc, 0xa6c, 0x803, 0x78f, 0x803, 0x78f, 0x803, 0x78f, +0x735, 0x6db, 0x735, 0x6db, 0x707, 0x6c4, 0x707, 0x6c4, 0x360, 0x330, 0x360, +0x330, 0x392, 0x36f, 0x392, 0x36f, 0x1b3, 0x19a, 0x1b3, 0x19a, 0x132, 0x11b, +0x132, 0x11b, 0x132, 0x11b, 0x77, 0x5e, 0x77, 0x5e, 0x2cb, 0x2aa, 0x2cb, +0x2aa, 0x3ff, 0x3d3, 0x3ff, 0x3d3, 0x1b1, 0x177, 0x1b1, 0x177, 0x33f, 0x2f6, +0x33f, 0x2f6, 0x33f, 0x2f6, 0x49a, 0x441, 0x49a, 0x441, 0x3a7, 0x340, 0x3a7, +0x340, 0x321, 0x2b0, 0x321, 0x2b0, 0x377, 0x2ff, 0x377, 0x2ff, 0x304, 0x28d, +0x304, 0x28d, 0x19f, 0x12e, 0x19f, 0x12e, 0x19f, 0x12e, 0x3ee, 0x38c, 0x3ee, +0x38c, 0x384, 0x338, 0x384, 0x338, 0xff8a, 0xff5b, 0xff8a, 0xff5b, 0x346, 0x33d, +0x346, 0x33d, 0x29e, 0x2c1, 0x29e, 0x2c1, 0x21a, 0x26f, 0x21a, 0x26f, 0x21a, +0x26f, 0x1b0, 0x23c, 0x1b0, 0x23c, 0xfc10, 0xfcd4, 0xfc10, 0xfcd4, 0xfcbd, 0xfdbc, +0xfcbd, 0xfdbc, 0xfb34, 0xfc6c, 0xfb34, 0xfc6c, 0xfb94, 0xfd02, 0xfb94, 0xfd02, 0xfb94, +0xfd02, 0xfa4c, 0xfbed, 0xfa4c, 0xfbed, 0xf7a3, 0xf972, 0xf7a3, 0xf972, 0xf85b, 0xfa52, +0xf85b, 0xfa52, 0xf6b8, 0xf8cf, 0xf6b8, 0xf8cf, 0xf891, 0xfac0, 0xf891, 0xfac0, 0xf94f, +0xfb8f, 0xf94f, 0xfb8f, 0xf94f, 0xfb8f, 0xf84f, 0xfa98, 0xf84f, 0xfa98, 0xf903, 0xfb4f, +0xf903, 0xfb4f, 0xfa19, 0xfc61, 0xfa19, 0xfc61, 0xfbb5, 0xfdf6, 0xfbb5, 0xfdf6, 0xfbdf, +0xfe15, 0xfbdf, 0xfe15, 0xfa2b, 0xfc54, 0xfa2b, 0xfc54, 0xfa2b, 0xfc54, 0xf917, 0xfb34, +0xf917, 0xfb34, 0xfab5, 0xfcc6, 0xfab5, 0xfcc6, 0xfc17, 0xfe20, 0xfc17, 0xfe20, 0xfa5d, +0xfc61, 0xfa5d, 0xfc61, 0xfacf, 0xfcd3, 0xfacf, 0xfcd3, 0xfacf, 0xfcd3, 0xf83e, 0xfa47, +0xf83e, 0xfa47, 0xf8a0, 0xfab3, 0xf8a0, 0xfab3, 0xfa6b, 0xfc8d, 0xfa6b, 0xfc8d, 0xf735, +0xf96a, 0xf735, 0xf96a, 0xf7cf, 0xfa1a, 0xf7cf, 0xfa1a, 0xf58f, 0xf7f2, 0xf58f, 0xf7f2, +0xf58f, 0xf7f2, 0xf63e, 0xf8b9, 0xf63e, 0xf8b9, 0xf4d2, 0xf762, 0xf4d2, 0xf762, 0xf153, +0xf3f4, 0xf153, 0xf3f4, 0xf0f8, 0xf3a4, 0xf0f8, 0xf3a4, 0xeffe, 0xf2ac, 0xeffe, 0xf2ac, +0xf0d5, 0xf37c, 0xf0d5, 0xf37c, 0xf0d5, 0xf37c, 0xf093, 0xf328, 0xf093, 0xf328, 0xef0a, +0xf17f, 0xef0a, 0xf17f, 0xeebb, 0xf102, 0xeebb, 0xf102, 0xf175, 0xf382, 0xf175, 0xf382, +0xf1f6, 0xf3bc, 0xf1f6, 0xf3bc, 0xf1f6, 0xf3bc, 0xf460, 0xf5d1, 0xf460, 0xf5d1, 0xf6e3, +0xf7f5, 0xf6e3, 0xf7f5, 0xf90c, 0xf9b5, 0xf90c, 0xf9b5, 0xfb78, 0xfbb2, 0xfb78, 0xfbb2, +0xfbbc, 0xfb82, 0xfbbc, 0xfb82, 0xfcc0, 0xfc10, 0xfcc0, 0xfc10, 0xfcc0, 0xfc10, 0xfea4, +0xfd7f, 0xfea4, 0xfd7f, 0x157, 0xffc0, 0x157, 0xffc0, 0x392, 0x190, 0x392, 0x190, +0x690, 0x42c, 0x690, 0x42c, 0x9d3, 0x717, 0x9d3, 0x717, 0xeed, 0xbe6, 0xeed, +0xbe6, 0xeed, 0xbe6, 0x1045, 0xd00, 0x1045, 0xd00, 0x1109, 0xd94, 0x1109, 0xd94, +0x136f, 0xfd8, 0x136f, 0xfd8, 0x142c, 0x1080, 0x142c, 0x1080, 0x16b4, 0x12ff, 0x16b4, +0x12ff, 0x16b4, 0x12ff, 0x1719, 0x1367, 0x1719, 0x1367, 0x168c, 0x12e4, 0x168c, 0x12e4, +0x17bc, 0x1426, 0x17bc, 0x1426, 0x1927, 0x15a6, 0x1927, 0x15a6, 0x199b, 0x1632, 0x199b, +0x1632, 0x1842, 0x14f0, 0x1842, 0x14f0, 0x1842, 0x14f0, 0x17ad, 0x146f, 0x17ad, 0x146f, +0x19ea, 0x16be, 0x19ea, 0x16be, 0x19af, 0x168f, 0x19af, 0x168f, 0x18bb, 0x15a0, 0x18bb, +0x15a0, 0x17dd, 0x14c0, 0x17dd, 0x14c0, 0x1648, 0x1324, 0x1648, 0x1324, 0x1648, 0x1324, +0x16e5, 0x13b4, 0x16e5, 0x13b4, 0x16ed, 0x13ac, 0x16ed, 0x13ac, 0x1683, 0x132e, 0x1683, +0x132e, 0x15e1, 0x1279, 0x15e1, 0x1279, 0x155c, 0x11e2, 0x155c, 0x11e2, 0x155c, 0x11e2, +0x13a6, 0x101e, 0x13a6, 0x101e, 0x13dd, 0x104d, 0x13dd, 0x104d, 0x13e6, 0x1056, 0x13e6, +0x1056, 0x12b0, 0xf2c, 0x12b0, 0xf2c, 0x12aa, 0xf3c, 0x12aa, 0xf3c, 0x1089, 0xd3e, +0x1089, 0xd3e, 0x1089, 0xd3e, 0x1052, 0xd36, 0x1052, 0xd36, 0xe95, 0xbb7, 0xe95, +0xbb7, 0xcf9, 0xa64, 0xcf9, 0xa64, 0xad2, 0x892, 0xad2, 0x892, 0x7df, 0x5fc, +0x7df, 0x5fc, 0x80f, 0x690, 0x80f, 0x690, 0x80f, 0x690, 0x6c3, 0x5ae, 0x6c3, +0x5ae, 0x635, 0x58b, 0x635, 0x58b, 0x413, 0x3d4, 0x413, 0x3d4, 0x217, 0x23f, +0x217, 0x23f, 0xcc, 0x154, 0xcc, 0x154, 0xcc, 0x154, 0xff16, 0xfff7, 0xff16, +0xfff7, 0xfde1, 0xff0f, 0xfde1, 0xff0f, 0xfb58, 0xfcc8, 0xfb58, 0xfcc8, 0xfb4b, 0xfcf0, +0xfb4b, 0xfcf0, 0xfb8d, 0xfd5a, 0xfb8d, 0xfd5a, 0xf954, 0xfb3d, 0xf954, 0xfb3d, 0xf954, +0xfb3d, 0xf844, 0xfa3b, 0xf844, 0xfa3b, 0xf8df, 0xfadb, 0xf8df, 0xfadb, 0xf7df, 0xf9d6, +0xf7df, 0xf9d6, 0xf6d8, 0xf8c4, 0xf6d8, 0xf8c4, 0xf6bb, 0xf897, 0xf6bb, 0xf897, 0xf481, +0xf64a, 0xf481, 0xf64a, 0xf481, 0xf64a, 0xf23d, 0xf3f3, 0xf23d, 0xf3f3, 0xf3bd, 0xf563, +0xf3bd, 0xf563, 0xf3d3, 0xf56c, 0xf3d3, 0xf56c, 0xf19d, 0xf32f, 0xf19d, 0xf32f, 0xf360, +0xf4f0, 0xf360, 0xf4f0, 0xf360, 0xf4f0, 0xf506, 0xf69d, 0xf506, 0xf69d, 0xf3d2, 0xf576, +0xf3d2, 0xf576, 0xf339, 0xf4f0, 0xf339, 0xf4f0, 0xf1cc, 0xf39c, 0xf1cc, 0xf39c, 0xf0fe, +0xf2eb, 0xf0fe, 0xf2eb, 0xf146, 0xf351, 0xf146, 0xf351, 0xf146, 0xf351, 0xef8b, 0xf1b5, +0xef8b, 0xf1b5, 0xedbd, 0xf003, 0xedbd, 0xf003, 0xeccf, 0xef2d, 0xeccf, 0xef2d, 0xee80, +0xf0f0, 0xee80, 0xf0f0, 0xede9, 0xf060, 0xede9, 0xf060, 0xede9, 0xf060, 0xeb22, 0xed97, +0xeb22, 0xed97, 0xea21, 0xec87, 0xea21, 0xec87, 0xea33, 0xec7e, 0xea33, 0xec7e, 0xeba4, +0xedc9, 0xeba4, 0xedc9, 0xeaab, 0xec9b, 0xeaab, 0xec9b, 0xeacb, 0xec7d, 0xeacb, 0xec7d, +0xeacb, 0xec7d, 0xeb96, 0xecfe, 0xeb96, 0xecfe, 0xeedd, 0xeff4, 0xeedd, 0xeff4, 0xf19e, +0xf25e, 0xf19e, 0xf25e, 0xf217, 0xf27c, 0xf217, 0xf27c, 0xf2c8, 0xf2d3, 0xf2c8, 0xf2d3, +0xf3a9, 0xf35b, 0xf3a9, 0xf35b, 0xf3a9, 0xf35b, 0xf8e3, 0xf842, 0xf8e3, 0xf842, 0xfa02, +0xf914, 0xfa02, 0xf914, 0xfbb1, 0xfa81, 0xfbb1, 0xfa81, 0xfd87, 0xfc1f, 0xfd87, 0xfc1f, +0xffa1, 0xfe0e, 0xffa1, 0xfe0e, 0xffa1, 0xfe0e, 0x17c, 0xffca, 0x17c, 0xffca, 0xff6f, +0xfdac, 0xff6f, 0xfdac, 0x17b, 0xffb3, 0x17b, 0xffb3, 0x1c, 0xfe59, 0x1c, 0xfe59, +0x52, 0xfe9f, 0x52, 0xfe9f, 0x123, 0xff89, 0x123, 0xff89, 0x123, 0xff89, 0x2d, +0xfeb1, 0x2d, 0xfeb1, 0x304, 0x1a8, 0x304, 0x1a8, 0x36d, 0x234, 0x36d, 0x234, +0x29f, 0x187, 0x29f, 0x187, 0x39e, 0x2a5, 0x39e, 0x2a5, 0x3d6, 0x2f6, 0x3d6, +0x2f6, 0x3d6, 0x2f6, 0x48c, 0x3c0, 0x48c, 0x3c0, 0x608, 0x548, 0x608, 0x548, +0x4cc, 0x411, 0x4cc, 0x411, 0x64a, 0x58d, 0x64a, 0x58d, 0x85f, 0x799, 0x85f, +0x799, 0x85f, 0x799, 0x8fc, 0x828, 0x8fc, 0x828, 0x783, 0x69e, 0x783, 0x69e, +0x6d4, 0x5dc, 0x6d4, 0x5dc, 0x970, 0x867, 0x970, 0x867, 0x803, 0x6eb, 0x803, +0x6eb, 0x7c1, 0x6a0, 0x7c1, 0x6a0, 0x7c1, 0x6a0, 0x8d8, 0x7b4, 0x8d8, 0x7b4, +0x9b8, 0x89b, 0x9b8, 0x89b, 0xa43, 0x938, 0xa43, 0x938, 0x930, 0x842, 0x930, +0x842, 0x917, 0x853, 0x917, 0x853, 0x8e6, 0x858, 0x8e6, 0x858, 0x8e6, 0x858, +0x8cc, 0x880, 0x8cc, 0x880, 0x882, 0x882, 0x882, 0x882, 0x7e0, 0x834, 0x7e0, +0x834, 0x616, 0x6c6, 0x616, 0x6c6, 0x4da, 0x5e9, 0x4da, 0x5e9, 0x4da, 0x5e9, +0x438, 0x5a8, 0x438, 0x5a8, 0x57, 0x226, 0x57, 0x226, 0xfec0, 0xea, 0xfec0, +0xea, 0xff2d, 0x1ac, 0xff2d, 0x1ac, 0xfd3e, 0x9, 0xfd3e, 0x9, 0xfcd5, 0xffe0, +0xfcd5, 0xffe0, 0xfcd5, 0xffe0, 0xfb04, 0xfe43, 0xfb04, 0xfe43, 0xfa82, 0xfde7, 0xfa82, +0xfde7, 0xfbf9, 0xff76, 0xfbf9, 0xff76, 0xfafa, 0xfe81, 0xfafa, 0xfe81, 0xf93f, 0xfcc4, +0xf93f, 0xfcc4, 0xf8f2, 0xfc68, 0xf8f2, 0xfc68, 0xf8f2, 0xfc68, 0xfbd9, 0xff36, 0xfbd9, +0xff36, 0xfcc6, 0x3, 0xfcc6, 0x3, 0xfbf6, 0xff0b, 0xfbf6, 0xff0b, 0xfa9c, 0xfd87, +0xfa9c, 0xfd87, 0xfa1a, 0xfcd9, 0xfa1a, 0xfcd9, 0xfa1a, 0xfcd9, 0xfb56, 0xfdea, 0xfb56, +0xfdea, 0xfb64, 0xfdd1, 0xfb64, 0xfdd1, 0xfa4d, 0xfc96, 0xfa4d, 0xfc96, 0xf927, 0xfb53, +0xf927, 0xfb53, 0xf90a, 0xfb1e, 0xf90a, 0xfb1e, 0xf7d2, 0xf9d5, 0xf7d2, 0xf9d5, 0xf7d2, +0xf9d5, 0xf7c3, 0xf9bc, 0xf7c3, 0xf9bc, 0xf631, 0xf825, 0xf631, 0xf825, 0xf12d, 0xf31f, +0xf12d, 0xf31f, 0xf13c, 0xf32f, 0xf13c, 0xf32f, 0xf3ae, 0xf5a2, 0xf3ae, 0xf5a2, 0xf13e, +0xf331, 0xf13e, 0xf331, 0xf13e, 0xf331, 0xf0d3, 0xf2c1, 0xf0d3, 0xf2c1, 0xf182, 0xf364, +0xf182, 0xf364, 0xf0aa, 0xf277, 0xf0aa, 0xf277, 0xefd1, 0xf180, 0xefd1, 0xf180, 0xedf8, +0xef7d, 0xedf8, 0xef7d, 0xedf8, 0xef7d, 0xef48, 0xf097, 0xef48, 0xf097, 0xef4f, 0xf05b, +0xef4f, 0xf05b, 0xf0a5, 0xf162, 0xf0a5, 0xf162, 0xf230, 0xf294, 0xf230, 0xf294, 0xf27e, +0xf27e, 0xf27e, 0xf27e, 0xf3ff, 0xf393, 0xf3ff, 0xf393, 0xf3ff, 0xf393, 0xf428, 0xf34a, +0xf428, 0xf34a, 0xf64c, 0xf4fa, 0xf64c, 0xf4fa, 0xf92d, 0xf766, 0xf92d, 0xf766, 0xfcab, +0xfa72, 0xfcab, 0xfa72, 0xfdfa, 0xfb55, 0xfdfa, 0xfb55, 0x172, 0xfe68, 0x172, 0xfe68, +0x172, 0xfe68, 0x621, 0x2be, 0x621, 0x2be, 0x8a8, 0x4f6, 0x8a8, 0x4f6, 0xcf6, +0x904, 0xcf6, 0x904, 0x1037, 0xc14, 0x1037, 0xc14, 0x129b, 0xe54, 0x129b, 0xe54, +0x129b, 0xe54, 0x1500, 0x10a4, 0x1500, 0x10a4, 0x193a, 0x14d6, 0x193a, 0x14d6, 0x1ad0, +0x1671, 0x1ad0, 0x1671, 0x19b8, 0x1568, 0x19b8, 0x1568, 0x1a0a, 0x15d1, 0x1a0a, 0x15d1, +0x1a2f, 0x1613, 0x1a2f, 0x1613, 0x1a2f, 0x1613, 0x1adf, 0x16e4, 0x1adf, 0x16e4, 0x1c3e, +0x1865, 0x1c3e, 0x1865, 0x1a2d, 0x1675, 0x1a2d, 0x1675, 0x1721, 0x1388, 0x1721, 0x1388, +0x18cf, 0x154f, 0x18cf, 0x154f, 0x1a45, 0x16db, 0x1a45, 0x16db, 0x1a45, 0x16db, 0x1940, +0x15e5, 0x1940, 0x15e5, 0x189b, 0x154a, 0x189b, 0x154a, 0x191e, 0x15d1, 0x191e, 0x15d1, +0x16a4, 0x1357, 0x16a4, 0x1357, 0x14fc, 0x11ad, 0x14fc, 0x11ad, 0x14fc, 0x11ad, 0x1692, +0x1340, 0x1692, 0x1340, 0x1790, 0x143a, 0x1790, 0x143a, 0x1753, 0x13ff, 0x1753, 0x13ff, +0x14a9, 0x115b, 0x14a9, 0x115b, 0x13d9, 0x1099, 0x13d9, 0x1099, 0x138e, 0x1065, 0x138e, +0x1065, 0x138e, 0x1065, 0x12c0, 0xfb9, 0x12c0, 0xfb9, 0x10cd, 0xdf5, 0x10cd, 0xdf5, +0xd1b, 0xa7e, 0xd1b, 0xa7e, 0xc05, 0x9af, 0xc05, 0x9af, 0xb56, 0x953, 0xb56, +0x953, 0xa21, 0x87d, 0xa21, 0x87d, 0xa21, 0x87d, 0x85a, 0x71d, 0x85a, 0x71d, +0x3ee, 0x321, 0x3ee, 0x321, 0x233, 0x1da, 0x233, 0x1da, 0x1ef, 0x20d, 0x1ef, +0x20d, 0xffc4, 0x58, 0xffc4, 0x58, 0xffc4, 0x58, 0xff40, 0x46, 0xff40, 0x46, +0xfcd1, 0xfe44, 0xfcd1, 0xfe44, 0xfbfd, 0xfdd4, 0xfbfd, 0xfdd4, 0xfc53, 0xfe84, 0xfc53, +0xfe84, 0xf87f, 0xfafc, 0xf87f, 0xfafc, 0xf60e, 0xf8cb, 0xf60e, 0xf8cb, 0xf60e, 0xf8cb, +0xf6ba, 0xf9a8, 0xf6ba, 0xf9a8, 0xf69b, 0xf9ad, 0xf69b, 0xf9ad, 0xf4ec, 0xf814, 0xf4ec, +0xf814, 0xf403, 0xf734, 0xf403, 0xf734, 0xf453, 0xf783, 0xf453, 0xf783, 0xf453, 0xf783, +0xf5a0, 0xf8c4, 0xf5a0, 0xf8c4, 0xf59a, 0xf8ac, 0xf59a, 0xf8ac, 0xf663, 0xf95e, 0xf663, +0xf95e, 0xf68b, 0xf96d, 0xf68b, 0xf96d, 0xf4cf, 0xf797, 0xf4cf, 0xf797, 0xf471, 0xf721, +0xf471, 0xf721, 0xf471, 0xf721, 0xf4ce, 0xf76b, 0xf4ce, 0xf76b, 0xf590, 0xf81e, 0xf590, +0xf81e, 0xf480, 0xf705, 0xf480, 0xf705, 0xf4fa, 0xf77c, 0xf4fa, 0xf77c, 0xf6a7, 0xf92c, +0xf6a7, 0xf92c, 0xf6db, 0xf969, 0xf6db, 0xf969, 0xf6db, 0xf969, 0xf762, 0xf9fc, 0xf762, +0xf9fc, 0xf6ec, 0xf996, 0xf6ec, 0xf996, 0xf5c3, 0xf87d, 0xf5c3, 0xf87d, 0xf586, 0xf84f, +0xf586, 0xf84f, 0xf3ef, 0xf6c4, 0xf3ef, 0xf6c4, 0xf3ef, 0xf6c4, 0xf2c3, 0xf59f, 0xf2c3, +0xf59f, 0xf516, 0xf7f0, 0xf516, 0xf7f0, 0xf37f, 0xf64f, 0xf37f, 0xf64f, 0xf0e8, 0xf3a3, +0xf0e8, 0xf3a3, 0xf3f8, 0xf693, 0xf3f8, 0xf693, 0xf514, 0xf783, 0xf514, 0xf783, 0xf514, +0xf783, 0xf426, 0xf65c, 0xf426, 0xf65c, 0xf471, 0xf663, 0xf471, 0xf663, 0xf2b9, 0xf45d, +0xf2b9, 0xf45d, 0xf19e, 0xf2eb, 0xf19e, 0xf2eb, 0xf254, 0xf344, 0xf254, 0xf344, 0xf3d2, +0xf460, 0xf3d2, 0xf460, 0xf3d2, 0xf460, 0xf43f, 0xf469, 0xf43f, 0xf469, 0xf4b5, 0xf47d, +0xf4b5, 0xf47d, 0xf5e7, 0xf54f, 0xf5e7, 0xf54f, 0xf68f, 0xf59f, 0xf68f, 0xf59f, 0xfa81, +0xf940, 0xfa81, 0xf940, 0xfa81, 0xf940, 0xfc2e, 0xfaa6, 0xfc2e, 0xfaa6, 0xfd2c, 0xfb6a, +0xfd2c, 0xfb6a, 0xff0f, 0xfd1f, 0xff0f, 0xfd1f, 0xff12, 0xfd02, 0xff12, 0xfd02, 0xffe9, +0xfdc7, 0xffe9, 0xfdc7, 0x1f9, 0xffd1, 0x1f9, 0xffd1, 0x1f9, 0xffd1, 0x346, 0x124, +0x346, 0x124, 0xed, 0xfedb, 0xed, 0xfedb, 0x23a, 0x40, 0x23a, 0x40, 0x2a7, +0xcc, 0x2a7, 0xcc, 0x228, 0x6f, 0x228, 0x6f, 0x3d8, 0x243, 0x3d8, 0x243, +0x3d8, 0x243, 0x1c2, 0x51, 0x1c2, 0x51, 0x193, 0x43, 0x193, 0x43, 0x1ae, +0x7b, 0x1ae, 0x7b, 0x87, 0xff6b, 0x87, 0xff6b, 0xc, 0xff02, 0xc, 0xff02, +0xc, 0xff02, 0xffe5, 0xfee5, 0xffe5, 0xfee5, 0xffed, 0xfef1, 0xffed, 0xfef1, 0xffe6, +0xfee9, 0xffe6, 0xfee9, 0xffa4, 0xfea1, 0xffa4, 0xfea1, 0xfe4e, 0xfd40, 0xfe4e, 0xfd40, +0xfe99, 0xfd80, 0xfe99, 0xfd80, 0xfe99, 0xfd80, 0xbf, 0xff9b, 0xbf, 0xff9b, 0x109, +0xffde, 0x109, 0xffde, 0xff89, 0xfe5b, 0xff89, 0xfe5b, 0xff78, 0xfe4e, 0xff78, 0xfe4e, +0x1d7, 0xb9, 0x1d7, 0xb9, 0x41b, 0x313, 0x41b, 0x313, 0x41b, 0x313, 0x42f, +0x348, 0x42f, 0x348, 0x4fe, 0x444, 0x4fe, 0x444, 0x5c0, 0x53d, 0x5c0, 0x53d, +0x6d5, 0x694, 0x6d5, 0x694, 0x7da, 0x7e5, 0x7da, 0x7e5, 0x7da, 0x7e5, 0x6e8, +0x746, 0x6e8, 0x746, 0x647, 0x6ff, 0x647, 0x6ff, 0x5d7, 0x6ec, 0x5d7, 0x6ec, +0x635, 0x7aa, 0x635, 0x7aa, 0x523, 0x6f5, 0x523, 0x6f5, 0x3f8, 0x623, 0x3f8, +0x623, 0x3f8, 0x623, 0x360, 0x5de, 0x360, 0x5de, 0x141, 0x409, 0x141, 0x409, +0xff5f, 0x267, 0xff5f, 0x267, 0xff7f, 0x2bc, 0xff7f, 0x2bc, 0xba, 0x41e, 0xba, +0x41e, 0xffd5, 0x353, 0xffd5, 0x353, 0xffd5, 0x353, 0x5b, 0x3e5, 0x5b, 0x3e5, +0x92, 0x41c, 0x92, 0x41c, 0xc6, 0x446, 0xc6, 0x446, 0x38e, 0x6f9, 0x38e, +0x6f9, 0x2a8, 0x5f6, 0x2a8, 0x5f6, 0x2a8, 0x5f6, 0x1f0, 0x51c, 0x1f0, 0x51c, +0x1e7, 0x4ec, 0x1e7, 0x4ec, 0x1d5, 0x4b3, 0x1d5, 0x4b3, 0x296, 0x54e, 0x296, +0x54e, 0x54, 0x2e7, 0x54, 0x2e7, 0x69, 0x2dc, 0x69, 0x2dc, 0x69, 0x2dc, +0xff42, 0x19a, 0xff42, 0x19a, 0xfe00, 0x44, 0xfe00, 0x44, 0xfe72, 0xa7, 0xfe72, +0xa7, 0xfaeb, 0xfd17, 0xfaeb, 0xfd17, 0xfb03, 0xfd2a, 0xfb03, 0xfd2a, 0xf908, 0xfb2e, +0xf908, 0xfb2e, 0xf908, 0xfb2e, 0xf41b, 0xf640, 0xf41b, 0xf640, 0xf3bd, 0xf5e2, 0xf3bd, +0xf5e2, 0xf181, 0xf3a4, 0xf181, 0xf3a4, 0xf02f, 0xf24a, 0xf02f, 0xf24a, 0xf0ef, 0xf2fb, +0xf0ef, 0xf2fb, 0xf0ef, 0xf2fb, 0xee28, 0xf01b, 0xee28, 0xf01b, 0xec31, 0xee00, 0xec31, +0xee00, 0xed17, 0xeeb6, 0xed17, 0xeeb6, 0xed7d, 0xeede, 0xed7d, 0xeede, 0xecb6, 0xedcc, +0xecb6, 0xedcc, 0xec99, 0xed56, 0xec99, 0xed56, 0xec99, 0xed56, 0xed43, 0xed99, 0xed43, +0xed99, 0xedba, 0xed9f, 0xedba, 0xed9f, 0xeeda, 0xee43, 0xeeda, 0xee43, 0xeec3, 0xeda8, +0xeec3, 0xeda8, 0xf007, 0xee64, 0xf007, 0xee64, 0xf182, 0xef55, 0xf182, 0xef55, 0xf182, +0xef55, 0xf39a, 0xf0e3, 0xf39a, 0xf0e3, 0xf65b, 0xf31f, 0xf65b, 0xf31f, 0xf5fc, 0xf243, +0xf5fc, 0xf243, 0xf97b, 0xf54e, 0xf97b, 0xf54e, 0xfd17, 0xf881, 0xfd17, 0xf881, 0xfd17, +0xf881, 0xff67, 0xfa78, 0xff67, 0xfa78, 0x259, 0xfd1f, 0x259, 0xfd1f, 0x503, 0xff8f, +0x503, 0xff8f, 0x8ce, 0x331, 0x8ce, 0x331, 0xb7f, 0x5c9, 0xb7f, 0x5c9, 0xdda, +0x81b, 0xdda, 0x81b, 0xdda, 0x81b, 0xe94, 0x8db, 0xe94, 0x8db, 0x110b, 0xb63, +0x110b, 0xb63, 0x1429, 0xe9f, 0x1429, 0xe9f, 0x1509, 0xfa4, 0x1509, 0xfa4, 0x1622, +0x10ea, 0x1622, 0x10ea, 0x1825, 0x131d, 0x1825, 0x131d, 0x1825, 0x131d, 0x18ac, 0x13d7, +0x18ac, 0x13d7, 0x196c, 0x14ca, 0x196c, 0x14ca, 0x1c57, 0x17e5, 0x1c57, 0x17e5, 0x1b1a, +0x16d8, 0x1b1a, 0x16d8, 0x1b5a, 0x1744, 0x1b5a, 0x1744, 0x1b5a, 0x1744, 0x1c0c, 0x181f, +0x1c0c, 0x181f, 0x1976, 0x15af, 0x1976, 0x15af, 0x198c, 0x15e9, 0x198c, 0x15e9, 0x18c8, +0x1546, 0x18c8, 0x1546, 0x1712, 0x13b3, 0x1712, 0x13b3, 0x1600, 0x12c4, 0x1600, 0x12c4, +0x1600, 0x12c4, 0x152e, 0x1219, 0x152e, 0x1219, 0x1505, 0x121b, 0x1505, 0x121b, 0x1587, +0x12ce, 0x1587, 0x12ce, 0x161f, 0x139f, 0x161f, 0x139f, 0x1509, 0x12c9, 0x1509, 0x12c9, +0x1509, 0x12c9, 0x14d8, 0x12e1, 0x14d8, 0x12e1, 0x14b3, 0x1310, 0x14b3, 0x1310, 0x12e7, +0x119e, 0x12e7, 0x119e, 0x11da, 0x10f4, 0x11da, 0x10f4, 0x1120, 0x10a4, 0x1120, 0x10a4, +0xe69, 0xe5c, 0xe69, 0xe5c, 0xe69, 0xe5c, 0xb54, 0xbb9, 0xb54, 0xbb9, 0xab7, +0xb8e, 0xab7, 0xb8e, 0x89f, 0x9e7, 0x89f, 0x9e7, 0x621, 0x7d6, 0x621, 0x7d6, +0x6f7, 0x912, 0x6f7, 0x912, 0x6aa, 0x923, 0x6aa, 0x923, 0x6aa, 0x923, 0x2a3, +0x56f, 0x2a3, 0x56f, 0x1, 0x314, 0x1, 0x314, 0xff5b, 0x2a7, 0xff5b, 0x2a7, +0xfd5d, 0xd5, 0xfd5d, 0xd5, 0xfbcc, 0xff62, 0xfbcc, 0xff62, 0xfbcc, 0xff62, 0xf8b3, +0xfc59, 0xf8b3, 0xfc59, 0xf7be, 0xfb67, 0xf7be, 0xfb67, 0xf942, 0xfce2, 0xf942, 0xfce2, +0xf8e2, 0xfc71, 0xf8e2, 0xfc71, 0xf83d, 0xfbb2, 0xf83d, 0xfbb2, 0xf7c9, 0xfb20, 0xf7c9, +0xfb20, 0xf7c9, 0xfb20, 0xf85e, 0xfb93, 0xf85e, 0xfb93, 0xf73f, 0xfa52, 0xf73f, 0xfa52, +0xf62e, 0xf921, 0xf62e, 0xf921, 0xf6ef, 0xf9c5, 0xf6ef, 0xf9c5, 0xf7b8, 0xfa78, 0xf7b8, +0xfa78, 0xf810, 0xfabf, 0xf810, 0xfabf, 0xf810, 0xfabf, 0xf922, 0xfbc8, 0xf922, 0xfbc8, +0xf952, 0xfbf6, 0xf952, 0xfbf6, 0xf752, 0xf9fc, 0xf752, 0xf9fc, 0xf6a6, 0xf95c, 0xf6a6, +0xf95c, 0xf655, 0xf91c, 0xf655, 0xf91c, 0xf655, 0xf91c, 0xf55d, 0xf839, 0xf55d, 0xf839, +0xf31f, 0xf611, 0xf31f, 0xf611, 0xf1d6, 0xf4dc, 0xf1d6, 0xf4dc, 0xf15e, 0xf477, 0xf15e, +0xf477, 0xf097, 0xf3bc, 0xf097, 0xf3bc, 0xef69, 0xf293, 0xef69, 0xf293, 0xef69, 0xf293, +0xedda, 0xf100, 0xedda, 0xf100, 0xedaf, 0xf0c5, 0xedaf, 0xf0c5, 0xedad, 0xf0a8, 0xedad, +0xf0a8, 0xec7a, 0xef4d, 0xec7a, 0xef4d, 0xeaf5, 0xed93, 0xeaf5, 0xed93, 0xec91, 0xeeed, +0xec91, 0xeeed, 0xec91, 0xeeed, 0xebd5, 0xede5, 0xebd5, 0xede5, 0xeb30, 0xecea, 0xeb30, +0xecea, 0xee3c, 0xef98, 0xee3c, 0xef98, 0xef2b, 0xf024, 0xef2b, 0xf024, 0xf0d6, 0xf169, +0xf0d6, 0xf169, 0xf0d6, 0xf169, 0xf2b4, 0xf2e1, 0xf2b4, 0xf2e1, 0xf3dd, 0xf3a6, 0xf3dd, +0xf3a6, 0xf4f3, 0xf45e, 0xf4f3, 0xf45e, 0xf675, 0xf589, 0xf675, 0xf589, 0xf990, 0xf857, +0xf990, 0xf857, 0xfbec, 0xfa71, 0xfbec, 0xfa71, 0xfbec, 0xfa71, 0xfcf7, 0xfb47, 0xfcf7, +0xfb47, 0xfd3f, 0xfb67, 0xfd3f, 0xfb67, 0xfe03, 0xfc11, 0xfe03, 0xfc11, 0x11, 0xfe12, +0x11, 0xfe12, 0x1, 0xfe02, 0x1, 0xfe02, 0xffb0, 0xfdbb, 0xffb0, 0xfdbb, 0xffb0, +0xfdbb, 0x5e, 0xfe7e, 0x5e, 0xfe7e, 0x75, 0xfeb1, 0x75, 0xfeb1, 0x202, 0x5e, +0x202, 0x5e, 0x3d1, 0x252, 0x3d1, 0x252, 0x654, 0x4fa, 0x654, 0x4fa, 0x654, +0x4fa, 0x734, 0x5ff, 0x734, 0x5ff, 0x745, 0x632, 0x745, 0x632, 0x79d, 0x6a7, +0x79d, 0x6a7, 0x794, 0x6b8, 0x794, 0x6b8, 0x878, 0x7af, 0x878, 0x7af, 0x752, +0x696, 0x752, 0x696, 0x752, 0x696, 0x6bd, 0x608, 0x6bd, 0x608, 0x795, 0x6e4, +0x795, 0x6e4, 0x8f1, 0x83f, 0x8f1, 0x83f, 0x93f, 0x88a, 0x93f, 0x88a, 0x8c3, +0x80a, 0x8c3, 0x80a, 0x9e1, 0x926, 0x9e1, 0x926, 0x9e1, 0x926, 0x911, 0x856, +0x911, 0x856, 0x780, 0x6cb, 0x780, 0x6cb, 0x7d4, 0x729, 0x7d4, 0x729, 0x7ef, +0x756, 0x7ef, 0x756, 0x79d, 0x71f, 0x79d, 0x71f, 0x79d, 0x71f, 0x71e, 0x6c3, +0x71e, 0x6c3, 0x6f1, 0x6c2, 0x6f1, 0x6c2, 0x6ac, 0x6b1, 0x6ac, 0x6b1, 0x6dd, +0x71d, 0x6dd, 0x71d, 0x8b0, 0x932, 0x8b0, 0x932, 0x858, 0x921, 0x858, 0x921, +0x858, 0x921, 0x7f2, 0x904, 0x7f2, 0x904, 0x7c3, 0x920, 0x7c3, 0x920, 0x800, +0x9a6, 0x800, 0x9a6, 0x8fe, 0xaea, 0x8fe, 0xaea, 0x620, 0x84d, 0x620, 0x84d, +0x237, 0x49c, 0x237, 0x49c, 0x237, 0x49c, 0xdc, 0x372, 0xdc, 0x372, 0x1ec, +0x4a9, 0x1ec, 0x4a9, 0xdd, 0x3b7, 0xdd, 0x3b7, 0xff45, 0x232, 0xff45, 0x232, +0xfe9c, 0x190, 0xfe9c, 0x190, 0xfe9c, 0x190, 0xfdfc, 0xef, 0xfdfc, 0xef, 0xfdca, +0xb2, 0xfdca, 0xb2, 0xfdb5, 0x8b, 0xfdb5, 0x8b, 0xfdbe, 0x7c, 0xfdbe, 0x7c, +0xfc2e, 0xfed1, 0xfc2e, 0xfed1, 0xfcac, 0xff32, 0xfcac, 0xff32, 0xfcac, 0xff32, 0xfbfb, +0xfe63, 0xfbfb, 0xfe63, 0xfbc8, 0xfe15, 0xfbc8, 0xfe15, 0xfc7b, 0xfeaf, 0xfc7b, 0xfeaf, +0xfa5d, 0xfc7d, 0xfa5d, 0xfc7d, 0xfb87, 0xfd98, 0xfb87, 0xfd98, 0xfc3d, 0xfe45, 0xfc3d, +0xfe45, 0xfc3d, 0xfe45, 0xfa38, 0xfc3c, 0xfa38, 0xfc3c, 0xf958, 0xfb5c, 0xf958, 0xfb5c, +0xf8b2, 0xfabb, 0xf8b2, 0xfabb, 0xf5f1, 0xf801, 0xf5f1, 0xf801, 0xf2df, 0xf4f7, 0xf2df, +0xf4f7, 0xf2df, 0xf4f7, 0xf1ff, 0xf41d, 0xf1ff, 0xf41d, 0xf0aa, 0xf2cb, 0xf0aa, 0xf2cb, +0xef37, 0xf155, 0xef37, 0xf155, 0xee80, 0xf093, 0xee80, 0xf093, 0xecce, 0xeecb, 0xecce, +0xeecb, 0xebb1, 0xed8f, 0xebb1, 0xed8f, 0xebb1, 0xed8f, 0xe968, 0xeb17, 0xe968, 0xeb17, +0xe831, 0xe9a5, 0xe831, 0xe9a5, 0xea78, 0xeba2, 0xea78, 0xeba2, 0xeaff, 0xebd1, 0xeaff, +0xebd1, 0xe9df, 0xea4c, 0xe9df, 0xea4c, 0xe9a7, 0xe9a2, 0xe9a7, 0xe9a2, 0xe9a7, 0xe9a2, +0xec2e, 0xebad, 0xec2e, 0xebad, 0xee88, 0xed83, 0xee88, 0xed83, 0xf02d, 0xee9f, 0xf02d, +0xee9f, 0xf1a1, 0xef86, 0xf1a1, 0xef86, 0xf36d, 0xf0c6, 0xf36d, 0xf0c6, 0xf36d, 0xf0c6, +0xf5fc, 0xf2cd, 0xf5fc, 0xf2cd, 0xf7d5, 0xf424, 0xf7d5, 0xf424, 0xfc23, 0xf7f8, 0xfc23, +0xf7f8, 0xff43, 0xfaab, 0xff43, 0xfaab, 0x178, 0xfc7f, 0x178, 0xfc7f, 0x561, 0x18, +0x561, 0x18, 0x561, 0x18, 0x999, 0x40f, 0x999, 0x40f, 0xcc0, 0x706, 0xcc0, +0x706, 0xfa9, 0x9d1, 0xfa9, 0x9d1, 0x131b, 0xd34, 0x131b, 0xd34, 0x149c, 0xeb7, +0x149c, 0xeb7, 0x149c, 0xeb7, 0x1599, 0xfc3, 0x1599, 0xfc3, 0x154d, 0xf92, 0x154d, +0xf92, 0x1647, 0x10b2, 0x1647, 0x10b2, 0x1807, 0x129f, 0x1807, 0x129f, 0x1750, 0x121d, +0x1750, 0x121d, 0x1641, 0x1145, 0x1641, 0x1145, 0x1641, 0x1145, 0x165c, 0x119b, 0x165c, +0x119b, 0x1897, 0x1410, 0x1897, 0x1410, 0x19ae, 0x1560, 0x19ae, 0x1560, 0x1914, 0x14fd, +0x1914, 0x14fd, 0x18d6, 0x14f4, 0x18d6, 0x14f4, 0x1855, 0x14a5, 0x1855, 0x14a5, 0x1855, +0x14a5, 0x1903, 0x1581, 0x1903, 0x1581, 0x1982, 0x162c, 0x1982, 0x162c, 0x17bf, 0x1495, +0x17bf, 0x1495, 0x15d8, 0x12d8, 0x15d8, 0x12d8, 0x154b, 0x1276, 0x154b, 0x1276, 0x154b, +0x1276, 0x16c6, 0x141e, 0x16c6, 0x141e, 0x15e2, 0x136a, 0x15e2, 0x136a, 0x142b, 0x11e7, +0x142b, 0x11e7, 0x1369, 0x115d, 0x1369, 0x115d, 0x10aa, 0xedc, 0x10aa, 0xedc, 0xfe3, +0xe59, 0xfe3, 0xe59, 0xfe3, 0xe59, 0xe2d, 0xceb, 0xe2d, 0xceb, 0xc4d, 0xb59, +0xc4d, 0xb59, 0xc4d, 0xbab, 0xc4d, 0xbab, 0x9ec, 0x99f, 0x9ec, 0x99f, 0x6ed, +0x6f7, 0x6ed, 0x6f7, 0x4bb, 0x51b, 0x4bb, 0x51b, 0x4bb, 0x51b, 0x3a2, 0x457, +0x3a2, 0x457, 0x399, 0x49f, 0x399, 0x49f, 0x3d9, 0x52c, 0x3d9, 0x52c, 0x39c, +0x533, 0x39c, 0x533, 0x219, 0x3ed, 0x219, 0x3ed, 0x219, 0x3ed, 0x199, 0x3a0, +0x199, 0x3a0, 0xcd, 0x2fc, 0xcd, 0x2fc, 0xffb8, 0x204, 0xffb8, 0x204, 0xff32, +0x191, 0xff32, 0x191, 0xfb8e, 0xfdf4, 0xfb8e, 0xfdf4, 0xfa5c, 0xfcc1, 0xfa5c, 0xfcc1, +0xfa5c, 0xfcc1, 0xfa33, 0xfc8e, 0xfa33, 0xfc8e, 0xf9ec, 0xfc36, 0xf9ec, 0xfc36, 0xfb71, +0xfda6, 0xfb71, 0xfda6, 0xf97d, 0xfb98, 0xf97d, 0xfb98, 0xf8cc, 0xface, 0xf8cc, 0xface, +0xf7e5, 0xf9ce, 0xf7e5, 0xf9ce, 0xf7e5, 0xf9ce, 0xf747, 0xf91a, 0xf747, 0xf91a, 0xf859, +0xfa1b, 0xf859, 0xfa1b, 0xf7b7, 0xf96c, 0xf7b7, 0xf96c, 0xf847, 0xf9f8, 0xf847, 0xf9f8, +0xf8bf, 0xfa72, 0xf8bf, 0xfa72, 0xf8bf, 0xfa72, 0xf8fd, 0xfaba, 0xf8fd, 0xfaba, 0xf904, +0xfad1, 0xf904, 0xfad1, 0xf85c, 0xfa41, 0xf85c, 0xfa41, 0xf71d, 0xf91e, 0xf71d, 0xf91e, +0xf6b1, 0xf8d1, 0xf6b1, 0xf8d1, 0xf80b, 0xfa4c, 0xf80b, 0xfa4c, 0xf80b, 0xfa4c, 0xf76d, +0xf9ce, 0xf76d, 0xf9ce, 0xf547, 0xf7c5, 0xf547, 0xf7c5, 0xf48a, 0xf720, 0xf48a, 0xf720, +0xf4a1, 0xf749, 0xf4a1, 0xf749, 0xf400, 0xf6af, 0xf400, 0xf6af, 0xf3f4, 0xf6a1, 0xf3f4, +0xf6a1, 0xf3f4, 0xf6a1, 0xf410, 0xf6ae, 0xf410, 0xf6ae, 0xf2ff, 0xf583, 0xf2ff, 0xf583, +0xf20c, 0xf468, 0xf20c, 0xf468, 0xefb6, 0xf1de, 0xefb6, 0xf1de, 0xeee8, 0xf0d1, 0xeee8, +0xf0d1, 0xeee8, 0xf0d1, 0xf04a, 0xf1e8, 0xf04a, 0xf1e8, 0xf023, 0xf16f, 0xf023, 0xf16f, +0xeff7, 0xf0e9, 0xeff7, 0xf0e9, 0xefb8, 0xf04d, 0xefb8, 0xf04d, 0xf153, 0xf188, 0xf153, +0xf188, 0xf2ec, 0xf2c2, 0xf2ec, 0xf2c2, 0xf2ec, 0xf2c2, 0xf451, 0xf3cc, 0xf451, 0xf3cc, +0xf57d, 0xf4a2, 0xf57d, 0xf4a2, 0xf684, 0xf55b, 0xf684, 0xf55b, 0xfadc, 0xf96f, 0xfadc, +0xf96f, 0xfc6e, 0xfac7, 0xfc6e, 0xfac7, 0xfd53, 0xfb7f, 0xfd53, 0xfb7f, 0xfd53, 0xfb7f, +0xfd71, 0xfb7c, 0xfd71, 0xfb7c, 0xfb7d, 0xf974, 0xfb7d, 0xf974, 0xfb83, 0xf973, 0xfb83, +0xf973, 0xfc09, 0xf9fc, 0xfc09, 0xf9fc, 0xfd14, 0xfb16, 0xfd14, 0xfb16, 0xfd14, 0xfb16, +0xfccb, 0xfae3, 0xfccb, 0xfae3, 0xfd30, 0xfb66, 0xfd30, 0xfb66, 0xfe7b, 0xfcd4, 0xfe7b, +0xfcd4, 0xfeac, 0xfd29, 0xfeac, 0xfd29, 0xfdd9, 0xfc7d, 0xfdd9, 0xfc7d, 0xfcba, 0xfb84, +0xfcba, 0xfb84, 0xfcba, 0xfb84, 0xfcf3, 0xfbdf, 0xfcf3, 0xfbdf, 0xfe8c, 0xfd99, 0xfe8c, +0xfd99, 0xff59, 0xfe81, 0xff59, 0xfe81, 0xfe70, 0xfdae, 0xfe70, 0xfdae, 0xff6e, 0xfebd, +0xff6e, 0xfebd, 0x42, 0xff9d, 0x42, 0xff9d, 0x42, 0xff9d, 0xe0, 0x42, 0xe0, +0x42, 0x205, 0x16b, 0x205, 0x16b, 0x186, 0xed, 0x186, 0xed, 0x26a, 0x1d1, +0x26a, 0x1d1, 0x2dc, 0x244, 0x2dc, 0x244, 0x2dc, 0x244, 0x2e7, 0x251, 0x2e7, +0x251, 0x544, 0x4b3, 0x544, 0x4b3, 0x570, 0x4e7, 0x570, 0x4e7, 0x51b, 0x4a0, +0x51b, 0x4a0, 0x690, 0x629, 0x690, 0x629, 0x716, 0x6c8, 0x716, 0x6c8, 0x716, +0x6c8, 0x7f8, 0x7ca, 0x7f8, 0x7ca, 0x8f4, 0x8eb, 0x8f4, 0x8eb, 0x8a8, 0x8ca, +0x8a8, 0x8ca, 0x874, 0x8c6, 0x874, 0x8c6, 0x97a, 0x9fe, 0x97a, 0x9fe, 0x8cf, +0x987, 0x8cf, 0x987, 0x8cf, 0x987, 0x84f, 0x93c, 0x84f, 0x93c, 0x822, 0x943, +0x822, 0x943, 0x5dc, 0x72e, 0x5dc, 0x72e, 0x55c, 0x6dc, 0x55c, 0x6dc, 0x538, +0x6e1, 0x538, 0x6e1, 0x538, 0x6e1, 0x50c, 0x6d8, 0x50c, 0x6d8, 0x50f, 0x6f8, +0x50f, 0x6f8, 0x5d0, 0x7ce, 0x5d0, 0x7ce, 0x6e7, 0x8f4, 0x6e7, 0x8f4, 0x5dc, +0x7f3, 0x5dc, 0x7f3, 0x589, 0x7a3, 0x589, 0x7a3, 0x589, 0x7a3, 0x5e2, 0x7fc, +0x5e2, 0x7fc, 0x6cb, 0x8e1, 0x6cb, 0x8e1, 0x6eb, 0x8fc, 0x6eb, 0x8fc, 0x657, +0x861, 0x657, 0x861, 0x69d, 0x8a2, 0x69d, 0x8a2, 0x582, 0x784, 0x582, 0x784, +0x582, 0x784, 0x491, 0x692, 0x491, 0x692, 0x363, 0x569, 0x363, 0x569, 0x1f1, +0x400, 0x1f1, 0x400, 0x176, 0x393, 0x176, 0x393, 0x4a, 0x27a, 0x4a, 0x27a, +0x4a, 0x27a, 0xfeb2, 0xf8, 0xfeb2, 0xf8, 0xfbc2, 0xfe21, 0xfbc2, 0xfe21, 0xf8bf, +0xfb39, 0xf8bf, 0xfb39, 0xf66a, 0xf8ff, 0xf66a, 0xf8ff, 0xf44d, 0xf6fb, 0xf44d, 0xf6fb, +0xf2b0, 0xf573, 0xf2b0, 0xf573, 0xf2b0, 0xf573, 0xf102, 0xf3d3, 0xf102, 0xf3d3, 0xf09c, +0xf372, 0xf09c, 0xf372, 0xeff0, 0xf2c2, 0xeff0, 0xf2c2, 0xeecd, 0xf18e, 0xeecd, 0xf18e, +0xed95, 0xf038, 0xed95, 0xf038, 0xed95, 0xf038, 0xec93, 0xef08, 0xec93, 0xef08, 0xebd9, +0xee12, 0xebd9, 0xee12, 0xea6c, 0xec58, 0xea6c, 0xec58, 0xe94c, 0xeadd, 0xe94c, 0xeadd, +0xe9f7, 0xeb1e, 0xe9f7, 0xeb1e, 0xec25, 0xecd6, 0xec25, 0xecd6, 0xec25, 0xecd6, 0xec99, +0xecc8, 0xec99, 0xecc8, 0xed88, 0xed2d, 0xed88, 0xed2d, 0xeec6, 0xedda, 0xeec6, 0xedda, +0xeff2, 0xee72, 0xeff2, 0xee72, 0xf25d, 0xf04a, 0xf25d, 0xf04a, 0xf49c, 0xf1f8, 0xf49c, +0xf1f8, 0xf49c, 0xf1f8, 0xf7c2, 0xf492, 0xf7c2, 0xf492, 0xfa16, 0xf662, 0xfa16, 0xf662, +0xfce4, 0xf8b8, 0xfce4, 0xf8b8, 0xb1, 0xfc19, 0xb1, 0xfc19, 0x386, 0xfe91, 0x386, +0xfe91, 0x386, 0xfe91, 0x5b9, 0x76, 0x5b9, 0x76, 0x8f5, 0x375, 0x8f5, 0x375, +0xca1, 0x6f4, 0xca1, 0x6f4, 0xf94, 0x9ca, 0xf94, 0x9ca, 0x11fc, 0xc25, 0x11fc, +0xc25, 0x11ba, 0xbe3, 0x11ba, 0xbe3, 0x11ba, 0xbe3, 0x1318, 0xd4f, 0x1318, 0xd4f, +0x154b, 0xf9b, 0x154b, 0xf9b, 0x1592, 0x1004, 0x1592, 0x1004, 0x178d, 0x1229, 0x178d, +0x1229, 0x189e, 0x1369, 0x189e, 0x1369, 0x177f, 0x127d, 0x177f, 0x127d, 0x177f, 0x127d, +0x17a0, 0x12d4, 0x17a0, 0x12d4, 0x1943, 0x14ad, 0x1943, 0x14ad, 0x1904, 0x14a4, 0x1904, +0x14a4, 0x17c3, 0x1398, 0x17c3, 0x1398, 0x1669, 0x1272, 0x1669, 0x1272, 0x1669, 0x1272, +0x14b2, 0x10ed, 0x14b2, 0x10ed, 0x1565, 0x11d1, 0x1565, 0x11d1, 0x1646, 0x12e3, 0x1646, +0x12e3, 0x1621, 0x12ee, 0x1621, 0x12ee, 0x1635, 0x1333, 0x1635, 0x1333, 0x1565, 0x1296, +0x1565, 0x1296, 0x1565, 0x1296, 0x1462, 0x11c7, 0x1462, 0x11c7, 0x150a, 0x12a6, 0x150a, +0x12a6, 0x146a, 0x1242, 0x146a, 0x1242, 0x1099, 0xeb1, 0x1099, 0xeb1, 0xfdb, 0xe37, +0xfdb, 0xe37, 0x1079, 0xf1d, 0x1079, 0xf1d, 0x1079, 0xf1d, 0xe28, 0xd19, 0xe28, +0xd19, 0xb76, 0xab6, 0xb76, 0xab6, 0x8e7, 0x878, 0x8e7, 0x878, 0x78c, 0x770, +0x78c, 0x770, 0x64d, 0x684, 0x64d, 0x684, 0x64d, 0x684, 0x44d, 0x4d6, 0x44d, +0x4d6, 0x32b, 0x401, 0x32b, 0x401, 0x2b9, 0x3da, 0x2b9, 0x3da, 0x14d, 0x2b3, +0x14d, 0x2b3, 0xfe5d, 0x1, 0xfe5d, 0x1, 0xfcae, 0xfe89, 0xfcae, 0xfe89, 0xfcae, +0xfe89, 0xfb8c, 0xfd95, 0xfb8c, 0xfd95, 0xf966, 0xfb95, 0xf966, 0xfb95, 0xf80f, 0xfa5b, +0xf80f, 0xfa5b, 0xf74b, 0xf9ac, 0xf74b, 0xf9ac, 0xf7e8, 0xfa57, 0xf7e8, 0xfa57, 0xf8bc, +0xfb31, 0xf8bc, 0xfb31, 0xf8bc, 0xfb31, 0xf892, 0xfb09, 0xf892, 0xfb09, 0xf8f7, 0xfb6b, +0xf8f7, 0xfb6b, 0xf717, 0xf986, 0xf717, 0xf986, 0xf53f, 0xf7a8, 0xf53f, 0xf7a8, 0xf5e8, +0xf84a, 0xf5e8, 0xf84a, 0xf5e8, 0xf84a, 0xf649, 0xf8a7, 0xf649, 0xf8a7, 0xf620, 0xf87d, +0xf620, 0xf87d, 0xf62d, 0xf88d, 0xf62d, 0xf88d, 0xf692, 0xf8f8, 0xf692, 0xf8f8, 0xf62c, +0xf89e, 0xf62c, 0xf89e, 0xf57c, 0xf7fe, 0xf57c, 0xf7fe, 0xf57c, 0xf7fe, 0xf47b, 0xf711, +0xf47b, 0xf711, 0xf3b0, 0xf65e, 0xf3b0, 0xf65e, 0xf410, 0xf6d7, 0xf410, 0xf6d7, 0xf3fb, +0xf6dd, 0xf3fb, 0xf6dd, 0xf236, 0xf531, 0xf236, 0xf531, 0xf09e, 0xf3ae, 0xf09e, 0xf3ae, +0xf09e, 0xf3ae, 0xf009, 0xf32a, 0xf009, 0xf32a, 0xeede, 0xf20a, 0xeede, 0xf20a, 0xeee4, +0xf211, 0xeee4, 0xf211, 0xefe3, 0xf309, 0xefe3, 0xf309, 0xeebe, 0xf1d1, 0xeebe, 0xf1d1, +0xeebe, 0xf1d1, 0xee3d, 0xf131, 0xee3d, 0xf131, 0xefc1, 0xf289, 0xefc1, 0xf289, 0xeee9, +0xf179, 0xeee9, 0xf179, 0xeec7, 0xf113, 0xeec7, 0xf113, 0xef33, 0xf131, 0xef33, 0xf131, +0xee4c, 0xeff2, 0xee4c, 0xeff2, 0xee4c, 0xeff2, 0xf05f, 0xf1a4, 0xf05f, 0xf1a4, 0xf30f, +0xf3ef, 0xf30f, 0xf3ef, 0xf3da, 0xf450, 0xf3da, 0xf450, 0xf382, 0xf38d, 0xf382, 0xf38d, +0xf422, 0xf3c4, 0xf422, 0xf3c4, 0xf594, 0xf4d2, 0xf594, 0xf4d2, 0xf594, 0xf4d2, 0xf904, +0xf7e3, 0xf904, 0xf7e3, 0xfd09, 0xfb91, 0xfd09, 0xfb91, 0xfcd6, 0xfb12, 0xfcd6, 0xfb12, +0xfd05, 0xfb01, 0xfd05, 0xfb01, 0xfeb3, 0xfc7b, 0xfeb3, 0xfc7b, 0xfeb3, 0xfc7b, 0xffb9, +0xfd5b, 0xffb9, 0xfd5b, 0x104, 0xfe8d, 0x104, 0xfe8d, 0x10b, 0xfe87, 0x10b, 0xfe87, +0x12c, 0xfea8, 0x12c, 0xfea8, 0x2fe, 0x85, 0x2fe, 0x85, 0x481, 0x21c, 0x481, +0x21c, 0x481, 0x21c, 0x538, 0x2f0, 0x538, 0x2f0, 0x5c7, 0x3a0, 0x5c7, 0x3a0, +0x659, 0x458, 0x659, 0x458, 0x655, 0x47c, 0x655, 0x47c, 0x741, 0x591, 0x741, +0x591, 0x81f, 0x694, 0x81f, 0x694, 0x81f, 0x694, 0x7de, 0x677, 0x7de, 0x677, +0x790, 0x649, 0x790, 0x649, 0x619, 0x4ed, 0x619, 0x4ed, 0x637, 0x522, 0x637, +0x522, 0x650, 0x54c, 0x650, 0x54c, 0x650, 0x54c, 0x6a2, 0x5aa, 0x6a2, 0x5aa, +0x7c1, 0x6d1, 0x7c1, 0x6d1, 0x6b8, 0x5cd, 0x6b8, 0x5cd, 0x59c, 0x4b5, 0x59c, +0x4b5, 0x643, 0x55f, 0x643, 0x55f, 0x768, 0x688, 0x768, 0x688, 0x768, 0x688, +0x624, 0x54a, 0x624, 0x54a, 0x5dc, 0x50c, 0x5dc, 0x50c, 0x655, 0x593, 0x655, +0x593, 0x708, 0x659, 0x708, 0x659, 0x84a, 0x7b5, 0x84a, 0x7b5, 0x737, 0x6c2, +0x737, 0x6c2, 0x737, 0x6c2, 0x6dc, 0x68d, 0x6dc, 0x68d, 0x769, 0x747, 0x769, +0x747, 0x671, 0x681, 0x671, 0x681, 0x53b, 0x582, 0x53b, 0x582, 0x557, 0x5d8, +0x557, 0x5d8, 0x557, 0x5d8, 0x476, 0x533, 0x476, 0x533, 0x31f, 0x419, 0x31f, +0x419, 0x237, 0x36e, 0x237, 0x36e, 0xd3, 0x245, 0xd3, 0x245, 0xfe88, 0x32, +0xfe88, 0x32, 0xfde4, 0xffc3, 0xfde4, 0xffc3, 0xfde4, 0xffc3, 0xff80, 0x18e, 0xff80, +0x18e, 0xff24, 0x15d, 0xff24, 0x15d, 0xfe24, 0x82, 0xfe24, 0x82, 0xfd41, 0xffbf, +0xfd41, 0xffbf, 0xfcf3, 0xff8b, 0xfcf3, 0xff8b, 0xfcf3, 0xff8b, 0xfdbc, 0x6a, 0xfdbc, +0x6a, 0xfdb2, 0x71, 0xfdb2, 0x71, 0xfcbf, 0xff8d, 0xfcbf, 0xff8d, 0xfcf9, 0xffd3, +0xfcf9, 0xffd3, 0xfcde, 0xffc4, 0xfcde, 0xffc4, 0xfc9d, 0xff8f, 0xfc9d, 0xff8f, 0xfc9d, +0xff8f, 0xfe6a, 0x167, 0xfe6a, 0x167, 0xfe4b, 0x157, 0xfe4b, 0x157, 0xfb83, 0xfe9e, +0xfb83, 0xfe9e, 0xfa43, 0xfd6f, 0xfa43, 0xfd6f, 0xfaee, 0xfe2e, 0xfaee, 0xfe2e, 0xf9c6, +0xfd19, 0xf9c6, 0xfd19, 0xf9c6, 0xfd19, 0xf766, 0xface, 0xf766, 0xface, 0xf41f, 0xf799, +0xf41f, 0xf799, 0xf169, 0xf4f3, 0xf169, 0xf4f3, 0xf0fd, 0xf493, 0xf0fd, 0xf493, 0xf03a, +0xf3d4, 0xf03a, 0xf3d4, 0xf03a, 0xf3d4, 0xeede, 0xf276, 0xeede, 0xf276, 0xed4e, 0xf0d9, +0xed4e, 0xf0d9, 0xec20, 0xef92, 0xec20, 0xef92, 0xea3e, 0xed8a, 0xea3e, 0xed8a, 0xea16, +0xed2e, 0xea16, 0xed2e, 0xea35, 0xed0a, 0xea35, 0xed0a, 0xea35, 0xed0a, 0xe9a6, 0xec29, +0xe9a6, 0xec29, 0xeba3, 0xedc4, 0xeba3, 0xedc4, 0xedd4, 0xef86, 0xedd4, 0xef86, 0xef9a, +0xf0ce, 0xef9a, 0xf0ce, 0xf0d3, 0xf17e, 0xf0d3, 0xf17e, 0xf2a0, 0xf2b8, 0xf2a0, 0xf2b8, +0xf2a0, 0xf2b8, 0xf3f7, 0xf376, 0xf3f7, 0xf376, 0xf555, 0xf435, 0xf555, 0xf435, 0xf7c0, +0xf600, 0xf7c0, 0xf600, 0xfba5, 0xf948, 0xfba5, 0xf948, 0xffdd, 0xfce6, 0xffdd, 0xfce6, +0xffdd, 0xfce6, 0x29d, 0xff15, 0x29d, 0xff15, 0x571, 0x162, 0x571, 0x162, 0x7ca, +0x340, 0x7ca, 0x340, 0xa79, 0x583, 0xa79, 0x583, 0xe59, 0x906, 0xe59, 0x906, +0x11b1, 0xc14, 0x11b1, 0xc14, 0x11b1, 0xc14, 0x1385, 0xdb0, 0x1385, 0xdb0, 0x1606, +0x100a, 0x1606, 0x100a, 0x1753, 0x1142, 0x1753, 0x1142, 0x1775, 0x115e, 0x1775, 0x115e, +0x181e, 0x1211, 0x181e, 0x1211, 0x1903, 0x130e, 0x1903, 0x130e, 0x1903, 0x130e, 0x19bd, +0x13eb, 0x19bd, 0x13eb, 0x1b34, 0x1590, 0x1b34, 0x1590, 0x1c46, 0x16d6, 0x1c46, 0x16d6, +0x1b55, 0x161f, 0x1b55, 0x161f, 0x1cba, 0x17c2, 0x1cba, 0x17c2, 0x1cba, 0x17c2, 0x1d20, +0x1868, 0x1d20, 0x1868, 0x1ae1, 0x166a, 0x1ae1, 0x166a, 0x194e, 0x1517, 0x194e, 0x1517, +0x17c9, 0x13d1, 0x17c9, 0x13d1, 0x16bd, 0x1302, 0x16bd, 0x1302, 0x176c, 0x13ec, 0x176c, +0x13ec, 0x176c, 0x13ec, 0x178f, 0x1449, 0x178f, 0x1449, 0x14f5, 0x11e8, 0x14f5, 0x11e8, +0x131c, 0x1047, 0x131c, 0x1047, 0x1288, 0xfea, 0x1288, 0xfea, 0x11a7, 0xf42, 0x11a7, +0xf42, 0x114d, 0xf21, 0x114d, 0xf21, 0x114d, 0xf21, 0x1012, 0xe22, 0x1012, 0xe22, +0xde7, 0xc35, 0xde7, 0xc35, 0xcbd, 0xb4d, 0xcbd, 0xb4d, 0xc6f, 0xb42, 0xc6f, +0xb42, 0xa67, 0x981, 0xa67, 0x981, 0xa67, 0x981, 0x7f1, 0x754, 0x7f1, 0x754, +0x5c4, 0x572, 0x5c4, 0x572, 0x3aa, 0x3a3, 0x3aa, 0x3a3, 0x34a, 0x38f, 0x34a, +0x38f, 0x2cf, 0x35d, 0x2cf, 0x35d, 0xff, 0x1d3, 0xff, 0x1d3, 0xff, 0x1d3, +0x3b, 0x150, 0x3b, 0x150, 0x5f, 0x1b0, 0x5f, 0x1b0, 0xff7c, 0x103, 0xff7c, +0x103, 0xfeb7, 0x6b, 0xfeb7, 0x6b, 0xfc42, 0xfe1b, 0xfc42, 0xfe1b, 0xf95a, 0xfb4e, +0xf95a, 0xfb4e, 0xf95a, 0xfb4e, 0xf704, 0xf90c, 0xf704, 0xf90c, 0xf705, 0xf918, 0xf705, +0xf918, 0xf7ed, 0xfa03, 0xf7ed, 0xfa03, 0xf758, 0xf969, 0xf758, 0xf969, 0xf6ab, 0xf8b3, +0xf6ab, 0xf8b3, 0xf6ab, 0xf8b3, 0xf646, 0xf83f, 0xf646, 0xf83f, 0xf67b, 0xf863, 0xf67b, +0xf863, 0xf62c, 0xf802, 0xf62c, 0xf802, 0xf6b5, 0xf87a, 0xf6b5, 0xf87a, 0xf6e0, 0xf896, +0xf6e0, 0xf896, 0xf779, 0xf923, 0xf779, 0xf923, 0xf779, 0xf923, 0xf71b, 0xf8be, 0xf71b, +0xf8be, 0xf667, 0xf809, 0xf667, 0xf809, 0xf64e, 0xf7f4, 0xf64e, 0xf7f4, 0xf63a, 0xf7ed, +0xf63a, 0xf7ed, 0xf5e1, 0xf7a5, 0xf5e1, 0xf7a5, 0xf56e, 0xf748, 0xf56e, 0xf748, 0xf56e, +0xf748, 0xf638, 0xf82d, 0xf638, 0xf82d, 0xf652, 0xf865, 0xf652, 0xf865, 0xf5f0, 0xf822, +0xf5f0, 0xf822, 0xf545, 0xf795, 0xf545, 0xf795, 0xf3c3, 0xf62f, 0xf3c3, 0xf62f, 0xf3c3, +0xf62f, 0xf2d4, 0xf558, 0xf2d4, 0xf558, 0xf2f9, 0xf58e, 0xf2f9, 0xf58e, 0xf178, 0xf416, +0xf178, 0xf416, 0xefd6, 0xf273, 0xefd6, 0xf273, 0xef72, 0xf204, 0xef72, 0xf204, 0xefc5, +0xf240, 0xefc5, 0xf240, 0xefc5, 0xf240, 0xee8a, 0xf0e3, 0xee8a, 0xf0e3, 0xec6c, 0xee96, +0xec6c, 0xee96, 0xeb31, 0xed22, 0xeb31, 0xed22, 0xebf1, 0xed9f, 0xebf1, 0xed9f, 0xedfb, +0xef5e, 0xedfb, 0xef5e, 0xef7d, 0xf08d, 0xef7d, 0xf08d, 0xef7d, 0xf08d, 0xf12f, 0xf1e7, +0xf12f, 0xf1e7, 0xf19f, 0xf1fc, 0xf19f, 0xf1fc, 0xf181, 0xf184, 0xf181, 0xf184, 0xf3de, +0xf389, 0xf3de, 0xf389, 0xf6cc, 0xf623, 0xf6cc, 0xf623, 0xf6cc, 0xf623, 0xf79d, 0xf6a6, +0xf79d, 0xf6a6, 0xf7ce, 0xf691, 0xf7ce, 0xf691, 0xf981, 0xf808, 0xf981, 0xf808, 0xfcf5, +0xfb4c, 0xfcf5, 0xfb4c, 0xfd0c, 0xfb3c, 0xfd0c, 0xfb3c, 0xfbd3, 0xf9ea, 0xfbd3, 0xf9ea, +0xfbd3, 0xf9ea, 0xfbb9, 0xf9c1, 0xfbb9, 0xf9c1, 0xfc1d, 0xfa22, 0xfc1d, 0xfa22, 0xfd4a, +0xfb54, 0xfd4a, 0xfb54, 0xfe85, 0xfc9f, 0xfe85, 0xfc9f, 0xfecc, 0xfcfc, 0xfecc, 0xfcfc, +0xfff6, 0xfe43, 0xfff6, 0xfe43, 0xfff6, 0xfe43, 0x58, 0xfec4, 0x58, 0xfec4, 0xffda, +0xfe69, 0xffda, 0xfe69, 0x1de, 0x8f, 0x1de, 0x8f, 0x250, 0x123, 0x250, 0x123, +0x21f, 0x112, 0x21f, 0x112, 0x21f, 0x112, 0x3a5, 0x2b4, 0x3a5, 0x2b4, 0x534, +0x45d, 0x534, 0x45d, 0x428, 0x367, 0x428, 0x367, 0x467, 0x3b7, 0x467, 0x3b7, +0x48e, 0x3ec, 0x48e, 0x3ec, 0x4ae, 0x418, 0x4ae, 0x418, 0x4ae, 0x418, 0x60e, +0x581, 0x60e, 0x581, 0x72d, 0x6a9, 0x72d, 0x6a9, 0x815, 0x799, 0x815, 0x799, +0x790, 0x71e, 0x790, 0x71e, 0x825, 0x7c0, 0x825, 0x7c0, 0x825, 0x7c0, 0xa0a, +0x9b5, 0xa0a, 0x9b5, 0xb32, 0xaf0, 0xb32, 0xaf0, 0xb36, 0xb0d, 0xb36, 0xb0d, +0xb16, 0xb0b, 0xb16, 0xb0b, 0xb74, 0xb8c, 0xb74, 0xb8c, 0xcb5, 0xcf5, 0xcb5, +0xcf5, 0xcb5, 0xcf5, 0xccc, 0xd39, 0xccc, 0xd39, 0xd15, 0xdb2, 0xd15, 0xdb2, +0xc91, 0xd60, 0xc91, 0xd60, 0xc2f, 0xd31, 0xc2f, 0xd31, 0xb07, 0xc3d, 0xb07, +0xc3d, 0x9bd, 0xb26, 0x9bd, 0xb26, 0x9bd, 0xb26, 0x92f, 0xac8, 0x92f, 0xac8, +0x698, 0x85d, 0x698, 0x85d, 0x53f, 0x72c, 0x53f, 0x72c, 0x659, 0x869, 0x659, +0x869, 0x5ad, 0x7da, 0x5ad, 0x7da, 0x5ad, 0x7da, 0x4f1, 0x734, 0x4f1, 0x734, +0x5c8, 0x81a, 0x5c8, 0x81a, 0x440, 0x69c, 0x440, 0x69c, 0x388, 0x5e9, 0x388, +0x5e9, 0x37f, 0x5df, 0x37f, 0x5df, 0x37b, 0x5d9, 0x37b, 0x5d9, 0x37b, 0x5d9, +0x2a4, 0x4fc, 0x2a4, 0x4fc, 0x121, 0x372, 0x121, 0x372, 0xb, 0x255, 0xb, +0x255, 0x17a, 0x3be, 0x17a, 0x3be, 0x1ef, 0x430, 0x1ef, 0x430, 0xfeca, 0x10a, +0xfeca, 0x10a, 0xfeca, 0x10a, 0xfb12, 0xfd56, 0xfb12, 0xfd56, 0xf9a3, 0xfbed, 0xf9a3, +0xfbed, 0xf977, 0xfbcb, 0xf977, 0xfbcb, 0xf831, 0xfa92, 0xf831, 0xfa92, 0xf688, 0xf8f7, +0xf688, 0xf8f7, 0xf688, 0xf8f7, 0xf347, 0xf5c5, 0xf347, 0xf5c5, 0xf0b5, 0xf342, 0xf0b5, +0xf342, 0xef37, 0xf1d1, 0xef37, 0xf1d1, 0xef2d, 0xf1cf, 0xef2d, 0xf1cf, 0xed37, 0xefda, +0xed37, 0xefda, 0xebfd, 0xee9a, 0xebfd, 0xee9a, 0xebfd, 0xee9a, 0xeb11, 0xed9e, 0xeb11, +0xed9e, 0xe97c, 0xebf0, 0xe97c, 0xebf0, 0xe8af, 0xeafb, 0xe8af, 0xeafb, 0xe7b0, 0xe9c9, +0xe7b0, 0xe9c9, 0xe6b0, 0xe887, 0xe6b0, 0xe887, 0xe728, 0xe8b1, 0xe728, 0xe8b1, 0xe728, +0xe8b1, 0xe965, 0xea92, 0xe965, 0xea92, 0xea40, 0xeb06, 0xea40, 0xeb06, 0xec27, 0xec7a, +0xec27, 0xec7a, 0xee04, 0xeddd, 0xee04, 0xeddd, 0xef22, 0xee79, 0xef22, 0xee79, 0xef22, +0xee79, 0xf078, 0xef4a, 0xf078, 0xef4a, 0xf33c, 0xf185, 0xf33c, 0xf185, 0xf64a, 0xf40d, +0xf64a, 0xf40d, 0xf9de, 0xf71f, 0xf9de, 0xf71f, 0xfd7a, 0xfa3d, 0xfd7a, 0xfa3d, 0x120, +0xfd70, 0x120, 0xfd70, 0x120, 0xfd70, 0x4b5, 0x9c, 0x4b5, 0x9c, 0x863, 0x3ee, +0x863, 0x3ee, 0xb3c, 0x678, 0xb3c, 0x678, 0xe60, 0x95c, 0xe60, 0x95c, 0x1320, +0xded, 0x1320, 0xded, 0x1663, 0x1110, 0x1663, 0x1110, 0x1663, 0x1110, 0x17e9, 0x1285, +0x17e9, 0x1285, 0x18f6, 0x138f, 0x18f6, 0x138f, 0x1a1e, 0x14c2, 0x1a1e, 0x14c2, 0x1afe, +0x15b9, 0x1afe, 0x15b9, 0x1c80, 0x175d, 0x1c80, 0x175d, 0x1c80, 0x175d, 0x1da0, 0x18a9, +0x1da0, 0x18a9, 0x1ed0, 0x1a0b, 0x1ed0, 0x1a0b, 0x1ea3, 0x1a15, 0x1ea3, 0x1a15, 0x1fba, +0x1b68, 0x1fba, 0x1b68, 0x1f9c, 0x1b88, 0x1f9c, 0x1b88, 0x1e1e, 0x1a4a, 0x1e1e, 0x1a4a, +0x1e1e, 0x1a4a, 0x1d09, 0x1974, 0x1d09, 0x1974, 0x1be0, 0x188a, 0x1be0, 0x188a, 0x1bc8, +0x18b1, 0x1bc8, 0x18b1, 0x1b8a, 0x18b0, 0x1b8a, 0x18b0, 0x1ab5, 0x1817, 0x1ab5, 0x1817, +0x1a70, 0x180e, 0x1a70, 0x180e, 0x1a70, 0x180e, 0x19a7, 0x177f, 0x19a7, 0x177f, 0x171f, +0x1531, 0x171f, 0x1531, 0x1707, 0x1555, 0x1707, 0x1555, 0x17e1, 0x166b, 0x17e1, 0x166b, +0x1732, 0x15f9, 0x1732, 0x15f9, 0x1732, 0x15f9, 0x139c, 0x12a1, 0x139c, 0x12a1, 0x12e3, +0x1228, 0x12e3, 0x1228, 0x1208, 0x118e, 0x1208, 0x118e, 0x108b, 0x1053, 0x108b, 0x1053, +0xde7, 0xdf2, 0xde7, 0xdf2, 0x9c1, 0xa0d, 0x9c1, 0xa0d, 0x9c1, 0xa0d, 0x7f3, +0x881, 0x7f3, 0x881, 0x673, 0x740, 0x673, 0x740, 0x4b4, 0x5bc, 0x4b4, 0x5bc, +0x283, 0x3c2, 0x283, 0x3c2, 0xf2, 0x263, 0xf2, 0x263, 0xfd2d, 0xfec9, 0xfd2d, +0xfec9, 0xfd2d, 0xfec9, 0xfc0a, 0xfdc9, 0xfc0a, 0xfdc9, 0xfc3e, 0xfe18, 0xfc3e, 0xfe18, +0xfaeb, 0xfcd8, 0xfaeb, 0xfcd8, 0xf88c, 0xfa83, 0xf88c, 0xfa83, 0xf721, 0xf91a, 0xf721, +0xf91a, 0xf721, 0xf91a, 0xf674, 0xf867, 0xf674, 0xf867, 0xf4b5, 0xf69b, 0xf4b5, 0xf69b, +0xf318, 0xf4eb, 0xf318, 0xf4eb, 0xf2c4, 0xf480, 0xf2c4, 0xf480, 0xf280, 0xf422, 0xf280, +0xf422, 0xf22c, 0xf3b2, 0xf22c, 0xf3b2, 0xf22c, 0xf3b2, 0xf221, 0xf38c, 0xf221, 0xf38c, +0xf171, 0xf2c2, 0xf171, 0xf2c2, 0xf11e, 0xf25a, 0xf11e, 0xf25a, 0xf031, 0xf15b, 0xf031, +0xf15b, 0xf071, 0xf191, 0xf071, 0xf191, 0xf00c, 0xf127, 0xf00c, 0xf127, 0xf00c, 0xf127, +0xefe7, 0xf105, 0xefe7, 0xf105, 0xef38, 0xf061, 0xef38, 0xf061, 0xef74, 0xf0ae, 0xef74, +0xf0ae, 0xf0a0, 0xf1f2, 0xf0a0, 0xf1f2, 0xef9d, 0xf10c, 0xef9d, 0xf10c, 0xef9d, 0xf10c, +0xee42, 0xefd3, 0xee42, 0xefd3, 0xee52, 0xf008, 0xee52, 0xf008, 0xee30, 0xf00b, 0xee30, +0xf00b, 0xedb0, 0xefaf, 0xedb0, 0xefaf, 0xed10, 0xef30, 0xed10, 0xef30, 0xebe7, 0xee23, +0xebe7, 0xee23, 0xebe7, 0xee23, 0xea7a, 0xeccb, 0xea7a, 0xeccb, 0xeb5c, 0xedbb, 0xeb5c, +0xedbb, 0xed27, 0xef8a, 0xed27, 0xef8a, 0xebce, 0xee2a, 0xebce, 0xee2a, 0xeaf5, 0xed40, +0xeaf5, 0xed40, 0xe9f2, 0xec21, 0xe9f2, 0xec21, 0xe9f2, 0xec21, 0xeb0b, 0xed13, 0xeb0b, +0xed13, 0xec93, 0xee69, 0xec93, 0xee69, 0xedba, 0xef56, 0xedba, 0xef56, 0xee8d, 0xefe6, +0xee8d, 0xefe6, 0xf05f, 0xf16f, 0xf05f, 0xf16f, 0xf05f, 0xf16f, 0xf220, 0xf2e3, 0xf220, +0xf2e3, 0xf361, 0xf3d4, 0xf361, 0xf3d4, 0xf60d, 0xf62f, 0xf60d, 0xf62f, 0xf92c, 0xf8fe, +0xf92c, 0xf8fe, 0xfacd, 0xfa54, 0xfacd, 0xfa54, 0xfc07, 0xfb45, 0xfc07, 0xfb45, 0xfc07, +0xfb45, 0xffca, 0xfec6, 0xffca, 0xfec6, 0xff, 0xffc1, 0xff, 0xffc1, 0x1ba, 0x4a, +0x1ba, 0x4a, 0x157, 0xffbd, 0x157, 0xffbd, 0x7f, 0xfec3, 0x7f, 0xfec3, 0x7f, +0xfec3, 0xbc, 0xfee7, 0xbc, 0xfee7, 0x409, 0x223, 0x409, 0x223, 0x621, 0x431, +0x621, 0x431, 0x772, 0x57f, 0x772, 0x57f, 0x90c, 0x71b, 0x90c, 0x71b, 0x90c, +0x722, 0x90c, 0x722, 0x90c, 0x722, 0xa85, 0x8a4, 0xa85, 0x8a4, 0xb29, 0x953, +0xb29, 0x953, 0xa31, 0x868, 0xa31, 0x868, 0x86b, 0x6af, 0x86b, 0x6af, 0x902, +0x754, 0x902, 0x754, 0x9ae, 0x80c, 0x9ae, 0x80c, 0x9ae, 0x80c, 0x993, 0x7fd, +0x993, 0x7fd, 0x864, 0x6da, 0x864, 0x6da, 0x82f, 0x6b1, 0x82f, 0x6b1, 0x80e, +0x69b, 0x80e, 0x69b, 0x887, 0x721, 0x887, 0x721, 0x887, 0x721, 0x908, 0x7b0, +0x908, 0x7b0, 0x888, 0x741, 0x888, 0x741, 0x88d, 0x75a, 0x88d, 0x75a, 0x984, +0x86a, 0x984, 0x86a, 0xa2c, 0x92f, 0xa2c, 0x92f, 0x9d9, 0x8fe, 0x9d9, 0x8fe, +0x9d9, 0x8fe, 0x949, 0x896, 0x949, 0x896, 0x7c8, 0x742, 0x7c8, 0x742, 0x7e9, +0x796, 0x7e9, 0x796, 0x8e0, 0x8c4, 0x8e0, 0x8c4, 0x9fc, 0xa1b, 0x9fc, 0xa1b, +0x85d, 0x8bb, 0x85d, 0x8bb, 0x85d, 0x8bb, 0x69c, 0x73a, 0x69c, 0x73a, 0x621, +0x701, 0x621, 0x701, 0x596, 0x6b7, 0x596, 0x6b7, 0x494, 0x5f4, 0x494, 0x5f4, +0x311, 0x4ae, 0x311, 0x4ae, 0x311, 0x4ae, 0x64, 0x23a, 0x64, 0x23a, 0xff80, +0x189, 0xff80, 0x189, 0xff95, 0x1cc, 0xff95, 0x1cc, 0xfe55, 0xb3, 0xfe55, 0xb3, +0xfd55, 0xffd2, 0xfd55, 0xffd2, 0xfc5c, 0xfef3, 0xfc5c, 0xfef3, 0xfc5c, 0xfef3, 0xfbe2, +0xfe8a, 0xfbe2, 0xfe8a, 0xfc61, 0xff15, 0xfc61, 0xff15, 0xfcef, 0xffa9, 0xfcef, 0xffa9, +0xfb25, 0xfde1, 0xfb25, 0xfde1, 0xfb32, 0xfdeb, 0xfb32, 0xfdeb, 0xfbeb, 0xfe9f, 0xfbeb, +0xfe9f, 0xfbeb, 0xfe9f, 0xfd14, 0xffc2, 0xfd14, 0xffc2, 0xfc34, 0xfeda, 0xfc34, 0xfeda, +0xfb70, 0xfe0e, 0xfb70, 0xfe0e, 0xf98c, 0xfc24, 0xf98c, 0xfc24, 0xf77f, 0xfa13, 0xf77f, +0xfa13, 0xf77f, 0xfa13, 0xf70d, 0xf99e, 0xf70d, 0xf99e, 0xf5a5, 0xf835, 0xf5a5, 0xf835, +0xf5b8, 0xf84a, 0xf5b8, 0xf84a, 0xf40a, 0xf69e, 0xf40a, 0xf69e, 0xf125, 0xf3bb, 0xf125, +0xf3bb, 0xef81, 0xf21a, 0xef81, 0xf21a, 0xef81, 0xf21a, 0xef98, 0xf230, 0xef98, 0xf230, +0xee21, 0xf0b6, 0xee21, 0xf0b6, 0xecf7, 0xef83, 0xecf7, 0xef83, 0xeaee, 0xed6c, 0xeaee, +0xed6c, 0xe967, 0xebd0, 0xe967, 0xebd0, 0xe944, 0xeb8e, 0xe944, 0xeb8e, 0xe944, 0xeb8e, +0xe9e1, 0xec03, 0xe9e1, 0xec03, 0xe93e, 0xeb2c, 0xe93e, 0xeb2c, 0xe8c1, 0xea72, 0xe8c1, +0xea72, 0xe978, 0xeae0, 0xe978, 0xeae0, 0xeb27, 0xec3b, 0xeb27, 0xec3b, 0xeb27, 0xec3b, +0xee7b, 0xef31, 0xee7b, 0xef31, 0xf03d, 0xf08d, 0xf03d, 0xf08d, 0xf1db, 0xf1bc, 0xf1db, +0xf1bc, 0xf342, 0xf2ad, 0xf342, 0xf2ad, 0xf5ab, 0xf49d, 0xf5ab, 0xf49d, 0xf7e5, 0xf65b, +0xf7e5, 0xf65b, 0xf7e5, 0xf65b, 0xfb13, 0xf90d, 0xfb13, 0xf90d, 0xfdb1, 0xfb31, 0xfdb1, +0xfb31, 0x1b0, 0xfebb, 0x1b0, 0xfebb, 0x5b3, 0x24f, 0x5b3, 0x24f, 0x934, 0x568, +0x934, 0x568, 0xc42, 0x819, 0xc42, 0x819, 0xc42, 0x819, 0xe41, 0x9c6, 0xe41, +0x9c6, 0x11e4, 0xd23, 0x11e4, 0xd23, 0x15f0, 0x10f6, 0x15f0, 0x10f6, 0x1948, 0x1423, +0x1948, 0x1423, 0x1b54, 0x1611, 0x1b54, 0x1611, 0x1b54, 0x1611, 0x1c6d, 0x1719, 0x1c6d, +0x1719, 0x1d7a, 0x1822, 0x1d7a, 0x1822, 0x1e76, 0x1926, 0x1e76, 0x1926, 0x1eb7, 0x1979, +0x1eb7, 0x1979, 0x1f97, 0x1a75, 0x1f97, 0x1a75, 0x1f6a, 0x1a6d, 0x1f6a, 0x1a6d, 0x1f6a, +0x1a6d, 0x20f0, 0x1c1d, 0x20f0, 0x1c1d, 0x2071, 0x1bcf, 0x2071, 0x1bcf, 0x1f9e, 0x1b32, +0x1f9e, 0x1b32, 0x1ec4, 0x1a91, 0x1ec4, 0x1a91, 0x1cea, 0x18f4, 0x1cea, 0x18f4, 0x1bab, +0x17f2, 0x1bab, 0x17f2, 0x1bab, 0x17f2, 0x1b1c, 0x17a3, 0x1b1c, 0x17a3, 0x1afd, 0x17c3, +0x1afd, 0x17c3, 0x1a5e, 0x1766, 0x1a5e, 0x1766, 0x1a21, 0x176b, 0x1a21, 0x176b, 0x18bd, +0x1649, 0x18bd, 0x1649, 0x18bd, 0x1649, 0x17c4, 0x1594, 0x17c4, 0x1594, 0x1677, 0x148c, +0x1677, 0x148c, 0x15b3, 0x140e, 0x15b3, 0x140e, 0x13a5, 0x1246, 0x13a5, 0x1246, 0x1378, +0x1262, 0x1378, 0x1262, 0x1340, 0x1272, 0x1340, 0x1272, 0x1340, 0x1272, 0x1189, 0x1106, +0x1189, 0x1106, 0xef7, 0xebf, 0xef7, 0xebf, 0xca7, 0xcb9, 0xca7, 0xcb9, 0x9f2, +0xa4e, 0x9f2, 0xa4e, 0x87d, 0x921, 0x87d, 0x921, 0x79c, 0x886, 0x79c, 0x886, +0x79c, 0x886, 0x509, 0x635, 0x509, 0x635, 0x444, 0x5ae, 0x444, 0x5ae, 0x2a8, +0x44b, 0x2a8, 0x44b, 0xfc, 0x2d2, 0xfc, 0x2d2, 0xff20, 0x122, 0xff20, 0x122, +0xff20, 0x122, 0xfe46, 0x6c, 0xfe46, 0x6c, 0xfbf0, 0xfe31, 0xfbf0, 0xfe31, 0xfa65, +0xfcba, 0xfa65, 0xfcba, 0xf943, 0xfba4, 0xf943, 0xfba4, 0xf7b7, 0xfa1d, 0xf7b7, 0xfa1d, +0xf6b2, 0xf915, 0xf6b2, 0xf915, 0xf6b2, 0xf915, 0xf63f, 0xf89a, 0xf63f, 0xf89a, 0xf531, +0xf77e, 0xf531, 0xf77e, 0xf50e, 0xf74a, 0xf50e, 0xf74a, 0xf5ab, 0xf7d4, 0xf5ab, 0xf7d4, +0xf594, 0xf7a8, 0xf594, 0xf7a8, 0xf4c9, 0xf6c9, 0xf4c9, 0xf6c9, 0xf4c9, 0xf6c9, 0xf2ca, +0xf4b8, 0xf2ca, 0xf4b8, 0xf343, 0xf521, 0xf343, 0xf521, 0xf2e7, 0xf4bb, 0xf2e7, 0xf4bb, +0xf234, 0xf402, 0xf234, 0xf402, 0xf0d5, 0xf2a4, 0xf0d5, 0xf2a4, 0xf0d5, 0xf2a4, 0xf0de, +0xf2b3, 0xf0de, 0xf2b3, 0xf121, 0xf302, 0xf121, 0xf302, 0xf183, 0xf376, 0xf183, 0xf376, +0xf0cd, 0xf2d6, 0xf0cd, 0xf2d6, 0xef3a, 0xf15e, 0xef3a, 0xf15e, 0xeee2, 0xf124, 0xeee2, +0xf124, 0xeee2, 0xf124, 0xeed2, 0xf133, 0xeed2, 0xf133, 0xee54, 0xf0d4, 0xee54, 0xf0d4, +0xee2a, 0xf0c7, 0xee2a, 0xf0c7, 0xec3e, 0xeef5, 0xec3e, 0xeef5, 0xe9a9, 0xec75, 0xe9a9, +0xec75, 0xe9a9, 0xec75, 0xea00, 0xecda, 0xea00, 0xecda, 0xe95c, 0xec3c, 0xe95c, 0xec3c, +0xe859, 0xeb36, 0xe859, 0xeb36, 0xe76b, 0xea3a, 0xe76b, 0xea3a, 0xe832, 0xeaea, 0xe832, +0xeaea, 0xe801, 0xea96, 0xe801, 0xea96, 0xe801, 0xea96, 0xe8f4, 0xeb5b, 0xe8f4, 0xeb5b, +0xe892, 0xeac2, 0xe892, 0xeac2, 0xe957, 0xeb46, 0xe957, 0xeb46, 0xeadf, 0xec83, 0xeadf, +0xec83, 0xeb93, 0xece6, 0xeb93, 0xece6, 0xed30, 0xee2d, 0xed30, 0xee2d, 0xed30, 0xee2d, +0xef11, 0xefb3, 0xef11, 0xefb3, 0xf1cf, 0xf215, 0xf1cf, 0xf215, 0xf2cf, 0xf2b7, 0xf2cf, +0xf2b7, 0xf577, 0xf502, 0xf577, 0xf502, 0xf80f, 0xf740, 0xf80f, 0xf740, 0xf80f, 0xf740, +0xf988, 0xf863, 0xf988, 0xf863, 0xf9f0, 0xf87a, 0xf9f0, 0xf87a, 0xfa82, 0xf8c1, 0xfa82, +0xf8c1, 0xfaaf, 0xf8aa, 0xfaaf, 0xf8aa, 0xfc3e, 0xf9fd, 0xfc3e, 0xf9fd, 0xfd03, 0xfa8e, +0xfd03, 0xfa8e, 0xfd03, 0xfa8e, 0xfe87, 0xfbe5, 0xfe87, 0xfbe5, 0xffbf, 0xfcf9, 0xffbf, +0xfcf9, 0x159, 0xfe74, 0x159, 0xfe74, 0x322, 0x28, 0x322, 0x28, 0x42b, 0x122, +0x42b, 0x122, 0x564, 0x251, 0x564, 0x251, 0x564, 0x251, 0x52d, 0x216, 0x52d, +0x216, 0x6ff, 0x3ea, 0x6ff, 0x3ea, 0x82d, 0x51e, 0x82d, 0x51e, 0x8a7, 0x5a2, +0x8a7, 0x5a2, 0x845, 0x54f, 0x845, 0x54f, 0x845, 0x54f, 0x922, 0x63f, 0x922, +0x63f, 0x8a3, 0x5d6, 0x8a3, 0x5d6, 0x85a, 0x5a8, 0x85a, 0x5a8, 0x845, 0x5b3, +0x845, 0x5b3, 0x906, 0x699, 0x906, 0x699, 0xa88, 0x844, 0xa88, 0x844, 0xa88, +0x844, 0xb77, 0x962, 0xb77, 0x962, 0xc9b, 0xaba, 0xc9b, 0xaba, 0xd95, 0xbee, +0xd95, 0xbee, 0xd71, 0xc0a, 0xd71, 0xc0a, 0xcb0, 0xb8f, 0xcb0, 0xb8f, 0xd72, +0xc9c, 0xd72, 0xc9c, 0xd72, 0xc9c, 0xe80, 0xdfa, 0xe80, 0xdfa, 0x106b, 0x103a, +0x106b, 0x103a, 0x10a1, 0x10c7, 0x10a1, 0x10c7, 0xf76, 0xff7, 0xf76, 0xff7, 0xd68, +0xe45, 0xd68, 0xe45, 0xd68, 0xe45, 0xca9, 0xde1, 0xca9, 0xde1, 0xb9d, 0xd30, +0xb9d, 0xd30, 0xb9a, 0xd84, 0xb9a, 0xd84, 0x916, 0xb54, 0x916, 0xb54, 0x6c1, +0x94c, 0x6c1, 0x94c, 0x665, 0x937, 0x665, 0x937, 0x665, 0x937, 0x536, 0x848, +0x536, 0x848, 0x3b0, 0x6f8, 0x3b0, 0x6f8, 0x22e, 0x5a4, 0x22e, 0x5a4, 0x1ab, +0x544, 0x1ab, 0x544, 0x108, 0x4bc, 0x108, 0x4bc, 0xf7, 0x4bb, 0xf7, 0x4bb, +0xf7, 0x4bb, 0xff79, 0x343, 0xff79, 0x343, 0xff6e, 0x338, 0xff6e, 0x338, 0xfeca, +0x28a, 0xfeca, 0x28a, 0xfdd3, 0x182, 0xfdd3, 0x182, 0xfc1d, 0xffb6, 0xfc1d, 0xffb6, +0xfc1d, 0xffb6, 0xfcd8, 0x56, 0xfcd8, 0x56, 0xfc42, 0xffa1, 0xfc42, 0xffa1, 0xfa0c, +0xfd4b, 0xfa0c, 0xfd4b, 0xf8f2, 0xfc0d, 0xf8f2, 0xfc0d, 0xf787, 0xfa7f, 0xf787, 0xfa7f, +0xf617, 0xf8ec, 0xf617, 0xf8ec, 0xf617, 0xf8ec, 0xf455, 0xf707, 0xf455, 0xf707, 0xf1b7, +0xf447, 0xf1b7, 0xf447, 0xeefd, 0xf16b, 0xeefd, 0xf16b, 0xee16, 0xf062, 0xee16, 0xf062, +0xec70, 0xee9a, 0xec70, 0xee9a, 0xec4a, 0xee52, 0xec4a, 0xee52, 0xec4a, 0xee52, 0xead8, +0xecbc, 0xead8, 0xecbc, 0xe907, 0xeac4, 0xe907, 0xeac4, 0xe654, 0xe7e8, 0xe654, 0xe7e8, +0xe623, 0xe789, 0xe623, 0xe789, 0xe582, 0xe6b5, 0xe582, 0xe6b5, 0xe582, 0xe6b5, 0xe470, +0xe56a, 0xe470, 0xe56a, 0xe466, 0xe521, 0xe466, 0xe521, 0xe533, 0xe5a8, 0xe533, 0xe5a8, +0xe6b8, 0xe6e0, 0xe6b8, 0xe6e0, 0xe790, 0xe764, 0xe790, 0xe764, 0xeb10, 0xea8a, 0xeb10, +0xea8a, 0xeb10, 0xea8a, 0xedd5, 0xecef, 0xedd5, 0xecef, 0xefab, 0xee60, 0xefab, 0xee60, +0xf0f9, 0xef46, 0xf0f9, 0xef46, 0xf37b, 0xf15e, 0xf37b, 0xf15e, 0xf70f, 0xf487, 0xf70f, +0xf487, 0xfbcf, 0xf8de, 0xfbcf, 0xf8de, 0xfbcf, 0xf8de, 0xfe76, 0xfb1d, 0xfe76, 0xfb1d, +0x1de, 0xfe23, 0x1de, 0xfe23, 0x5cb, 0x1b4, 0x5cb, 0x1b4, 0x931, 0x4c5, 0x931, +0x4c5, 0xc1d, 0x766, 0xc1d, 0x766, 0xc1d, 0x766, 0xf80, 0xa88, 0xf80, 0xa88, +0x1337, 0xe09, 0x1337, 0xe09, 0x1627, 0x10d0, 0x1627, 0x10d0, 0x1903, 0x138f, 0x1903, +0x138f, 0x1bc9, 0x1644, 0x1bc9, 0x1644, 0x1da7, 0x181d, 0x1da7, 0x181d, 0x1da7, 0x181d, +0x1ece, 0x194c, 0x1ece, 0x194c, 0x222b, 0x1cbb, 0x222b, 0x1cbb, 0x22cb, 0x1d77, 0x22cb, +0x1d77, 0x2374, 0x1e46, 0x2374, 0x1e46, 0x2476, 0x1f76, 0x2476, 0x1f76, 0x2578, 0x20ad, +0x2578, 0x20ad, 0x2578, 0x20ad, 0x249a, 0x200a, 0x249a, 0x200a, 0x2359, 0x1f09, 0x2359, +0x1f09, 0x2196, 0x1d8a, 0x2196, 0x1d8a, 0x2156, 0x1d91, 0x2156, 0x1d91, 0x21de, 0x1e61, +0x21de, 0x1e61, 0x21de, 0x1e61, 0x2066, 0x1d33, 0x2066, 0x1d33, 0x1f43, 0x1c5b, 0x1f43, +0x1c5b, 0x1f01, 0x1c65, 0x1f01, 0x1c65, 0x1e80, 0x1c2f, 0x1e80, 0x1c2f, 0x1c26, 0x1a21, +0x1c26, 0x1a21, 0x1be7, 0x1a2e, 0x1be7, 0x1a2e, 0x1be7, 0x1a2e, 0x1a90, 0x1924, 0x1a90, +0x1924, 0x1890, 0x1770, 0x1890, 0x1770, 0x1776, 0x16a4, 0x1776, 0x16a4, 0x16fb, 0x1676, +0x16fb, 0x1676, 0x146a, 0x1433, 0x146a, 0x1433, 0x127a, 0x1291, 0x127a, 0x1291, 0x127a, +0x1291, 0xf7c, 0xfe0, 0xf7c, 0xfe0, 0xd2b, 0xddd, 0xd2b, 0xddd, 0xabc, 0xbba, +0xabc, 0xbba, 0x81f, 0x967, 0x81f, 0x967, 0x677, 0x806, 0x677, 0x806, 0x677, +0x806, 0x45f, 0x632, 0x45f, 0x632, 0x2ae, 0x4c1, 0x2ae, 0x4c1, 0xff6a, 0x1b8, +0xff6a, 0x1b8, 0xfe6b, 0xed, 0xfe6b, 0xed, 0xfc1e, 0xfecd, 0xfc1e, 0xfecd, 0xfa83, +0xfd59, 0xfa83, 0xfd59, 0xfa83, 0xfd59, 0xf87f, 0xfb74, 0xf87f, 0xfb74, 0xf6bb, 0xf9c5, +0xf6bb, 0xf9c5, 0xf49d, 0xf7b5, 0xf49d, 0xf7b5, 0xf262, 0xf581, 0xf262, 0xf581, 0xf137, +0xf455, 0xf137, 0xf455, 0xf137, 0xf455, 0xf07c, 0xf391, 0xf07c, 0xf391, 0xef3b, 0xf242, +0xef3b, 0xf242, 0xeea2, 0xf196, 0xeea2, 0xf196, 0xef3c, 0xf219, 0xef3c, 0xf219, 0xef7f, +0xf244, 0xef7f, 0xf244, 0xeffa, 0xf2a4, 0xeffa, 0xf2a4, 0xeffa, 0xf2a4, 0xeeac, 0xf13d, +0xeeac, 0xf13d, 0xecbb, 0xef35, 0xecbb, 0xef35, 0xebd5, 0xee3a, 0xebd5, 0xee3a, 0xed45, +0xef98, 0xed45, 0xef98, 0xedc4, 0xf00a, 0xedc4, 0xf00a, 0xee37, 0xf075, 0xee37, 0xf075, +0xee37, 0xf075, 0xecc9, 0xef04, 0xecc9, 0xef04, 0xece6, 0xef24, 0xece6, 0xef24, 0xedcd, +0xf012, 0xedcd, 0xf012, 0xee67, 0xf0b7, 0xee67, 0xf0b7, 0xed5f, 0xefbe, 0xed5f, 0xefbe, +0xed5f, 0xefbe, 0xebe7, 0xee55, 0xebe7, 0xee55, 0xebb1, 0xee31, 0xebb1, 0xee31, 0xea16, +0xeca6, 0xea16, 0xeca6, 0xe8e3, 0xeb80, 0xe8e3, 0xeb80, 0xe7ec, 0xea93, 0xe7ec, 0xea93, +0xe825, 0xead0, 0xe825, 0xead0, 0xe825, 0xead0, 0xe873, 0xeb1c, 0xe873, 0xeb1c, 0xe8b7, +0xeb55, 0xe8b7, 0xeb55, 0xe7e8, 0xea73, 0xe7e8, 0xea73, 0xe84a, 0xeaba, 0xe84a, 0xeaba, +0xe8e6, 0xeb30, 0xe8e6, 0xeb30, 0xea69, 0xec84, 0xea69, 0xec84, 0xea69, 0xec84, 0xeb2d, +0xed10, 0xeb2d, 0xed10, 0xed84, 0xef26, 0xed84, 0xef26, 0xefab, 0xf106, 0xefab, 0xf106, +0xf1fb, 0xf307, 0xf1fb, 0xf307, 0xf4b1, 0xf56a, 0xf4b1, 0xf56a, 0xf4b1, 0xf56a, 0xf5e1, +0xf642, 0xf5e1, 0xf642, 0xf813, 0xf81c, 0xf813, 0xf81c, 0xfaa8, 0xfa58, 0xfaa8, 0xfa58, +0xfd27, 0xfc80, 0xfd27, 0xfc80, 0xfea3, 0xfda7, 0xfea3, 0xfda7, 0x33, 0xfee7, 0x33, +0xfee7, 0x33, 0xfee7, 0x28, 0xfe90, 0x28, 0xfe90, 0x1ce, 0xfff2, 0x1ce, 0xfff2, +0x279, 0x60, 0x279, 0x60, 0x3e5, 0x196, 0x3e5, 0x196, 0x506, 0x289, 0x506, +0x289, 0x796, 0x4f4, 0x796, 0x4f4, 0x796, 0x4f4, 0x982, 0x6c1, 0x982, 0x6c1, +0x9ab, 0x6d4, 0x9ab, 0x6d4, 0xab1, 0x7cb, 0xab1, 0x7cb, 0xac6, 0x7d6, 0xac6, +0x7d6, 0xb2d, 0x839, 0xb2d, 0x839, 0xb2d, 0x839, 0xa82, 0x790, 0xa82, 0x790, +0xa78, 0x78c, 0xa78, 0x78c, 0xab0, 0x7ce, 0xab0, 0x7ce, 0xc5d, 0x988, 0xc5d, +0x988, 0xc87, 0x9c2, 0xc87, 0x9c2, 0xb76, 0x8c5, 0xb76, 0x8c5, 0xb76, 0x8c5, +0xa8e, 0x7f3, 0xa8e, 0x7f3, 0xa5d, 0x7db, 0xa5d, 0x7db, 0x9d6, 0x771, 0x9d6, +0x771, 0xae1, 0x89b, 0xae1, 0x89b, 0xadd, 0x8ba, 0xadd, 0x8ba, 0xa29, 0x82d, +0xa29, 0x82d, 0xa29, 0x82d, 0x97e, 0x7ad, 0x97e, 0x7ad, 0x993, 0x7f3, 0x993, +0x7f3, 0x9e8, 0x87d, 0x9e8, 0x87d, 0x892, 0x760, 0x892, 0x760, 0x912, 0x81d, +0x912, 0x81d, 0x912, 0x81d, 0x8ea, 0x838, 0x8ea, 0x838, 0x8b9, 0x84c, 0x8b9, +0x84c, 0x87c, 0x859, 0x87c, 0x859, 0x890, 0x8b8, 0x890, 0x8b8, 0x6a6, 0x71a, +0x6a6, 0x71a, 0x5ea, 0x6ac, 0x5ea, 0x6ac, 0x5ea, 0x6ac, 0x4f2, 0x600, 0x4f2, +0x600, 0x3c9, 0x523, 0x3c9, 0x523, 0x2e6, 0x487, 0x2e6, 0x487, 0xaf, 0x292, +0xaf, 0x292, 0xfea7, 0xc8, 0xfea7, 0xc8, 0xfe89, 0xe1, 0xfe89, 0xe1, 0xfe89, +0xe1, 0xfe96, 0x11e, 0xfe96, 0x11e, 0xfdf1, 0xa2, 0xfdf1, 0xa2, 0xfd7e, 0x50, +0xfd7e, 0x50, 0xfd4c, 0x37, 0xfd4c, 0x37, 0xfd4c, 0x47, 0xfd4c, 0x47, 0xfd4c, +0x47, 0xfc23, 0xff28, 0xfc23, 0xff28, 0xfc2f, 0xff37, 0xfc2f, 0xff37, 0xfa45, 0xfd49, +0xfa45, 0xfd49, 0xfa57, 0xfd52, 0xfa57, 0xfd52, 0xfa37, 0xfd25, 0xfa37, 0xfd25, 0xf8b8, +0xfb95, 0xf8b8, 0xfb95, 0xf8b8, 0xfb95, 0xf6a3, 0xf96d, 0xf6a3, 0xf96d, 0xf63c, 0xf8f3, +0xf63c, 0xf8f3, 0xf5c3, 0xf864, 0xf5c3, 0xf864, 0xf4aa, 0xf736, 0xf4aa, 0xf736, 0xf36f, +0xf5e7, 0xf36f, 0xf5e7, 0xf1c6, 0xf42a, 0xf1c6, 0xf42a, 0xf1c6, 0xf42a, 0xf1ff, 0xf44e, +0xf1ff, 0xf44e, 0xf104, 0xf340, 0xf104, 0xf340, 0xefe5, 0xf20e, 0xefe5, 0xf20e, 0xeda7, +0xefbc, 0xeda7, 0xefbc, 0xec8f, 0xee8e, 0xec8f, 0xee8e, 0xec8f, 0xee8e, 0xeaa1, 0xec88, +0xeaa1, 0xec88, 0xe970, 0xeb3c, 0xe970, 0xeb3c, 0xe7e7, 0xe993, 0xe7e7, 0xe993, 0xe76b, +0xe8f1, 0xe76b, 0xe8f1, 0xe78a, 0xe8e3, 0xe78a, 0xe8e3, 0xe7fb, 0xe921, 0xe7fb, 0xe921, +0xe7fb, 0xe921, 0xe904, 0xe9ee, 0xe904, 0xe9ee, 0xe99f, 0xea46, 0xe99f, 0xea46, 0xeb94, +0xebf1, 0xeb94, 0xebf1, 0xee39, 0xee43, 0xee39, 0xee43, 0xef71, 0xef21, 0xef71, 0xef21, +0xf054, 0xefa4, 0xf054, 0xefa4, 0xf054, 0xefa4, 0xf339, 0xf223, 0xf339, 0xf223, 0xf5bb, +0xf43b, 0xf5bb, 0xf43b, 0xf995, 0xf7a9, 0xf995, 0xf7a9, 0xfc13, 0xf9bb, 0xfc13, 0xf9bb, +0xff75, 0xfcb3, 0xff75, 0xfcb3, 0xff75, 0xfcb3, 0x323, 0xfff9, 0x323, 0xfff9, 0x793, +0x406, 0x793, 0x406, 0xb1f, 0x735, 0xb1f, 0x735, 0xe50, 0xa13, 0xe50, 0xa13, +0x11ac, 0xd24, 0x11ac, 0xd24, 0x14db, 0x1013, 0x14db, 0x1013, 0x14db, 0x1013, 0x17da, +0x12de, 0x17da, 0x12de, 0x1a42, 0x151e, 0x1a42, 0x151e, 0x1c6b, 0x172b, 0x1c6b, 0x172b, +0x1d15, 0x17c7, 0x1d15, 0x17c7, 0x1f65, 0x1a14, 0x1f65, 0x1a14, 0x202a, 0x1ae1, 0x202a, +0x1ae1, 0x202a, 0x1ae1, 0x2016, 0x1ae1, 0x2016, 0x1ae1, 0x2096, 0x1b7f, 0x2096, 0x1b7f, +0x2105, 0x1c14, 0x2105, 0x1c14, 0x2118, 0x1c56, 0x2118, 0x1c56, 0x214c, 0x1cbf, 0x214c, +0x1cbf, 0x214c, 0x1cbf, 0x2042, 0x1bef, 0x2042, 0x1bef, 0x2036, 0x1c21, 0x2036, 0x1c21, +0x1e97, 0x1ac3, 0x1e97, 0x1ac3, 0x1d8d, 0x19fe, 0x1d8d, 0x19fe, 0x1d02, 0x19b8, 0x1d02, +0x19b8, 0x1cf0, 0x19ed, 0x1cf0, 0x19ed, 0x1cf0, 0x19ed, 0x1c9b, 0x19df, 0x1c9b, 0x19df, +0x1a94, 0x181f, 0x1a94, 0x181f, 0x1a8c, 0x185f, 0x1a8c, 0x185f, 0x1969, 0x1784, 0x1969, +0x1784, 0x1903, 0x1766, 0x1903, 0x1766, 0x1903, 0x1766, 0x1874, 0x1720, 0x1874, 0x1720, +0x1835, 0x1729, 0x1835, 0x1729, 0x16ae, 0x15eb, 0x16ae, 0x15eb, 0x15ae, 0x1533, 0x15ae, +0x1533, 0x1387, 0x1356, 0x1387, 0x1356, 0x1105, 0x111e, 0x1105, 0x111e, 0x1105, 0x111e, +0xe1a, 0xe7b, 0xe1a, 0xe7b, 0xb9d, 0xc46, 0xb9d, 0xc46, 0x97d, 0xa6e, 0x97d, +0xa6e, 0x79a, 0x8d0, 0x79a, 0x8d0, 0x6a3, 0x81b, 0x6a3, 0x81b, 0x49e, 0x655, +0x49e, 0x655, 0x49e, 0x655, 0x3d4, 0x5c6, 0x3d4, 0x5c6, 0x1e5, 0x40d, 0x1e5, +0x40d, 0xffeb, 0x242, 0xffeb, 0x242, 0xfebe, 0x13f, 0xfebe, 0x13f, 0xfe40, 0xe4, +0xfe40, 0xe4, 0xfe40, 0xe4, 0xfc1d, 0xfedd, 0xfc1d, 0xfedd, 0xfa52, 0xfd26, 0xfa52, +0xfd26, 0xf87a, 0xfb5c, 0xf87a, 0xfb5c, 0xf786, 0xfa6f, 0xf786, 0xfa6f, 0xf597, 0xf881, +0xf597, 0xf881, 0xf509, 0xf7ee, 0xf509, 0xf7ee, 0xf509, 0xf7ee, 0xf50d, 0xf7e8, 0xf50d, +0xf7e8, 0xf4ef, 0xf7bc, 0xf4ef, 0xf7bc, 0xf5ab, 0xf868, 0xf5ab, 0xf868, 0xf3e1, 0xf68e, +0xf3e1, 0xf68e, 0xf1f3, 0xf48e, 0xf1f3, 0xf48e, 0xf04a, 0xf2d5, 0xf04a, 0xf2d5, 0xf04a, +0xf2d5, 0xf051, 0xf2cd, 0xf051, 0xf2cd, 0xef74, 0xf1e5, 0xef74, 0xf1e5, 0xef58, 0xf1c2, +0xef58, 0xf1c2, 0xef5e, 0xf1c3, 0xef5e, 0xf1c3, 0xef08, 0xf16e, 0xef08, 0xf16e, 0xef08, +0xf16e, 0xee41, 0xf0ab, 0xee41, 0xf0ab, 0xee11, 0xf083, 0xee11, 0xf083, 0xec76, 0xeef4, +0xec76, 0xeef4, 0xeb1a, 0xeda6, 0xeb1a, 0xeda6, 0xebb9, 0xee53, 0xebb9, 0xee53, 0xebb0, +0xee59, 0xebb0, 0xee59, 0xebb0, 0xee59, 0xeaf8, 0xedaf, 0xeaf8, 0xedaf, 0xea79, 0xed3b, +0xea79, 0xed3b, 0xe8ec, 0xebb7, 0xe8ec, 0xebb7, 0xe81e, 0xeaeb, 0xe81e, 0xeaeb, 0xe83c, +0xeb06, 0xe83c, 0xeb06, 0xe6c7, 0xe986, 0xe6c7, 0xe986, 0xe6c7, 0xe986, 0xe653, 0xe8ff, +0xe653, 0xe8ff, 0xe599, 0xe82b, 0xe599, 0xe82b, 0xe636, 0xe8a4, 0xe636, 0xe8a4, 0xe610, +0xe851, 0xe610, 0xe851, 0xe869, 0xea77, 0xe869, 0xea77, 0xe869, 0xea77, 0xe922, 0xeaf4, +0xe922, 0xeaf4, 0xe90b, 0xea9b, 0xe90b, 0xea9b, 0xeb40, 0xec88, 0xeb40, 0xec88, 0xeda4, +0xeea1, 0xeda4, 0xeea1, 0xf079, 0xf127, 0xf079, 0xf127, 0xf2b0, 0xf30e, 0xf2b0, 0xf30e, +0xf2b0, 0xf30e, 0xf3df, 0xf3ef, 0xf3df, 0xf3ef, 0xf4ee, 0xf4b0, 0xf4ee, 0xf4b0, 0xf7cf, +0xf746, 0xf7cf, 0xf746, 0xfa07, 0xf938, 0xfa07, 0xf938, 0xfbd0, 0xfac0, 0xfbd0, 0xfac0, +0xfbbe, 0xfa74, 0xfbbe, 0xfa74, 0xfbbe, 0xfa74, 0xfc63, 0xfae6, 0xfc63, 0xfae6, 0xfdce, +0xfc24, 0xfdce, 0xfc24, 0xfb, 0xff2c, 0xfb, 0xff2c, 0x2e2, 0xf5, 0x2e2, 0xf5, +0x3dc, 0x1d7, 0x3dc, 0x1d7, 0x3dc, 0x1d7, 0x4fd, 0x2e8, 0x4fd, 0x2e8, 0x6db, +0x4ba, 0x6db, 0x4ba, 0x77e, 0x557, 0x77e, 0x557, 0x736, 0x50d, 0x736, 0x50d, +0x877, 0x64f, 0x877, 0x64f, 0x8f6, 0x6d2, 0x8f6, 0x6d2, 0x8f6, 0x6d2, 0x952, +0x733, 0x952, 0x733, 0x97d, 0x766, 0x97d, 0x766, 0xa88, 0x878, 0xa88, 0x878, +0x9d2, 0x7cb, 0x9d2, 0x7cb, 0x9e5, 0x7e8, 0x9e5, 0x7e8, 0x9a0, 0x7ac, 0x9a0, +0x7ac, 0x9a0, 0x7ac, 0xafe, 0x916, 0xafe, 0x916, 0xd1c, 0xb40, 0xd1c, 0xb40, +0xe45, 0xc76, 0xe45, 0xc76, 0xeaf, 0xcf0, 0xeaf, 0xcf0, 0xf5f, 0xdb4, 0xf5f, +0xdb4, 0xf5f, 0xdb4, 0x102e, 0xe99, 0x102e, 0xe99, 0xfe7, 0xe6c, 0xfe7, 0xe6c, +0x1026, 0xec8, 0x1026, 0xec8, 0x1059, 0xf1d, 0x1059, 0xf1d, 0x106e, 0xf59, 0x106e, +0xf59, 0x10b5, 0xfcc, 0x10b5, 0xfcc, 0x10b5, 0xfcc, 0x11b7, 0x10fc, 0x11b7, 0x10fc, +0x1052, 0xfcb, 0x1052, 0xfcb, 0xe7e, 0xe2e, 0xe7e, 0xe2e, 0xd78, 0xd61, 0xd78, +0xd61, 0xb9f, 0xbc3, 0xb9f, 0xbc3, 0x8cd, 0x92e, 0x8cd, 0x92e, 0x8cd, 0x92e, +0x748, 0x7e5, 0x748, 0x7e5, 0x57a, 0x653, 0x57a, 0x653, 0x4fd, 0x60f, 0x4fd, +0x60f, 0x353, 0x49c, 0x353, 0x49c, 0x1d6, 0x353, 0x1d6, 0x353, 0x1d6, 0x353, +0xf4, 0x2a0, 0xf4, 0x2a0, 0xffdc, 0x1b3, 0xffdc, 0x1b3, 0xff95, 0x191, 0xff95, +0x191, 0xfea6, 0xc3, 0xfea6, 0xc3, 0xff96, 0x1d0, 0xff96, 0x1d0, 0xfde7, 0x37, +0xfde7, 0x37, 0xfde7, 0x37, 0xfc10, 0xfe74, 0xfc10, 0xfe74, 0xfb10, 0xfd83, 0xfb10, +0xfd83, 0xf9a1, 0xfc1f, 0xf9a1, 0xfc1f, 0xf839, 0xfac0, 0xf839, 0xfac0, 0xf71c, 0xf9aa, +0xf71c, 0xf9aa, 0xf479, 0xf70c, 0xf479, 0xf70c, 0xf479, 0xf70c, 0xf2ea, 0xf580, 0xf2ea, +0xf580, 0xf1c2, 0xf45a, 0xf1c2, 0xf45a, 0xefff, 0xf298, 0xefff, 0xf298, 0xee07, 0xf0a0, +0xee07, 0xf0a0, 0xeb9c, 0xee34, 0xeb9c, 0xee34, 0xeb9c, 0xee34, 0xe976, 0xec0b, 0xe976, +0xec0b, 0xe895, 0xeb24, 0xe895, 0xeb24, 0xe8c8, 0xeb4f, 0xe8c8, 0xeb4f, 0xe692, 0xe90c, +0xe692, 0xe90c, 0xe476, 0xe6df, 0xe476, 0xe6df, 0xe28c, 0xe4de, 0xe28c, 0xe4de, 0xe28c, +0xe4de, 0xe224, 0xe459, 0xe224, 0xe459, 0xe18d, 0xe39d, 0xe18d, 0xe39d, 0xe227, 0xe40a, +0xe227, 0xe40a, 0xe28b, 0xe438, 0xe28b, 0xe438, 0xe382, 0xe4ef, 0xe382, 0xe4ef, 0xe502, +0xe626, 0xe502, 0xe626, 0xe502, 0xe626, 0xe736, 0xe807, 0xe736, 0xe807, 0xe9ef, 0xea65, +0xe9ef, 0xea65, 0xec1d, 0xec2f, 0xec1d, 0xec2f, 0xefc4, 0xef6b, 0xefc4, 0xef6b, 0xf19e, +0xf0d5, 0xf19e, 0xf0d5, 0xf19e, 0xf0d5, 0xf40f, 0xf2d1, 0xf40f, 0xf2d1, 0xf73e, 0xf589, +0xf73e, 0xf589, 0xfa90, 0xf863, 0xfa90, 0xf863, 0xfe31, 0xfb8c, 0xfe31, 0xfb8c, 0x208, +0xfef0, 0x208, 0xfef0, 0x50a, 0x183, 0x50a, 0x183, 0x50a, 0x183, 0x853, 0x464, +0x853, 0x464, 0xc4c, 0x7ff, 0xc4c, 0x7ff, 0x1020, 0xb7e, 0x1020, 0xb7e, 0x1298, +0xdae, 0x1298, 0xdae, 0x164f, 0x1129, 0x164f, 0x1129, 0x164f, 0x1129, 0x1abb, 0x1566, +0x1abb, 0x1566, 0x1de7, 0x1871, 0x1de7, 0x1871, 0x20b2, 0x1b28, 0x20b2, 0x1b28, 0x22f5, +0x1d66, 0x22f5, 0x1d66, 0x242c, 0x1ea5, 0x242c, 0x1ea5, 0x2565, 0x1ff1, 0x2565, 0x1ff1, +0x2565, 0x1ff1, 0x2657, 0x2103, 0x2657, 0x2103, 0x25ba, 0x208f, 0x25ba, 0x208f, 0x26aa, +0x21b2, 0x26aa, 0x21b2, 0x2689, 0x21cb, 0x2689, 0x21cb, 0x269f, 0x2220, 0x269f, 0x2220, +0x2597, 0x215d, 0x2597, 0x215d, 0x2597, 0x215d, 0x245a, 0x2069, 0x245a, 0x2069, 0x22a6, +0x1f00, 0x22a6, 0x1f00, 0x20d6, 0x1d7d, 0x20d6, 0x1d7d, 0x2095, 0x1d89, 0x2095, 0x1d89, +0x1f00, 0x1c41, 0x1f00, 0x1c41, 0x1f00, 0x1c41, 0x1df0, 0x1b7e, 0x1df0, 0x1b7e, 0x1dec, +0x1bc6, 0x1dec, 0x1bc6, 0x1cc5, 0x1aea, 0x1cc5, 0x1aea, 0x1b60, 0x19d0, 0x1b60, 0x19d0, +0x19dd, 0x1894, 0x19dd, 0x1894, 0x17cf, 0x16cf, 0x17cf, 0x16cf, 0x17cf, 0x16cf, 0x1778, +0x16be, 0x1778, 0x16be, 0x16ee, 0x1678, 0x16ee, 0x1678, 0x159c, 0x156b, 0x159c, 0x156b, +0x1256, 0x1269, 0x1256, 0x1269, 0xf48, 0xf9c, 0xf48, 0xf9c, 0xb44, 0xbd8, 0xb44, +0xbd8, 0xb44, 0xbd8, 0x8c4, 0x996, 0x8c4, 0x996, 0x76f, 0x87e, 0x76f, 0x87e, +0x4c2, 0x60a, 0x4c2, 0x60a, 0x210, 0x38e, 0x210, 0x38e, 0xffce, 0x17f, 0xffce, +0x17f, 0xffce, 0x17f, 0xfeb8, 0x97, 0xfeb8, 0x97, 0xfcd6, 0xfedd, 0xfcd6, 0xfedd, +0xfadb, 0xfd06, 0xfadb, 0xfd06, 0xf7b7, 0xf9ff, 0xf7b7, 0xf9ff, 0xf588, 0xf7e8, 0xf588, +0xf7e8, 0xf3c8, 0xf63a, 0xf3c8, 0xf63a, 0xf3c8, 0xf63a, 0xf2bd, 0xf53a, 0xf2bd, 0xf53a, +0xf0c7, 0xf34a, 0xf0c7, 0xf34a, 0xeea2, 0xf125, 0xeea2, 0xf125, 0xee86, 0xf103, 0xee86, +0xf103, 0xeed4, 0xf148, 0xeed4, 0xf148, 0xeeeb, 0xf153, 0xeeeb, 0xf153, 0xeeeb, 0xf153, +0xee83, 0xf0dd, 0xee83, 0xf0dd, 0xedb6, 0xf000, 0xedb6, 0xf000, 0xed30, 0xef6a, 0xed30, +0xef6a, 0xedaa, 0xefd4, 0xedaa, 0xefd4, 0xedf1, 0xf00e, 0xedf1, 0xf00e, 0xedf1, 0xf00e, +0xede2, 0xeff4, 0xede2, 0xeff4, 0xee4a, 0xf054, 0xee4a, 0xf054, 0xeeec, 0xf0f0, 0xeeec, +0xf0f0, 0xeeb2, 0xf0b6, 0xeeb2, 0xf0b6, 0xef1f, 0xf126, 0xef1f, 0xf126, 0xef24, 0xf132, +0xef24, 0xf132, 0xef24, 0xf132, 0xee2e, 0xf045, 0xee2e, 0xf045, 0xecf8, 0xef1b, 0xecf8, +0xef1b, 0xecdf, 0xef10, 0xecdf, 0xef10, 0xebba, 0xedf9, 0xebba, 0xedf9, 0xeac9, 0xed16, +0xeac9, 0xed16, 0xea30, 0xec88, 0xea30, 0xec88, 0xea30, 0xec88, 0xe936, 0xeb98, 0xe936, +0xeb98, 0xe924, 0xeb8a, 0xe924, 0xeb8a, 0xe933, 0xeb99, 0xe933, 0xeb99, 0xea5d, 0xecbd, +0xea5d, 0xecbd, 0xea68, 0xecbb, 0xea68, 0xecbb, 0xea68, 0xecbb, 0xea7a, 0xecb9, 0xea7a, +0xecb9, 0xeb4d, 0xed71, 0xeb4d, 0xed71, 0xed2b, 0xef2c, 0xed2b, 0xef2c, 0xeed4, 0xf0ab, +0xeed4, 0xf0ab, 0xeee7, 0xf08d, 0xeee7, 0xf08d, 0xefbe, 0xf12d, 0xefbe, 0xf12d, 0xefbe, +0xf12d, 0xf253, 0xf385, 0xf253, 0xf385, 0xf51f, 0xf612, 0xf51f, 0xf612, 0xf840, 0xf8f1, +0xf840, 0xf8f1, 0xf955, 0xf9c2, 0xf955, 0xf9c2, 0xfa50, 0xfa7a, 0xfa50, 0xfa7a, 0xfc41, +0xfc2a, 0xfc41, 0xfc2a, 0xfc41, 0xfc2a, 0xfde9, 0xfd93, 0xfde9, 0xfd93, 0xff34, 0xfea4, +0xff34, 0xfea4, 0xff57, 0xfe92, 0xff57, 0xfe92, 0xfffb, 0xff06, 0xfffb, 0xff06, 0x91, +0xff72, 0x91, 0xff72, 0x91, 0xff72, 0x35b, 0x219, 0x35b, 0x219, 0x53a, 0x3dd, +0x53a, 0x3dd, 0x660, 0x4ee, 0x660, 0x4ee, 0x757, 0x5d6, 0x757, 0x5d6, 0x873, +0x6ea, 0x873, 0x6ea, 0x99b, 0x80e, 0x99b, 0x80e, 0x99b, 0x80e, 0xa54, 0x8c8, +0xa54, 0x8c8, 0xb4d, 0x9c6, 0xb4d, 0x9c6, 0xabc, 0x93c, 0xabc, 0x93c, 0xaf8, +0x982, 0xaf8, 0x982, 0xbb3, 0xa48, 0xbb3, 0xa48, 0xc2f, 0xace, 0xc2f, 0xace, +0xc2f, 0xace, 0xbae, 0xa58, 0xbae, 0xa58, 0xad5, 0x98a, 0xad5, 0x98a, 0xa6f, +0x92f, 0xa6f, 0x92f, 0xa91, 0x959, 0xa91, 0x959, 0xa9d, 0x96f, 0xa9d, 0x96f, +0xa9d, 0x96f, 0xa34, 0x90f, 0xa34, 0x90f, 0x92f, 0x813, 0x92f, 0x813, 0x902, +0x7f0, 0x902, 0x7f0, 0xa12, 0x90b, 0xa12, 0x90b, 0xa8d, 0x993, 0xa8d, 0x993, +0x9ab, 0x8c1, 0x9ab, 0x8c1, 0x9ab, 0x8c1, 0x914, 0x83d, 0x914, 0x83d, 0x929, +0x868, 0x929, 0x868, 0x987, 0x8e0, 0x987, 0x8e0, 0xa36, 0x9ae, 0xa36, 0x9ae, +0x9d9, 0x973, 0x9d9, 0x973, 0x91a, 0x8da, 0x91a, 0x8da, 0x91a, 0x8da, 0x87f, +0x869, 0x87f, 0x869, 0x83a, 0x852, 0x83a, 0x852, 0x6cf, 0x718, 0x6cf, 0x718, +0x5d6, 0x651, 0x5d6, 0x651, 0x4c4, 0x572, 0x4c4, 0x572, 0x4c4, 0x572, 0x37b, +0x45e, 0x37b, 0x45e, 0x23e, 0x354, 0x23e, 0x354, 0xc0, 0x209, 0xc0, 0x209, +0x17, 0x191, 0x17, 0x191, 0xfeea, 0x91, 0xfeea, 0x91, 0xfd4b, 0xff1e, 0xfd4b, +0xff1e, 0xfd4b, 0xff1e, 0xfbc5, 0xfdbf, 0xfbc5, 0xfdbf, 0xfb8b, 0xfda8, 0xfb8b, 0xfda8, +0xfbed, 0xfe2a, 0xfbed, 0xfe2a, 0xfa3c, 0xfc94, 0xfa3c, 0xfc94, 0xf865, 0xfad4, 0xf865, +0xfad4, 0xf73c, 0xf9bf, 0xf73c, 0xf9bf, 0xf73c, 0xf9bf, 0xf66a, 0xf8fd, 0xf66a, 0xf8fd, +0xf6c3, 0xf964, 0xf6c3, 0xf964, 0xf513, 0xf7bf, 0xf513, 0xf7bf, 0xf3c2, 0xf675, 0xf3c2, +0xf675, 0xf33a, 0xf5f4, 0xf33a, 0xf5f4, 0xf33a, 0xf5f4, 0xf355, 0xf613, 0xf355, 0xf613, +0xf28d, 0xf54f, 0xf28d, 0xf54f, 0xf0b8, 0xf37c, 0xf0b8, 0xf37c, 0xeeaf, 0xf173, 0xeeaf, +0xf173, 0xec73, 0xef34, 0xec73, 0xef34, 0xec6f, 0xef2c, 0xec6f, 0xef2c, 0xec6f, 0xef2c, +0xeb62, 0xee18, 0xeb62, 0xee18, 0xe96f, 0xec19, 0xe96f, 0xec19, 0xe6d4, 0xe96e, 0xe6d4, +0xe96e, 0xe550, 0xe7d5, 0xe550, 0xe7d5, 0xe46e, 0xe6d8, 0xe46e, 0xe6d8, 0xe46e, 0xe6d8, +0xe3ce, 0xe615, 0xe3ce, 0xe615, 0xe466, 0xe682, 0xe466, 0xe682, 0xe502, 0xe6eb, 0xe502, +0xe6eb, 0xe546, 0xe6f3, 0xe546, 0xe6f3, 0xe5ce, 0xe736, 0xe5ce, 0xe736, 0xe746, 0xe860, +0xe746, 0xe860, 0xe746, 0xe860, 0xe91d, 0xe9e0, 0xe91d, 0xe9e0, 0xeb5b, 0xebbf, 0xeb5b, +0xebbf, 0xed8d, 0xed8a, 0xed8d, 0xed8a, 0xefd9, 0xef69, 0xefd9, 0xef69, 0xf344, 0xf261, +0xf344, 0xf261, 0xf759, 0xf601, 0xf759, 0xf601, 0xf759, 0xf601, 0xfa90, 0xf8c1, 0xfa90, +0xf8c1, 0xfe30, 0xfbe8, 0xfe30, 0xfbe8, 0x25e, 0xffa1, 0x25e, 0xffa1, 0x65c, 0x32d, +0x65c, 0x32d, 0x95c, 0x5c1, 0x95c, 0x5c1, 0x95c, 0x5c1, 0xcab, 0x8aa, 0xcab, +0x8aa, 0xfee, 0xb91, 0xfee, 0xb91, 0x1388, 0xeda, 0x1388, 0xeda, 0x177c, 0x1287, +0x177c, 0x1287, 0x1982, 0x1453, 0x1982, 0x1453, 0x1a7c, 0x151f, 0x1a7c, 0x151f, 0x1a7c, +0x151f, 0x1cc5, 0x1749, 0x1cc5, 0x1749, 0x1fcc, 0x1a3d, 0x1fcc, 0x1a3d, 0x20a5, 0x1b0f, +0x20a5, 0x1b0f, 0x209c, 0x1b0d, 0x209c, 0x1b0d, 0x20f7, 0x1b79, 0x20f7, 0x1b79, 0x2229, +0x1cc7, 0x2229, 0x1cc7, 0x2229, 0x1cc7, 0x2320, 0x1de3, 0x2320, 0x1de3, 0x2366, 0x1e56, +0x2366, 0x1e56, 0x236a, 0x1e8f, 0x236a, 0x1e8f, 0x22ce, 0x1e2d, 0x22ce, 0x1e2d, 0x21e0, +0x1d7d, 0x21e0, 0x1d7d, 0x21e0, 0x1d7d, 0x211c, 0x1cfb, 0x211c, 0x1cfb, 0x20d9, 0x1cfc, +0x20d9, 0x1cfc, 0x209b, 0x1d04, 0x209b, 0x1d04, 0x1f6d, 0x1c1b, 0x1f6d, 0x1c1b, 0x1f59, +0x1c4e, 0x1f59, 0x1c4e, 0x1ee6, 0x1c20, 0x1ee6, 0x1c20, 0x1ee6, 0x1c20, 0x1e5b, 0x1bda, +0x1e5b, 0x1bda, 0x1e03, 0x1bc6, 0x1e03, 0x1bc6, 0x1c0d, 0x1a14, 0x1c0d, 0x1a14, 0x1aa2, +0x18eb, 0x1aa2, 0x18eb, 0x18f6, 0x1780, 0x18f6, 0x1780, 0x1857, 0x1722, 0x1857, 0x1722, +0x1857, 0x1722, 0x164e, 0x155a, 0x164e, 0x155a, 0x130c, 0x1256, 0x130c, 0x1256, 0xf41, +0xeca, 0xf41, 0xeca, 0xc8f, 0xc56, 0xc8f, 0xc56, 0xc43, 0xc46, 0xc43, 0xc46, +0xc43, 0xc46, 0xb27, 0xb65, 0xb27, 0xb65, 0x95f, 0x9d5, 0x95f, 0x9d5, 0x735, +0x7e1, 0x735, 0x7e1, 0x666, 0x745, 0x666, 0x745, 0x55f, 0x66f, 0x55f, 0x66f, +0x322, 0x45d, 0x322, 0x45d, 0x322, 0x45d, 0xe5, 0x247, 0xe5, 0x247, 0xfe61, +0xffe4, 0xfe61, 0xffe4, 0xfc25, 0xfdc5, 0xfc25, 0xfdc5, 0xfb13, 0xfcc9, 0xfb13, 0xfcc9, +0xf9ae, 0xfb75, 0xf9ae, 0xfb75, 0xf7f9, 0xf9ca, 0xf7f9, 0xf9ca, 0xf7f9, 0xf9ca, 0xf6e9, +0xf8c0, 0xf6e9, 0xf8c0, 0xf5e6, 0xf7bd, 0xf5e6, 0xf7bd, 0xf452, 0xf625, 0xf452, 0xf625, +0xf3c5, 0xf58f, 0xf3c5, 0xf58f, 0xf324, 0xf4e4, 0xf324, 0xf4e4, 0xf324, 0xf4e4, 0xf1e7, +0xf399, 0xf1e7, 0xf399, 0xf141, 0xf2e5, 0xf141, 0xf2e5, 0xefe4, 0xf179, 0xefe4, 0xf179, +0xeea9, 0xf031, 0xeea9, 0xf031, 0xed87, 0xef05, 0xed87, 0xef05, 0xecfc, 0xee71, 0xecfc, +0xee71, 0xecfc, 0xee71, 0xecf6, 0xee67, 0xecf6, 0xee67, 0xed62, 0xeed1, 0xed62, 0xeed1, +0xee2c, 0xef9e, 0xee2c, 0xef9e, 0xedf5, 0xef6f, 0xedf5, 0xef6f, 0xece9, 0xee6f, 0xece9, +0xee6f, 0xecd6, 0xee6b, 0xecd6, 0xee6b, 0xecd6, 0xee6b, 0xed12, 0xeeb9, 0xed12, 0xeeb9, +0xec0c, 0xedc8, 0xec0c, 0xedc8, 0xea77, 0xec48, 0xea77, 0xec48, 0xe90b, 0xeaf2, 0xe90b, +0xeaf2, 0xe88a, 0xea87, 0xe88a, 0xea87, 0xe88a, 0xea87, 0xe8e9, 0xeaf9, 0xe8e9, 0xeaf9, +0xe81f, 0xea3f, 0xe81f, 0xea3f, 0xe63a, 0xe865, 0xe63a, 0xe865, 0xe4ce, 0xe700, 0xe4ce, +0xe700, 0xe4d9, 0xe70b, 0xe4d9, 0xe70b, 0xe5f0, 0xe81c, 0xe5f0, 0xe81c, 0xe5f0, 0xe81c, +0xe714, 0xe932, 0xe714, 0xe932, 0xe6df, 0xe8e9, 0xe6df, 0xe8e9, 0xe6b4, 0xe8a3, 0xe6b4, +0xe8a3, 0xe972, 0xeb3f, 0xe972, 0xeb3f, 0xeb64, 0xed0a, 0xeb64, 0xed0a, 0xed8a, 0xef03, +0xed8a, 0xef03, 0xed8a, 0xef03, 0xef71, 0xf0ba, 0xef71, 0xf0ba, 0xf0e4, 0xf1f9, 0xf0e4, +0xf1f9, 0xf38b, 0xf46b, 0xf38b, 0xf46b, 0xf5f2, 0xf69d, 0xf5f2, 0xf69d, 0xf8b4, 0xf92a, +0xf8b4, 0xf92a, 0xf8b4, 0xf92a, 0xfa81, 0xfac3, 0xfa81, 0xfac3, 0xfc29, 0xfc3b, 0xfc29, +0xfc3b, 0xfd2a, 0xfd0f, 0xfd2a, 0xfd0f, 0xfe77, 0xfe33, 0xfe77, 0xfe33, 0x14e, 0xe7, +0x14e, 0xe7, 0x3ca, 0x345, 0x3ca, 0x345, 0x3ca, 0x345, 0x4b3, 0x415, 0x4b3, +0x415, 0x4eb, 0x439, 0x4eb, 0x439, 0x687, 0x5c7, 0x687, 0x5c7, 0x806, 0x73c, +0x806, 0x73c, 0x8d4, 0x804, 0x8d4, 0x804, 0x9e0, 0x90d, 0x9e0, 0x90d, 0x9e0, +0x90d, 0x9e2, 0x910, 0x9e2, 0x910, 0x9f3, 0x924, 0x9f3, 0x924, 0xb3c, 0xa71, +0xb3c, 0xa71, 0xc82, 0xbbc, 0xc82, 0xbbc, 0xcd6, 0xc17, 0xcd6, 0xc17, 0xcd6, +0xc17, 0xcff, 0xc46, 0xcff, 0xc46, 0xd2d, 0xc7b, 0xd2d, 0xc7b, 0xcf6, 0xc4a, +0xcf6, 0xc4a, 0xde2, 0xd3e, 0xde2, 0xd3e, 0xe22, 0xd86, 0xe22, 0xd86, 0xe58, +0xdc4, 0xe58, 0xdc4, 0xe58, 0xdc4, 0x1009, 0xf7f, 0x1009, 0xf7f, 0x1105, 0x1087, +0x1105, 0x1087, 0x115c, 0x10ed, 0x115c, 0x10ed, 0x118d, 0x1130, 0x118d, 0x1130, 0x11cc, +0x1183, 0x11cc, 0x1183, 0x113b, 0x110c, 0x113b, 0x110c, 0x113b, 0x110c, 0x10db, 0x10c8, +0x10db, 0x10c8, 0x10fd, 0x110c, 0x10fd, 0x110c, 0xffe, 0x1032, 0xffe, 0x1032, 0xebb, +0xf18, 0xebb, 0xf18, 0xd05, 0xd8f, 0xd05, 0xd8f, 0xd05, 0xd8f, 0xb3b, 0xbf4, +0xb3b, 0xbf4, 0x908, 0x9f3, 0x908, 0x9f3, 0x67b, 0x79a, 0x67b, 0x79a, 0x479, +0x5ca, 0x479, 0x5ca, 0x2c1, 0x445, 0x2c1, 0x445, 0x199, 0x34f, 0x199, 0x34f, +0x199, 0x34f, 0xa8, 0x28c, 0xa8, 0x28c, 0xff1d, 0x12c, 0xff1d, 0x12c, 0xfd09, +0xff3f, 0xfd09, 0xff3f, 0xfc3c, 0xfe93, 0xfc3c, 0xfe93, 0xfc13, 0xfe86, 0xfc13, 0xfe86, +0xfc13, 0xfe86, 0xfbf4, 0xfe7d, 0xfbf4, 0xfe7d, 0xfa57, 0xfcf0, 0xfa57, 0xfcf0, 0xf810, +0xfab2, 0xf810, 0xfab2, 0xf761, 0xfa07, 0xf761, 0xfa07, 0xf674, 0xf919, 0xf674, 0xf919, +0xf4e6, 0xf785, 0xf4e6, 0xf785, 0xf4e6, 0xf785, 0xf24d, 0xf4e1, 0xf24d, 0xf4e1, 0xf04b, +0xf2d1, 0xf04b, 0xf2d1, 0xef26, 0xf19b, 0xef26, 0xf19b, 0xee93, 0xf0f5, 0xee93, 0xf0f5, +0xeda7, 0xeff4, 0xeda7, 0xeff4, 0xeb1f, 0xed57, 0xeb1f, 0xed57, 0xeb1f, 0xed57, 0xe963, +0xeb86, 0xe963, 0xeb86, 0xe7c3, 0xe9d1, 0xe7c3, 0xe9d1, 0xe6a5, 0xe89d, 0xe6a5, 0xe89d, +0xe699, 0xe87b, 0xe699, 0xe87b, 0xe5ff, 0xe7cb, 0xe5ff, 0xe7cb, 0xe5ff, 0xe7cb, 0xe4aa, +0xe660, 0xe4aa, 0xe660, 0xe323, 0xe4c2, 0xe323, 0xe4c2, 0xe26a, 0xe3f0, 0xe26a, 0xe3f0, +0xe1f2, 0xe35c, 0xe1f2, 0xe35c, 0xe23e, 0xe389, 0xe23e, 0xe389, 0xe2e8, 0xe410, 0xe2e8, +0xe410, 0xe2e8, 0xe410, 0xe28e, 0xe390, 0xe28e, 0xe390, 0xe32c, 0xe401, 0xe32c, 0xe401, +0xe570, 0xe613, 0xe570, 0xe613, 0xe86b, 0xe8d5, 0xe86b, 0xe8d5, 0xea92, 0xeabe, 0xea92, +0xeabe, 0xec50, 0xec36, 0xec50, 0xec36, 0xec50, 0xec36, 0xeea0, 0xee3d, 0xeea0, 0xee3d, +0xf115, 0xf062, 0xf115, 0xf062, 0xf488, 0xf381, 0xf488, 0xf381, 0xf72b, 0xf5cc, 0xf72b, +0xf5cc, 0xf995, 0xf7dc, 0xf995, 0xf7dc, 0xf995, 0xf7dc, 0xfd46, 0xfb32, 0xfd46, 0xfb32, +0x15b, 0xfeec, 0x15b, 0xfeec, 0x552, 0x28a, 0x552, 0x28a, 0x899, 0x57c, 0x899, +0x57c, 0xc6c, 0x8fe, 0xc6c, 0x8fe, 0x1045, 0xc8c, 0x1045, 0xc8c, 0x1045, 0xc8c, +0x14a5, 0x10a9, 0x14a5, 0x10a9, 0x1865, 0x142e, 0x1865, 0x142e, 0x1af8, 0x168e, 0x1af8, +0x168e, 0x1e57, 0x19c4, 0x1e57, 0x19c4, 0x2139, 0x1c87, 0x2139, 0x1c87, 0x23af, 0x1ee8, +0x23af, 0x1ee8, 0x23af, 0x1ee8, 0x252e, 0x205d, 0x252e, 0x205d, 0x2604, 0x2131, 0x2604, +0x2131, 0x26f6, 0x222c, 0x26f6, 0x222c, 0x27cf, 0x2315, 0x27cf, 0x2315, 0x2868, 0x23c6, +0x2868, 0x23c6, 0x2868, 0x23c6, 0x28a2, 0x241f, 0x28a2, 0x241f, 0x2818, 0x23bb, 0x2818, +0x23bb, 0x265e, 0x222b, 0x265e, 0x222b, 0x24aa, 0x20a5, 0x24aa, 0x20a5, 0x2371, 0x1f9e, +0x2371, 0x1f9e, 0x2297, 0x1ef8, 0x2297, 0x1ef8, 0x2297, 0x1ef8, 0x2131, 0x1dc8, 0x2131, +0x1dc8, 0x1fef, 0x1cbd, 0x1fef, 0x1cbd, 0x1f12, 0x1c18, 0x1f12, 0x1c18, 0x1e7f, 0x1bbd, +0x1e7f, 0x1bbd, 0x1e1c, 0x1b93, 0x1e1c, 0x1b93, 0x1cac, 0x1a5b, 0x1cac, 0x1a5b, 0x1cac, +0x1a5b, 0x1b2a, 0x1912, 0x1b2a, 0x1912, 0x1a29, 0x184b, 0x1a29, 0x184b, 0x1a0a, 0x1865, +0x1a0a, 0x1865, 0x18ca, 0x175e, 0x18ca, 0x175e, 0x159d, 0x146b, 0x159d, 0x146b, 0x159d, +0x146b, 0x12c6, 0x11cd, 0x12c6, 0x11cd, 0x1021, 0xf62, 0x1021, 0xf62, 0xdaf, 0xd29, +0xdaf, 0xd29, 0xb03, 0xab6, 0xb03, 0xab6, 0x771, 0x75e, 0x771, 0x75e, 0x417, +0x43b, 0x417, 0x43b, 0x417, 0x43b, 0x247, 0x2a1, 0x247, 0x2a1, 0x10d, 0x19a, +0x10d, 0x19a, 0xfea4, 0xff63, 0xfea4, 0xff63, 0xfca3, 0xfd8f, 0xfca3, 0xfd8f, 0xfae8, +0xfbfe, 0xfae8, 0xfbfe, 0xf7ee, 0xf92a, 0xf7ee, 0xf92a, 0xf7ee, 0xf92a, 0xf57a, 0xf6d7, +0xf57a, 0xf6d7, 0xf3c4, 0xf53d, 0xf3c4, 0xf53d, 0xf233, 0xf3c4, 0xf233, 0xf3c4, 0xf0a7, +0xf24a, 0xf0a7, 0xf24a, 0xef78, 0xf128, 0xef78, 0xf128, 0xef78, 0xf128, 0xee18, 0xefd0, +0xee18, 0xefd0, 0xed88, 0xef45, 0xed88, 0xef45, 0xeebc, 0xf079, 0xeebc, 0xf079, 0xeea3, +0xf05d, 0xeea3, 0xf05d, 0xee58, 0xf00d, 0xee58, 0xf00d, 0xee1a, 0xefc9, 0xee1a, 0xefc9, +0xee1a, 0xefc9, 0xedf0, 0xef99, 0xedf0, 0xef99, 0xee07, 0xefa9, 0xee07, 0xefa9, 0xed77, +0xef14, 0xed77, 0xef14, 0xed5e, 0xeef7, 0xed5e, 0xeef7, 0xed71, 0xef08, 0xed71, 0xef08, +0xeed9, 0xf072, 0xeed9, 0xf072, 0xeed9, 0xf072, 0xef35, 0xf0d3, 0xef35, 0xf0d3, 0xee21, +0xefc7, 0xee21, 0xefc7, 0xed8c, 0xef3c, 0xed8c, 0xef3c, 0xecfb, 0xeeb8, 0xecfb, 0xeeb8, +0xec9e, 0xee6b, 0xec9e, 0xee6b, 0xec9e, 0xee6b, 0xeb92, 0xed71, 0xeb92, 0xed71, 0xeb0b, +0xecfd, 0xeb0b, 0xecfd, 0xeb1a, 0xed1e, 0xeb1a, 0xed1e, 0xeb5a, 0xed71, 0xeb5a, 0xed71, +0xebd1, 0xedf7, 0xebd1, 0xedf7, 0xeb82, 0xedb6, 0xeb82, 0xedb6, 0xeb82, 0xedb6, 0xeb04, +0xed43, 0xeb04, 0xed43, 0xead4, 0xed18, 0xead4, 0xed18, 0xeadf, 0xed23, 0xeadf, 0xed23, +0xebde, 0xee1d, 0xebde, 0xee1d, 0xed37, 0xef6a, 0xed37, 0xef6a, 0xee3d, 0xf05e, 0xee3d, +0xf05e, 0xee3d, 0xf05e, 0xefc9, 0xf1d1, 0xefc9, 0xf1d1, 0xf141, 0xf32a, 0xf141, 0xf32a, +0xf2b4, 0xf477, 0xf2b4, 0xf477, 0xf476, 0xf60e, 0xf476, 0xf60e, 0xf672, 0xf7d9, 0xf672, +0xf7d9, 0xf672, 0xf7d9, 0xf7dd, 0xf90f, 0xf7dd, 0xf90f, 0xf8dd, 0xf9d6, 0xf8dd, 0xf9d6, +0xfaf4, 0xfbb2, 0xfaf4, 0xfbb2, 0xfcce, 0xfd4e, 0xfcce, 0xfd4e, 0xfd5e, 0xfd9f, 0xfd5e, +0xfd9f, 0xfdb5, 0xfdb8, 0xfdb5, 0xfdb8, 0xfdb5, 0xfdb8, 0xfe98, 0xfe5e, 0xfe98, 0xfe5e, +0xdb, 0x64, 0xdb, 0x64, 0x42a, 0x379, 0x42a, 0x379, 0x663, 0x57a, 0x663, +0x57a, 0x7a2, 0x686, 0x7a2, 0x686, 0x950, 0x804, 0x950, 0x804, 0x950, 0x804, +0xadf, 0x968, 0xadf, 0x968, 0xb49, 0x9ab, 0xb49, 0x9ab, 0xbd0, 0xa10, 0xbd0, +0xa10, 0xcb6, 0xada, 0xcb6, 0xada, 0xd15, 0xb21, 0xd15, 0xb21, 0xd15, 0xb21, +0xdc0, 0xbba, 0xdc0, 0xbba, 0xe5e, 0xc4b, 0xe5e, 0xc4b, 0xe33, 0xc19, 0xe33, +0xc19, 0xdca, 0xbaf, 0xdca, 0xbaf, 0xdfb, 0xbe3, 0xdfb, 0xbe3, 0xcc1, 0xab3, +0xcc1, 0xab3, 0xcc1, 0xab3, 0xb72, 0x973, 0xb72, 0x973, 0xb83, 0x99a, 0xb83, +0x99a, 0xb2d, 0x95f, 0xb2d, 0x95f, 0xb89, 0x9dc, 0xb89, 0x9dc, 0xba4, 0xa1e, +0xba4, 0xa1e, 0xba4, 0xa1e, 0xbf2, 0xa98, 0xbf2, 0xa98, 0xc42, 0xb1b, 0xc42, +0xb1b, 0xc3b, 0xb4b, 0xc3b, 0xb4b, 0xb9f, 0xaea, 0xb9f, 0xaea, 0xa75, 0xa00, +0xa75, 0xa00, 0xae3, 0xab1, 0xae3, 0xab1, 0xae3, 0xab1, 0xab4, 0xac8, 0xab4, +0xac8, 0xa32, 0xa8d, 0xa32, 0xa8d, 0x9a0, 0xa44, 0x9a0, 0xa44, 0x930, 0xa1d, +0x930, 0xa1d, 0x982, 0xab7, 0x982, 0xab7, 0x825, 0x99e, 0x825, 0x99e, 0x825, +0x99e, 0x610, 0x7cc, 0x610, 0x7cc, 0x410, 0x60a, 0x410, 0x60a, 0x26e, 0x4a1, +0x26e, 0x4a1, 0x154, 0x3bb, 0x154, 0x3bb, 0xff3f, 0x1d3, 0xff3f, 0x1d3, 0xff3f, +0x1d3, 0xfcef, 0xffaa, 0xfcef, 0xffaa, 0xfb30, 0xfe0a, 0xfb30, 0xfe0a, 0xfa67, 0xfd5a, +0xfa67, 0xfd5a, 0xfae0, 0xfde4, 0xfae0, 0xfde4, 0xfa69, 0xfd78, 0xfa69, 0xfd78, 0xf92c, +0xfc3f, 0xf92c, 0xfc3f, 0xf92c, 0xfc3f, 0xf85a, 0xfb6c, 0xf85a, 0xfb6c, 0xf7d5, 0xfae1, +0xf7d5, 0xfae1, 0xf748, 0xfa49, 0xf748, 0xfa49, 0xf622, 0xf915, 0xf622, 0xf915, 0xf4b3, +0xf795, 0xf4b3, 0xf795, 0xf30c, 0xf5dc, 0xf30c, 0xf5dc, 0xf30c, 0xf5dc, 0xf255, 0xf511, +0xf255, 0xf511, 0xf268, 0xf50f, 0xf268, 0xf50f, 0xf1fb, 0xf48d, 0xf1fb, 0xf48d, 0xf100, +0xf37d, 0xf100, 0xf37d, 0xef9d, 0xf206, 0xef9d, 0xf206, 0xef9d, 0xf206, 0xed78, 0xefcc, +0xed78, 0xefcc, 0xec10, 0xee4f, 0xec10, 0xee4f, 0xebe2, 0xee0c, 0xebe2, 0xee0c, 0xea11, +0xec24, 0xea11, 0xec24, 0xe7ca, 0xe9c6, 0xe7ca, 0xe9c6, 0xe69a, 0xe87c, 0xe69a, 0xe87c, +0xe69a, 0xe87c, 0xe56c, 0xe731, 0xe56c, 0xe731, 0xe3fb, 0xe5a0, 0xe3fb, 0xe5a0, 0xe32b, +0xe4ab, 0xe32b, 0xe4ab, 0xe26c, 0xe3c2, 0xe26c, 0xe3c2, 0xe1c4, 0xe2ea, 0xe1c4, 0xe2ea, +0xe304, 0xe3f4, 0xe304, 0xe3f4, 0xe304, 0xe3f4, 0xe510, 0xe5c5, 0xe510, 0xe5c5, 0xe684, +0xe6f7, 0xe684, 0xe6f7, 0xe86a, 0xe896, 0xe86a, 0xe896, 0xeb01, 0xeae1, 0xeb01, 0xeae1, +0xecea, 0xec79, 0xecea, 0xec79, 0xecea, 0xec79, 0xefab, 0xeee4, 0xefab, 0xeee4, 0xf26b, +0xf14d, 0xf26b, 0xf14d, 0xf4dd, 0xf365, 0xf4dd, 0xf365, 0xf8c9, 0xf6f8, 0xf8c9, 0xf6f8, +0xfc8d, 0xfa63, 0xfc8d, 0xfa63, 0xff87, 0xfd08, 0xff87, 0xfd08, 0xff87, 0xfd08, 0x1bb, +0xfee9, 0x1bb, 0xfee9, 0x520, 0x200, 0x520, 0x200, 0x899, 0x532, 0x899, 0x532, +0xbe8, 0x840, 0xbe8, 0x840, 0x104f, 0xc6e, 0x104f, 0xc6e, 0x1392, 0xf82, 0x1392, +0xf82, 0x1392, 0xf82, 0x1693, 0x125b, 0x1693, 0x125b, 0x193c, 0x14e5, 0x193c, 0x14e5, +0x1b9d, 0x1730, 0x1b9d, 0x1730, 0x1dc1, 0x1947, 0x1dc1, 0x1947, 0x1edc, 0x1a5e, 0x1edc, +0x1a5e, 0x1edc, 0x1a5e, 0x1fed, 0x1b72, 0x1fed, 0x1b72, 0x20bf, 0x1c4f, 0x20bf, 0x1c4f, +0x2211, 0x1db1, 0x2211, 0x1db1, 0x2390, 0x1f47, 0x2390, 0x1f47, 0x23c2, 0x1f93, 0x23c2, +0x1f93, 0x23a6, 0x1f97, 0x23a6, 0x1f97, 0x23a6, 0x1f97, 0x22fa, 0x1f0d, 0x22fa, 0x1f0d, +0x22c3, 0x1efc, 0x22c3, 0x1efc, 0x2378, 0x1fd9, 0x2378, 0x1fd9, 0x22f7, 0x1f82, 0x22f7, +0x1f82, 0x21d8, 0x1e8f, 0x21d8, 0x1e8f, 0x20ee, 0x1dd1, 0x20ee, 0x1dd1, 0x20ee, 0x1dd1, +0x20f8, 0x1e0a, 0x20f8, 0x1e0a, 0x20a4, 0x1de5, 0x20a4, 0x1de5, 0x1f9e, 0x1d10, 0x1f9e, +0x1d10, 0x1e5e, 0x1c03, 0x1e5e, 0x1c03, 0x1c78, 0x1a51, 0x1c78, 0x1a51, 0x1c78, 0x1a51, +0x1b7d, 0x198c, 0x1b7d, 0x198c, 0x1aba, 0x1900, 0x1aba, 0x1900, 0x1947, 0x17c7, 0x1947, +0x17c7, 0x1778, 0x1633, 0x1778, 0x1633, 0x15b2, 0x14ab, 0x15b2, 0x14ab, 0x1303, 0x1239, +0x1303, 0x1239, 0x1303, 0x1239, 0x10a3, 0x1018, 0x10a3, 0x1018, 0xf13, 0xec7, 0xf13, +0xec7, 0xc40, 0xc32, 0xc40, 0xc32, 0x9e8, 0xa18, 0x9e8, 0xa18, 0x868, 0x8d4, +0x868, 0x8d4, 0x6c3, 0x767, 0x6c3, 0x767, 0x6c3, 0x767, 0x535, 0x60f, 0x535, +0x60f, 0x3e8, 0x4f3, 0x3e8, 0x4f3, 0x191, 0x2c9, 0x191, 0x2c9, 0xfe4a, 0xffa9, +0xfe4a, 0xffa9, 0xfc38, 0xfdb8, 0xfc38, 0xfdb8, 0xfc38, 0xfdb8, 0xfafd, 0xfc99, 0xfafd, +0xfc99, 0xf929, 0xfada, 0xf929, 0xfada, 0xf783, 0xf942, 0xf783, 0xf942, 0xf5cc, 0xf794, +0xf5cc, 0xf794, 0xf352, 0xf51e, 0xf352, 0xf51e, 0xf214, 0xf3df, 0xf214, 0xf3df, 0xf214, +0xf3df, 0xf0eb, 0xf2b1, 0xf0eb, 0xf2b1, 0xefa5, 0xf163, 0xefa5, 0xf163, 0xef24, 0xf0d6, +0xef24, 0xf0d6, 0xee81, 0xf028, 0xee81, 0xf028, 0xed58, 0xeef2, 0xed58, 0xeef2, 0xec07, +0xed95, 0xec07, 0xed95, 0xec07, 0xed95, 0xebfb, 0xed7f, 0xebfb, 0xed7f, 0xebd5, 0xed51, +0xebd5, 0xed51, 0xeb92, 0xed08, 0xeb92, 0xed08, 0xeba2, 0xed15, 0xeba2, 0xed15, 0xebb2, +0xed26, 0xebb2, 0xed26, 0xebb2, 0xed26, 0xec0a, 0xed82, 0xec0a, 0xed82, 0xebd6, 0xed56, +0xebd6, 0xed56, 0xeb6c, 0xecf6, 0xeb6c, 0xecf6, 0xea65, 0xebfb, 0xea65, 0xebfb, 0xe92e, +0xead3, 0xe92e, 0xead3, 0xe8eb, 0xea9e, 0xe8eb, 0xea9e, 0xe8eb, 0xea9e, 0xe879, 0xea3c, +0xe879, 0xea3c, 0xe7e4, 0xe9b4, 0xe7e4, 0xe9b4, 0xe74c, 0xe929, 0xe74c, 0xe929, 0xe657, +0xe83e, 0xe657, 0xe83e, 0xe5a3, 0xe791, 0xe5a3, 0xe791, 0xe4c4, 0xe6b4, 0xe4c4, 0xe6b4, +0xe4c4, 0xe6b4, 0xe4d5, 0xe6c2, 0xe4d5, 0xe6c2, 0xe598, 0xe77d, 0xe598, 0xe77d, 0xe673, +0xe84b, 0xe673, 0xe84b, 0xe7ba, 0xe97f, 0xe7ba, 0xe97f, 0xe8cb, 0xea77, 0xe8cb, 0xea77, +0xe8cb, 0xea77, 0xea6f, 0xebfc, 0xea6f, 0xebfc, 0xec30, 0xed99, 0xec30, 0xed99, 0xee94, +0xefd4, 0xee94, 0xefd4, 0xf0b4, 0xf1c7, 0xf0b4, 0xf1c7, 0xf283, 0xf366, 0xf283, 0xf366, +0xf5a0, 0xf651, 0xf5a0, 0xf651, 0xf5a0, 0xf651, 0xf8bd, 0xf938, 0xf8bd, 0xf938, 0xfaeb, +0xfb30, 0xfaeb, 0xfb30, 0xfc75, 0xfc84, 0xfc75, 0xfc84, 0xfe37, 0xfe0f, 0xfe37, 0xfe0f, +0xff63, 0xff06, 0xff63, 0xff06, 0xff63, 0xff06, 0x190, 0xff, 0x190, 0xff, 0x40e, +0x34c, 0x40e, 0x34c, 0x512, 0x41f, 0x512, 0x41f, 0x6ff, 0x5e1, 0x6ff, 0x5e1, +0x8af, 0x766, 0x8af, 0x766, 0x94d, 0x7df, 0x94d, 0x7df, 0x94d, 0x7df, 0xa9c, +0x90b, 0xa9c, 0x90b, 0xc9f, 0xaef, 0xc9f, 0xaef, 0xde7, 0xc1d, 0xde7, 0xc1d, +0xec3, 0xce2, 0xec3, 0xce2, 0x1027, 0xe34, 0x1027, 0xe34, 0x1122, 0xf21, 0x1122, +0xf21, 0x1122, 0xf21, 0x1124, 0xf19, 0x1124, 0xf19, 0x1106, 0xef7, 0x1106, 0xef7, +0x1064, 0xe57, 0x1064, 0xe57, 0xfb9, 0xdb2, 0xfb9, 0xdb2, 0x1019, 0xe1e, 0x1019, +0xe1e, 0x1019, 0xe1e, 0x105a, 0xe72, 0x105a, 0xe72, 0x10b4, 0xee4, 0x10b4, 0xee4, +0x115f, 0xfad, 0x115f, 0xfad, 0x123f, 0x10b2, 0x123f, 0x10b2, 0x1295, 0x1132, 0x1295, +0x1132, 0x1285, 0x1153, 0x1285, 0x1153, 0x1285, 0x1153, 0x12a5, 0x11aa, 0x12a5, 0x11aa, +0x1216, 0x1157, 0x1216, 0x1157, 0x116a, 0x10ec, 0x116a, 0x10ec, 0x104a, 0x1010, 0x104a, +0x1010, 0xed0, 0xede, 0xed0, 0xede, 0xd94, 0xdec, 0xd94, 0xdec, 0xd94, 0xdec, +0xcb5, 0xd58, 0xcb5, 0xd58, 0xbcf, 0xcbd, 0xbcf, 0xcbd, 0x9eb, 0xb23, 0x9eb, +0xb23, 0x83d, 0x9bc, 0x83d, 0x9bc, 0x73b, 0x8ff, 0x73b, 0x8ff, 0x73b, 0x8ff, +0x563, 0x767, 0x563, 0x767, 0x35f, 0x59f, 0x35f, 0x59f, 0x161, 0x3d6, 0x161, +0x3d6, 0xff47, 0x1ec, 0xff47, 0x1ec, 0xfde2, 0xaf, 0xfde2, 0xaf, 0xfc81, 0xff70, +0xfc81, 0xff70, 0xfc81, 0xff70, 0xfbbc, 0xfec6, 0xfbbc, 0xfec6, 0xfaad, 0xfdcc, 0xfaad, +0xfdcc, 0xf91b, 0xfc47, 0xf91b, 0xfc47, 0xf7bd, 0xfaf2, 0xf7bd, 0xfaf2, 0xf67e, 0xf9b6, +0xf67e, 0xf9b6, 0xf591, 0xf8c9, 0xf591, 0xf8c9, 0xf591, 0xf8c9, 0xf469, 0xf79c, 0xf469, +0xf79c, 0xf372, 0xf69e, 0xf372, 0xf69e, 0xf122, 0xf444, 0xf122, 0xf444, 0xee84, 0xf19b, +0xee84, 0xf19b, 0xed50, 0xf05c, 0xed50, 0xf05c, 0xed50, 0xf05c, 0xec6a, 0xef6a, 0xec6a, +0xef6a, 0xeb30, 0xee23, 0xeb30, 0xee23, 0xe9f5, 0xecdc, 0xe9f5, 0xecdc, 0xe904, 0xebdd, +0xe904, 0xebdd, 0xe7af, 0xea7a, 0xe7af, 0xea7a, 0xe734, 0xe9ef, 0xe734, 0xe9ef, 0xe734, +0xe9ef, 0xe640, 0xe8ea, 0xe640, 0xe8ea, 0xe4ad, 0xe743, 0xe4ad, 0xe743, 0xe487, 0xe704, +0xe487, 0xe704, 0xe446, 0xe6a7, 0xe446, 0xe6a7, 0xe337, 0xe576, 0xe337, 0xe576, 0xe27e, +0xe494, 0xe27e, 0xe494, 0xe27e, 0xe494, 0xe24b, 0xe432, 0xe24b, 0xe432, 0xe212, 0xe3c1, +0xe212, 0xe3c1, 0xe2ca, 0xe43b, 0xe2ca, 0xe43b, 0xe452, 0xe57b, 0xe452, 0xe57b, 0xe572, +0xe64c, 0xe572, 0xe64c, 0xe572, 0xe64c, 0xe700, 0xe784, 0xe700, 0xe784, 0xe949, 0xe96e, +0xe949, 0xe96e, 0xeb87, 0xeb49, 0xeb87, 0xeb49, 0xedfe, 0xed58, 0xedfe, 0xed58, 0xf0ad, +0xef9b, 0xf0ad, 0xef9b, 0xf3e7, 0xf267, 0xf3e7, 0xf267, 0xf3e7, 0xf267, 0xf731, 0xf543, +0xf731, 0xf543, 0xfa79, 0xf81f, 0xfa79, 0xf81f, 0xfeaa, 0xfbe7, 0xfeaa, 0xfbe7, 0x20f, +0xfee7, 0x20f, 0xfee7, 0x4ef, 0x16a, 0x4ef, 0x16a, 0x816, 0x43b, 0x816, 0x43b, +0x816, 0x43b, 0xb72, 0x74b, 0xb72, 0x74b, 0xf89, 0xb20, 0xf89, 0xb20, 0x13ad, +0xf0c, 0x13ad, 0xf0c, 0x17c8, 0x12fb, 0x17c8, 0x12fb, 0x1bc4, 0x16d7, 0x1bc4, 0x16d7, +0x1bc4, 0x16d7, 0x1f41, 0x1a3f, 0x1f41, 0x1a3f, 0x220c, 0x1d00, 0x220c, 0x1d00, 0x23f9, +0x1eef, 0x23f9, 0x1eef, 0x2582, 0x2082, 0x2582, 0x2082, 0x26eb, 0x21ff, 0x26eb, 0x21ff, +0x27bc, 0x22eb, 0x27bc, 0x22eb, 0x27bc, 0x22eb, 0x2835, 0x2385, 0x2835, 0x2385, 0x27c3, +0x233a, 0x27c3, 0x233a, 0x26ca, 0x226c, 0x26ca, 0x226c, 0x25df, 0x21b0, 0x25df, 0x21b0, +0x24b7, 0x20b9, 0x24b7, 0x20b9, 0x2426, 0x2059, 0x2426, 0x2059, 0x2426, 0x2059, 0x2348, +0x1fae, 0x2348, 0x1fae, 0x227d, 0x1f16, 0x227d, 0x1f16, 0x21dd, 0x1eaa, 0x21dd, 0x1eaa, +0x20c6, 0x1dc6, 0x20c6, 0x1dc6, 0x1f49, 0x1c7c, 0x1f49, 0x1c7c, 0x1f49, 0x1c7c, 0x1e25, +0x1b8b, 0x1e25, 0x1b8b, 0x1e0f, 0x1ba9, 0x1e0f, 0x1ba9, 0x1cfa, 0x1ac9, 0x1cfa, 0x1ac9, +0x1b6a, 0x196f, 0x1b6a, 0x196f, 0x1a4b, 0x1888, 0x1a4b, 0x1888, 0x18f9, 0x176e, 0x18f9, +0x176e, 0x18f9, 0x176e, 0x175c, 0x160d, 0x175c, 0x160d, 0x1562, 0x1451, 0x1562, 0x1451, +0x1267, 0x1195, 0x1267, 0x1195, 0xef2, 0xe61, 0xef2, 0xe61, 0xc98, 0xc49, 0xc98, +0xc49, 0x99e, 0x993, 0x99e, 0x993, 0x99e, 0x993, 0x62a, 0x662, 0x62a, 0x662, +0x413, 0x48e, 0x413, 0x48e, 0x265, 0x320, 0x265, 0x320, 0xffd2, 0xcc, 0xffd2, +0xcc, 0xfd61, 0xfe96, 0xfd61, 0xfe96, 0xfd61, 0xfe96, 0xfbea, 0xfd55, 0xfbea, 0xfd55, +0xf9e6, 0xfb82, 0xf9e6, 0xfb82, 0xf801, 0xf9c9, 0xf801, 0xf9c9, 0xf65c, 0xf848, 0xf65c, +0xf848, 0xf402, 0xf60b, 0xf402, 0xf60b, 0xf2ac, 0xf4ca, 0xf2ac, 0xf4ca, 0xf2ac, 0xf4ca, +0xf1d6, 0xf403, 0xf1d6, 0xf403, 0xf05b, 0xf28f, 0xf05b, 0xf28f, 0xef2d, 0xf162, 0xef2d, +0xf162, 0xee70, 0xf0a0, 0xee70, 0xf0a0, 0xee74, 0xf099, 0xee74, 0xf099, 0xee50, 0xf066, +0xee50, 0xf066, 0xee50, 0xf066, 0xedd9, 0xefdd, 0xedd9, 0xefdd, 0xed9e, 0xef8e, 0xed9e, +0xef8e, 0xecd7, 0xeeb4, 0xecd7, 0xeeb4, 0xec83, 0xee4a, 0xec83, 0xee4a, 0xecb9, 0xee6e, +0xecb9, 0xee6e, 0xecb9, 0xee6e, 0xeca2, 0xee46, 0xeca2, 0xee46, 0xecd1, 0xee68, 0xecd1, +0xee68, 0xedc7, 0xef53, 0xedc7, 0xef53, 0xee7a, 0xf000, 0xee7a, 0xf000, 0xee42, 0xefc6, +0xee42, 0xefc6, 0xee07, 0xef8d, 0xee07, 0xef8d, 0xee07, 0xef8d, 0xedf5, 0xef80, 0xedf5, +0xef80, 0xed67, 0xeef9, 0xed67, 0xeef9, 0xecf5, 0xee92, 0xecf5, 0xee92, 0xecea, 0xee92, +0xecea, 0xee92, 0xec91, 0xee45, 0xec91, 0xee45, 0xec91, 0xee45, 0xecbd, 0xee7c, 0xecbd, +0xee7c, 0xeceb, 0xeeb2, 0xeceb, 0xeeb2, 0xecb1, 0xee7f, 0xecb1, 0xee7f, 0xec42, 0xee13, +0xec42, 0xee13, 0xeb9f, 0xed6f, 0xeb9f, 0xed6f, 0xeb7d, 0xed46, 0xeb7d, 0xed46, 0xeb7d, +0xed46, 0xebad, 0xed69, 0xebad, 0xed69, 0xecba, 0xee64, 0xecba, 0xee64, 0xee4b, 0xefdd, +0xee4b, 0xefdd, 0xefcb, 0xf13f, 0xefcb, 0xf13f, 0xf082, 0xf1d3, 0xf082, 0xf1d3, 0xf126, +0xf24e, 0xf126, 0xf24e, 0xf126, 0xf24e, 0xf2b7, 0xf3b3, 0xf2b7, 0xf3b3, 0xf3af, 0xf47b, +0xf3af, 0xf47b, 0xf499, 0xf532, 0xf499, 0xf532, 0xf5f9, 0xf65e, 0xf5f9, 0xf65e, 0xf784, +0xf7b5, 0xf784, 0xf7b5, 0xf784, 0xf7b5, 0xf9a4, 0xf9a0, 0xf9a4, 0xf9a0, 0xfc03, 0xfbcc, +0xfc03, 0xfbcc, 0xfd6e, 0xfd06, 0xfd6e, 0xfd06, 0xfeb4, 0xfe1e, 0xfeb4, 0xfe1e, 0x109, +0x47, 0x109, 0x47, 0x32d, 0x245, 0x32d, 0x245, 0x32d, 0x245, 0x53c, 0x431, +0x53c, 0x431, 0x726, 0x5fc, 0x726, 0x5fc, 0x842, 0x6fe, 0x842, 0x6fe, 0x913, +0x7b9, 0x913, 0x7b9, 0xa36, 0x8c9, 0xa36, 0x8c9, 0xb56, 0x9db, 0xb56, 0x9db, +0xb56, 0x9db, 0xbcc, 0xa45, 0xbcc, 0xa45, 0xcb1, 0xb23, 0xcb1, 0xb23, 0xdb1, +0xc1f, 0xdb1, 0xc1f, 0xdf4, 0xc61, 0xdf4, 0xc61, 0xe7d, 0xceb, 0xe7d, 0xceb, +0xe7d, 0xceb, 0xeb7, 0xd2a, 0xeb7, 0xd2a, 0xe48, 0xcc1, 0xe48, 0xcc1, 0xd47, +0xbca, 0xd47, 0xbca, 0xc5d, 0xaed, 0xc5d, 0xaed, 0xcc3, 0xb62, 0xcc3, 0xb62, +0xd69, 0xc1b, 0xd69, 0xc1b, 0xd69, 0xc1b, 0xe09, 0xcd1, 0xe09, 0xcd1, 0xe77, +0xd59, 0xe77, 0xd59, 0xe2d, 0xd2c, 0xe2d, 0xd2c, 0xe50, 0xd71, 0xe50, 0xd71, +0xf3f, 0xe85, 0xf3f, 0xe85, 0xf97, 0xf06, 0xf97, 0xf06, 0xf97, 0xf06, 0xf0d, +0xea8, 0xf0d, 0xea8, 0xf0a, 0xed6, 0xf0a, 0xed6, 0xf6a, 0xf68, 0xf6a, 0xf68, +0xf36, 0xf69, 0xf36, 0xf69, 0xe7b, 0xee4, 0xe7b, 0xee4, 0xe7b, 0xee4, 0xdab, +0xe4b, 0xdab, 0xe4b, 0xcc2, 0xd99, 0xcc2, 0xd99, 0xbec, 0xcf9, 0xbec, 0xcf9, +0xa38, 0xb7a, 0xa38, 0xb7a, 0x774, 0x8e8, 0x774, 0x8e8, 0x577, 0x71a, 0x577, +0x71a, 0x577, 0x71a, 0x3e2, 0x5b0, 0x3e2, 0x5b0, 0x23a, 0x42e, 0x23a, 0x42e, +0x90, 0x2a7, 0x90, 0x2a7, 0xff71, 0x1a5, 0xff71, 0x1a5, 0xfee5, 0x133, 0xfee5, +0x133, 0xfdf3, 0x54, 0xfdf3, 0x54, 0xfdf3, 0x54, 0xfd12, 0xff84, 0xfd12, 0xff84, +0xfc1b, 0xfe98, 0xfc1b, 0xfe98, 0xfacb, 0xfd51, 0xfacb, 0xfd51, 0xf938, 0xfbc5, 0xf938, +0xfbc5, 0xf80b, 0xfa9c, 0xf80b, 0xfa9c, 0xf80b, 0xfa9c, 0xf6bb, 0xf950, 0xf6bb, 0xf950, +0xf4a5, 0xf73c, 0xf4a5, 0xf73c, 0xf38e, 0xf628, 0xf38e, 0xf628, 0xf273, 0xf510, 0xf273, +0xf510, 0xf09d, 0xf33f, 0xf09d, 0xf33f, 0xefe7, 0xf28d, 0xefe7, 0xf28d, 0xefe7, 0xf28d, +0xef92, 0xf23e, 0xef92, 0xf23e, 0xedc7, 0xf078, 0xedc7, 0xf078, 0xeb28, 0xeddf, 0xeb28, +0xeddf, 0xe8ee, 0xebaa, 0xe8ee, 0xebaa, 0xe6e7, 0xe9a6, 0xe6e7, 0xe9a6, 0xe595, 0xe854, +0xe595, 0xe854, 0xe595, 0xe854, 0xe48e, 0xe749, 0xe48e, 0xe749, 0xe2da, 0xe58b, 0xe2da, +0xe58b, 0xe194, 0xe436, 0xe194, 0xe436, 0xe19d, 0xe426, 0xe19d, 0xe426, 0xe1dc, 0xe446, +0xe1dc, 0xe446, 0xe1dc, 0xe446, 0xe17a, 0xe3ba, 0xe17a, 0xe3ba, 0xe17b, 0xe386, 0xe17b, +0xe386, 0xe1f8, 0xe3c5, 0xe1f8, 0xe3c5, 0xe378, 0xe4fb, 0xe378, 0xe4fb, 0xe602, 0xe732, +0xe602, 0xe732, 0xe7e5, 0xe8b7, 0xe7e5, 0xe8b7, 0xe7e5, 0xe8b7, 0xe998, 0xea05, 0xe998, +0xea05, 0xeb92, 0xeb92, 0xeb92, 0xeb92, 0xee1c, 0xeda9, 0xee1c, 0xeda9, 0xf0f9, 0xf00e, +0xf0f9, 0xf00e, 0xf3d4, 0xf270, 0xf3d4, 0xf270, 0xf79e, 0xf5c0, 0xf79e, 0xf5c0, 0xf79e, +0xf5c0, 0xfb49, 0xf8f3, 0xfb49, 0xf8f3, 0xfe38, 0xfb6e, 0xfe38, 0xfb6e, 0x166, 0xfe2e, +0x166, 0xfe2e, 0x523, 0x185, 0x523, 0x185, 0x8c7, 0x4cc, 0x8c7, 0x4cc, 0x8c7, +0x4cc, 0xc10, 0x7c3, 0xc10, 0x7c3, 0xfed, 0xb5a, 0xfed, 0xb5a, 0x141c, 0xf4f, +0x141c, 0xf4f, 0x1797, 0x129d, 0x1797, 0x129d, 0x1a80, 0x1566, 0x1a80, 0x1566, 0x1cb1, +0x1784, 0x1cb1, 0x1784, 0x1cb1, 0x1784, 0x1e4f, 0x191b, 0x1e4f, 0x191b, 0x2097, 0x1b66, +0x2097, 0x1b66, 0x22ab, 0x1d88, 0x22ab, 0x1d88, 0x23e9, 0x1edd, 0x23e9, 0x1edd, 0x24ef, +0x2001, 0x24ef, 0x2001, 0x2576, 0x20ac, 0x2576, 0x20ac, 0x2576, 0x20ac, 0x25dd, 0x213b, +0x25dd, 0x213b, 0x25af, 0x2139, 0x25af, 0x2139, 0x2505, 0x20bc, 0x2505, 0x20bc, 0x2459, +0x203f, 0x2459, 0x203f, 0x23a2, 0x1fb6, 0x23a2, 0x1fb6, 0x23a2, 0x1fb6, 0x2344, 0x1f86, +0x2344, 0x1f86, 0x2279, 0x1ee9, 0x2279, 0x1ee9, 0x2132, 0x1dce, 0x2132, 0x1dce, 0x2008, +0x1cd0, 0x2008, 0x1cd0, 0x1ffb, 0x1cef, 0x1ffb, 0x1cef, 0x1fca, 0x1ce8, 0x1fca, 0x1ce8, +0x1fca, 0x1ce8, 0x1e39, 0x1b83, 0x1e39, 0x1b83, 0x1d8b, 0x1b00, 0x1d8b, 0x1b00, 0x1cbf, +0x1a63, 0x1cbf, 0x1a63, 0x1b59, 0x192e, 0x1b59, 0x192e, 0x1a48, 0x1850, 0x1a48, 0x1850, +0x1856, 0x1693, 0x1856, 0x1693, 0x1856, 0x1693, 0x15c1, 0x1438, 0x15c1, 0x1438, 0x1397, +0x124c, 0x1397, 0x124c, 0x1180, 0x1075, 0x1180, 0x1075, 0xedd, 0xe15, 0xedd, 0xe15, +0xd25, 0xca3, 0xd25, 0xca3, 0xd25, 0xca3, 0xb96, 0xb5b, 0xb96, 0xb5b, 0x863, +0x870, 0x863, 0x870, 0x57e, 0x5d3, 0x57e, 0x5d3, 0x418, 0x4b3, 0x418, 0x4b3, +0x25b, 0x339, 0x25b, 0x339, 0xffda, 0xf9, 0xffda, 0xf9, 0xffda, 0xf9, 0xfd8e, +0xfee8, 0xfd8e, 0xfee8, 0xfaea, 0xfc7a, 0xfaea, 0xfc7a, 0xf8e9, 0xfaa8, 0xf8e9, 0xfaa8, +0xf73b, 0xf921, 0xf73b, 0xf921, 0xf4c8, 0xf6cf, 0xf4c8, 0xf6cf, 0xf4c8, 0xf6cf, 0xf28f, +0xf4af, 0xf28f, 0xf4af, 0xf0c1, 0xf2f3, 0xf0c1, 0xf2f3, 0xf01f, 0xf25b, 0xf01f, 0xf25b, +0xef7e, 0xf1bf, 0xef7e, 0xf1bf, 0xee10, 0xf050, 0xee10, 0xf050, 0xed1d, 0xef56, 0xed1d, +0xef56, 0xed1d, 0xef56, 0xec08, 0xee38, 0xec08, 0xee38, 0xeaf0, 0xed15, 0xeaf0, 0xed15, +0xea12, 0xec2a, 0xea12, 0xec2a, 0xe975, 0xeb7f, 0xe975, 0xeb7f, 0xe99a, 0xeb97, 0xe99a, +0xeb97, 0xea05, 0xebf8, 0xea05, 0xebf8, 0xea05, 0xebf8, 0xea66, 0xec52, 0xea66, 0xec52, +0xea22, 0xec09, 0xea22, 0xec09, 0xe996, 0xeb7b, 0xe996, 0xeb7b, 0xe9af, 0xeb96, 0xe9af, +0xeb96, 0xe97b, 0xeb68, 0xe97b, 0xeb68, 0xe97b, 0xeb68, 0xe90c, 0xeb01, 0xe90c, 0xeb01, +0xe8f7, 0xeaf6, 0xe8f7, 0xeaf6, 0xe859, 0xea65, 0xe859, 0xea65, 0xe7ac, 0xe9c4, 0xe7ac, +0xe9c4, 0xe751, 0xe975, 0xe751, 0xe975, 0xe6b8, 0xe8e6, 0xe6b8, 0xe8e6, 0xe6b8, 0xe8e6, +0xe67b, 0xe8b0, 0xe67b, 0xe8b0, 0xe646, 0xe87f, 0xe646, 0xe87f, 0xe608, 0xe840, 0xe608, +0xe840, 0xe5e4, 0xe815, 0xe5e4, 0xe815, 0xe63d, 0xe862, 0xe63d, 0xe862, 0xe7e0, 0xe9f1, +0xe7e0, 0xe9f1, 0xe7e0, 0xe9f1, 0xe997, 0xeb8e, 0xe997, 0xeb8e, 0xeab2, 0xec89, 0xeab2, +0xec89, 0xeb84, 0xed34, 0xeb84, 0xed34, 0xedb5, 0xef38, 0xedb5, 0xef38, 0xf011, 0xf162, +0xf011, 0xf162, 0xf011, 0xf162, 0xf147, 0xf263, 0xf147, 0xf263, 0xf36c, 0xf44f, 0xf36c, +0xf44f, 0xf571, 0xf61a, 0xf571, 0xf61a, 0xf79f, 0xf80d, 0xf79f, 0xf80d, 0xfa6b, 0xfa9f, +0xfa6b, 0xfa9f, 0xfc45, 0xfc41, 0xfc45, 0xfc41, 0xfc45, 0xfc41, 0xfd61, 0xfd28, 0xfd61, +0xfd28, 0xfedc, 0xfe71, 0xfedc, 0xfe71, 0xf5, 0x5d, 0xf5, 0x5d, 0x309, 0x24a, +0x309, 0x24a, 0x58e, 0x4ae, 0x58e, 0x4ae, 0x7aa, 0x6ad, 0x7aa, 0x6ad, 0x7aa, +0x6ad, 0x8f5, 0x7e3, 0x8f5, 0x7e3, 0xac7, 0x9a4, 0xac7, 0x9a4, 0xc98, 0xb6b, +0xc98, 0xb6b, 0xd7e, 0xc4c, 0xd7e, 0xc4c, 0xea3, 0xd70, 0xea3, 0xd70, 0xea3, +0xd70, 0xfeb, 0xebb, 0xfeb, 0xebb, 0x102c, 0xf02, 0x102c, 0xf02, 0x10ef, 0xfce, +0x10ef, 0xfce, 0x11b1, 0x109c, 0x11b1, 0x109c, 0x1181, 0x1078, 0x1181, 0x1078, 0x1110, +0x1015, 0x1110, 0x1015, 0x1110, 0x1015, 0x105a, 0xf6f, 0x105a, 0xf6f, 0x10a3, 0xfc7, +0x10a3, 0xfc7, 0x10e9, 0x101d, 0x10e9, 0x101d, 0x10a9, 0xfee, 0x10a9, 0xfee, 0x110a, +0x1061, 0x110a, 0x1061, 0x10f7, 0x1060, 0x10f7, 0x1060, 0x10f7, 0x1060, 0x10e2, 0x105f, +0x10e2, 0x105f, 0x10c3, 0x1056, 0x10c3, 0x1056, 0x106f, 0x1019, 0x106f, 0x1019, 0x1040, +0x1003, 0x1040, 0x1003, 0x1002, 0xfe1, 0x1002, 0xfe1, 0x1002, 0xfe1, 0x104d, 0x1049, +0x104d, 0x1049, 0xf9f, 0xfbb, 0xf9f, 0xfbb, 0xdef, 0xe2d, 0xdef, 0xe2d, 0xcaf, +0xd12, 0xcaf, 0xd12, 0xbba, 0xc43, 0xbba, 0xc43, 0xb0e, 0xbbe, 0xb0e, 0xbbe, +0xb0e, 0xbbe, 0x9de, 0xab6, 0x9de, 0xab6, 0x7b8, 0x8b7, 0x7b8, 0x8b7, 0x589, +0x6af, 0x589, 0x6af, 0x375, 0x4c1, 0x375, 0x4c1, 0x144, 0x2b3, 0x144, 0x2b3, +0xff4d, 0xdc, 0xff4d, 0xdc, 0xff4d, 0xdc, 0xfd49, 0xfef6, 0xfd49, 0xfef6, 0xfbae, +0xfd76, 0xfbae, 0xfd76, 0xfa50, 0xfc2e, 0xfa50, 0xfc2e, 0xf931, 0xfb21, 0xf931, 0xfb21, +0xf8fc, 0xfaf9, 0xf8fc, 0xfaf9, 0xf8fc, 0xfaf9, 0xf855, 0xfa5d, 0xf855, 0xfa5d, 0xf688, +0xf896, 0xf688, 0xf896, 0xf469, 0xf67a, 0xf469, 0xf67a, 0xf362, 0xf574, 0xf362, 0xf574, +0xf248, 0xf45a, 0xf248, 0xf45a, 0xf094, 0xf2a4, 0xf094, 0xf2a4, 0xf094, 0xf2a4, 0xef5b, +0xf169, 0xef5b, 0xf169, 0xed90, 0xef9b, 0xed90, 0xef9b, 0xeca0, 0xeeaa, 0xeca0, 0xeeaa, +0xed0b, 0xef14, 0xed0b, 0xef14, 0xec77, 0xee81, 0xec77, 0xee81, 0xeac2, 0xeccf, 0xeac2, +0xeccf, 0xeac2, 0xeccf, 0xe9b1, 0xebc2, 0xe9b1, 0xebc2, 0xe91e, 0xeb34, 0xe91e, 0xeb34, +0xe845, 0xea60, 0xe845, 0xea60, 0xe83f, 0xea60, 0xe83f, 0xea60, 0xe7b9, 0xe9de, 0xe7b9, +0xe9de, 0xe7b9, 0xe9de, 0xe63d, 0xe865, 0xe63d, 0xe865, 0xe5af, 0xe7d5, 0xe5af, 0xe7d5, +0xe565, 0xe786, 0xe565, 0xe786, 0xe4b9, 0xe6cf, 0xe4b9, 0xe6cf, 0xe4c9, 0xe6ce, 0xe4c9, +0xe6ce, 0xe538, 0xe724, 0xe538, 0xe724, 0xe538, 0xe724, 0xe5a5, 0xe76f, 0xe5a5, 0xe76f, +0xe781, 0xe920, 0xe781, 0xe920, 0xe9c9, 0xeb34, 0xe9c9, 0xeb34, 0xebec, 0xed19, 0xebec, +0xed19, 0xee5e, 0xef43, 0xee5e, 0xef43, 0xf09d, 0xf133, 0xf09d, 0xf133, 0xf09d, 0xf133, +0xf381, 0xf3be, 0xf381, 0xf3be, 0xf614, 0xf5f2, 0xf614, 0xf5f2, 0xf8d5, 0xf84d, 0xf8d5, +0xf84d, 0xfc4b, 0xfb5b, 0xfc4b, 0xfb5b, 0xff01, 0xfda5, 0xff01, 0xfda5, 0xff01, 0xfda5, +0x1db, 0x14, 0x1db, 0x14, 0x4a8, 0x277, 0x4a8, 0x277, 0x7ca, 0x533, 0x7ca, +0x533, 0xb1b, 0x823, 0xb1b, 0x823, 0xeac, 0xb5b, 0xeac, 0xb5b, 0x1352, 0xfb0, +0x1352, 0xfb0, 0x1352, 0xfb0, 0x171b, 0x1331, 0x171b, 0x1331, 0x1a6b, 0x1644, 0x1a6b, +0x1644, 0x1d19, 0x18c0, 0x1d19, 0x18c0, 0x1f3f, 0x1ac0, 0x1f3f, 0x1ac0, 0x21f2, 0x1d58, +0x21f2, 0x1d58, 0x235e, 0x1eb5, 0x235e, 0x1eb5, 0x235e, 0x1eb5, 0x23ac, 0x1efe, 0x23ac, +0x1efe, 0x2459, 0x1faf, 0x2459, 0x1faf, 0x2546, 0x20a8, 0x2546, 0x20a8, 0x25cd, 0x2142, +0x25cd, 0x2142, 0x25e7, 0x2175, 0x25e7, 0x2175, 0x25e7, 0x2175, 0x2534, 0x20df, 0x2534, +0x20df, 0x2415, 0x1fe0, 0x2415, 0x1fe0, 0x2310, 0x1efc, 0x2310, 0x1efc, 0x2212, 0x1e20, +0x2212, 0x1e20, 0x2197, 0x1dc7, 0x2197, 0x1dc7, 0x2084, 0x1cd4, 0x2084, 0x1cd4, 0x2084, +0x1cd4, 0x1e87, 0x1af7, 0x1e87, 0x1af7, 0x1d1c, 0x19aa, 0x1d1c, 0x19aa, 0x1cb2, 0x195c, +0x1cb2, 0x195c, 0x1be2, 0x18a7, 0x1be2, 0x18a7, 0x1ac2, 0x17a2, 0x1ac2, 0x17a2, 0x1ac2, +0x17a2, 0x1a06, 0x1702, 0x1a06, 0x1702, 0x187a, 0x1592, 0x187a, 0x1592, 0x16d6, 0x140c, +0x16d6, 0x140c, 0x15a9, 0x1301, 0x15a9, 0x1301, 0x13d6, 0x1154, 0x13d6, 0x1154, 0x10e4, +0xe8c, 0x10e4, 0xe8c, 0x10e4, 0xe8c, 0xd9f, 0xb77, 0xd9f, 0xb77, 0xac8, 0x8d5, +0xac8, 0x8d5, 0x883, 0x6cc, 0x883, 0x6cc, 0x6ef, 0x57b, 0x6ef, 0x57b, 0x462, +0x335, 0x462, 0x335, 0x123, 0x42, 0x123, 0x42, 0x123, 0x42, 0xff1d, 0xfe8d, +0xff1d, 0xfe8d, 0xfd7e, 0xfd42, 0xfd7e, 0xfd42, 0xfbc4, 0xfbde, 0xfbc4, 0xfbde, 0xfa60, +0xfad0, 0xfa60, 0xfad0, 0xf8c9, 0xf98e, 0xf8c9, 0xf98e, 0xf8c9, 0xf98e, 0xf729, 0xf840, +0xf729, 0xf840, 0xf5d6, 0xf73c, 0xf5d6, 0xf73c, 0xf41c, 0xf5cb, 0xf41c, 0xf5cb, 0xf257, +0xf449, 0xf257, 0xf449, 0xf065, 0xf293, 0xf065, 0xf293, 0xeef6, 0xf156, 0xeef6, 0xf156, +0xeef6, 0xf156, 0xee8e, 0xf118, 0xee8e, 0xf118, 0xed23, 0xefcd, 0xed23, 0xefcd, 0xec57, +0xef18, 0xec57, 0xef18, 0xec46, 0xef16, 0xec46, 0xef16, 0xeb5a, 0xee30, 0xeb5a, 0xee30, +0xeab7, 0xed8d, 0xeab7, 0xed8d, 0xeab7, 0xed8d, 0xeab3, 0xed82, 0xeab3, 0xed82, 0xec0f, +0xeed2, 0xec0f, 0xeed2, 0xecd3, 0xef86, 0xecd3, 0xef86, 0xed52, 0xeff3, 0xed52, 0xeff3, +0xee4c, 0xf0d8, 0xee4c, 0xf0d8, 0xee4c, 0xf0d8, 0xede6, 0xf05f, 0xede6, 0xf05f, 0xedf5, +0xf05a, 0xedf5, 0xf05a, 0xeddf, 0xf032, 0xeddf, 0xf032, 0xede1, 0xf024, 0xede1, 0xf024, +0xee8e, 0xf0c4, 0xee8e, 0xf0c4, 0xee60, 0xf08b, 0xee60, 0xf08b, 0xee60, 0xf08b, 0xede2, +0xf003, 0xede2, 0xf003, 0xed7b, 0xef96, 0xed7b, 0xef96, 0xed95, 0xefa9, 0xed95, 0xefa9, +0xedbd, 0xefcc, 0xedbd, 0xefcc, 0xedc2, 0xefca, 0xedc2, 0xefca, 0xed07, 0xef08, 0xed07, +0xef08, 0xed07, 0xef08, 0xebef, 0xede5, 0xebef, 0xede5, 0xebbe, 0xeda7, 0xebbe, 0xeda7, +0xec44, 0xee1a, 0xec44, 0xee1a, 0xed70, 0xef2f, 0xed70, 0xef2f, 0xedcf, 0xef71, 0xedcf, +0xef71, 0xedcf, 0xef71, 0xedf4, 0xef73, 0xedf4, 0xef73, 0xef92, 0xf0e8, 0xef92, 0xf0e8, +0xf18b, 0xf2b2, 0xf18b, 0xf2b2, 0xf2a5, 0xf398, 0xf2a5, 0xf398, 0xf3a1, 0xf45b, 0xf3a1, +0xf45b, 0xf52c, 0xf5a9, 0xf52c, 0xf5a9, 0xf52c, 0xf5a9, 0xf6a0, 0xf6de, 0xf6a0, 0xf6de, +0xf8dd, 0xf8db, 0xf8dd, 0xf8db, 0xfb93, 0xfb50, 0xfb93, 0xfb50, 0xfd53, 0xfcd1, 0xfd53, +0xfcd1, 0xfe64, 0xfda6, 0xfe64, 0xfda6, 0xff6d, 0xfe77, 0xff6d, 0xfe77, 0xff6d, 0xfe77, +0xeb, 0xffc2, 0xeb, 0xffc2, 0x2d8, 0x182, 0x2d8, 0x182, 0x577, 0x3fc, 0x577, +0x3fc, 0x78e, 0x5f4, 0x78e, 0x5f4, 0x8b9, 0x709, 0x8b9, 0x709, 0x8b9, 0x709, +0xa59, 0x89c, 0xa59, 0x89c, 0xb83, 0x9c0, 0xb83, 0x9c0, 0xc39, 0xa78, 0xc39, +0xa78, 0xcda, 0xb21, 0xcda, 0xb21, 0xd07, 0xb5e, 0xd07, 0xb5e, 0xde0, 0xc4b, +0xde0, 0xc4b, 0xde0, 0xc4b, 0xf18, 0xd9c, 0xf18, 0xd9c, 0xfc3, 0xe63, 0xfc3, +0xe63, 0xfca, 0xe88, 0xfca, 0xe88, 0xecd, 0xdab, 0xecd, 0xdab, 0xea5, 0xda4, +0xea5, 0xda4, 0xf13, 0xe32, 0xf13, 0xe32, 0xf13, 0xe32, 0xe56, 0xd95, 0xe56, +0xd95, 0xe7f, 0xdde, 0xe7f, 0xdde, 0xedd, 0xe59, 0xedd, 0xe59, 0xeda, 0xe73, +0xeda, 0xe73, 0xec6, 0xe7a, 0xec6, 0xe7a, 0xec6, 0xe7a, 0xe7b, 0xe49, 0xe7b, +0xe49, 0xef6, 0xede, 0xef6, 0xede, 0xe8a, 0xe8c, 0xe8a, 0xe8c, 0xe62, 0xe7d, +0xe62, 0xe7d, 0xe08, 0xe3e, 0xe08, 0xe3e, 0xc99, 0xceb, 0xc99, 0xceb, 0xc99, +0xceb, 0xc70, 0xcdf, 0xc70, 0xcdf, 0xc3a, 0xcc8, 0xc3a, 0xcc8, 0xc28, 0xcd7, +0xc28, 0xcd7, 0xbfb, 0xccb, 0xbfb, 0xccb, 0xad3, 0xbc7, 0xad3, 0xbc7, 0x91e, +0xa38, 0x91e, 0xa38, 0x91e, 0xa38, 0x71d, 0x85d, 0x71d, 0x85d, 0x5ac, 0x711, +0x5ac, 0x711, 0x3d3, 0x55d, 0x3d3, 0x55d, 0x214, 0x3c3, 0x214, 0x3c3, 0x56, +0x227, 0x56, 0x227, 0x56, 0x227, 0xfe81, 0x72, 0xfe81, 0x72, 0xfd88, 0xff97, +0xfd88, 0xff97, 0xfd15, 0xff3d, 0xfd15, 0xff3d, 0xfcde, 0xff1c, 0xfcde, 0xff1c, 0xfb06, +0xfd55, 0xfb06, 0xfd55, 0xf87d, 0xfad8, 0xf87d, 0xfad8, 0xf87d, 0xfad8, 0xf75c, 0xf9c0, +0xf75c, 0xf9c0, 0xf6c3, 0xf92b, 0xf6c3, 0xf92b, 0xf543, 0xf7ac, 0xf543, 0xf7ac, 0xf358, +0xf5c0, 0xf358, 0xf5c0, 0xf22f, 0xf492, 0xf22f, 0xf492, 0xf0ef, 0xf34c, 0xf0ef, 0xf34c, +0xf0ef, 0xf34c, 0xf046, 0xf29d, 0xf046, 0xf29d, 0xef85, 0xf1d4, 0xef85, 0xf1d4, 0xedbb, +0xf003, 0xedbb, 0xf003, 0xec01, 0xee42, 0xec01, 0xee42, 0xea7d, 0xecb8, 0xea7d, 0xecb8, +0xea7d, 0xecb8, 0xe96e, 0xeba6, 0xe96e, 0xeba6, 0xe853, 0xea87, 0xe853, 0xea87, 0xe77d, +0xe9ae, 0xe77d, 0xe9ae, 0xe64d, 0xe87b, 0xe64d, 0xe87b, 0xe4f5, 0xe71f, 0xe4f5, 0xe71f, +0xe4be, 0xe6e4, 0xe4be, 0xe6e4, 0xe4be, 0xe6e4, 0xe42b, 0xe649, 0xe42b, 0xe649, 0xe3a2, +0xe5b5, 0xe3a2, 0xe5b5, 0xe349, 0xe54b, 0xe349, 0xe54b, 0xe2df, 0xe4cb, 0xe2df, 0xe4cb, +0xe388, 0xe557, 0xe388, 0xe557, 0xe499, 0xe642, 0xe499, 0xe642, 0xe499, 0xe642, 0xe66a, +0xe7e5, 0xe66a, 0xe7e5, 0xe85b, 0xe99e, 0xe85b, 0xe99e, 0xe97b, 0xea7e, 0xe97b, 0xea7e, +0xec18, 0xecd0, 0xec18, 0xecd0, 0xef0f, 0xef73, 0xef0f, 0xef73, 0xef0f, 0xef73, 0xf109, +0xf111, 0xf109, 0xf111, 0xf3ac, 0xf351, 0xf3ac, 0xf351, 0xf66e, 0xf5ab, 0xf66e, 0xf5ab, +0xf95f, 0xf82e, 0xf95f, 0xf82e, 0xfc9b, 0xfafb, 0xfc9b, 0xfafb, 0x53, 0xfe44, 0x53, +0xfe44, 0x53, 0xfe44, 0x3fd, 0x180, 0x3fd, 0x180, 0x73c, 0x456, 0x73c, 0x456, +0xbf6, 0x8ac, 0xbf6, 0x8ac, 0xffc, 0xc57, 0xffc, 0xc57, 0x130b, 0xf15, 0x130b, +0xf15, 0x130b, 0xf15, 0x16a1, 0x1264, 0x16a1, 0x1264, 0x1965, 0x14ef, 0x1965, 0x14ef, +0x1c73, 0x17cf, 0x1c73, 0x17cf, 0x1f25, 0x1a62, 0x1f25, 0x1a62, 0x20e1, 0x1c0d, 0x20e1, +0x1c0d, 0x224e, 0x1d75, 0x224e, 0x1d75, 0x224e, 0x1d75, 0x2399, 0x1ec8, 0x2399, 0x1ec8, +0x24e6, 0x2027, 0x24e6, 0x2027, 0x2520, 0x207f, 0x2520, 0x207f, 0x2546, 0x20ca, 0x2546, +0x20ca, 0x24ef, 0x209f, 0x24ef, 0x209f, 0x23f3, 0x1fd4, 0x23f3, 0x1fd4, 0x23f3, 0x1fd4, +0x2357, 0x1f6d, 0x2357, 0x1f6d, 0x232b, 0x1f77, 0x232b, 0x1f77, 0x2355, 0x1fd7, 0x2355, +0x1fd7, 0x2237, 0x1eef, 0x2237, 0x1eef, 0x2124, 0x1e0f, 0x2124, 0x1e0f, 0x2124, 0x1e0f, +0x20ff, 0x1e1a, 0x20ff, 0x1e1a, 0x2091, 0x1dda, 0x2091, 0x1dda, 0x1f57, 0x1cca, 0x1f57, +0x1cca, 0x1dff, 0x1b98, 0x1dff, 0x1b98, 0x1d04, 0x1ac2, 0x1d04, 0x1ac2, 0x1bbd, 0x199c, +0x1bbd, 0x199c, 0x1bbd, 0x199c, 0x1b56, 0x1955, 0x1b56, 0x1955, 0x1a35, 0x1854, 0x1a35, +0x1854, 0x179a, 0x15db, 0x179a, 0x15db, 0x14ec, 0x134e, 0x14ec, 0x134e, 0x124a, 0x10d2, +0x124a, 0x10d2, 0x105f, 0xf10, 0x105f, 0xf10, 0x105f, 0xf10, 0xe56, 0xd34, 0xe56, +0xd34, 0xc06, 0xb14, 0xc06, 0xb14, 0x91e, 0x862, 0x91e, 0x862, 0x661, 0x5df, +0x661, 0x5df, 0x451, 0x40e, 0x451, 0x40e, 0x451, 0x40e, 0x197, 0x194, 0x197, +0x194, 0xff37, 0xff79, 0xff37, 0xff79, 0xfd06, 0xfd8d, 0xfd06, 0xfd8d, 0xfaf7, 0xfbc2, +0xfaf7, 0xfbc2, 0xf944, 0xfa54, 0xf944, 0xfa54, 0xf76d, 0xf8be, 0xf76d, 0xf8be, 0xf76d, +0xf8be, 0xf645, 0xf7d3, 0xf645, 0xf7d3, 0xf406, 0xf5cc, 0xf406, 0xf5cc, 0xf168, 0xf35f, +0xf168, 0xf35f, 0xf082, 0xf2a4, 0xf082, 0xf2a4, 0xef43, 0xf187, 0xef43, 0xf187, 0xeda4, +0xf003, 0xeda4, 0xf003, 0xeda4, 0xf003, 0xec3c, 0xeeab, 0xec3c, 0xeeab, 0xeab3, 0xed2c, +0xeab3, 0xed2c, 0xe947, 0xebc3, 0xe947, 0xebc3, 0xe86d, 0xeae5, 0xe86d, 0xeae5, 0xe86b, +0xead8, 0xe86b, 0xead8, 0xe86b, 0xead8, 0xe7f7, 0xea55, 0xe7f7, 0xea55, 0xe7b7, 0xea03, +0xe7b7, 0xea03, 0xe86c, 0xeaa4, 0xe86c, 0xeaa4, 0xe881, 0xeaa4, 0xe881, 0xeaa4, 0xe88c, +0xea9a, 0xe88c, 0xea9a, 0xe8a4, 0xeaa0, 0xe8a4, 0xeaa0, 0xe8a4, 0xeaa0, 0xe87e, 0xea6a, +0xe87e, 0xea6a, 0xe966, 0xeb44, 0xe966, 0xeb44, 0xe9f2, 0xebc7, 0xe9f2, 0xebc7, 0xe9cf, +0xeb9d, 0xe9cf, 0xeb9d, 0xe963, 0xeb2f, 0xe963, 0xeb2f, 0xe8f6, 0xeac1, 0xe8f6, 0xeac1, +0xe8f6, 0xeac1, 0xe91d, 0xeaeb, 0xe91d, 0xeaeb, 0xe8fd, 0xeace, 0xe8fd, 0xeace, 0xe95c, +0xeb31, 0xe95c, 0xeb31, 0xe973, 0xeb4a, 0xe973, 0xeb4a, 0xe957, 0xeb2e, 0xe957, 0xeb2e, +0xe957, 0xeb2e, 0xe9bf, 0xeb92, 0xe9bf, 0xeb92, 0xea85, 0xec4f, 0xea85, 0xec4f, 0xeba3, +0xed5e, 0xeba3, 0xed5e, 0xebcf, 0xed75, 0xebcf, 0xed75, 0xec7e, 0xee08, 0xec7e, 0xee08, +0xee24, 0xef8a, 0xee24, 0xef8a, 0xee24, 0xef8a, 0xefe7, 0xf123, 0xefe7, 0xf123, 0xf16f, +0xf278, 0xf16f, 0xf278, 0xf30e, 0xf3df, 0xf30e, 0xf3df, 0xf4e7, 0xf579, 0xf4e7, 0xf579, +0xf69f, 0xf6ef, 0xf69f, 0xf6ef, 0xf988, 0xf993, 0xf988, 0xf993, 0xf988, 0xf993, 0xfc53, +0xfc17, 0xfc53, 0xfc17, 0xfe3d, 0xfdbb, 0xfe3d, 0xfdbb, 0, 0xff39, 0, 0xff39, +0x192, 0x8a, 0x192, 0x8a, 0x363, 0x21e, 0x363, 0x21e, 0x363, 0x21e, 0x575, +0x3f9, 0x575, 0x3f9, 0x7b5, 0x60a, 0x7b5, 0x60a, 0x975, 0x7a3, 0x975, 0x7a3, +0xb8d, 0x99b, 0xb8d, 0x99b, 0xdba, 0xbb1, 0xdba, 0xbb1, 0xee9, 0xcd3, 0xee9, +0xcd3, 0xee9, 0xcd3, 0x1005, 0xdea, 0x1005, 0xdea, 0x108d, 0xe74, 0x108d, 0xe74, +0x1176, 0xf67, 0x1176, 0xf67, 0x1287, 0x1088, 0x1287, 0x1088, 0x1313, 0x1129, 0x1313, +0x1129, 0x13c5, 0x11f4, 0x13c5, 0x11f4, 0x13c5, 0x11f4, 0x12fc, 0x1147, 0x12fc, 0x1147, +0x128d, 0x10f6, 0x128d, 0x10f6, 0x12a2, 0x112b, 0x12a2, 0x112b, 0x11aa, 0x1052, 0x11aa, +0x1052, 0x10d0, 0xf97, 0x10d0, 0xf97, 0x10d0, 0xf97, 0x1079, 0xf60, 0x1079, 0xf60, +0x108b, 0xf90, 0x108b, 0xf90, 0x1020, 0xf42, 0x1020, 0xf42, 0x10a6, 0xfe4, 0x10a6, +0xfe4, 0x1182, 0x10dc, 0x1182, 0x10dc, 0x10cb, 0x1041, 0x10cb, 0x1041, 0x10cb, 0x1041, +0x1043, 0xfd6, 0x1043, 0xfd6, 0x1017, 0xfc8, 0x1017, 0xfc8, 0xf3e, 0xf0e, 0xf3e, +0xf0e, 0xe8b, 0xe7e, 0xe8b, 0xe7e, 0xd8d, 0xda3, 0xd8d, 0xda3, 0xc1c, 0xc59, +0xc1c, 0xc59, 0xc1c, 0xc59, 0xb72, 0xbd8, 0xb72, 0xbd8, 0xa38, 0xaca, 0xa38, +0xaca, 0x873, 0x932, 0x873, 0x932, 0x63c, 0x72c, 0x63c, 0x72c, 0x402, 0x522, +0x402, 0x522, 0x402, 0x522, 0x231, 0x382, 0x231, 0x382, 0xffc7, 0x148, 0xffc7, +0x148, 0xfd8a, 0xff39, 0xfd8a, 0xff39, 0xfb13, 0xfcee, 0xfb13, 0xfcee, 0xf947, 0xfb4b, +0xf947, 0xfb4b, 0xf866, 0xfa8d, 0xf866, 0xfa8d, 0xf866, 0xfa8d, 0xf7db, 0xfa21, 0xf7db, +0xfa21, 0xf740, 0xf99f, 0xf740, 0xf99f, 0xf593, 0xf805, 0xf593, 0xf805, 0xf44e, 0xf6ce, +0xf44e, 0xf6ce, 0xf344, 0xf5ca, 0xf344, 0xf5ca, 0xf1c2, 0xf44a, 0xf1c2, 0xf44a, 0xf1c2, +0xf44a, 0xf03c, 0xf2c1, 0xf03c, 0xf2c1, 0xef21, 0xf19d, 0xef21, 0xf19d, 0xee7d, 0xf0ef, +0xee7d, 0xf0ef, 0xeddc, 0xf040, 0xeddc, 0xf040, 0xedc7, 0xf01d, 0xedc7, 0xf01d, 0xedc7, +0xf01d, 0xed8c, 0xefd3, 0xed8c, 0xefd3, 0xeccc, 0xef05, 0xeccc, 0xef05, 0xebde, 0xee0a, +0xebde, 0xee0a, 0xea96, 0xecb7, 0xea96, 0xecb7, 0xe9b5, 0xebcf, 0xe9b5, 0xebcf, 0xe953, +0xeb67, 0xe953, 0xeb67, 0xe953, 0xeb67, 0xe8d3, 0xeae4, 0xe8d3, 0xeae4, 0xe7bb, 0xe9cb, +0xe7bb, 0xe9cb, 0xe70f, 0xe91e, 0xe70f, 0xe91e, 0xe6d2, 0xe8e1, 0xe6d2, 0xe8e1, 0xe69b, +0xe8aa, 0xe69b, 0xe8aa, 0xe69b, 0xe8aa, 0xe6e2, 0xe8ec, 0xe6e2, 0xe8ec, 0xe6f6, 0xe8f9, +0xe6f6, 0xe8f9, 0xe7e4, 0xe9db, 0xe7e4, 0xe9db, 0xe8ba, 0xea9c, 0xe8ba, 0xea9c, 0xe9f3, +0xebb8, 0xe9f3, 0xebb8, 0xec2d, 0xedcd, 0xec2d, 0xedcd, 0xec2d, 0xedcd, 0xedd7, 0xef47, +0xedd7, 0xef47, 0xf096, 0xf1cb, 0xf096, 0xf1cb, 0xf359, 0xf448, 0xf359, 0xf448, 0xf549, +0xf5e8, 0xf549, 0xf5e8, 0xf6d4, 0xf718, 0xf6d4, 0xf718, 0xf944, 0xf924, 0xf944, 0xf924, +0xf944, 0xf924, 0xfc3b, 0xfbaf, 0xfc3b, 0xfbaf, 0xfe2e, 0xfd31, 0xfe2e, 0xfd31, 0x167, +0xfff5, 0x167, 0xfff5, 0x4b5, 0x2cd, 0x4b5, 0x2cd, 0x75c, 0x4fe, 0x75c, 0x4fe, +0x75c, 0x4fe, 0xad0, 0x801, 0xad0, 0x801, 0xe14, 0xad9, 0xe14, 0xad9, 0x10ff, +0xd61, 0x10ff, 0xd61, 0x1474, 0x107d, 0x1474, 0x107d, 0x1740, 0x12fd, 0x1740, 0x12fd, +0x19ee, 0x156d, 0x19ee, 0x156d, 0x19ee, 0x156d, 0x1d74, 0x18c3, 0x1d74, 0x18c3, 0x1fdd, +0x1b0c, 0x1fdd, 0x1b0c, 0x218d, 0x1cac, 0x218d, 0x1cac, 0x2288, 0x1da6, 0x2288, 0x1da6, +0x2307, 0x1e32, 0x2307, 0x1e32, 0x2395, 0x1edc, 0x2395, 0x1edc, 0x2395, 0x1edc, 0x23ed, +0x1f5c, 0x23ed, 0x1f5c, 0x240f, 0x1faf, 0x240f, 0x1faf, 0x235e, 0x1f39, 0x235e, 0x1f39, +0x229d, 0x1eb8, 0x229d, 0x1eb8, 0x21a4, 0x1e04, 0x21a4, 0x1e04, 0x21a4, 0x1e04, 0x20db, +0x1d82, 0x20db, 0x1d82, 0x1fc1, 0x1caf, 0x1fc1, 0x1caf, 0x1d93, 0x1ac7, 0x1d93, 0x1ac7, +0x1cb3, 0x1a2b, 0x1cb3, 0x1a2b, 0x1c33, 0x19eb, 0x1c33, 0x19eb, 0x1afc, 0x18ee, 0x1afc, +0x18ee, 0x1afc, 0x18ee, 0x19da, 0x1802, 0x19da, 0x1802, 0x189a, 0x16f3, 0x189a, 0x16f3, +0x1770, 0x15f6, 0x1770, 0x15f6, 0x1644, 0x14f2, 0x1644, 0x14f2, 0x157a, 0x144d, 0x157a, +0x144d, 0x1414, 0x130b, 0x1414, 0x130b, 0x1414, 0x130b, 0x11e6, 0x10ff, 0x11e6, 0x10ff, +0xf69, 0xea3, 0xf69, 0xea3, 0xc77, 0xbd4, 0xc77, 0xbd4, 0xa13, 0x995, 0xa13, +0x995, 0x810, 0x7b9, 0x810, 0x7b9, 0x810, 0x7b9, 0x64d, 0x621, 0x64d, 0x621, +0x405, 0x407, 0x405, 0x407, 0x1c9, 0x1fc, 0x1c9, 0x1fc, 0x1c, 0x83, 0x1c, +0x83, 0xfe87, 0xff25, 0xfe87, 0xff25, 0xfc96, 0xfd6c, 0xfc96, 0xfd6c, 0xfc96, 0xfd6c, +0xfa42, 0xfb51, 0xfa42, 0xfb51, 0xf884, 0xf9cb, 0xf884, 0xf9cb, 0xf692, 0xf80f, 0xf692, +0xf80f, 0xf583, 0xf733, 0xf583, 0xf733, 0xf3e8, 0xf5c6, 0xf3e8, 0xf5c6, 0xf1a9, 0xf3b0, +0xf1a9, 0xf3b0, 0xf1a9, 0xf3b0, 0xf0cd, 0xf2f6, 0xf0cd, 0xf2f6, 0xefa6, 0xf1e9, 0xefa6, +0xf1e9, 0xee40, 0xf096, 0xee40, 0xf096, 0xece5, 0xef45, 0xece5, 0xef45, 0xecc7, 0xef2a, +0xecc7, 0xef2a, 0xecc7, 0xef2a, 0xec96, 0xeef4, 0xec96, 0xeef4, 0xebcd, 0xee20, 0xebcd, +0xee20, 0xec66, 0xeea9, 0xec66, 0xeea9, 0xecbc, 0xeee9, 0xecbc, 0xeee9, 0xece6, 0xeefc, +0xece6, 0xeefc, 0xedcb, 0xefc8, 0xedcb, 0xefc8, 0xedcb, 0xefc8, 0xee92, 0xf076, 0xee92, +0xf076, 0xeef8, 0xf0c5, 0xeef8, 0xf0c5, 0xef3a, 0xf0f3, 0xef3a, 0xf0f3, 0xeef4, 0xf09d, +0xeef4, 0xf09d, 0xef28, 0xf0c7, 0xef28, 0xf0c7, 0xefcd, 0xf167, 0xefcd, 0xf167, 0xefcd, +0xf167, 0xefce, 0xf169, 0xefce, 0xf169, 0xefca, 0xf16c, 0xefca, 0xf16c, 0xef96, 0xf144, +0xef96, 0xf144, 0xef79, 0xf137, 0xef79, 0xf137, 0xef3e, 0xf110, 0xef3e, 0xf110, 0xef3e, +0xf110, 0xeeea, 0xf0d1, 0xeeea, 0xf0d1, 0xee70, 0xf06d, 0xee70, 0xf06d, 0xed74, 0xef85, +0xed74, 0xef85, 0xed13, 0xef36, 0xed13, 0xef36, 0xed36, 0xef65, 0xed36, 0xef65, 0xeded, +0xf021, 0xeded, 0xf021, 0xeded, 0xf021, 0xee68, 0xf09a, 0xee68, 0xf09a, 0xee52, 0xf078, +0xee52, 0xf078, 0xef92, 0xf1a2, 0xef92, 0xf1a2, 0xf0d3, 0xf2c3, 0xf0d3, 0xf2c3, 0xf1dd, +0xf3a3, 0xf1dd, 0xf3a3, 0xf2e2, 0xf474, 0xf2e2, 0xf474, 0xf2e2, 0xf474, 0xf393, 0xf4e7, +0xf393, 0xf4e7, 0xf4a8, 0xf5b5, 0xf4a8, 0xf5b5, 0xf621, 0xf6e0, 0xf621, 0xf6e0, 0xf861, +0xf8cc, 0xf861, 0xf8cc, 0xfa19, 0xfa2e, 0xfa19, 0xfa2e, 0xfa19, 0xfa2e, 0xfc02, 0xfbbd, +0xfc02, 0xfbbd, 0xfddc, 0xfd3e, 0xfddc, 0xfd3e, 0xff17, 0xfe21, 0xff17, 0xfe21, 0xc3, +0xff79, 0xc3, 0xff79, 0x2af, 0x117, 0x2af, 0x117, 0x485, 0x2a5, 0x485, 0x2a5, +0x485, 0x2a5, 0x5c5, 0x3a5, 0x5c5, 0x3a5, 0x79c, 0x545, 0x79c, 0x545, 0x996, +0x710, 0x996, 0x710, 0xb36, 0x88c, 0xb36, 0x88c, 0xc76, 0x9b1, 0xc76, 0x9b1, +0xd90, 0xab9, 0xd90, 0xab9, 0xd90, 0xab9, 0xe5c, 0xb7c, 0xe5c, 0xb7c, 0xeac, +0xbca, 0xeac, 0xbca, 0x1045, 0xd68, 0x1045, 0xd68, 0x1110, 0xe3e, 0x1110, 0xe3e, +0x116b, 0xeab, 0x116b, 0xeab, 0x116b, 0xeab, 0x1254, 0xfa9, 0x1254, 0xfa9, 0x1298, +0x1005, 0x1298, 0x1005, 0x1204, 0xf8d, 0x1204, 0xf8d, 0x110a, 0xeb0, 0x110a, 0xeb0, +0x1158, 0xf1e, 0x1158, 0xf1e, 0x10e2, 0xeca, 0x10e2, 0xeca, 0x10e2, 0xeca, 0x104c, +0xe57, 0x104c, 0xe57, 0x10bc, 0xeec, 0x10bc, 0xeec, 0x102f, 0xe86, 0x102f, 0xe86, +0xf4e, 0xdcf, 0xf4e, 0xdcf, 0xf14, 0xdc0, 0xf14, 0xdc0, 0xea5, 0xd80, 0xea5, +0xd80, 0xea5, 0xd80, 0xe2e, 0xd3b, 0xe2e, 0xd3b, 0xe04, 0xd46, 0xe04, 0xd46, +0xdc0, 0xd3b, 0xdc0, 0xd3b, 0xdc8, 0xd7e, 0xdc8, 0xd7e, 0xd8a, 0xd7e, 0xd8a, +0xd7e, 0xd8a, 0xd7e, 0xc3c, 0xc71, 0xc3c, 0xc71, 0xaaa, 0xb20, 0xaaa, 0xb20, +0x971, 0xa2a, 0x971, 0xa2a, 0x7db, 0x8d7, 0x7db, 0x8d7, 0x5a6, 0x6e2, 0x5a6, +0x6e2, 0x379, 0x4f3, 0x379, 0x4f3, 0x379, 0x4f3, 0x1b0, 0x364, 0x1b0, 0x364, +0xffc3, 0x1ad, 0xffc3, 0x1ad, 0xfe45, 0x60, 0xfe45, 0x60, 0xfcde, 0xff22, 0xfcde, +0xff22, 0xfc3a, 0xfea1, 0xfc3a, 0xfea1, 0xfc3a, 0xfea1, 0xfb0f, 0xfd91, 0xfb0f, 0xfd91, +0xf8f7, 0xfb8d, 0xf8f7, 0xfb8d, 0xf79b, 0xfa3c, 0xf79b, 0xfa3c, 0xf5bf, 0xf866, 0xf5bf, +0xf866, 0xf3dc, 0xf682, 0xf3dc, 0xf682, 0xf216, 0xf4b6, 0xf216, 0xf4b6, 0xf216, 0xf4b6, +0xf112, 0xf3a8, 0xf112, 0xf3a8, 0xf034, 0xf2bd, 0xf034, 0xf2bd, 0xef88, 0xf203, 0xef88, +0xf203, 0xef25, 0xf191, 0xef25, 0xf191, 0xede2, 0xf03f, 0xede2, 0xf03f, 0xecb1, 0xef02, +0xecb1, 0xef02, 0xecb1, 0xef02, 0xeb3f, 0xed85, 0xeb3f, 0xed85, 0xe9bc, 0xebfc, 0xe9bc, +0xebfc, 0xe8de, 0xeb1b, 0xe8de, 0xeb1b, 0xe84b, 0xea89, 0xe84b, 0xea89, 0xe7d4, 0xea16, +0xe7d4, 0xea16, 0xe7d4, 0xea16, 0xe6ee, 0xe937, 0xe6ee, 0xe937, 0xe5f5, 0xe846, 0xe5f5, +0xe846, 0xe4c6, 0xe720, 0xe4c6, 0xe720, 0xe3f6, 0xe658, 0xe3f6, 0xe658, 0xe365, 0xe5cc, +0xe365, 0xe5cc, 0xe330, 0xe597, 0xe330, 0xe597, 0xe330, 0xe597, 0xe2f8, 0xe55a, 0xe2f8, +0xe55a, 0xe315, 0xe56a, 0xe315, 0xe56a, 0xe498, 0xe6d7, 0xe498, 0xe6d7, 0xe570, 0xe78f, +0xe570, 0xe78f, 0xe745, 0xe939, 0xe745, 0xe939, 0xe9d6, 0xeb92, 0xe9d6, 0xeb92, 0xe9d6, +0xeb92, 0xec14, 0xed8e, 0xec14, 0xed8e, 0xedcb, 0xeef6, 0xedcb, 0xeef6, 0xf027, 0xf0f8, +0xf027, 0xf0f8, 0xf325, 0xf393, 0xf325, 0xf393, 0xf525, 0xf529, 0xf525, 0xf529, 0xf525, +0xf529, 0xf863, 0xf7f4, 0xf863, 0xf7f4, 0xfc93, 0xfbaf, 0xfc93, 0xfbaf, 0xffe5, 0xfe89, +0xffe5, 0xfe89, 0x3b3, 0x1e0, 0x3b3, 0x1e0, 0x803, 0x5bc, 0x803, 0x5bc, 0xbc7, +0x911, 0xbc7, 0x911, 0xbc7, 0x911, 0xfa3, 0xc86, 0xfa3, 0xc86, 0x12f4, 0xf79, +0x12f4, 0xf79, 0x1626, 0x1259, 0x1626, 0x1259, 0x1993, 0x1580, 0x1993, 0x1580, 0x1d0e, +0x18c3, 0x1d0e, 0x18c3, 0x1f1b, 0x1aa5, 0x1f1b, 0x1aa5, 0x1f1b, 0x1aa5, 0x20d1, 0x1c3f, +0x20d1, 0x1c3f, 0x2240, 0x1d9f, 0x2240, 0x1d9f, 0x233d, 0x1e9b, 0x233d, 0x1e9b, 0x2421, +0x1f8a, 0x2421, 0x1f8a, 0x24e8, 0x2067, 0x24e8, 0x2067, 0x24e8, 0x2067, 0x2576, 0x2114, +0x2576, 0x2114, 0x2554, 0x2119, 0x2554, 0x2119, 0x2532, 0x2123, 0x2532, 0x2123, 0x24a3, +0x20c6, 0x24a3, 0x20c6, 0x24c2, 0x2119, 0x24c2, 0x2119, 0x2414, 0x20a1, 0x2414, 0x20a1, +0x2414, 0x20a1, 0x2398, 0x205b, 0x2398, 0x205b, 0x232c, 0x2025, 0x232c, 0x2025, 0x21fa, +0x1f27, 0x21fa, 0x1f27, 0x20c6, 0x1e26, 0x20c6, 0x1e26, 0x1ff5, 0x1d86, 0x1ff5, 0x1d86, +0x1f38, 0x1cf9, 0x1f38, 0x1cf9, 0x1f38, 0x1cf9, 0x1dc3, 0x1bb4, 0x1dc3, 0x1bb4, 0x1c82, +0x1aa0, 0x1c82, 0x1aa0, 0x1b11, 0x195d, 0x1b11, 0x195d, 0x1924, 0x179f, 0x1924, 0x179f, +0x1768, 0x1613, 0x1768, 0x1613, 0x1768, 0x1613, 0x14f6, 0x13d2, 0x14f6, 0x13d2, 0x11e4, +0x10f5, 0x11e4, 0x10f5, 0xf41, 0xe87, 0xf41, 0xe87, 0xcb2, 0xc30, 0xcb2, 0xc30, +0x9ef, 0x9a8, 0x9ef, 0x9a8, 0x6e7, 0x6dc, 0x6e7, 0x6dc, 0x6e7, 0x6dc, 0x49b, +0x4cc, 0x49b, 0x4cc, 0x25c, 0x2ca, 0x25c, 0x2ca, 0x11, 0xba, 0x11, 0xba, +0xfd1f, 0xfe00, 0xfd1f, 0xfe00, 0xfb01, 0xfc18, 0xfb01, 0xfc18, 0xf959, 0xfa9f, 0xf959, +0xfa9f, 0xf959, 0xfa9f, 0xf89c, 0xfa0c, 0xf89c, 0xfa0c, 0xf870, 0xfa03, 0xf870, 0xfa03, +0xf78c, 0xf939, 0xf78c, 0xf939, 0xf75e, 0xf91e, 0xf75e, 0xf91e, 0xf689, 0xf851, 0xf689, +0xf851, 0xf689, 0xf851, 0xf4e5, 0xf6ae, 0xf4e5, 0xf6ae, 0xf30c, 0xf4cb, 0xf30c, 0xf4cb, +0xf299, 0xf448, 0xf299, 0xf448, 0xf260, 0xf3f8, 0xf260, 0xf3f8, 0xf1d5, 0xf351, 0xf1d5, +0xf351, 0xf215, 0xf371, 0xf215, 0xf371, 0xf215, 0xf371, 0xf213, 0xf34d, 0xf213, 0xf34d, +0xf112, 0xf22b, 0xf112, 0xf22b, 0xf143, 0xf23d, 0xf143, 0xf23d, 0xf164, 0xf242, 0xf164, +0xf242, 0xf1ce, 0xf296, 0xf1ce, 0xf296, 0xf253, 0xf30c, 0xf253, 0xf30c, 0xf253, 0xf30c, +0xf1e7, 0xf29a, 0xf1e7, 0xf29a, 0xf099, 0xf14f, 0xf099, 0xf14f, 0xef92, 0xf054, 0xef92, +0xf054, 0xef70, 0xf049, 0xef70, 0xf049, 0xee5e, 0xef57, 0xee5e, 0xef57, 0xee5e, 0xef57, +0xedf7, 0xef19, 0xedf7, 0xef19, 0xed4e, 0xeea1, 0xed4e, 0xeea1, 0xecb3, 0xee3d, 0xecb3, +0xee3d, 0xeb72, 0xed36, 0xeb72, 0xed36, 0xea86, 0xec87, 0xea86, 0xec87, 0xe8e1, 0xeb1e, +0xe8e1, 0xeb1e, 0xe8e1, 0xeb1e, 0xe670, 0xe8e7, 0xe670, 0xe8e7, 0xe45c, 0xe709, 0xe45c, +0xe709, 0xe313, 0xe5ee, 0xe313, 0xe5ee, 0xe242, 0xe543, 0xe242, 0xe543, 0xe117, 0xe433, +0xe117, 0xe433, 0xe0ea, 0xe415, 0xe0ea, 0xe415, 0xe0ea, 0xe415, 0xe125, 0xe453, 0xe125, +0xe453, 0xe1cc, 0xe4ee, 0xe1cc, 0xe4ee, 0xe2cb, 0xe5d4, 0xe2cb, 0xe5d4, 0xe48d, 0xe76f, +0xe48d, 0xe76f, 0xe5fe, 0xe8ad, 0xe5fe, 0xe8ad, 0xe5fe, 0xe8ad, 0xe7a5, 0xea15, 0xe7a5, +0xea15, 0xe9f4, 0xec1a, 0xe9f4, 0xec1a, 0xec84, 0xee58, 0xec84, 0xee58, 0xef56, 0xf0cf, +0xef56, 0xf0cf, 0xf347, 0xf461, 0xf347, 0xf461, 0xf619, 0xf6cf, 0xf619, 0xf6cf, 0xf619, +0xf6cf, 0xf80b, 0xf85d, 0xf80b, 0xf85d, 0xfaea, 0xfad7, 0xfaea, 0xfad7, 0xfe70, 0xfdf9, +0xfe70, 0xfdf9, 0x169, 0x93, 0x169, 0x93, 0x442, 0x311, 0x442, 0x311, 0x71f, +0x598, 0x71f, 0x598, 0x71f, 0x598, 0x939, 0x764, 0x939, 0x764, 0xbad, 0x990, +0xbad, 0x990, 0xdae, 0xb51, 0xdae, 0xb51, 0xf5a, 0xcc4, 0xf5a, 0xcc4, 0xfd6, +0xd0f, 0xfd6, 0xd0f, 0xfd6, 0xd0f, 0x115e, 0xe6e, 0x115e, 0xe6e, 0x12fc, 0xfea, +0x12fc, 0xfea, 0x1406, 0x10da, 0x1406, 0x10da, 0x15be, 0x127f, 0x15be, 0x127f, 0x17dc, +0x1490, 0x17dc, 0x1490, 0x183b, 0x14eb, 0x183b, 0x14eb, 0x183b, 0x14eb, 0x1775, 0x1426, +0x1775, 0x1426, 0x1801, 0x14bb, 0x1801, 0x14bb, 0x1895, 0x155e, 0x1895, 0x155e, 0x1859, +0x1538, 0x1859, 0x1538, 0x196e, 0x1669, 0x196e, 0x1669, 0x196e, 0x1669, 0x19fb, 0x171b, +0x19fb, 0x171b, 0x18f9, 0x1644, 0x18f9, 0x1644, 0x18b2, 0x1630, 0x18b2, 0x1630, 0x1795, +0x154c, 0x1795, 0x154c, 0x1663, 0x145a, 0x1663, 0x145a, 0x1432, 0x126f, 0x1432, 0x126f, +0x1432, 0x126f, 0x1217, 0x10a0, 0x1217, 0x10a0, 0xf61, 0xe3a, 0xf61, 0xe3a, 0xd66, +0xc95, 0xd66, 0xc95, 0xaf4, 0xa7b, 0xaf4, 0xa7b, 0x840, 0x821, 0x840, 0x821, +0x625, 0x65f, 0x625, 0x65f, 0x625, 0x65f, 0x359, 0x3ec, 0x359, 0x3ec, 0xe1, +0x1ca, 0xe1, 0x1ca, 0xfdbd, 0xfef9, 0xfdbd, 0xfef9, 0xfae0, 0xfc69, 0xfae0, 0xfc69, +0xf7ac, 0xf97c, 0xf7ac, 0xf97c, 0xf7ac, 0xf97c, 0xf431, 0xf641, 0xf431, 0xf641, 0xf095, +0xf2dc, 0xf095, 0xf2dc, 0xeef1, 0xf167, 0xeef1, 0xf167, 0xee29, 0xf0c6, 0xee29, 0xf0c6, +0xed4a, 0xf005, 0xed4a, 0xf005, 0xec59, 0xef2a, 0xec59, 0xef2a, 0xec59, 0xef2a, 0xebfc, +0xeedc, 0xebfc, 0xeedc, 0xeaf0, 0xedd8, 0xeaf0, 0xedd8, 0xea12, 0xecfd, 0xea12, 0xecfd, +0xea46, 0xed30, 0xea46, 0xed30, 0xea82, 0xed69, 0xea82, 0xed69, 0xea8f, 0xed72, 0xea8f, +0xed72, 0xea8f, 0xed72, 0xea9c, 0xed7a, 0xea9c, 0xed7a, 0xeb33, 0xee0d, 0xeb33, 0xee0d, +0xeb3d, 0xee16, 0xeb3d, 0xee16, 0xeb95, 0xee6f, 0xeb95, 0xee6f, 0xeb21, 0xee00, 0xeb21, +0xee00, 0xeb21, 0xee00, 0xeab9, 0xeda0, 0xeab9, 0xeda0, 0xea3a, 0xed2c, 0xea3a, 0xed2c, +0xea57, 0xed55, 0xea57, 0xed55, 0xea6b, 0xed76, 0xea6b, 0xed76, 0xea4d, 0xed65, 0xea4d, +0xed65, 0xe944, 0xec67, 0xe944, 0xec67, 0xe944, 0xec67, 0xe867, 0xeb92, 0xe867, 0xeb92, +0xe872, 0xeb9f, 0xe872, 0xeb9f, 0xe898, 0xebbf, 0xe898, 0xebbf, 0xe8e3, 0xebfc, 0xe8e3, +0xebfc, 0xe961, 0xec61, 0xe961, 0xec61, 0xeb2a, 0xee04, 0xeb2a, 0xee04, 0xeb2a, 0xee04, +0xed1a, 0xefc2, 0xed1a, 0xefc2, 0xefd7, 0xf23e, 0xefd7, 0xf23e, 0xf3a2, 0xf5bb, 0xf3a2, +0xf5bb, 0xf753, 0xf911, 0xf753, 0xf911, 0xf9d1, 0xfb25, 0xf9d1, 0xfb25, 0xf9d1, 0xfb25, +0xfccd, 0xfdad, 0xfccd, 0xfdad, 0x6d, 0xce, 0x6d, 0xce, 0x3b3, 0x38e, 0x3b3, +0x38e, 0x6a9, 0x5f8, 0x6a9, 0x5f8, 0xb2e, 0x9ee, 0xb2e, 0x9ee, 0xe65, 0xc97, +0xe65, 0xc97, 0xe65, 0xc97, 0x1199, 0xf3e, 0x1199, 0xf3e, 0x1528, 0x1247, 0x1528, +0x1247, 0x17e2, 0x1484, 0x17e2, 0x1484, 0x1acd, 0x16fc, 0x1acd, 0x16fc, 0x1d53, 0x191c, +0x1d53, 0x191c, 0x1f71, 0x1ae4, 0x1f71, 0x1ae4, 0x1f71, 0x1ae4, 0x2088, 0x1bb4, 0x2088, +0x1bb4, 0x22c5, 0x1dbc, 0x22c5, 0x1dbc, 0x23dc, 0x1eaf, 0x23dc, 0x1eaf, 0x24d3, 0x1f94, +0x24d3, 0x1f94, 0x254d, 0x200d, 0x254d, 0x200d, 0x254d, 0x200d, 0x257d, 0x204c, 0x257d, +0x204c, 0x253c, 0x2028, 0x253c, 0x2028, 0x2422, 0x1f39, 0x2422, 0x1f39, 0x22fe, 0x1e4a, +0x22fe, 0x1e4a, 0x21a0, 0x1d2b, 0x21a0, 0x1d2b, 0x1f08, 0x1ad8, 0x1f08, 0x1ad8, 0x1f08, +0x1ad8, 0x1c57, 0x1872, 0x1c57, 0x1872, 0x1a67, 0x16d0, 0x1a67, 0x16d0, 0x183a, 0x14f2, +0x183a, 0x14f2, 0x1616, 0x131c, 0x1616, 0x131c, 0x1453, 0x11a6, 0x1453, 0x11a6, 0x134b, +0x10e8, 0x134b, 0x10e8, 0x134b, 0x10e8, 0x1138, 0xf1b, 0x1138, 0xf1b, 0x10ca, 0xef1, +0x10ca, 0xef1, 0x102d, 0xe93, 0x102d, 0xe93, 0xf39, 0xddc, 0xf39, 0xddc, 0xe00, +0xcdb, 0xe00, 0xcdb, 0xe00, 0xcdb, 0xd58, 0xc68, 0xd58, 0xc68, 0xc73, 0xbb6, +0xc73, 0xbb6, 0xb7b, 0xaee, 0xb7b, 0xaee, 0xb65, 0xb07, 0xb65, 0xb07, 0xa54, +0xa22, 0xa54, 0xa22, 0x8d7, 0x8d1, 0x8d7, 0x8d1, 0x8d7, 0x8d1, 0x749, 0x76e, +0x749, 0x76e, 0x66f, 0x6bd, 0x66f, 0x6bd, 0x4e2, 0x556, 0x4e2, 0x556, 0x362, +0x3fb, 0x362, 0x3fb, 0x19d, 0x257, 0x19d, 0x257, 0xfff4, 0xcb, 0xfff4, 0xcb, +0xfff4, 0xcb, 0xfe1e, 0xff0e, 0xfe1e, 0xff0e, 0xfcf2, 0xfdf5, 0xfcf2, 0xfdf5, 0xfb96, +0xfca5, 0xfb96, 0xfca5, 0xfa28, 0xfb3d, 0xfa28, 0xfb3d, 0xf965, 0xfa78, 0xf965, 0xfa78, +0xf965, 0xfa78, 0xf903, 0xfa0d, 0xf903, 0xfa0d, 0xf8aa, 0xf9a4, 0xf8aa, 0xf9a4, 0xf8ce, +0xf9b0, 0xf8ce, 0xf9b0, 0xf8d7, 0xf99b, 0xf8d7, 0xf99b, 0xf810, 0xf8b0, 0xf810, 0xf8b0, +0xf75b, 0xf7d4, 0xf75b, 0xf7d4, 0xf75b, 0xf7d4, 0xf711, 0xf761, 0xf711, 0xf761, 0xf733, +0xf759, 0xf733, 0xf759, 0xf754, 0xf752, 0xf754, 0xf752, 0xf879, 0xf852, 0xf879, 0xf852, +0xf8b0, 0xf86a, 0xf8b0, 0xf86a, 0xf970, 0xf912, 0xf970, 0xf912, 0xf970, 0xf912, 0xf945, +0xf8d8, 0xf945, 0xf8d8, 0xf8e3, 0xf872, 0xf8e3, 0xf872, 0xf8ba, 0xf850, 0xf8ba, 0xf850, +0xf854, 0xf7ff, 0xf854, 0xf7ff, 0xf700, 0xf6cc, 0xf700, 0xf6cc, 0xf700, 0xf6cc, 0xf583, +0xf57c, 0xf583, 0xf57c, 0xf480, 0xf4b2, 0xf480, 0xf4b2, 0xf2a1, 0xf316, 0xf2a1, 0xf316, +0xf1b2, 0xf273, 0xf1b2, 0xf273, 0xf0c6, 0xf1db, 0xf0c6, 0xf1db, 0xeff0, 0xf15d, 0xeff0, +0xf15d, 0xeff0, 0xf15d, 0xeebd, 0xf084, 0xeebd, 0xf084, 0xed60, 0xef81, 0xed60, 0xef81, +0xec12, 0xee89, 0xec12, 0xee89, 0xeab6, 0xed7c, 0xeab6, 0xed7c, 0xe87b, 0xeb89, 0xe87b, +0xeb89, 0xe73b, 0xea86, 0xe73b, 0xea86, 0xe73b, 0xea86, 0xe626, 0xe9a1, 0xe626, 0xe9a1, +0xe618, 0xe9b4, 0xe618, 0xe9b4, 0xe5d6, 0xe985, 0xe5d6, 0xe985, 0xe60d, 0xe9be, 0xe60d, +0xe9be, 0xe682, 0xea26, 0xe682, 0xea26, 0xe682, 0xea26, 0xe6b1, 0xea38, 0xe6b1, 0xea38, +0xe863, 0xebbe, 0xe863, 0xebbe, 0xe9ac, 0xeccf, 0xe9ac, 0xeccf, 0xebda, 0xeeb8, 0xebda, +0xeeb8, 0xed9d, 0xf02c, 0xed9d, 0xf02c, 0xefd5, 0xf20f, 0xefd5, 0xf20f, 0xefd5, 0xf20f, +0xf187, 0xf366, 0xf187, 0xf366, 0xf44e, 0xf5cd, 0xf44e, 0xf5cd, 0xf747, 0xf868, 0xf747, +0xf868, 0xf94d, 0xfa0f, 0xf94d, 0xfa0f, 0xfb16, 0xfb7b, 0xfb16, 0xfb7b, 0xfb16, 0xfb7b, +0xfd7c, 0xfd8a, 0xfd7c, 0xfd8a, 0x1b, 0xffd7, 0x1b, 0xffd7, 0x255, 0x1c6, 0x255, +0x1c6, 0x4a5, 0x3d0, 0x4a5, 0x3d0, 0x637, 0x524, 0x637, 0x524, 0x762, 0x619, +0x762, 0x619, 0x762, 0x619, 0x8f1, 0x777, 0x8f1, 0x777, 0xad8, 0x933, 0xad8, +0x933, 0xb88, 0x9bd, 0xb88, 0x9bd, 0xcda, 0xaee, 0xcda, 0xaee, 0xe7f, 0xc75, +0xe7f, 0xc75, 0x1026, 0xe02, 0x1026, 0xe02, 0x1026, 0xe02, 0x1175, 0xf38, 0x1175, +0xf38, 0x13fd, 0x11a9, 0x13fd, 0x11a9, 0x1564, 0x12fb, 0x1564, 0x12fb, 0x15ab, 0x132e, +0x15ab, 0x132e, 0x163a, 0x13aa, 0x163a, 0x13aa, 0x163a, 0x13aa, 0x175e, 0x14be, 0x175e, +0x14be, 0x1804, 0x1557, 0x1804, 0x1557, 0x1891, 0x15da, 0x1891, 0x15da, 0x1a02, 0x1747, +0x1a02, 0x1747, 0x1a9d, 0x17e3, 0x1a9d, 0x17e3, 0x1b19, 0x1866, 0x1b19, 0x1866, 0x1b19, +0x1866, 0x1a7b, 0x17d8, 0x1a7b, 0x17d8, 0x1a25, 0x179b, 0x1a25, 0x179b, 0x197d, 0x1714, +0x197d, 0x1714, 0x18c5, 0x1688, 0x18c5, 0x1688, 0x1714, 0x150d, 0x1714, 0x150d, 0x157b, +0x13b3, 0x157b, 0x13b3, 0x157b, 0x13b3, 0x1335, 0x11b6, 0x1335, 0x11b6, 0x110c, 0xfdf, +0x110c, 0xfdf, 0xf6b, 0xe96, 0xf6b, 0xe96, 0xce0, 0xc6a, 0xce0, 0xc6a, 0xa15, +0xa02, 0xa15, 0xa02, 0xa15, 0xa02, 0x79e, 0x7f2, 0x79e, 0x7f2, 0x4b6, 0x571, +0x4b6, 0x571, 0x19c, 0x2be, 0x19c, 0x2be, 0xfe2b, 0xffb2, 0xfe2b, 0xffb2, 0xf9bf, +0xfba4, 0xf9bf, 0xfba4, 0xf5f2, 0xf830, 0xf5f2, 0xf830, 0xf5f2, 0xf830, 0xf281, 0xf511, +0xf281, 0xf511, 0xf0c5, 0xf39f, 0xf0c5, 0xf39f, 0xede6, 0xf0ff, 0xede6, 0xf0ff, 0xec03, +0xef52, 0xec03, 0xef52, 0xe9ec, 0xed68, 0xe9ec, 0xed68, 0xe834, 0xebd2, 0xe834, 0xebd2, +0xe834, 0xebd2, 0xe71a, 0xead1, 0xe71a, 0xead1, 0xe623, 0xe9ea, 0xe623, 0xe9ea, 0xe567, +0xe937, 0xe567, 0xe937, 0xe417, 0xe7e9, 0xe417, 0xe7e9, 0xe3da, 0xe7a7, 0xe3da, 0xe7a7, +0xe3da, 0xe7a7, 0xe39b, 0xe75f, 0xe39b, 0xe75f, 0xe438, 0xe7ef, 0xe438, 0xe7ef, 0xe454, +0xe7fa, 0xe454, 0xe7fa, 0xe3ed, 0xe780, 0xe3ed, 0xe780, 0xe2ff, 0xe67d, 0xe2ff, 0xe67d, +0xe32b, 0xe691, 0xe32b, 0xe691, 0xe32b, 0xe691, 0xe3e7, 0xe733, 0xe3e7, 0xe733, 0xe4b9, +0xe7e9, 0xe4b9, 0xe7e9, 0xe4c7, 0xe7d8, 0xe4c7, 0xe7d8, 0xe472, 0xe760, 0xe472, 0xe760, +0xe3c1, 0xe687, 0xe3c1, 0xe687, 0xe3df, 0xe678, 0xe3df, 0xe678, 0xe3df, 0xe678, 0xe3c9, +0xe62f, 0xe3c9, 0xe62f, 0xe41a, 0xe647, 0xe41a, 0xe647, 0xe5a7, 0xe792, 0xe5a7, 0xe792, +0xe701, 0xe8a2, 0xe701, 0xe8a2, 0xe8d0, 0xea20, 0xe8d0, 0xea20, 0xe8d0, 0xea20, 0xeb3f, +0xec35, 0xeb3f, 0xec35, 0xef0e, 0xefa3, 0xef0e, 0xefa3, 0xf180, 0xf1ac, 0xf180, 0xf1ac, +0xf46c, 0xf42b, 0xf46c, 0xf42b, 0xf7bd, 0xf70a, 0xf7bd, 0xf70a, 0xfb7f, 0xfa59, 0xfb7f, +0xfa59, 0xfb7f, 0xfa59, 0xfed7, 0xfd3d, 0xfed7, 0xfd3d, 0x2c9, 0xbd, 0x2c9, 0xbd, +0x681, 0x407, 0x681, 0x407, 0xa14, 0x733, 0xa14, 0x733, 0xdf7, 0xab7, 0xdf7, +0xab7, 0x1152, 0xdbe, 0x1152, 0xdbe, 0x1152, 0xdbe, 0x144c, 0x106f, 0x144c, 0x106f, +0x1718, 0x1301, 0x1718, 0x1301, 0x199d, 0x1559, 0x199d, 0x1559, 0x1aca, 0x1669, 0x1aca, +0x1669, 0x1c47, 0x17d7, 0x1c47, 0x17d7, 0x1c47, 0x17d7, 0x1d7f, 0x190f, 0x1d7f, 0x190f, +0x1f43, 0x1ae1, 0x1f43, 0x1ae1, 0x2047, 0x1c00, 0x2047, 0x1c00, 0x2138, 0x1d17, 0x2138, +0x1d17, 0x21e8, 0x1df6, 0x21e8, 0x1df6, 0x2266, 0x1ea9, 0x2266, 0x1ea9, 0x2266, 0x1ea9, +0x21d3, 0x1e51, 0x21d3, 0x1e51, 0x21dc, 0x1e97, 0x21dc, 0x1e97, 0x20b5, 0x1dad, 0x20b5, +0x1dad, 0x1eba, 0x1bee, 0x1eba, 0x1bee, 0x1d0f, 0x1a7b, 0x1d0f, 0x1a7b, 0x1c34, 0x19d4, +0x1c34, 0x19d4, 0x1c34, 0x19d4, 0x1c1c, 0x19e8, 0x1c1c, 0x19e8, 0x1a89, 0x187c, 0x1a89, +0x187c, 0x1a11, 0x1824, 0x1a11, 0x1824, 0x18a9, 0x16d4, 0x18a9, 0x16d4, 0x17f4, 0x1632, +0x17f4, 0x1632, 0x17f4, 0x1632, 0x177c, 0x15c6, 0x177c, 0x15c6, 0x178a, 0x15dc, 0x178a, +0x15dc, 0x1663, 0x14bb, 0x1663, 0x14bb, 0x1533, 0x138f, 0x1533, 0x138f, 0x145f, 0x12bf, +0x145f, 0x12bf, 0x136e, 0x11d4, 0x136e, 0x11d4, 0x136e, 0x11d4, 0x1314, 0x1183, 0x1314, +0x1183, 0x12a2, 0x111f, 0x12a2, 0x111f, 0x10ef, 0xf7f, 0x10ef, 0xf7f, 0xe48, 0xcf0, +0xe48, 0xcf0, 0xc83, 0xb4a, 0xc83, 0xb4a, 0xabf, 0x9ab, 0xabf, 0x9ab, 0xabf, +0x9ab, 0x8c3, 0x7da, 0x8c3, 0x7da, 0x655, 0x59c, 0x655, 0x59c, 0x40b, 0x385, +0x40b, 0x385, 0xff, 0xaf, 0xff, 0xaf, 0xff4f, 0xff34, 0xff4f, 0xff34, 0xff4f, +0xff34, 0xfd15, 0xfd2f, 0xfd15, 0xfd2f, 0xfb0a, 0xfb55, 0xfb0a, 0xfb55, 0xf8a7, 0xf91f, +0xf8a7, 0xf91f, 0xf730, 0xf7ce, 0xf730, 0xf7ce, 0xf62d, 0xf6ea, 0xf62d, 0xf6ea, 0xf57e, +0xf653, 0xf57e, 0xf653, 0xf57e, 0xf653, 0xf56b, 0xf64d, 0xf56b, 0xf64d, 0xf40d, 0xf4f4, +0xf40d, 0xf4f4, 0xf29e, 0xf380, 0xf29e, 0xf380, 0xf15c, 0xf232, 0xf15c, 0xf232, 0xf135, +0xf1f8, 0xf135, 0xf1f8, 0xf137, 0xf1e2, 0xf137, 0xf1e2, 0xf137, 0xf1e2, 0xf1cd, 0xf25c, +0xf1cd, 0xf25c, 0xf234, 0xf2a4, 0xf234, 0xf2a4, 0xf36e, 0xf3c2, 0xf36e, 0xf3c2, 0xf3fc, +0xf436, 0xf3fc, 0xf436, 0xf402, 0xf426, 0xf402, 0xf426, 0xf402, 0xf426, 0xf3d6, 0xf3ed, +0xf3d6, 0xf3ed, 0xf499, 0xf4ab, 0xf499, 0xf4ab, 0xf478, 0xf491, 0xf478, 0xf491, 0xf453, +0xf47e, 0xf453, 0xf47e, 0xf458, 0xf4a0, 0xf458, 0xf4a0, 0xf3e2, 0xf455, 0xf3e2, 0xf455, +0xf3e2, 0xf455, 0xf345, 0xf3ee, 0xf345, 0xf3ee, 0xf261, 0xf34c, 0xf261, 0xf34c, 0xf219, +0xf34f, 0xf219, 0xf34f, 0xf14c, 0xf2d5, 0xf14c, 0xf2d5, 0xf07e, 0xf25f, 0xf07e, 0xf25f, +0xf07e, 0xf25f, 0xef78, 0xf1b5, 0xef78, 0xf1b5, 0xef87, 0xf21f, 0xef87, 0xf21f, 0xeda6, +0xf097, 0xeda6, 0xf097, 0xebdd, 0xef23, 0xebdd, 0xef23, 0xe9b1, 0xed42, 0xe9b1, 0xed42, +0xe8d8, 0xecac, 0xe8d8, 0xecac, 0xe8d8, 0xecac, 0xe82a, 0xec34, 0xe82a, 0xec34, 0xe74d, +0xeb7d, 0xe74d, 0xeb7d, 0xe713, 0xeb5b, 0xe713, 0xeb5b, 0xe69d, 0xeaeb, 0xe69d, 0xeaeb, +0xe75b, 0xeba0, 0xe75b, 0xeba0, 0xe8e0, 0xed0b, 0xe8e0, 0xed0b, 0xe8e0, 0xed0b, 0xeaec, +0xeeec, 0xeaec, 0xeeec, 0xebc9, 0xef8e, 0xebc9, 0xef8e, 0xed93, 0xf110, 0xed93, 0xf110, +0xefa5, 0xf2cf, 0xefa5, 0xf2cf, 0xf288, 0xf555, 0xf288, 0xf555, 0xf288, 0xf555, 0xf5a7, +0xf80e, 0xf5a7, 0xf80e, 0xf8e0, 0xfadb, 0xf8e0, 0xfadb, 0xfa94, 0xfc20, 0xfa94, 0xfc20, +0xfcf7, 0xfe12, 0xfcf7, 0xfe12, 0x12, 0xbe, 0x12, 0xbe, 0x333, 0x372, 0x333, +0x372, 0x333, 0x372, 0x5a4, 0x57a, 0x5a4, 0x57a, 0x7b6, 0x729, 0x7b6, 0x729, +0x901, 0x816, 0x901, 0x816, 0x9f4, 0x8b3, 0x9f4, 0x8b3, 0xc2e, 0xa9e, 0xc2e, +0xa9e, 0xd33, 0xb5c, 0xd33, 0xb5c, 0xd33, 0xb5c, 0xe3a, 0xc23, 0xe3a, 0xc23, +0xee0, 0xc92, 0xee0, 0xc92, 0x1088, 0xe0a, 0x1088, 0xe0a, 0x112a, 0xe84, 0x112a, +0xe84, 0x12a1, 0xfd8, 0x12a1, 0xfd8, 0x12a1, 0xfd8, 0x147b, 0x1196, 0x147b, 0x1196, +0x1535, 0x123b, 0x1535, 0x123b, 0x1560, 0x1257, 0x1560, 0x1257, 0x162e, 0x131b, 0x162e, +0x131b, 0x16d9, 0x13c3, 0x16d9, 0x13c3, 0x170e, 0x13fb, 0x170e, 0x13fb, 0x170e, 0x13fb, +0x177f, 0x1476, 0x177f, 0x1476, 0x185f, 0x1566, 0x185f, 0x1566, 0x1910, 0x1630, 0x1910, +0x1630, 0x18b1, 0x15f0, 0x18b1, 0x15f0, 0x1814, 0x157a, 0x1814, 0x157a, 0x16fc, 0x1492, +0x16fc, 0x1492, 0x16fc, 0x1492, 0x15d1, 0x139e, 0x15d1, 0x139e, 0x133b, 0x1148, 0x133b, +0x1148, 0x1174, 0xfc9, 0x1174, 0xfc9, 0xee7, 0xd89, 0xee7, 0xd89, 0xcd9, 0xbcf, +0xcd9, 0xbcf, 0xcd9, 0xbcf, 0xaaa, 0x9fa, 0xaaa, 0x9fa, 0x8ab, 0x858, 0x8ab, +0x858, 0x649, 0x656, 0x649, 0x656, 0x3d7, 0x445, 0x3d7, 0x445, 0x118, 0x1e6, +0x118, 0x1e6, 0xfe6b, 0xff97, 0xfe6b, 0xff97, 0xfe6b, 0xff97, 0xfc21, 0xfda7, 0xfc21, +0xfda7, 0xf8c1, 0xfa9b, 0xf8c1, 0xfa9b, 0xf5ca, 0xf7ef, 0xf5ca, 0xf7ef, 0xf270, 0xf4da, +0xf270, 0xf4da, 0xf0fa, 0xf39e, 0xf0fa, 0xf39e, 0xef2c, 0xf201, 0xef2c, 0xf201, 0xef2c, +0xf201, 0xedb6, 0xf0b1, 0xedb6, 0xf0b1, 0xebf6, 0xef0e, 0xebf6, 0xef0e, 0xea9e, 0xedc8, +0xea9e, 0xedc8, 0xe95e, 0xec91, 0xe95e, 0xec91, 0xe8cd, 0xebff, 0xe8cd, 0xebff, 0xe8cd, +0xebff, 0xe7bf, 0xeaeb, 0xe7bf, 0xeaeb, 0xe654, 0xe972, 0xe654, 0xe972, 0xe59c, 0xe8a7, +0xe59c, 0xe8a7, 0xe5db, 0xe8d1, 0xe5db, 0xe8d1, 0xe70a, 0xe9e9, 0xe70a, 0xe9e9, 0xe80e, +0xead4, 0xe80e, 0xead4, 0xe80e, 0xead4, 0xe8df, 0xeb8e, 0xe8df, 0xeb8e, 0xe847, 0xeadf, +0xe847, 0xeadf, 0xe88d, 0xeb11, 0xe88d, 0xeb11, 0xe891, 0xeb02, 0xe891, 0xeb02, 0xe978, +0xebd8, 0xe978, 0xebd8, 0xe9ba, 0xec0b, 0xe9ba, 0xec0b, 0xe9ba, 0xec0b, 0xea2f, 0xec71, +0xea2f, 0xec71, 0xe9a6, 0xebd9, 0xe9a6, 0xebd9, 0xe9e6, 0xec08, 0xe9e6, 0xec08, 0xea91, +0xec9f, 0xea91, 0xec9f, 0xea88, 0xec7d, 0xea88, 0xec7d, 0xea88, 0xec7d, 0xeaf4, 0xecca, +0xeaf4, 0xecca, 0xebb2, 0xed62, 0xebb2, 0xed62, 0xed33, 0xeeb3, 0xed33, 0xeeb3, 0xee94, +0xefd9, 0xee94, 0xefd9, 0xf189, 0xf28a, 0xf189, 0xf28a, 0xf3ff, 0xf4af, 0xf3ff, 0xf4af, +0xf3ff, 0xf4af, 0xf5c1, 0xf616, 0xf5c1, 0xf616, 0xf7bf, 0xf7ae, 0xf7bf, 0xf7ae, 0xfaae, +0xfa2e, 0xfaae, 0xfa2e, 0xfd27, 0xfc2f, 0xfd27, 0xfc2f, 0x23, 0xfeac, 0x23, 0xfeac, +0x331, 0x138, 0x331, 0x138, 0x331, 0x138, 0x6b0, 0x434, 0x6b0, 0x434, 0x9d8, +0x6d9, 0x9d8, 0x6d9, 0xd4d, 0x9cf, 0xd4d, 0x9cf, 0x1040, 0xc4a, 0x1040, 0xc4a, +0x1376, 0xf13, 0x1376, 0xf13, 0x1376, 0xf13, 0x168f, 0x11c9, 0x168f, 0x11c9, 0x18c7, +0x13ae, 0x18c7, 0x13ae, 0x1af6, 0x1599, 0x1af6, 0x1599, 0x1c4e, 0x16c0, 0x1c4e, 0x16c0, +0x1e64, 0x18b7, 0x1e64, 0x18b7, 0x1f4b, 0x1991, 0x1f4b, 0x1991, 0x1f4b, 0x1991, 0x2041, +0x1a8e, 0x2041, 0x1a8e, 0x20e7, 0x1b4c, 0x20e7, 0x1b4c, 0x216a, 0x1bf9, 0x216a, 0x1bf9, +0x2064, 0x1b2c, 0x2064, 0x1b2c, 0x1fe5, 0x1af3, 0x1fe5, 0x1af3, 0x1ee4, 0x1a43, 0x1ee4, +0x1a43, 0x1ee4, 0x1a43, 0x1d31, 0x18ea, 0x1d31, 0x18ea, 0x1af7, 0x170e, 0x1af7, 0x170e, +0x1942, 0x15bb, 0x1942, 0x15bb, 0x1834, 0x1510, 0x1834, 0x1510, 0x1678, 0x13b5, 0x1678, +0x13b5, 0x1678, 0x13b5, 0x14f9, 0x1293, 0x14f9, 0x1293, 0x1300, 0x10f2, 0x1300, 0x10f2, +0x1156, 0xf99, 0x1156, 0xf99, 0x101b, 0xea7, 0x101b, 0xea7, 0x105f, 0xf2d, 0x105f, +0xf2d, 0xfcc, 0xed3, 0xfcc, 0xed3, 0xfcc, 0xed3, 0xf69, 0xea2, 0xf69, 0xea2, +0xe5d, 0xdc0, 0xe5d, 0xdc0, 0xe2c, 0xdb5, 0xe2c, 0xdb5, 0xdae, 0xd56, 0xdae, +0xd56, 0xdc3, 0xd88, 0xdc3, 0xd88, 0xd20, 0xcff, 0xd20, 0xcff, 0xd20, 0xcff, +0xbcf, 0xbc7, 0xbcf, 0xbc7, 0xaaa, 0xaba, 0xaaa, 0xaba, 0x950, 0x979, 0x950, +0x979, 0x839, 0x87c, 0x839, 0x87c, 0x5fe, 0x65e, 0x5fe, 0x65e, 0x5fe, 0x65e, +0x415, 0x493, 0x415, 0x493, 0x12e, 0x1cb, 0x12e, 0x1cb, 0xffcf, 0x8d, 0xffcf, +0x8d, 0xfe65, 0xff44, 0xfe65, 0xff44, 0xfcf7, 0xfdf6, 0xfcf7, 0xfdf6, 0xfb3b, 0xfc59, +0xfb3b, 0xfc59, 0xfb3b, 0xfc59, 0xfa4e, 0xfb87, 0xfa4e, 0xfb87, 0xf92e, 0xfa7f, 0xf92e, +0xfa7f, 0xf863, 0xf9c7, 0xf863, 0xf9c7, 0xf83e, 0xf9b0, 0xf83e, 0xf9b0, 0xf7b6, 0xf92f, +0xf7b6, 0xf92f, 0xf7b6, 0xf92f, 0xf6c2, 0xf83c, 0xf6c2, 0xf83c, 0xf615, 0xf788, 0xf615, +0xf788, 0xf5f9, 0xf760, 0xf5f9, 0xf760, 0xf616, 0xf76c, 0xf616, 0xf76c, 0xf6c2, 0xf802, +0xf6c2, 0xf802, 0xf70f, 0xf837, 0xf70f, 0xf837, 0xf70f, 0xf837, 0xf84f, 0xf95d, 0xf84f, +0xf95d, 0xf952, 0xfa45, 0xf952, 0xfa45, 0xfa09, 0xfae5, 0xfa09, 0xfae5, 0xf963, 0xfa2b, +0xf963, 0xfa2b, 0xf9b8, 0xfa73, 0xf9b8, 0xfa73, 0xf932, 0xf9e6, 0xf932, 0xf9e6, 0xf932, +0xf9e6, 0xf886, 0xf93c, 0xf886, 0xf93c, 0xf79d, 0xf85e, 0xf79d, 0xf85e, 0xf6d2, 0xf7a8, +0xf6d2, 0xf7a8, 0xf61a, 0xf70f, 0xf61a, 0xf70f, 0xf4ce, 0xf5ec, 0xf4ce, 0xf5ec, 0xf4ce, +0xf5ec, 0xf3f8, 0xf548, 0xf3f8, 0xf548, 0xf336, 0xf4c1, 0xf336, 0xf4c1, 0xf260, 0xf42b, +0xf260, 0xf42b, 0xf15f, 0xf36e, 0xf15f, 0xf36e, 0xf14b, 0xf3a0, 0xf14b, 0xf3a0, 0xf020, +0xf2bc, 0xf020, 0xf2bc, 0xf020, 0xf2bc, 0xeea3, 0xf181, 0xeea3, 0xf181, 0xec82, 0xef9e, +0xec82, 0xef9e, 0xeba3, 0xeef5, 0xeba3, 0xeef5, 0xea9f, 0xee1d, 0xea9f, 0xee1d, 0xea1f, +0xedbd, 0xea1f, 0xedbd, 0xe989, 0xed39, 0xe989, 0xed39, 0xe989, 0xed39, 0xe8d5, 0xec89, +0xe8d5, 0xec89, 0xe7d3, 0xeb7c, 0xe7d3, 0xeb7c, 0xe7ef, 0xeb7e, 0xe7ef, 0xeb7e, 0xe882, +0xebe8, 0xe882, 0xebe8, 0xe8e6, 0xec15, 0xe8e6, 0xec15, 0xe8e6, 0xec15, 0xe9d8, 0xecc3, +0xe9d8, 0xecc3, 0xeadc, 0xed78, 0xeadc, 0xed78, 0xed5d, 0xefa1, 0xed5d, 0xefa1, 0xefee, +0xf1d3, 0xefee, 0xf1d3, 0xf3a2, 0xf523, 0xf3a2, 0xf523, 0xf5cf, 0xf6ea, 0xf5cf, 0xf6ea, +0xf5cf, 0xf6ea, 0xf820, 0xf8d4, 0xf820, 0xf8d4, 0xfa29, 0xfa79, 0xfa29, 0xfa79, 0xfd37, +0xfd27, 0xfd37, 0xfd27, 0x20, 0xffb4, 0x20, 0xffb4, 0x307, 0x247, 0x307, 0x247, +0x551, 0x444, 0x551, 0x444, 0x551, 0x444, 0x6d8, 0x587, 0x6d8, 0x587, 0x943, +0x7b6, 0x943, 0x7b6, 0xb7f, 0x9c0, 0xb7f, 0x9c0, 0xd0b, 0xb21, 0xd0b, 0xb21, +0xe2e, 0xc20, 0xe2e, 0xc20, 0xe2e, 0xc20, 0xff9, 0xdce, 0xff9, 0xdce, 0x1079, +0xe38, 0x1079, 0xe38, 0x118d, 0xf3b, 0x118d, 0xf3b, 0x12e5, 0x1086, 0x12e5, 0x1086, +0x1454, 0x11ea, 0x1454, 0x11ea, 0x14a0, 0x1230, 0x14a0, 0x1230, 0x14a0, 0x1230, 0x1578, +0x1303, 0x1578, 0x1303, 0x1609, 0x1392, 0x1609, 0x1392, 0x1703, 0x148b, 0x1703, 0x148b, +0x1768, 0x14f3, 0x1768, 0x14f3, 0x17f4, 0x1585, 0x17f4, 0x1585, 0x18dd, 0x1677, 0x18dd, +0x1677, 0x18dd, 0x1677, 0x194a, 0x16f1, 0x194a, 0x16f1, 0x1922, 0x16dd, 0x1922, 0x16dd, +0x18ad, 0x1680, 0x18ad, 0x1680, 0x1920, 0x1713, 0x1920, 0x1713, 0x180f, 0x162a, 0x180f, +0x162a, 0x180f, 0x162a, 0x1721, 0x156a, 0x1721, 0x156a, 0x1554, 0x13d5, 0x1554, 0x13d5, +0x13af, 0x126e, 0x13af, 0x126e, 0x11d5, 0x10db, 0x11d5, 0x10db, 0x1044, 0xf97, 0x1044, +0xf97, 0xe4d, 0xdf3, 0xe4d, 0xdf3, 0xe4d, 0xdf3, 0xc35, 0xc33, 0xc35, 0xc33, +0x92f, 0x988, 0x92f, 0x988, 0x667, 0x71b, 0x667, 0x71b, 0x37a, 0x489, 0x37a, +0x489, 0x4d, 0x1b4, 0x4d, 0x1b4, 0xfca7, 0xfe62, 0xfca7, 0xfe62, 0xfca7, 0xfe62, +0xf88f, 0xfa98, 0xf88f, 0xfa98, 0xf56f, 0xf7be, 0xf56f, 0xf7be, 0xf23c, 0xf4c8, 0xf23c, +0xf4c8, 0xefa9, 0xf268, 0xefa9, 0xf268, 0xed06, 0xefee, 0xed06, 0xefee, 0xed06, 0xefee, +0xeb2f, 0xee33, 0xeb2f, 0xee33, 0xe934, 0xec4b, 0xe934, 0xec4b, 0xe8ca, 0xebe9, 0xe8ca, +0xebe9, 0xe800, 0xeb1e, 0xe800, 0xeb1e, 0xe775, 0xea89, 0xe775, 0xea89, 0xe5ff, 0xe902, +0xe5ff, 0xe902, 0xe5ff, 0xe902, 0xe4fc, 0xe7ea, 0xe4fc, 0xe7ea, 0xe491, 0xe765, 0xe491, +0xe765, 0xe4cf, 0xe787, 0xe4cf, 0xe787, 0xe576, 0xe811, 0xe576, 0xe811, 0xe518, 0xe796, +0xe518, 0xe796, 0xe4c9, 0xe72d, 0xe4c9, 0xe72d, 0xe4c9, 0xe72d, 0xe428, 0xe673, 0xe428, +0xe673, 0xe479, 0xe6af, 0xe479, 0xe6af, 0xe4b3, 0xe6d5, 0xe4b3, 0xe6d5, 0xe579, 0xe78b, +0xe579, 0xe78b, 0xe4f7, 0xe6fa, 0xe4f7, 0xe6fa, 0xe4f7, 0xe6fa, 0xe4b9, 0xe6ad, 0xe4b9, +0xe6ad, 0xe4ee, 0xe6d2, 0xe4ee, 0xe6d2, 0xe589, 0xe75b, 0xe589, 0xe75b, 0xe50f, 0xe6ca, +0xe50f, 0xe6ca, 0xe59b, 0xe739, 0xe59b, 0xe739, 0xe673, 0xe7ec, 0xe673, 0xe7ec, 0xe673, +0xe7ec, 0xe72e, 0xe879, 0xe72e, 0xe879, 0xe949, 0xea5b, 0xe949, 0xea5b, 0xec72, 0xed40, +0xec72, 0xed40, 0xef1b, 0xef99, 0xef1b, 0xef99, 0xf12b, 0xf14e, 0xf12b, 0xf14e, 0xf461, +0xf41c, 0xf461, 0xf41c, 0xf461, 0xf41c, 0xf74a, 0xf694, 0xf74a, 0xf694, 0xfb34, 0xfa04, +0xfb34, 0xfa04, 0xfed3, 0xfd22, 0xfed3, 0xfd22, 0x31b, 0xe5, 0x31b, 0xe5, 0x6bf, +0x402, 0x6bf, 0x402, 0x6bf, 0x402, 0xa98, 0x756, 0xa98, 0x756, 0xd69, 0x9a7, +0xd69, 0x9a7, 0x10cd, 0xc93, 0x10cd, 0xc93, 0x144c, 0xfa3, 0x144c, 0xfa3, 0x16f5, +0x11eb, 0x16f5, 0x11eb, 0x195e, 0x1404, 0x195e, 0x1404, 0x195e, 0x1404, 0x1b56, 0x15bd, +0x1b56, 0x15bd, 0x1d9e, 0x17da, 0x1d9e, 0x17da, 0x1fc3, 0x19e7, 0x1fc3, 0x19e7, 0x2164, +0x1b86, 0x2164, 0x1b86, 0x225f, 0x1c92, 0x225f, 0x1c92, 0x2370, 0x1dc8, 0x2370, 0x1dc8, +0x2370, 0x1dc8, 0x234a, 0x1dd8, 0x234a, 0x1dd8, 0x239f, 0x1e74, 0x239f, 0x1e74, 0x2387, +0x1eaf, 0x2387, 0x1eaf, 0x235c, 0x1ee3, 0x235c, 0x1ee3, 0x2170, 0x1d5c, 0x2170, 0x1d5c, +0x2170, 0x1d5c, 0x1fef, 0x1c47, 0x1fef, 0x1c47, 0x1efe, 0x1bc2, 0x1efe, 0x1bc2, 0x1e3d, +0x1b6e, 0x1e3d, 0x1b6e, 0x1cfb, 0x1a94, 0x1cfb, 0x1a94, 0x1ba8, 0x19a4, 0x1ba8, 0x19a4, +0x19e7, 0x1840, 0x19e7, 0x1840, 0x19e7, 0x1840, 0x17aa, 0x1657, 0x17aa, 0x1657, 0x1694, +0x158b, 0x1694, 0x158b, 0x1582, 0x14ba, 0x1582, 0x14ba, 0x149b, 0x140a, 0x149b, 0x140a, +0x12a0, 0x123d, 0x12a0, 0x123d, 0x12a0, 0x123d, 0x116b, 0x112e, 0x116b, 0x112e, 0xfcd, +0xfb0, 0xfcd, 0xfb0, 0xf32, 0xf2e, 0xf32, 0xf2e, 0xe86, 0xe98, 0xe86, 0xe98, +0xd71, 0xd96, 0xd71, 0xd96, 0xba9, 0xbe1, 0xba9, 0xbe1, 0xba9, 0xbe1, 0xa74, +0xabe, 0xa74, 0xabe, 0x952, 0x9b1, 0x952, 0x9b1, 0x82b, 0x8a1, 0x82b, 0x8a1, +0x6a0, 0x72e, 0x6a0, 0x72e, 0x447, 0x4f1, 0x447, 0x4f1, 0x214, 0x2dc, 0x214, +0x2dc, 0x214, 0x2dc, 0x44, 0x12c, 0x44, 0x12c, 0xfec6, 0xffcf, 0xfec6, 0xffcf, +0xfc31, 0xfd5c, 0xfc31, 0xfd5c, 0xfa8f, 0xfbda, 0xfa8f, 0xfbda, 0xf84f, 0xf9b7, 0xf84f, +0xf9b7, 0xf84f, 0xf9b7, 0xf669, 0xf7ea, 0xf669, 0xf7ea, 0xf4f0, 0xf686, 0xf4f0, 0xf686, +0xf4b7, 0xf65b, 0xf4b7, 0xf65b, 0xf3a1, 0xf54d, 0xf3a1, 0xf54d, 0xf2dd, 0xf48b, 0xf2dd, +0xf48b, 0xf228, 0xf3d0, 0xf228, 0xf3d0, 0xf228, 0xf3d0, 0xf191, 0xf32c, 0xf191, 0xf32c, +0xf155, 0xf2de, 0xf155, 0xf2de, 0xf0ea, 0xf25b, 0xf0ea, 0xf25b, 0xf126, 0xf27c, 0xf126, +0xf27c, 0xf1ea, 0xf323, 0xf1ea, 0xf323, 0xf31c, 0xf438, 0xf31c, 0xf438, 0xf31c, 0xf438, +0xf356, 0xf457, 0xf356, 0xf457, 0xf4a9, 0xf592, 0xf4a9, 0xf592, 0xf589, 0xf661, 0xf589, +0xf661, 0xf5e6, 0xf6b3, 0xf5e6, 0xf6b3, 0xf59c, 0xf668, 0xf59c, 0xf668, 0xf59c, 0xf668, +0xf5cc, 0xf6a0, 0xf5cc, 0xf6a0, 0xf5e2, 0xf6c8, 0xf5e2, 0xf6c8, 0xf602, 0xf705, 0xf602, +0xf705, 0xf502, 0xf62d, 0xf502, 0xf62d, 0xf451, 0xf5ac, 0xf451, 0xf5ac, 0xf34f, 0xf4e4, +0xf34f, 0xf4e4, 0xf34f, 0xf4e4, 0xf238, 0xf40c, 0xf238, 0xf40c, 0xf1ec, 0xf404, 0xf1ec, +0xf404, 0xf1cf, 0xf42e, 0xf1cf, 0xf42e, 0xf17f, 0xf423, 0xf17f, 0xf423, 0xefa9, 0xf290, +0xefa9, 0xf290, 0xeea9, 0xf1cd, 0xeea9, 0xf1cd, 0xeea9, 0xf1cd, 0xedca, 0xf123, 0xedca, +0xf123, 0xed31, 0xf0b5, 0xed31, 0xf0b5, 0xebd1, 0xef74, 0xebd1, 0xef74, 0xeb2c, 0xeee0, +0xeb2c, 0xeee0, 0xea2f, 0xede5, 0xea2f, 0xede5, 0xea2f, 0xede5, 0xea0e, 0xedb7, 0xea0e, +0xedb7, 0xead4, 0xee60, 0xead4, 0xee60, 0xec23, 0xef84, 0xec23, 0xef84, 0xed0c, 0xf033, +0xed0c, 0xf033, 0xee09, 0xf0ea, 0xee09, 0xf0ea, 0xef8e, 0xf21e, 0xef8e, 0xf21e, 0xef8e, +0xf21e, 0xf15a, 0xf391, 0xf15a, 0xf391, 0xf434, 0xf60a, 0xf434, 0xf60a, 0xf6ea, 0xf85c, +0xf6ea, 0xf85c, 0xf943, 0xfa50, 0xf943, 0xfa50, 0xfb13, 0xfbba, 0xfb13, 0xfbba, 0xfd99, +0xfdde, 0xfd99, 0xfdde, 0xfd99, 0xfdde, 0xff9e, 0xff86, 0xff9e, 0xff86, 0x260, 0x1ef, +0x260, 0x1ef, 0x474, 0x3b3, 0x474, 0x3b3, 0x646, 0x53d, 0x646, 0x53d, 0x76b, +0x623, 0x76b, 0x623, 0x76b, 0x623, 0x944, 0x7c5, 0x944, 0x7c5, 0xa59, 0x8ac, +0xa59, 0x8ac, 0xae8, 0x914, 0xae8, 0x914, 0xc60, 0xa6d, 0xc60, 0xa6d, 0xd9d, +0xb8f, 0xd9d, 0xb8f, 0xe69, 0xc46, 0xe69, 0xc46, 0xe69, 0xc46, 0xf45, 0xd11, +0xf45, 0xd11, 0x10d6, 0xe94, 0x10d6, 0xe94, 0x1177, 0xf27, 0x1177, 0xf27, 0x1285, +0x1029, 0x1285, 0x1029, 0x133a, 0x10d2, 0x133a, 0x10d2, 0x143f, 0x11cd, 0x143f, 0x11cd, +0x143f, 0x11cd, 0x1493, 0x1216, 0x1493, 0x1216, 0x14c7, 0x123f, 0x14c7, 0x123f, 0x14c5, +0x1235, 0x14c5, 0x1235, 0x159c, 0x1306, 0x159c, 0x1306, 0x1598, 0x1300, 0x1598, 0x1300, +0x1598, 0x1300, 0x1555, 0x12be, 0x1555, 0x12be, 0x15a9, 0x131b, 0x15a9, 0x131b, 0x1578, +0x12f8, 0x1578, 0x12f8, 0x1476, 0x120c, 0x1476, 0x120c, 0x12ac, 0x1061, 0x12ac, 0x1061, +0x10f4, 0xed0, 0x10f4, 0xed0, 0x10f4, 0xed0, 0xf1d, 0xd2a, 0xf1d, 0xd2a, 0xd76, +0xbbd, 0xd76, 0xbbd, 0xb3d, 0x9c9, 0xb3d, 0x9c9, 0x9fa, 0x8d0, 0x9fa, 0x8d0, +0x7b8, 0x6e1, 0x7b8, 0x6e1, 0x592, 0x512, 0x592, 0x512, 0x592, 0x512, 0x344, +0x320, 0x344, 0x320, 0x168, 0x1a2, 0x168, 0x1a2, 0xfecd, 0xff64, 0xfecd, 0xff64, +0xfbb2, 0xfca5, 0xfbb2, 0xfca5, 0xf8d7, 0xfa23, 0xf8d7, 0xfa23, 0xf8d7, 0xfa23, 0xf65f, +0xf7fe, 0xf65f, 0xf7fe, 0xf3e7, 0xf5d2, 0xf3e7, 0xf5d2, 0xf13a, 0xf369, 0xf13a, 0xf369, +0xef2b, 0xf194, 0xef2b, 0xf194, 0xece2, 0xef7c, 0xece2, 0xef7c, 0xeb56, 0xee16, 0xeb56, +0xee16, 0xeb56, 0xee16, 0xea0f, 0xeceb, 0xea0f, 0xeceb, 0xe97d, 0xec6c, 0xe97d, 0xec6c, +0xe856, 0xeb4e, 0xe856, 0xeb4e, 0xe7ca, 0xeac4, 0xe7ca, 0xeac4, 0xe72f, 0xea24, 0xe72f, +0xea24, 0xe74d, 0xea38, 0xe74d, 0xea38, 0xe74d, 0xea38, 0xe7a6, 0xea82, 0xe7a6, 0xea82, +0xe833, 0xeafd, 0xe833, 0xeafd, 0xe854, 0xeb0c, 0xe854, 0xeb0c, 0xe8be, 0xeb62, 0xe8be, +0xeb62, 0xe93b, 0xebcb, 0xe93b, 0xebcb, 0xe93b, 0xebcb, 0xe9b4, 0xec30, 0xe9b4, 0xec30, +0xeaac, 0xed15, 0xeaac, 0xed15, 0xeb25, 0xed7b, 0xeb25, 0xed7b, 0xeb92, 0xedd5, 0xeb92, +0xedd5, 0xebb6, 0xede3, 0xebb6, 0xede3, 0xecc5, 0xeedc, 0xecc5, 0xeedc, 0xecc5, 0xeedc, +0xec96, 0xee92, 0xec96, 0xee92, 0xeca1, 0xee7f, 0xeca1, 0xee7f, 0xecdf, 0xee97, 0xecdf, +0xee97, 0xed3d, 0xeec8, 0xed3d, 0xeec8, 0xed68, 0xeebd, 0xed68, 0xeebd, 0xeedf, 0xeff6, +0xeedf, 0xeff6, 0xeedf, 0xeff6, 0xf0d4, 0xf1a2, 0xf0d4, 0xf1a2, 0xf2c1, 0xf33d, 0xf2c1, +0xf33d, 0xf4f4, 0xf513, 0xf4f4, 0xf513, 0xf72f, 0xf6e9, 0xf72f, 0xf6e9, 0xf9a2, 0xf8ef, +0xf9a2, 0xf8ef, 0xf9a2, 0xf8ef, 0xfc0a, 0xfae4, 0xfc0a, 0xfae4, 0xfebe, 0xfd21, 0xfebe, +0xfd21, 0x1a6, 0xff8f, 0x1a6, 0xff8f, 0x566, 0x2d6, 0x566, 0x2d6, 0x819, 0x514, +0x819, 0x514, 0xb08, 0x794, 0xb08, 0x794, 0xb08, 0x794, 0xe24, 0xa49, 0xe24, +0xa49, 0x11bb, 0xd85, 0x11bb, 0xd85, 0x1499, 0x1016, 0x1499, 0x1016, 0x1734, 0x1272, +0x1734, 0x1272, 0x1923, 0x1435, 0x1923, 0x1435, 0x1923, 0x1435, 0x1b16, 0x160d, 0x1b16, +0x160d, 0x1c74, 0x1762, 0x1c74, 0x1762, 0x1d9a, 0x1892, 0x1d9a, 0x1892, 0x1ec2, 0x19d5, +0x1ec2, 0x19d5, 0x1ec4, 0x1a02, 0x1ec4, 0x1a02, 0x1ea0, 0x1a18, 0x1ea0, 0x1a18, 0x1ea0, +0x1a18, 0x1e39, 0x19f8, 0x1e39, 0x19f8, 0x1ea6, 0x1ab4, 0x1ea6, 0x1ab4, 0x1e1b, 0x1a80, +0x1e1b, 0x1a80, 0x1ccd, 0x198f, 0x1ccd, 0x198f, 0x1b1e, 0x183d, 0x1b1e, 0x183d, 0x19de, +0x175a, 0x19de, 0x175a, 0x19de, 0x175a, 0x1821, 0x15f6, 0x1821, 0x15f6, 0x16db, 0x1504, +0x16db, 0x1504, 0x156e, 0x13e3, 0x156e, 0x13e3, 0x1403, 0x12bb, 0x1403, 0x12bb, 0x12cb, +0x11be, 0x12cb, 0x11be, 0x12cb, 0x11be, 0x1239, 0x115c, 0x1239, 0x115c, 0x11df, 0x1129, +0x11df, 0x1129, 0x1160, 0x10c8, 0x1160, 0x10c8, 0x10d9, 0x1057, 0x10d9, 0x1057, 0xfc6, +0xf53, 0xfc6, 0xf53, 0xef3, 0xe8a, 0xef3, 0xe8a, 0xef3, 0xe8a, 0xdc4, 0xd62, +0xdc4, 0xd62, 0xcf3, 0xc95, 0xcf3, 0xc95, 0xb6f, 0xb17, 0xb6f, 0xb17, 0xaa1, +0xa50, 0xaa1, 0xa50, 0x989, 0x942, 0x989, 0x942, 0x8a6, 0x86d, 0x8a6, 0x86d, +0x8a6, 0x86d, 0x78a, 0x764, 0x78a, 0x764, 0x6a2, 0x695, 0x6a2, 0x695, 0x4f7, +0x507, 0x4f7, 0x507, 0x309, 0x33c, 0x309, 0x33c, 0x164, 0x1be, 0x164, 0x1be, +0x164, 0x1be, 0xfef7, 0xff7b, 0xfef7, 0xff7b, 0xfd3b, 0xfdeb, 0xfd3b, 0xfdeb, 0xfbfb, +0xfcd8, 0xfbfb, 0xfcd8, 0xfa78, 0xfb81, 0xfa78, 0xfb81, 0xf885, 0xf9b7, 0xf885, 0xf9b7, +0xf7b2, 0xf909, 0xf7b2, 0xf909, 0xf7b2, 0xf909, 0xf6d6, 0xf84d, 0xf6d6, 0xf84d, 0xf659, +0xf7e8, 0xf659, 0xf7e8, 0xf5a2, 0xf744, 0xf5a2, 0xf744, 0xf51c, 0xf6c9, 0xf51c, 0xf6c9, +0xf478, 0xf629, 0xf478, 0xf629, 0xf46a, 0xf618, 0xf46a, 0xf618, 0xf46a, 0xf618, 0xf42b, +0xf5d0, 0xf42b, 0xf5d0, 0xf4df, 0xf676, 0xf4df, 0xf676, 0xf615, 0xf79b, 0xf615, 0xf79b, +0xf6c2, 0xf834, 0xf6c2, 0xf834, 0xf76c, 0xf8cb, 0xf76c, 0xf8cb, 0xf76c, 0xf8cb, 0xf7c9, +0xf916, 0xf7c9, 0xf916, 0xf84b, 0xf989, 0xf84b, 0xf989, 0xf7cf, 0xf905, 0xf7cf, 0xf905, +0xf743, 0xf875, 0xf743, 0xf875, 0xf6ae, 0xf7e5, 0xf6ae, 0xf7e5, 0xf6b1, 0xf7f5, 0xf6b1, +0xf7f5, 0xf6b1, 0xf7f5, 0xf5cb, 0xf725, 0xf5cb, 0xf725, 0xf573, 0xf6ec, 0xf573, 0xf6ec, +0xf51e, 0xf6bc, 0xf51e, 0xf6bc, 0xf44b, 0xf617, 0xf44b, 0xf617, 0xf31c, 0xf51a, 0xf31c, +0xf51a, 0xf252, 0xf488, 0xf252, 0xf488, 0xf252, 0xf488, 0xf203, 0xf472, 0xf203, 0xf472, +0xf14b, 0xf3f3, 0xf14b, 0xf3f3, 0xf010, 0xf2ee, 0xf010, 0xf2ee, 0xeef9, 0xf209, 0xeef9, +0xf209, 0xee10, 0xf14b, 0xee10, 0xf14b, 0xee10, 0xf14b, 0xecdb, 0xf038, 0xecdb, 0xf038, +0xec05, 0xef79, 0xec05, 0xef79, 0xea85, 0xee04, 0xea85, 0xee04, 0xe94e, 0xeccb, 0xe94e, +0xeccb, 0xe882, 0xebf0, 0xe882, 0xebf0, 0xe8e9, 0xec3a, 0xe8e9, 0xec3a, 0xe8e9, 0xec3a, +0xe950, 0xec76, 0xe950, 0xec76, 0xea8e, 0xed7c, 0xea8e, 0xed7c, 0xeb5a, 0xee04, 0xeb5a, +0xee04, 0xec3f, 0xee9b, 0xec3f, 0xee9b, 0xede7, 0xefed, 0xede7, 0xefed, 0xf06c, 0xf215, +0xf06c, 0xf215, 0xf06c, 0xf215, 0xf35a, 0xf4a2, 0xf35a, 0xf4a2, 0xf60b, 0xf6ee, 0xf60b, +0xf6ee, 0xf8fb, 0xf97a, 0xf8fb, 0xf97a, 0xfb72, 0xfb8e, 0xfb72, 0xfb8e, 0xfe4a, 0xfe06, +0xfe4a, 0xfe06, 0xfe4a, 0xfe06, 0x14e, 0xaf, 0x14e, 0xaf, 0x49d, 0x3a8, 0x49d, +0x3a8, 0x6aa, 0x565, 0x6aa, 0x565, 0x8ce, 0x741, 0x8ce, 0x741, 0xa5e, 0x88f, +0xa5e, 0x88f, 0xb77, 0x96e, 0xb77, 0x96e, 0xb77, 0x96e, 0xca3, 0xa67, 0xca3, +0xa67, 0xe4a, 0xbe1, 0xe4a, 0xbe1, 0xf04, 0xc73, 0xf04, 0xc73, 0xfa0, 0xced, +0xfa0, 0xced, 0x1105, 0xe35, 0x1105, 0xe35, 0x12c2, 0xfd9, 0x12c2, 0xfd9, 0x12c2, +0xfd9, 0x1472, 0x1172, 0x1472, 0x1172, 0x1570, 0x125d, 0x1570, 0x125d, 0x163f, 0x131c, +0x163f, 0x131c, 0x16c1, 0x1390, 0x16c1, 0x1390, 0x1758, 0x141d, 0x1758, 0x141d, 0x1758, +0x141d, 0x16f8, 0x13b6, 0x16f8, 0x13b6, 0x17b3, 0x146f, 0x17b3, 0x146f, 0x181d, 0x14dc, +0x181d, 0x14dc, 0x1873, 0x153c, 0x1873, 0x153c, 0x1895, 0x156d, 0x1895, 0x156d, 0x1905, +0x15f5, 0x1905, 0x15f5, 0x1905, 0x15f5, 0x191f, 0x1630, 0x191f, 0x1630, 0x1861, 0x159b, +0x1861, 0x159b, 0x170b, 0x1478, 0x170b, 0x1478, 0x1583, 0x132d, 0x1583, 0x132d, 0x13f4, +0x11e4, 0x13f4, 0x11e4, 0x11ba, 0xff9, 0x11ba, 0xff9, 0x11ba, 0xff9, 0x100c, 0xea3, +0x100c, 0xea3, 0xe1a, 0xd0e, 0xe1a, 0xd0e, 0xbe4, 0xb3c, 0xbe4, 0xb3c, 0x8f3, +0x8b3, 0x8f3, 0x8b3, 0x651, 0x67b, 0x651, 0x67b, 0x651, 0x67b, 0x3b8, 0x44c, +0x3b8, 0x44c, 0xb4, 0x1b0, 0xb4, 0x1b0, 0xfc9c, 0xfdfb, 0xfc9c, 0xfdfb, 0xf8ee, +0xfaac, 0xf8ee, 0xfaac, 0xf54c, 0xf75f, 0xf54c, 0xf75f, 0xf25e, 0xf4bf, 0xf25e, 0xf4bf, +0xf25e, 0xf4bf, 0xefba, 0xf25e, 0xefba, 0xf25e, 0xed27, 0xf004, 0xed27, 0xf004, 0xeae4, +0xeded, 0xeae4, 0xeded, 0xe952, 0xec7d, 0xe952, 0xec7d, 0xe886, 0xebc7, 0xe886, 0xebc7, +0xe773, 0xeabf, 0xe773, 0xeabf, 0xe773, 0xeabf, 0xe6eb, 0xea38, 0xe6eb, 0xea38, 0xe54c, +0xe893, 0xe54c, 0xe893, 0xe420, 0xe759, 0xe420, 0xe759, 0xe351, 0xe676, 0xe351, 0xe676, +0xe346, 0xe653, 0xe346, 0xe653, 0xe346, 0xe653, 0xe360, 0xe652, 0xe360, 0xe652, 0xe3ca, +0xe6a0, 0xe3ca, 0xe6a0, 0xe400, 0xe6ba, 0xe400, 0xe6ba, 0xe420, 0xe6bf, 0xe420, 0xe6bf, +0xe464, 0xe6e8, 0xe464, 0xe6e8, 0xe528, 0xe793, 0xe528, 0xe793, 0xe528, 0xe793, 0xe59d, +0xe7f0, 0xe59d, 0xe7f0, 0xe5a3, 0xe7e0, 0xe5a3, 0xe7e0, 0xe638, 0xe860, 0xe638, 0xe860, +0xe69f, 0xe8b0, 0xe69f, 0xe8b0, 0xe6e0, 0xe8da, 0xe6e0, 0xe8da, 0xe6e0, 0xe8da, 0xe747, +0xe926, 0xe747, 0xe926, 0xe85f, 0xea20, 0xe85f, 0xea20, 0xe88c, 0xea29, 0xe88c, 0xea29, +0xe96b, 0xeade, 0xe96b, 0xeade, 0xeb14, 0xec58, 0xeb14, 0xec58, 0xedcd, 0xeed7, 0xedcd, +0xeed7, 0xedcd, 0xeed7, 0xf000, 0xf0ca, 0xf000, 0xf0ca, 0xf25d, 0xf2df, 0xf25d, 0xf2df, +0xf4b5, 0xf4e6, 0xf4b5, 0xf4e6, 0xf78b, 0xf766, 0xf78b, 0xf766, 0xfa88, 0xfa06, 0xfa88, +0xfa06, 0xfd77, 0xfc95, 0xfd77, 0xfc95, 0xfd77, 0xfc95, 0x15d, 0x18, 0x15d, 0x18, +0x4bb, 0x312, 0x4bb, 0x312, 0x85f, 0x654, 0x85f, 0x654, 0xc13, 0x9ac, 0xc13, +0x9ac, 0x1036, 0xd77, 0x1036, 0xd77, 0x1036, 0xd77, 0x13d2, 0x10c5, 0x13d2, 0x10c5, +0x16cf, 0x137e, 0x16cf, 0x137e, 0x18d5, 0x154c, 0x18d5, 0x154c, 0x1b6c, 0x17b8, 0x1b6c, +0x17b8, 0x1d7f, 0x19af, 0x1d7f, 0x19af, 0x1f26, 0x1b48, 0x1f26, 0x1b48, 0x1f26, 0x1b48, +0x207f, 0x1ca1, 0x207f, 0x1ca1, 0x21bf, 0x1def, 0x21bf, 0x1def, 0x224c, 0x1e97, 0x224c, +0x1e97, 0x2260, 0x1ed2, 0x2260, 0x1ed2, 0x22c2, 0x1f63, 0x22c2, 0x1f63, 0x2302, 0x1fdb, +0x2302, 0x1fdb, 0x2302, 0x1fdb, 0x226e, 0x1f84, 0x226e, 0x1f84, 0x20f7, 0x1e4d, 0x20f7, +0x1e4d, 0x1feb, 0x1d83, 0x1feb, 0x1d83, 0x1e63, 0x1c3b, 0x1e63, 0x1c3b, 0x1d8e, 0x1ba2, +0x1d8e, 0x1ba2, 0x1d8e, 0x1ba2, 0x1c31, 0x1a7d, 0x1c31, 0x1a7d, 0x1ac2, 0x193f, 0x1ac2, +0x193f, 0x1896, 0x173e, 0x1896, 0x173e, 0x16ee, 0x15b8, 0x16ee, 0x15b8, 0x1530, 0x1414, +0x1530, 0x1414, 0x13a4, 0x129a, 0x13a4, 0x129a, 0x13a4, 0x129a, 0x1282, 0x1184, 0x1282, +0x1184, 0x1119, 0x101f, 0x1119, 0x101f, 0xfd3, 0xeda, 0xfd3, 0xeda, 0xe87, 0xd8a, +0xe87, 0xd8a, 0xda4, 0xca2, 0xda4, 0xca2, 0xccd, 0xbc4, 0xccd, 0xbc4, 0xccd, +0xbc4, 0xc0b, 0xafd, 0xc0b, 0xafd, 0xabf, 0x9b0, 0xabf, 0x9b0, 0x9a4, 0x897, +0x9a4, 0x897, 0x89d, 0x796, 0x89d, 0x796, 0x815, 0x71b, 0x815, 0x71b, 0x815, +0x71b, 0x637, 0x550, 0x637, 0x550, 0x43f, 0x371, 0x43f, 0x371, 0x206, 0x155, +0x206, 0x155, 0xffb5, 0xff27, 0xffb5, 0xff27, 0xfd53, 0xfcec, 0xfd53, 0xfcec, 0xfbe6, +0xfba9, 0xfbe6, 0xfba9, 0xfbe6, 0xfba9, 0xfa4b, 0xfa3a, 0xfa4b, 0xfa3a, 0xf7d9, 0xf7f4, +0xf7d9, 0xf7f4, 0xf5e4, 0xf628, 0xf5e4, 0xf628, 0xf4ab, 0xf518, 0xf4ab, 0xf518, 0xf475, +0xf505, 0xf475, 0xf505, 0xf384, 0xf433, 0xf384, 0xf433, 0xf384, 0xf433, 0xf2d9, 0xf3a1, +0xf2d9, 0xf3a1, 0xf1e3, 0xf2bf, 0xf1e3, 0xf2bf, 0xf193, 0xf27d, 0xf193, 0xf27d, 0xf0bc, +0xf1ae, 0xf0bc, 0xf1ae, 0xf068, 0xf15c, 0xf068, 0xf15c, 0xf068, 0xf15c, 0xf0e5, 0xf1d8, +0xf0e5, 0xf1d8, 0xf1e2, 0xf2d0, 0xf1e2, 0xf2d0, 0xf30a, 0xf3f1, 0xf30a, 0xf3f1, 0xf476, +0xf557, 0xf476, 0xf557, 0xf5c9, 0xf6a5, 0xf5c9, 0xf6a5, 0xf6ef, 0xf7c9, 0xf6ef, 0xf7c9, +0xf6ef, 0xf7c9, 0xf70e, 0xf7ea, 0xf70e, 0xf7ea, 0xf6c3, 0xf7a6, 0xf6c3, 0xf7a6, 0xf728, +0xf819, 0xf728, 0xf819, 0xf6d0, 0xf7d7, 0xf6d0, 0xf7d7, 0xf6a1, 0xf7c4, 0xf6a1, 0xf7c4, +0xf67d, 0xf7c5, 0xf67d, 0xf7c5, 0xf67d, 0xf7c5, 0xf6d7, 0xf84a, 0xf6d7, 0xf84a, 0xf65e, +0xf803, 0xf65e, 0xf803, 0xf602, 0xf7dd, 0xf602, 0xf7dd, 0xf583, 0xf798, 0xf583, 0xf798, +0xf593, 0xf7e5, 0xf593, 0xf7e5, 0xf593, 0xf7e5, 0xf4b7, 0xf745, 0xf4b7, 0xf745, 0xf3f6, +0xf6bd, 0xf3f6, 0xf6bd, 0xf328, 0xf625, 0xf328, 0xf625, 0xf1bc, 0xf4e8, 0xf1bc, 0xf4e8, +0xf0a3, 0xf3f5, 0xf0a3, 0xf3f5, 0xef6f, 0xf2df, 0xef6f, 0xf2df, 0xef6f, 0xf2df, 0xee7a, +0xf1fb, 0xee7a, 0xf1fb, 0xed7b, 0xf101, 0xed7b, 0xf101, 0xedb5, 0xf133, 0xedb5, 0xf133, +0xee1a, 0xf182, 0xee1a, 0xf182, 0xeeef, 0xf235, 0xeeef, 0xf235, 0xef98, 0xf2af, 0xef98, +0xf2af, 0xef98, 0xf2af, 0xf056, 0xf332, 0xf056, 0xf332, 0xf0e6, 0xf37c, 0xf0e6, 0xf37c, +0xf240, 0xf487, 0xf240, 0xf487, 0xf403, 0xf5f5, 0xf403, 0xf5f5, 0xf663, 0xf7fa, 0xf663, +0xf7fa, 0xf663, 0xf7fa, 0xf878, 0xf9b1, 0xf878, 0xf9b1, 0xfa95, 0xfb6e, 0xfa95, 0xfb6e, +0xfc94, 0xfd0d, 0xfc94, 0xfd0d, 0xff0f, 0xff2a, 0xff0f, 0xff2a, 0x1ee, 0x1ae, 0x1ee, +0x1ae, 0x3b5, 0x320, 0x3b5, 0x320, 0x3b5, 0x320, 0x596, 0x4b1, 0x596, 0x4b1, +0x71a, 0x5ec, 0x71a, 0x5ec, 0x8ab, 0x739, 0x8ab, 0x739, 0x97e, 0x7d0, 0x97e, +0x7d0, 0xb36, 0x952, 0xb36, 0x952, 0xc20, 0xa0c, 0xc20, 0xa0c, 0xc20, 0xa0c, +0xc8d, 0xa4f, 0xc8d, 0xa4f, 0xcca, 0xa67, 0xcca, 0xa67, 0xdcf, 0xb4c, 0xdcf, +0xb4c, 0xf35, 0xc96, 0xf35, 0xc96, 0x1006, 0xd4f, 0x1006, 0xd4f, 0x1006, 0xd4f, +0x1082, 0xdb5, 0x1082, 0xdb5, 0x1102, 0xe23, 0x1102, 0xe23, 0x11a8, 0xeb9, 0x11a8, +0xeb9, 0x1171, 0xe76, 0x1171, 0xe76, 0x119a, 0xe95, 0x119a, 0xe95, 0x1268, 0xf5d, +0x1268, 0xf5d, 0x1268, 0xf5d, 0x131d, 0x1011, 0x131d, 0x1011, 0x131a, 0x1012, 0x131a, +0x1012, 0x1378, 0x107a, 0x1378, 0x107a, 0x136f, 0x1083, 0x136f, 0x1083, 0x13ad, 0x10da, +0x13ad, 0x10da, 0x1278, 0xfc6, 0x1278, 0xfc6, 0x1278, 0xfc6, 0x1170, 0xee7, 0x1170, +0xee7, 0x1051, 0xdfb, 0x1051, 0xdfb, 0xe9e, 0xc85, 0xe9e, 0xc85, 0xce9, 0xb13, +0xce9, 0xb13, 0xbb2, 0xa29, 0xbb2, 0xa29, 0xbb2, 0xa29, 0xab1, 0x97b, 0xab1, +0x97b, 0x8bc, 0x7e0, 0x8bc, 0x7e0, 0x6ce, 0x651, 0x6ce, 0x651, 0x4b0, 0x494, +0x4b0, 0x494, 0x2e1, 0x328, 0x2e1, 0x328, 0xffcd, 0x75, 0xffcd, 0x75, 0xffcd, +0x75, 0xfcd6, 0xfddd, 0xfcd6, 0xfddd, 0xf983, 0xfae5, 0xf983, 0xfae5, 0xf666, 0xf81d, +0xf666, 0xf81d, 0xf3e2, 0xf5e5, 0xf3e2, 0xf5e5, 0xf1f7, 0xf43e, 0xf1f7, 0xf43e, 0xf1f7, +0xf43e, 0xefd1, 0xf253, 0xefd1, 0xf253, 0xedfb, 0xf0ac, 0xedfb, 0xf0ac, 0xec73, 0xef49, +0xec73, 0xef49, 0xeb3c, 0xee2c, 0xeb3c, 0xee2c, 0xea47, 0xed46, 0xea47, 0xed46, 0xe97c, +0xec81, 0xe97c, 0xec81, 0xe97c, 0xec81, 0xe8ba, 0xebbd, 0xe8ba, 0xebbd, 0xe7aa, 0xeaa3, +0xe7aa, 0xeaa3, 0xe7ab, 0xea94, 0xe7ab, 0xea94, 0xe7bf, 0xea94, 0xe7bf, 0xea94, 0xe864, +0xeb21, 0xe864, 0xeb21, 0xe8c4, 0xeb68, 0xe8c4, 0xeb68, 0xe8c4, 0xeb68, 0xe954, 0xebde, +0xe954, 0xebde, 0xe926, 0xeb97, 0xe926, 0xeb97, 0xea2a, 0xec83, 0xea2a, 0xec83, 0xeb38, +0xed7b, 0xeb38, 0xed7b, 0xeb94, 0xedc3, 0xeb94, 0xedc3, 0xeb94, 0xedc3, 0xec22, 0xee3e, +0xec22, 0xee3e, 0xecc1, 0xeecd, 0xecc1, 0xeecd, 0xecde, 0xeeda, 0xecde, 0xeeda, 0xecc3, +0xeeaf, 0xecc3, 0xeeaf, 0xed77, 0xef52, 0xed77, 0xef52, 0xed64, 0xef2b, 0xed64, 0xef2b, +0xed64, 0xef2b, 0xed2e, 0xeedd, 0xed2e, 0xeedd, 0xed33, 0xeec6, 0xed33, 0xeec6, 0xeeab, +0xf01a, 0xeeab, 0xf01a, 0xf096, 0xf1dc, 0xf096, 0xf1dc, 0xf29a, 0xf3af, 0xf29a, 0xf3af, +0xf42b, 0xf507, 0xf42b, 0xf507, 0xf42b, 0xf507, 0xf678, 0xf712, 0xf678, 0xf712, 0xf887, +0xf8d8, 0xf887, 0xf8d8, 0xfa70, 0xfa71, 0xfa70, 0xfa71, 0xfcb6, 0xfc62, 0xfcb6, 0xfc62, +0xffa2, 0xfef4, 0xffa2, 0xfef4, 0xffa2, 0xfef4, 0x274, 0x169, 0x274, 0x169, 0x57c, +0x415, 0x57c, 0x415, 0x926, 0x763, 0x926, 0x763, 0xcaf, 0xa94, 0xcaf, 0xa94, +0x100e, 0xda2, 0x100e, 0xda2, 0x11e5, 0xf2e, 0x11e5, 0xf2e, 0x11e5, 0xf2e, 0x1441, +0x114a, 0x1441, 0x114a, 0x1667, 0x1339, 0x1667, 0x1339, 0x1867, 0x1510, 0x1867, 0x1510, +0x19ad, 0x163b, 0x19ad, 0x163b, 0x1b48, 0x17c6, 0x1b48, 0x17c6, 0x1c8f, 0x190d, 0x1c8f, +0x190d, 0x1c8f, 0x190d, 0x1d55, 0x19dd, 0x1d55, 0x19dd, 0x1d5c, 0x19fd, 0x1d5c, 0x19fd, +0x1da7, 0x1a6a, 0x1da7, 0x1a6a, 0x1e2d, 0x1b1b, 0x1e2d, 0x1b1b, 0x1db6, 0x1ad6, 0x1db6, +0x1ad6, 0x1db6, 0x1ad6, 0x1d0a, 0x1a62, 0x1d0a, 0x1a62, 0x1ba4, 0x1937, 0x1ba4, 0x1937, +0x1a3f, 0x180d, 0x1a3f, 0x180d, 0x1929, 0x1732, 0x1929, 0x1732, 0x1881, 0x16c1, 0x1881, +0x16c1, 0x1777, 0x15ea, 0x1777, 0x15ea, 0x1777, 0x15ea, 0x16b3, 0x1553, 0x16b3, 0x1553, +0x1536, 0x13fd, 0x1536, 0x13fd, 0x13f1, 0x12d7, 0x13f1, 0x12d7, 0x1294, 0x1192, 0x1294, +0x1192, 0x119c, 0x10aa, 0x119c, 0x10aa, 0x1016, 0xf2e, 0x1016, 0xf2e, 0x1016, 0xf2e, +0xe9f, 0xdbb, 0xe9f, 0xdbb, 0xd9a, 0xcb6, 0xd9a, 0xcb6, 0xd06, 0xc1e, 0xd06, +0xc1e, 0xcac, 0xbbe, 0xcac, 0xbbe, 0xbd1, 0xadd, 0xbd1, 0xadd, 0xbd1, 0xadd, +0xad2, 0x9d9, 0xad2, 0x9d9, 0x951, 0x856, 0x951, 0x856, 0x95a, 0x85f, 0x95a, +0x85f, 0x8ce, 0x7d8, 0x8ce, 0x7d8, 0x77d, 0x692, 0x77d, 0x692, 0x5bc, 0x4df, +0x5bc, 0x4df, 0x5bc, 0x4df, 0x43c, 0x373, 0x43c, 0x373, 0x20d, 0x15d, 0x20d, +0x15d, 0x74, 0xffe1, 0x74, 0xffe1, 0xff53, 0xfee1, 0xff53, 0xfee1, 0xfd72, 0xfd22, +0xfd72, 0xfd22, 0xfb28, 0xfafb, 0xfb28, 0xfafb, 0xfb28, 0xfafb, 0xf933, 0xf928, 0xf933, +0xf928, 0xf7e6, 0xf7fc, 0xf7e6, 0xf7fc, 0xf722, 0xf755, 0xf722, 0xf755, 0xf645, 0xf692, +0xf645, 0xf692, 0xf4eb, 0xf54d, 0xf4eb, 0xf54d, 0xf4eb, 0xf54d, 0xf453, 0xf4c5, 0xf453, +0xf4c5, 0xf37e, 0xf3fa, 0xf37e, 0xf3fa, 0xf2e8, 0xf36a, 0xf2e8, 0xf36a, 0xf280, 0xf301, +0xf280, 0xf301, 0xf318, 0xf395, 0xf318, 0xf395, 0xf341, 0xf3b7, 0xf341, 0xf3b7, 0xf341, +0xf3b7, 0xf40f, 0xf47b, 0xf40f, 0xf47b, 0xf4c9, 0xf52b, 0xf4c9, 0xf52b, 0xf615, 0xf66e, +0xf615, 0xf66e, 0xf71f, 0xf772, 0xf71f, 0xf772, 0xf6c5, 0xf715, 0xf6c5, 0xf715, 0xf678, +0xf6cb, 0xf678, 0xf6cb, 0xf678, 0xf6cb, 0xf62a, 0xf687, 0xf62a, 0xf687, 0xf5ef, 0xf65d, +0xf5ef, 0xf65d, 0xf565, 0xf5ec, 0xf565, 0xf5ec, 0xf59f, 0xf648, 0xf59f, 0xf648, 0xf565, +0xf638, 0xf565, 0xf638, 0xf565, 0xf638, 0xf4e2, 0xf5e6, 0xf4e2, 0xf5e6, 0xf3ed, 0xf52a, +0xf3ed, 0xf52a, 0xf394, 0xf50e, 0xf394, 0xf50e, 0xf2f1, 0xf4ad, 0xf2f1, 0xf4ad, 0xf21f, +0xf41e, 0xf21f, 0xf41e, 0xf150, 0xf394, 0xf150, 0xf394, 0xf150, 0xf394, 0xf080, 0xf306, +0xf080, 0xf306, 0xef5b, 0xf220, 0xef5b, 0xf220, 0xeea1, 0xf19e, 0xeea1, 0xf19e, 0xed7d, +0xf0aa, 0xed7d, 0xf0aa, 0xec17, 0xef6c, 0xec17, 0xef6c, 0xeb17, 0xee87, 0xeb17, 0xee87, +0xeb17, 0xee87, 0xea56, 0xedd7, 0xea56, 0xedd7, 0xeaa5, 0xee2a, 0xeaa5, 0xee2a, 0xeb1a, +0xee96, 0xeb1a, 0xee96, 0xec36, 0xef9c, 0xec36, 0xef9c, 0xec85, 0xefc9, 0xec85, 0xefc9, +0xec85, 0xefc9, 0xed9b, 0xf0b2, 0xed9b, 0xf0b2, 0xef49, 0xf229, 0xef49, 0xf229, 0xf1fe, +0xf49d, 0xf1fe, 0xf49d, 0xf49c, 0xf6f5, 0xf49c, 0xf6f5, 0xf753, 0xf95e, 0xf753, 0xf95e, +0xf9b7, 0xfb72, 0xf9b7, 0xfb72, 0xf9b7, 0xfb72, 0xfbe6, 0xfd4d, 0xfbe6, 0xfd4d, 0xff01, +0x14, 0xff01, 0x14, 0x19f, 0x25e, 0x19f, 0x25e, 0x3b2, 0x420, 0x3b2, 0x420, +0x5cd, 0x5ec, 0x5cd, 0x5ec, 0x80a, 0x7de, 0x80a, 0x7de, 0x80a, 0x7de, 0x99a, +0x928, 0x99a, 0x928, 0xb8f, 0xad9, 0xb8f, 0xad9, 0xd67, 0xc73, 0xd67, 0xc73, +0xe9a, 0xd6b, 0xe9a, 0xd6b, 0xeff, 0xd9a, 0xeff, 0xd9a, 0xeff, 0xd9a, 0x103d, +0xea4, 0x103d, 0xea4, 0x11a3, 0xfda, 0x11a3, 0xfda, 0x1397, 0x119f, 0x1397, 0x119f, +0x14c3, 0x129f, 0x14c3, 0x129f, 0x15a4, 0x1356, 0x15a4, 0x1356, 0x166f, 0x13f7, 0x166f, +0x13f7, 0x166f, 0x13f7, 0x16c1, 0x1422, 0x16c1, 0x1422, 0x16af, 0x13eb, 0x16af, 0x13eb, +0x1692, 0x13ac, 0x1692, 0x13ac, 0x1748, 0x1443, 0x1748, 0x1443, 0x171b, 0x13fb, 0x171b, +0x13fb, 0x171b, 0x13fb, 0x1735, 0x13ff, 0x1735, 0x13ff, 0x1733, 0x13ee, 0x1733, 0x13ee, +0x17c7, 0x147a, 0x17c7, 0x147a, 0x1775, 0x1428, 0x1775, 0x1428, 0x1667, 0x1323, 0x1667, +0x1323, 0x155e, 0x122e, 0x155e, 0x122e, 0x155e, 0x122e, 0x1474, 0x1163, 0x1474, 0x1163, +0x1302, 0x101b, 0x1302, 0x101b, 0x1157, 0xea5, 0x1157, 0xea5, 0xf82, 0xd0f, 0xf82, +0xd0f, 0xd92, 0xb69, 0xd92, 0xb69, 0xb5c, 0x987, 0xb5c, 0x987, 0xb5c, 0x987, +0x93a, 0x7bf, 0x93a, 0x7bf, 0x747, 0x62e, 0x747, 0x62e, 0x477, 0x3c5, 0x477, +0x3c5, 0x182, 0x13a, 0x182, 0x13a, 0xfdcf, 0xfdf1, 0xfdcf, 0xfdf1, 0xfdcf, 0xfdf1, +0xf9e7, 0xfa73, 0xf9e7, 0xfa73, 0xf5ef, 0xf6e2, 0xf5ef, 0xf6e2, 0xf31f, 0xf474, 0xf31f, +0xf474, 0xf025, 0xf1d5, 0xf025, 0xf1d5, 0xedc8, 0xefcb, 0xedc8, 0xefcb, 0xeb8e, 0xeddc, +0xeb8e, 0xeddc, 0xeb8e, 0xeddc, 0xe9ac, 0xec3b, 0xe9ac, 0xec3b, 0xe821, 0xeae7, 0xe821, +0xeae7, 0xe6fe, 0xe9ef, 0xe6fe, 0xe9ef, 0xe62a, 0xe93e, 0xe62a, 0xe93e, 0xe493, 0xe7c0, +0xe493, 0xe7c0, 0xe355, 0xe692, 0xe355, 0xe692, 0xe355, 0xe692, 0xe2bd, 0xe602, 0xe2bd, +0xe602, 0xe2ed, 0xe634, 0xe2ed, 0xe634, 0xe2f9, 0xe63c, 0xe2f9, 0xe63c, 0xe34c, 0xe688, +0xe34c, 0xe688, 0xe2f1, 0xe622, 0xe2f1, 0xe622, 0xe2f1, 0xe622, 0xe342, 0xe666, 0xe342, +0xe666, 0xe49a, 0xe7b0, 0xe49a, 0xe7b0, 0xe603, 0xe90a, 0xe603, 0xe90a, 0xe672, 0xe96a, +0xe672, 0xe96a, 0xe732, 0xea1a, 0xe732, 0xea1a, 0xe7df, 0xeab6, 0xe7df, 0xeab6, 0xe7df, +0xeab6, 0xe863, 0xeb29, 0xe863, 0xeb29, 0xe984, 0xec37, 0xe984, 0xec37, 0xeab3, 0xed4f, +0xeab3, 0xed4f, 0xeb19, 0xed9b, 0xeb19, 0xed9b, 0xeb2f, 0xed91, 0xeb2f, 0xed91, 0xec2c, +0xee69, 0xec2c, 0xee69, 0xec2c, 0xee69, 0xed7b, 0xef8c, 0xed7b, 0xef8c, 0xef6a, 0xf147, +0xef6a, 0xf147, 0xf100, 0xf2a0, 0xf100, 0xf2a0, 0xf327, 0xf482, 0xf327, 0xf482, 0xf587, +0xf694, 0xf587, 0xf694, 0xf587, 0xf694, 0xf884, 0xf93a, 0xf884, 0xf93a, 0xfb22, 0xfb7b, +0xfb22, 0xfb7b, 0xfe4a, 0xfe3e, 0xfe4a, 0xfe3e, 0x197, 0x122, 0x197, 0x122, 0x4ae, +0x3cc, 0x4ae, 0x3cc, 0x840, 0x6f0, 0x840, 0x6f0, 0x840, 0x6f0, 0xc0e, 0xa51, +0xc0e, 0xa51, 0x1012, 0xdeb, 0x1012, 0xdeb, 0x131a, 0x108e, 0x131a, 0x108e, 0x15a4, +0x12bc, 0x15a4, 0x12bc, 0x1810, 0x14d4, 0x1810, 0x14d4, 0x1a79, 0x16f5, 0x1a79, 0x16f5, +0x1a79, 0x16f5, 0x1c30, 0x1870, 0x1c30, 0x1870, 0x1e0e, 0x1a21, 0x1e0e, 0x1a21, 0x1fbf, +0x1bb3, 0x1fbf, 0x1bb3, 0x2113, 0x1cf7, 0x2113, 0x1cf7, 0x216b, 0x1d4d, 0x216b, 0x1d4d, +0x216b, 0x1d4d, 0x21bb, 0x1daa, 0x21bb, 0x1daa, 0x21d7, 0x1de0, 0x21d7, 0x1de0, 0x21bc, +0x1deb, 0x21bc, 0x1deb, 0x2132, 0x1d90, 0x2132, 0x1d90, 0x205e, 0x1cf2, 0x205e, 0x1cf2, +0x1f0c, 0x1bdd, 0x1f0c, 0x1bdd, 0x1f0c, 0x1bdd, 0x1d89, 0x1a9a, 0x1d89, 0x1a9a, 0x1c5f, +0x19b2, 0x1c5f, 0x19b2, 0x1ab6, 0x184c, 0x1ab6, 0x184c, 0x1957, 0x172c, 0x1957, 0x172c, +0x1765, 0x1577, 0x1765, 0x1577, 0x1594, 0x13dd, 0x1594, 0x13dd, 0x1594, 0x13dd, 0x1381, +0x11fb, 0x1381, 0x11fb, 0x121f, 0x10c5, 0x121f, 0x10c5, 0x1090, 0xf5c, 0x1090, 0xf5c, +0xea7, 0xd91, 0xea7, 0xd91, 0xd36, 0xc3a, 0xd36, 0xc3a, 0xd36, 0xc3a, 0xc60, +0xb78, 0xc60, 0xb78, 0xb7d, 0xaa7, 0xb7d, 0xaa7, 0xa56, 0x98d, 0xa56, 0x98d, +0x8f2, 0x837, 0x8f2, 0x837, 0x700, 0x651, 0x700, 0x651, 0x5b7, 0x515, 0x5b7, +0x515, 0x5b7, 0x515, 0x523, 0x491, 0x523, 0x491, 0x425, 0x3a4, 0x425, 0x3a4, +0x291, 0x225, 0x291, 0x225, 0x1a2, 0x14e, 0x1a2, 0x14e, 0x16, 0xffdd, 0x16, +0xffdd, 0xfe04, 0xfde9, 0xfe04, 0xfde9, 0xfe04, 0xfde9, 0xfc25, 0xfc2a, 0xfc25, 0xfc2a, +0xfaa6, 0xfacd, 0xfaa6, 0xfacd, 0xf81d, 0xf866, 0xf81d, 0xf866, 0xf616, 0xf680, 0xf616, +0xf680, 0xf4e0, 0xf56a, 0xf4e0, 0xf56a, 0xf4e0, 0xf56a, 0xf433, 0xf4d9, 0xf433, 0xf4d9, +0xf3c8, 0xf486, 0xf3c8, 0xf486, 0xf314, 0xf3e6, 0xf314, 0xf3e6, 0xf2b6, 0xf395, 0xf2b6, +0xf395, 0xf254, 0xf339, 0xf254, 0xf339, 0xf1f3, 0xf2d8, 0xf1f3, 0xf2d8, 0xf1f3, 0xf2d8, +0xf102, 0xf1e1, 0xf102, 0xf1e1, 0xf135, 0xf209, 0xf135, 0xf209, 0xf1a7, 0xf26a, 0xf1a7, +0xf26a, 0xf22b, 0xf2da, 0xf22b, 0xf2da, 0xf2f5, 0xf38e, 0xf2f5, 0xf38e, 0xf440, 0xf4c1, +0xf440, 0xf4c1, 0xf440, 0xf4c1, 0xf5e5, 0xf64f, 0xf5e5, 0xf64f, 0xf6eb, 0xf741, 0xf6eb, +0xf741, 0xf764, 0xf7aa, 0xf764, 0xf7aa, 0xf7fb, 0xf836, 0xf7fb, 0xf836, 0xf83e, 0xf877, +0xf83e, 0xf877, 0xf83e, 0xf877, 0xf871, 0xf8af, 0xf871, 0xf8af, 0xf8d9, 0xf925, 0xf8d9, +0xf925, 0xf970, 0xf9d4, 0xf970, 0xf9d4, 0xf9ae, 0xfa34, 0xf9ae, 0xfa34, 0xf93a, 0xf9ea, +0xf93a, 0xf9ea, 0xf930, 0xfa13, 0xf930, 0xfa13, 0xf930, 0xfa13, 0xf8ea, 0xfa07, 0xf8ea, +0xfa07, 0xf8b6, 0xfa11, 0xf8b6, 0xfa11, 0xf7fc, 0xf999, 0xf7fc, 0xf999, 0xf733, 0xf914, +0xf733, 0xf914, 0xf5b7, 0xf7dc, 0xf5b7, 0xf7dc, 0xf4bf, 0xf724, 0xf4bf, 0xf724, 0xf4bf, +0xf724, 0xf41e, 0xf6bd, 0xf41e, 0xf6bd, 0xf2e5, 0xf5b8, 0xf2e5, 0xf5b8, 0xf19d, 0xf499, +0xf19d, 0xf499, 0xf039, 0xf355, 0xf039, 0xf355, 0xef9e, 0xf2ce, 0xef9e, 0xf2ce, 0xef9e, +0xf2ce, 0xef50, 0xf286, 0xef50, 0xf286, 0xef6f, 0xf29d, 0xef6f, 0xf29d, 0xef71, 0xf28b, +0xef71, 0xf28b, 0xef68, 0xf25f, 0xef68, 0xf25f, 0xefee, 0xf2b7, 0xefee, 0xf2b7, 0xf11a, +0xf3a9, 0xf11a, 0xf3a9, 0xf11a, 0xf3a9, 0xf2ac, 0xf4f8, 0xf2ac, 0xf4f8, 0xf4da, 0xf6da, +0xf4da, 0xf6da, 0xf6db, 0xf88a, 0xf6db, 0xf88a, 0xf8ca, 0xfa23, 0xf8ca, 0xfa23, 0xfaf0, +0xfbf1, 0xfaf0, 0xfbf1, 0xfaf0, 0xfbf1, 0xfdbd, 0xfe64, 0xfdbd, 0xfe64, 0xffb5, 0x4, +0xffb5, 0x4, 0x153, 0x14d, 0x153, 0x14d, 0x3a2, 0x34a, 0x3a2, 0x34a, 0x55c, +0x4b7, 0x55c, 0x4b7, 0x6eb, 0x5ff, 0x6eb, 0x5ff, 0x6eb, 0x5ff, 0x8ba, 0x78d, +0x8ba, 0x78d, 0xa42, 0x8da, 0xa42, 0x8da, 0xa6d, 0x8d0, 0xa6d, 0x8d0, 0xae7, +0x91b, 0xae7, 0x91b, 0xba7, 0x9b2, 0xba7, 0x9b2, 0xca8, 0xa8f, 0xca8, 0xa8f, +0xca8, 0xa8f, 0xdad, 0xb74, 0xdad, 0xb74, 0xe9c, 0xc47, 0xe9c, 0xc47, 0xf90, +0xd22, 0xf90, 0xd22, 0x1046, 0xdc3, 0x1046, 0xdc3, 0x1078, 0xde2, 0x1078, 0xde2, +0x1078, 0xde2, 0x1092, 0xdec, 0x1092, 0xdec, 0x111f, 0xe6c, 0x111f, 0xe6c, 0x1188, +0xecc, 0x1188, 0xecc, 0x11c8, 0xf05, 0x11c8, 0xf05, 0x11f9, 0xf34, 0x11f9, 0xf34, +0x12a4, 0xfe3, 0x12a4, 0xfe3, 0x12a4, 0xfe3, 0x1311, 0x1059, 0x1311, 0x1059, 0x1300, +0x1058, 0x1300, 0x1058, 0x12db, 0x104a, 0x12db, 0x104a, 0x12b0, 0x103f, 0x12b0, 0x103f, +0x11c0, 0xf77, 0x11c0, 0xf77, 0x1090, 0xe79, 0x1090, 0xe79, 0x1090, 0xe79, 0xf17, +0xd3a, 0xf17, 0xd3a, 0xd8c, 0xbf2, 0xd8c, 0xbf2, 0xb6d, 0xa1f, 0xb6d, 0xa1f, +0x906, 0x80a, 0x906, 0x80a, 0x732, 0x68f, 0x732, 0x68f, 0x732, 0x68f, 0x58c, +0x547, 0x58c, 0x547, 0x399, 0x3b5, 0x399, 0x3b5, 0x118, 0x197, 0x118, 0x197, +0xfe48, 0xff2a, 0xfe48, 0xff2a, 0xfab5, 0xfbf7, 0xfab5, 0xfbf7, 0xf7ec, 0xf98a, 0xf7ec, +0xf98a, 0xf7ec, 0xf98a, 0xf55a, 0xf74e, 0xf55a, 0xf74e, 0xf2f2, 0xf536, 0xf2f2, 0xf536, +0xf0d9, 0xf363, 0xf0d9, 0xf363, 0xeec7, 0xf18e, 0xeec7, 0xf18e, 0xed02, 0xeffc, 0xed02, +0xeffc, 0xebaf, 0xeed0, 0xebaf, 0xeed0, 0xebaf, 0xeed0, 0xeaf7, 0xee34, 0xeaf7, 0xee34, +0xe9ff, 0xed4f, 0xe9ff, 0xed4f, 0xe8b9, 0xec11, 0xe8b9, 0xec11, 0xe81b, 0xeb73, 0xe81b, +0xeb73, 0xe825, 0xeb74, 0xe825, 0xeb74, 0xe825, 0xeb74, 0xe852, 0xeb92, 0xe852, 0xeb92, +0xe8aa, 0xebd6, 0xe8aa, 0xebd6, 0xe8d3, 0xebe7, 0xe8d3, 0xebe7, 0xe8a3, 0xeb9c, 0xe8a3, +0xeb9c, 0xe8ff, 0xebdc, 0xe8ff, 0xebdc, 0xea5a, 0xed1a, 0xea5a, 0xed1a, 0xea5a, 0xed1a, +0xeacf, 0xed74, 0xeacf, 0xed74, 0xeb92, 0xee1c, 0xeb92, 0xee1c, 0xec6b, 0xeeda, 0xec6b, +0xeeda, 0xec98, 0xeeee, 0xec98, 0xeeee, 0xecd1, 0xef0e, 0xecd1, 0xef0e, 0xed8e, 0xefb2, +0xed8e, 0xefb2, 0xed8e, 0xefb2, 0xee48, 0xf052, 0xee48, 0xf052, 0xee48, 0xf036, 0xee48, +0xf036, 0xee8a, 0xf057, 0xee8a, 0xf057, 0xeefb, 0xf0a4, 0xeefb, 0xf0a4, 0xf04e, 0xf1cd, +0xf04e, 0xf1cd, 0xf04e, 0xf1cd, 0xf1b5, 0xf302, 0xf1b5, 0xf302, 0xf2e7, 0xf3fb, 0xf2e7, +0xf3fb, 0xf4bb, 0xf58d, 0xf4bb, 0xf58d, 0xf6d4, 0xf75d, 0xf6d4, 0xf75d, 0xf875, 0xf8ac, +0xf875, 0xf8ac, 0xfa3f, 0xfa1a, 0xfa3f, 0xfa1a, 0xfa3f, 0xfa1a, 0xfc8d, 0xfc08, 0xfc8d, +0xfc08, 0xff4c, 0xfe5f, 0xff4c, 0xfe5f, 0x215, 0xbe, 0x215, 0xbe, 0x4fc, 0x337, +0x4fc, 0x337, 0x894, 0x661, 0x894, 0x661, 0xc55, 0x9b8, 0xc55, 0x9b8, 0xc55, +0x9b8, 0xf62, 0xc5d, 0xf62, 0xc5d, 0x1240, 0xedc, 0x1240, 0xedc, 0x14b0, 0x10f7, +0x14b0, 0x10f7, 0x165c, 0x1258, 0x165c, 0x1258, 0x186d, 0x142b, 0x186d, 0x142b, 0x186d, +0x142b, 0x1a4e, 0x15dd, 0x1a4e, 0x15dd, 0x1c41, 0x17b1, 0x1c41, 0x17b1, 0x1d2d, 0x188e, +0x1d2d, 0x188e, 0x1db6, 0x1919, 0x1db6, 0x1919, 0x1ebb, 0x1a30, 0x1ebb, 0x1a30, 0x1f7a, +0x1b0f, 0x1f7a, 0x1b0f, 0x1f7a, 0x1b0f, 0x1f9e, 0x1b62, 0x1f9e, 0x1b62, 0x1f55, 0x1b54, +0x1f55, 0x1b54, 0x1e96, 0x1adc, 0x1e96, 0x1adc, 0x1d45, 0x19d9, 0x1d45, 0x19d9, 0x1c55, +0x193d, 0x1c55, 0x193d, 0x1af8, 0x1838, 0x1af8, 0x1838, 0x1af8, 0x1838, 0x1961, 0x16fb, +0x1961, 0x16fb, 0x17b1, 0x15a3, 0x17b1, 0x15a3, 0x15c9, 0x1411, 0x15c9, 0x1411, 0x1438, +0x12d3, 0x1438, 0x12d3, 0x12f6, 0x11de, 0x12f6, 0x11de, 0x12f6, 0x11de, 0x11bd, 0x10ea, +0x11bd, 0x10ea, 0x1023, 0xf8f, 0x1023, 0xf8f, 0xe3f, 0xde2, 0xe3f, 0xde2, 0xd18, +0xcea, 0xd18, 0xcea, 0xbfc, 0xbf6, 0xbfc, 0xbf6, 0xb18, 0xb33, 0xb18, 0xb33, +0xb18, 0xb33, 0xa49, 0xa81, 0xa49, 0xa81, 0x94c, 0x99b, 0x94c, 0x99b, 0x7f5, +0x858, 0x7f5, 0x858, 0x6fc, 0x770, 0x6fc, 0x770, 0x6c7, 0x74b, 0x6c7, 0x74b, +0x575, 0x608, 0x575, 0x608, 0x575, 0x608, 0x4a1, 0x542, 0x4a1, 0x542, 0x3c4, +0x475, 0x3c4, 0x475, 0x222, 0x2e3, 0x222, 0x2e3, 0x6c, 0x13d, 0x6c, 0x13d, +0xfed5, 0xffb6, 0xfed5, 0xffb6, 0xfed5, 0xffb6, 0xfce7, 0xfdd8, 0xfce7, 0xfdd8, 0xfa5d, +0xfb5d, 0xfa5d, 0xfb5d, 0xf821, 0xf92f, 0xf821, 0xf92f, 0xf652, 0xf76a, 0xf652, 0xf76a, +0xf52a, 0xf648, 0xf52a, 0xf648, 0xf437, 0xf557, 0xf437, 0xf557, 0xf437, 0xf557, 0xf323, +0xf43f, 0xf323, 0xf43f, 0xf2e5, 0xf3f8, 0xf2e5, 0xf3f8, 0xf295, 0xf398, 0xf295, 0xf398, +0xf205, 0xf2f2, 0xf205, 0xf2f2, 0xf1fc, 0xf2cc, 0xf1fc, 0xf2cc, 0xf20f, 0xf2be, 0xf20f, +0xf2be, 0xf20f, 0xf2be, 0xf2ad, 0xf336, 0xf2ad, 0xf336, 0xf30d, 0xf36d, 0xf30d, 0xf36d, +0xf3bf, 0xf3f3, 0xf3bf, 0xf3f3, 0xf513, 0xf51c, 0xf513, 0xf51c, 0xf675, 0xf655, 0xf675, +0xf655, 0xf675, 0xf655, 0xf72d, 0xf6e8, 0xf72d, 0xf6e8, 0xf7b9, 0xf754, 0xf7b9, 0xf754, +0xf805, 0xf788, 0xf805, 0xf788, 0xf7d6, 0xf749, 0xf7d6, 0xf749, 0xf7d3, 0xf740, 0xf7d3, +0xf740, 0xf7a1, 0xf714, 0xf7a1, 0xf714, 0xf7a1, 0xf714, 0xf78a, 0xf70e, 0xf78a, 0xf70e, +0xf6d9, 0xf67b, 0xf6d9, 0xf67b, 0xf628, 0xf5f2, 0xf628, 0xf5f2, 0xf640, 0xf63d, 0xf640, +0xf63d, 0xf61c, 0xf656, 0xf61c, 0xf656, 0xf61c, 0xf656, 0xf583, 0xf603, 0xf583, 0xf603, +0xf4d5, 0xf5a0, 0xf4d5, 0xf5a0, 0xf398, 0xf4b1, 0xf398, 0xf4b1, 0xf2a8, 0xf411, 0xf2a8, +0xf411, 0xf1ff, 0xf3b7, 0xf1ff, 0xf3b7, 0xf126, 0xf32a, 0xf126, 0xf32a, 0xf126, 0xf32a, +0xf04b, 0xf294, 0xf04b, 0xf294, 0xef4b, 0xf1d0, 0xef4b, 0xf1d0, 0xee36, 0xf0ee, 0xee36, +0xf0ee, 0xed76, 0xf054, 0xed76, 0xf054, 0xed54, 0xf04a, 0xed54, 0xf04a, 0xedbd, 0xf0bd, +0xedbd, 0xf0bd, 0xedbd, 0xf0bd, 0xee20, 0xf11a, 0xee20, 0xf11a, 0xee9d, 0xf184, 0xee9d, +0xf184, 0xefe4, 0xf2a9, 0xefe4, 0xf2a9, 0xf128, 0xf3be, 0xf128, 0xf3be, 0xf2b2, 0xf50e, +0xf2b2, 0xf50e, 0xf2b2, 0xf50e, 0xf4a3, 0xf6ba, 0xf4a3, 0xf6ba, 0xf6ad, 0xf876, 0xf6ad, +0xf876, 0xf882, 0xf9f7, 0xf882, 0xf9f7, 0xfb50, 0xfc6e, 0xfb50, 0xfc6e, 0xfe76, 0xff3a, +0xfe76, 0xff3a, 0xd7, 0x141, 0xd7, 0x141, 0xd7, 0x141, 0x38e, 0x3a0, 0x38e, +0x3a0, 0x5fa, 0x5b7, 0x5fa, 0x5b7, 0x7d9, 0x746, 0x7d9, 0x746, 0x9d7, 0x8fb, +0x9d7, 0x8fb, 0xbed, 0xacf, 0xbed, 0xacf, 0xd39, 0xbdf, 0xd39, 0xbdf, 0xd39, +0xbdf, 0xde3, 0xc55, 0xde3, 0xc55, 0xeda, 0xd1f, 0xeda, 0xd1f, 0x102f, 0xe4e, +0x102f, 0xe4e, 0x11f0, 0xfee, 0x11f0, 0xfee, 0x1340, 0x1124, 0x1340, 0x1124, 0x1340, +0x1124, 0x140c, 0x11db, 0x140c, 0x11db, 0x1548, 0x1305, 0x1548, 0x1305, 0x15c9, 0x1379, +0x15c9, 0x1379, 0x15be, 0x1362, 0x15be, 0x1362, 0x154c, 0x12e8, 0x154c, 0x12e8, 0x14ca, +0x125f, 0x14ca, 0x125f, 0x14ca, 0x125f, 0x149d, 0x122e, 0x149d, 0x122e, 0x144b, 0x11da, +0x144b, 0x11da, 0x1433, 0x11c2, 0x1433, 0x11c2, 0x14a5, 0x1237, 0x14a5, 0x1237, 0x14df, +0x1278, 0x14df, 0x1278, 0x1460, 0x1204, 0x1460, 0x1204, 0x1460, 0x1204, 0x1407, 0x11bc, +0x1407, 0x11bc, 0x1380, 0x114b, 0x1380, 0x114b, 0x1268, 0x104f, 0x1268, 0x104f, 0x10f0, +0xefb, 0x10f0, 0xefb, 0xf5b, 0xd91, 0xf5b, 0xd91, 0xf5b, 0xd91, 0xdd2, 0xc3b, +0xdd2, 0xc3b, 0xb8d, 0xa31, 0xb8d, 0xa31, 0x964, 0x84b, 0x964, 0x84b, 0x7f1, +0x720, 0x7f1, 0x720, 0x5c8, 0x546, 0x5c8, 0x546, 0x361, 0x332, 0x361, 0x332, +0x361, 0x332, 0x4e, 0x76, 0x4e, 0x76, 0xfc92, 0xfd13, 0xfc92, 0xfd13, 0xf8b3, +0xf98d, 0xf8b3, 0xf98d, 0xf503, 0xf634, 0xf503, 0xf634, 0xf1bc, 0xf341, 0xf1bc, 0xf341, +0xeedd, 0xf0b3, 0xeedd, 0xf0b3, 0xeedd, 0xf0b3, 0xec86, 0xeea6, 0xec86, 0xeea6, 0xea71, +0xecd4, 0xea71, 0xecd4, 0xe8ed, 0xeb8b, 0xe8ed, 0xeb8b, 0xe7bb, 0xea8b, 0xe7bb, 0xea8b, +0xe6d1, 0xe9cb, 0xe6d1, 0xe9cb, 0xe6d1, 0xe9cb, 0xe56b, 0xe884, 0xe56b, 0xe884, 0xe439, +0xe76a, 0xe439, 0xe76a, 0xe3c2, 0xe702, 0xe3c2, 0xe702, 0xe381, 0xe6c7, 0xe381, 0xe6c7, +0xe389, 0xe6cf, 0xe389, 0xe6cf, 0xe3c8, 0xe708, 0xe3c8, 0xe708, 0xe3c8, 0xe708, 0xe3f4, +0xe729, 0xe3f4, 0xe729, 0xe454, 0xe77b, 0xe454, 0xe77b, 0xe58d, 0xe8a3, 0xe58d, 0xe8a3, +0xe6ec, 0xe9ef, 0xe6ec, 0xe9ef, 0xe7be, 0xeaad, 0xe7be, 0xeaad, 0xe922, 0xebfe, 0xe922, +0xebfe, 0xe922, 0xebfe, 0xea93, 0xed5a, 0xea93, 0xed5a, 0xeb22, 0xedd4, 0xeb22, 0xedd4, +0xebae, 0xee4b, 0xebae, 0xee4b, 0xec7b, 0xef02, 0xec7b, 0xef02, 0xecd4, 0xef44, 0xecd4, +0xef44, 0xecd4, 0xef44, 0xecbd, 0xef11, 0xecbd, 0xef11, 0xed20, 0xef56, 0xed20, 0xef56, +0xed8c, 0xef9f, 0xed8c, 0xef9f, 0xeed4, 0xf0bd, 0xeed4, 0xf0bd, 0xf012, 0xf1cb, 0xf012, +0xf1cb, 0xf1d4, 0xf353, 0xf1d4, 0xf353, 0xf1d4, 0xf353, 0xf46a, 0xf5a9, 0xf46a, 0xf5a9, +0xf6be, 0xf7b2, 0xf6be, 0xf7b2, 0xf968, 0xfa0a, 0xf968, 0xfa0a, 0xfc12, 0xfc58, 0xfc12, +0xfc58, 0xfef4, 0xfed7, 0xfef4, 0xfed7, 0x21b, 0x195, 0x21b, 0x195, 0x21b, 0x195, +0x53e, 0x44a, 0x53e, 0x44a, 0x86c, 0x706, 0x86c, 0x706, 0xc5e, 0xa85, 0xc5e, +0xa85, 0x1041, 0xdf7, 0x1041, 0xdf7, 0x13a0, 0x10e8, 0x13a0, 0x10e8, 0x13a0, 0x10e8, +0x16f1, 0x13d1, 0x16f1, 0x13d1, 0x19a3, 0x1625, 0x19a3, 0x1625, 0x1b5f, 0x178d, 0x1b5f, +0x178d, 0x1cdf, 0x18c6, 0x1cdf, 0x18c6, 0x1e6a, 0x1a18, 0x1e6a, 0x1a18, 0x1fb4, 0x1b39, +0x1fb4, 0x1b39, 0x1fb4, 0x1b39, 0x2006, 0x1b72, 0x2006, 0x1b72, 0x20e1, 0x1c47, 0x20e1, +0x1c47, 0x2198, 0x1d07, 0x2198, 0x1d07, 0x2140, 0x1cc8, 0x2140, 0x1cc8, 0x2133, 0x1ce4, +0x2133, 0x1ce4, 0x207e, 0x1c64, 0x207e, 0x1c64, 0x207e, 0x1c64, 0x1fec, 0x1c14, 0x1fec, +0x1c14, 0x1eea, 0x1b5d, 0x1eea, 0x1b5d, 0x1df4, 0x1ab8, 0x1df4, 0x1ab8, 0x1c86, 0x19a2, +0x1c86, 0x19a2, 0x1a98, 0x180c, 0x1a98, 0x180c, 0x1a98, 0x180c, 0x18f4, 0x16c0, 0x18f4, +0x16c0, 0x16e6, 0x1509, 0x16e6, 0x1509, 0x14e5, 0x1359, 0x14e5, 0x1359, 0x12e3, 0x11a4, +0x12e3, 0x11a4, 0x1116, 0x101b, 0x1116, 0x101b, 0xed7, 0xe19, 0xed7, 0xe19, 0xed7, +0xe19, 0xce7, 0xc5d, 0xce7, 0xc5d, 0xb4e, 0xaef, 0xb4e, 0xaef, 0x986, 0x94a, +0x986, 0x94a, 0x82c, 0x80c, 0x82c, 0x80c, 0x718, 0x70c, 0x718, 0x70c, 0x5ff, +0x603, 0x5ff, 0x603, 0x5ff, 0x603, 0x4cf, 0x4de, 0x4cf, 0x4de, 0x3e1, 0x3f7, +0x3e1, 0x3f7, 0x317, 0x334, 0x317, 0x334, 0x1da, 0x1fc, 0x1da, 0x1fc, 0x198, +0x1c0, 0x198, 0x1c0, 0x198, 0x1c0, 0xbf, 0xed, 0xbf, 0xed, 0xfef3, 0xff2a, +0xfef3, 0xff2a, 0xfd72, 0xfdb2, 0xfd72, 0xfdb2, 0xfba7, 0xfbf3, 0xfba7, 0xfbf3, 0xfa01, +0xfa5a, 0xfa01, 0xfa5a, 0xf7ec, 0xf853, 0xf7ec, 0xf853, 0xf7ec, 0xf853, 0xf6c3, 0xf738, +0xf6c3, 0xf738, 0xf5cf, 0xf651, 0xf5cf, 0xf651, 0xf53a, 0xf5c6, 0xf53a, 0xf5c6, 0xf4d5, +0xf569, 0xf4d5, 0xf569, 0xf483, 0xf51c, 0xf483, 0xf51c, 0xf483, 0xf51c, 0xf44a, 0xf4e4, +0xf44a, 0xf4e4, 0xf352, 0xf3e8, 0xf352, 0xf3e8, 0xf2a8, 0xf333, 0xf2a8, 0xf333, 0xf1f2, +0xf26f, 0xf1f2, 0xf26f, 0xf1d3, 0xf23c, 0xf1d3, 0xf23c, 0xf248, 0xf299, 0xf248, 0xf299, +0xf248, 0xf299, 0xf2bd, 0xf2f4, 0xf2bd, 0xf2f4, 0xf405, 0xf41e, 0xf405, 0xf41e, 0xf5d7, +0xf5d4, 0xf5d7, 0xf5d4, 0xf72f, 0xf711, 0xf72f, 0xf711, 0xf871, 0xf83a, 0xf871, 0xf83a, +0xf980, 0xf935, 0xf980, 0xf935, 0xf980, 0xf935, 0xfac9, 0xfa72, 0xfac9, 0xfa72, 0xfb26, +0xfacb, 0xfb26, 0xfacb, 0xfb50, 0xfafa, 0xfb50, 0xfafa, 0xfbe8, 0xfba2, 0xfbe8, 0xfba2, +0xfc4d, 0xfc22, 0xfc4d, 0xfc22, 0xfc4d, 0xfc22, 0xfc2e, 0xfc2a, 0xfc2e, 0xfc2a, 0xfc23, +0xfc50, 0xfc23, 0xfc50, 0xfc55, 0xfcbf, 0xfc55, 0xfcbf, 0xfbb7, 0xfc66, 0xfbb7, 0xfc66, +0xfb6b, 0xfc67, 0xfb6b, 0xfc67, 0xfa57, 0xfba6, 0xfa57, 0xfba6, 0xfa57, 0xfba6, 0xf8de, +0xfa82, 0xf8de, 0xfa82, 0xf768, 0xf963, 0xf768, 0xf963, 0xf630, 0xf880, 0xf630, 0xf880, +0xf4bd, 0xf75e, 0xf4bd, 0xf75e, 0xf369, 0xf653, 0xf369, 0xf653, 0xf1f6, 0xf521, 0xf1f6, +0xf521, 0xf1f6, 0xf521, 0xf08a, 0xf3ea, 0xf08a, 0xf3ea, 0xef11, 0xf297, 0xef11, 0xf297, +0xee0e, 0xf1ac, 0xee0e, 0xf1ac, 0xee2d, 0xf1d4, 0xee2d, 0xf1d4, 0xedf0, 0xf18f, 0xedf0, +0xf18f, 0xedf0, 0xf18f, 0xee63, 0xf1ea, 0xee63, 0xf1ea, 0xef25, 0xf285, 0xef25, 0xf285, +0xf01f, 0xf34a, 0xf01f, 0xf34a, 0xf13e, 0xf427, 0xf13e, 0xf427, 0xf2f0, 0xf58c, 0xf2f0, +0xf58c, 0xf499, 0xf6df, 0xf499, 0xf6df, 0xf499, 0xf6df, 0xf634, 0xf81e, 0xf634, 0xf81e, +0xf88e, 0xfa18, 0xf88e, 0xfa18, 0xfb24, 0xfc4c, 0xfb24, 0xfc4c, 0xfd20, 0xfde6, 0xfd20, +0xfde6, 0xffad, 0x14, 0xffad, 0x14, 0x18d, 0x199, 0x18d, 0x199, 0x18d, 0x199, +0x2c9, 0x280, 0x2c9, 0x280, 0x418, 0x381, 0x418, 0x381, 0x53a, 0x45d, 0x53a, +0x45d, 0x66e, 0x553, 0x66e, 0x553, 0x717, 0x5c6, 0x717, 0x5c6, 0x717, 0x5c6, +0x844, 0x6c5, 0x844, 0x6c5, 0x921, 0x77c, 0x921, 0x77c, 0xab2, 0x8ed, 0xab2, +0x8ed, 0xb6d, 0x98d, 0xb6d, 0x98d, 0xcbb, 0xac5, 0xcbb, 0xac5, 0xdf1, 0xbe9, +0xdf1, 0xbe9, 0xdf1, 0xbe9, 0xe72, 0xc5a, 0xe72, 0xc5a, 0xf34, 0xd0e, 0xf34, +0xd0e, 0xf00, 0xcce, 0xf00, 0xcce, 0xfd5, 0xd96, 0xfd5, 0xd96, 0x106b, 0xe21, +0x106b, 0xe21, 0x1077, 0xe23, 0x1077, 0xe23, 0x1077, 0xe23, 0x11c0, 0xf63, 0x11c0, +0xf63, 0x126f, 0x100a, 0x126f, 0x100a, 0x12ef, 0x1087, 0x12ef, 0x1087, 0x1397, 0x112e, +0x1397, 0x112e, 0x1354, 0x10ef, 0x1354, 0x10ef, 0x1354, 0x10ef, 0x134d, 0x10f1, 0x134d, +0x10f1, 0x1171, 0xf25, 0x1171, 0xf25, 0x1017, 0xde2, 0x1017, 0xde2, 0xf07, 0xcf2, +0xf07, 0xcf2, 0xdcc, 0xbdf, 0xdcc, 0xbdf, 0xbd4, 0xa18, 0xbd4, 0xa18, 0xbd4, +0xa18, 0xa35, 0x8b2, 0xa35, 0x8b2, 0x933, 0x7f1, 0x933, 0x7f1, 0x6b0, 0x5b6, +0x6b0, 0x5b6, 0x4fa, 0x44d, 0x4fa, 0x44d, 0x28b, 0x231, 0x28b, 0x231, 0xffc1, +0xffbc, 0xffc1, 0xffbc, 0xffc1, 0xffbc, 0xfcb5, 0xfd07, 0xfcb5, 0xfd07, 0xf9a6, 0xfa4d, +0xf9a6, 0xfa4d, 0xf694, 0xf78e, 0xf694, 0xf78e, 0xf3eb, 0xf534, 0xf3eb, 0xf534, 0xf23d, +0xf3d0, 0xf23d, 0xf3d0, 0xf23d, 0xf3d0, 0xefef, 0xf1c4, 0xefef, 0xf1c4, 0xee3e, 0xf04d, +0xee3e, 0xf04d, 0xed7e, 0xefbf, 0xed7e, 0xefbf, 0xebd7, 0xee3f, 0xebd7, 0xee3f, 0xeb4f, +0xedd6, 0xeb4f, 0xedd6, 0xea68, 0xed05, 0xea68, 0xed05, 0xea68, 0xed05, 0xe9fd, 0xeca8, +0xe9fd, 0xeca8, 0xe95e, 0xec0e, 0xe95e, 0xec0e, 0xe833, 0xeae3, 0xe833, 0xeae3, 0xe8bb, +0xeb66, 0xe8bb, 0xeb66, 0xe7dc, 0xea7e, 0xe7dc, 0xea7e, 0xe874, 0xeb0b, 0xe874, 0xeb0b, +0xe874, 0xeb0b, 0xe8f3, 0xeb7d, 0xe8f3, 0xeb7d, 0xe95b, 0xebd9, 0xe95b, 0xebd9, 0xea74, +0xece7, 0xea74, 0xece7, 0xeb6f, 0xedd7, 0xeb6f, 0xedd7, 0xece2, 0xef42, 0xece2, 0xef42, +0xece2, 0xef42, 0xece0, 0xef39, 0xece0, 0xef39, 0xecff, 0xef54, 0xecff, 0xef54, 0xee11, +0xf060, 0xee11, 0xf060, 0xee9e, 0xf0e9, 0xee9e, 0xf0e9, 0xeeb8, 0xf0fc, 0xeeb8, 0xf0fc, +0xee95, 0xf0ce, 0xee95, 0xf0ce, 0xee95, 0xf0ce, 0xef4c, 0xf177, 0xef4c, 0xf177, 0xefec, +0xf202, 0xefec, 0xf202, 0xf0ea, 0xf2e5, 0xf0ea, 0xf2e5, 0xf25d, 0xf433, 0xf25d, 0xf433, +0xf309, 0xf4b1, 0xf309, 0xf4b1, 0xf4ba, 0xf629, 0xf4ba, 0xf629, 0xf4ba, 0xf629, 0xf5dc, +0xf708, 0xf5dc, 0xf708, 0xf889, 0xf968, 0xf889, 0xf968, 0xfaf0, 0xfb77, 0xfaf0, 0xfb77, +0xfd40, 0xfd67, 0xfd40, 0xfd67, 0xffe5, 0xffa4, 0xffe5, 0xffa4, 0xffe5, 0xffa4, 0x296, +0x1e7, 0x296, 0x1e7, 0x710, 0x5f1, 0x710, 0x5f1, 0xa23, 0x892, 0xa23, 0x892, +0xdec, 0xbeb, 0xdec, 0xbeb, 0x1165, 0xef8, 0x1165, 0xef8, 0x13f3, 0x1120, 0x13f3, +0x1120, 0x13f3, 0x1120, 0x1659, 0x132a, 0x1659, 0x132a, 0x1837, 0x14b6, 0x1837, 0x14b6, +0x1ad5, 0x1711, 0x1ad5, 0x1711, 0x1c3c, 0x1842, 0x1c3c, 0x1842, 0x1e0c, 0x19ec, 0x1e0c, +0x19ec, 0x200a, 0x1bd4, 0x200a, 0x1bd4, 0x200a, 0x1bd4, 0x20c2, 0x1c85, 0x20c2, 0x1c85, +0x21a0, 0x1d6d, 0x21a0, 0x1d6d, 0x209b, 0x1c7e, 0x209b, 0x1c7e, 0x20aa, 0x1cb1, 0x20aa, +0x1cb1, 0x1fb0, 0x1be6, 0x1fb0, 0x1be6, 0x1fb0, 0x1be6, 0x1e59, 0x1ac6, 0x1e59, 0x1ac6, +0x1dc8, 0x1a73, 0x1dc8, 0x1a73, 0x1ba6, 0x1893, 0x1ba6, 0x1893, 0x1b0a, 0x183b, 0x1b0a, +0x183b, 0x192d, 0x16a1, 0x192d, 0x16a1, 0x17a7, 0x155c, 0x17a7, 0x155c, 0x17a7, 0x155c, +0x160b, 0x13fc, 0x160b, 0x13fc, 0x14cc, 0x12f4, 0x14cc, 0x12f4, 0x1353, 0x11ab, 0x1353, +0x11ab, 0x10fd, 0xf7e, 0x10fd, 0xf7e, 0x1007, 0xeaa, 0x1007, 0xeaa, 0x1007, 0xeaa, +0xdc9, 0xc86, 0xdc9, 0xc86, 0xca8, 0xb7a, 0xca8, 0xb7a, 0xbb3, 0xa94, 0xbb3, +0xa94, 0xadb, 0x9c8, 0xadb, 0x9c8, 0xa3f, 0x934, 0xa3f, 0x934, 0x885, 0x782, +0x885, 0x782, 0x885, 0x782, 0x8a7, 0x7ac, 0x8a7, 0x7ac, 0x754, 0x662, 0x754, +0x662, 0x65d, 0x579, 0x65d, 0x579, 0x638, 0x564, 0x638, 0x564, 0x483, 0x3c4, +0x483, 0x3c4, 0x372, 0x2cd, 0x372, 0x2cd, 0x372, 0x2cd, 0x145, 0xc0, 0x145, +0xc0, 0xb, 0xffa9, 0xb, 0xffa9, 0xfd1a, 0xfcdf, 0xfd1a, 0xfcdf, 0xf9ef, 0xf9de, +0xf9ef, 0xf9de, 0xf800, 0xf81a, 0xf800, 0xf81a, 0xf800, 0xf81a, 0xf582, 0xf5c7, 0xf582, +0xf5c7, 0xf4cf, 0xf53d, 0xf4cf, 0xf53d, 0xf30a, 0xf39f, 0xf30a, 0xf39f, 0xf29d, 0xf354, +0xf29d, 0xf354, 0xf215, 0xf2e9, 0xf215, 0xf2e9, 0xf0e6, 0xf1d0, 0xf0e6, 0xf1d0, 0xf0e6, +0xf1d0, 0xf0cd, 0xf1c6, 0xf0cd, 0xf1c6, 0xf027, 0xf128, 0xf027, 0xf128, 0xf090, 0xf191, +0xf090, 0xf191, 0xf047, 0xf141, 0xf047, 0xf141, 0xf0f9, 0xf1e7, 0xf0f9, 0xf1e7, 0xf1d2, +0xf2b0, 0xf1d2, 0xf2b0, 0xf1d2, 0xf2b0, 0xf270, 0xf33a, 0xf270, 0xf33a, 0xf3fb, 0xf4b0, +0xf3fb, 0xf4b0, 0xf44b, 0xf4eb, 0xf44b, 0xf4eb, 0xf5f9, 0xf688, 0xf5f9, 0xf688, 0xf666, +0xf6e8, 0xf666, 0xf6e8, 0xf666, 0xf6e8, 0xf643, 0xf6be, 0xf643, 0xf6be, 0xf6aa, 0xf728, +0xf6aa, 0xf728, 0xf658, 0xf6e0, 0xf658, 0xf6e0, 0xf687, 0xf724, 0xf687, 0xf724, 0xf5c9, +0xf686, 0xf5c9, 0xf686, 0xf5fd, 0xf6e3, 0xf5fd, 0xf6e3, 0xf5fd, 0xf6e3, 0xf585, 0xf69e, +0xf585, 0xf69e, 0xf4e5, 0xf63a, 0xf4e5, 0xf63a, 0xf4fa, 0xf693, 0xf4fa, 0xf693, 0xf3c8, +0xf5a9, 0xf3c8, 0xf5a9, 0xf327, 0xf553, 0xf327, 0xf553, 0xf283, 0xf4fa, 0xf283, 0xf4fa, +0xf283, 0xf4fa, 0xf230, 0xf4f1, 0xf230, 0xf4f1, 0xf17e, 0xf483, 0xf17e, 0xf483, 0xf0a2, +0xf3e4, 0xf0a2, 0xf3e4, 0xefd0, 0xf345, 0xefd0, 0xf345, 0xee2c, 0xf1ca, 0xee2c, 0xf1ca, +0xee2c, 0xf1ca, 0xee3b, 0xf1f2, 0xee3b, 0xf1f2, 0xede4, 0xf1a7, 0xede4, 0xf1a7, 0xede9, +0xf1a7, 0xede9, 0xf1a7, 0xee5d, 0xf207, 0xee5d, 0xf207, 0xeeb8, 0xf23e, 0xeeb8, 0xf23e, +0xf080, 0xf3d5, 0xf080, 0xf3d5, 0xf080, 0xf3d5, 0xf1a4, 0xf4ba, 0xf1a4, 0xf4ba, 0xf3a9, +0xf673, 0xf3a9, 0xf673, 0xf5c9, 0xf83f, 0xf5c9, 0xf83f, 0xf7c8, 0xf9e2, 0xf7c8, 0xf9e2, +0xfaf7, 0xfcb1, 0xfaf7, 0xfcb1, 0xfe19, 0xff6f, 0xfe19, 0xff6f, 0xfe19, 0xff6f, 0x134, +0x228, 0x134, 0x228, 0x40a, 0x49d, 0x40a, 0x49d, 0x6ff, 0x735, 0x6ff, 0x735, +0x92e, 0x90e, 0x92e, 0x90e, 0xa7d, 0xa0d, 0xa7d, 0xa0d, 0xa7d, 0xa0d, 0xc40, +0xb89, 0xc40, 0xb89, 0xde8, 0xcf1, 0xde8, 0xcf1, 0xf8a, 0xe5d, 0xf8a, 0xe5d, +0x109f, 0xf43, 0x109f, 0xf43, 0x120f, 0x108c, 0x120f, 0x108c, 0x1350, 0x11ae, 0x1350, +0x11ae, 0x1350, 0x11ae, 0x1454, 0x1297, 0x1454, 0x1297, 0x157b, 0x13a8, 0x157b, 0x13a8, +0x15ab, 0x13c5, 0x15ab, 0x13c5, 0x15da, 0x13e3, 0x15da, 0x13e3, 0x1556, 0x134e, 0x1556, +0x134e, 0x14dd, 0x12c4, 0x14dd, 0x12c4, 0x14dd, 0x12c4, 0x14bf, 0x1294, 0x14bf, 0x1294, +0x141b, 0x11dd, 0x141b, 0x11dd, 0x1361, 0x110f, 0x1361, 0x110f, 0x12ae, 0x1047, 0x12ae, +0x1047, 0x124f, 0xfd3, 0x124f, 0xfd3, 0x124f, 0xfd3, 0x128d, 0xffd, 0x128d, 0xffd, +0x1269, 0xfc6, 0x1269, 0xfc6, 0x125b, 0xfa9, 0x125b, 0xfa9, 0x11d0, 0xf14, 0x11d0, +0xf14, 0x10ce, 0xe0e, 0x10ce, 0xe0e, 0xf7c, 0xcc0, 0xf7c, 0xcc0, 0xf7c, 0xcc0, +0xe47, 0xb98, 0xe47, 0xb98, 0xd00, 0xa68, 0xd00, 0xa68, 0xae0, 0x869, 0xae0, +0x869, 0x9a0, 0x755, 0x9a0, 0x755, 0x7b4, 0x5a1, 0x7b4, 0x5a1, 0x561, 0x38f, +0x561, 0x38f, 0x561, 0x38f, 0x279, 0xf3, 0x279, 0xf3, 0xff6b, 0xfe3a, 0xff6b, +0xfe3a, 0xfc65, 0xfb90, 0xfc65, 0xfb90, 0xf93b, 0xf8c8, 0xf93b, 0xf8c8, 0xf620, 0xf612, +0xf620, 0xf612, 0xf620, 0xf612, 0xf280, 0xf2d9, 0xf280, 0xf2d9, 0xef18, 0xefd8, 0xef18, +0xefd8, 0xec79, 0xed9d, 0xec79, 0xed9d, 0xe99e, 0xeb21, 0xe99e, 0xeb21, 0xe730, 0xe90d, +0xe730, 0xe90d, 0xe573, 0xe7a2, 0xe573, 0xe7a2, 0xe573, 0xe7a2, 0xe3b5, 0xe62d, 0xe3b5, +0xe62d, 0xe2ba, 0xe572, 0xe2ba, 0xe572, 0xe187, 0xe474, 0xe187, 0xe474, 0xe161, 0xe47a, +0xe161, 0xe47a, 0xe0b5, 0xe3f0, 0xe0b5, 0xe3f0, 0xe0cf, 0xe423, 0xe0cf, 0xe423, 0xe0cf, +0xe423, 0xe134, 0xe498, 0xe134, 0xe498, 0xe170, 0xe4de, 0xe170, 0xe4de, 0xe25f, 0xe5cf, +0xe25f, 0xe5cf, 0xe347, 0xe6b5, 0xe347, 0xe6b5, 0xe4d4, 0xe83c, 0xe4d4, 0xe83c, 0xe4d4, +0xe83c, 0xe5d9, 0xe938, 0xe5d9, 0xe938, 0xe788, 0xeadc, 0xe788, 0xeadc, 0xe95c, 0xeca4, +0xe95c, 0xeca4, 0xea68, 0xeda3, 0xea68, 0xeda3, 0xeb48, 0xee74, 0xeb48, 0xee74, 0xec83, +0xef9f, 0xec83, 0xef9f, 0xec83, 0xef9f, 0xedd5, 0xf0df, 0xedd5, 0xf0df, 0xeec0, 0xf1b5, +0xeec0, 0xf1b5, 0xef51, 0xf22e, 0xef51, 0xf22e, 0xf0a4, 0xf363, 0xf0a4, 0xf363, 0xf184, +0xf41f, 0xf184, 0xf41f, 0xf339, 0xf5a8, 0xf339, 0xf5a8, 0xf339, 0xf5a8, 0xf44c, 0xf687, +0xf44c, 0xf687, 0xf5d1, 0xf7ce, 0xf5d1, 0xf7ce, 0xf7d9, 0xf98d, 0xf7d9, 0xf98d, 0xf970, +0xfad1, 0xf970, 0xfad1, 0xfc5e, 0xfd62, 0xfc5e, 0xfd62, 0xfc5e, 0xfd62, 0xfe88, 0xff25, +0xfe88, 0xff25, 0x1bc, 0x1e8, 0x1bc, 0x1e8, 0x460, 0x413, 0x460, 0x413, 0x77a, +0x6ae, 0x77a, 0x6ae, 0xad7, 0x988, 0xad7, 0x988, 0xde4, 0xc0f, 0xde4, 0xc0f, +0xde4, 0xc0f, 0x1126, 0xecd, 0x1126, 0xecd, 0x145c, 0x1182, 0x145c, 0x1182, 0x1729, +0x13d5, 0x1729, 0x13d5, 0x1914, 0x154e, 0x1914, 0x154e, 0x1a98, 0x166c, 0x1a98, 0x166c, +0x1a98, 0x166c, 0x1beb, 0x1766, 0x1beb, 0x1766, 0x1ce1, 0x1813, 0x1ce1, 0x1813, 0x1e08, +0x1901, 0x1e08, 0x1901, 0x1f34, 0x1a07, 0x1f34, 0x1a07, 0x1ffa, 0x1ab8, 0x1ffa, 0x1ab8, +0x20a8, 0x1b62, 0x20a8, 0x1b62, 0x20a8, 0x1b62, 0x206c, 0x1b35, 0x206c, 0x1b35, 0x20d2, +0x1bb8, 0x20d2, 0x1bb8, 0x2000, 0x1b12, 0x2000, 0x1b12, 0x1fb1, 0x1afb, 0x1fb1, 0x1afb, +0x1edb, 0x1a68, 0x1edb, 0x1a68, 0x1d6c, 0x1943, 0x1d6c, 0x1943, 0x1d6c, 0x1943, 0x1bde, +0x1804, 0x1bde, 0x1804, 0x1a31, 0x16a8, 0x1a31, 0x16a8, 0x1803, 0x14cd, 0x1803, 0x14cd, +0x14ea, 0x1205, 0x14ea, 0x1205, 0x1261, 0xfc9, 0x1261, 0xfc9, 0x1261, 0xfc9, 0xf92, +0xd43, 0xf92, 0xd43, 0xd02, 0xaf5, 0xd02, 0xaf5, 0xa3f, 0x86e, 0xa3f, 0x86e, +0x81f, 0x683, 0x81f, 0x683, 0x5b7, 0x44a, 0x5b7, 0x44a, 0x3e3, 0x29e, 0x3e3, +0x29e, 0x3e3, 0x29e, 0x250, 0x130, 0x250, 0x130, 0x117, 0x18, 0x117, 0x18, +0xff7c, 0xfe9b, 0xff7c, 0xfe9b, 0xff0f, 0xfe4b, 0xff0f, 0xfe4b, 0xfe30, 0xfd8a, 0xfe30, +0xfd8a, 0xfdda, 0xfd52, 0xfdda, 0xfd52, 0xfdda, 0xfd52, 0xfe4b, 0xfde5, 0xfe4b, 0xfde5, +0xfdd6, 0xfd96, 0xfdd6, 0xfd96, 0xfd44, 0xfd2d, 0xfd44, 0xfd2d, 0xfc02, 0xfc17, 0xfc02, +0xfc17, 0xfbaf, 0xfbf4, 0xfbaf, 0xfbf4, 0xfbaf, 0xfbf4, 0xfa90, 0xfb09, 0xfa90, 0xfb09, +0xf9bd, 0xfa6b, 0xf9bd, 0xfa6b, 0xf84e, 0xf932, 0xf84e, 0xf932, 0xf761, 0xf87b, 0xf761, +0xf87b, 0xf5f7, 0xf745, 0xf5f7, 0xf745, 0xf5b9, 0xf736, 0xf5b9, 0xf736, 0xf5b9, 0xf736, +0xf54c, 0xf6f4, 0xf54c, 0xf6f4, 0xf46b, 0xf636, 0xf46b, 0xf636, 0xf3fd, 0xf5e3, 0xf3fd, +0xf5e3, 0xf398, 0xf590, 0xf398, 0xf590, 0xf380, 0xf580, 0xf380, 0xf580, 0xf350, 0xf54e, +0xf350, 0xf54e, 0xf350, 0xf54e, 0xf40e, 0xf601, 0xf40e, 0xf601, 0xf45e, 0xf63c, 0xf45e, +0xf63c, 0xf59d, 0xf75e, 0xf59d, 0xf75e, 0xf6ec, 0xf889, 0xf6ec, 0xf889, 0xf927, 0xfa9c, +0xf927, 0xfa9c, 0xf927, 0xfa9c, 0xfab9, 0xfc03, 0xfab9, 0xfc03, 0xfd08, 0xfe26, 0xfd08, +0xfe26, 0xfedc, 0xffcf, 0xfedc, 0xffcf, 0x49, 0x116, 0x49, 0x116, 0x16c, 0x218, +0x16c, 0x218, 0x264, 0x2f8, 0x264, 0x2f8, 0x264, 0x2f8, 0x2d4, 0x359, 0x2d4, +0x359, 0x364, 0x3e5, 0x364, 0x3e5, 0x3ca, 0x451, 0x3ca, 0x451, 0x36c, 0x405, +0x36c, 0x405, 0x357, 0x40e, 0x357, 0x40e, 0x21d, 0x2fc, 0x21d, 0x2fc, 0x21d, +0x2fc, 0x16c, 0x27d, 0x16c, 0x27d, 0xff04, 0x4d, 0xff04, 0x4d, 0xfd2e, 0xfeb6, +0xfd2e, 0xfeb6, 0xfab9, 0xfc83, 0xfab9, 0xfc83, 0xf869, 0xfa76, 0xf869, 0xfa76, 0xf869, +0xfa76, 0xf5e6, 0xf833, 0xf5e6, 0xf833, 0xf45a, 0xf6e2, 0xf45a, 0xf6e2, 0xf24d, 0xf50b, +0xf24d, 0xf50b, 0xf007, 0xf2f1, 0xf007, 0xf2f1, 0xee89, 0xf193, 0xee89, 0xf193, 0xecdb, +0xeffb, 0xecdb, 0xeffb, 0xecdb, 0xeffb, 0xec17, 0xef3e, 0xec17, 0xef3e, 0xeb32, 0xee53, +0xeb32, 0xee53, 0xeb27, 0xee34, 0xeb27, 0xee34, 0xeaef, 0xedda, 0xeaef, 0xedda, 0xebf6, +0xeeb3, 0xebf6, 0xeeb3, 0xecdd, 0xef60, 0xecdd, 0xef60, 0xecdd, 0xef60, 0xee50, 0xf08f, +0xee50, 0xf08f, 0xef3c, 0xf131, 0xef3c, 0xf131, 0xf1d8, 0xf37c, 0xf1d8, 0xf37c, 0xf410, +0xf560, 0xf410, 0xf560, 0xf6c3, 0xf7bd, 0xf6c3, 0xf7bd, 0xf6c3, 0xf7bd, 0xf9c5, 0xfa69, +0xf9c5, 0xfa69, 0xfc6a, 0xfcbb, 0xfc6a, 0xfcbb, 0xfeb6, 0xfeb9, 0xfeb6, 0xfeb9, 0x82, +0x3c, 0x82, 0x3c, 0x2f2, 0x268, 0x2f2, 0x268, 0x489, 0x3c2, 0x489, 0x3c2, +0x489, 0x3c2, 0x6f0, 0x5f3, 0x6f0, 0x5f3, 0x860, 0x733, 0x860, 0x733, 0xa49, +0x8f5, 0xa49, 0x8f5, 0xb34, 0x9bd, 0xb34, 0x9bd, 0xcd7, 0xb43, 0xcd7, 0xb43, +0xdb4, 0xc06, 0xdb4, 0xc06, 0xdb4, 0xc06, 0xe66, 0xca2, 0xe66, 0xca2, 0xf1a, +0xd43, 0xf1a, 0xd43, 0xff3, 0xe09, 0xff3, 0xe09, 0x1025, 0xe2a, 0x1025, 0xe2a, +0x105e, 0xe52, 0x105e, 0xe52, 0x105e, 0xe52, 0x1027, 0xe0b, 0x1027, 0xe0b, 0xf3d, +0xd10, 0xf3d, 0xd10, 0xf6d, 0xd2f, 0xf6d, 0xd2f, 0xf00, 0xcb3, 0xf00, 0xcb3, +0xec0, 0xc65, 0xec0, 0xc65, 0xe96, 0xc31, 0xe96, 0xc31, 0xe96, 0xc31, 0xf2f, +0xcc3, 0xf2f, 0xcc3, 0xe1a, 0xbaa, 0xe1a, 0xbaa, 0xe3f, 0xbd3, 0xe3f, 0xbd3, +0xd39, 0xad8, 0xd39, 0xad8, 0xc79, 0xa29, 0xc79, 0xa29, 0xacc, 0x897, 0xacc, +0x897, 0xacc, 0x897, 0x97c, 0x76a, 0x97c, 0x76a, 0x899, 0x6b3, 0x899, 0x6b3, +0x6a6, 0x4f5, 0x6a6, 0x4f5, 0x500, 0x38c, 0x500, 0x38c, 0x30a, 0x1db, 0x30a, +0x1db, 0x30a, 0x1db, 0x11e, 0x3a, 0x11e, 0x3a, 0xfe7b, 0xfde6, 0xfe7b, 0xfde6, +0xfd08, 0xfcc7, 0xfd08, 0xfcc7, 0xfae6, 0xfafb, 0xfae6, 0xfafb, 0xf92b, 0xf995, 0xf92b, +0xf995, 0xf684, 0xf742, 0xf684, 0xf742, 0xf684, 0xf742, 0xf4c0, 0xf5ce, 0xf4c0, 0xf5ce, +0xf266, 0xf3c0, 0xf266, 0xf3c0, 0xf0f3, 0xf294, 0xf0f3, 0xf294, 0xef02, 0xf0e2, 0xef02, +0xf0e2, 0xee75, 0xf08d, 0xee75, 0xf08d, 0xed9e, 0xefe5, 0xed9e, 0xefe5, 0xed9e, 0xefe5, +0xec8a, 0xeefa, 0xec8a, 0xeefa, 0xec14, 0xeea3, 0xec14, 0xeea3, 0xead7, 0xed7f, 0xead7, +0xed7f, 0xeab6, 0xed70, 0xeab6, 0xed70, 0xe957, 0xec1e, 0xe957, 0xec1e, 0xe957, 0xec1e, +0xe9a2, 0xec70, 0xe9a2, 0xec70, 0xe8fb, 0xebcd, 0xe8fb, 0xebcd, 0xea3f, 0xed13, 0xea3f, +0xed13, 0xea7f, 0xed54, 0xea7f, 0xed54, 0xebef, 0xeec2, 0xebef, 0xeec2, 0xecff, 0xefd1, +0xecff, 0xefd1, 0xecff, 0xefd1, 0xedfb, 0xf0cb, 0xedfb, 0xf0cb, 0xef74, 0xf242, 0xef74, +0xf242, 0xf023, 0xf2ee, 0xf023, 0xf2ee, 0xf125, 0xf3ec, 0xf125, 0xf3ec, 0xf14a, 0xf40b, +0xf14a, 0xf40b, 0xf14a, 0xf40b, 0xf21d, 0xf4d4, 0xf21d, 0xf4d4, 0xf254, 0xf4fd, 0xf254, +0xf4fd, 0xf35b, 0xf5f0, 0xf35b, 0xf5f0, 0xf3e8, 0xf663, 0xf3e8, 0xf663, 0xf51c, 0xf772, +0xf51c, 0xf772, 0xf531, 0xf75a, 0xf531, 0xf75a, 0xf531, 0xf75a, 0xf684, 0xf874, 0xf684, +0xf874, 0xf7a3, 0xf950, 0xf7a3, 0xf950, 0xf835, 0xf993, 0xf835, 0xf993, 0xf91e, 0xfa21, +0xf91e, 0xfa21, 0xfc73, 0xfd0f, 0xfc73, 0xfd0f, 0xfe84, 0xfeb2, 0xfe84, 0xfeb2, 0xfe84, +0xfeb2, 0xfff7, 0xffac, 0xfff7, 0xffac, 0x39d, 0x2d4, 0x39d, 0x2d4, 0x69b, 0x550, +0x69b, 0x550, 0xb5b, 0x98b, 0xb5b, 0x98b, 0xe0a, 0xbb6, 0xe0a, 0xbb6, 0xe0a, +0xbb6, 0x10c5, 0xdf2, 0x10c5, 0xdf2, 0x14de, 0x1192, 0x14de, 0x1192, 0x16cf, 0x1313, +0x16cf, 0x1313, 0x1916, 0x14f6, 0x1916, 0x14f6, 0x1cb0, 0x1839, 0x1cb0, 0x1839, 0x1db6, +0x18f9, 0x1db6, 0x18f9, 0x1db6, 0x18f9, 0x1f3f, 0x1a4c, 0x1f3f, 0x1a4c, 0x21a8, 0x1c91, +0x21a8, 0x1c91, 0x22f9, 0x1dd1, 0x22f9, 0x1dd1, 0x2268, 0x1d40, 0x2268, 0x1d40, 0x23bc, +0x1ea6, 0x23bc, 0x1ea6, 0x21c4, 0x1cd0, 0x21c4, 0x1cd0, 0x21c4, 0x1cd0, 0x2149, 0x1c85, +0x2149, 0x1c85, 0x2100, 0x1c79, 0x2100, 0x1c79, 0x1f01, 0x1ac1, 0x1f01, 0x1ac1, 0x1f76, +0x1b84, 0x1f76, 0x1b84, 0x1c98, 0x18f9, 0x1c98, 0x18f9, 0x1c98, 0x18f9, 0x1cc9, 0x1980, +0x1cc9, 0x1980, 0x19c6, 0x16d3, 0x19c6, 0x16d3, 0x174b, 0x14ac, 0x174b, 0x14ac, 0x1543, +0x12f4, 0x1543, 0x12f4, 0x1360, 0x115b, 0x1360, 0x115b, 0x10f9, 0xf38, 0x10f9, 0xf38, +0x10f9, 0xf38, 0xeaf, 0xd2a, 0xeaf, 0xd2a, 0xcf4, 0xba4, 0xcf4, 0xba4, 0xaa0, +0x97d, 0xaa0, 0x97d, 0xa41, 0x945, 0xa41, 0x945, 0x843, 0x768, 0x843, 0x768, +0x6e4, 0x626, 0x6e4, 0x626, 0x6e4, 0x626, 0x5e4, 0x53e, 0x5e4, 0x53e, 0x562, +0x4d2, 0x562, 0x4d2, 0x41c, 0x3a3, 0x41c, 0x3a3, 0x37f, 0x31d, 0x37f, 0x31d, +0x25e, 0x215, 0x25e, 0x215, 0x25e, 0x215, 0x298, 0x26b, 0x298, 0x26b, 0xa4, +0x98, 0xa4, 0x98, 0xffb2, 0xffca, 0xffb2, 0xffca, 0xff05, 0xff47, 0xff05, 0xff47, +0xfd72, 0xfde1, 0xfd72, 0xfde1, 0xfcfc, 0xfd9c, 0xfcfc, 0xfd9c, 0xfcfc, 0xfd9c, 0xf9ae, +0xfa81, 0xf9ae, 0xfa81, 0xf6f7, 0xf7ff, 0xf6f7, 0xf7ff, 0xf847, 0xf984, 0xf847, 0xf984, +0xf820, 0xf992, 0xf820, 0xf992, 0xf546, 0xf6e8, 0xf546, 0xf6e8, 0xf591, 0xf760, 0xf591, +0xf760, 0xf591, 0xf760, 0xf53d, 0xf733, 0xf53d, 0xf733, 0xf561, 0xf777, 0xf561, 0xf777, +0xf50c, 0xf73a, 0xf50c, 0xf73a, 0xf508, 0xf746, 0xf508, 0xf746, 0xf2f2, 0xf537, 0xf2f2, +0xf537, 0xf2f2, 0xf537, 0xf36f, 0xf5b3, 0xf36f, 0xf5b3, 0xf35e, 0xf599, 0xf35e, 0xf599, +0xf507, 0xf731, 0xf507, 0xf731, 0xf76d, 0xf981, 0xf76d, 0xf981, 0xf5ed, 0xf7e6, 0xf5ed, +0xf7e6, 0xf97f, 0xfb5b, 0xf97f, 0xfb5b, 0xf97f, 0xfb5b, 0xfa3b, 0xfbf8, 0xfa3b, 0xfbf8, +0xfaca, 0xfc6a, 0xfaca, 0xfc6a, 0xfb8b, 0xfd11, 0xfb8b, 0xfd11, 0xfac2, 0xfc31, 0xfac2, +0xfc31, 0xfb15, 0xfc74, 0xfb15, 0xfc74, 0xfb2d, 0xfc82, 0xfb2d, 0xfc82, 0xfb2d, 0xfc82, +0xfc1a, 0xfd6d, 0xfc1a, 0xfd6d, 0xfcb8, 0xfe12, 0xfcb8, 0xfe12, 0xfc58, 0xfdc1, 0xfc58, +0xfdc1, 0xfc55, 0xfdd5, 0xfc55, 0xfdd5, 0xf9fc, 0xfb99, 0xf9fc, 0xfb99, 0xf9fc, 0xfb99, +0xfa72, 0xfc34, 0xfa72, 0xfc34, 0xf9bc, 0xfba6, 0xf9bc, 0xfba6, 0xf721, 0xf936, 0xf721, +0xf936, 0xf583, 0xf7c4, 0xf583, 0xf7c4, 0xf46c, 0xf6d6, 0xf46c, 0xf6d6, 0xf4b3, 0xf743, +0xf4b3, 0xf743, 0xf4b3, 0xf743, 0xf257, 0xf507, 0xf257, 0xf507, 0xf18c, 0xf454, 0xf18c, +0xf454, 0xf014, 0xf2eb, 0xf014, 0xf2eb, 0xf011, 0xf2ec, 0xf011, 0xf2ec, 0xef31, 0xf203, +0xef31, 0xf203, 0xeda2, 0xf05f, 0xeda2, 0xf05f, 0xeda2, 0xf05f, 0xedd4, 0xf06f, 0xedd4, +0xf06f, 0xeeb2, 0xf11f, 0xeeb2, 0xf11f, 0xf041, 0xf274, 0xf041, 0xf274, 0xf1f8, 0xf3e7, +0xf1f8, 0xf3e7, 0xf231, 0xf3d3, 0xf231, 0xf3d3, 0xf231, 0xf3d3, 0xf4c1, 0xf60d, 0xf4c1, +0xf60d, 0xf64e, 0xf740, 0xf64e, 0xf740, 0xf8cf, 0xf963, 0xf8cf, 0xf963, 0xfcfd, 0xfd32, +0xfcfd, 0xfd32, 0xfde2, 0xfdb9, 0xfde2, 0xfdb9, 0x238, 0x1b4, 0x238, 0x1b4, 0x238, +0x1b4, 0x296, 0x1bb, 0x296, 0x1bb, 0x594, 0x467, 0x594, 0x467, 0x851, 0x6db, +0x851, 0x6db, 0xa07, 0x84e, 0xa07, 0x84e, 0xc46, 0xa54, 0xc46, 0xa54, 0xd47, +0xb24, 0xd47, 0xb24, 0xd47, 0xb24, 0x1056, 0xe0b, 0x1056, 0xe0b, 0x10ae, 0xe43, +0x10ae, 0xe43, 0x1186, 0xf03, 0x1186, 0xf03, 0x128e, 0xffa, 0x128e, 0xffa, 0x1254, +0xfb3, 0x1254, 0xfb3, 0x1254, 0xfb3, 0x129a, 0xff3, 0x129a, 0xff3, 0x12a0, 0xff5, +0x12a0, 0xff5, 0x1315, 0x1069, 0x1315, 0x1069, 0x1316, 0x106c, 0x1316, 0x106c, 0x1179, +0xed3, 0x1179, 0xed3, 0x122d, 0xf8b, 0x122d, 0xf8b, 0x122d, 0xf8b, 0x1103, 0xe66, +0x1103, 0xe66, 0x1236, 0xfa0, 0x1236, 0xfa0, 0x11f7, 0xf6a, 0x11f7, 0xf6a, 0x1167, +0xee3, 0x1167, 0xee3, 0x124d, 0xfd5, 0x124d, 0xfd5, 0x1271, 0x1009, 0x1271, 0x1009, +0x1271, 0x1009, 0x123b, 0xfe7, 0x123b, 0xfe7, 0x102b, 0xdee, 0x102b, 0xdee, 0x105b, +0xe3c, 0x105b, 0xe3c, 0xe57, 0xc5c, 0xe57, 0xc5c, 0xde5, 0xc13, 0xde5, 0xc13, +0xde5, 0xc13, 0xc9c, 0xafc, 0xc9c, 0xafc, 0xa4f, 0x8e6, 0xa4f, 0x8e6, 0x881, +0x755, 0x881, 0x755, 0x558, 0x46f, 0x558, 0x46f, 0x244, 0x1a3, 0x244, 0x1a3, +0xff24, 0xfecf, 0xff24, 0xfecf, 0xff24, 0xfecf, 0xfb34, 0xfb2c, 0xfb34, 0xfb2c, 0xf844, +0xf88c, 0xf844, 0xf88c, 0xf511, 0xf5a8, 0xf511, 0xf5a8, 0xf26f, 0xf353, 0xf26f, 0xf353, +0xef91, 0xf0c0, 0xef91, 0xf0c0, 0xef91, 0xf0c0, 0xec3c, 0xedb0, 0xec3c, 0xedb0, 0xeb6a, +0xed1e, 0xeb6a, 0xed1e, 0xe9e1, 0xebce, 0xe9e1, 0xebce, 0xe883, 0xeaa2, 0xe883, 0xeaa2, +0xe6a2, 0xe8eb, 0xe6a2, 0xe8eb, 0xe5e4, 0xe84f, 0xe5e4, 0xe84f, 0xe5e4, 0xe84f, 0xe4e8, +0xe76d, 0xe4e8, 0xe76d, 0xe457, 0xe6ef, 0xe457, 0xe6ef, 0xe43d, 0xe6e1, 0xe43d, 0xe6e1, +0xe4ad, 0xe757, 0xe4ad, 0xe757, 0xe44e, 0xe6f9, 0xe44e, 0xe6f9, 0xe4d9, 0xe781, 0xe4d9, +0xe781, 0xe4d9, 0xe781, 0xe5b1, 0xe854, 0xe5b1, 0xe854, 0xe747, 0xe9e2, 0xe747, 0xe9e2, +0xe9a0, 0xec33, 0xe9a0, 0xec33, 0xe958, 0xebe3, 0xe958, 0xebe3, 0xeae0, 0xed63, 0xeae0, +0xed63, 0xeae0, 0xed63, 0xec67, 0xeee3, 0xec67, 0xeee3, 0xedeb, 0xf060, 0xedeb, 0xf060, +0xee13, 0xf080, 0xee13, 0xf080, 0xee7d, 0xf0e4, 0xee7d, 0xf0e4, 0xef0f, 0xf16d, 0xef0f, +0xf16d, 0xef7c, 0xf1ce, 0xef7c, 0xf1ce, 0xef7c, 0xf1ce, 0xefd2, 0xf215, 0xefd2, 0xf215, +0xf0c5, 0xf2f5, 0xf0c5, 0xf2f5, 0xf1aa, 0xf3bf, 0xf1aa, 0xf3bf, 0xf22b, 0xf41d, 0xf22b, +0xf41d, 0xf35d, 0xf525, 0xf35d, 0xf525, 0xf4d2, 0xf665, 0xf4d2, 0xf665, 0xf4d2, 0xf665, +0xf64d, 0xf7a1, 0xf64d, 0xf7a1, 0xf84a, 0xf955, 0xf84a, 0xf955, 0xfa90, 0xfb48, 0xfa90, +0xfb48, 0xfc9b, 0xfcf6, 0xfc9b, 0xfcf6, 0xffa9, 0xff9e, 0xffa9, 0xff9e, 0xffa9, 0xff9e, +0x1ab, 0x133, 0x1ab, 0x133, 0x5c1, 0x4d6, 0x5c1, 0x4d6, 0x939, 0x7d9, 0x939, +0x7d9, 0xc48, 0xa71, 0xc48, 0xa71, 0xecd, 0xc82, 0xecd, 0xc82, 0x1229, 0xf6c, +0x1229, 0xf6c, 0x1229, 0xf6c, 0x155d, 0x1238, 0x155d, 0x1238, 0x1832, 0x14ac, 0x1832, +0x14ac, 0x1b09, 0x172e, 0x1b09, 0x172e, 0x1bc8, 0x17a6, 0x1bc8, 0x17a6, 0x1cd1, 0x1877, +0x1cd1, 0x1877, 0x1e6d, 0x19eb, 0x1e6d, 0x19eb, 0x1e6d, 0x19eb, 0x2083, 0x1beb, 0x2083, +0x1beb, 0x210d, 0x1c6f, 0x210d, 0x1c6f, 0x2230, 0x1d9e, 0x2230, 0x1d9e, 0x21d7, 0x1d5f, +0x21d7, 0x1d5f, 0x21d4, 0x1d85, 0x21d4, 0x1d85, 0x21d4, 0x1d85, 0x20ae, 0x1c94, 0x20ae, +0x1c94, 0x1f66, 0x1b8b, 0x1f66, 0x1b8b, 0x1de6, 0x1a52, 0x1de6, 0x1a52, 0x1c40, 0x18fa, +0x1c40, 0x18fa, 0x1b41, 0x1849, 0x1b41, 0x1849, 0x193f, 0x1697, 0x193f, 0x1697, 0x193f, +0x1697, 0x172d, 0x14d2, 0x172d, 0x14d2, 0x13d0, 0x11bf, 0x13d0, 0x11bf, 0x11c8, 0xffa, +0x11c8, 0xffa, 0xf78, 0xde6, 0xf78, 0xde6, 0xd83, 0xc26, 0xd83, 0xc26, 0xafa, +0x9c8, 0xafa, 0x9c8, 0xafa, 0x9c8, 0x949, 0x83a, 0x949, 0x83a, 0x873, 0x780, +0x873, 0x780, 0x719, 0x63a, 0x719, 0x63a, 0x67c, 0x5ac, 0x67c, 0x5ac, 0x55e, +0x498, 0x55e, 0x498, 0x55e, 0x498, 0x501, 0x443, 0x501, 0x443, 0x5ac, 0x4f6, +0x5ac, 0x4f6, 0x4f2, 0x444, 0x4f2, 0x444, 0x505, 0x461, 0x505, 0x461, 0x510, +0x47b, 0x510, 0x47b, 0x4a8, 0x428, 0x4a8, 0x428, 0x4a8, 0x428, 0x331, 0x2cc, +0x331, 0x2cc, 0x171, 0x12c, 0x171, 0x12c, 0x12e, 0x111, 0x12e, 0x111, 0xff9f, +0xffb0, 0xff9f, 0xffb0, 0xfe38, 0xfe7e, 0xfe38, 0xfe7e, 0xfc50, 0xfccd, 0xfc50, 0xfccd, +0xfc50, 0xfccd, 0xfc6f, 0xfd28, 0xfc6f, 0xfd28, 0xfba0, 0xfc97, 0xfba0, 0xfc97, 0xfa58, +0xfb8c, 0xfa58, 0xfb8c, 0xf916, 0xfa86, 0xf916, 0xfa86, 0xf85e, 0xfa06, 0xf85e, 0xfa06, +0xf85e, 0xfa06, 0xf818, 0xf9f3, 0xf818, 0xf9f3, 0xf668, 0xf86f, 0xf668, 0xf86f, 0xf5a5, +0xf7d2, 0xf5a5, 0xf7d2, 0xf4cf, 0xf718, 0xf4cf, 0xf718, 0xf4fe, 0xf75b, 0xf4fe, 0xf75b, +0xf54f, 0xf7b6, 0xf54f, 0xf7b6, 0xf54f, 0xf7b6, 0xf766, 0xf9d0, 0xf766, 0xf9d0, 0xf8de, +0xfb42, 0xf8de, 0xfb42, 0xf8aa, 0xfb02, 0xf8aa, 0xfb02, 0xf97b, 0xfbc1, 0xf97b, 0xfbc1, +0xfb92, 0xfdc4, 0xfb92, 0xfdc4, 0xfc65, 0xfe80, 0xfc65, 0xfe80, 0xfc65, 0xfe80, 0xfb9b, +0xfda0, 0xfb9b, 0xfda0, 0xfb32, 0xfd22, 0xfb32, 0xfd22, 0xfc4e, 0xfe2d, 0xfc4e, 0xfe2d, +0xfcd0, 0xfea3, 0xfcd0, 0xfea3, 0xfbdc, 0xfda8, 0xfbdc, 0xfda8, 0xfbdc, 0xfda8, 0xfbe1, +0xfdae, 0xfbe1, 0xfdae, 0xfb37, 0xfd0c, 0xfb37, 0xfd0c, 0xf977, 0xfb5b, 0xf977, 0xfb5b, +0xf7dd, 0xf9d7, 0xf7dd, 0xf9d7, 0xf6e0, 0xf8f7, 0xf6e0, 0xf8f7, 0xf60b, 0xf843, 0xf60b, +0xf843, 0xf60b, 0xf843, 0xf3d3, 0xf62f, 0xf3d3, 0xf62f, 0xf0cd, 0xf34e, 0xf0cd, 0xf34e, +0xf050, 0xf2f7, 0xf050, 0xf2f7, 0xefc6, 0xf290, 0xefc6, 0xf290, 0xee85, 0xf16c, 0xee85, +0xf16c, 0xecc3, 0xefc1, 0xecc3, 0xefc1, 0xecc3, 0xefc1, 0xec71, 0xef7e, 0xec71, 0xef7e, +0xec29, 0xef3b, 0xec29, 0xef3b, 0xea82, 0xed8c, 0xea82, 0xed8c, 0xeaa4, 0xed9b, 0xeaa4, +0xed9b, 0xea0d, 0xece3, 0xea0d, 0xece3, 0xea0d, 0xece3, 0xe95b, 0xec06, 0xe95b, 0xec06, +0xea90, 0xed01, 0xea90, 0xed01, 0xeccc, 0xeef9, 0xeccc, 0xeef9, 0xee30, 0xf00e, 0xee30, +0xf00e, 0xeeb7, 0xf03d, 0xeeb7, 0xf03d, 0xf0a7, 0xf1cf, 0xf0a7, 0xf1cf, 0xf0a7, 0xf1cf, +0xf50b, 0xf5d1, 0xf50b, 0xf5d1, 0xf734, 0xf794, 0xf734, 0xf794, 0xf9ab, 0xf9a5, 0xf9ab, +0xf9a5, 0xfdb5, 0xfd4a, 0xfdb5, 0xfd4a, 0xdc, 0x10, 0xdc, 0x10, 0x309, 0x1e0, +0x309, 0x1e0, 0x309, 0x1e0, 0x4e1, 0x362, 0x4e1, 0x362, 0x7f0, 0x622, 0x7f0, +0x622, 0x94c, 0x737, 0x94c, 0x737, 0xae1, 0x890, 0xae1, 0x890, 0xccf, 0xa49, +0xccf, 0xa49, 0xccf, 0xa49, 0xe47, 0xb96, 0xe47, 0xb96, 0xee3, 0xc10, 0xee3, +0xc10, 0x1031, 0xd43, 0x1031, 0xd43, 0x1241, 0xf40, 0x1241, 0xf40, 0x126e, 0xf5f, +0x126e, 0xf5f, 0x12b0, 0xf9a, 0x12b0, 0xf9a, 0x12b0, 0xf9a, 0x1282, 0xf6a, 0x1282, +0xf6a, 0x13bf, 0x10a8, 0x13bf, 0x10a8, 0x13f4, 0x10e1, 0x13f4, 0x10e1, 0x1229, 0xf1d, +0x1229, 0xf1d, 0x13b4, 0x10b1, 0x13b4, 0x10b1, 0x13b4, 0x10b1, 0x14ad, 0x11b6, 0x14ad, +0x11b6, 0x1509, 0x1221, 0x1509, 0x1221, 0x14ee, 0x1217, 0x14ee, 0x1217, 0x14d4, 0x1213, +0x14d4, 0x1213, 0x15f4, 0x134c, 0x15f4, 0x134c, 0x13b8, 0x112d, 0x13b8, 0x112d, 0x13b8, +0x112d, 0x122a, 0xfc0, 0x122a, 0xfc0, 0x11f8, 0xfb7, 0x11f8, 0xfb7, 0xfed, 0xdd9, +0xfed, 0xdd9, 0xed0, 0xcf0, 0xed0, 0xcf0, 0xdfe, 0xc58, 0xdfe, 0xc58, 0xcc0, +0xb5b, 0xcc0, 0xb5b, 0xcc0, 0xb5b, 0xb1c, 0x9fe, 0xb1c, 0x9fe, 0x7af, 0x6de, +0x7af, 0x6de, 0x619, 0x598, 0x619, 0x598, 0x3f2, 0x3c6, 0x3f2, 0x3c6, 0xffa0, +0xffcb, 0xffa0, 0xffcb, 0xffa0, 0xffcb, 0xfbbb, 0xfc3c, 0xfbbb, 0xfc3c, 0xf977, 0xfa50, +0xf977, 0xfa50, 0xf766, 0xf893, 0xf766, 0xf893, 0xf33b, 0xf4b8, 0xf33b, 0xf4b8, 0xf107, +0xf2d0, 0xf107, 0xf2d0, 0xee17, 0xf025, 0xee17, 0xf025, 0xee17, 0xf025, 0xead5, 0xed21, +0xead5, 0xed21, 0xe86a, 0xeaeb, 0xe86a, 0xeaeb, 0xe759, 0xea07, 0xe759, 0xea07, 0xe6d1, +0xe9a3, 0xe6d1, 0xe9a3, 0xe422, 0xe70e, 0xe422, 0xe70e, 0xe32a, 0xe629, 0xe32a, 0xe629, +0xe32a, 0xe629, 0xe369, 0xe672, 0xe369, 0xe672, 0xe41d, 0xe729, 0xe41d, 0xe729, 0xe31a, +0xe623, 0xe31a, 0xe623, 0xe313, 0xe613, 0xe313, 0xe613, 0xe529, 0xe81c, 0xe529, 0xe81c, +0xe529, 0xe81c, 0xe651, 0xe935, 0xe651, 0xe935, 0xe762, 0xea34, 0xe762, 0xea34, 0xe874, +0xeb33, 0xe874, 0xeb33, 0xe9bd, 0xec6a, 0xe9bd, 0xec6a, 0xe9dc, 0xec75, 0xe9dc, 0xec75, +0xeab9, 0xed3f, 0xeab9, 0xed3f, 0xeab9, 0xed3f, 0xec2e, 0xeea0, 0xec2e, 0xeea0, 0xecf8, +0xef56, 0xecf8, 0xef56, 0xec94, 0xeedd, 0xec94, 0xeedd, 0xed4d, 0xef7e, 0xed4d, 0xef7e, +0xee8d, 0xf0a4, 0xee8d, 0xf0a4, 0xee4d, 0xf045, 0xee4d, 0xf045, 0xee4d, 0xf045, 0xeea9, +0xf07d, 0xeea9, 0xf07d, 0xef0a, 0xf0b3, 0xef0a, 0xf0b3, 0xf0f8, 0xf26e, 0xf0f8, 0xf26e, +0xf255, 0xf391, 0xf255, 0xf391, 0xf388, 0xf480, 0xf388, 0xf480, 0xf388, 0xf480, 0xf54a, +0xf5f5, 0xf54a, 0xf5f5, 0xf7b4, 0xf809, 0xf7b4, 0xf809, 0xf9dd, 0xf9d3, 0xf9dd, 0xf9d3, +0xfc8d, 0xfc1d, 0xfc8d, 0xfc1d, 0x134, 0x58, 0x134, 0x58, 0x45d, 0x310, 0x45d, +0x310, 0x45d, 0x310, 0x78a, 0x5c9, 0x78a, 0x5c9, 0xb1d, 0x8e9, 0xb1d, 0x8e9, +0xf1b, 0xc75, 0xf1b, 0xc75, 0x11a9, 0xe95, 0x11a9, 0xe95, 0x145c, 0x10e3, 0x145c, +0x10e3, 0x1785, 0x13ae, 0x1785, 0x13ae, 0x1785, 0x13ae, 0x1a09, 0x15e1, 0x1a09, 0x15e1, +0x1c60, 0x17f5, 0x1c60, 0x17f5, 0x1e3e, 0x199e, 0x1e3e, 0x199e, 0x20ba, 0x1bf7, 0x20ba, +0x1bf7, 0x21c6, 0x1cf1, 0x21c6, 0x1cf1, 0x21c6, 0x1cf1, 0x221b, 0x1d43, 0x221b, 0x1d43, +0x22be, 0x1df6, 0x22be, 0x1df6, 0x23b2, 0x1f09, 0x23b2, 0x1f09, 0x22e9, 0x1e6e, 0x22e9, +0x1e6e, 0x20da, 0x1c9b, 0x20da, 0x1c9b, 0x2040, 0x1c47, 0x2040, 0x1c47, 0x2040, 0x1c47, +0x2059, 0x1cae, 0x2059, 0x1cae, 0x1f04, 0x1baf, 0x1f04, 0x1baf, 0x1d1a, 0x1a1f, 0x1d1a, +0x1a1f, 0x1bb6, 0x1915, 0x1bb6, 0x1915, 0x1961, 0x1719, 0x1961, 0x1719, 0x173f, 0x154e, +0x173f, 0x154e, 0x173f, 0x154e, 0x1492, 0x12f3, 0x1492, 0x12f3, 0x129f, 0x114b, 0x129f, +0x114b, 0x1002, 0xef0, 0x1002, 0xef0, 0xc0a, 0xb33, 0xc0a, 0xb33, 0xad3, 0xa2e, +0xad3, 0xa2e, 0xad3, 0xa2e, 0x9ff, 0x984, 0x9ff, 0x984, 0x8c6, 0x86b, 0x8c6, +0x86b, 0x6e8, 0x6a7, 0x6e8, 0x6a7, 0x5cb, 0x59d, 0x5cb, 0x59d, 0x57d, 0x55e, +0x57d, 0x55e, 0x528, 0x515, 0x528, 0x515, 0x528, 0x515, 0x4b4, 0x4aa, 0x4b4, +0x4aa, 0x4b0, 0x4af, 0x4b0, 0x4af, 0x457, 0x45e, 0x457, 0x45e, 0x2b4, 0x2c6, +0x2b4, 0x2c6, 0x353, 0x371, 0x353, 0x371, 0x1b5, 0x1e3, 0x1b5, 0x1e3, 0x1b5, +0x1e3, 0xff6d, 0xffae, 0xff6d, 0xffae, 0xfd05, 0xfd5d, 0xfd05, 0xfd5d, 0xfad9, 0xfb4a, +0xfad9, 0xfb4a, 0xfa55, 0xfae1, 0xfa55, 0xfae1, 0xf941, 0xf9ea, 0xf941, 0xf9ea, 0xf941, +0xf9ea, 0xf882, 0xf948, 0xf882, 0xf948, 0xf773, 0xf856, 0xf773, 0xf856, 0xf6b8, 0xf7b5, +0xf6b8, 0xf7b5, 0xf5fb, 0xf710, 0xf5fb, 0xf710, 0xf5ae, 0xf6d8, 0xf5ae, 0xf6d8, 0xf449, +0xf582, 0xf449, 0xf582, 0xf449, 0xf582, 0xf442, 0xf586, 0xf442, 0xf586, 0xf449, 0xf594, +0xf449, 0xf594, 0xf48a, 0xf5d6, 0xf48a, 0xf5d6, 0xf54c, 0xf693, 0xf54c, 0xf693, 0xf604, +0xf742, 0xf604, 0xf742, 0xf856, 0xf989, 0xf856, 0xf989, 0xf856, 0xf989, 0xf99c, 0xfac1, +0xf99c, 0xfac1, 0xfa27, 0xfb3d, 0xfa27, 0xfb3d, 0xfa3a, 0xfb42, 0xfa3a, 0xfb42, 0xfbca, +0xfcc6, 0xfbca, 0xfcc6, 0xfc8d, 0xfd80, 0xfc8d, 0xfd80, 0xfc8d, 0xfd80, 0xfc25, 0xfd13, +0xfc25, 0xfd13, 0xfc4c, 0xfd3c, 0xfc4c, 0xfd3c, 0xfcb6, 0xfdaf, 0xfcb6, 0xfdaf, 0xfc93, +0xfd9b, 0xfc93, 0xfd9b, 0xfbe5, 0xfd04, 0xfbe5, 0xfd04, 0xfb99, 0xfcd6, 0xfb99, 0xfcd6, +0xfb99, 0xfcd6, 0xfaea, 0xfc4c, 0xfaea, 0xfc4c, 0xf9a8, 0xfb35, 0xf9a8, 0xfb35, 0xf804, +0xf9c0, 0xf804, 0xf9c0, 0xf684, 0xf872, 0xf684, 0xf872, 0xf55c, 0xf77d, 0xf55c, 0xf77d, +0xf42d, 0xf680, 0xf42d, 0xf680, 0xf42d, 0xf680, 0xf2f4, 0xf576, 0xf2f4, 0xf576, 0xf25f, +0xf50c, 0xf25f, 0xf50c, 0xf0ee, 0xf3bf, 0xf0ee, 0xf3bf, 0xef42, 0xf22e, 0xef42, 0xf22e, +0xeeb6, 0xf1b4, 0xeeb6, 0xf1b4, 0xeeb6, 0xf1b4, 0xee75, 0xf178, 0xee75, 0xf178, 0xed0f, +0xf00c, 0xed0f, 0xf00c, 0xebb9, 0xeea3, 0xebb9, 0xeea3, 0xebb5, 0xee7f, 0xebb5, 0xee7f, +0xec0b, 0xeea9, 0xec0b, 0xeea9, 0xecfb, 0xef63, 0xecfb, 0xef63, 0xecfb, 0xef63, 0xee10, +0xf036, 0xee10, 0xf036, 0xef39, 0xf115, 0xef39, 0xf115, 0xf17d, 0xf307, 0xf17d, 0xf307, +0xf3f9, 0xf52d, 0xf3f9, 0xf52d, 0xf779, 0xf853, 0xf779, 0xf853, 0xf779, 0xf853, 0xfaaa, +0xfb29, 0xfaaa, 0xfb29, 0xfcec, 0xfd11, 0xfcec, 0xfd11, 0xffac, 0xff79, 0xffac, 0xff79, +0x14c, 0xc6, 0x14c, 0xc6, 0x48c, 0x3b9, 0x48c, 0x3b9, 0x767, 0x64d, 0x767, +0x64d, 0x767, 0x64d, 0x8d7, 0x77d, 0x8d7, 0x77d, 0xaf7, 0x966, 0xaf7, 0x966, +0xc32, 0xa71, 0xc32, 0xa71, 0xe85, 0xc9d, 0xe85, 0xc9d, 0x10a0, 0xe98, 0x10a0, +0xe98, 0x1098, 0xe75, 0x1098, 0xe75, 0x1098, 0xe75, 0x11a6, 0xf70, 0x11a6, 0xf70, +0x12b2, 0x106d, 0x12b2, 0x106d, 0x147d, 0x122e, 0x147d, 0x122e, 0x14d2, 0x127b, 0x14d2, +0x127b, 0x12d8, 0x107c, 0x12d8, 0x107c, 0x12d8, 0x107c, 0x1329, 0x10ca, 0x1329, 0x10ca, +0x1300, 0x109e, 0x1300, 0x109e, 0x137b, 0x1118, 0x137b, 0x1118, 0x1314, 0x10b2, 0x1314, +0x10b2, 0x1207, 0xfa7, 0x1207, 0xfa7, 0x11f4, 0xf96, 0x11f4, 0xf96, 0x11f4, 0xf96, +0x1208, 0xfb0, 0x1208, 0xfb0, 0x1116, 0xec5, 0x1116, 0xec5, 0xf6f, 0xd2b, 0xf6f, +0xd2b, 0xf1c, 0xce8, 0xf1c, 0xce8, 0xeed, 0xccf, 0xeed, 0xccf, 0xf04, 0xd01, +0xf04, 0xd01, 0xf04, 0xd01, 0xdcb, 0xbeb, 0xdcb, 0xbeb, 0xc7e, 0xac7, 0xc7e, +0xac7, 0xa65, 0x8e0, 0xa65, 0x8e0, 0x838, 0x6ea, 0x838, 0x6ea, 0x785, 0x676, +0x785, 0x676, 0x785, 0x676, 0x509, 0x43e, 0x509, 0x43e, 0x166, 0xe6, 0x166, +0xe6, 0xff15, 0xfee2, 0xff15, 0xfee2, 0xfb75, 0xfb93, 0xfb75, 0xfb93, 0xf7b3, 0xf823, +0xf7b3, 0xf823, 0xf4c8, 0xf589, 0xf4c8, 0xf589, 0xf4c8, 0xf589, 0xf259, 0xf36a, 0xf259, +0xf36a, 0xf0f0, 0xf24d, 0xf0f0, 0xf24d, 0xee59, 0xeffd, 0xee59, 0xeffd, 0xeb80, 0xed67, +0xeb80, 0xed67, 0xe98a, 0xebab, 0xe98a, 0xebab, 0xe834, 0xea89, 0xe834, 0xea89, 0xe834, +0xea89, 0xe5fd, 0xe87e, 0xe5fd, 0xe87e, 0xe452, 0xe6f6, 0xe452, 0xe6f6, 0xe40d, 0xe6cd, +0xe40d, 0xe6cd, 0xe539, 0xe80e, 0xe539, 0xe80e, 0xe4c5, 0xe7a9, 0xe4c5, 0xe7a9, 0xe4c5, +0xe7a9, 0xe425, 0xe712, 0xe425, 0xe712, 0xe43f, 0xe730, 0xe43f, 0xe730, 0xe452, 0xe745, +0xe452, 0xe745, 0xe5cd, 0xe8be, 0xe5cd, 0xe8be, 0xe6c5, 0xe9b5, 0xe6c5, 0xe9b5, 0xe844, +0xeb31, 0xe844, 0xeb31, 0xe844, 0xeb31, 0xe910, 0xebfc, 0xe910, 0xebfc, 0xea26, 0xed12, +0xea26, 0xed12, 0xec15, 0xef01, 0xec15, 0xef01, 0xeceb, 0xefd9, 0xeceb, 0xefd9, 0xecd5, +0xefc7, 0xecd5, 0xefc7, 0xedbf, 0xf0b4, 0xedbf, 0xf0b4, 0xedbf, 0xf0b4, 0xee1c, 0xf113, +0xee1c, 0xf113, 0xee95, 0xf18c, 0xee95, 0xf18c, 0xeea2, 0xf195, 0xeea2, 0xf195, 0xeebd, +0xf1a7, 0xeebd, 0xf1a7, 0xefca, 0xf2a5, 0xefca, 0xf2a5, 0xefca, 0xf2a5, 0xef9d, 0xf261, +0xef9d, 0xf261, 0xf131, 0xf3d5, 0xf131, 0xf3d5, 0xf2af, 0xf526, 0xf2af, 0xf526, 0xf38e, +0xf5cf, 0xf38e, 0xf5cf, 0xf4ab, 0xf6a9, 0xf4ab, 0xf6a9, 0xf621, 0xf7d1, 0xf621, 0xf7d1, +0xf621, 0xf7d1, 0xf8f0, 0xfa45, 0xf8f0, 0xfa45, 0xfc0f, 0xfcfd, 0xfc0f, 0xfcfd, 0xff90, +0xf, 0xff90, 0xf, 0x2cc, 0x2d3, 0x2cc, 0x2d3, 0x68d, 0x617, 0x68d, 0x617, +0xb4f, 0xa56, 0xb4f, 0xa56, 0xb4f, 0xa56, 0xeb8, 0xd3b, 0xeb8, 0xd3b, 0x119a, +0xf9a, 0x119a, 0xf9a, 0x1407, 0x1188, 0x1407, 0x1188, 0x16db, 0x13e3, 0x16db, 0x13e3, +0x1a19, 0x16b2, 0x1a19, 0x16b2, 0x1a19, 0x16b2, 0x1d48, 0x197c, 0x1d48, 0x197c, 0x1eaa, +0x1a86, 0x1eaa, 0x1a86, 0x1f32, 0x1ac4, 0x1f32, 0x1ac4, 0x2188, 0x1ce0, 0x2188, 0x1ce0, +0x2233, 0x1d61, 0x2233, 0x1d61, 0x2269, 0x1d7e, 0x2269, 0x1d7e, 0x2269, 0x1d7e, 0x22bb, +0x1dc7, 0x22bb, 0x1dc7, 0x221c, 0x1d2d, 0x221c, 0x1d2d, 0x219b, 0x1cc1, 0x219b, 0x1cc1, +0x214b, 0x1c93, 0x214b, 0x1c93, 0x1f4e, 0x1ac2, 0x1f4e, 0x1ac2, 0x1dfe, 0x19a9, 0x1dfe, +0x19a9, 0x1dfe, 0x19a9, 0x1d77, 0x195f, 0x1d77, 0x195f, 0x1cda, 0x1905, 0x1cda, 0x1905, +0x1b80, 0x17f1, 0x1b80, 0x17f1, 0x18b4, 0x156c, 0x18b4, 0x156c, 0x16d7, 0x13d6, 0x16d7, +0x13d6, 0x16d7, 0x13d6, 0x1506, 0x124a, 0x1506, 0x124a, 0x129b, 0x1022, 0x129b, 0x1022, +0xfd9, 0xd9f, 0xfd9, 0xd9f, 0xde5, 0xbe6, 0xde5, 0xbe6, 0xc0d, 0xa44, 0xc0d, +0xa44, 0xacd, 0x936, 0xacd, 0x936, 0xacd, 0x936, 0x937, 0x7d0, 0x937, 0x7d0, +0x82b, 0x6ef, 0x82b, 0x6ef, 0x7da, 0x6c7, 0x7da, 0x6c7, 0x719, 0x62c, 0x719, +0x62c, 0x703, 0x63b, 0x703, 0x63b, 0x6cb, 0x628, 0x6cb, 0x628, 0x6cb, 0x628, +0x57f, 0x4ff, 0x57f, 0x4ff, 0x543, 0x4e7, 0x543, 0x4e7, 0x591, 0x559, 0x591, +0x559, 0x44b, 0x437, 0x44b, 0x437, 0x362, 0x372, 0x362, 0x372, 0x362, 0x372, +0x1d3, 0x208, 0x1d3, 0x208, 0xffeb, 0x41, 0xffeb, 0x41, 0xfe04, 0xfe7a, 0xfe04, +0xfe7a, 0xfba9, 0xfc3c, 0xfba9, 0xfc3c, 0xf9f2, 0xfa9f, 0xf9f2, 0xfa9f, 0xf9ef, 0xfab2, +0xf9ef, 0xfab2, 0xf9ef, 0xfab2, 0xf8d2, 0xf9a3, 0xf8d2, 0xf9a3, 0xf6f7, 0xf7d2, 0xf6f7, +0xf7d2, 0xf5e4, 0xf6c2, 0xf5e4, 0xf6c2, 0xf4c1, 0xf59c, 0xf4c1, 0xf59c, 0xf395, 0xf467, +0xf395, 0xf467, 0xf337, 0xf3fa, 0xf337, 0xf3fa, 0xf337, 0xf3fa, 0xf46e, 0xf51d, 0xf46e, +0xf51d, 0xf454, 0xf4ea, 0xf454, 0xf4ea, 0xf4cb, 0xf546, 0xf4cb, 0xf546, 0xf5dc, 0xf63b, +0xf5dc, 0xf63b, 0xf6d9, 0xf71d, 0xf6d9, 0xf71d, 0xf6d9, 0xf71d, 0xf872, 0xf89d, 0xf872, +0xf89d, 0xf8d5, 0xf8eb, 0xf8d5, 0xf8eb, 0xf94c, 0xf954, 0xf94c, 0xf954, 0xfa34, 0xfa34, +0xfa34, 0xfa34, 0xfa8e, 0xfa90, 0xfa8e, 0xfa90, 0xfacd, 0xfadb, 0xfacd, 0xfadb, 0xfacd, +0xfadb, 0xfada, 0xfaff, 0xfada, 0xfaff, 0xfa48, 0xfa8f, 0xfa48, 0xfa8f, 0xf9fb, 0xfa6e, +0xf9fb, 0xfa6e, 0xf9f5, 0xfa9f, 0xf9f5, 0xfa9f, 0xf96d, 0xfa57, 0xf96d, 0xfa57, 0xf96d, +0xfa57, 0xf790, 0xf8c1, 0xf790, 0xf8c1, 0xf451, 0xf5d1, 0xf451, 0xf5d1, 0xf26f, 0xf43f, +0xf26f, 0xf43f, 0xf1ad, 0xf3d1, 0xf1ad, 0xf3d1, 0xf03a, 0xf2af, 0xf03a, 0xf2af, 0xee86, +0xf149, 0xee86, 0xf149, 0xee86, 0xf149, 0xeda7, 0xf0b3, 0xeda7, 0xf0b3, 0xecff, 0xf04a, +0xecff, 0xf04a, 0xec20, 0xefa0, 0xec20, 0xefa0, 0xeb29, 0xeed1, 0xeb29, 0xeed1, 0xe999, +0xed5b, 0xe999, 0xed5b, 0xe8c1, 0xec8e, 0xe8c1, 0xec8e, 0xe8c1, 0xec8e, 0xe822, 0xebeb, +0xe822, 0xebeb, 0xe859, 0xec0e, 0xe859, 0xec0e, 0xe898, 0xec29, 0xe898, 0xec29, 0xe8f9, +0xec58, 0xe8f9, 0xec58, 0xea2e, 0xed4d, 0xea2e, 0xed4d, 0xea2e, 0xed4d, 0xebfc, 0xeed1, +0xebfc, 0xeed1, 0xedfc, 0xf07c, 0xedfc, 0xf07c, 0xf022, 0xf245, 0xf022, 0xf245, 0xf446, +0xf606, 0xf446, 0xf606, 0xf7b6, 0xf911, 0xf7b6, 0xf911, 0xfb33, 0xfc26, 0xfb33, 0xfc26, +0xfb33, 0xfc26, 0xfef1, 0xff7e, 0xfef1, 0xff7e, 0x1a6, 0x1cf, 0x1a6, 0x1cf, 0x469, +0x432, 0x469, 0x432, 0x78f, 0x6fe, 0x78f, 0x6fe, 0xa13, 0x92e, 0xa13, 0x92e, +0xba4, 0xa72, 0xba4, 0xa72, 0xba4, 0xa72, 0xdcc, 0xc56, 0xdcc, 0xc56, 0xefd, +0xd49, 0xefd, 0xd49, 0x1051, 0xe67, 0x1051, 0xe67, 0x1264, 0x104a, 0x1264, 0x104a, +0x1453, 0x1211, 0x1453, 0x1211, 0x1453, 0x1211, 0x1698, 0x1434, 0x1698, 0x1434, 0x181c, +0x159a, 0x181c, 0x159a, 0x1842, 0x15a8, 0x1842, 0x15a8, 0x1833, 0x1584, 0x1833, 0x1584, +0x199f, 0x16df, 0x199f, 0x16df, 0x1a3a, 0x176c, 0x1a3a, 0x176c, 0x1a3a, 0x176c, 0x19c1, +0x16e9, 0x19c1, 0x16e9, 0x19a8, 0x16c9, 0x19a8, 0x16c9, 0x19ad, 0x16c9, 0x19ad, 0x16c9, +0x19d4, 0x16f0, 0x19d4, 0x16f0, 0x195f, 0x167f, 0x195f, 0x167f, 0x1918, 0x1641, 0x1918, +0x1641, 0x1918, 0x1641, 0x1831, 0x1569, 0x1831, 0x1569, 0x16f9, 0x1446, 0x16f9, 0x1446, +0x16cd, 0x1437, 0x16cd, 0x1437, 0x162e, 0x13bb, 0x162e, 0x13bb, 0x144e, 0x1206, 0x144e, +0x1206, 0x144e, 0x1206, 0x11dc, 0xfc7, 0x11dc, 0xfc7, 0xf5d, 0xd83, 0xf5d, 0xd83, +0xd22, 0xb8a, 0xd22, 0xb8a, 0xb16, 0x9c7, 0xb16, 0x9c7, 0x856, 0x757, 0x856, +0x757, 0x525, 0x47b, 0x525, 0x47b, 0x525, 0x47b, 0x107, 0xb4, 0x107, 0xb4, +0xfce6, 0xfced, 0xfce6, 0xfced, 0xfaa6, 0xfb07, 0xfaa6, 0xfb07, 0xf87f, 0xf939, 0xf87f, +0xf939, 0xf548, 0xf658, 0xf548, 0xf658, 0xf13f, 0xf2a2, 0xf13f, 0xf2a2, 0xf13f, 0xf2a2, +0xede3, 0xef91, 0xede3, 0xef91, 0xebf1, 0xede3, 0xebf1, 0xede3, 0xe9b3, 0xebe3, 0xe9b3, +0xebe3, 0xe6a0, 0xe903, 0xe6a0, 0xe903, 0xe3ba, 0xe649, 0xe3ba, 0xe649, 0xe3ba, 0xe649, +0xe296, 0xe546, 0xe296, 0xe546, 0xe234, 0xe4fd, 0xe234, 0xe4fd, 0xe0ff, 0xe3d8, 0xe0ff, +0xe3d8, 0xe022, 0xe305, 0xe022, 0xe305, 0xdefd, 0xe1e2, 0xdefd, 0xe1e2, 0xddc8, 0xe0ab, +0xddc8, 0xe0ab, 0xddc8, 0xe0ab, 0xdf23, 0xe200, 0xdf23, 0xe200, 0xdff0, 0xe2c5, 0xdff0, +0xe2c5, 0xdf83, 0xe250, 0xdf83, 0xe250, 0xe124, 0xe3e8, 0xe124, 0xe3e8, 0xe357, 0xe614, +0xe357, 0xe614, 0xe4f6, 0xe7ae, 0xe4f6, 0xe7ae, 0xe4f6, 0xe7ae, 0xe583, 0xe839, 0xe583, +0xe839, 0xe681, 0xe937, 0xe681, 0xe937, 0xe820, 0xead8, 0xe820, 0xead8, 0xe9ba, 0xec77, +0xe9ba, 0xec77, 0xeaf1, 0xedb5, 0xeaf1, 0xedb5, 0xeaf1, 0xedb5, 0xea68, 0xed30, 0xea68, +0xed30, 0xea74, 0xed41, 0xea74, 0xed41, 0xeb50, 0xee1d, 0xeb50, 0xee1d, 0xeb67, 0xee31, +0xeb67, 0xee31, 0xeb57, 0xee16, 0xeb57, 0xee16, 0xec31, 0xeedc, 0xec31, 0xeedc, 0xec31, +0xeedc, 0xecbf, 0xef4d, 0xecbf, 0xef4d, 0xee09, 0xf06f, 0xee09, 0xf06f, 0xf051, 0xf282, +0xf051, 0xf282, 0xf1c9, 0xf3b9, 0xf1c9, 0xf3b9, 0xf411, 0xf5b3, 0xf411, 0xf5b3, 0xf69e, +0xf7e6, 0xf69e, 0xf7e6, 0xf69e, 0xf7e6, 0xfa59, 0xfb3b, 0xfa59, 0xfb3b, 0xfee2, 0xff55, +0xfee2, 0xff55, 0x2e9, 0x2e3, 0x2e9, 0x2e3, 0x737, 0x6b2, 0x737, 0x6b2, 0xa91, +0x98a, 0xa91, 0x98a, 0xa91, 0x98a, 0xe14, 0xc88, 0xe14, 0xc88, 0x1266, 0x1057, +0x1266, 0x1057, 0x1661, 0x13d4, 0x1661, 0x13d4, 0x1a49, 0x1744, 0x1a49, 0x1744, 0x1d57, +0x19e4, 0x1d57, 0x19e4, 0x1f21, 0x1b4d, 0x1f21, 0x1b4d, 0x1f21, 0x1b4d, 0x2193, 0x1d6b, +0x2193, 0x1d6b, 0x2405, 0x1f97, 0x2405, 0x1f97, 0x2512, 0x2071, 0x2512, 0x2071, 0x2575, +0x20b1, 0x2575, 0x20b1, 0x25c5, 0x20ef, 0x25c5, 0x20ef, 0x25c9, 0x20f2, 0x25c9, 0x20f2, +0x25c9, 0x20f2, 0x2512, 0x204b, 0x2512, 0x204b, 0x242e, 0x1f85, 0x242e, 0x1f85, 0x2355, +0x1ed7, 0x2355, 0x1ed7, 0x22c5, 0x1e7e, 0x22c5, 0x1e7e, 0x2159, 0x1d53, 0x2159, 0x1d53, +0x2159, 0x1d53, 0x1f4b, 0x1b8c, 0x1f4b, 0x1b8c, 0x1e5c, 0x1ae9, 0x1e5c, 0x1ae9, 0x1d55, +0x1a31, 0x1d55, 0x1a31, 0x1b55, 0x1880, 0x1b55, 0x1880, 0x18df, 0x1659, 0x18df, 0x1659, +0x1692, 0x1459, 0x1692, 0x1459, 0x1692, 0x1459, 0x1462, 0x1271, 0x1462, 0x1271, 0x1243, +0x1096, 0x1243, 0x1096, 0x104b, 0xedd, 0x104b, 0xedd, 0xde5, 0xcb1, 0xde5, 0xcb1, +0xc05, 0xb06, 0xc05, 0xb06, 0xb6c, 0xa9d, 0xb6c, 0xa9d, 0xb6c, 0xa9d, 0xaaf, +0xa0c, 0xaaf, 0xa0c, 0x96b, 0x8f1, 0x96b, 0x8f1, 0x880, 0x82c, 0x880, 0x82c, +0x7f9, 0x7ca, 0x7f9, 0x7ca, 0x7e3, 0x7d7, 0x7e3, 0x7d7, 0x7e3, 0x7d7, 0x7e0, +0x7f7, 0x7e0, 0x7f7, 0x6e8, 0x721, 0x6e8, 0x721, 0x5b9, 0x614, 0x5b9, 0x614, +0x4a0, 0x51d, 0x4a0, 0x51d, 0x240, 0x2df, 0x240, 0x2df, 0xfed0, 0xff90, 0xfed0, +0xff90, 0xfed0, 0xff90, 0xfbf2, 0xfcd1, 0xfbf2, 0xfcd1, 0xfab7, 0xfbb3, 0xfab7, 0xfbb3, +0xfa12, 0xfb27, 0xfa12, 0xfb27, 0xf8f0, 0xfa1a, 0xf8f0, 0xfa1a, 0xf778, 0xf8b1, 0xf778, +0xf8b1, 0xf778, 0xf8b1, 0xf636, 0xf778, 0xf636, 0xf778, 0xf5eb, 0xf730, 0xf5eb, 0xf730, +0xf5e2, 0xf722, 0xf5e2, 0xf722, 0xf4ce, 0xf603, 0xf4ce, 0xf603, 0xf39d, 0xf4be, 0xf39d, +0xf4be, 0xf3b5, 0xf4bd, 0xf3b5, 0xf4bd, 0xf3b5, 0xf4bd, 0xf494, 0xf57d, 0xf494, 0xf57d, +0xf579, 0xf63f, 0xf579, 0xf63f, 0xf63f, 0xf6de, 0xf63f, 0xf6de, 0xf702, 0xf77b, 0xf702, +0xf77b, 0xf7f0, 0xf843, 0xf7f0, 0xf843, 0xf99c, 0xf9cc, 0xf99c, 0xf9cc, 0xf99c, 0xf9cc, +0xfab7, 0xfaca, 0xfab7, 0xfaca, 0xfac3, 0xfabf, 0xfac3, 0xfabf, 0xfa57, 0xfa46, 0xfa57, +0xfa46, 0xf915, 0xf902, 0xf915, 0xf902, 0xf8d8, 0xf8ce, 0xf8d8, 0xf8ce, 0xf8d8, 0xf8ce, +0xf8e9, 0xf8f5, 0xf8e9, 0xf8f5, 0xf8a4, 0xf8d3, 0xf8a4, 0xf8d3, 0xf806, 0xf865, 0xf806, +0xf865, 0xf6e4, 0xf77e, 0xf6e4, 0xf77e, 0xf600, 0xf6e0, 0xf600, 0xf6e0, 0xf4a2, 0xf5d1, +0xf4a2, 0xf5d1, 0xf4a2, 0xf5d1, 0xf321, 0xf4a6, 0xf321, 0xf4a6, 0xf122, 0xf301, 0xf122, +0xf301, 0xefa4, 0xf1de, 0xefa4, 0xf1de, 0xee87, 0xf11b, 0xee87, 0xf11b, 0xed42, 0xf02c, +0xed42, 0xf02c, 0xecbb, 0xeff2, 0xecbb, 0xeff2, 0xecbb, 0xeff2, 0xebf1, 0xef6c, 0xebf1, +0xef6c, 0xeaeb, 0xee9b, 0xeaeb, 0xee9b, 0xe9b5, 0xed8c, 0xe9b5, 0xed8c, 0xe8f0, 0xecdd, +0xe8f0, 0xecdd, 0xe86a, 0xec5a, 0xe86a, 0xec5a, 0xe86a, 0xec5a, 0xe7f8, 0xebd9, 0xe7f8, +0xebd9, 0xe90a, 0xecc9, 0xe90a, 0xecc9, 0xe9da, 0xed65, 0xe9da, 0xed65, 0xe96a, 0xecaf, +0xe96a, 0xecaf, 0xeaaa, 0xed98, 0xeaaa, 0xed98, 0xed57, 0xefe2, 0xed57, 0xefe2, 0xed57, +0xefe2, 0xefb4, 0xf1cf, 0xefb4, 0xf1cf, 0xf28b, 0xf42e, 0xf28b, 0xf42e, 0xf627, 0xf74d, +0xf627, 0xf74d, 0xf9bc, 0xfa60, 0xf9bc, 0xfa60, 0xfd7f, 0xfda2, 0xfd7f, 0xfda2, 0x176, +0x119, 0x176, 0x119, 0x176, 0x119, 0x3b3, 0x2db, 0x3b3, 0x2db, 0x638, 0x4eb, +0x638, 0x4eb, 0x9b8, 0x800, 0x9b8, 0x800, 0xc65, 0xa4a, 0xc65, 0xa4a, 0xe5c, +0xbe8, 0xe5c, 0xbe8, 0xe5c, 0xbe8, 0xf3a, 0xc7a, 0xf3a, 0xc7a, 0x1050, 0xd4e, +0x1050, 0xd4e, 0x11fd, 0xec3, 0x11fd, 0xec3, 0x144a, 0x10e4, 0x144a, 0x10e4, 0x14e1, +0x1157, 0x14e1, 0x1157, 0x13f5, 0x1050, 0x13f5, 0x1050, 0x13f5, 0x1050, 0x14f4, 0x113c, +0x14f4, 0x113c, 0x1585, 0x11c0, 0x1585, 0x11c0, 0x152c, 0x1160, 0x152c, 0x1160, 0x1533, +0x1164, 0x1533, 0x1164, 0x1544, 0x1177, 0x1544, 0x1177, 0x1542, 0x117b, 0x1542, 0x117b, +0x1542, 0x117b, 0x1556, 0x1198, 0x1556, 0x1198, 0x1571, 0x11c0, 0x1571, 0x11c0, 0x1497, +0x10f6, 0x1497, 0x10f6, 0x1395, 0x100a, 0x1395, 0x100a, 0x13fb, 0x1089, 0x13fb, 0x1089, +0x13fb, 0x1089, 0x1459, 0x1107, 0x1459, 0x1107, 0x1359, 0x102d, 0x1359, 0x102d, 0x120f, +0xf10, 0x120f, 0xf10, 0x10d2, 0xe07, 0x10d2, 0xe07, 0x100b, 0xd7c, 0x100b, 0xd7c, +0xf45, 0xcfa, 0xf45, 0xcfa, 0xf45, 0xcfa, 0xd98, 0xb99, 0xd98, 0xb99, 0xaf1, +0x945, 0xaf1, 0x945, 0x805, 0x6b2, 0x805, 0x6b2, 0x563, 0x46f, 0x563, 0x46f, +0x282, 0x1f3, 0x282, 0x1f3, 0x2a, 0, 0x2a, 0, 0x2a, 0, 0xfd30, +0xfd6e, 0xfd30, 0xfd6e, 0xf97b, 0xfa1e, 0xf97b, 0xfa1e, 0xf62c, 0xf732, 0xf62c, 0xf732, +0xf307, 0xf46b, 0xf307, 0xf46b, 0xf0e8, 0xf2a4, 0xf0e8, 0xf2a4, 0xf0e8, 0xf2a4, 0xee72, +0xf07c, 0xee72, 0xf07c, 0xebc9, 0xee19, 0xebc9, 0xee19, 0xe9fd, 0xec87, 0xe9fd, 0xec87, +0xe83e, 0xeaf8, 0xe83e, 0xeaf8, 0xe717, 0xe9f4, 0xe717, 0xe9f4, 0xe6a0, 0xe996, 0xe6a0, +0xe996, 0xe6a0, 0xe996, 0xe601, 0xe905, 0xe601, 0xe905, 0xe4cd, 0xe7d4, 0xe4cd, 0xe7d4, +0xe431, 0xe735, 0xe431, 0xe735, 0xe47e, 0xe776, 0xe47e, 0xe776, 0xe50d, 0xe7f4, 0xe50d, +0xe7f4, 0xe5b4, 0xe886, 0xe5b4, 0xe886, 0xe5b4, 0xe886, 0xe622, 0xe8de, 0xe622, 0xe8de, +0xe717, 0xe9bd, 0xe717, 0xe9bd, 0xe87b, 0xeb0c, 0xe87b, 0xeb0c, 0xe9fc, 0xec7c, 0xe9fc, +0xec7c, 0xeb3e, 0xedb0, 0xeb3e, 0xedb0, 0xeb3e, 0xedb0, 0xebba, 0xee22, 0xebba, 0xee22, +0xec16, 0xee79, 0xec16, 0xee79, 0xec8b, 0xeeed, 0xec8b, 0xeeed, 0xecee, 0xef52, 0xecee, +0xef52, 0xecb2, 0xef1a, 0xecb2, 0xef1a, 0xec02, 0xee70, 0xec02, 0xee70, 0xec02, 0xee70, +0xebbd, 0xee30, 0xebbd, 0xee30, 0xec81, 0xeef5, 0xec81, 0xeef5, 0xedbf, 0xf031, 0xedbf, +0xf031, 0xee0c, 0xf075, 0xee0c, 0xf075, 0xee30, 0xf086, 0xee30, 0xf086, 0xef14, 0xf14f, +0xef14, 0xf14f, 0xef14, 0xf14f, 0xf0b2, 0xf2c6, 0xf0b2, 0xf2c6, 0xf2df, 0xf4c0, 0xf2df, +0xf4c0, 0xf4aa, 0xf64b, 0xf4aa, 0xf64b, 0xf6b7, 0xf80d, 0xf6b7, 0xf80d, 0xf9ff, 0xfafd, +0xf9ff, 0xfafd, 0xf9ff, 0xfafd, 0xfda1, 0xfe3d, 0xfda1, 0xfe3d, 0x168, 0x19a, 0x168, +0x19a, 0x526, 0x4e6, 0x526, 0x4e6, 0x88e, 0x7d7, 0x88e, 0x7d7, 0xc31, 0xb03, +0xc31, 0xb03, 0x1020, 0xe7a, 0x1020, 0xe7a, 0x1020, 0xe7a, 0x137f, 0x1166, 0x137f, +0x1166, 0x1582, 0x12fc, 0x1582, 0x12fc, 0x176f, 0x1485, 0x176f, 0x1485, 0x19b7, 0x1675, +0x19b7, 0x1675, 0x1c15, 0x1889, 0x1c15, 0x1889, 0x1e33, 0x1a6a, 0x1e33, 0x1a6a, 0x1e33, +0x1a6a, 0x1f07, 0x1b12, 0x1f07, 0x1b12, 0x203a, 0x1c2a, 0x203a, 0x1c2a, 0x2149, 0x1d2f, +0x2149, 0x1d2f, 0x20f3, 0x1cdd, 0x20f3, 0x1cdd, 0x2077, 0x1c75, 0x2077, 0x1c75, 0x2077, +0x1c75, 0x203d, 0x1c5b, 0x203d, 0x1c5b, 0x2017, 0x1c60, 0x2017, 0x1c60, 0x1ee2, 0x1b61, +0x1ee2, 0x1b61, 0x1da6, 0x1a61, 0x1da6, 0x1a61, 0x1d28, 0x1a23, 0x1d28, 0x1a23, 0x1bf1, +0x192e, 0x1bf1, 0x192e, 0x1bf1, 0x192e, 0x1a60, 0x17e1, 0x1a60, 0x17e1, 0x195c, 0x171e, +0x195c, 0x171e, 0x1815, 0x1615, 0x1815, 0x1615, 0x15a6, 0x13e1, 0x15a6, 0x13e1, 0x139e, +0x120d, 0x139e, 0x120d, 0x139e, 0x120d, 0x11c3, 0x1062, 0x11c3, 0x1062, 0xec2, 0xd8c, +0xec2, 0xd8c, 0xc70, 0xb5f, 0xc70, 0xb5f, 0xb9b, 0xaac, 0xb9b, 0xaac, 0xb2f, +0xa5e, 0xb2f, 0xa5e, 0xa8f, 0x9da, 0xa8f, 0x9da, 0xa8f, 0x9da, 0x9f3, 0x95b, +0x9f3, 0x95b, 0x9ca, 0x94e, 0x9ca, 0x94e, 0xa14, 0x9b5, 0xa14, 0x9b5, 0xa37, +0x9f8, 0xa37, 0x9f8, 0x9aa, 0x98f, 0x9aa, 0x98f, 0x975, 0x980, 0x975, 0x980, +0x975, 0x980, 0x91e, 0x953, 0x91e, 0x953, 0x73e, 0x79f, 0x73e, 0x79f, 0x51c, +0x5ac, 0x51c, 0x5ac, 0x2f4, 0x3b3, 0x2f4, 0x3b3, 0x81, 0x16e, 0x81, 0x16e, +0x81, 0x16e, 0xfe4d, 0xff67, 0xfe4d, 0xff67, 0xfce9, 0xfe2a, 0xfce9, 0xfe2a, 0xfc1e, +0xfd82, 0xfc1e, 0xfd82, 0xfa17, 0xfb96, 0xfa17, 0xfb96, 0xf82d, 0xf9bd, 0xf82d, 0xf9bd, +0xf6f6, 0xf88e, 0xf6f6, 0xf88e, 0xf6f6, 0xf88e, 0xf5b8, 0xf74c, 0xf5b8, 0xf74c, 0xf50d, +0xf693, 0xf50d, 0xf693, 0xf43a, 0xf5a5, 0xf43a, 0xf5a5, 0xf391, 0xf4d6, 0xf391, 0xf4d6, +0xf350, 0xf466, 0xf350, 0xf466, 0xf434, 0xf513, 0xf434, 0xf513, 0xf434, 0xf513, 0xf581, +0xf622, 0xf581, 0xf622, 0xf610, 0xf671, 0xf610, 0xf671, 0xf6fe, 0xf71e, 0xf6fe, 0xf71e, +0xf7f7, 0xf7d8, 0xf7f7, 0xf7d8, 0xf957, 0xf8fe, 0xf957, 0xf8fe, 0xf957, 0xf8fe, 0xfae0, +0xfa56, 0xfae0, 0xfa56, 0xfb5e, 0xfaad, 0xfb5e, 0xfaad, 0xfaf0, 0xfa26, 0xfaf0, 0xfa26, +0xfae9, 0xfa16, 0xfae9, 0xfa16, 0xfb69, 0xfa9d, 0xfb69, 0xfa9d, 0xfaf0, 0xfa3d, 0xfaf0, +0xfa3d, 0xfaf0, 0xfa3d, 0xf9c4, 0xf93c, 0xf9c4, 0xf93c, 0xf89b, 0xf84f, 0xf89b, 0xf84f, +0xf779, 0xf779, 0xf779, 0xf779, 0xf5ee, 0xf648, 0xf5ee, 0xf648, 0xf405, 0xf4c5, 0xf405, +0xf4c5, 0xf1b5, 0xf2e4, 0xf1b5, 0xf2e4, 0xf1b5, 0xf2e4, 0xef71, 0xf114, 0xef71, 0xf114, +0xee15, 0xf02d, 0xee15, 0xf02d, 0xece7, 0xef73, 0xece7, 0xef73, 0xebd0, 0xeeca, 0xebd0, +0xeeca, 0xeb22, 0xee7f, 0xeb22, 0xee7f, 0xeb22, 0xee7f, 0xea20, 0xedd4, 0xea20, 0xedd4, +0xe871, 0xec6d, 0xe871, 0xec6d, 0xe7d6, 0xec07, 0xe7d6, 0xec07, 0xe7cf, 0xec21, 0xe7cf, +0xec21, 0xe710, 0xeb6e, 0xe710, 0xeb6e, 0xe737, 0xeb8c, 0xe737, 0xeb8c, 0xe737, 0xeb8c, +0xe7ed, 0xec24, 0xe7ed, 0xec24, 0xe8aa, 0xecaf, 0xe8aa, 0xecaf, 0xea54, 0xee15, 0xea54, +0xee15, 0xece4, 0xf051, 0xece4, 0xf051, 0xef1e, 0xf227, 0xef1e, 0xf227, 0xf1da, 0xf476, +0xf1da, 0xf476, 0xf1da, 0xf476, 0xf5e1, 0xf806, 0xf5e1, 0xf806, 0xf975, 0xfb1f, 0xf975, +0xfb1f, 0xfcb3, 0xfde0, 0xfcb3, 0xfde0, 0xffc1, 0x73, 0xffc1, 0x73, 0x2e4, 0x31d, +0x2e4, 0x31d, 0x2e4, 0x31d, 0x611, 0x5d6, 0x611, 0x5d6, 0x8f0, 0x849, 0x8f0, +0x849, 0xab8, 0x9af, 0xab8, 0x9af, 0xb66, 0xa03, 0xb66, 0xa03, 0xda5, 0xbf3, +0xda5, 0xbf3, 0x10a6, 0xeae, 0x10a6, 0xeae, 0x10a6, 0xeae, 0x12f1, 0x10bc, 0x12f1, +0x10bc, 0x14b5, 0x124d, 0x14b5, 0x124d, 0x15ca, 0x1337, 0x15ca, 0x1337, 0x1673, 0x13bc, +0x1673, 0x13bc, 0x1763, 0x148d, 0x1763, 0x148d, 0x18bd, 0x15ce, 0x18bd, 0x15ce, 0x18bd, +0x15ce, 0x1921, 0x161c, 0x1921, 0x161c, 0x18e9, 0x15d2, 0x18e9, 0x15d2, 0x18ff, 0x15d9, +0x18ff, 0x15d9, 0x1933, 0x1600, 0x1933, 0x1600, 0x191a, 0x15de, 0x191a, 0x15de, 0x191a, +0x15de, 0x193d, 0x15fb, 0x193d, 0x15fb, 0x18e0, 0x159c, 0x18e0, 0x159c, 0x17a2, 0x1461, +0x17a2, 0x1461, 0x1785, 0x144d, 0x1785, 0x144d, 0x176b, 0x1444, 0x176b, 0x1444, 0x16d2, +0x13c4, 0x16d2, 0x13c4, 0x16d2, 0x13c4, 0x158f, 0x12a3, 0x158f, 0x12a3, 0x12e6, 0x1027, +0x12e6, 0x1027, 0x111a, 0xe91, 0x111a, 0xe91, 0x10c4, 0xe7e, 0x10c4, 0xe7e, 0xf29, +0xd30, 0xf29, 0xd30, 0xb8b, 0x9e8, 0xb8b, 0x9e8, 0xb8b, 0x9e8, 0x819, 0x6d7, +0x819, 0x6d7, 0x56a, 0x490, 0x56a, 0x490, 0x3b1, 0x346, 0x3b1, 0x346, 0x18f, +0x197, 0x18f, 0x197, 0xfdfc, 0xfe79, 0xfdfc, 0xfe79, 0xfdfc, 0xfe79, 0xfa3c, 0xfb2e, +0xfa3c, 0xfb2e, 0xf6b2, 0xf816, 0xf6b2, 0xf816, 0xf42b, 0xf5fc, 0xf42b, 0xf5fc, 0xf162, +0xf398, 0xf162, 0xf398, 0xed72, 0xf004, 0xed72, 0xf004, 0xe9d4, 0xecb8, 0xe9d4, 0xecb8, +0xe9d4, 0xecb8, 0xe7c1, 0xeae8, 0xe7c1, 0xeae8, 0xe6a8, 0xea07, 0xe6a8, 0xea07, 0xe4eb, +0xe874, 0xe4eb, 0xe874, 0xe31c, 0xe6c2, 0xe31c, 0xe6c2, 0xe1e7, 0xe59c, 0xe1e7, 0xe59c, +0xe13d, 0xe4f6, 0xe13d, 0xe4f6, 0xe13d, 0xe4f6, 0xe109, 0xe4bc, 0xe109, 0xe4bc, 0xe12a, +0xe4cf, 0xe12a, 0xe4cf, 0xe117, 0xe4a6, 0xe117, 0xe4a6, 0xe109, 0xe47e, 0xe109, 0xe47e, +0xe1dd, 0xe537, 0xe1dd, 0xe537, 0xe1dd, 0xe537, 0xe35d, 0xe69a, 0xe35d, 0xe69a, 0xe50f, +0xe831, 0xe50f, 0xe831, 0xe65d, 0xe965, 0xe65d, 0xe965, 0xe79a, 0xea8c, 0xe79a, 0xea8c, +0xe8f2, 0xebd3, 0xe8f2, 0xebd3, 0xea42, 0xed16, 0xea42, 0xed16, 0xea42, 0xed16, 0xeb16, +0xede0, 0xeb16, 0xede0, 0xeb2f, 0xedf2, 0xeb2f, 0xedf2, 0xeb27, 0xede4, 0xeb27, 0xede4, +0xeb58, 0xee0f, 0xeb58, 0xee0f, 0xebff, 0xeeae, 0xebff, 0xeeae, 0xec7f, 0xef22, 0xec7f, +0xef22, 0xec7f, 0xef22, 0xebde, 0xee6e, 0xebde, 0xee6e, 0xeb0c, 0xed81, 0xeb0c, 0xed81, +0xebfa, 0xee4a, 0xebfa, 0xee4a, 0xed16, 0xef34, 0xed16, 0xef34, 0xedc7, 0xefa7, 0xedc7, +0xefa7, 0xedc7, 0xefa7, 0xef2f, 0xf0c4, 0xef2f, 0xf0c4, 0xf0ce, 0xf209, 0xf0ce, 0xf209, +0xf35b, 0xf42f, 0xf35b, 0xf42f, 0xf74d, 0xf7ae, 0xf74d, 0xf7ae, 0xfbe2, 0xfbc4, 0xfbe2, +0xfbc4, 0xffc2, 0xff1e, 0xffc2, 0xff1e, 0xffc2, 0xff1e, 0x3ba, 0x289, 0x3ba, 0x289, +0x7c7, 0x605, 0x7c7, 0x605, 0xbc1, 0x96f, 0xbc1, 0x96f, 0x108c, 0xdad, 0x108c, +0xdad, 0x1493, 0x112d, 0x1493, 0x112d, 0x1493, 0x112d, 0x17ed, 0x140a, 0x17ed, 0x140a, +0x1ab3, 0x165f, 0x1ab3, 0x165f, 0x1d36, 0x1880, 0x1d36, 0x1880, 0x200f, 0x1b07, 0x200f, +0x1b07, 0x224b, 0x1d04, 0x224b, 0x1d04, 0x2362, 0x1def, 0x2362, 0x1def, 0x2362, 0x1def, +0x234b, 0x1dbf, 0x234b, 0x1dbf, 0x2339, 0x1da8, 0x2339, 0x1da8, 0x245e, 0x1ed9, 0x245e, +0x1ed9, 0x250d, 0x1fa5, 0x250d, 0x1fa5, 0x2397, 0x1e5a, 0x2397, 0x1e5a, 0x21d3, 0x1cce, +0x21d3, 0x1cce, 0x21d3, 0x1cce, 0x2053, 0x1b91, 0x2053, 0x1b91, 0x1f13, 0x1a9a, 0x1f13, +0x1a9a, 0x1e4a, 0x1a1f, 0x1e4a, 0x1a1f, 0x1cc5, 0x18eb, 0x1cc5, 0x18eb, 0x1a8d, 0x1704, +0x1a8d, 0x1704, 0x1a8d, 0x1704, 0x1966, 0x162c, 0x1966, 0x162c, 0x1953, 0x1665, 0x1953, +0x1665, 0x1733, 0x148d, 0x1733, 0x148d, 0x13e6, 0x1184, 0x13e6, 0x1184, 0x1101, 0xedc, +0x1101, 0xedc, 0xe31, 0xc46, 0xe31, 0xc46, 0xe31, 0xc46, 0xca7, 0xaf1, 0xca7, +0xaf1, 0xb9d, 0xa1a, 0xb9d, 0xa1a, 0xa35, 0x8e2, 0xa35, 0x8e2, 0x97a, 0x857, +0x97a, 0x857, 0x986, 0x894, 0x986, 0x894, 0x8e2, 0x822, 0x8e2, 0x822, 0x8e2, +0x822, 0x83d, 0x7b2, 0x83d, 0x7b2, 0x809, 0x7b7, 0x809, 0x7b7, 0x75e, 0x749, +0x75e, 0x749, 0x6ae, 0x6da, 0x6ae, 0x6da, 0x587, 0x5f6, 0x587, 0x5f6, 0x587, +0x5f6, 0x3cb, 0x482, 0x3cb, 0x482, 0x193, 0x291, 0x193, 0x291, 0xff2c, 0x72, +0xff2c, 0x72, 0xfd4b, 0xfed6, 0xfd4b, 0xfed6, 0xfbd2, 0xfd9e, 0xfbd2, 0xfd9e, 0xfae5, +0xfceb, 0xfae5, 0xfceb, 0xfae5, 0xfceb, 0xf9d8, 0xfc11, 0xf9d8, 0xfc11, 0xf860, 0xfabf, +0xf860, 0xfabf, 0xf717, 0xf991, 0xf717, 0xf991, 0xf668, 0xf8ef, 0xf668, 0xf8ef, 0xf62a, +0xf8af, 0xf62a, 0xf8af, 0xf5f8, 0xf86d, 0xf5f8, 0xf86d, 0xf5f8, 0xf86d, 0xf5d9, 0xf830, +0xf5d9, 0xf830, 0xf5ed, 0xf818, 0xf5ed, 0xf818, 0xf636, 0xf82a, 0xf636, 0xf82a, 0xf696, +0xf848, 0xf696, 0xf848, 0xf74f, 0xf8b8, 0xf74f, 0xf8b8, 0xf74f, 0xf8b8, 0xf823, 0xf940, +0xf823, 0xf940, 0xf98c, 0xfa5b, 0xf98c, 0xfa5b, 0xfb70, 0xfbf5, 0xfb70, 0xfbf5, 0xfce7, +0xfd28, 0xfce7, 0xfd28, 0xfdaf, 0xfdb5, 0xfdaf, 0xfdb5, 0xfd83, 0xfd5b, 0xfd83, 0xfd5b, +0xfd83, 0xfd5b, 0xfd82, 0xfd3b, 0xfd82, 0xfd3b, 0xfdad, 0xfd59, 0xfdad, 0xfd59, 0xfddc, +0xfd8e, 0xfddc, 0xfd8e, 0xfd79, 0xfd44, 0xfd79, 0xfd44, 0xfc43, 0xfc3b, 0xfc43, 0xfc3b, +0xfb66, 0xfb9e, 0xfb66, 0xfb9e, 0xfb66, 0xfb9e, 0xfa02, 0xfa8a, 0xfa02, 0xfa8a, 0xf84f, +0xf938, 0xf84f, 0xf938, 0xf6ee, 0xf843, 0xf6ee, 0xf843, 0xf552, 0xf71c, 0xf552, 0xf71c, +0xf327, 0xf56a, 0xf327, 0xf56a, 0xf327, 0xf56a, 0xf1c2, 0xf480, 0xf1c2, 0xf480, 0xf161, +0xf497, 0xf161, 0xf497, 0xeff0, 0xf395, 0xeff0, 0xf395, 0xed98, 0xf1a2, 0xed98, 0xf1a2, +0xeb57, 0xefb8, 0xeb57, 0xefb8, 0xea6b, 0xef12, 0xea6b, 0xef12, 0xea6b, 0xef12, 0xea64, +0xef3c, 0xea64, 0xef3c, 0xe9b1, 0xeea5, 0xe9b1, 0xeea5, 0xe868, 0xed62, 0xe868, 0xed62, +0xe71a, 0xec04, 0xe71a, 0xec04, 0xe727, 0xebec, 0xe727, 0xebec, 0xe87e, 0xed08, 0xe87e, +0xed08, 0xe87e, 0xed08, 0xe9fa, 0xee37, 0xe9fa, 0xee37, 0xeb44, 0xef25, 0xeb44, 0xef25, +0xeccc, 0xf043, 0xeccc, 0xf043, 0xf023, 0xf324, 0xf023, 0xf324, 0xf44b, 0xf6d1, 0xf44b, +0xf6d1, 0xf44b, 0xf6d1, 0xf729, 0xf92f, 0xf729, 0xf92f, 0xf9bb, 0xfb40, 0xf9bb, 0xfb40, +0xfd56, 0xfe5c, 0xfd56, 0xfe5c, 0x167, 0x1f3, 0x167, 0x1f3, 0x452, 0x46a, 0x452, +0x46a, 0x67d, 0x629, 0x67d, 0x629, 0x67d, 0x629, 0x8cd, 0x816, 0x8cd, 0x816, +0xac3, 0x9b3, 0xac3, 0x9b3, 0xcc4, 0xb64, 0xcc4, 0xb64, 0xec9, 0xd24, 0xec9, +0xd24, 0x101e, 0xe3c, 0x101e, 0xe3c, 0x1032, 0xe19, 0x1032, 0xe19, 0x1032, 0xe19, +0x1093, 0xe4d, 0x1093, 0xe4d, 0x11da, 0xf6a, 0x11da, 0xf6a, 0x1217, 0xf82, 0x1217, +0xf82, 0x1200, 0xf4b, 0x1200, 0xf4b, 0x11e2, 0xf0d, 0x11e2, 0xf0d, 0x11e2, 0xf0d, +0x11c4, 0xed3, 0x11c4, 0xed3, 0x125b, 0xf4d, 0x125b, 0xf4d, 0x129e, 0xf77, 0x129e, +0xf77, 0x12b6, 0xf76, 0x12b6, 0xf76, 0x12d9, 0xf85, 0x12d9, 0xf85, 0x1253, 0xeec, +0x1253, 0xeec, 0x1253, 0xeec, 0x1231, 0xebd, 0x1231, 0xebd, 0x132e, 0xfb2, 0x132e, +0xfb2, 0x1337, 0xfbb, 0x1337, 0xfbb, 0x1250, 0xedc, 0x1250, 0xedc, 0x122d, 0xeca, +0x122d, 0xeca, 0x121d, 0xed6, 0x121d, 0xed6, 0x121d, 0xed6, 0x11d4, 0xeb5, 0x11d4, +0xeb5, 0x1070, 0xd83, 0x1070, 0xd83, 0xd74, 0xac6, 0xd74, 0xac6, 0xa95, 0x830, +0xa95, 0x830, 0x856, 0x644, 0x856, 0x644, 0x856, 0x644, 0x657, 0x4a0, 0x657, +0x4a0, 0x412, 0x2be, 0x412, 0x2be, 0x162, 0x76, 0x162, 0x76, 0xfe68, 0xfde6, +0xfe68, 0xfde6, 0xfbb7, 0xfba0, 0xfbb7, 0xfba0, 0xf96d, 0xf9bf, 0xf96d, 0xf9bf, 0xf96d, +0xf9bf, 0xf631, 0xf6e7, 0xf631, 0xf6e7, 0xf2f7, 0xf40c, 0xf2f7, 0xf40c, 0xf093, 0xf1ff, +0xf093, 0xf1ff, 0xee0f, 0xefc8, 0xee0f, 0xefc8, 0xecd0, 0xeecb, 0xecd0, 0xeecb, 0xec08, +0xee3a, 0xec08, 0xee3a, 0xec08, 0xee3a, 0xea00, 0xec5d, 0xea00, 0xec5d, 0xe85f, 0xeadc, +0xe85f, 0xeadc, 0xe74a, 0xe9dc, 0xe74a, 0xe9dc, 0xe690, 0xe92d, 0xe690, 0xe92d, 0xe67d, +0xe91e, 0xe67d, 0xe91e, 0xe67d, 0xe91e, 0xe677, 0xe916, 0xe677, 0xe916, 0xe5ea, 0xe880, +0xe5ea, 0xe880, 0xe5ce, 0xe85a, 0xe5ce, 0xe85a, 0xe76c, 0xe9ed, 0xe76c, 0xe9ed, 0xe928, +0xeb9e, 0xe928, 0xeb9e, 0xea0b, 0xec77, 0xea0b, 0xec77, 0xea0b, 0xec77, 0xea74, 0xecd9, +0xea74, 0xecd9, 0xeb47, 0xeda8, 0xeb47, 0xeda8, 0xece1, 0xef43, 0xece1, 0xef43, 0xee2c, +0xf091, 0xee2c, 0xf091, 0xee12, 0xf07c, 0xee12, 0xf07c, 0xee12, 0xf07c, 0xecad, 0xef1e, +0xecad, 0xef1e, 0xec49, 0xeec0, 0xec49, 0xeec0, 0xecb9, 0xef34, 0xecb9, 0xef34, 0xece9, +0xef64, 0xece9, 0xef64, 0xed54, 0xefc8, 0xed54, 0xefc8, 0xed28, 0xef8e, 0xed28, 0xef8e, +0xed28, 0xef8e, 0xeccd, 0xef1a, 0xeccd, 0xef1a, 0xed85, 0xefaf, 0xed85, 0xefaf, 0xee80, +0xf078, 0xee80, 0xf078, 0xeeda, 0xf093, 0xeeda, 0xf093, 0xf017, 0xf184, 0xf017, 0xf184, +0xf27f, 0xf390, 0xf27f, 0xf390, 0xf27f, 0xf390, 0xf512, 0xf5bb, 0xf512, 0xf5bb, 0xf826, +0xf85c, 0xf826, 0xf85c, 0xfb72, 0xfb2b, 0xfb72, 0xfb2b, 0xff1c, 0xfe51, 0xff1c, 0xfe51, +0x361, 0x20d, 0x361, 0x20d, 0x361, 0x20d, 0x799, 0x5ba, 0x799, 0x5ba, 0xbc8, +0x95f, 0xbc8, 0x95f, 0xfce, 0xce0, 0xfce, 0xce0, 0x1320, 0xfb4, 0x1320, 0xfb4, +0x1586, 0x11a7, 0x1586, 0x11a7, 0x17bc, 0x1377, 0x17bc, 0x1377, 0x17bc, 0x1377, 0x1ae9, +0x164c, 0x1ae9, 0x164c, 0x1d90, 0x18ac, 0x1d90, 0x18ac, 0x1e62, 0x194a, 0x1e62, 0x194a, +0x1f34, 0x19f8, 0x1f34, 0x19f8, 0x2055, 0x1b08, 0x2055, 0x1b08, 0x20b0, 0x1b63, 0x20b0, +0x1b63, 0x20b0, 0x1b63, 0x20b3, 0x1b76, 0x20b3, 0x1b76, 0x211f, 0x1c02, 0x211f, 0x1c02, +0x2134, 0x1c42, 0x2134, 0x1c42, 0x20bb, 0x1bff, 0x20bb, 0x1bff, 0x1fff, 0x1b80, 0x1fff, +0x1b80, 0x1fff, 0x1b80, 0x1e2b, 0x19ef, 0x1e2b, 0x19ef, 0x1c6d, 0x1876, 0x1c6d, 0x1876, +0x1b03, 0x1752, 0x1b03, 0x1752, 0x199b, 0x162f, 0x199b, 0x162f, 0x1935, 0x160b, 0x1935, +0x160b, 0x17ec, 0x1500, 0x17ec, 0x1500, 0x17ec, 0x1500, 0x14a6, 0x11f2, 0x14a6, 0x11f2, +0x11bf, 0xf3f, 0x11bf, 0xf3f, 0xfc1, 0xd6f, 0xfc1, 0xd6f, 0xd22, 0xafa, 0xd22, +0xafa, 0xb4d, 0x94b, 0xb4d, 0x94b, 0xa8f, 0x8af, 0xa8f, 0x8af, 0xa8f, 0x8af, +0x910, 0x752, 0x910, 0x752, 0x81b, 0x67f, 0x81b, 0x67f, 0x860, 0x6e6, 0x860, +0x6e6, 0x8e4, 0x78f, 0x8e4, 0x78f, 0x912, 0x7e6, 0x912, 0x7e6, 0x912, 0x7e6, +0x864, 0x766, 0x864, 0x766, 0x795, 0x6c9, 0x795, 0x6c9, 0x771, 0x6db, 0x771, +0x6db, 0x6e5, 0x68a, 0x6e5, 0x68a, 0x584, 0x569, 0x584, 0x569, 0x3ee, 0x414, +0x3ee, 0x414, 0x3ee, 0x414, 0x204, 0x26d, 0x204, 0x26d, 0x54, 0xff, 0x54, +0xff, 0xff39, 0x24, 0xff39, 0x24, 0xfd6b, 0xfe90, 0xfd6b, 0xfe90, 0xfa58, 0xfbb2, +0xfa58, 0xfbb2, 0xf825, 0xf9ab, 0xf825, 0xf9ab, 0xf825, 0xf9ab, 0xf743, 0xf8eb, 0xf743, +0xf8eb, 0xf625, 0xf7e4, 0xf625, 0xf7e4, 0xf4e7, 0xf6b1, 0xf4e7, 0xf6b1, 0xf3d9, 0xf5a2, +0xf3d9, 0xf5a2, 0xf364, 0xf51f, 0xf364, 0xf51f, 0xf364, 0xf51f, 0xf36c, 0xf50f, 0xf36c, +0xf50f, 0xf3b1, 0xf531, 0xf3b1, 0xf531, 0xf40d, 0xf562, 0xf40d, 0xf562, 0xf4c4, 0xf5e8, +0xf4c4, 0xf5e8, 0xf619, 0xf709, 0xf619, 0xf709, 0xf749, 0xf804, 0xf749, 0xf804, 0xf749, +0xf804, 0xf8d3, 0xf95d, 0xf8d3, 0xf95d, 0xfa93, 0xfaf0, 0xfa93, 0xfaf0, 0xfbc6, 0xfc00, +0xfbc6, 0xfc00, 0xfca1, 0xfcc2, 0xfca1, 0xfcc2, 0xfd3f, 0xfd56, 0xfd3f, 0xfd56, 0xfd29, +0xfd45, 0xfd29, 0xfd45, 0xfd29, 0xfd45, 0xfca3, 0xfcd4, 0xfca3, 0xfcd4, 0xfc81, 0xfcd8, +0xfc81, 0xfcd8, 0xfb9b, 0xfc29, 0xfb9b, 0xfc29, 0xfa4a, 0xfb20, 0xfa4a, 0xfb20, 0xf92b, +0xfa57, 0xf92b, 0xfa57, 0xf92b, 0xfa57, 0xf751, 0xf8de, 0xf751, 0xf8de, 0xf581, 0xf779, +0xf581, 0xf779, 0xf458, 0xf6c0, 0xf458, 0xf6c0, 0xf340, 0xf61c, 0xf340, 0xf61c, 0xf14e, +0xf49b, 0xf14e, 0xf49b, 0xef47, 0xf300, 0xef47, 0xf300, 0xef47, 0xf300, 0xedf4, 0xf20e, +0xedf4, 0xf20e, 0xec80, 0xf0ef, 0xec80, 0xf0ef, 0xeba7, 0xf05b, 0xeba7, 0xf05b, 0xeb6f, +0xf054, 0xeb6f, 0xf054, 0xea8c, 0xef8d, 0xea8c, 0xef8d, 0xe9a6, 0xeeac, 0xe9a6, 0xeeac, +0xe9a6, 0xeeac, 0xe9ab, 0xeea0, 0xe9ab, 0xeea0, 0xea07, 0xeed3, 0xea07, 0xeed3, 0xea49, +0xeed6, 0xea49, 0xeed6, 0xeadb, 0xef14, 0xeadb, 0xef14, 0xebb4, 0xef86, 0xebb4, 0xef86, +0xebb4, 0xef86, 0xed17, 0xf073, 0xed17, 0xf073, 0xefc0, 0xf299, 0xefc0, 0xf299, 0xf281, +0xf4cd, 0xf281, 0xf4cd, 0xf4f2, 0xf6ab, 0xf4f2, 0xf6ab, 0xf860, 0xf982, 0xf860, 0xf982, +0xfc45, 0xfcd3, 0xfc45, 0xfcd3, 0xfc45, 0xfcd3, 0xffd9, 0xffd7, 0xffd9, 0xffd7, 0x3a1, +0x316, 0x3a1, 0x316, 0x705, 0x5fb, 0x705, 0x5fb, 0x919, 0x79a, 0x919, 0x79a, +0xb4d, 0x968, 0xb4d, 0x968, 0xdb7, 0xb77, 0xdb7, 0xb77, 0xdb7, 0xb77, 0xf7d, +0xcf0, 0xf7d, 0xcf0, 0x11d9, 0xf0f, 0x11d9, 0xf0f, 0x138d, 0x1091, 0x138d, 0x1091, +0x13e9, 0x10c6, 0x13e9, 0x10c6, 0x1519, 0x11da, 0x1519, 0x11da, 0x1519, 0x11da, 0x16c0, +0x136f, 0x16c0, 0x136f, 0x178f, 0x1433, 0x178f, 0x1433, 0x17e1, 0x147f, 0x17e1, 0x147f, +0x17b7, 0x1454, 0x17b7, 0x1454, 0x1743, 0x13e2, 0x1743, 0x13e2, 0x1796, 0x143a, 0x1796, +0x143a, 0x1796, 0x143a, 0x17c3, 0x146d, 0x17c3, 0x146d, 0x16f0, 0x13a3, 0x16f0, 0x13a3, +0x1675, 0x1331, 0x1675, 0x1331, 0x1678, 0x133f, 0x1678, 0x133f, 0x163a, 0x130f, 0x163a, +0x130f, 0x1570, 0x1257, 0x1570, 0x1257, 0x1570, 0x1257, 0x1463, 0x1160, 0x1463, 0x1160, +0x13ad, 0x10c5, 0x13ad, 0x10c5, 0x12f2, 0x102d, 0x12f2, 0x102d, 0x11e2, 0xf46, 0x11e2, +0xf46, 0x106e, 0xe04, 0x106e, 0xe04, 0x106e, 0xe04, 0xe5e, 0xc2e, 0xe5e, 0xc2e, +0xbb3, 0x9c7, 0xbb3, 0x9c7, 0x8e3, 0x742, 0x8e3, 0x742, 0x688, 0x53b, 0x688, +0x53b, 0x3aa, 0x2b7, 0x3aa, 0x2b7, 0x91, 0xfffe, 0x91, 0xfffe, 0x91, 0xfffe, +0xfea2, 0xfe73, 0xfea2, 0xfe73, 0xfd01, 0xfd38, 0xfd01, 0xfd38, 0xfad7, 0xfb74, 0xfad7, +0xfb74, 0xf783, 0xf884, 0xf783, 0xf884, 0xf38a, 0xf4eb, 0xf38a, 0xf4eb, 0xf38a, 0xf4eb, +0xf014, 0xf1cd, 0xf014, 0xf1cd, 0xed31, 0xef3c, 0xed31, 0xef3c, 0xeb1e, 0xed6f, 0xeb1e, +0xed6f, 0xe958, 0xebe6, 0xe958, 0xebe6, 0xe729, 0xe9e8, 0xe729, 0xe9e8, 0xe4e3, 0xe7c6, +0xe4e3, 0xe7c6, 0xe4e3, 0xe7c6, 0xe3e1, 0xe6de, 0xe3e1, 0xe6de, 0xe3a1, 0xe6ad, 0xe3a1, +0xe6ad, 0xe28d, 0xe59d, 0xe28d, 0xe59d, 0xe16f, 0xe47c, 0xe16f, 0xe47c, 0xe12c, 0xe42e, +0xe12c, 0xe42e, 0xe16d, 0xe461, 0xe16d, 0xe461, 0xe16d, 0xe461, 0xe1c9, 0xe4ab, 0xe1c9, +0xe4ab, 0xe2e6, 0xe5b7, 0xe2e6, 0xe5b7, 0xe459, 0xe719, 0xe459, 0xe719, 0xe57c, 0xe82f, +0xe57c, 0xe82f, 0xe761, 0xea0a, 0xe761, 0xea0a, 0xe761, 0xea0a, 0xe9b0, 0xec56, 0xe9b0, +0xec56, 0xeb5b, 0xee02, 0xeb5b, 0xee02, 0xec3f, 0xeeed, 0xec3f, 0xeeed, 0xeca8, 0xef62, +0xeca8, 0xef62, 0xec8a, 0xef53, 0xec8a, 0xef53, 0xec52, 0xef2e, 0xec52, 0xef2e, 0xec52, +0xef2e, 0xec9f, 0xef8c, 0xec9f, 0xef8c, 0xed0a, 0xf007, 0xed0a, 0xf007, 0xed12, 0xf01a, +0xed12, 0xf01a, 0xec80, 0xef8c, 0xec80, 0xef8c, 0xec4c, 0xef54, 0xec4c, 0xef54, 0xecaa, +0xefa1, 0xecaa, 0xefa1, 0xecaa, 0xefa1, 0xed01, 0xefda, 0xed01, 0xefda, 0xeda7, 0xf052, +0xeda7, 0xf052, 0xeed6, 0xf142, 0xeed6, 0xf142, 0xf144, 0xf362, 0xf144, 0xf362, 0xf485, +0xf644, 0xf485, 0xf644, 0xf485, 0xf644, 0xf7ad, 0xf8fd, 0xf7ad, 0xf8fd, 0xfb61, 0xfc34, +0xfb61, 0xfc34, 0xff22, 0xff6d, 0xff22, 0xff6d, 0x2b5, 0x26e, 0x2b5, 0x26e, 0x793, +0x6b4, 0x793, 0x6b4, 0xcec, 0xb72, 0xcec, 0xb72, 0xcec, 0xb72, 0x10e7, 0xed3, +0x10e7, 0xed3, 0x144a, 0x11a1, 0x144a, 0x11a1, 0x182f, 0x14f8, 0x182f, 0x14f8, 0x1bcb, +0x1813, 0x1bcb, 0x1813, 0x1e94, 0x1a68, 0x1e94, 0x1a68, 0x20b8, 0x1c2a, 0x20b8, 0x1c2a, +0x20b8, 0x1c2a, 0x21de, 0x1cff, 0x21de, 0x1cff, 0x22e7, 0x1dcc, 0x22e7, 0x1dcc, 0x2471, +0x1f2f, 0x2471, 0x1f2f, 0x24fd, 0x1fa8, 0x24fd, 0x1fa8, 0x24b8, 0x1f62, 0x24b8, 0x1f62, +0x24b8, 0x1f62, 0x24b0, 0x1f6d, 0x24b0, 0x1f6d, 0x246a, 0x1f49, 0x246a, 0x1f49, 0x23a7, +0x1eb5, 0x23a7, 0x1eb5, 0x2276, 0x1dbe, 0x2276, 0x1dbe, 0x20d0, 0x1c58, 0x20d0, 0x1c58, +0x1f1e, 0x1aec, 0x1f1e, 0x1aec, 0x1f1e, 0x1aec, 0x1dce, 0x19e4, 0x1dce, 0x19e4, 0x1c8b, +0x18e7, 0x1c8b, 0x18e7, 0x1ab1, 0x1750, 0x1ab1, 0x1750, 0x1882, 0x155e, 0x1882, 0x155e, +0x160e, 0x1320, 0x160e, 0x1320, 0x1382, 0x10c3, 0x1382, 0x10c3, 0x1382, 0x10c3, 0x1135, +0xe9c, 0x1135, 0xe9c, 0xe9a, 0xc21, 0xe9a, 0xc21, 0xbff, 0x99d, 0xbff, 0x99d, +0x9a1, 0x751, 0x9a1, 0x751, 0x7a9, 0x567, 0x7a9, 0x567, 0x7a9, 0x567, 0x6e8, +0x4b1, 0x6e8, 0x4b1, 0x6d5, 0x4a9, 0x6d5, 0x4a9, 0x695, 0x476, 0x695, 0x476, +0x65f, 0x452, 0x65f, 0x452, 0x5ff, 0x408, 0x5ff, 0x408, 0x4f3, 0x31a, 0x4f3, +0x31a, 0x4f3, 0x31a, 0x40f, 0x25a, 0x40f, 0x25a, 0x351, 0x1c9, 0x351, 0x1c9, +0x223, 0xd0, 0x223, 0xd0, 0x9d, 0xff87, 0x9d, 0xff87, 0xfe62, 0xfd90, 0xfe62, +0xfd90, 0xfc50, 0xfbc6, 0xfc50, 0xfbc6, 0xfc50, 0xfbc6, 0xfb58, 0xfb18, 0xfb58, 0xfb18, +0xfa3c, 0xfa47, 0xfa3c, 0xfa47, 0xf838, 0xf88d, 0xf838, 0xf88d, 0xf6fc, 0xf796, 0xf6fc, +0xf796, 0xf6b7, 0xf78f, 0xf6b7, 0xf78f, 0xf6b7, 0xf78f, 0xf620, 0xf72d, 0xf620, 0xf72d, +0xf59e, 0xf6d6, 0xf59e, 0xf6d6, 0xf505, 0xf65d, 0xf505, 0xf65d, 0xf446, 0xf5b1, 0xf446, +0xf5b1, 0xf455, 0xf5c6, 0xf455, 0xf5c6, 0xf530, 0xf69b, 0xf530, 0xf69b, 0xf530, 0xf69b, +0xf5e7, 0xf741, 0xf5e7, 0xf741, 0xf69b, 0xf7db, 0xf69b, 0xf7db, 0xf7d7, 0xf8f5, 0xf7d7, +0xf8f5, 0xf92e, 0xfa26, 0xf92e, 0xfa26, 0xfa9f, 0xfb70, 0xfa9f, 0xfb70, 0xfc3d, 0xfce8, +0xfc3d, 0xfce8, 0xfc3d, 0xfce8, 0xfdb3, 0xfe3e, 0xfdb3, 0xfe3e, 0xfe8b, 0xfefe, 0xfe8b, +0xfefe, 0xff80, 0xffe5, 0xff80, 0xffe5, 0x5d, 0xc4, 0x5d, 0xc4, 0xffa5, 0x1b, +0xffa5, 0x1b, 0xffa5, 0x1b, 0xfe38, 0xfecf, 0xfe38, 0xfecf, 0xfcfe, 0xfdc8, 0xfcfe, +0xfdc8, 0xfbfc, 0xfd08, 0xfbfc, 0xfd08, 0xfb12, 0xfc71, 0xfb12, 0xfc71, 0xfa14, 0xfbd3, +0xfa14, 0xfbd3, 0xf8ed, 0xfb19, 0xf8ed, 0xfb19, 0xf8ed, 0xfb19, 0xf7fc, 0xfa9c, 0xf7fc, +0xfa9c, 0xf6e2, 0xf9fb, 0xf6e2, 0xf9fb, 0xf465, 0xf7f7, 0xf465, 0xf7f7, 0xf1b5, 0xf5bd, +0xf1b5, 0xf5bd, 0xef6e, 0xf3e5, 0xef6e, 0xf3e5, 0xed87, 0xf260, 0xed87, 0xf260, 0xed87, +0xf260, 0xecb7, 0xf1e3, 0xecb7, 0xf1e3, 0xec25, 0xf191, 0xec25, 0xf191, 0xeabd, 0xf053, +0xeabd, 0xf053, 0xe931, 0xeed9, 0xe931, 0xeed9, 0xe8ab, 0xee4d, 0xe8ab, 0xee4d, 0xe8ab, +0xee4d, 0xe816, 0xed99, 0xe816, 0xed99, 0xe76f, 0xecb9, 0xe76f, 0xecb9, 0xe802, 0xecfc, +0xe802, 0xecfc, 0xe971, 0xee07, 0xe971, 0xee07, 0xea8d, 0xeeac, 0xea8d, 0xeeac, 0xebc7, +0xef5f, 0xebc7, 0xef5f, 0xebc7, 0xef5f, 0xee3c, 0xf141, 0xee3c, 0xf141, 0xf0bf, 0xf32b, +0xf0bf, 0xf32b, 0xf3f4, 0xf5c2, 0xf3f4, 0xf5c2, 0xf80b, 0xf93c, 0xf80b, 0xf93c, 0xfba9, +0xfc40, 0xfba9, 0xfc40, 0xff6d, 0xff72, 0xff6d, 0xff72, 0xff6d, 0xff72, 0x2ff, 0x27c, +0x2ff, 0x27c, 0x602, 0x504, 0x602, 0x504, 0x874, 0x70a, 0x874, 0x70a, 0xa25, +0x85d, 0xa25, 0x85d, 0xbc1, 0x9aa, 0xbc1, 0x9aa, 0xbc1, 0x9aa, 0xe07, 0xbb2, +0xe07, 0xbb2, 0xfa7, 0xd22, 0xfa7, 0xd22, 0xfbd, 0xd15, 0xfbd, 0xd15, 0x1031, +0xd73, 0x1031, 0xd73, 0x10eb, 0xe20, 0x10eb, 0xe20, 0x1159, 0xe89, 0x1159, 0xe89, +0x1159, 0xe89, 0x11df, 0xf10, 0x11df, 0xf10, 0x1237, 0xf6c, 0x1237, 0xf6c, 0x1233, +0xf70, 0x1233, 0xf70, 0x118f, 0xed5, 0x118f, 0xed5, 0x10fe, 0xe4c, 0x10fe, 0xe4c, +0x10fe, 0xe4c, 0x113a, 0xe90, 0x113a, 0xe90, 0x11fa, 0xf58, 0x11fa, 0xf58, 0x1244, +0xfaa, 0x1244, 0xfaa, 0x1248, 0xfb7, 0x1248, 0xfb7, 0x12b5, 0x102e, 0x12b5, 0x102e, +0x12be, 0x1045, 0x12be, 0x1045, 0x12be, 0x1045, 0x12c8, 0x1062, 0x12c8, 0x1062, 0x12f8, +0x10ab, 0x12f8, 0x10ab, 0x122a, 0xffe, 0x122a, 0xffe, 0x10d4, 0xed2, 0x10d4, 0xed2, +0xf33, 0xd64, 0xf33, 0xd64, 0xcc1, 0xb30, 0xcc1, 0xb30, 0xcc1, 0xb30, 0xa60, +0x918, 0xa60, 0x918, 0x826, 0x731, 0x826, 0x731, 0x57b, 0x4e3, 0x57b, 0x4e3, +0x331, 0x2fe, 0x331, 0x2fe, 0x192, 0x1cb, 0x192, 0x1cb, 0x192, 0x1cb, 0xffe5, +0x8e, 0xffe5, 0x8e, 0xfd72, 0xfe8c, 0xfd72, 0xfe8c, 0xfa6e, 0xfbfb, 0xfa6e, 0xfbfb, +0xf735, 0xf92f, 0xf735, 0xf92f, 0xf3bd, 0xf620, 0xf3bd, 0xf620, 0xf159, 0xf41c, 0xf159, +0xf41c, 0xf159, 0xf41c, 0xeffe, 0xf317, 0xeffe, 0xf317, 0xedf0, 0xf152, 0xedf0, 0xf152, +0xebb1, 0xef4e, 0xebb1, 0xef4e, 0xea83, 0xee4d, 0xea83, 0xee4d, 0xe9f1, 0xedd9, 0xe9f1, +0xedd9, 0xe91f, 0xed16, 0xe91f, 0xed16, 0xe91f, 0xed16, 0xe7fb, 0xebf3, 0xe7fb, 0xebf3, +0xe686, 0xea73, 0xe686, 0xea73, 0xe55f, 0xe936, 0xe55f, 0xe936, 0xe55f, 0xe919, 0xe55f, +0xe919, 0xe5aa, 0xe93f, 0xe5aa, 0xe93f, 0xe5aa, 0xe93f, 0xe629, 0xe996, 0xe629, 0xe996, +0xe76e, 0xeab1, 0xe76e, 0xeab1, 0xe875, 0xeb8f, 0xe875, 0xeb8f, 0xe98c, 0xec80, 0xe98c, +0xec80, 0xeb1c, 0xedee, 0xeb1c, 0xedee, 0xec0b, 0xeec1, 0xec0b, 0xeec1, 0xec0b, 0xeec1, +0xec7a, 0xef19, 0xec7a, 0xef19, 0xed05, 0xef92, 0xed05, 0xef92, 0xed43, 0xefc4, 0xed43, +0xefc4, 0xec9d, 0xef15, 0xec9d, 0xef15, 0xec48, 0xeeba, 0xec48, 0xeeba, 0xed13, 0xef7e, +0xed13, 0xef7e, 0xed13, 0xef7e, 0xed0f, 0xef72, 0xed0f, 0xef72, 0xec6a, 0xeebf, 0xec6a, +0xeebf, 0xec61, 0xeea0, 0xec61, 0xeea0, 0xec62, 0xee82, 0xec62, 0xee82, 0xecca, 0xeebf, +0xecca, 0xeebf, 0xecca, 0xeebf, 0xed60, 0xef1b, 0xed60, 0xef1b, 0xede3, 0xef56, 0xede3, +0xef56, 0xef76, 0xf090, 0xef76, 0xf090, 0xf24a, 0xf2fc, 0xf24a, 0xf2fc, 0xf5a2, 0xf5dc, +0xf5a2, 0xf5dc, 0xf94f, 0xf903, 0xf94f, 0xf903, 0xf94f, 0xf903, 0xfe17, 0xfd3b, 0xfe17, +0xfd3b, 0x2fa, 0x184, 0x2fa, 0x184, 0x6ec, 0x4d7, 0x6ec, 0x4d7, 0xb03, 0x84d, +0xb03, 0x84d, 0xf3d, 0xbe7, 0xf3d, 0xbe7, 0x1326, 0xf37, 0x1326, 0xf37, 0x1326, +0xf37, 0x16d3, 0x1255, 0x16d3, 0x1255, 0x1a20, 0x1520, 0x1a20, 0x1520, 0x1cc0, 0x1750, +0x1cc0, 0x1750, 0x1ebd, 0x18f0, 0x1ebd, 0x18f0, 0x207f, 0x1a6b, 0x207f, 0x1a6b, 0x207f, +0x1a6b, 0x225a, 0x1c15, 0x225a, 0x1c15, 0x23ca, 0x1d6e, 0x23ca, 0x1d6e, 0x242f, 0x1dd3, +0x242f, 0x1dd3, 0x24eb, 0x1ea6, 0x24eb, 0x1ea6, 0x2602, 0x1fea, 0x2602, 0x1fea, 0x260e, +0x2034, 0x260e, 0x2034, 0x260e, 0x2034, 0x2528, 0x1f9d, 0x2528, 0x1f9d, 0x23c4, 0x1e95, +0x23c4, 0x1e95, 0x2247, 0x1d7d, 0x2247, 0x1d7d, 0x2088, 0x1c29, 0x2088, 0x1c29, 0x1ef6, +0x1b03, 0x1ef6, 0x1b03, 0x1dd6, 0x1a4e, 0x1dd6, 0x1a4e, 0x1dd6, 0x1a4e, 0x1c62, 0x1941, +0x1c62, 0x1941, 0x19b7, 0x16f4, 0x19b7, 0x16f4, 0x16c7, 0x145b, 0x16c7, 0x145b, 0x1573, +0x1353, 0x1573, 0x1353, 0x13de, 0x11ff, 0x13de, 0x11ff, 0x13de, 0x11ff, 0x10c8, 0xf20, +0x10c8, 0xf20, 0xd8a, 0xc0e, 0xd8a, 0xc0e, 0xad1, 0x977, 0xad1, 0x977, 0x903, +0x7c5, 0x903, 0x7c5, 0x85b, 0x733, 0x85b, 0x733, 0x816, 0x703, 0x816, 0x703, +0x816, 0x703, 0x70d, 0x60c, 0x70d, 0x60c, 0x684, 0x598, 0x684, 0x598, 0x6d8, +0x604, 0x6d8, 0x604, 0x6c9, 0x613, 0x6c9, 0x613, 0x623, 0x592, 0x623, 0x592, +0x536, 0x4d0, 0x536, 0x4d0, 0x536, 0x4d0, 0x48d, 0x45b, 0x48d, 0x45b, 0x36f, +0x378, 0x36f, 0x378, 0x1fd, 0x248, 0x1fd, 0x248, 0x64, 0xf4, 0x64, 0xf4, +0xfe46, 0xff1e, 0xfe46, 0xff1e, 0xfe46, 0xff1e, 0xfbc9, 0xfcea, 0xfbc9, 0xfcea, 0xf8c2, +0xfa28, 0xf8c2, 0xfa28, 0xf61b, 0xf7c3, 0xf61b, 0xf7c3, 0xf490, 0xf671, 0xf490, 0xf671, +0xf3dc, 0xf5ed, 0xf3dc, 0xf5ed, 0xf307, 0xf53b, 0xf307, 0xf53b, 0xf307, 0xf53b, 0xf23e, +0xf487, 0xf23e, 0xf487, 0xf1e6, 0xf436, 0xf1e6, 0xf436, 0xf13c, 0xf384, 0xf13c, 0xf384, +0xf0f2, 0xf323, 0xf0f2, 0xf323, 0xf13d, 0xf349, 0xf13d, 0xf349, 0xf1b6, 0xf392, 0xf1b6, +0xf392, 0xf1b6, 0xf392, 0xf306, 0xf4a8, 0xf306, 0xf4a8, 0xf506, 0xf669, 0xf506, 0xf669, +0xf6a2, 0xf7c1, 0xf6a2, 0xf7c1, 0xf88a, 0xf966, 0xf88a, 0xf966, 0xfad1, 0xfb6f, 0xfad1, +0xfb6f, 0xfad1, 0xfb6f, 0xfbe4, 0xfc4b, 0xfbe4, 0xfc4b, 0xfc7b, 0xfcb6, 0xfc7b, 0xfcb6, +0xfd17, 0xfd35, 0xfd17, 0xfd35, 0xfce8, 0xfcf8, 0xfce8, 0xfcf8, 0xfbfa, 0xfc0f, 0xfbfa, +0xfc0f, 0xfb17, 0xfb43, 0xfb17, 0xfb43, 0xfb17, 0xfb43, 0xf9e1, 0xfa39, 0xf9e1, 0xfa39, +0xf832, 0xf8c7, 0xf832, 0xf8c7, 0xf751, 0xf834, 0xf751, 0xf834, 0xf6e1, 0xf821, 0xf6e1, +0xf821, 0xf5d8, 0xf780, 0xf5d8, 0xf780, 0xf3de, 0xf5f6, 0xf3de, 0xf5f6, 0xf3de, 0xf5f6, +0xf1a1, 0xf42d, 0xf1a1, 0xf42d, 0xefc5, 0xf2c5, 0xefc5, 0xf2c5, 0xee92, 0xf1ff, 0xee92, +0xf1ff, 0xeda3, 0xf175, 0xeda3, 0xf175, 0xec48, 0xf071, 0xec48, 0xf071, 0xec48, 0xf071, +0xeb90, 0xefff, 0xeb90, 0xefff, 0xeb13, 0xefb5, 0xeb13, 0xefb5, 0xea82, 0xef41, 0xea82, +0xef41, 0xea97, 0xef5a, 0xea97, 0xef5a, 0xeac4, 0xef74, 0xeac4, 0xef74, 0xeaa0, 0xef24, +0xeaa0, 0xef24, 0xeaa0, 0xef24, 0xea91, 0xeed3, 0xea91, 0xeed3, 0xeb2a, 0xef14, 0xeb2a, +0xef14, 0xec40, 0xefc0, 0xec40, 0xefc0, 0xee3c, 0xf143, 0xee3c, 0xf143, 0xf091, 0xf312, +0xf091, 0xf312, 0xf091, 0xf312, 0xf30c, 0xf500, 0xf30c, 0xf500, 0xf698, 0xf7fa, 0xf698, +0xf7fa, 0xfa9f, 0xfb70, 0xfa9f, 0xfb70, 0xfeae, 0xfef0, 0xfeae, 0xfef0, 0x25a, 0x214, +0x25a, 0x214, 0x55e, 0x499, 0x55e, 0x499, 0x55e, 0x499, 0x822, 0x6eb, 0x822, +0x6eb, 0xb22, 0x985, 0xb22, 0x985, 0xd50, 0xb5b, 0xd50, 0xb5b, 0xeb3, 0xc74, +0xeb3, 0xc74, 0x1074, 0xdf9, 0x1074, 0xdf9, 0x120d, 0xf64, 0x120d, 0xf64, 0x120d, +0xf64, 0x13db, 0x110f, 0x13db, 0x110f, 0x14f9, 0x1215, 0x14f9, 0x1215, 0x154b, 0x1257, +0x154b, 0x1257, 0x15e7, 0x12ea, 0x15e7, 0x12ea, 0x162f, 0x132e, 0x162f, 0x132e, 0x162f, +0x132e, 0x15dd, 0x12da, 0x15dd, 0x12da, 0x14f7, 0x11f3, 0x14f7, 0x11f3, 0x14b8, 0x11b5, +0x14b8, 0x11b5, 0x14fe, 0x11fc, 0x14fe, 0x11fc, 0x151c, 0x121a, 0x151c, 0x121a, 0x1542, +0x123f, 0x1542, 0x123f, 0x1542, 0x123f, 0x1493, 0x1191, 0x1493, 0x1191, 0x138c, 0x108c, +0x138c, 0x108c, 0x1331, 0x1037, 0x1331, 0x1037, 0x1382, 0x1092, 0x1382, 0x1092, 0x1366, +0x1088, 0x1366, 0x1088, 0x125e, 0xf98, 0x125e, 0xf98, 0x125e, 0xf98, 0x114a, 0xea7, +0x114a, 0xea7, 0xfd3, 0xd5d, 0xfd3, 0xd5d, 0xda7, 0xb6b, 0xda7, 0xb6b, 0xbad, +0x9b6, 0xbad, 0x9b6, 0x95e, 0x7b8, 0x95e, 0x7b8, 0x95e, 0x7b8, 0x64a, 0x502, +0x64a, 0x502, 0x3bc, 0x2db, 0x3bc, 0x2db, 0x1b3, 0x143, 0x1b3, 0x143, 0xffc0, +0xffc6, 0xffc0, 0xffc6, 0xfd92, 0xfe14, 0xfd92, 0xfe14, 0xfab2, 0xfbb0, 0xfab2, 0xfbb0, +0xfab2, 0xfbb0, 0xf7e1, 0xf95a, 0xf7e1, 0xf95a, 0xf5a6, 0xf795, 0xf5a6, 0xf795, 0xf337, +0xf595, 0xf337, 0xf595, 0xf040, 0xf301, 0xf040, 0xf301, 0xedc3, 0xf0dc, 0xedc3, 0xf0dc, +0xeb83, 0xeee6, 0xeb83, 0xeee6, 0xeb83, 0xeee6, 0xe94a, 0xece7, 0xe94a, 0xece7, 0xe818, +0xebde, 0xe818, 0xebde, 0xe6dc, 0xeabb, 0xe6dc, 0xeabb, 0xe4c8, 0xe8b1, 0xe4c8, 0xe8b1, +0xe379, 0xe75d, 0xe379, 0xe75d, 0xe379, 0xe75d, 0xe32a, 0xe6fc, 0xe32a, 0xe6fc, 0xe29e, +0xe653, 0xe29e, 0xe653, 0xe26d, 0xe5ff, 0xe26d, 0xe5ff, 0xe31b, 0xe683, 0xe31b, 0xe683, +0xe390, 0xe6cc, 0xe390, 0xe6cc, 0xe41d, 0xe72e, 0xe41d, 0xe72e, 0xe41d, 0xe72e, 0xe5f1, +0xe8d9, 0xe5f1, 0xe8d9, 0xe7eb, 0xeaae, 0xe7eb, 0xeaae, 0xe93b, 0xebe0, 0xe93b, 0xebe0, +0xea91, 0xed20, 0xea91, 0xed20, 0xeb8f, 0xee0f, 0xeb8f, 0xee0f, 0xece9, 0xef62, 0xece9, +0xef62, 0xece9, 0xef62, 0xee3f, 0xf0b7, 0xee3f, 0xf0b7, 0xee8c, 0xf107, 0xee8c, 0xf107, +0xef19, 0xf19b, 0xef19, 0xf19b, 0xef41, 0xf1cb, 0xef41, 0xf1cb, 0xee6d, 0xf0fb, 0xee6d, +0xf0fb, 0xee6d, 0xf0fb, 0xede9, 0xf075, 0xede9, 0xf075, 0xedf0, 0xf072, 0xedf0, 0xf072, +0xed7b, 0xefe7, 0xed7b, 0xefe7, 0xecbd, 0xef06, 0xecbd, 0xef06, 0xed70, 0xef85, 0xed70, +0xef85, 0xeec5, 0xf095, 0xeec5, 0xf095, 0xeec5, 0xf095, 0xefac, 0xf124, 0xefac, 0xf124, +0xf125, 0xf233, 0xf125, 0xf233, 0xf407, 0xf49a, 0xf407, 0xf49a, 0xf86e, 0xf875, 0xf86e, +0xf875, 0xfd6b, 0xfcd9, 0xfd6b, 0xfcd9, 0x240, 0x10b, 0x240, 0x10b, 0x240, 0x10b, +0x6af, 0x4d0, 0x6af, 0x4d0, 0xb1c, 0x891, 0xb1c, 0x891, 0xfd2, 0xc9c, 0xfd2, +0xc9c, 0x1440, 0x1065, 0x1440, 0x1065, 0x1853, 0x13df, 0x1853, 0x13df, 0x1853, 0x13df, +0x1ba0, 0x16a0, 0x1ba0, 0x16a0, 0x1e43, 0x18c9, 0x1e43, 0x18c9, 0x20c8, 0x1aeb, 0x20c8, +0x1aeb, 0x22a9, 0x1c7f, 0x22a9, 0x1c7f, 0x23c7, 0x1d6a, 0x23c7, 0x1d6a, 0x248d, 0x1e17, +0x248d, 0x1e17, 0x248d, 0x1e17, 0x253f, 0x1eca, 0x253f, 0x1eca, 0x25a2, 0x1f46, 0x25a2, +0x1f46, 0x25b8, 0x1f8c, 0x25b8, 0x1f8c, 0x2599, 0x1fb2, 0x2599, 0x1fb2, 0x24d3, 0x1f42, +0x24d3, 0x1f42, 0x235d, 0x1e2f, 0x235d, 0x1e2f, 0x235d, 0x1e2f, 0x21bc, 0x1cfd, 0x21bc, +0x1cfd, 0x2083, 0x1c36, 0x2083, 0x1c36, 0x1f19, 0x1b43, 0x1f19, 0x1b43, 0x1cf4, 0x1991, +0x1cf4, 0x1991, 0x1a6b, 0x1777, 0x1a6b, 0x1777, 0x1a6b, 0x1777, 0x182f, 0x15a4, 0x182f, +0x15a4, 0x16ad, 0x1480, 0x16ad, 0x1480, 0x14d6, 0x12fe, 0x14d6, 0x12fe, 0x121c, 0x108c, +0x121c, 0x108c, 0xeea, 0xd98, 0xeea, 0xd98, 0xbcf, 0xaaf, 0xbcf, 0xaaf, 0xbcf, +0xaaf, 0x95e, 0x869, 0x95e, 0x869, 0x7af, 0x6dc, 0x7af, 0x6dc, 0x693, 0x5dd, +0x693, 0x5dd, 0x597, 0x4fb, 0x597, 0x4fb, 0x4e2, 0x45f, 0x4e2, 0x45f, 0x49b, +0x433, 0x49b, 0x433, 0x49b, 0x433, 0x42d, 0x3e4, 0x42d, 0x3e4, 0x395, 0x36f, +0x395, 0x36f, 0x31a, 0x31f, 0x31a, 0x31f, 0x2d5, 0x30c, 0x2d5, 0x30c, 0x30a, +0x379, 0x30a, 0x379, 0x30a, 0x379, 0x2ac, 0x359, 0x2ac, 0x359, 0xf0, 0x1e1, +0xf0, 0x1e1, 0xff3b, 0x72, 0xff3b, 0x72, 0xfd60, 0xfedd, 0xfd60, 0xfedd, 0xfb49, +0xfd0b, 0xfb49, 0xfd0b, 0xfa06, 0xfc08, 0xfa06, 0xfc08, 0xfa06, 0xfc08, 0xf892, 0xfacc, +0xf892, 0xfacc, 0xf6dc, 0xf944, 0xf6dc, 0xf944, 0xf5d7, 0xf85f, 0xf5d7, 0xf85f, 0xf51e, +0xf7b8, 0xf51e, 0xf7b8, 0xf4f4, 0xf78f, 0xf4f4, 0xf78f, 0xf54b, 0xf7d7, 0xf54b, 0xf7d7, +0xf54b, 0xf7d7, 0xf50a, 0xf773, 0xf50a, 0xf773, 0xf51d, 0xf755, 0xf51d, 0xf755, 0xf692, +0xf888, 0xf692, 0xf888, 0xf823, 0xf9cb, 0xf823, 0xf9cb, 0xf8cd, 0xfa1c, 0xf8cd, 0xfa1c, +0xf8cd, 0xfa1c, 0xf963, 0xfa53, 0xf963, 0xfa53, 0xfadd, 0xfb6c, 0xfadd, 0xfb6c, 0xfcd0, +0xfcff, 0xfcd0, 0xfcff, 0xfef6, 0xfeca, 0xfef6, 0xfeca, 0x8b, 0xf, 0x8b, 0xf, +0x157, 0x97, 0x157, 0x97, 0x157, 0x97, 0x1a5, 0xb3, 0x1a5, 0xb3, 0x110, +0xffff, 0x110, 0xffff, 0x5e, 0xff43, 0x5e, 0xff43, 0xff21, 0xfe13, 0xff21, 0xfe13, +0xfd75, 0xfc8b, 0xfd75, 0xfc8b, 0xfd75, 0xfc8b, 0xfc62, 0xfbb2, 0xfc62, 0xfbb2, 0xfbc8, +0xfb67, 0xfbc8, 0xfb67, 0xfb45, 0xfb43, 0xfb45, 0xfb43, 0xf988, 0xf9f4, 0xf988, 0xf9f4, +0xf764, 0xf849, 0xf764, 0xf849, 0xf5cb, 0xf72e, 0xf5cb, 0xf72e, 0xf5cb, 0xf72e, 0xf3cb, +0xf5ae, 0xf3cb, 0xf5ae, 0xf16c, 0xf3cb, 0xf16c, 0xf3cb, 0xef6c, 0xf240, 0xef6c, 0xf240, +0xedf2, 0xf12d, 0xedf2, 0xf12d, 0xec3e, 0xefd0, 0xec3e, 0xefd0, 0xeb18, 0xeeed, 0xeb18, +0xeeed, 0xeb18, 0xeeed, 0xeb00, 0xef02, 0xeb00, 0xef02, 0xea8b, 0xeea1, 0xea8b, 0xeea1, +0xe971, 0xed82, 0xe971, 0xed82, 0xe8c7, 0xecba, 0xe8c7, 0xecba, 0xe8ac, 0xec69, 0xe8ac, +0xec69, 0xe8ac, 0xec69, 0xe885, 0xebf6, 0xe885, 0xebf6, 0xe8c7, 0xebd8, 0xe8c7, 0xebd8, +0xea13, 0xecb3, 0xea13, 0xecb3, 0xec4a, 0xee6d, 0xec4a, 0xee6d, 0xeeb8, 0xf053, 0xeeb8, +0xf053, 0xf1aa, 0xf2b9, 0xf1aa, 0xf2b9, 0xf1aa, 0xf2b9, 0xf547, 0xf5c8, 0xf547, 0xf5c8, +0xf8cc, 0xf8c2, 0xf8cc, 0xf8c2, 0xfc68, 0xfbd9, 0xfc68, 0xfbd9, 0x2d, 0xff21, 0x2d, +0xff21, 0x3fb, 0x27d, 0x3fb, 0x27d, 0x6c4, 0x4e2, 0x6c4, 0x4e2, 0x6c4, 0x4e2, +0x84b, 0x612, 0x84b, 0x612, 0xa47, 0x7c5, 0xa47, 0x7c5, 0xcb1, 0x9f4, 0xcb1, +0x9f4, 0xdeb, 0xb02, 0xdeb, 0xb02, 0xe40, 0xb36, 0xe40, 0xb36, 0xe40, 0xb36, +0xf2f, 0xc10, 0xf2f, 0xc10, 0xfeb, 0xcbf, 0xfeb, 0xcbf, 0x1027, 0xcf5, 0x1027, +0xcf5, 0x1076, 0xd44, 0x1076, 0xd44, 0x1020, 0xcf1, 0x1020, 0xcf1, 0xf7a, 0xc51, +0xf7a, 0xc51, 0xf7a, 0xc51, 0xf38, 0xc16, 0xf38, 0xc16, 0xf75, 0xc5a, 0xf75, +0xc5a, 0xfc8, 0xcb5, 0xfc8, 0xcb5, 0xfd7, 0xccc, 0xfd7, 0xccc, 0xfe7, 0xce4, +0xfe7, 0xce4, 0x1029, 0xd32, 0x1029, 0xd32, 0x1029, 0xd32, 0x10a8, 0xdbf, 0x10a8, +0xdbf, 0x1152, 0xe7d, 0x1152, 0xe7d, 0x11d6, 0xf1a, 0x11d6, 0xf1a, 0x11bb, 0xf21, +0x11bb, 0xf21, 0x111d, 0xeae, 0x111d, 0xeae, 0x111d, 0xeae, 0x1011, 0xdd8, 0x1011, +0xdd8, 0xeea, 0xcf2, 0xeea, 0xcf2, 0xde6, 0xc3b, 0xde6, 0xc3b, 0xc2f, 0xade, +0xc2f, 0xade, 0x97f, 0x891, 0x97f, 0x891, 0x6fe, 0x67e, 0x6fe, 0x67e, 0x6fe, +0x67e, 0x500, 0x4f6, 0x500, 0x4f6, 0x2a1, 0x314, 0x2a1, 0x314, 0x9b, 0x18e, +0x9b, 0x18e, 0xfead, 0x21, 0xfead, 0x21, 0xfc50, 0xfe42, 0xfc50, 0xfe42, 0xfa8b, +0xfcf7, 0xfa8b, 0xfcf7, 0xfa8b, 0xfcf7, 0xf81f, 0xfafc, 0xf81f, 0xfafc, 0xf4d7, 0xf81b, +0xf4d7, 0xf81b, 0xf236, 0xf5d4, 0xf236, 0xf5d4, 0xf008, 0xf3f0, 0xf008, 0xf3f0, 0xedf5, +0xf217, 0xedf5, 0xf217, 0xedf5, 0xf217, 0xec69, 0xf0b5, 0xec69, 0xf0b5, 0xeb3d, 0xefa1, +0xeb3d, 0xefa1, 0xe99d, 0xee09, 0xe99d, 0xee09, 0xe850, 0xecb5, 0xe850, 0xecb5, 0xe7c4, +0xec15, 0xe7c4, 0xec15, 0xe703, 0xeb34, 0xe703, 0xeb34, 0xe703, 0xeb34, 0xe678, 0xea82, +0xe678, 0xea82, 0xe66f, 0xea4b, 0xe66f, 0xea4b, 0xe6cd, 0xea7a, 0xe6cd, 0xea7a, 0xe807, +0xeb85, 0xe807, 0xeb85, 0xe92c, 0xec7d, 0xe92c, 0xec7d, 0xe9b2, 0xecdb, 0xe9b2, 0xecdb, +0xe9b2, 0xecdb, 0xea62, 0xed6a, 0xea62, 0xed6a, 0xeb1f, 0xee0e, 0xeb1f, 0xee0e, 0xec17, +0xeef6, 0xec17, 0xeef6, 0xed0e, 0xefe5, 0xed0e, 0xefe5, 0xed77, 0xf04d, 0xed77, 0xf04d, +0xed77, 0xf04d, 0xeda0, 0xf07c, 0xeda0, 0xf07c, 0xed67, 0xf04b, 0xed67, 0xf04b, 0xed4c, +0xf03b, 0xed4c, 0xf03b, 0xed3a, 0xf031, 0xed3a, 0xf031, 0xec74, 0xef6f, 0xec74, 0xef6f, +0xebb9, 0xeeaf, 0xebb9, 0xeeaf, 0xebb9, 0xeeaf, 0xeb6f, 0xee55, 0xeb6f, 0xee55, 0xeb7e, +0xee46, 0xeb7e, 0xee46, 0xebe8, 0xee81, 0xebe8, 0xee81, 0xec54, 0xeeac, 0xec54, 0xeeac, +0xed1a, 0xef1e, 0xed1a, 0xef1e, 0xef2c, 0xf0c8, 0xef2c, 0xf0c8, 0xef2c, 0xf0c8, 0xf26e, +0xf38f, 0xf26e, 0xf38f, 0xf646, 0xf6db, 0xf646, 0xf6db, 0xfa59, 0xfa52, 0xfa59, 0xfa52, +0xfded, 0xfd3e, 0xfded, 0xfd3e, 0x198, 0x38, 0x198, 0x38, 0x198, 0x38, 0x656, +0x440, 0x656, 0x440, 0xb45, 0x878, 0xb45, 0x878, 0xfa9, 0xc2a, 0xfa9, 0xc2a, +0x13a0, 0xf79, 0x13a0, 0xf79, 0x1748, 0x1286, 0x1748, 0x1286, 0x1a81, 0x1535, 0x1a81, +0x1535, 0x1a81, 0x1535, 0x1d35, 0x1775, 0x1d35, 0x1775, 0x1f8a, 0x196f, 0x1f8a, 0x196f, +0x2150, 0x1af3, 0x2150, 0x1af3, 0x224d, 0x1bc9, 0x224d, 0x1bc9, 0x22b4, 0x1c26, 0x22b4, +0x1c26, 0x23b2, 0x1d34, 0x23b2, 0x1d34, 0x23b2, 0x1d34, 0x251a, 0x1ec7, 0x251a, 0x1ec7, +0x2530, 0x1f1f, 0x2530, 0x1f1f, 0x245d, 0x1ea2, 0x245d, 0x1ea2, 0x23eb, 0x1e98, 0x23eb, +0x1e98, 0x23d9, 0x1efb, 0x23d9, 0x1efb, 0x23d9, 0x1efb, 0x22db, 0x1e7a, 0x22db, 0x1e7a, +0x20b1, 0x1cd3, 0x20b1, 0x1cd3, 0x1e8d, 0x1b32, 0x1e8d, 0x1b32, 0x1c63, 0x1988, 0x1c63, +0x1988, 0x1ac5, 0x1865, 0x1ac5, 0x1865, 0x19c6, 0x17d6, 0x19c6, 0x17d6, 0x19c6, 0x17d6, +0x17ab, 0x1620, 0x17ab, 0x1620, 0x14bd, 0x138c, 0x14bd, 0x138c, 0x127b, 0x1196, 0x127b, +0x1196, 0x107d, 0xfd7, 0x107d, 0xfd7, 0xdfd, 0xd8b, 0xdfd, 0xd8b, 0xb8a, 0xb40, +0xb8a, 0xb40, 0xb8a, 0xb40, 0x984, 0x959, 0x984, 0x959, 0x830, 0x81d, 0x830, +0x81d, 0x7b9, 0x7b9, 0x7b9, 0x7b9, 0x719, 0x72a, 0x719, 0x72a, 0x5dd, 0x600, +0x5dd, 0x600, 0x5dd, 0x600, 0x522, 0x558, 0x522, 0x558, 0x4d9, 0x526, 0x4d9, +0x526, 0x4ff, 0x569, 0x4ff, 0x569, 0x5ca, 0x657, 0x5ca, 0x657, 0x4bc, 0x570, +0x4bc, 0x570, 0x28f, 0x371, 0x28f, 0x371, 0x28f, 0x371, 0x182, 0x296, 0x182, +0x296, 0xffe8, 0x131, 0xffe8, 0x131, 0xfd9c, 0xff1a, 0xfd9c, 0xff1a, 0xfb4e, 0xfd01, +0xfb4e, 0xfd01, 0xf903, 0xfae5, 0xf903, 0xfae5, 0xf903, 0xfae5, 0xf70b, 0xf918, 0xf70b, +0xf918, 0xf59f, 0xf7cd, 0xf59f, 0xf7cd, 0xf4c3, 0xf708, 0xf4c3, 0xf708, 0xf35c, 0xf5aa, +0xf35c, 0xf5aa, 0xf1c8, 0xf414, 0xf1c8, 0xf414, 0xf14f, 0xf389, 0xf14f, 0xf389, 0xf14f, +0xf389, 0xf15a, 0xf376, 0xf15a, 0xf376, 0xf196, 0xf385, 0xf196, 0xf385, 0xf21a, 0xf3d2, +0xf21a, 0xf3d2, 0xf291, 0xf408, 0xf291, 0xf408, 0xf3a1, 0xf4d0, 0xf3a1, 0xf4d0, 0xf59f, +0xf683, 0xf59f, 0xf683, 0xf59f, 0xf683, 0xf7f6, 0xf88e, 0xf7f6, 0xf88e, 0xfa41, 0xfa91, +0xfa41, 0xfa91, 0xfc34, 0xfc43, 0xfc34, 0xfc43, 0xfdbe, 0xfd96, 0xfdbe, 0xfd96, 0xfebd, +0xfe6c, 0xfebd, 0xfe6c, 0xfebd, 0xfe6c, 0xff50, 0xfee7, 0xff50, 0xfee7, 0xfeb1, 0xfe41, +0xfeb1, 0xfe41, 0xfd1e, 0xfcba, 0xfd1e, 0xfcba, 0xfc1f, 0xfbdb, 0xfc1f, 0xfbdb, 0xfb2a, +0xfb1a, 0xfb2a, 0xfb1a, 0xfa65, 0xfa9b, 0xfa65, 0xfa9b, 0xfa65, 0xfa9b, 0xf9f9, 0xfa85, +0xf9f9, 0xfa85, 0xf918, 0xfa07, 0xf918, 0xfa07, 0xf790, 0xf8ec, 0xf790, 0xf8ec, 0xf5e2, +0xf7b1, 0xf5e2, 0xf7b1, 0xf48a, 0xf6ce, 0xf48a, 0xf6ce, 0xf2ae, 0xf564, 0xf2ae, 0xf564, +0xf2ae, 0xf564, 0xf0a1, 0xf3c2, 0xf0a1, 0xf3c2, 0xeee0, 0xf261, 0xeee0, 0xf261, 0xed71, +0xf143, 0xed71, 0xf143, 0xed06, 0xf116, 0xed06, 0xf116, 0xed25, 0xf15f, 0xed25, 0xf15f, +0xed25, 0xf15f, 0xecc8, 0xf115, 0xecc8, 0xf115, 0xec1a, 0xf061, 0xec1a, 0xf061, 0xec2a, +0xf053, 0xec2a, 0xf053, 0xec88, 0xf07c, 0xec88, 0xf07c, 0xecf6, 0xf0a0, 0xecf6, 0xf0a0, +0xed9f, 0xf0eb, 0xed9f, 0xf0eb, 0xed9f, 0xf0eb, 0xee4b, 0xf126, 0xee4b, 0xf126, 0xefdb, +0xf239, 0xefdb, 0xf239, 0xf260, 0xf437, 0xf260, 0xf437, 0xf52f, 0xf679, 0xf52f, 0xf679, +0xf7d5, 0xf88f, 0xf7d5, 0xf88f, 0xfad8, 0xfb04, 0xfad8, 0xfb04, 0xfad8, 0xfb04, 0xfe7a, +0xfe1d, 0xfe7a, 0xfe1d, 0x248, 0x169, 0x248, 0x169, 0x5c7, 0x471, 0x5c7, 0x471, +0x7ee, 0x62e, 0x7ee, 0x62e, 0x9c0, 0x7a3, 0x9c0, 0x7a3, 0x9c0, 0x7a3, 0xc2f, +0x9c2, 0xc2f, 0x9c2, 0xe52, 0xba4, 0xe52, 0xba4, 0xff6, 0xd14, 0xff6, 0xd14, +0x1144, 0xe3b, 0x1144, 0xe3b, 0x1216, 0xef0, 0x1216, 0xef0, 0x1290, 0xf57, 0x1290, +0xf57, 0x1290, 0xf57, 0x12cb, 0xf85, 0x12cb, 0xf85, 0x123a, 0xeed, 0x123a, 0xeed, +0x11ac, 0xe5b, 0x11ac, 0xe5b, 0x11be, 0xe6b, 0x11be, 0xe6b, 0x11ea, 0xe95, 0x11ea, +0xe95, 0x11f6, 0xea0, 0x11f6, 0xea0, 0x11f6, 0xea0, 0x11ac, 0xe52, 0x11ac, 0xe52, +0x1169, 0xe0b, 0x1169, 0xe0b, 0x1140, 0xddd, 0x1140, 0xddd, 0x113d, 0xdd6, 0x113d, +0xdd6, 0x1165, 0xdfc, 0x1165, 0xdfc, 0x1165, 0xdfc, 0x1159, 0xdf1, 0x1159, 0xdf1, +0x1129, 0xdc7, 0x1129, 0xdc7, 0x10d8, 0xd82, 0x10d8, 0xd82, 0x1032, 0xcf1, 0x1032, +0xcf1, 0xef5, 0xbd4, 0xef5, 0xbd4, 0xd34, 0xa3e, 0xd34, 0xa3e, 0xd34, 0xa3e, +0xb42, 0x883, 0xb42, 0x883, 0x93f, 0x6c4, 0x93f, 0x6c4, 0x6bf, 0x494, 0x6bf, +0x494, 0x423, 0x255, 0x423, 0x255, 0x20e, 0xa7, 0x20e, 0xa7, 0xffd1, 0xfedb, +0xffd1, 0xfedb, 0xffd1, 0xfedb, 0xfd94, 0xfd17, 0xfd94, 0xfd17, 0xfc12, 0xfc12, 0xfc12, +0xfc12, 0xfad9, 0xfb57, 0xfad9, 0xfb57, 0xf891, 0xf98d, 0xf891, 0xf98d, 0xf59f, 0xf715, +0xf59f, 0xf715, 0xf59f, 0xf715, 0xf305, 0xf4ef, 0xf305, 0xf4ef, 0xf03c, 0xf291, 0xf03c, +0xf291, 0xed7b, 0xf02f, 0xed7b, 0xf02f, 0xeb51, 0xee57, 0xeb51, 0xee57, 0xea0a, 0xed55, +0xea0a, 0xed55, 0xe8be, 0xec3d, 0xe8be, 0xec3d, 0xe8be, 0xec3d, 0xe753, 0xeaf9, 0xe753, +0xeaf9, 0xe6e9, 0xeaa8, 0xe6e9, 0xeaa8, 0xe666, 0xea30, 0xe666, 0xea30, 0xe58e, 0xe959, +0xe58e, 0xe959, 0xe4db, 0xe89c, 0xe4db, 0xe89c, 0xe4a0, 0xe851, 0xe4a0, 0xe851, 0xe4a0, +0xe851, 0xe54a, 0xe8e6, 0xe54a, 0xe8e6, 0xe632, 0xe9b7, 0xe632, 0xe9b7, 0xe753, 0xeac0, +0xe753, 0xeac0, 0xe890, 0xebe8, 0xe890, 0xebe8, 0xe97b, 0xecc2, 0xe97b, 0xecc2, 0xe97b, +0xecc2, 0xeaab, 0xede5, 0xeaab, 0xede5, 0xed47, 0xf07a, 0xed47, 0xf07a, 0xefd7, 0xf308, +0xefd7, 0xf308, 0xf04f, 0xf383, 0xf04f, 0xf383, 0xf049, 0xf383, 0xf049, 0xf383, 0xf0c4, +0xf406, 0xf0c4, 0xf406, 0xf0c4, 0xf406, 0xf09f, 0xf3e8, 0xf09f, 0xf3e8, 0xefb4, 0xf300, +0xefb4, 0xf300, 0xeeca, 0xf214, 0xeeca, 0xf214, 0xee20, 0xf15e, 0xee20, 0xf15e, 0xedbd, +0xf0e3, 0xedbd, 0xf0e3, 0xeda5, 0xf0a5, 0xeda5, 0xf0a5, 0xeda5, 0xf0a5, 0xed3b, 0xf005, +0xed3b, 0xf005, 0xecce, 0xef4e, 0xecce, 0xef4e, 0xed42, 0xef65, 0xed42, 0xef65, 0xeef4, +0xf0a8, 0xeef4, 0xf0a8, 0xf1f2, 0xf324, 0xf1f2, 0xf324, 0xf1f2, 0xf324, 0xf569, 0xf606, +0xf569, 0xf606, 0xf8d7, 0xf8d2, 0xf8d7, 0xf8d2, 0xfd0a, 0xfc56, 0xfd0a, 0xfc56, 0x1f0, +0x85, 0x1f0, 0x85, 0x694, 0x46d, 0x694, 0x46d, 0xac9, 0x7e6, 0xac9, 0x7e6, +0xac9, 0x7e6, 0xf16, 0xb7d, 0xf16, 0xb7d, 0x13e3, 0xf9e, 0x13e3, 0xf9e, 0x1827, +0x1344, 0x1827, 0x1344, 0x1bb4, 0x1644, 0x1bb4, 0x1644, 0x1eef, 0x190a, 0x1eef, 0x190a, +0x20cd, 0x1a8c, 0x20cd, 0x1a8c, 0x20cd, 0x1a8c, 0x21ad, 0x1b2c, 0x21ad, 0x1b2c, 0x2254, +0x1baf, 0x2254, 0x1baf, 0x22c5, 0x1c1a, 0x22c5, 0x1c1a, 0x232d, 0x1c98, 0x232d, 0x1c98, +0x2364, 0x1d00, 0x2364, 0x1d00, 0x2364, 0x1d00, 0x2367, 0x1d4d, 0x2367, 0x1d4d, 0x2382, +0x1dc8, 0x2382, 0x1dc8, 0x23b5, 0x1e6d, 0x23b5, 0x1e6d, 0x22c5, 0x1dfc, 0x22c5, 0x1dfc, +0x2084, 0x1c43, 0x2084, 0x1c43, 0x1e35, 0x1a80, 0x1e35, 0x1a80, 0x1e35, 0x1a80, 0x1c12, +0x18eb, 0x1c12, 0x18eb, 0x1a1a, 0x177b, 0x1a1a, 0x177b, 0x186f, 0x1651, 0x186f, 0x1651, +0x169d, 0x14f4, 0x169d, 0x14f4, 0x1420, 0x12e0, 0x1420, 0x12e0, 0x1420, 0x12e0, 0x1201, +0x1119, 0x1201, 0x1119, 0x10bb, 0x101b, 0x10bb, 0x101b, 0xefd, 0xe95, 0xefd, 0xe95, +0xc7b, 0xc3b, 0xc7b, 0xc3b, 0x9e9, 0x9c1, 0x9e9, 0x9c1, 0x7cd, 0x7b2, 0x7cd, +0x7b2, 0x7cd, 0x7b2, 0x698, 0x67f, 0x698, 0x67f, 0x64b, 0x62c, 0x64b, 0x62c, +0x5ad, 0x584, 0x5ad, 0x584, 0x4cd, 0x498, 0x4cd, 0x498, 0x4a9, 0x468, 0x4a9, +0x468, 0x4d5, 0x48c, 0x4d5, 0x48c, 0x4d5, 0x48c, 0x5c3, 0x577, 0x5c3, 0x577, +0x658, 0x610, 0x658, 0x610, 0x4f5, 0x4b7, 0x4f5, 0x4b7, 0x326, 0x2fb, 0x326, +0x2fb, 0x223, 0x213, 0x223, 0x213, 0x223, 0x213, 0x175, 0x185, 0x175, 0x185, +0xffe6, 0x1d, 0xffe6, 0x1d, 0xfd92, 0xfdf1, 0xfd92, 0xfdf1, 0xfb6c, 0xfbf5, 0xfb6c, +0xfbf5, 0xf9e6, 0xfa98, 0xf9e6, 0xfa98, 0xf975, 0xfa4c, 0xf975, 0xfa4c, 0xf975, 0xfa4c, +0xf904, 0xf9fa, 0xf904, 0xf9fa, 0xf80d, 0xf91a, 0xf80d, 0xf91a, 0xf74d, 0xf869, 0xf74d, +0xf869, 0xf708, 0xf827, 0xf708, 0xf827, 0xf781, 0xf899, 0xf781, 0xf899, 0xf7bc, 0xf8c2, +0xf7bc, 0xf8c2, 0xf7bc, 0xf8c2, 0xf75b, 0xf845, 0xf75b, 0xf845, 0xf795, 0xf85b, 0xf795, +0xf85b, 0xf8e0, 0xf97d, 0xf8e0, 0xf97d, 0xfb1d, 0xfb8c, 0xfb1d, 0xfb8c, 0xfd30, 0xfd70, +0xfd30, 0xfd70, 0xfd30, 0xfd70, 0xfebb, 0xfed0, 0xfebb, 0xfed0, 0xa6, 0x93, 0xa6, +0x93, 0x220, 0x1f0, 0x220, 0x1f0, 0x27a, 0x237, 0x27a, 0x237, 0x224, 0x1dd, +0x224, 0x1dd, 0x173, 0x138, 0x173, 0x138, 0x173, 0x138, 0x82, 0x63, 0x82, +0x63, 0xff38, 0xff48, 0xff38, 0xff48, 0xfdcd, 0xfe1d, 0xfdcd, 0xfe1d, 0xfc3c, 0xfcdd, +0xfc3c, 0xfcdd, 0xfaa7, 0xfba8, 0xfaa7, 0xfba8, 0xf935, 0xfaa3, 0xf935, 0xfaa3, 0xf935, +0xfaa3, 0xf823, 0xfa06, 0xf823, 0xfa06, 0xf763, 0xf9c2, 0xf763, 0xf9c2, 0xf5c0, 0xf89b, +0xf5c0, 0xf89b, 0xf36b, 0xf6c0, 0xf36b, 0xf6c0, 0xf114, 0xf4db, 0xf114, 0xf4db, 0xf114, +0xf4db, 0xee8b, 0xf2ba, 0xee8b, 0xf2ba, 0xec6c, 0xf0f4, 0xec6c, 0xf0f4, 0xeb61, 0xf02f, +0xeb61, 0xf02f, 0xeada, 0xefd9, 0xeada, 0xefd9, 0xea1b, 0xef35, 0xea1b, 0xef35, 0xe996, +0xeeb2, 0xe996, 0xeeb2, 0xe996, 0xeeb2, 0xe940, 0xee46, 0xe940, 0xee46, 0xe8d0, 0xeda8, +0xe8d0, 0xeda8, 0xe865, 0xecf8, 0xe865, 0xecf8, 0xe852, 0xec8c, 0xe852, 0xec8c, 0xe96b, +0xed3b, 0xe96b, 0xed3b, 0xeb08, 0xee5e, 0xeb08, 0xee5e, 0xeb08, 0xee5e, 0xec87, 0xef5a, +0xec87, 0xef5a, 0xee89, 0xf0d0, 0xee89, 0xf0d0, 0xf163, 0xf31d, 0xf163, 0xf31d, 0xf4e3, +0xf610, 0xf4e3, 0xf610, 0xf8ed, 0xf991, 0xf8ed, 0xf991, 0xf8ed, 0xf991, 0xfdbf, 0xfde2, +0xfdbf, 0xfde2, 0x1b9, 0x165, 0x1b9, 0x165, 0x3f0, 0x331, 0x3f0, 0x331, 0x5f9, +0x4dc, 0x5f9, 0x4dc, 0x828, 0x6bc, 0x828, 0x6bc, 0xa1a, 0x86b, 0xa1a, 0x86b, +0xa1a, 0x86b, 0xc16, 0xa34, 0xc16, 0xa34, 0xda5, 0xb9a, 0xda5, 0xb9a, 0xdff, +0xbd8, 0xdff, 0xbd8, 0xe28, 0xbeb, 0xe28, 0xbeb, 0xece, 0xc84, 0xece, 0xc84, +0xed8, 0xc84, 0xed8, 0xc84, 0xed8, 0xc84, 0xe4b, 0xbef, 0xe4b, 0xbef, 0xdaf, +0xb4c, 0xdaf, 0xb4c, 0xd42, 0xad6, 0xd42, 0xad6, 0xd96, 0xb1f, 0xd96, 0xb1f, +0xe23, 0xb9f, 0xe23, 0xb9f, 0xe23, 0xb9f, 0xe2c, 0xb97, 0xe2c, 0xb97, 0xe52, +0xba9, 0xe52, 0xba9, 0xf12, 0xc53, 0xf12, 0xc53, 0x1001, 0xd2c, 0x1001, 0xd2c, +0x10fe, 0xe14, 0x10fe, 0xe14, 0x11a6, 0xeaa, 0x11a6, 0xeaa, 0x11a6, 0xeaa, 0x1176, +0xe6e, 0x1176, 0xe6e, 0x1153, 0xe46, 0x1153, 0xe46, 0x116d, 0xe64, 0x116d, 0xe64, +0x108d, 0xd94, 0x108d, 0xd94, 0xf1a, 0xc3c, 0xf1a, 0xc3c, 0xdc2, 0xb0e, 0xdc2, +0xb0e, 0xdc2, 0xb0e, 0xbea, 0x96e, 0xbea, 0x96e, 0x962, 0x72b, 0x962, 0x72b, +0x6f7, 0x513, 0x6f7, 0x513, 0x509, 0x384, 0x509, 0x384, 0x2d8, 0x1bb, 0x2d8, +0x1bb, 0x2d8, 0x1bb, 0xeb, 0x3f, 0xeb, 0x3f, 0xff8a, 0xff53, 0xff8a, 0xff53, +0xfd7d, 0xfdbe, 0xfd7d, 0xfdbe, 0xfaff, 0xfbb7, 0xfaff, 0xfbb7, 0xf89a, 0xf9c6, 0xf89a, +0xf9c6, 0xf5c2, 0xf75a, 0xf5c2, 0xf75a, 0xf5c2, 0xf75a, 0xf25c, 0xf458, 0xf25c, 0xf458, +0xefa7, 0xf1fb, 0xefa7, 0xf1fb, 0xedc6, 0xf066, 0xedc6, 0xf066, 0xec36, 0xef13, 0xec36, +0xef13, 0xeb63, 0xee70, 0xeb63, 0xee70, 0xea7b, 0xeda9, 0xea7b, 0xeda9, 0xea7b, 0xeda9, +0xe9b9, 0xecfb, 0xe9b9, 0xecfb, 0xe95a, 0xeca3, 0xe95a, 0xeca3, 0xe864, 0xebab, 0xe864, +0xebab, 0xe7fa, 0xeb36, 0xe7fa, 0xeb36, 0xe891, 0xebbd, 0xe891, 0xebbd, 0xe891, 0xebbd, +0xe8d1, 0xebea, 0xe8d1, 0xebea, 0xe894, 0xeb99, 0xe894, 0xeb99, 0xe8fd, 0xebf2, 0xe8fd, +0xebf2, 0xe9db, 0xecc2, 0xe9db, 0xecc2, 0xeae0, 0xedbe, 0xeae0, 0xedbe, 0xec7b, 0xef57, +0xec7b, 0xef57, 0xec7b, 0xef57, 0xed92, 0xf072, 0xed92, 0xf072, 0xede9, 0xf0d4, 0xede9, +0xf0d4, 0xee3f, 0xf13b, 0xee3f, 0xf13b, 0xee81, 0xf191, 0xee81, 0xf191, 0xee85, 0xf1ab, +0xee85, 0xf1ab, 0xee29, 0xf165, 0xee29, 0xf165, 0xee29, 0xf165, 0xed93, 0xf0e1, 0xed93, +0xf0e1, 0xed03, 0xf05b, 0xed03, 0xf05b, 0xecab, 0xf004, 0xecab, 0xf004, 0xec3a, 0xef87, +0xec3a, 0xef87, 0xeb94, 0xeec6, 0xeb94, 0xeec6, 0xeb94, 0xeec6, 0xeb77, 0xee7c, 0xeb77, +0xee7c, 0xec16, 0xeeda, 0xec16, 0xeeda, 0xed90, 0xf000, 0xed90, 0xf000, 0xf02b, 0xf231, +0xf02b, 0xf231, 0xf374, 0xf4fe, 0xf374, 0xf4fe, 0xf6b8, 0xf7b3, 0xf6b8, 0xf7b3, 0xf6b8, +0xf7b3, 0xf9fb, 0xfa58, 0xf9fb, 0xfa58, 0xfe71, 0xfe23, 0xfe71, 0xfe23, 0x3bf, 0x2be, +0x3bf, 0x2be, 0x830, 0x677, 0x830, 0x677, 0xc22, 0x9b3, 0xc22, 0x9b3, 0xc22, +0x9b3, 0x1006, 0xce4, 0x1006, 0xce4, 0x1406, 0x103c, 0x1406, 0x103c, 0x17fc, 0x1397, +0x17fc, 0x1397, 0x1b00, 0x1614, 0x1b00, 0x1614, 0x1d81, 0x1823, 0x1d81, 0x1823, 0x1f57, +0x19a1, 0x1f57, 0x19a1, 0x1f57, 0x19a1, 0x20a7, 0x1ab3, 0x20a7, 0x1ab3, 0x220a, 0x1bf5, +0x220a, 0x1bf5, 0x22fa, 0x1ce0, 0x22fa, 0x1ce0, 0x235d, 0x1d59, 0x235d, 0x1d59, 0x23e2, +0x1e0e, 0x23e2, 0x1e0e, 0x2517, 0x1f89, 0x2517, 0x1f89, 0x2517, 0x1f89, 0x2556, 0x2022, +0x2556, 0x2022, 0x23c2, 0x1ef9, 0x23c2, 0x1ef9, 0x21be, 0x1d6b, 0x21be, 0x1d6b, 0x1fd0, +0x1bf9, 0x1fd0, 0x1bf9, 0x1de8, 0x1a90, 0x1de8, 0x1a90, 0x1de8, 0x1a90, 0x1bf5, 0x191a, +0x1bf5, 0x191a, 0x1a58, 0x17f3, 0x1a58, 0x17f3, 0x18ba, 0x16c2, 0x18ba, 0x16c2, 0x16b3, +0x151d, 0x16b3, 0x151d, 0x14db, 0x1396, 0x14db, 0x1396, 0x12fe, 0x11fb, 0x12fe, 0x11fb, +0x12fe, 0x11fb, 0x1087, 0xfb5, 0x1087, 0xfb5, 0xdd9, 0xd28, 0xdd9, 0xd28, 0xbde, +0xb3f, 0xbde, 0xb3f, 0xa36, 0x99a, 0xa36, 0x99a, 0x850, 0x7ad, 0x850, 0x7ad, +0x652, 0x59f, 0x652, 0x59f, 0x652, 0x59f, 0x4de, 0x415, 0x4de, 0x415, 0x464, +0x384, 0x464, 0x384, 0x467, 0x370, 0x467, 0x370, 0x568, 0x45d, 0x568, 0x45d, +0x6c0, 0x5a8, 0x6c0, 0x5a8, 0x6c0, 0x5a8, 0x695, 0x577, 0x695, 0x577, 0x59b, +0x482, 0x59b, 0x482, 0x4df, 0x3d4, 0x4df, 0x3d4, 0x3ce, 0x2db, 0x3ce, 0x2db, +0x213, 0x144, 0x213, 0x144, 0x30, 0xff8c, 0x30, 0xff8c, 0x30, 0xff8c, 0xfe42, +0xfdd0, 0xfe42, 0xfdd0, 0xfc5d, 0xfc23, 0xfc5d, 0xfc23, 0xfac1, 0xfac0, 0xfac1, 0xfac0, +0xf8f1, 0xf929, 0xf8f1, 0xf929, 0xf6fc, 0xf76c, 0xf6fc, 0xf76c, 0xf56b, 0xf60b, 0xf56b, +0xf60b, 0xf56b, 0xf60b, 0xf43e, 0xf508, 0xf43e, 0xf508, 0xf3ec, 0xf4d5, 0xf3ec, 0xf4d5, +0xf3e3, 0xf4e1, 0xf3e3, 0xf4e1, 0xf35d, 0xf464, 0xf35d, 0xf464, 0xf345, 0xf44a, 0xf345, +0xf44a, 0xf345, 0xf44a, 0xf3d5, 0xf4cd, 0xf3d5, 0xf4cd, 0xf51b, 0xf5fb, 0xf51b, 0xf5fb, +0xf6fa, 0xf7bb, 0xf6fa, 0xf7bb, 0xf90a, 0xf9a5, 0xf90a, 0xf9a5, 0xfb3e, 0xfbb1, 0xfb3e, +0xfbb1, 0xfd02, 0xfd4d, 0xfd02, 0xfd4d, 0xfd02, 0xfd4d, 0xfea5, 0xfec9, 0xfea5, 0xfec9, +0xfff5, 0xfff9, 0xfff5, 0xfff9, 0x63, 0x50, 0x63, 0x50, 0x2c, 0xc, 0x2c, +0xc, 0xff81, 0xff62, 0xff81, 0xff62, 0xfef0, 0xfee0, 0xfef0, 0xfee0, 0xfef0, 0xfee0, +0xfe0e, 0xfe1c, 0xfe0e, 0xfe1c, 0xfc91, 0xfccc, 0xfc91, 0xfccc, 0xfacc, 0xfb43, 0xfacc, +0xfb43, 0xf95b, 0xfa19, 0xf95b, 0xfa19, 0xf8c8, 0xf9da, 0xf8c8, 0xf9da, 0xf8c8, 0xf9da, +0xf7f3, 0xf95f, 0xf7f3, 0xf95f, 0xf623, 0xf7ee, 0xf623, 0xf7ee, 0xf3f5, 0xf620, 0xf3f5, +0xf620, 0xf207, 0xf491, 0xf207, 0xf491, 0xf052, 0xf334, 0xf052, 0xf334, 0xeef5, 0xf225, +0xeef5, 0xf225, 0xeef5, 0xf225, 0xee0c, 0xf17e, 0xee0c, 0xf17e, 0xed58, 0xf0fc, 0xed58, +0xf0fc, 0xed6d, 0xf131, 0xed6d, 0xf131, 0xedce, 0xf19e, 0xedce, 0xf19e, 0xed9c, 0xf164, +0xed9c, 0xf164, 0xed2c, 0xf0d9, 0xed2c, 0xf0d9, 0xed2c, 0xf0d9, 0xecf1, 0xf06f, 0xecf1, +0xf06f, 0xed46, 0xf083, 0xed46, 0xf083, 0xee1c, 0xf108, 0xee1c, 0xf108, 0xef79, 0xf207, +0xef79, 0xf207, 0xf130, 0xf356, 0xf130, 0xf356, 0xf130, 0xf356, 0xf337, 0xf4ee, 0xf337, +0xf4ee, 0xf5d5, 0xf71a, 0xf5d5, 0xf71a, 0xf896, 0xf967, 0xf896, 0xf967, 0xfbc4, 0xfc26, +0xfbc4, 0xfc26, 0xff86, 0xff7e, 0xff86, 0xff7e, 0x2c1, 0x258, 0x2c1, 0x258, 0x2c1, +0x258, 0x548, 0x489, 0x548, 0x489, 0x7a2, 0x698, 0x7a2, 0x698, 0x9ec, 0x8a4, +0x9ec, 0x8a4, 0xbf1, 0xa78, 0xbf1, 0xa78, 0xd6f, 0xbd0, 0xd6f, 0xbd0, 0xea9, +0xcf0, 0xea9, 0xcf0, 0xea9, 0xcf0, 0xfbc, 0xdf3, 0xfbc, 0xdf3, 0x1087, 0xeb5, +0x1087, 0xeb5, 0x10d2, 0xefd, 0x10d2, 0xefd, 0x1067, 0xe93, 0x1067, 0xe93, 0xfd3, +0xe00, 0xfd3, 0xe00, 0xfd3, 0xe00, 0xf28, 0xd57, 0xf28, 0xd57, 0xe7b, 0xca9, +0xe7b, 0xca9, 0xe58, 0xc83, 0xe58, 0xc83, 0xe7f, 0xca1, 0xe7f, 0xca1, 0xe62, +0xc78, 0xe62, 0xc78, 0xe41, 0xc45, 0xe41, 0xc45, 0xe41, 0xc45, 0xea3, 0xc93, +0xea3, 0xc93, 0xea9, 0xc84, 0xea9, 0xc84, 0xe31, 0xbf4, 0xe31, 0xbf4, 0xe1a, +0xbc9, 0xe1a, 0xbc9, 0xde2, 0xb7f, 0xde2, 0xb7f, 0xd52, 0xae4, 0xd52, 0xae4, +0xd52, 0xae4, 0xcba, 0xa49, 0xcba, 0xa49, 0xc2d, 0x9c4, 0xc2d, 0x9c4, 0xb1b, +0x8c5, 0xb1b, 0x8c5, 0x93a, 0x706, 0x93a, 0x706, 0x73d, 0x538, 0x73d, 0x538, +0x73d, 0x538, 0x559, 0x391, 0x559, 0x391, 0x349, 0x1ce, 0x349, 0x1ce, 0xde, +0xffbc, 0xde, 0xffbc, 0xff17, 0xfe59, 0xff17, 0xfe59, 0xfe39, 0xfdea, 0xfe39, 0xfdea, +0xfceb, 0xfd11, 0xfceb, 0xfd11, 0xfceb, 0xfd11, 0xfac1, 0xfb61, 0xfac1, 0xfb61, 0xf851, +0xf96c, 0xf851, 0xf96c, 0xf628, 0xf7bb, 0xf628, 0xf7bb, 0xf3af, 0xf5b6, 0xf3af, 0xf5b6, +0xf126, 0xf399, 0xf126, 0xf399, 0xef24, 0xf1f9, 0xef24, 0xf1f9, 0xef24, 0xf1f9, 0xeced, +0xf016, 0xeced, 0xf016, 0xeb20, 0xee90, 0xeb20, 0xee90, 0xea58, 0xedff, 0xea58, 0xedff, +0xe997, 0xed67, 0xe997, 0xed67, 0xe853, 0xec3c, 0xe853, 0xec3c, 0xe853, 0xec3c, 0xe746, +0xeb3a, 0xe746, 0xeb3a, 0xe71d, 0xeb10, 0xe71d, 0xeb10, 0xe77d, 0xeb63, 0xe77d, 0xeb63, +0xe7a3, 0xeb74, 0xe7a3, 0xeb74, 0xe78a, 0xeb41, 0xe78a, 0xeb41, 0xe838, 0xebd1, 0xe838, +0xebd1, 0xe838, 0xebd1, 0xe991, 0xed0c, 0xe991, 0xed0c, 0xead3, 0xee31, 0xead3, 0xee31, +0xec92, 0xefd7, 0xec92, 0xefd7, 0xeeb3, 0xf1e4, 0xeeb3, 0xf1e4, 0xeff2, 0xf315, 0xeff2, +0xf315, 0xeff2, 0xf315, 0xf085, 0xf3a1, 0xf085, 0xf3a1, 0xf132, 0xf44d, 0xf132, 0xf44d, +0xf17c, 0xf49c, 0xf17c, 0xf49c, 0xf15d, 0xf485, 0xf15d, 0xf485, 0xf115, 0xf448, 0xf115, +0xf448, 0xf081, 0xf3bf, 0xf081, 0xf3bf, 0xf081, 0xf3bf, 0xefb4, 0xf2f9, 0xefb4, 0xf2f9, +0xeeb8, 0xf1fe, 0xeeb8, 0xf1fe, 0xedd3, 0xf112, 0xedd3, 0xf112, 0xed57, 0xf083, 0xed57, +0xf083, 0xecf6, 0xf001, 0xecf6, 0xf001, 0xecbc, 0xef96, 0xecbc, 0xef96, 0xecbc, 0xef96, +0xed80, 0xf018, 0xed80, 0xf018, 0xef39, 0xf17d, 0xef39, 0xf17d, 0xf172, 0xf350, 0xf172, +0xf350, 0xf447, 0xf5af, 0xf447, 0xf5af, 0xf829, 0xf90a, 0xf829, 0xf90a, 0xf829, 0xf90a, +0xfcd3, 0xfd20, 0xfcd3, 0xfd20, 0x13c, 0xea, 0x13c, 0xea, 0x5be, 0x4c7, 0x5be, +0x4c7, 0xa7f, 0x8df, 0xa7f, 0x8df, 0xef0, 0xca8, 0xef0, 0xca8, 0x12ff, 0x1016, +0x12ff, 0x1016, 0x12ff, 0x1016, 0x1693, 0x1311, 0x1693, 0x1311, 0x19f7, 0x15ea, 0x19f7, +0x15ea, 0x1cbe, 0x1837, 0x1cbe, 0x1837, 0x1e91, 0x19a4, 0x1e91, 0x19a4, 0x1f55, 0x1a18, +0x1f55, 0x1a18, 0x1f9b, 0x1a25, 0x1f9b, 0x1a25, 0x1f9b, 0x1a25, 0x204e, 0x1ab9, 0x204e, +0x1ab9, 0x2099, 0x1afc, 0x2099, 0x1afc, 0x2116, 0x1b87, 0x2116, 0x1b87, 0x21f9, 0x1c8f, +0x21f9, 0x1c8f, 0x218f, 0x1c5c, 0x218f, 0x1c5c, 0x218f, 0x1c5c, 0x2049, 0x1b5d, 0x2049, +0x1b5d, 0x1f14, 0x1a7a, 0x1f14, 0x1a7a, 0x1dbe, 0x1980, 0x1dbe, 0x1980, 0x1bf9, 0x181a, +0x1bf9, 0x181a, 0x19ec, 0x166e, 0x19ec, 0x166e, 0x17c8, 0x14a6, 0x17c8, 0x14a6, 0x17c8, +0x14a6, 0x15ac, 0x12e2, 0x15ac, 0x12e2, 0x1434, 0x11b8, 0x1434, 0x11b8, 0x1324, 0x10eb, +0x1324, 0x10eb, 0x11c2, 0xfc1, 0x11c2, 0xfc1, 0xfe2, 0xe0b, 0xfe2, 0xe0b, 0xda5, +0xbeb, 0xda5, 0xbeb, 0xda5, 0xbeb, 0xbca, 0xa21, 0xbca, 0xa21, 0xa8b, 0x8e8, +0xa8b, 0x8e8, 0x8c0, 0x71b, 0x8c0, 0x71b, 0x6a4, 0x4f7, 0x6a4, 0x4f7, 0x5b7, +0x3fd, 0x5b7, 0x3fd, 0x5b7, 0x3fd, 0x5b8, 0x3f1, 0x5b8, 0x3f1, 0x5aa, 0x3d8, +0x5aa, 0x3d8, 0x59f, 0x3c5, 0x59f, 0x3c5, 0x5c0, 0x3e6, 0x5c0, 0x3e6, 0x590, +0x3bc, 0x590, 0x3bc, 0x54f, 0x38c, 0x54f, 0x38c, 0x54f, 0x38c, 0x568, 0x3bf, +0x568, 0x3bf, 0x520, 0x39c, 0x520, 0x39c, 0x409, 0x2b2, 0x409, 0x2b2, 0x2c1, +0x1a0, 0x2c1, 0x1a0, 0x198, 0xb3, 0x198, 0xb3, 0x39, 0xff96, 0x39, 0xff96, +0x39, 0xff96, 0xfeca, 0xfe69, 0xfeca, 0xfe69, 0xfd26, 0xfd06, 0xfd26, 0xfd06, 0xfbac, +0xfbcc, 0xfbac, 0xfbcc, 0xfaca, 0xfb22, 0xfaca, 0xfb22, 0xf9a0, 0xfa28, 0xf9a0, 0xfa28, +0xf9a0, 0xfa28, 0xf86e, 0xf91d, 0xf86e, 0xf91d, 0xf812, 0xf8dc, 0xf812, 0xf8dc, 0xf836, +0xf90e, 0xf836, 0xf90e, 0xf82d, 0xf908, 0xf82d, 0xf908, 0xf88f, 0xf95f, 0xf88f, 0xf95f, +0xf9ad, 0xfa69, 0xf9ad, 0xfa69, 0xf9ad, 0xfa69, 0xfaed, 0xfb8b, 0xfaed, 0xfb8b, 0xfc84, +0xfcfe, 0xfc84, 0xfcfe, 0xfe32, 0xfe84, 0xfe32, 0xfe84, 0xffb7, 0xffdf, 0xffb7, 0xffdf, +0xb7, 0xb8, 0xb7, 0xb8, 0x131, 0x110, 0x131, 0x110, 0x131, 0x110, 0x215, +0x1da, 0x215, 0x1da, 0x2a1, 0x257, 0x2a1, 0x257, 0x1fa, 0x1ae, 0x1fa, 0x1ae, +0x88, 0x49, 0x88, 0x49, 0xff2c, 0xff0a, 0xff2c, 0xff0a, 0xff2c, 0xff0a, 0xfe13, +0xfe1e, 0xfe13, 0xfe1e, 0xfcb0, 0xfcf7, 0xfcb0, 0xfcf7, 0xfb54, 0xfbe7, 0xfb54, 0xfbe7, +0xfa13, 0xfafe, 0xfa13, 0xfafe, 0xf848, 0xf996, 0xf848, 0xf996, 0xf604, 0xf7bb, 0xf604, +0xf7bb, 0xf604, 0xf7bb, 0xf42e, 0xf654, 0xf42e, 0xf654, 0xf25a, 0xf4ee, 0xf25a, 0xf4ee, +0xefc8, 0xf2c7, 0xefc8, 0xf2c7, 0xedb5, 0xf117, 0xedb5, 0xf117, 0xecaa, 0xf066, 0xecaa, +0xf066, 0xebad, 0xefb5, 0xebad, 0xefb5, 0xebad, 0xefb5, 0xea80, 0xeec4, 0xea80, 0xeec4, +0xe9d4, 0xee40, 0xe9d4, 0xee40, 0xe980, 0xee02, 0xe980, 0xee02, 0xe8ea, 0xed6e, 0xe8ea, +0xed6e, 0xe859, 0xecca, 0xe859, 0xecca, 0xe859, 0xecca, 0xe865, 0xecb1, 0xe865, 0xecb1, +0xe937, 0xed4a, 0xe937, 0xed4a, 0xe9da, 0xeda5, 0xe9da, 0xeda5, 0xea8b, 0xee02, 0xea8b, +0xee02, 0xec66, 0xef7e, 0xec66, 0xef7e, 0xeee5, 0xf196, 0xeee5, 0xf196, 0xeee5, 0xf196, +0xf243, 0xf48a, 0xf243, 0xf48a, 0xf684, 0xf85f, 0xf684, 0xf85f, 0xfa18, 0xfb89, 0xfa18, +0xfb89, 0xfd2c, 0xfe38, 0xfd2c, 0xfe38, 0x70, 0x11d, 0x70, 0x11d, 0x3a4, 0x3fb, +0x3a4, 0x3fb, 0x3a4, 0x3fb, 0x6bd, 0x6c5, 0x6bd, 0x6c5, 0x8d9, 0x89e, 0x8d9, +0x89e, 0xa0c, 0x997, 0xa0c, 0x997, 0xb36, 0xa91, 0xb36, 0xa91, 0xc09, 0xb3b, +0xc09, 0xb3b, 0xc09, 0xb3b, 0xca0, 0xbb0, 0xca0, 0xbb0, 0xccf, 0xbc2, 0xccf, +0xbc2, 0xc66, 0xb41, 0xc66, 0xb41, 0xbcf, 0xa92, 0xbcf, 0xa92, 0xb51, 0x9fe, +0xb51, 0x9fe, 0xb27, 0x9bc, 0xb27, 0x9bc, 0xb27, 0x9bc, 0xb44, 0x9be, 0xb44, +0x9be, 0xba0, 0x9fd, 0xba0, 0x9fd, 0xbfb, 0xa39, 0xbfb, 0xa39, 0xc98, 0xab2, +0xc98, 0xab2, 0xd63, 0xb58, 0xd63, 0xb58, 0xdf9, 0xbc7, 0xdf9, 0xbc7, 0xdf9, +0xbc7, 0xe51, 0xbf9, 0xe51, 0xbf9, 0xdfd, 0xb81, 0xdfd, 0xb81, 0xdf0, 0xb54, +0xdf0, 0xb54, 0xe77, 0xbc2, 0xe77, 0xbc2, 0xe85, 0xbbf, 0xe85, 0xbbf, 0xe85, +0xbbf, 0xe49, 0xb7c, 0xe49, 0xb7c, 0xdc4, 0xafb, 0xdc4, 0xafb, 0xc49, 0x993, +0xc49, 0x993, 0xa2f, 0x799, 0xa2f, 0x799, 0x871, 0x60a, 0x871, 0x60a, 0x695, +0x46c, 0x695, 0x46c, 0x695, 0x46c, 0x474, 0x296, 0x474, 0x296, 0x2ea, 0x163, +0x2ea, 0x163, 0x194, 0x6e, 0x194, 0x6e, 0xfff2, 0xff34, 0xfff2, 0xff34, 0xfe15, +0xfdc6, 0xfe15, 0xfdc6, 0xfe15, 0xfdc6, 0xfc5f, 0xfc81, 0xfc5f, 0xfc81, 0xfa88, 0xfb1a, +0xfa88, 0xfb1a, 0xf819, 0xf919, 0xf819, 0xf919, 0xf589, 0xf6f0, 0xf589, 0xf6f0, 0xf323, +0xf4e9, 0xf323, 0xf4e9, 0xf122, 0xf33b, 0xf122, 0xf33b, 0xf122, 0xf33b, 0xef5e, 0xf1be, +0xef5e, 0xf1be, 0xedbf, 0xf05a, 0xedbf, 0xf05a, 0xec9c, 0xef62, 0xec9c, 0xef62, 0xec0d, +0xeef1, 0xec0d, 0xeef1, 0xebd9, 0xeece, 0xebd9, 0xeece, 0xeb88, 0xee83, 0xeb88, 0xee83, +0xeb88, 0xee83, 0xeb3d, 0xee32, 0xeb3d, 0xee32, 0xeac2, 0xeda9, 0xeac2, 0xeda9, 0xea17, +0xecec, 0xea17, 0xecec, 0xe9f6, 0xecb4, 0xe9f6, 0xecb4, 0xea26, 0xeccb, 0xea26, 0xeccb, +0xea26, 0xeccb, 0xeab6, 0xed43, 0xeab6, 0xed43, 0xebf7, 0xee70, 0xebf7, 0xee70, 0xece8, +0xef50, 0xece8, 0xef50, 0xed3a, 0xef98, 0xed3a, 0xef98, 0xedfc, 0xf055, 0xedfc, 0xf055, +0xeef4, 0xf14d, 0xeef4, 0xf14d, 0xeef4, 0xf14d, 0xef6b, 0xf1c9, 0xef6b, 0xf1c9, 0xef52, +0xf1ba, 0xef52, 0xf1ba, 0xeed9, 0xf14c, 0xeed9, 0xf14c, 0xee6d, 0xf0ea, 0xee6d, 0xf0ea, +0xee37, 0xf0bd, 0xee37, 0xf0bd, 0xee17, 0xf09f, 0xee17, 0xf09f, 0xee17, 0xf09f, 0xed63, +0xefe5, 0xed63, 0xefe5, 0xec8e, 0xef00, 0xec8e, 0xef00, 0xecae, 0xef02, 0xecae, 0xef02, +0xed6f, 0xef95, 0xed6f, 0xef95, 0xee29, 0xf011, 0xee29, 0xf011, 0xee29, 0xf011, 0xef44, +0xf0dc, 0xef44, 0xf0dc, 0xf164, 0xf29b, 0xf164, 0xf29b, 0xf441, 0xf506, 0xf441, 0xf506, +0xf7d7, 0xf81a, 0xf7d7, 0xf81a, 0xfbb8, 0xfb6b, 0xfbb8, 0xfb6b, 0xffa3, 0xfebc, 0xffa3, +0xfebc, 0xffa3, 0xfebc, 0x40c, 0x283, 0x40c, 0x283, 0x886, 0x657, 0x886, 0x657, +0xcc2, 0x9ee, 0xcc2, 0x9ee, 0x10ec, 0xd78, 0x10ec, 0xd78, 0x1521, 0x1114, 0x1521, +0x1114, 0x18ff, 0x1467, 0x18ff, 0x1467, 0x18ff, 0x1467, 0x1c6a, 0x1757, 0x1c6a, 0x1757, +0x1eab, 0x1931, 0x1eab, 0x1931, 0x1fa1, 0x19d5, 0x1fa1, 0x19d5, 0x20e9, 0x1ae4, 0x20e9, +0x1ae4, 0x2265, 0x1c40, 0x2265, 0x1c40, 0x2265, 0x1c40, 0x2365, 0x1d39, 0x2365, 0x1d39, +0x2402, 0x1de8, 0x2402, 0x1de8, 0x2447, 0x1e56, 0x2447, 0x1e56, 0x23f1, 0x1e3d, 0x23f1, +0x1e3d, 0x231c, 0x1db8, 0x231c, 0x1db8, 0x2277, 0x1d72, 0x2277, 0x1d72, 0x2277, 0x1d72, +0x213c, 0x1ca2, 0x213c, 0x1ca2, 0x1f1b, 0x1af3, 0x1f1b, 0x1af3, 0x1d08, 0x1956, 0x1d08, +0x1956, 0x1b08, 0x17cc, 0x1b08, 0x17cc, 0x18db, 0x1611, 0x18db, 0x1611, 0x16e2, 0x1485, +0x16e2, 0x1485, 0x16e2, 0x1485, 0x1507, 0x130f, 0x1507, 0x130f, 0x12e8, 0x114b, 0x12e8, +0x114b, 0x10d3, 0xf84, 0x10d3, 0xf84, 0xf0d, 0xe00, 0xf0d, 0xe00, 0xcf8, 0xc22, +0xcf8, 0xc22, 0xcf8, 0xc22, 0xa24, 0x979, 0xa24, 0x979, 0x78b, 0x702, 0x78b, +0x702, 0x5f2, 0x582, 0x5f2, 0x582, 0x555, 0x4f9, 0x555, 0x4f9, 0x4fa, 0x4ae, +0x4fa, 0x4ae, 0x48a, 0x44c, 0x48a, 0x44c, 0x48a, 0x44c, 0x4cc, 0x49c, 0x4cc, +0x49c, 0x527, 0x508, 0x527, 0x508, 0x4f7, 0x4ed, 0x4f7, 0x4ed, 0x497, 0x4a7, +0x497, 0x4a7, 0x415, 0x445, 0x415, 0x445, 0x32a, 0x380, 0x32a, 0x380, 0x32a, +0x380, 0x1e4, 0x264, 0x1e4, 0x264, 0xc5, 0x174, 0xc5, 0x174, 0xff51, 0x33, +0xff51, 0x33, 0xfd5a, 0xfe6e, 0xfd5a, 0xfe6e, 0xfbaa, 0xfcf0, 0xfbaa, 0xfcf0, 0xfbaa, +0xfcf0, 0xfa0a, 0xfb7f, 0xfa0a, 0xfb7f, 0xf807, 0xf9a4, 0xf807, 0xf9a4, 0xf62b, 0xf7e9, +0xf62b, 0xf7e9, 0xf4fd, 0xf6d3, 0xf4fd, 0xf6d3, 0xf401, 0xf5e3, 0xf401, 0xf5e3, 0xf2fc, +0xf4de, 0xf2fc, 0xf4de, 0xf2fc, 0xf4de, 0xf278, 0xf44d, 0xf278, 0xf44d, 0xf2ea, 0xf4a5, +0xf2ea, 0xf4a5, 0xf445, 0xf5db, 0xf445, 0xf5db, 0xf5aa, 0xf710, 0xf5aa, 0xf710, 0xf71b, +0xf849, 0xf71b, 0xf849, 0xf8e2, 0xf9d2, 0xf8e2, 0xf9d2, 0xf8e2, 0xf9d2, 0xfa9b, 0xfb49, +0xfa9b, 0xfb49, 0xfca5, 0xfd10, 0xfca5, 0xfd10, 0xfea4, 0xfed1, 0xfea4, 0xfed1, 0x47, +0x3c, 0x47, 0x3c, 0x1b4, 0x17b, 0x1b4, 0x17b, 0x1b4, 0x17b, 0x288, 0x22c, +0x288, 0x22c, 0x26b, 0x1fd, 0x26b, 0x1fd, 0x154, 0xe4, 0x154, 0xe4, 0x3, +0xffa2, 0x3, 0xffa2, 0xfeb0, 0xfe71, 0xfeb0, 0xfe71, 0xfd81, 0xfd76, 0xfd81, 0xfd76, +0xfd81, 0xfd76, 0xfc86, 0xfcc1, 0xfc86, 0xfcc1, 0xfb4c, 0xfbda, 0xfb4c, 0xfbda, 0xf9fb, +0xfaea, 0xf9fb, 0xfaea, 0xf8cf, 0xfa29, 0xf8cf, 0xfa29, 0xf7be, 0xf987, 0xf7be, 0xf987, +0xf623, 0xf85e, 0xf623, 0xf85e, 0xf623, 0xf85e, 0xf42c, 0xf6d8, 0xf42c, 0xf6d8, 0xf276, +0xf58c, 0xf276, 0xf58c, 0xf0e5, 0xf45c, 0xf0e5, 0xf45c, 0xef93, 0xf35e, 0xef93, 0xf35e, +0xeec7, 0xf2d6, 0xeec7, 0xf2d6, 0xeec7, 0xf2d6, 0xee92, 0xf2d1, 0xee92, 0xf2d1, 0xee83, +0xf2e0, 0xee83, 0xf2e0, 0xee59, 0xf2be, 0xee59, 0xf2be, 0xee1c, 0xf273, 0xee1c, 0xf273, +0xee6c, 0xf2a1, 0xee6c, 0xf2a1, 0xef05, 0xf303, 0xef05, 0xf303, 0xef05, 0xf303, 0xef6e, +0xf325, 0xef6e, 0xf325, 0xf0db, 0xf43a, 0xf0db, 0xf43a, 0xf2d7, 0xf5d2, 0xf2d7, 0xf5d2, +0xf492, 0xf720, 0xf492, 0xf720, 0xf6ae, 0xf8c8, 0xf6ae, 0xf8c8, 0xf936, 0xfada, 0xf936, +0xfada, 0xf936, 0xfada, 0xfbb4, 0xfce0, 0xfbb4, 0xfce0, 0xfe5a, 0xff14, 0xfe5a, 0xff14, +0x1a7, 0x1f4, 0x1a7, 0x1f4, 0x514, 0x4fb, 0x514, 0x4fb, 0x7d7, 0x761, 0x7d7, +0x761, 0x7d7, 0x761, 0x9f4, 0x92c, 0x9f4, 0x92c, 0xba1, 0xa91, 0xba1, 0xa91, +0xc95, 0xb49, 0xc95, 0xb49, 0xd4c, 0xbcd, 0xd4c, 0xbcd, 0xdfb, 0xc52, 0xdfb, +0xc52, 0xe31, 0xc66, 0xe31, 0xc66, 0xe31, 0xc66, 0xe2a, 0xc42, 0xe2a, 0xc42, +0xd9c, 0xb9c, 0xd9c, 0xb9c, 0xce3, 0xacd, 0xce3, 0xacd, 0xc76, 0xa4d, 0xc76, +0xa4d, 0xc18, 0x9db, 0xc18, 0x9db, 0xc18, 0x9db, 0xbc7, 0x975, 0xbc7, 0x975, +0xc06, 0x99d, 0xc06, 0x99d, 0xcc2, 0xa42, 0xcc2, 0xa42, 0xc9a, 0xa02, 0xc9a, +0xa02, 0xc01, 0x950, 0xc01, 0x950, 0xb77, 0x8ae, 0xb77, 0x8ae, 0xb77, 0x8ae, +0xae4, 0x805, 0xae4, 0x805, 0xada, 0x7ea, 0xada, 0x7ea, 0xad1, 0x7d5, 0xad1, +0x7d5, 0xa85, 0x785, 0xa85, 0x785, 0xa71, 0x777, 0xa71, 0x777, 0xa48, 0x75f, +0xa48, 0x75f, 0xa48, 0x75f, 0x8f0, 0x624, 0x8f0, 0x624, 0x727, 0x485, 0x727, +0x485, 0x59d, 0x333, 0x59d, 0x333, 0x3d7, 0x1b2, 0x3d7, 0x1b2, 0x26d, 0x9b, +0x26d, 0x9b, 0x26d, 0x9b, 0x13f, 0xffcc, 0x13f, 0xffcc, 0xffe4, 0xfed9, 0xffe4, +0xfed9, 0xfe14, 0xfd79, 0xfe14, 0xfd79, 0xfc77, 0xfc53, 0xfc77, 0xfc53, 0xfb7a, 0xfbce, +0xfb7a, 0xfbce, 0xf9d1, 0xfa9e, 0xf9d1, 0xfa9e, 0xf9d1, 0xfa9e, 0xf78d, 0xf8d1, 0xf78d, +0xf8d1, 0xf556, 0xf70b, 0xf556, 0xf70b, 0xf2ed, 0xf50b, 0xf2ed, 0xf50b, 0xf041, 0xf2bd, +0xf041, 0xf2bd, 0xee05, 0xf0d5, 0xee05, 0xf0d5, 0xec78, 0xef8d, 0xec78, 0xef8d, 0xec78, +0xef8d, 0xeb84, 0xeed1, 0xeb84, 0xeed1, 0xeb30, 0xeea6, 0xeb30, 0xeea6, 0xeb1e, 0xeeb0, +0xeb1e, 0xeeb0, 0xeb0f, 0xeeb0, 0xeb0f, 0xeeb0, 0xea9f, 0xee43, 0xea9f, 0xee43, 0xea9f, +0xee43, 0xe9f6, 0xed95, 0xe9f6, 0xed95, 0xe9ef, 0xed7f, 0xe9ef, 0xed7f, 0xeaa9, 0xee26, +0xeaa9, 0xee26, 0xeb81, 0xeee8, 0xeb81, 0xeee8, 0xeca0, 0xefef, 0xeca0, 0xefef, 0xee37, +0xf16f, 0xee37, 0xf16f, 0xee37, 0xf16f, 0xef75, 0xf299, 0xef75, 0xf299, 0xeffc, 0xf30f, +0xeffc, 0xf30f, 0xf06c, 0xf372, 0xf06c, 0xf372, 0xf101, 0xf3fe, 0xf101, 0xf3fe, 0xf12a, +0xf422, 0xf12a, 0xf422, 0xf158, 0xf44d, 0xf158, 0xf44d, 0xf158, 0xf44d, 0xf184, 0xf477, +0xf184, 0xf477, 0xf0eb, 0xf3dd, 0xf0eb, 0xf3dd, 0xefbc, 0xf2a8, 0xefbc, 0xf2a8, 0xee9c, +0xf17e, 0xee9c, 0xf17e, 0xedfa, 0xf0c9, 0xedfa, 0xf0c9, 0xedfa, 0xf0c9, 0xed2f, 0xefe2, +0xed2f, 0xefe2, 0xec67, 0xeef0, 0xec67, 0xeef0, 0xebf8, 0xee4a, 0xebf8, 0xee4a, 0xec0c, +0xee16, 0xec0c, 0xee16, 0xed53, 0xef05, 0xed53, 0xef05, 0xef59, 0xf0a3, 0xef59, 0xf0a3, +0xef59, 0xf0a3, 0xf1ab, 0xf27c, 0xf1ab, 0xf27c, 0xf494, 0xf4dd, 0xf494, 0xf4dd, 0xf844, +0xf7f8, 0xf844, 0xf7f8, 0xfc86, 0xfb9b, 0xfc86, 0xfb9b, 0xf1, 0xff5f, 0xf1, 0xff5f, +0x543, 0x307, 0x543, 0x307, 0x543, 0x307, 0x9c8, 0x6e1, 0x9c8, 0x6e1, 0xe50, +0xac4, 0xe50, 0xac4, 0x1286, 0xe5c, 0x1286, 0xe5c, 0x1697, 0x11dc, 0x1697, 0x11dc, +0x19c7, 0x1489, 0x19c7, 0x1489, 0x19c7, 0x1489, 0x1ba2, 0x15f6, 0x1ba2, 0x15f6, 0x1cc7, +0x16c2, 0x1cc7, 0x16c2, 0x1dd4, 0x178d, 0x1dd4, 0x178d, 0x1efa, 0x188b, 0x1efa, 0x188b, +0x1fe9, 0x1969, 0x1fe9, 0x1969, 0x2045, 0x19cf, 0x2045, 0x19cf, 0x2045, 0x19cf, 0x2030, +0x19da, 0x2030, 0x19da, 0x1ffe, 0x19df, 0x1ffe, 0x19df, 0x1fcf, 0x19f8, 0x1fcf, 0x19f8, +0x1f5f, 0x19e2, 0x1f5f, 0x19e2, 0x1e12, 0x18fa, 0x1e12, 0x18fa, 0x1bdc, 0x1733, 0x1bdc, +0x1733, 0x1bdc, 0x1733, 0x1992, 0x155d, 0x1992, 0x155d, 0x17db, 0x141c, 0x17db, 0x141c, +0x162e, 0x12e4, 0x162e, 0x12e4, 0x147e, 0x11a5, 0x147e, 0x11a5, 0x1342, 0x10d3, 0x1342, +0x10d3, 0x1342, 0x10d3, 0x122a, 0x101c, 0x122a, 0x101c, 0x111b, 0xf65, 0x111b, 0xf65, +0xfa9, 0xe3f, 0xfa9, 0xe3f, 0xdb9, 0xc92, 0xdb9, 0xc92, 0xba5, 0xab7, 0xba5, +0xab7, 0x9c0, 0x902, 0x9c0, 0x902, 0x9c0, 0x902, 0x84c, 0x7b7, 0x84c, 0x7b7, +0x6fa, 0x688, 0x6fa, 0x688, 0x5c9, 0x577, 0x5c9, 0x577, 0x527, 0x4f3, 0x527, +0x4f3, 0x518, 0x502, 0x518, 0x502, 0x539, 0x545, 0x539, 0x545, 0x539, 0x545, +0x56a, 0x59a, 0x56a, 0x59a, 0x584, 0x5dd, 0x584, 0x5dd, 0x585, 0x60d, 0x585, +0x60d, 0x55b, 0x615, 0x55b, 0x615, 0x4f9, 0x5ea, 0x4f9, 0x5ea, 0x4f9, 0x5ea, +0x43b, 0x567, 0x43b, 0x567, 0x2e7, 0x44e, 0x2e7, 0x44e, 0x19f, 0x342, 0x19f, +0x342, 0x52, 0x22e, 0x52, 0x22e, 0xfee5, 0xf6, 0xfee5, 0xf6, 0xfd60, 0xff9e, +0xfd60, 0xff9e, 0xfd60, 0xff9e, 0xfbbf, 0xfe20, 0xfbbf, 0xfe20, 0xfa42, 0xfcbc, 0xfa42, +0xfcbc, 0xf913, 0xfb97, 0xf913, 0xfb97, 0xf8c1, 0xfb42, 0xf8c1, 0xfb42, 0xf8bd, 0xfb2c, +0xf8bd, 0xfb2c, 0xf900, 0xfb4f, 0xf900, 0xfb4f, 0xf900, 0xfb4f, 0xf973, 0xfb94, 0xf973, +0xfb94, 0xf9d5, 0xfbbb, 0xf9d5, 0xfbbb, 0xfaef, 0xfc8f, 0xfaef, 0xfc8f, 0xfbb1, 0xfd04, +0xfbb1, 0xfd04, 0xfc2e, 0xfd2e, 0xfc2e, 0xfd2e, 0xfc2e, 0xfd2e, 0xfd82, 0xfe2e, 0xfd82, +0xfe2e, 0xfefc, 0xff55, 0xfefc, 0xff55, 0x7f, 0x8a, 0x7f, 0x8a, 0x233, 0x1f9, +0x233, 0x1f9, 0x2ec, 0x279, 0x2ec, 0x279, 0x234, 0x197, 0x234, 0x197, 0x234, +0x197, 0x12b, 0x73, 0x12b, 0x73, 0x36, 0xff77, 0x36, 0xff77, 0xff10, 0xfe5b, +0xff10, 0xfe5b, 0xfdc2, 0xfd2a, 0xfdc2, 0xfd2a, 0xfc7c, 0xfc14, 0xfc7c, 0xfc14, 0xfb0d, +0xfae4, 0xfb0d, 0xfae4, 0xfb0d, 0xfae4, 0xf930, 0xf955, 0xf930, 0xf955, 0xf794, 0xf812, +0xf794, 0xf812, 0xf640, 0xf71f, 0xf640, 0xf71f, 0xf464, 0xf5a9, 0xf464, 0xf5a9, 0xf259, +0xf403, 0xf259, 0xf403, 0xf259, 0xf403, 0xf07c, 0xf289, 0xf07c, 0xf289, 0xee9b, 0xf104, +0xee9b, 0xf104, 0xed42, 0xeffc, 0xed42, 0xeffc, 0xec57, 0xef54, 0xec57, 0xef54, 0xeb3f, +0xee6f, 0xeb3f, 0xee6f, 0xea97, 0xede8, 0xea97, 0xede8, 0xea97, 0xede8, 0xea82, 0xede2, +0xea82, 0xede2, 0xea78, 0xedd2, 0xea78, 0xedd2, 0xea5d, 0xed9e, 0xea5d, 0xed9e, 0xea1a, +0xed2f, 0xea1a, 0xed2f, 0xea4f, 0xed29, 0xea4f, 0xed29, 0xea4f, 0xed29, 0xebc5, 0xee55, +0xebc5, 0xee55, 0xedc7, 0xf001, 0xedc7, 0xf001, 0xefcd, 0xf1a9, 0xefcd, 0xf1a9, 0xf244, +0xf3bb, 0xf244, 0xf3bb, 0xf539, 0xf64a, 0xf539, 0xf64a, 0xf87e, 0xf92a, 0xf87e, 0xf92a, +0xf87e, 0xf92a, 0xfc18, 0xfc60, 0xfc18, 0xfc60, 0x11, 0xfffd, 0x11, 0xfffd, 0x369, +0x2ff, 0x369, 0x2ff, 0x5aa, 0x4f4, 0x5aa, 0x4f4, 0x7f3, 0x6fb, 0x7f3, 0x6fb, +0x9c8, 0x897, 0x9c8, 0x897, 0x9c8, 0x897, 0xaa1, 0x942, 0xaa1, 0x942, 0xb6f, +0x9eb, 0xb6f, 0x9eb, 0xc29, 0xa88, 0xc29, 0xa88, 0xc42, 0xa8c, 0xc42, 0xa8c, +0xc1f, 0xa58, 0xc1f, 0xa58, 0xc1f, 0xa58, 0xc0f, 0xa3b, 0xc0f, 0xa3b, 0xba5, +0x9c6, 0xba5, 0x9c6, 0xb29, 0x93f, 0xb29, 0x93f, 0xb1e, 0x929, 0xb1e, 0x929, +0xb8b, 0x987, 0xb8b, 0x987, 0xc46, 0xa33, 0xc46, 0xa33, 0xc46, 0xa33, 0xcbb, +0xa95, 0xcbb, 0xa95, 0xceb, 0xab0, 0xceb, 0xab0, 0xd59, 0xb07, 0xd59, 0xb07, +0xd9e, 0xb35, 0xd9e, 0xb35, 0xd6b, 0xaed, 0xd6b, 0xaed, 0xd72, 0xae1, 0xd72, +0xae1, 0xd72, 0xae1, 0xd9f, 0xb00, 0xd9f, 0xb00, 0xde8, 0xb43, 0xde8, 0xb43, +0xe83, 0xbe0, 0xe83, 0xbe0, 0xe52, 0xbbb, 0xe52, 0xbbb, 0xce8, 0xa69, 0xce8, +0xa69, 0xce8, 0xa69, 0xb0b, 0x8b0, 0xb0b, 0x8b0, 0x942, 0x718, 0x942, 0x718, +0x76b, 0x580, 0x76b, 0x580, 0x56d, 0x3cd, 0x56d, 0x3cd, 0x383, 0x238, 0x383, +0x238, 0x1c7, 0xdc, 0x1c7, 0xdc, 0x1c7, 0xdc, 0x37, 0xffb2, 0x37, 0xffb2, +0xfec8, 0xfeb0, 0xfec8, 0xfeb0, 0xfd71, 0xfdc7, 0xfd71, 0xfdc7, 0xfbb9, 0xfc7d, 0xfbb9, +0xfc7d, 0xf9aa, 0xfad9, 0xf9aa, 0xfad9, 0xf79c, 0xf92f, 0xf79c, 0xf92f, 0xf79c, 0xf92f, +0xf52f, 0xf71e, 0xf52f, 0xf71e, 0xf272, 0xf4b4, 0xf272, 0xf4b4, 0xf014, 0xf29b, 0xf014, +0xf29b, 0xee2d, 0xf0ed, 0xee2d, 0xf0ed, 0xecf5, 0xefe0, 0xecf5, 0xefe0, 0xecf5, 0xefe0, +0xecd4, 0xefdc, 0xecd4, 0xefdc, 0xecea, 0xf002, 0xecea, 0xf002, 0xec88, 0xefa4, 0xec88, +0xefa4, 0xeba6, 0xeebe, 0xeba6, 0xeebe, 0xeaf6, 0xee00, 0xeaf6, 0xee00, 0xeb0a, 0xee01, +0xeb0a, 0xee01, 0xeb0a, 0xee01, 0xeafb, 0xeddc, 0xeafb, 0xeddc, 0xead3, 0xed9d, 0xead3, +0xed9d, 0xeb01, 0xedb6, 0xeb01, 0xedb6, 0xeb96, 0xee3a, 0xeb96, 0xee3a, 0xec44, 0xeedc, +0xec44, 0xeedc, 0xed25, 0xefb9, 0xed25, 0xefb9, 0xed25, 0xefb9, 0xee3a, 0xf0d0, 0xee3a, +0xf0d0, 0xee6e, 0xf10e, 0xee6e, 0xf10e, 0xeef1, 0xf1a3, 0xeef1, 0xf1a3, 0xefe8, 0xf2af, +0xefe8, 0xf2af, 0xf002, 0xf2e3, 0xf002, 0xf2e3, 0xf002, 0xf2e3, 0xef90, 0xf28d, 0xef90, +0xf28d, 0xeedd, 0xf1f3, 0xeedd, 0xf1f3, 0xeea2, 0xf1cc, 0xeea2, 0xf1cc, 0xee93, 0xf1cb, +0xee93, 0xf1cb, 0xee31, 0xf16c, 0xee31, 0xf16c, 0xeda8, 0xf0d9, 0xeda8, 0xf0d9, 0xeda8, +0xf0d9, 0xed3d, 0xf054, 0xed3d, 0xf054, 0xedce, 0xf0b9, 0xedce, 0xf0b9, 0xee9e, 0xf14a, +0xee9e, 0xf14a, 0xefc3, 0xf21c, 0xefc3, 0xf21c, 0xf1cb, 0xf3be, 0xf1cb, 0xf3be, 0xf43b, +0xf5b5, 0xf43b, 0xf5b5, 0xf43b, 0xf5b5, 0xf787, 0xf877, 0xf787, 0xf877, 0xfb6b, 0xfbc2, +0xfb6b, 0xfbc2, 0xff80, 0xff35, 0xff80, 0xff35, 0x3d4, 0x2de, 0x3d4, 0x2de, 0x8b2, +0x70e, 0x8b2, 0x70e, 0x8b2, 0x70e, 0xd45, 0xaf5, 0xd45, 0xaf5, 0x115a, 0xe62, +0x115a, 0xe62, 0x1587, 0x11f3, 0x1587, 0x11f3, 0x1861, 0x143e, 0x1861, 0x143e, 0x1acc, +0x162b, 0x1acc, 0x162b, 0x1d56, 0x184d, 0x1d56, 0x184d, 0x1d56, 0x184d, 0x1f15, 0x19bb, +0x1f15, 0x19bb, 0x201c, 0x1a8b, 0x201c, 0x1a8b, 0x209d, 0x1aee, 0x209d, 0x1aee, 0x2114, +0x1b5f, 0x2114, 0x1b5f, 0x2133, 0x1b91, 0x2133, 0x1b91, 0x2176, 0x1bfc, 0x2176, 0x1bfc, +0x2176, 0x1bfc, 0x2199, 0x1c5c, 0x2199, 0x1c5c, 0x20f3, 0x1c04, 0x20f3, 0x1c04, 0x1fa5, +0x1b10, 0x1fa5, 0x1b10, 0x1dc7, 0x1995, 0x1dc7, 0x1995, 0x1bcc, 0x1803, 0x1bcc, 0x1803, +0x1bcc, 0x1803, 0x1977, 0x1618, 0x1977, 0x1618, 0x16fb, 0x1403, 0x16fb, 0x1403, 0x1524, +0x128f, 0x1524, 0x128f, 0x13cd, 0x1191, 0x13cd, 0x1191, 0x1283, 0x1096, 0x1283, 0x1096, +0x10f7, 0xf4e, 0x10f7, 0xf4e, 0x10f7, 0xf4e, 0xec9, 0xd57, 0xec9, 0xd57, 0xca9, +0xb61, 0xca9, 0xb61, 0xa80, 0x957, 0xa80, 0x957, 0x8c9, 0x7b5, 0x8c9, 0x7b5, +0x7b5, 0x6ae, 0x7b5, 0x6ae, 0x5f4, 0x4f5, 0x5f4, 0x4f5, 0x5f4, 0x4f5, 0x4ac, +0x3b0, 0x4ac, 0x3b0, 0x439, 0x340, 0x439, 0x340, 0x422, 0x32e, 0x422, 0x32e, +0x43b, 0x351, 0x43b, 0x351, 0x469, 0x38f, 0x469, 0x38f, 0x469, 0x38f, 0x4a2, +0x3e0, 0x4a2, 0x3e0, 0x425, 0x384, 0x425, 0x384, 0x3a8, 0x331, 0x3a8, 0x331, +0x365, 0x322, 0x365, 0x322, 0x28c, 0x284, 0x28c, 0x284, 0x11a, 0x155, 0x11a, +0x155, 0x11a, 0x155, 0xff42, 0xffc3, 0xff42, 0xffc3, 0xfd62, 0xfe2b, 0xfd62, 0xfe2b, +0xfb97, 0xfca8, 0xfb97, 0xfca8, 0xf9d3, 0xfb29, 0xf9d3, 0xfb29, 0xf7bb, 0xf94e, 0xf7bb, +0xf94e, 0xf5a3, 0xf76b, 0xf5a3, 0xf76b, 0xf5a3, 0xf76b, 0xf4b0, 0xf6a0, 0xf4b0, 0xf6a0, +0xf44a, 0xf656, 0xf44a, 0xf656, 0xf47a, 0xf692, 0xf47a, 0xf692, 0xf51a, 0xf72e, 0xf51a, +0xf72e, 0xf59e, 0xf79f, 0xf59e, 0xf79f, 0xf59e, 0xf79f, 0xf691, 0xf870, 0xf691, 0xf870, +0xf7da, 0xf988, 0xf7da, 0xf988, 0xf90d, 0xfa80, 0xf90d, 0xfa80, 0xfa32, 0xfb61, 0xfa32, +0xfb61, 0xfbea, 0xfccf, 0xfbea, 0xfccf, 0xfdca, 0xfe63, 0xfdca, 0xfe63, 0xfdca, 0xfe63, +0x13, 0x61, 0x13, 0x61, 0x1d5, 0x1dd, 0x1d5, 0x1dd, 0x277, 0x243, 0x277, +0x243, 0x2cb, 0x265, 0x2cb, 0x265, 0x252, 0x1c9, 0x252, 0x1c9, 0x252, 0x1c9, +0x1a5, 0x109, 0x1a5, 0x109, 0xa3, 0x6, 0xa3, 0x6, 0xff8f, 0xff02, 0xff8f, +0xff02, 0xfe9f, 0xfe36, 0xfe9f, 0xfe36, 0xfd4e, 0xfd19, 0xfd4e, 0xfd19, 0xfbf7, 0xfc05, +0xfbf7, 0xfc05, 0xfbf7, 0xfc05, 0xfae1, 0xfb3f, 0xfae1, 0xfb3f, 0xf986, 0xfa3d, 0xf986, +0xfa3d, 0xf7b0, 0xf8c7, 0xf7b0, 0xf8c7, 0xf5f1, 0xf76b, 0xf5f1, 0xf76b, 0xf475, 0xf650, +0xf475, 0xf650, 0xf2dc, 0xf513, 0xf2dc, 0xf513, 0xf2dc, 0xf513, 0xf150, 0xf3da, 0xf150, +0xf3da, 0xf006, 0xf2d8, 0xf006, 0xf2d8, 0xef0f, 0xf21b, 0xef0f, 0xf21b, 0xeeea, 0xf220, +0xeeea, 0xf220, 0xef0a, 0xf257, 0xef0a, 0xf257, 0xef0a, 0xf257, 0xef2b, 0xf27c, 0xef2b, +0xf27c, 0xeee9, 0xf22d, 0xeee9, 0xf22d, 0xef1e, 0xf243, 0xef1e, 0xf243, 0xefd0, 0xf2c6, +0xefd0, 0xf2c6, 0xf064, 0xf31d, 0xf064, 0xf31d, 0xf14d, 0xf3bd, 0xf14d, 0xf3bd, 0xf14d, +0xf3bd, 0xf22e, 0xf44c, 0xf22e, 0xf44c, 0xf3de, 0xf5a4, 0xf3de, 0xf5a4, 0xf65f, 0xf7ca, +0xf65f, 0xf7ca, 0xf928, 0xfa38, 0xf928, 0xfa38, 0xfc27, 0xfcdd, 0xfc27, 0xfcdd, 0xff39, +0xff9b, 0xff39, 0xff9b, 0xff39, 0xff9b, 0x1cf, 0x1e2, 0x1cf, 0x1e2, 0x46b, 0x438, +0x46b, 0x438, 0x6b2, 0x640, 0x6b2, 0x640, 0x885, 0x7dc, 0x885, 0x7dc, 0x9d9, +0x901, 0x9d9, 0x901, 0x9d9, 0x901, 0xa72, 0x973, 0xa72, 0x973, 0xb52, 0xa31, +0xb52, 0xa31, 0xbbb, 0xa7d, 0xbbb, 0xa7d, 0xc1a, 0xac2, 0xc1a, 0xac2, 0xbae, +0xa3e, 0xbae, 0xa3e, 0xb24, 0x99a, 0xb24, 0x99a, 0xb24, 0x99a, 0xb02, 0x95e, +0xb02, 0x95e, 0xb25, 0x964, 0xb25, 0x964, 0xb8f, 0x9ad, 0xb8f, 0x9ad, 0xb68, +0x963, 0xb68, 0x963, 0xb3f, 0x914, 0xb3f, 0x914, 0xad6, 0x883, 0xad6, 0x883, +0xad6, 0x883, 0xadd, 0x860, 0xadd, 0x860, 0xb04, 0x860, 0xb04, 0x860, 0xb29, +0x860, 0xb29, 0x860, 0xaef, 0x805, 0xaef, 0x805, 0xacc, 0x7ca, 0xacc, 0x7ca, +0xacc, 0x7ca, 0xb29, 0x818, 0xb29, 0x818, 0xb4d, 0x83a, 0xb4d, 0x83a, 0xaef, +0x7e6, 0xaef, 0x7e6, 0xa44, 0x755, 0xa44, 0x755, 0x98f, 0x6ca, 0x98f, 0x6ca, +0x860, 0x5d5, 0x860, 0x5d5, 0x860, 0x5d5, 0x6f2, 0x4b1, 0x6f2, 0x4b1, 0x535, +0x34d, 0x535, 0x34d, 0x3ee, 0x26d, 0x3ee, 0x26d, 0x247, 0x137, 0x247, 0x137, +0xfb, 0x65, 0xfb, 0x65, 0xfff6, 0xffe0, 0xfff6, 0xffe0, 0xfff6, 0xffe0, 0xfe5d, +0xfeca, 0xfe5d, 0xfeca, 0xfcb7, 0xfda5, 0xfcb7, 0xfda5, 0xfaf0, 0xfc5a, 0xfaf0, 0xfc5a, +0xf93b, 0xfb1b, 0xf93b, 0xfb1b, 0xf6de, 0xf928, 0xf6de, 0xf928, 0xf6de, 0xf928, 0xf4a4, +0xf74b, 0xf4a4, 0xf74b, 0xf29c, 0xf590, 0xf29c, 0xf590, 0xf117, 0xf449, 0xf117, 0xf449, +0xf036, 0xf394, 0xf036, 0xf394, 0xef55, 0xf2ce, 0xef55, 0xf2ce, 0xee5e, 0xf1e2, 0xee5e, +0xf1e2, 0xee5e, 0xf1e2, 0xedf6, 0xf176, 0xedf6, 0xf176, 0xed5c, 0xf0ca, 0xed5c, 0xf0ca, +0xed02, 0xf056, 0xed02, 0xf056, 0xed60, 0xf090, 0xed60, 0xf090, 0xed41, 0xf049, 0xed41, +0xf049, 0xed5c, 0xf03a, 0xed5c, 0xf03a, 0xed5c, 0xf03a, 0xede0, 0xf095, 0xede0, 0xf095, +0xef7c, 0xf20c, 0xef7c, 0xf20c, 0xf074, 0xf2e4, 0xf074, 0xf2e4, 0xf13b, 0xf392, 0xf13b, +0xf392, 0xf1b5, 0xf3fc, 0xf1b5, 0xf3fc, 0xf1b5, 0xf3fc, 0xf200, 0xf43f, 0xf200, 0xf43f, +0xf2f0, 0xf52f, 0xf2f0, 0xf52f, 0xf2e6, 0xf52c, 0xf2e6, 0xf52c, 0xf280, 0xf4d4, 0xf280, +0xf4d4, 0xf1d9, 0xf43d, 0xf1d9, 0xf43d, 0xf173, 0xf3e8, 0xf173, 0xf3e8, 0xf173, 0xf3e8, +0xf0b1, 0xf336, 0xf0b1, 0xf336, 0xefe5, 0xf273, 0xefe5, 0xf273, 0xeec9, 0xf159, 0xeec9, +0xf159, 0xedb7, 0xf03e, 0xedb7, 0xf03e, 0xed35, 0xefa4, 0xed35, 0xefa4, 0xecff, 0xef48, +0xecff, 0xef48, 0xecff, 0xef48, 0xed6c, 0xef7e, 0xed6c, 0xef7e, 0xee84, 0xf04d, 0xee84, +0xf04d, 0xf01b, 0xf18a, 0xf01b, 0xf18a, 0xf1aa, 0xf2af, 0xf1aa, 0xf2af, 0xf4b7, 0xf543, +0xf4b7, 0xf543, 0xf4b7, 0xf543, 0xf856, 0xf85c, 0xf856, 0xf85c, 0xfc24, 0xfb9b, 0xfc24, +0xfb9b, 0x7d, 0xff5f, 0x7d, 0xff5f, 0x4d4, 0x320, 0x4d4, 0x320, 0x8b2, 0x669, +0x8b2, 0x669, 0xcbf, 0x9e8, 0xcbf, 0x9e8, 0xcbf, 0x9e8, 0x10aa, 0xd4f, 0x10aa, +0xd4f, 0x13b6, 0xfe5, 0x13b6, 0xfe5, 0x1643, 0x120d, 0x1643, 0x120d, 0x186a, 0x13e3, +0x186a, 0x13e3, 0x1a4b, 0x1589, 0x1a4b, 0x1589, 0x1afe, 0x1618, 0x1afe, 0x1618, 0x1afe, +0x1618, 0x1bc8, 0x16d4, 0x1bc8, 0x16d4, 0x1c2c, 0x1742, 0x1c2c, 0x1742, 0x1c7e, 0x17b1, +0x1c7e, 0x17b1, 0x1d09, 0x186d, 0x1d09, 0x186d, 0x1d0e, 0x18b3, 0x1d0e, 0x18b3, 0x1d0e, +0x18b3, 0x1c90, 0x1882, 0x1c90, 0x1882, 0x1bc8, 0x1811, 0x1bc8, 0x1811, 0x1aa0, 0x1745, +0x1aa0, 0x1745, 0x18e4, 0x15e7, 0x18e4, 0x15e7, 0x1797, 0x14f5, 0x1797, 0x14f5, 0x1625, +0x13d9, 0x1625, 0x13d9, 0x1625, 0x13d9, 0x1503, 0x1305, 0x1503, 0x1305, 0x13dc, 0x1222, +0x13dc, 0x1222, 0x12d8, 0x1155, 0x12d8, 0x1155, 0x1141, 0xfe9, 0x1141, 0xfe9, 0x1007, +0xecd, 0x1007, 0xecd, 0xeeb, 0xdc2, 0xeeb, 0xdc2, 0xeeb, 0xdc2, 0xd0a, 0xbe7, +0xd0a, 0xbe7, 0xbc0, 0xa9a, 0xbc0, 0xa9a, 0xa5b, 0x92b, 0xa5b, 0x92b, 0x921, +0x7e3, 0x921, 0x7e3, 0x7eb, 0x69d, 0x7eb, 0x69d, 0x7eb, 0x69d, 0x77b, 0x61f, +0x77b, 0x61f, 0x742, 0x5db, 0x742, 0x5db, 0x728, 0x5bd, 0x728, 0x5bd, 0x6d7, +0x571, 0x6d7, 0x571, 0x6a8, 0x551, 0x6a8, 0x551, 0x6ae, 0x571, 0x6ae, 0x571, +0x6ae, 0x571, 0x6c5, 0x5ad, 0x6c5, 0x5ad, 0x6d6, 0x5ee, 0x6d6, 0x5ee, 0x5ff, +0x551, 0x5ff, 0x551, 0x4cd, 0x460, 0x4cd, 0x460, 0x38c, 0x367, 0x38c, 0x367, +0x38c, 0x367, 0x2ec, 0x313, 0x2ec, 0x313, 0x10e, 0x181, 0x10e, 0x181, 0xff23, +0xffe0, 0xff23, 0xffe0, 0xfd62, 0xfe64, 0xfd62, 0xfe64, 0xfbc5, 0xfd06, 0xfbc5, 0xfd06, +0xfa5e, 0xfbd2, 0xfa5e, 0xfbd2, 0xfa5e, 0xfbd2, 0xf97d, 0xfb19, 0xf97d, 0xfb19, 0xf970, +0xfb27, 0xf970, 0xfb27, 0xf8ef, 0xfab2, 0xf8ef, 0xfab2, 0xf923, 0xfae5, 0xf923, 0xfae5, +0xf976, 0xfb27, 0xf976, 0xfb27, 0xf9f8, 0xfb8e, 0xf9f8, 0xfb8e, 0xf9f8, 0xfb8e, 0xf9f6, +0xfb64, 0xf9f6, 0xfb64, 0xfb2f, 0xfc6e, 0xfb2f, 0xfc6e, 0xfc28, 0xfd31, 0xfc28, 0xfd31, +0xfd07, 0xfdd8, 0xfd07, 0xfdd8, 0xff13, 0xffac, 0xff13, 0xffac, 0xff13, 0xffac, 0x53, +0xb6, 0x53, 0xb6, 0xf0, 0x124, 0xf0, 0x124, 0xe5, 0xf3, 0xe5, 0xf3, +0xe2, 0xd4, 0xe2, 0xd4, 0x6, 0xffe8, 0x6, 0xffe8, 0xff4e, 0xff2f, 0xff4e, +0xff2f, 0xff4e, 0xff2f, 0xfdf9, 0xfde7, 0xfdf9, 0xfde7, 0xfcc6, 0xfcce, 0xfcc6, 0xfcce, +0xfbb4, 0xfbe2, 0xfbb4, 0xfbe2, 0xfa7d, 0xfadf, 0xfa7d, 0xfadf, 0xf941, 0xf9df, 0xf941, +0xf9df, 0xf7d1, 0xf8b2, 0xf7d1, 0xf8b2, 0xf7d1, 0xf8b2, 0xf65d, 0xf786, 0xf65d, 0xf786, +0xf486, 0xf5f8, 0xf486, 0xf5f8, 0xf36d, 0xf526, 0xf36d, 0xf526, 0xf1bd, 0xf3ba, 0xf1bd, +0xf3ba, 0xf038, 0xf271, 0xf038, 0xf271, 0xf038, 0xf271, 0xee5f, 0xf0cb, 0xee5f, 0xf0cb, +0xedec, 0xf080, 0xedec, 0xf080, 0xed82, 0xf032, 0xed82, 0xf032, 0xec72, 0xef31, 0xec72, +0xef31, 0xec56, 0xef15, 0xec56, 0xef15, 0xebfc, 0xeead, 0xebfc, 0xeead, 0xebfc, 0xeead, +0xec4b, 0xeee2, 0xec4b, 0xeee2, 0xece3, 0xef56, 0xece3, 0xef56, 0xedc1, 0xf005, 0xedc1, +0xf005, 0xee12, 0xf01f, 0xee12, 0xf01f, 0xef6c, 0xf13d, 0xef6c, 0xf13d, 0xf168, 0xf2f9, +0xf168, 0xf2f9, 0xf168, 0xf2f9, 0xf3ec, 0xf53b, 0xf3ec, 0xf53b, 0xf6f4, 0xf802, 0xf6f4, +0xf802, 0xf9d9, 0xfaa8, 0xf9d9, 0xfaa8, 0xfc77, 0xfd0b, 0xfc77, 0xfd0b, 0xff47, 0xffa3, +0xff47, 0xffa3, 0xff47, 0xffa3, 0x298, 0x2c2, 0x298, 0x2c2, 0x4fe, 0x4fb, 0x4fe, +0x4fb, 0x6e1, 0x6b6, 0x6e1, 0x6b6, 0x7ce, 0x77f, 0x7ce, 0x77f, 0x8c2, 0x853, +0x8c2, 0x853, 0x944, 0x8b7, 0x944, 0x8b7, 0x944, 0x8b7, 0x9d0, 0x925, 0x9d0, +0x925, 0x99a, 0x8d2, 0x99a, 0x8d2, 0x95c, 0x877, 0x95c, 0x877, 0x997, 0x891, +0x997, 0x891, 0x950, 0x826, 0x950, 0x826, 0x9ad, 0x85c, 0x9ad, 0x85c, 0x9ad, +0x85c, 0x99f, 0x824, 0x99f, 0x824, 0xa03, 0x85b, 0xa03, 0x85b, 0xa60, 0x889, +0xa60, 0x889, 0x9f4, 0x7ee, 0x9f4, 0x7ee, 0xabe, 0x888, 0xabe, 0x888, 0xabe, +0x888, 0xb21, 0x8bf, 0xb21, 0x8bf, 0xab0, 0x828, 0xab0, 0x828, 0xc1c, 0x972, +0xc1c, 0x972, 0xb6e, 0x8ad, 0xb6e, 0x8ad, 0xc01, 0x934, 0xc01, 0x934, 0xcec, +0xa20, 0xcec, 0xa20, 0xcec, 0xa20, 0xbf4, 0x936, 0xbf4, 0x936, 0xbb4, 0x914, +0xbb4, 0x914, 0xa4e, 0x7dc, 0xa4e, 0x7dc, 0x9b4, 0x77f, 0x9b4, 0x77f, 0x7a5, +0x5bc, 0x7a5, 0x5bc, 0x6ad, 0x51e, 0x6ad, 0x51e, 0x6ad, 0x51e, 0x52d, 0x404, +0x52d, 0x404, 0x39c, 0x2e3, 0x39c, 0x2e3, 0x2df, 0x29d, 0x2df, 0x29d, 0x16b, +0x1a5, 0x16b, 0x1a5, 0xffbe, 0x74, 0xffbe, 0x74, 0xffbe, 0x74, 0xfd3a, 0xfe6b, +0xfd3a, 0xfe6b, 0xfc92, 0xfe38, 0xfc92, 0xfe38, 0xfa43, 0xfc57, 0xfa43, 0xfc57, 0xf7f2, +0xfa68, 0xf7f2, 0xfa68, 0xf567, 0xf834, 0xf567, 0xf834, 0xf338, 0xf64d, 0xf338, 0xf64d, +0xf338, 0xf64d, 0xf1b3, 0xf500, 0xf1b3, 0xf500, 0xf06a, 0xf3e1, 0xf06a, 0xf3e1, 0xefc3, +0xf354, 0xefc3, 0xf354, 0xeeb0, 0xf24c, 0xeeb0, 0xf24c, 0xedf1, 0xf18b, 0xedf1, 0xf18b, +0xecda, 0xf065, 0xecda, 0xf065, 0xecda, 0xf065, 0xec6d, 0xefe0, 0xec6d, 0xefe0, 0xeb7a, +0xeece, 0xeb7a, 0xeece, 0xeb1f, 0xee4e, 0xeb1f, 0xee4e, 0xeaf3, 0xedfc, 0xeaf3, 0xedfc, +0xeb6e, 0xee50, 0xeb6e, 0xee50, 0xeb6e, 0xee50, 0xeb09, 0xedc6, 0xeb09, 0xedc6, 0xeb26, +0xedc2, 0xeb26, 0xedc2, 0xec78, 0xeef7, 0xec78, 0xeef7, 0xed82, 0xefe9, 0xed82, 0xefe9, +0xeef3, 0xf148, 0xeef3, 0xf148, 0xef31, 0xf179, 0xef31, 0xf179, 0xef31, 0xf179, 0xf003, +0xf242, 0xf003, 0xf242, 0xf094, 0xf2cd, 0xf094, 0xf2cd, 0xf028, 0xf25c, 0xf028, 0xf25c, +0xefc4, 0xf1f1, 0xefc4, 0xf1f1, 0xf11c, 0xf340, 0xf11c, 0xf340, 0xf0d6, 0xf2ea, 0xf0d6, +0xf2ea, 0xf0d6, 0xf2ea, 0xf002, 0xf1ff, 0xf002, 0xf1ff, 0xef29, 0xf105, 0xef29, 0xf105, +0xee66, 0xf016, 0xee66, 0xf016, 0xeee3, 0xf05a, 0xeee3, 0xf05a, 0xf02b, 0xf15b, 0xf02b, +0xf15b, 0xf02b, 0xf15b, 0xf277, 0xf352, 0xf277, 0xf352, 0xf35f, 0xf3d9, 0xf35f, 0xf3d9, +0xf61a, 0xf627, 0xf61a, 0xf627, 0xf8a7, 0xf83c, 0xf8a7, 0xf83c, 0xfc54, 0xfb6b, 0xfc54, +0xfb6b, 0xff60, 0xfdf2, 0xff60, 0xfdf2, 0xff60, 0xfdf2, 0x314, 0x120, 0x314, 0x120, +0x754, 0x4db, 0x754, 0x4db, 0xa6b, 0x772, 0xa6b, 0x772, 0xe98, 0xb27, 0xe98, +0xb27, 0x108c, 0xcae, 0x108c, 0xcae, 0x1483, 0x1047, 0x1483, 0x1047, 0x1483, 0x1047, +0x176e, 0x12e5, 0x176e, 0x12e5, 0x19da, 0x1515, 0x19da, 0x1515, 0x1bf8, 0x170b, 0x1bf8, +0x170b, 0x1d81, 0x1881, 0x1d81, 0x1881, 0x1f4c, 0x1a4c, 0x1f4c, 0x1a4c, 0x1f4c, 0x1a4c, +0x1f8d, 0x1aa2, 0x1f8d, 0x1aa2, 0x1ffb, 0x1b35, 0x1ffb, 0x1b35, 0x1fe2, 0x1b51, 0x1fe2, +0x1b51, 0x2084, 0x1c36, 0x2084, 0x1c36, 0x2048, 0x1c47, 0x2048, 0x1c47, 0x1ef5, 0x1b48, +0x1ef5, 0x1b48, 0x1ef5, 0x1b48, 0x1da0, 0x1a4b, 0x1da0, 0x1a4b, 0x1c19, 0x191c, 0x1c19, +0x191c, 0x1a18, 0x1772, 0x1a18, 0x1772, 0x184f, 0x15f9, 0x184f, 0x15f9, 0x163c, 0x1430, +0x163c, 0x1430, 0x163c, 0x1430, 0x154e, 0x1382, 0x154e, 0x1382, 0x1464, 0x12cd, 0x1464, +0x12cd, 0x1383, 0x1217, 0x1383, 0x1217, 0x11d9, 0x108d, 0x11d9, 0x108d, 0xf85, 0xe4e, +0xf85, 0xe4e, 0xefa, 0xdcd, 0xefa, 0xdcd, 0xefa, 0xdcd, 0xd64, 0xc3a, 0xd64, +0xc3a, 0xc62, 0xb34, 0xc62, 0xb34, 0xa35, 0x8ff, 0xa35, 0x8ff, 0x8c1, 0x781, +0x8c1, 0x781, 0x7bf, 0x675, 0x7bf, 0x675, 0x6fa, 0x5aa, 0x6fa, 0x5aa, 0x6fa, +0x5aa, 0x5f3, 0x4a0, 0x5f3, 0x4a0, 0x5e7, 0x498, 0x5e7, 0x498, 0x708, 0x5c5, +0x708, 0x5c5, 0x654, 0x524, 0x654, 0x524, 0x67a, 0x567, 0x67a, 0x567, 0x67a, +0x567, 0x4a5, 0x3b6, 0x4a5, 0x3b6, 0x3a6, 0x2e4, 0x3a6, 0x2e4, 0x253, 0x1c4, +0x253, 0x1c4, 0x1b9, 0x163, 0x1b9, 0x163, 0xb0, 0x96, 0xb0, 0x96, 0xfe26, +0xfe4a, 0xfe26, 0xfe4a, 0xfe26, 0xfe4a, 0xfbe6, 0xfc46, 0xfbe6, 0xfc46, 0xf8a9, 0xf944, +0xf8a9, 0xf944, 0xf690, 0xf761, 0xf690, 0xf761, 0xf578, 0xf67a, 0xf578, 0xf67a, 0xf65e, +0xf788, 0xf65e, 0xf788, 0xf67b, 0xf7c5, 0xf67b, 0xf7c5, 0xf67b, 0xf7c5, 0xf6b5, 0xf817, +0xf6b5, 0xf817, 0xf64d, 0xf7bd, 0xf64d, 0xf7bd, 0xf782, 0xf8f7, 0xf782, 0xf8f7, 0xf911, +0xfa84, 0xf911, 0xfa84, 0xfa53, 0xfbbd, 0xfa53, 0xfbbd, 0xfa53, 0xfbbd, 0xfc32, 0xfd8d, +0xfc32, 0xfd8d, 0xfd17, 0xfe60, 0xfd17, 0xfe60, 0xfefc, 0x31, 0xfefc, 0x31, 0xffc1, +0xe3, 0xffc1, 0xe3, 0xff, 0x210, 0xff, 0x210, 0x16b, 0x26f, 0x16b, 0x26f, +0x16b, 0x26f, 0x292, 0x390, 0x292, 0x390, 0x399, 0x497, 0x399, 0x497, 0x314, +0x41a, 0x314, 0x41a, 0x1b4, 0x2c9, 0x1b4, 0x2c9, 0xbe, 0x1ec, 0xbe, 0x1ec, +0x4, 0x151, 0x4, 0x151, 0x4, 0x151, 0xff14, 0x88, 0xff14, 0x88, 0xfdee, +0xff8d, 0xfdee, 0xff8d + }; diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/main.c new file mode 100644 index 000000000..07fdeca1d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/main.c @@ -0,0 +1,412 @@ +/** + ****************************************************************************** + * @file I2S/Audio/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2S_Audio + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +#define MESSAGE1 " STM32F2xx " +#define MESSAGE2 " Device running on " +#define MESSAGE3 " STM322xG-EVAL " + +/* Audio file size and start address are defined here since the audio file is + stored in Flash memory as a constant table of 16-bit data */ +#define AUDIO_FILE_SZE 990000 +#define AUIDO_START_ADDRESS 58 /* Offset relative to audio file header size */ + +__IO uint32_t cmd = AUDIO_PAUSE; +__IO uint32_t volume = 70; + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +static __IO uint32_t TimingDelay; +RCC_ClocksTypeDef RCC_Clocks; + +/* Variable to indicate that push buttons will be used for switching between + Headphone and Speaker output modes. */ +uint32_t SpHpSwitch = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs, Key Button, LCD available on + STM322xG-EVAL board ******************************************************/ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Initialize the Push buttons */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); /* Key button for Pause/Resume */ + STM_EVAL_PBInit(BUTTON_WAKEUP, BUTTON_MODE_GPIO); /* Key button for Volume High */ + STM_EVAL_PBInit(BUTTON_TAMPER, BUTTON_MODE_GPIO); /* Key button for Volume Low */ + + /* Initialize the LCD */ + STM322xG_LCD_Init(); + + /* Display message on STM322xG-EVAL LCD *************************************/ + /* Clear the LCD */ + LCD_Clear(LCD_COLOR_BLUE); + + /* Set the LCD Back Color */ + LCD_SetBackColor(Blue); + /* Set the LCD Text Color */ + LCD_SetTextColor(White); + LCD_DisplayStringLine(Line0, MESSAGE1); + LCD_DisplayStringLine(Line1, MESSAGE2); + LCD_DisplayStringLine(Line2, MESSAGE3); + + /* Turn on leds available on STM322xG-EVAL **********************************/ + STM_EVAL_LEDOn(LED1); + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + + /* SysTick end of count event each 10ms */ + RCC_GetClocksFreq(&RCC_Clocks); + SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); + + /* Initialize the Audio codec and all related peripherals (I2S, I2C, IOExpander, IOs...) */ + if (EVAL_AUDIO_Init(OUTPUT_DEVICE_AUTO, volume, I2S_AudioFreq_48k) == 0) + { + LCD_DisplayStringLine(Line3, "===================="); + LCD_DisplayStringLine(Line4, "Key : Play/Pause "); + LCD_DisplayStringLine(Line5, "Tamper: Vol+/Headph"); + LCD_DisplayStringLine(Line6, "Wakeup: Vol-/Spkr "); + LCD_DisplayStringLine(Line7, "===================="); + LCD_DisplayStringLine(Line8, " AUDIO CODEC OK "); + } + else + { + LCD_DisplayStringLine(Line4, " AUDIO CODEC FAIL "); + LCD_DisplayStringLine(Line5, " Try to reset board "); + } + + + /* + Normal mode description: + Start playing the audio file (using DMA stream) . + Using this mode, the application can run other tasks in parallel since + the DMA is handling the Audio Transfer instead of the CPU. + The only task remaining for the CPU will be the management of the DMA + Transfer Complete interrupt or the Half Transfer Complete interrupt in + order to load again the buffer and to calculate the remaining data. + Circular mode description: + Start playing the file from a circular buffer, once the DMA is enabled it + always run. User has to fill periodically the buffer with the audio data + using Transfer complete and/or half transfer complete interrupts callbacks + (EVAL_AUDIO_TransferComplete_CallBack() or EVAL_AUDIO_HalfTransfer_CallBack()... + In this case the audio data file is smaller than the DMA max buffer + size 65535 so there is no need to load buffer continuously or manage the + transfer complete or Half transfer interrupts callbacks. */ + EVAL_AUDIO_Play((uint16_t*)(AUDIO_SAMPLE + AUIDO_START_ADDRESS), (AUDIO_FILE_SZE - AUIDO_START_ADDRESS)); + + /* Display the state on the screen */ + LCD_DisplayStringLine(Line8, " PLAYING "); + + /* Infinite loop */ + while (1) + { + /* Check on the Pause/Resume button */ + if (STM_EVAL_PBGetState(BUTTON_KEY) != Bit_SET) + { + /* wait to avoid rebound */ + while (STM_EVAL_PBGetState(BUTTON_KEY) != Bit_SET); + + EVAL_AUDIO_PauseResume(cmd); + if (cmd == AUDIO_PAUSE) + { + /* Display the current state of the player */ + LCD_DisplayStringLine(Line8, " PAUSED "); + + /* Next time Resume command should be processed */ + cmd = AUDIO_RESUME; + + /* Push buttons will be used to switch between Speaker and Headphone modes */ + SpHpSwitch = 1; + } + else + { + /* Display the current state of the player */ + LCD_DisplayStringLine(Line8, " PLAYING "); + + /* Next time Pause command should be processed */ + cmd = AUDIO_PAUSE; + + /* Push buttons will be used to control volume level */ + SpHpSwitch = 0; + } + } + + /* Check on the Volume high button */ + if (STM_EVAL_PBGetState(BUTTON_WAKEUP) == Bit_SET) + { + /* Check if the current state is paused (push buttons are used for volume control or for + speaker/headphone mode switching) */ + if (SpHpSwitch) + { + /* Set output to Speaker */ + Codec_SwitchOutput(OUTPUT_DEVICE_SPEAKER); + + /* Display the current state of the player */ + LCD_DisplayStringLine(Line9, " SPEAKER "); + } + else + { + /* wait to avoid rebound */ + while (STM_EVAL_PBGetState(BUTTON_WAKEUP) == Bit_SET); + + /* Decrease volume by 5% */ + if (volume > 5) + volume -= 5; + else + volume = 0; + + /* Apply the new volume to the codec */ + EVAL_AUDIO_VolumeCtl(volume); + LCD_DisplayStringLine(Line9, " VOL: - "); + } + } + + /* Check on the Volume high button */ + if (STM_EVAL_PBGetState(BUTTON_TAMPER) != Bit_SET) + { + /* Check if the current state is paused (push buttons are used for volume control or for + speaker/headphone mode switching) */ + if (SpHpSwitch) + { + /* Set output to Headphone */ + Codec_SwitchOutput(OUTPUT_DEVICE_HEADPHONE); + + /* Display the current state of the player */ + LCD_DisplayStringLine(Line9, " HEADPHONE "); + } + else + { + /* wait to avoid rebound */ + while (STM_EVAL_PBGetState(BUTTON_TAMPER) != Bit_SET); + + /* Increase volume by 5% */ + if (volume < 95) + volume += 5; + else + volume = 100; + + /* Apply the new volume to the codec */ + EVAL_AUDIO_VolumeCtl(volume); + LCD_DisplayStringLine(Line9, " VOL: + "); + } + } + + /* Toggle LD4 */ + STM_EVAL_LEDToggle(LED3); + + /* Insert 50 ms delay */ + Delay(5); + + /* Toggle LD2 */ + STM_EVAL_LEDToggle(LED2); + + /* Insert 50 ms delay */ + Delay(5); + } +} + +/*-------------------------------- + Callbacks implementation: + the callbacks prototypes are defined in the stm322xg_eval_audio_codec.h file + and their implementation should be done in the user coed if they are needed. + Below some examples of callback implementations. + --------------------------------------------------------*/ +/** + * @brief Calculates the remaining file size and new position of the pointer. + * @param None + * @retval None + */ +void EVAL_AUDIO_TransferComplete_CallBack(uint32_t pBuffer, uint32_t Size) +{ + /* Calculate the remaining audio data in the file and the new size + for the DMA transfer. If the Audio files size is less than the DMA max + data transfer size, so there is no calculation to be done, just restart + from the beginning of the file ... */ + /* Check if the end of file has been reached */ + +#ifdef AUDIO_MAL_MODE_NORMAL + + /* Replay from the beginning */ + EVAL_AUDIO_Play((uint16_t*)(AUDIO_SAMPLE + AUIDO_START_ADDRESS), (AUDIO_FILE_SZE - AUIDO_START_ADDRESS)); + +#else /* #ifdef AUDIO_MAL_MODE_CIRCULAR */ + + /* Display message on the LCD screen */ + LCD_DisplayStringLine(Line8, " All Buffer Reached "); + +#endif /* AUDIO_MAL_MODE_CIRCULAR */ +} + +/** + * @brief Manages the DMA Half Transfer complete interrupt. + * @param None + * @retval None + */ +void EVAL_AUDIO_HalfTransfer_CallBack(uint32_t pBuffer, uint32_t Size) +{ +#ifdef AUDIO_MAL_MODE_CIRCULAR + + /* Display message on the LCD screen */ + LCD_DisplayStringLine(Line8, " 1/2 Buffer Reached "); + +#endif /* AUDIO_MAL_MODE_CIRCULAR */ + + /* Generally this interrupt routine is used to load the buffer when + a streaming scheme is used: When first Half buffer is already transferred load + the new data to the first half of buffer while DMA is transferring data from + the second half. And when Transfer complete occurs, load the second half of + the buffer while the DMA is transferring from the first half ... */ + /* + ........... + */ +} + +/** + * @brief Manages the DMA FIFO error interrupt. + * @param None + * @retval None + */ +void EVAL_AUDIO_Error_CallBack(void* pData) +{ + /* Display message on the LCD screen */ + LCD_SetBackColor(Red); + LCD_DisplayStringLine(Line8, " DMA ERROR "); + + /* Stop the program with an infinite loop */ + while (1) + {} + + /* could also generate a system reset to recover from the error */ + /* .... */ +} + +#ifndef USE_DEFAULT_TIMEOUT_CALLBACK +/** + * @brief Basic management of the timeout situation. + * @param None. + * @retval None. + */ +uint32_t Codec_TIMEOUT_UserCallback(void) +{ + /* Display message on the LCD screen */ + LCD_DisplayStringLine(Line8, " CODEC I2C ERROR "); + + /* Block communication and all processes */ + while (1) + { + } +} +#endif /* USE_DEFAULT_TIMEOUT_CALLBACK */ +/*----------------------------------------------------------------------------*/ + +/** + * @brief Inserts a delay time. + * @param nTime: specifies the delay time length, in 10 ms. + * @retval None + */ +void Delay(__IO uint32_t nTime) +{ + TimingDelay = nTime; + + while(TimingDelay != 0); +} + +/** + * @brief Decrements the TimingDelay variable. + * @param None + * @retval None + */ +void TimingDelay_Decrement(void) +{ + if (TimingDelay != 0x00) + { + TimingDelay--; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/main.h new file mode 100644 index 000000000..00a4e316b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/main.h @@ -0,0 +1,54 @@ +/** + ****************************************************************************** + * @file I2S/Audio/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_lcd.h" +#include + +#include "stm322xg_eval_audio_codec.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* This is an audio file stored in the Flash memory as a constant table of 16-bit data. + The audio format should be WAV (raw / PCM) 16-bits, Stereo (sampling rate may be modified) */ +extern uint16_t AUDIO_SAMPLE[]; + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void TimingDelay_Decrement(void); +void Delay(__IO uint32_t nTime); + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/readme.txt new file mode 100644 index 000000000..ed0dacd9d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/readme.txt @@ -0,0 +1,118 @@ +/** + @page I2S_AUDIO How to use the Audio features with I2S peripheral + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file I2S/Audio/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the I2S Audio Example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides basic implementation of audio features. +It allows to play an audio file through the I2S peripheral and using the external +codec implemented on the STM322xG-EVAL board. + +In this example the I2S input clock, provided by a dedicated PLL (PLLI2S), is +configured to have an audio sampling frequency at 48 KHz with Master clock enabled. + +This example uses an audio codec driver which consists of three independent layers: + - Codec Hardware layer: which controls and communicates with the audio codec + (CS43L22) implemented on the evaluation board. + - MAL (Media Access Layer): which controls and interfaces with storage media + storing or providing the audio file/stream. + - The high layer: which implements overall control and interfacing API allowing + to perform basic audio operations (Init, Play, Pause, Resume, Stop, Volume + control and audio file pointer management) + +In this example the audio file is stored in the internal flash memory (Stereo, +16-bit, 48 KHz). The analog output device is automatically detected (Speaker or +Headphone) when the Headphone is plugged/unplugged in/from the audio jack of the +evaluation board. The example also manages information display and control interface +through push buttons: + - When the application is Playing audio file: + + Key : Pause + + Tamper: Volume UP + + Wakeup: Volume DOWN + - When the application is Paused: + + Key : Play + + Tamper: Switch output target to Headphone + + Wakeup: Switch output target to Speaker + +This example plays the audio file stored in internal flash memory and replay it +when it reach end of file. But it can be tailored to used different media storage +devices; SDCard (through SDIO), external Memory (through FSMC) ...) or to play +in streaming mode (ie. from USB port in device or host mode). In this case, Circular +DMA mode should be preferred (by enabling the define AUDIO_MAL_MODE_CIRCULAR in +stm322xg_eval_audio_codec.h file). + +List of Known Limitations and more detailed user notes are provided in file +stm322xg_eval_audio_codec.c (under Utilities\STM32_EVAL\STM322xG_EVAL) + +The provided sample audio file (stored in internal flash memory) is extracted from: + - Title: artofgardens-instr + - Artist/Composer: Dan O'Connor + - Creative Commons license: Attribution 3.0 United States + Please read the license following this link: + http://creativecommons.org/licenses/by/3.0/us/ + + +@par Directory contents + + - I2S/Audio/system_stm32f2xx.c STM32F2xx system clock configuration file + - I2S/Audio/stm32f2xx_conf.h Library Configuration file + - I2S/Audio/stm32f2xx_it.c Interrupt handlers + - I2S/Audio/stm32f2xx_it.h Interrupt handlers header file + - I2S/Audio/main.c Main program + - I2S/Audio/audio_sample.c Audio Sample file (in tab format) + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs only on STM32F2xx Devices Revision B and Revision Y. + + - This example has been tested with STM322xG-EVAL RevB (with no additional + hardware), and can be easily tailored to any other development board. + + - STM322xG-EVAL Set-up + - Make sure the jumper JP16 is in position 2<->3 + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Add the files "audio_sample.c" and "stm322xg_eval_audio_codec.c" to the project source list + - "stm322xg_eval_audio_codec.c" file is located under Utilities\STM32_EVAL\STM322xG_EVAL + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/stm32f2xx_conf.h new file mode 100644 index 000000000..86744cda7 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file I2S/Audio/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/stm32f2xx_it.c new file mode 100644 index 000000000..894bbf38e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/stm32f2xx_it.c @@ -0,0 +1,176 @@ +/** + ****************************************************************************** + * @file I2S/Audio/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup I2S_Audio + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + TimingDelay_Decrement(); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/stm32f2xx_it.h new file mode 100644 index 000000000..736cce29c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file I2S/Audio/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/system_stm32f2xx.c new file mode 100644 index 000000000..d4f8f8f30 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/I2S/Audio/system_stm32f2xx.c @@ -0,0 +1,564 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * STM32f2xx_Clock_Configuration_V1.0.0.xls + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | 344 + *----------------------------------------------------------------------------- + * PLLI2S_R | 7 + *----------------------------------------------------------------------------- + * I2S input clock(Hz) | 49142857 + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVALboard as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/* PLLI2S_VCO = (HSE_VALUE Or HSI_VALUE / PLL_M) * PLLI2S_N + I2SCLK = PLLI2S_VCO / PLLI2S_R */ +#define PLLI2S_N 344 +#define PLLI2S_R 7 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN |FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + + +/******************************************************************************/ +/* I2S clock configuration (For devices Rev B and Y) */ +/******************************************************************************/ + /* PLLI2S clock used as I2S clock source */ + RCC->CFGR &= ~RCC_CFGR_I2SSRC; + + /* Configure PLLI2S */ + RCC->PLLI2SCFGR = (PLLI2S_N << 6) | (PLLI2S_R << 28); + + /* Enable PLLI2S */ + RCC->CR |= ((uint32_t)RCC_CR_PLLI2SON); + + /* Wait till PLLI2S is ready */ + while((RCC->CR & RCC_CR_PLLI2SRDY) == 0) + { + } +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/main.c new file mode 100644 index 000000000..7d8cf3931 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/main.c @@ -0,0 +1,259 @@ +/** + ****************************************************************************** + * @file IWDG/IWDG_Example/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup IWDG_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t TimingDelay = 0; +__IO uint32_t LsiFreq = 0; +__IO uint32_t CaptureNumber = 0, PeriodValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void Delay(__IO uint32_t nTime); +uint32_t GetLSIFrequency(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LED1, LED2 and Key Button mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + + /* Setup SysTick Timer for 1 msec interrupts */ + if (SysTick_Config(SystemCoreClock / 1000)) + { + /* Capture error */ + while (1); + } + + /* Check if the system has resumed from IWDG reset */ + if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) + { + /* IWDGRST flag set */ + /* Turn on LED1 */ + STM_EVAL_LEDOn(LED1); + + /* Clear reset flags */ + RCC_ClearFlag(); + } + else + { + /* IWDGRST flag is not set */ + /* Turn off LED1 */ + STM_EVAL_LEDOff(LED1); + } + + /* Get the LSI frequency: TIM5 is used to measure the LSI frequency */ + LsiFreq = GetLSIFrequency(); + + /* IWDG timeout equal to 250 ms (the timeout may varies due to LSI frequency + dispersion) */ + /* Enable write access to IWDG_PR and IWDG_RLR registers */ + IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); + + /* IWDG counter clock: LSI/32 */ + IWDG_SetPrescaler(IWDG_Prescaler_32); + + /* Set counter reload value to obtain 250ms IWDG TimeOut. + Counter Reload Value = 250ms/IWDG counter clock period + = 250ms / (LSI/32) + = 0.25s / (LsiFreq/32) + = LsiFreq/(32 * 4) + = LsiFreq/128 + */ + IWDG_SetReload(LsiFreq/128); + + /* Reload IWDG counter */ + IWDG_ReloadCounter(); + + /* Enable IWDG (the LSI oscillator will be enabled by hardware) */ + IWDG_Enable(); + + while (1) + { + /* Toggle LED2 */ + STM_EVAL_LEDToggle(LED2); + + /* Insert 240 ms delay */ + Delay(240); + + /* Reload IWDG counter */ + IWDG_ReloadCounter(); + } +} + +/** + * @brief Configures TIM5 to measure the LSI oscillator frequency. + * @param None + * @retval LSI Frequency + */ +uint32_t GetLSIFrequency(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + TIM_ICInitTypeDef TIM_ICInitStructure; + RCC_ClocksTypeDef RCC_ClockFreq; + + /* Enable the LSI oscillator ************************************************/ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + {} + + /* TIM5 configuration *******************************************************/ + /* Enable TIM5 clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); + + /* Connect internally the TIM5_CH4 Input Capture to the LSI clock output */ + TIM_RemapConfig(TIM5, TIM5_LSI); + + /* Configure TIM5 presclaer */ + TIM_PrescalerConfig(TIM5, 0, TIM_PSCReloadMode_Immediate); + + /* TIM5 configuration: Input Capture mode --------------------- + The LSI oscillator is connected to TIM5 CH4 + The Rising edge is used as active edge, + The TIM5 CCR4 is used to compute the frequency value + ------------------------------------------------------------ */ + TIM_ICInitStructure.TIM_Channel = TIM_Channel_4; + TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; + TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; + TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV8; + TIM_ICInitStructure.TIM_ICFilter = 0; + TIM_ICInit(TIM5, &TIM_ICInitStructure); + + /* Enable TIM5 Interrupt channel */ + NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable TIM5 counter */ + TIM_Cmd(TIM5, ENABLE); + + /* Reset the flags */ + TIM5->SR = 0; + + /* Enable the CC4 Interrupt Request */ + TIM_ITConfig(TIM5, TIM_IT_CC4, ENABLE); + + + /* Wait until the TIM5 get 2 LSI edges (refer to TIM5_IRQHandler() in + stm32f2xx_it.c file) ******************************************************/ + while(CaptureNumber != 2) + { + } + /* Deinitialize the TIM5 peripheral registers to their default reset values */ + TIM_DeInit(TIM5); + + + /* Compute the LSI frequency, depending on TIM5 input clock frequency (PCLK1)*/ + /* Get SYSCLK, HCLK and PCLKx frequency */ + RCC_GetClocksFreq(&RCC_ClockFreq); + + /* Get PCLK1 prescaler */ + if ((RCC->CFGR & RCC_CFGR_PPRE1) == 0) + { + /* PCLK1 prescaler equal to 1 => TIMCLK = PCLK1 */ + return ((RCC_ClockFreq.PCLK1_Frequency / PeriodValue) * 8); + } + else + { /* PCLK1 prescaler different from 1 => TIMCLK = 2 * PCLK1 */ + return (((2 * RCC_ClockFreq.PCLK1_Frequency) / PeriodValue) * 8) ; + } +} + +/** + * @brief Inserts a delay time. + * @param nTime: specifies the delay time length, in milliseconds. + * @retval None + */ +void Delay(__IO uint32_t nTime) +{ + TimingDelay = nTime; + + while(TimingDelay != 0); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/readme.txt new file mode 100644 index 000000000..8317afb6f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/readme.txt @@ -0,0 +1,108 @@ +/** + @page IWDG_Example IWDG_Example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file IWDG/IWDG_Example/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the IWDG Example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to update at regular period the IWDG reload counter and +how to simulate a software fault generating an MCU IWDG reset on expiry of a +programmed time period. + +The IWDG timeout is set to 250 ms (the timeout may varies due to LSI frequency +dispersion). + +First, the TIM5 timer is configured to measure the LSI frequency as the +LSI is internally connected to TIM5 CH4, in order to adjust the IWDG clock. + +The LSI measurement using the TIM5 is described below: + - Configure the TIM5 to remap internally the TIM5 CH4 Input Capture to the LSI + clock output. + - Enable the TIM5 Input Capture interrupt: after one cycle of LSI clock, the + period value is stored in a variable and compared to the HCLK clock to get + its real value. + +Then, the IWDG reload counter is configured to obtain 250 ms according to the +measured LSI frequency. + +The IWDG reload counter is refreshed each 240 ms in the main program infinite loop +to prevent a IWDG reset. +LED2 is also toggled each 240 ms indicating that the program is running. + +An EXTI Line is connected to a GPIO pin, and configured to generate an interrupt +on the rising edge of the signal. + +The EXTI Line is used to simulate a software failure: once the EXTI Line event +occurs, by pressing the Key push-button, the corresponding interrupt is served. +In the ISR, a write to invalid address generates a Hardfault exception containing +an infinite loop and preventing to return to main program (the IWDG reload counter +is not refreshed). +As a result, when the IWDG counter reaches 00h, the IWDG reset occurs. +If the IWDG reset is generated, after the system resumes from reset, LED1 turns on. + +If the EXTI Line event does not occur, the IWDG counter is indefinitely refreshed +in the main program infinite loop, and there is no IWDG reset. + + +@par Directory contents + + - IWDG_Example/system_stm32f2xx.c STM32F2xx system clock configuration file + - IWDG_Example/stm32f2xx_conf.h Library Configuration file + - IWDG_Example/stm32f2xx_it.c Interrupt handlers + - IWDG_Example/stm32f2xx_it.h Header for stm32f2xx_it.c + - IWDG_Example/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + + - STM322xG-EVAL Set-up + - Use LD1 and LD2 leds connected respectively to PG.06 and PG.08 pins + - Use the KEY push button connected to PG.15 pin (EXTI Line15). + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/stm32f2xx_conf.h new file mode 100644 index 000000000..1fbf4b908 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file IWDG/IWDG_Example/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/stm32f2xx_it.c new file mode 100644 index 000000000..d72eb4e45 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/stm32f2xx_it.c @@ -0,0 +1,222 @@ +/** + ****************************************************************************** + * @file IWDG/IWDG_Example/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup IWDG_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint32_t TimingDelay; +extern __IO uint32_t PeriodValue; +extern __IO uint32_t CaptureNumber; +uint16_t tmpCC4[2] = {0, 0}; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + TimingDelay--; +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles External line 15 to 10 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if (EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + /* Clear the Key Button EXTI Line Pending Bit */ + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + + /* As the following address is invalid (not mapped), a Hardfault exception + will be generated with an infinite loop and when the IWDG counter reaches 0 + the IWDG reset occurs */ + *(__IO uint32_t *) 0xA0001000 = 0xFF; + } +} + +/** + * @brief This function handles TIM5 global interrupt request. + * @param None + * @retval None + */ +void TIM5_IRQHandler(void) +{ + if (TIM_GetITStatus(TIM5, TIM_IT_CC4) != RESET) + { + /* Get the Input Capture value */ + tmpCC4[CaptureNumber++] = TIM_GetCapture4(TIM5); + + /* Clear CC4 Interrupt pending bit */ + TIM_ClearITPendingBit(TIM5, TIM_IT_CC4); + + if (CaptureNumber >= 2) + { + /* Compute the period length */ + PeriodValue = (uint16_t)(0xFFFF - tmpCC4[0] + tmpCC4[1] + 1); + } + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/stm32f2xx_it.h new file mode 100644 index 000000000..0fdd0d020 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file IWDG/IWDG_Example/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/IWDG/IWDG_Example/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/main.c new file mode 100644 index 000000000..26557d53f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/main.c @@ -0,0 +1,166 @@ +/** + ****************************************************************************** + * @file Lib_DEBUG/Lib_DEBUG_Example/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm32f2xx_ip_dbg.h" +#include "stm322xg_eval.h" +#include + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup Lib_DEBUG_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +USART_InitTypeDef USART_InitStructure; + +/* Private function prototypes -----------------------------------------------*/ +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + GPIO_InitTypeDef GPIOA_InitStructure; + + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); + + /* Initialize all peripherals pointers */ + IP_Debug(); + + printf("\r\n STM32F2xx Firmware Library compiled with FULL ASSERT function... \n\r"); + printf("...Run-time checking enabled \n\r"); + + /* Simulate wrong parameter passed to library function ---------------------*/ + /* To enable SPI1 clock, RCC_APB2PeriphClockCmd() function must be used and + not RCC_APB1PeriphClockCmd() */ + RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); + + /* Some member of GPIOA_InitStructure structure are not initialized */ + GPIOA_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIOA_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + /*GPIOA_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;*/ + GPIOA_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIOA_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIOA_InitStructure); + + while (1) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number */ + + printf("\n\r Wrong parameter value detected on\r\n"); + printf(" file %s\r\n", file); + printf(" line %d\r\n", line); + + /* Infinite loop */ + /* while (1) + { + } */ +} +#endif + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + { + } + + return ch; +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/readme.txt new file mode 100644 index 000000000..108a388d5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/readme.txt @@ -0,0 +1,105 @@ +/** + @page Lib_DEBUG_Example Lib DEBUG example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file Lib_DEBUG/Lib_DEBUG_Example/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the Lib DEBUG example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example demonstrates how to declare a dynamic peripherals pointers used for +Debug mode. + +To use Debug mode you have to add the stm32f2xx_ip_dbg.c file to your application. +This creates a pointer to the peripheral structure in SRAM. Debugging consequently +becomes easier and all register settings can be obtained by dumping a peripheral +variable. + +When the "USE_FULL_ASSERT" label is uncommented (in stm32f2xx_conf.h file), +the assert_param macro is expanded and run-time checking is enabled in the firmware +library code. The run-time checking allows checking that all the library functions +input value lies within the parameter allowed values. + +The associated program simulates wrong parameter passed to library function and the +source of the error is printed on Hyperterminal (through USART). + +@note +The Debug mode increases the code size and reduces the code performance. For this +reason, it is recommended to used it only when debugging the application and to +remove it from the final application code. + +@par Directory contents + + - Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_conf.h Library Configuration file + - Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.c Interrupt handlers + - Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.h Interrupt handlers header file + - Lib_DEBUG/Lib_DEBUG_Example/main.c Main program + - Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_ip_dbg.c Peripherals pointers initialization + - Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_ip_dbg.h Header for stm32f2xx_ip_dbg.c + - Lib_DEBUG/Lib_DEBUG_Example/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 and PC serial port. + - Make sure that JP22 is in position 1<->2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Add the required example files + - stm32f2xx_ip_dbg.c + - Rebuild all files and load your image into target memory + - Run the example + +@note + - The free Lite version of TrueSTUDIO do not support printf() redirection. + For more information, see "note.txt" under "STM32F2xx_StdPeriph_Template\TrueSTUDIO". + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_conf.h new file mode 100644 index 000000000..e7ab62abe --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +#define USE_FULL_ASSERT 1 + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_ip_dbg.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_ip_dbg.c new file mode 100644 index 000000000..3ab5a604d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_ip_dbg.c @@ -0,0 +1,277 @@ +/** + ****************************************************************************** + * @file Lib_DEBUG/Lib_DEBUG_Example/stm32f21xx_ip_dbg.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file provides all peripherals pointers initialization. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_ip_dbg.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup Lib_DEBUG_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +ADC_Common_TypeDef * ADC_DBG; +ADC_TypeDef * ADC1_DBG; +ADC_TypeDef * ADC2_DBG; +ADC_TypeDef * ADC3_DBG; +CAN_TypeDef * CAN1_DBG; +CAN_TypeDef * CAN2_DBG; +CRC_TypeDef * CRC_DBG; +CRYP_TypeDef * CRYP_DBG; +DAC_TypeDef * DAC_DBG; +DBGMCU_TypeDef * DBGMCU_DBG; +DCMI_TypeDef * DCMI_DBG; +DMA_TypeDef * DMA1_DBG; +DMA_Stream_TypeDef * DMA1_Stream0_DBG; +DMA_Stream_TypeDef * DMA1_Stream1_DBG; +DMA_Stream_TypeDef * DMA1_Stream2_DBG; +DMA_Stream_TypeDef * DMA1_Stream3_DBG; +DMA_Stream_TypeDef * DMA1_Stream4_DBG; +DMA_Stream_TypeDef * DMA1_Stream5_DBG; +DMA_Stream_TypeDef * DMA1_Stream6_DBG; +DMA_Stream_TypeDef * DMA1_Stream7_DBG; +DMA_TypeDef * DMA2_DBG; +DMA_Stream_TypeDef * DMA2_Stream0_DBG; +DMA_Stream_TypeDef * DMA2_Stream1_DBG; +DMA_Stream_TypeDef * DMA2_Stream2_DBG; +DMA_Stream_TypeDef * DMA2_Stream3_DBG; +DMA_Stream_TypeDef * DMA2_Stream4_DBG; +DMA_Stream_TypeDef * DMA2_Stream5_DBG; +DMA_Stream_TypeDef * DMA2_Stream6_DBG; +DMA_Stream_TypeDef * DMA2_Stream7_DBG; +EXTI_TypeDef * EXTI_DBG; +ETH_TypeDef * ETH_DBG; +FLASH_TypeDef * FLASH_DBG; +FSMC_Bank1_TypeDef * FSMC_Bank1_DBG; +FSMC_Bank1E_TypeDef * FSMC_Bank1E_DBG; +FSMC_Bank2_TypeDef * FSMC_Bank2_DBG; +FSMC_Bank3_TypeDef * FSMC_Bank3_DBG; +FSMC_Bank4_TypeDef * FSMC_Bank4_DBG; +GPIO_TypeDef * GPIOA_DBG; +GPIO_TypeDef * GPIOB_DBG; +GPIO_TypeDef * GPIOC_DBG; +GPIO_TypeDef * GPIOD_DBG; +GPIO_TypeDef * GPIOE_DBG; +GPIO_TypeDef * GPIOF_DBG; +GPIO_TypeDef * GPIOG_DBG; +GPIO_TypeDef * GPIOH_DBG; +GPIO_TypeDef * GPIOI_DBG; +HASH_TypeDef * HASH_DBG; +I2C_TypeDef * I2C1_DBG; +I2C_TypeDef * I2C2_DBG; +I2C_TypeDef * I2C3_DBG; +IWDG_TypeDef * IWDG_DBG; +PWR_TypeDef * PWR_DBG; +RCC_TypeDef * RCC_DBG; +RNG_TypeDef * RNG_DBG; +RTC_TypeDef * RTC_DBG; +SDIO_TypeDef * SDIO_DBG; +SPI_TypeDef * SPI1_DBG; +SPI_TypeDef * SPI2_DBG; +SPI_TypeDef * SPI3_DBG; +SYSCFG_TypeDef * SYSCFG_DBG; +TIM_TypeDef * TIM1_DBG; +TIM_TypeDef * TIM2_DBG; +TIM_TypeDef * TIM3_DBG; +TIM_TypeDef * TIM4_DBG; +TIM_TypeDef * TIM5_DBG; +TIM_TypeDef * TIM6_DBG; +TIM_TypeDef * TIM7_DBG; +TIM_TypeDef * TIM8_DBG; +TIM_TypeDef * TIM9_DBG; +TIM_TypeDef * TIM10_DBG; +TIM_TypeDef * TIM11_DBG; +TIM_TypeDef * TIM12_DBG; +TIM_TypeDef * TIM13_DBG; +TIM_TypeDef * TIM14_DBG; +USART_TypeDef * USART1_DBG; +USART_TypeDef * USART2_DBG; +USART_TypeDef * USART3_DBG; +USART_TypeDef * UART4_DBG; +USART_TypeDef * UART5_DBG; +USART_TypeDef * USART6_DBG; +WWDG_TypeDef * WWDG_DBG; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief This function initialize peripherals pointers.. + * @param None + * @retval None + */ +void IP_Debug(void) +{ +/************************************* ADC ************************************/ + ADC_DBG = (ADC_Common_TypeDef *) ADC_BASE; + ADC1_DBG = (ADC_TypeDef *) ADC1_BASE; + ADC2_DBG = (ADC_TypeDef *) ADC2_BASE; + ADC3_DBG = (ADC_TypeDef *) ADC3_BASE; + +/************************************* CAN ************************************/ + CAN1_DBG = (CAN_TypeDef *) CAN1_BASE; + CAN2_DBG = (CAN_TypeDef *) CAN2_BASE; + +/************************************* CRC ************************************/ + CRC_DBG = (CRC_TypeDef *) CRC_BASE; + +/************************************* CRYP ***********************************/ + CRYP_DBG = (CRYP_TypeDef *) CRYP_BASE; + +/************************************* DAC ************************************/ + DAC_DBG = (DAC_TypeDef *) DAC_BASE; + +/************************************* DBGMCU *********************************/ + DBGMCU_DBG = (DBGMCU_TypeDef *) DBGMCU_BASE; + +/************************************* DCMI ***********************************/ + DCMI_DBG = (DCMI_TypeDef *) DCMI_BASE; + +/************************************* DMA ************************************/ + DMA1_DBG = (DMA_TypeDef *) DMA1_BASE; + DMA1_Stream0_DBG = (DMA_Stream_TypeDef *) DMA1_Stream0_BASE; + DMA1_Stream1_DBG = (DMA_Stream_TypeDef *) DMA1_Stream1_BASE; + DMA1_Stream2_DBG = (DMA_Stream_TypeDef *) DMA1_Stream2_BASE; + DMA1_Stream3_DBG = (DMA_Stream_TypeDef *) DMA1_Stream3_BASE; + DMA1_Stream4_DBG = (DMA_Stream_TypeDef *) DMA1_Stream4_BASE; + DMA1_Stream5_DBG = (DMA_Stream_TypeDef *) DMA1_Stream5_BASE; + DMA1_Stream6_DBG = (DMA_Stream_TypeDef *) DMA1_Stream6_BASE; + DMA1_Stream7_DBG = (DMA_Stream_TypeDef *) DMA1_Stream7_BASE; + DMA2_DBG = (DMA_TypeDef *) DMA2_BASE; + DMA2_Stream0_DBG = (DMA_Stream_TypeDef *) DMA2_Stream0_BASE; + DMA2_Stream1_DBG = (DMA_Stream_TypeDef *) DMA2_Stream1_BASE; + DMA2_Stream2_DBG = (DMA_Stream_TypeDef *) DMA2_Stream2_BASE; + DMA2_Stream3_DBG = (DMA_Stream_TypeDef *) DMA2_Stream3_BASE; + DMA2_Stream4_DBG = (DMA_Stream_TypeDef *) DMA2_Stream4_BASE; + DMA2_Stream5_DBG = (DMA_Stream_TypeDef *) DMA2_Stream5_BASE; + DMA2_Stream6_DBG = (DMA_Stream_TypeDef *) DMA2_Stream6_BASE; + DMA2_Stream7_DBG = (DMA_Stream_TypeDef *) DMA2_Stream7_BASE; + +/************************************* EXTI ***********************************/ + EXTI_DBG = (EXTI_TypeDef *) EXTI_BASE; + +/************************************* ETH ************************************/ + ETH_DBG = (ETH_TypeDef *) ETH_BASE; + +/************************************* FLASH **********************************/ + FLASH_DBG = (FLASH_TypeDef *) FLASH_R_BASE; + +/************************************* FSMC ***********************************/ + FSMC_Bank1_DBG = (FSMC_Bank1_TypeDef *) FSMC_Bank1_R_BASE; + FSMC_Bank1E_DBG = (FSMC_Bank1E_TypeDef *) FSMC_Bank1E_R_BASE; + FSMC_Bank2_DBG = (FSMC_Bank2_TypeDef *) FSMC_Bank2_R_BASE; + FSMC_Bank3_DBG = (FSMC_Bank3_TypeDef *) FSMC_Bank3_R_BASE; + FSMC_Bank4_DBG = (FSMC_Bank4_TypeDef *) FSMC_Bank4_R_BASE; + +/************************************* GPIO ***********************************/ + GPIOA_DBG = (GPIO_TypeDef *) GPIOA_BASE; + GPIOB_DBG = (GPIO_TypeDef *) GPIOB_BASE; + GPIOC_DBG = (GPIO_TypeDef *) GPIOC_BASE; + GPIOD_DBG = (GPIO_TypeDef *) GPIOD_BASE; + GPIOE_DBG = (GPIO_TypeDef *) GPIOE_BASE; + GPIOF_DBG = (GPIO_TypeDef *) GPIOF_BASE; + GPIOG_DBG = (GPIO_TypeDef *) GPIOG_BASE; + GPIOH_DBG = (GPIO_TypeDef *) GPIOH_BASE; + GPIOI_DBG = (GPIO_TypeDef *) GPIOI_BASE; + +/************************************* HASH ***********************************/ + HASH_DBG = (HASH_TypeDef *) HASH_BASE; + +/************************************* I2C ************************************/ + I2C1_DBG = (I2C_TypeDef *) I2C1_BASE; + I2C2_DBG = (I2C_TypeDef *) I2C2_BASE; + I2C3_DBG = (I2C_TypeDef *) I2C3_BASE; + +/************************************* IWDG ***********************************/ + IWDG_DBG = (IWDG_TypeDef *) IWDG_BASE; + +/************************************* PWR ************************************/ + PWR_DBG = (PWR_TypeDef *) PWR_BASE; + +/************************************* RCC ************************************/ + RCC_DBG = (RCC_TypeDef *) RCC_BASE; + +/************************************* RNG ************************************/ + RNG_DBG = (RNG_TypeDef *) RNG_BASE; + +/************************************* RTC ************************************/ + RTC_DBG = (RTC_TypeDef *) RTC_BASE; + +/************************************* SDIO ***********************************/ + SDIO_DBG = (SDIO_TypeDef *) SDIO_BASE; + +/************************************* SPI ************************************/ + SPI1_DBG = (SPI_TypeDef *) SPI1_BASE; + SPI2_DBG = (SPI_TypeDef *) SPI2_BASE; + SPI3_DBG = (SPI_TypeDef *) SPI3_BASE; + +/************************************* SYSCFG *********************************/ + SYSCFG_DBG = (SYSCFG_TypeDef *) SYSCFG_BASE; + +/************************************* TIM ************************************/ + TIM1_DBG = (TIM_TypeDef *) TIM1_BASE; + TIM2_DBG = (TIM_TypeDef *) TIM2_BASE; + TIM3_DBG = (TIM_TypeDef *) TIM3_BASE; + TIM4_DBG = (TIM_TypeDef *) TIM4_BASE; + TIM5_DBG = (TIM_TypeDef *) TIM5_BASE; + TIM6_DBG = (TIM_TypeDef *) TIM6_BASE; + TIM7_DBG = (TIM_TypeDef *) TIM7_BASE; + TIM8_DBG = (TIM_TypeDef *) TIM8_BASE; + TIM9_DBG = (TIM_TypeDef *) TIM9_BASE; + TIM10_DBG = (TIM_TypeDef *) TIM10_BASE; + TIM11_DBG = (TIM_TypeDef *) TIM11_BASE; + TIM12_DBG = (TIM_TypeDef *) TIM12_BASE; + TIM13_DBG = (TIM_TypeDef *) TIM13_BASE; + TIM14_DBG = (TIM_TypeDef *) TIM14_BASE; + +/************************************* USART **********************************/ + USART1_DBG = (USART_TypeDef *) USART1_BASE; + USART2_DBG = (USART_TypeDef *) USART2_BASE; + USART3_DBG = (USART_TypeDef *) USART3_BASE; + UART4_DBG = (USART_TypeDef *) UART4_BASE; + UART5_DBG = (USART_TypeDef *) UART5_BASE; + USART6_DBG = (USART_TypeDef *) USART6_BASE; + +/************************************* WWDG************************************/ + WWDG_DBG = (WWDG_TypeDef *) WWDG_BASE; +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_ip_dbg.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_ip_dbg.h new file mode 100644 index 000000000..2084630d8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_ip_dbg.h @@ -0,0 +1,44 @@ +/** + ****************************************************************************** + * @file Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_ip_dbg.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for stm32f2xx_ip_dbg.c file + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2XX_IP_DBG_H +#define __STM32F2XX_IP_DBG_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void IP_Debug(void); + +#endif /* __STM32F2XX_IP_DBG_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.c new file mode 100644 index 000000000..5ddb064ee --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SysTick_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.h new file mode 100644 index 000000000..2168a19dc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file Lib_DEBUG/Lib_DEBUG_Example/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Lib_DEBUG/Lib_DEBUG_Example/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Library_Examples.html b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Library_Examples.html new file mode 100644 index 000000000..4ea62a6d2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Library_Examples.html @@ -0,0 +1,1567 @@ + + + + + + + + + + + +STM32F2xx Standard Peripherals Library: Peripheral’s examples + + + + + + + +
+ +

 

+ +
+ + + + + +
+ + + + +
+

STM32F2xx + Standard Peripherals Library: Peripheral’s examples

+

 

+

Copyright 2012 + STMicroelectronics

+

+
+

 

+ + + + +
+ + + + +
+ + + + +
+

The STM32F2xx + Standard Peripherals library provides a rich set of examples + covering the main features of each peripheral. All the examples are + independent from the software toolchain. These examples run on + STMicroelectronics STM322xG-EVAL evaluation board and can be easily + tailored to any other supported device and development board. Only + source files are provided for each example and user can tailor the + provided project template to run the selected example with his + preferred toolchain.

+

How to proceed?

+ +
    +
  • Copy the files main.c, main.h + (if exists), stm32f2xx_it.c, system_stm32f2xx.c, stm32f2xx_it.h, + stm32f2xx_conf.h and any other source files from the specified + example to your toolchain folder under Project\STM32F2xx_StdPeriph_Template. + This project folder contains already all toolchain files needed for + creating projects for STM32F2xx microcontrollers.
  • +
  • Open your preferred toolchain
  • +
  • If needed, add in the project list + the additional files required to run the example (refer to your example + readme file)
  • +
  • Rebuild all files and load your image + into target memory
  • +
  • Run the example
  • +
+ + + + + +

STM32F2xx +  StdPeriph_Lib + Examples

+

The package + contains the following examples:

+

ADC - CAN - CortexM3 - CRC - CRYP - DAC - DCMI - DMA - EXTI - FLASH - FSMC - GPIO - HASH - I2C - I2S - IWDG - Lib_DEBUG - NVIC - PWR - RCC - RNG - RTC - SDIO - SPI - SysTick - TIM - USART - WWDG -

+

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

IP/Module

+
+

Example

+
+

Name

+
+

 Brief description

+
+

 ADC

+
+

ADC3_DMA

+
+

This + example describes how to use the ADC3 and DMA to transfer + continuously converted data from ADC3 to memory. The ADC3 is + configured to convert continuously channel7.

+
+

DualADC_Interleaved_DMAmode3

+
+

This example provides a short + description of how to use the ADC peripheral to convert a regular + channel in Dual interleaved mode using DMA in mode 3 with 5Msps.

+
+

DualADC_RegulSimu_DMAmode1

+
+

This example provides a short + description of how to use the ADC peripheral to convert regular + channels simultaneously in dual mode using DMA in mode 1.

+
+

TripleADC_Interleaved_DMAmode2

+
+

This example provides a short + description of how to use the ADC peripheral to convert a regular + channel in Triple interleaved mode using DMA in mode 2 with 6Msps.

+
+

VBAT_Measurement

+
+

This example describes how to + measure VBAT voltage using ADC1 regular channel 18. In fact, the + measured value correspond to VBAT/2; as the VBAT voltage could be + higher than VDDA, to ensure the correct operation of the ADC, the + VBAT pin is internally connected to a bridge divider by 2.

+
+

CAN

+
+

LoopBack

+
+

This + example provides a description of how to set a communication with the + CAN in loopback mode.

+
+

Networking

+
+

This example shows how to configure + the CAN peripheral to send and receive CAN frames in normal mode. The + sent frames are used to control Leds by pressing key push button.

+
+

CortexM3

+
+

BitBand

+
+

This + example shows how to use CortexM3 Bit-Band access to perform atomic + read-modify-write and read operations on a variable in SRAM.

+
+

Mode_Privilege

+
+

This example shows how to modify + CortexM3 Thread mode privilege access and stack.
+ CortexM3 Thread mode is entered on Reset, and can be entered as a + result of an exception return.

+
+

MPU

+
+

This example presents the MPU + features on STM32F2xx devices and it can be easily ported to any + other STM32 device supporting MPU.

+
+

CRC

+
+

CRC_Example

+
+

This + example shows how to use CRC (cyclic redundancy check) calculation + unit to get a CRC code of a given buffer of data word (32-bit), based + on a fixed generator polynomial (0x4C11DB7).

+
+

CRYP

+
+

AES_ECBmode_DMA

+
+

This + example provides a short description of how to use the CRYPTO + peripheral to encrypt and decrypt data using AES-128 Algorithm.

+
+

AES_modes

+
+

This example provides a short + description of how to use the CRYPTO peripheral to encrypt and + decrypt data using AES in all modes (ECB, CBC, CTR) and all key sizes (128, 192, 256) Algorithm.

+
+

DES_TDES_modes

+
+

This example provides a short + description of how to use the CRYPTO peripheral to encrypt and decrypt + data using DES and TDES in all modes (ECB, CBC) Algorithm.

+
+

TDES_ECBmode_DMA

+
+

This example provides a short + description of how to use the CRYPTO peripheral to encrypt and + decrypt data using TDES Algorithm.

+
+

 DAC

+
+

DAC_SignalsGeneration

+
+

This + example provides a short description of how to use the DAC peripheral + to generate several signals using DMA controller.

+
+

DCMI

+
+

Camera

+
+

This example +shows how to use the DCMI to control the OV9655 or OV2640 Camera module mounted on  STM322xG-EVAL board RevB.

+
+

DMA

+
+

FLASH_RAM

+
+

This + example provides a description of how to use a DMA channel to + transfer a word data buffer from FLASH memory to embedded SRAM + memory.

+
+

EXTI

+
+

EXTI_Example

+
+

This + example shows how to configure external interrupt lines. In this + example, 2 EXTI lines (EXTI Line0 and Line15) are configured to + generate an interrupt on each rising and falling edge, + respectively.  In the interrupt routine a led connected to a + specific GPIO pin is toggled.

+
+

FLASH

+
+

Program

+
+

This + example provides a description of how to program the STM32F2xx FLASH.

+
+

Write_Protection

+
+

This example provides a description + of how to enable and disable the write protection for the STM32F2xx + FLASH.

+
+

FSMC

+
+

OneNAND

+
+

This + example shows how to configure the FSMC to drive the + KFG1216U2A/B-DIB6 OneNAND memory mounted on STM322xG-EVAL evaluation + board (MB786) RevA.

+
+

SRAM

+
+

This example shows how to configure + the FSMC to drive the CY7C1071DV33-12BAXI SRAM memory mounted on + STM322xG-EVAL evaluation board (MB786) RevB.

+
+

SRAM_DataMemory

+
+

This example shows how to use the + external SRAM mounted on STM322xG-EVAL RevB as program data memory + (including heap and stack).

+
+

GPIO

+
+

IOToggle

+
+

GPIO + ports are connected on AHB bus, using BSRRH and BSRRL registers one + cycle is required to set a pin and another cycle to reset it. So GPIO + pins can toggle at AHB clock divided by 2.

+
+

JTAG_Remap

+
+

This example provides a short + description of how to use the JTAG/SWD IOs as standard GPIOs and + gives a configuration sequence.

+
+

HASH

+
+

Context_Swap

+
+

This + example provides a short description of how to use the HASH + peripheral to save and restore hash context to serve a high priority + hash operation.

+
+

HASH_SHA1_MD5

+
+

This example provides a short + description of how to use the HASH peripheral to hash data using + SHA-1 and MD5 Algorithms.

+
+

HMAC_SHA1_MD5

+
+

This example provides a short + description of how to use the HASH peripheral to hash data using HMAC + SHA-1 and HMAC MD5 Algorithms.

+
+

SHA1_MD5_DMA

+
+

This example provides a short + description of how to use the HASH peripheral to hash data using + SHA-1 and MD5 Algorithms.

+
+

 I2C

+
+

EEPROM

+
+

This + firmware provides a basic example of how to use the I2C firmware + library and an associate I2C EEPROM driver to communicate with an I2C + EEPROM device (here the example is interfacing with M24C64 EEPROM)

+
+

IOE

+
+

This firmware provides an example + of configuring and using the IO Expander STMPE811 in order to control + input Joystick IOs, output IOs and the Touch Screen feature.

+
+

DataExchangeDMA

+
+

This is a typical example of how to + use the I2C firmware library to ensure the steps of an I2C + communication between slave Receiver/Transmitter and master Transmitter/Receiver + using DMA.

+
+

DataExchangeInterrupt

+
+

This is a typical example of how to + use the I2C firmware library to ensure the steps of an I2C + communication between slave Receiver/Transmitter and master + Transmitter/Receiver using interrupts.

+
+

MasterReceiverInterrupt

+
+

This is a typical example of how to + use the I2C firmware library to ensure the steps of an I2C + communication between slave transmitter and master receiver using + interrupt.

+
+

MasterTransmitterInterrupt

+
+

This example provides a small + application in which joystick buttons are used to trigger I2C + communication using interrupt and though using I2C firmware library.

+
+

 I2S

+
+

I2S_Audio

+
+

This + example provides basic implementation of audio features. It allows + playing an audio file through the I2S peripheral and using the + external codec implemented on the STM322xG-EVAL board.

+
+

 IWDG

+
+

IWDG_Example

+
+

This + example shows how to update at regular period the IWDG reload counter + and how to simulate a software fault generating an MCU IWDG reset on + expiry of a programmed time period.

+
+

Lib_DEBUG

+
+

Lib_DEBUG_Example

+
+

This + example demonstrates how to declare dynamic peripherals pointers used + for Debug mode.

+
+

NVIC

+
+

DMA_WFIMode

+
+

This + example shows how to enter the system to WFI mode with DMA transfer + enabled and wake-up from this mode by the DMA End of Transfer + interrupt.

+
+

IRQ_Mask

+
+

This example demonstrates the use + of the Nested Vectored Interrupt Controller (NVIC) IRQ Channels + configuration and how to mask/activate different IRQs.

+
+

IRQ_Priority

+
+

This example demonstrates the use + of the Nested Vectored Interrupt Controller (NVIC) and how to + configure their priorities.

+
+

VectorTable_Relocation

+
+

This example describes how to + relocate the CortexM3 vector table in a specific address other than + the default Flash memory base address.

+
+

 PWR

+
+

BOR

+
+

This + example shows how to configure the programmable BOR thresholds using + the FLASH option bytes.

+
+

CurrentConsumption

+
+

This example shows how to configure + the STM32F2xx system to measure different Low Power modes current + consumption.

+
+

PVD

+
+

This example shows how to configure + the programmable voltage detector using an external interrupt line. + In this example, EXTI line 16 is configured to generate an interrupt + on each rising or falling edge of the PVD output signal (which + indicates that the Vdd voltage is below the PVD threshold).

+
+

STANDBY

+
+

This example shows how to enter the + system to STANDBY mode and wake-up from this mode using: external + RESET, RTC Alarm A or WKUP pin.

+
+

STOP

+
+

This example shows how to enter the + system to STOP mode and wake-up from this mode using RTC Wakeup Timer + Event connected to EXTI Line 22.

+
+

RCC

+
+

RCC_Example

+
+

This + example shows how to use, for debug purpose, the RCC_GetClocksFreq + function to retrieve the current status and frequencies of different + on chip clocks. You can see the RCC_ClockFreq structure content, + which hold the frequencies of different on chip clocks, using your + toolchain debugger.

+
+

RNG

+
+

RNG_MultiRNG

+
+

This + example provides a short description of how to use the RNG peripheral + to generate Random 32bit numbers.

+
+

RTC

+
+

BKP_Domain

+
+

This + example demonstrates and explains how to use the peripherals available + on Backup Domain. These peripherals are: the RCC BDCR register + containing the LSE Osc configuration and the RTC Clock enable/disable + bits. It embeds also the RTC peripheral with its associated Backup + Data registers. And finally the Backup SRAM (4KB) with its low power + regulator allowing preserving its contents when the product is + powered by VBAT pin.

+
+

HW_Calendar

+
+

This example demonstrates and + explains how to use the RTC peripheral. As an application example, it + demonstrates how to setup the RTC peripheral, in terms of prescaler + and interrupts, to be used to keep time and to generate alarm + interrupt.

+
+

RTC_LSI

+
+

This example demonstrates and + explains how to use the LSI clock source auto calibration to get a + precise RTC clock.  As an application example, it demonstrates + how to configure the TIM5 timer internally connected to LSI clock + output, in order to adjust the RTC prescaler.

+
+

Tamper

+
+

This example shows how to + write/read data to/from RTC Backup data registers and demonstrates + the Tamper detection feature.

+
+

TimeStamp

+
+

This example provides a short + description of how to use the RTC peripheral and the Time Stamp + feature.

+
+

SDIO

+
+

uSDCard

+
+

This + example provides a basic example of how to use the SDIO firmware + library and an associate driver to perform read/write operations on + the SD Card memory (SD Card V1.0, V1.1, V2.0 and SDHC (High Capacity) + protocol) that could be mounted on the STM322xG_EVAL board.

+
+

SPI

+
+

SPI_FLASH

+
This +example provides a basic example of how to use the SPI firmware library +and an associated driver "spi_flash.c" to communicate with an M25P64 +SPI FLASH.
+

SPI_DataExchangeInterrupt

+
+
This +example provides a small application in which joystick buttons are used +to trigger SPI communication using interrupts and though using SPI +firmware library.
+ +
+

SysTick

+
+

SysTick_Example

+
+

This + example shows how to configure the SysTick to generate a time base + equal to 1 ms. The system clock is set to 120 MHz, the SysTick is + clocked by the AHB clock (HCLK).

+
+

TIM

+
+

6Steps

+
This +example shows how to configure the TIM1 peripheral to generate 6 Steps. +The STM32F2xx TIM1 peripheral offers the possibility to program in +advance the configuration for the next TIM1 outputs behaviour (step) +and change the configuration of all the channels at the same time. This +operation is possible when the COM (commutation) event is used.
+
+

7PWM_Output

+
+

This example shows how to configure + the TIM1 peripheral to generate 7 PWM signals with 4 different duty + cycles (50%, 37.5%, 25% and 12.5%).

+
+

Cascade_Synchro

+
+
This example shows how to synchronize TIM peripherals in cascade mode.
+ +
+

ComplementarySignals

+
+
This +example shows how to configure the TIM1 peripheral to generate three +complementary TIM1 signals, to insert a defined dead time value, to use +the break feature and to lock the desired parameters.
+ +
+

DMA

+
+

This example provides a description + of how to use DMA with TIM1 Update request to transfer Data from + memory to TIM1 Capture Compare Register3.

+
+

DMABurst

+
+
This example shows how to update the TIM1 channel1 period and the duty cycle using the TIM1 DMA burst feature.
+ +
+

ExtTrigger_Synchro

+
+
This example shows how to synchronize TIM peripherals in cascade mode with an external trigger.
+ +
+

InputCapture

+
+
This example shows how to use the TIM peripheral to measure the frequency of an external signal.
+ +
+

OCActive

+
+

This example shows how to configure + the TIM peripheral to generate four different signals with four + different delays.

+
+

OCInactive

+
+

This example shows how to configure + the TIM peripheral in Output Compare Inactive mode with the + corresponding Interrupt requests for each channel.

+
+

OCToggle

+
+

This example shows how to configure + the TIM3 peripheral to generate four different signals with four + different frequencies.

+
+

OnePulse

+
+
This +example shows how to use the TIM peripheral to generate a One pulse +Mode after a Rising edge of an external signal is received in Timer +Input pin.
+ +
+

Parallel_Synchro

+
+
This example shows how to synchronize TIM peripherals in parallel mode.
+ +
+

PWM_Input

+
+

This example shows how to use the + TIM peripheral to measure the frequency and duty cycle of an external + signal.

+
+

PWM_Output

+
+

This example shows how to configure + the TIM peripheral in PWM (Pulse Width Modulation) mode.

+
+

TIM10_PWMOutput

+
+

This example shows how to configure + the TIM peripheral in PWM (Pulse Width Modulation)
+ mode.

+
+

TIM1_Synchro

+
+
This example shows how to synchronize TIM1 and Timers (TIM3 and TIM4) in parallel mode.
+ +
+

TIM9_OCToggle

+
+

This example shows how to configure + the TIM9 peripheral to generate four different signals with four + different frequencies.

+
+

TimeBase

+
+

This example shows how to configure + the TIM peripheral in Output Compare Timing mode with the + corresponding Interrupt requests for each channel in order to generate + 4 different time bases.

+
+

USART

+
+

HyperTerminal_Interrupt

+
+

This + example provides a description of how to use the EVAL_COM1 Transmit + and Receive interrupts to communicate with the hyperterminal.

+
+

Printf

+
+

This example shows how to retarget + the C library printf function to the USART.  This implementation + output the printf message on the Hyperterminal using USART3.

+
+

Smartcard

+
+

This example describes a firmware + Smartcard Interface based on the STM32F2xx USART peripheral. The main + purpose of this firmware example is to provide resources facilitating + the development of an application using the USART peripheral in + smartcard mode.

+
+

DataExchangeDMA

+
+

This example provides a small + application in which joystick buttons are used to trigger USART + communications using DMA and though using USART firmware library.

+
+

DataExchangeInterrupt

+
+

This example provides a small + application in which joystick buttons are used to trigger USART + communication using interrupts and though using USART firmware + library.

+
+

 WWDG

+
+

WWDG_Example

+
+

This + example shows how to update at regular period the WWDG counter and + how to simulate a software fault generating an MCU WWDG reset on + expiry of a programmed time period.

+
+
+

Back to Top

+
+

 

+ + + + +
+

 

+

For complete + documentation on STM32 Microcontrollers visit www.st.com/STM32

+
+

+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/main.c new file mode 100644 index 000000000..79433cfbc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/main.c @@ -0,0 +1,238 @@ +/** + ****************************************************************************** + * @file NVIC/DMA_WFIMode/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DMA_WFIMode + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define USART3_DR_ADDRESS ((uint32_t)0x40004804) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t LowPowerMode = 0; +uint16_t DstBuffer[10]= {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +/* Private function prototypes -----------------------------------------------*/ +void DMA_Config(void); +void USART_Config(void); +uint8_t Buffercmp16(uint16_t* pBuffer1, uint16_t* pBuffer2, uint16_t BufferLength); +void Delay(__IO uint32_t nCount); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize Leds and Key Button mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + + /* DMA1 Stream1 channel4 (connected to USART3_RX) configuration ------------*/ + DMA_Config(); + + /* EVAL_COM1 (USART3) configuration ----------------------------------------*/ + USART_Config(); + + while (1) + { + if(LowPowerMode == 1) + { + /* Turn Off LED2 and LED3 */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + + /* Request to enter WFI mode */ + __WFI(); + LowPowerMode = 0; + } + + Delay(0xFFFFF); + STM_EVAL_LEDToggle(LED1); + } +} + +/** + * @brief Configures the EVAL_COM1 (USART3). + * @param None + * @retval None + */ +void USART_Config(void) +{ + /* EVAL_COM1 configuration ---------------------------------------------------*/ + /* EVAL_COM1 configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitTypeDef USART_InitStructure; + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); + + /* Enable DMA Rx request */ + USART_DMACmd(EVAL_COM1, USART_DMAReq_Rx, ENABLE); +} + +/** + * @brief Configures DMA1 Stream1 channel4 to handle USART3_RX DMA request. + * @param None + * @retval None + */ +void DMA_Config(void) +{ + DMA_InitTypeDef DMA_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* Enable DMA1 clock ********************************************************/ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); + + /* DMA1 Stream1 channel4 configuration **************************************/ + DMA_InitStructure.DMA_Channel = DMA_Channel_4; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)USART3_DR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DstBuffer; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = 10; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA1_Stream1, &DMA_InitStructure); + DMA_Cmd(DMA1_Stream1, ENABLE); + + /* Enable DMA1_Stream1 Transfer complete interrupt */ + DMA_ITConfig(DMA1_Stream1, DMA_IT_TC, ENABLE); + + /* Enable DMA1_Stream1 */ + DMA_Cmd(DMA1_Stream1, ENABLE); + + /* Enable DMA1_Stream1 IRQn Interrupt ***************************************/ + NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream1_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval 0: pBuffer1 identical to pBuffer2 + * 1: pBuffer1 differs from pBuffer2 + */ +uint8_t Buffercmp16(uint16_t* pBuffer1, uint16_t* pBuffer2, uint16_t BufferLength) +{ + while(BufferLength--) + { + if(*pBuffer1 != *pBuffer2) + { + return 1; + } + + pBuffer1++; + pBuffer2++; + } + return 0; +} + +/** + * @brief Inserts a delay time. + * @param nCount: specifies the delay time length. + * @retval None + */ +void Delay(__IO uint32_t nCount) +{ + for(; nCount != 0; nCount--); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/readme.txt new file mode 100644 index 000000000..ea3e58504 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/readme.txt @@ -0,0 +1,99 @@ +/** + @page NVIC_DMA_WFIMode NVIC DMA in WFI mode example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file NVIC/NVIC_DMA_WFIMode/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the NVIC DMA in WFI mode example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to enter the system to WFI mode with DMA transfer enabled +and wake-up from this mode by the DMA End of Transfer interrupt. + +In the associated software, the system clock is set to 120 MHz, the DMA1 Stream1 +channel4 is configured to transfer 10 data from the EVAL_COM1 (USART3) data register +to a predefined buffer, DST_Buffer, and to generate an interrupt at the end of +the transfer. The EVAL_COM1 (USART3) receives data from Hyperterminal. +LED1 is toggled with a frequency depending on the system clock, this is used +to indicate whether the MCU is in WFI or RUN mode. + +Pressing key push button (generates rising edge on EXTI Line15) will put the core +in the WFI mode, causing the LED1 to stop toggling. +To wake-up from WFI mode you have to send the sequence (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) +from the Hyperterminal to the EVAL_COM1 (USART3). These bytes will be transferred +by the DMA from the EVAL_COM1 (USART3) receive data register to the predefined buffer, +then generates an interrupt which exits the system from WFI mode. +The LED1 restarts toggling and a LED2 will toggle if the buffer is correctly +received else a LED3 is toggled. + + +@par Directory contents + + - NVIC/DMA_WFIMode/stm32f2xx_conf.h Library Configuration file + - NVIC/DMA_WFIMode/stm32f2xx_it.c Interrupt handlers + - NVIC/DMA_WFIMode/stm32f2xx_it.h Interrupt handlers header file + - NVIC/DMA_WFIMode/main.c Main program + - NVIC/DMA_WFIMode/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily + tailored to any other development board. + + - STM322xG-EVAL Set-up + - Use the Key push-button connected to pin PG15 (EXTI Line15) + - Use LED1, LED2 and LED3 connected respectively to PG.06, PG.08 and PC.07 pins + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port if you want to display data on the HyperTerminal. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/stm32f2xx_conf.h new file mode 100644 index 000000000..ed06dbe8b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file NVIC/DMA_WFIMode/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/stm32f2xx_it.c new file mode 100644 index 000000000..0aabdc4f5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/stm32f2xx_it.c @@ -0,0 +1,220 @@ +/** + ****************************************************************************** + * @file NVIC/DMA_WFIMode/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DMA_WFIMode + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint8_t TestStatus = 0; +uint16_t SrcBuffer[10] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39}; +extern uint16_t DstBuffer[10]; +extern __IO uint32_t LowPowerMode; +extern uint8_t Buffercmp16(uint16_t*, uint16_t*, uint16_t); + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles DMA1 Stream1 interrupt request. + * @param None + * @retval None + */ +void DMA1_Stream1_IRQHandler(void) +{ + if(DMA_GetITStatus(DMA1_Stream1, DMA_IT_TCIF1)) + { + DMA_ClearITPendingBit(DMA1_Stream1, DMA_IT_TCIF1); + + /* Check the received buffer */ + TestStatus = Buffercmp16(SrcBuffer, DstBuffer, 10); + + if(TestStatus == 0) + { + STM_EVAL_LEDToggle(LED2); + } + else + { + STM_EVAL_LEDToggle(LED3); + } + } +} + +/** + * @brief This function handles External lines 15 to 10 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + + LowPowerMode = 1; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/stm32f2xx_it.h new file mode 100644 index 000000000..29c660aaf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/stm32f2xx_it.h @@ -0,0 +1,62 @@ +/** + ****************************************************************************** + * @file NVIC/DMA_WFIMode/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void DMA1_Stream1_IRQHandler(void); +void EXTI15_10_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/DMA_WFIMode/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/main.c new file mode 100644 index 000000000..318e78baf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/main.c @@ -0,0 +1,223 @@ +/** + ****************************************************************************** + * @file NVIC/IRQ_Mask/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup IRQ_Mask + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize Leds mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Initialize the KEY and SEL buttons mounted on STM322xG-EVAL board */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); + STM_EVAL_PBInit(BUTTON_TAMPER, BUTTON_MODE_EXTI); + + /* TIM configuration -------------------------------------------------------*/ + TIM_Config(); + + while (1) + { + /* Wait until KEY button is pressed. */ + while(STM_EVAL_PBGetState(BUTTON_KEY) == RESET) + { + } + while(STM_EVAL_PBGetState(BUTTON_KEY) != RESET) + { + } + + /* This instruction raises the execution priority to 0. This prevents all + exceptions with configurable priority from activating, other than through + the HardFault fault escalation mechanism. */ + __disable_irq(); + + /* Turn LED4 ON */ + STM_EVAL_LEDOn(LED4); + + /* Wait until KEY button is pressed. */ + while(STM_EVAL_PBGetState(BUTTON_KEY) == RESET) + { + } + while(STM_EVAL_PBGetState(BUTTON_KEY) != RESET) + { + } + + /* This instruction will allow all exceptions with configurable priority to + be activated. */ + __enable_irq(); + + /* Turn LED4 OFF */ + STM_EVAL_LEDOff(LED4); + } +} + +/** + * @brief Configures the used Timers. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + TIM_OCInitTypeDef TIM_OCInitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* Enable TIM2, TIM3 and TIM4 clocks */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | + RCC_APB1Periph_TIM4, ENABLE); + + /* TIM2 configuration */ + TIM_TimeBaseStructure.TIM_Period = 0x4AF; + TIM_TimeBaseStructure.TIM_Prescaler = ((SystemCoreClock/1200) - 1); + TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); + TIM_OCStructInit(&TIM_OCInitStructure); + + /* Output Compare Timing Mode configuration: Channel1 */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; + TIM_OCInitStructure.TIM_Pulse = 0x0; + TIM_OC1Init(TIM2, &TIM_OCInitStructure); + + /* TIM3 configuration */ + TIM_TimeBaseStructure.TIM_Period = 0x95F; + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + /* Output Compare Timing Mode configuration: Channel1 */ + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + /* TIM4 configuration */ + TIM_TimeBaseStructure.TIM_Period = 0xE0F; + TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); + + /* Output Compare Timing Mode configuration: Channel1 */ + TIM_OC1Init(TIM4, &TIM_OCInitStructure); + + /* Immediate load of TIM2,TIM3 and TIM4 Precaler values */ + TIM_PrescalerConfig(TIM2, ((SystemCoreClock/1200) - 1), TIM_PSCReloadMode_Immediate); + TIM_PrescalerConfig(TIM3, ((SystemCoreClock/1200) - 1), TIM_PSCReloadMode_Immediate); + TIM_PrescalerConfig(TIM4, ((SystemCoreClock/1200) - 1), TIM_PSCReloadMode_Immediate); + + /* Clear TIM2, TIM3 and TIM4 update pending flags */ + TIM_ClearFlag(TIM2, TIM_FLAG_Update); + TIM_ClearFlag(TIM3, TIM_FLAG_Update); + TIM_ClearFlag(TIM4, TIM_FLAG_Update); + + /* Configure two bits for preemption priority */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); + + /* Enable the TIM2 Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable the TIM3 Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_Init(&NVIC_InitStructure); + + /* Enable the TIM4 Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; + NVIC_Init(&NVIC_InitStructure); + + /* Enable TIM2, TIM3 and TIM4 Update interrupts */ + TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); + TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); + TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); + + /* TIM2, TIM3 and TIM4 enable counters */ + TIM_Cmd(TIM2, ENABLE); + TIM_Cmd(TIM3, ENABLE); + TIM_Cmd(TIM4, ENABLE); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/readme.txt new file mode 100644 index 000000000..5e34e5a1b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/readme.txt @@ -0,0 +1,125 @@ +/** + @page NVIC_IRQ_Mask NVIC IRQ Channels Mask example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file NVIC/IRQ_Mask/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the NVIC IRQ Channels Mask example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example demontrates the use of the Nested Vectored Interrupt Controller (NVIC) +IRQ Channels configuration and how to mask/activate different IRQs: + +- Configuration of 3 TIM (TIM2..TIM4) timers to generate an interrupt on each + counter update event. + +- The three timers are linked to their correspondant Update IRQ channel. + +- Assignment of a ascendant IRQ priority for each IRQ channel : + - TIM2 has a preemption priority of 0 + - TIM3 has a preemption priority of 1 + - TIM4 has a preemption priority of 2 +- In each interrupt routine: + - TIM2 toggles a LED1 each 1s + - TIM3 toggles a LED2 each 2s + - TIM4 toggles a LED3 each 3s + +- The KEY and SEL buttons are used to boost the execution priority as follows: + + - The KEY button is used in GPIO mode and at each KEY button press, the execution + priority is raised to 0 and turn LED4 ON. This prevents all exceptions with + configurable priority from activating, other than through the HardFault fault + escalation mechanism. As consequence, all LEDs stop toggling as TIM2, TIM3 + and TIM4 IRQs are prevented from activation. + + Pressing again the KEY button will release the priority boosting, turn LED4 + OFF and will allow all exceptions with configurable priority to be activated + and TIM2, TIM3 and TIM4 can be generated again and the LEDs restart toggling. + + This execution priority is made using the CMSIS functions "__disable_irq()" + and "__enable_irq()". + These two functions are managing the Cortex-M3 PRIMASK special register. + + - The TAMPER button is used in EXTI mode and at each TAMPER button press, the + execution priority is masked to 0x40 using the BASEPRI register. + A non-zero value will act as a priority mask, affecting the execution priority + when the priority defined by BASEPRI is the same or higher than the current + executing priority. + As consequence, LED2 and LED3 stop toggling as TIM3 and TIM4 IRQs are + prevented from activation. + Pressing again the TAMPER button will configure the BASEPRI register to 0, + thus it has no effect on the current priority and TIM3 and TIM4 can be + generated again and LED2 and LED3 restart toggling. + + This execution priority is made using the CMSIS functions "__set_BASEPRI()". + This function is managing the Cortex-M3 BASEPRI special register. + Setting the BASEPRI register has no effect when the execution priority is + raised to 0 using the "__disable_irq()" function. + +@note These mechanisms only affect the group priority. They have no effect on + the sub-priority. The sub-priority is only used to sort pending exception + priorities, and does not affect active exceptions. + + +@par Directory contents + + - NVIC/IRQ_Mask/stm32f2xx_conf.h Library Configuration file + - NVIC/IRQ_Mask/stm32f2xx_it.c Interrupt handlers + - NVIC/IRQ_Mask/stm32f2xx_it.h Interrupt handlers header file + - NVIC/IRQ_Mask/main.c Main program + - NVIC/IRQ_Mask/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily + tailored to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + - Use the KEY push-button connected to pin PG15 (EXTI Line15) + - Use the TAMPER push-button connected to pin PC13 (EXTI Line13) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/stm32f2xx_conf.h new file mode 100644 index 000000000..733de915a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file NVIC/IRQ_Mask/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/stm32f2xx_it.c new file mode 100644 index 000000000..ddf0d905c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/stm32f2xx_it.c @@ -0,0 +1,250 @@ +/** + ****************************************************************************** + * @file NVIC/IRQ_Mask/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup IRQ_Mask + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t index = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles EXTI Lines 15 to 10 interrupts requests. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if(EXTI_GetITStatus(TAMPER_BUTTON_EXTI_LINE) != RESET) + { + if(index == 0) + { + /* Configure the BASEPRI register to 0x40 (Preemption priority = 1). + Only IRQ with higher preemption priority than 1 are permitted. + This will mask TIM3 and TIM4 IRQ from generation. */ + __set_BASEPRI(0x40); + index++; + } + else + { + /* Configure the BASEPRI register to 0x00 (Preemption priority = 0). + When this BASEPRI register is set to 0, it has no effect on the current + priority. + TIM2, TIM3 and TIM4 generation is controlled by NVIC priority registers. */ + __set_BASEPRI(0x00); + index = 0; + } + + /* Clears the TAMPER Button EXTI line pending bit */ + EXTI_ClearITPendingBit(TAMPER_BUTTON_EXTI_LINE); + } +} + +/** + * @brief This function handles TIM2 global interrupt request. + * @param None + * @retval None + */ +void TIM2_IRQHandler(void) +{ + /* Clear TIM2 update interrupt */ + TIM_ClearITPendingBit(TIM2, TIM_IT_Update); + + /* Toggle LED1 */ + STM_EVAL_LEDToggle(LED1); +} + +/** + * @brief This function handles TIM3 global interrupt request. + * @param None + * @retval None + */ +void TIM3_IRQHandler(void) +{ + /* Clear TIM3 update interrupt */ + TIM_ClearITPendingBit(TIM3, TIM_IT_Update); + + /* Toggle LED2 */ + STM_EVAL_LEDToggle(LED2); +} + +/** + * @brief This function handles TIM4 global interrupt request. + * @param None + * @retval None + */ +void TIM4_IRQHandler(void) +{ + /* Clear TIM4 update interrupt */ + TIM_ClearITPendingBit(TIM4, TIM_IT_Update); + + /* Toggle LED3 */ + STM_EVAL_LEDToggle(LED3); +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/stm32f2xx_it.h new file mode 100644 index 000000000..7a7415ed9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/stm32f2xx_it.h @@ -0,0 +1,64 @@ +/** + ****************************************************************************** + * @file NVIC/IRQ_Mask/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void TIM4_IRQHandler(void); +void TIM3_IRQHandler(void); +void TIM2_IRQHandler(void); +void EXTI15_10_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Mask/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/main.c new file mode 100644 index 000000000..b19aac7ab --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/main.c @@ -0,0 +1,176 @@ +/** + ****************************************************************************** + * @file NVIC/IRQ_Priority/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup IRQ_Priority + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint8_t PreemptionOccured = 0; +__IO uint8_t PreemptionPriorityValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void NVIC_Config(void); +void Delay(__IO uint32_t nCount); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* NVIC configuration ------------------------------------------------------*/ + NVIC_Config(); + + /* Initialize LEDs and push-button mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + STM_EVAL_PBInit(BUTTON_WAKEUP, BUTTON_MODE_EXTI); + + /* Configure the SysTick Handler Priority: Preemption priority and subpriority */ + NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), !PreemptionPriorityValue, 0)); + + while (1) + { + if(PreemptionOccured != 0) + { + /* Toggel The lED1 */ + STM_EVAL_LEDToggle(LED1); + + /* Insert delay Time */ + Delay(0x5FFFF); + + STM_EVAL_LEDToggle(LED2); + + Delay(0x5FFFF); + + STM_EVAL_LEDToggle(LED3); + + Delay(0x5FFFF); + + STM_EVAL_LEDToggle(LED4); + + Delay(0x5FFFF); + } + } +} + +/** + * @brief Configures the NVIC interrupts. + * @param None + * @retval None + */ +void NVIC_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + + /* Configure the preemption priority and subpriority: + - 1 bits for pre-emption priority: possible value are 0 or 1 + - 3 bits for subpriority: possible value are 0..7 + - Lower values gives higher priority + */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); + + /* Enable the WAKEUP_BUTTON_EXTI_IRQn Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = WAKEUP_BUTTON_EXTI_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriorityValue; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable the KEY_BUTTON_EXTI_IRQn Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = KEY_BUTTON_EXTI_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Inserts a delay time. + * @param nCount: specifies the delay time length. + * @retval None + */ +void Delay(__IO uint32_t nCount) +{ + for(; nCount != 0; nCount--); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/readme.txt new file mode 100644 index 000000000..4bd8b268b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/readme.txt @@ -0,0 +1,110 @@ +/** + @page NVIC_IRQ_Priority NVIC IRQ Priority example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file NVIC/IRQ_Priority/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the NVIC IRQ Priority example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example demonstrates the use of the Nested Vectored Interrupt Controller (NVIC): + +- Configuration of 2 EXTI Lines (WAKEUP button EXTI Line & KEY button EXTI Line) + to generate an interrupt on each falling edge and use the SysTick interrupt. +- These interrupts are configured with the following parameters: + - WAKEUP button EXTI Line: + - PreemptionPriority = PreemptionPriorityValue + - SubPriority = 0 + - KEY button EXTI Line: + - PreemptionPriority = 0 + - SubPriority = 1 + - SysTick Handler: + - PreemptionPriority = !PreemptionPriorityValue + - SubPriority = 0 +First, the PreemptionPriorityValue is equal to 0, the WAKEUP button EXTI Line +has higher preemption priority than the SysTick handler. + +In the KEY button EXTI Line interrupt routine the WAKEUP button EXTI Line and +SysTick preemption priorities are inverted. +In the WAKEUP button EXTI Line interrupt routine the pending bit of the SysTick +interrupt is set this will cause SysTick ISR to preempt the WAKEUP button EXTI +Line ISR only if it has higher preemption priority. + +The system behaves as following: + +1) The first time KEY button EXTI Line interrupt occurs the SysTick preemption +become higher than WAKEUP button EXTI Line one. So when the WAKEUP button EXTI +Line interrupt occurs, the SysTick ISR is executed and the PreemptionOccured +variable become TRUE and the four leds (LED1, LED2, LED3, LED4) start toggling. + +2) When the next KEY button EXTI Line interrupt occurs the SysTick preemption +become lower than WAKEUP button EXTI Line one. So when the WAKEUP button EXTI Line +interrupt occurs, the PreemptionOccured variable became FALSE and the four leds +(LED1, LED2, LED3, LED4) stop toggling. + +Then this behavior is repeated from point 1) in an infinite loop. + + +@par Directory contents + + - NVIC/IRQ_Priority/stm32f2xx_conf.h Library Configuration file + - NVIC/IRQ_Priority/stm32f2xx_it.c Interrupt handlers + - NVIC/IRQ_Priority/stm32f2xx_it.h Interrupt handlers header file + - NVIC/IRQ_Priority/main.c Main program + - NVIC/IRQ_Priority/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily + tailored to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + - Use the WAKEUP push-button connected to pin PA.00 (EXTI Line0). + - Use the KEY push-button connected to pin PG15 (EXTI Line15) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/stm32f2xx_conf.h new file mode 100644 index 000000000..733de915a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file NVIC/IRQ_Mask/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/stm32f2xx_it.c new file mode 100644 index 000000000..b90faeeca --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/stm32f2xx_it.c @@ -0,0 +1,226 @@ +/** + ****************************************************************************** + * @file NVIC/IRQ_Priority/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup IRQ_Priority + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint8_t PreemptionOccured; +extern __IO uint8_t PreemptionPriorityValue; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + /* If the WAKEUP_BUTTON_EXTI IRQ Handler (EXTI0_IRQHandler) was preempted + by SysTick Handler */ + if(NVIC_GetActive(WAKEUP_BUTTON_EXTI_IRQn) != 0) + { + PreemptionOccured = 1; + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles External line 0 interrupt request. + * @param None + * @retval None + */ +void EXTI0_IRQHandler(void) +{ + /* Generate SysTick exception */ + SCB->ICSR |= 0x04000000; + + /* Clear WAKEUP_BUTTON_EXTI_LINE pending bit */ + EXTI_ClearITPendingBit(WAKEUP_BUTTON_EXTI_LINE); +} + +/** + * @brief This function handles External lines 15 to 10 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + + if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + PreemptionPriorityValue = !PreemptionPriorityValue; + PreemptionOccured = 0; + + /* Modify the WAKEUP_BUTTON_EXTI_IRQn Interrupt Preemption Priority */ + NVIC_InitStructure.NVIC_IRQChannel = WAKEUP_BUTTON_EXTI_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriorityValue; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Configure the SysTick Handler Priority: Preemption priority and subpriority */ + NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), !PreemptionPriorityValue, 0)); + + /* Clear KEY_BUTTON_EXTI_LINE pending bit */ + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/stm32f2xx_it.h new file mode 100644 index 000000000..ee21e79a9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/stm32f2xx_it.h @@ -0,0 +1,62 @@ +/** + ****************************************************************************** + * @file NVIC/IRQ_Priority/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void EXTI0_IRQHandler(void); +void EXTI15_10_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/IRQ_Priority/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/EWARM/stm32f2xx_flash_offset.icf b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/EWARM/stm32f2xx_flash_offset.icf new file mode 100644 index 000000000..e8dbdae89 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/EWARM/stm32f2xx_flash_offset.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08004000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08004000; +define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20020000; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/RIDE/stm32f2xx_flash_offset.ld b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/RIDE/stm32f2xx_flash_offset.ld new file mode 100644 index 000000000..42a8f15c3 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/RIDE/stm32f2xx_flash_offset.ld @@ -0,0 +1,242 @@ +/* +Linker script for STM32F2xx_1024K_128K with flash offset. +*/ + +/* +These are used by the startup in order to allocate stacks for the different modes. +*/ +__Stack_Size = 1024 ; + +PROVIDE ( _Stack_Size = __Stack_Size ) ; + +__Stack_Init = _estack - __Stack_Size ; + +/*"PROVIDE" allows to easily override these values from an object file or the commmand line.*/ +PROVIDE ( _Stack_Init = __Stack_Init ) ; + +/* +There will be a link error if there is not this amount of RAM free at the end. +*/ +_Minimum_Stack_Size = 0x100 ; + + +/* include the memory spaces definitions sub-script */ +/* +Linker subscript for STM32F2xx definitions with 1024K Flash and 96K RAM */ + +/* Memory Spaces Definitions */ + +MEMORY +{ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K + FLASH (rx) : ORIGIN = 0x8004000, LENGTH = 1024K-0x4000 + FLASHB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0 +} + +/* higher address of the user mode stack */ +_estack = 0x20020000; + + + +/* include the sections management sub-script for FLASH mode */ +/* +Common part of the linker scripts for STR71x devices in FLASH mode +(that is, the FLASH is seen at 0) +Copyright RAISONANCE 2005 +You can use, modify and distribute thisfile freely, but without any waranty. +*/ + + + +/* Sections Definitions */ + +SECTIONS +{ + /* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* for some STRx devices, the beginning of the startup code is stored in the .flashtext section, which goes to FLASH */ + .flashtext : + { + . = ALIGN(4); + *(.flashtext) /* Startup code */ + . = ALIGN(4); + } >FLASH + + + /* the program code is stored in the .text section, which goes to Flash */ + .text : + { + . = ALIGN(4); + + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + + . = ALIGN(4); + _etext = .; + /* This is used by the startup in order to initialize the .data secion */ + _sidata = _etext; + } >FLASH + + + + /* This is the initialized data section + The program executes knowing that the data is in the RAM + but the loader puts the initial values in the FLASH (inidata). + It is one task of the startup to copy the initial values from FLASH to RAM. */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + + + /* This is the uninitialized data section */ + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + } >RAM + + PROVIDE ( end = _ebss ); + PROVIDE ( _end = _ebss ); + + /* This is the user stack section + This is just to check that there is enough RAM left for the User mode stack + It should generate an error if it's full. + */ + ._usrstack : + { + . = ALIGN(4); + _susrstack = . ; + + . = . + _Minimum_Stack_Size ; + + . = ALIGN(4); + _eusrstack = . ; + } >RAM + + + + /* this is the FLASH Bank1 */ + /* the C or assembly source must explicitly place the code or data there + using the "section" attribute */ + .b1text : + { + *(.b1text) /* remaining code */ + *(.b1rodata) /* read-only data (constants) */ + *(.b1rodata*) + } >FLASHB1 + + /* this is the EXTMEM */ + /* the C or assembly source must explicitly place the code or data there + using the "section" attribute */ + + /* EXTMEM Bank0 */ + .eb0text : + { + *(.eb0text) /* remaining code */ + *(.eb0rodata) /* read-only data (constants) */ + *(.eb0rodata*) + } >EXTMEMB0 + + /* EXTMEM Bank1 */ + .eb1text : + { + *(.eb1text) /* remaining code */ + *(.eb1rodata) /* read-only data (constants) */ + *(.eb1rodata*) + } >EXTMEMB1 + + /* EXTMEM Bank2 */ + .eb2text : + { + *(.eb2text) /* remaining code */ + *(.eb2rodata) /* read-only data (constants) */ + *(.eb2rodata*) + } >EXTMEMB2 + + /* EXTMEM Bank0 */ + .eb3text : + { + *(.eb3text) /* remaining code */ + *(.eb3rodata) /* read-only data (constants) */ + *(.eb3rodata*) + } >EXTMEMB3 + + + + /* after that it's only debugging information. */ + + /* remove the debugging information from the standard libraries */ + DISCARD : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/TASKING/stm32f2xx_flash_offset.lsl b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/TASKING/stm32f2xx_flash_offset.lsl new file mode 100644 index 000000000..c1561e162 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/TASKING/stm32f2xx_flash_offset.lsl @@ -0,0 +1,221 @@ +//////////////////////////////////////////////////////////////////////////// +// +// File : stm32f2xx.lsl +// +// Version : @(#)stm32f2xx.lsl 1.1 10/11/03 +// +// Description : LSL file for the STMicroelectronics STM32F2xx +// +// Copyright 2010 Altium BV +// +// Macros specific to control this LSL file +// +// __MEMORY Define this macro to suppress definition of on-chip +// memory. Must be defined when you want to define on-chip +// in your project's LSL file. +// __FLASH_SIZE Specifies the size of flash memory to be allocated +// __SRAM_SIZE Specifies the size of the SRAM memory to be allocated +// __NO_DEFAULT_AUTO_VECTORS +// When enabled the interrup vector table will not be +// generated +// __COPY_VECTOR_TABLE Define this macro to enable copying the vector table +// at startup from ROM to RAM +// __VECTOR_TABLE_RAM_COPY +// Define this macro to enable copying the vector table +// at startup from ROM to RAM. It is also required to +// define the macro __VECTOR_TABLE_RAM_SPACE +// __VECTOR_TABLE_RAM_SPACE +// Define size of the RAM space for the vector table when +// it is copied from ROM to RAM +// __VECTOR_TABLE_ROM_ADDR +// Specify the vector table address in ROM +// __VECTOR_TABLE_RAM_ADDR +// Specify the vector table address in RAM when the the +// it is copied from ROM to RAM (__COPY_VECTOR_TABLE) +// +// See arm_arch.lsl for more available macros. +// +// Notes: +// In the STM32F2xx, 3 different boot modes can be selected +// - User Flash memory is selected as boot space +// - SystemMemory is selected as boot space +// - Embedded SRAM is selected as boot space +// +// This aliases the physical memory associated with each boot mode to Block +// 000 (0x00000000 boot memory). Even when aliased in the boot memory space, +// the related memory (Flash memory or SRAM) is still accessible at its +// original memory space. +// +//////////////////////////////////////////////////////////////////////////// + +#ifndef __NO_DEFAULT_AUTO_VECTORS +// Suppress the vectors as defined arm_arch.lsl, because we define our +// own vectors for CMIS +#define __CMSIS_VECTORS 1 +#define __NO_DEFAULT_AUTO_VECTORS 1 +#define __NR_OF_VECTORS 97 +#endif + +#ifndef __VECTOR_TABLE_ROM_ADDR +# define __VECTOR_TABLE_ROM_ADDR 0x08004000 +#endif + +#ifndef __VECTOR_TABLE_RAM_ADDR +# define __VECTOR_TABLE_RAM_ADDR 0x00000000 +#endif + + +#ifndef __STACK +# define __STACK 4k +#endif + +#ifndef __HEAP +# define __HEAP 2k +#endif + +#include + +// +// If no memory is defined yet use the following memory settings +// +#ifndef __MEMORY + +// Specify default size for Flash and SRAM +#ifndef __FLASH_SIZE +# define __FLASH_SIZE 1024k +#endif +#ifndef __SRAM_SIZE +# define __SRAM_SIZE 128k +#endif + +memory STM32F2xx_Flash +{ + mau = 8; + type = rom; + size = 1008k; + map ( size = 1008k, dest_offset=0x08004000, dest=bus:ARM:local_bus); +} + +memory STM32F2xx_SRAM +{ + mau = 8; + type = ram; + size = __SRAM_SIZE; + map ( size = __SRAM_SIZE, dest_offset=0x20000000, dest=bus:ARM:local_bus); +} + +#endif /* __MEMORY */ + + +// +// Define the vector table for CMSIS +// +#ifdef __CMSIS_VECTORS +section_setup ::linear +{ + // vector table with handler addresses + vector_table "vector_table" ( vector_size = 4, size = __NR_OF_VECTORS, run_addr = __VECTOR_TABLE_ROM_ADDR, + template = ".text.handler_address", + template_symbol = "_lc_vector_handler", + vector_prefix = "_vector_", + fill = loop, + no_inline + ) + { + vector ( id = 0, fill = "_lc_ub_stack" ); // Top of Stack + vector ( id = 1, fill = "_START" ); // Reset Handler + vector ( id = 2, optional, fill = "NMI_Handler" ); // NMI Handler + vector ( id = 3, optional, fill = "HardFault_Handler" ); // Hard Fault Handler + vector ( id = 4, optional, fill = "MemManage_Handler" ); // MPU Fault Handler + vector ( id = 5, optional, fill = "BusFault_Handler" ); // Bus Fault Handler + vector ( id = 6, optional, fill = "UsageFault_Handler" ); // Usage Fault Handler + vector ( id = 11, optional, fill = "SVC_Handler" ); // SVCall Handler + vector ( id = 12, optional, fill = "DebugMon_Handler" ); // Debug Monitor Handler + vector ( id = 14, optional, fill = "PendSV_Handler" ); // PendSV Handler + vector ( id = 15, optional, fill = "SysTick_Handler" ); // SysTick Handler + + // External Interrupts : + vector ( id = 16, optional, fill = "WWDG_IRQHandler" ); // Window Watchdog + vector ( id = 17, optional, fill = "PVD_IRQHandler" ); // PVD through EXTI Line detect + vector ( id = 18, optional, fill = "TAMPER_STAMP_IRQHandler" ); // Tamper amd TimeStanp through EXTI + vector ( id = 19, optional, fill = "RTC_WKUP_IRQHandler" ); // RTC Wakeup through the EXTI line + vector ( id = 20, optional, fill = "FLASH_IRQHandler" ); // Flash global interrupt + vector ( id = 21, optional, fill = "RCC_IRQHandler" ); // RCC global interrupt + vector ( id = 22, optional, fill = "EXTI0_IRQHandler" ); // EXTI Line 0 interrupt + vector ( id = 23, optional, fill = "EXTI1_IRQHandler" ); // EXTI Line 1 interrupt + vector ( id = 24, optional, fill = "EXTI2_IRQHandler" ); // EXTI Line 2 interrupt + vector ( id = 25, optional, fill = "EXTI3_IRQHandler" ); // EXTI Line 3 interrupt + vector ( id = 26, optional, fill = "EXTI4_IRQHandler" ); // EXTI Line 4 interrupt + vector ( id = 27, optional, fill = "DMA1_Stream0_IRQHandler" ); // DMA1 Stream 0 interrupt + vector ( id = 28, optional, fill = "DMA1_Stream1_IRQHandler" ); // DMA1 Stream 1 interrupt + vector ( id = 29, optional, fill = "DMA1_Stream2_IRQHandler" ); // DMA1 Stream 2 interrupt + vector ( id = 30, optional, fill = "DMA1_Stream3_IRQHandler" ); // DMA1 Stream 3 interrupt + vector ( id = 31, optional, fill = "DMA1_Stream4_IRQHandler" ); // DMA1 Stream 4 interrupt + vector ( id = 32, optional, fill = "DMA1_Stream5_IRQHandler" ); // DMA1 Stream 5 interrupt + vector ( id = 33, optional, fill = "DMA1_Stream6_IRQHandler" ); // DMA1 Stream 6 interrupt + vector ( id = 34, optional, fill = "ADC_IRQHandler" ); // ADC_IRQHandler interrupts + vector ( id = 35, optional, fill = "CAN1_TX_IRQHandler" ); // CAN1 TX interrupts + vector ( id = 36, optional, fill = "CAN1_RX0_IRQHandler" ); // CAN1 RX0 interrupts + vector ( id = 37, optional, fill = "CAN1_RX1_IRQHandler" ); // CAN1 RX1 interrupt + vector ( id = 38, optional, fill = "CAN1_SCE_IRQHandler" ); // CAN1 SCE interrupt + vector ( id = 39, optional, fill = "EXTI9_5_IRQHandler" ); // EXTI Line 9..5 interrupts + vector ( id = 40, optional, fill = "TIM1_BRK_TIM9_IRQHandler" ); // TIM1 Break irq and TIM9 global interrupt + vector ( id = 41, optional, fill = "TIM1_UP_TIM10_IRQHandler" ); // TIM1 Update irq and TIM10 global interrupt + vector ( id = 42, optional, fill = "TIM1_TRG_COM_TIM11_IRQHandler" ); // TIM1 Trigger and Commutation irqs and TIM10 global irq + vector ( id = 43, optional, fill = "TIM1_CC_IRQHandler" ); // TIM1 Capture Compare + vector ( id = 44, optional, fill = "TIM2_IRQHandler" ); // TIM2 global interrupt + vector ( id = 45, optional, fill = "TIM3_IRQHandler" ); // TIM3 global interrupt + vector ( id = 46, optional, fill = "TIM4_IRQHandler" ); // TIM4 global interrupt + vector ( id = 47, optional, fill = "I2C1_EV_IRQHandler" ); // I2C1 Event + vector ( id = 48, optional, fill = "I2C1_ER_IRQHandler" ); // I2C1 Error + vector ( id = 49, optional, fill = "I2C2_EV_IRQHandler" ); // I2C2 Event + vector ( id = 50, optional, fill = "I2C2_ER_IRQHandler" ); // I2C2 Error + vector ( id = 51, optional, fill = "SPI1_IRQHandler" ); // SPI1 global interrupt + vector ( id = 52, optional, fill = "SPI2_IRQHandler" ); // SPI2 global interrupt + vector ( id = 53, optional, fill = "USART1_IRQHandler" ); // USART1 global interrupt + vector ( id = 54, optional, fill = "USART2_IRQHandler" ); // USART2 global interrupt + vector ( id = 55, optional, fill = "USART3_IRQHandler" ); // USART3 global interrupt + vector ( id = 56, optional, fill = "EXTI15_10_IRQHandler" ); // EXTI Line 15..10 interrupts + vector ( id = 57, optional, fill = "RTCAlarm_IRQHandler" ); // RTC Alarm through EXTI Line + vector ( id = 58, optional, fill = "OTG_FS_WKUP_IRQHandler" ); // USB On-The-Go FS Wakeup throught EXTI + vector ( id = 59, optional, fill = "TIM8_BRK_TIM12_IRQHandler" ); // TIM8 Break irq and TIM12 global irq + vector ( id = 60, optional, fill = "TIM8_UP_TIM13_IRQHandler" ); // TIM8 Update irq and TIM13 global irq + vector ( id = 61, optional, fill = "TIM8_TRG_COM_TIM14_IRQHandler" ); // TIM8 trigger and Comm. irqs and TIM14 global irq + vector ( id = 62, optional, fill = "TIM8_CC_IRQHandler" ); // TIM8 Capture Compare irq + vector ( id = 63, optional, fill = "DMA1_Stream7_IRQHandler" ); // DMA1 Stream7 global interrupt + vector ( id = 64, optional, fill = "FSMC_IRQHandler" ); // FSMC global interrupt + vector ( id = 65, optional, fill = "SDIO_IRQHandler" ); // SDIO global interrupt + vector ( id = 66, optional, fill = "TIM5_IRQHandler" ); // TIM5 global interrupt + vector ( id = 67, optional, fill = "SPI3_IRQHandler" ); // SPI3 global interrupt + vector ( id = 68, optional, fill = "UART4_IRQHandler" ); // UART4 global interrupt + vector ( id = 69, optional, fill = "UART5_IRQHandler" ); // UART5 global interrupt + vector ( id = 70, optional, fill = "TIM6_DAC_IRQHandler" ); // TIM6 glbl irq, DAC1 and DAC2 underrun err irqs + vector ( id = 71, optional, fill = "TIM7_IRQHandler" ); // TIM7 global interrupt + vector ( id = 72, optional, fill = "DMA2_Stream0_IRQHandler" ); // DMA2 Stream0 global interrupt + vector ( id = 73, optional, fill = "DMA2_Stream1_IRQHandler" ); // DMA2 Stream1 global interrupt + vector ( id = 74, optional, fill = "DMA2_Stream2_IRQHandler" ); // DMA2 Stream2 global interrupt + vector ( id = 75, optional, fill = "DMA2_Stream3_IRQHandler" ); // DMA2 Stream3 global interrupt + vector ( id = 76, optional, fill = "DMA2_Stream4_IRQHandler" ); // DMA2 Stream4 global interrupt + vector ( id = 77, optional, fill = "ETH_IRQHandler" ); // Ethernet global interrupt + vector ( id = 78, optional, fill = "ETH_WKUP_IRQHandler" ); // Ethernet Wakeup through EXTI line irq + vector ( id = 79, optional, fill = "CAN2_TX_IRQHandler" ); // CAN2 TX interrupts + vector ( id = 80, optional, fill = "CAN2_RX0_IRQHandler" ); // CAN2 RX0 interrupts + vector ( id = 81, optional, fill = "CAN2_RX1_IRQHandler" ); // CAN2 RX1 interrupt + vector ( id = 82, optional, fill = "CAN2_SCE_IRQHandler" ); // CAN2 SCE interrupt + vector ( id = 83, optional, fill = "OTG_FS_IRQHandler" ); // USB On The Go FS global interrupt + vector ( id = 84, optional, fill = "DMA2_Stream5_IRQHandler" ); // DMA2 Stream5 global interrupt + vector ( id = 85, optional, fill = "DMA2_Stream6_IRQHandler" ); // DMA2 Stream6 global interrupt + vector ( id = 86, optional, fill = "DMA2_Stream7_IRQHandler" ); // DMA2 Stream7 global interrupt + vector ( id = 87, optional, fill = "USART6_IRQHandler" ); // USART6 global interrupt + vector ( id = 88, optional, fill = "I2C3_EV_IRQHandler" ); // I2C3 event interrupt + vector ( id = 89, optional, fill = "I2C3_ER_IRQHandler" ); // I2C3 error interrupt + vector ( id = 90, optional, fill = "OTG_HS_EP1_OUT_IRQHandler" ); // USB On The Go HS End Point 1 OUT global irq + vector ( id = 91, optional, fill = "OTG_HS_EP1_IN_IRQHandler" ); // USB On The Go HS End Point 1 In global irq + vector ( id = 92, optional, fill = "OTG_HS_WKUP_IRQHandler" ); // USB On The Go HS Wakeup through EXTI irq + vector ( id = 93, optional, fill = "OTG_HS_IRQHandler" ); // USB On The Go HS global interrupt + vector ( id = 94, optional, fill = "DCMI_IRQHandler" ); // DCMI global interrupt + vector ( id = 95, optional, fill = "CRYP_IRQHandler" ); // CRYP crypto global interrupt + vector ( id = 96, optional, fill = "HASH_RNG_IRQHandler" ); // Hash and Rng global interrupt + } +} +#endif /* __CMSIS_VECTORS */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/TrueSTUDIO/stm32f2xx_flash_offset.ld b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/TrueSTUDIO/stm32f2xx_flash_offset.ld new file mode 100644 index 000000000..7d87bfd41 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/linker/TrueSTUDIO/stm32f2xx_flash_offset.ld @@ -0,0 +1,170 @@ +/* +***************************************************************************** +** +** File : stm32f2xx_flash_offset.ld +** +** Abstract : Linker script for STM32F207IG Device with +** 1MByte FLASH, 128KByte SRAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** Environment : Atollic TrueSTUDIO(R) +** +** Distribution: The file is distributed 揳s is,� without any warranty +** of any kind. +** +** (c)Copyright Atollic AB. +** You may use this file as-is or modify it according to the needs of your +** project. Distribution of this file (unmodified or modified) is not +** permitted. Atollic AB permit registered Atollic TrueSTUDIO(R) users the +** rights to distribute the assembled, compiled & linked contents of this +** file as part of an application binary file, provided that it is built +** using the Atollic TrueSTUDIO(R) toolchain. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20020000; /* end of 128K SRAM */ + +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0; /* required amount of heap */ +_Min_Stack_Size = 0x200; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08004000, LENGTH = 1024K - 0x4000 + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K + MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(.fini_array*)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = .; + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + PROVIDE ( end = _ebss ); + PROVIDE ( _end = _ebss ); + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(4); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >RAM + + /* MEMORY_bank1 section, code must be located here explicitly */ + /* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */ + .memory_b1_text : + { + *(.mb1text) /* .mb1text sections (code) */ + *(.mb1text*) /* .mb1text* sections (code) */ + *(.mb1rodata) /* read-only data (constants) */ + *(.mb1rodata*) + } >MEMORY_B1 + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/main.c new file mode 100644 index 000000000..c9424b54f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/main.c @@ -0,0 +1,182 @@ +/** + ****************************************************************************** + * @file NVIC/VectorTable_Relocation/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup VectorTable_Relocation + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +static __IO uint32_t TimingDelay; + +/* Private function prototypes -----------------------------------------------*/ +void Delay(__IO uint32_t nTime); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Set the Vector Table base location at 0x08004000 + (this is already done in system_stm32f2xx.c file) */ + //NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000); + + /* Initialize Leds mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Turn on LED1 and LED3 */ + STM_EVAL_LEDOn(LED1); + STM_EVAL_LEDOn(LED3); + + /* Setup SysTick Timer for 1 msec interrupts. + ------------------------------------------ + 1. The SysTick_Config() function is a CMSIS function which configure: + - The SysTick Reload register with value passed as function parameter. + - Configure the SysTick IRQ priority to the lowest value (0x0F). + - Reset the SysTick Counter register. + - Configure the SysTick Counter clock source to be Core Clock Source (HCLK). + - Enable the SysTick Interrupt. + - Start the SysTick Counter. + + 2. You can change the SysTick Clock source to be HCLK_Div8 by calling the + SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) just after the + SysTick_Config() function call. The SysTick_CLKSourceConfig() is defined + inside the misc.c file. + + 3. You can change the SysTick IRQ priority by calling the + NVIC_SetPriority(SysTick_IRQn,...) just after the SysTick_Config() function + call. The NVIC_SetPriority() is defined inside the core_cm3.h file. + + 4. To adjust the SysTick time base, use the following formula: + + Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s) + + - Reload Value is the parameter to be passed for SysTick_Config() function + - Reload Value should not exceed 0xFFFFFF + */ + if (SysTick_Config(SystemCoreClock / 1000)) + { + /* Capture error */ + while (1); + } + + while (1) + { + /* Toggle LED2 and LED4 */ + STM_EVAL_LEDToggle(LED2); + STM_EVAL_LEDToggle(LED4); + + /* Insert 50 ms delay */ + Delay(50); + + /* Toggle LED1 and LED3 */ + STM_EVAL_LEDToggle(LED1); + STM_EVAL_LEDToggle(LED3); + + /* Insert 100 ms delay */ + Delay(100); + } +} + +/** + * @brief Inserts a delay time. + * @param nTime: specifies the delay time length, in milliseconds. + * @retval None + */ +void Delay(__IO uint32_t nTime) +{ + TimingDelay = nTime; + + while(TimingDelay != 0); +} + +/** + * @brief Decrements the TimingDelay variable. + * @param None + * @retval None + */ +void TimingDelay_Decrement(void) +{ + if (TimingDelay != 0x00) + { + TimingDelay--; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/main.h new file mode 100644 index 000000000..7bad6dbda --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/main.h @@ -0,0 +1,44 @@ +/** + ****************************************************************************** + * @file NVIC/VectorTable_Relocation/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void TimingDelay_Decrement(void); + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/readme.txt new file mode 100644 index 000000000..e2bebab86 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/readme.txt @@ -0,0 +1,121 @@ +/** + @page NVIC_VectorTable_Relocation NVIC Vector Table Relocation example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file NVIC/VectorTable_Relocation/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the NVIC Vector Table Relocation example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example describes how to relocate the CortexM3 vector table in a specific +address other than the default Flash memory base address. +This can be used to build program which will be loaded into Flash memory by an +application previously programmed from the Flash memory base address. +Such application can be In-Application Programming (IAP) through USART, Ethernet +or USB (Device Firmware Upgrade, DFU). +These applications are available for download from the ST microcontrollers +website: ST Microcontrollers + +To build such application, some special configuration has to be performed: +1. Set the application load address, using your toolchain linker file +2. In the application code, relocate the vector table at the application load + address using the "NVIC_SetVectorTable" function from the misc.h/.c driver or + by modifying the value of the constant "VECT_TAB_OFFSET" defined + in system_stm32f2xx.c file. +For example, when building an application to be loaded with the IAP through USART +the application load address and vector table address must be set to 0x08004000. + +In this example, the associated program implements a "Delay" function based on +SysTick end of count interrupt, and toggles four leds with timing defined by the +"Delay" function. + + +@par Directory contents + + - NVIC/VectorTable_Relocation/stm32f2xx_conf.h Library Configuration file + - NVIC/VectorTable_Relocation/stm32f2xx_it.c Interrupt handlers + - NVIC/VectorTable_Relocation/stm32f2xx_it.h Interrupt handlers header file + - NVIC/VectorTable_Relocation/main.c Main program + - NVIC/VectorTable_Relocation/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily + tailored to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain and setup your project configuration as follows +
    +
  • MDK-ARM + - In the project option menu, select 'Target' window and enter 0x08004000 + as IROM1 start address + - In the project option menu, select 'Linker' window and enter 0x08004000 + as R/O base address + +
  • EWARM + - Use "stm32f2xx_flash_offset.icf" as linker file + +
  • RIDE + - In the Application options -> script menu, set "Use Default Script File" + to "No" and use "stm32f2xx_flash_offset.ld" as Script File. + This linker is configured for STM32F2xx. It should be updated to use it + with other STM32 devices. + +
  • TASKING + -In the project properties window, select C/C++ Build->settings node then + the "Linker->Script file" and use "stm32f2xx_flash_offset.lsl" as Script File. + This linker is configured for STM32F2xx. It should be updated to be used + with other STM32 devices. + +
  • TrueSTUDIO + - In the project properties window, select C/C++ Build->settings node then + the C Linker->General node and use "stm32f2xx_flash_offset.ld" as Script File. + This linker is configured for STM32F2xx. It should be updated to be used + with other STM32 devices. + +
+ + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/stm32f2xx_conf.h new file mode 100644 index 000000000..c3f917976 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file NVIC/VectorTable_Relocation/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/stm32f2xx_it.c new file mode 100644 index 000000000..610d322d9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/stm32f2xx_it.c @@ -0,0 +1,175 @@ +/** + ****************************************************************************** + * @file NVIC/VectorTable_Relocation/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup VectorTable_Relocation + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + TimingDelay_Decrement(); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/stm32f2xx_it.h new file mode 100644 index 000000000..7bee1427c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file NVIC/VectorTable_Relocation/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/system_stm32f2xx.c new file mode 100644 index 000000000..48468bed3 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/NVIC/VectorTable_Relocation/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x4000 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/main.c new file mode 100644 index 000000000..0b1194eff --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/main.c @@ -0,0 +1,134 @@ +/** + ****************************************************************************** + * @file PWR/BOR/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_BOR + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Uncomment the corresponding line to select the BOR level */ +#define BOR_LEVEL OB_BOR_OFF /*!< BOR Reset threshold levels for 1.62V - 2.10V VDD power supply */ +//#define BOR_LEVEL OB_BOR_LEVEL1 /*!< BOR Reset threshold levels for 2.10V - 2.40V VDD power supply */ +//#define BOR_LEVEL OB_BOR_LEVEL2 /*!< BOR Reset threshold levels for 2.40V - 2.70V VDD power supply */ +//#define BOR_LEVEL OB_BOR_LEVEL3 /*!< BOR Reset threshold levels for 2.70V - 3.60V VDD power supply */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t Counter = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LED1 on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + + /* Initialize Key Button mounted on STM322xG-EVAL board */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); + + /* Test if Key push-button on STM322xG-EVAL Board is pressed */ + if (STM_EVAL_PBGetState(BUTTON_KEY) == 0x00) + { + /* Get BOR Option Bytes */ + if((FLASH_OB_GetBOR() & 0x0C) != BOR_LEVEL) + { + /* Unlocks the option bytes block access */ + FLASH_OB_Unlock(); + + /* Select the desired V(BOR) Level -------------------------------------*/ + FLASH_OB_BORConfig(BOR_LEVEL); + + /* Launch the option byte loading */ + FLASH_OB_Launch(); + + /* Locks the option bytes block access */ + FLASH_OB_Lock(); + } + } + + while (1) + { + /* Toggle The LED1 */ + STM_EVAL_LEDToggle(LED1); + + /* Inserted Delay */ + for(Counter = 0; Counter < 0x5FFFF; Counter++); + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/readme.txt new file mode 100644 index 000000000..be8aac270 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/readme.txt @@ -0,0 +1,78 @@ +/** + @page PWR_BOR PWR Brown Out Reset (BOR) example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file PWR/BOR/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the PWR Brown Out Reset (BOR) example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the programmable BOR thresholds using the +FLASH option bytes. + +By maintaining the Key push-button pressed at Reset, the new BOR level will be +programmed. To modify the BOR threshold, select the voltage range using the +appropriate line "#define BOR_LEVEL OB_BOR_XXXX" in main.c file. + +LED1 is toggling to indicate that the reset is released and the system is in RUN +mode otherwise the BOR is maintaining the reset. + + +@par Directory contents + + - PWR/BOR/stm32f2xx_conf.h Library Configuration file + - PWR/BOR/stm32f2xx_it.c Interrupt handlers + - PWR/BOR/stm32f2xx_it.h Interrupt handlers header file + - PWR/BOR/main.c Main program + - PWR/BOR/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1 led connected to PG.06 pin + - Use the Key push-button connected to pin PG15 (EXTI Line15) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/stm32f2xx_conf.h new file mode 100644 index 000000000..651360b3a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file PWR/BOR/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/stm32f2xx_it.c new file mode 100644 index 000000000..6647d903d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/stm32f2xx_it.c @@ -0,0 +1,174 @@ +/** + ****************************************************************************** + * @file PWR/BOR/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_BOR + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/stm32f2xx_it.h new file mode 100644 index 000000000..176cd7f19 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file PWR/BOR/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/BOR/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/main.c new file mode 100644 index 000000000..e10cf2258 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/main.c @@ -0,0 +1,196 @@ +/** + ****************************************************************************** + * @file PWR/CurrentConsumption/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm32f2xx_lp_modes.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_CurrentConsumption + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t Counter = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Enable PWR APB1 Clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to Backup */ + PWR_BackupAccessCmd(ENABLE); + + /* Reset RTC Domain */ + RCC_BackupResetCmd(ENABLE); + RCC_BackupResetCmd(DISABLE); + + /* Check that the system was resumed from StandBy mode */ + if(PWR_GetFlagStatus(PWR_FLAG_SB) != RESET) + { + /* Clear SB Flag */ + PWR_ClearFlag(PWR_FLAG_SB); + + /* Initialize LED1 on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + + /* Infinite loop */ + while (1) + { + /* Toggle The LED1 */ + STM_EVAL_LEDToggle(LED1); + + /* Inserted Delay */ + for(Counter = 0; Counter < 0x5FFFF; Counter++); + } + } + + /* Configure Key Button */ + STM_EVAL_PBInit(BUTTON_KEY,BUTTON_MODE_GPIO); + + /* Wait until Key button is pressed to enter the Low Power mode */ + while(STM_EVAL_PBGetState(BUTTON_KEY) != RESET) + { + } + /* Loop while Key button is maintained pressed */ + while(STM_EVAL_PBGetState(BUTTON_KEY) == RESET) + { + } + +#if defined (SLEEP_MODE) + /* Sleep Mode Entry + - System Running at PLL (120MHz) + - Flash 3 wait state + - Prefetch and Cache enabled + - Code running from Internal FLASH + - All peripherals disabled. + - Wakeup using EXTI Line (Key Button PG.15) + */ + SleepMode_Measure(); +#elif defined (STOP_MODE) + /* STOP Mode Entry + - RTC Clocked by LSE/LSI + - Regulator in LP mode + - HSI, HSE OFF and LSI OFF if not used as RTC Clock source + - No IWDG + - FLASH in deep power down mode + - Automatic Wakeup using RTC clocked by LSE/LSI (after ~20s) + */ + StopMode_Measure(); +#elif defined (STANDBY_MODE) + /* STANDBY Mode Entry + - Backup SRAM and RTC OFF + - IWDG and LSI OFF + - Wakeup using WakeUp Pin (PA.00) + */ + StandbyMode_Measure(); +#elif defined (STANDBY_RTC_MODE) + /* STANDBY Mode with RTC on LSE/LSI Entry + - RTC Clocked by LSE or LSI + - IWDG OFF and LSI OFF if not used as RTC Clock source + - Backup SRAM OFF + - Automatic Wakeup using RTC clocked by LSE/LSI (after ~20s) + */ + StandbyRTCMode_Measure(); +#elif defined (STANDBY_RTC_BKPSRAM_MODE) + /* STANDBY Mode with RTC on LSE/LSI Entry + - RTC Clocked by LSE/LSI + - Backup SRAM ON + - IWDG OFF + - Automatic Wakeup using RTC clocked by LSE/LSI (after ~20s) + */ + StandbyRTCBKPSRAMMode_Measure(); +#else + + /* Initialize LED1 on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + + /* Infinite loop */ + while (1) + { + /* Toggle The LED1 */ + STM_EVAL_LEDToggle(LED1); + + /* Inserted Delay */ + for(Counter = 0; Counter < 0x5FF; Counter++); + } +#endif +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/readme.txt new file mode 100644 index 000000000..8a0c334be --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/readme.txt @@ -0,0 +1,152 @@ +/** + @page PWR_CurrentConsumption PWR Current Consumption example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file PWR/CurrentConsumption/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the PWR Current Consumption example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the STM32F2xx system to measure different +Low Power modes current consumption. The Low Power modes are: + - Sleep Mode + - STOP mode with RTC + - STANDBY mode without RTC and BKPSRAM + - STANDBY mode with RTC + - STANDBY mode with RTC and BKPSRAM + +To run this example, user has to follow the following steps: + 1. Select the Low power modes to be measured by uncommenting the corresponding + line inside the stm32f2xx_lp_modes.h file. + @code + /*#define SLEEP_MODE*/ + /*#define STOP_MODE*/ + /*#define STANDBY_MODE*/ + #define STANDBY_RTC_MODE + /*#define STANDBY_RTC_BKPSRAM_MODE*/ + @endcode + + 2. Use an external amperemeter to measure the IDD current. + + 3. This example can not be used in DEBUG mode,this is due to the fact that the + Cortex�-M3 core is no longer clocked during low power mode so debugging + features are disbaled + +Here below a detailed description of the example code: + + @verbatim + + 1. After reset, the program waits for Key button connected to the PG.15 to be + pressed to enter the selected low power mode. + - When the RTC is not used in the low power mode configuration, press + again the Key button to exit the low power mode. + - When the RTC is used, the wakeup from low power mode is automatically + generated by the RTC (after 4s). + + 2. Low power modes description: + + - Sleep Mode + ============ + - System Running at PLL (120MHz) + - Flash 3 wait state + - Prefetch and Cache enabled + - Code running from Internal FLASH + - All peripherals disabled. + - Wakeup using EXTI Line (Key Button PG.15) + + - STOP Mode + =========== + - RTC Clocked by LSE or LSI + - Regulator in LP mode + - HSI, HSE OFF and LSI if not used as RTC Clock source + - No IWDG + - FLASH in deep power down mode + - Automatic Wakeup using RTC clocked by LSE/LSI (after ~20s) + + - STANDBY Mode + ============== + - Backup SRAM and RTC OFF + - IWDG and LSI OFF + - Wakeup using WakeUp Pin (PA.00) + + - STANDBY Mode with RTC clocked by LSE/LSI + ========================================== + - RTC Clocked by LSE or LSI + - IWDG OFF and LSI OFF if not used as RTC Clock source + - Backup SRAM OFF + - Automatic Wakeup using RTC clocked by LSE/LSI (after ~20s) + + - STANDBY Mode with RTC clocked by LSE/LSI and BKPSRAM + ====================================================== + - RTC Clocked by LSE or LSI + - Backup SRAM ON + - IWDG OFF + - Automatic Wakeup using RTC clocked by LSE/LSI (after ~20s) + + @endverbatim + + +@par Directory contents + + - PWR/CurrentConsumption/stm32f2xx_conf.h Library Configuration file + - PWR/CurrentConsumption/stm32f2xx_it.c Interrupt handlers + - PWR/CurrentConsumption/stm32f2xx_it.h Interrupt handlers header file + - PWR/CurrentConsumption/main.c Main program + - PWR/CurrentConsumption/system_stm32f2xx.c STM32F2xx system source file + - PWR/CurrentConsumption/stm32f2xx_lp_modes.c STM32F2xx Low Power Modes source file + - PWR/CurrentConsumption/stm32f2xx_lp_modes.h STM32F2xx Low Power Modes header file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices revision B and revision Y + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1 connected to PG.06 pin. + - Use Key Button connected to PG.15 pin + - Make sure that JP31 is not fitted. + - Connect an amperemeter to JP32 to measure the IDD current + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Add the file stm32f2xx_lp_modes.c to the project source list + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_conf.h new file mode 100644 index 000000000..44b7aaf25 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file PWR/CurrentConsumption/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_it.c new file mode 100644 index 000000000..836b13e21 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_it.c @@ -0,0 +1,209 @@ +/** + ****************************************************************************** + * @file PWR/CurrentConsumption/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_CurrentConsumption + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles RTC Auto wake-up interrupt request. + * @param None + * @retval None + */ +void RTC_WKUP_IRQHandler(void) +{ + if(RTC_GetITStatus(RTC_IT_WUT) != RESET) + { + /* Toggle LED1 */ + STM_EVAL_LEDToggle(LED1); + RTC_ClearITPendingBit(RTC_IT_WUT); + EXTI_ClearITPendingBit(EXTI_Line22); + } +} + +/** + * @brief This function handles EXTI Lines 10 to 15 interrupts requests. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + /* Clear the Key Button EXTI line pending bit */ + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_it.h new file mode 100644 index 000000000..2b296e810 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_it.h @@ -0,0 +1,54 @@ +/** + ****************************************************************************** + * @file PWR/CurrentConsumption/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void RTC_WKUP_IRQHandler(void); +void EXTI15_10_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_lp_modes.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_lp_modes.c new file mode 100644 index 000000000..d20010ae1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_lp_modes.c @@ -0,0 +1,459 @@ +/** + ****************************************************************************** + * @file PWR/CurrentConsumption/stm32f2xx_lp_modes.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file provides firmware functions to manage the following + * functionalities of the STM32F2xx Low Power Modes: + * - Sleep Mode + * - STOP mode with RTC + * - STANDBY mode without RTC and BKPSRAM + * - STANDBY mode with RTC + * - STANDBY mode with RTC and BKPSRAM + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_lp_modes.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_CurrentConsumption + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Uncomment the corresponding line to select the RTC Clock source */ +#define RTC_CLOCK_SOURCE_LSE /* LSE used as RTC source clock */ +/* #define RTC_CLOCK_SOURCE_LSI */ /* LSI used as RTC source clock. The RTC Clock + may varies due to LSI frequency dispersion. */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief This function configures the system to enter Sleep mode for + * current consumption measurement purpose. + * Sleep Mode + * ========== + * - System Running at PLL (120MHz) + * - Flash 3 wait state + * - Prefetch and Cache enabled + * - Code running from Internal FLASH + * - All peripherals disabled. + * - Wakeup using EXTI Line (Key Button PG.15) + * @param None + * @retval None + */ +void SleepMode_Measure(void) +{ + __IO uint32_t index = 0; + GPIO_InitTypeDef GPIO_InitStructure; + + /* Configure all GPIO as analog to reduce current consumption on non used IOs */ + /* Enable GPIOs clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | + RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF | + RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOH | RCC_AHB1Periph_GPIOI, ENABLE); + + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; + GPIO_Init(GPIOC, &GPIO_InitStructure); + GPIO_Init(GPIOD, &GPIO_InitStructure); + GPIO_Init(GPIOE, &GPIO_InitStructure); + GPIO_Init(GPIOF, &GPIO_InitStructure); + GPIO_Init(GPIOG, &GPIO_InitStructure); + GPIO_Init(GPIOH, &GPIO_InitStructure); + GPIO_Init(GPIOI, &GPIO_InitStructure); + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Disable GPIOs clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | + RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF | + RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOH | RCC_AHB1Periph_GPIOI, DISABLE); + + /* Configure Key Button */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + + /* Request to enter SLEEP mode */ + __WFI(); + + /* Initialize LED1 on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + + /* Infinite loop */ + while (1) + { + /* Toggle The LED1 */ + STM_EVAL_LEDToggle(LED1); + + /* Inserted Delay */ + for(index = 0; index < 0x5FFFF; index++); + } +} + +/** + * @brief This function configures the system to enter Stop mode with RTC + * clocked by LSE or LSI for current consumption measurement purpose. + * STOP Mode with RTC clocked by LSE/LSI + * ===================================== + * - RTC Clocked by LSE or LSI + * - Regulator in LP mode + * - HSI, HSE OFF and LSI OFF if not used as RTC Clock source + * - No IWDG + * - FLASH in deep power down mode + * - Automatic Wakeup using RTC clocked by LSE/LSI (~20s) + * @param None + * @retval None + */ +void StopMode_Measure(void) +{ + __IO uint32_t index = 0; + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + EXTI_InitTypeDef EXTI_InitStructure; + + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + +#if defined (RTC_CLOCK_SOURCE_LSI) /* LSI used as RTC source clock*/ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + +#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */ + /* Enable the LSE OSC */ + RCC_LSEConfig(RCC_LSE_ON); + + /* Wait till LSE is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); + +#else + #error Please select the RTC Clock source inside the main.c file +#endif /* RTC_CLOCK_SOURCE_LSI */ + + + /* Enable the RTC Clock */ + RCC_RTCCLKCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + + /* Configure all GPIO as analog to reduce current consumption on non used IOs */ + /* Enable GPIOs clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | + RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF | + RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOH | RCC_AHB1Periph_GPIOI, ENABLE); + + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; + GPIO_Init(GPIOC, &GPIO_InitStructure); + GPIO_Init(GPIOD, &GPIO_InitStructure); + GPIO_Init(GPIOE, &GPIO_InitStructure); + GPIO_Init(GPIOF, &GPIO_InitStructure); + GPIO_Init(GPIOG, &GPIO_InitStructure); + GPIO_Init(GPIOH, &GPIO_InitStructure); + GPIO_Init(GPIOI, &GPIO_InitStructure); + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Disable GPIOs clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | + RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF | + RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOH | RCC_AHB1Periph_GPIOI, DISABLE); + + /* EXTI configuration *******************************************************/ + EXTI_ClearITPendingBit(EXTI_Line22); + EXTI_InitStructure.EXTI_Line = EXTI_Line22; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Enable the RTC Wakeup Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* RTC Wakeup Interrupt Generation: Clock Source: RTCCLK_Div16, Wakeup Time Base: ~20s + RTC Clock Source LSE 32.768KHz or LSI ~32KHz + + Wakeup Time Base = (16 / (LSE or LSI)) * WakeUpCounter + */ + RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); + RTC_SetWakeUpCounter(0xA000-1); + + /* Enable the Wakeup Interrupt */ + RTC_ITConfig(RTC_IT_WUT, ENABLE); + + /* Enable Wakeup Counter */ + RTC_WakeUpCmd(ENABLE); + + /* FLASH Deep Power Down Mode enabled */ + PWR_FlashPowerDownCmd(ENABLE); + + /* Enter Stop Mode */ + PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); + + /* Initialize LED1 on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + + /* Infinite loop */ + while (1) + { + /* Toggle The LED1 */ + STM_EVAL_LEDToggle(LED1); + + /* Inserted Delay */ + for(index = 0; index < 0x5FF; index++); + } +} + +/** + * @brief This function configures the system to enter Standby mode for + * current consumption measurement purpose. + * STANDBY Mode + * ============ + * - Backup SRAM and RTC OFF + * - IWDG and LSI OFF + * - Wakeup using WakeUp Pin (PA.00) + * @param None + * @retval None + */ +void StandbyMode_Measure(void) +{ + /* Enable WKUP pin 1 */ + PWR_WakeUpPinCmd(ENABLE); + + /* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */ + PWR_EnterSTANDBYMode(); + + /* Infinite loop */ + while (1) + { + } +} + +/** + * @brief This function configures the system to enter Standby mode with RTC + * clocked by LSE or LSI for current consumption measurement purpose. + * STANDBY Mode with RTC clocked by LSE/LSI + * ======================================== + * - RTC Clocked by LSE/LSI + * - IWDG OFF + * - Backup SRAM OFF + * - Automatic Wakeup using RTC clocked by LSE/LSI (after ~20s) + * @param None + * @retval None + */ +void StandbyRTCMode_Measure(void) +{ + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + +#if defined (RTC_CLOCK_SOURCE_LSI) /* LSI used as RTC source clock*/ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + +#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */ + /* Enable the LSE OSC */ + RCC_LSEConfig(RCC_LSE_ON); + + /* Wait till LSE is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); + +#else + #error Please select the RTC Clock source inside the main.c file +#endif /* RTC_CLOCK_SOURCE_LSI */ + + /* Enable the RTC Clock */ + RCC_RTCCLKCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + + /* RTC Wakeup Interrupt Generation: Clock Source: RTCCLK_Div16, Wakeup Time Base: ~20s + RTC Clock Source LSE 32.768KHz or LSI ~32KHz + + Wakeup Time Base = (16 / (LSE or LSI)) * WakeUpCounter + */ + RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); + RTC_SetWakeUpCounter(0xA000-1); + + /* Enable the Wakeup Interrupt */ + RTC_ITConfig(RTC_IT_WUT, ENABLE); + + /* Enable Wakeup Counter */ + RTC_WakeUpCmd(ENABLE); + + /* Clear WakeUp (WUTF) pending flag */ + RTC_ClearFlag(RTC_FLAG_WUTF); + + /* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */ + PWR_EnterSTANDBYMode(); + + /* Infinite loop */ + while (1) + { + } +} + +/** + * @brief This function configures the system to enter Standby mode with RTC + * clocked by LSE or LSI and with Backup SRAM ON for current consumption + * measurement purpose. + * STANDBY Mode with RTC clocked by LSE/LSI and BKPSRAM + * ==================================================== + * - RTC Clocked by LSE or LSI + * - Backup SRAM ON + * - IWDG OFF + * - Automatic Wakeup using RTC clocked by LSE/LSI (after ~20s) + * @param None + * @retval None + */ +void StandbyRTCBKPSRAMMode_Measure(void) +{ + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + +#if defined (RTC_CLOCK_SOURCE_LSI) /* LSI used as RTC source clock*/ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + +#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */ + /* Enable the LSE OSC */ + RCC_LSEConfig(RCC_LSE_ON); + + /* Wait till LSE is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); + +#else + #error Please select the RTC Clock source inside the main.c file +#endif /* RTC_CLOCK_SOURCE_LSI */ + + /* Enable the RTC Clock */ + RCC_RTCCLKCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + +/* Backup SRAM ***************************************************************/ + /* Enable BKPRAM Clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE); + + /* Enable the Backup SRAM low power Regulator */ + PWR_BackupRegulatorCmd(ENABLE); + + /* Wait until the Backup SRAM low power Regulator is ready */ + while(PWR_GetFlagStatus(PWR_FLAG_BRR) == RESET) + { + } + + /* RTC Wakeup Interrupt Generation: Clock Source: RTCCLK_Div16, Wakeup Time Base: ~20s + RTC Clock Source LSE 32.768KHz or LSI ~32KHz + + Wakeup Time Base = (16 / (LSE or LSI)) * WakeUpCounter + */ + RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); + RTC_SetWakeUpCounter(0xA000-1); + + /* Enable the Wakeup Interrupt */ + RTC_ITConfig(RTC_IT_WUT, ENABLE); + + /* Enable Wakeup Counter */ + RTC_WakeUpCmd(ENABLE); + + /* Clear WakeUp (WUTF) pending flag */ + RTC_ClearFlag(RTC_FLAG_WUTF); + + /* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */ + PWR_EnterSTANDBYMode(); + + /* Infinite loop */ + while (1) + { + } +} + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_lp_modes.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_lp_modes.h new file mode 100644 index 000000000..3b8da3f07 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/stm32f2xx_lp_modes.h @@ -0,0 +1,63 @@ +/** + ****************************************************************************** + * @file PWR/CurrentConsumption/stm32f2xx_lp_modes.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for stm32f2xx_lp_modes.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_LP_MODES_H +#define __STM32F2xx_LP_MODES_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +#if !defined (SLEEP_MODE) && !defined (STOP_MODE) && !defined (STANDBY_MODE)\ + && !defined (STANDBY_RTC_MODE) && !defined (STANDBY_RTC_BKPSRAM_MODE) +/* Uncomment the corresponding line to select the STM32F2xx Low Power mode */ +#define SLEEP_MODE +//#define STOP_MODE +//#define STANDBY_MODE +//#define STANDBY_RTC_MODE +//#define STANDBY_RTC_BKPSRAM_MODE +#endif + +#if !defined (SLEEP_MODE) && !defined (STOP_MODE) && !defined (STANDBY_MODE)\ + && !defined (STANDBY_RTC_MODE) && !defined (STANDBY_RTC_BKPSRAM_MODE) + #error "Please select first the target STM32F2xx Low Power mode to be measured (in stm32f2xx_lp_modes.h file)" +#endif + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void SleepMode_Measure(void); +void StopMode_Measure(void); +void StandbyMode_Measure(void); +void StandbyRTCMode_Measure(void); +void StandbyRTCBKPSRAMMode_Measure(void); + +#endif /* __STM32F2xx_LP_MODES_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/CurrentConsumption/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/main.c new file mode 100644 index 000000000..6c90c330a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/main.c @@ -0,0 +1,151 @@ +/** + ****************************************************************************** + * @file PWR/PVD/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_PVD + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t i = 0; + +/* Private function prototypes -----------------------------------------------*/ +void PVD_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + + /* Configure the PVD */ + PVD_Config(); + + while (1) + { + /* Toggle The LED2 */ + STM_EVAL_LEDToggle(LED2); + + /* Inserted Delay */ + for(i = 0; i < 0x5FFFF; i++); + } +} + +/** + * @brief Configures the PVD resources. + * @param None + * @retval None + */ +void PVD_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + EXTI_InitTypeDef EXTI_InitStructure; + + /* Enable PWR clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Configure one bit for preemption priority */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); + + /* Enable the PVD Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Configure EXTI Line16(PVD Output) to generate an interrupt on rising and + falling edges */ + EXTI_ClearITPendingBit(EXTI_Line16); + EXTI_InitStructure.EXTI_Line = EXTI_Line16; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Configure the PVD Level to 3 (PVD detection level set to 2.5V, refer to the + electrical characteristics of you device datasheet for more details) */ + PWR_PVDLevelConfig(PWR_PVDLevel_3); + + /* Enable the PVD Output */ + PWR_PVDCmd(ENABLE); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/readme.txt new file mode 100644 index 000000000..06d7217a3 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/readme.txt @@ -0,0 +1,76 @@ +/** + @page PWR_PVD PWR Programmable Voltage Detector (PVD) example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file PWR/PVD/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the PWR Programmable Voltage Detector (PVD) example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the programmable voltage detector using +an external interrupt line. In this example, EXTI line 16 is configured to generate +an interrupt on each rising or falling edge of the PVD output signal (which +indicates that the Vdd voltage is below the PVD threshold). +In the interrupt routine a led connected to a specific GPIO pin is toggled every +time the voltage drops below or above the target threshold. + +A LED connected to a specific GPIO pin is toggling to indicate that the system +is in RUN. + +@par Directory contents + + - PWR/PVD/stm32f2xx_conf.h Library Configuration file + - PWR/PVD/stm32f2xx_it.c Interrupt handlers + - PWR/PVD/stm32f2xx_it.h Interrupt handlers header file + - PWR/PVD/main.c Main program + - PWR/PVD/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - HW Set-up + - Connect a LED to PG.06 pin (will be referred to by LED1 in the example code) + - Connect a LED to PG.08 pin (will be referred to by LED2 in the example code) + @note This example can't run on the STM322xG-EVAL board. + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/stm32f2xx_conf.h new file mode 100644 index 000000000..3c3939ea2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file PWR/PVD/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/stm32f2xx_it.c new file mode 100644 index 000000000..b93c3a947 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/stm32f2xx_it.c @@ -0,0 +1,196 @@ +/** + ****************************************************************************** + * @file PWR/PVD/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_PVD + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles the PVD Output interrupt request. + * @param None + * @retval None + */ +void PVD_IRQHandler(void) +{ + if(EXTI_GetITStatus(EXTI_Line16) != RESET) + { + /* Toggle LED1 */ + STM_EVAL_LEDToggle(LED1); + + /* Clear the Key Button EXTI line pending bit */ + EXTI_ClearITPendingBit(EXTI_Line16); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/stm32f2xx_it.h new file mode 100644 index 000000000..08f6302be --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file PWR/PVD/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PVD_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/PVD/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/main.c new file mode 100644 index 000000000..1e91d785c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/main.c @@ -0,0 +1,254 @@ +/** + ****************************************************************************** + * @file PWR/STANDBY/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_STANDBY + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Uncomment the corresponding line to select the RTC Clock source */ +#define RTC_CLOCK_SOURCE_LSE /* LSE used as RTC source clock */ +/* #define RTC_CLOCK_SOURCE_LSI */ /* LSI used as RTC source clock. The RTC Clock + may varies due to LSI frequency dispersion. */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +RTC_InitTypeDef RTC_InitStructure; +RTC_TimeTypeDef RTC_TimeStructure; +__IO uint32_t AsynchPrediv = 0, SynchPrediv = 0; + +/* Private function prototypes -----------------------------------------------*/ +void RTC_Config(void); +void SysTick_Configuration(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs and Key Button mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + + /* RTC configuration */ + RTC_Config(); + + /* Turn on LED1 */ + STM_EVAL_LEDOn(LED1); + + /* Enable WKUP pin */ + PWR_WakeUpPinCmd(ENABLE); + + /* Configure the SysTick to generate an interrupt each 250 ms */ + SysTick_Configuration(); + + while (1) + { + } +} + +/** + * @brief Configures the RTC. + * @param None + * @retval None + */ +void RTC_Config(void) +{ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to BKP Domain */ + PWR_BackupAccessCmd(ENABLE); + + /* Clear Wakeup flag */ + PWR_ClearFlag(PWR_FLAG_WU); + + /* Check if the StandBy flag is set */ + if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET) + { + /* Clear StandBy flag */ + PWR_ClearFlag(PWR_FLAG_SB); + + /* Wait for RTC APB registers synchronisation (needed after start-up from Reset)*/ + RTC_WaitForSynchro(); + /* No need to configure the RTC as the RTC config(clock source, enable, + prescaler,...) are kept after wake-up from STANDBY */ + } + else + { + /* RTC Configuration ******************************************************/ + /* Reset Backup Domain */ + RCC_BackupResetCmd(ENABLE); + RCC_BackupResetCmd(DISABLE); + +#if defined (RTC_CLOCK_SOURCE_LSI) /* LSI used as RTC source clock*/ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */ + /* Enable the LSE OSC */ + RCC_LSEConfig(RCC_LSE_ON); + + /* Wait till LSE is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#else + #error Please select the RTC Clock source inside the main.c file +#endif /* RTC_CLOCK_SOURCE_LSI */ + + /* Enable the RTC Clock */ + RCC_RTCCLKCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation (needed after start-up from Reset)*/ + RTC_WaitForSynchro(); + + /* Set the RTC time base to 1s */ + RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; + RTC_InitStructure.RTC_AsynchPrediv = 0x7F; + RTC_InitStructure.RTC_SynchPrediv = 0x00FF; + + if (RTC_Init(&RTC_InitStructure) == ERROR) + { + /* Turn on LED2 */ + STM_EVAL_LEDOn(LED2); + + /* User can add here some code to deal with this error */ + while(1); + } + + /* Set the time to 01h 00mn 00s AM */ + RTC_TimeStructure.RTC_H12 = RTC_H12_AM; + RTC_TimeStructure.RTC_Hours = 0x01; + RTC_TimeStructure.RTC_Minutes = 0x00; + RTC_TimeStructure.RTC_Seconds = 0x00; + + if(RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure) == ERROR) + { + /* Turn on LED2 */ + STM_EVAL_LEDOn(LED2); + + /* User can add here some code to deal with this error */ + while(1); + } + } + + /* Clear RTC Alarm Flag */ + RTC_ClearFlag(RTC_FLAG_ALRAF); +} + +/** + * @brief Configures the SysTick to generate an interrupt each 250 ms. + * @param None + * @retval None + */ +void SysTick_Configuration(void) +{ + /* SysTick interrupt each 250 ms */ + if (SysTick_Config((SystemCoreClock/8) / 4)) + { + /* Capture error */ + while (1); + } + + /* Select AHB clock(HCLK) divided by 8 as SysTick clock source */ + SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); + + /* Set SysTick Preemption Priority to 1 */ + NVIC_SetPriority(SysTick_IRQn, 0x04); +} + + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/readme.txt new file mode 100644 index 000000000..59a4e6a62 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/readme.txt @@ -0,0 +1,102 @@ +/** + @page PWR_STANDBY PWR_STANDBY + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file PWR/STANDBY/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the PWR STANDBY example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to enters the system to STANDBY mode and wake-up from this +mode using: external RESET, RTC Alarm A or WKUP pin. + +In the associated software, the system clock is set to 120 MHz, an EXTI line +is configured to generate an interrupt on falling edge and the SysTick is programmed +to generate an interrupt each 250 ms. In the SysTick interrupt handler, the LED1 is +toggled, this is used to indicate whether the MCU is in STANDBY or RUN mode. + +When a falling edge is detected on the EXTI line an interrupt is generated. In the +EXTI handler routine the RTC is configured to generate an Alarm event in 5 second +then the system enters STANDBY mode causing the LED1 to stop toggling. +A rising edge on WKUP pin or an external RESET will wake-up the system from +STANDBY. If within 5 second neither rising edge on WKUP pin nor external RESET +are generated, the RTC Alarm A will wake-up the system. + +After wake-up from STANDBY mode, program execution restarts in the same way as after +a RESET, the RTC configuration (clock source, prescaler,...) is kept and LED1 restarts +toggling. As result there is no need to configure the RTC. + +two leds LED1 and LED2 are used to monitor the system state as following: + - LED2 ON: RTC configuration failed (system will go to an infinite loop) + - LED1 toggling: system in RUN mode + - LED1 off : system in STANDBY mode + +These Steps are repeated in an infinite loop. + +@note To measure the current consumption in STANDBY mode, please refer to + @subpage PWR_CurrentConsumption example. + +@note This example can not be used in DEBUG mode, this is due to the fact + that the Cortex�-M3 core is no longer clocked during low power mode + so debugging features are disbaled + + +@par Directory contents + + - PWR/STANDBY/system_stm32f2xx.c STM32F2xx system clock configuration file + - PWR/STANDBY/stm32f2xx_conf.h Library Configuration file + - PWR/STANDBY/stm32f2xx_it.c Interrupt handlers + - PWR/STANDBY/stm32f2xx_it.h Header for stm32f2xx_it.c + - PWR/STANDBY/main.c Main program + + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1 and LED2 connected to PG.06 and PG.08 pins + - Use the Key push-button connected to pin PG15 (EXTI Line15) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/stm32f2xx_conf.h new file mode 100644 index 000000000..0ddfe78cb --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file PWR/STANDBY/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/stm32f2xx_it.c new file mode 100644 index 000000000..d372836a6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/stm32f2xx_it.c @@ -0,0 +1,222 @@ +/** + ****************************************************************************** + * @file PWR/STANDBY/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_STANDBY + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +RTC_AlarmTypeDef RTC_AlarmStructure; +extern RTC_TimeTypeDef RTC_TimeStructure; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + /* Toggle LED1 */ + STM_EVAL_LEDToggle(LED1); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles External lines 9 to 5 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + + /* Clear the SEL Button EXTI line pending bit */ + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + + /* Disable the Alarm A */ + RTC_AlarmCmd(RTC_Alarm_A, DISABLE); + + RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); + + /* Set the alarm to current time + 5s */ + RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_TimeStructure.RTC_H12; + RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = RTC_TimeStructure.RTC_Hours; + RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = RTC_TimeStructure.RTC_Minutes; + RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = (RTC_TimeStructure.RTC_Seconds + 0x5) % 60; + RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31; + RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; + RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay | RTC_AlarmMask_Hours | RTC_AlarmMask_Minutes; + RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure); + + /* Enable RTC Alarm A Interrupt: this Interrupt will wake-up the system from + STANDBY mode (RTC Alarm IT not enabled in NVIC) */ + RTC_ITConfig(RTC_IT_ALRA, ENABLE); + + /* Enable the Alarm A */ + RTC_AlarmCmd(RTC_Alarm_A, ENABLE); + + /* Clear RTC Alarm Flag */ + RTC_ClearFlag(RTC_FLAG_ALRAF); + + /* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */ + PWR_EnterSTANDBYMode(); + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/stm32f2xx_it.h new file mode 100644 index 000000000..c19395a1d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file PWR/STANDBY/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void EXTI15_10_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STANDBY/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/main.c new file mode 100644 index 000000000..344616905 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/main.c @@ -0,0 +1,289 @@ +/** + ****************************************************************************** + * @file PWR/STOP/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_STOP + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Uncomment the corresponding line to select the RTC Clock source */ +#define RTC_CLOCK_SOURCE_LSE /* LSE used as RTC source clock */ +/* #define RTC_CLOCK_SOURCE_LSI */ /* LSI used as RTC source clock. The RTC Clock + may varies due to LSI frequency dispersion. */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint32_t TimingDelay; + +/* Private function prototypes -----------------------------------------------*/ +void RTC_Config(void); +void SysTick_Configuration(void); +void Delay(__IO uint32_t nTime); +void SYSCLKConfig_STOP(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Configure the SysTick to generate an interrupt each 250 ms */ + SysTick_Configuration(); + + /* Initialize LEDs and Key Button mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED4); + + /* Key button (EXTI_Line15) will be used to wakeup ths system from STOP mode */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + + /* RTC configuration */ + RTC_Config(); + + while (1) + { + /* Insert 5 second delay */ + Delay(20); + + /* Turn OFF LED2 */ + STM_EVAL_LEDOff(LED2); + + /* Enable Wakeup Counter */ + RTC_WakeUpCmd(ENABLE); + + /* Enter Stop Mode */ + PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); + + /* Disable Wakeup Counter */ + RTC_WakeUpCmd(DISABLE); + + /* Configures system clock after wake-up from STOP: enable HSE, PLL and select + PLL as system clock source (HSE and PLL are disabled in STOP mode) */ + SYSCLKConfig_STOP(); + } +} + +/** + * @brief Configures the RTC clock source. + * @param None + * @retval None + */ +void RTC_Config(void) +{ + EXTI_InitTypeDef EXTI_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + __IO uint32_t AsynchPrediv = 0, SynchPrediv = 0; + + /* Enable the PWR clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + +#if defined (RTC_CLOCK_SOURCE_LSI) /* LSI used as RTC source clock*/ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */ + /* Enable the LSE OSC */ + RCC_LSEConfig(RCC_LSE_ON); + + /* Wait till LSE is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#else + #error Please select the RTC Clock source inside the main.c file +#endif /* RTC_CLOCK_SOURCE_LSI */ + + /* Enable the RTC Clock */ + RCC_RTCCLKCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + + /* RTC Wakeup Interrupt Generation: Clock Source: RTCCLK_Div16, Wakeup Time Base: ~4s + + Wakeup Time Base = (16 / (LSE or LSI)) * WakeUpCounter + */ + RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); + RTC_SetWakeUpCounter(0x1FFF); + + /* Enable the Wakeup Interrupt */ + RTC_ITConfig(RTC_IT_WUT, ENABLE); + + /* Connect EXTI_Line22 to the RTC Wakeup event */ + EXTI_ClearITPendingBit(EXTI_Line22); + EXTI_InitStructure.EXTI_Line = EXTI_Line22; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Enable the RTC Wakeup Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + +} + +/** + * @brief Configures system clock after wake-up from STOP: enable HSE, PLL + * and select PLL as system clock source. + * @param None + * @retval None + */ +void SYSCLKConfig_STOP(void) +{ + /* After wake-up from STOP reconfigure the system clock */ + /* Enable HSE */ + RCC_HSEConfig(RCC_HSE_ON); + + /* Wait till HSE is ready */ + while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET) + {} + + /* Enable PLL */ + RCC_PLLCmd(ENABLE); + + /* Wait till PLL is ready */ + while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) + {} + + /* Select PLL as system clock source */ + RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); + + /* Wait till PLL is used as system clock source */ + while (RCC_GetSYSCLKSource() != 0x08) + {} +} + +/** + * @brief Configures the SysTick to generate an interrupt each 250 millisecond. + * @param None + * @retval None + */ +void SysTick_Configuration(void) +{ + /* SysTick interrupt each 250 ms */ + if (SysTick_Config((SystemCoreClock/8) / 4)) + { + /* Capture error */ + while (1); + } + + /* Select AHB clock(HCLK) divided by 8 as SysTick clock source */ + SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); + + /* Set SysTick Preemption Priority to 1 */ + NVIC_SetPriority(SysTick_IRQn, 0x04); +} + +/** + * @brief Inserts a delay time. + * @param nTime: specifies the delay time length, with a base of 250 milliseconds. + * @retval None + */ +void Delay(__IO uint32_t nTime) +{ + TimingDelay = nTime; + + while(TimingDelay != 0); + +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/readme.txt new file mode 100644 index 000000000..19e5d2a3d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/readme.txt @@ -0,0 +1,101 @@ +/** + @page PWR_STOP PWR_STOP + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file PWR/STOP/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the PWR STOP example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to enters the system to STOP mode and wake-up from this +mode using RTC Wakeup Timer Event connected to EXTI Line 22. + +In the associated software + - the system clock is set to 120 MHz + - the EXTI_Line15 is configured to generate interrupt on falling edge + - the EXTI_Line22 connected internally to the RTC Wakeup event is configured + to generate an interrupt on rising edge each 4s + - the SysTick is programmed to generate an interrupt each 250 ms +In the SysTick interrupt handler, LED2 is toggled, this is used to indicate whether +the MCU is in STOP or RUN mode. + +The system enters STOP mode and will wait for the RTC Wakeup event to be +generated each 4s, or Key push button is pressed. + - If the RTC WakeUp event (EXTI_Line22) is the source of wakeup from STOP, LED1 is toggled. + - If the Key button (EXTI_Line15) is the source of wakeup from STOP, LED4 is toggled. + +This behavior is repeated in an infinite loop. + +LEDs are used to monitor the system state as following: + - LED2 toggling: system in RUN mode + - LED1 toggled: system woken up from STOP using RTC WakeUp Interrupt + - LED4 toggled: system woken up from STOP using EXTI_Line15 (KEY push button) + + @note To measure the current consumption in STOP mode, please refer to + @subpage PWR_CurrentConsumption example. + + @note This example can not be used in DEBUG mode, this is due to the fact + that the Cortex�-M3 core is no longer clocked during low power mode + so debugging features are disbaled + + + +@par Directory contents + + - PWR/STOP/system_stm32f2xx.c STM32F2xx system clock configuration file + - PWR/STOP/stm32f2xx_conf.h Library Configuration file + - PWR/STOP/stm32f2xx_it.c Interrupt handlers + - PWR/STOP/stm32f2xx_it.h Header for stm32f2xx_it.c + - PWR/STOP/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2 and LED4 connected respectively to PG.06, PG.08 and PC.07 pins + - Use the Key push-button connected to pin PG15 (EXTI_Line15) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/stm32f2xx_conf.h new file mode 100644 index 000000000..9ae5b4d0d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file PWR/STOP/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/stm32f2xx_it.c new file mode 100644 index 000000000..fa5cb23cb --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/stm32f2xx_it.c @@ -0,0 +1,215 @@ +/** + ****************************************************************************** + * @file PWR/STOP/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup PWR_STOP + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t TimingDelay = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + TimingDelay--; + /* Toggle LED2 */ + STM_EVAL_LEDToggle(LED2); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ +/** + * @brief This function handles RTC Auto wake-up interrupt request. + * @param None + * @retval None + */ +void RTC_WKUP_IRQHandler(void) +{ + if(RTC_GetITStatus(RTC_IT_WUT) != RESET) + { + /* Toggle LED1 */ + STM_EVAL_LEDToggle(LED1); + RTC_ClearITPendingBit(RTC_IT_WUT); + EXTI_ClearITPendingBit(EXTI_Line22); + } +} + +/** + * @brief This function handles External lines 15 to 10 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + /* Clear the Key Button EXTI line pending bit */ + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + + /* Toggle LED4 */ + STM_EVAL_LEDToggle(LED4); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx_md.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/stm32f2xx_it.h new file mode 100644 index 000000000..f84583680 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/stm32f2xx_it.h @@ -0,0 +1,54 @@ +/** + ****************************************************************************** + * @file PWR/STOP/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void EXTI9_5_IRQHandler(void); +void RTC_WKUP_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/PWR/STOP/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/main.c new file mode 100644 index 000000000..f6d1dbb49 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/main.c @@ -0,0 +1,170 @@ +/** + ****************************************************************************** + * @file RCC/RCC_Example/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RCC_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +void Delay (uint32_t nCount); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + RCC_ClocksTypeDef RCC_ClockFreq; + + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs mounted on STM322xG-EVAL board ***************************/ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Turn on LED1 and LED3 */ + STM_EVAL_LEDOn(LED1); + STM_EVAL_LEDOn(LED3); + + /* This function fills the RCC_ClockFreq structure with the current + frequencies of different on chip clocks (for debug purpose) **************/ + RCC_GetClocksFreq(&RCC_ClockFreq); + + /* Enable Clock Security System(CSS): this will generate an NMI exception + when HSE clock fails *****************************************************/ + RCC_ClockSecuritySystemCmd(ENABLE); + + /* Enable and configure RCC global IRQ channel, will be used to manage HSE ready + and PLL ready interrupts. + These interrupts are enabled in stm32f2xx_it.c file **********************/ + NVIC_InitStructure.NVIC_IRQChannel = RCC_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Output HSE clock on MCO1 pin(PA8) ****************************************/ + /* Enable the GPIOA peripheral */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + + /* Configure MCO1 pin(PA8) in alternate function */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* HSE clock selected to output on MCO1 pin(PA8)*/ + RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1); + + while (1) + { + /* Toggle LED2 and LED4 */ + STM_EVAL_LEDToggle(LED2); + STM_EVAL_LEDToggle(LED4); + + /* Insert a delay */ + Delay(0x7FFFF); + + /* Toggle LED1 and LED3 */ + STM_EVAL_LEDToggle(LED1); + STM_EVAL_LEDToggle(LED3); + + /* Insert a delay */ + Delay(0x7FFFF); + } +} + +/** + * @brief Inserts a delay time. + * @param nCount: specifies the delay time length. + * @retval None + */ +void Delay(__IO uint32_t nCount) +{ + /* Decrement nCount value */ + while (nCount != 0) + { + nCount--; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/readme.txt new file mode 100644 index 000000000..7f611c2bf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/readme.txt @@ -0,0 +1,87 @@ +/** + @page RCC_Example RCC example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file RCC/RCC_Example/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the RCC example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to use, for debug purpose, the RCC_GetClocksFreq function +to retrieve the current status and frequencies of different on chip clocks. +You can see the RCC_ClockFreq structure content, which hold the frequencies of +different on chip clocks, using your toolchain debugger. + +This example handles also the High Speed External clock (HSE) failure detection: +when the HSE clock disappears (broken or disconnected external Quartz); HSE, PLL +are disabled (but no change on PLL config), HSI selected as system clock source +and an interrupt (NMI) is generated. In the NMI ISR, the HSE, HSE ready interrupt +are enabled and once HSE clock recover, the HSERDY interrupt is generated and in +the RCC ISR routine the system clock is reconfigured to its previous state (before +HSE clock failure). You can monitor the HSE clock on MCO1 pin(PA8). + +Four LEDs are toggled with a timing defined by the Delay function. + +@note On the STM322xG-EVAL board, to genertate the HSE failure you can remove + the HSE quartz from the socket. + + +@par Directory contents + + - RCC/RCC_Example/system_stm32f2xx.c STM32F2xx system clock configuration file + - RCC/RCC_Example/stm32f2xx_conf.h Library Configuration file + - RCC/RCC_Example/stm32f2xx_it.c Interrupt handlers + - RCC/RCC_Example/stm32f2xx_it.h Interrupt handlers header file + - RCC/RCC_Example/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily + tailored to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/stm32f2xx_conf.h new file mode 100644 index 000000000..d0ba82f9a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file RCC/RCC_Example/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/stm32f2xx_it.c new file mode 100644 index 000000000..aa6aef667 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/stm32f2xx_it.c @@ -0,0 +1,228 @@ +/** + ****************************************************************************** + * @file RCC/RCC_Example/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RCC_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + /* This interrupt is generated when HSE clock fails */ + + if (RCC_GetITStatus(RCC_IT_CSS) != RESET) + { + /* At this stage: HSE, PLL are disabled (but no change on PLL config) and HSI + is selected as system clock source */ + + /* Enable HSE */ + RCC_HSEConfig(RCC_HSE_ON); + + /* Enable HSE Ready and PLL Ready interrupts */ + RCC_ITConfig(RCC_IT_HSERDY | RCC_IT_PLLRDY, ENABLE); + + /* Clear Clock Security System interrupt pending bit */ + RCC_ClearITPendingBit(RCC_IT_CSS); + + /* Once HSE clock recover, the HSERDY interrupt is generated and in the RCC ISR + routine the system clock will be reconfigured to its previous state (before + HSE clock failure) */ + } +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles RCC interrupt request. + * @param None + * @retval None + */ +void RCC_IRQHandler(void) +{ + if(RCC_GetITStatus(RCC_IT_HSERDY) != RESET) + { + /* Clear HSERDY interrupt pending bit */ + RCC_ClearITPendingBit(RCC_IT_HSERDY); + + /* Check if the HSE clock is still available */ + if (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET) + { + /* Enable PLL: once the PLL is ready the PLLRDY interrupt is generated */ + RCC_PLLCmd(ENABLE); + } + } + + if(RCC_GetITStatus(RCC_IT_PLLRDY) != RESET) + { + /* Clear PLLRDY interrupt pending bit */ + RCC_ClearITPendingBit(RCC_IT_PLLRDY); + + /* Check if the PLL is still locked */ + if (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) != RESET) + { + /* Select PLL as system clock source */ + RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); + } + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/stm32f2xx_it.h new file mode 100644 index 000000000..66c0b7a3e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/stm32f2xx_it.h @@ -0,0 +1,61 @@ +/** + ****************************************************************************** + * @file RCC/RCC_Example/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void RCC_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RCC/RCC_Example/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/main.c new file mode 100644 index 000000000..7c9eddebf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/main.c @@ -0,0 +1,268 @@ +/** + ****************************************************************************** + * @file RNG/RNG_MultiRNG/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_lcd.h" +#include + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RNG_MultiRNG + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ + +//#define PRINT_ON_USART +#define PRINT_ON_LCD + +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +void RNG_Config(void); +void Display_Init(void); +void Display(uint32_t rng, uint8_t line); + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + uint32_t random32bit = 0; + uint8_t Counter = 0; + + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Display init (LCD or/and USART)*/ + Display_Init(); + + /* Key Button configuration */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); + + /* RNG configuration */ + RNG_Config(); + + while (1) + { + /* Wait until Key button is pressed */ + while(STM_EVAL_PBGetState(BUTTON_KEY) != RESET) + { + } + /* Loop while Key button is maintained pressed */ + while(STM_EVAL_PBGetState(BUTTON_KEY) == RESET) + { + } + + for(Counter = 0; Counter < 8; Counter++) + { + /* Wait until one RNG number is ready */ + while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET) + { + } + + /* Get a 32bit Random number */ + random32bit = RNG_GetRandomNumber(); + + /* Display the Random number value on the LCD or/and USART */ + Display(random32bit, Counter+1); + } + } +} + +/** + * @brief RNG configuration + * @param None + * @retval None + */ +void RNG_Config(void) +{ + /* Enable RNG clock source */ + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE); + + /* RNG Peripheral enable */ + RNG_Cmd(ENABLE); +} + +/** + * @brief Display Init (LCD or/and USART) + * @param None + * @retval None + */ +void Display_Init(void) +{ +#ifdef PRINT_ON_USART + + USART_InitTypeDef USART_InitStructure; + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); + + printf("\n\r ========================================\n"); + printf("\n\r ==== Multiple RNG Generator Example ====\n"); + printf("\n\r ======================================== \n\n\r"); + printf("\n\r Press key button to generate 8 x 32bit random number\n"); +#endif + +#ifdef PRINT_ON_LCD +/* Initialize the LCD */ + STM322xG_LCD_Init(); + + /* Clear the LCD */ + LCD_Clear(White); + + /* Set the LCD Text size */ + LCD_SetFont(&Font8x12); + + /* Set the LCD Back Color and Text Color*/ + LCD_SetBackColor(Blue); + LCD_SetTextColor(White); + + LCD_DisplayStringLine(LINE(0x13), " To generate 8x32bit RNG, Press Key >>"); + + /* Set the LCD Text size */ + LCD_SetFont(&Font16x24); + + LCD_DisplayStringLine(LINE(0), "*** RNG Example ***"); + + /* Set the LCD Back Color and Text Color*/ + LCD_SetBackColor(White); + LCD_SetTextColor(Blue); + + LCD_DisplayStringLine(LINE(3)," Press KEY button "); + LCD_DisplayStringLine(LINE(5)," to START "); +#endif +} + +/** + * @brief Display the Random number value on LCD or/and USART + * @param rnumber: random number to display + * @param line: LCD line number + * @retval None + */ +void Display(uint32_t rnumber, uint8_t line) +{ +#ifdef PRINT_ON_LCD + uint8_t text[50]; +#endif + +#ifdef PRINT_ON_USART + printf("\r [ 0x%08x ]\n", rnumber); + if (line == 8) + { + printf("\n\r Press key button to generate 8 x 32bit random number\n"); + } +#endif + +#ifdef PRINT_ON_LCD + sprintf((char*)text," [ 0x%08X ] ", rnumber); + LCD_DisplayStringLine(LINE(line),text); +#endif +} + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + return ch; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/readme.txt new file mode 100644 index 000000000..a52184193 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/readme.txt @@ -0,0 +1,96 @@ +/** + @page RNG_MultiRNG Multiple Random Number Generator Example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file RNG/RNG_MultiRNG/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of Multiple Random Number Generator Example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the RNG peripheral to +generate Random 32bit numbers. + +For this example, an interactive human interface is developed to allow user to +display 8 (arbitrary value, which can be updated by user) random 32bit numbers +using the eval board LCD and/or USART (CN16) with PC HyperTerminal, using +PRINT_ON_LCD and PRINT_ON_USART defines in main.c + +After startup, user is asked to press key button. +The 8 Random 32bit numbers are displayed as soon as the key is pressed. + +The USARTx is configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + + +@par Directory contents + + - RNG/RNG_MultiRNG/system_stm32f2xx.c STM32F2xx system clock configuration file + - RNG/RNG_MultiRNG/stm32f2xx_conf.h Library Configuration file + - RNG/RNG_MultiRNG/stm32f2xx_it.h Interrupt handlers header file + - RNG/RNG_MultiRNG/stm32f2xx_it.c Interrupt handlers + - RNG/RNG_MultiRNG/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port if you want to display data on the HyperTerminal. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/stm32f2xx_conf.h new file mode 100644 index 000000000..46000243b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file RNG/RNG_MultiRNG/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/stm32f2xx_it.c new file mode 100644 index 000000000..811c2ece1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file RNG/RNG_MultiRNG/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RNG_MultiRNG + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/stm32f2xx_it.h new file mode 100644 index 000000000..4e0409742 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file RNG/RNG_MultiRNG/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RNG/RNG_MultiRNG/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/lcd_log_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/lcd_log_conf.h new file mode 100644 index 000000000..bd2f2a966 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/lcd_log_conf.h @@ -0,0 +1,114 @@ +/** + ****************************************************************************** + * @file RTC/BKP_Domain/lcd_log_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief lcd_log configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ + +#ifndef __LCD_LOG_CONF_H__ +#define __LCD_LOG_CONF_H__ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" +#include + +#ifdef USE_STM322xG_EVAL + #include "stm322xg_eval_lcd.h" +#endif + +/** @addtogroup LCD_LOG + * @{ + */ + +/** @defgroup LCD_LOG + * @brief This file is the + * @{ + */ + + +/** @defgroup LCD_LOG_CONF_Exported_Defines + * @{ + */ + +/* Define the LCD default text color */ +#define LCD_LOG_DEFAULT_COLOR White + +/* Comment the line below to disable the scroll back and forward features */ +#define LCD_SCROLL_ENABLED + +/* Define the display window settings */ +#define YWINDOW_MIN 3 +#define YWINDOW_SIZE 12 +#define XWINDOW_MAX 50 + +/* Define the cache depth */ +#define CACHE_SIZE 50 + +/** @defgroup LCD_LOG_CONF_Exported_TypesDefinitions + * @{ + */ + +/** + * @} + */ + + +/** @defgroup LCD_LOG_Exported_Macros + * @{ + */ + + +/** + * @} + */ + +/** @defgroup LCD_LOG_CONF_Exported_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup LCD_LOG_CONF_Exported_FunctionsPrototype + * @{ + */ + +/** + * @} + */ + + +#endif /* __LCD_LOG_H__ */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/main.c new file mode 100644 index 000000000..9e4c794ae --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/main.c @@ -0,0 +1,722 @@ +/** + ****************************************************************************** + * @file RTC/BKP_Domain/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup BKP_Domain + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Uncomment the corresponding line to select the RTC Clock source */ +#define RTC_CLOCK_SOURCE_LSE /* LSE used as RTC source clock */ +/* #define RTC_CLOCK_SOURCE_LSI */ /* LSI used as RTC source clock. The RTC Clock + may varies due to LSI frequency dispersion. */ +#define RTC_BKP_DR_NUMBER 0x14 +#define FIRST_DATA 0x32F2 + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +RTC_InitTypeDef RTC_InitStructure; +RTC_TimeTypeDef RTC_TimeStructure; +RTC_DateTypeDef RTC_DateStructure; +__IO uint32_t AsynchPrediv = 0, SynchPrediv = 0; +__IO uint32_t TimeDisplay = 0; +uint32_t errorindex = 0, i = 0; + +uint32_t BKPDataReg[RTC_BKP_DR_NUMBER] = + { + RTC_BKP_DR0, RTC_BKP_DR1, RTC_BKP_DR2, + RTC_BKP_DR3, RTC_BKP_DR4, RTC_BKP_DR5, + RTC_BKP_DR6, RTC_BKP_DR7, RTC_BKP_DR8, + RTC_BKP_DR9, RTC_BKP_DR10, RTC_BKP_DR11, + RTC_BKP_DR12, RTC_BKP_DR13, RTC_BKP_DR14, + RTC_BKP_DR15, RTC_BKP_DR16, RTC_BKP_DR17, + RTC_BKP_DR18, RTC_BKP_DR19 + }; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + NVIC_InitTypeDef NVIC_InitStructure; + EXTI_InitTypeDef EXTI_InitStructure; + + /* Configure the external interrupt "WAKEUP", "KEY" and "TAMPER" buttons */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); + STM_EVAL_PBInit(BUTTON_TAMPER , BUTTON_MODE_GPIO); + STM_EVAL_PBInit(BUTTON_WAKEUP , BUTTON_MODE_GPIO); + + /* Initialize the LCD */ + STM322xG_LCD_Init(); + + /* Configure the LCD Log Module */ + LCD_LOG_Init(); + LCD_LOG_SetHeader("RTC Backup Domain Example"); + LCD_LOG_SetFooter (" Copyright (c) STMicroelectronics" ); + + /* Display the default RCC BDCR and RTC TAFCR Registers */ + LCD_UsrLog ("Entry Point \n"); + LCD_UsrLog ("RCC BDCR = 0x%x\n", RCC->BDCR); + LCD_UsrLog ("RTC TAFCR = 0x%x\n", RTC->TAFCR); + + /* Enable the PWR APB1 Clock Interface */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to BKP Domain */ + PWR_BackupAccessCmd(ENABLE); + + /* Configure one bit for preemption priority */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); + + /* Enable the RTC Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* EXTI configuration *******************************************************/ + EXTI_ClearITPendingBit(EXTI_Line22); + EXTI_InitStructure.EXTI_Line = EXTI_Line22; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + if(RTC_ReadBackupRegister(RTC_BKP_DR0) != FIRST_DATA) + { + LCD_UsrLog ("RTC Config PLZ Wait. \n"); + + /* RTC Configuration */ + RTC_Config(); + + /* Adjust Current Time */ + Time_Adjust(); + + /* Adjust Current Date */ + Date_Adjust(); + } + else + { + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + RTC_ClearITPendingBit(RTC_IT_WUT); + EXTI_ClearITPendingBit(EXTI_Line22); + +/* Backup SRAM ***************************************************************/ + /* Enable BKPSRAM Clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE); + + /* Check the written Data */ + for (i = 0x0; i < 0x1000; i += 4) + { + if ((*(__IO uint32_t *) (BKPSRAM_BASE + i)) != i) + { + errorindex++; + } + } + if(errorindex) + { + LCD_ErrLog ("BKP SRAM Number of errors = %d\n", errorindex); + } + else + { + LCD_UsrLog ("BKP SRAM Content OK \n"); + } +/* RTC Backup Data Registers **************************************************/ + /* Check if RTC Backup DRx registers data are correct */ + if (CheckBackupReg(FIRST_DATA) == 0x00) + { + /* OK, RTC Backup DRx registers data are correct */ + LCD_UsrLog ("OK, RTC Backup DRx registers data are correct. \n"); + } + else + { + /* Error, RTC Backup DRx registers data are not correct */ + LCD_ErrLog ("RTC Backup DRx registers data are not correct\n"); + } + } + + /* Infinite loop */ + Calendar_Show(); + + while (1) + { + } +} + +/** + * @brief Configure the RTC peripheral by selecting the clock source. + * @param None + * @retval None + */ +void RTC_Config(void) +{ + /* Enable the PWR clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + +#if defined (RTC_CLOCK_SOURCE_LSI) /* LSI used as RTC source clock*/ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */ + /* Enable the LSE OSC */ + RCC_LSEConfig(RCC_LSE_ON); + + /* Wait till LSE is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#else + #error Please select the RTC Clock source inside the main.c file +#endif /* RTC_CLOCK_SOURCE_LSI */ + + /* Enable the RTC Clock */ + RCC_RTCCLKCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + + /* Write to the first RTC Backup Data Register */ + RTC_WriteBackupRegister(RTC_BKP_DR0, FIRST_DATA); + + /* Display the new RCC BDCR and RTC TAFCR Registers */ + LCD_UsrLog ("RTC Reconfig \n"); + LCD_UsrLog ("RCC BDCR = 0x%x\n", RCC->BDCR); + LCD_UsrLog ("RTC TAFCR = 0x%x\n", RTC->TAFCR); + + /* Set the Time */ + RTC_TimeStructure.RTC_Hours = 0x08; + RTC_TimeStructure.RTC_Minutes = 0x00; + RTC_TimeStructure.RTC_Seconds = 0x00; + + /* Set the Date */ + RTC_DateStructure.RTC_Month = RTC_Month_March; + RTC_DateStructure.RTC_Date = 0x18; + RTC_DateStructure.RTC_Year = 0x11; + RTC_DateStructure.RTC_WeekDay = RTC_Weekday_Friday; + + /* Calendar Configuration */ + RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv; + RTC_InitStructure.RTC_SynchPrediv = SynchPrediv; + RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; + RTC_Init(&RTC_InitStructure); + + /* Set Current Time and Date */ + RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure); + RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure); + + /* Configure the RTC Wakeup Clock source and Counter (Wakeup event each 1 second) */ + RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); + RTC_SetWakeUpCounter(0x7FF); + + /* Enable the Wakeup Interrupt */ + RTC_ITConfig(RTC_IT_WUT, ENABLE); + + /* Enable Wakeup Counter */ + RTC_WakeUpCmd(ENABLE); + +/* Backup SRAM ***************************************************************/ + /* Enable BKPRAM Clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE); + + /* Write to Backup SRAM with 32-Bit Data */ + for (i = 0x0; i < 0x1000; i += 4) + { + *(__IO uint32_t *) (BKPSRAM_BASE + i) = i; + } + /* Check the written Data */ + for (i = 0x0; i < 0x1000; i += 4) + { + if ((*(__IO uint32_t *) (BKPSRAM_BASE + i)) != i) + { + errorindex++; + } + } + + if(errorindex) + { + LCD_ErrLog ("BKP SRAM Number of errors = %d\n", errorindex); + } + else + { + LCD_UsrLog ("BKP SRAM write OK \n"); + } + + /* Enable the Backup SRAM low power Regulator to retain it's content in VBAT mode */ + PWR_BackupRegulatorCmd(ENABLE); + + /* Wait until the Backup SRAM low power Regulator is ready */ + while(PWR_GetFlagStatus(PWR_FLAG_BRR) == RESET) + { + } + +/* RTC Backup Data Registers **************************************************/ + /* Write to RTC Backup Data Registers */ + WriteToBackupReg(FIRST_DATA); +} + +/** + * @brief Reads digit entered by user, using menu navigation keys. + * @param None + * @retval Digit value + */ +uint8_t ReadDigit(uint16_t LineBegin, uint16_t ColBegin, uint8_t CountBegin, uint8_t ValueMax, uint8_t ValueMin) +{ + uint8_t tmpValue = 0; + Button_TypeDef keystate = (Button_TypeDef)10; + + /* Set the Back Color */ + LCD_SetBackColor(LCD_COLOR_RED); + + /* Set the Text Color */ + LCD_SetTextColor(LCD_COLOR_WHITE); + + /* Initialize tmpValue */ + tmpValue = CountBegin; + + /* Display */ + LCD_DisplayChar(LineBegin, ColBegin, (tmpValue + 0x30)); + + /* Endless loop */ + while(1) + { + /* Get the Joytick State */ + keystate = ReadKey(); + + /* If "BUTTON_TAMPER" push button is pressed */ + if(keystate == BUTTON_TAMPER) + { + /* Increase the value of the digit */ + if(tmpValue == ValueMax) + { + tmpValue = (ValueMin - 1); + } + /* Display new value */ + LCD_DisplayChar(LineBegin, ColBegin,((++tmpValue) + 0x30)); + } + /* If "BUTTON_WAKEUP" push button is pressed */ + if(keystate == BUTTON_WAKEUP) + { + /* Decrease the value of the digit */ + if(tmpValue == ValueMin) + { + tmpValue = (ValueMax + 1); + } + /* Display new value */ + LCD_DisplayChar(LineBegin, ColBegin,((--tmpValue) + 0x30)); + } + /* If "BUTTON_KEY" push button is pressed */ + if(keystate == BUTTON_KEY) + { + /* Set the Back Color */ + LCD_SetBackColor(LCD_COLOR_WHITE); + /* Set the Text Color */ + LCD_SetTextColor(LCD_COLOR_RED); + /* Display new value */ + LCD_DisplayChar(LineBegin, ColBegin, (tmpValue + 0x30)); + /* Return the digit value and exit */ + return tmpValue; + } + } +} + +/** + * @brief Returns the time entered by user, using menu navigation keys. + * @param None + * @retval Current time RTC counter value + */ +void Time_Regulate(void) +{ + uint8_t Tmp_HH = 0, Tmp_MM = 0, Tmp_SS = 0; + + LCD_DisplayStringLine(LCD_LINE_12, "Set time: hh:mm:ss"); + + /* Read time hours */ + Tmp_HH = ReadDigit(LCD_LINE_13, 244, (RTC_TimeStructure.RTC_Hours / 10), 0x2, 0x0); + + if(Tmp_HH == 2) + { + if((RTC_TimeStructure.RTC_Hours % 10) > 3) + { + RTC_TimeStructure.RTC_Hours = 0; + } + Tmp_HH = Tmp_HH * 10 + ReadDigit(LCD_LINE_13, 228, (RTC_TimeStructure.RTC_Hours % 10), 0x3, 0x0); + } + else + { + Tmp_HH = Tmp_HH * 10 + ReadDigit(LCD_LINE_13, 228, (RTC_TimeStructure.RTC_Hours % 10), 0x9, 0x0); + } + /* Read time minutes */ + Tmp_MM = ReadDigit(LCD_LINE_13, 196, (RTC_TimeStructure.RTC_Minutes / 10), 5, 0x0); + Tmp_MM = Tmp_MM * 10 + ReadDigit(LCD_LINE_13, 182, (RTC_TimeStructure.RTC_Minutes % 10), 0x9, 0x0); + + /* Read time seconds */ + Tmp_SS = ReadDigit(LCD_LINE_13, 150, (RTC_TimeStructure.RTC_Seconds / 10), 5, 0x0); + Tmp_SS = Tmp_SS * 10 + ReadDigit(LCD_LINE_13, 134, (RTC_TimeStructure.RTC_Seconds % 10), 0x9, 0x0); + + RTC_TimeStructure.RTC_Hours = Tmp_HH; + RTC_TimeStructure.RTC_Minutes = Tmp_MM; + RTC_TimeStructure.RTC_Seconds = Tmp_SS; + RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure); + + /* Set the Back Color */ + LCD_SetBackColor(LCD_COLOR_BLACK); + + /* Set the Text Color */ + LCD_SetTextColor(LCD_COLOR_WHITE); + + /* Clear Line12 */ + LCD_ClearLine(LCD_LINE_12); +} + +/** + * @brief Returns the time entered by user, using demo board keys. + * @param None + * @retval None + */ +void Time_Adjust(void) +{ + /* Display the current time */ + Time_Display(); + + /* Change the current time */ + Time_Regulate(); +} + +/** + * @brief Displays the current time. + * @param None + * @retval None + */ +void Time_Display(void) +{ + /* Clear Line13 */ + LCD_ClearLine(LCD_LINE_13); + + /* Display time separators ":" on Line4 */ + LCD_DisplayChar(LCD_LINE_13, 212, ':'); + LCD_DisplayChar(LCD_LINE_13, 166, ':'); + + /* Get the current Time */ + RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); + + /* Display time hours */ + LCD_DisplayChar(LCD_LINE_13, 244,((RTC_TimeStructure.RTC_Hours / 10) + 0x30)); + LCD_DisplayChar(LCD_LINE_13, 228,((RTC_TimeStructure.RTC_Hours % 10) + 0x30)); + + /* Display time minutes */ + LCD_DisplayChar(LCD_LINE_13, 196,((RTC_TimeStructure.RTC_Minutes /10) + 0x30)); + LCD_DisplayChar(LCD_LINE_13, 182,((RTC_TimeStructure.RTC_Minutes % 10) + 0x30)); + + /* Display time seconds */ + LCD_DisplayChar(LCD_LINE_13, 150,((RTC_TimeStructure.RTC_Seconds / 10) + 0x30)); + LCD_DisplayChar(LCD_LINE_13, 134,((RTC_TimeStructure.RTC_Seconds % 10) + 0x30)); +} + +/** + * @brief Returns the time entered by user, using menu navigation keys. + * @param None + * @retval Current date value + */ +void Date_Regulate(void) +{ + uint8_t weekday = 0, date = 0, month = 0, year = 0; + + LCD_DisplayStringLine(LCD_LINE_15, "Set date: Weekday / Date / Month / Year"); + + /* Read Date Weekday */ + weekday = ReadDigit(LCD_LINE_16, 276, (RTC_DateStructure.RTC_WeekDay / 10), 0x7, 0x1); + + /* Read Date Day */ + date = ReadDigit(LCD_LINE_16, 244, (RTC_DateStructure.RTC_Date / 10), 3, 0x0); + + if(date == 3) + { + if((RTC_DateStructure.RTC_Date % 10) > 1) + { + RTC_DateStructure.RTC_Date = 0; + } + date = date * 10 + ReadDigit(LCD_LINE_16, 228, (RTC_DateStructure.RTC_Date % 10), 0x1, 0x0); + } + else + { + date = date * 10 + ReadDigit(LCD_LINE_16, 228, (RTC_DateStructure.RTC_Date % 10), 0x9, 0x0); + } + + /* Read Date Month */ + month = ReadDigit(LCD_LINE_16, 196, (RTC_DateStructure.RTC_Month / 10), 1, 0x0); + + if(month == 1) + { + if((RTC_DateStructure.RTC_Month % 10) > 2) + { + RTC_DateStructure.RTC_Month = 0; + } + month = month * 10 + ReadDigit(LCD_LINE_16, 182, (RTC_DateStructure.RTC_Month % 10), 0x2, 0x0); + } + else + { + month = month * 10 + ReadDigit(LCD_LINE_16, 182, (RTC_DateStructure.RTC_Month % 10), 0x9, 0x0); + } + + /* Read Date Year */ + LCD_DisplayChar(LCD_LINE_16, 150, '2'); + LCD_DisplayChar(LCD_LINE_16, 134, '0'); + year = ReadDigit(LCD_LINE_16, 118, (RTC_DateStructure.RTC_Year / 10), 0x9, 0x0); + year = year * 10 + ReadDigit(LCD_LINE_16, 102, (RTC_DateStructure.RTC_Year % 10), 0x9, 0x0); + + RTC_DateStructure.RTC_WeekDay = weekday; + RTC_DateStructure.RTC_Date = date; + RTC_DateStructure.RTC_Month = month; + RTC_DateStructure.RTC_Year = year; + RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure); + + /* Set the Back Color */ + LCD_SetBackColor(LCD_COLOR_BLACK); + + /* Set the Text Color */ + LCD_SetTextColor(LCD_COLOR_WHITE); + + /* Clear Line15 */ + LCD_ClearLine(LCD_LINE_15); +} + +/** + * @brief Returns the date entered by user, using demoboard keys. + * @param None + * @retval None + */ +void Date_Adjust(void) +{ + /* Display the current Date */ + Date_Display(); + + /* Change the current Date */ + Date_Regulate(); +} + +/** + * @brief Displays the current date. + * @param None + * @retval None + */ +void Date_Display(void) +{ + /* Clear Line16 */ + LCD_ClearLine(LCD_LINE_16); + + /* Display time separators "/" on Line14 */ + LCD_DisplayChar(LCD_LINE_16, 260, '/'); + LCD_DisplayChar(LCD_LINE_16, 212, '/'); + LCD_DisplayChar(LCD_LINE_16, 166, '/'); + + /* Get the current Date */ + RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); + + /* Display Date WeekDay */ + LCD_DisplayChar(LCD_LINE_16, 276,((RTC_DateStructure.RTC_WeekDay) + 0x30)); + + /* Display Date Day */ + LCD_DisplayChar(LCD_LINE_16, 244,((RTC_DateStructure.RTC_Date /10) + 0x30)); + LCD_DisplayChar(LCD_LINE_16, 228,((RTC_DateStructure.RTC_Date % 10) + 0x30)); + + /* Display Date Month */ + LCD_DisplayChar(LCD_LINE_16, 196,((RTC_DateStructure.RTC_Month / 10) + 0x30)); + LCD_DisplayChar(LCD_LINE_16, 182,((RTC_DateStructure.RTC_Month % 10) + 0x30)); + + /* Display Date Year */ + LCD_DisplayChar(LCD_LINE_16, 150, '2'); + LCD_DisplayChar(LCD_LINE_16, 134, '0'); + LCD_DisplayChar(LCD_LINE_16, 118,((RTC_DateStructure.RTC_Year / 10) + 0x30)); + LCD_DisplayChar(LCD_LINE_16, 102,((RTC_DateStructure.RTC_Year % 10) + 0x30)); +} + +/** + * @brief Shows the current time and date on LCD. + * @param None + * @retval None + */ +void Calendar_Show(void) +{ + while(1) + { + /* If 1s has elapsed */ + if (TimeDisplay == 1) + { + /* Display current time */ + Time_Display(); + + /* Display current date */ + Date_Display(); + + TimeDisplay = 0; + } + } +} + +/** + * @brief Writes data to all Backup data registers. + * @param FirstBackupData: data to write to first backup data register. + * @retval None + */ +void WriteToBackupReg(uint16_t FirstBackupData) +{ + uint32_t index = 0; + + for (index = 0; index < RTC_BKP_DR_NUMBER; index++) + { + RTC_WriteBackupRegister(BKPDataReg[index], FirstBackupData + (index * 0x5A)); + } + +} + +/** + * @brief Checks if the Backup data registers values are correct or not. + * @param FirstBackupData: data to read from first backup data register + * @retval - 0: All Backup DRx registers data are correct + * - Value different from 0: Number of the first Backup register which + * value is not correct + */ +uint32_t CheckBackupReg(uint16_t FirstBackupData) +{ + uint32_t index = 0; + + for (index = 0; index < RTC_BKP_DR_NUMBER; index++) + { + if (RTC_ReadBackupRegister(BKPDataReg[index]) != (FirstBackupData + (index * 0x5A))) + { + return (index + 1); + } + } + + return 0; +} + +/** + * @brief Reads key from demoboard. + * @param None + * @retval Return KEY, TAMPER, WAKEUP. + */ +Button_TypeDef ReadKey(void) +{ + /* "BUTTON_TAMPER" key is pressed */ + if (!STM_EVAL_PBGetState(BUTTON_TAMPER)) + { + while (STM_EVAL_PBGetState(BUTTON_TAMPER) == Bit_RESET); + return BUTTON_TAMPER; + } + /* "BUTTON_KEY" key is pressed */ + if (!STM_EVAL_PBGetState(BUTTON_KEY)) + { + while (STM_EVAL_PBGetState(BUTTON_KEY) == Bit_RESET); + return BUTTON_KEY; + } + /* "BUTTON_WAKEUP" key is pressed */ + if (STM_EVAL_PBGetState(BUTTON_WAKEUP)) + { + while (STM_EVAL_PBGetState(BUTTON_WAKEUP) != Bit_RESET); + return BUTTON_WAKEUP; + } + /* No key is pressed */ + else + { + return (Button_TypeDef)10; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/main.h new file mode 100644 index 000000000..3c46ee6f3 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/main.h @@ -0,0 +1,56 @@ +/** + ****************************************************************************** + * @file RTC/BKP_Domain/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "lcd_log.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void RTC_Config(void); +uint8_t ReadDigit(uint16_t LineBegin, uint16_t ColBegin, uint8_t CountBegin, uint8_t ValueMax, uint8_t ValueMin); +void Time_Regulate(void); +void Time_Adjust(void); +void Time_Display(void); +void Date_Regulate(void); +void Date_Adjust(void); +void Date_Display(void); +void Calendar_Show(void); +void WriteToBackupReg(uint16_t FirstBackupData); +uint32_t CheckBackupReg(uint16_t FirstBackupData); +Button_TypeDef ReadKey(void); + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/readme.txt new file mode 100644 index 000000000..64166c133 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/readme.txt @@ -0,0 +1,142 @@ +/** + @page BKP_Domain RTC Backup domain example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file RTC/BKP_Domain/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the RTC Backup domain example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example demonstrates and explains how to use the peripherals available on +Backup Domain. These peripherals are: the RCC BDCR register containing the LSE Osc +configuration and the RTC Clock enable/disable bits. It embeds also the RTC +peripheral with its associated Backup Data registers. And finally the Backup SRAM (4KB) +with its low power regulator allowing to preserve its contents when the +product is powered by VBAT pin. + +As an application example, it demonstrates how to setup the RTC hardware calendar, +RTC Backup Data registers read/write and BKPSRAM read/write operations. + +One from the following clock can be used as RTC clock source (uncomment the +corresponding define in main.c): + - LSE oscillator clock usually delivered by a 32.768 kHz quartz. + - LSI oscillator clock + +The Backup (BKP) domain, still powered by VBAT when VDD is switched off, so its +content is not lost if a battery is connected to the VBAT pin. +A key value is written in backup data register 0 to indicate if the Backup Domain +is already configured. + +The program behaves as follows: + +1. After startup the program checks the backup data register 0 value: + - BKP_DR0 value not correct: (RTC_BKP_DR0 value is not correct or has not yet + been programmed when the program is executed for the first time) the RTC is + configured and the user is asked to set the time and date (entered on + TFT-LCD) and the RTC Backup Data registers and BKPSRAM are written. + + - BKP_DR0 value correct: this means that the RTC is configured and the time + and date are displayed on LCD. The content of RTC Backup Data registers + and BKPSRAM is checked and the result is displayed on color LCD. + +2. When an External Reset occurs the BKP domain is not reset. + +3. When power on reset occurs: + - If a battery is connected to the VBAT pin: the BKP domain is not reset and + the RTC configuration is not lost. + + - If no battery is connected to the VBAT pin: the BKP domain is reset and the + RTC configuration is lost. + +4. When an RTC Wakeup event occurs the RTC Wakeup interrupt is generated and the + current Time/Date is refreshed on LCD. + +The example uses TFT-LCD and push-button to configure the RTC clock and display +the current calendar: + + - When the Backup domain is not yet configured: + - The RCC BDCR Register value is displayed on LCD before and after the Backup + domain configuration. + - All RTC Backup Data Registers are written and checked. + - All BKP SRAM content is written and checked. + - User asked for RTC Calendar Configuration using the Tamper/Wakeup/Key buttons: + - Use WAKEUP button to decrement the current value. + - Use TAMPER button to increment the current value. + - Use KEY button to validate the current value. + - Once configured, the RTC Calendar is displayed on the LCD each second using + the RTC Wakeup Interrupt. + + - When the Backup domain is already configured: + - No need to reconfigure the RTC Clock and Calendar. + - All RTC Backup Data Registers are checked. + - All BKP SRAM content is checked. If the Low power regulator is enabled, the + BKPSRAM content is not lost. + - The RTC Calendar is displayed on the LCD each second using + the RTC Wakeup Interrupt. + + +@par Directory contents + + - RTC/BKP_Domain/system_stm32f2xx.c STM32F2xx system clock configuration file + - RTC/BKP_Domain/stm32f2xx_conf.h Library Configuration file + - RTC/BKP_Domain/stm32f2xx_it.c Interrupt handlers + - RTC/BKP_Domain/stm32f2xx_it.h Header for stm32f2xx_it.c + - RTC/BKP_Domain/main.c Main program + - RTC/BKP_Domain/main.h Main header file + - RTC/BKP_Domain/lcd_log_conf.h lcd_log configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use the TAMPER push button connected to PC.13 pin (EXTI Line13). + - Use the KEY push button connected to PG.15 pin (EXTI Line15). + - Use the WAKEUP push button connected to PA.00 pin (EXTI Line0). + - All messages are displayed on the TFT-LCD. + - Make sure that jumper JP19 is in position 2-3 to connect the 3V battery to VBAT pin + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Add the file "lcd_log.c" (under Utilities\STM32_EVAL\Common) to the project source list + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/stm32f2xx_conf.h new file mode 100644 index 000000000..f894acbaf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file RTC/BKP_Domain/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/stm32f2xx_it.c new file mode 100644 index 000000000..3eb4954fe --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/stm32f2xx_it.c @@ -0,0 +1,196 @@ +/** + ****************************************************************************** + * @file RTC/BKP_Domain/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup BKP_Domain + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint32_t TimeDisplay; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles RTC Wakeup Timer Handler. + * @param None + * @retval None + */ +void RTC_WKUP_IRQHandler(void) +{ + if(RTC_GetITStatus(RTC_IT_WUT) != RESET) + { + TimeDisplay = 1; + RTC_ClearITPendingBit(RTC_IT_WUT); + EXTI_ClearITPendingBit(EXTI_Line22); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/stm32f2xx_it.h new file mode 100644 index 000000000..3f8ba56af --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/stm32f2xx_it.h @@ -0,0 +1,61 @@ +/** + ****************************************************************************** + * @file RTC/BKP_Domain/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void RTC_WKUP_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/BKP_Domain/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/main.c new file mode 100644 index 000000000..0b574363a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/main.c @@ -0,0 +1,441 @@ +/** + ****************************************************************************** + * @file RTC/HW_Calendar/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "main.h" +#include + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup HW_Calendar + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Uncomment the corresponding line to select the RTC Clock source */ +#define RTC_CLOCK_SOURCE_LSE /* LSE used as RTC source clock */ +/* #define RTC_CLOCK_SOURCE_LSI */ /* LSI used as RTC source clock. The RTC Clock + may varies due to LSI frequency dispersion. */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +USART_InitTypeDef USART_InitStructure; +RTC_TimeTypeDef RTC_TimeStructure; +RTC_InitTypeDef RTC_InitStructure; +RTC_AlarmTypeDef RTC_AlarmStructure; + +__IO uint32_t AsynchPrediv = 0, SynchPrediv = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + NVIC_InitTypeDef NVIC_InitStructure; + EXTI_InitTypeDef EXTI_InitStructure; + + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); + + /* Output a message on Hyperterminal using printf function */ + printf("\n\r *********************** RTC Hardware Calendar Example ***********************\n\r"); + + if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2) + { + /* RTC configuration */ + RTC_Config(); + + /* Configure the RTC data register and RTC prescaler */ + RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv; + RTC_InitStructure.RTC_SynchPrediv = SynchPrediv; + RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; + + /* Check on RTC init */ + if (RTC_Init(&RTC_InitStructure) == ERROR) + { + printf("\n\r /!\\***** RTC Prescaler Config failed ********/!\\ \n\r"); + } + + /* Configure the time register */ + RTC_TimeRegulate(); + } + else + { + /* Check if the Power On Reset flag is set */ + if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) + { + printf("\r\n Power On Reset occurred....\n\r"); + } + /* Check if the Pin Reset flag is set */ + else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET) + { + printf("\r\n External Reset occurred....\n\r"); + } + + printf("\n\r No need to configure RTC....\n\r"); + + /* Enable the PWR clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + + /* Clear the RTC Alarm Flag */ + RTC_ClearFlag(RTC_FLAG_ALRAF); + + /* Clear the EXTI Line 17 Pending bit (Connected internally to RTC Alarm) */ + EXTI_ClearITPendingBit(EXTI_Line17); + + /* Display the RTC Time and Alarm */ + RTC_TimeShow(); + RTC_AlarmShow(); + } + + /* Configure the external interrupt "WAKEUP", "KEY" and "TAMPER" buttons */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + STM_EVAL_PBInit(BUTTON_TAMPER , BUTTON_MODE_EXTI); + STM_EVAL_PBInit(BUTTON_WAKEUP , BUTTON_MODE_EXTI); + + /* Configure LEDx */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + + /* Turn LED1 ON */ + STM_EVAL_LEDOn(LED2); + + /* RTC Alarm A Interrupt Configuration */ + /* EXTI configuration *********************************************************/ + EXTI_ClearITPendingBit(EXTI_Line17); + EXTI_InitStructure.EXTI_Line = EXTI_Line17; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Enable the RTC Alarm Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = RTC_Alarm_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + while (1) + { + } +} + +/** + * @brief Configure the RTC peripheral by selecting the clock source. + * @param None + * @retval None + */ +void RTC_Config(void) +{ + /* Enable the PWR clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + +#if defined (RTC_CLOCK_SOURCE_LSI) /* LSI used as RTC source clock*/ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */ + /* Enable the LSE OSC */ + RCC_LSEConfig(RCC_LSE_ON); + + /* Wait till LSE is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#else + #error Please select the RTC Clock source inside the main.c file +#endif /* RTC_CLOCK_SOURCE_LSI */ + + /* Enable the RTC Clock */ + RCC_RTCCLKCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); +} + +/** + * @brief Returns the time entered by user, using Hyperterminal. + * @param None + * @retval None + */ +void RTC_TimeRegulate(void) +{ + uint32_t tmp_hh = 0xFF, tmp_mm = 0xFF, tmp_ss = 0xFF; + + printf("\n\r==============Time Settings=====================================\n\r"); + RTC_TimeStructure.RTC_H12 = RTC_H12_AM; + printf(" Please Set Hours:\n\r"); + while (tmp_hh == 0xFF) + { + tmp_hh = USART_Scanf(23); + RTC_TimeStructure.RTC_Hours = tmp_hh; + } + printf(" %0.2d\n\r", tmp_hh); + + printf(" Please Set Minutes:\n\r"); + while (tmp_mm == 0xFF) + { + tmp_mm = USART_Scanf(59); + RTC_TimeStructure.RTC_Minutes = tmp_mm; + } + printf(" %0.2d\n\r", tmp_mm); + + printf(" Please Set Seconds:\n\r"); + while (tmp_ss == 0xFF) + { + tmp_ss = USART_Scanf(59); + RTC_TimeStructure.RTC_Seconds = tmp_ss; + } + printf(" %0.2d\n\r", tmp_ss); + + /* Configure the RTC time register */ + if(RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure) == ERROR) + { + printf("\n\r>> !! RTC Set Time failed. !! <<\n\r"); + } + else + { + printf("\n\r>> !! RTC Set Time success. !! <<\n\r"); + RTC_TimeShow(); + /* Indicator for the RTC configuration */ + RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2); + } + + tmp_hh = 0xFF; + tmp_mm = 0xFF; + tmp_ss = 0xFF; + + /* Disable the Alarm A */ + RTC_AlarmCmd(RTC_Alarm_A, DISABLE); + + printf("\n\r==============Alarm A Settings=====================================\n\r"); + RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM; + printf(" Please Set Alarm Hours:\n\r"); + while (tmp_hh == 0xFF) + { + tmp_hh = USART_Scanf(23); + RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = tmp_hh; + } + printf(" %0.2d\n\r", tmp_hh); + + printf(" Please Set Alarm Minutes:\n\r"); + while (tmp_mm == 0xFF) + { + tmp_mm = USART_Scanf(59); + RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = tmp_mm; + } + printf(" %0.2d\n\r", tmp_mm); + + printf(" Please Set Alarm Seconds:\n\r"); + while (tmp_ss == 0xFF) + { + tmp_ss = USART_Scanf(59); + RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = tmp_ss; + } + printf(" %0.2d", tmp_ss); + + /* Set the Alarm A */ + RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31; + RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; + RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay; + + /* Configure the RTC Alarm A register */ + RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure); + printf("\n\r>> !! RTC Set Alarm success. !! <<\n\r"); + RTC_AlarmShow(); + + /* Enable the RTC Alarm A Interrupt */ + RTC_ITConfig(RTC_IT_ALRA, ENABLE); + + /* Enable the alarm A */ + RTC_AlarmCmd(RTC_Alarm_A, ENABLE); +} + +/** + * @brief Display the current time on the Hyperterminal. + * @param None + * @retval None + */ +void RTC_TimeShow(void) +{ + /* Get the current Time */ + RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); + printf("\n\r The current time is : %0.2d:%0.2d:%0.2d \n\r", RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds); +} + +/** + * @brief Display the current time on the Hyperterminal. + * @param None + * @retval None + */ +void RTC_AlarmShow(void) +{ + /* Get the current Alarm */ + RTC_GetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure); + printf("\n\r The current alarm is : %0.2d:%0.2d:%0.2d \n\r", RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours, RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes, RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds); +} + + +/** + * @brief Gets numeric values from the hyperterminal. + * @param None + * @retval None + */ +uint8_t USART_Scanf(uint32_t value) +{ + uint32_t index = 0; + uint32_t tmp[2] = {0, 0}; + + while (index < 2) + { + /* Loop until RXNE = 1 */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_RXNE) == RESET) + {} + tmp[index++] = (USART_ReceiveData(EVAL_COM1)); + if ((tmp[index - 1] < 0x30) || (tmp[index - 1] > 0x39)) + { + printf("\n\r Please enter valid number between 0 and 9 \n\r"); + index--; + } + } + /* Calculate the Corresponding value */ + index = (tmp[1] - 0x30) + ((tmp[0] - 0x30) * 10); + /* Checks */ + if (index > value) + { + printf("\n\r Please enter valid number between 0 and %d \n\r", value); + return 0xFF; + } + return index; +} + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + return ch; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/main.h new file mode 100644 index 000000000..a6a40949b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/main.h @@ -0,0 +1,56 @@ +/** + ****************************************************************************** + * @file RTC/HW_Calendar/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void RTC_Config(void); +void RTC_TimeRegulate(void); +void RTC_TimeShow(void); +void RTC_AlarmShow(void); +uint8_t USART_Scanf(uint32_t value); + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/readme.txt new file mode 100644 index 000000000..38f1bdf3f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/readme.txt @@ -0,0 +1,130 @@ +/** + @page HW_Calendar RTC Hardware Calendar example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file RTC/HW_Calendar/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the RTC Hardware Calendar example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example demonstrates and explains how to use the RTC peripheral. +As an application example, it demonstrates how to setup the RTC peripheral, in +terms of prescaler and interrupts, to be used to keep time and to generate +alarm interrupt. + +One from the following clock can be used as RTC clock source (uncomment the +corresponding define in main.c): + - LSE oscillator clock usually delivered by a 32.768 kHz quartz. + - LSI oscillator clock + +The RTC is in the backup (BKP) domain, still powered by VBAT when VDD is switched off, +so the RTC configuration is not lost if a battery is connected to the VBAT pin. +A key value is written in backup data register 0 to indicate if the RTC is already +configured. + +The program behaves as follows: + +1. After startup the program checks the backup data register 0 value: + - BKP_DR0 value not correct: (RTC_BKP_DR0 value is not correct or has not yet + been programmed when the program is executed for the first time) the RTC is + configured and the user is asked to set the time and alarm (entered on + HyperTerminal). + + - BKP_DR0 value correct: this means that the RTC is configured and the time + and Alarm A are displayed on HyperTerminal. + +2. When an External Reset occurs the BKP domain is not reset and the RTC configuration + is not lost. + +3. When power on reset occurs: + - If a battery is connected to the VBAT pin: the BKP domain is not reset and + the RTC configuration is not lost. + + - If no battery is connected to the VBAT pin: the BKP domain is reset and the + RTC configuration is lost. + +4. When an RTC Alarm A event occurs the RTC Alarm interrupt is generated and the + LED1 is toggled. + +The example uses HyperTerminal to configure the RTC clock and display the current time: + - When Tamper button is pressed, a menu is displayed to configure the RTC Time + and Alarm A registers. + - When Key button is pressed, the current time is displayed. + - When WakeUp button is pressed, the current alarm A is displayed. + +LED2 is truned ON when the RTC configuration is done correctly. + + +@par Directory contents + + - RTC/HW_Calendar/system_stm32f2xx.c STM32F2xx system clock configuration file + - RTC/HW_Calendar/stm32f2xx_conf.h Library Configuration file + - RTC/HW_Calendar/stm32f2xx_it.c Interrupt handlers + - RTC/HW_Calendar/stm32f2xx_it.h Header for stm32f2xx_it.c + - RTC/HW_Calendar/main.c Main program + - RTC/HW_Calendar/main.h Main header file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1 led connected respectively to PG.06 pins. + - Use the TAMPER push button connected to PC.13 pin (EXTI Line13). + - Use the KEY push button connected to PG.15 pin (EXTI Line15). + - Use the WAKEUP push button connected to PA.00 pin (EXTI Line0). + - Make sure that jumper JP19 is in position 1-2 to connect the 3V battery to VBAT pin + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port if you want to display data on the HyperTerminal. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/stm32f2xx_conf.h new file mode 100644 index 000000000..3f3f197ea --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file RTC/HW_Calendar/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/stm32f2xx_it.c new file mode 100644 index 000000000..41fc14f15 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/stm32f2xx_it.c @@ -0,0 +1,237 @@ +/** + ****************************************************************************** + * @file RTC/HW_Calendar/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup HW_Calendar + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles External line 0 interrupt request. + * @param None + * @retval None + */ +void EXTI0_IRQHandler(void) +{ + if(EXTI_GetITStatus(WAKEUP_BUTTON_EXTI_LINE) != RESET) + { + /* Display the current alarm on the Hyperterminal */ + RTC_AlarmShow(); + + /* Clear the Wakeup Button EXTI line pending bit */ + EXTI_ClearITPendingBit(WAKEUP_BUTTON_EXTI_LINE); + } +} + +/** + * @brief This function handles External lines 15 to 10 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + /* Display the current time on the Hyperterminal */ + RTC_TimeShow(); + + /* Clear the Key Button EXTI line pending bit */ + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + } + + if(EXTI_GetITStatus(TAMPER_BUTTON_EXTI_LINE) != RESET) + { + /* Set the new RTC configuration */ + RTC_TimeRegulate(); + + /* Clear the Tamper Button EXTI line pending bit */ + EXTI_ClearITPendingBit(TAMPER_BUTTON_EXTI_LINE); + } +} + +/** + * @brief This function handles RTC Alarms interrupt request. + * @param None + * @retval None + */ +void RTC_Alarm_IRQHandler(void) +{ + if(RTC_GetITStatus(RTC_IT_ALRA) != RESET) + { + STM_EVAL_LEDToggle(LED1); + RTC_ClearITPendingBit(RTC_IT_ALRA); + EXTI_ClearITPendingBit(EXTI_Line17); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/stm32f2xx_it.h new file mode 100644 index 000000000..c96c388f5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/stm32f2xx_it.h @@ -0,0 +1,63 @@ +/** + ****************************************************************************** + * @file RTC/HW_Calendar/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void EXTI0_IRQHandler(void); +void EXTI15_10_IRQHandler(void); +void RTC_Alarm_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/HW_Calendar/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/main.c new file mode 100644 index 000000000..d1ca8bc0c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/main.c @@ -0,0 +1,276 @@ +/** + ****************************************************************************** + * @file RTC/RTC_LSI/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RTC_LSI + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +RTC_InitTypeDef RTC_InitStructure; +__IO uint32_t LsiFreq = 0; +__IO uint32_t CaptureNumber = 0, PeriodValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void RTC_Config(void); +uint32_t GetLSIFrequency(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs mounted on STM322xG-EVAL board --------------------------*/ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); + + /* RTC Configuration -------------------------------------------------------*/ + RTC_Config(); + + /* Wait Until KEY BUTTON is pressed */ + while(STM_EVAL_PBGetState(BUTTON_KEY) != RESET) + { + } + + /* Get the LSI frequency: TIM5 is used to measure the LSI frequency */ + LsiFreq = GetLSIFrequency(); + + /* Turn on LED2 */ + STM_EVAL_LEDOn(LED2); + + /* Calendar Configuration */ + RTC_InitStructure.RTC_AsynchPrediv = 0x7F; + RTC_InitStructure.RTC_SynchPrediv = (LsiFreq/128) - 1; + RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; + RTC_Init(&RTC_InitStructure); + + while (1) + { + } +} + +/** + * @brief Configure the RTC peripheral by selecting the clock source. + * @param None + * @retval None + */ +void RTC_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + EXTI_InitTypeDef EXTI_InitStructure; + + /* Enable the PWR clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + +/* LSI used as RTC source clock */ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + + /* Enable the RTC Clock */ + RCC_RTCCLKCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + + /* Calendar Configuration with LSI supposed at 32KHz */ + RTC_InitStructure.RTC_AsynchPrediv = 0x7F; + RTC_InitStructure.RTC_SynchPrediv = 0xFF; /* (32KHz / 128) - 1 = 0xFF*/ + RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; + RTC_Init(&RTC_InitStructure); + + /* EXTI configuration *******************************************************/ + EXTI_ClearITPendingBit(EXTI_Line22); + EXTI_InitStructure.EXTI_Line = EXTI_Line22; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Enable the RTC Wakeup Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Configure the RTC WakeUp Clock source: CK_SPRE (1Hz) */ + RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits); + RTC_SetWakeUpCounter(0x0); + + /* Enable the RTC Wakeup Interrupt */ + RTC_ITConfig(RTC_IT_WUT, ENABLE); + + /* Enable Wakeup Counter */ + RTC_WakeUpCmd(ENABLE); +} + +/** + * @brief Configures TIM5 to measure the LSI oscillator frequency. + * @param None + * @retval LSI Frequency + */ +uint32_t GetLSIFrequency(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + TIM_ICInitTypeDef TIM_ICInitStructure; + RCC_ClocksTypeDef RCC_ClockFreq; + + /* Enable the LSI oscillator ************************************************/ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + {} + + /* TIM5 configuration *******************************************************/ + /* Enable TIM5 clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); + + /* Connect internally the TIM5_CH4 Input Capture to the LSI clock output */ + TIM_RemapConfig(TIM5, TIM5_LSI); + + /* Configure TIM5 presclaer */ + TIM_PrescalerConfig(TIM5, 0, TIM_PSCReloadMode_Immediate); + + /* TIM5 configuration: Input Capture mode --------------------- + The LSI oscillator is connected to TIM5 CH4 + The Rising edge is used as active edge, + The TIM5 CCR4 is used to compute the frequency value + ------------------------------------------------------------ */ + TIM_ICInitStructure.TIM_Channel = TIM_Channel_4; + TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; + TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; + TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV8; + TIM_ICInitStructure.TIM_ICFilter = 0; + TIM_ICInit(TIM5, &TIM_ICInitStructure); + + /* Enable TIM5 Interrupt channel */ + NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable TIM5 counter */ + TIM_Cmd(TIM5, ENABLE); + + /* Reset the flags */ + TIM5->SR = 0; + + /* Enable the CC4 Interrupt Request */ + TIM_ITConfig(TIM5, TIM_IT_CC4, ENABLE); + + + /* Wait until the TIM5 get 2 LSI edges (refer to TIM5_IRQHandler() in + stm32f2xx_it.c file) ******************************************************/ + while(CaptureNumber != 2) + { + } + /* Deinitialize the TIM5 peripheral registers to their default reset values */ + TIM_DeInit(TIM5); + + + /* Compute the LSI frequency, depending on TIM5 input clock frequency (PCLK1)*/ + /* Get SYSCLK, HCLK and PCLKx frequency */ + RCC_GetClocksFreq(&RCC_ClockFreq); + + /* Get PCLK1 prescaler */ + if ((RCC->CFGR & RCC_CFGR_PPRE1) == 0) + { + /* PCLK1 prescaler equal to 1 => TIMCLK = PCLK1 */ + return ((RCC_ClockFreq.PCLK1_Frequency / PeriodValue) * 8); + } + else + { /* PCLK1 prescaler different from 1 => TIMCLK = 2 * PCLK1 */ + return (((2 * RCC_ClockFreq.PCLK1_Frequency) / PeriodValue) * 8) ; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/readme.txt new file mode 100644 index 000000000..1974403cb --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/readme.txt @@ -0,0 +1,97 @@ +/** + @page RTC_LSI RTC Hardware Calendar example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file RTC/RTC_LSI/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the RTC Hardware Calendar example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example demonstrates and explains how to use the LSI clock source auto +calibration to get a precise RTC clock. +As an application example, it demonstrates how to configure the TIM5 timer +internally connected to LSI clock output, in order to adjust the RTC prescaler. + +The Low Speed Internal (LSI) clock is used as RTC clock source. +After reset, the RTC prescaler (asynchronous and synchronous) is set with the +default LSI frequency (32KHz). +The RTC WakeUp is configured to generate an interrupt each 1s. The WakeUp counter +is clocked by the RTC CK_SPRE signal (1Hz) and its counter is set to 0x0. +LED1 connected to PG.06 is toggled inside the RTC WakeUp interrupt each 1s. + +The inaccuracy of the LSI clock causes the RTC WakeUp Interrupt to be inaccurate. +The RTC CK_SPRE signal can be monitored by LED1 which is toggled into the RTC +Wakeup interrupt service routine. + +The program waits until Key Push button is pressed to begin the auto calibration +procedure: + - Configure the TIM5 to remap internally the TIM5 Channel 4 Input Capture to + the LSI clock output. + - Enable the TIM5 Input Capture interrupt: after one cycle of LSI clock, the + period value is stored in a variable and compared to the HCLK clock to get + its real value. + - The RTC prescaler is adjusted with this LSI frequency value so that the RTC + CK_SPRE value become more accurate. + - When calibration is done a led connected to PG.08 is turned ON to indicate the + end of this operation. + + +@par Directory contents + + - RTC/RTC_LSI/system_stm32f2xx.c STM32F2xx system clock configuration file + - RTC/RTC_LSI/stm32f2xx_conf.h Library Configuration file + - RTC/RTC_LSI/stm32f2xx_it.c Interrupt handlers + - RTC/RTC_LSI/stm32f2xx_it.h Header for stm32f2xx_it.c + - RTC/RTC_LSI/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LD1 and LD2 leds connected respectively to PG.06 and PG.08 pins. + - Use the KEY push button connected to PG.15 pin (EXTI Line15). + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/stm32f2xx_conf.h new file mode 100644 index 000000000..82c43e793 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file RTC/RTC_LSI/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/stm32f2xx_it.c new file mode 100644 index 000000000..abcd7f735 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/stm32f2xx_it.c @@ -0,0 +1,222 @@ +/** + ****************************************************************************** + * @file RTC/RTC_LSI/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RTC_LSI + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint32_t PeriodValue; +extern __IO uint32_t CaptureNumber; +uint16_t tmpCC4[2] = {0, 0}; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles RTC Wakeup global interrupt request. + * @param None + * @retval None + */ +void RTC_WKUP_IRQHandler(void) +{ + if(RTC_GetITStatus(RTC_IT_WUT) != RESET) + { + /* Toggle on LED1 */ + STM_EVAL_LEDToggle(LED1); + RTC_ClearITPendingBit(RTC_IT_WUT); + EXTI_ClearITPendingBit(EXTI_Line22); + } +} + +/** + * @brief This function handles TIM5 global interrupt request. + * @param None + * @retval None + */ +void TIM5_IRQHandler(void) +{ + if (TIM_GetITStatus(TIM5, TIM_IT_CC4) != RESET) + { + /* Get the Input Capture value */ + tmpCC4[CaptureNumber++] = TIM_GetCapture4(TIM5); + + /* Clear CC4 Interrupt pending bit */ + TIM_ClearITPendingBit(TIM5, TIM_IT_CC4); + + if (CaptureNumber >= 2) + { + /* Compute the period length */ + PeriodValue = (uint16_t)(0xFFFF - tmpCC4[0] + tmpCC4[1] + 1); + } + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/stm32f2xx_it.h new file mode 100644 index 000000000..4e6b13e34 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/stm32f2xx_it.h @@ -0,0 +1,62 @@ +/** + ****************************************************************************** + * @file RTC/RTC_LSI/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void RTC_WKUP_IRQHandler(void); +void TIM5_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/RTC_LSI/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/main.c new file mode 100644 index 000000000..b5d0a352f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/main.c @@ -0,0 +1,281 @@ +/** + ****************************************************************************** + * @file RTC/Tamper/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RTC_Tamper + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define RTC_BKP_DR_NUMBER 20 /* RTC Backup Data Register Number */ + +/* Uncomment the corresponding line to select the RTC Clock source */ +#define RTC_CLOCK_SOURCE_LSE /* LSE used as RTC source clock */ +/* #define RTC_CLOCK_SOURCE_LSI */ /* LSI used as RTC source clock. The RTC Clock + may varies due to LSI frequency dispersion. */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint32_t RTC_BKP_DR[RTC_BKP_DR_NUMBER] = + { + RTC_BKP_DR0, RTC_BKP_DR1, RTC_BKP_DR2, RTC_BKP_DR3, + RTC_BKP_DR4, RTC_BKP_DR5, RTC_BKP_DR6, RTC_BKP_DR7, + RTC_BKP_DR8, RTC_BKP_DR9, RTC_BKP_DR10, RTC_BKP_DR11, + RTC_BKP_DR12, RTC_BKP_DR13, RTC_BKP_DR14, RTC_BKP_DR15, + RTC_BKP_DR16, RTC_BKP_DR17, RTC_BKP_DR18, RTC_BKP_DR19 + }; + +/* Private function prototypes -----------------------------------------------*/ +void RTC_Config(void); +void WriteToRTC_BKP_DR(uint32_t FirstRTCBackupData); +uint32_t CheckRTC_BKP_DR(uint32_t FirstRTCBackupData); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize Leds mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* RTC configuration */ + RTC_Config(); + + /* Write To RTC Backup Data registers */ + WriteToRTC_BKP_DR(0xA53C); + + /* Check if the written data are correct */ + if(CheckRTC_BKP_DR(0xA53C) == 0x00) + { + /* Turn on LED1 */ + STM_EVAL_LEDOn(LED1); + } + else + { + /* Turn on LED3 */ + STM_EVAL_LEDOn(LED3); + } + + while (1) + { + } +} + +/** + * @brief Configure the RTC peripheral by selecting the clock source. + * @param None + * @retval None + */ +void RTC_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + EXTI_InitTypeDef EXTI_InitStructure; + + /* Enable the PWR clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + + /* Reset BKP Domain */ + RCC_BackupResetCmd(ENABLE); + RCC_BackupResetCmd(DISABLE); + +#if defined (RTC_CLOCK_SOURCE_LSI) /* LSI used as RTC source clock*/ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + +#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */ + /* Enable the LSE OSC */ + RCC_LSEConfig(RCC_LSE_ON); + + /* Wait till LSE is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); + +#else + #error Please select the RTC Clock source inside the main.c file +#endif /* RTC_CLOCK_SOURCE_LSI */ + + /* Enable The external line21 interrupt */ + EXTI_ClearITPendingBit(EXTI_Line21); + EXTI_InitStructure.EXTI_Line = EXTI_Line21; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Enable TAMPER IRQChannel */ + NVIC_InitStructure.NVIC_IRQChannel = TAMP_STAMP_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Disable the Tamper 1 detection */ + RTC_TamperCmd(RTC_Tamper_1, DISABLE); + + /* Clear Tamper 1 pin Event(TAMP1F) pending flag */ + RTC_ClearFlag(RTC_FLAG_TAMP1F); + + /* Configure the Tamper 1 Trigger */ + RTC_TamperTriggerConfig(RTC_Tamper_1, RTC_TamperTrigger_FallingEdge); + + /* Enable the Tamper interrupt */ + RTC_ITConfig(RTC_IT_TAMP, ENABLE); + + /* Clear Tamper 1 pin interrupt pending bit */ + RTC_ClearITPendingBit(RTC_IT_TAMP1); + + /* Enable the Tamper 1 detection */ + RTC_TamperCmd(RTC_Tamper_1, ENABLE); +} + +/** + * @brief Writes data RTC Backup DRx registers. + * @param FirstRTCBackupData: data to be written to RTC Backup data registers. + * @retval None + */ +void WriteToRTC_BKP_DR(uint32_t FirstRTCBackupData) +{ + uint32_t index = 0; + + for (index = 0; index < RTC_BKP_DR_NUMBER; index++) + { + /* write To bkp data register */ + RTC_WriteBackupRegister(RTC_BKP_DR[index], FirstRTCBackupData + (index * 0x5A)); + } +} + +/** + * @brief Checks if the RTC Backup DRx registers values are correct or not. + * @param FirstRTCBackupData: data to be compared with RTC Backup data registers. + * @retval - 0: All RTC Backup DRx registers values are correct + * - Value different from 0: Number of the first Backup register + * which value is not correct + */ +uint32_t CheckRTC_BKP_DR(uint32_t FirstRTCBackupData) +{ + uint32_t index = 0; + + for (index = 0; index < RTC_BKP_DR_NUMBER; index++) + { + /* Read from data register */ + if (RTC_ReadBackupRegister(RTC_BKP_DR[index]) != (FirstRTCBackupData + (index * 0x5A))) + { + return (index + 1); + } + } + return 0; +} + +/** + * @brief Checks if the RTC Backup DRx registers are reset or not. + * @param None + * @retval - 0: All RTC Backup DRx registers are reset + * - Value different from 0: Number of the first Backup register + * not reset + */ +uint32_t IsBackupRegReset(void) +{ + uint32_t index = 0; + + for (index = 0; index < RTC_BKP_DR_NUMBER; index++) + { + /* Read from bkp Data Register */ + if (RTC_ReadBackupRegister(RTC_BKP_DR[index]) != 0x0) + { + return (index + 1); + } + } + return 0; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/main.h new file mode 100644 index 000000000..4d8acc0da --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/main.h @@ -0,0 +1,44 @@ +/** + ****************************************************************************** + * @file RTC/Tamper/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +uint32_t IsBackupRegReset(void); + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/readme.txt new file mode 100644 index 000000000..32ffaa85d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/readme.txt @@ -0,0 +1,89 @@ +/** + @page RTC_Tamper RTC Tamper example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file RTC/Tamper/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the RTC Tamper example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to write/read data to/from RTC Backup data registers and +demonstrates the Tamper detection feature. + +One from the following clock can be used as RTC clock source (uncomment the +corresponding define in main.c): + - LSE oscillator clock usually delivered by a 32.768 kHz quartz. + - LSI oscillator clock + +The associated firmware performs the following: +1. It configures the RTC_AF1 pin Tamper to be falling edge, and enables the Tamper + interrupt. +2. It writes the data to all RTC Backup data registers, then check whether the + data were correctly written. If yes, LED1 turns on, otherwise LED3 turns on. +3. On applying a low level on the RTC_AF1 pin (PC.13), the RTC backup data registers + are reset and the Tamper interrupt is generated. The corresponding ISR then checks + whether the RTC Backup data registers are cleared. If yes LED2 turns ON, + otherwise LED4 turns ON. + + +@par Directory contents + + - RTC/Tamper/system_stm32f2xx.c STM32F2xx system clock configuration file + - RTC/Tamper/stm32f2xx_conf.h Library Configuration file + - RTC/Tamper/stm32f2xx_it.c Interrupt handlers + - RTC/Tamper/stm32f2xx_it.h Header for stm32f2xx_it.c + - RTC/Tamper/main.c Main program + - RTC/Tamper/main.h Main header file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LD1, LD2, LD3 and LD4 leds connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins. + - Use the TAMPER push button connected to PC.13 pin (EXTI Line13). + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/stm32f2xx_conf.h new file mode 100644 index 000000000..58326527d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file RTC/Tamper/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/stm32f2xx_it.c new file mode 100644 index 000000000..159dacd4b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/stm32f2xx_it.c @@ -0,0 +1,214 @@ +/** + ****************************************************************************** + * @file RTC/Tamper/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RTC_Tamper + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles RTC Tamper and Time Stamp interrupts requests. + * @param None + * @retval None + */ +void TAMP_STAMP_IRQHandler(void) +{ + if(RTC_GetFlagStatus(RTC_FLAG_TAMP1F) != RESET) + { + /* Tamper 1 detection event occurred */ + /* Check if RTC Backup Data registers are cleared */ + if(IsBackupRegReset() == 0) + { + /* OK, RTC Backup Data registers are reset as expected */ + /* Toggle LED2 */ + STM_EVAL_LEDToggle(LED2); + } + else + { + /* RTC Backup Data registers are not reset */ + /* Toggle LED4 */ + STM_EVAL_LEDToggle(LED4); + } + + /* Clear Tamper 1 pin Event(TAMP1F) pending flag */ + RTC_ClearFlag(RTC_FLAG_TAMP1F); + + /* Disable Tamper pin 1 */ + RTC_TamperCmd(RTC_Tamper_1, DISABLE); + + /* Enable Tamper pin */ + RTC_TamperCmd(RTC_Tamper_1, ENABLE); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/stm32f2xx_it.h new file mode 100644 index 000000000..763f58e3c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/stm32f2xx_it.h @@ -0,0 +1,61 @@ +/** + ****************************************************************************** + * @file RTC/Tamper/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void TAMP_STAMP_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/Tamper/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/main.c new file mode 100644 index 000000000..34b9e4b42 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/main.c @@ -0,0 +1,445 @@ +/** + ****************************************************************************** + * @file RTC/TimeStamp/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RTC_TimeStamp + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Uncomment the corresponding line to select the RTC Clock source */ +#define RTC_CLOCK_SOURCE_LSE /* LSE used as RTC source clock */ +/* #define RTC_CLOCK_SOURCE_LSI */ /* LSI used as RTC source clock. The RTC Clock + may varies due to LSI frequency dispersion. */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +USART_InitTypeDef USART_InitStructure; +RTC_InitTypeDef RTC_InitStructure; +RTC_TimeTypeDef RTC_TimeStructure; +RTC_DateTypeDef RTC_DateStructure; +RTC_TimeTypeDef RTC_TimeStampStructure; +RTC_DateTypeDef RTC_TimeStampDateStructure; +__IO uint32_t AsynchPrediv = 0, SynchPrediv = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); + + /* Output a message on Hyperterminal using printf function */ + printf("\n\r *********************** RTC Time Stamp Example ***********************\n\r"); + + if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2) + { + /* RTC configuration */ + RTC_Config(); + + /* Configure the RTC data register and RTC prescaler */ + RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv; + RTC_InitStructure.RTC_SynchPrediv = SynchPrediv; + RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; + + /* Check on RTC init */ + if (RTC_Init(&RTC_InitStructure) == ERROR) + { + printf("\n\r /!\\***** RTC Prescaler Config failed ********/!\\ \n\r"); + } + + /* Configure the time register */ + RTC_TimeRegulate(); + } + else + { + /* Check if the Power On Reset flag is set */ + if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) + { + printf("\r\n Power On Reset occurred....\n\r"); + } + /* Check if the Pin Reset flag is set */ + else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET) + { + printf("\r\n External Reset occurred....\n\r"); + } + + printf("\r\n No need to configure RTC....\n\r"); + + /* Enable the PWR clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + + /* Clear the RTC Alarm Flag */ + RTC_ClearFlag(RTC_FLAG_ALRAF); + + /* Clear the EXTI Line 17 Pending bit (Connected internally to RTC Alarm) */ + EXTI_ClearITPendingBit(EXTI_Line17); + + /* Display the RTC Time/Date and TimeStamp Time/Date */ + RTC_TimeShow(); + RTC_DateShow(); + RTC_TimeStampShow(); + } + + /* Configure the external interrupt "WAKEUP", "KEY" and "TAMPER" buttons */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + STM_EVAL_PBInit(BUTTON_TAMPER , BUTTON_MODE_EXTI); + STM_EVAL_PBInit(BUTTON_WAKEUP , BUTTON_MODE_EXTI); + + /* Configure LED1 */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDOn(LED1); + + while (1) + { + } +} + +/** + * @brief Configure the RTC peripheral by selecting the clock source. + * @param None + * @retval None + */ +void RTC_Config(void) +{ + /* Enable the PWR clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Allow access to RTC */ + PWR_BackupAccessCmd(ENABLE); + +#if defined (RTC_CLOCK_SOURCE_LSI) /* LSI used as RTC source clock*/ +/* The RTC Clock may varies due to LSI frequency dispersion. */ + /* Enable the LSI OSC */ + RCC_LSICmd(ENABLE); + + /* Wait till LSI is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */ + /* Enable the LSE OSC */ + RCC_LSEConfig(RCC_LSE_ON); + + /* Wait till LSE is ready */ + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + } + + /* Select the RTC Clock Source */ + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); + + SynchPrediv = 0xFF; + AsynchPrediv = 0x7F; + +#else + #error Please select the RTC Clock source inside the main.c file +#endif /* RTC_CLOCK_SOURCE_LSI */ + + /* Enable the RTC Clock */ + RCC_RTCCLKCmd(ENABLE); + + /* Wait for RTC APB registers synchronisation */ + RTC_WaitForSynchro(); + + /* Enable The TimeStamp */ + RTC_TimeStampCmd(RTC_TimeStampEdge_Falling, ENABLE); +} + +/** + * @brief Returns the time entered by user, using Hyperterminal. + * @param None + * @retval None + */ +void RTC_TimeRegulate(void) +{ + uint32_t tmp_hh = 0xFF, tmp_mm = 0xFF, tmp_ss = 0xFF; + + printf("\n\r==============Time Settings=====================================\n\r"); + RTC_TimeStructure.RTC_H12 = RTC_H12_AM; + printf(" Please Set Hours\n\r"); + while (tmp_hh == 0xFF) + { + tmp_hh = USART_Scanf(0, 23); + RTC_TimeStructure.RTC_Hours = tmp_hh; + } + printf(": %0.2d\n\r", tmp_hh); + + printf(" Please Set Minutes\n\r"); + while (tmp_mm == 0xFF) + { + tmp_mm = USART_Scanf(0, 59); + RTC_TimeStructure.RTC_Minutes = tmp_mm; + } + printf(": %0.2d\n\r", tmp_mm); + + printf(" Please Set Seconds\n\r"); + while (tmp_ss == 0xFF) + { + tmp_ss = USART_Scanf(0, 59); + RTC_TimeStructure.RTC_Seconds = tmp_ss; + } + printf(": %0.2d\n\r", tmp_ss); + + /* Configure the RTC time register */ + if(RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure) == ERROR) + { + printf("\n\r>> !! RTC Set Time failed. !! <<\n\r"); + } + else + { + printf("\n\r>> !! RTC Set Time success. !! <<\n\r"); + RTC_TimeShow(); + /* Indicator for the RTC configuration */ + RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2); + } + + tmp_hh = 0xFF; + tmp_mm = 0xFF; + tmp_ss = 0xFF; + + printf("\n\r==============Date Settings=====================================\n\r"); + + printf(" Please Set WeekDay (01-07)\n\r"); + while (tmp_hh == 0xFF) + { + tmp_hh = USART_Scanf(1, 7); + RTC_DateStructure.RTC_WeekDay = tmp_hh; + } + printf(": %0.2d\n\r", tmp_hh); + tmp_hh = 0xFF; + printf(" Please Set Date (01-31)\n\r"); + while (tmp_hh == 0xFF) + { + tmp_hh = USART_Scanf(1, 31); + RTC_DateStructure.RTC_Date = tmp_hh; + } + printf(": %0.2d\n\r", tmp_hh); + + printf(" Please Set Month (01-12)\n\r"); + while (tmp_mm == 0xFF) + { + tmp_mm = USART_Scanf(1, 12); + RTC_DateStructure.RTC_Month = tmp_mm; + } + printf(": %0.2d\n\r", tmp_mm); + + printf(" Please Set Year (00-99)\n\r"); + while (tmp_ss == 0xFF) + { + tmp_ss = USART_Scanf(0, 99); + RTC_DateStructure.RTC_Year = tmp_ss; + } + printf(": %0.2d\n\r", tmp_ss); + + /* Configure the RTC date register */ + if(RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure) == ERROR) + { + printf("\n\r>> !! RTC Set Date failed. !! <<\n\r"); + } + else + { + printf("\n\r>> !! RTC Set Date success. !! <<\n\r"); + RTC_DateShow(); + /* Indicator for the RTC configuration */ + RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2); + } + +} + +/** + * @brief Display the current time on the Hyperterminal. + * @param None + * @retval None + */ +void RTC_TimeShow(void) +{ + /* Get the current Time and Date */ + RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); + printf("\n\r============== Current Time Display ============================\n\r"); + printf("\n\r The current time (Hour-Minute-Second) is : %0.2d:%0.2d:%0.2d \n\r", RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds); + /* Unfreeze the RTC DR Register */ + (void)RTC->DR; +} + +/** + * @brief Display the current date on the Hyperterminal. + * @param None + * @retval None + */ +void RTC_DateShow(void) +{ + /* Get the current Date */ + RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); + printf("\n\r============== Current Date Display ============================\n\r"); + printf("\n\r The current date (WeekDay-Date-Month-Year) is : %0.2d-%0.2d-%0.2d-%0.2d \n\r", RTC_DateStructure.RTC_WeekDay, RTC_DateStructure.RTC_Date, RTC_DateStructure.RTC_Month, RTC_DateStructure.RTC_Year); +} + + +/** + * @brief Display the current TimeStamp (time and date) on the Hyperterminal. + * @param None + * @retval None + */ +void RTC_TimeStampShow(void) +{ + /* Get the current TimeStamp */ + RTC_GetTimeStamp(RTC_Format_BIN, &RTC_TimeStampStructure, &RTC_TimeStampDateStructure); + printf("\n\r==============TimeStamp Display (Time and Date)=================\n\r"); + printf("\n\r The current time stamp time (Hour-Minute-Second) is : %0.2d:%0.2d:%0.2d \n\r", RTC_TimeStampStructure.RTC_Hours, RTC_TimeStampStructure.RTC_Minutes, RTC_TimeStampStructure.RTC_Seconds); + printf("\n\r The current timestamp date (WeekDay-Date-Month) is : %0.2d-%0.2d-%0.2d \n\r", RTC_TimeStampDateStructure.RTC_WeekDay, RTC_TimeStampDateStructure.RTC_Date, RTC_TimeStampDateStructure.RTC_Month); +} + + +/** + * @brief Gets numeric values from the hyperterminal. + * @param MinValue: minimum value to be used. + * @param MaxValue: maximum value to be used. + * @retval None + */ +uint8_t USART_Scanf(uint32_t MinValue, uint32_t MaxValue) +{ + uint32_t index = 0; + uint32_t tmp[2] = {0, 0}; + + while (index < 2) + { + /* Loop until RXNE = 1 */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_RXNE) == RESET) + {} + tmp[index++] = (USART_ReceiveData(EVAL_COM1)); + if ((tmp[index - 1] < 0x30) || (tmp[index - 1] > 0x39)) + { + printf("\n\r Please enter valid number between 0 and 9\n\r"); + index--; + } + } + /* Calculate the Corresponding value */ + index = (tmp[1] - 0x30) + ((tmp[0] - 0x30) * 10); + /* Checks the value */ + if ((index < MinValue) || (index > MaxValue)) + { + printf("\n\r Please enter valid number between %d and %d\n\r", MinValue, MaxValue); + return 0xFF; + } + return index; +} + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + return ch; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/main.h new file mode 100644 index 000000000..668d3cc3e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/main.h @@ -0,0 +1,58 @@ +/** + ****************************************************************************** + * @file RTC/TimeStamp/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void RTC_Config(void); +void RTC_TimeRegulate(void); +void RTC_TimeShow(void); +void RTC_DateShow(void); +void RTC_TimeStampShow(void); +uint8_t USART_Scanf(uint32_t MinValue, uint32_t MaxValue); + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/readme.txt new file mode 100644 index 000000000..a87e6268f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/readme.txt @@ -0,0 +1,126 @@ +/** + @page RTC_TimeStamp RTC TimeStamp example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file RTC/TimeStamp/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the RTC TimeStamp example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a short description of how to use the RTC peripheral and +the Time Stamp feature. + +One from the following clock can be used as RTC clock source (uncomment the +corresponding define in main.c): + - LSE oscillator clock usually delivered by a 32.768 kHz quartz. + - LSI oscillator clock + +The program behaves as follows: + +1. After startup the program checks the backup data register 0 value: + - BKP_DR0 value not correct: (RTC_BKP_DR0 value is not correct or has not yet + been programmed when the program is executed for the first time) the RTC is + configured and the user is asked to set the time and date (entered on + HyperTerminal). + + - BKP_DR0 value correct: this means that the RTC is configured and the time + date and timestamp (time and date) are displayed on HyperTerminal. + +2. When an External Reset occurs the BKP domain is not reset and the RTC configuration + is not lost. + +3. When power on reset occurs: + - If a battery is connected to the VBAT pin: the BKP domain is not reset and + the RTC configuration is not lost. + + - If no battery is connected to the VBAT pin: the BKP domain is reset and the + RTC configuration is lost. + +4. It configures the RTC_AF1 pin TimeStamp to be falling edge and enables the +TimeStamp detection. + +5. On applying a low level on the RTC_AF1 pin (PC.13), the calendar is saved in +the time-stamp registers thanks to the timestamp event detection. + +The example uses HyperTerminal to configure the RTC clock, display the current +time and timestamp registers contents: + - pressing TAMPER push button, the current time and date are saved in RTC TSTR + and TSDR registers. + - When pressing WAKEUP push button, the TimeStamp Calendar is cleared. + - When pressing KEY push button, the current RTC Calendar (Time and date) and + RTC TimeStamp Calendar (Time and date) are displayed. + +@note The RTC_Year member in the TimeStamp Date is always 00 (no years in the RTC_TSDR register) + +@par Directory contents + + - RTC/TimeStamp/system_stm32f2xx.c STM32F2xx system clock configuration file + - RTC/TimeStamp/stm32f2xx_conf.h Library Configuration file + - RTC/TimeStamp/stm32f2xx_it.c Interrupt handlers + - RTC/TimeStamp/stm32f2xx_it.h Header for stm32f2xx_it.c + - RTC/TimeStamp/main.c Main program + - RTC/TimeStamp/main.h Main header file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use the TAMPER push button connected to PC.13 pin (EXTI Line13). + - Use the KEY push button connected to PG.15 pin (EXTI Line15). + - Use the WAKEUP push button connected to PA.00 pin (EXTI Line0). + - Make sure that jumper JP19 is in position 1-2 to connect the 3V battery to VBAT pin + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port if you want to display data on the HyperTerminal. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/stm32f2xx_conf.h new file mode 100644 index 000000000..60601b549 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file RTC/TimeStamp/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/stm32f2xx_it.c new file mode 100644 index 000000000..42d9db323 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/stm32f2xx_it.c @@ -0,0 +1,236 @@ +/** + ****************************************************************************** + * @file RTC/TimeStamp/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup RTC_TimeStamp + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles External line 0 interrupt request. + * @param None + * @retval None + */ +void EXTI0_IRQHandler(void) +{ + /* Clear the TimeStamp registers */ + if(EXTI_GetITStatus(WAKEUP_BUTTON_EXTI_LINE) != RESET) + { + /* Turn LED1 ON and LED2 OFF */ + STM_EVAL_LEDOn(LED1); + STM_EVAL_LEDOff(LED2); + + /* Clear The TSF Flag (Clear TimeStamp Registers) */ + RTC_ClearFlag(RTC_FLAG_TSF); + printf("\r\n******************** TimeStamp Event Cleared ********************"); + /* Clear the Wakeup Button EXTI line pending bit */ + EXTI_ClearITPendingBit(WAKEUP_BUTTON_EXTI_LINE); + } +} + +/** + * @brief This function handles External lines 15 to 10 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + /* TimeStamp Event detected */ + if(EXTI_GetITStatus(TAMPER_BUTTON_EXTI_LINE) != RESET) + { + /* Turn LED4 ON */ + STM_EVAL_LEDOn(LED4); + printf("\r\n******************** TimeStamp Event Occurred ********************"); + /* Clear the TAMPER Button EXTI line pending bit */ + EXTI_ClearITPendingBit(TAMPER_BUTTON_EXTI_LINE); + } + + /* To display Current RTC Time and Date Calendar */ + if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + /* Turn LED4 ON */ + STM_EVAL_LEDOn(LED4); + + /* Clear the KEY Button EXTI line pending bit */ + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + + /* Display the Time */ + RTC_TimeShow(); + /* Display the date */ + RTC_DateShow(); + /* Display the TimeStamp */ + RTC_TimeStampShow(); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/stm32f2xx_it.h new file mode 100644 index 000000000..910e63db9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file RTC/TimeStamp/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/TimeStamp/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/readme.txt new file mode 100644 index 000000000..a5ab11d1a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/RTC/readme.txt @@ -0,0 +1,34 @@ +/** + @page RTC_EXAMPLES RTC EXAMPLES + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file RTC/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Reference to the Application note AN3371. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +For detailed description about the available examples, refer to the application +note "AN3371 Using the STM32 hardware real-time clock (RTC)" available on ST Microcontrollers . + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Release_Notes.html b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Release_Notes.html new file mode 100644 index 000000000..0d8593e90 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/Release_Notes.html @@ -0,0 +1,164 @@ + + + + + + + + +Release Notes for STM32F2xx Standard Peripherals Library Examples + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
Back to Release page
+

Release +Notes for STM32F2xx Standard Peripherals Library Examples

+

Copyright 2012 STMicroelectronics

+

+
+

 

+ + + + + + +
+

Contents

+
    +
  1. STM32F2xx Standard Peripherals Library +Examples update History
  2. +
  3. License
  4. +
+ + +

STM32F2xx Standard +Peripherals Library Examples update History


V1.1.0 / 13-April-2012

Main +Changes

+
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • All +examples: update done to be in line with latest version of +STM32_EVAL architecture; include header +file "stm322xg_eval.h" instead of "stm32_eval.h"
  • ADC examples 
    • ADC configuration: add initialization of the ADC_ExternalTrigConv member of the ADC_InitStructure.
    • DualADC_Interleaved_DMAmode3, DualADC_RegulSimu_DMAmode1 and TripleADC_Interleaved_DMAmode2 examples:
      • Remove call to ADC_DMACmd() function (already done by ADC_MultiModeDMARequestAfterLastTransferCmd() function).
  • CAN examples 
    • Remove CAN_StructInit() function and replace it by an explicit data initialization.
    • Remove reference to CAN_Baudrate_Calculator.xls file inside the readme.txt.
  • CortexM3/MPU example
    • Add the following defines 
#define +MPU_RASR_XN_Pos                          +28  
#define +MPU_RASR_XN_Msk                          +(1UL << +MPU_RASR_XN_Pos)                      + 
#define +MPU_RASR_AP_Pos                          +24  
#define +MPU_RASR_AP_Msk                          +(7UL << MPU_RASR_AP_Pos)
  • CRYP examples 
    • AES_ECBmode_DMA 
      • Update +Crypto and DMA configuration sequence: DMA enabled before Crypto to +avoid flag error (FIFO error) generation during DMA transfer.
      • Replace +"while (DMA_GetFlagStatus(DMA2_Stream6, DMA_FLAG_TCIF5) == RESET);" by +"while (DMA_GetFlagStatus(DMA2_Stream5, DMA_FLAG_TCIF5) == RESET);".
    • TDES_ECBmode_DMA
      • Update Crypto and DMA configuration sequence: DMA enabled before Crypto to avoid flag error (FIFO error) generation during DMA transfer.
      • Replace +"while (DMA_GetFlagStatus(DMA2_Stream6, DMA_FLAG_TCIF5) == RESET);" by +"while (DMA_GetFlagStatus(DMA2_Stream5, DMA_FLAG_TCIF5) == RESET);".
  • DAC example
    • Update +the DMA Stream number for each DAC Channel : DMA1 stream 5 configured +with DAC Channel1 and DMA1 stream 6 with DAC Channel2.
  • DMA example
    • In stm32f2xx_it.c : replace DAM_STREAM_IRQHANDLER macro name by DMA_STREAM_IRQHANDLER.
  • DCMI example
    • Add driver for new camera OV2640 and example enhancement.
    • Change the folder name from "OV9655_Camera" to "Camera".
  • IWDG Example
    • Change EXTI interrupt Line from Line 0 to Line 15.
    • Change Invalid Address from 0x70000000 to 0xA0001000.
  • PWR examples
    • CurrentConsumption example
      • Example +enhancement: when system was resumed from STANDBY mode LED1 start +toggling (same behavior as sleep or stop mode resume). 
      • readme file: add more details about jumper settings
    • Update +readme file for all examples : add the following note "This example can +not be used in DEBUG mode, this is due to the fact that the Cortex™-M3 +core is no longer clocked during low power mode so debugging features +are disabled".
  • SDIO example 
    • In stm32f2xx_it.c : add SD_SDIO_DMA_IRQHANDLER() interrupt function which call SD_ProcessDMAIRQ() function at each DMA end of transfer.
    • In main.c : add the following NVIC configuration
      NVIC_InitStructure.NVIC_IRQChannel = SD_SDIO_DMA_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
      NVIC_Init(&NVIC_InitStructure);  
  • SPI examples 
    • SPI_DataExchangeInterrupt : Source Code modularity enhancement. 
  • TIM examples
    • ExtTrigger_Synchro example
      •  In main.c : replace comment "GPIOA Configuration: PA.09(TIM1 CH2)" by "GPIOE Configuration: PE.11(TIM1 CH2)" 
      • In readme.txt : replace "TIM3 CH1 (PB.04)" by "TIM3 CH1 (PC.06)"
    • OCInactive example
      • Add the GPIO configuration en alternate mode for PA0/PA1/PA2/PA3 which correspond respectively to TIM2_CH1/CH2/CH3/CH4.
    • In all examples clarify TIM frequency computation formula.
  • USART examples 
    • DataExchangeDMA : Source Code modularity enhancement.
  • WWDG Example
    • Change EXTI interrupt Line from Line 0 to Line 15
    • Change Invalid Address from 0x70000000 to 0xA0001000
  • I2C Examples: add readme file to refer to the I2C CPAL Library
  • RTC examples: add readme file to refer to the "AN3371 Using the STM32 hardware real-time clock (RTC)"

V1.0.0 / 18-April-2011

Main +Changes

+
  • First official release for STM32F2xx devices
    +
+ + +
    + +
+

License

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless +required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See +the License for the specific language governing permissions and +limitations under the License.
+ +
+
+

For + complete documentation on STM32 + Microcontrollers visit www.st.com/STM32

+
+ +
+
+

 

+
+ \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/main.c new file mode 100644 index 000000000..14ad7fca6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/main.c @@ -0,0 +1,382 @@ +/** + ****************************************************************************** + * @file SDIO/uSDCard/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval_sdio_sd.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SDIO_uSDCard + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Private define ------------------------------------------------------------*/ +#define BLOCK_SIZE 512 /* Block Size in Bytes */ + +#define NUMBER_OF_BLOCKS 100 /* For Multi Blocks operation (Read/Write) */ +#define MULTI_BUFFER_SIZE (BLOCK_SIZE * NUMBER_OF_BLOCKS) + +#define SD_OPERATION_ERASE 0 +#define SD_OPERATION_BLOCK 1 +#define SD_OPERATION_MULTI_BLOCK 2 +#define SD_OPERATION_END 3 + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint8_t Buffer_Block_Tx[BLOCK_SIZE], Buffer_Block_Rx[BLOCK_SIZE]; +uint8_t Buffer_MultiBlock_Tx[MULTI_BUFFER_SIZE], Buffer_MultiBlock_Rx[MULTI_BUFFER_SIZE]; +volatile TestStatus EraseStatus = FAILED, TransferStatus1 = FAILED, TransferStatus2 = FAILED; +SD_Error Status = SD_OK; +__IO uint32_t SDCardOperation = SD_OPERATION_ERASE; + +/* Private function prototypes -----------------------------------------------*/ +void NVIC_Configuration(void); +void SD_EraseTest(void); +void SD_SingleBlockTest(void); +void SD_MultiBlockTest(void); +void Fill_Buffer(uint8_t *pBuffer, uint32_t BufferLength, uint32_t Offset); +TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint32_t BufferLength); +TestStatus eBuffercmp(uint8_t* pBuffer, uint32_t BufferLength); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs available on STM322xG-EVAL board *************************/ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Interrupt Config */ + NVIC_Configuration(); + + /*------------------------------ SD Init ---------------------------------- */ + if((Status = SD_Init()) != SD_OK) + { + STM_EVAL_LEDOn(LED4); + } + + while((Status == SD_OK) && (SDCardOperation != SD_OPERATION_END) && (SD_Detect()== SD_PRESENT)) + { + switch(SDCardOperation) + { + /*-------------------------- SD Erase Test ---------------------------- */ + case (SD_OPERATION_ERASE): + { + SD_EraseTest(); + SDCardOperation = SD_OPERATION_BLOCK; + break; + } + /*-------------------------- SD Single Block Test --------------------- */ + case (SD_OPERATION_BLOCK): + { + SD_SingleBlockTest(); + SDCardOperation = SD_OPERATION_MULTI_BLOCK; + break; + } + /*-------------------------- SD Multi Blocks Test --------------------- */ + case (SD_OPERATION_MULTI_BLOCK): + { + SD_MultiBlockTest(); + SDCardOperation = SD_OPERATION_END; + break; + } + } + } + + /* Infinite loop */ + while (1) + {} +} + +/** + * @brief Configures SDIO IRQ channel. + * @param None + * @retval None + */ +void NVIC_Configuration(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + + /* Configure the NVIC Preemption Priority Bits */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); + + NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + NVIC_InitStructure.NVIC_IRQChannel = SD_SDIO_DMA_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Tests the SD card erase operation. + * @param None + * @retval None + */ +void SD_EraseTest(void) +{ + /*------------------- Block Erase ------------------------------------------*/ + if (Status == SD_OK) + { + /* Erase NumberOfBlocks Blocks of WRITE_BL_LEN(512 Bytes) */ + Status = SD_Erase(0x00, (BLOCK_SIZE * NUMBER_OF_BLOCKS)); + } + + if (Status == SD_OK) + { + Status = SD_ReadMultiBlocks(Buffer_MultiBlock_Rx, 0x00, BLOCK_SIZE, NUMBER_OF_BLOCKS); + + /* Check if the Transfer is finished */ + Status = SD_WaitReadOperation(); + + /* Wait until end of DMA transfer */ + while(SD_GetStatus() != SD_TRANSFER_OK); + } + + /* Check the correctness of erased blocks */ + if (Status == SD_OK) + { + EraseStatus = eBuffercmp(Buffer_MultiBlock_Rx, MULTI_BUFFER_SIZE); + } + + if(EraseStatus == PASSED) + { + STM_EVAL_LEDOn(LED1); + } + else + { + STM_EVAL_LEDOff(LED1); + STM_EVAL_LEDOn(LED4); + } +} + +/** + * @brief Tests the SD card Single Blocks operations. + * @param None + * @retval None + */ +void SD_SingleBlockTest(void) +{ + /*------------------- Block Read/Write --------------------------*/ + /* Fill the buffer to send */ + Fill_Buffer(Buffer_Block_Tx, BLOCK_SIZE, 0x320F); + + if (Status == SD_OK) + { + /* Write block of 512 bytes on address 0 */ + Status = SD_WriteBlock(Buffer_Block_Tx, 0x00, BLOCK_SIZE); + /* Check if the Transfer is finished */ + Status = SD_WaitWriteOperation(); + while(SD_GetStatus() != SD_TRANSFER_OK); + } + + if (Status == SD_OK) + { + /* Read block of 512 bytes from address 0 */ + Status = SD_ReadBlock(Buffer_Block_Rx, 0x00, BLOCK_SIZE); + /* Check if the Transfer is finished */ + Status = SD_WaitReadOperation(); + while(SD_GetStatus() != SD_TRANSFER_OK); + } + + /* Check the correctness of written data */ + if (Status == SD_OK) + { + TransferStatus1 = Buffercmp(Buffer_Block_Tx, Buffer_Block_Rx, BLOCK_SIZE); + } + + if(TransferStatus1 == PASSED) + { + STM_EVAL_LEDOn(LED2); + } + else + { + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOn(LED4); + } +} + +/** + * @brief Tests the SD card Multiple Blocks operations. + * @param None + * @retval None + */ +void SD_MultiBlockTest(void) +{ + /*--------------- Multiple Block Read/Write ---------------------*/ + /* Fill the buffer to send */ + Fill_Buffer(Buffer_MultiBlock_Tx, MULTI_BUFFER_SIZE, 0x0); + + if (Status == SD_OK) + { + /* Write multiple block of many bytes on address 0 */ + Status = SD_WriteMultiBlocks(Buffer_MultiBlock_Tx, 0x00, BLOCK_SIZE, NUMBER_OF_BLOCKS); + /* Check if the Transfer is finished */ + Status = SD_WaitWriteOperation(); + while(SD_GetStatus() != SD_TRANSFER_OK); + } + + if (Status == SD_OK) + { + /* Read block of many bytes from address 0 */ + Status = SD_ReadMultiBlocks(Buffer_MultiBlock_Rx, 0x00, BLOCK_SIZE, NUMBER_OF_BLOCKS); + /* Check if the Transfer is finished */ + Status = SD_WaitReadOperation(); + while(SD_GetStatus() != SD_TRANSFER_OK); + } + + /* Check the correctness of written data */ + if (Status == SD_OK) + { + TransferStatus2 = Buffercmp(Buffer_MultiBlock_Tx, Buffer_MultiBlock_Rx, MULTI_BUFFER_SIZE); + } + + if(TransferStatus2 == PASSED) + { + STM_EVAL_LEDOn(LED3); + } + else + { + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOn(LED4); + } +} + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint32_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return FAILED; + } + + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} + +/** + * @brief Fills buffer with user predefined data. + * @param pBuffer: pointer on the Buffer to fill + * @param BufferLength: size of the buffer to fill + * @param Offset: first value to fill on the Buffer + * @retval None + */ +void Fill_Buffer(uint8_t *pBuffer, uint32_t BufferLength, uint32_t Offset) +{ + uint16_t index = 0; + + /* Put in global buffer same values */ + for (index = 0; index < BufferLength; index++) + { + pBuffer[index] = index + Offset; + } +} + +/** + * @brief Checks if a buffer has all its values are equal to zero. + * @param pBuffer: buffer to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer values are zero + * FAILED: At least one value from pBuffer buffer is different from zero. + */ +TestStatus eBuffercmp(uint8_t* pBuffer, uint32_t BufferLength) +{ + while (BufferLength--) + { + /* In some SD Cards the erased state is 0xFF, in others it's 0x00 */ + if ((*pBuffer != 0xFF) && (*pBuffer != 0x00)) + { + return FAILED; + } + + pBuffer++; + } + + return PASSED; +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/readme.txt new file mode 100644 index 000000000..ddd462965 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/readme.txt @@ -0,0 +1,123 @@ +/** + @page SDIO_uSDCard How to use the SDIO to drive an SD card memory + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file SDIO/uSDCard/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the SDIO Example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a basic example of how to use the SDIO firmware library and +an associate driver to perform read/write operations on the SD Card memory (SD Card +V1.0, V1.1, V2.0 and SDHC (High Capacity) protocol)that could be mounted on the +STM322xG_EVAL board. +The example provides different SD Card transfer states and operations and here +below a description of each step: + - First the SDIO peripheral and SD Card are initialized using the SD_Init() + function: + - Configure the SDIO according to the desired SDIO_CK clock frequency. + - Reset the SD Card + - Identify the SD Card + - Initializes the SD Card + - Get the SD Card Info + - Select the SD Card + - Enable the Wide Bus mode (4-bit data) + + - SD Card Erase Operation + - Starts an Erase operation: Erase the corresponding blocks using + the SD_Erase() function + - Read the Erased blocks using the SD_ReadMultiBlocks() function + - Test if the corresponding Blocks are well erased: check if the + EraseStatus variable is equal to PASSED. If the erase operation is + passed LED1 is turned ON. + + - SD Card Single Block Operation + - Starts a Write operation: Write a single Block using the SD_WriteBlock() + function + - Read a single Block using the SD_ReadBlock() function + - Compare the written Block and the read one: check if the TransferStatus1 + variable is equal to PASSED. If the Single Block Read/write operation + is passed LED2 is turned ON. + + - SD Card Multiple Block Operation + - Starts a Multiple Write operation: Write a multi Blocks using the + SD_WriteMultiBlocks() function. + - Read a multiple Blocks using the SD_ReadMultiBlocks() function + - Compare the written Blocks and the read one: check if the TransferStatus2 + variable is equal to PASSED. If the Multiple Blocks Read/Write operation + is passed LED3 is turned ON. + +All data transfers are made by DMA. +At each operation, the SD Card presence and status is checked using the SD_GetStatus() +function and a global variable "Status" storing the results of the last operation. + +SD Card Operations and Written/Read data correctness is signaled by LED +lightening and though as follow: + - If the Erase operation is PASSED then LED1 ON else the LED4 is ON and LED1 is OFF + - If the Single Block Write/Read operation is PASSED then LED2 ON else the LED4 is ON and LED2 is OFF + - If the Multi Blocks Write/Read operation is PASSED then LED3 ON else the LED4 is ON and LED3 is OFF + - Any SD Card operation including the SD Initialization error is signaled by + LED4 ON. + +@par Directory contents + + - SDIO/uSDCard/system_stm32f2xx.c STM32F2xx system clock configuration file + - SDIO/uSDCard/stm32f2xx_conf.h Library Configuration file + - SDIO/uSDCard/stm32f2xx_it.c Interrupt handlers + - SDIO/uSDCard/stm32f2xx_it.h Header for stm32f2xx_it.c + - SDIO/uSDCard/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily + tailored to any other development board. + + - STM322xG-EVAL RevB + - Make sure that Jumper JP22 is in position 1<->2 + + - STM322xG-EVAL RevB + - Make sure that Jumpers JP22 and JP16 are in position 1<->2 + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Add the "stm322xg_eval_sdio_sd.c" file (under Utilities\STM32_EVAL\STM322xG_EVAL) to the project source list + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/stm32f2xx_conf.h new file mode 100644 index 000000000..24eb767a2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file SDIO/uSDCard/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/stm32f2xx_it.c new file mode 100644 index 000000000..c3d02b7d9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/stm32f2xx_it.c @@ -0,0 +1,196 @@ +/** + ****************************************************************************** + * @file SDIO/uSDCard/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval_sdio_sd.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SDIO_uSDCard + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ +/** + * @brief This function handles SDIO global interrupt request. + * @param None + * @retval None + */ +void SDIO_IRQHandler(void) +{ + /* Process All SDIO Interrupt Sources */ + SD_ProcessIRQSrc(); +} + +/** + * @brief This function handles DMA2 Stream3 or DMA2 Stream6 global interrupts + * requests. + * @param None + * @retval None + */ +void SD_SDIO_DMA_IRQHANDLER(void) +{ + /* Process DMA2 Stream3 or DMA2 Stream6 Interrupt Sources */ + SD_ProcessDMAIRQ(); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/stm32f2xx_it.h new file mode 100644 index 000000000..bd39ede01 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file SDIO/uSDCard/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void SDIO_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SDIO/uSDCard/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/main.c new file mode 100644 index 000000000..802691669 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/main.c @@ -0,0 +1,189 @@ +/** + ****************************************************************************** + * @file SPI/SPI_FLASH/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" +#include "spi_flash.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SPI_FLASH + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Private define ------------------------------------------------------------*/ +#define FLASH_WRITE_ADDRESS 0x700000 +#define FLASH_READ_ADDRESS FLASH_WRITE_ADDRESS +#define FLASH_SECTOR_TO_ERASE FLASH_WRITE_ADDRESS + +#define BufferSize (countof(Tx_Buffer)-1) + +/* Private macro -------------------------------------------------------------*/ +#define countof(a) (sizeof(a) / sizeof(*(a))) + +/* Private variables ---------------------------------------------------------*/ +uint8_t Tx_Buffer[] = "STM32F2xx SPI Firmware Library Example: communication with an M25P SPI FLASH"; +uint8_t Rx_Buffer[BufferSize]; +__IO uint8_t Index = 0x0; +volatile TestStatus TransferStatus1 = FAILED, TransferStatus2 = PASSED; +__IO uint32_t FlashID = 0; + +/* Private functions ---------------------------------------------------------*/ +TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize Leds mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + + /* Initialize the SPI FLASH driver */ + sFLASH_Init(); + + /* Get SPI Flash ID */ + FlashID = sFLASH_ReadID(); + + /* Check the SPI Flash ID */ + if (FlashID == sFLASH_M25P64_ID) + { + /* OK: Turn on LD1 */ + STM_EVAL_LEDOn(LED1); + + /* Perform a write in the Flash followed by a read of the written data */ + /* Erase SPI FLASH Sector to write on */ + sFLASH_EraseSector(FLASH_SECTOR_TO_ERASE); + + /* Write Tx_Buffer data to SPI FLASH memory */ + sFLASH_WriteBuffer(Tx_Buffer, FLASH_WRITE_ADDRESS, BufferSize); + + /* Read data from SPI FLASH memory */ + sFLASH_ReadBuffer(Rx_Buffer, FLASH_READ_ADDRESS, BufferSize); + + /* Check the correctness of written dada */ + TransferStatus1 = Buffercmp(Tx_Buffer, Rx_Buffer, BufferSize); + /* TransferStatus1 = PASSED, if the transmitted and received data by SPI1 + are the same */ + /* TransferStatus1 = FAILED, if the transmitted and received data by SPI1 + are different */ + + /* Perform an erase in the Flash followed by a read of the written data */ + /* Erase SPI FLASH Sector to write on */ + sFLASH_EraseSector(FLASH_SECTOR_TO_ERASE); + + /* Read data from SPI FLASH memory */ + sFLASH_ReadBuffer(Rx_Buffer, FLASH_READ_ADDRESS, BufferSize); + + /* Check the correctness of erasing operation dada */ + for (Index = 0; Index < BufferSize; Index++) + { + if (Rx_Buffer[Index] != 0xFF) + { + TransferStatus2 = FAILED; + } + } + /* TransferStatus2 = PASSED, if the specified sector part is erased */ + /* TransferStatus2 = FAILED, if the specified sector part is not well erased */ + } + else + { + /* Error: Turn on LD2 */ + STM_EVAL_LEDOn(LED2); + } + + while (1) + {} +} + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return FAILED; + } + + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + {} +} + +#endif +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/readme.txt new file mode 100644 index 000000000..9f5662e36 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/readme.txt @@ -0,0 +1,102 @@ +/** + @page SPI_FLASH SPI FLASH example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file SPI/SPI_FLASH/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the SPI FLASH example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a basic example of how to use the SPI firmware library +and an associated driver "spi_flash.c" to communicate with an M25P64 SPI FLASH. + +The first step consist in reading the SPI Flash ID. A comparison between the ID +read from SPI flash and the expected one is done and LED1 is turned on in case +of success otherwise LED2 is turned on. + +Using this driver the program performs an erase of the sector to be accessed, a +write of a Tx_Buffer, defined in the main.c file, to the memory followed by a read +of the written data. Then data read from the memory stored in the Rx_Buffer are +compared with the expected values of the Tx_Buffer. The result of this comparison +is stored in the "TransferStatus1" variable. + +A second erase of the same sector is done at the end, and a test is done to be +sure that all the data written there are erased further to the sector erase. All +the data location are read and checked with 0xFF value. The result of this test +is stored in "TransferStatus2" variable which is FAILED in case of error. + +The FLASH_WRITE_ADDRESS and the FLASH_READ_ADDRESS where the program start the +write and the read operations are defined in the main.c file. + + +@par Directory contents + + - SPI/SPI_FLASH/spi_flash.c SPI M25Pxxx driver + - SPI/SPI_FLASH/spi_flash.h Header for spi_flash.c + - SPI/SPI_FLASH/stm32f2xx_conf.h Library Configuration file + - SPI/SPI_FLASH/stm32f2xx_it.c Interrupt handlers + - SPI/SPI_FLASH/stm32f2xx_it.h Header for stm32f2xx_it.c + - SPI/SPI_FLASH/main.c Main program + - SPI/SPI_FLASH/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx. + + - This example can't be tested with STM322xG-EVAL evaluation board (no SPI + FLASH available). + + - HW platform Set-up + - Connect LED1 and LED2 respectively to PG.06 and PG.08 pins + - Connect both SPI2 and SPI FLASH pins as following: + - Connect SPI2_NSS (PI0) pin to SPI Flash chip select (pin1) + - Connect SPI2_SCK (PI1) pin to SPI Flash serial clock (pin6) + - Connect SPI2_MISO(PI2) pin to SPI Flash serial data output (pin2) + - Connect SPI2_MOSI(PI3) pin to SPI Flash serial data input (pin5) + - Connect SPI Flash Write Protect (pin3) to Vdd + - Connect SPI Flash Hold (pin7) to Vdd + - Connect SPI Flash Vcc (pin8) to Vdd + - Connect SPI Flash Vss (pin4) to Vss + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Add the file "spi_flash.c" to the project source list + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/spi_flash.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/spi_flash.c new file mode 100644 index 000000000..dd7f937ab --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/spi_flash.c @@ -0,0 +1,579 @@ +/** + ****************************************************************************** + * @file SPI/SPI_FLASH/spi_flash.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file provides a set of functions needed to manage the SPI M25Pxxx + * FLASH memory. + * + * =================================================================== + * Notes: + * - There is no SPI FLASH memory available in STM322xG-EVAL board, + * to use this driver you have to build your own hardware. + * =================================================================== + * + * It implements a high level communication layer for read and write + * from/to this memory. The needed STM32 hardware resources (SPI and + * GPIO) are defined in spi_flash.h file, and the initialization is + * performed in sFLASH_LowLevel_Init() function. + * + * You can easily tailor this driver to any development board, by just + * adapting the defines for hardware resources and sFLASH_LowLevel_Init() + * function. + * + * +-----------------------------------------------------------+ + * | Pin assignment | + * +-----------------------------+---------------+-------------+ + * | STM32 SPI Pins | sFLASH | Pin | + * +-----------------------------+---------------+-------------+ + * | sFLASH_CS_PIN | ChipSelect(/S)| 1 | + * | sFLASH_SPI_MISO_PIN / MISO | DataOut(Q) | 2 | + * | | VCC | 3 (3.3 V)| + * | | GND | 4 (0 V) | + * | sFLASH_SPI_MOSI_PIN / MOSI | DataIn(D) | 5 | + * | sFLASH_SPI_SCK_PIN / SCK | Clock(C) | 6 | + * | | VCC | 7 (3.3 V)| + * | | VCC | 8 (3.3 V)| + * +-----------------------------+---------------+-------------+ + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "spi_flash.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SPI_FLASH + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +void sFLASH_LowLevel_DeInit(void); +void sFLASH_LowLevel_Init(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief DeInitializes the peripherals used by the SPI FLASH driver. + * @param None + * @retval None + */ +void sFLASH_DeInit(void) +{ + sFLASH_LowLevel_DeInit(); +} + +/** + * @brief Initializes the peripherals used by the SPI FLASH driver. + * @param None + * @retval None + */ +void sFLASH_Init(void) +{ + SPI_InitTypeDef SPI_InitStructure; + + sFLASH_LowLevel_Init(); + + /*!< Deselect the FLASH: Chip Select high */ + sFLASH_CS_HIGH(); + + /*!< SPI configuration */ + SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; + SPI_InitStructure.SPI_Mode = SPI_Mode_Master; + SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; + SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; + SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; + SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; + SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; + + SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; + SPI_InitStructure.SPI_CRCPolynomial = 7; + SPI_Init(sFLASH_SPI, &SPI_InitStructure); + + /*!< Enable the sFLASH_SPI */ + SPI_Cmd(sFLASH_SPI, ENABLE); +} + +/** + * @brief Erases the specified FLASH sector. + * @param SectorAddr: address of the sector to erase. + * @retval None + */ +void sFLASH_EraseSector(uint32_t SectorAddr) +{ + /*!< Send write enable instruction */ + sFLASH_WriteEnable(); + + /*!< Sector Erase */ + /*!< Select the FLASH: Chip Select low */ + sFLASH_CS_LOW(); + /*!< Send Sector Erase instruction */ + sFLASH_SendByte(sFLASH_CMD_SE); + /*!< Send SectorAddr high nibble address byte */ + sFLASH_SendByte((SectorAddr & 0xFF0000) >> 16); + /*!< Send SectorAddr medium nibble address byte */ + sFLASH_SendByte((SectorAddr & 0xFF00) >> 8); + /*!< Send SectorAddr low nibble address byte */ + sFLASH_SendByte(SectorAddr & 0xFF); + /*!< Deselect the FLASH: Chip Select high */ + sFLASH_CS_HIGH(); + + /*!< Wait the end of Flash writing */ + sFLASH_WaitForWriteEnd(); +} + +/** + * @brief Erases the entire FLASH. + * @param None + * @retval None + */ +void sFLASH_EraseBulk(void) +{ + /*!< Send write enable instruction */ + sFLASH_WriteEnable(); + + /*!< Bulk Erase */ + /*!< Select the FLASH: Chip Select low */ + sFLASH_CS_LOW(); + /*!< Send Bulk Erase instruction */ + sFLASH_SendByte(sFLASH_CMD_BE); + /*!< Deselect the FLASH: Chip Select high */ + sFLASH_CS_HIGH(); + + /*!< Wait the end of Flash writing */ + sFLASH_WaitForWriteEnd(); +} + +/** + * @brief Writes more than one byte to the FLASH with a single WRITE cycle + * (Page WRITE sequence). + * @note The number of byte can't exceed the FLASH page size. + * @param pBuffer: pointer to the buffer containing the data to be written + * to the FLASH. + * @param WriteAddr: FLASH's internal address to write to. + * @param NumByteToWrite: number of bytes to write to the FLASH, must be equal + * or less than "sFLASH_PAGESIZE" value. + * @retval None + */ +void sFLASH_WritePage(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite) +{ + /*!< Enable the write access to the FLASH */ + sFLASH_WriteEnable(); + + /*!< Select the FLASH: Chip Select low */ + sFLASH_CS_LOW(); + /*!< Send "Write to Memory " instruction */ + sFLASH_SendByte(sFLASH_CMD_WRITE); + /*!< Send WriteAddr high nibble address byte to write to */ + sFLASH_SendByte((WriteAddr & 0xFF0000) >> 16); + /*!< Send WriteAddr medium nibble address byte to write to */ + sFLASH_SendByte((WriteAddr & 0xFF00) >> 8); + /*!< Send WriteAddr low nibble address byte to write to */ + sFLASH_SendByte(WriteAddr & 0xFF); + + /*!< while there is data to be written on the FLASH */ + while (NumByteToWrite--) + { + /*!< Send the current byte */ + sFLASH_SendByte(*pBuffer); + /*!< Point on the next byte to be written */ + pBuffer++; + } + + /*!< Deselect the FLASH: Chip Select high */ + sFLASH_CS_HIGH(); + + /*!< Wait the end of Flash writing */ + sFLASH_WaitForWriteEnd(); +} + +/** + * @brief Writes block of data to the FLASH. In this function, the number of + * WRITE cycles are reduced, using Page WRITE sequence. + * @param pBuffer: pointer to the buffer containing the data to be written + * to the FLASH. + * @param WriteAddr: FLASH's internal address to write to. + * @param NumByteToWrite: number of bytes to write to the FLASH. + * @retval None + */ +void sFLASH_WriteBuffer(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite) +{ + uint8_t NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0; + + Addr = WriteAddr % sFLASH_SPI_PAGESIZE; + count = sFLASH_SPI_PAGESIZE - Addr; + NumOfPage = NumByteToWrite / sFLASH_SPI_PAGESIZE; + NumOfSingle = NumByteToWrite % sFLASH_SPI_PAGESIZE; + + if (Addr == 0) /*!< WriteAddr is sFLASH_PAGESIZE aligned */ + { + if (NumOfPage == 0) /*!< NumByteToWrite < sFLASH_PAGESIZE */ + { + sFLASH_WritePage(pBuffer, WriteAddr, NumByteToWrite); + } + else /*!< NumByteToWrite > sFLASH_PAGESIZE */ + { + while (NumOfPage--) + { + sFLASH_WritePage(pBuffer, WriteAddr, sFLASH_SPI_PAGESIZE); + WriteAddr += sFLASH_SPI_PAGESIZE; + pBuffer += sFLASH_SPI_PAGESIZE; + } + + sFLASH_WritePage(pBuffer, WriteAddr, NumOfSingle); + } + } + else /*!< WriteAddr is not sFLASH_PAGESIZE aligned */ + { + if (NumOfPage == 0) /*!< NumByteToWrite < sFLASH_PAGESIZE */ + { + if (NumOfSingle > count) /*!< (NumByteToWrite + WriteAddr) > sFLASH_PAGESIZE */ + { + temp = NumOfSingle - count; + + sFLASH_WritePage(pBuffer, WriteAddr, count); + WriteAddr += count; + pBuffer += count; + + sFLASH_WritePage(pBuffer, WriteAddr, temp); + } + else + { + sFLASH_WritePage(pBuffer, WriteAddr, NumByteToWrite); + } + } + else /*!< NumByteToWrite > sFLASH_PAGESIZE */ + { + NumByteToWrite -= count; + NumOfPage = NumByteToWrite / sFLASH_SPI_PAGESIZE; + NumOfSingle = NumByteToWrite % sFLASH_SPI_PAGESIZE; + + sFLASH_WritePage(pBuffer, WriteAddr, count); + WriteAddr += count; + pBuffer += count; + + while (NumOfPage--) + { + sFLASH_WritePage(pBuffer, WriteAddr, sFLASH_SPI_PAGESIZE); + WriteAddr += sFLASH_SPI_PAGESIZE; + pBuffer += sFLASH_SPI_PAGESIZE; + } + + if (NumOfSingle != 0) + { + sFLASH_WritePage(pBuffer, WriteAddr, NumOfSingle); + } + } + } +} + +/** + * @brief Reads a block of data from the FLASH. + * @param pBuffer: pointer to the buffer that receives the data read from the FLASH. + * @param ReadAddr: FLASH's internal address to read from. + * @param NumByteToRead: number of bytes to read from the FLASH. + * @retval None + */ +void sFLASH_ReadBuffer(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead) +{ + /*!< Select the FLASH: Chip Select low */ + sFLASH_CS_LOW(); + + /*!< Send "Read from Memory " instruction */ + sFLASH_SendByte(sFLASH_CMD_READ); + + /*!< Send ReadAddr high nibble address byte to read from */ + sFLASH_SendByte((ReadAddr & 0xFF0000) >> 16); + /*!< Send ReadAddr medium nibble address byte to read from */ + sFLASH_SendByte((ReadAddr& 0xFF00) >> 8); + /*!< Send ReadAddr low nibble address byte to read from */ + sFLASH_SendByte(ReadAddr & 0xFF); + + while (NumByteToRead--) /*!< while there is data to be read */ + { + /*!< Read a byte from the FLASH */ + *pBuffer = sFLASH_SendByte(sFLASH_DUMMY_BYTE); + /*!< Point to the next location where the byte read will be saved */ + pBuffer++; + } + + /*!< Deselect the FLASH: Chip Select high */ + sFLASH_CS_HIGH(); +} + +/** + * @brief Reads FLASH identification. + * @param None + * @retval FLASH identification + */ +uint32_t sFLASH_ReadID(void) +{ + uint32_t Temp = 0, Temp0 = 0, Temp1 = 0, Temp2 = 0; + + /*!< Select the FLASH: Chip Select low */ + sFLASH_CS_LOW(); + + /*!< Send "RDID " instruction */ + sFLASH_SendByte(0x9F); + + /*!< Read a byte from the FLASH */ + Temp0 = sFLASH_SendByte(sFLASH_DUMMY_BYTE); + + /*!< Read a byte from the FLASH */ + Temp1 = sFLASH_SendByte(sFLASH_DUMMY_BYTE); + + /*!< Read a byte from the FLASH */ + Temp2 = sFLASH_SendByte(sFLASH_DUMMY_BYTE); + + /*!< Deselect the FLASH: Chip Select high */ + sFLASH_CS_HIGH(); + + Temp = (Temp0 << 16) | (Temp1 << 8) | Temp2; + + return Temp; +} + +/** + * @brief Initiates a read data byte (READ) sequence from the Flash. + * This is done by driving the /CS line low to select the device, then the READ + * instruction is transmitted followed by 3 bytes address. This function exit + * and keep the /CS line low, so the Flash still being selected. With this + * technique the whole content of the Flash is read with a single READ instruction. + * @param ReadAddr: FLASH's internal address to read from. + * @retval None + */ +void sFLASH_StartReadSequence(uint32_t ReadAddr) +{ + /*!< Select the FLASH: Chip Select low */ + sFLASH_CS_LOW(); + + /*!< Send "Read from Memory " instruction */ + sFLASH_SendByte(sFLASH_CMD_READ); + + /*!< Send the 24-bit address of the address to read from -------------------*/ + /*!< Send ReadAddr high nibble address byte */ + sFLASH_SendByte((ReadAddr & 0xFF0000) >> 16); + /*!< Send ReadAddr medium nibble address byte */ + sFLASH_SendByte((ReadAddr& 0xFF00) >> 8); + /*!< Send ReadAddr low nibble address byte */ + sFLASH_SendByte(ReadAddr & 0xFF); +} + +/** + * @brief Reads a byte from the SPI Flash. + * @note This function must be used only if the Start_Read_Sequence function + * has been previously called. + * @param None + * @retval Byte Read from the SPI Flash. + */ +uint8_t sFLASH_ReadByte(void) +{ + return (sFLASH_SendByte(sFLASH_DUMMY_BYTE)); +} + +/** + * @brief Sends a byte through the SPI interface and return the byte received + * from the SPI bus. + * @param byte: byte to send. + * @retval The value of the received byte. + */ +uint8_t sFLASH_SendByte(uint8_t byte) +{ + /*!< Loop while DR register in not emplty */ + while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET); + + /*!< Send byte through the SPI1 peripheral */ + SPI_I2S_SendData(sFLASH_SPI, byte); + + /*!< Wait to receive a byte */ + while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_RXNE) == RESET); + + /*!< Return the byte read from the SPI bus */ + return SPI_I2S_ReceiveData(sFLASH_SPI); +} + +/** + * @brief Sends a Half Word through the SPI interface and return the Half Word + * received from the SPI bus. + * @param HalfWord: Half Word to send. + * @retval The value of the received Half Word. + */ +uint16_t sFLASH_SendHalfWord(uint16_t HalfWord) +{ + /*!< Loop while DR register in not emplty */ + while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET); + + /*!< Send Half Word through the sFLASH peripheral */ + SPI_I2S_SendData(sFLASH_SPI, HalfWord); + + /*!< Wait to receive a Half Word */ + while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_RXNE) == RESET); + + /*!< Return the Half Word read from the SPI bus */ + return SPI_I2S_ReceiveData(sFLASH_SPI); +} + +/** + * @brief Enables the write access to the FLASH. + * @param None + * @retval None + */ +void sFLASH_WriteEnable(void) +{ + /*!< Select the FLASH: Chip Select low */ + sFLASH_CS_LOW(); + + /*!< Send "Write Enable" instruction */ + sFLASH_SendByte(sFLASH_CMD_WREN); + + /*!< Deselect the FLASH: Chip Select high */ + sFLASH_CS_HIGH(); +} + +/** + * @brief Polls the status of the Write In Progress (WIP) flag in the FLASH's + * status register and loop until write opertaion has completed. + * @param None + * @retval None + */ +void sFLASH_WaitForWriteEnd(void) +{ + uint8_t flashstatus = 0; + + /*!< Select the FLASH: Chip Select low */ + sFLASH_CS_LOW(); + + /*!< Send "Read Status Register" instruction */ + sFLASH_SendByte(sFLASH_CMD_RDSR); + + /*!< Loop as long as the memory is busy with a write cycle */ + do + { + /*!< Send a dummy byte to generate the clock needed by the FLASH + and put the value of the status register in FLASH_Status variable */ + flashstatus = sFLASH_SendByte(sFLASH_DUMMY_BYTE); + + } + while ((flashstatus & sFLASH_WIP_FLAG) == SET); /* Write in progress */ + + /*!< Deselect the FLASH: Chip Select high */ + sFLASH_CS_HIGH(); +} + +/** + * @brief Initializes the peripherals used by the SPI FLASH driver. + * @param None + * @retval None + */ +void sFLASH_LowLevel_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /*!< Enable the SPI clock */ + sFLASH_SPI_CLK_INIT(sFLASH_SPI_CLK, ENABLE); + + /*!< Enable GPIO clocks */ + RCC_AHB1PeriphClockCmd(sFLASH_SPI_SCK_GPIO_CLK | sFLASH_SPI_MISO_GPIO_CLK | + sFLASH_SPI_MOSI_GPIO_CLK | sFLASH_CS_GPIO_CLK, ENABLE); + + /*!< SPI pins configuration *************************************************/ + + /*!< Connect SPI pins to AF5 */ + GPIO_PinAFConfig(sFLASH_SPI_SCK_GPIO_PORT, sFLASH_SPI_SCK_SOURCE, sFLASH_SPI_SCK_AF); + GPIO_PinAFConfig(sFLASH_SPI_MISO_GPIO_PORT, sFLASH_SPI_MISO_SOURCE, sFLASH_SPI_MISO_AF); + GPIO_PinAFConfig(sFLASH_SPI_MOSI_GPIO_PORT, sFLASH_SPI_MOSI_SOURCE, sFLASH_SPI_MOSI_AF); + + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; + + /*!< SPI SCK pin configuration */ + GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN; + GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); + + /*!< SPI MOSI pin configuration */ + GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN; + GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); + + /*!< SPI MISO pin configuration */ + GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN; + GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); + + /*!< Configure sFLASH Card CS pin in output pushpull mode ********************/ + GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure); +} + +/** + * @brief DeInitializes the peripherals used by the SPI FLASH driver. + * @param None + * @retval None + */ +void sFLASH_LowLevel_DeInit(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /*!< Disable the sFLASH_SPI ************************************************/ + SPI_Cmd(sFLASH_SPI, DISABLE); + + /*!< DeInitializes the sFLASH_SPI *******************************************/ + SPI_I2S_DeInit(sFLASH_SPI); + + /*!< sFLASH_SPI Periph clock disable ****************************************/ + sFLASH_SPI_CLK_INIT(sFLASH_SPI_CLK, DISABLE); + + /*!< Configure all pins used by the SPI as input floating *******************/ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + + GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN; + GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN; + GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN; + GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN; + GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure); +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/spi_flash.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/spi_flash.h new file mode 100644 index 000000000..681dbe8ae --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/spi_flash.h @@ -0,0 +1,121 @@ +/** + ****************************************************************************** + * @file spi_flash.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains all the functions prototypes for the spi_flash + * firmware driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __SPI_FLASH_H +#define __SPI_FLASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* M25P SPI Flash supported commands */ +#define sFLASH_CMD_WRITE 0x02 /* Write to Memory instruction */ +#define sFLASH_CMD_WRSR 0x01 /* Write Status Register instruction */ +#define sFLASH_CMD_WREN 0x06 /* Write enable instruction */ +#define sFLASH_CMD_READ 0x03 /* Read from Memory instruction */ +#define sFLASH_CMD_RDSR 0x05 /* Read Status Register instruction */ +#define sFLASH_CMD_RDID 0x9F /* Read identification */ +#define sFLASH_CMD_SE 0xD8 /* Sector Erase instruction */ +#define sFLASH_CMD_BE 0xC7 /* Bulk Erase instruction */ + +#define sFLASH_WIP_FLAG 0x01 /* Write In Progress (WIP) flag */ + +#define sFLASH_DUMMY_BYTE 0xA5 +#define sFLASH_SPI_PAGESIZE 0x100 + +#define sFLASH_M25P128_ID 0x202018 +#define sFLASH_M25P64_ID 0x202017 + +/* M25P FLASH SPI Interface pins */ +#define sFLASH_SPI SPI2 +#define sFLASH_SPI_CLK RCC_APB1Periph_SPI2 +#define sFLASH_SPI_CLK_INIT RCC_APB1PeriphClockCmd + +#define sFLASH_SPI_SCK_PIN GPIO_Pin_1 +#define sFLASH_SPI_SCK_GPIO_PORT GPIOI +#define sFLASH_SPI_SCK_GPIO_CLK RCC_AHB1Periph_GPIOI +#define sFLASH_SPI_SCK_SOURCE GPIO_PinSource1 +#define sFLASH_SPI_SCK_AF GPIO_AF_SPI2 + +#define sFLASH_SPI_MISO_PIN GPIO_Pin_2 +#define sFLASH_SPI_MISO_GPIO_PORT GPIOI +#define sFLASH_SPI_MISO_GPIO_CLK RCC_AHB1Periph_GPIOI +#define sFLASH_SPI_MISO_SOURCE GPIO_PinSource2 +#define sFLASH_SPI_MISO_AF GPIO_AF_SPI2 + +#define sFLASH_SPI_MOSI_PIN GPIO_Pin_3 +#define sFLASH_SPI_MOSI_GPIO_PORT GPIOI +#define sFLASH_SPI_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOI +#define sFLASH_SPI_MOSI_SOURCE GPIO_PinSource3 +#define sFLASH_SPI_MOSI_AF GPIO_AF_SPI2 + +#define sFLASH_CS_PIN GPIO_Pin_0 +#define sFLASH_CS_GPIO_PORT GPIOI +#define sFLASH_CS_GPIO_CLK RCC_AHB1Periph_GPIOI + +/* Exported macro ------------------------------------------------------------*/ +/* Select sFLASH: Chip Select pin low */ +#define sFLASH_CS_LOW() GPIO_ResetBits(sFLASH_CS_GPIO_PORT, sFLASH_CS_PIN) +/* Deselect sFLASH: Chip Select pin high */ +#define sFLASH_CS_HIGH() GPIO_SetBits(sFLASH_CS_GPIO_PORT, sFLASH_CS_PIN) + +/* Exported functions ------------------------------------------------------- */ + +/* High layer functions */ +void sFLASH_DeInit(void); +void sFLASH_Init(void); +void sFLASH_EraseSector(uint32_t SectorAddr); +void sFLASH_EraseBulk(void); +void sFLASH_WritePage(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite); +void sFLASH_WriteBuffer(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite); +void sFLASH_ReadBuffer(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead); +uint32_t sFLASH_ReadID(void); +void sFLASH_StartReadSequence(uint32_t ReadAddr); + +/* Low layer functions */ +uint8_t sFLASH_ReadByte(void); +uint8_t sFLASH_SendByte(uint8_t byte); +uint16_t sFLASH_SendHalfWord(uint16_t HalfWord); +void sFLASH_WriteEnable(void); +void sFLASH_WaitForWriteEnd(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __SPI_FLASH_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/stm32f2xx_conf.h new file mode 100644 index 000000000..457a05dcd --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file SPI/SPI_FLASH/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/stm32f2xx_it.c new file mode 100644 index 000000000..f41f57016 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file SPI/SPI_FLASH/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SPI_FLASH + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/stm32f2xx_it.h new file mode 100644 index 000000000..cbafabf27 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file SPI/SPI_FLASH/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_FLASH/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/main.c new file mode 100644 index 000000000..3ba4272ae --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/main.c @@ -0,0 +1,454 @@ +/** + ****************************************************************************** + * @file SPI/SPI_TwoBoards/DataExchangeInterrupt/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SPI_DataExchangeInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +SPI_InitTypeDef SPI_InitStructure; +uint8_t TxBuffer[] = "SPI Interrupt Example: Communication between two SPI using Interrupts"; +__IO uint32_t TimeOut = 0; + +#ifdef SPI_SLAVE + __IO uint8_t RxBuffer [RXBUFFERSIZE]; + __IO uint8_t Rx_Idx = 0; +#endif +#ifdef SPI_MASTER + JOYState_TypeDef ReleasedButton = JOY_NONE; + JOYState_TypeDef PressedButton = JOY_NONE; + __IO uint8_t Tx_Idx = 0; + __IO uint8_t CmdTransmitted = CMD_NONE; + __IO uint8_t CmdStatus = 0x00; + __IO uint8_t NumberOfByte = 0; +#endif + +/* Private function prototypes -----------------------------------------------*/ +static void SPI_Config(void); +static void SysTickConfig(void); + +#ifdef SPI_MASTER + static void TimeOut_UserCallback(void); +#endif + +#ifdef SPI_SLAVE + static TestStatus Buffercmp(uint8_t* pBuffer1, __IO uint8_t* pBuffer2, uint16_t BufferLength); + static void Fill_Buffer(__IO uint8_t *pBuffer, uint16_t BufferLength); +#endif + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* SPI configuration -------------------------------------------------------*/ + SPI_Config(); + + /* SysTick configuration ---------------------------------------------------*/ + SysTickConfig(); + + /* LEDs configuration ------------------------------------------------------*/ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + +#ifdef SPI_MASTER + /* Master board configuration ----------------------------------------------*/ + + /* Initialize push-buttons mounted on STM322xG-EVAL board */ + TimeOut = USER_TIMEOUT; + while ((IOE_Config() != IOE_OK) && (TimeOut != 0x00)) + { + } + + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Initializes the SPI communication */ + SPI_InitStructure.SPI_Mode = SPI_Mode_Master; + SPI_Init(SPIx, &SPI_InitStructure); + + /* The Data transfer is performed in the SPI interrupt routine */ + /* Enable the SPI peripheral */ + SPI_Cmd(SPIx, ENABLE); + + while (1) + { + /* Prepare Command to be transmitted -------------------------------------*/ + + /* Waiting joystick pressed */ + PressedButton = JOY_NONE; + while (PressedButton == JOY_NONE) + { + PressedButton = IOE_JoyStickGetState(); + } + + /* Waiting joystick released */ + ReleasedButton = IOE_JoyStickGetState(); + while ((PressedButton == ReleasedButton) && (ReleasedButton != JOY_NONE)) + { + ReleasedButton = IOE_JoyStickGetState(); + } + + /* For each joystick state correspond to a Transaction command -----------*/ + CmdTransmitted = CMD_NONE; + switch (PressedButton) + { + /* JOY_RIGHT button pressed */ + case JOY_RIGHT: + CmdTransmitted = CMD_RIGHT; + NumberOfByte = CMD_RIGHT_SIZE; + break; + /* JOY_LEFT button pressed */ + case JOY_LEFT: + CmdTransmitted = CMD_LEFT; + NumberOfByte = CMD_LEFT_SIZE; + break; + /* JOY_UP button pressed */ + case JOY_UP: + CmdTransmitted = CMD_UP; + NumberOfByte = CMD_UP_SIZE; + break; + /* JOY_DOWN button pressed */ + case JOY_DOWN: + CmdTransmitted = CMD_DOWN; + NumberOfByte = CMD_DOWN_SIZE; + break; + /* JOY_SEL button pressed */ + case JOY_SEL: + CmdTransmitted = CMD_SEL; + NumberOfByte = CMD_SEL_SIZE; + break; + default: + break; + } + + /* Master Transmit Command followed by Data Transaction ------------------*/ + CmdStatus = 0x00; + Tx_Idx = 0; + if (CmdTransmitted != CMD_NONE) + { + /* Enable the Tx buffer empty interrupt */ + SPI_I2S_ITConfig(SPIx, SPI_I2S_IT_TXE, ENABLE); + + /* Waiting the end of Data transfer */ + while (Tx_Idx < GetVar_NbrOfData()) + { + } + } + } +#endif /* SPI_MASTER */ + +#ifdef SPI_SLAVE + /* Slave board configuration -----------------------------------------------*/ + + /* Initializes the SPI communication */ + SPI_I2S_DeInit(SPIx); + SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; + SPI_Init(SPIx, &SPI_InitStructure); + /* Enable the Rx buffer not empty interrupt */ + SPI_I2S_ITConfig(SPIx, SPI_I2S_IT_RXNE, ENABLE); + /* Enable the SPI peripheral */ + SPI_Cmd(SPIx, ENABLE); + + /* Infinite Loop */ + while (1) + { + + Rx_Idx = 0; + /* Clear the RxBuffer */ + Fill_Buffer(RxBuffer, TXBUFFERSIZE); + + /* Waiting Transaction Command Byte reception ----------------------------*/ + while (RxBuffer[0] == CMD_NONE) + { + } + + /* Waiting Transaction Data reception ------------------------------------*/ + TimeOut = 1; + while (TimeOut != 0x00) + { + } + + /* Check Transaction data correctness ------------------------------------*/ + switch (RxBuffer[0]) + { + /* CMD_RIGHT command received */ + case CMD_RIGHT: + if (Buffercmp(TxBuffer, &RxBuffer[1], CMD_RIGHT_SIZE) != FAILED) + { + /* Turn ON LED2 and LED3 */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + /* Turn OFF LED4 */ + STM_EVAL_LEDOff(LED4); + } + break; + /* CMD_LEFT command received */ + case CMD_LEFT: + if (Buffercmp(TxBuffer, &RxBuffer[1], CMD_LEFT_SIZE) != FAILED) + { + /* Turn ON LED4 */ + STM_EVAL_LEDOn(LED4); + /* Turn OFF LED2 and LED3 */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + } + break; + /* CMD_UP command received */ + case CMD_UP: + if (Buffercmp(TxBuffer, &RxBuffer[1], CMD_UP_SIZE) != FAILED) + { + /* Turn ON LED2 */ + STM_EVAL_LEDOn(LED2); + /* Turn OFF LED3 and LED4 */ + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } + break; + /* CMD_DOWN command received */ + case CMD_DOWN: + if (Buffercmp(TxBuffer, &RxBuffer[1], CMD_DOWN_SIZE) != FAILED) + { + /* Turn ON LED3 */ + STM_EVAL_LEDOn(LED3); + /* Turn OFF LED2 and LED4 */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED4); + } + break; + /* CMD_SEL command received */ + case CMD_SEL: + if (Buffercmp(TxBuffer, &RxBuffer[1], CMD_SEL_SIZE) != FAILED) + { + /* Turn ON LED2, LED3 and LED4 */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + break; + default: + break; + } + } +#endif /* SPI_SLAVE */ +} + +/** + * @brief Configures the SPI Peripheral. + * @param None + * @retval None + */ +static void SPI_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* Peripheral Clock Enable -------------------------------------------------*/ + /* Enable the SPI clock */ + SPIx_CLK_INIT(SPIx_CLK, ENABLE); + + /* Enable GPIO clocks */ + RCC_AHB1PeriphClockCmd(SPIx_SCK_GPIO_CLK | SPIx_MISO_GPIO_CLK | SPIx_MOSI_GPIO_CLK, ENABLE); + + /* SPI GPIO Configuration --------------------------------------------------*/ + /* Connect SPI pins to AF5 */ + GPIO_PinAFConfig(SPIx_SCK_GPIO_PORT, SPIx_SCK_SOURCE, SPIx_SCK_AF); + GPIO_PinAFConfig(SPIx_MOSI_GPIO_PORT, SPIx_MOSI_SOURCE, SPIx_MOSI_AF); + + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; + + /* SPI SCK pin configuration */ + GPIO_InitStructure.GPIO_Pin = SPIx_SCK_PIN; + GPIO_Init(SPIx_SCK_GPIO_PORT, &GPIO_InitStructure); + + /* SPI MOSI pin configuration */ + GPIO_InitStructure.GPIO_Pin = SPIx_MOSI_PIN; + GPIO_Init(SPIx_MOSI_GPIO_PORT, &GPIO_InitStructure); + + /* SPI configuration -------------------------------------------------------*/ + SPI_I2S_DeInit(SPIx); + SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; + SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; + SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; + SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; + SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; + SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; + SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; + SPI_InitStructure.SPI_CRCPolynomial = 7; + + /* Configure the Priority Group to 1 bit */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); + + /* Configure the SPI interrupt priority */ + NVIC_InitStructure.NVIC_IRQChannel = SPIx_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Configure a SysTick Base time to 10 ms. + * @param None + * @retval None + */ +static void SysTickConfig(void) +{ + /* Setup SysTick Timer for 10ms interrupts */ + if (SysTick_Config(SystemCoreClock / 100)) + { + /* Capture error */ + while (1); + } + + /* Configure the SysTick handler priority */ + NVIC_SetPriority(SysTick_IRQn, 0x0); +} + +#ifdef SPI_MASTER +/** + * @brief Returns NumberOfByte variable value. + * @param None + * @retval Tx Buffer Size (NumberOfByte). + */ +uint8_t GetVar_NbrOfData(void) +{ + return NumberOfByte; +} +/** +* @brief Basic management of the timeout situation. +* @param None. +* @retval None. +*/ +static void TimeOut_UserCallback(void) +{ + /* User can add his own implementation to manage TimeOut Communication failure */ + /* Block communication and all processes */ + while(1) + { + } +} +#endif + +#ifdef SPI_SLAVE +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +static TestStatus Buffercmp(uint8_t* pBuffer1, __IO uint8_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return FAILED; + } + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} + +/** + * @brief Fills buffer. + * @param pBuffer: pointer on the Buffer to fill + * @param BufferLength: size of the buffer to fill + * @retval None + */ +static void Fill_Buffer(__IO uint8_t *pBuffer, uint16_t BufferLength) +{ + uint32_t index = 0; + + /* Put in global buffer same values */ + for (index = 0; index < BufferLength; index++ ) + { + pBuffer[index] = 0x00; + } +} +#endif /* SPI_SLAVE */ + + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/main.h new file mode 100644 index 000000000..413ac06b5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/main.h @@ -0,0 +1,116 @@ +/** + ****************************************************************************** + * @file SPI/SPI_TwoBoards/DataExchangeInterrupt/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_ioe.h" + +/* Exported typedef -----------------------------------------------------------*/ +#define countof(a) (sizeof(a) / sizeof(*(a))) +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Exported define ------------------------------------------------------------*/ +/* Uncomment the line below if you will use the SPI peripheral as a Master */ +/* #define SPI_MASTER */ +/* Uncomment the line below if you will use the SPI peripheral as a Slave */ +#define SPI_SLAVE + +/* USER_TIMEOUT value for waiting loops. This timeout is just guarantee that the + application will not remain stuck if the USART communication is corrupted. + You may modify this timeout value depending on CPU frequency and application + conditions (interrupts routines, number of data to transfer, baudrate, CPU + frequency...). */ +#define USER_TIMEOUT ((uint32_t)0x64) /* Waiting 1s */ + +/* SPIx Communication boards Interface */ +#define SPIx SPI2 +#define SPIx_CLK RCC_APB1Periph_SPI2 +#define SPIx_CLK_INIT RCC_APB1PeriphClockCmd +#define SPIx_IRQn SPI2_IRQn +#define SPIx_IRQHANDLER SPI2_IRQHandler + +#define SPIx_SCK_PIN GPIO_Pin_1 +#define SPIx_SCK_GPIO_PORT GPIOI +#define SPIx_SCK_GPIO_CLK RCC_AHB1Periph_GPIOI +#define SPIx_SCK_SOURCE GPIO_PinSource1 +#define SPIx_SCK_AF GPIO_AF_SPI2 + +#define SPIx_MISO_PIN GPIO_Pin_2 +#define SPIx_MISO_GPIO_PORT GPIOI +#define SPIx_MISO_GPIO_CLK RCC_AHB1Periph_GPIOI +#define SPIx_MISO_SOURCE GPIO_PinSource2 +#define SPIx_MISO_AF GPIO_AF_SPI2 + +#define SPIx_MOSI_PIN GPIO_Pin_3 +#define SPIx_MOSI_GPIO_PORT GPIOI +#define SPIx_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOI +#define SPIx_MOSI_SOURCE GPIO_PinSource3 +#define SPIx_MOSI_AF GPIO_AF_SPI2 + +#define TXBUFFERSIZE (countof(TxBuffer) - 1) +#define RXBUFFERSIZE TXBUFFERSIZE + +/* Joystick Commands */ +#define CMD_RIGHT 0x55 +#define CMD_LEFT 0xAA +#define CMD_UP 0x33 +#define CMD_DOWN 0xCC +#define CMD_SEL 0xFF +#define CMD_NONE 0x00 +#define CMD_ACK 0x66 + +/* Define numbers of bytes to transmit from TxBuffer */ +#define CMD_RIGHT_SIZE 0x01 +#define CMD_LEFT_SIZE 0x05 +#define CMD_UP_SIZE 0x14 +#define CMD_DOWN_SIZE 0x1E +#define CMD_SEL_SIZE TXBUFFERSIZE + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +#ifdef SPI_MASTER + uint8_t GetVar_NbrOfData(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/readme.txt new file mode 100644 index 000000000..f974b02ba --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/readme.txt @@ -0,0 +1,147 @@ +/** + @page SPI_DataExchangeInterrupt SPI Communication Boards Data Exchange using interrupt example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file SPI/SPI_TwoBoards/DataExchangeInterrupt/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the SPI Communication Boards Data Exchange using + * interrupt example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a small application in which joystick buttons are used +to trigger SPI communication using interrupts and though using SPI firmware +library. + +- Hardware Description + +To use this example, you need to load it on two STM32 boards (let's call them +BoardA and BoardB) then connect these two boards through SPI lines and GND. +In the firmware example uncomment the dedicated line in the main.h file to use +the SPI peripheral as STM32 Master device or as STM32 Slave . + +@verbatim +*------------------------------------------------------------------------------* +| BoardA BoardB | +| ____________________ ____________________ | +| | | | | | +| | | | | | +| | __________ | | __________ | | +| | |SPI Master|____|_______SCK_______|____|SPI Slave | | | +| | | Device |____|_______MOSI______|____| Device | | | +| | |__________| | | |__________| | | +| | | | | | +| | O LD1 | | O LD1 | | +| | O LD2 Joystick | | O LD2 Joystick | | +| | O LD3 _ | | O LD3 _ | | +| | O LD4 |_| | | O LD4 |_| | | +| | | | | | +| | GND O--|-----------------|--O GND | | +| |____________________| |____________________| | +| | +| | +*------------------------------------------------------------------------------* +@endverbatim + +@note The connection between the pins should use a short wires and a common Ground. + +- Software Description +In master board, SPI peripheral is configured as Master full duplex with Interrupt, +whereas in Slave board, SPI peripheral is configured as Slave Full duplex with Interrupt. + +At each joystick buttons press: +- The Master sends a specific command to the Slave, the command contains the + transaction code (CMD_RIGHT, CMD_LEFT, CMD_UP, CMD_DOWN or CMD_SEL), then + the defined NumberOfByte from TxBuffer. + + +- The Slave after checking the received command, compares the NumberOfByte received data + with the defined ones into TxBuffer. Received data correctness is signaled by LED + lightening and though as follow: + - Received command CMD_RIGHT and data correctly received --> LD2 and LD3 ON + - Received command CMD_LEFT and data correctly received --> LD4 ON + - Received command CMD_UP and data correctly received --> LD2 ON + - Received command CMD_DOWN and data correctly received --> LD3 ON + - Received command CMD_SEL and data correctly received --> LD2, LD3 and LD4 ON + +In both boards, the data transfers is managed using SPIx_IRQHandler in stm32f2xx_it.c +file. +The SysTick is configured to generate interrupt each 10ms. A dedicated counter +inside the SysTick ISR is used to toggle LD1 each 100ms indicating that the +firmware is running. +These operations can be repeated infinitely. + + +A defined communication timeout is insuring that the application will not remain +stuck if the SPI communication is corrupted. +You can adjust this timeout through the USER_TIMEOUT define inside main.h file +depending on CPU frequency and application conditions (interrupts routines, +number of data to transfer, baudrate, CPU frequency...). +When a given operation is not finished within the defined timeout, a callback is +made to the function "TimeOut_UserCallback()", this function is used to manage +timeout communication failure. In this example, this callback implements a simple +infinite loop, but user can add his own implementation to manage timeout failure. + + +@par Directory contents + + - SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h Library Configuration file + - SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c Interrupt handlers + - SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h Interrupt handlers header file + - SPI/SPI_TwoBoards/DataExchangeInterrupt/main.c Main program + - SPI/SPI_TwoBoards/DataExchangeInterrupt/main.h Main program header file + - SPI/SPI_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" tool. + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB (with no additional + hardware), and can be easily tailored to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + - Use the Joystick Push Button + - Connect BoardA SPI2 SCK pin (PI1) to BoardB SPI2 SCK pin (PI1) + - Connect BoardA SPI2 MOSI pin (PI3) to BoardB SPI2 MOSI pin (PI3) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h new file mode 100644 index 000000000..3ef5830de --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c new file mode 100644 index 000000000..a3846bf0d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c @@ -0,0 +1,244 @@ +/** + ****************************************************************************** + * @file SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SPI_DataExchangeInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +#ifdef SPI_SLAVE + extern __IO uint8_t RxBuffer[]; + extern __IO uint8_t Rx_Idx; +#endif +#ifdef SPI_MASTER + extern __IO uint8_t CmdTransmitted; + extern __IO uint8_t Tx_Idx; + extern __IO uint8_t CmdStatus; +#endif + +extern uint8_t TxBuffer[]; +extern __IO uint32_t TimeOut; +__IO uint8_t Counter = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + /* Decrement the timeout value */ + if (TimeOut != 0) + { + TimeOut--; + } + + if (Counter < 10) + { + Counter++; + } + else + { + Counter = 0; + STM_EVAL_LEDToggle(LED1); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles SPI interrupt request. + * @param None + * @retval None + */ +void SPIx_IRQHANDLER(void) +{ +#ifdef SPI_SLAVE + /* SPI in Slave Receiver mode--------------------------------------- */ + if (SPI_I2S_GetITStatus(SPIx, SPI_I2S_IT_RXNE) == SET) + { + RxBuffer[Rx_Idx++] = SPI_I2S_ReceiveData(SPIx); + } +#endif +#ifdef SPI_MASTER + /* SPI in Master Tramitter mode--------------------------------------- */ + if (SPI_I2S_GetITStatus(SPIx, SPI_I2S_IT_TXE) == SET) + { + if (CmdStatus == 0x00) + { + /* Send Transaction code */ + SPI_I2S_SendData(SPIx, CmdTransmitted); + CmdStatus = 0x01; + } + else + { + if (Tx_Idx < GetVar_NbrOfData()) + { + /* Send Transaction data */ + SPI_I2S_SendData(SPIx, TxBuffer[Tx_Idx++]); + } + else + { + /* Disable the Tx buffer empty interrupt */ + SPI_I2S_ITConfig(SPIx, SPI_I2S_IT_TXE, DISABLE); + } + } + } +#endif /* SPI_SLAVE */ +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h new file mode 100644 index 000000000..ed559f09b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h @@ -0,0 +1,61 @@ +/** + ****************************************************************************** + * @file SPI/SPI_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void SPIx_IRQHANDLER(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/main.c new file mode 100644 index 000000000..841dfd81c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/main.c @@ -0,0 +1,179 @@ +/** + ****************************************************************************** + * @file SysTick/SysTick_Example/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SysTick_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +GPIO_InitTypeDef GPIO_InitStructure; +static __IO uint32_t TimingDelay; + +/* Private function prototypes -----------------------------------------------*/ +void Delay(__IO uint32_t nTime); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize Leds mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Turn on LED1 and LED3 */ + STM_EVAL_LEDOn(LED1); + STM_EVAL_LEDOn(LED3); + + /* Setup SysTick Timer for 1 msec interrupts. + ------------------------------------------ + 1. The SysTick_Config() function is a CMSIS function which configure: + - The SysTick Reload register with value passed as function parameter. + - Configure the SysTick IRQ priority to the lowest value (0x0F). + - Reset the SysTick Counter register. + - Configure the SysTick Counter clock source to be Core Clock Source (HCLK). + - Enable the SysTick Interrupt. + - Start the SysTick Counter. + + 2. You can change the SysTick Clock source to be HCLK_Div8 by calling the + SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) just after the + SysTick_Config() function call. The SysTick_CLKSourceConfig() is defined + inside the misc.c file. + + 3. You can change the SysTick IRQ priority by calling the + NVIC_SetPriority(SysTick_IRQn,...) just after the SysTick_Config() function + call. The NVIC_SetPriority() is defined inside the core_cm3.h file. + + 4. To adjust the SysTick time base, use the following formula: + + Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s) + + - Reload Value is the parameter to be passed for SysTick_Config() function + - Reload Value should not exceed 0xFFFFFF + */ + if (SysTick_Config(SystemCoreClock / 1000)) + { + /* Capture error */ + while (1); + } + + while (1) + { + /* Toggle LED2 and LED4 */ + STM_EVAL_LEDToggle(LED2); + STM_EVAL_LEDToggle(LED4); + + /* Insert 50 ms delay */ + Delay(50); + + /* Toggle LED1 and LED3 */ + STM_EVAL_LEDToggle(LED1); + STM_EVAL_LEDToggle(LED3); + + /* Insert 100 ms delay */ + Delay(100); + } +} + +/** + * @brief Inserts a delay time. + * @param nTime: specifies the delay time length, in milliseconds. + * @retval None + */ +void Delay(__IO uint32_t nTime) +{ + TimingDelay = nTime; + + while(TimingDelay != 0); +} + +/** + * @brief Decrements the TimingDelay variable. + * @param None + * @retval None + */ +void TimingDelay_Decrement(void) +{ + if (TimingDelay != 0x00) + { + TimingDelay--; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/main.h new file mode 100644 index 000000000..e038c2c1e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/main.h @@ -0,0 +1,44 @@ +/** + ****************************************************************************** + * @file SysTick/SysTick_Example/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void TimingDelay_Decrement(void); + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/readme.txt new file mode 100644 index 000000000..a96f26acc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/readme.txt @@ -0,0 +1,77 @@ +/** + @page SysTick_Example SysTick Configuration example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file SysTick/SysTick_Example/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the SysTick Configuration example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the SysTick to generate a time base equal to +1 ms. The system clock is set to 120 MHz, the SysTick is clocked by the AHB clock +(HCLK). + +A "Delay" function is implemented based on the SysTick end-of-count event. +Four LEDs are toggled with a timing defined by the Delay function. + +@par Directory contents + + - SysTick/SysTick_Example/stm32f2xx_conf.h Library Configuration file + - SysTick/SysTick_Example/stm32f2xx_it.c Interrupt handlers + - SysTick/SysTick_Example/stm32f2xx_it.h Header for stm32f2xx_it.c + - SysTick/SysTick_Example/main.c Main program + - SysTick/SysTick_Example/main.h Header for main.c + - SysTick/SysTick_Example/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/stm32f2xx_conf.h new file mode 100644 index 000000000..c748e304e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file SysTick/SysTick_Example/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/stm32f2xx_it.c new file mode 100644 index 000000000..c4a8345cd --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/stm32f2xx_it.c @@ -0,0 +1,175 @@ +/** + ****************************************************************************** + * @file SysTick/SysTick_Example/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup SysTick_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + TimingDelay_Decrement(); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/stm32f2xx_it.h new file mode 100644 index 000000000..8520a4528 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file SysTick/SysTick_Example/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SysTick/SysTick_Example/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/main.c new file mode 100644 index 000000000..6964bc329 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/main.c @@ -0,0 +1,248 @@ +/** + ****************************************************************************** + * @file TIM/6Steps/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_6Steps + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +TIM_BDTRInitTypeDef TIM_BDTRInitStructure; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); +void SysTickConfig(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* SysTick Configuration */ + SysTickConfig(); + + /* TIM1 Configuration */ + TIM_Config(); + + /*---------------------------------------------------------------------------- + The STM32F2xx TIM1 peripheral offers the possibility to program in advance the + configuration for the next TIM1 outputs behaviour (step) and change the configuration + of all the channels at the same time. This operation is possible when the COM + (commutation) event is used. + The COM event can be generated by software by setting the COM bit in the TIM1_EGR + register or by hardware (on TRC rising edge). + In this example, a software COM event is generated each 100 ms: using the SysTick + interrupt. + The TIM1 is configured in Timing Mode, each time a COM event occurs, a new TIM1 + configuration will be set in advance. + + The following Table describes the TIM1 Channels states: + ----------------------------------------------- + | Step1 | Step2 | Step3 | Step4 | Step5 | Step6 | + ---------------------------------------------------------- + |Channel1 | 1 | 0 | 0 | 0 | 0 | 1 | + ---------------------------------------------------------- + |Channel1N | 0 | 0 | 1 | 1 | 0 | 0 | + ---------------------------------------------------------- + |Channel2 | 0 | 0 | 0 | 1 | 1 | 0 | + ---------------------------------------------------------- + |Channel2N | 1 | 1 | 0 | 0 | 0 | 0 | + ---------------------------------------------------------- + |Channel3 | 0 | 1 | 1 | 0 | 0 | 0 | + ---------------------------------------------------------- + |Channel3N | 0 | 0 | 0 | 0 | 1 | 1 | + ---------------------------------------------------------- + ----------------------------------------------------------------------------*/ + + /* Time Base configuration */ + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseStructure.TIM_Period = 4095; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; + + TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); + + /* Channel 1, 2,3 and 4 Configuration in PWM mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; + TIM_OCInitStructure.TIM_Pulse = 2047; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; + TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; + TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set; + + TIM_OC1Init(TIM1, &TIM_OCInitStructure); + + TIM_OCInitStructure.TIM_Pulse = 1023; + TIM_OC2Init(TIM1, &TIM_OCInitStructure); + + TIM_OCInitStructure.TIM_Pulse = 511; + TIM_OC3Init(TIM1, &TIM_OCInitStructure); + + /* Automatic Output enable, Break, dead time and lock configuration*/ + TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; + TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; + TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF; + TIM_BDTRInitStructure.TIM_DeadTime = 1; + TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable; + TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; + TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; + + TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure); + + TIM_CCPreloadControl(TIM1, ENABLE); + + TIM_ITConfig(TIM1, TIM_IT_COM, ENABLE); + + /* TIM1 counter enable */ + TIM_Cmd(TIM1, ENABLE); + + /* Main Output Enable */ + TIM_CtrlPWMOutputs(TIM1, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM1 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* GPIOA and GPIOB clocks enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE, ENABLE); + + /* TIM1 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); + + /* GPIOA Configuration: Channel 1 and 3 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_10; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* GPIOE Configuration: Channel 1 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; + GPIO_Init(GPIOE, &GPIO_InitStructure); + + /* GPIOB Configuration: BKIN, Channel 1N, 2N and 3N as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect TIM pins to AF1 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_TIM1); + + /* Enable the TIM1 Trigger and commutation interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM1_TRG_COM_TIM11_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Configures the SysTick. + * @param None + * @retval None + */ +void SysTickConfig(void) +{ + /* Setup SysTick Timer for 100 msec interrupts */ + if (SysTick_Config((SystemCoreClock) / 10)) + { + /* Capture error */ + while (1); + } + + NVIC_SetPriority(SysTick_IRQn, 0x0); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} + +#endif +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/readme.txt new file mode 100644 index 000000000..f911d2036 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/readme.txt @@ -0,0 +1,107 @@ +/** + @page TIM_6Steps TIM 6 Steps example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/6Steps/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM 6 Steps example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM1 peripheral to generate 6 Steps. +The STM32F2xx TIM1 peripheral offers the possibility to program in advance the +configuration for the next TIM1 outputs behaviour (step) and change the configuration +of all the channels at the same time. This operation is possible when the COM +(commutation) event is used. +The COM event can be generated by software by setting the COM bit in the TIM1_EGR +register or by hardware (on TRC rising edge). +In this example, a software COM event is generated each 100 ms: using the SysTick +interrupt. +The TIM1 is configured in Timing Mode, each time a COM event occurs, a new TIM1 +configuration will be set in advance. + +The break Polarity is used at High level. + +The following Table describes the TIM1 Channels states: + @verbatim + ----------------------------------------------- + | Step1 | Step2 | Step3 | Step4 | Step5 | Step6 | + ---------------------------------------------------------- + |Channel1 | 1 | 0 | 0 | 0 | 0 | 1 | + ---------------------------------------------------------- + |Channel1N | 0 | 0 | 1 | 1 | 0 | 0 | + ---------------------------------------------------------- + |Channel2 | 0 | 0 | 0 | 1 | 1 | 0 | + ---------------------------------------------------------- + |Channel2N | 1 | 1 | 0 | 0 | 0 | 0 | + ---------------------------------------------------------- + |Channel3 | 0 | 1 | 1 | 0 | 0 | 0 | + ---------------------------------------------------------- + |Channel3N | 0 | 0 | 0 | 0 | 1 | 1 | + ---------------------------------------------------------- + @endverbatim + +@par Directory contents + + - TIM/6Steps/stm32f2xx_conf.h Library Configuration file + - TIM/6Steps/stm32f2xx_it.c Interrupt handlers + - TIM/6Steps/stm32f2xx_it.h Interrupt handlers header file + - TIM/6Steps/main.c Main program + - TIM/6Steps/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG Set-up + - Connect the TIM1 pins to an oscilloscope to monitor the different waveforms: + - TIM1_CH3 pin (PA.10) + - TIM1_CH1N pin (PB.13) + - TIM1_CH2 pin (PE.11) + - TIM1_CH3N pin (PB.15) + - TIM1_CH1 pin (PA.08) + - TIM1_CH2N pin (PB.14) + - Connect the TIM1 break pin TIM1_BKIN pin (PB.12) to the GND. To generate a + break event, switch this pin level from 0V to 3.3V. + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/stm32f2xx_conf.h new file mode 100644 index 000000000..e02fd80f2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/6Steps/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/stm32f2xx_it.c new file mode 100644 index 000000000..108f6e73e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/stm32f2xx_it.c @@ -0,0 +1,294 @@ +/** + ****************************************************************************** + * @file TIM/6Steps/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_6Steps + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t step = 1; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + /* Generate TIM1 COM event by software */ + TIM_GenerateEvent(TIM1, TIM_EventSource_COM); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles TIM1 Trigger and commutation and TIM11 + * global interrupts requests. + * @param None + * @retval None + */ +void TIM1_TRG_COM_TIM11_IRQHandler(void) +{ + /* Clear TIM1 COM pending bit */ + TIM_ClearITPendingBit(TIM1, TIM_IT_COM); + + if (step == 1) + { + /* Next step: Step 2 Configuration -------------------------------------- */ + /* Channel3 configuration */ + TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); + + /* Channel1 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable); + TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable); + + /* Channel2 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1 ); + TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable); + step++; + } + else if (step == 2) + { + /* Next step: Step 3 Configuration -------------------------------------- */ + /* Channel2 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable); + + /* Channel3 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable); + TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); + + /* Channel1 configuration */ + TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable); + step++; + } + else if (step == 3) + { + /* Next step: Step 4 Configuration -------------------------------------- */ + /* Channel3 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable); + TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); + + /* Channel2 configuration */ + TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable); + + /* Channel1 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable); + step++; + } + else if (step == 4) + { + /* Next step: Step 5 Configuration -------------------------------------- */ + /* Channel3 configuration */ + TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); + + /* Channel1 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable); + + /* Channel2 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable); + TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable); + step++; + } + else if (step == 5) + { + /* Next step: Step 6 Configuration -------------------------------------- */ + /* Channel3 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable); + + /* Channel1 configuration */ + TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable); + + /* Channel2 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable); + TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable); + step++; + } + else + { + /* Next step: Step 1 Configuration -------------------------------------- */ + /* Channel1 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable); + TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable); + + /* Channel3 configuration */ + TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable); + + /* Channel2 configuration */ + TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable); + step = 1; + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/stm32f2xx_it.h new file mode 100644 index 000000000..37bf40858 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file TIM/6Steps/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void TIM1_TRG_COM_TIM11_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/6Steps/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/main.c new file mode 100644 index 000000000..f5b45f337 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/main.c @@ -0,0 +1,215 @@ +/** + ****************************************************************************** + * @file TIM/7PWM_Output/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_7PWM_Output + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +uint16_t TimerPeriod = 0; +uint16_t Channel1Pulse = 0, Channel2Pulse = 0, Channel3Pulse = 0, Channel4Pulse = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* TIM1 Configuration --------------------------------------------------- + Generate 7 PWM signals with 4 different duty cycles: + TIM1 input clock (TIM1CLK) is set to 2 * APB2 clock (PCLK2), since APB2 + prescaler is different from 1. + TIM1CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM1CLK = 2 * (HCLK / 2) = HCLK = SystemCoreClock + TIM1CLK = SystemCoreClock, Prescaler = 0, TIM1 counter clock = SystemCoreClock + SystemCoreClock is set to 120 MHz for STM32F2xx devices + + The objective is to generate 7 PWM signal at 17.57 KHz: + - TIM1_Period = (SystemCoreClock / 17570) - 1 + The channel 1 and channel 1N duty cycle is set to 50% + The channel 2 and channel 2N duty cycle is set to 37.5% + The channel 3 and channel 3N duty cycle is set to 25% + The channel 4 duty cycle is set to 12.5% + The Timer pulse is calculated as follows: + - ChannelxPulse = DutyCycle * (TIM1_Period - 1) / 100 + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + ----------------------------------------------------------------------- */ + /* Compute the value to be set in ARR regiter to generate signal frequency at 17.57 Khz */ + TimerPeriod = (SystemCoreClock / 17570 ) - 1; + /* Compute CCR1 value to generate a duty cycle at 50% for channel 1 and 1N */ + Channel1Pulse = (uint16_t) (((uint32_t) 5 * (TimerPeriod - 1)) / 10); + /* Compute CCR2 value to generate a duty cycle at 37.5% for channel 2 and 2N */ + Channel2Pulse = (uint16_t) (((uint32_t) 375 * (TimerPeriod - 1)) / 1000); + /* Compute CCR3 value to generate a duty cycle at 25% for channel 3 and 3N */ + Channel3Pulse = (uint16_t) (((uint32_t) 25 * (TimerPeriod - 1)) / 100); + /* Compute CCR4 value to generate a duty cycle at 12.5% for channel 4 */ + Channel4Pulse = (uint16_t) (((uint32_t) 125 * (TimerPeriod- 1)) / 1000); + + /* TIM1 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE); + + /* Time Base configuration */ + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseStructure.TIM_Period = TimerPeriod; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; + + TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); + + /* Channel 1, 2,3 and 4 Configuration in PWM mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; + TIM_OCInitStructure.TIM_Pulse = Channel1Pulse; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; + TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; + TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; + + TIM_OC1Init(TIM1, &TIM_OCInitStructure); + + TIM_OCInitStructure.TIM_Pulse = Channel2Pulse; + TIM_OC2Init(TIM1, &TIM_OCInitStructure); + + TIM_OCInitStructure.TIM_Pulse = Channel3Pulse; + TIM_OC3Init(TIM1, &TIM_OCInitStructure); + + TIM_OCInitStructure.TIM_Pulse = Channel4Pulse; + TIM_OC4Init(TIM1, &TIM_OCInitStructure); + + /* TIM1 counter enable */ + TIM_Cmd(TIM1, ENABLE); + + /* TIM1 Main Output Enable */ + TIM_CtrlPWMOutputs(TIM1, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM1 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* GPIOA, GPIOB and GPIOE Clocks enable */ + RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE , ENABLE); + + /* GPIOA Configuration: Channel 1, 3 and 4 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_TIM1); + + /* GPIOE Configuration: Channel 2 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ; + GPIO_Init(GPIOE, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_TIM1); + + /* GPIOB Configuration: Channel 1N, 2N and 3N as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_TIM1); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/readme.txt new file mode 100644 index 000000000..328a482a7 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/readme.txt @@ -0,0 +1,91 @@ +/** + @page TIM_7PWM_Output TIM_7PWM_Output + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/7PWM_Output/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM 7PWM_Output example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM1 peripheral to generate 7 PWM signals +with 4 different duty cycles (50%, 37.5%, 25% and 12.5%). + +TIM1CLK = SystemCoreClock, Prescaler = 0, TIM1 counter clock = SystemCoreClock +SystemCoreClock is set to 120 MHz for STM32F2xx devices. + +The objective is to generate 7 PWM signal at 17.57 KHz: + - TIM1_Period = (SystemCoreClock / 17570) - 1 +The channel 1 and channel 1N duty cycle is set to 50% +The channel 2 and channel 2N duty cycle is set to 37.5% +The channel 3 and channel 3N duty cycle is set to 25% +The channel 4 duty cycle is set to 12.5% +The Timer pulse is calculated as follows: + - ChannelxPulse = DutyCycle * (TIM1_Period - 1) / 100 + +The TIM1 waveform can be displayed using an oscilloscope. + + +@par Directory contents + + - TIM/7PWM_Output/stm32f2xx_conf.h Library Configuration file + - TIM/7PWM_Output/stm32f2xx_it.c Interrupt handlers + - TIM/7PWM_Output/stm32f2xx_it.h Interrupt handlers header file + - TIM/7PWM_Output/main.c Main program + - TIM/7PWM_Output/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the TIM1 pins to an oscilloscope to monitor the different waveforms: + - TIM1_CH1 pin (PA.08) + - TIM1_CH1N pin (PB.13) + - TIM1_CH2 pin (PE.11) + - TIM1_CH2N pin (PB.14) + - TIM1_CH3 pin (PA.10) + - TIM1_CH3N pin (PB.15) + - TIM1_CH4 pin (PA.11) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/stm32f2xx_conf.h new file mode 100644 index 000000000..751495302 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/7PWM_Output/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/stm32f2xx_it.c new file mode 100644 index 000000000..eb7b1916d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/stm32f2xx_it.c @@ -0,0 +1,164 @@ +/** + ****************************************************************************** + * @file TIM/7PWM_Output/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_7PWM_Output + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/stm32f2xx_it.h new file mode 100644 index 000000000..65be3003c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/7PWM_Output/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/7PWM_Output/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/main.c new file mode 100644 index 000000000..6f2070344 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/main.c @@ -0,0 +1,242 @@ +/** + ****************************************************************************** + * @file TIM/Cascade_Synchro/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_Cascade_Synchro + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM2/3/4 Configuration */ + TIM_Config(); + + /* Timers synchronisation in cascade mode ---------------------------- + 1/TIM2 is configured as Master Timer: + - PWM Mode is used + - The TIM2 Update event is used as Trigger Output + + 2/TIM3 is slave for TIM2 and Master for TIM4, + - PWM Mode is used + - The ITR1(TIM2) is used as input trigger + - Gated mode is used, so start and stop of slave counter + are controlled by the Master trigger output signal(TIM2 update event). + - The TIM3 Update event is used as Trigger Output. + + 3/TIM4 is slave for TIM3, + - PWM Mode is used + - The ITR2(TIM3) is used as input trigger + - Gated mode is used, so start and stop of slave counter + are controlled by the Master trigger output signal(TIM3 update event). + + In this example TIM2 input clock (TIM2CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM2CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM2CLK = HCLK / 2 = SystemCoreClock /2 + + The Master Timer TIM2 is running at TIM2 counter clock: + TIM2 frequency = (TIM2 counter clock)/ (TIM2 period + 1) = 234.375 KHz + and the duty cycle = TIM2_CCR1/(TIM2_ARR + 1) = 25%. + + The TIM3 is running: + - At (TIM2 frequency)/ (TIM3 period + 1) = 58.593 KHz and a duty cycle + equal to TIM3_CCR1/(TIM3_ARR + 1) = 25% + + The TIM4 is running: + - At (TIM3 frequency)/ (TIM4 period + 1) = 14.648 KHz and a duty cycle + equal to TIM4_CCR1/(TIM4_ARR + 1) = 25% + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + --------------------------------------------------------------------------- */ + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 255; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); + + TIM_TimeBaseStructure.TIM_Period = 3; + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + TIM_TimeBaseStructure.TIM_Period = 3; + TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); + + /* Master Configuration in PWM1 Mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 64; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OC1Init(TIM2, &TIM_OCInitStructure); + + /* Select the Master Slave Mode */ + TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); + + /* Master Mode selection */ + TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); + + /* Slaves Configuration: PWM1 Mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 1; + + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + TIM_OC1Init(TIM4, &TIM_OCInitStructure); + + /* Slave Mode selection: TIM3 */ + TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated); + TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1); + + /* Select the Master Slave Mode */ + TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); + + /* Master Mode selection: TIM3 */ + TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update); + + /* Slave Mode selection: TIM4 */ + TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Gated); + TIM_SelectInputTrigger(TIM4, TIM_TS_ITR2); + + /* TIM enable counter */ + TIM_Cmd(TIM3, ENABLE); + TIM_Cmd(TIM2, ENABLE); + TIM_Cmd(TIM4, ENABLE); + + while (1) + { + } +} + +/** + * @brief Configure the TIM2/3/4 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* TIM2, TIM3 and TIM4 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | + RCC_APB1Periph_TIM4, ENABLE); + + /* GPIOA and GPIOB clocks enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB, ENABLE); + + /* GPIOB Configuration: PB4(TIM3 CH1) as alternate function push-pull ------*/ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect TIM pins to AF2 */ + GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_TIM3); + + /* GPIOB Configuration: PB6(TIM4 CH1) as alternate function push-pull ------*/ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect TIM pins to AF2 */ + GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); + + /* GPIOA Configuration: PA0(TIM2 CH1) as alternate function push-pull ------*/ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* Connect TIM pins to AF1 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM2); + +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/readme.txt new file mode 100644 index 000000000..a0db5a0bf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/readme.txt @@ -0,0 +1,105 @@ +/** + @page TIM_Cascade_Synchro TIM Cascade Synchro example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/Cascade_Synchro/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM Cascade Synchro example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to synchronize TIM peripherals in cascade mode. +In this example three timers are used: + +Timers synchronisation in cascade mode: + +1/TIM2 is configured as Master Timer: + - PWM Mode is used + - The TIM2 Update event is used as Trigger Output + +2/TIM3 is slave for TIM2 and Master for TIM4, + - PWM Mode is used + - The ITR1(TIM2) is used as input trigger + - Gated mode is used, so start and stop of slave counter + are controlled by the Master trigger output signal(TIM2 update event). + - The TIM3 Update event is used as Trigger Output. + +3/TIM4 is slave for TIM3, + - PWM Mode is used + - The ITR2(TIM3) is used as input trigger + - Gated mode is used, so start and stop of slave counter are controlled by the + Master trigger output signal(TIM3 update event). + +The TIM2 counter clock is 60 MHz. + + The Master Timer TIM2 is running at TIM2 frequency : + TIM2 frequency = (TIM2 counter clock)/ (TIM2 period + 1) = 234.375 KHz + and the duty cycle = TIM2_CCR1/(TIM2_ARR + 1) = 25%. + + The TIM3 is running at: + (TIM2 frequency)/ (TIM3 period + 1) = 58.593 KHz and a duty cycle equal + to TIM3_CCR1/(TIM3_ARR + 1) = 25% + + The TIM4 is running at: + (TIM3 frequency)/ (TIM4 period + 1) = 14.648 Hz and a duty cycle equal + to TIM4_CCR1/(TIM4_ARR + 1) = 25% + +@par Directory contents + + - TIM/Cascade_Synchro/stm32f2xx_conf.h Library Configuration file + - TIM/Cascade_Synchro/stm32f2xx_it.c Interrupt handlers + - TIM/Cascade_Synchro/stm32f2xx_it.h Interrupt handlers header file + - TIM/Cascade_Synchro/main.c Main program + - TIM/Cascade_Synchro/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG Set-up + - Connect the following pins to an oscilloscope to monitor the different + waveforms: + - TIM2 CH1 (PA.00) + - TIM3 CH1 (PB.04) + - TIM4 CH1 (PB.06) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/stm32f2xx_conf.h new file mode 100644 index 000000000..956d52e2c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/Cascade_Synchro/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/stm32f2xx_it.c new file mode 100644 index 000000000..0365835a5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/Cascade_Synchro/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_Cascade_Synchro + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/stm32f2xx_it.h new file mode 100644 index 000000000..171c327b6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/Cascade_Synchro/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Cascade_Synchro/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/main.c new file mode 100644 index 000000000..aca5dbc32 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/main.c @@ -0,0 +1,242 @@ +/** + ****************************************************************************** + * @file TIM/ComplementarySignals/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_ComplementarySignals + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +TIM_BDTRInitTypeDef TIM_BDTRInitStructure; +uint16_t TimerPeriod = 0; +uint16_t Channel1Pulse = 0, Channel2Pulse = 0, Channel3Pulse = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM1 Configuration */ + TIM_Config(); + + /* --------------------------------------------------------------------------- + TIM1 Configuration to: + + 1/ Generate 3 complementary PWM signals with 3 different duty cycles: + + TIM1 input clock (TIM1CLK) is set to 2 * APB2 clock (PCLK2), since APB2 + prescaler is different from 1. + TIM1CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM1CLK = 2 * (HCLK / 2) = HCLK = SystemCoreClock + + TIM1CLK is fixed to SystemCoreClock, the TIM1 Prescaler is equal to 0 so the + TIM1 counter clock used is SystemCoreClock (120MHz). + + The objective is to generate PWM signal at 17.57 KHz: + - TIM1_Period = (SystemCoreClock / 17570) - 1 + + The Three Duty cycles are computed as the following description: + + The channel 1 duty cycle is set to 50% so channel 1N is set to 50%. + The channel 2 duty cycle is set to 25% so channel 2N is set to 75%. + The channel 3 duty cycle is set to 12.5% so channel 3N is set to 87.5%. + + The Timer pulse is calculated as follows: + - ChannelxPulse = DutyCycle * (TIM1_Period - 1) / 100 + + 2/ Insert a dead time equal to (11/SystemCoreClock) ns + + 3/ Configure the break feature, active at High level, and using the automatic + output enable feature + + 4/ Use the Locking parameters level1. + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + --------------------------------------------------------------------------- */ + + /* Compute the value to be set in ARR register to generate signal frequency at 17.57 Khz */ + TimerPeriod = (SystemCoreClock / 17570) - 1; + + /* Compute CCR1 value to generate a duty cycle at 50% for channel 1 */ + Channel1Pulse = (uint16_t) (((uint32_t) 5 * (TimerPeriod - 1)) / 10); + + /* Compute CCR2 value to generate a duty cycle at 25% for channel 2 */ + Channel2Pulse = (uint16_t) (((uint32_t) 25 * (TimerPeriod - 1)) / 100); + + /* Compute CCR3 value to generate a duty cycle at 12.5% for channel 3 */ + Channel3Pulse = (uint16_t) (((uint32_t) 125 * (TimerPeriod - 1)) / 1000); + + /* Time Base configuration */ + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseStructure.TIM_Period = TimerPeriod; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; + + TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); + + /* Channel 1, 2 and 3 Configuration in PWM mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; + TIM_OCInitStructure.TIM_Pulse = Channel1Pulse; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; + TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; + TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; + + TIM_OC1Init(TIM1, &TIM_OCInitStructure); + + TIM_OCInitStructure.TIM_Pulse = Channel2Pulse; + TIM_OC2Init(TIM1, &TIM_OCInitStructure); + + TIM_OCInitStructure.TIM_Pulse = Channel3Pulse; + TIM_OC3Init(TIM1, &TIM_OCInitStructure); + + /* Automatic Output enable, Break, dead time and lock configuration*/ + TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; + TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; + TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1; + TIM_BDTRInitStructure.TIM_DeadTime = 11; + TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable; + TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; + TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; + + TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure); + + /* TIM1 counter enable */ + TIM_Cmd(TIM1, ENABLE); + + /* Main Output Enable */ + TIM_CtrlPWMOutputs(TIM1, ENABLE); + + while (1) + { + } +} + +/** + * @brief Configure the TIM1 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* GPIOA and GPIOB clocks enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE, ENABLE); + + /* TIM1 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); + + /* GPIOA Configuration: Channel 1 and 3 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_10; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* GPIOA Configuration: Channel 2 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; + GPIO_Init(GPIOE, &GPIO_InitStructure); + + /* GPIOB Configuration: BKIN, Channel 1N, 2N and 3N as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect TIM pins to AF1 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_TIM1); + + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_TIM1); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/readme.txt new file mode 100644 index 000000000..0705df2f1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/readme.txt @@ -0,0 +1,97 @@ +/** + @page TIM_ComplementarySignals TIM Complementary Signals example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/ComplementarySignals/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM Complementary Signals example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM1 peripheral to generate three +complementary TIM1 signals, to insert a defined dead time value, to use the break +feature and to lock the desired parameters. + +TIM1CLK is fixed to SystemCoreClock, the TIM1 Prescaler is equal to 0 so the +TIM1 counter clock used is SystemCoreClock (120MHz). + +The objective is to generate PWM signal at 17.57 KHz: + - TIM1_Period = (SystemCoreClock / 17570) - 1 + +The Three Duty cycles are computed as the following description: +The channel 1 duty cycle is set to 50% so channel 1N is set to 50%. +The channel 2 duty cycle is set to 25% so channel 2N is set to 75%. +The channel 3 duty cycle is set to 12.5% so channel 3N is set to 87.5%. +The Timer pulse is calculated as follows: + - ChannelxPulse = DutyCycle * (TIM1_Period - 1) / 100 + +A dead time equal to 11/SystemCoreClock is inserted between the different +complementary signals, and the Lock level 1 is selected. +The break Polarity is used at High level. + +The TIM1 waveform can be displayed using an oscilloscope. + +@par Directory contents + + - TIM/ComplementarySignals/stm32f2xx_conf.h Library Configuration file + - TIM/ComplementarySignals/stm32f2xx_it.c Interrupt handlers + - TIM/ComplementarySignals/stm32f2xx_it.h Interrupt handlers header file + - TIM/ComplementarySignals/main.c Main program + - TIM/ComplementarySignals/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG Set-up + - Connect the TIM1 pins to an oscilloscope to monitor the different waveforms: + - TIM1_CH1 pin (PA.08) + - TIM1_CH1N pin (PB.13) + - TIM1_CH2 pin (PE.11) + - TIM1_CH2N pin (PB.14) + - TIM1_CH3 pin (PA.10) + - TIM1_CH3N pin (PB.15) + + - Connect the TIM1 break pin TIM1_BKIN pin (PB.12) to the GND. To generate a + break event, switch this pin level from 0V to 3.3V. + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/stm32f2xx_conf.h new file mode 100644 index 000000000..0470f7b12 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/ComplementarySignals/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/stm32f2xx_it.c new file mode 100644 index 000000000..53049a17d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/ComplementarySignals/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_ComplementarySignals + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/stm32f2xx_it.h new file mode 100644 index 000000000..ff2a7c8e7 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/ComplementarySignals/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ComplementarySignals/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/main.c new file mode 100644 index 000000000..da074a169 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/main.c @@ -0,0 +1,226 @@ +/** + ****************************************************************************** + * @file TIM/DMA/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define TIM1_CCR3_ADDRESS 0x4001003C + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +uint16_t SRC_Buffer[3] = {0, 0, 0}; +uint16_t TimerPeriod = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* TIM1 DMA Transfer example ------------------------------------------------- + + TIM1 input clock (TIM1CLK) is set to 2 * APB2 clock (PCLK2), since APB2 + prescaler is different from 1. + TIM1CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM1CLK = 2 * (HCLK / 2) = HCLK = SystemCoreClock + + TIM1CLK = SystemCoreClock, Prescaler = 0, TIM1 counter clock = SystemCoreClock + SystemCoreClock is set to 120 MHz for STM32F2xx devices. + + The objective is to configure TIM1 channel 3 to generate complementary PWM + signal with a frequency equal to 17.57 KHz: + - TIM1_Period = (SystemCoreClock / 17570) - 1 + and a variable duty cycle that is changed by the DMA after a specific number of + Update DMA request. + + The number of this repetitive requests is defined by the TIM1 Repetion counter, + each 3 Update Requests, the TIM1 Channel 3 Duty Cycle changes to the next new + value defined by the SRC_Buffer . + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + -----------------------------------------------------------------------------*/ + /* Compute the value to be set in ARR regiter to generate signal frequency at 17.57 Khz */ + TimerPeriod = (SystemCoreClock / 17570 ) - 1; + /* Compute CCR1 value to generate a duty cycle at 50% */ + SRC_Buffer[0] = (uint16_t) (((uint32_t) 5 * (TimerPeriod - 1)) / 10); + /* Compute CCR1 value to generate a duty cycle at 37.5% */ + SRC_Buffer[1] = (uint16_t) (((uint32_t) 375 * (TimerPeriod - 1)) / 1000); + /* Compute CCR1 value to generate a duty cycle at 25% */ + SRC_Buffer[2] = (uint16_t) (((uint32_t) 25 * (TimerPeriod - 1)) / 100); + + /* TIM1 Peripheral Configuration -------------------------------------------*/ + /* TIM1 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); + + /* Time Base configuration */ + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseStructure.TIM_Period = TimerPeriod; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_RepetitionCounter = 3; + + TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); + + /* Channel 3 Configuration in PWM mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; + TIM_OCInitStructure.TIM_Pulse = SRC_Buffer[0]; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; + TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; + TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; + + TIM_OC3Init(TIM1, &TIM_OCInitStructure); + + /* TIM1 counter enable */ + TIM_Cmd(TIM1, ENABLE); + + /* DMA enable*/ + DMA_Cmd(DMA2_Stream6, ENABLE); + + /* TIM1 Update DMA Request enable */ + TIM_DMACmd(TIM1, TIM_DMA_CC3, ENABLE); + + /* Main Output Enable */ + TIM_CtrlPWMOutputs(TIM1, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM1 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + + /* GPIOA and GPIOB clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB, ENABLE); + + /* GPIOA Configuration: Channel 3 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1); + + /* GPIOB Configuration: Channel 3N as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; + GPIO_Init(GPIOB, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_TIM1); + + /* DMA clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 , ENABLE); + + DMA_DeInit(DMA2_Stream6); + DMA_InitStructure.DMA_Channel = DMA_Channel_6; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(TIM1_CCR3_ADDRESS) ; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)SRC_Buffer; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = 3; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + + DMA_Init(DMA2_Stream6, &DMA_InitStructure); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/readme.txt new file mode 100644 index 000000000..8952d995d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/readme.txt @@ -0,0 +1,84 @@ +/** + @page TIM_DMA TIM DMA example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/DMA/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM DMA example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a description of how to use DMA with TIM1 Update request +to transfer Data from memory to TIM1 Capture Compare Register3. + +TIM1CLK = SystemCoreClock, Prescaler = 0, TIM1 counter clock = SystemCoreClock +SystemCoreClock is set to 120 MHz for STM32F2xx Devices RevA, RevZ and RevB. + +The objective is to configure TIM1 channel 3 to generate complementary PWM +signal with a frequency equal to 17.57 KHz: + - TIM1_Period = (SystemCoreClock / 17570) - 1 +and a variable duty cycle that is changed by the DMA after a specific number of +Update DMA request. + +The number of this repetitive requests is defined by the TIM1 Repetion counter, +each 3 Update Requests, the TIM1 Channel 3 Duty Cycle changes to the next new +value defined by the SRC_Buffer. + + +@par Directory contents + + - TIM/DMA/stm32f2xx_conf.h Library Configuration file + - TIM/DMA/stm32f2xx_it.c Interrupt handlers + - TIM/DMA/stm32f2xx_it.h Interrupt handlers header file + - TIM/DMA/main.c Main program + - TIM/DMA/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the TIM1 pins to an oscilloscope to monitor the different waveforms: + - TIM1 CH3 (PA.10) + - TIM1 CH3N (PB.15) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/stm32f2xx_conf.h new file mode 100644 index 000000000..bda7e6c6d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file TIM/DMA/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/stm32f2xx_it.c new file mode 100644 index 000000000..8a8e0d906 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/DMA/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_DMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/stm32f2xx_it.h new file mode 100644 index 000000000..7c76addf2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/DMA/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMA/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/main.c new file mode 100644 index 000000000..54c352d74 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/main.c @@ -0,0 +1,212 @@ +/** + ****************************************************************************** + * @file TIM/DMABurst/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_DMABurst + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define TIM1_DMAR_ADDRESS ((uint32_t)0x4001004C) /* TIM DMAR address */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +GPIO_InitTypeDef GPIO_InitStructure; +DMA_InitTypeDef DMA_InitStructure; +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +uint16_t SRC_Buffer[6] = {0x0FFF, 0x0000, 0x0555}; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM1 Configuration */ + TIM_Config(); + + /* Time base configuration */ + /* ----------------------------------------------------------------------- + TIM1 Configuration: generate 1 PWM signal using the DMA burst mode: + + TIM1 input clock (TIM1CLK) is set to 2 * APB2 clock (PCLK2), + since APB2 prescaler is different from 1. + TIM1CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM1CLK = 2 * (HCLK / 2) = HCLK = SystemCoreClock + + To get TIM1 counter clock at 24 MHz, the prescaler is computed as follows: + Prescaler = (TIM1CLK / TIM1 counter clock) - 1 + Prescaler = (SystemCoreClock /24 MHz) - 1 + + The TIM1 period is 5.8 KHz: TIM1 Frequency = TIM1 counter clock/(ARR + 1) + = 24 MHz / 4096 = 5.85 KHz + TIM1 Channel1 duty cycle = (TIM1_CCR1/ TIM1_ARR)* 100 = 33.33% + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + ----------------------------------------------------------------------- */ + TIM_TimeBaseStructure.TIM_Period = 0xFFFF; + TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t) (SystemCoreClock / 24000000) - 1; + TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); + + /* TIM Configuration in PWM Mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 0xFFF; + TIM_OC1Init(TIM1, &TIM_OCInitStructure); + + /* TIM1 DMAR Base register and DMA Burst Length Config */ + TIM_DMAConfig(TIM1, TIM_DMABase_ARR, TIM_DMABurstLength_3Transfers); + + /* TIM1 DMA Update enable */ + TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE); + + /* TIM1 enable */ + TIM_Cmd(TIM1, ENABLE); + + /* TIM1 PWM Outputs Enable */ + TIM_CtrlPWMOutputs(TIM1, ENABLE); + + /* Enable DMA2 Stream5 */ + DMA_Cmd(DMA2_Stream5, ENABLE); + + /* Wait until DMA2 Stream5 end of Transfer */ + while (!DMA_GetFlagStatus(DMA2_Stream5, DMA_FLAG_TCIF5)) + { + } + + /* Infinite loop */ + while(1) + { + } +} + +/** + * @brief Configure the TIM1 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* TIM1 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); + + /* GPIOA clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + + /* DMA2 clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + /* GPIOA Configuration: PA8(TIM1 CH1) as alternate function push-pull ------*/ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* Connect TIM pins to AF1 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1); + + /* DeInitialize the DMA2 Stream5 */ + DMA_DeInit(DMA2_Stream5); + + DMA_InitStructure.DMA_Channel = DMA_Channel_6; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)TIM1_DMAR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)SRC_Buffer; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = 3; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA2_Stream5, &DMA_InitStructure); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/readme.txt new file mode 100644 index 000000000..9603c9040 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/readme.txt @@ -0,0 +1,95 @@ +/** + @page TIM1_DMABURST TIM1 DMA Burst transfer example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/DMABurst/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM1 DMA Burst transfer example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to update the TIM1 channel1 period and the duty cycle +using the TIM1 DMA burst feature. + +Every update DMA request, the DMA will do 3 transfers of half words into Timer +registers beginning from ARR register. +On the DMA update request, 0x0FFF will be transferred into ARR, 0x0000 +will be transferred into RCR, 0x0555 will be transferred into CCR1. + +The TIM1CLK frequency is set to SystemCoreClock (Hz), to get TIM1 counter +clock at 24 MHz the Prescaler is computed as following: + - Prescaler = (TIM1CLK / TIM1 counter clock) - 1 + +SystemCoreClock is set to 120 MHz. + +The TIM1 period is 5.8 KHz: TIM1 Frequency = TIM1 counter clock/(ARR + 1) + = 24 MHz / 4096 = 5.8 KHz + +The TIM1 CCR1 register value is equal to 0x555, so the TIM1 Channel 1 generates a +PWM signal with a frequency equal to 5.8 KHz and a duty cycle equal to 33.33%: +TIM1 Channel1 duty cycle = (TIM1_CCR1/ TIM1_ARR + 1)* 100 = 33.33% + +The PWM waveform can be displayed using an oscilloscope. + +@note No need of RCR update, but we should do it because of the ARR and CCR1 + mapping. + +@par Directory contents + + - TIM/DMABurst/stm32f2xx_conf.h Library Configuration file + - TIM/DMABurst/stm32f2xx_it.c Interrupt handlers + - TIM/DMABurst/stm32f2xx_it.h Interrupt handlers header file + - TIM/DMABurst/main.c Main program + - TIM/DMABurst/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the following pins to an oscilloscope to monitor the different + waveforms: + - TIM1 CH1 (PA.08) + +@par How to use it ? + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/stm32f2xx_conf.h new file mode 100644 index 000000000..4f254f35d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/DMABurst/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/stm32f2xx_it.c new file mode 100644 index 000000000..86f54d57e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/DMABurst/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_DMABurst + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/stm32f2xx_it.h new file mode 100644 index 000000000..de2011e99 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/DMABurst/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/DMABurst/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/main.c new file mode 100644 index 000000000..47b773a5a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/main.c @@ -0,0 +1,277 @@ +/** + ****************************************************************************** + * @file TIM/ExtTrigger_Synchro/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_ExtTrigger_Synchro + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_ICInitTypeDef TIM_ICInitStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* Timers synchronisation in cascade mode with an external trigger ----- + 1/TIM1 is configured as Master Timer: + - Toggle Mode is used + - The TIM1 Enable event is used as Trigger Output + + 2/TIM1 is configured as Slave Timer for an external Trigger connected + to TIM1 TI2 pin (TIM1 CH2 configured as input pin): + - The TIM1 TI2FP2 is used as Trigger Input + - Rising edge is used to start and stop the TIM1: Gated Mode. + + 3/TIM3 is slave for TIM1 and Master for TIM4, + - Toggle Mode is used + - The ITR1(TIM1) is used as input trigger + - Gated mode is used, so start and stop of slave counter + are controlled by the Master trigger output signal(TIM1 enable event). + - The TIM3 enable event is used as Trigger Output. + + 4/TIM4 is slave for TIM3, + - Toggle Mode is used + - The ITR2(TIM3) is used as input trigger + - Gated mode is used, so start and stop of slave counter + are controlled by the Master trigger output signal(TIM3 enable event). + + TIM1 input clock (TIM1CLK) is set to 2 * APB2 clock (PCLK2), + since APB2 prescaler is different from 1. + TIM1CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM1CLK = 2 * (HCLK / 2) = HCLK = SystemCoreClock + + TIM3/TIM4 input clock (TIM3CLK/TIM4CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM3CLK/TIM4CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM3CLK/TIM4CLK = HCLK / 2 = SystemCoreClock /2 + + The TIM1CLK is fixed to 120 MHZ, the Prescaler is equal to 4 so the TIMx clock + counter is equal to 24 MHz. + The TIM3CLK and TIM4CLK are fixed to 60 MHZ, the Prescaler is equal to 4 + so the TIMx clock counter is equal to 12 MHz. + The Three Timers are running at: + TIMx frequency = TIMx clock counter/ 2*(TIMx_Period + 1) = 162.1 KHz. + + The starts and stops of the TIM1 counters are controlled by the + external trigger. + The TIM3 starts and stops are controlled by the TIM1, and the TIM4 + starts and stops are controlled by the TIM3. + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + -------------------------------------------------------------------- */ + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 73; + TIM_TimeBaseStructure.TIM_Prescaler = 4; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); + + TIM_TimeBaseStructure.TIM_Period = 36; + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + TIM_TimeBaseStructure.TIM_Period = 36; + TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); + + /* Master Configuration in Toggle Mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 64; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OC1Init(TIM1, &TIM_OCInitStructure); + + /* TIM1 Input Capture Configuration */ + TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; + TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; + TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; + TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; + TIM_ICInitStructure.TIM_ICFilter = 0; + + TIM_ICInit(TIM1, &TIM_ICInitStructure); + + /* TIM1 Input trigger configuration: External Trigger connected to TI2 */ + TIM_SelectInputTrigger(TIM1, TIM_TS_TI2FP2); + TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Gated); + + /* Select the Master Slave Mode */ + TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable); + + /* Master Mode selection: TIM1 */ + TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Enable); + + /* Slaves Configuration: Toggle Mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 10; + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + TIM_OC1Init(TIM4, &TIM_OCInitStructure); + + /* Slave Mode selection: TIM3 */ + TIM_SelectInputTrigger(TIM3, TIM_TS_ITR0); + TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated); + + /* Select the Master Slave Mode */ + TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); + + /* Master Mode selection: TIM3 */ + TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Enable); + + /* Slave Mode selection: TIM4 */ + TIM_SelectInputTrigger(TIM4, TIM_TS_ITR2); + TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Gated); + + /* TIM1 Main Output Enable */ + TIM_CtrlPWMOutputs(TIM1, ENABLE); + + /* TIM enable counter */ + TIM_Cmd(TIM1, ENABLE); + TIM_Cmd(TIM3, ENABLE); + TIM_Cmd(TIM4, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* TIM3 and TIM4 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4, ENABLE); + + /* TIM1 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); + + /* GPIOA and GPIOB clocks enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE, ENABLE); + + /* GPIOA Configuration: PA.08(TIM1 CH1) as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* GPIOE Configuration: PE.11(TIM1 CH2) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; + GPIO_Init(GPIOE, &GPIO_InitStructure); + + /* Connect TIM pins to AF1 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_TIM1); + + /* GPIOB Configuration: PB.06(TIM4 CH1) as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect TIM pins to AF2 */ + GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); + + /* GPIOC Configuration: PC.06(TIM3 CH1) as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* Connect TIM pins to AF2 */ + GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3); + + +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/readme.txt new file mode 100644 index 000000000..9c80fe128 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/readme.txt @@ -0,0 +1,108 @@ +/** + @page TIM_ExtTrigger_Synchro TIM External Trigger Synchro example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/ExtTrigger_Synchro/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM External Trigger Synchro example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to synchronize TIM peripherals in cascade mode with an +external trigger. +In this example three timers are used: + +1/TIM1 is configured as Master Timer: + - Toggle Mode is used + - The TIM1 Enable event is used as Trigger Output + +2/TIM1 is configured as Slave Timer for an external Trigger connected to TIM1 + TI2 pin (TIM1 CH2 configured as input pin): + - The TIM1 TI2FP2 is used as Trigger Input + - Rising edge is used to start and stop the TIM1: Gated Mode. + +3/TIM3 is slave for TIM1 and Master for TIM4, + - Toggle Mode is used + - The ITR1(TIM1) is used as input trigger + - Gated mode is used, so start and stop of slave counter + are controlled by the Master trigger output signal(TIM1 enable event). + - The TIM3 enable event is used as Trigger Output. + +4/TIM4 is slave for TIM3, + - Toggle Mode is used + - The ITR2(TIM3) is used as input trigger + - Gated mode is used, so start and stop of slave counter + are controlled by the Master trigger output signal(TIM3 enable event). + + The TIM1CLK is fixed to 120 MHZ, the Prescaler is equal to 4 so the TIMx clock + counter is equal to 24 MHz. + The TIM3CLK and TIM4CLK are fixed to 60 MHZ, the Prescaler is equal to 4 + so the TIMx clock counter is equal to 12 MHz. + The Three Timers are running at: + TIMx frequency = TIMx clock counter/ 2*(TIMx_Period + 1) = 162.1 KHz. + +The starts and stops of the TIM1 counters are controlled by the external trigger. +The TIM3 starts and stops are controlled by the TIM1, and the TIM4 starts and +stops are controlled by the TIM3. + +@par Directory contents + + - TIM/ExtTrigger_Synchro/stm32f2xx_conf.h Library Configuration file + - TIM/ExtTrigger_Synchro/stm32f2xx_it.c Interrupt handlers + - TIM/ExtTrigger_Synchro/stm32f2xx_it.h Interrupt handlers header file + - TIM/ExtTrigger_Synchro/main.c Main program + - TIM/ExtTrigger_Synchro/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect an external trigger, with a frequency <= 40KHz, to the TIM1 CH2 + pin (PE.11). In this example the frequency is equal to 5 KHz. + + - Connect the following pins to an oscilloscope to monitor the different waveforms: + - TIM1 CH1 (PA.08) + - TIM3 CH1 (PC.06) + - TIM4 CH1 (PB.06) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/stm32f2xx_conf.h new file mode 100644 index 000000000..f6a50b375 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/ExtTrigger_Synchro/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/stm32f2xx_it.c new file mode 100644 index 000000000..32cefba0b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/ExtTrigger_Synchro/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_ExtTrigger_Synchro + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/stm32f2xx_it.h new file mode 100644 index 000000000..4265f5993 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/ExtTrigger_Synchro/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/ExtTrigger_Synchro/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/main.c new file mode 100644 index 000000000..bca6fa0ea --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/main.c @@ -0,0 +1,154 @@ +/** + ****************************************************************************** + * @file TIM/InputCapture/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_Input_Capture + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_ICInitTypeDef TIM_ICInitStructure; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM1 Configuration */ + TIM_Config(); + + /* TIM1 configuration: Input Capture mode --------------------- + The external signal is connected to TIM1 CH2 pin (PE.11) + The Rising edge is used as active edge, + The TIM1 CCR2 is used to compute the frequency value + ------------------------------------------------------------ */ + + TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; + TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; + TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; + TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; + TIM_ICInitStructure.TIM_ICFilter = 0x0; + + TIM_ICInit(TIM1, &TIM_ICInitStructure); + + /* TIM enable counter */ + TIM_Cmd(TIM1, ENABLE); + + /* Enable the CC2 Interrupt Request */ + TIM_ITConfig(TIM1, TIM_IT_CC2, ENABLE); + + while (1); +} + +/** + * @brief Configure the TIM1 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* TIM1 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); + + /* GPIOA clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); + + /* TIM1 channel 2 pin (PE.11) configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOE, &GPIO_InitStructure); + + /* Connect TIM pins to AF2 */ + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_TIM1); + + /* Enable the TIM1 global Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/readme.txt new file mode 100644 index 000000000..deac62a96 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/readme.txt @@ -0,0 +1,83 @@ +/** + @page TIM_Input_Capture TIM Input Capture example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/InputCapture/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM Input Capture example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to use the TIM peripheral to measure the frequency of an +external signal. + +The TIMxCLK frequency is set to SystemCoreClock /2 (Hz), the Prescaler is 0 so the +TIM1 counter clock is SystemCoreClock (Hz)/2. + +SystemCoreClock is set to 120 MHz. + +TIM1 is configured in Input Capture Mode: the external signal is connected to +TIM1 Channel2 used as input pin. +To measure the frequency we use the TIM1 CC2 interrupt request, +so In the TIM1_CC_IRQHandler routine, the frequency of the external signal is computed. +The "TIM1Freq" variable contains the external signal frequency: +TIM1Freq = TIM1 counter clock / Capture in Hz, +where the Capture is the difference between two consecutive TIM1 captures. + +The minimum frequency value to measure is 1100 Hz. + +@par Directory contents + + - TIM/InputCapture/stm32f2xx_conf.h Library Configuration file + - TIM/InputCapture/stm32f2xx_it.c Interrupt handlers + - TIM/InputCapture/stm32f2xx_it.h Interrupt handlers header file + - TIM/InputCapture/main.c Main program + - TIM/InputCapture/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the external signal to measure to the TIM1 CH2 pin (PE.11). + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/stm32f2xx_conf.h new file mode 100644 index 000000000..ab76fe8d9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/InputCapture/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/stm32f2xx_it.c new file mode 100644 index 000000000..37737403f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/stm32f2xx_it.c @@ -0,0 +1,215 @@ +/** + ****************************************************************************** + * @file TIM/InputCapture/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_Input_Capture + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint16_t IC3ReadValue1 = 0, IC3ReadValue2 = 0; +__IO uint16_t CaptureNumber = 0; +__IO uint32_t Capture = 0; +__IO uint32_t TIM1Freq = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ +/** + * @brief This function handles TIM1 global interrupt request. + * @param None + * @retval None + */ +void TIM1_CC_IRQHandler(void) +{ + if(TIM_GetITStatus(TIM1, TIM_IT_CC2) == SET) + { + /* Clear TIM1 Capture compare interrupt pending bit */ + TIM_ClearITPendingBit(TIM1, TIM_IT_CC2); + if(CaptureNumber == 0) + { + /* Get the Input Capture value */ + IC3ReadValue1 = TIM_GetCapture2(TIM1); + CaptureNumber = 1; + } + else if(CaptureNumber == 1) + { + /* Get the Input Capture value */ + IC3ReadValue2 = TIM_GetCapture2(TIM1); + + /* Capture computation */ + if (IC3ReadValue2 > IC3ReadValue1) + { + Capture = (IC3ReadValue2 - IC3ReadValue1); + } + else if (IC3ReadValue2 < IC3ReadValue1) + { + Capture = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2); + } + else + { + Capture = 0; + } + /* Frequency computation */ + TIM1Freq = (uint32_t) SystemCoreClock / Capture; + CaptureNumber = 0; + } + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/stm32f2xx_it.h new file mode 100644 index 000000000..107aed96d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file TIM/InputCapture/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void TIM1_CC_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/InputCapture/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/main.c new file mode 100644 index 000000000..35cf13925 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/main.c @@ -0,0 +1,214 @@ +/** + ****************************************************************************** + * @file TIM/OCActive/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_OCActive + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +uint16_t CCR1_Val = 1000; +uint16_t CCR2_Val = 500; +uint16_t CCR3_Val = 250; +uint16_t CCR4_Val = 125; +uint16_t PrescalerValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + + TIM_OCStructInit(&TIM_OCInitStructure); + + + /* --------------------------------------------------------------------------- + TIM3 Configuration: Output Compare Active Mode: + In this example TIM3 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM3CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM3CLK = HCLK / 2 = SystemCoreClock /2 + + To get TIM3 counter clock at 1 KHz, the prescaler is computed as follows: + Prescaler = (TIM3CLK / TIM3 counter clock) - 1 + Prescaler = ((SystemCoreClock /2) /1 KHz) - 1 + + Generate 4 signals with 4 different delays: + TIM3_CH1 delay = CCR1_Val/TIM3 counter clock = 1000 ms + TIM3_CH2 delay = CCR2_Val/TIM3 counter clock = 500 ms + TIM3_CH3 delay = CCR3_Val/TIM3 counter clock = 250 ms + TIM3_CH4 delay = CCR4_Val/TIM3 counter clock = 125 ms + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + + --------------------------------------------------------------------------- */ + + /*Compute the prescaler value */ + PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 1000) - 1; + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 65535; + TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + /* Output Compare Active Mode configuration: Channel1 */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Active; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR1_Val; + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable); + TIM_ARRPreloadConfig(TIM3, DISABLE); + /* Output Compare Active Mode configuration: Channel2 */ + TIM_OCInitStructure.TIM_Pulse = CCR2_Val; + TIM_OC2Init(TIM3, &TIM_OCInitStructure); + + TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* Output Compare Active Mode configuration: Channel3 */ + TIM_OCInitStructure.TIM_Pulse = CCR3_Val; + TIM_OC3Init(TIM3, &TIM_OCInitStructure); + + TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* Output Compare Active Mode configuration: Channel4 */ + TIM_OCInitStructure.TIM_Pulse = CCR4_Val; + TIM_OC4Init(TIM3, &TIM_OCInitStructure); + + TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* TIM3 enable counter */ + TIM_Cmd(TIM3, ENABLE); + + TIM_GenerateEvent(TIM3, TIM_EventSource_Update); + + /* Turn on LED1 */ + STM_EVAL_LEDOn(LED1); + + while (1) + {} +} + +/** + * @brief Configure the TIM3 pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* TIM3 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); + + /* GPIOC clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); + + /* GPIOC Configuration: TIM3 CH1 (PC6), TIM3 CH2 (PC7), TIM3 CH2 (PC8) and TIM3 CH4 (PC9) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* Connect TIM Channels to AF2 */ + GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM3); + + /* Initialize Leds mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/readme.txt new file mode 100644 index 000000000..379896369 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/readme.txt @@ -0,0 +1,99 @@ +/** + @page TIM_OCActive TIM_OCActive + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/OCActive/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM OCActive example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM peripheral to generate four different +signals with four different delays. + +The TIM3CLK frequency is set to SystemCoreClock / 2 (Hz), and the objective is +to get TIM3 counter clock at 1 KHz so the Prescaler is computed as following: + - Prescaler = (TIM3CLK / TIM3 counter clock) - 1 + +SystemCoreClock is set to 120 MHz for STM32F2xx Devices RevA, RevZ and RevB. + +The TIM3 CCR1 register value is equal to 1000: +TIM3_CH1 delay = CCR1_Val/TIM3 counter clock = 1000 ms +so the TIM3 Channel 1 generates a signal with a delay equal to 1000 ms. + +The TIM3 CCR2 register value is equal to 500: +TIM3_CH2 delay = CCR2_Val/TIM3 counter clock = 500 ms +so the TIM3 Channel 2 generates a signal with a delay equal to 500 ms. + +The TIM3 CCR3 register value is equal to 250: +TIM3_CH3 delay = CCR3_Val/TIM3 counter clock = 250 ms +so the TIM3 Channel 3 generates a signal with a delay equal to 250 ms. + +The TIM3 CCR4 register value is equal to 125: +TIM3_CH4 delay = CCR4_Val/TIM3 counter clock = 125 ms +so the TIM3 Channel 4 generates a signal with a delay equal to 125 ms. + +The delay correspond to the time difference between PG.06 and TIM3_CHx signal +rising edges. + +@par Directory contents + + - TIM/OCActive/stm32f2xx_conf.h Library Configuration file + - TIM/OCActive/stm32f2xx_it.c Interrupt handlers + - TIM/OCActive/stm32f2xx_it.h Interrupt handlers header file + - TIM/OCActive/main.c Main program + - TIM/OCActive/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the following pins to an oscilloscope to monitor the different + waveforms: + - Use LED1 connected to PG.06 + - PC.06 (TIM3_CH1) + - PC.07 (TIM3_CH2) + - PC.08 (TIM3_CH3) + - PC.09 (TIM3_CH4) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/stm32f2xx_conf.h new file mode 100644 index 000000000..2019d42d3 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file TIM/OCActive/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/stm32f2xx_it.c new file mode 100644 index 000000000..27921146f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/OCActive/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_OCActive + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/stm32f2xx_it.h new file mode 100644 index 000000000..f953fa58e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/OCActive/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCActive/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/main.c new file mode 100644 index 000000000..bb3831052 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/main.c @@ -0,0 +1,232 @@ +/** + ****************************************************************************** + * @file TIM/OCInactive/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_OCInactive + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +uint16_t CCR1_Val = 1000; +uint16_t CCR2_Val = 500; +uint16_t CCR3_Val = 250; +uint16_t CCR4_Val = 125; +uint16_t PrescalerValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* --------------------------------------------------------------- + TIM2 Configuration: Output Compare Inactive Mode: + In this example TIM2 input clock (TIM2CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM2CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM2CLK = HCLK / 2 = SystemCoreClock /2 + + To get TIM2 counter clock at 1 KHz, the prescaler is computed as follows: + Prescaler = (TIM2CLK / TIM2 counter clock) - 1 + Prescaler = ((SystemCoreClock /2) /1 KHz) - 1 + + Generate 4 signals with 4 different delays: + TIM2_CH1 delay = CCR1_Val/TIM2 counter clock = 1000 ms + TIM2_CH2 delay = CCR2_Val/TIM2 counter clock = 500 ms + TIM2_CH3 delay = CCR3_Val/TIM2 counter clock = 250 ms + TIM2_CH4 delay = CCR4_Val/TIM2 counter clock = 125 ms + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + + --------------------------------------------------------------- */ + /* Compute the prescaler value */ + PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 1000) - 1; + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 65535; + TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); + + /* Output Compare Active Mode configuration: Channel1 */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR1_Val; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OC1Init(TIM2, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable); + + /* Output Compare Active Mode configuration: Channel2 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR2_Val; + + TIM_OC2Init(TIM2, &TIM_OCInitStructure); + + TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable); + + /* Output Compare Active Mode configuration: Channel3 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR3_Val; + + TIM_OC3Init(TIM2, &TIM_OCInitStructure); + + TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable); + + /* Output Compare Active Mode configuration: Channel4 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR4_Val; + + TIM_OC4Init(TIM2, &TIM_OCInitStructure); + + TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Disable); + + TIM_ARRPreloadConfig(TIM2, ENABLE); + + /* Turn on LED1, LED2, LED3 and LED4 */ + STM_EVAL_LEDOn(LED1); + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + + /* TIM IT enable */ + TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE); + + /* TIM2 enable counter */ + TIM_Cmd(TIM2, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + + /* TIM2 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); + + /* GPIOA clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + + /* GPIOC Configuration: TIM2 CH1 (PA0), TIM2 CH2 (PA1), TIM2 CH2 (PA2) and TIM2 CH4 (PA3) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* Connect TIM Channels to AF1 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM2); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_TIM2); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_TIM2); + + /* Initialize Leds mounted on STM324xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Enable the TIM2 Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/readme.txt new file mode 100644 index 000000000..1a785e473 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/readme.txt @@ -0,0 +1,97 @@ +/** + @page TIM_OCInactive TIM_OCInactive + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/OCInactive/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM OCInactive example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM peripheral in Output Compare Inactive +mode with the corresponding Interrupt requests for each channel. + +The TIM2CLK frequency is set to SystemCoreClock / 2 (Hz), and the objective is +to get TIM2 counter clock at 1 KHz so the Prescaler is computed as following: + - Prescaler = (TIM2CLK / TIM2 counter clock) - 1 +SystemCoreClock is set to 120 MHz for STM32F2xx devices + +The TIM2 CCR1 register value is equal to 1000: +TIM2_CC1 delay = CCR1_Val/TIM2 counter clock = 1000 ms +so the PA.00 is reset after a delay equal to 1000 ms. + +The TIM2 CCR2 register value is equal to 500: +TIM2_CC2 delay = CCR2_Val/TIM2 counter clock = 500 ms +so the PA.01 is reset after a delay equal to 500 ms. + +The TIM2 CCR3 register value is equal to 250: +TIM2_CC3 delay = CCR3_Val/TIM2 counter clock = 250 ms +so the PA.02 is reset after a delay equal to 250 ms. + +The TIM2 CCR4 register value is equal to 125: +TIM2_CC4 delay = CCR4_Val/TIM2 counter clock = 125 ms +so the PA.03 is reset after a delay equal to 125 ms. + +While the counter is lower than the Output compare registers values, which +determines the Output delay, the PG.06, PG.08, PI.09 and PC.07 pin are turned on. + +When the counter value reaches the Output compare registers values, the Output +Compare interrupts are generated and, in the handler routine, these pins are turned off. + +@par Directory contents + + - TIM/OCInactive/stm32f2xx_conf.h Library Configuration file + - TIM/OCInactive/stm32f2xx_it.c Interrupt handlers + - TIM/OCInactive/stm32f2xx_it.h Interrupt handlers header file + - TIM/OCInactive/main.c Main program + - TIM/OCInactive/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins and connect them an oscilloscope to monitor the different + waveforms. + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/stm32f2xx_conf.h new file mode 100644 index 000000000..cf2073f19 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file TIM/OCInactive/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/stm32f2xx_it.c new file mode 100644 index 000000000..0bbc0fa67 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/stm32f2xx_it.c @@ -0,0 +1,211 @@ +/** + ****************************************************************************** + * @file TIM/OCInactive/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_OCInactive + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles TIM2 global interrupt request. + * @param None + * @retval None + */ +void TIM2_IRQHandler(void) +{ + if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) + { + /* Clear TIM2 Capture Compare1 interrupt pending bit*/ + TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); + + /* LED1 turn-off after 1000 ms */ + STM_EVAL_LEDOff(LED1); + } + else if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET) + { + /* Clear TIM2 Capture Compare2 interrupt pending bit*/ + TIM_ClearITPendingBit(TIM2, TIM_IT_CC2); + + /* LED2 turn-off after 500 ms */ + STM_EVAL_LEDOff(LED2); + } + else if (TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET) + { + /* Clear TIM2 Capture Compare3 interrupt pending bit*/ + TIM_ClearITPendingBit(TIM2, TIM_IT_CC3); + + /* LED3 turn-off after 250 ms */ + STM_EVAL_LEDOff(LED3); + } + else + { + /* Clear TIM2 Capture Compare4 interrupt pending bit*/ + TIM_ClearITPendingBit(TIM2, TIM_IT_CC4); + + /* LED4 turn-off after 125 ms */ + STM_EVAL_LEDOff(LED4); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/stm32f2xx_it.h new file mode 100644 index 000000000..9a929ec4a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file TIM/OCInactive/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void TIM2_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCInactive/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/main.c new file mode 100644 index 000000000..d9bf1f6b0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/main.c @@ -0,0 +1,227 @@ +/** + ****************************************************************************** + * @file TIM/OCToggle/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_OCToggle + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +__IO uint16_t CCR1_Val = 40961; +__IO uint16_t CCR2_Val = 20480; +__IO uint16_t CCR3_Val = 10240; +__IO uint16_t CCR4_Val = 5120; +uint16_t PrescalerValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* --------------------------------------------------------------------------- + TIM3 Configuration: Output Compare Toggle Mode: + + In this example TIM3 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM3CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM3CLK = HCLK / 2 = SystemCoreClock /2 + + To get TIM3 counter clock at 15 MHz, the prescaler is computed as follows: + Prescaler = (TIM3CLK / TIM3 counter clock) - 1 + Prescaler = ((SystemCoreClock /2) /15 MHz) - 1 + + CC1 update rate = TIM3 counter clock / CCR1_Val = 366.2 Hz + ==> So the TIM3 Channel 1 generates a periodic signal with a + frequency equal to 183.1 Hz. + + CC2 update rate = TIM3 counter clock / CCR2_Val = 732.4 Hz + ==> So the TIM3 Channel 2 generates a periodic signal with a + frequency equal to 366.3 Hz. + + CC3 update rate = TIM3 counter clock / CCR3_Val = 1464.8 Hz + ==> So the TIM3 Channel 3 generates a periodic signal with a + frequency equal to 732.4 Hz. + + CC4 update rate = TIM3 counter clock / CCR4_Val = 2929.6 Hz + ==> So the TIM3 Channel 4 generates a periodic signal with a + frequency equal to 1464.8 Hz. + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + --------------------------------------------------------------------------- */ + + /* Compute the prescaler value */ + PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 15000000) - 1; + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 65535; + TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + /* Output Compare Toggle Mode configuration: Channel1 */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR1_Val; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* Output Compare Toggle Mode configuration: Channel2 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR2_Val; + + TIM_OC2Init(TIM3, &TIM_OCInitStructure); + + TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* Output Compare Toggle Mode configuration: Channel3 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR3_Val; + + TIM_OC3Init(TIM3, &TIM_OCInitStructure); + + TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* Output Compare Toggle Mode configuration: Channel4 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR4_Val; + + TIM_OC4Init(TIM3, &TIM_OCInitStructure); + + TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* TIM enable counter */ + TIM_Cmd(TIM3, ENABLE); + + /* TIM IT enable */ + TIM_ITConfig(TIM3, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM3 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* TIM3 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); + + /* GPIOC clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); + + /* GPIOC Configuration: TIM3 CH1 (PC6), TIM3 CH2 (PC7), TIM3 CH2 (PC8) and TIM3 CH4 (PC9) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* Connect TIM Channels to AF2 */ + GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM3); + + /* Enable the TIM3 global Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/readme.txt new file mode 100644 index 000000000..36c91c225 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/readme.txt @@ -0,0 +1,94 @@ +/** + @page TIM_OCToggle TIM_OCToggle + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/OCToggle/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM OCToggle example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM3 peripheral to generate four different +signals with four different frequencies. + +The TIM3CLK frequency is set to SystemCoreClock / 2 (Hz), and we want to get TIM3 +counter clock at 15 MHz so the Prescaler is computed as following: + - Prescaler = (TIM3CLK / TIM3 counter clock) - 1 +SystemCoreClock is set to 120 MHz for STM32F2xx devices + +The TIM3 CCR1 register value is equal to 40961: +CC1 update rate = TIM3 counter clock / CCR1_Val = 366.2 Hz, +so the TIM3 Channel 1 generates a periodic signal with a frequency equal to 183.1 Hz. + +The TIM3 CCR2 register is equal to 20480: +CC2 update rate = TIM3 counter clock / CCR2_Val = 732.4 Hz +so the TIM3 channel 2 generates a periodic signal with a frequency equal to 366.3 Hz. + +The TIM3 CCR3 register is equal to 10240: +CC3 update rate = TIM3 counter clock / CCR3_Val = 1464.8 Hz +so the TIM3 channel 3 generates a periodic signal with a frequency equal to 732.4 Hz. + +The TIM3 CCR4 register is equal to 5120: +CC4 update rate = TIM3 counter clock / CCR4_Val = 2929.6 Hz +so the TIM3 channel 4 generates a periodic signal with a frequency equal to 1464.8 Hz. + + +@par Directory contents + + - TIM/OCToggle/stm32f2xx_conf.h Library Configuration file + - TIM/OCToggle/stm32f2xx_it.c Interrupt handlers + - TIM/OCToggle/stm32f2xx_it.h Interrupt handlers header file + - TIM/OCToggle/main.c Main program + - TIM/OCToggle/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the TIM3 pins to an oscilloscope to monitor the different waveforms: + - PC.06 (TIM3_CH1) + - PC.07 (TIM3_CH2) + - PC.08 (TIM3_CH3) + - PC.09 (TIM3_CH4) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/stm32f2xx_conf.h new file mode 100644 index 000000000..9ba014462 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file TIM/OCToggle/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/stm32f2xx_it.c new file mode 100644 index 000000000..48c31a640 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/stm32f2xx_it.c @@ -0,0 +1,215 @@ +/** + ****************************************************************************** + * @file TIM/OCToggle/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_OCToggle + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint16_t capture = 0; +extern __IO uint16_t CCR1_Val; +extern __IO uint16_t CCR2_Val; +extern __IO uint16_t CCR3_Val; +extern __IO uint16_t CCR4_Val; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles TIM3 global interrupt request. + * @param None + * @retval None + */ +void TIM3_IRQHandler(void) +{ + /* TIM3_CH1 toggling with frequency = 183.1 Hz */ + if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET) + { + TIM_ClearITPendingBit(TIM3, TIM_IT_CC1 ); + capture = TIM_GetCapture1(TIM3); + TIM_SetCompare1(TIM3, capture + CCR1_Val ); + } + + /* TIM3_CH2 toggling with frequency = 366.2 Hz */ + if (TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET) + { + TIM_ClearITPendingBit(TIM3, TIM_IT_CC2); + capture = TIM_GetCapture2(TIM3); + TIM_SetCompare2(TIM3, capture + CCR2_Val); + } + + /* TIM3_CH3 toggling with frequency = 732.4 Hz */ + if (TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET) + { + TIM_ClearITPendingBit(TIM3, TIM_IT_CC3); + capture = TIM_GetCapture3(TIM3); + TIM_SetCompare3(TIM3, capture + CCR3_Val); + } + + /* TIM3_CH4 toggling with frequency = 1464.8 Hz */ + if (TIM_GetITStatus(TIM3, TIM_IT_CC4) != RESET) + { + TIM_ClearITPendingBit(TIM3, TIM_IT_CC4); + capture = TIM_GetCapture4(TIM3); + TIM_SetCompare4(TIM3, capture + CCR4_Val); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/stm32f2xx_it.h new file mode 100644 index 000000000..541c4b106 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file TIM/OCToggle/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void TIM3_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OCToggle/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/main.c new file mode 100644 index 000000000..a407aeb65 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/main.c @@ -0,0 +1,211 @@ +/** + ****************************************************************************** + * @file TIM/OnePulse/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_OnePulse + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_ICInitTypeDef TIM_ICInitStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +uint16_t PrescalerValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* -------------------------------------------------------------------------- + TIM4 configuration: One Pulse mode + The external signal is connected to TIM4_CH2 pin (PB.07), + The Rising edge is used as active edge, + The One Pulse signal is output on TIM4_CH1 pin (PB.06) + The TIM_Pulse defines the delay value + The (TIM_Period - TIM_Pulse) defines the One Pulse value. + + TIM4 input clock (TIM4CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM4CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM4CLK = HCLK / 2 = SystemCoreClock /2 + + TIM2CLK = SystemCoreClock/2, we want to get TIM2 counter clock at 30 MHz: + Prescaler = (TIM2CLK / TIM2 counter clock) - 1 + Prescaler = ((SystemCoreClock /2) /30 MHz) - 1 + + The Autoreload value is 65535 (TIM4->ARR), so the maximum frequency value + to trigger the TIM4 input is 30000000/65535 = 458 Hz. + + The TIM_Pulse defines the delay value, the delay value is fixed + to 546.1 us: + delay = CCR1/TIM4 counter clock = 546.1 us. + The (TIM_Period - TIM_Pulse) defines the One Pulse value, + the pulse value is fixed to 1.638 ms: + One Pulse value = (TIM_Period - TIM_Pulse) / TIM4 counter clock = 1.638 ms. + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + + --------------------------------------------------------------------------- */ + + /* Compute the prescaler value */ + PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 30000000) - 1; + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 65535; + TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); + + /* TIM4 PWM2 Mode configuration: Channel1 */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 16383; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OC1Init(TIM4, &TIM_OCInitStructure); + + /* TIM4 configuration in Input Capture Mode */ + + TIM_ICStructInit(&TIM_ICInitStructure); + + TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; + TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; + TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; + TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; + TIM_ICInitStructure.TIM_ICFilter = 0; + + TIM_ICInit(TIM4, &TIM_ICInitStructure); + + /* One Pulse Mode selection */ + TIM_SelectOnePulseMode(TIM4, TIM_OPMode_Single); + + /* Input Trigger selection */ + TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2); + + /* Slave Mode selection: Trigger Mode */ + TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Trigger); + + while (1) + {} +} + +/** + * @brief Configure the TIM4 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* TIM4 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); + + /* GPIOB clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); + + /* TIM4_CH1 pin (PB.06) configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* TIM4_CH2 pin (PB.07) configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect TIM pins to AF2 */ + GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_TIM4); + +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/readme.txt new file mode 100644 index 000000000..afbfc9e40 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/readme.txt @@ -0,0 +1,88 @@ +/** + @page TIM_OnePulse TIM One Pulse example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/OnePulse/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM One Pulse example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to use the TIM peripheral to generate a One pulse Mode +after a Rising edge of an external signal is received in Timer Input pin. + +TIM2CLK = SystemCoreClock/2, we want to get TIM2 counter clock at 30 MHz: + - Prescaler = (TIM2CLK / TIM2 counter clock) - 1 + +SystemCoreClock is set to 120 MHz. + +The Autoreload value is 65535 (TIM4->ARR), so the maximum frequency value to +trigger the TIM4 input is 30000000/65535 = 458 Hz. + +The TIM4 is configured as follows: +The One Pulse mode is used, the external signal is connected to TIM4 CH2 pin (PB.07), +the rising edge is used as active edge, the One Pulse signal is output +on TIM4_CH1 (PB.06). + +The TIM_Pulse defines the delay value, the delay value is fixed to: +delay = CCR1/TIM4 counter clock = 16383 / 30000000 = 546.1 us. +The (TIM_Period - TIM_Pulse) defines the One Pulse value, the pulse value is fixed to: +One Pulse value = (TIM_Period - TIM_Pulse)/TIM4 counter clock + = (65535 - 16383) / 30000000 = 1.638 ms. + +@par Directory contents + + - TIM/OnePulse/stm32f2xx_conf.h Library Configuration file + - TIM/OnePulse/stm32f2xx_it.c Interrupt handlers + - TIM/OnePulse/stm32f2xx_it.h Interrupt handlers header file + - TIM/OnePulse/main.c Main program + - TIM/OnePulse/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the external signal to the TIM4_CH2 pin (PB.07) + - Connect the TIM4_CH1 (PB.06) pin to an oscilloscope to monitor the waveform. + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/stm32f2xx_conf.h new file mode 100644 index 000000000..678f2c282 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/OnePulse/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/stm32f2xx_it.c new file mode 100644 index 000000000..e18963d29 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/OnePulse/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_OnePulse + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/stm32f2xx_it.h new file mode 100644 index 000000000..a508aaef5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/OnePulse/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/OnePulse/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/main.c new file mode 100644 index 000000000..afeffc9c4 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/main.c @@ -0,0 +1,170 @@ +/** + ****************************************************************************** + * @file TIM/PWM_Input/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_PWM_Input + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_ICInitTypeDef TIM_ICInitStructure; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + + /* --------------------------------------------------------------------------- + TIM4 configuration: PWM Input mode + + In this example TIM4 input clock (TIM4CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM4CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM4CLK = HCLK / 2 = SystemCoreClock /2 + + External Signal Frequency = TIM4 counter clock / TIM4_CCR2 in Hz. + + External Signal DutyCycle = (TIM4_CCR1*100)/(TIM4_CCR2) in %. + + --------------------------------------------------------------------------- */ + + TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; + TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; + TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; + TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; + TIM_ICInitStructure.TIM_ICFilter = 0x0; + + TIM_PWMIConfig(TIM4, &TIM_ICInitStructure); + + /* Select the TIM4 Input Trigger: TI2FP2 */ + TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2); + + /* Select the slave Mode: Reset Mode */ + TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset); + TIM_SelectMasterSlaveMode(TIM4,TIM_MasterSlaveMode_Enable); + + /* TIM enable counter */ + TIM_Cmd(TIM4, ENABLE); + + /* Enable the CC2 Interrupt Request */ + TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE); + + while (1); +} + +/** + * @brief Configure the TIM4 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* TIM4 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); + + /* GPIOB clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); + + /* TIM4 chennel2 configuration : PB.07 */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect TIM pin to AF2 */ + GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_TIM4); + + /* Enable the TIM4 global Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/readme.txt new file mode 100644 index 000000000..d892ef0bc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/readme.txt @@ -0,0 +1,85 @@ +/** + @page TIM_PWM_Input TIM_PWM_Input + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/PWM_Input/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM PWM_Input example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to use the TIM peripheral to measure the frequency and +duty cycle of an external signal. + +The TIMxCLK frequency is set to SystemCoreClock/4 (Hz), the Prescaler is 0 so the +counter clock is SystemCoreClock/2 (Hz). +SystemCoreClock is set to 120 MHz fro STM32F2xx Devices RevA, RevZ and RevB. + +TIM4 is configured in PWM Input Mode: the external signal is connected to +TIM4 Channel2 used as input pin. +To measure the frequency and the duty cycle we use the TIM4 CC2 interrupt request, +so In the TIM4_IRQHandler routine, the frequency and the duty cycle of the external +signal are computed. +The "Frequency" variable contains the external signal frequency: +TIM4 counter clock = SystemCoreClock / 2, +Frequency = TIM4 counter clock / TIM4_CCR2 in Hz, +The "DutyCycle" variable contains the external signal duty cycle: +DutyCycle = (TIM4_CCR1*100)/(TIM4_CCR2) in %. + +The minimum frequency value to measure is 915 Hz (TIM4 counter clock / CCR MAX). + +@par Directory contents + + - TIM/PWM_Input/stm32f2xx_conf.h Library Configuration file + - TIM/PWM_Input/stm32f2xx_it.c Interrupt handlers + - TIM/PWM_Input/stm32f2xx_it.h Interrupt handlers header file + - TIM/PWM_Input/main.c Main program + - TIM/PWM_Input/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the external signal to measure to the TIM4 CH2 pin (PB.07). + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/stm32f2xx_conf.h new file mode 100644 index 000000000..e860271dd --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file TIM/PWM_Input/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/stm32f2xx_it.c new file mode 100644 index 000000000..7d299b169 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/stm32f2xx_it.c @@ -0,0 +1,202 @@ +/** + ****************************************************************************** + * @file TIM/PWM_Input/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_PWM_Input + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint16_t IC2Value = 0; +__IO uint16_t DutyCycle = 0; +__IO uint32_t Frequency = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles TIM4 global interrupt request. + * @param None + * @retval None + */ +void TIM4_IRQHandler(void) +{ + RCC_ClocksTypeDef RCC_Clocks; + RCC_GetClocksFreq(&RCC_Clocks); + + /* Clear TIM4 Capture compare interrupt pending bit */ + TIM_ClearITPendingBit(TIM4, TIM_IT_CC2); + + /* Get the Input Capture value */ + IC2Value = TIM_GetCapture2(TIM4); + + if (IC2Value != 0) + { + /* Duty cycle computation */ + DutyCycle = (TIM_GetCapture1(TIM4) * 100) / IC2Value; + + /* Frequency computation + TIM4 counter clock = (RCC_Clocks.HCLK_Frequency)/2 */ + + Frequency = (RCC_Clocks.HCLK_Frequency)/2 / IC2Value; + } + else + { + DutyCycle = 0; + Frequency = 0; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/stm32f2xx_it.h new file mode 100644 index 000000000..2382ff054 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file TIM/PWM_Input/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void TIM4_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Input/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/main.c new file mode 100644 index 000000000..cc8bac0ec --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/main.c @@ -0,0 +1,214 @@ +/** + ****************************************************************************** + * @file TIM/PWM_Output/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_PWM_Output + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +uint16_t CCR1_Val = 333; +uint16_t CCR2_Val = 249; +uint16_t CCR3_Val = 166; +uint16_t CCR4_Val = 83; +uint16_t PrescalerValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* ----------------------------------------------------------------------- + TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles. + + In this example TIM3 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM3CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM3CLK = HCLK / 2 = SystemCoreClock /2 + + To get TIM3 counter clock at 20 MHz, the prescaler is computed as follows: + Prescaler = (TIM3CLK / TIM3 counter clock) - 1 + Prescaler = ((SystemCoreClock /2) /20 MHz) - 1 + + To get TIM3 output clock at 30 KHz, the period (ARR)) is computed as follows: + ARR = (TIM3 counter clock / TIM3 output clock) - 1 + = 665 + + TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50% + TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5% + TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25% + TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5% + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + ----------------------------------------------------------------------- */ + + + /* Compute the prescaler value */ + PrescalerValue = (uint16_t) ((SystemCoreClock /2) / 20000000) - 1; + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 665; + TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + /* PWM1 Mode configuration: Channel1 */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR1_Val; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); + + /* PWM1 Mode configuration: Channel2 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR2_Val; + + TIM_OC2Init(TIM3, &TIM_OCInitStructure); + + TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); + + /* PWM1 Mode configuration: Channel3 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR3_Val; + + TIM_OC3Init(TIM3, &TIM_OCInitStructure); + + TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); + + /* PWM1 Mode configuration: Channel4 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR4_Val; + + TIM_OC4Init(TIM3, &TIM_OCInitStructure); + + TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); + + TIM_ARRPreloadConfig(TIM3, ENABLE); + + /* TIM3 enable counter */ + TIM_Cmd(TIM3, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM3 Ouput Channels. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* TIM3 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); + + /* GPIOC clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); + + /* GPIOC Configuration: TIM3 CH1 (PC6), TIM3 CH2 (PC7), TIM3 CH3 (PC8) and TIM3 CH4 (PC9) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* Connect TIM3 pins to AF2 */ + GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM3); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/readme.txt new file mode 100644 index 000000000..826c1e2d6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/readme.txt @@ -0,0 +1,100 @@ +/** + @page TIM_PWM_Output TIM_PWM_Output + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/PWM_Output/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM PWM_Output example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM peripheral in PWM (Pulse Width Modulation) +mode. + +The TIM3CLK frequency is set to SystemCoreClock / 2 (Hz), to get TIM3 counter +clock at 20 MHz the Prescaler is computed as following: + - Prescaler = (TIM3CLK / TIM3 counter clock) - 1 + +SystemCoreClock is set to 120 MHz for STM32F2xx Devices RevA, RevZ and RevB. + +The TIM3 is running at 30 KHz: TIM3 Frequency = TIM3 counter clock/(ARR + 1) + = 20 MHz / 666 = 30 KHz +The TIM3 CCR1 register value is equal to 500, so the TIM3 Channel 1 generates a +PWM signal with a frequency equal to 30 KHz and a duty cycle equal to 50%: +TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR + 1)* 100 = 50% + +The TIM3 CCR2 register value is equal to 375, so the TIM3 Channel 2 generates a +PWM signal with a frequency equal to 30 KHz and a duty cycle equal to 37.5%: +TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR + 1)* 100 = 37.5% + +The TIM3 CCR3 register value is equal to 250, so the TIM3 Channel 3 generates a +PWM signal with a frequency equal to 30 KHz and a duty cycle equal to 25%: +TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR + 1)* 100 = 25% + +The TIM3 CCR4 register value is equal to 125, so the TIM3 Channel 4 generates a +PWM signal with a frequency equal to 30 KHz and a duty cycle equal to 12.5%: +TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR + 1)* 100 = 12.5% + +The PWM waveform can be displayed using an oscilloscope. + + +@par Directory contents + + - TIM/PWM_Output/stm32f2xx_conf.h Library Configuration file + - TIM/PWM_Output/stm32f2xx_it.c Interrupt handlers + - TIM/PWM_Output/stm32f2xx_it.h Interrupt handlers header file + - TIM/PWM_Output/main.c Main program + - TIM/PWM_Output/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the following pins to an oscilloscope to monitor the different + waveforms: + - PC.06: (TIM3_CH1) + - PC.07: (TIM3_CH2) + - PC.08: (TIM3_CH3) + - PC.09: (TIM3_CH4) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/stm32f2xx_conf.h new file mode 100644 index 000000000..a154cfc4d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file TIM/PWM_Output/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/stm32f2xx_it.c new file mode 100644 index 000000000..df5dad833 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/PWM_Output/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_PWM_Output + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/stm32f2xx_it.h new file mode 100644 index 000000000..e5cc3b009 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/PWM_Output/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/PWM_Output/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/main.c new file mode 100644 index 000000000..5a8c1feec --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/main.c @@ -0,0 +1,232 @@ +/** + ****************************************************************************** + * @file TIM/Parallel_Synchro/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_Parallel_Synchro + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* --------------------------------------------------------------------------- + Timers synchronisation in parallel mode + 1/TIM2 is configured as Master Timer: + - PWM Mode is used + - The TIM2 Update event is used as Trigger Output + 2/TIM3 and TIM4 are slaves for TIM2, + - PWM Mode is used + - The ITR1(TIM2) is used as input trigger for both slaves + - Gated mode is used, so starts and stops of slaves counters + are controlled by the Master trigger output signal(update event). + + TIM2 input clock (TIM2CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM2CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM2CLK = HCLK / 2 = SystemCoreClock /2 + + To get Master Timer TIM2 output clock at 234.375 KHz running at and the + duty cycle is equal to 25% : + + The period (TIM2_ARR) is computed as follows: + ARR = (TIM2 counter clock / TIM2 output clock) - 1 + = 255 + + The dutu cycle (TIM2_CCR1) is computed as follows: + CCR1 = ((TIM2_ARR + 1) * 25)/100 + = 64 + + The TIM3 is running: + - At (TIM2 frequency)/ (TIM3 period + 1) = 23.437 KHz and a duty cycle + equal to TIM3_CCR1/(TIM3_ARR + 1) = 30% + + The TIM4 is running: + - At (TIM2 frequency)/ (TIM4 period + 1) = 46.875 KHz and a duty cycle + equal to TIM4_CCR1/(TIM4_ARR + 1) = 60% + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + + ----------------------------------------------------------------------------*/ + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 255; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); + + TIM_TimeBaseStructure.TIM_Period = 9; + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + TIM_TimeBaseStructure.TIM_Period = 4; + TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); + + /* Master Configuration in PWM1 Mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 64; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OC1Init(TIM2, &TIM_OCInitStructure); + + /* Select the Master Slave Mode */ + TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); + + /* Master Mode selection */ + TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); + + /* Slaves Configuration: PWM1 Mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 3; + + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + TIM_OC1Init(TIM4, &TIM_OCInitStructure); + + /* Slave Mode selection: TIM3 */ + TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated); + TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1); + + /* Slave Mode selection: TIM4 */ + TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Gated); + TIM_SelectInputTrigger(TIM4, TIM_TS_ITR1); + + /* TIM enable counter */ + TIM_Cmd(TIM3, ENABLE); + TIM_Cmd(TIM2, ENABLE); + TIM_Cmd(TIM4, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* TIM2, TIM3 and TIM4 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | + RCC_APB1Periph_TIM4, ENABLE); + + /* GPIOA, GPIOB and GPIOC clocks enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE); + + /* GPIOC Configuration: PC6(TIM3 CH1) as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* GPIOA Configuration: PA0(TIM2 CH1) as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* GPIOB Configuration: PB6(TIM4 CH1) as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect TIM pins to AF2 */ + GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM2); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/readme.txt new file mode 100644 index 000000000..a2a38296a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/readme.txt @@ -0,0 +1,97 @@ +/** + @page TIM_Parallel_Synchro TIM Parallel Synchro example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/Parallel_Synchro/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM Parallel Synchro example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to synchronize TIM peripherals in parallel mode. +In this example three timers are used: + +Timers synchronisation in parallel mode: + +1/TIM2 is configured as Master Timer: + - PWM Mode is used + - The TIM2 Update event is used as Trigger Output + +2/TIM3 and TIM4 are slaves for TIM2, + - PWM Mode is used + - The ITR1(TIM2) is used as input trigger for both slaves + - Gated mode is used, so starts and stops of slaves counters are controlled + by the Master trigger output signal(update event). + +The TIM2 counter clock is 60 MHz. + + The Master Timer TIM2 is running at TIM2 frequency: + TIM2 frequency = TIM2 counter clock/ (TIM2 period + 1) = 234.375 KHz + and the duty cycle is equal to TIM2_CCR1/(TIM2_ARR + 1) = 25%. + + The TIM3 is running at: + (TIM2 frequency)/ (TIM3 period + 1) = 23.437 KHz and a duty cycle equal to + TIM3_CCR1/(TIM3_ARR + 1) = 30% + + The TIM4 is running at: + (TIM2 frequency)/ (TIM4 period + 1) = 46.875 KHz and a duty cycle equal to + TIM4_CCR1/(TIM4_ARR + 1) = 60% + +@par Directory contents + + - TIM/Parallel_Synchro/stm32f2xx_conf.h Library Configuration file + - TIM/Parallel_Synchro/stm32f2xx_it.c Interrupt handlers + - TIM/Parallel_Synchro/stm32f2xx_it.h Interrupt handlers header file + - TIM/Parallel_Synchro/main.c Main program + - TIM/Parallel_Synchro/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the pins to an oscilloscope to monitor the different waveforms: + - TIM2 CH1 (PA.00) + - TIM3 CH1 (PC.06) + - TIM4 CH1 (PB.06) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/stm32f2xx_conf.h new file mode 100644 index 000000000..6a05ee181 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/Parallel_Synchro/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/stm32f2xx_it.c new file mode 100644 index 000000000..a5fe2e65d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/Parallel_Synchro/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_Parallel_Synchro + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/stm32f2xx_it.h new file mode 100644 index 000000000..d8df9a003 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/Parallel_Synchro/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/Parallel_Synchro/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/main.c new file mode 100644 index 000000000..4bd417e84 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/main.c @@ -0,0 +1,181 @@ +/** + ****************************************************************************** + * @file TIM/TIM10_PWMOutput/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM10_PWMOutput + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +uint16_t CCR1_Val = 333; +uint16_t PrescalerValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* --------------------------------------------------------------------------- + TIM10 Configuration: generate 1 PWM signal: + + In this example TIM10 input clock (TIM10CLK) is set to 2 * APB2 clock (PCLK2), + since APB2 prescaler is different from 1. + TIM10CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM10CLK = HCLK = SystemCoreClock + + To get TIM10 counter clock at 20 MHz, the prescaler is computed as follows: + Prescaler = (TIM10CLK / TIM10 counter clock) - 1 + Prescaler = (SystemCoreClock /20 MHz) - 1 + + To get TIM10 output clock at 30 KHz, the period (TIM10_ARR) is computed as follows: + ARR = (TIM10 counter clock / TIM10 output clock) - 1 + = 665 + + TIM10 Channel1 duty cycle = (TIM10_CCR1/ TIM10_ARR)* 100 = 50% + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + --------------------------------------------------------------------------- */ + + + /* Compute the prescaler value */ + PrescalerValue = (uint16_t) (SystemCoreClock / 20000000) - 1; + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 665; + TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM10, &TIM_TimeBaseStructure); + + /* PWM1 Mode configuration: Channel1 */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR1_Val; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OC1Init(TIM10, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM10, TIM_OCPreload_Enable); + + TIM_ARRPreloadConfig(TIM10, ENABLE); + + /* TIM10 enable counter */ + TIM_Cmd(TIM10, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM10 Ouput Channels. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* TIM10 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM10, ENABLE); + + /* GPIOF clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); + + /* GPIOF Configuration: TIM10 CH1 (PF6) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOF, &GPIO_InitStructure); + + /* Connect TIM pins to AF3 */ + GPIO_PinAFConfig(GPIOF, GPIO_PinSource6, GPIO_AF_TIM10); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/readme.txt new file mode 100644 index 000000000..f16d5fb88 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/readme.txt @@ -0,0 +1,84 @@ +/** + @page TIM10_PWMOutput TIM10_PWMOutput + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/TIM10_PWMOutput/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM PWM_Output example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM peripheral in PWM (Pulse Width Modulation) +mode. + +The TIM10CLK frequency is set to SystemCoreClock(Hz), to get TIM10 counter +clock at 20 MHz the Prescaler is computed as following: + - Prescaler = (TIM10CLK / TIM10 counter clock) - 1 + +SystemCoreClock is set to 120 MHz for STM32F2xx Devices RevA, RevZ and RevB. + +The TIM10 is running at 30 KHz: TIM10 Frequency = TIM10 counter clock/(ARR + 1) + = 20 MHz / 666 = 30 KHz + +The TIM10 CCR1 register value is equal to 500, so the TIM10 Channel 1 generates a +PWM signal with a frequency equal to 30 KHz and a duty cycle equal to 50%: + +TIM10 Channel1 duty cycle = (TIM10_CCR1/ TIM10_ARR + 1)* 100 = 50% + +The PWM waveform can be displayed using an oscilloscope. + +@par Directory contents + + - TIM/TIM10_PWMOutput/stm32f2xx_conf.h Library Configuration file + - TIM/TIM10_PWMOutput/stm32f2xx_it.c Interrupt handlers + - TIM/TIM10_PWMOutput/stm32f2xx_it.h Interrupt handlers header file + - TIM/TIM10_PWMOutput/main.c Main program + - TIM/TIM10_PWMOutput/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the following pin to an oscilloscope PF.06: (TIM10_CH1) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/stm32f2xx_conf.h new file mode 100644 index 000000000..db5accedc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file TIM/TIM10_PWMOutput/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/stm32f2xx_it.c new file mode 100644 index 000000000..f9746bf1e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/TIM10_PWMOutput/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM10_PWMOutput + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/stm32f2xx_it.h new file mode 100644 index 000000000..3d286137e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/TIM10_PWMOutput/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM10_PWMOutput/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/main.c new file mode 100644 index 000000000..5cf97ff63 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/main.c @@ -0,0 +1,271 @@ +/** + ****************************************************************************** + * @file TIM/TIM1_Synchro/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_TIM1_Synchro + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +TIM_BDTRInitTypeDef TIM_BDTRInitStructure; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM1 Configuration */ + TIM_Config(); + + /* --------------------------------------------------------------------------- + TIM1 and Timers(TIM3 and TIM4) synchronisation in parallel mode. + 1/TIM1 is configured as Master Timer: + - PWM Mode is used + - The TIM1 Update event is used as Trigger Output + + 2/TIM3 and TIM4 are slaves for TIM1, + - PWM Mode is used + - The ITR0(TIM1) is used as input trigger for both slaves + - Gated mode is used, so starts and stops of slaves counters + are controlled by the Master trigger output signal(update event). + + In this example TIM1 input clock (TIM1CLK) is set to 2 * APB2 clock (PCLK2), + since APB2 prescaler is different from 1. + TIM1CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM1CLK = HCLK = SystemCoreClock + + The TIM1 counter clock is equal to SystemCoreClock = 120 Mhz. + + The Master Timer TIM1 is running at: + TIM1 frequency = TIM1 counter clock / (TIM1_Period + 1) = 468.750 KHz + TIM1_Period = (TIM1 counter clock / TIM1 frequency) - 1 = 255 + and the duty cycle is equal to: TIM1_CCR1/(TIM1_ARR + 1) = 50% + + The TIM3 is running at: + (TIM1 frequency)/ ((TIM3 period +1)* (Repetition_Counter+1)) = 31.250 KHz and + a duty cycle equal to TIM3_CCR1/(TIM3_ARR + 1) = 33.3% + + The TIM4 is running at: + (TIM1 frequency)/ ((TIM4 period +1)* (Repetition_Counter+1)) = 46.875 KHz and + a duty cycle equal to TIM4_CCR1/(TIM4_ARR + 1) = 50% + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + --------------------------------------------------------------------------- */ + + + /* TIM3 Peripheral Configuration ----------------------------------------*/ + /* TIM3 Slave Configuration: PWM1 Mode */ + TIM_TimeBaseStructure.TIM_Period = 2; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 1; + + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + /* Slave Mode selection: TIM3 */ + TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated); + TIM_SelectInputTrigger(TIM3, TIM_TS_ITR0); + + /* TIM4 Peripheral Configuration ----------------------------------------*/ + /* TIM4 Slave Configuration: PWM1 Mode */ + TIM_TimeBaseStructure.TIM_Period = 1; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); + + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 1; + + TIM_OC1Init(TIM4, &TIM_OCInitStructure); + + /* Slave Mode selection: TIM4 */ + TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Gated); + TIM_SelectInputTrigger(TIM4, TIM_TS_ITR0); + + /* TIM1 Peripheral Configuration ----------------------------------------*/ + /* Time Base configuration */ + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseStructure.TIM_Period = 255; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_RepetitionCounter = 4; + + TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); + + /* Channel 1 Configuration in PWM mode */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; + TIM_OCInitStructure.TIM_Pulse = 127; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; + TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; + TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; + + TIM_OC1Init(TIM1, &TIM_OCInitStructure); + + /* Automatic Output enable, Break, dead time and lock configuration*/ + TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; + TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; + TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1; + TIM_BDTRInitStructure.TIM_DeadTime = 5; + TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; + TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; + TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; + + TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure); + + /* Master Mode selection */ + TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update); + + /* Select the Master Slave Mode */ + TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable); + + /* TIM1 counter enable */ + TIM_Cmd(TIM1, ENABLE); + + /* TIM enable counter */ + TIM_Cmd(TIM3, ENABLE); + TIM_Cmd(TIM4, ENABLE); + + /* Main Output Enable */ + TIM_CtrlPWMOutputs(TIM1, ENABLE); + + while (1) + {} +} + +/** + * @brief Configures TIM1, TIM3 and TIM4 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* GPIOA, GPIOB and GPIOC clocks enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE); + + /* TIM1 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); + + /* TIM3 and TIM4 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4, ENABLE); + + /* GPIOA Configuration: TIM1 Channel1 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* GPIOC Configuration: TIM3 Channel1 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* GPIOB Configuration: TIM4 Channel1 as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect TIM pins to AF1 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1); + + /* Connect TIM pins to AF2 */ + GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/readme.txt new file mode 100644 index 000000000..8adbcb0f0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/readme.txt @@ -0,0 +1,97 @@ +/** + @page TIM_TIM1_Synchro TIM1 Synchro example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/TIM1_Synchro/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM TIM1 Synchro example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to synchronize TIM1 and Timers (TIM3 and TIM4) in parallel mode. + +Timers synchronisation in parallel mode: + +1/ TIM1 is configured as Master Timer: + - PWM Mode is used + - The TIM1 Update event is used as Trigger Output + +2/ TIM3 and TIM4 are slaves for TIM1, + - PWM Mode is used + - The ITR0(TIM1) is used as input trigger for both slaves + - Gated mode is used, so starts and stops of slaves counters + are controlled by the Master trigger output signal(update event). + +The TIM1 counter clock is 120 MHz. + + The Master Timer TIM1 is running at: + TIM1 frequency = TIM1 counter clock / (TIM1_Period + 1) = 468.750 KHz + and the duty cycle is equal to: TIM1_CCR1/(TIM1_ARR + 1) = 50% + + The TIM3 is running at: + (TIM1 frequency)/ ((TIM3 period +1)* (Repetition_Counter+1)) = 31.250 KHz and + a duty cycle equal to TIM3_CCR1/(TIM3_ARR + 1) = 33.3% + + The TIM4 is running at: + (TIM1 frequency)/ ((TIM4 period +1)* (Repetition_Counter+1)) = 46.875 KHz and + a duty cycle equal to TIM4_CCR1/(TIM4_ARR + 1) = 50% + + +@par Directory contents + + - TIM/TIM1_Synchro/stm32f2xx_conf.h Library Configuration file + - TIM/TIM1_Synchro/stm32f2xx_it.c Interrupt handlers + - TIM/TIM1_Synchro/stm32f2xx_it.h Interrupt handlers header file + - TIM/TIM1_Synchro/main.c Main program + - TIM/TIM1_Synchro/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the following pins to an oscilloscope to monitor the different waveforms: + - TIM1 CH1 (PA.08) + - TIM3 CH1 (PC.06) + - TIM4 CH1 (PB.06) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/stm32f2xx_conf.h new file mode 100644 index 000000000..02f870fd2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file TIM/TIM1_Synchro/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/stm32f2xx_it.c new file mode 100644 index 000000000..83a95f055 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/stm32f2xx_it.c @@ -0,0 +1,165 @@ +/** + ****************************************************************************** + * @file TIM/TIM1_Synchro/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_TIM1_Synchro + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/stm32f2xx_it.h new file mode 100644 index 000000000..5566b84c2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file TIM/TIM1_Synchro/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM1_Synchro/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/main.c new file mode 100644 index 000000000..700d41fee --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/main.c @@ -0,0 +1,200 @@ +/** + ****************************************************************************** + * @file TIM/TIM9_OCToggle/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_TIM9_OCToggle + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +__IO uint16_t CCR1_Val = 40961; +__IO uint16_t CCR2_Val = 20480; +uint16_t PrescalerValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* --------------------------------------------------------------------------- + TIM9 Configuration: Output Compare Toggle Mode: + + In this example TIM9 input clock (TIM9CLK) is set to 2 * APB2 clock (PCLK2), + since APB2 prescaler is different from 1. + TIM9CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM9CLK = HCLK = SystemCoreClock + + To get TIM9 counter clock at 15 MHz, the prescaler is computed as follows: + Prescaler = (TIM9CLK / TIM9 counter clock) - 1 + Prescaler = (SystemCoreClock /15 MHz) - 1 + + CC1 update rate = TIM9 counter clock / CCR1_Val = 366.2 Hz + ==> So the TIM9 Channel 1 generates a periodic signal with + a frequency equal to 183.1 Hz + + CC2 update rate = TIM9 counter clock / CCR2_Val = 732.4 Hz + ==> So the TIM9 channel 2 generates a periodic signal with + a frequency equal to 366.3 Hz + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + --------------------------------------------------------------------------- */ + + + /* Compute the prescaler value */ + PrescalerValue = (uint16_t) (SystemCoreClock / 15000000) - 1; + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 65535; + TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM9, &TIM_TimeBaseStructure); + + /* Output Compare Toggle Mode configuration: Channel1 */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR1_Val; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OC1Init(TIM9, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM9, TIM_OCPreload_Disable); + + /* Output Compare Toggle Mode configuration: Channel2 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR2_Val; + + TIM_OC2Init(TIM9, &TIM_OCInitStructure); + + TIM_OC2PreloadConfig(TIM9, TIM_OCPreload_Disable); + + /* TIM enable counter */ + TIM_Cmd(TIM9, ENABLE); + + /* TIM IT enable */ + TIM_ITConfig(TIM9, TIM_IT_CC1 | TIM_IT_CC2, ENABLE); + + while (1) + {} +} + +/** + * @brief Configure the TIM9 Pins. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* TIM9 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9, ENABLE); + + /* GPIOA clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE); + + /* GPIOA Configuration: TIM9 CH1 (PA2) and TIM9 CH2 (PA3) */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* Connect TIM pins to AF3 */ + GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_TIM9); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_TIM9); + + /* Enable the TIM9 global Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM1_BRK_TIM9_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/readme.txt new file mode 100644 index 000000000..656f2e214 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/readme.txt @@ -0,0 +1,84 @@ +/** + @page TIM_TIM9_OCToggle TIM_TIM9_OCToggle + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file TIM/TIM9_OCToggle/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM TIM9_OCToggle example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM9 peripheral to generate four different +signals with Two different frequencies. + +The TIM9CLK frequency is set to SystemCoreClock (Hz), and we want to get TIM9 +counter clock at 15 MHz so the Prescaler is computed as following: + - Prescaler = (TIM9CLK / TIM9 counter clock) - 1 + +SystemCoreClock is set to 120 MHz for STM32F2xx devices + +The TIM9 CCR1 register value is equal to 40961: +CC1 update rate = TIM9 counter clock / CCR1_Val = 366.2 Hz, +so the TIM9 Channel 1 generates a periodic signal with a frequency equal to 183.1 Hz. + +The TIM9 CCR2 register is equal to 20480: +CC2 update rate = TIM9 counter clock / CCR2_Val = 732.4 Hz +so the TIM9 channel 2 generates a periodic signal with a frequency equal to 366.3 Hz. + +@par Directory contents + + - TIM/TIM9_OCToggle/stm32f2xx_conf.h Library Configuration file + - TIM/TIM9_OCToggle/stm32f2xx_it.c Interrupt handlers + - TIM/TIM9_OCToggle/stm32f2xx_it.h Interrupt handlers header file + - TIM/TIM9_OCToggle/main.c Main program + - TIM/TIM9_OCToggle/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect the TIM9 pins to an oscilloscope to monitor the different waveforms: + - PA.02 (TIM9_CH1) + - PA.03 (TIM9_CH2) + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/stm32f2xx_conf.h new file mode 100644 index 000000000..1e097ea25 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file TIM/TIM9_TIM9_OCToggle/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/stm32f2xx_it.c new file mode 100644 index 000000000..0d15f1569 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/stm32f2xx_it.c @@ -0,0 +1,198 @@ +/** + ****************************************************************************** + * @file TIM/TIM9_OCToggle/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_TIM9_OCToggle + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint16_t capture = 0; +extern __IO uint16_t CCR1_Val; +extern __IO uint16_t CCR2_Val; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles TIM9 global interrupt request. + * @param None + * @retval None + */ +void TIM1_BRK_TIM9_IRQHandler(void) +{ + /* TIM9_CH1 toggling with frequency = 183.1 Hz */ + if (TIM_GetITStatus(TIM9, TIM_IT_CC1) != RESET) + { + TIM_ClearITPendingBit(TIM9, TIM_IT_CC1); + capture = TIM_GetCapture1(TIM9); + TIM_SetCompare1(TIM9, capture + CCR1_Val); + } + + /* TIM9_CH2 toggling with frequency = 366.2 Hz */ + if (TIM_GetITStatus(TIM9, TIM_IT_CC2) != RESET) + { + TIM_ClearITPendingBit(TIM9, TIM_IT_CC2); + capture = TIM_GetCapture2(TIM9); + TIM_SetCompare2(TIM9, capture + CCR2_Val); + } + +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/stm32f2xx_it.h new file mode 100644 index 000000000..4518febc4 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file TIM/TIM9_OCToggle/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void TIM1_BRK_TIM9_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TIM9_OCToggle/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/main.c new file mode 100644 index 000000000..ad3c67a9d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/main.c @@ -0,0 +1,223 @@ +/** + ****************************************************************************** + * @file TIM/TimeBase/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_TimeBase + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +__IO uint16_t CCR1_Val = 40961; +__IO uint16_t CCR2_Val = 27309; +__IO uint16_t CCR3_Val = 13654; +__IO uint16_t CCR4_Val = 6826; +uint16_t PrescalerValue = 0; + +/* Private function prototypes -----------------------------------------------*/ +void TIM_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* TIM Configuration */ + TIM_Config(); + + /* ----------------------------------------------------------------------- + TIM3 Configuration: Output Compare Timing Mode: + + In this example TIM3 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1), + since APB1 prescaler is different from 1. + TIM3CLK = 2 * PCLK1 + PCLK1 = HCLK / 4 + => TIM3CLK = HCLK / 2 = SystemCoreClock /2 + + To get TIM3 counter clock at 6 MHz, the prescaler is computed as follows: + Prescaler = (TIM3CLK / TIM3 counter clock) - 1 + Prescaler = ((SystemCoreClock /2) /6 MHz) - 1 + + CC1 update rate = TIM3 counter clock / CCR1_Val = 146.48 Hz + ==> Toggling frequency = 73.24 Hz + + C2 update rate = TIM3 counter clock / CCR2_Val = 219.7 Hz + ==> Toggling frequency = 109.8 Hz + + CC3 update rate = TIM3 counter clock / CCR3_Val = 439.4 Hz + ==> Toggling frequency = 219.7 Hz + + CC4 update rate = TIM3 counter clock / CCR4_Val = 878.9 Hz + ==> Toggling frequency = 439.4 Hz + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + ----------------------------------------------------------------------- */ + + + /* Compute the prescaler value */ + PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 6000000) - 1; + + /* Time base configuration */ + TIM_TimeBaseStructure.TIM_Period = 65535; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + /* Prescaler configuration */ + TIM_PrescalerConfig(TIM3, PrescalerValue, TIM_PSCReloadMode_Immediate); + + /* Output Compare Timing Mode configuration: Channel1 */ + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR1_Val; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* Output Compare Timing Mode configuration: Channel2 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR2_Val; + + TIM_OC2Init(TIM3, &TIM_OCInitStructure); + + TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* Output Compare Timing Mode configuration: Channel3 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR3_Val; + + TIM_OC3Init(TIM3, &TIM_OCInitStructure); + + TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* Output Compare Timing Mode configuration: Channel4 */ + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = CCR4_Val; + + TIM_OC4Init(TIM3, &TIM_OCInitStructure); + + TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Disable); + + /* TIM Interrupts enable */ + TIM_ITConfig(TIM3, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE); + + /* TIM3 enable counter */ + TIM_Cmd(TIM3, ENABLE); + + while (1); +} + +/** + * @brief Configure the TIM IRQ Handler. + * @param None + * @retval None + */ +void TIM_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + + /* TIM3 clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); + + /* Enable the TIM3 gloabal Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Initialize Leds mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Turn on LED1, LED2, LED3 and LED4 */ + STM_EVAL_LEDOn(LED1); + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/readme.txt new file mode 100644 index 000000000..e5d1a0564 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/readme.txt @@ -0,0 +1,103 @@ +/** + @page TIM_TimeBase TIM_TimeBase + + @verbatim + ****************************************************************************** + * @file TIM/TimeBase/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the TIM Time Base example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to configure the TIM peripheral in Output Compare Timing +mode with the corresponding Interrupt requests for each channel in order to generate +4 different time bases. + +The TIM3CLK frequency is set to SystemCoreClock / 2 (Hz), to get TIM3 counter +clock at 6 MHz so the Prescaler is computed as following: + - Prescaler = (TIM3CLK / TIM3 counter clock) - 1 + +SystemCoreClock is set to 120MHz for STM32F2xx Devices RevA, RevZ and RevB. + +The TIM3 CC1 register value is equal to 40961, +CC1 update rate = TIM3 counter clock / CCR1_Val = 146.48 Hz, +so the TIM3 Channel 1 generates an interrupt each 6.8ms + +The TIM3 CC2 register is equal to 27309, +CC2 update rate = TIM3 counter clock / CCR2_Val = 219.7 Hz +so the TIM3 Channel 2 generates an interrupt each 4.55ms + +The TIM3 CC3 register is equal to 13654, +CC3 update rate = TIM3 counter clock / CCR3_Val = 439.4Hz +so the TIM3 Channel 3 generates an interrupt each 2.27ms + +The TIM3 CC4 register is equal to 6826, +CC4 update rate = TIM3 counter clock / CCR4_Val = 878.9 Hz +so the TIM3 Channel 4 generates an interrupt each 1.13ms. + +When the counter value reaches the Output compare registers values, the Output +Compare interrupts are generated and, in the handler routine, 4 pins(PG.06, PG.08, +PI.09 and PC.07) are toggled with the following frequencies: + +- PG.06: 73.24Hz (CC1) +- PG.08: 109.8Hz (CC2) +- PI.09: 219.7Hz (CC3) +- PC.07: 439.4Hz (CC4) + +@par Directory contents + + - TIM/TimeBase/stm32f2xx_conf.h Library Configuration file + - TIM/TimeBase/stm32f2xx_it.c Interrupt handlers + - TIM/TimeBase/stm32f2xx_it.h Interrupt handlers header file + - TIM/TimeBase/main.c Main program + - TIM/TimeBase/system_stm32f2xx.c STM32F2xx system clock configuration file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins and connect them on an oscilloscope to show the different + Time Base signals. + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/stm32f2xx_conf.h new file mode 100644 index 000000000..ec5011024 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/stm32f2xx_conf.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file TIM/TimeBase/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function which reports + * the name of the source file and the source line number of the call + * that failed. If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/stm32f2xx_it.c new file mode 100644 index 000000000..c0646471e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/stm32f2xx_it.c @@ -0,0 +1,221 @@ +/** + ****************************************************************************** + * @file TIM/TimeBase/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup TIM_TimeBase + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint16_t capture = 0; +extern __IO uint16_t CCR1_Val; +extern __IO uint16_t CCR2_Val; +extern __IO uint16_t CCR3_Val; +extern __IO uint16_t CCR4_Val; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + {} +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles TIM3 global interrupt request. + * @param None + * @retval None + */ +void TIM3_IRQHandler(void) +{ + if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET) + { + TIM_ClearITPendingBit(TIM3, TIM_IT_CC1); + + /* LED1 toggling with frequency = 73.24 Hz */ + STM_EVAL_LEDToggle(LED1); + capture = TIM_GetCapture1(TIM3); + TIM_SetCompare1(TIM3, capture + CCR1_Val); + } + else if (TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET) + { + TIM_ClearITPendingBit(TIM3, TIM_IT_CC2); + + /* LED2 toggling with frequency = 109.8 Hz */ + STM_EVAL_LEDToggle(LED2); + capture = TIM_GetCapture2(TIM3); + TIM_SetCompare2(TIM3, capture + CCR2_Val); + } + else if (TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET) + { + TIM_ClearITPendingBit(TIM3, TIM_IT_CC3); + + /* LED3 toggling with frequency = 219.7 Hz */ + STM_EVAL_LEDToggle(LED3); + capture = TIM_GetCapture3(TIM3); + TIM_SetCompare3(TIM3, capture + CCR3_Val); + } + else + { + TIM_ClearITPendingBit(TIM3, TIM_IT_CC4); + + /* LED4 toggling with frequency = 439.4 Hz */ + STM_EVAL_LEDToggle(LED4); + capture = TIM_GetCapture4(TIM3); + TIM_SetCompare4(TIM3, capture + CCR4_Val); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/stm32f2xx_it.h new file mode 100644 index 000000000..e2d7afb5d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file TIM/TimeBase/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void TIM2_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/TIM/TimeBase/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/main.c new file mode 100644 index 000000000..d0dc8edb9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/main.c @@ -0,0 +1,160 @@ +/** + ****************************************************************************** + * @file USART/HyperTerminal_Interrupt/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_HyperTerminal_Interrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +USART_InitTypeDef USART_InitStructure; +extern uint8_t NbrOfDataToTransfer; +extern uint8_t NbrOfDataToRead; +extern __IO uint8_t TxCounter; +extern __IO uint16_t RxCounter; +/* Private function prototypes -----------------------------------------------*/ +void NVIC_Config(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* NVIC configuration */ + NVIC_Config(); + +/* USARTx configuration ------------------------------------------------------*/ + /* USARTx configured as follow: + - BaudRate = 9600 baud + - Word Length = 8 Bits + - Two Stop Bit + - Odd parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitStructure.USART_BaudRate = 9600; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_2; + USART_InitStructure.USART_Parity = USART_Parity_Odd; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); + + /* Enable the EVAL_COM1 Transmit interrupt: this interrupt is generated when the + EVAL_COM1 transmit data register is empty */ + USART_ITConfig(EVAL_COM1, USART_IT_TXE, ENABLE); + + /* Wait until EVAL_COM1 send the TxBuffer */ + while(TxCounter < NbrOfDataToTransfer) + {} + + /* The software must wait until TC=1. The TC flag remains cleared during all data + transfers and it is set by hardware at the last frame抯 end of transmission*/ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + /* Enable the EVAL_COM1 Receive interrupt: this interrupt is generated when the + EVAL_COM1 receive data register is not empty */ + USART_ITConfig(EVAL_COM1, USART_IT_RXNE, ENABLE); + + /* Wait until EVAL_COM1 receive the RxBuffer */ + while(RxCounter < NbrOfDataToRead) + {} + + while (1) + { + } +} + +/** + * @brief Configures the nested vectored interrupt controller. + * @param None + * @retval None + */ +void NVIC_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + + /* Enable the USARTx Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = EVAL_COM1_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/readme.txt new file mode 100644 index 000000000..b6ff0866a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/readme.txt @@ -0,0 +1,98 @@ +/** + @page USART_HyperTerminal_Interrupt USART Hyperterminal interrupt Example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file USART/HyperTerminal_Interrupt/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the USART Hyperterminal interrupt Example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a description of how to use the EVAL_COM1 Transmit and Receive +interrupts to communicate with the hyperterminal. + + +First, the EVAL_COM1 sends the TxBuffer to the hyperterminal and still waiting for +a string from the hyperterminal that you must enter. +The string that you have entered is stored in the RxBuffer array. The receive +buffer have a RxBufferSize bytes as maximum (the reception is stopped when this +maximum receive value is reached). + +The EVAL_COM1 is configured as follow: + - BaudRate = 9600 baud + - Word Length = 8 Bits (7 data bit + 1 parity bit) + - Two Stop Bit + - Odd parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + +@note When the parity is enabled, the computed parity is inserted at the MSB +position of the transmitted data. + + +@par Directory contents + + - USART/HyperTerminal_Interrupt/stm32f2xx_conf.h Library Configuration file + - USART/HyperTerminal_Interrupt/stm32f2xx_it.h Interrupt handlers header file + - USART/HyperTerminal_Interrupt/stm32f2xx_it.c Interrupt handlers source file + - USART/HyperTerminal_Interrupt/main.c Main program + - USART/HyperTerminal_Interrupt/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port if you want to display data on the HyperTerminal. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 7 Bits + - Two Stop Bit + - Odd parity + - BaudRate = 9600 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/stm32f2xx_conf.h new file mode 100644 index 000000000..c6055bf20 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file USART/HyperTerminal_Interrupt/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/stm32f2xx_it.c new file mode 100644 index 000000000..f6bff6db5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/stm32f2xx_it.c @@ -0,0 +1,225 @@ +/** + ****************************************************************************** + * @file USART/HyperTerminal_Interrupt/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_HyperTerminal_Interrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define USARTx_IRQHANDLER USART3_IRQHandler + +#define TXBUFFERSIZE (countof(TxBuffer) - 1) +#define RXBUFFERSIZE 0x20 + +/* Private macro -------------------------------------------------------------*/ +#define countof(a) (sizeof(a) / sizeof(*(a))) + +/* Private variables ---------------------------------------------------------*/ +uint8_t TxBuffer[] = "\n\rUSART Hyperterminal Interrupts Example: USART-Hyperterminal\ + communication using Interrupt\n\r"; +uint8_t RxBuffer[RXBUFFERSIZE]; +uint8_t NbrOfDataToTransfer = TXBUFFERSIZE; +uint8_t NbrOfDataToRead = RXBUFFERSIZE; +__IO uint8_t TxCounter = 0; +__IO uint16_t RxCounter = 0; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles USARTx global interrupt request. + * @param None + * @retval None + */ +void USARTx_IRQHANDLER(void) +{ + if(USART_GetITStatus(EVAL_COM1, USART_IT_RXNE) != RESET) + { + /* Read one byte from the receive data register */ + RxBuffer[RxCounter++] = (USART_ReceiveData(EVAL_COM1) & 0x7F); + + if(RxCounter == NbrOfDataToRead) + { + /* Disable the EVAL_COM1 Receive interrupt */ + USART_ITConfig(EVAL_COM1, USART_IT_RXNE, DISABLE); + } + } + + if(USART_GetITStatus(EVAL_COM1, USART_IT_TXE) != RESET) + { + /* Write one byte to the transmit data register */ + USART_SendData(EVAL_COM1, TxBuffer[TxCounter++]); + + if(TxCounter == NbrOfDataToTransfer) + { + /* Disable the EVAL_COM1 Transmit interrupt */ + USART_ITConfig(EVAL_COM1, USART_IT_TXE, DISABLE); + } + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/stm32f2xx_it.h new file mode 100644 index 000000000..61a1d047d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file USART/HyperTerminal_Interrupt/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void USARTx_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/HyperTerminal_Interrupt/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/main.c new file mode 100644 index 000000000..da09eea31 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/main.c @@ -0,0 +1,373 @@ +/** + ****************************************************************************** + * @file USART/Smartcard/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_SmartCard + * @{ + */ + +/* Includes ------------------------------------------------------------------*/ +#include "smartcard.h" +#include "stm322xg_eval.h" + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Directories & Files ID */ +const uint8_t MasterRoot[2] = {0x3F, 0x00}; +const uint8_t GSMDir[2] = {0x7F, 0x20}; +const uint8_t ICCID[2] = {0x2F, 0xE2}; +const uint8_t IMSI[2] = {0x6F, 0x07}; +const uint8_t CHV1[8] = {'0', '0', '0', '0', '0', '0', '0', '0'}; + +/* APDU Transport Structures */ +SC_ADPU_Commands SC_ADPU; +SC_ADPU_Responce SC_Responce; +__IO uint32_t TimingDelay = 0; +static __IO ErrorStatus HSEStartUpStatus = SUCCESS; +__IO uint32_t CardInserted = 0; +uint32_t CHV1Status = 0, i = 0; +__IO uint8_t ICCID_Content[10] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +__IO uint8_t IMSI_Content[9] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +/* Private function prototypes -----------------------------------------------*/ +static void Delay(uint32_t nCount); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + SC_State SCState = SC_POWER_OFF; + + /* Setup SysTick Timer for 1 msec interrupts */ + SysTick_Config(SystemCoreClock / 1000); + + /* Initialize LEDs available on STM322xG-EVAL board *************************/ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Configure Smartcard Interface GPIO pins */ + SC_IOConfig(); + +/*-------------------------------- Idle task ---------------------------------*/ + while(1) + { + /* Loop while no Smartcard is detected */ + while(CardInserted == 0) + { + } + + /* Start SC Demo ---------------------------------------------------------*/ + + /* Wait A2R --------------------------------------------------------------*/ + SCState = SC_POWER_ON; + + SC_ADPU.Header.CLA = 0x00; + SC_ADPU.Header.INS = SC_GET_A2R; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x00; + SC_ADPU.Body.LC = 0x00; + + while(SCState != SC_ACTIVE_ON_T0) + { + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + + /* Apply the Procedure Type Selection (PTS) */ + SC_PTSConfig(); + + /* Inserts delay(400ms) for Smartcard clock resynchronisation */ + Delay(400); + + /* Select MF -------------------------------------------------------------*/ + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_SELECT_FILE; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x00; + SC_ADPU.Body.LC = 0x02; + + for(i = 0; i < SC_ADPU.Body.LC; i++) + { + SC_ADPU.Body.Data[i] = MasterRoot[i]; + } + while(i < LC_MAX) + { + SC_ADPU.Body.Data[i++] = 0; + } + SC_ADPU.Body.LE = 0; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + + /* Get Response on MF ----------------------------------------------------*/ + if(SC_Responce.SW1 == SC_DF_SELECTED) + { + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_GET_RESPONCE; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x00; + SC_ADPU.Body.LC = 0x00; + SC_ADPU.Body.LE = SC_Responce.SW2; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + + /* Select ICCID ----------------------------------------------------------*/ + if(((SC_Responce.SW1 << 8) | (SC_Responce.SW2)) == SC_OP_TERMINATED) + { + /* Check if the CHV1 is enabled */ + if((SC_Responce.Data[13] & 0x80) == 0x00) + { + CHV1Status = 0x01; + } + /* Send APDU Command for ICCID selection */ + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_SELECT_FILE; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x00; + SC_ADPU.Body.LC = 0x02; + + for(i = 0; i < SC_ADPU.Body.LC; i++) + { + SC_ADPU.Body.Data[i] = ICCID[i]; + } + while(i < LC_MAX) + { + SC_ADPU.Body.Data[i++] = 0; + } + SC_ADPU.Body.LE = 0; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + + /* Read Binary in ICCID --------------------------------------------------*/ + if(SC_Responce.SW1 == SC_EF_SELECTED) + { + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_READ_BINARY; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x00; + SC_ADPU.Body.LC = 0x00; + + SC_ADPU.Body.LE = 10; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + + /* Select GSMDir ---------------------------------------------------------*/ + if(((SC_Responce.SW1 << 8) | (SC_Responce.SW2)) == SC_OP_TERMINATED) + { + /* Copy the ICCID File content into ICCID_Content buffer */ + for(i = 0; i < SC_ADPU.Body.LE; i++) + { + ICCID_Content[i] = SC_Responce.Data[i]; + } + /* Send APDU Command for GSMDir selection */ + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_SELECT_FILE; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x00; + SC_ADPU.Body.LC = 0x02; + + for(i = 0; i < SC_ADPU.Body.LC; i++) + { + SC_ADPU.Body.Data[i] = GSMDir[i]; + } + while(i < LC_MAX) + { + SC_ADPU.Body.Data[i++] = 0; + } + SC_ADPU.Body.LE = 0; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + + /* Select IMSI -----------------------------------------------------------*/ + if(SC_Responce.SW1 == SC_DF_SELECTED) + { + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_SELECT_FILE; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x00; + SC_ADPU.Body.LC = 0x02; + + for(i = 0; i < SC_ADPU.Body.LC; i++) + { + SC_ADPU.Body.Data[i] = IMSI[i]; + } + while(i < LC_MAX) + { + SC_ADPU.Body.Data[i++] = 0; + } + SC_ADPU.Body.LE = 0; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + + /* Get Response on IMSI File ---------------------------------------------*/ + if(SC_Responce.SW1 == SC_EF_SELECTED) + { + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_GET_RESPONCE; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x00; + SC_ADPU.Body.LC = 0x00; + SC_ADPU.Body.LE = SC_Responce.SW2; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + + /* Read Binary in IMSI ---------------------------------------------------*/ + if(CHV1Status == 0x00) + { + if(((SC_Responce.SW1 << 8) | (SC_Responce.SW2)) == SC_OP_TERMINATED) + { + /* Enable CHV1 (PIN1) ------------------------------------------------*/ + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_ENABLE; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x01; + SC_ADPU.Body.LC = 0x08; + + for(i = 0; i < SC_ADPU.Body.LC; i++) + { + SC_ADPU.Body.Data[i] = CHV1[i]; + } + while(i < LC_MAX) + { + SC_ADPU.Body.Data[i++] = 0; + } + SC_ADPU.Body.LE = 0; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + } + else + { + if(((SC_Responce.SW1 << 8) | (SC_Responce.SW2)) == SC_OP_TERMINATED) + { + /* Verify CHV1 (PIN1) ------------------------------------------------*/ + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_VERIFY; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x01; + SC_ADPU.Body.LC = 0x08; + + for(i = 0; i < SC_ADPU.Body.LC; i++) + { + SC_ADPU.Body.Data[i] = CHV1[i]; + } + while(i < LC_MAX) + { + SC_ADPU.Body.Data[i++] = 0; + } + SC_ADPU.Body.LE = 0; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + } + /* Read Binary in IMSI ---------------------------------------------------*/ + if(((SC_Responce.SW1 << 8) | (SC_Responce.SW2)) == SC_OP_TERMINATED) + { + SC_ADPU.Header.CLA = SC_CLA_GSM11; + SC_ADPU.Header.INS = SC_READ_BINARY; + SC_ADPU.Header.P1 = 0x00; + SC_ADPU.Header.P2 = 0x00; + SC_ADPU.Body.LC = 0x00; + + SC_ADPU.Body.LE = 9; + + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + } + if(((SC_Responce.SW1 << 8) | (SC_Responce.SW2)) == SC_OP_TERMINATED) + { + /* Copy the IMSI File content into IMSI_Content buffer */ + for(i = 0; i < SC_ADPU.Body.LE; i++) + { + IMSI_Content[i] = SC_Responce.Data[i]; + } + } + /* Disable the Smartcard interface */ + SCState = SC_POWER_OFF; + SC_Handler(&SCState, &SC_ADPU, &SC_Responce); + CardInserted = 0; + } +} + +/** + * @brief Inserts a delay time. + * @param nCount: specifies the delay time length (time base 10 ms). + * @retval None + */ +static void Delay(uint32_t nCount) +{ + TimingDelay = nCount; + + while(TimingDelay != 0) + { + } +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number where + * the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/platform_config.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/platform_config.h new file mode 100644 index 000000000..4593d2616 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/platform_config.h @@ -0,0 +1,92 @@ +/** + ****************************************************************************** + * @file USART/Smartcard/platform_config.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Evaluation board specific configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __PLATFORM_CONFIG_H +#define __PLATFORM_CONFIG_H + +/* Includes ------------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Uncomment the line corresponding to the STMicroelectronics evaluation board + used to run the example */ +#if !defined (USE_STM322xG_EVAL) + //#define USE_STM322xG_EVAL +#endif + +/* Define the STM32F2xx hardware depending on the used evaluation board */ +#ifdef USE_STM322xG_EVAL + #define SC_USART USART6 + #define SC_USART_CLK RCC_APB2Periph_USART6 + #define SC_USART_APBPERIPHCLOCK RCC_APB2PeriphClockCmd + #define SC_USART_IRQn USART6_IRQn + #define SC_USART_IRQHandler USART6_IRQHandler + + #define SC_USART_TX_PIN GPIO_Pin_6 + #define SC_USART_TX_GPIO_PORT GPIOC + #define SC_USART_TX_GPIO_CLK RCC_AHB1Periph_GPIOC + #define SC_USART_TX_SOURCE GPIO_PinSource6 + #define SC_USART_TX_AF GPIO_AF_USART6 + + #define SC_USART_CK_PIN GPIO_Pin_7 + #define SC_USART_CK_GPIO_PORT GPIOG + #define SC_USART_CK_GPIO_CLK RCC_AHB1Periph_GPIOG + #define SC_USART_CK_SOURCE GPIO_PinSource7 + #define SC_USART_CK_AF GPIO_AF_USART6 + + + /* Smartcard Inteface GPIO pins */ + #define SC_3_5V_PIN GPIO_Pin_15 + #define SC_3_5V_GPIO_PORT GPIOH + #define SC_3_5V_GPIO_CLK RCC_AHB1Periph_GPIOH + + #define SC_RESET_PIN GPIO_Pin_7 + #define SC_RESET_GPIO_PORT GPIOF + #define SC_RESET_GPIO_CLK RCC_AHB1Periph_GPIOF + + #define SC_CMDVCC_PIN GPIO_Pin_12 + #define SC_CMDVCC_GPIO_PORT GPIOG + #define SC_CMDVCC_GPIO_CLK RCC_AHB1Periph_GPIOG + + #define SC_OFF_PIN GPIO_Pin_6 + #define SC_OFF_GPIO_PORT GPIOF + #define SC_OFF_GPIO_CLK RCC_AHB1Periph_GPIOF + #define SC_OFF_EXTI_LINE EXTI_Line6 + #define SC_OFF_EXTI_PORT_SOURCE EXTI_PortSourceGPIOF + #define SC_OFF_EXTI_PIN_SOURCE EXTI_PinSource6 + #define SC_OFF_EXTI_IRQn EXTI9_5_IRQn + #define SC_OFF_EXTI_IRQHandler EXTI9_5_IRQHandler + +#endif /* USE_STM322xG_EVAL */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#endif /* __PLATFORM_CONFIG_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/readme.txt new file mode 100644 index 000000000..b6e2c2b5b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/readme.txt @@ -0,0 +1,85 @@ +/** + @page USART_Smartcard USART Smart Card example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file USART/SmartCard/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the USART Smart Card example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example describes a firmware Smartcard Interface based on the STM32F2xx USART +peripheral. The main purpose of this firmware example is to provide resources +facilitating the development of an application using the USART peripheral in +smartcard mode. + +The firmware interface is composed of library source files developed in order to +support ISO7816-3/4 specification, an application example is also provided. + +This example is based on the AN2598 "Smartcard interface with the STM32F101xx +and STM32F103xx" application note. For more details, please refer to AN2598 +available on www.st.com + + +@par Directory contents + + - USART/SmartCard/platform_config.h Evaluation board specific configuration file + - USART/SmartCard/stm32f2xx_conf.h Library Configuration file + - USART/SmartCard/stm32f2xx_it.h Interrupt handlers header file + - USART/SmartCard/smartcard.h Smart card Header file + - USART/SmartCard/stm32f2xx_it.c Interrupt handlers + - USART/SmartCard/smartcard.c Smart Card firmware functions + - USART/SmartCard/main.c Main program + - USART/SmartCard/system_stm32f2xx.c STM32F2xx system source file + + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + - Make sure that JP21 is closed. + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Add the "smartcard.c" file to the project source list + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/smartcard.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/smartcard.c new file mode 100644 index 000000000..8d66610cb --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/smartcard.c @@ -0,0 +1,858 @@ +/** + ****************************************************************************** + * @file USART/Smartcard/smartcard.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file provides all the Smartcard firmware functions. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_SmartCard + * @{ + */ + +/* Includes ------------------------------------------------------------------*/ +#include "smartcard.h" + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Global variables definition and initialization ----------------------------*/ +SC_ATR SC_A2R; +uint8_t SC_ATR_Table[40]; +static __IO uint8_t SCData = 0; +static uint32_t F_Table[16] = {0, 372, 558, 744, 1116, 1488, 1860, 0, + 0, 512, 768, 1024, 1536, 2048, 0, 0}; +static uint32_t D_Table[8] = {0, 1, 2, 4, 8, 16, 0, 0}; + +/* Private function prototypes -----------------------------------------------*/ +/* Transport Layer -----------------------------------------------------------*/ +/*--------------APDU-----------*/ +static void SC_SendData(SC_ADPU_Commands *SC_ADPU, SC_ADPU_Responce *SC_ResponceStatus); + +/*------------ ATR ------------*/ +static void SC_AnswerReq(SC_State *SCState, uint8_t *card, uint8_t length); /* Ask ATR */ +static uint8_t SC_decode_Answer2reset(uint8_t *card); /* Decode ATR */ + +/* Physical Port Layer -------------------------------------------------------*/ +static void SC_Init(void); +static void SC_DeInit(void); +static void SC_VoltageConfig(uint32_t SC_Voltage); +static uint8_t SC_Detect(void); +static ErrorStatus USART_ByteReceive(uint8_t *Data, uint32_t TimeOut); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Handles all Smartcard states and serves to send and receive all + * communication data between Smartcard and reader. + * @param SCState: pointer to an SC_State enumeration that will contain the + * Smartcard state. + * @param SC_ADPU: pointer to an SC_ADPU_Commands structure that will be initialized. + * @param SC_Response: pointer to a SC_ADPU_Responce structure which will be initialized. + * @retval None + */ +void SC_Handler(SC_State *SCState, SC_ADPU_Commands *SC_ADPU, SC_ADPU_Responce *SC_Response) +{ + uint32_t i = 0; + + switch(*SCState) + { + case SC_POWER_ON: + if (SC_ADPU->Header.INS == SC_GET_A2R) + { + /* Smartcard intialization ------------------------------------------*/ + SC_Init(); + + /* Reset Data from SC buffer -----------------------------------------*/ + for (i = 0; i < 40; i++) + { + SC_ATR_Table[i] = 0; + } + + /* Reset SC_A2R Structure --------------------------------------------*/ + SC_A2R.TS = 0; + SC_A2R.T0 = 0; + for (i = 0; i < SETUP_LENGTH; i++) + { + SC_A2R.T[i] = 0; + } + for (i = 0; i < HIST_LENGTH; i++) + { + SC_A2R.H[i] = 0; + } + SC_A2R.Tlength = 0; + SC_A2R.Hlength = 0; + + /* Next State --------------------------------------------------------*/ + *SCState = SC_RESET_LOW; + } + break; + + case SC_RESET_LOW: + if(SC_ADPU->Header.INS == SC_GET_A2R) + { + /* If card is detected then Power ON, Card Reset and wait for an answer) */ + if (SC_Detect()) + { + while(((*SCState) != SC_POWER_OFF) && ((*SCState) != SC_ACTIVE)) + { + SC_AnswerReq(SCState, &SC_ATR_Table[0], 40); /* Check for answer to reset */ + } + } + else + { + (*SCState) = SC_POWER_OFF; + } + } + break; + + case SC_ACTIVE: + if (SC_ADPU->Header.INS == SC_GET_A2R) + { + if(SC_decode_Answer2reset(&SC_ATR_Table[0]) == T0_PROTOCOL) + { + (*SCState) = SC_ACTIVE_ON_T0; + } + else + { + (*SCState) = SC_POWER_OFF; + } + } + break; + + case SC_ACTIVE_ON_T0: + SC_SendData(SC_ADPU, SC_Response); + break; + + case SC_POWER_OFF: + SC_DeInit(); /* Disable Smartcard interface */ + break; + + default: (*SCState) = SC_POWER_OFF; + } +} + +/** + * @brief Enables or disables the power to the Smartcard. + * @param NewState: new state of the Smartcard power supply. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SC_PowerCmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + GPIO_ResetBits(SC_CMDVCC_GPIO_PORT, SC_CMDVCC_PIN); + } + else + { + GPIO_SetBits(SC_CMDVCC_GPIO_PORT, SC_CMDVCC_PIN); + } +} + +/** + * @brief Sets or clears the Smartcard reset pin. + * @param ResetState: this parameter specifies the state of the Smartcard + * reset pin. BitVal must be one of the BitAction enum values: + * @arg Bit_RESET: to clear the port pin. + * @arg Bit_SET: to set the port pin. + * @retval None + */ +void SC_Reset(BitAction ResetState) +{ + GPIO_WriteBit(SC_RESET_GPIO_PORT, SC_RESET_PIN, ResetState); +} + +/** + * @brief Resends the byte that failed to be received (by the Smartcard) correctly. + * @param None + * @retval None + */ +void SC_ParityErrorHandler(void) +{ + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } +} + +/** + * @brief Configures the IO speed (BaudRate) communication. + * @param None + * @retval None + */ +void SC_PTSConfig(void) +{ + RCC_ClocksTypeDef RCC_ClocksStatus; + uint32_t workingbaudrate = 0, apbclock = 0; + uint8_t locData = 0, PTSConfirmStatus = 1; + USART_InitTypeDef USART_InitStructure; + USART_ClockInitTypeDef USART_ClockInitStructure; + +/* Reconfigure the USART Baud Rate -------------------------------------------*/ + RCC_GetClocksFreq(&RCC_ClocksStatus); + apbclock = RCC_ClocksStatus.PCLK2_Frequency; + apbclock /= ((SC_USART->GTPR & (uint16_t)0x00FF) * 2); + + /* Enable the DMA Receive (Set DMAR bit only) to enable interrupt generation + in case of a framing error FE */ + USART_DMACmd(SC_USART, USART_DMAReq_Rx, ENABLE); + + if((SC_A2R.T0 & (uint8_t)0x10) == 0x10) + { + if(SC_A2R.T[0] != 0x11) + { + /* Send PTSS */ + SCData = 0xFF; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + + /* Send PTS0 */ + SCData = 0x10; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + + /* Send PTS1 */ + SCData = SC_A2R.T[0]; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + + /* Send PCK */ + SCData = (uint8_t)0xFF^(uint8_t)0x10^(uint8_t)SC_A2R.T[0]; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + + /* Disable the DMA Receive (Reset DMAR bit only) */ + USART_DMACmd(SC_USART, USART_DMAReq_Rx, DISABLE); + + if((USART_ByteReceive(&locData, SC_RECEIVE_TIMEOUT)) == SUCCESS) + { + if(locData != 0xFF) + { + PTSConfirmStatus = 0x00; + } + } + if((USART_ByteReceive(&locData, SC_RECEIVE_TIMEOUT)) == SUCCESS) + { + if(locData != 0x10) + { + PTSConfirmStatus = 0x00; + } + } + if((USART_ByteReceive(&locData, SC_RECEIVE_TIMEOUT)) == SUCCESS) + { + if(locData != SC_A2R.T[0]) + { + PTSConfirmStatus = 0x00; + } + } + if((USART_ByteReceive(&locData, SC_RECEIVE_TIMEOUT)) == SUCCESS) + { + if(locData != ((uint8_t)0xFF^(uint8_t)0x10^(uint8_t)SC_A2R.T[0])) + { + PTSConfirmStatus = 0x00; + } + } + else + { + PTSConfirmStatus = 0x00; + } + /* PTS Confirm */ + if(PTSConfirmStatus == 0x01) + { + workingbaudrate = apbclock * D_Table[(SC_A2R.T[0] & (uint8_t)0x0F)]; + workingbaudrate /= F_Table[((SC_A2R.T[0] >> 4) & (uint8_t)0x0F)]; + + USART_ClockInitStructure.USART_Clock = USART_Clock_Enable; + USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; + USART_ClockInitStructure.USART_CPHA = USART_CPHA_1Edge; + USART_ClockInitStructure.USART_LastBit = USART_LastBit_Enable; + USART_ClockInit(SC_USART, &USART_ClockInitStructure); + + USART_InitStructure.USART_BaudRate = workingbaudrate; + USART_InitStructure.USART_WordLength = USART_WordLength_9b; + USART_InitStructure.USART_StopBits = USART_StopBits_1_5; + USART_InitStructure.USART_Parity = USART_Parity_Even; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_Init(SC_USART, &USART_InitStructure); + } + } + } +} + +/** + * @brief Manages the Smartcard transport layer: send APDU commands and receives + * the APDU responce. + * @param SC_ADPU: pointer to a SC_ADPU_Commands structure which will be initialized. + * @param SC_Response: pointer to a SC_ADPU_Responce structure which will be initialized. + * @retval None + */ +static void SC_SendData(SC_ADPU_Commands *SC_ADPU, SC_ADPU_Responce *SC_ResponceStatus) +{ + uint32_t i = 0; + uint8_t locData = 0; + + /* Reset responce buffer ---------------------------------------------------*/ + for(i = 0; i < LC_MAX; i++) + { + SC_ResponceStatus->Data[i] = 0; + } + + SC_ResponceStatus->SW1 = 0; + SC_ResponceStatus->SW2 = 0; + + /* Enable the DMA Receive (Set DMAR bit only) to enable interrupt generation + in case of a framing error FE */ + USART_DMACmd(SC_USART, USART_DMAReq_Rx, ENABLE); + + /* Send header -------------------------------------------------------------*/ + SCData = SC_ADPU->Header.CLA; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + + SCData = SC_ADPU->Header.INS; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + + SCData = SC_ADPU->Header.P1; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + + SCData = SC_ADPU->Header.P2; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + + /* Send body length to/from SC ---------------------------------------------*/ + if(SC_ADPU->Body.LC) + { + SCData = SC_ADPU->Body.LC; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + } + else if(SC_ADPU->Body.LE) + { + SCData = SC_ADPU->Body.LE; + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + } + /* Flush the SC_USART DR */ + (void)USART_ReceiveData(SC_USART); + + /* -------------------------------------------------------- + Wait Procedure byte from card: + 1 - ACK + 2 - NULL + 3 - SW1; SW2 + -------------------------------------------------------- */ + + if((USART_ByteReceive(&locData, SC_RECEIVE_TIMEOUT)) == SUCCESS) + { + if(((locData & (uint8_t)0xF0) == 0x60) || ((locData & (uint8_t)0xF0) == 0x90)) + { + /* SW1 received */ + SC_ResponceStatus->SW1 = locData; + + if((USART_ByteReceive(&locData, SC_RECEIVE_TIMEOUT)) == SUCCESS) + { + /* SW2 received */ + SC_ResponceStatus->SW2 = locData; + } + } + else if (((locData & (uint8_t)0xFE) == (((uint8_t)~(SC_ADPU->Header.INS)) & \ + (uint8_t)0xFE))||((locData & (uint8_t)0xFE) == (SC_ADPU->Header.INS & (uint8_t)0xFE))) + { + SC_ResponceStatus->Data[0] = locData;/* ACK received */ + } + } + + /* If no status bytes received ---------------------------------------------*/ + if(SC_ResponceStatus->SW1 == 0x00) + { + /* Send body data to SC--------------------------------------------------*/ + if (SC_ADPU->Body.LC) + { + for(i = 0; i < SC_ADPU->Body.LC; i++) + { + SCData = SC_ADPU->Body.Data[i]; + + USART_SendData(SC_USART, SCData); + while(USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) + { + } + } + /* Flush the SC_USART DR */ + (void)USART_ReceiveData(SC_USART); + /* Disable the DMA Receive (Reset DMAR bit only) */ + USART_DMACmd(SC_USART, USART_DMAReq_Rx, DISABLE); + } + + /* Or receive body data from SC ------------------------------------------*/ + else if (SC_ADPU->Body.LE) + { + for(i = 0; i < SC_ADPU->Body.LE; i++) + { + if(USART_ByteReceive(&locData, SC_RECEIVE_TIMEOUT) == SUCCESS) + { + SC_ResponceStatus->Data[i] = locData; + } + } + } + /* Wait SW1 --------------------------------------------------------------*/ + i = 0; + while(i < 10) + { + if(USART_ByteReceive(&locData, SC_RECEIVE_TIMEOUT) == SUCCESS) + { + SC_ResponceStatus->SW1 = locData; + i = 11; + } + else + { + i++; + } + } + /* Wait SW2 ------------------------------------------------------------*/ + i = 0; + while(i < 10) + { + if(USART_ByteReceive(&locData, SC_RECEIVE_TIMEOUT) == SUCCESS) + { + SC_ResponceStatus->SW2 = locData; + i = 11; + } + else + { + i++; + } + } + } +} + +/** + * @brief Requests the reset answer from card. + * @param SCState: pointer to an SC_State enumeration that will contain the Smartcard state. + * @param card: pointer to a buffer which will contain the card ATR. + * @param length: maximum ATR length + * @retval None + */ +static void SC_AnswerReq(SC_State *SCState, uint8_t *card, uint8_t length) +{ + uint8_t Data = 0; + uint32_t i = 0; + + switch(*SCState) + { + case SC_RESET_LOW: + /* Check responce with reset low ---------------------------------------*/ + for (i = 0; i < length; i++) + { + if((USART_ByteReceive(&Data, SC_RECEIVE_TIMEOUT)) == SUCCESS) + { + card[i] = Data; + } + } + if(card[0]) + { + (*SCState) = SC_ACTIVE; + SC_Reset(Bit_SET); + } + else + { + (*SCState) = SC_RESET_HIGH; + } + break; + + case SC_RESET_HIGH: + /* Check responce with reset high --------------------------------------*/ + SC_Reset(Bit_SET); /* Reset High */ + + while(length--) + { + if((USART_ByteReceive(&Data, SC_RECEIVE_TIMEOUT)) == SUCCESS) + { + *card++ = Data; /* Receive data for timeout = SC_RECEIVE_TIMEOUT */ + } + } + if(card[0]) + { + (*SCState) = SC_ACTIVE; + } + else + { + (*SCState) = SC_POWER_OFF; + } + break; + + case SC_ACTIVE: + break; + + case SC_POWER_OFF: + /* Close Connection if no answer received ------------------------------*/ + SC_Reset(Bit_SET); /* Reset high - a bit is used as level shifter from 3.3 to 5 V */ + SC_PowerCmd(DISABLE); + break; + + default: + (*SCState) = SC_RESET_LOW; + } +} + +/** + * @brief Decodes the Answer to reset received from card. + * @param card: pointer to the buffer containing the card ATR. + * @retval None + */ +static uint8_t SC_decode_Answer2reset(uint8_t *card) +{ + uint32_t i = 0, flag = 0, buf = 0, protocol = 0; + + SC_A2R.TS = card[0]; /* Initial character */ + SC_A2R.T0 = card[1]; /* Format character */ + + SC_A2R.Hlength = SC_A2R.T0 & (uint8_t)0x0F; + + if ((SC_A2R.T0 & (uint8_t)0x80) == 0x80) + { + flag = 1; + } + + for (i = 0; i < 4; i++) + { + SC_A2R.Tlength = SC_A2R.Tlength + (((SC_A2R.T0 & (uint8_t)0xF0) >> (4 + i)) & (uint8_t)0x1); + } + + for (i = 0; i < SC_A2R.Tlength; i++) + { + SC_A2R.T[i] = card[i + 2]; + } + + protocol = SC_A2R.T[SC_A2R.Tlength - 1] & (uint8_t)0x0F; + + while (flag) + { + if ((SC_A2R.T[SC_A2R.Tlength - 1] & (uint8_t)0x80) == 0x80) + { + flag = 1; + } + else + { + flag = 0; + } + + buf = SC_A2R.Tlength; + SC_A2R.Tlength = 0; + + for (i = 0; i < 4; i++) + { + SC_A2R.Tlength = SC_A2R.Tlength + (((SC_A2R.T[buf - 1] & (uint8_t)0xF0) >> (4 + i)) & (uint8_t)0x1); + } + + for (i = 0;i < SC_A2R.Tlength; i++) + { + SC_A2R.T[buf + i] = card[i + 2 + buf]; + } + SC_A2R.Tlength += (uint8_t)buf; + } + + for (i = 0; i < SC_A2R.Hlength; i++) + { + SC_A2R.H[i] = card[i + 2 + SC_A2R.Tlength]; + } + + return (uint8_t)protocol; +} + +/** + * @brief Initializes all peripheral used for Smartcard interface. + * @param None + * @retval None + */ +static void SC_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + USART_InitTypeDef USART_InitStructure; + USART_ClockInitTypeDef USART_ClockInitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* Enable GPIO clocks */ + RCC_AHB1PeriphClockCmd(SC_USART_TX_GPIO_CLK | SC_USART_CK_GPIO_CLK, ENABLE); + + /* Enable SC_USART clock */ + SC_USART_APBPERIPHCLOCK(SC_USART_CLK, ENABLE); + + /* Connect PXx to SC_USART_TX */ + GPIO_PinAFConfig(SC_USART_TX_GPIO_PORT, SC_USART_TX_SOURCE, SC_USART_TX_AF); + + /* Connect PXx to SC_USART_CK */ + GPIO_PinAFConfig(SC_USART_CK_GPIO_PORT, SC_USART_CK_SOURCE, SC_USART_CK_AF); + + /* Configure USART Tx and Rx as alternate function push-pull */ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_InitStructure.GPIO_Pin = SC_USART_CK_PIN; + GPIO_Init(SC_USART_CK_GPIO_PORT, &GPIO_InitStructure); + + /* Configure USART Tx pin as alternate function open-drain */ + GPIO_InitStructure.GPIO_Pin = SC_USART_TX_PIN; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_Init(SC_USART_TX_GPIO_PORT, &GPIO_InitStructure); + + /* Enable SC_USART IRQ */ + NVIC_InitStructure.NVIC_IRQChannel = SC_USART_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + +/* SC_USART configuration ----------------------------------------------------*/ + /* SC_USART configured as follow: + - Word Length = 9 Bits + - 1.5 Stop Bit + - Even parity + - BaudRate = 8064 baud + - Hardware flow control disabled (RTS and CTS signals) + - Tx and Rx enabled + - USART Clock enabled + */ + + /* USART Clock set to 6 MHz (PCLK2 (60 MHz) / 10) */ + USART_SetPrescaler(SC_USART, 0x05); + + /* USART Guard Time set to 16 Bit */ + USART_SetGuardTime(SC_USART, 16); + + USART_ClockInitStructure.USART_Clock = USART_Clock_Enable; + USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; + USART_ClockInitStructure.USART_CPHA = USART_CPHA_1Edge; + USART_ClockInitStructure.USART_LastBit = USART_LastBit_Enable; + USART_ClockInit(SC_USART, &USART_ClockInitStructure); + + + USART_InitStructure.USART_BaudRate = 16129; + USART_InitStructure.USART_WordLength = USART_WordLength_9b; + USART_InitStructure.USART_StopBits = USART_StopBits_1_5; + USART_InitStructure.USART_Parity = USART_Parity_Even; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_Init(SC_USART, &USART_InitStructure); + + /* Enable the SC_USART Parity Error Interrupt */ + USART_ITConfig(SC_USART, USART_IT_PE, ENABLE); + + /* Enable the SC_USART Framing Error Interrupt */ + USART_ITConfig(SC_USART, USART_IT_ERR, ENABLE); + + /* Enable SC_USART */ + USART_Cmd(SC_USART, ENABLE); + + /* Enable the NACK Transmission */ + USART_SmartCardNACKCmd(SC_USART, ENABLE); + + /* Enable the Smartcard Interface */ + USART_SmartCardCmd(SC_USART, ENABLE); + + /* Set RSTIN HIGH */ + SC_Reset(Bit_SET); +} + +/** + * @brief Deinitializes all ressources used by the Smartcard interface. + * @param None + * @retval None + */ +static void SC_DeInit(void) +{ + /* Disable CMDVCC */ + SC_PowerCmd(DISABLE); + + /* Deinitializes the SC_USART */ + USART_DeInit(SC_USART); + + /* Disable SC_USART clock */ + SC_USART_APBPERIPHCLOCK(SC_USART_CLK, DISABLE); +} + +/** + * @brief Configures the card power voltage. + * @param SC_Voltage: specifies the card power voltage. + * This parameter can be one of the following values: + * @arg SC_VOLTAGE_5V: 5V cards. + * @arg SC_VOLTAGE_3V: 3V cards. + * @retval None + */ +static void SC_VoltageConfig(uint32_t SC_Voltage) +{ + if(SC_Voltage == SC_VOLTAGE_5V) + { + /* Select Smartcard 5V */ + GPIO_SetBits(SC_3_5V_GPIO_PORT, SC_3_5V_PIN); + } + else + { + /* Select Smartcard 3V */ + GPIO_ResetBits(SC_3_5V_GPIO_PORT, SC_3_5V_PIN); + } +} + +/** + * @brief Configures GPIO hardware resources used for Samrtcard. + * @param None + * @retval None + */ +void SC_IOConfig(void) +{ + EXTI_InitTypeDef EXTI_InitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* Enable GPIO clock */ + RCC_AHB1PeriphClockCmd(SC_OFF_GPIO_CLK | SC_CMDVCC_GPIO_CLK | + SC_3_5V_GPIO_CLK | SC_RESET_GPIO_CLK, ENABLE); + + /* Enable SYSCFG clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + + /* Configure Smartcard CMDVCC pin */ + GPIO_InitStructure.GPIO_Pin = SC_CMDVCC_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_Init(SC_CMDVCC_GPIO_PORT, &GPIO_InitStructure); + + /* Configure Smartcard Reset pin */ + GPIO_InitStructure.GPIO_Pin = SC_RESET_PIN; + GPIO_Init(SC_RESET_GPIO_PORT, &GPIO_InitStructure); + + /* Configure Smartcard 3/5V pin */ + GPIO_InitStructure.GPIO_Pin = SC_3_5V_PIN; + GPIO_Init(SC_3_5V_GPIO_PORT, &GPIO_InitStructure); + + /* Select 5V */ + SC_VoltageConfig(SC_VOLTAGE_5V); + + /* Disable CMDVCC */ + SC_PowerCmd(DISABLE); + + /* Set RSTIN HIGH */ + SC_Reset(Bit_SET); + + /* Configure Smartcard OFF pin */ + GPIO_InitStructure.GPIO_Pin = SC_OFF_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(SC_OFF_GPIO_PORT, &GPIO_InitStructure); + + /* Configure EXTI line connected to Smartcard OFF Pin */ + SYSCFG_EXTILineConfig(SC_OFF_EXTI_PORT_SOURCE, SC_OFF_EXTI_PIN_SOURCE); + + EXTI_ClearITPendingBit(SC_OFF_EXTI_LINE); + + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_Line = SC_OFF_EXTI_LINE; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Clear the SC_OFF_EXTI_IRQn Pending Bit */ + NVIC_ClearPendingIRQ(SC_OFF_EXTI_IRQn); + NVIC_InitStructure.NVIC_IRQChannel = SC_OFF_EXTI_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Detects whether the Smartcard is present or not. + * @param None. + * @retval 0 - Smartcard inserted + * 1 - Smartcard not inserted + */ +static uint8_t SC_Detect(void) +{ + return GPIO_ReadInputDataBit(SC_OFF_GPIO_PORT, SC_OFF_PIN); +} + +/** + * @brief Receives a new data while the time out not elapsed. + * @param None + * @retval An ErrorStatus enumuration value: + * - SUCCESS: New data has been received + * - ERROR: time out was elapsed and no further data is received + */ +static ErrorStatus USART_ByteReceive(uint8_t *Data, uint32_t TimeOut) +{ + uint32_t Counter = 0; + + while((USART_GetFlagStatus(SC_USART, USART_FLAG_RXNE) == RESET) && (Counter != TimeOut)) + { + Counter++; + } + + if(Counter != TimeOut) + { + *Data = (uint8_t)USART_ReceiveData(SC_USART); + return SUCCESS; + } + else + { + return ERROR; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/smartcard.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/smartcard.h new file mode 100644 index 000000000..936e1ef7d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/smartcard.h @@ -0,0 +1,156 @@ +/** + ****************************************************************************** + * @file USART/Smartcard/smartcard.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains all the functions prototypes for the Smartcard + * firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __SMARTCARD_H +#define __SMARTCARD_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "platform_config.h" + +/* Exported constants --------------------------------------------------------*/ +#define T0_PROTOCOL 0x00 /* T0 protocol */ +#define DIRECT 0x3B /* Direct bit convention */ +#define INDIRECT 0x3F /* Indirect bit convention */ +#define SETUP_LENGTH 20 +#define HIST_LENGTH 20 +#define LC_MAX 20 +#define SC_RECEIVE_TIMEOUT 0x8000 /* Direction to reader */ + +/* SC Tree Structure ----------------------------------------------------------- + MasterFile + ________|___________ + | | | + System UserData Note +------------------------------------------------------------------------------*/ + +/* SC ADPU Command: Operation Code -------------------------------------------*/ +#define SC_CLA_GSM11 0xA0 + +/*------------------------ Data Area Management Commands ---------------------*/ +#define SC_SELECT_FILE 0xA4 +#define SC_GET_RESPONCE 0xC0 +#define SC_STATUS 0xF2 +#define SC_UPDATE_BINARY 0xD6 +#define SC_READ_BINARY 0xB0 +#define SC_WRITE_BINARY 0xD0 +#define SC_UPDATE_RECORD 0xDC +#define SC_READ_RECORD 0xB2 + +/*-------------------------- Administrative Commands -------------------------*/ +#define SC_CREATE_FILE 0xE0 + +/*-------------------------- Safety Management Commands ----------------------*/ +#define SC_VERIFY 0x20 +#define SC_CHANGE 0x24 +#define SC_DISABLE 0x26 +#define SC_ENABLE 0x28 +#define SC_UNBLOCK 0x2C +#define SC_EXTERNAL_AUTH 0x82 +#define SC_GET_CHALLENGE 0x84 + +/*-------------------------- Answer to reset Commands ------------------------*/ +#define SC_GET_A2R 0x00 + +/* SC STATUS: Status Code ----------------------------------------------------*/ +#define SC_EF_SELECTED 0x9F +#define SC_DF_SELECTED 0x9F +#define SC_OP_TERMINATED 0x9000 + +/* Smartcard Voltage */ +#define SC_VOLTAGE_5V 0 +#define SC_VOLTAGE_3V 1 + +/* Exported types ------------------------------------------------------------*/ +typedef enum +{ + SC_POWER_ON = 0x00, + SC_RESET_LOW = 0x01, + SC_RESET_HIGH = 0x02, + SC_ACTIVE = 0x03, + SC_ACTIVE_ON_T0 = 0x04, + SC_POWER_OFF = 0x05 +} SC_State; + +/* ATR structure - Answer To Reset -------------------------------------------*/ +typedef struct +{ + uint8_t TS; /* Bit Convention */ + uint8_t T0; /* High nibble = Number of setup byte; low nibble = Number of historical byte */ + uint8_t T[SETUP_LENGTH]; /* Setup array */ + uint8_t H[HIST_LENGTH]; /* Historical array */ + uint8_t Tlength; /* Setup array dimension */ + uint8_t Hlength; /* Historical array dimension */ +} SC_ATR; + +/* ADPU-Header command structure ---------------------------------------------*/ +typedef struct +{ + uint8_t CLA; /* Command class */ + uint8_t INS; /* Operation code */ + uint8_t P1; /* Selection Mode */ + uint8_t P2; /* Selection Option */ +} SC_Header; + +/* ADPU-Body command structure -----------------------------------------------*/ +typedef struct +{ + uint8_t LC; /* Data field length */ + uint8_t Data[LC_MAX]; /* Command parameters */ + uint8_t LE; /* Expected length of data to be returned */ +} SC_Body; + +/* ADPU Command structure ----------------------------------------------------*/ +typedef struct +{ + SC_Header Header; + SC_Body Body; +} SC_ADPU_Commands; + +/* SC response structure -----------------------------------------------------*/ +typedef struct +{ + uint8_t Data[LC_MAX]; /* Data returned from the card */ + uint8_t SW1; /* Command Processing status */ + uint8_t SW2; /* Command Processing qualification */ +} SC_ADPU_Responce; + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +/* APPLICATION LAYER ---------------------------------------------------------*/ +void SC_Handler(SC_State *SCState, SC_ADPU_Commands *SC_ADPU, SC_ADPU_Responce *SC_Response); +void SC_PowerCmd(FunctionalState NewState); +void SC_Reset(BitAction ResetState); +void SC_IOConfig(void); +void SC_ParityErrorHandler(void); +void SC_PTSConfig(void); + +#endif /* __SMARTCARD_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/stm32f2xx_conf.h new file mode 100644 index 000000000..2197a4327 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file USART/Smartcard/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/stm32f2xx_it.c new file mode 100644 index 000000000..d7b589fb9 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/stm32f2xx_it.c @@ -0,0 +1,260 @@ +/** + ****************************************************************************** + * @file USART/Smartcard/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "smartcard.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_SmartCard + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint32_t CardInserted; +extern __IO uint32_t TimingDelay; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + /* Decrement the TimingDelay variable */ + if (TimingDelay != 0x00) + { + TimingDelay--; + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles SC_USART global interrupt request. + * @param None + * @retval None + */ +void SC_USART_IRQHandler(void) +{ + /* If a Frame error is signaled by the card */ + if(USART_GetITStatus(SC_USART, USART_IT_FE) != RESET) + { + USART_ReceiveData(SC_USART); + + /* Resend the byte that failed to be received (by the Smartcard) correctly */ + SC_ParityErrorHandler(); + } + + /* If the SC_USART detects a parity error */ + if(USART_GetITStatus(SC_USART, USART_IT_PE) != RESET) + { + /* Enable SC_USART RXNE Interrupt (until receiving the corrupted byte) */ + USART_ITConfig(SC_USART, USART_IT_RXNE, ENABLE); + /* Flush the SC_USART DR register */ + USART_ReceiveData(SC_USART); + } + + if(USART_GetITStatus(SC_USART, USART_IT_RXNE) != RESET) + { + /* Disable SC_USART RXNE Interrupt */ + USART_ITConfig(SC_USART, USART_IT_RXNE, DISABLE); + USART_ReceiveData(SC_USART); + } + + /* If a Overrun error is signaled by the card */ + if(USART_GetITStatus(SC_USART, USART_IT_ORE) != RESET) + { + USART_ReceiveData(SC_USART); + } + /* If a Noise error is signaled by the card */ + if(USART_GetITStatus(SC_USART, USART_IT_NE) != RESET) + { + USART_ReceiveData(SC_USART); + } +} + +/** + * @brief This function handles the smartcard detection interrupt request. + * @param None + * @retval None + */ +void SC_OFF_EXTI_IRQHandler(void) +{ + if(EXTI_GetITStatus(SC_OFF_EXTI_LINE) != RESET) + { + /* Clear EXTI Line Pending Bit */ + EXTI_ClearITPendingBit(SC_OFF_EXTI_LINE); + + /* Toggle LED1..4 */ + STM_EVAL_LEDToggle(LED1); + STM_EVAL_LEDToggle(LED2); + STM_EVAL_LEDToggle(LED3); + STM_EVAL_LEDToggle(LED4); + + /* Smartcard detected */ + CardInserted = 1; + + /* Enable CMDVCC */ + SC_PowerCmd(ENABLE); + + /* Reset the card */ + SC_Reset(Bit_RESET); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/stm32f2xx_it.h new file mode 100644 index 000000000..f405f4568 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/stm32f2xx_it.h @@ -0,0 +1,54 @@ +/** + ****************************************************************************** + * @file USART/Smartcard/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void SC_USART_IRQHandler(void); +void SC_OFF_EXTI_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/SmartCard/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/main.c new file mode 100644 index 000000000..e4051b43a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/main.c @@ -0,0 +1,145 @@ +/** + ****************************************************************************** + * @file USART/USART_Printf/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_Printf + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +USART_InitTypeDef USART_InitStructure; + +/* Private function prototypes -----------------------------------------------*/ + +#ifdef __GNUC__ + /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ + #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else + #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + STM_EVAL_COMInit(COM1, &USART_InitStructure); + + /* Output a message on Hyperterminal using printf function */ + printf("\n\rUSART Printf Example: retarget the C library printf function to the USART\n\r"); + + while (1) + { + } +} + +/** + * @brief Retargets the C library printf function to the USART. + * @param None + * @retval None + */ +PUTCHAR_PROTOTYPE +{ + /* Place your implementation of fputc here */ + /* e.g. write a character to the USART */ + USART_SendData(EVAL_COM1, (uint8_t) ch); + + /* Loop until the end of transmission */ + while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) + {} + + return ch; +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/readme.txt new file mode 100644 index 000000000..7cf79a9c0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/readme.txt @@ -0,0 +1,88 @@ +/** + @page USART_Printf USART_Printf + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file USART/USART_Printf/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the USART Printf Example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to retarget the C library printf function to the USART. +This implementation output the printf message on the Hyperterminal using USART3. + +The USARTx is configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + + +@par Directory contents + + - USART/USART_Printf/system_stm32f2xx.c STM32F2xx system clock configuration file + - USART/USART_Printf/stm32f2xx_conf.h Library Configuration file + - USART/USART_Printf/stm32f2xx_it.h Interrupt handlers header file + - USART/USART_Printf/stm32f2xx_it.c Interrupt handlers + - USART/USART_Printf/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Connect a null-modem female/female RS232 cable between the DB9 connector + CN16 (USART3) and PC serial port if you want to display data on the HyperTerminal. + @note Make sure that jumper JP22 is in position 1-2 + + - Hyperterminal configuration: + - Word Length = 8 Bits + - One Stop Bit + - No parity + - BaudRate = 115200 baud + - flow control: None + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/stm32f2xx_conf.h new file mode 100644 index 000000000..9097b311b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file USART/USART_Printf/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/stm32f2xx_it.c new file mode 100644 index 000000000..fd3f900da --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/stm32f2xx_it.c @@ -0,0 +1,173 @@ +/** + ****************************************************************************** + * @file USART/USART_Printf/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_Printf + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/stm32f2xx_it.h new file mode 100644 index 000000000..820b45141 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file USART/USART_Printf/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_Printf/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/main.c new file mode 100644 index 000000000..0e762a7cf --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/main.c @@ -0,0 +1,586 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeDMA/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples +* @{ +*/ + +/** @addtogroup USART_DataExchangeDMA +* @{ +*/ + +/* Private typedef -----------------------------------------------------------*/ +DMA_InitTypeDef DMA_InitStructure; + +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint8_t TxBuffer[] = "USART DMA Example: Communication between two USART using DMA"; +uint8_t CmdBuffer [2] = {0x00, 0x00}; /* {Command, Number of byte to receive or to transmit} */ +__IO uint32_t TimeOut = 0x0; + +#ifdef USART_TRANSMITTER_MODE + JOYState_TypeDef PressedButton = JOY_NONE; + JOYState_TypeDef ReleasedButton = JOY_NONE; +#endif /* USART_TRANSMITTER_MODE */ + +#ifdef USART_RECEIVER_MODE +uint8_t RxBuffer [RXBUFFERSIZE]; +#endif /* USART_RECEIVER_MODE */ + + +/* Private function prototypes -----------------------------------------------*/ +static void TimeOut_UserCallback(void); +static void USART_Config(void); +static void SysTickConfig(void); +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength); + +#ifdef USART_RECEIVER_MODE +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); +#endif /* USART_RECEIVER_MODE */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* USART configuration -----------------------------------------------------*/ + USART_Config(); + + /* SysTick configuration ---------------------------------------------------*/ + SysTickConfig(); + + /* LEDs configuration ------------------------------------------------------*/ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* IO Expanderconfiguration ------------------------------------------------*/ +#ifdef USART_TRANSMITTER_MODE + TimeOut = USER_TIMEOUT; + while ((IOE_Config() != IOE_OK) && (TimeOut != 0)) + { + } + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } +#endif /* USART_TRANSMITTER_MODE */ + + while (1) + { +/******************************************************************************/ +/* USART in Transmitter Mode */ +/******************************************************************************/ +#ifdef USART_TRANSMITTER_MODE + + /* Clear Buffers */ + Fill_Buffer(CmdBuffer, 2); + + DMA_DeInit(USARTx_TX_DMA_STREAM); + DMA_InitStructure.DMA_Channel = USARTx_TX_DMA_CHANNEL; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + + /****************** USART will Transmit Specific Command ******************/ + /* Prepare the DMA to transfer the transaction command (2bytes) from the + memory to the USART */ + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)CmdBuffer; + DMA_InitStructure.DMA_BufferSize = (uint16_t)2; + DMA_Init(USARTx_TX_DMA_STREAM, &DMA_InitStructure); + + /* Prepare Command to be transmitted */ + /* Waiting joystick pressed */ + PressedButton = JOY_NONE; + while (PressedButton == JOY_NONE) + { + PressedButton = IOE_JoyStickGetState(); + } + + /* Waiting joystick released */ + ReleasedButton = IOE_JoyStickGetState(); + while ((PressedButton == ReleasedButton) && (ReleasedButton != JOY_NONE)) + { + ReleasedButton = IOE_JoyStickGetState(); + } + + + if(PressedButton != JOY_NONE) + { + /* For each joystick state correspond a command to be sent through USART */ + switch (PressedButton) + { + /* JOY_RIGHT button pressed */ + case JOY_RIGHT: + CmdBuffer[0] = CMD_RIGHT; + CmdBuffer[1] = CMD_RIGHT_SIZE; + break; + /* JOY_LEFT button pressed */ + case JOY_LEFT: + CmdBuffer[0] = CMD_LEFT; + CmdBuffer[1] = CMD_LEFT_SIZE; + break; + /* JOY_UP button pressed */ + case JOY_UP: + CmdBuffer[0] = CMD_UP; + CmdBuffer[1] = CMD_UP_SIZE; + break; + /* JOY_DOWN button pressed */ + case JOY_DOWN: + CmdBuffer[0] = CMD_DOWN; + CmdBuffer[1] = CMD_DOWN_SIZE; + break; + /* JOY_SEL button pressed */ + case JOY_SEL: + CmdBuffer[0] = CMD_SEL; + CmdBuffer[1] = CMD_SEL_SIZE; + break; + default: + break; + } + + /* Enable the USART DMA requests */ + USART_DMACmd(USARTx, USART_DMAReq_Tx, ENABLE); + + /* Clear the TC bit in the SR register by writing 0 to it */ + USART_ClearFlag(USARTx, USART_FLAG_TC); + + /* Enable the DMA TX Stream, USART will start sending the command code (2bytes) */ + DMA_Cmd(USARTx_TX_DMA_STREAM, ENABLE); + + /* Wait the USART DMA Tx transfer complete or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetFlagStatus(USARTx_TX_DMA_STREAM, USARTx_TX_DMA_FLAG_TCIF) == RESET)&&(TimeOut != 0)) + { + } + + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* The software must wait until TC=1. The TC flag remains cleared during all data + transfers and it is set by hardware at the last frame抯 end of transmission*/ + TimeOut = USER_TIMEOUT; + while ((USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET)&&(TimeOut != 0)) + { + } + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Clear DMA Streams flags */ + DMA_ClearFlag(USARTx_TX_DMA_STREAM, USARTx_TX_DMA_FLAG_HTIF | USARTx_TX_DMA_FLAG_TCIF); + + /* Disable the DMA Streams */ + DMA_Cmd(USARTx_TX_DMA_STREAM, DISABLE); + + /* Disable the USART Tx DMA request */ + USART_DMACmd(USARTx, USART_DMAReq_Tx, DISABLE); + + /******************* USART will Transmit Data Buffer ********************/ + /* Prepare the DMA to transfer the transaction data (length defined by + CmdBuffer[1] variable) from the memory to the USART */ + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)TxBuffer; + DMA_InitStructure.DMA_BufferSize = (uint16_t)CmdBuffer[1]; + DMA_Init(USARTx_TX_DMA_STREAM, &DMA_InitStructure); + + /* Enable the USART Tx DMA request */ + USART_DMACmd(USARTx, USART_DMAReq_Tx, ENABLE); + + /* Clear the TC bit in the SR register by writing 0 to it */ + USART_ClearFlag(USARTx, USART_FLAG_TC); + + /* Enable DMA USART Tx Stream */ + DMA_Cmd(USARTx_TX_DMA_STREAM, ENABLE); + + /* Wait the USART DMA Tx transfer complete or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetFlagStatus(USARTx_TX_DMA_STREAM, USARTx_TX_DMA_FLAG_TCIF) == RESET)&&(TimeOut != 0)) + { + } + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* The software must wait until TC=1, The TC flag remains cleared during all data + transfers and it is set by hardware at the last frame抯 end of transmission */ + TimeOut = USER_TIMEOUT; + while ((USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET)&&(TimeOut != 0)) + { + } + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Clear all DMA Streams flags */ + DMA_ClearFlag(USARTx_TX_DMA_STREAM, USARTx_TX_DMA_FLAG_HTIF | USARTx_TX_DMA_FLAG_TCIF); + + /* Disable the DMA Stream */ + DMA_Cmd(USARTx_TX_DMA_STREAM, DISABLE); + + /* Disable the USART Tx DMA request */ + USART_DMACmd(USARTx, USART_DMAReq_Tx, DISABLE); + } + +#endif /* USART_TRANSMITTER_MODE */ + +/******************************************************************************/ +/* USART in Receiver Mode */ +/******************************************************************************/ +#ifdef USART_RECEIVER_MODE + /* Clear Buffers */ + Fill_Buffer(RxBuffer, TXBUFFERSIZE); + Fill_Buffer(CmdBuffer, 2); + + DMA_DeInit(USARTx_RX_DMA_STREAM); + DMA_InitStructure.DMA_Channel = USARTx_RX_DMA_CHANNEL; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + /****************** USART will Receive Specific Command *******************/ + /* Configure the DMA to receive 2 bytes (transaction command), in case of USART receiver */ + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)CmdBuffer; + DMA_InitStructure.DMA_BufferSize = (uint16_t)2; + DMA_Init(USARTx_RX_DMA_STREAM, &DMA_InitStructure); + + /* Enable the USART Rx DMA request */ + USART_DMACmd(USARTx, USART_DMAReq_Rx, ENABLE); + /* Enable the DMA RX Stream */ + DMA_Cmd(USARTx_RX_DMA_STREAM, ENABLE); + + /* Wait the USART DMA Rx transfer complete (to receive the transaction command) */ + while (DMA_GetFlagStatus(USARTx_RX_DMA_STREAM, USARTx_RX_DMA_FLAG_TCIF) == RESET) + { + } + + /* Clear all DMA Streams flags */ + DMA_ClearFlag(USARTx_RX_DMA_STREAM, USARTx_RX_DMA_FLAG_HTIF | USARTx_RX_DMA_FLAG_TCIF); + + /* Disable the DMA Rx Stream */ + DMA_Cmd(USARTx_RX_DMA_STREAM, DISABLE); + + /* Disable the USART Rx DMA requests */ + USART_DMACmd(USARTx, USART_DMAReq_Rx, DISABLE); + + /************* USART will receive the the transaction data ****************/ + /* Transaction data (length defined by CmdBuffer[1] variable) */ + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)RxBuffer; + DMA_InitStructure.DMA_BufferSize = (uint16_t)CmdBuffer[1]; + DMA_Init(USARTx_RX_DMA_STREAM, &DMA_InitStructure); + + /* Enable the USART Rx DMA requests */ + USART_DMACmd(USARTx, USART_DMAReq_Rx , ENABLE); + + /* Enable the DMA Stream */ + DMA_Cmd(USARTx_RX_DMA_STREAM, ENABLE); + + /* Wait the USART DMA Rx transfer complete or time out */ + TimeOut = USER_TIMEOUT; + while ((DMA_GetFlagStatus(USARTx_RX_DMA_STREAM, USARTx_RX_DMA_FLAG_TCIF) == RESET)&&(TimeOut != 0)) + { + } + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Clear all DMA Streams flags */ + DMA_ClearFlag(USARTx_RX_DMA_STREAM, USARTx_RX_DMA_FLAG_HTIF | USARTx_RX_DMA_FLAG_TCIF); + + /* Disable the DMA Stream */ + DMA_Cmd(USARTx_RX_DMA_STREAM, DISABLE); + + /* Disable the USART Rx DMA requests */ + USART_DMACmd(USARTx, USART_DMAReq_Rx, DISABLE); + + switch (CmdBuffer[1]) + { + /* CMD_RIGHT command received */ + case CMD_RIGHT_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_RIGHT_SIZE) != FAILED) + { + /* Turn ON LED2 and LED3 */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + /* Turn OFF LED4 */ + STM_EVAL_LEDOff(LED4); + } + break; + /* CMD_LEFT command received */ + case CMD_LEFT_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_LEFT_SIZE) != FAILED) + { + /* Turn ON LED4 */ + STM_EVAL_LEDOn(LED4); + /* Turn OFF LED2 and LED3 */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + } + break; + /* CMD_UP command received */ + case CMD_UP_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_UP_SIZE) != FAILED) + { + /* Turn ON LED2 */ + STM_EVAL_LEDOn(LED2); + /* Turn OFF LED3 and LED4 */ + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } + break; + /* CMD_DOWN command received */ + case CMD_DOWN_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_DOWN_SIZE) != FAILED) + { + /* Turn ON LED3 */ + STM_EVAL_LEDOn(LED3); + /* Turn OFF LED2 and LED4 */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED4); + } + break; + /* CMD_SEL command received */ + case CMD_SEL_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_SEL_SIZE) != FAILED) + { + /* Turn ON all LED2, LED3 and LED4 */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + break; + default: + break; + } +#endif /* USART_RECEIVER_MODE */ + } +} + +/** + * @brief Basic management of the timeout situation. + * @param None. + * @retval None. + */ +static void TimeOut_UserCallback(void) +{ + /* User can add his own implementation to manage TimeOut Communication failure */ + /* Block communication and all processes */ + while (1) + { + } +} + +/** + * @brief Configures the USART Peripheral. + * @param None + * @retval None + */ +static void USART_Config(void) +{ + USART_InitTypeDef USART_InitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + + /* Peripheral Clock Enable -------------------------------------------------*/ + /* Enable GPIO clock */ + RCC_AHB1PeriphClockCmd(USARTx_TX_GPIO_CLK | USARTx_RX_GPIO_CLK, ENABLE); + + /* Enable USART clock */ + USARTx_CLK_INIT(USARTx_CLK, ENABLE); + + /* Enable the DMA clock */ + RCC_AHB1PeriphClockCmd(USARTx_DMAx_CLK, ENABLE); + + /* USARTx GPIO configuration -----------------------------------------------*/ + /* Connect USART pins to AF7 */ + GPIO_PinAFConfig(USARTx_TX_GPIO_PORT, USARTx_TX_SOURCE, USARTx_TX_AF); + GPIO_PinAFConfig(USARTx_RX_GPIO_PORT, USARTx_RX_SOURCE, USARTx_RX_AF); + + /* Configure USART Tx and Rx as alternate function push-pull */ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + + GPIO_InitStructure.GPIO_Pin = USARTx_TX_PIN; + GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = USARTx_RX_PIN; + GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStructure); + + /* USARTx configuration ----------------------------------------------------*/ + /* Enable the USART OverSampling by 8 */ + USART_OverSampling8Cmd(USARTx, ENABLE); + + /* USARTx configured as follow: + - BaudRate = 3750000 baud + - Maximum BaudRate that can be achieved when using the Oversampling by 8 + is: (USART APB Clock / 8) + Example: + - (USART3 APB1 Clock / 8) = (30 MHz / 8) = 3750000 baud + - (USART1 APB2 Clock / 8) = (60 MHz / 8) = 7500000 baud + - Maximum BaudRate that can be achieved when using the Oversampling by 16 + is: (USART APB Clock / 16) + Example: (USART3 APB1 Clock / 16) = (30 MHz / 16) = 1875000 baud + Example: (USART1 APB2 Clock / 16) = (60 MHz / 16) = 3750000 baud + - Word Length = 8 Bits + - one Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitStructure.USART_BaudRate = 3750000; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + /* When using Parity the word length must be configured to 9 bits */ + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_Init(USARTx, &USART_InitStructure); + + /* Configure DMA controller to manage USART TX and RX DMA request ----------*/ + DMA_InitStructure.DMA_PeripheralBaseAddr = USARTx_DR_ADDRESS; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + /* Here only the unchanged parameters of the DMA initialization structure are + configured. During the program operation, the DMA will be configured with + different parameters according to the operation phase */ + + /* Enable USART */ + USART_Cmd(USARTx, ENABLE); +} + +/** + * @brief Configures the SysTick Base time to 10 ms. + * @param None + * @retval None + */ +static void SysTickConfig(void) +{ + /* Set SysTick Timer for 10ms interrupts */ + if (SysTick_Config(SystemCoreClock / 100)) + { + /* Capture error */ + while (1); + } + /* Configure the SysTick handler priority */ + NVIC_SetPriority(SysTick_IRQn, 0x0); +} + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +#ifdef USART_RECEIVER_MODE +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return FAILED; + } + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} +#endif /* USART_RECEIVER_MODE */ + +/** + * @brief Fills buffer. + * @param pBuffer: pointer on the Buffer to fill + * @param BufferLength: size of the buffer to fill + * @retval None + */ +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength) +{ + uint16_t index = 0; + + /* Put in global buffer same values */ + for (index = 0; index < BufferLength; index++ ) + { + pBuffer[index] = 0x00; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + {} +} +#endif + +/** +* @} +*/ + +/** +* @} +*/ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/main.h new file mode 100644 index 000000000..84715ef48 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/main.h @@ -0,0 +1,137 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeDMA/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_ioe.h" + +/* Exported typedef ----------------------------------------------------------*/ +#define countof(a) (sizeof(a) / sizeof(*(a))) +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Exported define -----------------------------------------------------------*/ + +/* Uncomment the line below if you will use the USART peripheral as Transmitter */ +#define USART_TRANSMITTER_MODE +/* Uncomment the line below if you will use the USART peripheral as Receiver */ +/* #define USART_RECEIVER_MODE */ + +/* USER_TIMEOUT value for waiting loops. This timeout is just guarantee that the + application will not remain stuck if the USART communication is corrupted. + You may modify this timeout value depending on CPU frequency and application + conditions (interrupts routines, number of data to transfer, baudrate, CPU + frequency...). */ +#define USER_TIMEOUT ((uint32_t)0x64) /* Waiting 1s */ + +/* Definition for USARTx resources ********************************************/ +#define USARTx USART3 +#define USARTx_CLK RCC_APB1Periph_USART3 +#define USARTx_CLK_INIT RCC_APB1PeriphClockCmd +#define USARTx_IRQn USART3_IRQn +#define USARTx_IRQHandler USART3_IRQHandler + +#define USARTx_TX_PIN GPIO_Pin_10 +#define USARTx_TX_GPIO_PORT GPIOC +#define USARTx_TX_GPIO_CLK RCC_AHB1Periph_GPIOC +#define USARTx_TX_SOURCE GPIO_PinSource10 +#define USARTx_TX_AF GPIO_AF_USART3 + +#define USARTx_RX_PIN GPIO_Pin_11 +#define USARTx_RX_GPIO_PORT GPIOC +#define USARTx_RX_GPIO_CLK RCC_AHB1Periph_GPIOC +#define USARTx_RX_SOURCE GPIO_PinSource11 +#define USARTx_RX_AF GPIO_AF_USART3 + +/* Definition for DMAx resources **********************************************/ +#define USARTx_DR_ADDRESS ((uint32_t)USART3 + 0x04) + +#define USARTx_DMA DMA1 +#define USARTx_DMAx_CLK RCC_AHB1Periph_DMA1 + +#define USARTx_TX_DMA_CHANNEL DMA_Channel_4 +#define USARTx_TX_DMA_STREAM DMA1_Stream3 +#define USARTx_TX_DMA_FLAG_FEIF DMA_FLAG_FEIF3 +#define USARTx_TX_DMA_FLAG_DMEIF DMA_FLAG_DMEIF3 +#define USARTx_TX_DMA_FLAG_TEIF DMA_FLAG_TEIF3 +#define USARTx_TX_DMA_FLAG_HTIF DMA_FLAG_HTIF3 +#define USARTx_TX_DMA_FLAG_TCIF DMA_FLAG_TCIF3 + +#define USARTx_RX_DMA_CHANNEL DMA_Channel_4 +#define USARTx_RX_DMA_STREAM DMA1_Stream1 +#define USARTx_RX_DMA_FLAG_FEIF DMA_FLAG_FEIF1 +#define USARTx_RX_DMA_FLAG_DMEIF DMA_FLAG_DMEIF1 +#define USARTx_RX_DMA_FLAG_TEIF DMA_FLAG_TEIF1 +#define USARTx_RX_DMA_FLAG_HTIF DMA_FLAG_HTIF1 +#define USARTx_RX_DMA_FLAG_TCIF DMA_FLAG_TCIF1 + +#define USARTx_DMA_TX_IRQn DMA1_Stream3_IRQn +#define USARTx_DMA_RX_IRQn DMA1_Stream1_IRQn +#define USARTx_DMA_TX_IRQHandler DMA1_Stream3_IRQHandler +#define USARTx_DMA_RX_IRQHandler DMA1_Stream1_IRQHandler + +/* Misc definition ************************************************************/ +/* Transmit buffer size */ +#define TXBUFFERSIZE (countof(TxBuffer) - 1) +/* Receive buffer size */ +#define RXBUFFERSIZE TXBUFFERSIZE + +/* Commands list */ +#define CMD_RIGHT 0x55 +#define CMD_LEFT 0xAA +#define CMD_UP 0x33 +#define CMD_DOWN 0xCC +#define CMD_SEL 0xFF +#define CMD_ACK 0x66 + +/* Number of data bytes for each command */ +#define CMD_RIGHT_SIZE 0x01 +#define CMD_LEFT_SIZE 0x05 +#define CMD_UP_SIZE 0x14 +#define CMD_DOWN_SIZE 0x1E +#define CMD_SEL_SIZE TXBUFFERSIZE + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/readme.txt new file mode 100644 index 000000000..0481efbf2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/readme.txt @@ -0,0 +1,151 @@ +/** + @page USART_DataExchangeDMA USART Communication Boards Data Exchange using DMA example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file USART/USART_TwoBoards/DataExchangeDMA/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the USART Communication Boards Data Exchange using + * DMA example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a small application in which joystick buttons are used +to trigger USART communications using DMA and though using USART firmware library. + +- Hardware Description + +To use this example, you need to load it on two STM32 boards (let's call them +BoardA and BoardB) then connect these two boards through USART lines and GND. +In the firmware example uncomment the dedicated line in the main.h file to use +the USART peripheral as STM32 Transmitter or as STM32 Receiver device. + +@verbatim +*------------------------------------------------------------------------------* +| BoardA BoardB | +| ____________________ ____________________ | +| | | | | | +| | | | | | +| | __________ | | __________ | | +| | | USART |____|TX_____________RX|____| USART | | | +| | | Device1 |____|RX_____________TX|____| Device2 | | | +| | |____TX____| | | |____RX____| | | +| | | | | | +| | O LD1 | | O LD1 | | +| | O LD2 Joystick | | O LD2 Joystick | | +| | O LD3 _ | | O LD3 _ | | +| | O LD4 |_| | | O LD4 |_| | | +| | | | | | +| | GND O--|-----------------|--O GND | | +| |____________________| |____________________| | +| | +| | +*------------------------------------------------------------------------------* +@endverbatim + +@note +- The connection between the pins should use a common Ground. + +- Software Description + +On Transmitter Board, at each joystick buttons press: +- The USART Transmitter Board sends the specific command to the USART Receiver Board + the command contains the transaction code (CMD_RIGHT, CMD_LEFT, CMD_UP, CMD_DOWN + or CMD_SEL) followed by the number of data to be transmitted (CMD_RIGHT_SIZE, + CMD_LEFT_SIZE, CMD_UP_SIZE, CMD_DOWN_SIZE or CMD_SEL_SIZE). + +- The USART Receiver Board receives the specific command (2 bytes received : 1 byte :code + and 1 byte : number of data). + +- The USART Transmitter Board sends the number of bytes (already defined in the specific + command)from TxBuffer to the USART Receiver Board. + +- The USART Receiver Board compares the number of bytes received with the defined ones into + his TxBuffer. + + Received data correctness is signaled by LED lightening and though as follow: + - Joystick RIGHT and data correctly received ==> LD2, LD3 ON and LD4 OFF + - Joystick LEFT and data correctly received ==> LD4 ON, LD2 and LD3 are OFF + - Joystick UP and data correctly received ==> LD2 ON, LD3 and LD4 are OFF + - Joystick DOWN and data correctly received ==> LD3 ON, LD2 and LD4 are OFF + - Joystick SEL and data correctly received ==> LD2, LD3 and LD4 are ON + +In both boards, the data transfers is managed using the USART Tx/Rx channels DMA requests. + +The SysTick is configured to generate interrupt each 10ms. A dedicated counter +inside the SysTick ISR is used to toggle the LD1 each 100ms indicating that the +firmware is running. +These operations can be repeated infinitely. + +A defined communication timeout is insuring that the application will not remain +stuck if the USART communication is corrupted. +You can adjust this timeout through the USER_TIMEOUT define inside main.h file +depending on CPU frequency and application conditions (interrupts routines, +number of data to transfer, baudrate, CPU frequency...). +When a given operation is not finished within the defined timeout, a callback is +made to the function "TimeOut_UserCallback()", this function is used to manage +timeout communication failure. In this example, this callback implements a simple +infinite loop, but user can add his own implementation to manage timeout failure. + + +@par Directory contents + + - USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h Library Configuration file + - USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.c Interrupt handlers + - USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.h Interrupt handlers header file + - USART/USART_TwoBoards/DataExchangeDMA/main.c Main program + - USART/USART_TwoBoards/DataExchangeDMA/main.h Main program header file + - USART/USART_TwoBoards/DataExchangeDMA/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" tool. + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + - Use the Joystick buttons + - Connect BoardA USART3 TX pin (PC.10) to BoardB USART3 RX pin (PC.11) + - Connect BoardA USART3 RX pin (PC.11) to BoardB USART3 TX pin (PC.10) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h new file mode 100644 index 000000000..bc18f6b33 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.c new file mode 100644 index 000000000..0e1f37647 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.c @@ -0,0 +1,192 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_DataExchangeDMA + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint8_t Counter = 0x00; +extern __IO uint32_t TimeOut; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + /* Decrement the timeout value */ + if (TimeOut != 0x0) + { + TimeOut--; + } + + if (Counter < 10) + { + Counter++; + } + else + { + Counter = 0x00; + STM_EVAL_LEDToggle(LED1); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx_md.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.h new file mode 100644 index 000000000..0669db7ae --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeDMA/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeDMA/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/main.c new file mode 100644 index 000000000..62ab40c81 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/main.c @@ -0,0 +1,529 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeInterrupt/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_DataExchangeInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +uint8_t TxBuffer[] = "USART Interrupt Example: Communication between two USART using Interrupt"; +uint8_t RxBuffer [RXBUFFERSIZE]; +__IO uint8_t RxIndex = 0x00; +__IO uint8_t TxIndex = 0x00; + +__IO JOYState_TypeDef PressedButton = JOY_NONE; +__IO uint8_t UsartMode = USART_MODE_TRANSMITTER; +__IO uint8_t UsartTransactionType = USART_TRANSACTIONTYPE_CMD; + +uint8_t CmdBuffer [0x02] = {0x00, 0x00}; /* {Transaction Command, +Number of byte to receive or to transmit} */ +uint8_t AckBuffer [0x02] = {0x00, 0x00}; /* {Transaction Command, ACK command} */ + +__IO uint32_t TimeOut = 0x00; +/* Private function prototypes -----------------------------------------------*/ +static void USART_Config(void); +static void SysTickConfig(void); +static void TimeOut_UserCallback(void); +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength); +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* USART configuration -----------------------------------------------------*/ + USART_Config(); + + /* SysTick configuration ---------------------------------------------------*/ + SysTickConfig(); + + /* Initialize LEDs mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Configure the IO Expander mounted on STM322xG-EVAL board */ + TimeOut = USER_TIMEOUT; + while ((IOE_Config() != IOE_OK) && (TimeOut != 0x00)) + {} + + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Enable the USARTx Receive interrupt: this interrupt is generated when the + USARTx receive data register is not empty */ + USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE); + + while (1) + { + TxIndex = 0x00; + RxIndex = 0x00; + UsartTransactionType = USART_TRANSACTIONTYPE_CMD; + UsartMode = USART_MODE_RECEIVER; + + Fill_Buffer(CmdBuffer, 0x02); + Fill_Buffer(AckBuffer, 0x02); + + /* Clear the RxBuffer */ + Fill_Buffer(RxBuffer, TXBUFFERSIZE); + + PressedButton = IOE_JoyStickGetState(); + + /* Waiting Joystick is pressed or transaction command is received */ + while ((PressedButton == JOY_NONE) && (CmdBuffer[0x00] == 0x00)) + { + PressedButton = IOE_JoyStickGetState(); + } + + /* + If the Joystick is pressed go to transmitter mode, otherwise (the transaction + command is received) go to receiver mode + */ + +/******************************************************************************/ +/* USART in Mode Transmitter */ +/******************************************************************************/ + if ((PressedButton != JOY_NONE) && (CmdBuffer[0x00] == 0x00)) + { + UsartMode = USART_MODE_TRANSMITTER; + switch (PressedButton) + { + /* JOY_RIGHT button pressed */ + case JOY_RIGHT: + CmdBuffer[0x00] = CMD_RIGHT; + CmdBuffer[0x01] = CMD_RIGHT_SIZE; + break; + /* JOY_LEFT button pressed */ + case JOY_LEFT: + CmdBuffer[0x00] = CMD_LEFT; + CmdBuffer[0x01] = CMD_LEFT_SIZE; + break; + /* JOY_UP button pressed */ + case JOY_UP: + CmdBuffer[0x00] = CMD_UP; + CmdBuffer[0x01] = CMD_UP_SIZE; + break; + /* JOY_DOWN button pressed */ + case JOY_DOWN: + CmdBuffer[0x00] = CMD_DOWN; + CmdBuffer[0x01] = CMD_DOWN_SIZE; + break; + /* JOY_SEL button pressed */ + case JOY_SEL: + CmdBuffer[0x00] = CMD_SEL; + CmdBuffer[0x01] = CMD_SEL_SIZE; + break; + default: + break; + } + + if (CmdBuffer[0x00]!= 0x00) + { + /* Enable the USARTx transmit data register empty interrupt */ + USART_ITConfig(USARTx, USART_IT_TXE, ENABLE); + + /* Wait until USART sends the command or time out */ + TimeOut = USER_TIMEOUT; + while ((TxIndex < 0x02)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* The software must wait until TC=1. The TC flag remains cleared during all data + transfers and it is set by hardware at the last frame抯 end of transmission*/ + TimeOut = USER_TIMEOUT; + while ((USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET)&&(TimeOut != 0x00)) + { + } + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* Wait until USART receives the Ack command or time out*/ + TimeOut = USER_TIMEOUT; + while ((RxIndex < 0x02)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + /* USART sends the data */ + UsartTransactionType = USART_TRANSACTIONTYPE_DATA; + TxIndex = 0x00; + RxIndex = 0x00; + + /* Enable the USARTx transmit data register empty interrupt */ + USART_ITConfig(USARTx, USART_IT_TXE, ENABLE); + + /* Wait until end of data transfer */ + TimeOut = USER_TIMEOUT; + while ((TxIndex < GetVar_NbrOfData())&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* The software must wait until TC=1. The TC flag remains cleared during all data + transfers and it is set by hardware at the last frame抯 end of transmission*/ + TimeOut = USER_TIMEOUT; + while ((USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET)&&(TimeOut != 0x00)) + { + } + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + } + CmdBuffer[0x00] = 0x00; + } + +/******************************************************************************/ +/* USART in Receiver Mode */ +/******************************************************************************/ + if (CmdBuffer[0x00] != 0x00) + { + /* Wait until USART receives the command or time out */ + TimeOut = USER_TIMEOUT; + while ((RxIndex < 0x02)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + UsartMode = USART_MODE_RECEIVER; + + /* Enable the USARTx transmit data register empty interrupt */ + USART_ITConfig(USARTx, USART_IT_TXE, ENABLE); + + /* Wait until USART sends the ACK command or time out*/ + TimeOut = USER_TIMEOUT; + while ((TxIndex < 0x02)&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* The software must wait until TC=1. The TC flag remains cleared during all data + transfers and it is set by hardware at the last frame抯 end of transmission*/ + TimeOut = USER_TIMEOUT; + while ((USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET)&&(TimeOut != 0x00)) + { + } + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + + /* USART receives the data */ + UsartTransactionType = USART_TRANSACTIONTYPE_DATA; + TxIndex = 0x00; + RxIndex = 0x00; + + /* Wait until end of data transfer or time out */ + TimeOut = USER_TIMEOUT; + while ((RxIndex < GetVar_NbrOfData())&&(TimeOut != 0x00)) + {} + if(TimeOut == 0) + { + TimeOut_UserCallback(); + } + switch (CmdBuffer[0x01]) + { + /* CMD_RIGHT command received */ + case CMD_RIGHT_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_RIGHT_SIZE) != FAILED) + { + /* Turn ON LED2 and LED3 */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + /* Turn OFF LED4 */ + STM_EVAL_LEDOff(LED4); + } + break; + /* CMD_LEFT command received */ + case CMD_LEFT_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_LEFT_SIZE) != FAILED) + { + /* Turn ON LED4 */ + STM_EVAL_LEDOn(LED4); + /* Turn OFF LED2 and LED3 */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + } + break; + /* CMD_UP command received */ + case CMD_UP_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_UP_SIZE) != FAILED) + { + /* Turn ON LED2 */ + STM_EVAL_LEDOn(LED2); + /* Turn OFF LED3 and LED4 */ + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + } + break; + /* CMD_DOWN command received */ + case CMD_DOWN_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_DOWN_SIZE) != FAILED) + { + /* Turn ON LED3 */ + STM_EVAL_LEDOn(LED3); + /* Turn OFF LED2 and LED4 */ + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED4); + } + break; + /* CMD_SEL command received */ + case CMD_SEL_SIZE: + if (Buffercmp(TxBuffer, RxBuffer, CMD_SEL_SIZE) != FAILED) + { + /* Turn ON all LED2, LED3 and LED4 */ + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + } + break; + default: + break; + } + CmdBuffer[0x00] = 0x00; + } + } +} + +/** + * @brief Basic management of the timeout situation. + * @param None. + * @retval None. + */ +static void TimeOut_UserCallback(void) +{ + /* User can add his own implementation to manage TimeOut Communication failure */ + /* Block communication and all processes */ + while (1) + { + } +} + +/** + * @brief Configures the USART Peripheral. + * @param None + * @retval None + */ +static void USART_Config(void) +{ + USART_InitTypeDef USART_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable GPIO clock */ + RCC_AHB1PeriphClockCmd(USARTx_TX_GPIO_CLK | USARTx_RX_GPIO_CLK, ENABLE); + + /* Enable USART clock */ + USARTx_CLK_INIT(USARTx_CLK, ENABLE); + + /* Connect USART pins to AF7 */ + GPIO_PinAFConfig(USARTx_TX_GPIO_PORT, USARTx_TX_SOURCE, USARTx_TX_AF); + GPIO_PinAFConfig(USARTx_RX_GPIO_PORT, USARTx_RX_SOURCE, USARTx_RX_AF); + + /* Configure USART Tx and Rx as alternate function push-pull */ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_InitStructure.GPIO_Pin = USARTx_TX_PIN; + GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = USARTx_RX_PIN; + GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStructure); + + /* Enable the USART OverSampling by 8 */ + USART_OverSampling8Cmd(USARTx, ENABLE); + + /* USARTx configuration ----------------------------------------------------*/ + /* USARTx configured as follow: + - BaudRate = 3750000 baud + - Maximum BaudRate that can be achieved when using the Oversampling by 8 + is: (USART APB Clock / 8) + Example: + - (USART3 APB1 Clock / 8) = (30 MHz / 8) = 3750000 baud + - (USART1 APB2 Clock / 8) = (60 MHz / 8) = 7500000 baud + - Maximum BaudRate that can be achieved when using the Oversampling by 16 + is: (USART APB Clock / 16) + Example: (USART3 APB1 Clock / 16) = (30 MHz / 16) = 1875000 baud + Example: (USART1 APB2 Clock / 16) = (60 MHz / 16) = 3750000 baud + - Word Length = 8 Bits + - one Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitStructure.USART_BaudRate = 3750000; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_Init(USARTx, &USART_InitStructure); + + /* NVIC configuration */ + /* Configure the Priority Group to 2 bits */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); + + /* Enable the USARTx Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable USART */ + USART_Cmd(USARTx, ENABLE); +} + +/** + * @brief Configures the SysTick Base time to 10 ms. + * @param None + * @retval None + */ +static void SysTickConfig(void) +{ + /* Setup SysTick Timer for 10ms interrupts */ + if (SysTick_Config(SystemCoreClock / 100)) + { + /* Capture error */ + while (1); + } + /* Configure the SysTick handler priority */ + NVIC_SetPriority(SysTick_IRQn, 0x0); +} + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval PASSED: pBuffer1 identical to pBuffer2 + * FAILED: pBuffer1 differs from pBuffer2 + */ +static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return FAILED; + } + pBuffer1++; + pBuffer2++; + } + + return PASSED; +} +/** + * @brief Returns NbrOfData value. + * @param None + * @retval Tx Buffer Size (NbrOfDataToTransfer). + */ +uint8_t GetVar_NbrOfData(void) +{ + return CmdBuffer[0x01]; +} +/** + * @brief Fills buffer. + * @param pBuffer: pointer on the Buffer to fill + * @param BufferLength: size of the buffer to fill + * @retval None + */ +static void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLength) +{ + uint16_t index = 0; + + /* Put in global buffer same values */ + for (index = 0; index < BufferLength; index++ ) + { + pBuffer[index] = 0x00; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + {} +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/main.h new file mode 100644 index 000000000..5f6bcbe4f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/main.h @@ -0,0 +1,116 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeInterrupt/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_ioe.h" + +/* Exported typedef -----------------------------------------------------------*/ +#define countof(a) (sizeof(a) / sizeof(*(a))) +typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; + +/* Exported define ------------------------------------------------------------*/ + +/* USER_TIMEOUT value for waiting loops. This timeout is just guarantee that the + application will not remain stuck if the USART communication is corrupted. + You may modify this timeout value depending on CPU frequency and application + conditions (interrupts routines, number of data to transfer, baudrate, frequence + CPU...). */ +#define USER_TIMEOUT ((uint32_t)0x64) /* Waiting 1s */ + +/* USART Mode Selected */ +#define USART_MODE_TRANSMITTER 0x00 +#define USART_MODE_RECEIVER 0x01 + +/* USART Transaction Type */ +#define USART_TRANSACTIONTYPE_CMD 0x00 +#define USART_TRANSACTIONTYPE_DATA 0x01 + + +/* Definition for USARTx resources ********************************************/ +#define USARTx USART3 +#define USARTx_CLK RCC_APB1Periph_USART3 +#define USARTx_CLK_INIT RCC_APB1PeriphClockCmd +#define USARTx_IRQn USART3_IRQn +#define USARTx_IRQHandler USART3_IRQHandler + +#define USARTx_TX_PIN GPIO_Pin_10 +#define USARTx_TX_GPIO_PORT GPIOC +#define USARTx_TX_GPIO_CLK RCC_AHB1Periph_GPIOC +#define USARTx_TX_SOURCE GPIO_PinSource10 +#define USARTx_TX_AF GPIO_AF_USART3 + +#define USARTx_RX_PIN GPIO_Pin_11 +#define USARTx_RX_GPIO_PORT GPIOC +#define USARTx_RX_GPIO_CLK RCC_AHB1Periph_GPIOC +#define USARTx_RX_SOURCE GPIO_PinSource11 +#define USARTx_RX_AF GPIO_AF_USART3 + + +/* Misc definition ************************************************************/ +/* Transmit buffer size */ +#define TXBUFFERSIZE (countof(TxBuffer) - 1) +/* Receive buffer size */ +#define RXBUFFERSIZE TXBUFFERSIZE + +/* Commands list */ +#define CMD_RIGHT 0x55 +#define CMD_LEFT 0xAA +#define CMD_UP 0x33 +#define CMD_DOWN 0xCC +#define CMD_SEL 0xFF + +#define CMD_ACK 0x66 + +/* Number of data bytes for each command */ +#define CMD_RIGHT_SIZE 0x01 +#define CMD_LEFT_SIZE 0x05 +#define CMD_UP_SIZE 0x14 +#define CMD_DOWN_SIZE 0x1E +#define CMD_SEL_SIZE TXBUFFERSIZE + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +uint8_t GetVar_NbrOfData(void); +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/readme.txt new file mode 100644 index 000000000..45b92e0ed --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/readme.txt @@ -0,0 +1,152 @@ +/** + @page USART_DataExchangeInterrupt USART Communication Boards Data Exchange using Interrupt example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file USART/USART_TwoBoards/DataExchangeInterrupt/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the USART Communication Boards Interrupt Data Exchange + * using Interrupt example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example provides a small application in which joystick buttons are used +to trigger USART communication using interrupts and though using USART firmware +library. + +- Hardware Description + +To use this example, you need to load it on two STM32 boards (let's call them +BoardA and BoardB) then connect these two boards through UART lines and GND. + +@verbatim +*------------------------------------------------------------------------------* +| BoardA BoardB | +| ____________________ ____________________ | +| | | | | | +| | | | | | +| | __________ | | __________ | | +| | | UART |____|TX_____________RX|____| UART | | | +| | | Device1 |____|RX_____________TX|____| Device2 | | | +| | |__________| | | |__________| | | +| | | | | | +| | O LD1 | | O LD1 | | +| | O LD2 Joystick | | O LD2 Joystick | | +| | O LD3 _ | | O LD3 _ | | +| | O LD4 |_| | | O LD4 |_| | | +| | | | | | +| | GND O--|-----------------|--O GND | | +| |____________________| |____________________| | +| | +| | +*------------------------------------------------------------------------------* +@endverbatim + +@note +- The connection between the pins should use a common Ground. + +- Software Description + +On BoardA, at each joystick buttons press: +- The USART BoardA sends the specific command to the USART BoardB (the command + contains the transaction code (CMD_RIGHT, CMD_LEFT, CMD_UP, CMD_DOWN or CMD_SEL) + followed by the number of data to be transmitted (CMD_RIGHT_SIZE, CMD_LEFT_SIZE, + CMD_UP_SIZE, CMD_DOWN_SIZE or CMD_SEL_SIZE) + +- The USART BoardB receives the command and sends the CMD_ACK command to the USART BoardA + +- The USART BoardA receives the CMD_ACK command and sends the number of bytes + from TxBuffer to the USART BoardB. + +- The USART BoardB compares the number of bytes received with the defined ones into + his TxBuffer. + + Received data correctness is signaled by LED lightening and though as follow: + - Joystick RIGHT and data correctly received ==> LD2, LD3 ON and LD4 OFF + - Joystick LEFT and data correctly received ==> LD4 ON, LD2 and LD3 are OFF + - Joystick UP and data correctly received ==> LD2 ON, LD3 and LD4 are OFF + - Joystick DOWN and data correctly received ==> LD3 ON, LD2 and LD4 are OFF + - Joystick SEL and data correctly received ==> LD2, LD3 and LD4 are ON + +The steps described above can be also initiated and ensured by BoardB. + +In both boards(BoardA or BoardB), the data transfers is managed using USARTx_IRQHandler +in stm32f2xx_it.c file. + +The SysTick is configured to generate interrupt each 10ms. A dedicated counter +inside the SysTick ISR is used to toggle the LD1 each 100ms indicating that the +firmware is running. +These operations can be repeated infinitely. + +A defined communication timeout is insuring that the application will not remain +stuck if the USART communication is corrupted. +You can adjust this timeout through the USER_TIMEOUT define inside main.h file +depending on CPU frequency and application conditions (interrupts routines, +number of data to transfer, baudrate, CPU frequency...). +When a given operation is not finished within the defined timeout, a callback is +made to the function "TimeOut_UserCallback()", this function is used to manage +timeout communication failure. In this example, this callback implements a simple +infinite loop, but user can add his own implementation to manage timeout failure. + + +@par Directory contents + + - USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h Library Configuration file + - USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c Interrupt handlers + - USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h Interrupt handlers header file + - USART/USART_TwoBoards/DataExchangeInterrupt/main.c Main program + - USART/USART_TwoBoards/DataExchangeInterrupt/main.h Main program header file + - USART/USART_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c STM32F2xx system source file + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board. + + - STM322xG-EVAL Set-up + - Use LED1, LED2, LED3 and LED4 connected respectively to PG.06, PG.08, PI.09 + and PC.07 pins + - Use the Joystick buttons + - Connect BoardA USART3 TX pin (PC.10) to BoardB USART3 RX pin (PC.11) + - Connect BoardA USART3 RX pin (PC.11) to BoardB USART3 TX pin (PC.10) + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h new file mode 100644 index 000000000..59cbd1702 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c new file mode 100644 index 000000000..40831cf61 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c @@ -0,0 +1,272 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and peripherals + * interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup USART_DataExchangeInterrupt + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern uint8_t TxBuffer[]; +extern uint8_t RxBuffer[]; +extern uint8_t CmdBuffer[]; +extern uint8_t AckBuffer[]; +extern __IO uint8_t RxIndex; +extern __IO uint8_t TxIndex; + +extern __IO uint8_t UsartTransactionType; +extern __IO uint8_t UsartMode; + +__IO uint8_t Counter = 0x00; +extern __IO uint32_t TimeOut; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSV_Handler exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + /* Decrement the timeout value */ + if (TimeOut != 0x0) + { + TimeOut--; + } + + if (Counter < 10) + { + Counter++; + } + else + { + Counter = 0x00; + STM_EVAL_LEDToggle(LED1); + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/******************************************************************************/ +/** +* @brief This function handles USRAT interrupt request. +* @param None +* @retval None +*/ +void USARTx_IRQHandler(void) +{ + /* USART in mode Tramitter -------------------------------------------------*/ + if (USART_GetITStatus(USARTx, USART_IT_TXE) == SET) + { /* When Joystick Pressed send the command then send the data */ + if (UsartMode == USART_MODE_TRANSMITTER) + { /* Send the command */ + if (UsartTransactionType == USART_TRANSACTIONTYPE_CMD) + { + USART_SendData(USARTx, CmdBuffer[TxIndex++]); + if (TxIndex == 0x02) + { + /* Disable the USARTx transmit data register empty interrupt */ + USART_ITConfig(USARTx, USART_IT_TXE, DISABLE); + } + } + /* Send the data */ + else + { + USART_SendData(USARTx, TxBuffer[TxIndex++]); + if (TxIndex == GetVar_NbrOfData()) + { + /* Disable the USARTx transmit data register empty interrupt */ + USART_ITConfig(USARTx, USART_IT_TXE, DISABLE); + } + } + } + /*If Data Received send the ACK*/ + else + { + USART_SendData(USARTx, AckBuffer[TxIndex++]); + if (TxIndex == 0x02) + { + /* Disable the USARTx transmit data register empty interrupt */ + USART_ITConfig(USARTx, USART_IT_TXE, DISABLE); + } + } + } + + /* USART in mode Receiver --------------------------------------------------*/ + if (USART_GetITStatus(USARTx, USART_IT_RXNE) == SET) + { + if (UsartMode == USART_MODE_TRANSMITTER) + { + AckBuffer[RxIndex++] = USART_ReceiveData(USARTx); + } + else + { + /* Receive the command */ + if (UsartTransactionType == USART_TRANSACTIONTYPE_CMD) + { + CmdBuffer[RxIndex++] = USART_ReceiveData(USARTx); + } + /* Receive the USART data */ + else + { + RxBuffer[RxIndex++] = USART_ReceiveData(USARTx); + } + } + } +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h new file mode 100644 index 000000000..621dd0ad4 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @file USART/USART_TwoBoards/DataExchangeInterrupt/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void USARTx_IRQHandler(void); + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/USART/USART_TwoBoards/DataExchangeInterrupt/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/main.c new file mode 100644 index 000000000..81d14fc0e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/main.c @@ -0,0 +1,164 @@ +/** + ****************************************************************************** + * @file WWDG/WWDG_Example/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup WWDG_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +__IO uint32_t TimingDelay = 0; + +/* Private function prototypes -----------------------------------------------*/ +void Delay(__IO uint32_t nTime); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* Initialize LEDs and Key Button mounted on STM322xG-EVAL board */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI); + + /* Check if the system has resumed from WWDG reset */ + if (RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET) + { + /* WWDGRST flag set */ + /* Turn on LED1 */ + STM_EVAL_LEDOn(LED1); + + /* Clear reset flags */ + RCC_ClearFlag(); + } + else + { + /* WWDGRST flag is not set */ + /* Turn off LED1 */ + STM_EVAL_LEDOff(LED1); + } + + /* Setup SysTick Timer for 1 msec interrupts */ + if (SysTick_Config(SystemCoreClock / 1000)) + { + /* Capture error */ + while (1); + } + + /* WWDG configuration */ + /* Enable WWDG clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); + + /* WWDG clock counter = (PCLK1 (30MHz)/4096)/8 = 915 Hz (~1092 us) */ + WWDG_SetPrescaler(WWDG_Prescaler_8); + + /* Set Window value to 80; WWDG counter should be refreshed only when the counter + is below 80 (and greater than 64) otherwise a reset will be generated */ + WWDG_SetWindowValue(80); + + /* Enable WWDG and set counter value to 127, WWDG timeout = ~1092 us * 64 = 69.9 ms + In this case the refresh window is: ~1092 * (127-80) = 51.3 ms < refresh window < ~1092 * 64 = 69.9ms + */ + WWDG_Enable(127); + + while (1) + { + /* Toggle LED2 */ + STM_EVAL_LEDToggle(LED2); + + /* Insert 53 ms delay */ + Delay(53); + + /* Update WWDG counter */ + WWDG_SetCounter(127); + } +} + +/** + * @brief Inserts a delay time. + * @param nTime: specifies the delay time length, in milliseconds. + * @retval None + */ +void Delay(__IO uint32_t nTime) +{ + TimingDelay = nTime; + + while(TimingDelay != 0); +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/readme.txt new file mode 100644 index 000000000..48f0589e6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/readme.txt @@ -0,0 +1,94 @@ +/** + @page WWDG_Example WWDG_Example + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file WWDG/WWDG_Example/readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Description of the WWDG Example. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +@par Example Description + +This example shows how to update at regular period the WWDG counter and how to +simulate a software fault generating an MCU WWDG reset on expiry of a programmed +time period. + +The WWDG timeout is set to 69.9 ms and the refresh window is set to 80. +The WWDG counter is refreshed each 50ms in the main program infinite loop to +prevent a WWDG reset. +LED2 is also toggled each 53 ms indicating that the program is running. + +An EXTI Line is connected to a GPIO pin, and configured to generate an interrupt +on the rising edge of the signal. + +The EXTI Line is used to simulate a software failure: once the EXTI Line event +occurs, by pressing the Key push-button, the corresponding interrupt is served. +In the ISR, a write to invalid address generates a Hardfault exception containing +an infinite loop and preventing to return to main program (the WWDG counter is +not refreshed). +As a result, when the WWDG counter falls to 63, the WWDG reset occurs. +If the WWDG reset is generated, after the system resumes from reset, LED1 turns on. + +If the EXTI Line event does not occur, the WWDG counter is indefinitely refreshed +in the main program infinite loop, and there is no WWDG reset. + + +@par Directory contents + + - WWDG_Example/system_stm32f2xx.c STM32F2xx system clock configuration file + - WWDG_Example/stm32f2xx_conf.h Library Configuration file + - WWDG_Example/stm32f2xx_it.c Interrupt handlers + - WWDG_Example/stm32f2xx_it.h Header for stm32f2xx_it.c + - WWDG_Example/main.c Main program + +@note The "system_stm32f2xx.c" is generated by an automatic clock configuration + tool and can be easily customized to your own configuration. + To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" + provided with the AN3362 package available on ST Microcontrollers + + +@par Hardware and Software environment + + - This example runs on STM32F2xx Devices. + + - This example has been tested with STM322xG-EVAL RevB and can be easily tailored + to any other development board + + + - STM322xG-EVAL Set-up + - Use LD1 and LD2 leds connected respectively to PG.06 and PG.08 pins + - Use the KEY push button connected to PG.15 pin (EXTI Line15). + + +@par How to use it ? + +In order to make the program work, you must do the following : + - Copy all source files from this example folder to the template folder under + Project\STM32F2xx_StdPeriph_Template + - Open your preferred toolchain + - Rebuild all files and load your image into target memory + - Run the example + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/stm32f2xx_conf.h new file mode 100644 index 000000000..9ec369e5a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file WWDG/WWDG_Example/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/stm32f2xx_it.c new file mode 100644 index 000000000..988d47d98 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/stm32f2xx_it.c @@ -0,0 +1,197 @@ +/** + ****************************************************************************** + * @file WWDG/WWDG_Example/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "stm322xg_eval.h" + +/** @addtogroup STM32F2xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup WWDG_Example + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +extern __IO uint32_t TimingDelay; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + TimingDelay--; +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @brief This function handles External line 15 to 10 interrupt request. + * @param None + * @retval None + */ +void EXTI15_10_IRQHandler(void) +{ + if (EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) + { + /* Clear the Key Button EXTI Line Pending Bit */ + EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); + + /* As the following address is invalid (not mapped), a Hardfault exception + will be generated with an infinite loop and when the WWDG counter falls to 63 + the WWDG reset occurs */ + *(__IO uint32_t *) 0xA0001000 = 0xFF; + } +} + +/** + * @} + */ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/stm32f2xx_it.h new file mode 100644 index 000000000..6bf5116e8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file WWDG/WWDG_Example/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/WWDG/WWDG_Example/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/Project.ewd b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/Project.ewd new file mode 100644 index 000000000..dcaffc6b8 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/Project.ewd @@ -0,0 +1,884 @@ + + + + 2 + + STM322xG_EVAL + + ARM + + 1 + + C-SPY + 2 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + JLINK_ID + 2 + + 13 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 0 + 1 + 1 + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/Project.ewp b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/Project.ewp new file mode 100644 index 000000000..fe9345700 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/Project.ewp @@ -0,0 +1,1039 @@ + + + + 2 + + STM322xG_EVAL + + ARM + + 1 + + General + 3 + + 21 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 28 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 13 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + CMSIS + + $PROJ_DIR$\..\system_stm32f2xx.c + + + + EWARM + + $PROJ_DIR$\..\..\..\Libraries\CMSIS\Device\ST\STM32F2xx\Source\Templates\iar\startup_stm32f2xx.s + + + + STM32_EVAL + + $PROJ_DIR$\..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval.c + + + $PROJ_DIR$\..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval_fsmc_sram.c + + + $PROJ_DIR$\..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval_ioe.c + + + $PROJ_DIR$\..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval_lcd.c + + + + STM32F2xx_StdPeriph_Driver + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\misc.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_adc.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_can.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_crc.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_aes.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_des.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_tdes.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dac.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dbgmcu.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dcmi.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dma.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_exti.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_flash.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_fsmc.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_gpio.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash_md5.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash_sha1.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_i2c.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_iwdg.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_pwr.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rcc.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rng.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rtc.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_sdio.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_spi.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_syscfg.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_tim.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_usart.c + + + $PROJ_DIR$\..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_wwdg.c + + + + User + + $PROJ_DIR$\..\main.c + + + $PROJ_DIR$\..\stm32f2xx_it.c + + + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/Project.eww b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/Project.eww new file mode 100644 index 000000000..b71bdbfb2 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/Project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\Project.ewp + + + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/readme.txt new file mode 100644 index 000000000..b5dac7472 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/readme.txt @@ -0,0 +1,64 @@ +/** + @page ewarm EWARM Project Template for STM32F2xx devices + + @verbatim + ******************* (C) COPYRIGHT 2012 STMicroelectronics ******************** + * @file readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This sub-directory contains all the user-modifiable files needed to + * create a new project linked with the STM32F2xx Standard Peripherals + * Library and working with IAR Embedded Workbench for ARM (EWARM) + * software toolchain. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + + @par Directory contents + + - project .ewd/.eww/.ewp: A pre-configured project file with the provided library + structure that produces an executable image with IAR + Embedded Workbench. + + - stm32f2xx_flash.icf : This file is the IAR Linker configuration file used to + place program code (readonly) in internal FLASH and data + (readwrite, Stack and Heap)in internal SRAM. + You can customize this file to your need. + + - stm32f2xx_flash_extsram.icf: This file is the IAR Linker configuration file + used to place program code (readonly) in internal + FLASH and data (readwrite, Stack and Heap)in + external SRAM. You can customize this file to your need. + + - stm32f2xx_ram.icf: This file is the IAR Linker configuration file used to + place program code (readonly) and data (readwrite, Stack + and Heap)in internal SRAM. + You can customize this file to your need. + + @par How to use it ? + + - Open the Project.eww workspace. + - Rebuild all files: Project->Rebuild all + - Load project image: Project->Download and Debug + - Run program: Debug->Go(F5) + + @note The needed define symbols for this config are already declared in the + preprocessor section: USE_STM322xG_EVAL, STM32F2XX, USE_STDPERIPH_DRIVER + + + *

© COPYRIGHT STMicroelectronics

+ */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/stm32f2xx_flash.icf b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/stm32f2xx_flash.icf new file mode 100644 index 000000000..4f4f7bf4a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/stm32f2xx_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20020000; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/stm32f2xx_flash_extsram.icf b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/stm32f2xx_flash_extsram.icf new file mode 100644 index 000000000..e09a45a03 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/stm32f2xx_flash_extsram.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x64000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x640FFFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; /* EXTSRAM_region */ + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/stm32f2xx_sram.icf b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/stm32f2xx_sram.icf new file mode 100644 index 000000000..df159b539 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/EWARM/stm32f2xx_sram.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x20000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x20000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x2000FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20010000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/MDK-ARM/Project.uvopt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/MDK-ARM/Project.uvopt new file mode 100644 index 000000000..8b72f3ab6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/MDK-ARM/Project.uvopt @@ -0,0 +1,800 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + STM322xG_EVAL + 0x4 + ARM-ADS + + 25000000 + + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\STM322xG_EVAL\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Reference Manual + DATASHTS\ST\STM32F20x.PDF + + + + SARMCM3.DLL + -MPU + DARMSTM.DLL + -pSTM32F207IG + SARMCM3.DLL + -MPU + TARMSTM.DLL + -pSTM32F207IG + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 1 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + -UV0250S9E -O2255 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC5000 -FN1 -FF0STM32F2xx_1024 -FS08000000 -FL0100000 + + + + + 1 + 2 + 0x40021000 + + + + + 2 + 2 + 0x40013800 + + + + + 3 + 2 + 0xE000E100 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + User + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 108 + 118 + 0 + ..\main.c + main.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\stm32f2xx_it.c + stm32f2xx_it.c + + + + + STM32_EVAL + 1 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval_fsmc_sram.c + stm322xg_eval_fsmc_sram.c + + + 2 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval_ioe.c + stm322xg_eval_ioe.c + + + 2 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval_lcd.c + stm322xg_eval_lcd.c + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval.c + stm322xg_eval.c + + + + + STM32F2xx_StdPeriph_Driver + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\misc.c + misc.c + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_adc.c + stm32f2xx_adc.c + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_can.c + stm32f2xx_can.c + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_crc.c + stm32f2xx_crc.c + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp.c + stm32f2xx_cryp.c + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_aes.c + stm32f2xx_cryp_aes.c + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_des.c + stm32f2xx_cryp_des.c + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_tdes.c + stm32f2xx_cryp_tdes.c + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dac.c + stm32f2xx_dac.c + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dbgmcu.c + stm32f2xx_dbgmcu.c + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dcmi.c + stm32f2xx_dcmi.c + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dma.c + stm32f2xx_dma.c + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_exti.c + stm32f2xx_exti.c + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_flash.c + stm32f2xx_flash.c + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_fsmc.c + stm32f2xx_fsmc.c + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_gpio.c + stm32f2xx_gpio.c + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash.c + stm32f2xx_hash.c + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash_md5.c + stm32f2xx_hash_md5.c + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash_sha1.c + stm32f2xx_hash_sha1.c + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_i2c.c + stm32f2xx_i2c.c + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_iwdg.c + stm32f2xx_iwdg.c + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_pwr.c + stm32f2xx_pwr.c + + + 3 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rcc.c + stm32f2xx_rcc.c + + + 3 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rng.c + stm32f2xx_rng.c + + + 3 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rtc.c + stm32f2xx_rtc.c + + + 3 + 32 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_sdio.c + stm32f2xx_sdio.c + + + 3 + 33 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_spi.c + stm32f2xx_spi.c + + + 3 + 34 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_syscfg.c + stm32f2xx_syscfg.c + + + 3 + 35 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_tim.c + stm32f2xx_tim.c + + + 3 + 36 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_usart.c + stm32f2xx_usart.c + + + 3 + 37 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_wwdg.c + stm32f2xx_wwdg.c + + + + + CMSIS + 1 + 0 + 0 + + 4 + 38 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\system_stm32f2xx.c + system_stm32f2xx.c + + + + + MDK-ARM + 1 + 0 + 0 + + 5 + 39 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\Device\ST\STM32F2xx\Source\Templates\arm\startup_stm32f2xx.s + startup_stm32f2xx.s + + + + + 1 + 0 + + 100 + 0 + + + ..\main.c + 0 + 108 + 118 + + + + + +
diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/MDK-ARM/Project.uvproj b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/MDK-ARM/Project.uvproj new file mode 100644 index 000000000..801a1151d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/MDK-ARM/Project.uvproj @@ -0,0 +1,610 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + STM322xG_EVAL + 0x4 + ARM-ADS + + + STM32F207IG + STMicroelectronics + IRAM(0x20000000-0x2001FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F2xx\startup_stm32f2xx.s" ("STM32F2xx Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F2xx_1024 -FS08000000 -FL0100000) + 5124 + stm32f2xx.h + + + + + + + + + + SFD\ST\STM32F2xx\STM32F2xx.sfr + 0 + + + + ST\STM32F2xx\ + ST\STM32F2xx\ + + 0 + 0 + 0 + 0 + 1 + + .\STM322xG_EVAL\ + STM322xG_EVAL + 1 + 0 + 0 + 1 + 1 + .\STM322xG_EVAL\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DARMSTM.DLL + -pSTM32F207IG + SARMCM3.DLL + -MPU + TARMSTM.DLL + -pSTM32F207IG + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + 0 + 1 + + + + + + + + + + + + + + BIN\UL2CM3.DLL + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + BIN\UL2CM3.DLL + "" () + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + + USE_STM322xG_EVAL, STM32F2XX, USE_STDPERIPH_DRIVER + + ..\;..\..\..\Libraries\CMSIS\Device\ST\STM32F2xx\Include;..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\inc;..\..\..\Utilities\STM32_EVAL\Common;..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + User + + + main.c + 1 + ..\main.c + + + stm32f2xx_it.c + 1 + ..\stm32f2xx_it.c + + + + + STM32_EVAL + + + stm322xg_eval_fsmc_sram.c + 1 + ..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval_fsmc_sram.c + + + stm322xg_eval_ioe.c + 1 + ..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval_ioe.c + + + stm322xg_eval_lcd.c + 1 + ..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval_lcd.c + + + stm322xg_eval.c + 1 + ..\..\..\Utilities\STM32_EVAL\STM322xG_EVAL\stm322xg_eval.c + + + + + STM32F2xx_StdPeriph_Driver + + + misc.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\misc.c + + + stm32f2xx_adc.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_adc.c + + + stm32f2xx_can.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_can.c + + + stm32f2xx_crc.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_crc.c + + + stm32f2xx_cryp.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp.c + + + stm32f2xx_cryp_aes.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_aes.c + + + stm32f2xx_cryp_des.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_des.c + + + stm32f2xx_cryp_tdes.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_tdes.c + + + stm32f2xx_dac.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dac.c + + + stm32f2xx_dbgmcu.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dbgmcu.c + + + stm32f2xx_dcmi.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dcmi.c + + + stm32f2xx_dma.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dma.c + + + stm32f2xx_exti.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_exti.c + + + stm32f2xx_flash.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_flash.c + + + stm32f2xx_fsmc.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_fsmc.c + + + stm32f2xx_gpio.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_gpio.c + + + stm32f2xx_hash.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash.c + + + stm32f2xx_hash_md5.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash_md5.c + + + stm32f2xx_hash_sha1.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash_sha1.c + + + stm32f2xx_i2c.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_i2c.c + + + stm32f2xx_iwdg.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_iwdg.c + + + stm32f2xx_pwr.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_pwr.c + + + stm32f2xx_rcc.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rcc.c + + + stm32f2xx_rng.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rng.c + + + stm32f2xx_rtc.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rtc.c + + + stm32f2xx_sdio.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_sdio.c + + + stm32f2xx_spi.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_spi.c + + + stm32f2xx_syscfg.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_syscfg.c + + + stm32f2xx_tim.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_tim.c + + + stm32f2xx_usart.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_usart.c + + + stm32f2xx_wwdg.c + 1 + ..\..\..\Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_wwdg.c + + + + + CMSIS + + + system_stm32f2xx.c + 1 + ..\system_stm32f2xx.c + + + + + MDK-ARM + + + startup_stm32f2xx.s + 2 + ..\..\..\Libraries\CMSIS\Device\ST\STM32F2xx\Source\Templates\arm\startup_stm32f2xx.s + + + + + + + +
diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/MDK-ARM/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/MDK-ARM/readme.txt new file mode 100644 index 000000000..c233650ec --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/MDK-ARM/readme.txt @@ -0,0 +1,53 @@ +/** + @page mdkarm MDK-ARM Project Template for STM32F2xx devices + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This sub-directory contains all the user-modifiable files needed to + * create a new project linked with the STM32F2xx Standard Peripherals + * Library and working with RealView Microcontroller Development Kit + * (MDK-ARM) software toolchain. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + + @par Directory contents + + - Project.uvproj/.uvopt: A pre-configured project file with the provided library + structure that produces an executable image with MDK-ARM. + +@note Enabling "Options for Target � Output � Browser Information" is useful for + quick source files navigation but may slow the compilation time. + + + @par How to use it ? + + - Open the Project.uvproj project + - Rebuild all files: Project->Rebuild all target files + - Load project image: Debug->Start/Stop Debug Session + - Run program: Debug->Run (F5) + + @note The needed define symbols for this config are already declared in the + preprocessor section: USE_STM322xG_EVAL, STM32F2XX, USE_STDPERIPH_DRIVER + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/Project.rapp b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/Project.rapp new file mode 100644 index 000000000..56081ee8f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/Project.rapp @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+
+ + +
+ +
+ +
+ + +
+ + + + +
+ +
+ +
+ + +
+
+ + +
+ +
+ +
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ + + +
+
+ + + + +
+ +
+ +
+ + +
+ +
+
+
+
\ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/Project.rprj b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/Project.rprj new file mode 100644 index 000000000..7e5c81b0a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/Project.rprj @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/readme.txt new file mode 100644 index 000000000..683d8ee89 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/readme.txt @@ -0,0 +1,54 @@ +/** + @page ride RIDE Project Template for STM32F2xx devices + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This sub-directory contains all the user-modifiable files needed to + * create a new project linked with the STM32F2xx Standard Peripherals + * Library and working with RIDE7 software toolchain. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + + @par Directory contents + + - project .rprj/.rapp: A pre-configured project file with the provided library + structure that produces an executable image with RIDE7. + + - stm32f2xx_flash_extsram.ld: This file is the RAISONANCE linker script used to + place program code (readonly) in internal FLASH and + data (readwrite, Stack and Heap)in external SRAM. + You can customize this file to your need. + + @par How to use it ? + + - Open the Project.rprj project. + - Rebuild all files: Project->build project + - Load project image: Debug->start(ctrl+D) + - Run program: Debug->Run(ctrl+F9) + + @note The needed define symbols for this config are already declared in the + preprocessor section: USE_STM322xG_EVAL, STM32F2XX, USE_STDPERIPH_DRIVER + + + *

© COPYRIGHT STMicroelectronics

+ */ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/stm32f2xx_flash_extsram.ld b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/stm32f2xx_flash_extsram.ld new file mode 100644 index 000000000..b988d4460 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/RIDE/stm32f2xx_flash_extsram.ld @@ -0,0 +1,240 @@ +/* +Linker script for STM32F2xx_1024K_128K +*/ + +/* include the common STM32F2xx sub-script */ + +/* Common part of the linker scripts for STM32 devices*/ + + +/* default stack sizes. +These are used by the startup in order to allocate stacks for the different modes. +*/ + +__Stack_Size = 1024 ; + +PROVIDE ( _Stack_Size = __Stack_Size ) ; + +__Stack_Init = _estack - __Stack_Size ; + +/*"PROVIDE" allows to easily override these values from an object file or the commmand line.*/ +PROVIDE ( _Stack_Init = __Stack_Init ) ; + +/* +There will be a link error if there is not this amount of RAM free at the end. +*/ +_Minimum_Stack_Size = 0x100 ; + + +/* include the memory spaces definitions sub-script */ +/* +Linker subscript for STM32F2xx definitions with 1024K Flash and 1024K External SRAM */ + +/* Memory Spaces Definitions */ + +MEMORY +{ + RAM (xrw) : ORIGIN = 0x64000000, LENGTH = 1024K + FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K + FLASHB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0 +} + +/* higher address of the user mode stack */ +_estack = 0x64100000; + + + +/* include the sections management sub-script for FLASH mode */ + +/* Sections Definitions */ + +SECTIONS +{ + /* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* for some STRx devices, the beginning of the startup code is stored in the .flashtext section, which goes to FLASH */ + .flashtext : + { + . = ALIGN(4); + *(.flashtext) /* Startup code */ + . = ALIGN(4); + } >FLASH + + + /* the program code is stored in the .text section, which goes to Flash */ + .text : + { + . = ALIGN(4); + + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + + . = ALIGN(4); + _etext = .; + /* This is used by the startup in order to initialize the .data secion */ + _sidata = _etext; + } >FLASH + + + + /* This is the initialized data section + The program executes knowing that the data is in the RAM + but the loader puts the initial values in the FLASH (inidata). + It is one task of the startup to copy the initial values from FLASH to RAM. */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + + + /* This is the uninitialized data section */ + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + } >RAM + + PROVIDE ( end = _ebss ); + PROVIDE ( _end = _ebss ); + + /* This is the user stack section + This is just to check that there is enough RAM left for the User mode stack + It should generate an error if it's full. + */ + ._usrstack : + { + . = ALIGN(4); + _susrstack = . ; + + . = . + _Minimum_Stack_Size ; + + . = ALIGN(4); + _eusrstack = . ; + } >RAM + + + + /* this is the FLASH Bank1 */ + /* the C or assembly source must explicitly place the code or data there + using the "section" attribute */ + .b1text : + { + *(.b1text) /* remaining code */ + *(.b1rodata) /* read-only data (constants) */ + *(.b1rodata*) + } >FLASHB1 + + /* this is the EXTMEM */ + /* the C or assembly source must explicitly place the code or data there + using the "section" attribute */ + + /* EXTMEM Bank0 */ + .eb0text : + { + *(.eb0text) /* remaining code */ + *(.eb0rodata) /* read-only data (constants) */ + *(.eb0rodata*) + } >EXTMEMB0 + + /* EXTMEM Bank1 */ + .eb1text : + { + *(.eb1text) /* remaining code */ + *(.eb1rodata) /* read-only data (constants) */ + *(.eb1rodata*) + } >EXTMEMB1 + + /* EXTMEM Bank2 */ + .eb2text : + { + *(.eb2text) /* remaining code */ + *(.eb2rodata) /* read-only data (constants) */ + *(.eb2rodata*) + } >EXTMEMB2 + + /* EXTMEM Bank0 */ + .eb3text : + { + *(.eb3text) /* remaining code */ + *(.eb3rodata) /* read-only data (constants) */ + *(.eb3rodata*) + } >EXTMEMB3 + + + + /* after that it's only debugging information. */ + + /* remove the debugging information from the standard libraries */ + DISCARD : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/Release_Notes.html b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/Release_Notes.html new file mode 100644 index 000000000..d2682e0d3 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/Release_Notes.html @@ -0,0 +1,136 @@ + + + + + + +Release Notes for STM32F2xx Standard Peripherals Library Template + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
Back to Release page
+

Release +Notes for STM32F2xx Standard Peripherals Library Template

+

Copyright 2012 STMicroelectronics

+

+
+

 

+ + + + + + +
+

Contents

+
    +
  1. STM32F2xx Standard Peripherals Library +Template +update History
  2. +
  3. License
  4. +
+ + +

STM32F2xx Standard +Peripherals Library Template update History

V1.1.0 / 13-April-2012

Main +Changes

+
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • Update +template projects to use the latest version of the supported toolchains +(for more details refer to the Library's main release notes)
  • Update template projects to be in line with changes made on latest version of the STM32F2xx CMSIS V1.1.0 and STM322xG-EVAL drivers V5.0.0
    • Changes to be in line with STM32F2xx CMSIS V1.1.0: the update are due to modification on the folder organization (to be in line with CMSIS standard V2.1)
      • In the project complier preprocessor, update STM32F2xx CMSIS include folder path to "Libraries\CMSIS\Device\ST\STM32F2xx\Include" instead of "Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx"
      • In the project files, remove core_cm3.c file
      • In the project files, update path of startup_stm32f2xx.s file to "Libraries\CMSIS\Device\ST\STM32F2xx\Source\Templates\'compiler'" instead of "Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx\startup\'compiler'"
    • Changes to be in line with STM322xG-EVAL drivers V5.0.0: the update are due to modification on the EVAL drivers architecture and folder organization (for more details refer to STM322xG-EVAL drivers release notes)
      • In the project files, remove stm32_eval.c\.h files
      • In the project files, add the EVAL board driver source file "stm322xg_eval.c" instead of "stm32_eval.c"
      • main.c: include the EVAL board driver header file #include "stm322xg_eval.h" instead of #include "stm32_eval.h"

V1.0.0 / 18-April-2011

Main +Changes

+
  • First official release for STM32F2xx devices
+ +
    + +
+

License

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless +required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See +the License for the specific language governing permissions and +limitations under the License.
+ +
+
+

For + complete documentation on STM32 + Microcontrollers visit www.st.com/STM32

+
+

+
+
+

 

+
+ \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/.cproject b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/.cproject new file mode 100644 index 000000000..1f46f867c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/.cproject @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TASKING VX-toolset for ARM Cortex: control program v4.2r1 Build 118 + TASKING VX-toolset for ARM Cortex: assembler v4.2r1 Build 141 + TASKING VX-toolset for ARM Cortex: object linker (TRIAL VERS v4.2r1 Build 135 + TASKING VX-toolset for ARM Cortex: C compiler (TRIAL VERSION v4.2r1 Build 652 + TASKING program builder v4.2r1 Build 063 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/.project b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/.project new file mode 100644 index 000000000..dfae19462 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/.project @@ -0,0 +1,232 @@ + + + STM322xG-EVAL + + + + + + com.tasking.arm.TskManagedBuilder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.tasking.arm.target + + + + CMSIS + 2 + WORKSPACE_LOC/.metadata/Link + + + STM32F2xx_StdPeriph_Driver + 2 + WORKSPACE_LOC/.metadata/Link + + + STM32_EVAL + 2 + WORKSPACE_LOC/.metadata/Link + + + User + 2 + WORKSPACE_LOC/.metadata/Link + + + CMSIS/system_stm32f2xx.c + 1 + PARENT-2-PROJECT_LOC/system_stm32f2xx.c + + + STM32F2xx_StdPeriph_Driver/misc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/misc.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_adc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_adc.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_can.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_can.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_crc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_crc.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_cryp.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_cryp_aes.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_aes.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_cryp_des.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_des.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_cryp_tdes.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_tdes.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_dac.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dac.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_dbgmcu.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dbgmcu.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_dcmi.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dcmi.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_dma.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dma.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_exti.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_exti.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_flash.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_flash.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_fsmc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_fsmc.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_gpio.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_hash.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_hash_md5.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash_md5.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_hash_sha1.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash_sha1.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_i2c.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_i2c.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_iwdg.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_iwdg.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_pwr.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_pwr.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_rcc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_rng.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rng.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_rtc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rtc.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_sdio.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_sdio.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_spi.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_syscfg.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_syscfg.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_tim.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_tim.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_usart.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_usart.c + + + STM32F2xx_StdPeriph_Driver/stm32f2xx_wwdg.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_wwdg.c + + + STM32_EVAL/stm322xg_eval.c + 1 + PARENT-4-PROJECT_LOC/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval.c + + + STM32_EVAL/stm322xg_eval_fsmc_sram.c + 1 + PARENT-4-PROJECT_LOC/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_sram.c + + + STM32_EVAL/stm322xg_eval_ioe.c + 1 + PARENT-4-PROJECT_LOC/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_ioe.c + + + STM32_EVAL/stm322xg_eval_lcd.c + 1 + PARENT-4-PROJECT_LOC/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_lcd.c + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/main.c + + + User/stm32f2xx_it.c + 1 + PARENT-2-PROJECT_LOC/stm32f2xx_it.c + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/STM322xG-EVAL.board.launch b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/STM322xG-EVAL.board.launch new file mode 100644 index 000000000..ace9b6343 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/STM322xG-EVAL.board.launch @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/TASKING/stm32f2xx.lsl b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/TASKING/stm32f2xx.lsl new file mode 100644 index 000000000..0e4a7f354 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/STM322xG-EVAL/TASKING/stm32f2xx.lsl @@ -0,0 +1,221 @@ +//////////////////////////////////////////////////////////////////////////// +// +// File : stm32f2xx.lsl +// +// Version : @(#)stm32f2xx.lsl 1.1 10/11/03 +// +// Description : LSL file for the STMicroelectronics STM32F2xx +// +// Copyright 2010 Altium BV +// +// Macros specific to control this LSL file +// +// __MEMORY Define this macro to suppress definition of on-chip +// memory. Must be defined when you want to define on-chip +// in your project's LSL file. +// __FLASH_SIZE Specifies the size of flash memory to be allocated +// __SRAM_SIZE Specifies the size of the SRAM memory to be allocated +// __NO_DEFAULT_AUTO_VECTORS +// When enabled the interrup vector table will not be +// generated +// __COPY_VECTOR_TABLE Define this macro to enable copying the vector table +// at startup from ROM to RAM +// __VECTOR_TABLE_RAM_COPY +// Define this macro to enable copying the vector table +// at startup from ROM to RAM. It is also required to +// define the macro __VECTOR_TABLE_RAM_SPACE +// __VECTOR_TABLE_RAM_SPACE +// Define size of the RAM space for the vector table when +// it is copied from ROM to RAM +// __VECTOR_TABLE_ROM_ADDR +// Specify the vector table address in ROM +// __VECTOR_TABLE_RAM_ADDR +// Specify the vector table address in RAM when the the +// it is copied from ROM to RAM (__COPY_VECTOR_TABLE) +// +// See arm_arch.lsl for more available macros. +// +// Notes: +// In the STM32F2xx, 3 different boot modes can be selected +// - User Flash memory is selected as boot space +// - SystemMemory is selected as boot space +// - Embedded SRAM is selected as boot space +// +// This aliases the physical memory associated with each boot mode to Block +// 000 (0x00000000 boot memory). Even when aliased in the boot memory space, +// the related memory (Flash memory or SRAM) is still accessible at its +// original memory space. +// +//////////////////////////////////////////////////////////////////////////// + +#ifndef __NO_DEFAULT_AUTO_VECTORS +// Suppress the vectors as defined arm_arch.lsl, because we define our +// own vectors for CMIS +#define __CMSIS_VECTORS 1 +#define __NO_DEFAULT_AUTO_VECTORS 1 +#define __NR_OF_VECTORS 97 +#endif + +#ifndef __VECTOR_TABLE_ROM_ADDR +# define __VECTOR_TABLE_ROM_ADDR 0x08000000 +#endif + +#ifndef __VECTOR_TABLE_RAM_ADDR +# define __VECTOR_TABLE_RAM_ADDR 0x00000000 +#endif + + +#ifndef __STACK +# define __STACK 4k +#endif + +#ifndef __HEAP +# define __HEAP 2k +#endif + +#include + +// +// If no memory is defined yet use the following memory settings +// +#ifndef __MEMORY + +// Specify default size for Flash and SRAM +#ifndef __FLASH_SIZE +# define __FLASH_SIZE 1024k +#endif +#ifndef __SRAM_SIZE +# define __SRAM_SIZE 128k +#endif + +memory STM32F2xx_Flash +{ + mau = 8; + type = rom; + size = __FLASH_SIZE; + map ( size = __FLASH_SIZE, dest_offset=0x08000000, dest=bus:ARM:local_bus); +} + +memory STM32F2xx_SRAM +{ + mau = 8; + type = ram; + size = __SRAM_SIZE; + map ( size = __SRAM_SIZE, dest_offset=0x20000000, dest=bus:ARM:local_bus); +} + +#endif /* __MEMORY */ + + +// +// Define the vector table for CMSIS +// +#ifdef __CMSIS_VECTORS +section_setup ::linear +{ + // vector table with handler addresses + vector_table "vector_table" ( vector_size = 4, size = __NR_OF_VECTORS, run_addr = __VECTOR_TABLE_ROM_ADDR, + template = ".text.handler_address", + template_symbol = "_lc_vector_handler", + vector_prefix = "_vector_", + fill = loop, + no_inline + ) + { + vector ( id = 0, fill = "_lc_ub_stack" ); // Top of Stack + vector ( id = 1, fill = "_START" ); // Reset Handler + vector ( id = 2, optional, fill = "NMI_Handler" ); // NMI Handler + vector ( id = 3, optional, fill = "HardFault_Handler" ); // Hard Fault Handler + vector ( id = 4, optional, fill = "MemManage_Handler" ); // MPU Fault Handler + vector ( id = 5, optional, fill = "BusFault_Handler" ); // Bus Fault Handler + vector ( id = 6, optional, fill = "UsageFault_Handler" ); // Usage Fault Handler + vector ( id = 11, optional, fill = "SVC_Handler" ); // SVCall Handler + vector ( id = 12, optional, fill = "DebugMon_Handler" ); // Debug Monitor Handler + vector ( id = 14, optional, fill = "PendSV_Handler" ); // PendSV Handler + vector ( id = 15, optional, fill = "SysTick_Handler" ); // SysTick Handler + + // External Interrupts : + vector ( id = 16, optional, fill = "WWDG_IRQHandler" ); // Window Watchdog + vector ( id = 17, optional, fill = "PVD_IRQHandler" ); // PVD through EXTI Line detect + vector ( id = 18, optional, fill = "TAMPER_STAMP_IRQHandler" ); // Tamper amd TimeStanp through EXTI + vector ( id = 19, optional, fill = "RTC_WKUP_IRQHandler" ); // RTC Wakeup through the EXTI line + vector ( id = 20, optional, fill = "FLASH_IRQHandler" ); // Flash global interrupt + vector ( id = 21, optional, fill = "RCC_IRQHandler" ); // RCC global interrupt + vector ( id = 22, optional, fill = "EXTI0_IRQHandler" ); // EXTI Line 0 interrupt + vector ( id = 23, optional, fill = "EXTI1_IRQHandler" ); // EXTI Line 1 interrupt + vector ( id = 24, optional, fill = "EXTI2_IRQHandler" ); // EXTI Line 2 interrupt + vector ( id = 25, optional, fill = "EXTI3_IRQHandler" ); // EXTI Line 3 interrupt + vector ( id = 26, optional, fill = "EXTI4_IRQHandler" ); // EXTI Line 4 interrupt + vector ( id = 27, optional, fill = "DMA1_Stream0_IRQHandler" ); // DMA1 Stream 0 interrupt + vector ( id = 28, optional, fill = "DMA1_Stream1_IRQHandler" ); // DMA1 Stream 1 interrupt + vector ( id = 29, optional, fill = "DMA1_Stream2_IRQHandler" ); // DMA1 Stream 2 interrupt + vector ( id = 30, optional, fill = "DMA1_Stream3_IRQHandler" ); // DMA1 Stream 3 interrupt + vector ( id = 31, optional, fill = "DMA1_Stream4_IRQHandler" ); // DMA1 Stream 4 interrupt + vector ( id = 32, optional, fill = "DMA1_Stream5_IRQHandler" ); // DMA1 Stream 5 interrupt + vector ( id = 33, optional, fill = "DMA1_Stream6_IRQHandler" ); // DMA1 Stream 6 interrupt + vector ( id = 34, optional, fill = "ADC_IRQHandler" ); // ADC_IRQHandler interrupts + vector ( id = 35, optional, fill = "CAN1_TX_IRQHandler" ); // CAN1 TX interrupts + vector ( id = 36, optional, fill = "CAN1_RX0_IRQHandler" ); // CAN1 RX0 interrupts + vector ( id = 37, optional, fill = "CAN1_RX1_IRQHandler" ); // CAN1 RX1 interrupt + vector ( id = 38, optional, fill = "CAN1_SCE_IRQHandler" ); // CAN1 SCE interrupt + vector ( id = 39, optional, fill = "EXTI9_5_IRQHandler" ); // EXTI Line 9..5 interrupts + vector ( id = 40, optional, fill = "TIM1_BRK_TIM9_IRQHandler" ); // TIM1 Break irq and TIM9 global interrupt + vector ( id = 41, optional, fill = "TIM1_UP_TIM10_IRQHandler" ); // TIM1 Update irq and TIM10 global interrupt + vector ( id = 42, optional, fill = "TIM1_TRG_COM_TIM11_IRQHandler" ); // TIM1 Trigger and Commutation irqs and TIM10 global irq + vector ( id = 43, optional, fill = "TIM1_CC_IRQHandler" ); // TIM1 Capture Compare + vector ( id = 44, optional, fill = "TIM2_IRQHandler" ); // TIM2 global interrupt + vector ( id = 45, optional, fill = "TIM3_IRQHandler" ); // TIM3 global interrupt + vector ( id = 46, optional, fill = "TIM4_IRQHandler" ); // TIM4 global interrupt + vector ( id = 47, optional, fill = "I2C1_EV_IRQHandler" ); // I2C1 Event + vector ( id = 48, optional, fill = "I2C1_ER_IRQHandler" ); // I2C1 Error + vector ( id = 49, optional, fill = "I2C2_EV_IRQHandler" ); // I2C2 Event + vector ( id = 50, optional, fill = "I2C2_ER_IRQHandler" ); // I2C2 Error + vector ( id = 51, optional, fill = "SPI1_IRQHandler" ); // SPI1 global interrupt + vector ( id = 52, optional, fill = "SPI2_IRQHandler" ); // SPI2 global interrupt + vector ( id = 53, optional, fill = "USART1_IRQHandler" ); // USART1 global interrupt + vector ( id = 54, optional, fill = "USART2_IRQHandler" ); // USART2 global interrupt + vector ( id = 55, optional, fill = "USART3_IRQHandler" ); // USART3 global interrupt + vector ( id = 56, optional, fill = "EXTI15_10_IRQHandler" ); // EXTI Line 15..10 interrupts + vector ( id = 57, optional, fill = "RTCAlarm_IRQHandler" ); // RTC Alarm through EXTI Line + vector ( id = 58, optional, fill = "OTG_FS_WKUP_IRQHandler" ); // USB On-The-Go FS Wakeup throught EXTI + vector ( id = 59, optional, fill = "TIM8_BRK_TIM12_IRQHandler" ); // TIM8 Break irq and TIM12 global irq + vector ( id = 60, optional, fill = "TIM8_UP_TIM13_IRQHandler" ); // TIM8 Update irq and TIM13 global irq + vector ( id = 61, optional, fill = "TIM8_TRG_COM_TIM14_IRQHandler" ); // TIM8 trigger and Comm. irqs and TIM14 global irq + vector ( id = 62, optional, fill = "TIM8_CC_IRQHandler" ); // TIM8 Capture Compare irq + vector ( id = 63, optional, fill = "DMA1_Stream7_IRQHandler" ); // DMA1 Stream7 global interrupt + vector ( id = 64, optional, fill = "FSMC_IRQHandler" ); // FSMC global interrupt + vector ( id = 65, optional, fill = "SDIO_IRQHandler" ); // SDIO global interrupt + vector ( id = 66, optional, fill = "TIM5_IRQHandler" ); // TIM5 global interrupt + vector ( id = 67, optional, fill = "SPI3_IRQHandler" ); // SPI3 global interrupt + vector ( id = 68, optional, fill = "UART4_IRQHandler" ); // UART4 global interrupt + vector ( id = 69, optional, fill = "UART5_IRQHandler" ); // UART5 global interrupt + vector ( id = 70, optional, fill = "TIM6_DAC_IRQHandler" ); // TIM6 glbl irq, DAC1 and DAC2 underrun err irqs + vector ( id = 71, optional, fill = "TIM7_IRQHandler" ); // TIM7 global interrupt + vector ( id = 72, optional, fill = "DMA2_Stream0_IRQHandler" ); // DMA2 Stream0 global interrupt + vector ( id = 73, optional, fill = "DMA2_Stream1_IRQHandler" ); // DMA2 Stream1 global interrupt + vector ( id = 74, optional, fill = "DMA2_Stream2_IRQHandler" ); // DMA2 Stream2 global interrupt + vector ( id = 75, optional, fill = "DMA2_Stream3_IRQHandler" ); // DMA2 Stream3 global interrupt + vector ( id = 76, optional, fill = "DMA2_Stream4_IRQHandler" ); // DMA2 Stream4 global interrupt + vector ( id = 77, optional, fill = "ETH_IRQHandler" ); // Ethernet global interrupt + vector ( id = 78, optional, fill = "ETH_WKUP_IRQHandler" ); // Ethernet Wakeup through EXTI line irq + vector ( id = 79, optional, fill = "CAN2_TX_IRQHandler" ); // CAN2 TX interrupts + vector ( id = 80, optional, fill = "CAN2_RX0_IRQHandler" ); // CAN2 RX0 interrupts + vector ( id = 81, optional, fill = "CAN2_RX1_IRQHandler" ); // CAN2 RX1 interrupt + vector ( id = 82, optional, fill = "CAN2_SCE_IRQHandler" ); // CAN2 SCE interrupt + vector ( id = 83, optional, fill = "OTG_FS_IRQHandler" ); // USB On The Go FS global interrupt + vector ( id = 84, optional, fill = "DMA2_Stream5_IRQHandler" ); // DMA2 Stream5 global interrupt + vector ( id = 85, optional, fill = "DMA2_Stream6_IRQHandler" ); // DMA2 Stream6 global interrupt + vector ( id = 86, optional, fill = "DMA2_Stream7_IRQHandler" ); // DMA2 Stream7 global interrupt + vector ( id = 87, optional, fill = "USART6_IRQHandler" ); // USART6 global interrupt + vector ( id = 88, optional, fill = "I2C3_EV_IRQHandler" ); // I2C3 event interrupt + vector ( id = 89, optional, fill = "I2C3_ER_IRQHandler" ); // I2C3 error interrupt + vector ( id = 90, optional, fill = "OTG_HS_EP1_OUT_IRQHandler" ); // USB On The Go HS End Point 1 OUT global irq + vector ( id = 91, optional, fill = "OTG_HS_EP1_IN_IRQHandler" ); // USB On The Go HS End Point 1 In global irq + vector ( id = 92, optional, fill = "OTG_HS_WKUP_IRQHandler" ); // USB On The Go HS Wakeup through EXTI irq + vector ( id = 93, optional, fill = "OTG_HS_IRQHandler" ); // USB On The Go HS global interrupt + vector ( id = 94, optional, fill = "DCMI_IRQHandler" ); // DCMI global interrupt + vector ( id = 95, optional, fill = "CRYP_IRQHandler" ); // CRYP crypto global interrupt + vector ( id = 96, optional, fill = "HASH_RNG_IRQHandler" ); // Hash and Rng global interrupt + } +} +#endif /* __CMSIS_VECTORS */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/readme.txt new file mode 100644 index 000000000..f0c3d5c7a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TASKING/readme.txt @@ -0,0 +1,61 @@ +/** + @page tasking TASKING Project Template for STM32F2xx devices + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This sub-directory contains all the user-modifiable files needed to + * create a new project linked with the STM32F2xx Standard Peripherals + * Library and working with TASKING VX-toolset for ARM Cortex-M. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + + @par Directory contents + + - .cproject/.project: A pre-configured project file with the provided library + structure that produces an executable image with TASKING. + +- TASKING : This folder contains + + - stm32f2xx.lsl : This file is TASKING linker script that contains the + STM32F2xx vector table and used to place program code (readonly) + in internal FLASH and data (readwrite, Stack and Heap)in + internal SRAM. + You can customize this file to your need. + + + @par How to use it ? + + - Open TASKING toolchain. + - Click on File->Import, select General->'Existing Projects into Workspace' + and then click "Next". + - Browse to TASKING workspace directory and select the project: + - STM322xG-EVAL: to configure the project for STM32F2xx devices. + - Rebuild all project files: Select the project in the "Project explorer" + window then click on Project->build project menu. + - Run program: Select the project in the "Project explorer" window then click + Run->Debug (F11) + + @note The needed define symbols for this config are already declared in the + preprocessor section: USE_STM322xG_EVAL, STM32F2XX, USE_STDPERIPH_DRIVER + + + *

© COPYRIGHT STMicroelectronics

+ */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/.cproject b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/.cproject new file mode 100644 index 000000000..d6e8081fa --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/.cproject @@ -0,0 +1,441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/.project b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/.project new file mode 100644 index 000000000..d1c88377e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/.project @@ -0,0 +1,295 @@ + + + STM322xG_EVAL + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?children? + ?name?=outputEntries\|?children?=?name?=entry\\\\\\\|\\\|\|| + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/STM322xG_EVAL/Debug} + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + CMSIS + 2 + PARENT-4-PROJECT_LOC/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/.metadata/Link + + + STM322xG_EVAL + 2 + virtual:/virtual + + + StdPeriph_Driver + 2 + PARENT-4-PROJECT_LOC/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/.metadata/Link + + + TrueSTUDIO + 2 + PARENT-4-PROJECT_LOC/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/.metadata/Link + + + User + 2 + PARENT-4-PROJECT_LOC/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/.metadata/Link + + + CMSIS/system_stm32f2xx.c + 1 + PARENT-2-PROJECT_LOC/system_stm32f2xx.c + + + STM322xG_EVAL/stm322xg_eval.c + 1 + PARENT-4-PROJECT_LOC/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval.c + + + STM322xG_EVAL/stm322xg_eval_fsmc_sram.c + 1 + PARENT-4-PROJECT_LOC/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_sram.c + + + STM322xG_EVAL/stm322xg_eval_ioe.c + 1 + PARENT-4-PROJECT_LOC/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_ioe.c + + + STM322xG_EVAL/stm322xg_eval_lcd.c + 1 + PARENT-4-PROJECT_LOC/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_lcd.c + + + StdPeriph_Driver/STM32F2xx_adc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_adc.c + + + StdPeriph_Driver/STM32F2xx_can.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_can.c + + + StdPeriph_Driver/STM32F2xx_crc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_crc.c + + + StdPeriph_Driver/STM32F2xx_dac.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_dac.c + + + StdPeriph_Driver/STM32F2xx_dbgmcu.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_dbgmcu.c + + + StdPeriph_Driver/STM32F2xx_dma.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_dma.c + + + StdPeriph_Driver/STM32F2xx_exti.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_exti.c + + + StdPeriph_Driver/STM32F2xx_flash.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_flash.c + + + StdPeriph_Driver/STM32F2xx_fsmc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_fsmc.c + + + StdPeriph_Driver/STM32F2xx_gpio.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_gpio.c + + + StdPeriph_Driver/STM32F2xx_i2c.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_i2c.c + + + StdPeriph_Driver/STM32F2xx_iwdg.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_iwdg.c + + + StdPeriph_Driver/STM32F2xx_pwr.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_pwr.c + + + StdPeriph_Driver/STM32F2xx_rcc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_rcc.c + + + StdPeriph_Driver/STM32F2xx_rtc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_rtc.c + + + StdPeriph_Driver/STM32F2xx_sdio.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_sdio.c + + + StdPeriph_Driver/STM32F2xx_spi.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_spi.c + + + StdPeriph_Driver/STM32F2xx_tim.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_tim.c + + + StdPeriph_Driver/STM32F2xx_usart.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_usart.c + + + StdPeriph_Driver/STM32F2xx_wwdg.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/STM32F2xx_wwdg.c + + + StdPeriph_Driver/misc.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/misc.c + + + StdPeriph_Driver/stm32f2xx_cryp.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp.c + + + StdPeriph_Driver/stm32f2xx_cryp_aes.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_aes.c + + + StdPeriph_Driver/stm32f2xx_cryp_des.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_des.c + + + StdPeriph_Driver/stm32f2xx_cryp_tdes.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_tdes.c + + + StdPeriph_Driver/stm32f2xx_dcmi.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dcmi.c + + + StdPeriph_Driver/stm32f2xx_hash.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash.c + + + StdPeriph_Driver/stm32f2xx_hash_md5.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash_md5.c + + + StdPeriph_Driver/stm32f2xx_hash_sha1.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash_sha1.c + + + StdPeriph_Driver/stm32f2xx_rng.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rng.c + + + StdPeriph_Driver/stm32f2xx_syscfg.c + 1 + PARENT-4-PROJECT_LOC/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_syscfg.c + + + TrueSTUDIO/startup_stm32f2xx.s + 1 + PARENT-4-PROJECT_LOC/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/TrueSTUDIO/startup_stm32f2xx.s + + + User/STM32F2xx_it.c + 1 + PARENT-4-PROJECT_LOC/Project/STM32F2xx_StdPeriph_Template/STM32F2xx_it.c + + + User/main.c + 1 + PARENT-4-PROJECT_LOC/Project/STM32F2xx_StdPeriph_Template/main.c + + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/.settings/com.atollic.truestudio.debug.hardware_device.prefs b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/.settings/com.atollic.truestudio.debug.hardware_device.prefs new file mode 100644 index 000000000..b0b3d39dd --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/.settings/com.atollic.truestudio.debug.hardware_device.prefs @@ -0,0 +1,12 @@ +#Thu Nov 17 16:06:11 GMT+01:00 2011 +BOARD=STM322xG-EVAL +CODE_LOCATION=FLASH +ENDIAN=Little-endian +MCU=STM32F207IG +MCU_VENDOR=STMicroelectronics +MODEL=Lite +PROBE=ST-LINK +PROJECT_FORMAT_VERSION=2 +TARGET=STMicroelectronics\u00AE STM32\u2122 +VERSION=2.2.0 +eclipse.preferences.version=1 diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/stm32_flash.ld b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/stm32_flash.ld new file mode 100644 index 000000000..9e297a396 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/STM322xG_EVAL/stm32_flash.ld @@ -0,0 +1,171 @@ +/* +***************************************************************************** +** +** File : stm32_flash.ld +** +** Abstract : Linker script for STM32F207IG Device with +** 1MByte FLASH, 128KByte SRAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** Environment : Atollic TrueSTUDIO(R) +** +** Distribution: The file is distributed 揳s is,� without any warranty +** of any kind. +** +** (c)Copyright Atollic AB. +** You may use this file as-is or modify it according to the needs of your +** project. Distribution of this file (unmodified or modified) is not +** permitted. Atollic AB permit registered Atollic TrueSTUDIO(R) users the +** rights to distribute the assembled, compiled & linked contents of this +** file as part of an application binary file, provided that it is built +** using the Atollic TrueSTUDIO(R) toolchain. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20020000; /* end of 128K SRAM */ + +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0; /* required amount of heap */ +_Min_Stack_Size = 0x200; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K + MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(.fini_array*)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = .; + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + PROVIDE ( end = _ebss ); + PROVIDE ( _end = _ebss ); + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(4); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >RAM + + /* MEMORY_bank1 section, code must be located here explicitly */ + /* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */ + .memory_b1_text : + { + *(.mb1text) /* .mb1text sections (code) */ + *(.mb1text*) /* .mb1text* sections (code) */ + *(.mb1rodata) /* read-only data (constants) */ + *(.mb1rodata*) + } >MEMORY_B1 + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/note.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/note.txt new file mode 100644 index 000000000..851faae5c --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/note.txt @@ -0,0 +1,66 @@ +/** + @page note Note for TrueSTUDIO + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** + * @file note.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the needed step to use "printf" with TrueSTUDIO + * toolchain. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + +The C runtime library include many functions, including some that typically +handle I/O. The I/O related runtime functions include printf(), fopen(), fclose(), +and many others. + +It is common to redirect the I/O from these functions to the actual embedded +platform, such as redirecting printf() output to an LCD display or a serial cable, +or to redirect file operations like fopen() and fclose() to some Flash file +system middleware. + +The free Lite version of TrueSTUDIO do not support I/O redirection, and instead +have do-nothing stubs compiled into the C runtime library. + +To support printf() redirection in the professional version, you should do the following: + - Open TrueSTUDIO professional and load your project. + - In the Project explorer, Right click on the project and select New->Other... + - Expand System calls + - Select Minimal System Calls Implementation and click next. + - Click on Finish and verify that "syscalls.c" is added to your project. + - Add the following code in the _write() function in "syscalls.c". + + @code + /*****************************************/ + int Index; + + for (Index = 0; Index < len; Index++) + { + __io_putchar( *ptr++ ); + } + + return len; + /*****************************************/ + @endcode + + - Finally, Rebuild your project. + + + *

© COPYRIGHT STMicroelectronics

+ */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/readme.txt b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/readme.txt new file mode 100644 index 000000000..8aa6a7ef6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/readme.txt @@ -0,0 +1,64 @@ +/** + @page truestudio TrueSTUDIO Project Template for STM32F2xx devices + + @verbatim + ******************** (C) COPYRIGHT 2012 STMicroelectronics ******************* + * @file readme.txt + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This sub-directory contains all the user-modifiable files needed to + * create a new project linked with the STM32F2xx Standard Peripherals + * Library and working with TrueSTUDIO software toolchain. + ****************************************************************************** + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + @endverbatim + + @par Directory contents + + - .cproject/.project: A pre-configured project file with the provided library + structure that produces an executable image with TrueSTUDIO. + + - stm32_flash.ld: This file is the TrueSTUDIO linker script used to + place program code (readonly) in internal FLASH and + data (readwrite, Stack and Heap)in internal SRAM. + You can customize this file to your need. + + - stm32f2xx_flash_extsram.ld: This file is the TrueSTUDIO linker script used to + place program code (readonly) in internal FLASH and + data (readwrite, Stack and Heap)in external SRAM. + You can customize this file to your need. + + @par How to use it ? + + - Open the TrueSTUDIO toolchain. + - Click on File->Switch Workspace->Other and browse to TrueSTUDIO workspace + directory. + - Click on File->Import, select General->'Existing Projects into Workspace' + and then click "Next". + - Browse to the TrueSTUDIO workspace directory and select the project: + - STM322xG_EVAL: to configure the project for STM32F2xx devices. + - Rebuild all project files: Select the project in the "Project explorer" + window then click on Project->build project menu. + - Run program: Select the project in the "Project explorer" window then click + Run->Debug (F11) + + @note The needed define symbols for this config are already declared in the + preprocessor section: USE_STM322xG_EVAL, STM32F2XX, USE_STDPERIPH_DRIVER + + + *

© COPYRIGHT STMicroelectronics

+ */ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/stm32f2xx_flash_extsram.ld b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/stm32f2xx_flash_extsram.ld new file mode 100644 index 000000000..636f721c1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/TrueSTUDIO/stm32f2xx_flash_extsram.ld @@ -0,0 +1,171 @@ +/* +***************************************************************************** +** +** File : stm32_flash.ld +** +** Abstract : Linker script for STM32F207IG Device with +** 1MByte FLASH, 128KByte SRAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** Environment : Atollic TrueSTUDIO(R) +** +** Distribution: The file is distributed 揳s is,� without any warranty +** of any kind. +** +** (c)Copyright Atollic AB. +** You may use this file as-is or modify it according to the needs of your +** project. Distribution of this file (unmodified or modified) is not +** permitted. Atollic AB permit registered Atollic TrueSTUDIO(R) users the +** rights to distribute the assembled, compiled & linked contents of this +** file as part of an application binary file, provided that it is built +** using the Atollic TrueSTUDIO(R) toolchain. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x64100000; /* end of 1M SRAM */ + +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0; /* required amount of heap */ +_Min_Stack_Size = 0x200; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1M + RAM (xrw) : ORIGIN = 0x64000000, LENGTH = 1M + MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(.fini_array*)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = .; + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + PROVIDE ( end = _ebss ); + PROVIDE ( _end = _ebss ); + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(4); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >RAM + + /* MEMORY_bank1 section, code must be located here explicitly */ + /* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */ + .memory_b1_text : + { + *(.mb1text) /* .mb1text sections (code) */ + *(.mb1text*) /* .mb1text* sections (code) */ + *(.mb1rodata) /* read-only data (constants) */ + *(.mb1rodata*) + } >MEMORY_B1 + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/main.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/main.c new file mode 100644 index 000000000..44b8bfc38 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/main.c @@ -0,0 +1,166 @@ +/** + ****************************************************************************** + * @file Project/STM32F2xx_StdPeriph_Template/main.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main program body + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/** @addtogroup Template_Project + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define MESSAGE1 " STM32F2xx " +#define MESSAGE2 " Device running on " +#define MESSAGE3 " STM322xG-EVAL " + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +static __IO uint32_t TimingDelay; + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + RCC_ClocksTypeDef RCC_Clocks; + + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f2xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f2xx.c file + */ + + /* SysTick end of count event each 10ms */ + RCC_GetClocksFreq(&RCC_Clocks); + SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); + + /* Initialize LEDs and LCD available on STM322xG-EVAL board *****************/ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Initialize the LCD */ + STM322xG_LCD_Init(); + + /* Display message on STM322xG-EVAL LCD *************************************/ + /* Clear the LCD */ + LCD_Clear(White); + + /* Set the LCD Back Color */ + LCD_SetBackColor(Blue); + /* Set the LCD Text Color */ + LCD_SetTextColor(White); + LCD_DisplayStringLine(LINE(0), (uint8_t *)MESSAGE1); + LCD_DisplayStringLine(LINE(1), (uint8_t *)MESSAGE2); + LCD_DisplayStringLine(LINE(2), (uint8_t *)MESSAGE3); + + /* Turn on LEDs available on STM322xG-EVAL **********************************/ + STM_EVAL_LEDOn(LED1); + STM_EVAL_LEDOn(LED2); + STM_EVAL_LEDOn(LED3); + STM_EVAL_LEDOn(LED4); + + /* Add your application code here + */ + + /* Infinite loop */ + while (1) + { + /* Toggle LD4 */ + STM_EVAL_LEDToggle(LED4); + + /* Insert 50 ms delay */ + Delay(5); + + /* Toggle LD2 */ + STM_EVAL_LEDToggle(LED2); + + /* Insert 50 ms delay */ + Delay(5); + } +} + +/** + * @brief Inserts a delay time. + * @param nTime: specifies the delay time length, in 10 ms. + * @retval None + */ +void Delay(__IO uint32_t nTime) +{ + TimingDelay = nTime; + + while(TimingDelay != 0); +} + +/** + * @brief Decrements the TimingDelay variable. + * @param None + * @retval None + */ +void TimingDelay_Decrement(void) +{ + if (TimingDelay != 0x00) + { + TimingDelay--; + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/main.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/main.h new file mode 100644 index 000000000..0438a1aaa --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/main.h @@ -0,0 +1,47 @@ +/** + ****************************************************************************** + * @file Project/STM32F2xx_StdPeriph_Template/main.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Header for main.c module + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm322xg_eval.h" +#include "stm322xg_eval_lcd.h" +#include + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void TimingDelay_Decrement(void); +void Delay(__IO uint32_t nTime); + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/stm32f2xx_conf.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/stm32f2xx_conf.h new file mode 100644 index 000000000..837d2a778 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/stm32f2xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file Project/STM32F2xx_StdPeriph_Template/stm32f2xx_conf.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_CONF_H +#define __STM32F2xx_CONF_H + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f2xx_adc.h" +#include "stm32f2xx_can.h" +#include "stm32f2xx_crc.h" +#include "stm32f2xx_cryp.h" +#include "stm32f2xx_dac.h" +#include "stm32f2xx_dbgmcu.h" +#include "stm32f2xx_dcmi.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_exti.h" +#include "stm32f2xx_flash.h" +#include "stm32f2xx_fsmc.h" +#include "stm32f2xx_hash.h" +#include "stm32f2xx_gpio.h" +#include "stm32f2xx_i2c.h" +#include "stm32f2xx_iwdg.h" +#include "stm32f2xx_pwr.h" +#include "stm32f2xx_rcc.h" +#include "stm32f2xx_rng.h" +#include "stm32f2xx_rtc.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_spi.h" +#include "stm32f2xx_syscfg.h" +#include "stm32f2xx_tim.h" +#include "stm32f2xx_usart.h" +#include "stm32f2xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F2xx_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/stm32f2xx_it.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/stm32f2xx_it.c new file mode 100644 index 000000000..e34dd794a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/stm32f2xx_it.c @@ -0,0 +1,168 @@ +/** + ****************************************************************************** + * @file Project/STM32F2xx_StdPeriph_Template/stm32f2xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx_it.h" +#include "main.h" + +/** @addtogroup Template_Project + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + TimingDelay_Decrement(); +} + +/******************************************************************************/ +/* STM32F2xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f2xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles PPP interrupt request. + * @param None + * @retval None + */ +/*void PPP_IRQHandler(void) +{ +}*/ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/stm32f2xx_it.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/stm32f2xx_it.h new file mode 100644 index 000000000..ab94b737a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/stm32f2xx_it.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file Project/STM32F2xx_StdPeriph_Template/stm32f2xx_it.h + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F2xx_IT_H +#define __STM32F2xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F2xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/system_stm32f2xx.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/system_stm32f2xx.c new file mode 100644 index 000000000..482a20d13 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Template/system_stm32f2xx.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file system_stm32f2xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 13-April-2012 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F2xx devices, + * and is generated by the clock configuration tool + * "STM32f2xx_Clock_Configuration_V1.0.0.xls" + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f2xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f2xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f2xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F2xx device revision | Rev B and Y + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 120000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 25000000 + *----------------------------------------------------------------------------- + * PLL_M | 25 + *----------------------------------------------------------------------------- + * PLL_N | 240 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 5 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 3 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f2xx_system + * @{ + */ + +/** @addtogroup STM32F2xx_System_Private_Includes + * @{ + */ + +#include "stm32f2xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Defines + * @{ + */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM322xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 25 +#define PLL_N 240 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 5 + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Variables + * @{ + */ + + uint32_t SystemCoreClock = 120000000; + + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F2xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f2xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f2xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f2xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f2xx.s before jump to main. + * This function configures the external SRAM mounted on STM322xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xa2aa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xf3ff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00000cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa800a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc00f; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010400; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; +/* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; +*/ + +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Release_Notes.html b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Release_Notes.html new file mode 100644 index 000000000..93880a9e0 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Release_Notes.html @@ -0,0 +1,570 @@ + + + + + +Release Notes for STM32F2xx Standard Peripherals Library + + + + + +
+


+

+
+ + + + + + +
+ + + + + + +
+

Release +Notes for STM32F2xx Standard Peripherals Library

+

Copyright 2012 STMicroelectronics

+

+
+

 

+ + + + + + +
+

Contents

+
    +
  1. STM32F2xx Standard Peripheral +Library update History
  2. +
  3. License
  4. +
+

STM32F2xx Standard +Peripherals Library update History

V1.1.0 / 13-April-2012

Main +Changes

+
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • STM32F2xx HAL and BSP components update (for more details refer to each component's release notes):
    • CMSIS drivers: update directory structure to be compliant with CMSIS V2.1, full API compatibility maintained vs. V1.0.0
    • Standard Peripherals Drivers: miscellaneous bug fix and enhancement
    • STM322xG_EVAL board drivers: update drivers architecture and folder organization, full API compatibility maintained vs. V4.6.2 (and V4.6.1)
  • Template projects: 
    • Update to be in line with changes made on latest version of the STM32F2xx CMSIS and STM322xG_EVAL drivers
    • Update to use the latest version of the supported toolchains
  • All +examples: 
    • Update to be in line with latest version of STM322xG_EVAL board drivers
    • Miscellaneous bug fix and enhancement
    • +For more details refer to the example's release notes

+

Contents

+

Development Toolchains and Compilers

+
  • IAR Embedded Workbench for ARM (EWARM) toolchain V6.30.7 + J-Link
  • RealView Microcontroller Development Kit (MDK-ARM) toolchain V4.23 + ULINK
  • Raisonance IDE RIDE7 (RIDE) toolchain (RIDE7 IDE:7.36, RKitARM for RIDE7:1.38) + Rlink Pro
  • Atollic TrueSTUDIO toolchain V3.0.0 + ST-LINK
  • TASKING VX-toolset for ARM Cortex-M V4.2r1 + ST-LINK

V1.0.0 / 18-April-2011

Main +Changes

+
  • First official release for STM32F2xx devices

+

Contents

+

Development Toolchains and Compilers

+
  • IAR Embedded Workbench for ARM (EWARM) toolchain V6.10.5
  • RealView Microcontroller Development Kit (MDK-ARM) toolchain V4.20
  • Raisonance IDE RIDE7 (RIDE) toolchain (RIDE7 IDE:7.30.10, RKitARM for RIDE7:1.31.10)
  • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain V2.0.1
  • TASKING VX-toolset for ARM Cortex-M V3.2r1

+ +

License

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless +required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See +the License for the specific language governing permissions and +limitations under the License.
+ +
+
+
+

For + complete documentation on STM32 + Microcontrollers visit www.st.com/STM32
+

+
+

+
+
+

 

+
+ \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/Release_Notes.html b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/Release_Notes.html new file mode 100644 index 000000000..95520c402 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/Release_Notes.html @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + Release Notes for STM32 Evaluation Board Common Drivers + + + + + + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
+

Back to Release page

+
+

Release +Notes for STM32 Evaluation Board Common Drivers

+

Copyright +2012 STMicroelectronics

+

+
+

 

+ + + + + + +
+

Contents

+
    +
  1. STM32 Evaluation Board Common Drivers +update History
  2. +
  3. License
  4. +
+ + +

STM32 Evaluation Board Common Drivers update History

V5.0.2 / 05-March-2012

+

Main +Changes

+ +
  • All source files: license disclaimer text update and add link to the License file on ST Internet.

V5.0.1 / 28-December-2011

Main +Changes

+
  • All source files: update disclaimer to add reference to the new license agreement

V5.0.0 / 30-September-2011

+

Main +Changes

+ +
  • Update STM32 Evaluation Board Drivers architecture and folder organization, full API compatibility maintained vs. V4.6.2
    • All the HW drivers required for each board are provided within this board folder. The concerned drivers are:
      • stm32_eval_i2c_ee.c\.h: I2C M24CXX EEPROM memory driver
      • stm32_eval_i2c_tsensor.c\.h: I2C LM75 temperature sensor driver
      • stm32_eval_spi_flash.c\.h: SPI M25Pxxx FLASH memory driver
      • stm32_eval_sdio_sd.c\.h: SDIO SD Card memory driver
      • stm32_eval_spi_sd.c\.h: SPI SD Card memory driver 
      • These drivers were moved from \Common to \STM32XXX_EVAL folder(s)
    • \Common folder contains only drivers for the fonts and log module used by the LCD driver
    • stm32_eval.c\.h files removed, as consequence you need to perform the following update on your project configuration  (based on EVAL drivers V4.6.2):
      • In the project files, add your EVAL board driver source file (ex. "stm3210c_eval.c") instead of "stm32_eval.c"
      • Include your EVAL board driver header file (ex. #include "stm3210c_eval.h") instead of #include "stm32_eval.h"
      • If +you are using the EVAL board's LCD, you need to add the include of +the LCD header file (ex: #include "stm3210c_eval_lcd.h")
        • If +you are using the LCD log module, after copying it to the application +folder you have to edit it and update the name of the LCD header file. For more details, refer to the lcd_log_conf_template.h driver description.

V4.6.2 / 22-July-2011

+

Main +Changes

+ +
  • STM3210C_EVAL
    • stm3210c_eval_lcd.c: update to support new LCD AM240320D5TOQW01H (controller ILI9325)
  • STM322xG-EVAL
    • stm322xg_eval.h: fix value of the SDIO clock divider (SDIO_TRANSFER_CLK_DIV constant) to 2 instead of 0
    • stm322xg_eval_lcd.c: increase FSMC AddressSetupTime value from 1 to 3 to be compliant with some LCD access timing
    • stm322xg_eval_audio_codec.c: update Codec_CtrlInterface_Init() and Codec_GPIO_Init() functions to not reconfigure the I2C peripheral if it's already enabled and configured (to +avoid configuring the I2C twice when using both Audio codec and IO +Expander drivers in the same application).

V4.6.1 / 18-April-2011

+

Main +Changes

+ +
  • Update some STM322xG_EVAL drivers (no change on the API) to fix warnings with TASKING C compiler.
  • Change the Release Notes name to STM32 Evaluation Board Drivers
  • stm322xg_eval.c
    • SD_LowLevel_Init(): change SDIO pins speed configuration to "GPIO_Speed_25MHz"

V4.6.0 / 11-March-2011

+

Main +Changes

+ +
  • Official version supporting STM322xG_EVAL evaluation board RevB (for STM32F2xx devices).
  • Common
    • Add +new LCD log utility drivers: The LCD Log module allows to automatically +set a header and footer on any application using the LCD display and +allows to dump user, debug and error messages by using the following +macros: LCD_ErrLog(),    LCD_UsrLog() and LCD_DbgLog().
Note: the STM322xG_EVAL board RevA was wrongly named STM3220F_EVAL

V4.5.0 / 07-March-2011

+

Main +Changes

+ +
  • stm32_eval_sdio_sd.c\.h: driver improvement
    • SD Clock increased to 24MHz to improve the data transfer performance.
    • Add +new functions to check the SDIO peripheral and SD Card status at any +time: SD_WaitReadOperation(), SD_WaitWriteOperation(). The +software sequence is little bit changed but without any impact on +driver API. For more details, refer to the stm32_eval_sdio_sd.c +driver description.
    • Add +new structure containing the SD Status register parameters. This +structure is called by the +         + SD_SendSDStatus() function.
    • Transfers mode updated
      • Read/Write Block using Polling and DMA modes
      • Read/Write Multi Blocks using DMA mode only
      • Interrupt mode removed
    • Data transfer functions are managing only fixed Block size (512-byte) 
  • STM32100B-EVAL
    • stm32100b_eval_cec.c: fix some strict ANSI-C errors
  • STM32100E-EVAL
    • stm32100e_eval_cec.c: fix some strict ANSI-C errors
+

V4.4.0 / 31-December-2010

+

Main +Changes

+ +
  • Add new directory for STM32L152-EVAL board containing the following files:
    • stm32l152_eval.h/.c, stm32l152_eval_lcd.h/.c, stm32l152_eval_glass_lcd.h/.c, stm32l152_eval_i2c_ee.h/.c
  • Add support for the STM32100E-EVAL Rev B: SPI FLASH CS pin "sFLASH_CS_PIN" changed from PB.02 to PE.06.
  • stm32100e_eval_lcd.h/.c: Add support for "LCD_ILI9325" LCD controller.
  • stm32100e_eval_fsmc_onenand.h/.c driver updated to correct asynchronous and synchronous read operations procedures.
    +
+ +

4.3.0 +- 10/15/2010

+
  1. General
+ +
  • I2C EEPROM, Temperature Sensor and IOE Expander drivers updated to use the DMA for read/write transfer and add more robustness
  • SD Card (SDIO) driver updated to add more robustness
  • SPI Flash and SD Card (SPI) drivers: SPI MISO pin configuration changed to Input Floating 
+ + + +
  1. Utilities
+ + + + + +
  • Add new directory for STM32100E-EVAL board containing the following files:
    • stm32100e_eval.h/.c, +stm32100e_eval_lcd.h/.c, stm32100e_eval_cec.h/.c, +stm32100e_eval_fsmc_onenand.h/.c, stm32100e_eval_fsmc_sram.h/.c, +stm32100e_eval_ioe.h/.c
      +
  • Common
    • stm32_eval_sdio_sd.c: +Update the DMA End of Transfer Check loop inside the SD_ReadBlock(), +SD_WriteBlock(), SD_ReadMultiBlocks() and SD_Write MultiBlocks().
    • stm32_eval_i2c_ee.c/.h
      +
      • Enhanced sEE_WaitEepromStandbyState() function for more robustness.
      • Enhanced Read and Write operations to manage I2C limitations.
      • Add Timeout management with user callback implementation which allows recovering from I2C bus errors.
      • Add +critical sections user callbacks allowing to disable then enable +interrupts when I2C operation require to be not interrupted.
    • stm32_eval_i2c_tsensor.c/.h
      +
      • Enhanced I2C communication functions by using DMA for registers Read and Write operations.
      • Add Timeout management with user callback implementation which allows recovering from I2C bus errors.
  • STM32100B_EVAL
    • stm32100b_eval.h: Add LM75 DMA defines.
    • stm32100b_eval_lcd.c: Change "SPI_FLASH" by "sFLASH" in LCD_DrawBMP() function.
  • STM3210B_EVAL
    • stm3210b_eval.h: Add LM75 DMA defines.
    • stm3210b_eval_lcd.c: Change "SPI_FLASH" by "sFLASH" in LCD_DrawBMP() function.
  • STM3210C_EVAL
    • stm3210c_eval.h: Add EEPROM driver Timeout define.
    • stm3210c_eval_lcd.c: Change "SPI_FLASH" by "sFLASH" in LCD_DrawBMP() function.
    • stm3210c_eval_i2c_ioe.c
      • Enhanced I2C communication functions by using DMA for registers Read and Write operations.
      • Add Timeout management with user callback implementation which allows recovering from I2C bus errors.
      • change IOE_I2C_SPEED from "400000" to "300000".
  • STM3210E_EVAL
    • stm3210e_eval.c: change "void SD_WaitForDMAEndOfTransfer(void)" to "uint32_t SD_DMAEndOfTransferStatus(void)".
    • stm3210e_eval.h: Add LM75 DMA defines.
    • stm3210e_eval_fsmc_nand.h: remove "NAND_CMD_AREA_TRUE1" define.
    • stm3210e_eval_fsmc_nand.c: Update FSMC timing in NAND_Init() function to be aligned with AN2784 application note.
    • stm3210e_eval_fsmc_nor.c
      • NOR_Init() function: add FSMC_AsynchronousWait field to FSMC_NORSRAMInitStructure 
    • stm3210e_eval_fsmc_sram.c
      +
      • Update FSMC timing in SRAM_Init() function to be aligned with AN2784 application note.
        +
      • SRAM_Init() function: add FSMC_AsynchronousWait field to FSMC_NORSRAMInitStructure 
    • stm3210e_eval_lcd.c
      • LCD_FSMCConfig() function: add FSMC_AsynchronousWait field to FSMC_NORSRAMInitStructure 
+ + +

4.2.0 +- 04/16/2010

+
  1. General
+ +
  • I2C EEPROM driver +update to use the DMA to +perform data transfer to/from EEPROM memory.
+ +
  1. Utilities
+
  • STM32_EVAL
+
    • stm32_eval_i2c_ee.c: +updated to use the DMA to perform data transfer to/from +EEPROM memory. For more details, refer to the description provided +within this file.
    • stm3210c_eval.c: add low level +functions to configure the DMA (needed for I2C EEPROM driver)
      +
    • stm3210c_eval_ioe.c: add a delay +in IOE_TS_GetState() function to wait till the end of ADC +conversion
    • stm3210e_eval_fsmc_nor.c: add PD6 pin configuration in +NOR_Init() function
    • stm3210b_eval_lcd.c: remove the +second ";" from "static void PutPixel(int16_t x, int16_t y);;" 
+

4.1.0 +- 03/01/2010

+
  1. General
+
  • Add support +for STM32 Low-density Value line (STM32F100x4/6) and +Medium-density Value line (STM32F100x8/B) devices.
  • Add support for the +STMicroelectronics STM32100B-EVAL evaluation board.
+
  1. Utilities
+
  • STM32_EVAL
+
  • Add new directory +"Common" containing a common drivers for all STM32 evaluation boards: +fonts.h/.c, stm32_eval_i2c_ee.h/.c, stm32_eval_spi_flash.h/.c, + stm32_eval_i2c_tsensor.h/.c, + stm32_eval_spi_sd.h/.c +and stm32_eval_sdio_sd.h/.c
  • Add new driver for the +STM32100B-EVAL managing Leds, push button and COM ports.
  • New HDMI CEC High level +driver.
    +
  • For all LCD drivers new fonts has +been added.
  • New FSMC memories +drivers for STM3210E-EVAL board: stm3210e_eval_fsmc_sram.h/.c, stm3210e_eval_fsmc_nor.h/.c +and stm3210e_eval_fsmc_nand.h/.c.

License

+

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless +required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See +the License for the specific language governing permissions and +limitations under the License.
+ +
+
+

For +complete documentation on STM32 Microcontrollers +visit www.st.com/STM32

+
+

+
+
+

 

+
+ + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/fonts.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/fonts.c new file mode 100644 index 000000000..66b6e4dc6 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/fonts.c @@ -0,0 +1,1003 @@ +/** + ****************************************************************************** + * @file fonts.c + * @author MCD Application Team + * @version V5.0.2 + * @date 05-March-2012 + * @brief This file provides text fonts for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup Common + * @{ + */ + +/** @addtogroup FONTS + * @brief This file includes the Fonts driver of STM32xx-EVAL boards. + * @{ + */ + +/** @defgroup FONTS_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Variables + * @{ + */ +const uint16_t ASCII16x24_Table [] = { +/** + * @brief Space ' ' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '!' + */ + 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000, + 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '"' + */ + 0x0000, 0x0000, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '#' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C60, 0x0C60, + 0x0C60, 0x0630, 0x0630, 0x1FFE, 0x1FFE, 0x0630, 0x0738, 0x0318, + 0x1FFE, 0x1FFE, 0x0318, 0x0318, 0x018C, 0x018C, 0x018C, 0x0000, +/** + * @brief '$' + */ + 0x0000, 0x0080, 0x03E0, 0x0FF8, 0x0E9C, 0x1C8C, 0x188C, 0x008C, + 0x0098, 0x01F8, 0x07E0, 0x0E80, 0x1C80, 0x188C, 0x188C, 0x189C, + 0x0CB8, 0x0FF0, 0x03E0, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000, +/** + * @brief '%' + */ + 0x0000, 0x0000, 0x0000, 0x180E, 0x0C1B, 0x0C11, 0x0611, 0x0611, + 0x0311, 0x0311, 0x019B, 0x018E, 0x38C0, 0x6CC0, 0x4460, 0x4460, + 0x4430, 0x4430, 0x4418, 0x6C18, 0x380C, 0x0000, 0x0000, 0x0000, +/** + * @brief '&' + */ + 0x0000, 0x01E0, 0x03F0, 0x0738, 0x0618, 0x0618, 0x0330, 0x01F0, + 0x00F0, 0x00F8, 0x319C, 0x330E, 0x1E06, 0x1C06, 0x1C06, 0x3F06, + 0x73FC, 0x21F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief ''' + */ + 0x0000, 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '(' + */ + 0x0000, 0x0200, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x0060, 0x0060, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0060, 0x0060, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0200, 0x0000, +/** + * @brief ')' + */ + 0x0000, 0x0020, 0x0060, 0x00C0, 0x0180, 0x0180, 0x0300, 0x0300, + 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, + 0x0300, 0x0300, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0020, 0x0000, +/** + * @brief '*' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0, + 0x06D8, 0x07F8, 0x01E0, 0x0330, 0x0738, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '+' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x3FFC, 0x3FFC, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief ',' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, +/** + * @brief '-' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x07E0, 0x07E0, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '.' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '/' + */ + 0x0000, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300, + 0x0300, 0x0380, 0x0180, 0x0180, 0x0180, 0x00C0, 0x00C0, 0x00C0, + 0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '0' + */ + 0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x180C, 0x180C, 0x180C, + 0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C18, 0x0E38, + 0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '1' + */ + 0x0000, 0x0100, 0x0180, 0x01C0, 0x01F0, 0x0198, 0x0188, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '2' + */ + 0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x1800, + 0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018, + 0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '3' + */ + 0x0000, 0x01E0, 0x07F8, 0x0E18, 0x0C0C, 0x0C0C, 0x0C00, 0x0600, + 0x03C0, 0x07C0, 0x0C00, 0x1800, 0x1800, 0x180C, 0x180C, 0x0C18, + 0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '4' + */ + 0x0000, 0x0C00, 0x0E00, 0x0F00, 0x0F00, 0x0D80, 0x0CC0, 0x0C60, + 0x0C60, 0x0C30, 0x0C18, 0x0C0C, 0x3FFC, 0x3FFC, 0x0C00, 0x0C00, + 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '5' + */ + 0x0000, 0x0FF8, 0x0FF8, 0x0018, 0x0018, 0x000C, 0x03EC, 0x07FC, + 0x0E1C, 0x1C00, 0x1800, 0x1800, 0x1800, 0x180C, 0x0C1C, 0x0E18, + 0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '6' + */ + 0x0000, 0x07C0, 0x0FF0, 0x1C38, 0x1818, 0x0018, 0x000C, 0x03CC, + 0x0FEC, 0x0E3C, 0x1C1C, 0x180C, 0x180C, 0x180C, 0x1C18, 0x0E38, + 0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '7' + */ + 0x0000, 0x1FFC, 0x1FFC, 0x0C00, 0x0600, 0x0600, 0x0300, 0x0380, + 0x0180, 0x01C0, 0x00C0, 0x00E0, 0x0060, 0x0060, 0x0070, 0x0030, + 0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '8' + */ + 0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x0C18, 0x0C18, 0x0638, + 0x07F0, 0x07F0, 0x0C18, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C38, + 0x0FF8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '9' + */ + 0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C1C, 0x180C, 0x180C, 0x180C, + 0x1C1C, 0x1E38, 0x1BF8, 0x19E0, 0x1800, 0x0C00, 0x0C00, 0x0E1C, + 0x07F8, 0x01F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief ':' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief ';' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000, +/** + * @brief '<' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1000, 0x1C00, 0x0F80, 0x03E0, 0x00F8, 0x0018, 0x00F8, 0x03E0, + 0x0F80, 0x1C00, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '=' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1FF8, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '>' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0008, 0x0038, 0x01F0, 0x07C0, 0x1F00, 0x1800, 0x1F00, 0x07C0, + 0x01F0, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '?' + */ + 0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x0C00, + 0x0600, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x0000, 0x0000, + 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '@' + */ + 0x0000, 0x0000, 0x07E0, 0x1818, 0x2004, 0x29C2, 0x4A22, 0x4411, + 0x4409, 0x4409, 0x4409, 0x2209, 0x1311, 0x0CE2, 0x4002, 0x2004, + 0x1818, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'A' + */ + 0x0000, 0x0380, 0x0380, 0x06C0, 0x06C0, 0x06C0, 0x0C60, 0x0C60, + 0x1830, 0x1830, 0x1830, 0x3FF8, 0x3FF8, 0x701C, 0x600C, 0x600C, + 0xC006, 0xC006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'B' + */ + 0x0000, 0x03FC, 0x0FFC, 0x0C0C, 0x180C, 0x180C, 0x180C, 0x0C0C, + 0x07FC, 0x0FFC, 0x180C, 0x300C, 0x300C, 0x300C, 0x300C, 0x180C, + 0x1FFC, 0x07FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'C' + */ + 0x0000, 0x07C0, 0x1FF0, 0x3838, 0x301C, 0x700C, 0x6006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x6006, 0x700C, 0x301C, + 0x1FF0, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'D' + */ + 0x0000, 0x03FE, 0x0FFE, 0x0E06, 0x1806, 0x1806, 0x3006, 0x3006, + 0x3006, 0x3006, 0x3006, 0x3006, 0x3006, 0x1806, 0x1806, 0x0E06, + 0x0FFE, 0x03FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'E' + */ + 0x0000, 0x3FFC, 0x3FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, + 0x1FFC, 0x1FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, + 0x3FFC, 0x3FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'F' + */ + 0x0000, 0x3FF8, 0x3FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'G' + */ + 0x0000, 0x0FE0, 0x3FF8, 0x783C, 0x600E, 0xE006, 0xC007, 0x0003, + 0x0003, 0xFE03, 0xFE03, 0xC003, 0xC007, 0xC006, 0xC00E, 0xF03C, + 0x3FF8, 0x0FE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'H' + */ + 0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, + 0x3FFC, 0x3FFC, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, + 0x300C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'I' + */ + 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'J' + */ + 0x0000, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, + 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0618, 0x0618, 0x0738, + 0x03F0, 0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'K' + */ + 0x0000, 0x3006, 0x1806, 0x0C06, 0x0606, 0x0306, 0x0186, 0x00C6, + 0x0066, 0x0076, 0x00DE, 0x018E, 0x0306, 0x0606, 0x0C06, 0x1806, + 0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'L' + */ + 0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'M' + */ + 0x0000, 0xE00E, 0xF01E, 0xF01E, 0xF01E, 0xD836, 0xD836, 0xD836, + 0xD836, 0xCC66, 0xCC66, 0xCC66, 0xC6C6, 0xC6C6, 0xC6C6, 0xC6C6, + 0xC386, 0xC386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'N' + */ + 0x0000, 0x300C, 0x301C, 0x303C, 0x303C, 0x306C, 0x306C, 0x30CC, + 0x30CC, 0x318C, 0x330C, 0x330C, 0x360C, 0x360C, 0x3C0C, 0x3C0C, + 0x380C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'O' + */ + 0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xC003, 0xC003, + 0xC003, 0xC003, 0xC003, 0xC003, 0xC003, 0x6006, 0x700E, 0x381C, + 0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'P' + */ + 0x0000, 0x0FFC, 0x1FFC, 0x380C, 0x300C, 0x300C, 0x300C, 0x300C, + 0x180C, 0x1FFC, 0x07FC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, + 0x000C, 0x000C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'Q' + */ + 0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xE003, 0xC003, + 0xC003, 0xC003, 0xC003, 0xC003, 0xE007, 0x6306, 0x3F0E, 0x3C1C, + 0x3FF8, 0xF7E0, 0xC000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'R' + */ + 0x0000, 0x0FFE, 0x1FFE, 0x3806, 0x3006, 0x3006, 0x3006, 0x3806, + 0x1FFE, 0x07FE, 0x0306, 0x0606, 0x0C06, 0x1806, 0x1806, 0x3006, + 0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'S' + */ + 0x0000, 0x03E0, 0x0FF8, 0x0C1C, 0x180C, 0x180C, 0x000C, 0x001C, + 0x03F8, 0x0FE0, 0x1E00, 0x3800, 0x3006, 0x3006, 0x300E, 0x1C1C, + 0x0FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'T' + */ + 0x0000, 0x7FFE, 0x7FFE, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'U' + */ + 0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, + 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x1818, + 0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'V' + */ + 0x0000, 0x6003, 0x3006, 0x3006, 0x3006, 0x180C, 0x180C, 0x180C, + 0x0C18, 0x0C18, 0x0E38, 0x0630, 0x0630, 0x0770, 0x0360, 0x0360, + 0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'W' + */ + 0x0000, 0x6003, 0x61C3, 0x61C3, 0x61C3, 0x3366, 0x3366, 0x3366, + 0x3366, 0x3366, 0x3366, 0x1B6C, 0x1B6C, 0x1B6C, 0x1A2C, 0x1E3C, + 0x0E38, 0x0E38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'X' + */ + 0x0000, 0xE00F, 0x700C, 0x3018, 0x1830, 0x0C70, 0x0E60, 0x07C0, + 0x0380, 0x0380, 0x03C0, 0x06E0, 0x0C70, 0x1C30, 0x1818, 0x300C, + 0x600E, 0xE007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'Y' + */ + 0x0000, 0xC003, 0x6006, 0x300C, 0x381C, 0x1838, 0x0C30, 0x0660, + 0x07E0, 0x03C0, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'Z' + */ + 0x0000, 0x7FFC, 0x7FFC, 0x6000, 0x3000, 0x1800, 0x0C00, 0x0600, + 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018, 0x000C, 0x0006, + 0x7FFE, 0x7FFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '[' + */ + 0x0000, 0x03E0, 0x03E0, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x03E0, 0x03E0, 0x0000, +/** + * @brief '\' + */ + 0x0000, 0x0030, 0x0030, 0x0060, 0x0060, 0x0060, 0x00C0, 0x00C0, + 0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0300, 0x0300, 0x0300, + 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief ']' + */ + 0x0000, 0x03E0, 0x03E0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, + 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, + 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x03E0, 0x03E0, 0x0000, +/** + * @brief '^' + */ + 0x0000, 0x0000, 0x01C0, 0x01C0, 0x0360, 0x0360, 0x0360, 0x0630, + 0x0630, 0x0C18, 0x0C18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '_' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief ''' + */ + 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'a' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03F0, 0x07F8, + 0x0C1C, 0x0C0C, 0x0F00, 0x0FF0, 0x0CF8, 0x0C0C, 0x0C0C, 0x0F1C, + 0x0FF8, 0x18F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'b' + */ + 0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x03D8, 0x0FF8, + 0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38, + 0x0FF8, 0x03D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'c' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x07F0, + 0x0E30, 0x0C18, 0x0018, 0x0018, 0x0018, 0x0018, 0x0C18, 0x0E30, + 0x07F0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'd' + */ + 0x0000, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1BC0, 0x1FF0, + 0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30, + 0x1FF0, 0x1BC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'e' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0, + 0x0C30, 0x1818, 0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x1838, 0x1C30, + 0x0FF0, 0x07C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'f' + */ + 0x0000, 0x0F80, 0x0FC0, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0, + 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, + 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'g' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0DE0, 0x0FF8, + 0x0E18, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0E18, + 0x0FF8, 0x0DE0, 0x0C00, 0x0C0C, 0x061C, 0x07F8, 0x01F0, 0x0000, +/** + * @brief 'h' + */ + 0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x07D8, 0x0FF8, + 0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, + 0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'i' + */ + 0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0, + 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, + 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'j' + */ + 0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0, + 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, + 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00F8, 0x0078, 0x0000, +/** + * @brief 'k' + */ + 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0C0C, 0x060C, + 0x030C, 0x018C, 0x00CC, 0x006C, 0x00FC, 0x019C, 0x038C, 0x030C, + 0x060C, 0x0C0C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'l' + */ + 0x0000, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, + 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, + 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'm' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3C7C, 0x7EFF, + 0xE3C7, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, + 0xC183, 0xC183, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'n' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0798, 0x0FF8, + 0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, + 0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'o' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0, + 0x0C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C30, + 0x0FF0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'p' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D8, 0x0FF8, + 0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38, + 0x0FF8, 0x03D8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0000, +/** + * @brief 'q' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BC0, 0x1FF0, + 0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30, + 0x1FF0, 0x1BC0, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x0000, +/** + * @brief 'r' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07B0, 0x03F0, + 0x0070, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 's' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03E0, 0x03F0, + 0x0E38, 0x0C18, 0x0038, 0x03F0, 0x07C0, 0x0C00, 0x0C18, 0x0E38, + 0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 't' + */ + 0x0000, 0x0000, 0x0080, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0, + 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, + 0x07C0, 0x0780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'u' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1818, 0x1818, + 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C38, + 0x1FF0, 0x19E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'v' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x180C, 0x0C18, + 0x0C18, 0x0C18, 0x0630, 0x0630, 0x0630, 0x0360, 0x0360, 0x0360, + 0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'w' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0x41C1, + 0x61C3, 0x6363, 0x6363, 0x6363, 0x3636, 0x3636, 0x3636, 0x1C1C, + 0x1C1C, 0x1C1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'x' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x381C, 0x1C38, + 0x0C30, 0x0660, 0x0360, 0x0360, 0x0360, 0x0360, 0x0660, 0x0C30, + 0x1C38, 0x381C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief 'y' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3018, 0x1830, + 0x1830, 0x1870, 0x0C60, 0x0C60, 0x0CE0, 0x06C0, 0x06C0, 0x0380, + 0x0380, 0x0380, 0x0180, 0x0180, 0x01C0, 0x00F0, 0x0070, 0x0000, +/** + * @brief 'z' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FFC, 0x1FFC, + 0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018, + 0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +/** + * @brief '{' + */ + 0x0000, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, + 0x00C0, 0x0060, 0x0060, 0x0030, 0x0060, 0x0040, 0x00C0, 0x00C0, + 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0000, 0x0000, +/** + * @brief '|' + */ + 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, +/** + * @brief '}' + */ + 0x0000, 0x0060, 0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0300, 0x0300, 0x0600, 0x0300, 0x0100, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0000, 0x0000, +/** + * @brief '~' + */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x10F0, 0x1FF8, 0x0F08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; + +const uint16_t ASCII12x12_Table [] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x0000,0x2000,0x0000,0x0000, + 0x0000,0x5000,0x5000,0x5000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0900,0x0900,0x1200,0x7f00,0x1200,0x7f00,0x1200,0x2400,0x2400,0x0000,0x0000, + 0x1000,0x3800,0x5400,0x5000,0x5000,0x3800,0x1400,0x5400,0x5400,0x3800,0x1000,0x0000, + 0x0000,0x3080,0x4900,0x4900,0x4a00,0x32c0,0x0520,0x0920,0x0920,0x10c0,0x0000,0x0000, + 0x0000,0x0c00,0x1200,0x1200,0x1400,0x1800,0x2500,0x2300,0x2300,0x1d80,0x0000,0x0000, + 0x0000,0x4000,0x4000,0x4000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0800,0x1000,0x1000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x1000,0x1000, + 0x0000,0x4000,0x2000,0x2000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x2000,0x2000, + 0x0000,0x2000,0x7000,0x2000,0x5000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0800,0x0800,0x7f00,0x0800,0x0800,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x2000,0x4000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x0000,0x0000, + 0x0000,0x1000,0x1000,0x1000,0x2000,0x2000,0x2000,0x2000,0x4000,0x4000,0x0000,0x0000, + 0x0000,0x1000,0x2800,0x4400,0x4400,0x4400,0x4400,0x4400,0x2800,0x1000,0x0000,0x0000, + 0x0000,0x1000,0x3000,0x5000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x0000,0x0000, + 0x0000,0x3000,0x4800,0x4400,0x0400,0x0800,0x1000,0x2000,0x4000,0x7c00,0x0000,0x0000, + 0x0000,0x3000,0x4800,0x0400,0x0800,0x1000,0x0800,0x4400,0x4800,0x3000,0x0000,0x0000, + 0x0000,0x0800,0x1800,0x1800,0x2800,0x2800,0x4800,0x7c00,0x0800,0x0800,0x0000,0x0000, + 0x0000,0x3c00,0x2000,0x4000,0x7000,0x4800,0x0400,0x4400,0x4800,0x3000,0x0000,0x0000, + 0x0000,0x1800,0x2400,0x4000,0x5000,0x6800,0x4400,0x4400,0x2800,0x1000,0x0000,0x0000, + 0x0000,0x7c00,0x0400,0x0800,0x1000,0x1000,0x1000,0x2000,0x2000,0x2000,0x0000,0x0000, + 0x0000,0x1000,0x2800,0x4400,0x2800,0x1000,0x2800,0x4400,0x2800,0x1000,0x0000,0x0000, + 0x0000,0x1000,0x2800,0x4400,0x4400,0x2c00,0x1400,0x0400,0x4800,0x3000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x2000,0x4000, + 0x0000,0x0000,0x0400,0x0800,0x3000,0x4000,0x3000,0x0800,0x0400,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x7c00,0x0000,0x0000,0x7c00,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x4000,0x2000,0x1800,0x0400,0x1800,0x2000,0x4000,0x0000,0x0000,0x0000, + 0x0000,0x3800,0x6400,0x4400,0x0400,0x0800,0x1000,0x1000,0x0000,0x1000,0x0000,0x0000, + 0x0000,0x0f80,0x1040,0x2ea0,0x51a0,0x5120,0x5120,0x5120,0x5320,0x4dc0,0x2020,0x1040, + 0x0000,0x0800,0x1400,0x1400,0x1400,0x2200,0x3e00,0x2200,0x4100,0x4100,0x0000,0x0000, + 0x0000,0x3c00,0x2200,0x2200,0x2200,0x3c00,0x2200,0x2200,0x2200,0x3c00,0x0000,0x0000, + 0x0000,0x0e00,0x1100,0x2100,0x2000,0x2000,0x2000,0x2100,0x1100,0x0e00,0x0000,0x0000, + 0x0000,0x3c00,0x2200,0x2100,0x2100,0x2100,0x2100,0x2100,0x2200,0x3c00,0x0000,0x0000, + 0x0000,0x3e00,0x2000,0x2000,0x2000,0x3e00,0x2000,0x2000,0x2000,0x3e00,0x0000,0x0000, + 0x0000,0x3e00,0x2000,0x2000,0x2000,0x3c00,0x2000,0x2000,0x2000,0x2000,0x0000,0x0000, + 0x0000,0x0e00,0x1100,0x2100,0x2000,0x2700,0x2100,0x2100,0x1100,0x0e00,0x0000,0x0000, + 0x0000,0x2100,0x2100,0x2100,0x2100,0x3f00,0x2100,0x2100,0x2100,0x2100,0x0000,0x0000, + 0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x0000,0x0000, + 0x0000,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x4800,0x4800,0x3000,0x0000,0x0000, + 0x0000,0x2200,0x2400,0x2800,0x2800,0x3800,0x2800,0x2400,0x2400,0x2200,0x0000,0x0000, + 0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x3e00,0x0000,0x0000, + 0x0000,0x2080,0x3180,0x3180,0x3180,0x2a80,0x2a80,0x2a80,0x2a80,0x2480,0x0000,0x0000, + 0x0000,0x2100,0x3100,0x3100,0x2900,0x2900,0x2500,0x2300,0x2300,0x2100,0x0000,0x0000, + 0x0000,0x0c00,0x1200,0x2100,0x2100,0x2100,0x2100,0x2100,0x1200,0x0c00,0x0000,0x0000, + 0x0000,0x3c00,0x2200,0x2200,0x2200,0x3c00,0x2000,0x2000,0x2000,0x2000,0x0000,0x0000, + 0x0000,0x0c00,0x1200,0x2100,0x2100,0x2100,0x2100,0x2100,0x1600,0x0d00,0x0100,0x0000, + 0x0000,0x3e00,0x2100,0x2100,0x2100,0x3e00,0x2400,0x2200,0x2100,0x2080,0x0000,0x0000, + 0x0000,0x1c00,0x2200,0x2200,0x2000,0x1c00,0x0200,0x2200,0x2200,0x1c00,0x0000,0x0000, + 0x0000,0x3e00,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0000,0x0000, + 0x0000,0x2100,0x2100,0x2100,0x2100,0x2100,0x2100,0x2100,0x1200,0x0c00,0x0000,0x0000, + 0x0000,0x4100,0x4100,0x2200,0x2200,0x2200,0x1400,0x1400,0x1400,0x0800,0x0000,0x0000, + 0x0000,0x4440,0x4a40,0x2a40,0x2a80,0x2a80,0x2a80,0x2a80,0x2a80,0x1100,0x0000,0x0000, + 0x0000,0x4100,0x2200,0x1400,0x1400,0x0800,0x1400,0x1400,0x2200,0x4100,0x0000,0x0000, + 0x0000,0x4100,0x2200,0x2200,0x1400,0x0800,0x0800,0x0800,0x0800,0x0800,0x0000,0x0000, + 0x0000,0x7e00,0x0200,0x0400,0x0800,0x1000,0x1000,0x2000,0x4000,0x7e00,0x0000,0x0000, + 0x0000,0x3000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, + 0x0000,0x4000,0x4000,0x2000,0x2000,0x2000,0x2000,0x2000,0x1000,0x1000,0x0000,0x0000, + 0x0000,0x6000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, + 0x0000,0x1000,0x2800,0x2800,0x2800,0x4400,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7e00, + 0x4000,0x2000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3800,0x4400,0x0400,0x3c00,0x4400,0x4400,0x3c00,0x0000,0x0000, + 0x0000,0x4000,0x4000,0x5800,0x6400,0x4400,0x4400,0x4400,0x6400,0x5800,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3000,0x4800,0x4000,0x4000,0x4000,0x4800,0x3000,0x0000,0x0000, + 0x0000,0x0400,0x0400,0x3400,0x4c00,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3800,0x4400,0x4400,0x7c00,0x4000,0x4400,0x3800,0x0000,0x0000, + 0x0000,0x6000,0x4000,0xe000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3400,0x4c00,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0400,0x4400, + 0x0000,0x4000,0x4000,0x5800,0x6400,0x4400,0x4400,0x4400,0x4400,0x4400,0x0000,0x0000, + 0x0000,0x4000,0x0000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000, + 0x0000,0x4000,0x0000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000, + 0x0000,0x4000,0x4000,0x4800,0x5000,0x6000,0x5000,0x5000,0x4800,0x4800,0x0000,0x0000, + 0x0000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x5200,0x6d00,0x4900,0x4900,0x4900,0x4900,0x4900,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x5800,0x6400,0x4400,0x4400,0x4400,0x4400,0x4400,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3800,0x4400,0x4400,0x4400,0x4400,0x4400,0x3800,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x5800,0x6400,0x4400,0x4400,0x4400,0x6400,0x5800,0x4000,0x4000, + 0x0000,0x0000,0x0000,0x3400,0x4c00,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0400,0x0400, + 0x0000,0x0000,0x0000,0x5000,0x6000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3000,0x4800,0x4000,0x3000,0x0800,0x4800,0x3000,0x0000,0x0000, + 0x0000,0x4000,0x4000,0xe000,0x4000,0x4000,0x4000,0x4000,0x4000,0x6000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x4400,0x4400,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x4400,0x4400,0x2800,0x2800,0x2800,0x2800,0x1000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x4900,0x4900,0x5500,0x5500,0x5500,0x5500,0x2200,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x4400,0x2800,0x2800,0x1000,0x2800,0x2800,0x4400,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x4400,0x4400,0x2800,0x2800,0x2800,0x1000,0x1000,0x1000,0x1000, + 0x0000,0x0000,0x0000,0x7800,0x0800,0x1000,0x2000,0x2000,0x4000,0x7800,0x0000,0x0000, + 0x0000,0x1000,0x2000,0x2000,0x2000,0x2000,0x4000,0x2000,0x2000,0x2000,0x2000,0x2000, + 0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, + 0x0000,0x4000,0x2000,0x2000,0x2000,0x2000,0x1000,0x2000,0x2000,0x2000,0x2000,0x2000, + 0x0000,0x0000,0x0000,0x0000,0x7400,0x5800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x7000,0x5000,0x5000,0x5000,0x5000,0x5000,0x5000,0x7000,0x0000,0x0000}; + +const uint16_t ASCII8x12_Table [] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00, + 0x00,0x00,0x00,0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x14,0x14,0x3e,0x14,0x28,0x7c,0x28,0x28,0x00, + 0x00,0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x14,0x54,0x38,0x10, + 0x00,0x00,0x00,0x44,0xa8,0xa8,0x50,0x14,0x1a,0x2a,0x24,0x00, + 0x00,0x00,0x00,0x20,0x50,0x50,0x20,0xe8,0x98,0x98,0x60,0x00, + 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + 0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x00,0x00,0x00,0x40,0xe0,0x40,0xa0,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0xf8,0x20,0x20,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00, + 0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x40,0x80,0x80,0x80,0x00, + 0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00, + 0x00,0x00,0x00,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x20,0x00, + 0x00,0x00,0x00,0x60,0x90,0x10,0x10,0x20,0x40,0x80,0xf0,0x00, + 0x00,0x00,0x00,0x60,0x90,0x10,0x60,0x10,0x10,0x90,0x60,0x00, + 0x00,0x00,0x00,0x10,0x30,0x50,0x50,0x90,0xf8,0x10,0x10,0x00, + 0x00,0x00,0x00,0x70,0x40,0x80,0xe0,0x10,0x10,0x90,0x60,0x00, + 0x00,0x00,0x00,0x60,0x90,0x80,0xa0,0xd0,0x90,0x90,0x60,0x00, + 0x00,0x00,0x00,0xf0,0x10,0x20,0x20,0x20,0x40,0x40,0x40,0x00, + 0x00,0x00,0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x90,0x60,0x00, + 0x00,0x00,0x00,0x60,0x90,0x90,0xb0,0x50,0x10,0x90,0x60,0x00, + 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x40,0x00, + 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x40,0x40, + 0x00,0x00,0x00,0x00,0x00,0x10,0x60,0x80,0x60,0x10,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xf0,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x10,0x60,0x80,0x00,0x00, + 0x00,0x00,0x00,0x60,0x90,0x10,0x20,0x40,0x40,0x00,0x40,0x00, + 0x00,0x00,0x00,0x1c,0x22,0x5b,0xa5,0xa5,0xa5,0xa5,0x9e,0x41, + 0x00,0x00,0x00,0x20,0x50,0x50,0x50,0x50,0x70,0x88,0x88,0x00, + 0x00,0x00,0x00,0xf0,0x88,0x88,0xf0,0x88,0x88,0x88,0xf0,0x00, + 0x00,0x00,0x00,0x38,0x44,0x84,0x80,0x80,0x84,0x44,0x38,0x00, + 0x00,0x00,0x00,0xe0,0x90,0x88,0x88,0x88,0x88,0x90,0xe0,0x00, + 0x00,0x00,0x00,0xf8,0x80,0x80,0xf8,0x80,0x80,0x80,0xf8,0x00, + 0x00,0x00,0x00,0x78,0x40,0x40,0x70,0x40,0x40,0x40,0x40,0x00, + 0x00,0x00,0x00,0x38,0x44,0x84,0x80,0x9c,0x84,0x44,0x38,0x00, + 0x00,0x00,0x00,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x00, + 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, + 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x90,0x90,0x60,0x00, + 0x00,0x00,0x00,0x88,0x90,0xa0,0xe0,0xa0,0x90,0x90,0x88,0x00, + 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,0x00, + 0x00,0x00,0x00,0x82,0xc6,0xc6,0xaa,0xaa,0xaa,0xaa,0x92,0x00, + 0x00,0x00,0x00,0x84,0xc4,0xa4,0xa4,0x94,0x94,0x8c,0x84,0x00, + 0x00,0x00,0x00,0x30,0x48,0x84,0x84,0x84,0x84,0x48,0x30,0x00, + 0x00,0x00,0x00,0xf0,0x88,0x88,0x88,0xf0,0x80,0x80,0x80,0x00, + 0x00,0x00,0x00,0x30,0x48,0x84,0x84,0x84,0x84,0x58,0x34,0x04, + 0x00,0x00,0x00,0x78,0x44,0x44,0x78,0x50,0x48,0x44,0x42,0x00, + 0x00,0x00,0x00,0x70,0x88,0x80,0x70,0x08,0x88,0x88,0x70,0x00, + 0x00,0x00,0x00,0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, + 0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0x84,0x48,0x30,0x00, + 0x00,0x00,0x00,0x88,0x88,0x50,0x50,0x50,0x50,0x50,0x20,0x00, + 0x00,0x00,0x00,0x92,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x44,0x00, + 0x00,0x00,0x00,0x84,0x48,0x48,0x30,0x30,0x48,0x48,0x84,0x00, + 0x00,0x00,0x00,0x88,0x50,0x50,0x20,0x20,0x20,0x20,0x20,0x00, + 0x00,0x00,0x00,0xf8,0x08,0x10,0x20,0x20,0x40,0x80,0xf8,0x00, + 0x00,0x00,0x00,0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + 0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x40,0x20,0x20,0x00, + 0x00,0x00,0x00,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x00,0x00,0x00,0x40,0xa0,0xa0,0xa0,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8, + 0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xe0,0x10,0x70,0x90,0x90,0x70,0x00, + 0x00,0x00,0x00,0x80,0x80,0xa0,0xd0,0x90,0x90,0xd0,0xa0,0x00, + 0x00,0x00,0x00,0x00,0x00,0x60,0x90,0x80,0x80,0x90,0x60,0x00, + 0x00,0x00,0x00,0x10,0x10,0x50,0xb0,0x90,0x90,0xb0,0x50,0x00, + 0x00,0x00,0x00,0x00,0x00,0x60,0x90,0xf0,0x80,0x90,0x60,0x00, + 0x00,0x00,0x00,0xc0,0x80,0xc0,0x80,0x80,0x80,0x80,0x80,0x00, + 0x00,0x00,0x00,0x00,0x00,0x50,0xb0,0x90,0x90,0xb0,0x50,0x10, + 0x00,0x00,0x00,0x80,0x80,0xa0,0xd0,0x90,0x90,0x90,0x90,0x00, + 0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00, + 0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + 0x00,0x00,0x00,0x80,0x80,0x90,0xa0,0xc0,0xa0,0x90,0x90,0x00, + 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, + 0x00,0x00,0x00,0x00,0x00,0xa6,0xda,0x92,0x92,0x92,0x92,0x00, + 0x00,0x00,0x00,0x00,0x00,0xa0,0xd0,0x90,0x90,0x90,0x90,0x00, + 0x00,0x00,0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x60,0x00, + 0x00,0x00,0x00,0x00,0x00,0xa0,0xd0,0x90,0x90,0xd0,0xa0,0x80, + 0x00,0x00,0x00,0x00,0x00,0x50,0xb0,0x90,0x90,0xb0,0x50,0x10, + 0x00,0x00,0x00,0x00,0x00,0xa0,0xc0,0x80,0x80,0x80,0x80,0x00, + 0x00,0x00,0x00,0x00,0x00,0xe0,0x90,0x40,0x20,0x90,0x60,0x00, + 0x00,0x00,0x00,0x80,0x80,0xc0,0x80,0x80,0x80,0x80,0xc0,0x00, + 0x00,0x00,0x00,0x00,0x00,0x90,0x90,0x90,0x90,0xb0,0x50,0x00, + 0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x50,0x50,0x50,0x20,0x00, + 0x00,0x00,0x00,0x00,0x00,0x92,0xaa,0xaa,0xaa,0xaa,0x44,0x00, + 0x00,0x00,0x00,0x00,0x00,0x88,0x50,0x20,0x20,0x50,0x88,0x00, + 0x00,0x00,0x00,0x00,0x00,0x88,0x50,0x50,0x50,0x20,0x20,0x20, + 0x00,0x00,0x00,0x00,0x00,0xf0,0x10,0x20,0x40,0x80,0xf0,0x00, + 0x00,0x00,0x00,0xc0,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80, + 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + 0x00,0x00,0x00,0xc0,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x40, + 0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0xb0,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xe0,0xa0,0xa0,0xa0,0xa0,0xa0,0xe0,0x00}; + +const uint16_t ASCII8x8_Table [] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x40, + 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x24, 0x24, 0xfe, 0x48, 0xfc, 0x48, 0x48, + 0x38, 0x54, 0x50, 0x38, 0x14, 0x14, 0x54, 0x38, + 0x44, 0xa8, 0xa8, 0x50, 0x14, 0x1a, 0x2a, 0x24, + 0x10, 0x28, 0x28, 0x10, 0x74, 0x4c, 0x4c, 0x30, + 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, + 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, + 0x00, 0x00, 0x24, 0x18, 0x3c, 0x18, 0x24, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, + 0x08, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x20, + 0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x18, + 0x08, 0x18, 0x28, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x38, 0x44, 0x00, 0x04, 0x08, 0x10, 0x20, 0x7c, + 0x18, 0x24, 0x04, 0x18, 0x04, 0x04, 0x24, 0x18, + 0x04, 0x0c, 0x14, 0x24, 0x44, 0x7e, 0x04, 0x04, + 0x3c, 0x20, 0x20, 0x38, 0x04, 0x04, 0x24, 0x18, + 0x18, 0x24, 0x20, 0x38, 0x24, 0x24, 0x24, 0x18, + 0x3c, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, + 0x18, 0x24, 0x24, 0x18, 0x24, 0x24, 0x24, 0x18, + 0x18, 0x24, 0x24, 0x24, 0x1c, 0x04, 0x24, 0x18, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x10, 0x00, + 0x00, 0x00, 0x04, 0x18, 0x20, 0x18, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x18, 0x04, 0x18, 0x20, 0x00, + 0x18, 0x24, 0x04, 0x08, 0x10, 0x10, 0x00, 0x10, + 0x3c, 0x42, 0x99, 0xa5, 0xa5, 0x9d, 0x42, 0x38, + 0x38, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, + 0x78, 0x44, 0x44, 0x78, 0x44, 0x44, 0x44, 0x78, + 0x1c, 0x22, 0x42, 0x40, 0x40, 0x42, 0x22, 0x1c, + 0x70, 0x48, 0x44, 0x44, 0x44, 0x44, 0x48, 0x70, + 0x7c, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x7c, + 0x3c, 0x20, 0x20, 0x38, 0x20, 0x20, 0x20, 0x20, + 0x1c, 0x22, 0x42, 0x40, 0x4e, 0x42, 0x22, 0x1c, + 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x44, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x24, 0x24, 0x18, + 0x44, 0x48, 0x50, 0x70, 0x50, 0x48, 0x48, 0x44, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x82, 0xc6, 0xc6, 0xaa, 0xaa, 0xaa, 0xaa, 0x92, + 0x42, 0x62, 0x52, 0x52, 0x4a, 0x4a, 0x46, 0x42, + 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, + 0x78, 0x44, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, + 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x2c, 0x1a, + 0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 0x42, + 0x38, 0x44, 0x40, 0x38, 0x04, 0x44, 0x44, 0x38, + 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, + 0x44, 0x44, 0x28, 0x28, 0x28, 0x28, 0x28, 0x10, + 0x92, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x44, + 0x42, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42, + 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x7c, 0x04, 0x08, 0x10, 0x10, 0x20, 0x40, 0x7c, + 0x1c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1c, + 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, + 0x1c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1c, + 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x04, 0x1c, 0x24, 0x24, 0x1c, + 0x20, 0x20, 0x28, 0x34, 0x24, 0x24, 0x34, 0x28, + 0x00, 0x00, 0x18, 0x24, 0x20, 0x20, 0x24, 0x18, + 0x04, 0x04, 0x14, 0x2c, 0x24, 0x24, 0x2c, 0x14, + 0x00, 0x00, 0x18, 0x24, 0x3c, 0x20, 0x24, 0x18, + 0x00, 0x18, 0x10, 0x10, 0x18, 0x10, 0x10, 0x10, + 0x00, 0x18, 0x24, 0x24, 0x18, 0x04, 0x24, 0x18, + 0x20, 0x20, 0x28, 0x34, 0x24, 0x24, 0x24, 0x24, + 0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x28, 0x10, + 0x20, 0x20, 0x24, 0x28, 0x30, 0x28, 0x24, 0x24, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0xa6, 0xda, 0x92, 0x92, 0x92, 0x92, + 0x00, 0x00, 0x28, 0x34, 0x24, 0x24, 0x24, 0x24, + 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x18, + 0x00, 0x28, 0x34, 0x24, 0x38, 0x20, 0x20, 0x20, + 0x00, 0x14, 0x2c, 0x24, 0x1c, 0x04, 0x04, 0x04, + 0x00, 0x00, 0x2c, 0x30, 0x20, 0x20, 0x20, 0x20, + 0x00, 0x00, 0x18, 0x24, 0x10, 0x08, 0x24, 0x18, + 0x00, 0x10, 0x38, 0x10, 0x10, 0x10, 0x10, 0x18, + 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x2c, 0x14, + 0x00, 0x00, 0x44, 0x44, 0x28, 0x28, 0x28, 0x10, + 0x00, 0x00, 0x92, 0xaa, 0xaa, 0xaa, 0xaa, 0x44, + 0x00, 0x00, 0x44, 0x28, 0x10, 0x10, 0x28, 0x44, + 0x00, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x3c, 0x04, 0x08, 0x10, 0x20, 0x3c, + 0x00, 0x08, 0x10, 0x10, 0x20, 0x10, 0x10, 0x08, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x10, 0x08, 0x08, 0x04, 0x08, 0x08, 0x10, + 0x00, 0x00, 0x00, 0x60, 0x92, 0x0c, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + + +sFONT Font16x24 = { + ASCII16x24_Table, + 16, /* Width */ + 24, /* Height */ +}; + +sFONT Font12x12 = { + ASCII12x12_Table, + 12, /* Width */ + 12, /* Height */ +}; + +sFONT Font8x12 = { + ASCII8x12_Table, + 8, /* Width */ + 12, /* Height */ +}; + + +sFONT Font8x8 = { + ASCII8x8_Table, + 8, /* Width */ + 8, /* Height */ +}; + +/** + * @} + */ + + +/** @defgroup FONTS_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/fonts.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/fonts.h new file mode 100644 index 000000000..6d9f7d2ee --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/fonts.h @@ -0,0 +1,124 @@ +/** + ****************************************************************************** + * @file fonts.h + * @author MCD Application Team + * @version V5.0.2 + * @date 05-March-2012 + * @brief Header for fonts.c file + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __FONTS_H +#define __FONTS_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup Common + * @{ + */ + +/** @addtogroup FONTS + * @{ + */ + +/** @defgroup FONTS_Exported_Types + * @{ + */ +typedef struct _tFont +{ + const uint16_t *table; + uint16_t Width; + uint16_t Height; + +} sFONT; + +extern sFONT Font16x24; +extern sFONT Font12x12; +extern sFONT Font8x12; +extern sFONT Font8x8; + +/** + * @} + */ + +/** @defgroup FONTS_Exported_Constants + * @{ + */ +#define LINE(x) ((x) * (((sFONT *)LCD_GetFont())->Height)) + +/** + * @} + */ + +/** @defgroup FONTS_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup FONTS_Exported_Functions + * @{ + */ +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __FONTS_H */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/lcd_log.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/lcd_log.c new file mode 100644 index 000000000..f171e0545 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/lcd_log.c @@ -0,0 +1,528 @@ +/** + ****************************************************************************** + * @file lcd_log.c + * @author MCD Application Team + * @version V5.0.2 + * @date 05-March-2012 + * @brief This file provides all the LCD Log firmware functions. + * + * The LCD Log module allows to automatically set a header and footer + * on any application using the LCD display and allows to dump user, + * debug and error messages by using the following macros: LCD_ErrLog(), + * LCD_UsrLog() and LCD_DbgLog(). + * + * It supports also the scroll feature by embedding an internal software + * cache for display. This feature allows to dump message sequentially + * on the display even if the number of displayed lines is bigger than + * the total number of line allowed by the display. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "lcd_log.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL +* @{ +*/ + +/** @addtogroup Common + * @{ + */ + +/** @defgroup LCD_LOG +* @brief LCD Log LCD_Application module +* @{ +*/ + +/** @defgroup LCD_LOG_Private_Types +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup LCD_LOG_Private_Defines +* @{ +*/ + +/** +* @} +*/ + + +/** @defgroup LCD_LOG_Private_Macros +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup LCD_LOG_Private_Variables +* @{ +*/ + +LCD_LOG_line LCD_CacheBuffer [LCD_CACHE_DEPTH]; +uint16_t LCD_LineColor; +uint16_t LCD_CacheBuffer_xptr; +uint16_t LCD_CacheBuffer_yptr_top; +uint16_t LCD_CacheBuffer_yptr_bottom; + +uint16_t LCD_CacheBuffer_yptr_top_bak; +uint16_t LCD_CacheBuffer_yptr_bottom_bak; + +FunctionalState LCD_CacheBuffer_yptr_invert; +FunctionalState LCD_ScrollActive; +FunctionalState LCD_Lock; +FunctionalState LCD_Scrolled; +uint16_t LCD_ScrollBackStep; + +/** +* @} +*/ + + +/** @defgroup LCD_LOG_Private_FunctionPrototypes +* @{ +*/ +static void LCD_LOG_UpdateDisplay (void); +/** +* @} +*/ + + +/** @defgroup LCD_LOG_Private_Functions +* @{ +*/ + + +/** +* @brief Init the LCD Log module +* @param None +* @retval None +*/ + +void LCD_LOG_Init ( void) +{ + /* Deinit LCD cache */ + LCD_LOG_DeInit(); + /* Clear the LCD */ + LCD_Clear(Black); +} + +/** +* @brief DeInitializes the LCD Log module. +* @param None +* @retval None +*/ +void LCD_LOG_DeInit(void) +{ + LCD_LineColor = LCD_LOG_DEFAULT_COLOR; + LCD_CacheBuffer_xptr = 0; + LCD_CacheBuffer_yptr_top = 0; + LCD_CacheBuffer_yptr_bottom = 0; + + LCD_CacheBuffer_yptr_top_bak = 0; + LCD_CacheBuffer_yptr_bottom_bak = 0; + + LCD_CacheBuffer_yptr_invert= ENABLE; + LCD_ScrollActive = DISABLE; + LCD_Lock = DISABLE; + LCD_Scrolled = DISABLE; + LCD_ScrollBackStep = 0; +} + +/** +* @brief Display the application header (title) on the LCD screen +* @param Title : pointer to the string to be displayed +* @retval None +*/ +void LCD_LOG_SetHeader (uint8_t *Title) +{ + sFONT *cFont; + uint32_t size = 0 , idx; + uint8_t *ptr = Title; + uint8_t tmp[27]; + + /* center the header */ + while (*ptr++) size ++ ; + + /* truncate extra text */ + if(size > 26) + { + size = 26; + } + + for (idx = 0 ; idx < 27 ; idx ++) + { + tmp[idx] = ' '; + } + + for (idx = 0 ; idx < size ; idx ++) + { + tmp[idx + (27 - size)/2] = Title[idx]; + } + + /* Clear the LCD */ + LCD_Clear(Black); + + /* Set the LCD Font */ + LCD_SetFont (&Font12x12); + + cFont = LCD_GetFont(); + /* Set the LCD Text Color */ + LCD_SetTextColor(White); + LCD_SetBackColor(Blue); + LCD_ClearLine(0); + LCD_DisplayStringLine(cFont->Height, tmp); + LCD_ClearLine(2 * cFont->Height); + + LCD_SetBackColor(Black); + LCD_SetFont (&Font8x12); +} + +/** +* @brief Display the application footer (status) on the LCD screen +* @param Status : pointer to the string to be displayed +* @retval None +*/ +void LCD_LOG_SetFooter(uint8_t *Status) +{ + sFONT *cFont; + uint8_t tmp[40], i; + LCD_SetBackColor(Blue); + cFont = LCD_GetFont(); + + for (i= 0; i< (320/cFont->Width)-1 ; i++) + { + tmp[i] = ' '; + } + + tmp[(320/cFont->Width)-1] = 0; + LCD_DisplayStringLine(LCD_PIXEL_HEIGHT - cFont->Height, tmp); + LCD_DisplayStringLine(LCD_PIXEL_HEIGHT - cFont->Height, Status); + LCD_SetBackColor(Black); +} + +/** +* @brief Clear the Text Zone +* @param None +* @retval None +*/ +void LCD_LOG_ClearTextZone(void) +{ + uint8_t i=0; + sFONT *cFont = LCD_GetFont(); + + for (i= 0 ; i < YWINDOW_SIZE; i++) + { + LCD_ClearLine((i + YWINDOW_MIN) * cFont->Height); + } + + LCD_LOG_DeInit(); +} + +/** +* @brief Redirect the printf to the lcd +* @param c: character to be displayed +* @param f: output file pointer +* @retval None +*/ +PUTCHAR_PROTOTYPE +{ + + sFONT *cFont = LCD_GetFont(); + uint32_t idx; + + if(LCD_Lock == DISABLE) + { + if((LCD_ScrollActive == ENABLE)||(LCD_ScrollActive == ENABLE)) + { + LCD_CacheBuffer_yptr_bottom = LCD_CacheBuffer_yptr_bottom_bak; + LCD_CacheBuffer_yptr_top = LCD_CacheBuffer_yptr_top_bak; + LCD_ScrollActive = DISABLE; + LCD_Scrolled = DISABLE; + LCD_ScrollBackStep = 0; + + } + + if(( LCD_CacheBuffer_xptr < LCD_PIXEL_WIDTH /cFont->Width ) && ( ch != '\n')) + { + LCD_CacheBuffer[LCD_CacheBuffer_yptr_bottom].line[LCD_CacheBuffer_xptr++] = (uint16_t)ch; + } + else + { + if(LCD_CacheBuffer_yptr_top >= LCD_CacheBuffer_yptr_bottom) + { + + if(LCD_CacheBuffer_yptr_invert == DISABLE) + { + LCD_CacheBuffer_yptr_top++; + + if(LCD_CacheBuffer_yptr_top == LCD_CACHE_DEPTH) + { + LCD_CacheBuffer_yptr_top = 0; + } + } + else + { + LCD_CacheBuffer_yptr_invert= DISABLE; + } + } + + for(idx = LCD_CacheBuffer_xptr ; idx < LCD_PIXEL_WIDTH /cFont->Width; idx++) + { + LCD_CacheBuffer[LCD_CacheBuffer_yptr_bottom].line[LCD_CacheBuffer_xptr++] = ' '; + } + LCD_CacheBuffer[LCD_CacheBuffer_yptr_bottom].color = LCD_LineColor; + + LCD_CacheBuffer_xptr = 0; + + LCD_LOG_UpdateDisplay (); + + LCD_CacheBuffer_yptr_bottom ++; + + if (LCD_CacheBuffer_yptr_bottom == LCD_CACHE_DEPTH) + { + LCD_CacheBuffer_yptr_bottom = 0; + LCD_CacheBuffer_yptr_top = 1; + LCD_CacheBuffer_yptr_invert = ENABLE; + } + + if( ch != '\n') + { + LCD_CacheBuffer[LCD_CacheBuffer_yptr_bottom].line[LCD_CacheBuffer_xptr++] = (uint16_t)ch; + } + + } + } + return ch; +} + +/** +* @brief Update the text area display +* @param None +* @retval None +*/ +static void LCD_LOG_UpdateDisplay (void) +{ + uint8_t cnt = 0 ; + uint16_t length = 0 ; + uint16_t ptr = 0, index = 0; + + sFONT *cFont = LCD_GetFont(); + + if((LCD_CacheBuffer_yptr_bottom < (YWINDOW_SIZE -1)) && + (LCD_CacheBuffer_yptr_bottom >= LCD_CacheBuffer_yptr_top)) + { + LCD_SetTextColor(LCD_CacheBuffer[cnt + LCD_CacheBuffer_yptr_bottom].color); + LCD_DisplayStringLine ((YWINDOW_MIN + LCD_CacheBuffer_yptr_bottom) * cFont->Height, + (uint8_t *)(LCD_CacheBuffer[cnt + LCD_CacheBuffer_yptr_bottom].line)); + } + else + { + + if(LCD_CacheBuffer_yptr_bottom < LCD_CacheBuffer_yptr_top) + { + /* Virtual length for rolling */ + length = LCD_CACHE_DEPTH + LCD_CacheBuffer_yptr_bottom ; + } + else + { + length = LCD_CacheBuffer_yptr_bottom; + } + + ptr = length - YWINDOW_SIZE + 1; + + for (cnt = 0 ; cnt < YWINDOW_SIZE ; cnt ++) + { + + index = (cnt + ptr )% LCD_CACHE_DEPTH ; + + LCD_SetTextColor(LCD_CacheBuffer[index].color); + LCD_DisplayStringLine ((cnt + YWINDOW_MIN) * cFont->Height, + (uint8_t *)(LCD_CacheBuffer[index].line)); + + } + } + +} + +#ifdef LCD_SCROLL_ENABLED +/** +* @brief Display previous text frame +* @param None +* @retval Status +*/ +ErrorStatus LCD_LOG_ScrollBack (void) +{ + + if(LCD_ScrollActive == DISABLE) + { + + LCD_CacheBuffer_yptr_bottom_bak = LCD_CacheBuffer_yptr_bottom; + LCD_CacheBuffer_yptr_top_bak = LCD_CacheBuffer_yptr_top; + + + if(LCD_CacheBuffer_yptr_bottom > LCD_CacheBuffer_yptr_top) + { + + if ((LCD_CacheBuffer_yptr_bottom - LCD_CacheBuffer_yptr_top) <= YWINDOW_SIZE) + { + LCD_Lock = DISABLE; + return ERROR; + } + } + LCD_ScrollActive = ENABLE; + + if((LCD_CacheBuffer_yptr_bottom > LCD_CacheBuffer_yptr_top)&& + (LCD_Scrolled == DISABLE )) + { + LCD_CacheBuffer_yptr_bottom--; + LCD_Scrolled = ENABLE; + } + + } + + if(LCD_ScrollActive == ENABLE) + { + LCD_Lock = ENABLE; + + if(LCD_CacheBuffer_yptr_bottom > LCD_CacheBuffer_yptr_top) + { + + if((LCD_CacheBuffer_yptr_bottom - LCD_CacheBuffer_yptr_top) < YWINDOW_SIZE ) + { + LCD_Lock = DISABLE; + return ERROR; + } + + LCD_CacheBuffer_yptr_bottom --; + } + else if(LCD_CacheBuffer_yptr_bottom <= LCD_CacheBuffer_yptr_top) + { + + if((LCD_CACHE_DEPTH - LCD_CacheBuffer_yptr_top + LCD_CacheBuffer_yptr_bottom) < YWINDOW_SIZE) + { + LCD_Lock = DISABLE; + return ERROR; + } + LCD_CacheBuffer_yptr_bottom --; + + if(LCD_CacheBuffer_yptr_bottom == 0xFFFF) + { + LCD_CacheBuffer_yptr_bottom = LCD_CACHE_DEPTH - 2; + } + } + LCD_ScrollBackStep++; + LCD_LOG_UpdateDisplay(); + LCD_Lock = DISABLE; + } + return SUCCESS; +} + +/** +* @brief Display next text frame +* @param None +* @retval Status +*/ +ErrorStatus LCD_LOG_ScrollForward (void) +{ + + if(LCD_ScrollBackStep != 0) + { + if(LCD_ScrollActive == DISABLE) + { + + LCD_CacheBuffer_yptr_bottom_bak = LCD_CacheBuffer_yptr_bottom; + LCD_CacheBuffer_yptr_top_bak = LCD_CacheBuffer_yptr_top; + + if(LCD_CacheBuffer_yptr_bottom > LCD_CacheBuffer_yptr_top) + { + + if ((LCD_CacheBuffer_yptr_bottom - LCD_CacheBuffer_yptr_top) <= YWINDOW_SIZE) + { + LCD_Lock = DISABLE; + return ERROR; + } + } + LCD_ScrollActive = ENABLE; + + if((LCD_CacheBuffer_yptr_bottom > LCD_CacheBuffer_yptr_top)&& + (LCD_Scrolled == DISABLE )) + { + LCD_CacheBuffer_yptr_bottom--; + LCD_Scrolled = ENABLE; + } + + } + + if(LCD_ScrollActive == ENABLE) + { + LCD_Lock = ENABLE; + LCD_ScrollBackStep--; + + if(++LCD_CacheBuffer_yptr_bottom == LCD_CACHE_DEPTH) + { + LCD_CacheBuffer_yptr_bottom = 0; + } + + LCD_LOG_UpdateDisplay(); + LCD_Lock = DISABLE; + + } + return SUCCESS; + } + else // LCD_ScrollBackStep == 0 + { + LCD_Lock = DISABLE; + return ERROR; + } +} +#endif /* LCD_SCROLL_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/lcd_log.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/lcd_log.h new file mode 100644 index 000000000..4fe101b26 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/lcd_log.h @@ -0,0 +1,160 @@ +/** + ****************************************************************************** + * @file lcd_log.h + * @author MCD Application Team + * @version V5.0.2 + * @date 05-March-2012 + * @brief header for the lcd_log.c file + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __LCD_LOG_H__ +#define __LCD_LOG_H__ + +/* Includes ------------------------------------------------------------------*/ + +#include "lcd_log_conf.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup Common + * @{ + */ + +/** @addtogroup LCD_LOG + * @{ + */ + +/** @defgroup LCD_LOG + * @brief + * @{ + */ + + +/** @defgroup LCD_LOG_Exported_Defines + * @{ + */ +#ifdef __GNUC__ +/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf + set to 'Yes') calls __io_putchar() */ +#define PUTCHAR_PROTOTYPE int __io_putchar(int ch) +#else +#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) +#endif /* __GNUC__ */ + +/** These value can be changed by user */ + +#ifdef LCD_SCROLL_ENABLED + #define LCD_CACHE_DEPTH (YWINDOW_SIZE + CACHE_SIZE) +#else + #define LCD_CACHE_DEPTH YWINDOW_SIZE +#endif +/** + * @} + */ + +/** @defgroup LCD_LOG_Exported_Types + * @{ + */ +typedef struct _LCD_LOG_line +{ + uint8_t line[XWINDOW_MAX]; + uint16_t color; + +}LCD_LOG_line; + +/** + * @} + */ + +/** @defgroup LCD_LOG_Exported_Macros + * @{ + */ +#define LCD_ErrLog(...) LCD_LineColor = Red;\ + printf("ERROR: ") ;\ + printf(__VA_ARGS__);\ + LCD_LineColor = LCD_LOG_DEFAULT_COLOR + +#define LCD_UsrLog(...) LCD_LineColor = LCD_LOG_DEFAULT_COLOR;\ + printf(__VA_ARGS__);\ + + +#define LCD_DbgLog(...) LCD_LineColor = Cyan;\ + printf(__VA_ARGS__);\ + LCD_LineColor = LCD_LOG_DEFAULT_COLOR +/** + * @} + */ + +/** @defgroup LCD_LOG_Exported_Variables + * @{ + */ +extern uint16_t LCD_LineColor; +/** + * @} + */ + +/** @defgroup LCD_LOG_Exported_FunctionsPrototype + * @{ + */ +void LCD_LOG_Init(void); +void LCD_LOG_DeInit(void); +void LCD_LOG_SetHeader(uint8_t *Title); +void LCD_LOG_SetFooter(uint8_t *Status); +void LCD_LOG_ClearTextZone(void); +#ifdef LCD_SCROLL_ENABLED + ErrorStatus LCD_LOG_ScrollBack(void); + ErrorStatus LCD_LOG_ScrollForward(void); +#endif +/** + * @} + */ + + +#endif /* __LCD_LOG_H__ */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/lcd_log_conf_template.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/lcd_log_conf_template.h new file mode 100644 index 000000000..6e8f7e333 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/lcd_log_conf_template.h @@ -0,0 +1,113 @@ +/** + ****************************************************************************** + * @file lcd_log_conf_template.h + * @author MCD Application Team + * @version V5.0.2 + * @date 05-March-2012 + * @brief lcd_log configuration template file. + * This file should be copied to the application folder and modified + * as follows: + * - Rename it to 'lcd_log_conf.h'. + * - Update the name of the LCD header file depending on the EVAL board + * you are using (see line32 below). + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __LCD_LOG_CONF_H__ +#define __LCD_LOG_CONF_H__ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32xxx_eval_lcd.h" /* replace 'stm32xxx' with your EVAL board name, ex: stm3210c_eval_lcd.h */ +#include + +/** @addtogroup LCD_LOG + * @{ + */ + +/** @defgroup LCD_LOG + * @brief This file is the + * @{ + */ + + +/** @defgroup LCD_LOG_CONF_Exported_Defines + * @{ + */ +/* Comment the line below to disable the scroll back and forward features */ +#define LCD_SCROLL_ENABLED + +/* Define the LCD default text color */ +#define LCD_LOG_DEFAULT_COLOR LCD_COLOR_WHITE + +/* Define the display window settings */ +#define YWINDOW_MIN 3 +#define YWINDOW_SIZE 12 +#define XWINDOW_MAX 50 + +/* Define the cache depth */ +#define CACHE_SIZE 50 + +/** @defgroup LCD_LOG_CONF_Exported_TypesDefinitions + * @{ + */ + +/** + * @} + */ + + +/** @defgroup LCD_LOG_Exported_Macros + * @{ + */ + + +/** + * @} + */ + +/** @defgroup LCD_LOG_CONF_Exported_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup LCD_LOG_CONF_Exported_FunctionsPrototype + * @{ + */ + +/** + * @} + */ + + +#endif /* __LCD_LOG_H__ */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/stm32_eval_legacy.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/stm32_eval_legacy.h new file mode 100644 index 000000000..0a50858c5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/Common/stm32_eval_legacy.h @@ -0,0 +1,208 @@ +/** + ****************************************************************************** + * @file stm32_eval_legacy.h + * @author MCD Application Team + * @version V5.0.2 + * @date 05-March-2012 + * @brief This file contains defines legacy for STM32 EVAL drivers. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32_EVAL_LEGACY_H +#define __STM32_EVAL_LEGACY_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* STM322xG_EVAL Defines Legacy */ +#ifdef USE_STM3220F_EVAL + #define USE_STM322xG_EVAL +#endif +#define STM3220F_LCD_Init STM322xG_LCD_Init + +/* Button Defines Legacy */ +#define Button_WAKEUP BUTTON_WAKEUP +#define Button_TAMPER BUTTON_TAMPER +#define Button_KEY BUTTON_KEY +#define Button_RIGHT BUTTON_RIGHT +#define Button_LEFT BUTTON_LEFT +#define Button_UP BUTTON_UP +#define Button_DOWN BUTTON_DOWN +#define Button_SEL BUTTON_SEL +#define Mode_GPIO BUTTON_MODE_GPIO +#define Mode_EXTI BUTTON_MODE_EXTI +#define Button_Mode_TypeDef ButtonMode_TypeDef +#define JOY_CENTER JOY_SEL +#define JOY_State_TypeDef JOYState_TypeDef + +/* LCD Defines Legacy */ +#define LCD_RSNWR_GPIO_CLK LCD_NWR_GPIO_CLK +#define LCD_SPI_GPIO_PORT LCD_SPI_SCK_GPIO_PORT +#define LCD_SPI_GPIO_CLK LCD_SPI_SCK_GPIO_CLK +#define R0 LCD_REG_0 +#define R1 LCD_REG_1 +#define R2 LCD_REG_2 +#define R3 LCD_REG_3 +#define R4 LCD_REG_4 +#define R5 LCD_REG_5 +#define R6 LCD_REG_6 +#define R7 LCD_REG_7 +#define R8 LCD_REG_8 +#define R9 LCD_REG_9 +#define R10 LCD_REG_10 +#define R12 LCD_REG_12 +#define R13 LCD_REG_13 +#define R14 LCD_REG_14 +#define R15 LCD_REG_15 +#define R16 LCD_REG_16 +#define R17 LCD_REG_17 +#define R18 LCD_REG_18 +#define R19 LCD_REG_19 +#define R20 LCD_REG_20 +#define R21 LCD_REG_21 +#define R22 LCD_REG_22 +#define R23 LCD_REG_23 +#define R24 LCD_REG_24 +#define R25 LCD_REG_25 +#define R26 LCD_REG_26 +#define R27 LCD_REG_27 +#define R28 LCD_REG_28 +#define R29 LCD_REG_29 +#define R30 LCD_REG_30 +#define R31 LCD_REG_31 +#define R32 LCD_REG_32 +#define R33 LCD_REG_33 +#define R34 LCD_REG_34 +#define R36 LCD_REG_36 +#define R37 LCD_REG_37 +#define R40 LCD_REG_40 +#define R41 LCD_REG_41 +#define R43 LCD_REG_43 +#define R45 LCD_REG_45 +#define R48 LCD_REG_48 +#define R49 LCD_REG_49 +#define R50 LCD_REG_50 +#define R51 LCD_REG_51 +#define R52 LCD_REG_52 +#define R53 LCD_REG_53 +#define R54 LCD_REG_54 +#define R55 LCD_REG_55 +#define R56 LCD_REG_56 +#define R57 LCD_REG_57 +#define R59 LCD_REG_59 +#define R60 LCD_REG_60 +#define R61 LCD_REG_61 +#define R62 LCD_REG_62 +#define R63 LCD_REG_63 +#define R64 LCD_REG_64 +#define R65 LCD_REG_65 +#define R66 LCD_REG_66 +#define R67 LCD_REG_67 +#define R68 LCD_REG_68 +#define R69 LCD_REG_69 +#define R70 LCD_REG_70 +#define R71 LCD_REG_71 +#define R72 LCD_REG_72 +#define R73 LCD_REG_73 +#define R74 LCD_REG_74 +#define R75 LCD_REG_75 +#define R76 LCD_REG_76 +#define R77 LCD_REG_77 +#define R78 LCD_REG_78 +#define R79 LCD_REG_79 +#define R80 LCD_REG_80 +#define R81 LCD_REG_81 +#define R82 LCD_REG_82 +#define R83 LCD_REG_83 +#define R96 LCD_REG_96 +#define R97 LCD_REG_97 +#define R106 LCD_REG_106 +#define R118 LCD_REG_118 +#define R128 LCD_REG_128 +#define R129 LCD_REG_129 +#define R130 LCD_REG_130 +#define R131 LCD_REG_131 +#define R132 LCD_REG_132 +#define R133 LCD_REG_133 +#define R134 LCD_REG_134 +#define R135 LCD_REG_135 +#define R136 LCD_REG_136 +#define R137 LCD_REG_137 +#define R139 LCD_REG_139 +#define R140 LCD_REG_140 +#define R141 LCD_REG_141 +#define R143 LCD_REG_143 +#define R144 LCD_REG_144 +#define R145 LCD_REG_145 +#define R146 LCD_REG_146 +#define R147 LCD_REG_147 +#define R148 LCD_REG_148 +#define R149 LCD_REG_149 +#define R150 LCD_REG_150 +#define R151 LCD_REG_151 +#define R152 LCD_REG_152 +#define R153 LCD_REG_153 +#define R154 LCD_REG_154 +#define R157 LCD_REG_157 +#define R192 LCD_REG_192 +#define R193 LCD_REG_193 +#define R227 LCD_REG_227 +#define R229 LCD_REG_229 +#define R231 LCD_REG_231 +#define R239 LCD_REG_239 +#define White LCD_COLOR_WHITE +#define Black LCD_COLOR_BLACK +#define Grey LCD_COLOR_GREY +#define Blue LCD_COLOR_BLUE +#define Blue2 LCD_COLOR_BLUE2 +#define Red LCD_COLOR_RED +#define Magenta LCD_COLOR_MAGENTA +#define Green LCD_COLOR_GREEN +#define Cyan LCD_COLOR_CYAN +#define Yellow LCD_COLOR_YELLOW +#define Line0 LCD_LINE_0 +#define Line1 LCD_LINE_1 +#define Line2 LCD_LINE_2 +#define Line3 LCD_LINE_3 +#define Line4 LCD_LINE_4 +#define Line5 LCD_LINE_5 +#define Line6 LCD_LINE_6 +#define Line7 LCD_LINE_7 +#define Line8 LCD_LINE_8 +#define Line9 LCD_LINE_9 +#define Horizontal LCD_DIR_HORIZONTAL +#define Vertical LCD_DIR_VERTICAL + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32_EVAL_LEGACY_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/Release_Notes.html b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/Release_Notes.html new file mode 100644 index 000000000..606cb0238 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/Release_Notes.html @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + Release Notes for STM322xG_EVAL Evaluation Board Drivers + + + + + + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
+

Back to Release page

+
+

Release +Notes for STM322xG_EVAL Evaluation Board Drivers

+

Copyright +2012 STMicroelectronics

+

+
+

 

+ + + + + + +
+

Contents

+
    +
  1. STM322xG_EVAL Evaluation Board Drivers +update History
  2. +
  3. License
  4. +
+ + +

STM322xG_EVAL Evaluation Board Drivers update History

V5.0.3 / 05-March-2012

+

Main +Changes

+ +
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • stm322xg_eval_lcd.c
    • Enhance Gamma Curve settings for ILI9320 controller 
  • stm322xg_eval.c and stm322xg_eval_ioe.c
    • Swap +the order of I2C IOs and alternate function (AF) +configuration: AF configuration should be done before to configure the +IOs.
  • stm322xg_eval_sdio_sd.c
    • In SD_WaitWriteOperation() and SD_WaitReadOperation() functions: reset StopCondition flag after sending CMD12

V5.0.2 / 28-December-2011

Main +Changes

+
  • All source files: update disclaimer to add reference to the new license agreement
  • stm322xg_eval_lcd.c
    • Remove “static” from TextColor and BackColor variables declaration (need to be changed from other application modules) 
  • stm322xg_eval_ioe.h
    • Add +conditional compilation on the default DMA stream(s) used for I2C1 Tx +and Rx transfers, to allow user to change them from application level.

V5.0.1 / 14-November-2011

+

Main +Changes

+ +
  • stm322xg_eval_sdio_sd.h
    • SD_CardInfo structure, define CardCapacity variable as 64-bit long (instead of 32-bit)  to support SDHC memory cards with capacity greater than 4 GB.

V5.0.0 / 07-October-2011

+

Main +Changes

+ +
  • Update STM32 Evaluation Board Drivers architecture and folder organization, full API compatibility maintained vs. V4.6.2
    • All the HW drivers required for each board are provided within this board folder. The concerned drivers are:
      • stm32_eval_i2c_ee.c\.h: I2C M24Cxx EEPROM memory driver
      • stm32_eval_i2c_tsensor.c\.h: I2C LM75 temperature sensor driver
      • stm32_eval_spi_flash.c\.h: SPI M25Pxxx FLASH memory driver
      • stm32_eval_sdio_sd.c\.h: SDIO SD Card memory driver
      • stm32_eval_spi_sd.c\.h: SPI SD Card memory driver 
      • These drivers were moved from \Common to \STM32XXX_EVAL folder(s)
    • \Common folder contains only drivers for the fonts and log module used by the LCD driver
    • stm32_eval.c\.h files removed, as consequence you need to perform the following update on your project configuration  (based on EVAL drivers V4.6.2):
      • In the project files, add your EVAL board driver source file "stm322xg_eval.c" instead of "stm32_eval.c"
      • Include your EVAL board driver header file #include "stm322xg_eval.h" instead of #include "stm32_eval.h"
      • If +you are using the EVAL board's LCD, you need to add the include of +the LCD header file #include "stm322xg_eval_lcd.h"
        • If +you are using the LCD log module, after copying it to the application +folder you have to edit it and update the name of the LCD header file. For more details, refer to the lcd_log_conf_template.h driver description.
    • stm322xg_eval.h/.c
      • change value of “SDIO_TRANSFER_CLK_DIV” define from 2 to 0 to achieve SD max frequency at 24MHz.
      • Remove SD_DMAEndOfTransferStatus() function as now the DMA transfer is tracked using DMA End of transfer interrupt.
      • Add new define for the SDIO's DMA2 Stream (3 or 6): SD_SDIO_DMA_IRQn and SD_SDIO_DMA_IRQHANDLER.
    • stm322xg_eval_sdio_sd.h/.c
      • Add new function SD_ProcessDMAIRQ() to be called from the DMA end of transfer interrupt. 
      • Add some improvements by handling SDIO errors and adding timeout for different loops.
      • Refer to the driver header file's comments for more information on how to use the provided API.
    • stm322xg_eval_fsmc_sram.c
      • Add IOs config of missing FSMC address lines (FSMC_A21, FSMC_A22 and FSMC_A23).

V4.6.2 / 22-July-2011

+

Main +Changes

+ +
  • STM3210C_EVAL
    • stm3210c_eval_lcd.c: update to support new LCD AM240320D5TOQW01H (controller ILI9325)
  • STM322xG-EVAL
    • stm322xg_eval.h: fix value of the SDIO clock divider (SDIO_TRANSFER_CLK_DIV constant) to 2 instead of 0
    • stm322xg_eval_lcd.c: increase FSMC AddressSetupTime value from 1 to 3 to be compliant with some LCD access timing
    • stm322xg_eval_audio_codec.c: update Codec_CtrlInterface_Init() and Codec_GPIO_Init() functions to not reconfigure the I2C peripheral if it's already enabled and configured (to +avoid configuring the I2C twice when using both Audio codec and IO +Expander drivers in the same application).

V4.6.1 / 18-April-2011

+

Main +Changes

+ +
  • Update some STM322xG_EVAL drivers (no change on the API) to fix warnings with TASKING C compiler.
  • Change the Release Notes name to STM32 Evaluation Board Drivers
  • stm322xg_eval.c
    • SD_LowLevel_Init(): change SDIO pins speed configuration to "GPIO_Speed_25MHz"

V4.6.0 / 11-March-2011

+

Main +Changes

+ +
  • Official version supporting STM322xG_EVAL evaluation board RevB (for STM32F2xx devices).
  • Common
    • Add +new LCD log utility drivers: The LCD Log module allows to automatically +set a header and footer on any application using the LCD display and +allows to dump user, debug and error messages by using the following +macros: LCD_ErrLog(),    LCD_UsrLog() and LCD_DbgLog().
Note: the STM322xG_EVAL board RevA was wrongly named STM3220F_EVAL

V4.5.0 / 07-March-2011

+

Main +Changes

+ +
  • stm32_eval_sdio_sd.c\.h: driver improvement
    • SD Clock increased to 24MHz to improve the data transfer performance.
    • Add +new functions to check the SDIO peripheral and SD Card status at any +time: SD_WaitReadOperation(), SD_WaitWriteOperation(). The +software sequence is little bit changed but without any impact on +driver API. For more details, refer to the stm32_eval_sdio_sd.c +driver description.
    • Add +new structure containing the SD Status register parameters. This +structure is called by the +         + SD_SendSDStatus() function.
    • Transfers mode updated
      • Read/Write Block using Polling and DMA modes
      • Read/Write Multi Blocks using DMA mode only
      • Interrupt mode removed
    • Data transfer functions are managing only fixed Block size (512-byte) 
  • STM32100B-EVAL
    • stm32100b_eval_cec.c: fix some strict ANSI-C errors
  • STM32100E-EVAL
    • stm32100e_eval_cec.c: fix some strict ANSI-C errors
+

V4.4.0 / 31-December-2010

+

Main +Changes

+ +
  • Add new directory for STM32L152-EVAL board containing the following files:
    • stm32l152_eval.h/.c, stm32l152_eval_lcd.h/.c, stm32l152_eval_glass_lcd.h/.c, stm32l152_eval_i2c_ee.h/.c
  • Add support for the STM32100E-EVAL Rev B: SPI FLASH CS pin "sFLASH_CS_PIN" changed from PB.02 to PE.06.
  • stm32100e_eval_lcd.h/.c: Add support for "LCD_ILI9325" LCD controller.
  • stm32100e_eval_fsmc_onenand.h/.c driver updated to correct asynchronous and synchronous read operations procedures.
    +
+ +

4.3.0 +- 10/15/2010

+
  1. General
+ +
  • I2C EEPROM, Temperature Sensor and IOE Expander drivers updated to use the DMA for read/write transfer and add more robustness
  • SD Card (SDIO) driver updated to add more robustness
  • SPI Flash and SD Card (SPI) drivers: SPI MISO pin configuration changed to Input Floating 
+ + + +
  1. Utilities
+ + + + + +
  • Add new directory for STM32100E-EVAL board containing the following files:
    • stm32100e_eval.h/.c, +stm32100e_eval_lcd.h/.c, stm32100e_eval_cec.h/.c, +stm32100e_eval_fsmc_onenand.h/.c, stm32100e_eval_fsmc_sram.h/.c, +stm32100e_eval_ioe.h/.c
      +
  • Common
    • stm32_eval_sdio_sd.c: +Update the DMA End of Transfer Check loop inside the SD_ReadBlock(), +SD_WriteBlock(), SD_ReadMultiBlocks() and SD_Write MultiBlocks().
    • stm32_eval_i2c_ee.c/.h
      +
      • Enhanced sEE_WaitEepromStandbyState() function for more robustness.
      • Enhanced Read and Write operations to manage I2C limitations.
      • Add Timeout management with user callback implementation which allows recovering from I2C bus errors.
      • Add +critical sections user callbacks allowing to disable then enable +interrupts when I2C operation require to be not interrupted.
    • stm32_eval_i2c_tsensor.c/.h
      +
      • Enhanced I2C communication functions by using DMA for registers Read and Write operations.
      • Add Timeout management with user callback implementation which allows recovering from I2C bus errors.
  • STM32100B_EVAL
    • stm32100b_eval.h: Add LM75 DMA defines.
    • stm32100b_eval_lcd.c: Change "SPI_FLASH" by "sFLASH" in LCD_DrawBMP() function.
  • STM3210B_EVAL
    • stm3210b_eval.h: Add LM75 DMA defines.
    • stm3210b_eval_lcd.c: Change "SPI_FLASH" by "sFLASH" in LCD_DrawBMP() function.
  • STM3210C_EVAL
    • stm3210c_eval.h: Add EEPROM driver Timeout define.
    • stm3210c_eval_lcd.c: Change "SPI_FLASH" by "sFLASH" in LCD_DrawBMP() function.
    • stm3210c_eval_i2c_ioe.c
      • Enhanced I2C communication functions by using DMA for registers Read and Write operations.
      • Add Timeout management with user callback implementation which allows recovering from I2C bus errors.
      • change IOE_I2C_SPEED from "400000" to "300000".
  • STM3210E_EVAL
    • stm3210e_eval.c: change "void SD_WaitForDMAEndOfTransfer(void)" to "uint32_t SD_DMAEndOfTransferStatus(void)".
    • stm3210e_eval.h: Add LM75 DMA defines.
    • stm3210e_eval_fsmc_nand.h: remove "NAND_CMD_AREA_TRUE1" define.
    • stm3210e_eval_fsmc_nand.c: Update FSMC timing in NAND_Init() function to be aligned with AN2784 application note.
    • stm3210e_eval_fsmc_nor.c
      • NOR_Init() function: add FSMC_AsynchronousWait field to FSMC_NORSRAMInitStructure 
    • stm3210e_eval_fsmc_sram.c
      +
      • Update FSMC timing in SRAM_Init() function to be aligned with AN2784 application note.
        +
      • SRAM_Init() function: add FSMC_AsynchronousWait field to FSMC_NORSRAMInitStructure 
    • stm3210e_eval_lcd.c
      • LCD_FSMCConfig() function: add FSMC_AsynchronousWait field to FSMC_NORSRAMInitStructure 
+ + +

4.2.0 +- 04/16/2010

+
  1. General
+ +
  • I2C EEPROM driver +update to use the DMA to +perform data transfer to/from EEPROM memory.
+ +
  1. Utilities
+
  • STM32_EVAL
+
    • stm32_eval_i2c_ee.c: +updated to use the DMA to perform data transfer to/from +EEPROM memory. For more details, refer to the description provided +within this file.
    • stm3210c_eval.c: add low level +functions to configure the DMA (needed for I2C EEPROM driver)
      +
    • stm3210c_eval_ioe.c: add a delay +in IOE_TS_GetState() function to wait till the end of ADC +conversion
    • stm3210e_eval_fsmc_nor.c: add PD6 pin configuration in +NOR_Init() function
    • stm3210b_eval_lcd.c: remove the +second ";" from "static void PutPixel(int16_t x, int16_t y);;" 
+

4.1.0 +- 03/01/2010

+
  1. General
+
  • Add support +for STM32 Low-density Value line (STM32F100x4/6) and +Medium-density Value line (STM32F100x8/B) devices.
  • Add support for the +STMicroelectronics STM32100B-EVAL evaluation board.
+
  1. Utilities
+
  • STM32_EVAL
+
  • Add new directory +"Common" containing a common drivers for all STM32 evaluation boards: +fonts.h/.c, stm32_eval_i2c_ee.h/.c, stm32_eval_spi_flash.h/.c, + stm32_eval_i2c_tsensor.h/.c, + stm32_eval_spi_sd.h/.c +and stm32_eval_sdio_sd.h/.c
  • Add new driver for the +STM32100B-EVAL managing Leds, push button and COM ports.
  • New HDMI CEC High level +driver.
    +
  • For all LCD drivers new fonts has +been added.
  • New FSMC memories +drivers for STM3210E-EVAL board: stm3210e_eval_fsmc_sram.h/.c, stm3210e_eval_fsmc_nor.h/.c +and stm3210e_eval_fsmc_nand.h/.c.

License

+

Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this package except in compliance with the License. You may obtain a copy of the License at:


Unless +required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See +the License for the specific language governing permissions and +limitations under the License.
+ +
+
+

For +complete documentation on STM32 Microcontrollers +visit www.st.com/STM32

+
+

+
+
+

 

+
+ + \ No newline at end of file diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval.c new file mode 100644 index 000000000..9b76f0a5b --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval.c @@ -0,0 +1,737 @@ +/** + ****************************************************************************** + * @file stm322xg_eval.c + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file provides + * - set of firmware functions to manage Leds, push-button and COM ports + * - low level initialization functions for SD card (on SDIO) and + * serial EEPROM (sEE) + * available on STM322xG-EVAL evaluation board(MB786) RevA and RevB + * from STMicroelectronics. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" +#include "stm32f2xx_sdio.h" +#include "stm32f2xx_dma.h" +#include "stm32f2xx_i2c.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @defgroup STM322xG_EVAL_LOW_LEVEL + * @brief This file provides firmware functions to manage Leds, push-buttons, + * COM ports, SD card on SDIO and serial EEPROM (sEE) available on + * STM322xG-EVAL evaluation board from STMicroelectronics. + * @{ + */ + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Private_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Private_Variables + * @{ + */ +GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT, + LED4_GPIO_PORT}; +const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN, + LED4_PIN}; +const uint32_t GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK, LED3_GPIO_CLK, + LED4_GPIO_CLK}; + +GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, TAMPER_BUTTON_GPIO_PORT, + KEY_BUTTON_GPIO_PORT}; + +const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, TAMPER_BUTTON_PIN, + KEY_BUTTON_PIN}; + +const uint32_t BUTTON_CLK[BUTTONn] = {WAKEUP_BUTTON_GPIO_CLK, TAMPER_BUTTON_GPIO_CLK, + KEY_BUTTON_GPIO_CLK}; + +const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {WAKEUP_BUTTON_EXTI_LINE, + TAMPER_BUTTON_EXTI_LINE, + KEY_BUTTON_EXTI_LINE}; + +const uint8_t BUTTON_PORT_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PORT_SOURCE, + TAMPER_BUTTON_EXTI_PORT_SOURCE, + KEY_BUTTON_EXTI_PORT_SOURCE}; + +const uint8_t BUTTON_PIN_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PIN_SOURCE, + TAMPER_BUTTON_EXTI_PIN_SOURCE, + KEY_BUTTON_EXTI_PIN_SOURCE}; +const uint8_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, TAMPER_BUTTON_EXTI_IRQn, + KEY_BUTTON_EXTI_IRQn}; + +USART_TypeDef* COM_USART[COMn] = {EVAL_COM1}; + +GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT}; + +GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT}; + +const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK}; + +const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK}; + +const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK}; + +const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN}; + +const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN}; + +const uint8_t COM_TX_PIN_SOURCE[COMn] = {EVAL_COM1_TX_SOURCE}; + +const uint8_t COM_RX_PIN_SOURCE[COMn] = {EVAL_COM1_RX_SOURCE}; + +const uint8_t COM_TX_AF[COMn] = {EVAL_COM1_TX_AF}; + +const uint8_t COM_RX_AF[COMn] = {EVAL_COM1_RX_AF}; + +DMA_InitTypeDef sEEDMA_InitStructure; +NVIC_InitTypeDef NVIC_InitStructure; + +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Private_Functions + * @{ + */ + +/** + * @brief Configures LED GPIO. + * @param Led: Specifies the Led to be configured. + * This parameter can be one of following parameters: + * @arg LED1 + * @arg LED2 + * @arg LED3 + * @arg LED4 + * @retval None + */ +void STM_EVAL_LEDInit(Led_TypeDef Led) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable the GPIO_LED Clock */ + RCC_AHB1PeriphClockCmd(GPIO_CLK[Led], ENABLE); + + + /* Configure the GPIO_LED pin */ + GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led]; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure); +} + +/** + * @brief Turns selected LED On. + * @param Led: Specifies the Led to be set on. + * This parameter can be one of following parameters: + * @arg LED1 + * @arg LED2 + * @arg LED3 + * @arg LED4 + * @retval None + */ +void STM_EVAL_LEDOn(Led_TypeDef Led) +{ + GPIO_PORT[Led]->BSRRL = GPIO_PIN[Led]; +} + +/** + * @brief Turns selected LED Off. + * @param Led: Specifies the Led to be set off. + * This parameter can be one of following parameters: + * @arg LED1 + * @arg LED2 + * @arg LED3 + * @arg LED4 + * @retval None + */ +void STM_EVAL_LEDOff(Led_TypeDef Led) +{ + GPIO_PORT[Led]->BSRRH = GPIO_PIN[Led]; +} + +/** + * @brief Toggles the selected LED. + * @param Led: Specifies the Led to be toggled. + * This parameter can be one of following parameters: + * @arg LED1 + * @arg LED2 + * @arg LED3 + * @arg LED4 + * @retval None + */ +void STM_EVAL_LEDToggle(Led_TypeDef Led) +{ + GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led]; +} + +/** + * @brief Configures Button GPIO and EXTI Line. + * @param Button: Specifies the Button to be configured. + * This parameter can be one of following parameters: + * @arg BUTTON_WAKEUP: Wakeup Push Button + * @arg BUTTON_TAMPER: Tamper Push Button + * @arg BUTTON_KEY: Key Push Button + * @arg BUTTON_RIGHT: Joystick Right Push Button + * @arg BUTTON_LEFT: Joystick Left Push Button + * @arg BUTTON_UP: Joystick Up Push Button + * @arg BUTTON_DOWN: Joystick Down Push Button + * @arg BUTTON_SEL: Joystick Sel Push Button + * @param Button_Mode: Specifies Button mode. + * This parameter can be one of following parameters: + * @arg BUTTON_MODE_GPIO: Button will be used as simple IO + * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt + * generation capability + * @retval None + */ +void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode) +{ + GPIO_InitTypeDef GPIO_InitStructure; + EXTI_InitTypeDef EXTI_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + + /* Enable the BUTTON Clock */ + RCC_AHB1PeriphClockCmd(BUTTON_CLK[Button], ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + + /* Configure Button pin as input */ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button]; + GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure); + + + if (Button_Mode == BUTTON_MODE_EXTI) + { + /* Connect Button EXTI Line to Button GPIO Pin */ + SYSCFG_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]); + + /* Configure Button EXTI line */ + EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button]; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + + if(Button != BUTTON_WAKEUP) + { + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; + } + else + { + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + } + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Enable and set Button EXTI Interrupt to the lowest priority */ + NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button]; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + + NVIC_Init(&NVIC_InitStructure); + } +} + +/** + * @brief Returns the selected Button state. + * @param Button: Specifies the Button to be checked. + * This parameter can be one of following parameters: + * @arg BUTTON_WAKEUP: Wakeup Push Button + * @arg BUTTON_TAMPER: Tamper Push Button + * @arg BUTTON_KEY: Key Push Button + * @arg BUTTON_RIGHT: Joystick Right Push Button + * @arg BUTTON_LEFT: Joystick Left Push Button + * @arg BUTTON_UP: Joystick Up Push Button + * @arg BUTTON_DOWN: Joystick Down Push Button + * @arg BUTTON_SEL: Joystick Sel Push Button + * @retval The Button GPIO pin value. + */ +uint32_t STM_EVAL_PBGetState(Button_TypeDef Button) +{ + return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]); +} + + +/** + * @brief Configures COM port. + * @param COM: Specifies the COM port to be configured. + * This parameter can be one of following parameters: + * @arg COM1 + * @arg COM2 + * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that + * contains the configuration information for the specified USART peripheral. + * @retval None + */ +void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable GPIO clock */ + RCC_AHB1PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM], ENABLE); + + if (COM == COM1) + { + /* Enable UART clock */ + RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE); + } + + /* Connect PXx to USARTx_Tx*/ + GPIO_PinAFConfig(COM_TX_PORT[COM], COM_TX_PIN_SOURCE[COM], COM_TX_AF[COM]); + + /* Connect PXx to USARTx_Rx*/ + GPIO_PinAFConfig(COM_RX_PORT[COM], COM_RX_PIN_SOURCE[COM], COM_RX_AF[COM]); + + /* Configure USART Tx as alternate function */ + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + + GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM]; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure); + + /* Configure USART Rx as alternate function */ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM]; + GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure); + + /* USART configuration */ + USART_Init(COM_USART[COM], USART_InitStruct); + + /* Enable USART */ + USART_Cmd(COM_USART[COM], ENABLE); +} + +/** + * @brief DeInitializes the SDIO interface. + * @param None + * @retval None + */ +void SD_LowLevel_DeInit(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /*!< Disable SDIO Clock */ + SDIO_ClockCmd(DISABLE); + + /*!< Set Power State to OFF */ + SDIO_SetPowerState(SDIO_PowerState_OFF); + + /*!< DeInitializes the SDIO peripheral */ + SDIO_DeInit(); + + /* Disable the SDIO APB2 Clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, DISABLE); + + GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_MCO); + + /* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* Configure PD.02 CMD line */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; + GPIO_Init(GPIOD, &GPIO_InitStructure); + + /* Configure PC.12 pin: CLK pin */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; + GPIO_Init(GPIOC, &GPIO_InitStructure); +} + +/** + * @brief Initializes the SD Card and put it into StandBy State (Ready for + * data transfer). + * @param None + * @retval None + */ +void SD_LowLevel_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* GPIOC and GPIOD Periph clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | SD_DETECT_GPIO_CLK, ENABLE); + + GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_SDIO); + + /* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* Configure PD.02 CMD line */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; + GPIO_Init(GPIOD, &GPIO_InitStructure); + + /* Configure PC.12 pin: CLK pin */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */ + GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure); + + /* Enable the SDIO APB2 Clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE); + + /* Enable the DMA2 Clock */ + RCC_AHB1PeriphClockCmd(SD_SDIO_DMA_CLK, ENABLE); +} + +/** + * @brief Configures the DMA2 Channel4 for SDIO Tx request. + * @param BufferSRC: pointer to the source buffer + * @param BufferSize: buffer size + * @retval None + */ +void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize) +{ + DMA_InitTypeDef SDDMA_InitStructure; + + DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_FEIF | SD_SDIO_DMA_FLAG_DMEIF | SD_SDIO_DMA_FLAG_TEIF | SD_SDIO_DMA_FLAG_HTIF | SD_SDIO_DMA_FLAG_TCIF); + + /* DMA2 Stream3 or Stream6 disable */ + DMA_Cmd(SD_SDIO_DMA_STREAM, DISABLE); + + /* DMA2 Stream3 or Stream6 Config */ + DMA_DeInit(SD_SDIO_DMA_STREAM); + + SDDMA_InitStructure.DMA_Channel = SD_SDIO_DMA_CHANNEL; + SDDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS; + SDDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)BufferSRC; + SDDMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + SDDMA_InitStructure.DMA_BufferSize = 0; + SDDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + SDDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + SDDMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + SDDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + SDDMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + SDDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + SDDMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + SDDMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + SDDMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_INC4; + SDDMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_INC4; + DMA_Init(SD_SDIO_DMA_STREAM, &SDDMA_InitStructure); + DMA_ITConfig(SD_SDIO_DMA_STREAM, DMA_IT_TC, ENABLE); + DMA_FlowControllerConfig(SD_SDIO_DMA_STREAM, DMA_FlowCtrl_Peripheral); + + /* DMA2 Stream3 or Stream6 enable */ + DMA_Cmd(SD_SDIO_DMA_STREAM, ENABLE); + +} + +/** + * @brief Configures the DMA2 Channel4 for SDIO Rx request. + * @param BufferDST: pointer to the destination buffer + * @param BufferSize: buffer size + * @retval None + */ +void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize) +{ + DMA_InitTypeDef SDDMA_InitStructure; + + DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_FEIF | SD_SDIO_DMA_FLAG_DMEIF | SD_SDIO_DMA_FLAG_TEIF | SD_SDIO_DMA_FLAG_HTIF | SD_SDIO_DMA_FLAG_TCIF); + + /* DMA2 Stream3 or Stream6 disable */ + DMA_Cmd(SD_SDIO_DMA_STREAM, DISABLE); + + /* DMA2 Stream3 or Stream6 Config */ + DMA_DeInit(SD_SDIO_DMA_STREAM); + + SDDMA_InitStructure.DMA_Channel = SD_SDIO_DMA_CHANNEL; + SDDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS; + SDDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)BufferDST; + SDDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + SDDMA_InitStructure.DMA_BufferSize = 0; + SDDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + SDDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + SDDMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + SDDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + SDDMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + SDDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + SDDMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + SDDMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + SDDMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_INC4; + SDDMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_INC4; + DMA_Init(SD_SDIO_DMA_STREAM, &SDDMA_InitStructure); + DMA_ITConfig(SD_SDIO_DMA_STREAM, DMA_IT_TC, ENABLE); + DMA_FlowControllerConfig(SD_SDIO_DMA_STREAM, DMA_FlowCtrl_Peripheral); + + /* DMA2 Stream3 or Stream6 enable */ + DMA_Cmd(SD_SDIO_DMA_STREAM, ENABLE); +} + +/** + * @brief DeInitializes peripherals used by the I2C EEPROM driver. + * @param None + * @retval None + */ +void sEE_LowLevel_DeInit(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* sEE_I2C Peripheral Disable */ + I2C_Cmd(sEE_I2C, DISABLE); + + /* sEE_I2C DeInit */ + I2C_DeInit(sEE_I2C); + + /*!< sEE_I2C Periph clock disable */ + RCC_APB1PeriphClockCmd(sEE_I2C_CLK, DISABLE); + + /*!< GPIO configuration */ + /*!< Configure sEE_I2C pins: SCL */ + GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure); + + /*!< Configure sEE_I2C pins: SDA */ + GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN; + GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure); + + /* Configure and enable I2C DMA TX Stream interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_TX_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO; + NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Configure and enable I2C DMA RX Stream interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_RX_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO; + NVIC_Init(&NVIC_InitStructure); + + /* Disable and Deinitialize the DMA Streams */ + DMA_Cmd(sEE_I2C_DMA_STREAM_TX, DISABLE); + DMA_Cmd(sEE_I2C_DMA_STREAM_RX, DISABLE); + DMA_DeInit(sEE_I2C_DMA_STREAM_TX); + DMA_DeInit(sEE_I2C_DMA_STREAM_RX); +} + +/** + * @brief Initializes peripherals used by the I2C EEPROM driver. + * @param None + * @retval None + */ +void sEE_LowLevel_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /*!< sEE_I2C Periph clock enable */ + RCC_APB1PeriphClockCmd(sEE_I2C_CLK, ENABLE); + + /*!< sEE_I2C_SCL_GPIO_CLK and sEE_I2C_SDA_GPIO_CLK Periph clock enable */ + RCC_AHB1PeriphClockCmd(sEE_I2C_SCL_GPIO_CLK | sEE_I2C_SDA_GPIO_CLK, ENABLE); + + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + + /* Reset sEE_I2C IP */ + RCC_APB1PeriphResetCmd(sEE_I2C_CLK, ENABLE); + + /* Release reset signal of sEE_I2C IP */ + RCC_APB1PeriphResetCmd(sEE_I2C_CLK, DISABLE); + + /*!< GPIO configuration */ + /* Connect PXx to I2C_SCL*/ + GPIO_PinAFConfig(sEE_I2C_SCL_GPIO_PORT, sEE_I2C_SCL_SOURCE, sEE_I2C_SCL_AF); + /* Connect PXx to I2C_SDA*/ + GPIO_PinAFConfig(sEE_I2C_SDA_GPIO_PORT, sEE_I2C_SDA_SOURCE, sEE_I2C_SDA_AF); + + /*!< Configure sEE_I2C pins: SCL */ + GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure); + /*!< Configure sEE_I2C pins: SDA */ + GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN; + GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure); + + + /* Configure and enable I2C DMA TX Channel interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_TX_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Configure and enable I2C DMA RX Channel interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_RX_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO; + NVIC_Init(&NVIC_InitStructure); + + /*!< I2C DMA TX and RX channels configuration */ + /* Enable the DMA clock */ + RCC_AHB1PeriphClockCmd(sEE_I2C_DMA_CLK, ENABLE); + + /* Clear any pending flag on Rx Stream */ + DMA_ClearFlag(sEE_I2C_DMA_STREAM_TX, sEE_TX_DMA_FLAG_FEIF | sEE_TX_DMA_FLAG_DMEIF | sEE_TX_DMA_FLAG_TEIF | \ + sEE_TX_DMA_FLAG_HTIF | sEE_TX_DMA_FLAG_TCIF); + /* Disable the EE I2C Tx DMA stream */ + DMA_Cmd(sEE_I2C_DMA_STREAM_TX, DISABLE); + /* Configure the DMA stream for the EE I2C peripheral TX direction */ + DMA_DeInit(sEE_I2C_DMA_STREAM_TX); + sEEDMA_InitStructure.DMA_Channel = sEE_I2C_DMA_CHANNEL; + sEEDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)sEE_I2C_DR_Address; + sEEDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)0; /* This parameter will be configured durig communication */; + sEEDMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; /* This parameter will be configured durig communication */ + sEEDMA_InitStructure.DMA_BufferSize = 0xFFFF; /* This parameter will be configured durig communication */ + sEEDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + sEEDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + sEEDMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + sEEDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + sEEDMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + sEEDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + sEEDMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + sEEDMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + sEEDMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + sEEDMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(sEE_I2C_DMA_STREAM_TX, &sEEDMA_InitStructure); + + /* Clear any pending flag on Rx Stream */ + DMA_ClearFlag(sEE_I2C_DMA_STREAM_RX, sEE_RX_DMA_FLAG_FEIF | sEE_RX_DMA_FLAG_DMEIF | sEE_RX_DMA_FLAG_TEIF | \ + sEE_RX_DMA_FLAG_HTIF | sEE_RX_DMA_FLAG_TCIF); + /* Disable the EE I2C DMA Rx stream */ + DMA_Cmd(sEE_I2C_DMA_STREAM_RX, DISABLE); + /* Configure the DMA stream for the EE I2C peripheral RX direction */ + DMA_DeInit(sEE_I2C_DMA_STREAM_RX); + DMA_Init(sEE_I2C_DMA_STREAM_RX, &sEEDMA_InitStructure); + + /* Enable the DMA Channels Interrupts */ + DMA_ITConfig(sEE_I2C_DMA_STREAM_TX, DMA_IT_TC, ENABLE); + DMA_ITConfig(sEE_I2C_DMA_STREAM_RX, DMA_IT_TC, ENABLE); +} + +/** + * @brief Initializes DMA channel used by the I2C EEPROM driver. + * @param None + * @retval None + */ +void sEE_LowLevel_DMAConfig(uint32_t pBuffer, uint32_t BufferSize, uint32_t Direction) +{ + /* Initialize the DMA with the new parameters */ + if (Direction == sEE_DIRECTION_TX) + { + /* Configure the DMA Tx Stream with the buffer address and the buffer size */ + sEEDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)pBuffer; + sEEDMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + sEEDMA_InitStructure.DMA_BufferSize = (uint32_t)BufferSize; + DMA_Init(sEE_I2C_DMA_STREAM_TX, &sEEDMA_InitStructure); + } + else + { + /* Configure the DMA Rx Stream with the buffer address and the buffer size */ + sEEDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)pBuffer; + sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + sEEDMA_InitStructure.DMA_BufferSize = (uint32_t)BufferSize; + DMA_Init(sEE_I2C_DMA_STREAM_RX, &sEEDMA_InitStructure); + } +} + +/** + * @} + */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval.h new file mode 100644 index 000000000..52e633317 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval.h @@ -0,0 +1,373 @@ +/** + ****************************************************************************** + * @file stm322xg_eval.h + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file contains definitions for STM322xG_EVAL's Leds, push-buttons + * and COM ports hardware resources. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM322xG_EVAL_H +#define __STM322xG_EVAL_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f2xx.h" +#include "stm32_eval_legacy.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_LOW_LEVEL + * @{ + */ + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Exported_Types + * @{ + */ +typedef enum +{ + LED1 = 0, + LED2 = 1, + LED3 = 2, + LED4 = 3 +} Led_TypeDef; + +typedef enum +{ + BUTTON_WAKEUP = 0, + BUTTON_TAMPER = 1, + BUTTON_KEY = 2, + BUTTON_RIGHT = 3, + BUTTON_LEFT = 4, + BUTTON_UP = 5, + BUTTON_DOWN = 6, + BUTTON_SEL = 7 +} Button_TypeDef; + +typedef enum +{ + BUTTON_MODE_GPIO = 0, + BUTTON_MODE_EXTI = 1 +} ButtonMode_TypeDef; + +typedef enum +{ + JOY_NONE = 0, + JOY_SEL = 1, + JOY_DOWN = 2, + JOY_LEFT = 3, + JOY_RIGHT = 4, + JOY_UP = 5 +} JOYState_TypeDef +; + +typedef enum +{ + COM1 = 0, + COM2 = 1 +} COM_TypeDef; +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Exported_Constants + * @{ + */ + +/** + * @brief Define for STM322xG_EVAL board + */ +#if !defined (USE_STM322xG_EVAL) + #define USE_STM322xG_EVAL +#endif + +/** @addtogroup STM322xG_EVAL_LOW_LEVEL_LED + * @{ + */ +#define LEDn 4 + +#define LED1_PIN GPIO_Pin_6 +#define LED1_GPIO_PORT GPIOG +#define LED1_GPIO_CLK RCC_AHB1Periph_GPIOG + +#define LED2_PIN GPIO_Pin_8 +#define LED2_GPIO_PORT GPIOG +#define LED2_GPIO_CLK RCC_AHB1Periph_GPIOG + +#define LED3_PIN GPIO_Pin_9 +#define LED3_GPIO_PORT GPIOI +#define LED3_GPIO_CLK RCC_AHB1Periph_GPIOI + +#define LED4_PIN GPIO_Pin_7 +#define LED4_GPIO_PORT GPIOC +#define LED4_GPIO_CLK RCC_AHB1Periph_GPIOC + +/** + * @} + */ + +/** @addtogroup STM322xG_EVAL_LOW_LEVEL_BUTTON + * @{ + */ +#define BUTTONn 3 /*!< Joystick pins are connected to + an IO Expander (accessible through + I2C1 interface) */ + +/** + * @brief Wakeup push-button + */ +#define WAKEUP_BUTTON_PIN GPIO_Pin_0 +#define WAKEUP_BUTTON_GPIO_PORT GPIOA +#define WAKEUP_BUTTON_GPIO_CLK RCC_AHB1Periph_GPIOA +#define WAKEUP_BUTTON_EXTI_LINE EXTI_Line0 +#define WAKEUP_BUTTON_EXTI_PORT_SOURCE EXTI_PortSourceGPIOA +#define WAKEUP_BUTTON_EXTI_PIN_SOURCE EXTI_PinSource0 +#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn + +/** + * @brief Tamper push-button + */ +#define TAMPER_BUTTON_PIN GPIO_Pin_13 +#define TAMPER_BUTTON_GPIO_PORT GPIOC +#define TAMPER_BUTTON_GPIO_CLK RCC_AHB1Periph_GPIOC +#define TAMPER_BUTTON_EXTI_LINE EXTI_Line13 +#define TAMPER_BUTTON_EXTI_PORT_SOURCE EXTI_PortSourceGPIOC +#define TAMPER_BUTTON_EXTI_PIN_SOURCE EXTI_PinSource13 +#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn + +/** + * @brief Key push-button + */ +#define KEY_BUTTON_PIN GPIO_Pin_15 +#define KEY_BUTTON_GPIO_PORT GPIOG +#define KEY_BUTTON_GPIO_CLK RCC_AHB1Periph_GPIOG +#define KEY_BUTTON_EXTI_LINE EXTI_Line15 +#define KEY_BUTTON_EXTI_PORT_SOURCE EXTI_PortSourceGPIOG +#define KEY_BUTTON_EXTI_PIN_SOURCE EXTI_PinSource15 +#define KEY_BUTTON_EXTI_IRQn EXTI15_10_IRQn +/** + * @} + */ + +/** @addtogroup STM322xG_EVAL_LOW_LEVEL_COM + * @{ + */ +#define COMn 1 + +/** + * @brief Definition for COM port1, connected to USART3 + */ +#define EVAL_COM1 USART3 +#define EVAL_COM1_CLK RCC_APB1Periph_USART3 +#define EVAL_COM1_TX_PIN GPIO_Pin_10 +#define EVAL_COM1_TX_GPIO_PORT GPIOC +#define EVAL_COM1_TX_GPIO_CLK RCC_AHB1Periph_GPIOC +#define EVAL_COM1_TX_SOURCE GPIO_PinSource10 +#define EVAL_COM1_TX_AF GPIO_AF_USART3 +#define EVAL_COM1_RX_PIN GPIO_Pin_11 +#define EVAL_COM1_RX_GPIO_PORT GPIOC +#define EVAL_COM1_RX_GPIO_CLK RCC_AHB1Periph_GPIOC +#define EVAL_COM1_RX_SOURCE GPIO_PinSource11 +#define EVAL_COM1_RX_AF GPIO_AF_USART3 +#define EVAL_COM1_IRQn USART3_IRQn + +/** + * @} + */ + +/** @addtogroup STM322xG_EVAL_LOW_LEVEL_SD_FLASH + * @{ + */ +/** + * @brief SD FLASH SDIO Interface + */ +#define SD_DETECT_PIN GPIO_Pin_13 /* PH.13 */ +#define SD_DETECT_GPIO_PORT GPIOH /* GPIOH */ +#define SD_DETECT_GPIO_CLK RCC_AHB1Periph_GPIOH + +#define SDIO_FIFO_ADDRESS ((uint32_t)0x40012C80) +/** + * @brief SDIO Intialization Frequency (400KHz max) + */ +#define SDIO_INIT_CLK_DIV ((uint8_t)0x76) +/** + * @brief SDIO Data Transfer Frequency (25MHz max) + */ +#define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x0) + +#define SD_SDIO_DMA DMA2 +#define SD_SDIO_DMA_CLK RCC_AHB1Periph_DMA2 + +#define SD_SDIO_DMA_STREAM3 3 +//#define SD_SDIO_DMA_STREAM6 6 + +#ifdef SD_SDIO_DMA_STREAM3 + #define SD_SDIO_DMA_STREAM DMA2_Stream3 + #define SD_SDIO_DMA_CHANNEL DMA_Channel_4 + #define SD_SDIO_DMA_FLAG_FEIF DMA_FLAG_FEIF3 + #define SD_SDIO_DMA_FLAG_DMEIF DMA_FLAG_DMEIF3 + #define SD_SDIO_DMA_FLAG_TEIF DMA_FLAG_TEIF3 + #define SD_SDIO_DMA_FLAG_HTIF DMA_FLAG_HTIF3 + #define SD_SDIO_DMA_FLAG_TCIF DMA_FLAG_TCIF3 + #define SD_SDIO_DMA_IRQn DMA2_Stream3_IRQn + #define SD_SDIO_DMA_IRQHANDLER DMA2_Stream3_IRQHandler +#elif defined SD_SDIO_DMA_STREAM6 + #define SD_SDIO_DMA_STREAM DMA2_Stream6 + #define SD_SDIO_DMA_CHANNEL DMA_Channel_4 + #define SD_SDIO_DMA_FLAG_FEIF DMA_FLAG_FEIF6 + #define SD_SDIO_DMA_FLAG_DMEIF DMA_FLAG_DMEIF6 + #define SD_SDIO_DMA_FLAG_TEIF DMA_FLAG_TEIF6 + #define SD_SDIO_DMA_FLAG_HTIF DMA_FLAG_HTIF6 + #define SD_SDIO_DMA_FLAG_TCIF DMA_FLAG_TCIF6 + #define SD_SDIO_DMA_IRQn DMA2_Stream6_IRQn + #define SD_SDIO_DMA_IRQHANDLER DMA2_Stream6_IRQHandler +#endif /* SD_SDIO_DMA_STREAM3 */ + +/** + * @} + */ + +/** @addtogroup STM322xG_EVAL_LOW_LEVEL_I2C_EE + * @{ + */ +/** + * @brief I2C EEPROM Interface pins + */ +#define sEE_I2C I2C1 +#define sEE_I2C_CLK RCC_APB1Periph_I2C1 +#define sEE_I2C_SCL_PIN GPIO_Pin_6 /* PB.06 */ +#define sEE_I2C_SCL_GPIO_PORT GPIOB /* GPIOB */ +#define sEE_I2C_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB +#define sEE_I2C_SCL_SOURCE GPIO_PinSource6 +#define sEE_I2C_SCL_AF GPIO_AF_I2C1 +#define sEE_I2C_SDA_PIN GPIO_Pin_9 /* PB.09 */ +#define sEE_I2C_SDA_GPIO_PORT GPIOB /* GPIOB */ +#define sEE_I2C_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB +#define sEE_I2C_SDA_SOURCE GPIO_PinSource9 +#define sEE_I2C_SDA_AF GPIO_AF_I2C1 +#define sEE_M24C64_32 + +#define sEE_I2C_DMA DMA1 +#define sEE_I2C_DMA_CHANNEL DMA_Channel_1 +#define sEE_I2C_DMA_STREAM_TX DMA1_Stream6 +#define sEE_I2C_DMA_STREAM_RX DMA1_Stream0 +#define sEE_I2C_DMA_CLK RCC_AHB1Periph_DMA1 +#define sEE_I2C_DR_Address ((uint32_t)0x40005410) +#define sEE_USE_DMA + +#define sEE_I2C_DMA_TX_IRQn DMA1_Stream6_IRQn +#define sEE_I2C_DMA_RX_IRQn DMA1_Stream0_IRQn +#define sEE_I2C_DMA_TX_IRQHandler DMA1_Stream6_IRQHandler +#define sEE_I2C_DMA_RX_IRQHandler DMA1_Stream0_IRQHandler +#define sEE_I2C_DMA_PREPRIO 0 +#define sEE_I2C_DMA_SUBPRIO 0 + +#define sEE_TX_DMA_FLAG_FEIF DMA_FLAG_FEIF6 +#define sEE_TX_DMA_FLAG_DMEIF DMA_FLAG_DMEIF6 +#define sEE_TX_DMA_FLAG_TEIF DMA_FLAG_TEIF6 +#define sEE_TX_DMA_FLAG_HTIF DMA_FLAG_HTIF6 +#define sEE_TX_DMA_FLAG_TCIF DMA_FLAG_TCIF6 +#define sEE_RX_DMA_FLAG_FEIF DMA_FLAG_FEIF0 +#define sEE_RX_DMA_FLAG_DMEIF DMA_FLAG_DMEIF0 +#define sEE_RX_DMA_FLAG_TEIF DMA_FLAG_TEIF0 +#define sEE_RX_DMA_FLAG_HTIF DMA_FLAG_HTIF0 +#define sEE_RX_DMA_FLAG_TCIF DMA_FLAG_TCIF0 + +#define sEE_DIRECTION_TX 0 +#define sEE_DIRECTION_RX 1 + +/* Time constant for the delay caclulation allowing to have a millisecond + incrementing counter. This value should be equal to (System Clock / 1000). + ie. if system clock = 120MHz then sEE_TIME_CONST should be 120. */ +#define sEE_TIME_CONST 120 +/** + * @} + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Exported_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_LOW_LEVEL_Exported_Functions + * @{ + */ +void STM_EVAL_LEDInit(Led_TypeDef Led); +void STM_EVAL_LEDOn(Led_TypeDef Led); +void STM_EVAL_LEDOff(Led_TypeDef Led); +void STM_EVAL_LEDToggle(Led_TypeDef Led); +void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode); +uint32_t STM_EVAL_PBGetState(Button_TypeDef Button); +void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct); +void SD_LowLevel_DeInit(void); +void SD_LowLevel_Init(void); +void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize); +void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize); +void sEE_LowLevel_DeInit(void); +void sEE_LowLevel_Init(void); +void sEE_LowLevel_DMAConfig(uint32_t pBuffer, uint32_t BufferSize, uint32_t Direction); +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM322xG_EVAL_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_audio_codec.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_audio_codec.c new file mode 100644 index 000000000..7f6f2409d --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_audio_codec.c @@ -0,0 +1,1465 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_audio_codec.c + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file includes the low layer driver for CS43L22 Audio Codec + * available on STM322xG-EVAL evaluation board(MB786) RevA and RevB. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/*============================================================================================================================== + User NOTES +1. How To use this driver: +-------------------------- + - This driver supports STM32F2xx devices on STM322xG-EVAL (MB786 RevA) Evaluation boards. + + - Configure the options in file stm322xg_eval_audio_codec.h in the section CONFIGURATION. + Refer to the sections 2 and 3 to have more details on the possible configurations. + + - Call the function EVAL_AUDIO_Init( + OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, + OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_AUTO or + OUTPUT_DEVICE_BOTH) + Volume: initial volume to be set (0 is min (mute), 100 is max (100%) + AudioFreq: Audio frequency in Hz (8000, 16000, 22500, 32000 ...) + this parameter is relative to the audio file/stream type. + ) + This function configures all the hardware required for the audio application (codec, I2C, I2S, + GPIOs, DMA and interrupt if needed). This function returns 0 if configuration is OK. + if the returned value is different from 0 or the function is stuck then the communication with + the codec or the IOExpander has failed (try to un-plug the power or reset device in this case). + + OUTPUT_DEVICE_SPEAKER: only speaker will be set as output for the audio stream. + + OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream. + + OUTPUT_DEVICE_AUTO: Selection of output device is made through external switch (implemented + into the audio jack on the evaluation board). When the Headphone is connected it is used + as output. When the headphone is disconnected from the audio jack, the output is + automatically switched to Speaker. + + OUTPUT_DEVICE_BOTH: both Speaker and Headphone are used as outputs for the audio stream + at the same time. + + - Call the function EVAL_AUDIO_Play( + pBuffer: pointer to the audio data file address + Size: size of the buffer to be sent in Bytes + ) + to start playing (for the first time) from the audio file/stream. + + - Call the function EVAL_AUDIO_PauseResume( + Cmd: AUDIO_PAUSE (or 0) to pause playing or AUDIO_RESUME (or + any value different from 0) to resume playing. + ) + Note. After calling EVAL_AUDIO_PauseResume() function for pause, only EVAL_AUDIO_PauseResume() should be called + for resume (it is not allowed to call EVAL_AUDIO_Play() in this case). + Note. This function should be called only when the audio file is played or paused (not stopped). + + - For each mode, you may need to implement the relative callback functions into your code. + The Callback functions are named EVAL_AUDIO_XXX_CallBack() and only their prototypes are declared in + the stm322xg_eval_audio_codec.h file. (refer to the example for more details on the callbacks implementations) + + - To Stop playing, to modify the volume level or to mute, use the functions + EVAL_AUDIO_Stop(), EVAL_AUDIO_VolumeCtl() and EVAL_AUDIO_Mute(). + + - The driver API and the callback functions are at the end of the stm322xg_eval_audio_codec.h file. + + + Driver architecture: + -------------------- + This driver is composed of three main layers: + o High Audio Layer: consists of the function API exported in the stm322xg_eval_audio_codec.h file + (EVAL_AUDIO_Init(), EVAL_AUDIO_Play() ...) + o Codec Control layer: consists of the functions API controlling the audio codec (CS43L22) and + included as local functions in file stm322xg_eval_audio_codec.c (Codec_Init(), Codec_Play() ...) + o Media Access Layer (MAL): which consists of functions allowing to access the media containing/ + providing the audio file/stream. These functions are also included as local functions into + the stm322xg_eval_audio_codec.c file (Audio_MAL_Init(), Audio_MAL_Play() ...) + Each set of functions (layer) may be implemented independently of the others and customized when + needed. + +2. Modes description: +--------------------- + + AUDIO_MAL_MODE_NORMAL : is suitable when the audio file is in a memory location. + + AUDIO_MAL_MODE_CIRCULAR: is suitable when the audio data are read either from a + memory location or from a device at real time (double buffer could be used). + +3. DMA interrupts description: +------------------------------ + + EVAL_AUDIO_IT_TC_ENABLE: Enable this define to use the DMA end of transfer interrupt. + then, a callback should be implemented by user to perform specific actions + when the DMA has finished the transfer. + + EVAL_AUDIO_IT_HT_ENABLE: Enable this define to use the DMA end of half transfer interrupt. + then, a callback should be implemented by user to perform specific actions + when the DMA has reached the half of the buffer transfer (generally, it is useful + to load the first half of buffer while DMA is loading from the second half). + + EVAL_AUDIO_IT_ER_ENABLE: Enable this define to manage the cases of error on DMA transfer. + +4. Known Limitations: +--------------------- + 1- When using the Speaker, if the audio file quality is not high enough, the speaker output + may produce high and uncomfortable noise level. To avoid this issue, to use speaker + output properly, try to increase audio file sampling rate (typically higher than 48KHz). + This operation will lead to larger file size. + 2- Communication with the audio codec (through I2C) may be corrupted if it is interrupted by some + user interrupt routines (in this case, interrupts could be disabled just before the start of + communication then re-enabled when it is over). Note that this communication is only done at + the configuration phase (EVAL_AUDIO_Init() or EVAL_AUDIO_Stop()) and when Volume control modification is + performed (EVAL_AUDIO_VolumeCtl() or EVAL_AUDIO_Mute()). When the audio data is played, no communication is + required with the audio codec. + 3- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, + File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. + 4- Mono audio streaming is not supported (in order to play mono audio streams, each data should be sent twice + on the I2S or should be duplicated on the source buffer. Or convert the stream in stereo before playing). + 5- Supports only 16-bit audio data size. +===============================================================================================================================*/ + + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_audio_codec.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_AUDIO_CODEC + * @brief This file includes the low layer driver for CS43L22 Audio Codec + * available on STM322xG-EVAL evaluation board(MB786) RevA and RevB. + * @{ + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Private_Types + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Private_Defines + * @{ + */ + +/* Mask for the bit EN of the I2S CFGR register */ +#define I2S_ENABLE_MASK 0x0400 + +/* Delay for the Codec to be correctly reset */ +#define CODEC_RESET_DELAY 0x4FFF + +/* Codec audio Standards */ +#ifdef I2S_STANDARD_PHILLIPS + #define CODEC_STANDARD 0x04 + #define I2S_STANDARD I2S_Standard_Phillips +#elif defined(I2S_STANDARD_MSB) + #define CODEC_STANDARD 0x00 + #define I2S_STANDARD I2S_Standard_MSB +#elif defined(I2S_STANDARD_LSB) + #define CODEC_STANDARD 0x08 + #define I2S_STANDARD I2S_Standard_LSB +#else + #error "Error: No audio communication standard selected !" +#endif /* I2S_STANDARD */ + +/* The 7 bits Codec address (sent through I2C interface) */ +#define CODEC_ADDRESS 0x94 /* b00100111 */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Private_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Private_Variables + * @{ + */ +/* This structure is declared global because it is handled by two different functions */ +static DMA_InitTypeDef DMA_InitStructure; +DMA_InitTypeDef AUDIO_MAL_DMA_InitStructure; + +uint32_t AudioTotalSize = 0xFFFF; /* This variable holds the total size of the audio file */ +uint32_t AudioRemSize = 0xFFFF; /* This variable holds the remaining data in audio file */ +uint16_t *CurrentPos; /* This variable holds the current position of audio pointer */ + +__IO uint32_t CODECTimeout = CODEC_LONG_TIMEOUT; +__IO uint8_t OutputDev = 0; + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Private_Functions + * @{ + */ + +/*----------------------------------- + Audio Codec functions + ------------------------------------------*/ +/* High Layer codec functions */ +static uint32_t Codec_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); +static uint32_t Codec_DeInit(void); +static uint32_t Codec_Play(void); +static uint32_t Codec_PauseResume(uint32_t Cmd); +static uint32_t Codec_Stop(uint32_t Cmd); +static uint32_t Codec_VolumeCtrl(uint8_t Volume); +static uint32_t Codec_Mute(uint32_t Cmd); +/* Low layer codec functions */ +static void Codec_CtrlInterface_Init(void); +static void Codec_CtrlInterface_DeInit(void); +static void Codec_AudioInterface_Init(uint32_t AudioFreq); +static void Codec_AudioInterface_DeInit(void); +static void Codec_Reset(void); +static uint32_t Codec_WriteRegister(uint8_t RegisterAddr, uint8_t RegisterValue); +static uint32_t Codec_ReadRegister(uint8_t RegisterAddr); +static void Codec_GPIO_Init(void); +static void Codec_GPIO_DeInit(void); +static void Delay(__IO uint32_t nCount); +/*----------------------------------------------------------------------------*/ + +/*----------------------------------- + MAL (Media Access Layer) functions + ------------------------------------------*/ +/* Peripherals configuration functions */ +static void Audio_MAL_Init(void); +static void Audio_MAL_DeInit(void); +static void Audio_MAL_Play(uint32_t Addr, uint32_t Size); +static void Audio_MAL_PauseResume(uint32_t Cmd, uint32_t Addr); +static void Audio_MAL_Stop(void); +/*----------------------------------------------------------------------------*/ + +/** + * @brief Configure the audio peripherals. + * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, + * OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO . + * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) + * @param AudioFreq: Audio frequency used to play the audio stream. + * @retval 0 if correct communication, else wrong communication + */ +uint32_t EVAL_AUDIO_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) +{ + /* Perform low layer Codec initialization */ + if (Codec_Init(OutputDevice, VOLUME_CONVERT(Volume), AudioFreq) != 0) + { + return 1; + } + else + { + /* I2S data transfer preparation: + Prepare the Media to be used for the audio transfer from memory to I2S peripheral */ + Audio_MAL_Init(); + + /* Return 0 when all operations are OK */ + return 0; + } +} + +/** + * @brief Deinitializes all the resources used by the codec (those initialized + * by EVAL_AUDIO_Init() function) EXCEPT the I2C resources since they are + * used by the IOExpander as well (and eventually other modules). + * @param None + * @retval 0 if correct communication, else wrong communication + */ +uint32_t EVAL_AUDIO_DeInit(void) +{ + /* DeInitialize the Media layer */ + Audio_MAL_DeInit(); + + /* DeInitialize Codec */ + Codec_DeInit(); + + return 0; +} + +/** + * @brief Starts playing audio stream from a data buffer for a determined size. + * @param pBuffer: Pointer to the buffer + * @param Size: Number of audio data BYTES. + * @retval 0 if correct communication, else wrong communication + */ +uint32_t EVAL_AUDIO_Play(uint16_t* pBuffer, uint32_t Size) +{ + /* Set the total number of data to be played (count in half-word) */ + AudioTotalSize = Size/2; + + /* Call the audio Codec Play function */ + Codec_Play(); + + /* Update the Media layer and enable it for play */ + Audio_MAL_Play((uint32_t)pBuffer, (uint32_t)(DMA_MAX(AudioTotalSize / 2))); + + /* Update the remaining number of data to be played */ + AudioRemSize = (Size/2) - DMA_MAX(AudioTotalSize); + + /* Update the current audio pointer position */ + CurrentPos = pBuffer + DMA_MAX(AudioTotalSize); + + return 0; +} + +/** + * @brief This function Pauses or Resumes the audio file stream. In case + * of using DMA, the DMA Pause feature is used. In all cases the I2S + * peripheral is disabled. + * + * @WARNING When calling EVAL_AUDIO_PauseResume() function for pause, only + * this function should be called for resume (use of EVAL_AUDIO_Play() + * function for resume could lead to unexpected behavior). + * + * @param Cmd: AUDIO_PAUSE (or 0) to pause, AUDIO_RESUME (or any value different + * from 0) to resume. + * @retval 0 if correct communication, else wrong communication + */ +uint32_t EVAL_AUDIO_PauseResume(uint32_t Cmd) +{ + /* Call the Audio Codec Pause/Resume function */ + if (Codec_PauseResume(Cmd) != 0) + { + return 1; + } + else + { + /* Call the Media layer pause/resume function */ + Audio_MAL_PauseResume(Cmd, 0); + + /* Return 0 if all operations are OK */ + return 0; + } +} + +/** + * @brief Stops audio playing and Power down the Audio Codec. + * @param Option: could be one of the following parameters + * - CODEC_PDWN_SW: for software power off (by writing registers). + * Then no need to reconfigure the Codec after power on. + * - CODEC_PDWN_HW: completely shut down the codec (physically). + * Then need to reconfigure the Codec after power on. + * @retval 0 if correct communication, else wrong communication + */ +uint32_t EVAL_AUDIO_Stop(uint32_t Option) +{ + /* Call Audio Codec Stop function */ + if (Codec_Stop(Option) != 0) + { + return 1; + } + else + { + /* Call Media layer Stop function */ + Audio_MAL_Stop(); + + /* Update the remaining data number */ + AudioRemSize = AudioTotalSize; + + /* Return 0 when all operations are correctly done */ + return 0; + } +} + +/** + * @brief Controls the current audio volume level. + * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for + * Mute and 100 for Max volume level). + * @retval 0 if correct communication, else wrong communication + */ +uint32_t EVAL_AUDIO_VolumeCtl(uint8_t Volume) +{ + /* Call the codec volume control function with converted volume value */ + return (Codec_VolumeCtrl(VOLUME_CONVERT(Volume))); +} + +/** + * @brief Enables or disables the MUTE mode by software + * @param Command: could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to + * unmute the codec and restore previous volume level. + * @retval 0 if correct communication, else wrong communication + */ +uint32_t EVAL_AUDIO_Mute(uint32_t Cmd) +{ + /* Call the Codec Mute function */ + return (Codec_Mute(Cmd)); +} + +/** + * @brief This function handles main Media layer interrupt. + * @param None + * @retval 0 if correct communication, else wrong communication + */ +void Audio_MAL_IRQHandler(void) +{ +#ifndef AUDIO_MAL_MODE_NORMAL + uint16_t *pAddr = (uint16_t *)CurrentPos; + uint32_t Size = AudioRemSize; +#endif /* AUDIO_MAL_MODE_NORMAL */ + +#ifdef AUDIO_MAL_DMA_IT_TC_EN + /* Transfer complete interrupt */ + if (DMA_GetFlagStatus(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_TC) != RESET) + { + #ifdef AUDIO_MAL_MODE_NORMAL + /* Check if the end of file has been reached */ + if (AudioRemSize > 0) + { + /* Wait the DMA Stream to be effectively disabled */ + while (DMA_GetCmdStatus(AUDIO_MAL_DMA_STREAM) != DISABLE) + {} + + /* Clear the Interrupt flag */ + DMA_ClearFlag(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_TC); + + /* Re-Configure the buffer address and size */ + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) CurrentPos; + DMA_InitStructure.DMA_BufferSize = (uint32_t) (DMA_MAX(AudioRemSize)); + + /* Configure the DMA Stream with the new parameters */ + DMA_Init(AUDIO_MAL_DMA_STREAM, &DMA_InitStructure); + + /* Enable the I2S DMA Stream*/ + DMA_Cmd(AUDIO_MAL_DMA_STREAM, ENABLE); + + /* Update the current pointer position */ + CurrentPos += DMA_MAX(AudioRemSize); + + /* Update the remaining number of data to be played */ + AudioRemSize -= DMA_MAX(AudioRemSize); + } + else + { + /* Disable the I2S DMA Stream*/ + DMA_Cmd(AUDIO_MAL_DMA_STREAM, DISABLE); + + /* Clear the Interrupt flag */ + DMA_ClearFlag(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_TC); + + /* Manage the remaining file size and new address offset: This function + should be coded by user (its prototype is already declared in stm32_eval_audio_codec.h) */ + EVAL_AUDIO_TransferComplete_CallBack((uint32_t)CurrentPos, 0); + } + + #elif defined(AUDIO_MAL_MODE_CIRCULAR) + /* Manage the remaining file size and new address offset: This function + should be coded by user (its prototype is already declared in stm32_eval_audio_codec.h) */ + EVAL_AUDIO_TransferComplete_CallBack(pAddr, Size); + + /* Clear the Interrupt flag */ + DMA_ClearFlag(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_TC); + #endif /* AUDIO_MAL_MODE_NORMAL */ + } +#endif /* AUDIO_MAL_DMA_IT_TC_EN */ + +#ifdef AUDIO_MAL_DMA_IT_HT_EN + /* Half Transfer complete interrupt */ + if (DMA_GetFlagStatus(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_HT) != RESET) + { + /* Manage the remaining file size and new address offset: This function + should be coded by user (its prototype is already declared in stm32_eval_audio_codec.h) */ + EVAL_AUDIO_HalfTransfer_CallBack((uint32_t)pAddr, Size); + + /* Clear the Interrupt flag */ + DMA_ClearFlag(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_HT); + } +#endif /* AUDIO_MAL_DMA_IT_HT_EN */ + +#ifdef AUDIO_MAL_DMA_IT_TE_EN + /* FIFO Error interrupt */ + if ((DMA_GetFlagStatus(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_TE) != RESET) || \ + (DMA_GetFlagStatus(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_FE) != RESET) || \ + (DMA_GetFlagStatus(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_DME) != RESET)) + + { + /* Manage the error generated on DMA FIFO: This function + should be coded by user (its prototype is already declared in stm32_eval_audio_codec.h) */ + EVAL_AUDIO_Error_CallBack((uint32_t*)&pAddr); + + /* Clear the Interrupt flag */ + DMA_ClearFlag(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_TE | AUDIO_MAL_DMA_FLAG_FE | \ + AUDIO_MAL_DMA_FLAG_DME); + } +#endif /* AUDIO_MAL_DMA_IT_TE_EN */ +} + +/*======================== + + CS43L22 Audio Codec Control Functions + ==============================*/ +/** + * @brief Initializes the audio codec and all related interfaces (control + * interface: I2C and audio interface: I2S) + * @param OutputDevice: can be OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, + * OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO . + * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) + * @param AudioFreq: Audio frequency used to play the audio stream. + * @retval 0 if correct communication, else wrong communication + */ +static uint32_t Codec_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) +{ + uint32_t counter = 0; + + /* Configure the Codec related IOs */ + Codec_GPIO_Init(); + + /* Reset the Codec Registers */ + Codec_Reset(); + + /* Initialize the Control interface of the Audio Codec */ + Codec_CtrlInterface_Init(); + + /* Keep Codec powered OFF */ + counter += Codec_WriteRegister(0x02, 0x01); + + switch (OutputDevice) + { + case OUTPUT_DEVICE_SPEAKER: + counter += Codec_WriteRegister(0x04, 0xFA); /* SPK always ON & HP always OFF */ + OutputDev = 0xFA; + break; + + case OUTPUT_DEVICE_HEADPHONE: + counter += Codec_WriteRegister(0x04, 0xAF); /* SPK always OFF & HP always ON */ + OutputDev = 0xAF; + break; + + case OUTPUT_DEVICE_BOTH: + counter += Codec_WriteRegister(0x04, 0xAA); /* SPK always ON & HP always ON */ + OutputDev = 0xAA; + break; + + case OUTPUT_DEVICE_AUTO: + counter += Codec_WriteRegister(0x04, 0x05); /* Detect the HP or the SPK automatically */ + OutputDev = 0x05; + break; + + default: + counter += Codec_WriteRegister(0x04, 0x05); /* Detect the HP or the SPK automatically */ + OutputDev = 0x05; + break; + } + + /* Clock configuration: Auto detection */ + counter += Codec_WriteRegister(0x05, 0x81); + + /* Set the Slave Mode and the audio Standard */ + counter += Codec_WriteRegister(0x06, CODEC_STANDARD); + + /* Set the Master volume */ + Codec_VolumeCtrl(Volume); + + /* If the Speaker is enabled, set the Mono mode and volume attenuation level */ + if (OutputDevice != OUTPUT_DEVICE_HEADPHONE) + { + /* Set the Speaker Mono mode */ + counter += Codec_WriteRegister(0x0F , 0x06); + + /* Set the Speaker attenuation level */ + counter += Codec_WriteRegister(0x24, 0x00); + counter += Codec_WriteRegister(0x25, 0x00); + } + + /* Power on the Codec */ + counter += Codec_WriteRegister(0x02, 0x9E); + + /* Additional configuration for the CODEC. These configurations are done to reduce + the time needed for the Codec to power off. If these configurations are removed, + then a long delay should be added between powering off the Codec and switching + off the I2S peripheral MCLK clock (which is the operating clock for Codec). + If this delay is not inserted, then the codec will not shut down properly and + it results in high noise after shut down. */ + + /* Disable the analog soft ramp */ + counter += Codec_WriteRegister(0x0A, 0x00); + /* Disable the digital soft ramp */ + counter += Codec_WriteRegister(0x0E, 0x04); + /* Disable the limiter attack level */ + counter += Codec_WriteRegister(0x27, 0x00); + /* Adjust Bass and Treble levels */ + counter += Codec_WriteRegister(0x1F, 0x0F); + /* Adjust PCM volume level */ + counter += Codec_WriteRegister(0x1A, 0x0A); + counter += Codec_WriteRegister(0x1B, 0x0A); + + /* Configure the I2S peripheral */ + Codec_AudioInterface_Init(AudioFreq); + + /* Return communication control value */ + return counter; +} + +/** + * @brief Restore the audio codec state to default state and free all used + * resources. + * @param None + * @retval 0 if correct communication, else wrong communication + */ +static uint32_t Codec_DeInit(void) +{ + uint32_t counter = 0; + + /* Reset the Codec Registers */ + Codec_Reset(); + + /* Keep Codec powered OFF */ + counter += Codec_WriteRegister(0x02, 0x01); + + /* Deinitialize all use GPIOs */ + Codec_GPIO_DeInit(); + + /* Disable the Codec control interface */ + Codec_CtrlInterface_DeInit(); + + /* Deinitialize the Codec audio interface (I2S) */ + Codec_AudioInterface_DeInit(); + + /* Return communication control value */ + return counter; +} + +/** + * @brief Start the audio Codec play feature. + * @note For this codec no Play options are required. + * @param None + * @retval 0 if correct communication, else wrong communication + */ +static uint32_t Codec_Play(void) +{ + /* + No actions required on Codec level for play command + */ + + /* Return communication control value */ + return 0; +} + +/** + * @brief Pauses and resumes playing on the audio codec. + * @param Cmd: AUDIO_PAUSE (or 0) to pause, AUDIO_RESUME (or any value different + * from 0) to resume. + * @retval 0 if correct communication, else wrong communication + */ +static uint32_t Codec_PauseResume(uint32_t Cmd) +{ + uint32_t counter = 0; + + /* Pause the audio file playing */ + if (Cmd == AUDIO_PAUSE) + { + /* Mute the output first */ + counter += Codec_Mute(AUDIO_MUTE_ON); + + /* Put the Codec in Power save mode */ + counter += Codec_WriteRegister(0x02, 0x01); + } + else /* AUDIO_RESUME */ + { + /* Unmute the output first */ + counter += Codec_Mute(AUDIO_MUTE_OFF); + + counter += Codec_WriteRegister(0x04, OutputDev); + + /* Exit the Power save mode */ + counter += Codec_WriteRegister(0x02, 0x9E); + } + + return counter; +} + +/** + * @brief Stops audio Codec playing. It powers down the codec. + * @param CodecPdwnMode: selects the power down mode. + * - CODEC_PDWN_SW: only mutes the audio codec. When resuming from this + * mode the codec keeps the previous initialization + * (no need to re-Initialize the codec registers). + * - CODEC_PDWN_HW: Physically power down the codec. When resuming from this + * mode, the codec is set to default configuration + * (user should re-Initialize the codec in order to + * play again the audio stream). + * @retval 0 if correct communication, else wrong communication + */ +static uint32_t Codec_Stop(uint32_t CodecPdwnMode) +{ + uint32_t counter = 0; + + /* Mute the output first */ + Codec_Mute(AUDIO_MUTE_ON); + + if (CodecPdwnMode == CODEC_PDWN_SW) + { + /* Power down the DAC and the speaker (PMDAC and PMSPK bits)*/ + counter += Codec_WriteRegister(0x02, 0x9F); + } + else /* CODEC_PDWN_HW */ + { + /* Power down the DAC components */ + counter += Codec_WriteRegister(0x02, 0x9F); + + /* Wait at least 100us */ + Delay(0xFFF); + + /* Reset The pin */ + IOE_WriteIOPin(AUDIO_RESET_PIN, BitReset); + } + + return counter; +} + +/** + * @brief Sets higher or lower the codec volume level. + * @param Volume: a byte value from 0 to 255 (refer to codec registers + * description for more details). + * @retval 0 if correct communication, else wrong communication + */ +static uint32_t Codec_VolumeCtrl(uint8_t Volume) +{ + uint32_t counter = 0; + + if (Volume > 0xE6) + { + /* Set the Master volume */ + counter += Codec_WriteRegister(0x20, Volume - 0xE7); + counter += Codec_WriteRegister(0x21, Volume - 0xE7); + } + else + { + /* Set the Master volume */ + counter += Codec_WriteRegister(0x20, Volume + 0x19); + counter += Codec_WriteRegister(0x21, Volume + 0x19); + } + + return counter; +} + +/** + * @brief Enables or disables the mute feature on the audio codec. + * @param Cmd: AUDIO_MUTE_ON to enable the mute or AUDIO_MUTE_OFF to disable the + * mute mode. + * @retval 0 if correct communication, else wrong communication + */ +static uint32_t Codec_Mute(uint32_t Cmd) +{ + uint32_t counter = 0; + + /* Set the Mute mode */ + if (Cmd == AUDIO_MUTE_ON) + { + counter += Codec_WriteRegister(0x04, 0xFF); + } + else /* AUDIO_MUTE_OFF Disable the Mute */ + { + counter += Codec_WriteRegister(0x04, OutputDev); + } + + return counter; +} + +/** + * @brief Resets the audio codec. It restores the default configuration of the + * codec (this function shall be called before initializing the codec). + * @note This function calls an external driver function: The IO Expander driver. + * @param None + * @retval None + */ +static void Codec_Reset(void) +{ + /* Configure the IO Expander (to use the Codec Reset pin mapped on the IOExpander) */ + IOE_Config(); + + /* Power Down the codec */ + IOE_WriteIOPin(AUDIO_RESET_PIN, BitReset); + + /* wait for a delay to insure registers erasing */ + Delay(CODEC_RESET_DELAY); + + /* Power on the codec */ + IOE_WriteIOPin(AUDIO_RESET_PIN, BitSet); +} + +/** + * @brief Switch dynamically (while audio file is played) the output target + * (speaker or headphone). + * @note This function modifies a global variable of the audio codec driver: OutputDev. + * @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER, + * OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO + * @retval 0 if correct communication, else wrong communication + */ +uint32_t Codec_SwitchOutput(uint8_t Output) +{ + uint8_t counter = 0; + + switch (Output) + { + case OUTPUT_DEVICE_SPEAKER: + counter += Codec_WriteRegister(0x04, 0xFA); /* SPK always ON & HP always OFF */ + OutputDev = 0xFA; + break; + + case OUTPUT_DEVICE_HEADPHONE: + counter += Codec_WriteRegister(0x04, 0xAF); /* SPK always OFF & HP always ON */ + OutputDev = 0xAF; + break; + + case OUTPUT_DEVICE_BOTH: + counter += Codec_WriteRegister(0x04, 0xAA); /* SPK always ON & HP always ON */ + OutputDev = 0xAA; + break; + + case OUTPUT_DEVICE_AUTO: + counter += Codec_WriteRegister(0x04, 0x05); /* Detect the HP or the SPK automatically */ + OutputDev = 0x05; + break; + + default: + counter += Codec_WriteRegister(0x04, 0x05); /* Detect the HP or the SPK automatically */ + OutputDev = 0x05; + break; + } + + return counter; +} + +/** + * @brief Writes a Byte to a given register into the audio codec through the + control interface (I2C) + * @param RegisterAddr: The address (location) of the register to be written. + * @param RegisterValue: the Byte value to be written into destination register. + * @retval 0 if correct communication, else wrong communication + */ +static uint32_t Codec_WriteRegister(uint8_t RegisterAddr, uint8_t RegisterValue) +{ + uint32_t result = 0; + + /*!< While the bus is busy */ + CODECTimeout = CODEC_LONG_TIMEOUT; + while(I2C_GetFlagStatus(CODEC_I2C, I2C_FLAG_BUSY)) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /* Start the config sequence */ + I2C_GenerateSTART(CODEC_I2C, ENABLE); + + /* Test on EV5 and clear it */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while (!I2C_CheckEvent(CODEC_I2C, I2C_EVENT_MASTER_MODE_SELECT)) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /* Transmit the slave address and enable writing operation */ + I2C_Send7bitAddress(CODEC_I2C, CODEC_ADDRESS, I2C_Direction_Transmitter); + + /* Test on EV6 and clear it */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while (!I2C_CheckEvent(CODEC_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /* Transmit the first address for write operation */ + I2C_SendData(CODEC_I2C, RegisterAddr); + + /* Test on EV8 and clear it */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while (!I2C_CheckEvent(CODEC_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTING)) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /* Prepare the register value to be sent */ + I2C_SendData(CODEC_I2C, RegisterValue); + + /*!< Wait till all data have been physically transferred on the bus */ + CODECTimeout = CODEC_LONG_TIMEOUT; + while(!I2C_GetFlagStatus(CODEC_I2C, I2C_FLAG_BTF)) + { + if((CODECTimeout--) == 0) Codec_TIMEOUT_UserCallback(); + } + + /* End the configuration sequence */ + I2C_GenerateSTOP(CODEC_I2C, ENABLE); + +#ifdef VERIFY_WRITTENDATA + /* Verify that the data has been correctly written */ + result = (Codec_ReadRegister(RegisterAddr) == RegisterValue)? 0:1; +#endif /* VERIFY_WRITTENDATA */ + + /* Return the verifying value: 0 (Passed) or 1 (Failed) */ + return result; +} + +/** + * @brief Reads and returns the value of an audio codec register through the + * control interface (I2C). + * @param RegisterAddr: Address of the register to be read. + * @retval Value of the register to be read or dummy value if the communication + * fails. + */ +static uint32_t Codec_ReadRegister(uint8_t RegisterAddr) +{ + uint32_t result = 0; + + /*!< While the bus is busy */ + CODECTimeout = CODEC_LONG_TIMEOUT; + while(I2C_GetFlagStatus(CODEC_I2C, I2C_FLAG_BUSY)) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /* Start the config sequence */ + I2C_GenerateSTART(CODEC_I2C, ENABLE); + + /* Test on EV5 and clear it */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while (!I2C_CheckEvent(CODEC_I2C, I2C_EVENT_MASTER_MODE_SELECT)) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /* Transmit the slave address and enable writing operation */ + I2C_Send7bitAddress(CODEC_I2C, CODEC_ADDRESS, I2C_Direction_Transmitter); + + /* Test on EV6 and clear it */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while (!I2C_CheckEvent(CODEC_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /* Transmit the register address to be read */ + I2C_SendData(CODEC_I2C, RegisterAddr); + + /* Test on EV8 and clear it */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while (I2C_GetFlagStatus(CODEC_I2C, I2C_FLAG_BTF) == RESET) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /*!< Send STRAT condition a second time */ + I2C_GenerateSTART(CODEC_I2C, ENABLE); + + /*!< Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while(!I2C_CheckEvent(CODEC_I2C, I2C_EVENT_MASTER_MODE_SELECT)) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /*!< Send Codec address for read */ + I2C_Send7bitAddress(CODEC_I2C, CODEC_ADDRESS, I2C_Direction_Receiver); + + /* Wait on ADDR flag to be set (ADDR is still not cleared at this level */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while(I2C_GetFlagStatus(CODEC_I2C, I2C_FLAG_ADDR) == RESET) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /*!< Disable Acknowledgment */ + I2C_AcknowledgeConfig(CODEC_I2C, DISABLE); + + /* Clear ADDR register by reading SR1 then SR2 register (SR1 has already been read) */ + (void)CODEC_I2C->SR2; + + /*!< Send STOP Condition */ + I2C_GenerateSTOP(CODEC_I2C, ENABLE); + + /* Wait for the byte to be received */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while(I2C_GetFlagStatus(CODEC_I2C, I2C_FLAG_RXNE) == RESET) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /*!< Read the byte received from the Codec */ + result = I2C_ReceiveData(CODEC_I2C); + + /* Wait to make sure that STOP flag has been cleared */ + CODECTimeout = CODEC_FLAG_TIMEOUT; + while(CODEC_I2C->CR1 & I2C_CR1_STOP) + { + if((CODECTimeout--) == 0) return Codec_TIMEOUT_UserCallback(); + } + + /*!< Re-Enable Acknowledgment to be ready for another reception */ + I2C_AcknowledgeConfig(CODEC_I2C, ENABLE); + + /* Clear AF flag for next communication */ + I2C_ClearFlag(CODEC_I2C, I2C_FLAG_AF); + + /* Return the byte read from Codec */ + return result; +} + +/** + * @brief Initializes the Audio Codec control interface (I2C). + * @param None + * @retval None + */ +static void Codec_CtrlInterface_Init(void) +{ + I2C_InitTypeDef I2C_InitStructure; + + /* Enable the CODEC_I2C peripheral clock */ + RCC_APB1PeriphClockCmd(CODEC_I2C_CLK, ENABLE); + + /* If the I2C peripheral is already enabled, don't reconfigure it */ + if ((CODEC_I2C->CR1 & I2C_CR1_PE) != 0) + { + /* CODEC_I2C peripheral configuration */ + I2C_DeInit(CODEC_I2C); + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; + I2C_InitStructure.I2C_OwnAddress1 = 0x33; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + + /* Enable the I2C peripheral */ + I2C_Cmd(CODEC_I2C, ENABLE); + + /* Initialize the I2C peripheral */ + I2C_Init(CODEC_I2C, &I2C_InitStructure); + } +} + +/** + * @brief Restore the Audio Codec control interface to its default state. + * This function doesn't de-initialize the I2C because the I2C peripheral + * may be used by other modules. + * @param None + * @retval None + */ +static void Codec_CtrlInterface_DeInit(void) +{ + /* Disable the I2C peripheral */ /* This step is not done here because + the I2C interface can be used by other modules */ + /* I2C_DeInit(CODEC_I2C); */ +} + +/** + * @brief Initializes the Audio Codec audio interface (I2S) + * @note This function assumes that the I2S input clock (through PLL_R in + * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) + * is already configured and ready to be used. + * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. + * @retval None + */ +static void Codec_AudioInterface_Init(uint32_t AudioFreq) +{ + I2S_InitTypeDef I2S_InitStructure; + + /* Enable the CODEC_I2S peripheral clock */ + RCC_APB1PeriphClockCmd(CODEC_I2S_CLK, ENABLE); + + /* CODEC_I2S peripheral configuration */ + SPI_I2S_DeInit(CODEC_I2S); + I2S_InitStructure.I2S_AudioFreq = AudioFreq; + I2S_InitStructure.I2S_Standard = I2S_STANDARD; + I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b; + I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low; + I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx; +#ifdef CODEC_MCLK_ENABLED + I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Enable; +#elif defined(CODEC_MCLK_DISABLED) + I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable; +#else + #error "No selection for the MCLK output has been defined !" +#endif /* CODEC_MCLK_ENABLED */ + + /* Initialize the I2S peripheral with the structure above */ + I2S_Init(CODEC_I2S, &I2S_InitStructure); + + /* The I2S peripheral will be enabled only in the EVAL_AUDIO_Play() function + or by user functions if DMA mode not enabled */ +} + +/** + * @brief Restores the Audio Codec audio interface to its default state. + * @param None + * @retval None + */ +static void Codec_AudioInterface_DeInit(void) +{ + /* Disable the CODEC_I2S peripheral (in case it hasn't already been disabled) */ + I2S_Cmd(CODEC_I2S, DISABLE); + + /* Deinitialize the CODEC_I2S peripheral */ + SPI_I2S_DeInit(CODEC_I2S); + + /* Disable the CODEC_I2S peripheral clock */ + RCC_APB1PeriphClockCmd(CODEC_I2S_CLK, DISABLE); +} + +/** + * @brief Initializes IOs used by the Audio Codec (on the control and audio + * interfaces). + * @param None + * @retval None + */ +static void Codec_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable I2S and I2C GPIO clocks */ + RCC_AHB1PeriphClockCmd(CODEC_I2C_GPIO_CLOCK | CODEC_I2S_GPIO_CLOCK, ENABLE); + + /* CODEC_I2C SCL and SDA pins configuration -------------------------------------*/ + /* If the I2C peripheral is already enabled, don't reconfigure it */ + if ((CODEC_I2C->CR1 & I2C_CR1_PE) != 0) + { + GPIO_InitStructure.GPIO_Pin = CODEC_I2C_SCL_PIN | CODEC_I2C_SDA_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(CODEC_I2C_GPIO, &GPIO_InitStructure); + /* Connect pins to Periph */ + GPIO_PinAFConfig(CODEC_I2C_GPIO, CODEC_I2S_SCL_PINSRC, CODEC_I2C_GPIO_AF); + GPIO_PinAFConfig(CODEC_I2C_GPIO, CODEC_I2S_SDA_PINSRC, CODEC_I2C_GPIO_AF); + } + + /* CODEC_I2S pins configuration: WS, SCK and SD pins -----------------------------*/ + GPIO_InitStructure.GPIO_Pin = CODEC_I2S_WS_PIN | CODEC_I2S_SCK_PIN | CODEC_I2S_SD_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(CODEC_I2S_GPIO, &GPIO_InitStructure); + /* Connect pins to I2S peripheral */ + GPIO_PinAFConfig(CODEC_I2S_GPIO, CODEC_I2S_WS_PINSRC, CODEC_I2S_GPIO_AF); + GPIO_PinAFConfig(CODEC_I2S_GPIO, CODEC_I2S_SCK_PINSRC, CODEC_I2S_GPIO_AF); + GPIO_PinAFConfig(CODEC_I2S_GPIO, CODEC_I2S_SD_PINSRC, CODEC_I2S_GPIO_AF); + + #ifdef CODEC_MCLK_ENABLED + /* CODEC_I2S pins configuration: MCK pin */ + GPIO_InitStructure.GPIO_Pin = CODEC_I2S_MCK_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(CODEC_I2S_MCK_GPIO, &GPIO_InitStructure); + /* Connect pins to I2S peripheral */ + GPIO_PinAFConfig(CODEC_I2S_MCK_GPIO, CODEC_I2S_MCK_PINSRC, CODEC_I2S_GPIO_AF); + #endif /* CODEC_MCLK_ENABLED */ +} + +/** + * @brief Restores the IOs used by the Audio Codec interface to their default state. + * @param None + * @retval None + */ +static void Codec_GPIO_DeInit(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* Deinitialize all the GPIOs used by the driver (EXCEPT the I2C IOs since + they are used by the IOExpander as well) */ + GPIO_InitStructure.GPIO_Pin = CODEC_I2S_WS_PIN | CODEC_I2S_SCK_PIN | CODEC_I2S_SD_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(CODEC_I2S_GPIO, &GPIO_InitStructure); + /* Disconnect pins from I2S peripheral */ + GPIO_PinAFConfig(CODEC_I2S_GPIO, CODEC_I2S_WS_PIN, 0x00); + GPIO_PinAFConfig(CODEC_I2S_GPIO, CODEC_I2S_SCK_PIN, 0x00); + GPIO_PinAFConfig(CODEC_I2S_GPIO, CODEC_I2S_SD_PIN, 0x00); + +#ifdef CODEC_MCLK_ENABLED + /* CODEC_I2S pins deinitialization: MCK pin */ + GPIO_InitStructure.GPIO_Pin = CODEC_I2S_MCK_PIN; + GPIO_Init(CODEC_I2S_MCK_GPIO, &GPIO_InitStructure); + /* Disconnect pins from I2S peripheral */ + GPIO_PinAFConfig(CODEC_I2S_MCK_GPIO, CODEC_I2S_MCK_PINSRC, CODEC_I2S_GPIO_AF); +#endif /* CODEC_MCLK_ENABLED */ +} + +/** + * @brief Inserts a delay time (not accurate timing). + * @param nCount: specifies the delay time length. + * @retval None + */ +static void Delay( __IO uint32_t nCount) +{ + for (; nCount != 0; nCount--); +} + +#ifdef USE_DEFAULT_TIMEOUT_CALLBACK +/** + * @brief Basic management of the timeout situation. + * @param None + * @retval None + */ +uint32_t Codec_TIMEOUT_UserCallback(void) +{ + /* The following code allows I2C error recovery and return to normal communication + if the error source doesn抰 still exist (ie. hardware issue..) */ + I2C_InitTypeDef I2C_InitStructure; + + /* LCD_ErrLog("> I2C Timeout error occurred\n"); */ + + I2C_GenerateSTOP(CODEC_I2C, ENABLE); + I2C_SoftwareResetCmd(CODEC_I2C, ENABLE); + I2C_SoftwareResetCmd(CODEC_I2C, DISABLE); + + /* CODEC_I2C peripheral configuration */ + I2C_DeInit(CODEC_I2C); + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; + I2C_InitStructure.I2C_OwnAddress1 = 0x33; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + /* Enable the I2C peripheral */ + I2C_Cmd(CODEC_I2C, ENABLE); + I2C_Init(CODEC_I2C, &I2C_InitStructure); + + /* At this stage the I2C error should be recovered and device can communicate + again (except if the error source still exist). + User can implement mechanism (ex. test on max trial number) to manage situation + when the I2C can't recover from current error. */ + + /* LCD_UsrLog("> I2C error recovered.\n"); */ + + return 0; +} +#endif /* USE_DEFAULT_TIMEOUT_CALLBACK */ +/*======================== + + Audio MAL Interface Control Functions + + ==============================*/ + +/** + * @brief Initializes and prepares the Media to perform audio data transfer + * from Media to the I2S peripheral. + * @param None + * @retval None + */ +static void Audio_MAL_Init(void) +{ +#if defined(AUDIO_MAL_DMA_IT_TC_EN) || defined(AUDIO_MAL_DMA_IT_HT_EN) || defined(AUDIO_MAL_DMA_IT_TE_EN) + NVIC_InitTypeDef NVIC_InitStructure; +#endif + + /* Enable the DMA clock */ + RCC_AHB1PeriphClockCmd(AUDIO_MAL_DMA_CLOCK, ENABLE); + + /* Configure the DMA Stream */ + DMA_Cmd(AUDIO_MAL_DMA_STREAM, DISABLE); + DMA_DeInit(AUDIO_MAL_DMA_STREAM); + /* Set the parameters to be configured */ + DMA_InitStructure.DMA_Channel = AUDIO_MAL_DMA_CHANNEL; + DMA_InitStructure.DMA_PeripheralBaseAddr = CODEC_I2S_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)0; /* This field will be configured in play function */ + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = (uint32_t)0xFFFE; /* This field will be configured in play function */ + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = AUDIO_MAL_DMA_PERIPH_DATA_SIZE; + DMA_InitStructure.DMA_MemoryDataSize = AUDIO_MAL_DMA_MEM_DATA_SIZE; +#ifdef AUDIO_MAL_MODE_NORMAL + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; +#elif defined(AUDIO_MAL_MODE_CIRCULAR) + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; +#else + #error "AUDIO_MAL_MODE_NORMAL or AUDIO_MAL_MODE_CIRCULAR should be selected !!" +#endif /* AUDIO_MAL_MODE_NORMAL */ + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(AUDIO_MAL_DMA_STREAM, &DMA_InitStructure); + + /* Enable the selected DMA interrupts (selected in "stm32_eval_audio_codec.h" defines) */ +#ifdef AUDIO_MAL_DMA_IT_TC_EN + DMA_ITConfig(AUDIO_MAL_DMA_STREAM, DMA_IT_TC, ENABLE); +#endif /* AUDIO_MAL_DMA_IT_TC_EN */ +#ifdef AUDIO_MAL_DMA_IT_HT_EN + DMA_ITConfig(AUDIO_MAL_DMA_STREAM, DMA_IT_HT, ENABLE); +#endif /* AUDIO_MAL_DMA_IT_HT_EN */ +#ifdef AUDIO_MAL_DMA_IT_TE_EN + DMA_ITConfig(AUDIO_MAL_DMA_STREAM, DMA_IT_TE | DMA_IT_FE | DMA_IT_DME, ENABLE); +#endif /* AUDIO_MAL_DMA_IT_TE_EN */ + + /* Enable the I2S DMA request */ + SPI_I2S_DMACmd(CODEC_I2S, SPI_I2S_DMAReq_Tx, ENABLE); + +#if defined(AUDIO_MAL_DMA_IT_TC_EN) || defined(AUDIO_MAL_DMA_IT_HT_EN) || defined(AUDIO_MAL_DMA_IT_TE_EN) + /* I2S DMA IRQ Channel configuration */ + NVIC_InitStructure.NVIC_IRQChannel = AUDIO_MAL_DMA_IRQ; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = EVAL_AUDIO_IRQ_PREPRIO; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = EVAL_AUDIO_IRQ_SUBRIO; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +#endif +} + +/** + * @brief Restore default state of the used Media. + * @param None + * @retval None + */ +static void Audio_MAL_DeInit(void) +{ +#if defined(AUDIO_MAL_DMA_IT_TC_EN) || defined(AUDIO_MAL_DMA_IT_HT_EN) || defined(AUDIO_MAL_DMA_IT_TE_EN) + NVIC_InitTypeDef NVIC_InitStructure; + + /* Deinitialize the NVIC interrupt for the I2S DMA Stream */ + NVIC_InitStructure.NVIC_IRQChannel = AUDIO_MAL_DMA_IRQ; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = EVAL_AUDIO_IRQ_PREPRIO; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = EVAL_AUDIO_IRQ_SUBRIO; + NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE; + NVIC_Init(&NVIC_InitStructure); +#endif + + /* Disable the DMA stream before the deinit */ + DMA_Cmd(AUDIO_MAL_DMA_STREAM, DISABLE); + + /* Dinitialize the DMA Stream */ + DMA_DeInit(AUDIO_MAL_DMA_STREAM); + + /* + The DMA clock is not disabled, since it can be used by other streams + */ +} + +/** + * @brief Starts playing audio stream from the audio Media. + * @param None + * @retval None + */ +static void Audio_MAL_Play(uint32_t Addr, uint32_t Size) +{ + /* Configure the buffer address and size */ + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)Addr; + DMA_InitStructure.DMA_BufferSize = (uint32_t)Size; + + /* Configure the DMA Stream with the new parameters */ + DMA_Init(AUDIO_MAL_DMA_STREAM, &DMA_InitStructure); + + /* Enable the I2S DMA Stream*/ + DMA_Cmd(AUDIO_MAL_DMA_STREAM, ENABLE); + + /* If the I2S peripheral is still not enabled, enable it */ + if ((CODEC_I2S->I2SCFGR & I2S_ENABLE_MASK) == 0) + { + I2S_Cmd(CODEC_I2S, ENABLE); + } +} + +/** + * @brief Pauses or Resumes the audio stream playing from the Media. + * @param Cmd: AUDIO_PAUSE (or 0) to pause, AUDIO_RESUME (or any value different + * from 0) to resume. + * @param Addr: Address from/at which the audio stream should resume/pause. + * @retval None + */ +static void Audio_MAL_PauseResume(uint32_t Cmd, uint32_t Addr) +{ + /* Pause the audio file playing */ + if (Cmd == AUDIO_PAUSE) + { + /* Disable the I2S DMA request */ + SPI_I2S_DMACmd(CODEC_I2S, SPI_I2S_DMAReq_Tx, DISABLE); + + /* Pause the I2S DMA Stream + Note. For the STM32F2xx devices, the DMA implements a pause feature, + by disabling the stream, all configuration is preserved and data + transfer is paused till the next enable of the stream.*/ + DMA_Cmd(AUDIO_MAL_DMA_STREAM, DISABLE); + } + else /* AUDIO_RESUME */ + { + /* Enable the I2S DMA request */ + SPI_I2S_DMACmd(CODEC_I2S, SPI_I2S_DMAReq_Tx, ENABLE); + + /* Resume the I2S DMA Stream + Note. For the STM32F2xx devices, the DMA implements a pause feature, + by disabling the stream, all configuration is preserved and data + transfer is paused till the next enable of the stream.*/ + DMA_Cmd(AUDIO_MAL_DMA_STREAM, ENABLE); + + /* If the I2S peripheral is still not enabled, enable it */ + if ((CODEC_I2S->I2SCFGR & I2S_ENABLE_MASK) == 0) + { + I2S_Cmd(CODEC_I2S, ENABLE); + } + } +} + +/** + * @brief Stops audio stream playing on the used Media. + * @param None + * @retval None + */ +static void Audio_MAL_Stop(void) +{ + /* Stop the Transfer on the I2S side: Stop and disable the DMA stream */ + DMA_Cmd(AUDIO_MAL_DMA_STREAM, DISABLE); + + /* Clear all the DMA flags for the next transfer */ + DMA_ClearFlag(AUDIO_MAL_DMA_STREAM, AUDIO_MAL_DMA_FLAG_TC |AUDIO_MAL_DMA_FLAG_HT | \ + AUDIO_MAL_DMA_FLAG_FE | AUDIO_MAL_DMA_FLAG_TE); + + /* + The I2S DMA requests are not disabled here. + */ + + /* In all modes, disable the I2S peripheral */ + I2S_Cmd(CODEC_I2S, DISABLE); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_audio_codec.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_audio_codec.h new file mode 100644 index 000000000..b648678fa --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_audio_codec.h @@ -0,0 +1,278 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_audio_codec.h + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file contains all the functions prototypes for the + * stm322xg_eval_audio_codec.c driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM322xG_EVAL_AUDIOCODEC_H +#define __STM322xG_EVAL_AUDIOCODEC_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" +#include "stm322xg_eval_ioe.h" /* IOExpander driver is included in order to allow + CS43L22 codec reset pin managment on the + evaluation board */ + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC + * @{ + */ + + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Exported_Types + * @{ + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Exported_Constants + * @{ + */ + +/*------------------------------------ + CONFIGURATION: Audio Codec Driver Configuration parameters + ----------------------------------------*/ +/* Audio Transfer mode (DMA, Interrupt or Polling) */ +#define AUDIO_MAL_MODE_NORMAL /* Uncomment this line to enable the audio + Transfer using DMA */ +/* #define AUDIO_MAL_MODE_CIRCULAR */ /* Uncomment this line to enable the audio + Transfer using DMA */ + +/* For the DMA modes select the interrupt that will be used */ +#define AUDIO_MAL_DMA_IT_TC_EN /* Uncomment this line to enable DMA Transfer Complete interrupt */ +/* #define AUDIO_MAL_DMA_IT_HT_EN */ /* Uncomment this line to enable DMA Half Transfer Complete interrupt */ +/* #define AUDIO_MAL_DMA_IT_TE_EN */ /* Uncomment this line to enable DMA Transfer Error interrupt */ + +/* Select the interrupt preemption priority and subpriority for the DMA interrupt */ +#define EVAL_AUDIO_IRQ_PREPRIO 0 /* Select the preemption priority level(0 is the highest) */ +#define EVAL_AUDIO_IRQ_SUBRIO 0 /* Select the sub-priority level (0 is the highest) */ + +/* Uncomment the following line to use the default Codec_TIMEOUT_UserCallback() + function implemented in stm322xg_eval_audio_codec.c file. + Codec_TIMEOUT_UserCallback() function is called whenever a timeout condition + occurs during communication (waiting on an event that doesn't occur, bus + errors, busy devices ...). */ +/* #define USE_DEFAULT_TIMEOUT_CALLBACK */ +/*----------------------------------------------------------------------------*/ + +/*------------------------------------ + OPTIONAL Configuration defines parameters + ----------------------------------------*/ +/* I2C clock speed configuration (in Hz) + WARNING: + Make sure that this define is not already declared in other files (ie. + stm322xg_eval.h file). It can be used in parallel by other modules. */ +#ifndef I2C_SPEED + #define I2C_SPEED 100000 +#endif /* I2C_SPEED */ + +/* Uncomment defines below to select standard for audio communication between + Codec and I2S peripheral */ +#define I2S_STANDARD_PHILLIPS +/* #define I2S_STANDARD_MSB */ +/* #define I2S_STANDARD_LSB */ + +/* Uncomment the defines below to select if the Master clock mode should be + enabled or not */ +#define CODEC_MCLK_ENABLED +/* #deine CODEC_MCLK_DISABLED */ + +/* Uncomment this line to enable verifying data sent to codec after each write + operation */ +#define VERIFY_WRITTENDATA +/*----------------------------------------------------------------------------*/ + +/*----------------------------------- + Hardware Configuration defines parameters + -----------------------------------------*/ +/* I2S peripheral configuration defines */ +#define CODEC_I2S SPI2 +#define CODEC_I2S_CLK RCC_APB1Periph_SPI2 +#define CODEC_I2S_ADDRESS 0x4000380C +#define CODEC_I2S_GPIO_AF GPIO_AF_SPI2 +#define CODEC_I2S_IRQ SPI2_IRQn +#define CODEC_I2S_GPIO_CLOCK (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOI) +#define CODEC_I2S_WS_PIN GPIO_Pin_0 +#define CODEC_I2S_SCK_PIN GPIO_Pin_1 +#define CODEC_I2S_SD_PIN GPIO_Pin_3 +#define CODEC_I2S_MCK_PIN GPIO_Pin_6 +#define CODEC_I2S_WS_PINSRC GPIO_PinSource0 +#define CODEC_I2S_SCK_PINSRC GPIO_PinSource1 +#define CODEC_I2S_SD_PINSRC GPIO_PinSource3 +#define CODEC_I2S_MCK_PINSRC GPIO_PinSource6 +#define CODEC_I2S_GPIO GPIOI +#define CODEC_I2S_MCK_GPIO GPIOC + + + /* I2S DMA Stream definitions */ + #define AUDIO_MAL_DMA_CLOCK RCC_AHB1Periph_DMA1 + #define AUDIO_MAL_DMA_STREAM DMA1_Stream4 + #define AUDIO_MAL_DMA_CHANNEL DMA_Channel_0 + #define AUDIO_MAL_DMA_IRQ DMA1_Stream4_IRQn + #define AUDIO_MAL_DMA_FLAG_TC DMA_FLAG_TCIF4 + #define AUDIO_MAL_DMA_FLAG_HT DMA_FLAG_HTIF4 + #define AUDIO_MAL_DMA_FLAG_FE DMA_FLAG_FEIF4 + #define AUDIO_MAL_DMA_FLAG_TE DMA_FLAG_TEIF4 + #define AUDIO_MAL_DMA_FLAG_DME DMA_FLAG_DMEIF4 + #define AUDIO_MAL_DMA_PERIPH_DATA_SIZE DMA_PeripheralDataSize_HalfWord + #define AUDIO_MAL_DMA_MEM_DATA_SIZE DMA_MemoryDataSize_HalfWord + #define DMA_MAX_SZE 0xFFFF + + #define Audio_MAL_IRQHandler DMA1_Stream4_IRQHandler + +/* I2C peripheral configuration defines (control interface of the audio codec) */ +#define CODEC_I2C I2C1 +#define CODEC_I2C_CLK RCC_APB1Periph_I2C1 +#define CODEC_I2C_GPIO_CLOCK RCC_AHB1Periph_GPIOB +#define CODEC_I2C_GPIO_AF GPIO_AF_I2C1 +#define CODEC_I2C_GPIO GPIOB +#define CODEC_I2C_SCL_PIN GPIO_Pin_6 +#define CODEC_I2C_SDA_PIN GPIO_Pin_9 +#define CODEC_I2S_SCL_PINSRC GPIO_PinSource6 +#define CODEC_I2S_SDA_PINSRC GPIO_PinSource9 + +/* Maximum Timeout values for flags and events waiting loops. These timeouts are + not based on accurate values, they just guarantee that the application will + not remain stuck if the I2C communication is corrupted. + You may modify these timeout values depending on CPU frequency and application + conditions (interrupts routines ...). */ +#define CODEC_FLAG_TIMEOUT ((uint32_t)0x1000) +#define CODEC_LONG_TIMEOUT ((uint32_t)(300 * CODEC_FLAG_TIMEOUT)) +/*----------------------------------------------------------------------------*/ + +/*----------------------------------- + Audio Codec User defines + -----------------------------------------*/ +/* Codec output DEVICE */ +#define OUTPUT_DEVICE_SPEAKER 1 +#define OUTPUT_DEVICE_HEADPHONE 2 +#define OUTPUT_DEVICE_BOTH 3 +#define OUTPUT_DEVICE_AUTO 4 + +/* Volume Levels values */ +#define DEFAULT_VOLMIN 0x00 +#define DEFAULT_VOLMAX 0xFF +#define DEFAULT_VOLSTEP 0x04 + +#define AUDIO_PAUSE 0 +#define AUDIO_RESUME 1 + +/* Codec POWER DOWN modes */ +#define CODEC_PDWN_HW 1 +#define CODEC_PDWN_SW 2 + +/* MUTE commands */ +#define AUDIO_MUTE_ON 1 +#define AUDIO_MUTE_OFF 0 +/*----------------------------------------------------------------------------*/ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Exported_Macros + * @{ + */ +#define VOLUME_CONVERT(x) ((Volume > 100)? 100:((uint8_t)((Volume * 255) / 100))) +#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE) + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_AUDIO_CODEC_Exported_Functions + * @{ + */ + +uint32_t EVAL_AUDIO_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); +uint32_t EVAL_AUDIO_DeInit(void); +uint32_t EVAL_AUDIO_Play(uint16_t* pBuffer, uint32_t Size); +uint32_t EVAL_AUDIO_PauseResume(uint32_t Cmd); +uint32_t EVAL_AUDIO_Stop(uint32_t CodecPowerDown_Mode); +uint32_t EVAL_AUDIO_VolumeCtl(uint8_t Volume); +uint32_t EVAL_AUDIO_Mute(uint32_t Command); + +uint32_t Codec_SwitchOutput(uint8_t Output); + +/* User Callbacks: user has to implement these functions in his code if + they are needed. -----------------------------------------------------------*/ + +/* This function is called when the requested data has been completely transferred. + In Normal mode (when the define AUDIO_MAL_MODE_NORMAL is enabled) this function + is called at the end of the whole audio file. + In circular mode (when the define AUDIO_MAL_MODE_CIRCULAR is enabled) this + function is called at the end of the current buffer transmission. */ +void EVAL_AUDIO_TransferComplete_CallBack(uint32_t pBuffer, uint32_t Size); + +/* This function is called when half of the requested buffer has been transferred + This callback is useful in Circular mode only (when AUDIO_MAL_MODE_CIRCULAR + define is enabled)*/ +void EVAL_AUDIO_HalfTransfer_CallBack(uint32_t pBuffer, uint32_t Size); + +/* This function is called when an Interrupt due to transfer error on or peripheral + error occurs. */ +void EVAL_AUDIO_Error_CallBack(void* pData); + +/* Codec_TIMEOUT_UserCallback() function is called whenever a timeout condition + occurs during communication (waiting on an event that doesn't occur, bus + errors, busy devices ...) on the Codec control interface (I2C). + You can use the default timeout callback implementation by uncommenting the + define USE_DEFAULT_TIMEOUT_CALLBACK in stm322xg_eval_audio_codec.h file. + Typically the user implementation of this callback should reset I2C peripheral + and re-initialize communication or in worst case reset all the application. */ +uint32_t Codec_TIMEOUT_UserCallback(void); + +#endif /* __STM322xG_EVAL_AUDIOCODEC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_onenand.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_onenand.c new file mode 100644 index 000000000..fa7522406 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_onenand.c @@ -0,0 +1,567 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_fsmc_onenand.c + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file provides a set of functions needed to drive the + * KFG1216U2A/B-DIB6 OneNAND memory mounted on STM322xG-EVAL evaluation + * board(MB786) RevA. + * + * Note: This memory is not available on the RevB of the board. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_fsmc_onenand.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_FSMC_ONENAND + * @brief This file provides a set of functions needed to drive the + * KFG1216U2A/B-DIB6 OneNAND memory mounted on STM322xG-EVAL board. + * @{ + */ + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Private_Defines + * @{ + */ +#define BANK1_ONENAND1_ADDR ((uint32_t)0x60000000) +#define ONENAND_BOOTPARTITION_ADDR ((uint32_t)BANK1_ONENAND1_ADDR) + + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Private_Macros + * @{ + */ +#define OneNAND_WRITE(Address, Data) (*(__IO uint16_t *)(Address) = (Data)) + +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Private_Variables + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Private_Functions + * @{ + */ + +/** + * @brief Configures the FSMC and GPIOs to interface with the OneNAND memory. + * This function must be called before any write/read operation on the + * OneNAND. + * @param None + * @retval None + */ +void OneNAND_Init(void) +{ + FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; + FSMC_NORSRAMTimingInitTypeDef p; + GPIO_InitTypeDef GPIO_InitStructure; + + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOE | + RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_GPIOB, ENABLE); + + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + + RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); + +/*-- GPIO Configuration ------------------------------------------------------*/ + /* OneNAND Data lines configuration */ + GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC); + + GPIO_PinAFConfig(GPIOE, GPIO_PinSource7, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource8, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_FSMC); + + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | + GPIO_Pin_14 | GPIO_Pin_15 |GPIO_Pin_10; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + + GPIO_Init(GPIOD, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | + GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |GPIO_Pin_15; + + GPIO_Init(GPIOE, &GPIO_InitStructure); + + /* OneNAND Address lines configuration */ + GPIO_PinAFConfig(GPIOF,GPIO_PinSource0, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource1, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource2, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource3, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource4, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource5, GPIO_AF_FSMC); + + GPIO_PinAFConfig(GPIOF,GPIO_PinSource12, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource13, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource14, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource15, GPIO_AF_FSMC); + + GPIO_PinAFConfig(GPIOG,GPIO_PinSource0, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource1, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource2, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource3, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource4, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource5, GPIO_AF_FSMC); + + GPIO_PinAFConfig(GPIOD,GPIO_PinSource11, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD,GPIO_PinSource12, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD,GPIO_PinSource13, GPIO_AF_FSMC); + + GPIO_PinAFConfig(GPIOE,GPIO_PinSource3, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE,GPIO_PinSource4, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE,GPIO_PinSource5, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE,GPIO_PinSource6, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE,GPIO_PinSource2, GPIO_AF_FSMC); + + GPIO_PinAFConfig(GPIOG,GPIO_PinSource13, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource14, GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | + GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_12 | GPIO_Pin_13 | + GPIO_Pin_14 | GPIO_Pin_15; + + GPIO_Init(GPIOF, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | + GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_13 | GPIO_Pin_14; + + GPIO_Init(GPIOG, &GPIO_InitStructure); + + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13; + + GPIO_Init(GPIOD, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4| GPIO_Pin_5 | GPIO_Pin_6; + + GPIO_Init(GPIOE, &GPIO_InitStructure); + + + /* NOE, NWE and CLK configuration */ + GPIO_PinAFConfig(GPIOD,GPIO_PinSource3, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD,GPIO_PinSource4, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD,GPIO_PinSource5, GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_3; + + GPIO_Init(GPIOD, &GPIO_InitStructure); + + + /* NE1 configuration */ + GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; + + GPIO_Init(GPIOD, &GPIO_InitStructure); + + /* NL configuration */ + GPIO_PinAFConfig(GPIOB,GPIO_PinSource7, GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* NWAIT Configuration */ + GPIO_PinAFConfig(GPIOD,GPIO_PinSource6, GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_Init(GPIOD, &GPIO_InitStructure); + + /*-- FSMC Configuration ----------------------------------------------------*/ + p.FSMC_AddressSetupTime = 0x03; + p.FSMC_AddressHoldTime = 0x00; + p.FSMC_DataSetupTime = 0x0C; + p.FSMC_BusTurnAroundDuration = 0x01; + p.FSMC_CLKDivision = 0x2; + p.FSMC_DataLatency = 0x00; + p.FSMC_AccessMode = FSMC_AccessMode_B; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Enable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; + + FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); + FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); +} + +/** + * @brief Resets the OneNAND memory. + * @param None + * @retval None + */ +void OneNAND_Reset(void) +{ + OneNAND_WRITE(ONENAND_BOOTPARTITION_ADDR, OneNAND_CMD_RESET); +} + +/** + * @brief Reads OneNAND memory's Manufacturer and Device Code. + * @param OneNAND_ID: pointer to a OneNAND_IDTypeDef structure which will hold + * the Manufacturer and Device Code. + * @retval None + */ +void OneNAND_ReadID(OneNAND_IDTypeDef* OneNAND_ID) +{ + uint16_t status = 0x0; + + /* Wait till no ongoing operation */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + + while((status & 0x8000) == 0x8000) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + } + + /* Read ID data */ + OneNAND_ID->Manufacturer_ID = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_MANUFACTERID); + OneNAND_ID->Device_ID = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_DEVICEID); + + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_SYSTEMCONFIGURATION) = 0x40E0; +} + +/** + * @brief Unlocks the specified OneNAND memory block (128Kb). + * @param BlockNumber: specifies the block number to be erased. This parameter + * should be between 0 and 511. + * @retval OneNAND memory Interrupt Status. + */ +uint16_t OneNAND_UnlockBlock(uint16_t BlockNumber) +{ + uint16_t status = 0; + + /* Wait till no ongoing operation */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + + while((status & 0x8000) == 0x8000) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + } + + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTBLOCKADDRESS) = BlockNumber; + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT) = 0x0000; + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_COMMAND) = OneNAND_CMD_UNLOCK; + + /* Wait till the command is completed */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + + while((status & 0x8000) != 0x8000) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + } + + /* Get the Controller Status */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + + return (status); +} + +/** + * @brief Erases the specified OneNAND memory block (128Kb). + * @param BlockNumber: specifies the block number to be erased. This parameter + * should be between 0 and 511. + * @retval OneNAND memory Interrupt Status. + */ +uint16_t OneNAND_EraseBlock(uint16_t BlockNumber) +{ + uint16_t status = 0x0; + + /* Wait till no ongoing operation */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + + while((status & 0x8000) == 0x8000) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + } + + /* Erase operation */ + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTADDRESS1) = BlockNumber; + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT) = 0x0000; + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_COMMAND) = OneNAND_CMD_ERASE; + + /* Wait till no error is generated */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + + while((status & 0x0400) == 0x0400) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + } + + /* Wait till the command is completed */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + + while((status & 0x8000) != 0x8000) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + } + + /* Get the Controller Status */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + + return (status); +} + +/** + * @brief Writes a Half-word buffer to the OneNAND memory. + * @param pBuffer: pointer to buffer. + * @param WriteAddr: OneNAND memory internal address from which the data will be + * written. + * @param NumHalfwordToWrite: number of half-words to write. + * @retval OneNAND memory Controller Status. + */ +uint16_t OneNAND_WriteBuffer(uint16_t* pBuffer, OneNAND_ADDRESS Address, uint32_t NumHalfwordToWrite) +{ + uint32_t datacounter = 0; + uint16_t status = 0; + + /* Load the buffer to be written into the DATA RAM0*/ + for(datacounter = 0; datacounter < NumHalfwordToWrite; datacounter++) + { + *(__IO uint16_t *)((BANK1_ONENAND1_ADDR + OneNAND_DATA_RAM_0_0_ADD) + (2*datacounter)) = pBuffer[datacounter]; + } + + /* Write operation from DATA RAM0 to NAND address*/ + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTADDRESS1) = Address.Block; /* NAND Flash block address*/ + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTADDRESINT8_T) = (uint16_t)(Address.Page << 2); /* NAND Flash start page address */ + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTBUFFER) = OneNAND_DATA_RAM_0_0_REG;/* BufferRAM Sector Count (BSC) and BufferRAM Sector Address (BSA).*/ + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT) = 0x0000; + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_COMMAND) = OneNAND_CMD_PROGRAM; /* Command */ + + /* Wait till the command is completed */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + + while((status & 0x8000) != 0x8000) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + } + + /* Wait till the write interrupt is set */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + + while((status & 0x40) != 0x40) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + } + + /* Get the Controller Status */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + + return (status); +} + +/** + * @brief Reads a block of data from the OneNAND memory using asynchronous mode. + * @param pBuffer: pointer to the buffer that receives the data read from the + * OneNAND memory. + * @param ReadAddr: OneNAND memory internal address to read from. + * @param NumHalfwordToRead: number of half-words to read. + * @retval None + */ +void OneNAND_AsynchronousRead(uint16_t* pBuffer, OneNAND_ADDRESS Address, uint32_t NumHalfwordToRead) +{ + uint16_t datatmp = 0x0, index = 0; + __IO uint16_t status = 0; + + datatmp = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_SYSTEMCONFIGURATION); + + /* Set the asynchronous read mode */ + OneNAND_WRITE(BANK1_ONENAND1_ADDR + OneNAND_REG_SYSTEMCONFIGURATION, (datatmp& 0x7FFF)); + + /* Load data from the read address to the DATA RAM 1 sector 1 */ + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTADDRESS1) = Address.Block; /* NAND Flash block address*/ + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTADDRESINT8_T) = (uint16_t)(Address.Page << 2); + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTBUFFER) = OneNAND_DATA_RAM_1_0_REG; + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT) = 0x0000; + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_COMMAND) = OneNAND_CMD_LOAD; /* Command */ + + /* Wait till the command is completed */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + + while((status & 0x8000) != 0x8000) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + } + + /* Read Controller status */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + + /* Read data */ + for(; NumHalfwordToRead != 0x00; NumHalfwordToRead--) /* While there is data to read */ + { + /* Read a Halfword from the memory */ + *pBuffer++ = *(__IO uint16_t *)((BANK1_ONENAND1_ADDR + OneNAND_DATA_RAM_1_0_ADD)+ 2*index); + index++; + } +} + +/** + * @brief Reads a block of data from the OneNAND memory using synchronous mode. + * @param pBuffer: pointer to the buffer that receives the data read from the + * OneNAND memory. + * @param ReadAddr: OneNAND memory internal address to read from. + * @param NumHalfwordToRead: number of half-words to read. + * @retval None + */ +void OneNAND_SynchronousRead(uint16_t* pBuffer, OneNAND_ADDRESS Address, uint32_t NumHalfwordToRead) +{ + uint16_t index = 0; + __IO uint16_t status = 0; + + /* Set the asynchronous read mode */ + OneNAND_WRITE(BANK1_ONENAND1_ADDR + OneNAND_REG_SYSTEMCONFIGURATION, 0xB4C0); + + + /* Load data from the read address to the DATA RAM 1 sector 1 */ + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTADDRESS1) = Address.Block; /* NAND Flash block address*/ + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTADDRESINT8_T) = (uint16_t)(Address.Page << 2); + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_STARTBUFFER) = OneNAND_DATA_RAM_1_0_REG; + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT) = 0x0000; + *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_COMMAND) = OneNAND_CMD_LOAD; /* Command */ + + /* Wait till the command is completed */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + + while((status & 0x8000) != 0x8000) + { + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT); + } + + /* Read Controller status */ + status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS); + + /* Read data */ + for(; NumHalfwordToRead != 0x00; NumHalfwordToRead--) /* While there is data to read */ + { + *pBuffer++ = *(__IO uint16_t *)((BANK1_ONENAND1_ADDR + OneNAND_DATA_RAM_1_0_ADD + 2*index)); + index++; + } +} + +/** + * @brief Reads the OneNAND memory Interrupt status. + * @param None + * @retval OneNAND memory Interrupt Status. + */ +uint16_t OneNAND_ReadStatus(void) +{ + __IO uint16_t status = 0x0; + + /* Read Status */ + return (status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_INTERRUPT)); +} + +/** + * @brief Reads the OneNAND Controller status. + * @param None + * @retval OneNAND Controller Status. + */ +uint16_t OneNAND_ReadControllerStatus(void) +{ + __IO uint16_t status = 0x0; + + /* Read Controller Status */ + return (status = *(__IO uint16_t *)(BANK1_ONENAND1_ADDR + OneNAND_REG_CONTROLSTATUS)); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_onenand.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_onenand.h new file mode 100644 index 000000000..145777dbc --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_onenand.h @@ -0,0 +1,196 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_fsmc_onenand.h + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file contains all the functions prototypes for the + * stm322xg_eval_fsmc_onenand.c driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM322xG_EVAL_FSMC_ONENAND_H +#define __STM322xG_EVAL_FSMC_ONENAND_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_FSMC_ONENAND + * @{ + */ + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Exported_Types + * @{ + */ +typedef struct +{ + uint16_t Manufacturer_ID; + uint16_t Device_ID; +}OneNAND_IDTypeDef; + +/* OneNand Status */ +typedef enum +{ + OneNAND_SUCCESS = 0, + OneNAND_ONGOING, + OneNAND_ERROR, + OneNAND_TIMEOUT +}OneNAND_Status; + +typedef struct +{ + uint16_t Block; + uint16_t Page; +} OneNAND_ADDRESS; + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Exported_Constants + * @{ + */ +/** + * @brief OneNAND memory command + */ +#define OneNAND_CMD_ERASE ((uint16_t)0x0094) +#define OneNAND_CMD_PROGRAM ((uint16_t)0x0080) +#define OneNAND_CMD_RESET ((uint16_t)0x00F0) +#define OneNAND_CMD_READ_ID ((uint16_t)0x0090) +#define OneNAND_CMD_UNLOCK ((uint16_t)0x0023) +#define OneNAND_CMD_LOAD ((uint16_t)0x0000) + +/** + * @brief OneNand Register description + */ +#define OneNAND_REG_MANUFACTERID ((uint32_t)0x1E000) /* Manufacturer identification */ +#define OneNAND_REG_DEVICEID ((uint32_t)0x1E002) /* Device identification */ +#define OneNAND_REG_DATABUFFERSIZE ((uint32_t)0x1E006) /* Data Buffer size */ +#define OneNAND_REG_BOOTBUFFERSIZE ((uint32_t)0x1E008) /* Boot Buffer size */ +#define OneNAND_REG_AMOUNTOFBUFFERS ((uint32_t)0x1E00A) /* Amount of data/boot buffers */ +#define OneNAND_REG_TECHNOLOGY ((uint32_t)0x1E00C) /* Info about technology */ +#define OneNAND_REG_STARTADDRESS1 ((uint32_t)0x1E200) /* Nand Flash Block Address */ +#define OneNAND_REG_STARTADDRESS3 ((uint32_t)0x1E204) /* Destination Block address for copy back program */ +#define OneNAND_REG_STARTADDRESS4 ((uint32_t)0x1E206) /* Destination Page & sector address for copy back program */ +#define OneNAND_REG_STARTADDRESINT8_T ((uint32_t)0x1E20E) /* Nand Flash Page & sector address */ +#define OneNAND_REG_STARTBUFFER ((uint32_t)0x1E400) /* The meaning is with which buffer to start and how many + buffers to use for the data transfer */ +#define OneNAND_REG_COMMAND ((uint32_t)0x1E440) /* Host control and memory operation commands*/ +#define OneNAND_REG_SYSTEMCONFIGURATION ((uint32_t)0x1E442) /* Memory and host interface configuration */ +#define OneNAND_REG_CONTROLSTATUS ((uint32_t)0x1E480) /* Control status and result of memory operation */ +#define OneNAND_REG_INTERRUPT ((uint32_t)0x1E482) /* Memory Command Completion Interrupt Status */ +#define OneNAND_REG_STARTBLOCKADDRESS ((uint32_t)0x1E498) /* Start memory block address in Write Protection mode */ +#define OneNAND_REG_WRITEPROTECTIONSTATUS ((uint32_t)0x1E49C) /* Current memory Write Protection status */ + +/** + * @brief OneNand Memory partition description + */ +#define OneNAND_DATA_RAM_0_0_ADD ((uint32_t)0x0400) /* DataRAM Main page0/sector0 */ +#define OneNAND_DATA_RAM_0_0_REG ((uint32_t)0x0800) /* DataRAM 0_0 is selected with 4 sector */ + +#define OneNAND_DATA_RAM_0_1_ADD ((uint32_t)0x0600) /* DataRAM Main page0/sector1 */ +#define OneNAND_DATA_RAM_0_1_REG ((uint32_t)0x0900) /* DataRAM 0_1 is selected with 4 sector */ + +#define OneNAND_DATA_RAM_0_2_ADD ((uint32_t)0x0800) /* DataRAM Main page0/sector2 */ +#define OneNAND_DATA_RAM_0_2_REG ((uint32_t)0x0A00) /* DataRAM 0_2 is selected with 4 sector */ + +#define OneNAND_DATA_RAM_0_3_ADD ((uint32_t)0x0A00) /* DataRAM Main page0/sector3 */ +#define OneNAND_DATA_RAM_0_3_REG ((uint32_t)0x0B00) /* DataRAM 0_3 is selected with 4 sector */ + +#define OneNAND_DATA_RAM_1_0_ADD ((uint32_t)0x0C00) /* DataRAM Main page1/sector0 */ +#define OneNAND_DATA_RAM_1_0_REG ((uint32_t)0x0C00) /* DataRAM 1_0 is selected with 4 sector */ + +#define OneNAND_DATA_RAM_1_1_ADD ((uint32_t)0x0E00) /* DataRAM Main page1/sector1 */ +#define OneNAND_DATA_RAM_1_1_REG ((uint32_t)0x0D00) /* DataRAM 1_1 is selected with 4 sector */ + +#define OneNAND_DATA_RAM_1_2_ADD ((uint32_t)0x1000) /* DataRAM Main page1/sector2 */ +#define OneNAND_DATA_RAM_1_2_REG ((uint32_t)0x0E00) /* DataRAM 1_2 is selected with 4 sector */ + +#define OneNAND_DATA_RAM_1_3_ADD ((uint32_t)0x1200) /* DataRAM Main page1/sector3 */ +#define OneNAND_DATA_RAM_1_3_REG ((uint32_t)0x0F00) /* DataRAM 1_3 is selected with 4 sector */ + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_ONENAND_Exported_Functions + * @{ + */ +void OneNAND_Init(void); +void OneNAND_Reset(void); +void OneNAND_ReadID(OneNAND_IDTypeDef* OneNAND_ID); +uint16_t OneNAND_UnlockBlock(uint16_t BlockNumber); +uint16_t OneNAND_EraseBlock(uint16_t BlockNumber); +uint16_t OneNAND_WriteBuffer(uint16_t* pBuffer, OneNAND_ADDRESS Address, uint32_t NumHalfwordToWrite); +void OneNAND_AsynchronousRead(uint16_t* pBuffer, OneNAND_ADDRESS Address, uint32_t NumHalfwordToRead); +void OneNAND_SynchronousRead(uint16_t* pBuffer, OneNAND_ADDRESS Address, uint32_t NumHalfwordToRead); +uint16_t OneNAND_ReadStatus(void); +uint16_t OneNAND_ReadControllerStatus(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM322xG_EVAL_FSMC_ONENAND_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_psram.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_psram.c new file mode 100644 index 000000000..c31dc64da --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_psram.c @@ -0,0 +1,307 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_fsmc_psram.c + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file provides a set of functions needed to drive the IS66WV25616BLL + * PSRAM memory mounted on STM322xG-EVAL evaluation board(MB786) RevA. + * + * Note: This memory is not available on the RevB of the board. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_fsmc_psram.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_FSMC_PSRAM + * @brief This file provides a set of functions needed to drive the + * IS66WV25616BLL PSRAM memory mounted on STM322xG-EVAL board. + * @{ + */ + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Private_Defines + * @{ + */ +/** + * @brief FSMC Bank 1 NOR/SRAM2 + */ +#define Bank1_SRAM2_ADDR ((uint32_t)0x64000000) +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Private_Variables + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Private_Functions + * @{ + */ + +/** + * @brief Configures the FSMC and GPIOs to interface with the PSRAM memory. + * This function must be called before any write/read operation + * on the PSRAM. + * @param None + * @retval None + */ +void PSRAM_Init(void) +{ + FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; + FSMC_NORSRAMTimingInitTypeDef p; + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable GPIOs clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF | + RCC_AHB1Periph_GPIOG, ENABLE); + + /* Enable FSMC clock */ + RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); + +/*-- GPIOs Configuration ------------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + PSRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD14 <-> FSMC_D0 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD15 <-> FSMC_D1 | PE15 <-> FSMC_D12 |------------------+ + +-------------------+--------------------+ +*/ + /* GPIOD configuration */ + GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | + GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | + GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + + GPIO_Init(GPIOD, &GPIO_InitStructure); + + + /* GPIOE configuration */ + GPIO_PinAFConfig(GPIOE, GPIO_PinSource0 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource1 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_7 | + GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11| + GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; + + GPIO_Init(GPIOE, &GPIO_InitStructure); + + + /* GPIOF configuration */ + GPIO_PinAFConfig(GPIOF, GPIO_PinSource0 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource1 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource2 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource3 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource4 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource5 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource12 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource13 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource14 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource15 , GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | + GPIO_Pin_4 | GPIO_Pin_5 | + GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; + + GPIO_Init(GPIOF, &GPIO_InitStructure); + + + /* GPIOG configuration */ + GPIO_PinAFConfig(GPIOG, GPIO_PinSource0 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource1 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource2 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource3 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource4 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource5 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource9 , GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | + GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_9; + + GPIO_Init(GPIOG, &GPIO_InitStructure); + +/*-- FSMC Configuration ------------------------------------------------------*/ + p.FSMC_AddressSetupTime = 0x2; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 0xB; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; + + FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); + + /*!< Enable FSMC Bank1_SRAM2 Bank */ + FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE); +} + +/** + * @brief Writes a Half-word buffer to the FSMC PSRAM memory. + * @param pBuffer : pointer to buffer. + * @param WriteAddr : PSRAM memory internal address from which the data will be + * written. + * @param NumHalfwordToWrite : number of half-words to write. + * @retval None + */ +void PSRAM_WriteBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite) +{ + for(; NumHalfwordToWrite != 0; NumHalfwordToWrite--) /* while there is data to write */ + { + /* Transfer data to the memory */ + *(uint16_t *) (Bank1_SRAM2_ADDR + WriteAddr) = *pBuffer++; + + /* Increment the address*/ + WriteAddr += 2; + } +} + +/** + * @brief Reads a block of data from the FSMC PSRAM memory. + * @param pBuffer : pointer to the buffer that receives the data read from the + * PSRAM memory. + * @param ReadAddr : PSRAM memory internal address to read from. + * @param NumHalfwordToRead : number of half-words to read. + * @retval None + */ +void PSRAM_ReadBuffer(uint16_t* pBuffer, uint32_t ReadAddr, uint32_t NumHalfwordToRead) +{ + for(; NumHalfwordToRead != 0; NumHalfwordToRead--) /* while there is data to read */ + { + /* Read a half-word from the memory */ + *pBuffer++ = *(__IO uint16_t*) (Bank1_SRAM2_ADDR + ReadAddr); + + /* Increment the address*/ + ReadAddr += 2; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_psram.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_psram.h new file mode 100644 index 000000000..629db1b60 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_psram.h @@ -0,0 +1,110 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_fsmc_psram.h + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file contains all the functions prototypes for the + * stm322xg_eval_fsmc_psram.c driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM322xG_EVAL_FSMC_PSRAM_H +#define __STM322xG_EVAL_FSMC_PSRAM_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_FSMC_PSRAM + * @{ + */ + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Exported_Types + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Exported_Constants + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_PSRAM_Exported_Functions + * @{ + */ + +void PSRAM_Init(void); +void PSRAM_WriteBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite); +void PSRAM_ReadBuffer(uint16_t* pBuffer, uint32_t ReadAddr, uint32_t NumHalfwordToRead); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM322xG_EVAL_FSMC_PSRAM_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_sram.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_sram.c new file mode 100644 index 000000000..558db9f6a --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_sram.c @@ -0,0 +1,321 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_fsmc_sram.c + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file provides a set of functions needed to drive the + * IS61WV102416BLL SRAM memory mounted on STM322xG-EVAL evaluation + * board(MB786) RevB. + * + * Note: This memory is not available on the RevA of the board. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_fsmc_sram.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_FSMC_SRAM + * @brief This file provides a set of functions needed to drive the + * IS61WV102416BLL SRAM memory mounted on STM322xG-EVAL board. + * @{ + */ + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Private_Defines + * @{ + */ +/** + * @brief FSMC Bank 1 NOR/SRAM2 + */ +#define Bank1_SRAM2_ADDR ((uint32_t)0x64000000) + +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Private_Variables + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Private_Functions + * @{ + */ + +/** + * @brief Configures the FSMC and GPIOs to interface with the SRAM memory. + * This function must be called before any write/read operation + * on the SRAM. + * @param None + * @retval None + */ +void SRAM_Init(void) +{ + FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; + FSMC_NORSRAMTimingInitTypeDef p; + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable GPIOs clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF | + RCC_AHB1Periph_GPIOG, ENABLE); + + /* Enable FSMC clock */ + RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); + +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE2 <-> FSMC_A23 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE3 <-> FSMC_A19 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE4 <-> FSMC_A20 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE5 <-> FSMC_A21 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE6 <-> FSMC_A22 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE7 <-> FSMC_D4 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE8 <-> FSMC_D5 | PF14 <-> FSMC_A8 | + | PD13 <-> FSMC_A18 | PE9 <-> FSMC_D6 | PF15 <-> FSMC_A9 | + | PD14 <-> FSMC_D0 | PE10 <-> FSMC_D7 |------------------+ + | PD15 <-> FSMC_D1 | PE11 <-> FSMC_D8 | + +-------------------| PE12 <-> FSMC_D9 | + | PE13 <-> FSMC_D10 | + | PE14 <-> FSMC_D11 | + | PE15 <-> FSMC_D12 | + +--------------------+ +*/ + + /* GPIOD configuration */ + GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | + GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | + GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + + GPIO_Init(GPIOD, &GPIO_InitStructure); + + + /* GPIOE configuration */ + GPIO_PinAFConfig(GPIOE, GPIO_PinSource0 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource1 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource2 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource3 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource4 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource5 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource6 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | + GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | + GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11| + GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; + + GPIO_Init(GPIOE, &GPIO_InitStructure); + + + /* GPIOF configuration */ + GPIO_PinAFConfig(GPIOF, GPIO_PinSource0 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource1 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource2 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource3 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource4 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource5 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource12 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource13 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource14 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource15 , GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | + GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 | + GPIO_Pin_14 | GPIO_Pin_15; + + GPIO_Init(GPIOF, &GPIO_InitStructure); + + + /* GPIOG configuration */ + GPIO_PinAFConfig(GPIOG, GPIO_PinSource0 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource1 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource2 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource3 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource4 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource5 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource9 , GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | + GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_9; + + GPIO_Init(GPIOG, &GPIO_InitStructure); + +/*-- FSMC Configuration ------------------------------------------------------*/ + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 4; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; + + FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); + + /*!< Enable FSMC Bank1_SRAM2 Bank */ + FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE); + +} + +/** + * @brief Writes a Half-word buffer to the FSMC SRAM memory. + * @param pBuffer : pointer to buffer. + * @param WriteAddr : SRAM memory internal address from which the data will be + * written. + * @param NumHalfwordToWrite : number of half-words to write. + * @retval None + */ +void SRAM_WriteBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite) +{ + for (; NumHalfwordToWrite != 0; NumHalfwordToWrite--) /* while there is data to write */ + { + /* Transfer data to the memory */ + *(uint16_t *) (Bank1_SRAM2_ADDR + WriteAddr) = *pBuffer++; + + /* Increment the address*/ + WriteAddr += 2; + } +} + +/** + * @brief Reads a block of data from the FSMC SRAM memory. + * @param pBuffer : pointer to the buffer that receives the data read from the + * SRAM memory. + * @param ReadAddr : SRAM memory internal address to read from. + * @param NumHalfwordToRead : number of half-words to read. + * @retval None + */ +void SRAM_ReadBuffer(uint16_t* pBuffer, uint32_t ReadAddr, uint32_t NumHalfwordToRead) +{ + for (; NumHalfwordToRead != 0; NumHalfwordToRead--) /* while there is data to read */ + { + /* Read a half-word from the memory */ + *pBuffer++ = *(__IO uint16_t*) (Bank1_SRAM2_ADDR + ReadAddr); + + /* Increment the address*/ + ReadAddr += 2; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_sram.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_sram.h new file mode 100644 index 000000000..b0dff7ccd --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_fsmc_sram.h @@ -0,0 +1,110 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_fsmc_sram.h + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file contains all the functions prototypes for the + * stm322xg_eval_fsmc_sram.c driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM322xG_EVAL_FSMC_SRAM_H +#define __STM322xG_EVAL_FSMC_SRAM_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_FSMC_SRAM + * @{ + */ + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Exported_Types + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Exported_Constants + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_FSMC_SRAM_Exported_Functions + * @{ + */ + +void SRAM_Init(void); +void SRAM_WriteBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite); +void SRAM_ReadBuffer(uint16_t* pBuffer, uint32_t ReadAddr, uint32_t NumHalfwordToRead); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM322xG_EVAL_FSMC_SRAM_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_i2c_ee.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_i2c_ee.c new file mode 100644 index 000000000..13336a18e --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_i2c_ee.c @@ -0,0 +1,814 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_i2c_ee.c + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file provides a set of functions needed to manage the I2C M24CXX + * EEPROM memory mounted on STM322xG-EVAL evaluation board(MB786) RevA + * and RevB. + * + * =================================================================== + * Note: This driver is intended for STM32F2xx families devices only. + * =================================================================== + * + * It implements a high level communication layer for read and write + * from/to this memory. The needed STM32 hardware resources (I2C and + * GPIO) are defined in stm322xg_eval.h file, and the initialization is + * performed in sEE_LowLevel_Init() function declared in stm322xg_eval.c + * file. + * You can easily tailor this driver to any other development board, + * by just adapting the defines for hardware resources and + * sEE_LowLevel_Init() function. + * + * @note In this driver, basic read and write functions (sEE_ReadBuffer() + * and sEE_WritePage()) use the DMA to perform the data transfer + * to/from EEPROM memory (except when number of requested data is + * equal to 1). Thus, after calling these two functions, user + * application may perform other tasks while DMA is transferring + * data. The application should then monitor the variable holding + * the number of data in order to determine when the transfer is + * completed (variable decremented to 0). Stopping transfer tasks + * are performed into DMA interrupt handlers (which are integrated + * into this driver). + * + * +-----------------------------------------------------------------+ + * | Pin assignment | + * +---------------------------------------+-----------+-------------+ + * | STM32 I2C Pins | sEE | Pin | + * +---------------------------------------+-----------+-------------+ + * | . | E0(GND) | 1 (0V) | + * | . | E1(GND) | 2 (0V) | + * | . | E2(GND) | 3 (0V) | + * | . | E0(VSS) | 4 (0V) | + * | sEE_I2C_SDA_PIN/ SDA | SDA | 5 | + * | sEE_I2C_SCL_PIN/ SCL | SCL | 6 | + * | . | /WC(VDD)| 7 (3.3V) | + * | . | VDD | 8 (3.3V) | + * +---------------------------------------+-----------+-------------+ + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_i2c_ee.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_I2C_EE + * @brief This file includes the I2C EEPROM driver of STM32-EVAL boards. + * @{ + */ + +/** @defgroup STM322xG_EVAL_I2C_EE_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_I2C_EE_Private_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_I2C_EE_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_I2C_EE_Private_Variables + * @{ + */ +__IO uint16_t sEEAddress = 0; +__IO uint32_t sEETimeout = sEE_LONG_TIMEOUT; +__IO uint16_t* sEEDataReadPointer; +__IO uint8_t* sEEDataWritePointer; +__IO uint8_t sEEDataNum; +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_I2C_EE_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_I2C_EE_Private_Functions + * @{ + */ + +/** + * @brief DeInitializes peripherals used by the I2C EEPROM driver. + * @param None + * @retval None + */ +void sEE_DeInit(void) +{ + sEE_LowLevel_DeInit(); +} + +/** + * @brief Initializes peripherals used by the I2C EEPROM driver. + * @param None + * @retval None + */ +void sEE_Init(void) +{ + I2C_InitTypeDef I2C_InitStructure; + + sEE_LowLevel_Init(); + + /*!< I2C configuration */ + /* sEE_I2C configuration */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; + I2C_InitStructure.I2C_OwnAddress1 = I2C_SLAVE_ADDRESS7; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + + /* sEE_I2C Peripheral Enable */ + I2C_Cmd(sEE_I2C, ENABLE); + /* Apply sEE_I2C configuration after enabling it */ + I2C_Init(sEE_I2C, &I2C_InitStructure); + + /* Enable the sEE_I2C peripheral DMA requests */ + I2C_DMACmd(sEE_I2C, ENABLE); + +#if defined (sEE_M24C64_32) + /*!< Select the EEPROM address according to the state of E0, E1, E2 pins */ + sEEAddress = sEE_HW_ADDRESS; +#elif defined (sEE_M24C08) + /*!< depending on the sEE Address selected in the stm322xg_eval_i2c_ee.h file */ + #ifdef sEE_Block0_ADDRESS + /*!< Select the sEE Block0 to write on */ + sEEAddress = sEE_Block0_ADDRESS; + #endif + + #ifdef sEE_Block1_ADDRESS + /*!< Select the sEE Block1 to write on */ + sEEAddress = sEE_Block1_ADDRESS; + #endif + + #ifdef sEE_Block2_ADDRESS + /*!< Select the sEE Block2 to write on */ + sEEAddress = sEE_Block2_ADDRESS; + #endif + + #ifdef sEE_Block3_ADDRESS + /*!< Select the sEE Block3 to write on */ + sEEAddress = sEE_Block3_ADDRESS; + #endif +#endif /*!< sEE_M24C64_32 */ +} + +/** + * @brief Reads a block of data from the EEPROM. + * @param pBuffer : pointer to the buffer that receives the data read from + * the EEPROM. + * @param ReadAddr : EEPROM's internal address to start reading from. + * @param NumByteToRead : pointer to the variable holding number of bytes to + * be read from the EEPROM. + * + * @note The variable pointed by NumByteToRead is reset to 0 when all the + * data are read from the EEPROM. Application should monitor this + * variable in order know when the transfer is complete. + * + * @note When number of data to be read is higher than 1, this function just + * configures the communication and enable the DMA channel to transfer data. + * Meanwhile, the user application may perform other tasks. + * When number of data to be read is 1, then the DMA is not used. The byte + * is read in polling mode. + * + * @retval sEE_OK (0) if operation is correctly performed, else return value + * different from sEE_OK (0) or the timeout user callback. + */ +uint32_t sEE_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead) +{ + /* Set the pointer to the Number of data to be read. This pointer will be used + by the DMA Transfer Completer interrupt Handler in order to reset the + variable to 0. User should check on this variable in order to know if the + DMA transfer has been complete or not. */ + sEEDataReadPointer = NumByteToRead; + + /*!< While the bus is busy */ + sEETimeout = sEE_LONG_TIMEOUT; + while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BUSY)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Send START condition */ + I2C_GenerateSTART(sEE_I2C, ENABLE); + + /*!< Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Send EEPROM address for write */ + I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Transmitter); + + /*!< Test on EV6 and clear it */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + +#ifdef sEE_M24C08 + + /*!< Send the EEPROM's internal address to read from: Only one byte address */ + I2C_SendData(sEE_I2C, ReadAddr); + +#elif defined (sEE_M24C64_32) + + /*!< Send the EEPROM's internal address to read from: MSB of the address first */ + I2C_SendData(sEE_I2C, (uint8_t)((ReadAddr & 0xFF00) >> 8)); + + /*!< Test on EV8 and clear it */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTING)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Send the EEPROM's internal address to read from: LSB of the address */ + I2C_SendData(sEE_I2C, (uint8_t)(ReadAddr & 0x00FF)); + +#endif /*!< sEE_M24C08 */ + + /*!< Test on EV8 and clear it */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BTF) == RESET) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Send STRAT condition a second time */ + I2C_GenerateSTART(sEE_I2C, ENABLE); + + /*!< Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Send EEPROM address for read */ + I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Receiver); + + /* If number of data to be read is 1, then DMA couldn't be used */ + /* One Byte Master Reception procedure (POLLING) ---------------------------*/ + if ((uint16_t)(*NumByteToRead) < 2) + { + /* Wait on ADDR flag to be set (ADDR is still not cleared at this level */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_ADDR) == RESET) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Disable Acknowledgment */ + I2C_AcknowledgeConfig(sEE_I2C, DISABLE); + + /* Clear ADDR register by reading SR1 then SR2 register (SR1 has already been read) */ + (void)sEE_I2C->SR2; + + /*!< Send STOP Condition */ + I2C_GenerateSTOP(sEE_I2C, ENABLE); + + /* Wait for the byte to be received */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_RXNE) == RESET) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Read the byte received from the EEPROM */ + *pBuffer = I2C_ReceiveData(sEE_I2C); + + /*!< Decrement the read bytes counter */ + (uint16_t)(*NumByteToRead)--; + + /* Wait to make sure that STOP control bit has been cleared */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(sEE_I2C->CR1 & I2C_CR1_STOP) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Re-Enable Acknowledgment to be ready for another reception */ + I2C_AcknowledgeConfig(sEE_I2C, ENABLE); + } + else/* More than one Byte Master Reception procedure (DMA) -----------------*/ + { + /*!< Test on EV6 and clear it */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /* Configure the DMA Rx Channel with the buffer address and the buffer size */ + sEE_LowLevel_DMAConfig((uint32_t)pBuffer, (uint16_t)(*NumByteToRead), sEE_DIRECTION_RX); + + /* Inform the DMA that the next End Of Transfer Signal will be the last one */ + I2C_DMALastTransferCmd(sEE_I2C, ENABLE); + + /* Enable the DMA Rx Stream */ + DMA_Cmd(sEE_I2C_DMA_STREAM_RX, ENABLE); + } + + /* If all operations OK, return sEE_OK (0) */ + return sEE_OK; +} + +/** + * @brief Writes more than one byte to the EEPROM with a single WRITE cycle. + * + * @note The number of bytes (combined to write start address) must not + * cross the EEPROM page boundary. This function can only write into + * the boundaries of an EEPROM page. + * This function doesn't check on boundaries condition (in this driver + * the function sEE_WriteBuffer() which calls sEE_WritePage() is + * responsible of checking on Page boundaries). + * + * @param pBuffer : pointer to the buffer containing the data to be written to + * the EEPROM. + * @param WriteAddr : EEPROM's internal address to write to. + * @param NumByteToWrite : pointer to the variable holding number of bytes to + * be written into the EEPROM. + * + * @note The variable pointed by NumByteToWrite is reset to 0 when all the + * data are written to the EEPROM. Application should monitor this + * variable in order know when the transfer is complete. + * + * @note This function just configure the communication and enable the DMA + * channel to transfer data. Meanwhile, the user application may perform + * other tasks in parallel. + * + * @retval sEE_OK (0) if operation is correctly performed, else return value + * different from sEE_OK (0) or the timeout user callback. + */ +uint32_t sEE_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite) +{ + /* Set the pointer to the Number of data to be written. This pointer will be used + by the DMA Transfer Completer interrupt Handler in order to reset the + variable to 0. User should check on this variable in order to know if the + DMA transfer has been complete or not. */ + sEEDataWritePointer = NumByteToWrite; + + /*!< While the bus is busy */ + sEETimeout = sEE_LONG_TIMEOUT; + while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BUSY)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Send START condition */ + I2C_GenerateSTART(sEE_I2C, ENABLE); + + /*!< Test on EV5 and clear it */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Send EEPROM address for write */ + sEETimeout = sEE_FLAG_TIMEOUT; + I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Transmitter); + + /*!< Test on EV6 and clear it */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + +#ifdef sEE_M24C08 + + /*!< Send the EEPROM's internal address to write to : only one byte Address */ + I2C_SendData(sEE_I2C, WriteAddr); + +#elif defined(sEE_M24C64_32) + + /*!< Send the EEPROM's internal address to write to : MSB of the address first */ + I2C_SendData(sEE_I2C, (uint8_t)((WriteAddr & 0xFF00) >> 8)); + + /*!< Test on EV8 and clear it */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTING)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Send the EEPROM's internal address to write to : LSB of the address */ + I2C_SendData(sEE_I2C, (uint8_t)(WriteAddr & 0x00FF)); + +#endif /*!< sEE_M24C08 */ + + /*!< Test on EV8 and clear it */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTING)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /* Configure the DMA Tx Channel with the buffer address and the buffer size */ + sEE_LowLevel_DMAConfig((uint32_t)pBuffer, (uint8_t)(*NumByteToWrite), sEE_DIRECTION_TX); + + /* Enable the DMA Tx Stream */ + DMA_Cmd(sEE_I2C_DMA_STREAM_TX, ENABLE); + + /* If all operations OK, return sEE_OK (0) */ + return sEE_OK; +} + +/** + * @brief Writes buffer of data to the I2C EEPROM. + * @param pBuffer : pointer to the buffer containing the data to be written + * to the EEPROM. + * @param WriteAddr : EEPROM's internal address to write to. + * @param NumByteToWrite : number of bytes to write to the EEPROM. + * @retval None + */ +void sEE_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) +{ + uint8_t NumOfPage = 0, NumOfSingle = 0, count = 0; + uint16_t Addr = 0; + + Addr = WriteAddr % sEE_PAGESIZE; + count = sEE_PAGESIZE - Addr; + NumOfPage = NumByteToWrite / sEE_PAGESIZE; + NumOfSingle = NumByteToWrite % sEE_PAGESIZE; + + /*!< If WriteAddr is sEE_PAGESIZE aligned */ + if(Addr == 0) + { + /*!< If NumByteToWrite < sEE_PAGESIZE */ + if(NumOfPage == 0) + { + /* Store the number of data to be written */ + sEEDataNum = NumOfSingle; + /* Start writing data */ + sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum)); + /* Wait transfer through DMA to be complete */ + sEETimeout = sEE_LONG_TIMEOUT; + while (sEEDataNum > 0) + { + if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;}; + } + sEE_WaitEepromStandbyState(); + } + /*!< If NumByteToWrite > sEE_PAGESIZE */ + else + { + while(NumOfPage--) + { + /* Store the number of data to be written */ + sEEDataNum = sEE_PAGESIZE; + sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum)); + /* Wait transfer through DMA to be complete */ + sEETimeout = sEE_LONG_TIMEOUT; + while (sEEDataNum > 0) + { + if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;}; + } + sEE_WaitEepromStandbyState(); + WriteAddr += sEE_PAGESIZE; + pBuffer += sEE_PAGESIZE; + } + + if(NumOfSingle!=0) + { + /* Store the number of data to be written */ + sEEDataNum = NumOfSingle; + sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum)); + /* Wait transfer through DMA to be complete */ + sEETimeout = sEE_LONG_TIMEOUT; + while (sEEDataNum > 0) + { + if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;}; + } + sEE_WaitEepromStandbyState(); + } + } + } + /*!< If WriteAddr is not sEE_PAGESIZE aligned */ + else + { + /*!< If NumByteToWrite < sEE_PAGESIZE */ + if(NumOfPage== 0) + { + /*!< If the number of data to be written is more than the remaining space + in the current page: */ + if (NumByteToWrite > count) + { + /* Store the number of data to be written */ + sEEDataNum = count; + /*!< Write the data contained in same page */ + sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum)); + /* Wait transfer through DMA to be complete */ + sEETimeout = sEE_LONG_TIMEOUT; + while (sEEDataNum > 0) + { + if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;}; + } + sEE_WaitEepromStandbyState(); + + /* Store the number of data to be written */ + sEEDataNum = (NumByteToWrite - count); + /*!< Write the remaining data in the following page */ + sEE_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&sEEDataNum)); + /* Wait transfer through DMA to be complete */ + sEETimeout = sEE_LONG_TIMEOUT; + while (sEEDataNum > 0) + { + if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;}; + } + sEE_WaitEepromStandbyState(); + } + else + { + /* Store the number of data to be written */ + sEEDataNum = NumOfSingle; + sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum)); + /* Wait transfer through DMA to be complete */ + sEETimeout = sEE_LONG_TIMEOUT; + while (sEEDataNum > 0) + { + if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;}; + } + sEE_WaitEepromStandbyState(); + } + } + /*!< If NumByteToWrite > sEE_PAGESIZE */ + else + { + NumByteToWrite -= count; + NumOfPage = NumByteToWrite / sEE_PAGESIZE; + NumOfSingle = NumByteToWrite % sEE_PAGESIZE; + + if(count != 0) + { + /* Store the number of data to be written */ + sEEDataNum = count; + sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum)); + /* Wait transfer through DMA to be complete */ + sEETimeout = sEE_LONG_TIMEOUT; + while (sEEDataNum > 0) + { + if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;}; + } + sEE_WaitEepromStandbyState(); + WriteAddr += count; + pBuffer += count; + } + + while(NumOfPage--) + { + /* Store the number of data to be written */ + sEEDataNum = sEE_PAGESIZE; + sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum)); + /* Wait transfer through DMA to be complete */ + sEETimeout = sEE_LONG_TIMEOUT; + while (sEEDataNum > 0) + { + if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;}; + } + sEE_WaitEepromStandbyState(); + WriteAddr += sEE_PAGESIZE; + pBuffer += sEE_PAGESIZE; + } + if(NumOfSingle != 0) + { + /* Store the number of data to be written */ + sEEDataNum = NumOfSingle; + sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum)); + /* Wait transfer through DMA to be complete */ + sEETimeout = sEE_LONG_TIMEOUT; + while (sEEDataNum > 0) + { + if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;}; + } + sEE_WaitEepromStandbyState(); + } + } + } +} + +/** + * @brief Wait for EEPROM Standby state. + * + * @note This function allows to wait and check that EEPROM has finished the + * last operation. It is mostly used after Write operation: after receiving + * the buffer to be written, the EEPROM may need additional time to actually + * perform the write operation. During this time, it doesn't answer to + * I2C packets addressed to it. Once the write operation is complete + * the EEPROM responds to its address. + * + * @param None + * @retval sEE_OK (0) if operation is correctly performed, else return value + * different from sEE_OK (0) or the timeout user callback. + */ +uint32_t sEE_WaitEepromStandbyState(void) +{ + __IO uint16_t tmpSR1 = 0; + __IO uint32_t sEETrials = 0; + + /*!< While the bus is busy */ + sEETimeout = sEE_LONG_TIMEOUT; + while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BUSY)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /* Keep looping till the slave acknowledge his address or maximum number + of trials is reached (this number is defined by sEE_MAX_TRIALS_NUMBER define + in stm322xg_eval_i2c_ee.h file) */ + while (1) + { + /*!< Send START condition */ + I2C_GenerateSTART(sEE_I2C, ENABLE); + + /*!< Test on EV5 and clear it */ + sEETimeout = sEE_FLAG_TIMEOUT; + while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT)) + { + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + + /*!< Send EEPROM address for write */ + I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Transmitter); + + /* Wait for ADDR flag to be set (Slave acknowledged his address) */ + sEETimeout = sEE_LONG_TIMEOUT; + do + { + /* Get the current value of the SR1 register */ + tmpSR1 = sEE_I2C->SR1; + + /* Update the timeout value and exit if it reach 0 */ + if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback(); + } + /* Keep looping till the Address is acknowledged or the AF flag is + set (address not acknowledged at time) */ + while((tmpSR1 & (I2C_SR1_ADDR | I2C_SR1_AF)) == 0); + + /* Check if the ADDR flag has been set */ + if (tmpSR1 & I2C_SR1_ADDR) + { + /* Clear ADDR Flag by reading SR1 then SR2 registers (SR1 have already + been read) */ + (void)sEE_I2C->SR2; + + /*!< STOP condition */ + I2C_GenerateSTOP(sEE_I2C, ENABLE); + + /* Exit the function */ + return sEE_OK; + } + else + { + /*!< Clear AF flag */ + I2C_ClearFlag(sEE_I2C, I2C_FLAG_AF); + } + + /* Check if the maximum allowed number of trials has bee reached */ + if (sEETrials++ == sEE_MAX_TRIALS_NUMBER) + { + /* If the maximum number of trials has been reached, exit the function */ + return sEE_TIMEOUT_UserCallback(); + } + } +} + +/** + * @brief This function handles the DMA Tx Channel interrupt Handler. + * @param None + * @retval None + */ +void sEE_I2C_DMA_TX_IRQHandler(void) +{ + /* Check if the DMA transfer is complete */ + if(DMA_GetFlagStatus(sEE_I2C_DMA_STREAM_TX, sEE_TX_DMA_FLAG_TCIF) != RESET) + { + /* Disable the DMA Tx Stream and Clear TC flag */ + DMA_Cmd(sEE_I2C_DMA_STREAM_TX, DISABLE); + DMA_ClearFlag(sEE_I2C_DMA_STREAM_TX, sEE_TX_DMA_FLAG_TCIF); + + /*!< Wait till all data have been physically transferred on the bus */ + sEETimeout = sEE_LONG_TIMEOUT; + while(!I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BTF)) + { + if((sEETimeout--) == 0) sEE_TIMEOUT_UserCallback(); + } + + /*!< Send STOP condition */ + I2C_GenerateSTOP(sEE_I2C, ENABLE); + + /* Reset the variable holding the number of data to be written */ + *sEEDataWritePointer = 0; + } +} + +/** + * @brief This function handles the DMA Rx Channel interrupt Handler. + * @param None + * @retval None + */ +void sEE_I2C_DMA_RX_IRQHandler(void) +{ + /* Check if the DMA transfer is complete */ + if(DMA_GetFlagStatus(sEE_I2C_DMA_STREAM_RX, sEE_RX_DMA_FLAG_TCIF) != RESET) + { + /*!< Send STOP Condition */ + I2C_GenerateSTOP(sEE_I2C, ENABLE); + + /* Disable the DMA Rx Stream and Clear TC Flag */ + DMA_Cmd(sEE_I2C_DMA_STREAM_RX, DISABLE); + DMA_ClearFlag(sEE_I2C_DMA_STREAM_RX, sEE_RX_DMA_FLAG_TCIF); + + /* Reset the variable holding the number of data to be read */ + *sEEDataReadPointer = 0; + } +} + +#ifdef USE_DEFAULT_TIMEOUT_CALLBACK +/** + * @brief Basic management of the timeout situation. + * @param None. + * @retval None. + */ +uint32_t sEE_TIMEOUT_UserCallback(void) +{ + /* Block communication and all processes */ + while (1) + { + } +} +#endif /* USE_DEFAULT_TIMEOUT_CALLBACK */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_i2c_ee.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_i2c_ee.h new file mode 100644 index 000000000..8ceed5fe7 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_i2c_ee.h @@ -0,0 +1,194 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_i2c_ee.h + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file contains all the functions prototypes for the + * stm322xg_eval_i2c_ee.c driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM322xG_EVAL_I2C_EE_H +#define __STM322xG_EVAL_I2C_EE_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_I2C_EE + * @{ + */ + +/** @defgroup STM322xG_EVAL_I2C_EE_Exported_Types + * @{ + */ + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_I2C_EE_Exported_Constants + * @{ + */ + +/* Uncomment the following line to use the default sEE_TIMEOUT_UserCallback() + function implemented in stm32_evel_i2c_ee.c file. + sEE_TIMEOUT_UserCallback() function is called whenever a timeout condition + occure during communication (waiting on an event that doesn't occur, bus + errors, busy devices ...). */ +/* #define USE_DEFAULT_TIMEOUT_CALLBACK */ + +#if !defined (sEE_M24C08) && !defined (sEE_M24C64_32) +/* Use the defines below the choose the EEPROM type */ +/* #define sEE_M24C08*/ /* Support the device: M24C08. */ +/* note: Could support: M24C01, M24C02, M24C04 and M24C16 if the blocks and + HW address are correctly defined*/ +#define sEE_M24C64_32 /* Support the devices: M24C32 and M24C64 */ +#endif + +#ifdef sEE_M24C64_32 +/* For M24C32 and M24C64 devices, E0,E1 and E2 pins are all used for device + address selection (ne need for additional address lines). According to the + Harware connection on the board (on STM322xG-EVAL board E0 = E1 = E2 = 0) */ + + #define sEE_HW_ADDRESS 0xA0 /* E0 = E1 = E2 = 0 */ + +#elif defined (sEE_M24C08) +/* The M24C08W contains 4 blocks (128byte each) with the adresses below: E2 = 0 + EEPROM Addresses defines */ + #define sEE_Block0_ADDRESS 0xA0 /* E2 = 0 */ + /*#define sEE_Block1_ADDRESS 0xA2*/ /* E2 = 0 */ + /*#define sEE_Block2_ADDRESS 0xA4*/ /* E2 = 0 */ + /*#define sEE_Block3_ADDRESS 0xA6*/ /* E2 = 0 */ + +#endif /* sEE_M24C64_32 */ + +/* I2C clock speed configuration (in Hz) + WARNING: + Make sure that this define is not already declared in other files (ie. + stm322xg_eval.h file). It can be used in parallel by other modules. */ +#ifndef I2C_SPEED + #define I2C_SPEED 100000 +#endif /* I2C_SPEED */ + +#define I2C_SLAVE_ADDRESS7 0xA0 + +#if defined (sEE_M24C08) + #define sEE_PAGESIZE 16 +#elif defined (sEE_M24C64_32) + #define sEE_PAGESIZE 32 +#endif + +/* Maximum Timeout values for flags and events waiting loops. These timeouts are + not based on accurate values, they just guarantee that the application will + not remain stuck if the I2C communication is corrupted. + You may modify these timeout values depending on CPU frequency and application + conditions (interrupts routines ...). */ +#define sEE_FLAG_TIMEOUT ((uint32_t)0x1000) +#define sEE_LONG_TIMEOUT ((uint32_t)(10 * sEE_FLAG_TIMEOUT)) + +/* Maximum number of trials for sEE_WaitEepromStandbyState() function */ +#define sEE_MAX_TRIALS_NUMBER 300 + +/* Defintions for the state of the DMA transfer */ +#define sEE_STATE_READY 0 +#define sEE_STATE_BUSY 1 +#define sEE_STATE_ERROR 2 + +#define sEE_OK 0 +#define sEE_FAIL 1 + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_I2C_EE_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_I2C_EE_Exported_Functions + * @{ + */ +void sEE_DeInit(void); +void sEE_Init(void); +uint32_t sEE_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead); +uint32_t sEE_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite); +void sEE_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); +uint32_t sEE_WaitEepromStandbyState(void); + +/* USER Callbacks: These are functions for which prototypes only are declared in + EEPROM driver and that should be implemented into user applicaiton. */ +/* sEE_TIMEOUT_UserCallback() function is called whenever a timeout condition + occure during communication (waiting on an event that doesn't occur, bus + errors, busy devices ...). + You can use the default timeout callback implementation by uncommenting the + define USE_DEFAULT_TIMEOUT_CALLBACK in stm322xg_eval_i2c_ee.h file. + Typically the user implementation of this callback should reset I2C peripheral + and re-initialize communication or in worst case reset all the application. */ +uint32_t sEE_TIMEOUT_UserCallback(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM322xG_EVAL_I2C_EE_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + + diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_ioe.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_ioe.c new file mode 100644 index 000000000..e90310050 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_ioe.c @@ -0,0 +1,1619 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_ioe.c + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file provides a set of functions needed to manage the STMPE811 + * IO Expander devices mounted on STM322xG-EVAL evaluation board(MB786) + * RevA and RevB. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + + /* File Info : --------------------------------------------------------------- + + Note: + ----- + - This driver uses the DMA method for sending and receiving data on I2C bus + which allow higher efficiency and reliability of the communication. + + SUPPORTED FEATURES: + - IO Read/write : Set/Reset and Read (Polling/Interrupt) + - Joystick: config and Read (Polling/Interrupt) + - Touch Screen Features: Single point mode (Polling/Interrupt) + - TempSensor Feature: accuracy not determined (Polling). + + UNSUPPORTED FEATURES: + - Row ADC Feature is not supported (not implemented on STM322xG_EVAL board) + ----------------------------------------------------------------------------*/ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_ioe.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @defgroup STM322xG_EVAL_IOE + * @brief This file includes the IO Expander driver for STMPE811 IO Expander + * devices. + * @{ + */ + + +/** @defgroup STM322xG_EVAL_IOE_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_IOE_Private_Defines + * @{ + */ +#define TIMEOUT_MAX 0x3000 /* _x? (x - _x): (_x - x); + yDiff = y > _y? (y - _y): (_y - y); + if (xDiff + yDiff > 5) + { + _x = x; + _y = y; + } + } + /* Update the X position */ + TS_State.X = _x; + + /* Update the Y position */ + TS_State.Y = _y; + /* Update the Z position index */ + TS_State.Z = IOE_TS_Read_Z(); + + /* Clear the interrupt pending bit and enable the FIFO again */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_FIFO_STA, 0x01); + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_FIFO_STA, 0x00); + + /* Return pointer to the updated structure */ + return &TS_State; +} + +/** + * @brief Returns the temperature row value (in 16 bit format). + * @param None + * @retval The temperature row value. + */ +uint32_t IOE_TempSens_GetData(void) +{ + static __IO uint32_t tmp = 0; + + /* Acquire data enable */ + I2C_WriteDeviceRegister(IOE_2_ADDR, IOE_REG_TEMP_CTRL, 0x03); + + /* Enable the TEMPSENS module */ + tmp = (uint32_t)((I2C_ReadDeviceRegister(IOE_2_ADDR, IOE_REG_TEMP_DATA) & 0x03) << 8); + tmp |= (uint32_t)I2C_ReadDeviceRegister(IOE_2_ADDR, IOE_REG_TEMP_DATA + 1); + + tmp = (uint32_t)((33 * tmp * 100) / 751); + tmp = (uint32_t)((tmp + 5) / 10); + + /* return the temperature row value */ + return tmp; +} + +/** + * @brief Checks the selected Global interrupt source pending bit + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param Global_IT: the Global interrupt source to be checked, could be: + * @arg Global_IT_GPIO : All IOs interrupt + * @arg Global_IT_ADC : ADC interrupt + * @arg Global_IT_TEMP : Temperature Sensor interrupts + * @arg Global_IT_FE : Touch Screen Controller FIFO Error interrupt + * @arg Global_IT_FF : Touch Screen Controller FIFO Full interrupt + * @arg Global_IT_FOV : Touch Screen Controller FIFO Overrun interrupt + * @arg Global_IT_FTH : Touch Screen Controller FIFO Threshold interrupt + * @arg Global_IT_TOUCH : Touch Screen Controller Touch Detected interrupt + * @retval Status of the checked flag. Could be SET or RESET. + */ +FlagStatus IOE_GetGITStatus(uint8_t DeviceAddr, uint8_t Global_IT) +{ + __IO uint8_t tmp = 0; + + /* get the Interrupt status */ + tmp = I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_INT_STA); + + if ((tmp & (uint8_t)Global_IT) != 0) + { + return SET; + } + else + { + return RESET; + } +} + +/** + * @brief Clears the selected Global interrupt pending bit(s) + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param Global_IT: the Global interrupt to be cleared, could be any combination + * of the following values: + * @arg Global_IT_GPIO : All IOs interrupt + * @arg Global_IT_ADC : ADC interrupt + * @arg Global_IT_TEMP : Temperature Sensor interrupts + * @arg Global_IT_FE : Touch Screen Controller FIFO Error interrupt + * @arg Global_IT_FF : Touch Screen Controller FIFO Full interrupt + * @arg Global_IT_FOV : Touch Screen Controller FIFO Overrun interrupt + * @arg Global_IT_FTH : Touch Screen Controller FIFO Threshold interrupt + * @arg Global_IT_TOUCH : Touch Screen Controller Touch Detected interrupt + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_ClearGITPending(uint8_t DeviceAddr, uint8_t Global_IT) +{ + /* Write 1 to the bits that have to be cleared */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_INT_STA, Global_IT); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Checks the status of the selected IO interrupt pending bit + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param IO_IT: the IO interrupt to be checked could be IO_ITx Where x can be + * from 0 to 7. + * @retval Status of the checked flag. Could be SET or RESET. + */ +FlagStatus IOE_GetIOITStatus(uint8_t DeviceAddr, uint8_t IO_IT) +{ + uint8_t tmp = 0; + + /* get the Interrupt status */ + tmp = I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_GPIO_INT_STA); + + if ((tmp & (uint8_t)IO_IT) != 0) + { + return SET; + } + else + { + return RESET; + } +} + +/** + * @brief Clears the selected IO interrupt pending bit(s). + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param IO_IT: the IO interrupt to be checked could be IO_ITx Where x can be + * from 0 to 7. + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_ClearIOITPending(uint8_t DeviceAddr, uint8_t IO_IT) +{ + /* Write 1 to the bits that have to be cleared */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_GPIO_INT_STA, IO_IT); + + /* Clear the Edge detection pending bit*/ + I2C_WriteDeviceRegister(IOE_2_ADDR, IOE_REG_GPIO_ED, IO_IT); + + /* Clear the Rising edge pending bit */ + I2C_WriteDeviceRegister(IOE_2_ADDR, IOE_REG_GPIO_RE, IO_IT); + + /* Clear the Falling edge pending bit */ + I2C_WriteDeviceRegister(IOE_2_ADDR, IOE_REG_GPIO_FE, IO_IT); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Checks if the selected device is correctly configured and + * communicates correctly on the I2C bus. + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @retval IOE_OK if IOE is operational. Other value if failure. + */ +uint8_t IOE_IsOperational(uint8_t DeviceAddr) +{ + /* Return Error if the ID is not correct */ + if( IOE_ReadID(DeviceAddr) != (uint16_t)STMPE811_ID ) + { + /* Check if a Timeout occurred */ + if (IOE_TimeOut == 0) + { + return(IOE_TimeoutUserCallback()); + } + else + { + return IOE_FAILURE; /* ID is not Correct */ + } + } + else + { + return IOE_OK; /* ID is correct */ + } +} + +/** + * @brief Resets the IO Expander by Software (SYS_CTRL1, RESET bit). + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_Reset(uint8_t DeviceAddr) +{ + /* Power Down the IO_Expander */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_SYS_CTRL1, 0x02); + + /* wait for a delay to insure registers erasing */ + _delay_(2); + + /* Power On the Codec after the power off => all registers are reinitialized*/ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_SYS_CTRL1, 0x00); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Reads the selected device's ID. + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @retval The Device ID (two bytes). + */ +uint16_t IOE_ReadID(uint8_t DeviceAddr) +{ + uint16_t tmp = 0; + + /* Read device ID */ + tmp = I2C_ReadDeviceRegister(DeviceAddr, 0); + tmp = (uint32_t)(tmp << 8); + tmp |= (uint32_t)I2C_ReadDeviceRegister(DeviceAddr, 1); + + /* Return the ID */ + return (uint16_t)tmp; +} + +/** + * @brief Configures the selected IO Expander functionalities. + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param IOE_TEMPSENS_FCT: the functions to be configured. could be any + * combination of the following values: + * @arg IOE_IO_FCT : IO function + * @arg IOE_TS_FCT : Touch Screen function + * @arg IOE_ADC_FCT : ADC function + * @arg IOE_TEMPSENS_FCT : Temperature Sensor function + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_FnctCmd(uint8_t DeviceAddr, uint8_t Fct, FunctionalState NewState) +{ + uint8_t tmp = 0; + + /* Get the register value */ + tmp = I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_SYS_CTRL2); + + if (NewState != DISABLE) + { + /* Set the Functionalities to be Enabled */ + tmp &= ~(uint8_t)Fct; + } + else + { + /* Set the Functionalities to be Disabled */ + tmp |= (uint8_t)Fct; + } + + /* Set the register value */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_SYS_CTRL2, tmp); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Configures the selected pin direction (to be an input or an output) + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param IO_Pin: IO_Pin_x: Where x can be from 0 to 7. + * @param Direction: could be Direction_IN or Direction_OUT. + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_IOPinConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Direction) +{ + uint8_t tmp = 0; + + /* Get all the Pins direction */ + tmp = I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_GPIO_DIR); + + if (Direction != Direction_IN) + { + tmp |= (uint8_t)IO_Pin; + } + else + { + tmp &= ~(uint8_t)IO_Pin; + } + + /* Write the register new value */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_GPIO_DIR, tmp); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Enables or disables the Global interrupt. + * @param DeviceAddr: The address of the IOExpander, could be :I OE_1_ADDR + * or IOE_2_ADDR. + * @param NewState: could be ENABLE or DISABLE. + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_GITCmd(uint8_t DeviceAddr, FunctionalState NewState) +{ + uint8_t tmp = 0; + + /* Read the Interrupt Control register */ + I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_INT_CTRL); + + if (NewState != DISABLE) + { + /* Set the global interrupts to be Enabled */ + tmp |= (uint8_t)IOE_GIT_EN; + } + else + { + /* Set the global interrupts to be Disabled */ + tmp &= ~(uint8_t)IOE_GIT_EN; + } + + /* Write Back the Interrupt Control register */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_INT_CTRL, tmp); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Configures the selected source to generate or not a global interrupt + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param Global_IT: the interrupt source to be configured, could be: + * @arg Global_IT_GPIO : All IOs interrupt + * @arg Global_IT_ADC : ADC interrupt + * @arg Global_IT_TEMP : Temperature Sensor interrupts + * @arg Global_IT_FE : Touch Screen Controller FIFO Error interrupt + * @arg Global_IT_FF : Touch Screen Controller FIFO Full interrupt + * @arg Global_IT_FOV : Touch Screen Controller FIFO Overrun interrupt + * @arg Global_IT_FTH : Touch Screen Controller FIFO Threshold interrupt + * @arg Global_IT_TOUCH : Touch Screen Controller Touch Detected interrupt + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_GITConfig(uint8_t DeviceAddr, uint8_t Global_IT, FunctionalState NewState) +{ + uint8_t tmp = 0; + + /* Get the current value of the INT_EN register */ + tmp = I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_INT_EN); + + if (NewState != DISABLE) + { + /* Set the interrupts to be Enabled */ + tmp |= (uint8_t)Global_IT; + } + else + { + /* Set the interrupts to be Disabled */ + tmp &= ~(uint8_t)Global_IT; + } + /* Set the register */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_INT_EN, tmp); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Configures the selected pins to generate an interrupt or not. + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param IO_IT: The IO interrupt to be configured. This parameter could be any + * combination of the following values: + * @arg IO_IT_x: where x can be from 0 to 7. + * @param NewState: could be ENABLE or DISABLE. + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_IOITConfig(uint8_t DeviceAddr, uint8_t IO_IT, FunctionalState NewState) +{ + uint8_t tmp = 0; + + tmp = I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_GPIO_INT_EN); + + if (NewState != DISABLE) + { + /* Set the interrupts to be Enabled */ + tmp |= (uint8_t)IO_IT; + } + else + { + /* Set the interrupts to be Disabled */ + tmp &= ~(uint8_t)IO_IT; + } + + /* Set the register */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_GPIO_INT_EN, tmp); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Configures the touch Screen Controller (Single point detection) + * @param None + * @retval IOE_OK if all initializations are OK. Other value if error. + */ +uint8_t IOE_TS_Config(void) +{ + uint8_t tmp = 0; + + /* Enable TSC Fct: already done in IOE_Config */ + tmp = I2C_ReadDeviceRegister(IOE_1_ADDR, IOE_REG_SYS_CTRL2); + tmp &= ~(uint32_t)(IOE_TS_FCT | IOE_ADC_FCT); + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_SYS_CTRL2, tmp); + + /* Enable the TSC global interrupts */ + tmp = I2C_ReadDeviceRegister(IOE_1_ADDR, IOE_REG_INT_EN); + tmp |= (uint32_t)(IOE_GIT_TOUCH | IOE_GIT_FTH | IOE_GIT_FOV); + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_INT_EN, tmp); + + /* Select Sample Time, bit number and ADC Reference */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_ADC_CTRL1, 0x49); + + /* Wait for ~20 ms */ + _delay_(2); + + /* Select the ADC clock speed: 3.25 MHz */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_ADC_CTRL2, 0x01); + + /* Select TSC pins in non default mode */ + tmp = I2C_ReadDeviceRegister(IOE_1_ADDR, IOE_REG_GPIO_AF); + tmp &= ~(uint8_t)TOUCH_IO_ALL; + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_GPIO_AF, tmp); + + /* Select 2 nF filter capacitor */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_TSC_CFG, 0x9A); + + /* Select single point reading */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_FIFO_TH, 0x01); + + /* Write 0x01 to clear the FIFO memory content. */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_FIFO_STA, 0x01); + + /* Write 0x00 to put the FIFO back into operation mode */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_FIFO_STA, 0x00); + + /* set the data format for Z value: 7 fractional part and 1 whole part */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_TSC_FRACT_XYZ, 0x01); + + /* set the driving capability of the device for TSC pins: 50mA */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_TSC_I_DRIVE, 0x01); + + /* Use no tracking index, touchscreen controller operation mode (XYZ) and + enable the TSC */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_TSC_CTRL, 0x01); + + /* Clear all the status pending bits */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_INT_STA, 0xFF); + + /* Initialize the TS structure to their default values */ + TS_State.TouchDetected = TS_State.X = TS_State.Y = TS_State.Z = 0; + + /* All configuration done */ + return IOE_OK; +} + +/** + * @brief Configures and enables the Temperature sensor module. + * @param None + * @retval IOE_OK if all initializations are OK. Other value if error. + */ +uint8_t IOE_TempSens_Config(void) +{ + __IO uint8_t tmp = 0; + + /* Enable Temperature Sensor Fct: already done in IOE_Config */ + tmp = I2C_ReadDeviceRegister(IOE_2_ADDR, IOE_REG_SYS_CTRL2); + tmp &= ~(uint32_t)(IOE_TEMPSENS_FCT | IOE_ADC_FCT); + I2C_WriteDeviceRegister(IOE_2_ADDR, IOE_REG_SYS_CTRL2, tmp); + + /* Enable the TEMPSENS module */ + I2C_WriteDeviceRegister(IOE_2_ADDR, IOE_REG_TEMP_CTRL, 0x01); + + /* Aquire data enable */ + I2C_WriteDeviceRegister(IOE_2_ADDR, IOE_REG_TEMP_CTRL, 0x3); + + /* All configuration done */ + return IOE_OK; +} + +/** + * @brief Configures the selected pin to be in Alternate function or not + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param IO_Pin: IO_Pin_x, Where x can be from 0 to 7. + * @param NewState: State of the AF for the selected pin, could be + * ENABLE or DISABLE. + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_IOAFConfig(uint8_t DeviceAddr, uint8_t IO_Pin, FunctionalState NewState) +{ + uint8_t tmp = 0; + + /* Get the current state of the GPIO_AF register */ + tmp = I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_GPIO_AF); + + if (NewState != DISABLE) + { + /* Enable the selected pins alternate function */ + tmp |= (uint8_t)IO_Pin; + } + else + { + /* Disable the selected pins alternate function */ + tmp &= ~(uint8_t)IO_Pin; + } + + /* Write back the new value in GPIO_AF register */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_GPIO_AF, tmp); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Configures the Edge for which a transition is detectable for the + * the selected pin. + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param IO_Pin: IO_Pin_x, Where x can be from 0 to 7. + * @param Edge: The edge which will be detected. This parameter can be one or a + * a combination of following values: EDGE_FALLING and EDGE_RISING . + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_IOEdgeConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Edge) +{ + uint8_t tmp1 = 0, tmp2 = 0; + + /* Get the registers values */ + tmp1 = I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_GPIO_FE); + tmp2 = I2C_ReadDeviceRegister(DeviceAddr, IOE_REG_GPIO_RE); + + /* Disable the Falling Edge */ + tmp1 &= ~(uint8_t)IO_Pin; + /* Disable the Falling Edge */ + tmp2 &= ~(uint8_t)IO_Pin; + + /* Enable the Falling edge if selected */ + if (Edge & EDGE_FALLING) + { + tmp1 |= (uint8_t)IO_Pin; + } + + /* Enable the Rising edge if selected */ + if (Edge & EDGE_RISING) + { + tmp2 |= (uint8_t)IO_Pin; + } + + /* Write back the registers values */ + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_GPIO_FE, tmp1); + I2C_WriteDeviceRegister(DeviceAddr, IOE_REG_GPIO_RE, tmp2); + + /* if OK return 0 */ + return IOE_OK; +} + +/** + * @brief Configures the Interrupt line active state and format (level/edge) + * @param Polarity: could be + * @arg Polarity_Low: Interrupt line is active Low/Falling edge + * @arg Polarity_High: Interrupt line is active High/Rising edge + * @param Type: Interrupt line activity type, could be one of the following values + * @arg Type_Level: Interrupt line is active in level model + * @arg Type_Edge: Interrupt line is active in edge model + * @retval IOE_OK: if all initializations are OK. Other value if error. + */ +uint8_t IOE_ITOutConfig(uint8_t Polarity, uint8_t Type) +{ + uint8_t tmp = 0; + + /* Get the register IOE_REG_INT_CTRL value */ + tmp = I2C_ReadDeviceRegister(IOE_1_ADDR, IOE_REG_INT_CTRL); + + /* Mask the polarity and type bits */ + tmp &= ~(uint8_t)0x06; + + /* Modify the Interrupt Output line configuration */ + tmp |= (uint8_t)(Polarity | Type); + + /* Set the register */ + I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_INT_CTRL, tmp); + + + /* Get the register IOE_REG_INT_CTRL value */ + tmp = I2C_ReadDeviceRegister(IOE_2_ADDR, IOE_REG_INT_CTRL); + /* Mask the polarity and type bits */ + tmp &= ~(uint8_t)0x06; + + /* Modify the Interrupt Output line configuration */ + tmp |= (uint8_t)(Polarity | Type); + + /* Set the register */ + I2C_WriteDeviceRegister(IOE_2_ADDR, IOE_REG_INT_CTRL, tmp); + + /* If all OK return IOE_OK */ + return IOE_OK; +} + +/** + * @brief Writes a value in a register of the device through I2C. + * @param DeviceAddr: The address of the IOExpander, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param RegisterAddr: The target register address + * @param RegisterValue: The target register value to be written + * @retval IOE_OK: if all operations are OK. Other value if error. + */ +uint8_t I2C_WriteDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr, uint8_t RegisterValue) +{ + uint8_t read_verif = 0; + uint8_t IOE_BufferTX = 0; + + /* Get Value to be written */ + IOE_BufferTX = RegisterValue; + + /* Configure DMA Peripheral */ + IOE_DMA_Config(IOE_DMA_TX, (uint8_t*)(&IOE_BufferTX)); + + /* Enable the I2C peripheral */ + I2C_GenerateSTART(IOE_I2C, ENABLE); + + /* Test on SB Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_SB) == RESET) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Transmit the slave address and enable writing operation */ + I2C_Send7bitAddress(IOE_I2C, DeviceAddr, I2C_Direction_Transmitter); + + /* Test on ADDR Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (!I2C_CheckEvent(IOE_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Transmit the first address for r/w operations */ + I2C_SendData(IOE_I2C, RegisterAddr); + + /* Test on TXE FLag (data dent) */ + IOE_TimeOut = TIMEOUT_MAX; + while ((!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_BTF))) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Enable I2C DMA request */ + I2C_DMACmd(IOE_I2C,ENABLE); + + /* Enable DMA TX Channel */ + DMA_Cmd(IOE_DMA_TX_STREAM, ENABLE); + + /* Wait until DMA Transfer Complete */ + IOE_TimeOut = TIMEOUT_MAX; + while (!DMA_GetFlagStatus(IOE_DMA_TX_STREAM,IOE_DMA_TX_TCFLAG)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Wait until BTF Flag is set before generating STOP */ + IOE_TimeOut = 2 * TIMEOUT_MAX; + while ((!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_BTF))) + { + } + + /* Send STOP Condition */ + I2C_GenerateSTOP(IOE_I2C, ENABLE); + + /* Disable DMA TX Channel */ + DMA_Cmd(IOE_DMA_TX_STREAM, DISABLE); + + /* Disable I2C DMA request */ + I2C_DMACmd(IOE_I2C,DISABLE); + + /* Clear DMA TX Transfer Complete Flag */ + DMA_ClearFlag(IOE_DMA_TX_STREAM,IOE_DMA_TX_TCFLAG); + +#ifdef VERIFY_WRITTENDATA + /* Verify (if needed) that the loaded data is correct */ + + /* Read the just written register*/ + read_verif = I2C_ReadDeviceRegister(DeviceAddr, RegisterAddr); + /* Load the register and verify its value */ + if (read_verif != RegisterValue) + { + /* Control data wrongly transfered */ + read_verif = IOE_FAILURE; + } + else + { + /* Control data correctly transfered */ + read_verif = 0; + } +#endif + + /* Return the verifying value: 0 (Passed) or 1 (Failed) */ + return (read_verif); +} + +/** + * @brief Reads a register of the device through I2C. + * @param DeviceAddr: The address of the device, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param RegisterAddr: The target register address (between 00x and 0x24) + * @retval The value of the read register (0xAA if Timeout occurred) + */ +uint8_t I2C_ReadDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr) +{ + uint8_t IOE_BufferRX[2] = {0x00, 0x00}; + + /* Configure DMA Peripheral */ + IOE_DMA_Config(IOE_DMA_RX, (uint8_t*)IOE_BufferRX); + + /* Enable DMA NACK automatic generation */ + I2C_DMALastTransferCmd(IOE_I2C, ENABLE); + + /* Enable the I2C peripheral */ + I2C_GenerateSTART(IOE_I2C, ENABLE); + + /* Test on SB Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_SB)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send device address for write */ + I2C_Send7bitAddress(IOE_I2C, DeviceAddr, I2C_Direction_Transmitter); + + /* Test on ADDR Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (!I2C_CheckEvent(IOE_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send the device's internal address to write to */ + I2C_SendData(IOE_I2C, RegisterAddr); + + /* Test on TXE FLag (data dent) */ + IOE_TimeOut = TIMEOUT_MAX; + while ((!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_BTF))) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send START condition a second time */ + I2C_GenerateSTART(IOE_I2C, ENABLE); + + /* Test on SB Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_SB)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send IOExpander address for read */ + I2C_Send7bitAddress(IOE_I2C, DeviceAddr, I2C_Direction_Receiver); + + /* Test on ADDR Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (!I2C_CheckEvent(IOE_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Enable I2C DMA request */ + I2C_DMACmd(IOE_I2C,ENABLE); + + /* Enable DMA RX Channel */ + DMA_Cmd(IOE_DMA_RX_STREAM, ENABLE); + + /* Wait until DMA Transfer Complete */ + IOE_TimeOut = 2 * TIMEOUT_MAX; + while (!DMA_GetFlagStatus(IOE_DMA_RX_STREAM,IOE_DMA_RX_TCFLAG)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send STOP Condition */ + I2C_GenerateSTOP(IOE_I2C, ENABLE); + + /* Disable DMA RX Channel */ + DMA_Cmd(IOE_DMA_RX_STREAM, DISABLE); + + /* Disable I2C DMA request */ + I2C_DMACmd(IOE_I2C,DISABLE); + + /* Clear DMA RX Transfer Complete Flag */ + DMA_ClearFlag(IOE_DMA_RX_STREAM,IOE_DMA_RX_TCFLAG); + + /* return a pointer to the IOE_Buffer */ + return (uint8_t)IOE_BufferRX[0]; +} + + +/** + * @brief Reads a buffer of 2 bytes from the device registers. + * @param DeviceAddr: The address of the device, could be : IOE_1_ADDR + * or IOE_2_ADDR. + * @param RegisterAddr: The target register address (between 00x and 0x24) + * @retval A pointer to the buffer containing the two returned bytes (in halfword). + */ +uint16_t I2C_ReadDataBuffer(uint8_t DeviceAddr, uint8_t RegisterAddr) +{ + uint8_t tmp= 0; + uint8_t IOE_BufferRX[2] = {0x00, 0x00}; + + /* Configure DMA Peripheral */ + IOE_DMA_Config(IOE_DMA_RX, (uint8_t*)IOE_BufferRX); + + /* Enable DMA NACK automatic generation */ + I2C_DMALastTransferCmd(IOE_I2C, ENABLE); + + /* Enable the I2C peripheral */ + I2C_GenerateSTART(IOE_I2C, ENABLE); + + /* Test on SB Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_SB)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send device address for write */ + I2C_Send7bitAddress(IOE_I2C, DeviceAddr, I2C_Direction_Transmitter); + + /* Test on ADDR Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (!I2C_CheckEvent(IOE_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send the device's internal address to write to */ + I2C_SendData(IOE_I2C, RegisterAddr); + + /* Test on TXE FLag (data dent) */ + IOE_TimeOut = TIMEOUT_MAX; + while ((!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_BTF))) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send START condition a second time */ + I2C_GenerateSTART(IOE_I2C, ENABLE); + + /* Test on SB Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (!I2C_GetFlagStatus(IOE_I2C,I2C_FLAG_SB)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send IOExpander address for read */ + I2C_Send7bitAddress(IOE_I2C, DeviceAddr, I2C_Direction_Receiver); + + /* Test on ADDR Flag */ + IOE_TimeOut = TIMEOUT_MAX; + while (!I2C_CheckEvent(IOE_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Enable I2C DMA request */ + I2C_DMACmd(IOE_I2C,ENABLE); + + /* Enable DMA RX Channel */ + DMA_Cmd(IOE_DMA_RX_STREAM, ENABLE); + + /* Wait until DMA Transfer Complete */ + IOE_TimeOut = 2 * TIMEOUT_MAX; + while (!DMA_GetFlagStatus(IOE_DMA_RX_STREAM, IOE_DMA_RX_TCFLAG)) + { + if (IOE_TimeOut-- == 0) return(IOE_TimeoutUserCallback()); + } + + /* Send STOP Condition */ + I2C_GenerateSTOP(IOE_I2C, ENABLE); + + /* Disable DMA RX Channel */ + DMA_Cmd(IOE_DMA_RX_STREAM, DISABLE); + + /* Disable I2C DMA request */ + I2C_DMACmd(IOE_I2C,DISABLE); + + /* Clear DMA RX Transfer Complete Flag */ + DMA_ClearFlag(IOE_DMA_RX_STREAM,IOE_DMA_RX_TCFLAG); + + /* Reorganize received data */ + tmp = IOE_BufferRX[0]; + IOE_BufferRX[0] = IOE_BufferRX[1]; + IOE_BufferRX[1] = tmp; + + /* return a pointer to the IOE_Buffer */ + return (*(__IO uint16_t *) IOE_BufferRX); +} + +/** + * @brief Return Touch Screen X position value + * @param None + * @retval X position. + */ +static uint16_t IOE_TS_Read_X(void) +{ + int32_t x, xr; + + x = I2C_ReadDataBuffer(IOE_1_ADDR, IOE_REG_TSC_DATA_Y); + + /* first correction */ + xr = (x * 320) >> 12; + /* second correction */ + xr = ((xr * 32)/29) - 17; + + if(xr <= 0) + xr = 0; + + return (uint16_t)(xr); +} + +/** + * @brief Return Touch Screen Y position value + * @param None + * @retval Y position. + */ +static uint16_t IOE_TS_Read_Y(void) +{ + int32_t y, yr; + y= I2C_ReadDataBuffer(IOE_1_ADDR, IOE_REG_TSC_DATA_X); + + yr= (y * 240) >> 12; + yr = ((yr * 240) / 217) - 12; + + if(yr <= 0) + yr = 0; + + return (uint16_t)(yr); +} + +/** + * @brief Return Touch Screen Z position value + * @param None + * @retval Z position. + */ +static uint16_t IOE_TS_Read_Z(void) +{ + uint32_t z; + z = I2C_ReadDataBuffer(IOE_1_ADDR, IOE_REG_TSC_DATA_Z); + + + if(z <= 0) + z = 0; + + return (uint16_t)(z); +} + +/** + * @brief Initializes the GPIO pins used by the IO expander. + * @param None + * @retval None + */ +static void IOE_GPIO_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable IOE_I2C and IOE_I2C_GPIO_PORT & Alternate Function clocks */ + RCC_APB1PeriphClockCmd(IOE_I2C_CLK, ENABLE); + RCC_AHB1PeriphClockCmd(IOE_I2C_SCL_GPIO_CLK | IOE_I2C_SDA_GPIO_CLK | + IOE_IT_GPIO_CLK, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + + /* Reset IOE_I2C IP */ + RCC_APB1PeriphResetCmd(IOE_I2C_CLK, ENABLE); + + /* Release reset signal of IOE_I2C IP */ + RCC_APB1PeriphResetCmd(IOE_I2C_CLK, DISABLE); + + /* Connect PXx to I2C_SCL*/ + GPIO_PinAFConfig(IOE_I2C_SCL_GPIO_PORT, IOE_I2C_SCL_SOURCE, IOE_I2C_SCL_AF); + /* Connect PXx to I2C_SDA*/ + GPIO_PinAFConfig(IOE_I2C_SDA_GPIO_PORT, IOE_I2C_SDA_SOURCE, IOE_I2C_SDA_AF); + + /* IOE_I2C SCL and SDA pins configuration */ + GPIO_InitStructure.GPIO_Pin = IOE_I2C_SCL_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(IOE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = IOE_I2C_SDA_PIN; + GPIO_Init(IOE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure); + + /* Set EXTI pin as Input PullUp - IO_Expander_INT */ + GPIO_InitStructure.GPIO_Pin = IOE_IT_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(IOE_IT_GPIO_PORT, &GPIO_InitStructure); + + /* Connect Button EXTI Line to Button GPIO Pin */ + SYSCFG_EXTILineConfig(IOE_IT_EXTI_PORT_SOURCE, IOE_IT_EXTI_PIN_SOURCE); +} + +/** + * @brief Configure the I2C Peripheral used to communicate with IO_Expanders. + * @param None + * @retval None + */ +static void IOE_I2C_Config(void) +{ + I2C_InitTypeDef I2C_InitStructure; + + /* IOE_I2C configuration */ + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; + I2C_InitStructure.I2C_OwnAddress1 = 0x00; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + + I2C_Init(IOE_I2C, &I2C_InitStructure); +} + +/** + * @brief Configure the DMA Peripheral used to handle communication via I2C. + * @param None + * @retval None + */ + +static void IOE_DMA_Config(IOE_DMADirection_TypeDef Direction, uint8_t* buffer) +{ + DMA_InitTypeDef DMA_InitStructure; + + RCC_AHB1PeriphClockCmd(IOE_DMA_CLK, ENABLE); + + /* Initialize the DMA_Channel member */ + DMA_InitStructure.DMA_Channel = IOE_DMA_CHANNEL; + + /* Initialize the DMA_PeripheralBaseAddr member */ + DMA_InitStructure.DMA_PeripheralBaseAddr = IOE_I2C_DR; + + /* Initialize the DMA_Memory0BaseAddr member */ + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)buffer; + + /* Initialize the DMA_PeripheralInc member */ + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + + /* Initialize the DMA_MemoryInc member */ + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + + /* Initialize the DMA_PeripheralDataSize member */ + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + + /* Initialize the DMA_MemoryDataSize member */ + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + + /* Initialize the DMA_Mode member */ + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + + /* Initialize the DMA_Priority member */ + DMA_InitStructure.DMA_Priority = DMA_Priority_Low; + + /* Initialize the DMA_FIFOMode member */ + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + + /* Initialize the DMA_FIFOThreshold member */ + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; + + /* Initialize the DMA_MemoryBurst member */ + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + + /* Initialize the DMA_PeripheralBurst member */ + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + + /* If using DMA for Reception */ + if (Direction == IOE_DMA_RX) + { + /* Initialize the DMA_DIR member */ + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + + /* Initialize the DMA_BufferSize member */ + DMA_InitStructure.DMA_BufferSize = 2; + + DMA_DeInit(IOE_DMA_RX_STREAM); + + DMA_Init(IOE_DMA_RX_STREAM, &DMA_InitStructure); + } + /* If using DMA for Transmission */ + else if (Direction == IOE_DMA_TX) + { + /* Initialize the DMA_DIR member */ + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + + /* Initialize the DMA_BufferSize member */ + DMA_InitStructure.DMA_BufferSize = 1; + + DMA_DeInit(IOE_DMA_TX_STREAM); + + DMA_Init(IOE_DMA_TX_STREAM, &DMA_InitStructure); + } +} + + +/** + * @brief Configures the IO expander Interrupt line and GPIO in EXTI mode. + * @param None + * @retval None + */ +static void IOE_EXTI_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + EXTI_InitTypeDef EXTI_InitStructure; + + /* Enable GPIO clock */ + RCC_AHB1PeriphClockCmd(IOE_IT_GPIO_CLK, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + + /* Configure Button pin as input floating */ + GPIO_InitStructure.GPIO_Pin = IOE_IT_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(IOE_IT_GPIO_PORT, &GPIO_InitStructure); + + /* Connect Button EXTI Line to Button GPIO Pin */ + SYSCFG_EXTILineConfig(IOE_IT_EXTI_PORT_SOURCE, IOE_IT_EXTI_PIN_SOURCE); + + /* Configure Button EXTI line */ + EXTI_InitStructure.EXTI_Line = IOE_IT_EXTI_LINE; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + /* Enable and set Button EXTI Interrupt to the lowest priority */ + NVIC_InitStructure.NVIC_IRQChannel = IOE_IT_EXTI_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +#ifndef USE_Delay +/** + * @brief Inserts a delay time. + * @param nCount: specifies the delay time length. + * @retval None + */ +static void delay(__IO uint32_t nCount) +{ + __IO uint32_t index = 0; + for(index = (100000 * nCount); index != 0; index--) + { + } +} +#endif /* USE_Delay*/ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_ioe.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_ioe.h new file mode 100644 index 000000000..6f07800d1 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_ioe.h @@ -0,0 +1,565 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_ioe.h + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file contains all the functions prototypes for the + * stm322xg_eval_ioe.c driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + + /* File Info : --------------------------------------------------------------- + SUPPORTED FEATURES: + - IO Read/write : Set/Reset and Read (Polling/Interrupt) + - Joystick: config and Read (Polling/Interrupt) + - Touch Screen Features: Single point mode (Polling/Interrupt) + - TempSensor Feature: accuracy not determined (Polling). + + UNSUPPORTED FEATURES: + - Row ADC Feature is not supported (not implemented on STM322xG_EVAL board) + ----------------------------------------------------------------------------*/ + + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM322xG_EVAL_IOE_H +#define __STM322xG_EVAL_IOE_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @defgroup STM322xG_EVAL_IOE + * @{ + */ + + +/** @defgroup STM322xG_EVAL_IOE_Exported_Types + * @{ + */ + +/** + * @brief Touch Screen Information structure + */ +typedef struct +{ + uint16_t TouchDetected; + uint16_t X; + uint16_t Y; + uint16_t Z; +}TS_STATE; + +/** + * @brief Joystick State definitions + */ +#ifndef __STM322xG_EVAL_H +typedef enum +{ + JOY_NONE = 0, + JOY_SEL = 1, + JOY_DOWN = 2, + JOY_LEFT = 3, + JOY_RIGHT = 4, + JOY_UP = 5 +} JOYState_TypeDef +; +#endif /* __STM322xG_EVAL_H */ + +/** + * @brief IO_Expander Error codes + */ +typedef enum +{ + IOE_OK = 0, + IOE_FAILURE, + IOE_TIMEOUT, + PARAM_ERROR, + IOE1_NOT_OPERATIONAL, + IOE2_NOT_OPERATIONAL +}IOE_Status_TypDef; + +/** + * @brief IO bit values + */ +typedef enum +{ + BitReset = 0, + BitSet = 1 +}IOE_BitValue_TypeDef; + +/** + * @brief IOE DMA Direction + */ +typedef enum +{ + IOE_DMA_TX = 0, + IOE_DMA_RX = 1 +}IOE_DMADirection_TypeDef; + + +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_IOE_Exported_Constants + * @{ + */ + +/** + * @brief Uncomment the line below to enable verfying each written byte in write + * operation. The I2C_WriteDeviceRegister() function will then compare the + * written and read data and return error status if a mismatch occurs. + */ +/* #define VERIFY_WRITTENDATA */ + +/** + * @brief Uncomment the line below if you want to use user timeout callback. + * Function prototypes is declared in this file but function body may be + * implemented into user application. + */ +/* #define USE_TIMEOUT_USER_CALLBACK */ + +/** + * @brief Uncomment the line below if you want to use user defined Delay function + * (for precise timing), otherwise default _delay_ function defined within + * this driver is used (less precise timing). + */ +/* #define USE_Delay */ + +#ifdef USE_Delay +#include "main.h" + + #define _delay_ Delay /* !< User can provide more timing precise _delay_ function + (with 10ms time base), using SysTick for example */ +#else + #define _delay_ delay /* !< Default _delay_ function with less precise timing */ +#endif + +/*------------------------------------------------------------------------------ + Hardware Configuration +------------------------------------------------------------------------------*/ +/** + * @brief I2C port definitions + */ +#define IOE_I2C I2C1 +#define IOE_I2C_CLK RCC_APB1Periph_I2C1 +#define IOE_I2C_SCL_PIN GPIO_Pin_6 +#define IOE_I2C_SCL_GPIO_PORT GPIOB +#define IOE_I2C_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB +#define IOE_I2C_SCL_SOURCE GPIO_PinSource6 +#define IOE_I2C_SCL_AF GPIO_AF_I2C1 +#define IOE_I2C_SDA_PIN GPIO_Pin_9 +#define IOE_I2C_SDA_GPIO_PORT GPIOB +#define IOE_I2C_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB +#define IOE_I2C_SDA_SOURCE GPIO_PinSource9 +#define IOE_I2C_SDA_AF GPIO_AF_I2C1 +#define IOE_I2C_DR ((uint32_t)0x40005410) + +/* I2C clock speed configuration (in Hz) + WARNING: + Make sure that this define is not already declared in other files (ie. + stm322xg_eval.h file). It can be used in parallel by other modules. */ +#ifndef I2C_SPEED + #define I2C_SPEED 100000 +#endif /* I2C_SPEED */ + +/** + * @brief IOE DMA definitions + */ +#define IOE_DMA_CLK RCC_AHB1Periph_DMA1 +#define IOE_DMA_CHANNEL DMA_Channel_1 + +#ifndef IOE_DMA_TX_STREAM + #define IOE_DMA_TX_STREAM DMA1_Stream6 +#endif /* IOE_DMA_TX_STREAM */ + +#ifndef IOE_DMA_TX_TCFLAG + #define IOE_DMA_TX_TCFLAG DMA_FLAG_TCIF6 +#endif /* IOE_DMA_TX_TCFLAG */ + +#ifndef IOE_DMA_RX_STREAM + #define IOE_DMA_RX_STREAM DMA1_Stream0 +#endif /* IOE_DMA_RX_STREAM */ + +#ifndef IOE_DMA_RX_TCFLAG + #define IOE_DMA_RX_TCFLAG DMA_FLAG_TCIF0 +#endif /* IOE_DMA_RX_TCFLAG */ + +/** + * @brief IO Expander Interrupt line on EXTI + */ +#define IOE_IT_PIN GPIO_Pin_2 +#define IOE_IT_GPIO_PORT GPIOI +#define IOE_IT_GPIO_CLK RCC_AHB1Periph_GPIOI +#define IOE_IT_EXTI_PORT_SOURCE EXTI_PortSourceGPIOI +#define IOE_IT_EXTI_PIN_SOURCE EXTI_PinSource2 +#define IOE_IT_EXTI_LINE EXTI_Line2 +#define IOE_IT_EXTI_IRQn EXTI2_IRQn + +/** + * @brief Eval Board IO Pins definition + */ +#define AUDIO_RESET_PIN IO_Pin_2 /* IO_Exapnader_2 */ /* Output */ +#define MII_INT_PIN IO_Pin_0 /* IO_Exapnader_2 */ /* Output */ +#define VBAT_DIV_PIN IO_Pin_0 /* IO_Exapnader_1 */ /* Output */ +#define MEMS_INT1_PIN IO_Pin_3 /* IO_Exapnader_1 */ /* Input */ +#define MEMS_INT2_PIN IO_Pin_2 /* IO_Exapnader_1 */ /* Input */ + +/** + * @brief Eval Board both IO Exapanders Pins definition + */ +#define IO1_IN_ALL_PINS (uint32_t)(MEMS_INT1_PIN | MEMS_INT2_PIN) +#define IO2_IN_ALL_PINS (uint32_t)(JOY_IO_PINS) +#define IO1_OUT_ALL_PINS (uint32_t)(VBAT_DIV_PIN) +#define IO2_OUT_ALL_PINS (uint32_t)(AUDIO_RESET_PIN | MII_INT_PIN) + +/** + * @brief The 7 bits IO Expanders adresses and chip IDs + */ +#define IOE_1_ADDR 0x82 +#define IOE_2_ADDR 0x88 +#define STMPE811_ID 0x0811 + + +/*------------------------------------------------------------------------------ + Functional and Interrupt Management +------------------------------------------------------------------------------*/ +/** + * @brief IO Expander Functionalities definitions + */ +#define IOE_ADC_FCT 0x01 +#define IOE_TS_FCT 0x02 +#define IOE_IO_FCT 0x04 +#define IOE_TEMPSENS_FCT 0x08 + +/** + * @brief Interrupt source configuration definitons + */ +#define IOE_ITSRC_TSC 0x01 /* IO_Exapnder 1 */ +#define IOE_ITSRC_INMEMS 0x02 /* IO_Exapnder 1 */ +#define IOE_ITSRC_JOYSTICK 0x04 /* IO_Exapnder 2 */ +#define IOE_ITSRC_TEMPSENS 0x08 /* IO_Exapnder 2 */ + +/** + * @brief Glaobal Interrupts definitions + */ +#define IOE_GIT_GPIO 0x80 +#define IOE_GIT_ADC 0x40 +#define IOE_GIT_TEMP 0x20 +#define IOE_GIT_FE 0x10 +#define IOE_GIT_FF 0x08 +#define IOE_GIT_FOV 0x04 +#define IOE_GIT_FTH 0x02 +#define IOE_GIT_TOUCH 0x01 + + +/*------------------------------------------------------------------------------ + STMPE811 device register definition +------------------------------------------------------------------------------*/ +/** + * @brief Identification registers + */ +#define IOE_REG_CHP_ID 0x00 +#define IOE_REG_ID_VER 0x02 + +/** + * @brief General Control Registers + */ +#define IOE_REG_SYS_CTRL1 0x03 +#define IOE_REG_SYS_CTRL2 0x04 +#define IOE_REG_SPI_CFG 0x08 + +/** + * @brief Interrupt Control register + */ +#define IOE_REG_INT_CTRL 0x09 +#define IOE_REG_INT_EN 0x0A +#define IOE_REG_INT_STA 0x0B +#define IOE_REG_GPIO_INT_EN 0x0C +#define IOE_REG_GPIO_INT_STA 0x0D + +/** + * @brief GPIO Registers + */ +#define IOE_REG_GPIO_SET_PIN 0x10 +#define IOE_REG_GPIO_CLR_PIN 0x11 +#define IOE_REG_GPIO_MP_STA 0x12 +#define IOE_REG_GPIO_DIR 0x13 +#define IOE_REG_GPIO_ED 0x14 +#define IOE_REG_GPIO_RE 0x15 +#define IOE_REG_GPIO_FE 0x16 +#define IOE_REG_GPIO_AF 0x17 + +/** + * @brief ADC Registers + */ +#define IOE_REG_ADC_INT_EN 0x0E +#define IOE_REG_ADC_INT_STA 0x0F +#define IOE_REG_ADC_CTRL1 0x20 +#define IOE_REG_ADC_CTRL2 0x21 +#define IOE_REG_ADC_CAPT 0x22 +#define IOE_REG_ADC_DATA_CH0 0x30 /* 16-Bit register */ +#define IOE_REG_ADC_DATA_CH1 0x32 /* 16-Bit register */ +#define IOE_REG_ADC_DATA_CH2 0x34 /* 16-Bit register */ +#define IOE_REG_ADC_DATA_CH3 0x36 /* 16-Bit register */ +#define IOE_REG_ADC_DATA_CH4 0x38 /* 16-Bit register */ +#define IOE_REG_ADC_DATA_CH5 0x3A /* 16-Bit register */ +#define IOE_REG_ADC_DATA_CH6 0x3B /* 16-Bit register */ +#define IOE_REG_ADC_DATA_CH7 0x3C /* 16-Bit register */ + +/** + * @brief TouchScreen Registers + */ +#define IOE_REG_TSC_CTRL 0x40 +#define IOE_REG_TSC_CFG 0x41 +#define IOE_REG_WDM_TR_X 0x42 +#define IOE_REG_WDM_TR_Y 0x44 +#define IOE_REG_WDM_BL_X 0x46 +#define IOE_REG_WDM_BL_Y 0x48 +#define IOE_REG_FIFO_TH 0x4A +#define IOE_REG_FIFO_STA 0x4B +#define IOE_REG_FIFO_SIZE 0x4C +#define IOE_REG_TSC_DATA_X 0x4D +#define IOE_REG_TSC_DATA_Y 0x4F +#define IOE_REG_TSC_DATA_Z 0x51 +#define IOE_REG_TSC_DATA_XYZ 0x52 +#define IOE_REG_TSC_FRACT_XYZ 0x56 +#define IOE_REG_TSC_DATA 0x57 +#define IOE_REG_TSC_I_DRIVE 0x58 +#define IOE_REG_TSC_SHIELD 0x59 + +/** + * @brief Temperature Sensor registers + */ +#define IOE_REG_TEMP_CTRL 0x60 +#define IOE_REG_TEMP_DATA 0x61 +#define IOE_REG_TEMP_TH 0x62 + + +/*------------------------------------------------------------------------------ + Functions parameters defines +------------------------------------------------------------------------------*/ +/** + * @brief Touch Screen Pins definition + */ +#define TOUCH_YD IO_Pin_1 /* IO_Exapnader_1 */ /* Input */ +#define TOUCH_XD IO_Pin_2 /* IO_Exapnader_1 */ /* Input */ +#define TOUCH_YU IO_Pin_3 /* IO_Exapnader_1 */ /* Input */ +#define TOUCH_XU IO_Pin_4 /* IO_Exapnader_1 */ /* Input */ +#define TOUCH_IO_ALL (uint32_t)(IO_Pin_1 | IO_Pin_2 | IO_Pin_3 | IO_Pin_4) + +/** + * @brief JOYSTICK Pins definition + */ +#define JOY_IO_SEL IO_Pin_7 +#define JOY_IO_DOWN IO_Pin_6 +#define JOY_IO_LEFT IO_Pin_5 +#define JOY_IO_RIGHT IO_Pin_4 +#define JOY_IO_UP IO_Pin_3 +#define JOY_IO_NONE JOY_IO_PINS +#define JOY_IO_PINS (uint32_t)(IO_Pin_3 | IO_Pin_4 | IO_Pin_5 | IO_Pin_6 | IO_Pin_7) + +/** + * @brief IO Pins + */ +#define IO_Pin_0 0x01 +#define IO_Pin_1 0x02 +#define IO_Pin_2 0x04 +#define IO_Pin_3 0x08 +#define IO_Pin_4 0x10 +#define IO_Pin_5 0x20 +#define IO_Pin_6 0x40 +#define IO_Pin_7 0x80 +#define IO_Pin_ALL 0xFF + +/** + * @brief IO Pin directions + */ +#define Direction_IN 0x00 +#define Direction_OUT 0x01 + +/** + * @brief Interrupt Line output parameters + */ +#define Polarity_Low 0x00 +#define Polarity_High 0x04 +#define Type_Level 0x00 +#define Type_Edge 0x02 + +/** + * @brief IO Interrupts + */ +#define IO_IT_0 0x01 +#define IO_IT_1 0x02 +#define IO_IT_2 0x04 +#define IO_IT_3 0x08 +#define IO_IT_4 0x10 +#define IO_IT_5 0x20 +#define IO_IT_6 0x40 +#define IO_IT_7 0x80 +#define ALL_IT 0xFF +#define IOE_JOY_IT (uint8_t)(IO_IT_3 | IO_IT_4 | IO_IT_5 | IO_IT_6 | IO_IT_7) +#define IOE_TS_IT (uint8_t)(IO_IT_0 | IO_IT_1 | IO_IT_2) +#define IOE_INMEMS_IT (uint8_t)(IO_IT_2 | IO_IT_3) + +/** + * @brief Edge detection value + */ +#define EDGE_FALLING 0x01 +#define EDGE_RISING 0x02 + +/** + * @brief Global interrupt Enable bit + */ +#define IOE_GIT_EN 0x01 + +/** + * @} + */ + + + +/** @defgroup STM322xG_EVAL_IOE_Exported_Macros + * @{ + */ +/** + * @} + */ + + + +/** @defgroup STM322xG_EVAL_IOE_Exported_Functions + * @{ + */ + +/** + * @brief Configuration and initialization functions + */ +uint8_t IOE_Config(void); +uint8_t IOE_ITConfig(uint32_t IOE_ITSRC_Source); + +/** + * @brief Timeout user callback function. This function is called when a timeout + * condition occurs during communication with IO Expander. Only protoype + * of this function is decalred in IO Expander driver. Its implementation + * may be done into user application. This function may typically stop + * current operations and reset the I2C peripheral and IO Expander. + * To enable this function use uncomment the define USE_TIMEOUT_USER_CALLBACK + * at the top of this file. + */ +#ifdef USE_TIMEOUT_USER_CALLBACK + uint8_t IOE_TimeoutUserCallback(void); +#else + #define IOE_TimeoutUserCallback() IOE_TIMEOUT +#endif /* USE_TIMEOUT_USER_CALLBACK */ + +/** + * @brief IO pins control functions + */ +uint8_t IOE_WriteIOPin(uint8_t IO_Pin, IOE_BitValue_TypeDef BitVal); +uint8_t IOE_ReadIOPin(uint32_t IO_Pin); +JOYState_TypeDef + IOE_JoyStickGetState(void); + +/** + * @brief Touch Screen controller functions + */ +TS_STATE* IOE_TS_GetState(void); + +/** + * @brief Interrupts Mangement functions + */ +FlagStatus IOE_GetGITStatus(uint8_t DeviceAddr, uint8_t Global_IT); +uint8_t IOE_ClearGITPending(uint8_t DeviceAddr, uint8_t IO_IT); +FlagStatus IOE_GetIOITStatus(uint8_t DeviceAddr, uint8_t IO_IT); +uint8_t IOE_ClearIOITPending(uint8_t DeviceAddr, uint8_t IO_IT); + +/** + * @brief Temperature Sensor functions + */ +uint32_t IOE_TempSens_GetData(void); + +/** + * @brief IO-Expander Control functions + */ +uint8_t IOE_IsOperational(uint8_t DeviceAddr); +uint8_t IOE_Reset(uint8_t DeviceAddr); +uint16_t IOE_ReadID(uint8_t DeviceAddr); + +uint8_t IOE_FnctCmd(uint8_t DeviceAddr, uint8_t Fct, FunctionalState NewState); +uint8_t IOE_IOPinConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Direction); +uint8_t IOE_GITCmd(uint8_t DeviceAddr, FunctionalState NewState); +uint8_t IOE_GITConfig(uint8_t DeviceAddr, uint8_t Global_IT, FunctionalState NewState); +uint8_t IOE_IOITConfig(uint8_t DeviceAddr, uint8_t IO_IT, FunctionalState NewState); + +/** + * @brief Low Layer functions + */ +uint8_t IOE_TS_Config(void); +uint8_t IOE_TempSens_Config(void); +uint8_t IOE_IOAFConfig(uint8_t DeviceAddr, uint8_t IO_Pin, FunctionalState NewState); +uint8_t IOE_IOEdgeConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Edge); +uint8_t IOE_ITOutConfig(uint8_t Polarity, uint8_t Type); + +uint8_t I2C_WriteDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr, uint8_t RegisterValue); +uint8_t I2C_ReadDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr); +uint16_t I2C_ReadDataBuffer(uint8_t DeviceAddr, uint8_t RegisterAddr); + +#ifdef __cplusplus +} +#endif +#endif /* __STM322xG_EVAL_IOE_H */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_lcd.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_lcd.c new file mode 100644 index 000000000..5bc078b6f --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_lcd.c @@ -0,0 +1,1438 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_lcd.c + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file includes the LCD driver for AM-240320L8TNQW00H (LCD_ILI9320) + * and AM240320D5TOQW01H (LCD_ILI9325) Liquid Crystal Display Modules + * of STM322xG-EVAL evaluation board(MB786) RevA and RevB. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_lcd.h" +#include "../Common/fonts.c" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @defgroup STM322xG_EVAL_LCD + * @brief This file includes the LCD driver for AM-240320L8TNQW00H (LCD_ILI9320) + * and AM240320D5TOQW01H (LCD_ILI9325) Liquid Crystal Display Modules + * of STM322xG_EVAL board. + * @{ + */ + +/** @defgroup STM322xG_EVAL_LCD_Private_TypesDefinitions + * @{ + */ +typedef struct +{ + __IO uint16_t LCD_REG; + __IO uint16_t LCD_RAM; +} LCD_TypeDef; +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_LCD_Private_Defines + * @{ + */ +/* Note: LCD /CS is NE3 - Bank 3 of NOR/SRAM Bank 1~4 */ +#define LCD_BASE ((uint32_t)(0x60000000 | 0x08000000)) +#define LCD ((LCD_TypeDef *) LCD_BASE) +#define MAX_POLY_CORNERS 200 +#define POLY_Y(Z) ((int32_t)((Points + Z)->X)) +#define POLY_X(Z) ((int32_t)((Points + Z)->Y)) +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_LCD_Private_Macros + * @{ + */ +#define ABS(X) ((X) > 0 ? (X) : -(X)) +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_LCD_Private_Variables + * @{ + */ +static sFONT *LCD_Currentfonts; + + /* Global variables to set the written text color */ +__IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF; + +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_LCD_Private_FunctionPrototypes + * @{ + */ +#ifndef USE_Delay +static void delay(__IO uint32_t nCount); +#endif /* USE_Delay*/ +static void PutPixel(int16_t x, int16_t y); +static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed); + + +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_LCD_Private_Functions + * @{ + */ + +/** + * @brief DeInitializes the LCD. + * @param None + * @retval None + */ +void LCD_DeInit(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /*!< LCD Display Off */ + LCD_DisplayOff(); + + /* BANK 3 (of NOR/SRAM Bank 1~4) is disabled */ + FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE); + + /*!< LCD_SPI DeInit */ + FSMC_NORSRAMDeInit(FSMC_Bank1_NORSRAM3); + +/*-- GPIO Configuration ------------------------------------------------------*/ + /* SRAM Data lines configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | + GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOD, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_MCO); + + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | + GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | + GPIO_Pin_15; + + GPIO_Init(GPIOE, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_MCO); + + /* SRAM Address lines configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | + GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 | + GPIO_Pin_14 | GPIO_Pin_15; + GPIO_Init(GPIOF, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource0, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource1, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource2, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource3, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource4, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource5, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource12, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource13, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource14, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOF,GPIO_PinSource15, GPIO_AF_MCO); + + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | + GPIO_Pin_4 | GPIO_Pin_5; + + GPIO_Init(GPIOG, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOG,GPIO_PinSource0, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource1, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource2, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource3, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource4, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOG,GPIO_PinSource5, GPIO_AF_MCO); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13; + + GPIO_Init(GPIOD, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOD,GPIO_PinSource11, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD,GPIO_PinSource12, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD,GPIO_PinSource13, GPIO_AF_MCO); + + /* NOE and NWE configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5; + + GPIO_Init(GPIOD, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOD,GPIO_PinSource4, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD,GPIO_PinSource5, GPIO_AF_MCO); + + /* NE3 configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + + GPIO_Init(GPIOG, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource12, GPIO_AF_MCO); + + /* NBL0, NBL1 configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; + GPIO_Init(GPIOE, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOE,GPIO_PinSource0, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOE,GPIO_PinSource1, GPIO_AF_MCO); +} + +/** + * @brief Initializes the LCD. + * @param None + * @retval None + */ +void STM322xG_LCD_Init(void) +{ + __IO uint32_t lcdid = 0; + +/* Configure the LCD Control pins --------------------------------------------*/ + LCD_CtrlLinesConfig(); + +/* Configure the FSMC Parallel interface -------------------------------------*/ + LCD_FSMCConfig(); + + _delay_(5); /* delay 50 ms */ + + /* Read the LCD ID */ + lcdid = LCD_ReadReg(0x00); + + /* Check if the LCD is ILI9320 Controller */ + if(lcdid == 0x9320) + { + /* Start Initial Sequence ------------------------------------------------*/ + LCD_WriteReg(LCD_REG_229,0x8000); /* Set the internal vcore voltage */ + LCD_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */ + LCD_WriteReg(LCD_REG_1, 0x0100); /* set SS and SM bit */ + LCD_WriteReg(LCD_REG_2, 0x0700); /* set 1 line inversion */ + LCD_WriteReg(LCD_REG_3, 0x1030); /* set GRAM write direction and BGR=1. */ + LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */ + LCD_WriteReg(LCD_REG_8, 0x0202); /* set the back porch and front porch */ + LCD_WriteReg(LCD_REG_9, 0x0000); /* set non-display area refresh cycle ISC[3:0] */ + LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */ + LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */ + LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */ + LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */ + + /* Power On sequence -----------------------------------------------------*/ + LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ + LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */ + LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */ + LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */ + _delay_(20); /* Dis-charge capacitor power voltage (200ms) */ + LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ + LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */ + _delay_(5); /* Delay 50 ms */ + LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */ + _delay_(5); /* Delay 50 ms */ + LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */ + LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */ + _delay_(5); /* Delay 50 ms */ + LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */ + LCD_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */ + + /* Adjust the Gamma Curve ------------------------------------------------*/ + LCD_WriteReg(LCD_REG_48, 0x0007); + LCD_WriteReg(LCD_REG_49, 0x0007); + LCD_WriteReg(LCD_REG_50, 0x0007); + LCD_WriteReg(LCD_REG_53, 0x0007); + LCD_WriteReg(LCD_REG_54, 0x0007); + LCD_WriteReg(LCD_REG_55, 0x0700); + LCD_WriteReg(LCD_REG_56, 0x0700); + LCD_WriteReg(LCD_REG_57, 0x0700); + LCD_WriteReg(LCD_REG_60, 0x0700); + LCD_WriteReg(LCD_REG_61, 0x1F00); + + /* Set GRAM area ---------------------------------------------------------*/ + LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */ + LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */ + LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */ + LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */ + LCD_WriteReg(LCD_REG_96, 0x2700); /* Gate Scan Line */ + LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */ + LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */ + + /* Partial Display Control -----------------------------------------------*/ + LCD_WriteReg(LCD_REG_128, 0x0000); + LCD_WriteReg(LCD_REG_129, 0x0000); + LCD_WriteReg(LCD_REG_130, 0x0000); + LCD_WriteReg(LCD_REG_131, 0x0000); + LCD_WriteReg(LCD_REG_132, 0x0000); + LCD_WriteReg(LCD_REG_133, 0x0000); + + /* Panel Control ---------------------------------------------------------*/ + LCD_WriteReg(LCD_REG_144, 0x0010); + LCD_WriteReg(LCD_REG_146, 0x0000); + LCD_WriteReg(LCD_REG_147, 0x0003); + LCD_WriteReg(LCD_REG_149, 0x0110); + LCD_WriteReg(LCD_REG_151, 0x0000); + LCD_WriteReg(LCD_REG_152, 0x0000); + + /* Set GRAM write direction and BGR = 1 */ + /* I/D=01 (Horizontal : increment, Vertical : decrement) */ + /* AM=1 (address is updated in vertical writing direction) */ + LCD_WriteReg(LCD_REG_3, 0x1018); + + LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */ + } + else if(lcdid == 0x9325) /* Check if the LCD is ILI9325 Controller */ + { + /* Start Initial Sequence ------------------------------------------------*/ + LCD_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */ + LCD_WriteReg(LCD_REG_1, 0x0100); /* Set SS and SM bit */ + LCD_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */ + LCD_WriteReg(LCD_REG_3, 0x1018); /* Set GRAM write direction and BGR=1. */ + LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */ + LCD_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */ + LCD_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */ + LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */ + LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */ + LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */ + LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */ + + /* Power On sequence -----------------------------------------------------*/ + LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ + LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */ + LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */ + LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */ + _delay_(20); /* Dis-charge capacitor power voltage (200ms) */ + LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ + LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */ + _delay_(5); /* Delay 50 ms */ + LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */ + _delay_(5); /* Delay 50 ms */ + LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */ + LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */ + _delay_(5); /* Delay 50 ms */ + LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */ + LCD_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */ + + /* Adjust the Gamma Curve (ILI9325)---------------------------------------*/ + LCD_WriteReg(LCD_REG_48, 0x0007); + LCD_WriteReg(LCD_REG_49, 0x0302); + LCD_WriteReg(LCD_REG_50, 0x0105); + LCD_WriteReg(LCD_REG_53, 0x0206); + LCD_WriteReg(LCD_REG_54, 0x0808); + LCD_WriteReg(LCD_REG_55, 0x0206); + LCD_WriteReg(LCD_REG_56, 0x0504); + LCD_WriteReg(LCD_REG_57, 0x0007); + LCD_WriteReg(LCD_REG_60, 0x0105); + LCD_WriteReg(LCD_REG_61, 0x0808); + + /* Set GRAM area ---------------------------------------------------------*/ + LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */ + LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */ + LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */ + LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */ + + LCD_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line(GS=1, scan direction is G320~G1) */ + LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */ + LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */ + + /* Partial Display Control -----------------------------------------------*/ + LCD_WriteReg(LCD_REG_128, 0x0000); + LCD_WriteReg(LCD_REG_129, 0x0000); + LCD_WriteReg(LCD_REG_130, 0x0000); + LCD_WriteReg(LCD_REG_131, 0x0000); + LCD_WriteReg(LCD_REG_132, 0x0000); + LCD_WriteReg(LCD_REG_133, 0x0000); + + /* Panel Control ---------------------------------------------------------*/ + LCD_WriteReg(LCD_REG_144, 0x0010); + LCD_WriteReg(LCD_REG_146, 0x0000); + LCD_WriteReg(LCD_REG_147, 0x0003); + LCD_WriteReg(LCD_REG_149, 0x0110); + LCD_WriteReg(LCD_REG_151, 0x0000); + LCD_WriteReg(LCD_REG_152, 0x0000); + + /* set GRAM write direction and BGR = 1 */ + /* I/D=00 (Horizontal : increment, Vertical : decrement) */ + /* AM=1 (address is updated in vertical writing direction) */ + LCD_WriteReg(LCD_REG_3, 0x1018); + + LCD_WriteReg(LCD_REG_7, 0x0133); /* 262K color and display ON */ + } + LCD_SetFont(&LCD_DEFAULT_FONT); +} + +/** + * @brief Sets the LCD Text and Background colors. + * @param _TextColor: specifies the Text Color. + * @param _BackColor: specifies the Background Color. + * @retval None + */ +void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor) +{ + TextColor = _TextColor; + BackColor = _BackColor; +} + +/** + * @brief Gets the LCD Text and Background colors. + * @param _TextColor: pointer to the variable that will contain the Text + Color. + * @param _BackColor: pointer to the variable that will contain the Background + Color. + * @retval None + */ +void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor) +{ + *_TextColor = TextColor; *_BackColor = BackColor; +} + +/** + * @brief Sets the Text color. + * @param Color: specifies the Text color code RGB(5-6-5). + * @retval None + */ +void LCD_SetTextColor(__IO uint16_t Color) +{ + TextColor = Color; +} + + +/** + * @brief Sets the Background color. + * @param Color: specifies the Background color code RGB(5-6-5). + * @retval None + */ +void LCD_SetBackColor(__IO uint16_t Color) +{ + BackColor = Color; +} + +/** + * @brief Sets the Text Font. + * @param fonts: specifies the font to be used. + * @retval None + */ +void LCD_SetFont(sFONT *fonts) +{ + LCD_Currentfonts = fonts; +} + +/** + * @brief Gets the Text Font. + * @param None. + * @retval the used font. + */ +sFONT *LCD_GetFont(void) +{ + return LCD_Currentfonts; +} + +/** + * @brief Clears the selected line. + * @param Line: the Line to be cleared. + * This parameter can be one of the following values: + * @arg Linex: where x can be 0..n + * @retval None + */ +void LCD_ClearLine(uint16_t Line) +{ + uint16_t refcolumn = LCD_PIXEL_WIDTH - 1; + /* Send the string character by character on lCD */ + while (((refcolumn + 1)& 0xFFFF) >= LCD_Currentfonts->Width) + { + /* Display one character on LCD */ + LCD_DisplayChar(Line, refcolumn, ' '); + /* Decrement the column position by 16 */ + refcolumn -= LCD_Currentfonts->Width; + } +} + +/** + * @brief Clears the hole LCD. + * @param Color: the color of the background. + * @retval None + */ +void LCD_Clear(uint16_t Color) +{ + uint32_t index = 0; + + LCD_SetCursor(0x00, 0x013F); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + for(index = 0; index < 76800; index++) + { + LCD->LCD_RAM = Color; + } +} + +/** + * @brief Sets the cursor position. + * @param Xpos: specifies the X position. + * @param Ypos: specifies the Y position. + * @retval None + */ +void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos) +{ + LCD_WriteReg(LCD_REG_32, Xpos); + LCD_WriteReg(LCD_REG_33, Ypos); +} + +/** + * @brief Draws a character on LCD. + * @param Xpos: the Line where to display the character shape. + * @param Ypos: start column address. + * @param c: pointer to the character data. + * @retval None + */ +void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint16_t *c) +{ + uint32_t index = 0, i = 0; + uint16_t Xaddress = 0; + Xaddress = Xpos; + + LCD_SetCursor(Xaddress, Ypos); + + for(index = 0; index < LCD_Currentfonts->Height; index++) + { + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + for(i = 0; i < LCD_Currentfonts->Width; i++) + { + + if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> i)) == 0x00) &&(LCD_Currentfonts->Width <= 12))|| + (((c[index] & (0x1 << i)) == 0x00)&&(LCD_Currentfonts->Width > 12 ))) + + { + LCD_WriteRAM(BackColor); + } + else + { + LCD_WriteRAM(TextColor); + } + } + Xaddress++; + LCD_SetCursor(Xaddress, Ypos); + } +} + +/** + * @brief Displays one character (16dots width, 24dots height). + * @param Line: the Line where to display the character shape . + * This parameter can be one of the following values: + * @arg Linex: where x can be 0..9 + * @param Column: start column address. + * @param Ascii: character ascii code, must be between 0x20 and 0x7E. + * @retval None + */ +void LCD_DisplayChar(uint16_t Line, uint16_t Column, uint8_t Ascii) +{ + Ascii -= 32; + LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]); +} + +/** + * @brief Displays a maximum of 20 char on the LCD. + * @param Line: the Line where to display the character shape . + * This parameter can be one of the following values: + * @arg Linex: where x can be 0..9 + * @param *ptr: pointer to string to display on LCD. + * @retval None + */ +void LCD_DisplayStringLine(uint16_t Line, uint8_t *ptr) +{ + uint16_t refcolumn = LCD_PIXEL_WIDTH - 1; + + /* Send the string character by character on lCD */ + while ((*ptr != 0) & (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width)) + { + /* Display one character on LCD */ + LCD_DisplayChar(Line, refcolumn, *ptr); + /* Decrement the column position by 16 */ + refcolumn -= LCD_Currentfonts->Width; + /* Point on the next character */ + ptr++; + } +} + +/** + * @brief Sets a display window + * @param Xpos: specifies the X bottom left position. + * @param Ypos: specifies the Y bottom left position. + * @param Height: display window height. + * @param Width: display window width. + * @retval None + */ +void LCD_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width) +{ + /* Horizontal GRAM Start Address */ + if(Xpos >= Height) + { + LCD_WriteReg(LCD_REG_80, (Xpos - Height + 1)); + } + else + { + LCD_WriteReg(LCD_REG_80, 0); + } + /* Horizontal GRAM End Address */ + LCD_WriteReg(LCD_REG_81, Xpos); + /* Vertical GRAM Start Address */ + if(Ypos >= Width) + { + LCD_WriteReg(LCD_REG_82, (Ypos - Width + 1)); + } + else + { + LCD_WriteReg(LCD_REG_82, 0); + } + /* Vertical GRAM End Address */ + LCD_WriteReg(LCD_REG_83, Ypos); + LCD_SetCursor(Xpos, Ypos); +} + +/** + * @brief Disables LCD Window mode. + * @param None + * @retval None + */ +void LCD_WindowModeDisable(void) +{ + LCD_SetDisplayWindow(239, 0x13F, 240, 320); + LCD_WriteReg(LCD_REG_3, 0x1018); +} + +/** + * @brief Displays a line. + * @param Xpos: specifies the X position. + * @param Ypos: specifies the Y position. + * @param Length: line length. + * @param Direction: line direction. + * This parameter can be one of the following values: Vertical or Horizontal. + * @retval None + */ +void LCD_DrawLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction) +{ + uint32_t i = 0; + + LCD_SetCursor(Xpos, Ypos); + if(Direction == LCD_DIR_HORIZONTAL) + { + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + for(i = 0; i < Length; i++) + { + LCD_WriteRAM(TextColor); + } + } + else + { + for(i = 0; i < Length; i++) + { + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + LCD_WriteRAM(TextColor); + Xpos++; + LCD_SetCursor(Xpos, Ypos); + } + } +} + +/** + * @brief Displays a rectangle. + * @param Xpos: specifies the X position. + * @param Ypos: specifies the Y position. + * @param Height: display rectangle height. + * @param Width: display rectangle width. + * @retval None + */ +void LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width) +{ + LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL); + LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL); + + LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL); + LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL); +} + +/** + * @brief Displays a circle. + * @param Xpos: specifies the X position. + * @param Ypos: specifies the Y position. + * @param Radius + * @retval None + */ +void LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) +{ + int32_t D;/* Decision Variable */ + uint32_t CurX;/* Current X Value */ + uint32_t CurY;/* Current Y Value */ + + D = 3 - (Radius << 1); + CurX = 0; + CurY = Radius; + + while (CurX <= CurY) + { + LCD_SetCursor(Xpos + CurX, Ypos + CurY); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + LCD_WriteRAM(TextColor); + LCD_SetCursor(Xpos + CurX, Ypos - CurY); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + LCD_WriteRAM(TextColor); + LCD_SetCursor(Xpos - CurX, Ypos + CurY); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + LCD_WriteRAM(TextColor); + LCD_SetCursor(Xpos - CurX, Ypos - CurY); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + LCD_WriteRAM(TextColor); + LCD_SetCursor(Xpos + CurY, Ypos + CurX); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + LCD_WriteRAM(TextColor); + LCD_SetCursor(Xpos + CurY, Ypos - CurX); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + LCD_WriteRAM(TextColor); + LCD_SetCursor(Xpos - CurY, Ypos + CurX); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + LCD_WriteRAM(TextColor); + LCD_SetCursor(Xpos - CurY, Ypos - CurX); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + LCD_WriteRAM(TextColor); + if (D < 0) + { + D += (CurX << 2) + 6; + } + else + { + D += ((CurX - CurY) << 2) + 10; + CurY--; + } + CurX++; + } +} + +/** + * @brief Displays a mono-color picture. + * @param Pict: pointer to the picture array. + * @retval None + */ +void LCD_DrawMonoPict(const uint32_t *Pict) +{ + uint32_t index = 0, i = 0; + LCD_SetCursor(0, (LCD_PIXEL_WIDTH - 1)); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + for(index = 0; index < 2400; index++) + { + for(i = 0; i < 32; i++) + { + if((Pict[index] & (1 << i)) == 0x00) + { + LCD_WriteRAM(BackColor); + } + else + { + LCD_WriteRAM(TextColor); + } + } + } +} + +/** + * @brief Displays a bitmap picture loaded in the internal Flash. + * @param BmpAddress: Bmp picture address in the internal Flash. + * @retval None + */ +void LCD_WriteBMP(uint32_t BmpAddress) +{ + uint32_t index = 0, size = 0; + /* Read bitmap size */ + size = *(__IO uint16_t *) (BmpAddress + 2); + size |= (*(__IO uint16_t *) (BmpAddress + 4)) << 16; + /* Get bitmap data address offset */ + index = *(__IO uint16_t *) (BmpAddress + 10); + index |= (*(__IO uint16_t *) (BmpAddress + 12)) << 16; + size = (size - index)/2; + BmpAddress += index; + /* Set GRAM write direction and BGR = 1 */ + /* I/D=00 (Horizontal : decrement, Vertical : decrement) */ + /* AM=1 (address is updated in vertical writing direction) */ + LCD_WriteReg(LCD_REG_3, 0x1008); + + LCD_WriteRAM_Prepare(); + + for(index = 0; index < size; index++) + { + LCD_WriteRAM(*(__IO uint16_t *)BmpAddress); + BmpAddress += 2; + } + + /* Set GRAM write direction and BGR = 1 */ + /* I/D = 01 (Horizontal : increment, Vertical : decrement) */ + /* AM = 1 (address is updated in vertical writing direction) */ + LCD_WriteReg(LCD_REG_3, 0x1018); +} + +/** + * @brief Displays a full rectangle. + * @param Xpos: specifies the X position. + * @param Ypos: specifies the Y position. + * @param Height: rectangle height. + * @param Width: rectangle width. + * @retval None + */ +void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) +{ + LCD_SetTextColor(TextColor); + + LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL); + LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL); + + LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL); + LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL); + + Width -= 2; + Height--; + Ypos--; + + LCD_SetTextColor(BackColor); + + while(Height--) + { + LCD_DrawLine(++Xpos, Ypos, Width, LCD_DIR_HORIZONTAL); + } + + LCD_SetTextColor(TextColor); +} + +/** + * @brief Displays a full circle. + * @param Xpos: specifies the X position. + * @param Ypos: specifies the Y position. + * @param Radius + * @retval None + */ +void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) +{ + int32_t D; /* Decision Variable */ + uint32_t CurX;/* Current X Value */ + uint32_t CurY;/* Current Y Value */ + + D = 3 - (Radius << 1); + + CurX = 0; + CurY = Radius; + + LCD_SetTextColor(BackColor); + + while (CurX <= CurY) + { + if(CurY > 0) + { + LCD_DrawLine(Xpos - CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL); + LCD_DrawLine(Xpos + CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL); + } + + if(CurX > 0) + { + LCD_DrawLine(Xpos - CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL); + LCD_DrawLine(Xpos + CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL); + } + if (D < 0) + { + D += (CurX << 2) + 6; + } + else + { + D += ((CurX - CurY) << 2) + 10; + CurY--; + } + CurX++; + } + + LCD_SetTextColor(TextColor); + LCD_DrawCircle(Xpos, Ypos, Radius); +} + +/** + * @brief Displays an uni-line (between two points). + * @param x1: specifies the point 1 x position. + * @param y1: specifies the point 1 y position. + * @param x2: specifies the point 2 x position. + * @param y2: specifies the point 2 y position. + * @retval None + */ +void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) +{ + int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, + yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, + curpixel = 0; + + deltax = ABS(x2 - x1); /* The difference between the x's */ + deltay = ABS(y2 - y1); /* The difference between the y's */ + x = x1; /* Start x off at the first pixel */ + y = y1; /* Start y off at the first pixel */ + + if (x2 >= x1) /* The x-values are increasing */ + { + xinc1 = 1; + xinc2 = 1; + } + else /* The x-values are decreasing */ + { + xinc1 = -1; + xinc2 = -1; + } + + if (y2 >= y1) /* The y-values are increasing */ + { + yinc1 = 1; + yinc2 = 1; + } + else /* The y-values are decreasing */ + { + yinc1 = -1; + yinc2 = -1; + } + + if (deltax >= deltay) /* There is at least one x-value for every y-value */ + { + xinc1 = 0; /* Don't change the x when numerator >= denominator */ + yinc2 = 0; /* Don't change the y for every iteration */ + den = deltax; + num = deltax / 2; + numadd = deltay; + numpixels = deltax; /* There are more x-values than y-values */ + } + else /* There is at least one y-value for every x-value */ + { + xinc2 = 0; /* Don't change the x for every iteration */ + yinc1 = 0; /* Don't change the y when numerator >= denominator */ + den = deltay; + num = deltay / 2; + numadd = deltax; + numpixels = deltay; /* There are more y-values than x-values */ + } + + for (curpixel = 0; curpixel <= numpixels; curpixel++) + { + PutPixel(x, y); /* Draw the current pixel */ + num += numadd; /* Increase the numerator by the top of the fraction */ + if (num >= den) /* Check if numerator >= denominator */ + { + num -= den; /* Calculate the new numerator value */ + x += xinc1; /* Change the x as appropriate */ + y += yinc1; /* Change the y as appropriate */ + } + x += xinc2; /* Change the x as appropriate */ + y += yinc2; /* Change the y as appropriate */ + } +} + +/** + * @brief Displays an poly-line (between many points). + * @param Points: pointer to the points array. + * @param PointCount: Number of points. + * @retval None + */ +void LCD_PolyLine(pPoint Points, uint16_t PointCount) +{ + int16_t X = 0, Y = 0; + + if(PointCount < 2) + { + return; + } + + while(--PointCount) + { + X = Points->X; + Y = Points->Y; + Points++; + LCD_DrawUniLine(X, Y, Points->X, Points->Y); + } +} + +/** + * @brief Displays an relative poly-line (between many points). + * @param Points: pointer to the points array. + * @param PointCount: Number of points. + * @param Closed: specifies if the draw is closed or not. + * 1: closed, 0 : not closed. + * @retval None + */ +static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed) +{ + int16_t X = 0, Y = 0; + pPoint First = Points; + + if(PointCount < 2) + { + return; + } + X = Points->X; + Y = Points->Y; + while(--PointCount) + { + Points++; + LCD_DrawUniLine(X, Y, X + Points->X, Y + Points->Y); + X = X + Points->X; + Y = Y + Points->Y; + } + if(Closed) + { + LCD_DrawUniLine(First->X, First->Y, X, Y); + } +} + +/** + * @brief Displays a closed poly-line (between many points). + * @param Points: pointer to the points array. + * @param PointCount: Number of points. + * @retval None + */ +void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount) +{ + LCD_PolyLine(Points, PointCount); + LCD_DrawUniLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y); +} + +/** + * @brief Displays a relative poly-line (between many points). + * @param Points: pointer to the points array. + * @param PointCount: Number of points. + * @retval None + */ +void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount) +{ + LCD_PolyLineRelativeClosed(Points, PointCount, 0); +} + +/** + * @brief Displays a closed relative poly-line (between many points). + * @param Points: pointer to the points array. + * @param PointCount: Number of points. + * @retval None + */ +void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount) +{ + LCD_PolyLineRelativeClosed(Points, PointCount, 1); +} + + +/** + * @brief Displays a full poly-line (between many points). + * @param Points: pointer to the points array. + * @param PointCount: Number of points. + * @retval None + */ +void LCD_FillPolyLine(pPoint Points, uint16_t PointCount) +{ + /* public-domain code by Darel Rex Finley, 2007 */ + uint16_t nodes = 0, nodeX[MAX_POLY_CORNERS], pixelX = 0, pixelY = 0, i = 0, + j = 0, swap = 0; + uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0; + + IMAGE_LEFT = IMAGE_RIGHT = Points->X; + IMAGE_TOP= IMAGE_BOTTOM = Points->Y; + + for(i = 1; i < PointCount; i++) + { + pixelX = POLY_X(i); + if(pixelX < IMAGE_LEFT) + { + IMAGE_LEFT = pixelX; + } + if(pixelX > IMAGE_RIGHT) + { + IMAGE_RIGHT = pixelX; + } + + pixelY = POLY_Y(i); + if(pixelY < IMAGE_TOP) + { + IMAGE_TOP = pixelY; + } + if(pixelY > IMAGE_BOTTOM) + { + IMAGE_BOTTOM = pixelY; + } + } + + LCD_SetTextColor(BackColor); + + /* Loop through the rows of the image. */ + for (pixelY = IMAGE_TOP; pixelY < IMAGE_BOTTOM; pixelY++) + { + /* Build a list of nodes. */ + nodes = 0; j = PointCount-1; + + for (i = 0; i < PointCount; i++) + { + if (((POLY_Y(i)<(double) pixelY) && (POLY_Y(j)>=(double) pixelY)) || \ + ((POLY_Y(j)<(double) pixelY) && (POLY_Y(i)>=(double) pixelY))) + { + nodeX[nodes++]=(int) (POLY_X(i)+((pixelY-POLY_Y(i))*(POLY_X(j)-POLY_X(i)))/(POLY_Y(j)-POLY_Y(i))); + } + j = i; + } + + /* Sort the nodes, via a simple "Bubble" sort. */ + i = 0; + while (i < nodes-1) + { + if (nodeX[i]>nodeX[i+1]) + { + swap = nodeX[i]; + nodeX[i] = nodeX[i+1]; + nodeX[i+1] = swap; + if(i) + { + i--; + } + } + else + { + i++; + } + } + + /* Fill the pixels between node pairs. */ + for (i = 0; i < nodes; i+=2) + { + if(nodeX[i] >= IMAGE_RIGHT) + { + break; + } + if(nodeX[i+1] > IMAGE_LEFT) + { + if (nodeX[i] < IMAGE_LEFT) + { + nodeX[i]=IMAGE_LEFT; + } + if(nodeX[i+1] > IMAGE_RIGHT) + { + nodeX[i+1] = IMAGE_RIGHT; + } + LCD_SetTextColor(BackColor); + LCD_DrawLine(pixelY, nodeX[i+1], nodeX[i+1] - nodeX[i], LCD_DIR_HORIZONTAL); + LCD_SetTextColor(TextColor); + PutPixel(pixelY, nodeX[i+1]); + PutPixel(pixelY, nodeX[i]); + /* for (j=nodeX[i]; jLCD_REG = LCD_Reg; + /* Write 16-bit Reg */ + LCD->LCD_RAM = LCD_RegValue; +} + +/** + * @brief Reads the selected LCD Register. + * @param LCD_Reg: address of the selected register. + * @retval LCD Register Value. + */ +uint16_t LCD_ReadReg(uint8_t LCD_Reg) +{ + /* Write 16-bit Index (then Read Reg) */ + LCD->LCD_REG = LCD_Reg; + /* Read 16-bit Reg */ + return (LCD->LCD_RAM); +} + +/** + * @brief Prepare to write to the LCD RAM. + * @param None + * @retval None + */ +void LCD_WriteRAM_Prepare(void) +{ + LCD->LCD_REG = LCD_REG_34; +} + +/** + * @brief Writes to the LCD RAM. + * @param RGB_Code: the pixel color in RGB mode (5-6-5). + * @retval None + */ +void LCD_WriteRAM(uint16_t RGB_Code) +{ + /* Write 16-bit GRAM Reg */ + LCD->LCD_RAM = RGB_Code; +} + +/** + * @brief Reads the LCD RAM. + * @param None + * @retval LCD RAM Value. + */ +uint16_t LCD_ReadRAM(void) +{ + /* Write 16-bit Index (then Read Reg) */ + LCD->LCD_REG = LCD_REG_34; /* Select GRAM Reg */ + /* Read 16-bit Reg */ + return LCD->LCD_RAM; +} + +/** + * @brief Power on the LCD. + * @param None + * @retval None + */ +void LCD_PowerOn(void) +{ +/* Power On sequence ---------------------------------------------------------*/ + LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ + LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */ + LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */ + LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude*/ + _delay_(20); /* Dis-charge capacitor power voltage (200ms) */ + LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ + LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */ + _delay_(5); /* Delay 50 ms */ + LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */ + _delay_(5); /* Delay 50 ms */ + LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */ + LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */ + _delay_(5); /* Delay 50 ms */ + LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */ +} + +/** + * @brief Enables the Display. + * @param None + * @retval None + */ +void LCD_DisplayOn(void) +{ + /* Display On */ + LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */ +} + +/** + * @brief Disables the Display. + * @param None + * @retval None + */ +void LCD_DisplayOff(void) +{ + /* Display Off */ + LCD_WriteReg(LCD_REG_7, 0x0); +} + +/** + * @brief Configures LCD Control lines (FSMC Pins) in alternate function mode. + * @param None + * @retval None + */ +void LCD_CtrlLinesConfig(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOE | + RCC_AHB1Periph_GPIOF, ENABLE); + +/*-- GPIO Configuration ------------------------------------------------------*/ + /* SRAM Data lines, NOE and NWE configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | + GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15 | + GPIO_Pin_4 |GPIO_Pin_5;; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + + GPIO_Init(GPIOD, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | + GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | + GPIO_Pin_15; + GPIO_Init(GPIOE, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC); + GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC); + + /* SRAM Address lines configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; + GPIO_Init(GPIOF, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource0, GPIO_AF_FSMC); + + /* NE3 configuration */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + + GPIO_Init(GPIOG, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOG, GPIO_PinSource10, GPIO_AF_FSMC); +} + +/** + * @brief Configures the Parallel interface (FSMC) for LCD(Parallel mode) + * @param None + * @retval None + */ +void LCD_FSMCConfig(void) +{ + FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; + FSMC_NORSRAMTimingInitTypeDef p; + + /* Enable FSMC clock */ + RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); + +/*-- FSMC Configuration ------------------------------------------------------*/ +/*----------------------- SRAM Bank 3 ----------------------------------------*/ + /* FSMC_Bank1_NORSRAM4 configuration */ + p.FSMC_AddressSetupTime = 3; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 9; + p.FSMC_BusTurnAroundDuration = 0; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + /* Color LCD configuration ------------------------------------ + LCD configured as follow: + - Data/Address MUX = Disable + - Memory Type = SRAM + - Data Width = 16bit + - Write Operation = Enable + - Extended Mode = Enable + - Asynchronous Wait = Disable */ + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; + + FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); + + /* Enable FSMC NOR/SRAM Bank3 */ + FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE); +} + +/** + * @brief Displays a pixel. + * @param x: pixel x. + * @param y: pixel y. + * @retval None + */ +static void PutPixel(int16_t x, int16_t y) +{ + if(x < 0 || x > 239 || y < 0 || y > 319) + { + return; + } + LCD_DrawLine(x, y, 1, LCD_DIR_HORIZONTAL); +} + + +#ifndef USE_Delay +/** + * @brief Inserts a delay time. + * @param nCount: specifies the delay time length. + * @retval None + */ +static void delay(__IO uint32_t nCount) +{ + __IO uint32_t index = 0; + for(index = (100000 * nCount); index != 0; index--) + { + } +} +#endif /* USE_Delay*/ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_lcd.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_lcd.h new file mode 100644 index 000000000..32479af57 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_lcd.h @@ -0,0 +1,365 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_lcd.h + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file contains all the functions prototypes for the stm322xg_eval_lcd.c + * driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM322xG_EVAL_LCD_H +#define __STM322xG_EVAL_LCD_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" +#include "../Common/fonts.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_LCD + * @{ + */ + + +/** @defgroup STM322xG_EVAL_LCD_Exported_Types + * @{ + */ +typedef struct +{ + int16_t X; + int16_t Y; +} Point, * pPoint; +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_LCD_Exported_Constants + * @{ + */ + +/** + * @brief Uncomment the line below if you want to use user defined Delay function + * (for precise timing), otherwise default _delay_ function defined within + * this driver is used (less precise timing). + */ +/* #define USE_Delay */ + +#ifdef USE_Delay +#include "main.h" + #define _delay_ Delay /* !< User can provide more timing precise _delay_ function + (with 10ms time base), using SysTick for example */ +#else + #define _delay_ delay /* !< Default _delay_ function with less precise timing */ +#endif + +/** + * @brief LCD Registers + */ +#define LCD_REG_0 0x00 +#define LCD_REG_1 0x01 +#define LCD_REG_2 0x02 +#define LCD_REG_3 0x03 +#define LCD_REG_4 0x04 +#define LCD_REG_5 0x05 +#define LCD_REG_6 0x06 +#define LCD_REG_7 0x07 +#define LCD_REG_8 0x08 +#define LCD_REG_9 0x09 +#define LCD_REG_10 0x0A +#define LCD_REG_12 0x0C +#define LCD_REG_13 0x0D +#define LCD_REG_14 0x0E +#define LCD_REG_15 0x0F +#define LCD_REG_16 0x10 +#define LCD_REG_17 0x11 +#define LCD_REG_18 0x12 +#define LCD_REG_19 0x13 +#define LCD_REG_20 0x14 +#define LCD_REG_21 0x15 +#define LCD_REG_22 0x16 +#define LCD_REG_23 0x17 +#define LCD_REG_24 0x18 +#define LCD_REG_25 0x19 +#define LCD_REG_26 0x1A +#define LCD_REG_27 0x1B +#define LCD_REG_28 0x1C +#define LCD_REG_29 0x1D +#define LCD_REG_30 0x1E +#define LCD_REG_31 0x1F +#define LCD_REG_32 0x20 +#define LCD_REG_33 0x21 +#define LCD_REG_34 0x22 +#define LCD_REG_36 0x24 +#define LCD_REG_37 0x25 +#define LCD_REG_40 0x28 +#define LCD_REG_41 0x29 +#define LCD_REG_43 0x2B +#define LCD_REG_45 0x2D +#define LCD_REG_48 0x30 +#define LCD_REG_49 0x31 +#define LCD_REG_50 0x32 +#define LCD_REG_51 0x33 +#define LCD_REG_52 0x34 +#define LCD_REG_53 0x35 +#define LCD_REG_54 0x36 +#define LCD_REG_55 0x37 +#define LCD_REG_56 0x38 +#define LCD_REG_57 0x39 +#define LCD_REG_58 0x3A +#define LCD_REG_59 0x3B +#define LCD_REG_60 0x3C +#define LCD_REG_61 0x3D +#define LCD_REG_62 0x3E +#define LCD_REG_63 0x3F +#define LCD_REG_64 0x40 +#define LCD_REG_65 0x41 +#define LCD_REG_66 0x42 +#define LCD_REG_67 0x43 +#define LCD_REG_68 0x44 +#define LCD_REG_69 0x45 +#define LCD_REG_70 0x46 +#define LCD_REG_71 0x47 +#define LCD_REG_72 0x48 +#define LCD_REG_73 0x49 +#define LCD_REG_74 0x4A +#define LCD_REG_75 0x4B +#define LCD_REG_76 0x4C +#define LCD_REG_77 0x4D +#define LCD_REG_78 0x4E +#define LCD_REG_79 0x4F +#define LCD_REG_80 0x50 +#define LCD_REG_81 0x51 +#define LCD_REG_82 0x52 +#define LCD_REG_83 0x53 +#define LCD_REG_96 0x60 +#define LCD_REG_97 0x61 +#define LCD_REG_106 0x6A +#define LCD_REG_118 0x76 +#define LCD_REG_128 0x80 +#define LCD_REG_129 0x81 +#define LCD_REG_130 0x82 +#define LCD_REG_131 0x83 +#define LCD_REG_132 0x84 +#define LCD_REG_133 0x85 +#define LCD_REG_134 0x86 +#define LCD_REG_135 0x87 +#define LCD_REG_136 0x88 +#define LCD_REG_137 0x89 +#define LCD_REG_139 0x8B +#define LCD_REG_140 0x8C +#define LCD_REG_141 0x8D +#define LCD_REG_143 0x8F +#define LCD_REG_144 0x90 +#define LCD_REG_145 0x91 +#define LCD_REG_146 0x92 +#define LCD_REG_147 0x93 +#define LCD_REG_148 0x94 +#define LCD_REG_149 0x95 +#define LCD_REG_150 0x96 +#define LCD_REG_151 0x97 +#define LCD_REG_152 0x98 +#define LCD_REG_153 0x99 +#define LCD_REG_154 0x9A +#define LCD_REG_157 0x9D +#define LCD_REG_192 0xC0 +#define LCD_REG_193 0xC1 +#define LCD_REG_229 0xE5 + +/** + * @brief LCD color + */ +#define LCD_COLOR_WHITE 0xFFFF +#define LCD_COLOR_BLACK 0x0000 +#define LCD_COLOR_GREY 0xF7DE +#define LCD_COLOR_BLUE 0x001F +#define LCD_COLOR_BLUE2 0x051F +#define LCD_COLOR_RED 0xF800 +#define LCD_COLOR_MAGENTA 0xF81F +#define LCD_COLOR_GREEN 0x07E0 +#define LCD_COLOR_CYAN 0x7FFF +#define LCD_COLOR_YELLOW 0xFFE0 + +/** + * @brief LCD Lines depending on the chosen fonts. + */ +#define LCD_LINE_0 LINE(0) +#define LCD_LINE_1 LINE(1) +#define LCD_LINE_2 LINE(2) +#define LCD_LINE_3 LINE(3) +#define LCD_LINE_4 LINE(4) +#define LCD_LINE_5 LINE(5) +#define LCD_LINE_6 LINE(6) +#define LCD_LINE_7 LINE(7) +#define LCD_LINE_8 LINE(8) +#define LCD_LINE_9 LINE(9) +#define LCD_LINE_10 LINE(10) +#define LCD_LINE_11 LINE(11) +#define LCD_LINE_12 LINE(12) +#define LCD_LINE_13 LINE(13) +#define LCD_LINE_14 LINE(14) +#define LCD_LINE_15 LINE(15) +#define LCD_LINE_16 LINE(16) +#define LCD_LINE_17 LINE(17) +#define LCD_LINE_18 LINE(18) +#define LCD_LINE_19 LINE(19) +#define LCD_LINE_20 LINE(20) +#define LCD_LINE_21 LINE(21) +#define LCD_LINE_22 LINE(22) +#define LCD_LINE_23 LINE(23) +#define LCD_LINE_24 LINE(24) +#define LCD_LINE_25 LINE(25) +#define LCD_LINE_26 LINE(26) +#define LCD_LINE_27 LINE(27) +#define LCD_LINE_28 LINE(28) +#define LCD_LINE_29 LINE(29) + +/** + * @brief LCD default font + */ +#define LCD_DEFAULT_FONT Font16x24 + +/** + * @brief LCD Direction + */ +#define LCD_DIR_HORIZONTAL 0x0000 +#define LCD_DIR_VERTICAL 0x0001 + +/** + * @brief LCD Size (Width and Height) + */ +#define LCD_PIXEL_WIDTH 0x0140 +#define LCD_PIXEL_HEIGHT 0x00F0 + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_LCD_Exported_Macros + * @{ + */ +#define ASSEMBLE_RGB(R ,G, B) ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3)) +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_LCD_Exported_Functions + * @{ + */ +/** @defgroup + * @{ + */ +void LCD_DeInit(void); +void STM322xG_LCD_Init(void); +void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor); +void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor); +void LCD_SetTextColor(__IO uint16_t Color); +void LCD_SetBackColor(__IO uint16_t Color); +void LCD_ClearLine(uint16_t Line); +void LCD_Clear(uint16_t Color); +void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos); +void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint16_t *c); +void LCD_DisplayChar(uint16_t Line, uint16_t Column, uint8_t Ascii); +void LCD_SetFont(sFONT *fonts); +sFONT *LCD_GetFont(void); +void LCD_DisplayStringLine(uint16_t Line, uint8_t *ptr); +void LCD_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width); +void LCD_WindowModeDisable(void); +void LCD_DrawLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction); +void LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width); +void LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); +void LCD_DrawMonoPict(const uint32_t *Pict); +void LCD_WriteBMP(uint32_t BmpAddress); +void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); +void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); +void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); +void LCD_PolyLine(pPoint Points, uint16_t PointCount); +void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount); +void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount); +void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount); +void LCD_FillPolyLine(pPoint Points, uint16_t PointCount); +/** + * @} + */ + +/** @defgroup + * @{ + */ +void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue); +uint16_t LCD_ReadReg(uint8_t LCD_Reg); +void LCD_WriteRAM_Prepare(void); +void LCD_WriteRAM(uint16_t RGB_Code); +uint16_t LCD_ReadRAM(void); +void LCD_PowerOn(void); +void LCD_DisplayOn(void); +void LCD_DisplayOff(void); +/** + * @} + */ + +/** @defgroup + * @{ + */ +void LCD_CtrlLinesConfig(void); +void LCD_FSMCConfig(void); +/** + * @} + */ +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif /* __STM322xG_EVAL_LCD_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_sdio_sd.c b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_sdio_sd.c new file mode 100644 index 000000000..f0b9478c5 --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_sdio_sd.c @@ -0,0 +1,2820 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_sdio_sd.c + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file provides a set of functions needed to manage the SDIO SD + * Card memory mounted on STM322xG-EVAL evaluation board. + * + * + * @verbatim + * + * =================================================================== + * How to use this driver + * =================================================================== + * It implements a high level communication layer for read and write + * from/to this memory. The needed STM32 hardware resources (SDIO and + * GPIO) are defined in stm322xg_eval.h file, and the initialization is + * performed in SD_LowLevel_Init() function declared in stm322xg_eval.c + * file. + * You can easily tailor this driver to any other development board, + * by just adapting the defines for hardware resources and + * SD_LowLevel_Init() function. + * + * A - SD Card Initialization and configuration + * ============================================ + * - To initialize the SD Card, use the SD_Init() function. It + * Initializes the SD Card and put it into StandBy State (Ready + * for data transfer). This function provide the following operations: + * + * 1 - Apply the SD Card initialization process at 400KHz and check + * the SD Card type (Standard Capacity or High Capacity). You + * can change or adapt this frequency by adjusting the + * "SDIO_INIT_CLK_DIV" define inside the stm322xg_eval.h file. + * The SD Card frequency (SDIO_CK) is computed as follows: + * + * +---------------------------------------------+ + * | SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) | + * +---------------------------------------------+ + * + * In initialization mode and according to the SD Card standard, + * make sure that the SDIO_CK frequency don't exceed 400KHz. + * + * 2 - Get the SD CID and CSD data. All these information are + * managed by the SDCardInfo structure. This structure provide + * also ready computed SD Card capacity and Block size. + * + * 3 - Configure the SD Card Data transfer frequency. By Default, + * the card transfer frequency is set to 24MHz. You can change + * or adapt this frequency by adjusting the "SDIO_TRANSFER_CLK_DIV" + * define inside the stm322xg_eval.h file. + * The SD Card frequency (SDIO_CK) is computed as follows: + * + * +---------------------------------------------+ + * | SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) | + * +---------------------------------------------+ + * + * In transfer mode and according to the SD Card standard, + * make sure that the SDIO_CK frequency don't exceed 25MHz + * and 50MHz in High-speed mode switch. + * To be able to use a frequency higher than 24MHz, you should + * use the SDIO peripheral in bypass mode. Refer to the + * corresponding reference manual for more details. + * + * 4 - Select the corresponding SD Card according to the address + * read with the step 2. + * + * 5 - Configure the SD Card in wide bus mode: 4-bits data. + * + * B - SD Card Read operation + * ========================== + * - You can read SD card by using two function: SD_ReadBlock() and + * SD_ReadMultiBlocks() functions. These functions support only + * 512-byte block length. + * - The SD_ReadBlock() function read only one block (512-byte). This + * function can transfer the data using DMA controller or using + * polling mode. To select between DMA or polling mode refer to + * "SD_DMA_MODE" or "SD_POLLING_MODE" inside the stm322xg_eval_sdio_sd.h + * file and uncomment the corresponding line. By default the SD DMA + * mode is selected + * - The SD_ReadMultiBlocks() function read only mutli blocks (multiple + * of 512-byte). + * - Any read operation should be followed by two functions to check + * if the DMA Controller and SD Card status. + * - SD_ReadWaitOperation(): this function insure that the DMA + * controller has finished all data transfer. + * - SD_GetStatus(): to check that the SD Card has finished the + * data transfer and it is ready for data. + * + * - The DMA transfer is finished by the SDIO Data End interrupt. + * User has to call the SD_ProcessIRQ() function inside the SDIO_IRQHandler() + * and SD_ProcessDMAIRQ() function inside the DMA2_Streamx_IRQHandler(). + * Don't forget to enable the SDIO_IRQn and DMA2_Stream3_IRQn or + * DMA2_Stream6_IRQn interrupts using the NVIC controller. + * + * C - SD Card Write operation + * =========================== + * - You can write SD card by using two function: SD_WriteBlock() and + * SD_WriteMultiBlocks() functions. These functions support only + * 512-byte block length. + * - The SD_WriteBlock() function write only one block (512-byte). This + * function can transfer the data using DMA controller or using + * polling mode. To select between DMA or polling mode refer to + * "SD_DMA_MODE" or "SD_POLLING_MODE" inside the stm322xg_eval_sdio_sd.h + * file and uncomment the corresponding line. By default the SD DMA + * mode is selected + * - The SD_WriteMultiBlocks() function write only mutli blocks (multiple + * of 512-byte). + * - Any write operation should be followed by two functions to check + * if the DMA Controller and SD Card status. + * - SD_ReadWaitOperation(): this function insure that the DMA + * controller has finished all data transfer. + * - SD_GetStatus(): to check that the SD Card has finished the + * data transfer and it is ready for data. + * + * - The DMA transfer is finished by the SDIO Data End interrupt. + * User has to call the SD_ProcessIRQ() function inside the SDIO_IRQHandler() + * and SD_ProcessDMAIRQ() function inside the DMA2_Streamx_IRQHandler(). + * Don't forget to enable the SDIO_IRQn and DMA2_Stream3_IRQn or + * DMA2_Stream6_IRQn interrupts using the NVIC controller. + * + * + * D - SD card status + * ================== + * - At any time, you can check the SD Card status and get the SD card + * state by using the SD_GetStatus() function. This function checks + * first if the SD card is still connected and then get the internal + * SD Card transfer state. + * - You can also get the SD card SD Status register by using the + * SD_SendSDStatus() function. + * + * E - Programming Model (Selecting DMA for SDIO data Transfer) + * ============================================================ + * Status = SD_Init(); // Initialization Step as described in section A + * + * // SDIO Interrupt ENABLE + * NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn; + * NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + * NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + * NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + * NVIC_Init(&NVIC_InitStructure); + * // DMA2 STREAMx Interrupt ENABLE + * NVIC_InitStructure.NVIC_IRQChannel = SD_SDIO_DMA_IRQn; + * NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + * NVIC_Init(&NVIC_InitStructure); + * + * // Write operation as described in Section C + * Status = SD_WriteBlock(buffer, address, 512); + * Status = SD_WaitWriteOperation(); + * while(SD_GetStatus() != SD_TRANSFER_OK); + * + * Status = SD_WriteMultiBlocks(buffer, address, 512, NUMBEROFBLOCKS); + * Status = SD_WaitWriteOperation(); + * while(SD_GetStatus() != SD_TRANSFER_OK); + * + * // Read operation as described in Section B + * Status = SD_ReadBlock(buffer, address, 512); + * Status = SD_WaitReadOperation(); + * while(SD_GetStatus() != SD_TRANSFER_OK); + * + * Status = SD_ReadMultiBlocks(buffer, address, 512, NUMBEROFBLOCKS); + * Status = SD_WaitReadOperation(); + * while(SD_GetStatus() != SD_TRANSFER_OK); + * + * - Add the SDIO and DMA2 StreamX (3 or 6) IRQ Handlers: + * void SDIO_IRQHandler(void) + * { + * SD_ProcessIRQ(); + * } + * void SD_SDIO_DMA_IRQHANDLER(void) + * { + * SD_ProcessDMAIRQ(); + * } + * + * F - Programming Model (Selecting Polling for SDIO data Transfer) + * ================================================================ + * //Only SD Card Single Block operation are managed. + * Status = SD_Init(); // Initialization Step as described in section + * + * // Write operation as described in Section C + * Status = SD_WriteBlock(buffer, address, 512); + * + * // Read operation as described in Section B + * Status = SD_ReadBlock(buffer, address, 512); + * + * STM32 SDIO Pin assignment + * ========================= + * +-----------------------------------------------------------+ + * | Pin assignment | + * +-----------------------------+---------------+-------------+ + * | STM32 SDIO Pins | SD | Pin | + * +-----------------------------+---------------+-------------+ + * | SDIO D2 | D2 | 1 | + * | SDIO D3 | D3 | 2 | + * | SDIO CMD | CMD | 3 | + * | | VCC | 4 (3.3 V)| + * | SDIO CLK | CLK | 5 | + * | | GND | 6 (0 V) | + * | SDIO D0 | D0 | 7 | + * | SDIO D1 | D1 | 8 | + * +-----------------------------+---------------+-------------+ + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval_sdio_sd.h" + + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_SDIO_SD + * @brief This file provides all the SD Card driver firmware functions. + * @{ + */ + +/** @defgroup STM322xG_EVAL_SDIO_SD_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_SDIO_SD_Private_Defines + * @{ + */ + +/** + * @brief SDIO Static flags, TimeOut, FIFO Address + */ +#define NULL 0 +#define SDIO_STATIC_FLAGS ((uint32_t)0x000005FF) +#define SDIO_CMD0TIMEOUT ((uint32_t)0x00010000) + +/** + * @brief Mask for errors Card Status R1 (OCR Register) + */ +#define SD_OCR_ADDR_OUT_OF_RANGE ((uint32_t)0x80000000) +#define SD_OCR_ADDR_MISALIGNED ((uint32_t)0x40000000) +#define SD_OCR_BLOCK_LEN_ERR ((uint32_t)0x20000000) +#define SD_OCR_ERASE_SEQ_ERR ((uint32_t)0x10000000) +#define SD_OCR_BAD_ERASE_PARAM ((uint32_t)0x08000000) +#define SD_OCR_WRITE_PROT_VIOLATION ((uint32_t)0x04000000) +#define SD_OCR_LOCK_UNLOCK_FAILED ((uint32_t)0x01000000) +#define SD_OCR_COM_CRC_FAILED ((uint32_t)0x00800000) +#define SD_OCR_ILLEGAL_CMD ((uint32_t)0x00400000) +#define SD_OCR_CARD_ECC_FAILED ((uint32_t)0x00200000) +#define SD_OCR_CC_ERROR ((uint32_t)0x00100000) +#define SD_OCR_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00080000) +#define SD_OCR_STREAM_READ_UNDERRUN ((uint32_t)0x00040000) +#define SD_OCR_STREAM_WRITE_OVERRUN ((uint32_t)0x00020000) +#define SD_OCR_CID_CSD_OVERWRIETE ((uint32_t)0x00010000) +#define SD_OCR_WP_ERASE_SKIP ((uint32_t)0x00008000) +#define SD_OCR_CARD_ECC_DISABLED ((uint32_t)0x00004000) +#define SD_OCR_ERASE_RESET ((uint32_t)0x00002000) +#define SD_OCR_AKE_SEQ_ERROR ((uint32_t)0x00000008) +#define SD_OCR_ERRORBITS ((uint32_t)0xFDFFE008) + +/** + * @brief Masks for R6 Response + */ +#define SD_R6_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00002000) +#define SD_R6_ILLEGAL_CMD ((uint32_t)0x00004000) +#define SD_R6_COM_CRC_FAILED ((uint32_t)0x00008000) + +#define SD_VOLTAGE_WINDOW_SD ((uint32_t)0x80100000) +#define SD_HIGH_CAPACITY ((uint32_t)0x40000000) +#define SD_STD_CAPACITY ((uint32_t)0x00000000) +#define SD_CHECK_PATTERN ((uint32_t)0x000001AA) + +#define SD_MAX_VOLT_TRIAL ((uint32_t)0x0000FFFF) +#define SD_ALLZERO ((uint32_t)0x00000000) + +#define SD_WIDE_BUS_SUPPORT ((uint32_t)0x00040000) +#define SD_SINGLE_BUS_SUPPORT ((uint32_t)0x00010000) +#define SD_CARD_LOCKED ((uint32_t)0x02000000) + +#define SD_DATATIMEOUT ((uint32_t)0xFFFFFFFF) +#define SD_0TO7BITS ((uint32_t)0x000000FF) +#define SD_8TO15BITS ((uint32_t)0x0000FF00) +#define SD_16TO23BITS ((uint32_t)0x00FF0000) +#define SD_24TO31BITS ((uint32_t)0xFF000000) +#define SD_MAX_DATA_LENGTH ((uint32_t)0x01FFFFFF) + +#define SD_HALFFIFO ((uint32_t)0x00000008) +#define SD_HALFFIFOBYTES ((uint32_t)0x00000020) + +/** + * @brief Command Class Supported + */ +#define SD_CCCC_LOCK_UNLOCK ((uint32_t)0x00000080) +#define SD_CCCC_WRITE_PROT ((uint32_t)0x00000040) +#define SD_CCCC_ERASE ((uint32_t)0x00000020) + +/** + * @brief Following commands are SD Card Specific commands. + * SDIO_APP_CMD should be sent before sending these commands. + */ +#define SDIO_SEND_IF_COND ((uint32_t)0x00000008) + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_SDIO_SD_Private_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_SDIO_SD_Private_Variables + * @{ + */ + +static uint32_t CardType = SDIO_STD_CAPACITY_SD_CARD_V1_1; +static uint32_t CSD_Tab[4], CID_Tab[4], RCA = 0; +static uint8_t SDSTATUS_Tab[16]; +__IO uint32_t StopCondition = 0; +__IO SD_Error TransferError = SD_OK; +__IO uint32_t TransferEnd = 0, DMAEndOfTransfer = 0; +SD_CardInfo SDCardInfo; + +SDIO_InitTypeDef SDIO_InitStructure; +SDIO_CmdInitTypeDef SDIO_CmdInitStructure; +SDIO_DataInitTypeDef SDIO_DataInitStructure; +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_SDIO_SD_Private_Function_Prototypes + * @{ + */ +static SD_Error CmdError(void); +static SD_Error CmdResp1Error(uint8_t cmd); +static SD_Error CmdResp7Error(void); +static SD_Error CmdResp3Error(void); +static SD_Error CmdResp2Error(void); +static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca); +static SD_Error SDEnWideBus(FunctionalState NewState); +static SD_Error IsCardProgramming(uint8_t *pstatus); +static SD_Error FindSCR(uint16_t rca, uint32_t *pscr); +uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes); + +/** + * @} + */ + + +/** @defgroup STM322xG_EVAL_SDIO_SD_Private_Functions + * @{ + */ + +/** + * @brief DeInitializes the SDIO interface. + * @param None + * @retval None + */ +void SD_DeInit(void) +{ + SD_LowLevel_DeInit(); +} + +/** + * @brief Initializes the SD Card and put it into StandBy State (Ready for data + * transfer). + * @param None + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_Init(void) +{ + __IO SD_Error errorstatus = SD_OK; + + /* SDIO Peripheral Low Level Init */ + SD_LowLevel_Init(); + + SDIO_DeInit(); + + errorstatus = SD_PowerON(); + + if (errorstatus != SD_OK) + { + /*!< CMD Response TimeOut (wait for CMDSENT flag) */ + return(errorstatus); + } + + errorstatus = SD_InitializeCards(); + + if (errorstatus != SD_OK) + { + /*!< CMD Response TimeOut (wait for CMDSENT flag) */ + return(errorstatus); + } + + /*!< Configure the SDIO peripheral */ + /*!< SDIO_CK = SDIOCLK / (SDIO_TRANSFER_CLK_DIV + 2) */ + /*!< on STM32F2xx devices, SDIOCLK is fixed to 48MHz */ + SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV; + SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; + SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable; + SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; + SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b; + SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; + SDIO_Init(&SDIO_InitStructure); + + /*----------------- Read CSD/CID MSD registers ------------------*/ + errorstatus = SD_GetCardInfo(&SDCardInfo); + + if (errorstatus == SD_OK) + { + /*----------------- Select Card --------------------------------*/ + errorstatus = SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16)); + } + + if (errorstatus == SD_OK) + { + errorstatus = SD_EnableWideBusOperation(SDIO_BusWide_4b); + } + + return(errorstatus); +} + +/** + * @brief Gets the cuurent sd card data transfer status. + * @param None + * @retval SDTransferState: Data Transfer state. + * This value can be: + * - SD_TRANSFER_OK: No data transfer is acting + * - SD_TRANSFER_BUSY: Data transfer is acting + */ +SDTransferState SD_GetStatus(void) +{ + SDCardState cardstate = SD_CARD_TRANSFER; + + cardstate = SD_GetState(); + + if (cardstate == SD_CARD_TRANSFER) + { + return(SD_TRANSFER_OK); + } + else if(cardstate == SD_CARD_ERROR) + { + return (SD_TRANSFER_ERROR); + } + else + { + return(SD_TRANSFER_BUSY); + } +} + +/** + * @brief Returns the current card's state. + * @param None + * @retval SDCardState: SD Card Error or SD Card Current State. + */ +SDCardState SD_GetState(void) +{ + uint32_t resp1 = 0; + + if(SD_Detect()== SD_PRESENT) + { + if (SD_SendStatus(&resp1) != SD_OK) + { + return SD_CARD_ERROR; + } + else + { + return (SDCardState)((resp1 >> 9) & 0x0F); + } + } + else + { + return SD_CARD_ERROR; + } +} + +/** + * @brief Detect if SD card is correctly plugged in the memory slot. + * @param None + * @retval Return if SD is detected or not + */ +uint8_t SD_Detect(void) +{ + __IO uint8_t status = SD_PRESENT; + + /*!< Check GPIO to detect SD */ + if (GPIO_ReadInputDataBit(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != Bit_RESET) + { + status = SD_NOT_PRESENT; + } + return status; +} + +/** + * @brief Enquires cards about their operating voltage and configures + * clock controls. + * @param None + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_PowerON(void) +{ + __IO SD_Error errorstatus = SD_OK; + uint32_t response = 0, count = 0, validvoltage = 0; + uint32_t SDType = SD_STD_CAPACITY; + + /*!< Power ON Sequence -----------------------------------------------------*/ + /*!< Configure the SDIO peripheral */ + /*!< SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) */ + /*!< on STM32F2xx devices, SDIOCLK is fixed to 48MHz */ + /*!< SDIO_CK for initialization should not exceed 400 KHz */ + SDIO_InitStructure.SDIO_ClockDiv = SDIO_INIT_CLK_DIV; + SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; + SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable; + SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; + SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b; + SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; + SDIO_Init(&SDIO_InitStructure); + + /*!< Set Power State to ON */ + SDIO_SetPowerState(SDIO_PowerState_ON); + + /*!< Enable SDIO Clock */ + SDIO_ClockCmd(ENABLE); + + /*!< CMD0: GO_IDLE_STATE ---------------------------------------------------*/ + /*!< No CMD response required */ + SDIO_CmdInitStructure.SDIO_Argument = 0x0; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_GO_IDLE_STATE; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_No; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdError(); + + if (errorstatus != SD_OK) + { + /*!< CMD Response TimeOut (wait for CMDSENT flag) */ + return(errorstatus); + } + + /*!< CMD8: SEND_IF_COND ----------------------------------------------------*/ + /*!< Send CMD8 to verify SD card interface operating condition */ + /*!< Argument: - [31:12]: Reserved (shall be set to '0') + - [11:8]: Supply Voltage (VHS) 0x1 (Range: 2.7-3.6 V) + - [7:0]: Check Pattern (recommended 0xAA) */ + /*!< CMD Response: R7 */ + SDIO_CmdInitStructure.SDIO_Argument = SD_CHECK_PATTERN; + SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SEND_IF_COND; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp7Error(); + + if (errorstatus == SD_OK) + { + CardType = SDIO_STD_CAPACITY_SD_CARD_V2_0; /*!< SD Card 2.0 */ + SDType = SD_HIGH_CAPACITY; + } + else + { + /*!< CMD55 */ + SDIO_CmdInitStructure.SDIO_Argument = 0x00; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + errorstatus = CmdResp1Error(SD_CMD_APP_CMD); + } + /*!< CMD55 */ + SDIO_CmdInitStructure.SDIO_Argument = 0x00; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + errorstatus = CmdResp1Error(SD_CMD_APP_CMD); + + /*!< If errorstatus is Command TimeOut, it is a MMC card */ + /*!< If errorstatus is SD_OK it is a SD card: SD card 2.0 (voltage range mismatch) + or SD card 1.x */ + if (errorstatus == SD_OK) + { + /*!< SD CARD */ + /*!< Send ACMD41 SD_APP_OP_COND with Argument 0x80100000 */ + while ((!validvoltage) && (count < SD_MAX_VOLT_TRIAL)) + { + + /*!< SEND CMD55 APP_CMD with RCA as 0 */ + SDIO_CmdInitStructure.SDIO_Argument = 0x00; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_APP_CMD); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SDType; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_OP_COND; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp3Error(); + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + response = SDIO_GetResponse(SDIO_RESP1); + validvoltage = (((response >> 31) == 1) ? 1 : 0); + count++; + } + if (count >= SD_MAX_VOLT_TRIAL) + { + errorstatus = SD_INVALID_VOLTRANGE; + return(errorstatus); + } + + if (response &= SD_HIGH_CAPACITY) + { + CardType = SDIO_HIGH_CAPACITY_SD_CARD; + } + + }/*!< else MMC Card */ + + return(errorstatus); +} + +/** + * @brief Turns the SDIO output signals off. + * @param None + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_PowerOFF(void) +{ + SD_Error errorstatus = SD_OK; + + /*!< Set Power State to OFF */ + SDIO_SetPowerState(SDIO_PowerState_OFF); + + return(errorstatus); +} + +/** + * @brief Intialises all cards or single card as the case may be Card(s) come + * into standby state. + * @param None + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_InitializeCards(void) +{ + SD_Error errorstatus = SD_OK; + uint16_t rca = 0x01; + + if (SDIO_GetPowerState() == SDIO_PowerState_OFF) + { + errorstatus = SD_REQUEST_NOT_APPLICABLE; + return(errorstatus); + } + + if (SDIO_SECURE_DIGITAL_IO_CARD != CardType) + { + /*!< Send CMD2 ALL_SEND_CID */ + SDIO_CmdInitStructure.SDIO_Argument = 0x0; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_ALL_SEND_CID; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Long; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp2Error(); + + if (SD_OK != errorstatus) + { + return(errorstatus); + } + + CID_Tab[0] = SDIO_GetResponse(SDIO_RESP1); + CID_Tab[1] = SDIO_GetResponse(SDIO_RESP2); + CID_Tab[2] = SDIO_GetResponse(SDIO_RESP3); + CID_Tab[3] = SDIO_GetResponse(SDIO_RESP4); + } + if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_SECURE_DIGITAL_IO_COMBO_CARD == CardType) + || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) + { + /*!< Send CMD3 SET_REL_ADDR with argument 0 */ + /*!< SD Card publishes its RCA. */ + SDIO_CmdInitStructure.SDIO_Argument = 0x00; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_REL_ADDR; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp6Error(SD_CMD_SET_REL_ADDR, &rca); + + if (SD_OK != errorstatus) + { + return(errorstatus); + } + } + + if (SDIO_SECURE_DIGITAL_IO_CARD != CardType) + { + RCA = rca; + + /*!< Send CMD9 SEND_CSD with argument as card's RCA */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)(rca << 16); + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_CSD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Long; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp2Error(); + + if (SD_OK != errorstatus) + { + return(errorstatus); + } + + CSD_Tab[0] = SDIO_GetResponse(SDIO_RESP1); + CSD_Tab[1] = SDIO_GetResponse(SDIO_RESP2); + CSD_Tab[2] = SDIO_GetResponse(SDIO_RESP3); + CSD_Tab[3] = SDIO_GetResponse(SDIO_RESP4); + } + + errorstatus = SD_OK; /*!< All cards get intialized */ + + return(errorstatus); +} + +/** + * @brief Returns information about specific card. + * @param cardinfo: pointer to a SD_CardInfo structure that contains all SD card + * information. + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo) +{ + SD_Error errorstatus = SD_OK; + uint8_t tmp = 0; + + cardinfo->CardType = (uint8_t)CardType; + cardinfo->RCA = (uint16_t)RCA; + + /*!< Byte 0 */ + tmp = (uint8_t)((CSD_Tab[0] & 0xFF000000) >> 24); + cardinfo->SD_csd.CSDStruct = (tmp & 0xC0) >> 6; + cardinfo->SD_csd.SysSpecVersion = (tmp & 0x3C) >> 2; + cardinfo->SD_csd.Reserved1 = tmp & 0x03; + + /*!< Byte 1 */ + tmp = (uint8_t)((CSD_Tab[0] & 0x00FF0000) >> 16); + cardinfo->SD_csd.TAAC = tmp; + + /*!< Byte 2 */ + tmp = (uint8_t)((CSD_Tab[0] & 0x0000FF00) >> 8); + cardinfo->SD_csd.NSAC = tmp; + + /*!< Byte 3 */ + tmp = (uint8_t)(CSD_Tab[0] & 0x000000FF); + cardinfo->SD_csd.MaxBusClkFrec = tmp; + + /*!< Byte 4 */ + tmp = (uint8_t)((CSD_Tab[1] & 0xFF000000) >> 24); + cardinfo->SD_csd.CardComdClasses = tmp << 4; + + /*!< Byte 5 */ + tmp = (uint8_t)((CSD_Tab[1] & 0x00FF0000) >> 16); + cardinfo->SD_csd.CardComdClasses |= (tmp & 0xF0) >> 4; + cardinfo->SD_csd.RdBlockLen = tmp & 0x0F; + + /*!< Byte 6 */ + tmp = (uint8_t)((CSD_Tab[1] & 0x0000FF00) >> 8); + cardinfo->SD_csd.PartBlockRead = (tmp & 0x80) >> 7; + cardinfo->SD_csd.WrBlockMisalign = (tmp & 0x40) >> 6; + cardinfo->SD_csd.RdBlockMisalign = (tmp & 0x20) >> 5; + cardinfo->SD_csd.DSRImpl = (tmp & 0x10) >> 4; + cardinfo->SD_csd.Reserved2 = 0; /*!< Reserved */ + + if ((CardType == SDIO_STD_CAPACITY_SD_CARD_V1_1) || (CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0)) + { + cardinfo->SD_csd.DeviceSize = (tmp & 0x03) << 10; + + /*!< Byte 7 */ + tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF); + cardinfo->SD_csd.DeviceSize |= (tmp) << 2; + + /*!< Byte 8 */ + tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24); + cardinfo->SD_csd.DeviceSize |= (tmp & 0xC0) >> 6; + + cardinfo->SD_csd.MaxRdCurrentVDDMin = (tmp & 0x38) >> 3; + cardinfo->SD_csd.MaxRdCurrentVDDMax = (tmp & 0x07); + + /*!< Byte 9 */ + tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16); + cardinfo->SD_csd.MaxWrCurrentVDDMin = (tmp & 0xE0) >> 5; + cardinfo->SD_csd.MaxWrCurrentVDDMax = (tmp & 0x1C) >> 2; + cardinfo->SD_csd.DeviceSizeMul = (tmp & 0x03) << 1; + /*!< Byte 10 */ + tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8); + cardinfo->SD_csd.DeviceSizeMul |= (tmp & 0x80) >> 7; + + cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) ; + cardinfo->CardCapacity *= (1 << (cardinfo->SD_csd.DeviceSizeMul + 2)); + cardinfo->CardBlockSize = 1 << (cardinfo->SD_csd.RdBlockLen); + cardinfo->CardCapacity *= cardinfo->CardBlockSize; + } + else if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) + { + /*!< Byte 7 */ + tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF); + cardinfo->SD_csd.DeviceSize = (tmp & 0x3F) << 16; + + /*!< Byte 8 */ + tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24); + + cardinfo->SD_csd.DeviceSize |= (tmp << 8); + + /*!< Byte 9 */ + tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16); + + cardinfo->SD_csd.DeviceSize |= (tmp); + + /*!< Byte 10 */ + tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8); + + cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024; + cardinfo->CardBlockSize = 512; + } + + + cardinfo->SD_csd.EraseGrSize = (tmp & 0x40) >> 6; + cardinfo->SD_csd.EraseGrMul = (tmp & 0x3F) << 1; + + /*!< Byte 11 */ + tmp = (uint8_t)(CSD_Tab[2] & 0x000000FF); + cardinfo->SD_csd.EraseGrMul |= (tmp & 0x80) >> 7; + cardinfo->SD_csd.WrProtectGrSize = (tmp & 0x7F); + + /*!< Byte 12 */ + tmp = (uint8_t)((CSD_Tab[3] & 0xFF000000) >> 24); + cardinfo->SD_csd.WrProtectGrEnable = (tmp & 0x80) >> 7; + cardinfo->SD_csd.ManDeflECC = (tmp & 0x60) >> 5; + cardinfo->SD_csd.WrSpeedFact = (tmp & 0x1C) >> 2; + cardinfo->SD_csd.MaxWrBlockLen = (tmp & 0x03) << 2; + + /*!< Byte 13 */ + tmp = (uint8_t)((CSD_Tab[3] & 0x00FF0000) >> 16); + cardinfo->SD_csd.MaxWrBlockLen |= (tmp & 0xC0) >> 6; + cardinfo->SD_csd.WriteBlockPaPartial = (tmp & 0x20) >> 5; + cardinfo->SD_csd.Reserved3 = 0; + cardinfo->SD_csd.ContentProtectAppli = (tmp & 0x01); + + /*!< Byte 14 */ + tmp = (uint8_t)((CSD_Tab[3] & 0x0000FF00) >> 8); + cardinfo->SD_csd.FileFormatGrouop = (tmp & 0x80) >> 7; + cardinfo->SD_csd.CopyFlag = (tmp & 0x40) >> 6; + cardinfo->SD_csd.PermWrProtect = (tmp & 0x20) >> 5; + cardinfo->SD_csd.TempWrProtect = (tmp & 0x10) >> 4; + cardinfo->SD_csd.FileFormat = (tmp & 0x0C) >> 2; + cardinfo->SD_csd.ECC = (tmp & 0x03); + + /*!< Byte 15 */ + tmp = (uint8_t)(CSD_Tab[3] & 0x000000FF); + cardinfo->SD_csd.CSD_CRC = (tmp & 0xFE) >> 1; + cardinfo->SD_csd.Reserved4 = 1; + + + /*!< Byte 0 */ + tmp = (uint8_t)((CID_Tab[0] & 0xFF000000) >> 24); + cardinfo->SD_cid.ManufacturerID = tmp; + + /*!< Byte 1 */ + tmp = (uint8_t)((CID_Tab[0] & 0x00FF0000) >> 16); + cardinfo->SD_cid.OEM_AppliID = tmp << 8; + + /*!< Byte 2 */ + tmp = (uint8_t)((CID_Tab[0] & 0x000000FF00) >> 8); + cardinfo->SD_cid.OEM_AppliID |= tmp; + + /*!< Byte 3 */ + tmp = (uint8_t)(CID_Tab[0] & 0x000000FF); + cardinfo->SD_cid.ProdName1 = tmp << 24; + + /*!< Byte 4 */ + tmp = (uint8_t)((CID_Tab[1] & 0xFF000000) >> 24); + cardinfo->SD_cid.ProdName1 |= tmp << 16; + + /*!< Byte 5 */ + tmp = (uint8_t)((CID_Tab[1] & 0x00FF0000) >> 16); + cardinfo->SD_cid.ProdName1 |= tmp << 8; + + /*!< Byte 6 */ + tmp = (uint8_t)((CID_Tab[1] & 0x0000FF00) >> 8); + cardinfo->SD_cid.ProdName1 |= tmp; + + /*!< Byte 7 */ + tmp = (uint8_t)(CID_Tab[1] & 0x000000FF); + cardinfo->SD_cid.ProdName2 = tmp; + + /*!< Byte 8 */ + tmp = (uint8_t)((CID_Tab[2] & 0xFF000000) >> 24); + cardinfo->SD_cid.ProdRev = tmp; + + /*!< Byte 9 */ + tmp = (uint8_t)((CID_Tab[2] & 0x00FF0000) >> 16); + cardinfo->SD_cid.ProdSN = tmp << 24; + + /*!< Byte 10 */ + tmp = (uint8_t)((CID_Tab[2] & 0x0000FF00) >> 8); + cardinfo->SD_cid.ProdSN |= tmp << 16; + + /*!< Byte 11 */ + tmp = (uint8_t)(CID_Tab[2] & 0x000000FF); + cardinfo->SD_cid.ProdSN |= tmp << 8; + + /*!< Byte 12 */ + tmp = (uint8_t)((CID_Tab[3] & 0xFF000000) >> 24); + cardinfo->SD_cid.ProdSN |= tmp; + + /*!< Byte 13 */ + tmp = (uint8_t)((CID_Tab[3] & 0x00FF0000) >> 16); + cardinfo->SD_cid.Reserved1 |= (tmp & 0xF0) >> 4; + cardinfo->SD_cid.ManufactDate = (tmp & 0x0F) << 8; + + /*!< Byte 14 */ + tmp = (uint8_t)((CID_Tab[3] & 0x0000FF00) >> 8); + cardinfo->SD_cid.ManufactDate |= tmp; + + /*!< Byte 15 */ + tmp = (uint8_t)(CID_Tab[3] & 0x000000FF); + cardinfo->SD_cid.CID_CRC = (tmp & 0xFE) >> 1; + cardinfo->SD_cid.Reserved2 = 1; + + return(errorstatus); +} + +/** + * @brief Enables wide bus opeartion for the requeseted card if supported by + * card. + * @param WideMode: Specifies the SD card wide bus mode. + * This parameter can be one of the following values: + * @arg SDIO_BusWide_8b: 8-bit data transfer (Only for MMC) + * @arg SDIO_BusWide_4b: 4-bit data transfer + * @arg SDIO_BusWide_1b: 1-bit data transfer + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_GetCardStatus(SD_CardStatus *cardstatus) +{ + SD_Error errorstatus = SD_OK; + uint8_t tmp = 0; + + errorstatus = SD_SendSDStatus((uint32_t *)SDSTATUS_Tab); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + /*!< Byte 0 */ + tmp = (uint8_t)((SDSTATUS_Tab[0] & 0xC0) >> 6); + cardstatus->DAT_BUS_WIDTH = tmp; + + /*!< Byte 0 */ + tmp = (uint8_t)((SDSTATUS_Tab[0] & 0x20) >> 5); + cardstatus->SECURED_MODE = tmp; + + /*!< Byte 2 */ + tmp = (uint8_t)((SDSTATUS_Tab[2] & 0xFF)); + cardstatus->SD_CARD_TYPE = tmp << 8; + + /*!< Byte 3 */ + tmp = (uint8_t)((SDSTATUS_Tab[3] & 0xFF)); + cardstatus->SD_CARD_TYPE |= tmp; + + /*!< Byte 4 */ + tmp = (uint8_t)(SDSTATUS_Tab[4] & 0xFF); + cardstatus->SIZE_OF_PROTECTED_AREA = tmp << 24; + + /*!< Byte 5 */ + tmp = (uint8_t)(SDSTATUS_Tab[5] & 0xFF); + cardstatus->SIZE_OF_PROTECTED_AREA |= tmp << 16; + + /*!< Byte 6 */ + tmp = (uint8_t)(SDSTATUS_Tab[6] & 0xFF); + cardstatus->SIZE_OF_PROTECTED_AREA |= tmp << 8; + + /*!< Byte 7 */ + tmp = (uint8_t)(SDSTATUS_Tab[7] & 0xFF); + cardstatus->SIZE_OF_PROTECTED_AREA |= tmp; + + /*!< Byte 8 */ + tmp = (uint8_t)((SDSTATUS_Tab[8] & 0xFF)); + cardstatus->SPEED_CLASS = tmp; + + /*!< Byte 9 */ + tmp = (uint8_t)((SDSTATUS_Tab[9] & 0xFF)); + cardstatus->PERFORMANCE_MOVE = tmp; + + /*!< Byte 10 */ + tmp = (uint8_t)((SDSTATUS_Tab[10] & 0xF0) >> 4); + cardstatus->AU_SIZE = tmp; + + /*!< Byte 11 */ + tmp = (uint8_t)(SDSTATUS_Tab[11] & 0xFF); + cardstatus->ERASE_SIZE = tmp << 8; + + /*!< Byte 12 */ + tmp = (uint8_t)(SDSTATUS_Tab[12] & 0xFF); + cardstatus->ERASE_SIZE |= tmp; + + /*!< Byte 13 */ + tmp = (uint8_t)((SDSTATUS_Tab[13] & 0xFC) >> 2); + cardstatus->ERASE_TIMEOUT = tmp; + + /*!< Byte 13 */ + tmp = (uint8_t)((SDSTATUS_Tab[13] & 0x3)); + cardstatus->ERASE_OFFSET = tmp; + + return(errorstatus); +} + +/** + * @brief Enables wide bus opeartion for the requeseted card if supported by + * card. + * @param WideMode: Specifies the SD card wide bus mode. + * This parameter can be one of the following values: + * @arg SDIO_BusWide_8b: 8-bit data transfer (Only for MMC) + * @arg SDIO_BusWide_4b: 4-bit data transfer + * @arg SDIO_BusWide_1b: 1-bit data transfer + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_EnableWideBusOperation(uint32_t WideMode) +{ + SD_Error errorstatus = SD_OK; + + /*!< MMC Card doesn't support this feature */ + if (SDIO_MULTIMEDIA_CARD == CardType) + { + errorstatus = SD_UNSUPPORTED_FEATURE; + return(errorstatus); + } + else if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) + { + if (SDIO_BusWide_8b == WideMode) + { + errorstatus = SD_UNSUPPORTED_FEATURE; + return(errorstatus); + } + else if (SDIO_BusWide_4b == WideMode) + { + errorstatus = SDEnWideBus(ENABLE); + + if (SD_OK == errorstatus) + { + /*!< Configure the SDIO peripheral */ + SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV; + SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; + SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable; + SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; + SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_4b; + SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; + SDIO_Init(&SDIO_InitStructure); + } + } + else + { + errorstatus = SDEnWideBus(DISABLE); + + if (SD_OK == errorstatus) + { + /*!< Configure the SDIO peripheral */ + SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV; + SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; + SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable; + SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; + SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b; + SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; + SDIO_Init(&SDIO_InitStructure); + } + } + } + + return(errorstatus); +} + +/** + * @brief Selects od Deselects the corresponding card. + * @param addr: Address of the Card to be selected. + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_SelectDeselect(uint32_t addr) +{ + SD_Error errorstatus = SD_OK; + + /*!< Send CMD7 SDIO_SEL_DESEL_CARD */ + SDIO_CmdInitStructure.SDIO_Argument = addr; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEL_DESEL_CARD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SEL_DESEL_CARD); + + return(errorstatus); +} + +/** + * @brief Allows to read one block from a specified address in a card. The Data + * transfer can be managed by DMA mode or Polling mode. + * @note This operation should be followed by two functions to check if the + * DMA Controller and SD Card status. + * - SD_ReadWaitOperation(): this function insure that the DMA + * controller has finished all data transfer. + * - SD_GetStatus(): to check that the SD Card has finished the + * data transfer and it is ready for data. + * @param readbuff: pointer to the buffer that will contain the received data + * @param ReadAddr: Address from where data are to be read. + * @param BlockSize: the SD card Data block size. The Block size should be 512. + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize) +{ + SD_Error errorstatus = SD_OK; +#if defined (SD_POLLING_MODE) + uint32_t count = 0, *tempbuff = (uint32_t *)readbuff; +#endif + + TransferError = SD_OK; + TransferEnd = 0; + StopCondition = 0; + + SDIO->DCTRL = 0x0; + + + if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) + { + BlockSize = 512; + ReadAddr /= 512; + } + + /* Set Block Size for Card */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); + + if (SD_OK != errorstatus) + { + return(errorstatus); + } + + SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; + SDIO_DataInitStructure.SDIO_DataLength = BlockSize; + SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; + SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; + SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; + SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; + SDIO_DataConfig(&SDIO_DataInitStructure); + + /*!< Send CMD17 READ_SINGLE_BLOCK */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)ReadAddr; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_READ_SINGLE_BLOCK; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_READ_SINGLE_BLOCK); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + +#if defined (SD_POLLING_MODE) + /*!< In case of single block transfer, no need of stop transfer at all.*/ + /*!< Polling mode */ + while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))) + { + if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET) + { + for (count = 0; count < 8; count++) + { + *(tempbuff + count) = SDIO_ReadData(); + } + tempbuff += 8; + } + } + + if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); + errorstatus = SD_DATA_TIMEOUT; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); + errorstatus = SD_DATA_CRC_FAIL; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_RXOVERR); + errorstatus = SD_RX_OVERRUN; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_STBITERR); + errorstatus = SD_START_BIT_ERR; + return(errorstatus); + } + count = SD_DATATIMEOUT; + while ((SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET) && (count > 0)) + { + *tempbuff = SDIO_ReadData(); + tempbuff++; + count--; + } + + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + +#elif defined (SD_DMA_MODE) + SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_STBITERR, ENABLE); + SDIO_DMACmd(ENABLE); + SD_LowLevel_DMA_RxConfig((uint32_t *)readbuff, BlockSize); +#endif + + return(errorstatus); +} + +/** + * @brief Allows to read blocks from a specified address in a card. The Data + * transfer can be managed by DMA mode or Polling mode. + * @note This operation should be followed by two functions to check if the + * DMA Controller and SD Card status. + * - SD_ReadWaitOperation(): this function insure that the DMA + * controller has finished all data transfer. + * - SD_GetStatus(): to check that the SD Card has finished the + * data transfer and it is ready for data. + * @param readbuff: pointer to the buffer that will contain the received data. + * @param ReadAddr: Address from where data are to be read. + * @param BlockSize: the SD card Data block size. The Block size should be 512. + * @param NumberOfBlocks: number of blocks to be read. + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks) +{ + SD_Error errorstatus = SD_OK; + TransferError = SD_OK; + TransferEnd = 0; + StopCondition = 1; + + SDIO->DCTRL = 0x0; + + if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) + { + BlockSize = 512; + ReadAddr /= 512; + } + + /*!< Set Block Size for Card */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); + + if (SD_OK != errorstatus) + { + return(errorstatus); + } + + SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; + SDIO_DataInitStructure.SDIO_DataLength = NumberOfBlocks * BlockSize; + SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; + SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; + SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; + SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; + SDIO_DataConfig(&SDIO_DataInitStructure); + + /*!< Send CMD18 READ_MULT_BLOCK with argument data address */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)ReadAddr; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_READ_MULT_BLOCK; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_READ_MULT_BLOCK); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_STBITERR, ENABLE); + SDIO_DMACmd(ENABLE); + SD_LowLevel_DMA_RxConfig((uint32_t *)readbuff, (NumberOfBlocks * BlockSize)); + + return(errorstatus); +} + +/** + * @brief This function waits until the SDIO DMA data transfer is finished. + * This function should be called after SDIO_ReadMultiBlocks() function + * to insure that all data sent by the card are already transferred by + * the DMA controller. + * @param None. + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_WaitReadOperation(void) +{ + SD_Error errorstatus = SD_OK; + uint32_t timeout; + + timeout = SD_DATATIMEOUT; + + while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0)) + { + timeout--; + } + + DMAEndOfTransfer = 0x00; + + timeout = SD_DATATIMEOUT; + + while(((SDIO->STA & SDIO_FLAG_RXACT)) && (timeout > 0)) + { + timeout--; + } + + if (StopCondition == 1) + { + errorstatus = SD_StopTransfer(); + StopCondition = 0; + } + + if ((timeout == 0) && (errorstatus == SD_OK)) + { + errorstatus = SD_DATA_TIMEOUT; + } + + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + + if (TransferError != SD_OK) + { + return(TransferError); + } + else + { + return(errorstatus); + } +} + +/** + * @brief Allows to write one block starting from a specified address in a card. + * The Data transfer can be managed by DMA mode or Polling mode. + * @note This operation should be followed by two functions to check if the + * DMA Controller and SD Card status. + * - SD_ReadWaitOperation(): this function insure that the DMA + * controller has finished all data transfer. + * - SD_GetStatus(): to check that the SD Card has finished the + * data transfer and it is ready for data. + * @param writebuff: pointer to the buffer that contain the data to be transferred. + * @param WriteAddr: Address from where data are to be read. + * @param BlockSize: the SD card Data block size. The Block size should be 512. + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize) +{ + SD_Error errorstatus = SD_OK; + +#if defined (SD_POLLING_MODE) + uint32_t bytestransferred = 0, count = 0, restwords = 0; + uint32_t *tempbuff = (uint32_t *)writebuff; +#endif + + TransferError = SD_OK; + TransferEnd = 0; + StopCondition = 0; + + SDIO->DCTRL = 0x0; + + + if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) + { + BlockSize = 512; + WriteAddr /= 512; + } + + /* Set Block Size for Card */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); + + if (SD_OK != errorstatus) + { + return(errorstatus); + } + + /*!< Send CMD24 WRITE_SINGLE_BLOCK */ + SDIO_CmdInitStructure.SDIO_Argument = WriteAddr; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_WRITE_SINGLE_BLOCK; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_WRITE_SINGLE_BLOCK); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; + SDIO_DataInitStructure.SDIO_DataLength = BlockSize; + SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; + SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToCard; + SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; + SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; + SDIO_DataConfig(&SDIO_DataInitStructure); + + /*!< In case of single data block transfer no need of stop command at all */ +#if defined (SD_POLLING_MODE) + while (!(SDIO->STA & (SDIO_FLAG_DBCKEND | SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_STBITERR))) + { + if (SDIO_GetFlagStatus(SDIO_FLAG_TXFIFOHE) != RESET) + { + if ((512 - bytestransferred) < 32) + { + restwords = ((512 - bytestransferred) % 4 == 0) ? ((512 - bytestransferred) / 4) : (( 512 - bytestransferred) / 4 + 1); + for (count = 0; count < restwords; count++, tempbuff++, bytestransferred += 4) + { + SDIO_WriteData(*tempbuff); + } + } + else + { + for (count = 0; count < 8; count++) + { + SDIO_WriteData(*(tempbuff + count)); + } + tempbuff += 8; + bytestransferred += 32; + } + } + } + if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); + errorstatus = SD_DATA_TIMEOUT; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); + errorstatus = SD_DATA_CRC_FAIL; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_TXUNDERR) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_TXUNDERR); + errorstatus = SD_TX_UNDERRUN; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_STBITERR); + errorstatus = SD_START_BIT_ERR; + return(errorstatus); + } +#elif defined (SD_DMA_MODE) + SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_STBITERR, ENABLE); + SD_LowLevel_DMA_TxConfig((uint32_t *)writebuff, BlockSize); + SDIO_DMACmd(ENABLE); +#endif + + return(errorstatus); +} + +/** + * @brief Allows to write blocks starting from a specified address in a card. + * The Data transfer can be managed by DMA mode only. + * @note This operation should be followed by two functions to check if the + * DMA Controller and SD Card status. + * - SD_ReadWaitOperation(): this function insure that the DMA + * controller has finished all data transfer. + * - SD_GetStatus(): to check that the SD Card has finished the + * data transfer and it is ready for data. + * @param WriteAddr: Address from where data are to be read. + * @param writebuff: pointer to the buffer that contain the data to be transferred. + * @param BlockSize: the SD card Data block size. The Block size should be 512. + * @param NumberOfBlocks: number of blocks to be written. + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks) +{ + SD_Error errorstatus = SD_OK; + + TransferError = SD_OK; + TransferEnd = 0; + StopCondition = 1; + + SDIO->DCTRL = 0x0; + + if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) + { + BlockSize = 512; + WriteAddr /= 512; + } + + /* Set Block Size for Card */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); + + if (SD_OK != errorstatus) + { + return(errorstatus); + } + + /*!< To improve performance */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) (RCA << 16); + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + + errorstatus = CmdResp1Error(SD_CMD_APP_CMD); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + /*!< To improve performance */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)NumberOfBlocks; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCK_COUNT; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SET_BLOCK_COUNT); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + + /*!< Send CMD25 WRITE_MULT_BLOCK with argument data address */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)WriteAddr; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_WRITE_MULT_BLOCK; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_WRITE_MULT_BLOCK); + + if (SD_OK != errorstatus) + { + return(errorstatus); + } + + SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; + SDIO_DataInitStructure.SDIO_DataLength = NumberOfBlocks * BlockSize; + SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; + SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToCard; + SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; + SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; + SDIO_DataConfig(&SDIO_DataInitStructure); + + SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_STBITERR, ENABLE); + SDIO_DMACmd(ENABLE); + SD_LowLevel_DMA_TxConfig((uint32_t *)writebuff, (NumberOfBlocks * BlockSize)); + + return(errorstatus); +} + +/** + * @brief This function waits until the SDIO DMA data transfer is finished. + * This function should be called after SDIO_WriteBlock() and + * SDIO_WriteMultiBlocks() function to insure that all data sent by the + * card are already transferred by the DMA controller. + * @param None. + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_WaitWriteOperation(void) +{ + SD_Error errorstatus = SD_OK; + uint32_t timeout; + + timeout = SD_DATATIMEOUT; + + while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0)) + { + timeout--; + } + + DMAEndOfTransfer = 0x00; + + timeout = SD_DATATIMEOUT; + + while(((SDIO->STA & SDIO_FLAG_TXACT)) && (timeout > 0)) + { + timeout--; + } + + if (StopCondition == 1) + { + errorstatus = SD_StopTransfer(); + StopCondition = 0; + } + + if ((timeout == 0) && (errorstatus == SD_OK)) + { + errorstatus = SD_DATA_TIMEOUT; + } + + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + + if (TransferError != SD_OK) + { + return(TransferError); + } + else + { + return(errorstatus); + } +} + +/** + * @brief Gets the cuurent data transfer state. + * @param None + * @retval SDTransferState: Data Transfer state. + * This value can be: + * - SD_TRANSFER_OK: No data transfer is acting + * - SD_TRANSFER_BUSY: Data transfer is acting + */ +SDTransferState SD_GetTransferState(void) +{ + if (SDIO->STA & (SDIO_FLAG_TXACT | SDIO_FLAG_RXACT)) + { + return(SD_TRANSFER_BUSY); + } + else + { + return(SD_TRANSFER_OK); + } +} + +/** + * @brief Aborts an ongoing data transfer. + * @param None + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_StopTransfer(void) +{ + SD_Error errorstatus = SD_OK; + + /*!< Send CMD12 STOP_TRANSMISSION */ + SDIO_CmdInitStructure.SDIO_Argument = 0x0; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_STOP_TRANSMISSION; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_STOP_TRANSMISSION); + + return(errorstatus); +} + +/** + * @brief Allows to erase memory area specified for the given card. + * @param startaddr: the start address. + * @param endaddr: the end address. + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_Erase(uint32_t startaddr, uint32_t endaddr) +{ + SD_Error errorstatus = SD_OK; + uint32_t delay = 0; + __IO uint32_t maxdelay = 0; + uint8_t cardstate = 0; + + /*!< Check if the card coomnd class supports erase command */ + if (((CSD_Tab[1] >> 20) & SD_CCCC_ERASE) == 0) + { + errorstatus = SD_REQUEST_NOT_APPLICABLE; + return(errorstatus); + } + + maxdelay = 120000 / ((SDIO->CLKCR & 0xFF) + 2); + + if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) + { + errorstatus = SD_LOCK_UNLOCK_FAILED; + return(errorstatus); + } + + if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) + { + startaddr /= 512; + endaddr /= 512; + } + + /*!< According to sd-card spec 1.0 ERASE_GROUP_START (CMD32) and erase_group_end(CMD33) */ + if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) + { + /*!< Send CMD32 SD_ERASE_GRP_START with argument as addr */ + SDIO_CmdInitStructure.SDIO_Argument = startaddr; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_START; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_START); + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + /*!< Send CMD33 SD_ERASE_GRP_END with argument as addr */ + SDIO_CmdInitStructure.SDIO_Argument = endaddr; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_END; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_END); + if (errorstatus != SD_OK) + { + return(errorstatus); + } + } + + /*!< Send CMD38 ERASE */ + SDIO_CmdInitStructure.SDIO_Argument = 0; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_ERASE; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_ERASE); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + for (delay = 0; delay < maxdelay; delay++) + {} + + /*!< Wait till the card is in programming state */ + errorstatus = IsCardProgramming(&cardstate); + delay = SD_DATATIMEOUT; + while ((delay > 0) && (errorstatus == SD_OK) && ((SD_CARD_PROGRAMMING == cardstate) || (SD_CARD_RECEIVING == cardstate))) + { + errorstatus = IsCardProgramming(&cardstate); + delay--; + } + + return(errorstatus); +} + +/** + * @brief Returns the current card's status. + * @param pcardstatus: pointer to the buffer that will contain the SD card + * status (Card Status register). + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_SendStatus(uint32_t *pcardstatus) +{ + SD_Error errorstatus = SD_OK; + + if (pcardstatus == NULL) + { + errorstatus = SD_INVALID_PARAMETER; + return(errorstatus); + } + + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_STATUS; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SEND_STATUS); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + *pcardstatus = SDIO_GetResponse(SDIO_RESP1); + + return(errorstatus); +} + +/** + * @brief Returns the current SD card's status. + * @param psdstatus: pointer to the buffer that will contain the SD card status + * (SD Status register). + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_SendSDStatus(uint32_t *psdstatus) +{ + SD_Error errorstatus = SD_OK; + uint32_t count = 0; + + if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) + { + errorstatus = SD_LOCK_UNLOCK_FAILED; + return(errorstatus); + } + + /*!< Set block size for card if it is not equal to current block size for card. */ + SDIO_CmdInitStructure.SDIO_Argument = 64; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + /*!< CMD55 */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + errorstatus = CmdResp1Error(SD_CMD_APP_CMD); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; + SDIO_DataInitStructure.SDIO_DataLength = 64; + SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_64b; + SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; + SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; + SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; + SDIO_DataConfig(&SDIO_DataInitStructure); + + /*!< Send ACMD13 SD_APP_STAUS with argument as card's RCA.*/ + SDIO_CmdInitStructure.SDIO_Argument = 0; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_STAUS; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + errorstatus = CmdResp1Error(SD_CMD_SD_APP_STAUS); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))) + { + if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET) + { + for (count = 0; count < 8; count++) + { + *(psdstatus + count) = SDIO_ReadData(); + } + psdstatus += 8; + } + } + + if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); + errorstatus = SD_DATA_TIMEOUT; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); + errorstatus = SD_DATA_CRC_FAIL; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_RXOVERR); + errorstatus = SD_RX_OVERRUN; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_STBITERR); + errorstatus = SD_START_BIT_ERR; + return(errorstatus); + } + + count = SD_DATATIMEOUT; + while ((SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET) && (count > 0)) + { + *psdstatus = SDIO_ReadData(); + psdstatus++; + count--; + } + /*!< Clear all the static status flags*/ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + + return(errorstatus); +} + +/** + * @brief Allows to process all the interrupts that are high. + * @param None + * @retval SD_Error: SD Card Error code. + */ +SD_Error SD_ProcessIRQSrc(void) +{ + if (SDIO_GetITStatus(SDIO_IT_DATAEND) != RESET) + { + TransferError = SD_OK; + SDIO_ClearITPendingBit(SDIO_IT_DATAEND); + TransferEnd = 1; + } + else if (SDIO_GetITStatus(SDIO_IT_DCRCFAIL) != RESET) + { + SDIO_ClearITPendingBit(SDIO_IT_DCRCFAIL); + TransferError = SD_DATA_CRC_FAIL; + } + else if (SDIO_GetITStatus(SDIO_IT_DTIMEOUT) != RESET) + { + SDIO_ClearITPendingBit(SDIO_IT_DTIMEOUT); + TransferError = SD_DATA_TIMEOUT; + } + else if (SDIO_GetITStatus(SDIO_IT_RXOVERR) != RESET) + { + SDIO_ClearITPendingBit(SDIO_IT_RXOVERR); + TransferError = SD_RX_OVERRUN; + } + else if (SDIO_GetITStatus(SDIO_IT_TXUNDERR) != RESET) + { + SDIO_ClearITPendingBit(SDIO_IT_TXUNDERR); + TransferError = SD_TX_UNDERRUN; + } + else if (SDIO_GetITStatus(SDIO_IT_STBITERR) != RESET) + { + SDIO_ClearITPendingBit(SDIO_IT_STBITERR); + TransferError = SD_START_BIT_ERR; + } + + SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | + SDIO_IT_TXFIFOHE | SDIO_IT_RXFIFOHF | SDIO_IT_TXUNDERR | + SDIO_IT_RXOVERR | SDIO_IT_STBITERR, DISABLE); + return(TransferError); +} + +/** + * @brief This function waits until the SDIO DMA data transfer is finished. + * @param None. + * @retval None. + */ +void SD_ProcessDMAIRQ(void) +{ + if(DMA2->LISR & SD_SDIO_DMA_FLAG_TCIF) + { + DMAEndOfTransfer = 0x01; + DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_TCIF|SD_SDIO_DMA_FLAG_FEIF); + } +} + +/** + * @brief Checks for error conditions for CMD0. + * @param None + * @retval SD_Error: SD Card Error code. + */ +static SD_Error CmdError(void) +{ + SD_Error errorstatus = SD_OK; + uint32_t timeout; + + timeout = SDIO_CMD0TIMEOUT; /*!< 10000 */ + + while ((timeout > 0) && (SDIO_GetFlagStatus(SDIO_FLAG_CMDSENT) == RESET)) + { + timeout--; + } + + if (timeout == 0) + { + errorstatus = SD_CMD_RSP_TIMEOUT; + return(errorstatus); + } + + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + + return(errorstatus); +} + +/** + * @brief Checks for error conditions for R7 response. + * @param None + * @retval SD_Error: SD Card Error code. + */ +static SD_Error CmdResp7Error(void) +{ + SD_Error errorstatus = SD_OK; + uint32_t status; + uint32_t timeout = SDIO_CMD0TIMEOUT; + + status = SDIO->STA; + + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)) && (timeout > 0)) + { + timeout--; + status = SDIO->STA; + } + + if ((timeout == 0) || (status & SDIO_FLAG_CTIMEOUT)) + { + /*!< Card is not V2.0 complient or card does not support the set voltage range */ + errorstatus = SD_CMD_RSP_TIMEOUT; + SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); + return(errorstatus); + } + + if (status & SDIO_FLAG_CMDREND) + { + /*!< Card is SD V2.0 compliant */ + errorstatus = SD_OK; + SDIO_ClearFlag(SDIO_FLAG_CMDREND); + return(errorstatus); + } + return(errorstatus); +} + +/** + * @brief Checks for error conditions for R1 response. + * @param cmd: The sent command index. + * @retval SD_Error: SD Card Error code. + */ +static SD_Error CmdResp1Error(uint8_t cmd) +{ + SD_Error errorstatus = SD_OK; + uint32_t status; + uint32_t response_r1; + + status = SDIO->STA; + + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) + { + status = SDIO->STA; + } + + if (status & SDIO_FLAG_CTIMEOUT) + { + errorstatus = SD_CMD_RSP_TIMEOUT; + SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); + return(errorstatus); + } + else if (status & SDIO_FLAG_CCRCFAIL) + { + errorstatus = SD_CMD_CRC_FAIL; + SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); + return(errorstatus); + } + + /*!< Check response received is of desired command */ + if (SDIO_GetCommandResponse() != cmd) + { + errorstatus = SD_ILLEGAL_CMD; + return(errorstatus); + } + + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + + /*!< We have received response, retrieve it for analysis */ + response_r1 = SDIO_GetResponse(SDIO_RESP1); + + if ((response_r1 & SD_OCR_ERRORBITS) == SD_ALLZERO) + { + return(errorstatus); + } + + if (response_r1 & SD_OCR_ADDR_OUT_OF_RANGE) + { + return(SD_ADDR_OUT_OF_RANGE); + } + + if (response_r1 & SD_OCR_ADDR_MISALIGNED) + { + return(SD_ADDR_MISALIGNED); + } + + if (response_r1 & SD_OCR_BLOCK_LEN_ERR) + { + return(SD_BLOCK_LEN_ERR); + } + + if (response_r1 & SD_OCR_ERASE_SEQ_ERR) + { + return(SD_ERASE_SEQ_ERR); + } + + if (response_r1 & SD_OCR_BAD_ERASE_PARAM) + { + return(SD_BAD_ERASE_PARAM); + } + + if (response_r1 & SD_OCR_WRITE_PROT_VIOLATION) + { + return(SD_WRITE_PROT_VIOLATION); + } + + if (response_r1 & SD_OCR_LOCK_UNLOCK_FAILED) + { + return(SD_LOCK_UNLOCK_FAILED); + } + + if (response_r1 & SD_OCR_COM_CRC_FAILED) + { + return(SD_COM_CRC_FAILED); + } + + if (response_r1 & SD_OCR_ILLEGAL_CMD) + { + return(SD_ILLEGAL_CMD); + } + + if (response_r1 & SD_OCR_CARD_ECC_FAILED) + { + return(SD_CARD_ECC_FAILED); + } + + if (response_r1 & SD_OCR_CC_ERROR) + { + return(SD_CC_ERROR); + } + + if (response_r1 & SD_OCR_GENERAL_UNKNOWN_ERROR) + { + return(SD_GENERAL_UNKNOWN_ERROR); + } + + if (response_r1 & SD_OCR_STREAM_READ_UNDERRUN) + { + return(SD_STREAM_READ_UNDERRUN); + } + + if (response_r1 & SD_OCR_STREAM_WRITE_OVERRUN) + { + return(SD_STREAM_WRITE_OVERRUN); + } + + if (response_r1 & SD_OCR_CID_CSD_OVERWRIETE) + { + return(SD_CID_CSD_OVERWRITE); + } + + if (response_r1 & SD_OCR_WP_ERASE_SKIP) + { + return(SD_WP_ERASE_SKIP); + } + + if (response_r1 & SD_OCR_CARD_ECC_DISABLED) + { + return(SD_CARD_ECC_DISABLED); + } + + if (response_r1 & SD_OCR_ERASE_RESET) + { + return(SD_ERASE_RESET); + } + + if (response_r1 & SD_OCR_AKE_SEQ_ERROR) + { + return(SD_AKE_SEQ_ERROR); + } + return(errorstatus); +} + +/** + * @brief Checks for error conditions for R3 (OCR) response. + * @param None + * @retval SD_Error: SD Card Error code. + */ +static SD_Error CmdResp3Error(void) +{ + SD_Error errorstatus = SD_OK; + uint32_t status; + + status = SDIO->STA; + + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) + { + status = SDIO->STA; + } + + if (status & SDIO_FLAG_CTIMEOUT) + { + errorstatus = SD_CMD_RSP_TIMEOUT; + SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); + return(errorstatus); + } + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + return(errorstatus); +} + +/** + * @brief Checks for error conditions for R2 (CID or CSD) response. + * @param None + * @retval SD_Error: SD Card Error code. + */ +static SD_Error CmdResp2Error(void) +{ + SD_Error errorstatus = SD_OK; + uint32_t status; + + status = SDIO->STA; + + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND))) + { + status = SDIO->STA; + } + + if (status & SDIO_FLAG_CTIMEOUT) + { + errorstatus = SD_CMD_RSP_TIMEOUT; + SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); + return(errorstatus); + } + else if (status & SDIO_FLAG_CCRCFAIL) + { + errorstatus = SD_CMD_CRC_FAIL; + SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); + return(errorstatus); + } + + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + + return(errorstatus); +} + +/** + * @brief Checks for error conditions for R6 (RCA) response. + * @param cmd: The sent command index. + * @param prca: pointer to the variable that will contain the SD card relative + * address RCA. + * @retval SD_Error: SD Card Error code. + */ +static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca) +{ + SD_Error errorstatus = SD_OK; + uint32_t status; + uint32_t response_r1; + + status = SDIO->STA; + + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND))) + { + status = SDIO->STA; + } + + if (status & SDIO_FLAG_CTIMEOUT) + { + errorstatus = SD_CMD_RSP_TIMEOUT; + SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); + return(errorstatus); + } + else if (status & SDIO_FLAG_CCRCFAIL) + { + errorstatus = SD_CMD_CRC_FAIL; + SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); + return(errorstatus); + } + + /*!< Check response received is of desired command */ + if (SDIO_GetCommandResponse() != cmd) + { + errorstatus = SD_ILLEGAL_CMD; + return(errorstatus); + } + + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + + /*!< We have received response, retrieve it. */ + response_r1 = SDIO_GetResponse(SDIO_RESP1); + + if (SD_ALLZERO == (response_r1 & (SD_R6_GENERAL_UNKNOWN_ERROR | SD_R6_ILLEGAL_CMD | SD_R6_COM_CRC_FAILED))) + { + *prca = (uint16_t) (response_r1 >> 16); + return(errorstatus); + } + + if (response_r1 & SD_R6_GENERAL_UNKNOWN_ERROR) + { + return(SD_GENERAL_UNKNOWN_ERROR); + } + + if (response_r1 & SD_R6_ILLEGAL_CMD) + { + return(SD_ILLEGAL_CMD); + } + + if (response_r1 & SD_R6_COM_CRC_FAILED) + { + return(SD_COM_CRC_FAILED); + } + + return(errorstatus); +} + +/** + * @brief Enables or disables the SDIO wide bus mode. + * @param NewState: new state of the SDIO wide bus mode. + * This parameter can be: ENABLE or DISABLE. + * @retval SD_Error: SD Card Error code. + */ +static SD_Error SDEnWideBus(FunctionalState NewState) +{ + SD_Error errorstatus = SD_OK; + + uint32_t scr[2] = {0, 0}; + + if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) + { + errorstatus = SD_LOCK_UNLOCK_FAILED; + return(errorstatus); + } + + /*!< Get SCR Register */ + errorstatus = FindSCR(RCA, scr); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + /*!< If wide bus operation to be enabled */ + if (NewState == ENABLE) + { + /*!< If requested card supports wide bus operation */ + if ((scr[1] & SD_WIDE_BUS_SUPPORT) != SD_ALLZERO) + { + /*!< Send CMD55 APP_CMD with argument as card's RCA.*/ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_APP_CMD); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + /*!< Send ACMD6 APP_CMD with argument as 2 for wide bus mode */ + SDIO_CmdInitStructure.SDIO_Argument = 0x2; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_SD_SET_BUSWIDTH; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_APP_SD_SET_BUSWIDTH); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + return(errorstatus); + } + else + { + errorstatus = SD_REQUEST_NOT_APPLICABLE; + return(errorstatus); + } + } /*!< If wide bus operation to be disabled */ + else + { + /*!< If requested card supports 1 bit mode operation */ + if ((scr[1] & SD_SINGLE_BUS_SUPPORT) != SD_ALLZERO) + { + /*!< Send CMD55 APP_CMD with argument as card's RCA.*/ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + + errorstatus = CmdResp1Error(SD_CMD_APP_CMD); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + /*!< Send ACMD6 APP_CMD with argument as 2 for wide bus mode */ + SDIO_CmdInitStructure.SDIO_Argument = 0x00; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_SD_SET_BUSWIDTH; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_APP_SD_SET_BUSWIDTH); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + return(errorstatus); + } + else + { + errorstatus = SD_REQUEST_NOT_APPLICABLE; + return(errorstatus); + } + } +} + +/** + * @brief Checks if the SD card is in programming state. + * @param pstatus: pointer to the variable that will contain the SD card state. + * @retval SD_Error: SD Card Error code. + */ +static SD_Error IsCardProgramming(uint8_t *pstatus) +{ + SD_Error errorstatus = SD_OK; + __IO uint32_t respR1 = 0, status = 0; + + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_STATUS; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + status = SDIO->STA; + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) + { + status = SDIO->STA; + } + + if (status & SDIO_FLAG_CTIMEOUT) + { + errorstatus = SD_CMD_RSP_TIMEOUT; + SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); + return(errorstatus); + } + else if (status & SDIO_FLAG_CCRCFAIL) + { + errorstatus = SD_CMD_CRC_FAIL; + SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); + return(errorstatus); + } + + status = (uint32_t)SDIO_GetCommandResponse(); + + /*!< Check response received is of desired command */ + if (status != SD_CMD_SEND_STATUS) + { + errorstatus = SD_ILLEGAL_CMD; + return(errorstatus); + } + + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + + + /*!< We have received response, retrieve it for analysis */ + respR1 = SDIO_GetResponse(SDIO_RESP1); + + /*!< Find out card status */ + *pstatus = (uint8_t) ((respR1 >> 9) & 0x0000000F); + + if ((respR1 & SD_OCR_ERRORBITS) == SD_ALLZERO) + { + return(errorstatus); + } + + if (respR1 & SD_OCR_ADDR_OUT_OF_RANGE) + { + return(SD_ADDR_OUT_OF_RANGE); + } + + if (respR1 & SD_OCR_ADDR_MISALIGNED) + { + return(SD_ADDR_MISALIGNED); + } + + if (respR1 & SD_OCR_BLOCK_LEN_ERR) + { + return(SD_BLOCK_LEN_ERR); + } + + if (respR1 & SD_OCR_ERASE_SEQ_ERR) + { + return(SD_ERASE_SEQ_ERR); + } + + if (respR1 & SD_OCR_BAD_ERASE_PARAM) + { + return(SD_BAD_ERASE_PARAM); + } + + if (respR1 & SD_OCR_WRITE_PROT_VIOLATION) + { + return(SD_WRITE_PROT_VIOLATION); + } + + if (respR1 & SD_OCR_LOCK_UNLOCK_FAILED) + { + return(SD_LOCK_UNLOCK_FAILED); + } + + if (respR1 & SD_OCR_COM_CRC_FAILED) + { + return(SD_COM_CRC_FAILED); + } + + if (respR1 & SD_OCR_ILLEGAL_CMD) + { + return(SD_ILLEGAL_CMD); + } + + if (respR1 & SD_OCR_CARD_ECC_FAILED) + { + return(SD_CARD_ECC_FAILED); + } + + if (respR1 & SD_OCR_CC_ERROR) + { + return(SD_CC_ERROR); + } + + if (respR1 & SD_OCR_GENERAL_UNKNOWN_ERROR) + { + return(SD_GENERAL_UNKNOWN_ERROR); + } + + if (respR1 & SD_OCR_STREAM_READ_UNDERRUN) + { + return(SD_STREAM_READ_UNDERRUN); + } + + if (respR1 & SD_OCR_STREAM_WRITE_OVERRUN) + { + return(SD_STREAM_WRITE_OVERRUN); + } + + if (respR1 & SD_OCR_CID_CSD_OVERWRIETE) + { + return(SD_CID_CSD_OVERWRITE); + } + + if (respR1 & SD_OCR_WP_ERASE_SKIP) + { + return(SD_WP_ERASE_SKIP); + } + + if (respR1 & SD_OCR_CARD_ECC_DISABLED) + { + return(SD_CARD_ECC_DISABLED); + } + + if (respR1 & SD_OCR_ERASE_RESET) + { + return(SD_ERASE_RESET); + } + + if (respR1 & SD_OCR_AKE_SEQ_ERROR) + { + return(SD_AKE_SEQ_ERROR); + } + + return(errorstatus); +} + +/** + * @brief Find the SD card SCR register value. + * @param rca: selected card address. + * @param pscr: pointer to the buffer that will contain the SCR value. + * @retval SD_Error: SD Card Error code. + */ +static SD_Error FindSCR(uint16_t rca, uint32_t *pscr) +{ + uint32_t index = 0; + SD_Error errorstatus = SD_OK; + uint32_t tempscr[2] = {0, 0}; + + /*!< Set Block Size To 8 Bytes */ + /*!< Send CMD55 APP_CMD with argument as card's RCA */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)8; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + /*!< Send CMD55 APP_CMD with argument as card's RCA */ + SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_APP_CMD); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; + SDIO_DataInitStructure.SDIO_DataLength = 8; + SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_8b; + SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; + SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; + SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; + SDIO_DataConfig(&SDIO_DataInitStructure); + + + /*!< Send ACMD51 SD_APP_SEND_SCR with argument as 0 */ + SDIO_CmdInitStructure.SDIO_Argument = 0x0; + SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_SEND_SCR; + SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; + SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; + SDIO_SendCommand(&SDIO_CmdInitStructure); + + errorstatus = CmdResp1Error(SD_CMD_SD_APP_SEND_SCR); + + if (errorstatus != SD_OK) + { + return(errorstatus); + } + + while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))) + { + if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET) + { + *(tempscr + index) = SDIO_ReadData(); + index++; + } + } + + if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); + errorstatus = SD_DATA_TIMEOUT; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); + errorstatus = SD_DATA_CRC_FAIL; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_RXOVERR); + errorstatus = SD_RX_OVERRUN; + return(errorstatus); + } + else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) + { + SDIO_ClearFlag(SDIO_FLAG_STBITERR); + errorstatus = SD_START_BIT_ERR; + return(errorstatus); + } + + /*!< Clear all the static flags */ + SDIO_ClearFlag(SDIO_STATIC_FLAGS); + + *(pscr + 1) = ((tempscr[0] & SD_0TO7BITS) << 24) | ((tempscr[0] & SD_8TO15BITS) << 8) | ((tempscr[0] & SD_16TO23BITS) >> 8) | ((tempscr[0] & SD_24TO31BITS) >> 24); + + *(pscr) = ((tempscr[1] & SD_0TO7BITS) << 24) | ((tempscr[1] & SD_8TO15BITS) << 8) | ((tempscr[1] & SD_16TO23BITS) >> 8) | ((tempscr[1] & SD_24TO31BITS) >> 24); + + return(errorstatus); +} + +/** + * @brief Converts the number of bytes in power of two and returns the power. + * @param NumberOfBytes: number of bytes. + * @retval None + */ +uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes) +{ + uint8_t count = 0; + + while (NumberOfBytes != 1) + { + NumberOfBytes >>= 1; + count++; + } + return(count); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_sdio_sd.h b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_sdio_sd.h new file mode 100644 index 000000000..d410b37fa --- /dev/null +++ b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Utilities/STM32_EVAL/STM322xG_EVAL/stm322xg_eval_sdio_sd.h @@ -0,0 +1,406 @@ +/** + ****************************************************************************** + * @file stm322xg_eval_sdio_sd.h + * @author MCD Application Team + * @version V5.0.3 + * @date 09-March-2012 + * @brief This file contains all the functions prototypes for the SD Card + * stm322xg_eval_sdio_sd driver firmware library. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2012 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM322xG_EVAL_SDIO_SD_H +#define __STM322xG_EVAL_SDIO_SD_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm322xg_eval.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL + * @{ + */ + +/** @addtogroup STM322xG_EVAL_SDIO_SD + * @{ + */ + +/** @defgroup STM322xG_EVAL_SDIO_SD_Exported_Types + * @{ + */ +typedef enum +{ +/** + * @brief SDIO specific error defines + */ + SD_CMD_CRC_FAIL = (1), /*!< Command response received (but CRC check failed) */ + SD_DATA_CRC_FAIL = (2), /*!< Data bock sent/received (CRC check Failed) */ + SD_CMD_RSP_TIMEOUT = (3), /*!< Command response timeout */ + SD_DATA_TIMEOUT = (4), /*!< Data time out */ + SD_TX_UNDERRUN = (5), /*!< Transmit FIFO under-run */ + SD_RX_OVERRUN = (6), /*!< Receive FIFO over-run */ + SD_START_BIT_ERR = (7), /*!< Start bit not detected on all data signals in widE bus mode */ + SD_CMD_OUT_OF_RANGE = (8), /*!< CMD's argument was out of range.*/ + SD_ADDR_MISALIGNED = (9), /*!< Misaligned address */ + SD_BLOCK_LEN_ERR = (10), /*!< Transferred block length is not allowed for the card or the number of transferred bytes does not match the block length */ + SD_ERASE_SEQ_ERR = (11), /*!< An error in the sequence of erase command occurs.*/ + SD_BAD_ERASE_PARAM = (12), /*!< An Invalid selection for erase groups */ + SD_WRITE_PROT_VIOLATION = (13), /*!< Attempt to program a write protect block */ + SD_LOCK_UNLOCK_FAILED = (14), /*!< Sequence or password error has been detected in unlock command or if there was an attempt to access a locked card */ + SD_COM_CRC_FAILED = (15), /*!< CRC check of the previous command failed */ + SD_ILLEGAL_CMD = (16), /*!< Command is not legal for the card state */ + SD_CARD_ECC_FAILED = (17), /*!< Card internal ECC was applied but failed to correct the data */ + SD_CC_ERROR = (18), /*!< Internal card controller error */ + SD_GENERAL_UNKNOWN_ERROR = (19), /*!< General or Unknown error */ + SD_STREAM_READ_UNDERRUN = (20), /*!< The card could not sustain data transfer in stream read operation. */ + SD_STREAM_WRITE_OVERRUN = (21), /*!< The card could not sustain data programming in stream mode */ + SD_CID_CSD_OVERWRITE = (22), /*!< CID/CSD overwrite error */ + SD_WP_ERASE_SKIP = (23), /*!< only partial address space was erased */ + SD_CARD_ECC_DISABLED = (24), /*!< Command has been executed without using internal ECC */ + SD_ERASE_RESET = (25), /*!< Erase sequence was cleared before executing because an out of erase sequence command was received */ + SD_AKE_SEQ_ERROR = (26), /*!< Error in sequence of authentication. */ + SD_INVALID_VOLTRANGE = (27), + SD_ADDR_OUT_OF_RANGE = (28), + SD_SWITCH_ERROR = (29), + SD_SDIO_DISABLED = (30), + SD_SDIO_FUNCTION_BUSY = (31), + SD_SDIO_FUNCTION_FAILED = (32), + SD_SDIO_UNKNOWN_FUNCTION = (33), + +/** + * @brief Standard error defines + */ + SD_INTERNAL_ERROR, + SD_NOT_CONFIGURED, + SD_REQUEST_PENDING, + SD_REQUEST_NOT_APPLICABLE, + SD_INVALID_PARAMETER, + SD_UNSUPPORTED_FEATURE, + SD_UNSUPPORTED_HW, + SD_ERROR, + SD_OK = 0 +} SD_Error; + +/** + * @brief SDIO Transfer state + */ +typedef enum +{ + SD_TRANSFER_OK = 0, + SD_TRANSFER_BUSY = 1, + SD_TRANSFER_ERROR +} SDTransferState; + +/** + * @brief SD Card States + */ +typedef enum +{ + SD_CARD_READY = ((uint32_t)0x00000001), + SD_CARD_IDENTIFICATION = ((uint32_t)0x00000002), + SD_CARD_STANDBY = ((uint32_t)0x00000003), + SD_CARD_TRANSFER = ((uint32_t)0x00000004), + SD_CARD_SENDING = ((uint32_t)0x00000005), + SD_CARD_RECEIVING = ((uint32_t)0x00000006), + SD_CARD_PROGRAMMING = ((uint32_t)0x00000007), + SD_CARD_DISCONNECTED = ((uint32_t)0x00000008), + SD_CARD_ERROR = ((uint32_t)0x000000FF) +}SDCardState; + + +/** + * @brief Card Specific Data: CSD Register + */ +typedef struct +{ + __IO uint8_t CSDStruct; /*!< CSD structure */ + __IO uint8_t SysSpecVersion; /*!< System specification version */ + __IO uint8_t Reserved1; /*!< Reserved */ + __IO uint8_t TAAC; /*!< Data read access-time 1 */ + __IO uint8_t NSAC; /*!< Data read access-time 2 in CLK cycles */ + __IO uint8_t MaxBusClkFrec; /*!< Max. bus clock frequency */ + __IO uint16_t CardComdClasses; /*!< Card command classes */ + __IO uint8_t RdBlockLen; /*!< Max. read data block length */ + __IO uint8_t PartBlockRead; /*!< Partial blocks for read allowed */ + __IO uint8_t WrBlockMisalign; /*!< Write block misalignment */ + __IO uint8_t RdBlockMisalign; /*!< Read block misalignment */ + __IO uint8_t DSRImpl; /*!< DSR implemented */ + __IO uint8_t Reserved2; /*!< Reserved */ + __IO uint32_t DeviceSize; /*!< Device Size */ + __IO uint8_t MaxRdCurrentVDDMin; /*!< Max. read current @ VDD min */ + __IO uint8_t MaxRdCurrentVDDMax; /*!< Max. read current @ VDD max */ + __IO uint8_t MaxWrCurrentVDDMin; /*!< Max. write current @ VDD min */ + __IO uint8_t MaxWrCurrentVDDMax; /*!< Max. write current @ VDD max */ + __IO uint8_t DeviceSizeMul; /*!< Device size multiplier */ + __IO uint8_t EraseGrSize; /*!< Erase group size */ + __IO uint8_t EraseGrMul; /*!< Erase group size multiplier */ + __IO uint8_t WrProtectGrSize; /*!< Write protect group size */ + __IO uint8_t WrProtectGrEnable; /*!< Write protect group enable */ + __IO uint8_t ManDeflECC; /*!< Manufacturer default ECC */ + __IO uint8_t WrSpeedFact; /*!< Write speed factor */ + __IO uint8_t MaxWrBlockLen; /*!< Max. write data block length */ + __IO uint8_t WriteBlockPaPartial; /*!< Partial blocks for write allowed */ + __IO uint8_t Reserved3; /*!< Reserded */ + __IO uint8_t ContentProtectAppli; /*!< Content protection application */ + __IO uint8_t FileFormatGrouop; /*!< File format group */ + __IO uint8_t CopyFlag; /*!< Copy flag (OTP) */ + __IO uint8_t PermWrProtect; /*!< Permanent write protection */ + __IO uint8_t TempWrProtect; /*!< Temporary write protection */ + __IO uint8_t FileFormat; /*!< File Format */ + __IO uint8_t ECC; /*!< ECC code */ + __IO uint8_t CSD_CRC; /*!< CSD CRC */ + __IO uint8_t Reserved4; /*!< always 1*/ +} SD_CSD; + +/** + * @brief Card Identification Data: CID Register + */ +typedef struct +{ + __IO uint8_t ManufacturerID; /*!< ManufacturerID */ + __IO uint16_t OEM_AppliID; /*!< OEM/Application ID */ + __IO uint32_t ProdName1; /*!< Product Name part1 */ + __IO uint8_t ProdName2; /*!< Product Name part2*/ + __IO uint8_t ProdRev; /*!< Product Revision */ + __IO uint32_t ProdSN; /*!< Product Serial Number */ + __IO uint8_t Reserved1; /*!< Reserved1 */ + __IO uint16_t ManufactDate; /*!< Manufacturing Date */ + __IO uint8_t CID_CRC; /*!< CID CRC */ + __IO uint8_t Reserved2; /*!< always 1 */ +} SD_CID; + +/** + * @brief SD Card Status + */ +typedef struct +{ + __IO uint8_t DAT_BUS_WIDTH; + __IO uint8_t SECURED_MODE; + __IO uint16_t SD_CARD_TYPE; + __IO uint32_t SIZE_OF_PROTECTED_AREA; + __IO uint8_t SPEED_CLASS; + __IO uint8_t PERFORMANCE_MOVE; + __IO uint8_t AU_SIZE; + __IO uint16_t ERASE_SIZE; + __IO uint8_t ERASE_TIMEOUT; + __IO uint8_t ERASE_OFFSET; +} SD_CardStatus; + + +/** + * @brief SD Card information + */ +typedef struct +{ + SD_CSD SD_csd; + SD_CID SD_cid; + uint64_t CardCapacity; /*!< Card Capacity */ + uint32_t CardBlockSize; /*!< Card Block Size */ + uint16_t RCA; + uint8_t CardType; +} SD_CardInfo; + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_SDIO_SD_Exported_Constants + * @{ + */ + +/** + * @brief SDIO Commands Index + */ +#define SD_CMD_GO_IDLE_STATE ((uint8_t)0) +#define SD_CMD_SEND_OP_COND ((uint8_t)1) +#define SD_CMD_ALL_SEND_CID ((uint8_t)2) +#define SD_CMD_SET_REL_ADDR ((uint8_t)3) /*!< SDIO_SEND_REL_ADDR for SD Card */ +#define SD_CMD_SET_DSR ((uint8_t)4) +#define SD_CMD_SDIO_SEN_OP_COND ((uint8_t)5) +#define SD_CMD_HS_SWITCH ((uint8_t)6) +#define SD_CMD_SEL_DESEL_CARD ((uint8_t)7) +#define SD_CMD_HS_SEND_EXT_CSD ((uint8_t)8) +#define SD_CMD_SEND_CSD ((uint8_t)9) +#define SD_CMD_SEND_CID ((uint8_t)10) +#define SD_CMD_READ_DAT_UNTIL_STOP ((uint8_t)11) /*!< SD Card doesn't support it */ +#define SD_CMD_STOP_TRANSMISSION ((uint8_t)12) +#define SD_CMD_SEND_STATUS ((uint8_t)13) +#define SD_CMD_HS_BUSTEST_READ ((uint8_t)14) +#define SD_CMD_GO_INACTIVE_STATE ((uint8_t)15) +#define SD_CMD_SET_BLOCKLEN ((uint8_t)16) +#define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17) +#define SD_CMD_READ_MULT_BLOCK ((uint8_t)18) +#define SD_CMD_HS_BUSTEST_WRITE ((uint8_t)19) +#define SD_CMD_WRITE_DAT_UNTIL_STOP ((uint8_t)20) /*!< SD Card doesn't support it */ +#define SD_CMD_SET_BLOCK_COUNT ((uint8_t)23) /*!< SD Card doesn't support it */ +#define SD_CMD_WRITE_SINGLE_BLOCK ((uint8_t)24) +#define SD_CMD_WRITE_MULT_BLOCK ((uint8_t)25) +#define SD_CMD_PROG_CID ((uint8_t)26) /*!< reserved for manufacturers */ +#define SD_CMD_PROG_CSD ((uint8_t)27) +#define SD_CMD_SET_WRITE_PROT ((uint8_t)28) +#define SD_CMD_CLR_WRITE_PROT ((uint8_t)29) +#define SD_CMD_SEND_WRITE_PROT ((uint8_t)30) +#define SD_CMD_SD_ERASE_GRP_START ((uint8_t)32) /*!< To set the address of the first write + block to be erased. (For SD card only) */ +#define SD_CMD_SD_ERASE_GRP_END ((uint8_t)33) /*!< To set the address of the last write block of the + continuous range to be erased. (For SD card only) */ +#define SD_CMD_ERASE_GRP_START ((uint8_t)35) /*!< To set the address of the first write block to be erased. + (For MMC card only spec 3.31) */ + +#define SD_CMD_ERASE_GRP_END ((uint8_t)36) /*!< To set the address of the last write block of the + continuous range to be erased. (For MMC card only spec 3.31) */ + +#define SD_CMD_ERASE ((uint8_t)38) +#define SD_CMD_FAST_IO ((uint8_t)39) /*!< SD Card doesn't support it */ +#define SD_CMD_GO_IRQ_STATE ((uint8_t)40) /*!< SD Card doesn't support it */ +#define SD_CMD_LOCK_UNLOCK ((uint8_t)42) +#define SD_CMD_APP_CMD ((uint8_t)55) +#define SD_CMD_GEN_CMD ((uint8_t)56) +#define SD_CMD_NO_CMD ((uint8_t)64) + +/** + * @brief Following commands are SD Card Specific commands. + * SDIO_APP_CMD should be sent before sending these commands. + */ +#define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6) /*!< For SD Card only */ +#define SD_CMD_SD_APP_STAUS ((uint8_t)13) /*!< For SD Card only */ +#define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22) /*!< For SD Card only */ +#define SD_CMD_SD_APP_OP_COND ((uint8_t)41) /*!< For SD Card only */ +#define SD_CMD_SD_APP_SET_CLR_CARD_DETECT ((uint8_t)42) /*!< For SD Card only */ +#define SD_CMD_SD_APP_SEND_SCR ((uint8_t)51) /*!< For SD Card only */ +#define SD_CMD_SDIO_RW_DIRECT ((uint8_t)52) /*!< For SD I/O Card only */ +#define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53) /*!< For SD I/O Card only */ + +/** + * @brief Following commands are SD Card Specific security commands. + * SDIO_APP_CMD should be sent before sending these commands. + */ +#define SD_CMD_SD_APP_GET_MKB ((uint8_t)43) /*!< For SD Card only */ +#define SD_CMD_SD_APP_GET_MID ((uint8_t)44) /*!< For SD Card only */ +#define SD_CMD_SD_APP_SET_CER_RN1 ((uint8_t)45) /*!< For SD Card only */ +#define SD_CMD_SD_APP_GET_CER_RN2 ((uint8_t)46) /*!< For SD Card only */ +#define SD_CMD_SD_APP_SET_CER_RES2 ((uint8_t)47) /*!< For SD Card only */ +#define SD_CMD_SD_APP_GET_CER_RES1 ((uint8_t)48) /*!< For SD Card only */ +#define SD_CMD_SD_APP_SECURE_READ_MULTIPLE_BLOCK ((uint8_t)18) /*!< For SD Card only */ +#define SD_CMD_SD_APP_SECURE_WRITE_MULTIPLE_BLOCK ((uint8_t)25) /*!< For SD Card only */ +#define SD_CMD_SD_APP_SECURE_ERASE ((uint8_t)38) /*!< For SD Card only */ +#define SD_CMD_SD_APP_CHANGE_SECURE_AREA ((uint8_t)49) /*!< For SD Card only */ +#define SD_CMD_SD_APP_SECURE_WRITE_MKB ((uint8_t)48) /*!< For SD Card only */ + +/* Uncomment the following line to select the SDIO Data transfer mode */ +#if !defined (SD_DMA_MODE) && !defined (SD_POLLING_MODE) +#define SD_DMA_MODE ((uint32_t)0x00000000) +/*#define SD_POLLING_MODE ((uint32_t)0x00000002)*/ +#endif + +/** + * @brief SD detection on its memory slot + */ +#define SD_PRESENT ((uint8_t)0x01) +#define SD_NOT_PRESENT ((uint8_t)0x00) + +/** + * @brief Supported SD Memory Cards + */ +#define SDIO_STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000) +#define SDIO_STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001) +#define SDIO_HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002) +#define SDIO_MULTIMEDIA_CARD ((uint32_t)0x00000003) +#define SDIO_SECURE_DIGITAL_IO_CARD ((uint32_t)0x00000004) +#define SDIO_HIGH_SPEED_MULTIMEDIA_CARD ((uint32_t)0x00000005) +#define SDIO_SECURE_DIGITAL_IO_COMBO_CARD ((uint32_t)0x00000006) +#define SDIO_HIGH_CAPACITY_MMC_CARD ((uint32_t)0x00000007) + +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_SDIO_SD_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM322xG_EVAL_SDIO_SD_Exported_Functions + * @{ + */ +void SD_DeInit(void); +SD_Error SD_Init(void); +SDTransferState SD_GetStatus(void); +SDCardState SD_GetState(void); +uint8_t SD_Detect(void); +SD_Error SD_PowerON(void); +SD_Error SD_PowerOFF(void); +SD_Error SD_InitializeCards(void); +SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo); +SD_Error SD_GetCardStatus(SD_CardStatus *cardstatus); +SD_Error SD_EnableWideBusOperation(uint32_t WideMode); +SD_Error SD_SelectDeselect(uint32_t addr); +SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize); +SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks); +SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize); +SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks); +SDTransferState SD_GetTransferState(void); +SD_Error SD_StopTransfer(void); +SD_Error SD_Erase(uint32_t startaddr, uint32_t endaddr); +SD_Error SD_SendStatus(uint32_t *pcardstatus); +SD_Error SD_SendSDStatus(uint32_t *psdstatus); +SD_Error SD_ProcessIRQSrc(void); +void SD_ProcessDMAIRQ(void); +SD_Error SD_WaitReadOperation(void); +SD_Error SD_WaitWriteOperation(void); +#ifdef __cplusplus +} +#endif + +#endif /* __STM322xG_EVAL_SDIO_SD_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/_htmresc/CMSIS_Logo_Final.jpg b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/_htmresc/CMSIS_Logo_Final.jpg new file mode 100644 index 000000000..e04560175 Binary files /dev/null and b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/_htmresc/CMSIS_Logo_Final.jpg differ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/_htmresc/logo.bmp b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/_htmresc/logo.bmp new file mode 100644 index 000000000..18a621e81 Binary files /dev/null and b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/_htmresc/logo.bmp differ diff --git a/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/stm32f2xx_stdperiph_lib_um.chm b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/stm32f2xx_stdperiph_lib_um.chm new file mode 100644 index 000000000..95f2e4ab6 Binary files /dev/null and b/src/x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/stm32f2xx_stdperiph_lib_um.chm differ diff --git a/src/x9d/spi.c b/src/x9d/aspi.cpp similarity index 91% rename from src/x9d/spi.c rename to src/x9d/aspi.cpp index 0f76b6195..b6e4f2c31 100644 --- a/src/x9d/spi.c +++ b/src/x9d/aspi.cpp @@ -9,8 +9,11 @@ * * ****************************************************************************** */ -#include "spi.h" -#include "hal.h" + +#include "../open9x.h" + +#define __no_operation __NOP + /** **********send command to lcd************** */ diff --git a/src/x9d/spi.h b/src/x9d/aspi.h similarity index 94% rename from src/x9d/spi.h rename to src/x9d/aspi.h index 7ddce36e5..de5332512 100644 --- a/src/x9d/spi.h +++ b/src/x9d/aspi.h @@ -8,8 +8,8 @@ * * ****************************************************************************** */ -#ifndef _SPI_H_ -#define _SPI_H_ +#ifndef _ASPI_H_ +#define _ASPI_H_ #include "stm32f2xx.h" diff --git a/src/x9d/audio_driver.cpp b/src/x9d/audio_driver.cpp new file mode 100644 index 000000000..8721d81a8 --- /dev/null +++ b/src/x9d/audio_driver.cpp @@ -0,0 +1,102 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "../open9x.h" + +volatile uint8_t Buzzer_count ; + +// Must NOT be in flash, PDC needs a RAM source. +// Amplitude reduced to 30% to allow for voice volume +uint16_t Sine_values[] = +{ + 2048,2085,2123,2160,2197,2233,2268,2303,2336,2369, + 2400,2430,2458,2485,2510,2533,2554,2573,2590,2605, + 2618,2629,2637,2643,2646,2648,2646,2643,2637,2629, + 2618,2605,2590,2573,2554,2533,2510,2485,2458,2430, + 2400,2369,2336,2303,2268,2233,2197,2160,2123,2085, + 2048,2010,1972,1935,1898,1862,1826,1792,1758,1726, + 1695,1665,1637,1610,1585,1562,1541,1522,1505,1490, + 1477,1466,1458,1452,1448,1448,1448,1452,1458,1466, + 1477,1490,1505,1522,1541,1562,1585,1610,1637,1665, + 1695,1726,1758,1792,1826,1862,1898,1935,1972,2010 +}; + +// Sound routines +void startSound() +{ +} + +uint32_t currentFrequency = 0; + +uint32_t getFrequency() +{ + return currentFrequency; +} + +void setFrequency(uint32_t frequency) +{ + if (currentFrequency != frequency) { + currentFrequency = frequency; + } +} + +// Start TIMER1 at 100000Hz, used for DACC trigger +void start_timer1() +{ +} + + +// Configure DAC0 (or DAC1 for REVA) +// Not sure why PB14 has not be allocated to the DAC, although it is an EXTRA function +// So maybe it is automatically done +void initDac() +{ +} + +void end_sound() +{ +} + +// Set up for volume control (TWI0) +// Need PA3 and PA4 set to peripheral A +void init_twi() +{ +} + +void setVolume( unsigned char volume ) +{ +} +/* +void read_volume() +{ +} */ diff --git a/src/x9d/audio_driver.h b/src/x9d/audio_driver.h new file mode 100644 index 000000000..6c2a8c760 --- /dev/null +++ b/src/x9d/audio_driver.h @@ -0,0 +1,60 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef audio_driver_h +#define audio_driver_h + +#define NUM_VOL_LEVELS 24 + +void startSound( void ) ; +void setFrequency( uint32_t frequency ); +uint32_t getFrequency(); +void start_timer1( void ); +void initDac( void ) ; +void end_sound( void ) ; + +extern uint16_t *nextAudioData; +extern uint16_t nextAudioSize; + +inline void toneStart() +{ +} + +inline void toneStop() +{ +} + +extern void init_twi( void ) ; +extern void setVolume( register uint8_t volume ) ; + +#endif diff --git a/src/x9d/buttons.c b/src/x9d/buttons.c index 975d1a3bb..ae1cf170b 100644 --- a/src/x9d/buttons.c +++ b/src/x9d/buttons.c @@ -1,9 +1,6 @@ -#include "stm32f2xx.h" -#include "hal.h" -#include "buttons.h" +#include "../open9x.h" - -void Buttons_Init() //上拉输入状态 +void Buttons_Init() { GPIO_InitTypeDef GPIO_InitStructure; /* GPIOC GPIOD clock enable */ @@ -56,7 +53,7 @@ void detect_buttons() { /*short t_pin;short t_pin1; static short key_down_interval; - key_down_interval++;//计数循环多少次有键按下 + key_down_interval++; t_pin = (~(GPIOC->IDR)) &(PIN_BUTTON_UP | PIN_BUTTON_ENTER | PIN_BUTTON_DOWN); t_pin1=(~(GPIOB->IDR)) &(PIN_POWER | PIN_BIND); @@ -132,4 +129,4 @@ void detect_buttons() pin_status = t_pin; pin_status1=t_pin1;*/ -} \ No newline at end of file +} diff --git a/src/x9d/buttons.h b/src/x9d/buttons.h deleted file mode 100644 index c91a2b5a2..000000000 --- a/src/x9d/buttons.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef _BUTTONS_H_ -#define _BUTTONS_H_ - - -#endif \ No newline at end of file diff --git a/src/x9d/diskio.cpp b/src/x9d/diskio.cpp new file mode 100644 index 000000000..bafc0f307 --- /dev/null +++ b/src/x9d/diskio.cpp @@ -0,0 +1,138 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +/*-----------------------------------------------------------------------*/ +/* MMCv3/SDv1/SDv2 (in SPI mode) control module (C)ChaN, 2010 */ +/*-----------------------------------------------------------------------*/ +/* Only rcvr_spi(), xmit_spi(), sdPoll10ms() and some macros */ +/* are platform dependent. */ +/*-----------------------------------------------------------------------*/ + +#include +#include "../FatFs/diskio.h" +#include "../FatFs/ff.h" +#include "../CoOS/kernel/CoOS.h" + + + +uint32_t Card_ID[4] ; +uint32_t Card_SCR[2] ; +uint32_t Card_CSD[4] ; +int32_t Card_state; // = SD_ST_STARTUP ; +volatile uint32_t Card_initialized = 0; +uint32_t Sd_rca ; +uint32_t Cmd_A41_resp ; +uint8_t cardType; +uint32_t transSpeed; + +/*-----------------------------------------------------------------------*/ +/* Lock / unlock functions */ +/*-----------------------------------------------------------------------*/ +int ff_cre_syncobj (BYTE vol, _SYNC_t *mutex) +{ + *mutex = CoCreateMutex(); + return 1; +} + +int ff_req_grant (_SYNC_t mutex) +{ + CoEnterMutexSection(mutex); + return 1; +} + +void ff_rel_grant (_SYNC_t mutex) +{ + CoLeaveMutexSection(mutex); +} + +int ff_del_syncobj (_SYNC_t mutex) +{ + return 1; +} + +DSTATUS disk_initialize ( + BYTE drv /* Physical drive nmuber (0) */ + ) +{ + return RES_NOTRDY; +} + +DSTATUS disk_status ( + BYTE drv /* Physical drive number (0) */ + ) +{ + return RES_NOTRDY; +} + + +DRESULT disk_read ( + BYTE drv, /* Physical drive nmuber (0) */ + BYTE *buff, /* Pointer to the data buffer to store read data */ + DWORD sector, /* Start sector number (LBA) */ + BYTE count /* Sector count (1..255) */ + ) +{ + return RES_NOTRDY; +} + +DRESULT disk_write ( + BYTE drv, /* Physical drive nmuber (0) */ + const BYTE *buff, /* Pointer to the data to be written */ + DWORD sector, /* Start sector number (LBA) */ + BYTE count /* Sector count (1..255) */ + ) +{ + return RES_NOTRDY; +} + +DRESULT disk_ioctl ( + BYTE drv, /* Physical drive nmuber (0) */ + BYTE ctrl, /* Control code */ + void *buff /* Buffer to send/receive control data */ + ) +{ + return RES_NOTRDY; +} + +void sdInit() +{ +} + +void sdMountPoll() +{ +} + +uint32_t sd_card_mounted( void ) +{ + return 0; // CardIsConnected() && Card_state == SD_ST_MOUNTED; +} diff --git a/src/x9d/eeprom_driver.cpp b/src/x9d/eeprom_driver.cpp new file mode 100644 index 000000000..087fbdc9a --- /dev/null +++ b/src/x9d/eeprom_driver.cpp @@ -0,0 +1,52 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "../open9x.h" + +void init_spi() +{ +} + +void eeprom_write_enable() +{ +} + +uint32_t eeprom_read_status() +{ + return !Spi_complete; +} + +uint32_t spi_PDC_action( register uint8_t *command, register uint8_t *tx, register uint8_t *rx, register uint32_t comlen, register uint32_t count ) +{ + return 0; +} diff --git a/src/x9d/keys_driver.cpp b/src/x9d/keys_driver.cpp new file mode 100644 index 000000000..afdf552bc --- /dev/null +++ b/src/x9d/keys_driver.cpp @@ -0,0 +1,169 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "../open9x.h" + + +// keys: +// KEY_EXIT PA31 (PC24) +// KEY_MENU PB6 (PB5) +// KEY_DOWN LCD5 PC3 (PC5) +// KEY_UP LCD6 PC2 (PC1) +// KEY_RIGHT LCD4 PC4 (PC4) +// KEY_LEFT LCD3 PC5 (PC3) +// Reqd. bit 6 LEFT, 5 RIGHT, 4 UP, 3 DOWN 2 EXIT 1 MENU +// LCD pins 5 DOWN, 4 RIGHT, 3 LEFT, 1 UP +uint32_t readKeys() +{ + register uint32_t x = GPIOC->IDR; // 6 LEFT, 5 RIGHT, 4 DOWN, 3 UP + register uint32_t y = 0; + + if (x & 0x00000020) + y |= 0x02 << KEY_ENTER; + if (x & 0x00000010) + y |= 0x02 << KEY_PLUS; + if (x & 0x00000008) + y |= 0x02 << KEY_MINUS; + if (x & 0x00000002) + y |= 0x02 << KEY_MENU; + if (x & 0x00000040) + y |= 0x02 << KEY_PAGE; + if (x & 0x01000000) + y |= 0x02 << KEY_EXIT; + + // printf("readKeys(): %x => %x\n", x, y); fflush(stdout); + + return y ; +} + +uint32_t readTrims() +{ +#if 0 + + uint32_t trims; + uint32_t trima; + + trims = 0; + + trima = PIOA->PIO_PDSR; + +// TRIM_LH_DOWN PA7 (PA23) +#if defined(REVA) + if ( ( trima & 0x0080 ) == 0 ) +#else + if ((trima & 0x00800000) == 0) +#endif + { + trims |= 1; + } + +// TRIM_LV_DOWN PA27 (PA24) +#if defined(REVA) + if ( ( trima & 0x08000000 ) == 0 ) +#else + if ((trima & 0x01000000) == 0) +#endif + { + trims |= 4; + } + +// TRIM_RV_UP PA30 (PA1) +#if defined(REVA) + if ( ( trima & 0x40000000 ) == 0 ) +#else + if ((trima & 0x00000002) == 0) +#endif + { + trims |= 0x20; + } + +// TRIM_RH_DOWN PA29 (PA0) +#if defined(REVA) + if ( ( trima & 0x20000000 ) == 0 ) +#else + if ((trima & 0x00000001) == 0) +#endif + { + trims |= 0x40; + } + +// TRIM_LH_UP PB4 + if ((PIOB->PIO_PDSR & 0x10) == 0) { + trims |= 2; + } + + trima = PIOC->PIO_PDSR; +// TRIM_LV_UP PC28 + if ((trima & 0x10000000) == 0) { + trims |= 8; + } + +// TRIM_RV_DOWN PC10 + if ((trima & 0x00000400) == 0) { + trims |= 0x10; + } + +// TRIM_RH_UP PC9 + if ((trima & 0x00000200) == 0) { + trims |= 0x80; + } + + return trims; +#endif + return 0; +} + +uint8_t keyDown() +{ + return ~readKeys() & 0x7E ; +} + +/* TODO common to ARM */ +void readKeysAndTrims() +{ + register uint32_t i; + + uint8_t enuk = KEY_MENU; + uint8_t in = ~readKeys(); + for (i = 1; i < 7; i++) { + keys[enuk].input(in & (1 << i), (EnumKeys) enuk); + ++enuk; + } + + in = readTrims(); + + for (i = 1; i < 256; i <<= 1) { + keys[enuk].input(in & i, (EnumKeys) enuk); + ++enuk; + } +} diff --git a/src/x9d/lcd_driver.cpp b/src/x9d/lcd_driver.cpp index c31144b96..359160228 100644 --- a/src/x9d/lcd_driver.cpp +++ b/src/x9d/lcd_driver.cpp @@ -9,7 +9,7 @@ ****************************************************************************** */ -#include "open9x.h" +#include "../open9x.h" #define WriteData(x) AspiData(x) #define WriteCommand(x) AspiCmd(x) @@ -118,3 +118,7 @@ void lcdInit() LCD_Hardware_Init(); LCD_Init(); } + +void lcdSetRefVolt(uint8_t val) +{ +} diff --git a/src/x9d/pulses_driver.cpp b/src/x9d/pulses_driver.cpp new file mode 100644 index 000000000..a8c5ab21b --- /dev/null +++ b/src/x9d/pulses_driver.cpp @@ -0,0 +1,52 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "../open9x.h" + +void init_main_ppm( uint32_t period, uint32_t out_enable ) +{ +} + +void disable_main_ppm() +{ +} + +// Initialise the SSC to allow PXX output. +// TD is on PA17, peripheral A +void init_ssc() +{ +} + +void disable_ssc() +{ +} diff --git a/src/x9d/rtc_driver.cpp b/src/x9d/rtc_driver.cpp new file mode 100644 index 000000000..2a6561a67 --- /dev/null +++ b/src/x9d/rtc_driver.cpp @@ -0,0 +1,43 @@ +/* + * Authors (alphabetical order) + * - Bertrand Songis + * - Bryan J. Rentoul (Gruvin) + * - Cameron Weeks + * - Erez Raviv + * - Jean-Pierre Parisy + * - Karl Szmutny + * - Michael Blandford + * - Michal Hlavinka + * - Pat Mackenzie + * - Philip Moss + * - Rob Thomson + * - Romolo Manfredini + * - Thomas Husterer + * + * open9x is based on code named + * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, + * er9x by Erez Raviv: http://code.google.com/p/er9x/, + * and the original (and ongoing) project by + * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "../open9x.h" + + +void rtc_settime(struct gtm * t) +{ +} + +void rtc_init() +{ +}